[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n.parcel-cache\n\n# Next.js build output\n.next\nout\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and not Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# vuepress v2.x temp and cache directory\n.temp\n.cache\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n\nnode_modules"
  },
  {
    "path": ".vscode/launch.json",
    "content": "// A launch configuration that launches the extension inside a new window\n// Use IntelliSense to learn about possible attributes.\n// Hover to view descriptions of existing attributes.\n// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Extension\",\n      \"type\": \"extensionHost\",\n      \"request\": \"launch\",\n      \"args\": [\n        \"--extensionDevelopmentPath=${workspaceFolder}/extension/vscode/shadeup\",\n        \"${workspaceFolder}/cli/test/vite-project/src/\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\"><a href=\"https://unreal.shadeup.dev\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"200\" src=\"https://unreal.shadeup.dev/favicon.png\" alt=\"Shadeup logo\"></a></p>\n\n<h1 align=\"center\"><a href=\"https://shadeup.dev\">Shadeup</a></h1>\n\n## Write **WebGPU** shaders without the boilerplate\n\nRepository for the Shadeup ecosystem and tooling [Shadeup.dev](https://shadeup.dev/)\n\nThis currently includes:\n\n- [Shadeup Language](./lang) - partial codebase\n- [Shadeup Compiler Tools](./cli) `npm i -g @shadeup/cli`\n- [Shadeup Engine Package](./package) `npm i shadeup`\n- [Shadeup - Unreal Engine](./unreal-engine) `npm i -g @shadeup/unreal`\n- [Shadeup VS Code extension](./extension/vscode) - [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=Shadeup.shadeup-vscode)\n\n---\n"
  },
  {
    "path": "cli/README.md",
    "content": "<p align=\"center\"><a href=\"https://shadeup.dev\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"200\" src=\"https://shadeup.dev/favicon.png\" alt=\"Shadeup logo\"></a></p>\n\n<h1 align=\"center\"><a href=\"https://shadeup.dev\">Shadeup CLI</a></h1>\n\n# Shadeup compiler tools\n\n## Installation\n\n```sh\nnpm install -g @shadeup/cli\n```\n\n## Usage\n\n```sh\nshadeup --help\n```\n\n```sh\nCLI tool for compiling shadeup files\n\nOptions:\n  -V, --version           output the version number\n  -v\n  -h, --help              display help for command\n\nCommands:\n  build [options] <file>  Build file\n  watch <file>            Watch a shadeup file and recompile on change\n  preview <file>          Live preview of a shadeup file in electron\n```\n\n## Example\n\n```ts\n// main.shadeup\nfn main() {\n  draw(shader {\n    out.color = (in.uv, 0.5, 1.0);\n  });\n}\n```\n\n```sh\n$ shadeup build main.shadeup\n```\n\nAfter running the above command, you should find the following files in the same directory as `main.shadeup`:\n\n- `main.js`\n- `main.d.ts`\n\nYou can use the above files inside of a vite or webpack project to use the shader in your web application.\n\n```sh\n$ npm i shadeup\n```\n\n```js\n// example.ts\nimport { makeShadeupInstance } from \"./main\";\n\nconst canvas = document.querySelector<HTMLCanvasElement>(\"#canvas\")!;\n\n(async () => {\n  const engine = await makeShadeupInstance(canvas);\n\n  // Optionally enable the UI\n  await engine.enableUI();\n\n  // The frame loop will start automatically\n\n  // You can call pub functions on the engine instance\n  // engine.files.main.exampleFunction();\n})();\n```\n\n## Preview mode\n\n```sh\n$ shadeup preview main.shadeup\n```\n\nThis will open an electron window with the shader preview. You can use this to quickly test your shader without having to set up a web project.\n\n![Preview](https://i.imgur.com/PVjn7BA.png)\n"
  },
  {
    "path": "cli/cli.js",
    "content": "#!/usr/bin/env node\n\nimport colors from \"colors\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport inquirer from \"inquirer\";\n\nimport { program } from \"commander\";\n\nimport * as url from \"url\";\nimport {\n  makeCompiler,\n  makeIncrementalCompiler,\n} from \"./compiler-dist/compiler.js\";\n\nif (typeof __dirname == \"undefined\") {\n  global[\"__filename\"] = url.fileURLToPath(import.meta.url);\n  global[\"__dirname\"] = url.fileURLToPath(new URL(\".\", import.meta.url));\n}\n\nfunction findCommonPath(paths) {\n  // Find the common path without the filename or extension\n  if (paths.length == 0) return \"\";\n  if (paths.length == 1) return path.dirname(paths[0]) + \"/\";\n\n  paths = paths.map((p) => p).sort((a, b) => b.length - a.length);\n  let longest = paths[0];\n  for (let i = 0; i < longest.length; i++) {\n    let char = longest[i];\n    for (let path of paths) {\n      if (path[i] != char) {\n        return longest.slice(0, i);\n      }\n    }\n  }\n}\n\nfunction scanImports(baseFile) {\n  let imports = new Set();\n  imports.add(baseFile);\n  let data = fs.readFileSync(baseFile, \"utf8\");\n  let lines = data.split(\"\\n\");\n  for (let line of lines) {\n    let match = line.match(/import[^\"]+\"([^\"]*)\"/);\n    if (match) {\n      let importPath = match[1];\n      if (!importPath.endsWith(\".shadeup\")) {\n        importPath += \".shadeup\";\n      }\n      if (importPath.startsWith(\"/\")) {\n        continue;\n      }\n      let importFile = path.resolve(path.dirname(baseFile), importPath);\n      if (!imports.has(importFile)) {\n        imports.add(importFile);\n        scanImports(importFile).forEach((i) => imports.add(i));\n      }\n    }\n  }\n  return imports;\n}\n\nprogram\n  .name(\"shadeup\")\n  .description(\"CLI tool for compiling shadeup files\")\n  .version(\"1.3.0\")\n  .option(\"-v\")\n  .action(async (opts) => {\n    console.log(\"Shadeup v1.3.0\".magenta);\n    if (opts.v) {\n      return;\n    }\n    try {\n    } catch (e) {\n      console.error(e);\n    }\n  });\n\nfunction normalizePath(p) {\n  return p.replace(/\\\\/g, \"/\");\n}\n\nfunction printErrors(errors, common) {\n  for (let error of errors) {\n    let path = (common + error.file)\n      .replace(\".ts\", \".shadeup\")\n      .replace(/^\\/([A-Z]:)/g, \"$1\")\n      .replace(/\\/\\//g, \"/\");\n    console.error(\n      path + \"\\n\\x1b[31m\" + error.message.replace(error.file, path) + \"\\x1b[0m\"\n    );\n  }\n}\n\nconst buildFiles = async (files, options) => {\n  let compile = await makeCompiler();\n  let outputs = [];\n\n  let common = normalizePath(findCommonPath(files));\n\n  outputs.push(\n    compile({\n      files: files.map((f) => {\n        f = normalizePath(f).replace(common, \"\");\n        let data = fs.readFileSync(f, \"utf8\");\n        let filename = f.replace(\".shadeup\", \"\");\n        return { name: filename, body: data };\n      }),\n    })\n  );\n\n  let orig = console.log;\n  console.log = () => {};\n  let outs = await Promise.all(outputs);\n  console.log = orig;\n\n  for (let i = 0; i < outs.length; i++) {\n    let out = outs[i];\n\n    if (out.errors) {\n      printErrors(out.errors, common);\n\n      continue;\n    }\n    let file = files[i];\n    let outPath = options.output || file.replace(\".shadeup\", \".js\");\n    console.log(`Writing ${outPath}`);\n    fs.writeFileSync(outPath, out.output);\n\n    if (out.dts) {\n      let dtsPath = file.replace(\".shadeup\", \".d.ts\");\n      if (options.output) {\n        dtsPath = options.output.replace(\".js\", \".d.ts\");\n      }\n      console.log(`Writing ${dtsPath}`);\n      fs.writeFileSync(dtsPath, out.dts);\n    }\n  }\n};\n\nprogram\n  .command(\"build\")\n  .description(\"Build file\")\n  .option(\"-o, --output <path>\", \"Output path\", \"\")\n  .argument(\"file\", \"File to build\")\n  .action(async (file, options) => {\n    file = path.resolve(file);\n    if (!fs.existsSync(file)) {\n      console.error(`File ${file} does not exist`);\n      return;\n    }\n\n    let fileSet = scanImports(file);\n    let files = [...fileSet.values()];\n\n    if (!options.output) {\n      delete options.output;\n    }\n    await buildFiles(files, {\n      output: file.replace(\".shadeup\", \".js\"),\n      ...options,\n    });\n  });\n\nconst debounce = (fn, time) => {\n  let timeout;\n  return (...args) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => {\n      fn(...args);\n    }, time);\n  };\n};\n\nconst setupWatcher = async (file, options, outdir = \"\") => {\n  file = path.resolve(file);\n  let comp = await makeIncrementalCompiler();\n  let rebuild = debounce(async () => {\n    let fileSet = scanImports(file);\n\n    let files = [...fileSet.values()];\n    let common = normalizePath(findCommonPath(files));\n    let start = performance.now();\n\n    let orig = console.log;\n    // console.log = () => {};\n    let outs = await comp({\n      files: files.map((f) => {\n        f = normalizePath(f).replace(common, \"\");\n        let data = fs.readFileSync(f, \"utf8\");\n        let filename = f.replace(\".shadeup\", \"\");\n        return { name: filename, body: data };\n      }),\n    });\n    console.log = orig;\n    (async () => {\n      // let errs = await outs.errors;\n      // printErrors(errs, common);\n    })();\n    let outPath = options.output || file.replace(\".shadeup\", \".js\");\n    if (outdir) {\n      outPath = path.join(outdir, path.basename(outPath));\n    }\n    console.log(\n      `\\x1b[32mCompiled in ${Math.round(\n        performance.now() - start\n      )}ms\\x1b[0m: writing out to ${outPath}`\n    );\n    fs.writeFileSync(outPath, outs.output);\n    fs.writeFileSync(outPath.replace(/\\.js$/, \".d.ts\"), outs.dts);\n  }, 100);\n  rebuild();\n\n  let handlers = new Map();\n\n  const buildHandlers = () => {\n    let fileSet = scanImports(file);\n    let files = Array.from(fileSet);\n    let unwatch = new Set(handlers.keys());\n    for (let file of files) {\n      unwatch.delete(file);\n      if (!fs.existsSync(file)) {\n        console.error(`File ${file} does not exist`);\n        continue;\n      }\n      if (handlers.has(file)) {\n        continue;\n      }\n\n      let handler = () => {\n        rebuild();\n        buildHandlers();\n      };\n      let watcher = fs.watch(file, handler);\n      watcher.on(\"change\", handler);\n      watcher.on(\"error\", (e) => {\n        console.error(e);\n      });\n      handlers.set(file, watcher);\n    }\n    for (let file of unwatch) {\n      handlers.get(file).close();\n      handlers.delete(file);\n    }\n  };\n\n  buildHandlers();\n};\n\nprogram\n  .command(\"watch\")\n  .description(\"Watch a shadeup file and recompile on change\")\n  .argument(\"file\", \"Main file to watch\")\n  .action(async (file, options) => {\n    setupWatcher(file, options);\n  });\n\nprogram\n  .command(\"preview\")\n  .description(\"Live preview of a shadeup file in electron\")\n  .argument(\"file\", \"Main file to preview\")\n  .action(async (file, options) => {\n    const electron = await import(\"electron\");\n    const proc = await import(\"node:child_process\");\n\n    // shadeup home dir for vite\n\n    const shadeupHome = path.join(os.homedir(), \".shadeup_vite\");\n    // Copy entire vite directory to shadeup home dir\n    if (!fs.existsSync(shadeupHome)) {\n      fs.mkdirSync(shadeupHome);\n    }\n\n    const viteDir = path.join(__dirname, \"vite\");\n\n    fs.cpSync(viteDir, shadeupHome, { recursive: true });\n\n    // run npm install on the vite directory if node_modules doesn't exist\n    if (!fs.existsSync(path.join(shadeupHome, \"/node_modules\"))) {\n      console.log(shadeupHome);\n      console.log(\"Installing dependencies...\");\n      proc.execSync(\"npm install\", {\n        cwd: shadeupHome,\n        stdio: \"inherit\",\n      });\n    }\n\n    fs.writeFileSync(\n      path.join(__dirname, \"vite/runner.js\"),\n      `export const makeShadeupInstance = async (canvas) => {\n  return {\n    enableUI: async () => {},\n  };\n};\n`\n    );\n\n    const child = proc.spawn(electron.default, [\n      path.join(__dirname, \"electron/main.js\"),\n    ]);\n\n    child.stdout.on(\"data\", (data) => {\n      console.log(data.toString());\n    });\n\n    child.stderr.on(\"data\", (data) => {\n      console.error(data.toString());\n    });\n\n    setupWatcher(\n      file,\n      {\n        output: path.join(shadeupHome, \"runner.js\"),\n      },\n      shadeupHome\n    );\n\n    const vite = await import(\"vite\");\n    const server = await vite.createServer({\n      root: shadeupHome,\n      server: {\n        port: 5128,\n      },\n    });\n    child.on(\"close\", (code) => {\n      console.log(`child process exited with code ${code}`);\n      server.close();\n      process.exit();\n    });\n\n    await server.listen();\n  });\n\nprogram.parse();\n"
  },
  {
    "path": "cli/compiler-dist/compiler.d.ts",
    "content": "export function makeLSPCompiler(): Promise<any>;\n"
  },
  {
    "path": "cli/compiler-dist/compiler.js",
    "content": "import { makeSimpleShadeupEnvironment } from \"./shadeup-compiler.js\";\nimport Parser from \"web-tree-sitter\";\nimport minify from \"uglify-js\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __filename = fileURLToPath(new URL(import.meta.url));\n\nfunction filterDTS(files) {\n  return `import * as __ from \"shadeup/math\";\n\ndeclare namespace ShadeupFiles {\n${[...files.entries()]\n  .map(\n    ([name, dts]) =>\n      `  declare namespace ${name} {\\n${dts\n        .split(\"\\n\")\n        .map((s) => `    ${s}`)\n        .join(\"\\n\")\n        .trimEnd()}\\n  }`\n  )\n  .join(\"\\n\")}\n}\n\nexport declare function makeShadeupInstance(\n  canvas: HTMLCanvasElement,\n  options?: {\n    preferredAdapter?: \"webgl\" | \"webgpu\";\n    limits?: GPUSupportedLimits;\n    ui?: boolean;\n  }\n): Promise<{\n  /**\n   * Set to false to pause\n   */\n  playing: boolean;\n\n  canvas: HTMLCanvasElement;\n\n  adapter: any;\n  hooks: {\n    beforeFrame?: () => void;\n    afterFrame?: () => void;\n    reset?: () => void;\n  }[];\n  start: () => void;\n\n  env: {\n    camera: {\n      position: __.float3;\n      rotation: __.float4;\n      width: __.float;\n      height: __.float;\n      fov: __.float;\n      near: __.float;\n      far: __.float;\n    };\n    camera2d: {\n      position: __.float2;\n      zoom: __.float;\n    };\n    deltaTime: __.float;\n    frame: __.int;\n    keyboard: any;\n    mouse: any;\n    screenSize: __.float2;\n    time: __.float;\n  };\n\n  /**\n   * Used to pass values into the shadeup env (accessed as env.input(\"name\") inside)\n   */\n  inputValues: Map<string, any>;\n\n  enableUI: () => Promise<void>;\n\n  loadTextureFromImageLike: (\n\t\timg: HTMLImageElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas | HTMLVideoElement\n\t) => Promise<__.texture2d<__.float4>>;\n\tloadTexture2dFromURL: (url: string) => Promise<__.texture2d<__.float4>>;\n\tloadModelFromURL: (urlGltf: string) => Promise<__.texture2d<__.float4>>;\n\n  files: typeof ShadeupFiles;\n}>;\n`;\n}\n\nconst prefixConst = (files) => {\n  let str = `import { bindShadeupEngine } from \"shadeup\";\n\nexport const makeShadeupInstance = bindShadeupEngine((define, localEngineContext) => {\n  const __shadeup_gen_shader =\n    localEngineContext.__shadeup_gen_shader.bind(localEngineContext);\n  const __shadeup_make_shader_inst =\n    localEngineContext.__shadeup_make_shader_inst.bind(localEngineContext);\n  const __shadeup_register_struct =\n    localEngineContext.__shadeup_register_struct.bind(localEngineContext);\n  const env = localEngineContext.env;\\n`;\n\n  str += `((defineFunc) => {\n    let define = (deps, func) => defineFunc(\"/__meta.js\", deps, func);\n  define([\"require\", \"exports\"], function (require, exports, __, std___std_all_1) {\n      \"use strict\";\n      Object.defineProperty(exports, \"__esModule\", { value: true });\n      exports.files = [${files.map((f) => JSON.stringify(f)).join(\",\")}];\n  });\n})(define);`;\n\n  return str;\n};\n\nexport async function makeCompiler() {\n  await Parser.init();\n  const parser = new Parser();\n  const Lang = await Parser.Language.load(\n    path.resolve(path.dirname(__filename), \"tree-sitter-shadeup.wasm\")\n  );\n  parser.setLanguage(Lang);\n\n  global.shadeupParser = () => {\n    return parser;\n  };\n\n  let envPool = [];\n\n  for (let i = 0; i < 1; i++) {\n    envPool.push(await makeSimpleShadeupEnvironment(true, true));\n  }\n\n  let queue = [];\n\n  async function consumeQueue() {\n    if (queue.length == 0) return;\n    if (envPool.length == 0) return;\n    let env = envPool.shift();\n    let item = queue.shift();\n    if (!item) return;\n    try {\n      let start = performance.now();\n      env.reset();\n      for (let i = 0; i < item.files.length; i++) {\n        const file = item.files[i];\n        if (i == item.files.length - 1) {\n          await env.writeFile(\"/\" + file.name + \".ts\", file.body);\n        } else {\n          env.writeFile(\"/\" + file.name + \".ts\", file.body);\n        }\n      }\n      // for (let file of item.files) {\n      //   if (file.name == \"main\")\n      //     await env.writeFile(\"/\" + file.name + \".ts\", file.body);\n      // }\n\n      let output = await env.regenerate();\n      let finalOutput = \"\";\n      let dts = \"\";\n      let fileDts = new Map();\n      let errors = await env.errors();\n      if (errors.length > 0) {\n        item.callback({\n          errors: errors,\n        });\n\n        envPool.push(env);\n        consumeQueue();\n        return;\n      }\n\n      for (let o of output) {\n        if (\n          !item.files.find(\n            (f) =>\n              f.name ==\n              o.path.replace(/^\\//g, \"\").replace(\".js\", \"\").replace(\".d.ts\", \"\")\n          ) &&\n          !(item.files.length >= 1 && item.files[0].name == \"__lib\")\n        )\n          continue;\n\n        if (o.path.endsWith(\".d.ts\")) {\n          fileDts.set(\n            o.path.replace(/^\\//g, \"\").replace(\".js\", \"\").replace(\".d.ts\", \"\"),\n            o.contents\n              .split(\"\\n\")\n              .filter((l) => !l.startsWith(\"import\"))\n              .join(\"\\n\")\n          );\n        } else {\n          if (item.files.length >= 1 && item.files[0].name == \"__lib\") {\n            finalOutput += `\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(${JSON.stringify(o.path)}, deps, func);\n\t${o.contents}\n})(define);\n`;\n          } else {\n            finalOutput += `\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(${JSON.stringify(o.path)}, deps, func);\n\t${o.contents}\n})(define);\n`;\n          }\n        }\n      }\n      let final =\n        prefixConst(item.files.map((f) => f.name)) + finalOutput + `\\n});`;\n\n      if (item.files.length >= 1 && item.files[0].name == \"__lib\") {\n        final = finalOutput;\n      }\n      let doMinify = false;\n\n      if (doMinify) {\n        final = minify.minify(final);\n        // console.log(final);\n      }\n      console.log(\"Generated in \" + (performance.now() - start) + \"ms\");\n\n      item.callback({\n        output: final,\n        dts: filterDTS(fileDts),\n      });\n\n      envPool.push(env);\n      consumeQueue();\n    } catch (e) {\n      console.error(e);\n\n      envPool.push(await makeSimpleShadeupEnvironment(true, true));\n      item.callback({\n        error: \"Fatal error while compiling.\",\n      });\n      consumeQueue();\n    }\n  }\n\n  return async function compile(data) {\n    return new Promise((resolve, reject) => {\n      queue.push({ ...data, files: data.files, callback: resolve });\n      consumeQueue();\n    });\n  };\n}\n\nexport async function makeIncrementalCompiler() {\n  await Parser.init();\n  const parser = new Parser();\n  const Lang = await Parser.Language.load(\n    path.resolve(path.dirname(__filename), \"tree-sitter-shadeup.wasm\")\n  );\n  parser.setLanguage(Lang);\n\n  global.shadeupParser = () => {\n    return parser;\n  };\n\n  const env = await makeSimpleShadeupEnvironment(true, true);\n  const fileCache = new Map();\n  const fileEmitCache = new Map();\n\n  return async function compile(item) {\n    try {\n      let start = performance.now();\n      let itemsToRegen = [];\n      let dirtyFiles = new Set();\n      for (let i = 0; i < item.files.length; i++) {\n        const file = item.files[i];\n        let fileKey = \"/\" + file.name + \".ts\";\n        let didChange = false;\n\n        if (fileCache.has(fileKey)) {\n          if (fileCache.get(fileKey) != file.body) {\n            didChange = true;\n          }\n        } else {\n          didChange = true;\n        }\n        if (didChange) {\n          itemsToRegen.push(fileKey);\n          fileCache.set(fileKey, file.body);\n          dirtyFiles.add(fileKey);\n        }\n      }\n      let dirtyFilesArray = Array.from(dirtyFiles);\n\n      for (let i = 0; i < dirtyFilesArray.length; i++) {\n        const fileKey = dirtyFilesArray[i];\n        const file = item.files.find((f) => \"/\" + f.name + \".ts\" == fileKey);\n        if (i == dirtyFilesArray.length - 1) {\n          await env.writeFile(fileKey, file.body, true);\n        } else {\n          env.writeFile(fileKey, file.body, true);\n        }\n      }\n      let output = await env.regenerate(itemsToRegen);\n      console.log(\"Regen took \" + (performance.now() - start) + \"ms\");\n      let finalOutput = \"\";\n      let dts = \"\";\n      const fileDts = new Map();\n\n      for (let o of output) {\n        if (\n          !item.files.find(\n            (f) =>\n              f.name ==\n              o.path.replace(/^\\//g, \"\").replace(\".js\", \"\").replace(\".d.ts\", \"\")\n          ) &&\n          !(item.files.length >= 1 && item.files[0].name == \"__lib\")\n        )\n          continue;\n\n        if (o.path.endsWith(\".d.ts\")) {\n          // dts += o.contents;\n          fileDts.set(\n            o.path.replace(/^\\//g, \"\").replace(\".js\", \"\").replace(\".d.ts\", \"\"),\n            o.contents\n              .split(\"\\n\")\n              .filter((l) => !l.startsWith(\"import\"))\n              .join(\"\\n\")\n          );\n        } else {\n          if (item.files.length >= 1 && item.files[0].name == \"__lib\") {\n            finalOutput += `\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(${JSON.stringify(o.path)}, deps, func);\n\t${o.contents}\n})(define);\n`;\n            return finalOutput;\n          } else {\n            fileEmitCache.set(\n              o.path,\n              `\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(${JSON.stringify(o.path)}, deps, func);\n\t${o.contents}\n})(define);\n`\n            );\n          }\n        }\n      }\n\n      for (let file of item.files) {\n        let fileKey = \"/\" + file.name + \".js\";\n        if (fileEmitCache.has(fileKey)) {\n          finalOutput += fileEmitCache.get(fileKey);\n        }\n      }\n\n      let final =\n        prefixConst(item.files.map((f) => f.name)) + finalOutput + `\\n});`;\n\n      console.log(\"Generated in \" + (performance.now() - start) + \"ms\");\n\n      return {\n        output: final,\n        dts: filterDTS(fileDts),\n        // errors: env.errors(),\n      };\n    } catch (e) {\n      console.error(e);\n    }\n  };\n}\n\nexport async function makeLSPCompiler() {\n  await Parser.init();\n  const parser = new Parser();\n  const Lang = await Parser.Language.load(\n    path.resolve(path.dirname(__filename), \"tree-sitter-shadeup.wasm\")\n  );\n  parser.setLanguage(Lang);\n\n  global.shadeupParser = () => {\n    return parser;\n  };\n\n  const env = await makeSimpleShadeupEnvironment(true, true);\n\n  return env;\n}\n"
  },
  {
    "path": "cli/compiler-dist/readme.md",
    "content": "modify the output of shadeup-compiler.js to:\n\n1. remove the tree sitter wasm strings\n2. Replace getShadeupParse with:\n\nasync function getShadeupParser() {\nreturn global.shadeupParser();\n}\n\n3. import fs and replace e4.readFileSync e4 trace up to \\_\\_viteexternal with fs\n"
  },
  {
    "path": "cli/compiler-dist/shadeup-compiler.js",
    "content": "import ts from \"typescript\";\nimport require$$0$1 from \"path\";\nimport require$$1 from \"fs\";\nimport { createDefaultMapFromCDN, createSystem, createVirtualTypeScriptEnvironment } from \"@typescript/vfs\";\nvar commonjsGlobal = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nfunction getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nfunction getAugmentedNamespace(n) {\n  if (n.__esModule)\n    return n;\n  var f = n.default;\n  if (typeof f == \"function\") {\n    var a = function a2() {\n      if (this instanceof a2) {\n        return Reflect.construct(f, arguments, this.constructor);\n      }\n      return f.apply(this, arguments);\n    };\n    a.prototype = f.prototype;\n  } else\n    a = {};\n  Object.defineProperty(a, \"__esModule\", { value: true });\n  Object.keys(n).forEach(function(k) {\n    var d = Object.getOwnPropertyDescriptor(n, k);\n    Object.defineProperty(a, k, d.get ? d : {\n      enumerable: true,\n      get: function() {\n        return n[k];\n      }\n    });\n  });\n  return a;\n}\nvar sha256$1 = { exports: {} };\n(function(module) {\n  (function(root, factory2) {\n    var exports = {};\n    factory2(exports);\n    var sha2562 = exports[\"default\"];\n    for (var k in exports) {\n      sha2562[k] = exports[k];\n    }\n    {\n      module.exports = sha2562;\n    }\n  })(commonjsGlobal, function(exports) {\n    exports.__esModule = true;\n    exports.digestLength = 32;\n    exports.blockSize = 64;\n    var K = new Uint32Array([\n      1116352408,\n      1899447441,\n      3049323471,\n      3921009573,\n      961987163,\n      1508970993,\n      2453635748,\n      2870763221,\n      3624381080,\n      310598401,\n      607225278,\n      1426881987,\n      1925078388,\n      2162078206,\n      2614888103,\n      3248222580,\n      3835390401,\n      4022224774,\n      264347078,\n      604807628,\n      770255983,\n      1249150122,\n      1555081692,\n      1996064986,\n      2554220882,\n      2821834349,\n      2952996808,\n      3210313671,\n      3336571891,\n      3584528711,\n      113926993,\n      338241895,\n      666307205,\n      773529912,\n      1294757372,\n      1396182291,\n      1695183700,\n      1986661051,\n      2177026350,\n      2456956037,\n      2730485921,\n      2820302411,\n      3259730800,\n      3345764771,\n      3516065817,\n      3600352804,\n      4094571909,\n      275423344,\n      430227734,\n      506948616,\n      659060556,\n      883997877,\n      958139571,\n      1322822218,\n      1537002063,\n      1747873779,\n      1955562222,\n      2024104815,\n      2227730452,\n      2361852424,\n      2428436474,\n      2756734187,\n      3204031479,\n      3329325298\n    ]);\n    function hashBlocks(w, v, p, pos, len) {\n      var a, b, c2, d, e, f, g2, h, u, i, j, t1, t2;\n      while (len >= 64) {\n        a = v[0];\n        b = v[1];\n        c2 = v[2];\n        d = v[3];\n        e = v[4];\n        f = v[5];\n        g2 = v[6];\n        h = v[7];\n        for (i = 0; i < 16; i++) {\n          j = pos + i * 4;\n          w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255;\n        }\n        for (i = 16; i < 64; i++) {\n          u = w[i - 2];\n          t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10;\n          u = w[i - 15];\n          t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3;\n          w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n        }\n        for (i = 0; i < 64; i++) {\n          t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g2) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0;\n          t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c2 ^ b & c2) | 0;\n          h = g2;\n          g2 = f;\n          f = e;\n          e = d + t1 | 0;\n          d = c2;\n          c2 = b;\n          b = a;\n          a = t1 + t2 | 0;\n        }\n        v[0] += a;\n        v[1] += b;\n        v[2] += c2;\n        v[3] += d;\n        v[4] += e;\n        v[5] += f;\n        v[6] += g2;\n        v[7] += h;\n        pos += 64;\n        len -= 64;\n      }\n      return pos;\n    }\n    var Hash = (\n      /** @class */\n      function() {\n        function Hash2() {\n          this.digestLength = exports.digestLength;\n          this.blockSize = exports.blockSize;\n          this.state = new Int32Array(8);\n          this.temp = new Int32Array(64);\n          this.buffer = new Uint8Array(128);\n          this.bufferLength = 0;\n          this.bytesHashed = 0;\n          this.finished = false;\n          this.reset();\n        }\n        Hash2.prototype.reset = function() {\n          this.state[0] = 1779033703;\n          this.state[1] = 3144134277;\n          this.state[2] = 1013904242;\n          this.state[3] = 2773480762;\n          this.state[4] = 1359893119;\n          this.state[5] = 2600822924;\n          this.state[6] = 528734635;\n          this.state[7] = 1541459225;\n          this.bufferLength = 0;\n          this.bytesHashed = 0;\n          this.finished = false;\n          return this;\n        };\n        Hash2.prototype.clean = function() {\n          for (var i = 0; i < this.buffer.length; i++) {\n            this.buffer[i] = 0;\n          }\n          for (var i = 0; i < this.temp.length; i++) {\n            this.temp[i] = 0;\n          }\n          this.reset();\n        };\n        Hash2.prototype.update = function(data, dataLength) {\n          if (dataLength === void 0) {\n            dataLength = data.length;\n          }\n          if (this.finished) {\n            throw new Error(\"SHA256: can't update because hash was finished.\");\n          }\n          var dataPos = 0;\n          this.bytesHashed += dataLength;\n          if (this.bufferLength > 0) {\n            while (this.bufferLength < 64 && dataLength > 0) {\n              this.buffer[this.bufferLength++] = data[dataPos++];\n              dataLength--;\n            }\n            if (this.bufferLength === 64) {\n              hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n              this.bufferLength = 0;\n            }\n          }\n          if (dataLength >= 64) {\n            dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n            dataLength %= 64;\n          }\n          while (dataLength > 0) {\n            this.buffer[this.bufferLength++] = data[dataPos++];\n            dataLength--;\n          }\n          return this;\n        };\n        Hash2.prototype.finish = function(out) {\n          if (!this.finished) {\n            var bytesHashed = this.bytesHashed;\n            var left = this.bufferLength;\n            var bitLenHi = bytesHashed / 536870912 | 0;\n            var bitLenLo = bytesHashed << 3;\n            var padLength = bytesHashed % 64 < 56 ? 64 : 128;\n            this.buffer[left] = 128;\n            for (var i = left + 1; i < padLength - 8; i++) {\n              this.buffer[i] = 0;\n            }\n            this.buffer[padLength - 8] = bitLenHi >>> 24 & 255;\n            this.buffer[padLength - 7] = bitLenHi >>> 16 & 255;\n            this.buffer[padLength - 6] = bitLenHi >>> 8 & 255;\n            this.buffer[padLength - 5] = bitLenHi >>> 0 & 255;\n            this.buffer[padLength - 4] = bitLenLo >>> 24 & 255;\n            this.buffer[padLength - 3] = bitLenLo >>> 16 & 255;\n            this.buffer[padLength - 2] = bitLenLo >>> 8 & 255;\n            this.buffer[padLength - 1] = bitLenLo >>> 0 & 255;\n            hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n            this.finished = true;\n          }\n          for (var i = 0; i < 8; i++) {\n            out[i * 4 + 0] = this.state[i] >>> 24 & 255;\n            out[i * 4 + 1] = this.state[i] >>> 16 & 255;\n            out[i * 4 + 2] = this.state[i] >>> 8 & 255;\n            out[i * 4 + 3] = this.state[i] >>> 0 & 255;\n          }\n          return this;\n        };\n        Hash2.prototype.digest = function() {\n          var out = new Uint8Array(this.digestLength);\n          this.finish(out);\n          return out;\n        };\n        Hash2.prototype._saveState = function(out) {\n          for (var i = 0; i < this.state.length; i++) {\n            out[i] = this.state[i];\n          }\n        };\n        Hash2.prototype._restoreState = function(from, bytesHashed) {\n          for (var i = 0; i < this.state.length; i++) {\n            this.state[i] = from[i];\n          }\n          this.bytesHashed = bytesHashed;\n          this.finished = false;\n          this.bufferLength = 0;\n        };\n        return Hash2;\n      }()\n    );\n    exports.Hash = Hash;\n    var HMAC = (\n      /** @class */\n      function() {\n        function HMAC2(key) {\n          this.inner = new Hash();\n          this.outer = new Hash();\n          this.blockSize = this.inner.blockSize;\n          this.digestLength = this.inner.digestLength;\n          var pad = new Uint8Array(this.blockSize);\n          if (key.length > this.blockSize) {\n            new Hash().update(key).finish(pad).clean();\n          } else {\n            for (var i = 0; i < key.length; i++) {\n              pad[i] = key[i];\n            }\n          }\n          for (var i = 0; i < pad.length; i++) {\n            pad[i] ^= 54;\n          }\n          this.inner.update(pad);\n          for (var i = 0; i < pad.length; i++) {\n            pad[i] ^= 54 ^ 92;\n          }\n          this.outer.update(pad);\n          this.istate = new Uint32Array(8);\n          this.ostate = new Uint32Array(8);\n          this.inner._saveState(this.istate);\n          this.outer._saveState(this.ostate);\n          for (var i = 0; i < pad.length; i++) {\n            pad[i] = 0;\n          }\n        }\n        HMAC2.prototype.reset = function() {\n          this.inner._restoreState(this.istate, this.inner.blockSize);\n          this.outer._restoreState(this.ostate, this.outer.blockSize);\n          return this;\n        };\n        HMAC2.prototype.clean = function() {\n          for (var i = 0; i < this.istate.length; i++) {\n            this.ostate[i] = this.istate[i] = 0;\n          }\n          this.inner.clean();\n          this.outer.clean();\n        };\n        HMAC2.prototype.update = function(data) {\n          this.inner.update(data);\n          return this;\n        };\n        HMAC2.prototype.finish = function(out) {\n          if (this.outer.finished) {\n            this.outer.finish(out);\n          } else {\n            this.inner.finish(out);\n            this.outer.update(out, this.digestLength).finish(out);\n          }\n          return this;\n        };\n        HMAC2.prototype.digest = function() {\n          var out = new Uint8Array(this.digestLength);\n          this.finish(out);\n          return out;\n        };\n        return HMAC2;\n      }()\n    );\n    exports.HMAC = HMAC;\n    function hash(data) {\n      var h = new Hash().update(data);\n      var digest = h.digest();\n      h.clean();\n      return digest;\n    }\n    exports.hash = hash;\n    exports[\"default\"] = hash;\n    function hmac(key, data) {\n      var h = new HMAC(key).update(data);\n      var digest = h.digest();\n      h.clean();\n      return digest;\n    }\n    exports.hmac = hmac;\n    function fillBuffer(buffer2, hmac2, info, counter) {\n      var num = counter[0];\n      if (num === 0) {\n        throw new Error(\"hkdf: cannot expand more\");\n      }\n      hmac2.reset();\n      if (num > 1) {\n        hmac2.update(buffer2);\n      }\n      if (info) {\n        hmac2.update(info);\n      }\n      hmac2.update(counter);\n      hmac2.finish(buffer2);\n      counter[0]++;\n    }\n    var hkdfSalt = new Uint8Array(exports.digestLength);\n    function hkdf(key, salt, info, length) {\n      if (salt === void 0) {\n        salt = hkdfSalt;\n      }\n      if (length === void 0) {\n        length = 32;\n      }\n      var counter = new Uint8Array([1]);\n      var okm = hmac(salt, key);\n      var hmac_ = new HMAC(okm);\n      var buffer2 = new Uint8Array(hmac_.digestLength);\n      var bufpos = buffer2.length;\n      var out = new Uint8Array(length);\n      for (var i = 0; i < length; i++) {\n        if (bufpos === buffer2.length) {\n          fillBuffer(buffer2, hmac_, info, counter);\n          bufpos = 0;\n        }\n        out[i] = buffer2[bufpos++];\n      }\n      hmac_.clean();\n      buffer2.fill(0);\n      counter.fill(0);\n      return out;\n    }\n    exports.hkdf = hkdf;\n    function pbkdf2(password, salt, iterations, dkLen) {\n      var prf = new HMAC(password);\n      var len = prf.digestLength;\n      var ctr = new Uint8Array(4);\n      var t = new Uint8Array(len);\n      var u = new Uint8Array(len);\n      var dk = new Uint8Array(dkLen);\n      for (var i = 0; i * len < dkLen; i++) {\n        var c2 = i + 1;\n        ctr[0] = c2 >>> 24 & 255;\n        ctr[1] = c2 >>> 16 & 255;\n        ctr[2] = c2 >>> 8 & 255;\n        ctr[3] = c2 >>> 0 & 255;\n        prf.reset();\n        prf.update(salt);\n        prf.update(ctr);\n        prf.finish(u);\n        for (var j = 0; j < len; j++) {\n          t[j] = u[j];\n        }\n        for (var j = 2; j <= iterations; j++) {\n          prf.reset();\n          prf.update(u).finish(u);\n          for (var k = 0; k < len; k++) {\n            t[k] ^= u[k];\n          }\n        }\n        for (var j = 0; j < len && i * len + j < dkLen; j++) {\n          dk[i * len + j] = t[j];\n        }\n      }\n      for (var i = 0; i < len; i++) {\n        t[i] = u[i] = 0;\n      }\n      for (var i = 0; i < 4; i++) {\n        ctr[i] = 0;\n      }\n      prf.clean();\n      return dk;\n    }\n    exports.pbkdf2 = pbkdf2;\n  });\n})(sha256$1);\nvar sha256Exports = sha256$1.exports;\nconst sha256 = /* @__PURE__ */ getDefaultExportFromCjs(sha256Exports);\nfunction cleanName(name) {\n  return name.replaceAll(\"file:///\", \"\").replaceAll(\".\", \"_dot_\").replaceAll(\"/\", \"_slash_\").replaceAll(\"-\", \"_dash_\");\n}\nfunction closest(node2, cb) {\n  while (node2) {\n    if (cb(node2))\n      return node2;\n    node2 = node2.parent;\n  }\n  return null;\n}\nfunction findShadeupTags(declar) {\n  let matcher = /=tag\\((.+)\\)$/g;\n  let doc = ts.getJSDocTags(declar);\n  for (let d of doc) {\n    if (d.tagName.text !== \"shadeup\")\n      continue;\n    if (typeof d.comment === \"string\") {\n      let matches = matcher.exec(d.comment);\n      if (matches) {\n        return matches[1].split(\",\").map((s) => s.trim());\n      }\n    }\n  }\n  return [];\n}\nfunction getFunctionDeclarationFromCallExpression(checker, node2) {\n  if (ts.isCallExpression(node2)) {\n    let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n    if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n      exprSmybol = checker.getAliasedSymbol(exprSmybol);\n    }\n    if (exprSmybol) {\n      let funcDeclar = exprSmybol.getDeclarations()?.[0];\n      if (funcDeclar && ts.isFunctionDeclaration(funcDeclar)) {\n        return funcDeclar;\n      }\n    }\n  }\n}\nfunction toposort(edges) {\n  return toposortinternal(uniqueNodes(edges), edges);\n}\nfunction toposortinternal(nodes, edges) {\n  var cursor = nodes.length, sorted = new Array(cursor), visited = {}, i = cursor, outgoingEdges = makeOutgoingEdges(edges), nodesHash = makeNodesHash(nodes);\n  edges.forEach(function(edge) {\n    if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n      throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\");\n    }\n  });\n  while (i--) {\n    if (!visited[i])\n      visit(nodes[i], i, /* @__PURE__ */ new Set());\n  }\n  return sorted;\n  function visit(node2, i2, predecessors) {\n    if (predecessors.has(node2)) {\n      var nodeRep;\n      try {\n        nodeRep = \", node was:\" + JSON.stringify(node2);\n      } catch (e) {\n        nodeRep = \"\";\n      }\n      throw new Error(\"Cyclic dependency\" + nodeRep);\n    }\n    if (!nodesHash.has(node2)) {\n      throw new Error(\n        \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node2)\n      );\n    }\n    if (visited[i2])\n      return;\n    visited[i2] = true;\n    var outgoing = outgoingEdges.get(node2) || /* @__PURE__ */ new Set();\n    outgoing = Array.from(outgoing);\n    if (i2 = outgoing.length) {\n      predecessors.add(node2);\n      do {\n        var child = outgoing[--i2];\n        visit(child, nodesHash.get(child), predecessors);\n      } while (i2);\n      predecessors.delete(node2);\n    }\n    sorted[--cursor] = node2;\n  }\n}\nfunction uniqueNodes(arr) {\n  var res = /* @__PURE__ */ new Set();\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var edge = arr[i];\n    res.add(edge[0]);\n    res.add(edge[1]);\n  }\n  return Array.from(res);\n}\nfunction makeOutgoingEdges(arr) {\n  var edges = /* @__PURE__ */ new Map();\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var edge = arr[i];\n    if (!edges.has(edge[0]))\n      edges.set(edge[0], /* @__PURE__ */ new Set());\n    if (!edges.has(edge[1]))\n      edges.set(edge[1], /* @__PURE__ */ new Set());\n    edges.get(edge[0]).add(edge[1]);\n  }\n  return edges;\n}\nfunction makeNodesHash(arr) {\n  var res = /* @__PURE__ */ new Map();\n  for (var i = 0, len = arr.length; i < len; i++) {\n    res.set(arr[i], i);\n  }\n  return res;\n}\nconst wgslHeader = \"fn shadeup_up_swizzle_x_u32(n: u32) -> u32{\\r\\n\treturn n;\\r\\n}\\r\\nfn shadeup_up_swizzle_xx_u32(n: u32) -> vec2<u32>{\\r\\n\treturn vec2<u32>(n, n);\\r\\n}\\r\\nfn shadeup_up_swizzle_xxx_u32(n: u32) -> vec3<u32>{\\r\\n\treturn vec3<u32>(n, n, n);\\r\\n}\\r\\nfn shadeup_up_swizzle_xxxx_u32(n: u32) -> vec4<u32>{\\r\\n\treturn vec4<u32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xy_u32(n: u32) -> vec2<u32>{\\r\\n\treturn vec2<u32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyz_u32(n: u32) -> vec3<u32>{\\r\\n\treturn vec3<u32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyzw_u32(n: u32) -> vec4<u32>{\\r\\n\treturn vec4<u32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_x_i32(n: i32) -> i32{\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xx_i32(n: i32) -> vec2<i32>{\\r\\n\treturn vec2<i32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxx_i32(n: i32) -> vec3<i32>{\\r\\n\treturn vec3<i32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxxx_i32(n: i32) -> vec4<i32>{\\r\\n\treturn vec4<i32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xy_i32(n: i32) -> vec2<i32>{\\r\\n\treturn vec2<i32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyz_i32(n: i32) -> vec3<i32>{\\r\\n\treturn vec3<i32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyzw_i32(n: i32) -> vec4<i32>{\\r\\n\treturn vec4<i32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_x_f32(n: f32) -> f32{\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xx_f32(n: f32) -> vec2<f32>{\\r\\n\treturn vec2<f32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxx_f32(n: f32) -> vec3<f32>{\\r\\n\treturn vec3<f32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxxx_f32(n: f32) -> vec4<f32>{\\r\\n\treturn vec4<f32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xy_f32(n: f32) -> vec2<f32>{\\r\\n\treturn vec2<f32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyz_f32(n: f32) -> vec3<f32>{\\r\\n\treturn vec3<f32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyzw_f32(n: f32) -> vec4<f32>{\\r\\n\treturn vec4<f32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn squash_bool_vec2(n: vec2<bool>) -> bool {\\r\\n\treturn n.x && n.y;\\r\\n}\\r\\n\\r\\nfn squash_bool_vec3(n: vec3<bool>) -> bool {\\r\\n\treturn n.x && n.y && n.z;\\r\\n}\\r\\n\\r\\nfn squash_bool_vec4(n: vec4<bool>) -> bool {\\r\\n\treturn n.x && n.y && n.z && n.w;\\r\\n}\\r\\n\\r\\nfn matrix_inversefloat4x4(m: mat4x4<f32>) -> mat4x4<f32>{\\r\\n\tlet n11 = m[0][0];\\r\\n\tlet n12 = m[1][0];\\r\\n\tlet n13 = m[2][0];\\r\\n\tlet n14 = m[3][0];\\r\\n\tlet n21 = m[0][1];\\r\\n\tlet n22 = m[1][1];\\r\\n\tlet n23 = m[2][1];\\r\\n\tlet n24 = m[3][1];\\r\\n\tlet n31 = m[0][2];\\r\\n\tlet n32 = m[1][2];\\r\\n\tlet n33 = m[2][2];\\r\\n\tlet n34 = m[3][2];\\r\\n\tlet n41 = m[0][3];\\r\\n\tlet n42 = m[1][3];\\r\\n\tlet n43 = m[2][3];\\r\\n\tlet n44 = m[3][3];\\r\\n\\r\\n\tlet t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\\r\\n\tlet t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\\r\\n\tlet t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\\r\\n\tlet t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\\r\\n\\r\\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\\r\\n\tlet idet = 1.0 / det;\\r\\n\\r\\n\tvar ret: mat4x4<f32> = mat4x4<f32>();\\r\\n\\r\\n\tret[0][0] = t11 * idet;\\r\\n\tret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet;\\r\\n\tret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet;\\r\\n\tret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet;\\r\\n\\r\\n\tret[1][0] = t12 * idet;\\r\\n\tret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet;\\r\\n\tret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet;\\r\\n\tret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet;\\r\\n\\r\\n\tret[2][0] = t13 * idet;\\r\\n\tret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet;\\r\\n\tret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet;\\r\\n\tret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet;\\r\\n\\r\\n\tret[3][0] = t14 * idet;\\r\\n\tret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet;\\r\\n\tret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet;\\r\\n\tret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet;\\r\\n\\r\\n\treturn ret;\\r\\n}\\r\\n\\r\\nfn matrix_inversefloat3x3(m: mat3x3<f32>) -> mat3x3<f32>{\\r\\n\tlet n11 = m[0][0];\\r\\n\tlet n12 = m[1][0];\\r\\n\tlet n13 = m[2][0];\\r\\n\tlet n21 = m[0][1];\\r\\n\tlet n22 = m[1][1];\\r\\n\tlet n23 = m[2][1];\\r\\n\tlet n31 = m[0][2];\\r\\n\tlet n32 = m[1][2];\\r\\n\tlet n33 = m[2][2];\\r\\n\\r\\n\tlet t11 = n22 * n33 - n23 * n32;\\r\\n\tlet t12 = n13 * n32 - n12 * n33;\\r\\n\tlet t13 = n12 * n23 - n13 * n22;\\r\\n\\r\\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13;\\r\\n\tlet idet = 1.0 / det;\\r\\n\\r\\n\tvar ret: mat3x3<f32> = mat3x3<f32>();\\r\\n\\r\\n\tret[0][0] = t11 * idet;\\r\\n\tret[0][1] = (n23 * n31 - n21 * n33) * idet;\\r\\n\tret[0][2] = (n21 * n32 - n22 * n31) * idet;\\r\\n\\r\\n\tret[1][0] = t12 * idet;\\r\\n\tret[1][1] = (n11 * n33 - n13 * n31) * idet;\\r\\n\tret[1][2] = (n12 * n31 - n11 * n32) * idet;\\r\\n\\r\\n\tret[2][0] = t13 * idet;\\r\\n\tret[2][1] = (n13 * n21 - n11 * n23) * idet;\\r\\n\tret[2][2] = (n11 * n22 - n12 * n21) * idet;\\r\\n\\r\\n\treturn ret;\\r\\n}\\r\\n\\r\\nfn matrix_inversefloat2x2(m: mat2x2<f32>) -> mat2x2<f32> {\\r\\n\tlet n11 = m[0][0];\\r\\n\tlet n12 = m[1][0];\\r\\n\tlet n21 = m[0][1];\\r\\n\tlet n22 = m[1][1];\\r\\n\\r\\n\tlet det = n11 * n22 - n12 * n21;\\r\\n\tlet idet = 1.0 / det;\\r\\n\\r\\n\tvar ret: mat2x2<f32> = mat2x2<f32>();\\r\\n\\r\\n\tret[0][0] = n22 * idet;\\r\\n\tret[0][1] = -n12 * idet;\\r\\n\tret[1][0] = -n21 * idet;\\r\\n\tret[1][1] = n11 * idet;\\r\\n\\r\\n\treturn ret;\\r\\n}\\r\\n\\r\\nfn matrix_transposefloat2x2(m: mat2x2<f32>) -> mat2x2<f32> {\\r\\n\treturn mat2x2<f32>(m[0][0], m[1][0], m[0][1], m[1][1]);\\r\\n}\\r\\n\\r\\nfn matrix_transposefloat3x3(m: mat3x3<f32>) -> mat3x3<f32> {\\r\\n\treturn mat3x3<f32>\\r\\n\t(\\r\\n\t\tm[0][0], m[1][0], m[2][0],\\r\\n\t\tm[0][1], m[1][1], m[2][1],\\r\\n\t\tm[0][2], m[1][2], m[2][2]\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn matrix_transposefloat4x4(m: mat4x4<f32>) -> mat4x4<f32> {\\r\\n\treturn mat4x4<f32>\\r\\n\t(\\r\\n\t\tm[0][0], m[1][0], m[2][0], m[3][0],\\r\\n\t\tm[0][1], m[1][1], m[2][1], m[3][1],\\r\\n\t\tm[0][2], m[1][2], m[2][2], m[3][2],\\r\\n\t\tm[0][3], m[1][3], m[2][3], m[3][3]\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn bilerp_float(a: f32, b: f32, c: f32, d: f32, x: f32, y: f32) -> f32 {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float2(a: vec2<f32>, b: vec2<f32>, c: vec2<f32>, d: vec2<f32>, x: f32, y: f32) -> vec2<f32> {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float3(a: vec3<f32>, b: vec3<f32>, c: vec3<f32>, d: vec3<f32>, x: f32, y: f32) -> vec3<f32> {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float4(a: vec4<f32>, b: vec4<f32>, c: vec4<f32>, d: vec4<f32>, x: f32, y: f32) -> vec4<f32> {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float2x2(a: mat2x2<f32>, b: mat2x2<f32>, c: mat2x2<f32>, d: mat2x2<f32>, x: f32, y: f32) -> mat2x2<f32> {\\r\\n\treturn mat2x2<f32>\\r\\n\t(\\r\\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\\r\\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\\r\\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\\r\\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn bilerp_float3x3(a: mat3x3<f32>, b: mat3x3<f32>, c: mat3x3<f32>, d: mat3x3<f32>, x: f32, y: f32) -> mat3x3<f32> {\\r\\n\treturn mat3x3<f32>\\r\\n\t(\\r\\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\\r\\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\\r\\n\t\tbilerp_float(a[0][2], b[0][2], c[0][2], d[0][2], x, y),\\r\\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\\r\\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y),\\r\\n\t\tbilerp_float(a[1][2], b[1][2], c[1][2], d[1][2], x, y),\\r\\n\t\tbilerp_float(a[2][0], b[2][0], c[2][0], d[2][0], x, y),\\r\\n\t\tbilerp_float(a[2][1], b[2][1], c[2][1], d[2][1], x, y),\\r\\n\t\tbilerp_float(a[2][2], b[2][2], c[2][2], d[2][2], x, y)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn bilerp_float4x4(a: mat4x4<f32>, b: mat4x4<f32>, c: mat4x4<f32>, d: mat4x4<f32>, x: f32, y: f32) -> mat4x4<f32> {\\r\\n\treturn mat4x4<f32>\\r\\n\t(\\r\\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\\r\\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\\r\\n\t\tbilerp_float(a[0][2], b[0][2], c[0][2], d[0][2], x, y),\\r\\n\t\tbilerp_float(a[0][3], b[0][3], c[0][3], d[0][3], x, y),\\r\\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\\r\\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y),\\r\\n\t\tbilerp_float(a[1][2], b[1][2], c[1][2], d[1][2], x, y),\\r\\n\t\tbilerp_float(a[1][3], b[1][3], c[1][3], d[1][3], x, y),\\r\\n\t\tbilerp_float(a[2][0], b[2][0], c[2][0], d[2][0], x, y),\\r\\n\t\tbilerp_float(a[2][1], b[2][1], c[2][1], d[2][1], x, y),\\r\\n\t\tbilerp_float(a[2][2], b[2][2], c[2][2], d[2][2], x, y),\\r\\n\t\tbilerp_float(a[2][3], b[2][3], c[2][3], d[2][3], x, y),\\r\\n\t\tbilerp_float(a[3][0], b[3][0], c[3][0], d[3][0], x, y),\\r\\n\t\tbilerp_float(a[3][1], b[3][1], c[3][1], d[3][1], x, y),\\r\\n\t\tbilerp_float(a[3][2], b[3][2], c[3][2], d[3][2], x, y),\\r\\n\t\tbilerp_float(a[3][3], b[3][3], c[3][3], d[3][3], x, y)\\r\\n\t);\\r\\n}\";\nfunction validate(file, ast, checker) {\n  performance.now();\n  const errors2 = [];\n  function add(e) {\n    if (e) {\n      if (Array.isArray(e)) {\n        errors2.push(...e);\n      } else {\n        errors2.push(e);\n      }\n    }\n  }\n  function visit(ctx) {\n    ctx.node.forEachChild(\n      (node2) => visit({\n        ...ctx,\n        node: node2\n      })\n    );\n    if (ctx.node.kind == ts.SyntaxKind.PropertyAccessExpression) {\n      if (ts.isPropertyAccessExpression(ctx.node)) {\n        add(validatePropertyAccessExpression(ctx, ctx.node));\n      }\n    } else if (ctx.node.kind == ts.SyntaxKind.ConditionalExpression) {\n      if (ts.isConditionalExpression(ctx.node)) {\n        add(validateConditionalExpression(ctx, ctx.node));\n      }\n    } else if (ctx.node.kind == ts.SyntaxKind.CallExpression) {\n      if (ts.isCallExpression(ctx.node)) {\n        add(validateCallExpression(ctx, ctx.node));\n      }\n    }\n  }\n  visit({\n    file,\n    ast,\n    checker,\n    node: ast\n  });\n  return errors2;\n}\nfunction validateGraph(env2, file, ast, checker) {\n  performance.now();\n  const errors2 = [];\n  function add(e) {\n    if (e) {\n      if (Array.isArray(e)) {\n        errors2.push(...e);\n      } else {\n        errors2.push(e);\n      }\n    }\n  }\n  function visit(ctx) {\n    ctx.node.forEachChild(\n      (node2) => visit({\n        ...ctx,\n        node: node2\n      })\n    );\n    if (ts.isCallExpression(ctx.node)) {\n      let lhsType = checker?.getTypeAtLocation(ctx.node.getChildAt(0));\n      let sig = lhsType?.getCallSignatures();\n      if (sig && sig[0] && sig[0].getDeclaration()) {\n        let declaration = sig[0].getDeclaration();\n        if (ts.isIdentifier(ctx.node.expression) && ctx.node.expression.text == \"makeShader\") {\n          checker?.getTypeAtLocation(declaration);\n          if (ctx.node.arguments.length >= 2) {\n            if (ts.isArrowFunction(ctx.node.arguments[1])) {\n              add(validateShaderCalls(env2, ctx, ctx.node.arguments[1]));\n            }\n          }\n        }\n      }\n    }\n    if (ts.isExpressionStatement(ctx.node)) {\n      add(validateStatement(ctx, ctx.node));\n    }\n    if (ts.isArrayLiteralExpression(ctx.node)) {\n      add(validateArrayLiteral(ctx, ctx.node));\n    }\n  }\n  visit({\n    file,\n    ast,\n    checker,\n    node: ast\n  });\n  return errors2;\n}\nfunction isStaticPropertyAccessExpression(checker, node2) {\n  let resultType = checker.getSymbolAtLocation(node2);\n  if (!resultType)\n    return false;\n  let tos = checker.getTypeOfSymbolAtLocation(resultType, node2);\n  let isStaticMember = false;\n  if (resultType.parent) {\n    let p = resultType.parent;\n    if (p.valueDeclaration && p.name != \"__\" && !ts.isSourceFile(p.valueDeclaration) && p.flags & ts.SymbolFlags.Namespace) {\n      isStaticMember = true;\n    }\n  }\n  tos.getCallSignatures().forEach((s) => {\n    if (s.declaration) {\n      s.declaration.modifiers?.forEach((m) => {\n        if (m.kind == ts.SyntaxKind.StaticKeyword) {\n          isStaticMember = true;\n        }\n      });\n    }\n  });\n  return isStaticMember;\n}\nfunction validateStatement({ checker, file }, node2) {\n  if (ts.isLiteralExpression(node2.expression) || ts.isPropertyAccessChain(node2.expression) || ts.isPropertyAccessExpression(node2.expression) || ts.isIdentifier(node2.expression)) {\n    return {\n      file: node2.getSourceFile(),\n      code: 0,\n      messageText: `This expression has no effect`,\n      category: ts.DiagnosticCategory.Error,\n      start: node2.getStart(),\n      length: node2.getEnd() - node2.getStart()\n    };\n  }\n}\nfunction validateConditionalExpression({ checker, file }, node2) {\n  let thenType = checker.getTypeAtLocation(node2.whenTrue);\n  let elseType = checker.getTypeAtLocation(node2.whenFalse);\n  if (!isTypeCompatible(checker, thenType, elseType)) {\n    return void 0;\n  }\n  return void 0;\n}\nfunction validateCallExpression({ checker, file }, node2) {\n  if (ts.isPropertyAccessExpression(node2.expression)) {\n    let left = node2.expression.expression;\n    if (!ts.isIdentifier(left))\n      return void 0;\n    if (left.text != \"__\")\n      return void 0;\n    let right = node2.expression.name.text;\n    if (right.startsWith(\"int\") && (right[right.length - 1] == \"2\" || right[right.length - 1] == \"3\" || right[right.length - 1] == \"4\")) {\n      for (let i = 0; i < node2.arguments.length; i++) {\n        let arg = node2.arguments[i];\n        let type2 = checker.getTypeAtLocation(arg);\n        let typeName = checker.typeToString(type2);\n        if (typeName.startsWith(\"uint\")) {\n          if (node2.arguments.length != 1) {\n            return {\n              file: node2.getSourceFile(),\n              code: 0,\n              messageText: `Cannot convert from uint to int during vector construction, use int() before`,\n              category: ts.DiagnosticCategory.Error,\n              start: arg.getStart(),\n              length: arg.getEnd() - arg.getStart()\n            };\n          }\n        }\n      }\n    }\n  }\n  return void 0;\n}\nfunction validatePropertyAccessExpression({ checker, file }, node2) {\n  let midNode = node2.getChildren()[1];\n  if (file.mapping && midNode) {\n    let range2 = lookupIndexMappingRange(file.mapping, midNode.getStart(), midNode.getEnd());\n    let s = file.content.substring(range2.start, range2.end);\n    let isStaticAccess = s == \"::\";\n    let resultType = checker.getSymbolAtLocation(node2);\n    if (resultType) {\n      let tos = checker.getTypeOfSymbolAtLocation(resultType, node2);\n      let isStaticMember = false;\n      if (resultType.parent) {\n        let p = resultType.parent;\n        if (p.valueDeclaration && p.name != \"__\" && !ts.isSourceFile(p.valueDeclaration) && p.flags & ts.SymbolFlags.Namespace) {\n          isStaticMember = true;\n        }\n      }\n      tos.getCallSignatures().forEach((s2) => {\n        if (s2.declaration) {\n          s2.declaration.modifiers?.forEach((m) => {\n            if (m.kind == ts.SyntaxKind.StaticKeyword) {\n              isStaticMember = true;\n            }\n          });\n        }\n      });\n      resultType.getDeclarations()?.forEach((d) => {\n        if (ts.canHaveModifiers(d) && d.modifiers) {\n          d.modifiers.forEach((m) => {\n            if (m.kind == ts.SyntaxKind.StaticKeyword) {\n              isStaticMember = true;\n            }\n          });\n        }\n      });\n      if (isStaticMember && !isStaticAccess) {\n        return {\n          file: node2.getSourceFile(),\n          code: 0,\n          messageText: `Cannot access static member with '${s}' use '::' instead`,\n          category: ts.DiagnosticCategory.Error,\n          start: midNode.getStart(),\n          length: midNode.getEnd() - midNode.getStart()\n        };\n      } else if (!isStaticMember && isStaticAccess) {\n        return {\n          file: node2.getSourceFile(),\n          code: 0,\n          messageText: `Cannot access non-static member with '${s}' use '.' instead`,\n          category: ts.DiagnosticCategory.Error,\n          start: midNode.getStart(),\n          length: midNode.getEnd() - midNode.getStart()\n        };\n      }\n    }\n  }\n  return void 0;\n}\nfunction isTypeCompatible(checker, type2, typeOther) {\n  return checker.isTypeAssignableTo(type2, typeOther);\n}\nfunction validateArrayLiteral({ checker, file }, node2) {\n  if (node2.elements.length == 3) {\n    let name1 = checker.typeToString(checker.getTypeAtLocation(node2.elements[0]));\n    let name2 = checker.typeToString(checker.getTypeAtLocation(node2.elements[1]));\n    let name3 = checker.typeToString(checker.getTypeAtLocation(node2.elements[2]));\n    if (name1 == \"0\" && name2 == \"shader\" && name3 == \"0\") {\n      return void 0;\n    }\n  }\n  return void 0;\n}\nconst SHADER_TYPE_BLACKLIST = [\"string\", \"null\", \"map\"];\nfunction validateShaderTypeUse(env2, { checker, file }, diags, node2, typeNode) {\n  let type2 = checker.typeToString(typeNode);\n  if (SHADER_TYPE_BLACKLIST.includes(type2) || type2.startsWith(\"map<\")) {\n    diags.push({\n      file: node2.getSourceFile(),\n      code: 0,\n      messageText: `Cannot use type '${type2}' in shader`,\n      category: ts.DiagnosticCategory.Error,\n      start: node2.getStart(),\n      length: node2.getEnd() - node2.getStart()\n    });\n  }\n  if (typeNode.isUnion() && type2 != \"boolean\") {\n    diags.push({\n      file: node2.getSourceFile(),\n      code: 0,\n      messageText: `Cannot use union types in shaders ('${type2}')`,\n      category: ts.DiagnosticCategory.Error,\n      start: node2.getStart(),\n      length: node2.getEnd() - node2.getStart()\n    });\n  }\n  if (typeNode.isLiteral()) {\n    diags.push({\n      file: node2.getSourceFile(),\n      code: 0,\n      messageText: `Cannot use literal types in shaders ('${type2}')`,\n      category: ts.DiagnosticCategory.Error,\n      start: node2.getStart(),\n      length: node2.getEnd() - node2.getStart()\n    });\n  }\n}\nfunction validateShaderCalls(env2, vs, node2) {\n  let diags = [];\n  const { checker, file } = vs;\n  let visit = (node22) => {\n    if (ts.isCallExpression(node22)) {\n      let declar = getFunctionDeclarationFromCallExpression(checker, node22);\n      if (declar) {\n        let graphNodeName = getFunctionNodeName(declar);\n        let graphNode = env2.tagGraph.getNode(graphNodeName);\n        if (graphNode) {\n          if (graphNode.tags.includes(\"async\")) {\n            let rawChain = env2.tagGraph.resolveTagSourceChain(graphNodeName, \"async\");\n            let chain = rawChain.map((m) => m.split(\":\")[1]).join(\" <- \");\n            if (rawChain[rawChain.length - 1].split(\":\")[1] == \"texture2d_internal_empty\")\n              ;\n            else {\n              diags.push({\n                file: node22.getSourceFile(),\n                code: 0,\n                messageText: `Cannot call cpu-only function from a shader. ${chain}`,\n                category: ts.DiagnosticCategory.Error,\n                start: node22.getStart(),\n                length: node22.getEnd() - node22.getStart()\n              });\n            }\n          }\n        }\n      }\n      validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n    }\n    if (ts.isPropertyAccessExpression(node22)) {\n      validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n    }\n    if (ts.isIdentifier(node22)) {\n      validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n    }\n    if (ts.isElementAccessExpression(node22)) {\n      validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n    }\n    if (ts.isVariableDeclaration(node22)) {\n      let arrType = checker.getTypeAtLocation(node22);\n      let typeInfo = getArrayTypeInfo(checker, arrType);\n      if (typeInfo.isArray) {\n        if (typeInfo.staticSize <= 0) {\n          diags.push({\n            file: node22.getSourceFile(),\n            code: 0,\n            messageText: `Please explicitly specify the size of the array (let a: T[10] = ...)`,\n            category: ts.DiagnosticCategory.Error,\n            start: node22.getStart(),\n            length: node22.getEnd() - node22.getStart()\n          });\n        }\n      }\n    }\n    ts.forEachChild(node22, visit);\n  };\n  ts.forEachChild(node2, visit);\n  return diags;\n}\nvar tsutils = {};\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n    d2.__proto__ = b2;\n  } || function(d2, b2) {\n    for (var p in b2)\n      if (b2.hasOwnProperty(p))\n        d2[p] = b2[p];\n  };\n  return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n  extendStatics(d, b);\n  function __() {\n    this.constructor = d;\n  }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function() {\n  __assign = Object.assign || function __assign2(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n      for (var p in s)\n        if (Object.prototype.hasOwnProperty.call(s, p))\n          t[p] = s[p];\n    }\n    return t;\n  };\n  return __assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n  var t = {};\n  for (var p in s)\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n    for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n      if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n        t[p[i]] = s[p[i]];\n    }\n  return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n  var c2 = arguments.length, r = c2 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n    r = Reflect.decorate(decorators, target, key, desc);\n  else\n    for (var i = decorators.length - 1; i >= 0; i--)\n      if (d = decorators[i])\n        r = (c2 < 3 ? d(r) : c2 > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c2 > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __param(paramIndex, decorator) {\n  return function(target, key) {\n    decorator(target, key, paramIndex);\n  };\n}\nfunction __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n    return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\nfunction __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() {\n    if (t[0] & 1)\n      throw t[1];\n    return t[1];\n  }, trys: [], ops: [] }, f, y, t, g2;\n  return g2 = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g2[Symbol.iterator] = function() {\n    return this;\n  }), g2;\n  function verb(n) {\n    return function(v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f)\n      throw new TypeError(\"Generator is already executing.\");\n    while (_)\n      try {\n        if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n          return t;\n        if (y = 0, t)\n          op = [op[0] & 2, t.value];\n        switch (op[0]) {\n          case 0:\n          case 1:\n            t = op;\n            break;\n          case 4:\n            _.label++;\n            return { value: op[1], done: false };\n          case 5:\n            _.label++;\n            y = op[1];\n            op = [0];\n            continue;\n          case 7:\n            op = _.ops.pop();\n            _.trys.pop();\n            continue;\n          default:\n            if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n              _ = 0;\n              continue;\n            }\n            if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n              _.label = op[1];\n              break;\n            }\n            if (op[0] === 6 && _.label < t[1]) {\n              _.label = t[1];\n              t = op;\n              break;\n            }\n            if (t && _.label < t[2]) {\n              _.label = t[2];\n              _.ops.push(op);\n              break;\n            }\n            if (t[2])\n              _.ops.pop();\n            _.trys.pop();\n            continue;\n        }\n        op = body.call(thisArg, _);\n      } catch (e) {\n        op = [6, e];\n        y = 0;\n      } finally {\n        f = t = 0;\n      }\n    if (op[0] & 5)\n      throw op[1];\n    return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\nfunction __createBinding(o, m, k, k2) {\n  if (k2 === void 0)\n    k2 = k;\n  o[k2] = m[k];\n}\nfunction __exportStar(m, exports) {\n  for (var p in m)\n    if (p !== \"default\" && !exports.hasOwnProperty(p))\n      exports[p] = m[p];\n}\nfunction __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m)\n    return m.call(o);\n  if (o && typeof o.length === \"number\")\n    return {\n      next: function() {\n        if (o && i >= o.length)\n          o = void 0;\n        return { value: o && o[i++], done: !o };\n      }\n    };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m)\n    return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done)\n      ar.push(r.value);\n  } catch (error) {\n    e = { error };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"]))\n        m.call(i);\n    } finally {\n      if (e)\n        throw e.error;\n    }\n  }\n  return ar;\n}\nfunction __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n    ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\nfunction __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n    s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n    for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n      r[k] = a[j];\n  return r;\n}\nfunction __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator)\n    throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g2 = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n    return this;\n  }, i;\n  function verb(n) {\n    if (g2[n])\n      i[n] = function(v) {\n        return new Promise(function(a, b) {\n          q.push([n, v, a, b]) > 1 || resume(n, v);\n        });\n      };\n  }\n  function resume(n, v) {\n    try {\n      step(g2[n](v));\n    } catch (e) {\n      settle(q[0][3], e);\n    }\n  }\n  function step(r) {\n    r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n  }\n  function fulfill(value) {\n    resume(\"next\", value);\n  }\n  function reject(value) {\n    resume(\"throw\", value);\n  }\n  function settle(f, v) {\n    if (f(v), q.shift(), q.length)\n      resume(q[0][0], q[0][1]);\n  }\n}\nfunction __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function(e) {\n    throw e;\n  }), verb(\"return\"), i[Symbol.iterator] = function() {\n    return this;\n  }, i;\n  function verb(n, f) {\n    i[n] = o[n] ? function(v) {\n      return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v;\n    } : f;\n  }\n}\nfunction __asyncValues(o) {\n  if (!Symbol.asyncIterator)\n    throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n    return this;\n  }, i);\n  function verb(n) {\n    i[n] = o[n] && function(v) {\n      return new Promise(function(resolve, reject) {\n        v = o[n](v), settle(resolve, reject, v.done, v.value);\n      });\n    };\n  }\n  function settle(resolve, reject, d, v) {\n    Promise.resolve(v).then(function(v2) {\n      resolve({ value: v2, done: d });\n    }, reject);\n  }\n}\nfunction __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) {\n    Object.defineProperty(cooked, \"raw\", { value: raw });\n  } else {\n    cooked.raw = raw;\n  }\n  return cooked;\n}\nfunction __importStar(mod) {\n  if (mod && mod.__esModule)\n    return mod;\n  var result = {};\n  if (mod != null) {\n    for (var k in mod)\n      if (Object.hasOwnProperty.call(mod, k))\n        result[k] = mod[k];\n  }\n  result.default = mod;\n  return result;\n}\nfunction __importDefault(mod) {\n  return mod && mod.__esModule ? mod : { default: mod };\n}\nfunction __classPrivateFieldGet(receiver, privateMap) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to get private field on non-instance\");\n  }\n  return privateMap.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, privateMap, value) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to set private field on non-instance\");\n  }\n  privateMap.set(receiver, value);\n  return value;\n}\nconst tslib_es6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  get __assign() {\n    return __assign;\n  },\n  __asyncDelegator,\n  __asyncGenerator,\n  __asyncValues,\n  __await,\n  __awaiter,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __createBinding,\n  __decorate,\n  __exportStar,\n  __extends,\n  __generator,\n  __importDefault,\n  __importStar,\n  __makeTemplateObject,\n  __metadata,\n  __param,\n  __read,\n  __rest,\n  __spread,\n  __spreadArrays,\n  __values\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst require$$0 = /* @__PURE__ */ getAugmentedNamespace(tslib_es6);\nvar typeguard = {};\nvar node$4 = {};\nvar node$3 = {};\nvar node$2 = {};\nvar node$1 = {};\nvar node = {};\nvar hasRequiredNode$4;\nfunction requireNode$4() {\n  if (hasRequiredNode$4)\n    return node;\n  hasRequiredNode$4 = 1;\n  Object.defineProperty(node, \"__esModule\", { value: true });\n  node.isExpressionStatement = node.isExpression = node.isExportSpecifier = node.isExportDeclaration = node.isExportAssignment = node.isEnumMember = node.isEnumDeclaration = node.isEntityNameExpression = node.isEntityName = node.isEmptyStatement = node.isElementAccessExpression = node.isDoStatement = node.isDeleteExpression = node.isDefaultClause = node.isDecorator = node.isDebuggerStatement = node.isComputedPropertyName = node.isContinueStatement = node.isConstructSignatureDeclaration = node.isConstructorTypeNode = node.isConstructorDeclaration = node.isConditionalTypeNode = node.isConditionalExpression = node.isCommaListExpression = node.isClassLikeDeclaration = node.isClassExpression = node.isClassDeclaration = node.isCatchClause = node.isCaseOrDefaultClause = node.isCaseClause = node.isCaseBlock = node.isCallSignatureDeclaration = node.isCallLikeExpression = node.isCallExpression = node.isBreakStatement = node.isBreakOrContinueStatement = node.isBooleanLiteral = node.isBlockLike = node.isBlock = node.isBindingPattern = node.isBindingElement = node.isBinaryExpression = node.isAwaitExpression = node.isAssertionExpression = node.isAsExpression = node.isArrowFunction = node.isArrayTypeNode = node.isArrayLiteralExpression = node.isArrayBindingPattern = node.isAccessorDeclaration = void 0;\n  node.isNamespaceImport = node.isNamespaceDeclaration = node.isNamedImports = node.isNamedExports = node.isModuleDeclaration = node.isModuleBlock = node.isMethodSignature = node.isMethodDeclaration = node.isMetaProperty = node.isMappedTypeNode = node.isLiteralTypeNode = node.isLiteralExpression = node.isLabeledStatement = node.isJsxText = node.isJsxSpreadAttribute = node.isJsxSelfClosingElement = node.isJsxOpeningLikeElement = node.isJsxOpeningFragment = node.isJsxOpeningElement = node.isJsxFragment = node.isJsxExpression = node.isJsxElement = node.isJsxClosingFragment = node.isJsxClosingElement = node.isJsxAttributes = node.isJsxAttributeLike = node.isJsxAttribute = node.isJsDoc = node.isIterationStatement = node.isIntersectionTypeNode = node.isInterfaceDeclaration = node.isInferTypeNode = node.isIndexSignatureDeclaration = node.isIndexedAccessTypeNode = node.isImportSpecifier = node.isImportEqualsDeclaration = node.isImportDeclaration = node.isImportClause = node.isIfStatement = node.isIdentifier = node.isGetAccessorDeclaration = node.isFunctionTypeNode = node.isFunctionExpression = node.isFunctionDeclaration = node.isForStatement = node.isForOfStatement = node.isForInOrOfStatement = node.isForInStatement = node.isExternalModuleReference = node.isExpressionWithTypeArguments = void 0;\n  node.isVariableStatement = node.isVariableDeclaration = node.isUnionTypeNode = node.isTypeQueryNode = node.isTypeReferenceNode = node.isTypePredicateNode = node.isTypeParameterDeclaration = node.isTypeOperatorNode = node.isTypeOfExpression = node.isTypeLiteralNode = node.isTypeAssertion = node.isTypeAliasDeclaration = node.isTupleTypeNode = node.isTryStatement = node.isThrowStatement = node.isTextualLiteral = node.isTemplateLiteral = node.isTemplateExpression = node.isTaggedTemplateExpression = node.isSyntaxList = node.isSwitchStatement = node.isStringLiteral = node.isSpreadElement = node.isSpreadAssignment = node.isSourceFile = node.isSignatureDeclaration = node.isShorthandPropertyAssignment = node.isSetAccessorDeclaration = node.isReturnStatement = node.isRegularExpressionLiteral = node.isQualifiedName = node.isPropertySignature = node.isPropertyDeclaration = node.isPropertyAssignment = node.isPropertyAccessExpression = node.isPrefixUnaryExpression = node.isPostfixUnaryExpression = node.isParenthesizedTypeNode = node.isParenthesizedExpression = node.isParameterDeclaration = node.isOmittedExpression = node.isObjectLiteralExpression = node.isObjectBindingPattern = node.isNumericOrStringLikeLiteral = node.isNumericLiteral = node.isNullLiteral = node.isNoSubstitutionTemplateLiteral = node.isNonNullExpression = node.isNewExpression = node.isNamespaceExportDeclaration = void 0;\n  node.isWithStatement = node.isWhileStatement = node.isVoidExpression = node.isVariableDeclarationList = void 0;\n  const ts$1 = ts;\n  function isAccessorDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.GetAccessor || node2.kind === ts$1.SyntaxKind.SetAccessor;\n  }\n  node.isAccessorDeclaration = isAccessorDeclaration;\n  function isArrayBindingPattern(node2) {\n    return node2.kind === ts$1.SyntaxKind.ArrayBindingPattern;\n  }\n  node.isArrayBindingPattern = isArrayBindingPattern;\n  function isArrayLiteralExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.ArrayLiteralExpression;\n  }\n  node.isArrayLiteralExpression = isArrayLiteralExpression;\n  function isArrayTypeNode2(node2) {\n    return node2.kind === ts$1.SyntaxKind.ArrayType;\n  }\n  node.isArrayTypeNode = isArrayTypeNode2;\n  function isArrowFunction(node2) {\n    return node2.kind === ts$1.SyntaxKind.ArrowFunction;\n  }\n  node.isArrowFunction = isArrowFunction;\n  function isAsExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.AsExpression;\n  }\n  node.isAsExpression = isAsExpression;\n  function isAssertionExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.AsExpression || node2.kind === ts$1.SyntaxKind.TypeAssertionExpression;\n  }\n  node.isAssertionExpression = isAssertionExpression;\n  function isAwaitExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.AwaitExpression;\n  }\n  node.isAwaitExpression = isAwaitExpression;\n  function isBinaryExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.BinaryExpression;\n  }\n  node.isBinaryExpression = isBinaryExpression;\n  function isBindingElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.BindingElement;\n  }\n  node.isBindingElement = isBindingElement;\n  function isBindingPattern(node2) {\n    return node2.kind === ts$1.SyntaxKind.ArrayBindingPattern || node2.kind === ts$1.SyntaxKind.ObjectBindingPattern;\n  }\n  node.isBindingPattern = isBindingPattern;\n  function isBlock(node2) {\n    return node2.kind === ts$1.SyntaxKind.Block;\n  }\n  node.isBlock = isBlock;\n  function isBlockLike(node2) {\n    return node2.statements !== void 0;\n  }\n  node.isBlockLike = isBlockLike;\n  function isBooleanLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.TrueKeyword || node2.kind === ts$1.SyntaxKind.FalseKeyword;\n  }\n  node.isBooleanLiteral = isBooleanLiteral;\n  function isBreakOrContinueStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.BreakStatement || node2.kind === ts$1.SyntaxKind.ContinueStatement;\n  }\n  node.isBreakOrContinueStatement = isBreakOrContinueStatement;\n  function isBreakStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.BreakStatement;\n  }\n  node.isBreakStatement = isBreakStatement;\n  function isCallExpression2(node2) {\n    return node2.kind === ts$1.SyntaxKind.CallExpression;\n  }\n  node.isCallExpression = isCallExpression2;\n  function isCallLikeExpression(node2) {\n    switch (node2.kind) {\n      case ts$1.SyntaxKind.CallExpression:\n      case ts$1.SyntaxKind.Decorator:\n      case ts$1.SyntaxKind.JsxOpeningElement:\n      case ts$1.SyntaxKind.JsxSelfClosingElement:\n      case ts$1.SyntaxKind.NewExpression:\n      case ts$1.SyntaxKind.TaggedTemplateExpression:\n        return true;\n      default:\n        return false;\n    }\n  }\n  node.isCallLikeExpression = isCallLikeExpression;\n  function isCallSignatureDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.CallSignature;\n  }\n  node.isCallSignatureDeclaration = isCallSignatureDeclaration;\n  function isCaseBlock(node2) {\n    return node2.kind === ts$1.SyntaxKind.CaseBlock;\n  }\n  node.isCaseBlock = isCaseBlock;\n  function isCaseClause(node2) {\n    return node2.kind === ts$1.SyntaxKind.CaseClause;\n  }\n  node.isCaseClause = isCaseClause;\n  function isCaseOrDefaultClause(node2) {\n    return node2.kind === ts$1.SyntaxKind.CaseClause || node2.kind === ts$1.SyntaxKind.DefaultClause;\n  }\n  node.isCaseOrDefaultClause = isCaseOrDefaultClause;\n  function isCatchClause(node2) {\n    return node2.kind === ts$1.SyntaxKind.CatchClause;\n  }\n  node.isCatchClause = isCatchClause;\n  function isClassDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ClassDeclaration;\n  }\n  node.isClassDeclaration = isClassDeclaration;\n  function isClassExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.ClassExpression;\n  }\n  node.isClassExpression = isClassExpression;\n  function isClassLikeDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ClassDeclaration || node2.kind === ts$1.SyntaxKind.ClassExpression;\n  }\n  node.isClassLikeDeclaration = isClassLikeDeclaration;\n  function isCommaListExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.CommaListExpression;\n  }\n  node.isCommaListExpression = isCommaListExpression;\n  function isConditionalExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.ConditionalExpression;\n  }\n  node.isConditionalExpression = isConditionalExpression;\n  function isConditionalTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.ConditionalType;\n  }\n  node.isConditionalTypeNode = isConditionalTypeNode;\n  function isConstructorDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.Constructor;\n  }\n  node.isConstructorDeclaration = isConstructorDeclaration;\n  function isConstructorTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.ConstructorType;\n  }\n  node.isConstructorTypeNode = isConstructorTypeNode;\n  function isConstructSignatureDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ConstructSignature;\n  }\n  node.isConstructSignatureDeclaration = isConstructSignatureDeclaration;\n  function isContinueStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ContinueStatement;\n  }\n  node.isContinueStatement = isContinueStatement;\n  function isComputedPropertyName(node2) {\n    return node2.kind === ts$1.SyntaxKind.ComputedPropertyName;\n  }\n  node.isComputedPropertyName = isComputedPropertyName;\n  function isDebuggerStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.DebuggerStatement;\n  }\n  node.isDebuggerStatement = isDebuggerStatement;\n  function isDecorator(node2) {\n    return node2.kind === ts$1.SyntaxKind.Decorator;\n  }\n  node.isDecorator = isDecorator;\n  function isDefaultClause(node2) {\n    return node2.kind === ts$1.SyntaxKind.DefaultClause;\n  }\n  node.isDefaultClause = isDefaultClause;\n  function isDeleteExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.DeleteExpression;\n  }\n  node.isDeleteExpression = isDeleteExpression;\n  function isDoStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.DoStatement;\n  }\n  node.isDoStatement = isDoStatement;\n  function isElementAccessExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.ElementAccessExpression;\n  }\n  node.isElementAccessExpression = isElementAccessExpression;\n  function isEmptyStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.EmptyStatement;\n  }\n  node.isEmptyStatement = isEmptyStatement;\n  function isEntityName(node2) {\n    return node2.kind === ts$1.SyntaxKind.Identifier || isQualifiedName(node2);\n  }\n  node.isEntityName = isEntityName;\n  function isEntityNameExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.Identifier || isPropertyAccessExpression2(node2) && isEntityNameExpression(node2.expression);\n  }\n  node.isEntityNameExpression = isEntityNameExpression;\n  function isEnumDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.EnumDeclaration;\n  }\n  node.isEnumDeclaration = isEnumDeclaration;\n  function isEnumMember(node2) {\n    return node2.kind === ts$1.SyntaxKind.EnumMember;\n  }\n  node.isEnumMember = isEnumMember;\n  function isExportAssignment(node2) {\n    return node2.kind === ts$1.SyntaxKind.ExportAssignment;\n  }\n  node.isExportAssignment = isExportAssignment;\n  function isExportDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ExportDeclaration;\n  }\n  node.isExportDeclaration = isExportDeclaration;\n  function isExportSpecifier(node2) {\n    return node2.kind === ts$1.SyntaxKind.ExportSpecifier;\n  }\n  node.isExportSpecifier = isExportSpecifier;\n  function isExpression(node2) {\n    switch (node2.kind) {\n      case ts$1.SyntaxKind.ArrayLiteralExpression:\n      case ts$1.SyntaxKind.ArrowFunction:\n      case ts$1.SyntaxKind.AsExpression:\n      case ts$1.SyntaxKind.AwaitExpression:\n      case ts$1.SyntaxKind.BinaryExpression:\n      case ts$1.SyntaxKind.CallExpression:\n      case ts$1.SyntaxKind.ClassExpression:\n      case ts$1.SyntaxKind.CommaListExpression:\n      case ts$1.SyntaxKind.ConditionalExpression:\n      case ts$1.SyntaxKind.DeleteExpression:\n      case ts$1.SyntaxKind.ElementAccessExpression:\n      case ts$1.SyntaxKind.FalseKeyword:\n      case ts$1.SyntaxKind.FunctionExpression:\n      case ts$1.SyntaxKind.Identifier:\n      case ts$1.SyntaxKind.JsxElement:\n      case ts$1.SyntaxKind.JsxFragment:\n      case ts$1.SyntaxKind.JsxExpression:\n      case ts$1.SyntaxKind.JsxOpeningElement:\n      case ts$1.SyntaxKind.JsxOpeningFragment:\n      case ts$1.SyntaxKind.JsxSelfClosingElement:\n      case ts$1.SyntaxKind.MetaProperty:\n      case ts$1.SyntaxKind.NewExpression:\n      case ts$1.SyntaxKind.NonNullExpression:\n      case ts$1.SyntaxKind.NoSubstitutionTemplateLiteral:\n      case ts$1.SyntaxKind.NullKeyword:\n      case ts$1.SyntaxKind.NumericLiteral:\n      case ts$1.SyntaxKind.ObjectLiteralExpression:\n      case ts$1.SyntaxKind.OmittedExpression:\n      case ts$1.SyntaxKind.ParenthesizedExpression:\n      case ts$1.SyntaxKind.PostfixUnaryExpression:\n      case ts$1.SyntaxKind.PrefixUnaryExpression:\n      case ts$1.SyntaxKind.PropertyAccessExpression:\n      case ts$1.SyntaxKind.RegularExpressionLiteral:\n      case ts$1.SyntaxKind.SpreadElement:\n      case ts$1.SyntaxKind.StringLiteral:\n      case ts$1.SyntaxKind.SuperKeyword:\n      case ts$1.SyntaxKind.TaggedTemplateExpression:\n      case ts$1.SyntaxKind.TemplateExpression:\n      case ts$1.SyntaxKind.ThisKeyword:\n      case ts$1.SyntaxKind.TrueKeyword:\n      case ts$1.SyntaxKind.TypeAssertionExpression:\n      case ts$1.SyntaxKind.TypeOfExpression:\n      case ts$1.SyntaxKind.VoidExpression:\n      case ts$1.SyntaxKind.YieldExpression:\n        return true;\n      default:\n        return false;\n    }\n  }\n  node.isExpression = isExpression;\n  function isExpressionStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ExpressionStatement;\n  }\n  node.isExpressionStatement = isExpressionStatement;\n  function isExpressionWithTypeArguments(node2) {\n    return node2.kind === ts$1.SyntaxKind.ExpressionWithTypeArguments;\n  }\n  node.isExpressionWithTypeArguments = isExpressionWithTypeArguments;\n  function isExternalModuleReference(node2) {\n    return node2.kind === ts$1.SyntaxKind.ExternalModuleReference;\n  }\n  node.isExternalModuleReference = isExternalModuleReference;\n  function isForInStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ForInStatement;\n  }\n  node.isForInStatement = isForInStatement;\n  function isForInOrOfStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ForOfStatement || node2.kind === ts$1.SyntaxKind.ForInStatement;\n  }\n  node.isForInOrOfStatement = isForInOrOfStatement;\n  function isForOfStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ForOfStatement;\n  }\n  node.isForOfStatement = isForOfStatement;\n  function isForStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ForStatement;\n  }\n  node.isForStatement = isForStatement;\n  function isFunctionDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.FunctionDeclaration;\n  }\n  node.isFunctionDeclaration = isFunctionDeclaration;\n  function isFunctionExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.FunctionExpression;\n  }\n  node.isFunctionExpression = isFunctionExpression;\n  function isFunctionTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.FunctionType;\n  }\n  node.isFunctionTypeNode = isFunctionTypeNode;\n  function isGetAccessorDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.GetAccessor;\n  }\n  node.isGetAccessorDeclaration = isGetAccessorDeclaration;\n  function isIdentifier2(node2) {\n    return node2.kind === ts$1.SyntaxKind.Identifier;\n  }\n  node.isIdentifier = isIdentifier2;\n  function isIfStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.IfStatement;\n  }\n  node.isIfStatement = isIfStatement;\n  function isImportClause(node2) {\n    return node2.kind === ts$1.SyntaxKind.ImportClause;\n  }\n  node.isImportClause = isImportClause;\n  function isImportDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ImportDeclaration;\n  }\n  node.isImportDeclaration = isImportDeclaration;\n  function isImportEqualsDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ImportEqualsDeclaration;\n  }\n  node.isImportEqualsDeclaration = isImportEqualsDeclaration;\n  function isImportSpecifier(node2) {\n    return node2.kind === ts$1.SyntaxKind.ImportSpecifier;\n  }\n  node.isImportSpecifier = isImportSpecifier;\n  function isIndexedAccessTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.IndexedAccessType;\n  }\n  node.isIndexedAccessTypeNode = isIndexedAccessTypeNode;\n  function isIndexSignatureDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.IndexSignature;\n  }\n  node.isIndexSignatureDeclaration = isIndexSignatureDeclaration;\n  function isInferTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.InferType;\n  }\n  node.isInferTypeNode = isInferTypeNode;\n  function isInterfaceDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.InterfaceDeclaration;\n  }\n  node.isInterfaceDeclaration = isInterfaceDeclaration;\n  function isIntersectionTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.IntersectionType;\n  }\n  node.isIntersectionTypeNode = isIntersectionTypeNode;\n  function isIterationStatement(node2) {\n    switch (node2.kind) {\n      case ts$1.SyntaxKind.ForStatement:\n      case ts$1.SyntaxKind.ForOfStatement:\n      case ts$1.SyntaxKind.ForInStatement:\n      case ts$1.SyntaxKind.WhileStatement:\n      case ts$1.SyntaxKind.DoStatement:\n        return true;\n      default:\n        return false;\n    }\n  }\n  node.isIterationStatement = isIterationStatement;\n  function isJsDoc(node2) {\n    return node2.kind === ts$1.SyntaxKind.JSDocComment;\n  }\n  node.isJsDoc = isJsDoc;\n  function isJsxAttribute(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxAttribute;\n  }\n  node.isJsxAttribute = isJsxAttribute;\n  function isJsxAttributeLike(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxAttribute || node2.kind === ts$1.SyntaxKind.JsxSpreadAttribute;\n  }\n  node.isJsxAttributeLike = isJsxAttributeLike;\n  function isJsxAttributes(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxAttributes;\n  }\n  node.isJsxAttributes = isJsxAttributes;\n  function isJsxClosingElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxClosingElement;\n  }\n  node.isJsxClosingElement = isJsxClosingElement;\n  function isJsxClosingFragment(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxClosingFragment;\n  }\n  node.isJsxClosingFragment = isJsxClosingFragment;\n  function isJsxElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxElement;\n  }\n  node.isJsxElement = isJsxElement;\n  function isJsxExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxExpression;\n  }\n  node.isJsxExpression = isJsxExpression;\n  function isJsxFragment(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxFragment;\n  }\n  node.isJsxFragment = isJsxFragment;\n  function isJsxOpeningElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxOpeningElement;\n  }\n  node.isJsxOpeningElement = isJsxOpeningElement;\n  function isJsxOpeningFragment(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxOpeningFragment;\n  }\n  node.isJsxOpeningFragment = isJsxOpeningFragment;\n  function isJsxOpeningLikeElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxOpeningElement || node2.kind === ts$1.SyntaxKind.JsxSelfClosingElement;\n  }\n  node.isJsxOpeningLikeElement = isJsxOpeningLikeElement;\n  function isJsxSelfClosingElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxSelfClosingElement;\n  }\n  node.isJsxSelfClosingElement = isJsxSelfClosingElement;\n  function isJsxSpreadAttribute(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxSpreadAttribute;\n  }\n  node.isJsxSpreadAttribute = isJsxSpreadAttribute;\n  function isJsxText(node2) {\n    return node2.kind === ts$1.SyntaxKind.JsxText;\n  }\n  node.isJsxText = isJsxText;\n  function isLabeledStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.LabeledStatement;\n  }\n  node.isLabeledStatement = isLabeledStatement;\n  function isLiteralExpression(node2) {\n    return node2.kind >= ts$1.SyntaxKind.FirstLiteralToken && node2.kind <= ts$1.SyntaxKind.LastLiteralToken;\n  }\n  node.isLiteralExpression = isLiteralExpression;\n  function isLiteralTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.LiteralType;\n  }\n  node.isLiteralTypeNode = isLiteralTypeNode;\n  function isMappedTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.MappedType;\n  }\n  node.isMappedTypeNode = isMappedTypeNode;\n  function isMetaProperty(node2) {\n    return node2.kind === ts$1.SyntaxKind.MetaProperty;\n  }\n  node.isMetaProperty = isMetaProperty;\n  function isMethodDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.MethodDeclaration;\n  }\n  node.isMethodDeclaration = isMethodDeclaration;\n  function isMethodSignature(node2) {\n    return node2.kind === ts$1.SyntaxKind.MethodSignature;\n  }\n  node.isMethodSignature = isMethodSignature;\n  function isModuleBlock(node2) {\n    return node2.kind === ts$1.SyntaxKind.ModuleBlock;\n  }\n  node.isModuleBlock = isModuleBlock;\n  function isModuleDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.ModuleDeclaration;\n  }\n  node.isModuleDeclaration = isModuleDeclaration;\n  function isNamedExports(node2) {\n    return node2.kind === ts$1.SyntaxKind.NamedExports;\n  }\n  node.isNamedExports = isNamedExports;\n  function isNamedImports(node2) {\n    return node2.kind === ts$1.SyntaxKind.NamedImports;\n  }\n  node.isNamedImports = isNamedImports;\n  function isNamespaceDeclaration(node2) {\n    return isModuleDeclaration(node2) && node2.name.kind === ts$1.SyntaxKind.Identifier && node2.body !== void 0 && (node2.body.kind === ts$1.SyntaxKind.ModuleBlock || isNamespaceDeclaration(node2.body));\n  }\n  node.isNamespaceDeclaration = isNamespaceDeclaration;\n  function isNamespaceImport(node2) {\n    return node2.kind === ts$1.SyntaxKind.NamespaceImport;\n  }\n  node.isNamespaceImport = isNamespaceImport;\n  function isNamespaceExportDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.NamespaceExportDeclaration;\n  }\n  node.isNamespaceExportDeclaration = isNamespaceExportDeclaration;\n  function isNewExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.NewExpression;\n  }\n  node.isNewExpression = isNewExpression;\n  function isNonNullExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.NonNullExpression;\n  }\n  node.isNonNullExpression = isNonNullExpression;\n  function isNoSubstitutionTemplateLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral;\n  }\n  node.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral;\n  function isNullLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.NullKeyword;\n  }\n  node.isNullLiteral = isNullLiteral;\n  function isNumericLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.NumericLiteral;\n  }\n  node.isNumericLiteral = isNumericLiteral;\n  function isNumericOrStringLikeLiteral(node2) {\n    switch (node2.kind) {\n      case ts$1.SyntaxKind.StringLiteral:\n      case ts$1.SyntaxKind.NumericLiteral:\n      case ts$1.SyntaxKind.NoSubstitutionTemplateLiteral:\n        return true;\n      default:\n        return false;\n    }\n  }\n  node.isNumericOrStringLikeLiteral = isNumericOrStringLikeLiteral;\n  function isObjectBindingPattern(node2) {\n    return node2.kind === ts$1.SyntaxKind.ObjectBindingPattern;\n  }\n  node.isObjectBindingPattern = isObjectBindingPattern;\n  function isObjectLiteralExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.ObjectLiteralExpression;\n  }\n  node.isObjectLiteralExpression = isObjectLiteralExpression;\n  function isOmittedExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.OmittedExpression;\n  }\n  node.isOmittedExpression = isOmittedExpression;\n  function isParameterDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.Parameter;\n  }\n  node.isParameterDeclaration = isParameterDeclaration;\n  function isParenthesizedExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.ParenthesizedExpression;\n  }\n  node.isParenthesizedExpression = isParenthesizedExpression;\n  function isParenthesizedTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.ParenthesizedType;\n  }\n  node.isParenthesizedTypeNode = isParenthesizedTypeNode;\n  function isPostfixUnaryExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.PostfixUnaryExpression;\n  }\n  node.isPostfixUnaryExpression = isPostfixUnaryExpression;\n  function isPrefixUnaryExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.PrefixUnaryExpression;\n  }\n  node.isPrefixUnaryExpression = isPrefixUnaryExpression;\n  function isPropertyAccessExpression2(node2) {\n    return node2.kind === ts$1.SyntaxKind.PropertyAccessExpression;\n  }\n  node.isPropertyAccessExpression = isPropertyAccessExpression2;\n  function isPropertyAssignment(node2) {\n    return node2.kind === ts$1.SyntaxKind.PropertyAssignment;\n  }\n  node.isPropertyAssignment = isPropertyAssignment;\n  function isPropertyDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.PropertyDeclaration;\n  }\n  node.isPropertyDeclaration = isPropertyDeclaration;\n  function isPropertySignature(node2) {\n    return node2.kind === ts$1.SyntaxKind.PropertySignature;\n  }\n  node.isPropertySignature = isPropertySignature;\n  function isQualifiedName(node2) {\n    return node2.kind === ts$1.SyntaxKind.QualifiedName;\n  }\n  node.isQualifiedName = isQualifiedName;\n  function isRegularExpressionLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.RegularExpressionLiteral;\n  }\n  node.isRegularExpressionLiteral = isRegularExpressionLiteral;\n  function isReturnStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ReturnStatement;\n  }\n  node.isReturnStatement = isReturnStatement;\n  function isSetAccessorDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.SetAccessor;\n  }\n  node.isSetAccessorDeclaration = isSetAccessorDeclaration;\n  function isShorthandPropertyAssignment(node2) {\n    return node2.kind === ts$1.SyntaxKind.ShorthandPropertyAssignment;\n  }\n  node.isShorthandPropertyAssignment = isShorthandPropertyAssignment;\n  function isSignatureDeclaration(node2) {\n    return node2.parameters !== void 0;\n  }\n  node.isSignatureDeclaration = isSignatureDeclaration;\n  function isSourceFile(node2) {\n    return node2.kind === ts$1.SyntaxKind.SourceFile;\n  }\n  node.isSourceFile = isSourceFile;\n  function isSpreadAssignment(node2) {\n    return node2.kind === ts$1.SyntaxKind.SpreadAssignment;\n  }\n  node.isSpreadAssignment = isSpreadAssignment;\n  function isSpreadElement(node2) {\n    return node2.kind === ts$1.SyntaxKind.SpreadElement;\n  }\n  node.isSpreadElement = isSpreadElement;\n  function isStringLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.StringLiteral;\n  }\n  node.isStringLiteral = isStringLiteral;\n  function isSwitchStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.SwitchStatement;\n  }\n  node.isSwitchStatement = isSwitchStatement;\n  function isSyntaxList(node2) {\n    return node2.kind === ts$1.SyntaxKind.SyntaxList;\n  }\n  node.isSyntaxList = isSyntaxList;\n  function isTaggedTemplateExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.TaggedTemplateExpression;\n  }\n  node.isTaggedTemplateExpression = isTaggedTemplateExpression;\n  function isTemplateExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.TemplateExpression;\n  }\n  node.isTemplateExpression = isTemplateExpression;\n  function isTemplateLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.TemplateExpression || node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral;\n  }\n  node.isTemplateLiteral = isTemplateLiteral;\n  function isTextualLiteral(node2) {\n    return node2.kind === ts$1.SyntaxKind.StringLiteral || node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral;\n  }\n  node.isTextualLiteral = isTextualLiteral;\n  function isThrowStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.ThrowStatement;\n  }\n  node.isThrowStatement = isThrowStatement;\n  function isTryStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.TryStatement;\n  }\n  node.isTryStatement = isTryStatement;\n  function isTupleTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.TupleType;\n  }\n  node.isTupleTypeNode = isTupleTypeNode;\n  function isTypeAliasDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeAliasDeclaration;\n  }\n  node.isTypeAliasDeclaration = isTypeAliasDeclaration;\n  function isTypeAssertion(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeAssertionExpression;\n  }\n  node.isTypeAssertion = isTypeAssertion;\n  function isTypeLiteralNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeLiteral;\n  }\n  node.isTypeLiteralNode = isTypeLiteralNode;\n  function isTypeOfExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeOfExpression;\n  }\n  node.isTypeOfExpression = isTypeOfExpression;\n  function isTypeOperatorNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeOperator;\n  }\n  node.isTypeOperatorNode = isTypeOperatorNode;\n  function isTypeParameterDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeParameter;\n  }\n  node.isTypeParameterDeclaration = isTypeParameterDeclaration;\n  function isTypePredicateNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypePredicate;\n  }\n  node.isTypePredicateNode = isTypePredicateNode;\n  function isTypeReferenceNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeReference;\n  }\n  node.isTypeReferenceNode = isTypeReferenceNode;\n  function isTypeQueryNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.TypeQuery;\n  }\n  node.isTypeQueryNode = isTypeQueryNode;\n  function isUnionTypeNode(node2) {\n    return node2.kind === ts$1.SyntaxKind.UnionType;\n  }\n  node.isUnionTypeNode = isUnionTypeNode;\n  function isVariableDeclaration(node2) {\n    return node2.kind === ts$1.SyntaxKind.VariableDeclaration;\n  }\n  node.isVariableDeclaration = isVariableDeclaration;\n  function isVariableStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.VariableStatement;\n  }\n  node.isVariableStatement = isVariableStatement;\n  function isVariableDeclarationList(node2) {\n    return node2.kind === ts$1.SyntaxKind.VariableDeclarationList;\n  }\n  node.isVariableDeclarationList = isVariableDeclarationList;\n  function isVoidExpression(node2) {\n    return node2.kind === ts$1.SyntaxKind.VoidExpression;\n  }\n  node.isVoidExpression = isVoidExpression;\n  function isWhileStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.WhileStatement;\n  }\n  node.isWhileStatement = isWhileStatement;\n  function isWithStatement(node2) {\n    return node2.kind === ts$1.SyntaxKind.WithStatement;\n  }\n  node.isWithStatement = isWithStatement;\n  return node;\n}\nvar hasRequiredNode$3;\nfunction requireNode$3() {\n  if (hasRequiredNode$3)\n    return node$1;\n  hasRequiredNode$3 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.isImportTypeNode = void 0;\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireNode$4(), exports);\n    const ts$1 = ts;\n    function isImportTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.ImportType;\n    }\n    exports.isImportTypeNode = isImportTypeNode;\n  })(node$1);\n  return node$1;\n}\nvar hasRequiredNode$2;\nfunction requireNode$2() {\n  if (hasRequiredNode$2)\n    return node$2;\n  hasRequiredNode$2 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.isSyntheticExpression = exports.isRestTypeNode = exports.isOptionalTypeNode = void 0;\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireNode$3(), exports);\n    const ts$1 = ts;\n    function isOptionalTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.OptionalType;\n    }\n    exports.isOptionalTypeNode = isOptionalTypeNode;\n    function isRestTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.RestType;\n    }\n    exports.isRestTypeNode = isRestTypeNode;\n    function isSyntheticExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.SyntheticExpression;\n    }\n    exports.isSyntheticExpression = isSyntheticExpression;\n  })(node$2);\n  return node$2;\n}\nvar hasRequiredNode$1;\nfunction requireNode$1() {\n  if (hasRequiredNode$1)\n    return node$3;\n  hasRequiredNode$1 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.isBigIntLiteral = void 0;\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireNode$2(), exports);\n    const ts$1 = ts;\n    function isBigIntLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.BigIntLiteral;\n    }\n    exports.isBigIntLiteral = isBigIntLiteral;\n  })(node$3);\n  return node$3;\n}\nvar hasRequiredNode;\nfunction requireNode() {\n  if (hasRequiredNode)\n    return node$4;\n  hasRequiredNode = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireNode$1(), exports);\n  })(node$4);\n  return node$4;\n}\nvar type$5 = {};\nvar type$4 = {};\nvar type$3 = {};\nvar type$2 = {};\nvar type$1 = {};\nvar hasRequiredType$5;\nfunction requireType$5() {\n  if (hasRequiredType$5)\n    return type$1;\n  hasRequiredType$5 = 1;\n  Object.defineProperty(type$1, \"__esModule\", { value: true });\n  type$1.isUniqueESSymbolType = type$1.isUnionType = type$1.isUnionOrIntersectionType = type$1.isTypeVariable = type$1.isTypeReference = type$1.isTypeParameter = type$1.isSubstitutionType = type$1.isObjectType = type$1.isLiteralType = type$1.isIntersectionType = type$1.isInterfaceType = type$1.isInstantiableType = type$1.isIndexedAccessype = type$1.isIndexedAccessType = type$1.isGenericType = type$1.isEnumType = type$1.isConditionalType = void 0;\n  const ts$1 = ts;\n  function isConditionalType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Conditional) !== 0;\n  }\n  type$1.isConditionalType = isConditionalType;\n  function isEnumType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Enum) !== 0;\n  }\n  type$1.isEnumType = isEnumType;\n  function isGenericType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Object) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.ClassOrInterface) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.Reference) !== 0;\n  }\n  type$1.isGenericType = isGenericType;\n  function isIndexedAccessType(type2) {\n    return (type2.flags & ts$1.TypeFlags.IndexedAccess) !== 0;\n  }\n  type$1.isIndexedAccessType = isIndexedAccessType;\n  function isIndexedAccessype(type2) {\n    return (type2.flags & ts$1.TypeFlags.Index) !== 0;\n  }\n  type$1.isIndexedAccessype = isIndexedAccessype;\n  function isInstantiableType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Instantiable) !== 0;\n  }\n  type$1.isInstantiableType = isInstantiableType;\n  function isInterfaceType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Object) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.ClassOrInterface) !== 0;\n  }\n  type$1.isInterfaceType = isInterfaceType;\n  function isIntersectionType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Intersection) !== 0;\n  }\n  type$1.isIntersectionType = isIntersectionType;\n  function isLiteralType(type2) {\n    return (type2.flags & (ts$1.TypeFlags.StringOrNumberLiteral | ts$1.TypeFlags.BigIntLiteral)) !== 0;\n  }\n  type$1.isLiteralType = isLiteralType;\n  function isObjectType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Object) !== 0;\n  }\n  type$1.isObjectType = isObjectType;\n  function isSubstitutionType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Substitution) !== 0;\n  }\n  type$1.isSubstitutionType = isSubstitutionType;\n  function isTypeParameter(type2) {\n    return (type2.flags & ts$1.TypeFlags.TypeParameter) !== 0;\n  }\n  type$1.isTypeParameter = isTypeParameter;\n  function isTypeReference(type2) {\n    return (type2.flags & ts$1.TypeFlags.Object) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.Reference) !== 0;\n  }\n  type$1.isTypeReference = isTypeReference;\n  function isTypeVariable(type2) {\n    return (type2.flags & ts$1.TypeFlags.TypeVariable) !== 0;\n  }\n  type$1.isTypeVariable = isTypeVariable;\n  function isUnionOrIntersectionType(type2) {\n    return (type2.flags & ts$1.TypeFlags.UnionOrIntersection) !== 0;\n  }\n  type$1.isUnionOrIntersectionType = isUnionOrIntersectionType;\n  function isUnionType(type2) {\n    return (type2.flags & ts$1.TypeFlags.Union) !== 0;\n  }\n  type$1.isUnionType = isUnionType;\n  function isUniqueESSymbolType(type2) {\n    return (type2.flags & ts$1.TypeFlags.UniqueESSymbol) !== 0;\n  }\n  type$1.isUniqueESSymbolType = isUniqueESSymbolType;\n  return type$1;\n}\nvar hasRequiredType$4;\nfunction requireType$4() {\n  if (hasRequiredType$4)\n    return type$2;\n  hasRequiredType$4 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireType$5(), exports);\n  })(type$2);\n  return type$2;\n}\nvar hasRequiredType$3;\nfunction requireType$3() {\n  if (hasRequiredType$3)\n    return type$3;\n  hasRequiredType$3 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.isTupleTypeReference = exports.isTupleType = void 0;\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireType$4(), exports);\n    const ts$1 = ts;\n    const type_1 = requireType$4();\n    function isTupleType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Object && type2.objectFlags & ts$1.ObjectFlags.Tuple) !== 0;\n    }\n    exports.isTupleType = isTupleType;\n    function isTupleTypeReference(type2) {\n      return type_1.isTypeReference(type2) && isTupleType(type2.target);\n    }\n    exports.isTupleTypeReference = isTupleTypeReference;\n  })(type$3);\n  return type$3;\n}\nvar hasRequiredType$2;\nfunction requireType$2() {\n  if (hasRequiredType$2)\n    return type$4;\n  hasRequiredType$2 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireType$3(), exports);\n  })(type$4);\n  return type$4;\n}\nvar hasRequiredType$1;\nfunction requireType$1() {\n  if (hasRequiredType$1)\n    return type$5;\n  hasRequiredType$1 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireType$2(), exports);\n  })(type$5);\n  return type$5;\n}\nvar hasRequiredTypeguard;\nfunction requireTypeguard() {\n  if (hasRequiredTypeguard)\n    return typeguard;\n  hasRequiredTypeguard = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireNode(), exports);\n    tslib_1.__exportStar(requireType$1(), exports);\n  })(typeguard);\n  return typeguard;\n}\nvar util$2 = {};\nvar util$1 = {};\nvar _3_2 = {};\nvar hasRequired_3_2;\nfunction require_3_2() {\n  if (hasRequired_3_2)\n    return _3_2;\n  hasRequired_3_2 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireNode$1(), exports);\n    tslib_1.__exportStar(requireType$2(), exports);\n  })(_3_2);\n  return _3_2;\n}\nvar type = {};\nvar hasRequiredType;\nfunction requireType() {\n  if (hasRequiredType)\n    return type;\n  hasRequiredType = 1;\n  Object.defineProperty(type, \"__esModule\", { value: true });\n  type.getBaseClassMemberOfClassElement = type.getIteratorYieldResultFromIteratorResult = type.getInstanceTypeOfClassLikeDeclaration = type.getConstructorTypeOfClassLikeDeclaration = type.getSymbolOfClassLikeDeclaration = type.getPropertyNameFromType = type.symbolHasReadonlyDeclaration = type.isPropertyReadonlyInType = type.getWellKnownSymbolPropertyOfType = type.getPropertyOfType = type.isBooleanLiteralType = type.isFalsyType = type.isThenableType = type.someTypePart = type.intersectionTypeParts = type.unionTypeParts = type.getCallSignaturesOfType = type.isTypeAssignableToString = type.isTypeAssignableToNumber = type.isOptionalChainingUndefinedMarkerType = type.removeOptionalChainingUndefinedMarkerType = type.removeOptionalityFromType = type.isEmptyObjectType = void 0;\n  const ts$1 = ts;\n  const type_1 = requireType$1();\n  const util_1 = requireUtil$1();\n  const node_1 = requireNode();\n  function isEmptyObjectType(type2) {\n    if (type_1.isObjectType(type2) && type2.objectFlags & ts$1.ObjectFlags.Anonymous && type2.getProperties().length === 0 && type2.getCallSignatures().length === 0 && type2.getConstructSignatures().length === 0 && type2.getStringIndexType() === void 0 && type2.getNumberIndexType() === void 0) {\n      const baseTypes = type2.getBaseTypes();\n      return baseTypes === void 0 || baseTypes.every(isEmptyObjectType);\n    }\n    return false;\n  }\n  type.isEmptyObjectType = isEmptyObjectType;\n  function removeOptionalityFromType(checker, type2) {\n    if (!containsTypeWithFlag(type2, ts$1.TypeFlags.Undefined))\n      return type2;\n    const allowsNull = containsTypeWithFlag(type2, ts$1.TypeFlags.Null);\n    type2 = checker.getNonNullableType(type2);\n    return allowsNull ? checker.getNullableType(type2, ts$1.TypeFlags.Null) : type2;\n  }\n  type.removeOptionalityFromType = removeOptionalityFromType;\n  function containsTypeWithFlag(type2, flag) {\n    for (const t of unionTypeParts(type2))\n      if (util_1.isTypeFlagSet(t, flag))\n        return true;\n    return false;\n  }\n  function removeOptionalChainingUndefinedMarkerType(checker, type2) {\n    if (!type_1.isUnionType(type2))\n      return isOptionalChainingUndefinedMarkerType(checker, type2) ? type2.getNonNullableType() : type2;\n    let flags = 0;\n    let containsUndefinedMarker = false;\n    for (const t of type2.types) {\n      if (isOptionalChainingUndefinedMarkerType(checker, t)) {\n        containsUndefinedMarker = true;\n      } else {\n        flags |= t.flags;\n      }\n    }\n    return containsUndefinedMarker ? checker.getNullableType(type2.getNonNullableType(), flags) : type2;\n  }\n  type.removeOptionalChainingUndefinedMarkerType = removeOptionalChainingUndefinedMarkerType;\n  function isOptionalChainingUndefinedMarkerType(checker, t) {\n    return util_1.isTypeFlagSet(t, ts$1.TypeFlags.Undefined) && checker.getNullableType(t.getNonNullableType(), ts$1.TypeFlags.Undefined) !== t;\n  }\n  type.isOptionalChainingUndefinedMarkerType = isOptionalChainingUndefinedMarkerType;\n  function isTypeAssignableToNumber(checker, type2) {\n    return isTypeAssignableTo(checker, type2, ts$1.TypeFlags.NumberLike);\n  }\n  type.isTypeAssignableToNumber = isTypeAssignableToNumber;\n  function isTypeAssignableToString(checker, type2) {\n    return isTypeAssignableTo(checker, type2, ts$1.TypeFlags.StringLike);\n  }\n  type.isTypeAssignableToString = isTypeAssignableToString;\n  function isTypeAssignableTo(checker, type2, flags) {\n    flags |= ts$1.TypeFlags.Any;\n    let typeParametersSeen;\n    return function check(t) {\n      if (type_1.isTypeParameter(t) && t.symbol !== void 0 && t.symbol.declarations !== void 0) {\n        if (typeParametersSeen === void 0) {\n          typeParametersSeen = /* @__PURE__ */ new Set([t]);\n        } else if (!typeParametersSeen.has(t)) {\n          typeParametersSeen.add(t);\n        } else {\n          return false;\n        }\n        const declaration = t.symbol.declarations[0];\n        if (declaration.constraint === void 0)\n          return true;\n        return check(checker.getTypeFromTypeNode(declaration.constraint));\n      }\n      if (type_1.isUnionType(t))\n        return t.types.every(check);\n      if (type_1.isIntersectionType(t))\n        return t.types.some(check);\n      return util_1.isTypeFlagSet(t, flags);\n    }(type2);\n  }\n  function getCallSignaturesOfType(type2) {\n    if (type_1.isUnionType(type2)) {\n      const signatures = [];\n      for (const t of type2.types)\n        signatures.push(...getCallSignaturesOfType(t));\n      return signatures;\n    }\n    if (type_1.isIntersectionType(type2)) {\n      let signatures;\n      for (const t of type2.types) {\n        const sig = getCallSignaturesOfType(t);\n        if (sig.length !== 0) {\n          if (signatures !== void 0)\n            return [];\n          signatures = sig;\n        }\n      }\n      return signatures === void 0 ? [] : signatures;\n    }\n    return type2.getCallSignatures();\n  }\n  type.getCallSignaturesOfType = getCallSignaturesOfType;\n  function unionTypeParts(type2) {\n    return type_1.isUnionType(type2) ? type2.types : [type2];\n  }\n  type.unionTypeParts = unionTypeParts;\n  function intersectionTypeParts(type2) {\n    return type_1.isIntersectionType(type2) ? type2.types : [type2];\n  }\n  type.intersectionTypeParts = intersectionTypeParts;\n  function someTypePart(type2, predicate, cb) {\n    return predicate(type2) ? type2.types.some(cb) : cb(type2);\n  }\n  type.someTypePart = someTypePart;\n  function isThenableType(checker, node2, type2 = checker.getTypeAtLocation(node2)) {\n    for (const ty of unionTypeParts(checker.getApparentType(type2))) {\n      const then = ty.getProperty(\"then\");\n      if (then === void 0)\n        continue;\n      const thenType = checker.getTypeOfSymbolAtLocation(then, node2);\n      for (const t of unionTypeParts(thenType))\n        for (const signature of t.getCallSignatures())\n          if (signature.parameters.length !== 0 && isCallback2(checker, signature.parameters[0], node2))\n            return true;\n    }\n    return false;\n  }\n  type.isThenableType = isThenableType;\n  function isCallback2(checker, param, node2) {\n    let type2 = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node2));\n    if (param.valueDeclaration.dotDotDotToken) {\n      type2 = type2.getNumberIndexType();\n      if (type2 === void 0)\n        return false;\n    }\n    for (const t of unionTypeParts(type2))\n      if (t.getCallSignatures().length !== 0)\n        return true;\n    return false;\n  }\n  function isFalsyType(type2) {\n    if (type2.flags & (ts$1.TypeFlags.Undefined | ts$1.TypeFlags.Null | ts$1.TypeFlags.Void))\n      return true;\n    if (type_1.isLiteralType(type2))\n      return !type2.value;\n    return isBooleanLiteralType(type2, false);\n  }\n  type.isFalsyType = isFalsyType;\n  function isBooleanLiteralType(type2, literal) {\n    return util_1.isTypeFlagSet(type2, ts$1.TypeFlags.BooleanLiteral) && type2.intrinsicName === (literal ? \"true\" : \"false\");\n  }\n  type.isBooleanLiteralType = isBooleanLiteralType;\n  function getPropertyOfType(type2, name) {\n    if (!name.startsWith(\"__\"))\n      return type2.getProperty(name);\n    return type2.getProperties().find((s) => s.escapedName === name);\n  }\n  type.getPropertyOfType = getPropertyOfType;\n  function getWellKnownSymbolPropertyOfType(type2, wellKnownSymbolName, checker) {\n    const prefix = \"__@\" + wellKnownSymbolName;\n    for (const prop of type2.getProperties()) {\n      if (!prop.name.startsWith(prefix))\n        continue;\n      const globalSymbol = checker.getApparentType(checker.getTypeAtLocation(prop.valueDeclaration.name.expression)).symbol;\n      if (prop.escapedName === getPropertyNameOfWellKnownSymbol(checker, globalSymbol, wellKnownSymbolName))\n        return prop;\n    }\n    return;\n  }\n  type.getWellKnownSymbolPropertyOfType = getWellKnownSymbolPropertyOfType;\n  function getPropertyNameOfWellKnownSymbol(checker, symbolConstructor, symbolName) {\n    const knownSymbol = symbolConstructor && checker.getTypeOfSymbolAtLocation(symbolConstructor, symbolConstructor.valueDeclaration).getProperty(symbolName);\n    const knownSymbolType = knownSymbol && checker.getTypeOfSymbolAtLocation(knownSymbol, knownSymbol.valueDeclaration);\n    if (knownSymbolType && type_1.isUniqueESSymbolType(knownSymbolType))\n      return knownSymbolType.escapedName;\n    return \"__@\" + symbolName;\n  }\n  function isPropertyReadonlyInType(type2, name, checker) {\n    let seenProperty = false;\n    let seenReadonlySignature = false;\n    for (const t of unionTypeParts(type2)) {\n      if (getPropertyOfType(t, name) === void 0) {\n        const index = (util_1.isNumericPropertyName(name) ? checker.getIndexInfoOfType(t, ts$1.IndexKind.Number) : void 0) || checker.getIndexInfoOfType(t, ts$1.IndexKind.String);\n        if (index !== void 0 && index.isReadonly) {\n          if (seenProperty)\n            return true;\n          seenReadonlySignature = true;\n        }\n      } else if (seenReadonlySignature || isReadonlyPropertyIntersection(t, name, checker)) {\n        return true;\n      } else {\n        seenProperty = true;\n      }\n    }\n    return false;\n  }\n  type.isPropertyReadonlyInType = isPropertyReadonlyInType;\n  function isReadonlyPropertyIntersection(type2, name, checker) {\n    return someTypePart(type2, type_1.isIntersectionType, (t) => {\n      const prop = getPropertyOfType(t, name);\n      if (prop === void 0)\n        return false;\n      if (prop.flags & ts$1.SymbolFlags.Transient) {\n        if (/^(?:[1-9]\\d*|0)$/.test(name) && type_1.isTupleTypeReference(t))\n          return t.target.readonly;\n        switch (isReadonlyPropertyFromMappedType(t, name, checker)) {\n          case true:\n            return true;\n          case false:\n            return false;\n        }\n      }\n      return (\n        // members of namespace import\n        util_1.isSymbolFlagSet(prop, ts$1.SymbolFlags.ValueModule) || // we unwrapped every mapped type, now we can check the actual declarations\n        symbolHasReadonlyDeclaration(prop, checker)\n      );\n    });\n  }\n  function isReadonlyPropertyFromMappedType(type2, name, checker) {\n    if (!type_1.isObjectType(type2) || !util_1.isObjectFlagSet(type2, ts$1.ObjectFlags.Mapped))\n      return;\n    const declaration = type2.symbol.declarations[0];\n    if (declaration.readonlyToken !== void 0 && !/^__@[^@]+$/.test(name))\n      return declaration.readonlyToken.kind !== ts$1.SyntaxKind.MinusToken;\n    return isPropertyReadonlyInType(type2.modifiersType, name, checker);\n  }\n  function symbolHasReadonlyDeclaration(symbol, checker) {\n    return (symbol.flags & ts$1.SymbolFlags.Accessor) === ts$1.SymbolFlags.GetAccessor || symbol.declarations !== void 0 && symbol.declarations.some((node2) => util_1.isModifierFlagSet(node2, ts$1.ModifierFlags.Readonly) || node_1.isVariableDeclaration(node2) && util_1.isNodeFlagSet(node2.parent, ts$1.NodeFlags.Const) || node_1.isCallExpression(node2) && util_1.isReadonlyAssignmentDeclaration(node2, checker) || node_1.isEnumMember(node2) || (node_1.isPropertyAssignment(node2) || node_1.isShorthandPropertyAssignment(node2)) && util_1.isInConstContext(node2.parent));\n  }\n  type.symbolHasReadonlyDeclaration = symbolHasReadonlyDeclaration;\n  function getPropertyNameFromType(type2) {\n    if (type2.flags & (ts$1.TypeFlags.StringLiteral | ts$1.TypeFlags.NumberLiteral)) {\n      const value = String(type2.value);\n      return { displayName: value, symbolName: ts$1.escapeLeadingUnderscores(value) };\n    }\n    if (type_1.isUniqueESSymbolType(type2))\n      return {\n        displayName: `[${type2.symbol ? `${isKnownSymbol(type2.symbol) ? \"Symbol.\" : \"\"}${type2.symbol.name}` : type2.escapedName.replace(/^__@|@\\d+$/g, \"\")}]`,\n        symbolName: type2.escapedName\n      };\n  }\n  type.getPropertyNameFromType = getPropertyNameFromType;\n  function isKnownSymbol(symbol) {\n    return util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Property) && symbol.valueDeclaration !== void 0 && node_1.isInterfaceDeclaration(symbol.valueDeclaration.parent) && symbol.valueDeclaration.parent.name.text === \"SymbolConstructor\" && isGlobalDeclaration(symbol.valueDeclaration.parent);\n  }\n  function isGlobalDeclaration(node2) {\n    return util_1.isNodeFlagSet(node2.parent, ts$1.NodeFlags.GlobalAugmentation) || node_1.isSourceFile(node2.parent) && !ts$1.isExternalModule(node2.parent);\n  }\n  function getSymbolOfClassLikeDeclaration(node2, checker) {\n    var _a;\n    return checker.getSymbolAtLocation((_a = node2.name) !== null && _a !== void 0 ? _a : util_1.getChildOfKind(node2, ts$1.SyntaxKind.ClassKeyword));\n  }\n  type.getSymbolOfClassLikeDeclaration = getSymbolOfClassLikeDeclaration;\n  function getConstructorTypeOfClassLikeDeclaration(node2, checker) {\n    return node2.kind === ts$1.SyntaxKind.ClassExpression ? checker.getTypeAtLocation(node2) : checker.getTypeOfSymbolAtLocation(getSymbolOfClassLikeDeclaration(node2, checker), node2);\n  }\n  type.getConstructorTypeOfClassLikeDeclaration = getConstructorTypeOfClassLikeDeclaration;\n  function getInstanceTypeOfClassLikeDeclaration(node2, checker) {\n    return node2.kind === ts$1.SyntaxKind.ClassDeclaration ? checker.getTypeAtLocation(node2) : checker.getDeclaredTypeOfSymbol(getSymbolOfClassLikeDeclaration(node2, checker));\n  }\n  type.getInstanceTypeOfClassLikeDeclaration = getInstanceTypeOfClassLikeDeclaration;\n  function getIteratorYieldResultFromIteratorResult(type2, node2, checker) {\n    return type_1.isUnionType(type2) && type2.types.find((t) => {\n      const done = t.getProperty(\"done\");\n      return done !== void 0 && isBooleanLiteralType(removeOptionalityFromType(checker, checker.getTypeOfSymbolAtLocation(done, node2)), false);\n    }) || type2;\n  }\n  type.getIteratorYieldResultFromIteratorResult = getIteratorYieldResultFromIteratorResult;\n  function getBaseClassMemberOfClassElement(node2, checker) {\n    if (!node_1.isClassLikeDeclaration(node2.parent))\n      return;\n    const base = util_1.getBaseOfClassLikeExpression(node2.parent);\n    if (base === void 0)\n      return;\n    const name = util_1.getSingleLateBoundPropertyNameOfPropertyName(node2.name, checker);\n    if (name === void 0)\n      return;\n    const baseType = checker.getTypeAtLocation(util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.StaticKeyword) ? base.expression : base);\n    return getPropertyOfType(baseType, name.symbolName);\n  }\n  type.getBaseClassMemberOfClassElement = getBaseClassMemberOfClassElement;\n  return type;\n}\nvar hasRequiredUtil$1;\nfunction requireUtil$1() {\n  if (hasRequiredUtil$1)\n    return util$1;\n  hasRequiredUtil$1 = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.isValidIdentifier = exports.getLineBreakStyle = exports.getLineRanges = exports.forEachComment = exports.forEachTokenWithTrivia = exports.forEachToken = exports.isFunctionWithBody = exports.hasOwnThisReference = exports.isBlockScopeBoundary = exports.isFunctionScopeBoundary = exports.isTypeScopeBoundary = exports.isScopeBoundary = exports.ScopeBoundarySelector = exports.ScopeBoundary = exports.isInSingleStatementContext = exports.isBlockScopedDeclarationStatement = exports.isBlockScopedVariableDeclaration = exports.isBlockScopedVariableDeclarationList = exports.getVariableDeclarationKind = exports.VariableDeclarationKind = exports.forEachDeclaredVariable = exports.forEachDestructuringIdentifier = exports.getPropertyName = exports.getWrappedNodeAtPosition = exports.getAstNodeAtPosition = exports.commentText = exports.isPositionInComment = exports.getCommentAtPosition = exports.getTokenAtPosition = exports.getNextToken = exports.getPreviousToken = exports.getNextStatement = exports.getPreviousStatement = exports.isModifierFlagSet = exports.isObjectFlagSet = exports.isSymbolFlagSet = exports.isTypeFlagSet = exports.isNodeFlagSet = exports.hasAccessModifier = exports.isParameterProperty = exports.hasModifier = exports.getModifier = exports.isThisParameter = exports.isKeywordKind = exports.isJsDocKind = exports.isTypeNodeKind = exports.isAssignmentKind = exports.isNodeKind = exports.isTokenKind = exports.getChildOfKind = void 0;\n    exports.getBaseOfClassLikeExpression = exports.hasExhaustiveCaseClauses = exports.formatPseudoBigInt = exports.unwrapParentheses = exports.getSingleLateBoundPropertyNameOfPropertyName = exports.getLateBoundPropertyNamesOfPropertyName = exports.getLateBoundPropertyNames = exports.getPropertyNameOfWellKnownSymbol = exports.isWellKnownSymbolLiterally = exports.isBindableObjectDefinePropertyCall = exports.isReadonlyAssignmentDeclaration = exports.isInConstContext = exports.isConstAssertion = exports.getTsCheckDirective = exports.getCheckJsDirective = exports.isAmbientModule = exports.isCompilerOptionEnabled = exports.isStrictCompilerOptionEnabled = exports.getIIFE = exports.isAmbientModuleBlock = exports.isStatementInAmbientContext = exports.findImportLikeNodes = exports.findImports = exports.ImportKind = exports.parseJsDocOfNode = exports.getJsDoc = exports.canHaveJsDoc = exports.isReassignmentTarget = exports.getAccessKind = exports.AccessKind = exports.isExpressionValueUsed = exports.getDeclarationOfBindingElement = exports.hasSideEffects = exports.SideEffectOptions = exports.isSameLine = exports.isNumericPropertyName = exports.isValidJsxIdentifier = exports.isValidNumericLiteral = exports.isValidPropertyName = exports.isValidPropertyAccess = void 0;\n    const ts$1 = ts;\n    const node_1 = requireNode();\n    const _3_2_1 = require_3_2();\n    const type_1 = requireType();\n    function getChildOfKind(node2, kind, sourceFile) {\n      for (const child of node2.getChildren(sourceFile))\n        if (child.kind === kind)\n          return child;\n    }\n    exports.getChildOfKind = getChildOfKind;\n    function isTokenKind(kind) {\n      return kind >= ts$1.SyntaxKind.FirstToken && kind <= ts$1.SyntaxKind.LastToken;\n    }\n    exports.isTokenKind = isTokenKind;\n    function isNodeKind(kind) {\n      return kind >= ts$1.SyntaxKind.FirstNode;\n    }\n    exports.isNodeKind = isNodeKind;\n    function isAssignmentKind(kind) {\n      return kind >= ts$1.SyntaxKind.FirstAssignment && kind <= ts$1.SyntaxKind.LastAssignment;\n    }\n    exports.isAssignmentKind = isAssignmentKind;\n    function isTypeNodeKind(kind) {\n      return kind >= ts$1.SyntaxKind.FirstTypeNode && kind <= ts$1.SyntaxKind.LastTypeNode;\n    }\n    exports.isTypeNodeKind = isTypeNodeKind;\n    function isJsDocKind(kind) {\n      return kind >= ts$1.SyntaxKind.FirstJSDocNode && kind <= ts$1.SyntaxKind.LastJSDocNode;\n    }\n    exports.isJsDocKind = isJsDocKind;\n    function isKeywordKind(kind) {\n      return kind >= ts$1.SyntaxKind.FirstKeyword && kind <= ts$1.SyntaxKind.LastKeyword;\n    }\n    exports.isKeywordKind = isKeywordKind;\n    function isThisParameter(parameter) {\n      return parameter.name.kind === ts$1.SyntaxKind.Identifier && parameter.name.originalKeywordKind === ts$1.SyntaxKind.ThisKeyword;\n    }\n    exports.isThisParameter = isThisParameter;\n    function getModifier(node2, kind) {\n      if (node2.modifiers !== void 0) {\n        for (const modifier of node2.modifiers)\n          if (modifier.kind === kind)\n            return modifier;\n      }\n    }\n    exports.getModifier = getModifier;\n    function hasModifier(modifiers, ...kinds) {\n      if (modifiers === void 0)\n        return false;\n      for (const modifier of modifiers)\n        if (kinds.includes(modifier.kind))\n          return true;\n      return false;\n    }\n    exports.hasModifier = hasModifier;\n    function isParameterProperty(node2) {\n      return hasModifier(node2.modifiers, ts$1.SyntaxKind.PublicKeyword, ts$1.SyntaxKind.ProtectedKeyword, ts$1.SyntaxKind.PrivateKeyword, ts$1.SyntaxKind.ReadonlyKeyword);\n    }\n    exports.isParameterProperty = isParameterProperty;\n    function hasAccessModifier(node2) {\n      return isModifierFlagSet(node2, ts$1.ModifierFlags.AccessibilityModifier);\n    }\n    exports.hasAccessModifier = hasAccessModifier;\n    function isFlagSet(obj, flag) {\n      return (obj.flags & flag) !== 0;\n    }\n    exports.isNodeFlagSet = isFlagSet;\n    exports.isTypeFlagSet = isFlagSet;\n    exports.isSymbolFlagSet = isFlagSet;\n    function isObjectFlagSet(objectType, flag) {\n      return (objectType.objectFlags & flag) !== 0;\n    }\n    exports.isObjectFlagSet = isObjectFlagSet;\n    function isModifierFlagSet(node2, flag) {\n      return (ts$1.getCombinedModifierFlags(node2) & flag) !== 0;\n    }\n    exports.isModifierFlagSet = isModifierFlagSet;\n    function getPreviousStatement(statement) {\n      const parent = statement.parent;\n      if (node_1.isBlockLike(parent)) {\n        const index = parent.statements.indexOf(statement);\n        if (index > 0)\n          return parent.statements[index - 1];\n      }\n    }\n    exports.getPreviousStatement = getPreviousStatement;\n    function getNextStatement(statement) {\n      const parent = statement.parent;\n      if (node_1.isBlockLike(parent)) {\n        const index = parent.statements.indexOf(statement);\n        if (index < parent.statements.length)\n          return parent.statements[index + 1];\n      }\n    }\n    exports.getNextStatement = getNextStatement;\n    function getPreviousToken(node2, sourceFile) {\n      const { pos } = node2;\n      if (pos === 0)\n        return;\n      do\n        node2 = node2.parent;\n      while (node2.pos === pos);\n      return getTokenAtPositionWorker(node2, pos - 1, sourceFile !== null && sourceFile !== void 0 ? sourceFile : node2.getSourceFile(), false);\n    }\n    exports.getPreviousToken = getPreviousToken;\n    function getNextToken(node2, sourceFile) {\n      if (node2.kind === ts$1.SyntaxKind.SourceFile || node2.kind === ts$1.SyntaxKind.EndOfFileToken)\n        return;\n      const end = node2.end;\n      node2 = node2.parent;\n      while (node2.end === end) {\n        if (node2.parent === void 0)\n          return node2.endOfFileToken;\n        node2 = node2.parent;\n      }\n      return getTokenAtPositionWorker(node2, end, sourceFile !== null && sourceFile !== void 0 ? sourceFile : node2.getSourceFile(), false);\n    }\n    exports.getNextToken = getNextToken;\n    function getTokenAtPosition(parent, pos, sourceFile, allowJsDoc) {\n      if (pos < parent.pos || pos >= parent.end)\n        return;\n      if (isTokenKind(parent.kind))\n        return parent;\n      return getTokenAtPositionWorker(parent, pos, sourceFile !== null && sourceFile !== void 0 ? sourceFile : parent.getSourceFile(), allowJsDoc === true);\n    }\n    exports.getTokenAtPosition = getTokenAtPosition;\n    function getTokenAtPositionWorker(node2, pos, sourceFile, allowJsDoc) {\n      if (!allowJsDoc) {\n        node2 = getAstNodeAtPosition(node2, pos);\n        if (isTokenKind(node2.kind))\n          return node2;\n      }\n      outer:\n        while (true) {\n          for (const child of node2.getChildren(sourceFile)) {\n            if (child.end > pos && (allowJsDoc || child.kind !== ts$1.SyntaxKind.JSDocComment)) {\n              if (isTokenKind(child.kind))\n                return child;\n              node2 = child;\n              continue outer;\n            }\n          }\n          return;\n        }\n    }\n    function getCommentAtPosition(sourceFile, pos, parent = sourceFile) {\n      const token = getTokenAtPosition(parent, pos, sourceFile);\n      if (token === void 0 || token.kind === ts$1.SyntaxKind.JsxText || pos >= token.end - (ts$1.tokenToString(token.kind) || \"\").length)\n        return;\n      const startPos = token.pos === 0 ? (ts$1.getShebang(sourceFile.text) || \"\").length : token.pos;\n      return startPos !== 0 && ts$1.forEachTrailingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos) || ts$1.forEachLeadingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos);\n    }\n    exports.getCommentAtPosition = getCommentAtPosition;\n    function commentAtPositionCallback(pos, end, kind, _nl, at) {\n      return at >= pos && at < end ? { pos, end, kind } : void 0;\n    }\n    function isPositionInComment(sourceFile, pos, parent) {\n      return getCommentAtPosition(sourceFile, pos, parent) !== void 0;\n    }\n    exports.isPositionInComment = isPositionInComment;\n    function commentText(sourceText, comment) {\n      return sourceText.substring(comment.pos + 2, comment.kind === ts$1.SyntaxKind.SingleLineCommentTrivia ? comment.end : comment.end - 2);\n    }\n    exports.commentText = commentText;\n    function getAstNodeAtPosition(node2, pos) {\n      if (node2.pos > pos || node2.end <= pos)\n        return;\n      while (isNodeKind(node2.kind)) {\n        const nested = ts$1.forEachChild(node2, (child) => child.pos <= pos && child.end > pos ? child : void 0);\n        if (nested === void 0)\n          break;\n        node2 = nested;\n      }\n      return node2;\n    }\n    exports.getAstNodeAtPosition = getAstNodeAtPosition;\n    function getWrappedNodeAtPosition(wrap, pos) {\n      if (wrap.node.pos > pos || wrap.node.end <= pos)\n        return;\n      outer:\n        while (true) {\n          for (const child of wrap.children) {\n            if (child.node.pos > pos)\n              return wrap;\n            if (child.node.end > pos) {\n              wrap = child;\n              continue outer;\n            }\n          }\n          return wrap;\n        }\n    }\n    exports.getWrappedNodeAtPosition = getWrappedNodeAtPosition;\n    function getPropertyName(propertyName) {\n      if (propertyName.kind === ts$1.SyntaxKind.ComputedPropertyName) {\n        const expression = unwrapParentheses(propertyName.expression);\n        if (node_1.isPrefixUnaryExpression(expression)) {\n          let negate = false;\n          switch (expression.operator) {\n            case ts$1.SyntaxKind.MinusToken:\n              negate = true;\n            case ts$1.SyntaxKind.PlusToken:\n              return node_1.isNumericLiteral(expression.operand) ? `${negate ? \"-\" : \"\"}${expression.operand.text}` : _3_2_1.isBigIntLiteral(expression.operand) ? `${negate ? \"-\" : \"\"}${expression.operand.text.slice(0, -1)}` : void 0;\n            default:\n              return;\n          }\n        }\n        if (_3_2_1.isBigIntLiteral(expression))\n          return expression.text.slice(0, -1);\n        if (node_1.isNumericOrStringLikeLiteral(expression))\n          return expression.text;\n        return;\n      }\n      return propertyName.kind === ts$1.SyntaxKind.PrivateIdentifier ? void 0 : propertyName.text;\n    }\n    exports.getPropertyName = getPropertyName;\n    function forEachDestructuringIdentifier(pattern, fn) {\n      for (const element of pattern.elements) {\n        if (element.kind !== ts$1.SyntaxKind.BindingElement)\n          continue;\n        let result;\n        if (element.name.kind === ts$1.SyntaxKind.Identifier) {\n          result = fn(element);\n        } else {\n          result = forEachDestructuringIdentifier(element.name, fn);\n        }\n        if (result)\n          return result;\n      }\n    }\n    exports.forEachDestructuringIdentifier = forEachDestructuringIdentifier;\n    function forEachDeclaredVariable(declarationList, cb) {\n      for (const declaration of declarationList.declarations) {\n        let result;\n        if (declaration.name.kind === ts$1.SyntaxKind.Identifier) {\n          result = cb(declaration);\n        } else {\n          result = forEachDestructuringIdentifier(declaration.name, cb);\n        }\n        if (result)\n          return result;\n      }\n    }\n    exports.forEachDeclaredVariable = forEachDeclaredVariable;\n    (function(VariableDeclarationKind) {\n      VariableDeclarationKind[VariableDeclarationKind[\"Var\"] = 0] = \"Var\";\n      VariableDeclarationKind[VariableDeclarationKind[\"Let\"] = 1] = \"Let\";\n      VariableDeclarationKind[VariableDeclarationKind[\"Const\"] = 2] = \"Const\";\n    })(exports.VariableDeclarationKind || (exports.VariableDeclarationKind = {}));\n    function getVariableDeclarationKind(declarationList) {\n      if (declarationList.flags & ts$1.NodeFlags.Let)\n        return 1;\n      if (declarationList.flags & ts$1.NodeFlags.Const)\n        return 2;\n      return 0;\n    }\n    exports.getVariableDeclarationKind = getVariableDeclarationKind;\n    function isBlockScopedVariableDeclarationList(declarationList) {\n      return (declarationList.flags & ts$1.NodeFlags.BlockScoped) !== 0;\n    }\n    exports.isBlockScopedVariableDeclarationList = isBlockScopedVariableDeclarationList;\n    function isBlockScopedVariableDeclaration(declaration) {\n      const parent = declaration.parent;\n      return parent.kind === ts$1.SyntaxKind.CatchClause || isBlockScopedVariableDeclarationList(parent);\n    }\n    exports.isBlockScopedVariableDeclaration = isBlockScopedVariableDeclaration;\n    function isBlockScopedDeclarationStatement(statement) {\n      switch (statement.kind) {\n        case ts$1.SyntaxKind.VariableStatement:\n          return isBlockScopedVariableDeclarationList(statement.declarationList);\n        case ts$1.SyntaxKind.ClassDeclaration:\n        case ts$1.SyntaxKind.EnumDeclaration:\n        case ts$1.SyntaxKind.InterfaceDeclaration:\n        case ts$1.SyntaxKind.TypeAliasDeclaration:\n          return true;\n        default:\n          return false;\n      }\n    }\n    exports.isBlockScopedDeclarationStatement = isBlockScopedDeclarationStatement;\n    function isInSingleStatementContext(statement) {\n      switch (statement.parent.kind) {\n        case ts$1.SyntaxKind.ForStatement:\n        case ts$1.SyntaxKind.ForInStatement:\n        case ts$1.SyntaxKind.ForOfStatement:\n        case ts$1.SyntaxKind.WhileStatement:\n        case ts$1.SyntaxKind.DoStatement:\n        case ts$1.SyntaxKind.IfStatement:\n        case ts$1.SyntaxKind.WithStatement:\n        case ts$1.SyntaxKind.LabeledStatement:\n          return true;\n        default:\n          return false;\n      }\n    }\n    exports.isInSingleStatementContext = isInSingleStatementContext;\n    (function(ScopeBoundary) {\n      ScopeBoundary[ScopeBoundary[\"None\"] = 0] = \"None\";\n      ScopeBoundary[ScopeBoundary[\"Function\"] = 1] = \"Function\";\n      ScopeBoundary[ScopeBoundary[\"Block\"] = 2] = \"Block\";\n      ScopeBoundary[ScopeBoundary[\"Type\"] = 4] = \"Type\";\n      ScopeBoundary[ScopeBoundary[\"ConditionalType\"] = 8] = \"ConditionalType\";\n    })(exports.ScopeBoundary || (exports.ScopeBoundary = {}));\n    (function(ScopeBoundarySelector) {\n      ScopeBoundarySelector[ScopeBoundarySelector[\"Function\"] = 1] = \"Function\";\n      ScopeBoundarySelector[ScopeBoundarySelector[\"Block\"] = 3] = \"Block\";\n      ScopeBoundarySelector[ScopeBoundarySelector[\"Type\"] = 7] = \"Type\";\n      ScopeBoundarySelector[ScopeBoundarySelector[\"InferType\"] = 8] = \"InferType\";\n    })(exports.ScopeBoundarySelector || (exports.ScopeBoundarySelector = {}));\n    function isScopeBoundary(node2) {\n      return isFunctionScopeBoundary(node2) || isBlockScopeBoundary(node2) || isTypeScopeBoundary(node2);\n    }\n    exports.isScopeBoundary = isScopeBoundary;\n    function isTypeScopeBoundary(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.InterfaceDeclaration:\n        case ts$1.SyntaxKind.TypeAliasDeclaration:\n        case ts$1.SyntaxKind.MappedType:\n          return 4;\n        case ts$1.SyntaxKind.ConditionalType:\n          return 8;\n        default:\n          return 0;\n      }\n    }\n    exports.isTypeScopeBoundary = isTypeScopeBoundary;\n    function isFunctionScopeBoundary(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.FunctionExpression:\n        case ts$1.SyntaxKind.ArrowFunction:\n        case ts$1.SyntaxKind.Constructor:\n        case ts$1.SyntaxKind.ModuleDeclaration:\n        case ts$1.SyntaxKind.ClassDeclaration:\n        case ts$1.SyntaxKind.ClassExpression:\n        case ts$1.SyntaxKind.EnumDeclaration:\n        case ts$1.SyntaxKind.MethodDeclaration:\n        case ts$1.SyntaxKind.FunctionDeclaration:\n        case ts$1.SyntaxKind.GetAccessor:\n        case ts$1.SyntaxKind.SetAccessor:\n        case ts$1.SyntaxKind.MethodSignature:\n        case ts$1.SyntaxKind.CallSignature:\n        case ts$1.SyntaxKind.ConstructSignature:\n        case ts$1.SyntaxKind.ConstructorType:\n        case ts$1.SyntaxKind.FunctionType:\n          return 1;\n        case ts$1.SyntaxKind.SourceFile:\n          return ts$1.isExternalModule(node2) ? 1 : 0;\n        default:\n          return 0;\n      }\n    }\n    exports.isFunctionScopeBoundary = isFunctionScopeBoundary;\n    function isBlockScopeBoundary(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.Block:\n          const parent = node2.parent;\n          return parent.kind !== ts$1.SyntaxKind.CatchClause && // blocks inside SourceFile are block scope boundaries\n          (parent.kind === ts$1.SyntaxKind.SourceFile || // blocks that are direct children of a function scope boundary are no scope boundary\n          // for example the FunctionBlock is part of the function scope of the containing function\n          !isFunctionScopeBoundary(parent)) ? 2 : 0;\n        case ts$1.SyntaxKind.ForStatement:\n        case ts$1.SyntaxKind.ForInStatement:\n        case ts$1.SyntaxKind.ForOfStatement:\n        case ts$1.SyntaxKind.CaseBlock:\n        case ts$1.SyntaxKind.CatchClause:\n        case ts$1.SyntaxKind.WithStatement:\n          return 2;\n        default:\n          return 0;\n      }\n    }\n    exports.isBlockScopeBoundary = isBlockScopeBoundary;\n    function hasOwnThisReference(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.ClassDeclaration:\n        case ts$1.SyntaxKind.ClassExpression:\n        case ts$1.SyntaxKind.FunctionExpression:\n          return true;\n        case ts$1.SyntaxKind.FunctionDeclaration:\n          return node2.body !== void 0;\n        case ts$1.SyntaxKind.MethodDeclaration:\n        case ts$1.SyntaxKind.GetAccessor:\n        case ts$1.SyntaxKind.SetAccessor:\n          return node2.parent.kind === ts$1.SyntaxKind.ObjectLiteralExpression;\n        default:\n          return false;\n      }\n    }\n    exports.hasOwnThisReference = hasOwnThisReference;\n    function isFunctionWithBody(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.GetAccessor:\n        case ts$1.SyntaxKind.SetAccessor:\n        case ts$1.SyntaxKind.FunctionDeclaration:\n        case ts$1.SyntaxKind.MethodDeclaration:\n        case ts$1.SyntaxKind.Constructor:\n          return node2.body !== void 0;\n        case ts$1.SyntaxKind.FunctionExpression:\n        case ts$1.SyntaxKind.ArrowFunction:\n          return true;\n        default:\n          return false;\n      }\n    }\n    exports.isFunctionWithBody = isFunctionWithBody;\n    function forEachToken(node2, cb, sourceFile = node2.getSourceFile()) {\n      const queue = [];\n      while (true) {\n        if (isTokenKind(node2.kind)) {\n          cb(node2);\n        } else if (node2.kind !== ts$1.SyntaxKind.JSDocComment) {\n          const children = node2.getChildren(sourceFile);\n          if (children.length === 1) {\n            node2 = children[0];\n            continue;\n          }\n          for (let i = children.length - 1; i >= 0; --i)\n            queue.push(children[i]);\n        }\n        if (queue.length === 0)\n          break;\n        node2 = queue.pop();\n      }\n    }\n    exports.forEachToken = forEachToken;\n    function forEachTokenWithTrivia(node2, cb, sourceFile = node2.getSourceFile()) {\n      const fullText = sourceFile.text;\n      const scanner = ts$1.createScanner(sourceFile.languageVersion, false, sourceFile.languageVariant, fullText);\n      return forEachToken(node2, (token) => {\n        const tokenStart = token.kind === ts$1.SyntaxKind.JsxText || token.pos === token.end ? token.pos : token.getStart(sourceFile);\n        if (tokenStart !== token.pos) {\n          scanner.setTextPos(token.pos);\n          let kind = scanner.scan();\n          let pos = scanner.getTokenPos();\n          while (pos < tokenStart) {\n            const textPos = scanner.getTextPos();\n            cb(fullText, kind, { pos, end: textPos }, token.parent);\n            if (textPos === tokenStart)\n              break;\n            kind = scanner.scan();\n            pos = scanner.getTokenPos();\n          }\n        }\n        return cb(fullText, token.kind, { end: token.end, pos: tokenStart }, token.parent);\n      }, sourceFile);\n    }\n    exports.forEachTokenWithTrivia = forEachTokenWithTrivia;\n    function forEachComment(node2, cb, sourceFile = node2.getSourceFile()) {\n      const fullText = sourceFile.text;\n      const notJsx = sourceFile.languageVariant !== ts$1.LanguageVariant.JSX;\n      return forEachToken(node2, (token) => {\n        if (token.pos === token.end)\n          return;\n        if (token.kind !== ts$1.SyntaxKind.JsxText)\n          ts$1.forEachLeadingCommentRange(\n            fullText,\n            // skip shebang at position 0\n            token.pos === 0 ? (ts$1.getShebang(fullText) || \"\").length : token.pos,\n            commentCallback\n          );\n        if (notJsx || canHaveTrailingTrivia(token))\n          return ts$1.forEachTrailingCommentRange(fullText, token.end, commentCallback);\n      }, sourceFile);\n      function commentCallback(pos, end, kind) {\n        cb(fullText, { pos, end, kind });\n      }\n    }\n    exports.forEachComment = forEachComment;\n    function canHaveTrailingTrivia(token) {\n      switch (token.kind) {\n        case ts$1.SyntaxKind.CloseBraceToken:\n          return token.parent.kind !== ts$1.SyntaxKind.JsxExpression || !isJsxElementOrFragment(token.parent.parent);\n        case ts$1.SyntaxKind.GreaterThanToken:\n          switch (token.parent.kind) {\n            case ts$1.SyntaxKind.JsxOpeningElement:\n              return token.end !== token.parent.end;\n            case ts$1.SyntaxKind.JsxOpeningFragment:\n              return false;\n            case ts$1.SyntaxKind.JsxSelfClosingElement:\n              return token.end !== token.parent.end || // if end is not equal, this is part of the type arguments list\n              !isJsxElementOrFragment(token.parent.parent);\n            case ts$1.SyntaxKind.JsxClosingElement:\n            case ts$1.SyntaxKind.JsxClosingFragment:\n              return !isJsxElementOrFragment(token.parent.parent.parent);\n          }\n      }\n      return true;\n    }\n    function isJsxElementOrFragment(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxElement || node2.kind === ts$1.SyntaxKind.JsxFragment;\n    }\n    function getLineRanges(sourceFile) {\n      const lineStarts = sourceFile.getLineStarts();\n      const result = [];\n      const length = lineStarts.length;\n      const sourceText = sourceFile.text;\n      let pos = 0;\n      for (let i = 1; i < length; ++i) {\n        const end = lineStarts[i];\n        let lineEnd = end;\n        for (; lineEnd > pos; --lineEnd)\n          if (!ts$1.isLineBreak(sourceText.charCodeAt(lineEnd - 1)))\n            break;\n        result.push({\n          pos,\n          end,\n          contentLength: lineEnd - pos\n        });\n        pos = end;\n      }\n      result.push({\n        pos,\n        end: sourceFile.end,\n        contentLength: sourceFile.end - pos\n      });\n      return result;\n    }\n    exports.getLineRanges = getLineRanges;\n    function getLineBreakStyle(sourceFile) {\n      const lineStarts = sourceFile.getLineStarts();\n      return lineStarts.length === 1 || lineStarts[1] < 2 || sourceFile.text[lineStarts[1] - 2] !== \"\\r\" ? \"\\n\" : \"\\r\\n\";\n    }\n    exports.getLineBreakStyle = getLineBreakStyle;\n    let cachedScanner;\n    function scanToken(text, languageVersion) {\n      if (cachedScanner === void 0) {\n        cachedScanner = ts$1.createScanner(languageVersion, false, void 0, text);\n      } else {\n        cachedScanner.setScriptTarget(languageVersion);\n        cachedScanner.setText(text);\n      }\n      cachedScanner.scan();\n      return cachedScanner;\n    }\n    function isValidIdentifier(text, languageVersion = ts$1.ScriptTarget.Latest) {\n      const scan = scanToken(text, languageVersion);\n      return scan.isIdentifier() && scan.getTextPos() === text.length && scan.getTokenPos() === 0;\n    }\n    exports.isValidIdentifier = isValidIdentifier;\n    function charSize(ch) {\n      return ch >= 65536 ? 2 : 1;\n    }\n    function isValidPropertyAccess(text, languageVersion = ts$1.ScriptTarget.Latest) {\n      if (text.length === 0)\n        return false;\n      let ch = text.codePointAt(0);\n      if (!ts$1.isIdentifierStart(ch, languageVersion))\n        return false;\n      for (let i = charSize(ch); i < text.length; i += charSize(ch)) {\n        ch = text.codePointAt(i);\n        if (!ts$1.isIdentifierPart(ch, languageVersion))\n          return false;\n      }\n      return true;\n    }\n    exports.isValidPropertyAccess = isValidPropertyAccess;\n    function isValidPropertyName(text, languageVersion = ts$1.ScriptTarget.Latest) {\n      if (isValidPropertyAccess(text, languageVersion))\n        return true;\n      const scan = scanToken(text, languageVersion);\n      return scan.getTextPos() === text.length && scan.getToken() === ts$1.SyntaxKind.NumericLiteral && scan.getTokenValue() === text;\n    }\n    exports.isValidPropertyName = isValidPropertyName;\n    function isValidNumericLiteral(text, languageVersion = ts$1.ScriptTarget.Latest) {\n      const scan = scanToken(text, languageVersion);\n      return scan.getToken() === ts$1.SyntaxKind.NumericLiteral && scan.getTextPos() === text.length && scan.getTokenPos() === 0;\n    }\n    exports.isValidNumericLiteral = isValidNumericLiteral;\n    function isValidJsxIdentifier(text, languageVersion = ts$1.ScriptTarget.Latest) {\n      if (text.length === 0)\n        return false;\n      let seenNamespaceSeparator = false;\n      let ch = text.codePointAt(0);\n      if (!ts$1.isIdentifierStart(ch, languageVersion))\n        return false;\n      for (let i = charSize(ch); i < text.length; i += charSize(ch)) {\n        ch = text.codePointAt(i);\n        if (!ts$1.isIdentifierPart(ch, languageVersion) && ch !== 45) {\n          if (!seenNamespaceSeparator && ch === 58 && i + charSize(ch) !== text.length) {\n            seenNamespaceSeparator = true;\n          } else {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    exports.isValidJsxIdentifier = isValidJsxIdentifier;\n    function isNumericPropertyName(name) {\n      return String(+name) === name;\n    }\n    exports.isNumericPropertyName = isNumericPropertyName;\n    function isSameLine(sourceFile, pos1, pos2) {\n      return ts$1.getLineAndCharacterOfPosition(sourceFile, pos1).line === ts$1.getLineAndCharacterOfPosition(sourceFile, pos2).line;\n    }\n    exports.isSameLine = isSameLine;\n    (function(SideEffectOptions) {\n      SideEffectOptions[SideEffectOptions[\"None\"] = 0] = \"None\";\n      SideEffectOptions[SideEffectOptions[\"TaggedTemplate\"] = 1] = \"TaggedTemplate\";\n      SideEffectOptions[SideEffectOptions[\"Constructor\"] = 2] = \"Constructor\";\n      SideEffectOptions[SideEffectOptions[\"JsxElement\"] = 4] = \"JsxElement\";\n    })(exports.SideEffectOptions || (exports.SideEffectOptions = {}));\n    function hasSideEffects(node2, options) {\n      var _a, _b;\n      const queue = [];\n      while (true) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.CallExpression:\n          case ts$1.SyntaxKind.PostfixUnaryExpression:\n          case ts$1.SyntaxKind.AwaitExpression:\n          case ts$1.SyntaxKind.YieldExpression:\n          case ts$1.SyntaxKind.DeleteExpression:\n            return true;\n          case ts$1.SyntaxKind.TypeAssertionExpression:\n          case ts$1.SyntaxKind.AsExpression:\n          case ts$1.SyntaxKind.ParenthesizedExpression:\n          case ts$1.SyntaxKind.NonNullExpression:\n          case ts$1.SyntaxKind.VoidExpression:\n          case ts$1.SyntaxKind.TypeOfExpression:\n          case ts$1.SyntaxKind.PropertyAccessExpression:\n          case ts$1.SyntaxKind.SpreadElement:\n          case ts$1.SyntaxKind.PartiallyEmittedExpression:\n            node2 = node2.expression;\n            continue;\n          case ts$1.SyntaxKind.BinaryExpression:\n            if (isAssignmentKind(node2.operatorToken.kind))\n              return true;\n            queue.push(node2.right);\n            node2 = node2.left;\n            continue;\n          case ts$1.SyntaxKind.PrefixUnaryExpression:\n            switch (node2.operator) {\n              case ts$1.SyntaxKind.PlusPlusToken:\n              case ts$1.SyntaxKind.MinusMinusToken:\n                return true;\n              default:\n                node2 = node2.operand;\n                continue;\n            }\n          case ts$1.SyntaxKind.ElementAccessExpression:\n            if (node2.argumentExpression !== void 0)\n              queue.push(node2.argumentExpression);\n            node2 = node2.expression;\n            continue;\n          case ts$1.SyntaxKind.ConditionalExpression:\n            queue.push(node2.whenTrue, node2.whenFalse);\n            node2 = node2.condition;\n            continue;\n          case ts$1.SyntaxKind.NewExpression:\n            if (options & 2)\n              return true;\n            if (node2.arguments !== void 0)\n              queue.push(...node2.arguments);\n            node2 = node2.expression;\n            continue;\n          case ts$1.SyntaxKind.TaggedTemplateExpression:\n            if (options & 1)\n              return true;\n            queue.push(node2.tag);\n            node2 = node2.template;\n            if (node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral)\n              break;\n          case ts$1.SyntaxKind.TemplateExpression:\n            for (const child of node2.templateSpans)\n              queue.push(child.expression);\n            break;\n          case ts$1.SyntaxKind.ClassExpression: {\n            if (node2.decorators !== void 0)\n              return true;\n            for (const child of node2.members) {\n              if (child.decorators !== void 0)\n                return true;\n              if (!hasModifier(child.modifiers, ts$1.SyntaxKind.DeclareKeyword)) {\n                if (((_a = child.name) === null || _a === void 0 ? void 0 : _a.kind) === ts$1.SyntaxKind.ComputedPropertyName)\n                  queue.push(child.name.expression);\n                if (node_1.isMethodDeclaration(child)) {\n                  for (const p of child.parameters)\n                    if (p.decorators !== void 0)\n                      return true;\n                } else if (node_1.isPropertyDeclaration(child) && child.initializer !== void 0 && hasModifier(child.modifiers, ts$1.SyntaxKind.StaticKeyword)) {\n                  queue.push(child.initializer);\n                }\n              }\n            }\n            const base = getBaseOfClassLikeExpression(node2);\n            if (base === void 0)\n              break;\n            node2 = base.expression;\n            continue;\n          }\n          case ts$1.SyntaxKind.ArrayLiteralExpression:\n            queue.push(...node2.elements);\n            break;\n          case ts$1.SyntaxKind.ObjectLiteralExpression:\n            for (const child of node2.properties) {\n              if (((_b = child.name) === null || _b === void 0 ? void 0 : _b.kind) === ts$1.SyntaxKind.ComputedPropertyName)\n                queue.push(child.name.expression);\n              switch (child.kind) {\n                case ts$1.SyntaxKind.PropertyAssignment:\n                  queue.push(child.initializer);\n                  break;\n                case ts$1.SyntaxKind.SpreadAssignment:\n                  queue.push(child.expression);\n              }\n            }\n            break;\n          case ts$1.SyntaxKind.JsxExpression:\n            if (node2.expression === void 0)\n              break;\n            node2 = node2.expression;\n            continue;\n          case ts$1.SyntaxKind.JsxElement:\n          case ts$1.SyntaxKind.JsxFragment:\n            for (const child of node2.children)\n              if (child.kind !== ts$1.SyntaxKind.JsxText)\n                queue.push(child);\n            if (node2.kind === ts$1.SyntaxKind.JsxFragment)\n              break;\n            node2 = node2.openingElement;\n          case ts$1.SyntaxKind.JsxSelfClosingElement:\n          case ts$1.SyntaxKind.JsxOpeningElement:\n            if (options & 4)\n              return true;\n            for (const child of node2.attributes.properties) {\n              if (child.kind === ts$1.SyntaxKind.JsxSpreadAttribute) {\n                queue.push(child.expression);\n              } else if (child.initializer !== void 0) {\n                queue.push(child.initializer);\n              }\n            }\n            break;\n          case ts$1.SyntaxKind.CommaListExpression:\n            queue.push(...node2.elements);\n        }\n        if (queue.length === 0)\n          return false;\n        node2 = queue.pop();\n      }\n    }\n    exports.hasSideEffects = hasSideEffects;\n    function getDeclarationOfBindingElement(node2) {\n      let parent = node2.parent.parent;\n      while (parent.kind === ts$1.SyntaxKind.BindingElement)\n        parent = parent.parent.parent;\n      return parent;\n    }\n    exports.getDeclarationOfBindingElement = getDeclarationOfBindingElement;\n    function isExpressionValueUsed(node2) {\n      while (true) {\n        const parent = node2.parent;\n        switch (parent.kind) {\n          case ts$1.SyntaxKind.CallExpression:\n          case ts$1.SyntaxKind.NewExpression:\n          case ts$1.SyntaxKind.ElementAccessExpression:\n          case ts$1.SyntaxKind.WhileStatement:\n          case ts$1.SyntaxKind.DoStatement:\n          case ts$1.SyntaxKind.WithStatement:\n          case ts$1.SyntaxKind.ThrowStatement:\n          case ts$1.SyntaxKind.ReturnStatement:\n          case ts$1.SyntaxKind.JsxExpression:\n          case ts$1.SyntaxKind.JsxSpreadAttribute:\n          case ts$1.SyntaxKind.JsxElement:\n          case ts$1.SyntaxKind.JsxFragment:\n          case ts$1.SyntaxKind.JsxSelfClosingElement:\n          case ts$1.SyntaxKind.ComputedPropertyName:\n          case ts$1.SyntaxKind.ArrowFunction:\n          case ts$1.SyntaxKind.ExportSpecifier:\n          case ts$1.SyntaxKind.ExportAssignment:\n          case ts$1.SyntaxKind.ImportDeclaration:\n          case ts$1.SyntaxKind.ExternalModuleReference:\n          case ts$1.SyntaxKind.Decorator:\n          case ts$1.SyntaxKind.TaggedTemplateExpression:\n          case ts$1.SyntaxKind.TemplateSpan:\n          case ts$1.SyntaxKind.ExpressionWithTypeArguments:\n          case ts$1.SyntaxKind.TypeOfExpression:\n          case ts$1.SyntaxKind.AwaitExpression:\n          case ts$1.SyntaxKind.YieldExpression:\n          case ts$1.SyntaxKind.LiteralType:\n          case ts$1.SyntaxKind.JsxAttributes:\n          case ts$1.SyntaxKind.JsxOpeningElement:\n          case ts$1.SyntaxKind.JsxClosingElement:\n          case ts$1.SyntaxKind.IfStatement:\n          case ts$1.SyntaxKind.CaseClause:\n          case ts$1.SyntaxKind.SwitchStatement:\n            return true;\n          case ts$1.SyntaxKind.PropertyAccessExpression:\n            return parent.expression === node2;\n          case ts$1.SyntaxKind.QualifiedName:\n            return parent.left === node2;\n          case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n            return parent.objectAssignmentInitializer === node2 || !isInDestructuringAssignment(parent);\n          case ts$1.SyntaxKind.PropertyAssignment:\n            return parent.initializer === node2 && !isInDestructuringAssignment(parent);\n          case ts$1.SyntaxKind.SpreadAssignment:\n          case ts$1.SyntaxKind.SpreadElement:\n          case ts$1.SyntaxKind.ArrayLiteralExpression:\n            return !isInDestructuringAssignment(parent);\n          case ts$1.SyntaxKind.ParenthesizedExpression:\n          case ts$1.SyntaxKind.AsExpression:\n          case ts$1.SyntaxKind.TypeAssertionExpression:\n          case ts$1.SyntaxKind.PostfixUnaryExpression:\n          case ts$1.SyntaxKind.PrefixUnaryExpression:\n          case ts$1.SyntaxKind.NonNullExpression:\n            node2 = parent;\n            continue;\n          case ts$1.SyntaxKind.ForStatement:\n            return parent.condition === node2;\n          case ts$1.SyntaxKind.ForInStatement:\n          case ts$1.SyntaxKind.ForOfStatement:\n            return parent.expression === node2;\n          case ts$1.SyntaxKind.ConditionalExpression:\n            if (parent.condition === node2)\n              return true;\n            node2 = parent;\n            break;\n          case ts$1.SyntaxKind.PropertyDeclaration:\n          case ts$1.SyntaxKind.BindingElement:\n          case ts$1.SyntaxKind.VariableDeclaration:\n          case ts$1.SyntaxKind.Parameter:\n          case ts$1.SyntaxKind.EnumMember:\n            return parent.initializer === node2;\n          case ts$1.SyntaxKind.ImportEqualsDeclaration:\n            return parent.moduleReference === node2;\n          case ts$1.SyntaxKind.CommaListExpression:\n            if (parent.elements[parent.elements.length - 1] !== node2)\n              return false;\n            node2 = parent;\n            break;\n          case ts$1.SyntaxKind.BinaryExpression:\n            if (parent.right === node2) {\n              if (parent.operatorToken.kind === ts$1.SyntaxKind.CommaToken) {\n                node2 = parent;\n                break;\n              }\n              return true;\n            }\n            switch (parent.operatorToken.kind) {\n              case ts$1.SyntaxKind.CommaToken:\n              case ts$1.SyntaxKind.EqualsToken:\n                return false;\n              case ts$1.SyntaxKind.EqualsEqualsEqualsToken:\n              case ts$1.SyntaxKind.EqualsEqualsToken:\n              case ts$1.SyntaxKind.ExclamationEqualsEqualsToken:\n              case ts$1.SyntaxKind.ExclamationEqualsToken:\n              case ts$1.SyntaxKind.InstanceOfKeyword:\n              case ts$1.SyntaxKind.PlusToken:\n              case ts$1.SyntaxKind.MinusToken:\n              case ts$1.SyntaxKind.AsteriskToken:\n              case ts$1.SyntaxKind.SlashToken:\n              case ts$1.SyntaxKind.PercentToken:\n              case ts$1.SyntaxKind.AsteriskAsteriskToken:\n              case ts$1.SyntaxKind.GreaterThanToken:\n              case ts$1.SyntaxKind.GreaterThanGreaterThanToken:\n              case ts$1.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n              case ts$1.SyntaxKind.GreaterThanEqualsToken:\n              case ts$1.SyntaxKind.LessThanToken:\n              case ts$1.SyntaxKind.LessThanLessThanToken:\n              case ts$1.SyntaxKind.LessThanEqualsToken:\n              case ts$1.SyntaxKind.AmpersandToken:\n              case ts$1.SyntaxKind.BarToken:\n              case ts$1.SyntaxKind.CaretToken:\n              case ts$1.SyntaxKind.BarBarToken:\n              case ts$1.SyntaxKind.AmpersandAmpersandToken:\n              case ts$1.SyntaxKind.QuestionQuestionToken:\n              case ts$1.SyntaxKind.InKeyword:\n              case ts$1.SyntaxKind.QuestionQuestionEqualsToken:\n              case ts$1.SyntaxKind.AmpersandAmpersandEqualsToken:\n              case ts$1.SyntaxKind.BarBarEqualsToken:\n                return true;\n              default:\n                node2 = parent;\n            }\n            break;\n          default:\n            return false;\n        }\n      }\n    }\n    exports.isExpressionValueUsed = isExpressionValueUsed;\n    function isInDestructuringAssignment(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n          if (node2.objectAssignmentInitializer !== void 0)\n            return true;\n        case ts$1.SyntaxKind.PropertyAssignment:\n        case ts$1.SyntaxKind.SpreadAssignment:\n          node2 = node2.parent;\n          break;\n        case ts$1.SyntaxKind.SpreadElement:\n          if (node2.parent.kind !== ts$1.SyntaxKind.ArrayLiteralExpression)\n            return false;\n          node2 = node2.parent;\n      }\n      while (true) {\n        switch (node2.parent.kind) {\n          case ts$1.SyntaxKind.BinaryExpression:\n            return node2.parent.left === node2 && node2.parent.operatorToken.kind === ts$1.SyntaxKind.EqualsToken;\n          case ts$1.SyntaxKind.ForOfStatement:\n            return node2.parent.initializer === node2;\n          case ts$1.SyntaxKind.ArrayLiteralExpression:\n          case ts$1.SyntaxKind.ObjectLiteralExpression:\n            node2 = node2.parent;\n            break;\n          case ts$1.SyntaxKind.SpreadAssignment:\n          case ts$1.SyntaxKind.PropertyAssignment:\n            node2 = node2.parent.parent;\n            break;\n          case ts$1.SyntaxKind.SpreadElement:\n            if (node2.parent.parent.kind !== ts$1.SyntaxKind.ArrayLiteralExpression)\n              return false;\n            node2 = node2.parent.parent;\n            break;\n          default:\n            return false;\n        }\n      }\n    }\n    (function(AccessKind) {\n      AccessKind[AccessKind[\"None\"] = 0] = \"None\";\n      AccessKind[AccessKind[\"Read\"] = 1] = \"Read\";\n      AccessKind[AccessKind[\"Write\"] = 2] = \"Write\";\n      AccessKind[AccessKind[\"Delete\"] = 4] = \"Delete\";\n      AccessKind[AccessKind[\"ReadWrite\"] = 3] = \"ReadWrite\";\n      AccessKind[AccessKind[\"Modification\"] = 6] = \"Modification\";\n    })(exports.AccessKind || (exports.AccessKind = {}));\n    function getAccessKind(node2) {\n      const parent = node2.parent;\n      switch (parent.kind) {\n        case ts$1.SyntaxKind.DeleteExpression:\n          return 4;\n        case ts$1.SyntaxKind.PostfixUnaryExpression:\n          return 3;\n        case ts$1.SyntaxKind.PrefixUnaryExpression:\n          return parent.operator === ts$1.SyntaxKind.PlusPlusToken || parent.operator === ts$1.SyntaxKind.MinusMinusToken ? 3 : 1;\n        case ts$1.SyntaxKind.BinaryExpression:\n          return parent.right === node2 ? 1 : !isAssignmentKind(parent.operatorToken.kind) ? 1 : parent.operatorToken.kind === ts$1.SyntaxKind.EqualsToken ? 2 : 3;\n        case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n          return parent.objectAssignmentInitializer === node2 ? 1 : isInDestructuringAssignment(parent) ? 2 : 1;\n        case ts$1.SyntaxKind.PropertyAssignment:\n          return parent.name === node2 ? 0 : isInDestructuringAssignment(parent) ? 2 : 1;\n        case ts$1.SyntaxKind.ArrayLiteralExpression:\n        case ts$1.SyntaxKind.SpreadElement:\n        case ts$1.SyntaxKind.SpreadAssignment:\n          return isInDestructuringAssignment(parent) ? 2 : 1;\n        case ts$1.SyntaxKind.ParenthesizedExpression:\n        case ts$1.SyntaxKind.NonNullExpression:\n        case ts$1.SyntaxKind.TypeAssertionExpression:\n        case ts$1.SyntaxKind.AsExpression:\n          return getAccessKind(parent);\n        case ts$1.SyntaxKind.ForOfStatement:\n        case ts$1.SyntaxKind.ForInStatement:\n          return parent.initializer === node2 ? 2 : 1;\n        case ts$1.SyntaxKind.ExpressionWithTypeArguments:\n          return parent.parent.token === ts$1.SyntaxKind.ExtendsKeyword && parent.parent.parent.kind !== ts$1.SyntaxKind.InterfaceDeclaration ? 1 : 0;\n        case ts$1.SyntaxKind.ComputedPropertyName:\n        case ts$1.SyntaxKind.ExpressionStatement:\n        case ts$1.SyntaxKind.TypeOfExpression:\n        case ts$1.SyntaxKind.ElementAccessExpression:\n        case ts$1.SyntaxKind.ForStatement:\n        case ts$1.SyntaxKind.IfStatement:\n        case ts$1.SyntaxKind.DoStatement:\n        case ts$1.SyntaxKind.WhileStatement:\n        case ts$1.SyntaxKind.SwitchStatement:\n        case ts$1.SyntaxKind.WithStatement:\n        case ts$1.SyntaxKind.ThrowStatement:\n        case ts$1.SyntaxKind.CallExpression:\n        case ts$1.SyntaxKind.NewExpression:\n        case ts$1.SyntaxKind.TaggedTemplateExpression:\n        case ts$1.SyntaxKind.JsxExpression:\n        case ts$1.SyntaxKind.Decorator:\n        case ts$1.SyntaxKind.TemplateSpan:\n        case ts$1.SyntaxKind.JsxOpeningElement:\n        case ts$1.SyntaxKind.JsxSelfClosingElement:\n        case ts$1.SyntaxKind.JsxSpreadAttribute:\n        case ts$1.SyntaxKind.VoidExpression:\n        case ts$1.SyntaxKind.ReturnStatement:\n        case ts$1.SyntaxKind.AwaitExpression:\n        case ts$1.SyntaxKind.YieldExpression:\n        case ts$1.SyntaxKind.ConditionalExpression:\n        case ts$1.SyntaxKind.CaseClause:\n        case ts$1.SyntaxKind.JsxElement:\n          return 1;\n        case ts$1.SyntaxKind.ArrowFunction:\n          return parent.body === node2 ? 1 : 2;\n        case ts$1.SyntaxKind.PropertyDeclaration:\n        case ts$1.SyntaxKind.VariableDeclaration:\n        case ts$1.SyntaxKind.Parameter:\n        case ts$1.SyntaxKind.EnumMember:\n        case ts$1.SyntaxKind.BindingElement:\n        case ts$1.SyntaxKind.JsxAttribute:\n          return parent.initializer === node2 ? 1 : 0;\n        case ts$1.SyntaxKind.PropertyAccessExpression:\n          return parent.expression === node2 ? 1 : 0;\n        case ts$1.SyntaxKind.ExportAssignment:\n          return parent.isExportEquals ? 1 : 0;\n      }\n      return 0;\n    }\n    exports.getAccessKind = getAccessKind;\n    function isReassignmentTarget(node2) {\n      return (getAccessKind(node2) & 2) !== 0;\n    }\n    exports.isReassignmentTarget = isReassignmentTarget;\n    function canHaveJsDoc(node2) {\n      const kind = node2.kind;\n      switch (kind) {\n        case ts$1.SyntaxKind.Parameter:\n        case ts$1.SyntaxKind.CallSignature:\n        case ts$1.SyntaxKind.ConstructSignature:\n        case ts$1.SyntaxKind.MethodSignature:\n        case ts$1.SyntaxKind.PropertySignature:\n        case ts$1.SyntaxKind.ArrowFunction:\n        case ts$1.SyntaxKind.ParenthesizedExpression:\n        case ts$1.SyntaxKind.SpreadAssignment:\n        case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n        case ts$1.SyntaxKind.PropertyAssignment:\n        case ts$1.SyntaxKind.FunctionExpression:\n        case ts$1.SyntaxKind.LabeledStatement:\n        case ts$1.SyntaxKind.ExpressionStatement:\n        case ts$1.SyntaxKind.VariableStatement:\n        case ts$1.SyntaxKind.FunctionDeclaration:\n        case ts$1.SyntaxKind.Constructor:\n        case ts$1.SyntaxKind.MethodDeclaration:\n        case ts$1.SyntaxKind.PropertyDeclaration:\n        case ts$1.SyntaxKind.GetAccessor:\n        case ts$1.SyntaxKind.SetAccessor:\n        case ts$1.SyntaxKind.ClassDeclaration:\n        case ts$1.SyntaxKind.ClassExpression:\n        case ts$1.SyntaxKind.InterfaceDeclaration:\n        case ts$1.SyntaxKind.TypeAliasDeclaration:\n        case ts$1.SyntaxKind.EnumMember:\n        case ts$1.SyntaxKind.EnumDeclaration:\n        case ts$1.SyntaxKind.ModuleDeclaration:\n        case ts$1.SyntaxKind.ImportEqualsDeclaration:\n        case ts$1.SyntaxKind.ImportDeclaration:\n        case ts$1.SyntaxKind.NamespaceExportDeclaration:\n        case ts$1.SyntaxKind.ExportAssignment:\n        case ts$1.SyntaxKind.IndexSignature:\n        case ts$1.SyntaxKind.FunctionType:\n        case ts$1.SyntaxKind.ConstructorType:\n        case ts$1.SyntaxKind.JSDocFunctionType:\n        case ts$1.SyntaxKind.ExportDeclaration:\n        case ts$1.SyntaxKind.NamedTupleMember:\n        case ts$1.SyntaxKind.EndOfFileToken:\n          return true;\n        default:\n          return false;\n      }\n    }\n    exports.canHaveJsDoc = canHaveJsDoc;\n    function getJsDoc(node2, sourceFile) {\n      const result = [];\n      for (const child of node2.getChildren(sourceFile)) {\n        if (!node_1.isJsDoc(child))\n          break;\n        result.push(child);\n      }\n      return result;\n    }\n    exports.getJsDoc = getJsDoc;\n    function parseJsDocOfNode(node2, considerTrailingComments, sourceFile = node2.getSourceFile()) {\n      if (canHaveJsDoc(node2) && node2.kind !== ts$1.SyntaxKind.EndOfFileToken) {\n        const result = getJsDoc(node2, sourceFile);\n        if (result.length !== 0 || !considerTrailingComments)\n          return result;\n      }\n      return parseJsDocWorker(node2, node2.getStart(sourceFile), sourceFile, considerTrailingComments);\n    }\n    exports.parseJsDocOfNode = parseJsDocOfNode;\n    function parseJsDocWorker(node2, nodeStart, sourceFile, considerTrailingComments) {\n      const start = ts$1[considerTrailingComments && isSameLine(sourceFile, node2.pos, nodeStart) ? \"forEachTrailingCommentRange\" : \"forEachLeadingCommentRange\"](\n        sourceFile.text,\n        node2.pos,\n        // return object to make `0` a truthy value\n        (pos, _end, kind) => kind === ts$1.SyntaxKind.MultiLineCommentTrivia && sourceFile.text[pos + 2] === \"*\" ? { pos } : void 0\n      );\n      if (start === void 0)\n        return [];\n      const startPos = start.pos;\n      const text = sourceFile.text.slice(startPos, nodeStart);\n      const newSourceFile = ts$1.createSourceFile(\"jsdoc.ts\", `${text}var a;`, sourceFile.languageVersion);\n      const result = getJsDoc(newSourceFile.statements[0], newSourceFile);\n      for (const doc of result)\n        updateNode(doc, node2);\n      return result;\n      function updateNode(n, parent) {\n        n.pos += startPos;\n        n.end += startPos;\n        n.parent = parent;\n        return ts$1.forEachChild(n, (child) => updateNode(child, n), (children) => {\n          children.pos += startPos;\n          children.end += startPos;\n          for (const child of children)\n            updateNode(child, n);\n        });\n      }\n    }\n    (function(ImportKind) {\n      ImportKind[ImportKind[\"ImportDeclaration\"] = 1] = \"ImportDeclaration\";\n      ImportKind[ImportKind[\"ImportEquals\"] = 2] = \"ImportEquals\";\n      ImportKind[ImportKind[\"ExportFrom\"] = 4] = \"ExportFrom\";\n      ImportKind[ImportKind[\"DynamicImport\"] = 8] = \"DynamicImport\";\n      ImportKind[ImportKind[\"Require\"] = 16] = \"Require\";\n      ImportKind[ImportKind[\"ImportType\"] = 32] = \"ImportType\";\n      ImportKind[ImportKind[\"All\"] = 63] = \"All\";\n      ImportKind[ImportKind[\"AllImports\"] = 59] = \"AllImports\";\n      ImportKind[ImportKind[\"AllStaticImports\"] = 3] = \"AllStaticImports\";\n      ImportKind[ImportKind[\"AllImportExpressions\"] = 24] = \"AllImportExpressions\";\n      ImportKind[ImportKind[\"AllRequireLike\"] = 18] = \"AllRequireLike\";\n      ImportKind[ImportKind[\"AllNestedImports\"] = 56] = \"AllNestedImports\";\n      ImportKind[ImportKind[\"AllTopLevelImports\"] = 7] = \"AllTopLevelImports\";\n    })(exports.ImportKind || (exports.ImportKind = {}));\n    function findImports(sourceFile, kinds, ignoreFileName = true) {\n      const result = [];\n      for (const node2 of findImportLikeNodes(sourceFile, kinds, ignoreFileName)) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.ImportDeclaration:\n            addIfTextualLiteral(node2.moduleSpecifier);\n            break;\n          case ts$1.SyntaxKind.ImportEqualsDeclaration:\n            addIfTextualLiteral(node2.moduleReference.expression);\n            break;\n          case ts$1.SyntaxKind.ExportDeclaration:\n            addIfTextualLiteral(node2.moduleSpecifier);\n            break;\n          case ts$1.SyntaxKind.CallExpression:\n            addIfTextualLiteral(node2.arguments[0]);\n            break;\n          case ts$1.SyntaxKind.ImportType:\n            if (node_1.isLiteralTypeNode(node2.argument))\n              addIfTextualLiteral(node2.argument.literal);\n            break;\n          default:\n            throw new Error(\"unexpected node\");\n        }\n      }\n      return result;\n      function addIfTextualLiteral(node2) {\n        if (node_1.isTextualLiteral(node2))\n          result.push(node2);\n      }\n    }\n    exports.findImports = findImports;\n    function findImportLikeNodes(sourceFile, kinds, ignoreFileName = true) {\n      return new ImportFinder(sourceFile, kinds, ignoreFileName).find();\n    }\n    exports.findImportLikeNodes = findImportLikeNodes;\n    class ImportFinder {\n      constructor(_sourceFile, _options, _ignoreFileName) {\n        this._sourceFile = _sourceFile;\n        this._options = _options;\n        this._ignoreFileName = _ignoreFileName;\n        this._result = [];\n      }\n      find() {\n        if (this._sourceFile.isDeclarationFile)\n          this._options &= ~24;\n        if (this._options & 7)\n          this._findImports(this._sourceFile.statements);\n        if (this._options & 56)\n          this._findNestedImports();\n        return this._result;\n      }\n      _findImports(statements) {\n        for (const statement of statements) {\n          if (node_1.isImportDeclaration(statement)) {\n            if (this._options & 1)\n              this._result.push(statement);\n          } else if (node_1.isImportEqualsDeclaration(statement)) {\n            if (this._options & 2 && statement.moduleReference.kind === ts$1.SyntaxKind.ExternalModuleReference)\n              this._result.push(statement);\n          } else if (node_1.isExportDeclaration(statement)) {\n            if (statement.moduleSpecifier !== void 0 && this._options & 4)\n              this._result.push(statement);\n          } else if (node_1.isModuleDeclaration(statement)) {\n            this._findImportsInModule(statement);\n          }\n        }\n      }\n      _findImportsInModule(declaration) {\n        if (declaration.body === void 0)\n          return;\n        if (declaration.body.kind === ts$1.SyntaxKind.ModuleDeclaration)\n          return this._findImportsInModule(declaration.body);\n        this._findImports(declaration.body.statements);\n      }\n      _findNestedImports() {\n        const isJavaScriptFile = this._ignoreFileName || (this._sourceFile.flags & ts$1.NodeFlags.JavaScriptFile) !== 0;\n        let re;\n        let includeJsDoc;\n        if ((this._options & 56) === 16) {\n          if (!isJavaScriptFile)\n            return;\n          re = /\\brequire\\s*[</(]/g;\n          includeJsDoc = false;\n        } else if (this._options & 16 && isJavaScriptFile) {\n          re = /\\b(?:import|require)\\s*[</(]/g;\n          includeJsDoc = (this._options & 32) !== 0;\n        } else {\n          re = /\\bimport\\s*[</(]/g;\n          includeJsDoc = isJavaScriptFile && (this._options & 32) !== 0;\n        }\n        for (let match2 = re.exec(this._sourceFile.text); match2 !== null; match2 = re.exec(this._sourceFile.text)) {\n          const token = getTokenAtPositionWorker(\n            this._sourceFile,\n            match2.index,\n            this._sourceFile,\n            // only look for ImportTypeNode within JSDoc in JS files\n            match2[0][0] === \"i\" && includeJsDoc\n          );\n          if (token.kind === ts$1.SyntaxKind.ImportKeyword) {\n            if (token.end - \"import\".length !== match2.index)\n              continue;\n            switch (token.parent.kind) {\n              case ts$1.SyntaxKind.ImportType:\n                this._result.push(token.parent);\n                break;\n              case ts$1.SyntaxKind.CallExpression:\n                if (token.parent.arguments.length > 1)\n                  this._result.push(token.parent);\n            }\n          } else if (token.kind === ts$1.SyntaxKind.Identifier && token.end - \"require\".length === match2.index && token.parent.kind === ts$1.SyntaxKind.CallExpression && token.parent.expression === token && token.parent.arguments.length === 1) {\n            this._result.push(token.parent);\n          }\n        }\n      }\n    }\n    function isStatementInAmbientContext(node2) {\n      while (node2.flags & ts$1.NodeFlags.NestedNamespace)\n        node2 = node2.parent;\n      return hasModifier(node2.modifiers, ts$1.SyntaxKind.DeclareKeyword) || isAmbientModuleBlock(node2.parent);\n    }\n    exports.isStatementInAmbientContext = isStatementInAmbientContext;\n    function isAmbientModuleBlock(node2) {\n      while (node2.kind === ts$1.SyntaxKind.ModuleBlock) {\n        do\n          node2 = node2.parent;\n        while (node2.flags & ts$1.NodeFlags.NestedNamespace);\n        if (hasModifier(node2.modifiers, ts$1.SyntaxKind.DeclareKeyword))\n          return true;\n        node2 = node2.parent;\n      }\n      return false;\n    }\n    exports.isAmbientModuleBlock = isAmbientModuleBlock;\n    function getIIFE(func) {\n      let node2 = func.parent;\n      while (node2.kind === ts$1.SyntaxKind.ParenthesizedExpression)\n        node2 = node2.parent;\n      return node_1.isCallExpression(node2) && func.end <= node2.expression.end ? node2 : void 0;\n    }\n    exports.getIIFE = getIIFE;\n    function isStrictCompilerOptionEnabled(options, option) {\n      return (options.strict ? options[option] !== false : options[option] === true) && (option !== \"strictPropertyInitialization\" || isStrictCompilerOptionEnabled(options, \"strictNullChecks\"));\n    }\n    exports.isStrictCompilerOptionEnabled = isStrictCompilerOptionEnabled;\n    function isCompilerOptionEnabled(options, option) {\n      switch (option) {\n        case \"stripInternal\":\n        case \"declarationMap\":\n        case \"emitDeclarationOnly\":\n          return options[option] === true && isCompilerOptionEnabled(options, \"declaration\");\n        case \"declaration\":\n          return options.declaration || isCompilerOptionEnabled(options, \"composite\");\n        case \"incremental\":\n          return options.incremental === void 0 ? isCompilerOptionEnabled(options, \"composite\") : options.incremental;\n        case \"skipDefaultLibCheck\":\n          return options.skipDefaultLibCheck || isCompilerOptionEnabled(options, \"skipLibCheck\");\n        case \"suppressImplicitAnyIndexErrors\":\n          return options.suppressImplicitAnyIndexErrors === true && isCompilerOptionEnabled(options, \"noImplicitAny\");\n        case \"allowSyntheticDefaultImports\":\n          return options.allowSyntheticDefaultImports !== void 0 ? options.allowSyntheticDefaultImports : isCompilerOptionEnabled(options, \"esModuleInterop\") || options.module === ts$1.ModuleKind.System;\n        case \"noUncheckedIndexedAccess\":\n          return options.noUncheckedIndexedAccess === true && isCompilerOptionEnabled(options, \"strictNullChecks\");\n        case \"allowJs\":\n          return options.allowJs === void 0 ? isCompilerOptionEnabled(options, \"checkJs\") : options.allowJs;\n        case \"noImplicitAny\":\n        case \"noImplicitThis\":\n        case \"strictNullChecks\":\n        case \"strictFunctionTypes\":\n        case \"strictPropertyInitialization\":\n        case \"alwaysStrict\":\n        case \"strictBindCallApply\":\n          return isStrictCompilerOptionEnabled(options, option);\n      }\n      return options[option] === true;\n    }\n    exports.isCompilerOptionEnabled = isCompilerOptionEnabled;\n    function isAmbientModule(node2) {\n      return node2.name.kind === ts$1.SyntaxKind.StringLiteral || (node2.flags & ts$1.NodeFlags.GlobalAugmentation) !== 0;\n    }\n    exports.isAmbientModule = isAmbientModule;\n    function getCheckJsDirective(source) {\n      return getTsCheckDirective(source);\n    }\n    exports.getCheckJsDirective = getCheckJsDirective;\n    function getTsCheckDirective(source) {\n      let directive;\n      ts$1.forEachLeadingCommentRange(source, (ts$1.getShebang(source) || \"\").length, (pos, end, kind) => {\n        if (kind === ts$1.SyntaxKind.SingleLineCommentTrivia) {\n          const text = source.slice(pos, end);\n          const match2 = /^\\/{2,3}\\s*@ts-(no)?check(?:\\s|$)/i.exec(text);\n          if (match2 !== null)\n            directive = { pos, end, enabled: match2[1] === void 0 };\n        }\n      });\n      return directive;\n    }\n    exports.getTsCheckDirective = getTsCheckDirective;\n    function isConstAssertion(node2) {\n      return node_1.isTypeReferenceNode(node2.type) && node2.type.typeName.kind === ts$1.SyntaxKind.Identifier && node2.type.typeName.escapedText === \"const\";\n    }\n    exports.isConstAssertion = isConstAssertion;\n    function isInConstContext(node2) {\n      let current = node2;\n      while (true) {\n        const parent = current.parent;\n        outer:\n          switch (parent.kind) {\n            case ts$1.SyntaxKind.TypeAssertionExpression:\n            case ts$1.SyntaxKind.AsExpression:\n              return isConstAssertion(parent);\n            case ts$1.SyntaxKind.PrefixUnaryExpression:\n              if (current.kind !== ts$1.SyntaxKind.NumericLiteral)\n                return false;\n              switch (parent.operator) {\n                case ts$1.SyntaxKind.PlusToken:\n                case ts$1.SyntaxKind.MinusToken:\n                  current = parent;\n                  break outer;\n                default:\n                  return false;\n              }\n            case ts$1.SyntaxKind.PropertyAssignment:\n              if (parent.initializer !== current)\n                return false;\n              current = parent.parent;\n              break;\n            case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n              current = parent.parent;\n              break;\n            case ts$1.SyntaxKind.ParenthesizedExpression:\n            case ts$1.SyntaxKind.ArrayLiteralExpression:\n            case ts$1.SyntaxKind.ObjectLiteralExpression:\n            case ts$1.SyntaxKind.TemplateExpression:\n              current = parent;\n              break;\n            default:\n              return false;\n          }\n      }\n    }\n    exports.isInConstContext = isInConstContext;\n    function isReadonlyAssignmentDeclaration(node2, checker) {\n      if (!isBindableObjectDefinePropertyCall(node2))\n        return false;\n      const descriptorType = checker.getTypeAtLocation(node2.arguments[2]);\n      if (descriptorType.getProperty(\"value\") === void 0)\n        return descriptorType.getProperty(\"set\") === void 0;\n      const writableProp = descriptorType.getProperty(\"writable\");\n      if (writableProp === void 0)\n        return false;\n      const writableType = writableProp.valueDeclaration !== void 0 && node_1.isPropertyAssignment(writableProp.valueDeclaration) ? checker.getTypeAtLocation(writableProp.valueDeclaration.initializer) : checker.getTypeOfSymbolAtLocation(writableProp, node2.arguments[2]);\n      return type_1.isBooleanLiteralType(writableType, false);\n    }\n    exports.isReadonlyAssignmentDeclaration = isReadonlyAssignmentDeclaration;\n    function isBindableObjectDefinePropertyCall(node2) {\n      return node2.arguments.length === 3 && node_1.isEntityNameExpression(node2.arguments[0]) && node_1.isNumericOrStringLikeLiteral(node2.arguments[1]) && node_1.isPropertyAccessExpression(node2.expression) && node2.expression.name.escapedText === \"defineProperty\" && node_1.isIdentifier(node2.expression.expression) && node2.expression.expression.escapedText === \"Object\";\n    }\n    exports.isBindableObjectDefinePropertyCall = isBindableObjectDefinePropertyCall;\n    function isWellKnownSymbolLiterally(node2) {\n      return ts$1.isPropertyAccessExpression(node2) && ts$1.isIdentifier(node2.expression) && node2.expression.escapedText === \"Symbol\";\n    }\n    exports.isWellKnownSymbolLiterally = isWellKnownSymbolLiterally;\n    function getPropertyNameOfWellKnownSymbol(node2) {\n      return {\n        displayName: `[Symbol.${node2.name.text}]`,\n        symbolName: \"__@\" + node2.name.text\n      };\n    }\n    exports.getPropertyNameOfWellKnownSymbol = getPropertyNameOfWellKnownSymbol;\n    const isTsBefore43 = (([major, minor]) => major < \"4\" || major === \"4\" && minor < \"3\")(ts$1.versionMajorMinor.split(\".\"));\n    function getLateBoundPropertyNames(node2, checker) {\n      const result = {\n        known: true,\n        names: []\n      };\n      node2 = unwrapParentheses(node2);\n      if (isTsBefore43 && isWellKnownSymbolLiterally(node2)) {\n        result.names.push(getPropertyNameOfWellKnownSymbol(node2));\n      } else {\n        const type2 = checker.getTypeAtLocation(node2);\n        for (const key of type_1.unionTypeParts(checker.getBaseConstraintOfType(type2) || type2)) {\n          const propertyName = type_1.getPropertyNameFromType(key);\n          if (propertyName) {\n            result.names.push(propertyName);\n          } else {\n            result.known = false;\n          }\n        }\n      }\n      return result;\n    }\n    exports.getLateBoundPropertyNames = getLateBoundPropertyNames;\n    function getLateBoundPropertyNamesOfPropertyName(node2, checker) {\n      const staticName = getPropertyName(node2);\n      return staticName !== void 0 ? { known: true, names: [{ displayName: staticName, symbolName: ts$1.escapeLeadingUnderscores(staticName) }] } : node2.kind === ts$1.SyntaxKind.PrivateIdentifier ? { known: true, names: [{ displayName: node2.text, symbolName: checker.getSymbolAtLocation(node2).escapedName }] } : getLateBoundPropertyNames(node2.expression, checker);\n    }\n    exports.getLateBoundPropertyNamesOfPropertyName = getLateBoundPropertyNamesOfPropertyName;\n    function getSingleLateBoundPropertyNameOfPropertyName(node2, checker) {\n      const staticName = getPropertyName(node2);\n      if (staticName !== void 0)\n        return { displayName: staticName, symbolName: ts$1.escapeLeadingUnderscores(staticName) };\n      if (node2.kind === ts$1.SyntaxKind.PrivateIdentifier)\n        return { displayName: node2.text, symbolName: checker.getSymbolAtLocation(node2).escapedName };\n      const { expression } = node2;\n      return isTsBefore43 && isWellKnownSymbolLiterally(expression) ? getPropertyNameOfWellKnownSymbol(expression) : type_1.getPropertyNameFromType(checker.getTypeAtLocation(expression));\n    }\n    exports.getSingleLateBoundPropertyNameOfPropertyName = getSingleLateBoundPropertyNameOfPropertyName;\n    function unwrapParentheses(node2) {\n      while (node2.kind === ts$1.SyntaxKind.ParenthesizedExpression)\n        node2 = node2.expression;\n      return node2;\n    }\n    exports.unwrapParentheses = unwrapParentheses;\n    function formatPseudoBigInt(v) {\n      return `${v.negative ? \"-\" : \"\"}${v.base10Value}n`;\n    }\n    exports.formatPseudoBigInt = formatPseudoBigInt;\n    function hasExhaustiveCaseClauses(node2, checker) {\n      const caseClauses = node2.caseBlock.clauses.filter(node_1.isCaseClause);\n      if (caseClauses.length === 0)\n        return false;\n      const typeParts = type_1.unionTypeParts(checker.getTypeAtLocation(node2.expression));\n      if (typeParts.length > caseClauses.length)\n        return false;\n      const types2 = new Set(typeParts.map(getPrimitiveLiteralFromType));\n      if (types2.has(void 0))\n        return false;\n      const seen = /* @__PURE__ */ new Set();\n      for (const clause of caseClauses) {\n        const expressionType = checker.getTypeAtLocation(clause.expression);\n        if (exports.isTypeFlagSet(expressionType, ts$1.TypeFlags.Never))\n          continue;\n        const type2 = getPrimitiveLiteralFromType(expressionType);\n        if (types2.has(type2)) {\n          seen.add(type2);\n        } else if (type2 !== \"null\" && type2 !== \"undefined\") {\n          return false;\n        }\n      }\n      return types2.size === seen.size;\n    }\n    exports.hasExhaustiveCaseClauses = hasExhaustiveCaseClauses;\n    function getPrimitiveLiteralFromType(t) {\n      if (exports.isTypeFlagSet(t, ts$1.TypeFlags.Null))\n        return \"null\";\n      if (exports.isTypeFlagSet(t, ts$1.TypeFlags.Undefined))\n        return \"undefined\";\n      if (exports.isTypeFlagSet(t, ts$1.TypeFlags.NumberLiteral))\n        return `${exports.isTypeFlagSet(t, ts$1.TypeFlags.EnumLiteral) ? \"enum:\" : \"\"}${t.value}`;\n      if (exports.isTypeFlagSet(t, ts$1.TypeFlags.StringLiteral))\n        return `${exports.isTypeFlagSet(t, ts$1.TypeFlags.EnumLiteral) ? \"enum:\" : \"\"}string:${t.value}`;\n      if (exports.isTypeFlagSet(t, ts$1.TypeFlags.BigIntLiteral))\n        return formatPseudoBigInt(t.value);\n      if (_3_2_1.isUniqueESSymbolType(t))\n        return t.escapedName;\n      if (type_1.isBooleanLiteralType(t, true))\n        return \"true\";\n      if (type_1.isBooleanLiteralType(t, false))\n        return \"false\";\n    }\n    function getBaseOfClassLikeExpression(node2) {\n      var _a;\n      if (((_a = node2.heritageClauses) === null || _a === void 0 ? void 0 : _a[0].token) === ts$1.SyntaxKind.ExtendsKeyword)\n        return node2.heritageClauses[0].types[0];\n    }\n    exports.getBaseOfClassLikeExpression = getBaseOfClassLikeExpression;\n  })(util$1);\n  return util$1;\n}\nvar usage = {};\nvar hasRequiredUsage;\nfunction requireUsage() {\n  if (hasRequiredUsage)\n    return usage;\n  hasRequiredUsage = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.collectVariableUsage = exports.getDeclarationDomain = exports.getUsageDomain = exports.UsageDomain = exports.DeclarationDomain = void 0;\n    const util_1 = requireUtil$1();\n    const ts$1 = ts;\n    (function(DeclarationDomain) {\n      DeclarationDomain[DeclarationDomain[\"Namespace\"] = 1] = \"Namespace\";\n      DeclarationDomain[DeclarationDomain[\"Type\"] = 2] = \"Type\";\n      DeclarationDomain[DeclarationDomain[\"Value\"] = 4] = \"Value\";\n      DeclarationDomain[DeclarationDomain[\"Import\"] = 8] = \"Import\";\n      DeclarationDomain[DeclarationDomain[\"Any\"] = 7] = \"Any\";\n    })(exports.DeclarationDomain || (exports.DeclarationDomain = {}));\n    (function(UsageDomain) {\n      UsageDomain[UsageDomain[\"Namespace\"] = 1] = \"Namespace\";\n      UsageDomain[UsageDomain[\"Type\"] = 2] = \"Type\";\n      UsageDomain[UsageDomain[\"Value\"] = 4] = \"Value\";\n      UsageDomain[UsageDomain[\"ValueOrNamespace\"] = 5] = \"ValueOrNamespace\";\n      UsageDomain[UsageDomain[\"Any\"] = 7] = \"Any\";\n      UsageDomain[UsageDomain[\"TypeQuery\"] = 8] = \"TypeQuery\";\n    })(exports.UsageDomain || (exports.UsageDomain = {}));\n    function getUsageDomain(node2) {\n      const parent = node2.parent;\n      switch (parent.kind) {\n        case ts$1.SyntaxKind.TypeReference:\n          return node2.originalKeywordKind !== ts$1.SyntaxKind.ConstKeyword ? 2 : void 0;\n        case ts$1.SyntaxKind.ExpressionWithTypeArguments:\n          return parent.parent.token === ts$1.SyntaxKind.ImplementsKeyword || parent.parent.parent.kind === ts$1.SyntaxKind.InterfaceDeclaration ? 2 : 4;\n        case ts$1.SyntaxKind.TypeQuery:\n          return 5 | 8;\n        case ts$1.SyntaxKind.QualifiedName:\n          if (parent.left === node2) {\n            if (getEntityNameParent(parent).kind === ts$1.SyntaxKind.TypeQuery)\n              return 1 | 8;\n            return 1;\n          }\n          break;\n        case ts$1.SyntaxKind.ExportSpecifier:\n          if (parent.propertyName === void 0 || parent.propertyName === node2)\n            return 7;\n          break;\n        case ts$1.SyntaxKind.ExportAssignment:\n          return 7;\n        case ts$1.SyntaxKind.BindingElement:\n          if (parent.initializer === node2)\n            return 5;\n          break;\n        case ts$1.SyntaxKind.Parameter:\n        case ts$1.SyntaxKind.EnumMember:\n        case ts$1.SyntaxKind.PropertyDeclaration:\n        case ts$1.SyntaxKind.VariableDeclaration:\n        case ts$1.SyntaxKind.PropertyAssignment:\n        case ts$1.SyntaxKind.PropertyAccessExpression:\n        case ts$1.SyntaxKind.ImportEqualsDeclaration:\n          if (parent.name !== node2)\n            return 5;\n          break;\n        case ts$1.SyntaxKind.JsxAttribute:\n        case ts$1.SyntaxKind.FunctionDeclaration:\n        case ts$1.SyntaxKind.FunctionExpression:\n        case ts$1.SyntaxKind.NamespaceImport:\n        case ts$1.SyntaxKind.ClassDeclaration:\n        case ts$1.SyntaxKind.ClassExpression:\n        case ts$1.SyntaxKind.ModuleDeclaration:\n        case ts$1.SyntaxKind.MethodDeclaration:\n        case ts$1.SyntaxKind.EnumDeclaration:\n        case ts$1.SyntaxKind.GetAccessor:\n        case ts$1.SyntaxKind.SetAccessor:\n        case ts$1.SyntaxKind.LabeledStatement:\n        case ts$1.SyntaxKind.BreakStatement:\n        case ts$1.SyntaxKind.ContinueStatement:\n        case ts$1.SyntaxKind.ImportClause:\n        case ts$1.SyntaxKind.ImportSpecifier:\n        case ts$1.SyntaxKind.TypePredicate:\n        case ts$1.SyntaxKind.MethodSignature:\n        case ts$1.SyntaxKind.PropertySignature:\n        case ts$1.SyntaxKind.NamespaceExportDeclaration:\n        case ts$1.SyntaxKind.NamespaceExport:\n        case ts$1.SyntaxKind.InterfaceDeclaration:\n        case ts$1.SyntaxKind.TypeAliasDeclaration:\n        case ts$1.SyntaxKind.TypeParameter:\n        case ts$1.SyntaxKind.NamedTupleMember:\n          break;\n        default:\n          return 5;\n      }\n    }\n    exports.getUsageDomain = getUsageDomain;\n    function getDeclarationDomain(node2) {\n      switch (node2.parent.kind) {\n        case ts$1.SyntaxKind.TypeParameter:\n        case ts$1.SyntaxKind.InterfaceDeclaration:\n        case ts$1.SyntaxKind.TypeAliasDeclaration:\n          return 2;\n        case ts$1.SyntaxKind.ClassDeclaration:\n        case ts$1.SyntaxKind.ClassExpression:\n          return 2 | 4;\n        case ts$1.SyntaxKind.EnumDeclaration:\n          return 7;\n        case ts$1.SyntaxKind.NamespaceImport:\n        case ts$1.SyntaxKind.ImportClause:\n          return 7 | 8;\n        case ts$1.SyntaxKind.ImportEqualsDeclaration:\n        case ts$1.SyntaxKind.ImportSpecifier:\n          return node2.parent.name === node2 ? 7 | 8 : void 0;\n        case ts$1.SyntaxKind.ModuleDeclaration:\n          return 1;\n        case ts$1.SyntaxKind.Parameter:\n          if (node2.parent.parent.kind === ts$1.SyntaxKind.IndexSignature || node2.originalKeywordKind === ts$1.SyntaxKind.ThisKeyword)\n            return;\n        case ts$1.SyntaxKind.BindingElement:\n        case ts$1.SyntaxKind.VariableDeclaration:\n          return node2.parent.name === node2 ? 4 : void 0;\n        case ts$1.SyntaxKind.FunctionDeclaration:\n        case ts$1.SyntaxKind.FunctionExpression:\n          return 4;\n      }\n    }\n    exports.getDeclarationDomain = getDeclarationDomain;\n    function collectVariableUsage(sourceFile) {\n      return new UsageWalker().getUsage(sourceFile);\n    }\n    exports.collectVariableUsage = collectVariableUsage;\n    class AbstractScope {\n      constructor(_global) {\n        this._global = _global;\n        this._variables = /* @__PURE__ */ new Map();\n        this._uses = [];\n        this._namespaceScopes = void 0;\n        this._enumScopes = void 0;\n      }\n      addVariable(identifier, name, selector, exported, domain) {\n        const variables = this.getDestinationScope(selector).getVariables();\n        const declaration = {\n          domain,\n          exported,\n          declaration: name\n        };\n        const variable = variables.get(identifier);\n        if (variable === void 0) {\n          variables.set(identifier, {\n            domain,\n            declarations: [declaration],\n            uses: []\n          });\n        } else {\n          variable.domain |= domain;\n          variable.declarations.push(declaration);\n        }\n      }\n      addUse(use) {\n        this._uses.push(use);\n      }\n      getVariables() {\n        return this._variables;\n      }\n      getFunctionScope() {\n        return this;\n      }\n      end(cb) {\n        if (this._namespaceScopes !== void 0)\n          this._namespaceScopes.forEach((value) => value.finish(cb));\n        this._namespaceScopes = this._enumScopes = void 0;\n        this._applyUses();\n        this._variables.forEach((variable) => {\n          for (const declaration of variable.declarations) {\n            const result = {\n              declarations: [],\n              domain: declaration.domain,\n              exported: declaration.exported,\n              inGlobalScope: this._global,\n              uses: []\n            };\n            for (const other of variable.declarations)\n              if (other.domain & declaration.domain)\n                result.declarations.push(other.declaration);\n            for (const use of variable.uses)\n              if (use.domain & declaration.domain)\n                result.uses.push(use);\n            cb(result, declaration.declaration, this);\n          }\n        });\n      }\n      // tslint:disable-next-line:prefer-function-over-method\n      markExported(_name) {\n      }\n      // only relevant for the root scope\n      createOrReuseNamespaceScope(name, _exported, ambient, hasExportStatement) {\n        let scope;\n        if (this._namespaceScopes === void 0) {\n          this._namespaceScopes = /* @__PURE__ */ new Map();\n        } else {\n          scope = this._namespaceScopes.get(name);\n        }\n        if (scope === void 0) {\n          scope = new NamespaceScope(ambient, hasExportStatement, this);\n          this._namespaceScopes.set(name, scope);\n        } else {\n          scope.refresh(ambient, hasExportStatement);\n        }\n        return scope;\n      }\n      createOrReuseEnumScope(name, _exported) {\n        let scope;\n        if (this._enumScopes === void 0) {\n          this._enumScopes = /* @__PURE__ */ new Map();\n        } else {\n          scope = this._enumScopes.get(name);\n        }\n        if (scope === void 0) {\n          scope = new EnumScope(this);\n          this._enumScopes.set(name, scope);\n        }\n        return scope;\n      }\n      _applyUses() {\n        for (const use of this._uses)\n          if (!this._applyUse(use))\n            this._addUseToParent(use);\n        this._uses = [];\n      }\n      _applyUse(use, variables = this._variables) {\n        const variable = variables.get(use.location.text);\n        if (variable === void 0 || (variable.domain & use.domain) === 0)\n          return false;\n        variable.uses.push(use);\n        return true;\n      }\n      _addUseToParent(_use) {\n      }\n      // tslint:disable-line:prefer-function-over-method\n    }\n    class RootScope extends AbstractScope {\n      constructor(_exportAll, global2) {\n        super(global2);\n        this._exportAll = _exportAll;\n        this._exports = void 0;\n        this._innerScope = new NonRootScope(\n          this,\n          1\n          /* Function */\n        );\n      }\n      addVariable(identifier, name, selector, exported, domain) {\n        if (domain & 8)\n          return super.addVariable(identifier, name, selector, exported, domain);\n        return this._innerScope.addVariable(identifier, name, selector, exported, domain);\n      }\n      addUse(use, origin) {\n        if (origin === this._innerScope)\n          return super.addUse(use);\n        return this._innerScope.addUse(use);\n      }\n      markExported(id) {\n        if (this._exports === void 0) {\n          this._exports = [id.text];\n        } else {\n          this._exports.push(id.text);\n        }\n      }\n      end(cb) {\n        this._innerScope.end((value, key) => {\n          value.exported = value.exported || this._exportAll || this._exports !== void 0 && this._exports.includes(key.text);\n          value.inGlobalScope = this._global;\n          return cb(value, key, this);\n        });\n        return super.end((value, key, scope) => {\n          value.exported = value.exported || scope === this && this._exports !== void 0 && this._exports.includes(key.text);\n          return cb(value, key, scope);\n        });\n      }\n      getDestinationScope() {\n        return this;\n      }\n    }\n    class NonRootScope extends AbstractScope {\n      constructor(_parent, _boundary) {\n        super(false);\n        this._parent = _parent;\n        this._boundary = _boundary;\n      }\n      _addUseToParent(use) {\n        return this._parent.addUse(use, this);\n      }\n      getDestinationScope(selector) {\n        return this._boundary & selector ? this : this._parent.getDestinationScope(selector);\n      }\n    }\n    class EnumScope extends NonRootScope {\n      constructor(parent) {\n        super(\n          parent,\n          1\n          /* Function */\n        );\n      }\n      end() {\n        this._applyUses();\n      }\n    }\n    class ConditionalTypeScope extends NonRootScope {\n      constructor(parent) {\n        super(\n          parent,\n          8\n          /* ConditionalType */\n        );\n        this._state = 0;\n      }\n      updateState(newState) {\n        this._state = newState;\n      }\n      addUse(use) {\n        if (this._state === 2)\n          return void this._uses.push(use);\n        return this._parent.addUse(use, this);\n      }\n    }\n    class FunctionScope extends NonRootScope {\n      constructor(parent) {\n        super(\n          parent,\n          1\n          /* Function */\n        );\n      }\n      beginBody() {\n        this._applyUses();\n      }\n    }\n    class AbstractNamedExpressionScope extends NonRootScope {\n      constructor(_name, _domain, parent) {\n        super(\n          parent,\n          1\n          /* Function */\n        );\n        this._name = _name;\n        this._domain = _domain;\n      }\n      end(cb) {\n        this._innerScope.end(cb);\n        return cb({\n          declarations: [this._name],\n          domain: this._domain,\n          exported: false,\n          uses: this._uses,\n          inGlobalScope: false\n        }, this._name, this);\n      }\n      addUse(use, source) {\n        if (source !== this._innerScope)\n          return this._innerScope.addUse(use);\n        if (use.domain & this._domain && use.location.text === this._name.text) {\n          this._uses.push(use);\n        } else {\n          return this._parent.addUse(use, this);\n        }\n      }\n      getFunctionScope() {\n        return this._innerScope;\n      }\n      getDestinationScope() {\n        return this._innerScope;\n      }\n    }\n    class FunctionExpressionScope extends AbstractNamedExpressionScope {\n      constructor(name, parent) {\n        super(name, 4, parent);\n        this._innerScope = new FunctionScope(this);\n      }\n      beginBody() {\n        return this._innerScope.beginBody();\n      }\n    }\n    class ClassExpressionScope extends AbstractNamedExpressionScope {\n      constructor(name, parent) {\n        super(name, 4 | 2, parent);\n        this._innerScope = new NonRootScope(\n          this,\n          1\n          /* Function */\n        );\n      }\n    }\n    class BlockScope extends NonRootScope {\n      constructor(_functionScope, parent) {\n        super(\n          parent,\n          2\n          /* Block */\n        );\n        this._functionScope = _functionScope;\n      }\n      getFunctionScope() {\n        return this._functionScope;\n      }\n    }\n    function mapDeclaration(declaration) {\n      return {\n        declaration,\n        exported: true,\n        domain: getDeclarationDomain(declaration)\n      };\n    }\n    class NamespaceScope extends NonRootScope {\n      constructor(_ambient, _hasExport, parent) {\n        super(\n          parent,\n          1\n          /* Function */\n        );\n        this._ambient = _ambient;\n        this._hasExport = _hasExport;\n        this._innerScope = new NonRootScope(\n          this,\n          1\n          /* Function */\n        );\n        this._exports = void 0;\n      }\n      finish(cb) {\n        return super.end(cb);\n      }\n      end(cb) {\n        this._innerScope.end((variable, key, scope) => {\n          if (scope !== this._innerScope || !variable.exported && (!this._ambient || this._exports !== void 0 && !this._exports.has(key.text)))\n            return cb(variable, key, scope);\n          const namespaceVar = this._variables.get(key.text);\n          if (namespaceVar === void 0) {\n            this._variables.set(key.text, {\n              declarations: variable.declarations.map(mapDeclaration),\n              domain: variable.domain,\n              uses: [...variable.uses]\n            });\n          } else {\n            outer:\n              for (const declaration of variable.declarations) {\n                for (const existing of namespaceVar.declarations)\n                  if (existing.declaration === declaration)\n                    continue outer;\n                namespaceVar.declarations.push(mapDeclaration(declaration));\n              }\n            namespaceVar.domain |= variable.domain;\n            for (const use of variable.uses) {\n              if (namespaceVar.uses.includes(use))\n                continue;\n              namespaceVar.uses.push(use);\n            }\n          }\n        });\n        this._applyUses();\n        this._innerScope = new NonRootScope(\n          this,\n          1\n          /* Function */\n        );\n      }\n      createOrReuseNamespaceScope(name, exported, ambient, hasExportStatement) {\n        if (!exported && (!this._ambient || this._hasExport))\n          return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);\n        return super.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);\n      }\n      createOrReuseEnumScope(name, exported) {\n        if (!exported && (!this._ambient || this._hasExport))\n          return this._innerScope.createOrReuseEnumScope(name, exported);\n        return super.createOrReuseEnumScope(name, exported);\n      }\n      addUse(use, source) {\n        if (source !== this._innerScope)\n          return this._innerScope.addUse(use);\n        this._uses.push(use);\n      }\n      refresh(ambient, hasExport) {\n        this._ambient = ambient;\n        this._hasExport = hasExport;\n      }\n      markExported(name, _as) {\n        if (this._exports === void 0)\n          this._exports = /* @__PURE__ */ new Set();\n        this._exports.add(name.text);\n      }\n      getDestinationScope() {\n        return this._innerScope;\n      }\n    }\n    function getEntityNameParent(name) {\n      let parent = name.parent;\n      while (parent.kind === ts$1.SyntaxKind.QualifiedName)\n        parent = parent.parent;\n      return parent;\n    }\n    class UsageWalker {\n      constructor() {\n        this._result = /* @__PURE__ */ new Map();\n      }\n      getUsage(sourceFile) {\n        const variableCallback = (variable, key) => {\n          this._result.set(key, variable);\n        };\n        const isModule = ts$1.isExternalModule(sourceFile);\n        this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);\n        const cb = (node2) => {\n          if (util_1.isBlockScopeBoundary(node2))\n            return continueWithScope(node2, new BlockScope(this._scope.getFunctionScope(), this._scope), handleBlockScope);\n          switch (node2.kind) {\n            case ts$1.SyntaxKind.ClassExpression:\n              return continueWithScope(node2, node2.name !== void 0 ? new ClassExpressionScope(node2.name, this._scope) : new NonRootScope(\n                this._scope,\n                1\n                /* Function */\n              ));\n            case ts$1.SyntaxKind.ClassDeclaration:\n              this._handleDeclaration(\n                node2,\n                true,\n                4 | 2\n                /* Type */\n              );\n              return continueWithScope(node2, new NonRootScope(\n                this._scope,\n                1\n                /* Function */\n              ));\n            case ts$1.SyntaxKind.InterfaceDeclaration:\n            case ts$1.SyntaxKind.TypeAliasDeclaration:\n              this._handleDeclaration(\n                node2,\n                true,\n                2\n                /* Type */\n              );\n              return continueWithScope(node2, new NonRootScope(\n                this._scope,\n                4\n                /* Type */\n              ));\n            case ts$1.SyntaxKind.EnumDeclaration:\n              this._handleDeclaration(\n                node2,\n                true,\n                7\n                /* Any */\n              );\n              return continueWithScope(node2, this._scope.createOrReuseEnumScope(node2.name.text, util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.ExportKeyword)));\n            case ts$1.SyntaxKind.ModuleDeclaration:\n              return this._handleModule(node2, continueWithScope);\n            case ts$1.SyntaxKind.MappedType:\n              return continueWithScope(node2, new NonRootScope(\n                this._scope,\n                4\n                /* Type */\n              ));\n            case ts$1.SyntaxKind.FunctionExpression:\n            case ts$1.SyntaxKind.ArrowFunction:\n            case ts$1.SyntaxKind.Constructor:\n            case ts$1.SyntaxKind.MethodDeclaration:\n            case ts$1.SyntaxKind.FunctionDeclaration:\n            case ts$1.SyntaxKind.GetAccessor:\n            case ts$1.SyntaxKind.SetAccessor:\n            case ts$1.SyntaxKind.MethodSignature:\n            case ts$1.SyntaxKind.CallSignature:\n            case ts$1.SyntaxKind.ConstructSignature:\n            case ts$1.SyntaxKind.ConstructorType:\n            case ts$1.SyntaxKind.FunctionType:\n              return this._handleFunctionLikeDeclaration(node2, cb, variableCallback);\n            case ts$1.SyntaxKind.ConditionalType:\n              return this._handleConditionalType(node2, cb, variableCallback);\n            case ts$1.SyntaxKind.VariableDeclarationList:\n              this._handleVariableDeclaration(node2);\n              break;\n            case ts$1.SyntaxKind.Parameter:\n              if (node2.parent.kind !== ts$1.SyntaxKind.IndexSignature && (node2.name.kind !== ts$1.SyntaxKind.Identifier || node2.name.originalKeywordKind !== ts$1.SyntaxKind.ThisKeyword))\n                this._handleBindingName(node2.name, false, false);\n              break;\n            case ts$1.SyntaxKind.EnumMember:\n              this._scope.addVariable(\n                util_1.getPropertyName(node2.name),\n                node2.name,\n                1,\n                true,\n                4\n                /* Value */\n              );\n              break;\n            case ts$1.SyntaxKind.ImportClause:\n            case ts$1.SyntaxKind.ImportSpecifier:\n            case ts$1.SyntaxKind.NamespaceImport:\n            case ts$1.SyntaxKind.ImportEqualsDeclaration:\n              this._handleDeclaration(\n                node2,\n                false,\n                7 | 8\n                /* Import */\n              );\n              break;\n            case ts$1.SyntaxKind.TypeParameter:\n              this._scope.addVariable(\n                node2.name.text,\n                node2.name,\n                node2.parent.kind === ts$1.SyntaxKind.InferType ? 8 : 7,\n                false,\n                2\n                /* Type */\n              );\n              break;\n            case ts$1.SyntaxKind.ExportSpecifier:\n              if (node2.propertyName !== void 0)\n                return this._scope.markExported(node2.propertyName, node2.name);\n              return this._scope.markExported(node2.name);\n            case ts$1.SyntaxKind.ExportAssignment:\n              if (node2.expression.kind === ts$1.SyntaxKind.Identifier)\n                return this._scope.markExported(node2.expression);\n              break;\n            case ts$1.SyntaxKind.Identifier:\n              const domain = getUsageDomain(node2);\n              if (domain !== void 0)\n                this._scope.addUse({ domain, location: node2 });\n              return;\n          }\n          return ts$1.forEachChild(node2, cb);\n        };\n        const continueWithScope = (node2, scope, next = forEachChild) => {\n          const savedScope = this._scope;\n          this._scope = scope;\n          next(node2);\n          this._scope.end(variableCallback);\n          this._scope = savedScope;\n        };\n        const handleBlockScope = (node2) => {\n          if (node2.kind === ts$1.SyntaxKind.CatchClause && node2.variableDeclaration !== void 0)\n            this._handleBindingName(node2.variableDeclaration.name, true, false);\n          return ts$1.forEachChild(node2, cb);\n        };\n        ts$1.forEachChild(sourceFile, cb);\n        this._scope.end(variableCallback);\n        return this._result;\n        function forEachChild(node2) {\n          return ts$1.forEachChild(node2, cb);\n        }\n      }\n      _handleConditionalType(node2, cb, varCb) {\n        const savedScope = this._scope;\n        const scope = this._scope = new ConditionalTypeScope(savedScope);\n        cb(node2.checkType);\n        scope.updateState(\n          1\n          /* Extends */\n        );\n        cb(node2.extendsType);\n        scope.updateState(\n          2\n          /* TrueType */\n        );\n        cb(node2.trueType);\n        scope.updateState(\n          3\n          /* FalseType */\n        );\n        cb(node2.falseType);\n        scope.end(varCb);\n        this._scope = savedScope;\n      }\n      _handleFunctionLikeDeclaration(node2, cb, varCb) {\n        if (node2.decorators !== void 0)\n          node2.decorators.forEach(cb);\n        const savedScope = this._scope;\n        if (node2.kind === ts$1.SyntaxKind.FunctionDeclaration)\n          this._handleDeclaration(\n            node2,\n            false,\n            4\n            /* Value */\n          );\n        const scope = this._scope = node2.kind === ts$1.SyntaxKind.FunctionExpression && node2.name !== void 0 ? new FunctionExpressionScope(node2.name, savedScope) : new FunctionScope(savedScope);\n        if (node2.name !== void 0)\n          cb(node2.name);\n        if (node2.typeParameters !== void 0)\n          node2.typeParameters.forEach(cb);\n        node2.parameters.forEach(cb);\n        if (node2.type !== void 0)\n          cb(node2.type);\n        if (node2.body !== void 0) {\n          scope.beginBody();\n          cb(node2.body);\n        }\n        scope.end(varCb);\n        this._scope = savedScope;\n      }\n      _handleModule(node2, next) {\n        if (node2.flags & ts$1.NodeFlags.GlobalAugmentation)\n          return next(node2, this._scope.createOrReuseNamespaceScope(\"-global\", false, true, false));\n        if (node2.name.kind === ts$1.SyntaxKind.Identifier) {\n          const exported = isNamespaceExported(node2);\n          this._scope.addVariable(\n            node2.name.text,\n            node2.name,\n            1,\n            exported,\n            1 | 4\n            /* Value */\n          );\n          const ambient = util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.DeclareKeyword);\n          return next(node2, this._scope.createOrReuseNamespaceScope(node2.name.text, exported, ambient, ambient && namespaceHasExportStatement(node2)));\n        }\n        return next(node2, this._scope.createOrReuseNamespaceScope(`\"${node2.name.text}\"`, false, true, namespaceHasExportStatement(node2)));\n      }\n      _handleDeclaration(node2, blockScoped, domain) {\n        if (node2.name !== void 0)\n          this._scope.addVariable(node2.name.text, node2.name, blockScoped ? 3 : 1, util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.ExportKeyword), domain);\n      }\n      _handleBindingName(name, blockScoped, exported) {\n        if (name.kind === ts$1.SyntaxKind.Identifier)\n          return this._scope.addVariable(\n            name.text,\n            name,\n            blockScoped ? 3 : 1,\n            exported,\n            4\n            /* Value */\n          );\n        util_1.forEachDestructuringIdentifier(name, (declaration) => {\n          this._scope.addVariable(\n            declaration.name.text,\n            declaration.name,\n            blockScoped ? 3 : 1,\n            exported,\n            4\n            /* Value */\n          );\n        });\n      }\n      _handleVariableDeclaration(declarationList) {\n        const blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);\n        const exported = declarationList.parent.kind === ts$1.SyntaxKind.VariableStatement && util_1.hasModifier(declarationList.parent.modifiers, ts$1.SyntaxKind.ExportKeyword);\n        for (const declaration of declarationList.declarations)\n          this._handleBindingName(declaration.name, blockScoped, exported);\n      }\n    }\n    function isNamespaceExported(node2) {\n      return node2.parent.kind === ts$1.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.ExportKeyword);\n    }\n    function namespaceHasExportStatement(ns) {\n      if (ns.body === void 0 || ns.body.kind !== ts$1.SyntaxKind.ModuleBlock)\n        return false;\n      return containsExportStatement(ns.body);\n    }\n    function containsExportStatement(block) {\n      for (const statement of block.statements)\n        if (statement.kind === ts$1.SyntaxKind.ExportDeclaration || statement.kind === ts$1.SyntaxKind.ExportAssignment)\n          return true;\n      return false;\n    }\n  })(usage);\n  return usage;\n}\nvar controlFlow = {};\nvar hasRequiredControlFlow;\nfunction requireControlFlow() {\n  if (hasRequiredControlFlow)\n    return controlFlow;\n  hasRequiredControlFlow = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.callExpressionAffectsControlFlow = exports.SignatureEffect = exports.getControlFlowEnd = exports.endsControlFlow = void 0;\n    const ts$1 = ts;\n    const node_1 = requireNode();\n    const util_1 = requireUtil$1();\n    function endsControlFlow(statement, checker) {\n      return getControlFlowEnd(statement, checker).end;\n    }\n    exports.endsControlFlow = endsControlFlow;\n    const defaultControlFlowEnd = { statements: [], end: false };\n    function getControlFlowEnd(statement, checker) {\n      return node_1.isBlockLike(statement) ? handleBlock(statement, checker) : getControlFlowEndWorker(statement, checker);\n    }\n    exports.getControlFlowEnd = getControlFlowEnd;\n    function getControlFlowEndWorker(statement, checker) {\n      switch (statement.kind) {\n        case ts$1.SyntaxKind.ReturnStatement:\n        case ts$1.SyntaxKind.ThrowStatement:\n        case ts$1.SyntaxKind.ContinueStatement:\n        case ts$1.SyntaxKind.BreakStatement:\n          return { statements: [statement], end: true };\n        case ts$1.SyntaxKind.Block:\n          return handleBlock(statement, checker);\n        case ts$1.SyntaxKind.ForStatement:\n        case ts$1.SyntaxKind.WhileStatement:\n          return handleForAndWhileStatement(statement, checker);\n        case ts$1.SyntaxKind.ForOfStatement:\n        case ts$1.SyntaxKind.ForInStatement:\n          return handleForInOrOfStatement(statement, checker);\n        case ts$1.SyntaxKind.DoStatement:\n          return matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);\n        case ts$1.SyntaxKind.IfStatement:\n          return handleIfStatement(statement, checker);\n        case ts$1.SyntaxKind.SwitchStatement:\n          return matchBreakOrContinue(handleSwitchStatement(statement, checker), node_1.isBreakStatement);\n        case ts$1.SyntaxKind.TryStatement:\n          return handleTryStatement(statement, checker);\n        case ts$1.SyntaxKind.LabeledStatement:\n          return matchLabel(getControlFlowEndWorker(statement.statement, checker), statement.label);\n        case ts$1.SyntaxKind.WithStatement:\n          return getControlFlowEndWorker(statement.statement, checker);\n        case ts$1.SyntaxKind.ExpressionStatement:\n          if (checker === void 0)\n            return defaultControlFlowEnd;\n          return handleExpressionStatement(statement, checker);\n        default:\n          return defaultControlFlowEnd;\n      }\n    }\n    function handleBlock(statement, checker) {\n      const result = { statements: [], end: false };\n      for (const s of statement.statements) {\n        const current = getControlFlowEndWorker(s, checker);\n        result.statements.push(...current.statements);\n        if (current.end) {\n          result.end = true;\n          break;\n        }\n      }\n      return result;\n    }\n    function handleForInOrOfStatement(statement, checker) {\n      const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);\n      end.end = false;\n      return end;\n    }\n    function handleForAndWhileStatement(statement, checker) {\n      const constantCondition = statement.kind === ts$1.SyntaxKind.WhileStatement ? getConstantCondition(statement.expression) : statement.condition === void 0 || getConstantCondition(statement.condition);\n      if (constantCondition === false)\n        return defaultControlFlowEnd;\n      const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);\n      if (constantCondition === void 0)\n        end.end = false;\n      return end;\n    }\n    function getConstantCondition(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.TrueKeyword:\n          return true;\n        case ts$1.SyntaxKind.FalseKeyword:\n          return false;\n        default:\n          return;\n      }\n    }\n    function handleIfStatement(node2, checker) {\n      switch (getConstantCondition(node2.expression)) {\n        case true:\n          return getControlFlowEndWorker(node2.thenStatement, checker);\n        case false:\n          return node2.elseStatement === void 0 ? defaultControlFlowEnd : getControlFlowEndWorker(node2.elseStatement, checker);\n      }\n      const then = getControlFlowEndWorker(node2.thenStatement, checker);\n      if (node2.elseStatement === void 0)\n        return {\n          statements: then.statements,\n          end: false\n        };\n      const elze = getControlFlowEndWorker(node2.elseStatement, checker);\n      return {\n        statements: [...then.statements, ...elze.statements],\n        end: then.end && elze.end\n      };\n    }\n    function handleSwitchStatement(node2, checker) {\n      let hasDefault = false;\n      const result = {\n        statements: [],\n        end: false\n      };\n      for (const clause of node2.caseBlock.clauses) {\n        if (clause.kind === ts$1.SyntaxKind.DefaultClause)\n          hasDefault = true;\n        const current = handleBlock(clause, checker);\n        result.end = current.end;\n        result.statements.push(...current.statements);\n      }\n      result.end && (result.end = hasDefault || checker !== void 0 && util_1.hasExhaustiveCaseClauses(node2, checker));\n      return result;\n    }\n    function handleTryStatement(node2, checker) {\n      let finallyResult;\n      if (node2.finallyBlock !== void 0) {\n        finallyResult = handleBlock(node2.finallyBlock, checker);\n        if (finallyResult.end)\n          return finallyResult;\n      }\n      const tryResult = handleBlock(node2.tryBlock, checker);\n      if (node2.catchClause === void 0)\n        return { statements: finallyResult.statements.concat(tryResult.statements), end: tryResult.end };\n      const catchResult = handleBlock(node2.catchClause.block, checker);\n      return {\n        statements: tryResult.statements.filter((s) => s.kind !== ts$1.SyntaxKind.ThrowStatement && s.kind !== ts$1.SyntaxKind.ExpressionStatement).concat(catchResult.statements, finallyResult === void 0 ? [] : finallyResult.statements),\n        end: tryResult.end && catchResult.end\n        // only ends control flow if try AND catch definitely end control flow\n      };\n    }\n    function isDottedNameWithExplicitTypeAnnotation(node2, checker) {\n      while (true) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.Identifier: {\n            const symbol = checker.getExportSymbolOfSymbol(checker.getSymbolAtLocation(node2));\n            return isExplicitlyTypedSymbol(util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Alias) ? checker.getAliasedSymbol(symbol) : symbol, checker);\n          }\n          case ts$1.SyntaxKind.ThisKeyword:\n            return isExplicitlyTypedThis(node2);\n          case ts$1.SyntaxKind.SuperKeyword:\n            return true;\n          case ts$1.SyntaxKind.PropertyAccessExpression:\n            if (!isExplicitlyTypedSymbol(checker.getSymbolAtLocation(node2), checker))\n              return false;\n          case ts$1.SyntaxKind.ParenthesizedExpression:\n            node2 = node2.expression;\n            continue;\n          default:\n            return false;\n        }\n      }\n    }\n    function isExplicitlyTypedSymbol(symbol, checker) {\n      if (symbol === void 0)\n        return false;\n      if (util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Function | ts$1.SymbolFlags.Method | ts$1.SymbolFlags.Class | ts$1.SymbolFlags.ValueModule))\n        return true;\n      if (!util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Variable | ts$1.SymbolFlags.Property))\n        return false;\n      if (symbol.valueDeclaration === void 0)\n        return false;\n      if (declarationHasExplicitTypeAnnotation(symbol.valueDeclaration))\n        return true;\n      return node_1.isVariableDeclaration(symbol.valueDeclaration) && symbol.valueDeclaration.parent.parent.kind === ts$1.SyntaxKind.ForOfStatement && isDottedNameWithExplicitTypeAnnotation(symbol.valueDeclaration.parent.parent.expression, checker);\n    }\n    function declarationHasExplicitTypeAnnotation(node2) {\n      if (ts$1.isJSDocPropertyLikeTag(node2))\n        return node2.typeExpression !== void 0;\n      return (node_1.isVariableDeclaration(node2) || node_1.isParameterDeclaration(node2) || node_1.isPropertyDeclaration(node2) || node_1.isPropertySignature(node2)) && (util_1.isNodeFlagSet(node2, ts$1.NodeFlags.JavaScriptFile) ? ts$1.getJSDocType(node2) : node2.type) !== void 0;\n    }\n    function isExplicitlyTypedThis(node2) {\n      var _a;\n      do {\n        node2 = node2.parent;\n        if (node_1.isDecorator(node2)) {\n          if (node2.parent.kind === ts$1.SyntaxKind.Parameter && node_1.isClassLikeDeclaration(node2.parent.parent.parent)) {\n            node2 = node2.parent.parent.parent.parent;\n          } else if (node_1.isClassLikeDeclaration(node2.parent.parent)) {\n            node2 = node2.parent.parent.parent;\n          } else if (node_1.isClassLikeDeclaration(node2.parent)) {\n            node2 = node2.parent.parent;\n          }\n        }\n      } while (util_1.isFunctionScopeBoundary(node2) !== 1 || node2.kind === ts$1.SyntaxKind.ArrowFunction);\n      return util_1.isFunctionWithBody(node2) && (util_1.isNodeFlagSet(node2, ts$1.NodeFlags.JavaScriptFile) ? ((_a = ts$1.getJSDocThisTag(node2)) === null || _a === void 0 ? void 0 : _a.typeExpression) !== void 0 : node2.parameters.length !== 0 && util_1.isThisParameter(node2.parameters[0]) && node2.parameters[0].type !== void 0) || node_1.isClassLikeDeclaration(node2.parent);\n    }\n    (function(SignatureEffect) {\n      SignatureEffect[SignatureEffect[\"Never\"] = 1] = \"Never\";\n      SignatureEffect[SignatureEffect[\"Asserts\"] = 2] = \"Asserts\";\n    })(exports.SignatureEffect || (exports.SignatureEffect = {}));\n    function callExpressionAffectsControlFlow(node2, checker) {\n      var _a, _b, _c;\n      if (!node_1.isExpressionStatement(node2.parent) || ts$1.isOptionalChain(node2) || !isDottedNameWithExplicitTypeAnnotation(node2.expression, checker))\n        return;\n      const signature = checker.getResolvedSignature(node2);\n      if ((signature === null || signature === void 0 ? void 0 : signature.declaration) === void 0)\n        return;\n      const typeNode = ts$1.isJSDocSignature(signature.declaration) ? (_b = (_a = signature.declaration.type) === null || _a === void 0 ? void 0 : _a.typeExpression) === null || _b === void 0 ? void 0 : _b.type : (_c = signature.declaration.type) !== null && _c !== void 0 ? _c : util_1.isNodeFlagSet(signature.declaration, ts$1.NodeFlags.JavaScriptFile) ? ts$1.getJSDocReturnType(signature.declaration) : void 0;\n      if (typeNode === void 0)\n        return;\n      if (node_1.isTypePredicateNode(typeNode) && typeNode.assertsModifier !== void 0)\n        return 2;\n      return util_1.isTypeFlagSet(checker.getTypeFromTypeNode(typeNode), ts$1.TypeFlags.Never) ? 1 : void 0;\n    }\n    exports.callExpressionAffectsControlFlow = callExpressionAffectsControlFlow;\n    function handleExpressionStatement(node2, checker) {\n      if (!node_1.isCallExpression(node2.expression))\n        return defaultControlFlowEnd;\n      switch (callExpressionAffectsControlFlow(node2.expression, checker)) {\n        case 2:\n          return { statements: [node2], end: false };\n        case 1:\n          return { statements: [node2], end: true };\n        case void 0:\n          return defaultControlFlowEnd;\n      }\n    }\n    function matchBreakOrContinue(current, pred) {\n      const result = {\n        statements: [],\n        end: current.end\n      };\n      for (const statement of current.statements) {\n        if (pred(statement) && statement.label === void 0) {\n          result.end = false;\n          continue;\n        }\n        result.statements.push(statement);\n      }\n      return result;\n    }\n    function matchLabel(current, label) {\n      const result = {\n        statements: [],\n        end: current.end\n      };\n      const labelText = label.text;\n      for (const statement of current.statements) {\n        switch (statement.kind) {\n          case ts$1.SyntaxKind.BreakStatement:\n          case ts$1.SyntaxKind.ContinueStatement:\n            if (statement.label !== void 0 && statement.label.text === labelText) {\n              result.end = false;\n              continue;\n            }\n        }\n        result.statements.push(statement);\n      }\n      return result;\n    }\n  })(controlFlow);\n  return controlFlow;\n}\nvar convertAst = {};\nvar hasRequiredConvertAst;\nfunction requireConvertAst() {\n  if (hasRequiredConvertAst)\n    return convertAst;\n  hasRequiredConvertAst = 1;\n  Object.defineProperty(convertAst, \"__esModule\", { value: true });\n  convertAst.convertAst = void 0;\n  const ts$1 = ts;\n  const util_1 = requireUtil$1();\n  function convertAst$1(sourceFile) {\n    const wrapped = {\n      node: sourceFile,\n      parent: void 0,\n      kind: ts$1.SyntaxKind.SourceFile,\n      children: [],\n      next: void 0,\n      skip: void 0\n    };\n    const flat = [];\n    let current = wrapped;\n    function collectChildren(node2) {\n      current.children.push({\n        node: node2,\n        parent: current,\n        kind: node2.kind,\n        children: [],\n        next: void 0,\n        skip: void 0\n      });\n    }\n    const stack = [];\n    while (true) {\n      if (current.children.length === 0) {\n        ts$1.forEachChild(current.node, collectChildren);\n        if (current.children.length === 0) {\n          current = current.parent;\n        } else {\n          const firstChild = current.children[0];\n          current.next = firstChild;\n          flat.push(firstChild.node);\n          if (util_1.isNodeKind(firstChild.kind))\n            current = firstChild;\n          stack.push(1);\n        }\n      } else {\n        const index = stack[stack.length - 1];\n        if (index < current.children.length) {\n          const currentChild = current.children[index];\n          flat.push(currentChild.node);\n          let previous = current.children[index - 1];\n          while (previous.children.length !== 0) {\n            previous.skip = currentChild;\n            previous = previous.children[previous.children.length - 1];\n          }\n          previous.skip = previous.next = currentChild;\n          ++stack[stack.length - 1];\n          if (util_1.isNodeKind(currentChild.kind))\n            current = currentChild;\n        } else {\n          if (stack.length === 1)\n            break;\n          stack.pop();\n          current = current.parent;\n        }\n      }\n    }\n    return {\n      wrapped,\n      flat\n    };\n  }\n  convertAst.convertAst = convertAst$1;\n  return convertAst;\n}\nvar hasRequiredUtil;\nfunction requireUtil() {\n  if (hasRequiredUtil)\n    return util$2;\n  hasRequiredUtil = 1;\n  (function(exports) {\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireUtil$1(), exports);\n    tslib_1.__exportStar(requireUsage(), exports);\n    tslib_1.__exportStar(requireControlFlow(), exports);\n    tslib_1.__exportStar(requireType(), exports);\n    tslib_1.__exportStar(requireConvertAst(), exports);\n  })(util$2);\n  return util$2;\n}\n(function(exports) {\n  Object.defineProperty(exports, \"__esModule\", { value: true });\n  const tslib_1 = require$$0;\n  tslib_1.__exportStar(requireTypeguard(), exports);\n  tslib_1.__exportStar(requireUtil(), exports);\n})(tsutils);\nconst glslHeader = \"uint shadeup_up_swizzle_x_uint(uint n) {\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nuvec2 shadeup_up_swizzle_xx_uint(uint n) {\\r\\n\treturn uvec2(n, n);\\r\\n}\\r\\n\\r\\nuvec3 shadeup_up_swizzle_xxx_uint(uint n) {\\r\\n\treturn uvec3(n, n, n);\\r\\n}\\r\\n\\r\\nuvec4 shadeup_up_swizzle_xxxx_uint(uint n) {\\r\\n\treturn uvec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nivec2 shadeup_up_swizzle_xy_uint(uint n) {\\r\\n\treturn uvec2(n, n);\\r\\n}\\r\\n\\r\\nuvec3 shadeup_up_swizzle_xyz_uint(uint n) {\\r\\n\treturn uvec3(n, n, n);\\r\\n}\\r\\n\\r\\nuvec4 shadeup_up_swizzle_xyzw_uint(uint n) {\\r\\n\treturn uvec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nint shadeup_up_swizzle_x_int(int n) {\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nivec2 shadeup_up_swizzle_xx_int(int n) {\\r\\n\treturn ivec2(n, n);\\r\\n}\\r\\n\\r\\nivec3 shadeup_up_swizzle_xxx_int(int n) {\\r\\n\treturn ivec3(n, n, n);\\r\\n}\\r\\n\\r\\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\\r\\n\treturn ivec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nivec2 shadeup_up_swizzle_xy_int(int n) {\\r\\n\treturn ivec2(n, n);\\r\\n}\\r\\n\\r\\nivec3 shadeup_up_swizzle_xyz_int(int n) {\\r\\n\treturn ivec3(n, n, n);\\r\\n}\\r\\n\\r\\nivec4 shadeup_up_swizzle_xyzw_int(int n) {\\r\\n\treturn ivec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\\r\\n\treturn ivec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nfloat shadeup_up_swizzle_x_float(float n) {\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nvec2 shadeup_up_swizzle_xx_float(float n) {\\r\\n\treturn vec2(n, n);\\r\\n}\\r\\n\\r\\nvec3 shadeup_up_swizzle_xxx_float(float n) {\\r\\n\treturn vec3(n, n, n);\\r\\n}\\r\\n\\r\\nvec4 shadeup_up_swizzle_xxxx_float(float n) {\\r\\n\treturn vec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nvec2 shadeup_up_swizzle_xy_float(float n) {\\r\\n\treturn vec2(n, n);\\r\\n}\\r\\n\\r\\nvec3 shadeup_up_swizzle_xyz_float(float n) {\\r\\n\treturn vec3(n, n, n);\\r\\n}\\r\\n\\r\\nvec4 shadeup_up_swizzle_xyzw_float(float n) {\\r\\n\treturn vec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nmat4 matrix_inversefloat4x4(mat4 m) {\\r\\n\treturn inverse(m);\\r\\n}\\r\\n\\r\\nmat3 matrix_inversefloat3x3(mat3 m) {\\r\\n\treturn inverse(m);\\r\\n}\\r\\n\\r\\nmat2 matrix_inversefloat2x2(mat2 m) {\\r\\n\treturn inverse(m);\\r\\n}\\r\\n\\r\\nfloat bilerp_float(float a, float b, float c, float d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nvec2 bilerp_float2(vec2 a, vec2 b, vec2 c, vec2 d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nvec3 bilerp_float3(vec3 a, vec3 b, vec3 c, vec3 d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nvec4 bilerp_float4(vec4 a, vec4 b, vec4 c, vec4 d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nmat2 bilerp_float2x2(mat2 a, mat2 b, mat2 c, mat2 d, float u, float v) {\\r\\n\treturn mat2(bilerp_float2(a[0], b[0], c[0], d[0], u, v), bilerp_float2(a[1], b[1], c[1], d[1], u, v));\\r\\n}\\r\\n\\r\\nmat3 bilerp_float3x3(mat3 a, mat3 b, mat3 c, mat3 d, float u, float v) {\\r\\n\treturn mat3(bilerp_float3(a[0], b[0], c[0], d[0], u, v), bilerp_float3(a[1], b[1], c[1], d[1], u, v), bilerp_float3(a[2], b[2], c[2], d[2], u, v));\\r\\n}\\r\\n\\r\\nmat4 bilerp_float4x4(mat4 a, mat4 b, mat4 c, mat4 d, float u, float v) {\\r\\n\treturn mat4(bilerp_float4(a[0], b[0], c[0], d[0], u, v), bilerp_float4(a[1], b[1], c[1], d[1], u, v), bilerp_float4(a[2], b[2], c[2], d[2], u, v), bilerp_float4(a[3], b[3], c[3], d[3], u, v));\\r\\n}\";\nlet { factory: factory$1, isIdentifier: isIdentifier$1 } = ts;\nconst TYPE_BLACKLIST$1 = [\n  \"never\",\n  \"object\",\n  \"symbol\",\n  \"bigint\",\n  \"undefined\",\n  \"null\",\n  \"map\",\n  \"string\"\n];\nconst RESERVED_WORDS$1 = [\"attribute\", \"sample\", \"varying\", \"uniform\", \"layout\"];\nclass GLSLCompilationError extends Error {\n  constructor(message, node2) {\n    super(message);\n    this.message = message;\n    this.node = node2;\n    this.context = node2;\n  }\n}\nfunction generateDefaultForType$2(checker, _type_node) {\n  let _type = checker.getTypeFromTypeNode(_type_node);\n  let name = (_type.aliasSymbol || _type.getSymbol())?.escapedName.toString();\n  switch (name) {\n    case \"int\":\n      return \"int(0)\";\n    case \"uint\":\n      return \"uint(0)\";\n    case \"uint8\":\n      return \"uint(0)\";\n    case \"float\":\n      return \"float(0.0)\";\n    case \"float2\":\n      return \"vec2(0.0, 0.0)\";\n    case \"float3\":\n      return \"vec3(0.0, 0.0, 0.0)\";\n    case \"float4\":\n      return \"vec4(0.0, 0.0, 0.0, 0.0)\";\n    case \"int2\":\n      return \"ivec2(0, 0)\";\n    case \"int3\":\n      return \"ivec3(0, 0, 0)\";\n    case \"int4\":\n      return \"ivec4(0, 0, 0, 0)\";\n    case \"uint2\":\n      return \"uvec2(0u, 0u)\";\n    case \"uint3\":\n      return \"uvec3(0u, 0u, 0u)\";\n    case \"uint4\":\n      return \"uvec4(0u, 0u, 0u, 0u)\";\n    case \"float2x2\":\n      return \"mat2(0.0, 0.0, 0.0, 0.0)\";\n    case \"float3x3\":\n      return \"mat3(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"float4x4\":\n      return \"mat4(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"bool\":\n      return \"false\";\n    default:\n      let decl = _type.getSymbol()?.getDeclarations();\n      if (ts.isTupleTypeNode(_type_node)) {\n        let len = _type_node.elements.length;\n        let args = [];\n        let rootNode = _type_node.elements[0];\n        if (rootNode) {\n          for (let i = 0; i < len; i++) {\n            args.push(generateDefaultForType$2(checker, _type_node.elements[i]));\n          }\n          let rootType = checker.getTypeFromTypeNode(rootNode);\n          return translateType$1(checker, rootType) + `[${len}] {` + args.join(\", \") + \"}\";\n        } else {\n          return \"0\";\n        }\n      }\n      if (decl && decl.length > 0) {\n        let d = decl[0];\n        let structProps = [];\n        if (ts.isClassDeclaration(d)) {\n          let symd = _type.getSymbol();\n          symd?.members?.forEach((v, k) => {\n            let decl2 = v.valueDeclaration;\n            if (decl2 && ts.isPropertyDeclaration(decl2)) {\n              structProps.push([k?.toString() ?? \"\", decl2.type]);\n            }\n          });\n          let sortedPropsByKey = structProps.sort((a, b) => {\n            return a[0].localeCompare(b[0]);\n          });\n          let args = sortedPropsByKey.map((p) => {\n            return \"/* \" + p[0] + \": */ \" + generateDefaultForType$2(checker, p[1]) + \"\\n\";\n          });\n          return \"_make_struct_\" + resolveStructName$1(d) + \"(\\n\" + args.join(\", \") + \"\\n)\";\n        } else {\n          return \"0\";\n        }\n      } else {\n        return \"0\";\n      }\n  }\n}\nfunction getTypeFallback$2(checker, t) {\n  let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n  if (!n && t.intrinsicName)\n    n = t.intrinsicName;\n  if (typeof n !== \"string\") {\n    let props = t.getApparentProperties();\n    if (props.length > 0) {\n      for (let p of props) {\n        if (p.escapedName.toString() === \"_opaque_int\")\n          return \"int\";\n        if (p.escapedName.toString() === \"_opaque_float\")\n          return \"float\";\n        if (p.escapedName.toString() === \"_opaque_uint\")\n          return \"uint\";\n      }\n    }\n    let btype = t.getBaseTypes();\n    if (btype && btype.length > 0) {\n      for (let b of btype) {\n        let tn = getTypeFallback$2(checker, b);\n        if (tn)\n          return tn;\n      }\n      return null;\n    }\n  } else {\n    return n;\n  }\n}\nfunction followTypeReferences$1(t) {\n  if (t.flags & ts.TypeFlags.Object && t.objectFlags & ts.ObjectFlags.Reference) {\n    if (t.target === t) {\n      return t;\n    }\n    return followTypeReferences$1(t.target);\n  } else {\n    return t;\n  }\n}\nfunction translateType$1(checker, t, templateFormat = false) {\n  let n = getTypeFallback$2(checker, t);\n  let originalType = t;\n  if (n === void 0) {\n    t = followTypeReferences$1(t);\n  }\n  if (templateFormat) {\n    let name = n?.toString() ?? \"unknown\";\n    if (name === \"Array\" || name === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n      let typeRef = originalType;\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      return {\n        type: \"array\",\n        element: translateType$1(checker, args[0], true)\n      };\n    }\n    if (name == \"boolean\" || name == \"false\" || name == \"true\")\n      name = \"bool\";\n    if (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\") || name == \"bool\" || name == \"texture2d\" || name == \"atomic\")\n      return { type: \"primitive\", name };\n    let symbol = t.aliasSymbol || t.getSymbol();\n    if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n      if (ts.isClassDeclaration(symbol.declarations[0])) {\n        let fields = {};\n        let decl = symbol.declarations[0];\n        for (let member of decl.members) {\n          if (ts.isPropertyDeclaration(member)) {\n            let name2 = member.name.getText();\n            let type2 = checker.getTypeFromTypeNode(member.type);\n            fields[name2] = translateType$1(checker, type2, true);\n          }\n        }\n        return {\n          type: \"struct\",\n          name: resolveStructName$1(decl),\n          fields\n        };\n      } else {\n        return {\n          type: \"unknown\"\n        };\n      }\n    }\n  } else {\n    if (n === \"Array\" || n === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n      let typeRef = originalType;\n      let toStringed = checker.typeToString(typeRef);\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      let translated = translateType$1(checker, args[0]);\n      if (toStringed.endsWith(\"[]\")) {\n        return translated + \"[]\";\n      } else {\n        let staticSize = 0;\n        if (tsutils.isTupleType(t)) {\n          staticSize = t.fixedLength;\n        }\n        return translated + \"[\" + staticSize + \"]\";\n      }\n    }\n    if (n === \"texture2d\")\n      return `sampler2D`;\n    if (n == \"atomic\") {\n      let args = t.typeArguments || checker.getTypeArguments(t);\n      let translated = translateType$1(checker, args[0]);\n      return `atomic_${translated}`;\n    }\n    if (n === \"bool\")\n      return \"bool\";\n    if (n === \"boolean\")\n      return \"bool\";\n    if (n === \"float\")\n      return \"float\";\n    if (n === \"float2\")\n      return \"vec2\";\n    if (n === \"float3\")\n      return \"vec3\";\n    if (n === \"float4\")\n      return \"vec4\";\n    if (n === \"int\")\n      return \"int\";\n    if (n === \"int2\")\n      return \"ivec2\";\n    if (n === \"int3\")\n      return \"ivec3\";\n    if (n === \"int4\")\n      return \"ivec4\";\n    if (n === \"uint\")\n      return \"uint\";\n    if (n === \"uint8\")\n      return \"uint\";\n    if (n === \"uint2\")\n      return \"uvec2\";\n    if (n === \"uint3\")\n      return \"uvec3\";\n    if (n === \"uint4\")\n      return \"uvec4\";\n    if (n === \"float2x2\")\n      return \"mat2\";\n    if (n === \"float3x3\")\n      return \"mat3\";\n    if (n === \"float4x4\")\n      return \"mat4\";\n    if (n === \"void\")\n      return \"void\";\n    if (n === \"error\")\n      return \"void\";\n    if (t.isUnion()) {\n      let types2 = t.types.map((t2) => translateType$1(checker, t2));\n      for (let sub of types2) {\n        if (sub && sub !== \"void\" && sub !== \"undefined\")\n          return sub;\n      }\n    }\n    let symbol = t.aliasSymbol || t.getSymbol();\n    if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n      if (ts.isClassDeclaration(symbol.declarations[0])) {\n        return resolveStructName$1(symbol.declarations[0]);\n      } else {\n        return n?.toString() ?? \"void\";\n      }\n    } else {\n      return n?.toString() ?? \"void\";\n    }\n  }\n}\nfunction isTypeNameVector$1(name) {\n  if (name.startsWith(\"float\") || name.startsWith(\"int\")) {\n    if (name.endsWith(\"2\") || name.endsWith(\"3\") || name.endsWith(\"4\")) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction getTypeNameVectorElementType$1(name) {\n  if (name == \"float\") {\n    return [\"float\", 1];\n  }\n  if (name == \"int\") {\n    return [\"int\", 1];\n  }\n  if (name == \"uint\") {\n    return [\"uint\", 1];\n  }\n  if (name.startsWith(\"float\")) {\n    return [\"float\", parseInt(name.substring(5))];\n  }\n  if (name.startsWith(\"int\")) {\n    return [\"int\", parseInt(name.substring(3))];\n  }\n  if (name.startsWith(\"uint\")) {\n    return [\"uint\", parseInt(name.substring(4))];\n  }\n  if (name.startsWith(\"vec\")) {\n    return [\"float\", parseInt(name.substring(3))];\n  }\n  if (name.startsWith(\"ivec\")) {\n    return [\"int\", parseInt(name.substring(4))];\n  }\n  if (name.startsWith(\"uvec\")) {\n    return [\"uint\", parseInt(name.substring(4))];\n  }\n  return [\"\", 0];\n}\nfunction isTranslatedTypeNameVectorOrScalar$1(name) {\n  if (name == \"float\" || name == \"int\" || name == \"uint\")\n    return true;\n  if (name.startsWith(\"vec\") || name.startsWith(\"ivec\") || name.startsWith(\"uvec\")) {\n    if (name.endsWith(\"2\") || name.endsWith(\"3\") || name.endsWith(\"4\")) {\n      return true;\n    }\n    return true;\n  }\n  return false;\n}\nfunction isVector$1(checker, t) {\n  let name = getTypeFallback$2(checker, t);\n  if (name) {\n    return isTypeNameVector$1(name);\n  }\n  return false;\n}\nfunction getVectorElementType$1(checker, t) {\n  let name = getTypeFallback$2(checker, t);\n  if (name) {\n    return getTypeNameVectorElementType$1(name);\n  }\n  return [\"\", 0];\n}\nfunction isNumeric$1(checker, t) {\n  let name = getTypeFallback$2(checker, t);\n  if (name && (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\"))) {\n    return true;\n  }\n  return false;\n}\nfunction escapeIdentifier$1(id) {\n  if (RESERVED_WORDS$1.includes(id)) {\n    return \"_\" + id;\n  }\n  return id.replaceAll(\"___\", \"_ii_\").replaceAll(\"__\", \"_i_\");\n}\nfunction getVectorMask$1(num) {\n  let outMask = \"\";\n  let comps = [\"x\", \"y\", \"z\", \"w\"];\n  for (let i = 0; i < num; i++) {\n    outMask += comps[i];\n  }\n  return outMask;\n}\nfunction isGLSLType$1(name) {\n  return name.startsWith(\"vec\") || name.startsWith(\"mat\") || name.startsWith(\"sampler\") || name.startsWith(\"texture\") || name.startsWith(\"isampler\") || name.startsWith(\"usampler\") || name.startsWith(\"uvec\") || name.startsWith(\"ivec\") || name == \"bool\" || name == \"float\" || name == \"int\" || name == \"uint\" || name == \"uint8\" || name == \"void\";\n}\nfunction autoCastNumeric$1(value, input, expected) {\n  let inputType = getTypeNameVectorElementType$1(input);\n  let expectedType = getTypeNameVectorElementType$1(expected);\n  if (inputType[0] != expectedType[0]) {\n    if (expectedType[1] == 1) {\n      return new SourceNode(value.startIndex, value.endIndex, [`${expectedType[0]}(`, value, `)`]);\n    } else {\n      return new SourceNode(value.startIndex, value.endIndex, [`${expectedType[0]}(`, value, `)`]);\n    }\n  }\n  return value;\n}\nfunction convertConciseBodyToBlock$1(body) {\n  if (ts.isBlock(body)) {\n    return body;\n  } else {\n    return ts.factory.createBlock([ts.factory.createReturnStatement(body)]);\n  }\n}\nfunction compile$2(ctx, ast, originalMapping) {\n  function c2(ast2) {\n    if (!ast2) {\n      return s([]);\n    }\n    return compile$2(ctx, ast2);\n  }\n  function cplain(ast2) {\n    if (!ast2) {\n      return s([]);\n    }\n    return compile$2(\n      {\n        checker: ctx.checker,\n        parentFunction: ctx.parentFunction\n      },\n      ast2\n    );\n  }\n  function s(c22) {\n    if (originalMapping) {\n      let reverseMapped = lookupIndexMappingRange(originalMapping, ast.getStart(), ast.getEnd());\n      return new SourceNode(reverseMapped.start, reverseMapped.end, c22);\n    } else {\n      return new SourceNode(0, 0, c22);\n    }\n  }\n  function join(c22, sep) {\n    return c22.reduce((acc, cur) => {\n      if (acc.length === 0) {\n        return [cur];\n      }\n      return [...acc, sep, cur];\n    }, []);\n  }\n  function children() {\n    return ast.getChildren().map((child) => c2(child));\n  }\n  function autoCastParameter(callExpr, argIndex) {\n    let signature = ctx.checker.getResolvedSignature(callExpr);\n    let params = signature.getParameters();\n    let param = params[argIndex];\n    let paramType = ctx.checker.getTypeOfSymbolAtLocation(param, callExpr);\n    let paramTypeString = translateType$1(ctx.checker, paramType);\n    let arg = callExpr.arguments[argIndex];\n    let argType = ctx.checker.getTypeAtLocation(arg);\n    let argTypeString = translateType$1(ctx.checker, argType);\n    if (paramTypeString !== argTypeString) {\n      return autoCastNumeric$1(c2(arg), argTypeString, paramTypeString);\n    }\n    return s([c2(arg)]);\n  }\n  let prefixFunctions = [];\n  if (ctx.composed) {\n    if (ts.isMethodDeclaration(ast) || ts.isFunctionDeclaration(ast)) {\n      for (let [i, arg] of ctx.composed.arguments.entries()) {\n        if (ts.isArrowFunction(arg)) {\n          let paramFromIndex = ast.parameters[i];\n          let name = paramFromIndex.name.getText() + \"_composed_\" + arg.pos + \"_arg_\" + i;\n          let signature = ctx.checker.getSignatureFromDeclaration(arg);\n          let returnType = signature.getReturnType();\n          let vars = getClosureVars$1(ctx.checker, arg);\n          let vvv = vars.map(\n            (p) => s([\n              translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(p.declarations[0])),\n              \" \",\n              p.escapedName\n            ])\n          );\n          let joins = join([...arg.parameters.map((p) => cplain(p)), ...vvv], \", \");\n          prefixFunctions.push(\n            s([\n              translateType$1(ctx.checker, returnType),\n              \" \",\n              name,\n              \"(\",\n              ...joins,\n              \")\",\n              \" {\\n\",\n              ...convertConciseBodyToBlock$1(arg.body).statements.map((s2) => c2(s2)) ?? [],\n              \"\\n}\\n\\n\"\n            ])\n          );\n        }\n      }\n    }\n  }\n  switch (ast.kind) {\n    case ts.SyntaxKind.FirstPunctuation:\n      return s([ast.getText()]);\n    case ts.SyntaxKind.SyntaxList:\n      return s(children());\n    case ts.SyntaxKind.SourceFile:\n      return s(children());\n    case ts.SyntaxKind.BreakStatement:\n      return s([\"break;\"]);\n    case ts.SyntaxKind.ContinueStatement:\n      return s([\"continue;\"]);\n    case ts.SyntaxKind.MethodDeclaration:\n      let fnDeclar = ast;\n      let fnName = resolveFunctionName$1(fnDeclar);\n      if (ctx.composed) {\n        fnName = fnName + \"_composed_\" + ctx.composed.pos;\n      }\n      let isStatic = false;\n      let signature = ctx.checker.getSignatureFromDeclaration(fnDeclar);\n      if (ts.canHaveModifiers(fnDeclar)) {\n        let mods = ts.getModifiers(fnDeclar);\n        if (mods) {\n          if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n            isStatic = true;\n          }\n        }\n      }\n      let returnType = signature.getReturnType();\n      return s([\n        ...prefixFunctions,\n        translateType$1(ctx.checker, returnType),\n        \" \",\n        fnName,\n        \"(\",\n        ,\n        ...join(\n          [\n            ...isStatic ? [] : [\n              translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(fnDeclar.parent)) + \" _this\"\n            ],\n            ...fnDeclar.parameters.filter((p) => {\n              let type22 = ctx.checker.getTypeAtLocation(p);\n              if (type22.getCallSignatures().length > 0) {\n                return false;\n              }\n              return true;\n            }).map((p) => c2(p))\n          ],\n          \", \"\n        ),\n        \")\",\n        \" {\\n\",\n        ...fnDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n        \"\\n}\\n\\n\"\n      ]);\n    case ts.SyntaxKind.FunctionDeclaration:\n      let mthdDeclar = ast;\n      let mthdsignature = ctx.checker.getSignatureFromDeclaration(mthdDeclar);\n      let mthdreturnType = mthdsignature.getReturnType();\n      let mthdName = resolveFunctionName$1(mthdDeclar);\n      if (ctx.composed) {\n        mthdName = mthdName + \"_composed_\" + ctx.composed.pos;\n      }\n      return s([\n        ...prefixFunctions,\n        translateType$1(ctx.checker, mthdreturnType),\n        \" \",\n        mthdName,\n        \"(\",\n        ...join(\n          mthdDeclar.parameters.filter((p) => {\n            let type22 = ctx.checker.getTypeAtLocation(p);\n            if (type22.getCallSignatures().length > 0) {\n              return false;\n            }\n            return true;\n          }).map((p) => c2(p)),\n          \", \"\n        ),\n        \")\",\n        \" {\\n\",\n        ...mthdDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n        \"\\n}\\n\\n\"\n      ]);\n    case ts.SyntaxKind.ReturnStatement:\n      let ret = ast;\n      if (!ctx.parentFunction) {\n        if (ret.expression) {\n          return s([\"return \", c2(ret.expression), \";\\n\"]);\n        } else {\n          return s([\"return;\\n\"]);\n        }\n      } else {\n        let expectedReturnType = ctx.checker.getSignatureFromDeclaration(ctx.parentFunction).getReturnType();\n        let actualReturnType = ctx.checker.getTypeAtLocation(ret.expression);\n        if (ret.expression) {\n          let sss = s([\n            \"return \",\n            autoCastNumeric$1(\n              c2(ret.expression),\n              translateType$1(ctx.checker, actualReturnType),\n              translateType$1(ctx.checker, expectedReturnType)\n            ),\n            \";\\n\"\n          ]);\n          return sss;\n        } else {\n          return s([\"return;\\n\"]);\n        }\n      }\n    case ts.SyntaxKind.AsExpression:\n      let asExpr = ast;\n      return c2(asExpr.expression);\n    case ts.SyntaxKind.Parameter:\n      let param = ast;\n      if (ctx.composed) {\n        let indexOf2 = param.parent.parameters.indexOf(param);\n        let expr2 = ctx.composed.arguments[indexOf2];\n        if (expr2) {\n          if (ts.isArrowFunction(expr2)) {\n            let vars = getClosureVars$1(ctx.checker, expr2.body);\n            let closureVars = vars.map((v) => {\n              return s([\n                translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(v.valueDeclaration)),\n                \" \",\n                v.name\n              ]);\n            });\n            return s(join(closureVars, \", \"));\n          }\n        }\n      }\n      return s([\n        translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(param)),\n        \" \",\n        escapeIdentifier$1(param.name.getText())\n      ]);\n    case ts.SyntaxKind.ArrowFunction:\n      let arrow = ast;\n      let body = convertConciseBodyToBlock$1(arrow.body);\n      return s([\n        \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\\nvoid main() {\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\\n\",\n        ...body.statements.map((s2) => c2(s2)),\n        \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\\n}\\n\"\n      ]);\n    case ts.SyntaxKind.VariableStatement:\n      let varStatement = ast;\n      return s([\n        ...join(\n          varStatement.declarationList.declarations.map((d) => c2(d)),\n          \", \"\n        ),\n        \";\\n\"\n      ]);\n    case ts.SyntaxKind.VariableDeclaration:\n      let varDecl = ast;\n      let type2 = ctx.checker.getTypeAtLocation(varDecl);\n      return s([\n        translateType$1(ctx.checker, type2),\n        \" \",\n        varDecl.name.getText(),\n        \" = \",\n        c2(varDecl.initializer)\n      ]);\n    case ts.SyntaxKind.CallExpression:\n      let call = ast;\n      let exprSmybol = ctx.checker.getSymbolAtLocation(call.expression);\n      if (call.expression.getText() == \"Math.random\") {\n        return s([\"0.0\"]);\n      }\n      if (!exprSmybol) {\n        return s([\"/* TODO: Unknown symbol */\"]);\n      }\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = ctx.checker.getAliasedSymbol(exprSmybol);\n      }\n      let symName = exprSmybol?.getName() ?? call.expression.getText();\n      if (symName == \"__index\") {\n        if (ts.isPropertyAccessExpression(call.expression)) {\n          let innerType = translateType$1(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(call.expression.expression)\n          );\n          let returnType2 = ctx.checker.getTypeAtLocation(call);\n          let vecOut = getVectorElementType$1(ctx.checker, returnType2);\n          let outMask = getVectorMask$1(vecOut[1]);\n          if (innerType == \"sampler2D\") {\n            return s([\n              \"texelFetch(\",\n              c2(call.expression.expression),\n              \", ivec2(\",\n              c2(call.arguments[0]),\n              \"), 0).\" + outMask\n            ]);\n          }\n        }\n        return s([c2(call.expression), \"[\", c2(call.arguments[0]), \"]\"]);\n      } else if (symName == \"len\") {\n        let expr2 = call.expression;\n        if (ts.isPropertyAccessExpression(expr2)) {\n          let left = expr2.expression;\n          return s([c2(left), \"_size\"]);\n        }\n      } else if (symName == \"min\" || symName == \"max\") {\n        if (call.arguments.length > 2) {\n          let args2 = call.arguments.map((a) => c2(a));\n          while (args2.length > 2) {\n            let left = args2.shift();\n            let right = args2.shift();\n            args2.unshift(s([symName, \"(\", left, \",\", right, \")\"]));\n          }\n          return s([symName, \"(\", ...join(args2, \",\"), \")\"]);\n        }\n      } else if (symName == \"sample\") {\n        if (ts.isPropertyAccessExpression(call.expression)) {\n          let innerType = translateType$1(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(call.expression.expression)\n          );\n          if (innerType == \"sampler2D\") {\n            return s([\n              \"texture(\",\n              c2(call.expression.expression),\n              \", vec2(\",\n              c2(call.arguments[0]),\n              \"))\"\n            ]);\n          }\n        }\n      } else if (symName == \"__index_assign\") {\n        return s([\n          c2(call.expression.expression),\n          \"[\",\n          c2(call.arguments[0]),\n          \"] = \",\n          autoCastParameter(call, 1)\n        ]);\n      } else if (symName == \"rand\" && call.arguments.length == 0 && call.expression.getText() == \"rand\") {\n        throw new GLSLCompilationError(\n          \"rand() in shaders needs to be seeded, use rand(seed) instead\",\n          call\n        );\n      }\n      if (exprSmybol?.getName() == \"makeVector\" && exprSmybol.valueDeclaration) {\n        if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n          let exprSig2 = ctx.checker.getResolvedSignature(call);\n          if (exprSig2) {\n            return s([\n              translateType$1(ctx.checker, ctx.checker.getReturnTypeOfSignature(exprSig2)),\n              \"(\",\n              ...join(\n                call.arguments.map((a) => c2(a)),\n                \", \"\n              ),\n              \")\"\n            ]);\n          }\n        }\n      }\n      if (exprSmybol?.getName() == \"swizzle\" && exprSmybol.valueDeclaration) {\n        if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n          ctx.checker.getSignatureFromDeclaration(exprSmybol.valueDeclaration);\n          let arg = call.arguments[0];\n          let arg2 = call.arguments[1];\n          let propAccess = \"\";\n          if (ts.isStringLiteral(arg2)) {\n            propAccess = arg2.text;\n          }\n          let argType = ctx.checker.getTypeAtLocation(arg);\n          if (isVector$1(ctx.checker, argType)) {\n            return s([c2(arg), \".\", propAccess]);\n          } else if (isNumeric$1(ctx.checker, argType)) {\n            let numericType = translateType$1(ctx.checker, argType);\n            return s([`shadeup_up_swizzle_${propAccess}_${numericType}(`, c2(arg), \")\"]);\n          } else {\n            return s([c2(arg), \".\", propAccess]);\n          }\n        }\n      }\n      if (isTypeNameVector$1(exprSmybol?.getName() ?? \"\")) {\n        return s([\n          translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(call.expression)),\n          \"(\",\n          ...join(call.arguments.length == 0 ? [s([\"0\"])] : call.arguments.map((a) => c2(a)), \", \"),\n          \")\"\n        ]);\n      }\n      let funcName = c2(call.expression);\n      let callArgs = [];\n      let preArgs = [];\n      let exprSig = ctx.checker.getResolvedSignature(call);\n      let exprDeclar = exprSig.getDeclaration();\n      if (exprDeclar) {\n        if (ts.isMethodDeclaration(exprDeclar)) {\n          let isStatic2 = false;\n          if (ts.canHaveModifiers(exprDeclar)) {\n            let mods = ts.getModifiers(exprDeclar);\n            if (mods) {\n              if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n                isStatic2 = true;\n              }\n            }\n          }\n          if (!isStatic2) {\n            if (ts.isPropertyAccessExpression(call.expression)) {\n              preArgs.push(c2(call.expression.expression));\n            }\n          }\n        }\n      }\n      exprSmybol.getName() + \"(\";\n      for (let [i, arg] of call.arguments.entries()) {\n        let argStr = c2(arg);\n        if (exprSig) {\n          let p = exprSig.getTypeParameterAtPosition(i);\n          if (p) {\n            let translatedBase = translateType$1(ctx.checker, p);\n            let translatedPass = translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n            if (isTranslatedTypeNameVectorOrScalar$1(translatedPass)) {\n              if (translatedBase != translatedPass && isGLSLType$1(translatedBase)) {\n                argStr = s([`${translatedBase}(`, argStr, `)`]);\n              }\n            }\n          } else {\n            translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n          }\n        }\n        if (ts.isArrowFunction(arg)) {\n          let arrow2 = arg;\n          let vars = getClosureVars$1(ctx.checker, arrow2.body);\n          if (vars.length > 0)\n            callArgs.push(vars.map((v) => v.escapedName).join(\", \"));\n        } else {\n          callArgs.push(argStr);\n        }\n      }\n      if (exprSmybol) {\n        let signature2 = ctx.checker.getResolvedSignature(call);\n        let mapping = findRealSignatureMappingToGLSL(ctx.checker, signature2) ?? findSignatureMappingToGLSL(ctx.checker, exprSmybol);\n        if (mapping !== null) {\n          if (mapping.startsWith(\"!\")) {\n            let minType = \"\";\n            let noOp = false;\n            for (let arg of call.arguments) {\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let argTypeName = translateType$1(ctx.checker, argType);\n              if (!(argTypeName == \"float\" || argTypeName.startsWith(\"vec\") || argTypeName == \"int\" || argTypeName.startsWith(\"ivec\") || argTypeName == \"uint\" || argTypeName.startsWith(\"uvec\"))) {\n                noOp = true;\n              }\n              if (minType == \"\") {\n                if (argTypeName == \"float\" || argTypeName.startsWith(\"vec\")) {\n                  minType = \"float\";\n                } else if (argTypeName == \"int\" || argTypeName.startsWith(\"ivec\")) {\n                  minType = \"int\";\n                } else if (argTypeName == \"uint\" || minType.startsWith(\"uvec\")) {\n                  minType = \"uint\";\n                }\n              } else if (argTypeName == \"float\" || minType.startsWith(\"vec\")) {\n                minType = \"float\";\n              }\n            }\n            if (!noOp) {\n              for (let i = 0; i < callArgs.length; i++) {\n                let arg = call.arguments[i];\n                let argType = ctx.checker.getTypeAtLocation(arg);\n                let argTypeName = translateType$1(ctx.checker, argType);\n                let argTypeStripped = \"\";\n                if (argTypeName == \"float\" || argTypeName.startsWith(\"vec\")) {\n                  argTypeStripped = \"float\";\n                } else if (argTypeName == \"int\" || argTypeName.startsWith(\"ivec\")) {\n                  argTypeStripped = \"int\";\n                } else if (argTypeName == \"uint\" || argTypeName.startsWith(\"uvec\")) {\n                  argTypeStripped = \"uint\";\n                }\n                if (argTypeStripped != minType) {\n                  if (argTypeName.startsWith(\"float\") || argTypeName.startsWith(\"int\")) {\n                    callArgs[i] = s([`${minType}(`, callArgs[i], `)`]);\n                  } else if (argTypeName.startsWith(\"vec\") || argTypeName.startsWith(\"ivec\")) {\n                    let len = argTypeName.match(/\\d+/)?.[0];\n                    if (len === void 0) {\n                      throw new Error(\"Invalid type\");\n                    }\n                    callArgs[i] = s([\n                      `${minType == \"float\" ? \"vec\" : \"ivec\"}${len}(`,\n                      callArgs[i],\n                      `)`\n                    ]);\n                  } else\n                    ;\n                }\n              }\n            }\n            let template = mapping.slice(1);\n            let outs = [];\n            let argCounter = 0;\n            let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n            for (let i = 0; i < callArgs.length; i++) {\n              let paramType = ctx.checker.getTypeAtLocation(\n                sig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n              );\n              template = template.replace(\n                \"`\" + argCounter + \"`\",\n                ctx.checker.typeToString(paramType)\n              );\n              argCounter++;\n            }\n            let result = template.split(\"$\");\n            for (let r of result) {\n              if (/^\\d+$/.test(r)) {\n                outs.push(callArgs[parseInt(r)]);\n              } else if (r == \"self\") {\n                if (call.expression.kind == ts.SyntaxKind.PropertyAccessExpression) {\n                  let propAccess = call.expression;\n                  outs.push(c2(propAccess.getChildAt(0)));\n                } else {\n                  outs.push(c2(call.expression));\n                }\n              } else {\n                outs.push(r);\n              }\n            }\n            if (outs.includes(\" % \")) {\n              if (call.arguments.length == 2) {\n                let first = getVectorElementType$1(\n                  ctx.checker,\n                  ctx.checker.getTypeAtLocation(call.arguments[0])\n                );\n                let last = getVectorElementType$1(\n                  ctx.checker,\n                  ctx.checker.getTypeAtLocation(call.arguments[1])\n                );\n                if (first[1] != last[1] && last[1] == 1) {\n                  getVectorMask$1(first[1]);\n                  if (first[0] == \"float\" || last[0] == \"float\") {\n                    outs = [`mod(`, outs[1], \", \", outs[3], \")\"];\n                  }\n                }\n              }\n            }\n            return s(outs);\n          } else if (mapping.startsWith(\"#\")) {\n            let typeName = \"\";\n            if (call.arguments.length > 0) {\n              let firstArg = call.arguments[0];\n              let firstArgType = ctx.checker.getTypeAtLocation(firstArg);\n              typeName = ctx.checker.typeToString(firstArgType);\n            }\n            return s([\n              new SourceNode(call.expression.getStart(), call.expression.getEnd(), [\n                mapping.substring(1) + typeName\n              ]),\n              \"(\",\n              ...join([...preArgs, ...callArgs], \", \"),\n              \")\"\n            ]);\n          } else {\n            return s([\n              new SourceNode(call.expression.getStart(), call.expression.getEnd(), [mapping]),\n              \"(\",\n              ...join([...preArgs, ...callArgs], \", \"),\n              \")\"\n            ]);\n          }\n        }\n        if (exprSmybol.declarations[0].parent) {\n          let param2 = exprSmybol.declarations[0];\n          if (ts.isParameter(param2))\n            ;\n        }\n        let funcDeclar = exprSmybol.valueDeclaration;\n        if (exprSmybol.declarations[0].parent) {\n          let param2 = exprSmybol.declarations[0];\n          if (ts.isParameter(param2)) {\n            let indexOf2 = param2.parent.parameters.indexOf(param2);\n            let additionalArgs = [];\n            if (ctx.composed) {\n              let realAnonymousFunc = ctx.composed.arguments[indexOf2];\n              if (ts.isArrowFunction(realAnonymousFunc)) {\n                let vars = getClosureVars$1(ctx.checker, realAnonymousFunc.body);\n                additionalArgs = vars.map((v) => v.escapedName);\n                callArgs.push(...additionalArgs);\n                return s([\n                  funcName,\n                  \"_composed_\",\n                  realAnonymousFunc.pos.toString(),\n                  \"_arg_\",\n                  indexOf2.toString(),\n                  \"(\",\n                  ...join([...preArgs, ...callArgs], \", \"),\n                  \")\"\n                ]);\n              }\n            }\n          }\n        }\n        if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n          funcName = new SourceNode(\n            call.expression.getStart(),\n            call.expression.getEnd(),\n            resolveFunctionName$1(funcDeclar)\n          );\n          let parentDeclar = closest(ast, (n2) => ts.isFunctionDeclaration(n2));\n          if (parentDeclar && ts.isFunctionDeclaration(parentDeclar))\n            ;\n          if (isComposedFunction$1(ctx.checker, funcDeclar)) {\n            return s([\n              funcName,\n              \"_composed_\",\n              call.pos.toString(),\n              \"(\",\n              ...join([...preArgs, ...callArgs], \", \"),\n              \")\"\n            ]);\n          }\n        }\n      }\n      return s([funcName, \"(\", ...join([...preArgs, ...callArgs], \", \"), \")\"]);\n    case ts.SyntaxKind.NewExpression:\n      let newExpr = ast;\n      let newExprSymbol = ctx.checker.getSymbolAtLocation(newExpr.expression);\n      let args = [];\n      if (newExpr.arguments?.length == 1 && ts.isObjectLiteralExpression(newExpr.arguments[0])) {\n        let object = newExpr.arguments[0];\n        let props = object.properties;\n        let sortedPropsByKey = [];\n        let structProps = [];\n        newExprSymbol?.members?.forEach((v, k) => {\n          let decl2 = v.valueDeclaration;\n          if (decl2 && ts.isPropertyDeclaration(decl2)) {\n            structProps.push([k?.toString() ?? \"\", decl2.type]);\n          }\n        });\n        sortedPropsByKey = structProps.sort((a, b) => {\n          return a[0].localeCompare(b[0]);\n        });\n        args = [\n          ...sortedPropsByKey.map((p) => {\n            let prop2 = props.find((p2) => {\n              if (ts.isPropertyAssignment(p2)) {\n                return p2.name.getText() == p[0];\n              } else if (ts.isShorthandPropertyAssignment(p2)) {\n                return p2.name.getText() == p[0];\n              } else {\n                return false;\n              }\n            });\n            if (prop2) {\n              if (ts.isPropertyAssignment(prop2)) {\n                return s([\"/* \", p[0], \": */ \", c2(prop2.initializer), \"\\n\"]);\n              } else if (ts.isShorthandPropertyAssignment(prop2)) {\n                return s([\"/* \", p[0], \": */ \", c2(prop2.name), \"\\n\"]);\n              } else {\n                return s([\"/* \", c2(prop2), \": */ \", \"\\n\"]);\n              }\n            } else {\n              return s([\"/* \", p[0], \": */ \", generateDefaultForType$2(ctx.checker, p[1]), \"\\n\"]);\n            }\n          })\n        ];\n      }\n      let decl = ctx.checker.getTypeAtLocation(newExpr.expression).getSymbol()?.getDeclarations();\n      if (decl && ts.isClassDeclaration(decl[0])) {\n        return s([\"_make_struct_\", resolveStructName$1(decl[0]), \"(\\n\", ...join(args, \", \"), \"\\n)\"]);\n      } else {\n        return s([\"/*\", ...join(args, \", \"), \"*/\"]);\n      }\n    case ts.SyntaxKind.ExpressionStatement:\n      let expr = ast;\n      return s([c2(expr.expression), \";\\n\"]);\n    case ts.SyntaxKind.ObjectLiteralExpression:\n      let obj = ast;\n      return s([\n        \"{\",\n        ...join(\n          obj.properties.map((p) => {\n            if (ts.isPropertyAssignment(p)) {\n              return s([c2(p.name), \": \", c2(p.initializer)]);\n            } else if (ts.isShorthandPropertyAssignment(p)) {\n              return s([c2(p.name)]);\n            } else {\n              return s([\"/*\", c2(p), \"*/\"]);\n            }\n          }),\n          \", \"\n        ),\n        \"}\"\n      ]);\n    case ts.SyntaxKind.ConditionalExpression:\n      let cond = ast;\n      return s([c2(cond.condition), \" ? \", c2(cond.whenTrue), \" : \", c2(cond.whenFalse)]);\n    case ts.SyntaxKind.Identifier:\n      let id = ast;\n      if (ts.isIdentifier(id)) {\n        let sym = ctx.checker.getSymbolAtLocation(id);\n        if (sym && sym.flags & ts.SymbolFlags.Alias) {\n          sym = ctx.checker.getAliasedSymbol(sym);\n        }\n        if (sym?.declarations?.length == 1) {\n          let decl2 = sym.declarations[0];\n          if (isUniformable$1(ctx.checker, decl2)) {\n            if (isVariableDeclarationValue$1(ctx.checker, decl2)) {\n              if (!isInSameScope$1(decl2, ast)) {\n                if (!isInShader$2(decl2)) {\n                  if (ts.isBinaryExpression(ast.parent)) {\n                    if (ast.parent.left == ast) {\n                      throw new GLSLCompilationError(\n                        `Cannot assign to variable '${id.text.toString()}' because it is not declared in the shader`,\n                        ast\n                      );\n                    }\n                  }\n                  let isGlobalVar = isRootNode$1(decl2);\n                  let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${id.text.toString()}`;\n                  return s([glslVarName]);\n                } else {\n                  return s([escapeIdentifier$1(id.text.toString())]);\n                }\n              }\n            }\n          }\n        }\n        return s([escapeIdentifier$1(id.text.toString())]);\n      } else {\n        return c2(id.expression);\n      }\n    case ts.SyntaxKind.PropertyAccessExpression:\n      let prop = ast;\n      let isStaticMember = isStaticPropertyAccessExpression(ctx.checker, prop);\n      if (isStaticMember) {\n        return s([c2(prop.expression), \"_static_\", c2(prop.name)]);\n      } else {\n        let propName = prop.name.getText();\n        if (propName == \"__index\") {\n          return s([c2(prop.expression)]);\n        } else if (propName == \"size\") {\n          let innerType = translateType$1(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(prop.expression)\n          );\n          if (innerType == \"sampler2D\") {\n            return s([c2(prop.expression), \"_\", propName]);\n          }\n        } else {\n          return s([c2(prop.expression), \".\", c2(prop.name)]);\n        }\n      }\n    case ts.SyntaxKind.ThisKeyword:\n      return s([\"_this\"]);\n    case ts.SyntaxKind.FirstLiteralToken:\n      let lit = ast;\n      return s([lit.text]);\n    case ts.SyntaxKind.IfStatement:\n      let ifStmt = ast;\n      if (isIdentifier$1(ifStmt.expression)) {\n        if (ifStmt.expression.escapedText == \"PLATFORM_WEBGL\") {\n          return s([c2(ifStmt.thenStatement)]);\n        }\n        if (ifStmt.expression.escapedText == \"PLATFORM_WEBGPU\") {\n          if (ifStmt.elseStatement) {\n            return s([c2(ifStmt.elseStatement)]);\n          } else {\n            return s([\"\"]);\n          }\n        }\n      }\n      return s([\n        \"if (\",\n        c2(ifStmt.expression),\n        \")\",\n        c2(ifStmt.thenStatement),\n        ifStmt.elseStatement ? s([\"else \\n\", c2(ifStmt.elseStatement), \"\\n\"]) : s([\"\"])\n      ]);\n    case ts.SyntaxKind.TrueKeyword:\n      return s([\"true\"]);\n    case ts.SyntaxKind.FalseKeyword:\n      return s([\"false\"]);\n    case ts.SyntaxKind.PostfixUnaryExpression:\n      let post = ast;\n      return s([c2(post.operand), post.operator == ts.SyntaxKind.PlusPlusToken ? \"++\" : \"--\"]);\n    case ts.SyntaxKind.PlusPlusToken:\n      return s([\"++\"]);\n    case ts.SyntaxKind.MinusMinusToken:\n      return s([\"--\"]);\n    case ts.SyntaxKind.ParenthesizedExpression:\n      let paren = ast;\n      return s([\"(\", c2(paren.expression), \")\"]);\n    case ts.SyntaxKind.VariableDeclarationList:\n      let varDeclList = ast;\n      if (varDeclList.declarations.length > 0) {\n        for (let decl2 of varDeclList.declarations) {\n          let varDecl2 = decl2;\n          let type22 = ctx.checker.getTypeAtLocation(varDecl2);\n          return s([\n            translateType$1(ctx.checker, type22),\n            \" \",\n            varDecl2.name.getText(),\n            \" = \",\n            c2(varDecl2.initializer)\n          ]);\n        }\n      } else {\n        return s([\"\"]);\n      }\n    case ts.SyntaxKind.ForStatement:\n      let forStmt = ast;\n      return s([\n        \"for (\",\n        c2(forStmt.initializer),\n        \";\",\n        c2(forStmt.condition),\n        \";\",\n        c2(forStmt.incrementor),\n        \")\",\n        c2(forStmt.statement)\n      ]);\n    case ts.SyntaxKind.BinaryExpression:\n      let bin = ast;\n      if (bin.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n        let leftType = ctx.checker.getTypeAtLocation(bin.left);\n        let rightType = ctx.checker.getTypeAtLocation(bin.right);\n        if (isVector$1(ctx.checker, leftType) && isVector$1(ctx.checker, rightType)) {\n          let [leftElementType, leftElementSize] = getVectorElementType$1(ctx.checker, leftType);\n          let [rightElementType, rightElementSize] = getVectorElementType$1(ctx.checker, rightType);\n          if (leftElementType != rightElementType) {\n            if (leftElementType == \"float\" && rightElementType == \"int\") {\n              return s([c2(bin.left), ` = vec${leftElementSize}(`, c2(bin.right), \")\"]);\n            } else if (leftElementType == \"int\" && rightElementType == \"float\") {\n              return s([c2(bin.left), ` = ivec${leftElementSize}(`, c2(bin.right), \")\"]);\n            }\n          }\n        }\n        return s([c2(bin.left), \" = \", c2(bin.right)]);\n      }\n      let binExprText = bin.operatorToken.getText();\n      if (binExprText == \"===\") {\n        binExprText = \"==\";\n      }\n      return s([c2(bin.left), \" \", binExprText, \" \", c2(bin.right)]);\n    case ts.SyntaxKind.StringLiteral:\n      return s([\"0\"]);\n    case ts.SyntaxKind.ArrayLiteralExpression:\n      let arr = ast;\n      return s([\n        \"[\",\n        ...join(\n          arr.elements.map((e) => c2(e)),\n          \", \"\n        ),\n        \"]\"\n      ]);\n    case ts.SyntaxKind.ElementAccessExpression:\n      let elem = ast;\n      return s([c2(elem.expression), \"[\", c2(elem.argumentExpression), \"]\"]);\n    case ts.SyntaxKind.Block:\n      let block = ast;\n      return s([\n        \"{\\n\",\n        ...join(\n          block.statements.map((child) => c2(child)),\n          \";\"\n        ),\n        \"\\n}\"\n      ]);\n    case ts.SyntaxKind.TypeOfExpression:\n      return s([\"0\"]);\n    case ts.SyntaxKind.WhileStatement:\n      let whileStmt = ast;\n      return s([\"while (\", c2(whileStmt.expression), \") \", c2(whileStmt.statement)]);\n    default:\n      throw new GLSLCompilationError(`Invalid shader syntax '${ast.getText()}'`, ast);\n  }\n}\nfunction getClosureVars$1(checker, func) {\n  let result = [];\n  let recur = (node2) => {\n    if (node2.kind == ts.SyntaxKind.Identifier) {\n      let id = node2;\n      let symbol = checker.getSymbolAtLocation(id);\n      let declar = symbol.valueDeclaration;\n      if (isVariableDeclarationValue$1(checker, declar)) {\n        if (declar) {\n          if (!isInSameScope$1(declar, node2) && isInShader$2(declar)) {\n            result.push(symbol);\n          }\n        }\n      }\n    } else {\n      node2.forEachChild(recur);\n    }\n  };\n  recur(func);\n  return result;\n}\nfunction getDeclarationType$1(checker, node2) {\n  return node2.type ? checker.getTypeAtLocation(node2.type) : node2.initializer ? checker.getTypeAtLocation(node2.initializer) : checker.getTypeAtLocation(node2);\n}\nclass GLSLShader {\n  constructor(key, source) {\n    this.globals = {};\n    this.locals = {};\n    this.key = key;\n    this.source = source;\n  }\n}\nfunction resolveFunctionName$1(f) {\n  if (ts.isMethodDeclaration(f)) {\n    let parentName = \"anon\";\n    if (f.parent && ts.isClassDeclaration(f.parent)) {\n      parentName = f.parent.name?.text ?? \"anon\";\n    }\n    return removeDoubleUnderscores$1(\n      `fn_${f.getSourceFile()?.fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\") ?? \"anon\"}_${f.getStart()}_${parentName}_static_${f.name.getText() ?? \"unknown\"}`\n    );\n  } else {\n    return removeDoubleUnderscores$1(\n      `fn_${f.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${f.getStart()}_${f.name?.text.replaceAll(\".\", \"_dot_\") ?? \"unknown\"}`\n    );\n  }\n}\nfunction resolveStructName$1(c2) {\n  if (c2.name?.text == \"ShaderInput\")\n    return \"ShaderInput\";\n  if (c2.name?.text == \"ShaderOutput\")\n    return \"ShaderOutput\";\n  return removeDoubleUnderscores$1(\n    `str_${c2.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${c2.getStart()}_${c2.name?.text ?? \"unknown\"}`.replaceAll(\"__\", \"_i_\")\n  );\n}\nfunction isInSameScope$1(node2, other) {\n  return closest(node2, (node22) => {\n    if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n      return true;\n    }\n    if (ts.isSourceFile(node22)) {\n      return true;\n    }\n  }) == closest(other, (node22) => {\n    if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n      return true;\n    }\n    if (ts.isSourceFile(node22)) {\n      return true;\n    }\n  });\n}\nfunction isInShader$2(node2) {\n  return closest(node2, (node22) => {\n    if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n      if (hasShadeupDocTag(node22, \"shader\")) {\n        return true;\n      }\n    }\n    return false;\n  });\n}\nfunction isRootNode$1(node2) {\n  let parentRoot = closest(node2, (node22) => {\n    if (ts.isMethodDeclaration(node22) || ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n      return true;\n    }\n    if (ts.isSourceFile(node22)) {\n      return true;\n    }\n  });\n  return parentRoot && ts.isSourceFile(parentRoot);\n}\nfunction isComposedFunction$1(checker, func) {\n  let isComposed = false;\n  func.parameters.forEach((param) => {\n    let type2 = checker.getTypeAtLocation(param);\n    if (type2.getCallSignatures().length > 0) {\n      isComposed = true;\n    }\n  });\n  return isComposed;\n}\nfunction resolveDeps$1(checker, root, table = {\n  graph: /* @__PURE__ */ new Map(),\n  functions: /* @__PURE__ */ new Map(),\n  structs: /* @__PURE__ */ new Map(),\n  structsProps: /* @__PURE__ */ new Map(),\n  globals: /* @__PURE__ */ new Map(),\n  composed: /* @__PURE__ */ new Map()\n}) {\n  function resolveFunction(f1, f2, call) {\n    let n1 = f1 ? resolveFunctionName$1(f1) : \"main\";\n    let n2 = resolveFunctionName$1(f2);\n    if (f2.name?.getText() === \"__index\" || f2.name?.getText() === \"__index_assign\" || f2.name?.getText() === \"__index_assign_op\" || f2.name?.getText() === \"len\" || f2.name?.getText() === \"sample\" || hasShadeupDocTag(f2, \"noemit_gpu\"))\n      return;\n    if (isComposedFunction$1(checker, f2)) {\n      n2 = n2 + \"_composed_\" + call.pos;\n      table.composed.set(n2, call);\n    }\n    let deps = table.graph.get(n1) ?? [];\n    if (!deps.includes(n2))\n      deps.push(n2);\n    table.graph.set(n1, deps);\n    table.functions.set(n2, f2);\n  }\n  function resolveStruct(decl) {\n    let name = resolveStructName$1(decl);\n    if (table.structs.has(name))\n      return;\n    for (let member of decl.members) {\n      if (ts.isPropertyDeclaration(member)) {\n        let type2 = checker.getTypeAtLocation(member);\n        resolveTypeUse(type2, member);\n      }\n    }\n    table.structs.set(name, decl);\n  }\n  function isValidShaderType(type2, checker2) {\n    let symbol = type2.aliasSymbol || type2.getSymbol();\n    let name = checker2.typeToString(type2);\n    let bases = type2.getBaseTypes();\n    if (bases && bases.length > 0) {\n      for (let base of bases) {\n        if (!isValidShaderType(base, checker2))\n          return false;\n      }\n    }\n    if (TYPE_BLACKLIST$1.includes(symbol?.getName() ?? \"\")) {\n      return false;\n    }\n    return !TYPE_BLACKLIST$1.includes(name);\n  }\n  function resolveTypeUse(typeNode, context2, fullStruct = false) {\n    let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n    let name = checker.typeToString(typeNode);\n    if (!isValidShaderType(typeNode, checker)) {\n      throw new GLSLCompilationError(`Type '${name}' is not supported in shaders`, context2);\n    }\n    let decl = symbol?.getDeclarations()?.[0];\n    if (decl && ts.isClassDeclaration(decl)) {\n      resolveStruct(decl);\n    }\n    let typestr = checker.typeToString(typeNode);\n    if (typeNode.aliasTypeArguments)\n      for (let args of typeNode.aliasTypeArguments) {\n        resolveTypeUse(args, context2, typestr.startsWith(\"buffer<\"));\n      }\n  }\n  function resolvePropertyAccess(node2) {\n    let typeNode = checker.getTypeAtLocation(node2.expression);\n    let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n    checker.typeToString(typeNode);\n    if (!isValidShaderType(typeNode, checker)) {\n      throw new GLSLCompilationError(\n        `Type '${symbol?.getName()}' is not supported in shaders`,\n        node2\n      );\n    }\n    resolveTypeUse(typeNode, node2);\n    resolveTypeUse(checker.getTypeAtLocation(node2), node2);\n    let prop = node2.name.getText();\n    let decl = symbol?.getDeclarations()?.[0];\n    if (decl && ts.isClassDeclaration(decl)) {\n      let name2 = resolveStructName$1(decl);\n      let props = table.structsProps.get(name2) ?? /* @__PURE__ */ new Set();\n      props.add(prop);\n      table.structsProps.set(name2, props);\n    }\n  }\n  walkNodes$2(root, (node2) => {\n    if (ts.isCallExpression(node2)) {\n      let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = checker.getAliasedSymbol(exprSmybol);\n      }\n      if (exprSmybol) {\n        let funcDeclar = exprSmybol.getDeclarations()?.[0];\n        exprSmybol.valueDeclaration;\n        if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n          let signature = checker.getResolvedSignature(node2);\n          let mapping = findRealSignatureMappingToGLSL(checker, signature) ?? findSignatureMappingToGLSL(checker, exprSmybol);\n          if (mapping === null) {\n            let parentDeclar = closest(\n              node2,\n              (n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n) || ts.isArrowFunction(n)\n            );\n            if (parentDeclar && ts.isArrowFunction(parentDeclar)) {\n              let parentParentDeclar = closest(parentDeclar, (n) => ts.isCallExpression(n));\n              if (parentParentDeclar && ts.isCallExpression(parentParentDeclar)) {\n                let parentParentSymbol = checker.getSymbolAtLocation(parentParentDeclar.expression);\n                if (parentParentSymbol && parentParentSymbol.flags & ts.SymbolFlags.Alias) {\n                  parentParentSymbol = checker.getAliasedSymbol(parentParentSymbol);\n                }\n                if (parentParentSymbol) {\n                  let parentParentFuncDeclar = parentParentSymbol.getDeclarations()?.[0];\n                  if (parentParentFuncDeclar && (ts.isFunctionDeclaration(parentParentFuncDeclar) || ts.isMethodDeclaration(parentParentFuncDeclar))) {\n                    resolveFunction(parentParentFuncDeclar, funcDeclar, node2);\n                  }\n                }\n              }\n            } else if (parentDeclar && (ts.isFunctionDeclaration(parentDeclar) || ts.isMethodDeclaration(parentDeclar))) {\n              resolveFunction(parentDeclar, funcDeclar, node2);\n            } else {\n              resolveFunction(null, funcDeclar, node2);\n            }\n            if (!table.graph.has(resolveFunctionName$1(funcDeclar))) {\n              table.graph.set(resolveFunctionName$1(funcDeclar), []);\n              resolveDeps$1(checker, funcDeclar, table);\n            }\n            let sig = checker.getSignatureFromDeclaration(funcDeclar);\n            let returnType = checker.getReturnTypeOfSignature(sig);\n            resolveTypeUse(returnType, node2);\n          }\n        }\n      }\n    }\n    if (ts.isPropertyAccessExpression(node2)) {\n      resolvePropertyAccess(node2);\n    }\n    if (ts.isIdentifier(node2)) {\n      if (checker.getSymbolAtLocation(node2)) {\n        let decl = checker.getSymbolAtLocation(node2)?.declarations;\n        let type2 = checker.getTypeAtLocation(node2);\n        resolveTypeUse(type2, node2);\n        if (decl && ts.isVariableDeclaration(decl[0])) {\n          if (!isInSameScope$1(decl[0], node2) && decl[0].getSourceFile().fileName !== root.getSourceFile().fileName) {\n            if (isVariableDeclarationValue$1(checker, decl[0])) {\n              table.globals.set(node2.text.toString(), decl[0]);\n            }\n          }\n        }\n      }\n    }\n    if (ts.isVariableDeclaration(node2)) {\n      let type2 = checker.getTypeAtLocation(node2);\n      resolveTypeUse(type2, node2);\n    }\n  });\n  return table;\n}\nfunction resolveUniforms$1(checker, root) {\n  let uniforms = [];\n  walkNodesWithCalls$1(checker, root, (node2) => {\n    if (ts.isIdentifier(node2)) {\n      let decl = checker.getSymbolAtLocation(node2);\n      if (decl && decl.flags & ts.SymbolFlags.Alias) {\n        decl = checker.getAliasedSymbol(decl);\n      }\n      if (decl && decl.declarations && decl.declarations.length == 1) {\n        let declNode = decl.declarations[0];\n        if (declNode) {\n          if (isVariableDeclarationValue$1(checker, declNode)) {\n            if (!isInSameScope$1(declNode, node2) && !isInShader$2(declNode)) {\n              if (uniforms.findIndex((d) => d === declNode) == -1)\n                uniforms.push(declNode);\n            }\n          }\n        }\n      }\n    }\n  });\n  return uniforms;\n}\nfunction isVariableDeclarationValue$1(checker, node2) {\n  try {\n    if (ts.isVariableDeclaration(node2) || ts.isParameter(node2)) {\n      let type2 = checker.getTypeAtLocation(node2);\n      let calls = type2.getCallSignatures();\n      return calls.length == 0;\n    } else {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n}\nfunction isUniformable$1(checker, decl) {\n  let exprSmybol = checker.getSymbolAtLocation(decl);\n  if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n    exprSmybol = checker.getAliasedSymbol(exprSmybol);\n  }\n  if (exprSmybol) {\n    exprSmybol.getDeclarations()?.[0];\n  }\n  return ts.isVariableDeclaration(decl) || ts.isParameter(decl);\n}\nfunction addGLSLShader(key, root, checker, env2, isComputeShader = false, computeShaderSize = [1, 1, 1]) {\n  let deps = resolveDeps$1(checker, root);\n  let uniforms = resolveUniforms$1(checker, root);\n  let mapping = [...deps.graph.entries()].map(([k, v]) => v.map((d) => [k, d])).flat();\n  let sorted = [];\n  try {\n    sorted = toposort(mapping).reverse();\n  } catch (e) {\n    sorted = [];\n  }\n  let preFuncs = [];\n  for (let s of deps.structs.values()) {\n    let name = resolveStructName$1(s);\n    let hasAnyProperty = false;\n    let sp = deps.structsProps.get(name);\n    let members = s.members.map((m) => {\n      if (!ts.isPropertyDeclaration(m))\n        return \"\";\n      let type2 = checker.getTypeAtLocation(m);\n      let translated = translateType$1(checker, type2);\n      let preComment = \"\";\n      if (!sp || !sp.has(m.name.getText())) {\n        if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n          preComment = `// `;\n        }\n      }\n      if (preComment == \"\") {\n        hasAnyProperty = true;\n      }\n      return new SourceNode(\n        m.getStart(),\n        m.getEnd(),\n        `${preComment}  ${translated} ${m.name.getText()};\n`\n      );\n    });\n    let memberNames = s.members.map((m) => {\n      if (!ts.isPropertyDeclaration(m))\n        return \"\";\n      checker.getTypeAtLocation(m);\n      if (!sp || !sp.has(m.name.getText())) {\n        if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n          return \"\";\n        }\n      }\n      return m.name.getText();\n    }).filter((m) => m != \"\");\n    let memberParams = s.members.map((m) => {\n      if (!ts.isPropertyDeclaration(m))\n        return \"\";\n      let type2 = checker.getTypeAtLocation(m);\n      let translated = translateType$1(checker, type2);\n      if (!sp || !sp.has(m.name.getText())) {\n        if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n          return \"\";\n        }\n      }\n      return translated + \" \" + m.name.getText();\n    }).filter((m) => m != \"\");\n    if (!hasAnyProperty)\n      continue;\n    preFuncs.push(\n      new SourceNode(s.getStart(), s.getEnd(), [`struct ${name} {\n`, ...members, \"\\n};\\n\"])\n    );\n    if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n      preFuncs.push(\n        new SourceNode(s.getStart(), s.getEnd(), [\n          name + \" _make_struct_\" + name + \"(\",\n          memberParams.join(\", \") + \")\",\n          \" {\\n\",\n          name,\n          \" _s;\",\n          \"\",\n          ...memberNames.map((m) => `  _s.${m} = ${m};\n`),\n          \"  return _s;\\n\",\n          \"}\\n\"\n        ])\n      );\n    }\n  }\n  for (let u of uniforms) {\n    if (isUniformable$1(checker, u)) {\n      let _type = checker.getTypeAtLocation(u);\n      let translated = translateType$1(checker, _type);\n      let isGlobalVar = isRootNode$1(u);\n      let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${u.name.getText()}`;\n      if (translated.includes(\"[]\")) {\n        translated = translated.replace(/\\[\\]$/, ``);\n        preFuncs.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\n            \"uniform \",\n            \"int\",\n            \" \",\n            glslVarName,\n            \"_size;\\n\"\n          ])\n        );\n        glslVarName += `[%${glslVarName}_size%]`;\n      }\n      preFuncs.push(\n        new SourceNode(u.getStart(), u.getEnd(), [\"uniform \", translated, \" \", glslVarName, \";\\n\"])\n      );\n      if (translated == \"sampler2D\") {\n        preFuncs.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\"uniform vec2 \", glslVarName, \"_size;\\n\"])\n        );\n      }\n    }\n  }\n  for (let k of sorted) {\n    if (k == \"main\")\n      continue;\n    let v = deps.functions.get(k);\n    if (v) {\n      let sourceFile2 = v.getSourceFile();\n      let originalFile2 = env2.files.find((f) => f.path == sourceFile2.fileName);\n      preFuncs.push(\n        compile$2(\n          { parentFunction: v, checker, composed: deps.composed.get(k) ?? null },\n          v,\n          originalFile2?.mapping\n        )\n      );\n    }\n  }\n  let sourceFile = root.getSourceFile();\n  let originalFile = env2.files.find((f) => f.path == sourceFile?.fileName);\n  let main = compile$2(\n    {\n      checker\n    },\n    root,\n    originalFile.mapping\n  );\n  preFuncs.push(main);\n  let source = new SourceNode(root.getStart(), root.getEnd(), preFuncs);\n  let ss = { indexMapping: [], str: \"\" };\n  source.toString(ss);\n  let matches = glslHeader.match(/^([a-zA-Z_][a-zA-Z0-9_]+ [^\\(]+)/gm);\n  let finalShaderOutput = ss.str;\n  let headerSplits = [];\n  for (let i = 0; i < matches.length; i++) {\n    let index = glslHeader.indexOf(matches[i]);\n    let toIndex = i == matches.length - 1 ? glslHeader.length : glslHeader.indexOf(matches[i + 1]);\n    headerSplits.push(glslHeader.substring(index, toIndex));\n  }\n  let realHeader = \"\";\n  for (let i = 0; i < headerSplits.length; i++) {\n    let headerText = headerSplits[i];\n    let fnName = headerText.match(/^[a-zA-Z_][a-zA-Z0-9_]+ ([^\\(]+)/)?.[1];\n    if (fnName) {\n      if (finalShaderOutput.includes(fnName)) {\n        realHeader += headerText;\n      }\n    }\n  }\n  finalShaderOutput = realHeader + finalShaderOutput;\n  let output = new GLSLShader(`shd_${key}`, finalShaderOutput);\n  output.sourceMapping = ss.indexMapping;\n  for (let u of uniforms) {\n    if (isUniformable$1(checker, u)) {\n      let name = u.name.getText();\n      let isGlobalVar = isRootNode$1(u);\n      if (name) {\n        let filterProps = function(props) {\n          if (props && props.name) {\n            let sp = deps.structsProps.get(props.name);\n            let realStruct = deps.structs.get(props.name);\n            if (props.type == \"struct\" && realStruct) {\n              for (let f of Object.keys(props.fields)) {\n                if (!sp || !sp.has(f)) {\n                  delete props.fields[f];\n                } else {\n                  if (props.fields[f].type == \"struct\") {\n                    props.fields[f] = filterProps(props.fields[f]);\n                  }\n                }\n              }\n            }\n          }\n          return props;\n        };\n        let typeOut = getDeclarationType$1(checker, u);\n        let typeNode = checker.getTypeAtLocation(u);\n        let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n        let decl = symbol?.getDeclarations()?.[0];\n        if (decl && ts.isClassDeclaration(decl)) {\n          resolveStructName$1(decl);\n        }\n        if (isGlobalVar) {\n          output.globals[name] = {\n            fileName: getNodeSourceFileName$1(u),\n            structure: filterProps(translateType$1(checker, typeOut, true))\n          };\n        } else {\n          output.locals[name] = filterProps(translateType$1(checker, typeOut, true));\n        }\n      }\n    }\n  }\n  return output;\n}\nfunction getNodeSourceFileName$1(node2) {\n  let found = closest(node2, (n) => ts.isSourceFile(n));\n  if (found && ts.isSourceFile(found)) {\n    return found.fileName;\n  } else {\n    return \"\";\n  }\n}\nfunction walkNodes$2(node2, cb) {\n  cb(node2);\n  node2.forEachChild((n) => walkNodes$2(n, cb));\n}\nfunction walkNodesWithCalls$1(checker, node2, cb) {\n  cb(node2);\n  node2.forEachChild((n) => {\n    if (ts.isCallExpression(node2)) {\n      let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = checker.getAliasedSymbol(exprSmybol);\n      }\n      if (exprSmybol) {\n        let funcDeclar = exprSmybol.getDeclarations()?.[0];\n        if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n          let signature = checker.getResolvedSignature(node2);\n          let mapping = findRealSignatureMappingToGLSL(checker, signature) ?? findSignatureMappingToGLSL(checker, exprSmybol);\n          if (mapping === null) {\n            if (funcDeclar.body) {\n              walkNodesWithCalls$1(checker, funcDeclar.body, cb);\n            }\n          }\n        }\n      }\n    }\n    walkNodesWithCalls$1(checker, n, cb);\n  });\n}\nfunction findSignatureMappingToGLSL(checker, sym) {\n  let matcher = /=(?:glsl|univ)\\((.+)\\)$/g;\n  if (!sym.valueDeclaration)\n    return null;\n  let doc = ts.getJSDocTags(sym.valueDeclaration);\n  for (let d of doc) {\n    if (d.tagName.text !== \"shadeup\")\n      continue;\n    if (typeof d.comment === \"string\") {\n      let matches = matcher.exec(d.comment);\n      if (matches) {\n        return matches[1];\n      }\n    }\n  }\n  return null;\n}\nfunction findRealSignatureMappingToGLSL(checker, sig) {\n  let matcher = /=(?:glsl|univ)\\((.+)\\)$/g;\n  let doc = ts.getJSDocTags(sig.getDeclaration());\n  for (let d of doc) {\n    if (d.tagName.text !== \"shadeup\")\n      continue;\n    if (typeof d.comment === \"string\") {\n      let matches = matcher.exec(d.comment);\n      if (matches) {\n        return matches[1];\n      }\n    }\n  }\n  return null;\n}\nfunction removeDoubleUnderscores$1(str) {\n  return str.replace(/__/g, \"_ii\");\n}\nlet {\n  factory,\n  isArrayTypeNode,\n  isCallExpression,\n  isIdentifier,\n  isPropertyAccessChain,\n  isPropertyAccessExpression\n} = ts;\nconst TYPE_BLACKLIST = [\n  \"never\",\n  \"object\",\n  \"symbol\",\n  \"bigint\",\n  \"undefined\",\n  \"null\",\n  \"map\",\n  \"string\"\n];\nconst RESERVED_WORDS = [\n  \"this\",\n  \"target\",\n  \"attribute\",\n  \"sample\",\n  \"varying\",\n  \"uniform\",\n  \"layout\",\n  \"delete\"\n];\nfunction generateDefaultForType$1(checker, _type_node) {\n  let _type = checker.getTypeFromTypeNode(_type_node);\n  let name = (_type.aliasSymbol || _type.getSymbol())?.escapedName.toString();\n  switch (name) {\n    case \"int\":\n      return \"i32(0)\";\n    case \"float\":\n      return \"f32(0.0)\";\n    case \"float2\":\n      return \"vec2<f32>(0.0, 0.0)\";\n    case \"float3\":\n      return \"vec3<f32>(0.0, 0.0, 0.0)\";\n    case \"float4\":\n      return \"vec4<f32>(0.0, 0.0, 0.0, 0.0)\";\n    case \"int2\":\n      return \"vec2<i32>(0, 0)\";\n    case \"int3\":\n      return \"vec3<i32>(0, 0, 0)\";\n    case \"int4\":\n      return \"vec4<i32>(0, 0, 0, 0)\";\n    case \"uint\":\n      return \"u32(0)\";\n    case \"uint2\":\n      return \"vec2<u32>(0, 0)\";\n    case \"uint3\":\n      return \"vec3<u32>(0, 0, 0)\";\n    case \"uint4\":\n      return \"vec4<u32>(0, 0, 0, 0)\";\n    case \"float2x2\":\n      return \"mat2x2<f32>(0.0, 0.0, 0.0, 0.0)\";\n    case \"float3x3\":\n      return \"mat3x3<f32>(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"float4x4\":\n      return \"mat4x4<f32>(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"bool\":\n      return \"0\";\n    default:\n      let decl = _type.getSymbol()?.getDeclarations();\n      if (ts.isTupleTypeNode(_type_node)) {\n        let len = _type_node.elements.length;\n        let args = [];\n        let rootNode = _type_node.elements[0];\n        if (rootNode) {\n          for (let i = 0; i < len; i++) {\n            args.push(generateDefaultForType$1(checker, _type_node.elements[i]));\n          }\n          let rootType = checker.getTypeFromTypeNode(rootNode);\n          return translateType(checker, rootType) + `[${len}] {` + args.join(\", \") + \"}\";\n        } else {\n          return \"0\";\n        }\n      }\n      if (decl && decl.length > 0) {\n        let d = decl[0];\n        let structProps = [];\n        if (ts.isClassDeclaration(d)) {\n          let symd = _type.getSymbol();\n          symd?.members?.forEach((v, k) => {\n            let decl2 = v.valueDeclaration;\n            if (decl2 && ts.isPropertyDeclaration(decl2)) {\n              structProps.push([k?.toString() ?? \"\", decl2.type]);\n            }\n          });\n          let sortedPropsByKey = structProps.sort((a, b) => {\n            return a[0].localeCompare(b[0]);\n          });\n          let args = sortedPropsByKey.map((p) => {\n            return \"/* \" + p[0] + \": */ \" + generateDefaultForType$1(checker, p[1]) + \"\\n\";\n          });\n          return \"_make_struct_\" + resolveStructName(d) + \"(\\n\" + args.join(\", \") + \"\\n)\";\n        } else {\n          return \"0\";\n        }\n      } else {\n        return \"0\";\n      }\n  }\n}\nfunction getTypeFallback$1(checker, t) {\n  let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n  if (!n && t.intrinsicName)\n    n = t.intrinsicName;\n  if (typeof n !== \"string\") {\n    let props = t.getApparentProperties();\n    if (props.length > 0) {\n      for (let p of props) {\n        if (p.escapedName.toString() === \"_opaque_int\")\n          return \"int\";\n        if (p.escapedName.toString() === \"_opaque_float\")\n          return \"float\";\n        if (p.escapedName.toString() === \"_opaque_uint\")\n          return \"uint\";\n      }\n    }\n    let btype = t.getBaseTypes();\n    if (btype && btype.length > 0) {\n      for (let b of btype) {\n        let tn = getTypeFallback$1(checker, b);\n        if (tn)\n          return tn;\n      }\n      return null;\n    }\n  } else {\n    return n;\n  }\n}\nfunction followTypeReferences(t) {\n  if (t.flags & ts.TypeFlags.Object && t.objectFlags & ts.ObjectFlags.Reference) {\n    if (t.target === t) {\n      return t;\n    }\n    return followTypeReferences(t.target);\n  } else {\n    return t;\n  }\n}\nfunction getArrayTypeInfo(checker, t) {\n  let n = getTypeFallback$1(checker, t);\n  let originalType = t;\n  if (n === void 0) {\n    t = followTypeReferences(t);\n  }\n  let isArray = false;\n  let staticSize = -1;\n  let elementType = \"\";\n  if (n === \"Array\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n    let typeRef = originalType;\n    let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n    let translated = translateType(checker, args[0]);\n    if (tsutils.isTupleType(t)) {\n      staticSize = t.fixedLength;\n    }\n    checker.typeToString(typeRef);\n    isArray = true;\n    elementType = translated;\n  }\n  return {\n    isArray,\n    staticSize,\n    elementType\n  };\n}\nfunction translateType(checker, t, templateFormat = false, usedInsidePotentiallyExternalType = false) {\n  let n = getTypeFallback$1(checker, t);\n  let originalType = t;\n  if (n === void 0) {\n    t = followTypeReferences(t);\n  }\n  if (templateFormat) {\n    let name = n?.toString() ?? \"unknown\";\n    if (name === \"Array\" || name === \"array\" || name === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n      let typeRef = originalType;\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      return {\n        type: name == \"buffer\" ? \"buffer\" : \"array\",\n        element: translateType(checker, args[0], true),\n        staticSize: args.length\n      };\n    }\n    if (name == \"boolean\" || name == \"false\" || name == \"true\")\n      name = \"bool\";\n    if (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\") || name == \"bool\" || name == \"texture2d\" || name == \"texture3d\")\n      return { type: \"primitive\", name };\n    if (name == \"atomic\") {\n      let args = t.typeArguments || checker.getTypeArguments(t);\n      let translated = translateType(checker, args[0]);\n      return { type: \"primitive\", name, element: translated };\n    }\n    let symbol = t.aliasSymbol || t.getSymbol();\n    if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n      if (ts.isClassDeclaration(symbol.declarations[0])) {\n        let fields = [];\n        let decl = symbol.declarations[0];\n        for (let member of decl.members) {\n          if (ts.isPropertyDeclaration(member)) {\n            let name2 = member.name.getText();\n            let type2 = checker.getTypeFromTypeNode(member.type);\n            fields.push([name2, translateType(checker, type2, true)]);\n          }\n        }\n        return {\n          type: \"struct\",\n          name: resolveStructName(decl),\n          fields\n        };\n      } else {\n        return {\n          type: \"unknown\"\n        };\n      }\n    }\n  } else {\n    if (n === \"Array\" || n === \"array\" || n === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n      let typeRef = originalType;\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      let translated = translateType(checker, args[0]);\n      let typeInfo = getWGSLTypeInfo(translated);\n      let toStringed = checker.typeToString(typeRef);\n      if (n == \"buffer\") {\n        return `array<${translated}>`;\n      }\n      if (typeInfo.needsAlignment) {\n        translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n      }\n      if (toStringed.endsWith(\"[]\")) {\n        return \"array<\" + translated + \">\";\n      } else {\n        let arraySize = 0;\n        if (tsutils.isTupleType(t)) {\n          arraySize = t.fixedLength;\n        }\n        return \"array<\" + translated + \", \" + arraySize + \">\";\n      }\n    }\n    if (n === \"texture2d\")\n      return `sampler`;\n    if (n == \"atomic\") {\n      let args = t.typeArguments || checker.getTypeArguments(t);\n      let translated = translateType(checker, args[0]);\n      return `atomic<${translated}>`;\n    }\n    if (n === \"bool\")\n      return \"bool\";\n    if (n === \"boolean\")\n      return \"bool\";\n    if (n === \"uint8\")\n      return \"f32\";\n    if (n === \"float\")\n      return \"f32\";\n    if (n === \"float2\")\n      return \"vec2<f32>\";\n    if (n === \"float3\")\n      return \"vec3<f32>\";\n    if (n === \"float4\")\n      return \"vec4<f32>\";\n    if (n === \"int\")\n      return \"i32\";\n    if (n === \"int2\")\n      return \"vec2<i32>\";\n    if (n === \"int3\")\n      return \"vec3<i32>\";\n    if (n === \"int4\")\n      return \"vec4<i32>\";\n    if (n === \"uint\")\n      return \"u32\";\n    if (n === \"uint2\")\n      return \"vec2<u32>\";\n    if (n === \"uint3\")\n      return \"vec3<u32>\";\n    if (n === \"uint4\")\n      return \"vec4<u32>\";\n    if (n === \"float2x2\")\n      return \"mat2x2<f32>\";\n    if (n === \"float3x3\")\n      return \"mat3x3<f32>\";\n    if (n === \"float4x4\")\n      return \"mat4x4<f32>\";\n    if (n === \"void\")\n      return \"void\";\n    if (n === \"error\")\n      return \"void\";\n    if (t.isUnion()) {\n      let types2 = t.types.map((t2) => translateType(checker, t2));\n      for (let sub of types2) {\n        if (sub && sub !== \"void\" && sub !== \"undefined\")\n          return sub;\n      }\n    }\n    let symbol = t.aliasSymbol || t.getSymbol();\n    if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n      if (ts.isClassDeclaration(symbol.declarations[0])) {\n        return resolveStructName(symbol.declarations[0]);\n      } else {\n        return n?.toString() ?? \"void\";\n      }\n    } else {\n      return n?.toString() ?? \"void\";\n    }\n  }\n}\nfunction isTypeNameVector(name) {\n  if (name == \"float2\" || name == \"float3\" || name == \"float4\" || name == \"int2\" || name == \"int3\" || name == \"int4\" || name == \"uint2\" || name == \"uint3\" || name == \"uint4\") {\n    return true;\n  }\n  return false;\n}\nfunction getTypeNameVectorElementType(name) {\n  if (name == \"float\") {\n    return [\"float\", 1];\n  }\n  if (name == \"int\") {\n    return [\"int\", 1];\n  }\n  if (name == \"uint\") {\n    return [\"uint\", 1];\n  }\n  if (name.startsWith(\"float\")) {\n    return [\"float\", parseInt(name.substring(5))];\n  }\n  if (name.startsWith(\"int\")) {\n    return [\"int\", parseInt(name.substring(3))];\n  }\n  if (name.startsWith(\"uint\")) {\n    return [\"uint\", parseInt(name.substring(4))];\n  }\n  if (name.startsWith(\"f32\")) {\n    return [\"f32\", 1];\n  }\n  if (name.startsWith(\"i32\")) {\n    return [\"i32\", 1];\n  }\n  if (name.startsWith(\"u32\")) {\n    return [\"u32\", 1];\n  }\n  if (name.endsWith(\"<f32>\")) {\n    return [\"float\", parseInt(name.substring(3, 4))];\n  }\n  if (name.endsWith(\"<i32>\")) {\n    return [\"int\", parseInt(name.substring(3, 4))];\n  }\n  if (name.endsWith(\"<u32>\")) {\n    return [\"uint\", parseInt(name.substring(3, 4))];\n  }\n  return [\"\", 0];\n}\nfunction getTypeNameVectorElementTypeWGSL(name) {\n  if (name == \"f32\") {\n    return [\"f32\", 1];\n  }\n  if (name == \"i32\") {\n    return [\"i32\", 1];\n  }\n  if (name == \"u32\") {\n    return [\"u32\", 1];\n  }\n  if (name.endsWith(\"<f32>\")) {\n    return [\"f32\", parseInt(name.substring(3, 4))];\n  }\n  if (name.endsWith(\"<i32>\")) {\n    return [\"i32\", parseInt(name.substring(3, 4))];\n  }\n  if (name.endsWith(\"<u32>\")) {\n    return [\"u32\", parseInt(name.substring(3, 4))];\n  }\n  return [\"\", 0];\n}\nfunction isTranslatedTypeNameVectorOrScalar(name) {\n  if (name == \"float\" || name == \"int\" || name == \"uint\")\n    return true;\n  if (name.endsWith(\"<f32>\") || name.endsWith(\"<i32>\") || name.endsWith(\"<u32>\")) {\n    if (name.startsWith(\"vec2\") || name.startsWith(\"vec3\") || name.startsWith(\"vec4\")) {\n      return true;\n    }\n    return true;\n  }\n  return false;\n}\nfunction getWGSLTypeInfo(name) {\n  switch (name) {\n    case \"bool\":\n      return { type: \"bool\", length: 1, size: 1, needsAlignment: true, elementType: \"i32\" };\n    case \"u32\":\n      return {\n        type: \"integer\",\n        length: 1,\n        signed: false,\n        size: 4,\n        needsAlignment: true,\n        elementType: \"u32\"\n      };\n    case \"i32\":\n      return {\n        type: \"integer\",\n        length: 1,\n        signed: true,\n        size: 4,\n        needsAlignment: true,\n        elementType: \"i32\"\n      };\n    case \"f32\":\n      return { type: \"float\", length: 1, size: 4, needsAlignment: true, elementType: \"f32\" };\n    case \"vec2<f32>\":\n      return {\n        type: \"vector\",\n        length: 2,\n        element: \"float\",\n        size: 8,\n        needsAlignment: true,\n        elementType: \"f32\"\n      };\n    case \"vec3<f32>\":\n      return {\n        type: \"vector\",\n        length: 3,\n        element: \"float\",\n        size: 12,\n        needsAlignment: true,\n        elementType: \"f32\"\n      };\n    case \"vec4<f32>\":\n      return {\n        type: \"vector\",\n        length: 4,\n        element: \"float\",\n        size: 16,\n        needsAlignment: false,\n        elementType: \"f32\"\n      };\n    case \"vec2<i32>\":\n      return {\n        type: \"vector\",\n        length: 2,\n        signed: true,\n        element: \"integer\",\n        size: 8,\n        needsAlignment: true,\n        elementType: \"i32\"\n      };\n    case \"vec3<i32>\":\n      return {\n        type: \"vector\",\n        length: 3,\n        signed: true,\n        element: \"integer\",\n        size: 12,\n        needsAlignment: true,\n        elementType: \"i32\"\n      };\n    case \"vec4<i32>\":\n      return {\n        type: \"vector\",\n        length: 4,\n        signed: true,\n        element: \"integer\",\n        size: 16,\n        needsAlignment: false,\n        elementType: \"i32\"\n      };\n    case \"vec2<u32>\":\n      return {\n        type: \"vector\",\n        length: 2,\n        signed: false,\n        element: \"integer\",\n        size: 8,\n        needsAlignment: true,\n        elementType: \"u32\"\n      };\n    case \"vec3<u32>\":\n      return {\n        type: \"vector\",\n        length: 3,\n        signed: false,\n        element: \"integer\",\n        size: 12,\n        needsAlignment: true,\n        elementType: \"u32\"\n      };\n    case \"vec4<u32>\":\n      return {\n        type: \"vector\",\n        length: 4,\n        signed: false,\n        element: \"integer\",\n        size: 16,\n        needsAlignment: false,\n        elementType: \"u32\"\n      };\n    case \"mat2x2<f32>\":\n      return { type: \"matrix\", element: \"float\", size: 16, needsAlignment: false };\n    case \"mat3x3<f32>\":\n      return { type: \"matrix\", element: \"float\", size: 36, needsAlignment: false };\n    case \"mat4x4<f32>\":\n      return { type: \"matrix\", element: \"float\", size: 64, needsAlignment: false };\n    default:\n      return { type: \"unknown\", size: 0, needsAlignment: false };\n  }\n}\nfunction isVector(checker, t) {\n  let name = getTypeFallback$1(checker, t);\n  if (name) {\n    return isTypeNameVector(name);\n  }\n  return false;\n}\nfunction getVectorElementType(checker, t) {\n  let name = getTypeFallback$1(checker, t);\n  if (name) {\n    return getTypeNameVectorElementType(name);\n  }\n  return [\"\", 0];\n}\nfunction isNumeric(checker, t) {\n  let name = getTypeFallback$1(checker, t);\n  if (name && (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\"))) {\n    return true;\n  }\n  return false;\n}\nfunction escapeIdentifier(id) {\n  if (RESERVED_WORDS.includes(id)) {\n    return \"_\" + id;\n  }\n  return id.replaceAll(\"___\", \"_ii_\").replaceAll(\"__\", \"_i_\");\n}\nfunction isAssignableType(t) {\n  return !(t.startsWith(\"texture\") || t.startsWith(\"sampler\") || t.startsWith(\"buffer\"));\n}\nfunction isGLSLType(name) {\n  return name.startsWith(\"vec\") || name.startsWith(\"mat\") || name.startsWith(\"sampler\") || name.startsWith(\"texture\") || name == \"bool\" || name == \"f32\" || name == \"i32\" || name == \"void\";\n}\nfunction autoCastNumeric(value, input, expected, node2) {\n  let inputType = getTypeNameVectorElementTypeWGSL(input);\n  let expectedType = getTypeNameVectorElementTypeWGSL(expected);\n  if (inputType[0] !== \"\" && expectedType[0] !== \"\") {\n    if (inputType[0] != expectedType[0]) {\n      if (expectedType[1] == 1) {\n        if (typeof expectedType[0] == \"string\" && expectedType[0].startsWith(\"vector\")) {\n          return new SourceNode(value.startIndex, value.endIndex, [value]);\n        } else {\n          if (inputType[0] == \"u32\") {\n            throw new GLSLCompilationError(`Cannot cast uint to ${expectedType[0]}`, node2);\n          }\n          if (expectedType[0] == \"i32\")\n            ;\n          return new SourceNode(value.startIndex, value.endIndex, [\n            `${expectedType[0]}(`,\n            value,\n            `)`\n          ]);\n        }\n      } else {\n        if (inputType[0] == \"u32\") {\n          throw new GLSLCompilationError(`Cannot cast uint to ${expectedType[0]}`, node2);\n        }\n        return new SourceNode(value.startIndex, value.endIndex, [\n          `vec${expectedType[1]}<${expectedType[0]}>(`,\n          value,\n          `)`\n        ]);\n      }\n    }\n  }\n  return value;\n}\nfunction isUniformAccess(ctx, expr) {\n  if (isCallExpression(expr)) {\n    expr = expr.expression;\n  }\n  let id = null;\n  if (ts.isIdentifier(expr)) {\n    id = expr;\n  }\n  if (isPropertyAccessExpression(expr)) {\n    let chain = expr;\n    while (chain.expression) {\n      if (ts.isPropertyAccessExpression(chain.expression)) {\n        chain = chain.expression;\n      } else {\n        break;\n      }\n    }\n    id = chain.expression;\n  }\n  if (id) {\n    if (ts.isIdentifier(id)) {\n      let sym = ctx.checker.getSymbolAtLocation(id);\n      if (sym && sym.flags & ts.SymbolFlags.Alias) {\n        sym = ctx.checker.getAliasedSymbol(sym);\n      }\n      if (sym?.declarations?.length == 1) {\n        let decl = sym.declarations[0];\n        if (isUniformable(ctx.checker, decl)) {\n          if (isVariableDeclarationValue(ctx.checker, decl)) {\n            if (!isInSameScope(decl, id)) {\n              if (!isInShader$1(decl)) {\n                return true;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return false;\n}\nfunction accessWrap(ctx, expr, inner) {\n  if (isPropertyAccessExpression(expr)) {\n    let chain = expr;\n    while (chain.expression) {\n      if (ts.isPropertyAccessExpression(chain.expression)) {\n        chain = chain.expression;\n      } else {\n        break;\n      }\n    }\n    let id = chain.expression;\n    if (ts.isIdentifier(id)) {\n      let sym = ctx.checker.getSymbolAtLocation(id);\n      if (sym && sym.flags & ts.SymbolFlags.Alias) {\n        sym = ctx.checker.getAliasedSymbol(sym);\n      }\n      if (sym?.declarations?.length == 1) {\n        let decl = sym.declarations[0];\n        if (isUniformable(ctx.checker, decl)) {\n          if (isVariableDeclarationValue(ctx.checker, decl)) {\n            if (!isInSameScope(decl, chain.expression)) {\n              if (!isInShader$1(decl)) {\n                let outputType = ctx.checker.getTypeAtLocation(expr);\n                let isBooleanAccess = false;\n                if (isArrayType$1(outputType, ctx.checker)) {\n                  let typeRef = outputType;\n                  let args = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n                  let t = args[0];\n                  let n = getTypeFallback$1(ctx.checker, t);\n                  if (n == \"boolean\" || n == \"bool\") {\n                    isBooleanAccess = true;\n                  }\n                } else {\n                  let n = getTypeFallback$1(ctx.checker, outputType);\n                  if (n == \"boolean\" || n == \"bool\") {\n                    isBooleanAccess = true;\n                  }\n                }\n                if (isBooleanAccess) {\n                  return new SourceNode(inner.startIndex, inner.endIndex, [`((`, inner, `) == 1)`]);\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return inner;\n}\nfunction getVectorMask(num) {\n  let outMask = \"\";\n  let comps = [\"x\", \"y\", \"z\", \"w\"];\n  for (let i = 0; i < num; i++) {\n    outMask += comps[i];\n  }\n  return outMask;\n}\nfunction convertConciseBodyToBlock(body) {\n  if (ts.isBlock(body)) {\n    return body;\n  } else {\n    return ts.factory.createBlock([ts.factory.createReturnStatement(body)]);\n  }\n}\nfunction getRealReturnType(checker, call) {\n  let fnCallSignature = checker.getResolvedSignature(call);\n  return fnCallSignature.getReturnType();\n}\nfunction augmentParameter(checker, p) {\n  const type2 = checker.getTypeAtLocation(p);\n  const tt = translateType(checker, type2);\n  if (tt == \"sampler\") {\n    const args = checker.getTypeArguments(type2);\n    let innerType = \"f32\";\n    if (args && args.length > 0) {\n      let [et, _] = getVectorElementType(checker, args[0]);\n      innerType = {\n        float: \"f32\",\n        int: \"i32\",\n        uint: \"u32\"\n      }[et];\n    }\n    return [\n      new SourceNode(p.getStart(), p.getEnd(), [\n        p.name.getText() + \"_texture: texture_2d<\" + innerType + \">\"\n      ])\n    ];\n  }\n  return [];\n}\nfunction augmentArgument(ctx, arg) {\n  let type2 = ctx.checker.getTypeAtLocation(arg);\n  let tt = translateType(ctx.checker, type2);\n  if (tt == \"sampler\") {\n    let args = ctx.checker.getTypeArguments(type2);\n    if (args && args.length > 0) {\n      getVectorElementType(ctx.checker, args[0]);\n    }\n    return [new SourceNode(arg.getStart(), arg.getEnd(), [compile$1(ctx, arg), \"_texture\"])];\n  }\n  return [];\n}\nfunction compile$1(ctx, ast, originalMapping) {\n  function c2(ast2) {\n    if (!ast2) {\n      return s([]);\n    }\n    return compile$1(ctx, ast2);\n  }\n  function cplain(ast2) {\n    if (!ast2) {\n      return s([]);\n    }\n    return compile$1(\n      {\n        checker: ctx.checker,\n        parentFunction: ctx.parentFunction\n      },\n      ast2\n    );\n  }\n  function s(c22) {\n    if (originalMapping) {\n      let reverseMapped = lookupIndexMappingRange(originalMapping, ast.getStart(), ast.getEnd());\n      return new SourceNode(reverseMapped.start, reverseMapped.end, c22);\n    } else {\n      return new SourceNode(0, 0, c22);\n    }\n  }\n  function join(c22, sep) {\n    return c22.reduce((acc, cur) => {\n      if (acc.length === 0) {\n        return [cur];\n      }\n      return [...acc, sep, cur];\n    }, []);\n  }\n  function children() {\n    return ast.getChildren().map((child) => c2(child));\n  }\n  let prefixFunctions = [];\n  if (ctx.composed) {\n    if (ts.isMethodDeclaration(ast) || ts.isFunctionDeclaration(ast)) {\n      for (let [i, arg] of ctx.composed.arguments.entries()) {\n        if (ts.isArrowFunction(arg)) {\n          let paramFromIndex = ast.parameters[i];\n          let name = paramFromIndex.name.getText() + \"_composed_\" + arg.pos + \"_arg_\" + i;\n          let signature = ctx.checker.getSignatureFromDeclaration(arg);\n          let returnType = signature.getReturnType();\n          let vars = getClosureVars(ctx.checker, arg);\n          let vvv = vars.map((p) => {\n            let tt = translateType(ctx.checker, ctx.checker.getTypeAtLocation(p.declarations[0]));\n            return s([p.escapedName, isAssignableType(tt) ? \"_const\" : \"\", \": \", tt]);\n          });\n          let joins = join(\n            [\n              ...arg.parameters.map((p) => {\n                let aug = augmentParameter(ctx.checker, p);\n                return [cplain(p), ...aug];\n              }).flat(),\n              ...vvv\n            ],\n            \", \"\n          );\n          let returnStr = \" -> \" + translateType(ctx.checker, returnType);\n          if (returnStr == \" -> void\")\n            returnStr = \"\";\n          prefixFunctions.push(\n            s([\n              \"fn \",\n              name,\n              \"(\",\n              ...joins,\n              \")\",\n              returnStr,\n              \" {\\n\",\n              ...vars.filter((p) => {\n                let type2 = ctx.checker.getTypeAtLocation(p.declarations[0]);\n                let tt = translateType(ctx.checker, type2);\n                return isAssignableType(tt);\n              }).map((p) => {\n                return s([\n                  \"var \",\n                  p.escapedName.toString(),\n                  \" = \",\n                  p.escapedName.toString(),\n                  \"_const;\\n\"\n                ]);\n              }),\n              ...arg.parameters.filter((p) => {\n                let type2 = ctx.checker.getTypeAtLocation(p.type);\n                let tt = translateType(ctx.checker, type2);\n                return isAssignableType(tt);\n              }).map((p) => {\n                return s([\"var \", p.name.getText(), \" = \", p.name.getText(), \"_const;\\n\"]);\n              }),\n              ...convertConciseBodyToBlock(arg.body).statements.map((s2) => c2(s2)) ?? [],\n              \"\\n}\\n\\n\"\n            ])\n          );\n        }\n      }\n    }\n  }\n  function autoCastParameter(callExpr, argIndex) {\n    let signature = ctx.checker.getResolvedSignature(callExpr);\n    let params = signature.getParameters();\n    let param = params[argIndex];\n    let paramType = ctx.checker.getTypeOfSymbolAtLocation(param, callExpr);\n    let paramTypeString = translateType(ctx.checker, paramType);\n    let arg = callExpr.arguments[argIndex];\n    let argType = ctx.checker.getTypeAtLocation(arg);\n    let argTypeString = translateType(ctx.checker, argType);\n    if (paramTypeString !== argTypeString) {\n      return autoCastNumeric(c2(arg), argTypeString, paramTypeString, arg);\n    }\n    return s([c2(arg)]);\n  }\n  switch (ast.kind) {\n    case ts.SyntaxKind.FirstPunctuation:\n      return s([ast.getText()]);\n    case ts.SyntaxKind.SyntaxList:\n      return s(children());\n    case ts.SyntaxKind.SourceFile:\n      return s(children());\n    case ts.SyntaxKind.BreakStatement:\n      return s([\"break;\"]);\n    case ts.SyntaxKind.ContinueStatement:\n      return s([\"continue;\"]);\n    case ts.SyntaxKind.MethodDeclaration:\n      let fnDeclar = ast;\n      let fnName = resolveFunctionName(fnDeclar);\n      if (ctx.composed) {\n        fnName = fnName + \"_composed_\" + ctx.composed.pos;\n      }\n      let isStatic = false;\n      let signature = ctx.checker.getSignatureFromDeclaration(fnDeclar);\n      if (ts.canHaveModifiers(fnDeclar)) {\n        let mods = ts.getModifiers(fnDeclar);\n        if (mods) {\n          if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n            isStatic = true;\n          }\n        }\n      }\n      let returnType = signature.getReturnType();\n      let returnStr = \" -> \" + translateType(ctx.checker, returnType);\n      if (returnStr == \" -> void\")\n        returnStr = \"\";\n      return s([\n        ...prefixFunctions,\n        \"fn \",\n        fnName,\n        \"(\",\n        ...join(\n          [\n            ...isStatic ? [] : [\n              \"_this: \" + translateType(ctx.checker, ctx.checker.getTypeAtLocation(fnDeclar.parent))\n            ],\n            ...fnDeclar.parameters.filter((p) => {\n              let type22 = ctx.checker.getTypeAtLocation(p);\n              if (type22.getCallSignatures().length > 0) {\n                return false;\n              }\n              return true;\n            }).map((p) => {\n              const o = c2(p);\n              const aug = augmentParameter(ctx.checker, p);\n              return [o, ...aug];\n            }).flat()\n          ],\n          \", \"\n        ),\n        \")\",\n        returnStr,\n        \" {\\n\",\n        ...fnDeclar.parameters.filter((p) => {\n          let type22 = ctx.checker.getTypeAtLocation(p);\n          if (type22.getCallSignatures().length > 0) {\n            return false;\n          }\n          return true;\n        }).map(\n          (p) => s([\n            \"var \",\n            escapeIdentifier(p.name.getText()),\n            \" = \",\n            escapeIdentifier(p.name.getText()),\n            \"_const;\\n\"\n          ])\n        ),\n        ...fnDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n        \"\\n}\\n\\n\"\n      ]);\n    case ts.SyntaxKind.FunctionDeclaration:\n      let mthdDeclar = ast;\n      let mthdsignature = ctx.checker.getSignatureFromDeclaration(mthdDeclar);\n      let mthdreturnType = mthdsignature.getReturnType();\n      let mthdName = resolveFunctionName(mthdDeclar);\n      if (ctx.composed) {\n        mthdName = mthdName + \"_composed_\" + ctx.composed.pos;\n      }\n      let returnStrMethod = \" -> \" + translateType(ctx.checker, mthdreturnType);\n      if (returnStrMethod == \" -> void\")\n        returnStrMethod = \"\";\n      return s([\n        ...prefixFunctions,\n        \"fn \",\n        mthdName,\n        \"(\",\n        ...join(\n          mthdDeclar.parameters.filter((p) => {\n            let type22 = ctx.checker.getTypeAtLocation(p);\n            if (type22.getCallSignatures().length > 0) {\n              return false;\n            }\n            return true;\n          }).map((p) => {\n            const o = c2(p);\n            const aug = augmentParameter(ctx.checker, p);\n            return [o, ...aug];\n          }).flat(),\n          \", \"\n        ),\n        \")\",\n        returnStrMethod,\n        \" {\\n\",\n        ...mthdDeclar.parameters.filter((p) => {\n          let type22 = ctx.checker.getTypeAtLocation(p);\n          if (type22.getCallSignatures().length > 0) {\n            return false;\n          }\n          let tt2 = translateType(ctx.checker, type22);\n          return isAssignableType(tt2);\n        }).map(\n          (p) => s([\n            \"var \",\n            escapeIdentifier(p.name.getText()),\n            \" = \",\n            escapeIdentifier(p.name.getText()),\n            \"_const;\\n\"\n          ])\n        ),\n        ...mthdDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n        \"\\n}\\n\\n\"\n      ]);\n    case ts.SyntaxKind.ReturnStatement:\n      let ret = ast;\n      if (!ctx.parentFunction) {\n        if (ret.expression) {\n          return s([\"return \", c2(ret.expression), \";\\n\"]);\n        } else {\n          return s([\"return;\\n\"]);\n        }\n      } else {\n        let expectedReturnType = ctx.checker.getSignatureFromDeclaration(ctx.parentFunction).getReturnType();\n        let actualReturnType = ctx.checker.getTypeAtLocation(ret.expression);\n        if (ret.expression) {\n          let sss = s([\n            \"return \",\n            autoCastNumeric(\n              c2(ret.expression),\n              translateType(ctx.checker, actualReturnType),\n              translateType(ctx.checker, expectedReturnType),\n              ret.expression\n            ),\n            \";\\n\"\n          ]);\n          return sss;\n        } else {\n          return s([\"return;\\n\"]);\n        }\n      }\n    case ts.SyntaxKind.AsExpression:\n      let asExpr = ast;\n      return c2(asExpr.expression);\n    case ts.SyntaxKind.Parameter:\n      let param = ast;\n      if (ctx.composed) {\n        let indexOf2 = param.parent.parameters.indexOf(param);\n        let expr2 = ctx.composed.arguments[indexOf2];\n        if (expr2) {\n          if (ts.isArrowFunction(expr2)) {\n            let vars = getClosureVars(ctx.checker, expr2.body);\n            let closureVars = vars.map((v) => {\n              return s([\n                v.name,\n                \": \",\n                translateType(ctx.checker, ctx.checker.getTypeAtLocation(v.valueDeclaration))\n              ]);\n            });\n            return s(join(closureVars, \", \"));\n          }\n        }\n      }\n      const tt = translateType(ctx.checker, ctx.checker.getTypeAtLocation(param));\n      return s([\n        escapeIdentifier(param.name.getText()),\n        isAssignableType(tt) ? \"_const\" : \"\",\n        \": \",\n        tt\n      ]);\n    case ts.SyntaxKind.ArrowFunction:\n      let arrow = ast;\n      let body = convertConciseBodyToBlock(arrow.body);\n      let preMain = \"\";\n      if (ctx.isComputeShader) {\n        preMain = `\n@compute @workgroup_size(${ctx.computeSize[0]}, ${ctx.computeSize[1]}, ${ctx.computeSize[2]})`;\n      }\n      return s([\n        \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\" + preMain + \"\\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)\" + (ctx.isComputeShader ? \"\" : \"-> /*__SHADEUP_TEMPLATE_OUTPUT*/\") + \"{\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\\n\",\n        ...body.statements.filter((s2) => !ts.isFunctionDeclaration(s2)).map((s2) => c2(s2)),\n        \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\\n}\\n\"\n      ]);\n    case ts.SyntaxKind.VariableStatement:\n      let varStatement = ast;\n      return s([\n        ...join(\n          varStatement.declarationList.declarations.map((d) => c2(d)),\n          \", \"\n        ),\n        \";\\n\"\n      ]);\n    case ts.SyntaxKind.VariableDeclaration:\n      let varDecl = ast;\n      let type2 = ctx.checker.getTypeAtLocation(varDecl);\n      let fullText = varDecl.getSourceFile().getFullText();\n      let fullStart = varDecl.getFullStart();\n      let prefix = `// @workgroup\n `;\n      let mySelf = fullText.slice(fullStart - prefix.length, fullStart);\n      if (mySelf.includes(\"@workgroup\")) {\n        return s([]);\n      } else {\n        let translated = translateType(ctx.checker, type2);\n        if (translated.startsWith(\"array\")) {\n          translated = \"\";\n        }\n        if (isInShader$1(varDecl)) {\n          let arrType = ctx.checker.getTypeAtLocation(varDecl);\n          let typeInfo = getArrayTypeInfo(ctx.checker, arrType);\n          if (typeInfo.isArray) {\n            if (typeInfo.staticSize <= 0) {\n              throw new GLSLCompilationError(\n                \"Cannot declare an array without a static size in a shader\",\n                varDecl\n              );\n            }\n          }\n        }\n        let initializerVal = c2(varDecl.initializer);\n        if (translated) {\n          let leftType2 = type2;\n          let rightType2 = ctx.checker.getTypeAtLocation(varDecl.initializer);\n          if (isVector(ctx.checker, leftType2) && isVector(ctx.checker, rightType2)) {\n            let [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType2);\n            let [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType2);\n            if (leftElementType != rightElementType) {\n              if (leftElementType == \"float\" && rightElementType == \"int\") {\n                initializerVal = s([`vec${leftElementSize}f(`, initializerVal, \")\"]);\n              } else if (leftElementType == \"int\" && rightElementType == \"float\") {\n                initializerVal = s([`vec${leftElementSize}i(`, initializerVal, \")\"]);\n              }\n            }\n          }\n          if (isNumeric(ctx.checker, leftType2) && isNumeric(ctx.checker, rightType2)) {\n            let leftTypeStr = translateType(ctx.checker, leftType2);\n            let rightTypeStr = translateType(ctx.checker, rightType2);\n            if (leftTypeStr != rightTypeStr) {\n              initializerVal = s([\n                autoCastNumeric(initializerVal, rightTypeStr, leftTypeStr, varDecl.initializer)\n              ]);\n            }\n          }\n        }\n        if (translated == \"___atomic_compare_exchange_result\") {\n          translated = \"\";\n        }\n        return s([\n          \"var \",\n          escapeIdentifier(varDecl.name.getText()),\n          translated ? \": \" : \"\",\n          translated,\n          \" = \",\n          initializerVal\n        ]);\n      }\n    case ts.SyntaxKind.CallExpression:\n      let call = ast;\n      let exprSmybol = ctx.checker.getSymbolAtLocation(call.expression);\n      if (call.expression.getText() == \"Math.random\") {\n        return s([\"0.0\"]);\n      }\n      if (!exprSmybol) {\n        return s([\"/* TODO: Unknown symbol */\"]);\n      }\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = ctx.checker.getAliasedSymbol(exprSmybol);\n      }\n      let symName = exprSmybol?.getName() ?? call.expression.getText();\n      if (ts.isIdentifier(call.expression)) {\n        if (isUniformAccess(ctx, call.expression)) {\n          let typ = ctx.checker.getTypeAtLocation(call.expression);\n          if (typ.getSymbol().getName().startsWith(\"shader\") || typ.aliasSymbol && typ.aliasSymbol.getName() == \"shader\") {\n            console.log(\"Uniform access to shader\", typ.getSymbol().getName());\n          }\n        }\n      }\n      if (symName == \"__index\") {\n        let postfix2 = \"\";\n        let t2 = ctx.checker.getTypeAtLocation(\n          call.expression.expression\n        );\n        isUniformAccess(\n          ctx,\n          call.expression.expression\n        );\n        if (ts.isPropertyAccessExpression(call.expression)) {\n          let innerType = translateType(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(call.expression.expression)\n          );\n          let returnType2 = getRealReturnType(ctx.checker, call);\n          let vecOut = getVectorElementType(ctx.checker, returnType2);\n          let outMask = getVectorMask(vecOut[1]);\n          if (innerType == \"sampler\") {\n            if (ts.isCallExpression(call.expression.expression)) {\n              let callIndex = call.expression.expression;\n              return s([\n                \"textureLoad(\",\n                c2(callIndex.expression),\n                \"_texture, \",\n                ...join([...callIndex.arguments.map((a) => c2(a))], \",\"),\n                \", vec2<u32>(\",\n                c2(call.arguments[0]),\n                \"), 0).\" + outMask\n              ]);\n            } else {\n              return s([\n                \"textureLoad(\",\n                c2(call.expression.expression),\n                \"_texture, vec2<u32>(\",\n                c2(call.arguments[0]),\n                \"), 0).\" + outMask\n              ]);\n            }\n          }\n        }\n        let translatedOut = translateType(ctx.checker, ctx.checker.getTypeAtLocation(call));\n        if (isArrayType$1(t2, ctx.checker) && isUniformAccess(ctx, call.expression.expression) && !translatedOut.startsWith(\"mat\")) {\n          let typeRef = t2;\n          let args2 = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n          let translated = translateType(ctx.checker, args2[0]);\n          let typeInfo = getWGSLTypeInfo(translated);\n          if (typeInfo.needsAlignment) {\n            translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n          }\n          let lengths = {\n            1: \"x\",\n            2: \"xy\",\n            3: \"xyz\",\n            4: \"xyzw\"\n          };\n          if (typeInfo.type != \"unknown\") {\n            postfix2 = `.${lengths[typeInfo.length ?? 1]}`;\n          }\n        }\n        return accessWrap(\n          ctx,\n          call.expression.expression,\n          s([c2(call.expression), \"[\", c2(call.arguments[0]), \"]\", postfix2])\n        );\n      } else if (symName == \"attr\") {\n        let expr2 = call.expression;\n        if (ts.isPropertyAccessExpression(expr2)) {\n          let left2 = expr2.expression;\n          let leftName = ctx.checker.getTypeAtLocation(left2).getSymbol()?.getName() ?? \"\";\n          if (leftName == \"ShaderInput\") {\n            if (call.arguments.length >= 1) {\n              let arg1 = call.arguments[0];\n              if (ts.isCallExpression(arg1)) {\n                arg1 = arg1.arguments[0];\n              }\n              if (!ts.isNumericLiteral(arg1)) {\n                throw new GLSLCompilationError(\"Attribute index must be a number literal\", arg1);\n              }\n              let index = parseInt(arg1.getText());\n              let interpMode = \"perspective\";\n              if (call.arguments.length >= 2) {\n                let arg2 = call.arguments[1];\n                if (ts.isStringLiteral(arg2)) {\n                  interpMode = arg2.text;\n                }\n              }\n              let valType = \"\";\n              if (call.typeArguments.length == 1) {\n                valType = translateType(\n                  ctx.checker,\n                  ctx.checker.getTypeAtLocation(call.typeArguments[0])\n                );\n              }\n              ctx.addCustomAttribute(\"in\", index, valType, interpMode);\n              return s([\"_i_in.custom\", index.toString()]);\n            }\n          } else if (leftName == \"ShaderOutput\") {\n            if (call.arguments.length >= 2) {\n              let arg1 = call.arguments[0];\n              if (ts.isCallExpression(arg1)) {\n                arg1 = arg1.arguments[0];\n              }\n              if (!ts.isNumericLiteral(arg1)) {\n                throw new GLSLCompilationError(\"Attribute index must be a number literal\", arg1);\n              }\n              let index = parseInt(arg1.getText());\n              let interpMode = \"perspective\";\n              if (call.arguments.length >= 3) {\n                let arg2 = call.arguments[2];\n                if (ts.isStringLiteral(arg2)) {\n                  interpMode = arg2.text;\n                }\n              }\n              let valType = translateType(\n                ctx.checker,\n                ctx.checker.getTypeAtLocation(call.arguments[1])\n              );\n              ctx.addCustomAttribute(\"out\", index, valType, interpMode);\n              return s([\"_i_out.custom\", index.toString(), \" = \", c2(call.arguments[1])]);\n            }\n          }\n        }\n      } else if (symName == \"len\") {\n        let expr2 = call.expression;\n        if (ts.isPropertyAccessExpression(expr2)) {\n          let left2 = expr2.expression;\n          if (isUniformAccess(ctx, left2)) {\n            return s([\"_in_uniforms.\", c2(left2), \"_size\"]);\n          } else {\n            let arrType = ctx.checker.getTypeAtLocation(left2);\n            let typeInfo = getArrayTypeInfo(ctx.checker, arrType);\n            return s([typeInfo.staticSize.toString()]);\n          }\n        }\n      } else if (symName == \"min\" || symName == \"max\") {\n        if (call.arguments.length > 2) {\n          let args2 = call.arguments.map((a) => c2(a));\n          while (args2.length > 2) {\n            let left2 = args2.shift();\n            let right2 = args2.shift();\n            args2.unshift(s([symName, \"(\", left2, \",\", right2, \")\"]));\n          }\n          return s([symName, \"(\", ...join(args2, \",\"), \")\"]);\n        }\n      } else if (symName == \"clamp\") {\n        if (call.arguments.length == 3) {\n          let inType = ctx.checker.getTypeAtLocation(call.arguments[0]);\n          let vType = translateType(ctx.checker, inType);\n          let vTypeInfo = getWGSLTypeInfo(vType);\n          if (vTypeInfo.type == \"vector\") {\n            let minV = call.arguments[1];\n            let maxV = call.arguments[2];\n            let minType = ctx.checker.getTypeAtLocation(minV);\n            let maxType = ctx.checker.getTypeAtLocation(maxV);\n            let minTypeInfo = getWGSLTypeInfo(translateType(ctx.checker, minType));\n            let maxTypeInfo = getWGSLTypeInfo(translateType(ctx.checker, maxType));\n            if (minTypeInfo.type == \"vector\" && maxTypeInfo.type == \"vector\")\n              ;\n            else {\n              let minStr = c2(minV);\n              let maxStr = c2(maxV);\n              if (minTypeInfo.type != \"vector\") {\n                minStr = s([`vec${vTypeInfo.length}<${vTypeInfo.elementType}>(`, minStr, \")\"]);\n              }\n              if (maxTypeInfo.type != \"vector\") {\n                maxStr = s([`vec${vTypeInfo.length}<${vTypeInfo.elementType}>(`, maxStr, \")\"]);\n              }\n              return s([\"clamp(\", c2(call.arguments[0]), \",\", minStr, \",\", maxStr, \")\"]);\n            }\n          }\n        }\n      } else if (symName == \"atomic\") {\n        throw new GLSLCompilationError(\n          \"Atomics cannot be constructed in shaders, create them outside or in a workgroup\",\n          call.expression\n        );\n      } else if (symName == \"sample\") {\n        if (ts.isPropertyAccessExpression(call.expression)) {\n          let innerType = translateType(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(call.expression.expression)\n          );\n          if (innerType == \"sampler\") {\n            if (ts.isCallExpression(call.expression.expression)) {\n              let callIndex = call.expression.expression;\n              return s([\n                \"textureSample(\",\n                c2(callIndex.expression),\n                \"_texture, \",\n                c2(callIndex.expression),\n                \",\",\n                \"vec2(\",\n                c2(call.arguments[0]),\n                \"),\",\n                ...join([...callIndex.arguments.map((a) => c2(a))], \",\"),\n                \")\"\n              ]);\n            } else {\n              return s([\n                \"textureSample(\",\n                c2(call.expression.expression),\n                \"_texture, \",\n                c2(call.expression.expression),\n                \", vec2(\",\n                c2(call.arguments[0]),\n                \"))\"\n              ]);\n            }\n          }\n        }\n      } else if (symName == \"__index_assign\") {\n        let postfix2 = \"\";\n        if (ts.isPropertyAccessExpression(call.expression)) {\n          let innerType = translateType(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(call.expression.expression)\n          );\n          if (innerType == \"sampler\") {\n            if (ts.isCallExpression(call.expression.expression)) {\n              let callIndex = call.expression.expression;\n              return s([\n                \"textureStore(\",\n                c2(callIndex.expression),\n                \"_texture_write, \",\n                ...join([...callIndex.arguments.map((a) => c2(a))], \",\"),\n                \", vec2<i32>(\",\n                c2(call.arguments[0]),\n                \"), vec4(\",\n                autoCastParameter(call, 1),\n                \"))\"\n              ]);\n            } else {\n              return s([\n                \"textureStore(\",\n                c2(call.expression.expression),\n                \"_texture_write, vec2<i32>(\",\n                c2(call.arguments[0]),\n                \"), vec4(\",\n                autoCastParameter(call, 1),\n                \"))\"\n              ]);\n            }\n          }\n        }\n        ctx.checker.getTypeAtLocation(\n          call.expression.expression\n        );\n        return accessWrap(\n          ctx,\n          call.expression.expression,\n          s([\n            c2(call.expression.expression),\n            \"[\",\n            c2(call.arguments[0]),\n            \"]\",\n            postfix2,\n            \" = \",\n            autoCastParameter(call, 1)\n          ])\n        );\n      } else if (symName == \"eq\" && call.expression.getText() == \"__.eq\") {\n        let leftArg = call.arguments[0];\n        let rightArg = call.arguments[1];\n        let leftType2 = ctx.checker.getTypeAtLocation(leftArg);\n        let rightType2 = ctx.checker.getTypeAtLocation(rightArg);\n        let [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType2);\n        if (isVector(ctx.checker, leftType2) && isVector(ctx.checker, rightType2)) {\n          return s([\n            \"squash_bool_vec\",\n            leftElementSize.toString(),\n            \"(\",\n            c2(leftArg),\n            \" == \",\n            c2(rightArg),\n            \")\"\n          ]);\n        }\n      } else if (symName == \"rand\" && call.arguments.length == 0 && call.expression.getText() == \"rand\") {\n        throw new GLSLCompilationError(\n          \"rand() in shaders needs to be seeded, use rand(seed) instead\",\n          call\n        );\n      }\n      if (exprSmybol?.getName() == \"makeVector\" && exprSmybol.valueDeclaration) {\n        if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n          let exprSig2 = ctx.checker.getResolvedSignature(call);\n          if (exprSig2) {\n            let returnType2 = ctx.checker.getReturnTypeOfSignature(exprSig2);\n            let returnTypeStr = translateType(ctx.checker, returnType2);\n            let returnTypeInfo = getWGSLTypeInfo(returnTypeStr);\n            let callType = translateType(ctx.checker, returnType2);\n            let argStrs = [];\n            for (let [i, arg] of call.arguments.entries()) {\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let argTypeStr = translateType(ctx.checker, argType);\n              let argTypeInfo = getWGSLTypeInfo(argTypeStr);\n              let paramType = ctx.checker.getTypeAtLocation(\n                exprSig2.parameters[i].getDeclarations()[0]\n              );\n              let paramTypeStr = translateType(ctx.checker, paramType);\n              if (argTypeInfo.elementType !== returnTypeInfo.elementType) {\n                paramTypeStr = `vec${argTypeInfo.length}<${returnTypeInfo.elementType}>`;\n              }\n              argStrs.push(autoCastNumeric(c2(arg), argTypeStr, paramTypeStr, arg));\n            }\n            return s([callType, \"(\", ...join(argStrs, \", \"), \")\"]);\n          }\n        }\n      }\n      if (exprSmybol?.getName() == \"swizzle\" && exprSmybol.valueDeclaration) {\n        if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n          ctx.checker.getSignatureFromDeclaration(exprSmybol.valueDeclaration);\n          let arg = call.arguments[0];\n          let arg2 = call.arguments[1];\n          let propAccess = \"\";\n          if (ts.isStringLiteral(arg2)) {\n            propAccess = arg2.text;\n          }\n          let argType = ctx.checker.getTypeAtLocation(arg);\n          if (isVector(ctx.checker, argType)) {\n            if (call.arguments.length == 2) {\n              return s([c2(arg), \".\", propAccess]);\n            } else {\n              let t2 = s([\n                \"var tempVal_\",\n                call.getStart().toString(),\n                \" = \",\n                c2(call.arguments[2]),\n                \";\\n\"\n              ]);\n              let assigns = [];\n              for (let i = 0; i < propAccess.length; i++) {\n                let char = propAccess[i];\n                assigns.push(\n                  s([\n                    c2(arg),\n                    \".\",\n                    char,\n                    \" = \",\n                    \"tempVal_\",\n                    call.getStart().toString(),\n                    ...propAccess.length > 1 ? [\".\", char] : [],\n                    \";\\n\"\n                  ])\n                );\n              }\n              return s([t2, ...assigns]);\n            }\n          } else if (isNumeric(ctx.checker, argType)) {\n            let numericType = translateType(ctx.checker, argType);\n            return s([`shadeup_up_swizzle_${propAccess}_${numericType}(`, c2(arg), \")\"]);\n          } else {\n            return s([c2(arg), \".\", propAccess]);\n          }\n        }\n      }\n      let mutations = {\n        arguments: new Array(call.arguments.length)\n      };\n      for (let [i, arg] of call.arguments.entries()) {\n        mutations.arguments[i] = null;\n      }\n      if (exprSmybol?.getName() == \"max\" || exprSmybol?.getName() == \"min\") {\n        let exprSig2 = ctx.checker.getResolvedSignature(call);\n        if (exprSig2 && exprSig2.parameters.length == 2) {\n          let skip = false;\n          let unbalanced = false;\n          let singleArg = -1;\n          let targetLength = 0;\n          let targetType = \"\";\n          for (let [i, arg] of call.arguments.entries()) {\n            let argType = ctx.checker.getTypeAtLocation(arg);\n            let argTypeStr = translateType(ctx.checker, argType);\n            let argTypeInfo = getWGSLTypeInfo(argTypeStr);\n            if (argTypeInfo.length === 1) {\n              if (unbalanced) {\n                skip = true;\n              }\n              unbalanced = true;\n              singleArg = i;\n            }\n          }\n          for (let [i, arg] of call.arguments.entries()) {\n            let argType = ctx.checker.getTypeAtLocation(arg);\n            let argTypeStr = translateType(ctx.checker, argType);\n            let argTypeInfo = getWGSLTypeInfo(argTypeStr);\n            if (argTypeInfo.length !== 1) {\n              targetLength = argTypeInfo.length;\n              targetType = argTypeInfo.elementType;\n            }\n          }\n          if (!skip && unbalanced && singleArg !== -1) {\n            mutations.arguments[singleArg] = s([\n              `vec${targetLength}<${targetType}>(`,\n              c2(call.arguments[singleArg]),\n              `)`\n            ]);\n          }\n        }\n      }\n      let funcName = c2(call.expression);\n      let callArgs = [];\n      let preArgs = [];\n      let exprSig = ctx.checker.getResolvedSignature(call);\n      let exprDeclar = exprSig.getDeclaration();\n      if (exprDeclar) {\n        if (ts.isMethodDeclaration(exprDeclar)) {\n          let isStatic2 = false;\n          if (ts.canHaveModifiers(exprDeclar)) {\n            let mods = ts.getModifiers(exprDeclar);\n            if (mods) {\n              if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n                isStatic2 = true;\n              }\n            }\n          }\n          if (!isStatic2) {\n            if (ts.isPropertyAccessExpression(call.expression)) {\n              preArgs.push(c2(call.expression.expression));\n            }\n          }\n        }\n      }\n      exprSmybol.getName() + \"(\";\n      for (let [i, arg] of call.arguments.entries()) {\n        let argStr = c2(arg);\n        if (exprSig) {\n          let p = exprSig.getTypeParameterAtPosition(i);\n          if (p) {\n            let translatedBase = translateType(ctx.checker, p);\n            let translatedPass = translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n            if (isTranslatedTypeNameVectorOrScalar(translatedPass)) {\n              if (translatedBase != translatedPass && isGLSLType(translatedBase)) {\n                if (translatedBase == \"vector2\" || translatedBase == \"vector3\" || translatedBase == \"vector4\") {\n                  argStr = argStr;\n                } else {\n                  argStr = s([`${translatedBase}(`, argStr, `)`]);\n                }\n              }\n            }\n          } else {\n            translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n          }\n        }\n        if (ts.isArrowFunction(arg)) {\n          let arrow2 = arg;\n          let vars = getClosureVars(ctx.checker, arrow2.body);\n          if (vars.length > 0)\n            callArgs.push(vars.map((v) => v.escapedName).join(\", \"));\n        } else {\n          let augs = augmentArgument(ctx, arg);\n          if (augs.length > 0) {\n            argStr = s([argStr, \",\", ...join(augs, \",\")]);\n          }\n          callArgs.push(argStr);\n        }\n      }\n      const levelCalls = {\n        mix: true\n      };\n      const constructs = {\n        \"vec2<f32>\": true,\n        \"vec3<f32>\": true,\n        \"vec4<f32>\": true,\n        \"vec2<i32>\": true,\n        \"vec3<i32>\": true,\n        \"vec4<i32>\": true,\n        \"vec2<u32>\": true,\n        \"vec3<u32>\": true,\n        \"vec4<u32>\": true,\n        \"mat2x2<f32>\": true,\n        \"mat3x3<f32>\": true,\n        \"mat4x4<f32>\": true,\n        \"mat2x2<i32>\": true,\n        \"mat3x3<i32>\": true,\n        \"mat4x4<i32>\": true\n      };\n      if (exprSmybol) {\n        let mapping = findSignatureMappingToWGSL(ctx.checker, exprSmybol);\n        if (mapping !== null) {\n          let levelCastArguments = mapping.startsWith(\"!\") || (levelCalls[mapping] ?? false) || (constructs[mapping] ?? false);\n          if (levelCastArguments) {\n            let minType = \"\";\n            let noOp = false;\n            for (let arg of call.arguments) {\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let argTypeName = translateType(ctx.checker, argType);\n              if (!(argTypeName == \"f32\" || argTypeName.endsWith(\"<f32>\") || argTypeName == \"i32\" || argTypeName.endsWith(\"<i32>\"))) {\n                noOp = true;\n              }\n              if (minType == \"\") {\n                if (argTypeName == \"f32\" || argTypeName.endsWith(\"<f32>\")) {\n                  minType = \"f32\";\n                } else if (argTypeName == \"i32\" || argTypeName.endsWith(\"<i32>\")) {\n                  minType = \"i32\";\n                }\n              } else if (argTypeName == \"f32\" || minType.endsWith(\"<f32>\")) {\n                minType = \"f32\";\n              }\n            }\n            if (constructs[mapping]) {\n              noOp = false;\n              if (mapping.endsWith(\"<f32>\")) {\n                minType = \"f32\";\n              } else if (mapping.endsWith(\"<i32>\")) {\n                minType = \"i32\";\n              }\n            }\n            if (!noOp) {\n              for (let i = 0; i < callArgs.length; i++) {\n                let arg = call.arguments[i];\n                let argType = ctx.checker.getTypeAtLocation(arg);\n                let argTypeName = translateType(ctx.checker, argType);\n                let argTypeStripped = \"\";\n                if (argTypeName == \"f32\" || argTypeName.endsWith(\"<f32>\")) {\n                  argTypeStripped = \"f32\";\n                } else if (argTypeName == \"i32\" || argTypeName.endsWith(\"<i32>\")) {\n                  argTypeStripped = \"i32\";\n                }\n                if (argTypeStripped != minType) {\n                  if (argTypeName.startsWith(\"f32\") || argTypeName.startsWith(\"i32\")) {\n                    callArgs[i] = s([`${minType}(`, callArgs[i], `)`]);\n                  } else if (argTypeName.endsWith(\"<f32>\") || argTypeName.endsWith(\"<i32>\")) {\n                    let len = argTypeName.match(/\\d+/)?.[0];\n                    if (len === void 0) {\n                      throw new Error(\"Invalid type\");\n                    }\n                    callArgs[i] = s([`vec${len}<${minType}>(`, callArgs[i], `)`]);\n                  } else\n                    ;\n                }\n              }\n            }\n          } else {\n            let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n            sig = exprSig;\n            for (let i = 0; i < callArgs.length; i++) {\n              let arg = call.arguments[i];\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let paramType = ctx.checker.getTypeAtLocation(\n                sig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n              );\n              paramType = sig.getTypeParameterAtPosition(Math.min(i, sig.parameters.length - 1)) ?? paramType;\n              let carg = c2(arg);\n              let augs = augmentArgument(ctx, arg);\n              if (augs.length > 0) {\n                carg = s([carg, \",\", ...join(augs, \",\")]);\n              }\n              callArgs[i] = autoCastNumeric(\n                carg,\n                translateType(ctx.checker, argType),\n                translateType(ctx.checker, paramType),\n                arg\n              );\n            }\n          }\n          if (mapping.startsWith(\"!\")) {\n            let template = mapping.slice(1);\n            let outs = [];\n            let argCounter = 0;\n            let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n            for (let i = 0; i < callArgs.length; i++) {\n              let paramType = ctx.checker.getTypeAtLocation(\n                sig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n              );\n              template = template.replace(\n                \"`\" + argCounter + \"`\",\n                ctx.checker.typeToString(paramType)\n              );\n              argCounter++;\n            }\n            let result = template.split(\"$\");\n            for (let r of result) {\n              if (/^\\d+$/.test(r)) {\n                outs.push(callArgs[parseInt(r)]);\n              } else if (/^\\[\\d+\\]$/.test(r)) {\n                let templateType = translateType(\n                  ctx.checker,\n                  ctx.checker.getTypeAtLocation(call.typeArguments[parseInt(r.slice(1, -1))])\n                );\n                outs.push(templateType);\n              } else if (r == \"self\") {\n                if (call.expression.kind == ts.SyntaxKind.PropertyAccessExpression) {\n                  let propAccess = call.expression;\n                  outs.push(c2(propAccess.getChildAt(0)));\n                } else {\n                  outs.push(c2(call.expression));\n                }\n              } else {\n                outs.push(r);\n              }\n            }\n            return s(outs);\n          } else if (mapping.startsWith(\"#\")) {\n            let typeName = \"\";\n            if (call.arguments.length > 0) {\n              let firstArg = call.arguments[0];\n              let firstArgType = ctx.checker.getTypeAtLocation(firstArg);\n              typeName = ctx.checker.typeToString(firstArgType);\n            }\n            return s([\n              new SourceNode(call.expression.getStart(), call.expression.getEnd(), [\n                mapping.substring(1) + typeName\n              ]),\n              \"(\",\n              ...join([...preArgs, ...callArgs], \", \"),\n              \")\"\n            ]);\n          } else {\n            for (let [i, mutation] of mutations.arguments.entries()) {\n              if (mutation) {\n                callArgs[i] = mutation;\n              }\n            }\n            return s([\n              new SourceNode(call.expression.getStart(), call.expression.getEnd(), [mapping]),\n              \"(\",\n              ...join([...preArgs, ...callArgs], \", \"),\n              \")\"\n            ]);\n          }\n        } else {\n          let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n          for (let i = 0; i < callArgs.length; i++) {\n            let arg = call.arguments[i];\n            let argType = ctx.checker.getTypeAtLocation(arg);\n            let paramType = ctx.checker.getTypeAtLocation(sig.parameters[i].getDeclarations()[0]);\n            let carg = c2(arg);\n            let augs = augmentArgument(ctx, arg);\n            if (augs.length > 0) {\n              carg = s([carg, \",\", ...join(augs, \",\")]);\n            }\n            callArgs[i] = autoCastNumeric(\n              carg,\n              translateType(ctx.checker, argType),\n              translateType(ctx.checker, paramType),\n              arg\n            );\n          }\n        }\n        if (exprSmybol.declarations[0].parent) {\n          let param2 = exprSmybol.declarations[0];\n          if (ts.isParameter(param2))\n            ;\n        }\n        let funcDeclar = exprSmybol.valueDeclaration;\n        if (exprSmybol.declarations[0].parent) {\n          let param2 = exprSmybol.declarations[0];\n          if (ts.isParameter(param2)) {\n            let indexOf2 = param2.parent.parameters.indexOf(param2);\n            let additionalArgs = [];\n            if (ctx.composed) {\n              let realAnonymousFunc = ctx.composed.arguments[indexOf2];\n              if (ts.isArrowFunction(realAnonymousFunc)) {\n                let vars = getClosureVars(ctx.checker, realAnonymousFunc.body);\n                additionalArgs = vars.map((v) => v.escapedName);\n                callArgs.push(...additionalArgs);\n                return s([\n                  funcName,\n                  \"_composed_\",\n                  realAnonymousFunc.pos.toString(),\n                  \"_arg_\",\n                  indexOf2.toString(),\n                  \"(\",\n                  ...join([...preArgs, ...callArgs], \", \"),\n                  \")\"\n                ]);\n              }\n            }\n          }\n        }\n        if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n          funcName = new SourceNode(\n            call.expression.getStart(),\n            call.expression.getEnd(),\n            resolveFunctionName(funcDeclar)\n          );\n          let parentDeclar = closest(ast, (n3) => ts.isFunctionDeclaration(n3));\n          if (parentDeclar && ts.isFunctionDeclaration(parentDeclar))\n            ;\n          if (isComposedFunction(ctx.checker, funcDeclar)) {\n            return s([\n              funcName,\n              \"_composed_\",\n              call.pos.toString(),\n              \"(\",\n              ...join([...preArgs, ...callArgs], \", \"),\n              \")\"\n            ]);\n          }\n        }\n      }\n      for (let [i, mutation] of mutations.arguments.entries()) {\n        if (mutation) {\n          callArgs[i] = mutation;\n        }\n      }\n      return s([funcName, \"(\", ...join([...preArgs, ...callArgs], \", \"), \")\"]);\n    case ts.SyntaxKind.NewExpression:\n      let newExpr = ast;\n      let newExprSymbol = getSymbolAtLocationAndFollowAliases(ctx.checker, newExpr.expression);\n      let args = [];\n      if (newExpr.arguments?.length == 1 && ts.isObjectLiteralExpression(newExpr.arguments[0])) {\n        let object = newExpr.arguments[0];\n        let props = object.properties;\n        let sortedPropsByKey = [];\n        let structProps = [];\n        newExprSymbol?.members?.forEach((v, k) => {\n          let decl2 = v.valueDeclaration;\n          if (decl2 && ts.isPropertyDeclaration(decl2)) {\n            const typeStr = translateType(ctx.checker, ctx.checker.getTypeAtLocation(decl2));\n            if (typeStr.startsWith(\"atomic<\")) {\n              return;\n            }\n            structProps.push([k?.toString() ?? \"\", decl2.type]);\n          }\n        });\n        sortedPropsByKey = structProps.sort((a, b) => {\n          return a[0].localeCompare(b[0]);\n        });\n        args = [\n          ...sortedPropsByKey.map((p) => {\n            let prop2 = props.find((p2) => {\n              if (ts.isPropertyAssignment(p2)) {\n                return p2.name.getText() == p[0];\n              } else if (ts.isShorthandPropertyAssignment(p2)) {\n                return p2.name.getText() == p[0];\n              } else {\n                return false;\n              }\n            });\n            if (prop2) {\n              if (ts.isPropertyAssignment(prop2)) {\n                let propType = ctx.checker.getTypeAtLocation(p[1]);\n                let propValType = ctx.checker.getTypeAtLocation(prop2.initializer);\n                let propTypeStr = translateType(ctx.checker, propType);\n                let propValTypeStr = translateType(ctx.checker, propValType);\n                if (propTypeStr != propValTypeStr) {\n                  return s([\n                    \"/* \",\n                    p[0],\n                    \": */ \",\n                    autoCastNumeric(c2(prop2.initializer), propValTypeStr, propTypeStr, prop2),\n                    \"\\n\"\n                  ]);\n                } else {\n                  return s([\"/* \", p[0], \": */ \", c2(prop2.initializer), \"\\n\"]);\n                }\n              } else if (ts.isShorthandPropertyAssignment(prop2)) {\n                return s([\"/* \", p[0], \": */ \", c2(prop2.name), \"\\n\"]);\n              } else {\n                return s([\"/* \", c2(prop2), \": */ \", \"\\n\"]);\n              }\n            } else {\n              return s([\"/* \", p[0], \": */ \", generateDefaultForType$1(ctx.checker, p[1]), \"\\n\"]);\n            }\n          })\n        ];\n      }\n      let decl = ctx.checker.getTypeAtLocation(newExpr.expression).getSymbol()?.getDeclarations();\n      if (decl && ts.isClassDeclaration(decl[0])) {\n        return s([\"_make_struct_\", resolveStructName(decl[0]), \"(\\n\", ...join(args, \", \"), \"\\n)\"]);\n      } else {\n        return s([\"/*\", ...join(args, \", \"), \"*/\"]);\n      }\n    case ts.SyntaxKind.ExpressionStatement:\n      let expr = ast;\n      return s([c2(expr.expression), \";\\n\"]);\n    case ts.SyntaxKind.ObjectLiteralExpression:\n      let obj = ast;\n      return s([\n        \"{\",\n        ...join(\n          obj.properties.map((p) => {\n            if (ts.isPropertyAssignment(p)) {\n              return s([c2(p.name), \": \", c2(p.initializer)]);\n            } else if (ts.isShorthandPropertyAssignment(p)) {\n              return s([c2(p.name)]);\n            } else {\n              return s([\"/*\", c2(p), \"*/\"]);\n            }\n          }),\n          \", \"\n        ),\n        \"}\"\n      ]);\n    case ts.SyntaxKind.ConditionalExpression:\n      let cond = ast;\n      let left = c2(cond.whenTrue);\n      let right = c2(cond.whenFalse);\n      let leftType = ctx.checker.getTypeAtLocation(cond.whenTrue);\n      let rightType = ctx.checker.getTypeAtLocation(cond.whenFalse);\n      if (isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType) || isNumeric(ctx.checker, leftType) && isNumeric(ctx.checker, rightType)) {\n        let leftTypeStr = translateType(ctx.checker, leftType);\n        let rightTypeStr = translateType(ctx.checker, rightType);\n        let leftTypeInfo = getWGSLTypeInfo(leftTypeStr);\n        let rightTypeInfo = getWGSLTypeInfo(rightTypeStr);\n        if (leftTypeInfo.elementType == \"f32\") {\n          right = autoCastNumeric(\n            right,\n            translateType(ctx.checker, rightType),\n            translateType(ctx.checker, leftType),\n            cond\n          );\n        }\n        if (rightTypeInfo.elementType == \"f32\") {\n          left = autoCastNumeric(\n            left,\n            translateType(ctx.checker, leftType),\n            translateType(ctx.checker, rightType),\n            cond\n          );\n        }\n      }\n      return s([\"select(\", right, \", \", left, \", \", c2(cond.condition), \")\"]);\n    case ts.SyntaxKind.Identifier:\n      let id = ast;\n      if (ts.isIdentifier(id)) {\n        let sym = ctx.checker.getSymbolAtLocation(id);\n        if (sym && sym.flags & ts.SymbolFlags.Alias) {\n          sym = ctx.checker.getAliasedSymbol(sym);\n        }\n        if (sym?.declarations?.length == 1) {\n          let decl2 = sym.declarations[0];\n          if (isUniformable(ctx.checker, decl2)) {\n            if (isVariableDeclarationValue(ctx.checker, decl2)) {\n              if (!isInSameScope(decl2, ast)) {\n                if (!isInShader$1(decl2)) {\n                  if (ts.isBinaryExpression(ast.parent)) {\n                    if (ast.parent.left == ast) {\n                      throw new GLSLCompilationError(\n                        `Cannot assign to variable '${id.text.toString()}' because it is not declared in the shader`,\n                        ast\n                      );\n                    }\n                  }\n                  let _type = ctx.checker.getTypeAtLocation(decl2);\n                  let translated = translateType(ctx.checker, _type);\n                  let isGlobalVar = isRootNode(decl2);\n                  let glslVarName = `${!isSpecialUniformType(translated) ? \"_in_uniforms.\" : \"\"}_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${id.text.toString()}`;\n                  return s([glslVarName]);\n                } else {\n                  return s([escapeIdentifier(id.text.toString())]);\n                }\n              }\n            }\n          }\n        }\n        return s([escapeIdentifier(id.text.toString())]);\n      } else {\n        return c2(id.expression);\n      }\n    case ts.SyntaxKind.PropertyAccessExpression:\n      let prop = ast;\n      let isStaticMember = isStaticPropertyAccessExpression(ctx.checker, prop);\n      if (isStaticMember) {\n        return s([c2(prop.expression), \"_static_\", c2(prop.name)]);\n      } else {\n        let propName = prop.name.getText();\n        if (propName == \"__index\") {\n          return s([c2(prop.expression)]);\n        } else if (propName == \"size\") {\n          let innerType = translateType(\n            ctx.checker,\n            ctx.checker.getTypeAtLocation(prop.expression)\n          );\n          if (innerType == \"sampler\") {\n            return s([\"vec2<f32>(textureDimensions(\", c2(prop.expression), \"_texture))\"]);\n          }\n        } else {\n          return s([c2(prop.expression), \".\", c2(prop.name)]);\n        }\n      }\n    case ts.SyntaxKind.ThisKeyword:\n      return s([\"_this\"]);\n    case ts.SyntaxKind.FirstLiteralToken:\n      let lit = ast;\n      return s([lit.text]);\n    case ts.SyntaxKind.IfStatement:\n      let ifStmt = ast;\n      if (isIdentifier(ifStmt.expression)) {\n        if (ifStmt.expression.escapedText == \"PLATFORM_WEBGPU\") {\n          return s([c2(ifStmt.thenStatement)]);\n        }\n        if (ifStmt.expression.escapedText == \"PLATFORM_WEBGL\") {\n          if (ifStmt.elseStatement) {\n            return s([c2(ifStmt.elseStatement)]);\n          } else {\n            return s([\"\"]);\n          }\n        }\n      }\n      let addBraces = false;\n      if (!ts.isBlock(ifStmt.thenStatement)) {\n        addBraces = true;\n      }\n      return s([\n        \"if (\",\n        c2(ifStmt.expression),\n        `) ${addBraces ? \"{\" : \"\"}\n`,\n        c2(ifStmt.thenStatement),\n        `${addBraces ? \"}\" : \"\"}\n`,\n        ifStmt.elseStatement ? s([\"else \\n\", c2(ifStmt.elseStatement), \"\\n\"]) : s([\"\"])\n      ]);\n    case ts.SyntaxKind.TrueKeyword:\n      return s([\"true\"]);\n    case ts.SyntaxKind.FalseKeyword:\n      return s([\"false\"]);\n    case ts.SyntaxKind.PostfixUnaryExpression:\n      let post = ast;\n      return s([c2(post.operand), post.operator == ts.SyntaxKind.PlusPlusToken ? \"++\" : \"--\"]);\n    case ts.SyntaxKind.PlusPlusToken:\n      return s([\"++\"]);\n    case ts.SyntaxKind.MinusMinusToken:\n      return s([\"--\"]);\n    case ts.SyntaxKind.ParenthesizedExpression:\n      let paren = ast;\n      return s([\"(\", c2(paren.expression), \")\"]);\n    case ts.SyntaxKind.VariableDeclarationList:\n      let varDeclList = ast;\n      if (varDeclList.declarations.length > 0) {\n        for (let decl2 of varDeclList.declarations) {\n          let varDecl2 = decl2;\n          let type22 = ctx.checker.getTypeAtLocation(varDecl2);\n          let translated = translateType(ctx.checker, type22);\n          let postType = \": \" + translated;\n          if (translated == \"___atomic_compare_exchange_result\") {\n            postType = \"\";\n          }\n          return s([\"var \", varDecl2.name.getText(), postType, \" = \", c2(varDecl2.initializer)]);\n        }\n      } else {\n        return s([\"\"]);\n      }\n    case ts.SyntaxKind.ForStatement:\n      let forStmt = ast;\n      return s([\n        \"for (\",\n        c2(forStmt.initializer),\n        \";\",\n        c2(forStmt.condition),\n        \";\",\n        c2(forStmt.incrementor),\n        \")\",\n        c2(forStmt.statement)\n      ]);\n    case ts.SyntaxKind.BinaryExpression:\n      let bin = ast;\n      let binExprText = bin.operatorToken.getText();\n      if (binExprText == \"===\") {\n        binExprText = \"==\";\n      }\n      if (bin.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n        let leftType2 = ctx.checker.getTypeAtLocation(bin.left);\n        let rightType2 = ctx.checker.getTypeAtLocation(bin.right);\n        if (isVector(ctx.checker, leftType2) && isVector(ctx.checker, rightType2)) {\n          let [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType2);\n          let [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType2);\n          if (leftElementType != rightElementType) {\n            if (leftElementType == \"float\" && rightElementType == \"int\") {\n              return s([c2(bin.left), ` = vec${leftElementSize}f(`, c2(bin.right), \")\"]);\n            } else if (leftElementType == \"int\" && rightElementType == \"float\") {\n              return s([c2(bin.left), ` = vec${leftElementSize}i(`, c2(bin.right), \")\"]);\n            }\n          }\n        }\n        if (isNumeric(ctx.checker, leftType2) && isNumeric(ctx.checker, rightType2)) {\n          let leftTypeStr = translateType(ctx.checker, leftType2);\n          let rightTypeStr = translateType(ctx.checker, rightType2);\n          if (leftTypeStr != rightTypeStr) {\n            return s([\n              c2(bin.left),\n              ` = `,\n              autoCastNumeric(c2(bin.right), rightTypeStr, leftTypeStr, bin)\n            ]);\n          }\n        }\n        if (isUniformAccess(ctx, bin.left)) {\n          if (translateType(ctx.checker, ctx.checker.getTypeAtLocation(bin.left)) == \"bool\") {\n            return s([c2(bin.left), \" = select(0, 1, \", c2(bin.right), \")\"]);\n          }\n        }\n        return s([c2(bin.left), \" \", binExprText, \" \", c2(bin.right)]);\n      }\n      return s([c2(bin.left), \" \", binExprText, \" \", c2(bin.right)]);\n    case ts.SyntaxKind.StringLiteral:\n      return s([\"0\"]);\n    case ts.SyntaxKind.ArrayLiteralExpression:\n      let arr = ast;\n      return s([\n        \"array(\",\n        ...join(\n          arr.elements.map((e) => c2(e)),\n          \", \"\n        ),\n        \")\"\n      ]);\n    case ts.SyntaxKind.ElementAccessExpression:\n      let elem = ast;\n      let t = ctx.checker.getTypeAtLocation(elem.expression);\n      let n2 = getTypeFallback$1(ctx.checker, t);\n      let postfix = \"\";\n      if (n2 === \"Array\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n        let typeRef = t;\n        let args2 = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n        let translated = translateType(ctx.checker, args2[0]);\n        let typeInfo = getWGSLTypeInfo(translated);\n        args2.length;\n        if (typeInfo.needsAlignment) {\n          translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n        }\n        let lengths = {\n          1: \"x\",\n          2: \"xy\",\n          3: \"xyz\",\n          4: \"xyzw\"\n        };\n        postfix = `.${lengths[typeInfo.length ?? 1]}`;\n      }\n      return s([c2(elem.expression), \"[\", c2(elem.argumentExpression), \"]\", postfix]);\n    case ts.SyntaxKind.Block:\n      let block = ast;\n      return s([\n        \"{\\n\",\n        ...join(\n          block.statements.map((child) => c2(child)),\n          \";\"\n        ),\n        \"\\n}\"\n      ]);\n    case ts.SyntaxKind.TypeOfExpression:\n      return s([\"0\"]);\n    case ts.SyntaxKind.WhileStatement:\n      let whileStmt = ast;\n      return s([\"while (\", c2(whileStmt.expression), \") \", c2(whileStmt.statement)]);\n    default:\n      throw new GLSLCompilationError(`Invalid shader syntax '${ast.getText()}'`, ast);\n  }\n}\nfunction getClosureVars(checker, func) {\n  let result = [];\n  let recur = (node2) => {\n    if (node2.kind == ts.SyntaxKind.Identifier) {\n      let id = node2;\n      let symbol = checker.getSymbolAtLocation(id);\n      let declar = symbol.valueDeclaration;\n      if (isVariableDeclarationValue(checker, declar)) {\n        if (declar) {\n          if (!isInSameScope(declar, node2) && isInShader$1(declar)) {\n            result.push(symbol);\n          }\n        }\n      }\n    } else {\n      node2.forEachChild(recur);\n    }\n  };\n  recur(func);\n  return result;\n}\nfunction getDeclarationType(checker, node2) {\n  return node2.type ? checker.getTypeAtLocation(node2.type) : node2.initializer ? checker.getTypeAtLocation(node2.initializer) : checker.getTypeAtLocation(node2);\n}\nfunction isArrayType$1(type2, checker) {\n  return checker.isTupleType(type2) || checker.isArrayType(type2);\n}\nclass WGSLShader {\n  constructor(key, source) {\n    this.globals = [];\n    this.locals = [];\n    this.attributeInput = \"\";\n    this.attributeOutput = \"\";\n    this.key = key;\n    this.source = source;\n  }\n}\nfunction resolveFunctionName(f) {\n  if (ts.isMethodDeclaration(f)) {\n    let parentName = \"anon\";\n    if (f.parent && ts.isClassDeclaration(f.parent)) {\n      parentName = f.parent.name?.text ?? \"anon\";\n    }\n    return removeDoubleUnderscores(\n      `fn_${f.getSourceFile()?.fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\") ?? \"anon\"}_${f.getStart()}_${parentName}_static_${f.name.getText() ?? \"unknown\"}`\n    );\n  } else {\n    return removeDoubleUnderscores(\n      `fn_${f.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${f.getStart()}_${f.name?.text.replaceAll(\".\", \"_dot_\") ?? \"unknown\"}`\n    );\n  }\n}\nfunction resolveStructName(c2) {\n  if (c2.name?.text == \"ShaderInput\")\n    return \"ShaderInput\";\n  if (c2.name?.text == \"ShaderOutput\")\n    return \"ShaderOutput\";\n  return removeDoubleUnderscores(\n    `str_${c2.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${c2.getStart()}_${c2.name?.text ?? \"unknown\"}`.replaceAll(\"__\", \"_i_\")\n  );\n}\nfunction isInSameScope(node2, other) {\n  return closest(node2, (node22) => {\n    if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n      return true;\n    }\n    if (ts.isSourceFile(node22)) {\n      return true;\n    }\n  }) == closest(other, (node22) => {\n    if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n      return true;\n    }\n    if (ts.isSourceFile(node22)) {\n      return true;\n    }\n  });\n}\nfunction isInShader$1(node2) {\n  return closest(node2, (node22) => {\n    if (ts.isMethodDeclaration(node22) || ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n      if (hasShadeupDocTag(node22, \"shader\")) {\n        return true;\n      }\n    }\n    return false;\n  });\n}\nfunction isInRoot(node2) {\n  let c2 = closest(node2, (node22) => {\n    if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22) || ts.isSourceFile(node22)) {\n      return true;\n    }\n  });\n  return c2 ? ts.isSourceFile(c2) : false;\n}\nfunction isRootNode(node2) {\n  let parentRoot = closest(node2, (node22) => {\n    if (ts.isMethodDeclaration(node22) || ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n      return true;\n    }\n    if (ts.isSourceFile(node22)) {\n      return true;\n    }\n  });\n  return parentRoot && ts.isSourceFile(parentRoot);\n}\nfunction isComposedFunction(checker, func) {\n  let isComposed = false;\n  func.parameters.forEach((param) => {\n    let type2 = checker.getTypeAtLocation(param);\n    if (type2.getCallSignatures().length > 0) {\n      isComposed = true;\n    }\n  });\n  return isComposed;\n}\nfunction resolveDeps(checker, root, table = {\n  graph: /* @__PURE__ */ new Map(),\n  functions: /* @__PURE__ */ new Map(),\n  structs: /* @__PURE__ */ new Map(),\n  structsProps: /* @__PURE__ */ new Map(),\n  globals: /* @__PURE__ */ new Map(),\n  composed: /* @__PURE__ */ new Map()\n}) {\n  function resolveFunction(f1, f2, call) {\n    let n1 = f1 ? resolveFunctionName(f1) : \"main\";\n    let n2 = resolveFunctionName(f2);\n    if (f2.name?.getText() === \"__index\" || f2.name?.getText() === \"__index_assign\" || f2.name?.getText() === \"__index_assign_op\" || f2.name?.getText() === \"len\" || f2.name?.getText() === \"sample\" || f2.name?.getText() === \"atomic\" || hasShadeupDocTag(f2, \"noemit_gpu\"))\n      return;\n    if (isComposedFunction(checker, f2)) {\n      n2 = n2 + \"_composed_\" + call.pos;\n      table.composed.set(n2, call);\n    }\n    let deps = table.graph.get(n1) ?? [];\n    if (!deps.includes(n2))\n      deps.push(n2);\n    table.graph.set(n1, deps);\n    table.functions.set(n2, f2);\n  }\n  function resolveStruct(decl, fullStruct = false) {\n    let name = resolveStructName(decl);\n    if (decl.name?.text == \"atomic_internal\") {\n      return;\n    }\n    if (table.structs.has(name)) {\n      if (!fullStruct) {\n        return;\n      }\n    }\n    let props = table.structsProps.get(name) ?? /* @__PURE__ */ new Set();\n    for (let member of decl.members) {\n      if (ts.isPropertyDeclaration(member)) {\n        let type2 = checker.getTypeAtLocation(member);\n        resolveTypeUse(type2, member);\n        if (fullStruct) {\n          props.add(member.name.getText());\n        }\n      }\n    }\n    if (fullStruct) {\n      table.structsProps.set(name, props);\n    }\n    table.structs.set(name, decl);\n  }\n  function isValidShaderType(type2, checker2) {\n    let symbol = type2.aliasSymbol || type2.getSymbol();\n    let name = checker2.typeToString(type2);\n    let bases = type2.getBaseTypes();\n    if (bases && bases.length > 0) {\n      for (let base of bases) {\n        if (!isValidShaderType(base, checker2))\n          return false;\n      }\n    }\n    if (TYPE_BLACKLIST.includes(symbol?.getName() ?? \"\")) {\n      return false;\n    }\n    return !TYPE_BLACKLIST.includes(name);\n  }\n  function resolveTypeUse(typeNode, context2, fullStruct = false) {\n    let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n    if (TYPE_BLACKLIST.includes(symbol?.getName() ?? \"\")) {\n      throw new GLSLCompilationError(\n        `Type '${symbol?.getName()}' is not supported in shaders`,\n        context2\n      );\n    }\n    let decl = symbol?.getDeclarations()?.[0];\n    if (decl && ts.isClassDeclaration(decl)) {\n      resolveStruct(decl, fullStruct);\n    }\n    let typestr = checker.typeToString(typeNode);\n    if (typeNode.aliasTypeArguments)\n      for (let args of typeNode.aliasTypeArguments) {\n        resolveTypeUse(\n          args,\n          context2,\n          typestr.startsWith(\"buffer<\") || typestr.startsWith(\"buffer_internal<\")\n        );\n      }\n  }\n  function resolvePropertyAccess(node2) {\n    let typeNode = checker.getTypeAtLocation(node2.expression);\n    let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n    checker.typeToString(typeNode);\n    if (!isValidShaderType(typeNode, checker)) {\n      throw new GLSLCompilationError(\n        `Type '${symbol?.getName()}' is not supported in shaders`,\n        node2\n      );\n    }\n    let full = checker.getTypeAtLocation(node2).getCallSignatures().length > 0;\n    resolveTypeUse(typeNode, node2, full);\n    resolveTypeUse(checker.getTypeAtLocation(node2), node2);\n    let prop = node2.name.getText();\n    let decl = symbol?.getDeclarations()?.[0];\n    if (decl && ts.isClassDeclaration(decl)) {\n      let name2 = resolveStructName(decl);\n      let props = table.structsProps.get(name2) ?? /* @__PURE__ */ new Set();\n      props.add(prop);\n      table.structsProps.set(name2, props);\n    }\n  }\n  walkNodes$1(root, (node2) => {\n    if (ts.isCallExpression(node2)) {\n      let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = checker.getAliasedSymbol(exprSmybol);\n      }\n      if (exprSmybol) {\n        let funcDeclar = exprSmybol.getDeclarations()?.[0];\n        exprSmybol.valueDeclaration;\n        if (ts.isPropertyAccessExpression(node2.expression)) {\n          resolveTypeUse(\n            checker.getTypeAtLocation(node2.expression.expression),\n            node2.expression.expression\n          );\n        }\n        if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n          let mapping = findSignatureMappingToWGSL(checker, exprSmybol);\n          if (mapping === null) {\n            let parentDeclar = closest(\n              node2,\n              (n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n) || ts.isArrowFunction(n)\n            );\n            if (parentDeclar && ts.isArrowFunction(parentDeclar)) {\n              let parentParentDeclar = closest(parentDeclar, (n) => ts.isCallExpression(n));\n              if (parentParentDeclar && ts.isCallExpression(parentParentDeclar)) {\n                let parentParentSymbol = checker.getSymbolAtLocation(parentParentDeclar.expression);\n                if (parentParentSymbol && parentParentSymbol.flags & ts.SymbolFlags.Alias) {\n                  parentParentSymbol = checker.getAliasedSymbol(parentParentSymbol);\n                }\n                if (parentParentSymbol) {\n                  let parentParentFuncDeclar = parentParentSymbol.getDeclarations()?.[0];\n                  if (parentParentFuncDeclar && (ts.isFunctionDeclaration(parentParentFuncDeclar) || ts.isMethodDeclaration(parentParentFuncDeclar))) {\n                    resolveFunction(parentParentFuncDeclar, funcDeclar, node2);\n                  }\n                }\n              }\n            } else if (parentDeclar && (ts.isFunctionDeclaration(parentDeclar) || ts.isMethodDeclaration(parentDeclar))) {\n              resolveFunction(parentDeclar, funcDeclar, node2);\n            } else {\n              resolveFunction(null, funcDeclar, node2);\n            }\n            if (!table.graph.has(resolveFunctionName(funcDeclar))) {\n              table.graph.set(resolveFunctionName(funcDeclar), []);\n              resolveDeps(checker, funcDeclar, table);\n            }\n            let sig = checker.getSignatureFromDeclaration(funcDeclar);\n            let returnType = checker.getReturnTypeOfSignature(sig);\n            resolveTypeUse(returnType, node2);\n          }\n        }\n      }\n    }\n    if (ts.isNewExpression(node2)) {\n      resolveTypeUse(checker.getTypeAtLocation(node2), node2.expression, true);\n    }\n    if (ts.isPropertyAccessExpression(node2)) {\n      resolvePropertyAccess(node2);\n    }\n    if (ts.isIdentifier(node2)) {\n      let type2 = checker.getTypeAtLocation(node2);\n      resolveTypeUse(type2, node2);\n      if (checker.getSymbolAtLocation(node2)) {\n        let decl = checker.getSymbolAtLocation(node2)?.declarations;\n        if (decl && ts.isVariableDeclaration(decl[0])) {\n          if (!isInSameScope(decl[0], node2) && decl[0].getSourceFile().fileName !== root.getSourceFile().fileName) {\n            if (isVariableDeclarationValue(checker, decl[0])) {\n              table.globals.set(node2.text.toString(), decl[0]);\n            }\n          }\n        }\n      }\n    }\n    if (ts.isVariableDeclaration(node2)) {\n      let type2 = checker.getTypeAtLocation(node2);\n      resolveTypeUse(type2, node2);\n    }\n  });\n  return table;\n}\nfunction resolveUniforms(checker, root) {\n  let uniforms = [];\n  walkNodesWithCalls(checker, root, (node2) => {\n    if (ts.isIdentifier(node2)) {\n      let decl = checker.getSymbolAtLocation(node2);\n      if (decl && decl.flags & ts.SymbolFlags.Alias) {\n        decl = checker.getAliasedSymbol(decl);\n      }\n      if (decl && decl.declarations && decl.declarations.length == 1) {\n        let declNode = decl.declarations[0];\n        if (declNode) {\n          if (isVariableDeclarationValue(checker, declNode)) {\n            if (!isInSameScope(declNode, node2) && !isInShader$1(declNode)) {\n              let indexAssign = false;\n              let indexRead = false;\n              let sampler = false;\n              let parent = node2.parent;\n              if (parent && ts.isPropertyAccessExpression(parent)) {\n                if (parent.expression == node2) {\n                  if (parent.name.getText() == \"__index_assign\") {\n                    indexAssign = true;\n                  }\n                  if (parent.name.getText() == \"__index\") {\n                    indexRead = true;\n                    if (parent.parent && parent.parent.parent && ts.isPropertyAccessExpression(parent.parent.parent)) {\n                      if (parent.parent.parent.parent && ts.isBinaryExpression(parent.parent.parent.parent) && parent.parent.parent.parent.left == parent.parent.parent) {\n                        if (parent.parent.parent.parent.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n                          indexAssign = true;\n                        }\n                      }\n                      if (parent.parent.parent.parent && ts.isPropertyAccessExpression(parent.parent.parent.parent)) {\n                        let propType = checker.getTypeAtLocation(parent.parent.parent);\n                        let translatedPropType = translateType(checker, propType);\n                        if (translatedPropType.startsWith(\"atomic<\")) {\n                          if (parent.parent.parent.parent.name.getText() != \"read\") {\n                            indexAssign = true;\n                          } else {\n                            indexRead = true;\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (parent.name.getText() == \"sample\") {\n                    sampler = true;\n                  }\n                }\n              }\n              let idx = uniforms.findIndex((d) => d.declaration === declNode);\n              if (idx == -1) {\n                let translated = translateType(checker, checker.getTypeAtLocation(declNode));\n                if (translated.includes(\"atomic<\")) {\n                  indexAssign = true;\n                }\n                uniforms.push({\n                  declaration: declNode,\n                  usesIndexAssign: indexAssign,\n                  usesIndexRead: indexRead,\n                  usesSampler: sampler\n                });\n              } else {\n                uniforms[idx].usesIndexAssign = uniforms[idx].usesIndexAssign || indexAssign;\n                uniforms[idx].usesIndexRead = uniforms[idx].usesIndexRead || indexRead;\n                uniforms[idx].usesSampler = uniforms[idx].usesSampler || sampler;\n              }\n            }\n          }\n        }\n      }\n    }\n  });\n  return uniforms;\n}\nfunction isVariableDeclarationValue(checker, node2) {\n  try {\n    if (ts.isVariableDeclaration(node2) || ts.isParameter(node2)) {\n      let type2 = checker.getTypeAtLocation(node2);\n      let calls = type2.getCallSignatures();\n      if (calls.length != 0) {\n        if (type2.aliasSymbol) {\n          if (type2.aliasSymbol.getName() == \"shader\") {\n            return true;\n          }\n        }\n      }\n      return calls.length == 0;\n    } else {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n}\nfunction isUniformable(checker, decl) {\n  let exprSmybol = checker.getSymbolAtLocation(decl);\n  if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n    exprSmybol = checker.getAliasedSymbol(exprSmybol);\n  }\n  if (exprSmybol) {\n    exprSmybol.getDeclarations()?.[0];\n  }\n  return ts.isVariableDeclaration(decl) || ts.isParameter(decl);\n}\nfunction isValidStructType(checker, type2) {\n  let t = translateType(checker, type2);\n  return t != \"sampler\";\n}\nfunction addWGSLShader(key, root, checker, env2, isComputeShader = false, computeShaderSize = [1, 1, 1]) {\n  let deps = resolveDeps(checker, root);\n  let uniforms = resolveUniforms(checker, root);\n  let mapping = [...deps.graph.entries()].map(([k, v]) => v.map((d) => [k, d])).flat();\n  let sorted = [];\n  try {\n    sorted = toposort(mapping).reverse();\n  } catch (e) {\n    sorted = [];\n  }\n  let preFuncs = [];\n  for (let s of deps.structs.values()) {\n    let name = resolveStructName(s);\n    let hasAnyProperty = false;\n    let sp = deps.structsProps.get(name);\n    let members = s.members.map((m) => {\n      if (!ts.isPropertyDeclaration(m))\n        return \"\";\n      let type2 = checker.getTypeAtLocation(m);\n      let translated = translateType(checker, type2);\n      if (translated == \"bool\") {\n        translated = \"i32\";\n      }\n      let preComment = \"\";\n      if (!sp || !sp.has(m.name.getText())) {\n        if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n          preComment = `// `;\n        }\n      }\n      if (!isValidStructType(checker, type2)) {\n        preComment = `// `;\n      }\n      if (preComment == \"\") {\n        hasAnyProperty = true;\n      }\n      return new SourceNode(\n        m.getStart(),\n        m.getEnd(),\n        `${preComment} ${isAlignable(translated) ? \"@align(16) \" : \"\"} ${escapeIdentifier(\n          m.name.getText()\n        )}: ${translated},\n`\n      );\n    });\n    s.members.map((m) => {\n      if (!ts.isPropertyDeclaration(m))\n        return \"\";\n      let type2 = checker.getTypeAtLocation(m);\n      let translated = translateType(checker, type2);\n      if (translated == \"bool\") {\n        translated = \"i32\";\n      }\n      let preComment = \"\";\n      if (!sp || !sp.has(m.name.getText())) {\n        if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n          preComment = `// `;\n        }\n      }\n      if (preComment == \"\") {\n        hasAnyProperty = true;\n      }\n      return new SourceNode(\n        m.getStart(),\n        m.getEnd(),\n        `${preComment} ${escapeIdentifier(m.name.getText())}: ${translated},\n`\n      );\n    });\n    let hasAtomic = false;\n    let memberNames = s.members.map((m) => {\n      if (!ts.isPropertyDeclaration(m))\n        return [\"\", \"\"];\n      let type2 = checker.getTypeAtLocation(m);\n      let translated = translateType(checker, type2);\n      if (!sp || !sp.has(m.name.getText())) {\n        if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n          return [\"\", \"\"];\n        }\n      }\n      if (translated.startsWith(\"atomic<\")) {\n        hasAtomic = true;\n      }\n      return [escapeIdentifier(m.name.getText()), translated, m];\n    }).filter((m) => m[0] != \"\").filter((m) => {\n      return isValidStructType(checker, checker.getTypeAtLocation(m[2]));\n    }).sort((a, b) => {\n      return a[0].localeCompare(b[0]);\n    });\n    if (!hasAnyProperty)\n      continue;\n    if (name == \"ShaderInput\" || name == \"ShaderOutput\") {\n      members.push(new SourceNode(s.getStart(), s.getEnd(), [\"// %SHADER_\" + name + \"%\"]));\n    }\n    preFuncs.push(\n      new SourceNode(s.getStart(), s.getEnd(), [`struct ${name} {\n`, ...members, \"\\n};\\n\"])\n    );\n    if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n      if (!hasAtomic) {\n        preFuncs.push(\n          new SourceNode(s.getStart(), s.getEnd(), [\n            \"fn _make_struct_\" + name + \"(\",\n            ...memberNames.map((m) => {\n              return `  ${m[0]}: ${m[1]},`;\n            }),\n            \") -> \",\n            name,\n            \" {\\n\",\n            \"var _s: \",\n            name,\n            \";\\n\",\n            ...memberNames.map((m) => {\n              if (m[1] == \"bool\") {\n                return `  _s.${m[0]} = select(0, 1, ${m[0]});\n`;\n              } else {\n                return `  _s.${m[0]} = ${m[0]};\n`;\n              }\n            }),\n            \"\\nreturn _s; \\n}\\n\"\n          ])\n        );\n      }\n    }\n  }\n  let specialUniforms = [];\n  preFuncs.push(\n    new SourceNode(0, 0, [\"struct _InUniformsStruct {\\n/*SHADEUP_UNIFORM_STRUCT_START*/\\n\"])\n  );\n  let localStrs = [];\n  let globalStrs = [];\n  let workgroupVars = [];\n  let checkDecl = (node2) => {\n    let fullText = node2.getSourceFile().getFullText();\n    let fullStart = node2.getFullStart();\n    let prefix = `// @workgroup\n `;\n    let mySelf = fullText.slice(fullStart - prefix.length, fullStart);\n    if (mySelf.includes(\"@workgroup\")) {\n      workgroupVars.push(node2);\n    }\n  };\n  if (ts.isArrowFunction(root)) {\n    ts.forEachChild(root.body, (node2) => {\n      if (ts.isVariableDeclaration(node2) || ts.isVariableStatement(node2) || ts.isVariableDeclarationList) {\n        if (ts.isVariableDeclaration(node2)) {\n          checkDecl(node2);\n        } else if (ts.isVariableStatement(node2)) {\n          node2.declarationList.declarations.forEach((d) => {\n            checkDecl(d);\n          });\n        } else if (ts.isVariableDeclarationList(node2)) {\n          for (let d of node2.declarations) {\n            checkDecl(d);\n          }\n        }\n      }\n    });\n  }\n  let globalUnis = [];\n  let localUnis = [];\n  for (let uniformData of uniforms) {\n    let u = uniformData.declaration;\n    if (isUniformable(checker, u)) {\n      let _type = checker.getTypeAtLocation(u);\n      let translated = translateType(checker, _type);\n      let isGlobalVar = isRootNode(u);\n      let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${u.name.getText()}`;\n      let isSpecial = isSpecialUniformType(translated);\n      let pushTo = isGlobalVar ? globalStrs : localStrs;\n      if (translated.startsWith(\"array\")) {\n        pushTo.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\"@align(16) \", glslVarName, \"_size: i32,\\n\"])\n        );\n      }\n      if (translated.startsWith(\"atomic\")) {\n        pushTo.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\"@align(16) \", glslVarName, \"_dummy: u32,\\n\"])\n        );\n      }\n      if (translated == \"sampler\") {\n        pushTo.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\n            \"@align(16) \",\n            glslVarName,\n            \"_size: vec2<f32>,\\n\"\n          ])\n        );\n      }\n      if (isSpecial) {\n        if (isGlobalVar) {\n          globalUnis.push(uniformData);\n        } else {\n          localUnis.push(uniformData);\n        }\n      } else {\n        pushTo.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\n            (isAlignable(translated) ? \"@align(16) \" : \"\") + glslVarName,\n            \": \",\n            translated,\n            \",\\n\"\n          ])\n        );\n      }\n    }\n  }\n  specialUniforms.push(...localUnis, ...globalUnis);\n  if (localStrs.length == 0 && globalStrs.length == 0) {\n    preFuncs.push(new SourceNode(0, 0, [\"\", \"dummy\", \": vec4<f32>,\\n\"]));\n  } else {\n    preFuncs = [...preFuncs, ...localStrs, ...globalStrs];\n  }\n  preFuncs.push(new SourceNode(0, 0, [\"};\\n\"]));\n  preFuncs.push(\n    new SourceNode(0, 0, [\n      \"@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\\n\"\n    ])\n  );\n  let specialUniformsCounter = 2;\n  for (let uniformData of specialUniforms) {\n    let u = uniformData.declaration;\n    if (isUniformable(checker, u)) {\n      let _type = checker.getTypeAtLocation(u);\n      let translated = translateType(checker, _type, false, true);\n      let isGlobalVar = isRootNode(u);\n      let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${u.name.getText()}`;\n      if (translated == \"sampler\" || translated.startsWith(\"array<sampler\")) {\n        let typeArgs = checker.getTypeArguments(_type);\n        if (translated.startsWith(\"array<sampler\")) {\n          typeArgs = checker.getTypeArguments(typeArgs[0]);\n        }\n        let innerTranslated = translateType(checker, typeArgs[0]);\n        let vecRegex = /vec\\d<([^>]+)>/g;\n        innerTranslated = innerTranslated.replace(vecRegex, \"$1\");\n        let textureKind = \"texture_2d\";\n        let textureKindStorage = \"texture_storage_2d\";\n        if (isArrayType$1(_type, checker)) {\n          textureKind = \"texture_2d_array\";\n          textureKindStorage = \"texture_storage_2d_array\";\n        }\n        if (translated.startsWith(\"array<sampler\")) {\n          translated = \"sampler\";\n        }\n        if (uniformData.usesSampler && uniformData.usesIndexAssign) {\n          preFuncs.push(\n            new SourceNode(0, 0, [\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\n`,\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 1}) var ${glslVarName}: ${translated};\n`,\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 2}) var ${glslVarName}_texture_write: ${textureKindStorage}<%WRITE_TYPE_${glslVarName}%, write>;\n`\n            ])\n          );\n          specialUniformsCounter += 2;\n        } else if (uniformData.usesIndexAssign) {\n          preFuncs.push(\n            new SourceNode(0, 0, [\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\n`,\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 1}) var ${glslVarName}_texture_write: ${textureKindStorage}<%WRITE_TYPE_${glslVarName}%, write>;\n`\n            ])\n          );\n          specialUniformsCounter += 1;\n        } else if (uniformData.usesSampler || uniformData.usesIndexRead) {\n          preFuncs.push(\n            new SourceNode(0, 0, [\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\n`,\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 1}) var ${glslVarName}: ${translated};\n`\n            ])\n          );\n          specialUniformsCounter += 1;\n        }\n      } else if (translated.startsWith(\"atomic\")) {\n        preFuncs.push(\n          new SourceNode(0, 0, [\n            `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var<storage, read_write> ${glslVarName}: ${translated};\n`\n          ])\n        );\n      } else if (translated.startsWith(\"array\") || translated.startsWith(\"buffer\")) {\n        let usageType = \"read\";\n        if (uniformData.usesIndexAssign) {\n          usageType = \"read_write\";\n        }\n        preFuncs.push(\n          new SourceNode(0, 0, [\n            `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var<storage, ${usageType}> ${glslVarName}: ${translated};\n`\n          ])\n        );\n      }\n      specialUniformsCounter++;\n    }\n  }\n  for (let workgroupVar of workgroupVars) {\n    preFuncs.push(\n      new SourceNode(0, 0, [\n        `var<workgroup> ${escapeIdentifier(workgroupVar.name.getText())}: ${translateType(\n          checker,\n          checker.getTypeAtLocation(workgroupVar.type)\n        )};\n`\n      ])\n    );\n  }\n  for (let k of sorted) {\n    if (k == \"main\")\n      continue;\n    let v = deps.functions.get(k);\n    if (v) {\n      let sourceFile2 = v.getSourceFile();\n      let originalFile2 = env2.files.find((f) => f.path == sourceFile2.fileName);\n      preFuncs.push(\n        compile$1(\n          { parentFunction: v, checker, composed: deps.composed.get(k) ?? null },\n          v,\n          originalFile2?.mapping\n        )\n      );\n    }\n  }\n  let sourceFile = root.getSourceFile();\n  let originalFile = env2.files.find((f) => f.path == sourceFile?.fileName);\n  let customAttributesIn = /* @__PURE__ */ new Map();\n  let customAttributesOut = /* @__PURE__ */ new Map();\n  let main = compile$1(\n    {\n      checker,\n      isComputeShader,\n      computeSize: computeShaderSize,\n      addCustomAttribute(type2, idx, valType, interp) {\n        if (type2 == \"in\") {\n          customAttributesIn.set(idx, [valType, interp]);\n        } else if (type2 == \"out\") {\n          customAttributesOut.set(idx, [valType, interp]);\n        }\n      }\n    },\n    root,\n    originalFile.mapping\n  );\n  preFuncs.push(main);\n  let source = new SourceNode(root.getStart(), root.getEnd(), preFuncs);\n  let ss = { indexMapping: [], str: \"\" };\n  source.toString(ss);\n  let finalShaderOutput = ss.str;\n  let customIns = [];\n  for (let [idx, [valType, interp]] of customAttributesIn.entries()) {\n    customIns.push(`@location(${7 + idx}) @interpolate(${interp}) custom${idx}: ${valType},\n`);\n  }\n  finalShaderOutput = finalShaderOutput.replace(\"// %SHADER_ShaderInput%\\n\", customIns.join(\"\"));\n  let customOuts = [];\n  for (let [idx, [valType, interp]] of customAttributesOut.entries()) {\n    customOuts.push(`@location(${7 + idx}) @interpolate(${interp}) custom${idx}: ${valType},\n`);\n  }\n  let matches = wgslHeader.match(/fn ([^\\(]+)/gm);\n  let headerSplits = [];\n  for (let i = 0; i < matches.length; i++) {\n    let index = wgslHeader.indexOf(matches[i]);\n    let toIndex = i == matches.length - 1 ? wgslHeader.length : wgslHeader.indexOf(matches[i + 1]);\n    headerSplits.push(wgslHeader.substring(index, toIndex));\n  }\n  let realHeader = \"\";\n  for (let i = 0; i < headerSplits.length; i++) {\n    let headerText = headerSplits[i];\n    let fnName = headerText.match(/fn ([^\\(]+)/)?.[1];\n    if (fnName) {\n      if (finalShaderOutput.includes(fnName)) {\n        realHeader += headerText;\n      }\n    }\n  }\n  finalShaderOutput = realHeader + finalShaderOutput;\n  let output = new WGSLShader(`shd_${key}`, finalShaderOutput);\n  output.sourceMapping = ss.indexMapping;\n  output.attributeInput = customIns.join(\"\");\n  output.attributeOutput = customOuts.join(\"\");\n  for (let uniformData of uniforms) {\n    let u = uniformData.declaration;\n    if (isUniformable(checker, u)) {\n      let name = u.name.getText();\n      let isGlobalVar = isRootNode(u);\n      if (name) {\n        let filterProps = function(props) {\n          if (props && props.name) {\n            let sp = deps.structsProps.get(props.name);\n            let realStruct = deps.structs.get(props.name);\n            if (props.type == \"struct\" && realStruct) {\n              for (let fi = props.fields.length - 1; fi >= 0; fi--) {\n                let f = props.fields[fi];\n                if (!sp || !sp.has(f[0])) {\n                  props.fields.splice(fi, 1);\n                } else {\n                  if (f[1].type == \"struct\") {\n                    f[1] = filterProps(f[1]);\n                  }\n                }\n              }\n            }\n          }\n          if (props && (props.type == \"buffer\" || props.type == \"primitive\" && props.name == \"texture2d\")) {\n            if (uniformData.usesSampler && uniformData.usesIndexAssign) {\n              props.access = \"sample_write\";\n            } else if (uniformData.usesIndexAssign) {\n              props.access = \"write\";\n            } else if (uniformData.usesSampler) {\n              props.access = \"sample\";\n            } else {\n              props.access = \"read\";\n            }\n          } else if (props && props.type == \"array\" && props.element.type == \"primitive\" && props.element.name == \"texture2d\") {\n            if (uniformData.usesSampler && uniformData.usesIndexAssign) {\n              props.element.access = \"sample_write\";\n            } else if (uniformData.usesIndexAssign) {\n              props.element.access = \"write\";\n            } else if (uniformData.usesSampler) {\n              props.element.access = \"sample\";\n            } else {\n              props.element.access = \"read\";\n            }\n          }\n          return props;\n        };\n        getDeclarationType(checker, u);\n        let typeNode = checker.getTypeAtLocation(u);\n        let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n        let decl = symbol?.getDeclarations()?.[0];\n        if (decl && ts.isClassDeclaration(decl)) {\n          resolveStructName(decl);\n        }\n        if (isGlobalVar) {\n          let typeOut2 = getDeclarationType(checker, u);\n          output.globals.push([\n            name,\n            {\n              fileName: getNodeSourceFileName(u),\n              structure: filterProps(translateType(checker, typeOut2, true))\n            }\n          ]);\n        } else {\n          output.locals.push([\n            name,\n            filterProps(translateType(checker, getDeclarationType(checker, u), true))\n          ]);\n        }\n      }\n    }\n  }\n  return output;\n}\nfunction isAlignable(t) {\n  return t.startsWith(\"vec\") || t == \"f32\" || t == \"i32\" || t == \"u32\";\n}\nfunction isSpecialUniformType(t) {\n  return t == \"sampler\" || t.startsWith(\"array\") || t.startsWith(\"buffer\") || t.startsWith(\"atomic\");\n}\nfunction getNodeSourceFileName(node2) {\n  let found = closest(node2, (n) => ts.isSourceFile(n));\n  if (found && ts.isSourceFile(found)) {\n    return found.fileName;\n  } else {\n    return \"\";\n  }\n}\nfunction walkNodes$1(node2, cb) {\n  cb(node2);\n  node2.forEachChild((n) => walkNodes$1(n, cb));\n}\nfunction walkNodesWithCalls(checker, node2, cb) {\n  cb(node2);\n  node2.forEachChild((n) => {\n    if (ts.isCallExpression(node2)) {\n      let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = checker.getAliasedSymbol(exprSmybol);\n      }\n      if (exprSmybol) {\n        let funcDeclar = exprSmybol.getDeclarations()?.[0];\n        if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n          let mapping = findSignatureMappingToWGSL(checker, exprSmybol);\n          if (mapping === null) {\n            if (funcDeclar.body) {\n              walkNodesWithCalls(checker, funcDeclar.body, cb);\n            }\n          }\n        }\n      }\n    }\n    walkNodesWithCalls(checker, n, cb);\n  });\n}\nfunction getSymbolAtLocationAndFollowAliases(checker, node2) {\n  let exprSmybol = checker.getSymbolAtLocation(node2);\n  if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n    exprSmybol = checker.getAliasedSymbol(exprSmybol);\n  }\n  return exprSmybol;\n}\nfunction findSignatureMappingToWGSL(checker, sym) {\n  let matcher = /=(?:wgsl|univ)\\((.+)\\)$/g;\n  if (!sym.valueDeclaration)\n    return null;\n  let doc = ts.getJSDocTags(sym.valueDeclaration);\n  for (let d of doc) {\n    if (d.tagName.text !== \"shadeup\")\n      continue;\n    if (typeof d.comment === \"string\") {\n      let matches = matcher.exec(d.comment);\n      if (matches) {\n        return matches[1];\n      }\n    }\n  }\n  return null;\n}\nfunction removeDoubleUnderscores(str) {\n  return str.replace(/__/g, \"_ii\");\n}\nlet rootSymbolsFromMath = [\n  \"abs\",\n  \"floor\",\n  \"ceil\",\n  \"round\",\n  \"sign\",\n  \"cos\",\n  \"sin\",\n  \"tan\",\n  \"acos\",\n  \"asin\",\n  \"atan\",\n  \"atan2\",\n  \"cosh\",\n  \"sinh\",\n  \"tanh\",\n  \"acosh\",\n  \"asinh\",\n  \"atanh\",\n  \"exp\",\n  \"log\",\n  \"pow\",\n  \"log2\",\n  \"log10\",\n  \"sqrt\",\n  \"inversesqrt\",\n  \"frac\",\n  \"min\",\n  \"max\",\n  \"step\",\n  \"clamp\",\n  \"saturate\",\n  \"smoothstep\",\n  \"lerp\",\n  \"bilerp\",\n  \"length\",\n  \"distance\",\n  \"dist\",\n  \"normalize\",\n  \"dot\",\n  \"reflect\",\n  \"refract\",\n  \"cross\",\n  \"degrees\",\n  \"radians\",\n  \"wrap\",\n  \"rand\",\n  \"rand2\",\n  \"rand3\",\n  \"float2x2\",\n  \"float3x3\",\n  \"float4x4\",\n  \"inverse\",\n  \"transpose\",\n  \"pingpong\",\n  \"atomic\",\n  \"mod\",\n  \"workgroupBarrier\",\n  \"storageBarrier\",\n  \"workgroupUniformLoad\",\n  \"discard\",\n  \"ddx\",\n  \"ddy\",\n  \"ddxFine\",\n  \"ddyFine\",\n  \"ddxCoarse\",\n  \"ddyCoarse\",\n  \"bitcast\",\n  \"pack4x8snorm\",\n  \"pack4x8unorm\",\n  \"pack2x16snorm\",\n  \"pack2x16unorm\",\n  \"pack2x16float\",\n  \"unpack4x8snorm\",\n  \"unpack4x8unorm\",\n  \"unpack2x16snorm\",\n  \"unpack2x16unorm\",\n  \"unpack2x16float\"\n];\nlet rootSymbolsFromAll = [\n  \"print\",\n  \"stat\",\n  \"statGraph\",\n  \"time\",\n  \"compute\",\n  // 'type shader',\n  \"flush\",\n  // 'addressWorkgroup',\n  // 'drawAlt',\n  // 'shader_start_shd_',\n  \"globalVarInit\",\n  // 'type ShaderInput',\n  // 'type ShaderOutput',\n  \"sleep\",\n  \"__makeMap\",\n  \"__deepClone\",\n  \"map\",\n  \"array\"\n];\nlet rootSymbolsFromDraw = [\n  \"drawIndexed\",\n  \"drawInstanced\",\n  \"draw\",\n  \"makeShader\",\n  \"ShaderInput\",\n  \"ShaderOutput\",\n  \"shader\",\n  \"drawAlt2\",\n  // 'drawIndexedIndirect',\n  // 'drawInstancedIndexed',\n  // 'drawIndirect',\n  \"drawCount\",\n  \"drawAttributes\",\n  \"drawAdvanced\",\n  \"computeIndirect\",\n  \"drawFullscreen\",\n  \"shader_start_shd_\"\n];\nlet rootSymbolsFromCommon = [\n  \"pixelToClip\",\n  \"PI\",\n  \"quat\",\n  \"noise\",\n  \"spatial\",\n  // 'mat4',\n  \"Camera\",\n  \"Camera2d\",\n  \"buffer\",\n  \"matrix\",\n  \"texture2d\",\n  \"texture3d\",\n  \"ui\",\n  \"screenAA\",\n  \"randColor\",\n  \"randColor2\",\n  \"hsl\",\n  \"hsla\",\n  \"rgb\",\n  \"rgba\",\n  \"hslFromColor\",\n  \"hslaFromColor\",\n  \"rgbFromColor\",\n  \"rgbaFromColor\",\n  \"hsv\",\n  \"hsva\",\n  \"hsvFromColor\",\n  \"hsvaFromColor\",\n  \"cmyk\",\n  \"cmykFromColor\",\n  \"hex\",\n  \"hexFromColor\",\n  \"sin1\",\n  \"cos1\",\n  \"tan1\",\n  \"remap\",\n  \"remap1\",\n  \"color\",\n  \"wrap2\",\n  \"wrap3\",\n  \"wrap4\",\n  \"bezier\"\n];\nlet rootSymbolsFromMesh = [\"mesh\", \"Mesh\", \"Model\", \"ModelPart\", \"Material\"];\nconst header = `// This file was generated by Shadeup.\nimport * as __ from \"/std_math\";\nimport {${rootSymbolsFromMath.join(\", \")}} from \"/std_math\";\nimport {${rootSymbolsFromAll.join(\", \")}, globalVarGet as __globalVarGet} from \"/std___std_all\";\nimport {${rootSymbolsFromDraw.join(\", \")}} from \"/_std/drawIndexed\";\nimport { physics, PhysicsRigidBody2d, PhysicsCollider2d, PhysicsEngine2d } from \"/_std/physics\";\nlet globalVarGet = __globalVarGet;\n/**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n`;\nclass SourceNode {\n  constructor(startIndex, endIndex, children) {\n    this.startIndex = startIndex;\n    this.endIndex = endIndex;\n    if (Array.isArray(children)) {\n      this.children = children;\n    } else {\n      this.children = [children];\n    }\n  }\n  toString(s) {\n    let start = s.str.length;\n    for (const child of this.children) {\n      if (typeof child === \"string\") {\n        s.str += child;\n      } else if (child instanceof SourceNode) {\n        child.toString(s);\n      }\n    }\n    s.indexMapping.push([this.startIndex, this.endIndex, start, s.str.length]);\n  }\n  print() {\n    const s = { str: \"\", indexMapping: [] };\n    this.toString(s);\n    return s.str;\n  }\n}\nfunction lookupIndexMapping(indexMapping, index) {\n  for (const [start, end, newStart, newEnd] of indexMapping) {\n    if (index >= newStart && index <= newEnd) {\n      return start + (index - newStart);\n    }\n  }\n  return -1;\n}\nfunction lookupIndexMappingRange(indexMapping, start, end) {\n  let minStart = Infinity;\n  let maxEnd = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (start >= newStart && end <= newEnd) {\n      if (oldEnd - oldStart < size || size === 0) {\n        minStart = oldStart;\n        maxEnd = oldEnd;\n        size = oldEnd - oldStart;\n      }\n    }\n  }\n  return { start: minStart, end: maxEnd };\n}\nfunction reverseLookupIndexMappingRange(indexMapping, start, end) {\n  let minStart = Infinity;\n  let maxEnd = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (start >= oldStart && end <= oldEnd) {\n      if (newEnd - newStart < size || size === 0) {\n        minStart = newStart;\n        maxEnd = newEnd;\n        size = newEnd - newStart;\n      }\n    }\n  }\n  return { start: minStart, end: maxEnd };\n}\nfunction reverseLookupIndexMappingCursor(indexMapping, cursor) {\n  let exact = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (cursor >= oldStart && cursor <= oldEnd) {\n      if (newEnd - newStart < size || size === 0) {\n        exact = cursor - oldStart + newStart;\n        size = newEnd - newStart;\n      }\n    }\n  }\n  return exact;\n}\nfunction prePass(ctx, ast) {\n  for (const child of ast.namedChildren) {\n    if (child.type === \"impl_declaration\") {\n      let _for = child.childForFieldName(\"for\");\n      const name = child.childForFieldName(\"name\");\n      if (_for) {\n        ctx.addImplFor(name.text, child);\n      } else {\n        ctx.addImpl(name.text, child);\n      }\n    }\n    if (child.type == \"lexical_declaration\") {\n      let variable_declarator = child.firstNamedChild;\n      if (variable_declarator.type == \"variable_declarator\") {\n        ctx.globals.push(variable_declarator.firstNamedChild.text);\n      }\n    }\n  }\n}\nconst math_primitives = [\n  \"atomic\",\n  \"uint\",\n  \"uint2\",\n  \"uint3\",\n  \"uint4\",\n  \"uint8\",\n  \"int\",\n  \"float\",\n  \"float2\",\n  \"float3\",\n  \"float4\",\n  \"int2\",\n  \"int3\",\n  \"int4\",\n  \"float2x2\",\n  \"float3x3\",\n  \"float4x4\",\n  \"bool\"\n];\nconst operators = {\n  \"+\": \"add\",\n  \"-\": \"sub\",\n  \"*\": \"mul\",\n  \"**\": \"pow\",\n  \"/\": \"div\",\n  \"%\": \"mod\",\n  \"==\": \"eq\",\n  \"!=\": \"neq\",\n  \"<\": \"lt\",\n  \"<=\": \"lte\",\n  \">\": \"gt\",\n  \">=\": \"gte\",\n  \"&&\": \"and\",\n  \"||\": \"or\",\n  \"!\": \"not\",\n  \"&\": \"bitand\",\n  \"|\": \"bitor\",\n  \"^\": \"bitxor\",\n  \"<<\": \"lshift\",\n  \">>\": \"rshift\",\n  \"~\": \"bitnot\"\n};\nconst keyFunctions = {\n  float: \"__.float\",\n  int: \"__.int\",\n  uint: \"__.uint\",\n  uint2: \"__.uint2\",\n  uint3: \"__.uint3\",\n  uint4: \"__.uint4\",\n  uint8: \"__.uint8\",\n  float2: \"__.float2\",\n  float3: \"__.float3\",\n  float4: \"__.float4\",\n  int2: \"__.int2\",\n  int3: \"__.int3\",\n  int4: \"__.int4\",\n  float2x2: \"__.float2x2\",\n  float3x3: \"__.float3x3\",\n  float4x4: \"__.float4x4\"\n};\nconst escapeWords = {\n  in: true,\n  out: true\n};\nfunction generateDefaultForType(name) {\n  switch (name) {\n    case \"any\":\n      return \"null\";\n    case \"int\":\n      return \"__.int(0)\";\n    case \"uint\":\n      return \"__.uint(0)\";\n    case \"uint8\":\n      return \"__.uint8(0)\";\n    case \"float\":\n      return \"__.float(0.0)\";\n    case \"float2\":\n      return \"__.float2(0.0, 0.0)\";\n    case \"float3\":\n      return \"__.float3(0.0, 0.0, 0.0)\";\n    case \"float4\":\n      return \"__.float4(0.0, 0.0, 0.0, 0.0)\";\n    case \"int2\":\n      return \"__.int2(0, 0)\";\n    case \"int3\":\n      return \"__.int3(0, 0, 0)\";\n    case \"int4\":\n      return \"__.int4(0, 0, 0, 0)\";\n    case \"float2x2\":\n      return \"__.float2x2(0.0, 0.0, 0.0, 0.0)\";\n    case \"float3x3\":\n      return \"__.float3x3(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"float4x4\":\n      return \"__.float4x4(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"bool\":\n      return \"false\";\n    case \"string\":\n      return '\"\"';\n    case \"atomic<uint>\":\n      return \"atomic<__.uint>(__.uint(0))\";\n    case \"atomic<int>\":\n      return \"atomic<__.int>(__.int(0))\";\n    default:\n      if (name.endsWith(\"[]\")) {\n        return \"[]\";\n      } else if (name.endsWith(\"]\")) {\n        let matches = name.match(/(.+)\\[(\\d+)\\]$/);\n        if (matches && matches.length > 2) {\n          let type2 = matches[1];\n          let count2 = matches[2];\n          let args = [];\n          for (let i = 0; i < parseInt(count2); i++) {\n            args.push(generateDefaultForType(type2));\n          }\n          return \"[\" + args.join(\",\") + \"]\";\n        } else {\n          return \"[]\";\n        }\n      } else {\n        if (name.startsWith(\"buffer\") || name.startsWith(\"texture2d\") || name.startsWith(\"texture3d\")) {\n          return \"null\";\n        } else {\n          return \"new \" + name + \"({})\";\n        }\n      }\n  }\n}\nfunction isValidInteger(str) {\n  let n = parseInt(str);\n  if (n > Math.pow(2, 31) - 1 || n < -Math.pow(2, 31)) {\n    return false;\n  }\n  return true;\n}\nfunction compile(ctx, ast) {\n  function c2(myAst, errorMessage = \"Syntax error\") {\n    if (!myAst) {\n      console.log(\"error\");\n      ctx.report(ast, errorMessage);\n      return s([\"/*\", errorMessage, \"*/\"]);\n    } else {\n      return compile(ctx, myAst);\n    }\n  }\n  function s(c22) {\n    return new SourceNode(ast.startIndex, ast.endIndex, c22);\n  }\n  function n(type2) {\n    return ast.childForFieldName(type2);\n  }\n  function flat(...c22) {\n    return c22.reduce((acc, cur) => {\n      return [...acc, ...cur];\n    }, []);\n  }\n  function join(c22, sep) {\n    return c22.filter((v) => {\n      if (typeof v == \"string\" && v.length == 0 || v instanceof SourceNode && v.children.length == 0) {\n        return false;\n      }\n      return true;\n    }).reduce((acc, cur) => {\n      if (acc.length === 0) {\n        return [cur];\n      }\n      return [...acc, sep, cur];\n    }, []);\n  }\n  function children() {\n    return ast.namedChildren.map((child) => c2(child));\n  }\n  function hasName(name) {\n    return ast.childForFieldName(name) !== null;\n  }\n  if (!ast) {\n    return new SourceNode(0, 0, [\"/*\", \"Syntax error\", \"*/\"]);\n  }\n  switch (ast.type) {\n    case \"program\":\n      return s([\n        header,\n        ...ctx.fileName != \"file:////_std/common.ts\" ? [`import {${rootSymbolsFromCommon.join(\", \")}} from \"/_std/common\";`] : [],\n        ...ctx.fileName != \"file:////_std/mesh.ts\" ? [`import {${rootSymbolsFromMesh.join(\", \")}} from \"/_std/mesh\";`] : [],\n        ...ctx.fileName != \"file:////_std/sdf.ts\" ? [`import { sdf } from \"/_std/sdf\";`] : [],\n        ...ast.children.map((child) => c2(child))\n      ]);\n    case \"expression_statement\":\n      if (ast.firstChild) {\n        if (ast.lastNamedChild?.type === \"ERROR\") {\n          return s([c2(ast.firstNamedChild), \".\"]);\n        }\n        if (ast.firstNamedChild.type == \"workgroup\") {\n          return s([c2(ast.firstNamedChild), \"\\n\"]);\n        } else {\n          return s([c2(ast.firstNamedChild), \";\\n\"]);\n        }\n      }\n    case \"binary_expression\":\n      if (ast.firstChild && ast.lastChild) {\n        if (ast.lastChild.text == \"null\" && (ast.children[1].text == \"!=\" || ast.children[1].text == \"==\")) {\n          return s([c2(ast.firstChild), ast.children[1].text + \"=\", \"null\"]);\n        }\n        return s([\n          \"__.\",\n          operators[ast.children[1].text.trim()] ?? ast.children[1].text.trim(),\n          \"( \",\n          c2(ast.firstNamedChild),\n          \", \",\n          c2(ast.lastNamedChild),\n          \" )\"\n        ]);\n      }\n    case \"identifier\":\n      if (keyFunctions[ast.text]) {\n        return s([String(keyFunctions[ast.text])]);\n      } else if (escapeWords[ast.text]) {\n        return s([String(\"__\" + ast.text)]);\n      }\n      return s([\n        String(ast.text === \"self\" ? isInShader(ast) ? \"shader_self_temp\" : \"this\" : ast.text)\n      ]);\n    case \"number\":\n      if (ast.parent?.type == \"pair\" && ast.parent.firstNamedChild == ast) {\n        return s([String(ast.text)]);\n      }\n      if (ast.text.match(/.[xyzwrgba]+$/)) {\n        let swizzle = (ast.text.match(/.[xyzwrgba]+$/) ?? [\"\"])[0];\n        swizzle = swizzle.replace(\".\", \"\");\n        let raw = ast.text.replace(/.[xyzwrgba]+$/, \"\");\n        let isUint2 = raw.indexOf(\"u\") !== -1;\n        let isFloat2 = raw.indexOf(\".\") !== -1;\n        return s([\n          String(\n            \"__.swizzle(\" + (isFloat2 ? \"__.float\" : isUint2 ? \"__.uint\" : \"__.int\") + \"(\" + raw.replace(\"u\", \"\") + '), \"' + swizzle + '\")'\n          )\n        ]);\n      }\n      let isFloat = ast.text.indexOf(\".\") !== -1;\n      let isUint = ast.text.indexOf(\"u\") !== -1;\n      if (!isFloat && !isValidInteger(ast.text) && !isUint) {\n        ctx.report(\n          ast,\n          \"Invalid integer, this overflows the 32 bit integer limit, add a .0 to the end to make it a float\"\n        );\n      }\n      return s([\n        (isFloat ? \"__.float\" : isUint ? \"__.uint\" : \"__.int\") + \"(\",\n        new SourceNode(ast.startIndex, ast.endIndex, ast.text.replace(\"u\", \"\")),\n        \")\"\n      ]);\n    case \"string\":\n      return s([String(ast.text)]);\n    case \"function_declaration\":\n      if (ast.firstChild && ast.lastChild) {\n        let funcName = n(\"name\").text;\n        let prefix = \"\";\n        if (funcName === \"main\") {\n          prefix += \"\";\n          prefix += \"export \";\n        }\n        return s([\n          prefix + \"function \",\n          c2(n(\"name\")),\n          c2(n(\"parameters\")),\n          ...hasName(\"return_type\") ? [c2(n(\"return_type\")), \" \"] : [],\n          c2(n(\"body\")),\n          \"\\n\"\n        ]);\n      }\n    case \"block\":\n      return s(children());\n    case \"formal_parameters\":\n      return s([\"(\", ...join(children(), \", \"), \")\"]);\n    case \"required_parameter\":\n      if (n(\"pattern\")?.text === \"self\") {\n        return s([]);\n      }\n      return s(\n        flat(\n          [c2(n(\"pattern\"))],\n          hasName(\"type\") ? [\": \", c2(n(\"type\"))] : [],\n          hasName(\"value\") ? [\" = \", c2(n(\"value\"))] : []\n        )\n      );\n    case \"type_annotation\":\n      return s([c2(ast.firstNamedChild)]);\n    case \"type_identifier\":\n      if (math_primitives.indexOf(ast.text) !== -1) {\n        return s([String(\"__.\" + ast.text)]);\n      }\n      return s([String(ast.text)]);\n    case \"predefined_type\":\n      if (math_primitives.indexOf(ast.text) !== -1) {\n        return s([String(\"__.\" + ast.text)]);\n      }\n      return s([String(ast.text)]);\n    case \"function_type\":\n      return s([c2(n(\"parameters\")), \" => \", c2(n(\"return_type\"))]);\n    case \"lookup_type\":\n      let len = parseInt(ast.lastNamedChild?.text ?? \"0\");\n      let repeats = [];\n      for (let i = 0; i < len; i++) {\n        repeats.push(c2(ast.firstNamedChild));\n      }\n      return s([\"[\", ...join(repeats, \", \"), \"]\"]);\n    case \"arrow_function\":\n      return s([\n        c2(n(\"parameters\")),\n        \" => \",\n        ...hasName(\"return_type\") ? [c2(n(\"return_type\")), \" \"] : [],\n        c2(n(\"body\"))\n      ]);\n    case \"literal_type\":\n      return s([c2(ast.firstNamedChild)]);\n    case \"return_statement\":\n      if (ast.namedChildCount === 0) {\n        return s([\"return;\"]);\n      } else {\n        if (ast.lastNamedChild?.type === \"ERROR\") {\n          return s([\"return \", c2(ast.firstNamedChild), \".\"]);\n        }\n        return s([\"return \", c2(ast.firstNamedChild), \";\"]);\n      }\n    case \"export_statement\":\n      return s([\"export \", c2(ast.firstNamedChild), \";\"]);\n    case \"export_clause\":\n      return s([\"{\", ...join(children(), \", \"), \"}\"]);\n    case \"export_specifier\":\n      return s([c2(ast.firstNamedChild)]);\n    case \"array\":\n      return s([\"[\", ...join(children(), \", \"), \"]\"]);\n    case \"template_string\":\n      return s([\"`\", ...join(children(), \"\"), \"`\"]);\n    case \"template_substitution\":\n      return s([\"${\", c2(n(\"expression\")), \"}\"]);\n    case \"template_string_segment\":\n      return s([String(ast.text)]);\n    case \"type_alias_declaration\":\n      ctx.report(ast, \"Type aliases aren't supported yet\");\n      return s([\"/*error*/0\"]);\n    case \"import\":\n      return s([\"\"]);\n    case \"comment\":\n      return s([String(ast.text), \"\\n\"]);\n    case \"call_expression\":\n      if (n(\"type_arguments\")) {\n        if (n(\"function\").text == \"buffer\" || n(\"function\").text == \"texture2d\" || n(\"function\").text == \"texture3d\") {\n          let internalArgs = s([\n            \"(\",\n            ...join(\n              [\n                ...n(\"arguments\").namedChildren.map((chi) => c2(chi)),\n                ...n(\"arguments\").namedChildren.length == 1 && n(\"function\").text == \"texture2d\" || n(\"function\").text == \"texture3d\" ? [s(['\"auto\"'])] : [],\n                s(['\"', n(\"type_arguments\").namedChild(0).text, '\"'])\n              ],\n              \", \"\n            ),\n            \")\"\n          ]);\n          return s([c2(n(\"function\")), c2(n(\"type_arguments\")), internalArgs]);\n        }\n        return s([c2(n(\"function\")), c2(n(\"type_arguments\")), c2(n(\"arguments\"))]);\n      } else {\n        return s([c2(n(\"function\")), c2(n(\"arguments\"))]);\n      }\n    case \"construct_expression\":\n      return s([\"new \", c2(n(\"identifier\")), \"(\", c2(n(\"body\")), \")\"]);\n    case \"member_expression\":\n      let prop = n(\"property\");\n      let p = prop.text ?? \"\";\n      let isParentAssignment = ast.parent?.type == \"assignment_expression\" || ast.parent?.type == \"augmented_assignment_expression\";\n      if (isParentAssignment) {\n        let left2 = ast.parent.childForFieldName(\"left\");\n        isParentAssignment = left2.startIndex == ast.startIndex && left2.endIndex == ast.endIndex;\n      }\n      if (p.length > 0 && p.length < 5) {\n        let isSwizzle = true;\n        for (let i = 0; i < p.length; i++) {\n          let char = p[i];\n          if (char !== \"x\" && char !== \"y\" && char !== \"z\" && char !== \"w\" && char !== \"r\" && char !== \"g\" && char !== \"b\" && char !== \"a\") {\n            isSwizzle = false;\n            break;\n          }\n        }\n        if (isSwizzle) {\n          if (isParentAssignment) {\n            ast.parent.childForFieldName(\"right\");\n          }\n          return s([\n            `__.swizzle(`,\n            c2(n(\"object\")),\n            `, '`,\n            new SourceNode(prop.startIndex, prop.endIndex, p),\n            `'`,\n            ...isParentAssignment ? [`, `, c2(ast.parent.childForFieldName(\"right\"))] : [],\n            `)`\n            // new SourceNode(ast.children[1].startIndex, ast.children[1].endIndex, '.'),\n            // c(n('property')!)\n          ]);\n        }\n      }\n      return s([\n        c2(n(\"object\")),\n        new SourceNode(ast.children[1].startIndex, ast.children[1].endIndex, \".\"),\n        c2(n(\"property\"))\n      ]);\n    case \"pair\":\n      return s([c2(n(\"key\")), \": \", c2(n(\"value\"), \"Expected value in pair\")]);\n    case \"object\":\n      let childrens = ast.namedChildren.filter((subc) => subc.type !== \"comment\").map((subc) => c2(subc));\n      return s([\"{\", ...join(childrens, \", \"), \"}\"]);\n    case \"property_identifier\":\n      return s([String(ast.text)]);\n    case \"arguments\":\n      return s([\"(\", ...join(children(), \", \"), \")\"]);\n    case \"parenthesized_expression\":\n      if (ast.lastNamedChild?.type === \"ERROR\") {\n        return s([\"(\", c2(ast.firstNamedChild), \".\", \")\"]);\n      }\n      return s([\"(\", c2(ast.firstNamedChild), \")\"]);\n    case \"function_signature\":\n      ctx.report(ast, \"Missing function body\");\n      return s([\"/*error*/0\"]);\n    case \"parenthesized_expression_vector\":\n      if (ast.firstNamedChild) {\n        if (ast.firstNamedChild.type === \"sequence_expression\") {\n          return s([\"__.makeVector(\", c2(ast.firstNamedChild), \")\"]);\n        } else {\n          return s([\"(\", c2(ast.firstNamedChild), \")\"]);\n        }\n      }\n    case \"if_statement\":\n      return s([\n        \"if \",\n        c2(n(\"condition\")),\n        c2(n(\"consequence\")),\n        hasName(\"alternative\") ? c2(n(\"alternative\")) : \"\"\n      ]);\n    case \"else\":\n      return s([\" else \", c2(ast.firstNamedChild), \"\\n\"]);\n    case \"generic_type\":\n      return s([c2(n(\"name\")), c2(n(\"type_arguments\"))]);\n    case \"type_arguments\":\n      return s([\"<\", ...join(children(), \", \"), \">\"]);\n    case \"array_type\":\n      if (ast.namedChildCount == 2) {\n        return s([c2(ast.firstNamedChild), \"[\", c2(ast.lastNamedChild), \"]\"]);\n      } else {\n        return s([c2(ast.firstNamedChild), \"[]\"]);\n      }\n    case \"ternary_expression\":\n      return s([c2(n(\"condition\")), \" ? \", c2(n(\"consequence\")), \" : \", c2(n(\"alternative\"))]);\n    case \"update_expression\":\n      return s([c2(n(\"argument\")), n(\"operator\").text]);\n    case \"augmented_assignment_expression\":\n      let opMapping = {\n        \"+=\": \"add\",\n        \"-=\": \"sub\",\n        \"*=\": \"mul\",\n        \"/=\": \"div\",\n        \"%=\": \"mod\"\n      };\n      let leftAssignAug = n(\"left\");\n      if (leftAssignAug?.type === \"subscript_expression\") {\n        return s([\n          c2(leftAssignAug.childForFieldName(\"object\")),\n          \".__index_assign_op(__.\",\n          opMapping[n(\"operator\").text],\n          \", \",\n          c2(leftAssignAug.childForFieldName(\"index\")),\n          \", \",\n          c2(n(\"right\")),\n          \")\"\n        ]);\n      }\n      return s([\n        c2(n(\"left\")),\n        \" = __.\",\n        opMapping[n(\"operator\").text],\n        \"(\",\n        c2(n(\"left\")),\n        \", \",\n        c2(n(\"right\")),\n        \")\"\n      ]);\n    case \"for_statement\":\n      return s([\n        \"for (\",\n        c2(n(\"initializer\")),\n        \" \",\n        c2(n(\"condition\")),\n        \" \",\n        c2(n(\"increment\")),\n        \") \",\n        c2(n(\"body\"))\n      ]);\n    case \"for_in_statement\":\n      let leftFor = n(\"left\");\n      let rightFor = n(\"right\");\n      if (leftFor.type === \"parenthesized_expression\") {\n        let forComponents = [];\n        for (let i = 0; i < leftFor.namedChildren[0].namedChildren.length; i++) {\n          let name = leftFor.namedChildren[0].namedChildren[i];\n          if (name.type != \"identifier\") {\n            ctx.report(\n              leftFor.namedChild(i),\n              \"Invalid for loop variable name, must be x, y, z or w\"\n            );\n          }\n          let key2 = name.text;\n          if (![\"x\", \"y\", \"z\", \"w\"].includes(key2)) {\n            ctx.report(\n              leftFor.namedChild(i),\n              \"Invalid for loop variable name, must be x, y, z or w\"\n            );\n          }\n          if (forComponents.includes(key2)) {\n            ctx.report(leftFor.namedChild(i), \"Duplicate for loop variable name\");\n          }\n          forComponents.push(key2);\n        }\n        forComponents = forComponents.reverse();\n        let parts = [];\n        parts.push(s([\"let __for_iter = \", c2(rightFor), \";\\n\"]));\n        let indexes = [\"x\", \"y\", \"z\", \"w\"];\n        for (let n2 of forComponents) {\n          parts.push(\n            s([\n              \"for (let \",\n              n2,\n              \": __.int = __.int(0); \",\n              n2,\n              \" < __for_iter[\",\n              indexes.indexOf(n2).toString(),\n              \"]; \",\n              n2,\n              \"++) {\\n\"\n            ])\n          );\n        }\n        parts.push(s([c2(n(\"body\")), \"\\n\"]));\n        for (let n2 of forComponents) {\n          parts.push(s([\"}\\n\"]));\n        }\n        return s(parts);\n      }\n      return s([\"for (let \", c2(n(\"left\")), \" of \", c2(n(\"right\")), \") \", c2(n(\"body\"))]);\n    case \"while_statement\":\n      return s([\"while (\", c2(n(\"condition\")), \") \", c2(n(\"body\"))]);\n    case \"break_statement\":\n      return s([\"break;\"]);\n    case \"continue_statement\":\n      return s([\"continue;\"]);\n    case \"new_expression\":\n      return s([\"new \", c2(n(\"constructor\")), c2(n(\"arguments\"))]);\n    case \"else_clause\":\n      return s([\" else \", c2(ast.firstNamedChild), \"\\n\"]);\n    case \"statement_block\":\n      if (ast.parent.type == \"method_definition\") {\n        let recur = function(a) {\n          if (a.type == \"identifier\") {\n            if (a.text == \"self\") {\n              doesRefSelf = true;\n            }\n          }\n          a.children.forEach(recur);\n        };\n        let doesRefSelf = false;\n        ast.children.forEach(recur);\n        if (doesRefSelf) {\n          return s([\"{let shader_self_temp = this;\", ...children(), \"}\"]);\n        }\n      }\n      return s([\"{\", ...children(), \"}\"]);\n    case \"import_statement\":\n      let sourceString = n(\"source\");\n      let fromString = sourceString.firstNamedChild?.text;\n      if (fromString) {\n        if (!fromString.startsWith(\"/\") && !fromString.startsWith(\"@\") && !fromString.startsWith(\".\")) {\n          fromString = \"/\" + fromString;\n        }\n      }\n      return s([\n        \"import \",\n        ...ast.namedChildCount == 2 ? [\" \", c2(ast.firstNamedChild), \"  from \"] : [],\n        new SourceNode(sourceString.startIndex, sourceString.endIndex, [\n          JSON.stringify(fromString)\n        ]),\n        \";\"\n      ]);\n    case \"named_imports\":\n      return s([\"{\", ...join(children(), \", \"), \"}\"]);\n    case \"import_clause\":\n      return s([c2(ast.firstChild)]);\n    case \"import_specifier\":\n      return hasName(\"alias\") ? s([c2(n(\"name\")), \" as \", c2(n(\"alias\"))]) : c2(n(\"name\"));\n    case \"predefined_type\":\n      return s([String(ast.text)]);\n    case \"interface_declaration\":\n      return s([\"interface \", c2(n(\"name\")), c2(n(\"body\")), \"\\n\"]);\n    case \"object_method_signature_type\":\n      return s([\"{\\n\", ...children(), \"\\n}\"]);\n    case \"method_signature\":\n      let isStaticSignature = n(\"parameters\")?.firstNamedChild?.text != \"self\";\n      let accessibilityMethod = ast.firstNamedChild?.type === \"accessibility_modifier_member\" ? \"public\" : \"private\";\n      if (ast.parent?.type === \"object_method_signature_type\" && ast.parent?.parent?.type === \"interface_declaration\") {\n        accessibilityMethod = \"\";\n      }\n      return s([\n        accessibilityMethod,\n        \" \",\n        ...isStaticSignature ? [\"static \"] : [],\n        c2(n(\"name\")),\n        c2(n(\"parameters\")),\n        c2(n(\"return_type\")),\n        \";\\n\"\n      ]);\n    case \"type_annotation_arrow\":\n      return s([\": \", c2(ast.firstNamedChild)]);\n    case \"struct_declaration\":\n      let impls = ctx.implsFor.get(n(\"name\").text) ?? [];\n      let properties = n(\"body\")?.namedChildren ?? [];\n      properties = properties.filter((i) => {\n        let isStatic2 = false;\n        for (let child of i.children) {\n          if (child.type === \"static\") {\n            isStatic2 = true;\n          }\n        }\n        return !isStatic2;\n      });\n      let implBodies = [\n        ...(ctx.implsFor.get(n(\"name\").text) ?? []).map((i) => i.childForFieldName(\"body\")),\n        ...(ctx.impls.get(n(\"name\").text) ?? []).map((i) => i.childForFieldName(\"body\")),\n        ...properties\n      ];\n      let staticProperties = n(\"body\")?.namedChildren ?? [];\n      staticProperties = staticProperties.filter((i) => {\n        let isStatic2 = false;\n        for (let child of i.children) {\n          if (child.type === \"static\") {\n            isStatic2 = true;\n          }\n        }\n        return isStatic2;\n      });\n      let props = properties.map((i) => ({\n        name: i.childForFieldName(\"name\")?.text ?? \"_unknown\",\n        type: i.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\",\n        renderedType: compileToString(ctx, i.childForFieldName(\"type\")),\n        default: i.childForFieldName(\"value\") ? compileToString(ctx, i.childForFieldName(\"value\")) : generateDefaultForType(i.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\")\n      }));\n      let cls = s([\n        \"/**@shadeup=struct*/class \",\n        c2(n(\"name\")),\n        ...impls.length > 0 ? [\n          \" implements \",\n          ...join(\n            impls.map((i) => c2(i.childForFieldName(\"for\"))),\n            \",\"\n          )\n        ] : [],\n        \" {\\n\",\n        ...join(\n          staticProperties.map((i) => {\n            return s([\n              \"public static \",\n              c2(i.childForFieldName(\"name\")),\n              \": \",\n              c2(i.childForFieldName(\"type\")),\n              \" = \",\n              c2(i.childForFieldName(\"value\")),\n              \";\\n\"\n            ]);\n          }),\n          \"\"\n        ),\n        `constructor(data: {`,\n        `${props.map(\n          (i) => `${i.name}?: ${math_primitives.includes(i.type ?? \"\") ? \"__.\" + i.type : i.renderedType},`\n        ).join(\"\\n\")}`,\n        `}) {\n`,\n        `${props.map((i) => `this.${i.name} = (data.${i.name} ?? ${i.default}) as any;`).join(\"\\n\")}`,\n        `\n}\n`,\n        ...join(\n          implBodies.map((i) => c2(i)),\n          \"\\n\"\n        ),\n        \"\\n\",\n        `clone(): `,\n        c2(n(\"name\")),\n        ` {\n`,\n        `return new `,\n        c2(n(\"name\")),\n        `({\n`,\n        `${props.map((i) => {\n          return `${i.name}: __deepClone(this.${i.name}),`;\n        }).join(\"\\n\")}`,\n        `});\n`,\n        `}\n`,\n        \"\\n}\",\n        \"\\n\"\n      ]);\n      return cls;\n    case \"object_method_type\":\n      return s([...children()]);\n    case \"method_definition\":\n      let isStatic = n(\"parameters\")?.firstNamedChild?.text != \"self\";\n      return s([\n        ...isStatic ? [\"static \"] : [],\n        c2(n(\"name\")),\n        c2(n(\"parameters\")),\n        c2(n(\"body\")),\n        \"\\n\"\n      ]);\n    case \"impl_for_clause\":\n      return s([ast.firstNamedChild.text]);\n    case \"unary_expression\":\n      let op = ast.firstChild?.text ?? \"\";\n      if (op == \"-\") {\n        return s([\"__.negate(\", c2(n(\"argument\")), \")\"]);\n      } else if (op == \"+\") {\n        return s([\"__.positive(\", c2(n(\"argument\")), \")\"]);\n      } else if (op == \"!\") {\n        return s([\"__.not(\", c2(n(\"argument\")), \")\"]);\n      } else {\n        return s([c2(n(\"argument\"))]);\n      }\n    case \"class_body\":\n      return s([\"{\\n\", ...children(), \"\\n}\"]);\n    case \"public_field_definition\":\n      let accessibility = ast.firstNamedChild?.type === \"accessibility_modifier_member\" ? \"public\" : \"private\";\n      return s([accessibility, \" \", c2(n(\"name\")), \": \", c2(n(\"type\")), \";\\n\"]);\n    case \"impl_declaration\":\n      return s([`/* impl ${n(\"name\")?.text} */\n`]);\n    case \"lexical_declaration\":\n      return s([...children().map((i) => s([\"let \", i, \";\\n\"]))]);\n    case \"variable_declarator\":\n      let isRoot = ast?.parent?.parent.type === \"program\";\n      return s([\n        c2(n(\"name\")),\n        n(\"type\") ? s([\": \", c2(n(\"type\"))]) : \"\",\n        ...hasName(\"value\") ? [\n          \" = \",\n          ...isRoot ? [\n            'globalVarInit(\"' + cleanName(ctx.fileName) + '\", \"',\n            c2(n(\"name\")),\n            '\", () => { return ',\n            c2(n(\"value\")),\n            \"; }, () => { return \",\n            c2(n(\"name\")),\n            \"; })\"\n          ] : [c2(n(\"value\"))]\n        ] : [\" = \", generateDefaultForType(n(\"type\").text.replace(/^:/, \"\")).trim()]\n      ]);\n    case \"object_type\":\n      return s([\n        \"{\",\n        ...join(\n          ast.namedChildren.map((i) => {\n            return s([c2(i), \",\"]);\n          }),\n          \"\"\n        ),\n        \"}\"\n      ]);\n    case \"property_signature\":\n      return s([c2(n(\"name\")), \": \", c2(n(\"type\"))]);\n    case \"workgroup_member\":\n      let typeName = ast.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\";\n      if (typeName === \"atomic<uint>\" || typeName === \"atomic<int>\") {\n        if (hasName(\"value\")) {\n          ctx.report(ast, \"Atomic variables cannot have a default value\");\n        }\n        return s([\n          \"\\n// @workgroup\\n let \",\n          c2(n(\"name\")),\n          \": \",\n          c2(n(\"type\")),\n          \" = \",\n          generateDefaultForType(typeName),\n          \";\\n\"\n        ]);\n      }\n      if (hasName(\"value\")) {\n        return s([\n          \"\\n// @workgroup\\n let \",\n          c2(n(\"name\")),\n          \": \",\n          c2(n(\"type\")),\n          \" = \",\n          c2(n(\"value\")),\n          \";\\n\"\n        ]);\n      } else {\n        let t = c2(n(\"type\"));\n        return s([\n          \"\\n// @workgroup\\n let \",\n          c2(n(\"name\")),\n          \": \",\n          t,\n          \" = \",\n          generateDefaultForType(typeName),\n          \";\\n\"\n        ]);\n      }\n    case \"workgroup\":\n      return s([...children()]);\n    case \"async_block\":\n      return s([\n        \"/** Runs immediately but does not block when running async code inside (e.g. downloading textures from the gpu)*/(async () => \",\n        c2(n(\"body\")),\n        \")()\"\n      ]);\n    case \"shader\":\n      let encoder = new TextEncoder();\n      let u8a = encoder.encode(n(\"body\").text);\n      let key = sha256(u8a).map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n      if (hasName(\"type_arguments\")) {\n        let isComputeShader = n(\"type_arguments\")?.namedChildCount == 3;\n        if (isComputeShader) {\n          let templateArgsRaw = join(\n            n(`type_arguments`).namedChildren.map((nc) => {\n              let innerString = c2(nc).print();\n              return innerString.replace(/__\\.int\\((\\d+)\\)/g, \"$1\");\n            }),\n            \", \"\n          );\n          let templateArgs = join(\n            n(`type_arguments`).namedChildren.map((nc) => {\n              return c2(nc);\n            }),\n            \", \"\n          );\n          return new SourceNode(ast.startIndex, ast.endIndex, [\n            new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n            new SourceNode(ast.startIndex, ast.startIndex + \"shader\".length, `makeShader(`),\n            `\"${key}\", /**@shadeup=shader*/(__in: ShaderInput`,\n            `, __out: {}`,\n            `) => `,\n            c2(n(\"body\")),\n            `) as any, [`,\n            ...templateArgs,\n            `]) as shader<`,\n            ...templateArgsRaw,\n            \">\"\n          ]);\n        } else {\n          let arg1 = n(\"type_arguments\")?.firstNamedChild;\n          let arg2 = n(\"type_arguments\")?.lastNamedChild;\n          return new SourceNode(ast.startIndex, ast.endIndex, [\n            new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n            new SourceNode(ast.startIndex, ast.startIndex + \"shader\".length, `makeShader(`),\n            `\"${key}\", /**@shadeup=shader*/(__in:`,\n            c2(arg1),\n            ` & {vertexIndex: __.int}, __out: `,\n            c2(arg2),\n            `) => `,\n            c2(n(\"body\")),\n            `))`\n          ]);\n        }\n      } else {\n        return new SourceNode(ast.startIndex, ast.endIndex, [\n          new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n          new SourceNode(ast.startIndex, ast.startIndex + \"shader\".length, `makeShader(`),\n          `\"${key}\", /**@shadeup=shader*/(__in, __out) => `,\n          c2(n(\"body\")),\n          `))`\n        ]);\n      }\n    case \"assignment_expression\":\n      let left = n(\"left\");\n      if (left?.type === \"subscript_expression\") {\n        return s([\n          c2(left.childForFieldName(\"object\")),\n          \".__index_assign(\",\n          c2(left.childForFieldName(\"index\")),\n          \", \",\n          c2(n(\"right\")),\n          \")\"\n        ]);\n      } else if (left?.type == \"member_expression\") {\n        let prop2 = left.childForFieldName(\"property\");\n        let p2 = prop2.text ?? \"\";\n        if (p2.length > 0 && p2.length < 5) {\n          let isSwizzle = true;\n          for (let i = 0; i < p2.length; i++) {\n            let char = p2[i];\n            if (char !== \"x\" && char !== \"y\" && char !== \"z\" && char !== \"w\" && char !== \"r\" && char !== \"g\" && char !== \"b\" && char !== \"a\") {\n              isSwizzle = false;\n              break;\n            }\n          }\n          if (isSwizzle) {\n            return s([c2(n(\"left\"))]);\n          } else {\n            return s([c2(n(\"left\")), \" = \", c2(n(\"right\"))]);\n          }\n        } else {\n          return s([c2(n(\"left\")), \" = \", c2(n(\"right\"))]);\n        }\n      } else {\n        return s([c2(n(\"left\")), \" = \", c2(n(\"right\"))]);\n      }\n    case \"sequence_expression\":\n      return s([...join(children(), \", \")]);\n    case \"subscript_expression\":\n      return s([c2(n(\"object\")), \".__index(\", c2(n(\"index\")), \")\"]);\n    case \"empty_statement\":\n      return s([\"\"]);\n    case \"true\":\n      return s([\"true\"]);\n    case \"false\":\n      return s([\"false\"]);\n    case \"null\":\n      return s([\"null\"]);\n    case \"union_type\":\n      return s([...join(children(), \" | \")]);\n    case \"intersection_type\":\n      return s([...join(children(), \" & \")]);\n    case \"ERROR\":\n      ctx.report(ast, \"Syntax error\");\n      if (ast.firstNamedChild?.type == \"identifier\") {\n        return s([c2(ast.firstNamedChild), \".\"]);\n      }\n      return s([\"/* ERROR */ 0\"]);\n    default:\n      ctx.report(ast, \"Unsupported syntax\");\n      console.error(new Error(\"Bad AST \" + ast.type));\n      return s([\"/* ERROR */ 0\"]);\n  }\n}\nfunction compileToString(ctx, ast) {\n  let sn = compile(ctx, ast);\n  let ss = {\n    str: \"\",\n    indexMapping: []\n  };\n  sn.toString(ss);\n  return ss.str;\n}\nfunction isInShader(ast) {\n  if (ast.type === \"shader\") {\n    return true;\n  }\n  if (ast.parent) {\n    return isInShader(ast.parent);\n  }\n  return false;\n}\nvar treeSitter = { exports: {} };\n(function(module, exports) {\n  var Module = void 0 !== Module ? Module : {}, TreeSitter = function() {\n    var e, t = \"object\" == typeof window ? { currentScript: window.document.currentScript } : null;\n    class Parser2 {\n      constructor() {\n        this.initialize();\n      }\n      initialize() {\n        throw new Error(\"cannot construct a Parser before calling `init()`\");\n      }\n      static init(r) {\n        return e || (Module = Object.assign({}, Module, r), e = new Promise((e2) => {\n          var r2, n = {};\n          for (r2 in Module)\n            Module.hasOwnProperty(r2) && (n[r2] = Module[r2]);\n          var o, s, _ = [], a = \"./this.program\", i = function(e3, t2) {\n            throw t2;\n          }, u = false, l = false;\n          u = \"object\" == typeof window, l = \"function\" == typeof importScripts, o = \"object\" == typeof process && \"object\" == typeof process.versions && \"string\" == typeof process.versions.node, s = !u && !o && !l;\n          var d, c2, m, f, p, h = \"\";\n          o ? (h = l ? require$$0$1.dirname(h) + \"/\" : __dirname + \"/\", d = function(e3, t2) {\n            return f || (f = require$$1), p || (p = require$$0$1), e3 = p.normalize(e3), f.readFileSync(e3, t2 ? null : \"utf8\");\n          }, m = function(e3) {\n            var t2 = d(e3, true);\n            return t2.buffer || (t2 = new Uint8Array(t2)), k(t2.buffer), t2;\n          }, process.argv.length > 1 && (a = process.argv[1].replace(/\\\\/g, \"/\")), _ = process.argv.slice(2), module.exports = Module, i = function(e3) {\n            process.exit(e3);\n          }, Module.inspect = function() {\n            return \"[Emscripten Module object]\";\n          }) : s ? (\"undefined\" != typeof read && (d = function(e3) {\n            return read(e3);\n          }), m = function(e3) {\n            var t2;\n            return \"function\" == typeof readbuffer ? new Uint8Array(readbuffer(e3)) : (k(\"object\" == typeof (t2 = read(e3, \"binary\"))), t2);\n          }, \"undefined\" != typeof scriptArgs ? _ = scriptArgs : void 0 !== arguments && (_ = arguments), \"function\" == typeof quit && (i = function(e3) {\n            quit(e3);\n          }), \"undefined\" != typeof print && (\"undefined\" == typeof console && (console = {}), console.log = print, console.warn = console.error = \"undefined\" != typeof printErr ? printErr : print)) : (u || l) && (l ? h = self.location.href : void 0 !== t && t.currentScript && (h = t.currentScript.src), h = 0 !== h.indexOf(\"blob:\") ? h.substr(0, h.lastIndexOf(\"/\") + 1) : \"\", d = function(e3) {\n            var t2 = new XMLHttpRequest();\n            return t2.open(\"GET\", e3, false), t2.send(null), t2.responseText;\n          }, l && (m = function(e3) {\n            var t2 = new XMLHttpRequest();\n            return t2.open(\"GET\", e3, false), t2.responseType = \"arraybuffer\", t2.send(null), new Uint8Array(t2.response);\n          }), c2 = function(e3, t2, r3) {\n            var n2 = new XMLHttpRequest();\n            n2.open(\"GET\", e3, true), n2.responseType = \"arraybuffer\", n2.onload = function() {\n              200 == n2.status || 0 == n2.status && n2.response ? t2(n2.response) : r3();\n            }, n2.onerror = r3, n2.send(null);\n          });\n          Module.print || console.log.bind(console);\n          var g2 = Module.printErr || console.warn.bind(console);\n          for (r2 in n)\n            n.hasOwnProperty(r2) && (Module[r2] = n[r2]);\n          n = null, Module.arguments && (_ = Module.arguments), Module.thisProgram && (a = Module.thisProgram), Module.quit && (i = Module.quit);\n          var w = 16;\n          var M, y = [];\n          function b(e3, t2) {\n            if (!M) {\n              M = /* @__PURE__ */ new WeakMap();\n              for (var r3 = 0; r3 < K.length; r3++) {\n                var n2 = K.get(r3);\n                n2 && M.set(n2, r3);\n              }\n            }\n            if (M.has(e3))\n              return M.get(e3);\n            var o2 = function() {\n              if (y.length)\n                return y.pop();\n              try {\n                K.grow(1);\n              } catch (e4) {\n                if (!(e4 instanceof RangeError))\n                  throw e4;\n                throw \"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\";\n              }\n              return K.length - 1;\n            }();\n            try {\n              K.set(o2, e3);\n            } catch (r4) {\n              if (!(r4 instanceof TypeError))\n                throw r4;\n              var s2 = function(e4, t3) {\n                if (\"function\" == typeof WebAssembly.Function) {\n                  for (var r5 = { i: \"i32\", j: \"i64\", f: \"f32\", d: \"f64\" }, n3 = { parameters: [], results: \"v\" == t3[0] ? [] : [r5[t3[0]]] }, o3 = 1; o3 < t3.length; ++o3)\n                    n3.parameters.push(r5[t3[o3]]);\n                  return new WebAssembly.Function(n3, e4);\n                }\n                var s3 = [1, 0, 1, 96], _2 = t3.slice(0, 1), a2 = t3.slice(1), i2 = { i: 127, j: 126, f: 125, d: 124 };\n                for (s3.push(a2.length), o3 = 0; o3 < a2.length; ++o3)\n                  s3.push(i2[a2[o3]]);\n                \"v\" == _2 ? s3.push(0) : s3 = s3.concat([1, i2[_2]]), s3[1] = s3.length - 2;\n                var u2 = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(s3, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])), l2 = new WebAssembly.Module(u2);\n                return new WebAssembly.Instance(l2, { e: { f: e4 } }).exports.f;\n              }(e3, t2);\n              K.set(o2, s2);\n            }\n            return M.set(e3, o2), o2;\n          }\n          var v, S = Module.dynamicLibraries || [];\n          Module.wasmBinary && (v = Module.wasmBinary);\n          var I, A = Module.noExitRuntime || true;\n          function x(e3, t2, r3, n2) {\n            switch (\"*\" === (r3 = r3 || \"i8\").charAt(r3.length - 1) && (r3 = \"i32\"), r3) {\n              case \"i1\":\n              case \"i8\":\n                q[e3 >> 0] = t2;\n                break;\n              case \"i16\":\n                R[e3 >> 1] = t2;\n                break;\n              case \"i32\":\n                W[e3 >> 2] = t2;\n                break;\n              case \"i64\":\n                ie = [t2 >>> 0, (ae = t2, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[e3 >> 2] = ie[0], W[e3 + 4 >> 2] = ie[1];\n                break;\n              case \"float\":\n                L[e3 >> 2] = t2;\n                break;\n              case \"double\":\n                O[e3 >> 3] = t2;\n                break;\n              default:\n                se(\"invalid type for setValue: \" + r3);\n            }\n          }\n          function N(e3, t2, r3) {\n            switch (\"*\" === (t2 = t2 || \"i8\").charAt(t2.length - 1) && (t2 = \"i32\"), t2) {\n              case \"i1\":\n              case \"i8\":\n                return q[e3 >> 0];\n              case \"i16\":\n                return R[e3 >> 1];\n              case \"i32\":\n              case \"i64\":\n                return W[e3 >> 2];\n              case \"float\":\n                return L[e3 >> 2];\n              case \"double\":\n                return O[e3 >> 3];\n              default:\n                se(\"invalid type for getValue: \" + t2);\n            }\n            return null;\n          }\n          \"object\" != typeof WebAssembly && se(\"no native wasm support detected\");\n          var P = false;\n          function k(e3, t2) {\n            e3 || se(\"Assertion failed: \" + t2);\n          }\n          var F = 1;\n          var C, q, T, R, W, L, O, j = \"undefined\" != typeof TextDecoder ? new TextDecoder(\"utf8\") : void 0;\n          function $(e3, t2, r3) {\n            for (var n2 = t2 + r3, o2 = t2; e3[o2] && !(o2 >= n2); )\n              ++o2;\n            if (o2 - t2 > 16 && e3.subarray && j)\n              return j.decode(e3.subarray(t2, o2));\n            for (var s2 = \"\"; t2 < o2; ) {\n              var _2 = e3[t2++];\n              if (128 & _2) {\n                var a2 = 63 & e3[t2++];\n                if (192 != (224 & _2)) {\n                  var i2 = 63 & e3[t2++];\n                  if ((_2 = 224 == (240 & _2) ? (15 & _2) << 12 | a2 << 6 | i2 : (7 & _2) << 18 | a2 << 12 | i2 << 6 | 63 & e3[t2++]) < 65536)\n                    s2 += String.fromCharCode(_2);\n                  else {\n                    var u2 = _2 - 65536;\n                    s2 += String.fromCharCode(55296 | u2 >> 10, 56320 | 1023 & u2);\n                  }\n                } else\n                  s2 += String.fromCharCode((31 & _2) << 6 | a2);\n              } else\n                s2 += String.fromCharCode(_2);\n            }\n            return s2;\n          }\n          function Z(e3, t2) {\n            return e3 ? $(T, e3, t2) : \"\";\n          }\n          function D(e3, t2, r3, n2) {\n            if (!(n2 > 0))\n              return 0;\n            for (var o2 = r3, s2 = r3 + n2 - 1, _2 = 0; _2 < e3.length; ++_2) {\n              var a2 = e3.charCodeAt(_2);\n              if (a2 >= 55296 && a2 <= 57343)\n                a2 = 65536 + ((1023 & a2) << 10) | 1023 & e3.charCodeAt(++_2);\n              if (a2 <= 127) {\n                if (r3 >= s2)\n                  break;\n                t2[r3++] = a2;\n              } else if (a2 <= 2047) {\n                if (r3 + 1 >= s2)\n                  break;\n                t2[r3++] = 192 | a2 >> 6, t2[r3++] = 128 | 63 & a2;\n              } else if (a2 <= 65535) {\n                if (r3 + 2 >= s2)\n                  break;\n                t2[r3++] = 224 | a2 >> 12, t2[r3++] = 128 | a2 >> 6 & 63, t2[r3++] = 128 | 63 & a2;\n              } else {\n                if (r3 + 3 >= s2)\n                  break;\n                t2[r3++] = 240 | a2 >> 18, t2[r3++] = 128 | a2 >> 12 & 63, t2[r3++] = 128 | a2 >> 6 & 63, t2[r3++] = 128 | 63 & a2;\n              }\n            }\n            return t2[r3] = 0, r3 - o2;\n          }\n          function z(e3, t2, r3) {\n            return D(e3, T, t2, r3);\n          }\n          function U(e3) {\n            for (var t2 = 0, r3 = 0; r3 < e3.length; ++r3) {\n              var n2 = e3.charCodeAt(r3);\n              n2 >= 55296 && n2 <= 57343 && (n2 = 65536 + ((1023 & n2) << 10) | 1023 & e3.charCodeAt(++r3)), n2 <= 127 ? ++t2 : t2 += n2 <= 2047 ? 2 : n2 <= 65535 ? 3 : 4;\n            }\n            return t2;\n          }\n          function H(e3) {\n            var t2 = U(e3) + 1, r3 = Be(t2);\n            return D(e3, q, r3, t2), r3;\n          }\n          function G(e3) {\n            C = e3, Module.HEAP8 = q = new Int8Array(e3), Module.HEAP16 = R = new Int16Array(e3), Module.HEAP32 = W = new Int32Array(e3), Module.HEAPU8 = T = new Uint8Array(e3), Module.HEAPU16 = new Uint16Array(e3), Module.HEAPU32 = new Uint32Array(e3), Module.HEAPF32 = L = new Float32Array(e3), Module.HEAPF64 = O = new Float64Array(e3);\n          }\n          var B = Module.INITIAL_MEMORY || 33554432;\n          (I = Module.wasmMemory ? Module.wasmMemory : new WebAssembly.Memory({ initial: B / 65536, maximum: 32768 })) && (C = I.buffer), B = C.byteLength, G(C);\n          var K = new WebAssembly.Table({ initial: 20, element: \"anyfunc\" }), V = [], X = [], Q = [], J = [], Y = false;\n          var ee = 0, re = null;\n          function ne(e3) {\n            ee++, Module.monitorRunDependencies && Module.monitorRunDependencies(ee);\n          }\n          function oe(e3) {\n            if (ee--, Module.monitorRunDependencies && Module.monitorRunDependencies(ee), 0 == ee && re) {\n              var t2 = re;\n              re = null, t2();\n            }\n          }\n          function se(e3) {\n            throw Module.onAbort && Module.onAbort(e3), g2(e3 += \"\"), P = true, e3 = \"abort(\" + e3 + \"). Build with -s ASSERTIONS=1 for more info.\", new WebAssembly.RuntimeError(e3);\n          }\n          Module.preloadedImages = {}, Module.preloadedAudios = {}, Module.preloadedWasm = {};\n          var _e, ae, ie, ue = \"data:application/octet-stream;base64,\";\n          function le(e3) {\n            return e3.startsWith(ue);\n          }\n          function de(e3) {\n            return e3.startsWith(\"file://\");\n          }\n          function ce(e3) {\n            try {\n              if (e3 == _e && v)\n                return new Uint8Array(v);\n              if (m)\n                return m(e3);\n              throw \"both async and sync fetching of the wasm failed\";\n            } catch (e4) {\n              se(e4);\n            }\n          }\n          le(_e = \"tree-sitter.wasm\") || (_e = function(e3) {\n            return Module.locateFile ? Module.locateFile(e3, h) : h + e3;\n          }(_e));\n          var me = {}, fe = { get: function(e3, t2) {\n            return me[t2] || (me[t2] = new WebAssembly.Global({ value: \"i32\", mutable: true })), me[t2];\n          } };\n          function pe(e3) {\n            for (; e3.length > 0; ) {\n              var t2 = e3.shift();\n              if (\"function\" != typeof t2) {\n                var r3 = t2.func;\n                \"number\" == typeof r3 ? void 0 === t2.arg ? K.get(r3)() : K.get(r3)(t2.arg) : r3(void 0 === t2.arg ? null : t2.arg);\n              } else\n                t2(Module);\n            }\n          }\n          function he(e3) {\n            var t2 = 0;\n            function r3() {\n              for (var r4 = 0, n3 = 1; ; ) {\n                var o3 = e3[t2++];\n                if (r4 += (127 & o3) * n3, n3 *= 128, !(128 & o3))\n                  break;\n              }\n              return r4;\n            }\n            if (e3 instanceof WebAssembly.Module) {\n              var n2 = WebAssembly.Module.customSections(e3, \"dylink\");\n              k(0 != n2.length, \"need dylink section\"), e3 = new Int8Array(n2[0]);\n            } else {\n              k(1836278016 == new Uint32Array(new Uint8Array(e3.subarray(0, 24)).buffer)[0], \"need to see wasm magic number\"), k(0 === e3[8], \"need the dylink section to be first\"), t2 = 9, r3(), k(6 === e3[t2]), k(e3[++t2] === \"d\".charCodeAt(0)), k(e3[++t2] === \"y\".charCodeAt(0)), k(e3[++t2] === \"l\".charCodeAt(0)), k(e3[++t2] === \"i\".charCodeAt(0)), k(e3[++t2] === \"n\".charCodeAt(0)), k(e3[++t2] === \"k\".charCodeAt(0)), t2++;\n            }\n            var o2 = {};\n            o2.memorySize = r3(), o2.memoryAlign = r3(), o2.tableSize = r3(), o2.tableAlign = r3();\n            var s2 = r3();\n            o2.neededDynlibs = [];\n            for (var _2 = 0; _2 < s2; ++_2) {\n              var a2 = r3(), i2 = e3.subarray(t2, t2 + a2);\n              t2 += a2;\n              var u2 = $(i2, 0);\n              o2.neededDynlibs.push(u2);\n            }\n            return o2;\n          }\n          var ge = 0;\n          function we() {\n            return A || ge > 0;\n          }\n          function Me(e3) {\n            return 0 == e3.indexOf(\"dynCall_\") || [\"stackAlloc\", \"stackSave\", \"stackRestore\"].includes(e3) ? e3 : \"_\" + e3;\n          }\n          function ye(e3, t2) {\n            for (var r3 in e3)\n              if (e3.hasOwnProperty(r3)) {\n                De.hasOwnProperty(r3) || (De[r3] = e3[r3]);\n                var n2 = Me(r3);\n                Module.hasOwnProperty(n2) || (Module[n2] = e3[r3]);\n              }\n          }\n          var be = { nextHandle: 1, loadedLibs: {}, loadedLibNames: {} };\n          function ve(e3, t2, r3) {\n            return e3.includes(\"j\") ? function(e4, t3, r4) {\n              var n2 = Module[\"dynCall_\" + e4];\n              return r4 && r4.length ? n2.apply(null, [t3].concat(r4)) : n2.call(null, t3);\n            }(e3, t2, r3) : K.get(t2).apply(null, r3);\n          }\n          var Ee = 5251072;\n          function Se(e3) {\n            return [\"__cpp_exception\", \"__wasm_apply_data_relocs\", \"__dso_handle\", \"__set_stack_limits\"].includes(e3);\n          }\n          function Ie(e3, t2) {\n            var r3 = {};\n            for (var n2 in e3) {\n              var o2 = e3[n2];\n              \"object\" == typeof o2 && (o2 = o2.value), \"number\" == typeof o2 && (o2 += t2), r3[n2] = o2;\n            }\n            return function(e4) {\n              for (var t3 in e4)\n                if (!Se(t3)) {\n                  var r4 = false, n3 = e4[t3];\n                  t3.startsWith(\"orig$\") && (t3 = t3.split(\"$\")[1], r4 = true), me[t3] || (me[t3] = new WebAssembly.Global({ value: \"i32\", mutable: true })), (r4 || 0 == me[t3].value) && (\"function\" == typeof n3 ? me[t3].value = b(n3) : \"number\" == typeof n3 ? me[t3].value = n3 : g2(\"unhandled export type for `\" + t3 + \"`: \" + typeof n3));\n                }\n            }(r3), r3;\n          }\n          function Ae(e3, t2) {\n            var r3, n2;\n            return t2 && (r3 = De[\"orig$\" + e3]), r3 || (r3 = De[e3]), r3 || (r3 = Module[Me(e3)]), !r3 && e3.startsWith(\"invoke_\") && (n2 = e3.split(\"_\")[1], r3 = function() {\n              var e4 = He();\n              try {\n                return ve(n2, arguments[0], Array.prototype.slice.call(arguments, 1));\n              } catch (t3) {\n                if (Ge(e4), t3 !== t3 + 0 && \"longjmp\" !== t3)\n                  throw t3;\n                Ke(1, 0);\n              }\n            }), r3;\n          }\n          function xe(e3, t2) {\n            var r3 = he(e3);\n            function n2() {\n              var n3 = Math.pow(2, r3.memoryAlign);\n              n3 = Math.max(n3, w);\n              var o2, s2, _2, a2 = (o2 = function(e4) {\n                if (Y)\n                  return ze(e4);\n                var t3 = Ee, r4 = t3 + e4 + 15 & -16;\n                return Ee = r4, me.__heap_base.value = r4, t3;\n              }(r3.memorySize + n3), (s2 = n3) || (s2 = w), Math.ceil(o2 / s2) * s2), i2 = K.length;\n              K.grow(r3.tableSize);\n              for (var u2 = a2; u2 < a2 + r3.memorySize; u2++)\n                q[u2] = 0;\n              for (u2 = i2; u2 < i2 + r3.tableSize; u2++)\n                K.set(u2, null);\n              var l2 = new Proxy({}, { get: function(e4, t3) {\n                switch (t3) {\n                  case \"__memory_base\":\n                    return a2;\n                  case \"__table_base\":\n                    return i2;\n                }\n                if (t3 in De)\n                  return De[t3];\n                var r4;\n                t3 in e4 || (e4[t3] = function() {\n                  return r4 || (r4 = function(e5) {\n                    var t4 = Ae(e5, false);\n                    return t4 || (t4 = _2[e5]), t4;\n                  }(t3)), r4.apply(null, arguments);\n                });\n                return e4[t3];\n              } }), d2 = { \"GOT.mem\": new Proxy({}, fe), \"GOT.func\": new Proxy({}, fe), env: l2, wasi_snapshot_preview1: l2 };\n              function c3(e4) {\n                for (var n4 = 0; n4 < r3.tableSize; n4++) {\n                  var o3 = K.get(i2 + n4);\n                  o3 && M.set(o3, i2 + n4);\n                }\n                _2 = Ie(e4.exports, a2), t2.allowUndefined || Pe();\n                var s3 = _2.__wasm_call_ctors;\n                return s3 || (s3 = _2.__post_instantiate), s3 && (Y ? s3() : X.push(s3)), _2;\n              }\n              if (t2.loadAsync) {\n                if (e3 instanceof WebAssembly.Module) {\n                  var m2 = new WebAssembly.Instance(e3, d2);\n                  return Promise.resolve(c3(m2));\n                }\n                return WebAssembly.instantiate(e3, d2).then(function(e4) {\n                  return c3(e4.instance);\n                });\n              }\n              var f2 = e3 instanceof WebAssembly.Module ? e3 : new WebAssembly.Module(e3);\n              return c3(m2 = new WebAssembly.Instance(f2, d2));\n            }\n            return t2.loadAsync ? r3.neededDynlibs.reduce(function(e4, r4) {\n              return e4.then(function() {\n                return Ne(r4, t2);\n              });\n            }, Promise.resolve()).then(function() {\n              return n2();\n            }) : (r3.neededDynlibs.forEach(function(e4) {\n              Ne(e4, t2);\n            }), n2());\n          }\n          function Ne(e3, t2) {\n            \"__main__\" != e3 || be.loadedLibNames[e3] || (be.loadedLibs[-1] = { refcount: 1 / 0, name: \"__main__\", module: Module.asm, global: true }, be.loadedLibNames.__main__ = -1), t2 = t2 || { global: true, nodelete: true };\n            var r3, n2 = be.loadedLibNames[e3];\n            if (n2)\n              return r3 = be.loadedLibs[n2], t2.global && !r3.global && (r3.global = true, \"loading\" !== r3.module && ye(r3.module)), t2.nodelete && r3.refcount !== 1 / 0 && (r3.refcount = 1 / 0), r3.refcount++, t2.loadAsync ? Promise.resolve(n2) : n2;\n            function o2(e4) {\n              if (t2.fs) {\n                var r4 = t2.fs.readFile(e4, { encoding: \"binary\" });\n                return r4 instanceof Uint8Array || (r4 = new Uint8Array(r4)), t2.loadAsync ? Promise.resolve(r4) : r4;\n              }\n              return t2.loadAsync ? (n3 = e4, fetch(n3, { credentials: \"same-origin\" }).then(function(e5) {\n                if (!e5.ok)\n                  throw \"failed to load binary file at '\" + n3 + \"'\";\n                return e5.arrayBuffer();\n              }).then(function(e5) {\n                return new Uint8Array(e5);\n              })) : m(e4);\n              var n3;\n            }\n            function s2() {\n              if (void 0 !== Module.preloadedWasm && void 0 !== Module.preloadedWasm[e3]) {\n                var r4 = Module.preloadedWasm[e3];\n                return t2.loadAsync ? Promise.resolve(r4) : r4;\n              }\n              return t2.loadAsync ? o2(e3).then(function(e4) {\n                return xe(e4, t2);\n              }) : xe(o2(e3), t2);\n            }\n            function _2(e4) {\n              r3.global && ye(e4), r3.module = e4;\n            }\n            return n2 = be.nextHandle++, r3 = { refcount: t2.nodelete ? 1 / 0 : 1, name: e3, module: \"loading\", global: t2.global }, be.loadedLibNames[e3] = n2, be.loadedLibs[n2] = r3, t2.loadAsync ? s2().then(function(e4) {\n              return _2(e4), n2;\n            }) : (_2(s2()), n2);\n          }\n          function Pe() {\n            for (var e3 in me)\n              if (0 == me[e3].value) {\n                var t2 = Ae(e3, true);\n                \"function\" == typeof t2 ? me[e3].value = b(t2, t2.sig) : \"number\" == typeof t2 ? me[e3].value = t2 : k(false, \"bad export type for `\" + e3 + \"`: \" + typeof t2);\n              }\n          }\n          Module.___heap_base = Ee;\n          var ke, Fe = new WebAssembly.Global({ value: \"i32\", mutable: true }, 5251072);\n          function Ce() {\n            se();\n          }\n          Module._abort = Ce, Ce.sig = \"v\", ke = o ? function() {\n            var e3 = process.hrtime();\n            return 1e3 * e3[0] + e3[1] / 1e6;\n          } : \"undefined\" != typeof dateNow ? dateNow : function() {\n            return performance.now();\n          };\n          var qe = true;\n          function Te(e3, t2) {\n            var r3, n2;\n            if (0 === e3)\n              r3 = Date.now();\n            else {\n              if (1 !== e3 && 4 !== e3 || !qe)\n                return n2 = 28, W[Ue() >> 2] = n2, -1;\n              r3 = ke();\n            }\n            return W[t2 >> 2] = r3 / 1e3 | 0, W[t2 + 4 >> 2] = r3 % 1e3 * 1e3 * 1e3 | 0, 0;\n          }\n          function Re(e3) {\n            try {\n              return I.grow(e3 - C.byteLength + 65535 >>> 16), G(I.buffer), 1;\n            } catch (e4) {\n            }\n          }\n          function We(e3) {\n            Je(e3);\n          }\n          Te.sig = \"iii\", We.sig = \"vi\";\n          var Le = { mappings: {}, DEFAULT_POLLMASK: 5, umask: 511, calculateAt: function(e3, t2, r3) {\n            if (\"/\" === t2[0])\n              return t2;\n            var n2;\n            if (-100 === e3)\n              n2 = FS.cwd();\n            else {\n              var o2 = FS.getStream(e3);\n              if (!o2)\n                throw new FS.ErrnoError(8);\n              n2 = o2.path;\n            }\n            if (0 == t2.length) {\n              if (!r3)\n                throw new FS.ErrnoError(44);\n              return n2;\n            }\n            return PATH.join2(n2, t2);\n          }, doStat: function(e3, t2, r3) {\n            try {\n              var n2 = e3(t2);\n            } catch (e4) {\n              if (e4 && e4.node && PATH.normalize(t2) !== PATH.normalize(FS.getPath(e4.node)))\n                return -54;\n              throw e4;\n            }\n            return W[r3 >> 2] = n2.dev, W[r3 + 4 >> 2] = 0, W[r3 + 8 >> 2] = n2.ino, W[r3 + 12 >> 2] = n2.mode, W[r3 + 16 >> 2] = n2.nlink, W[r3 + 20 >> 2] = n2.uid, W[r3 + 24 >> 2] = n2.gid, W[r3 + 28 >> 2] = n2.rdev, W[r3 + 32 >> 2] = 0, ie = [n2.size >>> 0, (ae = n2.size, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[r3 + 40 >> 2] = ie[0], W[r3 + 44 >> 2] = ie[1], W[r3 + 48 >> 2] = 4096, W[r3 + 52 >> 2] = n2.blocks, W[r3 + 56 >> 2] = n2.atime.getTime() / 1e3 | 0, W[r3 + 60 >> 2] = 0, W[r3 + 64 >> 2] = n2.mtime.getTime() / 1e3 | 0, W[r3 + 68 >> 2] = 0, W[r3 + 72 >> 2] = n2.ctime.getTime() / 1e3 | 0, W[r3 + 76 >> 2] = 0, ie = [n2.ino >>> 0, (ae = n2.ino, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[r3 + 80 >> 2] = ie[0], W[r3 + 84 >> 2] = ie[1], 0;\n          }, doMsync: function(e3, t2, r3, n2, o2) {\n            var s2 = T.slice(e3, e3 + r3);\n            FS.msync(t2, s2, o2, r3, n2);\n          }, doMkdir: function(e3, t2) {\n            return \"/\" === (e3 = PATH.normalize(e3))[e3.length - 1] && (e3 = e3.substr(0, e3.length - 1)), FS.mkdir(e3, t2, 0), 0;\n          }, doMknod: function(e3, t2, r3) {\n            switch (61440 & t2) {\n              case 32768:\n              case 8192:\n              case 24576:\n              case 4096:\n              case 49152:\n                break;\n              default:\n                return -28;\n            }\n            return FS.mknod(e3, t2, r3), 0;\n          }, doReadlink: function(e3, t2, r3) {\n            if (r3 <= 0)\n              return -28;\n            var n2 = FS.readlink(e3), o2 = Math.min(r3, U(n2)), s2 = q[t2 + o2];\n            return z(n2, t2, r3 + 1), q[t2 + o2] = s2, o2;\n          }, doAccess: function(e3, t2) {\n            if (-8 & t2)\n              return -28;\n            var r3;\n            if (!(r3 = FS.lookupPath(e3, { follow: true }).node))\n              return -44;\n            var n2 = \"\";\n            return 4 & t2 && (n2 += \"r\"), 2 & t2 && (n2 += \"w\"), 1 & t2 && (n2 += \"x\"), n2 && FS.nodePermissions(r3, n2) ? -2 : 0;\n          }, doDup: function(e3, t2, r3) {\n            var n2 = FS.getStream(r3);\n            return n2 && FS.close(n2), FS.open(e3, t2, 0, r3, r3).fd;\n          }, doReadv: function(e3, t2, r3, n2) {\n            for (var o2 = 0, s2 = 0; s2 < r3; s2++) {\n              var _2 = W[t2 + 8 * s2 >> 2], a2 = W[t2 + (8 * s2 + 4) >> 2], i2 = FS.read(e3, q, _2, a2, n2);\n              if (i2 < 0)\n                return -1;\n              if (o2 += i2, i2 < a2)\n                break;\n            }\n            return o2;\n          }, doWritev: function(e3, t2, r3, n2) {\n            for (var o2 = 0, s2 = 0; s2 < r3; s2++) {\n              var _2 = W[t2 + 8 * s2 >> 2], a2 = W[t2 + (8 * s2 + 4) >> 2], i2 = FS.write(e3, q, _2, a2, n2);\n              if (i2 < 0)\n                return -1;\n              o2 += i2;\n            }\n            return o2;\n          }, varargs: void 0, get: function() {\n            return Le.varargs += 4, W[Le.varargs - 4 >> 2];\n          }, getStr: function(e3) {\n            return Z(e3);\n          }, getStreamFromFD: function(e3) {\n            var t2 = FS.getStream(e3);\n            if (!t2)\n              throw new FS.ErrnoError(8);\n            return t2;\n          }, get64: function(e3, t2) {\n            return e3;\n          } };\n          function Oe(e3) {\n            try {\n              var t2 = Le.getStreamFromFD(e3);\n              return FS.close(t2), 0;\n            } catch (e4) {\n              return \"undefined\" != typeof FS && e4 instanceof FS.ErrnoError || se(e4), e4.errno;\n            }\n          }\n          function je(e3, t2, r3, n2) {\n            try {\n              var o2 = Le.getStreamFromFD(e3), s2 = Le.doWritev(o2, t2, r3);\n              return W[n2 >> 2] = s2, 0;\n            } catch (e4) {\n              return \"undefined\" != typeof FS && e4 instanceof FS.ErrnoError || se(e4), e4.errno;\n            }\n          }\n          function $e(e3) {\n          }\n          Oe.sig = \"ii\", je.sig = \"iiiii\", $e.sig = \"vi\";\n          var Ze, De = { __heap_base: Ee, __indirect_function_table: K, __memory_base: 1024, __stack_pointer: Fe, __table_base: 1, abort: Ce, clock_gettime: Te, emscripten_memcpy_big: function(e3, t2, r3) {\n            T.copyWithin(e3, t2, t2 + r3);\n          }, emscripten_resize_heap: function(e3) {\n            var t2, r3, n2 = T.length;\n            if ((e3 >>>= 0) > 2147483648)\n              return false;\n            for (var o2 = 1; o2 <= 4; o2 *= 2) {\n              var s2 = n2 * (1 + 0.2 / o2);\n              if (s2 = Math.min(s2, e3 + 100663296), Re(Math.min(2147483648, ((t2 = Math.max(e3, s2)) % (r3 = 65536) > 0 && (t2 += r3 - t2 % r3), t2))))\n                return true;\n            }\n            return false;\n          }, exit: We, fd_close: Oe, fd_seek: function(e3, t2, r3, n2, o2) {\n            try {\n              var s2 = Le.getStreamFromFD(e3), _2 = 4294967296 * r3 + (t2 >>> 0);\n              return _2 <= -9007199254740992 || _2 >= 9007199254740992 ? -61 : (FS.llseek(s2, _2, n2), ie = [s2.position >>> 0, (ae = s2.position, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[o2 >> 2] = ie[0], W[o2 + 4 >> 2] = ie[1], s2.getdents && 0 === _2 && 0 === n2 && (s2.getdents = null), 0);\n            } catch (e4) {\n              return \"undefined\" != typeof FS && e4 instanceof FS.ErrnoError || se(e4), e4.errno;\n            }\n          }, fd_write: je, memory: I, setTempRet0: $e, tree_sitter_log_callback: function(e3, t2) {\n            if (pt) {\n              const r3 = Z(t2);\n              pt(r3, 0 !== e3);\n            }\n          }, tree_sitter_parse_callback: function(e3, t2, r3, n2, o2) {\n            var s2 = ft(t2, { row: r3, column: n2 });\n            \"string\" == typeof s2 ? (x(o2, s2.length, \"i32\"), function(e4, t3, r4) {\n              if (void 0 === r4 && (r4 = 2147483647), r4 < 2)\n                return 0;\n              for (var n3 = (r4 -= 2) < 2 * e4.length ? r4 / 2 : e4.length, o3 = 0; o3 < n3; ++o3) {\n                var s3 = e4.charCodeAt(o3);\n                R[t3 >> 1] = s3, t3 += 2;\n              }\n              R[t3 >> 1] = 0;\n            }(s2, e3, 10240)) : x(o2, 0, \"i32\");\n          } }, ze = (function() {\n            var e3 = { env: De, wasi_snapshot_preview1: De, \"GOT.mem\": new Proxy(De, fe), \"GOT.func\": new Proxy(De, fe) };\n            function t2(e4, t3) {\n              var r4 = e4.exports;\n              r4 = Ie(r4, 1024), Module.asm = r4;\n              var n3, o2 = he(t3);\n              o2.neededDynlibs && (S = o2.neededDynlibs.concat(S)), ye(r4), n3 = Module.asm.__wasm_call_ctors, X.unshift(n3), oe();\n            }\n            function r3(e4) {\n              t2(e4.instance, e4.module);\n            }\n            function n2(t3) {\n              return function() {\n                if (!v && (u || l)) {\n                  if (\"function\" == typeof fetch && !de(_e))\n                    return fetch(_e, { credentials: \"same-origin\" }).then(function(e4) {\n                      if (!e4.ok)\n                        throw \"failed to load wasm binary file at '\" + _e + \"'\";\n                      return e4.arrayBuffer();\n                    }).catch(function() {\n                      return ce(_e);\n                    });\n                  if (c2)\n                    return new Promise(function(e4, t4) {\n                      c2(_e, function(t5) {\n                        e4(new Uint8Array(t5));\n                      }, t4);\n                    });\n                }\n                return Promise.resolve().then(function() {\n                  return ce(_e);\n                });\n              }().then(function(t4) {\n                return WebAssembly.instantiate(t4, e3);\n              }).then(t3, function(e4) {\n                g2(\"failed to asynchronously prepare wasm: \" + e4), se(e4);\n              });\n            }\n            if (ne(), Module.instantiateWasm)\n              try {\n                return Module.instantiateWasm(e3, t2);\n              } catch (e4) {\n                return g2(\"Module.instantiateWasm callback failed with error: \" + e4), false;\n              }\n            v || \"function\" != typeof WebAssembly.instantiateStreaming || le(_e) || de(_e) || \"function\" != typeof fetch ? n2(r3) : fetch(_e, { credentials: \"same-origin\" }).then(function(t3) {\n              return WebAssembly.instantiateStreaming(t3, e3).then(r3, function(e4) {\n                return g2(\"wasm streaming compile failed: \" + e4), g2(\"falling back to ArrayBuffer instantiation\"), n2(r3);\n              });\n            });\n          }(), Module.___wasm_call_ctors = function() {\n            return (Module.___wasm_call_ctors = Module.asm.__wasm_call_ctors).apply(null, arguments);\n          }, Module._malloc = function() {\n            return (ze = Module._malloc = Module.asm.malloc).apply(null, arguments);\n          }), Ue = (Module._calloc = function() {\n            return (Module._calloc = Module.asm.calloc).apply(null, arguments);\n          }, Module._realloc = function() {\n            return (Module._realloc = Module.asm.realloc).apply(null, arguments);\n          }, Module._free = function() {\n            return (Module._free = Module.asm.free).apply(null, arguments);\n          }, Module._ts_language_symbol_count = function() {\n            return (Module._ts_language_symbol_count = Module.asm.ts_language_symbol_count).apply(null, arguments);\n          }, Module._ts_language_version = function() {\n            return (Module._ts_language_version = Module.asm.ts_language_version).apply(null, arguments);\n          }, Module._ts_language_field_count = function() {\n            return (Module._ts_language_field_count = Module.asm.ts_language_field_count).apply(null, arguments);\n          }, Module._ts_language_symbol_name = function() {\n            return (Module._ts_language_symbol_name = Module.asm.ts_language_symbol_name).apply(null, arguments);\n          }, Module._ts_language_symbol_for_name = function() {\n            return (Module._ts_language_symbol_for_name = Module.asm.ts_language_symbol_for_name).apply(null, arguments);\n          }, Module._ts_language_symbol_type = function() {\n            return (Module._ts_language_symbol_type = Module.asm.ts_language_symbol_type).apply(null, arguments);\n          }, Module._ts_language_field_name_for_id = function() {\n            return (Module._ts_language_field_name_for_id = Module.asm.ts_language_field_name_for_id).apply(null, arguments);\n          }, Module._memcpy = function() {\n            return (Module._memcpy = Module.asm.memcpy).apply(null, arguments);\n          }, Module._ts_parser_delete = function() {\n            return (Module._ts_parser_delete = Module.asm.ts_parser_delete).apply(null, arguments);\n          }, Module._ts_parser_reset = function() {\n            return (Module._ts_parser_reset = Module.asm.ts_parser_reset).apply(null, arguments);\n          }, Module._ts_parser_set_language = function() {\n            return (Module._ts_parser_set_language = Module.asm.ts_parser_set_language).apply(null, arguments);\n          }, Module._ts_parser_timeout_micros = function() {\n            return (Module._ts_parser_timeout_micros = Module.asm.ts_parser_timeout_micros).apply(null, arguments);\n          }, Module._ts_parser_set_timeout_micros = function() {\n            return (Module._ts_parser_set_timeout_micros = Module.asm.ts_parser_set_timeout_micros).apply(null, arguments);\n          }, Module._memmove = function() {\n            return (Module._memmove = Module.asm.memmove).apply(null, arguments);\n          }, Module._memcmp = function() {\n            return (Module._memcmp = Module.asm.memcmp).apply(null, arguments);\n          }, Module._ts_query_new = function() {\n            return (Module._ts_query_new = Module.asm.ts_query_new).apply(null, arguments);\n          }, Module._ts_query_delete = function() {\n            return (Module._ts_query_delete = Module.asm.ts_query_delete).apply(null, arguments);\n          }, Module._iswspace = function() {\n            return (Module._iswspace = Module.asm.iswspace).apply(null, arguments);\n          }, Module._iswalnum = function() {\n            return (Module._iswalnum = Module.asm.iswalnum).apply(null, arguments);\n          }, Module._ts_query_pattern_count = function() {\n            return (Module._ts_query_pattern_count = Module.asm.ts_query_pattern_count).apply(null, arguments);\n          }, Module._ts_query_capture_count = function() {\n            return (Module._ts_query_capture_count = Module.asm.ts_query_capture_count).apply(null, arguments);\n          }, Module._ts_query_string_count = function() {\n            return (Module._ts_query_string_count = Module.asm.ts_query_string_count).apply(null, arguments);\n          }, Module._ts_query_capture_name_for_id = function() {\n            return (Module._ts_query_capture_name_for_id = Module.asm.ts_query_capture_name_for_id).apply(null, arguments);\n          }, Module._ts_query_string_value_for_id = function() {\n            return (Module._ts_query_string_value_for_id = Module.asm.ts_query_string_value_for_id).apply(null, arguments);\n          }, Module._ts_query_predicates_for_pattern = function() {\n            return (Module._ts_query_predicates_for_pattern = Module.asm.ts_query_predicates_for_pattern).apply(null, arguments);\n          }, Module._ts_tree_copy = function() {\n            return (Module._ts_tree_copy = Module.asm.ts_tree_copy).apply(null, arguments);\n          }, Module._ts_tree_delete = function() {\n            return (Module._ts_tree_delete = Module.asm.ts_tree_delete).apply(null, arguments);\n          }, Module._ts_init = function() {\n            return (Module._ts_init = Module.asm.ts_init).apply(null, arguments);\n          }, Module._ts_parser_new_wasm = function() {\n            return (Module._ts_parser_new_wasm = Module.asm.ts_parser_new_wasm).apply(null, arguments);\n          }, Module._ts_parser_enable_logger_wasm = function() {\n            return (Module._ts_parser_enable_logger_wasm = Module.asm.ts_parser_enable_logger_wasm).apply(null, arguments);\n          }, Module._ts_parser_parse_wasm = function() {\n            return (Module._ts_parser_parse_wasm = Module.asm.ts_parser_parse_wasm).apply(null, arguments);\n          }, Module._ts_language_type_is_named_wasm = function() {\n            return (Module._ts_language_type_is_named_wasm = Module.asm.ts_language_type_is_named_wasm).apply(null, arguments);\n          }, Module._ts_language_type_is_visible_wasm = function() {\n            return (Module._ts_language_type_is_visible_wasm = Module.asm.ts_language_type_is_visible_wasm).apply(null, arguments);\n          }, Module._ts_tree_root_node_wasm = function() {\n            return (Module._ts_tree_root_node_wasm = Module.asm.ts_tree_root_node_wasm).apply(null, arguments);\n          }, Module._ts_tree_edit_wasm = function() {\n            return (Module._ts_tree_edit_wasm = Module.asm.ts_tree_edit_wasm).apply(null, arguments);\n          }, Module._ts_tree_get_changed_ranges_wasm = function() {\n            return (Module._ts_tree_get_changed_ranges_wasm = Module.asm.ts_tree_get_changed_ranges_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_new_wasm = function() {\n            return (Module._ts_tree_cursor_new_wasm = Module.asm.ts_tree_cursor_new_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_delete_wasm = function() {\n            return (Module._ts_tree_cursor_delete_wasm = Module.asm.ts_tree_cursor_delete_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_reset_wasm = function() {\n            return (Module._ts_tree_cursor_reset_wasm = Module.asm.ts_tree_cursor_reset_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_goto_first_child_wasm = function() {\n            return (Module._ts_tree_cursor_goto_first_child_wasm = Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_goto_next_sibling_wasm = function() {\n            return (Module._ts_tree_cursor_goto_next_sibling_wasm = Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_goto_parent_wasm = function() {\n            return (Module._ts_tree_cursor_goto_parent_wasm = Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_current_node_type_id_wasm = function() {\n            return (Module._ts_tree_cursor_current_node_type_id_wasm = Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_current_node_is_named_wasm = function() {\n            return (Module._ts_tree_cursor_current_node_is_named_wasm = Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_current_node_is_missing_wasm = function() {\n            return (Module._ts_tree_cursor_current_node_is_missing_wasm = Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_current_node_id_wasm = function() {\n            return (Module._ts_tree_cursor_current_node_id_wasm = Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_start_position_wasm = function() {\n            return (Module._ts_tree_cursor_start_position_wasm = Module.asm.ts_tree_cursor_start_position_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_end_position_wasm = function() {\n            return (Module._ts_tree_cursor_end_position_wasm = Module.asm.ts_tree_cursor_end_position_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_start_index_wasm = function() {\n            return (Module._ts_tree_cursor_start_index_wasm = Module.asm.ts_tree_cursor_start_index_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_end_index_wasm = function() {\n            return (Module._ts_tree_cursor_end_index_wasm = Module.asm.ts_tree_cursor_end_index_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_current_field_id_wasm = function() {\n            return (Module._ts_tree_cursor_current_field_id_wasm = Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null, arguments);\n          }, Module._ts_tree_cursor_current_node_wasm = function() {\n            return (Module._ts_tree_cursor_current_node_wasm = Module.asm.ts_tree_cursor_current_node_wasm).apply(null, arguments);\n          }, Module._ts_node_symbol_wasm = function() {\n            return (Module._ts_node_symbol_wasm = Module.asm.ts_node_symbol_wasm).apply(null, arguments);\n          }, Module._ts_node_child_count_wasm = function() {\n            return (Module._ts_node_child_count_wasm = Module.asm.ts_node_child_count_wasm).apply(null, arguments);\n          }, Module._ts_node_named_child_count_wasm = function() {\n            return (Module._ts_node_named_child_count_wasm = Module.asm.ts_node_named_child_count_wasm).apply(null, arguments);\n          }, Module._ts_node_child_wasm = function() {\n            return (Module._ts_node_child_wasm = Module.asm.ts_node_child_wasm).apply(null, arguments);\n          }, Module._ts_node_named_child_wasm = function() {\n            return (Module._ts_node_named_child_wasm = Module.asm.ts_node_named_child_wasm).apply(null, arguments);\n          }, Module._ts_node_child_by_field_id_wasm = function() {\n            return (Module._ts_node_child_by_field_id_wasm = Module.asm.ts_node_child_by_field_id_wasm).apply(null, arguments);\n          }, Module._ts_node_next_sibling_wasm = function() {\n            return (Module._ts_node_next_sibling_wasm = Module.asm.ts_node_next_sibling_wasm).apply(null, arguments);\n          }, Module._ts_node_prev_sibling_wasm = function() {\n            return (Module._ts_node_prev_sibling_wasm = Module.asm.ts_node_prev_sibling_wasm).apply(null, arguments);\n          }, Module._ts_node_next_named_sibling_wasm = function() {\n            return (Module._ts_node_next_named_sibling_wasm = Module.asm.ts_node_next_named_sibling_wasm).apply(null, arguments);\n          }, Module._ts_node_prev_named_sibling_wasm = function() {\n            return (Module._ts_node_prev_named_sibling_wasm = Module.asm.ts_node_prev_named_sibling_wasm).apply(null, arguments);\n          }, Module._ts_node_parent_wasm = function() {\n            return (Module._ts_node_parent_wasm = Module.asm.ts_node_parent_wasm).apply(null, arguments);\n          }, Module._ts_node_descendant_for_index_wasm = function() {\n            return (Module._ts_node_descendant_for_index_wasm = Module.asm.ts_node_descendant_for_index_wasm).apply(null, arguments);\n          }, Module._ts_node_named_descendant_for_index_wasm = function() {\n            return (Module._ts_node_named_descendant_for_index_wasm = Module.asm.ts_node_named_descendant_for_index_wasm).apply(null, arguments);\n          }, Module._ts_node_descendant_for_position_wasm = function() {\n            return (Module._ts_node_descendant_for_position_wasm = Module.asm.ts_node_descendant_for_position_wasm).apply(null, arguments);\n          }, Module._ts_node_named_descendant_for_position_wasm = function() {\n            return (Module._ts_node_named_descendant_for_position_wasm = Module.asm.ts_node_named_descendant_for_position_wasm).apply(null, arguments);\n          }, Module._ts_node_start_point_wasm = function() {\n            return (Module._ts_node_start_point_wasm = Module.asm.ts_node_start_point_wasm).apply(null, arguments);\n          }, Module._ts_node_end_point_wasm = function() {\n            return (Module._ts_node_end_point_wasm = Module.asm.ts_node_end_point_wasm).apply(null, arguments);\n          }, Module._ts_node_start_index_wasm = function() {\n            return (Module._ts_node_start_index_wasm = Module.asm.ts_node_start_index_wasm).apply(null, arguments);\n          }, Module._ts_node_end_index_wasm = function() {\n            return (Module._ts_node_end_index_wasm = Module.asm.ts_node_end_index_wasm).apply(null, arguments);\n          }, Module._ts_node_to_string_wasm = function() {\n            return (Module._ts_node_to_string_wasm = Module.asm.ts_node_to_string_wasm).apply(null, arguments);\n          }, Module._ts_node_children_wasm = function() {\n            return (Module._ts_node_children_wasm = Module.asm.ts_node_children_wasm).apply(null, arguments);\n          }, Module._ts_node_named_children_wasm = function() {\n            return (Module._ts_node_named_children_wasm = Module.asm.ts_node_named_children_wasm).apply(null, arguments);\n          }, Module._ts_node_descendants_of_type_wasm = function() {\n            return (Module._ts_node_descendants_of_type_wasm = Module.asm.ts_node_descendants_of_type_wasm).apply(null, arguments);\n          }, Module._ts_node_is_named_wasm = function() {\n            return (Module._ts_node_is_named_wasm = Module.asm.ts_node_is_named_wasm).apply(null, arguments);\n          }, Module._ts_node_has_changes_wasm = function() {\n            return (Module._ts_node_has_changes_wasm = Module.asm.ts_node_has_changes_wasm).apply(null, arguments);\n          }, Module._ts_node_has_error_wasm = function() {\n            return (Module._ts_node_has_error_wasm = Module.asm.ts_node_has_error_wasm).apply(null, arguments);\n          }, Module._ts_node_is_missing_wasm = function() {\n            return (Module._ts_node_is_missing_wasm = Module.asm.ts_node_is_missing_wasm).apply(null, arguments);\n          }, Module._ts_query_matches_wasm = function() {\n            return (Module._ts_query_matches_wasm = Module.asm.ts_query_matches_wasm).apply(null, arguments);\n          }, Module._ts_query_captures_wasm = function() {\n            return (Module._ts_query_captures_wasm = Module.asm.ts_query_captures_wasm).apply(null, arguments);\n          }, Module._iswdigit = function() {\n            return (Module._iswdigit = Module.asm.iswdigit).apply(null, arguments);\n          }, Module._iswalpha = function() {\n            return (Module._iswalpha = Module.asm.iswalpha).apply(null, arguments);\n          }, Module._iswlower = function() {\n            return (Module._iswlower = Module.asm.iswlower).apply(null, arguments);\n          }, Module._towupper = function() {\n            return (Module._towupper = Module.asm.towupper).apply(null, arguments);\n          }, Module.___errno_location = function() {\n            return (Ue = Module.___errno_location = Module.asm.__errno_location).apply(null, arguments);\n          }), He = (Module._memchr = function() {\n            return (Module._memchr = Module.asm.memchr).apply(null, arguments);\n          }, Module._strlen = function() {\n            return (Module._strlen = Module.asm.strlen).apply(null, arguments);\n          }, Module.stackSave = function() {\n            return (He = Module.stackSave = Module.asm.stackSave).apply(null, arguments);\n          }), Ge = Module.stackRestore = function() {\n            return (Ge = Module.stackRestore = Module.asm.stackRestore).apply(null, arguments);\n          }, Be = Module.stackAlloc = function() {\n            return (Be = Module.stackAlloc = Module.asm.stackAlloc).apply(null, arguments);\n          }, Ke = Module._setThrew = function() {\n            return (Ke = Module._setThrew = Module.asm.setThrew).apply(null, arguments);\n          };\n          Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = function() {\n            return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null, arguments);\n          }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = function() {\n            return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null, arguments);\n          }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = function() {\n            return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null, arguments);\n          }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = function() {\n            return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null, arguments);\n          }, Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = function() {\n            return (Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null, arguments);\n          }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = function() {\n            return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null, arguments);\n          }, Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = function() {\n            return (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null, arguments);\n          }, Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = function() {\n            return (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null, arguments);\n          }, Module.__Znwm = function() {\n            return (Module.__Znwm = Module.asm._Znwm).apply(null, arguments);\n          }, Module.__ZdlPv = function() {\n            return (Module.__ZdlPv = Module.asm._ZdlPv).apply(null, arguments);\n          }, Module.dynCall_jiji = function() {\n            return (Module.dynCall_jiji = Module.asm.dynCall_jiji).apply(null, arguments);\n          }, Module._orig$ts_parser_timeout_micros = function() {\n            return (Module._orig$ts_parser_timeout_micros = Module.asm.orig$ts_parser_timeout_micros).apply(null, arguments);\n          }, Module._orig$ts_parser_set_timeout_micros = function() {\n            return (Module._orig$ts_parser_set_timeout_micros = Module.asm.orig$ts_parser_set_timeout_micros).apply(null, arguments);\n          };\n          function Ve(e3) {\n            this.name = \"ExitStatus\", this.message = \"Program terminated with exit(\" + e3 + \")\", this.status = e3;\n          }\n          Module.allocate = function(e3, t2) {\n            var r3;\n            return r3 = t2 == F ? Be(e3.length) : ze(e3.length), e3.subarray || e3.slice ? T.set(e3, r3) : T.set(new Uint8Array(e3), r3), r3;\n          };\n          re = function e3() {\n            Ze || Qe(), Ze || (re = e3);\n          };\n          var Xe = false;\n          function Qe(e3) {\n            function t2() {\n              Ze || (Ze = true, Module.calledRun = true, P || (Y = true, pe(X), pe(Q), Module.onRuntimeInitialized && Module.onRuntimeInitialized(), Ye && function(e4) {\n                var t3 = Module._main;\n                if (t3) {\n                  var r3 = (e4 = e4 || []).length + 1, n2 = Be(4 * (r3 + 1));\n                  W[n2 >> 2] = H(a);\n                  for (var o2 = 1; o2 < r3; o2++)\n                    W[(n2 >> 2) + o2] = H(e4[o2 - 1]);\n                  W[(n2 >> 2) + r3] = 0;\n                  try {\n                    Je(t3(r3, n2), true);\n                  } catch (e5) {\n                    if (e5 instanceof Ve)\n                      return;\n                    if (\"unwind\" == e5)\n                      return;\n                    var s2 = e5;\n                    e5 && \"object\" == typeof e5 && e5.stack && (s2 = [e5, e5.stack]), g2(\"exception thrown: \" + s2), i(1, e5);\n                  } finally {\n                  }\n                }\n              }(e3), function() {\n                if (Module.postRun)\n                  for (\"function\" == typeof Module.postRun && (Module.postRun = [Module.postRun]); Module.postRun.length; )\n                    e4 = Module.postRun.shift(), J.unshift(e4);\n                var e4;\n                pe(J);\n              }()));\n            }\n            e3 = e3 || _, ee > 0 || !Xe && (function() {\n              if (S.length) {\n                if (!m)\n                  return ne(), void S.reduce(function(e4, t3) {\n                    return e4.then(function() {\n                      return Ne(t3, { loadAsync: true, global: true, nodelete: true, allowUndefined: true });\n                    });\n                  }, Promise.resolve()).then(function() {\n                    oe(), Pe();\n                  });\n                S.forEach(function(e4) {\n                  Ne(e4, { global: true, nodelete: true, allowUndefined: true });\n                }), Pe();\n              } else\n                Pe();\n            }(), Xe = true, ee > 0) || (!function() {\n              if (Module.preRun)\n                for (\"function\" == typeof Module.preRun && (Module.preRun = [Module.preRun]); Module.preRun.length; )\n                  e4 = Module.preRun.shift(), V.unshift(e4);\n              var e4;\n              pe(V);\n            }(), ee > 0 || (Module.setStatus ? (Module.setStatus(\"Running...\"), setTimeout(function() {\n              setTimeout(function() {\n                Module.setStatus(\"\");\n              }, 1), t2();\n            }, 1)) : t2()));\n          }\n          function Je(e3, t2) {\n            t2 && we() && 0 === e3 || (we() || (Module.onExit && Module.onExit(e3), P = true), i(e3, new Ve(e3)));\n          }\n          if (Module.run = Qe, Module.preInit)\n            for (\"function\" == typeof Module.preInit && (Module.preInit = [Module.preInit]); Module.preInit.length > 0; )\n              Module.preInit.pop()();\n          var Ye = true;\n          Module.noInitialRun && (Ye = false), Qe();\n          const et = Module, tt = {}, rt = 4, nt = 5 * rt, ot = 2 * rt, st = 2 * rt + 2 * ot, _t = { row: 0, column: 0 }, at = /[\\w-.]*/g, it = 1, ut = 2, lt = /^_?tree_sitter_\\w+/;\n          var dt, ct, mt, ft, pt;\n          class ParserImpl {\n            static init() {\n              mt = et._ts_init(), dt = N(mt, \"i32\"), ct = N(mt + rt, \"i32\");\n            }\n            initialize() {\n              et._ts_parser_new_wasm(), this[0] = N(mt, \"i32\"), this[1] = N(mt + rt, \"i32\");\n            }\n            delete() {\n              et._ts_parser_delete(this[0]), et._free(this[1]), this[0] = 0, this[1] = 0;\n            }\n            setLanguage(e3) {\n              let t2;\n              if (e3) {\n                if (e3.constructor !== Language)\n                  throw new Error(\"Argument must be a Language\");\n                {\n                  t2 = e3[0];\n                  const r3 = et._ts_language_version(t2);\n                  if (r3 < ct || dt < r3)\n                    throw new Error(`Incompatible language version ${r3}. Compatibility range ${ct} through ${dt}.`);\n                }\n              } else\n                t2 = 0, e3 = null;\n              return this.language = e3, et._ts_parser_set_language(this[0], t2), this;\n            }\n            getLanguage() {\n              return this.language;\n            }\n            parse(e3, t2, r3) {\n              if (\"string\" == typeof e3)\n                ft = (t3, r4, n3) => e3.slice(t3, n3);\n              else {\n                if (\"function\" != typeof e3)\n                  throw new Error(\"Argument must be a string or a function\");\n                ft = e3;\n              }\n              this.logCallback ? (pt = this.logCallback, et._ts_parser_enable_logger_wasm(this[0], 1)) : (pt = null, et._ts_parser_enable_logger_wasm(this[0], 0));\n              let n2 = 0, o2 = 0;\n              if (r3 && r3.includedRanges) {\n                n2 = r3.includedRanges.length;\n                let e4 = o2 = et._calloc(n2, st);\n                for (let t3 = 0; t3 < n2; t3++)\n                  At(e4, r3.includedRanges[t3]), e4 += st;\n              }\n              const s2 = et._ts_parser_parse_wasm(this[0], this[1], t2 ? t2[0] : 0, o2, n2);\n              if (!s2)\n                throw ft = null, pt = null, new Error(\"Parsing failed\");\n              const _2 = new Tree(tt, s2, this.language, ft);\n              return ft = null, pt = null, _2;\n            }\n            reset() {\n              et._ts_parser_reset(this[0]);\n            }\n            setTimeoutMicros(e3) {\n              et._ts_parser_set_timeout_micros(this[0], e3);\n            }\n            getTimeoutMicros() {\n              return et._ts_parser_timeout_micros(this[0]);\n            }\n            setLogger(e3) {\n              if (e3) {\n                if (\"function\" != typeof e3)\n                  throw new Error(\"Logger callback must be a function\");\n              } else\n                e3 = null;\n              return this.logCallback = e3, this;\n            }\n            getLogger() {\n              return this.logCallback;\n            }\n          }\n          class Tree {\n            constructor(e3, t2, r3, n2) {\n              wt(e3), this[0] = t2, this.language = r3, this.textCallback = n2;\n            }\n            copy() {\n              const e3 = et._ts_tree_copy(this[0]);\n              return new Tree(tt, e3, this.language, this.textCallback);\n            }\n            delete() {\n              et._ts_tree_delete(this[0]), this[0] = 0;\n            }\n            edit(e3) {\n              !function(e4) {\n                let t2 = mt;\n                St(t2, e4.startPosition), St(t2 += ot, e4.oldEndPosition), St(t2 += ot, e4.newEndPosition), x(t2 += ot, e4.startIndex, \"i32\"), x(t2 += rt, e4.oldEndIndex, \"i32\"), x(t2 += rt, e4.newEndIndex, \"i32\"), t2 += rt;\n              }(e3), et._ts_tree_edit_wasm(this[0]);\n            }\n            get rootNode() {\n              return et._ts_tree_root_node_wasm(this[0]), bt(this);\n            }\n            getLanguage() {\n              return this.language;\n            }\n            walk() {\n              return this.rootNode.walk();\n            }\n            getChangedRanges(e3) {\n              if (e3.constructor !== Tree)\n                throw new TypeError(\"Argument must be a Tree\");\n              et._ts_tree_get_changed_ranges_wasm(this[0], e3[0]);\n              const t2 = N(mt, \"i32\"), r3 = N(mt + rt, \"i32\"), n2 = new Array(t2);\n              if (t2 > 0) {\n                let e4 = r3;\n                for (let r4 = 0; r4 < t2; r4++)\n                  n2[r4] = xt(e4), e4 += st;\n                et._free(r3);\n              }\n              return n2;\n            }\n          }\n          class Node {\n            constructor(e3, t2) {\n              wt(e3), this.tree = t2;\n            }\n            get typeId() {\n              return yt(this), et._ts_node_symbol_wasm(this.tree[0]);\n            }\n            get type() {\n              return this.tree.language.types[this.typeId] || \"ERROR\";\n            }\n            get endPosition() {\n              return yt(this), et._ts_node_end_point_wasm(this.tree[0]), It(mt);\n            }\n            get endIndex() {\n              return yt(this), et._ts_node_end_index_wasm(this.tree[0]);\n            }\n            get text() {\n              return ht(this.tree, this.startIndex, this.endIndex);\n            }\n            isNamed() {\n              return yt(this), 1 === et._ts_node_is_named_wasm(this.tree[0]);\n            }\n            hasError() {\n              return yt(this), 1 === et._ts_node_has_error_wasm(this.tree[0]);\n            }\n            hasChanges() {\n              return yt(this), 1 === et._ts_node_has_changes_wasm(this.tree[0]);\n            }\n            isMissing() {\n              return yt(this), 1 === et._ts_node_is_missing_wasm(this.tree[0]);\n            }\n            equals(e3) {\n              return this.id === e3.id;\n            }\n            child(e3) {\n              return yt(this), et._ts_node_child_wasm(this.tree[0], e3), bt(this.tree);\n            }\n            namedChild(e3) {\n              return yt(this), et._ts_node_named_child_wasm(this.tree[0], e3), bt(this.tree);\n            }\n            childForFieldId(e3) {\n              return yt(this), et._ts_node_child_by_field_id_wasm(this.tree[0], e3), bt(this.tree);\n            }\n            childForFieldName(e3) {\n              const t2 = this.tree.language.fields.indexOf(e3);\n              if (-1 !== t2)\n                return this.childForFieldId(t2);\n            }\n            get childCount() {\n              return yt(this), et._ts_node_child_count_wasm(this.tree[0]);\n            }\n            get namedChildCount() {\n              return yt(this), et._ts_node_named_child_count_wasm(this.tree[0]);\n            }\n            get firstChild() {\n              return this.child(0);\n            }\n            get firstNamedChild() {\n              return this.namedChild(0);\n            }\n            get lastChild() {\n              return this.child(this.childCount - 1);\n            }\n            get lastNamedChild() {\n              return this.namedChild(this.namedChildCount - 1);\n            }\n            get children() {\n              if (!this._children) {\n                yt(this), et._ts_node_children_wasm(this.tree[0]);\n                const e3 = N(mt, \"i32\"), t2 = N(mt + rt, \"i32\");\n                if (this._children = new Array(e3), e3 > 0) {\n                  let r3 = t2;\n                  for (let t3 = 0; t3 < e3; t3++)\n                    this._children[t3] = bt(this.tree, r3), r3 += nt;\n                  et._free(t2);\n                }\n              }\n              return this._children;\n            }\n            get namedChildren() {\n              if (!this._namedChildren) {\n                yt(this), et._ts_node_named_children_wasm(this.tree[0]);\n                const e3 = N(mt, \"i32\"), t2 = N(mt + rt, \"i32\");\n                if (this._namedChildren = new Array(e3), e3 > 0) {\n                  let r3 = t2;\n                  for (let t3 = 0; t3 < e3; t3++)\n                    this._namedChildren[t3] = bt(this.tree, r3), r3 += nt;\n                  et._free(t2);\n                }\n              }\n              return this._namedChildren;\n            }\n            descendantsOfType(e3, t2, r3) {\n              Array.isArray(e3) || (e3 = [e3]), t2 || (t2 = _t), r3 || (r3 = _t);\n              const n2 = [], o2 = this.tree.language.types;\n              for (let t3 = 0, r4 = o2.length; t3 < r4; t3++)\n                e3.includes(o2[t3]) && n2.push(t3);\n              const s2 = et._malloc(rt * n2.length);\n              for (let e4 = 0, t3 = n2.length; e4 < t3; e4++)\n                x(s2 + e4 * rt, n2[e4], \"i32\");\n              yt(this), et._ts_node_descendants_of_type_wasm(this.tree[0], s2, n2.length, t2.row, t2.column, r3.row, r3.column);\n              const _2 = N(mt, \"i32\"), a2 = N(mt + rt, \"i32\"), i2 = new Array(_2);\n              if (_2 > 0) {\n                let e4 = a2;\n                for (let t3 = 0; t3 < _2; t3++)\n                  i2[t3] = bt(this.tree, e4), e4 += nt;\n              }\n              return et._free(a2), et._free(s2), i2;\n            }\n            get nextSibling() {\n              return yt(this), et._ts_node_next_sibling_wasm(this.tree[0]), bt(this.tree);\n            }\n            get previousSibling() {\n              return yt(this), et._ts_node_prev_sibling_wasm(this.tree[0]), bt(this.tree);\n            }\n            get nextNamedSibling() {\n              return yt(this), et._ts_node_next_named_sibling_wasm(this.tree[0]), bt(this.tree);\n            }\n            get previousNamedSibling() {\n              return yt(this), et._ts_node_prev_named_sibling_wasm(this.tree[0]), bt(this.tree);\n            }\n            get parent() {\n              return yt(this), et._ts_node_parent_wasm(this.tree[0]), bt(this.tree);\n            }\n            descendantForIndex(e3, t2 = e3) {\n              if (\"number\" != typeof e3 || \"number\" != typeof t2)\n                throw new Error(\"Arguments must be numbers\");\n              yt(this);\n              let r3 = mt + nt;\n              return x(r3, e3, \"i32\"), x(r3 + rt, t2, \"i32\"), et._ts_node_descendant_for_index_wasm(this.tree[0]), bt(this.tree);\n            }\n            namedDescendantForIndex(e3, t2 = e3) {\n              if (\"number\" != typeof e3 || \"number\" != typeof t2)\n                throw new Error(\"Arguments must be numbers\");\n              yt(this);\n              let r3 = mt + nt;\n              return x(r3, e3, \"i32\"), x(r3 + rt, t2, \"i32\"), et._ts_node_named_descendant_for_index_wasm(this.tree[0]), bt(this.tree);\n            }\n            descendantForPosition(e3, t2 = e3) {\n              if (!Mt(e3) || !Mt(t2))\n                throw new Error(\"Arguments must be {row, column} objects\");\n              yt(this);\n              let r3 = mt + nt;\n              return St(r3, e3), St(r3 + ot, t2), et._ts_node_descendant_for_position_wasm(this.tree[0]), bt(this.tree);\n            }\n            namedDescendantForPosition(e3, t2 = e3) {\n              if (!Mt(e3) || !Mt(t2))\n                throw new Error(\"Arguments must be {row, column} objects\");\n              yt(this);\n              let r3 = mt + nt;\n              return St(r3, e3), St(r3 + ot, t2), et._ts_node_named_descendant_for_position_wasm(this.tree[0]), bt(this.tree);\n            }\n            walk() {\n              return yt(this), et._ts_tree_cursor_new_wasm(this.tree[0]), new TreeCursor(tt, this.tree);\n            }\n            toString() {\n              yt(this);\n              const e3 = et._ts_node_to_string_wasm(this.tree[0]), t2 = function(e4) {\n                for (var t3 = \"\"; ; ) {\n                  var r3 = T[e4++ >> 0];\n                  if (!r3)\n                    return t3;\n                  t3 += String.fromCharCode(r3);\n                }\n              }(e3);\n              return et._free(e3), t2;\n            }\n          }\n          class TreeCursor {\n            constructor(e3, t2) {\n              wt(e3), this.tree = t2, Et(this);\n            }\n            delete() {\n              vt(this), et._ts_tree_cursor_delete_wasm(this.tree[0]), this[0] = this[1] = this[2] = 0;\n            }\n            reset(e3) {\n              yt(e3), vt(this, mt + nt), et._ts_tree_cursor_reset_wasm(this.tree[0]), Et(this);\n            }\n            get nodeType() {\n              return this.tree.language.types[this.nodeTypeId] || \"ERROR\";\n            }\n            get nodeTypeId() {\n              return vt(this), et._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]);\n            }\n            get nodeId() {\n              return vt(this), et._ts_tree_cursor_current_node_id_wasm(this.tree[0]);\n            }\n            get nodeIsNamed() {\n              return vt(this), 1 === et._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]);\n            }\n            get nodeIsMissing() {\n              return vt(this), 1 === et._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]);\n            }\n            get nodeText() {\n              vt(this);\n              const e3 = et._ts_tree_cursor_start_index_wasm(this.tree[0]), t2 = et._ts_tree_cursor_end_index_wasm(this.tree[0]);\n              return ht(this.tree, e3, t2);\n            }\n            get startPosition() {\n              return vt(this), et._ts_tree_cursor_start_position_wasm(this.tree[0]), It(mt);\n            }\n            get endPosition() {\n              return vt(this), et._ts_tree_cursor_end_position_wasm(this.tree[0]), It(mt);\n            }\n            get startIndex() {\n              return vt(this), et._ts_tree_cursor_start_index_wasm(this.tree[0]);\n            }\n            get endIndex() {\n              return vt(this), et._ts_tree_cursor_end_index_wasm(this.tree[0]);\n            }\n            currentNode() {\n              return vt(this), et._ts_tree_cursor_current_node_wasm(this.tree[0]), bt(this.tree);\n            }\n            currentFieldId() {\n              return vt(this), et._ts_tree_cursor_current_field_id_wasm(this.tree[0]);\n            }\n            currentFieldName() {\n              return this.tree.language.fields[this.currentFieldId()];\n            }\n            gotoFirstChild() {\n              vt(this);\n              const e3 = et._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);\n              return Et(this), 1 === e3;\n            }\n            gotoNextSibling() {\n              vt(this);\n              const e3 = et._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);\n              return Et(this), 1 === e3;\n            }\n            gotoParent() {\n              vt(this);\n              const e3 = et._ts_tree_cursor_goto_parent_wasm(this.tree[0]);\n              return Et(this), 1 === e3;\n            }\n          }\n          class Language {\n            constructor(e3, t2) {\n              wt(e3), this[0] = t2, this.types = new Array(et._ts_language_symbol_count(this[0]));\n              for (let e4 = 0, t3 = this.types.length; e4 < t3; e4++)\n                et._ts_language_symbol_type(this[0], e4) < 2 && (this.types[e4] = Z(et._ts_language_symbol_name(this[0], e4)));\n              this.fields = new Array(et._ts_language_field_count(this[0]) + 1);\n              for (let e4 = 0, t3 = this.fields.length; e4 < t3; e4++) {\n                const t4 = et._ts_language_field_name_for_id(this[0], e4);\n                this.fields[e4] = 0 !== t4 ? Z(t4) : null;\n              }\n            }\n            get version() {\n              return et._ts_language_version(this[0]);\n            }\n            get fieldCount() {\n              return this.fields.length - 1;\n            }\n            fieldIdForName(e3) {\n              const t2 = this.fields.indexOf(e3);\n              return -1 !== t2 ? t2 : null;\n            }\n            fieldNameForId(e3) {\n              return this.fields[e3] || null;\n            }\n            idForNodeType(e3, t2) {\n              const r3 = U(e3), n2 = et._malloc(r3 + 1);\n              z(e3, n2, r3 + 1);\n              const o2 = et._ts_language_symbol_for_name(this[0], n2, r3, t2);\n              return et._free(n2), o2 || null;\n            }\n            get nodeTypeCount() {\n              return et._ts_language_symbol_count(this[0]);\n            }\n            nodeTypeForId(e3) {\n              const t2 = et._ts_language_symbol_name(this[0], e3);\n              return t2 ? Z(t2) : null;\n            }\n            nodeTypeIsNamed(e3) {\n              return !!et._ts_language_type_is_named_wasm(this[0], e3);\n            }\n            nodeTypeIsVisible(e3) {\n              return !!et._ts_language_type_is_visible_wasm(this[0], e3);\n            }\n            query(e3) {\n              const t2 = U(e3), r3 = et._malloc(t2 + 1);\n              z(e3, r3, t2 + 1);\n              const n2 = et._ts_query_new(this[0], r3, t2, mt, mt + rt);\n              if (!n2) {\n                const t3 = N(mt + rt, \"i32\"), n3 = Z(r3, N(mt, \"i32\")).length, o3 = e3.substr(n3, 100).split(\"\\n\")[0];\n                let s3, _3 = o3.match(at)[0];\n                switch (t3) {\n                  case 2:\n                    s3 = new RangeError(`Bad node name '${_3}'`);\n                    break;\n                  case 3:\n                    s3 = new RangeError(`Bad field name '${_3}'`);\n                    break;\n                  case 4:\n                    s3 = new RangeError(`Bad capture name @${_3}`);\n                    break;\n                  case 5:\n                    s3 = new TypeError(`Bad pattern structure at offset ${n3}: '${o3}'...`), _3 = \"\";\n                    break;\n                  default:\n                    s3 = new SyntaxError(`Bad syntax at offset ${n3}: '${o3}'...`), _3 = \"\";\n                }\n                throw s3.index = n3, s3.length = _3.length, et._free(r3), s3;\n              }\n              const o2 = et._ts_query_string_count(n2), s2 = et._ts_query_capture_count(n2), _2 = et._ts_query_pattern_count(n2), a2 = new Array(s2), i2 = new Array(o2);\n              for (let e4 = 0; e4 < s2; e4++) {\n                const t3 = et._ts_query_capture_name_for_id(n2, e4, mt), r4 = N(mt, \"i32\");\n                a2[e4] = Z(t3, r4);\n              }\n              for (let e4 = 0; e4 < o2; e4++) {\n                const t3 = et._ts_query_string_value_for_id(n2, e4, mt), r4 = N(mt, \"i32\");\n                i2[e4] = Z(t3, r4);\n              }\n              const u2 = new Array(_2), l2 = new Array(_2), d2 = new Array(_2), c3 = new Array(_2), m2 = new Array(_2);\n              for (let e4 = 0; e4 < _2; e4++) {\n                const t3 = et._ts_query_predicates_for_pattern(n2, e4, mt), r4 = N(mt, \"i32\");\n                c3[e4] = [], m2[e4] = [];\n                const o3 = [];\n                let s3 = t3;\n                for (let t4 = 0; t4 < r4; t4++) {\n                  const t5 = N(s3, \"i32\"), r5 = N(s3 += rt, \"i32\");\n                  if (s3 += rt, t5 === it)\n                    o3.push({ type: \"capture\", name: a2[r5] });\n                  else if (t5 === ut)\n                    o3.push({ type: \"string\", value: i2[r5] });\n                  else if (o3.length > 0) {\n                    if (\"string\" !== o3[0].type)\n                      throw new Error(\"Predicates must begin with a literal value\");\n                    const t6 = o3[0].value;\n                    let r6 = true;\n                    switch (t6) {\n                      case \"not-eq?\":\n                        r6 = false;\n                      case \"eq?\":\n                        if (3 !== o3.length)\n                          throw new Error(`Wrong number of arguments to \\`#eq?\\` predicate. Expected 2, got ${o3.length - 1}`);\n                        if (\"capture\" !== o3[1].type)\n                          throw new Error(`First argument of \\`#eq?\\` predicate must be a capture. Got \"${o3[1].value}\"`);\n                        if (\"capture\" === o3[2].type) {\n                          const t7 = o3[1].name, n4 = o3[2].name;\n                          m2[e4].push(function(e5) {\n                            let o4, s5;\n                            for (const r7 of e5)\n                              r7.name === t7 && (o4 = r7.node), r7.name === n4 && (s5 = r7.node);\n                            return void 0 === o4 || void 0 === s5 || o4.text === s5.text === r6;\n                          });\n                        } else {\n                          const t7 = o3[1].name, n4 = o3[2].value;\n                          m2[e4].push(function(e5) {\n                            for (const o4 of e5)\n                              if (o4.name === t7)\n                                return o4.node.text === n4 === r6;\n                            return true;\n                          });\n                        }\n                        break;\n                      case \"not-match?\":\n                        r6 = false;\n                      case \"match?\":\n                        if (3 !== o3.length)\n                          throw new Error(`Wrong number of arguments to \\`#match?\\` predicate. Expected 2, got ${o3.length - 1}.`);\n                        if (\"capture\" !== o3[1].type)\n                          throw new Error(`First argument of \\`#match?\\` predicate must be a capture. Got \"${o3[1].value}\".`);\n                        if (\"string\" !== o3[2].type)\n                          throw new Error(`Second argument of \\`#match?\\` predicate must be a string. Got @${o3[2].value}.`);\n                        const n3 = o3[1].name, s4 = new RegExp(o3[2].value);\n                        m2[e4].push(function(e5) {\n                          for (const t7 of e5)\n                            if (t7.name === n3)\n                              return s4.test(t7.node.text) === r6;\n                          return true;\n                        });\n                        break;\n                      case \"set!\":\n                        if (o3.length < 2 || o3.length > 3)\n                          throw new Error(`Wrong number of arguments to \\`#set!\\` predicate. Expected 1 or 2. Got ${o3.length - 1}.`);\n                        if (o3.some((e5) => \"string\" !== e5.type))\n                          throw new Error('Arguments to `#set!` predicate must be a strings.\".');\n                        u2[e4] || (u2[e4] = {}), u2[e4][o3[1].value] = o3[2] ? o3[2].value : null;\n                        break;\n                      case \"is?\":\n                      case \"is-not?\":\n                        if (o3.length < 2 || o3.length > 3)\n                          throw new Error(`Wrong number of arguments to \\`#${t6}\\` predicate. Expected 1 or 2. Got ${o3.length - 1}.`);\n                        if (o3.some((e5) => \"string\" !== e5.type))\n                          throw new Error(`Arguments to \\`#${t6}\\` predicate must be a strings.\".`);\n                        const _3 = \"is?\" === t6 ? l2 : d2;\n                        _3[e4] || (_3[e4] = {}), _3[e4][o3[1].value] = o3[2] ? o3[2].value : null;\n                        break;\n                      default:\n                        c3[e4].push({ operator: t6, operands: o3.slice(1) });\n                    }\n                    o3.length = 0;\n                  }\n                }\n                Object.freeze(u2[e4]), Object.freeze(l2[e4]), Object.freeze(d2[e4]);\n              }\n              return et._free(r3), new Query(tt, n2, a2, m2, c3, Object.freeze(u2), Object.freeze(l2), Object.freeze(d2));\n            }\n            static load(e3) {\n              let t2;\n              if (e3 instanceof Uint8Array)\n                t2 = Promise.resolve(e3);\n              else {\n                const r4 = e3;\n                if (\"undefined\" != typeof process && process.versions && process.versions.node) {\n                  const e4 = require$$1;\n                  t2 = Promise.resolve(e4.readFileSync(r4));\n                } else\n                  t2 = fetch(r4).then((e4) => e4.arrayBuffer().then((t3) => {\n                    if (e4.ok)\n                      return new Uint8Array(t3);\n                    {\n                      const r5 = new TextDecoder(\"utf-8\").decode(t3);\n                      throw new Error(`Language.load failed with status ${e4.status}.\n\n${r5}`);\n                    }\n                  }));\n              }\n              const r3 = \"function\" == typeof loadSideModule ? loadSideModule : xe;\n              return t2.then((e4) => r3(e4, { loadAsync: true })).then((e4) => {\n                const t3 = Object.keys(e4), r4 = t3.find((e5) => lt.test(e5) && !e5.includes(\"external_scanner_\"));\n                r4 || console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(t3, null, 2)}`);\n                const n2 = e4[r4]();\n                return new Language(tt, n2);\n              });\n            }\n          }\n          class Query {\n            constructor(e3, t2, r3, n2, o2, s2, _2, a2) {\n              wt(e3), this[0] = t2, this.captureNames = r3, this.textPredicates = n2, this.predicates = o2, this.setProperties = s2, this.assertedProperties = _2, this.refutedProperties = a2, this.exceededMatchLimit = false;\n            }\n            delete() {\n              et._ts_query_delete(this[0]), this[0] = 0;\n            }\n            matches(e3, t2, r3, n2) {\n              t2 || (t2 = _t), r3 || (r3 = _t), n2 || (n2 = {});\n              let o2 = n2.matchLimit;\n              if (void 0 === o2)\n                o2 = 0;\n              else if (\"number\" != typeof o2)\n                throw new Error(\"Arguments must be numbers\");\n              yt(e3), et._ts_query_matches_wasm(this[0], e3.tree[0], t2.row, t2.column, r3.row, r3.column, o2);\n              const s2 = N(mt, \"i32\"), _2 = N(mt + rt, \"i32\"), a2 = N(mt + 2 * rt, \"i32\"), i2 = new Array(s2);\n              this.exceededMatchLimit = !!a2;\n              let u2 = 0, l2 = _2;\n              for (let t3 = 0; t3 < s2; t3++) {\n                const r4 = N(l2, \"i32\"), n3 = N(l2 += rt, \"i32\");\n                l2 += rt;\n                const o3 = new Array(n3);\n                if (l2 = gt(this, e3.tree, l2, o3), this.textPredicates[r4].every((e4) => e4(o3))) {\n                  i2[u2++] = { pattern: r4, captures: o3 };\n                  const e4 = this.setProperties[r4];\n                  e4 && (i2[t3].setProperties = e4);\n                  const n4 = this.assertedProperties[r4];\n                  n4 && (i2[t3].assertedProperties = n4);\n                  const s3 = this.refutedProperties[r4];\n                  s3 && (i2[t3].refutedProperties = s3);\n                }\n              }\n              return i2.length = u2, et._free(_2), i2;\n            }\n            captures(e3, t2, r3, n2) {\n              t2 || (t2 = _t), r3 || (r3 = _t), n2 || (n2 = {});\n              let o2 = n2.matchLimit;\n              if (void 0 === o2)\n                o2 = 0;\n              else if (\"number\" != typeof o2)\n                throw new Error(\"Arguments must be numbers\");\n              yt(e3), et._ts_query_captures_wasm(this[0], e3.tree[0], t2.row, t2.column, r3.row, r3.column, o2);\n              const s2 = N(mt, \"i32\"), _2 = N(mt + rt, \"i32\"), a2 = N(mt + 2 * rt, \"i32\"), i2 = [];\n              this.exceededMatchLimit = !!a2;\n              const u2 = [];\n              let l2 = _2;\n              for (let t3 = 0; t3 < s2; t3++) {\n                const t4 = N(l2, \"i32\"), r4 = N(l2 += rt, \"i32\"), n3 = N(l2 += rt, \"i32\");\n                if (l2 += rt, u2.length = r4, l2 = gt(this, e3.tree, l2, u2), this.textPredicates[t4].every((e4) => e4(u2))) {\n                  const e4 = u2[n3], r5 = this.setProperties[t4];\n                  r5 && (e4.setProperties = r5);\n                  const o3 = this.assertedProperties[t4];\n                  o3 && (e4.assertedProperties = o3);\n                  const s3 = this.refutedProperties[t4];\n                  s3 && (e4.refutedProperties = s3), i2.push(e4);\n                }\n              }\n              return et._free(_2), i2;\n            }\n            predicatesForPattern(e3) {\n              return this.predicates[e3];\n            }\n            didExceedMatchLimit() {\n              return this.exceededMatchLimit;\n            }\n          }\n          function ht(e3, t2, r3) {\n            const n2 = r3 - t2;\n            let o2 = e3.textCallback(t2, null, r3);\n            for (t2 += o2.length; t2 < r3; ) {\n              const n3 = e3.textCallback(t2, null, r3);\n              if (!(n3 && n3.length > 0))\n                break;\n              t2 += n3.length, o2 += n3;\n            }\n            return t2 > r3 && (o2 = o2.slice(0, n2)), o2;\n          }\n          function gt(e3, t2, r3, n2) {\n            for (let o2 = 0, s2 = n2.length; o2 < s2; o2++) {\n              const s3 = N(r3, \"i32\"), _2 = bt(t2, r3 += rt);\n              r3 += nt, n2[o2] = { name: e3.captureNames[s3], node: _2 };\n            }\n            return r3;\n          }\n          function wt(e3) {\n            if (e3 !== tt)\n              throw new Error(\"Illegal constructor\");\n          }\n          function Mt(e3) {\n            return e3 && \"number\" == typeof e3.row && \"number\" == typeof e3.column;\n          }\n          function yt(e3) {\n            let t2 = mt;\n            x(t2, e3.id, \"i32\"), x(t2 += rt, e3.startIndex, \"i32\"), x(t2 += rt, e3.startPosition.row, \"i32\"), x(t2 += rt, e3.startPosition.column, \"i32\"), x(t2 += rt, e3[0], \"i32\");\n          }\n          function bt(e3, t2 = mt) {\n            const r3 = N(t2, \"i32\");\n            if (0 === r3)\n              return null;\n            const n2 = N(t2 += rt, \"i32\"), o2 = N(t2 += rt, \"i32\"), s2 = N(t2 += rt, \"i32\"), _2 = N(t2 += rt, \"i32\"), a2 = new Node(tt, e3);\n            return a2.id = r3, a2.startIndex = n2, a2.startPosition = { row: o2, column: s2 }, a2[0] = _2, a2;\n          }\n          function vt(e3, t2 = mt) {\n            x(t2 + 0 * rt, e3[0], \"i32\"), x(t2 + 1 * rt, e3[1], \"i32\"), x(t2 + 2 * rt, e3[2], \"i32\");\n          }\n          function Et(e3) {\n            e3[0] = N(mt + 0 * rt, \"i32\"), e3[1] = N(mt + 1 * rt, \"i32\"), e3[2] = N(mt + 2 * rt, \"i32\");\n          }\n          function St(e3, t2) {\n            x(e3, t2.row, \"i32\"), x(e3 + rt, t2.column, \"i32\");\n          }\n          function It(e3) {\n            return { row: N(e3, \"i32\"), column: N(e3 + rt, \"i32\") };\n          }\n          function At(e3, t2) {\n            St(e3, t2.startPosition), St(e3 += ot, t2.endPosition), x(e3 += ot, t2.startIndex, \"i32\"), x(e3 += rt, t2.endIndex, \"i32\"), e3 += rt;\n          }\n          function xt(e3) {\n            const t2 = {};\n            return t2.startPosition = It(e3), e3 += ot, t2.endPosition = It(e3), e3 += ot, t2.startIndex = N(e3, \"i32\"), e3 += rt, t2.endIndex = N(e3, \"i32\"), t2;\n          }\n          for (const e3 of Object.getOwnPropertyNames(ParserImpl.prototype))\n            Object.defineProperty(Parser2.prototype, e3, { value: ParserImpl.prototype[e3], enumerable: false, writable: false });\n          Parser2.Language = Language, Module.onRuntimeInitialized = () => {\n            ParserImpl.init(), e2();\n          };\n        }));\n      }\n    }\n    return Parser2;\n  }();\n  module.exports = TreeSitter;\n})(treeSitter);\nvar treeSitterExports = treeSitter.exports;\nconst Parser = /* @__PURE__ */ getDefaultExportFromCjs(treeSitterExports);\nconst treeSitterShadeupURL = \"\";\nasync function getShadeupParser() {\n  if (typeof process === \"object\" && process.versions && process.versions.node) {\n    return global.shadeupParser();\n  }\n  let url = treeSitterShadeupURL;\n  let shadeUrl = treeSitterShadeupURL;\n  await Parser.init({\n    locateFile(scriptName, scriptDirectory) {\n      return url;\n    }\n  });\n  const parser = new Parser();\n  parser.setLanguage(await Parser.Language.load(shadeUrl));\n  return parser;\n}\nclass AstContext {\n  constructor(fileName) {\n    this.impls = /* @__PURE__ */ new Map();\n    this.implsFor = /* @__PURE__ */ new Map();\n    this.shaders = [];\n    this.diagnostics = [];\n    this.globals = [];\n    this.fileName = fileName;\n  }\n  report(node2, message) {\n    this.diagnostics.push({ message, node: node2 });\n  }\n  addImpl(name, node2) {\n    if (this.impls.has(name)) {\n      this.impls.get(name).push(node2);\n    } else {\n      this.impls.set(name, [node2]);\n    }\n  }\n  addImplFor(name, node2) {\n    if (this.implsFor.has(name)) {\n      this.implsFor.get(name).push(node2);\n    } else {\n      this.implsFor.set(name, [node2]);\n    }\n  }\n}\nconst stdMath = \"export type bool = boolean;\\r\\nexport type float = number & { _opaque_float: 2 };\\r\\nexport type int = number & { _opaque_int: 1 } & float;\\r\\nexport type uint = number & { _opaque_uint: 1 };\\r\\ntype scalar = float | int | uint;\\r\\n\\r\\nexport type float2 = [float, float] & { _opaque_vector_float_2: 2; length: 2 };\\r\\nexport type float3 = [float, float, float] & { _opaque_vector_float_3: 3; length: 3 };\\r\\nexport type float4 = [float, float, float, float] & { _opaque_vector_float_4: 4; length: 4 };\\r\\nexport type int2 = [int, int] & { _opaque_vector_int_2: 2 } & float2;\\r\\nexport type int3 = [int, int, int] & { _opaque_vector_int_3: 3 } & float3;\\r\\nexport type int4 = [int, int, int, int] & { _opaque_vector_int_4: 4 } & float4;\\r\\n\\r\\nexport type uint2 = [uint, uint] & { _opaque_vector_uint_2: 2 } & float2;\\r\\nexport type uint3 = [uint, uint, uint] & { _opaque_vector_uint_3: 3 } & float3;\\r\\nexport type uint4 = [uint, uint, uint, uint] & { _opaque_vector_uint_4: 4 } & float4;\\r\\n\\r\\nexport type uint8 = number & { _opaque_uint8: 1 };\\r\\n\\r\\ntype anyFloat = float2 | float3 | float4;\\r\\ntype anyInt = int2 | int3 | int4;\\r\\ntype anyUint = uint2 | uint3 | uint4;\\r\\n\\r\\ntype vector2 = float2 | int2 | uint2;\\r\\ntype vector3 = float3 | int3 | uint3;\\r\\ntype vector4 = float4 | int4 | uint4;\\r\\n\\r\\ntype vector = vector2 | vector3 | vector4;\\r\\n\\r\\ntype vectorOrScalar = vector | scalar;\\r\\n\\r\\nexport interface float2x2 extends Omit<[float, float, float, float], '__index'> {\\r\\n\t__matrix: 2;\\r\\n\t[index: int]: float;\\r\\n\t__index(index: number): [float, float];\\r\\n}\\r\\n\\r\\nexport interface float3x3\\r\\n\textends Omit<[float, float, float, float, float, float, float, float, float], '__index'> {\\r\\n\t__matrix: 3;\\r\\n\t[index: int]: float;\\r\\n\t__index(index: number): [float, float, float];\\r\\n}\\r\\n\\r\\nexport interface float4x4\\r\\n\textends Omit<\\r\\n\t\t[\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat\\r\\n\t\t],\\r\\n\t\t'__index'\\r\\n\t> {\\r\\n\t__matrix: 4;\\r\\n\t[index: int]: float;\\r\\n\t__index(index: number): [float, float, float, float];\\r\\n}\\r\\n\\r\\nfunction isVector(v: vectorOrScalar): v is vector {\\r\\n\treturn Array.isArray(v);\\r\\n}\\r\\n\\r\\nfunction isScalar(v: vectorOrScalar): v is scalar {\\r\\n\treturn typeof v === 'number';\\r\\n}\\r\\n\\r\\nfunction isMatrix(v: number[]): v is float2x2 | float3x3 | float4x4 {\\r\\n\treturn !!(v as any).__matrix;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(!mat2(0)) @shadeup=wgsl(mat2x2<f32>) */\\r\\nexport function float2x2(): float2x2;\\r\\n/** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\\r\\nexport function float2x2(m00: number, m01: number, m10: number, m11: number): float2x2;\\r\\n/** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\\r\\nexport function float2x2(...args: float[]): float2x2 {\\r\\n\tlet arr = [0, 0, 0, 0] as any as float2x2;\\r\\n\tif (args.length === 4) {\\r\\n\t\tarr = [...args] as any as float2x2;\\r\\n\t}\\r\\n\\r\\n\tapplyMatrix2x2Methods(arr);\\r\\n\\r\\n\treturn arr;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(!mat3(0)) @shadeup=wgsl(mat3x3<f32>) */\\r\\nexport function float3x3(): float3x3;\\r\\n/** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\\r\\nexport function float3x3(\\r\\n\tm00: number,\\r\\n\tm01: number,\\r\\n\tm02: number,\\r\\n\tm10: number,\\r\\n\tm11: number,\\r\\n\tm12: number,\\r\\n\tm20: number,\\r\\n\tm21: number,\\r\\n\tm22: number\\r\\n): float3x3;\\r\\n/** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\\r\\nexport function float3x3(...args: float[]): float3x3 {\\r\\n\tlet arr = [0, 0, 0, 0, 0, 0, 0, 0, 0] as any as float3x3;\\r\\n\tif (args.length === 9) {\\r\\n\t\tarr = [...args] as any as float3x3;\\r\\n\t}\\r\\n\\r\\n\tapplyMatrix3x3Methods(arr);\\r\\n\\r\\n\treturn arr;\\r\\n}\\r\\n\\r\\nfunction applyMatrix4x4Methods(arr: float4x4): void {\\r\\n\t(arr as any).__matrix = 4;\\r\\n\\r\\n\t(arr as any).__index = function (index: number) {\\r\\n\t\tlet out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\\r\\n\t\tout_arr.__index = (index_inner: int) => {\\r\\n\t\t\treturn out_arr[index_inner];\\r\\n\t\t};\\r\\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\\r\\n\t\t\tarr[index * 4 + index_inner] = value;\\r\\n\t\t};\\r\\n\\r\\n\t\tout_arr.__index_assign_op = function (\\r\\n\t\t\top_fn: (a: any, b: any) => any,\\r\\n\t\t\tindex_inner: int,\\r\\n\t\t\tvalue: any\\r\\n\t\t) {\\r\\n\t\t\tarr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\\r\\n\t\t};\\r\\n\\r\\n\t\treturn out_arr;\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign = function (index: int, value: float4) {\\r\\n\t\tarr[index * 4] = value[0];\\r\\n\t\tarr[index * 4 + 1] = value[1];\\r\\n\t\tarr[index * 4 + 2] = value[2];\\r\\n\t\tarr[index * 4 + 3] = value[3];\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign_op = function (\\r\\n\t\top_fn: (a: any, b: any) => any,\\r\\n\t\tindex: int,\\r\\n\t\tvalue: any\\r\\n\t) {\\r\\n\t\tarr[index * 4] = op_fn(arr[index * 4], value[0]);\\r\\n\t\tarr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\\r\\n\t\tarr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\\r\\n\t\tarr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\\r\\n\t};\\r\\n}\\r\\n(window as any).applyMatrix4x4Methods = applyMatrix4x4Methods;\\r\\n\\r\\nfunction applyMatrix3x3Methods(arr: float3x3): void {\\r\\n\t(arr as any).__matrix = 3;\\r\\n\\r\\n\t(arr as any).__index = function (index: number) {\\r\\n\t\tlet out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\\r\\n\t\tout_arr.__index = (index_inner: int) => {\\r\\n\t\t\treturn out_arr[index_inner];\\r\\n\t\t};\\r\\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\\r\\n\t\t\tarr[index * 3 + index_inner] = value;\\r\\n\t\t};\\r\\n\\r\\n\t\tout_arr.__index_assign_op = function (\\r\\n\t\t\top_fn: (a: any, b: any) => any,\\r\\n\t\t\tindex_inner: int,\\r\\n\t\t\tvalue: any\\r\\n\t\t) {\\r\\n\t\t\tarr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\\r\\n\t\t};\\r\\n\\r\\n\t\treturn out_arr;\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign = function (index: int, value: float3) {\\r\\n\t\tarr[index * 3] = value[0];\\r\\n\t\tarr[index * 3 + 1] = value[1];\\r\\n\t\tarr[index * 3 + 2] = value[2];\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign_op = function (\\r\\n\t\top_fn: (a: any, b: any) => any,\\r\\n\t\tindex: int,\\r\\n\t\tvalue: any\\r\\n\t) {\\r\\n\t\tarr[index * 3] = op_fn(arr[index * 3], value[0]);\\r\\n\t\tarr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\\r\\n\t\tarr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\\r\\n\t};\\r\\n}\\r\\n\\r\\n(window as any).applyMatrix3x3Methods = applyMatrix3x3Methods;\\r\\n\\r\\nfunction applyMatrix2x2Methods(arr: float2x2): void {\\r\\n\t(arr as any).__matrix = 2;\\r\\n\\r\\n\t(arr as any).__index = function (index: number) {\\r\\n\t\tlet out_arr = [arr[index * 2], arr[index * 2 + 1]];\\r\\n\t\tout_arr.__index = (index_inner: int) => {\\r\\n\t\t\treturn out_arr[index_inner];\\r\\n\t\t};\\r\\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\\r\\n\t\t\tarr[index * 2 + index_inner] = value;\\r\\n\t\t};\\r\\n\\r\\n\t\tout_arr.__index_assign_op = function (\\r\\n\t\t\top_fn: (a: any, b: any) => any,\\r\\n\t\t\tindex_inner: int,\\r\\n\t\t\tvalue: any\\r\\n\t\t) {\\r\\n\t\t\tarr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\\r\\n\t\t};\\r\\n\\r\\n\t\treturn out_arr;\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign = function (index: int, value: float3) {\\r\\n\t\tarr[index * 2] = value[0];\\r\\n\t\tarr[index * 2 + 1] = value[1];\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign_op = function (\\r\\n\t\top_fn: (a: any, b: any) => any,\\r\\n\t\tindex: int,\\r\\n\t\tvalue: any\\r\\n\t) {\\r\\n\t\tarr[index * 2] = op_fn(arr[index * 2], value[0]);\\r\\n\t\tarr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\\r\\n\t};\\r\\n}\\r\\n\\r\\n(window as any).applyMatrix2x2Methods = applyMatrix2x2Methods;\\r\\n\\r\\n/** @shadeup=glsl(!mat4(0)) @shadeup=wgsl(mat4x4<f32>) */\\r\\nexport function float4x4(): float4x4;\\r\\n/** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\\r\\nexport function float4x4(\\r\\n\tm00: number,\\r\\n\tm01: number,\\r\\n\tm02: number,\\r\\n\tm03: number,\\r\\n\tm10: number,\\r\\n\tm11: number,\\r\\n\tm12: number,\\r\\n\tm13: number,\\r\\n\tm20: number,\\r\\n\tm21: number,\\r\\n\tm22: number,\\r\\n\tm23: number,\\r\\n\tm30: number,\\r\\n\tm31: number,\\r\\n\tm32: number,\\r\\n\tm33: number\\r\\n): float4x4;\\r\\n/** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\\r\\nexport function float4x4(...args: float[]): float4x4 {\\r\\n\tlet arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as any as float4x4;\\r\\n\tif (args.length === 16) {\\r\\n\t\tarr = [...args] as any as float4x4;\\r\\n\t}\\r\\n\\r\\n\tapplyMatrix4x4Methods(arr);\\r\\n\\r\\n\treturn arr;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float) @shadeup=wgsl(f32) */\\r\\nexport function float(x: number): float {\\r\\n\treturn x as float;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int) @shadeup=wgsl(i32) */\\r\\nexport function int(x: number): int {\\r\\n\treturn (x | 0) as int;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\\r\\nexport function uint(x: number): uint {\\r\\n\treturn (x >>> 0) as uint;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\r\\nexport function float2(x: number, y: number): float2;\\r\\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\r\\nexport function float2(xy: vector2): float2;\\r\\n\\r\\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\r\\nexport function float2(...args: (vectorOrScalar | number)[]): float2 {\\r\\n\treturn args.flat() as float2;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(x: number, y: number, z: number): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(xy: vector2, z: number): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(x: number, yz: vector2): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(xyz: vector3): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(...args: (vectorOrScalar | number)[]): float3 {\\r\\n\treturn args.flat() as float3;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, y: number, z: number, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, yz: vector2, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xy: vector2, z: number, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, y: number, zw: vector2): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xy: vector2, zw: vector2): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xyz: vector3, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, yzw: vector3): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xyzw: int4): float4;\\r\\nexport function float4(xyzw: float4): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(...args: (vectorOrScalar | number)[]): float4 {\\r\\n\treturn args.flat() as float4;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\r\\nexport function int2(x: number, y: number): int2;\\r\\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\r\\nexport function int2(xy: vector2): int2;\\r\\n\\r\\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\r\\nexport function int2(...args: (vectorOrScalar | number)[]): int2 {\\r\\n\treturn args.flat().map((x) => x | 0) as int2;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(x: number, y: number, z: number): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(xy: vector2, z: number): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(x: number, yz: vector2): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(xyz: vector3): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(...args: (vectorOrScalar | number)[]): int3 {\\r\\n\treturn args.flat().map((x) => x | 0) as int3;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, y: number, z: number, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, yz: vector2, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xy: vector2, z: number, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, y: number, zw: vector2): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xy: vector2, zw: vector2): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xyz: vector3, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, yzw: vector3): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xyzw: float4): int4;\\r\\nexport function int4(xyzw: int4): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(...args: (vectorOrScalar | number)[]): int4 {\\r\\n\treturn args.flat().map((x) => x | 0) as int4;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint2) @shadeup=wgsl(vec2<u32>) */\\r\\nexport function uint2(x: number, y: number): uint2;\\r\\n/** @shadeup=glsl(uint2) @shadeup=wgsl(vec2<u32>) */\\r\\nexport function uint2(xy: vector2): uint2;\\r\\nexport function uint2(...args: (vectorOrScalar | number)[]): uint2 {\\r\\n\treturn args.flat().map((x) => x >>> 0) as uint2;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(x: number, y: number, z: number): uint3;\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(xy: vector2, z: number): uint3;\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(x: number, yz: vector2): uint3;\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(xyz: vector3): uint3;\\r\\nexport function uint3(...args: (vectorOrScalar | number)[]): uint3 {\\r\\n\treturn args.flat().map((x) => x >>> 0) as uint3;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(x: number, y: number, z: number, w: number): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(x: number, yz: vector2, w: number): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(xy: vector2, z: number, w: number): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(x: number, y: number, zw: vector2): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(xy: vector2, zw: vector2): uint4;\\r\\nexport function uint4(xyz: vector3, w: number): uint4;\\r\\nexport function uint4(x: number, yzw: vector3): uint4;\\r\\nexport function uint4(xyzw: float4): uint4;\\r\\nexport function uint4(xyzw: uint4): uint4;\\r\\nexport function uint4(...args: (vectorOrScalar | number)[]): uint4 {\\r\\n\treturn args.flat().map((x) => x >>> 0) as uint4;\\r\\n}\\r\\n\\r\\nexport function uint8(x: number): uint8 {\\r\\n\treturn ((x >>> 0) & 0xff) as uint8;\\r\\n}\\r\\n\\r\\nfunction componentMath(a: any, b: any, f: (a: number, b: number) => number): vectorOrScalar {\\r\\n\tlet aIsScalar = isScalar(a);\\r\\n\tlet bIsScalar = isScalar(b);\\r\\n\tif (aIsScalar && bIsScalar) {\\r\\n\t\treturn f(a, b) as scalar;\\r\\n\t}\\r\\n\tif (!aIsScalar && !bIsScalar) {\\r\\n\t\tif (a.length !== b.length) {\\r\\n\t\t\tthrow new Error('Cannot perform component-wise math on vectors of different lengths');\\r\\n\t\t}\\r\\n\t\t// return a.map((a, i) => f(a, b[i])) as vector;\\r\\n\t\tif (a.length == 2) {\\r\\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1])] as vector;\\r\\n\t\t} else if (a.length == 3) {\\r\\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])] as vector;\\r\\n\t\t} else if (a.length == 4) {\\r\\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])] as vector;\\r\\n\t\t}\\r\\n\t} else if (!aIsScalar && bIsScalar) {\\r\\n\t\tif (a.length == 2) {\\r\\n\t\t\treturn [f(a[0], b), f(a[1], b)] as vector;\\r\\n\t\t} else if (a.length == 3) {\\r\\n\t\t\treturn [f(a[0], b), f(a[1], b), f(a[2], b)] as vector;\\r\\n\t\t} else if (a.length == 4) {\\r\\n\t\t\treturn [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)] as vector;\\r\\n\t\t}\\r\\n\t} else if (!bIsScalar && aIsScalar) {\\r\\n\t\tif (b.length == 2) {\\r\\n\t\t\treturn [f(a, b[0]), f(a, b[1])] as vector;\\r\\n\t\t} else if (b.length == 3) {\\r\\n\t\t\treturn [f(a, b[0]), f(a, b[1]), f(a, b[2])] as vector;\\r\\n\t\t} else if (b.length == 4) {\\r\\n\t\t\treturn [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])] as vector;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tthrow new Error('Cannot perform component-wise math on a scalar and a vector');\\r\\n}\\r\\n\\r\\nfunction componentMathSingular(a: vectorOrScalar, f: (a: number) => number): vectorOrScalar {\\r\\n\tif (isScalar(a)) {\\r\\n\t\treturn f(a) as scalar;\\r\\n\t}\\r\\n\tif (isVector(a)) {\\r\\n\t\treturn a.map((a, i) => f(a)) as vector;\\r\\n\t}\\r\\n\\r\\n\tthrow new Error('Cannot perform component-wise math on a scalar and a vector');\\r\\n}\\r\\n\\r\\ntype cCallCb = (a: number, b: number) => number;\\r\\ntype cCallCbSingle = (a: number) => number;\\r\\n\\r\\nfunction cCall(cb: cCallCb, a: scalar, b: scalar): scalar;\\r\\nfunction cCall(cb: cCallCb, a: vector, b: scalar): vector;\\r\\nfunction cCall(cb: cCallCb, a: vector2, b: vector2): vector2;\\r\\nfunction cCall(cb: cCallCb, a: vector3, b: vector3): vector3;\\r\\nfunction cCall(cb: cCallCb, a: vector4, b: vector4): vector4;\\r\\nfunction cCall(cb: cCallCb, a: vectorOrScalar, b: vectorOrScalar): vectorOrScalar {\\r\\n\treturn componentMath(a, b, (a, b) => a + b);\\r\\n}\\r\\n\\r\\nexport type vectorOverload_2to1_3to3 = {\\r\\n\t(a: float2, b: float2): float;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\\r\\n\t(a: int2, b: int2): int;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\\r\\n\t(a: float2, b: int2): float;\\r\\n\t(a: float3, b: int3): float3;\\r\\n\\r\\n\t(a: int2, b: float2): float;\\r\\n\t(a: int3, b: float3): float3;\\r\\n};\\r\\nexport type vectorOverload_2to1_3to3_4to4 = {\\r\\n\t(a: float2, b: float2): float;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\t(a: float4, b: float4): float4;\\r\\n\\r\\n\t(a: int2, b: int2): int;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\t(a: int4, b: int4): int4;\\r\\n\\r\\n\t(a: float2, b: int2): float;\\r\\n\t(a: float3, b: int3): float3;\\r\\n\t(a: float4, b: int4): float4;\\r\\n\\r\\n\t(a: int2, b: float2): float;\\r\\n\t(a: int3, b: float3): float3;\\r\\n\t(a: int4, b: float4): float4;\\r\\n};\\r\\nexport type vectorOverload_2to1_3to1_4to1 = {\\r\\n\t(a: float2, b: float2): float;\\r\\n\t(a: float3, b: float3): float;\\r\\n\t(a: float4, b: float4): float;\\r\\n\\r\\n\t(a: int2, b: int2): int;\\r\\n\t(a: int3, b: int3): int;\\r\\n\t(a: int4, b: int4): int;\\r\\n\\r\\n\t(a: float2, b: int2): float;\\r\\n\t(a: float3, b: int3): float;\\r\\n\t(a: float4, b: int4): float;\\r\\n\\r\\n\t(a: int2, b: float2): float;\\r\\n\t(a: int3, b: float3): float;\\r\\n\t(a: int4, b: float4): float;\\r\\n};\\r\\n\\r\\nexport type componentOverload = {\\r\\n\t(a: int, b: int): int;\\r\\n\t(a: int2, b: int2): int2;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\t(a: int4, b: int4): int4;\\r\\n\\r\\n\t(a: int, b: float): float;\\r\\n\t(a: float, b: int): float;\\r\\n\\r\\n\t(a: float, b: float): float;\\r\\n\\r\\n\t(a: float2, b: float): float2;\\r\\n\t(a: float3, b: float): float3;\\r\\n\t(a: float4, b: float): float4;\\r\\n\\r\\n\t(a: int2, b: int): int2;\\r\\n\t(a: int3, b: int): int3;\\r\\n\t(a: int4, b: int): int4;\\r\\n\\r\\n\t(a: int2, b: float): float2;\\r\\n\t(a: int3, b: float): float3;\\r\\n\t(a: int4, b: float): float4;\\r\\n\\r\\n\t(a: float2, b: int): float2;\\r\\n\t(a: float3, b: int): float3;\\r\\n\t(a: float4, b: int): float4;\\r\\n\t(a: float2, b: float): float2;\\r\\n\\r\\n\t(a: float, b: float2): float2;\\r\\n\t(a: float, b: float3): float3;\\r\\n\t(a: float, b: float4): float4;\\r\\n\\r\\n\t(a: int, b: int2): int2;\\r\\n\t(a: int, b: int3): int3;\\r\\n\t(a: int, b: int4): int4;\\r\\n\\r\\n\t(a: float, b: int2): float2;\\r\\n\t(a: float, b: int3): float3;\\r\\n\t(a: float, b: int4): float4;\\r\\n\\r\\n\t(a: int, b: float2): float2;\\r\\n\t(a: int, b: float3): float3;\\r\\n\t(a: int, b: float4): float4;\\r\\n\\r\\n\t(a: float2, b: float2): float2;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\t(a: float4, b: float4): float4;\\r\\n\\r\\n\t(a: float2, b: int2): float2;\\r\\n\t(a: float3, b: int3): float3;\\r\\n\t(a: float4, b: int4): float4;\\r\\n\\r\\n\t(a: int2, b: float2): float2;\\r\\n\t(a: int3, b: float3): float3;\\r\\n\t(a: int4, b: float4): float4;\\r\\n\\r\\n\t(a: uint, b: uint): uint;\\r\\n\t(a: uint2, b: uint2): uint2;\\r\\n\t(a: uint3, b: uint3): uint3;\\r\\n\t(a: uint4, b: uint4): uint4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadMatch = {\\r\\n\t(a: uint, b: uint): uint;\\r\\n\t(a: uint2, b: uint2): uint2;\\r\\n\t(a: uint3, b: uint3): uint3;\\r\\n\t(a: uint4, b: uint4): uint4;\\r\\n\t(a: uint2, b: uint): uint2;\\r\\n\t(a: uint3, b: uint): uint3;\\r\\n\t(a: uint4, b: uint): uint4;\\r\\n\\r\\n\t(a: int, b: int): int;\\r\\n\t(a: int2, b: int2): int2;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\t(a: int4, b: int4): int4;\\r\\n\t(a: int2, b: int): int2;\\r\\n\t(a: int3, b: int): int3;\\r\\n\t(a: int4, b: int): int4;\\r\\n\\r\\n\t(a: float, b: float): float;\\r\\n\t(a: float2, b: float2): float2;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\t(a: float4, b: float4): float4;\\r\\n\t(a: float2, b: float): float2;\\r\\n\t(a: float3, b: float): float3;\\r\\n\t(a: float4, b: float): float4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadSingular = {\\r\\n\t(a: int): int;\\r\\n\t(a: float): float;\\r\\n\\r\\n\t(a: float2): float2;\\r\\n\t(a: float3): float3;\\r\\n\t(a: float4): float4;\\r\\n\\r\\n\t(a: int2): int2;\\r\\n\t(a: int3): int3;\\r\\n\t(a: int4): int4;\\r\\n\\r\\n\t(a: uint): uint;\\r\\n\t(a: uint2): uint2;\\r\\n\t(a: uint3): uint3;\\r\\n\t(a: uint4): uint4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadSingularFloat = {\\r\\n\t// (a: int): int;\\r\\n\t(a: float): float;\\r\\n\\r\\n\t(a: float2): float2;\\r\\n\t(a: float3): float3;\\r\\n\t(a: float4): float4;\\r\\n\\r\\n\t// (a: int2): int2;\\r\\n\t// (a: int3): int3;\\r\\n\t// (a: int4): int4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadMatrix = {\\r\\n\t(a: float2x2, b: float2): float2;\\r\\n\t(a: float3x3, b: float3): float3;\\r\\n\t(a: float4x4, b: float4): float4;\\r\\n\\r\\n\t(a: float2, b: float2x2): float2;\\r\\n\t(a: float3, b: float3x3): float3;\\r\\n\t(a: float4, b: float4x4): float4;\\r\\n\\r\\n\t(a: float2x2, b: float2x2): float2x2;\\r\\n\t(a: float3x3, b: float3x3): float3x3;\\r\\n\t(a: float4x4, b: float4x4): float4x4;\\r\\n\\r\\n\t(a: float2x2, b: float): float2x2;\\r\\n\t(a: float3x3, b: float): float3x3;\\r\\n\t(a: float4x4, b: float): float4x4;\\r\\n\\r\\n\t(a: float, b: float2x2): float2x2;\\r\\n\t(a: float, b: float3x3): float3x3;\\r\\n\t(a: float, b: float4x4): float4x4;\\r\\n};\\r\\n\\r\\nfunction componentOp(cb: cCallCb): componentOverload;\\r\\n\\r\\nfunction componentOp(cb: cCallCb) {\\r\\n\treturn (a: any, b: any) => componentMath(a, b, cb);\\r\\n}\\r\\n\\r\\nfunction componentOpMatch(cb: cCallCb): componentOverloadMatch;\\r\\nfunction componentOpMatch(cb: cCallCb) {\\r\\n\treturn (a: any, b: any) => componentMath(a, b, cb);\\r\\n}\\r\\n\\r\\nfunction componentOpSingular(cb: cCallCbSingle): componentOverloadSingular;\\r\\n\\r\\nfunction componentOpSingular(cb: cCallCbSingle) {\\r\\n\treturn (a: any) => componentMathSingular(a, cb);\\r\\n}\\r\\n\\r\\nfunction componentOpSingularFloat(cb: cCallCbSingle): componentOverloadSingularFloat;\\r\\n\\r\\nfunction componentOpSingularFloat(cb: cCallCbSingle) {\\r\\n\treturn (a: any) => componentMathSingular(a, cb);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!$0$ + $1$)*/\\r\\nexport const add: componentOverload & ((a: string, b: string) => string) = (\\r\\n\ta: any,\\r\\n\tb: any\\r\\n): any => {\\r\\n\tif (typeof a === 'string' && typeof b === 'string') {\\r\\n\t\treturn `${a}${b}`;\\r\\n\t} else {\\r\\n\t\tlet addOp: (a: any, b: any) => any = componentOp((a, b) => a + b);\\r\\n\t\tlet v: any = addOp(a, b);\\r\\n\t\treturn v;\\r\\n\t}\\r\\n};\\r\\n\\r\\n/** @shadeup=univ(!$0$ - $1$)*/\\r\\nexport const sub = componentOp((a, b) => a - b);\\r\\n\\r\\ntype matrix = float2x2 | float3x3 | float4x4;\\r\\n\\r\\nfunction matrixMul(a: matrix, b: matrix): matrix {\\r\\n\t// Multiply two square matrices of the same dimension row-major\\r\\n\\r\\n\tlet dimension = a.__matrix;\\r\\n\\r\\n\tlet out: float2x2 | float3x3 | float4x4;\\r\\n\tif (dimension === 2) {\\r\\n\t\tout = float2x2();\\r\\n\t} else if (dimension === 3) {\\r\\n\t\tout = float3x3();\\r\\n\t} else if (dimension === 4) {\\r\\n\t\tvar a00 = a[0 * 4 + 0];\\r\\n\t\tvar a01 = a[0 * 4 + 1];\\r\\n\t\tvar a02 = a[0 * 4 + 2];\\r\\n\t\tvar a03 = a[0 * 4 + 3];\\r\\n\t\tvar a10 = a[1 * 4 + 0];\\r\\n\t\tvar a11 = a[1 * 4 + 1];\\r\\n\t\tvar a12 = a[1 * 4 + 2];\\r\\n\t\tvar a13 = a[1 * 4 + 3];\\r\\n\t\tvar a20 = a[2 * 4 + 0];\\r\\n\t\tvar a21 = a[2 * 4 + 1];\\r\\n\t\tvar a22 = a[2 * 4 + 2];\\r\\n\t\tvar a23 = a[2 * 4 + 3];\\r\\n\t\tvar a30 = a[3 * 4 + 0];\\r\\n\t\tvar a31 = a[3 * 4 + 1];\\r\\n\t\tvar a32 = a[3 * 4 + 2];\\r\\n\t\tvar a33 = a[3 * 4 + 3];\\r\\n\t\tvar b00 = b[0 * 4 + 0];\\r\\n\t\tvar b01 = b[0 * 4 + 1];\\r\\n\t\tvar b02 = b[0 * 4 + 2];\\r\\n\t\tvar b03 = b[0 * 4 + 3];\\r\\n\t\tvar b10 = b[1 * 4 + 0];\\r\\n\t\tvar b11 = b[1 * 4 + 1];\\r\\n\t\tvar b12 = b[1 * 4 + 2];\\r\\n\t\tvar b13 = b[1 * 4 + 3];\\r\\n\t\tvar b20 = b[2 * 4 + 0];\\r\\n\t\tvar b21 = b[2 * 4 + 1];\\r\\n\t\tvar b22 = b[2 * 4 + 2];\\r\\n\t\tvar b23 = b[2 * 4 + 3];\\r\\n\t\tvar b30 = b[3 * 4 + 0];\\r\\n\t\tvar b31 = b[3 * 4 + 1];\\r\\n\t\tvar b32 = b[3 * 4 + 2];\\r\\n\t\tvar b33 = b[3 * 4 + 3];\\r\\n\t\treturn float4x4(\\r\\n\t\t\tb00 * a00 + b01 * a10 + b02 * a20 + b03 * a30,\\r\\n\t\t\tb00 * a01 + b01 * a11 + b02 * a21 + b03 * a31,\\r\\n\t\t\tb00 * a02 + b01 * a12 + b02 * a22 + b03 * a32,\\r\\n\t\t\tb00 * a03 + b01 * a13 + b02 * a23 + b03 * a33,\\r\\n\t\t\tb10 * a00 + b11 * a10 + b12 * a20 + b13 * a30,\\r\\n\t\t\tb10 * a01 + b11 * a11 + b12 * a21 + b13 * a31,\\r\\n\t\t\tb10 * a02 + b11 * a12 + b12 * a22 + b13 * a32,\\r\\n\t\t\tb10 * a03 + b11 * a13 + b12 * a23 + b13 * a33,\\r\\n\t\t\tb20 * a00 + b21 * a10 + b22 * a20 + b23 * a30,\\r\\n\t\t\tb20 * a01 + b21 * a11 + b22 * a21 + b23 * a31,\\r\\n\t\t\tb20 * a02 + b21 * a12 + b22 * a22 + b23 * a32,\\r\\n\t\t\tb20 * a03 + b21 * a13 + b22 * a23 + b23 * a33,\\r\\n\t\t\tb30 * a00 + b31 * a10 + b32 * a20 + b33 * a30,\\r\\n\t\t\tb30 * a01 + b31 * a11 + b32 * a21 + b33 * a31,\\r\\n\t\t\tb30 * a02 + b31 * a12 + b32 * a22 + b33 * a32,\\r\\n\t\t\tb30 * a03 + b31 * a13 + b32 * a23 + b33 * a33\\r\\n\t\t);\\r\\n\t\tout = float4x4();\\r\\n\t}\\r\\n\\r\\n\tfor (let i = 0; i < dimension; i++) {\\r\\n\t\tfor (let j = 0; j < dimension; j++) {\\r\\n\t\t\tlet sum: float = float(0);\\r\\n\t\t\tfor (let k = 0; k < dimension; k++) {\\r\\n\t\t\t\tsum += float(a[i * dimension + k] * b[k * dimension + j]);\\r\\n\t\t\t}\\r\\n\t\t\tout[i * dimension + j] = sum;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn out;\\r\\n\\r\\n\tif (a.__matrix === 2 && b.__matrix === 2) {\\r\\n\t\tlet a00 = a[0];\\r\\n\t\tlet a01 = a[1];\\r\\n\t\tlet a10 = a[2];\\r\\n\t\tlet a11 = a[3];\\r\\n\\r\\n\t\tlet b00 = b[0];\\r\\n\t\tlet b01 = b[1];\\r\\n\t\tlet b10 = b[2];\\r\\n\t\tlet b11 = b[3];\\r\\n\\r\\n\t\tlet v = float2x2(\\r\\n\t\t\ta00 * b00 + a01 * b10,\\r\\n\t\t\ta00 * b01 + a01 * b11,\\r\\n\t\t\ta10 * b00 + a11 * b10,\\r\\n\t\t\ta10 * b01 + a11 * b11\\r\\n\t\t);\\r\\n\\r\\n\t\treturn v;\\r\\n\t} else if (a.__matrix === 3 && b.__matrix === 3) {\\r\\n\t\tlet a00 = a[0];\\r\\n\t\tlet a01 = a[1];\\r\\n\t\tlet a02 = a[2];\\r\\n\t\tlet a10 = a[3];\\r\\n\t\tlet a11 = a[4];\\r\\n\t\tlet a12 = a[5];\\r\\n\t\tlet a20 = a[6];\\r\\n\t\tlet a21 = a[7];\\r\\n\t\tlet a22 = a[8];\\r\\n\\r\\n\t\tlet b00 = b[0];\\r\\n\t\tlet b01 = b[1];\\r\\n\t\tlet b02 = b[2];\\r\\n\t\tlet b10 = b[3];\\r\\n\t\tlet b11 = b[4];\\r\\n\t\tlet b12 = b[5];\\r\\n\t\tlet b20 = b[6];\\r\\n\t\tlet b21 = b[7];\\r\\n\t\tlet b22 = b[8];\\r\\n\\r\\n\t\tlet v = float3x3(\\r\\n\t\t\ta00 * b00 + a01 * b10 + a02 * b20,\\r\\n\t\t\ta00 * b01 + a01 * b11 + a02 * b21,\\r\\n\t\t\ta00 * b02 + a01 * b12 + a02 * b22,\\r\\n\t\t\ta10 * b00 + a11 * b10 + a12 * b20,\\r\\n\t\t\ta10 * b01 + a11 * b11 + a12 * b21,\\r\\n\t\t\ta10 * b02 + a11 * b12 + a12 * b22,\\r\\n\t\t\ta20 * b00 + a21 * b10 + a22 * b20,\\r\\n\t\t\ta20 * b01 + a21 * b11 + a22 * b21,\\r\\n\t\t\ta20 * b02 + a21 * b12 + a22 * b22\\r\\n\t\t);\\r\\n\t\treturn v;\\r\\n\t} else if (a.__matrix === 4 && b.__matrix === 4) {\\r\\n\t\tlet a00 = a[0];\\r\\n\t\tlet a01 = a[1];\\r\\n\t\tlet a02 = a[2];\\r\\n\t\tlet a03 = a[3];\\r\\n\t\tlet a10 = a[4];\\r\\n\t\tlet a11 = a[5];\\r\\n\t\tlet a12 = a[6];\\r\\n\t\tlet a13 = a[7];\\r\\n\t\tlet a20 = a[8];\\r\\n\t\tlet a21 = a[9];\\r\\n\t\tlet a22 = a[10];\\r\\n\t\tlet a23 = a[11];\\r\\n\t\tlet a30 = a[12];\\r\\n\t\tlet a31 = a[13];\\r\\n\t\tlet a32 = a[14];\\r\\n\t\tlet a33 = a[15];\\r\\n\\r\\n\t\tlet b00 = b[0];\\r\\n\t\tlet b01 = b[1];\\r\\n\t\tlet b02 = b[2];\\r\\n\t\tlet b03 = b[3];\\r\\n\t\tlet b10 = b[4];\\r\\n\t\tlet b11 = b[5];\\r\\n\t\tlet b12 = b[6];\\r\\n\t\tlet b13 = b[7];\\r\\n\t\tlet b20 = b[8];\\r\\n\t\tlet b21 = b[9];\\r\\n\t\tlet b22 = b[10];\\r\\n\t\tlet b23 = b[11];\\r\\n\t\tlet b30 = b[12];\\r\\n\t\tlet b31 = b[13];\\r\\n\t\tlet b32 = b[14];\\r\\n\t\tlet b33 = b[15];\\r\\n\\r\\n\t\tlet v = float4x4(\\r\\n\t\t\ta00 * b00 + a01 * b10 + a02 * b20 + a03 * b30,\\r\\n\t\t\ta00 * b01 + a01 * b11 + a02 * b21 + a03 * b31,\\r\\n\t\t\ta00 * b02 + a01 * b12 + a02 * b22 + a03 * b32,\\r\\n\t\t\ta00 * b03 + a01 * b13 + a02 * b23 + a03 * b33,\\r\\n\t\t\ta10 * b00 + a11 * b10 + a12 * b20 + a13 * b30,\\r\\n\t\t\ta10 * b01 + a11 * b11 + a12 * b21 + a13 * b31,\\r\\n\t\t\ta10 * b02 + a11 * b12 + a12 * b22 + a13 * b32,\\r\\n\t\t\ta10 * b03 + a11 * b13 + a12 * b23 + a13 * b33,\\r\\n\t\t\ta20 * b00 + a21 * b10 + a22 * b20 + a23 * b30,\\r\\n\t\t\ta20 * b01 + a21 * b11 + a22 * b21 + a23 * b31,\\r\\n\t\t\ta20 * b02 + a21 * b12 + a22 * b22 + a23 * b32,\\r\\n\t\t\ta20 * b03 + a21 * b13 + a22 * b23 + a23 * b33,\\r\\n\t\t\ta30 * b00 + a31 * b10 + a32 * b20 + a33 * b30,\\r\\n\t\t\ta30 * b01 + a31 * b11 + a32 * b21 + a33 * b31,\\r\\n\t\t\ta30 * b02 + a31 * b12 + a32 * b22 + a33 * b32,\\r\\n\t\t\ta30 * b03 + a31 * b13 + a32 * b23 + a33 * b33\\r\\n\t\t);\\r\\n\\r\\n\t\treturn v;\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid matrix multiplication');\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction matrixInversefloat2x2(m: float2x2): float2x2 {\\r\\n\tlet a = m.__index(0).__index(0),\\r\\n\t\tb = m.__index(1).__index(0),\\r\\n\t\tc = m.__index(0).__index(1),\\r\\n\t\td = m.__index(1).__index(1);\\r\\n\tlet det = a * d - b * c;\\r\\n\tif (det === 0) {\\r\\n\t\tthrow new Error('Matrix determinant is zero');\\r\\n\t}\\r\\n\tlet detInv = 1.0 / det;\\r\\n\treturn float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\\r\\n}\\r\\nfunction matrixInversefloat3x3(m: float3x3): float3x3 {\\r\\n\tlet n11 = m.__index(0).__index(0),\\r\\n\t\tn12 = m.__index(1).__index(0),\\r\\n\t\tn13 = m.__index(2).__index(0);\\r\\n\tlet n21 = m.__index(0).__index(1),\\r\\n\t\tn22 = m.__index(1).__index(1),\\r\\n\t\tn23 = m.__index(2).__index(1);\\r\\n\tlet n31 = m.__index(0).__index(2),\\r\\n\t\tn32 = m.__index(1).__index(2),\\r\\n\t\tn33 = m.__index(2).__index(2);\\r\\n\tlet t11 = n33 * n22 - n32 * n23,\\r\\n\t\tt12 = n32 * n13 - n33 * n12,\\r\\n\t\tt13 = n23 * n12 - n22 * n13;\\r\\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13;\\r\\n\tif (det === 0) {\\r\\n\t\tthrow new Error('Invalid matrix inverse');\\r\\n\t}\\r\\n\tlet detInv = 1 / det;\\r\\n\tlet v = float3x3(\\r\\n\t\tt11 * detInv,\\r\\n\t\t(n31 * n23 - n33 * n21) * detInv,\\r\\n\t\t(n32 * n21 - n31 * n22) * detInv,\\r\\n\t\tt12 * detInv,\\r\\n\t\t(n33 * n11 - n31 * n13) * detInv,\\r\\n\t\t(n31 * n12 - n32 * n11) * detInv,\\r\\n\t\tt13 * detInv,\\r\\n\t\t(n21 * n13 - n23 * n11) * detInv,\\r\\n\t\t(n22 * n11 - n21 * n12) * detInv\\r\\n\t);\\r\\n\treturn v;\\r\\n}\\r\\nfunction matrixInversefloat4x4(m: float4x4): float4x4 {\\r\\n\tvar m00 = m[0 * 4 + 0];\\r\\n\tvar m01 = m[0 * 4 + 1];\\r\\n\tvar m02 = m[0 * 4 + 2];\\r\\n\tvar m03 = m[0 * 4 + 3];\\r\\n\tvar m10 = m[1 * 4 + 0];\\r\\n\tvar m11 = m[1 * 4 + 1];\\r\\n\tvar m12 = m[1 * 4 + 2];\\r\\n\tvar m13 = m[1 * 4 + 3];\\r\\n\tvar m20 = m[2 * 4 + 0];\\r\\n\tvar m21 = m[2 * 4 + 1];\\r\\n\tvar m22 = m[2 * 4 + 2];\\r\\n\tvar m23 = m[2 * 4 + 3];\\r\\n\tvar m30 = m[3 * 4 + 0];\\r\\n\tvar m31 = m[3 * 4 + 1];\\r\\n\tvar m32 = m[3 * 4 + 2];\\r\\n\tvar m33 = m[3 * 4 + 3];\\r\\n\tvar tmp_0 = m22 * m33;\\r\\n\tvar tmp_1 = m32 * m23;\\r\\n\tvar tmp_2 = m12 * m33;\\r\\n\tvar tmp_3 = m32 * m13;\\r\\n\tvar tmp_4 = m12 * m23;\\r\\n\tvar tmp_5 = m22 * m13;\\r\\n\tvar tmp_6 = m02 * m33;\\r\\n\tvar tmp_7 = m32 * m03;\\r\\n\tvar tmp_8 = m02 * m23;\\r\\n\tvar tmp_9 = m22 * m03;\\r\\n\tvar tmp_10 = m02 * m13;\\r\\n\tvar tmp_11 = m12 * m03;\\r\\n\tvar tmp_12 = m20 * m31;\\r\\n\tvar tmp_13 = m30 * m21;\\r\\n\tvar tmp_14 = m10 * m31;\\r\\n\tvar tmp_15 = m30 * m11;\\r\\n\tvar tmp_16 = m10 * m21;\\r\\n\tvar tmp_17 = m20 * m11;\\r\\n\tvar tmp_18 = m00 * m31;\\r\\n\tvar tmp_19 = m30 * m01;\\r\\n\tvar tmp_20 = m00 * m21;\\r\\n\tvar tmp_21 = m20 * m01;\\r\\n\tvar tmp_22 = m00 * m11;\\r\\n\tvar tmp_23 = m10 * m01;\\r\\n\\r\\n\tvar t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\\r\\n\tvar t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\\r\\n\tvar t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\\r\\n\tvar t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\\r\\n\\r\\n\tvar d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\\r\\n\tif (d === 0) {\\r\\n\t\tthrow new Error('Invalid matrix inverse');\\r\\n\t}\\r\\n\treturn float4x4(\\r\\n\t\td * t0,\\r\\n\t\td * t1,\\r\\n\t\td * t2,\\r\\n\t\td * t3,\\r\\n\t\td * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)),\\r\\n\t\td * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)),\\r\\n\t\td * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)),\\r\\n\t\td * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)),\\r\\n\t\td * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)),\\r\\n\t\td * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)),\\r\\n\t\td * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)),\\r\\n\t\td * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)),\\r\\n\t\td * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)),\\r\\n\t\td * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)),\\r\\n\t\td * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)),\\r\\n\t\td * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02))\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixTransposefloat2x2(m: float2x2): float2x2 {\\r\\n\treturn float2x2(\\r\\n\t\tm.__index(0).__index(0),\\r\\n\t\tm.__index(1).__index(0),\\r\\n\t\tm.__index(0).__index(1),\\r\\n\t\tm.__index(1).__index(1)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixTransposefloat3x3(m: float3x3): float3x3 {\\r\\n\treturn float3x3(\\r\\n\t\tm.__index(0).__index(0),\\r\\n\t\tm.__index(1).__index(0),\\r\\n\t\tm.__index(2).__index(0),\\r\\n\t\tm.__index(0).__index(1),\\r\\n\t\tm.__index(1).__index(1),\\r\\n\t\tm.__index(2).__index(1),\\r\\n\t\tm.__index(0).__index(2),\\r\\n\t\tm.__index(1).__index(2),\\r\\n\t\tm.__index(2).__index(2)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixTransposefloat4x4(m: float4x4): float4x4 {\\r\\n\treturn float4x4(\\r\\n\t\tm.__index(0).__index(0),\\r\\n\t\tm.__index(1).__index(0),\\r\\n\t\tm.__index(2).__index(0),\\r\\n\t\tm.__index(3).__index(0),\\r\\n\t\tm.__index(0).__index(1),\\r\\n\t\tm.__index(1).__index(1),\\r\\n\t\tm.__index(2).__index(1),\\r\\n\t\tm.__index(3).__index(1),\\r\\n\t\tm.__index(0).__index(2),\\r\\n\t\tm.__index(1).__index(2),\\r\\n\t\tm.__index(2).__index(2),\\r\\n\t\tm.__index(3).__index(2),\\r\\n\t\tm.__index(0).__index(3),\\r\\n\t\tm.__index(1).__index(3),\\r\\n\t\tm.__index(2).__index(3),\\r\\n\t\tm.__index(3).__index(3)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixMul2x2float2(a: float2x2, b: float2): float2 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let j = 0; j < 2; j++) {\\r\\n\t\tfor (let i = 0; i < 2; i++) {\\r\\n\t\t\tc[i] += a[j * 2 + i] * b[j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float2;\\r\\n}\\r\\n\\r\\nfunction matrixMul3x3float3(a: float3x3, b: float3): float3 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let i = 0; i < 3; i++) {\\r\\n\t\tfor (let j = 0; j < 3; j++) {\\r\\n\t\t\tc[i] += a[j * 3 + i] * b[j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float3;\\r\\n}\\r\\n\\r\\nfunction matrixMul4x4float4(a: float4x4, b: float4): float4 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let j = 0; j < 4; j++) {\\r\\n\t\tfor (let i = 0; i < 4; i++) {\\r\\n\t\t\tc[i] += a[j * 4 + i] * b[j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float4;\\r\\n}\\r\\n\\r\\nfunction matrixMulfloat22x2(a: float2, b: float2x2): float2 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let j = 0; j < 2; j++) {\\r\\n\t\tfor (let i = 0; i < 2; i++) {\\r\\n\t\t\tc[i] += a[j] * b[i * 2 + j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float2;\\r\\n}\\r\\n\\r\\nfunction matrixMulfloat33x3(a: float3, b: float3x3): float3 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let i = 0; i < 3; i++) {\\r\\n\t\tfor (let j = 0; j < 3; j++) {\\r\\n\t\t\tc[i] += a[j] * b[i * 3 + j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float3;\\r\\n}\\r\\n\\r\\nfunction matrixMulfloat44x4(a: float4, b: float4x4): float4 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let i = 0; i < 4; i++) {\\r\\n\t\tfor (let j = 0; j < 4; j++) {\\r\\n\t\t\tc[i] += a[j] * b[i * 4 + j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float4;\\r\\n}\\r\\n\\r\\nlet mulFunc: (a: any, b: any) => any = componentOp((a, b) => a * b);\\r\\n\\r\\n/** @shadeup=univ(#matrix_inverse)*/\\r\\nexport function inverse(a: float2x2): float2x2;\\r\\nexport function inverse(a: float3x3): float3x3;\\r\\nexport function inverse(a: float4x4): float4x4;\\r\\nexport function inverse(a: float2x2 | float3x3 | float4x4): float2x2 | float3x3 | float4x4 {\\r\\n\tif (a.__matrix == 2) {\\r\\n\t\treturn matrixInversefloat2x2(a as float2x2);\\r\\n\t} else if (a.__matrix == 3) {\\r\\n\t\treturn matrixInversefloat3x3(a as float3x3);\\r\\n\t} else if (a.__matrix == 4) {\\r\\n\t\treturn matrixInversefloat4x4(a as float4x4);\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(#matrix_transpose)*/\\r\\nexport function transpose(a: float2x2): float2x2;\\r\\nexport function transpose(a: float3x3): float3x3;\\r\\nexport function transpose(a: float4x4): float4x4;\\r\\nexport function transpose(a: float2x2 | float3x3 | float4x4): float2x2 | float3x3 | float4x4 {\\r\\n\tif (a.__matrix == 2) {\\r\\n\t\treturn matrixTransposefloat2x2(a as float2x2);\\r\\n\t} else if (a.__matrix == 3) {\\r\\n\t\treturn matrixTransposefloat3x3(a as float3x3);\\r\\n\t} else if (a.__matrix == 4) {\\r\\n\t\treturn matrixTransposefloat4x4(a as float4x4);\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!$0$ * $1$)*/\\r\\nexport const mul: componentOverload & componentOverloadMatrix = (a: any, b: any): any => {\\r\\n\tif (isMatrix(a) || isMatrix(b)) {\\r\\n\t\tif (isMatrix(a) && isMatrix(b)) {\\r\\n\t\t\treturn matrixMul(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tif (isMatrix(a) && typeof b == 'number') {\\r\\n\t\t\t\treturn componentMath(b as scalar, a as any, (a, b) => a * b);\\r\\n\t\t\t} else if (isMatrix(b) && typeof a == 'number') {\\r\\n\t\t\t\treturn componentMath(a as scalar, b as any, (a, b) => a * b);\\r\\n\t\t\t} else {\\r\\n\t\t\t\tif (isMatrix(a)) {\\r\\n\t\t\t\t\tif (a.length == 4) {\\r\\n\t\t\t\t\t\treturn matrixMul2x2float2(a as float2x2, b as float2);\\r\\n\t\t\t\t\t} else if (a.length == 9) {\\r\\n\t\t\t\t\t\treturn matrixMul3x3float3(a as float3x3, b as float3);\\r\\n\t\t\t\t\t} else if (a.length == 16) {\\r\\n\t\t\t\t\t\treturn matrixMul4x4float4(a as float4x4, b as float4);\\r\\n\t\t\t\t\t}\\r\\n\t\t\t\t} else if (isMatrix(b)) {\\r\\n\t\t\t\t\tif (b.length == 4) {\\r\\n\t\t\t\t\t\treturn matrixMulfloat22x2(a as float2, b as float2x2);\\r\\n\t\t\t\t\t} else if (b.length == 9) {\\r\\n\t\t\t\t\t\treturn matrixMulfloat33x3(a as float3, b as float3x3);\\r\\n\t\t\t\t\t} else if (b.length == 16) {\\r\\n\t\t\t\t\t\treturn matrixMulfloat44x4(a as float4, b as float4x4);\\r\\n\t\t\t\t\t}\\r\\n\t\t\t\t}\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\treturn mulFunc(a, b);\\r\\n\t}\\r\\n};\\r\\n\\r\\n/** @shadeup=univ(!$0$ / $1$)*/\\r\\nexport const div = componentOp((a, b) => a / b);\\r\\n\\r\\n/** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\\r\\nexport const pow = componentOp((a, b) => Math.pow(a, b));\\r\\n\\r\\n/** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\\r\\nexport const mod = componentOpMatch((a, b) => a - b * Math.floor(a / b));\\r\\n\\r\\n/** @shadeup=univ(!$0$ & $1$)*/\\r\\nexport const bitand = componentOp((a, b) => a & b);\\r\\n\\r\\n/** @shadeup=univ(!$0$ | $1$)*/\\r\\nexport const bitor = componentOp((a, b) => a | b);\\r\\n\\r\\n/** @shadeup=univ(!$0$ ^ $1$)*/\\r\\nexport const bitxor = componentOp((a, b) => a ^ b);\\r\\n\\r\\n/** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\\r\\nexport const lshift = componentOp((a, b) => a << b);\\r\\n\\r\\n/** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\\r\\nexport const rshift = componentOp((a, b) => a >> b);\\r\\n\\r\\n/** @shadeup=univ(!~$0$)*/\\r\\nexport const bitnot = componentOpSingular((a) => ~a);\\r\\n\\r\\n/** @shadeup=univ(!-($0$))*/\\r\\nexport const negate = componentOpSingular((a) => -a);\\r\\n\\r\\n/** @shadeup=univ(!+($0$))*/\\r\\nexport const positive = componentOpSingular((a) => Math.abs(a));\\r\\n\\r\\n/** @shadeup=univ(abs)*/\\r\\nexport const abs = componentOpSingular((a) => Math.abs(a));\\r\\n\\r\\n/**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\\r\\nexport const floor = componentOpSingular(Math.floor);\\r\\n\\r\\n/** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\\r\\nexport const ceil = componentOpSingular(Math.ceil);\\r\\n\\r\\n/** @shadeup=univ(round)*/\\r\\nexport const round = componentOpSingular(Math.round);\\r\\n\\r\\n/** @shadeup=univ(sign)*/\\r\\nexport const sign = componentOpSingular(Math.sign);\\r\\n\\r\\n/** @shadeup=univ(cos) */\\r\\nexport const cos = componentOpSingular(Math.cos);\\r\\n\\r\\n/** @shadeup=univ(sin) */\\r\\nexport const sin = componentOpSingularFloat(Math.sin);\\r\\n\\r\\n/** @shadeup=univ(tan) */\\r\\nexport const tan = componentOpSingular(Math.tan);\\r\\n\\r\\n/** @shadeup=univ(acos) */\\r\\nexport const acos = componentOpSingular(Math.acos);\\r\\n\\r\\n/** @shadeup=univ(asin) */\\r\\nexport const asin = componentOpSingular(Math.asin);\\r\\n\\r\\n/** @shadeup=univ(atan) */\\r\\nexport const atan = componentOpSingular(Math.atan);\\r\\n\\r\\n/** @shadeup=univ(atan2) */\\r\\nexport const atan2: (dy: float, dx: float) => float = Math.atan2 as any;\\r\\n\\r\\n/** @shadeup=univ(cosh) */\\r\\nexport const cosh = componentOpSingular(Math.cosh);\\r\\n\\r\\n/** @shadeup=univ(sinh) */\\r\\nexport const sinh = componentOpSingular(Math.sinh);\\r\\n\\r\\n/** @shadeup=univ(tanh) */\\r\\nexport const tanh = componentOpSingular(Math.tanh);\\r\\n\\r\\n/** @shadeup=univ(acosh) */\\r\\nexport const acosh = componentOpSingular(Math.acosh);\\r\\n\\r\\n/** @shadeup=univ(asinh) */\\r\\nexport const asinh = componentOpSingular(Math.asinh);\\r\\n\\r\\n/** @shadeup=univ(atanh) */\\r\\nexport const atanh = componentOpSingular(Math.atanh);\\r\\n\\r\\n/** @shadeup=univ(exp) */\\r\\nexport const exp = componentOpSingular(Math.exp);\\r\\n\\r\\n/** @shadeup=univ(log) */\\r\\nexport const log = componentOpSingular(Math.log);\\r\\n\\r\\n/** @shadeup=univ(log2) */\\r\\nexport const log2 = componentOpSingular(Math.log2);\\r\\n\\r\\n/** @shadeup=univ(log10) */\\r\\nexport const log10 = componentOpSingular(Math.log10);\\r\\n\\r\\n/** @shadeup=univ(sqrt) */\\r\\nexport const sqrt = componentOpSingular(Math.sqrt);\\r\\n\\r\\n/** @shadeup=univ(inversesqrt) */\\r\\nexport const inversesqrt = componentOpSingular((a) => 1 / Math.sqrt(a));\\r\\n\\r\\n/** @shadeup=univ(fract)*/\\r\\nexport const frac = componentOpSingular((a) => a - Math.floor(a));\\r\\n\\r\\nexport function wrap(x: float, low: float, high: float): float {\\r\\n\tif (lt(x, low)) {\\r\\n\t\tlet rng = sub(high, low);\\r\\n\t\tlet s1 = sub(low, x);\\r\\n\t\tlet ms = mod(s1, rng);\\r\\n\t\treturn sub(high, ms);\\r\\n\t} else if (gte(x, high)) {\\r\\n\t\tlet rng = sub(high, low);\\r\\n\t\tlet s1 = sub(x, high);\\r\\n\t\tlet ms = mod(s1, rng);\\r\\n\t\treturn add(low, ms);\\r\\n\t} else {\\r\\n\t\treturn x;\\r\\n\t}\\r\\n\t// return add(mod(sub(x, low), sub(high, low)), low) as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a deterministic (same seed = same output) random float between 0-1\\r\\n *\\r\\n * **Note:** See the noise package for more advanced random functions\\r\\n */\\r\\n\\r\\nexport function rand(seed?: float): float {\\r\\n\tif (typeof seed === 'number') {\\r\\n\t\treturn frac(mul(sin(mul(seed, float(91.3458))), float(47453.5453))) as float;\\r\\n\t} else {\\r\\n\t\treturn Math.random() as float;\\r\\n\t}\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a deterministic (same seed = same output) random float between 0-1\\r\\n *\\r\\n * **Note:** See the noise package for more advanced random functions\\r\\n */\\r\\nexport function rand2(seed: float2): float {\\r\\n\treturn frac(mul(sin(dot(seed, float2(12.9898, 4.1414))), float(43758.5453)));\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a deterministic (same seed = same output) random float between 0-1\\r\\n *\\r\\n * **Note:** See the noise package for more advanced random functions\\r\\n */\\r\\nexport function rand3(seed: float3): float {\\r\\n\treturn rand2(add(swizzle(seed, 'xy'), rand(swizzle(seed, 'z'))));\\r\\n}\\r\\n\\r\\n// export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\\r\\n// \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\\r\\n// }\\r\\n\\r\\nexport function pingpong(x: float, length: float): float {\\r\\n\tconst t = mod(x, mul(length, float(2)));\\r\\n\treturn sub(length, abs(sub(t, length)));\\r\\n}\\r\\n\\r\\nfunction vectorMath_2to1_3to3(\\r\\n\tcb2: (a: vector2, b: vector2) => scalar,\\r\\n\tcb3: (a: vector3, b: vector3) => vector3\\r\\n): vectorOverload_2to1_3to3 {\\r\\n\treturn (a: any, b: any): any => {\\r\\n\t\tif (a.length === 2 && b.length === 2) {\\r\\n\t\t\treturn cb2(a, b);\\r\\n\t\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\t\treturn cb3(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid vector length');\\r\\n\t\t}\\r\\n\t};\\r\\n}\\r\\n\\r\\nfunction vectorMath_2to1_3to3_4to4(\\r\\n\tcb2: (a: vector2, b: vector2) => scalar,\\r\\n\tcb3: (a: vector3, b: vector3) => vector3,\\r\\n\tcb4: (a: vector4, b: vector4) => vector4\\r\\n): vectorOverload_2to1_3to3_4to4 {\\r\\n\treturn (a: any, b: any): any => {\\r\\n\t\tif (a.length === 2 && b.length === 2) {\\r\\n\t\t\treturn cb2(a, b);\\r\\n\t\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\t\treturn cb3(a, b);\\r\\n\t\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\t\treturn cb4(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid vector length');\\r\\n\t\t}\\r\\n\t};\\r\\n}\\r\\nfunction vectorMath_2to1_3to1_4to1(\\r\\n\tcb2: (a: vector2, b: vector2) => scalar,\\r\\n\tcb3: (a: vector3, b: vector3) => scalar,\\r\\n\tcb4: (a: vector4, b: vector4) => scalar\\r\\n): vectorOverload_2to1_3to1_4to1 {\\r\\n\treturn (a: any, b: any): any => {\\r\\n\t\tif (a.length === 2 && b.length === 2) {\\r\\n\t\t\treturn cb2(a, b);\\r\\n\t\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\t\treturn cb3(a, b);\\r\\n\t\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\t\treturn cb4(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid vector length');\\r\\n\t\t}\\r\\n\t};\\r\\n}\\r\\n\\r\\nfunction cross2(a: float2, b: float2): any {\\r\\n\treturn a[0] * b[1] - a[1] * b[0];\\r\\n}\\r\\n\\r\\nfunction cross3(a: float3, b: float3): any {\\r\\n\treturn [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\\r\\n}\\r\\n\\r\\nexport const cross = vectorMath_2to1_3to3(cross2, cross3);\\r\\n\\r\\nfunction dot2(a: float2, b: float2): any {\\r\\n\treturn a[0] * b[0] + a[1] * b[1];\\r\\n}\\r\\n\\r\\nfunction dot3(a: float3, b: float3): any {\\r\\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\\r\\n}\\r\\n\\r\\nfunction dot4(a: float4, b: float4): any {\\r\\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(dot)*/\\r\\nexport const dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\\r\\n\\r\\nfunction lerp1(a: float, b: float, t: float): float {\\r\\n\treturn (a + (b - a) * t) as float;\\r\\n}\\r\\n\\r\\nfunction lerp2(a: float2, b: float2, t: float): float2 {\\r\\n\treturn [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)] as float2;\\r\\n}\\r\\n\\r\\nfunction lerp3(a: float3, b: float3, t: float): float3 {\\r\\n\treturn [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)] as float3;\\r\\n}\\r\\n\\r\\nfunction lerp4(a: float4, b: float4, t: float): float4 {\\r\\n\treturn [\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t)\\r\\n\t] as float4;\\r\\n}\\r\\n\\r\\nfunction lerp2x2(a: float2x2, b: float2x2, t: float): float2x2 {\\r\\n\treturn float2x2(\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction lerp3x3(a: float3x3, b: float3x3, t: float): float3x3 {\\r\\n\treturn float3x3(\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t),\\r\\n\t\tlerp1(a[4], b[4], t),\\r\\n\t\tlerp1(a[5], b[5], t),\\r\\n\t\tlerp1(a[6], b[6], t),\\r\\n\t\tlerp1(a[7], b[7], t),\\r\\n\t\tlerp1(a[8], b[8], t)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction lerp4x4(a: float4x4, b: float4x4, t: float): float4x4 {\\r\\n\treturn float4x4(\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t),\\r\\n\t\tlerp1(a[4], b[4], t),\\r\\n\t\tlerp1(a[5], b[5], t),\\r\\n\t\tlerp1(a[6], b[6], t),\\r\\n\t\tlerp1(a[7], b[7], t),\\r\\n\t\tlerp1(a[8], b[8], t),\\r\\n\t\tlerp1(a[9], b[9], t),\\r\\n\t\tlerp1(a[10], b[10], t),\\r\\n\t\tlerp1(a[11], b[11], t),\\r\\n\t\tlerp1(a[12], b[12], t),\\r\\n\t\tlerp1(a[13], b[13], t),\\r\\n\t\tlerp1(a[14], b[14], t),\\r\\n\t\tlerp1(a[15], b[15], t)\\r\\n\t);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(mix)*/\\r\\nexport function lerp(a: float, b: float, t: float): float;\\r\\nexport function lerp(a: float2, b: float2, t: float): float2;\\r\\nexport function lerp(a: float3, b: float3, t: float): float3;\\r\\nexport function lerp(a: float4, b: float4, t: float): float4;\\r\\nexport function lerp(a: float2x2, b: float2x2, t: float): float2x2;\\r\\nexport function lerp(a: float3x3, b: float3x3, t: float): float3x3;\\r\\nexport function lerp(a: float4x4, b: float4x4, t: float): float4x4;\\r\\n/** @shadeup=univ(mix)*/\\r\\nexport function lerp(a: any, b: any, t: float): any {\\r\\n\tif (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\\r\\n\t\treturn lerp1(a as float, b as float, t);\\r\\n\t} else if (isMatrix(a) && isMatrix(b)) {\\r\\n\t\tif (a.length === 4 && b.length === 4) {\\r\\n\t\t\treturn lerp2x2(a as float2x2, b as float2x2, t);\\r\\n\t\t} else if (a.length === 9 && b.length === 9) {\\r\\n\t\t\treturn lerp3x3(a as float3x3, b as float3x3, t);\\r\\n\t\t} else if (a.length === 16 && b.length === 16) {\\r\\n\t\t\treturn lerp4x4(a as float4x4, b as float4x4, t);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid matrix length');\\r\\n\t\t}\\r\\n\t} else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\\r\\n\t\treturn lerp2(a, b, t as float);\\r\\n\t} else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\\r\\n\t\treturn lerp3(a, b, t);\\r\\n\t} else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\\r\\n\t\treturn lerp4(a, b, t);\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\\r\\nexport function bilerp(a: float, b: float, c: float, d: float, u: float, v: float): float;\\r\\nexport function bilerp(a: float2, b: float2, c: float2, d: float2, u: float, v: float): float2;\\r\\nexport function bilerp(a: float3, b: float3, c: float3, d: float3, u: float, v: float): float3;\\r\\nexport function bilerp(a: float4, b: float4, c: float4, d: float4, u: float, v: float): float4;\\r\\nexport function bilerp(\\r\\n\ta: float2x2,\\r\\n\tb: float2x2,\\r\\n\tc: float2x2,\\r\\n\td: float2x2,\\r\\n\tu: float,\\r\\n\tv: float\\r\\n): float2x2;\\r\\nexport function bilerp(\\r\\n\ta: float3x3,\\r\\n\tb: float3x3,\\r\\n\tc: float3x3,\\r\\n\td: float3x3,\\r\\n\tu: float,\\r\\n\tv: float\\r\\n): float3x3;\\r\\nexport function bilerp(\\r\\n\ta: float4x4,\\r\\n\tb: float4x4,\\r\\n\tc: float4x4,\\r\\n\td: float4x4,\\r\\n\tu: float,\\r\\n\tv: float\\r\\n): float4x4;\\r\\n/** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\\r\\nexport function bilerp(a: any, b: any, c: any, d: any, u: float, v: float): any {\\r\\n\treturn lerp(lerp(a, b, u), lerp(c, d, u), v);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(length)*/\\r\\nexport function length(a: float): float;\\r\\nexport function length(a: float2): float;\\r\\nexport function length(a: float3): float;\\r\\nexport function length(a: float4): float;\\r\\n/** @shadeup=univ(length)*/\\r\\nexport function length(a: any): any {\\r\\n\tif (typeof a === 'number') {\\r\\n\t\treturn Math.abs(a);\\r\\n\t} else if (a.length === 2) {\\r\\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\\r\\n\t} else if (a.length === 3) {\\r\\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\\r\\n\t} else if (a.length === 4) {\\r\\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(distance)*/\\r\\nexport function dist(a: float, b: float): float;\\r\\nexport function dist(a: float2, b: float2): float;\\r\\nexport function dist(a: float3, b: float3): float;\\r\\nexport function dist(a: float4, b: float4): float;\\r\\nexport function dist<T extends vectorOrScalar>(a: T, b: T): float {\\r\\n\treturn length(sub(a, b));\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(distance)*/\\r\\nexport const distance = dist;\\r\\n\\r\\n/** @shadeup=univ(normalize)*/\\r\\nexport function normalize(a: float2): float2;\\r\\nexport function normalize(a: float3): float3;\\r\\nexport function normalize(a: float4): float4;\\r\\n/** @shadeup=univ(normalize)*/\\r\\nexport function normalize(a: any): any {\\r\\n\tif (a.length === 2) {\\r\\n\t\tlet l = length(a);\\r\\n\t\treturn [a[0] / l, a[1] / l];\\r\\n\t} else if (a.length === 3) {\\r\\n\t\tlet l = length(a);\\r\\n\t\treturn [a[0] / l, a[1] / l, a[2] / l];\\r\\n\t} else if (a.length === 4) {\\r\\n\t\tlet l = length(a);\\r\\n\t\treturn [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(reflect)*/\\r\\nexport function reflect(a: float2, b: float2): float2;\\r\\nexport function reflect(a: float3, b: float3): float3;\\r\\nexport function reflect(a: float4, b: float4): float4;\\r\\n/** @shadeup=univ(reflect)*/\\r\\nexport function reflect(a: any, b: any): any {\\r\\n\tif (a.length === 2 && b.length === 2) {\\r\\n\t\treturn reflect2(a, b);\\r\\n\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\treturn reflect3(a, b);\\r\\n\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\treturn reflect4(a, b);\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction reflect2(b, a) {\\r\\n\tlet dot = dot2(a, b);\\r\\n\treturn [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\\r\\n}\\r\\n\\r\\nfunction reflect3(b, a) {\\r\\n\tlet dot = dot3(a, b);\\r\\n\treturn [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\\r\\n}\\r\\n\\r\\nfunction reflect4(b, a) {\\r\\n\tlet dot = dot4(a, b);\\r\\n\treturn [\\r\\n\t\tb[0] - 2 * dot * a[0],\\r\\n\t\tb[1] - 2 * dot * a[1],\\r\\n\t\tb[2] - 2 * dot * a[2],\\r\\n\t\tb[3] - 2 * dot * a[3]\\r\\n\t];\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(refract)*/\\r\\nexport function refract(a: float2, b: float2, eta: float): float2;\\r\\nexport function refract(a: float3, b: float3, eta: float): float3;\\r\\nexport function refract(a: float4, b: float4, eta: float): float4;\\r\\n/** @shadeup=univ(refract)*/\\r\\nexport function refract(a: any, b: any, eta: number): any {\\r\\n\tif (a.length === 2 && b.length === 2) {\\r\\n\t\treturn refract2(a, b, eta);\\r\\n\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\treturn refract3(a, b, eta);\\r\\n\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\treturn refract4(a, b, eta);\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction refract2(b, a, eta) {\\r\\n\tlet dot = dot2(a, b);\\r\\n\tlet k = 1 - eta * eta * (1 - dot * dot);\\r\\n\treturn k < 0\\r\\n\t\t? [0, 0]\\r\\n\t\t: [\\r\\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\r\\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\\r\\n\t\t  ];\\r\\n}\\r\\n\\r\\nfunction refract3(b, a, eta) {\\r\\n\tlet dot = dot3(a, b);\\r\\n\tlet k = 1 - eta * eta * (1 - dot * dot);\\r\\n\treturn k < 0\\r\\n\t\t? [0, 0, 0]\\r\\n\t\t: [\\r\\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\r\\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\\r\\n\t\t\t\teta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\\r\\n\t\t  ];\\r\\n}\\r\\n\\r\\nfunction refract4(b, a, eta) {\\r\\n\tlet dot = dot4(a, b);\\r\\n\tlet k = 1 - eta * eta * (1 - dot * dot);\\r\\n\treturn k < 0\\r\\n\t\t? [0, 0, 0, 0]\\r\\n\t\t: [\\r\\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\r\\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\\r\\n\t\t\t\teta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\\r\\n\t\t\t\teta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\\r\\n\t\t  ];\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(degrees)*/\\r\\nexport function degrees(a: float): float {\\r\\n\treturn float((a * 180) / Math.PI);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(radians)*/\\r\\nexport function radians(a: float): float {\\r\\n\treturn float((a * Math.PI) / 180);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(step)*/\\r\\nexport function step(edge: float, x: float): float;\\r\\nexport function step(edge: int, x: float): float;\\r\\nexport function step<T extends vector>(edge: T, x: T): T;\\r\\nexport function step<T extends vector>(edge: float, x: T): T;\\r\\nexport function step<T extends vector>(edge: int, x: T): T;\\r\\n/** @shadeup=univ(step)*/\\r\\nexport function step(edge: any, x: any): any {\\r\\n\tif (typeof edge === 'number') {\\r\\n\t\tif (typeof x === 'number') {\\r\\n\t\t\treturn x < edge ? 0 : 1;\\r\\n\t\t} else {\\r\\n\t\t\treturn x.map((v) => (v < edge ? 0 : 1));\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\tif (typeof x === 'number') {\\r\\n\t\t\treturn edge.map((v) => (x < v ? 0 : 1));\\r\\n\t\t} else {\\r\\n\t\t\treturn edge.map((v, i) => (x[i] < v ? 0 : 1));\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction _smoothstep(a, b, x) {\\r\\n\tlet t = clamp((x - a) / (b - a), 0, 1);\\r\\n\treturn t * t * (3 - 2 * t);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(smoothstep)*/\\r\\nexport function smoothstep(a: float, b: float, x: float): float;\\r\\nexport function smoothstep(a: float2, b: float2, x: float2): float2;\\r\\nexport function smoothstep(a: float3, b: float3, x: float3): float3;\\r\\nexport function smoothstep(a: float4, b: float4, x: float4): float4;\\r\\n/** @shadeup=univ(smoothstep)*/\\r\\nexport function smoothstep(a: any, b: any, x: any): any {\\r\\n\tif (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\\r\\n\t\treturn _smoothstep(a, b, x);\\r\\n\t} else if (typeof a === 'number' && typeof b === 'number') {\\r\\n\t\treturn x.map((v) => _smoothstep(a, b, v));\\r\\n\t} else {\\r\\n\t\treturn a.map((v, i) => _smoothstep(v, b[i], x[i]));\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction componentReduce(vectors: vector[], cb: (a: scalar[]) => scalar) {\\r\\n\tlet result: scalar[] = [];\\r\\n\tfor (let i = 0; i < vectors[0].length; i++) {\\r\\n\t\tresult.push(cb(vectors.map((v) => v[i])));\\r\\n\t}\\r\\n\treturn result;\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(min)*/\\r\\n\\r\\nexport function min(a: int, ...b: int[]): int;\\r\\nexport function min(a: int2, ...b: int2[]): int2;\\r\\nexport function min(a: int3, ...b: int3[]): int3;\\r\\nexport function min(a: int4, ...b: int4[]): int4;\\r\\nexport function min(a: float, ...b: float[]): float;\\r\\nexport function min(a: float2, ...b: float2[]): float2;\\r\\nexport function min(a: float3, ...b: float3[]): float3;\\r\\nexport function min(a: float4, ...b: float4[]): float4;\\r\\n\\r\\nexport function min<T extends float2 | float3 | float4>(a: float, b: T): T;\\r\\nexport function min<T extends float2 | float3 | float4>(a: T, b: float): T;\\r\\nexport function min<T extends int2 | int3 | int4>(a: int, b: T): T;\\r\\nexport function min<T extends int2 | int3 | int4>(a: T, b: int): T;\\r\\n\\r\\n/** @shadeup=univ(min)*/\\r\\nexport function min<T extends vectorOrScalar>(...args: T[]): T {\\r\\n\tif (args.length == 1) {\\r\\n\t\tif (Array.isArray(args[0])) {\\r\\n\t\t\treturn Math.min(...args[0]) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn args[0];\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\tif (Array.isArray(args[0]) && !Array.isArray(args[1])) {\\r\\n\t\t\tlet minTo = args[1] as float;\\r\\n\t\t\treturn args[0].map((v) => Math.min(v, minTo)) as T;\\r\\n\t\t} else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\\r\\n\t\t\tlet minFrom = args[0] as float;\\r\\n\t\t\treturn args[1].map((v) => Math.min(minFrom, v)) as T;\\r\\n\t\t} else if (Array.isArray(args[0])) {\\r\\n\t\t\treturn componentReduce(args as vector[], (a) => Math.min(...a) as scalar) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn Math.min(...(args as number[])) as T;\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(max)*/\\r\\n\\r\\nexport function max(a: int, ...b: int[]): int;\\r\\nexport function max(a: float, ...b: int[]): float;\\r\\nexport function max(a: int, ...b: float[]): float;\\r\\nexport function max(a: int2, ...b: int2[]): int2;\\r\\nexport function max(a: int3, ...b: int3[]): int3;\\r\\nexport function max(a: int4, ...b: int4[]): int4;\\r\\nexport function max(a: float, ...b: float[]): float;\\r\\nexport function max(a: float2, ...b: float2[]): float2;\\r\\nexport function max(a: float3, ...b: float3[]): float3;\\r\\nexport function max(a: float4, ...b: float4[]): float4;\\r\\n\\r\\nexport function max<T extends float2 | float3 | float4>(a: float, b: T): T;\\r\\nexport function max<T extends float2 | float3 | float4>(a: T, b: float): T;\\r\\nexport function max<T extends int2 | int3 | int4>(a: int, b: T): T;\\r\\nexport function max<T extends int2 | int3 | int4>(a: T, b: int): T;\\r\\n/** @shadeup=univ(max)*/\\r\\nexport function max<T extends vectorOrScalar>(...args: T[]): T {\\r\\n\tif (args.length == 1) {\\r\\n\t\tif (Array.isArray(args[0])) {\\r\\n\t\t\treturn Math.max(...args[0]) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn args[0];\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\tif (Array.isArray(args[0]) && !Array.isArray(args[1])) {\\r\\n\t\t\tlet maxTo = args[1] as float;\\r\\n\t\t\treturn args[0].map((v) => Math.max(v, maxTo)) as T;\\r\\n\t\t} else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\\r\\n\t\t\tlet maxFrom = args[0] as float;\\r\\n\t\t\treturn args[1].map((v) => Math.max(maxFrom, v)) as T;\\r\\n\t\t} else if (Array.isArray(args[0])) {\\r\\n\t\t\treturn componentReduce(args as vector[], (a) => Math.max(...a) as scalar) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn Math.max(...(args as number[])) as T;\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(clamp)*/\\r\\nexport function clamp(arg: int, min: int, max: int): int;\\r\\nexport function clamp(arg: int2, min: int, max: int): int2;\\r\\nexport function clamp(arg: int3, min: int, max: int): int3;\\r\\nexport function clamp(arg: int4, min: int, max: int): int4;\\r\\n\\r\\nexport function clamp(arg: int2, min: int2, max: int2): int2;\\r\\nexport function clamp(arg: int3, min: int3, max: int3): int3;\\r\\nexport function clamp(arg: int4, min: int3, max: int3): int4;\\r\\n\\r\\nexport function clamp(arg: float, min: float, max: float): float;\\r\\nexport function clamp(arg: float2, min: float, max: float): float2;\\r\\nexport function clamp(arg: float3, min: float, max: float): float3;\\r\\nexport function clamp(arg: float4, min: float, max: float): float4;\\r\\n\\r\\nexport function clamp(arg: float2, min: float2, max: float2): float2;\\r\\nexport function clamp(arg: float3, min: float3, max: float3): float3;\\r\\nexport function clamp(arg: float4, min: float4, max: float4): float4;\\r\\n/** @shadeup=univ(clamp)*/\\r\\nexport function clamp(arg: any, min: any, max: any): any {\\r\\n\tif (Array.isArray(arg)) {\\r\\n\t\tif (Array.isArray(min) && Array.isArray(max)) {\\r\\n\t\t\treturn arg.map((a, i) => Math.min(Math.max(a, min[i]), max[i]));\\r\\n\t\t} else {\\r\\n\t\t\treturn arg.map((a) => Math.min(Math.max(a, min), max));\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\treturn Math.min(Math.max(arg, min), max);\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate)*/\\r\\nexport function saturate(arg: float): float;\\r\\nexport function saturate(arg: float2): float2;\\r\\nexport function saturate(arg: float3): float3;\\r\\nexport function saturate(arg: float4): float4;\\r\\n/** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\\r\\nexport function saturate(arg: any): any {\\r\\n\treturn clamp(arg, float(0), float(1));\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!($0$ == $1$))*/\\r\\nexport function eq<T extends vectorOrScalar | string>(a: T, b: T): bool;\\r\\nexport function eq(a: any, b: any): bool {\\r\\n\tlet ta = typeof a;\\r\\n\tlet tb = typeof b;\\r\\n\tif (ta != tb) {\\r\\n\t\treturn false;\\r\\n\t} else if (\\r\\n\t\t(ta == 'number' && tb == 'number') ||\\r\\n\t\t(ta == 'string' && tb == 'string') ||\\r\\n\t\t(ta == 'boolean' && tb == 'boolean') ||\\r\\n\t\t(ta == 'undefined' && tb == 'undefined')\\r\\n\t) {\\r\\n\t\treturn a == b;\\r\\n\t} else if (ta == 'object' && tb == 'object') {\\r\\n\t\tif (Array.isArray(a) && Array.isArray(b)) {\\r\\n\t\t\tif (a.length != b.length) {\\r\\n\t\t\t\treturn false;\\r\\n\t\t\t}\\r\\n\t\t\tfor (let i = 0; i < a.length; i++) {\\r\\n\t\t\t\tif (!eq(a[i], b[i])) {\\r\\n\t\t\t\t\treturn false;\\r\\n\t\t\t\t}\\r\\n\t\t\t}\\r\\n\t\t\treturn true;\\r\\n\t\t} else {\\r\\n\t\t\treturn a == b;\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!($0$ != $1$))*/\\r\\nexport const neq = (a, b) => !eq(a, b);\\r\\n\\r\\n/** @shadeup=univ(!($0$ < $1$))*/\\r\\nexport const lt = (a: scalar, b: scalar) => a < b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ <= $1$))*/\\r\\nexport const lte = (a: scalar, b: scalar) => a <= b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ > $1$))*/\\r\\nexport const gt = (a: scalar, b: scalar) => a > b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ >= $1$))*/\\r\\nexport const gte = (a: scalar, b: scalar) => a >= b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ && $1$))*/\\r\\nexport const and = (a: boolean, b: boolean) => a && b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ || $1$))*/\\r\\nexport const or = (a: boolean, b: boolean) => a || b;\\r\\n\\r\\n/** @shadeup=univ(!(!$0$))*/\\r\\nexport const not = (a: boolean) => !a;\\r\\n\\r\\n/** @shadeup=univ(~)*/\\r\\nexport function makeVector(x: int, y: int): int2;\\r\\nexport function makeVector(x: float, y: int): float2;\\r\\nexport function makeVector(x: int, y: float): float2;\\r\\nexport function makeVector(x: float, y: float): float2;\\r\\n\\r\\nexport function makeVector(x: int, y: int, z: int): int3;\\r\\nexport function makeVector(xy: int2, z: int): int3;\\r\\nexport function makeVector(x: int, yz: int2): int3;\\r\\n\\r\\nexport function makeVector(x: float, y: int, z: int): float3;\\r\\nexport function makeVector(x: int, y: float, z: int): float3;\\r\\nexport function makeVector(x: int, y: int, z: float): float3;\\r\\nexport function makeVector(x: float, y: float, z: int): float3;\\r\\nexport function makeVector(x: float, y: int, z: float): float3;\\r\\nexport function makeVector(x: int, y: float, z: float): float3;\\r\\nexport function makeVector(x: float, y: float, z: float): float3;\\r\\nexport function makeVector(xy: float2, z: float): float3;\\r\\nexport function makeVector(x: float, yz: float2): float3;\\r\\nexport function makeVector(xy: int2, z: float): float3;\\r\\nexport function makeVector(x: int, yz: float2): float3;\\r\\nexport function makeVector(xy: float2, z: int): float3;\\r\\nexport function makeVector(x: float, yz: int2): float3;\\r\\n\\r\\nexport function makeVector(x: int, y: int, z: int, w: int): int4;\\r\\nexport function makeVector(xyz: int3, w: int): int4;\\r\\nexport function makeVector(x: int, yzw: int3): int4;\\r\\n\\r\\nexport function makeVector(x: int, y: int, zw: int2): int4;\\r\\nexport function makeVector(xy: int2, z: int, w: int): int4;\\r\\nexport function makeVector(x: int, yz: int2, w: int): int4;\\r\\n\\r\\nexport function makeVector(xy: int2, zw: int2): int4;\\r\\n\\r\\nexport function makeVector(x: float, y: int, z: int, w: int): float4;\\r\\nexport function makeVector(x: int, y: float, z: int, w: int): float4;\\r\\nexport function makeVector(x: int, y: int, z: float, w: int): float4;\\r\\nexport function makeVector(x: int, y: int, z: int, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, z: int, w: int): float4;\\r\\nexport function makeVector(x: float, y: int, z: float, w: int): float4;\\r\\nexport function makeVector(x: float, y: int, z: int, w: float): float4;\\r\\nexport function makeVector(x: int, y: float, z: float, w: int): float4;\\r\\nexport function makeVector(x: int, y: float, z: int, w: float): float4;\\r\\nexport function makeVector(x: int, y: int, z: float, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, z: float, w: int): float4;\\r\\nexport function makeVector(x: float, y: float, z: int, w: float): float4;\\r\\nexport function makeVector(x: float, y: int, z: float, w: float): float4;\\r\\nexport function makeVector(x: int, y: float, z: float, w: float): float4;\\r\\nexport function makeVector(xyz: float3, w: float): float4;\\r\\nexport function makeVector(x: float, yzw: float3): float4;\\r\\nexport function makeVector(xyz: int3, w: float): float4;\\r\\nexport function makeVector(x: int, yzw: float3): float4;\\r\\nexport function makeVector(xyz: float3, w: int): float4;\\r\\nexport function makeVector(x: float, yzw: int3): float4;\\r\\nexport function makeVector(x: float, yz: float2, w: int): float4;\\r\\nexport function makeVector(x: float, yz: int2, w: float): float4;\\r\\nexport function makeVector(x: int, yz: float2, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, zw: float2): float4;\\r\\nexport function makeVector(x: float, y: int, zw: float2): float4;\\r\\nexport function makeVector(x: float, y: int, zw: int2): float4;\\r\\nexport function makeVector(x: int, y: float, zw: float2): float4;\\r\\nexport function makeVector(x: int, y: float, zw: int2): float4;\\r\\nexport function makeVector(x: int, y: int, zw: float2): float4;\\r\\nexport function makeVector(x: float, y: float, z: float, w: float): float4;\\r\\nexport function makeVector(xy: float2, z: float, w: float): float4;\\r\\nexport function makeVector(x: float, yz: float2, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, zw: float2): float4;\\r\\nexport function makeVector(xy: int2, z: float, w: float): float4;\\r\\nexport function makeVector(x: int, yz: float2, w: float): float4;\\r\\nexport function makeVector(x: int, y: float, zw: float2): float4;\\r\\nexport function makeVector(xy: float2, z: int, w: float): float4;\\r\\nexport function makeVector(x: float, yz: int2, w: float): float4;\\r\\nexport function makeVector(x: float, y: int, zw: float2): float4;\\r\\nexport function makeVector(xy: int2, z: float, w: int): float4;\\r\\nexport function makeVector(x: int, yz: float2, w: int): float4;\\r\\nexport function makeVector(x: int, y: float, zw: int2): float4;\\r\\nexport function makeVector(xy: float2, z: int, w: int): float4;\\r\\nexport function makeVector(x: float, yz: int2, w: int): float4;\\r\\nexport function makeVector(x: float, y: int, zw: int2): float4;\\r\\nexport function makeVector(xy: int2, z: int, w: float): float4;\\r\\nexport function makeVector(x: int, yz: int2, w: float): float4;\\r\\nexport function makeVector(x: int, y: int, zw: float2): float4;\\r\\nexport function makeVector(xy: int2, z: int, w: int): int4;\\r\\n/** @shadeup=univ()*/\\r\\nexport function makeVector() {\\r\\n\tlet out = [];\\r\\n\tfor (let i = 0; i < arguments.length; i++) {\\r\\n\t\tlet a = arguments[i];\\r\\n\t\tif (typeof a === 'number') {\\r\\n\t\t\tout.push(a);\\r\\n\t\t} else {\\r\\n\t\t\tfor (let j = 0; j < a.length; j++) {\\r\\n\t\t\t\tout.push(a[j]);\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t}\\r\\n\treturn out;\\r\\n\\r\\n\tthrow new Error('Invalid vector length');\\r\\n}\\r\\n\\r\\n// add('test', int(1));\\r\\n\\r\\ntype swizChar = 'x' | 'y' | 'z' | 'w' | 'r' | 'g' | 'b' | 'a';\\r\\ntype swizStr4 = `${swizChar}${swizChar}${swizChar}${swizChar}`;\\r\\ntype swizStr3 = `${swizChar}${swizChar}${swizChar}`;\\r\\ntype swizStr2 = `${swizChar}${swizChar}`;\\r\\ntype swizStr1 = `${swizChar}`;\\r\\ntype swizStr4Ord = `xyzw` | `rgba` | `xxxx` | `rrrr`;\\r\\ntype swizStr3Ord = `xyz` | `rgb` | `xxx` | `rrr`;\\r\\ntype swizStr2Ord = `xy` | `rg` | `xx` | `rr`;\\r\\ntype swizStr1Ord = `x` | `r`;\\r\\n\\r\\nconst swizIndex: { [key: string]: number } = {\\r\\n\tx: 0,\\r\\n\ty: 1,\\r\\n\tz: 2,\\r\\n\tw: 3,\\r\\n\tr: 0,\\r\\n\tg: 1,\\r\\n\tb: 2,\\r\\n\ta: 3\\r\\n};\\r\\n\\r\\nconst getSwizIndexFast = (swiz: string) => {\\r\\n\tswitch (swiz) {\\r\\n\t\tcase 'x':\\r\\n\t\t\treturn 0;\\r\\n\t\tcase 'y':\\r\\n\t\t\treturn 1;\\r\\n\t\tcase 'z':\\r\\n\t\t\treturn 2;\\r\\n\t\tcase 'w':\\r\\n\t\t\treturn 3;\\r\\n\t\tcase 'r':\\r\\n\t\t\treturn 0;\\r\\n\t\tcase 'g':\\r\\n\t\t\treturn 1;\\r\\n\t\tcase 'b':\\r\\n\t\t\treturn 2;\\r\\n\t\tcase 'a':\\r\\n\t\t\treturn 3;\\r\\n\t}\\r\\n};\\r\\n\\r\\n/** @shadeup=shader */\\r\\nexport function testDocComment() {\\r\\n\treturn 1;\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(~)*/\\r\\nexport function swizzle<S extends swizStr4Ord, T extends int>(v: T, swiz: S, assign?: T): int4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4Ord, T extends uint>(v: T, swiz: S, assign?: T): uint4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4Ord, T extends float>(v: T, swiz: S, assign?: T): float4;\\r\\n\\r\\nexport function swizzle<S extends swizStr3Ord, T extends int>(v: T, swiz: S, assign?: T): int3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3Ord, T extends uint>(v: T, swiz: S, assign?: T): uint3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3Ord, T extends float>(v: T, swiz: S, assign?: T): float3;\\r\\n\\r\\nexport function swizzle<S extends swizStr2Ord, T extends int>(v: T, swiz: S, assign?: T): int2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2Ord, T extends uint>(v: T, swiz: S, assign?: T): uint2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2Ord, T extends float>(v: T, swiz: S, assign?: T): float2;\\r\\n\\r\\nexport function swizzle<S extends swizStr1Ord, T extends int>(v: T, swiz: S, assign?: T): int;\\r\\n\\r\\nexport function swizzle<S extends swizStr1Ord, T extends uint>(v: T, swiz: S, assign?: T): uint;\\r\\n\\r\\nexport function swizzle<S extends swizStr1Ord, T extends float>(v: T, swiz: S, assign?: T): float;\\r\\n\\r\\nexport function swizzle<S extends swizStr4, T extends anyInt>(v: T, swiz: S, assign?: int4): int4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4, T extends anyUint>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: uint4\\r\\n): uint4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float4\\r\\n): float4;\\r\\n\\r\\nexport function swizzle<S extends swizStr3, T extends anyInt>(v: T, swiz: S, assign?: int3): int3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3, T extends anyUint>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: uint3\\r\\n): uint3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float3\\r\\n): float3;\\r\\n\\r\\nexport function swizzle<S extends swizStr2, T extends anyInt>(v: T, swiz: S, assign?: int2): int2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2, T extends anyUint>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: uint2\\r\\n): uint2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float2\\r\\n): float2;\\r\\n\\r\\nexport function swizzle<S extends swizStr1, T extends anyInt>(v: T, swiz: S, assign?: int): int;\\r\\n\\r\\nexport function swizzle<S extends swizStr1, T extends anyUint>(v: T, swiz: S, assign?: uint): uint;\\r\\n\\r\\nexport function swizzle<S extends swizStr1, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float\\r\\n): float;\\r\\n\\r\\nexport function swizzle<S extends string, T, A extends keyof T>(v: T, swiz: A, assign?: T): T[A];\\r\\n\\r\\nexport function swizzle(v: any, swiz: string, assign?: any) {\\r\\n\tif (typeof v === 'number') {\\r\\n\t\tif (swiz.length === 1) {\\r\\n\t\t\treturn v;\\r\\n\t\t} else if (swiz.length === 2) {\\r\\n\t\t\treturn [v, v];\\r\\n\t\t} else if (swiz.length === 3) {\\r\\n\t\t\treturn [v, v, v];\\r\\n\t\t} else if (swiz.length === 4) {\\r\\n\t\t\treturn [v, v, v, v];\\r\\n\t\t}\\r\\n\t} else if (Array.isArray(v)) {\\r\\n\t\tif (typeof assign !== 'undefined') {\\r\\n\t\t\tfor (let i = 0; i < swiz.length; i++) {\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[i])] = assign[i] ?? assign;\\r\\n\t\t\t}\\r\\n\t\t\treturn v;\\r\\n\t\t}\\r\\n\t\tif (swiz.length === 1) {\\r\\n\t\t\treturn v[getSwizIndexFast(swiz)];\\r\\n\t\t} else if (swiz.length === 2) {\\r\\n\t\t\treturn [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\\r\\n\t\t} else if (swiz.length === 3) {\\r\\n\t\t\treturn [\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[0])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[1])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[2])]\\r\\n\t\t\t];\\r\\n\t\t} else if (swiz.length === 4) {\\r\\n\t\t\treturn [\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[0])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[1])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[2])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[3])]\\r\\n\t\t\t];\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\treturn (v as any)[swiz];\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport function intifyVector(v: vector) {\\r\\n\tif (typeof v === 'number') {\\r\\n\t\treturn v;\\r\\n\t} else if (Array.isArray(v)) {\\r\\n\t\treturn v.map((v) => v | 0);\\r\\n\t} else {\\r\\n\t\treturn v;\\r\\n\t}\\r\\n}\\r\\n\\r\\nimport { FM as FastMath } from './static-math';\\r\\nexport const FM = FastMath;\\r\\n\\r\\n// type f32 = number & { __float: never };\\r\\n// type i32 = number & { __int: never };\\r\\n// type num = f32 | i32;\\r\\n\\r\\n// function f32(a: number): f32 {\\r\\n// \treturn a as f32;\\r\\n// }\\r\\n\\r\\n// function i32(a: number): i32 {\\r\\n// \treturn a as i32;\\r\\n// }\\r\\n\\r\\n// type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\\r\\n// type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\\r\\n\\r\\n// export const abc: numeric2 = (a, b, c) => a + b + c;\\r\\n\\r\\n// abc(f32(1), i32(2));\\r\\n\\r\\nexport class atomic_internal<T extends uint | int> {\\r\\n\tprivate __type: T;\\r\\n\tprivate __value: number;\\r\\n\tconstructor(value: T) {\\r\\n\t\tthis.__value = value;\\r\\n\t}\\r\\n\\r\\n\tprivate $mutate?: (to: value) => void;\\r\\n\\r\\n\t/** @shadeup=univ(!atomicLoad(&$self$))*/\\r\\n\tload(): T {\\r\\n\t\treturn this.__value as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicStore(&$self$, $0$))*/\\r\\n\tstore(value: T): void {\\r\\n\t\tthis.__value = value as any;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t}\\r\\n\\r\\n\t/** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\\r\\n\tadd(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value += value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicSub(&$self$, $0$))*/\\r\\n\tsub(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value -= value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicMax(&$self$, $0$))*/\\r\\n\tmax(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = Math.max(value, this.__value);\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicMin(&$self$, $0$))*/\\r\\n\tmin(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = Math.min(value, this.__value);\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\\r\\n\tand(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value & this.__value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicOr(&$self$, $0$))*/\\r\\n\tor(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value | this.__value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicXor(&$self$, $0$))*/\\r\\n\txor(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value ^ this.__value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\\r\\n\texchange(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\\r\\n\tcompareExchangeWeak(compare: T, value: T): __atomic_compare_exchange_result<T> {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tif (old == compare) {\\r\\n\t\t\tthis.__value = value;\\r\\n\t\t}\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn {\\r\\n\t\t\told_value: old as T,\\r\\n\t\t\texchanged: old == compare\\r\\n\t\t};\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport type __atomic_compare_exchange_result<T extends uint | int> = {\\r\\n\told_value: T;\\r\\n\texchanged: boolean;\\r\\n};\\r\\n\\r\\nexport type atomic<T extends uint | int> = atomic_internal<T>;\\r\\n\\r\\nexport function atomic<T extends uint | int>(value: T): atomic<T> {\\r\\n\treturn new atomic_internal(value);\\r\\n}\\r\\n\\r\\n(window as any).makeAtomic = atomic;\\r\\n\\r\\n/**\\r\\n * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\\r\\n *\\r\\n * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\\r\\n *\\r\\n * @shadeup=univ(!workgroupBarrier())\\r\\n */\\r\\nexport function workgroupBarrier() {}\\r\\n\\r\\n/**\\r\\n * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\\r\\n *\\r\\n * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\\r\\n *\\r\\n * @shadeup=univ(!storageBarrier())\\r\\n */\\r\\nexport function storageBarrier() {}\\r\\n\\r\\n/**\\r\\n * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\\r\\n *\\r\\n * @shadeup=univ(!workgroupUniformLoad(&$0$))\\r\\n */\\r\\nexport function workgroupUniformLoad<T>(p: T): T {\\r\\n\treturn p;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Discards the current fragment.\\r\\n *\\r\\n * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\\r\\n *\\r\\n * See: https://www.w3.org/TR/WGSL/#discard-statement\\r\\n *\\r\\n * @shadeup=univ(!discard;)\\r\\n */\\r\\nexport function discard() {}\\r\\n\\r\\n/**\\r\\n * Returns the derivative of the input value with respect to the window-space x coordinate.\\r\\n * @param value - The input value.\\r\\n * @returns The derivative of the input value with respect to the window-space x coordinate.\\r\\n * @shadeup=glsl(!dFdx($0$))\\r\\n * @shadeup=wgsl(!dpdx($0$))\\r\\n */\\r\\nexport function ddx<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns the derivative of the input value with respect to the window-space y coordinate.\\r\\n * @param value - The input value.\\r\\n *\\r\\n * @returns The derivative of the input value with respect to the window-space y coordinate.\\r\\n * @shadeup=glsl(!dFdy($0$))\\r\\n * @shadeup=wgsl(!dpdy($0$))\\r\\n */\\r\\nexport function ddy<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdxFine($0$))\\r\\n * @shadeup=wgsl(!dpdxFine($0$))\\r\\n */\\r\\nexport function ddxFine<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdyFine($0$))\\r\\n * @shadeup=wgsl(!dpdyFine($0$))\\r\\n */\\r\\nexport function ddyFine<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdxCoarse($0$))\\r\\n * @shadeup=wgsl(!dpdxCoarse($0$))\\r\\n */\\r\\nexport function ddxCoarse<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdyCoarse($0$))\\r\\n * @shadeup=wgsl(!dpdyCoarse($0$))\\r\\n */\\r\\nexport function ddyCoarse<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!bitcast<$[0]$>($0$))\\r\\n */\\r\\nexport function bitcast<T extends scalar>(value: scalar): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack4x8snorm($0$))\\r\\n */\\r\\nexport function pack4x8snorm(value: float4): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack4x8unorm($0$))\\r\\n */\\r\\nexport function pack4x8unorm(value: float4): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack2x16snorm($0$))\\r\\n */\\r\\nexport function pack2x16snorm(value: float2): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack2x16unorm($0$))\\r\\n */\\r\\nexport function pack2x16unorm(value: float2): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack2x16float($0$))\\r\\n */\\r\\nexport function pack2x16float(value: float2): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack4x8snorm($0$))\\r\\n */\\r\\nexport function unpack4x8snorm(value: uint): float4 {\\r\\n\treturn float4(0, 0, 0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack4x8unorm($0$))\\r\\n */\\r\\nexport function unpack4x8unorm(value: uint): float4 {\\r\\n\treturn float4(0, 0, 0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack2x16snorm($0$))\\r\\n */\\r\\nexport function unpack2x16snorm(value: uint): float2 {\\r\\n\treturn float2(0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack2x16unorm($0$))\\r\\n */\\r\\nexport function unpack2x16unorm(value: uint): float2 {\\r\\n\treturn float2(0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack2x16float($0$))\\r\\n */\\r\\nexport function unpack2x16float(value: uint): float2 {\\r\\n\treturn float2(0, 0);\\r\\n}\\r\\n\";\nconst stdStaticMath = \"\\n///\\n/// GENERATED\\n/// DO NOT EDIT THIS FILE\\n/// see generate-static-math.ts\\n///\\nexport const FM = {\\n\tadd_1_1(a: number, b: number): number { return a + b; },\\n\tadd_2_1(a: [number, number], b: number): [number, number] { return [a[0] + b, a[1] + b]; },\\n\tadd_1_2(a: number, b: [number, number]): [number, number] { return [a + b[0], a + b[1]]; },\\n\tadd_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] + b[0], a[1] + b[1]]; },\\n\tadd_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] + b, a[1] + b, a[2] + b]; },\\n\tadd_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a + b[0], a + b[1], a + b[2]]; },\\n\tadd_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\\n\tadd_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\\n\tadd_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\\n\tadd_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\\n\tsub_1_1(a: number, b: number): number { return a - b; },\\n\tsub_2_1(a: [number, number], b: number): [number, number] { return [a[0] - b, a[1] - b]; },\\n\tsub_1_2(a: number, b: [number, number]): [number, number] { return [a - b[0], a - b[1]]; },\\n\tsub_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] - b[0], a[1] - b[1]]; },\\n\tsub_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] - b, a[1] - b, a[2] - b]; },\\n\tsub_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a - b[0], a - b[1], a - b[2]]; },\\n\tsub_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\\n\tsub_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\\n\tsub_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\\n\tsub_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\\n\tdiv_1_1(a: number, b: number): number { return a / b; },\\n\tdiv_2_1(a: [number, number], b: number): [number, number] { return [a[0] / b, a[1] / b]; },\\n\tdiv_1_2(a: number, b: [number, number]): [number, number] { return [a / b[0], a / b[1]]; },\\n\tdiv_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] / b[0], a[1] / b[1]]; },\\n\tdiv_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] / b, a[1] / b, a[2] / b]; },\\n\tdiv_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a / b[0], a / b[1], a / b[2]]; },\\n\tdiv_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\\n\tdiv_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\\n\tdiv_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\\n\tdiv_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\\n\tmul_1_1(a: number, b: number): number { return a * b; },\\n\tmul_2_1(a: [number, number], b: number): [number, number] { return [a[0] * b, a[1] * b]; },\\n\tmul_1_2(a: number, b: [number, number]): [number, number] { return [a * b[0], a * b[1]]; },\\n\tmul_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] * b[0], a[1] * b[1]]; },\\n\tmul_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] * b, a[1] * b, a[2] * b]; },\\n\tmul_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a * b[0], a * b[1], a * b[2]]; },\\n\tmul_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\\n\tmul_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\\n\tmul_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\\n\tmul_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\\n\tmod_1_1(a: number, b: number): number { return a % b; },\\n\tmod_2_1(a: [number, number], b: number): [number, number] { return [a[0] % b, a[1] % b]; },\\n\tmod_1_2(a: number, b: [number, number]): [number, number] { return [a % b[0], a % b[1]]; },\\n\tmod_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] % b[0], a[1] % b[1]]; },\\n\tmod_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] % b, a[1] % b, a[2] % b]; },\\n\tmod_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a % b[0], a % b[1], a % b[2]]; },\\n\tmod_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\\n\tmod_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\\n\tmod_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\\n\tmod_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\\n\tbitand_1_1(a: number, b: number): number { return a & b; },\\n\tbitand_2_1(a: [number, number], b: number): [number, number] { return [a[0] & b, a[1] & b]; },\\n\tbitand_1_2(a: number, b: [number, number]): [number, number] { return [a & b[0], a & b[1]]; },\\n\tbitand_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] & b[0], a[1] & b[1]]; },\\n\tbitand_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] & b, a[1] & b, a[2] & b]; },\\n\tbitand_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a & b[0], a & b[1], a & b[2]]; },\\n\tbitand_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\\n\tbitand_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\\n\tbitand_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\\n\tbitand_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\\n\tbitor_1_1(a: number, b: number): number { return a | b; },\\n\tbitor_2_1(a: [number, number], b: number): [number, number] { return [a[0] | b, a[1] | b]; },\\n\tbitor_1_2(a: number, b: [number, number]): [number, number] { return [a | b[0], a | b[1]]; },\\n\tbitor_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] | b[0], a[1] | b[1]]; },\\n\tbitor_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] | b, a[1] | b, a[2] | b]; },\\n\tbitor_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a | b[0], a | b[1], a | b[2]]; },\\n\tbitor_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\\n\tbitor_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\\n\tbitor_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\\n\tbitor_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\\n\tbitxor_1_1(a: number, b: number): number { return a ^ b; },\\n\tbitxor_2_1(a: [number, number], b: number): [number, number] { return [a[0] ^ b, a[1] ^ b]; },\\n\tbitxor_1_2(a: number, b: [number, number]): [number, number] { return [a ^ b[0], a ^ b[1]]; },\\n\tbitxor_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] ^ b[0], a[1] ^ b[1]]; },\\n\tbitxor_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\\n\tbitxor_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\\n\tbitxor_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\\n\tbitxor_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\\n\tbitxor_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\\n\tbitxor_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\\n\tlshift_1_1(a: number, b: number): number { return a << b; },\\n\tlshift_2_1(a: [number, number], b: number): [number, number] { return [a[0] << b, a[1] << b]; },\\n\tlshift_1_2(a: number, b: [number, number]): [number, number] { return [a << b[0], a << b[1]]; },\\n\tlshift_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] << b[0], a[1] << b[1]]; },\\n\tlshift_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] << b, a[1] << b, a[2] << b]; },\\n\tlshift_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a << b[0], a << b[1], a << b[2]]; },\\n\tlshift_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\\n\tlshift_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\\n\tlshift_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\\n\tlshift_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\\n\trshift_1_1(a: number, b: number): number { return a >> b; },\\n\trshift_2_1(a: [number, number], b: number): [number, number] { return [a[0] >> b, a[1] >> b]; },\\n\trshift_1_2(a: number, b: [number, number]): [number, number] { return [a >> b[0], a >> b[1]]; },\\n\trshift_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] >> b[0], a[1] >> b[1]]; },\\n\trshift_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\\n\trshift_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a >> b[0], a >> b[1], a >> b[2]]; },\\n\trshift_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\\n\trshift_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\\n\trshift_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\\n\trshift_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\\n\tbitnot_1(a: number): number { return ~a; },\\n\tbitnot_2(a: [number, number]): [number, number] { return [~a[0], ~a[1]]; },\\n\tbitnot_3(a: [number, number, number]): [number, number, number] { return [~a[0], ~a[1], ~a[2]]; },\\n\tbitnot_4(a: [number, number, number, number]): [number, number, number, number] { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\\n\tnegate_1(a: number): number { return -a; },\\n\tnegate_2(a: [number, number]): [number, number] { return [-a[0], -a[1]]; },\\n\tnegate_3(a: [number, number, number]): [number, number, number] { return [-a[0], -a[1], -a[2]]; },\\n\tnegate_4(a: [number, number, number, number]): [number, number, number, number] { return [-a[0], -a[1], -a[2], -a[3]]; },\\n\tpositive_1(a: number): number { return Math.abs(a); },\\n\tpositive_2(a: [number, number]): [number, number] { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n\tpositive_3(a: [number, number, number]): [number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n\tpositive_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n\tabs_1(a: number): number { return Math.abs(a); },\\n\tabs_2(a: [number, number]): [number, number] { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n\tabs_3(a: [number, number, number]): [number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n\tabs_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n\tfloor_1(a: number): number { return Math.floor(a); },\\n\tfloor_2(a: [number, number]): [number, number] { return [Math.floor(a[0]), Math.floor(a[1])]; },\\n\tfloor_3(a: [number, number, number]): [number, number, number] { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\\n\tfloor_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\\n\tceil_1(a: number): number { return Math.ceil(a); },\\n\tceil_2(a: [number, number]): [number, number] { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\\n\tceil_3(a: [number, number, number]): [number, number, number] { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\\n\tceil_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\\n\tround_1(a: number): number { return Math.round(a); },\\n\tround_2(a: [number, number]): [number, number] { return [Math.round(a[0]), Math.round(a[1])]; },\\n\tround_3(a: [number, number, number]): [number, number, number] { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\\n\tround_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\\n\tsign_1(a: number): number { return Math.sign(a); },\\n\tsign_2(a: [number, number]): [number, number] { return [Math.sign(a[0]), Math.sign(a[1])]; },\\n\tsign_3(a: [number, number, number]): [number, number, number] { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\\n\tsign_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\\n\tcos_1(a: number): number { return Math.cos(a); },\\n\tcos_2(a: [number, number]): [number, number] { return [Math.cos(a[0]), Math.cos(a[1])]; },\\n\tcos_3(a: [number, number, number]): [number, number, number] { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\\n\tcos_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\\n\tsin_1(a: number): number { return Math.sin(a); },\\n\tsin_2(a: [number, number]): [number, number] { return [Math.sin(a[0]), Math.sin(a[1])]; },\\n\tsin_3(a: [number, number, number]): [number, number, number] { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\\n\tsin_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\\n\ttan_1(a: number): number { return Math.tan(a); },\\n\ttan_2(a: [number, number]): [number, number] { return [Math.tan(a[0]), Math.tan(a[1])]; },\\n\ttan_3(a: [number, number, number]): [number, number, number] { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\\n\ttan_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\\n\tacos_1(a: number): number { return Math.acos(a); },\\n\tacos_2(a: [number, number]): [number, number] { return [Math.acos(a[0]), Math.acos(a[1])]; },\\n\tacos_3(a: [number, number, number]): [number, number, number] { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\\n\tacos_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\\n\tasin_1(a: number): number { return Math.asin(a); },\\n\tasin_2(a: [number, number]): [number, number] { return [Math.asin(a[0]), Math.asin(a[1])]; },\\n\tasin_3(a: [number, number, number]): [number, number, number] { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\\n\tasin_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\\n\tatan_1(a: number): number { return Math.atan(a); },\\n\tatan_2(a: [number, number]): [number, number] { return [Math.atan(a[0]), Math.atan(a[1])]; },\\n\tatan_3(a: [number, number, number]): [number, number, number] { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\\n\tatan_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\\n\tcosh_1(a: number): number { return Math.cosh(a); },\\n\tcosh_2(a: [number, number]): [number, number] { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\\n\tcosh_3(a: [number, number, number]): [number, number, number] { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\\n\tcosh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\\n\tsinh_1(a: number): number { return Math.sinh(a); },\\n\tsinh_2(a: [number, number]): [number, number] { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\\n\tsinh_3(a: [number, number, number]): [number, number, number] { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\\n\tsinh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\\n\ttanh_1(a: number): number { return Math.tanh(a); },\\n\ttanh_2(a: [number, number]): [number, number] { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\\n\ttanh_3(a: [number, number, number]): [number, number, number] { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\\n\ttanh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\\n\tacosh_1(a: number): number { return Math.acosh(a); },\\n\tacosh_2(a: [number, number]): [number, number] { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\\n\tacosh_3(a: [number, number, number]): [number, number, number] { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\\n\tacosh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\\n\tasinh_1(a: number): number { return Math.asinh(a); },\\n\tasinh_2(a: [number, number]): [number, number] { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\\n\tasinh_3(a: [number, number, number]): [number, number, number] { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\\n\tasinh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\\n\tatanh_1(a: number): number { return Math.atanh(a); },\\n\tatanh_2(a: [number, number]): [number, number] { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\\n\tatanh_3(a: [number, number, number]): [number, number, number] { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\\n\tatanh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\\n\texp_1(a: number): number { return Math.exp(a); },\\n\texp_2(a: [number, number]): [number, number] { return [Math.exp(a[0]), Math.exp(a[1])]; },\\n\texp_3(a: [number, number, number]): [number, number, number] { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\\n\texp_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\\n\tlog_1(a: number): number { return Math.log(a); },\\n\tlog_2(a: [number, number]): [number, number] { return [Math.log(a[0]), Math.log(a[1])]; },\\n\tlog_3(a: [number, number, number]): [number, number, number] { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\\n\tlog_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\\n\tlog2_1(a: number): number { return Math.log2(a); },\\n\tlog2_2(a: [number, number]): [number, number] { return [Math.log2(a[0]), Math.log2(a[1])]; },\\n\tlog2_3(a: [number, number, number]): [number, number, number] { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\\n\tlog2_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\\n\tlog10_1(a: number): number { return Math.log10(a); },\\n\tlog10_2(a: [number, number]): [number, number] { return [Math.log10(a[0]), Math.log10(a[1])]; },\\n\tlog10_3(a: [number, number, number]): [number, number, number] { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\\n\tlog10_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\\n\tsqrt_1(a: number): number { return Math.sqrt(a); },\\n\tsqrt_2(a: [number, number]): [number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\\n\tsqrt_3(a: [number, number, number]): [number, number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\\n\tsqrt_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\\n\tint_2_1_1(a: number, b: number): [number, number] { return [a|0, b|0]; },\\n\tint_2_2(a: [number, number]): [number, number] { return [a[0]|0, a[1]|0]; },\\n\tint_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a|0, b|0, c|0]; },\\n\tint_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]|0, a[1]|0, b|0]; },\\n\tint_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a|0, b[0]|0, b[1]|0]; },\\n\tint_3_3(a: [number, number, number]): [number, number, number] { return [a[0]|0, a[1]|0, a[2]|0]; },\\n\tint_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a|0, b|0, c|0, d|0]; },\\n\tint_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]|0, a[1]|0, b|0, c|0]; },\\n\tint_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a|0, b[0]|0, b[1]|0, c|0]; },\\n\tint_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a|0, b|0, c[0]|0, c[1]|0]; },\\n\tint_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]|0, a[1]|0, a[2]|0, b|0]; },\\n\tint_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a|0, b[0]|0, b[1]|0, b[2]|0]; },\\n\tint_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]|0, a[1]|0, b[0]|0, b[1]|0]; },\\n\tint_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]|0, a[1]|0, a[2]|0, a[3]|0]; },\\n\tfloat_2_1_1(a: number, b: number): [number, number] { return [a, b]; },\\n\tfloat_2_2(a: [number, number]): [number, number] { return [a[0], a[1]]; },\\n\tfloat_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a, b, c]; },\\n\tfloat_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0], a[1], b]; },\\n\tfloat_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a, b[0], b[1]]; },\\n\tfloat_3_3(a: [number, number, number]): [number, number, number] { return [a[0], a[1], a[2]]; },\\n\tfloat_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a, b, c, d]; },\\n\tfloat_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0], a[1], b, c]; },\\n\tfloat_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a, b[0], b[1], c]; },\\n\tfloat_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a, b, c[0], c[1]]; },\\n\tfloat_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0], a[1], a[2], b]; },\\n\tfloat_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a, b[0], b[1], b[2]]; },\\n\tfloat_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0], a[1], b[0], b[1]]; },\\n\tfloat_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0], a[1], a[2], a[3]]; },\\n\tuint_2_1_1(a: number, b: number): [number, number] { return [a>>>0, b>>>0]; },\\n\tuint_2_2(a: [number, number]): [number, number] { return [a[0]>>>0, a[1]>>>0]; },\\n\tuint_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a>>>0, b>>>0, c>>>0]; },\\n\tuint_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]>>>0, a[1]>>>0, b>>>0]; },\\n\tuint_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0]; },\\n\tuint_3_3(a: [number, number, number]): [number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0]; },\\n\tuint_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a>>>0, b>>>0, c>>>0, d>>>0]; },\\n\tuint_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, b>>>0, c>>>0]; },\\n\tuint_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0, c>>>0]; },\\n\tuint_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a>>>0, b>>>0, c[0]>>>0, c[1]>>>0]; },\\n\tuint_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0, b>>>0]; },\\n\tuint_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0, b[2]>>>0]; },\\n\tuint_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, b[0]>>>0, b[1]>>>0]; },\\n\tuint_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0, a[3]>>>0]; },\\n}\\n\";\nconst stdAll = `/**__SHADEUP_STRUCT_INJECTION_HOOK__*/\\r\nexport const __dummy = 1;\\r\n\\r\nimport {\\r\n\tbool,\\r\n\tfloat,\\r\n\tfloat2,\\r\n\tfloat3,\\r\n\tfloat4,\\r\n\tint,\\r\n\tint2,\\r\n\tint3,\\r\n\tint4,\\r\n\tuint,\\r\n\tuint3,\\r\n\tatomic\\r\n} from '/std_math';\\r\n// import { Mesh } from '/_std/mesh';\\r\n\\r\nexport class Mesh {\\r\n\tprivate vertices: float3[] = [];\\r\n\tprivate triangles: int[] = [];\\r\n\tprivate normals: float3[] = [];\\r\n\tprivate tangents: float3[] = [];\\r\n\tprivate bitangents: float3[] = [];\\r\n\tprivate uvs: float2[] = [];\\r\n\tprivate colors: float4[] = [];\\r\n\tsymbol: Symbol;\\r\n\\r\n\tconstructor(prefils: {\\r\n\t\tvertices?: float3[];\\r\n\t\ttriangles?: int[];\\r\n\t\tnormals?: float3[];\\r\n\t\ttangents?: float3[];\\r\n\t\tbitangents?: float3[];\\r\n\t\tuvs?: float2[];\\r\n\t\tcolors?: float4[];\\r\n\t}) {\\r\n\t\tthis.symbol = Symbol();\\r\n\t\tif (prefils.vertices) this.vertices = prefils.vertices;\\r\n\t\tif (prefils.triangles) this.triangles = prefils.triangles;\\r\n\t\tif (prefils.normals) this.normals = prefils.normals;\\r\n\t\tif (prefils.tangents) this.tangents = prefils.tangents;\\r\n\t\tif (prefils.bitangents) this.bitangents = prefils.bitangents;\\r\n\t\tif (prefils.uvs) this.uvs = prefils.uvs;\\r\n\t\tif (prefils.colors) this.colors = prefils.colors;\\r\n\t}\\r\n\\r\n\tgetVertices() {\\r\n\t\treturn this.vertices;\\r\n\t}\\r\n\\r\n\tgetTriangles() {\\r\n\t\treturn this.triangles;\\r\n\t}\\r\n\\r\n\tgetNormals() {\\r\n\t\treturn this.normals;\\r\n\t}\\r\n\\r\n\tgetTangents() {\\r\n\t\treturn this.tangents;\\r\n\t}\\r\n\\r\n\tgetBitangents() {\\r\n\t\treturn this.bitangents;\\r\n\t}\\r\n\\r\n\tgetUVs() {\\r\n\t\treturn this.uvs;\\r\n\t}\\r\n\\r\n\tgetColors() {\\r\n\t\treturn this.colors;\\r\n\t}\\r\n}\\r\n\\r\ndeclare global {\\r\n\tconst localEngineContext: any;\\r\n}\\r\n\\r\nexport const getShadeupLocalContext = (): any => {\\r\n\tif (typeof localEngineContext !== 'undefined') {\\r\n\t\treturn localEngineContext;\\r\n\t} else {\\r\n\t\treturn window;\\r\n\t}\\r\n};\\r\n\\r\n/**\\r\n * Prints a set of value(s) to the console. Values will be converted to strings before printing.\\r\n *\\r\n * @param args Any number of values to print to the console\\r\n */\\r\nexport function print(...args: any[]) {\\r\n\tconsole.log(...args);\\r\n\tif (typeof getShadeupLocalContext()['__shadeup_print'] === 'function') {\\r\n\t\tgetShadeupLocalContext()['__shadeup_print'](...args);\\r\n\t}\\r\n}\\r\n\\r\n/**\\r\n * Flushes (executes) all queued compute or draw calls\\r\n * @shadeup=tag(async) @shadeup=noemit_gpu\\r\n */\\r\nexport async function flush() {\\r\n\tif (typeof getShadeupLocalContext()['flushAdapter'] === 'function') {\\r\n\t\treturn await getShadeupLocalContext()['flushAdapter']();\\r\n\t}\\r\n}\\r\n\\r\n/**\\r\n * Displays a single value in the stats panel at the top right\\r\n *\\r\n * @param name key for this stat (e.g. \"fps\")\\r\n * @param value any value\\r\n */\\r\nexport function stat(name: string, value: any) {\\r\n\tif (typeof getShadeupLocalContext()['__shadeup_stat'] === 'function') {\\r\n\t\tgetShadeupLocalContext()['__shadeup_stat'](name, value);\\r\n\t}\\r\n}\\r\n\\r\n/**\\r\n * Display a graph of a numeric value over time\\r\n *\\r\n * @param name key for this stat (e.g. \"fps\")\\r\n * @param value any numeric value\\r\n * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\\r\n */\\r\nexport function statGraph(name: string, value: float, sampleRate: int = 1) {\\r\n\tif (typeof getShadeupLocalContext()['__shadeup_statGraph'] === 'function') {\\r\n\t\tgetShadeupLocalContext()['__shadeup_statGraph'](name, value);\\r\n\t}\\r\n}\\r\n\\r\n// type InferPayload1<T> = {\\r\n// \tdata: [T];\\r\n// \tcallback: (a: { attachment0: T }) => void;\\r\n// };\\r\n\\r\n// type InferPayload2<T, I> = {\\r\n// \tdata: [T, I];\\r\n// \tcallback: (a: { attachment0: T; attachment1: I }) => void;\\r\n// };\\r\n\\r\n// function infer(payload: InferPayload1 | InferPayload2);\\r\n// function infer(a: any) {}\\r\n\\r\n// infer({\\r\n// \tdata: [67],\\r\n// \tcallback: (a) => {\\r\n// \t\ta[0];\\r\n// \t}\\r\n// });\\r\n\\r\ntype FnPass<T> = (a: T) => void;\\r\n\\r\nfunction infer<I, O, C>(fn: (a: I, b: O) => void): shader<I, O, C> {\\r\n\treturn fn as shader<I, O, C>;\\r\n}\\r\n\\r\n// export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\\r\n// export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\\r\n// export function draw(\\r\n// \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\\r\n// \tsecond?: shader<ShaderInput, ShaderOutput>,\\r\n// \tthird?: shader<ShaderInput, ShaderOutput>\\r\n// ) {\\r\n// \tif ('vertices' in first && second && third) {\\r\n// \t\t__shadeup_dispatch_draw_geometry(first, second, third);\\r\n// \t} else if (first && !second && !third) {\\r\n// \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\r\n// \t}\\r\n// }\\r\n\\r\n// draw(makeShader('', (a, b) => {}));\\r\n// drawAlt(\\r\n// \tmakeShader(\\r\n// \t\t'000004808000091289258019303699031390005438610',\\r\n// \t\t/**@shadeup=shader*/ (__in, __out) => {\\r\n// \t\t\t__out.color;\\r\n// \t\t}\\r\n// \t)\\r\n// );\\r\n// /**\\r\n//  *\\r\n//  */\\r\nexport function compute(workgroups: int3, computeShader: shader<any, any, any>) {\\r\n\tgetShadeupLocalContext().__shadeup_dispatch_compute(workgroups, computeShader);\\r\n}\\r\n\\r\n// function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\\r\n\\r\n// type x<T> = { x: T };\\r\n\\r\n// function makeTex<T>(a: T): x<T> {\\r\n// \treturn { x: a };\\r\n// }\\r\n// draw({\\r\n// \tvertex: shader('abc', (__in, __out) => {}),\\r\n// \tattachments: [\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 })\\r\n// \t],\\r\n// \tmesh: new Mesh(),\\r\n// \tfragment: shader('abc', (__in, __out) => {\\r\n// \t\t//__out.attachment0\\r\n// \t})\\r\n// });\\r\n\\r\nexport function globalVarInit<T>(\\r\n\tfileName: string,\\r\n\tvarName: string,\\r\n\tinitFn: () => T,\\r\n\tgetterFn: any\\r\n): T {\\r\n\tif (!getShadeupLocalContext()['shadeup_globals']) {\\r\n\t\tgetShadeupLocalContext()['shadeup_globals'] = {};\\r\n\t}\\r\n\\r\n\tif (!getShadeupLocalContext()['shadeup_globals'][fileName]) {\\r\n\t\tgetShadeupLocalContext()['shadeup_globals'][fileName] = {};\\r\n\t}\\r\n\\r\n\t// Disable caching for now\\r\n\tconst cache = false;\\r\n\tif (!(varName in getShadeupLocalContext()['shadeup_globals'][fileName]) || !cache) {\\r\n\t\tgetShadeupLocalContext()['shadeup_globals'][fileName][varName] = initFn();\\r\n\t}\\r\n\tgetShadeupLocalContext()['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\\r\n\treturn getShadeupLocalContext()['shadeup_globals'][fileName][varName] as T;\\r\n}\\r\n\\r\nexport function globalVarGet(fileName, varName) {\\r\n\tif (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\\r\n\t\treturn getShadeupLocalContext()[varName];\\r\n\t}\\r\n\\r\n\treturn getShadeupLocalContext()['shadeup_globals'][fileName]['$getter_' + varName]();\\r\n}\\r\n\\r\ninterface ToString {\\r\n\ttoString(): string;\\r\n}\\r\n\\r\ntype HashableType =\\r\n\t| string\\r\n\t| float\\r\n\t| int\\r\n\t| bool\\r\n\t| float2\\r\n\t| float3\\r\n\t| float4\\r\n\t| int2\\r\n\t| int3\\r\n\t| int4\\r\n\t| ToString;\\r\n\\r\nexport function hashableTypeToString(k: HashableType) {\\r\n\tif (typeof k == 'number') {\\r\n\t\treturn k.toString();\\r\n\t} else if (typeof k == 'object') {\\r\n\t\tif (Array.isArray(k)) {\\r\n\t\t\treturn k.map(hashableTypeToString).join(',');\\r\n\t\t} else {\\r\n\t\t\treturn k.toString();\\r\n\t\t}\\r\n\t} else {\\r\n\t\treturn k.toString();\\r\n\t}\\r\n}\\r\n\\r\ndeclare global {\\r\n\tconst PLATFORM_WEBGPU: boolean;\\r\n\tconst PLATFORM_WEBGL: boolean;\\r\n\\r\n\tinterface Array<T> {\\r\n\t\tlen(): int;\\r\n\t\tpush(...items: T[]): void;\\r\n\t\tpop(): T;\\r\n\\r\n\t\tlast(): T;\\r\n\t\tfirst(): T;\\r\n\\r\n\t\tappend(items: T[]): void;\\r\n\t\tremove(index: int): void;\\r\n\\r\n\t\tindexOf(item: T): int;\\r\n\\r\n\t\t__index(index: int | uint): T;\\r\n\\r\n\t\t__index_assign(index: int | uint, value: T): void;\\r\n\t\t__index_assign_op(op_fn: (a: T, b: T) => T, index: int | uint, value: T): void;\\r\n\\r\n\t\t[index: number]: T;\\r\n\t}\\r\n}\\r\n\\r\nArray.prototype.len = function () {\\r\n\treturn this.length;\\r\n};\\r\n\\r\nArray.prototype.last = function () {\\r\n\treturn this[this.length - 1];\\r\n};\\r\n\\r\nArray.prototype.first = function () {\\r\n\treturn this[0];\\r\n};\\r\n\\r\nArray.prototype.append = function (items: any[]) {\\r\n\tfor (let i = 0; i < items.length; i++) {\\r\n\t\tthis.push(items[i]);\\r\n\t}\\r\n};\\r\n\\r\nArray.prototype.remove = function (index: int) {\\r\n\tthis.splice(index, 1);\\r\n};\\r\n\\r\nArray.prototype.__index = function (index: int) {\\r\n\treturn this[index];\\r\n};\\r\n\\r\nArray.prototype.__index_assign = function (index: int, value: any) {\\r\n\tthis[index] = value;\\r\n};\\r\n\\r\nArray.prototype.__index_assign_op = function (\\r\n\top_fn: (a: any, b: any) => any,\\r\n\tindex: int,\\r\n\tvalue: any\\r\n) {\\r\n\tthis[index] = op_fn(this[index], value);\\r\n};\\r\n\\r\n/** @shadeup=tag(async) */\\r\nexport function sleep(seconds: float) {\\r\n\treturn new Promise((resolve) => setTimeout(resolve, seconds * 1000));\\r\n}\\r\n\\r\nexport type array<T> = Array<T>;\\r\nexport function array<T>(count: number, initializer: any = null): array<T> {\\r\n\tlet arr = new Array<T>(count);\\r\n\tif (initializer) {\\r\n\t\tfor (let i = 0; i < count; i++) {\\r\n\t\t\tarr[i] = initializer;\\r\n\t\t}\\r\n\t}\\r\n\treturn arr;\\r\n}\\r\n\\r\nexport class map<K extends HashableType, V> {\\r\n\tpairs: Map<string, [K, V]> = new Map<string, [K, V]>();\\r\n\\r\n\tconstructor(entries?: [K, V][]) {\\r\n\t\tif (entries)\\r\n\t\t\tfor (let e of entries) {\\r\n\t\t\t\tthis.__index_assign(e[0], e[1]);\\r\n\t\t\t}\\r\n\t}\\r\n\\r\n\t__index(key: K): V {\\r\n\t\tif (!this.pairs.has(hashableTypeToString(key))) {\\r\n\t\t\tthrow new Error('Key not found: ' + hashableTypeToString(key));\\r\n\t\t}\\r\n\\r\n\t\treturn this.pairs.get(hashableTypeToString(key))[1];\\r\n\t}\\r\n\\r\n\t__index_assign(key: K, value: V) {\\r\n\t\tthis.pairs.set(hashableTypeToString(key), [key, value]);\\r\n\t}\\r\n\\r\n\t__index_assign_op(op_fn: (a: V, b: V) => V, key: K, value: V) {\\r\n\t\tthis.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\\r\n\t}\\r\n\\r\n\tdelete(key: K) {\\r\n\t\tthis.pairs.delete(hashableTypeToString(key));\\r\n\t}\\r\n\\r\n\thas(key: K): bool {\\r\n\t\treturn this.pairs.has(hashableTypeToString(key));\\r\n\t}\\r\n\\r\n\tkeys(): K[] {\\r\n\t\treturn Array.from(this.pairs.values()).map((k) => k[0]);\\r\n\t}\\r\n\\r\n\tvalues(): V[] {\\r\n\t\treturn Array.from(this.pairs.values()).map((k) => k[1]);\\r\n\t}\\r\n\\r\n\tstatic new<K extends HashableType, V>(entries?: [K, V][]): map<K, V> {\\r\n\t\treturn new map<K, V>(entries);\\r\n\t}\\r\n}\\r\n\\r\nexport function __makeMap<V>(initial: { [key: number]: V }): map<number, V>;\\r\nexport function __makeMap<V>(initial: { [key: string]: V }): map<string, V>;\\r\nexport function __makeMap<V>(initial: { [key: string | number]: V }): map<string | number, V> {\\r\n\treturn new map<string | number, V>(Object.entries(initial));\\r\n}\\r\n\\r\nexport function __deepClone(value: any) {\\r\n\tif (typeof value == 'object') {\\r\n\t\tif (Array.isArray(value)) {\\r\n\t\t\tlet res = new Array(value.length);\\r\n\t\t\tfor (let i = 0; i < value.length; i++) {\\r\n\t\t\t\tres[i] = __deepClone(value[i]);\\r\n\t\t\t}\\r\n\t\t\treturn res;\\r\n\t\t} else {\\r\n\t\t\tif (value && typeof value.clone == 'function') {\\r\n\t\t\t\treturn value.clone();\\r\n\t\t\t} else {\\r\n\t\t\t\treturn value;\\r\n\t\t\t}\\r\n\t\t}\\r\n\t} else {\\r\n\t\treturn value;\\r\n\t}\\r\n}\\r\n\\r\nexport interface Spatial2d {\\r\n\tgetPosition(): float2;\\r\n\tgetBoundsMin(): float2;\\r\n\tgetBoundsMax(): float2;\\r\n\tgetRadius(): float;\\r\n\\r\n\tsetPosition(pos: float2): void;\\r\n}\\r\n\\r\nexport interface Spatial3d {\\r\n\tgetPosition(): float3;\\r\n\tgetBoundsMin(): float3;\\r\n\tgetBoundsMax(): float3;\\r\n\tgetRadius(): float;\\r\n\\r\n\tsetPosition(pos: float3): void;\\r\n}\\r\n\\r\nexport class time {\\r\n\t/** Saves the current time with a key of name */\\r\n\tstatic start(name?: string) {\\r\n\t\tperformance.mark((name ?? '_default') + '_start');\\r\n\t}\\r\n\\r\n\t/** Returns the difference in milliseconds between a start with the same key */\\r\n\tstatic stop(name?: string): float {\\r\n\t\tperformance.mark((name ?? '_default') + '_end');\\r\n\\r\n\t\tlet res = performance.measure(\\r\n\t\t\t(name ?? '_default') + '_diff',\\r\n\t\t\t(name ?? '_default') + '_start',\\r\n\t\t\t(name ?? '_default') + '_end'\\r\n\t\t);\\r\n\\r\n\t\treturn res.duration;\\r\n\t}\\r\n\\r\n\t/**\\r\n\t * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\\r\n\t *\\r\n\t * This uses performance.now() under the hood:\\r\n\t * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\\r\n\t */\\r\n\tstatic now(): float {\\r\n\t\treturn performance.now();\\r\n\t}\\r\n}\\r\n`;\nconst globalDTS = \"/*! *****************************************************************************\\r\\nCopyright (c) Microsoft Corporation. All rights reserved.\\r\\nLicensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\r\\nthis file except in compliance with the License. You may obtain a copy of the\\r\\nLicense at http://www.apache.org/licenses/LICENSE-2.0\\r\\n\\r\\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\\r\\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\\r\\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\\r\\nMERCHANTABLITY OR NON-INFRINGEMENT.\\r\\n\\r\\nSee the Apache Version 2.0 License for specific language governing permissions\\r\\nand limitations under the License.\\r\\n***************************************************************************** */\\r\\n\\r\\n/// <reference no-default-lib=\\\"true\\\"/>\\r\\n\\r\\n/// <reference lib=\\\"decorators\\\" />\\r\\n/// <reference lib=\\\"decorators.legacy\\\" />\\r\\n\\r\\n/////////////////////////////\\r\\n/// ECMAScript APIs\\r\\n/////////////////////////////\\r\\n\\r\\ntype float = number & { _opaque_float: 2 };\\r\\ntype int = number & { _opaque_int: 1 } & float;\\r\\n\\r\\ndeclare var NaN: number;\\r\\ndeclare var Infinity: number;\\r\\n\\r\\n/**\\r\\n * Converts a string to an integer.\\r\\n * @param string A string to convert into a number.\\r\\n * @param radix A value between 2 and 36 that specifies the base of the number in `string`.\\r\\n * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\\r\\n * All other strings are considered decimal.\\r\\n */\\r\\ndeclare function parseInt(string: string, radix?: number): number;\\r\\n\\r\\n/**\\r\\n * Converts a string to a floating-point number.\\r\\n * @param string A string that contains a floating-point number.\\r\\n */\\r\\ndeclare function parseFloat(string: string): number;\\r\\n\\r\\n/**\\r\\n * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number).\\r\\n * @param number A numeric value.\\r\\n */\\r\\ndeclare function isNaN(number: number): boolean;\\r\\n\\r\\n/**\\r\\n * Determines whether a supplied number is finite.\\r\\n * @param number Any numeric value.\\r\\n */\\r\\ndeclare function isFinite(number: number): boolean;\\r\\n\\r\\n/**\\r\\n * Gets the unencoded version of an encoded Uniform Resource Identifier (URI).\\r\\n * @param encodedURI A value representing an encoded URI.\\r\\n */\\r\\ndeclare function decodeURI(encodedURI: string): string;\\r\\n\\r\\n/**\\r\\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\\r\\n * @param encodedURIComponent A value representing an encoded URI component.\\r\\n */\\r\\ndeclare function decodeURIComponent(encodedURIComponent: string): string;\\r\\n\\r\\n/**\\r\\n * Encodes a text string as a valid Uniform Resource Identifier (URI)\\r\\n * @param uri A value representing an unencoded URI.\\r\\n */\\r\\ndeclare function encodeURI(uri: string): string;\\r\\n\\r\\n/**\\r\\n * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).\\r\\n * @param uriComponent A value representing an unencoded URI component.\\r\\n */\\r\\ndeclare function encodeURIComponent(uriComponent: string | number | boolean): string;\\r\\n\\r\\n/**\\r\\n * Computes a new string in which certain characters have been replaced by a hexadecimal escape sequence.\\r\\n * @deprecated A legacy feature for browser compatibility\\r\\n * @param string A string value\\r\\n */\\r\\ndeclare function escape(string: string): string;\\r\\n\\r\\n/**\\r\\n * Computes a new string in which hexadecimal escape sequences are replaced with the character that it represents.\\r\\n * @deprecated A legacy feature for browser compatibility\\r\\n * @param string A string value\\r\\n */\\r\\ndeclare function unescape(string: string): string;\\r\\n\\r\\ninterface Symbol {\\r\\n\t/** Returns a string representation of an object. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): symbol;\\r\\n}\\r\\n\\r\\ndeclare type PropertyKey = string | number | symbol;\\r\\n\\r\\ninterface PropertyDescriptor {\\r\\n\tconfigurable?: boolean;\\r\\n\tenumerable?: boolean;\\r\\n\tvalue?: any;\\r\\n\twritable?: boolean;\\r\\n\tget?(): any;\\r\\n\tset?(v: any): void;\\r\\n}\\r\\n\\r\\ninterface PropertyDescriptorMap {\\r\\n\t[key: PropertyKey]: PropertyDescriptor;\\r\\n}\\r\\n\\r\\ninterface Object {\\r\\n\t/** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */\\r\\n\tconstructor: Function;\\r\\n\\r\\n\t/** Returns a string representation of an object. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns a date converted to a string using the current locale. */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Object;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether an object has a property with the specified name.\\r\\n\t * @param v A property name.\\r\\n\t */\\r\\n\thasOwnProperty(v: PropertyKey): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether an object exists in another object's prototype chain.\\r\\n\t * @param v Another object whose prototype chain is to be checked.\\r\\n\t */\\r\\n\tisPrototypeOf(v: Object): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether a specified property is enumerable.\\r\\n\t * @param v A property name.\\r\\n\t */\\r\\n\tpropertyIsEnumerable(v: PropertyKey): boolean;\\r\\n}\\r\\n\\r\\ninterface ObjectConstructor {\\r\\n\tnew (value?: any): Object;\\r\\n\t(): any;\\r\\n\t(value: any): any;\\r\\n\\r\\n\t/** A reference to the prototype for a class of objects. */\\r\\n\treadonly prototype: Object;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the prototype of an object.\\r\\n\t * @param o The object that references the prototype.\\r\\n\t */\\r\\n\tgetPrototypeOf(o: any): any;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the own property descriptor of the specified object.\\r\\n\t * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype.\\r\\n\t * @param o Object that contains the property.\\r\\n\t * @param p Name of the property.\\r\\n\t */\\r\\n\tgetOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\\r\\n\t * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\\r\\n\t * @param o Object that contains the own properties.\\r\\n\t */\\r\\n\tgetOwnPropertyNames(o: any): string[];\\r\\n\\r\\n\t/**\\r\\n\t * Creates an object that has the specified prototype or that has null prototype.\\r\\n\t * @param o Object to use as a prototype. May be null.\\r\\n\t */\\r\\n\tcreate(o: object | null): any;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an object that has the specified prototype, and that optionally contains specified properties.\\r\\n\t * @param o Object to use as a prototype. May be null\\r\\n\t * @param properties JavaScript object that contains one or more property descriptors.\\r\\n\t */\\r\\n\tcreate(o: object | null, properties: PropertyDescriptorMap & ThisType<any>): any;\\r\\n\\r\\n\t/**\\r\\n\t * Adds a property to an object, or modifies attributes of an existing property.\\r\\n\t * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.\\r\\n\t * @param p The property name.\\r\\n\t * @param attributes Descriptor for the property. It can be for a data property or an accessor property.\\r\\n\t */\\r\\n\tdefineProperty<T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>): T;\\r\\n\\r\\n\t/**\\r\\n\t * Adds one or more properties to an object, and/or modifies attributes of existing properties.\\r\\n\t * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.\\r\\n\t * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.\\r\\n\t */\\r\\n\tdefineProperties<T>(o: T, properties: PropertyDescriptorMap & ThisType<any>): T;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of attributes of existing properties, and prevents the addition of new properties.\\r\\n\t * @param o Object on which to lock the attributes.\\r\\n\t */\\r\\n\tseal<T>(o: T): T;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\\r\\n\t * @param f Object on which to lock the attributes.\\r\\n\t */\\r\\n\tfreeze<T extends Function>(f: T): T;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\\r\\n\t * @param o Object on which to lock the attributes.\\r\\n\t */\\r\\n\tfreeze<\\r\\n\t\tT extends { [idx: string]: U | null | undefined | object },\\r\\n\t\tU extends string | bigint | number | boolean | symbol\\r\\n\t>(\\r\\n\t\to: T\\r\\n\t): Readonly<T>;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\\r\\n\t * @param o Object on which to lock the attributes.\\r\\n\t */\\r\\n\tfreeze<T>(o: T): Readonly<T>;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the addition of new properties to an object.\\r\\n\t * @param o Object to make non-extensible.\\r\\n\t */\\r\\n\tpreventExtensions<T>(o: T): T;\\r\\n\\r\\n\t/**\\r\\n\t * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.\\r\\n\t * @param o Object to test.\\r\\n\t */\\r\\n\tisSealed(o: any): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.\\r\\n\t * @param o Object to test.\\r\\n\t */\\r\\n\tisFrozen(o: any): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a value that indicates whether new properties can be added to an object.\\r\\n\t * @param o Object to test.\\r\\n\t */\\r\\n\tisExtensible(o: any): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the names of the enumerable string properties and methods of an object.\\r\\n\t * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\\r\\n\t */\\r\\n\tkeys(o: object): string[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provides functionality common to all JavaScript objects.\\r\\n */\\r\\ndeclare var Object: ObjectConstructor;\\r\\n\\r\\n/**\\r\\n * Creates a new function.\\r\\n */\\r\\ninterface Function {\\r\\n\t/**\\r\\n\t * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param argArray A set of arguments to be passed to the function.\\r\\n\t */\\r\\n\tapply(this: Function, thisArg: any, argArray?: any): any;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a method of an object, substituting another object for the current object.\\r\\n\t * @param thisArg The object to be used as the current object.\\r\\n\t * @param argArray A list of arguments to be passed to the method.\\r\\n\t */\\r\\n\tcall(this: Function, thisArg: any, ...argArray: any[]): any;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg An object to which the this keyword can refer inside the new function.\\r\\n\t * @param argArray A list of arguments to be passed to the new function.\\r\\n\t */\\r\\n\tbind(this: Function, thisArg: any, ...argArray: any[]): any;\\r\\n\\r\\n\t/** Returns a string representation of a function. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\tprototype: any;\\r\\n\treadonly length: int;\\r\\n\\r\\n\t// Non-standard extensions\\r\\n\targuments: any;\\r\\n\tcaller: Function;\\r\\n}\\r\\n\\r\\ninterface FunctionConstructor {\\r\\n\t/**\\r\\n\t * Creates a new function.\\r\\n\t * @param args A list of arguments the function accepts.\\r\\n\t */\\r\\n\tnew (...args: string[]): Function;\\r\\n\t(...args: string[]): Function;\\r\\n\treadonly prototype: Function;\\r\\n}\\r\\n\\r\\ndeclare var Function: FunctionConstructor;\\r\\n\\r\\n/**\\r\\n * Extracts the type of the 'this' parameter of a function type, or 'unknown' if the function type has no 'this' parameter.\\r\\n */\\r\\ntype ThisParameterType<T> = T extends (this: infer U, ...args: never) => any ? U : unknown;\\r\\n\\r\\n/**\\r\\n * Removes the 'this' parameter from a function type.\\r\\n */\\r\\ntype OmitThisParameter<T> = unknown extends ThisParameterType<T>\\r\\n\t? T\\r\\n\t: T extends (...args: infer A) => infer R\\r\\n\t? (...args: A) => R\\r\\n\t: T;\\r\\n\\r\\ninterface CallableFunction extends Function {\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tapply<T, R>(this: (this: T) => R, thisArg: T): R;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args An array of argument values to be passed to the function.\\r\\n\t */\\r\\n\tapply<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, args: A): R;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Argument values to be passed to the function.\\r\\n\t */\\r\\n\tcall<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tbind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Arguments to bind to the parameters of the function.\\r\\n\t */\\r\\n\tbind<T, A extends any[], B extends any[], R>(\\r\\n\t\tthis: (this: T, ...args: [...A, ...B]) => R,\\r\\n\t\tthisArg: T,\\r\\n\t\t...args: A\\r\\n\t): (...args: B) => R;\\r\\n}\\r\\n\\r\\ninterface NewableFunction extends Function {\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tapply<T>(this: new () => T, thisArg: T): void;\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args An array of argument values to be passed to the function.\\r\\n\t */\\r\\n\tapply<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, args: A): void;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Argument values to be passed to the function.\\r\\n\t */\\r\\n\tcall<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, ...args: A): void;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tbind<T>(this: T, thisArg: any): T;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Arguments to bind to the parameters of the function.\\r\\n\t */\\r\\n\tbind<A extends any[], B extends any[], R>(\\r\\n\t\tthis: new (...args: [...A, ...B]) => R,\\r\\n\t\tthisArg: any,\\r\\n\t\t...args: A\\r\\n\t): new (...args: B) => R;\\r\\n}\\r\\n\\r\\ninterface IArguments {\\r\\n\t[index: number]: any;\\r\\n\tlength: int;\\r\\n\tcallee: Function;\\r\\n}\\r\\n\\r\\ninterface String {\\r\\n\t/** Returns a string representation of a string. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the character at the specified index.\\r\\n\t * @param pos The zero-based index of the desired character.\\r\\n\t */\\r\\n\tcharAt(pos: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the Unicode value of the character at the specified location.\\r\\n\t * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\\r\\n\t */\\r\\n\tcharCodeAt(index: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string that contains the concatenation of two or more strings.\\r\\n\t * @param strings The strings to append to the end of the string.\\r\\n\t */\\r\\n\tconcat(...strings: string[]): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the position of the first occurrence of a substring.\\r\\n\t * @param searchString The substring to search for in the string\\r\\n\t * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\\r\\n\t */\\r\\n\tindexOf(searchString: string, position?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the last occurrence of a substring in the string.\\r\\n\t * @param searchString The substring to search for.\\r\\n\t * @param position The index at which to begin searching. If omitted, the search begins at the end of the string.\\r\\n\t */\\r\\n\tlastIndexOf(searchString: string, position?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether two strings are equivalent in the current locale.\\r\\n\t * @param that String to compare to target string\\r\\n\t */\\r\\n\tlocaleCompare(that: string): number;\\r\\n\\r\\n\t/**\\r\\n\t * Matches a string with a regular expression, and returns an array containing the results of that search.\\r\\n\t * @param regexp A variable name or string literal containing the regular expression pattern and flags.\\r\\n\t */\\r\\n\tmatch(regexp: string | RegExp): RegExpMatchArray | null;\\r\\n\\r\\n\t/**\\r\\n\t * Replaces text in a string, using a regular expression or search string.\\r\\n\t * @param searchValue A string or regular expression to search for.\\r\\n\t * @param replaceValue A string containing the text to replace. When the {@linkcode searchValue} is a `RegExp`, all matches are replaced if the `g` flag is set (or only those matches at the beginning, if the `y` flag is also present). Otherwise, only the first match of {@linkcode searchValue} is replaced.\\r\\n\t */\\r\\n\treplace(searchValue: string | RegExp, replaceValue: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Replaces text in a string, using a regular expression or search string.\\r\\n\t * @param searchValue A string to search for.\\r\\n\t * @param replacer A function that returns the replacement text.\\r\\n\t */\\r\\n\treplace(\\r\\n\t\tsearchValue: string | RegExp,\\r\\n\t\treplacer: (substring: string, ...args: any[]) => string\\r\\n\t): string;\\r\\n\\r\\n\t/**\\r\\n\t * Finds the first substring match in a regular expression search.\\r\\n\t * @param regexp The regular expression pattern and applicable flags.\\r\\n\t */\\r\\n\tsearch(regexp: string | RegExp): number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of a string.\\r\\n\t * @param start The index to the beginning of the specified portion of stringObj.\\r\\n\t * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end.\\r\\n\t * If this value is not specified, the substring continues to the end of stringObj.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Split a string into substrings using the specified separator and return them as an array.\\r\\n\t * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.\\r\\n\t * @param limit A value used to limit the number of elements returned in the array.\\r\\n\t */\\r\\n\tsplit(separator: string | RegExp, limit?: number): string[];\\r\\n\\r\\n\t/**\\r\\n\t * Returns the substring at the specified location within a String object.\\r\\n\t * @param start The zero-based index number indicating the beginning of the substring.\\r\\n\t * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\\r\\n\t * If end is omitted, the characters from start through the end of the original string are returned.\\r\\n\t */\\r\\n\tsubstring(start: number, end?: number): string;\\r\\n\\r\\n\t/** Converts all the alphabetic characters in a string to lowercase. */\\r\\n\ttoLowerCase(): string;\\r\\n\\r\\n\t/** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */\\r\\n\ttoLocaleLowerCase(locales?: string | string[]): string;\\r\\n\\r\\n\t/** Converts all the alphabetic characters in a string to uppercase. */\\r\\n\ttoUpperCase(): string;\\r\\n\\r\\n\t/** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */\\r\\n\ttoLocaleUpperCase(locales?: string | string[]): string;\\r\\n\\r\\n\t/** Removes the leading and trailing white space and line terminator characters from a string. */\\r\\n\ttrim(): string;\\r\\n\\r\\n\t/** Returns the length of a String object. */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t// IE extensions\\r\\n\t/**\\r\\n\t * Gets a substring beginning at the specified location and having the specified length.\\r\\n\t * @deprecated A legacy feature for browser compatibility\\r\\n\t * @param from The starting position of the desired substring. The index of the first character in the string is zero.\\r\\n\t * @param length The number of characters to include in the returned substring.\\r\\n\t */\\r\\n\tsubstr(from: number, length?: number): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): string;\\r\\n\\r\\n\treadonly [index: number]: string;\\r\\n}\\r\\n\\r\\ninterface StringConstructor {\\r\\n\tnew (value?: any): String;\\r\\n\t(value?: any): string;\\r\\n\treadonly prototype: String;\\r\\n\tfromCharCode(...codes: number[]): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Allows manipulation and formatting of text strings and determination and location of substrings within strings.\\r\\n */\\r\\ndeclare var String: StringConstructor;\\r\\n\\r\\ninterface Boolean {\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): boolean;\\r\\n}\\r\\n\\r\\ninterface BooleanConstructor {\\r\\n\tnew (value?: any): Boolean;\\r\\n\t<T>(value?: T): boolean;\\r\\n\treadonly prototype: Boolean;\\r\\n}\\r\\n\\r\\ndeclare var Boolean: BooleanConstructor;\\r\\n\\r\\ninterface Number {\\r\\n\t/**\\r\\n\t * Returns a string representation of an object.\\r\\n\t * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.\\r\\n\t */\\r\\n\ttoString(radix?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representing a number in fixed-point notation.\\r\\n\t * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\\r\\n\t */\\r\\n\ttoFixed(fractionDigits?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string containing a number represented in exponential notation.\\r\\n\t * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\\r\\n\t */\\r\\n\ttoExponential(fractionDigits?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.\\r\\n\t * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.\\r\\n\t */\\r\\n\ttoPrecision(precision?: number): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): number;\\r\\n}\\r\\n\\r\\ninterface NumberConstructor {\\r\\n\tnew (value?: any): Number;\\r\\n\t(value?: any): number;\\r\\n\treadonly prototype: Number;\\r\\n\\r\\n\t/** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */\\r\\n\treadonly MAX_VALUE: number;\\r\\n\\r\\n\t/** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */\\r\\n\treadonly MIN_VALUE: number;\\r\\n\\r\\n\t/**\\r\\n\t * A value that is not a number.\\r\\n\t * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.\\r\\n\t */\\r\\n\treadonly NaN: number;\\r\\n\\r\\n\t/**\\r\\n\t * A value that is less than the largest negative number that can be represented in JavaScript.\\r\\n\t * JavaScript displays NEGATIVE_INFINITY values as -infinity.\\r\\n\t */\\r\\n\treadonly NEGATIVE_INFINITY: number;\\r\\n\\r\\n\t/**\\r\\n\t * A value greater than the largest number that can be represented in JavaScript.\\r\\n\t * JavaScript displays POSITIVE_INFINITY values as infinity.\\r\\n\t */\\r\\n\treadonly POSITIVE_INFINITY: number;\\r\\n}\\r\\n\\r\\n/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */\\r\\ndeclare var Number: NumberConstructor;\\r\\n\\r\\ninterface TemplateStringsArray extends ReadonlyArray<string> {\\r\\n\treadonly raw: readonly string[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * The type of `import.meta`.\\r\\n *\\r\\n * If you need to declare that a given property exists on `import.meta`,\\r\\n * this type may be augmented via interface merging.\\r\\n */\\r\\ninterface ImportMeta {}\\r\\n\\r\\n/**\\r\\n * The type for the optional second argument to `import()`.\\r\\n *\\r\\n * If your host environment supports additional options, this type may be\\r\\n * augmented via interface merging.\\r\\n */\\r\\ninterface ImportCallOptions {\\r\\n\tassert?: ImportAssertions;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The type for the `assert` property of the optional second argument to `import()`.\\r\\n */\\r\\ninterface ImportAssertions {\\r\\n\t[key: string]: string;\\r\\n}\\r\\n\\r\\ninterface Math {\\r\\n\t/** The mathematical constant e. This is Euler's number, the base of natural logarithms. */\\r\\n\treadonly E: number;\\r\\n\t/** The natural logarithm of 10. */\\r\\n\treadonly LN10: number;\\r\\n\t/** The natural logarithm of 2. */\\r\\n\treadonly LN2: number;\\r\\n\t/** The base-2 logarithm of e. */\\r\\n\treadonly LOG2E: number;\\r\\n\t/** The base-10 logarithm of e. */\\r\\n\treadonly LOG10E: number;\\r\\n\t/** Pi. This is the ratio of the circumference of a circle to its diameter. */\\r\\n\treadonly PI: number;\\r\\n\t/** The square root of 0.5, or, equivalently, one divided by the square root of 2. */\\r\\n\treadonly SQRT1_2: number;\\r\\n\t/** The square root of 2. */\\r\\n\treadonly SQRT2: number;\\r\\n\t/**\\r\\n\t * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\\r\\n\t * For example, the absolute value of -5 is the same as the absolute value of 5.\\r\\n\t * @param x A numeric expression for which the absolute value is needed.\\r\\n\t */\\r\\n\tabs(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the arc cosine (or inverse cosine) of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tacos(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the arcsine of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tasin(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the arctangent of a number.\\r\\n\t * @param x A numeric expression for which the arctangent is needed.\\r\\n\t */\\r\\n\tatan(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the angle (in radians) from the X axis to a point.\\r\\n\t * @param y A numeric expression representing the cartesian y-coordinate.\\r\\n\t * @param x A numeric expression representing the cartesian x-coordinate.\\r\\n\t */\\r\\n\tatan2(y: number, x: number): number;\\r\\n\t/**\\r\\n\t * Returns the smallest integer greater than or equal to its numeric argument.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tceil(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the cosine of a number.\\r\\n\t * @param x A numeric expression that contains an angle measured in radians.\\r\\n\t */\\r\\n\tcos(x: number): number;\\r\\n\t/**\\r\\n\t * Returns e (the base of natural logarithms) raised to a power.\\r\\n\t * @param x A numeric expression representing the power of e.\\r\\n\t */\\r\\n\texp(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the greatest integer less than or equal to its numeric argument.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tfloor(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the natural logarithm (base e) of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tlog(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the larger of a set of supplied numeric expressions.\\r\\n\t * @param values Numeric expressions to be evaluated.\\r\\n\t */\\r\\n\tmax(...values: number[]): number;\\r\\n\t/**\\r\\n\t * Returns the smaller of a set of supplied numeric expressions.\\r\\n\t * @param values Numeric expressions to be evaluated.\\r\\n\t */\\r\\n\tmin(...values: number[]): number;\\r\\n\t/**\\r\\n\t * Returns the value of a base expression taken to a specified power.\\r\\n\t * @param x The base value of the expression.\\r\\n\t * @param y The exponent value of the expression.\\r\\n\t */\\r\\n\tpow(x: number, y: number): number;\\r\\n\t/** Returns a pseudorandom number between 0 and 1. */\\r\\n\trandom(): number;\\r\\n\t/**\\r\\n\t * Returns a supplied numeric expression rounded to the nearest integer.\\r\\n\t * @param x The value to be rounded to the nearest integer.\\r\\n\t */\\r\\n\tround(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the sine of a number.\\r\\n\t * @param x A numeric expression that contains an angle measured in radians.\\r\\n\t */\\r\\n\tsin(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the square root of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tsqrt(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the tangent of a number.\\r\\n\t * @param x A numeric expression that contains an angle measured in radians.\\r\\n\t */\\r\\n\ttan(x: number): number;\\r\\n}\\r\\n/** An intrinsic object that provides basic mathematics functionality and constants. */\\r\\ndeclare var Math: Math;\\r\\n\\r\\n/** Enables basic storage and retrieval of dates and times. */\\r\\ninterface Date {\\r\\n\t/** Returns a string representation of a date. The format of the string depends on the locale. */\\r\\n\ttoString(): string;\\r\\n\t/** Returns a date as a string value. */\\r\\n\ttoDateString(): string;\\r\\n\t/** Returns a time as a string value. */\\r\\n\ttoTimeString(): string;\\r\\n\t/** Returns a value as a string value appropriate to the host environment's current locale. */\\r\\n\ttoLocaleString(): string;\\r\\n\t/** Returns a date as a string value appropriate to the host environment's current locale. */\\r\\n\ttoLocaleDateString(): string;\\r\\n\t/** Returns a time as a string value appropriate to the host environment's current locale. */\\r\\n\ttoLocaleTimeString(): string;\\r\\n\t/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\\r\\n\tvalueOf(): number;\\r\\n\t/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\\r\\n\tgetTime(): number;\\r\\n\t/** Gets the year, using local time. */\\r\\n\tgetFullYear(): number;\\r\\n\t/** Gets the year using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCFullYear(): number;\\r\\n\t/** Gets the month, using local time. */\\r\\n\tgetMonth(): number;\\r\\n\t/** Gets the month of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCMonth(): number;\\r\\n\t/** Gets the day-of-the-month, using local time. */\\r\\n\tgetDate(): number;\\r\\n\t/** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCDate(): number;\\r\\n\t/** Gets the day of the week, using local time. */\\r\\n\tgetDay(): number;\\r\\n\t/** Gets the day of the week using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCDay(): number;\\r\\n\t/** Gets the hours in a date, using local time. */\\r\\n\tgetHours(): number;\\r\\n\t/** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCHours(): number;\\r\\n\t/** Gets the minutes of a Date object, using local time. */\\r\\n\tgetMinutes(): number;\\r\\n\t/** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCMinutes(): number;\\r\\n\t/** Gets the seconds of a Date object, using local time. */\\r\\n\tgetSeconds(): number;\\r\\n\t/** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCSeconds(): number;\\r\\n\t/** Gets the milliseconds of a Date, using local time. */\\r\\n\tgetMilliseconds(): number;\\r\\n\t/** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCMilliseconds(): number;\\r\\n\t/** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */\\r\\n\tgetTimezoneOffset(): number;\\r\\n\t/**\\r\\n\t * Sets the date and time value in the Date object.\\r\\n\t * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT.\\r\\n\t */\\r\\n\tsetTime(time: number): number;\\r\\n\t/**\\r\\n\t * Sets the milliseconds value in the Date object using local time.\\r\\n\t * @param ms A numeric value equal to the millisecond value.\\r\\n\t */\\r\\n\tsetMilliseconds(ms: number): number;\\r\\n\t/**\\r\\n\t * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param ms A numeric value equal to the millisecond value.\\r\\n\t */\\r\\n\tsetUTCMilliseconds(ms: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Sets the seconds value in the Date object using local time.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetSeconds(sec: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the seconds value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetUTCSeconds(sec: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the minutes value in the Date object using local time.\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetMinutes(min: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the minutes value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetUTCMinutes(min: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the hour value in the Date object using local time.\\r\\n\t * @param hours A numeric value equal to the hours value.\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetHours(hours: number, min?: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the hours value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param hours A numeric value equal to the hours value.\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the numeric day-of-the-month value of the Date object using local time.\\r\\n\t * @param date A numeric value equal to the day of the month.\\r\\n\t */\\r\\n\tsetDate(date: number): number;\\r\\n\t/**\\r\\n\t * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param date A numeric value equal to the day of the month.\\r\\n\t */\\r\\n\tsetUTCDate(date: number): number;\\r\\n\t/**\\r\\n\t * Sets the month value in the Date object using local time.\\r\\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\\r\\n\t * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.\\r\\n\t */\\r\\n\tsetMonth(month: number, date?: number): number;\\r\\n\t/**\\r\\n\t * Sets the month value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\\r\\n\t * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.\\r\\n\t */\\r\\n\tsetUTCMonth(month: number, date?: number): number;\\r\\n\t/**\\r\\n\t * Sets the year of the Date object using local time.\\r\\n\t * @param year A numeric value for the year.\\r\\n\t * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.\\r\\n\t * @param date A numeric value equal for the day of the month.\\r\\n\t */\\r\\n\tsetFullYear(year: number, month?: number, date?: number): number;\\r\\n\t/**\\r\\n\t * Sets the year value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param year A numeric value equal to the year.\\r\\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.\\r\\n\t * @param date A numeric value equal to the day of the month.\\r\\n\t */\\r\\n\tsetUTCFullYear(year: number, month?: number, date?: number): number;\\r\\n\t/** Returns a date converted to a string using Universal Coordinated Time (UTC). */\\r\\n\ttoUTCString(): string;\\r\\n\t/** Returns a date as a string value in ISO format. */\\r\\n\ttoISOString(): string;\\r\\n\t/** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */\\r\\n\ttoJSON(key?: any): string;\\r\\n}\\r\\n\\r\\ninterface DateConstructor {\\r\\n\tnew (): Date;\\r\\n\tnew (value: number | string): Date;\\r\\n\t/**\\r\\n\t * Creates a new Date.\\r\\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\\r\\n\t * @param monthIndex The month as a number between 0 and 11 (January to December).\\r\\n\t * @param date The date as a number between 1 and 31.\\r\\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\\r\\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\\r\\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\\r\\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\\r\\n\t */\\r\\n\tnew (\\r\\n\t\tyear: number,\\r\\n\t\tmonthIndex: number,\\r\\n\t\tdate?: number,\\r\\n\t\thours?: number,\\r\\n\t\tminutes?: number,\\r\\n\t\tseconds?: number,\\r\\n\t\tms?: number\\r\\n\t): Date;\\r\\n\t(): string;\\r\\n\treadonly prototype: Date;\\r\\n\t/**\\r\\n\t * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.\\r\\n\t * @param s A date string\\r\\n\t */\\r\\n\tparse(s: string): number;\\r\\n\t/**\\r\\n\t * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date.\\r\\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\\r\\n\t * @param monthIndex The month as a number between 0 and 11 (January to December).\\r\\n\t * @param date The date as a number between 1 and 31.\\r\\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\\r\\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\\r\\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\\r\\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\\r\\n\t */\\r\\n\tUTC(\\r\\n\t\tyear: number,\\r\\n\t\tmonthIndex: number,\\r\\n\t\tdate?: number,\\r\\n\t\thours?: number,\\r\\n\t\tminutes?: number,\\r\\n\t\tseconds?: number,\\r\\n\t\tms?: number\\r\\n\t): number;\\r\\n\t/** Returns the number of milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC). */\\r\\n\tnow(): number;\\r\\n}\\r\\n\\r\\ndeclare var Date: DateConstructor;\\r\\n\\r\\ninterface RegExpMatchArray extends Array<string> {\\r\\n\t/**\\r\\n\t * The index of the search at which the result was found.\\r\\n\t */\\r\\n\tindex?: number;\\r\\n\t/**\\r\\n\t * A copy of the search string.\\r\\n\t */\\r\\n\tinput?: string;\\r\\n\t/**\\r\\n\t * The first match. This will always be present because `null` will be returned if there are no matches.\\r\\n\t */\\r\\n\t0: string;\\r\\n}\\r\\n\\r\\ninterface RegExpExecArray extends Array<string> {\\r\\n\t/**\\r\\n\t * The index of the search at which the result was found.\\r\\n\t */\\r\\n\tindex: number;\\r\\n\t/**\\r\\n\t * A copy of the search string.\\r\\n\t */\\r\\n\tinput: string;\\r\\n\t/**\\r\\n\t * The first match. This will always be present because `null` will be returned if there are no matches.\\r\\n\t */\\r\\n\t0: string;\\r\\n}\\r\\n\\r\\ninterface RegExp {\\r\\n\t/**\\r\\n\t * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.\\r\\n\t * @param string The String object or string literal on which to perform the search.\\r\\n\t */\\r\\n\texec(string: string): RegExpExecArray | null;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a Boolean value that indicates whether or not a pattern exists in a searched string.\\r\\n\t * @param string String on which to perform the search.\\r\\n\t */\\r\\n\ttest(string: string): boolean;\\r\\n\\r\\n\t/** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */\\r\\n\treadonly source: string;\\r\\n\\r\\n\t/** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */\\r\\n\treadonly global: boolean;\\r\\n\\r\\n\t/** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */\\r\\n\treadonly ignoreCase: boolean;\\r\\n\\r\\n\t/** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */\\r\\n\treadonly multiline: boolean;\\r\\n\\r\\n\tlastIndex: number;\\r\\n\\r\\n\t// Non-standard extensions\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tcompile(pattern: string, flags?: string): this;\\r\\n}\\r\\n\\r\\ninterface RegExpConstructor {\\r\\n\tnew (pattern: RegExp | string): RegExp;\\r\\n\tnew (pattern: string, flags?: string): RegExp;\\r\\n\t(pattern: RegExp | string): RegExp;\\r\\n\t(pattern: string, flags?: string): RegExp;\\r\\n\treadonly prototype: RegExp;\\r\\n\\r\\n\t// Non-standard extensions\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$1: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$2: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$3: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$4: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$5: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$6: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$7: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$8: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$9: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tinput: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$_: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tlastMatch: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t'$&': string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tlastParen: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t'$+': string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tleftContext: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t'$`': string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\trightContext: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t\\\"$'\\\": string;\\r\\n}\\r\\n\\r\\ndeclare var RegExp: RegExpConstructor;\\r\\n\\r\\ninterface Error {\\r\\n\tname: string;\\r\\n\tmessage: string;\\r\\n\tstack?: string;\\r\\n}\\r\\n\\r\\ninterface ErrorConstructor {\\r\\n\tnew (message?: string): Error;\\r\\n\t(message?: string): Error;\\r\\n\treadonly prototype: Error;\\r\\n}\\r\\n\\r\\ndeclare var Error: ErrorConstructor;\\r\\n\\r\\ninterface EvalError extends Error {}\\r\\n\\r\\ninterface EvalErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): EvalError;\\r\\n\t(message?: string): EvalError;\\r\\n\treadonly prototype: EvalError;\\r\\n}\\r\\n\\r\\ndeclare var EvalError: EvalErrorConstructor;\\r\\n\\r\\ninterface RangeError extends Error {}\\r\\n\\r\\ninterface RangeErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): RangeError;\\r\\n\t(message?: string): RangeError;\\r\\n\treadonly prototype: RangeError;\\r\\n}\\r\\n\\r\\ndeclare var RangeError: RangeErrorConstructor;\\r\\n\\r\\ninterface ReferenceError extends Error {}\\r\\n\\r\\ninterface ReferenceErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): ReferenceError;\\r\\n\t(message?: string): ReferenceError;\\r\\n\treadonly prototype: ReferenceError;\\r\\n}\\r\\n\\r\\ndeclare var ReferenceError: ReferenceErrorConstructor;\\r\\n\\r\\ninterface SyntaxError extends Error {}\\r\\n\\r\\ninterface SyntaxErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): SyntaxError;\\r\\n\t(message?: string): SyntaxError;\\r\\n\treadonly prototype: SyntaxError;\\r\\n}\\r\\n\\r\\ndeclare var SyntaxError: SyntaxErrorConstructor;\\r\\n\\r\\ninterface TypeError extends Error {}\\r\\n\\r\\ninterface TypeErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): TypeError;\\r\\n\t(message?: string): TypeError;\\r\\n\treadonly prototype: TypeError;\\r\\n}\\r\\n\\r\\ndeclare var TypeError: TypeErrorConstructor;\\r\\n\\r\\ninterface URIError extends Error {}\\r\\n\\r\\ninterface URIErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): URIError;\\r\\n\t(message?: string): URIError;\\r\\n\treadonly prototype: URIError;\\r\\n}\\r\\n\\r\\ndeclare var URIError: URIErrorConstructor;\\r\\n\\r\\ninterface JSON {\\r\\n\t/**\\r\\n\t * Converts a JavaScript Object Notation (JSON) string into an object.\\r\\n\t * @param text A valid JSON string.\\r\\n\t * @param reviver A function that transforms the results. This function is called for each member of the object.\\r\\n\t * If a member contains nested objects, the nested objects are transformed before the parent object is.\\r\\n\t */\\r\\n\tparse(text: string, reviver?: (this: any, key: string, value: any) => any): any;\\r\\n\t/**\\r\\n\t * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\\r\\n\t * @param value A JavaScript value, usually an object or array, to be converted.\\r\\n\t * @param replacer A function that transforms the results.\\r\\n\t * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\\r\\n\t */\\r\\n\tstringify(\\r\\n\t\tvalue: any,\\r\\n\t\treplacer?: (this: any, key: string, value: any) => any,\\r\\n\t\tspace?: string | number\\r\\n\t): string;\\r\\n\t/**\\r\\n\t * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\\r\\n\t * @param value A JavaScript value, usually an object or array, to be converted.\\r\\n\t * @param replacer An array of strings and numbers that acts as an approved list for selecting the object properties that will be stringified.\\r\\n\t * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\\r\\n\t */\\r\\n\tstringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.\\r\\n */\\r\\ndeclare var JSON: JSON;\\r\\n\\r\\n/////////////////////////////\\r\\n/// ECMAScript Array API (specially handled by compiler)\\r\\n/////////////////////////////\\r\\n\\r\\ninterface ReadonlyArray<T> {\\r\\n\t/**\\r\\n\t * Gets the length of the array. This is a number one higher than the highest element defined in an array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * @param items Additional items to add to the end of array1.\\r\\n\t */\\r\\n\tconcat(...items: ConcatArray<T>[]): T[];\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * @param items Additional items to add to the end of array1.\\r\\n\t */\\r\\n\tconcat(...items: (T | ConcatArray<T>)[]): T[];\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): T[];\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a specified value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): this is readonly S[];\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): S[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T\\r\\n\t): T;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T\\r\\n\t): T;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\treadonly [n: number]: T;\\r\\n}\\r\\n\\r\\ninterface ConcatArray<T> {\\r\\n\treadonly length: int;\\r\\n\treadonly [n: number]: T;\\r\\n\tjoin(separator?: string): string;\\r\\n\tslice(start?: number, end?: number): T[];\\r\\n}\\r\\n\\r\\ninterface Array<T> {\\r\\n\t/**\\r\\n\t * Gets or sets the length of the array. This is a number one higher than the highest index in the array.\\r\\n\t */\\r\\n\tlength: int;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\t/**\\r\\n\t * Removes the last element from an array and returns it.\\r\\n\t * If the array is empty, undefined is returned and the array is not modified.\\r\\n\t */\\r\\n\tpop(): T | undefined;\\r\\n\t/**\\r\\n\t * Appends new elements to the end of an array, and returns the new length of the array.\\r\\n\t * @param items New elements to add to the array.\\r\\n\t */\\r\\n\tpush(...items: T[]): number;\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * This method returns a new array without modifying any existing arrays.\\r\\n\t * @param items Additional arrays and/or items to add to the end of the array.\\r\\n\t */\\r\\n\tconcat(...items: ConcatArray<T>[]): T[];\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * This method returns a new array without modifying any existing arrays.\\r\\n\t * @param items Additional arrays and/or items to add to the end of the array.\\r\\n\t */\\r\\n\tconcat(...items: (T | ConcatArray<T>)[]): T[];\\r\\n\t/**\\r\\n\t * Adds all the elements of an array into a string, separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\t/**\\r\\n\t * Reverses the elements in an array in place.\\r\\n\t * This method mutates the array and returns a reference to the same array.\\r\\n\t */\\r\\n\treverse(): T[];\\r\\n\t/**\\r\\n\t * Removes the first element from an array and returns it.\\r\\n\t * If the array is empty, undefined is returned and the array is not modified.\\r\\n\t */\\r\\n\tshift(): T | undefined;\\r\\n\t/**\\r\\n\t * Returns a copy of a section of an array.\\r\\n\t * For both start and end, a negative index can be used to indicate an offset from the end of the array.\\r\\n\t * For example, -2 refers to the second to last element of the array.\\r\\n\t * @param start The beginning index of the specified portion of the array.\\r\\n\t * If start is undefined, then the slice begins at index 0.\\r\\n\t * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t * If end is undefined, then the slice extends to the end of the array.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): T[];\\r\\n\t/**\\r\\n\t * Sorts an array in place.\\r\\n\t * This method mutates the array and returns a reference to the same array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: T, b: T) => number): this;\\r\\n\t/**\\r\\n\t * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\\r\\n\t * @param start The zero-based location in the array from which to start removing elements.\\r\\n\t * @param deleteCount The number of elements to remove.\\r\\n\t * @returns An array containing the elements that were deleted.\\r\\n\t */\\r\\n\tsplice(start: number, deleteCount?: number): T[];\\r\\n\t/**\\r\\n\t * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\\r\\n\t * @param start The zero-based location in the array from which to start removing elements.\\r\\n\t * @param deleteCount The number of elements to remove.\\r\\n\t * @param items Elements to insert into the array in place of the deleted elements.\\r\\n\t * @returns An array containing the elements that were deleted.\\r\\n\t */\\r\\n\tsplice(start: number, deleteCount: number, ...items: T[]): T[];\\r\\n\t/**\\r\\n\t * Inserts new elements at the start of an array, and returns the new length of the array.\\r\\n\t * @param items Elements to insert at the start of the array.\\r\\n\t */\\r\\n\tunshift(...items: T[]): number;\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array, or -1 if it is not present.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): this is S[];\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): S[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T\\r\\n\t): T;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t[n: number]: T;\\r\\n}\\r\\n\\r\\ninterface ArrayConstructor {\\r\\n\tnew (arrayLength?: number): any[];\\r\\n\tnew <T>(arraylength: int): T[];\\r\\n\tnew <T>(...items: T[]): T[];\\r\\n\t(arrayLength?: number): any[];\\r\\n\t<T>(arraylength: int): T[];\\r\\n\t<T>(...items: T[]): T[];\\r\\n\tisArray(arg: any): arg is any[];\\r\\n\treadonly prototype: any[];\\r\\n}\\r\\n\\r\\ndeclare var Array: ArrayConstructor;\\r\\n\\r\\ninterface TypedPropertyDescriptor<T> {\\r\\n\tenumerable?: boolean;\\r\\n\tconfigurable?: boolean;\\r\\n\twritable?: boolean;\\r\\n\tvalue?: T;\\r\\n\tget?: () => T;\\r\\n\tset?: (value: T) => void;\\r\\n}\\r\\n\\r\\ndeclare type PromiseConstructorLike = new <T>(\\r\\n\texecutor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void\\r\\n) => PromiseLike<T>;\\r\\n\\r\\ninterface PromiseLike<T> {\\r\\n\t/**\\r\\n\t * Attaches callbacks for the resolution and/or rejection of the Promise.\\r\\n\t * @param onfulfilled The callback to execute when the Promise is resolved.\\r\\n\t * @param onrejected The callback to execute when the Promise is rejected.\\r\\n\t * @returns A Promise for the completion of which ever callback is executed.\\r\\n\t */\\r\\n\tthen<TResult1 = T, TResult2 = never>(\\r\\n\t\tonfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\\r\\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\\r\\n\t): PromiseLike<TResult1 | TResult2>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents the completion of an asynchronous operation\\r\\n */\\r\\ninterface Promise<T> {\\r\\n\t/**\\r\\n\t * Attaches callbacks for the resolution and/or rejection of the Promise.\\r\\n\t * @param onfulfilled The callback to execute when the Promise is resolved.\\r\\n\t * @param onrejected The callback to execute when the Promise is rejected.\\r\\n\t * @returns A Promise for the completion of which ever callback is executed.\\r\\n\t */\\r\\n\tthen<TResult1 = T, TResult2 = never>(\\r\\n\t\tonfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\\r\\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\\r\\n\t): Promise<TResult1 | TResult2>;\\r\\n\\r\\n\t/**\\r\\n\t * Attaches a callback for only the rejection of the Promise.\\r\\n\t * @param onrejected The callback to execute when the Promise is rejected.\\r\\n\t * @returns A Promise for the completion of the callback.\\r\\n\t */\\r\\n\tcatch<TResult = never>(\\r\\n\t\tonrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null\\r\\n\t): Promise<T | TResult>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Recursively unwraps the \\\"awaited type\\\" of a type. Non-promise \\\"thenables\\\" should resolve to `never`. This emulates the behavior of `await`.\\r\\n */\\r\\ntype Awaited<T> = T extends null | undefined\\r\\n\t? T // special case for `null | undefined` when not in `--strictNullChecks` mode\\r\\n\t: T extends object & { then(onfulfilled: infer F, ...args: infer _): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped\\r\\n\t? F extends (value: infer V, ...args: infer _) => any // if the argument to `then` is callable, extracts the first argument\\r\\n\t\t? Awaited<V> // recursively unwrap the value\\r\\n\t\t: never // the argument to `then` was not callable\\r\\n\t: T; // non-object or non-thenable\\r\\n\\r\\ninterface ArrayLike<T> {\\r\\n\treadonly length: int;\\r\\n\treadonly [n: number]: T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Make all properties in T optional\\r\\n */\\r\\ntype Partial<T> = {\\r\\n\t[P in keyof T]?: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Make all properties in T required\\r\\n */\\r\\ntype Required<T> = {\\r\\n\t[P in keyof T]-?: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Make all properties in T readonly\\r\\n */\\r\\ntype Readonly<T> = {\\r\\n\treadonly [P in keyof T]: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * From T, pick a set of properties whose keys are in the union K\\r\\n */\\r\\ntype Pick<T, K extends keyof T> = {\\r\\n\t[P in K]: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Construct a type with a set of properties K of type T\\r\\n */\\r\\ntype Record<K extends keyof any, T> = {\\r\\n\t[P in K]: T;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Exclude from T those types that are assignable to U\\r\\n */\\r\\ntype Exclude<T, U> = T extends U ? never : T;\\r\\n\\r\\n/**\\r\\n * Extract from T those types that are assignable to U\\r\\n */\\r\\ntype Extract<T, U> = T extends U ? T : never;\\r\\n\\r\\n/**\\r\\n * Construct a type with the properties of T except for those in type K.\\r\\n */\\r\\ntype Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;\\r\\n\\r\\n/**\\r\\n * Exclude null and undefined from T\\r\\n */\\r\\ntype NonNullable<T> = T & {};\\r\\n\\r\\n/**\\r\\n * Obtain the parameters of a function type in a tuple\\r\\n */\\r\\ntype Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;\\r\\n\\r\\n/**\\r\\n * Obtain the parameters of a constructor function type in a tuple\\r\\n */\\r\\ntype ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (\\r\\n\t...args: infer P\\r\\n) => any\\r\\n\t? P\\r\\n\t: never;\\r\\n\\r\\n/**\\r\\n * Obtain the return type of a function type\\r\\n */\\r\\ntype ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;\\r\\n\\r\\n/**\\r\\n * Obtain the return type of a constructor function type\\r\\n */\\r\\ntype InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (\\r\\n\t...args: any\\r\\n) => infer R\\r\\n\t? R\\r\\n\t: any;\\r\\n\\r\\n/**\\r\\n * Convert string literal type to uppercase\\r\\n */\\r\\ntype Uppercase<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Convert string literal type to lowercase\\r\\n */\\r\\ntype Lowercase<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Convert first character of string literal type to uppercase\\r\\n */\\r\\ntype Capitalize<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Convert first character of string literal type to lowercase\\r\\n */\\r\\ntype Uncapitalize<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Marker for contextual 'this' type\\r\\n */\\r\\ninterface ThisType<T> {}\\r\\n\\r\\n/**\\r\\n * Represents a raw buffer of binary data, which is used to store data for the\\r\\n * different typed arrays. ArrayBuffers cannot be read from or written to directly,\\r\\n * but can be passed to a typed array or DataView Object to interpret the raw\\r\\n * buffer as needed.\\r\\n */\\r\\ninterface ArrayBuffer {\\r\\n\t/**\\r\\n\t * Read-only. The length of the ArrayBuffer (in bytes).\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an ArrayBuffer.\\r\\n\t */\\r\\n\tslice(begin: number, end?: number): ArrayBuffer;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Allowed ArrayBuffer types for the buffer of an ArrayBufferView and related Typed Arrays.\\r\\n */\\r\\ninterface ArrayBufferTypes {\\r\\n\tArrayBuffer: ArrayBuffer;\\r\\n}\\r\\ntype ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];\\r\\n\\r\\ninterface ArrayBufferConstructor {\\r\\n\treadonly prototype: ArrayBuffer;\\r\\n\tnew (bytelength: int): ArrayBuffer;\\r\\n\tisView(arg: any): arg is ArrayBufferView;\\r\\n}\\r\\ndeclare var ArrayBuffer: ArrayBufferConstructor;\\r\\n\\r\\ninterface ArrayBufferView {\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\tbuffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\tbytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\tbyteOffset: number;\\r\\n}\\r\\n\\r\\ninterface DataView {\\r\\n\treadonly buffer: ArrayBuffer;\\r\\n\treadonly bytelength: int;\\r\\n\treadonly byteOffset: number;\\r\\n\t/**\\r\\n\t * Gets the Float32 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetFloat32(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Float64 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetFloat64(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Int8 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t */\\r\\n\tgetInt8(byteOffset: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Int16 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetInt16(byteOffset: number, littleEndian?: boolean): number;\\r\\n\t/**\\r\\n\t * Gets the Int32 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetInt32(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Uint8 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t */\\r\\n\tgetUint8(byteOffset: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Uint16 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetUint16(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Uint32 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetUint32(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Float32 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetFloat32(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Float64 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetFloat64(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Int8 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t */\\r\\n\tsetInt8(byteOffset: number, value: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Int16 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetInt16(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Int32 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetInt32(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Uint8 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t */\\r\\n\tsetUint8(byteOffset: number, value: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Uint16 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetUint16(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Uint32 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetUint32(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n}\\r\\n\\r\\ninterface DataViewConstructor {\\r\\n\treadonly prototype: DataView;\\r\\n\tnew (\\r\\n\t\tbuffer: ArrayBufferLike & { BYTES_PER_ELEMENT?: never },\\r\\n\t\tbyteOffset?: number,\\r\\n\t\tbyteLength?: number\\r\\n\t): DataView;\\r\\n}\\r\\ndeclare var DataView: DataViewConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested\\r\\n * number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Int8Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Int8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Int8Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int8Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int8Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Int8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Int8Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\ninterface Int8ArrayConstructor {\\r\\n\treadonly prototype: Int8Array;\\r\\n\tnew (length: int): Int8Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int8Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array;\\r\\n}\\r\\ndeclare var Int8Array: Int8ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint8Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint8Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint8ArrayConstructor {\\r\\n\treadonly prototype: Uint8Array;\\r\\n\tnew (length: int): Uint8Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint8Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array;\\r\\n}\\r\\ndeclare var Uint8Array: Uint8ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0.\\r\\n * If the requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint8ClampedArray {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8ClampedArray) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8ClampedArray) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint8ClampedArray;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint8ClampedArrayConstructor {\\r\\n\treadonly prototype: Uint8ClampedArray;\\r\\n\tnew (length: int): Uint8ClampedArray;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint8ClampedArray;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(\\r\\n\t\tarrayLike: ArrayLike<T>,\\r\\n\t\tmapfn: (v: T, k: number) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8ClampedArray;\\r\\n}\\r\\ndeclare var Uint8ClampedArray: Uint8ClampedArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Int16Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Int16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Int16Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int16Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int16Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Int16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Int16Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Int16ArrayConstructor {\\r\\n\treadonly prototype: Int16Array;\\r\\n\tnew (length: int): Int16Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int16Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array;\\r\\n}\\r\\ndeclare var Int16Array: Int16ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint16Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint16Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint16Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint16Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint16ArrayConstructor {\\r\\n\treadonly prototype: Uint16Array;\\r\\n\tnew (length: int): Uint16Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint16Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array;\\r\\n}\\r\\ndeclare var Uint16Array: Uint16ArrayConstructor;\\r\\n/**\\r\\n * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Int32Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Int32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Int32Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int32Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int32Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Int32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Int32Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Int32ArrayConstructor {\\r\\n\treadonly prototype: Int32Array;\\r\\n\tnew (length: int): Int32Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int32Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array;\\r\\n}\\r\\ndeclare var Int32Array: Int32ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint32Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint32Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint32Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint32Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint32ArrayConstructor {\\r\\n\treadonly prototype: Uint32Array;\\r\\n\tnew (length: int): Uint32Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint32Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array;\\r\\n}\\r\\ndeclare var Uint32Array: Uint32ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number\\r\\n * of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Float32Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Float32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Float32Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float32Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float32Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Float32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Float32Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Float32ArrayConstructor {\\r\\n\treadonly prototype: Float32Array;\\r\\n\tnew (length: int): Float32Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Float32Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array;\\r\\n}\\r\\ndeclare var Float32Array: Float32ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 64-bit float values. The contents are initialized to 0. If the requested\\r\\n * number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Float64Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Float64Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Float64Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float64Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float64Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float64Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float64Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Float64Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Float64Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Float64ArrayConstructor {\\r\\n\treadonly prototype: Float64Array;\\r\\n\tnew (length: int): Float64Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Float64Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array;\\r\\n}\\r\\ndeclare var Float64Array: Float64ArrayConstructor;\\r\\n\\r\\n/////////////////////////////\\r\\n/// ECMAScript Internationalization API\\r\\n/////////////////////////////\\r\\n\\r\\ndeclare namespace Intl {\\r\\n\tinterface CollatorOptions {\\r\\n\t\tusage?: 'sort' | 'search' | undefined;\\r\\n\t\tlocaleMatcher?: 'lookup' | 'best fit' | undefined;\\r\\n\t\tnumeric?: boolean | undefined;\\r\\n\t\tcaseFirst?: 'upper' | 'lower' | 'false' | undefined;\\r\\n\t\tsensitivity?: 'base' | 'accent' | 'case' | 'variant' | undefined;\\r\\n\t\tcollation?:\\r\\n\t\t\t| 'big5han'\\r\\n\t\t\t| 'compat'\\r\\n\t\t\t| 'dict'\\r\\n\t\t\t| 'direct'\\r\\n\t\t\t| 'ducet'\\r\\n\t\t\t| 'emoji'\\r\\n\t\t\t| 'eor'\\r\\n\t\t\t| 'gb2312'\\r\\n\t\t\t| 'phonebk'\\r\\n\t\t\t| 'phonetic'\\r\\n\t\t\t| 'pinyin'\\r\\n\t\t\t| 'reformed'\\r\\n\t\t\t| 'searchjl'\\r\\n\t\t\t| 'stroke'\\r\\n\t\t\t| 'trad'\\r\\n\t\t\t| 'unihan'\\r\\n\t\t\t| 'zhuyin'\\r\\n\t\t\t| undefined;\\r\\n\t\tignorePunctuation?: boolean | undefined;\\r\\n\t}\\r\\n\\r\\n\tinterface ResolvedCollatorOptions {\\r\\n\t\tlocale: string;\\r\\n\t\tusage: string;\\r\\n\t\tsensitivity: string;\\r\\n\t\tignorePunctuation: boolean;\\r\\n\t\tcollation: string;\\r\\n\t\tcaseFirst: string;\\r\\n\t\tnumeric: boolean;\\r\\n\t}\\r\\n\\r\\n\tinterface Collator {\\r\\n\t\tcompare(x: string, y: string): number;\\r\\n\t\tresolvedOptions(): ResolvedCollatorOptions;\\r\\n\t}\\r\\n\tvar Collator: {\\r\\n\t\tnew (locales?: string | string[], options?: CollatorOptions): Collator;\\r\\n\t\t(locales?: string | string[], options?: CollatorOptions): Collator;\\r\\n\t\tsupportedLocalesOf(locales: string | string[], options?: CollatorOptions): string[];\\r\\n\t};\\r\\n\\r\\n\tinterface NumberFormatOptions {\\r\\n\t\tlocaleMatcher?: string | undefined;\\r\\n\t\tstyle?: string | undefined;\\r\\n\t\tcurrency?: string | undefined;\\r\\n\t\tcurrencySign?: string | undefined;\\r\\n\t\tuseGrouping?: boolean | undefined;\\r\\n\t\tminimumIntegerDigits?: number | undefined;\\r\\n\t\tminimumFractionDigits?: number | undefined;\\r\\n\t\tmaximumFractionDigits?: number | undefined;\\r\\n\t\tminimumSignificantDigits?: number | undefined;\\r\\n\t\tmaximumSignificantDigits?: number | undefined;\\r\\n\t}\\r\\n\\r\\n\tinterface ResolvedNumberFormatOptions {\\r\\n\t\tlocale: string;\\r\\n\t\tnumberingSystem: string;\\r\\n\t\tstyle: string;\\r\\n\t\tcurrency?: string;\\r\\n\t\tminimumIntegerDigits: number;\\r\\n\t\tminimumFractionDigits: number;\\r\\n\t\tmaximumFractionDigits: number;\\r\\n\t\tminimumSignificantDigits?: number;\\r\\n\t\tmaximumSignificantDigits?: number;\\r\\n\t\tuseGrouping: boolean;\\r\\n\t}\\r\\n\\r\\n\tinterface NumberFormat {\\r\\n\t\tformat(value: number): string;\\r\\n\t\tresolvedOptions(): ResolvedNumberFormatOptions;\\r\\n\t}\\r\\n\tvar NumberFormat: {\\r\\n\t\tnew (locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\\r\\n\t\t(locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\\r\\n\t\tsupportedLocalesOf(locales: string | string[], options?: NumberFormatOptions): string[];\\r\\n\t\treadonly prototype: NumberFormat;\\r\\n\t};\\r\\n\\r\\n\tinterface DateTimeFormatOptions {\\r\\n\t\tlocaleMatcher?: 'best fit' | 'lookup' | undefined;\\r\\n\t\tweekday?: 'long' | 'short' | 'narrow' | undefined;\\r\\n\t\tera?: 'long' | 'short' | 'narrow' | undefined;\\r\\n\t\tyear?: 'numeric' | '2-digit' | undefined;\\r\\n\t\tmonth?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow' | undefined;\\r\\n\t\tday?: 'numeric' | '2-digit' | undefined;\\r\\n\t\thour?: 'numeric' | '2-digit' | undefined;\\r\\n\t\tminute?: 'numeric' | '2-digit' | undefined;\\r\\n\t\tsecond?: 'numeric' | '2-digit' | undefined;\\r\\n\t\ttimeZoneName?:\\r\\n\t\t\t| 'short'\\r\\n\t\t\t| 'long'\\r\\n\t\t\t| 'shortOffset'\\r\\n\t\t\t| 'longOffset'\\r\\n\t\t\t| 'shortGeneric'\\r\\n\t\t\t| 'longGeneric'\\r\\n\t\t\t| undefined;\\r\\n\t\tformatMatcher?: 'best fit' | 'basic' | undefined;\\r\\n\t\thour12?: boolean | undefined;\\r\\n\t\ttimeZone?: string | undefined;\\r\\n\t}\\r\\n\\r\\n\tinterface ResolvedDateTimeFormatOptions {\\r\\n\t\tlocale: string;\\r\\n\t\tcalendar: string;\\r\\n\t\tnumberingSystem: string;\\r\\n\t\ttimeZone: string;\\r\\n\t\thour12?: boolean;\\r\\n\t\tweekday?: string;\\r\\n\t\tera?: string;\\r\\n\t\tyear?: string;\\r\\n\t\tmonth?: string;\\r\\n\t\tday?: string;\\r\\n\t\thour?: string;\\r\\n\t\tminute?: string;\\r\\n\t\tsecond?: string;\\r\\n\t\ttimeZoneName?: string;\\r\\n\t}\\r\\n\\r\\n\tinterface DateTimeFormat {\\r\\n\t\tformat(date?: Date | number): string;\\r\\n\t\tresolvedOptions(): ResolvedDateTimeFormatOptions;\\r\\n\t}\\r\\n\tvar DateTimeFormat: {\\r\\n\t\tnew (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\\r\\n\t\t(locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\\r\\n\t\tsupportedLocalesOf(locales: string | string[], options?: DateTimeFormatOptions): string[];\\r\\n\t\treadonly prototype: DateTimeFormat;\\r\\n\t};\\r\\n}\\r\\n\\r\\ninterface String {\\r\\n\t/**\\r\\n\t * Determines whether two strings are equivalent in the current or specified locale.\\r\\n\t * @param that String to compare to target string\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.\\r\\n\t */\\r\\n\tlocaleCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): number;\\r\\n}\\r\\n\\r\\ninterface Number {\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string;\\r\\n}\\r\\n\\r\\ninterface Date {\\r\\n\t/**\\r\\n\t * Converts a date and time to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\\r\\n\t/**\\r\\n\t * Converts a date to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a time to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\\r\\n}\\r\\n\";\nconst simpleFunctions = [\n  [\"add\", \"+\"],\n  [\"sub\", \"-\"],\n  [\"div\", \"/\"],\n  [\"mul\", \"*\"],\n  [\"mod\", \"%\"],\n  [\"bitand\", \"&\"],\n  [\"bitor\", \"|\"],\n  [\"bitxor\", \"^\"],\n  [\"lshift\", \"<<\"],\n  [\"rshift\", \">>\"]\n];\nconst singleFunctions = [\n  [\"bitnot\", (a) => `~${a}`],\n  [\"negate\", (a) => `-${a}`],\n  [\"positive\", \"Math.abs\"],\n  [\"abs\", \"Math.abs\"],\n  [\"floor\", \"Math.floor\"],\n  [\"ceil\", \"Math.ceil\"],\n  [\"round\", \"Math.round\"],\n  [\"sign\", \"Math.sign\"],\n  [\"cos\", \"Math.cos\"],\n  [\"sin\", \"Math.sin\"],\n  [\"tan\", \"Math.tan\"],\n  [\"acos\", \"Math.acos\"],\n  [\"asin\", \"Math.asin\"],\n  [\"atan\", \"Math.atan\"],\n  [\"cosh\", \"Math.cosh\"],\n  [\"sinh\", \"Math.sinh\"],\n  [\"tanh\", \"Math.tanh\"],\n  [\"acosh\", \"Math.acosh\"],\n  [\"asinh\", \"Math.asinh\"],\n  [\"atanh\", \"Math.atanh\"],\n  [\"exp\", \"Math.exp\"],\n  [\"log\", \"Math.log\"],\n  [\"log2\", \"Math.log2\"],\n  [\"log10\", \"Math.log10\"],\n  [\"sqrt\", \"Math.sqrt\"]\n];\nconst makeVectors = [\n  [\"int\", \"|0\"],\n  [\"float\", \"\"],\n  [\"uint\", \">>>0\"]\n];\nconst simpleFuncMap = new Map(simpleFunctions);\nconst singleFuncMap = new Map(singleFunctions);\nconst makeVectorsMap = new Map(makeVectors);\nfunction getTypeFallback(checker, t) {\n  let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n  if (!n && t.intrinsicName)\n    n = t.intrinsicName;\n  if (typeof n !== \"string\") {\n    let props = t.getApparentProperties();\n    if (props.length > 0) {\n      for (let p of props) {\n        if (p.escapedName.toString() === \"_opaque_int\")\n          return \"int\";\n        if (p.escapedName.toString() === \"_opaque_float\")\n          return \"float\";\n        if (p.escapedName.toString() === \"_opaque_uint\")\n          return \"uint\";\n      }\n    }\n    let btype = t.getBaseTypes();\n    if (btype && btype.length > 0) {\n      for (let b of btype) {\n        let tn = getTypeFallback(checker, b);\n        if (tn)\n          return tn;\n      }\n      return null;\n    }\n  } else {\n    return n;\n  }\n}\nfunction getVectorLen(checker, type2) {\n  let typeFall = getTypeFallback(checker, type2);\n  if (type2.flags & (ts.TypeFlags.NumberLike | ts.TypeFlags.BigIntLike | ts.TypeFlags.NumberLiteral) || typeFall == \"int\" || typeFall == \"float\" || typeFall == \"uint\") {\n    return 1;\n  } else if (typeFall == \"int2\" || typeFall == \"float2\" || typeFall == \"uint2\") {\n    return 2;\n  } else if (typeFall == \"int3\" || typeFall == \"float3\" || typeFall == \"uint3\") {\n    return 3;\n  } else if (typeFall == \"int4\" || typeFall == \"float4\" || typeFall == \"uint4\") {\n    return 4;\n  }\n  return 0;\n}\nfunction isArrayType(type2, checker) {\n  return checker.isTupleType(type2) || checker.isArrayType(type2);\n}\nconst updateIntegerMixing = (getChecker) => (context2) => {\n  let [checker, env2, loads] = getChecker();\n  loads.clear();\n  env2.libraries.clear();\n  return (rootNode) => {\n    const { factory: factory2 } = context2;\n    function visit(node2) {\n      if (!node2) {\n        return node2;\n      }\n      if (ts.isCallExpression(node2)) {\n        let sig = checker.getResolvedSignature(node2);\n        let returnType = checker.getReturnTypeOfSignature(sig);\n        let symbol = returnType.aliasSymbol || returnType.getSymbol();\n        let expressionText = node2.expression.getText();\n        let ops = {\n          gte: ts.SyntaxKind.GreaterThanEqualsToken,\n          lte: ts.SyntaxKind.LessThanEqualsToken,\n          gt: ts.SyntaxKind.GreaterThanToken,\n          lt: ts.SyntaxKind.LessThanToken,\n          eq: ts.SyntaxKind.EqualsEqualsToken,\n          neq: ts.SyntaxKind.ExclamationEqualsToken,\n          and: ts.SyntaxKind.AmpersandAmpersandToken,\n          or: ts.SyntaxKind.BarBarToken\n        };\n        if (expressionText == \"physics.engine2d\") {\n          env2.libraries.add(\"rapier2d\");\n        }\n        if (expressionText == \"physics.engine3d\") {\n          env2.libraries.add(\"rapier3d\");\n        }\n        if (expressionText == \"load\") {\n          if (!loads.has(rootNode.fileName)) {\n            loads.set(rootNode.fileName, []);\n          }\n          if (node2.arguments.length > 0 && ts.isStringLiteral(node2.arguments[0])) {\n            let realId = env2.assetMappings.get(node2.arguments[0].text);\n            loads.get(rootNode.fileName).push(node2.arguments[0].text);\n            if (realId)\n              return factory2.createCallExpression(factory2.createIdentifier(\"load\"), void 0, [\n                factory2.createStringLiteral(realId[0])\n              ]);\n          }\n          return node2;\n        }\n        if (expressionText.endsWith(\"__index\")) {\n          let innerExpr = node2.expression;\n          if (ts.isPropertyAccessExpression(innerExpr)) {\n            let left = innerExpr.expression;\n            let leftType = checker.getTypeAtLocation(left);\n            let leftStr = checker.typeToString(leftType);\n            if (isArrayType(leftType, checker)) {\n              return factory2.createElementAccessExpression(visit(left), visit(node2.arguments[0]));\n            }\n            if (leftStr == \"buffer<float>\") {\n              return factory2.createElementAccessExpression(\n                factory2.createPropertyAccessExpression(visit(left), \"floatArray\"),\n                visit(node2.arguments[0])\n              );\n            } else if (leftStr == \"buffer<int>\") {\n              return factory2.createElementAccessExpression(\n                factory2.createPropertyAccessExpression(visit(left), \"intArray\"),\n                visit(node2.arguments[0])\n              );\n            } else if (leftStr == \"buffer<uint>\") {\n              return factory2.createElementAccessExpression(\n                factory2.createPropertyAccessExpression(visit(left), \"uintArray\"),\n                visit(node2.arguments[0])\n              );\n            } else if (!leftType.getProperty(\"__index\")) {\n              console.log(\"Optim no __index\", leftStr, leftType);\n              return factory2.createElementAccessExpression(visit(left), visit(node2.arguments[0]));\n            }\n          }\n        }\n        if (expressionText.startsWith(\"__.\") && ops[expressionText.replace(\"__.\", \"\")]) {\n          if (node2.arguments.length != 2) {\n            return visit(node2.arguments[0]);\n          } else {\n            let left = node2.arguments[0];\n            let right = node2.arguments[1];\n            let leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n            let rightLen = getVectorLen(checker, checker.getTypeAtLocation(right));\n            if (leftLen == 1 && rightLen == 1) {\n              return factory2.createBinaryExpression(\n                visit(node2.arguments[0]),\n                ops[expressionText.replace(\"__.\", \"\")],\n                visit(node2.arguments[1])\n              );\n            }\n          }\n        }\n        if (simpleFuncMap.has(expressionText.replace(\"__.\", \"\"))) {\n          let left = node2.arguments[0];\n          let right = node2.arguments[1];\n          let leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n          let rightLen = getVectorLen(checker, checker.getTypeAtLocation(right));\n          if (leftLen == 1 && rightLen == 1) {\n            let funcDef = simpleFuncMap.get(expressionText.replace(\"__.\", \"\"));\n            if (typeof funcDef == \"string\") {\n              let tokenKinds = {\n                \"+\": ts.SyntaxKind.PlusToken,\n                \"-\": ts.SyntaxKind.MinusToken,\n                \"/\": ts.SyntaxKind.SlashToken,\n                \"*\": ts.SyntaxKind.AsteriskToken,\n                \"%\": ts.SyntaxKind.PercentToken,\n                \"&\": ts.SyntaxKind.AmpersandToken,\n                \"|\": ts.SyntaxKind.BarToken,\n                \"^\": ts.SyntaxKind.CaretToken,\n                \"<<\": ts.SyntaxKind.LessThanLessThanToken,\n                \">>\": ts.SyntaxKind.GreaterThanGreaterThanToken\n              };\n              return factory2.createBinaryExpression(\n                visit(left),\n                factory2.createToken(tokenKinds[funcDef]),\n                visit(right)\n              );\n            }\n          }\n          if (leftLen > 0 && rightLen > 0) {\n            let leftHoist = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n            let rightHoist = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n            let leftAss = factory2.createAssignment(leftHoist, visit(left));\n            let rightAss = factory2.createAssignment(rightHoist, visit(right));\n            let tokenKinds = {\n              mul: ts.SyntaxKind.AsteriskToken,\n              div: ts.SyntaxKind.SlashToken,\n              add: ts.SyntaxKind.PlusToken,\n              sub: ts.SyntaxKind.MinusToken,\n              mod: ts.SyntaxKind.PercentToken,\n              and: ts.SyntaxKind.AmpersandToken,\n              or: ts.SyntaxKind.BarToken,\n              xor: ts.SyntaxKind.CaretToken,\n              lshift: ts.SyntaxKind.LessThanLessThanToken,\n              rshift: ts.SyntaxKind.GreaterThanGreaterThanToken\n            };\n            let innerElems = [];\n            if (leftLen == rightLen) {\n              for (let i = 0; i < leftLen; i++) {\n                innerElems.push(\n                  factory2.createBinaryExpression(\n                    factory2.createElementAccessExpression(\n                      leftHoist,\n                      factory2.createNumericLiteral(i)\n                    ),\n                    factory2.createToken(tokenKinds[expressionText.replace(\"__.\", \"\")]),\n                    factory2.createElementAccessExpression(\n                      rightHoist,\n                      factory2.createNumericLiteral(i)\n                    )\n                  )\n                );\n              }\n            } else if (leftLen == 1) {\n              for (let i = 0; i < rightLen; i++) {\n                innerElems.push(\n                  factory2.createBinaryExpression(\n                    leftHoist,\n                    factory2.createToken(tokenKinds[expressionText.replace(\"__.\", \"\")]),\n                    factory2.createElementAccessExpression(\n                      rightHoist,\n                      factory2.createNumericLiteral(i)\n                    )\n                  )\n                );\n              }\n            } else if (rightLen == 1) {\n              for (let i = 0; i < leftLen; i++) {\n                innerElems.push(\n                  factory2.createBinaryExpression(\n                    factory2.createElementAccessExpression(\n                      leftHoist,\n                      factory2.createNumericLiteral(i)\n                    ),\n                    factory2.createToken(tokenKinds[expressionText.replace(\"__.\", \"\")]),\n                    rightHoist\n                  )\n                );\n              }\n            }\n            let expr = factory2.createArrayLiteralExpression(innerElems);\n            return factory2.createCommaListExpression([leftAss, rightAss, expr]);\n          }\n        }\n        if (singleFuncMap.has(expressionText.replace(\"__.\", \"\"))) {\n          let left = node2.arguments[0];\n          let leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n          let funcDef = singleFuncMap.get(expressionText.replace(\"__.\", \"\"));\n          if (leftLen == 1) {\n            if (typeof funcDef == \"string\") {\n              return factory2.createCallExpression(\n                factory2.createIdentifier(funcDef),\n                [],\n                [visit(left)]\n              );\n            }\n          }\n          if (leftLen > 0) {\n            if (typeof funcDef == \"string\") {\n              let leftHoist = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n              let leftAss = factory2.createAssignment(leftHoist, visit(left));\n              let innerElems = [];\n              for (let i = 0; i < leftLen; i++) {\n                innerElems.push(\n                  factory2.createCallExpression(\n                    factory2.createIdentifier(funcDef),\n                    [],\n                    [\n                      factory2.createElementAccessExpression(\n                        leftHoist,\n                        factory2.createNumericLiteral(i)\n                      )\n                    ]\n                  )\n                );\n              }\n              let expr = factory2.createArrayLiteralExpression(innerElems);\n              return factory2.createCommaListExpression([leftAss, expr]);\n            } else {\n              return factory2.createParenthesizedExpression(\n                factory2.createCallExpression(\n                  factory2.createPropertyAccessExpression(\n                    factory2.createPropertyAccessExpression(\n                      factory2.createIdentifier(\"__\"),\n                      factory2.createIdentifier(\"FM\")\n                    ),\n                    factory2.createIdentifier(expressionText.replace(\"__.\", \"\") + `_${leftLen}`)\n                  ),\n                  [],\n                  [visit(left)]\n                )\n              );\n            }\n          }\n        }\n        if (expressionText == \"__.swizzle\" && node2.arguments.length == 2) {\n          let index = {\n            x: 0,\n            y: 1,\n            z: 2,\n            w: 3,\n            r: 0,\n            g: 1,\n            b: 2,\n            a: 3\n          };\n          let vecLen = getVectorLen(checker, checker.getTypeAtLocation(node2.arguments[0]));\n          if (vecLen != 0) {\n            let swizzleLiteral = node2.arguments[1];\n            let swiz = \"\";\n            if (ts.isStringLiteral(swizzleLiteral)) {\n              swiz = swizzleLiteral.text;\n            }\n            if (swiz.length == 1) {\n              return factory2.createElementAccessExpression(\n                visit(node2.arguments[0]),\n                factory2.createNumericLiteral(index[swiz])\n              );\n            }\n            let temp = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n            let tempAss = factory2.createAssignment(temp, visit(node2.arguments[0]));\n            let elems = [];\n            for (let i = 0; i < swiz.length; i++) {\n              if (vecLen == 1) {\n                elems.push(temp);\n              } else {\n                elems.push(\n                  factory2.createElementAccessExpression(\n                    temp,\n                    factory2.createNumericLiteral(index[swiz[i]])\n                  )\n                );\n              }\n            }\n            return factory2.createCommaListExpression([\n              tempAss,\n              factory2.createArrayLiteralExpression(elems)\n            ]);\n          }\n        }\n        if (expressionText.startsWith(\"__.\") && makeVectorsMap.has(expressionText.replace(\"__.\", \"\").replace(/\\d/g, \"\"))) {\n          let arg_lengths = node2.arguments.map(\n            (x) => getVectorLen(checker, checker.getTypeAtLocation(x))\n          );\n          let matches = expressionText.match(/\\d/g);\n          if (matches) {\n            let targetLen = matches[0];\n            let targetName = expressionText.replace(\"__.\", \"\").replace(/\\d/g, \"\");\n            return factory2.createCallExpression(\n              factory2.createPropertyAccessExpression(\n                factory2.createPropertyAccessExpression(\n                  factory2.createIdentifier(\"__\"),\n                  factory2.createIdentifier(\"FM\")\n                ),\n                factory2.createIdentifier(targetName + `_${targetLen}_${arg_lengths.join(\"_\")}`)\n              ),\n              [],\n              node2.arguments.map((x) => ts.visitEachChild(x, visit, context2))\n            );\n          } else {\n            if (expressionText == \"__.float\") {\n              return ts.visitEachChild(node2.arguments[0], visit, context2);\n            } else if (expressionText == \"__.int\") {\n              return factory2.createParenthesizedExpression(\n                factory2.createBinaryExpression(\n                  ts.visitEachChild(node2.arguments[0], visit, context2),\n                  factory2.createToken(ts.SyntaxKind.BarToken),\n                  factory2.createNumericLiteral(\"0\")\n                )\n              );\n            } else if (expressionText == \"__.uint\") {\n              return factory2.createParenthesizedExpression(\n                factory2.createBinaryExpression(\n                  ts.visitEachChild(node2.arguments[0], visit, context2),\n                  factory2.createToken(ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken),\n                  factory2.createNumericLiteral(\"0\")\n                )\n              );\n            }\n          }\n        }\n        if (symbol && symbol.name == \"int\") {\n          return factory2.createParenthesizedExpression(\n            factory2.createBinaryExpression(\n              ts.visitEachChild(node2, visit, context2),\n              factory2.createToken(ts.SyntaxKind.BarToken),\n              factory2.createNumericLiteral(\"0\")\n            )\n          );\n        } else if (symbol && (symbol.name == \"int2\" || symbol.name == \"int3\" || symbol.name == \"int4\")) {\n          return factory2.createCallExpression(\n            factory2.createPropertyAccessExpression(\n              factory2.createIdentifier(\"__\"),\n              factory2.createIdentifier(\"intifyVector\")\n            ),\n            [],\n            [ts.visitEachChild(node2, visit, context2)]\n          );\n        }\n      }\n      return ts.visitEachChild(node2, visit, context2);\n    }\n    rootNode = ts.visitNode(rootNode, visit);\n    return rootNode;\n  };\n};\nconst updateClassStructure = (getChecker) => (context2) => {\n  let checker = getChecker();\n  return (rootNode) => {\n    const { factory: factory2 } = context2;\n    function visit(node2) {\n      if (ts.isClassDeclaration(node2)) {\n        return [\n          factory2.updateClassDeclaration(\n            node2,\n            node2.modifiers,\n            node2.name,\n            node2.typeParameters,\n            node2.heritageClauses,\n            [\n              ...node2.members.map((m) => ts.visitEachChild(m, visit, context2)),\n              factory2.createMethodDeclaration(\n                void 0,\n                void 0,\n                factory2.createIdentifier(\"_getStructure\"),\n                void 0,\n                void 0,\n                [],\n                void 0,\n                factory2.createBlock(\n                  [\n                    factory2.createReturnStatement(\n                      factory2.createCallExpression(\n                        factory2.createPropertyAccessExpression(\n                          factory2.createIdentifier(\"JSON\"),\n                          \"parse\"\n                        ),\n                        void 0,\n                        [\n                          factory2.createStringLiteral(\n                            JSON.stringify(\n                              translateType(checker, checker.getTypeAtLocation(node2), true)\n                            )\n                          )\n                        ]\n                      )\n                    )\n                  ],\n                  true\n                )\n              )\n            ]\n          ),\n          factory2.createCallExpression(\n            factory2.createIdentifier(\"__shadeup_register_struct\"),\n            void 0,\n            [\n              factory2.createCallExpression(\n                factory2.createPropertyAccessExpression(factory2.createIdentifier(\"JSON\"), \"parse\"),\n                void 0,\n                [\n                  factory2.createStringLiteral(\n                    JSON.stringify(translateType(checker, checker.getTypeAtLocation(node2), true))\n                  )\n                ]\n              ),\n              factory2.createIdentifier(node2.name.text)\n            ]\n          )\n        ];\n      } else if (ts.isCallExpression(node2)) {\n        let symbol = checker.getSymbolAtLocation(node2.expression);\n        if (symbol && symbol.name == \"buffer\") {\n          let isInScope = false;\n          let sym = checker.getTypeAtLocation(node2.typeArguments[0]).getSymbol();\n          if (sym) {\n            let syms = checker.getSymbolsInScope(\n              node2,\n              ts.SymbolFlags.Alias | ts.SymbolFlags.TypeAlias | ts.SymbolFlags.Type\n            );\n            for (let s of syms) {\n              if (s == sym) {\n                isInScope = true;\n                break;\n              }\n            }\n          }\n          return factory2.updateCallExpression(node2, node2.expression, node2.typeArguments, [\n            ...node2.arguments,\n            factory2.createObjectLiteralExpression([\n              factory2.createSpreadAssignment(\n                factory2.createCallExpression(\n                  factory2.createPropertyAccessExpression(factory2.createIdentifier(\"JSON\"), \"parse\"),\n                  void 0,\n                  [\n                    factory2.createStringLiteral(\n                      JSON.stringify(\n                        translateType(\n                          checker,\n                          checker.getTypeAtLocation(node2.typeArguments[0]),\n                          true\n                        )\n                      )\n                    )\n                  ]\n                )\n              ),\n              ...isInScope ? [\n                factory2.createPropertyAssignment(\n                  \"__type\",\n                  factory2.createIdentifier(\n                    checker.getTypeAtLocation(node2.typeArguments[0]).getSymbol().getName()\n                  )\n                )\n              ] : []\n            ])\n          ]);\n        }\n      }\n      return ts.visitEachChild(node2, visit, context2);\n    }\n    return ts.visitNode(rootNode, visit);\n  };\n};\nconst updateAsyncCalls = (getChecker) => (context2) => {\n  let [checker, env2] = getChecker();\n  return (rootNode) => {\n    const { factory: factory2 } = context2;\n    function visit(node2) {\n      if (ts.isCallExpression(node2)) {\n        let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = checker.getAliasedSymbol(exprSmybol);\n        }\n        if (exprSmybol) {\n          let funcDeclar = exprSmybol.getDeclarations()?.[0];\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            let graphNodeName = getFunctionNodeName(funcDeclar);\n            let graphNode = env2.tagGraph.getNode(graphNodeName);\n            if (graphNode) {\n              if (!isInShader$1(node2) && !isInRoot(node2)) {\n                if (graphNode.tags.includes(\"async\")) {\n                  return factory2.createAwaitExpression(ts.visitEachChild(node2, visit, context2));\n                }\n              }\n            }\n          }\n        }\n        if (node2.expression && ts.isIdentifier(node2.expression) && node2.expression.text.startsWith(\"shader_start_shd_\")) {\n          let inner = node2.arguments[0];\n          if (ts.isAsExpression(inner)) {\n            inner = inner.expression;\n          }\n          if (ts.isCallExpression(inner) && inner.arguments[0]) {\n            let shaderKey = inner.arguments[0];\n            if (ts.isStringLiteral(shaderKey)) {\n              let key = shaderKey.text;\n              let file = env2.files.find((x) => x.path == rootNode.fileName);\n              let shader = file.shaders.find((x) => x.glsl.key == \"shd_\" + key);\n              if (shader) {\n                let params = [];\n                for (let param of Object.keys(shader.glsl.locals)) {\n                  shader.glsl.locals[param];\n                  let symbols = checker.getSymbolsInScope(node2, ts.SymbolFlags.Variable);\n                  let symbol = symbols.find((x) => x.name == param);\n                  let findInside = (node22) => {\n                    if (ts.isIdentifier(node22) && checker.getSymbolAtLocation(node22) == symbol) {\n                      return node22;\n                    }\n                    return ts.forEachChild(node22, findInside);\n                  };\n                  let found = findInside(inner.arguments[1]);\n                  if (found) {\n                    params.push([`_ext_uniform_local_${param}`, found]);\n                  } else {\n                    params.push([`_ext_uniform_local_${param}`, factory2.createIdentifier(param)]);\n                  }\n                }\n                for (let param of Object.keys(shader.glsl.globals)) {\n                  let u = shader.glsl.globals[param];\n                  params.push([\n                    `_ext_uniform_global_${param}`,\n                    factory2.createCallExpression(\n                      factory2.createIdentifier(\"globalVarGet\"),\n                      void 0,\n                      [\n                        factory2.createStringLiteral(cleanName(u.fileName)),\n                        factory2.createStringLiteral(param)\n                      ]\n                    )\n                  ]);\n                }\n                let innerArg = inner.arguments[1];\n                if (ts.isAsExpression(innerArg)) {\n                  innerArg = innerArg.expression;\n                }\n                if (ts.isParenthesizedExpression(innerArg)) {\n                  innerArg = innerArg.expression;\n                }\n                if (!ts.isArrowFunction(innerArg)) {\n                  throw new Error(\"Expected arrow function\");\n                }\n                let arrow = innerArg;\n                let mods = ts.getModifiers(arrow) || [];\n                return factory2.createCallExpression(\n                  factory2.createIdentifier(\"__shadeup_make_shader_inst\"),\n                  [],\n                  [\n                    ...[\n                      factory2.createStringLiteral(shader.glsl.key),\n                      factory2.createObjectLiteralExpression(\n                        params.map(([name, value]) => factory2.createPropertyAssignment(name, value))\n                      ),\n                      factory2.updateArrowFunction(\n                        arrow,\n                        [...mods, factory2.createModifier(ts.SyntaxKind.AsyncKeyword)],\n                        arrow.typeParameters,\n                        arrow.parameters,\n                        arrow.type,\n                        arrow.equalsGreaterThanToken,\n                        arrow.body\n                      )\n                    ],\n                    ...inner.arguments.length == 3 ? [inner.arguments[2]] : []\n                  ]\n                );\n              }\n            }\n          }\n        }\n      }\n      if (ts.isFunctionDeclaration(node2)) {\n        let graphNodeName = getFunctionNodeName(node2, rootNode);\n        let graphNode = env2.tagGraph.getNode(graphNodeName);\n        if (graphNode) {\n          if (graphNode.tags.includes(\"async\")) {\n            let mods = ts.getModifiers(node2) || [];\n            return factory2.updateFunctionDeclaration(\n              node2,\n              [...mods, factory2.createModifier(ts.SyntaxKind.AsyncKeyword)],\n              node2.asteriskToken,\n              node2.name,\n              node2.typeParameters,\n              node2.parameters,\n              node2.type,\n              ts.visitEachChild(node2.body, visit, context2)\n            );\n          }\n        }\n      }\n      if (ts.isClassDeclaration(node2)) {\n        ts.forEachChild(node2, (n) => {\n          if (ts.isMethodDeclaration(n)) {\n            let graphNodeName = getFunctionNodeName(n, rootNode);\n            let graphNode = env2.tagGraph.getNode(graphNodeName);\n            if (graphNode) {\n              if (graphNode.tags.includes(\"async\")) {\n                let mods = ts.getModifiers(node2) || [];\n                return factory2.updateMethodDeclaration(\n                  n,\n                  [...mods, factory2.createModifier(ts.SyntaxKind.AsyncKeyword)],\n                  n.asteriskToken,\n                  n.name,\n                  n.questionToken,\n                  n.typeParameters,\n                  n.parameters,\n                  n.type,\n                  ts.visitEachChild(n.body, visit, context2)\n                );\n              }\n            }\n          }\n        });\n      }\n      return ts.visitEachChild(node2, visit, context2);\n    }\n    return ts.visitNode(rootNode, visit);\n  };\n};\nasync function makeTypescriptEnvironment(shadeupEnv) {\n  const shouldCache = false;\n  let fsMap = await createDefaultMapFromCDN(\n    { target: ts.ScriptTarget.ES2015, lib: [\"es5\", \"es2015\", \"es2015.promise\"] },\n    \"3.7.3\",\n    shouldCache,\n    ts\n  );\n  fsMap = /* @__PURE__ */ new Map();\n  fsMap.set(\"/file.ts\", \"\");\n  fsMap.set(\"/std_math.ts\", stdMath);\n  fsMap.set(\"/static-math.ts\", stdStaticMath);\n  fsMap.set(\"/std___std_all.ts\", stdAll);\n  fsMap.set(\"/global.d.ts\", globalDTS);\n  const system = createSystem(fsMap);\n  system.$fsMap = fsMap;\n  system.writeFile(\"/std___std_all.ts\", stdAll);\n  system.writeFile(\"/std_math.ts\", stdMath);\n  system.writeFile(\"/static-math.ts\", stdStaticMath);\n  system.writeFile(\"/global.d.ts\", globalDTS);\n  const compilerOpts = {\n    module: ts.ModuleKind.AMD,\n    removeComments: false,\n    lib: [\"es5\"],\n    //noImplicitUseStrict: true,\n    alwaysStrict: true,\n    strictNullChecks: true,\n    strictFunctionTypes: true,\n    strictBindCallApply: true,\n    strictPropertyInitialization: true,\n    noImplicitThis: true,\n    strict: true,\n    noImplicitAny: true,\n    noImplicitReturns: true,\n    declaration: shadeupEnv.options?.declaration ?? false\n  };\n  if (shadeupEnv.options.esnext)\n    ;\n  let transformers = {\n    before: [\n      updateIntegerMixing(() => [\n        env2.languageService.getProgram().getTypeChecker(),\n        shadeupEnv,\n        shadeupEnv.loads\n      ]),\n      updateAsyncCalls(() => [env2.languageService.getProgram().getTypeChecker(), shadeupEnv]),\n      // updateAsyncArrows(() => [env.languageService.getProgram().getTypeChecker(), shadeupEnv]),\n      updateClassStructure(() => env2.languageService.getProgram().getTypeChecker())\n    ]\n  };\n  const env2 = createVirtualTypeScriptEnvironment(\n    system,\n    Object.keys(fsMap),\n    ts,\n    compilerOpts,\n    transformers\n  );\n  env2.createFile(\"/std___std_all.ts\", stdAll);\n  env2.createFile(\"/std_math.ts\", stdMath);\n  env2.createFile(\"/static-math.ts\", stdStaticMath);\n  env2.createFile(\"/global.d.ts\", globalDTS);\n  return {\n    env: env2,\n    fsMap,\n    system\n  };\n}\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\nfunction diff_main(text1, text2, cursor_pos, _fix_unicode) {\n  if (text1 === text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n  if (cursor_pos != null) {\n    var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n    if (editdiff) {\n      return editdiff;\n    }\n  }\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n  var diffs = diff_compute_(text1, text2);\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs, _fix_unicode);\n  return diffs;\n}\nfunction diff_compute_(text1, text2) {\n  var diffs;\n  if (!text1) {\n    return [[DIFF_INSERT, text2]];\n  }\n  if (!text2) {\n    return [[DIFF_DELETE, text1]];\n  }\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i !== -1) {\n    diffs = [\n      [DIFF_INSERT, longtext.substring(0, i)],\n      [DIFF_EQUAL, shorttext],\n      [DIFF_INSERT, longtext.substring(i + shorttext.length)]\n    ];\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n  if (shorttext.length === 1) {\n    return [\n      [DIFF_DELETE, text1],\n      [DIFF_INSERT, text2]\n    ];\n  }\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n  return diff_bisect_(text1, text2);\n}\nfunction diff_bisect_(text1, text2) {\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  var front = delta % 2 !== 0;\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 === -d || k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1]) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) === text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 === -d || k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1]) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) === text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  return [\n    [DIFF_DELETE, text1],\n    [DIFF_INSERT, text2]\n  ];\n}\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n  return diffs.concat(diffsb);\n}\nfunction diff_commonPrefix(text1, text2) {\n  if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n    return 0;\n  }\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n    pointermid--;\n  }\n  return pointermid;\n}\nfunction diff_commonSuffix(text1, text2) {\n  if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n    return 0;\n  }\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n    pointermid--;\n  }\n  return pointermid;\n}\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;\n  }\n  function diff_halfMatchI_(longtext2, shorttext2, i) {\n    var seed = longtext2.substring(i, i + Math.floor(longtext2.length / 4));\n    var j = -1;\n    var best_common = \"\";\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext2.indexOf(seed, j + 1)) !== -1) {\n      var prefixLength = diff_commonPrefix(longtext2.substring(i), shorttext2.substring(j));\n      var suffixLength = diff_commonSuffix(longtext2.substring(0, i), shorttext2.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext2.substring(j - suffixLength, j) + shorttext2.substring(j, j + prefixLength);\n        best_longtext_a = longtext2.substring(0, i - suffixLength);\n        best_longtext_b = longtext2.substring(i + prefixLength);\n        best_shorttext_a = shorttext2.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext2.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext2.length) {\n      return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n  var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));\n  var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n  diffs.push([DIFF_EQUAL, \"\"]);\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = \"\";\n  var text_insert = \"\";\n  var commonlength;\n  while (pointer < diffs.length) {\n    if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n      diffs.splice(pointer, 1);\n      continue;\n    }\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        var previous_equality = pointer - count_insert - count_delete - 1;\n        if (fix_unicode) {\n          if (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) {\n            var stray = diffs[previous_equality][1].slice(-1);\n            diffs[previous_equality][1] = diffs[previous_equality][1].slice(0, -1);\n            text_delete = stray + text_delete;\n            text_insert = stray + text_insert;\n            if (!diffs[previous_equality][1]) {\n              diffs.splice(previous_equality, 1);\n              pointer--;\n              var k = previous_equality - 1;\n              if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n                count_insert++;\n                text_insert = diffs[k][1] + text_insert;\n                k--;\n              }\n              if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n                count_delete++;\n                text_delete = diffs[k][1] + text_delete;\n                k--;\n              }\n              previous_equality = k;\n            }\n          }\n          if (starts_with_pair_end(diffs[pointer][1])) {\n            var stray = diffs[pointer][1].charAt(0);\n            diffs[pointer][1] = diffs[pointer][1].slice(1);\n            text_delete += stray;\n            text_insert += stray;\n          }\n        }\n        if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n          diffs.splice(pointer, 1);\n          break;\n        }\n        if (text_delete.length > 0 || text_insert.length > 0) {\n          if (text_delete.length > 0 && text_insert.length > 0) {\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if (previous_equality >= 0) {\n                diffs[previous_equality][1] += text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length - commonlength);\n              text_delete = text_delete.substring(0, text_delete.length - commonlength);\n            }\n          }\n          var n = count_insert + count_delete;\n          if (text_delete.length === 0 && text_insert.length === 0) {\n            diffs.splice(pointer - n, n);\n            pointer = pointer - n;\n          } else if (text_delete.length === 0) {\n            diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n            pointer = pointer - n + 1;\n          } else if (text_insert.length === 0) {\n            diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n            pointer = pointer - n + 1;\n          } else {\n            diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]);\n            pointer = pointer - n + 2;\n          }\n        }\n        if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = \"\";\n        text_insert = \"\";\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === \"\") {\n    diffs.pop();\n  }\n  var changes = false;\n  pointer = 1;\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n      if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1]) {\n        diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  if (changes) {\n    diff_cleanupMerge(diffs, fix_unicode);\n  }\n}\nfunction is_surrogate_pair_start(charCode) {\n  return charCode >= 55296 && charCode <= 56319;\n}\nfunction is_surrogate_pair_end(charCode) {\n  return charCode >= 56320 && charCode <= 57343;\n}\nfunction starts_with_pair_end(str) {\n  return is_surrogate_pair_end(str.charCodeAt(0));\n}\nfunction ends_with_pair_start(str) {\n  return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\nfunction remove_empty_tuples(tuples) {\n  var ret = [];\n  for (var i = 0; i < tuples.length; i++) {\n    if (tuples[i][1].length > 0) {\n      ret.push(tuples[i]);\n    }\n  }\n  return ret;\n}\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n  if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n    return null;\n  }\n  return remove_empty_tuples([\n    [DIFF_EQUAL, before],\n    [DIFF_DELETE, oldMiddle],\n    [DIFF_INSERT, newMiddle],\n    [DIFF_EQUAL, after]\n  ]);\n}\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n  var oldRange = typeof cursor_pos === \"number\" ? { index: cursor_pos, length: 0 } : cursor_pos.oldRange;\n  var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n  var oldLength = oldText.length;\n  var newLength = newText.length;\n  if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n    var oldCursor = oldRange.index;\n    var oldBefore = oldText.slice(0, oldCursor);\n    var oldAfter = oldText.slice(oldCursor);\n    var maybeNewCursor = newRange ? newRange.index : null;\n    editBefore: {\n      var newCursor = oldCursor + newLength - oldLength;\n      if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n        break editBefore;\n      }\n      if (newCursor < 0 || newCursor > newLength) {\n        break editBefore;\n      }\n      var newBefore = newText.slice(0, newCursor);\n      var newAfter = newText.slice(newCursor);\n      if (newAfter !== oldAfter) {\n        break editBefore;\n      }\n      var prefixLength = Math.min(oldCursor, newCursor);\n      var oldPrefix = oldBefore.slice(0, prefixLength);\n      var newPrefix = newBefore.slice(0, prefixLength);\n      if (oldPrefix !== newPrefix) {\n        break editBefore;\n      }\n      var oldMiddle = oldBefore.slice(prefixLength);\n      var newMiddle = newBefore.slice(prefixLength);\n      return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n    }\n    editAfter: {\n      if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n        break editAfter;\n      }\n      var cursor = oldCursor;\n      var newBefore = newText.slice(0, cursor);\n      var newAfter = newText.slice(cursor);\n      if (newBefore !== oldBefore) {\n        break editAfter;\n      }\n      var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n      var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n      var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n      if (oldSuffix !== newSuffix) {\n        break editAfter;\n      }\n      var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n      var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n      return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n    }\n  }\n  if (oldRange.length > 0 && newRange && newRange.length === 0) {\n    replaceRange: {\n      var oldPrefix = oldText.slice(0, oldRange.index);\n      var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n      var prefixLength = oldPrefix.length;\n      var suffixLength = oldSuffix.length;\n      if (newLength < prefixLength + suffixLength) {\n        break replaceRange;\n      }\n      var newPrefix = newText.slice(0, prefixLength);\n      var newSuffix = newText.slice(newLength - suffixLength);\n      if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n        break replaceRange;\n      }\n      var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n      var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n      return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n    }\n  }\n  return null;\n}\nfunction diff(text1, text2, cursor_pos) {\n  return diff_main(text1, text2, cursor_pos, true);\n}\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\nArray.prototype.enumerate = function() {\n  let i = 0;\n  let rv = [];\n  for (let item of this)\n    rv.push([i++, item]);\n  return rv;\n};\nArray.prototype.filter_map = function(fn) {\n  return this.map(fn).filter((n) => n !== null);\n};\nArray.prototype.max_by_key = function(fn) {\n  const max2 = (self2) => {\n    return Math.max.apply(null, self2);\n  };\n  return max2(this.map(fn));\n};\nArray.prototype.chain = function(that) {\n  return this.concat(that);\n};\nNumber.prototype.saturating_sub = function(n) {\n  return this.valueOf() - n;\n};\nNumber.prototype.max = function(n) {\n  return Math.max(this.valueOf(), n);\n};\nNumber.prototype.min = function(n) {\n  return Math.min(this.valueOf(), n);\n};\nclass Option {\n  static from(obj) {\n    if (obj === void 0 || obj === null)\n      return none();\n    return some(obj);\n  }\n}\nclass Some {\n  constructor(value) {\n    this.value = value;\n  }\n  map(fn) {\n    return some(fn(this.value));\n  }\n  map_or(d, fn) {\n    return fn(this.value);\n  }\n  filter(fn) {\n    if (fn(this.value))\n      return some(this.value);\n    return none();\n  }\n  or(d) {\n    return this;\n  }\n  iter() {\n    return [this.value];\n  }\n  unwrap() {\n    return this.value;\n  }\n  unwrap_or_else(d) {\n    return this.unwrap();\n  }\n  is_some() {\n    return true;\n  }\n  is_none() {\n    return false;\n  }\n  equal(other) {\n    if (other.is_some())\n      return this.value === other.value;\n    return false;\n  }\n  static is(o) {\n    return o instanceof Some;\n  }\n}\nclass None {\n  map(fn) {\n    return none();\n  }\n  map_or(d, fn) {\n    return d;\n  }\n  filter(fn) {\n    return none();\n  }\n  or(d) {\n    return d;\n  }\n  iter() {\n    return [];\n  }\n  unwrap() {\n    throw new Error(\"Unwrapped None\");\n  }\n  unwrap_or_else(d) {\n    return d();\n  }\n  is_some() {\n    return false;\n  }\n  is_none() {\n    return true;\n  }\n  equal(other) {\n    return other.is_none();\n  }\n  static is(o) {\n    return o instanceof None;\n  }\n}\nconst some = (value) => {\n  return new Some(value);\n};\nconst none = () => {\n  return new None();\n};\nconst isOption = (o) => {\n  return o instanceof Some || o instanceof None;\n};\nclass Ok {\n  constructor(value) {\n    this.value = value;\n  }\n  map(fn) {\n    return ok(fn(this.value));\n  }\n  map_or(d, fn) {\n    return ok(fn(this.value));\n  }\n  or(d) {\n    return this;\n  }\n  is_ok() {\n    return true;\n  }\n  is_err() {\n    return false;\n  }\n  unwrap() {\n    return this.value;\n  }\n  unwrap_or_else(d) {\n    return d(this.value);\n  }\n  static is(o) {\n    return o instanceof Ok;\n  }\n}\nclass Err {\n  constructor(value) {\n    this.value = value;\n  }\n  map(fn) {\n    return ok(fn(this.value));\n  }\n  map_or(d, fn) {\n    return ok(d);\n  }\n  or(d) {\n    return d;\n  }\n  unwrap() {\n    return this.value;\n  }\n  unwrap_or_else(d) {\n    return d(this.value);\n  }\n  is_ok() {\n    return false;\n  }\n  is_err() {\n    return true;\n  }\n  static is(o) {\n    return o instanceof Err;\n  }\n}\nconst ok = (value) => {\n  return new Ok(value);\n};\nconst err = (value) => {\n  return new Err(value);\n};\nconst isResult = (o) => {\n  return o instanceof Ok || o instanceof Err;\n};\nfunction binary_search_by_key(arr, x, fn) {\n  let start = 0, end = arr.length - 1, mid, val;\n  while (start < end) {\n    mid = Math.floor((start + end) / 2);\n    val = fn(arr[mid]);\n    if (val === x)\n      return ok(mid);\n    else if (val < x)\n      start = mid + 1;\n    else\n      end = mid - 1;\n  }\n  return err(get_sorted_index(arr, x, fn));\n}\nfunction get_sorted_index(arr, x, fn) {\n  let low = 0, high = arr.length;\n  while (low < high) {\n    let mid = low + high >>> 1;\n    if (x > fn(arr[mid]))\n      low = mid + 1;\n    else\n      high = mid;\n  }\n  return low;\n}\nfunction range(start, end) {\n  let rv = [];\n  while (start < end) {\n    rv.push(start);\n    start++;\n  }\n  return rv;\n}\nfunction* rangeIter(start, end) {\n  while (start < end) {\n    yield start;\n    start++;\n  }\n  return;\n}\nconst max = (self2) => {\n  if (self2.length === 0)\n    return void 0;\n  return Math.max.apply(null, self2);\n};\nconst bton = (b) => b === true ? 1 : 0;\nfunction sort_by_key(arr, fn) {\n  arr.sort((a, b) => {\n    return fn(a) - fn(b);\n  });\n}\nfunction min_by_key(arr, fn) {\n  let res = [Infinity, null];\n  for (let val of arr) {\n    if (fn(val) < res[0]) {\n      res = [fn(val), val];\n    }\n  }\n  return Option.from(res[1]);\n}\nconst isString = (o) => typeof o === \"string\";\nconst isNumber = (o) => typeof o === \"number\";\nconst isBoolean = (o) => typeof o === \"boolean\";\nconst isCallback = (maybeFunction) => typeof maybeFunction === \"function\";\nclass Display {\n  constructor(value) {\n    this.value = typeof value === \"string\" ? value : value.value;\n  }\n  fg(color) {\n    if (isOption(color)) {\n      let func = color.is_some() ? color.unwrap() : (a) => a;\n      this.value = func(this.value);\n    } else if (isCallback(color)) {\n      this.value = color(this.value);\n    }\n    return this;\n  }\n  bg(color) {\n    if (isOption(color)) {\n      let func = color.is_some() ? color.unwrap() : (a) => a;\n      this.value = func(this.value);\n    } else if (isCallback(color)) {\n      this.value = color(this.value);\n    }\n    return this;\n  }\n  chars() {\n    return this.value;\n  }\n  map(fn) {\n    return new Display(fn(this.value));\n  }\n  display() {\n    return this.value;\n  }\n  toString() {\n    return this.value;\n  }\n  unwrap_or_else(d) {\n    return this.value ?? d();\n  }\n  static {\n    this.is = (o) => o instanceof Display;\n  }\n}\nconst isDisplay = Display.is;\nclass Span {\n  constructor(_start, _end) {\n    this._start = _start;\n    this._end = _end;\n  }\n  /// Get the identifier of the source that this span refers to.\n  source() {\n    return this.SourceId;\n  }\n  set start(value) {\n    this._start = value;\n  }\n  get start() {\n    return this._start;\n  }\n  set end(value) {\n    this._end = value;\n  }\n  get end() {\n    return this._end;\n  }\n  /// Get the length of this span (difference between the start of the span and the end of the span).\n  len() {\n    return this.end.saturating_sub(this.start);\n  }\n  /// Determine whether the span contains the given offset.\n  contains(offset) {\n    return range(this.start, this.end).includes(offset);\n  }\n  static {\n    this.is = (o) => o instanceof Span;\n  }\n  static from(o) {\n    if (isNumber(o[0]) && isNumber(o[1]))\n      return new Span(o[0], o[1]);\n    if (isString(o[0]) && Range.is(o[1])) {\n      const s = new Span(o[1].start, o[1].end);\n      s.SourceId = o[0];\n      return s;\n    }\n    throw new Error(`Invalid SpanInit`);\n  }\n}\nSpan.is;\nclass Range extends Span {\n  constructor() {\n    super(...arguments);\n    this.SourceId = null;\n  }\n  source() {\n    return this.SourceId;\n  }\n  len() {\n    return Math.abs(this.start - this.end);\n  }\n  contains(item) {\n    return item >= this.start && item < this.end;\n  }\n  static is(o) {\n    return o instanceof Range;\n  }\n  static from(o) {\n    if (isNumber(o[0]) && isNumber(o[1]))\n      return new Span(o[0], o[1]);\n    if (isString(o[0]) && Range.is(o[1])) {\n      const s = new Range(o[1].start, o[1].end);\n      s.SourceId = o[0];\n      return s;\n    }\n    throw new Error(`Invalid SpanInit`);\n  }\n  static new(start, end) {\n    return new Range(start, end);\n  }\n}\nfunction ValueError(message) {\n  var err2 = new Error(message);\n  err2.name = \"ValueError\";\n  return err2;\n}\nfunction create(transformers) {\n  return function(template) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    var idx = 0;\n    var state = \"UNDEFINED\";\n    return template.replace(\n      /([{}])\\1|[{](.*?)(?:!(.+?))?[}]/g,\n      function(match2, literal, _key, xf) {\n        if (literal != null) {\n          return literal;\n        }\n        var key = _key;\n        if (key.length > 0) {\n          if (state === \"IMPLICIT\") {\n            throw ValueError(\"cannot switch from implicit to explicit numbering\");\n          }\n          state = \"EXPLICIT\";\n        } else {\n          if (state === \"EXPLICIT\") {\n            throw ValueError(\"cannot switch from explicit to implicit numbering\");\n          }\n          state = \"IMPLICIT\";\n          key = String(idx);\n          idx += 1;\n        }\n        var path = key.split(\".\");\n        var value = (/^\\d+$/.test(path[0]) ? path : [\"0\"].concat(path)).reduce(\n          function(maybe, key2) {\n            return maybe.reduce(function(_, x) {\n              return x != null && key2 in Object(x) ? [typeof x[key2] === \"function\" ? x[key2]() : x[key2]] : [];\n            }, []);\n          },\n          [args]\n        ).reduce(function(_, x) {\n          return x;\n        }, \"\");\n        if (xf == null) {\n          return value;\n        } else if (Object.prototype.hasOwnProperty.call(transformers, xf)) {\n          return transformers[xf](value);\n        } else {\n          throw ValueError('no transformer named \"' + xf + '\"');\n        }\n      }\n    );\n  };\n}\nvar format$1 = create({});\nformat$1.create = create;\nformat$1.extend = function(prototype, transformers) {\n  var $format = create(transformers);\n  prototype.format = function() {\n    var args = Array.prototype.slice.call(arguments);\n    args.unshift(this);\n    return $format.apply(global, args);\n  };\n};\nconst stringFormatter = () => new class {\n  constructor() {\n    this.flags = 0;\n    this.fill = \"\";\n    this.align = \"Left\";\n    this.width = none();\n    this.precision = none();\n    this.buf = mkStringWriter();\n  }\n  unwrap() {\n    return this.buf.unwrap();\n  }\n}();\nclass Show {\n  constructor(self2) {\n    this.self = self2;\n  }\n  fmt(f) {\n    if (isOption(this.self)) {\n      this.self.map((x) => new Show(x).fmt(f));\n      return;\n    }\n    if (isResult(this.self)) {\n      this.self.map((x) => new Show(x).fmt(f));\n      return;\n    }\n    if (typeof this.self === \"string\") {\n      write(f.buf, \"{}\", this.self);\n      return;\n    }\n    if (Array.isArray(this.self) && this.self.length === 2) {\n      if (isCallback(this.self[1])) {\n        for (let x of this.self[0]) {\n          const func = this.self[1];\n          func(f, x);\n        }\n      } else {\n        for (let _ of range(0, this.self[1])) {\n          write(f.buf, \"{}\", this.self[0]);\n        }\n      }\n    } else {\n      const x = this.self[0];\n      write(f.buf, \"{}\", x);\n      return;\n    }\n  }\n  static {\n    this.is = (o) => o instanceof Show;\n  }\n}\nconst isShow = Show.is;\nfunction write(w, ...args) {\n  w.write_fmt(format(...args.map(fromRust)));\n}\nfunction format(...args) {\n  const [head, ...rest] = args.map(fromRust);\n  return format$1(head, ...rest);\n}\nfunction fromRust(node2) {\n  if (isDisplay(node2)) {\n    return node2.display();\n  }\n  if (isShow(node2)) {\n    let f = stringFormatter();\n    node2.fmt(f);\n    return f.unwrap();\n  }\n  if (isOption(node2)) {\n    return node2.unwrap_or_else(() => \"\");\n  }\n  if (isResult(node2)) {\n    return node2.unwrap_or_else(() => \"<(Unwrap Err)>\");\n  }\n  return node2.toString();\n}\nfunction writeln(w, ...args) {\n  let val = format(...args.map(fromRust));\n  w.write_fmt(val);\n  w.write_fmt(\"\\n\");\n}\nfunction eprintln(...args) {\n  console.error(format(...args));\n}\nclass StdoutWriter {\n  write_str(s) {\n    throw new Error(\"Function not implemented\");\n  }\n  write_char(c2) {\n    throw new Error(\"Function not implemented\");\n  }\n  write_fmt(...args) {\n    console.log(format(...args));\n    return ok(null);\n  }\n}\nclass StderrWriter {\n  write_str(s) {\n    throw new Error(\"Function not implemented\");\n  }\n  write_char(c2) {\n    throw new Error(\"Function not implemented\");\n  }\n  write_fmt(...args) {\n    process.stderr.write(format(...args));\n    return ok(null);\n  }\n}\nclass StringWriter {\n  constructor() {\n    this.value = [];\n  }\n  write_str(s) {\n    this.value.push(s);\n    return ok(null);\n  }\n  write_char(c2) {\n    this.value.push(c2);\n    return ok(null);\n  }\n  write_fmt(...args) {\n    this.value.push(format(...args));\n    return ok(null);\n  }\n  map(fn) {\n    return fn(this.unwrap());\n  }\n  unwrap() {\n    return this.value.join(\"\");\n  }\n}\nconst stdoutWriter = new StdoutWriter();\nconst stderrWriter = new StderrWriter();\nconst mkStringWriter = () => new StringWriter();\nconst ANSI_BACKGROUND_OFFSET = 10;\nconst wrapAnsi16 = (offset = 0) => (code) => `\\x1B[${code + offset}m`;\nconst wrapAnsi256 = (offset = 0) => (code) => `\\x1B[${38 + offset};5;${code}m`;\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\x1B[${38 + offset};2;${red};${green};${blue}m`;\nconst styles$1 = {\n  modifier: {\n    reset: [0, 0],\n    // 21 isn't widely supported and 22 does the same thing\n    bold: [1, 22],\n    dim: [2, 22],\n    italic: [3, 23],\n    underline: [4, 24],\n    overline: [53, 55],\n    inverse: [7, 27],\n    hidden: [8, 28],\n    strikethrough: [9, 29]\n  },\n  color: {\n    black: [30, 39],\n    red: [31, 39],\n    green: [32, 39],\n    yellow: [33, 39],\n    blue: [34, 39],\n    magenta: [35, 39],\n    cyan: [36, 39],\n    white: [37, 39],\n    // Bright color\n    blackBright: [90, 39],\n    gray: [90, 39],\n    // Alias of `blackBright`\n    grey: [90, 39],\n    // Alias of `blackBright`\n    redBright: [91, 39],\n    greenBright: [92, 39],\n    yellowBright: [93, 39],\n    blueBright: [94, 39],\n    magentaBright: [95, 39],\n    cyanBright: [96, 39],\n    whiteBright: [97, 39]\n  },\n  bgColor: {\n    bgBlack: [40, 49],\n    bgRed: [41, 49],\n    bgGreen: [42, 49],\n    bgYellow: [43, 49],\n    bgBlue: [44, 49],\n    bgMagenta: [45, 49],\n    bgCyan: [46, 49],\n    bgWhite: [47, 49],\n    // Bright color\n    bgBlackBright: [100, 49],\n    bgGray: [100, 49],\n    // Alias of `bgBlackBright`\n    bgGrey: [100, 49],\n    // Alias of `bgBlackBright`\n    bgRedBright: [101, 49],\n    bgGreenBright: [102, 49],\n    bgYellowBright: [103, 49],\n    bgBlueBright: [104, 49],\n    bgMagentaBright: [105, 49],\n    bgCyanBright: [106, 49],\n    bgWhiteBright: [107, 49]\n  }\n};\nObject.keys(styles$1.modifier);\nconst foregroundColorNames = Object.keys(styles$1.color);\nconst backgroundColorNames = Object.keys(styles$1.bgColor);\n[...foregroundColorNames, ...backgroundColorNames];\nfunction assembleStyles() {\n  const codes = /* @__PURE__ */ new Map();\n  for (const [groupName, group] of Object.entries(styles$1)) {\n    for (const [styleName, style] of Object.entries(group)) {\n      styles$1[styleName] = {\n        open: `\\x1B[${style[0]}m`,\n        close: `\\x1B[${style[1]}m`\n      };\n      group[styleName] = styles$1[styleName];\n      codes.set(style[0], style[1]);\n    }\n    Object.defineProperty(styles$1, groupName, {\n      value: group,\n      enumerable: false\n    });\n  }\n  Object.defineProperty(styles$1, \"codes\", {\n    value: codes,\n    enumerable: false\n  });\n  styles$1.color.close = \"\\x1B[39m\";\n  styles$1.bgColor.close = \"\\x1B[49m\";\n  styles$1.color.ansi = wrapAnsi16();\n  styles$1.color.ansi256 = wrapAnsi256();\n  styles$1.color.ansi16m = wrapAnsi16m();\n  styles$1.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n  styles$1.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n  styles$1.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n  Object.defineProperties(styles$1, {\n    rgbToAnsi256: {\n      value(red, green, blue) {\n        if (red === green && green === blue) {\n          if (red < 8) {\n            return 16;\n          }\n          if (red > 248) {\n            return 231;\n          }\n          return Math.round((red - 8) / 247 * 24) + 232;\n        }\n        return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);\n      },\n      enumerable: false\n    },\n    hexToRgb: {\n      value(hex) {\n        const matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n        if (!matches) {\n          return [0, 0, 0];\n        }\n        let [colorString] = matches;\n        if (colorString.length === 3) {\n          colorString = [...colorString].map((character) => character + character).join(\"\");\n        }\n        const integer = Number.parseInt(colorString, 16);\n        return [\n          /* eslint-disable no-bitwise */\n          integer >> 16 & 255,\n          integer >> 8 & 255,\n          integer & 255\n          /* eslint-enable no-bitwise */\n        ];\n      },\n      enumerable: false\n    },\n    hexToAnsi256: {\n      value: (hex) => styles$1.rgbToAnsi256(...styles$1.hexToRgb(hex)),\n      enumerable: false\n    },\n    ansi256ToAnsi: {\n      value(code) {\n        if (code < 8) {\n          return 30 + code;\n        }\n        if (code < 16) {\n          return 90 + (code - 8);\n        }\n        let red;\n        let green;\n        let blue;\n        if (code >= 232) {\n          red = ((code - 232) * 10 + 8) / 255;\n          green = red;\n          blue = red;\n        } else {\n          code -= 16;\n          const remainder = code % 36;\n          red = Math.floor(code / 36) / 5;\n          green = Math.floor(remainder / 6) / 5;\n          blue = remainder % 6 / 5;\n        }\n        const value = Math.max(red, green, blue) * 2;\n        if (value === 0) {\n          return 30;\n        }\n        let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));\n        if (value === 2) {\n          result += 60;\n        }\n        return result;\n      },\n      enumerable: false\n    },\n    rgbToAnsi: {\n      value: (red, green, blue) => styles$1.ansi256ToAnsi(styles$1.rgbToAnsi256(red, green, blue)),\n      enumerable: false\n    },\n    hexToAnsi: {\n      value: (hex) => styles$1.ansi256ToAnsi(styles$1.hexToAnsi256(hex)),\n      enumerable: false\n    }\n  });\n  return styles$1;\n}\nconst ansiStyles = assembleStyles();\nconst env = {\n  FORCE_COLOR: \"false\"\n};\nlet flagForceColor;\nfunction envForceColor() {\n  if (\"FORCE_COLOR\" in env) {\n    if (env.FORCE_COLOR === \"true\") {\n      return 1;\n    }\n    if (env.FORCE_COLOR === \"false\") {\n      return 0;\n    }\n    return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n  }\n}\nfunction translateLevel(level) {\n  if (level === 0) {\n    return false;\n  }\n  return {\n    level,\n    hasBasic: true,\n    has256: level >= 2,\n    has16m: level >= 3\n  };\n}\nfunction _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {\n  const noFlagForceColor = envForceColor();\n  if (noFlagForceColor !== void 0) {\n    flagForceColor = noFlagForceColor;\n  }\n  const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n  if (forceColor === 0) {\n    return 0;\n  }\n  if (\"TF_BUILD\" in env && \"AGENT_NAME\" in env) {\n    return 1;\n  }\n  if (haveStream && !streamIsTTY && forceColor === void 0) {\n    return 0;\n  }\n  const min = forceColor || 0;\n  if (env.TERM === \"dumb\") {\n    return min;\n  }\n  if (\"CI\" in env) {\n    if (\"GITHUB_ACTIONS\" in env || \"GITEA_ACTIONS\" in env) {\n      return 3;\n    }\n    if ([\"TRAVIS\", \"CIRCLECI\", \"APPVEYOR\", \"GITLAB_CI\", \"BUILDKITE\", \"DRONE\"].some(\n      (sign) => sign in env\n    ) || env.CI_NAME === \"codeship\") {\n      return 1;\n    }\n    return min;\n  }\n  if (\"TEAMCITY_VERSION\" in env) {\n    return /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n  }\n  if (env.COLORTERM === \"truecolor\") {\n    return 3;\n  }\n  if (env.TERM === \"xterm-kitty\") {\n    return 3;\n  }\n  if (\"TERM_PROGRAM\" in env) {\n    const version = Number.parseInt((env.TERM_PROGRAM_VERSION || \"\").split(\".\")[0], 10);\n    switch (env.TERM_PROGRAM) {\n      case \"iTerm.app\": {\n        return version >= 3 ? 3 : 2;\n      }\n      case \"Apple_Terminal\": {\n        return 2;\n      }\n    }\n  }\n  if (/-256(color)?$/i.test(env.TERM)) {\n    return 2;\n  }\n  if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n    return 1;\n  }\n  if (\"COLORTERM\" in env) {\n    return 1;\n  }\n  return min;\n}\nfunction createSupportsColor(stream, options = {}) {\n  const level = _supportsColor(stream, {\n    streamIsTTY: stream && stream.isTTY,\n    ...options\n  });\n  return translateLevel(level);\n}\nconst supportsColor = {\n  stdout: createSupportsColor({ isTTY: false }),\n  stderr: createSupportsColor({ isTTY: false })\n};\nfunction stringReplaceAll(string, substring, replacer) {\n  let index = string.indexOf(substring);\n  if (index === -1) {\n    return string;\n  }\n  const substringLength = substring.length;\n  let endIndex = 0;\n  let returnValue = \"\";\n  do {\n    returnValue += string.slice(endIndex, index) + substring + replacer;\n    endIndex = index + substringLength;\n    index = string.indexOf(substring, endIndex);\n  } while (index !== -1);\n  returnValue += string.slice(endIndex);\n  return returnValue;\n}\nfunction stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n  let endIndex = 0;\n  let returnValue = \"\";\n  do {\n    const gotCR = string[index - 1] === \"\\r\";\n    returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? \"\\r\\n\" : \"\\n\") + postfix;\n    endIndex = index + 1;\n    index = string.indexOf(\"\\n\", endIndex);\n  } while (index !== -1);\n  returnValue += string.slice(endIndex);\n  return returnValue;\n}\nconst { stdout: stdoutColor, stderr: stderrColor } = supportsColor;\nconst GENERATOR = Symbol(\"GENERATOR\");\nconst STYLER = Symbol(\"STYLER\");\nconst IS_EMPTY = Symbol(\"IS_EMPTY\");\nconst levelMapping = [\"ansi\", \"ansi\", \"ansi256\", \"ansi16m\"];\nconst styles = /* @__PURE__ */ Object.create(null);\nconst applyOptions = (object, options = {}) => {\n  if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n    throw new Error(\"The `level` option should be an integer from 0 to 3\");\n  }\n  const colorLevel = stdoutColor ? stdoutColor.level : 0;\n  object.level = options.level === void 0 ? colorLevel : options.level;\n};\nconst chalkFactory = (options) => {\n  const chalk2 = (...strings) => strings.join(\" \");\n  applyOptions(chalk2, options);\n  Object.setPrototypeOf(chalk2, createChalk.prototype);\n  return chalk2;\n};\nfunction createChalk(options) {\n  return chalkFactory(options);\n}\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n  styles[styleName] = {\n    get() {\n      const builder = createBuilder(\n        this,\n        createStyler(style.open, style.close, this[STYLER]),\n        this[IS_EMPTY]\n      );\n      Object.defineProperty(this, styleName, { value: builder });\n      return builder;\n    }\n  };\n}\nstyles.visible = {\n  get() {\n    const builder = createBuilder(this, this[STYLER], true);\n    Object.defineProperty(this, \"visible\", { value: builder });\n    return builder;\n  }\n};\nconst getModelAnsi = (model, level, type2, ...arguments_) => {\n  if (model === \"rgb\") {\n    if (level === \"ansi16m\") {\n      return ansiStyles[type2].ansi16m(...arguments_);\n    }\n    if (level === \"ansi256\") {\n      return ansiStyles[type2].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n    }\n    return ansiStyles[type2].ansi(ansiStyles.rgbToAnsi(...arguments_));\n  }\n  if (model === \"hex\") {\n    return getModelAnsi(\"rgb\", level, type2, ...ansiStyles.hexToRgb(...arguments_));\n  }\n  return ansiStyles[type2][model](...arguments_);\n};\nconst usedModels = [\"rgb\", \"hex\", \"ansi256\"];\nfor (const model of usedModels) {\n  styles[model] = {\n    get() {\n      const { level } = this;\n      return function(...arguments_) {\n        const styler = createStyler(\n          getModelAnsi(model, levelMapping[level], \"color\", ...arguments_),\n          ansiStyles.color.close,\n          this[STYLER]\n        );\n        return createBuilder(this, styler, this[IS_EMPTY]);\n      };\n    }\n  };\n  const bgModel = \"bg\" + model[0].toUpperCase() + model.slice(1);\n  styles[bgModel] = {\n    get() {\n      const { level } = this;\n      return function(...arguments_) {\n        const styler = createStyler(\n          getModelAnsi(model, levelMapping[level], \"bgColor\", ...arguments_),\n          ansiStyles.bgColor.close,\n          this[STYLER]\n        );\n        return createBuilder(this, styler, this[IS_EMPTY]);\n      };\n    }\n  };\n}\nconst proto = Object.defineProperties(() => {\n}, {\n  ...styles,\n  level: {\n    enumerable: true,\n    get() {\n      return this[GENERATOR].level;\n    },\n    set(level) {\n      this[GENERATOR].level = level;\n    }\n  }\n});\nconst createStyler = (open, close, parent) => {\n  let openAll;\n  let closeAll;\n  if (parent === void 0) {\n    openAll = open;\n    closeAll = close;\n  } else {\n    openAll = parent.openAll + open;\n    closeAll = close + parent.closeAll;\n  }\n  return {\n    open,\n    close,\n    openAll,\n    closeAll,\n    parent\n  };\n};\nconst createBuilder = (self2, _styler, _isEmpty) => {\n  const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? \"\" + arguments_[0] : arguments_.join(\" \"));\n  Object.setPrototypeOf(builder, proto);\n  builder[GENERATOR] = self2;\n  builder[STYLER] = _styler;\n  builder[IS_EMPTY] = _isEmpty;\n  return builder;\n};\nconst applyStyle = (self2, string) => {\n  if (self2.level <= 0 || !string) {\n    return self2[IS_EMPTY] ? \"\" : string;\n  }\n  let styler = self2[STYLER];\n  if (styler === void 0) {\n    return string;\n  }\n  const { openAll, closeAll } = styler;\n  if (string.includes(\"\\x1B\")) {\n    while (styler !== void 0) {\n      string = stringReplaceAll(string, styler.close, styler.open);\n      styler = styler.parent;\n    }\n  }\n  const lfIndex = string.indexOf(\"\\n\");\n  if (lfIndex !== -1) {\n    string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n  }\n  return openAll + string + closeAll;\n};\nObject.defineProperties(createChalk.prototype, styles);\nconst chalk = createChalk();\ncreateChalk({ level: stderrColor ? stderrColor.level : 0 });\nconst c = chalk;\nconst colors = {\n  blue: c.blue,\n  green: c.green,\n  red: c.red,\n  yellow: c.yellow\n};\n({\n  blue: c.bgBlue,\n  green: c.bgGreen,\n  red: c.bgRed,\n  yellow: c.bgYellow\n});\nclass Color {\n  static {\n    this.Fixed = Fixed;\n  }\n}\nfunction Fixed(n) {\n  return c.ansi256(n);\n}\nclass Config {\n  constructor(cross_gap, label_attach, compact, underlines, multiline_arrows, color, tab_width, char_set) {\n    this.cross_gap = cross_gap;\n    this.label_attach = label_attach;\n    this.compact = compact;\n    this.underlines = underlines;\n    this.multiline_arrows = multiline_arrows;\n    this.color = color;\n    this.tab_width = tab_width;\n    this.char_set = char_set;\n  }\n  static default() {\n    return new Config(\n      true,\n      \"Middle\",\n      false,\n      true,\n      true,\n      true,\n      4,\n      \"Unicode\"\n      /* Unicode */\n    );\n  }\n  /// When label lines cross one-another, should there be a gap?\n  ///\n  /// The alternative to this is to insert crossing characters. However, these interact poorly with label colours.\n  ///\n  /// If unspecified, this defaults to [`false`].\n  with_cross_gap(cross_gap) {\n    this.cross_gap = cross_gap;\n    return this;\n  }\n  /// Where should inline labels attach to their spans?\n  ///\n  /// If unspecified, this defaults to [`LabelAttach.Middle`].\n  with_label_attach(label_attach) {\n    this.label_attach = label_attach;\n    return this;\n  }\n  /// Should the report remove gaps to minimise used space?\n  ///\n  /// If unspecified, this defaults to [`false`].\n  with_compact(compact) {\n    this.compact = compact;\n    return this;\n  }\n  /// Should underlines be used for label span where possible?\n  ///\n  /// If unspecified, this defaults to [`true`].\n  with_underlines(underlines) {\n    this.underlines = underlines;\n    return this;\n  }\n  /// Should arrows be used to point to the bounds of multi-line spans?\n  ///\n  /// If unspecified, this defaults to [`true`].\n  with_multiline_arrows(multiline_arrows) {\n    this.multiline_arrows = multiline_arrows;\n    return this;\n  }\n  /// Should colored output should be enabled?\n  ///\n  /// If unspecified, this defaults to [`true`].\n  with_color(color) {\n    this.color = color;\n    return this;\n  }\n  /// How many characters width should tab characters be?\n  ///\n  /// If unspecified, this defaults to `4`.\n  with_tab_width(tab_width) {\n    this.tab_width = tab_width;\n    return this;\n  }\n  /// What character set should be used to display dynamic elements such as boxes and arrows?\n  ///\n  /// If unspecified, this defaults to [`CharSet.Unicode`].\n  with_char_set(char_set) {\n    this.char_set = char_set;\n    return this;\n  }\n  error_color() {\n    return some(colors.red).filter(() => this.color);\n  }\n  warning_color() {\n    return some(colors.yellow).filter(() => this.color);\n  }\n  advice_color() {\n    return some(Fixed(147)).filter(() => this.color);\n  }\n  margin_color() {\n    return some(Fixed(246)).filter(() => this.color);\n  }\n  unimportant_color() {\n    return some(Fixed(249)).filter(() => this.color);\n  }\n  note_color() {\n    return some(Fixed(115)).filter(() => this.color);\n  }\n  // Find the character that should be drawn and the number of times it should be drawn for each char\n  char_width(c2, col) {\n    if (c2 === \"\t\") {\n      let tab_end = (col / this.tab_width + 1) * this.tab_width;\n      return [new Display(\" \"), tab_end - col];\n    }\n    if (c2.match(/[\\s]/))\n      return [new Display(\" \"), 1];\n    return [new Display(c2), 1];\n  }\n}\nvar LabelAttach = /* @__PURE__ */ ((LabelAttach2) => {\n  LabelAttach2[\"Start\"] = \"Start\";\n  LabelAttach2[\"Middle\"] = \"Middle\";\n  LabelAttach2[\"End\"] = \"End\";\n  return LabelAttach2;\n})(LabelAttach || {});\nvar CharSet = /* @__PURE__ */ ((CharSet2) => {\n  CharSet2[\"Unicode\"] = \"Unicode\";\n  CharSet2[\"Ascii\"] = \"Ascii\";\n  return CharSet2;\n})(CharSet || {});\nclass Label {\n  /// Create a new [`Label`].\n  constructor(span) {\n    this.span = span;\n    this.msg = none();\n    this.color = none();\n    this.order = 0;\n    this.priority = 0;\n  }\n  /// Give this label a message.\n  with_message(msg) {\n    this.msg = some(msg);\n    return this;\n  }\n  /// Give this label a highlight colour.\n  with_color(color) {\n    this.color = some(color);\n    return this;\n  }\n  /// Specify the order of this label relative to other labels.\n  ///\n  /// Lower values correspond to this label having an earlier order.\n  ///\n  /// If unspecified, labels default to an order of `0`.\n  ///\n  /// When labels are displayed after a line the crate needs to decide which labels should be displayed first. By\n  /// Default, the orders labels based on where their associated line meets the text (see [`LabelAttach`]).\n  /// Additionally, multi-line labels are ordered before inline labels. You can this this function to override this\n  /// behaviour.\n  with_order(order) {\n    this.order = order;\n    return this;\n  }\n  /// Specify the priority of this label relative to other labels.\n  ///\n  /// Higher values correspond to this label having a higher priority.\n  ///\n  /// If unspecified, labels default to a priority of `0`.\n  ///\n  /// Label spans can overlap. When this happens, the crate needs to decide which labels to prioritise for various\n  /// purposes such as highlighting. By default, spans with a smaller length get a higher priority. You can this this\n  /// function to override this behaviour.\n  with_priority(priority) {\n    this.priority = priority;\n    return this;\n  }\n  last_offset() {\n    return this.span.end.saturating_sub(1).max(this.span.start);\n  }\n  static {\n    this.from = Label.new;\n  }\n  static new(obj) {\n    return new Label(Range.from(obj));\n  }\n  static is(other) {\n    return other instanceof Label;\n  }\n}\nvar assert$1 = { exports: {} };\nvar errors = {};\nvar util = {};\nvar types = {};\nvar shams$1 = function hasSymbols() {\n  if (typeof Symbol !== \"function\" || typeof Object.getOwnPropertySymbols !== \"function\") {\n    return false;\n  }\n  if (typeof Symbol.iterator === \"symbol\") {\n    return true;\n  }\n  var obj = {};\n  var sym = Symbol(\"test\");\n  var symObj = Object(sym);\n  if (typeof sym === \"string\") {\n    return false;\n  }\n  if (Object.prototype.toString.call(sym) !== \"[object Symbol]\") {\n    return false;\n  }\n  if (Object.prototype.toString.call(symObj) !== \"[object Symbol]\") {\n    return false;\n  }\n  var symVal = 42;\n  obj[sym] = symVal;\n  for (sym in obj) {\n    return false;\n  }\n  if (typeof Object.keys === \"function\" && Object.keys(obj).length !== 0) {\n    return false;\n  }\n  if (typeof Object.getOwnPropertyNames === \"function\" && Object.getOwnPropertyNames(obj).length !== 0) {\n    return false;\n  }\n  var syms = Object.getOwnPropertySymbols(obj);\n  if (syms.length !== 1 || syms[0] !== sym) {\n    return false;\n  }\n  if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {\n    return false;\n  }\n  if (typeof Object.getOwnPropertyDescriptor === \"function\") {\n    var descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n    if (descriptor.value !== symVal || descriptor.enumerable !== true) {\n      return false;\n    }\n  }\n  return true;\n};\nvar hasSymbols$1 = shams$1;\nvar shams = function hasToStringTagShams() {\n  return hasSymbols$1() && !!Symbol.toStringTag;\n};\nvar hasSymbols2;\nvar hasRequiredHasSymbols;\nfunction requireHasSymbols() {\n  if (hasRequiredHasSymbols)\n    return hasSymbols2;\n  hasRequiredHasSymbols = 1;\n  var origSymbol = typeof Symbol !== \"undefined\" && Symbol;\n  var hasSymbolSham = shams$1;\n  hasSymbols2 = function hasNativeSymbols() {\n    if (typeof origSymbol !== \"function\") {\n      return false;\n    }\n    if (typeof Symbol !== \"function\") {\n      return false;\n    }\n    if (typeof origSymbol(\"foo\") !== \"symbol\") {\n      return false;\n    }\n    if (typeof Symbol(\"bar\") !== \"symbol\") {\n      return false;\n    }\n    return hasSymbolSham();\n  };\n  return hasSymbols2;\n}\nvar implementation$3;\nvar hasRequiredImplementation$3;\nfunction requireImplementation$3() {\n  if (hasRequiredImplementation$3)\n    return implementation$3;\n  hasRequiredImplementation$3 = 1;\n  var ERROR_MESSAGE = \"Function.prototype.bind called on incompatible \";\n  var slice = Array.prototype.slice;\n  var toStr2 = Object.prototype.toString;\n  var funcType = \"[object Function]\";\n  implementation$3 = function bind(that) {\n    var target = this;\n    if (typeof target !== \"function\" || toStr2.call(target) !== funcType) {\n      throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n    var bound;\n    var binder = function() {\n      if (this instanceof bound) {\n        var result = target.apply(\n          this,\n          args.concat(slice.call(arguments))\n        );\n        if (Object(result) === result) {\n          return result;\n        }\n        return this;\n      } else {\n        return target.apply(\n          that,\n          args.concat(slice.call(arguments))\n        );\n      }\n    };\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n      boundArgs.push(\"$\" + i);\n    }\n    bound = Function(\"binder\", \"return function (\" + boundArgs.join(\",\") + \"){ return binder.apply(this,arguments); }\")(binder);\n    if (target.prototype) {\n      var Empty = function Empty2() {\n      };\n      Empty.prototype = target.prototype;\n      bound.prototype = new Empty();\n      Empty.prototype = null;\n    }\n    return bound;\n  };\n  return implementation$3;\n}\nvar functionBind;\nvar hasRequiredFunctionBind;\nfunction requireFunctionBind() {\n  if (hasRequiredFunctionBind)\n    return functionBind;\n  hasRequiredFunctionBind = 1;\n  var implementation2 = requireImplementation$3();\n  functionBind = Function.prototype.bind || implementation2;\n  return functionBind;\n}\nvar src;\nvar hasRequiredSrc;\nfunction requireSrc() {\n  if (hasRequiredSrc)\n    return src;\n  hasRequiredSrc = 1;\n  var bind = requireFunctionBind();\n  src = bind.call(Function.call, Object.prototype.hasOwnProperty);\n  return src;\n}\nvar getIntrinsic;\nvar hasRequiredGetIntrinsic;\nfunction requireGetIntrinsic() {\n  if (hasRequiredGetIntrinsic)\n    return getIntrinsic;\n  hasRequiredGetIntrinsic = 1;\n  var undefined$1;\n  var $SyntaxError = SyntaxError;\n  var $Function = Function;\n  var $TypeError = TypeError;\n  var getEvalledConstructor = function(expressionSyntax) {\n    try {\n      return $Function('\"use strict\"; return (' + expressionSyntax + \").constructor;\")();\n    } catch (e) {\n    }\n  };\n  var $gOPD2 = Object.getOwnPropertyDescriptor;\n  if ($gOPD2) {\n    try {\n      $gOPD2({}, \"\");\n    } catch (e) {\n      $gOPD2 = null;\n    }\n  }\n  var throwTypeError = function() {\n    throw new $TypeError();\n  };\n  var ThrowTypeError = $gOPD2 ? function() {\n    try {\n      arguments.callee;\n      return throwTypeError;\n    } catch (calleeThrows) {\n      try {\n        return $gOPD2(arguments, \"callee\").get;\n      } catch (gOPDthrows) {\n        return throwTypeError;\n      }\n    }\n  }() : throwTypeError;\n  var hasSymbols3 = requireHasSymbols()();\n  var getProto2 = Object.getPrototypeOf || function(x) {\n    return x.__proto__;\n  };\n  var needsEval = {};\n  var TypedArray = typeof Uint8Array === \"undefined\" ? undefined$1 : getProto2(Uint8Array);\n  var INTRINSICS = {\n    \"%AggregateError%\": typeof AggregateError === \"undefined\" ? undefined$1 : AggregateError,\n    \"%Array%\": Array,\n    \"%ArrayBuffer%\": typeof ArrayBuffer === \"undefined\" ? undefined$1 : ArrayBuffer,\n    \"%ArrayIteratorPrototype%\": hasSymbols3 ? getProto2([][Symbol.iterator]()) : undefined$1,\n    \"%AsyncFromSyncIteratorPrototype%\": undefined$1,\n    \"%AsyncFunction%\": needsEval,\n    \"%AsyncGenerator%\": needsEval,\n    \"%AsyncGeneratorFunction%\": needsEval,\n    \"%AsyncIteratorPrototype%\": needsEval,\n    \"%Atomics%\": typeof Atomics === \"undefined\" ? undefined$1 : Atomics,\n    \"%BigInt%\": typeof BigInt === \"undefined\" ? undefined$1 : BigInt,\n    \"%BigInt64Array%\": typeof BigInt64Array === \"undefined\" ? undefined$1 : BigInt64Array,\n    \"%BigUint64Array%\": typeof BigUint64Array === \"undefined\" ? undefined$1 : BigUint64Array,\n    \"%Boolean%\": Boolean,\n    \"%DataView%\": typeof DataView === \"undefined\" ? undefined$1 : DataView,\n    \"%Date%\": Date,\n    \"%decodeURI%\": decodeURI,\n    \"%decodeURIComponent%\": decodeURIComponent,\n    \"%encodeURI%\": encodeURI,\n    \"%encodeURIComponent%\": encodeURIComponent,\n    \"%Error%\": Error,\n    \"%eval%\": eval,\n    // eslint-disable-line no-eval\n    \"%EvalError%\": EvalError,\n    \"%Float32Array%\": typeof Float32Array === \"undefined\" ? undefined$1 : Float32Array,\n    \"%Float64Array%\": typeof Float64Array === \"undefined\" ? undefined$1 : Float64Array,\n    \"%FinalizationRegistry%\": typeof FinalizationRegistry === \"undefined\" ? undefined$1 : FinalizationRegistry,\n    \"%Function%\": $Function,\n    \"%GeneratorFunction%\": needsEval,\n    \"%Int8Array%\": typeof Int8Array === \"undefined\" ? undefined$1 : Int8Array,\n    \"%Int16Array%\": typeof Int16Array === \"undefined\" ? undefined$1 : Int16Array,\n    \"%Int32Array%\": typeof Int32Array === \"undefined\" ? undefined$1 : Int32Array,\n    \"%isFinite%\": isFinite,\n    \"%isNaN%\": isNaN,\n    \"%IteratorPrototype%\": hasSymbols3 ? getProto2(getProto2([][Symbol.iterator]())) : undefined$1,\n    \"%JSON%\": typeof JSON === \"object\" ? JSON : undefined$1,\n    \"%Map%\": typeof Map === \"undefined\" ? undefined$1 : Map,\n    \"%MapIteratorPrototype%\": typeof Map === \"undefined\" || !hasSymbols3 ? undefined$1 : getProto2((/* @__PURE__ */ new Map())[Symbol.iterator]()),\n    \"%Math%\": Math,\n    \"%Number%\": Number,\n    \"%Object%\": Object,\n    \"%parseFloat%\": parseFloat,\n    \"%parseInt%\": parseInt,\n    \"%Promise%\": typeof Promise === \"undefined\" ? undefined$1 : Promise,\n    \"%Proxy%\": typeof Proxy === \"undefined\" ? undefined$1 : Proxy,\n    \"%RangeError%\": RangeError,\n    \"%ReferenceError%\": ReferenceError,\n    \"%Reflect%\": typeof Reflect === \"undefined\" ? undefined$1 : Reflect,\n    \"%RegExp%\": RegExp,\n    \"%Set%\": typeof Set === \"undefined\" ? undefined$1 : Set,\n    \"%SetIteratorPrototype%\": typeof Set === \"undefined\" || !hasSymbols3 ? undefined$1 : getProto2((/* @__PURE__ */ new Set())[Symbol.iterator]()),\n    \"%SharedArrayBuffer%\": typeof SharedArrayBuffer === \"undefined\" ? undefined$1 : SharedArrayBuffer,\n    \"%String%\": String,\n    \"%StringIteratorPrototype%\": hasSymbols3 ? getProto2(\"\"[Symbol.iterator]()) : undefined$1,\n    \"%Symbol%\": hasSymbols3 ? Symbol : undefined$1,\n    \"%SyntaxError%\": $SyntaxError,\n    \"%ThrowTypeError%\": ThrowTypeError,\n    \"%TypedArray%\": TypedArray,\n    \"%TypeError%\": $TypeError,\n    \"%Uint8Array%\": typeof Uint8Array === \"undefined\" ? undefined$1 : Uint8Array,\n    \"%Uint8ClampedArray%\": typeof Uint8ClampedArray === \"undefined\" ? undefined$1 : Uint8ClampedArray,\n    \"%Uint16Array%\": typeof Uint16Array === \"undefined\" ? undefined$1 : Uint16Array,\n    \"%Uint32Array%\": typeof Uint32Array === \"undefined\" ? undefined$1 : Uint32Array,\n    \"%URIError%\": URIError,\n    \"%WeakMap%\": typeof WeakMap === \"undefined\" ? undefined$1 : WeakMap,\n    \"%WeakRef%\": typeof WeakRef === \"undefined\" ? undefined$1 : WeakRef,\n    \"%WeakSet%\": typeof WeakSet === \"undefined\" ? undefined$1 : WeakSet\n  };\n  try {\n    null.error;\n  } catch (e) {\n    var errorProto = getProto2(getProto2(e));\n    INTRINSICS[\"%Error.prototype%\"] = errorProto;\n  }\n  var doEval = function doEval2(name) {\n    var value;\n    if (name === \"%AsyncFunction%\") {\n      value = getEvalledConstructor(\"async function () {}\");\n    } else if (name === \"%GeneratorFunction%\") {\n      value = getEvalledConstructor(\"function* () {}\");\n    } else if (name === \"%AsyncGeneratorFunction%\") {\n      value = getEvalledConstructor(\"async function* () {}\");\n    } else if (name === \"%AsyncGenerator%\") {\n      var fn = doEval2(\"%AsyncGeneratorFunction%\");\n      if (fn) {\n        value = fn.prototype;\n      }\n    } else if (name === \"%AsyncIteratorPrototype%\") {\n      var gen = doEval2(\"%AsyncGenerator%\");\n      if (gen) {\n        value = getProto2(gen.prototype);\n      }\n    }\n    INTRINSICS[name] = value;\n    return value;\n  };\n  var LEGACY_ALIASES = {\n    \"%ArrayBufferPrototype%\": [\"ArrayBuffer\", \"prototype\"],\n    \"%ArrayPrototype%\": [\"Array\", \"prototype\"],\n    \"%ArrayProto_entries%\": [\"Array\", \"prototype\", \"entries\"],\n    \"%ArrayProto_forEach%\": [\"Array\", \"prototype\", \"forEach\"],\n    \"%ArrayProto_keys%\": [\"Array\", \"prototype\", \"keys\"],\n    \"%ArrayProto_values%\": [\"Array\", \"prototype\", \"values\"],\n    \"%AsyncFunctionPrototype%\": [\"AsyncFunction\", \"prototype\"],\n    \"%AsyncGenerator%\": [\"AsyncGeneratorFunction\", \"prototype\"],\n    \"%AsyncGeneratorPrototype%\": [\"AsyncGeneratorFunction\", \"prototype\", \"prototype\"],\n    \"%BooleanPrototype%\": [\"Boolean\", \"prototype\"],\n    \"%DataViewPrototype%\": [\"DataView\", \"prototype\"],\n    \"%DatePrototype%\": [\"Date\", \"prototype\"],\n    \"%ErrorPrototype%\": [\"Error\", \"prototype\"],\n    \"%EvalErrorPrototype%\": [\"EvalError\", \"prototype\"],\n    \"%Float32ArrayPrototype%\": [\"Float32Array\", \"prototype\"],\n    \"%Float64ArrayPrototype%\": [\"Float64Array\", \"prototype\"],\n    \"%FunctionPrototype%\": [\"Function\", \"prototype\"],\n    \"%Generator%\": [\"GeneratorFunction\", \"prototype\"],\n    \"%GeneratorPrototype%\": [\"GeneratorFunction\", \"prototype\", \"prototype\"],\n    \"%Int8ArrayPrototype%\": [\"Int8Array\", \"prototype\"],\n    \"%Int16ArrayPrototype%\": [\"Int16Array\", \"prototype\"],\n    \"%Int32ArrayPrototype%\": [\"Int32Array\", \"prototype\"],\n    \"%JSONParse%\": [\"JSON\", \"parse\"],\n    \"%JSONStringify%\": [\"JSON\", \"stringify\"],\n    \"%MapPrototype%\": [\"Map\", \"prototype\"],\n    \"%NumberPrototype%\": [\"Number\", \"prototype\"],\n    \"%ObjectPrototype%\": [\"Object\", \"prototype\"],\n    \"%ObjProto_toString%\": [\"Object\", \"prototype\", \"toString\"],\n    \"%ObjProto_valueOf%\": [\"Object\", \"prototype\", \"valueOf\"],\n    \"%PromisePrototype%\": [\"Promise\", \"prototype\"],\n    \"%PromiseProto_then%\": [\"Promise\", \"prototype\", \"then\"],\n    \"%Promise_all%\": [\"Promise\", \"all\"],\n    \"%Promise_reject%\": [\"Promise\", \"reject\"],\n    \"%Promise_resolve%\": [\"Promise\", \"resolve\"],\n    \"%RangeErrorPrototype%\": [\"RangeError\", \"prototype\"],\n    \"%ReferenceErrorPrototype%\": [\"ReferenceError\", \"prototype\"],\n    \"%RegExpPrototype%\": [\"RegExp\", \"prototype\"],\n    \"%SetPrototype%\": [\"Set\", \"prototype\"],\n    \"%SharedArrayBufferPrototype%\": [\"SharedArrayBuffer\", \"prototype\"],\n    \"%StringPrototype%\": [\"String\", \"prototype\"],\n    \"%SymbolPrototype%\": [\"Symbol\", \"prototype\"],\n    \"%SyntaxErrorPrototype%\": [\"SyntaxError\", \"prototype\"],\n    \"%TypedArrayPrototype%\": [\"TypedArray\", \"prototype\"],\n    \"%TypeErrorPrototype%\": [\"TypeError\", \"prototype\"],\n    \"%Uint8ArrayPrototype%\": [\"Uint8Array\", \"prototype\"],\n    \"%Uint8ClampedArrayPrototype%\": [\"Uint8ClampedArray\", \"prototype\"],\n    \"%Uint16ArrayPrototype%\": [\"Uint16Array\", \"prototype\"],\n    \"%Uint32ArrayPrototype%\": [\"Uint32Array\", \"prototype\"],\n    \"%URIErrorPrototype%\": [\"URIError\", \"prototype\"],\n    \"%WeakMapPrototype%\": [\"WeakMap\", \"prototype\"],\n    \"%WeakSetPrototype%\": [\"WeakSet\", \"prototype\"]\n  };\n  var bind = requireFunctionBind();\n  var hasOwn = requireSrc();\n  var $concat = bind.call(Function.call, Array.prototype.concat);\n  var $spliceApply = bind.call(Function.apply, Array.prototype.splice);\n  var $replace = bind.call(Function.call, String.prototype.replace);\n  var $strSlice = bind.call(Function.call, String.prototype.slice);\n  var $exec = bind.call(Function.call, RegExp.prototype.exec);\n  var rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\n  var reEscapeChar = /\\\\(\\\\)?/g;\n  var stringToPath = function stringToPath2(string) {\n    var first = $strSlice(string, 0, 1);\n    var last = $strSlice(string, -1);\n    if (first === \"%\" && last !== \"%\") {\n      throw new $SyntaxError(\"invalid intrinsic syntax, expected closing `%`\");\n    } else if (last === \"%\" && first !== \"%\") {\n      throw new $SyntaxError(\"invalid intrinsic syntax, expected opening `%`\");\n    }\n    var result = [];\n    $replace(string, rePropName, function(match2, number, quote, subString) {\n      result[result.length] = quote ? $replace(subString, reEscapeChar, \"$1\") : number || match2;\n    });\n    return result;\n  };\n  var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {\n    var intrinsicName = name;\n    var alias;\n    if (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n      alias = LEGACY_ALIASES[intrinsicName];\n      intrinsicName = \"%\" + alias[0] + \"%\";\n    }\n    if (hasOwn(INTRINSICS, intrinsicName)) {\n      var value = INTRINSICS[intrinsicName];\n      if (value === needsEval) {\n        value = doEval(intrinsicName);\n      }\n      if (typeof value === \"undefined\" && !allowMissing) {\n        throw new $TypeError(\"intrinsic \" + name + \" exists, but is not available. Please file an issue!\");\n      }\n      return {\n        alias,\n        name: intrinsicName,\n        value\n      };\n    }\n    throw new $SyntaxError(\"intrinsic \" + name + \" does not exist!\");\n  };\n  getIntrinsic = function GetIntrinsic2(name, allowMissing) {\n    if (typeof name !== \"string\" || name.length === 0) {\n      throw new $TypeError(\"intrinsic name must be a non-empty string\");\n    }\n    if (arguments.length > 1 && typeof allowMissing !== \"boolean\") {\n      throw new $TypeError('\"allowMissing\" argument must be a boolean');\n    }\n    if ($exec(/^%?[^%]*%?$/, name) === null) {\n      throw new $SyntaxError(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");\n    }\n    var parts = stringToPath(name);\n    var intrinsicBaseName = parts.length > 0 ? parts[0] : \"\";\n    var intrinsic = getBaseIntrinsic(\"%\" + intrinsicBaseName + \"%\", allowMissing);\n    var intrinsicRealName = intrinsic.name;\n    var value = intrinsic.value;\n    var skipFurtherCaching = false;\n    var alias = intrinsic.alias;\n    if (alias) {\n      intrinsicBaseName = alias[0];\n      $spliceApply(parts, $concat([0, 1], alias));\n    }\n    for (var i = 1, isOwn = true; i < parts.length; i += 1) {\n      var part = parts[i];\n      var first = $strSlice(part, 0, 1);\n      var last = $strSlice(part, -1);\n      if ((first === '\"' || first === \"'\" || first === \"`\" || (last === '\"' || last === \"'\" || last === \"`\")) && first !== last) {\n        throw new $SyntaxError(\"property names with quotes must have matching quotes\");\n      }\n      if (part === \"constructor\" || !isOwn) {\n        skipFurtherCaching = true;\n      }\n      intrinsicBaseName += \".\" + part;\n      intrinsicRealName = \"%\" + intrinsicBaseName + \"%\";\n      if (hasOwn(INTRINSICS, intrinsicRealName)) {\n        value = INTRINSICS[intrinsicRealName];\n      } else if (value != null) {\n        if (!(part in value)) {\n          if (!allowMissing) {\n            throw new $TypeError(\"base intrinsic for \" + name + \" exists, but the property is not available.\");\n          }\n          return void 0;\n        }\n        if ($gOPD2 && i + 1 >= parts.length) {\n          var desc = $gOPD2(value, part);\n          isOwn = !!desc;\n          if (isOwn && \"get\" in desc && !(\"originalValue\" in desc.get)) {\n            value = desc.get;\n          } else {\n            value = value[part];\n          }\n        } else {\n          isOwn = hasOwn(value, part);\n          value = value[part];\n        }\n        if (isOwn && !skipFurtherCaching) {\n          INTRINSICS[intrinsicRealName] = value;\n        }\n      }\n    }\n    return value;\n  };\n  return getIntrinsic;\n}\nvar callBind$1 = { exports: {} };\nvar hasRequiredCallBind;\nfunction requireCallBind() {\n  if (hasRequiredCallBind)\n    return callBind$1.exports;\n  hasRequiredCallBind = 1;\n  (function(module) {\n    var bind = requireFunctionBind();\n    var GetIntrinsic2 = requireGetIntrinsic();\n    var $apply = GetIntrinsic2(\"%Function.prototype.apply%\");\n    var $call = GetIntrinsic2(\"%Function.prototype.call%\");\n    var $reflectApply = GetIntrinsic2(\"%Reflect.apply%\", true) || bind.call($call, $apply);\n    var $gOPD2 = GetIntrinsic2(\"%Object.getOwnPropertyDescriptor%\", true);\n    var $defineProperty = GetIntrinsic2(\"%Object.defineProperty%\", true);\n    var $max = GetIntrinsic2(\"%Math.max%\");\n    if ($defineProperty) {\n      try {\n        $defineProperty({}, \"a\", { value: 1 });\n      } catch (e) {\n        $defineProperty = null;\n      }\n    }\n    module.exports = function callBind2(originalFunction) {\n      var func = $reflectApply(bind, $call, arguments);\n      if ($gOPD2 && $defineProperty) {\n        var desc = $gOPD2(func, \"length\");\n        if (desc.configurable) {\n          $defineProperty(\n            func,\n            \"length\",\n            { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n          );\n        }\n      }\n      return func;\n    };\n    var applyBind = function applyBind2() {\n      return $reflectApply(bind, $apply, arguments);\n    };\n    if ($defineProperty) {\n      $defineProperty(module.exports, \"apply\", { value: applyBind });\n    } else {\n      module.exports.apply = applyBind;\n    }\n  })(callBind$1);\n  return callBind$1.exports;\n}\nvar GetIntrinsic$1 = requireGetIntrinsic();\nvar callBind = requireCallBind();\nvar $indexOf$1 = callBind(GetIntrinsic$1(\"String.prototype.indexOf\"));\nvar callBound$3 = function callBoundIntrinsic(name, allowMissing) {\n  var intrinsic = GetIntrinsic$1(name, !!allowMissing);\n  if (typeof intrinsic === \"function\" && $indexOf$1(name, \".prototype.\") > -1) {\n    return callBind(intrinsic);\n  }\n  return intrinsic;\n};\nvar hasToStringTag$4 = shams();\nvar callBound$2 = callBound$3;\nvar $toString$2 = callBound$2(\"Object.prototype.toString\");\nvar isStandardArguments = function isArguments(value) {\n  if (hasToStringTag$4 && value && typeof value === \"object\" && Symbol.toStringTag in value) {\n    return false;\n  }\n  return $toString$2(value) === \"[object Arguments]\";\n};\nvar isLegacyArguments = function isArguments2(value) {\n  if (isStandardArguments(value)) {\n    return true;\n  }\n  return value !== null && typeof value === \"object\" && typeof value.length === \"number\" && value.length >= 0 && $toString$2(value) !== \"[object Array]\" && $toString$2(value.callee) === \"[object Function]\";\n};\nvar supportsStandardArguments = function() {\n  return isStandardArguments(arguments);\n}();\nisStandardArguments.isLegacyArguments = isLegacyArguments;\nvar isArguments$1 = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\nvar toStr$2 = Object.prototype.toString;\nvar fnToStr$1 = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag$3 = shams();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function() {\n  if (!hasToStringTag$3) {\n    return false;\n  }\n  try {\n    return Function(\"return function*() {}\")();\n  } catch (e) {\n  }\n};\nvar GeneratorFunction;\nvar isGeneratorFunction = function isGeneratorFunction2(fn) {\n  if (typeof fn !== \"function\") {\n    return false;\n  }\n  if (isFnRegex.test(fnToStr$1.call(fn))) {\n    return true;\n  }\n  if (!hasToStringTag$3) {\n    var str = toStr$2.call(fn);\n    return str === \"[object GeneratorFunction]\";\n  }\n  if (!getProto) {\n    return false;\n  }\n  if (typeof GeneratorFunction === \"undefined\") {\n    var generatorFunc = getGeneratorFunc();\n    GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n  }\n  return getProto(fn) === GeneratorFunction;\n};\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === \"object\" && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === \"function\" && typeof Object.defineProperty === \"function\") {\n  try {\n    badArrayLike = Object.defineProperty({}, \"length\", {\n      get: function() {\n        throw isCallableMarker;\n      }\n    });\n    isCallableMarker = {};\n    reflectApply(function() {\n      throw 42;\n    }, null, badArrayLike);\n  } catch (_) {\n    if (_ !== isCallableMarker) {\n      reflectApply = null;\n    }\n  }\n} else {\n  reflectApply = null;\n}\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n  try {\n    var fnStr = fnToStr.call(value);\n    return constructorRegex.test(fnStr);\n  } catch (e) {\n    return false;\n  }\n};\nvar tryFunctionObject = function tryFunctionToStr(value) {\n  try {\n    if (isES6ClassFn(value)) {\n      return false;\n    }\n    fnToStr.call(value);\n    return true;\n  } catch (e) {\n    return false;\n  }\n};\nvar toStr$1 = Object.prototype.toString;\nvar objectClass = \"[object Object]\";\nvar fnClass = \"[object Function]\";\nvar genClass = \"[object GeneratorFunction]\";\nvar ddaClass = \"[object HTMLAllCollection]\";\nvar ddaClass2 = \"[object HTML document.all class]\";\nvar ddaClass3 = \"[object HTMLCollection]\";\nvar hasToStringTag$2 = typeof Symbol === \"function\" && !!Symbol.toStringTag;\nvar isIE68 = !(0 in [,]);\nvar isDDA = function isDocumentDotAll() {\n  return false;\n};\nif (typeof document === \"object\") {\n  var all = document.all;\n  if (toStr$1.call(all) === toStr$1.call(document.all)) {\n    isDDA = function isDocumentDotAll2(value) {\n      if ((isIE68 || !value) && (typeof value === \"undefined\" || typeof value === \"object\")) {\n        try {\n          var str = toStr$1.call(value);\n          return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value(\"\") == null;\n        } catch (e) {\n        }\n      }\n      return false;\n    };\n  }\n}\nvar isCallable$1 = reflectApply ? function isCallable(value) {\n  if (isDDA(value)) {\n    return true;\n  }\n  if (!value) {\n    return false;\n  }\n  if (typeof value !== \"function\" && typeof value !== \"object\") {\n    return false;\n  }\n  try {\n    reflectApply(value, null, badArrayLike);\n  } catch (e) {\n    if (e !== isCallableMarker) {\n      return false;\n    }\n  }\n  return !isES6ClassFn(value) && tryFunctionObject(value);\n} : function isCallable2(value) {\n  if (isDDA(value)) {\n    return true;\n  }\n  if (!value) {\n    return false;\n  }\n  if (typeof value !== \"function\" && typeof value !== \"object\") {\n    return false;\n  }\n  if (hasToStringTag$2) {\n    return tryFunctionObject(value);\n  }\n  if (isES6ClassFn(value)) {\n    return false;\n  }\n  var strClass = toStr$1.call(value);\n  if (strClass !== fnClass && strClass !== genClass && !/^\\[object HTML/.test(strClass)) {\n    return false;\n  }\n  return tryFunctionObject(value);\n};\nvar isCallable3 = isCallable$1;\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar forEachArray = function forEachArray2(array, iterator, receiver) {\n  for (var i = 0, len = array.length; i < len; i++) {\n    if (hasOwnProperty.call(array, i)) {\n      if (receiver == null) {\n        iterator(array[i], i, array);\n      } else {\n        iterator.call(receiver, array[i], i, array);\n      }\n    }\n  }\n};\nvar forEachString = function forEachString2(string, iterator, receiver) {\n  for (var i = 0, len = string.length; i < len; i++) {\n    if (receiver == null) {\n      iterator(string.charAt(i), i, string);\n    } else {\n      iterator.call(receiver, string.charAt(i), i, string);\n    }\n  }\n};\nvar forEachObject = function forEachObject2(object, iterator, receiver) {\n  for (var k in object) {\n    if (hasOwnProperty.call(object, k)) {\n      if (receiver == null) {\n        iterator(object[k], k, object);\n      } else {\n        iterator.call(receiver, object[k], k, object);\n      }\n    }\n  }\n};\nvar forEach$2 = function forEach(list, iterator, thisArg) {\n  if (!isCallable3(iterator)) {\n    throw new TypeError(\"iterator must be a function\");\n  }\n  var receiver;\n  if (arguments.length >= 3) {\n    receiver = thisArg;\n  }\n  if (toStr.call(list) === \"[object Array]\") {\n    forEachArray(list, iterator, receiver);\n  } else if (typeof list === \"string\") {\n    forEachString(list, iterator, receiver);\n  } else {\n    forEachObject(list, iterator, receiver);\n  }\n};\nvar forEach_1 = forEach$2;\nvar possibleNames = [\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Int8Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\"\n];\nvar g$2 = typeof globalThis === \"undefined\" ? commonjsGlobal : globalThis;\nvar availableTypedArrays$2 = function availableTypedArrays() {\n  var out = [];\n  for (var i = 0; i < possibleNames.length; i++) {\n    if (typeof g$2[possibleNames[i]] === \"function\") {\n      out[out.length] = possibleNames[i];\n    }\n  }\n  return out;\n};\nvar GetIntrinsic = requireGetIntrinsic();\nvar $gOPD = GetIntrinsic(\"%Object.getOwnPropertyDescriptor%\", true);\nif ($gOPD) {\n  try {\n    $gOPD([], \"length\");\n  } catch (e) {\n    $gOPD = null;\n  }\n}\nvar gopd = $gOPD;\nvar forEach$1 = forEach_1;\nvar availableTypedArrays$1 = availableTypedArrays$2;\nvar callBound$1 = callBound$3;\nvar $toString$1 = callBound$1(\"Object.prototype.toString\");\nvar hasToStringTag$1 = shams();\nvar gOPD$1 = gopd;\nvar g$1 = typeof globalThis === \"undefined\" ? commonjsGlobal : globalThis;\nvar typedArrays$1 = availableTypedArrays$1();\nvar $indexOf = callBound$1(\"Array.prototype.indexOf\", true) || function indexOf(array, value) {\n  for (var i = 0; i < array.length; i += 1) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n  return -1;\n};\nvar $slice$1 = callBound$1(\"String.prototype.slice\");\nvar toStrTags$1 = {};\nvar getPrototypeOf$1 = Object.getPrototypeOf;\nif (hasToStringTag$1 && gOPD$1 && getPrototypeOf$1) {\n  forEach$1(typedArrays$1, function(typedArray) {\n    var arr = new g$1[typedArray]();\n    if (Symbol.toStringTag in arr) {\n      var proto2 = getPrototypeOf$1(arr);\n      var descriptor = gOPD$1(proto2, Symbol.toStringTag);\n      if (!descriptor) {\n        var superProto = getPrototypeOf$1(proto2);\n        descriptor = gOPD$1(superProto, Symbol.toStringTag);\n      }\n      toStrTags$1[typedArray] = descriptor.get;\n    }\n  });\n}\nvar tryTypedArrays$1 = function tryAllTypedArrays(value) {\n  var anyTrue = false;\n  forEach$1(toStrTags$1, function(getter, typedArray) {\n    if (!anyTrue) {\n      try {\n        anyTrue = getter.call(value) === typedArray;\n      } catch (e) {\n      }\n    }\n  });\n  return anyTrue;\n};\nvar isTypedArray$1 = function isTypedArray(value) {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  if (!hasToStringTag$1 || !(Symbol.toStringTag in value)) {\n    var tag = $slice$1($toString$1(value), 8, -1);\n    return $indexOf(typedArrays$1, tag) > -1;\n  }\n  if (!gOPD$1) {\n    return false;\n  }\n  return tryTypedArrays$1(value);\n};\nvar forEach2 = forEach_1;\nvar availableTypedArrays2 = availableTypedArrays$2;\nvar callBound = callBound$3;\nvar gOPD = gopd;\nvar $toString = callBound(\"Object.prototype.toString\");\nvar hasToStringTag = shams();\nvar g = typeof globalThis === \"undefined\" ? commonjsGlobal : globalThis;\nvar typedArrays = availableTypedArrays2();\nvar $slice = callBound(\"String.prototype.slice\");\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf;\nif (hasToStringTag && gOPD && getPrototypeOf) {\n  forEach2(typedArrays, function(typedArray) {\n    if (typeof g[typedArray] === \"function\") {\n      var arr = new g[typedArray]();\n      if (Symbol.toStringTag in arr) {\n        var proto2 = getPrototypeOf(arr);\n        var descriptor = gOPD(proto2, Symbol.toStringTag);\n        if (!descriptor) {\n          var superProto = getPrototypeOf(proto2);\n          descriptor = gOPD(superProto, Symbol.toStringTag);\n        }\n        toStrTags[typedArray] = descriptor.get;\n      }\n    }\n  });\n}\nvar tryTypedArrays = function tryAllTypedArrays2(value) {\n  var foundName = false;\n  forEach2(toStrTags, function(getter, typedArray) {\n    if (!foundName) {\n      try {\n        var name = getter.call(value);\n        if (name === typedArray) {\n          foundName = name;\n        }\n      } catch (e) {\n      }\n    }\n  });\n  return foundName;\n};\nvar isTypedArray2 = isTypedArray$1;\nvar whichTypedArray = function whichTypedArray2(value) {\n  if (!isTypedArray2(value)) {\n    return false;\n  }\n  if (!hasToStringTag || !(Symbol.toStringTag in value)) {\n    return $slice($toString(value), 8, -1);\n  }\n  return tryTypedArrays(value);\n};\n(function(exports) {\n  var isArgumentsObject = isArguments$1;\n  var isGeneratorFunction$1 = isGeneratorFunction;\n  var whichTypedArray$1 = whichTypedArray;\n  var isTypedArray3 = isTypedArray$1;\n  function uncurryThis(f) {\n    return f.call.bind(f);\n  }\n  var BigIntSupported = typeof BigInt !== \"undefined\";\n  var SymbolSupported = typeof Symbol !== \"undefined\";\n  var ObjectToString = uncurryThis(Object.prototype.toString);\n  var numberValue = uncurryThis(Number.prototype.valueOf);\n  var stringValue = uncurryThis(String.prototype.valueOf);\n  var booleanValue = uncurryThis(Boolean.prototype.valueOf);\n  if (BigIntSupported) {\n    var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n  }\n  if (SymbolSupported) {\n    var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n  }\n  function checkBoxedPrimitive(value, prototypeValueOf) {\n    if (typeof value !== \"object\") {\n      return false;\n    }\n    try {\n      prototypeValueOf(value);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n  exports.isArgumentsObject = isArgumentsObject;\n  exports.isGeneratorFunction = isGeneratorFunction$1;\n  exports.isTypedArray = isTypedArray3;\n  function isPromise(input) {\n    return typeof Promise !== \"undefined\" && input instanceof Promise || input !== null && typeof input === \"object\" && typeof input.then === \"function\" && typeof input.catch === \"function\";\n  }\n  exports.isPromise = isPromise;\n  function isArrayBufferView(value) {\n    if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n      return ArrayBuffer.isView(value);\n    }\n    return isTypedArray3(value) || isDataView(value);\n  }\n  exports.isArrayBufferView = isArrayBufferView;\n  function isUint8Array(value) {\n    return whichTypedArray$1(value) === \"Uint8Array\";\n  }\n  exports.isUint8Array = isUint8Array;\n  function isUint8ClampedArray(value) {\n    return whichTypedArray$1(value) === \"Uint8ClampedArray\";\n  }\n  exports.isUint8ClampedArray = isUint8ClampedArray;\n  function isUint16Array(value) {\n    return whichTypedArray$1(value) === \"Uint16Array\";\n  }\n  exports.isUint16Array = isUint16Array;\n  function isUint32Array(value) {\n    return whichTypedArray$1(value) === \"Uint32Array\";\n  }\n  exports.isUint32Array = isUint32Array;\n  function isInt8Array(value) {\n    return whichTypedArray$1(value) === \"Int8Array\";\n  }\n  exports.isInt8Array = isInt8Array;\n  function isInt16Array(value) {\n    return whichTypedArray$1(value) === \"Int16Array\";\n  }\n  exports.isInt16Array = isInt16Array;\n  function isInt32Array(value) {\n    return whichTypedArray$1(value) === \"Int32Array\";\n  }\n  exports.isInt32Array = isInt32Array;\n  function isFloat32Array(value) {\n    return whichTypedArray$1(value) === \"Float32Array\";\n  }\n  exports.isFloat32Array = isFloat32Array;\n  function isFloat64Array(value) {\n    return whichTypedArray$1(value) === \"Float64Array\";\n  }\n  exports.isFloat64Array = isFloat64Array;\n  function isBigInt64Array(value) {\n    return whichTypedArray$1(value) === \"BigInt64Array\";\n  }\n  exports.isBigInt64Array = isBigInt64Array;\n  function isBigUint64Array(value) {\n    return whichTypedArray$1(value) === \"BigUint64Array\";\n  }\n  exports.isBigUint64Array = isBigUint64Array;\n  function isMapToString(value) {\n    return ObjectToString(value) === \"[object Map]\";\n  }\n  isMapToString.working = typeof Map !== \"undefined\" && isMapToString(/* @__PURE__ */ new Map());\n  function isMap(value) {\n    if (typeof Map === \"undefined\") {\n      return false;\n    }\n    return isMapToString.working ? isMapToString(value) : value instanceof Map;\n  }\n  exports.isMap = isMap;\n  function isSetToString(value) {\n    return ObjectToString(value) === \"[object Set]\";\n  }\n  isSetToString.working = typeof Set !== \"undefined\" && isSetToString(/* @__PURE__ */ new Set());\n  function isSet(value) {\n    if (typeof Set === \"undefined\") {\n      return false;\n    }\n    return isSetToString.working ? isSetToString(value) : value instanceof Set;\n  }\n  exports.isSet = isSet;\n  function isWeakMapToString(value) {\n    return ObjectToString(value) === \"[object WeakMap]\";\n  }\n  isWeakMapToString.working = typeof WeakMap !== \"undefined\" && isWeakMapToString(/* @__PURE__ */ new WeakMap());\n  function isWeakMap(value) {\n    if (typeof WeakMap === \"undefined\") {\n      return false;\n    }\n    return isWeakMapToString.working ? isWeakMapToString(value) : value instanceof WeakMap;\n  }\n  exports.isWeakMap = isWeakMap;\n  function isWeakSetToString(value) {\n    return ObjectToString(value) === \"[object WeakSet]\";\n  }\n  isWeakSetToString.working = typeof WeakSet !== \"undefined\" && isWeakSetToString(/* @__PURE__ */ new WeakSet());\n  function isWeakSet(value) {\n    return isWeakSetToString(value);\n  }\n  exports.isWeakSet = isWeakSet;\n  function isArrayBufferToString(value) {\n    return ObjectToString(value) === \"[object ArrayBuffer]\";\n  }\n  isArrayBufferToString.working = typeof ArrayBuffer !== \"undefined\" && isArrayBufferToString(new ArrayBuffer());\n  function isArrayBuffer(value) {\n    if (typeof ArrayBuffer === \"undefined\") {\n      return false;\n    }\n    return isArrayBufferToString.working ? isArrayBufferToString(value) : value instanceof ArrayBuffer;\n  }\n  exports.isArrayBuffer = isArrayBuffer;\n  function isDataViewToString(value) {\n    return ObjectToString(value) === \"[object DataView]\";\n  }\n  isDataViewToString.working = typeof ArrayBuffer !== \"undefined\" && typeof DataView !== \"undefined\" && isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1));\n  function isDataView(value) {\n    if (typeof DataView === \"undefined\") {\n      return false;\n    }\n    return isDataViewToString.working ? isDataViewToString(value) : value instanceof DataView;\n  }\n  exports.isDataView = isDataView;\n  var SharedArrayBufferCopy = typeof SharedArrayBuffer !== \"undefined\" ? SharedArrayBuffer : void 0;\n  function isSharedArrayBufferToString(value) {\n    return ObjectToString(value) === \"[object SharedArrayBuffer]\";\n  }\n  function isSharedArrayBuffer(value) {\n    if (typeof SharedArrayBufferCopy === \"undefined\") {\n      return false;\n    }\n    if (typeof isSharedArrayBufferToString.working === \"undefined\") {\n      isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n    }\n    return isSharedArrayBufferToString.working ? isSharedArrayBufferToString(value) : value instanceof SharedArrayBufferCopy;\n  }\n  exports.isSharedArrayBuffer = isSharedArrayBuffer;\n  function isAsyncFunction(value) {\n    return ObjectToString(value) === \"[object AsyncFunction]\";\n  }\n  exports.isAsyncFunction = isAsyncFunction;\n  function isMapIterator(value) {\n    return ObjectToString(value) === \"[object Map Iterator]\";\n  }\n  exports.isMapIterator = isMapIterator;\n  function isSetIterator(value) {\n    return ObjectToString(value) === \"[object Set Iterator]\";\n  }\n  exports.isSetIterator = isSetIterator;\n  function isGeneratorObject(value) {\n    return ObjectToString(value) === \"[object Generator]\";\n  }\n  exports.isGeneratorObject = isGeneratorObject;\n  function isWebAssemblyCompiledModule(value) {\n    return ObjectToString(value) === \"[object WebAssembly.Module]\";\n  }\n  exports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n  function isNumberObject(value) {\n    return checkBoxedPrimitive(value, numberValue);\n  }\n  exports.isNumberObject = isNumberObject;\n  function isStringObject(value) {\n    return checkBoxedPrimitive(value, stringValue);\n  }\n  exports.isStringObject = isStringObject;\n  function isBooleanObject(value) {\n    return checkBoxedPrimitive(value, booleanValue);\n  }\n  exports.isBooleanObject = isBooleanObject;\n  function isBigIntObject(value) {\n    return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n  }\n  exports.isBigIntObject = isBigIntObject;\n  function isSymbolObject(value) {\n    return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n  }\n  exports.isSymbolObject = isSymbolObject;\n  function isBoxedPrimitive(value) {\n    return isNumberObject(value) || isStringObject(value) || isBooleanObject(value) || isBigIntObject(value) || isSymbolObject(value);\n  }\n  exports.isBoxedPrimitive = isBoxedPrimitive;\n  function isAnyArrayBuffer(value) {\n    return typeof Uint8Array !== \"undefined\" && (isArrayBuffer(value) || isSharedArrayBuffer(value));\n  }\n  exports.isAnyArrayBuffer = isAnyArrayBuffer;\n  [\"isProxy\", \"isExternal\", \"isModuleNamespaceObject\"].forEach(function(method) {\n    Object.defineProperty(exports, method, {\n      enumerable: false,\n      value: function() {\n        throw new Error(method + \" is not supported in userland\");\n      }\n    });\n  });\n})(types);\nvar isBufferBrowser = function isBuffer(arg) {\n  return arg && typeof arg === \"object\" && typeof arg.copy === \"function\" && typeof arg.fill === \"function\" && typeof arg.readUInt8 === \"function\";\n};\nvar inherits_browser = { exports: {} };\nif (typeof Object.create === \"function\") {\n  inherits_browser.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor;\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n    }\n  };\n} else {\n  inherits_browser.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor;\n      var TempCtor = function() {\n      };\n      TempCtor.prototype = superCtor.prototype;\n      ctor.prototype = new TempCtor();\n      ctor.prototype.constructor = ctor;\n    }\n  };\n}\nvar inherits_browserExports = inherits_browser.exports;\n(function(exports) {\n  var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors2(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n  var formatRegExp = /%[sdj%]/g;\n  exports.format = function(f) {\n    if (!isString2(f)) {\n      var objects = [];\n      for (var i = 0; i < arguments.length; i++) {\n        objects.push(inspect(arguments[i]));\n      }\n      return objects.join(\" \");\n    }\n    var i = 1;\n    var args = arguments;\n    var len = args.length;\n    var str = String(f).replace(formatRegExp, function(x2) {\n      if (x2 === \"%%\")\n        return \"%\";\n      if (i >= len)\n        return x2;\n      switch (x2) {\n        case \"%s\":\n          return String(args[i++]);\n        case \"%d\":\n          return Number(args[i++]);\n        case \"%j\":\n          try {\n            return JSON.stringify(args[i++]);\n          } catch (_) {\n            return \"[Circular]\";\n          }\n        default:\n          return x2;\n      }\n    });\n    for (var x = args[i]; i < len; x = args[++i]) {\n      if (isNull(x) || !isObject(x)) {\n        str += \" \" + x;\n      } else {\n        str += \" \" + inspect(x);\n      }\n    }\n    return str;\n  };\n  exports.deprecate = function(fn, msg) {\n    if (typeof process !== \"undefined\" && process.noDeprecation === true) {\n      return fn;\n    }\n    if (typeof process === \"undefined\") {\n      return function() {\n        return exports.deprecate(fn, msg).apply(this, arguments);\n      };\n    }\n    var warned = false;\n    function deprecated() {\n      if (!warned) {\n        if (process.throwDeprecation) {\n          throw new Error(msg);\n        } else if (process.traceDeprecation) {\n          console.trace(msg);\n        } else {\n          console.error(msg);\n        }\n        warned = true;\n      }\n      return fn.apply(this, arguments);\n    }\n    return deprecated;\n  };\n  var debugs = {};\n  var debugEnvRegex = /^$/;\n  if (process.env.NODE_DEBUG) {\n    var debugEnv = process.env.NODE_DEBUG;\n    debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\").replace(/\\*/g, \".*\").replace(/,/g, \"$|^\").toUpperCase();\n    debugEnvRegex = new RegExp(\"^\" + debugEnv + \"$\", \"i\");\n  }\n  exports.debuglog = function(set) {\n    set = set.toUpperCase();\n    if (!debugs[set]) {\n      if (debugEnvRegex.test(set)) {\n        var pid = process.pid;\n        debugs[set] = function() {\n          var msg = exports.format.apply(exports, arguments);\n          console.error(\"%s %d: %s\", set, pid, msg);\n        };\n      } else {\n        debugs[set] = function() {\n        };\n      }\n    }\n    return debugs[set];\n  };\n  function inspect(obj, opts) {\n    var ctx = {\n      seen: [],\n      stylize: stylizeNoColor\n    };\n    if (arguments.length >= 3)\n      ctx.depth = arguments[2];\n    if (arguments.length >= 4)\n      ctx.colors = arguments[3];\n    if (isBoolean2(opts)) {\n      ctx.showHidden = opts;\n    } else if (opts) {\n      exports._extend(ctx, opts);\n    }\n    if (isUndefined(ctx.showHidden))\n      ctx.showHidden = false;\n    if (isUndefined(ctx.depth))\n      ctx.depth = 2;\n    if (isUndefined(ctx.colors))\n      ctx.colors = false;\n    if (isUndefined(ctx.customInspect))\n      ctx.customInspect = true;\n    if (ctx.colors)\n      ctx.stylize = stylizeWithColor;\n    return formatValue(ctx, obj, ctx.depth);\n  }\n  exports.inspect = inspect;\n  inspect.colors = {\n    \"bold\": [1, 22],\n    \"italic\": [3, 23],\n    \"underline\": [4, 24],\n    \"inverse\": [7, 27],\n    \"white\": [37, 39],\n    \"grey\": [90, 39],\n    \"black\": [30, 39],\n    \"blue\": [34, 39],\n    \"cyan\": [36, 39],\n    \"green\": [32, 39],\n    \"magenta\": [35, 39],\n    \"red\": [31, 39],\n    \"yellow\": [33, 39]\n  };\n  inspect.styles = {\n    \"special\": \"cyan\",\n    \"number\": \"yellow\",\n    \"boolean\": \"yellow\",\n    \"undefined\": \"grey\",\n    \"null\": \"bold\",\n    \"string\": \"green\",\n    \"date\": \"magenta\",\n    // \"name\": intentionally not styling\n    \"regexp\": \"red\"\n  };\n  function stylizeWithColor(str, styleType) {\n    var style = inspect.styles[styleType];\n    if (style) {\n      return \"\\x1B[\" + inspect.colors[style][0] + \"m\" + str + \"\\x1B[\" + inspect.colors[style][1] + \"m\";\n    } else {\n      return str;\n    }\n  }\n  function stylizeNoColor(str, styleType) {\n    return str;\n  }\n  function arrayToHash(array) {\n    var hash = {};\n    array.forEach(function(val, idx) {\n      hash[val] = true;\n    });\n    return hash;\n  }\n  function formatValue(ctx, value, recurseTimes) {\n    if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special\n    value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check.\n    !(value.constructor && value.constructor.prototype === value)) {\n      var ret = value.inspect(recurseTimes, ctx);\n      if (!isString2(ret)) {\n        ret = formatValue(ctx, ret, recurseTimes);\n      }\n      return ret;\n    }\n    var primitive = formatPrimitive(ctx, value);\n    if (primitive) {\n      return primitive;\n    }\n    var keys = Object.keys(value);\n    var visibleKeys = arrayToHash(keys);\n    if (ctx.showHidden) {\n      keys = Object.getOwnPropertyNames(value);\n    }\n    if (isError(value) && (keys.indexOf(\"message\") >= 0 || keys.indexOf(\"description\") >= 0)) {\n      return formatError(value);\n    }\n    if (keys.length === 0) {\n      if (isFunction(value)) {\n        var name = value.name ? \": \" + value.name : \"\";\n        return ctx.stylize(\"[Function\" + name + \"]\", \"special\");\n      }\n      if (isRegExp(value)) {\n        return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n      }\n      if (isDate(value)) {\n        return ctx.stylize(Date.prototype.toString.call(value), \"date\");\n      }\n      if (isError(value)) {\n        return formatError(value);\n      }\n    }\n    var base = \"\", array = false, braces = [\"{\", \"}\"];\n    if (isArray(value)) {\n      array = true;\n      braces = [\"[\", \"]\"];\n    }\n    if (isFunction(value)) {\n      var n = value.name ? \": \" + value.name : \"\";\n      base = \" [Function\" + n + \"]\";\n    }\n    if (isRegExp(value)) {\n      base = \" \" + RegExp.prototype.toString.call(value);\n    }\n    if (isDate(value)) {\n      base = \" \" + Date.prototype.toUTCString.call(value);\n    }\n    if (isError(value)) {\n      base = \" \" + formatError(value);\n    }\n    if (keys.length === 0 && (!array || value.length == 0)) {\n      return braces[0] + base + braces[1];\n    }\n    if (recurseTimes < 0) {\n      if (isRegExp(value)) {\n        return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n      } else {\n        return ctx.stylize(\"[Object]\", \"special\");\n      }\n    }\n    ctx.seen.push(value);\n    var output;\n    if (array) {\n      output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n    } else {\n      output = keys.map(function(key) {\n        return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n      });\n    }\n    ctx.seen.pop();\n    return reduceToSingleString(output, base, braces);\n  }\n  function formatPrimitive(ctx, value) {\n    if (isUndefined(value))\n      return ctx.stylize(\"undefined\", \"undefined\");\n    if (isString2(value)) {\n      var simple = \"'\" + JSON.stringify(value).replace(/^\"|\"$/g, \"\").replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"') + \"'\";\n      return ctx.stylize(simple, \"string\");\n    }\n    if (isNumber2(value))\n      return ctx.stylize(\"\" + value, \"number\");\n    if (isBoolean2(value))\n      return ctx.stylize(\"\" + value, \"boolean\");\n    if (isNull(value))\n      return ctx.stylize(\"null\", \"null\");\n  }\n  function formatError(value) {\n    return \"[\" + Error.prototype.toString.call(value) + \"]\";\n  }\n  function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n    var output = [];\n    for (var i = 0, l = value.length; i < l; ++i) {\n      if (hasOwnProperty2(value, String(i))) {\n        output.push(formatProperty(\n          ctx,\n          value,\n          recurseTimes,\n          visibleKeys,\n          String(i),\n          true\n        ));\n      } else {\n        output.push(\"\");\n      }\n    }\n    keys.forEach(function(key) {\n      if (!key.match(/^\\d+$/)) {\n        output.push(formatProperty(\n          ctx,\n          value,\n          recurseTimes,\n          visibleKeys,\n          key,\n          true\n        ));\n      }\n    });\n    return output;\n  }\n  function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n    var name, str, desc;\n    desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n    if (desc.get) {\n      if (desc.set) {\n        str = ctx.stylize(\"[Getter/Setter]\", \"special\");\n      } else {\n        str = ctx.stylize(\"[Getter]\", \"special\");\n      }\n    } else {\n      if (desc.set) {\n        str = ctx.stylize(\"[Setter]\", \"special\");\n      }\n    }\n    if (!hasOwnProperty2(visibleKeys, key)) {\n      name = \"[\" + key + \"]\";\n    }\n    if (!str) {\n      if (ctx.seen.indexOf(desc.value) < 0) {\n        if (isNull(recurseTimes)) {\n          str = formatValue(ctx, desc.value, null);\n        } else {\n          str = formatValue(ctx, desc.value, recurseTimes - 1);\n        }\n        if (str.indexOf(\"\\n\") > -1) {\n          if (array) {\n            str = str.split(\"\\n\").map(function(line) {\n              return \"  \" + line;\n            }).join(\"\\n\").slice(2);\n          } else {\n            str = \"\\n\" + str.split(\"\\n\").map(function(line) {\n              return \"   \" + line;\n            }).join(\"\\n\");\n          }\n        }\n      } else {\n        str = ctx.stylize(\"[Circular]\", \"special\");\n      }\n    }\n    if (isUndefined(name)) {\n      if (array && key.match(/^\\d+$/)) {\n        return str;\n      }\n      name = JSON.stringify(\"\" + key);\n      if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n        name = name.slice(1, -1);\n        name = ctx.stylize(name, \"name\");\n      } else {\n        name = name.replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\");\n        name = ctx.stylize(name, \"string\");\n      }\n    }\n    return name + \": \" + str;\n  }\n  function reduceToSingleString(output, base, braces) {\n    var length = output.reduce(function(prev, cur) {\n      if (cur.indexOf(\"\\n\") >= 0)\n        ;\n      return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, \"\").length + 1;\n    }, 0);\n    if (length > 60) {\n      return braces[0] + (base === \"\" ? \"\" : base + \"\\n \") + \" \" + output.join(\",\\n  \") + \" \" + braces[1];\n    }\n    return braces[0] + base + \" \" + output.join(\", \") + \" \" + braces[1];\n  }\n  exports.types = types;\n  function isArray(ar) {\n    return Array.isArray(ar);\n  }\n  exports.isArray = isArray;\n  function isBoolean2(arg) {\n    return typeof arg === \"boolean\";\n  }\n  exports.isBoolean = isBoolean2;\n  function isNull(arg) {\n    return arg === null;\n  }\n  exports.isNull = isNull;\n  function isNullOrUndefined(arg) {\n    return arg == null;\n  }\n  exports.isNullOrUndefined = isNullOrUndefined;\n  function isNumber2(arg) {\n    return typeof arg === \"number\";\n  }\n  exports.isNumber = isNumber2;\n  function isString2(arg) {\n    return typeof arg === \"string\";\n  }\n  exports.isString = isString2;\n  function isSymbol(arg) {\n    return typeof arg === \"symbol\";\n  }\n  exports.isSymbol = isSymbol;\n  function isUndefined(arg) {\n    return arg === void 0;\n  }\n  exports.isUndefined = isUndefined;\n  function isRegExp(re) {\n    return isObject(re) && objectToString(re) === \"[object RegExp]\";\n  }\n  exports.isRegExp = isRegExp;\n  exports.types.isRegExp = isRegExp;\n  function isObject(arg) {\n    return typeof arg === \"object\" && arg !== null;\n  }\n  exports.isObject = isObject;\n  function isDate(d) {\n    return isObject(d) && objectToString(d) === \"[object Date]\";\n  }\n  exports.isDate = isDate;\n  exports.types.isDate = isDate;\n  function isError(e) {\n    return isObject(e) && (objectToString(e) === \"[object Error]\" || e instanceof Error);\n  }\n  exports.isError = isError;\n  exports.types.isNativeError = isError;\n  function isFunction(arg) {\n    return typeof arg === \"function\";\n  }\n  exports.isFunction = isFunction;\n  function isPrimitive(arg) {\n    return arg === null || typeof arg === \"boolean\" || typeof arg === \"number\" || typeof arg === \"string\" || typeof arg === \"symbol\" || // ES6 symbol\n    typeof arg === \"undefined\";\n  }\n  exports.isPrimitive = isPrimitive;\n  exports.isBuffer = isBufferBrowser;\n  function objectToString(o) {\n    return Object.prototype.toString.call(o);\n  }\n  function pad(n) {\n    return n < 10 ? \"0\" + n.toString(10) : n.toString(10);\n  }\n  var months = [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\"\n  ];\n  function timestamp() {\n    var d = /* @__PURE__ */ new Date();\n    var time = [\n      pad(d.getHours()),\n      pad(d.getMinutes()),\n      pad(d.getSeconds())\n    ].join(\":\");\n    return [d.getDate(), months[d.getMonth()], time].join(\" \");\n  }\n  exports.log = function() {\n    console.log(\"%s - %s\", timestamp(), exports.format.apply(exports, arguments));\n  };\n  exports.inherits = inherits_browserExports;\n  exports._extend = function(origin, add) {\n    if (!add || !isObject(add))\n      return origin;\n    var keys = Object.keys(add);\n    var i = keys.length;\n    while (i--) {\n      origin[keys[i]] = add[keys[i]];\n    }\n    return origin;\n  };\n  function hasOwnProperty2(obj, prop) {\n    return Object.prototype.hasOwnProperty.call(obj, prop);\n  }\n  var kCustomPromisifiedSymbol = typeof Symbol !== \"undefined\" ? Symbol(\"util.promisify.custom\") : void 0;\n  exports.promisify = function promisify(original) {\n    if (typeof original !== \"function\")\n      throw new TypeError('The \"original\" argument must be of type Function');\n    if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n      var fn = original[kCustomPromisifiedSymbol];\n      if (typeof fn !== \"function\") {\n        throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n      }\n      Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n        value: fn,\n        enumerable: false,\n        writable: false,\n        configurable: true\n      });\n      return fn;\n    }\n    function fn() {\n      var promiseResolve, promiseReject;\n      var promise = new Promise(function(resolve, reject) {\n        promiseResolve = resolve;\n        promiseReject = reject;\n      });\n      var args = [];\n      for (var i = 0; i < arguments.length; i++) {\n        args.push(arguments[i]);\n      }\n      args.push(function(err2, value) {\n        if (err2) {\n          promiseReject(err2);\n        } else {\n          promiseResolve(value);\n        }\n      });\n      try {\n        original.apply(this, args);\n      } catch (err2) {\n        promiseReject(err2);\n      }\n      return promise;\n    }\n    Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n    if (kCustomPromisifiedSymbol)\n      Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n        value: fn,\n        enumerable: false,\n        writable: false,\n        configurable: true\n      });\n    return Object.defineProperties(\n      fn,\n      getOwnPropertyDescriptors(original)\n    );\n  };\n  exports.promisify.custom = kCustomPromisifiedSymbol;\n  function callbackifyOnRejected(reason, cb) {\n    if (!reason) {\n      var newReason = new Error(\"Promise was rejected with a falsy value\");\n      newReason.reason = reason;\n      reason = newReason;\n    }\n    return cb(reason);\n  }\n  function callbackify(original) {\n    if (typeof original !== \"function\") {\n      throw new TypeError('The \"original\" argument must be of type Function');\n    }\n    function callbackified() {\n      var args = [];\n      for (var i = 0; i < arguments.length; i++) {\n        args.push(arguments[i]);\n      }\n      var maybeCb = args.pop();\n      if (typeof maybeCb !== \"function\") {\n        throw new TypeError(\"The last argument must be of type Function\");\n      }\n      var self2 = this;\n      var cb = function() {\n        return maybeCb.apply(self2, arguments);\n      };\n      original.apply(this, args).then(\n        function(ret) {\n          process.nextTick(cb.bind(null, null, ret));\n        },\n        function(rej) {\n          process.nextTick(callbackifyOnRejected.bind(null, rej, cb));\n        }\n      );\n    }\n    Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n    Object.defineProperties(\n      callbackified,\n      getOwnPropertyDescriptors(original)\n    );\n    return callbackified;\n  }\n  exports.callbackify = callbackify;\n})(util);\nvar hasRequiredErrors;\nfunction requireErrors() {\n  if (hasRequiredErrors)\n    return errors;\n  hasRequiredErrors = 1;\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function _typeof2(obj2) {\n        return typeof obj2;\n      };\n    } else {\n      _typeof = function _typeof2(obj2) {\n        return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n      };\n    }\n    return _typeof(obj);\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  function _possibleConstructorReturn(self2, call) {\n    if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n      return call;\n    }\n    return _assertThisInitialized(self2);\n  }\n  function _assertThisInitialized(self2) {\n    if (self2 === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n    return self2;\n  }\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {\n      return o2.__proto__ || Object.getPrototypeOf(o2);\n    };\n    return _getPrototypeOf(o);\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n    if (superClass)\n      _setPrototypeOf(subClass, superClass);\n  }\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) {\n      o2.__proto__ = p2;\n      return o2;\n    };\n    return _setPrototypeOf(o, p);\n  }\n  var codes = {};\n  var assert2;\n  var util$12;\n  function createErrorType(code, message, Base) {\n    if (!Base) {\n      Base = Error;\n    }\n    function getMessage(arg1, arg2, arg3) {\n      if (typeof message === \"string\") {\n        return message;\n      } else {\n        return message(arg1, arg2, arg3);\n      }\n    }\n    var NodeError = /* @__PURE__ */ function(_Base) {\n      _inherits(NodeError2, _Base);\n      function NodeError2(arg1, arg2, arg3) {\n        var _this;\n        _classCallCheck(this, NodeError2);\n        _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError2).call(this, getMessage(arg1, arg2, arg3)));\n        _this.code = code;\n        return _this;\n      }\n      return NodeError2;\n    }(Base);\n    codes[code] = NodeError;\n  }\n  function oneOf(expected, thing) {\n    if (Array.isArray(expected)) {\n      var len = expected.length;\n      expected = expected.map(function(i) {\n        return String(i);\n      });\n      if (len > 2) {\n        return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(\", \"), \", or \") + expected[len - 1];\n      } else if (len === 2) {\n        return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n      } else {\n        return \"of \".concat(thing, \" \").concat(expected[0]);\n      }\n    } else {\n      return \"of \".concat(thing, \" \").concat(String(expected));\n    }\n  }\n  function startsWith(str, search, pos) {\n    return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n  }\n  function endsWith(str, search, this_len) {\n    if (this_len === void 0 || this_len > str.length) {\n      this_len = str.length;\n    }\n    return str.substring(this_len - search.length, this_len) === search;\n  }\n  function includes(str, search, start) {\n    if (typeof start !== \"number\") {\n      start = 0;\n    }\n    if (start + search.length > str.length) {\n      return false;\n    } else {\n      return str.indexOf(search, start) !== -1;\n    }\n  }\n  createErrorType(\"ERR_AMBIGUOUS_ARGUMENT\", 'The \"%s\" argument is ambiguous. %s', TypeError);\n  createErrorType(\"ERR_INVALID_ARG_TYPE\", function(name, expected, actual) {\n    if (assert2 === void 0)\n      assert2 = requireAssert();\n    assert2(typeof name === \"string\", \"'name' must be a string\");\n    var determiner;\n    if (typeof expected === \"string\" && startsWith(expected, \"not \")) {\n      determiner = \"must not be\";\n      expected = expected.replace(/^not /, \"\");\n    } else {\n      determiner = \"must be\";\n    }\n    var msg;\n    if (endsWith(name, \" argument\")) {\n      msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, \"type\"));\n    } else {\n      var type2 = includes(name, \".\") ? \"property\" : \"argument\";\n      msg = 'The \"'.concat(name, '\" ').concat(type2, \" \").concat(determiner, \" \").concat(oneOf(expected, \"type\"));\n    }\n    msg += \". Received type \".concat(_typeof(actual));\n    return msg;\n  }, TypeError);\n  createErrorType(\"ERR_INVALID_ARG_VALUE\", function(name, value) {\n    var reason = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"is invalid\";\n    if (util$12 === void 0)\n      util$12 = util;\n    var inspected = util$12.inspect(value);\n    if (inspected.length > 128) {\n      inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n    }\n    return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n  }, TypeError);\n  createErrorType(\"ERR_INVALID_RETURN_VALUE\", function(input, name, value) {\n    var type2;\n    if (value && value.constructor && value.constructor.name) {\n      type2 = \"instance of \".concat(value.constructor.name);\n    } else {\n      type2 = \"type \".concat(_typeof(value));\n    }\n    return \"Expected \".concat(input, ' to be returned from the \"').concat(name, '\"') + \" function but got \".concat(type2, \".\");\n  }, TypeError);\n  createErrorType(\"ERR_MISSING_ARGS\", function() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (assert2 === void 0)\n      assert2 = requireAssert();\n    assert2(args.length > 0, \"At least one arg needs to be specified\");\n    var msg = \"The \";\n    var len = args.length;\n    args = args.map(function(a) {\n      return '\"'.concat(a, '\"');\n    });\n    switch (len) {\n      case 1:\n        msg += \"\".concat(args[0], \" argument\");\n        break;\n      case 2:\n        msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n        break;\n      default:\n        msg += args.slice(0, len - 1).join(\", \");\n        msg += \", and \".concat(args[len - 1], \" arguments\");\n        break;\n    }\n    return \"\".concat(msg, \" must be specified\");\n  }, TypeError);\n  errors.codes = codes;\n  return errors;\n}\nvar assertion_error;\nvar hasRequiredAssertion_error;\nfunction requireAssertion_error() {\n  if (hasRequiredAssertion_error)\n    return assertion_error;\n  hasRequiredAssertion_error = 1;\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n      if (typeof Object.getOwnPropertySymbols === \"function\") {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n      ownKeys.forEach(function(key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n    return target;\n  }\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor)\n        descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps)\n      _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps)\n      _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n  function _possibleConstructorReturn(self2, call) {\n    if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n      return call;\n    }\n    return _assertThisInitialized(self2);\n  }\n  function _assertThisInitialized(self2) {\n    if (self2 === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n    return self2;\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n    if (superClass)\n      _setPrototypeOf(subClass, superClass);\n  }\n  function _wrapNativeSuper(Class) {\n    var _cache = typeof Map === \"function\" ? /* @__PURE__ */ new Map() : void 0;\n    _wrapNativeSuper = function _wrapNativeSuper2(Class2) {\n      if (Class2 === null || !_isNativeFunction(Class2))\n        return Class2;\n      if (typeof Class2 !== \"function\") {\n        throw new TypeError(\"Super expression must either be null or a function\");\n      }\n      if (typeof _cache !== \"undefined\") {\n        if (_cache.has(Class2))\n          return _cache.get(Class2);\n        _cache.set(Class2, Wrapper);\n      }\n      function Wrapper() {\n        return _construct(Class2, arguments, _getPrototypeOf(this).constructor);\n      }\n      Wrapper.prototype = Object.create(Class2.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n      return _setPrototypeOf(Wrapper, Class2);\n    };\n    return _wrapNativeSuper(Class);\n  }\n  function isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct)\n      return false;\n    if (Reflect.construct.sham)\n      return false;\n    if (typeof Proxy === \"function\")\n      return true;\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function() {\n      }));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n  function _construct(Parent, args, Class) {\n    if (isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct2(Parent2, args2, Class2) {\n        var a = [null];\n        a.push.apply(a, args2);\n        var Constructor = Function.bind.apply(Parent2, a);\n        var instance = new Constructor();\n        if (Class2)\n          _setPrototypeOf(instance, Class2.prototype);\n        return instance;\n      };\n    }\n    return _construct.apply(null, arguments);\n  }\n  function _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n  }\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) {\n      o2.__proto__ = p2;\n      return o2;\n    };\n    return _setPrototypeOf(o, p);\n  }\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {\n      return o2.__proto__ || Object.getPrototypeOf(o2);\n    };\n    return _getPrototypeOf(o);\n  }\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function _typeof2(obj2) {\n        return typeof obj2;\n      };\n    } else {\n      _typeof = function _typeof2(obj2) {\n        return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n      };\n    }\n    return _typeof(obj);\n  }\n  var _require = util, inspect = _require.inspect;\n  var _require2 = requireErrors(), ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE;\n  function endsWith(str, search, this_len) {\n    if (this_len === void 0 || this_len > str.length) {\n      this_len = str.length;\n    }\n    return str.substring(this_len - search.length, this_len) === search;\n  }\n  function repeat(str, count2) {\n    count2 = Math.floor(count2);\n    if (str.length == 0 || count2 == 0)\n      return \"\";\n    var maxCount = str.length * count2;\n    count2 = Math.floor(Math.log(count2) / Math.log(2));\n    while (count2) {\n      str += str;\n      count2--;\n    }\n    str += str.substring(0, maxCount - str.length);\n    return str;\n  }\n  var blue = \"\";\n  var green = \"\";\n  var red = \"\";\n  var white = \"\";\n  var kReadableOperator = {\n    deepStrictEqual: \"Expected values to be strictly deep-equal:\",\n    strictEqual: \"Expected values to be strictly equal:\",\n    strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n    deepEqual: \"Expected values to be loosely deep-equal:\",\n    equal: \"Expected values to be loosely equal:\",\n    notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n    notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n    notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n    notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n    notEqual: 'Expected \"actual\" to be loosely unequal to:',\n    notIdentical: \"Values identical but not reference-equal:\"\n  };\n  var kMaxShortLength = 10;\n  function copyError(source) {\n    var keys = Object.keys(source);\n    var target = Object.create(Object.getPrototypeOf(source));\n    keys.forEach(function(key) {\n      target[key] = source[key];\n    });\n    Object.defineProperty(target, \"message\", {\n      value: source.message\n    });\n    return target;\n  }\n  function inspectValue(val) {\n    return inspect(val, {\n      compact: false,\n      customInspect: false,\n      depth: 1e3,\n      maxArrayLength: Infinity,\n      // Assert compares only enumerable properties (with a few exceptions).\n      showHidden: false,\n      // Having a long line as error is better than wrapping the line for\n      // comparison for now.\n      // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n      // have meta information about the inspected properties (i.e., know where\n      // in what line the property starts and ends).\n      breakLength: Infinity,\n      // Assert does not detect proxies currently.\n      showProxy: false,\n      sorted: true,\n      // Inspect getters as we also check them when comparing entries.\n      getters: true\n    });\n  }\n  function createErrDiff(actual, expected, operator) {\n    var other = \"\";\n    var res = \"\";\n    var lastPos = 0;\n    var end = \"\";\n    var skipped = false;\n    var actualInspected = inspectValue(actual);\n    var actualLines = actualInspected.split(\"\\n\");\n    var expectedLines = inspectValue(expected).split(\"\\n\");\n    var i = 0;\n    var indicator = \"\";\n    if (operator === \"strictEqual\" && _typeof(actual) === \"object\" && _typeof(expected) === \"object\" && actual !== null && expected !== null) {\n      operator = \"strictEqualObject\";\n    }\n    if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n      var inputLength = actualLines[0].length + expectedLines[0].length;\n      if (inputLength <= kMaxShortLength) {\n        if ((_typeof(actual) !== \"object\" || actual === null) && (_typeof(expected) !== \"object\" || expected === null) && (actual !== 0 || expected !== 0)) {\n          return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n        }\n      } else if (operator !== \"strictEqualObject\") {\n        var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n        if (inputLength < maxLength) {\n          while (actualLines[0][i] === expectedLines[0][i]) {\n            i++;\n          }\n          if (i > 2) {\n            indicator = \"\\n  \".concat(repeat(\" \", i), \"^\");\n            i = 0;\n          }\n        }\n      }\n    }\n    var a = actualLines[actualLines.length - 1];\n    var b = expectedLines[expectedLines.length - 1];\n    while (a === b) {\n      if (i++ < 2) {\n        end = \"\\n  \".concat(a).concat(end);\n      } else {\n        other = a;\n      }\n      actualLines.pop();\n      expectedLines.pop();\n      if (actualLines.length === 0 || expectedLines.length === 0)\n        break;\n      a = actualLines[actualLines.length - 1];\n      b = expectedLines[expectedLines.length - 1];\n    }\n    var maxLines = Math.max(actualLines.length, expectedLines.length);\n    if (maxLines === 0) {\n      var _actualLines = actualInspected.split(\"\\n\");\n      if (_actualLines.length > 30) {\n        _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n        while (_actualLines.length > 27) {\n          _actualLines.pop();\n        }\n      }\n      return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join(\"\\n\"), \"\\n\");\n    }\n    if (i > 3) {\n      end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n      skipped = true;\n    }\n    if (other !== \"\") {\n      end = \"\\n  \".concat(other).concat(end);\n      other = \"\";\n    }\n    var printedLines = 0;\n    var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n    var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n    for (i = 0; i < maxLines; i++) {\n      var cur = i - lastPos;\n      if (actualLines.length < i + 1) {\n        if (cur > 1 && i > 2) {\n          if (cur > 4) {\n            res += \"\\n\".concat(blue, \"...\").concat(white);\n            skipped = true;\n          } else if (cur > 3) {\n            res += \"\\n  \".concat(expectedLines[i - 2]);\n            printedLines++;\n          }\n          res += \"\\n  \".concat(expectedLines[i - 1]);\n          printedLines++;\n        }\n        lastPos = i;\n        other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n        printedLines++;\n      } else if (expectedLines.length < i + 1) {\n        if (cur > 1 && i > 2) {\n          if (cur > 4) {\n            res += \"\\n\".concat(blue, \"...\").concat(white);\n            skipped = true;\n          } else if (cur > 3) {\n            res += \"\\n  \".concat(actualLines[i - 2]);\n            printedLines++;\n          }\n          res += \"\\n  \".concat(actualLines[i - 1]);\n          printedLines++;\n        }\n        lastPos = i;\n        res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n        printedLines++;\n      } else {\n        var expectedLine = expectedLines[i];\n        var actualLine = actualLines[i];\n        var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, \",\") || actualLine.slice(0, -1) !== expectedLine);\n        if (divergingLines && endsWith(expectedLine, \",\") && expectedLine.slice(0, -1) === actualLine) {\n          divergingLines = false;\n          actualLine += \",\";\n        }\n        if (divergingLines) {\n          if (cur > 1 && i > 2) {\n            if (cur > 4) {\n              res += \"\\n\".concat(blue, \"...\").concat(white);\n              skipped = true;\n            } else if (cur > 3) {\n              res += \"\\n  \".concat(actualLines[i - 2]);\n              printedLines++;\n            }\n            res += \"\\n  \".concat(actualLines[i - 1]);\n            printedLines++;\n          }\n          lastPos = i;\n          res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n          other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n          printedLines += 2;\n        } else {\n          res += other;\n          other = \"\";\n          if (cur === 1 || i === 0) {\n            res += \"\\n  \".concat(actualLine);\n            printedLines++;\n          }\n        }\n      }\n      if (printedLines > 20 && i < maxLines - 2) {\n        return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n      }\n    }\n    return \"\".concat(msg).concat(skipped ? skippedMsg : \"\", \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n  }\n  var AssertionError = /* @__PURE__ */ function(_Error) {\n    _inherits(AssertionError2, _Error);\n    function AssertionError2(options) {\n      var _this;\n      _classCallCheck(this, AssertionError2);\n      if (_typeof(options) !== \"object\" || options === null) {\n        throw new ERR_INVALID_ARG_TYPE(\"options\", \"Object\", options);\n      }\n      var message = options.message, operator = options.operator, stackStartFn = options.stackStartFn;\n      var actual = options.actual, expected = options.expected;\n      var limit = Error.stackTraceLimit;\n      Error.stackTraceLimit = 0;\n      if (message != null) {\n        _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, String(message)));\n      } else {\n        if (process.stderr && process.stderr.isTTY) {\n          if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n            blue = \"\\x1B[34m\";\n            green = \"\\x1B[32m\";\n            white = \"\\x1B[39m\";\n            red = \"\\x1B[31m\";\n          } else {\n            blue = \"\";\n            green = \"\";\n            white = \"\";\n            red = \"\";\n          }\n        }\n        if (_typeof(actual) === \"object\" && actual !== null && _typeof(expected) === \"object\" && expected !== null && \"stack\" in actual && actual instanceof Error && \"stack\" in expected && expected instanceof Error) {\n          actual = copyError(actual);\n          expected = copyError(expected);\n        }\n        if (operator === \"deepStrictEqual\" || operator === \"strictEqual\") {\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, createErrDiff(actual, expected, operator)));\n        } else if (operator === \"notDeepStrictEqual\" || operator === \"notStrictEqual\") {\n          var base = kReadableOperator[operator];\n          var res = inspectValue(actual).split(\"\\n\");\n          if (operator === \"notStrictEqual\" && _typeof(actual) === \"object\" && actual !== null) {\n            base = kReadableOperator.notStrictEqualObject;\n          }\n          if (res.length > 30) {\n            res[26] = \"\".concat(blue, \"...\").concat(white);\n            while (res.length > 27) {\n              res.pop();\n            }\n          }\n          if (res.length === 1) {\n            _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, \"\".concat(base, \" \").concat(res[0])));\n          } else {\n            _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join(\"\\n\"), \"\\n\")));\n          }\n        } else {\n          var _res = inspectValue(actual);\n          var other = \"\";\n          var knownOperators = kReadableOperator[operator];\n          if (operator === \"notDeepEqual\" || operator === \"notEqual\") {\n            _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n            if (_res.length > 1024) {\n              _res = \"\".concat(_res.slice(0, 1021), \"...\");\n            }\n          } else {\n            other = \"\".concat(inspectValue(expected));\n            if (_res.length > 512) {\n              _res = \"\".concat(_res.slice(0, 509), \"...\");\n            }\n            if (other.length > 512) {\n              other = \"\".concat(other.slice(0, 509), \"...\");\n            }\n            if (operator === \"deepEqual\" || operator === \"equal\") {\n              _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n            } else {\n              other = \" \".concat(operator, \" \").concat(other);\n            }\n          }\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, \"\".concat(_res).concat(other)));\n        }\n      }\n      Error.stackTraceLimit = limit;\n      _this.generatedMessage = !message;\n      Object.defineProperty(_assertThisInitialized(_this), \"name\", {\n        value: \"AssertionError [ERR_ASSERTION]\",\n        enumerable: false,\n        writable: true,\n        configurable: true\n      });\n      _this.code = \"ERR_ASSERTION\";\n      _this.actual = actual;\n      _this.expected = expected;\n      _this.operator = operator;\n      if (Error.captureStackTrace) {\n        Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n      }\n      _this.stack;\n      _this.name = \"AssertionError\";\n      return _possibleConstructorReturn(_this);\n    }\n    _createClass(AssertionError2, [{\n      key: \"toString\",\n      value: function toString() {\n        return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n      }\n    }, {\n      key: inspect.custom,\n      value: function value(recurseTimes, ctx) {\n        return inspect(this, _objectSpread({}, ctx, {\n          customInspect: false,\n          depth: 0\n        }));\n      }\n    }]);\n    return AssertionError2;\n  }(_wrapNativeSuper(Error));\n  assertion_error = AssertionError;\n  return assertion_error;\n}\nvar es6ObjectAssign;\nvar hasRequiredEs6ObjectAssign;\nfunction requireEs6ObjectAssign() {\n  if (hasRequiredEs6ObjectAssign)\n    return es6ObjectAssign;\n  hasRequiredEs6ObjectAssign = 1;\n  function assign(target, firstSource) {\n    if (target === void 0 || target === null) {\n      throw new TypeError(\"Cannot convert first argument to object\");\n    }\n    var to = Object(target);\n    for (var i = 1; i < arguments.length; i++) {\n      var nextSource = arguments[i];\n      if (nextSource === void 0 || nextSource === null) {\n        continue;\n      }\n      var keysArray = Object.keys(Object(nextSource));\n      for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n        var nextKey = keysArray[nextIndex];\n        var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n        if (desc !== void 0 && desc.enumerable) {\n          to[nextKey] = nextSource[nextKey];\n        }\n      }\n    }\n    return to;\n  }\n  function polyfill2() {\n    if (!Object.assign) {\n      Object.defineProperty(Object, \"assign\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: assign\n      });\n    }\n  }\n  es6ObjectAssign = {\n    assign,\n    polyfill: polyfill2\n  };\n  return es6ObjectAssign;\n}\nvar isArguments3;\nvar hasRequiredIsArguments;\nfunction requireIsArguments() {\n  if (hasRequiredIsArguments)\n    return isArguments3;\n  hasRequiredIsArguments = 1;\n  var toStr2 = Object.prototype.toString;\n  isArguments3 = function isArguments4(value) {\n    var str = toStr2.call(value);\n    var isArgs = str === \"[object Arguments]\";\n    if (!isArgs) {\n      isArgs = str !== \"[object Array]\" && value !== null && typeof value === \"object\" && typeof value.length === \"number\" && value.length >= 0 && toStr2.call(value.callee) === \"[object Function]\";\n    }\n    return isArgs;\n  };\n  return isArguments3;\n}\nvar implementation$2;\nvar hasRequiredImplementation$2;\nfunction requireImplementation$2() {\n  if (hasRequiredImplementation$2)\n    return implementation$2;\n  hasRequiredImplementation$2 = 1;\n  var keysShim;\n  if (!Object.keys) {\n    var has = Object.prototype.hasOwnProperty;\n    var toStr2 = Object.prototype.toString;\n    var isArgs = requireIsArguments();\n    var isEnumerable = Object.prototype.propertyIsEnumerable;\n    var hasDontEnumBug = !isEnumerable.call({ toString: null }, \"toString\");\n    var hasProtoEnumBug = isEnumerable.call(function() {\n    }, \"prototype\");\n    var dontEnums = [\n      \"toString\",\n      \"toLocaleString\",\n      \"valueOf\",\n      \"hasOwnProperty\",\n      \"isPrototypeOf\",\n      \"propertyIsEnumerable\",\n      \"constructor\"\n    ];\n    var equalsConstructorPrototype = function(o) {\n      var ctor = o.constructor;\n      return ctor && ctor.prototype === o;\n    };\n    var excludedKeys = {\n      $applicationCache: true,\n      $console: true,\n      $external: true,\n      $frame: true,\n      $frameElement: true,\n      $frames: true,\n      $innerHeight: true,\n      $innerWidth: true,\n      $onmozfullscreenchange: true,\n      $onmozfullscreenerror: true,\n      $outerHeight: true,\n      $outerWidth: true,\n      $pageXOffset: true,\n      $pageYOffset: true,\n      $parent: true,\n      $scrollLeft: true,\n      $scrollTop: true,\n      $scrollX: true,\n      $scrollY: true,\n      $self: true,\n      $webkitIndexedDB: true,\n      $webkitStorageInfo: true,\n      $window: true\n    };\n    var hasAutomationEqualityBug = function() {\n      if (typeof window === \"undefined\") {\n        return false;\n      }\n      for (var k in window) {\n        try {\n          if (!excludedKeys[\"$\" + k] && has.call(window, k) && window[k] !== null && typeof window[k] === \"object\") {\n            try {\n              equalsConstructorPrototype(window[k]);\n            } catch (e) {\n              return true;\n            }\n          }\n        } catch (e) {\n          return true;\n        }\n      }\n      return false;\n    }();\n    var equalsConstructorPrototypeIfNotBuggy = function(o) {\n      if (typeof window === \"undefined\" || !hasAutomationEqualityBug) {\n        return equalsConstructorPrototype(o);\n      }\n      try {\n        return equalsConstructorPrototype(o);\n      } catch (e) {\n        return false;\n      }\n    };\n    keysShim = function keys(object) {\n      var isObject = object !== null && typeof object === \"object\";\n      var isFunction = toStr2.call(object) === \"[object Function]\";\n      var isArguments4 = isArgs(object);\n      var isString2 = isObject && toStr2.call(object) === \"[object String]\";\n      var theKeys = [];\n      if (!isObject && !isFunction && !isArguments4) {\n        throw new TypeError(\"Object.keys called on a non-object\");\n      }\n      var skipProto = hasProtoEnumBug && isFunction;\n      if (isString2 && object.length > 0 && !has.call(object, 0)) {\n        for (var i = 0; i < object.length; ++i) {\n          theKeys.push(String(i));\n        }\n      }\n      if (isArguments4 && object.length > 0) {\n        for (var j = 0; j < object.length; ++j) {\n          theKeys.push(String(j));\n        }\n      } else {\n        for (var name in object) {\n          if (!(skipProto && name === \"prototype\") && has.call(object, name)) {\n            theKeys.push(String(name));\n          }\n        }\n      }\n      if (hasDontEnumBug) {\n        var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n        for (var k = 0; k < dontEnums.length; ++k) {\n          if (!(skipConstructor && dontEnums[k] === \"constructor\") && has.call(object, dontEnums[k])) {\n            theKeys.push(dontEnums[k]);\n          }\n        }\n      }\n      return theKeys;\n    };\n  }\n  implementation$2 = keysShim;\n  return implementation$2;\n}\nvar objectKeys;\nvar hasRequiredObjectKeys;\nfunction requireObjectKeys() {\n  if (hasRequiredObjectKeys)\n    return objectKeys;\n  hasRequiredObjectKeys = 1;\n  var slice = Array.prototype.slice;\n  var isArgs = requireIsArguments();\n  var origKeys = Object.keys;\n  var keysShim = origKeys ? function keys(o) {\n    return origKeys(o);\n  } : requireImplementation$2();\n  var originalKeys = Object.keys;\n  keysShim.shim = function shimObjectKeys() {\n    if (Object.keys) {\n      var keysWorksWithArguments = function() {\n        var args = Object.keys(arguments);\n        return args && args.length === arguments.length;\n      }(1, 2);\n      if (!keysWorksWithArguments) {\n        Object.keys = function keys(object) {\n          if (isArgs(object)) {\n            return originalKeys(slice.call(object));\n          }\n          return originalKeys(object);\n        };\n      }\n    } else {\n      Object.keys = keysShim;\n    }\n    return Object.keys || keysShim;\n  };\n  objectKeys = keysShim;\n  return objectKeys;\n}\nvar hasPropertyDescriptors_1;\nvar hasRequiredHasPropertyDescriptors;\nfunction requireHasPropertyDescriptors() {\n  if (hasRequiredHasPropertyDescriptors)\n    return hasPropertyDescriptors_1;\n  hasRequiredHasPropertyDescriptors = 1;\n  var GetIntrinsic2 = requireGetIntrinsic();\n  var $defineProperty = GetIntrinsic2(\"%Object.defineProperty%\", true);\n  var hasPropertyDescriptors = function hasPropertyDescriptors2() {\n    if ($defineProperty) {\n      try {\n        $defineProperty({}, \"a\", { value: 1 });\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n    return false;\n  };\n  hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n    if (!hasPropertyDescriptors()) {\n      return null;\n    }\n    try {\n      return $defineProperty([], \"length\", { value: 1 }).length !== 1;\n    } catch (e) {\n      return true;\n    }\n  };\n  hasPropertyDescriptors_1 = hasPropertyDescriptors;\n  return hasPropertyDescriptors_1;\n}\nvar defineProperties_1;\nvar hasRequiredDefineProperties;\nfunction requireDefineProperties() {\n  if (hasRequiredDefineProperties)\n    return defineProperties_1;\n  hasRequiredDefineProperties = 1;\n  var keys = requireObjectKeys();\n  var hasSymbols3 = typeof Symbol === \"function\" && typeof Symbol(\"foo\") === \"symbol\";\n  var toStr2 = Object.prototype.toString;\n  var concat = Array.prototype.concat;\n  var origDefineProperty = Object.defineProperty;\n  var isFunction = function(fn) {\n    return typeof fn === \"function\" && toStr2.call(fn) === \"[object Function]\";\n  };\n  var hasPropertyDescriptors = requireHasPropertyDescriptors()();\n  var supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n  var defineProperty = function(object, name, value, predicate) {\n    if (name in object) {\n      if (predicate === true) {\n        if (object[name] === value) {\n          return;\n        }\n      } else if (!isFunction(predicate) || !predicate()) {\n        return;\n      }\n    }\n    if (supportsDescriptors) {\n      origDefineProperty(object, name, {\n        configurable: true,\n        enumerable: false,\n        value,\n        writable: true\n      });\n    } else {\n      object[name] = value;\n    }\n  };\n  var defineProperties = function(object, map2) {\n    var predicates = arguments.length > 2 ? arguments[2] : {};\n    var props = keys(map2);\n    if (hasSymbols3) {\n      props = concat.call(props, Object.getOwnPropertySymbols(map2));\n    }\n    for (var i = 0; i < props.length; i += 1) {\n      defineProperty(object, props[i], map2[props[i]], predicates[props[i]]);\n    }\n  };\n  defineProperties.supportsDescriptors = !!supportsDescriptors;\n  defineProperties_1 = defineProperties;\n  return defineProperties_1;\n}\nvar implementation$1;\nvar hasRequiredImplementation$1;\nfunction requireImplementation$1() {\n  if (hasRequiredImplementation$1)\n    return implementation$1;\n  hasRequiredImplementation$1 = 1;\n  var numberIsNaN = function(value) {\n    return value !== value;\n  };\n  implementation$1 = function is(a, b) {\n    if (a === 0 && b === 0) {\n      return 1 / a === 1 / b;\n    }\n    if (a === b) {\n      return true;\n    }\n    if (numberIsNaN(a) && numberIsNaN(b)) {\n      return true;\n    }\n    return false;\n  };\n  return implementation$1;\n}\nvar polyfill$1;\nvar hasRequiredPolyfill$1;\nfunction requirePolyfill$1() {\n  if (hasRequiredPolyfill$1)\n    return polyfill$1;\n  hasRequiredPolyfill$1 = 1;\n  var implementation2 = requireImplementation$1();\n  polyfill$1 = function getPolyfill() {\n    return typeof Object.is === \"function\" ? Object.is : implementation2;\n  };\n  return polyfill$1;\n}\nvar shim$1;\nvar hasRequiredShim$1;\nfunction requireShim$1() {\n  if (hasRequiredShim$1)\n    return shim$1;\n  hasRequiredShim$1 = 1;\n  var getPolyfill = requirePolyfill$1();\n  var define = requireDefineProperties();\n  shim$1 = function shimObjectIs() {\n    var polyfill2 = getPolyfill();\n    define(Object, { is: polyfill2 }, {\n      is: function testObjectIs() {\n        return Object.is !== polyfill2;\n      }\n    });\n    return polyfill2;\n  };\n  return shim$1;\n}\nvar objectIs;\nvar hasRequiredObjectIs;\nfunction requireObjectIs() {\n  if (hasRequiredObjectIs)\n    return objectIs;\n  hasRequiredObjectIs = 1;\n  var define = requireDefineProperties();\n  var callBind2 = requireCallBind();\n  var implementation2 = requireImplementation$1();\n  var getPolyfill = requirePolyfill$1();\n  var shim2 = requireShim$1();\n  var polyfill2 = callBind2(getPolyfill(), Object);\n  define(polyfill2, {\n    getPolyfill,\n    implementation: implementation2,\n    shim: shim2\n  });\n  objectIs = polyfill2;\n  return objectIs;\n}\nvar implementation;\nvar hasRequiredImplementation;\nfunction requireImplementation() {\n  if (hasRequiredImplementation)\n    return implementation;\n  hasRequiredImplementation = 1;\n  implementation = function isNaN2(value) {\n    return value !== value;\n  };\n  return implementation;\n}\nvar polyfill;\nvar hasRequiredPolyfill;\nfunction requirePolyfill() {\n  if (hasRequiredPolyfill)\n    return polyfill;\n  hasRequiredPolyfill = 1;\n  var implementation2 = requireImplementation();\n  polyfill = function getPolyfill() {\n    if (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN(\"a\")) {\n      return Number.isNaN;\n    }\n    return implementation2;\n  };\n  return polyfill;\n}\nvar shim;\nvar hasRequiredShim;\nfunction requireShim() {\n  if (hasRequiredShim)\n    return shim;\n  hasRequiredShim = 1;\n  var define = requireDefineProperties();\n  var getPolyfill = requirePolyfill();\n  shim = function shimNumberIsNaN() {\n    var polyfill2 = getPolyfill();\n    define(Number, { isNaN: polyfill2 }, {\n      isNaN: function testIsNaN() {\n        return Number.isNaN !== polyfill2;\n      }\n    });\n    return polyfill2;\n  };\n  return shim;\n}\nvar isNan;\nvar hasRequiredIsNan;\nfunction requireIsNan() {\n  if (hasRequiredIsNan)\n    return isNan;\n  hasRequiredIsNan = 1;\n  var callBind2 = requireCallBind();\n  var define = requireDefineProperties();\n  var implementation2 = requireImplementation();\n  var getPolyfill = requirePolyfill();\n  var shim2 = requireShim();\n  var polyfill2 = callBind2(getPolyfill(), Number);\n  define(polyfill2, {\n    getPolyfill,\n    implementation: implementation2,\n    shim: shim2\n  });\n  isNan = polyfill2;\n  return isNan;\n}\nvar comparisons;\nvar hasRequiredComparisons;\nfunction requireComparisons() {\n  if (hasRequiredComparisons)\n    return comparisons;\n  hasRequiredComparisons = 1;\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n  }\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n  }\n  function _iterableToArrayLimit(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = void 0;\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n        if (i && _arr.length === i)\n          break;\n      }\n    } catch (err2) {\n      _d = true;\n      _e = err2;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null)\n          _i[\"return\"]();\n      } finally {\n        if (_d)\n          throw _e;\n      }\n    }\n    return _arr;\n  }\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr))\n      return arr;\n  }\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function _typeof2(obj2) {\n        return typeof obj2;\n      };\n    } else {\n      _typeof = function _typeof2(obj2) {\n        return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n      };\n    }\n    return _typeof(obj);\n  }\n  var regexFlagsSupported = /a/g.flags !== void 0;\n  var arrayFromSet = function arrayFromSet2(set) {\n    var array = [];\n    set.forEach(function(value) {\n      return array.push(value);\n    });\n    return array;\n  };\n  var arrayFromMap = function arrayFromMap2(map2) {\n    var array = [];\n    map2.forEach(function(value, key) {\n      return array.push([key, value]);\n    });\n    return array;\n  };\n  var objectIs2 = Object.is ? Object.is : requireObjectIs();\n  var objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function() {\n    return [];\n  };\n  var numberIsNaN = Number.isNaN ? Number.isNaN : requireIsNan();\n  function uncurryThis(f) {\n    return f.call.bind(f);\n  }\n  var hasOwnProperty2 = uncurryThis(Object.prototype.hasOwnProperty);\n  var propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\n  var objectToString = uncurryThis(Object.prototype.toString);\n  var _require$types = util.types, isAnyArrayBuffer = _require$types.isAnyArrayBuffer, isArrayBufferView = _require$types.isArrayBufferView, isDate = _require$types.isDate, isMap = _require$types.isMap, isRegExp = _require$types.isRegExp, isSet = _require$types.isSet, isNativeError = _require$types.isNativeError, isBoxedPrimitive = _require$types.isBoxedPrimitive, isNumberObject = _require$types.isNumberObject, isStringObject = _require$types.isStringObject, isBooleanObject = _require$types.isBooleanObject, isBigIntObject = _require$types.isBigIntObject, isSymbolObject = _require$types.isSymbolObject, isFloat32Array = _require$types.isFloat32Array, isFloat64Array = _require$types.isFloat64Array;\n  function isNonIndex(key) {\n    if (key.length === 0 || key.length > 10)\n      return true;\n    for (var i = 0; i < key.length; i++) {\n      var code = key.charCodeAt(i);\n      if (code < 48 || code > 57)\n        return true;\n    }\n    return key.length === 10 && key >= Math.pow(2, 32);\n  }\n  function getOwnNonIndexProperties(value) {\n    return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n  }\n  /*!\n   * The buffer module from node.js, for the browser.\n   *\n   * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n   * @license  MIT\n   */\n  function compare(a, b) {\n    if (a === b) {\n      return 0;\n    }\n    var x = a.length;\n    var y = b.length;\n    for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n      if (a[i] !== b[i]) {\n        x = a[i];\n        y = b[i];\n        break;\n      }\n    }\n    if (x < y) {\n      return -1;\n    }\n    if (y < x) {\n      return 1;\n    }\n    return 0;\n  }\n  var kStrict = true;\n  var kLoose = false;\n  var kNoIterator = 0;\n  var kIsArray = 1;\n  var kIsSet = 2;\n  var kIsMap = 3;\n  function areSimilarRegExps(a, b) {\n    return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n  }\n  function areSimilarFloatArrays(a, b) {\n    if (a.byteLength !== b.byteLength) {\n      return false;\n    }\n    for (var offset = 0; offset < a.byteLength; offset++) {\n      if (a[offset] !== b[offset]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  function areSimilarTypedArrays(a, b) {\n    if (a.byteLength !== b.byteLength) {\n      return false;\n    }\n    return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n  }\n  function areEqualArrayBuffers(buf1, buf2) {\n    return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n  }\n  function isEqualBoxedPrimitive(val1, val2) {\n    if (isNumberObject(val1)) {\n      return isNumberObject(val2) && objectIs2(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n    }\n    if (isStringObject(val1)) {\n      return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n    }\n    if (isBooleanObject(val1)) {\n      return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n    }\n    if (isBigIntObject(val1)) {\n      return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n    }\n    return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n  }\n  function innerDeepEqual(val1, val2, strict, memos) {\n    if (val1 === val2) {\n      if (val1 !== 0)\n        return true;\n      return strict ? objectIs2(val1, val2) : true;\n    }\n    if (strict) {\n      if (_typeof(val1) !== \"object\") {\n        return typeof val1 === \"number\" && numberIsNaN(val1) && numberIsNaN(val2);\n      }\n      if (_typeof(val2) !== \"object\" || val1 === null || val2 === null) {\n        return false;\n      }\n      if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n        return false;\n      }\n    } else {\n      if (val1 === null || _typeof(val1) !== \"object\") {\n        if (val2 === null || _typeof(val2) !== \"object\") {\n          return val1 == val2;\n        }\n        return false;\n      }\n      if (val2 === null || _typeof(val2) !== \"object\") {\n        return false;\n      }\n    }\n    var val1Tag = objectToString(val1);\n    var val2Tag = objectToString(val2);\n    if (val1Tag !== val2Tag) {\n      return false;\n    }\n    if (Array.isArray(val1)) {\n      if (val1.length !== val2.length) {\n        return false;\n      }\n      var keys1 = getOwnNonIndexProperties(val1);\n      var keys2 = getOwnNonIndexProperties(val2);\n      if (keys1.length !== keys2.length) {\n        return false;\n      }\n      return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n    }\n    if (val1Tag === \"[object Object]\") {\n      if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n        return false;\n      }\n    }\n    if (isDate(val1)) {\n      if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n        return false;\n      }\n    } else if (isRegExp(val1)) {\n      if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n        return false;\n      }\n    } else if (isNativeError(val1) || val1 instanceof Error) {\n      if (val1.message !== val2.message || val1.name !== val2.name) {\n        return false;\n      }\n    } else if (isArrayBufferView(val1)) {\n      if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n        if (!areSimilarFloatArrays(val1, val2)) {\n          return false;\n        }\n      } else if (!areSimilarTypedArrays(val1, val2)) {\n        return false;\n      }\n      var _keys = getOwnNonIndexProperties(val1);\n      var _keys2 = getOwnNonIndexProperties(val2);\n      if (_keys.length !== _keys2.length) {\n        return false;\n      }\n      return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n    } else if (isSet(val1)) {\n      if (!isSet(val2) || val1.size !== val2.size) {\n        return false;\n      }\n      return keyCheck(val1, val2, strict, memos, kIsSet);\n    } else if (isMap(val1)) {\n      if (!isMap(val2) || val1.size !== val2.size) {\n        return false;\n      }\n      return keyCheck(val1, val2, strict, memos, kIsMap);\n    } else if (isAnyArrayBuffer(val1)) {\n      if (!areEqualArrayBuffers(val1, val2)) {\n        return false;\n      }\n    } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kNoIterator);\n  }\n  function getEnumerables(val, keys) {\n    return keys.filter(function(k) {\n      return propertyIsEnumerable(val, k);\n    });\n  }\n  function keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n    if (arguments.length === 5) {\n      aKeys = Object.keys(val1);\n      var bKeys = Object.keys(val2);\n      if (aKeys.length !== bKeys.length) {\n        return false;\n      }\n    }\n    var i = 0;\n    for (; i < aKeys.length; i++) {\n      if (!hasOwnProperty2(val2, aKeys[i])) {\n        return false;\n      }\n    }\n    if (strict && arguments.length === 5) {\n      var symbolKeysA = objectGetOwnPropertySymbols(val1);\n      if (symbolKeysA.length !== 0) {\n        var count2 = 0;\n        for (i = 0; i < symbolKeysA.length; i++) {\n          var key = symbolKeysA[i];\n          if (propertyIsEnumerable(val1, key)) {\n            if (!propertyIsEnumerable(val2, key)) {\n              return false;\n            }\n            aKeys.push(key);\n            count2++;\n          } else if (propertyIsEnumerable(val2, key)) {\n            return false;\n          }\n        }\n        var symbolKeysB = objectGetOwnPropertySymbols(val2);\n        if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count2) {\n          return false;\n        }\n      } else {\n        var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n        if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n          return false;\n        }\n      }\n    }\n    if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n      return true;\n    }\n    if (memos === void 0) {\n      memos = {\n        val1: /* @__PURE__ */ new Map(),\n        val2: /* @__PURE__ */ new Map(),\n        position: 0\n      };\n    } else {\n      var val2MemoA = memos.val1.get(val1);\n      if (val2MemoA !== void 0) {\n        var val2MemoB = memos.val2.get(val2);\n        if (val2MemoB !== void 0) {\n          return val2MemoA === val2MemoB;\n        }\n      }\n      memos.position++;\n    }\n    memos.val1.set(val1, memos.position);\n    memos.val2.set(val2, memos.position);\n    var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n    memos.val1.delete(val1);\n    memos.val2.delete(val2);\n    return areEq;\n  }\n  function setHasEqualElement(set, val1, strict, memo) {\n    var setValues = arrayFromSet(set);\n    for (var i = 0; i < setValues.length; i++) {\n      var val2 = setValues[i];\n      if (innerDeepEqual(val1, val2, strict, memo)) {\n        set.delete(val2);\n        return true;\n      }\n    }\n    return false;\n  }\n  function findLooseMatchingPrimitives(prim) {\n    switch (_typeof(prim)) {\n      case \"undefined\":\n        return null;\n      case \"object\":\n        return void 0;\n      case \"symbol\":\n        return false;\n      case \"string\":\n        prim = +prim;\n      case \"number\":\n        if (numberIsNaN(prim)) {\n          return false;\n        }\n    }\n    return true;\n  }\n  function setMightHaveLoosePrim(a, b, prim) {\n    var altValue = findLooseMatchingPrimitives(prim);\n    if (altValue != null)\n      return altValue;\n    return b.has(altValue) && !a.has(altValue);\n  }\n  function mapMightHaveLoosePrim(a, b, prim, item, memo) {\n    var altValue = findLooseMatchingPrimitives(prim);\n    if (altValue != null) {\n      return altValue;\n    }\n    var curB = b.get(altValue);\n    if (curB === void 0 && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n      return false;\n    }\n    return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n  }\n  function setEquiv(a, b, strict, memo) {\n    var set = null;\n    var aValues = arrayFromSet(a);\n    for (var i = 0; i < aValues.length; i++) {\n      var val = aValues[i];\n      if (_typeof(val) === \"object\" && val !== null) {\n        if (set === null) {\n          set = /* @__PURE__ */ new Set();\n        }\n        set.add(val);\n      } else if (!b.has(val)) {\n        if (strict)\n          return false;\n        if (!setMightHaveLoosePrim(a, b, val)) {\n          return false;\n        }\n        if (set === null) {\n          set = /* @__PURE__ */ new Set();\n        }\n        set.add(val);\n      }\n    }\n    if (set !== null) {\n      var bValues = arrayFromSet(b);\n      for (var _i = 0; _i < bValues.length; _i++) {\n        var _val = bValues[_i];\n        if (_typeof(_val) === \"object\" && _val !== null) {\n          if (!setHasEqualElement(set, _val, strict, memo))\n            return false;\n        } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n          return false;\n        }\n      }\n      return set.size === 0;\n    }\n    return true;\n  }\n  function mapHasEqualEntry(set, map2, key1, item1, strict, memo) {\n    var setValues = arrayFromSet(set);\n    for (var i = 0; i < setValues.length; i++) {\n      var key2 = setValues[i];\n      if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map2.get(key2), strict, memo)) {\n        set.delete(key2);\n        return true;\n      }\n    }\n    return false;\n  }\n  function mapEquiv(a, b, strict, memo) {\n    var set = null;\n    var aEntries = arrayFromMap(a);\n    for (var i = 0; i < aEntries.length; i++) {\n      var _aEntries$i = _slicedToArray(aEntries[i], 2), key = _aEntries$i[0], item1 = _aEntries$i[1];\n      if (_typeof(key) === \"object\" && key !== null) {\n        if (set === null) {\n          set = /* @__PURE__ */ new Set();\n        }\n        set.add(key);\n      } else {\n        var item2 = b.get(key);\n        if (item2 === void 0 && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n          if (strict)\n            return false;\n          if (!mapMightHaveLoosePrim(a, b, key, item1, memo))\n            return false;\n          if (set === null) {\n            set = /* @__PURE__ */ new Set();\n          }\n          set.add(key);\n        }\n      }\n    }\n    if (set !== null) {\n      var bEntries = arrayFromMap(b);\n      for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n        var _bEntries$_i = _slicedToArray(bEntries[_i2], 2), key = _bEntries$_i[0], item = _bEntries$_i[1];\n        if (_typeof(key) === \"object\" && key !== null) {\n          if (!mapHasEqualEntry(set, a, key, item, strict, memo))\n            return false;\n        } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n          return false;\n        }\n      }\n      return set.size === 0;\n    }\n    return true;\n  }\n  function objEquiv(a, b, strict, keys, memos, iterationType) {\n    var i = 0;\n    if (iterationType === kIsSet) {\n      if (!setEquiv(a, b, strict, memos)) {\n        return false;\n      }\n    } else if (iterationType === kIsMap) {\n      if (!mapEquiv(a, b, strict, memos)) {\n        return false;\n      }\n    } else if (iterationType === kIsArray) {\n      for (; i < a.length; i++) {\n        if (hasOwnProperty2(a, i)) {\n          if (!hasOwnProperty2(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n            return false;\n          }\n        } else if (hasOwnProperty2(b, i)) {\n          return false;\n        } else {\n          var keysA = Object.keys(a);\n          for (; i < keysA.length; i++) {\n            var key = keysA[i];\n            if (!hasOwnProperty2(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n              return false;\n            }\n          }\n          if (keysA.length !== Object.keys(b).length) {\n            return false;\n          }\n          return true;\n        }\n      }\n    }\n    for (i = 0; i < keys.length; i++) {\n      var _key = keys[i];\n      if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  function isDeepEqual(val1, val2) {\n    return innerDeepEqual(val1, val2, kLoose);\n  }\n  function isDeepStrictEqual(val1, val2) {\n    return innerDeepEqual(val1, val2, kStrict);\n  }\n  comparisons = {\n    isDeepEqual,\n    isDeepStrictEqual\n  };\n  return comparisons;\n}\nvar hasRequiredAssert;\nfunction requireAssert() {\n  if (hasRequiredAssert)\n    return assert$1.exports;\n  hasRequiredAssert = 1;\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function _typeof2(obj2) {\n        return typeof obj2;\n      };\n    } else {\n      _typeof = function _typeof2(obj2) {\n        return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n      };\n    }\n    return _typeof(obj);\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  var _require = requireErrors(), _require$codes = _require.codes, ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT, ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE, ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE, ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n  var AssertionError = requireAssertion_error();\n  var _require2 = util, inspect = _require2.inspect;\n  var _require$types = util.types, isPromise = _require$types.isPromise, isRegExp = _require$types.isRegExp;\n  var objectAssign = Object.assign ? Object.assign : requireEs6ObjectAssign().assign;\n  var objectIs2 = Object.is ? Object.is : requireObjectIs();\n  var isDeepEqual;\n  var isDeepStrictEqual;\n  function lazyLoadComparison() {\n    var comparison = requireComparisons();\n    isDeepEqual = comparison.isDeepEqual;\n    isDeepStrictEqual = comparison.isDeepStrictEqual;\n  }\n  var warned = false;\n  var assert2 = assert$1.exports = ok2;\n  var NO_EXCEPTION_SENTINEL = {};\n  function innerFail(obj) {\n    if (obj.message instanceof Error)\n      throw obj.message;\n    throw new AssertionError(obj);\n  }\n  function fail(actual, expected, message, operator, stackStartFn) {\n    var argsLen = arguments.length;\n    var internalMessage;\n    if (argsLen === 0) {\n      internalMessage = \"Failed\";\n    } else if (argsLen === 1) {\n      message = actual;\n      actual = void 0;\n    } else {\n      if (warned === false) {\n        warned = true;\n        var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n        warn(\"assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.\", \"DeprecationWarning\", \"DEP0094\");\n      }\n      if (argsLen === 2)\n        operator = \"!=\";\n    }\n    if (message instanceof Error)\n      throw message;\n    var errArgs = {\n      actual,\n      expected,\n      operator: operator === void 0 ? \"fail\" : operator,\n      stackStartFn: stackStartFn || fail\n    };\n    if (message !== void 0) {\n      errArgs.message = message;\n    }\n    var err2 = new AssertionError(errArgs);\n    if (internalMessage) {\n      err2.message = internalMessage;\n      err2.generatedMessage = true;\n    }\n    throw err2;\n  }\n  assert2.fail = fail;\n  assert2.AssertionError = AssertionError;\n  function innerOk(fn, argLen, value, message) {\n    if (!value) {\n      var generatedMessage = false;\n      if (argLen === 0) {\n        generatedMessage = true;\n        message = \"No value argument passed to `assert.ok()`\";\n      } else if (message instanceof Error) {\n        throw message;\n      }\n      var err2 = new AssertionError({\n        actual: value,\n        expected: true,\n        message,\n        operator: \"==\",\n        stackStartFn: fn\n      });\n      err2.generatedMessage = generatedMessage;\n      throw err2;\n    }\n  }\n  function ok2() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    innerOk.apply(void 0, [ok2, args.length].concat(args));\n  }\n  assert2.ok = ok2;\n  assert2.equal = function equal(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (actual != expected) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"==\",\n        stackStartFn: equal\n      });\n    }\n  };\n  assert2.notEqual = function notEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (actual == expected) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"!=\",\n        stackStartFn: notEqual\n      });\n    }\n  };\n  assert2.deepEqual = function deepEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (isDeepEqual === void 0)\n      lazyLoadComparison();\n    if (!isDeepEqual(actual, expected)) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"deepEqual\",\n        stackStartFn: deepEqual\n      });\n    }\n  };\n  assert2.notDeepEqual = function notDeepEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (isDeepEqual === void 0)\n      lazyLoadComparison();\n    if (isDeepEqual(actual, expected)) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"notDeepEqual\",\n        stackStartFn: notDeepEqual\n      });\n    }\n  };\n  assert2.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (isDeepEqual === void 0)\n      lazyLoadComparison();\n    if (!isDeepStrictEqual(actual, expected)) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"deepStrictEqual\",\n        stackStartFn: deepStrictEqual\n      });\n    }\n  };\n  assert2.notDeepStrictEqual = notDeepStrictEqual;\n  function notDeepStrictEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (isDeepEqual === void 0)\n      lazyLoadComparison();\n    if (isDeepStrictEqual(actual, expected)) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"notDeepStrictEqual\",\n        stackStartFn: notDeepStrictEqual\n      });\n    }\n  }\n  assert2.strictEqual = function strictEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (!objectIs2(actual, expected)) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"strictEqual\",\n        stackStartFn: strictEqual\n      });\n    }\n  };\n  assert2.notStrictEqual = function notStrictEqual(actual, expected, message) {\n    if (arguments.length < 2) {\n      throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n    }\n    if (objectIs2(actual, expected)) {\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: \"notStrictEqual\",\n        stackStartFn: notStrictEqual\n      });\n    }\n  };\n  var Comparison = function Comparison2(obj, keys, actual) {\n    var _this = this;\n    _classCallCheck(this, Comparison2);\n    keys.forEach(function(key) {\n      if (key in obj) {\n        if (actual !== void 0 && typeof actual[key] === \"string\" && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n          _this[key] = actual[key];\n        } else {\n          _this[key] = obj[key];\n        }\n      }\n    });\n  };\n  function compareExceptionKey(actual, expected, key, message, keys, fn) {\n    if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n      if (!message) {\n        var a = new Comparison(actual, keys);\n        var b = new Comparison(expected, keys, actual);\n        var err2 = new AssertionError({\n          actual: a,\n          expected: b,\n          operator: \"deepStrictEqual\",\n          stackStartFn: fn\n        });\n        err2.actual = actual;\n        err2.expected = expected;\n        err2.operator = fn.name;\n        throw err2;\n      }\n      innerFail({\n        actual,\n        expected,\n        message,\n        operator: fn.name,\n        stackStartFn: fn\n      });\n    }\n  }\n  function expectedException(actual, expected, msg, fn) {\n    if (typeof expected !== \"function\") {\n      if (isRegExp(expected))\n        return expected.test(actual);\n      if (arguments.length === 2) {\n        throw new ERR_INVALID_ARG_TYPE(\"expected\", [\"Function\", \"RegExp\"], expected);\n      }\n      if (_typeof(actual) !== \"object\" || actual === null) {\n        var err2 = new AssertionError({\n          actual,\n          expected,\n          message: msg,\n          operator: \"deepStrictEqual\",\n          stackStartFn: fn\n        });\n        err2.operator = fn.name;\n        throw err2;\n      }\n      var keys = Object.keys(expected);\n      if (expected instanceof Error) {\n        keys.push(\"name\", \"message\");\n      } else if (keys.length === 0) {\n        throw new ERR_INVALID_ARG_VALUE(\"error\", expected, \"may not be an empty object\");\n      }\n      if (isDeepEqual === void 0)\n        lazyLoadComparison();\n      keys.forEach(function(key) {\n        if (typeof actual[key] === \"string\" && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n          return;\n        }\n        compareExceptionKey(actual, expected, key, msg, keys, fn);\n      });\n      return true;\n    }\n    if (expected.prototype !== void 0 && actual instanceof expected) {\n      return true;\n    }\n    if (Error.isPrototypeOf(expected)) {\n      return false;\n    }\n    return expected.call({}, actual) === true;\n  }\n  function getActual(fn) {\n    if (typeof fn !== \"function\") {\n      throw new ERR_INVALID_ARG_TYPE(\"fn\", \"Function\", fn);\n    }\n    try {\n      fn();\n    } catch (e) {\n      return e;\n    }\n    return NO_EXCEPTION_SENTINEL;\n  }\n  function checkIsPromise(obj) {\n    return isPromise(obj) || obj !== null && _typeof(obj) === \"object\" && typeof obj.then === \"function\" && typeof obj.catch === \"function\";\n  }\n  function waitForActual(promiseFn) {\n    return Promise.resolve().then(function() {\n      var resultPromise;\n      if (typeof promiseFn === \"function\") {\n        resultPromise = promiseFn();\n        if (!checkIsPromise(resultPromise)) {\n          throw new ERR_INVALID_RETURN_VALUE(\"instance of Promise\", \"promiseFn\", resultPromise);\n        }\n      } else if (checkIsPromise(promiseFn)) {\n        resultPromise = promiseFn;\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\"promiseFn\", [\"Function\", \"Promise\"], promiseFn);\n      }\n      return Promise.resolve().then(function() {\n        return resultPromise;\n      }).then(function() {\n        return NO_EXCEPTION_SENTINEL;\n      }).catch(function(e) {\n        return e;\n      });\n    });\n  }\n  function expectsError(stackStartFn, actual, error, message) {\n    if (typeof error === \"string\") {\n      if (arguments.length === 4) {\n        throw new ERR_INVALID_ARG_TYPE(\"error\", [\"Object\", \"Error\", \"Function\", \"RegExp\"], error);\n      }\n      if (_typeof(actual) === \"object\" && actual !== null) {\n        if (actual.message === error) {\n          throw new ERR_AMBIGUOUS_ARGUMENT(\"error/message\", 'The error message \"'.concat(actual.message, '\" is identical to the message.'));\n        }\n      } else if (actual === error) {\n        throw new ERR_AMBIGUOUS_ARGUMENT(\"error/message\", 'The error \"'.concat(actual, '\" is identical to the message.'));\n      }\n      message = error;\n      error = void 0;\n    } else if (error != null && _typeof(error) !== \"object\" && typeof error !== \"function\") {\n      throw new ERR_INVALID_ARG_TYPE(\"error\", [\"Object\", \"Error\", \"Function\", \"RegExp\"], error);\n    }\n    if (actual === NO_EXCEPTION_SENTINEL) {\n      var details = \"\";\n      if (error && error.name) {\n        details += \" (\".concat(error.name, \")\");\n      }\n      details += message ? \": \".concat(message) : \".\";\n      var fnType = stackStartFn.name === \"rejects\" ? \"rejection\" : \"exception\";\n      innerFail({\n        actual: void 0,\n        expected: error,\n        operator: stackStartFn.name,\n        message: \"Missing expected \".concat(fnType).concat(details),\n        stackStartFn\n      });\n    }\n    if (error && !expectedException(actual, error, message, stackStartFn)) {\n      throw actual;\n    }\n  }\n  function expectsNoError(stackStartFn, actual, error, message) {\n    if (actual === NO_EXCEPTION_SENTINEL)\n      return;\n    if (typeof error === \"string\") {\n      message = error;\n      error = void 0;\n    }\n    if (!error || expectedException(actual, error)) {\n      var details = message ? \": \".concat(message) : \".\";\n      var fnType = stackStartFn.name === \"doesNotReject\" ? \"rejection\" : \"exception\";\n      innerFail({\n        actual,\n        expected: error,\n        operator: stackStartFn.name,\n        message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + 'Actual message: \"'.concat(actual && actual.message, '\"'),\n        stackStartFn\n      });\n    }\n    throw actual;\n  }\n  assert2.throws = function throws(promiseFn) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n  };\n  assert2.rejects = function rejects(promiseFn) {\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    return waitForActual(promiseFn).then(function(result) {\n      return expectsError.apply(void 0, [rejects, result].concat(args));\n    });\n  };\n  assert2.doesNotThrow = function doesNotThrow(fn) {\n    for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n      args[_key4 - 1] = arguments[_key4];\n    }\n    expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n  };\n  assert2.doesNotReject = function doesNotReject(fn) {\n    for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n      args[_key5 - 1] = arguments[_key5];\n    }\n    return waitForActual(fn).then(function(result) {\n      return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n    });\n  };\n  assert2.ifError = function ifError(err2) {\n    if (err2 !== null && err2 !== void 0) {\n      var message = \"ifError got unwanted exception: \";\n      if (_typeof(err2) === \"object\" && typeof err2.message === \"string\") {\n        if (err2.message.length === 0 && err2.constructor) {\n          message += err2.constructor.name;\n        } else {\n          message += err2.message;\n        }\n      } else {\n        message += inspect(err2);\n      }\n      var newErr = new AssertionError({\n        actual: err2,\n        expected: null,\n        operator: \"ifError\",\n        message,\n        stackStartFn: ifError\n      });\n      var origStack = err2.stack;\n      if (typeof origStack === \"string\") {\n        var tmp2 = origStack.split(\"\\n\");\n        tmp2.shift();\n        var tmp1 = newErr.stack.split(\"\\n\");\n        for (var i = 0; i < tmp2.length; i++) {\n          var pos = tmp1.indexOf(tmp2[i]);\n          if (pos !== -1) {\n            tmp1 = tmp1.slice(0, pos);\n            break;\n          }\n        }\n        newErr.stack = \"\".concat(tmp1.join(\"\\n\"), \"\\n\").concat(tmp2.join(\"\\n\"));\n      }\n      throw newErr;\n    }\n  };\n  function strict() {\n    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n      args[_key6] = arguments[_key6];\n    }\n    innerOk.apply(void 0, [strict, args.length].concat(args));\n  }\n  assert2.strict = objectAssign(strict, assert2, {\n    equal: assert2.strictEqual,\n    deepEqual: assert2.deepStrictEqual,\n    notEqual: assert2.notStrictEqual,\n    notDeepEqual: assert2.notDeepStrictEqual\n  });\n  assert2.strict.strict = assert2.strict;\n  return assert$1.exports;\n}\nvar assertExports = requireAssert();\nconst assert = /* @__PURE__ */ getDefaultExportFromCjs(assertExports);\nclass Characters {\n  static unicode() {\n    return {\n      hbar: \"─\",\n      vbar: \"│\",\n      xbar: \"┼\",\n      vbar_break: \"·\",\n      vbar_gap: \"⋮\",\n      uarrow: \"▲\",\n      rarrow: \"▶\",\n      ltop: \"╭\",\n      mtop: \"┬\",\n      rtop: \"╮\",\n      lbot: \"╰\",\n      mbot: \"┴\",\n      rbot: \"╯\",\n      lbox: \"[\",\n      rbox: \"]\",\n      lcross: \"├\",\n      rcross: \"┤\",\n      underbar: \"┬\",\n      underline: \"─\"\n    };\n  }\n  static ascii() {\n    return {\n      hbar: \"-\",\n      vbar: \"|\",\n      xbar: \"+\",\n      vbar_break: \"*\",\n      vbar_gap: \":\",\n      uarrow: \"^\",\n      rarrow: \">\",\n      ltop: \",\",\n      mtop: \"v\",\n      rtop: \".\",\n      lbot: \"`\",\n      mbot: \"^\",\n      rbot: \"'\",\n      lbox: \"[\",\n      rbox: \"]\",\n      lcross: \"|\",\n      rcross: \"|\",\n      underbar: \"|\",\n      underline: \"^\"\n    };\n  }\n}\nvar LabelKind = /* @__PURE__ */ ((LabelKind2) => {\n  LabelKind2[\"Inline\"] = \"Inline\";\n  LabelKind2[\"Multiline\"] = \"Multiline\";\n  return LabelKind2;\n})(LabelKind || {});\nclass LabelInfo {\n  constructor(kind, label) {\n    this.kind = kind;\n    this.label = label;\n  }\n}\nclass ReportBuilder {\n  constructor(kind, code, msg, note, help, location, labels, config) {\n    this.kind = kind;\n    this.code = code;\n    this.msg = msg;\n    this.note = note;\n    this.help = help;\n    this.location = location;\n    this.labels = labels;\n    this.config = config;\n  }\n  /// Give this report a numerical code that may be used to more precisely look up the error in documentation.\n  with_code(code) {\n    this.code = some(code.toString().padStart(2, \"0\"));\n    return this;\n  }\n  /// Set the message of this report.\n  set_message(msg) {\n    this.msg = some(msg);\n  }\n  /// Add a message to this report.\n  with_message(msg) {\n    this.msg = some(msg);\n    return this;\n  }\n  /// Set the note of this report.\n  set_note(note) {\n    this.note = some(note);\n  }\n  /// Set the note of this report.\n  with_note(note) {\n    this.set_note(note);\n    return this;\n  }\n  /// Set the help message of this report.\n  set_help(note) {\n    this.help = some(note);\n  }\n  /// Set the help message of this report.\n  with_help(note) {\n    this.set_help(note);\n    return this;\n  }\n  /// Add a label to the report.\n  add_label(label) {\n    this.labels.push(label);\n  }\n  /// Add multiple labels to the report.\n  add_labels(labels) {\n    this.labels.push(...labels);\n  }\n  /// Add a label to the report.\n  with_label(label) {\n    this.add_label(label);\n    return this;\n  }\n  /// Use the given [`Config`] to determine diagnostic attributes.\n  with_config(config) {\n    this.config = config;\n    return this;\n  }\n  /// Finish building the [`Report`].\n  finish() {\n    const r = new Report(\n      this.kind,\n      this.code,\n      this.msg,\n      this.note,\n      this.help,\n      this.location,\n      this.labels,\n      this.config\n    );\n    return r;\n  }\n}\nclass ReportKind {\n  constructor(...args) {\n  }\n  fmt(f) {\n    if (this instanceof ReportKind.Error)\n      return write(f.buf, \"Error\");\n    if (this instanceof ReportKind.Warning)\n      return write(f.buf, \"Warning\");\n    if (this instanceof ReportKind.Advice)\n      return write(f.buf, \"Advice\");\n    if (this instanceof ReportKind.Custom)\n      return write(f.buf, \"{}\", this.s);\n    throw \"invalid ReportKind\";\n  }\n  static {\n    this.Error = class Error extends ReportKind {\n    };\n  }\n  static {\n    this.Warning = class Warning extends ReportKind {\n    };\n  }\n  static {\n    this.Advice = class Advice extends ReportKind {\n    };\n  }\n  static {\n    this.Custom = class Custom extends ReportKind {\n      constructor(s, color) {\n        super();\n        this.s = s;\n        this.color = color;\n      }\n    };\n  }\n}\nclass Cache {\n  static from(init) {\n    if (Source.is(init))\n      return init;\n    if (FnCache.is(init))\n      return init;\n    const [id, source] = init;\n    return new IdSource(source.lines(), source.len(), init);\n  }\n}\nclass Line {\n  constructor(_offset, _len, _chars) {\n    this._offset = _offset;\n    this._len = _len;\n    this._chars = _chars;\n  }\n  /// Get the offset of this line in the original [`Source`] (i.e: the number of characters that precede it).\n  offset() {\n    return this._offset;\n  }\n  /// Get the character length of this line.\n  len() {\n    return this._len;\n  }\n  /// Get the offset span of this line in the original [`Source`].\n  span() {\n    return new Range(this.offset(), this.offset() + this.len());\n  }\n  /// Return an iterator over the characters in the line, excluding trailing whitespace.\n  chars() {\n    return this._chars;\n  }\n}\nclass Source {\n  constructor(_lines, _len) {\n    this._lines = _lines;\n    this._len = _len;\n  }\n  /// Generate a [`Source`] from the given [`str`].\n  ///\n  /// Note that this function can be expensive for long strings. Use an implementor of [`Cache`] where possible.\n  static from(s, ...args) {\n    let offset = 0;\n    const lines = s.split(\"\\n\").map((line) => {\n      let l = new Line(\n        offset,\n        line.length + 1,\n        // line.chars().count() + 1,\n        line.trimEnd()\n      );\n      offset += l.len();\n      return l;\n    });\n    return new Source(lines, offset);\n  }\n  /// Get the length of the total number of characters in the source.\n  len() {\n    return this._len;\n  }\n  /// Return an iterator over the characters in the source.\n  chars() {\n    return this.lines().map((l) => l.chars()).flat();\n  }\n  /// Get access to a specific, zero-indexed [`Line`].\n  line(idx) {\n    const line = this.lines()[idx];\n    return line === void 0 ? none() : some(line);\n  }\n  /// Return an iterator over the [`Line`]s in this source.\n  lines() {\n    return this._lines;\n  }\n  /// Get the line that the given offset appears on, and the line/column numbers of the offset.\n  ///\n  /// Note that the line/column numbers are zero-indexed.\n  get_offset_line(offset) {\n    if (offset <= this.len()) {\n      let idx = binary_search_by_key(this.lines(), offset, (line2) => line2.offset()).unwrap_or_else(\n        (idx2) => Math.max(0, idx2.saturating_sub(1))\n      );\n      let line = this.lines()[idx];\n      assert(\n        line && offset >= line.offset(),\n        format(\"offset = {}, line.offset = {}, idx = {}\", offset, line?.offset() ?? Infinity, idx)\n      );\n      const os = line.offset();\n      return some([line, idx, offset - os]);\n    } else {\n      return none();\n    }\n  }\n  /// Get the range of lines that this span runs across.\n  ///\n  /// The resulting range is guaranteed to contain valid line indices (i.e: those that can be used for\n  /// [`Source::line`]).\n  get_line_range(span) {\n    let start = this.get_offset_line(span.start).map_or(0, ([_, l, __]) => l);\n    let end = this.get_offset_line(span.end.saturating_sub(1).max(span.start)).map_or(\n      this.lines().length,\n      ([_, l, __]) => l + 1\n    );\n    return new Range(start, end);\n  }\n  fetch(_) {\n    return ok(this);\n  }\n  display(_) {\n    return none();\n  }\n  static is(other) {\n    return other instanceof Source;\n  }\n}\nclass IdSource extends Source {\n  constructor(_lines, _len, data) {\n    super(_lines, _len);\n    this.data = data;\n  }\n  fetch(id) {\n    return id === this.data[0] ? ok(this.data[1]) : err(format(\"Failed to fetch source '{}'\", id));\n  }\n  display(id) {\n    return some(new Display(id));\n  }\n}\nclass FnCache {\n  constructor(sources2, get) {\n    this.sources = sources2;\n    this.get = get;\n  }\n  /// Create a new [`FnCache`] with the given fetch function.\n  static new(get) {\n    return new FnCache(/* @__PURE__ */ new Map(), get);\n  }\n  /// Pre-insert a selection of [`Source`]s into this cache.\n  with_sources(sources2) {\n    for (let [id, src2] of sources2) {\n      this.sources.set(id, src2);\n    }\n    return this;\n  }\n  fetch(id) {\n    const entry = this.sources.get(id);\n    if (entry !== void 0)\n      return ok(entry);\n    const source = Source.from(this.get(id));\n    this.sources.set(id, source);\n    return ok(source);\n  }\n  display(id) {\n    return some(id);\n  }\n  static is(other) {\n    return other instanceof FnCache;\n  }\n}\nclass SourceGroup {\n  constructor(src_id, span, labels) {\n    this.src_id = src_id;\n    this.span = span;\n    this.labels = labels;\n  }\n}\nclass Report {\n  constructor(kind, code, msg, note, help, location, labels, config) {\n    this.kind = kind;\n    this.code = code;\n    this.msg = msg;\n    this.note = note;\n    this.help = help;\n    this.location = location;\n    this.labels = labels;\n    this.config = config;\n  }\n  /// Begin building a new [`Report`].\n  static build(kind, src_id, offset) {\n    const builder = new ReportBuilder(\n      kind,\n      none(),\n      none(),\n      none(),\n      none(),\n      [Option.from(src_id), offset],\n      [],\n      Config.default()\n    );\n    return builder;\n  }\n  /// Write this diagnostic out to `stderr`.\n  eprint(init) {\n    const cache = Cache.from(init);\n    this.write(cache, stderrWriter);\n  }\n  /// Write this diagnostic out to `stdout`.\n  ///\n  /// In most cases, [`Report::eprint`] is the\n  /// ['more correct'](https://en.wikipedia.org/wiki/Standard_streams#Standard_error_(stderr)) function to use.\n  print(init) {\n    const cache = Cache.from(init);\n    this.write(cache, stdoutWriter);\n  }\n  printTo(init, writer) {\n    const cache = Cache.from(init);\n    this.write(cache, writer);\n  }\n  get_source_groups(cache) {\n    let groups = [];\n    for (let label of this.labels) {\n      let src_display = cache.display(label.span.source());\n      let res = cache.fetch(label.span.source());\n      if (res.is_err()) {\n        console.error(\"Unable to fetch source '{}': {}\", src_display, res.unwrap());\n        continue;\n      }\n      let src2 = res.unwrap();\n      assert(label.span.start <= label.span.end, \"Label start is after its end\");\n      let start_line = src2.get_offset_line(label.span.start).map(([_, l, __]) => l);\n      let end_line = src2.get_offset_line(label.span.end.saturating_sub(1).max(label.span.start)).map(([_, l, __]) => l);\n      let label_info = new LabelInfo(\n        start_line.equal(end_line) ? LabelKind.Inline : LabelKind.Multiline,\n        label\n      );\n      const group = groups.find((g2) => g2.src_id === label.span.source());\n      if (group) {\n        group.span.start = group.span.start.min(label.span.start);\n        group.span.end = group.span.end.max(label.span.end);\n        group.labels.push(label_info);\n      } else {\n        groups.push(\n          new SourceGroup(label.span.source(), new Range(label.span.start, label.span.end), [\n            label_info\n          ])\n        );\n      }\n    }\n    return groups;\n  }\n  /// Write this diagnostic to an implementor of [`Write`].\n  ///\n  /// If you wish to write to `stderr` or `stdout`, you can do so via [`Report::eprint`] or [`Report::print`] respectively.\n  write(cache, w) {\n    let draw = match(this.config.char_set, [\n      [CharSet.Unicode, () => Characters.unicode()],\n      [CharSet.Ascii, () => Characters.ascii()]\n    ]);\n    let code = this.code ? format(\"[E{}] \", this.code) : \"\";\n    let id = format(\"{}{}:\", code, this.kind.name);\n    let kind_color = match(this.kind, [\n      [ReportKind.Error, () => this.config.error_color()],\n      [ReportKind.Warning, () => this.config.warning_color()],\n      [ReportKind.Advice, () => this.config.advice_color()],\n      [ReportKind.Custom, (kind) => kind.color]\n    ]);\n    writeln(w, \"{} {}\", new Display(id).fg(kind_color), new Show(this.msg));\n    let groups = this.get_source_groups(cache);\n    let filtered_groups = groups.filter_map(({ span, src_id }) => {\n      let src_name = cache.display(src_id).map((d) => d.toString()).unwrap_or_else(() => \"<unknown>\");\n      let res = cache.fetch(src_id);\n      if (res.is_err()) {\n        eprintln(\"Unable to fetch source {}: {}\", src_name, res.unwrap());\n        return null;\n      }\n      let src2 = res.unwrap();\n      let line_range = src2.get_line_range(span);\n      let iter = rangeIter(1, Infinity);\n      iter = map(iter, (x) => Math.pow(10, x));\n      iter = take_while(iter, (x) => {\n        const d = Math.floor(line_range.end / x);\n        return d !== 0;\n      });\n      const cnt = count(iter);\n      return cnt + 1;\n    });\n    let line_no_width = max(filtered_groups) ?? 0;\n    let groups_len = groups.length;\n    for (let [group_idx, { src_id, span, labels }] of enumerate(groups)) {\n      let src_name = cache.display(src_id).map((d) => d.toString()).unwrap_or_else(() => \"<unknown>\");\n      let res = cache.fetch(src_id);\n      if (res.is_err()) {\n        eprintln(\"Unable to fetch source {}: {}\", src_name, res.unwrap());\n        continue;\n      }\n      let src2 = res.unwrap();\n      let line_range = src2.get_line_range(span);\n      let location = src_id === this.location[0] ? this.location[1] : labels[0].label.span.start;\n      let [line_no, col_no] = src2.get_offset_line(location).map(([_, idx, col]) => [format(\"{}\", idx + 1), format(\"{}\", col + 1)]).unwrap_or_else(() => [\"?\", \"?\"]);\n      let line_ref = format(\":{}:{}\", line_no, col_no);\n      writeln(\n        w,\n        \"{}{}{}{}{}{}{}\",\n        new Show([\" \", line_no_width + 2]),\n        new Display(group_idx === 0 ? draw.ltop : draw.lcross).fg(this.config.margin_color()),\n        new Display(draw.hbar).fg(this.config.margin_color()),\n        new Display(draw.lbox).fg(this.config.margin_color()),\n        src_name,\n        line_ref,\n        new Display(draw.rbox).fg(this.config.margin_color())\n      );\n      if (!this.config.compact) {\n        writeln(\n          w,\n          \"{}{}\",\n          new Show([\" \", line_no_width + 2]),\n          new Display(draw.vbar).fg(this.config.margin_color())\n        );\n      }\n      class LineLabel {\n        constructor(col, label, multi, draw_msg) {\n          this.col = col;\n          this.label = label;\n          this.multi = multi;\n          this.draw_msg = draw_msg;\n          this.col = Math.floor(col);\n        }\n      }\n      let multi_labels = [];\n      for (let label_info of labels) {\n        if (label_info.kind === LabelKind.Multiline) {\n          multi_labels.push(label_info.label);\n        }\n      }\n      multi_labels.sort((a, b) => b.span.len() - a.span.len());\n      let write_margin = (w2, idx, is_line, is_ellipsis2, draw_labels, report_row, line_labels, margin_label) => {\n        let line_no_margin;\n        if (is_line && !is_ellipsis2) {\n          let line_no2 = format(\"{}\", idx + 1);\n          line_no_margin = format(\n            \"{}{} {}\",\n            new Show([\" \", line_no_width - line_no2.length]),\n            line_no2,\n            draw.vbar\n          );\n        } else {\n          line_no_margin = format(\n            \"{}{}\",\n            new Show([\" \", line_no_width + 1]),\n            is_ellipsis2 ? draw.vbar_gap : draw.vbar_break\n          );\n        }\n        write(\n          w2,\n          \" {}{}\",\n          new Display(line_no_margin).fg(this.config.margin_color()),\n          new Show(some(\" \").filter(() => !this.config.compact))\n        );\n        if (draw_labels) {\n          for (let col of range(0, multi_labels.length + bton(multi_labels.length > 0))) {\n            let corner = none();\n            let hbar = none();\n            let vbar = none();\n            let margin_ptr = none();\n            let multi_label = Option.from(multi_labels[col]);\n            let line_span = src2.line(idx).unwrap().span();\n            for (let [i, label] of enumerate(\n              multi_labels.slice(0, (col + 1).min(multi_labels.length))\n            )) {\n              let margin = margin_label.filter((m) => label === m.label);\n              if (label.span.start <= line_span.end && label.span.end > line_span.start) {\n                let is_parent = i !== col;\n                let is_start = line_span.contains(label.span.start);\n                let is_end = line_span.contains(label.last_offset());\n                if (margin.filter(() => is_line).is_some()) {\n                  let _margin = margin.filter(() => is_line);\n                  margin_ptr = some([_margin.unwrap(), is_start]);\n                } else if (!is_start && (!is_end || is_line)) {\n                  vbar = vbar.or(some(label).filter(() => !is_parent));\n                } else {\n                  if (report_row.is_some() && report_row.map_or(false, (o) => isNumber(o[0]) && isBoolean(o[1]))) {\n                    let [_report_row, is_arrow] = report_row.unwrap();\n                    let label_row = Option.from(\n                      line_labels.enumerate().find(([_, l]) => label === l.label)\n                    ).map_or(0, ([r, _]) => r);\n                    if (_report_row === label_row) {\n                      if (margin.is_some()) {\n                        vbar = some(margin.unwrap().label).filter(() => col === i);\n                        if (is_start) {\n                          continue;\n                        }\n                      }\n                      if (is_arrow) {\n                        hbar = some(label);\n                        if (!is_parent) {\n                          corner = some([label, is_start]);\n                        }\n                      } else if (!is_start) {\n                        vbar = vbar.or(some(label).filter(() => !is_parent));\n                      }\n                    } else {\n                      vbar = vbar.or(\n                        some(label).filter(\n                          () => !is_parent && !!(bton(is_start) ^ bton(_report_row < label_row))\n                        )\n                      );\n                    }\n                  }\n                }\n              }\n            }\n            if (margin_ptr.is_some() && margin_ptr.map_or(false, (o) => Label.is(o[0]) && isBoolean(o[1])) && is_line) {\n              let [margin, _is_start] = margin_ptr.unwrap();\n              if (_is_start) {\n                let is_col = multi_label.map_or(false, (ml) => ml === margin.label);\n                let is_limit = col + 1 === multi_labels.length;\n                if (!is_col && !is_limit) {\n                  hbar = hbar.or(some(margin.label));\n                }\n              }\n            }\n            hbar = hbar.filter(\n              (l) => margin_label.map_or(true, (margin) => margin.label !== l) || !is_line\n            );\n            const getCorners = () => {\n              if (corner.is_some() && Array.isArray(corner.unwrap()) && Label.is(corner.unwrap()[0]) && isBoolean(corner.unwrap()[1])) {\n                let [label, is_start] = corner.unwrap();\n                return [\n                  new Display(is_start ? draw.ltop : draw.lbot).fg(label.color),\n                  new Display(draw.hbar).fg(label.color)\n                ];\n              } else if (hbar.filter(() => vbar.is_some() && !this.config.cross_gap).is_some()) {\n                let label = hbar.filter(() => vbar.is_some() && !this.config.cross_gap).unwrap();\n                return [\n                  new Display(draw.xbar).fg(label.color),\n                  new Display(draw.hbar).fg(label.color)\n                ];\n              } else if (hbar.is_some()) {\n                let label = hbar.unwrap();\n                const d = new Display(draw.hbar).fg(label.color);\n                return [d, d];\n              } else if (vbar.is_some()) {\n                let label = vbar.unwrap();\n                let vb = new Display(is_ellipsis2 ? draw.vbar_gap : draw.vbar);\n                return [vb.fg(label.color), new Display(\" \").fg(none())];\n              } else if (margin_ptr.is_some() && is_line) {\n                let [margin, is_start] = margin_ptr.unwrap();\n                let is_col = multi_label.map_or(false, (ml) => ml === margin.label);\n                let is_limit = col === multi_labels.length;\n                return [\n                  new Display(\n                    is_limit ? draw.rarrow : is_col ? is_start ? draw.ltop : draw.lcross : draw.hbar\n                  ).fg(margin.label.color),\n                  new Display(!is_limit ? draw.hbar : \" \").fg(margin.label.color)\n                ];\n              } else {\n                const d = new Display(\" \").fg(none());\n                return [d, d];\n              }\n            };\n            let [a, b] = getCorners();\n            write(w2, \"{}\", a);\n            if (!this.config.compact) {\n              write(w2, \"{}\", b);\n            }\n          }\n        }\n      };\n      let is_ellipsis = false;\n      for (let idx of range(line_range.start, line_range.end)) {\n        if (src2.line(idx).is_none()) {\n          continue;\n        }\n        let line = src2.line(idx).unwrap();\n        const f_labels = multi_labels.enumerate().filter_map(([_i, label]) => {\n          let is_start = line.span().contains(label.span.start);\n          let is_end = line.span().contains(label.last_offset());\n          if (is_start) {\n            return new LineLabel(label.span.start - line.offset(), label, true, false);\n          } else if (is_end) {\n            return new LineLabel(label.last_offset() - line.offset(), label, true, true);\n          } else {\n            return null;\n          }\n        });\n        let margin_label = min_by_key(f_labels, (ll) => ll.col);\n        let line_labels = multi_labels.enumerate().filter_map(([_i, label]) => {\n          let is_start = line.span().contains(label.span.start);\n          let is_end = line.span().contains(label.last_offset());\n          if (is_start && margin_label.map_or(true, (m) => label !== m.label)) {\n            return new LineLabel(\n              label.span.start - line.offset(),\n              label,\n              true,\n              false\n              // Multi-line spans don;t have their messages drawn at the start\n            );\n          } else if (is_end) {\n            return new LineLabel(\n              label.last_offset() - line.offset(),\n              label,\n              true,\n              true\n              // Multi-line spans have their messages drawn at the end\n            );\n          } else {\n            return null;\n          }\n        });\n        for (let label_info of labels.filter(\n          (l) => l.label.span.start >= line.span().start && l.label.span.end <= line.span().end\n        )) {\n          if (label_info.kind === LabelKind.Inline) {\n            let col = match(this.config.label_attach, [\n              [LabelAttach.Start, () => label_info.label.span.start],\n              [\n                LabelAttach.Middle,\n                () => (label_info.label.span.start + label_info.label.span.end) / 2\n              ],\n              [LabelAttach.End, () => label_info.label.last_offset()]\n            ]);\n            line_labels.push(\n              new LineLabel(\n                col.max(label_info.label.span.start) - line.offset(),\n                label_info.label,\n                false,\n                true\n              )\n            );\n          }\n        }\n        if (line_labels.length === 0 && margin_label.is_none()) {\n          let within_label = multi_labels.some((label) => label.span.contains(line.span().start));\n          if (!is_ellipsis && within_label) {\n            is_ellipsis = true;\n          } else {\n            if (!this.config.compact && !is_ellipsis) {\n              write_margin(w, idx, false, is_ellipsis, false, none(), [], none());\n              write(w, \"\\n\");\n            }\n            is_ellipsis = true;\n            continue;\n          }\n        } else {\n          is_ellipsis = false;\n        }\n        sort_by_key(line_labels, (ll) => ll.label.order);\n        sort_by_key(line_labels, (ll) => ll.col);\n        sort_by_key(line_labels, (ll) => bton(!ll.label.span.start));\n        let arrow_end_space = this.config.compact ? 1 : 2;\n        let arrow_len = line_labels.reduce((l, ll) => {\n          return ll.multi ? line.len() : l.max(ll.label.span.end.saturating_sub(line.offset()));\n        }, 0) + arrow_end_space;\n        let get_vbar = (col, row) => Option.from(\n          line_labels.enumerate().filter(\n            ([_, ll]) => ll.label.msg.is_some() && margin_label.map_or(true, (m) => ll.label !== m.label)\n          ).find(\n            ([j, ll]) => ll.col === col && (row <= j && !ll.multi || row <= j && ll.multi)\n          )\n        ).map(([_, ll]) => ll);\n        let get_highlight = (col) => min_by_key(\n          margin_label.iter().map((ll) => ll.label).chain(multi_labels.map((l) => l)).chain(line_labels.map((l) => l.label)).filter((l) => l.span.contains(line.offset() + col)),\n          // Prioritise displaying smaller spans\n          // .min_by_key((l: any) => [-l.priority, l.span.len()]);\n          // .min_by_key(l => l.span.len()));\n          (l) => -l.priority + l.span.len()\n        );\n        let get_underline = (col) => min_by_key(\n          line_labels.filter((ll) => {\n            return this.config.underlines && // Underlines only occur for inline spans (highlighting can occur for all spans)\n            !ll.multi && ll.label.span.contains(line.offset() + col);\n          }),\n          // Prioritise displaying smaller spans\n          // .min_by_key(ll => [-ll.label.priority, ll.label.span.len()]);\n          // .min_by_key(ll => ll.label.span.len()));\n          // ll => -ll.label.priority + ll.label.span.len());\n          (ll) => ll.label.span.len()\n        );\n        write_margin(w, idx, true, is_ellipsis, true, none(), line_labels, margin_label);\n        if (!is_ellipsis) {\n          for (let [col, _c] of enumerate(line.chars())) {\n            let highlight = get_highlight(col);\n            let color = highlight.is_some() ? highlight.unwrap().color : this.config.unimportant_color();\n            let [c2, width] = this.config.char_width(_c, col);\n            for (let _ of range(0, width)) {\n              write(w, \"{}\", new Display(c2).fg(color));\n            }\n          }\n        }\n        write(w, \"\\n\");\n        for (let row of range(0, line_labels.length)) {\n          let line_label = line_labels[row];\n          if (!this.config.compact) {\n            write_margin(\n              w,\n              idx,\n              false,\n              is_ellipsis,\n              true,\n              some([row, false]),\n              line_labels,\n              margin_label\n            );\n            let chars2 = line.chars();\n            let { next: next2 } = makeIter(chars2);\n            for (let col of range(0, arrow_len)) {\n              let width = next2().map_or(1, (c22) => this.config.char_width(c22, col)[1]);\n              let vbar = get_vbar(col, row);\n              let underline = get_underline(col).filter(() => row === 0);\n              const getCTailOuter = () => {\n                if (vbar.is_some()) {\n                  let vbar_ll = vbar.unwrap();\n                  const getCTailInner = () => {\n                    if (underline.is_some()) {\n                      if (vbar_ll.label.span.len() <= 1) {\n                        return [draw.underbar, draw.underline];\n                      } else if (line.offset() + col === vbar_ll.label.span.start) {\n                        return [draw.ltop, draw.underbar];\n                      } else if (line.offset() + col === vbar_ll.label.last_offset()) {\n                        return [draw.rtop, draw.underbar];\n                      } else {\n                        return [draw.underbar, draw.underline];\n                      }\n                    } else if (vbar_ll.multi && row === 0 && this.config.multiline_arrows) {\n                      return [draw.uarrow, new Display(\" \")];\n                    } else {\n                      return [draw.vbar, new Display(\" \")];\n                    }\n                  };\n                  let [c22, tail2] = getCTailInner();\n                  return [\n                    new Display(c22).fg(vbar_ll.label.color),\n                    new Display(tail2).fg(vbar_ll.label.color)\n                  ];\n                } else if (underline.is_some()) {\n                  let underline_ll = underline.unwrap();\n                  return [\n                    new Display(draw.underline).fg(underline_ll.label.color),\n                    new Display(draw.underline).fg(underline_ll.label.color)\n                  ];\n                } else {\n                  return [new Display(\" \").fg(none()), new Display(\" \").fg(none())];\n                }\n              };\n              let [c2, tail] = getCTailOuter();\n              for (let i of range(0, width)) {\n                write(w, \"{}\", i === 0 ? c2 : tail);\n              }\n            }\n            write(w, \"\\n\");\n          }\n          write_margin(\n            w,\n            idx,\n            false,\n            is_ellipsis,\n            true,\n            some([row, true]),\n            line_labels,\n            margin_label\n          );\n          let chars = line.chars();\n          let { next } = makeIter(chars);\n          for (let col of range(0, arrow_len)) {\n            let n = next();\n            let width = n.map_or(1, (c22) => this.config.char_width(c22, col)[1]);\n            let is_hbar = ((col > line_label.col ? 1 : 0) ^ (line_label.multi ? 1 : 0) || line_label.label.msg.is_some() && line_label.draw_msg && col > line_label.col) && line_label.label.msg.is_some();\n            const getctail = () => {\n              if (col === line_label.col && line_label.label.msg.is_some() && margin_label.map_or(true, (m) => line_label.label != m.label)) {\n                return [\n                  new Display(\n                    line_label.multi ? line_label.draw_msg ? draw.mbot : draw.rbot : draw.lbot\n                  ).fg(line_label.label.color),\n                  new Display(draw.hbar).fg(line_label.label.color)\n                ];\n              } else if (get_vbar(col, row).filter(() => col != line_label.col || line_label.label.msg.is_some()).is_some()) {\n                let vbar_ll = get_vbar(col, row).filter(() => col != line_label.col || line_label.label.msg.is_some()).unwrap();\n                if (!this.config.cross_gap && is_hbar) {\n                  return [\n                    new Display(draw.xbar).fg(line_label.label.color),\n                    new Display(\" \").fg(line_label.label.color)\n                  ];\n                } else if (is_hbar) {\n                  let d = new Display(draw.hbar).fg(line_label.label.color);\n                  return [d, d];\n                } else {\n                  return [\n                    new Display(\n                      vbar_ll.multi && row === 0 && this.config.compact ? draw.uarrow : draw.vbar\n                    ).fg(vbar_ll.label.color),\n                    new Display(\" \").fg(line_label.label.color)\n                  ];\n                }\n              } else if (is_hbar) {\n                let d = new Display(draw.hbar).fg(line_label.label.color);\n                return [d, d];\n              } else {\n                let d = new Display(\" \").fg(none());\n                return [d, d];\n              }\n            };\n            let [c2, tail] = getctail();\n            if (width > 0) {\n              write(w, \"{}\", c2);\n            }\n            for (let _ of range(1, width)) {\n              write(w, \"{}\", tail);\n            }\n          }\n          if (line_label.draw_msg) {\n            write(w, \" {}\", new Show(line_label.label.msg));\n          }\n          write(w, \"\\n\");\n        }\n      }\n      let is_final_group = group_idx + 1 === groups_len;\n      if (this.help.is_some() && is_final_group) {\n        let note = this.help.unwrap();\n        if (!this.config.compact) {\n          write_margin(w, 0, false, false, true, some([0, false]), [], none());\n          write(w, \"\\n\");\n        }\n        write_margin(w, 0, false, false, true, some([0, false]), [], none());\n        write(w, \"{}: {}\\n\", new Display(\"Help\").fg(this.config.note_color()), note);\n      }\n      if (this.note.is_some() && is_final_group) {\n        let note = this.note.unwrap();\n        if (!this.config.compact) {\n          write_margin(w, 0, false, false, true, some([0, false]), [], none());\n          write(w, \"\\n\");\n        }\n        write_margin(w, 0, false, false, true, some([0, false]), [], none());\n        write(w, \"{}: {}\\n\", new Display(\"Note\").fg(this.config.note_color()), note);\n      }\n      if (!this.config.compact) {\n        if (is_final_group) {\n          let final_margin = format(\"{}{}\", new Show([draw.hbar, line_no_width + 2]), draw.rbot);\n          writeln(w, \"{}\", new Display(final_margin).fg(this.config.margin_color()));\n        } else {\n          writeln(\n            w,\n            \"{}{}\",\n            new Show([\" \", line_no_width + 2]),\n            new Display(draw.vbar).fg(this.config.margin_color())\n          );\n        }\n      }\n    }\n    if (groups_len === 0) {\n      if (this.help.is_some()) {\n        let note = this.help.unwrap();\n        if (!this.config.compact) {\n          write(w, \"\\n\");\n        }\n        write(w, \"{}: {}\\n\", new Display(\"Help\").fg(this.config.note_color()), note);\n      }\n      if (this.note.is_some()) {\n        let note = this.note.unwrap();\n        if (!this.config.compact) {\n          write(w, \"\\n\");\n        }\n        write(w, \"{}: {}\\n\", new Display(\"Note\").fg(this.config.note_color()), note);\n      }\n    }\n  }\n}\nfunction match(kind, matchers) {\n  for (let [type2, then] of matchers) {\n    if (kind === type2)\n      return then(kind);\n  }\n  return null;\n}\nfunction* enumerate(groups) {\n  for (let i = 0; i < groups.length; i++)\n    yield [i, groups[i]];\n  return;\n}\nfunction* map(a, f) {\n  let value = a.next();\n  while (value.done === false) {\n    yield f(value.value);\n    value = a.next();\n  }\n}\nfunction* take_while(a, p) {\n  let current = a.next();\n  while (current.done === false) {\n    if (p(current.value))\n      yield current.value;\n    else\n      break;\n    current = a.next();\n  }\n}\nfunction to_array(a) {\n  let result = [];\n  let current = a.next();\n  while (current.done === false) {\n    result.push(current.value);\n    current = a.next();\n  }\n  return result;\n}\nfunction count(a) {\n  return to_array(a).length;\n}\nfunction makeIter(arr) {\n  let cursor = 0;\n  let next = () => {\n    const res = arr[cursor++];\n    if (res === void 0)\n      return none();\n    return some(res);\n  };\n  return { next, cursor };\n}\nvar ansi_up = {};\n(function(exports) {\n  (function(root, factory2) {\n    if (typeof exports.nodeName !== \"string\") {\n      factory2(exports);\n    } else {\n      var exp = {};\n      factory2(exp);\n      root.AnsiUp = exp.default;\n    }\n  })(commonjsGlobal, function(exports2) {\n    var __makeTemplateObject2 = this && this.__makeTemplateObject || function(cooked, raw) {\n      if (Object.defineProperty) {\n        Object.defineProperty(cooked, \"raw\", { value: raw });\n      } else {\n        cooked.raw = raw;\n      }\n      return cooked;\n    };\n    var PacketKind;\n    (function(PacketKind2) {\n      PacketKind2[PacketKind2[\"EOS\"] = 0] = \"EOS\";\n      PacketKind2[PacketKind2[\"Text\"] = 1] = \"Text\";\n      PacketKind2[PacketKind2[\"Incomplete\"] = 2] = \"Incomplete\";\n      PacketKind2[PacketKind2[\"ESC\"] = 3] = \"ESC\";\n      PacketKind2[PacketKind2[\"Unknown\"] = 4] = \"Unknown\";\n      PacketKind2[PacketKind2[\"SGR\"] = 5] = \"SGR\";\n      PacketKind2[PacketKind2[\"OSCURL\"] = 6] = \"OSCURL\";\n    })(PacketKind || (PacketKind = {}));\n    var AnsiUp2 = function() {\n      function AnsiUp3() {\n        this.VERSION = \"5.1.0\";\n        this.setup_palettes();\n        this._use_classes = false;\n        this.bold = false;\n        this.italic = false;\n        this.underline = false;\n        this.fg = this.bg = null;\n        this._buffer = \"\";\n        this._url_whitelist = { \"http\": 1, \"https\": 1 };\n      }\n      Object.defineProperty(AnsiUp3.prototype, \"use_classes\", {\n        get: function() {\n          return this._use_classes;\n        },\n        set: function(arg) {\n          this._use_classes = arg;\n        },\n        enumerable: false,\n        configurable: true\n      });\n      Object.defineProperty(AnsiUp3.prototype, \"url_whitelist\", {\n        get: function() {\n          return this._url_whitelist;\n        },\n        set: function(arg) {\n          this._url_whitelist = arg;\n        },\n        enumerable: false,\n        configurable: true\n      });\n      AnsiUp3.prototype.setup_palettes = function() {\n        var _this = this;\n        this.ansi_colors = [\n          [\n            { rgb: [0, 0, 0], class_name: \"ansi-black\" },\n            { rgb: [187, 0, 0], class_name: \"ansi-red\" },\n            { rgb: [0, 187, 0], class_name: \"ansi-green\" },\n            { rgb: [187, 187, 0], class_name: \"ansi-yellow\" },\n            { rgb: [0, 0, 187], class_name: \"ansi-blue\" },\n            { rgb: [187, 0, 187], class_name: \"ansi-magenta\" },\n            { rgb: [0, 187, 187], class_name: \"ansi-cyan\" },\n            { rgb: [255, 255, 255], class_name: \"ansi-white\" }\n          ],\n          [\n            { rgb: [85, 85, 85], class_name: \"ansi-bright-black\" },\n            { rgb: [255, 85, 85], class_name: \"ansi-bright-red\" },\n            { rgb: [0, 255, 0], class_name: \"ansi-bright-green\" },\n            { rgb: [255, 255, 85], class_name: \"ansi-bright-yellow\" },\n            { rgb: [85, 85, 255], class_name: \"ansi-bright-blue\" },\n            { rgb: [255, 85, 255], class_name: \"ansi-bright-magenta\" },\n            { rgb: [85, 255, 255], class_name: \"ansi-bright-cyan\" },\n            { rgb: [255, 255, 255], class_name: \"ansi-bright-white\" }\n          ]\n        ];\n        this.palette_256 = [];\n        this.ansi_colors.forEach(function(palette) {\n          palette.forEach(function(rec) {\n            _this.palette_256.push(rec);\n          });\n        });\n        var levels = [0, 95, 135, 175, 215, 255];\n        for (var r = 0; r < 6; ++r) {\n          for (var g2 = 0; g2 < 6; ++g2) {\n            for (var b = 0; b < 6; ++b) {\n              var col = { rgb: [levels[r], levels[g2], levels[b]], class_name: \"truecolor\" };\n              this.palette_256.push(col);\n            }\n          }\n        }\n        var grey_level = 8;\n        for (var i = 0; i < 24; ++i, grey_level += 10) {\n          var gry = { rgb: [grey_level, grey_level, grey_level], class_name: \"truecolor\" };\n          this.palette_256.push(gry);\n        }\n      };\n      AnsiUp3.prototype.escape_txt_for_html = function(txt) {\n        return txt.replace(/[&<>\"']/gm, function(str) {\n          if (str === \"&\")\n            return \"&amp;\";\n          if (str === \"<\")\n            return \"&lt;\";\n          if (str === \">\")\n            return \"&gt;\";\n          if (str === '\"')\n            return \"&quot;\";\n          if (str === \"'\")\n            return \"&#x27;\";\n        });\n      };\n      AnsiUp3.prototype.append_buffer = function(txt) {\n        var str = this._buffer + txt;\n        this._buffer = str;\n      };\n      AnsiUp3.prototype.get_next_packet = function() {\n        var pkt = {\n          kind: PacketKind.EOS,\n          text: \"\",\n          url: \"\"\n        };\n        var len = this._buffer.length;\n        if (len == 0)\n          return pkt;\n        var pos = this._buffer.indexOf(\"\\x1B\");\n        if (pos == -1) {\n          pkt.kind = PacketKind.Text;\n          pkt.text = this._buffer;\n          this._buffer = \"\";\n          return pkt;\n        }\n        if (pos > 0) {\n          pkt.kind = PacketKind.Text;\n          pkt.text = this._buffer.slice(0, pos);\n          this._buffer = this._buffer.slice(pos);\n          return pkt;\n        }\n        if (pos == 0) {\n          if (len == 1) {\n            pkt.kind = PacketKind.Incomplete;\n            return pkt;\n          }\n          var next_char = this._buffer.charAt(1);\n          if (next_char != \"[\" && next_char != \"]\") {\n            pkt.kind = PacketKind.ESC;\n            pkt.text = this._buffer.slice(0, 1);\n            this._buffer = this._buffer.slice(1);\n            return pkt;\n          }\n          if (next_char == \"[\") {\n            if (!this._csi_regex) {\n              this._csi_regex = rgx(__makeTemplateObject2([\"\\n                        ^                           # beginning of line\\n                                                    #\\n                                                    # First attempt\\n                        (?:                         # legal sequence\\n                          \\x1B[                      # CSI\\n                          ([<-?]?)              # private-mode char\\n                          ([d;]*)                    # any digits or semicolons\\n                          ([ -/]?               # an intermediate modifier\\n                          [@-~])                # the command\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (?:                         # illegal sequence\\n                          \\x1B[                      # CSI\\n                          [ -~]*                # anything legal\\n                          ([\\0-\u001f:])              # anything illegal\\n                        )\\n                    \"], [\"\\n                        ^                           # beginning of line\\n                                                    #\\n                                                    # First attempt\\n                        (?:                         # legal sequence\\n                          \\\\x1b\\\\[                      # CSI\\n                          ([\\\\x3c-\\\\x3f]?)              # private-mode char\\n                          ([\\\\d;]*)                    # any digits or semicolons\\n                          ([\\\\x20-\\\\x2f]?               # an intermediate modifier\\n                          [\\\\x40-\\\\x7e])                # the command\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (?:                         # illegal sequence\\n                          \\\\x1b\\\\[                      # CSI\\n                          [\\\\x20-\\\\x7e]*                # anything legal\\n                          ([\\\\x00-\\\\x1f:])              # anything illegal\\n                        )\\n                    \"]));\n            }\n            var match2 = this._buffer.match(this._csi_regex);\n            if (match2 === null) {\n              pkt.kind = PacketKind.Incomplete;\n              return pkt;\n            }\n            if (match2[4]) {\n              pkt.kind = PacketKind.ESC;\n              pkt.text = this._buffer.slice(0, 1);\n              this._buffer = this._buffer.slice(1);\n              return pkt;\n            }\n            if (match2[1] != \"\" || match2[3] != \"m\")\n              pkt.kind = PacketKind.Unknown;\n            else\n              pkt.kind = PacketKind.SGR;\n            pkt.text = match2[2];\n            var rpos = match2[0].length;\n            this._buffer = this._buffer.slice(rpos);\n            return pkt;\n          }\n          if (next_char == \"]\") {\n            if (len < 4) {\n              pkt.kind = PacketKind.Incomplete;\n              return pkt;\n            }\n            if (this._buffer.charAt(2) != \"8\" || this._buffer.charAt(3) != \";\") {\n              pkt.kind = PacketKind.ESC;\n              pkt.text = this._buffer.slice(0, 1);\n              this._buffer = this._buffer.slice(1);\n              return pkt;\n            }\n            if (!this._osc_st) {\n              this._osc_st = rgxG(__makeTemplateObject2([\"\\n                        (?:                         # legal sequence\\n                          (\\x1B\\\\)                    # ESC                           |                           # alternate\\n                          (\\x07)                      # BEL (what xterm did)\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (                           # illegal sequence\\n                          [\\0-\u0006]                 # anything illegal\\n                          |                           # alternate\\n                          [\\b-\u001a]                 # anything illegal\\n                          |                           # alternate\\n                          [\u001c-\u001f]                 # anything illegal\\n                        )\\n                    \"], [\"\\n                        (?:                         # legal sequence\\n                          (\\\\x1b\\\\\\\\)                    # ESC \\\\\\n                          |                           # alternate\\n                          (\\\\x07)                      # BEL (what xterm did)\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (                           # illegal sequence\\n                          [\\\\x00-\\\\x06]                 # anything illegal\\n                          |                           # alternate\\n                          [\\\\x08-\\\\x1a]                 # anything illegal\\n                          |                           # alternate\\n                          [\\\\x1c-\\\\x1f]                 # anything illegal\\n                        )\\n                    \"]));\n            }\n            this._osc_st.lastIndex = 0;\n            {\n              var match_1 = this._osc_st.exec(this._buffer);\n              if (match_1 === null) {\n                pkt.kind = PacketKind.Incomplete;\n                return pkt;\n              }\n              if (match_1[3]) {\n                pkt.kind = PacketKind.ESC;\n                pkt.text = this._buffer.slice(0, 1);\n                this._buffer = this._buffer.slice(1);\n                return pkt;\n              }\n            }\n            {\n              var match_2 = this._osc_st.exec(this._buffer);\n              if (match_2 === null) {\n                pkt.kind = PacketKind.Incomplete;\n                return pkt;\n              }\n              if (match_2[3]) {\n                pkt.kind = PacketKind.ESC;\n                pkt.text = this._buffer.slice(0, 1);\n                this._buffer = this._buffer.slice(1);\n                return pkt;\n              }\n            }\n            if (!this._osc_regex) {\n              this._osc_regex = rgx(__makeTemplateObject2([\"\\n                        ^                           # beginning of line\\n                                                    #\\n                        \\x1B]8;                    # OSC Hyperlink\\n                        [ -:<-~]*       # params (excluding ;)\\n                        ;                           # end of params\\n                        ([!-~]{0,512})        # URL capture\\n                        (?:                         # ST\\n                          (?:\\x1B\\\\)                  # ESC                           |                           # alternate\\n                          (?:\\x07)                    # BEL (what xterm did)\\n                        )\\n                        ([ -~]+)              # TEXT capture\\n                        \\x1B]8;;                   # OSC Hyperlink End\\n                        (?:                         # ST\\n                          (?:\\x1B\\\\)                  # ESC                           |                           # alternate\\n                          (?:\\x07)                    # BEL (what xterm did)\\n                        )\\n                    \"], [\"\\n                        ^                           # beginning of line\\n                                                    #\\n                        \\\\x1b\\\\]8;                    # OSC Hyperlink\\n                        [\\\\x20-\\\\x3a\\\\x3c-\\\\x7e]*       # params (excluding ;)\\n                        ;                           # end of params\\n                        ([\\\\x21-\\\\x7e]{0,512})        # URL capture\\n                        (?:                         # ST\\n                          (?:\\\\x1b\\\\\\\\)                  # ESC \\\\\\n                          |                           # alternate\\n                          (?:\\\\x07)                    # BEL (what xterm did)\\n                        )\\n                        ([\\\\x20-\\\\x7e]+)              # TEXT capture\\n                        \\\\x1b\\\\]8;;                   # OSC Hyperlink End\\n                        (?:                         # ST\\n                          (?:\\\\x1b\\\\\\\\)                  # ESC \\\\\\n                          |                           # alternate\\n                          (?:\\\\x07)                    # BEL (what xterm did)\\n                        )\\n                    \"]));\n            }\n            var match2 = this._buffer.match(this._osc_regex);\n            if (match2 === null) {\n              pkt.kind = PacketKind.ESC;\n              pkt.text = this._buffer.slice(0, 1);\n              this._buffer = this._buffer.slice(1);\n              return pkt;\n            }\n            pkt.kind = PacketKind.OSCURL;\n            pkt.url = match2[1];\n            pkt.text = match2[2];\n            var rpos = match2[0].length;\n            this._buffer = this._buffer.slice(rpos);\n            return pkt;\n          }\n        }\n      };\n      AnsiUp3.prototype.ansi_to_html = function(txt) {\n        this.append_buffer(txt);\n        var blocks = [];\n        while (true) {\n          var packet = this.get_next_packet();\n          if (packet.kind == PacketKind.EOS || packet.kind == PacketKind.Incomplete)\n            break;\n          if (packet.kind == PacketKind.ESC || packet.kind == PacketKind.Unknown)\n            continue;\n          if (packet.kind == PacketKind.Text)\n            blocks.push(this.transform_to_html(this.with_state(packet)));\n          else if (packet.kind == PacketKind.SGR)\n            this.process_ansi(packet);\n          else if (packet.kind == PacketKind.OSCURL)\n            blocks.push(this.process_hyperlink(packet));\n        }\n        return blocks.join(\"\");\n      };\n      AnsiUp3.prototype.with_state = function(pkt) {\n        return { bold: this.bold, italic: this.italic, underline: this.underline, fg: this.fg, bg: this.bg, text: pkt.text };\n      };\n      AnsiUp3.prototype.process_ansi = function(pkt) {\n        var sgr_cmds = pkt.text.split(\";\");\n        while (sgr_cmds.length > 0) {\n          var sgr_cmd_str = sgr_cmds.shift();\n          var num = parseInt(sgr_cmd_str, 10);\n          if (isNaN(num) || num === 0) {\n            this.fg = this.bg = null;\n            this.bold = false;\n            this.italic = false;\n            this.underline = false;\n          } else if (num === 1) {\n            this.bold = true;\n          } else if (num === 3) {\n            this.italic = true;\n          } else if (num === 4) {\n            this.underline = true;\n          } else if (num === 22) {\n            this.bold = false;\n          } else if (num === 23) {\n            this.italic = false;\n          } else if (num === 24) {\n            this.underline = false;\n          } else if (num === 39) {\n            this.fg = null;\n          } else if (num === 49) {\n            this.bg = null;\n          } else if (num >= 30 && num < 38) {\n            this.fg = this.ansi_colors[0][num - 30];\n          } else if (num >= 40 && num < 48) {\n            this.bg = this.ansi_colors[0][num - 40];\n          } else if (num >= 90 && num < 98) {\n            this.fg = this.ansi_colors[1][num - 90];\n          } else if (num >= 100 && num < 108) {\n            this.bg = this.ansi_colors[1][num - 100];\n          } else if (num === 38 || num === 48) {\n            if (sgr_cmds.length > 0) {\n              var is_foreground = num === 38;\n              var mode_cmd = sgr_cmds.shift();\n              if (mode_cmd === \"5\" && sgr_cmds.length > 0) {\n                var palette_index = parseInt(sgr_cmds.shift(), 10);\n                if (palette_index >= 0 && palette_index <= 255) {\n                  if (is_foreground)\n                    this.fg = this.palette_256[palette_index];\n                  else\n                    this.bg = this.palette_256[palette_index];\n                }\n              }\n              if (mode_cmd === \"2\" && sgr_cmds.length > 2) {\n                var r = parseInt(sgr_cmds.shift(), 10);\n                var g2 = parseInt(sgr_cmds.shift(), 10);\n                var b = parseInt(sgr_cmds.shift(), 10);\n                if (r >= 0 && r <= 255 && (g2 >= 0 && g2 <= 255) && (b >= 0 && b <= 255)) {\n                  var c2 = { rgb: [r, g2, b], class_name: \"truecolor\" };\n                  if (is_foreground)\n                    this.fg = c2;\n                  else\n                    this.bg = c2;\n                }\n              }\n            }\n          }\n        }\n      };\n      AnsiUp3.prototype.transform_to_html = function(fragment) {\n        var txt = fragment.text;\n        if (txt.length === 0)\n          return txt;\n        txt = this.escape_txt_for_html(txt);\n        if (!fragment.bold && !fragment.italic && !fragment.underline && fragment.fg === null && fragment.bg === null)\n          return txt;\n        var styles2 = [];\n        var classes = [];\n        var fg = fragment.fg;\n        var bg = fragment.bg;\n        if (fragment.bold)\n          styles2.push(\"font-weight:bold\");\n        if (fragment.italic)\n          styles2.push(\"font-style:italic\");\n        if (fragment.underline)\n          styles2.push(\"text-decoration:underline\");\n        if (!this._use_classes) {\n          if (fg)\n            styles2.push(\"color:rgb(\" + fg.rgb.join(\",\") + \")\");\n          if (bg)\n            styles2.push(\"background-color:rgb(\" + bg.rgb + \")\");\n        } else {\n          if (fg) {\n            if (fg.class_name !== \"truecolor\") {\n              classes.push(fg.class_name + \"-fg\");\n            } else {\n              styles2.push(\"color:rgb(\" + fg.rgb.join(\",\") + \")\");\n            }\n          }\n          if (bg) {\n            if (bg.class_name !== \"truecolor\") {\n              classes.push(bg.class_name + \"-bg\");\n            } else {\n              styles2.push(\"background-color:rgb(\" + bg.rgb.join(\",\") + \")\");\n            }\n          }\n        }\n        var class_string = \"\";\n        var style_string = \"\";\n        if (classes.length)\n          class_string = ' class=\"' + classes.join(\" \") + '\"';\n        if (styles2.length)\n          style_string = ' style=\"' + styles2.join(\";\") + '\"';\n        return \"<span\" + style_string + class_string + \">\" + txt + \"</span>\";\n      };\n      AnsiUp3.prototype.process_hyperlink = function(pkt) {\n        var parts = pkt.url.split(\":\");\n        if (parts.length < 1)\n          return \"\";\n        if (!this._url_whitelist[parts[0]])\n          return \"\";\n        var result = '<a href=\"' + this.escape_txt_for_html(pkt.url) + '\">' + this.escape_txt_for_html(pkt.text) + \"</a>\";\n        return result;\n      };\n      return AnsiUp3;\n    }();\n    function rgx(tmplObj) {\n      var regexText = tmplObj.raw[0];\n      var wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n      var txt2 = regexText.replace(wsrgx, \"\");\n      return new RegExp(txt2);\n    }\n    function rgxG(tmplObj) {\n      var regexText = tmplObj.raw[0];\n      var wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n      var txt2 = regexText.replace(wsrgx, \"\");\n      return new RegExp(txt2, \"g\");\n    }\n    Object.defineProperty(exports2, \"__esModule\", { value: true });\n    exports2.default = AnsiUp2;\n  });\n})(ansi_up);\nconst AnsiUp = /* @__PURE__ */ getDefaultExportFromCjs(ansi_up);\nfunction nicerError(e) {\n  if (e.code == 1070) {\n    return \"Static/public methods are not supported on traits\";\n  }\n  return e.messageText.toString();\n}\nclass TagNode {\n  constructor(name, tsNode) {\n    this.tsNode = tsNode;\n    this.name = name;\n    this.tags = [];\n    this.edges = [];\n    this.edgesOther = [];\n  }\n}\nclass TagGraph {\n  constructor() {\n    this.nodes = [];\n  }\n  addNode(name, tsNode) {\n    let node2 = this.nodes.find((node22) => node22.name === name);\n    if (!node2) {\n      node2 = new TagNode(name, tsNode);\n      this.nodes.push(node2);\n    }\n  }\n  addEdge(from, to) {\n    let fromNode = this.nodes.find((node2) => node2.name === from);\n    if (!fromNode) {\n      fromNode = new TagNode(from);\n      this.nodes.push(fromNode);\n    }\n    let toNode = this.nodes.find((node2) => node2.name === to);\n    if (!toNode) {\n      toNode = new TagNode(to);\n      this.nodes.push(toNode);\n    }\n    fromNode.edges.push(toNode);\n    toNode.edgesOther.push(fromNode);\n  }\n  addTag(name, tag) {\n    let node2 = this.nodes.find((node22) => node22.name === name);\n    if (!node2) {\n      node2 = new TagNode(name);\n      this.nodes.push(node2);\n    }\n    node2.tags.push(tag);\n  }\n  getNode(name) {\n    return this.nodes.find((node2) => node2.name === name);\n  }\n  resolveTagSourceChain(name, tag) {\n    const node2 = this.getNode(name);\n    if (!node2)\n      return [];\n    const chain = [name];\n    const visited = /* @__PURE__ */ new Set();\n    const queue = [node2];\n    while (queue.length > 0) {\n      const node22 = queue.shift();\n      if (visited.has(node22.name))\n        continue;\n      visited.add(node22.name);\n      let nodeWithTag = null;\n      for (const edge of node22.edgesOther) {\n        if (edge.tags.includes(tag)) {\n          nodeWithTag = edge;\n          break;\n        }\n      }\n      if (nodeWithTag) {\n        chain.push(nodeWithTag.name);\n        queue.push(nodeWithTag);\n      } else {\n        return chain;\n      }\n    }\n    return [];\n  }\n  propagateTags() {\n    let changed = true;\n    while (changed) {\n      changed = false;\n      for (const node2 of this.nodes) {\n        for (const edge of node2.edges) {\n          for (const tag of node2.tags) {\n            if (!edge.tags.includes(tag)) {\n              edge.tags.push(tag);\n              changed = true;\n            }\n          }\n        }\n      }\n    }\n  }\n}\nconst quickCache = {\n  \"/file.ts\": {\n    outputFiles: [\n      {\n        name: \"/file.js\",\n        writeByteOrderMark: false,\n        text: 'define([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/std_math.ts\": {\n    outputFiles: [\n      {\n        name: \"/std_math.js\",\n        writeByteOrderMark: false,\n        text: `var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\ndefine([\"require\", \"exports\", \"./static-math\"], function (require, exports, static_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.unpack2x16float = exports.unpack2x16unorm = exports.unpack2x16snorm = exports.unpack4x8unorm = exports.unpack4x8snorm = exports.pack2x16float = exports.pack2x16unorm = exports.pack2x16snorm = exports.pack4x8unorm = exports.pack4x8snorm = exports.bitcast = exports.ddyCoarse = exports.ddxCoarse = exports.ddyFine = exports.ddxFine = exports.ddy = exports.ddx = exports.discard = exports.workgroupUniformLoad = exports.storageBarrier = exports.workgroupBarrier = exports.atomic = exports.atomic_internal = exports.FM = exports.intifyVector = exports.swizzle = exports.testDocComment = exports.makeVector = exports.not = exports.or = exports.and = exports.gte = exports.gt = exports.lte = exports.lt = exports.neq = exports.eq = exports.saturate = exports.clamp = exports.max = exports.min = exports.smoothstep = exports.step = exports.radians = exports.degrees = exports.refract = exports.reflect = exports.normalize = exports.distance = exports.dist = exports.length = exports.bilerp = exports.lerp = exports.dot = exports.cross = exports.pingpong = exports.rand3 = exports.rand2 = exports.rand = exports.wrap = exports.frac = exports.inversesqrt = exports.sqrt = exports.log10 = exports.log2 = exports.log = exports.exp = exports.atanh = exports.asinh = exports.acosh = exports.tanh = exports.sinh = exports.cosh = exports.atan2 = exports.atan = exports.asin = exports.acos = exports.tan = exports.sin = exports.cos = exports.sign = exports.round = exports.ceil = exports.floor = exports.abs = exports.positive = exports.negate = exports.bitnot = exports.rshift = exports.lshift = exports.bitxor = exports.bitor = exports.bitand = exports.mod = exports.pow = exports.div = exports.mul = exports.transpose = exports.inverse = exports.sub = exports.add = exports.uint8 = exports.uint4 = exports.uint3 = exports.uint2 = exports.int4 = exports.int3 = exports.int2 = exports.float4 = exports.float3 = exports.float2 = exports.uint = exports.int = exports.float = exports.float4x4 = exports.float3x3 = exports.float2x2 = void 0;\n    function isVector(v) {\n        return Array.isArray(v);\n    }\n    function isScalar(v) {\n        return typeof v === 'number';\n    }\n    function isMatrix(v) {\n        return !!v.__matrix;\n    }\n    /** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\n    function float2x2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0];\n        if (args.length === 4) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix2x2Methods(arr);\n        return arr;\n    }\n    exports.float2x2 = float2x2;\n    /** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\n    function float3x3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 9) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix3x3Methods(arr);\n        return arr;\n    }\n    exports.float3x3 = float3x3;\n    function applyMatrix4x4Methods(arr) {\n        arr.__matrix = 4;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 4 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 4] = value[0];\n            arr[index * 4 + 1] = value[1];\n            arr[index * 4 + 2] = value[2];\n            arr[index * 4 + 3] = value[3];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 4] = op_fn(arr[index * 4], value[0]);\n            arr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\n            arr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\n            arr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\n        };\n    }\n    window.applyMatrix4x4Methods = applyMatrix4x4Methods;\n    function applyMatrix3x3Methods(arr) {\n        arr.__matrix = 3;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 3 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 3] = value[0];\n            arr[index * 3 + 1] = value[1];\n            arr[index * 3 + 2] = value[2];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 3] = op_fn(arr[index * 3], value[0]);\n            arr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\n            arr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\n        };\n    }\n    window.applyMatrix3x3Methods = applyMatrix3x3Methods;\n    function applyMatrix2x2Methods(arr) {\n        arr.__matrix = 2;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 2], arr[index * 2 + 1]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 2 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 2] = value[0];\n            arr[index * 2 + 1] = value[1];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 2] = op_fn(arr[index * 2], value[0]);\n            arr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\n        };\n    }\n    window.applyMatrix2x2Methods = applyMatrix2x2Methods;\n    /** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\n    function float4x4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 16) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix4x4Methods(arr);\n        return arr;\n    }\n    exports.float4x4 = float4x4;\n    /** @shadeup=glsl(float) @shadeup=wgsl(f32) */\n    function float(x) {\n        return x;\n    }\n    exports.float = float;\n    /** @shadeup=glsl(int) @shadeup=wgsl(i32) */\n    function int(x) {\n        return (x | 0);\n    }\n    exports.int = int;\n    /** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\n    function uint(x) {\n        return (x >>> 0);\n    }\n    exports.uint = uint;\n    /** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\n    function float2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float2 = float2;\n    /** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\n    function float3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float3 = float3;\n    /** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\n    function float4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float4 = float4;\n    /** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\n    function int2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int2 = int2;\n    /** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\n    function int3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int3 = int3;\n    /** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\n    function int4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int4 = int4;\n    function uint2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint2 = uint2;\n    function uint3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint3 = uint3;\n    function uint4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint4 = uint4;\n    function uint8(x) {\n        return ((x >>> 0) & 0xff);\n    }\n    exports.uint8 = uint8;\n    function componentMath(a, b, f) {\n        var aIsScalar = isScalar(a);\n        var bIsScalar = isScalar(b);\n        if (aIsScalar && bIsScalar) {\n            return f(a, b);\n        }\n        if (!aIsScalar && !bIsScalar) {\n            if (a.length !== b.length) {\n                throw new Error('Cannot perform component-wise math on vectors of different lengths');\n            }\n            // return a.map((a, i) => f(a, b[i])) as vector;\n            if (a.length == 2) {\n                return [f(a[0], b[0]), f(a[1], b[1])];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])];\n            }\n        }\n        else if (!aIsScalar && bIsScalar) {\n            if (a.length == 2) {\n                return [f(a[0], b), f(a[1], b)];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b)];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)];\n            }\n        }\n        else if (!bIsScalar && aIsScalar) {\n            if (b.length == 2) {\n                return [f(a, b[0]), f(a, b[1])];\n            }\n            else if (b.length == 3) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2])];\n            }\n            else if (b.length == 4) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])];\n            }\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function componentMathSingular(a, f) {\n        if (isScalar(a)) {\n            return f(a);\n        }\n        if (isVector(a)) {\n            return a.map(function (a, i) { return f(a); });\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function cCall(cb, a, b) {\n        return componentMath(a, b, function (a, b) { return a + b; });\n    }\n    function componentOp(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpMatch(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpSingular(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    function componentOpSingularFloat(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    /** @shadeup=univ(!$0$ + $1$)*/\n    var add = function (a, b) {\n        if (typeof a === 'string' && typeof b === 'string') {\n            return \"\".concat(a).concat(b);\n        }\n        else {\n            var addOp = componentOp(function (a, b) { return a + b; });\n            var v = addOp(a, b);\n            return v;\n        }\n    };\n    exports.add = add;\n    /** @shadeup=univ(!$0$ - $1$)*/\n    exports.sub = componentOp(function (a, b) { return a - b; });\n    function matrixMul(a, b) {\n        // Multiply two square matrices of the same dimension row-major\n        var dimension = a.__matrix;\n        var out;\n        if (dimension === 2) {\n            out = float2x2();\n        }\n        else if (dimension === 3) {\n            out = float3x3();\n        }\n        else if (dimension === 4) {\n            var a00 = a[0 * 4 + 0];\n            var a01 = a[0 * 4 + 1];\n            var a02 = a[0 * 4 + 2];\n            var a03 = a[0 * 4 + 3];\n            var a10 = a[1 * 4 + 0];\n            var a11 = a[1 * 4 + 1];\n            var a12 = a[1 * 4 + 2];\n            var a13 = a[1 * 4 + 3];\n            var a20 = a[2 * 4 + 0];\n            var a21 = a[2 * 4 + 1];\n            var a22 = a[2 * 4 + 2];\n            var a23 = a[2 * 4 + 3];\n            var a30 = a[3 * 4 + 0];\n            var a31 = a[3 * 4 + 1];\n            var a32 = a[3 * 4 + 2];\n            var a33 = a[3 * 4 + 3];\n            var b00 = b[0 * 4 + 0];\n            var b01 = b[0 * 4 + 1];\n            var b02 = b[0 * 4 + 2];\n            var b03 = b[0 * 4 + 3];\n            var b10 = b[1 * 4 + 0];\n            var b11 = b[1 * 4 + 1];\n            var b12 = b[1 * 4 + 2];\n            var b13 = b[1 * 4 + 3];\n            var b20 = b[2 * 4 + 0];\n            var b21 = b[2 * 4 + 1];\n            var b22 = b[2 * 4 + 2];\n            var b23 = b[2 * 4 + 3];\n            var b30 = b[3 * 4 + 0];\n            var b31 = b[3 * 4 + 1];\n            var b32 = b[3 * 4 + 2];\n            var b33 = b[3 * 4 + 3];\n            return float4x4(b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30, b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31, b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32, b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33, b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30, b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31, b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32, b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33, b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30, b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31, b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32, b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33, b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30, b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31, b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32, b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33);\n            out = float4x4();\n        }\n        for (var i = 0; i < dimension; i++) {\n            for (var j = 0; j < dimension; j++) {\n                var sum = float(0);\n                for (var k = 0; k < dimension; k++) {\n                    sum += float(a[i * dimension + k] * b[k * dimension + j]);\n                }\n                out[i * dimension + j] = sum;\n            }\n        }\n        return out;\n        if (a.__matrix === 2 && b.__matrix === 2) {\n            var a00_1 = a[0];\n            var a01_1 = a[1];\n            var a10_1 = a[2];\n            var a11_1 = a[3];\n            var b00_1 = b[0];\n            var b01_1 = b[1];\n            var b10_1 = b[2];\n            var b11_1 = b[3];\n            var v = float2x2(a00_1 * b00_1 + a01_1 * b10_1, a00_1 * b01_1 + a01_1 * b11_1, a10_1 * b00_1 + a11_1 * b10_1, a10_1 * b01_1 + a11_1 * b11_1);\n            return v;\n        }\n        else if (a.__matrix === 3 && b.__matrix === 3) {\n            var a00_2 = a[0];\n            var a01_2 = a[1];\n            var a02_1 = a[2];\n            var a10_2 = a[3];\n            var a11_2 = a[4];\n            var a12_1 = a[5];\n            var a20_1 = a[6];\n            var a21_1 = a[7];\n            var a22_1 = a[8];\n            var b00_2 = b[0];\n            var b01_2 = b[1];\n            var b02_1 = b[2];\n            var b10_2 = b[3];\n            var b11_2 = b[4];\n            var b12_1 = b[5];\n            var b20_1 = b[6];\n            var b21_1 = b[7];\n            var b22_1 = b[8];\n            var v = float3x3(a00_2 * b00_2 + a01_2 * b10_2 + a02_1 * b20_1, a00_2 * b01_2 + a01_2 * b11_2 + a02_1 * b21_1, a00_2 * b02_1 + a01_2 * b12_1 + a02_1 * b22_1, a10_2 * b00_2 + a11_2 * b10_2 + a12_1 * b20_1, a10_2 * b01_2 + a11_2 * b11_2 + a12_1 * b21_1, a10_2 * b02_1 + a11_2 * b12_1 + a12_1 * b22_1, a20_1 * b00_2 + a21_1 * b10_2 + a22_1 * b20_1, a20_1 * b01_2 + a21_1 * b11_2 + a22_1 * b21_1, a20_1 * b02_1 + a21_1 * b12_1 + a22_1 * b22_1);\n            return v;\n        }\n        else if (a.__matrix === 4 && b.__matrix === 4) {\n            var a00_3 = a[0];\n            var a01_3 = a[1];\n            var a02_2 = a[2];\n            var a03_1 = a[3];\n            var a10_3 = a[4];\n            var a11_3 = a[5];\n            var a12_2 = a[6];\n            var a13_1 = a[7];\n            var a20_2 = a[8];\n            var a21_2 = a[9];\n            var a22_2 = a[10];\n            var a23_1 = a[11];\n            var a30_1 = a[12];\n            var a31_1 = a[13];\n            var a32_1 = a[14];\n            var a33_1 = a[15];\n            var b00_3 = b[0];\n            var b01_3 = b[1];\n            var b02_2 = b[2];\n            var b03_1 = b[3];\n            var b10_3 = b[4];\n            var b11_3 = b[5];\n            var b12_2 = b[6];\n            var b13_1 = b[7];\n            var b20_2 = b[8];\n            var b21_2 = b[9];\n            var b22_2 = b[10];\n            var b23_1 = b[11];\n            var b30_1 = b[12];\n            var b31_1 = b[13];\n            var b32_1 = b[14];\n            var b33_1 = b[15];\n            var v = float4x4(a00_3 * b00_3 + a01_3 * b10_3 + a02_2 * b20_2 + a03_1 * b30_1, a00_3 * b01_3 + a01_3 * b11_3 + a02_2 * b21_2 + a03_1 * b31_1, a00_3 * b02_2 + a01_3 * b12_2 + a02_2 * b22_2 + a03_1 * b32_1, a00_3 * b03_1 + a01_3 * b13_1 + a02_2 * b23_1 + a03_1 * b33_1, a10_3 * b00_3 + a11_3 * b10_3 + a12_2 * b20_2 + a13_1 * b30_1, a10_3 * b01_3 + a11_3 * b11_3 + a12_2 * b21_2 + a13_1 * b31_1, a10_3 * b02_2 + a11_3 * b12_2 + a12_2 * b22_2 + a13_1 * b32_1, a10_3 * b03_1 + a11_3 * b13_1 + a12_2 * b23_1 + a13_1 * b33_1, a20_2 * b00_3 + a21_2 * b10_3 + a22_2 * b20_2 + a23_1 * b30_1, a20_2 * b01_3 + a21_2 * b11_3 + a22_2 * b21_2 + a23_1 * b31_1, a20_2 * b02_2 + a21_2 * b12_2 + a22_2 * b22_2 + a23_1 * b32_1, a20_2 * b03_1 + a21_2 * b13_1 + a22_2 * b23_1 + a23_1 * b33_1, a30_1 * b00_3 + a31_1 * b10_3 + a32_1 * b20_2 + a33_1 * b30_1, a30_1 * b01_3 + a31_1 * b11_3 + a32_1 * b21_2 + a33_1 * b31_1, a30_1 * b02_2 + a31_1 * b12_2 + a32_1 * b22_2 + a33_1 * b32_1, a30_1 * b03_1 + a31_1 * b13_1 + a32_1 * b23_1 + a33_1 * b33_1);\n            return v;\n        }\n        else {\n            throw new Error('Invalid matrix multiplication');\n        }\n    }\n    function matrixInversefloat2x2(m) {\n        var a = m.__index(0)[0], b = m.__index(1)[0], c = m.__index(0)[1], d = m.__index(1)[1];\n        var det = a * d - b * c;\n        if (det === 0) {\n            throw new Error('Matrix determinant is zero');\n        }\n        var detInv = 1.0 / det;\n        return float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\n    }\n    function matrixInversefloat3x3(m) {\n        var n11 = m.__index(0)[0], n12 = m.__index(1)[0], n13 = m.__index(2)[0];\n        var n21 = m.__index(0)[1], n22 = m.__index(1)[1], n23 = m.__index(2)[1];\n        var n31 = m.__index(0)[2], n32 = m.__index(1)[2], n33 = m.__index(2)[2];\n        var t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13;\n        var det = n11 * t11 + n21 * t12 + n31 * t13;\n        if (det === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        var detInv = 1 / det;\n        var v = float3x3(t11 * detInv, (n31 * n23 - n33 * n21) * detInv, (n32 * n21 - n31 * n22) * detInv, t12 * detInv, (n33 * n11 - n31 * n13) * detInv, (n31 * n12 - n32 * n11) * detInv, t13 * detInv, (n21 * n13 - n23 * n11) * detInv, (n22 * n11 - n21 * n12) * detInv);\n        return v;\n    }\n    function matrixInversefloat4x4(m) {\n        var m00 = m[0 * 4 + 0];\n        var m01 = m[0 * 4 + 1];\n        var m02 = m[0 * 4 + 2];\n        var m03 = m[0 * 4 + 3];\n        var m10 = m[1 * 4 + 0];\n        var m11 = m[1 * 4 + 1];\n        var m12 = m[1 * 4 + 2];\n        var m13 = m[1 * 4 + 3];\n        var m20 = m[2 * 4 + 0];\n        var m21 = m[2 * 4 + 1];\n        var m22 = m[2 * 4 + 2];\n        var m23 = m[2 * 4 + 3];\n        var m30 = m[3 * 4 + 0];\n        var m31 = m[3 * 4 + 1];\n        var m32 = m[3 * 4 + 2];\n        var m33 = m[3 * 4 + 3];\n        var tmp_0 = m22 * m33;\n        var tmp_1 = m32 * m23;\n        var tmp_2 = m12 * m33;\n        var tmp_3 = m32 * m13;\n        var tmp_4 = m12 * m23;\n        var tmp_5 = m22 * m13;\n        var tmp_6 = m02 * m33;\n        var tmp_7 = m32 * m03;\n        var tmp_8 = m02 * m23;\n        var tmp_9 = m22 * m03;\n        var tmp_10 = m02 * m13;\n        var tmp_11 = m12 * m03;\n        var tmp_12 = m20 * m31;\n        var tmp_13 = m30 * m21;\n        var tmp_14 = m10 * m31;\n        var tmp_15 = m30 * m11;\n        var tmp_16 = m10 * m21;\n        var tmp_17 = m20 * m11;\n        var tmp_18 = m00 * m31;\n        var tmp_19 = m30 * m01;\n        var tmp_20 = m00 * m21;\n        var tmp_21 = m20 * m01;\n        var tmp_22 = m00 * m11;\n        var tmp_23 = m10 * m01;\n        var t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\n        var t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\n        var t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\n        var t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\n        var d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n        if (d === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        return float4x4(d * t0, d * t1, d * t2, d * t3, d * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)), d * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)), d * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)), d * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)), d * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)), d * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)), d * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)), d * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)), d * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)), d * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)), d * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)), d * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02)));\n    }\n    function matrixTransposefloat2x2(m) {\n        return float2x2(m.__index(0)[0], m.__index(1)[0], m.__index(0)[1], m.__index(1)[1]);\n    }\n    function matrixTransposefloat3x3(m) {\n        return float3x3(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2]);\n    }\n    function matrixTransposefloat4x4(m) {\n        return float4x4(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(3)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(3)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2], m.__index(3)[2], m.__index(0)[3], m.__index(1)[3], m.__index(2)[3], m.__index(3)[3]);\n    }\n    function matrixMul2x2float2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j * 2 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul3x3float3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j * 3 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul4x4float4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var j = 0; j < 4; j++) {\n            for (var i = 0; i < 4; i++) {\n                c[i] += a[j * 4 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat22x2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j] * b[i * 2 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat33x3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j] * b[i * 3 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat44x4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var i = 0; i < 4; i++) {\n            for (var j = 0; j < 4; j++) {\n                c[i] += a[j] * b[i * 4 + j];\n            }\n        }\n        return c;\n    }\n    var mulFunc = componentOp(function (a, b) { return a * b; });\n    function inverse(a) {\n        if (a.__matrix == 2) {\n            return matrixInversefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixInversefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixInversefloat4x4(a);\n        }\n    }\n    exports.inverse = inverse;\n    function transpose(a) {\n        if (a.__matrix == 2) {\n            return matrixTransposefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixTransposefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixTransposefloat4x4(a);\n        }\n    }\n    exports.transpose = transpose;\n    /** @shadeup=univ(!$0$ * $1$)*/\n    var mul = function (a, b) {\n        if (isMatrix(a) || isMatrix(b)) {\n            if (isMatrix(a) && isMatrix(b)) {\n                return matrixMul(a, b);\n            }\n            else {\n                if (isMatrix(a) && typeof b == 'number') {\n                    return componentMath(b, a, function (a, b) { return a * b; });\n                }\n                else if (isMatrix(b) && typeof a == 'number') {\n                    return componentMath(a, b, function (a, b) { return a * b; });\n                }\n                else {\n                    if (isMatrix(a)) {\n                        if (a.length == 4) {\n                            return matrixMul2x2float2(a, b);\n                        }\n                        else if (a.length == 9) {\n                            return matrixMul3x3float3(a, b);\n                        }\n                        else if (a.length == 16) {\n                            return matrixMul4x4float4(a, b);\n                        }\n                    }\n                    else if (isMatrix(b)) {\n                        if (b.length == 4) {\n                            return matrixMulfloat22x2(a, b);\n                        }\n                        else if (b.length == 9) {\n                            return matrixMulfloat33x3(a, b);\n                        }\n                        else if (b.length == 16) {\n                            return matrixMulfloat44x4(a, b);\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            return mulFunc(a, b);\n        }\n    };\n    exports.mul = mul;\n    /** @shadeup=univ(!$0$ / $1$)*/\n    exports.div = componentOp(function (a, b) { return a / b; });\n    /** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\n    exports.pow = componentOp(function (a, b) { return Math.pow(a, b); });\n    /** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\n    exports.mod = componentOpMatch(function (a, b) { return a - b * Math.floor(a / b); });\n    /** @shadeup=univ(!$0$ & $1$)*/\n    exports.bitand = componentOp(function (a, b) { return a & b; });\n    /** @shadeup=univ(!$0$ | $1$)*/\n    exports.bitor = componentOp(function (a, b) { return a | b; });\n    /** @shadeup=univ(!$0$ ^ $1$)*/\n    exports.bitxor = componentOp(function (a, b) { return a ^ b; });\n    /** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\n    exports.lshift = componentOp(function (a, b) { return a << b; });\n    /** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\n    exports.rshift = componentOp(function (a, b) { return a >> b; });\n    /** @shadeup=univ(!~$0$)*/\n    exports.bitnot = componentOpSingular(function (a) { return ~a; });\n    /** @shadeup=univ(!-($0$))*/\n    exports.negate = componentOpSingular(function (a) { return -a; });\n    /** @shadeup=univ(!+($0$))*/\n    exports.positive = componentOpSingular(function (a) { return Math.abs(a); });\n    /** @shadeup=univ(abs)*/\n    exports.abs = componentOpSingular(function (a) { return Math.abs(a); });\n    /**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\n    exports.floor = componentOpSingular(Math.floor);\n    /** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\n    exports.ceil = componentOpSingular(Math.ceil);\n    /** @shadeup=univ(round)*/\n    exports.round = componentOpSingular(Math.round);\n    /** @shadeup=univ(sign)*/\n    exports.sign = componentOpSingular(Math.sign);\n    /** @shadeup=univ(cos) */\n    exports.cos = componentOpSingular(Math.cos);\n    /** @shadeup=univ(sin) */\n    exports.sin = componentOpSingularFloat(Math.sin);\n    /** @shadeup=univ(tan) */\n    exports.tan = componentOpSingular(Math.tan);\n    /** @shadeup=univ(acos) */\n    exports.acos = componentOpSingular(Math.acos);\n    /** @shadeup=univ(asin) */\n    exports.asin = componentOpSingular(Math.asin);\n    /** @shadeup=univ(atan) */\n    exports.atan = componentOpSingular(Math.atan);\n    /** @shadeup=univ(atan2) */\n    exports.atan2 = Math.atan2;\n    /** @shadeup=univ(cosh) */\n    exports.cosh = componentOpSingular(Math.cosh);\n    /** @shadeup=univ(sinh) */\n    exports.sinh = componentOpSingular(Math.sinh);\n    /** @shadeup=univ(tanh) */\n    exports.tanh = componentOpSingular(Math.tanh);\n    /** @shadeup=univ(acosh) */\n    exports.acosh = componentOpSingular(Math.acosh);\n    /** @shadeup=univ(asinh) */\n    exports.asinh = componentOpSingular(Math.asinh);\n    /** @shadeup=univ(atanh) */\n    exports.atanh = componentOpSingular(Math.atanh);\n    /** @shadeup=univ(exp) */\n    exports.exp = componentOpSingular(Math.exp);\n    /** @shadeup=univ(log) */\n    exports.log = componentOpSingular(Math.log);\n    /** @shadeup=univ(log2) */\n    exports.log2 = componentOpSingular(Math.log2);\n    /** @shadeup=univ(log10) */\n    exports.log10 = componentOpSingular(Math.log10);\n    /** @shadeup=univ(sqrt) */\n    exports.sqrt = componentOpSingular(Math.sqrt);\n    /** @shadeup=univ(inversesqrt) */\n    exports.inversesqrt = componentOpSingular(function (a) { return 1 / Math.sqrt(a); });\n    /** @shadeup=univ(fract)*/\n    exports.frac = componentOpSingular(function (a) { return a - Math.floor(a); });\n    function wrap(x, low, high) {\n        if ((0, exports.lt)(x, low)) {\n            var rng = high - low;\n            var s1 = low - x;\n            var ms = s1 % rng;\n            return high - ms;\n        }\n        else if ((0, exports.gte)(x, high)) {\n            var rng = high - low;\n            var s1 = x - high;\n            var ms = s1 % rng;\n            return low + ms;\n        }\n        else {\n            return x;\n        }\n        // return add(mod(sub(x, low), sub(high, low)), low) as T;\n    }\n    exports.wrap = wrap;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand(seed) {\n        if (typeof seed === 'number') {\n            return (0, exports.frac)(Math.sin(seed * float(91.3458)) * float(47453.5453));\n        }\n        else {\n            return Math.random();\n        }\n    }\n    exports.rand = rand;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand2(seed) {\n        return (0, exports.frac)(Math.sin((0, exports.dot)(seed, float2(12.9898, 4.1414))) * float(43758.5453));\n    }\n    exports.rand2 = rand2;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand3(seed) {\n        var _a, _b;\n        return rand2((_a = swizzle(seed, 'xy'), _b = rand(swizzle(seed, 'z')), [_a[0] + _b, _a[1] + _b]));\n    }\n    exports.rand3 = rand3;\n    // export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\n    // \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\n    // }\n    function pingpong(x, length) {\n        var t = x % (length * float(2));\n        return length - Math.abs(t - length);\n    }\n    exports.pingpong = pingpong;\n    function vectorMath_2to1_3to3(cb2, cb3) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to3_4to4(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to1_4to1(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function cross2(a, b) {\n        return a[0] * b[1] - a[1] * b[0];\n    }\n    function cross3(a, b) {\n        return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n    }\n    exports.cross = vectorMath_2to1_3to3(cross2, cross3);\n    function dot2(a, b) {\n        return a[0] * b[0] + a[1] * b[1];\n    }\n    function dot3(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n    }\n    function dot4(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n    }\n    /** @shadeup=univ(dot)*/\n    exports.dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\n    function lerp1(a, b, t) {\n        return (a + (b - a) * t);\n    }\n    function lerp2(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)];\n    }\n    function lerp3(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)];\n    }\n    function lerp4(a, b, t) {\n        return [\n            lerp1(a[0], b[0], t),\n            lerp1(a[1], b[1], t),\n            lerp1(a[2], b[2], t),\n            lerp1(a[3], b[3], t)\n        ];\n    }\n    function lerp2x2(a, b, t) {\n        return float2x2(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t));\n    }\n    function lerp3x3(a, b, t) {\n        return float3x3(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t));\n    }\n    function lerp4x4(a, b, t) {\n        return float4x4(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t), lerp1(a[9], b[9], t), lerp1(a[10], b[10], t), lerp1(a[11], b[11], t), lerp1(a[12], b[12], t), lerp1(a[13], b[13], t), lerp1(a[14], b[14], t), lerp1(a[15], b[15], t));\n    }\n    /** @shadeup=univ(mix)*/\n    function lerp(a, b, t) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\n            return lerp1(a, b, t);\n        }\n        else if (isMatrix(a) && isMatrix(b)) {\n            if (a.length === 4 && b.length === 4) {\n                return lerp2x2(a, b, t);\n            }\n            else if (a.length === 9 && b.length === 9) {\n                return lerp3x3(a, b, t);\n            }\n            else if (a.length === 16 && b.length === 16) {\n                return lerp4x4(a, b, t);\n            }\n            else {\n                throw new Error('Invalid matrix length');\n            }\n        }\n        else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\n            return lerp2(a, b, t);\n        }\n        else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\n            return lerp3(a, b, t);\n        }\n        else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\n            return lerp4(a, b, t);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.lerp = lerp;\n    /** @shadeup=univ(!bilerp_\\`0\\`($0$, $1$, $2$, $3$, $4$, $5$)) */\n    function bilerp(a, b, c, d, u, v) {\n        return lerp(lerp(a, b, u), lerp(c, d, u), v);\n    }\n    exports.bilerp = bilerp;\n    /** @shadeup=univ(length)*/\n    function length(a) {\n        if (typeof a === 'number') {\n            return Math.abs(a);\n        }\n        else if (a.length === 2) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\n        }\n        else if (a.length === 3) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\n        }\n        else if (a.length === 4) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.length = length;\n    function dist(a, b) {\n        return length((0, exports.sub)(a, b));\n    }\n    exports.dist = dist;\n    /** @shadeup=univ(distance)*/\n    exports.distance = dist;\n    /** @shadeup=univ(normalize)*/\n    function normalize(a) {\n        if (a.length === 2) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l];\n        }\n        else if (a.length === 3) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l];\n        }\n        else if (a.length === 4) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.normalize = normalize;\n    /** @shadeup=univ(reflect)*/\n    function reflect(a, b) {\n        if (a.length === 2 && b.length === 2) {\n            return reflect2(a, b);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return reflect3(a, b);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return reflect4(a, b);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.reflect = reflect;\n    function reflect2(b, a) {\n        var dot = dot2(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\n    }\n    function reflect3(b, a) {\n        var dot = dot3(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\n    }\n    function reflect4(b, a) {\n        var dot = dot4(a, b);\n        return [\n            b[0] - 2 * dot * a[0],\n            b[1] - 2 * dot * a[1],\n            b[2] - 2 * dot * a[2],\n            b[3] - 2 * dot * a[3]\n        ];\n    }\n    /** @shadeup=univ(refract)*/\n    function refract(a, b, eta) {\n        if (a.length === 2 && b.length === 2) {\n            return refract2(a, b, eta);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return refract3(a, b, eta);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return refract4(a, b, eta);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.refract = refract;\n    function refract2(b, a, eta) {\n        var dot = dot2(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\n            ];\n    }\n    function refract3(b, a, eta) {\n        var dot = dot3(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\n            ];\n    }\n    function refract4(b, a, eta) {\n        var dot = dot4(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\n                eta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\n            ];\n    }\n    /** @shadeup=univ(degrees)*/\n    function degrees(a) {\n        return float((a * 180) / Math.PI);\n    }\n    exports.degrees = degrees;\n    /** @shadeup=univ(radians)*/\n    function radians(a) {\n        return float((a * Math.PI) / 180);\n    }\n    exports.radians = radians;\n    /** @shadeup=univ(step)*/\n    function step(edge, x) {\n        if (typeof edge === 'number') {\n            if (typeof x === 'number') {\n                return x < edge ? 0 : 1;\n            }\n            else {\n                return x.map(function (v) { return (v < edge ? 0 : 1); });\n            }\n        }\n        else {\n            if (typeof x === 'number') {\n                return edge.map(function (v) { return (x < v ? 0 : 1); });\n            }\n            else {\n                return edge.map(function (v, i) { return (x[i] < v ? 0 : 1); });\n            }\n        }\n    }\n    exports.step = step;\n    function _smoothstep(a, b, x) {\n        var t = clamp((x - a) / (b - a), 0, 1);\n        return t * t * (3 - 2 * t);\n    }\n    /** @shadeup=univ(smoothstep)*/\n    function smoothstep(a, b, x) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\n            return _smoothstep(a, b, x);\n        }\n        else if (typeof a === 'number' && typeof b === 'number') {\n            return x.map(function (v) { return _smoothstep(a, b, v); });\n        }\n        else {\n            return a.map(function (v, i) { return _smoothstep(v, b[i], x[i]); });\n        }\n    }\n    exports.smoothstep = smoothstep;\n    function componentReduce(vectors, cb) {\n        var result = [];\n        var _loop_1 = function (i) {\n            result.push(cb(vectors.map(function (v) { return v[i]; })));\n        };\n        for (var i = 0; i < vectors[0].length; i++) {\n            _loop_1(i);\n        }\n        return result;\n    }\n    /** @shadeup=univ(min)*/\n    function min() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.min.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var minTo_1 = args[1];\n                return args[0].map(function (v) { return Math.min(v, minTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var minFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.min(minFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.min.apply(Math, a); });\n            }\n            else {\n                return Math.min.apply(Math, args);\n            }\n        }\n    }\n    exports.min = min;\n    /** @shadeup=univ(max)*/\n    function max() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.max.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var maxTo_1 = args[1];\n                return args[0].map(function (v) { return Math.max(v, maxTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var maxFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.max(maxFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.max.apply(Math, a); });\n            }\n            else {\n                return Math.max.apply(Math, args);\n            }\n        }\n    }\n    exports.max = max;\n    /** @shadeup=univ(clamp)*/\n    function clamp(arg, min, max) {\n        if (Array.isArray(arg)) {\n            if (Array.isArray(min) && Array.isArray(max)) {\n                return arg.map(function (a, i) { return Math.min(Math.max(a, min[i]), max[i]); });\n            }\n            else {\n                return arg.map(function (a) { return Math.min(Math.max(a, min), max); });\n            }\n        }\n        else {\n            return Math.min(Math.max(arg, min), max);\n        }\n    }\n    exports.clamp = clamp;\n    /** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\n    function saturate(arg) {\n        return clamp(arg, float(0), float(1));\n    }\n    exports.saturate = saturate;\n    function eq(a, b) {\n        var ta = typeof a;\n        var tb = typeof b;\n        if (ta != tb) {\n            return false;\n        }\n        else if ((ta == 'number' && tb == 'number') ||\n            (ta == 'string' && tb == 'string') ||\n            (ta == 'boolean' && tb == 'boolean') ||\n            (ta == 'undefined' && tb == 'undefined')) {\n            return a == b;\n        }\n        else if (ta == 'object' && tb == 'object') {\n            if (Array.isArray(a) && Array.isArray(b)) {\n                if (a.length != b.length) {\n                    return false;\n                }\n                for (var i = 0; i < a.length; i++) {\n                    if (!eq(a[i], b[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            else {\n                return a == b;\n            }\n        }\n    }\n    exports.eq = eq;\n    /** @shadeup=univ(!($0$ != $1$))*/\n    var neq = function (a, b) { return !eq(a, b); };\n    exports.neq = neq;\n    /** @shadeup=univ(!($0$ < $1$))*/\n    var lt = function (a, b) { return a < b; };\n    exports.lt = lt;\n    /** @shadeup=univ(!($0$ <= $1$))*/\n    var lte = function (a, b) { return a <= b; };\n    exports.lte = lte;\n    /** @shadeup=univ(!($0$ > $1$))*/\n    var gt = function (a, b) { return a > b; };\n    exports.gt = gt;\n    /** @shadeup=univ(!($0$ >= $1$))*/\n    var gte = function (a, b) { return a >= b; };\n    exports.gte = gte;\n    /** @shadeup=univ(!($0$ && $1$))*/\n    var and = function (a, b) { return a && b; };\n    exports.and = and;\n    /** @shadeup=univ(!($0$ || $1$))*/\n    var or = function (a, b) { return a || b; };\n    exports.or = or;\n    /** @shadeup=univ(!(!$0$))*/\n    var not = function (a) { return !a; };\n    exports.not = not;\n    /** @shadeup=univ()*/\n    function makeVector() {\n        var out = [];\n        for (var i = 0; i < arguments.length; i++) {\n            var a = arguments[i];\n            if (typeof a === 'number') {\n                out.push(a);\n            }\n            else {\n                for (var j = 0; j < a.length; j++) {\n                    out.push(a[j]);\n                }\n            }\n        }\n        return out;\n        throw new Error('Invalid vector length');\n    }\n    exports.makeVector = makeVector;\n    var swizIndex = {\n        x: 0,\n        y: 1,\n        z: 2,\n        w: 3,\n        r: 0,\n        g: 1,\n        b: 2,\n        a: 3\n    };\n    var getSwizIndexFast = function (swiz) {\n        switch (swiz) {\n            case 'x':\n                return 0;\n            case 'y':\n                return 1;\n            case 'z':\n                return 2;\n            case 'w':\n                return 3;\n            case 'r':\n                return 0;\n            case 'g':\n                return 1;\n            case 'b':\n                return 2;\n            case 'a':\n                return 3;\n        }\n    };\n    /** @shadeup=shader */\n    function testDocComment() {\n        return 1;\n    }\n    exports.testDocComment = testDocComment;\n    function swizzle(v, swiz, assign) {\n        var _a;\n        if (typeof v === 'number') {\n            if (swiz.length === 1) {\n                return v;\n            }\n            else if (swiz.length === 2) {\n                return [v, v];\n            }\n            else if (swiz.length === 3) {\n                return [v, v, v];\n            }\n            else if (swiz.length === 4) {\n                return [v, v, v, v];\n            }\n        }\n        else if (Array.isArray(v)) {\n            if (typeof assign !== 'undefined') {\n                for (var i = 0; i < swiz.length; i++) {\n                    v[getSwizIndexFast(swiz[i])] = (_a = assign[i]) !== null && _a !== void 0 ? _a : assign;\n                }\n                return v;\n            }\n            if (swiz.length === 1) {\n                return v[getSwizIndexFast(swiz)];\n            }\n            else if (swiz.length === 2) {\n                return [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\n            }\n            else if (swiz.length === 3) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])]\n                ];\n            }\n            else if (swiz.length === 4) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])],\n                    v[getSwizIndexFast(swiz[3])]\n                ];\n            }\n        }\n        else {\n            return v[swiz];\n        }\n    }\n    exports.swizzle = swizzle;\n    function intifyVector(v) {\n        if (typeof v === 'number') {\n            return v;\n        }\n        else if (Array.isArray(v)) {\n            return v.map(function (v) { return v | 0; });\n        }\n        else {\n            return v;\n        }\n    }\n    exports.intifyVector = intifyVector;\n    exports.FM = static_math_1.FM;\n    // type f32 = number & { __float: never };\n    // type i32 = number & { __int: never };\n    // type num = f32 | i32;\n    // function f32(a: number): f32 {\n    // \treturn a as f32;\n    // }\n    // function i32(a: number): i32 {\n    // \treturn a as i32;\n    // }\n    // type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\n    // type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\n    // export const abc: numeric2 = (a, b, c) => a + b + c;\n    // abc(f32(1), i32(2));\n    var atomic_internal = /** @class */ (function () {\n        function atomic_internal(value) {\n            this.__value = value;\n        }\n        /** @shadeup=univ(!atomicLoad(&$self$))*/\n        atomic_internal.prototype.load = function () {\n            return this.__value;\n        };\n        /** @shadeup=univ(!atomicStore(&$self$, $0$))*/\n        atomic_internal.prototype.store = function (value) {\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n        };\n        /** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\n        atomic_internal.prototype.add = function (value) {\n            var old = this.__value;\n            this.__value += value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicSub(&$self$, $0$))*/\n        atomic_internal.prototype.sub = function (value) {\n            var old = this.__value;\n            this.__value -= value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMax(&$self$, $0$))*/\n        atomic_internal.prototype.max = function (value) {\n            var old = this.__value;\n            this.__value = Math.max(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMin(&$self$, $0$))*/\n        atomic_internal.prototype.min = function (value) {\n            var old = this.__value;\n            this.__value = Math.min(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\n        atomic_internal.prototype.and = function (value) {\n            var old = this.__value;\n            this.__value = value & this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicOr(&$self$, $0$))*/\n        atomic_internal.prototype.or = function (value) {\n            var old = this.__value;\n            this.__value = value | this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicXor(&$self$, $0$))*/\n        atomic_internal.prototype.xor = function (value) {\n            var old = this.__value;\n            this.__value = value ^ this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\n        atomic_internal.prototype.exchange = function (value) {\n            var old = this.__value;\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\n        atomic_internal.prototype.compareExchangeWeak = function (compare, value) {\n            var old = this.__value;\n            if (old == compare) {\n                this.__value = value;\n            }\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return {\n                old_value: old,\n                exchanged: old == compare\n            };\n        };\n        atomic_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_math_ts_71052_atomic_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__type\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__value\\\\\",null],[\\\\\"$mutate\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\n        };\n        return atomic_internal;\n    }());\n    exports.atomic_internal = atomic_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_math_ts_71052_atomic_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__type\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__value\\\\\",null],[\\\\\"$mutate\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), atomic_internal)\n    function atomic(value) {\n        return new atomic_internal(value);\n    }\n    exports.atomic = atomic;\n    window.makeAtomic = atomic;\n    /**\n     * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\n     *\n     * @shadeup=univ(!workgroupBarrier())\n     */\n    function workgroupBarrier() { }\n    exports.workgroupBarrier = workgroupBarrier;\n    /**\n     * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\n     *\n     * @shadeup=univ(!storageBarrier())\n     */\n    function storageBarrier() { }\n    exports.storageBarrier = storageBarrier;\n    /**\n     * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\n     *\n     * @shadeup=univ(!workgroupUniformLoad(&$0$))\n     */\n    function workgroupUniformLoad(p) {\n        return p;\n    }\n    exports.workgroupUniformLoad = workgroupUniformLoad;\n    /**\n     * Discards the current fragment.\n     *\n     * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\n     *\n     * See: https://www.w3.org/TR/WGSL/#discard-statement\n     *\n     * @shadeup=univ(!discard;)\n     */\n    function discard() { }\n    exports.discard = discard;\n    /**\n     * Returns the derivative of the input value with respect to the window-space x coordinate.\n     * @param value - The input value.\n     * @returns The derivative of the input value with respect to the window-space x coordinate.\n     * @shadeup=glsl(!dFdx($0$))\n     * @shadeup=wgsl(!dpdx($0$))\n     */\n    function ddx(value) {\n        return 0;\n    }\n    exports.ddx = ddx;\n    /**\n     * Returns the derivative of the input value with respect to the window-space y coordinate.\n     * @param value - The input value.\n     *\n     * @returns The derivative of the input value with respect to the window-space y coordinate.\n     * @shadeup=glsl(!dFdy($0$))\n     * @shadeup=wgsl(!dpdy($0$))\n     */\n    function ddy(value) {\n        return 0;\n    }\n    exports.ddy = ddy;\n    /**\n     * @shadeup=glsl(!dFdxFine($0$))\n     * @shadeup=wgsl(!dpdxFine($0$))\n     */\n    function ddxFine(value) {\n        return 0;\n    }\n    exports.ddxFine = ddxFine;\n    /**\n     * @shadeup=glsl(!dFdyFine($0$))\n     * @shadeup=wgsl(!dpdyFine($0$))\n     */\n    function ddyFine(value) {\n        return 0;\n    }\n    exports.ddyFine = ddyFine;\n    /**\n     * @shadeup=glsl(!dFdxCoarse($0$))\n     * @shadeup=wgsl(!dpdxCoarse($0$))\n     */\n    function ddxCoarse(value) {\n        return 0;\n    }\n    exports.ddxCoarse = ddxCoarse;\n    /**\n     * @shadeup=glsl(!dFdyCoarse($0$))\n     * @shadeup=wgsl(!dpdyCoarse($0$))\n     */\n    function ddyCoarse(value) {\n        return 0;\n    }\n    exports.ddyCoarse = ddyCoarse;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!bitcast<$[0]$>($0$))\n     */\n    function bitcast(value) {\n        return 0;\n    }\n    exports.bitcast = bitcast;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8snorm($0$))\n     */\n    function pack4x8snorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8snorm = pack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8unorm($0$))\n     */\n    function pack4x8unorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8unorm = pack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16snorm($0$))\n     */\n    function pack2x16snorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16snorm = pack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16unorm($0$))\n     */\n    function pack2x16unorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16unorm = pack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16float($0$))\n     */\n    function pack2x16float(value) {\n        return uint(0);\n    }\n    exports.pack2x16float = pack2x16float;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8snorm($0$))\n     */\n    function unpack4x8snorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8snorm = unpack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8unorm($0$))\n     */\n    function unpack4x8unorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8unorm = unpack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16snorm($0$))\n     */\n    function unpack2x16snorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16snorm = unpack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16unorm($0$))\n     */\n    function unpack2x16unorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16unorm = unpack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16float($0$))\n     */\n    function unpack2x16float(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16float = unpack2x16float;\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/static-math.ts\": {\n    outputFiles: [\n      {\n        name: \"/static-math.js\",\n        writeByteOrderMark: false,\n        text: 'define([\"require\", \"exports\"], function (require, exports) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.FM = void 0;\\n    ///\\n    /// GENERATED\\n    /// DO NOT EDIT THIS FILE\\n    /// see generate-static-math.ts\\n    ///\\n    exports.FM = {\\n        add_1_1: function (a, b) { return a + b; },\\n        add_2_1: function (a, b) { return [a[0] + b, a[1] + b]; },\\n        add_1_2: function (a, b) { return [a + b[0], a + b[1]]; },\\n        add_2_2: function (a, b) { return [a[0] + b[0], a[1] + b[1]]; },\\n        add_3_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b]; },\\n        add_1_3: function (a, b) { return [a + b[0], a + b[1], a + b[2]]; },\\n        add_3_3: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\\n        add_4_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\\n        add_1_4: function (a, b) { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\\n        add_4_4: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\\n        sub_1_1: function (a, b) { return a - b; },\\n        sub_2_1: function (a, b) { return [a[0] - b, a[1] - b]; },\\n        sub_1_2: function (a, b) { return [a - b[0], a - b[1]]; },\\n        sub_2_2: function (a, b) { return [a[0] - b[0], a[1] - b[1]]; },\\n        sub_3_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b]; },\\n        sub_1_3: function (a, b) { return [a - b[0], a - b[1], a - b[2]]; },\\n        sub_3_3: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\\n        sub_4_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\\n        sub_1_4: function (a, b) { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\\n        sub_4_4: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\\n        div_1_1: function (a, b) { return a / b; },\\n        div_2_1: function (a, b) { return [a[0] / b, a[1] / b]; },\\n        div_1_2: function (a, b) { return [a / b[0], a / b[1]]; },\\n        div_2_2: function (a, b) { return [a[0] / b[0], a[1] / b[1]]; },\\n        div_3_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b]; },\\n        div_1_3: function (a, b) { return [a / b[0], a / b[1], a / b[2]]; },\\n        div_3_3: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\\n        div_4_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\\n        div_1_4: function (a, b) { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\\n        div_4_4: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\\n        mul_1_1: function (a, b) { return a * b; },\\n        mul_2_1: function (a, b) { return [a[0] * b, a[1] * b]; },\\n        mul_1_2: function (a, b) { return [a * b[0], a * b[1]]; },\\n        mul_2_2: function (a, b) { return [a[0] * b[0], a[1] * b[1]]; },\\n        mul_3_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b]; },\\n        mul_1_3: function (a, b) { return [a * b[0], a * b[1], a * b[2]]; },\\n        mul_3_3: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\\n        mul_4_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\\n        mul_1_4: function (a, b) { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\\n        mul_4_4: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\\n        mod_1_1: function (a, b) { return a % b; },\\n        mod_2_1: function (a, b) { return [a[0] % b, a[1] % b]; },\\n        mod_1_2: function (a, b) { return [a % b[0], a % b[1]]; },\\n        mod_2_2: function (a, b) { return [a[0] % b[0], a[1] % b[1]]; },\\n        mod_3_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b]; },\\n        mod_1_3: function (a, b) { return [a % b[0], a % b[1], a % b[2]]; },\\n        mod_3_3: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\\n        mod_4_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\\n        mod_1_4: function (a, b) { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\\n        mod_4_4: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\\n        bitand_1_1: function (a, b) { return a & b; },\\n        bitand_2_1: function (a, b) { return [a[0] & b, a[1] & b]; },\\n        bitand_1_2: function (a, b) { return [a & b[0], a & b[1]]; },\\n        bitand_2_2: function (a, b) { return [a[0] & b[0], a[1] & b[1]]; },\\n        bitand_3_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b]; },\\n        bitand_1_3: function (a, b) { return [a & b[0], a & b[1], a & b[2]]; },\\n        bitand_3_3: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\\n        bitand_4_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\\n        bitand_1_4: function (a, b) { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\\n        bitand_4_4: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\\n        bitor_1_1: function (a, b) { return a | b; },\\n        bitor_2_1: function (a, b) { return [a[0] | b, a[1] | b]; },\\n        bitor_1_2: function (a, b) { return [a | b[0], a | b[1]]; },\\n        bitor_2_2: function (a, b) { return [a[0] | b[0], a[1] | b[1]]; },\\n        bitor_3_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b]; },\\n        bitor_1_3: function (a, b) { return [a | b[0], a | b[1], a | b[2]]; },\\n        bitor_3_3: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\\n        bitor_4_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\\n        bitor_1_4: function (a, b) { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\\n        bitor_4_4: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\\n        bitxor_1_1: function (a, b) { return a ^ b; },\\n        bitxor_2_1: function (a, b) { return [a[0] ^ b, a[1] ^ b]; },\\n        bitxor_1_2: function (a, b) { return [a ^ b[0], a ^ b[1]]; },\\n        bitxor_2_2: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1]]; },\\n        bitxor_3_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\\n        bitxor_1_3: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\\n        bitxor_3_3: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\\n        bitxor_4_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\\n        bitxor_1_4: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\\n        bitxor_4_4: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\\n        lshift_1_1: function (a, b) { return a << b; },\\n        lshift_2_1: function (a, b) { return [a[0] << b, a[1] << b]; },\\n        lshift_1_2: function (a, b) { return [a << b[0], a << b[1]]; },\\n        lshift_2_2: function (a, b) { return [a[0] << b[0], a[1] << b[1]]; },\\n        lshift_3_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b]; },\\n        lshift_1_3: function (a, b) { return [a << b[0], a << b[1], a << b[2]]; },\\n        lshift_3_3: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\\n        lshift_4_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\\n        lshift_1_4: function (a, b) { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\\n        lshift_4_4: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\\n        rshift_1_1: function (a, b) { return a >> b; },\\n        rshift_2_1: function (a, b) { return [a[0] >> b, a[1] >> b]; },\\n        rshift_1_2: function (a, b) { return [a >> b[0], a >> b[1]]; },\\n        rshift_2_2: function (a, b) { return [a[0] >> b[0], a[1] >> b[1]]; },\\n        rshift_3_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\\n        rshift_1_3: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2]]; },\\n        rshift_3_3: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\\n        rshift_4_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\\n        rshift_1_4: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\\n        rshift_4_4: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\\n        bitnot_1: function (a) { return ~a; },\\n        bitnot_2: function (a) { return [~a[0], ~a[1]]; },\\n        bitnot_3: function (a) { return [~a[0], ~a[1], ~a[2]]; },\\n        bitnot_4: function (a) { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\\n        negate_1: function (a) { return -a; },\\n        negate_2: function (a) { return [-a[0], -a[1]]; },\\n        negate_3: function (a) { return [-a[0], -a[1], -a[2]]; },\\n        negate_4: function (a) { return [-a[0], -a[1], -a[2], -a[3]]; },\\n        positive_1: function (a) { return Math.abs(a); },\\n        positive_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n        positive_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n        positive_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n        abs_1: function (a) { return Math.abs(a); },\\n        abs_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n        abs_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n        abs_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n        floor_1: function (a) { return Math.floor(a); },\\n        floor_2: function (a) { return [Math.floor(a[0]), Math.floor(a[1])]; },\\n        floor_3: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\\n        floor_4: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\\n        ceil_1: function (a) { return Math.ceil(a); },\\n        ceil_2: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\\n        ceil_3: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\\n        ceil_4: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\\n        round_1: function (a) { return Math.round(a); },\\n        round_2: function (a) { return [Math.round(a[0]), Math.round(a[1])]; },\\n        round_3: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\\n        round_4: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\\n        sign_1: function (a) { return Math.sign(a); },\\n        sign_2: function (a) { return [Math.sign(a[0]), Math.sign(a[1])]; },\\n        sign_3: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\\n        sign_4: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\\n        cos_1: function (a) { return Math.cos(a); },\\n        cos_2: function (a) { return [Math.cos(a[0]), Math.cos(a[1])]; },\\n        cos_3: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\\n        cos_4: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\\n        sin_1: function (a) { return Math.sin(a); },\\n        sin_2: function (a) { return [Math.sin(a[0]), Math.sin(a[1])]; },\\n        sin_3: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\\n        sin_4: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\\n        tan_1: function (a) { return Math.tan(a); },\\n        tan_2: function (a) { return [Math.tan(a[0]), Math.tan(a[1])]; },\\n        tan_3: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\\n        tan_4: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\\n        acos_1: function (a) { return Math.acos(a); },\\n        acos_2: function (a) { return [Math.acos(a[0]), Math.acos(a[1])]; },\\n        acos_3: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\\n        acos_4: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\\n        asin_1: function (a) { return Math.asin(a); },\\n        asin_2: function (a) { return [Math.asin(a[0]), Math.asin(a[1])]; },\\n        asin_3: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\\n        asin_4: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\\n        atan_1: function (a) { return Math.atan(a); },\\n        atan_2: function (a) { return [Math.atan(a[0]), Math.atan(a[1])]; },\\n        atan_3: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\\n        atan_4: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\\n        cosh_1: function (a) { return Math.cosh(a); },\\n        cosh_2: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\\n        cosh_3: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\\n        cosh_4: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\\n        sinh_1: function (a) { return Math.sinh(a); },\\n        sinh_2: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\\n        sinh_3: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\\n        sinh_4: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\\n        tanh_1: function (a) { return Math.tanh(a); },\\n        tanh_2: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\\n        tanh_3: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\\n        tanh_4: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\\n        acosh_1: function (a) { return Math.acosh(a); },\\n        acosh_2: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\\n        acosh_3: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\\n        acosh_4: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\\n        asinh_1: function (a) { return Math.asinh(a); },\\n        asinh_2: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\\n        asinh_3: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\\n        asinh_4: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\\n        atanh_1: function (a) { return Math.atanh(a); },\\n        atanh_2: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\\n        atanh_3: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\\n        atanh_4: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\\n        exp_1: function (a) { return Math.exp(a); },\\n        exp_2: function (a) { return [Math.exp(a[0]), Math.exp(a[1])]; },\\n        exp_3: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\\n        exp_4: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\\n        log_1: function (a) { return Math.log(a); },\\n        log_2: function (a) { return [Math.log(a[0]), Math.log(a[1])]; },\\n        log_3: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\\n        log_4: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\\n        log2_1: function (a) { return Math.log2(a); },\\n        log2_2: function (a) { return [Math.log2(a[0]), Math.log2(a[1])]; },\\n        log2_3: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\\n        log2_4: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\\n        log10_1: function (a) { return Math.log10(a); },\\n        log10_2: function (a) { return [Math.log10(a[0]), Math.log10(a[1])]; },\\n        log10_3: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\\n        log10_4: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\\n        sqrt_1: function (a) { return Math.sqrt(a); },\\n        sqrt_2: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\\n        sqrt_3: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\\n        sqrt_4: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\\n        int_2_1_1: function (a, b) { return [a | 0, b | 0]; },\\n        int_2_2: function (a) { return [a[0] | 0, a[1] | 0]; },\\n        int_3_1_1_1: function (a, b, c) { return [a | 0, b | 0, c | 0]; },\\n        int_3_2_1: function (a, b) { return [a[0] | 0, a[1] | 0, b | 0]; },\\n        int_3_1_2: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0]; },\\n        int_3_3: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0]; },\\n        int_4_1_1_1_1: function (a, b, c, d) { return [a | 0, b | 0, c | 0, d | 0]; },\\n        int_4_2_1_1: function (a, b, c) { return [a[0] | 0, a[1] | 0, b | 0, c | 0]; },\\n        int_4_1_2_1: function (a, b, c) { return [a | 0, b[0] | 0, b[1] | 0, c | 0]; },\\n        int_4_1_1_2: function (a, b, c) { return [a | 0, b | 0, c[0] | 0, c[1] | 0]; },\\n        int_4_3_1: function (a, b) { return [a[0] | 0, a[1] | 0, a[2] | 0, b | 0]; },\\n        int_4_1_3: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0, b[2] | 0]; },\\n        int_4_2_2: function (a, b) { return [a[0] | 0, a[1] | 0, b[0] | 0, b[1] | 0]; },\\n        int_4_4: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0, a[3] | 0]; },\\n        float_2_1_1: function (a, b) { return [a, b]; },\\n        float_2_2: function (a) { return [a[0], a[1]]; },\\n        float_3_1_1_1: function (a, b, c) { return [a, b, c]; },\\n        float_3_2_1: function (a, b) { return [a[0], a[1], b]; },\\n        float_3_1_2: function (a, b) { return [a, b[0], b[1]]; },\\n        float_3_3: function (a) { return [a[0], a[1], a[2]]; },\\n        float_4_1_1_1_1: function (a, b, c, d) { return [a, b, c, d]; },\\n        float_4_2_1_1: function (a, b, c) { return [a[0], a[1], b, c]; },\\n        float_4_1_2_1: function (a, b, c) { return [a, b[0], b[1], c]; },\\n        float_4_1_1_2: function (a, b, c) { return [a, b, c[0], c[1]]; },\\n        float_4_3_1: function (a, b) { return [a[0], a[1], a[2], b]; },\\n        float_4_1_3: function (a, b) { return [a, b[0], b[1], b[2]]; },\\n        float_4_2_2: function (a, b) { return [a[0], a[1], b[0], b[1]]; },\\n        float_4_4: function (a) { return [a[0], a[1], a[2], a[3]]; },\\n        uint_2_1_1: function (a, b) { return [a >>> 0, b >>> 0]; },\\n        uint_2_2: function (a) { return [a[0] >>> 0, a[1] >>> 0]; },\\n        uint_3_1_1_1: function (a, b, c) { return [a >>> 0, b >>> 0, c >>> 0]; },\\n        uint_3_2_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0]; },\\n        uint_3_1_2: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0]; },\\n        uint_3_3: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0]; },\\n        uint_4_1_1_1_1: function (a, b, c, d) { return [a >>> 0, b >>> 0, c >>> 0, d >>> 0]; },\\n        uint_4_2_1_1: function (a, b, c) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0, c >>> 0]; },\\n        uint_4_1_2_1: function (a, b, c) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, c >>> 0]; },\\n        uint_4_1_1_2: function (a, b, c) { return [a >>> 0, b >>> 0, c[0] >>> 0, c[1] >>> 0]; },\\n        uint_4_3_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, b >>> 0]; },\\n        uint_4_1_3: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, b[2] >>> 0]; },\\n        uint_4_2_2: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b[0] >>> 0, b[1] >>> 0]; },\\n        uint_4_4: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, a[3] >>> 0]; },\\n    };\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/std___std_all.ts\": {\n    outputFiles: [\n      {\n        name: \"/std___std_all.js\",\n        writeByteOrderMark: false,\n        text: `var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.time = exports.__deepClone = exports.__makeMap = exports.map = exports.array = exports.sleep = exports.hashableTypeToString = exports.globalVarGet = exports.globalVarInit = exports.compute = exports.statGraph = exports.stat = exports.flush = exports.print = exports.getShadeupLocalContext = exports.Mesh = exports.__dummy = void 0;\n    /**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n    exports.__dummy = 1;\n    // import { Mesh } from '/_std/mesh';\n    var Mesh = /** @class */ (function () {\n        function Mesh(prefils) {\n            this.vertices = [];\n            this.triangles = [];\n            this.normals = [];\n            this.tangents = [];\n            this.bitangents = [];\n            this.uvs = [];\n            this.colors = [];\n            this.symbol = Symbol();\n            if (prefils.vertices)\n                this.vertices = prefils.vertices;\n            if (prefils.triangles)\n                this.triangles = prefils.triangles;\n            if (prefils.normals)\n                this.normals = prefils.normals;\n            if (prefils.tangents)\n                this.tangents = prefils.tangents;\n            if (prefils.bitangents)\n                this.bitangents = prefils.bitangents;\n            if (prefils.uvs)\n                this.uvs = prefils.uvs;\n            if (prefils.colors)\n                this.colors = prefils.colors;\n        }\n        Mesh.prototype.getVertices = function () {\n            return this.vertices;\n        };\n        Mesh.prototype.getTriangles = function () {\n            return this.triangles;\n        };\n        Mesh.prototype.getNormals = function () {\n            return this.normals;\n        };\n        Mesh.prototype.getTangents = function () {\n            return this.tangents;\n        };\n        Mesh.prototype.getBitangents = function () {\n            return this.bitangents;\n        };\n        Mesh.prototype.getUVs = function () {\n            return this.uvs;\n        };\n        Mesh.prototype.getColors = function () {\n            return this.colors;\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), Mesh)\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n    /**\n     * Prints a set of value(s) to the console. Values will be converted to strings before printing.\n     *\n     * @param args Any number of values to print to the console\n     */\n    function print() {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        console.log.apply(console, args);\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_print'] === 'function') {\n            (_a = (0, exports.getShadeupLocalContext)())['__shadeup_print'].apply(_a, args);\n        }\n    }\n    exports.print = print;\n    /**\n     * Flushes (executes) all queued compute or draw calls\n     * @shadeup=tag(async) @shadeup=noemit_gpu\n     */\n    function flush() {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!(typeof (0, exports.getShadeupLocalContext)()['flushAdapter'] === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, (0, exports.getShadeupLocalContext)()['flushAdapter']()];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    }\n    exports.flush = flush;\n    /**\n     * Displays a single value in the stats panel at the top right\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any value\n     */\n    function stat(name, value) {\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_stat'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_stat'](name, value);\n        }\n    }\n    exports.stat = stat;\n    /**\n     * Display a graph of a numeric value over time\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any numeric value\n     * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\n     */\n    function statGraph(name, value, sampleRate) {\n        if (sampleRate === void 0) { sampleRate = 1; }\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'](name, value);\n        }\n    }\n    exports.statGraph = statGraph;\n    function infer(fn) {\n        return fn;\n    }\n    // export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\n    // export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\n    // export function draw(\n    // \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\n    // \tsecond?: shader<ShaderInput, ShaderOutput>,\n    // \tthird?: shader<ShaderInput, ShaderOutput>\n    // ) {\n    // \tif ('vertices' in first && second && third) {\n    // \t\t__shadeup_dispatch_draw_geometry(first, second, third);\n    // \t} else if (first && !second && !third) {\n    // \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n    // \t}\n    // }\n    // draw(makeShader('', (a, b) => {}));\n    // drawAlt(\n    // \tmakeShader(\n    // \t\t'000004808000091289258019303699031390005438610',\n    // \t\t/**@shadeup=shader*/ (__in, __out) => {\n    // \t\t\t__out.color;\n    // \t\t}\n    // \t)\n    // );\n    // /**\n    //  *\n    //  */\n    function compute(workgroups, computeShader) {\n        (0, exports.getShadeupLocalContext)().__shadeup_dispatch_compute(workgroups, computeShader);\n    }\n    exports.compute = compute;\n    // function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\n    // type x<T> = { x: T };\n    // function makeTex<T>(a: T): x<T> {\n    // \treturn { x: a };\n    // }\n    // draw({\n    // \tvertex: shader('abc', (__in, __out) => {}),\n    // \tattachments: [\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 })\n    // \t],\n    // \tmesh: new Mesh(),\n    // \tfragment: shader('abc', (__in, __out) => {\n    // \t\t//__out.attachment0\n    // \t})\n    // });\n    function globalVarInit(fileName, varName, initFn, getterFn) {\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals']) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'] = {};\n        }\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName] = {};\n        }\n        // Disable caching for now\n        var cache = false;\n        if (!(varName in (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) || !cache) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName] = initFn();\n        }\n        (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName];\n    }\n    exports.globalVarInit = globalVarInit;\n    function globalVarGet(fileName, varName) {\n        if (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\n            return (0, exports.getShadeupLocalContext)()[varName];\n        }\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName]();\n    }\n    exports.globalVarGet = globalVarGet;\n    function hashableTypeToString(k) {\n        if (typeof k == 'number') {\n            return k.toString();\n        }\n        else if (typeof k == 'object') {\n            if (Array.isArray(k)) {\n                return k.map(hashableTypeToString).join(',');\n            }\n            else {\n                return k.toString();\n            }\n        }\n        else {\n            return k.toString();\n        }\n    }\n    exports.hashableTypeToString = hashableTypeToString;\n    Array.prototype.len = function () {\n        return this.length;\n    };\n    Array.prototype.last = function () {\n        return this[this.length - 1];\n    };\n    Array.prototype.first = function () {\n        return this[0];\n    };\n    Array.prototype.append = function (items) {\n        for (var i = 0; i < items.length; i++) {\n            this.push(items[i]);\n        }\n    };\n    Array.prototype.remove = function (index) {\n        this.splice(index, 1);\n    };\n    Array.prototype.__index = function (index) {\n        return this[index];\n    };\n    Array.prototype.__index_assign = function (index, value) {\n        this[index] = value;\n    };\n    Array.prototype.__index_assign_op = function (op_fn, index, value) {\n        this[index] = op_fn(this[index], value);\n    };\n    /** @shadeup=tag(async) */\n    function sleep(seconds) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })];\n            });\n        });\n    }\n    exports.sleep = sleep;\n    function array(count, initializer) {\n        if (initializer === void 0) { initializer = null; }\n        var arr = new Array(count);\n        if (initializer) {\n            for (var i = 0; i < count; i++) {\n                arr[i] = initializer;\n            }\n        }\n        return arr;\n    }\n    exports.array = array;\n    var map = /** @class */ (function () {\n        function map(entries) {\n            this.pairs = new Map();\n            if (entries)\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                    var e = entries_1[_i];\n                    this.__index_assign(e[0], e[1]);\n                }\n        }\n        map.prototype.__index = function (key) {\n            if (!this.pairs.has(hashableTypeToString(key))) {\n                throw new Error('Key not found: ' + hashableTypeToString(key));\n            }\n            return this.pairs.get(hashableTypeToString(key))[1];\n        };\n        map.prototype.__index_assign = function (key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, value]);\n        };\n        map.prototype.__index_assign_op = function (op_fn, key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\n        };\n        map.prototype.delete = function (key) {\n            this.pairs.delete(hashableTypeToString(key));\n        };\n        map.prototype.has = function (key) {\n            return this.pairs.has(hashableTypeToString(key));\n        };\n        map.prototype.keys = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[0]; });\n        };\n        map.prototype.values = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[1]; });\n        };\n        map.new = function (entries) {\n            return new map(entries);\n        };\n        map.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_8545_map\\\\\",\\\\\"fields\\\\\":[[\\\\\"pairs\\\\\",null]]}\");\n        };\n        return map;\n    }());\n    exports.map = map;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_8545_map\\\\\",\\\\\"fields\\\\\":[[\\\\\"pairs\\\\\",null]]}\"), map)\n    function __makeMap(initial) {\n        return new map(Object.entries(initial));\n    }\n    exports.__makeMap = __makeMap;\n    function __deepClone(value) {\n        if (typeof value == 'object') {\n            if (Array.isArray(value)) {\n                var res = new Array(value.length);\n                for (var i = 0; i < value.length; i++) {\n                    res[i] = __deepClone(value[i]);\n                }\n                return res;\n            }\n            else {\n                if (value && typeof value.clone == 'function') {\n                    return value.clone();\n                }\n                else {\n                    return value;\n                }\n            }\n        }\n        else {\n            return value;\n        }\n    }\n    exports.__deepClone = __deepClone;\n    var time = /** @class */ (function () {\n        function time() {\n        }\n        /** Saves the current time with a key of name */\n        time.start = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_start');\n        };\n        /** Returns the difference in milliseconds between a start with the same key */\n        time.stop = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_end');\n            var res = performance.measure((name !== null && name !== void 0 ? name : '_default') + '_diff', (name !== null && name !== void 0 ? name : '_default') + '_start', (name !== null && name !== void 0 ? name : '_default') + '_end');\n            return res.duration;\n        };\n        /**\n         * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\n         *\n         * This uses performance.now() under the hood:\n         * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\n         */\n        time.now = function () {\n            return performance.now();\n        };\n        time.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_10778_time\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return time;\n    }());\n    exports.time = time;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_10778_time\\\\\",\\\\\"fields\\\\\":[]}\"), time)\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/std.ts\": {\n    outputFiles: [\n      {\n        name: \"/std.js\",\n        writeByteOrderMark: false,\n        text: 'var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\\n};\\ndefine([\"require\", \"exports\", \"/_std/ui\", \"/_std/mesh\", \"/_std/sdf\", \"/_std/geo\", \"/_std/native\"], function (require, exports, ui_1, mesh_1, sdf_1, geo_1, native_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.geo = exports.sdf = exports.Mesh = exports.mesh = exports.ui = void 0;\\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\\n    Object.defineProperty(exports, \"mesh\", { enumerable: true, get: function () { return mesh_1.mesh; } });\\n    Object.defineProperty(exports, \"Mesh\", { enumerable: true, get: function () { return mesh_1.Mesh; } });\\n    Object.defineProperty(exports, \"sdf\", { enumerable: true, get: function () { return sdf_1.sdf; } });\\n    Object.defineProperty(exports, \"geo\", { enumerable: true, get: function () { return geo_1.geo; } });\\n    __exportStar(native_1, exports);\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/ui.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/ui.js\",\n        writeByteOrderMark: false,\n        text: `define([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.ui = void 0;\n    var ui;\n    (function (ui) {\n        function puck(position) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position);\n        }\n        ui.puck = puck;\n        function draggable(position, radius) {\n            if (radius === void 0) { radius = 10; }\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position, radius, true);\n        }\n        ui.draggable = draggable;\n        function textbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('textbox', value);\n        }\n        ui.textbox = textbox;\n        function slider(value, min, max) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_SLIDER(value, { min: min, max: max });\n        }\n        ui.slider = slider;\n        function label(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('label', text);\n        }\n        ui.label = label;\n        function checkbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('checkbox', value);\n        }\n        ui.checkbox = checkbox;\n        function combo(value, options) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('combo', value, { options: options });\n        }\n        ui.combo = combo;\n        function group(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('group', text);\n        }\n        ui.group = group;\n        function button(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('button', false, { text: text });\n        }\n        ui.button = button;\n        function pop() {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('pop');\n        }\n        ui.pop = pop;\n    })(ui = exports.ui || (exports.ui = {}));\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/native.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/native.js\",\n        writeByteOrderMark: false,\n        text: `define([\"require\", \"exports\", \"/_std/common\", \"/_std/context\"], function (require, exports, common_1, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.KeyboardInputState = exports.MouseInputState = exports.FrameContext = exports.shadeupMakeTextureFromUrl = void 0;\n    function shadeupMakeTextureFromUrl(url) {\n        return (0, context_1.getShadeupLocalContext)()['shadeupMakeTextureFromUrlNative'](url);\n    }\n    exports.shadeupMakeTextureFromUrl = shadeupMakeTextureFromUrl;\n    var FrameContext = /** @class */ (function () {\n        function FrameContext() {\n            /** Mouse/touch screen input state for this frame */\n            this.mouse = new MouseInputState();\n            /** Keyboard input state for this frame */\n            this.keyboard = new KeyboardInputState();\n            /** Controllable camera (Hold right click and use WASD to move) */\n            this.camera = new common_1.Camera();\n            this.camera2d = new common_1.Camera2d();\n        }\n        FrameContext.prototype.configureCamera = function (options) { };\n        /**\n         * Use external values from the host JavaScript environment.\n         */\n        FrameContext.prototype.input = function (key, defaultValue) {\n            return defaultValue;\n        };\n        /**\n         * Send values to the host JavaScript environment.\n         */\n        FrameContext.prototype.output = function (key, value) { };\n        FrameContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_387_FrameContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"deltaTime\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"time\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"screenSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frame\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"mouse\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}],[\\\\\"keyboard\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}],[\\\\\"camera\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}],[\\\\\"camera2d\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}]]}\");\n        };\n        return FrameContext;\n    }());\n    exports.FrameContext = FrameContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_387_FrameContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"deltaTime\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"time\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"screenSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frame\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"mouse\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}],[\\\\\"keyboard\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}],[\\\\\"camera\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}],[\\\\\"camera2d\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}]]}\"), FrameContext)\n    var MouseInputState = /** @class */ (function () {\n        function MouseInputState() {\n            /** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\n            this.button = [false, false, false];\n            /** Mouse button pressed state for buttons 0-3 (left, middle, right) */\n            this.clicked = [false, false, false];\n        }\n        MouseInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}\");\n        };\n        return MouseInputState;\n    }());\n    exports.MouseInputState = MouseInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}\"), MouseInputState)\n    var KeyboardInputState = /** @class */ (function () {\n        function KeyboardInputState() {\n        }\n        KeyboardInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}\");\n        };\n        return KeyboardInputState;\n    }());\n    exports.KeyboardInputState = KeyboardInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}\"), KeyboardInputState)\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/paint.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/paint.js\",\n        writeByteOrderMark: false,\n        text: `define([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.PaintingContext = void 0;\n    var PaintingContext = /** @class */ (function () {\n        function PaintingContext(canvas, gl) {\n            var _this = this;\n            this.markDirtyCallback = function () { };\n            this.__ctx = null;\n            this.__gl = null;\n            this.__offscreen_canvas = null;\n            this.__program = null;\n            this.stagedChanges = false;\n            this.dirty = false;\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.__currentColor = null;\n            this.pointsCounter = 0;\n            this.cacheSize = [0, 0];\n            if (!gl)\n                return;\n            this.__gl = gl;\n            this.__canvas = canvas;\n            this.__offscreen_canvas = document.createElement('canvas');\n            this.__offscreen_canvas.width = canvas.width;\n            this.__offscreen_canvas.height = canvas.height;\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__ctx = this.__offscreen_canvas.getContext('2d', {\n                willReadFrequently: true\n            });\n            this.__offscreen_canvas.style.position = 'absolute';\n            this.__offscreen_canvas.style.zIndex = '10';\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__setColor([0, 0, 0, 1]);\n            gl.addEventListener('context', function (toContext) {\n                if (toContext == 'draw') {\n                    _this.flush();\n                }\n            });\n            gl.addEventListener('flush', function () {\n                _this.flush();\n            });\n        }\n        PaintingContext.prototype.flush = function () {\n            if (!this.__gl)\n                return;\n            if (!this.__canvas)\n                return;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.stagedChanges)\n                return;\n            if (this.fastPoints)\n                this.flushPoints();\n            this.__gl.drawImage(this.__offscreen_canvas);\n            this.stagedChanges = false;\n            if (this.__offscreen_canvas.width != this.__canvas.width ||\n                this.__offscreen_canvas.height != this.__canvas.height) {\n                this.__offscreen_canvas.width = this.__canvas.width;\n                this.__offscreen_canvas.height = this.__canvas.height;\n            }\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.__beforeDraw = function () {\n            var _a;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.__ctx)\n                return;\n            if (!this.__canvas)\n                return;\n            this.markDirtyCallback();\n            (_a = this.__gl) === null || _a === void 0 ? void 0 : _a.activatePaintContext();\n            if (!this.stagedChanges) {\n                this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n                this.__ctx.drawImage(this.__canvas, 0, 0);\n                var color = this.__currentColor;\n                this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n                this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            }\n        };\n        PaintingContext.prototype.__afterDraw = function () {\n            var gl = this.__gl;\n            this.dirty = true;\n            this.stagedChanges = true;\n        };\n        PaintingContext.prototype.__setColor = function (color) {\n            if (!this.__ctx || !color)\n                return;\n            if (this.__currentColor &&\n                this.__currentColor[0] == color[0] &&\n                this.__currentColor[1] == color[1] &&\n                this.__currentColor[2] == color[2] &&\n                this.__currentColor[3] == color[3])\n                return;\n            this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__currentColor = [color[0], color[1], color[2], color[3]];\n        };\n        PaintingContext.prototype.fillRect = function (pos, size, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillCircle = function (pos, radius, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillArc = function (pos, radius, startAngle, endAngle, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.line = function (pos1, pos2, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos1[0], pos1[1]);\n            this.__ctx.lineTo(pos2[0], pos2[1]);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.circle = function (pos, radius, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.arc = function (pos, radius, startAngle, endAngle, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.text = function (pos, text, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillText(text, pos[0], pos[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.startPath = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.lineTo = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.strokePath = function (color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n            this.__setColor(color);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillPath = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__setColor(color);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.setStrokeWidth = function (width) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n        };\n        PaintingContext.prototype.setFont = function (font) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = font;\n        };\n        PaintingContext.prototype.setFontSize = function (size) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = \"\".concat(size, \"px \").concat(this.__ctx.font.split(' ').slice(1).join(' '));\n        };\n        PaintingContext.prototype.setTextAlign = function (align) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textAlign = align;\n        };\n        PaintingContext.prototype.setTextBaseline = function (baseline) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textBaseline = baseline;\n        };\n        PaintingContext.prototype.setLineCap = function (cap) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineCap = cap;\n        };\n        PaintingContext.prototype.setLineJoin = function (join) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineJoin = join;\n        };\n        PaintingContext.prototype.setMiterLimit = function (limit) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.miterLimit = limit;\n        };\n        PaintingContext.prototype.setShadowColor = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowColor = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n        };\n        PaintingContext.prototype.setShadowBlur = function (blur) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowBlur = blur;\n        };\n        PaintingContext.prototype.setShadowOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowOffsetX = offset[0];\n            this.__ctx.shadowOffsetY = offset[1];\n        };\n        PaintingContext.prototype.setGlobalAlpha = function (alpha) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalAlpha = alpha;\n        };\n        PaintingContext.prototype.setGlobalCompositeOperation = function (op) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalCompositeOperation = op;\n        };\n        PaintingContext.prototype.setImageSmoothingEnabled = function (enabled) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingEnabled = enabled;\n        };\n        PaintingContext.prototype.setImageSmoothingQuality = function (quality) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingQuality = quality;\n        };\n        PaintingContext.prototype.setLineDash = function (dash) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setLineDash(dash);\n        };\n        PaintingContext.prototype.setLineDashOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineDashOffset = offset;\n        };\n        PaintingContext.prototype.setTransform = function (a, b, c, d, e, f) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setTransform(a, b, c, d, e, f);\n        };\n        PaintingContext.prototype.resetTransform = function () {\n            if (!this.__ctx)\n                return;\n            this.__ctx.resetTransform();\n        };\n        PaintingContext.prototype.scale = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.scale(v[0], v[1]);\n        };\n        PaintingContext.prototype.rotate = function (angle) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.rotate(angle);\n        };\n        PaintingContext.prototype.translate = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.translate(v[0], v[1]);\n        };\n        PaintingContext.prototype.flushPoints = function () {\n            if (!this.__ctx)\n                return;\n            if (!this.fastPoints)\n                return;\n            if (!this.fastPointsBuffer)\n                return;\n            this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.point = function (pos, color) {\n            if (!this.__ctx)\n                return;\n            this.pointsCounter++;\n            this.__beforeDraw();\n            if (this.pointsCounter > 10) {\n                if (!this.fastPoints) {\n                    this.fastPoints = true;\n                    this.cacheSize = [this.__offscreen_canvas.width, this.__offscreen_canvas.height];\n                    this.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\n                }\n                if (!this.fastPointsBuffer)\n                    return;\n                var x = Math.floor(pos[0]);\n                var y = Math.floor(pos[1]);\n                var index = (y * this.cacheSize[0] + x) * 4;\n                if (!color) {\n                    color = this.__currentColor;\n                }\n                var oldColorx = this.fastPointsBuffer.data[index] / 255;\n                var oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n                var oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n                var oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n                this.fastPointsBuffer.data[index] =\n                    color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 1] =\n                    color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 2] =\n                    color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\n            }\n            else {\n                this.__setColor(color);\n                this.__ctx.fillRect(pos[0], pos[1], 1, 1);\n            }\n            this.__afterDraw();\n        };\n        PaintingContext.prototype.vector = function (pos, dir, color, width) {\n            if (color === void 0) { color = [0.9803921568627451, 0.8, 0.08235294117647059, 1]; }\n            if (width === void 0) { width = 4; }\n            if (!this.__ctx || (dir[0] == 0 && dir[1] == 0))\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            this.__ctx.moveTo(pos[0], pos[1]);\n            this.__ctx.lineCap = 'round';\n            this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.stroke();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            // Arrows\n            var arrowSize = 20;\n            var arrowAngle = Math.PI / 5;\n            var dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n            var arrow1 = [\n                Math.cos(dirAngle + arrowAngle) * arrowSize,\n                Math.sin(dirAngle + arrowAngle) * arrowSize\n            ];\n            var arrow2 = [\n                Math.cos(dirAngle - arrowAngle) * arrowSize,\n                Math.sin(dirAngle - arrowAngle) * arrowSize\n            ];\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.grid = function (center, count, gap, color, width) {\n            if (color === void 0) { color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1]; }\n            if (width === void 0) { width = 2; }\n            if (!this.__ctx)\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            var start = [\n                center[0] - (count[0] / 2) * gap[0],\n                center[1] - (count[1] / 2) * gap[1]\n            ];\n            for (var i = 0; i <= count[0]; i++) {\n                this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n                this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n            }\n            for (var i = 0; i <= count[1]; i++) {\n                this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n                this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n            }\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}\");\n        };\n        return PaintingContext;\n    }());\n    exports.PaintingContext = PaintingContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}\"), PaintingContext)\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/buffer.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/buffer.js\",\n        writeByteOrderMark: false,\n        text: `var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\", \"/_std/context\", \"/std_math\"], function (require, exports, context_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.buffer = exports.buffer_internal = void 0;\n    var __ = { intifyVector: std_math_1.intifyVector };\n    var buffer_internal = /** @class */ (function () {\n        function buffer_internal(size, typeName, structure) {\n            var _this = this;\n            this.__opaque_buffer = true;\n            this.structArray = null;\n            this.floatArray = null;\n            this.intArray = null;\n            this.uintArray = null;\n            this.arrayBuffer = null;\n            this.vectorSize = 0;\n            this.platformPayload = null;\n            this.adapter = null;\n            this.dirty = false;\n            this.pendingWrites = 0;\n            this.cpuReadDirty = false;\n            this.cpuWriteDirty = false;\n            this.elementCount = 0;\n            this.elementBytes = 0;\n            this.structured = false;\n            this.watchMutation = false;\n            this.symbol = Symbol();\n            this.adapter = (0, context_1.getShadeupLocalContext)().shadeupGetGraphicsAdapter();\n            this.typeName = typeName;\n            if (structure) {\n                if (structure.name && !structure.name.startsWith('atomic')) {\n                    this.typeName = structure.name;\n                }\n            }\n            this.elementCount = size;\n            this.elementBytes = 4;\n            if (typeName == 'float4' ||\n                typeName == 'float3' ||\n                typeName == 'float2' ||\n                typeName == 'float') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.floatArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.floatArray[index] = value;\n                };\n                if (typeName == 'float4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float4)(_this.floatArray[index * 4], _this.floatArray[index * 4 + 1], _this.floatArray[index * 4 + 2], _this.floatArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 4] = value[0];\n                        _this.floatArray[index * 4 + 1] = value[1];\n                        _this.floatArray[index * 4 + 2] = value[2];\n                        _this.floatArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'float3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float3)(_this.floatArray[index * 3], _this.floatArray[index * 3 + 1], _this.floatArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 3] = value[0];\n                        _this.floatArray[index * 3 + 1] = value[1];\n                        _this.floatArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'float2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float2)(_this.floatArray[index * 2], _this.floatArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 2] = value[0];\n                        _this.floatArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.floatArray = new Float32Array(size * this.vectorSize);\n                this.arrayBuffer = this.floatArray.buffer;\n            }\n            else if (typeName == 'int4' ||\n                typeName == 'int3' ||\n                typeName == 'int2' ||\n                typeName == 'int') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.intArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.intArray[index] = value;\n                };\n                if (typeName == 'int4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int4)(_this.intArray[index * 4], _this.intArray[index * 4 + 1], _this.intArray[index * 4 + 2], _this.intArray[index * 4 + 3]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 4] = value[0];\n                        _this.intArray[index * 4 + 1] = value[1];\n                        _this.intArray[index * 4 + 2] = value[2];\n                        _this.intArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'int3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int3)(_this.intArray[index * 3], _this.intArray[index * 3 + 1], _this.intArray[index * 3 + 2]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 3] = value[0];\n                        _this.intArray[index * 3 + 1] = value[1];\n                        _this.intArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'int2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int2)(_this.intArray[index * 2], _this.intArray[index * 2 + 1]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 2] = value[0];\n                        _this.intArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.intArray = new Int32Array(size * this.vectorSize);\n                this.arrayBuffer = this.intArray.buffer;\n            }\n            else if (typeName == 'uint4' ||\n                typeName == 'uint3' ||\n                typeName == 'uint2' ||\n                typeName == 'uint') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.uintArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.uintArray[index] = value;\n                };\n                if (typeName == 'uint4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint4)(_this.uintArray[index * 4], _this.uintArray[index * 4 + 1], _this.uintArray[index * 4 + 2], _this.uintArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 4] = value[0];\n                        _this.uintArray[index * 4 + 1] = value[1];\n                        _this.uintArray[index * 4 + 2] = value[2];\n                        _this.uintArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'uint3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint3)(_this.uintArray[index * 3], _this.uintArray[index * 3 + 1], _this.uintArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 3] = value[0];\n                        _this.uintArray[index * 3 + 1] = value[1];\n                        _this.uintArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'uint2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint2)(_this.uintArray[index * 2], _this.uintArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 2] = value[0];\n                        _this.uintArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.uintArray = new Uint32Array(size * this.vectorSize);\n                this.arrayBuffer = this.uintArray.buffer;\n            }\n            else {\n                this.structured = true;\n                if (typeName.startsWith('atomic<')) {\n                    // this.structArray = new Array<T>(size);\n                    this.arrayBuffer = new ArrayBuffer(size * 4);\n                    this.watchMutation = true;\n                    this.vectorSize = 1;\n                    this.elementBytes = 4;\n                    this.elementCount = size;\n                    for (var i = 0; i < size; i++) {\n                        // this.structArray[i] = atomic(0) as T;\n                    }\n                    if (typeName == 'atomic<uint>') {\n                        this.uintArray = new Uint32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.uintArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.uintArray[index] = value.__value;\n                        };\n                    }\n                    else {\n                        this.intArray = new Int32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.intArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.intArray[index] = value.__value;\n                        };\n                    }\n                }\n                else {\n                    var elementSize_1 = this.adapter.getValueSize(structure);\n                    var realSize = elementSize_1 * size;\n                    this.elementCount = size;\n                    this.elementBytes = elementSize_1;\n                    this.arrayBuffer = new ArrayBuffer(realSize);\n                    this.fastIndex = function (index) {\n                        return _this.adapter.readStructuredBuffer(structure, _this.arrayBuffer, index * elementSize_1);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.cpuWriteDirty = true;\n                        _this.adapter.writeStructuredBuffer(structure, value, _this.arrayBuffer, index * (elementSize_1 / 4));\n                    };\n                }\n            }\n            this.__index = function (index) {\n                // await this.download();\n                if (_this.watchMutation) {\n                    var data = _this.fastIndex(index);\n                    data.$mutate = function (to) {\n                        _this.cpuWriteDirty = true;\n                        if (to !== undefined) {\n                            if (_this.intArray) {\n                                _this.intArray[index] = to;\n                            }\n                            else {\n                                _this.uintArray[index] = to;\n                            }\n                        }\n                    };\n                    return data;\n                }\n                else {\n                    return _this.fastIndex(index);\n                }\n            };\n            this.__index_assign = function (index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, value);\n            };\n            this.__index_assign_op = function (op_fn, index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, op_fn(_this.fastIndex(index), value));\n            };\n        }\n        buffer_internal.prototype.destroy = function () {\n            this.adapter.destroyBuffer(this);\n        };\n        buffer_internal.prototype.__index = function (index) {\n            // this.download();\n            // return this.fastIndex(index);\n            return null;\n        };\n        buffer_internal.prototype.__index_assign = function (index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, value);\n        };\n        buffer_internal.prototype.__index_assign_op = function (op_fn, index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\n        };\n        buffer_internal.prototype.len = function () {\n            return this.elementCount;\n        };\n        /**\n         * Returns the underlying cpu buffer as a typed array.\n         *\n         * > [!NOTE]\n         * > This is considerably faster than using the raw index [] operator.\n         *\n         * > [!NOTE]\n         * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\n         *\n         * \\`\\`\\`shadeup\n         * let buf = buffer<uint>();\n         * let data = buf.getData();\n         *\n         * for (let i = 0; i < data.length; i += 4) {\n         * \t// Do something with data[i]\n         * }\n         * \\`\\`\\`\n         */\n        buffer_internal.prototype.getData = function () {\n            var _a, _b, _c;\n            if (this.structured) {\n                return this.structArray;\n            }\n            else {\n                return (_c = (_b = (_a = this.floatArray) !== null && _a !== void 0 ? _a : this.intArray) !== null && _b !== void 0 ? _b : this.uintArray) !== null && _c !== void 0 ? _c : new Uint8Array(0);\n            }\n        };\n        buffer_internal.prototype.write = function (other) {\n            if (!this.adapter)\n                return;\n            this.adapter.copyBufferToBuffer(other, this);\n        };\n        /** @shadeup=tag(async) @shadeup=noemit_gpu */\n        buffer_internal.prototype.download = function () {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!this.adapter)\n                                return [2 /*return*/];\n                            if (this.pendingWrites > 0) {\n                                (0, context_1.getShadeupLocalContext)().flushAdapter();\n                            }\n                            if (!this.cpuReadDirty) return [3 /*break*/, 2];\n                            this.cpuReadDirty = false;\n                            return [4 /*yield*/, this.adapter.downloadBuffer(this)];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        buffer_internal.prototype.downloadAsync = function () {\n            return this['download']();\n        };\n        /** @shadeup=noemit_gpu */\n        buffer_internal.prototype.upload = function () {\n            if (!this.adapter)\n                return;\n            if (this.cpuWriteDirty) {\n                this.cpuWriteDirty = false;\n                this.adapter.uploadBuffer(this);\n            }\n        };\n        buffer_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_buffer\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"structArray\\\\\",null],[\\\\\"floatArray\\\\\",null],[\\\\\"intArray\\\\\",null],[\\\\\"uintArray\\\\\",null],[\\\\\"arrayBuffer\\\\\",null],[\\\\\"vectorSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"typeName\\\\\",null],[\\\\\"platformPayload\\\\\",null],[\\\\\"adapter\\\\\",null],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pendingWrites\\\\\",null],[\\\\\"cpuReadDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"cpuWriteDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"elementCount\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"elementBytes\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"structured\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastIndex\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"fastIndexAssign\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"watchMutation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\n        };\n        return buffer_internal;\n    }());\n    exports.buffer_internal = buffer_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_buffer\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"structArray\\\\\",null],[\\\\\"floatArray\\\\\",null],[\\\\\"intArray\\\\\",null],[\\\\\"uintArray\\\\\",null],[\\\\\"arrayBuffer\\\\\",null],[\\\\\"vectorSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"typeName\\\\\",null],[\\\\\"platformPayload\\\\\",null],[\\\\\"adapter\\\\\",null],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pendingWrites\\\\\",null],[\\\\\"cpuReadDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"cpuWriteDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"elementCount\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"elementBytes\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"structured\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastIndex\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"fastIndexAssign\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"watchMutation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), buffer_internal)\n    function buffer(e1, typeName, structure) {\n        if (typeof e1 === 'number') {\n            var size = e1;\n            var buf = new buffer_internal(size, typeName, structure);\n            return buf;\n        }\n        else {\n            var data = e1;\n            var buf = new buffer_internal(data.length, typeName, structure);\n            for (var i = 0; i < data.length; i++) {\n                buf.fastIndexAssign(i, data[i]);\n            }\n            return buf;\n        }\n    }\n    exports.buffer = buffer;\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/texture.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/texture.js\",\n        writeByteOrderMark: false,\n        text: 'define([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.texture3d = exports.texture3d_internal_empty = exports.texture2d = exports.texture2d_internal_empty = void 0;\\n    var texture2d_internal_empty = /** @class */ (function () {\\n        function texture2d_internal_empty() {\\n            this.__opaque_texture2d = true;\\n            this.size = [0, 0];\\n            this.paint = null;\\n        }\\n        /** @shadeup=glsl(!texture($self$, $0$)) */\\n        texture2d_internal_empty.prototype.__index = function (index) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.__index_assign = function (index, value) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.getFast = function (index) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.setFast = function (index, value) {\\n            return null;\\n        };\\n        /** @shadeup=tag(async) */\\n        texture2d_internal_empty.prototype.download = function () { };\\n        texture2d_internal_empty.prototype.downloadAsync = function () {\\n            return null;\\n        };\\n        /**\\n         * Returns the underlying cpu buffer as a typed array.\\n         *\\n         * Note that this is considerably faster than using the raw index [] operator.\\n         *\\n         * ```shadeup\\n         * let tex = texture2d<float4>();\\n         * let data = tex.getData();\\n         *\\n         * for (let i = 0; i < data.length; i += 4) {\\n         * \tlet r = data[i];\\n         * \tlet g = data[i + 1];\\n         * \tlet b = data[i + 2];\\n         * \tlet a = data[i + 3];\\n         *\\n         * \t// Do something with the pixel\\n         * }\\n         * ```\\n         */\\n        texture2d_internal_empty.prototype.getData = function () {\\n            return new Uint32Array(0);\\n        };\\n        texture2d_internal_empty.prototype.upload = function () { };\\n        texture2d_internal_empty.prototype.sample = function (position) { };\\n        texture2d_internal_empty.prototype.clear = function (color) {\\n            if (color === void 0) { color = \\'auto\\'; }\\n        };\\n        texture2d_internal_empty.prototype.flush = function () { };\\n        /** Release the texture */\\n        texture2d_internal_empty.prototype.destroy = function () { };\\n        texture2d_internal_empty.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture2d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"paint\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}],[\\\\\"draw\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawIndexed\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawAdvanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawInstanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\\n        };\\n        return texture2d_internal_empty;\\n    }());\\n    exports.texture2d_internal_empty = texture2d_internal_empty;\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture2d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"paint\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}],[\\\\\"draw\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawIndexed\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawAdvanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawInstanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), texture2d_internal_empty)\\n    function texture2d(size, format, type) {\\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, format, type);\\n    }\\n    exports.texture2d = texture2d;\\n    var texture3d_internal_empty = /** @class */ (function () {\\n        function texture3d_internal_empty() {\\n            this.__opaque_texture3d = true;\\n            this.size = [0, 0, 0];\\n        }\\n        /** @shadeup=glsl(!texture($self$, $0$)) */\\n        texture3d_internal_empty.prototype.__index = function (index) {\\n            return null;\\n        };\\n        texture3d_internal_empty.prototype.__index_assign = function (index, value) { };\\n        texture3d_internal_empty.prototype.sample = function (position) { };\\n        texture3d_internal_empty.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture3d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}]]}\");\\n        };\\n        return texture3d_internal_empty;\\n    }());\\n    exports.texture3d_internal_empty = texture3d_internal_empty;\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture3d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}]]}\"), texture3d_internal_empty)\\n    function texture3d(size, type) {\\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, type);\\n    }\\n    exports.texture3d = texture3d;\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/drawIndexed.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/drawIndexed.js\",\n        writeByteOrderMark: false,\n        text: `define([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\", \"/std_math\"], function (require, exports, context_1, buffer_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.computeIndirect = exports.drawAttributes = exports.drawCount = exports.drawAlt2 = exports.drawFullscreen = exports.draw = exports.drawAdvanced = exports.makeShader = exports.ShaderOutput = exports.ShaderInput = exports.shader_start_shd_ = exports.drawIndirect = exports.drawIndexedIndirect = exports.drawInstancedIndexed = exports.drawInstanced = exports.drawIndexed = void 0;\n    function drawIndexed(indexBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexed = drawIndexed;\n    function drawInstanced(mesh, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstanced = drawInstanced;\n    function drawInstancedIndexed(indexBuffer, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstancedIndexed = drawInstancedIndexed;\n    function drawIndexedIndirect(indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed_indirect(indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexedIndirect = drawIndexedIndirect;\n    function drawIndirect(mesh, indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indirect(mesh, indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndirect = drawIndirect;\n    function shader_start_shd_(s, groupSize) {\n        return s;\n    }\n    exports.shader_start_shd_ = shader_start_shd_;\n    /**@shadeup=struct*/\n    var ShaderInput = /** @class */ (function () {\n        function ShaderInput() {\n            /** Interpolated world position (available in fragment, and vertex) */\n            this.position = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated normal (fragment), Source mesh normal (vertex) */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated tangent (fragment), Source mesh tangent (vertex) */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex shader output position */\n            this.clipPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            this.realPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** UV channel 0 input (available in fragment, and vertex) */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Screen position in pixels (available in fragment, and vertex) */\n            this.screen = (0, std_math_1.float2)(0, 0);\n            /** Interpolated vertex color (available in fragment, and vertex)  */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Group ID (available in compute) */\n            this.groupId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Group size (available in compute) */\n            this.groupSize = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Global id (groupId * groupSize + localId) (available in compute) */\n            this.globalId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Local id (available in compute) */\n            this.localId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Instance index (available in fragment, and vertex) */\n            this.instanceIndex = 0;\n            /** Vertex index (available in vertex) */\n            this.vertexIndex = 0;\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderInput.prototype.attr = function (index, interpolation) {\n            return null;\n        };\n        ShaderInput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderInput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"clipPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"realPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"groupId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"groupSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"globalId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"localId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"instanceIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"vertexIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}]]}\");\n        };\n        return ShaderInput;\n    }());\n    exports.ShaderInput = ShaderInput;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderInput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"clipPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"realPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"groupId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"groupSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"globalId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"localId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"instanceIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"vertexIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}]]}\"), ShaderInput)\n    /**@shadeup=struct*/\n    var ShaderOutput = /** @class */ (function () {\n        function ShaderOutput() {\n            /** Vertex output position */\n            this.position = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Vertex output normal */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output tangent */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output bitangent */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** UV channel 0 output */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Pixel color output */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderOutput.prototype.attr = function (index, value, interpolation) { };\n        ShaderOutput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderOutput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\");\n        };\n        return ShaderOutput;\n    }());\n    exports.ShaderOutput = ShaderOutput;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderOutput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\"), ShaderOutput)\n    /** @shadeup=shader */\n    function makeShader(key, fn) {\n        return fn;\n    }\n    exports.makeShader = makeShader;\n    function drawAdvanced(descriptor) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_advanced(descriptor);\n    }\n    exports.drawAdvanced = drawAdvanced;\n    function draw(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.draw = draw;\n    function drawFullscreen(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.drawFullscreen = drawFullscreen;\n    function drawAlt2(fullScreenPixelShader) { }\n    exports.drawAlt2 = drawAlt2;\n    function drawCount(triCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n    }\n    exports.drawCount = drawCount;\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\n    }\n    exports.drawAttributes = drawAttributes;\n    function computeIndirect(indirectBuffer, indirectOffset, computeShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_compute_indirect(indirectBuffer, indirectOffset, computeShader);\n    }\n    exports.computeIndirect = computeIndirect;\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/drawAttributes.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/drawAttributes.js\",\n        writeByteOrderMark: false,\n        text: 'define([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\"], function (require, exports, context_1, buffer_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.drawAttributes = void 0;\\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\\n    }\\n    exports.drawAttributes = drawAttributes;\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/drawCount.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/drawCount.js\",\n        writeByteOrderMark: false,\n        text: 'define([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.drawCount = void 0;\\n    function drawCount(triCount, vertexShader, pixelShader) {\\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\n    }\\n    exports.drawCount = drawCount;\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/physics.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/physics.js\",\n        writeByteOrderMark: false,\n        text: `define([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.physics = exports.PhysicsEngine3d = exports.PhysicsEngine2d = exports.PhysicsRigidBody2d = exports.PhysicsRayCastResult2d = exports.PhysicsCollider2d = void 0;\n    var PhysicsCollider2d = /** @class */ (function () {\n        function PhysicsCollider2d(rapier, world, collider) {\n            this.rapier = rapier;\n            this.world = world;\n            this.collider = collider;\n        }\n        PhysicsCollider2d.prototype.setTranslation = function (position) {\n            this.collider.setTranslation(toVec2(position));\n        };\n        PhysicsCollider2d.prototype.setRotation = function (rotation) {\n            this.collider.setRotation(rotation);\n        };\n        PhysicsCollider2d.prototype.setSensor = function (isSensor) {\n            this.collider.setSensor(isSensor);\n        };\n        PhysicsCollider2d.prototype.setCollisionGroups = function (groups) {\n            this.collider.setCollisionGroups(groups);\n        };\n        PhysicsCollider2d.prototype.setCollidesWith = function (groups) {\n            this.collider.setActiveCollisionTypes(groups);\n        };\n        PhysicsCollider2d.prototype.setFriction = function (friction) {\n            this.collider.setFriction(friction);\n        };\n        PhysicsCollider2d.prototype.setRestitution = function (restitution) {\n            this.collider.setRestitution(restitution);\n        };\n        PhysicsCollider2d.prototype.setDensity = function (density) {\n            this.collider.setDensity(density);\n        };\n        PhysicsCollider2d.prototype.setMass = function (mass) {\n            this.collider.setMass(mass);\n        };\n        PhysicsCollider2d.prototype.setRadius = function (radius) {\n            this.collider.setRadius(radius);\n        };\n        PhysicsCollider2d.prototype.setHalfExtents = function (halfExtents) {\n            this.collider.setHalfExtents(toVec2(halfExtents));\n        };\n        PhysicsCollider2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"collider\\\\\",null]]}\");\n        };\n        return PhysicsCollider2d;\n    }());\n    exports.PhysicsCollider2d = PhysicsCollider2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"collider\\\\\",null]]}\"), PhysicsCollider2d)\n    function toVec2(v) {\n        return { x: v[0], y: v[1] };\n    }\n    function toVec3(v) {\n        return { x: v[0], y: v[1], z: v[2] };\n    }\n    var PhysicsRayCastResult2d = /** @class */ (function () {\n        function PhysicsRayCastResult2d(rapier, result) {\n            this.rapier = rapier;\n            this.result = result;\n        }\n        PhysicsRayCastResult2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"result\\\\\",null]]}\");\n        };\n        return PhysicsRayCastResult2d;\n    }());\n    exports.PhysicsRayCastResult2d = PhysicsRayCastResult2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"result\\\\\",null]]}\"), PhysicsRayCastResult2d)\n    var PhysicsRigidBody2d = /** @class */ (function () {\n        function PhysicsRigidBody2d(rapier, world, body) {\n            this.rapier = rapier;\n            this.world = world;\n            this.body = body;\n        }\n        PhysicsRigidBody2d.prototype.addBallCollider = function (radius) {\n            var colDesc = this.rapier.ColliderDesc.ball(radius);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addBoxCollider = function (halfExtents) {\n            var colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addCapsuleCollider = function (radius, halfHeight) {\n            var colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addTriangleCollider = function (a, b, c) {\n            var colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addConvexCollider = function (points) {\n            var floatarr = new Float32Array(points.length * 2);\n            for (var i = 0; i < points.length; i++) {\n                floatarr[i * 2 + 0] = points[i][0];\n                floatarr[i * 2 + 1] = points[i][1];\n            }\n            var colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\n            if (!colDesc)\n                throw new Error('Failed to create convex hull collider');\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addHeightfieldCollider = function (heights, scale) {\n            var arr = new Float32Array(heights.length);\n            for (var i = 0; i < heights.length; i++) {\n                arr[i] = heights[i];\n            }\n            var colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.setTranslation = function (position) {\n            this.body.setTranslation(toVec2(position), true);\n        };\n        PhysicsRigidBody2d.prototype.setRotation = function (rotation) {\n            this.body.setRotation(rotation, true);\n        };\n        PhysicsRigidBody2d.prototype.setVelocity = function (velocity) {\n            this.body.setLinvel(toVec2(velocity), true);\n        };\n        PhysicsRigidBody2d.prototype.setAngularVelocity = function (velocity) {\n            this.body.setAngvel(velocity, true);\n        };\n        PhysicsRigidBody2d.prototype.addForce = function (force) {\n            this.body.addForce(toVec2(force), true);\n        };\n        PhysicsRigidBody2d.prototype.addForceAtPoint = function (force, point) {\n            this.body.addForceAtPoint(toVec2(force), toVec2(point), true);\n        };\n        PhysicsRigidBody2d.prototype.addTorque = function (torque) {\n            this.body.addTorque(torque, true);\n        };\n        PhysicsRigidBody2d.prototype.setAdditionalMass = function (mass) {\n            this.body.setAdditionalMass(mass, true);\n        };\n        PhysicsRigidBody2d.prototype.setEnabled = function (enabled) {\n            this.body.setEnabled(enabled);\n        };\n        PhysicsRigidBody2d.prototype.sleep = function () {\n            this.body.sleep();\n        };\n        PhysicsRigidBody2d.prototype.wakeUp = function () {\n            this.body.wakeUp();\n        };\n        PhysicsRigidBody2d.prototype.setGravityScale = function (scale) {\n            this.body.setGravityScale(scale, true);\n        };\n        PhysicsRigidBody2d.prototype.setLinearDamping = function (damping) {\n            this.body.setLinearDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.setAngularDamping = function (damping) {\n            this.body.setAngularDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.isSleeping = function () {\n            return this.body.isSleeping();\n        };\n        PhysicsRigidBody2d.prototype.mass = function () {\n            return this.body.mass();\n        };\n        PhysicsRigidBody2d.prototype.translation = function () {\n            var t = this.body.translation();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.rotation = function () {\n            return this.body.rotation();\n        };\n        PhysicsRigidBody2d.prototype.velocity = function () {\n            var t = this.body.linvel();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.angularVelocity = function () {\n            return this.body.angvel();\n        };\n        PhysicsRigidBody2d.prototype.isMoving = function () {\n            return this.body.isMoving();\n        };\n        PhysicsRigidBody2d.prototype.collider = function (index) {\n            var collider = this.body.collider(index);\n            if (!collider)\n                throw new Error('Failed to get collider');\n            return new PhysicsCollider2d(this.rapier, this.world, collider);\n        };\n        PhysicsRigidBody2d.prototype.applyImpulse = function (impulse) {\n            this.body.applyImpulse(toVec2(impulse), true);\n        };\n        PhysicsRigidBody2d.prototype.applyTorqueImpulse = function (impulse) {\n            this.body.applyTorqueImpulse(impulse, true);\n        };\n        PhysicsRigidBody2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"body\\\\\",null]]}\");\n        };\n        return PhysicsRigidBody2d;\n    }());\n    exports.PhysicsRigidBody2d = PhysicsRigidBody2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"body\\\\\",null]]}\"), PhysicsRigidBody2d)\n    var PhysicsEngine2d = /** @class */ (function () {\n        function PhysicsEngine2d(rapier) {\n            this.rapier = rapier;\n            this.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\n        }\n        PhysicsEngine2d.prototype.step = function () {\n            this.world.step();\n        };\n        PhysicsEngine2d.prototype.createRigidBody = function (position, rotation, mode) {\n            var rbDesc = mode == 'dynamic'\n                ? this.rapier.RigidBodyDesc.dynamic()\n                : mode == 'fixed'\n                    ? this.rapier.RigidBodyDesc.fixed()\n                    : this.rapier.RigidBodyDesc.dynamic();\n            rbDesc.setTranslation(position[0], position[1]);\n            rbDesc.setRotation(rotation);\n            var rb = this.world.createRigidBody(rbDesc);\n            return new PhysicsRigidBody2d(this.rapier, this.world, rb);\n        };\n        PhysicsEngine2d.prototype.bodies = function () {\n            var bodies = this.world.bodies;\n            var result = [];\n            for (var i = 0; i < bodies.len(); i++) {\n                result.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)));\n            }\n            return result;\n        };\n        PhysicsEngine2d.prototype.castRay = function (start, end, maxi) {\n            var result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\n            if (!result)\n                return null;\n            return new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent());\n        };\n        PhysicsEngine2d.prototype.setGravity = function (gravity) {\n            this.world.gravity = toVec2(gravity);\n        };\n        PhysicsEngine2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null]]}\");\n        };\n        return PhysicsEngine2d;\n    }());\n    exports.PhysicsEngine2d = PhysicsEngine2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null]]}\"), PhysicsEngine2d)\n    var PhysicsEngine3d = /** @class */ (function () {\n        function PhysicsEngine3d() {\n        }\n        PhysicsEngine3d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return PhysicsEngine3d;\n    }());\n    exports.PhysicsEngine3d = PhysicsEngine3d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\\\",\\\\\"fields\\\\\":[]}\"), PhysicsEngine3d)\n    var physics;\n    (function (physics) {\n        function engine2d() {\n            return new PhysicsEngine2d(window.RAPIER_2D);\n        }\n        physics.engine2d = engine2d;\n    })(physics = exports.physics || (exports.physics = {}));\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/context.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/context.js\",\n        writeByteOrderMark: false,\n        text: `define([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.getShadeupLocalContext = void 0;\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/mesh.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/mesh.js\",\n        writeByteOrderMark: false,\n        text: `var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/common\"], function (require, exports, __, std_math_1, std___std_all_1, common_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.Model = exports.ModelPart = exports.Material = exports.mesh = exports.Mesh = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var Mesh = /** @class */ (function () {\n        function Mesh(data) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            this.vertices = ((_a = data.vertices) !== null && _a !== void 0 ? _a : []);\n            this.triangles = ((_b = data.triangles) !== null && _b !== void 0 ? _b : []);\n            this.normals = ((_c = data.normals) !== null && _c !== void 0 ? _c : []);\n            this.tangents = ((_d = data.tangents) !== null && _d !== void 0 ? _d : []);\n            this.bitangents = ((_e = data.bitangents) !== null && _e !== void 0 ? _e : []);\n            this.uvs = ((_f = data.uvs) !== null && _f !== void 0 ? _f : []);\n            this.colors = ((_g = data.colors) !== null && _g !== void 0 ? _g : []);\n            this.symbol = ((_h = data.symbol) !== null && _h !== void 0 ? _h : null);\n        }\n        Mesh.prototype.rect = function (size) {\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.quad = function (position, direction, right, size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;\n            var shader_self_temp = this;\n            var up = (0, std_math_1.normalize)((0, std_math_1.cross)(right, direction));\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            var index = (this.vertices.len() | 0);\n            this.vertices.push((_c = (_e = position, _f = (_g = right, _h = (__.FM.negate_1(halfSize[0])), [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_j = up, _k = halfSize[1], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]));\n            this.vertices.push((_l = (_o = position, _p = (_q = right, _r = halfSize[0], [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = (_s = up, _t = halfSize[1], [_s[0] * _t, _s[1] * _t, _s[2] * _t]), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]]));\n            this.vertices.push((_u = (_w = position, _x = (_y = right, _z = halfSize[0], [_y[0] * _z, _y[1] * _z, _y[2] * _z]), [_w[0] + _x[0], _w[1] + _x[1], _w[2] + _x[2]]), _v = (_0 = up, _1 = (__.FM.negate_1(halfSize[1])), [_0[0] * _1, _0[1] * _1, _0[2] * _1]), [_u[0] + _v[0], _u[1] + _v[1], _u[2] + _v[2]]));\n            this.vertices.push((_2 = (_4 = position, _5 = (_6 = right, _7 = (__.FM.negate_1(halfSize[0])), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2]]), _3 = (_8 = up, _9 = (__.FM.negate_1(halfSize[1])), [_8[0] * _9, _8[1] * _9, _8[2] * _9]), [_2[0] + _3[0], _2[1] + _3[1], _2[2] + _3[2]]));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.box = function (size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var shader_self_temp = this;\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b]);\n            var UP = __.makeVector((0 | 0), 1.0, (0 | 0));\n            var DOWN = __.makeVector((0 | 0), (__.FM.negate_1(1.0)), (0 | 0));\n            var LEFT = __.makeVector((__.FM.negate_1(1.0)), (0 | 0), (0 | 0));\n            var RIGHT = __.makeVector(1.0, (0 | 0), (0 | 0));\n            var FORWARD = __.makeVector((0 | 0), (0 | 0), 1.0);\n            var BACK = __.makeVector((0 | 0), (0 | 0), (__.FM.negate_1(1.0)));\n            // Up\n            this.quad((_c = UP, _d = halfSize[1], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), UP, LEFT, __.makeVector(size[0], size[2]));\n            // Down\n            this.quad((_e = DOWN, _f = halfSize[1], [_e[0] * _f, _e[1] * _f, _e[2] * _f]), DOWN, RIGHT, __.makeVector(size[0], size[2]));\n            // Left\n            this.quad((_g = LEFT, _h = halfSize[0], [_g[0] * _h, _g[1] * _h, _g[2] * _h]), LEFT, BACK, __.makeVector(size[2], size[1]));\n            // Right\n            this.quad((_j = RIGHT, _k = halfSize[0], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), RIGHT, FORWARD, __.makeVector(size[2], size[1]));\n            // Forward\n            this.quad((_l = FORWARD, _m = halfSize[2], [_l[0] * _m, _l[1] * _m, _l[2] * _m]), FORWARD, LEFT, __.makeVector(size[0], size[1]));\n            // Back\n            this.quad((_o = BACK, _p = halfSize[2], [_o[0] * _p, _o[1] * _p, _o[2] * _p]), BACK, RIGHT, __.makeVector(size[0], size[1]));\n        };\n        Mesh.prototype.rectAt = function (minPos, maxPos) {\n            var _a, _b;\n            var shader_self_temp = this;\n            this.rect((_a = maxPos, _b = minPos, [_a[0] - _b[0], _a[1] - _b[1]]));\n            this.translate(__.makeVector(minPos, (0 | 0)));\n        };\n        Mesh.prototype.circle = function (pos, radius, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n        };\n        Mesh.prototype.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var verticesPerRing = vertices + (1 | 0);\n            for (var i = (0 | 0); i <= rings; i++) {\n                var y = i / rings;\n                var angleY = y * common_1.PI;\n                var posY = Math.cos(angleY);\n                var radiusY = Math.sin(angleY);\n                for (var j = (0 | 0); j <= vertices; j++) {\n                    var x = j / vertices;\n                    var angleX = x * common_1.PI * (2 | 0);\n                    var posX = Math.cos(angleX);\n                    var posZ = Math.sin(angleX);\n                    this.vertices.push(__.makeVector(posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\n                    this.normals.push((0, std_math_1.normalize)(__.makeVector(posX * radiusY, posY, posZ * radiusY)));\n                    var tangent = (0, std_math_1.normalize)(__.makeVector(posZ, (0 | 0), (__.FM.negate_1(posX))));\n                    var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(this.normals[(this.normals.len() | 0) - (1 | 0)], tangent));\n                    this.tangents.push(tangent);\n                    this.bitangents.push(bitangent);\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < rings; i++) {\n                for (var j = (0 | 0); j < vertices; j++) {\n                    var i0 = i * verticesPerRing + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + verticesPerRing;\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.icoSphere = function (pos, radius, subdivisions) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var t = (1.0 + Math.sqrt(5.0)) / 2.0;\n            var vertices = [__.makeVector((__.FM.negate_1((1 | 0))), t, (0 | 0)), __.makeVector((1 | 0), t, (0 | 0)), __.makeVector((__.FM.negate_1((1 | 0))), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((1 | 0), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), t), __.makeVector((0 | 0), (1 | 0), t), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), (__.FM.negate_1(t))), __.makeVector((0 | 0), (1 | 0), (__.FM.negate_1(t))), __.makeVector(t, (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector(t, (0 | 0), (1 | 0)), __.makeVector((__.FM.negate_1(t)), (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector((__.FM.negate_1(t)), (0 | 0), (1 | 0))];\n            var triangles = [__.intifyVector(__.makeVector((0 | 0), (11 | 0), (5 | 0))), __.intifyVector(__.makeVector((0 | 0), (5 | 0), (1 | 0))), __.intifyVector(__.makeVector((0 | 0), (1 | 0), (7 | 0))), __.intifyVector(__.makeVector((0 | 0), (7 | 0), (10 | 0))), __.intifyVector(__.makeVector((0 | 0), (10 | 0), (11 | 0))), __.intifyVector(__.makeVector((1 | 0), (5 | 0), (9 | 0))), __.intifyVector(__.makeVector((5 | 0), (11 | 0), (4 | 0))), __.intifyVector(__.makeVector((11 | 0), (10 | 0), (2 | 0))), __.intifyVector(__.makeVector((10 | 0), (7 | 0), (6 | 0))), __.intifyVector(__.makeVector((7 | 0), (1 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (9 | 0), (4 | 0))), __.intifyVector(__.makeVector((3 | 0), (4 | 0), (2 | 0))), __.intifyVector(__.makeVector((3 | 0), (2 | 0), (6 | 0))), __.intifyVector(__.makeVector((3 | 0), (6 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (8 | 0), (9 | 0))), __.intifyVector(__.makeVector((4 | 0), (9 | 0), (5 | 0))), __.intifyVector(__.makeVector((2 | 0), (4 | 0), (11 | 0))), __.intifyVector(__.makeVector((6 | 0), (2 | 0), (10 | 0))), __.intifyVector(__.makeVector((8 | 0), (6 | 0), (7 | 0))), __.intifyVector(__.makeVector((9 | 0), (8 | 0), (1 | 0)))];\n            for (var i = (0 | 0); i < (vertices.len() | 0); i++) {\n                this.vertices.push((_a = (0, std_math_1.normalize)(vertices[i]), _b = radius, [_a[0] * _b, _a[1] * _b, _a[2] * _b]));\n            }\n            for (var i = (0 | 0); i < (triangles.len() | 0); i++) {\n                this.triangles.push(index + triangles[i][0]);\n                this.triangles.push(index + triangles[i][1]);\n                this.triangles.push(index + triangles[i][2]);\n            }\n            for (var i = (0 | 0); i < subdivisions; i++) {\n                var newTriangles = [];\n                for (var j = (0 | 0); j < (this.triangles.len() | 0); j = j + (3 | 0)) {\n                    var i0 = this.triangles[j + (0 | 0)];\n                    var i1 = this.triangles[j + (1 | 0)];\n                    var i2 = this.triangles[j + (2 | 0)];\n                    var v0 = this.vertices[i0];\n                    var v1 = this.vertices[i1];\n                    var v2 = this.vertices[i2];\n                    var v3 = (0, std_math_1.normalize)((_c = (_e = v0, _f = v1, [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = 2.0, [_c[0] / _d, _c[1] / _d, _c[2] / _d]));\n                    var v4 = (0, std_math_1.normalize)((_g = (_j = v1, _k = v2, [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = 2.0, [_g[0] / _h, _g[1] / _h, _g[2] / _h]));\n                    var v5 = (0, std_math_1.normalize)((_l = (_o = v2, _p = v0, [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = 2.0, [_l[0] / _m, _l[1] / _m, _l[2] / _m]));\n                    var i3 = (this.vertices.len() | 0);\n                    var i4 = i3 + (1 | 0);\n                    var i5 = i3 + (2 | 0);\n                    this.vertices.push((_q = v3, _r = radius, [_q[0] * _r, _q[1] * _r, _q[2] * _r]));\n                    this.vertices.push((_s = v4, _t = radius, [_s[0] * _t, _s[1] * _t, _s[2] * _t]));\n                    this.vertices.push((_u = v5, _v = radius, [_u[0] * _v, _u[1] * _v, _u[2] * _v]));\n                    newTriangles.push(i0, i3, i5);\n                    newTriangles.push(i3, i1, i4);\n                    newTriangles.push(i3, i4, i5);\n                    newTriangles.push(i5, i4, i2);\n                }\n                this.triangles = newTriangles;\n            }\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                var normal = (0, std_math_1.normalize)(this.vertices[i]);\n                var tangent = (0, std_math_1.normalize)(__.makeVector(normal[2], (0 | 0), (__.FM.negate_1(normal[0]))));\n                var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(normal, tangent));\n                this.normals.push(normal);\n                this.tangents.push(tangent);\n                this.bitangents.push(bitangent);\n            }\n            for (var i = (0 | 0); i < (this.triangles.len() | 0); i = i + (3 | 0)) {\n                var i0 = this.triangles[i + (0 | 0)];\n                var i1 = this.triangles[i + (1 | 0)];\n                var i2 = this.triangles[i + (2 | 0)];\n                var v0 = this.vertices[i0];\n                var v1 = this.vertices[i1];\n                var v2 = this.vertices[i2];\n                var uv0 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v0[2], v0[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v0[1]) / common_1.PI, 0.5));\n                var uv1 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v1[2], v1[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v1[1]) / common_1.PI, 0.5));\n                var uv2 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v2[2], v2[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v2[1]) / common_1.PI, 0.5));\n                this.uvs.push(uv0);\n                this.uvs.push(uv1);\n                this.uvs.push(uv2);\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.cylinder = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.capsule = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.cone = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.translate(pos);\n        };\n        Mesh.prototype.plane = function (pos, size, subdivisions) {\n            var _a, _b;\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            for (var i = (0 | 0); i <= subdivisions[0]; i++) {\n                var x = i / __.swizzle(subdivisions, 'x');\n                var posX = x * size[0] - halfSize[0];\n                for (var j = (0 | 0); j <= subdivisions[1]; j++) {\n                    var y = j / __.swizzle(subdivisions, 'y');\n                    var posY = y * size[1] - halfSize[1];\n                    this.vertices.push(__.makeVector(posX, (0 | 0), posY));\n                    this.normals.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n                    this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n                    this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < subdivisions[0]; i++) {\n                for (var j = (0 | 0); j < subdivisions[1]; j++) {\n                    var i0 = i * (subdivisions[1] + (1 | 0)) + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + subdivisions[1] + (1 | 0);\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.translate = function (pos) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.add, i, pos);\n            }\n            return this;\n        };\n        Mesh.prototype.rotate = function (quaternion) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, common_1.quat.rotate(quaternion, this.vertices[i]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, common_1.quat.rotate(quaternion, this.normals[i]));\n            }\n            return this;\n        };\n        Mesh.prototype.transform = function (matrix) {\n            var _a, _b;\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, (_a = (__.mul(__.makeVector(this.vertices[i], (1 | 0)), matrix)), [_a[0], _a[1], _a[2]]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, (_b = (__.mul(__.makeVector(this.normals[i], (1 | 0)), matrix)), [_b[0], _b[1], _b[2]]));\n            }\n            return this;\n        };\n        Mesh.prototype.scale = function (scale) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.mul, i, scale);\n            }\n            return this;\n        };\n        Mesh.prototype.bounds = function () {\n            var _a, _b, _c, _d;\n            var shader_self_temp = this;\n            var mn = (_a = 0.0, [_a, _a, _a]);\n            var mx = (_b = 0.0, [_b, _b, _b]);\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                mn = (0, std_math_1.min)(mn, this.vertices[i]);\n                mx = (0, std_math_1.max)(mx, this.vertices[i]);\n            }\n            return _c = mx, _d = mn, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]];\n        };\n        Mesh.prototype.center = function () {\n            var _a, _b;\n            var shader_self_temp = this;\n            var bounds = this.bounds();\n            return _a = bounds, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        Mesh.new = function () { return new Mesh({ vertices: [], triangles: [], tangents: [], bitangents: [], normals: [], uvs: [], colors: [] }); };\n        Mesh.prototype.append = function (other) {\n            var shader_self_temp = this;\n            var oldVertices = (this.vertices.len() | 0);\n            var oldTriangles = (this.triangles.len() | 0);\n            this.vertices.append(other.vertices);\n            this.triangles.append(other.triangles);\n            this.normals.append(other.normals);\n            this.tangents.append(other.tangents);\n            this.bitangents.append(other.bitangents);\n            this.uvs.append(other.uvs);\n            this.colors.append(other.colors);\n            for (var i = oldTriangles; i < (this.triangles.len() | 0); i++) {\n                this.triangles.__index_assign_op(__.add, i, oldVertices);\n            }\n        };\n        Mesh.prototype.getVertices = function () { var shader_self_temp = this; return this.vertices; };\n        Mesh.prototype.getTriangles = function () { var shader_self_temp = this; return this.triangles; };\n        Mesh.prototype.getNormals = function () { var shader_self_temp = this; return this.normals; };\n        Mesh.prototype.getTangents = function () { var shader_self_temp = this; return this.tangents; };\n        Mesh.prototype.getBitangents = function () { var shader_self_temp = this; return this.bitangents; };\n        Mesh.prototype.getUVs = function () { var shader_self_temp = this; return this.uvs; };\n        Mesh.prototype.getColors = function () { var shader_self_temp = this; return this.colors; };\n        Mesh.prototype.setVertices = function (vertices) {\n            var shader_self_temp = this;\n            this.vertices = vertices;\n        };\n        Mesh.prototype.setTriangles = function (triangles) {\n            var shader_self_temp = this;\n            this.triangles = triangles;\n        };\n        Mesh.prototype.setNormals = function (normals) {\n            var shader_self_temp = this;\n            this.normals = normals;\n        };\n        Mesh.prototype.setTangents = function (tangents) {\n            var shader_self_temp = this;\n            this.tangents = tangents;\n        };\n        Mesh.prototype.setBitangents = function (bitangents) {\n            var shader_self_temp = this;\n            this.bitangents = bitangents;\n        };\n        Mesh.prototype.setUVs = function (uvs) {\n            var shader_self_temp = this;\n            this.uvs = uvs;\n        };\n        Mesh.prototype.setColors = function (colors) {\n            var shader_self_temp = this;\n            this.colors = colors;\n        };\n        Mesh.prototype.clone = function () {\n            return new Mesh({\n                vertices: (0, std___std_all_1.__deepClone)(this.vertices),\n                triangles: (0, std___std_all_1.__deepClone)(this.triangles),\n                normals: (0, std___std_all_1.__deepClone)(this.normals),\n                tangents: (0, std___std_all_1.__deepClone)(this.tangents),\n                bitangents: (0, std___std_all_1.__deepClone)(this.bitangents),\n                uvs: (0, std___std_all_1.__deepClone)(this.uvs),\n                colors: (0, std___std_all_1.__deepClone)(this.colors),\n                symbol: (0, std___std_all_1.__deepClone)(this.symbol),\n            });\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}\"), Mesh)\n    ; /* impl Mesh */\n    var mesh = /** @class */ (function () {\n        function mesh(data) {\n        }\n        mesh.rect = function (pos, size) {\n            var _a, _b;\n            var g = Mesh.new();\n            g.rectAt(pos, (_a = pos, _b = size, [_a[0] + _b[0], _a[1] + _b[1]]));\n            return g;\n        };\n        mesh.box = function (pos, size) {\n            var g = Mesh.new();\n            g.box(size);\n            g.translate(pos);\n            return g;\n        };\n        mesh.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var g = Mesh.new();\n            g.uvSphere(pos, radius, vertices, rings);\n            return g;\n        };\n        mesh.icoSphere = function (pos, radius, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var g = Mesh.new();\n            g.icoSphere(pos, radius, subdivisions);\n            return g;\n        };\n        mesh.plane = function (pos, size, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var g = Mesh.new();\n            g.plane(pos, size, subdivisions);\n            return g;\n        };\n        /**\n            * Returns a [-1, 1] position for a given index.\n            */\n        mesh.triangleFromIndex = function (index) {\n            if (index == (0 | 0)) {\n                return __.FM.float_2_1_1(__.negate((1 | 0)), __.int(1));\n            }\n            else if (index == (1 | 0)) {\n                return __.FM.float_2_1_1(__.int(1), __.int(1));\n            }\n            else if (index == (2 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.negate((1 | 0)));\n            }\n            else {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n        };\n        mesh.circleFromIndex = function (vertexIndex, vertices) {\n            vertexIndex = vertices - vertexIndex;\n            var numSlices = vertices / (3 | 0);\n            var sliceIndex = Math.floor(vertexIndex / vertices * numSlices);\n            var incAngle = common_1.PI * 2.0 / numSlices;\n            var baseAngle = incAngle * sliceIndex;\n            if (vertexIndex % (3 | 0) == (0 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n            else if (vertexIndex % (3 | 0) == (1 | 0)) {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle), (0, std_math_1.sin)(baseAngle));\n            }\n            else {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle + incAngle), (0, std_math_1.sin)(baseAngle + incAngle));\n            }\n        };\n        mesh.rectFromIndex = function (index, vertices) {\n            var _a, _b, _c, _d, _e, _f;\n            var x = index % vertices;\n            var y = index / vertices;\n            return _a = (_c = (_e = __.FM.float_2_1_1(x, y), _f = vertices, [_e[0] / _f, _e[1] / _f]), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = 1.0, [_a[0] - _b, _a[1] - _b];\n        };\n        mesh.empty = function (numVerts) {\n            var _a, _b, _c, _d, _e, _f;\n            if (numVerts === void 0) { numVerts = (0 | 0); }\n            var g = Mesh.new();\n            if (numVerts > (0 | 0)) {\n                g.setVertices((0, std___std_all_1.array)(numVerts, (_a = (0 | 0), [_a, _a, _a])));\n                g.setNormals((0, std___std_all_1.array)(numVerts, (_b = (0 | 0), [_b, _b, _b])));\n                g.setTangents((0, std___std_all_1.array)(numVerts, (_c = (0 | 0), [_c, _c, _c])));\n                g.setBitangents((0, std___std_all_1.array)(numVerts, (_d = (0 | 0), [_d, _d, _d])));\n                g.setUVs((0, std___std_all_1.array)(numVerts, (_e = (0 | 0), [_e, _e])));\n                g.setColors((0, std___std_all_1.array)(numVerts, (_f = (0 | 0), [_f, _f, _f, _f])));\n                var tris = (0, std___std_all_1.array)(numVerts, (0 | 0));\n                for (var i = (0 | 0); i < numVerts; i++) {\n                    tris.__index_assign(i, i);\n                }\n                g.setTriangles(tris);\n            }\n            return g;\n        };\n        mesh.join = function (mesh1, mesh2) {\n            var g = Mesh.new();\n            g.append(mesh1);\n            g.append(mesh2);\n            return g;\n        };\n        // pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cylinder(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.capsule(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cone(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        mesh.prototype.clone = function () {\n            return new mesh({});\n        };\n        mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_19895_mesh\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return mesh;\n    }());\n    exports.mesh = mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_19895_mesh\\\\\",\\\\\"fields\\\\\":[]}\"), mesh)\n    ; /* impl mesh */\n    var Material = /** @class */ (function () {\n        function Material(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.baseColor = ((_a = data.baseColor) !== null && _a !== void 0 ? _a : __.FM.float_4_1_1_1_1(0.0, 0.0, 0.0, 0.0));\n            this.color = ((_b = data.color) !== null && _b !== void 0 ? _b : null);\n            this.normal = ((_c = data.normal) !== null && _c !== void 0 ? _c : null);\n            this.normalScale = ((_d = data.normalScale) !== null && _d !== void 0 ? _d : __.FM.float_2_1_1(0.0, 0.0));\n            this.roughness = ((_e = data.roughness) !== null && _e !== void 0 ? _e : null);\n            this.emissive = ((_f = data.emissive) !== null && _f !== void 0 ? _f : null);\n            this.metallic = ((_g = data.metallic) !== null && _g !== void 0 ? _g : null);\n        }\n        Material.prototype.clone = function () {\n            return new Material({\n                baseColor: (0, std___std_all_1.__deepClone)(this.baseColor),\n                color: (0, std___std_all_1.__deepClone)(this.color),\n                normal: (0, std___std_all_1.__deepClone)(this.normal),\n                normalScale: (0, std___std_all_1.__deepClone)(this.normalScale),\n                roughness: (0, std___std_all_1.__deepClone)(this.roughness),\n                emissive: (0, std___std_all_1.__deepClone)(this.emissive),\n                metallic: (0, std___std_all_1.__deepClone)(this.metallic),\n            });\n        };\n        Material.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}\");\n        };\n        return Material;\n    }());\n    exports.Material = Material;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}\"), Material)\n    ;\n    var ModelPart = /** @class */ (function () {\n        function ModelPart(data) {\n            var _a, _b, _c;\n            this.mesh = ((_a = data.mesh) !== null && _a !== void 0 ? _a : new Mesh({}));\n            this.material = ((_b = data.material) !== null && _b !== void 0 ? _b : new Material({}));\n            this.transform = ((_c = data.transform) !== null && _c !== void 0 ? _c : __.float4x4(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));\n        }\n        ModelPart.prototype.clone = function () {\n            return new ModelPart({\n                mesh: (0, std___std_all_1.__deepClone)(this.mesh),\n                material: (0, std___std_all_1.__deepClone)(this.material),\n                transform: (0, std___std_all_1.__deepClone)(this.transform),\n            });\n        };\n        ModelPart.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]}\");\n        };\n        return ModelPart;\n    }());\n    exports.ModelPart = ModelPart;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]}\"), ModelPart)\n    ;\n    var Model = /** @class */ (function () {\n        function Model(data) {\n            var _a;\n            this.parts = ((_a = data.parts) !== null && _a !== void 0 ? _a : []);\n        }\n        Model.prototype.clone = function () {\n            return new Model({\n                parts: (0, std___std_all_1.__deepClone)(this.parts),\n            });\n        };\n        Model.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_25266_Model\\\\\",\\\\\"fields\\\\\":[[\\\\\"parts\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\");\n        };\n        return Model;\n    }());\n    exports.Model = Model;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_25266_Model\\\\\",\\\\\"fields\\\\\":[[\\\\\"parts\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\"), Model)\n    ;\n    window.SHD_Mesh = Mesh;\n    window.SHD_Model = Model;\n    window.SHD_ModelPart = ModelPart;\n    window.SHD_Material = Material;\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/textures.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/textures.js\",\n        writeByteOrderMark: false,\n        text: 'define([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n});\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/common.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/common.js\",\n        writeByteOrderMark: false,\n        text: `var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/buffer\", \"/_std/ui\", \"/_std/texture\"], function (require, exports, __, std_math_1, std___std_all_1, buffer_1, ui_1, texture_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.wrap4 = exports.wrap3 = exports.wrap2 = exports.color = exports.remap1 = exports.remap = exports.tan1 = exports.cos1 = exports.sin1 = exports.hexFromColor = exports.hex = exports.cmykFromColor = exports.cmyk = exports.rgbaFromColor = exports.rgbFromColor = exports.rgba = exports.rgb = exports.hsvaFromColor = exports.hsvFromColor = exports.hsva = exports.hsv = exports.hslaFromColor = exports.hslFromColor = exports.hsla = exports.hsl = exports.screenAA = exports.matrix = exports.noise = exports.reverseMortonCode2 = exports.randColor2 = exports.randColor = exports.mortonCode2 = exports.spatial = exports.bezier = exports.Camera = exports.Camera2d = exports.quat = exports.ui = exports.texture3d = exports.texture2d = exports.buffer = exports.PI = exports.pixelToClip = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    Object.defineProperty(exports, \"buffer\", { enumerable: true, get: function () { return buffer_1.buffer; } });\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\n    Object.defineProperty(exports, \"texture2d\", { enumerable: true, get: function () { return texture_1.texture2d; } });\n    Object.defineProperty(exports, \"texture3d\", { enumerable: true, get: function () { return texture_1.texture3d; } });\n    function pixelToClip(pixelPosition) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        var zeroToOne = (_a = pixelPosition, _b = env.screenSize, [_a[0] / _b[0], _a[1] / _b[1]]);\n        var zeroToTwo = (_c = zeroToOne, _d = 2.0, [_c[0] * _d, _c[1] * _d]);\n        var clipSpace = (_e = zeroToTwo, _f = (_g = 1.0, [_g, _g]), [_e[0] - _f[0], _e[1] - _f[1]]);\n        return __.makeVector(clipSpace[0], clipSpace[1] * (__.FM.negate_1(1.0)));\n    }\n    exports.pixelToClip = pixelToClip;\n    ; /**\n    * Value of PI to 35 decimal places.\n    */\n    var PI = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PI\", function () { return 3.14159265358979323846264338327950288; }, function () { return PI; });\n    exports.PI = PI;\n    var quat = /** @class */ (function () {\n        function quat(data) {\n        }\n        /**\n            * Creates a quaternion from an angle and axis.\n            */\n        quat.fromAngleAxis = function (angle, axis) { return __.FM.float_4_3_1(__.mul(axis, Math.sin(angle * 0.5)), (0, std_math_1.cos)(angle * 0.5)); };\n        /**\n            * Multiplies two quaternions and returns the result.\n            */\n        quat.mul = function (a, b) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; return __.FM.float_4_3_1(__.add((_a = (_c = (_e = b, [_e[0], _e[1], _e[2]]), _d = a[3], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = (_f = (_h = a, [_h[0], _h[1], _h[2]]), _g = b[3], [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]), (0, std_math_1.cross)((_j = a, [_j[0], _j[1], _j[2]]), (_k = b, [_k[0], _k[1], _k[2]]))), __.sub(a[3] * b[3], (0, std_math_1.dot)((_l = a, [_l[0], _l[1], _l[2]]), (_m = b, [_m[0], _m[1], _m[2]])))); };\n        /**\n            * Rotates a vector by a quaternion and returns the rotated vector.\n            */\n        quat.rotate = function (quaternion, vector) {\n            var _a;\n            var q = quat.mul(quat.mul(quaternion, __.FM.float_4_3_1(vector, __.int(0))), quat.conjugate(quaternion));\n            return _a = q, [_a[0], _a[1], _a[2]];\n        };\n        /**\n            * Returns the conjugate of the input quaternion.\n            *\n            * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\n            */\n        quat.conjugate = function (quaternion) { var _a; return __.FM.float_4_3_1(__.negate((_a = quaternion, [_a[0], _a[1], _a[2]])), __.swizzle(quaternion, 'w')); };\n        /**\n            * Returns the inverse of the input quaternion.\n            */\n        quat.inverse = function (quaternion) { var _a, _b; return _a = quat.conjugate(quaternion), _b = (0, std_math_1.dot)(quaternion, quaternion), [_a[0] / _b, _a[1] / _b, _a[2] / _b, _a[3] / _b]; };\n        /**\n            * Generates a quaternion that rotates from one direction to another via the shortest path.\n            */\n        quat.fromToRotation = function (from, to) {\n            var _a;\n            var q = (_a = 0.0, [_a, _a, _a, _a]);\n            var d = (0, std_math_1.dot)(from, to);\n            if (d < (__.FM.negate_1(0.999999))) {\n                var right = __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0));\n                var up = __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0));\n                var tmp = (0, std_math_1.cross)(right, from);\n                if ((0, std_math_1.length)(tmp) < 0.000001) {\n                    tmp = (0, std_math_1.cross)(up, from);\n                }\n                tmp = (0, std_math_1.normalize)(tmp);\n                q = quat.fromAngleAxis(PI, tmp);\n            }\n            else if (d > 0.999999) {\n                q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            }\n            else {\n                q = __.FM.float_4_3_1((0, std_math_1.cross)(from, to), __.add((1 | 0), d));\n                q = (0, std_math_1.normalize)(q);\n            }\n            return q;\n        };\n        quat.diff = function (a, b) { var _a, _b; return _a = a, _b = quat.inverse(b), [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]]; };\n        /**\n            * Generates lookAt quaternion.\n            */\n        quat.lookAt = function (forward, up) {\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, up));\n            up = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, right));\n            var m00 = right[0];\n            var m01 = right[1];\n            var m02 = right[2];\n            var m10 = up[0];\n            var m11 = up[1];\n            var m12 = up[2];\n            var m20 = forward[0];\n            var m21 = forward[1];\n            var m22 = forward[2];\n            var num8 = (m00 + m11) + m22;\n            var q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            if (num8 > 0.0) {\n                var num = Math.sqrt(num8 + 1.0);\n                var w_1 = num * 0.5;\n                num = 0.5 / num;\n                var x_1 = (m12 - m21) * num;\n                var y_1 = (m20 - m02) * num;\n                var z_1 = (m01 - m10) * num;\n                return __.FM.float_4_1_1_1_1(x_1, y_1, z_1, w_1);\n            }\n            if (__.and((m00 >= m11), (m00 >= m22))) {\n                var num7 = Math.sqrt(((1.0 + m00) - m11) - m22);\n                var num4 = 0.5 / num7;\n                var x_2 = 0.5 * num7;\n                var y_2 = (m01 + m10) * num4;\n                var z_2 = (m02 + m20) * num4;\n                var w_2 = (m12 - m21) * num4;\n                return __.FM.float_4_1_1_1_1(x_2, y_2, z_2, w_2);\n            }\n            if (m11 > m22) {\n                var num6 = Math.sqrt(((1.0 + m11) - m00) - m22);\n                var num3 = 0.5 / num6;\n                var x_3 = (m10 + m01) * num3;\n                var y_3 = 0.5 * num6;\n                var z_3 = (m21 + m12) * num3;\n                var w_3 = (m20 - m02) * num3;\n                return __.FM.float_4_1_1_1_1(x_3, y_3, z_3, w_3);\n            }\n            var num5 = Math.sqrt(((1.0 + m22) - m00) - m11);\n            var num2 = 0.5 / num5;\n            var x = (m20 + m02) * num2;\n            var y = (m21 + m12) * num2;\n            var z = 0.5 * num5;\n            var w = (m01 - m10) * num2;\n            return __.FM.float_4_1_1_1_1(x, y, z, w);\n        };\n        /**\n            * Smooth interpolation between two quaternions.\n            */\n        quat.slerp = function (a, b, t) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            if ((0, std_math_1.length)(a) == 0.0) {\n                if ((0, std_math_1.length)(b) == 0.0) {\n                    return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n                }\n                return b;\n            }\n            else if ((0, std_math_1.length)(b) == 0.0) {\n                return a;\n            }\n            var cosHalfAngle = a[3] * b[3] + (0, std_math_1.dot)((_a = a, [_a[0], _a[1], _a[2]]), (_b = b, [_b[0], _b[1], _b[2]]));\n            if (__.or(cosHalfAngle >= 1.0, cosHalfAngle <= (__.FM.negate_1(1.0)))) {\n                return a;\n            }\n            else if (cosHalfAngle < 0.0) {\n                b = (_c = b, _d = (__.FM.negate_1(1.0)), [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]);\n                cosHalfAngle = (__.FM.negate_1(cosHalfAngle));\n            }\n            var blendA = 0.0;\n            var blendB = 0.0;\n            if (cosHalfAngle < 0.99) {\n                var halfAngle = Math.acos(cosHalfAngle);\n                var sinHalfAngle = Math.sin(halfAngle);\n                var oneOverSinHalfAngle = 1.0 / sinHalfAngle;\n                blendA = Math.sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\n                blendB = Math.sin(halfAngle * t) * oneOverSinHalfAngle;\n            }\n            else {\n                blendA = 1.0 - t;\n                blendB = t;\n            }\n            var result = __.FM.float_4_3_1(__.add((_e = blendA, _f = (_g = a, [_g[0], _g[1], _g[2]]), [_e * _f[0], _e * _f[1], _e * _f[2]]), (_h = blendB, _j = (_k = b, [_k[0], _k[1], _k[2]]), [_h * _j[0], _h * _j[1], _h * _j[2]])), __.add(blendA * a[3], blendB * b[3]));\n            if ((0, std_math_1.length)(result) > 0.0) {\n                return (0, std_math_1.normalize)(result);\n            }\n            return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n        };\n        /**\n            * Converts quaternion to matrix.\n            */\n        quat.toMatrix = function (quaternion) {\n            var x = quaternion[0];\n            var y = quaternion[1];\n            var z = quaternion[2];\n            var w = quaternion[3];\n            var x2 = x + x;\n            var y2 = y + y;\n            var z2 = z + z;\n            var xx = x * x2;\n            var xy = x * y2;\n            var xz = x * z2;\n            var yy = y * y2;\n            var yz = y * z2;\n            var zz = z * z2;\n            var wx = w * x2;\n            var wy = w * y2;\n            var wz = w * z2;\n            var m = __.float4x4(1.0 - (yy + zz), xy + wz, xz - wy, (0 | 0), xy - wz, 1.0 - (xx + zz), yz + wx, (0 | 0), xz + wy, yz - wx, 1.0 - (xx + yy), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0);\n            return m;\n        };\n        quat.fromEulerAngles = function (angles) {\n            var cr = Math.cos(angles[0] * 0.5);\n            var sr = Math.sin(angles[0] * 0.5);\n            var cp = Math.cos(angles[1] * 0.5);\n            var sp = Math.sin(angles[1] * 0.5);\n            var cy = Math.cos(angles[2] * 0.5);\n            var sy = Math.sin(angles[2] * 0.5);\n            return __.FM.float_4_1_1_1_1(__.sub(sr * cp * cy, cr * sp * sy), __.add(cr * sp * cy, sr * cp * sy), __.sub(cr * cp * sy, sr * sp * cy), __.add(cr * cp * cy, sr * sp * sy));\n        };\n        quat.prototype.clone = function () {\n            return new quat({});\n        };\n        quat.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_2304_quat\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return quat;\n    }());\n    exports.quat = quat;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_2304_quat\\\\\",\\\\\"fields\\\\\":[]}\"), quat)\n    ; /* impl quat */\n    window.shadeupQuat = quat;\n    var Camera2d = /** @class */ (function () {\n        function Camera2d(data) {\n            var _a, _b;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(__.int(0), __.int(0)));\n            this.zoom = ((_b = data.zoom) !== null && _b !== void 0 ? _b : (1 | 0));\n        }\n        Camera2d.prototype.transform = function (position) { var _a, _b, _c, _d; var shader_self_temp = this; return _a = (_c = position, _d = this.position, [_c[0] - _d[0], _c[1] - _d[1]]), _b = this.zoom, [_a[0] * _b, _a[1] * _b]; };\n        /**\n            * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\n            */\n        Camera2d.prototype.fit = function (size) {\n            var _a, _b, _c, _d, _e, _f;\n            var shader_self_temp = this;\n            var zoom = (1 | 0) / (0, std_math_1.min)(env.screenSize[0] / size[0], env.screenSize[1] / size[1]);\n            var position = (_a = (_c = env.screenSize, _d = (_e = size, _f = ((1 | 0) / zoom), [_e[0] * _f, _e[1] * _f]), [_c[0] - _d[0], _c[1] - _d[1]]), _b = (2 | 0), [_a[0] / _b, _a[1] / _b]);\n            this.position = position;\n            this.zoom = zoom;\n        };\n        Camera2d.prototype.clone = function () {\n            return new Camera2d({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                zoom: (0, std___std_all_1.__deepClone)(this.zoom),\n            });\n        };\n        Camera2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\");\n        };\n        return Camera2d;\n    }());\n    exports.Camera2d = Camera2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\"), Camera2d)\n    ; /* impl Camera2d */\n    var Camera = /** @class */ (function () {\n        function Camera(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)));\n            this.rotation = ((_b = data.rotation) !== null && _b !== void 0 ? _b : __.FM.float_4_1_1_1_1(__.int(1), __.int(0), __.int(0), __.int(0)));\n            this.width = ((_c = data.width) !== null && _c !== void 0 ? _c : (1920 | 0));\n            this.height = ((_d = data.height) !== null && _d !== void 0 ? _d : (1080 | 0));\n            this.fov = ((_e = data.fov) !== null && _e !== void 0 ? _e : (90 | 0));\n            this.near = ((_f = data.near) !== null && _f !== void 0 ? _f : (1 | 0));\n            this.far = ((_g = data.far) !== null && _g !== void 0 ? _g : (100000 | 0));\n        }\n        Camera.prototype.getRay = function (screen) {\n            var shader_self_temp = this;\n            var aspect = this.width / this.height;\n            var x = screen[0];\n            var y = screen[1];\n            var Px = ((2 | 0) * ((x + 0.5) / this.width) - (1 | 0)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0)) * aspect;\n            var Py = ((1 | 0) - (2 | 0) * ((y + 0.5) / this.height)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0));\n            return quat.rotate(this.rotation, (0, std_math_1.normalize)(__.makeVector(Px, Py, (__.FM.negate_1((1 | 0))))));\n        };\n        Camera.prototype.getTransformToViewMatrix = function (position, scale, rotation) {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(rotation);\n            var translationMatrix = __.float4x4(scale[0], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[1], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[2], (0 | 0), position[0], position[1], position[2], (1 | 0));\n            return __.mul(__.mul(__.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()), translationMatrix), rotationMatrix);\n        };\n        Camera.prototype.getCombinedMatrix = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getCombinedMatrixReverseZ = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrixReverseZ(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getWorldToViewMatrix = function () {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(this.rotation);\n            var translationMatrix = __.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), this.position[0], this.position[1], this.position[2], (1 | 0));\n            return (0, std_math_1.inverse)(__.mul(translationMatrix, rotationMatrix));\n        };\n        Camera.prototype.getPerspectiveMatrixReverseZ = function () { var shader_self_temp = this; return matrix.perspectiveReverseZ(this.fov, this.width / this.height, this.near); };\n        Camera.prototype.getPerspectiveMatrix = function () {\n            var shader_self_temp = this;\n            return matrix.perspective(this.fov, this.width / this.height, this.near, this.far); // // let matrix = float4x4();\n            // let far = self.far;\n            // let near = self.near;\n            // let aspect = self.width / self.height;\n            // let fovRad = radians(self.fov);\n            // let tanFov = tan( fovRad * 0.5 );\n            // // matrix[0][0] = ;\n            // // matrix[1][1] = 1.0 / tanFov;\n            // // matrix[2][2] = -((far + near)/(far - near));\n            // // matrix[3][2] = -((2*(near*far))/(far - near));\n            // // matrix[2][3] = -1;\n            // // matrix[3][3] = 0;\n            // let matrix = float4x4(\n            //     1.0 / (tanFov * aspect), 0, 0, 0,\n            //     0, 1.0 / tanFov, 0, 0,\n            //     0, 0, -((far + near)/(far - near)), -1,\n            //     0, 0, -((2*(near*far))/(far - near)), 0\n            // );\n            // return matrix;\n        };\n        Camera.prototype.getOrthographicMatrix = function () {\n            var shader_self_temp = this;\n            var matrix = __.float4x4();\n            var far = this.far;\n            var near = this.near;\n            var w = 1.0 / this.width;\n            var h = 1.0 / this.height;\n            matrix.__index((0 | 0)).__index_assign((0 | 0), w);\n            matrix.__index((1 | 0)).__index_assign((1 | 0), h);\n            matrix.__index((2 | 0)).__index_assign((2 | 0), (__.FM.negate_1((2.0 / (far - near)))));\n            matrix.__index((2 | 0)).__index_assign((3 | 0), ((far + near) / (far - near)));\n            //matrix[2][2] = -((far + near)/(far - near));\n            //matrix[3][2] = -((2*(near*far))/(far - near));\n            matrix.__index((3 | 0)).__index_assign((3 | 0), 1.0);\n            return matrix;\n        };\n        Camera.prototype.clone = function () {\n            return new Camera({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                rotation: (0, std___std_all_1.__deepClone)(this.rotation),\n                width: (0, std___std_all_1.__deepClone)(this.width),\n                height: (0, std___std_all_1.__deepClone)(this.height),\n                fov: (0, std___std_all_1.__deepClone)(this.fov),\n                near: (0, std___std_all_1.__deepClone)(this.near),\n                far: (0, std___std_all_1.__deepClone)(this.far),\n            });\n        };\n        Camera.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\");\n        };\n        return Camera;\n    }());\n    exports.Camera = Camera;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\"), Camera)\n    ; /* impl Camera */\n    window._makeCamera = Camera;\n    window._makeCamera2d = Camera2d;\n    function easeA(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n    function easeB(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n    function easeC(aA1) { return 3.0 * aA1; }\n    function calcBezier(aT, aA1, aA2) { return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT; }\n    function getSlope(aT, aA1, aA2) { return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1); }\n    // fn getTForX(aX: float, aA1: float, aA2: float) -> float {\n    //     let aGuessT = aX;\n    //     for (let i = 0; i <= 10; i++) {\n    //         let currentSlope = bezSlope(aGuessT, aA1, aA2);\n    //         if (currentSlope == 0.0) {\n    //             return aGuessT;\n    //         }\n    //         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\n    //         aGuessT -= currentX / currentSlope;\n    //     }\n    //     return aGuessT;\n    // }\n    var NEWTON_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_ITERATIONS\", function () { return (4 | 0); }, function () { return NEWTON_ITERATIONS; }) | 0);\n    var NEWTON_MIN_SLOPE = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_MIN_SLOPE\", function () { return 0.02; }, function () { return NEWTON_MIN_SLOPE; });\n    var SUBDIVISION_PRECISION = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_PRECISION\", function () { return 0.0000001; }, function () { return SUBDIVISION_PRECISION; });\n    var SUBDIVISION_MAX_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_MAX_ITERATIONS\", function () { return (10 | 0); }, function () { return SUBDIVISION_MAX_ITERATIONS; }) | 0);\n    var kSplineTableSize = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSplineTableSize\", function () { return (11 | 0); }, function () { return kSplineTableSize; }) | 0);\n    var kSampleStepSize = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSampleStepSize\", function () { return 1.0 / __.sub(kSplineTableSize, (1 | 0)); }, function () { return kSampleStepSize; });\n    function getTForX(aX, mX1, mX2) {\n        var mSampleValues = (0, std___std_all_1.array)((11 | 0), (0 | 0));\n        for (var i = (0 | 0); i < kSplineTableSize; i++) {\n            mSampleValues.__index_assign(i, calcBezier(i * kSampleStepSize, mX1, mX2));\n        } // Find interval where t lies\n        var intervalStart = 0.0;\n        var currentSample = (1 | 0);\n        var lastSample = kSplineTableSize - (1 | 0);\n        for (var dummy = (0 | 0); __.and(currentSample != lastSample, mSampleValues[currentSample] <= aX); currentSample++) {\n            intervalStart = intervalStart + kSampleStepSize;\n        }\n        currentSample--;\n        // t now lies between *currentSample and *currentSample+1\n        // Interpolate to provide an initial guess for t\n        var csamp = mSampleValues[currentSample];\n        var dst = (aX - csamp) / (mSampleValues[currentSample + (1 | 0)] - csamp);\n        var guessForT = intervalStart + dst * kSampleStepSize;\n        // Check the slope to see what strategy to use. If the slope is too small\n        // Newton-Raphson iteration won't converge on a root so we use bisection\n        // instead.\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n            return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n        else if (initialSlope == 0.0) {\n            return guessForT;\n        }\n        else {\n            return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n        }\n    }\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n        for (var i = (0 | 0); i < NEWTON_ITERATIONS; i++) { // We're trying to find where f(t) = aX,\n            // so we're actually looking for a root for: CalcBezier(t) - aX\n            var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n            var currentSlope = getSlope(aGuessT, mX1, mX2);\n            if (currentSlope == 0.0)\n                return aGuessT;\n            aGuessT = aGuessT - currentX / currentSlope;\n        }\n        return aGuessT;\n    }\n    function binarySubdivide(aX, aA, aB) {\n        var currentX = 0.0;\n        var currentT = 0.0;\n        var i = (0 | 0);\n        var mX1 = aA;\n        var mX2 = aB;\n        while ((true)) {\n            i++;\n            if (__.and(Math.abs(currentX) > SUBDIVISION_PRECISION, i < SUBDIVISION_MAX_ITERATIONS)) {\n                currentT = aA + (aB - aA) / 2.0;\n                currentX = calcBezier(currentT, mX1, mX2) - aX;\n                if (currentX > 0.0) {\n                    aB = currentT;\n                }\n                else {\n                    aA = currentT;\n                }\n            }\n            else {\n                break;\n            }\n        }\n        return currentT;\n    }\n    var bezier = /** @class */ (function () {\n        function bezier(data) {\n        }\n        bezier.cubic2 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1]]), [_e[0] + _f[0], _e[1] + _f[1]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.cubic3 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1], _g * _h[2]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1], _l * _m[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1], _o * _p[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        bezier.quadratic2 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.quadratic3 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1], _e * _f[2]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1], _g * _h[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        /**\n            * 3d triangle patch evaulation with barycentric coordinates.\n            */\n        bezier.patch = function (a, ab, b, bc, c, ca, barycentricT) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n            var s = barycentricT[0];\n            var t = barycentricT[1];\n            var u = barycentricT[2];\n            return _a = (_c = (_e = (_g = (_j = (_l = (_o = 1.0, _p = c, [_o * _p[0], _o * _p[1], _o * _p[2]]), _m = (s * s), [_l[0] * _m, _l[1] * _m, _l[2] * _m]), _k = (_q = (_s = (_u = 2.0, _v = bc, [_u * _v[0], _u * _v[1], _u * _v[2]]), _t = s, [_s[0] * _t, _s[1] * _t, _s[2] * _t]), _r = t, [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = (_w = (_y = (_0 = 2.0, _1 = ca, [_0 * _1[0], _0 * _1[1], _0 * _1[2]]), _z = s, [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = u, [_w[0] * _x, _w[1] * _x, _w[2] * _x]), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]]), _f = (_2 = (_4 = 1.0, _5 = b, [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), _3 = (t * t), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_6 = (_8 = (_10 = 2.0, _11 = ab, [_10 * _11[0], _10 * _11[1], _10 * _11[2]]), _9 = t, [_8[0] * _9, _8[1] * _9, _8[2] * _9]), _7 = u, [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_12 = (_14 = 1.0, _15 = a, [_14 * _15[0], _14 * _15[1], _14 * _15[2]]), _13 = (u * u), [_12[0] * _13, _12[1] * _13, _12[2] * _13]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]];\n        };\n        bezier.easing = function (controlA, controlB, t) { return calcBezier(getTForX(t, controlA[0], controlB[0]), controlA[1], controlB[1]); };\n        bezier.prototype.clone = function () {\n            return new bezier({});\n        };\n        bezier.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_20500_bezier\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return bezier;\n    }());\n    exports.bezier = bezier;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_20500_bezier\\\\\",\\\\\"fields\\\\\":[]}\"), bezier)\n    ; /* impl bezier */\n    /**\n    * Provides space related utilities like z-order curves and quadtrees.\n    */\n    var spatial = /** @class */ (function () {\n        function spatial(data) {\n        }\n        spatial.cantorPair = function (v) { return ((v[0] + v[1]) * (v[0] + v[1] + (1 | 0))) / (2 | 0) + v[1]; };\n        spatial.cantorUnpair = function (v) {\n            var w = Math.floor((Math.sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\n            var t = (w * w + w) / 2.0;\n            var y = v - t;\n            var x = w - y;\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertRotate = function (n, b, r) {\n            var x = b[0];\n            var y = b[1];\n            if (r[1] == (0 | 0)) {\n                if (r[0] == (1 | 0)) {\n                    x = n - (1 | 0) - x;\n                    y = n - (1 | 0) - y;\n                }\n                var t = x;\n                x = y;\n                y = t;\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertUncurve = function (n, v) {\n            var x = v[0];\n            var y = v[1];\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var s = (0 | 0);\n            var d = (0 | 0);\n            for (s = n / (2 | 0); s > (0 | 0); s = s / (2 | 0)) {\n                rx = ((x & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                ry = ((y & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                d = d + s * s * (((3 | 0) * rx) ^ ry);\n                var o = __.intifyVector(spatial.hilbertRotate(n, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n            }\n            return d;\n        };\n        spatial.hilbertCurve = function (n, v) {\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var t = v;\n            var x = (0 | 0);\n            var y = (0 | 0);\n            for (var s = (1 | 0); s < n; s = s * (2 | 0)) {\n                rx = (1 | 0) & (t / (2 | 0));\n                ry = (1 | 0) & (t ^ rx);\n                var o = __.intifyVector(spatial.hilbertRotate(s, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n                x = x + s * rx;\n                y = y + s * ry;\n                t = t / (4 | 0);\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.mortonDecode = function (p) { return __.FM.uint_2_1_1(reverseMortonCode2(p), reverseMortonCode2(p >> (1 >>> 0))); };\n        spatial.mortonEncode = function (p) { return (__.bitor(mortonCode2(p[0]), (mortonCode2(p[1]) << (1 >>> 0))) >>> 0); };\n        spatial.prototype.clone = function () {\n            return new spatial({});\n        };\n        spatial.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_23054_spatial\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return spatial;\n    }());\n    exports.spatial = spatial;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_23054_spatial\\\\\",\\\\\"fields\\\\\":[]}\"), spatial)\n    ; /* impl spatial */\n    function mortonCode2(x) {\n        x = x & (0x0000ffff >>> 0);\n        var n8 = (8 >>> 0);\n        var n4 = (4 >>> 0);\n        var n2 = (2 >>> 0);\n        var n1 = (1 >>> 0);\n        x = (x ^ (x << n8)) & (0x00ff00ff >>> 0);\n        x = (x ^ (x << n4)) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x << n2)) & (0x33333333 >>> 0);\n        x = (x ^ (x << n1)) & (0x55555555 >>> 0);\n        return x;\n    }\n    exports.mortonCode2 = mortonCode2;\n    ;\n    function randColor(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand2)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor = randColor;\n    ;\n    function randColor2(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand3)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor2 = randColor2;\n    ;\n    function reverseMortonCode2(x) {\n        x = x & (0x55555555 >>> 0);\n        x = (x ^ (x >> (1 >>> 0))) & (0x33333333 >>> 0);\n        x = (x ^ (x >> (2 >>> 0))) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x >> (4 >>> 0))) & (0x00ff00ff >>> 0);\n        x = (x ^ (x >> (8 >>> 0))) & (0x0000ffff >>> 0);\n        return x;\n    }\n    exports.reverseMortonCode2 = reverseMortonCode2;\n    ;\n    var noise = /** @class */ (function () {\n        function noise(data) {\n        }\n        noise.gaussian3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;\n            var p = v;\n            var a = (_a = p, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var d = (_b = p, _c = a, [_b[0] - _c[0], _b[1] - _c[1], _b[2] - _c[2]]);\n            d = (_d = (_f = d, _g = d, [_f[0] * _g[0], _f[1] * _g[1], _f[2] * _g[2]]), _e = (_h = 3.0, _j = (_k = 2.0, _l = d, [_k * _l[0], _k * _l[1], _k * _l[2]]), [_h - _j[0], _h - _j[1], _h - _j[2]]), [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]);\n            var b = (_m = (_p = a, [_p[0], _p[0], _p[1], _p[1]]), _o = __.FM.float_4_1_1_1_1(__.float(0.0), __.float(1.0), __.float(0.0), __.float(1.0)), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2], _m[3] + _o[3]]);\n            var k1 = perm((_q = b, [_q[0], _q[1], _q[0], _q[1]]));\n            var k2 = perm((_r = (_t = k1, [_t[0], _t[1], _t[0], _t[1]]), _s = (_u = b, [_u[2], _u[2], _u[3], _u[3]]), [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2], _r[3] + _s[3]]));\n            var c = (_v = k2, _w = (_x = a, [_x[2], _x[2], _x[2], _x[2]]), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2], _v[3] + _w[3]]);\n            var k3 = perm(c);\n            var k4 = perm((_y = c, _z = 1.0, [_y[0] + _z, _y[1] + _z, _y[2] + _z, _y[3] + _z]));\n            var o1 = (0, std_math_1.frac)((_0 = k3, _1 = (1.0 / 41.0), [_0[0] * _1, _0[1] * _1, _0[2] * _1, _0[3] * _1]));\n            var o2 = (0, std_math_1.frac)((_2 = k4, _3 = (1.0 / 41.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3, _2[3] * _3]));\n            var o3 = (_4 = (_6 = o2, _7 = d[2], [_6[0] * _7, _6[1] * _7, _6[2] * _7, _6[3] * _7]), _5 = (_8 = o1, _9 = (1.0 - d[2]), [_8[0] * _9, _8[1] * _9, _8[2] * _9, _8[3] * _9]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2], _4[3] + _5[3]]);\n            var o4 = (_10 = (_12 = (_14 = o3, [_14[1], _14[3]]), _13 = d[0], [_12[0] * _13, _12[1] * _13]), _11 = (_15 = (_17 = o3, [_17[0], _17[2]]), _16 = (1.0 - d[0]), [_15[0] * _16, _15[1] * _16]), [_10[0] + _11[0], _10[1] + _11[1]]);\n            return o4[1] * d[1] + o4[0] * (1.0 - d[1]);\n        };\n        noise.gaussian2 = function (v) { return noise.gaussian3(__.makeVector(v, (0 | 0))); };\n        noise.noise1 = function (x) {\n            var i = Math.floor(x);\n            var f = (0, std_math_1.frac)(x);\n            var u = f * f * (3.0 - 2.0 * f);\n            return (0, std_math_1.lerp)(hash(i), hash(i + 1.0), u);\n        };\n        noise.noise2 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var f = (0, std_math_1.frac)(x);\n            // Four corners in 2D of a tile\n            var a = hash2(i);\n            var b = hash2((_b = i, _c = __.FM.float_2_1_1(__.float(1.0), __.float(0.0)), [_b[0] + _c[0], _b[1] + _c[1]]));\n            var c = hash2((_d = i, _e = __.FM.float_2_1_1(__.float(0.0), __.float(1.0)), [_d[0] + _e[0], _d[1] + _e[1]]));\n            var d = hash2((_f = i, _g = __.FM.float_2_1_1(__.float(1.0), __.float(1.0)), [_f[0] + _g[0], _f[1] + _g[1]]));\n            // Simple 2D lerp using smoothstep envelope between the values.\n            // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tsmoothstep(0.0, 1.0, f.y)));\n            // Same code, with the clamps in smoothstep and common subexpressions\n            // optimized away.\n            var u = (_h = (_k = f, _l = f, [_k[0] * _l[0], _k[1] * _l[1]]), _j = (_m = 3.0, _o = (_p = 2.0, _q = f, [_p * _q[0], _p * _q[1]]), [_m - _o[0], _m - _o[1]]), [_h[0] * _j[0], _h[1] * _j[1]]);\n            return (0, std_math_1.lerp)(a, b, u[0]) + (c - a) * u[1] * (1.0 - u[0]) + (d - b) * u[0] * u[1];\n        };\n        noise.fmb1 = function (x) {\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.int(100);\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise1(x);\n                x = x * 2.0 + shift;\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm2 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_2_2(__.swizzle((100 | 0), \"xy\"));\n            // Rotate to reduce axial bias\n            var rot = __.float2x2(Math.cos(0.5), Math.sin(0.5), (__.FM.negate_1(Math.sin(0.5))), Math.cos(0.50));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise2(x);\n                x = (_a = (_c = __.mul(rot, x), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm3 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_3_3(__.swizzle((100 | 0), \"xyz\"));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise3(x);\n                x = (_a = (_c = x, _d = 2.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.noise3 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n            var step = __.FM.float_3_1_1_1(__.int(110), __.int(241), __.int(171));\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var f = (0, std_math_1.frac)(x);\n            // For performance, compute the base input to a 1D hash from the integer part of the argument and the \n            // incremental change to the 1D based on the 3D -> 1D wrapping\n            var n = (0, std_math_1.dot)(i, step);\n            var u = (_b = (_d = f, _e = f, [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]), _c = (_f = 3.0, _g = (_h = 2.0, _j = f, [_h * _j[0], _h * _j[1], _h * _j[2]]), [_f - _g[0], _f - _g[1], _f - _g[2]]), [_b[0] * _c[0], _b[1] * _c[1], _b[2] * _c[2]]);\n            return (0, std_math_1.lerp)((0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(0)))), u[0]), u[1]), (0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(1)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(1)))), u[0]), u[1]), u[2]);\n        };\n        noise.simplex2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.211324865405187), __.float(0.366025403784439), __.negate(0.577350269189626), __.float(0.024390243902439));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1]])), [_b[0] + _c, _b[1] + _c]), [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0]])), [_e[0] + _f, _e[1] + _f]);\n            var xv = (0, std_math_1.step)(x0[1], x0[0]);\n            var i1 = __.FM.float_2_1_1(xv, __.sub(1.0, xv));\n            var x1 = (_k = (_m = x0, _o = (_p = C, [_p[0], _p[0]]), [_m[0] + _o[0], _m[1] + _o[1]]), _l = i1, [_k[0] - _l[0], _k[1] - _l[1]]);\n            var x2 = (_q = x0, _r = (_s = C, [_s[2], _s[2]]), [_q[0] + _r[0], _q[1] + _r[1]]);\n            i = mod289_2(i);\n            var p = permute((_t = (_v = permute((_x = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.float(1.0)), _y = i[1], [_x[0] + _y, _x[1] + _y, _x[2] + _y])), _w = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.float(1.0)), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2]]), _u = i[0], [_t[0] + _u, _t[1] + _u, _t[2] + _u]));\n            var m = (0, std_math_1.max)((_z = (_1 = 0.5, [_1, _1, _1]), _0 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_z[0] - _0[0], _z[1] - _0[1], _z[2] - _0[2]]), 0.0);\n            m = (_2 = m, _3 = m, [_2[0] * _3[0], _2[1] * _3[1], _2[2] * _3[2]]);\n            m = (_4 = m, _5 = m, [_4[0] * _5[0], _4[1] * _5[1], _4[2] * _5[2]]);\n            var x = (_6 = (_8 = 2.0, _9 = (0, std_math_1.frac)((_10 = p, _11 = (_12 = C, [_12[3], _12[3], _12[3]]), [_10[0] * _11[0], _10[1] * _11[1], _10[2] * _11[2]])), [_8 * _9[0], _8 * _9[1], _8 * _9[2]]), _7 = 1.0, [_6[0] - _7, _6[1] - _7, _6[2] - _7]);\n            var h = (_13 = (_15 = x, [Math.abs(_15[0]), Math.abs(_15[1]), Math.abs(_15[2])]), _14 = 0.5, [_13[0] - _14, _13[1] - _14, _13[2] - _14]);\n            var ox = (_16 = (_17 = x, _18 = 0.5, [_17[0] + _18, _17[1] + _18, _17[2] + _18]), [Math.floor(_16[0]), Math.floor(_16[1]), Math.floor(_16[2])]);\n            var a0 = (_19 = x, _20 = ox, [_19[0] - _20[0], _19[1] - _20[1], _19[2] - _20[2]]);\n            // Normalise gradients implicitly by scaling m\n            m = (_21 = m, _22 = taylorInvSqrt((_23 = (_25 = a0, _26 = a0, [_25[0] * _26[0], _25[1] * _26[1], _25[2] * _26[2]]), _24 = (_27 = h, _28 = h, [_27[0] * _28[0], _27[1] * _28[1], _27[2] * _28[2]]), [_23[0] + _24[0], _23[1] + _24[1], _23[2] + _24[2]])), [_21[0] * _22[0], _21[1] * _22[1], _21[2] * _22[2]]);\n            // Compute final noise value at P\n            var g = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g);\n        };\n        noise.perlin2 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = 0.0;\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        noise.perlin3 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = v[2];\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        /**\n            * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\n            */\n        noise.voronoi2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var n = (_a = v, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var minDist = 10.0;\n            var toClose = (_b = 0.0, [_b, _b]);\n            var closestCell = (_c = 0.0, [_c, _c]);\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_d = n, _e = __.FM.float_2_1_1(i, j), [_d[0] + _e[0], _d[1] + _e[1]]);\n                    var cellPos = (_f = cell, _g = hash2(cell), [_f[0] + _g, _f[1] + _g]);\n                    var toCell = (_h = cellPos, _j = v, [_h[0] - _j[0], _h[1] - _j[1]]);\n                    var dst = (0, std_math_1.length)(toCell);\n                    if (dst < minDist) {\n                        minDist = dst;\n                        toClose = toCell;\n                        closestCell = cell;\n                    }\n                }\n            }\n            var minEdge = 10.0;\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_k = n, _l = __.FM.float_2_1_1(i, j), [_k[0] + _l[0], _k[1] + _l[1]]);\n                    var cellPos = (_m = cell, _o = hash2(cell), [_m[0] + _o, _m[1] + _o]);\n                    var toCell = (_p = cellPos, _q = v, [_p[0] - _q[0], _p[1] - _q[1]]);\n                    var diff = (_r = (_s = closestCell, _t = cell, [_s[0] - _t[0], _s[1] - _t[1]]), [Math.abs(_r[0]), Math.abs(_r[1])]);\n                    var isClosest = diff[0] + diff[1] < 0.1;\n                    if (__.not(isClosest)) {\n                        var toCenter = (_u = (_w = toClose, _x = toCell, [_w[0] + _x[0], _w[1] + _x[1]]), _v = 0.5, [_u[0] * _v, _u[1] * _v]);\n                        var cellDiff = (0, std_math_1.normalize)((_y = toCell, _z = toClose, [_y[0] - _z[0], _y[1] - _z[1]]));\n                        var edge = (0, std_math_1.dot)(toCenter, cellDiff);\n                        minEdge = (0, std_math_1.min)(minEdge, edge);\n                    }\n                }\n            }\n            var random = hash2(closestCell);\n            return __.FM.float_3_1_1_1(minDist, random, minEdge);\n        };\n        noise.simplex3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.138196601125011), __.float(0.276393202250021), __.float(0.414589803375032), __.negate(0.447213595499958));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1], _d[1]])), [_b[0] + _c, _b[1] + _c, _b[2] + _c]), [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0], _j[0]])), [_e[0] + _f, _e[1] + _f, _e[2] + _f]);\n            var g = (0, std_math_1.step)((_k = x0, [_k[1], _k[2], _k[0]]), (_l = x0, [_l[0], _l[1], _l[2]]));\n            var l = (_m = 1.0, _o = g, [_m - _o[0], _m - _o[1], _m - _o[2]]);\n            var i1 = (0, std_math_1.min)((_p = g, [_p[0], _p[1], _p[2]]), (_q = l, [_q[2], _q[0], _q[1]]));\n            var i2 = (0, std_math_1.max)((_r = g, [_r[0], _r[1], _r[2]]), (_s = l, [_s[2], _s[0], _s[1]]));\n            var x1 = (_t = (_v = x0, _w = i1, [_v[0] - _w[0], _v[1] - _w[1], _v[2] - _w[2]]), _u = (_x = 1.0, _y = (_z = C, [_z[0], _z[0], _z[0]]), [_x * _y[0], _x * _y[1], _x * _y[2]]), [_t[0] + _u[0], _t[1] + _u[1], _t[2] + _u[2]]);\n            var x2 = (_0 = (_2 = x0, _3 = i2, [_2[0] - _3[0], _2[1] - _3[1], _2[2] - _3[2]]), _1 = (_4 = 2.0, _5 = (_6 = C, [_6[0], _6[0], _6[0]]), [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), [_0[0] + _1[0], _0[1] + _1[1], _0[2] + _1[2]]);\n            var x3 = (_7 = (_9 = x0, _10 = 1., [_9[0] - _10, _9[1] - _10, _9[2] - _10]), _8 = (_11 = 3.0, _12 = (_13 = C, [_13[0], _13[0], _13[0]]), [_11 * _12[0], _11 * _12[1], _11 * _12[2]]), [_7[0] + _8[0], _7[1] + _8[1], _7[2] + _8[2]]);\n            i = mod289_3(i);\n            var p = permute((_14 = (_16 = permute((_18 = (_20 = permute((_22 = i[2], _23 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'z'), __.swizzle(i2, 'z')), [_22 + _23[0], _22 + _23[1], _22 + _23[2]])), _21 = i[1], [_20[0] + _21, _20[1] + _21, _20[2] + _21]), _19 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.swizzle(i2, 'y')), [_18[0] + _19[0], _18[1] + _19[1], _18[2] + _19[2]])), _17 = i[0], [_16[0] + _17, _16[1] + _17, _16[2] + _17]), _15 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.swizzle(i2, 'x')), [_14[0] + _15[0], _14[1] + _15[1], _14[2] + _15[2]]));\n            var m = (0, std_math_1.max)((_24 = 0.5, _25 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_24 - _25[0], _24 - _25[1], _24 - _25[2]]), 0.0);\n            m = (_26 = m, _27 = m, [_26[0] * _27[0], _26[1] * _27[1], _26[2] * _27[2]]);\n            m = (_28 = m, _29 = m, [_28[0] * _29[0], _28[1] * _29[1], _28[2] * _29[2]]);\n            var x = (_30 = (_32 = 2.0, _33 = (0, std_math_1.frac)((_34 = p, _35 = (_36 = C, [_36[3], _36[3], _36[3]]), [_34[0] * _35[0], _34[1] * _35[1], _34[2] * _35[2]])), [_32 * _33[0], _32 * _33[1], _32 * _33[2]]), _31 = 1.0, [_30[0] - _31, _30[1] - _31, _30[2] - _31]);\n            var h = (_37 = (_39 = x, [Math.abs(_39[0]), Math.abs(_39[1]), Math.abs(_39[2])]), _38 = 0.5, [_37[0] - _38, _37[1] - _38, _37[2] - _38]);\n            var ox = (_40 = (_41 = x, _42 = 0.5, [_41[0] + _42, _41[1] + _42, _41[2] + _42]), [Math.floor(_40[0]), Math.floor(_40[1]), Math.floor(_40[2])]);\n            var a0 = (_43 = x, _44 = ox, [_43[0] - _44[0], _43[1] - _44[1], _43[2] - _44[2]]);\n            // Normalise gradients implicitly by scaling m\n            // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\n            m = (_45 = m, _46 = (_47 = 1.79284291400159, _48 = (_49 = 0.85373472095314, _50 = (_51 = (_53 = a0, _54 = a0, [_53[0] * _54[0], _53[1] * _54[1], _53[2] * _54[2]]), _52 = (_55 = h, _56 = h, [_55[0] * _56[0], _55[1] * _56[1], _55[2] * _56[2]]), [_51[0] + _52[0], _51[1] + _52[1], _51[2] + _52[2]]), [_49 * _50[0], _49 * _50[1], _49 * _50[2]]), [_47 - _48[0], _47 - _48[1], _47 - _48[2]]), [_45[0] * _46[0], _45[1] * _46[1], _45[2] * _46[2]]);\n            // Compute final noise value at P\n            var g2 = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g2);\n        };\n        noise.prototype.clone = function () {\n            return new noise({});\n        };\n        noise.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_26913_noise\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return noise;\n    }());\n    exports.noise = noise;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_26913_noise\\\\\",\\\\\"fields\\\\\":[]}\"), noise)\n    ;\n    var PERLIN_YWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAPB\", function () { return (4 | 0); }, function () { return PERLIN_YWRAPB; }) | 0);\n    var PERLIN_YWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAP\", function () { return (1 | 0) << PERLIN_YWRAPB; }, function () { return PERLIN_YWRAP; }) | 0);\n    var PERLIN_ZWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAPB\", function () { return (8 | 0); }, function () { return PERLIN_ZWRAPB; }) | 0);\n    var PERLIN_ZWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAP\", function () { return (1 | 0) << PERLIN_ZWRAPB; }, function () { return PERLIN_ZWRAP; }) | 0);\n    var PERLIN_SIZE = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_SIZE\", function () { return (4095 | 0); }, function () { return PERLIN_SIZE; }) | 0);\n    var perlin_octaves = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_octaves\", function () { return (4 | 0); }, function () { return perlin_octaves; }) | 0);\n    // default to medium smooth\n    var perlin_amp_falloff = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_amp_falloff\", function () { return 0.5; }, function () { return perlin_amp_falloff; });\n    // 50% reduction/octave\n    function scaled_cosine(i) { return 0.5 * (1.0 - Math.cos(i * PI)); }\n    var perlin = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin\", function () { return (0, buffer_1.buffer)(PERLIN_SIZE + (1 | 0), \"float\", __assign({}, JSON.parse(\"{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}\"))); }, function () { return perlin; });\n    for (var i = (0 | 0); i < PERLIN_SIZE + (1 | 0); i++) {\n        perlin.__index_assign(i, (0, std_math_1.rand)(i));\n    } //\t<https://www.shadertoy.com/view/4dS3Wd>\n    //\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\n    //\n    function hash(n) { return (0, std_math_1.frac)(Math.sin(n) * (1e4 | 0)); }\n    function hash2(p) { return (0, std_math_1.frac)((1e4 | 0) * Math.sin(17.0 * p[0] + p[1] * 0.1) * (0.1 + Math.abs(Math.sin(p[1] * 13.0 + p[0])))); }\n    function hash3(p) {\n        var h = (0, std_math_1.dot)(p, __.FM.float_3_1_1_1(__.float(127.1), __.float(311.7), __.float(74.7)));\n        return (0, std_math_1.frac)(Math.sin(h) * 43758.5453123);\n    }\n    /* impl noise */\n    function mod289_1(x) { return x - Math.floor(x * (1.0 / 289.0)) * 289.0; }\n    function mod289_4(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g, _f[3] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2]), Math.floor(_e[3])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2], _a[3] - _b[3]]; }\n    function perm(x) { var _a, _b, _c, _d, _e, _f; return mod289_4((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f, _e[3] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d, _c[3] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]])); }\n    function mod289_3(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]; }\n    function mod289_2(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g]), [Math.floor(_e[0]), Math.floor(_e[1])]), _d = 289.0, [_c[0] * _d, _c[1] * _d]), [_a[0] - _b[0], _a[1] - _b[1]]; }\n    function permute(x) { var _a, _b, _c, _d, _e, _f; return mod289_3((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2]])); }\n    function taylorInvSqrt(r) { var _a, _b, _c, _d; return _a = 1.79284291400159, _b = (_c = 0.85373472095314, _d = r, [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]; }\n    var matrix = /** @class */ (function () {\n        function matrix(data) {\n        }\n        matrix.lookAt = function (from, to, up) {\n            var _a, _b, _c, _d;\n            var zAxis = (0, std_math_1.normalize)((_a = from, _b = to, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]));\n            var xAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(up, zAxis));\n            var yAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(zAxis, xAxis));\n            var dst = __.float4x4();\n            dst.__index((0 | 0)).__index_assign((0 | 0), xAxis[0]);\n            dst.__index((0 | 0)).__index_assign((1 | 0), yAxis[0]);\n            dst.__index((0 | 0)).__index_assign((2 | 0), zAxis[0]);\n            dst.__index((0 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((1 | 0)).__index_assign((0 | 0), xAxis[1]);\n            dst.__index((1 | 0)).__index_assign((1 | 0), yAxis[1]);\n            dst.__index((1 | 0)).__index_assign((2 | 0), zAxis[1]);\n            dst.__index((1 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((2 | 0)).__index_assign((0 | 0), xAxis[2]);\n            dst.__index((2 | 0)).__index_assign((1 | 0), yAxis[2]);\n            dst.__index((2 | 0)).__index_assign((2 | 0), zAxis[2]);\n            dst.__index((2 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((3 | 0)).__index_assign((0 | 0), (__.FM.negate_1((xAxis[0] * from[0] + xAxis[1] * from[1] + xAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((1 | 0), (__.FM.negate_1((yAxis[0] * from[0] + yAxis[1] * from[1] + yAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((2 | 0), (__.FM.negate_1((zAxis[0] * from[0] + zAxis[1] * from[1] + zAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((3 | 0), (1 | 0));\n            return dst;\n            var forward = (0, std_math_1.normalize)((_c = from, _d = to, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]));\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(up, forward));\n            var newup = (0, std_math_1.cross)(forward, right);\n            var m = __.float4x4();\n            m.__index((0 | 0)).__index_assign((0 | 0), right[0]), m.__index((0 | 0)).__index_assign((1 | 0), right[1]), m.__index((0 | 0)).__index_assign((2 | 0), right[2]);\n            m.__index((1 | 0)).__index_assign((0 | 0), newup[0]), m.__index((1 | 0)).__index_assign((1 | 0), newup[1]), m.__index((1 | 0)).__index_assign((2 | 0), newup[2]);\n            m.__index((2 | 0)).__index_assign((0 | 0), forward[0]), m.__index((2 | 0)).__index_assign((1 | 0), forward[1]), m.__index((2 | 0)).__index_assign((2 | 0), forward[2]);\n            m.__index((3 | 0)).__index_assign((0 | 0), from[0]), m.__index((3 | 0)).__index_assign((1 | 0), from[1]), m.__index((3 | 0)).__index_assign((2 | 0), from[2]);\n            return m;\n        };\n        matrix.perspective = function (fov, aspect, near, far) {\n            // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = -1;  //set w = -z \n            // M[3][3] = 0; \n            //return M;\n            var fovRad = (0, std_math_1.radians)(fov);\n            var tanFov = Math.tan(fovRad * 0.5);\n            var matrx = __.float4x4(1.0 / (tanFov * aspect), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0 / tanFov, (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1(((far + near) / (far - near)))), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (__.FM.negate_1((((2 | 0) * (near * far)) / (far - near)))), (0 | 0));\n            return matrx;\n        };\n        matrix.perspectiveReverseZ = function (fov, aspect, near) {\n            // let far = 10000000.0;\n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = 0;  //set w = -z \n            // M[3][3] = 0; \n            // return M;\n            var matrx = __.mul(__.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (1 | 0)), matrix.perspective(fov, aspect, near, 10000000.0));\n            return matrx;\n        };\n        matrix.prototype.clone = function () {\n            return new matrix({});\n        };\n        matrix.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_44684_matrix\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return matrix;\n    }());\n    exports.matrix = matrix;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_44684_matrix\\\\\",\\\\\"fields\\\\\":[]}\"), matrix)\n    ; /* impl matrix */\n    /**\n    * Uses Super Sampling Anti Aliasing to smooth out the image.\n    */\n    function screenAA(inScreenPos, gridSize, func) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        var weightSum = 0.0;\n        var accumulatedColor = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(0));\n        for (var y = (0 | 0); y < gridSize; y++) {\n            for (var x = (0 | 0); x < gridSize; x++) {\n                var offset = __.FM.float_2_1_1(__.div((x + 0.5 - gridSize * 0.5), gridSize), __.div((y + 0.5 - gridSize * 0.5), gridSize));\n                var weight = Math.exp((__.FM.negate_1((0, std_math_1.dot)(offset, offset))) * (5 | 0));\n                // Gaussian weight\n                accumulatedColor = (_a = accumulatedColor, _b = (_c = func((_e = inScreenPos, _f = offset, [_e[0] + _f[0], _e[1] + _f[1]])), _d = weight, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2], _a[3] + _b[3]]);\n                weightSum = weightSum + weight;\n            }\n        }\n        return _g = accumulatedColor, _h = weightSum, [_g[0] / _h, _g[1] / _h, _g[2] / _h, _g[3] / _h];\n    }\n    exports.screenAA = screenAA;\n    ; // Color conversion helpers\n    // A color = float4 containing rgba values in the range [0, 1]\n    // All functions have an extra alpha functon and a reverse\n    // i.e. hsl, hsla, hslFromColor, hslaFromColor\n    // fn hsl(v: float3) -> float4\n    function hsl(v) { return hsla(__.makeVector(v, (1 | 0))); }\n    exports.hsl = hsl;\n    ;\n    function hsla(v) {\n        var h = v[0];\n        var s = v[1];\n        var l = v[2];\n        var a = v[3];\n        var c = ((1 | 0) - Math.abs((2 | 0) * l - (1 | 0))) * s;\n        var x = c * ((1 | 0) - Math.abs(((h / (60 | 0)) % (2 | 0)) - (1 | 0)));\n        var m = l - c / (2 | 0);\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsla = hsla;\n    ;\n    function hslFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var a = c[3];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var l = (mx + mn) / (2 | 0);\n        if (mx == mn) {\n            h = (0 | 0);\n            s = (0 | 0);\n        }\n        else {\n            var d = mx - mn;\n            s = (l > 0.5) ? d / ((2 | 0) - mx - mn) : d / (mx + mn);\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, l);\n    }\n    exports.hslFromColor = hslFromColor;\n    ;\n    function hslaFromColor(c) {\n        var hsl = hslFromColor(c);\n        return __.FM.float_4_3_1(hsl, __.swizzle(c, 'a'));\n    }\n    exports.hslaFromColor = hslaFromColor;\n    ;\n    function hsv(v) { return hsva(__.makeVector(v, (1 | 0))); }\n    exports.hsv = hsv;\n    ;\n    function hsva(val) {\n        var h = val[0];\n        var s = val[1];\n        var v = val[2];\n        var a = val[3];\n        var c = v * s;\n        var x = c * ((1 | 0) - Math.abs(h / (60 | 0) % (2 | 0) - (1 | 0)));\n        var m = v - c;\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsva = hsva;\n    ;\n    function hsvFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var v = mx;\n        var d = mx - mn;\n        s = (mx == (0 | 0)) ? (0 | 0) : d / mx;\n        if (mx == mn) {\n            h = (0 | 0);\n        }\n        else {\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, v);\n    }\n    exports.hsvFromColor = hsvFromColor;\n    ;\n    function hsvaFromColor(c) {\n        var hsv = hsvFromColor(c);\n        return __.FM.float_4_3_1(hsv, __.swizzle(c, 'a'));\n    }\n    exports.hsvaFromColor = hsvaFromColor;\n    ;\n    function rgb(v) { return __.FM.float_4_3_1(__.div(v, 255.0), __.int(1)); }\n    exports.rgb = rgb;\n    ;\n    function rgba(v) { return __.FM.float_4_4(__.div(v, 255.0)); }\n    exports.rgba = rgba;\n    ;\n    function rgbFromColor(c) { var _a, _b, _c; return _a = (_c = c, [_c[0], _c[1], _c[2]]), _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b]; }\n    exports.rgbFromColor = rgbFromColor;\n    ;\n    function rgbaFromColor(c) { var _a, _b; return _a = c, _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b, _a[3] * _b]; }\n    exports.rgbaFromColor = rgbaFromColor;\n    ;\n    function cmyk(v) {\n        var c = v[0];\n        var m = v[1];\n        var y = v[2];\n        var k = v[3];\n        var r = (1 | 0) - (0, std_math_1.min)((1 | 0), c * ((1 | 0) - k) + k);\n        var g = (1 | 0) - (0, std_math_1.min)((1 | 0), m * ((1 | 0) - k) + k);\n        var b = (1 | 0) - (0, std_math_1.min)((1 | 0), y * ((1 | 0) - k) + k);\n        return __.FM.float_4_1_1_1_1(r, g, b, __.int(1));\n    }\n    exports.cmyk = cmyk;\n    ;\n    function cmykFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var k = (1 | 0) - (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var c1 = ((1 | 0) - r - k) / ((1 | 0) - k);\n        var m = ((1 | 0) - g - k) / ((1 | 0) - k);\n        var y = ((1 | 0) - b - k) / ((1 | 0) - k);\n        return __.FM.float_4_1_1_1_1(c1, m, y, k);\n    }\n    exports.cmykFromColor = cmykFromColor;\n    ;\n    function hex(v) {\n        var r = (v >> (16 | 0)) & (0xFF | 0);\n        var g = (v >> (8 | 0)) & (0xFF | 0);\n        var b = v & (0xFF | 0);\n        return __.FM.float_4_1_1_1_1(__.div(r, 255.0), __.div(g, 255.0), __.div(b, 255.0), __.float(1.0));\n    }\n    exports.hex = hex;\n    ;\n    function hexFromColor(c) {\n        var r = (__.mul(c[0], 255.0) | 0);\n        var g = (__.mul(c[1], 255.0) | 0);\n        var b = (__.mul(c[2], 255.0) | 0);\n        return (r << (16 | 0)) | (g << (8 | 0)) | b;\n    }\n    exports.hexFromColor = hexFromColor;\n    ; /**\n    * Returns sin remapped to [0, 1]\n    */\n    function sin1(v) { return (Math.sin(v) + (1 | 0)) * 0.5; }\n    exports.sin1 = sin1;\n    ; /**\n    * Returns cos remapped to [0, 1]\n    */\n    function cos1(v) { return (Math.cos(v) + (1 | 0)) * 0.5; }\n    exports.cos1 = cos1;\n    ; /**\n    * Returns tan remapped to [0, 1]\n    */\n    function tan1(v) { return (Math.tan(v) + (1 | 0)) * 0.5; }\n    exports.tan1 = tan1;\n    ;\n    function remap(v, low1, high1, low2, high2) { return low2 + (v - low1) * (high2 - low2) / (high1 - low1); }\n    exports.remap = remap;\n    ;\n    function remap1(v, low, high) { return remap(v, low, high, (0 | 0), (1 | 0)); }\n    exports.remap1 = remap1;\n    ;\n    var color = /** @class */ (function () {\n        function color(data) {\n        }\n        color.prototype.clone = function () {\n            return new color({});\n        };\n        color.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_57436_color\\\\\",\\\\\"fields\\\\\":[[\\\\\"slate50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\");\n        };\n        color.slate50 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.9803921568627451), __.float(0.9882352941176471), __.int(1));\n        color.slate100 = __.FM.float_4_1_1_1_1(__.float(0.9450980392156862), __.float(0.9607843137254902), __.float(0.9764705882352941), __.int(1));\n        color.slate200 = __.FM.float_4_1_1_1_1(__.float(0.8862745098039215), __.float(0.9098039215686274), __.float(0.9411764705882353), __.int(1));\n        color.slate300 = __.FM.float_4_1_1_1_1(__.float(0.796078431372549), __.float(0.8352941176470589), __.float(0.8823529411764706), __.int(1));\n        color.slate400 = __.FM.float_4_1_1_1_1(__.float(0.5803921568627451), __.float(0.6392156862745098), __.float(0.7215686274509804), __.int(1));\n        color.slate500 = __.FM.float_4_1_1_1_1(__.float(0.39215686274509803), __.float(0.4549019607843137), __.float(0.5450980392156862), __.int(1));\n        color.slate600 = __.FM.float_4_1_1_1_1(__.float(0.2784313725490196), __.float(0.3333333333333333), __.float(0.4117647058823529), __.int(1));\n        color.slate700 = __.FM.float_4_1_1_1_1(__.float(0.2), __.float(0.2549019607843137), __.float(0.3333333333333333), __.int(1));\n        color.slate800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.1607843137254902), __.float(0.23137254901960785), __.int(1));\n        color.slate900 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.09019607843137255), __.float(0.16470588235294117), __.int(1));\n        color.slate950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.023529411764705882), __.float(0.09019607843137255), __.int(1));\n        color.gray50 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.9803921568627451), __.float(0.984313725490196), __.int(1));\n        color.gray100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9568627450980393), __.float(0.9647058823529412), __.int(1));\n        color.gray200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.9058823529411765), __.float(0.9215686274509803), __.int(1));\n        color.gray300 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.8352941176470589), __.float(0.8588235294117647), __.int(1));\n        color.gray400 = __.FM.float_4_1_1_1_1(__.float(0.611764705882353), __.float(0.6392156862745098), __.float(0.6862745098039216), __.int(1));\n        color.gray500 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.4470588235294118), __.float(0.5019607843137255), __.int(1));\n        color.gray600 = __.FM.float_4_1_1_1_1(__.float(0.29411764705882354), __.float(0.3333333333333333), __.float(0.38823529411764707), __.int(1));\n        color.gray700 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.2549019607843137), __.float(0.3176470588235294), __.int(1));\n        color.gray800 = __.FM.float_4_1_1_1_1(__.float(0.12156862745098039), __.float(0.1607843137254902), __.float(0.21568627450980393), __.int(1));\n        color.gray900 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.09411764705882353), __.float(0.15294117647058825), __.int(1));\n        color.gray950 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.027450980392156862), __.float(0.07058823529411765), __.int(1));\n        color.zinc50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.zinc100 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.9568627450980393), __.float(0.9607843137254902), __.int(1));\n        color.zinc200 = __.FM.float_4_1_1_1_1(__.float(0.8941176470588236), __.float(0.8941176470588236), __.float(0.9058823529411765), __.int(1));\n        color.zinc300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8470588235294118), __.int(1));\n        color.zinc400 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.6313725490196078), __.float(0.6666666666666666), __.int(1));\n        color.zinc500 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.44313725490196076), __.float(0.47843137254901963), __.int(1));\n        color.zinc600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3568627450980392), __.int(1));\n        color.zinc700 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.24705882352941178), __.float(0.27450980392156865), __.int(1));\n        color.zinc800 = __.FM.float_4_1_1_1_1(__.float(0.15294117647058825), __.float(0.15294117647058825), __.float(0.16470588235294117), __.int(1));\n        color.zinc900 = __.FM.float_4_1_1_1_1(__.float(0.09411764705882353), __.float(0.09411764705882353), __.float(0.10588235294117647), __.int(1));\n        color.zinc950 = __.FM.float_4_1_1_1_1(__.float(0.03529411764705882), __.float(0.03529411764705882), __.float(0.043137254901960784), __.int(1));\n        color.neutral50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.neutral100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9607843137254902), __.int(1));\n        color.neutral200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.8980392156862745), __.float(0.8980392156862745), __.int(1));\n        color.neutral300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8313725490196079), __.int(1));\n        color.neutral400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.6392156862745098), __.float(0.6392156862745098), __.int(1));\n        color.neutral500 = __.FM.float_4_1_1_1_1(__.float(0.45098039215686275), __.float(0.45098039215686275), __.float(0.45098039215686275), __.int(1));\n        color.neutral600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3215686274509804), __.int(1));\n        color.neutral700 = __.FM.float_4_1_1_1_1(__.float(0.25098039215686274), __.float(0.25098039215686274), __.float(0.25098039215686274), __.int(1));\n        color.neutral800 = __.FM.float_4_1_1_1_1(__.float(0.14901960784313725), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.neutral900 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.09019607843137255), __.float(0.09019607843137255), __.int(1));\n        color.neutral950 = __.FM.float_4_1_1_1_1(__.float(0.0392156862745098), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.stone50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9764705882352941), __.int(1));\n        color.stone100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9568627450980393), __.int(1));\n        color.stone200 = __.FM.float_4_1_1_1_1(__.float(0.9058823529411765), __.float(0.8980392156862745), __.float(0.8941176470588236), __.int(1));\n        color.stone300 = __.FM.float_4_1_1_1_1(__.float(0.8392156862745098), __.float(0.8274509803921568), __.float(0.8196078431372549), __.int(1));\n        color.stone400 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.6352941176470588), __.float(0.6196078431372549), __.int(1));\n        color.stone500 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.44313725490196076), __.float(0.4235294117647059), __.int(1));\n        color.stone600 = __.FM.float_4_1_1_1_1(__.float(0.3411764705882353), __.float(0.3254901960784314), __.float(0.3058823529411765), __.int(1));\n        color.stone700 = __.FM.float_4_1_1_1_1(__.float(0.26666666666666666), __.float(0.25098039215686274), __.float(0.23529411764705882), __.int(1));\n        color.stone800 = __.FM.float_4_1_1_1_1(__.float(0.1607843137254902), __.float(0.1450980392156863), __.float(0.1411764705882353), __.int(1));\n        color.stone900 = __.FM.float_4_1_1_1_1(__.float(0.10980392156862745), __.float(0.09803921568627451), __.float(0.09019607843137255), __.int(1));\n        color.stone950 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.0392156862745098), __.float(0.03529411764705882), __.int(1));\n        color.red50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9490196078431372), __.float(0.9490196078431372), __.int(1));\n        color.red100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8862745098039215), __.float(0.8862745098039215), __.int(1));\n        color.red200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.792156862745098), __.float(0.792156862745098), __.int(1));\n        color.red300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.6470588235294118), __.float(0.6470588235294118), __.int(1));\n        color.red400 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.44313725490196076), __.float(0.44313725490196076), __.int(1));\n        color.red500 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.26666666666666666), __.float(0.26666666666666666), __.int(1));\n        color.red600 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.red700 = __.FM.float_4_1_1_1_1(__.float(0.7254901960784313), __.float(0.10980392156862745), __.float(0.10980392156862745), __.int(1));\n        color.red800 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.10588235294117647), __.float(0.10588235294117647), __.int(1));\n        color.red900 = __.FM.float_4_1_1_1_1(__.float(0.4980392156862745), __.float(0.11372549019607843), __.float(0.11372549019607843), __.int(1));\n        color.red950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.orange50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9686274509803922), __.float(0.9294117647058824), __.int(1));\n        color.orange100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9294117647058824), __.float(0.8352941176470589), __.int(1));\n        color.orange200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8431372549019608), __.float(0.6666666666666666), __.int(1));\n        color.orange300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.7294117647058823), __.float(0.4549019607843137), __.int(1));\n        color.orange400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.5725490196078431), __.float(0.23529411764705882), __.int(1));\n        color.orange500 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.45098039215686275), __.float(0.08627450980392157), __.int(1));\n        color.orange600 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.34509803921568627), __.float(0.047058823529411764), __.int(1));\n        color.orange700 = __.FM.float_4_1_1_1_1(__.float(0.7607843137254902), __.float(0.2549019607843137), __.float(0.047058823529411764), __.int(1));\n        color.orange800 = __.FM.float_4_1_1_1_1(__.float(0.6039215686274509), __.float(0.20392156862745098), __.float(0.07058823529411765), __.int(1));\n        color.orange900 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.17647058823529413), __.float(0.07058823529411765), __.int(1));\n        color.orange950 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.0784313725490196), __.float(0.027450980392156862), __.int(1));\n        color.amber50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.984313725490196), __.float(0.9215686274509803), __.int(1));\n        color.amber100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9529411764705882), __.float(0.7803921568627451), __.int(1));\n        color.amber200 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9019607843137255), __.float(0.5411764705882353), __.int(1));\n        color.amber300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.8274509803921568), __.float(0.30196078431372547), __.int(1));\n        color.amber400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.7490196078431373), __.float(0.1411764705882353), __.int(1));\n        color.amber500 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.6196078431372549), __.float(0.043137254901960784), __.int(1));\n        color.amber600 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.4666666666666667), __.float(0.023529411764705882), __.int(1));\n        color.amber700 = __.FM.float_4_1_1_1_1(__.float(0.7058823529411765), __.float(0.3254901960784314), __.float(0.03529411764705882), __.int(1));\n        color.amber800 = __.FM.float_4_1_1_1_1(__.float(0.5725490196078431), __.float(0.25098039215686274), __.float(0.054901960784313725), __.int(1));\n        color.amber900 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.20784313725490197), __.float(0.058823529411764705), __.int(1));\n        color.amber950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.10196078431372549), __.float(0.011764705882352941), __.int(1));\n        color.yellow50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9882352941176471), __.float(0.9098039215686274), __.int(1));\n        color.yellow100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9764705882352941), __.float(0.7647058823529411), __.int(1));\n        color.yellow200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9411764705882353), __.float(0.5411764705882353), __.int(1));\n        color.yellow300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.8784313725490196), __.float(0.2784313725490196), __.int(1));\n        color.yellow400 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.8), __.float(0.08235294117647059), __.int(1));\n        color.yellow500 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.7019607843137254), __.float(0.03137254901960784), __.int(1));\n        color.yellow600 = __.FM.float_4_1_1_1_1(__.float(0.792156862745098), __.float(0.5411764705882353), __.float(0.01568627450980392), __.int(1));\n        color.yellow700 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.3843137254901961), __.float(0.027450980392156862), __.int(1));\n        color.yellow800 = __.FM.float_4_1_1_1_1(__.float(0.5215686274509804), __.float(0.30196078431372547), __.float(0.054901960784313725), __.int(1));\n        color.yellow900 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.24705882352941178), __.float(0.07058823529411765), __.int(1));\n        color.yellow950 = __.FM.float_4_1_1_1_1(__.float(0.25882352941176473), __.float(0.12549019607843137), __.float(0.023529411764705882), __.int(1));\n        color.lime50 = __.FM.float_4_1_1_1_1(__.float(0.9686274509803922), __.float(0.996078431372549), __.float(0.9058823529411765), __.int(1));\n        color.lime100 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9882352941176471), __.float(0.796078431372549), __.int(1));\n        color.lime200 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.9764705882352941), __.float(0.615686274509804), __.int(1));\n        color.lime300 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.9490196078431372), __.float(0.39215686274509803), __.int(1));\n        color.lime400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.9019607843137255), __.float(0.20784313725490197), __.int(1));\n        color.lime500 = __.FM.float_4_1_1_1_1(__.float(0.5176470588235295), __.float(0.8), __.float(0.08627450980392157), __.int(1));\n        color.lime600 = __.FM.float_4_1_1_1_1(__.float(0.396078431372549), __.float(0.6392156862745098), __.float(0.050980392156862744), __.int(1));\n        color.lime700 = __.FM.float_4_1_1_1_1(__.float(0.30196078431372547), __.float(0.48627450980392156), __.float(0.058823529411764705), __.int(1));\n        color.lime800 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.3843137254901961), __.float(0.07058823529411765), __.int(1));\n        color.lime900 = __.FM.float_4_1_1_1_1(__.float(0.21176470588235294), __.float(0.3254901960784314), __.float(0.0784313725490196), __.int(1));\n        color.lime950 = __.FM.float_4_1_1_1_1(__.float(0.10196078431372549), __.float(0.1803921568627451), __.float(0.0196078431372549), __.int(1));\n        color.green50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1));\n        color.green100 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.9882352941176471), __.float(0.9058823529411765), __.int(1));\n        color.green200 = __.FM.float_4_1_1_1_1(__.float(0.7333333333333333), __.float(0.9686274509803922), __.float(0.8156862745098039), __.int(1));\n        color.green300 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.9372549019607843), __.float(0.6745098039215687), __.int(1));\n        color.green400 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.8705882352941177), __.float(0.5019607843137255), __.int(1));\n        color.green500 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.7725490196078432), __.float(0.3686274509803922), __.int(1));\n        color.green600 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.6392156862745098), __.float(0.2901960784313726), __.int(1));\n        color.green700 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.5019607843137255), __.float(0.23921568627450981), __.int(1));\n        color.green800 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.396078431372549), __.float(0.20392156862745098), __.int(1));\n        color.green900 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.3254901960784314), __.float(0.17647058823529413), __.int(1));\n        color.green950 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.1803921568627451), __.float(0.08627450980392157), __.int(1));\n        color.emerald50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9921568627450981), __.float(0.9607843137254902), __.int(1));\n        color.emerald100 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.9803921568627451), __.float(0.8980392156862745), __.int(1));\n        color.emerald200 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.9529411764705882), __.float(0.8156862745098039), __.int(1));\n        color.emerald300 = __.FM.float_4_1_1_1_1(__.float(0.43137254901960786), __.float(0.9058823529411765), __.float(0.7176470588235294), __.int(1));\n        color.emerald400 = __.FM.float_4_1_1_1_1(__.float(0.20392156862745098), __.float(0.8274509803921568), __.float(0.6), __.int(1));\n        color.emerald500 = __.FM.float_4_1_1_1_1(__.float(0.06274509803921569), __.float(0.7254901960784313), __.float(0.5058823529411764), __.int(1));\n        color.emerald600 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.5882352941176471), __.float(0.4117647058823529), __.int(1));\n        color.emerald700 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.47058823529411764), __.float(0.3411764705882353), __.int(1));\n        color.emerald800 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.37254901960784315), __.float(0.27450980392156865), __.int(1));\n        color.emerald900 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.3058823529411765), __.float(0.23137254901960785), __.int(1));\n        color.emerald950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.17254901960784313), __.float(0.13333333333333333), __.int(1));\n        color.teal50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9803921568627451), __.int(1));\n        color.teal100 = __.FM.float_4_1_1_1_1(__.float(0.8), __.float(0.984313725490196), __.float(0.9450980392156862), __.int(1));\n        color.teal200 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.9647058823529412), __.float(0.8941176470588236), __.int(1));\n        color.teal300 = __.FM.float_4_1_1_1_1(__.float(0.3686274509803922), __.float(0.9176470588235294), __.float(0.8313725490196079), __.int(1));\n        color.teal400 = __.FM.float_4_1_1_1_1(__.float(0.17647058823529413), __.float(0.8313725490196079), __.float(0.7490196078431373), __.int(1));\n        color.teal500 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.7215686274509804), __.float(0.6509803921568628), __.int(1));\n        color.teal600 = __.FM.float_4_1_1_1_1(__.float(0.050980392156862744), __.float(0.5803921568627451), __.float(0.5333333333333333), __.int(1));\n        color.teal700 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.4627450980392157), __.float(0.43137254901960786), __.int(1));\n        color.teal800 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.3686274509803922), __.float(0.34901960784313724), __.int(1));\n        color.teal900 = __.FM.float_4_1_1_1_1(__.float(0.07450980392156863), __.float(0.3058823529411765), __.float(0.2901960784313726), __.int(1));\n        color.teal950 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.1843137254901961), __.float(0.1803921568627451), __.int(1));\n        color.cyan50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.996078431372549), __.int(1), __.int(1));\n        color.cyan100 = __.FM.float_4_1_1_1_1(__.float(0.8117647058823529), __.float(0.9803921568627451), __.float(0.996078431372549), __.int(1));\n        color.cyan200 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.9529411764705882), __.float(0.9882352941176471), __.int(1));\n        color.cyan300 = __.FM.float_4_1_1_1_1(__.float(0.403921568627451), __.float(0.9098039215686274), __.float(0.9764705882352941), __.int(1));\n        color.cyan400 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.8274509803921568), __.float(0.9333333333333333), __.int(1));\n        color.cyan500 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.7137254901960784), __.float(0.8313725490196079), __.int(1));\n        color.cyan600 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.5686274509803921), __.float(0.6980392156862745), __.int(1));\n        color.cyan700 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.4549019607843137), __.float(0.5647058823529412), __.int(1));\n        color.cyan800 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.3686274509803922), __.float(0.4588235294117647), __.int(1));\n        color.cyan900 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.3058823529411765), __.float(0.38823529411764707), __.int(1));\n        color.cyan950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.2), __.float(0.26666666666666666), __.int(1));\n        color.sky50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9764705882352941), __.int(1), __.int(1));\n        color.sky100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9490196078431372), __.float(0.996078431372549), __.int(1));\n        color.sky200 = __.FM.float_4_1_1_1_1(__.float(0.7294117647058823), __.float(0.9019607843137255), __.float(0.9921568627450981), __.int(1));\n        color.sky300 = __.FM.float_4_1_1_1_1(__.float(0.49019607843137253), __.float(0.8274509803921568), __.float(0.9882352941176471), __.int(1));\n        color.sky400 = __.FM.float_4_1_1_1_1(__.float(0.2196078431372549), __.float(0.7411764705882353), __.float(0.9725490196078431), __.int(1));\n        color.sky500 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.6470588235294118), __.float(0.9137254901960784), __.int(1));\n        color.sky600 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.5176470588235295), __.float(0.7803921568627451), __.int(1));\n        color.sky700 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.4117647058823529), __.float(0.6313725490196078), __.int(1));\n        color.sky800 = __.FM.float_4_1_1_1_1(__.float(0.027450980392156862), __.float(0.34901960784313724), __.float(0.5215686274509804), __.int(1));\n        color.sky900 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.2901960784313726), __.float(0.43137254901960786), __.int(1));\n        color.sky950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.1843137254901961), __.float(0.28627450980392155), __.int(1));\n        color.blue50 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.9647058823529412), __.int(1), __.int(1));\n        color.blue100 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.9176470588235294), __.float(0.996078431372549), __.int(1));\n        color.blue200 = __.FM.float_4_1_1_1_1(__.float(0.7490196078431373), __.float(0.8588235294117647), __.float(0.996078431372549), __.int(1));\n        color.blue300 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.7725490196078432), __.float(0.9921568627450981), __.int(1));\n        color.blue400 = __.FM.float_4_1_1_1_1(__.float(0.3764705882352941), __.float(0.6470588235294118), __.float(0.9803921568627451), __.int(1));\n        color.blue500 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.5098039215686274), __.float(0.9647058823529412), __.int(1));\n        color.blue600 = __.FM.float_4_1_1_1_1(__.float(0.1450980392156863), __.float(0.38823529411764707), __.float(0.9215686274509803), __.int(1));\n        color.blue700 = __.FM.float_4_1_1_1_1(__.float(0.11372549019607843), __.float(0.3058823529411765), __.float(0.8470588235294118), __.int(1));\n        color.blue800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.25098039215686274), __.float(0.6862745098039216), __.int(1));\n        color.blue900 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.22745098039215686), __.float(0.5411764705882353), __.int(1));\n        color.blue950 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.1450980392156863), __.float(0.32941176470588235), __.int(1));\n        color.indigo50 = __.FM.float_4_1_1_1_1(__.float(0.9333333333333333), __.float(0.9490196078431372), __.int(1), __.int(1));\n        color.indigo100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9058823529411765), __.int(1), __.int(1));\n        color.indigo200 = __.FM.float_4_1_1_1_1(__.float(0.7803921568627451), __.float(0.8235294117647058), __.float(0.996078431372549), __.int(1));\n        color.indigo300 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.7058823529411765), __.float(0.9882352941176471), __.int(1));\n        color.indigo400 = __.FM.float_4_1_1_1_1(__.float(0.5058823529411764), __.float(0.5490196078431373), __.float(0.9725490196078431), __.int(1));\n        color.indigo500 = __.FM.float_4_1_1_1_1(__.float(0.38823529411764707), __.float(0.4), __.float(0.9450980392156862), __.int(1));\n        color.indigo600 = __.FM.float_4_1_1_1_1(__.float(0.30980392156862746), __.float(0.27450980392156865), __.float(0.8980392156862745), __.int(1));\n        color.indigo700 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.2196078431372549), __.float(0.792156862745098), __.int(1));\n        color.indigo800 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.18823529411764706), __.float(0.6392156862745098), __.int(1));\n        color.indigo900 = __.FM.float_4_1_1_1_1(__.float(0.19215686274509805), __.float(0.1803921568627451), __.float(0.5058823529411764), __.int(1));\n        color.indigo950 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.10588235294117647), __.float(0.29411764705882354), __.int(1));\n        color.violet50 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9529411764705882), __.int(1), __.int(1));\n        color.violet100 = __.FM.float_4_1_1_1_1(__.float(0.9294117647058824), __.float(0.9137254901960784), __.float(0.996078431372549), __.int(1));\n        color.violet200 = __.FM.float_4_1_1_1_1(__.float(0.8666666666666667), __.float(0.8392156862745098), __.float(0.996078431372549), __.int(1));\n        color.violet300 = __.FM.float_4_1_1_1_1(__.float(0.7686274509803922), __.float(0.7098039215686275), __.float(0.9921568627450981), __.int(1));\n        color.violet400 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.5450980392156862), __.float(0.9803921568627451), __.int(1));\n        color.violet500 = __.FM.float_4_1_1_1_1(__.float(0.5450980392156862), __.float(0.3607843137254902), __.float(0.9647058823529412), __.int(1));\n        color.violet600 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.22745098039215686), __.float(0.9294117647058824), __.int(1));\n        color.violet700 = __.FM.float_4_1_1_1_1(__.float(0.42745098039215684), __.float(0.1568627450980392), __.float(0.8509803921568627), __.int(1));\n        color.violet800 = __.FM.float_4_1_1_1_1(__.float(0.3568627450980392), __.float(0.12941176470588237), __.float(0.7137254901960784), __.int(1));\n        color.violet900 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.11372549019607843), __.float(0.5843137254901961), __.int(1));\n        color.violet950 = __.FM.float_4_1_1_1_1(__.float(0.1803921568627451), __.float(0.06274509803921569), __.float(0.396078431372549), __.int(1));\n        color.purple50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9607843137254902), __.int(1), __.int(1));\n        color.purple100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.purple200 = __.FM.float_4_1_1_1_1(__.float(0.9137254901960784), __.float(0.8352941176470589), __.int(1), __.int(1));\n        color.purple300 = __.FM.float_4_1_1_1_1(__.float(0.8470588235294118), __.float(0.7058823529411765), __.float(0.996078431372549), __.int(1));\n        color.purple400 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.5176470588235295), __.float(0.9882352941176471), __.int(1));\n        color.purple500 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.3333333333333333), __.float(0.9686274509803922), __.int(1));\n        color.purple600 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.2), __.float(0.9176470588235294), __.int(1));\n        color.purple700 = __.FM.float_4_1_1_1_1(__.float(0.49411764705882355), __.float(0.13333333333333333), __.float(0.807843137254902), __.int(1));\n        color.purple800 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.12941176470588237), __.float(0.6588235294117647), __.int(1));\n        color.purple900 = __.FM.float_4_1_1_1_1(__.float(0.34509803921568627), __.float(0.10980392156862745), __.float(0.5294117647058824), __.int(1));\n        color.purple950 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.027450980392156862), __.float(0.39215686274509803), __.int(1));\n        color.fuchsia50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1), __.int(1));\n        color.fuchsia100 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.fuchsia200 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.8156862745098039), __.float(0.996078431372549), __.int(1));\n        color.fuchsia300 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.6705882352941176), __.float(0.9882352941176471), __.int(1));\n        color.fuchsia400 = __.FM.float_4_1_1_1_1(__.float(0.9098039215686274), __.float(0.4745098039215686), __.float(0.9764705882352941), __.int(1));\n        color.fuchsia500 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.27450980392156865), __.float(0.9372549019607843), __.int(1));\n        color.fuchsia600 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.14901960784313725), __.float(0.8274509803921568), __.int(1));\n        color.fuchsia700 = __.FM.float_4_1_1_1_1(__.float(0.6352941176470588), __.float(0.10980392156862745), __.float(0.6862745098039216), __.int(1));\n        color.fuchsia800 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.09803921568627451), __.float(0.5607843137254902), __.int(1));\n        color.fuchsia900 = __.FM.float_4_1_1_1_1(__.float(0.4392156862745098), __.float(0.10196078431372549), __.float(0.4588235294117647), __.int(1));\n        color.fuchsia950 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.01568627450980392), __.float(0.3058823529411765), __.int(1));\n        color.pink50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9490196078431372), __.float(0.9725490196078431), __.int(1));\n        color.pink100 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.9058823529411765), __.float(0.9529411764705882), __.int(1));\n        color.pink200 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.8117647058823529), __.float(0.9098039215686274), __.int(1));\n        color.pink300 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.6588235294117647), __.float(0.8313725490196079), __.int(1));\n        color.pink400 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.4470588235294118), __.float(0.7137254901960784), __.int(1));\n        color.pink500 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.2823529411764706), __.float(0.6), __.int(1));\n        color.pink600 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.15294117647058825), __.float(0.4666666666666667), __.int(1));\n        color.pink700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.09411764705882353), __.float(0.36470588235294116), __.int(1));\n        color.pink800 = __.FM.float_4_1_1_1_1(__.float(0.615686274509804), __.float(0.09019607843137255), __.float(0.30196078431372547), __.int(1));\n        color.pink900 = __.FM.float_4_1_1_1_1(__.float(0.5137254901960784), __.float(0.09411764705882353), __.float(0.2627450980392157), __.int(1));\n        color.pink950 = __.FM.float_4_1_1_1_1(__.float(0.3137254901960784), __.float(0.027450980392156862), __.float(0.1411764705882353), __.int(1));\n        color.rose50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9450980392156862), __.float(0.9490196078431372), __.int(1));\n        color.rose100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.8941176470588236), __.float(0.9019607843137255), __.int(1));\n        color.rose200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.803921568627451), __.float(0.8274509803921568), __.int(1));\n        color.rose300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.6431372549019608), __.float(0.6862745098039216), __.int(1));\n        color.rose400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.44313725490196076), __.float(0.5215686274509804), __.int(1));\n        color.rose500 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.24705882352941178), __.float(0.3686274509803922), __.int(1));\n        color.rose600 = __.FM.float_4_1_1_1_1(__.float(0.8823529411764706), __.float(0.11372549019607843), __.float(0.2823529411764706), __.int(1));\n        color.rose700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.07058823529411765), __.float(0.23529411764705882), __.int(1));\n        color.rose800 = __.FM.float_4_1_1_1_1(__.float(0.6235294117647059), __.float(0.07058823529411765), __.float(0.2235294117647059), __.int(1));\n        color.rose900 = __.FM.float_4_1_1_1_1(__.float(0.5333333333333333), __.float(0.07450980392156863), __.float(0.21568627450980393), __.int(1));\n        color.rose950 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.0196078431372549), __.float(0.09803921568627451), __.int(1));\n        return color;\n    }());\n    exports.color = color;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_57436_color\\\\\",\\\\\"fields\\\\\":[[\\\\\"slate50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\"), color)\n    ;\n    function wrap2(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high)); }\n    exports.wrap2 = wrap2;\n    ;\n    function wrap3(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high)); }\n    exports.wrap3 = wrap3;\n    ;\n    function wrap4(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high), (0, std_math_1.wrap)(value[3], low, high)); }\n    exports.wrap4 = wrap4;\n    ;\n});\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/sdf.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/sdf.js\",\n        writeByteOrderMark: false,\n        text: `var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std_math_1, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.sdf = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var sdf = /** @class */ (function () {\n        function sdf(data) {\n        }\n        sdf.sphere = function (samplePosition, sphereCenter, radius) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.box = function (samplePosition, boxCenter, boxSize) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0);\n        };\n        sdf.roundBox = function (samplePosition, boxCenter, boxSize, cornerRadius) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var r = cornerRadius;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0) - r;\n        };\n        sdf.boxFrame = function (samplePosition, boxCenter, boxSize, frameThickness) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var b = boxSize;\n            var e = frameThickness;\n            p = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = b, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var q = (_f = (_h = (_j = p, _k = e, [_j[0] + _k, _j[1] + _k, _j[2] + _k]), [Math.abs(_h[0]), Math.abs(_h[1]), Math.abs(_h[2])]), _g = e, [_f[0] - _g, _f[1] - _g, _f[2] - _g]);\n            return (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(p, 'x'), __.swizzle(q, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(p[0], (0, std_math_1.max)(q[1], q[2])), 0.0), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(p, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(p[1], q[2])), 0.0)), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(q, 'y'), __.swizzle(p, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], p[2])), 0.0));\n        };\n        sdf.torus = function (samplePosition, torusCenter, torusSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var t = torusSize;\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), t[0]), __.swizzle(p, 'y'));\n            return (0, std_math_1.length)(q) - t[1];\n        };\n        sdf.cappedTorus = function (samplePosition, torusCenter, torusSize, ra, rb) {\n            var _a, _b, _c, _d, _e;\n            var p1 = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var p = __.makeVector(Math.abs(p1[0]), (_c = p1, [_c[1], _c[2]]));\n            var sc = torusSize;\n            var k = (sc[1] * p[0] > sc[0] * p[1]) ? (0, std_math_1.dot)((_d = p, [_d[0], _d[1]]), sc) : (0, std_math_1.length)((_e = p, [_e[0], _e[1]]));\n            return Math.sqrt((0, std_math_1.dot)(p, p) + ra * ra - 2.0 * ra * k) - rb;\n        };\n        sdf.link = function (samplePosition, linkCenter, linkLength, r1, r2) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = linkCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var le = linkLength;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'x'), (0, std_math_1.max)(Math.abs(p[1]) - le, 0.0), __.swizzle(p, 'z'));\n            return (0, std_math_1.length)(__.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = q, [_c[0], _c[1]])), r1), __.swizzle(q, 'z'))) - r2;\n        };\n        sdf.infinteCylinder = function (samplePosition, cylinderCenter, cylinderSize) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = cylinderSize;\n            return (0, std_math_1.length)((_c = (_e = p, [_e[0], _e[2]]), _d = (_f = c, [_f[0], _f[1]]), [_c[0] - _d[0], _c[1] - _d[1]])) - c[2];\n        };\n        sdf.cone = function (samplePosition, coneCenter, c, coneHeight) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = coneHeight;\n            // c is the sin/cos of the angle, h is height\n            // Alternatively pass q instead of (c,h),\n            // which is the point at the base in 2D\n            var q = (_c = h, _d = __.FM.float_2_1_1(__.div(c[0], c[1]), __.negate(1.0)), [_c * _d[0], _c * _d[1]]);\n            var w = __.FM.float_2_1_1((0, std_math_1.length)((_e = p, [_e[0], _e[2]])), __.swizzle(p, 'y'));\n            var a = (_f = w, _g = (_h = q, _j = (0, std_math_1.clamp)((0, std_math_1.dot)(w, q) / (0, std_math_1.dot)(q, q), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_f[0] - _g[0], _f[1] - _g[1]]);\n            var b = (_k = w, _l = (_m = q, _o = __.FM.float_2_1_1((0, std_math_1.clamp)(w[0] / q[0], 0.0, 1.0), __.float(1.0)), [_m[0] * _o[0], _m[1] * _o[1]]), [_k[0] - _l[0], _k[1] - _l[1]]);\n            var k = Math.sign(q[1]);\n            var d = (0, std_math_1.min)((0, std_math_1.dot)(a, a), (0, std_math_1.dot)(b, b));\n            var s = (0, std_math_1.max)(k * (w[0] * q[1] - w[1] * q[0]), k * (w[1] - q[1]));\n            return Math.sqrt(d) * Math.sign(s);\n        };\n        sdf.plane = function (samplePosition, planeCenter, planeNormal, planeHeight) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = planeCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var n = planeNormal;\n            var h = planeHeight;\n            // n must be normalized\n            return (0, std_math_1.dot)(p, n) + h;\n        };\n        sdf.hexPrism = function (samplePosition, hexCenter, hexSize) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = hexCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = hexSize;\n            var k = __.FM.float_3_1_1_1(__.negate(0.8660254), __.float(0.5), __.float(0.57735));\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var dddd = (0, std_math_1.min)((0, std_math_1.dot)((_d = k, [_d[0], _d[1]]), (_e = p, [_e[0], _e[1]])), 0.0) * 2.0;\n            p = (_f = p, _g = __.FM.float_3_2_1(__.mul(dddd, (_h = k, [_h[0], _h[1]])), __.float(0.0)), [_f[0] - _g[0], _f[1] - _g[1], _f[2] - _g[2]]);\n            var d = __.FM.float_2_1_1(__.mul((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[1]]), _k = __.FM.float_2_1_1((0, std_math_1.clamp)(p[0], (__.FM.negate_1(k[2])) * h[0], k[2] * h[0]), __.swizzle(h, 'x')), [_j[0] - _k[0], _j[1] - _k[1]])), Math.sign(p[1] - h[0])), __.sub(p[2], h[1]));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.triPrism = function (samplePosition, triCenter, triSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = triCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = triSize;\n            var q = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            return (0, std_math_1.max)(q[2] - h[1], (0, std_math_1.max)(q[0] * 0.866025 + p[1] * 0.5, (__.FM.negate_1(p[1]))) - h[0] * 0.5);\n        };\n        sdf.capsuleLine = function (samplePosition, lineStart, lineEnd, capsuleRadius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = capsuleRadius;\n            var pa = (_a = p, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var ba = (_c = b, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var h = (0, std_math_1.clamp)((0, std_math_1.dot)(pa, ba) / (0, std_math_1.dot)(ba, ba), 0.0, 1.0);\n            return (0, std_math_1.length)((_e = pa, _f = (_g = ba, _h = h, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r;\n        };\n        sdf.capsule = function (samplePosition, capsuleCenter, height, radius) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = capsuleCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var p = __.makeVector(p1[0], p1[1] - (0, std_math_1.clamp)(p1[1], 0.0, h), p1[2]);\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.cylinder = function (samplePosition, cylinderCenter, height, radius) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var d = (_c = (_e = __.FM.float_2_1_1((0, std_math_1.length)((_f = p, [_f[0], _f[2]])), __.swizzle(p, 'y')), [Math.abs(_e[0]), Math.abs(_e[1])]), _d = __.FM.float_2_1_1(r, h), [_c[0] - _d[0], _c[1] - _d[1]]);\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.cylinderLine = function (samplePosition, lineStart, lineEnd, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = radius;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var baba = (0, std_math_1.dot)(ba, ba);\n            var paba = (0, std_math_1.dot)(pa, ba);\n            var x = (0, std_math_1.length)((_e = (_g = pa, _h = baba, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), _f = (_j = ba, _k = paba, [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r * baba;\n            var y = Math.abs(paba - baba * 0.5) - baba * 0.5;\n            var x2 = x * x;\n            var y2 = y * y * baba;\n            var mxxy = (0, std_math_1.max)(x, y);\n            var d = (mxxy < 0.0) ? (__.FM.negate_1((0, std_math_1.min)(x2, y2))) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0));\n            return Math.sign(d) * Math.sqrt(Math.abs(d)) / baba;\n        };\n        sdf.roundedCylinder = function (samplePosition, cylinderCenter, cylinderRadius, cornerRadius, height) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b, _a[1] - _b, _a[2] - _b]);\n            var h = height;\n            var ra = cylinderRadius;\n            var rb = cornerRadius;\n            var d = __.FM.float_2_1_1(__.add((0, std_math_1.length)((_c = p, [_c[0], _c[2]])) - 2.0 * ra, rb), __.sub(Math.abs(p[1]), h));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0)) - rb;\n        };\n        sdf.cappedCone = function (samplePosition, coneCenter, height, r1, r2) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k1 = __.FM.float_2_1_1(r2, h);\n            var k2 = __.FM.float_2_1_1(__.sub(r2, r1), __.mul(2.0, h));\n            var ca = __.FM.float_2_1_1(__.sub(q[0], (0, std_math_1.min)(q[0], (q[1] < 0.0) ? r1 : r2)), __.sub(Math.abs(q[1]), h));\n            var cb = (_d = (_f = q, _g = k1, [_f[0] - _g[0], _f[1] - _g[1]]), _e = (_h = k2, _j = (0, std_math_1.clamp)((0, std_math_1.dot)((_k = k1, _l = q, [_k[0] - _l[0], _k[1] - _l[1]]), k2) / dot2(k2), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_d[0] + _e[0], _d[1] + _e[1]]);\n            var s = (__.and(cb[0] < 0.0, ca[1] < 0.0)) ? (__.FM.negate_1(1.0)) : 1.0;\n            return s * Math.sqrt((0, std_math_1.min)(dot2(ca), dot2(cb)));\n        };\n        sdf.solidAngle = function (samplePosition, solidCenter, size, radius) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = solidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = size;\n            var ra = radius;\n            // c is the sin/cos of the angle\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var l = (0, std_math_1.length)(q) - ra;\n            var m = (0, std_math_1.length)((_d = q, _e = (_f = c, _g = (0, std_math_1.clamp)((0, std_math_1.dot)(q, c), 0.0, ra), [_f[0] * _g, _f[1] * _g]), [_d[0] - _e[0], _d[1] - _e[1]]));\n            return (0, std_math_1.max)(l, m * Math.sign(c[1] * q[0] - c[0] * q[1]));\n        };\n        sdf.cutSphere = function (samplePosition, sphereCenter, radius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var s = (0, std_math_1.max)((h - r) * q[0] * q[0] + w * w * (h + r - 2.0 * q[1]), h * q[0] - w * q[1]);\n            return (s < 0.0) ? (0, std_math_1.length)(q) - r : (q[0] < w) ? h - q[1] : (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]]));\n        };\n        sdf.cutHollowSphere = function (samplePosition, sphereCenter, radius, height, thickness) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var h = height;\n            var t = thickness;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            return ((h * q[0] < w * q[1]) ? (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]])) : Math.abs((0, std_math_1.length)(q) - r)) - t;\n        };\n        sdf.roundCone = function (samplePosition, coneCenter, coneRadius, cornerRadius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r1 = coneRadius;\n            var r2 = cornerRadius;\n            // sampling independent computations (only depend on shape)\n            var b = (r1 - r2) / h;\n            var a = Math.sqrt(1.0 - b * b);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k = (0, std_math_1.dot)(q, __.FM.float_2_1_1(__.negate(b), a));\n            if (k < 0.0)\n                return (0, std_math_1.length)(q) - r1;\n            if (k > a * h)\n                return (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(__.float(0.0), h), [_d[0] - _e[0], _d[1] - _e[1]])) - r2;\n            return (0, std_math_1.dot)(q, __.FM.float_2_1_1(a, b)) - r1;\n        };\n        sdf.ellipsoid = function (samplePosition, center, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var k0 = (0, std_math_1.length)((_c = p, _d = r, [_c[0] / _d[0], _c[1] / _d[1], _c[2] / _d[2]]));\n            var k1 = (0, std_math_1.length)((_e = p, _f = (_g = r, _h = r, [_g[0] * _h[0], _g[1] * _h[1], _g[2] * _h[2]]), [_e[0] / _f[0], _e[1] / _f[1], _e[2] / _f[2]]));\n            return k0 * (k0 - 1.0) / k1;\n        };\n        sdf.rhombus = function (samplePosition, rhombusCenter, la, lb, height, ra) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var p = (_a = samplePosition, _b = rhombusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var b = __.FM.float_2_1_1(la, lb);\n            var f = (0, std_math_1.clamp)((ndot(b, (_d = b, _e = (_f = 2.0, _g = (_h = p, [_h[0], _h[2]]), [_f * _g[0], _f * _g[1]]), [_d[0] - _e[0], _d[1] - _e[1]]))) / (0, std_math_1.dot)(b, b), (__.FM.negate_1(1.0)), 1.0);\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[2]]), _k = (_m = (_p = 0.5, _q = b, [_p * _q[0], _p * _q[1]]), _o = __.FM.float_2_1_1(__.sub(1.0, f), __.add(1.0, f)), [_m[0] * _o[0], _m[1] * _o[1]]), [_j[0] - _k[0], _j[1] - _k[1]])) * Math.sign(p[0] * b[1] + p[2] * b[0] - b[0] * b[1]), ra), __.sub(p[1], h));\n            return (0, std_math_1.min)((0, std_math_1.max)(q[0], q[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(q, 0.0));\n        };\n        sdf.octahedron = function (samplePosition, center, size) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = size;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var m = p[0] + p[1] + p[2] - s;\n            var q = (_d = 0.0, [_d, _d, _d]);\n            if (3.0 * p[0] < m)\n                q = (_e = p, [_e[0], _e[1], _e[2]]);\n            else if (3.0 * p[1] < m)\n                q = (_f = p, [_f[1], _f[2], _f[0]]);\n            else if (3.0 * p[2] < m)\n                q = (_g = p, [_g[2], _g[0], _g[1]]);\n            else\n                return m * 0.57735027;\n            var k = (0, std_math_1.clamp)(0.5 * (q[2] - q[1] + s), 0.0, s);\n            return (0, std_math_1.length)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.add(q[1] - s, k), __.sub(q[2], k)));\n        };\n        sdf.pyramid = function (samplePosition, pyramidCenter, height) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = pyramidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var m2 = h * h + 0.25;\n            var p2 = __.makeVector(Math.abs(p1[0]), p1[1], Math.abs(p1[2]));\n            if (p1[2] > p1[0]) {\n                p2 = __.makeVector(p2[2], p2[1], p2[0]);\n            }\n            p2 = __.makeVector(p2[0] - 0.5, p2[1], p2[2] - 0.5);\n            var p = p2;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'z'), __.sub(h * p[1], 0.5 * p[0]), __.add(h * p[0], 0.5 * p[1]));\n            var s = (0, std_math_1.max)((__.FM.negate_1(q[0])), 0.0);\n            var t = (0, std_math_1.clamp)((q[1] - 0.5 * p[2]) / (m2 + 0.25), 0.0, 1.0);\n            var a = m2 * (q[0] + s) * (q[0] + s) + q[1] * q[1];\n            var b = m2 * (q[0] + 0.5 * t) * (q[0] + 0.5 * t) + (q[1] - m2 * t) * (q[1] - m2 * t);\n            var d2 = (0, std_math_1.min)(q[1], (__.FM.negate_1(q[0])) * m2 - q[1] * 0.5) > 0.0 ? 0.0 : (0, std_math_1.min)(a, b);\n            return Math.sqrt((d2 + q[2] * q[2]) / m2) * Math.sign((0, std_math_1.max)(q[2], (__.FM.negate_1(p[1]))));\n        };\n        sdf.udTriangle = function (samplePosition, a, b, c) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var ac = (_j = a, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var nor = (0, std_math_1.cross)(ba, ac);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ac, nor), pc)) < 2.0) ? (0, std_math_1.min)((0, std_math_1.min)(dot3((_o = (_q = ba, _r = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_q[0] * _r, _q[1] * _r, _q[2] * _r]), _p = pa, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])), dot3((_s = (_u = cb, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pb, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]]))), dot3((_w = (_y = ac, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(ac, pc) / dot3(ac), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pc, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        sdf.udQuad = function (samplePosition, a, b, c, d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var dc = (_j = d, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var ad = (_o = a, _p = d, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]]);\n            var pd = (_q = p, _r = d, [_q[0] - _r[0], _q[1] - _r[1], _q[2] - _r[2]]);\n            var nor = (0, std_math_1.cross)(ba, ad);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(dc, nor), pc)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ad, nor), pd)) < 3.0) ? (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.min)(dot3((_s = (_u = ba, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pa, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]])), dot3((_w = (_y = cb, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pb, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))), dot3((_0 = (_2 = dc, _3 = (0, std_math_1.clamp)((0, std_math_1.dot)(dc, pc) / dot3(dc), 0.0, 1.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), _1 = pc, [_0[0] - _1[0], _0[1] - _1[1], _0[2] - _1[2]]))), dot3((_4 = (_6 = ad, _7 = (0, std_math_1.clamp)((0, std_math_1.dot)(ad, pd) / dot3(ad), 0.0, 1.0), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), _5 = pd, [_4[0] - _5[0], _4[1] - _5[1], _4[2] - _5[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        /**\n            * Returns the intersection of two SDFs\n            * = max(a, b)\n            */\n        sdf.intersect = function (a, b) { return (0, std_math_1.max)(a, b); };\n        /**\n            * Returns the union of two SDFs\n            * = min(a, b)\n            */\n        sdf.union = function (a, b) { return (0, std_math_1.min)(a, b); };\n        sdf.subtract = function (a, b) { return (0, std_math_1.max)((__.FM.negate_1(a)), b); };\n        sdf.smoothIntersect = function (a, b, k) {\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(b, a, h) - k * h * (1.0 - h);\n        };\n        /**\n            * Smoothly joins two SDFs using blending distance k\n            */\n        sdf.smoothUnion = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, d1, h) - k * h * (1.0 - h);\n        };\n        sdf.smoothSubtract = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, (__.FM.negate_1(d1)), h) + k * h * (1.0 - h);\n        };\n        /**\n            * Blends between two SDFs using interpolation\n            */\n        sdf.blend = function (a, b, t) { return t * a + ((1 | 0) - t) * b; };\n        sdf.round = function (a, r) { return a - r; };\n        /**\n            * Carve out the interior of an SDF\n            */\n        sdf.onion = function (a, thickness) { return Math.abs(a) - thickness; };\n        sdf.grad = function (p, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var DELTA = 0.0001;\n            return _a = __.FM.float_3_1_1_1(__.sub(sampler((_c = p, _d = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]])), sampler((_e = p, _f = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]))), __.sub(sampler((_g = p, _h = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]])), sampler((_j = p, _k = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]))), __.sub(sampler((_l = p, _m = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]])), sampler((_o = p, _p = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])))), _b = (2.0 * DELTA), [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        /**\n            * Poorly returns the closest point on the surface of an SDF\n            * This is an inaccurate method\n            */\n        sdf.closest = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n            var sep = 0.0001;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var closest = position;\n            var initialDist = sampler(position);\n            var seed = (0 | 0);\n            for (var j = (0 | 0); j < (200 | 0); j++) {\n                var n = (_a = 0.0, [_a, _a, _a]);\n                var distSum = 0.0;\n                for (var i = zero; i < (4 | 0); i++) {\n                    var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                    var d = sampler((_h = closest, _j = (_k = e, _l = sep, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                    distSum = distSum + d;\n                    n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n                }\n                closest = (_r = (_t = (_v = (_x = (0, std_math_1.normalize)(n), _y = distSum, [_x[0] * _y, _x[1] * _y, _x[2] * _y]), _w = (__.FM.negate_1((1 | 0))), [_v[0] * _w, _v[1] * _w, _v[2] * _w]), _u = 4.0, [_t[0] / _u, _t[1] / _u, _t[2] / _u]), _s = closest, [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2]]);\n                if (distSum < 0.0001) {\n                    break;\n                }\n            }\n            return closest;\n        };\n        sdf.normal = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var h = 0.1;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var n = (_a = 0.0, [_a, _a, _a]);\n            var distSum = 0.0;\n            for (var i = zero; i < (4 | 0); i++) {\n                var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                var d = sampler((_h = position, _j = (_k = e, _l = h, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                distSum = distSum + d;\n                n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n            }\n            return (0, std_math_1.normalize)(n);\n        };\n        sdf.vizRings = function (d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            if (false) {\n                var color_1 = (_a = 1.0, _b = (_c = Math.sign(d), _d = __.FM.float_3_1_1_1(__.float(0.1), __.float(0.4), __.float(0.7)), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]);\n                color_1 = (_e = color_1, _f = 1.0 - Math.exp((__.FM.negate_1(4.0)) * Math.abs(d)), [_e[0] * _f, _e[1] * _f, _e[2] * _f]);\n                color_1 = (_g = color_1, _h = 0.8 + 0.2 * Math.cos(140.0 * d), [_g[0] * _h, _g[1] * _h, _g[2] * _h]);\n                color_1 = (0, std_math_1.lerp)(color_1, (_j = 1.0, [_j, _j, _j]), 1.0 - (0, std_math_1.smoothstep)(0.0, 0.015, Math.abs(d)));\n                return __.makeVector(color_1, 1.0);\n            }\n            else {\n                var size = (2 | 0);\n                var fadeDist = (100 | 0);\n                var v = (1 | 0) - (0, std_math_1.clamp)(d / fadeDist, (0 | 0), (1 | 0));\n                var color_2 = __.makeVector(0.4 * v, 0.6 * v, (1 | 0), (1 | 0));\n                var s = Math.sin(d / size);\n                if (Math.abs(d) < (1 | 0)) {\n                    return __.FM.float_4_4(__.swizzle((1 | 0), \"xyzw\"));\n                }\n                else {\n                    return d > (0 | 0) ? (_k = color_2, _l = Math.ceil((1 | 0) - s), [_k[0] * _l, _k[1] * _l, _k[2] * _l, _k[3] * _l]) : (_m = color_2, _o = Math.ceil(s), [_m[0] * _o, _m[1] * _o, _m[2] * _o, _m[3] * _o]);\n                }\n            }\n        };\n        sdf.march = function (position, direction, sampler) {\n            var _a, _b, _c, _d;\n            var maxDist = 100000.0;\n            var minDist = 1.0;\n            var dist = minDist;\n            for (var i = (0 | 0); __.and(i < (256 | 0), dist < maxDist); i++) {\n                var samp = sampler((_a = position, _b = (_c = direction, _d = dist, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]));\n                dist = dist + samp;\n                if (Math.abs(samp) < (0.00005 * dist)) {\n                    break;\n                }\n            }\n            if (dist > maxDist) {\n                dist = (__.FM.negate_1(1.0));\n            }\n            return dist;\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Infinitely repeats an SDF with space in between. This returns an updated position\n            *\n            * Example:\n            * \\`\\`\\`shadeup\n            *\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\n            * \\`\\`\\`\n            */\n        sdf.repeat = function (position, space) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (_e = (_f = p, _g = s, [_f[0] / _g[0], _f[1] / _g[1], _f[2] / _g[2]]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), [_c[0] * _d[0], _c[1] * _d[1], _c[2] * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Repeats an SDF with space in between upto the limit. This returns an updated position\n            *\n            * Example:\n            * \\`\\`\\`shadeup\n            *\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\n            * \\`\\`\\`\n            */\n        sdf.repeatLimited = function (position, space, limit) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (0, std_math_1.clamp)((_e = (_f = p, _g = s, [_f[0] / _g, _f[1] / _g, _f[2] / _g]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), (__.FM.negate_3(limit)), limit), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        sdf.prototype.clone = function () {\n            return new sdf({});\n        };\n        sdf.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_sdf_ts_1953_sdf\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return sdf;\n    }());\n    exports.sdf = sdf;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_sdf_ts_1953_sdf\\\\\",\\\\\"fields\\\\\":[]}\"), sdf)\n    ;\n    function dot2(v) { return (0, std_math_1.dot)(v, v); }\n    function dot3(v) { return (0, std_math_1.dot)(v, v); }\n    function ndot(a, b) { return a[0] * b[0] - a[1] * b[1]; }\n});\n/* impl sdf */\n`\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  },\n  \"/_std/geo.ts\": {\n    outputFiles: [\n      {\n        name: \"/_std/geo.js\",\n        writeByteOrderMark: false,\n        text: 'var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\\n}) : function(o, v) {\\n    o[\"default\"] = v;\\n});\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n    if (mod && mod.__esModule) return mod;\\n    var result = {};\\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\\n    __setModuleDefault(result, mod);\\n    return result;\\n};\\ndefine([\"require\", \"exports\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std___std_all_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    __ = __importStar(__);\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n    var GeoSegment = /** @class */ (function () {\\n        function GeoSegment(data) {\\n            var _a, _b, _c, _d, _e, _f;\\n            this.start = ((_a = data.start) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(0.0, 0.0));\\n            this.end = ((_b = data.end) !== null && _b !== void 0 ? _b : __.FM.float_2_1_1(0.0, 0.0));\\n            this.kind = ((_c = data.kind) !== null && _c !== void 0 ? _c : (0 | 0));\\n            this.arcRadius = ((_d = data.arcRadius) !== null && _d !== void 0 ? _d : 0.0);\\n            this.arcStart = ((_e = data.arcStart) !== null && _e !== void 0 ? _e : 0.0);\\n            this.arcEnd = ((_f = data.arcEnd) !== null && _f !== void 0 ? _f : 0.0);\\n        }\\n        GeoSegment.prototype.clone = function () {\\n            return new GeoSegment({\\n                start: (0, std___std_all_1.__deepClone)(this.start),\\n                end: (0, std___std_all_1.__deepClone)(this.end),\\n                kind: (0, std___std_all_1.__deepClone)(this.kind),\\n                arcRadius: (0, std___std_all_1.__deepClone)(this.arcRadius),\\n                arcStart: (0, std___std_all_1.__deepClone)(this.arcStart),\\n                arcEnd: (0, std___std_all_1.__deepClone)(this.arcEnd),\\n            });\\n        };\\n        GeoSegment.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\");\\n        };\\n        return GeoSegment;\\n    }());\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\"), GeoSegment)\\n    /**@shadeup=struct*/ var GeoPoly = /** @class */ (function () {\\n        function GeoPoly(data) {\\n            var _a;\\n            this.segments = ((_a = data.segments) !== null && _a !== void 0 ? _a : []);\\n        }\\n        GeoPoly.prototype.area = function () { return 0.0; };\\n        GeoPoly.prototype.perimeter = function () { return 0.0; };\\n        GeoPoly.prototype.discretize = function () { var shader_self_temp = this; return this.clone(); };\\n        GeoPoly.prototype.clone = function () {\\n            return new GeoPoly({\\n                segments: (0, std___std_all_1.__deepClone)(this.segments),\\n            });\\n        };\\n        GeoPoly.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\\\",\\\\\"fields\\\\\":[[\\\\\"segments\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\");\\n        };\\n        return GeoPoly;\\n    }());\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\\\",\\\\\"fields\\\\\":[[\\\\\"segments\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\"), GeoPoly)\\n});\\n/* impl GeoPoly */\\n'\n      }\n    ],\n    emitSkipped: false,\n    diagnostics: []\n  }\n};\nfunction countLines(str) {\n  let count2 = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === \"\\n\") {\n      count2++;\n    }\n  }\n  return count2;\n}\nfunction indexToRowColumn(str, index) {\n  let row = 0;\n  let column = 0;\n  for (let i = 0; i < index; i++) {\n    if (str[i] === \"\\n\") {\n      row++;\n      column = 0;\n    } else {\n      column++;\n    }\n  }\n  return { row, column };\n}\nfunction rowColumnToIndex(str, row, column) {\n  let index = 0;\n  let currentRow = 0;\n  let currentColumn = 0;\n  while (currentRow < row || currentColumn < column) {\n    if (str[index] === \"\\n\") {\n      currentRow++;\n      currentColumn = 0;\n    } else {\n      currentColumn++;\n    }\n    index++;\n  }\n  return index;\n}\nfunction getDiffRange(a, b) {\n  let diffs = diff(a, b);\n  if (diffs.length === 1) {\n    return null;\n  }\n  let startIndex = 0;\n  let oldEndIndex = a.length;\n  let newEndIndex = b.length;\n  let insertions = 0;\n  let deletions = 0;\n  let neutrals = 0;\n  for (let i = 0; i < diffs.length; i++) {\n    let diff2 = diffs[i];\n    if (diff2[0] === 1) {\n      insertions++;\n    } else if (diff2[0] === -1) {\n      deletions++;\n    } else if (diff2[0] === 0) {\n      neutrals++;\n    }\n    if (insertions > 1 || deletions > 1 || neutrals > 1) {\n      return null;\n    }\n  }\n  for (let i = 0; i < diffs.length; i++) {\n    let diff2 = diffs[i];\n    if (diff2[0] === 0) {\n      startIndex += diff2[1].length;\n    } else if (diff2[0] === -1) {\n      oldEndIndex = startIndex + diff2[1].length;\n      newEndIndex = startIndex;\n      break;\n    } else if (diff2[0] === 1) {\n      newEndIndex = startIndex + diff2[1].length;\n      oldEndIndex = startIndex;\n      break;\n    }\n  }\n  return {\n    startIndex,\n    oldEndIndex,\n    newEndIndex,\n    startPosition: indexToRowColumn(a, startIndex),\n    oldEndPosition: indexToRowColumn(a, oldEndIndex),\n    newEndPosition: indexToRowColumn(b, newEndIndex)\n  };\n}\nfunction getReplaceRange(a, b) {\n  let diffs = diff(a, b);\n  if (diffs.length === 1) {\n    return {\n      content: b,\n      range: {\n        start: 0,\n        length: a.length\n      }\n    };\n  }\n  let insertions = 0;\n  let deletions = 0;\n  let neutrals = 0;\n  for (let i = 0; i < diffs.length; i++) {\n    let diff2 = diffs[i];\n    if (diff2[0] === 1) {\n      insertions++;\n    } else if (diff2[0] === -1) {\n      deletions++;\n    } else if (diff2[0] === 0) {\n      neutrals++;\n    }\n    if (insertions > 1 || deletions > 1 || neutrals > 1) {\n      return {\n        content: b,\n        range: {\n          start: 0,\n          length: a.length\n        }\n      };\n    }\n  }\n  let startIndex = 0;\n  let oldEndIndex = a.length;\n  let newEndIndex = b.length;\n  for (let i = 0; i < diffs.length; i++) {\n    let diff2 = diffs[i];\n    if (diff2[0] === 0) {\n      startIndex += diff2[1].length;\n    } else if (diff2[0] === -1) {\n      oldEndIndex = startIndex + diff2[1].length;\n      newEndIndex = startIndex;\n    } else if (diff2[0] === 1) {\n      newEndIndex = startIndex + diff2[1].length;\n      break;\n    }\n  }\n  return {\n    content: b.substring(startIndex, newEndIndex),\n    range: {\n      start: startIndex,\n      length: oldEndIndex - startIndex\n    }\n  };\n}\nfunction getFunctionNodeName(node2, sourceFile) {\n  if (!sourceFile) {\n    sourceFile = node2.getSourceFile();\n  }\n  if (ts.isMethodDeclaration(node2)) {\n    let parentName = node2.parent && ts.isClassDeclaration(node2.parent) ? node2.parent.name?.getText() : \"not_class\";\n    return sourceFile.fileName + \":\" + parentName + \":\" + node2.name?.getText();\n  }\n  return sourceFile.fileName + \":\" + node2.name?.getText();\n}\nfunction canTypesBeCasted(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (a.startsWith(\"float\") && b.startsWith(\"int\") || a.startsWith(\"int\") && b.startsWith(\"float\")) {\n    let aSize = parseInt(a[a.length - 1]);\n    let bSize = parseInt(b[b.length - 1]);\n    if (aSize == bSize) {\n      return true;\n    }\n  }\n  return false;\n}\nclass ShadeupEnvironment {\n  constructor(opts) {\n    this.files = [];\n    this.parser = null;\n    this.tsEnv = null;\n    this.loads = /* @__PURE__ */ new Map();\n    this.libraries = /* @__PURE__ */ new Set();\n    this.assetMappings = /* @__PURE__ */ new Map();\n    this.validationDiagnostics = /* @__PURE__ */ new Map();\n    this.graphValidationDiagnostics = /* @__PURE__ */ new Map();\n    this.options = {\n      esnext: false\n    };\n    this.emitLogs = true;\n    this.stdEmitCache = /* @__PURE__ */ new Map();\n    if (opts) {\n      this.options = opts;\n    }\n  }\n  async init() {\n    this.parser = await getShadeupParser();\n    this.tsEnv = await makeTypescriptEnvironment(this);\n    {\n      for (let k of Object.keys(quickCache)) {\n        this.stdEmitCache.set(k, quickCache[k]);\n      }\n    }\n  }\n  setAssetMapping(assets) {\n    console.log(\"Set asset mapping\", assets);\n    this.assetMappings = new Map(assets);\n  }\n  print(...args) {\n    if (this.emitLogs) {\n      console.log(...args);\n    }\n  }\n  reset() {\n    this.tagGraph = new TagGraph();\n    for (let f of this.files) {\n      if (f.path == \"/file.ts\" || f.path.startsWith(\"/_std/\"))\n        continue;\n      this.tsEnv.system.$fsMap.delete(f.path);\n    }\n    this.files = [];\n    this.validationDiagnostics.clear();\n    this.graphValidationDiagnostics.clear();\n  }\n  /**\n   * Wipes out the tagGraph and rebuilds all  and tags\n   */\n  applyTags() {\n    let checker = this.tsEnv?.env.languageService.getProgram().getTypeChecker();\n    let files2 = this.tsEnv.env.languageService.getProgram().getSourceFiles();\n    this.tagGraph = new TagGraph();\n    for (let file of files2) {\n      ts.forEachChild(file, (node2) => {\n        if (ts.isFunctionDeclaration(node2) || ts.isMethodDeclaration(node2)) {\n          let name = getFunctionNodeName(node2);\n          this.tagGraph.addNode(name, node2);\n          let tags = findShadeupTags(node2);\n          for (let tag of tags) {\n            this.tagGraph.addTag(name, tag);\n          }\n        }\n        if (ts.isClassDeclaration(node2)) {\n          ts.forEachChild(node2, (child) => {\n            if (ts.isMethodDeclaration(child)) {\n              let name = getFunctionNodeName(child);\n              this.tagGraph.addNode(name, child);\n              let tags = findShadeupTags(child);\n              for (let tag of tags) {\n                this.tagGraph.addTag(name, tag);\n              }\n            }\n          });\n        }\n      });\n    }\n    const visitNode = (node2) => {\n      if (ts.isCallExpression(node2)) {\n        let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = checker.getAliasedSymbol(exprSmybol);\n        }\n        if (exprSmybol) {\n          let funcDeclar = exprSmybol.getDeclarations()?.[0];\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            let referencedFunctionName = getFunctionNodeName(funcDeclar);\n            let callingFunction = closest(\n              node2,\n              (n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n)\n            );\n            if (callingFunction && (ts.isFunctionDeclaration(callingFunction) || ts.isMethodDeclaration(callingFunction))) {\n              let callingFunctionName = getFunctionNodeName(callingFunction);\n              this.tagGraph.addEdge(referencedFunctionName, callingFunctionName);\n            }\n          }\n        }\n      }\n      ts.forEachChild(node2, visitNode);\n    };\n    for (let file of files2) {\n      ts.forEachChild(file, (node2) => {\n        if (ts.isFunctionDeclaration(node2) || ts.isMethodDeclaration(node2)) {\n          ts.forEachChild(node2, visitNode);\n        }\n        if (ts.isClassDeclaration(node2)) {\n          ts.forEachChild(node2, (child) => {\n            if (ts.isMethodDeclaration(child)) {\n              ts.forEachChild(child, visitNode);\n            }\n          });\n        }\n      });\n    }\n    this.tagGraph.propagateTags();\n  }\n  async regenerate(filePath) {\n    if (!this.tsEnv) {\n      throw new Error(\"Typescript environment not initialized\");\n    }\n    let addedFiles = /* @__PURE__ */ new Set();\n    this.graphValidationDiagnostics.clear();\n    let now = performance.now();\n    let outputs = [];\n    this.applyTags();\n    this.print(\"Tagged in \", performance.now() - now, \"ms\");\n    now = performance.now();\n    let checker = this.tsEnv.env.languageService.getProgram().getTypeChecker();\n    const addFile = (path) => {\n      if (this.stdEmitCache.has(path)) {\n        outputs.push(this.stdEmitCache.get(path));\n        return;\n      }\n      if (addedFiles.has(path)) {\n        return;\n      }\n      console.log(\"Adding file \", path);\n      addedFiles.add(path);\n      let sourceFile = this.files.find((f) => f.path === path);\n      let shaders = this.renderShaders(path);\n      if (sourceFile) {\n        sourceFile.shaders = shaders;\n      }\n      let out = this.tsEnv?.env.languageService.getEmitOutput(path);\n      if (out) {\n        let sf = this.tsEnv.env.getSourceFile(path);\n        if (sourceFile) {\n          this.graphValidationDiagnostics.set(path, validateGraph(this, sourceFile, sf, checker));\n          let outputCode = this.mixInShaders(sourceFile, out?.outputFiles[0].text);\n          out.outputFiles[0].text = outputCode;\n        }\n        if (sf) {\n          out.outputFiles[0].text = this.mixInStructs(sf, out.outputFiles[0].text);\n        }\n        if (this.loads.has(path)) {\n          let jsOut = `__shadeup_register_loads(${JSON.stringify(\n            this.loads.get(path).map((p) => {\n              return this.assetMappings.get(p) || p;\n            })\n          )});`;\n          out.outputFiles[0].text = jsOut + out.outputFiles[0].text;\n        }\n        if (this.libraries.size > 0) {\n          let jsOut = `__shadeup_register_libs(${JSON.stringify(Array.from(this.libraries))});`;\n          out.outputFiles[0].text = jsOut + out.outputFiles[0].text;\n        }\n        if (path.startsWith(\"/_std/\") || path == \"/file.ts\" || path == \"/std_math.ts\" || path == \"/static-math.ts\" || path == \"/std___std_all.ts\" || path == \"/std.ts\") {\n          this.stdEmitCache.set(path, out);\n        }\n        outputs.push(out);\n      }\n    };\n    const addDir = (path) => {\n      let files2 = this.tsEnv?.system.readDirectory(path);\n      if (files2) {\n        for (let f of files2) {\n          let dirExists = this.tsEnv?.system.directoryExists(path + f);\n          if (dirExists) {\n            addDir(path + f.replace(/^\\//, \"\") + \"/\");\n          } else {\n            if (f.endsWith(\".d.ts\"))\n              continue;\n            let p = path + f.replace(/^\\//, \"\");\n            try {\n              addFile(p);\n            } catch (e) {\n              console.error(e);\n            }\n          }\n        }\n      }\n    };\n    if (filePath) {\n      await Promise.all(\n        filePath.map(async (f) => {\n          let sourceFile = this.tsEnv.env.getSourceFile(f);\n          if (sourceFile) {\n            let refs = this.tsEnv.env.languageService.getFileReferences(f);\n            for (let dep of refs) {\n              let shadeupFile = this.files.find((f2) => f2.path === dep.fileName);\n              if (shadeupFile) {\n                await this.writeFile(\n                  shadeupFile.path,\n                  shadeupFile.content,\n                  this.stdEmitCache.has(shadeupFile.path)\n                );\n                try {\n                  addFile(dep.fileName);\n                } catch (e) {\n                  console.error(e);\n                }\n              }\n            }\n            try {\n              addFile(f);\n            } catch (e) {\n              console.error(e);\n            }\n          }\n        })\n      );\n    } else {\n      addDir(\"/\");\n    }\n    let s = outputs.map(\n      (o) => o.outputFiles.map((oo) => ({\n        path: oo.name,\n        contents: oo.text\n      }))\n    ).flat();\n    this.print(\"Regenerated in\", performance.now() - now, \"ms\");\n    return s;\n  }\n  mixInShaders(file, code) {\n    let finalPass = code;\n    for (let pair of file.shaders) {\n      let shader = pair.glsl;\n      let params = [];\n      let paramsTyped = [];\n      for (let param of Object.keys(shader.locals)) {\n        let u = shader.locals[param];\n        params.push(`_ext_uniform_local_${param}: ${param}`);\n        paramsTyped.push(`_ext_uniform_local_${param}: ${JSON.stringify(u)}`);\n      }\n      for (let param of Object.keys(shader.globals)) {\n        let u = shader.globals[param];\n        params.push(\n          `_ext_uniform_global_${param}: globalVarGet(\"${cleanName(u.fileName)}\", \"${param}\")`\n        );\n        paramsTyped.push(`_ext_uniform_global_${param}: ${JSON.stringify(u.structure)}`);\n      }\n      finalPass = `__shadeup_gen_shader(\"${shader.key}\", {\n\t\t\t\t\twebgl: {${paramsTyped.join(\", \")}},\n\t\t\t\t\twebgpu: ${JSON.stringify({\n        attributeInput: pair.wgsl.attributeInput,\n        attributeOutput: pair.wgsl.attributeOutput,\n        locals: pair.wgsl.locals,\n        globals: pair.wgsl.globals\n      })}\n\t\t\t\t}, {webgpu: \\`${pair.wgsl.source}\\`,webgl:\\`${pair.glsl.source}\\`, software: () => {}}, ${JSON.stringify(shader.sourceMapping)});\n\n` + finalPass;\n    }\n    if (file.path === \"/main.ts\") {\n      this.print(\"Final pass\", finalPass);\n    }\n    return finalPass;\n  }\n  mixInStructs(root, code) {\n    let finalPass = code;\n    let structs = [];\n    walkNodes(root, (node2) => {\n      if (ts.isClassDeclaration(node2)) {\n        if (hasShadeupDocTag(node2, \"struct\")) {\n          let structName = node2.name?.getText() ?? \"Unknown\";\n          let struct = {\n            name: structName,\n            fields: []\n          };\n          for (let member of node2.members) {\n            if (ts.isPropertyDeclaration(member)) {\n              let name = member.name.getText();\n              let type2 = member.type?.getText() ?? \"any\";\n              struct.fields.push({\n                name,\n                type: type2\n              });\n            }\n          }\n          structs.push(struct);\n        }\n      }\n    });\n    let sBlocks = [];\n    for (let struct of structs) {\n      sBlocks.push(\n        `__shadeup_register_struct(\"${struct.name}\", {${JSON.stringify(struct.fields)}});`\n      );\n    }\n    return finalPass;\n  }\n  errors(files2) {\n    if (!this.tsEnv) {\n      throw new Error(\"Typescript environment not initialized\");\n    }\n    let now = performance.now();\n    let all = [];\n    for (let f of this.files) {\n      if (files2) {\n        if (!files2.includes(f.path)) {\n          continue;\n        }\n      }\n      let errors2 = this.tsEnv.env.languageService.getSemanticDiagnostics(f.path);\n      let syntacticErrors = this.tsEnv.env.languageService.getSyntacticDiagnostics(f.path);\n      all.push(\n        ...[...errors2, ...syntacticErrors].filter((e) => {\n          if (e.code == 2345) {\n            let parsed = /Argument of type '(.*)' is not assignable to parameter of type '(.*).*'/.exec(\n              typeof e.messageText == \"string\" ? e.messageText : e.messageText.messageText\n            );\n            if (parsed) {\n              let [_, from, to] = parsed;\n              if (canTypesBeCasted(from, to)) {\n                return false;\n              }\n            }\n          } else if (e.code == 2339) {\n            let msgText = typeof e.messageText == \"string\" ? e.messageText : e.messageText.messageText;\n            if (msgText.startsWith(\"Property '__index' does not exist on type '\")) {\n              return false;\n            }\n          } else if (e.code == 2705) {\n            let msgText = typeof e.messageText == \"string\" ? e.messageText : e.messageText.messageText;\n            if (msgText.startsWith(\n              \"An async function or method in ES5/ES3 requires the 'Promise' constructor.\"\n            )) {\n              return false;\n            }\n          }\n          return true;\n        }).map((e) => this.transformTSError(f, e))\n      );\n      let validationDiagnostics = this.validationDiagnostics.get(f.path) ?? [];\n      all.push(...validationDiagnostics.map((e) => this.transformTSError(f, e)));\n      let graphValidationDiagnostics = this.graphValidationDiagnostics.get(f.path) ?? [];\n      all.push(...graphValidationDiagnostics.map((e) => this.transformTSError(f, e)));\n    }\n    this.print(\"Got errors in\", performance.now() - now, \"ms\");\n    return all;\n  }\n  completions(path, pos) {\n    if (!this.tsEnv) {\n      throw new Error(\"Typescript environment not initialized\");\n    }\n    let file = this.files.find((f) => f.path === path);\n    if (!file) {\n      throw new Error(\"File not found\");\n    }\n    let source = file.transpiled;\n    indexToRowColumn(source, pos);\n    let backTransform = reverseLookupIndexMappingCursor(file.mapping, pos);\n    let fp = this.tsEnv.env.getSourceFile(path);\n    console.log(fp.getFullText());\n    console.log(\n      fp.getFullText().substring(0, backTransform) + \"^\" + fp.getFullText().substring(backTransform)\n    );\n    let completions = this.tsEnv.env.languageService.getCompletionsAtPosition(\n      path,\n      backTransform,\n      {\n        includeExternalModuleExports: true,\n        includeInsertTextCompletions: true,\n        includeCompletionsForModuleExports: true,\n        includeCompletionsWithInsertText: true,\n        includeInlayVariableTypeHints: true,\n        includeCompletionsWithClassMemberSnippets: true,\n        includeCompletionsWithSnippetText: true,\n        includeAutomaticOptionalChainCompletions: true,\n        includeCompletionsForImportStatements: true,\n        useLabelDetailsInCompletionEntries: true,\n        includeInlayPropertyDeclarationTypeHints: true\n      },\n      {}\n    );\n    if (!completions) {\n      return [];\n    }\n    let entries = [];\n    let maxCompletions = 100;\n    for (let c2 of completions.entries) {\n      if (entries.length >= maxCompletions) {\n        break;\n      }\n      let range2 = null;\n      if (c2.replacementSpan) {\n        let startOffset = c2.replacementSpan.start;\n        let endOffset = c2.replacementSpan.start + c2.replacementSpan.length;\n        let offsetRangeReal = lookupIndexMappingRange(file.mapping, startOffset, endOffset);\n        let start = indexToRowColumn(file.content, offsetRangeReal.start);\n        let end = indexToRowColumn(file.content, offsetRangeReal.end);\n        range2 = {\n          startLineNumber: start.row + 1,\n          startColumn: start.column + 1,\n          endLineNumber: end.row + 1,\n          endColumn: end.column + 1\n        };\n      }\n      entries.push({\n        range: range2,\n        completion: c2,\n        details: this.tsEnv.env.languageService.getCompletionEntryDetails(\n          path,\n          backTransform,\n          c2.name,\n          {},\n          c2.source,\n          {},\n          c2.data\n        )\n      });\n    }\n    console.log(entries);\n    return entries;\n  }\n  classifications(path) {\n    if (!this.tsEnv) {\n      throw new Error(\"Typescript environment not initialized\");\n    }\n    let file = this.files.find((f) => f.path === path);\n    if (!file) {\n      throw new Error(\"File not found\");\n    }\n    this.tsEnv.env.getSourceFile(path);\n    this.tsEnv.env.languageService.getProgram().getTypeChecker();\n    let ranges = [];\n    for (let symbolRange of file.parsedFlatSymbolMap) {\n      let offsetRangeReal = reverseLookupIndexMappingRange(\n        file.mapping,\n        symbolRange.startIndex,\n        symbolRange.endIndex\n      );\n      if (offsetRangeReal.start != 0 && offsetRangeReal.end < file.transpiled.length - 1 && isFinite(offsetRangeReal.start) && isFinite(offsetRangeReal.end)) {\n        let info = this.tsEnv.env.languageService.getQuickInfoAtPosition(\n          path,\n          offsetRangeReal.start\n        );\n        if (info) {\n          let backRange = lookupIndexMappingRange(\n            file.mapping,\n            info.textSpan.start,\n            info.textSpan.start + info.textSpan.length\n          );\n          let kind = info.kind;\n          const funcMatch = /^\\(alias\\)\\s+[^(]+\\(/i;\n          if (kind == \"alias\") {\n            let fullStr = \"\";\n            let isNew = false;\n            for (let p of info.displayParts) {\n              fullStr += p.text;\n              if (p.kind == \"keyword\" && (p.text == \"class\" || p.text == \"new\")) {\n                kind = ts.ScriptElementKind.classElement;\n                if (p.text == \"new\") {\n                  isNew = true;\n                }\n              }\n              if (p.kind == \"keyword\" && p.text == \"namespace\") {\n                kind = ts.ScriptElementKind.classElement;\n              }\n              if (p.kind == \"keyword\" && p.text == \"type\") {\n                kind = ts.ScriptElementKind.classElement;\n              }\n            }\n            if (!isNew && funcMatch.test(fullStr)) {\n              kind = ts.ScriptElementKind.functionElement;\n            }\n          }\n          ranges.push([backRange.start, backRange.end, kind]);\n        }\n      }\n    }\n    return {\n      ranges\n    };\n  }\n  hover(path, pos) {\n    if (!this.tsEnv) {\n      throw new Error(\"Typescript environment not initialized\");\n    }\n    let file = this.files.find((f) => f.path === path);\n    if (!file) {\n      throw new Error(\"File not found\");\n    }\n    let source = file.transpiled;\n    indexToRowColumn(source, pos);\n    let backTransform = reverseLookupIndexMappingCursor(file.mapping, pos);\n    this.tsEnv.env.getSourceFile(path);\n    let hovers = this.tsEnv.env.languageService.getQuickInfoAtPosition(path, backTransform);\n    if (!hovers) {\n      return null;\n    }\n    let startOffset = hovers.textSpan.start;\n    let endOffset = hovers.textSpan.start + hovers.textSpan.length;\n    let offsetRangeReal = lookupIndexMappingRange(file.mapping, startOffset, endOffset);\n    let start = indexToRowColumn(file.content, offsetRangeReal.start);\n    let end = indexToRowColumn(file.content, offsetRangeReal.end);\n    hovers.range = {\n      startLineNumber: start.row + 1,\n      startColumn: start.column + 1,\n      endLineNumber: end.row + 1,\n      endColumn: end.column + 1\n    };\n    return hovers;\n  }\n  getFileErrorData(f, estart, eend) {\n    let file = this.files.find((f2) => f2.path === f.path);\n    if (!file) {\n      return {\n        file: f,\n        source: f.getFullText(),\n        start: estart,\n        end: eend\n      };\n    }\n    let start = indexToRowColumn(file.transpiled, estart ?? 0);\n    let realStart = file.map?.originalPositionFor({ column: start.column, line: start.row + 1 });\n    let end = indexToRowColumn(file.transpiled, eend);\n    let realEnd = file.map?.originalPositionFor({ column: end.column, line: end.row + 1 });\n    let startIndex = realStart?.line && realStart?.column ? rowColumnToIndex(file.content, realStart?.line, realStart?.column) : 0;\n    let endIndex = realEnd?.line && realEnd?.column ? rowColumnToIndex(file.content, realEnd?.line, realEnd?.column) : 0;\n    startIndex = lookupIndexMapping(file.mapping, estart ?? 0);\n    endIndex = lookupIndexMapping(file.mapping, eend);\n    let o = lookupIndexMappingRange(file.mapping, estart ?? 0, eend);\n    startIndex = o.start;\n    endIndex = o.end;\n    return {\n      file,\n      source: file.content,\n      start: startIndex,\n      end: endIndex\n    };\n  }\n  transformTSError(file, error) {\n    if (error.file === void 0) {\n      return {\n        error,\n        file: file.path,\n        message: error.messageText.toString()\n      };\n    }\n    const printReal = true;\n    let { source, start, end } = this.getFileErrorData(\n      error.file,\n      error.start ?? 0,\n      (error.start ?? 0) + (error.length ?? 0)\n    );\n    {\n      start = error.start ?? 0;\n      end = (error.start ?? 0) + (error.length ?? 0);\n    }\n    let categorymapping = {\n      [ts.DiagnosticCategory.Error]: ReportKind.Error,\n      [ts.DiagnosticCategory.Warning]: ReportKind.Warning,\n      [ts.DiagnosticCategory.Message]: ReportKind.Advice,\n      [ts.DiagnosticCategory.Suggestion]: ReportKind.Advice\n    };\n    let r = Report.build(categorymapping[error.category], file.path, start).with_code(error.code);\n    if (typeof error.messageText === \"string\") {\n      r = r.with_message(error.messageText);\n    }\n    function addMessage(msgObj) {\n      if (typeof msgObj === \"string\") {\n        r = r.with_label(\n          Label.from([file.path, Range.new(start, Math.max(start, end))]).with_message(msgObj)\n        );\n      } else {\n        r = r.with_label(\n          Label.from([file.path, Range.new(start, Math.max(start, end))]).with_message(\n            nicerError(msgObj)\n          )\n        );\n        for (let d of msgObj.next ?? []) {\n          addMessage(d);\n        }\n      }\n    }\n    if (typeof error.messageText === \"string\") {\n      addMessage(nicerError(error));\n    } else {\n      addMessage(error.messageText);\n    }\n    for (let d of error.relatedInformation ?? []) {\n      let relatedRange = { start: d.start ?? 0, end: (d.start ?? 0) + (d.length ?? 0) };\n      if (typeof d.messageText === \"string\") {\n        r.with_label(\n          Label.from([\n            file.path,\n            Range.new(relatedRange.start, Math.max(relatedRange.start, relatedRange.end))\n          ]).with_message(nicerError(d))\n        );\n      } else {\n        for (let d2 of d.messageText.next ?? []) {\n          addMessage(d2);\n        }\n      }\n    }\n    let rf = r.finish();\n    let writer = mkStringWriter();\n    try {\n      rf.printTo(\n        [file.path, Source.from(printReal ? error.file.text : source)],\n        writer\n      );\n    } catch (e) {\n      this.print(e);\n    }\n    let ansi_up2 = new AnsiUp();\n    let msg = writer.unwrap();\n    if (typeof process === \"undefined\" || typeof process.stdout === \"undefined\") {\n      msg = ansi_up2.ansi_to_html(msg);\n    }\n    return {\n      error,\n      file: file.path,\n      message: msg\n    };\n  }\n  async translateSource(file, range2 = null) {\n    if (!this.parser) {\n      throw new Error(\"Parser not initialized\");\n    }\n    let now = performance.now();\n    if (range2)\n      file.oldTree?.edit(range2);\n    let f = this.parser.parse(file.content, range2 ? file.oldTree ?? void 0 : void 0);\n    if (file.oldTree) {\n      let nowTree = performance.now();\n      file.oldTree.getChangedRanges(f);\n      this.print(\"Got edited range in\", performance.now() - nowTree, \"ms\");\n    }\n    this.print(\"Parsed in\", performance.now() - now, \"ms\");\n    file.oldTree = f;\n    file.parsedFlatSymbolMap = this.extractFlatSymbolMap(f.rootNode);\n    now = performance.now();\n    try {\n      let ctx = new AstContext(\"file:///\" + file.path);\n      prePass(ctx, f.rootNode);\n      let compiled = compile(ctx, f.rootNode);\n      file.parseDiagnostics = ctx.diagnostics.map((d) => ({\n        message: d.message,\n        startIndex: d.node.startIndex,\n        endIndex: d.node.endIndex\n      }));\n      this.print(\"Compiled in\", performance.now() - now, \"ms\");\n      now = performance.now();\n      let ss = {\n        str: \"\",\n        indexMapping: []\n      };\n      compiled.toString(ss);\n      this.print(\"Rendered with source map in \", performance.now() - now, \"ms\");\n      this.print(\"---- Translated ----\");\n      file.transpiled = ss.str;\n      now = performance.now();\n      file.mapping = ss.indexMapping;\n      this.print(\"Created source map consumer in\", performance.now() - now, \"ms\");\n    } catch (e) {\n      console.error(\"Error while compiling\", e);\n      this.print(f.rootNode.toString());\n    }\n  }\n  extractFlatSymbolMap(rootNode) {\n    let symbols = [];\n    let stack = [rootNode];\n    while (stack.length > 0) {\n      let node2 = stack.pop();\n      if (node2.type === \"identifier\" || node2.type === \"property_identifier\" || node2.type === \"type_identifier\") {\n        symbols.push({\n          startIndex: node2.startIndex,\n          endIndex: node2.endIndex\n        });\n      }\n      for (let c2 of node2.children) {\n        stack.push(c2);\n      }\n    }\n    return symbols;\n  }\n  async writeFile(path, content, ignoreValidate = false) {\n    if (!ignoreValidate)\n      console.log(\"Writing\", path);\n    let now = performance.now();\n    let file = this.files.find((f) => f.path === path);\n    let oldContent = \"\";\n    if (!file) {\n      this.files.push({\n        path,\n        content,\n        transpiled: \"\",\n        shaders: [],\n        map: null,\n        oldTree: null,\n        mapping: [],\n        parseDiagnostics: [],\n        parsedFlatSymbolMap: []\n      });\n      file = this.files[this.files.length - 1];\n    } else {\n      oldContent = file.content;\n      file.content = content;\n    }\n    let nowDiff = performance.now();\n    let r = getDiffRange(oldContent, content);\n    this.print(\n      \"Source code diff took\",\n      performance.now() - nowDiff,\n      \"ms\",\n      \"with\",\n      countLines(content),\n      \"lines\"\n    );\n    let getNow = performance.now();\n    this.print(\"Get source file took\", performance.now() - getNow, \"ms\");\n    await this.translateSource(file, r);\n    let sf = this.tsEnv?.env.getSourceFile(path);\n    if (sf) {\n      nowDiff = performance.now();\n      let r2 = getReplaceRange(sf.text, file.transpiled);\n      this.print(\n        \"TypeScript code diff took\",\n        performance.now() - nowDiff,\n        \"ms\",\n        \"with\",\n        countLines(sf.text),\n        \"lines\"\n      );\n      let updateNow = performance.now();\n      this.print(\"Replacing\", r2.range, \"with\", r2.content.length, \"chars\");\n      this.tsEnv?.env.updateFile(path, r2.content, r2.range);\n      this.print(\"Update took\", performance.now() - updateNow, \"ms\");\n      let finalText = this.tsEnv.env.getSourceFile(path)?.text;\n      if (finalText !== file.transpiled) {\n        console.error(\"Final text does not match transpiled text\");\n      }\n    } else {\n      this.tsEnv?.env.createFile(path, file.transpiled);\n    }\n    this.print(\"---- Took\", performance.now() - now, \"ms ----\");\n    this.print(\"\");\n    if (!ignoreValidate) {\n      let sourceFile = this.tsEnv?.env.getSourceFile(path);\n      if (sourceFile) {\n        let program = this.tsEnv?.env.languageService.getProgram();\n        let checker = program?.getTypeChecker();\n        if (checker) {\n          this.validationDiagnostics.set(path, validate(file, sourceFile, checker));\n        }\n      }\n    }\n  }\n  async writeFileTypescript(path, content) {\n    this.print(\"Writing\", path);\n    let now = performance.now();\n    let sf = this.tsEnv?.env.getSourceFile(path);\n    if (sf) {\n      let nowDiff = performance.now();\n      let r = getReplaceRange(sf.text, content);\n      this.print(sf.text.substring(r.range.start, r.range.start + r.range.length), r.content);\n      this.print(\n        \"TypeScript code diff took\",\n        performance.now() - nowDiff,\n        \"ms\",\n        \"with\",\n        countLines(sf.text),\n        \"lines\"\n      );\n      let updateNow = performance.now();\n      this.print(\"Replacing\", r.range, \"with\", r.content.length, \"chars\");\n      this.tsEnv?.env.updateFile(path, r.content, r.range);\n      this.print(\"Update took\", performance.now() - updateNow, \"ms\");\n      let finalText = this.tsEnv.env.getSourceFile(path)?.text;\n      this.print(finalText);\n      if (finalText !== content) {\n        console.error(\"Final text does not match input text\");\n      }\n    } else {\n      this.tsEnv?.env.createFile(path, content);\n    }\n    this.print(\"---- Took\", performance.now() - now, \"ms ----\");\n    this.print(\"\");\n  }\n  addDiagnostic(path, diagnostic) {\n    if (!this.validationDiagnostics.has(path)) {\n      this.validationDiagnostics.set(path, []);\n    }\n    this.validationDiagnostics.get(path)?.push(diagnostic);\n  }\n  printNodeLocation(n) {\n    let sf = n.getSourceFile();\n    let file = this.files.find((f) => f.path === sf.fileName);\n    if (!file) {\n      return \"internal\";\n    } else {\n      let mapping = lookupIndexMappingRange(file.mapping, n.getStart(), n.getEnd());\n      let loc = indexToRowColumn(file.content, mapping.start);\n      return `${sf.fileName}:${loc.row + 1}:${loc.column + 1}`;\n    }\n  }\n  renderShaders(path) {\n    let shaders = [];\n    this.tsEnv?.env.getSourceFile(path);\n    let program = this.tsEnv?.env.languageService.getProgram();\n    if (!program) {\n      return [];\n    }\n    let checker = program?.getTypeChecker();\n    if (!checker) {\n      return [];\n    }\n    for (let sourceFile of program?.getSourceFiles() ?? []) {\n      if (sourceFile.fileName === path) {\n        walkNodes(sourceFile, (node2) => {\n          if (ts.isCallExpression(node2) && node2.expression.getText() == \"makeShader\") {\n            let lhsType = checker?.getTypeAtLocation(node2.getChildAt(0));\n            let sig = lhsType?.getCallSignatures();\n            if (sig && sig[0] && sig[0].getDeclaration()) {\n              let declaration = sig[0].getDeclaration();\n              if (hasShadeupDocTag(declaration, \"shader\")) {\n                let isComputeShader = false;\n                let computeShaderSize = [0, 0, 0];\n                let parentNode = node2.parent;\n                if (parentNode && ts.isAsExpression(parentNode) && parentNode.parent && ts.isCallExpression(parentNode.parent)) {\n                  if (parentNode.parent.arguments.length === 2) {\n                    isComputeShader = true;\n                    let lastChildArg = parentNode.parent.arguments[1];\n                    if (ts.isArrayLiteralExpression(lastChildArg)) {\n                      let elements = lastChildArg.elements;\n                      if (elements.length === 3) {\n                        computeShaderSize = [\n                          parseInt(elements[0].getText().replace(/[^\\d]/g, \"\")),\n                          parseInt(elements[1].getText().replace(/[^\\d]/g, \"\")),\n                          parseInt(elements[2].getText().replace(/[^\\d]/g, \"\"))\n                        ];\n                      }\n                    }\n                  }\n                }\n                checker?.getTypeAtLocation(declaration);\n                if (node2.arguments.length === 2) {\n                  if (ts.isStringLiteral(node2.arguments[0])) {\n                    let key = node2.arguments[0].text;\n                    try {\n                      let glslShader = addGLSLShader(\n                        key,\n                        node2.arguments[1],\n                        checker,\n                        this,\n                        isComputeShader,\n                        computeShaderSize\n                      );\n                      let wgslShader = addWGSLShader(\n                        key,\n                        node2.arguments[1],\n                        checker,\n                        this,\n                        isComputeShader,\n                        computeShaderSize\n                      );\n                      if (glslShader && wgslShader) {\n                        shaders.push({\n                          glsl: glslShader,\n                          wgsl: wgslShader\n                        });\n                      }\n                    } catch (e) {\n                      console.error(e);\n                      if (e instanceof GLSLCompilationError) {\n                        this.addDiagnostic(path, {\n                          file: e.node.getSourceFile(),\n                          code: 0,\n                          messageText: e.message + \" (this is being used in the shader defined at \" + this.printNodeLocation(node2) + \")\",\n                          category: ts.DiagnosticCategory.Error,\n                          start: e.node.getStart(),\n                          length: 2\n                        });\n                        this.addDiagnostic(path, {\n                          file: node2.getSourceFile(),\n                          code: 0,\n                          messageText: \"this shader has an error in its code (\" + e.message + \" at \" + this.printNodeLocation(e.node) + \")\",\n                          category: ts.DiagnosticCategory.Error,\n                          start: node2.getStart(),\n                          length: node2.getEnd() - node2.getStart()\n                        });\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        });\n      }\n    }\n    return shaders;\n  }\n  patchFile(path, content, start, length) {\n  }\n}\nfunction walkNodes(node2, cb) {\n  cb(node2);\n  node2.forEachChild((n) => walkNodes(n, cb));\n}\nfunction hasShadeupDocTag(node2, tagName) {\n  return ts.getJSDocTags(node2).some((tag) => tag.tagName.text === \"shadeup\" && tag.comment === \"=\" + tagName);\n}\nconst std = \"export { ui } from '/_std/ui';\\r\\nexport { mesh, Mesh } from '/_std/mesh';\\r\\nexport { sdf } from '/_std/sdf';\\r\\nexport { geo } from '/_std/geo';\\r\\nexport * from '/_std/native';\\r\\n\";\nconst ui = \"import { getShadeupLocalContext } from '/_std/context';\\r\\n\\r\\nexport namespace ui {\\r\\n\texport function puck(position: float2): float2 {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_PUCK(position);\\r\\n\t}\\r\\n\\r\\n\texport function draggable(position: float2, radius: float = 10): float2 {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_PUCK(position, radius, true);\\r\\n\t}\\r\\n\\r\\n\texport function textbox(value: string): string {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('textbox', value);\\r\\n\t}\\r\\n\\r\\n\texport function slider(value: float, min: float, max: float): float {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_SLIDER(value, { min, max });\\r\\n\t}\\r\\n\\r\\n\texport function label(text: string): void {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('label', text);\\r\\n\t}\\r\\n\\r\\n\texport function checkbox(value: bool): bool {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('checkbox', value);\\r\\n\t}\\r\\n\\r\\n\texport function combo(value: string, options: string[]): string {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('combo', value, { options });\\r\\n\t}\\r\\n\\r\\n\texport function group(text: string): void {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('group', text);\\r\\n\t}\\r\\n\\r\\n\texport function button(text: string): bool {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('button', false, { text });\\r\\n\t}\\r\\n\\r\\n\texport function pop(): void {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('pop');\\r\\n\t}\\r\\n}\\r\\n\";\nconst native = `import { float4, float3, float, float2, bool, int } from '/std_math';\\r\nimport { texture2d } from '/_std/texture';\\r\nimport { Camera, Camera2d, quat } from '/_std/common';\\r\nimport { getShadeupLocalContext } from '/_std/context';\\r\n\\r\nexport function shadeupMakeTextureFromUrl(url: string): texture2d<float4> {\\r\n\treturn getShadeupLocalContext()['shadeupMakeTextureFromUrlNative'](url);\\r\n}\\r\n\\r\nexport class FrameContext {\\r\n\t/** Delta between the previous frame's time and this frame (in seconds */\\r\n\tdeltaTime: float;\\r\n\t/** Current time in seconds from the start of the renderer */\\r\n\ttime: float;\\r\n\t/** Canvas size in pixels */\\r\n\tscreenSize: float2;\\r\n\t/** Current frame index */\\r\n\tframe: int;\\r\n\\r\n\t/** Mouse/touch screen input state for this frame */\\r\n\tmouse: MouseInputState = new MouseInputState();\\r\n\\r\n\t/** Keyboard input state for this frame */\\r\n\tkeyboard: KeyboardInputState = new KeyboardInputState();\\r\n\\r\n\t/** Controllable camera (Hold right click and use WASD to move) */\\r\n\tcamera: Camera = new Camera();\\r\n\\r\n\tcamera2d: Camera2d = new Camera2d();\\r\n\\r\n\tconfigureCamera(options: {\\r\n\t\tmode?: 'free' | 'orbit' | 'orbit-free';\\r\n\\r\n\t\tspinning?: boolean;\\r\n\\r\n\t\tinitialPosition?: float3;\\r\n\t\tinitialPitch?: float;\\r\n\t\tinitialYaw?: float;\\r\n\\r\n\t\tspeed?: float;\\r\n\\r\n\t\torbitTarget?: float3;\\r\n\t\torbitDistance?: float;\\r\n\t\torbitPitch?: float;\\r\n\t\torbitYaw?: float;\\r\n\t\torbitMinDistance?: float;\\r\n\t\torbitMaxDistance?: float;\\r\n\t\torbitMinPitch?: float;\\r\n\t\torbitMaxPitch?: float;\\r\n\t}) {}\\r\n\\r\n\t/**\\r\n\t * Use external values from the host JavaScript environment.\\r\n\t */\\r\n\tinput<T>(key: string, defaultValue: T): T {\\r\n\t\treturn defaultValue;\\r\n\t}\\r\n\\r\n\t/**\\r\n\t * Send values to the host JavaScript environment.\\r\n\t */\\r\n\toutput<T>(key: string, value: T) {}\\r\n}\\r\n\\r\nexport class MouseInputState {\\r\n\t/** Current mouse position relative to canvas in pixels ((0, 0) is the top left */\\r\n\tscreen: float2;\\r\n\t/** Current mouse position mapped from 0-1 in canvas space ((0, 0) is the top left while (1, 1) is the bottom right */\\r\n\tuv: float2;\\r\n\t/** Caches the mouse position relative to canvas in pixels when any mouse button is pressed (resets after subsequent presses */\\r\n\tstartScreen: float2;\\r\n\t/** Caches the mouse position mapped from 0-1 in canvas space when any mouse button is pressed (resets after subsequent presses */\\r\n\tstartUv: float2;\\r\n\t/** If dragging, this will be the delta between the start and current mouse position */\\r\n\tdeltaUv: float2;\\r\n\t/** If dragging, this will be the delta between the mouse position last frame and the current mouse position */\\r\n\tframeDeltaUv: float2;\\r\n\t/** If dragging, this will be the delta between the start and current mouse position */\\r\n\tdeltaScreen: float2;\\r\n\t/** If dragging, this will be the delta between the mouse position last frame and the current mouse position */\\r\n\tframeDeltaScreen: float2;\\r\n\t/** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\\r\n\tbutton: [boolean, boolean, boolean] = [false, false, false];\\r\n\t/** Mouse button pressed state for buttons 0-3 (left, middle, right) */\\r\n\tclicked: [boolean, boolean, boolean] = [false, false, false];\\r\n\t/** If currently dragging */\\r\n\tdragging: bool;\\r\n\t/** Accumulated mouse wheel movement for this frame in the range of -1 to 1 */\\r\n\twheel: float;\\r\n\t/** Rate of change */\\r\n\tvelocity: float;\\r\n\t/** Is the mouse focused within the screen */\\r\n\tfocused: bool;\\r\n}\\r\n\\r\nexport class KeyboardInputState {\\r\n\t/** Is key down this frame */\\r\n\tbackspace: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\ttab: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tenter: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tshiftLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tshiftRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcontrolLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcontrolRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\taltLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\taltRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tpause: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcapsLock: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tescape: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tspace: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tpageUp: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tpageDown: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tend: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\thome: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowUp: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowDown: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tprintScreen: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tinsert: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdelete: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit0: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit1: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit2: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit3: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit4: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit5: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit6: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit7: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit8: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit9: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyA: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyB: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyC: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyD: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyE: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyF: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyG: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyH: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyI: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyJ: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyK: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyL: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyM: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyN: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyO: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyP: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyQ: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyR: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyS: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyT: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyU: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyV: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyW: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyX: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyY: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyZ: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tmetaLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tmetaRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcontextMenu: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad0: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad1: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad2: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad3: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad4: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad5: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad6: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad7: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad8: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad9: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadMultiply: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadAdd: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadSubtract: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadDecimal: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadDivide: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf1: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf2: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf3: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf4: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf5: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf6: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf7: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf8: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf9: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf10: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf11: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf12: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumLock: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tscrollLock: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tsemicolon: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tequal: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcomma: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tminus: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tperiod: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tslash: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbackquote: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbracketLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbackslash: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbracketRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tquote: bool;\\r\n\\r\n\t/** Key pressed, triggered once until released  */ pressedBackspace: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedTab: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEnter: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedShiftLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedShiftRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedControlLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedControlRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedAltLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedAltRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPause: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedCapsLock: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEscape: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedSpace: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPageUp: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPageDown: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEnd: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedHome: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowUp: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowDown: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPrintScreen: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedInsert: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDelete: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit0: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit1: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit2: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit3: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit4: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit5: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit6: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit7: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit8: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit9: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyA: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyB: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyC: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyD: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyE: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyF: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyG: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyH: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyI: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyJ: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyK: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyL: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyM: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyN: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyO: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyP: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyQ: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyR: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyS: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyT: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyU: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyV: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyW: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyX: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyY: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyZ: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedMetaLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedMetaRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedContextMenu: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad0: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad1: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad2: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad3: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad4: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad5: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad6: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad7: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad8: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad9: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadMultiply: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadAdd: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadSubtract: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadDecimal: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadDivide: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF1: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF2: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF3: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF4: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF5: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF6: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF7: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF8: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF9: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF10: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF11: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF12: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumLock: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedScrollLock: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedSemicolon: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEqual: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedComma: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedMinus: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPeriod: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedSlash: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBackquote: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBracketLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBackslash: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBracketRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedQuote: bool;\\r\n\t/** 2D vector that encodes the arrow keys and WASD aligned with the screen (e.g. up arrow = (0, -1)) */\\r\n\tarrowVector: float2;\\r\n}\\r\n\\r\ndeclare global {\\r\n\tconst env: FrameContext;\\r\n}\\r\n`;\nconst buffer = \"import { getValueSize } from '../engine/adapters/webgpu';\\r\\nimport { getShadeupLocalContext } from '/_std/context';\\r\\nimport {\\r\\n\tfloat4,\\r\\n\tfloat3,\\r\\n\tfloat,\\r\\n\tfloat2,\\r\\n\tbool,\\r\\n\tint,\\r\\n\tint2,\\r\\n\tint3,\\r\\n\tint4,\\r\\n\tuint,\\r\\n\tuint2,\\r\\n\tuint3,\\r\\n\tuint4,\\r\\n\tatomic,\\r\\n\tintifyVector\\r\\n} from '/std_math';\\r\\n\\r\\nlet __ = { intifyVector };\\r\\n\\r\\nexport class buffer_internal<T> {\\r\\n\t__opaque_buffer: true = true;\\r\\n\\r\\n\tstructArray: T[] | null = null;\\r\\n\tfloatArray: Float32Array | null = null;\\r\\n\tintArray: Int32Array | null = null;\\r\\n\tuintArray: Uint32Array | null = null;\\r\\n\tarrayBuffer: ArrayBuffer | null = null;\\r\\n\tvectorSize: int = 0;\\r\\n\ttypeName: string;\\r\\n\\r\\n\tplatformPayload: any = null;\\r\\n\tadapter: any = null;\\r\\n\\r\\n\tdirty: boolean = false;\\r\\n\tpendingWrites: number = 0;\\r\\n\tcpuReadDirty: boolean = false;\\r\\n\tcpuWriteDirty: boolean = false;\\r\\n\\r\\n\telementCount: int = 0;\\r\\n\telementBytes: int = 0;\\r\\n\tstructured: boolean = false;\\r\\n\\r\\n\tfastIndex: (index: int) => T;\\r\\n\tfastIndexAssign: (index: int, value: T) => void;\\r\\n\\r\\n\tdestroy() {\\r\\n\t\tthis.adapter.destroyBuffer(this);\\r\\n\t}\\r\\n\\r\\n\t[index: number]: T;\\r\\n\\r\\n\t__index(index: int | uint): T {\\r\\n\t\t// this.download();\\r\\n\t\t// return this.fastIndex(index);\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t__index_assign(index: int | uint, value: T): void {\\r\\n\t\t// this.download();\\r\\n\t\t// this.cpuWriteDirty = true;\\r\\n\t\t// this.fastIndexAssign(index, value);\\r\\n\t}\\r\\n\\r\\n\t__index_assign_op(op_fn: (a: T, b: T) => T, index: int | uint, value: T): void {\\r\\n\t\t// this.download();\\r\\n\t\t// this.cpuWriteDirty = true;\\r\\n\t\t// this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\\r\\n\t}\\r\\n\\r\\n\tlen() {\\r\\n\t\treturn this.elementCount;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t * Returns the underlying cpu buffer as a typed array.\\r\\n\t *\\r\\n\t * > [!NOTE]\\r\\n\t * > This is considerably faster than using the raw index [] operator.\\r\\n\t *\\r\\n\t * > [!NOTE]\\r\\n\t * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\\r\\n\t *\\r\\n\t * ```shadeup\\r\\n\t * let buf = buffer<uint>();\\r\\n\t * let data = buf.getData();\\r\\n\t *\\r\\n\t * for (let i = 0; i < data.length; i += 4) {\\r\\n\t * \t// Do something with data[i]\\r\\n\t * }\\r\\n\t * ```\\r\\n\t */\\r\\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array | T[] {\\r\\n\t\tif (this.structured) {\\r\\n\t\t\treturn this.structArray!;\\r\\n\t\t} else {\\r\\n\t\t\treturn this.floatArray ?? this.intArray ?? this.uintArray ?? new Uint8Array(0);\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\twrite(other: buffer_internal<T>) {\\r\\n\t\tif (!this.adapter) return;\\r\\n\\r\\n\t\tthis.adapter.copyBufferToBuffer(other, this);\\r\\n\t}\\r\\n\\r\\n\twatchMutation: boolean = false;\\r\\n\\r\\n\t/** @shadeup=tag(async) @shadeup=noemit_gpu */\\r\\n\tasync download() {\\r\\n\t\tif (!this.adapter) return;\\r\\n\\r\\n\t\tif (this.pendingWrites > 0) {\\r\\n\t\t\tgetShadeupLocalContext().flushAdapter();\\r\\n\t\t}\\r\\n\\r\\n\t\tif (this.cpuReadDirty) {\\r\\n\t\t\tthis.cpuReadDirty = false;\\r\\n\t\t\tawait this.adapter.downloadBuffer(this);\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tdownloadAsync(): Promise<void> {\\r\\n\t\treturn this['download']();\\r\\n\t}\\r\\n\\r\\n\t/** @shadeup=noemit_gpu */\\r\\n\tupload(): void {\\r\\n\t\tif (!this.adapter) return;\\r\\n\\r\\n\t\tif (this.cpuWriteDirty) {\\r\\n\t\t\tthis.cpuWriteDirty = false;\\r\\n\t\t\tthis.adapter.uploadBuffer(this);\\r\\n\t\t}\\r\\n\t}\\r\\n\tsymbol: Symbol = Symbol();\\r\\n\\r\\n\tconstructor(size: int, typeName: string, structure: any) {\\r\\n\t\tthis.adapter = getShadeupLocalContext().shadeupGetGraphicsAdapter();\\r\\n\t\tthis.typeName = typeName;\\r\\n\t\tif (structure) {\\r\\n\t\t\tif (structure.name && !structure.name.startsWith('atomic')) {\\r\\n\t\t\t\tthis.typeName = structure.name;\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t\tthis.elementCount = size;\\r\\n\t\tthis.elementBytes = 4;\\r\\n\t\tif (\\r\\n\t\t\ttypeName == 'float4' ||\\r\\n\t\t\ttypeName == 'float3' ||\\r\\n\t\t\ttypeName == 'float2' ||\\r\\n\t\t\ttypeName == 'float'\\r\\n\t\t) {\\r\\n\t\t\tthis.vectorSize = 1;\\r\\n\\r\\n\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\treturn this.floatArray![index] as T;\\r\\n\t\t\t};\\r\\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\tthis.floatArray![index] = value as float;\\r\\n\t\t\t};\\r\\n\\r\\n\t\t\tif (typeName == 'float4') {\\r\\n\t\t\t\tthis.vectorSize = 4;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn float4(\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4 + 1],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4 + 2],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4 + 3]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float4) => {\\r\\n\t\t\t\t\tthis.floatArray![index * 4] = value[0];\\r\\n\t\t\t\t\tthis.floatArray![index * 4 + 1] = value[1];\\r\\n\t\t\t\t\tthis.floatArray![index * 4 + 2] = value[2];\\r\\n\t\t\t\t\tthis.floatArray![index * 4 + 3] = value[3];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'float3') {\\r\\n\t\t\t\tthis.vectorSize = 3;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn float3(\\r\\n\t\t\t\t\t\tthis.floatArray![index * 3],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 3 + 1],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 3 + 2]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float3) => {\\r\\n\t\t\t\t\tthis.floatArray![index * 3] = value[0];\\r\\n\t\t\t\t\tthis.floatArray![index * 3 + 1] = value[1];\\r\\n\t\t\t\t\tthis.floatArray![index * 3 + 2] = value[2];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\t\t\tif (typeName == 'float2') {\\r\\n\t\t\t\tthis.vectorSize = 2;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn float2(this.floatArray![index * 2], this.floatArray![index * 2 + 1]) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float2) => {\\r\\n\t\t\t\t\tthis.floatArray![index * 2] = value[0];\\r\\n\t\t\t\t\tthis.floatArray![index * 2 + 1] = value[1];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\t\t\tthis.floatArray = new Float32Array(size * this.vectorSize);\\r\\n\t\t\tthis.arrayBuffer = this.floatArray.buffer;\\r\\n\t\t} else if (\\r\\n\t\t\ttypeName == 'int4' ||\\r\\n\t\t\ttypeName == 'int3' ||\\r\\n\t\t\ttypeName == 'int2' ||\\r\\n\t\t\ttypeName == 'int'\\r\\n\t\t) {\\r\\n\t\t\tthis.vectorSize = 1;\\r\\n\\r\\n\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\treturn this.intArray![index] as T;\\r\\n\t\t\t};\\r\\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\tthis.intArray![index] = value as int;\\r\\n\t\t\t};\\r\\n\\r\\n\t\t\tif (typeName == 'int4') {\\r\\n\t\t\t\tthis.vectorSize = 4;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn int4(\\r\\n\t\t\t\t\t\tthis.intArray![index * 4],\\r\\n\t\t\t\t\t\tthis.intArray![index * 4 + 1],\\r\\n\t\t\t\t\t\tthis.intArray![index * 4 + 2],\\r\\n\t\t\t\t\t\tthis.intArray![index * 4 + 3]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int4) => {\\r\\n\t\t\t\t\tthis.intArray![index * 4] = value[0];\\r\\n\t\t\t\t\tthis.intArray![index * 4 + 1] = value[1];\\r\\n\t\t\t\t\tthis.intArray![index * 4 + 2] = value[2];\\r\\n\t\t\t\t\tthis.intArray![index * 4 + 3] = value[3];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'int3') {\\r\\n\t\t\t\tthis.vectorSize = 3;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn int3(\\r\\n\t\t\t\t\t\tthis.intArray![index * 3],\\r\\n\t\t\t\t\t\tthis.intArray![index * 3 + 1],\\r\\n\t\t\t\t\t\tthis.intArray![index * 3 + 2]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int3) => {\\r\\n\t\t\t\t\tthis.intArray![index * 3] = value[0];\\r\\n\t\t\t\t\tthis.intArray![index * 3 + 1] = value[1];\\r\\n\t\t\t\t\tthis.intArray![index * 3 + 2] = value[2];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'int2') {\\r\\n\t\t\t\tthis.vectorSize = 2;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn int2(this.intArray![index * 2], this.intArray![index * 2 + 1]) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int2) => {\\r\\n\t\t\t\t\tthis.intArray![index * 2] = value[0];\\r\\n\t\t\t\t\tthis.intArray![index * 2 + 1] = value[1];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tthis.intArray = new Int32Array(size * this.vectorSize);\\r\\n\t\t\tthis.arrayBuffer = this.intArray.buffer;\\r\\n\t\t} else if (\\r\\n\t\t\ttypeName == 'uint4' ||\\r\\n\t\t\ttypeName == 'uint3' ||\\r\\n\t\t\ttypeName == 'uint2' ||\\r\\n\t\t\ttypeName == 'uint'\\r\\n\t\t) {\\r\\n\t\t\tthis.vectorSize = 1;\\r\\n\\r\\n\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\treturn this.uintArray![index] as T;\\r\\n\t\t\t};\\r\\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\tthis.uintArray![index] = value as uint;\\r\\n\t\t\t};\\r\\n\\r\\n\t\t\tif (typeName == 'uint4') {\\r\\n\t\t\t\tthis.vectorSize = 4;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn uint4(\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4 + 1],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4 + 2],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4 + 3]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint4) => {\\r\\n\t\t\t\t\tthis.uintArray![index * 4] = value[0];\\r\\n\t\t\t\t\tthis.uintArray![index * 4 + 1] = value[1];\\r\\n\t\t\t\t\tthis.uintArray![index * 4 + 2] = value[2];\\r\\n\t\t\t\t\tthis.uintArray![index * 4 + 3] = value[3];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'uint3') {\\r\\n\t\t\t\tthis.vectorSize = 3;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn uint3(\\r\\n\t\t\t\t\t\tthis.uintArray![index * 3],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 3 + 1],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 3 + 2]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint3) => {\\r\\n\t\t\t\t\tthis.uintArray![index * 3] = value[0];\\r\\n\t\t\t\t\tthis.uintArray![index * 3 + 1] = value[1];\\r\\n\t\t\t\t\tthis.uintArray![index * 3 + 2] = value[2];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'uint2') {\\r\\n\t\t\t\tthis.vectorSize = 2;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn uint2(this.uintArray![index * 2], this.uintArray![index * 2 + 1]) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint2) => {\\r\\n\t\t\t\t\tthis.uintArray![index * 2] = value[0];\\r\\n\t\t\t\t\tthis.uintArray![index * 2 + 1] = value[1];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tthis.uintArray = new Uint32Array(size * this.vectorSize);\\r\\n\t\t\tthis.arrayBuffer = this.uintArray.buffer;\\r\\n\t\t} else {\\r\\n\t\t\tthis.structured = true;\\r\\n\\r\\n\t\t\tif (typeName.startsWith('atomic<')) {\\r\\n\t\t\t\t// this.structArray = new Array<T>(size);\\r\\n\t\t\t\tthis.arrayBuffer = new ArrayBuffer(size * 4);\\r\\n\\r\\n\t\t\t\tthis.watchMutation = true;\\r\\n\t\t\t\tthis.vectorSize = 1;\\r\\n\t\t\t\tthis.elementBytes = 4;\\r\\n\t\t\t\tthis.elementCount = size;\\r\\n\t\t\t\tfor (let i = 0; i < size; i++) {\\r\\n\t\t\t\t\t// this.structArray[i] = atomic(0) as T;\\r\\n\t\t\t\t}\\r\\n\t\t\t\tif (typeName == 'atomic<uint>') {\\r\\n\t\t\t\t\tthis.uintArray = new Uint32Array(this.arrayBuffer);\\r\\n\t\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\t\treturn atomic(this.uintArray![index]) as T;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\t\t\tthis.uintArray![index] = value.__value as any;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t} else {\\r\\n\t\t\t\t\tthis.intArray = new Int32Array(this.arrayBuffer);\\r\\n\t\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\t\treturn atomic(this.intArray![index]) as T;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\t\t\tthis.intArray![index] = value.__value as any;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t}\\r\\n\t\t\t} else {\\r\\n\t\t\t\tlet elementSize = this.adapter.getValueSize(structure);\\r\\n\t\t\t\tlet realSize = elementSize * size;\\r\\n\t\t\t\tthis.elementCount = size;\\r\\n\t\t\t\tthis.elementBytes = elementSize;\\r\\n\t\t\t\tthis.arrayBuffer = new ArrayBuffer(realSize);\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn this.adapter.readStructuredBuffer(\\r\\n\t\t\t\t\t\tstructure,\\r\\n\t\t\t\t\t\tthis.arrayBuffer,\\r\\n\t\t\t\t\t\tindex * elementSize\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\t\tthis.cpuWriteDirty = true;\\r\\n\t\t\t\t\tthis.adapter.writeStructuredBuffer(\\r\\n\t\t\t\t\t\tstructure,\\r\\n\t\t\t\t\t\tvalue,\\r\\n\t\t\t\t\t\tthis.arrayBuffer,\\r\\n\t\t\t\t\t\tindex * (elementSize / 4)\\r\\n\t\t\t\t\t);\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\t(this.__index as any) = (index: int): T => {\\r\\n\t\t\t// await this.download();\\r\\n\t\t\tif (this.watchMutation) {\\r\\n\t\t\t\tlet data = this.fastIndex(index);\\r\\n\t\t\t\t(data as any).$mutate = (to?: T) => {\\r\\n\t\t\t\t\tthis.cpuWriteDirty = true;\\r\\n\t\t\t\t\tif (to !== undefined) {\\r\\n\t\t\t\t\t\tif (this.intArray) {\\r\\n\t\t\t\t\t\t\tthis.intArray[index] = to as any;\\r\\n\t\t\t\t\t\t} else {\\r\\n\t\t\t\t\t\t\tthis.uintArray![index] = to as any;\\r\\n\t\t\t\t\t\t}\\r\\n\t\t\t\t\t}\\r\\n\t\t\t\t};\\r\\n\t\t\t\treturn data;\\r\\n\t\t\t} else {\\r\\n\t\t\t\treturn this.fastIndex(index);\\r\\n\t\t\t}\\r\\n\t\t};\\r\\n\\r\\n\t\tthis.__index_assign = (index: int, value: T): void => {\\r\\n\t\t\t// await this.download();\\r\\n\t\t\tthis.cpuWriteDirty = true;\\r\\n\t\t\tthis.fastIndexAssign(index, value);\\r\\n\t\t};\\r\\n\\r\\n\t\tthis.__index_assign_op = (op_fn: (a: T, b: T) => T, index: int, value: T): void => {\\r\\n\t\t\t// await this.download();\\r\\n\t\t\tthis.cpuWriteDirty = true;\\r\\n\\r\\n\t\t\tthis.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\\r\\n\t\t};\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport type buffer<T> = buffer_internal<T>;\\r\\n\\r\\n/**\\r\\n * Creates a new buffer.\\r\\n * ```shadeup\\r\\n * let buf = buffer<float>(100);\\r\\n *\\r\\n * ```\\r\\n */\\r\\nexport function buffer<T>(data: T[], typeName: string, structure?: object): buffer<T>;\\r\\nexport function buffer<T>(size: int, typeName: string, structure?: object): buffer<T>;\\r\\nexport function buffer<T>(e1: any, typeName: string, structure?: object): buffer<T> {\\r\\n\tif (typeof e1 === 'number') {\\r\\n\t\tlet size = e1;\\r\\n\t\tlet buf = new buffer_internal<T>(size, typeName, structure!);\\r\\n\t\treturn buf;\\r\\n\t} else {\\r\\n\t\tlet data = e1;\\r\\n\t\tlet buf = new buffer_internal<T>(data.length, typeName, structure!);\\r\\n\t\tfor (let i = 0; i < data.length; i++) {\\r\\n\t\t\tbuf.fastIndexAssign(i, data[i]);\\r\\n\t\t}\\r\\n\t\treturn buf;\\r\\n\t}\\r\\n}\\r\\n\";\nconst texture = \"import {\\r\\n\tfloat4,\\r\\n\tfloat3,\\r\\n\tfloat,\\r\\n\tfloat2,\\r\\n\tbool,\\r\\n\tint,\\r\\n\tint2,\\r\\n\tint3,\\r\\n\tint4,\\r\\n\tuint,\\r\\n\tuint2,\\r\\n\tuint3,\\r\\n\tuint4,\\r\\n\tuint8\\r\\n} from '/std_math';\\r\\n\\r\\nimport {\\r\\n\tShaderInput,\\r\\n\tShaderOutput,\\r\\n\tshader,\\r\\n\tdraw,\\r\\n\tdrawInstanced,\\r\\n\tdrawAdvanced,\\r\\n\tdrawIndexed\\r\\n} from '/_std/drawIndexed';\\r\\n\\r\\nimport { Mesh } from '/_std/mesh';\\r\\nimport { PaintingContext } from '/_std/paint';\\r\\nimport { getShadeupLocalContext } from '/_std/context';\\r\\n\\r\\nexport class texture2d_internal_empty<T> {\\r\\n\t__opaque_texture2d: true = true;\\r\\n\\r\\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\\r\\n\t__index(index: int2 | uint2): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t__index_assign(index: int2 | uint2, value: T): void {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\tgetFast(index: int2 | uint2): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\tsetFast(index: int2 | uint2, value: T): void {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t/** @shadeup=tag(async) */\\r\\n\tdownload(): void {}\\r\\n\\r\\n\tdownloadAsync(): Promise<void> {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t * Returns the underlying cpu buffer as a typed array.\\r\\n\t *\\r\\n\t * Note that this is considerably faster than using the raw index [] operator.\\r\\n\t *\\r\\n\t * ```shadeup\\r\\n\t * let tex = texture2d<float4>();\\r\\n\t * let data = tex.getData();\\r\\n\t *\\r\\n\t * for (let i = 0; i < data.length; i += 4) {\\r\\n\t * \tlet r = data[i];\\r\\n\t * \tlet g = data[i + 1];\\r\\n\t * \tlet b = data[i + 2];\\r\\n\t * \tlet a = data[i + 3];\\r\\n\t *\\r\\n\t * \t// Do something with the pixel\\r\\n\t * }\\r\\n\t * ```\\r\\n\t */\\r\\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array {\\r\\n\t\treturn new Uint32Array(0);\\r\\n\t}\\r\\n\\r\\n\tupload(): void {}\\r\\n\\r\\n\tsize: float2 = [0, 0];\\r\\n\\r\\n\tpaint: PaintingContext = null as any;\\r\\n\\r\\n\tsample(position: float2): float4 {}\\r\\n\\r\\n\tclear(color: float | float4 | 'auto' = 'auto'): void {}\\r\\n\tflush(): void {}\\r\\n\t// draw(\\r\\n\t// \tgeometry: Mesh,\\r\\n\t// \tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\t// \tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n\t// ): void;\\r\\n\t// draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\n\t// draw() {\\r\\n\t// \tthrow new Error('Not implemented');\\r\\n\t// }\\r\\n\\r\\n\tdraw: typeof draw;\\r\\n\\r\\n\tdrawIndexed: typeof drawIndexed;\\r\\n\tdrawAdvanced: typeof drawAdvanced;\\r\\n\tdrawInstanced: typeof drawInstanced;\\r\\n\\r\\n\t/** Release the texture */\\r\\n\tdestroy() {}\\r\\n}\\r\\n\\r\\nexport type texture2d<T> = texture2d_internal_empty<T>;\\r\\nexport type TextureFormat = '32bit' | '16bit' | '8bit' | 'depth' | 'depth-32' | 'auto';\\r\\nexport function texture2d<T = uint8>(\\r\\n\tsize: float2,\\r\\n\tformat: TextureFormat,\\r\\n\ttype: string\\r\\n): texture2d<T> {\\r\\n\treturn getShadeupLocalContext().shadeupMakeTextureInternal(size, format, type) as texture2d<T>;\\r\\n}\\r\\n\\r\\nexport class texture3d_internal_empty<T> {\\r\\n\t__opaque_texture3d: true = true;\\r\\n\\r\\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\\r\\n\t__index(index: int3): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\t__index_assign(index: int3, value: T): void {}\\r\\n\tsize: float3 = [0, 0, 0];\\r\\n\\r\\n\tsample(position: float3): float4 {}\\r\\n}\\r\\n\\r\\nexport type texture3d<T> = texture3d_internal_empty<T>;\\r\\n\\r\\nexport function texture3d<T>(size: float3, type: string): texture3d<T> {\\r\\n\treturn getShadeupLocalContext().shadeupMakeTextureInternal(size, type) as texture3d<T>;\\r\\n}\\r\\n\";\nconst physics = \"import type RAPIER2DNamespace from '@dimforge/rapier2d/rapier';\\r\\nimport type RAPIER3DNamespace from '@dimforge/rapier3d/rapier';\\r\\nimport type { float, float2, float3 } from './types';\\r\\n\\r\\ntype RAPIER2D = typeof RAPIER2DNamespace;\\r\\n\\r\\nexport class PhysicsCollider2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tworld: RAPIER2DNamespace.World;\\r\\n\tcollider: RAPIER2DNamespace.Collider;\\r\\n\\r\\n\tconstructor(\\r\\n\t\trapier: RAPIER2D,\\r\\n\t\tworld: RAPIER2DNamespace.World,\\r\\n\t\tcollider: RAPIER2DNamespace.Collider\\r\\n\t) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.world = world;\\r\\n\t\tthis.collider = collider;\\r\\n\t}\\r\\n\\r\\n\tsetTranslation(position: float2) {\\r\\n\t\tthis.collider.setTranslation(toVec2(position));\\r\\n\t}\\r\\n\\r\\n\tsetRotation(rotation: float) {\\r\\n\t\tthis.collider.setRotation(rotation);\\r\\n\t}\\r\\n\\r\\n\tsetSensor(isSensor: boolean) {\\r\\n\t\tthis.collider.setSensor(isSensor);\\r\\n\t}\\r\\n\\r\\n\tsetCollisionGroups(groups: int) {\\r\\n\t\tthis.collider.setCollisionGroups(groups);\\r\\n\t}\\r\\n\\r\\n\tsetCollidesWith(groups: int) {\\r\\n\t\tthis.collider.setActiveCollisionTypes(groups);\\r\\n\t}\\r\\n\\r\\n\tsetFriction(friction: float) {\\r\\n\t\tthis.collider.setFriction(friction);\\r\\n\t}\\r\\n\\r\\n\tsetRestitution(restitution: float) {\\r\\n\t\tthis.collider.setRestitution(restitution);\\r\\n\t}\\r\\n\\r\\n\tsetDensity(density: float) {\\r\\n\t\tthis.collider.setDensity(density);\\r\\n\t}\\r\\n\\r\\n\tsetMass(mass: float) {\\r\\n\t\tthis.collider.setMass(mass);\\r\\n\t}\\r\\n\\r\\n\tsetRadius(radius: float) {\\r\\n\t\tthis.collider.setRadius(radius);\\r\\n\t}\\r\\n\\r\\n\tsetHalfExtents(halfExtents: float2) {\\r\\n\t\tthis.collider.setHalfExtents(toVec2(halfExtents));\\r\\n\t}\\r\\n}\\r\\nfunction toVec2(v: float2): RAPIER2DNamespace.Vector2 {\\r\\n\treturn { x: v[0], y: v[1] };\\r\\n}\\r\\n\\r\\nfunction toVec3(v: float3): RAPIER3DNamespace.Vector {\\r\\n\treturn { x: v[0], y: v[1], z: v[2] };\\r\\n}\\r\\n\\r\\nexport class PhysicsRayCastResult2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tresult: RAPIER2DNamespace.RayIntersection;\\r\\n\\r\\n\tconstructor(rapier: RAPIER2D, result: RAPIER2DNamespace.RayIntersection) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.result = result;\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport class PhysicsRigidBody2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tworld: RAPIER2DNamespace.World;\\r\\n\tbody: RAPIER2DNamespace.RigidBody;\\r\\n\\r\\n\tconstructor(rapier: RAPIER2D, world: RAPIER2DNamespace.World, body: RAPIER2DNamespace.RigidBody) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.world = world;\\r\\n\t\tthis.body = body;\\r\\n\t}\\r\\n\\r\\n\taddBallCollider(radius: float): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.ball(radius);\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddBoxCollider(halfExtents: float2): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddCapsuleCollider(radius: float, halfHeight: float): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddTriangleCollider(a: float2, b: float2, c: float2): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddConvexCollider(points: float2[]): PhysicsCollider2d {\\r\\n\t\tlet floatarr = new Float32Array(points.length * 2);\\r\\n\t\tfor (let i = 0; i < points.length; i++) {\\r\\n\t\t\tfloatarr[i * 2 + 0] = points[i][0];\\r\\n\t\t\tfloatarr[i * 2 + 1] = points[i][1];\\r\\n\t\t}\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\\r\\n\t\tif (!colDesc) throw new Error('Failed to create convex hull collider');\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddHeightfieldCollider(heights: float[], scale: float2): PhysicsCollider2d {\\r\\n\t\tlet arr = new Float32Array(heights.length);\\r\\n\t\tfor (let i = 0; i < heights.length; i++) {\\r\\n\t\t\tarr[i] = heights[i];\\r\\n\t\t}\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\tsetTranslation(position: float2) {\\r\\n\t\tthis.body.setTranslation(toVec2(position), true);\\r\\n\t}\\r\\n\\r\\n\tsetRotation(rotation: float) {\\r\\n\t\tthis.body.setRotation(rotation, true);\\r\\n\t}\\r\\n\\r\\n\tsetVelocity(velocity: float2) {\\r\\n\t\tthis.body.setLinvel(toVec2(velocity), true);\\r\\n\t}\\r\\n\\r\\n\tsetAngularVelocity(velocity: float) {\\r\\n\t\tthis.body.setAngvel(velocity, true);\\r\\n\t}\\r\\n\\r\\n\taddForce(force: float2) {\\r\\n\t\tthis.body.addForce(toVec2(force), true);\\r\\n\t}\\r\\n\\r\\n\taddForceAtPoint(force: float2, point: float2) {\\r\\n\t\tthis.body.addForceAtPoint(toVec2(force), toVec2(point), true);\\r\\n\t}\\r\\n\\r\\n\taddTorque(torque: float) {\\r\\n\t\tthis.body.addTorque(torque, true);\\r\\n\t}\\r\\n\\r\\n\tsetAdditionalMass(mass: float) {\\r\\n\t\tthis.body.setAdditionalMass(mass, true);\\r\\n\t}\\r\\n\\r\\n\tsetEnabled(enabled: boolean) {\\r\\n\t\tthis.body.setEnabled(enabled);\\r\\n\t}\\r\\n\\r\\n\tsleep() {\\r\\n\t\tthis.body.sleep();\\r\\n\t}\\r\\n\\r\\n\twakeUp() {\\r\\n\t\tthis.body.wakeUp();\\r\\n\t}\\r\\n\\r\\n\tsetGravityScale(scale: float) {\\r\\n\t\tthis.body.setGravityScale(scale, true);\\r\\n\t}\\r\\n\\r\\n\tsetLinearDamping(damping: float) {\\r\\n\t\tthis.body.setLinearDamping(damping);\\r\\n\t}\\r\\n\\r\\n\tsetAngularDamping(damping: float) {\\r\\n\t\tthis.body.setAngularDamping(damping);\\r\\n\t}\\r\\n\\r\\n\tisSleeping(): boolean {\\r\\n\t\treturn this.body.isSleeping();\\r\\n\t}\\r\\n\\r\\n\tmass(): float {\\r\\n\t\treturn this.body.mass() as float;\\r\\n\t}\\r\\n\\r\\n\ttranslation(): float2 {\\r\\n\t\tlet t = this.body.translation();\\r\\n\t\treturn [t.x as float, t.y as float];\\r\\n\t}\\r\\n\\r\\n\trotation(): float {\\r\\n\t\treturn this.body.rotation() as float;\\r\\n\t}\\r\\n\\r\\n\tvelocity(): float2 {\\r\\n\t\tlet t = this.body.linvel();\\r\\n\t\treturn [t.x as float, t.y as float];\\r\\n\t}\\r\\n\\r\\n\tangularVelocity(): float {\\r\\n\t\treturn this.body.angvel() as float;\\r\\n\t}\\r\\n\\r\\n\tisMoving(): boolean {\\r\\n\t\treturn this.body.isMoving();\\r\\n\t}\\r\\n\\r\\n\tcollider(index: int): PhysicsCollider2d {\\r\\n\t\tlet collider = this.body.collider(index);\\r\\n\t\tif (!collider) throw new Error('Failed to get collider');\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, collider);\\r\\n\t}\\r\\n\\r\\n\tapplyImpulse(impulse: float2) {\\r\\n\t\tthis.body.applyImpulse(toVec2(impulse), true);\\r\\n\t}\\r\\n\\r\\n\tapplyTorqueImpulse(impulse: float) {\\r\\n\t\tthis.body.applyTorqueImpulse(impulse, true);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport class PhysicsEngine2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tworld: RAPIER2DNamespace.World;\\r\\n\tconstructor(rapier: RAPIER2D) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\\r\\n\t}\\r\\n\\r\\n\tstep() {\\r\\n\t\tthis.world.step();\\r\\n\t}\\r\\n\\r\\n\tcreateRigidBody(\\r\\n\t\tposition: float2,\\r\\n\t\trotation: float,\\r\\n\t\tmode: 'dynamic' | 'fixed'\\r\\n\t): PhysicsRigidBody2d {\\r\\n\t\tlet rbDesc =\\r\\n\t\t\tmode == 'dynamic'\\r\\n\t\t\t\t? this.rapier.RigidBodyDesc.dynamic()\\r\\n\t\t\t\t: mode == 'fixed'\\r\\n\t\t\t\t? this.rapier.RigidBodyDesc.fixed()\\r\\n\t\t\t\t: this.rapier.RigidBodyDesc.dynamic();\\r\\n\t\trbDesc.setTranslation(position[0], position[1]);\\r\\n\t\trbDesc.setRotation(rotation);\\r\\n\t\tlet rb = this.world.createRigidBody(rbDesc);\\r\\n\\r\\n\t\treturn new PhysicsRigidBody2d(this.rapier, this.world, rb);\\r\\n\t}\\r\\n\\r\\n\tbodies(): PhysicsRigidBody2d[] {\\r\\n\t\tlet bodies = this.world.bodies;\\r\\n\t\tlet result: PhysicsRigidBody2d[] = [];\\r\\n\t\tfor (let i = 0; i < bodies.len(); i++) {\\r\\n\t\t\tresult.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)!));\\r\\n\t\t}\\r\\n\t\treturn result;\\r\\n\t}\\r\\n\\r\\n\tcastRay(start: float2, end: float2, maxi: int): PhysicsRigidBody2d | null {\\r\\n\t\tlet result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\\r\\n\t\tif (!result) return null;\\r\\n\t\treturn new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent()!);\\r\\n\t}\\r\\n\\r\\n\tsetGravity(gravity: float2) {\\r\\n\t\tthis.world.gravity = toVec2(gravity);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport class PhysicsEngine3d {\\r\\n\tconstructor() {}\\r\\n}\\r\\n\\r\\nexport namespace physics {\\r\\n\texport function engine2d(): PhysicsEngine2d {\\r\\n\t\treturn new PhysicsEngine2d((window as any).RAPIER_2D);\\r\\n\t}\\r\\n}\\r\\n\";\nconst context = \"declare global {\\r\\n\tconst localEngineContext: any;\\r\\n}\\r\\nexport const getShadeupLocalContext = (): any => {\\r\\n\tif (typeof localEngineContext !== 'undefined') {\\r\\n\t\treturn localEngineContext;\\r\\n\t} else {\\r\\n\t\treturn window;\\r\\n\t}\\r\\n};\\r\\n\";\nconst drawIndexed = \"import { getShadeupLocalContext } from '/_std/context';\\r\\nimport { buffer } from '/_std/buffer';\\r\\nimport { Mesh } from '/_std/mesh';\\r\\nimport { texture2d } from '/_std/texture';\\r\\nimport { float4, float3, float, float2, bool, int, uint, atomic, int3 } from '/std_math';\\r\\n\\r\\nexport function drawIndexed(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\\r\\n}\\r\\n\\r\\nexport function drawInstanced(\\r\\n\tmesh: Mesh,\\r\\n\tinstanceCount: int,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_instanced(\\r\\n\t\tmesh,\\r\\n\t\tinstanceCount,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function drawInstancedIndexed(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tinstanceCount: int,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_instanced_indexed(\\r\\n\t\tindexBuffer,\\r\\n\t\tinstanceCount,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function drawIndexedIndirect(\\r\\n\tindirectBuffer: buffer<int> | buffer<atomic<int>>,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_indexed_indirect(\\r\\n\t\tindirectBuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function drawIndirect(\\r\\n\tmesh: Mesh,\\r\\n\tindirectBuffer: buffer<int> | buffer<atomic<int>>,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_indirect(\\r\\n\t\tmesh,\\r\\n\t\tindirectBuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function shader_start_shd_<T_IN, T_OUT, T_COMPUTE_Z>(\\r\\n\ts: shader<T_IN, T_OUT, T_COMPUTE_Z>,\\r\\n\tgroupSize?: any\\r\\n): shader<T_IN, T_OUT, T_COMPUTE_Z> {\\r\\n\treturn s;\\r\\n}\\r\\n\\r\\nexport type shader<T_IN = ShaderInput, T_OUT = ShaderOutput, T_COMPUTE_Z = 0> = (\\r\\n\t__in: Omit<T_IN, 'vertexIndex'>\\r\\n) => T_OUT;\\r\\ndeclare global {\\r\\n\t// function __shadeup_make_shader_inst(\\r\\n\t// \tkey: string,\\r\\n\t// \tparams: any,\\r\\n\t// \tclosure: any\\r\\n\t// ): shader<ShaderInput, ShaderOutput>;\\r\\n\t// function __shadeup_dispatch_draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\n\t// function __shadeup_dispatch_draw_geometry(\\r\\n\t// \tgeometry: Mesh,\\r\\n\t// \tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\t// \tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n\t// ): void;\\r\\n\\r\\n\tinterface Array<T> {\\r\\n\t\t[index: int]: T;\\r\\n\t}\\r\\n\\r\\n\tlet window: {\\r\\n\t\t[index: string]: any;\\r\\n\t};\\r\\n}\\r\\n\\r\\n/**@shadeup=struct*/\\r\\nexport class ShaderInput {\\r\\n\t/** Interpolated world position (available in fragment, and vertex) */\\r\\n\tposition: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Interpolated normal (fragment), Source mesh normal (vertex) */\\r\\n\tnormal: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Interpolated tangent (fragment), Source mesh tangent (vertex) */\\r\\n\ttangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\\r\\n\tbitangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Vertex shader output position */\\r\\n\tclipPosition: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\trealPosition: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** UV channel 0 input (available in fragment, and vertex) */\\r\\n\tuv: float2 = float2(0, 0);\\r\\n\\r\\n\t/** Screen position in pixels (available in fragment, and vertex) */\\r\\n\tscreen: float2 = float2(0, 0);\\r\\n\\r\\n\t/** Interpolated vertex color (available in fragment, and vertex)  */\\r\\n\tcolor: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** Group ID (available in compute) */\\r\\n\tgroupId: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Group size (available in compute) */\\r\\n\tgroupSize: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Global id (groupId * groupSize + localId) (available in compute) */\\r\\n\tglobalId: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Local id (available in compute) */\\r\\n\tlocalId: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Instance index (available in fragment, and vertex) */\\r\\n\tinstanceIndex: int = 0;\\r\\n\\r\\n\t/** Vertex index (available in vertex) */\\r\\n\tvertexIndex: int = 0;\\r\\n\\r\\n\t/** @shadeup=noemit_gpu */\\r\\n\tattr<T>(index: int, interpolation?: 'flat' | 'linear' | 'perspective'): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n}\\r\\n\\r\\n/**@shadeup=struct*/\\r\\nexport class ShaderOutput {\\r\\n\t/** Vertex output position */\\r\\n\tposition: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** Vertex output normal */\\r\\n\tnormal: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Vertex output tangent */\\r\\n\ttangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Vertex output bitangent */\\r\\n\tbitangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** UV channel 0 output */\\r\\n\tuv: float2 = float2(0, 0);\\r\\n\\r\\n\t/** Pixel color output */\\r\\n\tcolor: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** @shadeup=noemit_gpu */\\r\\n\tattr<T>(index: int, value: T, interpolation?: 'flat' | 'linear' | 'perspective') {}\\r\\n}\\r\\n\\r\\n/** @shadeup=shader */\\r\\nexport function makeShader<I, O, CZ = 0>(\\r\\n\tkey: string,\\r\\n\tfn: (__in: I, __out: O) => void\\r\\n): shader<I, O, CZ> {\\r\\n\treturn fn as shader<I, O, CZ>;\\r\\n}\\r\\n\\r\\ntype AttachmentBindings1<A0> = {\\r\\n\tattachments: [texture2d<A0>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings2<A0, A1> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings3<A0, A1, A2> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings4<A0, A1, A2, A3> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>, texture2d<A3>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings5<A0, A1, A2, A3, A4> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>, texture2d<A3>, texture2d<A4>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings6<A0, A1, A2, A3, A4, A5> = {\\r\\n\tattachments: [\\r\\n\t\ttexture2d<A0>,\\r\\n\t\ttexture2d<A1>,\\r\\n\t\ttexture2d<A2>,\\r\\n\t\ttexture2d<A3>,\\r\\n\t\ttexture2d<A4>,\\r\\n\t\ttexture2d<A5>\\r\\n\t];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t\tattachment5: A5;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings7<A0, A1, A2, A3, A4, A5, A6> = {\\r\\n\tattachments: [\\r\\n\t\ttexture2d<A0>,\\r\\n\t\ttexture2d<A1>,\\r\\n\t\ttexture2d<A2>,\\r\\n\t\ttexture2d<A3>,\\r\\n\t\ttexture2d<A4>,\\r\\n\t\ttexture2d<A5>,\\r\\n\t\ttexture2d<A6>\\r\\n\t];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t\tattachment5: A5;\\r\\n\t\t\tattachment6: A6;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings8<A0, A1, A2, A3, A4, A5, A6, A7> = {\\r\\n\tattachments: [\\r\\n\t\ttexture2d<A0>,\\r\\n\t\ttexture2d<A1>,\\r\\n\t\ttexture2d<A2>,\\r\\n\t\ttexture2d<A3>,\\r\\n\t\ttexture2d<A4>,\\r\\n\t\ttexture2d<A5>,\\r\\n\t\ttexture2d<A6>,\\r\\n\t\ttexture2d<A7>\\r\\n\t];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t\tattachment5: A5;\\r\\n\t\t\tattachment6: A6;\\r\\n\t\t\tattachment7: A7;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\n\\r\\ntype DrawDescriptorBase = (\\r\\n\t| {\\r\\n\t\t\tmesh: Mesh;\\r\\n\t  }\\r\\n\t| {\\r\\n\t\t\tindexBuffer: buffer<uint>;\\r\\n\t  }\\r\\n\t| {}\\r\\n) & {\\r\\n\tindirect?: buffer<uint> | buffer<atomic<uint>>;\\r\\n\tindirectOffset?: int | uint;\\r\\n\tdepth?: texture2d<float>;\\r\\n\tdepthOnly?: boolean;\\r\\n\tdepthTest?: boolean;\\r\\n\tdepthCompare?:\\r\\n\t\t| 'greater'\\r\\n\t\t| 'less'\\r\\n\t\t| 'equal'\\r\\n\t\t| 'greater_equal'\\r\\n\t\t| 'less_equal'\\r\\n\t\t| 'not_equal'\\r\\n\t\t| 'always'\\r\\n\t\t| 'never';\\r\\n\tbackfaceCulling?: boolean;\\r\\n\tinstances?: int;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Normal:\\r\\n * ```shadeup\\r\\n * drawAdvanced({\\r\\n *\tmesh: mesh::box(0.xyz, 100.xyz),\\r\\n *\tvertex: shader {\\r\\n *\t\t// ...\\r\\n *\t},\\r\\n *\tfragment: shader {\\r\\n *  \t// ...\\r\\n *\t},\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * Instancing:\\r\\n * ```shadeup\\r\\n * drawAdvanced({\\r\\n *\tmesh: mesh::box(0.xyz, 100.xyz),\\r\\n *\tvertex: shader {\\r\\n *\t\tin.instanceIndex;\\r\\n *\t},\\r\\n *\tfragment: shader {\\r\\n *  \t// ...\\r\\n *\t},\\r\\n *  instances: 100,\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * Indirect:\\r\\n * ```shadeup\\r\\n * let mesh = mesh::box(0.xyz, 100.xyz);\\r\\n *\\r\\n * let indirectBuffer = buffer<uint>(5);\\r\\n * indirectBuffer[0] = uint(m.getTriangles().len()); // indexCount\\r\\n * indirectBuffer[1] = 1; // instanceCount\\r\\n * indirectBuffer[2] = 0; // firstIndex\\r\\n * indirectBuffer[3] = 0; // vertexOffset\\r\\n * indirectBuffer[4] = 0; // firstInstance\\r\\n *\\r\\n * drawAdvanced({\\r\\n *\tmesh: mesh::box(0.xyz, 100.xyz),\\r\\n *\tvertex: shader {\\r\\n *\t\t// ...\\r\\n *\t},\\r\\n *\tfragment: shader {\\r\\n *  \t// ...\\r\\n *\t},\\r\\n *  indirect: indirectBuffer,\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * Attachments:\\r\\n * ```shadeup\\r\\n * let mesh = mesh::box(0.xyz, 100.xyz);\\r\\n * let color = texture2d<float4>(100.xy);\\r\\n * let normal = texture2d<float3>(100.xy);\\r\\n * let depth = texture2d<float>(100.xy, \\\"depth\\\");\\r\\n *\\r\\n * drawAdvanced({\\r\\n * \tmesh: mesh,\\r\\n * \tvertex: shader {\\r\\n * \t // ...\\r\\n * \t},\\r\\n * \tfragment: shader {\\r\\n * \t out.attachment0 = float4(1, 0, 0, 1);\\r\\n * \t out.attachment1 = float3(0, 0, 1);\\r\\n * \t},\\r\\n * \tdepth: depth, // Override depth buffer\\r\\n * \tattachments: [color, normal],\\r\\n * });\\r\\n */\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5, A6, A7>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings8<A0, A1, A2, A3, A4, A5, A6, A7>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5, A6>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings7<A0, A1, A2, A3, A4, A5, A6>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings6<A0, A1, A2, A3, A4, A5>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings5<A0, A1, A2, A3, A4>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings4<A0, A1, A2, A3>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings3<A0, A1, A2>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings2<A0, A1>\\r\\n): void;\\r\\nexport function drawAdvanced<A0>(descriptor: DrawDescriptorBase & AttachmentBindings1<A0>): void;\\r\\n\\r\\nexport function drawAdvanced(\\r\\n\tdescriptor: DrawDescriptorBase & {\\r\\n\t\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\t\tfragment: shader<ShaderInput, ShaderOutput>;\\r\\n\t}\\r\\n): void;\\r\\nexport function drawAdvanced(descriptor: any): void {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_advanced(descriptor);\\r\\n}\\r\\n\\r\\nexport function draw(\\r\\n\tgeometry: Mesh,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n): void;\\r\\nexport function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\nexport function draw(\\r\\n\tfirst: Mesh | DrawDescriptorBase | shader<ShaderInput, ShaderOutput>,\\r\\n\tsecond?: shader<ShaderInput, ShaderOutput> | number,\\r\\n\tthird?: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tif ('vertices' in first && second && third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw_geometry(first, second, third);\\r\\n\t} else if (first && !second && !third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport function drawFullscreen(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\nexport function drawFullscreen(\\r\\n\tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\\r\\n\tsecond?: shader<ShaderInput, ShaderOutput>,\\r\\n\tthird?: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tif ('vertices' in first && second && third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw_geometry(first, second, third);\\r\\n\t} else if (first && !second && !third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport function drawAlt2(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void {}\\r\\n\\r\\nexport function drawCount(\\r\\n\ttriCount: number,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\r\\n}\\r\\n\\r\\nexport function drawAttributes<T extends { [key: string]: any }, X, Y>(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tbuffers:\\r\\n\t\t| Map<keyof T, buffer<any>>\\r\\n\t\t| {\\r\\n\t\t\t\t[key in keyof T]: buffer<T[key]>;\\r\\n\t\t  },\\r\\n\tvertexShader: shader<T, X>,\\r\\n\tpixelShader: shader<X, Y>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_attributes(\\r\\n\t\tindexBuffer,\\r\\n\t\tbuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\nexport function computeIndirect(\\r\\n\tindirectBuffer: buffer<uint> | buffer<atomic<uint>>,\\r\\n\tindirectOffset: int,\\r\\n\tcomputeShader: shader<any, any, any>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_compute_indirect(\\r\\n\t\tindirectBuffer,\\r\\n\t\tindirectOffset,\\r\\n\t\tcomputeShader\\r\\n\t);\\r\\n}\\r\\n\";\nconst drawCount = \"import { getShadeupLocalContext } from '/_std/context';\\r\\nimport { buffer } from '/_std/buffer';\\r\\nimport { float4, float3, float, float2, bool, int, uint } from '/std_math';\\r\\n\\r\\nexport function drawCount(triCount: number, vertexShader: shader, pixelShader: shader) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\r\\n}\\r\\n\";\nconst drawAttributes = \"import { getShadeupLocalContext } from '/_std/context';\\r\\nimport { buffer } from '/_std/buffer';\\r\\nimport { float4, float3, float, float2, bool, int, uint } from '/std_math';\\r\\n\\r\\nexport function drawAttributes<T extends { [key: string]: any }, X, Y>(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tbuffers:\\r\\n\t\t| Map<keyof T, buffer<any>>\\r\\n\t\t| {\\r\\n\t\t\t\t[key in keyof T]: buffer<T[key]>;\\r\\n\t\t  },\\r\\n\tvertexShader: shader<T, X>,\\r\\n\tpixelShader: shader<X, Y>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_attributes(\\r\\n\t\tindexBuffer,\\r\\n\t\tbuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\";\nconst paint = \"type GraphicsAdapter = {\\r\\n\tdrawImage(image: HTMLCanvasElement): void;\\r\\n\taddEventListener(name: string, fn: (...args: any) => void): void;\\r\\n\tactivatePaintContext(): void;\\r\\n};\\r\\nimport type { float4, float2 } from './types';\\r\\n\\r\\nexport class PaintingContext {\\r\\n\tmarkDirtyCallback: () => void = () => {};\\r\\n\tconstructor(canvas: HTMLCanvasElement, gl: GraphicsAdapter | null) {\\r\\n\t\tif (!gl) return;\\r\\n\t\tthis.__gl = gl;\\r\\n\t\tthis.__canvas = canvas;\\r\\n\t\tthis.__offscreen_canvas = document.createElement('canvas');\\r\\n\t\tthis.__offscreen_canvas.width = canvas.width;\\r\\n\t\tthis.__offscreen_canvas.height = canvas.height;\\r\\n\t\t// document.body.appendChild(this.__offscreen_canvas);\\r\\n\t\tthis.__ctx = this.__offscreen_canvas.getContext('2d', {\\r\\n\t\t\twillReadFrequently: true\\r\\n\t\t})!;\\r\\n\t\tthis.__offscreen_canvas.style.position = 'absolute';\\r\\n\t\tthis.__offscreen_canvas.style.zIndex = '10';\\r\\n\t\t// document.body.appendChild(this.__offscreen_canvas);\\r\\n\t\tthis.__setColor([0, 0, 0, 1] as float4);\\r\\n\\r\\n\t\tgl.addEventListener('context', (toContext: string) => {\\r\\n\t\t\tif (toContext == 'draw') {\\r\\n\t\t\t\tthis.flush();\\r\\n\t\t\t}\\r\\n\t\t});\\r\\n\\r\\n\t\tgl.addEventListener('flush', () => {\\r\\n\t\t\tthis.flush();\\r\\n\t\t});\\r\\n\t}\\r\\n\\r\\n\tflush() {\\r\\n\t\tif (!this.__gl) return;\\r\\n\t\tif (!this.__canvas) return;\\r\\n\t\tif (!this.__offscreen_canvas) return;\\r\\n\\r\\n\t\tif (!this.stagedChanges) return;\\r\\n\\r\\n\t\tif (this.fastPoints) this.flushPoints();\\r\\n\\r\\n\t\tthis.__gl.drawImage(this.__offscreen_canvas);\\r\\n\t\tthis.stagedChanges = false;\\r\\n\\r\\n\t\tif (\\r\\n\t\t\tthis.__offscreen_canvas.width != this.__canvas.width ||\\r\\n\t\t\tthis.__offscreen_canvas.height != this.__canvas.height\\r\\n\t\t) {\\r\\n\t\t\tthis.__offscreen_canvas.width = this.__canvas.width;\\r\\n\t\t\tthis.__offscreen_canvas.height = this.__canvas.height;\\r\\n\t\t}\\r\\n\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tprivate __ctx: CanvasRenderingContext2D | null = null;\\r\\n\tprivate __gl: GraphicsAdapter | null = null;\\r\\n\tprivate __offscreen_canvas: HTMLCanvasElement | null = null;\\r\\n\\r\\n\tprivate __program: WebGLProgram | null = null;\\r\\n\\r\\n\tprivate stagedChanges: boolean = false;\\r\\n\tprivate dirty: boolean = false;\\r\\n\\r\\n\tprivate fastPoints: boolean = false;\\r\\n\tprivate fastPointsBuffer: ImageData | null = null;\\r\\n\\r\\n\tprivate __beforeDraw() {\\r\\n\t\tif (!this.__offscreen_canvas) return;\\r\\n\t\tif (!this.__ctx) return;\\r\\n\t\tif (!this.__canvas) return;\\r\\n\t\tthis.markDirtyCallback();\\r\\n\t\tthis.__gl?.activatePaintContext();\\r\\n\\r\\n\t\tif (!this.stagedChanges) {\\r\\n\t\t\tthis.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\\r\\n\\r\\n\t\t\tthis.__ctx.drawImage(this.__canvas, 0, 0);\\r\\n\\r\\n\t\t\tlet color = this.__currentColor;\\r\\n\t\t\tthis.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\t\tcolor[3]\\r\\n\t\t\t})`;\\r\\n\t\t\tthis.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\t\tcolor[3]\\r\\n\t\t\t})`;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tprivate __afterDraw() {\\r\\n\t\tlet gl = this.__gl;\\r\\n\t\tthis.dirty = true;\\r\\n\t\tthis.stagedChanges = true;\\r\\n\t}\\r\\n\\r\\n\tprivate __currentColor: number[] | null = null;\\r\\n\tprivate __setColor(color?: float4) {\\r\\n\t\tif (!this.__ctx || !color) return;\\r\\n\\r\\n\t\tif (\\r\\n\t\t\tthis.__currentColor &&\\r\\n\t\t\tthis.__currentColor[0] == color[0] &&\\r\\n\t\t\tthis.__currentColor[1] == color[1] &&\\r\\n\t\t\tthis.__currentColor[2] == color[2] &&\\r\\n\t\t\tthis.__currentColor[3] == color[3]\\r\\n\t\t)\\r\\n\t\t\treturn;\\r\\n\\r\\n\t\tthis.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\tcolor[3]\\r\\n\t\t})`;\\r\\n\t\tthis.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\tcolor[3]\\r\\n\t\t})`;\\r\\n\\r\\n\t\tthis.__currentColor = [color[0], color[1], color[2], color[3]];\\r\\n\t}\\r\\n\\r\\n\tfillRect(pos: float2, size: float2, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tfillCircle(pos: float2, radius: number, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\\r\\n\t\tthis.__ctx.fill();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tfillArc(pos: float2, radius: number, startAngle: number, endAngle: number, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\\r\\n\t\tthis.__ctx.fill();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tline(pos1: float2, pos2: float2, color?: float4, width: number = 1) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.moveTo(pos1[0], pos1[1]);\\r\\n\\r\\n\t\tthis.__ctx.lineTo(pos2[0], pos2[1]);\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tcircle(pos: float2, radius: number, color?: float4, width: number = 1) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tarc(\\r\\n\t\tpos: float2,\\r\\n\t\tradius: number,\\r\\n\t\tstartAngle: number,\\r\\n\t\tendAngle: number,\\r\\n\t\tcolor?: float4,\\r\\n\t\twidth: number = 1\\r\\n\t) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\ttext(pos: float2, text: string, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.fillText(text, pos[0], pos[1]);\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tstartPath(pos: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.moveTo(pos[0], pos[1]);\\r\\n\t}\\r\\n\\r\\n\tlineTo(pos: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineTo(pos[0], pos[1]);\\r\\n\t}\\r\\n\\r\\n\tstrokePath(color?: float4, width: number = 1) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tfillPath(color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.fill();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tsetStrokeWidth(width: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t}\\r\\n\\r\\n\tsetFont(font: string) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.font = font;\\r\\n\t}\\r\\n\\r\\n\tsetFontSize(size: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.font = `${size}px ${this.__ctx.font.split(' ').slice(1).join(' ')}`;\\r\\n\t}\\r\\n\\r\\n\tsetTextAlign(align: CanvasTextAlign) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.textAlign = align;\\r\\n\t}\\r\\n\\r\\n\tsetTextBaseline(baseline: CanvasTextBaseline) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.textBaseline = baseline;\\r\\n\t}\\r\\n\\r\\n\tsetLineCap(cap: 'butt' | 'round' | 'square') {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineCap = cap;\\r\\n\t}\\r\\n\\r\\n\tsetLineJoin(join: CanvasLineJoin) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineJoin = join;\\r\\n\t}\\r\\n\\r\\n\tsetMiterLimit(limit: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.miterLimit = limit;\\r\\n\t}\\r\\n\\r\\n\tsetShadowColor(color: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.shadowColor = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\tcolor[3]\\r\\n\t\t})`;\\r\\n\t}\\r\\n\\r\\n\tsetShadowBlur(blur: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.shadowBlur = blur;\\r\\n\t}\\r\\n\\r\\n\tsetShadowOffset(offset: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.shadowOffsetX = offset[0];\\r\\n\t\tthis.__ctx.shadowOffsetY = offset[1];\\r\\n\t}\\r\\n\\r\\n\tsetGlobalAlpha(alpha: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.globalAlpha = alpha;\\r\\n\t}\\r\\n\\r\\n\tsetGlobalCompositeOperation(op: string) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.globalCompositeOperation = op as any;\\r\\n\t}\\r\\n\\r\\n\tsetImageSmoothingEnabled(enabled: boolean) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.imageSmoothingEnabled = enabled;\\r\\n\t}\\r\\n\\r\\n\tsetImageSmoothingQuality(quality: ImageSmoothingQuality) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.imageSmoothingQuality = quality;\\r\\n\t}\\r\\n\\r\\n\tsetLineDash(dash: number[]) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.setLineDash(dash);\\r\\n\t}\\r\\n\\r\\n\tsetLineDashOffset(offset: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineDashOffset = offset;\\r\\n\t}\\r\\n\\r\\n\tsetTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.setTransform(a, b, c, d, e, f);\\r\\n\t}\\r\\n\\r\\n\tresetTransform() {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.resetTransform();\\r\\n\t}\\r\\n\\r\\n\tscale(v: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.scale(v[0], v[1]);\\r\\n\t}\\r\\n\\r\\n\trotate(angle: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.rotate(angle);\\r\\n\t}\\r\\n\\r\\n\ttranslate(v: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.translate(v[0], v[1]);\\r\\n\t}\\r\\n\\r\\n\tprivate flushPoints() {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\t\tif (!this.fastPoints) return;\\r\\n\t\tif (!this.fastPointsBuffer) return;\\r\\n\\r\\n\t\tthis.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\\r\\n\\r\\n\t\tthis.fastPoints = false;\\r\\n\t\tthis.fastPointsBuffer = null;\\r\\n\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tprivate pointsCounter: number = 0;\\r\\n\tprivate cacheSize: [number, number] = [0, 0];\\r\\n\tpoint(pos: float2, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.pointsCounter++;\\r\\n\\r\\n\t\tthis.__beforeDraw();\\r\\n\t\tif (this.pointsCounter > 10) {\\r\\n\t\t\tif (!this.fastPoints) {\\r\\n\t\t\t\tthis.fastPoints = true;\\r\\n\t\t\t\tthis.cacheSize = [this.__offscreen_canvas!.width, this.__offscreen_canvas!.height];\\r\\n\t\t\t\tthis.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (!this.fastPointsBuffer) return;\\r\\n\\r\\n\t\t\tlet x = Math.floor(pos[0]);\\r\\n\t\t\tlet y = Math.floor(pos[1]);\\r\\n\\r\\n\t\t\tlet index = (y * this.cacheSize[0] + x) * 4;\\r\\n\\r\\n\t\t\tif (!color) {\\r\\n\t\t\t\tcolor = this.__currentColor;\\r\\n\t\t\t}\\r\\n\t\t\tlet oldColorx = this.fastPointsBuffer.data[index] / 255;\\r\\n\t\t\tlet oldColory = this.fastPointsBuffer.data[index + 1] / 255;\\r\\n\t\t\tlet oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\\r\\n\t\t\tlet oldColora = this.fastPointsBuffer.data[index + 3] / 255;\\r\\n\\r\\n\t\t\tthis.fastPointsBuffer.data[index] =\\r\\n\t\t\t\tcolor[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\\r\\n\t\t\tthis.fastPointsBuffer.data[index + 1] =\\r\\n\t\t\t\tcolor[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\\r\\n\t\t\tthis.fastPointsBuffer.data[index + 2] =\\r\\n\t\t\t\tcolor[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\\r\\n\t\t\tthis.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\\r\\n\t\t} else {\\r\\n\t\t\tthis.__setColor(color);\\r\\n\t\t\tthis.__ctx.fillRect(pos[0], pos[1], 1, 1);\\r\\n\t\t}\\r\\n\t\tthis.__afterDraw();\\r\\n\t}\\r\\n\\r\\n\tvector(\\r\\n\t\tpos: float2,\\r\\n\t\tdir: float2,\\r\\n\t\tcolor: float4 = [0.9803921568627451, 0.8, 0.08235294117647059, 1] as float4,\\r\\n\t\twidth: number = 4\\r\\n\t) {\\r\\n\t\tif (!this.__ctx || (dir[0] == 0 && dir[1] == 0)) return;\\r\\n\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.setStrokeWidth(width);\\r\\n\t\tthis.__ctx.moveTo(pos[0], pos[1]);\\r\\n\t\tthis.__ctx.lineCap = 'round';\\r\\n\\r\\n\t\tthis.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\\r\\n\t\tthis.__ctx.stroke();\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\\r\\n\t\t// Arrows\\r\\n\t\tlet arrowSize = 20;\\r\\n\t\tlet arrowAngle = Math.PI / 5;\\r\\n\t\tlet dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\\r\\n\t\tlet arrow1 = [\\r\\n\t\t\tMath.cos(dirAngle + arrowAngle) * arrowSize,\\r\\n\t\t\tMath.sin(dirAngle + arrowAngle) * arrowSize\\r\\n\t\t];\\r\\n\t\tlet arrow2 = [\\r\\n\t\t\tMath.cos(dirAngle - arrowAngle) * arrowSize,\\r\\n\t\t\tMath.sin(dirAngle - arrowAngle) * arrowSize\\r\\n\t\t];\\r\\n\t\tthis.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\\r\\n\t\tthis.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\\r\\n\t\tthis.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\\r\\n\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tgrid(\\r\\n\t\tcenter: float2,\\r\\n\t\tcount: float2,\\r\\n\t\tgap: float2,\\r\\n\t\tcolor: float4 = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1] as float4,\\r\\n\t\twidth: number = 2\\r\\n\t) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.setStrokeWidth(width);\\r\\n\\r\\n\t\tlet start = [\\r\\n\t\t\tcenter[0] - (count[0] / 2) * gap[0],\\r\\n\t\t\tcenter[1] - (count[1] / 2) * gap[1]\\r\\n\t\t] as float2;\\r\\n\\r\\n\t\tfor (let i = 0; i <= count[0]; i++) {\\r\\n\t\t\tthis.__ctx.moveTo(start[0] + i * gap[0], start[1]);\\r\\n\t\t\tthis.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i <= count[1]; i++) {\\r\\n\t\t\tthis.__ctx.moveTo(start[0], start[1] + i * gap[1]);\\r\\n\t\t\tthis.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\\r\\n\t\t}\\r\\n\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n}\\r\\n\\r\\ndeclare global {\\r\\n\tconst paint: PaintingContext;\\r\\n}\\r\\n\";\nconst mesh = \"\\r\\npub struct Mesh {\\r\\n\tvertices: float3[];\\r\\n\ttriangles: int[];\\r\\n\tnormals: float3[];\\r\\n\ttangents: float3[];\\r\\n\tbitangents: float3[];\\r\\n\tuvs: float2[];\\r\\n\tcolors: float4[];\\r\\n\tpub symbol: any;\\r\\n}\\r\\n\\r\\nimpl Mesh {\\r\\n\tpub fn rect(self, size: float2) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tself.vertices.push((-size.x / 2, -size.y / 2, 0));\\r\\n\t\tself.vertices.push((size.x / 2, -size.y / 2, 0));\\r\\n\t\tself.vertices.push((size.x / 2, size.y / 2, 0));\\r\\n\t\tself.vertices.push((-size.x / 2, size.y / 2, 0));\\r\\n\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\t\tself.triangles.push(index + 1);\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\t\tself.triangles.push(index + 3);\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\\r\\n\t\tself.uvs.push((0, 0));\\r\\n\t\tself.uvs.push((1, 0));\\r\\n\t\tself.uvs.push((0, 1));\\r\\n\t\tself.uvs.push((1, 1));\\r\\n\t}\\r\\n\\r\\n\tpub fn quad(self, position: float3, direction: float3, right: float3, size: float2) {\\r\\n\t\tlet up = normalize(cross(right, direction));\\r\\n\\r\\n\t\tlet halfSize = size / 2.0;\\r\\n\\r\\n\t\tlet index = self.vertices.len();\\r\\n\t\t\\r\\n\t\tself.vertices.push(position + right * -halfSize.x + up * halfSize.y);\\r\\n\t\tself.vertices.push(position + right * halfSize.x + up * halfSize.y);\\r\\n\t\tself.vertices.push(position + right * halfSize.x + up * -halfSize.y);\\r\\n\t\tself.vertices.push(position + right * -halfSize.x + up * -halfSize.y);\\r\\n\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\t\tself.triangles.push(index + 1);\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\t\tself.triangles.push(index + 3);\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\\r\\n\t\tself.normals.push(direction);\\r\\n\t\tself.normals.push(direction);\\r\\n\t\tself.normals.push(direction);\\r\\n\t\tself.normals.push(direction);\\r\\n\\r\\n\t\tself.tangents.push(right);\\r\\n\t\tself.tangents.push(right);\\r\\n\t\tself.tangents.push(right);\\r\\n\t\tself.tangents.push(right);\\r\\n\\r\\n\t\tself.bitangents.push(up);\\r\\n\t\tself.bitangents.push(up);\\r\\n\t\tself.bitangents.push(up);\\r\\n\t\tself.bitangents.push(up);\\r\\n\\r\\n\t\tself.uvs.push((1, 0));\\r\\n\t\tself.uvs.push((0, 0));\\r\\n\t\tself.uvs.push((0, 1));\\r\\n\t\tself.uvs.push((1, 1));\\r\\n\t}\\r\\n\\r\\n\tpub fn box(self, size: float3) {\\r\\n\t\tlet halfSize = size / 2.0;\\r\\n\\r\\n\t\tconst UP = (0, 1.0, 0);\\r\\n\t\tconst DOWN = (0, -1.0, 0);\\r\\n\t\tconst LEFT = (-1.0, 0, 0);\\r\\n\t\tconst RIGHT = (1.0, 0, 0);\\r\\n\t\tconst FORWARD = (0, 0, 1.0);\\r\\n\t\tconst BACK = (0, 0, -1.0);\\r\\n\\r\\n\t\t// Up\\r\\n\t\tself.quad(UP * halfSize.y, UP, LEFT, (size.x, size.z));\\r\\n\\r\\n\t\t// Down\\r\\n\t\tself.quad(DOWN * halfSize.y, DOWN, RIGHT, (size.x, size.z));\\r\\n\\r\\n\t\t// Left\\r\\n\t\tself.quad(LEFT * halfSize.x, LEFT, BACK, (size.z, size.y));\\r\\n\\r\\n\t\t// Right\\r\\n\t\tself.quad(RIGHT * halfSize.x, RIGHT, FORWARD, (size.z, size.y));\\r\\n\\r\\n\t\t// Forward\\r\\n\t\tself.quad(FORWARD * halfSize.z, FORWARD, LEFT, (size.x, size.y));\\r\\n\\r\\n\t\t// Back\\r\\n\t\tself.quad(BACK * halfSize.z, BACK, RIGHT, (size.x, size.y));\\r\\n\t}\\r\\n\\r\\n\tpub fn rectAt(self, minPos: float2, maxPos: float2) {\\r\\n\t\tself.rect(maxPos - minPos);\\r\\n\t\tself.translate((minPos, 0));\\r\\n\t}\\r\\n\\r\\n\tpub fn circle(self, pos: float2, radius: float, vertices: int = 32) {\\r\\n\\r\\n\t}\\r\\n\\r\\n\tpub fn uvSphere(self, pos: float3, radius: float, vertices: int = 32, rings: int = 16) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tlet verticesPerRing = vertices + 1;\\r\\n\\r\\n\t\tfor (let i = 0; i <= rings; i++) {\\r\\n\t\t\tlet y = i / float(rings);\\r\\n\t\t\tlet angleY = y * PI;\\r\\n\\r\\n\t\t\tlet posY = cos(angleY);\\r\\n\t\t\tlet radiusY = sin(angleY);\\r\\n\\r\\n\t\t\tfor (let j = 0; j <= vertices; j++) {\\r\\n\t\t\t\tlet x = j / float(vertices);\\r\\n\t\t\t\tlet angleX = x * PI * 2;\\r\\n\\r\\n\t\t\t\tlet posX = cos(angleX);\\r\\n\t\t\t\tlet posZ = sin(angleX);\\r\\n\\r\\n\t\t\t\tself.vertices.push((posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\\r\\n\t\t\t\tself.normals.push(normalize((posX * radiusY, posY, posZ * radiusY)));\\r\\n\t\t\t\t\\r\\n\t\t\t\tlet tangent = normalize((posZ, 0, -posX));\\r\\n\t\t\t\tlet bitangent = normalize(cross(self.normals[self.normals.len() - 1], tangent));\\r\\n\\r\\n\t\t\t\tself.tangents.push(tangent);\\r\\n\t\t\t\tself.bitangents.push(bitangent);\\r\\n\t\t\t\tself.uvs.push((x, y));\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < rings; i++) {\\r\\n\t\t\tfor (let j = 0; j < vertices; j++) {\\r\\n\t\t\t\tlet i0 = i * verticesPerRing + j;\\r\\n\t\t\t\tlet i1 = i0 + 1;\\r\\n\t\t\t\tlet i2 = i0 + verticesPerRing;\\r\\n\t\t\t\tlet i3 = i2 + 1;\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i0);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i3);\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn icoSphere(self, pos: float3, radius: float, subdivisions: int = 1) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tlet t = (1.0 + sqrt(5.0)) / 2.0;\\r\\n\\r\\n\t\tlet vertices: float3[] = [\\r\\n\t\t\t(-1, t, 0),\\r\\n\t\t\t(1, t, 0),\\r\\n\t\t\t(-1, -t, 0),\\r\\n\t\t\t(1, -t, 0),\\r\\n\t\t\t(0, -1, t),\\r\\n\t\t\t(0, 1, t),\\r\\n\t\t\t(0, -1, -t),\\r\\n\t\t\t(0, 1, -t),\\r\\n\t\t\t(t, 0, -1),\\r\\n\t\t\t(t, 0, 1),\\r\\n\t\t\t(-t, 0, -1),\\r\\n\t\t\t(-t, 0, 1),\\r\\n\t\t];\\r\\n\\r\\n\t\tlet triangles: int3[] = [\\r\\n\t\t\t(0, 11, 5),\\r\\n\t\t\t(0, 5, 1),\\r\\n\t\t\t(0, 1, 7),\\r\\n\t\t\t(0, 7, 10),\\r\\n\t\t\t(0, 10, 11),\\r\\n\t\t\t(1, 5, 9),\\r\\n\t\t\t(5, 11, 4),\\r\\n\t\t\t(11, 10, 2),\\r\\n\t\t\t(10, 7, 6),\\r\\n\t\t\t(7, 1, 8),\\r\\n\t\t\t(3, 9, 4),\\r\\n\t\t\t(3, 4, 2),\\r\\n\t\t\t(3, 2, 6),\\r\\n\t\t\t(3, 6, 8),\\r\\n\t\t\t(3, 8, 9),\\r\\n\t\t\t(4, 9, 5),\\r\\n\t\t\t(2, 4, 11),\\r\\n\t\t\t(6, 2, 10),\\r\\n\t\t\t(8, 6, 7),\\r\\n\t\t\t(9, 8, 1),\\r\\n\t\t];\\r\\n\\r\\n\t\tfor (let i = 0; i < vertices.len(); i++) {\\r\\n\t\t\tself.vertices.push(normalize(vertices[i]) * radius);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < triangles.len(); i++) {\\r\\n\t\t\tself.triangles.push(index + triangles[i].x);\\r\\n\t\t\tself.triangles.push(index + triangles[i].y);\\r\\n\t\t\tself.triangles.push(index + triangles[i].z);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < subdivisions; i++) {\\r\\n\t\t\tlet newTriangles: int[] = [];\\r\\n\\r\\n\t\t\tfor (let j = 0; j < self.triangles.len(); j += 3) {\\r\\n\t\t\t\tlet i0 = self.triangles[j + 0];\\r\\n\t\t\t\tlet i1 = self.triangles[j + 1];\\r\\n\t\t\t\tlet i2 = self.triangles[j + 2];\\r\\n\\r\\n\t\t\t\tlet v0 = self.vertices[i0];\\r\\n\t\t\t\tlet v1 = self.vertices[i1];\\r\\n\t\t\t\tlet v2 = self.vertices[i2];\\r\\n\\r\\n\t\t\t\tlet v3 = normalize((v0 + v1) / 2.0);\\r\\n\t\t\t\tlet v4 = normalize((v1 + v2) / 2.0);\\r\\n\t\t\t\tlet v5 = normalize((v2 + v0) / 2.0);\\r\\n\\r\\n\t\t\t\tlet i3 = self.vertices.len();\\r\\n\t\t\t\tlet i4 = i3 + 1;\\r\\n\t\t\t\tlet i5 = i3 + 2;\\r\\n\\r\\n\t\t\t\tself.vertices.push(v3 * radius);\\r\\n\t\t\t\tself.vertices.push(v4 * radius);\\r\\n\t\t\t\tself.vertices.push(v5 * radius);\\r\\n\\r\\n\t\t\t\tnewTriangles.push(i0, i3, i5);\\r\\n\t\t\t\tnewTriangles.push(i3, i1, i4);\\r\\n\t\t\t\tnewTriangles.push(i3, i4, i5);\\r\\n\t\t\t\tnewTriangles.push(i5, i4, i2);\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tself.triangles = newTriangles;\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tlet normal = normalize(self.vertices[i]);\\r\\n\t\t\tlet tangent = normalize((normal.z, 0, -normal.x));\\r\\n\t\t\tlet bitangent = normalize(cross(normal, tangent));\\r\\n\t\t\tself.normals.push(normal);\\r\\n\t\t\tself.tangents.push(tangent);\\r\\n\t\t\tself.bitangents.push(bitangent);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.triangles.len(); i += 3) {\\r\\n\t\t\tlet i0 = self.triangles[i + 0];\\r\\n\t\t\tlet i1 = self.triangles[i + 1];\\r\\n\t\t\tlet i2 = self.triangles[i + 2];\\r\\n\\r\\n\t\t\tlet v0 = self.vertices[i0];\\r\\n\t\t\tlet v1 = self.vertices[i1];\\r\\n\t\t\tlet v2 = self.vertices[i2];\\r\\n\\r\\n\t\t\tlet uv0 = float2(atan2(v0.z, v0.x) / PI / 2.0 + 0.5, asin(v0.y) / PI + 0.5);\\r\\n\t\t\tlet uv1 = float2(atan2(v1.z, v1.x) / PI / 2.0 + 0.5, asin(v1.y) / PI + 0.5);\\r\\n\t\t\tlet uv2 = float2(atan2(v2.z, v2.x) / PI / 2.0 + 0.5, asin(v2.y) / PI + 0.5);\\r\\n\\r\\n\t\t\tself.uvs.push(uv0);\\r\\n\t\t\tself.uvs.push(uv1);\\r\\n\t\t\tself.uvs.push(uv2);\\r\\n\t\t}\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn cylinder(self, pos: float3, radius: float, height: float, vertices: int = 32) {\\r\\n\t\t\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\\r\\n\t}\\r\\n\\r\\n\tpub fn capsule(self, pos: float3, radius: float, height: float, vertices: int = 32) {\\r\\n\t\t\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn cone(self, pos: float3, radius: float, height: float, vertices: int = 32) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn plane(self, pos: float3, size: float2, subdivisions: int2 = (2, 2)) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tlet halfSize = size / 2.0;\\r\\n\\r\\n\t\tfor (let i = 0; i <= subdivisions.x; i++) {\\r\\n\t\t\tlet x = i / float(subdivisions.x);\\r\\n\t\t\tlet posX = x * size.x - halfSize.x;\\r\\n\\r\\n\t\t\tfor (let j = 0; j <= subdivisions.y; j++) {\\r\\n\t\t\t\tlet y = j / float(subdivisions.y);\\r\\n\t\t\t\tlet posY = y * size.y - halfSize.y;\\r\\n\\r\\n\t\t\t\tself.vertices.push((posX, 0, posY));\\r\\n\t\t\t\tself.normals.push((0, 1, 0));\\r\\n\t\t\t\tself.tangents.push((1, 0, 0));\\r\\n\t\t\t\tself.bitangents.push((0, 0, 1));\\r\\n\t\t\t\tself.uvs.push((x, y));\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < subdivisions.x; i++) {\\r\\n\t\t\tfor (let j = 0; j < subdivisions.y; j++) {\\r\\n\t\t\t\tlet i0 = i * (subdivisions.y + 1) + j;\\r\\n\t\t\t\tlet i1 = i0 + 1;\\r\\n\t\t\t\tlet i2 = i0 + subdivisions.y + 1;\\r\\n\t\t\t\tlet i3 = i2 + 1;\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i0);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i3);\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn translate(self, pos: float3): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] += pos;\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn rotate(self, quaternion: float4): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] = quat::rotate(quaternion, self.vertices[i]);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.normals.len(); i++) {\\r\\n\t\t\tself.normals[i] = quat::rotate(quaternion, self.normals[i]);\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn transform(self, matrix: float4x4): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] = ((self.vertices[i], 1) * matrix).xyz;\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.normals.len(); i++) {\\r\\n\t\t\tself.normals[i] = ((self.normals[i], 1) * matrix).xyz;\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn scale(self, scale: float3): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] *= scale;\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn bounds(self): float3 {\\r\\n\t\tlet mn = 0.0.xyz;\\r\\n\t\tlet mx = 0.0.xyz;\\r\\n\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tmn = min(mn, self.vertices[i]);\\r\\n\t\t\tmx = max(mx, self.vertices[i]);\\r\\n\t\t}\\r\\n\\r\\n\t\treturn mx - mn;\\r\\n\t}\\r\\n\\r\\n\tpub fn center(self): float3 {\\r\\n\t\tlet bounds = self.bounds();\\r\\n\t\treturn bounds / 2.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn new() {\\r\\n\t\treturn Mesh {\\r\\n\t\t\tvertices: [],\\r\\n\t\t\ttriangles: [],\\r\\n\t\t\ttangents: [],\\r\\n\t\t\tbitangents: [],\\r\\n\t\t\tnormals: [],\\r\\n\t\t\tuvs: [],\\r\\n\t\t\tcolors: [],\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn append(self, other: Mesh) {\\r\\n\t\tlet oldVertices = self.vertices.len();\\r\\n\t\tlet oldTriangles = self.triangles.len();\\r\\n\\r\\n\t\tself.vertices.append(other.vertices);\\r\\n\t\tself.triangles.append(other.triangles);\\r\\n\t\tself.normals.append(other.normals);\\r\\n\t\tself.tangents.append(other.tangents);\\r\\n\t\tself.bitangents.append(other.bitangents);\\r\\n\t\tself.uvs.append(other.uvs);\\r\\n\t\tself.colors.append(other.colors);\\r\\n\\r\\n\t\tfor (let i = oldTriangles; i < self.triangles.len(); i++) {\\r\\n\t\t\tself.triangles[i] += oldVertices;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn getVertices(self) {\\r\\n\t\treturn self.vertices;\\r\\n\t}\\r\\n\\r\\n\tpub fn getTriangles(self) {\\r\\n\t\treturn self.triangles;\\r\\n\t}\\r\\n\\r\\n\tpub fn getNormals(self) {\\r\\n\t\treturn self.normals;\\r\\n\t}\\r\\n\\r\\n\tpub fn getTangents(self) {\\r\\n\t\treturn self.tangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn getBitangents(self) {\\r\\n\t\treturn self.bitangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn getUVs(self) {\\r\\n\t\treturn self.uvs;\\r\\n\t}\\r\\n\\r\\n\tpub fn getColors(self) {\\r\\n\t\treturn self.colors;\\r\\n\t}\\r\\n\\r\\n\tpub fn setVertices(self, vertices: float3[]) {\\r\\n\t\tself.vertices = vertices;\\r\\n\t}\\r\\n\\r\\n\tpub fn setTriangles(self, triangles: int[]) {\\r\\n\t\tself.triangles = triangles;\\r\\n\t}\\r\\n\\r\\n\tpub fn setNormals(self, normals: float3[]) {\\r\\n\t\tself.normals = normals;\\r\\n\t}\\r\\n\\r\\n\tpub fn setTangents(self, tangents: float3[]) {\\r\\n\t\tself.tangents = tangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn setBitangents(self, bitangents: float3[]) {\\r\\n\t\tself.bitangents = bitangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn setUVs(self, uvs: float2[]) {\\r\\n\t\tself.uvs = uvs;\\r\\n\t}\\r\\n\\r\\n\tpub fn setColors(self, colors: float4[]) {\\r\\n\t\tself.colors = colors;\\r\\n\t}\\r\\n}\\r\\n\\r\\npub struct mesh {}\\r\\n\\r\\nimpl mesh {\\r\\n\tpub fn rect(pos: float2, size: float2) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.rectAt(pos, pos + size);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn box(pos: float3, size: float3) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.box(size);\\r\\n\t\tg.translate(pos);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn uvSphere(pos: float3, radius: float, vertices: int = 32, rings: int = 16) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.uvSphere(pos, radius, vertices, rings);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn icoSphere(pos: float3, radius: float, subdivisions: int = 1) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.icoSphere(pos, radius, subdivisions);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn plane(pos: float3, size: float2, subdivisions: int2 = (2, 2)) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.plane(pos, size, subdivisions);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Returns a [-1, 1] position for a given index.\\r\\n\t*/\\r\\n\tpub fn triangleFromIndex(index: int): float2 {\\r\\n\t\tif (index == 0) {\\r\\n\t\t\treturn float2(-1, 1);\\r\\n\t\t} else if (index == 1) {\\r\\n\t\t\treturn float2(1, 1);\\r\\n\t\t} else if (index == 2) {\\r\\n\t\t\treturn float2(0, -1);\\r\\n\t\t} else {\\r\\n\t\t\treturn float2(0, 0);\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn circleFromIndex(vertexIndex: int, vertices: int): float2 {\\r\\n\t\tvertexIndex = vertices - vertexIndex;\\r\\n\t\tlet numSlices = vertices / 3;\\r\\n\t\tlet sliceIndex = floor(float(vertexIndex) / float(vertices) * float(numSlices));\\r\\n\t\t\\r\\n\t\tlet incAngle = PI * 2.0 / float(numSlices);\\r\\n\t\tlet baseAngle = incAngle * float(sliceIndex);\\r\\n\\r\\n\t\tif (vertexIndex % 3 == 0) {\\r\\n\t\t\treturn float2(0, 0);\\r\\n\t\t} else if (vertexIndex % 3 == 1) {\\r\\n\t\t\treturn float2(cos(baseAngle), sin(baseAngle));\\r\\n\t\t} else {\\r\\n\t\t\treturn float2(cos(baseAngle + incAngle), sin(baseAngle + incAngle));\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn rectFromIndex(index: int, vertices: int): float2 {\\r\\n\t\tlet x = index % vertices;\\r\\n\t\tlet y = index / vertices;\\r\\n\\r\\n\t\treturn float2(x, y) / float(vertices) * 2.0 - 1.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn empty(numVerts: int = 0) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tif (numVerts > 0) {\\r\\n\t\t\tg.setVertices(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setNormals(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setTangents(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setBitangents(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setUVs(array<float2>(numVerts, 0.xy));\\r\\n\t\t\tg.setColors(array<float4>(numVerts, 0.xyzw));\\r\\n\t\t\tlet tris = array<int>(numVerts, 0);\\r\\n\t\t\tfor (let i = 0; i < numVerts; i++) {\\r\\n\t\t\t\ttris[i] = i;\\r\\n\t\t\t}\\r\\n\t\t\tg.setTriangles(tris);\\r\\n\t\t}\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn join(mesh1: Mesh, mesh2: Mesh) {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.append(mesh1);\\r\\n\t\tg.append(mesh2);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\t// pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\r\\n\t// \tlet g = Mesh::new();\\r\\n\t// \tg.cylinder(pos, radius, height, vertices);\\r\\n\\r\\n\t// \treturn g;\\r\\n\t// }\\r\\n\\r\\n\t// pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\r\\n\t// \tlet g = Mesh::new();\\r\\n\t// \tg.capsule(pos, radius, height, vertices);\\r\\n\\r\\n\t// \treturn g;\\r\\n\t// }\\r\\n\\r\\n\t// pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\r\\n\t// \tlet g = Mesh::new();\\r\\n\t// \tg.cone(pos, radius, height, vertices);\\r\\n\\r\\n\t// \treturn g;\\r\\n\t// }\\r\\n}\\r\\n\\r\\npub struct Material {\\r\\n\tpub baseColor: float4,\\r\\n\tpub color: texture2d<float4>,\\r\\n\t\\r\\n\tpub normal: texture2d<float4>,\\r\\n\tpub normalScale: float2,\\r\\n\tpub roughness: texture2d<float4>,\\r\\n\tpub emissive: texture2d<float4>,\\r\\n\t\\r\\n\t\\r\\n\tpub metallic: texture2d<float4>,\\r\\n}\\r\\n\\r\\npub struct ModelPart {\\r\\n\tpub mesh: Mesh,\\r\\n\tpub material: Material,\\r\\n\tpub transform: float4x4,\\r\\n}\\r\\n\\r\\npub struct Model {\\r\\n\tpub parts: ModelPart[],\\r\\n}\\r\\n\\r\\nwindow.SHD_Mesh = Mesh;\\r\\nwindow.SHD_Model = Model;\\r\\nwindow.SHD_ModelPart = ModelPart;\\r\\nwindow.SHD_Material = Material;\";\nconst geo = \"struct GeoSegment {\\r\\n\tstart: float2,\\r\\n\tend: float2,\\r\\n\tkind: int,\\r\\n\tarcRadius: float,\\r\\n\tarcStart: float,\\r\\n\tarcEnd: float\\r\\n}\\r\\n\\r\\nstruct GeoPoly {\\r\\n\tsegments: GeoSegment[]\\r\\n}\\r\\n\\r\\ntrait Geometry {\\r\\n\tfn area(self) -> float;\\r\\n\tfn perimeter(self) -> float;\\r\\n\tfn discretize(self) -> GeoPoly;\\r\\n}\\r\\n\\r\\nimpl Geometry for GeoPoly {\\r\\n\tpub fn area(self) -> float {\\r\\n\t\treturn 0.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn perimeter(self) -> float {\\r\\n\t\treturn 0.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn discretize(self) -> GeoPoly {\\r\\n\t\treturn self.clone();\\r\\n\t}\\r\\n}\";\nconst textures = \"\";\nconst common = `\\r\nimport buffer from \"/_std/buffer\";\\r\nimport ui from \"/_std/ui\";\\r\nimport texture2d, texture3d from \"/_std/texture\";\\r\n\\r\n/**\\r\n* Converts a position in screenSpace to a position in 2d clipSpace. e.g. (0, screenSize.x) -> (-1, 1)\\r\n*/\\r\npub fn pixelToClip(pixelPosition: float2) -> float2 {\\r\n    let zeroToOne = pixelPosition / env.screenSize;\\r\n    let zeroToTwo = zeroToOne * 2.0;\\r\n    let clipSpace = zeroToTwo - 1.0.xy;\\r\n    return (clipSpace.x, clipSpace.y * -1.0);\\r\n}\\r\n\\r\n/**\\r\n* Value of PI to 35 decimal places.\\r\n*/\\r\nconst PI = 3.14159265358979323846264338327950288;\\r\n\\r\nexport {\\r\n    PI,\\r\n    buffer,\\r\n    texture2d,\\r\n    texture3d,\\r\n    ui\\r\n};\\r\n\\r\n/**\\r\n* Quaternion helpers\\r\n*/\\r\npub struct quat {}\\r\n\\r\nimpl quat {\\r\n    /**\\r\n    * Creates a quaternion from an angle and axis.\\r\n    */\\r\n\tpub fn fromAngleAxis(angle: float, axis: float3) -> float4 {\\r\n\t\treturn float4(axis * sin(angle * 0.5), cos(angle * 0.5));\\r\n\t}\\r\n\\r\n    /**\\r\n    * Multiplies two quaternions and returns the result.\\r\n    */\\r\n\tpub fn mul(a: float4, b: float4) -> float4 {\\r\n\t\treturn float4(\\r\n            b.xyz * a.w + a.xyz * b.w + cross(a.xyz, b.xyz),\\r\n            a.w * b.w - dot(a.xyz, b.xyz)\\r\n        );\\r\n\t}\\r\n\\r\n    /**\\r\n    * Rotates a vector by a quaternion and returns the rotated vector.\\r\n    */\\r\n    pub fn rotate(quaternion: float4, vector: float3) -> float3 {\\r\n        let q = quat::mul(quat::mul(quaternion, float4(vector, 0)), quat::conjugate(quaternion));\\r\n        return q.xyz;\\r\n    }\\r\n\\r\n    /**\\r\n    * Returns the conjugate of the input quaternion.\\r\n    *\\r\n    * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\\r\n    */\\r\n    pub fn conjugate(quaternion: float4) -> float4 {\\r\n        return float4(-quaternion.xyz, quaternion.w);\\r\n    }\\r\n\\r\n    /**\\r\n    * Returns the inverse of the input quaternion.\\r\n    */\\r\n    pub fn inverse(quaternion: float4) -> float4 {\\r\n        return quat::conjugate(quaternion) / dot(quaternion, quaternion);\\r\n    }\\r\n\\r\n    /**\\r\n    * Generates a quaternion that rotates from one direction to another via the shortest path.\\r\n    */\\r\n    pub fn fromToRotation(from: float3, to: float3) -> float4 {\\r\n        let q = 0.0.xyzw;\\r\n        let d = dot(from, to);\\r\n        if (d < -0.999999)\\r\n        {\\r\n            let right = float3(1, 0, 0);\\r\n            let up = float3(0, 1, 0);\\r\n            let tmp = cross(right, from);\\r\n            if (length(tmp) < 0.000001)\\r\n            {\\r\n                tmp = cross(up, from);\\r\n            }\\r\n            tmp = normalize(tmp);\\r\n            q = quat::fromAngleAxis(PI, tmp);\\r\n        } else if (d > 0.999999) {\\r\n            q = float4(0, 0, 0, 1);\\r\n        } else {\\r\n            q = float4(cross(from, to), 1 + d);\\r\n            q = normalize(q);\\r\n        }\\r\n        return q;\\r\n    }\\r\n\\r\n    \\r\n    pub fn diff(a: float4, b: float4) -> float {\\r\n        return a * quat::inverse(b);\\r\n    }\\r\n\\r\n\\r\n    /**\\r\n    * Generates lookAt quaternion.\\r\n    */\\r\n    pub fn lookAt(forward: float3, up: float3): float4 {\\r\n        let right = normalize(cross(forward, up));\\r\n        up = normalize(cross(forward, right));\\r\n\\r\n        let m00 = right.x;\\r\n        let m01 = right.y;\\r\n        let m02 = right.z;\\r\n        let m10 = up.x;\\r\n        let m11 = up.y;\\r\n        let m12 = up.z;\\r\n        let m20 = forward.x;\\r\n        let m21 = forward.y;\\r\n        let m22 = forward.z;\\r\n\\r\n        let num8 = (m00 + m11) + m22;\\r\n        let q = float4(0, 0, 0, 1);\\r\n        if (num8 > 0.0)\\r\n        {\\r\n            let num = sqrt(num8 + 1.0);\\r\n            let w = num * 0.5;\\r\n            num = 0.5 / num;\\r\n            let x = (m12 - m21) * num;\\r\n            let y = (m20 - m02) * num;\\r\n            let z = (m01 - m10) * num;\\r\n            return float4(x, y, z, w);\\r\n        }\\r\n\\r\n        if ((m00 >= m11) && (m00 >= m22))\\r\n        {\\r\n            let num7 = sqrt(((1.0 + m00) - m11) - m22);\\r\n            let num4 = 0.5 / num7;\\r\n            let x = 0.5 * num7;\\r\n            let y = (m01 + m10) * num4;\\r\n            let z = (m02 + m20) * num4;\\r\n            let w = (m12 - m21) * num4;\\r\n            return float4(x, y, z, w);\\r\n        }\\r\n\\r\n        if (m11 > m22)\\r\n        {\\r\n            let num6 = sqrt(((1.0 + m11) - m00) - m22);\\r\n            let num3 = 0.5 / num6;\\r\n            let x = (m10 + m01) * num3;\\r\n            let y = 0.5 * num6;\\r\n            let z = (m21 + m12) * num3;\\r\n            let w = (m20 - m02) * num3;\\r\n            return float4(x, y, z, w);\\r\n        }\\r\n\\r\n        let num5 = sqrt(((1.0 + m22) - m00) - m11);\\r\n        let num2 = 0.5 / num5;\\r\n        let x = (m20 + m02) * num2;\\r\n        let y = (m21 + m12) * num2;\\r\n        let z = 0.5 * num5;\\r\n        let w = (m01 - m10) * num2;\\r\n        return float4(x, y, z, w);\\r\n    }\\r\n\\r\n    /**\\r\n    * Smooth interpolation between two quaternions.\\r\n    */\\r\n    pub fn slerp(a: float4, b: float4, t: float) -> float4 {\\r\n        \\r\n        if (length(a) == 0.0)\\r\n        {\\r\n            if (length(b) == 0.0)\\r\n            {\\r\n                return float4(0, 0, 0, 1);\\r\n            }\\r\n            return b;\\r\n        } else if (length(b) == 0.0) {\\r\n            return a;\\r\n        }\\r\n\\r\n        let cosHalfAngle = a.w * b.w + dot(a.xyz, b.xyz);\\r\n\\r\n        if (cosHalfAngle >= 1.0 || cosHalfAngle <= -1.0)\\r\n        {\\r\n            return a;\\r\n        } else if (cosHalfAngle < 0.0) {\\r\n            b *= -1.0;\\r\n            cosHalfAngle = -cosHalfAngle;\\r\n        }\\r\n\\r\n        let blendA = 0.0;\\r\n        let blendB = 0.0;\\r\n        if (cosHalfAngle < 0.99)\\r\n        {\\r\n            let halfAngle = acos(cosHalfAngle);\\r\n            let sinHalfAngle = sin(halfAngle);\\r\n            let oneOverSinHalfAngle = 1.0 / sinHalfAngle;\\r\n            blendA = sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\\r\n            blendB = sin(halfAngle * t) * oneOverSinHalfAngle;\\r\n        }\\r\n        else\\r\n        {\\r\n            blendA = 1.0 - t;\\r\n            blendB = t;\\r\n        }\\r\n\\r\n        let result = float4(blendA * a.xyz + blendB * b.xyz, blendA * a.w + blendB * b.w);\\r\n        if (length(result) > 0.0)\\r\n        {\\r\n            return normalize(result);\\r\n        }\\r\n        return float4(0, 0, 0, 1);\\r\n    }\\r\n\\r\n    /**\\r\n    * Converts quaternion to matrix.\\r\n    */\\r\n    pub fn toMatrix(quaternion: float4) {\\r\n        let x = quaternion.x;\\r\n        let y = quaternion.y;\\r\n        let z = quaternion.z;\\r\n        let w = quaternion.w;\\r\n        let x2 = x + x;\\r\n        let y2 = y + y;\\r\n        let z2 = z + z;\\r\n        let xx = x * x2;\\r\n        let xy = x * y2;\\r\n        let xz = x * z2;\\r\n        let yy = y * y2;\\r\n        let yz = y * z2;\\r\n        let zz = z * z2;\\r\n        let wx = w * x2;\\r\n        let wy = w * y2;\\r\n        let wz = w * z2;\\r\n\\r\n\\r\n        let m = float4x4(\\r\n            1.0 - (yy + zz), xy + wz,         xz - wy,         0,\\r\n            xy - wz,         1.0 - (xx + zz), yz + wx,         0,\\r\n            xz + wy,         yz - wx,         1.0 - (xx + yy), 0,\\r\n            0,               0,               0,               1.0\\r\n        );\\r\n\\r\n        return m;\\r\n    }\\r\n\\r\n    pub fn fromEulerAngles(angles: float3) {\\r\n        let cr = cos(angles.x * 0.5);\\r\n        let sr = sin(angles.x * 0.5);\\r\n        let cp = cos(angles.y * 0.5);\\r\n        let sp = sin(angles.y * 0.5);\\r\n        let cy = cos(angles.z * 0.5);\\r\n        let sy = sin(angles.z * 0.5);\\r\n\\r\n        return float4(\\r\n            sr * cp * cy - cr * sp * sy,\\r\n            cr * sp * cy + sr * cp * sy,\\r\n            cr * cp * sy - sr * sp * cy,\\r\n            cr * cp * cy + sr * sp * sy\\r\n        )\\r\n    }\\r\n}\\r\n\\r\nwindow.shadeupQuat = quat;\\r\n\\r\n\\r\npub struct Camera2d {\\r\n    pub position: float2 = float2(0, 0);\\r\n    pub zoom: float = 1;\\r\n}\\r\n\\r\nimpl Camera2d {\\r\n    pub fn transform(self, position: float2) -> float2 {\\r\n        return (position - self.position) * self.zoom;\\r\n    }\\r\n\\r\n    /**\\r\n    * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\\r\n    */\\r\n    pub fn fit(self, size: float2) {\\r\n        let zoom = 1/min(env.screenSize.x / size.x, env.screenSize.y / size.y);\\r\n        let position = (env.screenSize - size * (1/zoom)) / 2;\\r\n        self.position = position;\\r\n        self.zoom = zoom;\\r\n    }\\r\n}\\r\n\\r\npub struct Camera {\\r\n    pub position: float3 = float3(0, 0, 0);\\r\n\tpub rotation: float4 = float4(1, 0, 0, 0);\\r\n    pub width: float = 1920;\\r\n    pub height: float = 1080;\\r\n\tpub fov: float = 90;\\r\n\tpub near: float = 1;\\r\n\tpub far: float = 100000;\\r\n}\\r\n\\r\nimpl Camera {\\r\n    pub fn getRay(self, screen: float2) {\\r\n        let aspect = self.width / self.height;\\r\n        let x = screen.x;\\r\n        let y = screen.y;\\r\n        let Px = (2 * ((x + 0.5) / self.width) - 1) * tan(self.fov / 2 * PI / 180) * aspect;\\r\n        let Py = (1 - 2 * ((y + 0.5) / self.height)) * tan(self.fov / 2 * PI / 180);\\r\n        \\r\n        return quat::rotate(self.rotation, normalize((Px, Py, -1)));\\r\n    }\\r\n\\r\n    pub fn getTransformToViewMatrix(self, position: float3, scale: float3, rotation: float4) {\\r\n        let rotationMatrix = quat::toMatrix(rotation);\\r\n        let translationMatrix = float4x4(\\r\n            scale.x, 0, 0, 0,\\r\n            0, scale.y, 0, 0,\\r\n            0, 0, scale.z, 0,\\r\n            position.x, position.y, position.z, 1\\r\n        );\\r\n        return self.getPerspectiveMatrix() * self.getWorldToViewMatrix() * translationMatrix * rotationMatrix;\\r\n    }\\r\n\\r\n    pub fn getCombinedMatrix(self) -> float4x4 {\\r\n        return self.getPerspectiveMatrix() * self.getWorldToViewMatrix();\\r\n    }\\r\n\\r\n    pub fn getCombinedMatrixReverseZ(self) -> float4x4 {\\r\n        return self.getPerspectiveMatrixReverseZ() * self.getWorldToViewMatrix();\\r\n    }\\r\n\\r\n    pub fn getWorldToViewMatrix(self) -> float4x4 {\\r\n        let rotationMatrix = quat::toMatrix(self.rotation);\\r\n        let translationMatrix = float4x4(\\r\n            1, 0, 0, 0,\\r\n            0, 1, 0, 0,\\r\n            0, 0, 1, 0,\\r\n            self.position.x, self.position.y, self.position.z, 1\\r\n        );\\r\n        return inverse(translationMatrix * rotationMatrix);\\r\n    }\\r\n\\r\n    pub fn getPerspectiveMatrixReverseZ(self) -> float4x4 {\\r\n        return matrix::perspectiveReverseZ(self.fov, self.width / self.height, self.near);\\r\n    }\\r\n\\r\n    pub fn getPerspectiveMatrix(self) -> float4x4 {\\r\n        return matrix::perspective(self.fov, self.width / self.height, self.near, self.far);\\r\n        // // let matrix = float4x4();\\r\n        // let far = self.far;\\r\n        // let near = self.near;\\r\n        // let aspect = self.width / self.height;\\r\n        // let fovRad = radians(self.fov);\\r\n        // let tanFov = tan( fovRad * 0.5 );\\r\n        // // matrix[0][0] = ;\\r\n        // // matrix[1][1] = 1.0 / tanFov;\\r\n        // // matrix[2][2] = -((far + near)/(far - near));\\r\n        // // matrix[3][2] = -((2*(near*far))/(far - near));\\r\n        // // matrix[2][3] = -1;\\r\n        // // matrix[3][3] = 0;\\r\n\\r\n        // let matrix = float4x4(\\r\n        //     1.0 / (tanFov * aspect), 0, 0, 0,\\r\n        //     0, 1.0 / tanFov, 0, 0,\\r\n        //     0, 0, -((far + near)/(far - near)), -1,\\r\n        //     0, 0, -((2*(near*far))/(far - near)), 0\\r\n        // );\\r\n\\r\n        // return matrix;\\r\n    }\\r\n\\r\n    pub fn getOrthographicMatrix(self) -> float4x4 {\\r\n        let matrix = float4x4();\\r\n        let far = self.far;\\r\n        let near = self.near;\\r\n\\r\n        let w = 1.0 / self.width;\\r\n        let h = 1.0 / self.height;\\r\n\\r\n        matrix[0][0] = w;\\r\n        matrix[1][1] = h;\\r\n        matrix[2][2] = -(2.0/(far - near));\\r\n        matrix[2][3] = ((far + near)/(far-near));\\r\n        //matrix[2][2] = -((far + near)/(far - near));\\r\n        //matrix[3][2] = -((2*(near*far))/(far - near));\\r\n        matrix[3][3] = 1.0;\\r\n\\r\n        return matrix;\\r\n    }\\r\n}\\r\n\\r\n\\r\nwindow._makeCamera = Camera;\\r\nwindow._makeCamera2d = Camera2d;\\r\n\\r\nfn easeA(aA1: float, aA2: float) -> float {\\r\n    return 1.0 - 3.0 * aA2 + 3.0 * aA1;\\r\n}\\r\n\\r\nfn easeB(aA1: float, aA2: float) -> float {\\r\n    return 3.0 * aA2 - 6.0 * aA1;\\r\n}\\r\n\\r\nfn easeC(aA1: float) -> float {\\r\n    return 3.0 * aA1;\\r\n}\\r\n\\r\nfn calcBezier(aT: float, aA1: float, aA2: float) -> float {\\r\n    return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT;\\r\n}\\r\n\\r\nfn getSlope(aT: float, aA1: float, aA2: float) -> float {\\r\n    return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1);\\r\n}\\r\n\\r\n// fn getTForX(aX: float, aA1: float, aA2: float) -> float {\\r\n//     let aGuessT = aX;\\r\n//     for (let i = 0; i <= 10; i++) {\\r\n//         let currentSlope = bezSlope(aGuessT, aA1, aA2);\\r\n//         if (currentSlope == 0.0) {\\r\n//             return aGuessT;\\r\n//         }\\r\n//         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\\r\n//         aGuessT -= currentX / currentSlope;\\r\n//     }\\r\n//     return aGuessT;\\r\n// }\\r\n\\r\n\\r\nconst NEWTON_ITERATIONS =          4;\\r\nconst NEWTON_MIN_SLOPE =           0.02;\\r\nconst SUBDIVISION_PRECISION =      0.0000001;\\r\nconst SUBDIVISION_MAX_ITERATIONS = 10;\\r\nconst kSplineTableSize =           11;\\r\n\\r\nconst kSampleStepSize =\\r\n                                        1.0 / float(kSplineTableSize - 1);\\r\n\\r\n\\r\nfn getTForX(aX: float, mX1: float, mX2: float) {\\r\n  let mSampleValues: array<float> = array<float>(11, 0);\\r\n  for (let i = 0; i < kSplineTableSize; i++) {\\r\n    mSampleValues[i] = calcBezier(float(i) * kSampleStepSize, mX1, mX2);\\r\n  }\\r\n\\r\n  // Find interval where t lies\\r\n  let intervalStart = 0.0;\\r\n  let currentSample = 1;\\r\n  let lastSample = kSplineTableSize - 1;\\r\n  \\r\n  for (let dummy = 0; currentSample != lastSample && mSampleValues[currentSample] <= aX; currentSample++) {\\r\n    intervalStart += kSampleStepSize;\\r\n  }\\r\n  currentSample--; // t now lies between *currentSample and *currentSample+1\\r\n\\r\n  // Interpolate to provide an initial guess for t\\r\n  let csamp = mSampleValues[currentSample];\\r\n  let dst = (aX - csamp) /\\r\n                (mSampleValues[currentSample + 1] - csamp);\\r\n  let guessForT = intervalStart + dst * kSampleStepSize;\\r\n\\r\n  // Check the slope to see what strategy to use. If the slope is too small\\r\n  // Newton-Raphson iteration won't converge on a root so we use bisection\\r\n  // instead.\\r\n  let initialSlope = getSlope(guessForT, mX1, mX2);\\r\n  if (initialSlope >= NEWTON_MIN_SLOPE) {\\r\n    return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\\r\n  } else if (initialSlope == 0.0) {\\r\n    return guessForT;\\r\n  } else {\\r\n    return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\\r\n  }\\r\n}\\r\n\\r\nfn newtonRaphsonIterate(aX: float, aGuessT: float, mX1: float, mX2: float) {\\r\n  // Refine guess with Newton-Raphson iteration\\r\n  for (let i = 0; i < NEWTON_ITERATIONS; i++) {\\r\n    // We're trying to find where f(t) = aX,\\r\n    // so we're actually looking for a root for: CalcBezier(t) - aX\\r\n    let currentX = calcBezier(aGuessT, mX1, mX2) - aX;\\r\n    let currentSlope = getSlope(aGuessT, mX1, mX2);\\r\n\\r\n    if (currentSlope == 0.0)\\r\n      return aGuessT;\\r\n\\r\n    aGuessT -= currentX / currentSlope;\\r\n  }\\r\n\\r\n  return aGuessT;\\r\n}\\r\n\\r\nfn binarySubdivide(aX: float, aA: float, aB: float) {\\r\n  let currentX = 0.0;\\r\n  let currentT = 0.0;\\r\n  let i = 0;\\r\n    let mX1 = aA;\\r\n    let mX2 = aB;\\r\n\\r\n  while (true) {\\r\n    i++;\\r\n    if (abs(currentX) > SUBDIVISION_PRECISION && i < SUBDIVISION_MAX_ITERATIONS) {\\r\n        currentT = aA + (aB - aA) / 2.0;\\r\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\\r\n\\r\n        if (currentX > 0.0) {\\r\n        aB = currentT;\\r\n        } else {\\r\n        aA = currentT;\\r\n        }\\r\n    }else{\\r\n        break;\\r\n    }\\r\n  }\\r\n\\r\n  return currentT;\\r\n}\\r\n\\r\npub struct bezier {};\\r\n\\r\nimpl bezier {\\r\n    pub fn cubic2(a: float2, b: float2, c: float2, d: float2, t: float) -> float2 {\\r\n        return (1.0 - t)**3 * a + 3.0 * (1.0 - t)**2 * t * b + 3.0 * (1.0 - t) * t**2 * c + t**3 * d;\\r\n    }\\r\n\\r\n    pub fn cubic3(a: float3, b: float3, c: float3, d: float3, t: float) -> float3 {\\r\n        return (1.0 - t)**3 * a + 3.0 * (1.0 - t)**2 * t * b + 3.0 * (1.0 - t) * t**2 * c + t**3 * d;\\r\n    }\\r\n\\r\n    pub fn quadratic2(a: float2, b: float2, c: float2, t: float) -> float2 {\\r\n        return (1.0 - t)**2 * a + 2.0 * (1.0 - t) * t * b + t**2 * c;\\r\n    }\\r\n\\r\n    pub fn quadratic3(a: float3, b: float3, c: float3, t: float) -> float3 {\\r\n        return (1.0 - t)**2 * a + 2.0 * (1.0 - t) * t * b + t**2 * c;\\r\n    }\\r\n\\r\n    /**\\r\n    * 3d triangle patch evaulation with barycentric coordinates.\\r\n    */\\r\n    pub fn patch(a: float3, ab: float3, b: float3, bc: float3, c: float3, ca: float3, barycentricT: float3) {\\r\n        const s = barycentricT.x;\\r\n        const t = barycentricT.y;\\r\n        const u = barycentricT.z;\\r\n      return 1.0 * c * (s * s) +\\r\n        2.0 * bc * s * t +\\r\n        2.0 * ca * s * u +\\r\n        1.0 * b * (t * t) +\\r\n        2.0 * ab * t * u +\\r\n        1.0 * a * (u * u);\\r\n    }\\r\n\\r\n    \\r\n\\r\n    pub fn easing(controlA: float2, controlB: float2, t: float) -> float {\\r\n        return calcBezier(getTForX(t, controlA.x, controlB.x), controlA.y, controlB.y);\\r\n    }\\r\n}\\r\n\\r\n/**\\r\n* Provides space related utilities like z-order curves and quadtrees.\\r\n*/\\r\npub struct spatial {};\\r\n\\r\nimpl spatial {\\r\n    pub fn cantorPair(v: int2) -> int {\\r\n        return ((v.x + v.y) * (v.x + v.y + 1)) / 2 + v.y;\\r\n    }\\r\n\\r\n    pub fn cantorUnpair(v: int) -> int2 {\\r\n        let w = floor((sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\\r\n        let t = (w * w + w) / 2.0;\\r\n        let y = v - t;\\r\n        let x = w - y;\\r\n        return int2(x, y);\\r\n    }\\r\n\\r\n    pub fn hilbertRotate(n: int, b: int2, r: int2) -> int2 {\\r\n        let x = b.x;\\r\n        let y = b.y;\\r\n        if (r.y == 0) {\\r\n            if (r.x == 1) {\\r\n                x = n-1 - x;\\r\n                y = n-1 - y;\\r\n            }\\r\n\\r\n            let t = x;\\r\n            x = y;\\r\n            y = t;\\r\n        }\\r\n\\r\n        return int2(x, y);\\r\n    }\\r\n\\r\n    pub fn hilbertUncurve(n: int, v: int2) -> int {\\r\n        let x = v.x;\\r\n        let y = v.y;\\r\n        let rx: int = 0;\\r\n        let ry: int = 0;\\r\n        let s: int = 0;\\r\n        let d: int = 0;\\r\n        for (s=n/2; s>0; s/=2) {\\r\n            rx = ((x & s) > 0) ? 1 : 0;\\r\n            ry = ((y & s) > 0) ? 1 : 0;\\r\n            d += s * s * ((3 * rx) ^ ry);\\r\n            let o = spatial::hilbertRotate(n, (x, y), (rx, ry));\\r\n            x = o.x;\\r\n            y = o.y;\\r\n        }\\r\n        return d;\\r\n    }\\r\n\\r\n    pub fn hilbertCurve(n: int, v: int) -> int2 {\\r\n        let rx: int = 0;\\r\n        let ry: int = 0;\\r\n        let t = v;\\r\n        let x = 0;\\r\n        let y = 0;\\r\n        for (let s: int = 1; s < n; s *= 2) {\\r\n            rx = 1 & (t/2);\\r\n            ry = 1 & (t ^ rx);\\r\n            let o = spatial::hilbertRotate(s, (x, y), (rx, ry));\\r\n            x = o.x;\\r\n            y = o.y;\\r\n            x += s * rx;\\r\n            y += s * ry;\\r\n            t /= 4;\\r\n        }\\r\n\\r\n        return int2(x, y);\\r\n    }\\r\n\\r\n    pub fn mortonDecode(p: uint) -> uint2 {\\r\n        return uint2(reverseMortonCode2(p), reverseMortonCode2(p >> 1u));\\r\n    }\\r\n\\r\n    pub fn mortonEncode(p: uint2) -> uint {\\r\n        return uint(mortonCode2(p.x) | (mortonCode2(p.y) << 1u));\\r\n    }\\r\n\\r\n}\\r\n\\r\npub fn mortonCode2(x: uint) -> uint {\\r\n\tx = x & 0x0000ffffu;\\r\n    let n8 = 8u;\\r\n    let n4 = 4u;\\r\n    let n2 = 2u;\\r\n    let n1 = 1u;\\r\n\tx = (x ^ (x << n8)) & 0x00ff00ffu;\\r\n\tx = (x ^ (x << n4)) & 0x0f0f0f0fu;\\r\n\tx = (x ^ (x << n2)) & 0x33333333u;\\r\n\tx = (x ^ (x << n1)) & 0x55555555u;\\r\n\treturn x;\\r\n}\\r\n\\r\npub fn randColor(seed: float) -> float4 {\\r\n    return float4(rand2((seed,5)), rand2((seed, 1)), rand2((seed, 4)), 1);\\r\n}\\r\n\\r\npub fn randColor2(seed: float2) -> float4 {\\r\n    return float4(rand3((seed,5)), rand3((seed, 1)), rand3((seed, 4)), 1);\\r\n}\\r\n\\r\npub fn reverseMortonCode2(x: uint) -> uint {\\r\n    x = x & 0x55555555u;\\r\n    x = (x ^ (x >> 1u)) & 0x33333333u;\\r\n    x = (x ^ (x >> 2u)) & 0x0f0f0f0fu;\\r\n    x = (x ^ (x >> 4u)) & 0x00ff00ffu;\\r\n    x = (x ^ (x >> 8u)) & 0x0000ffffu;\\r\n    return x;\\r\n}\\r\n\\r\npub struct noise {};\\r\n\\r\n\\r\nconst PERLIN_YWRAPB = 4;\\r\nconst PERLIN_YWRAP = 1 << PERLIN_YWRAPB;\\r\nconst PERLIN_ZWRAPB = 8;\\r\nconst PERLIN_ZWRAP = 1 << PERLIN_ZWRAPB;\\r\nconst PERLIN_SIZE = 4095;\\r\n\\r\nlet perlin_octaves = 4; // default to medium smooth\\r\nlet perlin_amp_falloff = 0.5; // 50% reduction/octave\\r\n\\r\n\\r\nfn scaled_cosine(i: float) -> float {\\r\n    return 0.5 * (1.0 - cos(i * PI));\\r\n}\\r\n\\r\nlet perlin = buffer<float>(PERLIN_SIZE + 1);\\r\nfor (let i = 0; i < PERLIN_SIZE + 1; i++) {\\r\n    perlin[i] = rand(i);\\r\n}\\r\n\\r\n//\t<https://www.shadertoy.com/view/4dS3Wd>\\r\n//\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\\r\n//\\r\nfn hash(n: float) -> float { return frac(sin(n) * 1e4); }\\r\nfn hash2(p: float2) -> float { return frac(1e4 * sin(17.0 * p.x + p.y * 0.1) * (0.1 + abs(sin(p.y * 13.0 + p.x)))); }\\r\nfn hash3(p: float3) -> float { let h = dot(p, float3(127.1, 311.7, 74.7)); return frac(sin(h) * 43758.5453123); }\\r\n\\r\n\\r\n\\r\nimpl noise {\\r\n    pub fn gaussian3(v: float3) -> float {\\r\n        let p = v;\\r\n    \tlet a = floor(p);\\r\n\t    let d = p - a;\\r\n    \td = d * d * (3.0 - 2.0 * d);\\r\n\\r\n    \tlet b = a.xxyy + float4(0.0, 1.0, 0.0, 1.0);\\r\n    \tlet k1 = perm(b.xyxy);\\r\n    \tlet k2 = perm(k1.xyxy + b.zzww);\\r\n\\r\n    \tlet c = k2 + a.zzzz;\\r\n    \tlet k3 = perm(c);\\r\n    \tlet k4 = perm(c + 1.0);\\r\n\\r\n    \tlet o1 = frac(k3 * (1.0 / 41.0));\\r\n    \tlet o2 = frac(k4 * (1.0 / 41.0));\\r\n\\r\n    \tlet o3 = o2 * d.z + o1 * (1.0 - d.z);\\r\n    \tlet o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);\\r\n\\r\n    \treturn o4.y * d.y + o4.x * (1.0 - d.y);\\r\n    }\\r\n    \\r\n    pub fn gaussian2(v: float2) -> float {\\r\n        return noise::gaussian3((v, 0));\\r\n    }\\r\n\\r\n    pub fn noise1(x: float) {\\r\n        let i = floor(x);\\r\n        let f = frac(x);\\r\n        let u = f * f * (3.0 - 2.0 * f);\\r\n        return lerp(hash(i), hash(i + 1.0), u);\\r\n    }\\r\n\\r\n    pub fn noise2(x: float2) -> float {\\r\n        let i = floor(x);\\r\n        let f = frac(x);\\r\n\\r\n        // Four corners in 2D of a tile\\r\n        let a = hash2(i);\\r\n        let b = hash2(i + float2(1.0, 0.0));\\r\n        let c = hash2(i + float2(0.0, 1.0));\\r\n        let d = hash2(i + float2(1.0, 1.0));\\r\n\\r\n        // Simple 2D lerp using smoothstep envelope between the values.\\r\n        // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\\r\n        //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\\r\n        //\t\t\tsmoothstep(0.0, 1.0, f.y)));\\r\n\\r\n        // Same code, with the clamps in smoothstep and common subexpressions\\r\n        // optimized away.\\r\n        let u = f * f * (3.0 - 2.0 * f);\\r\n        return lerp(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\\r\n    }\\r\n\\r\n    pub fn fmb1(x: float) -> float {\\r\n        let v = 0.0;\\r\n        let a = 0.5;\\r\n        let shift = float(100);\\r\n        for (let i = 0; i < 5; i++) {\\r\n            v += a * noise::noise1(x);\\r\n            x = x * 2.0 + shift;\\r\n            a *= 0.5;\\r\n        }\\r\n        return v;\\r\n    }\\r\n\\r\n    pub fn fbm2(x: float2) -> float {\\r\n        let v = 0.0;\\r\n        let a = 0.5;\\r\n        let shift = float2(100.xy);\\r\n        // Rotate to reduce axial bias\\r\n        let rot = float2x2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50));\\r\n        for (let i = 0; i < 5; i++) {\\r\n            v += a * noise::noise2(x);\\r\n            x = rot * x * 2.0 + shift;\\r\n            a *= 0.5;\\r\n        }\\r\n        return v;\\r\n    }\\r\n\\r\n    pub fn fbm3(x: float3) -> float {\\r\n        let v = 0.0;\\r\n        let a = 0.5;\\r\n        let shift = float3(100.xyz);\\r\n        for (let i = 0; i < 5; i++) {\\r\n            v += a * noise::noise3(x);\\r\n            x = x * 2.0 + shift;\\r\n            a *= 0.5;\\r\n        }\\r\n        return v;\\r\n    }\\r\n\\r\n    pub fn noise3(x: float3) -> float {\\r\n        const step = float3(110, 241, 171);\\r\n\\r\n        let i = floor(x);\\r\n        let f = frac(x);\\r\n    \\r\n        // For performance, compute the base input to a 1D hash from the integer part of the argument and the \\r\n        // incremental change to the 1D based on the 3D -> 1D wrapping\\r\n        let n = dot(i, step);\\r\n\\r\n        let u = f * f * (3.0 - 2.0 * f);\\r\n        return lerp(lerp(lerp( hash(n + dot(step, float3(0, 0, 0))), hash(n + dot(step, float3(1, 0, 0))), u.x),\\r\n                lerp( hash(n + dot(step, float3(0, 1, 0))), hash(n + dot(step, float3(1, 1, 0))), u.x), u.y),\\r\n                lerp(lerp( hash(n + dot(step, float3(0, 0, 1))), hash(n + dot(step, float3(1, 0, 1))), u.x),\\r\n                lerp( hash(n + dot(step, float3(0, 1, 1))), hash(n + dot(step, float3(1, 1, 1))), u.x), u.y), u.z);\\r\n    }\\r\n\\r\n    pub fn simplex2(v: float2) -> float {\\r\n        let C = float4(0.211324865405187,\\r\n                            0.366025403784439,\\r\n                            -0.577350269189626,\\r\n                            0.024390243902439);\\r\n\\r\n        let i  = floor(v + dot(v, C.yy));\\r\n        let x0 = v -   i + dot(i, C.xx);\\r\n\\r\n        let xv = step(x0.y, x0.x);\\r\n        \\r\n        let i1 = float2(xv, 1.0 - xv);\\r\n\\r\n        let x1 = x0 + C.xx - i1;\\r\n        let x2 = x0 + C.zz;\\r\n\\r\n        \\r\n        i = mod289_2(i);\\r\n        let p =\\r\n        permute(\\r\n            permute(float3(0.0, i1.y, 1.0) + i.y)\\r\n                        + float3(0.0, i1.x, 1.0) + i.x);\\r\n\\r\n        let m = max(0.5.xyz - float3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), 0.0);\\r\n        m = m * m;\\r\n        m = m * m;\\r\n\\r\n        let x = 2.0 * frac(p * C.www) - 1.0;\\r\n        let h = abs(x) - 0.5;\\r\n        let ox = floor(x + 0.5);\\r\n        let a0 = x - ox;\\r\n\\r\n        // Normalise gradients implicitly by scaling m\\r\n        m *= taylorInvSqrt(a0 * a0 + h * h);\\r\n\\r\n        // Compute final noise value at P\\r\n        let g = float3(\\r\n            a0.x * x0.x + h.x * x0.y,\\r\n            a0.y * x1.x + h.y * x1.y,\\r\n            a0.z * x2.x + h.z * x2.y\\r\n        );\\r\n        return 130.0 * dot(m, g);\\r\n    }\\r\n    \\r\n    pub fn perlin2(v: float2) -> float {\\r\n    let x = v.x;\\r\n    let y = v.y;\\r\n    let z = 0.0;\\r\n\\r\n        if (x < 0) {\\r\n            x = -x;\\r\n        }\\r\n        if (y < 0) {\\r\n            y = -y;\\r\n        }\\r\n        if (z < 0) {\\r\n            z = -z;\\r\n        }\\r\n\\r\n        let xi = int(floor(x)),\\r\n            yi = int(floor(y)),\\r\n            zi = int(floor(z));\\r\n        let xf = x - xi;\\r\n        let yf = y - yi;\\r\n        let zf = z - zi;\\r\n        let rxf = 0.0, ryf = 0.0;\\r\n\\r\n        let r = 0.0;\\r\n        let ampl = 0.5;\\r\n\\r\n        let n1= 0.0, n2 = 0.0, n3 = 0.0;\\r\n\\r\n        for (let o = 0; o < perlin_octaves; o++) {\\r\n            let of1: int = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\\r\n\\r\n            rxf = scaled_cosine(xf);\\r\n            ryf = scaled_cosine(yf);\\r\n\\r\n            n1 = perlin[of1 & PERLIN_SIZE];\\r\n            n1 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n1);\\r\n            n2 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);\\r\n            n1 += ryf * (n2 - n1);\\r\n\\r\n            of1 += PERLIN_ZWRAP;\\r\n            n2 = perlin[of1 & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n2);\\r\n            n3 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n3 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);\\r\n            n2 += ryf * (n3 - n2);\\r\n\\r\n            n1 += scaled_cosine(zf) * (n2 - n1);\\r\n\\r\n            r += n1 * ampl;\\r\n            ampl *= perlin_amp_falloff;\\r\n            xi = xi << 1;\\r\n            xf *= 2.0;\\r\n            yi = yi << 1;\\r\n            yf *= 2.0;\\r\n            zi = zi << 1;\\r\n            zf *= 2.0;\\r\n\\r\n            if (xf >= 1.0) {\\r\n            xi++;\\r\n            xf-= 1.0;\\r\n            }\\r\n            if (yf >= 1.0) {\\r\n            yi++;\\r\n            yf-= 1.0;\\r\n            }\\r\n            if (zf >= 1.0) {\\r\n            zi++;\\r\n            zf-= 1.0;\\r\n            }\\r\n        }\\r\n        return r;\\r\n\\r\n    }\\r\n\\r\n    pub fn perlin3(v: float3) -> float {\\r\n        let x = v.x;\\r\n        let y = v.y;\\r\n        let z = v.z;\\r\n\\r\n        if (x < 0) {\\r\n            x = -x;\\r\n        }\\r\n        if (y < 0) {\\r\n            y = -y;\\r\n        }\\r\n        if (z < 0) {\\r\n            z = -z;\\r\n        }\\r\n\\r\n        let xi = int(floor(x)),\\r\n            yi = int(floor(y)),\\r\n            zi = int(floor(z));\\r\n        let xf = x - xi;\\r\n        let yf = y - yi;\\r\n        let zf = z - zi;\\r\n        let rxf = 0.0, ryf = 0.0;\\r\n\\r\n        let r = 0.0;\\r\n        let ampl = 0.5;\\r\n\\r\n        let n1= 0.0, n2 = 0.0, n3 = 0.0;\\r\n\\r\n        for (let o = 0; o < perlin_octaves; o++) {\\r\n            let of1: int = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\\r\n\\r\n            rxf = scaled_cosine(xf);\\r\n            ryf = scaled_cosine(yf);\\r\n\\r\n            n1 = perlin[of1 & PERLIN_SIZE];\\r\n            n1 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n1);\\r\n            n2 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);\\r\n            n1 += ryf * (n2 - n1);\\r\n\\r\n            of1 += PERLIN_ZWRAP;\\r\n            n2 = perlin[of1 & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n2);\\r\n            n3 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n3 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);\\r\n            n2 += ryf * (n3 - n2);\\r\n\\r\n            n1 += scaled_cosine(zf) * (n2 - n1);\\r\n\\r\n            r += n1 * ampl;\\r\n            ampl *= perlin_amp_falloff;\\r\n            xi = xi << 1;\\r\n            xf *= 2.0;\\r\n            yi = yi << 1;\\r\n            yf *= 2.0;\\r\n            zi = zi << 1;\\r\n            zf *= 2.0;\\r\n\\r\n            if (xf >= 1.0) {\\r\n            xi++;\\r\n            xf-= 1.0;\\r\n            }\\r\n            if (yf >= 1.0) {\\r\n            yi++;\\r\n            yf-= 1.0;\\r\n            }\\r\n            if (zf >= 1.0) {\\r\n            zi++;\\r\n            zf-= 1.0;\\r\n            }\\r\n        }\\r\n        return r;\\r\n    }\\r\n\\r\n    /**\\r\n    * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\\r\n    */\\r\n    pub fn voronoi2(v: float2) -> float3 {\\r\n        let n = floor(v);\\r\n        let minDist = 10.0;\\r\n        let toClose = 0.0.xy;\\r\n        let closestCell = 0.0.xy;\\r\n        \\r\n        \\r\n        for (let j = -1; j <= 1; j++) {\\r\n            for (let i = -1; i <= 1; i++) {\\r\n                let cell = n + float2(i, j);\\r\n                let cellPos = cell + hash2(cell);\\r\n                let toCell = cellPos - v;\\r\n                let dst = length(toCell);\\r\n                if (dst < minDist) {\\r\n                    minDist = dst;\\r\n                    toClose = toCell;\\r\n                    closestCell = cell;\\r\n                }\\r\n            }\\r\n        }\\r\n        \\r\n        let minEdge = 10.0;\\r\n        for (let j = -1; j <= 1; j++) {\\r\n            for (let i = -1; i <= 1; i++) {\\r\n                let cell = n + float2(i, j);\\r\n                let cellPos = cell + hash2(cell);\\r\n                let toCell = cellPos - v;\\r\n                let diff = abs(closestCell - cell);\\r\n                let isClosest = diff.x + diff.y < 0.1;\\r\n                if (!isClosest) {\\r\n                    let toCenter = (toClose + toCell) * 0.5;\\r\n                    let cellDiff = normalize(toCell - toClose);\\r\n                    let edge = dot(toCenter, cellDiff);\\r\n                    minEdge = min(minEdge, edge);\\r\n                }\\r\n            }\\r\n        }\\r\n\\r\n        let random = hash2(closestCell);\\r\n        return float3(minDist, random, minEdge);\\r\n    }\\r\n\\r\n    pub fn simplex3(v: float3) -> float {\\r\n        let C = float4(0.138196601125011,\\r\n                            0.276393202250021,\\r\n                            0.414589803375032,\\r\n                            -0.447213595499958);\\r\n\\r\n        let i  = floor(v + dot(v, C.yyy));\\r\n        let x0 = v -   i + dot(i, C.xxx);\\r\n\\r\n        let g = step(x0.yzx, x0.xyz);\\r\n        let l = 1.0 - g;\\r\n        let i1 = min(g.xyz, l.zxy);\\r\n        let i2 = max(g.xyz, l.zxy);\\r\n\\r\n        let x1 = x0 - i1 + 1.0 * C.xxx;\\r\n        let x2 = x0 - i2 + 2.0 * C.xxx;\\r\n        let x3 = x0 - 1. + 3.0 * C.xxx;\\r\n\\r\n        i = mod289_3(i);\\r\n        let p =\\r\n        permute(\\r\n            permute(\\r\n                permute(i.z + float3(0.0, i1.z, i2.z))\\r\n                + i.y + float3(0.0, i1.y, i2.y))\\r\n                + i.x + float3(0.0, i1.x, i2.x));\\r\n\\r\n        let m = max(0.5 - float3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);\\r\n        m = m * m;\\r\n        m = m * m;\\r\n\\r\n        let x = 2.0 * frac(p * C.www) - 1.0;\\r\n        let h = abs(x) - 0.5;\\r\n        let ox = floor(x + 0.5);\\r\n        let a0 = x - ox;\\r\n\\r\n        // Normalise gradients implicitly by scaling m\\r\n        // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\\r\n        m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\\r\n\\r\n        // Compute final noise value at P\\r\n        let g2 = float3(\\r\n            a0.x * x0.x + h.x * x0.y,\\r\n            a0.y * x1.x + h.y * x1.y,\\r\n            a0.z * x2.x + h.z * x2.y\\r\n        );\\r\n        return 130.0 * dot(m, g2);\\r\n    }\\r\n}\\r\n\\r\nfn mod289_1(x: float) -> float { return x - floor(x * (1.0 / 289.0)) * 289.0;}\\r\nfn mod289_4(x: float4) -> float4 { return x - floor(x * (1.0 / 289.0)) * 289.0;}\\r\nfn perm(x: float4) -> float4  { return mod289_4(((x * 34.0) + 1.0) * x);}\\r\n\\r\nfn mod289_3(x: float3) -> float3 {\\r\n    return x - floor(x * (1.0 / 289.0)) * 289.0;\\r\n}\\r\n\\r\nfn mod289_2(x: float2) -> float2 {\\r\n    return x - floor(x * (1.0 / 289.0)) * 289.0;\\r\n}\\r\n\\r\nfn permute(x: float3) -> float3 {\\r\n    return mod289_3((x * 34.0 + 1.0) * x);\\r\n}\\r\n\\r\nfn taylorInvSqrt(r: float3) -> float3 {\\r\n    return 1.79284291400159 - 0.85373472095314 * r;\\r\n}\\r\n\\r\npub struct matrix {}\\r\n\\r\nimpl matrix {\\r\n    pub fn lookAt(from: float3, to: float3, up: float3) -> float4x4 {\\r\n        let zAxis = normalize(from - to);\\r\n        let xAxis = normalize(cross(up, zAxis));\\r\n        let yAxis = normalize(cross(zAxis, xAxis));\\r\n        let dst = float4x4();\\r\n        dst[0][0] = xAxis.x;  dst[0][1] = yAxis.x;  dst[0][2] = zAxis.x;  dst[0][3] = 0;\\r\n        dst[1][0] = xAxis.y;  dst[1][1] = yAxis.y;  dst[1][2] = zAxis.y;  dst[1][3] = 0;\\r\n        dst[2][0] = xAxis.z;  dst[2][1] = yAxis.z;  dst[2][2] = zAxis.z;  dst[2][3] = 0;\\r\n\\r\n        dst[3][0] = -(xAxis.x * from.x + xAxis.y * from.y + xAxis.z * from.z);\\r\n        dst[3][1] = -(yAxis.x * from.x + yAxis.y * from.y + yAxis.z * from.z);\\r\n        dst[3][2] = -(zAxis.x * from.x + zAxis.y * from.y + zAxis.z * from.z);\\r\n        dst[3][3] = 1;\\r\n\\r\n        return dst;\\r\n\\r\n        let forward = normalize(from - to); \\r\n        \\r\n        let right = normalize(cross(up, forward)); \\r\n        \\r\n        let newup = cross(forward, right); \\r\n        let m = float4x4();\\r\n        m[0][0] = right.x,   m[0][1] = right.y,   m[0][2] = right.z; \\r\n        m[1][0] = newup.x,   m[1][1] = newup.y,   m[1][2] = newup.z; \\r\n        m[2][0] = forward.x, m[2][1] = forward.y, m[2][2] = forward.z; \\r\n        m[3][0] = from.x,    m[3][1] = from.y,    m[3][2] = from.z; \\r\n\\r\n        return m;\\r\n\\r\n    }\\r\n\\r\n\\r\n    pub fn perspective(fov: float, aspect: float, near: float, far: float) -> float4x4 {\\r\n        \\r\n        // set the basic projection matrix\\r\n        // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \\r\n        // let M = float4x4();\\r\n        // M[0][0] = scale;  //scale the x coordinates of the projected point \\r\n        // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \\r\n        // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \\r\n        // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \\r\n        // M[2][3] = -1;  //set w = -z \\r\n        // M[3][3] = 0; \\r\n\\r\n        //return M;\\r\n\\r\n        let fovRad = radians(fov);\\r\n        let tanFov = tan( fovRad * 0.5 );\\r\n\\r\n        let matrx = float4x4(\\r\n            1.0 / (tanFov * aspect), 0, 0, 0,\\r\n            0, 1.0 / tanFov, 0, 0,\\r\n            0, 0, -((far + near)/(far - near)), -1,\\r\n            0, 0, -((2*(near*far))/(far - near)), 0\\r\n        );\\r\n\\r\n        return matrx;\\r\n    }\\r\n\\r\n    pub fn perspectiveReverseZ(fov: float, aspect: float, near: float) -> float4 {\\r\n        // let scale = 1.0 / tan(fov * 0.5 * PI / 180);\\r\n        // let far = 10000000.0;\\r\n        // let M = float4x4();\\r\n        // M[0][0] = scale;  //scale the x coordinates of the projected point \\r\n        // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \\r\n        // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \\r\n        // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \\r\n        // M[2][3] = 0;  //set w = -z \\r\n        // M[3][3] = 0; \\r\n        // return M;\\r\n\\r\n        let matrx = float4x4(\\r\n            1, 0, 0, 0,\\r\n            0, 1, 0, 0,\\r\n            0, 0, -1, 0,\\r\n            0, 0, 1, 1\\r\n        ) * matrix::perspective(fov, aspect, near, 10000000.0);\\r\n\\r\n        return matrx;\\r\n    }\\r\n}\\r\n\\r\n/**\\r\n* Uses Super Sampling Anti Aliasing to smooth out the image.\\r\n*/\\r\npub fn screenAA(inScreenPos: float2, gridSize: int, func: (screenPos: float2) -> float4) {\\r\n    let weightSum = 0.0;\\r\n    let accumulatedColor = float4(0, 0, 0, 0);\\r\n\\r\n    for (let y = 0; y < gridSize; y++) {\\r\n        for (let x = 0; x < gridSize; x++) {\\r\n            let offset = float2(\\r\n                (x + 0.5 - gridSize * 0.5) / gridSize,\\r\n                (y + 0.5 - gridSize * 0.5) / gridSize\\r\n            );\\r\n            \\r\n            let weight = exp(-dot(offset, offset) * 5); // Gaussian weight\\r\n            accumulatedColor += func(inScreenPos + offset) * weight;\\r\n            weightSum += weight;\\r\n        }\\r\n    }\\r\n\\r\n    return accumulatedColor / weightSum;\\r\n}\\r\n\\r\n\\r\n// Color conversion helpers\\r\n// A color = float4 containing rgba values in the range [0, 1]\\r\n// All functions have an extra alpha functon and a reverse\\r\n// i.e. hsl, hsla, hslFromColor, hslaFromColor\\r\n// fn hsl(v: float3) -> float4\\r\n\\r\npub fn hsl(v: float3) -> float4 {\\r\n    return hsla((v, 1));\\r\n}\\r\n\\r\npub fn hsla(v: float4) -> float4 {\\r\n    let h = v.x;\\r\n    let s = v.y;\\r\n    let l = v.z;\\r\n    let a = v.w;\\r\n    let c = (1 - abs(2 * l - 1)) * s;\\r\n    let x = c * (1 - abs(((h / 60) % 2) - 1));\\r\n    let m = l - c / 2;\\r\n    let r = 0.0;\\r\n    let g = 0.0;\\r\n    let b = 0.0;\\r\n    if (h < 60) {\\r\n        r = c;\\r\n        g = x;\\r\n        b = 0;\\r\n    } else if (h < 120) {\\r\n        r = x;\\r\n        g = c;\\r\n        b = 0;\\r\n    } else if (h < 180) {\\r\n        r = 0;\\r\n        g = c;\\r\n        b = x;\\r\n    } else if (h < 240) {\\r\n        r = 0;\\r\n        g = x;\\r\n        b = c;\\r\n    } else if (h < 300) {\\r\n        r = x;\\r\n        g = 0;\\r\n        b = c;\\r\n    } else {\\r\n        r = c;\\r\n        g = 0;\\r\n        b = x;\\r\n    }\\r\n    return float4(r + m, g + m, b + m, a);\\r\n}\\r\n\\r\npub fn hslFromColor(c: float4) -> float3 {\\r\n    let r = c.r;\\r\n    let g = c.g;\\r\n    let b = c.b;\\r\n    let a = c.a;\\r\n    let mx = max(r, max(g, b));\\r\n    let mn = min(r, min(g, b));\\r\n    let h = 0.0;\\r\n    let s = 0.0;\\r\n    let l = (mx + mn) / 2;\\r\n    if (mx == mn) {\\r\n        h = 0;\\r\n        s = 0;\\r\n    } else {\\r\n        let d = mx - mn;\\r\n        s = (l > 0.5) ? d / (2 - mx - mn) : d / (mx + mn);\\r\n        if (mx == r) {\\r\n            h = (g - b) / d + ((g < b) ? 6:0);\\r\n        } else if (mx == g) {\\r\n            h = (b - r) / d + 2;\\r\n        } else if (mx == b) {\\r\n            h = (r - g) / d + 4;\\r\n        }\\r\n        h /= 6;\\r\n    }\\r\n    return float3(h * 360, s, l);\\r\n}\\r\n\\r\npub fn hslaFromColor(c: float4) -> float4 {\\r\n    let hsl = hslFromColor(c);\\r\n    return float4(hsl, c.a);\\r\n}\\r\n\\r\npub fn hsv(v: float3) -> float4 {\\r\n    return hsva((v, 1));\\r\n}\\r\n\\r\npub fn hsva(val: float4) -> float4 {\\r\n    let h = val.x;\\r\n    let s = val.y;\\r\n    let v = val.z;\\r\n    let a = val.w;\\r\n    let c = v * s;\\r\n    let x = c * (1 - abs(mod(h / 60, 2) - 1));\\r\n    let m = v - c;\\r\n    let r = 0.0;\\r\n    let g = 0.0;\\r\n    let b = 0.0;\\r\n    if (h < 60) {\\r\n        r = c;\\r\n        g = x;\\r\n        b = 0;\\r\n    } else if (h < 120) {\\r\n        r = x;\\r\n        g = c;\\r\n        b = 0;\\r\n    } else if (h < 180) {\\r\n        r = 0;\\r\n        g = c;\\r\n        b = x;\\r\n    } else if (h < 240) {\\r\n        r = 0;\\r\n        g = x;\\r\n        b = c;\\r\n    } else if (h < 300) {\\r\n        r = x;\\r\n        g = 0;\\r\n        b = c;\\r\n    } else {\\r\n        r = c;\\r\n        g = 0;\\r\n        b = x;\\r\n    }\\r\n    return float4(r + m, g + m, b + m, a);\\r\n}\\r\n\\r\npub fn hsvFromColor(c: float4) -> float3 {\\r\n    let r = c.r;\\r\n    let g = c.g;\\r\n    let b = c.b;\\r\n    let mx = max(r, max(g, b));\\r\n    let mn = min(r, min(g, b));\\r\n    let h = 0.0;\\r\n    let s = 0.0;\\r\n    let v = mx;\\r\n    let d = mx - mn;\\r\n    s = (mx == 0) ? 0 :  d / mx ;\\r\n    if (mx == mn) {\\r\n        h = 0;\\r\n    } else {\\r\n        if (mx == r) {\\r\n            h = (g - b) / d + ((g < b) ? 6 : 0 );\\r\n        } else if (mx == g) {\\r\n            h = (b - r) / d + 2;\\r\n        } else if (mx == b) {\\r\n            h = (r - g) / d + 4;\\r\n        }\\r\n        h /= 6;\\r\n    }\\r\n    return float3(h * 360, s, v);\\r\n}\\r\n\\r\npub fn hsvaFromColor(c: float4) -> float4 {\\r\n    let hsv = hsvFromColor(c);\\r\n    return float4(hsv, c.a);\\r\n}\\r\n\\r\npub fn rgb(v: float3) -> float4 {\\r\n    return float4(v / 255.0, 1);\\r\n}\\r\n\\r\npub fn rgba(v: float4) -> float4 {\\r\n    return float4(v / 255.0);\\r\n}\\r\n\\r\npub fn rgbFromColor(c: float4) -> float3 {\\r\n    return c.rgb * 255.0;\\r\n}\\r\n\\r\npub fn rgbaFromColor(c: float4) -> float4 {\\r\n    return c * 255.0;\\r\n}\\r\n\\r\npub fn cmyk(v: float4) -> float4 {\\r\n    let c = v.r;\\r\n    let m = v.g;\\r\n    let y = v.b;\\r\n    let k = v.a;\\r\n    let r = 1 - min(1, c * (1 - k) + k);\\r\n    let g = 1 - min(1, m * (1 - k) + k);\\r\n    let b = 1 - min(1, y * (1 - k) + k);\\r\n    return float4(r, g, b, 1);\\r\n}\\r\n\\r\npub fn cmykFromColor(c: float4) -> float4 {\\r\n    let r = c.r;\\r\n    let g = c.g;\\r\n    let b = c.b;\\r\n    let k = 1 - max(r, max(g, b));\\r\n    let c1 = (1 - r - k) / (1 - k);\\r\n    let m = (1 - g - k) / (1 - k);\\r\n    let y = (1 - b - k) / (1 - k);\\r\n    return float4(c1, m, y, k);\\r\n}\\r\n\\r\npub fn hex(v: int) -> float4 {\\r\n    let r: float = (v >> 16) & 0xFF;\\r\n    let g: float = (v >> 8) & 0xFF;\\r\n    let b: float = v & 0xFF;\\r\n    return float4(r / 255.0, g / 255.0, b / 255.0, 1.0);\\r\n}\\r\n\\r\npub fn hexFromColor(c: float4) -> int {\\r\n    let r = int(c.r * 255.0);\\r\n    let g = int(c.g * 255.0);\\r\n    let b = int(c.b * 255.0);\\r\n    return (r << 16) | (g << 8) | b;\\r\n}\\r\n\\r\n/**\\r\n* Returns sin remapped to [0, 1]\\r\n*/\\r\npub fn sin1(v: float) -> float {\\r\n    return (sin(v) + 1) * 0.5;\\r\n}\\r\n\\r\n/**\\r\n* Returns cos remapped to [0, 1]\\r\n*/\\r\npub fn cos1(v: float) -> float {\\r\n    return (cos(v) + 1) * 0.5;\\r\n}\\r\n\\r\n/**\\r\n* Returns tan remapped to [0, 1]\\r\n*/\\r\npub fn tan1(v: float) -> float {\\r\n    return (tan(v) + 1) * 0.5;\\r\n}\\r\n\\r\npub fn remap(v: float, low1: float, high1: float, low2: float, high2: float) -> float {\\r\n    return low2 + (v - low1) * (high2 - low2) / (high1 - low1);\\r\n}\\r\n\\r\npub fn remap1(v: float, low: float, high: float) -> float {\\r\n    return remap(v, low, high, 0, 1);\\r\n}\\r\n\\r\npub struct color {\\r\n\tstatic slate50: float4 = float4(0.9725490196078431, 0.9803921568627451, 0.9882352941176471, 1);\\r\n\tstatic slate100: float4 = float4(0.9450980392156862, 0.9607843137254902, 0.9764705882352941, 1);\\r\n\tstatic slate200: float4 = float4(0.8862745098039215, 0.9098039215686274, 0.9411764705882353, 1);\\r\n\tstatic slate300: float4 = float4(0.796078431372549, 0.8352941176470589, 0.8823529411764706, 1);\\r\n\tstatic slate400: float4 = float4(0.5803921568627451, 0.6392156862745098, 0.7215686274509804, 1);\\r\n\tstatic slate500: float4 = float4(0.39215686274509803, 0.4549019607843137, 0.5450980392156862, 1);\\r\n\tstatic slate600: float4 = float4(0.2784313725490196, 0.3333333333333333, 0.4117647058823529, 1);\\r\n\tstatic slate700: float4 = float4(0.2, 0.2549019607843137, 0.3333333333333333, 1);\\r\n\tstatic slate800: float4 = float4(0.11764705882352941, 0.1607843137254902, 0.23137254901960785, 1);\\r\n\tstatic slate900: float4 = float4(0.058823529411764705, 0.09019607843137255, 0.16470588235294117, 1);\\r\n\tstatic slate950: float4 = float4(0.00784313725490196, 0.023529411764705882, 0.09019607843137255, 1);\\r\n\tstatic gray50: float4 = float4(0.9764705882352941, 0.9803921568627451, 0.984313725490196, 1);\\r\n\tstatic gray100: float4 = float4(0.9529411764705882, 0.9568627450980393, 0.9647058823529412, 1);\\r\n\tstatic gray200: float4 = float4(0.8980392156862745, 0.9058823529411765, 0.9215686274509803, 1);\\r\n\tstatic gray300: float4 = float4(0.8196078431372549, 0.8352941176470589, 0.8588235294117647, 1);\\r\n\tstatic gray400: float4 = float4(0.611764705882353, 0.6392156862745098, 0.6862745098039216, 1);\\r\n\tstatic gray500: float4 = float4(0.4196078431372549, 0.4470588235294118, 0.5019607843137255, 1);\\r\n\tstatic gray600: float4 = float4(0.29411764705882354, 0.3333333333333333, 0.38823529411764707, 1);\\r\n\tstatic gray700: float4 = float4(0.21568627450980393, 0.2549019607843137, 0.3176470588235294, 1);\\r\n\tstatic gray800: float4 = float4(0.12156862745098039, 0.1607843137254902, 0.21568627450980393, 1);\\r\n\tstatic gray900: float4 = float4(0.06666666666666667, 0.09411764705882353, 0.15294117647058825, 1);\\r\n\tstatic gray950: float4 = float4(0.011764705882352941, 0.027450980392156862, 0.07058823529411765, 1);\\r\n\tstatic zinc50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\\r\n\tstatic zinc100: float4 = float4(0.9568627450980393, 0.9568627450980393, 0.9607843137254902, 1);\\r\n\tstatic zinc200: float4 = float4(0.8941176470588236, 0.8941176470588236, 0.9058823529411765, 1);\\r\n\tstatic zinc300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8470588235294118, 1);\\r\n\tstatic zinc400: float4 = float4(0.6313725490196078, 0.6313725490196078, 0.6666666666666666, 1);\\r\n\tstatic zinc500: float4 = float4(0.44313725490196076, 0.44313725490196076, 0.47843137254901963, 1);\\r\n\tstatic zinc600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3568627450980392, 1);\\r\n\tstatic zinc700: float4 = float4(0.24705882352941178, 0.24705882352941178, 0.27450980392156865, 1);\\r\n\tstatic zinc800: float4 = float4(0.15294117647058825, 0.15294117647058825, 0.16470588235294117, 1);\\r\n\tstatic zinc900: float4 = float4(0.09411764705882353, 0.09411764705882353, 0.10588235294117647, 1);\\r\n\tstatic zinc950: float4 = float4(0.03529411764705882, 0.03529411764705882, 0.043137254901960784, 1);\\r\n\tstatic neutral50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\\r\n\tstatic neutral100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9607843137254902, 1);\\r\n\tstatic neutral200: float4 = float4(0.8980392156862745, 0.8980392156862745, 0.8980392156862745, 1);\\r\n\tstatic neutral300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8313725490196079, 1);\\r\n\tstatic neutral400: float4 = float4(0.6392156862745098, 0.6392156862745098, 0.6392156862745098, 1);\\r\n\tstatic neutral500: float4 = float4(0.45098039215686275, 0.45098039215686275, 0.45098039215686275, 1);\\r\n\tstatic neutral600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3215686274509804, 1);\\r\n\tstatic neutral700: float4 = float4(0.25098039215686274, 0.25098039215686274, 0.25098039215686274, 1);\\r\n\tstatic neutral800: float4 = float4(0.14901960784313725, 0.14901960784313725, 0.14901960784313725, 1);\\r\n\tstatic neutral900: float4 = float4(0.09019607843137255, 0.09019607843137255, 0.09019607843137255, 1);\\r\n\tstatic neutral950: float4 = float4(0.0392156862745098, 0.0392156862745098, 0.0392156862745098, 1);\\r\n\tstatic stone50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9764705882352941, 1);\\r\n\tstatic stone100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9568627450980393, 1);\\r\n\tstatic stone200: float4 = float4(0.9058823529411765, 0.8980392156862745, 0.8941176470588236, 1);\\r\n\tstatic stone300: float4 = float4(0.8392156862745098, 0.8274509803921568, 0.8196078431372549, 1);\\r\n\tstatic stone400: float4 = float4(0.6588235294117647, 0.6352941176470588, 0.6196078431372549, 1);\\r\n\tstatic stone500: float4 = float4(0.47058823529411764, 0.44313725490196076, 0.4235294117647059, 1);\\r\n\tstatic stone600: float4 = float4(0.3411764705882353, 0.3254901960784314, 0.3058823529411765, 1);\\r\n\tstatic stone700: float4 = float4(0.26666666666666666, 0.25098039215686274, 0.23529411764705882, 1);\\r\n\tstatic stone800: float4 = float4(0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1);\\r\n\tstatic stone900: float4 = float4(0.10980392156862745, 0.09803921568627451, 0.09019607843137255, 1);\\r\n\tstatic stone950: float4 = float4(0.047058823529411764, 0.0392156862745098, 0.03529411764705882, 1);\\r\n\tstatic red50: float4 = float4(0.996078431372549, 0.9490196078431372, 0.9490196078431372, 1);\\r\n\tstatic red100: float4 = float4(0.996078431372549, 0.8862745098039215, 0.8862745098039215, 1);\\r\n\tstatic red200: float4 = float4(0.996078431372549, 0.792156862745098, 0.792156862745098, 1);\\r\n\tstatic red300: float4 = float4(0.9882352941176471, 0.6470588235294118, 0.6470588235294118, 1);\\r\n\tstatic red400: float4 = float4(0.9725490196078431, 0.44313725490196076, 0.44313725490196076, 1);\\r\n\tstatic red500: float4 = float4(0.9372549019607843, 0.26666666666666666, 0.26666666666666666, 1);\\r\n\tstatic red600: float4 = float4(0.8627450980392157, 0.14901960784313725, 0.14901960784313725, 1);\\r\n\tstatic red700: float4 = float4(0.7254901960784313, 0.10980392156862745, 0.10980392156862745, 1);\\r\n\tstatic red800: float4 = float4(0.6, 0.10588235294117647, 0.10588235294117647, 1);\\r\n\tstatic red900: float4 = float4(0.4980392156862745, 0.11372549019607843, 0.11372549019607843, 1);\\r\n\tstatic red950: float4 = float4(0.27058823529411763, 0.0392156862745098, 0.0392156862745098, 1);\\r\n\tstatic orange50: float4 = float4(1, 0.9686274509803922, 0.9294117647058824, 1);\\r\n\tstatic orange100: float4 = float4(1, 0.9294117647058824, 0.8352941176470589, 1);\\r\n\tstatic orange200: float4 = float4(0.996078431372549, 0.8431372549019608, 0.6666666666666666, 1);\\r\n\tstatic orange300: float4 = float4(0.9921568627450981, 0.7294117647058823, 0.4549019607843137, 1);\\r\n\tstatic orange400: float4 = float4(0.984313725490196, 0.5725490196078431, 0.23529411764705882, 1);\\r\n\tstatic orange500: float4 = float4(0.9764705882352941, 0.45098039215686275, 0.08627450980392157, 1);\\r\n\tstatic orange600: float4 = float4(0.9176470588235294, 0.34509803921568627, 0.047058823529411764, 1);\\r\n\tstatic orange700: float4 = float4(0.7607843137254902, 0.2549019607843137, 0.047058823529411764, 1);\\r\n\tstatic orange800: float4 = float4(0.6039215686274509, 0.20392156862745098, 0.07058823529411765, 1);\\r\n\tstatic orange900: float4 = float4(0.48627450980392156, 0.17647058823529413, 0.07058823529411765, 1);\\r\n\tstatic orange950: float4 = float4(0.2627450980392157, 0.0784313725490196, 0.027450980392156862, 1);\\r\n\tstatic amber50: float4 = float4(1, 0.984313725490196, 0.9215686274509803, 1);\\r\n\tstatic amber100: float4 = float4(0.996078431372549, 0.9529411764705882, 0.7803921568627451, 1);\\r\n\tstatic amber200: float4 = float4(0.9921568627450981, 0.9019607843137255, 0.5411764705882353, 1);\\r\n\tstatic amber300: float4 = float4(0.9882352941176471, 0.8274509803921568, 0.30196078431372547, 1);\\r\n\tstatic amber400: float4 = float4(0.984313725490196, 0.7490196078431373, 0.1411764705882353, 1);\\r\n\tstatic amber500: float4 = float4(0.9607843137254902, 0.6196078431372549, 0.043137254901960784, 1);\\r\n\tstatic amber600: float4 = float4(0.8509803921568627, 0.4666666666666667, 0.023529411764705882, 1);\\r\n\tstatic amber700: float4 = float4(0.7058823529411765, 0.3254901960784314, 0.03529411764705882, 1);\\r\n\tstatic amber800: float4 = float4(0.5725490196078431, 0.25098039215686274, 0.054901960784313725, 1);\\r\n\tstatic amber900: float4 = float4(0.47058823529411764, 0.20784313725490197, 0.058823529411764705, 1);\\r\n\tstatic amber950: float4 = float4(0.27058823529411763, 0.10196078431372549, 0.011764705882352941, 1);\\r\n\tstatic yellow50: float4 = float4(0.996078431372549, 0.9882352941176471, 0.9098039215686274, 1);\\r\n\tstatic yellow100: float4 = float4(0.996078431372549, 0.9764705882352941, 0.7647058823529411, 1);\\r\n\tstatic yellow200: float4 = float4(0.996078431372549, 0.9411764705882353, 0.5411764705882353, 1);\\r\n\tstatic yellow300: float4 = float4(0.9921568627450981, 0.8784313725490196, 0.2784313725490196, 1);\\r\n\tstatic yellow400: float4 = float4(0.9803921568627451, 0.8, 0.08235294117647059, 1);\\r\n\tstatic yellow500: float4 = float4(0.9176470588235294, 0.7019607843137254, 0.03137254901960784, 1);\\r\n\tstatic yellow600: float4 = float4(0.792156862745098, 0.5411764705882353, 0.01568627450980392, 1);\\r\n\tstatic yellow700: float4 = float4(0.6313725490196078, 0.3843137254901961, 0.027450980392156862, 1);\\r\n\tstatic yellow800: float4 = float4(0.5215686274509804, 0.30196078431372547, 0.054901960784313725, 1);\\r\n\tstatic yellow900: float4 = float4(0.44313725490196076, 0.24705882352941178, 0.07058823529411765, 1);\\r\n\tstatic yellow950: float4 = float4(0.25882352941176473, 0.12549019607843137, 0.023529411764705882, 1);\\r\n\tstatic lime50: float4 = float4(0.9686274509803922, 0.996078431372549, 0.9058823529411765, 1);\\r\n\tstatic lime100: float4 = float4(0.9254901960784314, 0.9882352941176471, 0.796078431372549, 1);\\r\n\tstatic lime200: float4 = float4(0.8509803921568627, 0.9764705882352941, 0.615686274509804, 1);\\r\n\tstatic lime300: float4 = float4(0.7450980392156863, 0.9490196078431372, 0.39215686274509803, 1);\\r\n\tstatic lime400: float4 = float4(0.6392156862745098, 0.9019607843137255, 0.20784313725490197, 1);\\r\n\tstatic lime500: float4 = float4(0.5176470588235295, 0.8, 0.08627450980392157, 1);\\r\n\tstatic lime600: float4 = float4(0.396078431372549, 0.6392156862745098, 0.050980392156862744, 1);\\r\n\tstatic lime700: float4 = float4(0.30196078431372547, 0.48627450980392156, 0.058823529411764705, 1);\\r\n\tstatic lime800: float4 = float4(0.24705882352941178, 0.3843137254901961, 0.07058823529411765, 1);\\r\n\tstatic lime900: float4 = float4(0.21176470588235294, 0.3254901960784314, 0.0784313725490196, 1);\\r\n\tstatic lime950: float4 = float4(0.10196078431372549, 0.1803921568627451, 0.0196078431372549, 1);\\r\n\tstatic green50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9568627450980393, 1);\\r\n\tstatic green100: float4 = float4(0.8627450980392157, 0.9882352941176471, 0.9058823529411765, 1);\\r\n\tstatic green200: float4 = float4(0.7333333333333333, 0.9686274509803922, 0.8156862745098039, 1);\\r\n\tstatic green300: float4 = float4(0.5254901960784314, 0.9372549019607843, 0.6745098039215687, 1);\\r\n\tstatic green400: float4 = float4(0.2901960784313726, 0.8705882352941177, 0.5019607843137255, 1);\\r\n\tstatic green500: float4 = float4(0.13333333333333333, 0.7725490196078432, 0.3686274509803922, 1);\\r\n\tstatic green600: float4 = float4(0.08627450980392157, 0.6392156862745098, 0.2901960784313726, 1);\\r\n\tstatic green700: float4 = float4(0.08235294117647059, 0.5019607843137255, 0.23921568627450981, 1);\\r\n\tstatic green800: float4 = float4(0.08627450980392157, 0.396078431372549, 0.20392156862745098, 1);\\r\n\tstatic green900: float4 = float4(0.0784313725490196, 0.3254901960784314, 0.17647058823529413, 1);\\r\n\tstatic green950: float4 = float4(0.0196078431372549, 0.1803921568627451, 0.08627450980392157, 1);\\r\n\tstatic emerald50: float4 = float4(0.9254901960784314, 0.9921568627450981, 0.9607843137254902, 1);\\r\n\tstatic emerald100: float4 = float4(0.8196078431372549, 0.9803921568627451, 0.8980392156862745, 1);\\r\n\tstatic emerald200: float4 = float4(0.6549019607843137, 0.9529411764705882, 0.8156862745098039, 1);\\r\n\tstatic emerald300: float4 = float4(0.43137254901960786, 0.9058823529411765, 0.7176470588235294, 1);\\r\n\tstatic emerald400: float4 = float4(0.20392156862745098, 0.8274509803921568, 0.6, 1);\\r\n\tstatic emerald500: float4 = float4(0.06274509803921569, 0.7254901960784313, 0.5058823529411764, 1);\\r\n\tstatic emerald600: float4 = float4(0.0196078431372549, 0.5882352941176471, 0.4117647058823529, 1);\\r\n\tstatic emerald700: float4 = float4(0.01568627450980392, 0.47058823529411764, 0.3411764705882353, 1);\\r\n\tstatic emerald800: float4 = float4(0.023529411764705882, 0.37254901960784315, 0.27450980392156865, 1);\\r\n\tstatic emerald900: float4 = float4(0.023529411764705882, 0.3058823529411765, 0.23137254901960785, 1);\\r\n\tstatic emerald950: float4 = float4(0.00784313725490196, 0.17254901960784313, 0.13333333333333333, 1);\\r\n\tstatic teal50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9803921568627451, 1);\\r\n\tstatic teal100: float4 = float4(0.8, 0.984313725490196, 0.9450980392156862, 1);\\r\n\tstatic teal200: float4 = float4(0.6, 0.9647058823529412, 0.8941176470588236, 1);\\r\n\tstatic teal300: float4 = float4(0.3686274509803922, 0.9176470588235294, 0.8313725490196079, 1);\\r\n\tstatic teal400: float4 = float4(0.17647058823529413, 0.8313725490196079, 0.7490196078431373, 1);\\r\n\tstatic teal500: float4 = float4(0.0784313725490196, 0.7215686274509804, 0.6509803921568628, 1);\\r\n\tstatic teal600: float4 = float4(0.050980392156862744, 0.5803921568627451, 0.5333333333333333, 1);\\r\n\tstatic teal700: float4 = float4(0.058823529411764705, 0.4627450980392157, 0.43137254901960786, 1);\\r\n\tstatic teal800: float4 = float4(0.06666666666666667, 0.3686274509803922, 0.34901960784313724, 1);\\r\n\tstatic teal900: float4 = float4(0.07450980392156863, 0.3058823529411765, 0.2901960784313726, 1);\\r\n\tstatic teal950: float4 = float4(0.01568627450980392, 0.1843137254901961, 0.1803921568627451, 1);\\r\n\tstatic cyan50: float4 = float4(0.9254901960784314, 0.996078431372549, 1, 1);\\r\n\tstatic cyan100: float4 = float4(0.8117647058823529, 0.9803921568627451, 0.996078431372549, 1);\\r\n\tstatic cyan200: float4 = float4(0.6470588235294118, 0.9529411764705882, 0.9882352941176471, 1);\\r\n\tstatic cyan300: float4 = float4(0.403921568627451, 0.9098039215686274, 0.9764705882352941, 1);\\r\n\tstatic cyan400: float4 = float4(0.13333333333333333, 0.8274509803921568, 0.9333333333333333, 1);\\r\n\tstatic cyan500: float4 = float4(0.023529411764705882, 0.7137254901960784, 0.8313725490196079, 1);\\r\n\tstatic cyan600: float4 = float4(0.03137254901960784, 0.5686274509803921, 0.6980392156862745, 1);\\r\n\tstatic cyan700: float4 = float4(0.054901960784313725, 0.4549019607843137, 0.5647058823529412, 1);\\r\n\tstatic cyan800: float4 = float4(0.08235294117647059, 0.3686274509803922, 0.4588235294117647, 1);\\r\n\tstatic cyan900: float4 = float4(0.08627450980392157, 0.3058823529411765, 0.38823529411764707, 1);\\r\n\tstatic cyan950: float4 = float4(0.03137254901960784, 0.2, 0.26666666666666666, 1);\\r\n\tstatic sky50: float4 = float4(0.9411764705882353, 0.9764705882352941, 1, 1);\\r\n\tstatic sky100: float4 = float4(0.8784313725490196, 0.9490196078431372, 0.996078431372549, 1);\\r\n\tstatic sky200: float4 = float4(0.7294117647058823, 0.9019607843137255, 0.9921568627450981, 1);\\r\n\tstatic sky300: float4 = float4(0.49019607843137253, 0.8274509803921568, 0.9882352941176471, 1);\\r\n\tstatic sky400: float4 = float4(0.2196078431372549, 0.7411764705882353, 0.9725490196078431, 1);\\r\n\tstatic sky500: float4 = float4(0.054901960784313725, 0.6470588235294118, 0.9137254901960784, 1);\\r\n\tstatic sky600: float4 = float4(0.00784313725490196, 0.5176470588235295, 0.7803921568627451, 1);\\r\n\tstatic sky700: float4 = float4(0.011764705882352941, 0.4117647058823529, 0.6313725490196078, 1);\\r\n\tstatic sky800: float4 = float4(0.027450980392156862, 0.34901960784313724, 0.5215686274509804, 1);\\r\n\tstatic sky900: float4 = float4(0.047058823529411764, 0.2901960784313726, 0.43137254901960786, 1);\\r\n\tstatic sky950: float4 = float4(0.03137254901960784, 0.1843137254901961, 0.28627450980392155, 1);\\r\n\tstatic blue50: float4 = float4(0.9372549019607843, 0.9647058823529412, 1, 1);\\r\n\tstatic blue100: float4 = float4(0.8588235294117647, 0.9176470588235294, 0.996078431372549, 1);\\r\n\tstatic blue200: float4 = float4(0.7490196078431373, 0.8588235294117647, 0.996078431372549, 1);\\r\n\tstatic blue300: float4 = float4(0.5764705882352941, 0.7725490196078432, 0.9921568627450981, 1);\\r\n\tstatic blue400: float4 = float4(0.3764705882352941, 0.6470588235294118, 0.9803921568627451, 1);\\r\n\tstatic blue500: float4 = float4(0.23137254901960785, 0.5098039215686274, 0.9647058823529412, 1);\\r\n\tstatic blue600: float4 = float4(0.1450980392156863, 0.38823529411764707, 0.9215686274509803, 1);\\r\n\tstatic blue700: float4 = float4(0.11372549019607843, 0.3058823529411765, 0.8470588235294118, 1);\\r\n\tstatic blue800: float4 = float4(0.11764705882352941, 0.25098039215686274, 0.6862745098039216, 1);\\r\n\tstatic blue900: float4 = float4(0.11764705882352941, 0.22745098039215686, 0.5411764705882353, 1);\\r\n\tstatic blue950: float4 = float4(0.09019607843137255, 0.1450980392156863, 0.32941176470588235, 1);\\r\n\tstatic indigo50: float4 = float4(0.9333333333333333, 0.9490196078431372, 1, 1);\\r\n\tstatic indigo100: float4 = float4(0.8784313725490196, 0.9058823529411765, 1, 1);\\r\n\tstatic indigo200: float4 = float4(0.7803921568627451, 0.8235294117647058, 0.996078431372549, 1);\\r\n\tstatic indigo300: float4 = float4(0.6470588235294118, 0.7058823529411765, 0.9882352941176471, 1);\\r\n\tstatic indigo400: float4 = float4(0.5058823529411764, 0.5490196078431373, 0.9725490196078431, 1);\\r\n\tstatic indigo500: float4 = float4(0.38823529411764707, 0.4, 0.9450980392156862, 1);\\r\n\tstatic indigo600: float4 = float4(0.30980392156862746, 0.27450980392156865, 0.8980392156862745, 1);\\r\n\tstatic indigo700: float4 = float4(0.2627450980392157, 0.2196078431372549, 0.792156862745098, 1);\\r\n\tstatic indigo800: float4 = float4(0.21568627450980393, 0.18823529411764706, 0.6392156862745098, 1);\\r\n\tstatic indigo900: float4 = float4(0.19215686274509805, 0.1803921568627451, 0.5058823529411764, 1);\\r\n\tstatic indigo950: float4 = float4(0.11764705882352941, 0.10588235294117647, 0.29411764705882354, 1);\\r\n\tstatic violet50: float4 = float4(0.9607843137254902, 0.9529411764705882, 1, 1);\\r\n\tstatic violet100: float4 = float4(0.9294117647058824, 0.9137254901960784, 0.996078431372549, 1);\\r\n\tstatic violet200: float4 = float4(0.8666666666666667, 0.8392156862745098, 0.996078431372549, 1);\\r\n\tstatic violet300: float4 = float4(0.7686274509803922, 0.7098039215686275, 0.9921568627450981, 1);\\r\n\tstatic violet400: float4 = float4(0.6549019607843137, 0.5450980392156862, 0.9803921568627451, 1);\\r\n\tstatic violet500: float4 = float4(0.5450980392156862, 0.3607843137254902, 0.9647058823529412, 1);\\r\n\tstatic violet600: float4 = float4(0.48627450980392156, 0.22745098039215686, 0.9294117647058824, 1);\\r\n\tstatic violet700: float4 = float4(0.42745098039215684, 0.1568627450980392, 0.8509803921568627, 1);\\r\n\tstatic violet800: float4 = float4(0.3568627450980392, 0.12941176470588237, 0.7137254901960784, 1);\\r\n\tstatic violet900: float4 = float4(0.2980392156862745, 0.11372549019607843, 0.5843137254901961, 1);\\r\n\tstatic violet950: float4 = float4(0.1803921568627451, 0.06274509803921569, 0.396078431372549, 1);\\r\n\tstatic purple50: float4 = float4(0.9803921568627451, 0.9607843137254902, 1, 1);\\r\n\tstatic purple100: float4 = float4(0.9529411764705882, 0.9098039215686274, 1, 1);\\r\n\tstatic purple200: float4 = float4(0.9137254901960784, 0.8352941176470589, 1, 1);\\r\n\tstatic purple300: float4 = float4(0.8470588235294118, 0.7058823529411765, 0.996078431372549, 1);\\r\n\tstatic purple400: float4 = float4(0.7529411764705882, 0.5176470588235295, 0.9882352941176471, 1);\\r\n\tstatic purple500: float4 = float4(0.6588235294117647, 0.3333333333333333, 0.9686274509803922, 1);\\r\n\tstatic purple600: float4 = float4(0.5764705882352941, 0.2, 0.9176470588235294, 1);\\r\n\tstatic purple700: float4 = float4(0.49411764705882355, 0.13333333333333333, 0.807843137254902, 1);\\r\n\tstatic purple800: float4 = float4(0.4196078431372549, 0.12941176470588237, 0.6588235294117647, 1);\\r\n\tstatic purple900: float4 = float4(0.34509803921568627, 0.10980392156862745, 0.5294117647058824, 1);\\r\n\tstatic purple950: float4 = float4(0.23137254901960785, 0.027450980392156862, 0.39215686274509803, 1);\\r\n\tstatic fuchsia50: float4 = float4(0.9921568627450981, 0.9568627450980393, 1, 1);\\r\n\tstatic fuchsia100: float4 = float4(0.9803921568627451, 0.9098039215686274, 1, 1);\\r\n\tstatic fuchsia200: float4 = float4(0.9607843137254902, 0.8156862745098039, 0.996078431372549, 1);\\r\n\tstatic fuchsia300: float4 = float4(0.9411764705882353, 0.6705882352941176, 0.9882352941176471, 1);\\r\n\tstatic fuchsia400: float4 = float4(0.9098039215686274, 0.4745098039215686, 0.9764705882352941, 1);\\r\n\tstatic fuchsia500: float4 = float4(0.8509803921568627, 0.27450980392156865, 0.9372549019607843, 1);\\r\n\tstatic fuchsia600: float4 = float4(0.7529411764705882, 0.14901960784313725, 0.8274509803921568, 1);\\r\n\tstatic fuchsia700: float4 = float4(0.6352941176470588, 0.10980392156862745, 0.6862745098039216, 1);\\r\n\tstatic fuchsia800: float4 = float4(0.5254901960784314, 0.09803921568627451, 0.5607843137254902, 1);\\r\n\tstatic fuchsia900: float4 = float4(0.4392156862745098, 0.10196078431372549, 0.4588235294117647, 1);\\r\n\tstatic fuchsia950: float4 = float4(0.2901960784313726, 0.01568627450980392, 0.3058823529411765, 1);\\r\n\tstatic pink50: float4 = float4(0.9921568627450981, 0.9490196078431372, 0.9725490196078431, 1);\\r\n\tstatic pink100: float4 = float4(0.9882352941176471, 0.9058823529411765, 0.9529411764705882, 1);\\r\n\tstatic pink200: float4 = float4(0.984313725490196, 0.8117647058823529, 0.9098039215686274, 1);\\r\n\tstatic pink300: float4 = float4(0.9764705882352941, 0.6588235294117647, 0.8313725490196079, 1);\\r\n\tstatic pink400: float4 = float4(0.9568627450980393, 0.4470588235294118, 0.7137254901960784, 1);\\r\n\tstatic pink500: float4 = float4(0.9254901960784314, 0.2823529411764706, 0.6, 1);\\r\n\tstatic pink600: float4 = float4(0.8588235294117647, 0.15294117647058825, 0.4666666666666667, 1);\\r\n\tstatic pink700: float4 = float4(0.7450980392156863, 0.09411764705882353, 0.36470588235294116, 1);\\r\n\tstatic pink800: float4 = float4(0.615686274509804, 0.09019607843137255, 0.30196078431372547, 1);\\r\n\tstatic pink900: float4 = float4(0.5137254901960784, 0.09411764705882353, 0.2627450980392157, 1);\\r\n\tstatic pink950: float4 = float4(0.3137254901960784, 0.027450980392156862, 0.1411764705882353, 1);\\r\n\tstatic rose50: float4 = float4(1, 0.9450980392156862, 0.9490196078431372, 1);\\r\n\tstatic rose100: float4 = float4(1, 0.8941176470588236, 0.9019607843137255, 1);\\r\n\tstatic rose200: float4 = float4(0.996078431372549, 0.803921568627451, 0.8274509803921568, 1);\\r\n\tstatic rose300: float4 = float4(0.9921568627450981, 0.6431372549019608, 0.6862745098039216, 1);\\r\n\tstatic rose400: float4 = float4(0.984313725490196, 0.44313725490196076, 0.5215686274509804, 1);\\r\n\tstatic rose500: float4 = float4(0.9568627450980393, 0.24705882352941178, 0.3686274509803922, 1);\\r\n\tstatic rose600: float4 = float4(0.8823529411764706, 0.11372549019607843, 0.2823529411764706, 1);\\r\n\tstatic rose700: float4 = float4(0.7450980392156863, 0.07058823529411765, 0.23529411764705882, 1);\\r\n\tstatic rose800: float4 = float4(0.6235294117647059, 0.07058823529411765, 0.2235294117647059, 1);\\r\n\tstatic rose900: float4 = float4(0.5333333333333333, 0.07450980392156863, 0.21568627450980393, 1);\\r\n\tstatic rose950: float4 = float4(0.2980392156862745, 0.0196078431372549, 0.09803921568627451, 1);\\r\n\\r\n}\\r\n\\r\n\\r\npub fn wrap2(value: float2, low: float, high: float) {\\r\n    return (wrap(value.x, low, high), wrap(value.y, low, high));\\r\n}\\r\n\\r\npub fn wrap3(value: float3, low: float, high: float) {\\r\n    return (wrap(value.x, low, high), wrap(value.y, low, high), wrap(value.z, low, high));\\r\n}\\r\n\\r\npub fn wrap4(value: float4, low: float, high: float) {\\r\n    return (wrap(value.x, low, high), wrap(value.y, low, high), wrap(value.z, low, high), wrap(value.w, low, high));\\r\n}`;\nconst sdf = \"/**\\r\\n* Heplful utility for working with signed distance fields.\\r\\n* Most of the implementation was taken from https://iquilezles.org/articles/distfunctions/\\r\\n*/\\r\\n\\r\\npub struct sdf {}\\r\\n\\r\\nfn dot2( v: float2 ) -> float { return dot(v,v); }\\r\\nfn dot3( v: float3 ) -> float { return dot(v,v); }\\r\\nfn ndot( a: float2, b: float2 ) -> float { return a.x*b.x - a.y*b.y; }\\r\\n\\r\\nimpl sdf {\\r\\n\tpub fn sphere(samplePosition: float3, sphereCenter: float3, radius: float) -> float {\\r\\n\t\tlet p = samplePosition - sphereCenter;\\r\\n\t\tlet r = radius;\\r\\n\t\treturn length(p) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn box(samplePosition: float3, boxCenter: float3, boxSize: float3) -> float {\\r\\n\t\tlet p = samplePosition - boxCenter;\\r\\n\t\tlet s = boxSize;\\r\\n\t\tlet q = abs(p) - s;\\r\\n\t\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\\r\\n\t}\\r\\n\\r\\n\tpub fn roundBox(samplePosition: float3, boxCenter: float3, boxSize: float3, cornerRadius: float) -> float {\\r\\n\t\tlet p = samplePosition - boxCenter;\\r\\n\t\tlet s = boxSize;\\r\\n\t\tlet r = cornerRadius;\\r\\n\t\tlet q = abs(p) - s;\\r\\n\t\treturn length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn boxFrame(samplePosition: float3, boxCenter: float3, boxSize: float3, frameThickness: float) -> float {\\r\\n\t\tlet p = samplePosition - boxCenter;\\r\\n\t\tlet b = boxSize;\\r\\n\t\tlet e = frameThickness;\\r\\n\t\tp = abs(p  )-b;\\r\\n\t\tlet q = abs(p+e)-e;\\r\\n\t\treturn min(min(\\r\\n\t\t\t\tlength(max(float3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\\r\\n\t\t\t\tlength(max(float3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\\r\\n\t\t\t\tlength(max(float3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn torus( samplePosition: float3, torusCenter: float3, torusSize: float2 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - torusCenter;\\r\\n\t\tlet t = torusSize;\\r\\n\t\tlet q = float2(length(p.xz)-t.x,p.y);\\r\\n\t\treturn length(q)-t.y;\\r\\n\t}\\r\\n\\r\\n\tpub fn cappedTorus( samplePosition: float3, torusCenter: float3, torusSize: float2, ra: float, rb: float) -> float\\r\\n\t{\\r\\n\t\t\\r\\n\t\tlet p1 = samplePosition - torusCenter;\\r\\n\t\tlet p = (abs(p1.x), p1.yz);\\r\\n\t\tlet sc = torusSize;\\r\\n\t\tlet k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy);\\r\\n\t\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\\r\\n\t}\\r\\n\\r\\n\tpub fn link( samplePosition: float3, linkCenter: float3, linkLength: float, r1: float, r2: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - linkCenter;\\r\\n\t\tlet le = linkLength;\\r\\n\t\tlet q = float3( p.x, max(abs(p.y)-le,0.0), p.z );\\r\\n\t\treturn length(float2(length(q.xy)-r1,q.z)) - r2;\\r\\n\t}\\r\\n\\r\\n\tpub fn infinteCylinder( samplePosition: float3, cylinderCenter: float3, cylinderSize: float3) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - cylinderCenter;\\r\\n\t\tlet c = cylinderSize;\\r\\n\t\treturn length(p.xz-c.xy)-c.z;\\r\\n\t}\\r\\n\\r\\n\tpub fn cone( samplePosition: float3,  coneCenter: float3, c: float2, coneHeight: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - coneCenter;\\r\\n\t\tlet h = coneHeight;\\r\\n\t\t// c is the sin/cos of the angle, h is height\\r\\n\t\t// Alternatively pass q instead of (c,h),\\r\\n\t\t// which is the point at the base in 2D\\r\\n\t\tlet q = h*float2(c.x/c.y,-1.0);\\r\\n\t\t\t\\r\\n\t\tlet w = float2( length(p.xz), p.y );\\r\\n\t\tlet a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\\r\\n\t\tlet b = w - q*float2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\\r\\n\t\tlet k = sign( q.y );\\r\\n\t\tlet d = min(dot( a, a ),dot(b, b));\\r\\n\t\tlet s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y)  );\\r\\n\t\treturn sqrt(d)*sign(s);\\r\\n\t}\\r\\n\\r\\n\tpub fn plane( samplePosition: float3, planeCenter: float3, planeNormal: float3, planeHeight: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - planeCenter;\\r\\n\t\tlet n = planeNormal;\\r\\n\t\tlet h = planeHeight;\\r\\n\t\t\\r\\n\t\t// n must be normalized\\r\\n\t\treturn dot(p,n) + h;\\r\\n\t}\\r\\n\\r\\n\tpub fn hexPrism( samplePosition: float3, hexCenter: float3, hexSize: float2 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - hexCenter;\\r\\n\t\tlet h = hexSize;\\r\\n\\r\\n\t\tlet k = float3(-0.8660254, 0.5, 0.57735);\\r\\n\t\tp = abs(p);\\r\\n\t\tlet dddd = min(dot(k.xy, p.xy), 0.0) * 2.0;\\r\\n\\r\\n\t\tp = p - float3(dddd * k.xy, 0.0);\\r\\n\t\tlet d = float2(\\r\\n\t\t\t\t\tlength(p.xy-float2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\\r\\n\t\t\t\t\tp.z-h.y );\\r\\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn triPrism( samplePosition: float3, triCenter: float3, triSize: float2 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - triCenter;\\r\\n\t\tlet h = triSize;\\r\\n\t\tlet q = abs(p);\\r\\n\t\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\\r\\n\t}\\r\\n\\r\\n\tpub fn capsuleLine( samplePosition: float3, lineStart: float3, lineEnd: float3, capsuleRadius: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet a = lineStart;\\r\\n\t\tlet b = lineEnd;\\r\\n\t\tlet r = capsuleRadius;\\r\\n\t\tlet pa = p - a;\\r\\n\t\tlet ba = b - a;\\r\\n\t\tlet h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\\r\\n\t\treturn length( pa - ba*h ) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn capsule( samplePosition: float3, capsuleCenter: float3, height: float, radius: float ) -> float\\r\\n\t{\\r\\n\t\tlet p1 = samplePosition - capsuleCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet p = (p1.x, p1.y - clamp( p1.y, 0.0, h ), p1.z);\\r\\n\t\treturn length( p ) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn cylinder( samplePosition: float3, cylinderCenter: float3, height: float, radius: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - cylinderCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet d = abs(float2(length(p.xz),p.y)) - float2(r,h);\\r\\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn cylinderLine( samplePosition: float3, lineStart: float3, lineEnd: float3, radius: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet a = lineStart;\\r\\n\t\tlet b = lineEnd;\\r\\n\t\tlet r = radius;\\r\\n\\r\\n\t\tlet ba = b - a;\\r\\n\t\tlet pa = p - a;\\r\\n\t\tlet baba = dot(ba,ba);\\r\\n\t\tlet paba = dot(pa,ba);\\r\\n\t\tlet x = length(pa*baba-ba*paba) - r*baba;\\r\\n\t\tlet y = abs(paba-baba*0.5) - baba*0.5;\\r\\n\t\tlet x2 = x*x;\\r\\n\t\tlet y2 = y*y*baba;\\r\\n\t\tlet mxxy = max(x,y);\\r\\n\t\tlet d = (mxxy<0.0)?-min(x2,y2):(((x>0.0)?x2:0.0)+((y>0.0)?y2:0.0));\\r\\n\t\treturn sign(d)*sqrt(abs(d))/baba;\\r\\n\t}\\r\\n\\r\\n\tpub fn roundedCylinder( samplePosition: float3, cylinderCenter: float, cylinderRadius: float, cornerRadius: float, height: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - cylinderCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet ra = cylinderRadius;\\r\\n\t\tlet rb = cornerRadius;\\r\\n\t\tlet d = float2( length(p.xz)-2.0*ra+rb, abs(p.y) - h );\\r\\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0)) - rb;\\r\\n\t}\\r\\n\\r\\n\tpub fn cappedCone( samplePosition: float3, coneCenter: float3, height: float, r1: float, r2: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - coneCenter;\\r\\n\t\tlet h = height;\\r\\n\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet k1 = float2(r2,h);\\r\\n\t\tlet k2 = float2(r2-r1,2.0*h);\\r\\n\t\tlet ca = float2(q.x-min(q.x,(q.y<0.0)?r1:r2), abs(q.y)-h);\\r\\n\t\tlet cb = q - k1 + k2*clamp( dot(k1-q,k2)/dot2(k2), 0.0, 1.0 );\\r\\n\t\tlet s = (cb.x<0.0 && ca.y<0.0) ? -1.0 : 1.0;\\r\\n\t\treturn s*sqrt( min(dot2(ca),dot2(cb)) );\\r\\n\t}\\r\\n\\r\\n\tpub fn solidAngle( samplePosition: float3, solidCenter: float3, size: float2, radius: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - solidCenter;\\r\\n\t\tlet c = size;\\r\\n\t\tlet ra = radius;\\r\\n\t\t// c is the sin/cos of the angle\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet l = length(q) - ra;\\r\\n\t\tlet m = length(q - c*clamp(dot(q,c),0.0,ra) );\\r\\n\t\treturn max(l,m*sign(c.y*q.x-c.x*q.y));\\r\\n\t}\\r\\n\\r\\n\tpub fn cutSphere( samplePosition: float3, sphereCenter: float3, radius: float, height: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - sphereCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r = radius;\\r\\n\\r\\n\t\t// sampling independent computations (only depend on shape)\\r\\n\t\tlet w = sqrt(r*r-h*h);\\r\\n\\r\\n\t\t// sampling dependant computations\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\\r\\n\t\treturn (s<0.0) ? length(q)-r :\\r\\n\t\t\t\t\t(q.x<w) ? h - q.y     :\\r\\n\t\t\t\t\t\t\t\t\t\tlength(q-float2(w,h));\\r\\n\t}\\r\\n\\r\\n\tpub fn cutHollowSphere( samplePosition: float3, sphereCenter: float3, radius: float, height: float, thickness: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - sphereCenter;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet h = height;\\r\\n\t\tlet t = thickness;\\r\\n\\r\\n\t\t// sampling independent computations (only depend on shape)\\r\\n\t\tlet w = sqrt(r*r-h*h);\\r\\n\\r\\n\t\t// sampling dependant computations\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\treturn ((h*q.x<w*q.y) ? length(q-float2(w,h)) : \\r\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\\r\\n\t}\\r\\n\\r\\n\tpub fn roundCone( samplePosition: float3, coneCenter: float3, coneRadius: float, cornerRadius: float, height: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - coneCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r1 = coneRadius;\\r\\n\t\tlet r2 = cornerRadius;\\r\\n\\r\\n\t\t// sampling independent computations (only depend on shape)\\r\\n\t\tlet b = (r1-r2)/h;\\r\\n\t\tlet a = sqrt(1.0-b*b);\\r\\n\\r\\n\t\t// sampling dependant computations\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet k = dot(q,float2(-b,a));\\r\\n\t\tif( k<0.0 ) return length(q) - r1;\\r\\n\t\tif( k>a*h ) return length(q-float2(0.0,h)) - r2;\\r\\n\t\treturn dot(q, float2(a,b) ) - r1;\\r\\n\t}\\r\\n\\r\\n\tpub fn ellipsoid( samplePosition: float3, center: float3,  radius: float3 ) -> float\\r\\n\t{\t\\r\\n\t\tlet p = samplePosition - center;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet k0 = length(p/r);\\r\\n\t\tlet k1 = length(p/(r*r));\\r\\n\t\treturn k0*(k0-1.0)/k1;\\r\\n\t}\\r\\n\\r\\n\tpub fn rhombus( samplePosition: float3, rhombusCenter: float3, la: float, lb: float, height: float, ra: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - rhombusCenter;\\r\\n\t\tlet h = height;\\r\\n\\r\\n\t\tp = abs(p);\\r\\n\t\tlet b = float2(la,lb);\\r\\n\t\tlet f = clamp( (ndot(b,b-2.0*p.xz))/dot(b,b), -1.0, 1.0 );\\r\\n\t\tlet q = float2(length(p.xz-0.5*b*float2(1.0-f,1.0+f))*sign(p.x*b.y+p.z*b.x-b.x*b.y)-ra, p.y-h);\\r\\n\t\treturn min(max(q.x,q.y),0.0) + length(max(q,0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn octahedron( samplePosition: float3, center: float3, size: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - center;\\r\\n\t\tlet s = size;\\r\\n\t\tp = abs(p);\\r\\n\t\tlet m = p.x+p.y+p.z-s;\\r\\n\t\tlet q = 0.0.xyz;\\r\\n\t\t\t\t\tif( 3.0*p.x < m ) q = p.xyz;\\r\\n\t\telse if( 3.0*p.y < m ) q = p.yzx;\\r\\n\t\telse if( 3.0*p.z < m ) q = p.zxy;\\r\\n\t\telse return m*0.57735027;\\r\\n\t\t\t\\r\\n\t\tlet k = clamp(0.5*(q.z-q.y+s),0.0,s); \\r\\n\t\treturn length(float3(q.x,q.y-s+k,q.z-k)); \\r\\n\t}\\r\\n\\r\\n\tpub fn pyramid( samplePosition: float3, pyramidCenter: float3, height: float) -> float\\r\\n\t{\\r\\n\t\tlet p1 = samplePosition - pyramidCenter;\\r\\n\t\tlet h = height;\\r\\n\\r\\n\t\tlet m2 = h*h + 0.25;\\r\\n\t\t\\r\\n\t\tlet p2 = (abs(p1.x), p1.y, abs(p1.z));\\r\\n\t\tif (p1.z > p1.x) {\\r\\n\t\t\tp2 = (p2.z, p2.y, p2.x);\\r\\n\t\t}\\r\\n\t\tp2 = (p2.x - 0.5, p2.y, p2.z - 0.5);\\r\\n\t\tlet p = p2;\\r\\n\\r\\n\t\tlet q = float3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\\r\\n\t\t\t\\r\\n\t\tlet s = max(-q.x,0.0);\\r\\n\t\tlet t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\\r\\n\t\t\t\\r\\n\t\tlet a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\\r\\n\t\tlet b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\\r\\n\t\t\t\\r\\n\t\tlet d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\\r\\n\t\t\t\\r\\n\t\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\\r\\n\t}\\r\\n\\r\\n\tpub fn udTriangle(  samplePosition: float3, a: float3, b: float3, c: float3 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet ba = b - a;\\r\\n\t\tlet pa = p - a;\\r\\n\t\tlet cb = c - b;\\r\\n\t\tlet pb = p - b;\\r\\n\t\tlet ac = a - c;\\r\\n\t\tlet pc = p - c;\\r\\n\t\tlet nor = cross( ba, ac );\\r\\n\\r\\n\t\treturn sqrt(\\r\\n\t\t\t(sign(dot(cross(ba,nor),pa)) +\\r\\n\t\t\t\tsign(dot(cross(cb,nor),pb)) +\\r\\n\t\t\t\tsign(dot(cross(ac,nor),pc))<2.0)\\r\\n\t\t\t\t?\\r\\n\t\t\t\tmin( min(\\r\\n\t\t\t\tdot3(ba*clamp(dot(ba,pa)/dot3(ba),0.0,1.0) - pa),\\r\\n\t\t\t\tdot3(cb*clamp(dot(cb,pb)/dot3(cb),0.0,1.0) - pb) ),\\r\\n\t\t\t\tdot3(ac*clamp(dot(ac,pc)/dot3(ac),0.0,1.0) - pc) )\\r\\n\t\t\t\t:\\r\\n\t\t\t\tdot(nor,pa)*dot(nor,pa)/dot3(nor) );\\r\\n\t}\\r\\n\\r\\n\tpub fn udQuad(  samplePosition: float3, a: float3, b: float3, c: float3, d: float3 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet ba = b - a; let pa = p - a;\\r\\n\t\tlet cb = c - b; let pb = p - b;\\r\\n\t\tlet dc = d - c; let pc = p - c;\\r\\n\t\tlet ad = a - d; let pd = p - d;\\r\\n\t\tlet nor = cross( ba, ad );\\r\\n\\r\\n\t\treturn sqrt(\\r\\n\t\t\t(sign(dot(cross(ba,nor),pa)) +\\r\\n\t\t\t\tsign(dot(cross(cb,nor),pb)) +\\r\\n\t\t\t\tsign(dot(cross(dc,nor),pc)) +\\r\\n\t\t\t\tsign(dot(cross(ad,nor),pd))<3.0)\\r\\n\t\t\t\t?\\r\\n\t\t\t\tmin( min( min(\\r\\n\t\t\t\tdot3(ba*clamp(dot(ba,pa)/dot3(ba),0.0,1.0)-pa),\\r\\n\t\t\t\tdot3(cb*clamp(dot(cb,pb)/dot3(cb),0.0,1.0)-pb) ),\\r\\n\t\t\t\tdot3(dc*clamp(dot(dc,pc)/dot3(dc),0.0,1.0)-pc) ),\\r\\n\t\t\t\tdot3(ad*clamp(dot(ad,pd)/dot3(ad),0.0,1.0)-pd) )\\r\\n\t\t\t\t:\\r\\n\t\t\t\tdot(nor,pa)*dot(nor,pa)/dot3(nor) );\\r\\n\t}\\r\\n\\r\\n\\r\\n\t/**\\r\\n\t* Returns the intersection of two SDFs\\r\\n\t* = max(a, b)\\r\\n\t*/\\r\\n\tpub fn intersect(a: float, b: float) -> float {\\r\\n\t\treturn max(a, b);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Returns the union of two SDFs\\r\\n\t* = min(a, b)\\r\\n\t*/\\r\\n\tpub fn union(a: float, b: float) -> float {\\r\\n\t\treturn min(a, b);\\r\\n\t}\\r\\n\\r\\n\tpub fn subtract(a: float, b: float) -> float {\\r\\n\t\treturn max(-a, b);\\r\\n\t}\\r\\n\\r\\n\tpub fn smoothIntersect(a: float, b: float, k: float) -> float {\\r\\n\t\tlet h = clamp(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\\r\\n\t\treturn lerp(b, a, h) - k * h * (1.0 - h);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Smoothly joins two SDFs using blending distance k\\r\\n\t*/\\r\\n\tpub fn smoothUnion(a: float, b: float, k: float) -> float {\\r\\n\t\tlet d1 = a;\\r\\n\t\tlet d2 = b;\\r\\n\t\tlet h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\\r\\n    return lerp( d2, d1, h ) - k*h*(1.0-h);\\r\\n\t}\\r\\n\\r\\n\tpub fn smoothSubtract(a: float, b: float, k: float) -> float {\\r\\n\t\tlet d1 = a;\\r\\n\t\tlet d2 = b;\\r\\n\t\tlet h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\\r\\n    return lerp( d2, -d1, h ) + k*h*(1.0-h); \\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Blends between two SDFs using interpolation\\r\\n\t*/\\r\\n\tpub fn blend(a: float, b: float, t: float) -> float {\\r\\n\t\treturn t * a + (1 - t) * b;\\r\\n\t}\\r\\n\\r\\n\tpub fn round(a: float, r: float) -> float {\\r\\n\t\treturn a - r;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Carve out the interior of an SDF\\r\\n\t*/\\r\\n\tpub fn onion(a: float, thickness: float) -> float {\\r\\n\t\treturn abs(a) - thickness;\\r\\n\t}\\r\\n\\r\\n\\r\\n\tpub fn grad(p:float3, sampler: (pos: float3) -> float) {\\r\\n\t\tconst DELTA = 0.0001;\\r\\n\t\treturn float3(sampler(p + float3(DELTA, 0.0, 0.0)) - sampler(p - float3(DELTA, 0.0, 0.0)),\\r\\n\t\t\t\t\t\t\t\tsampler(p + float3(0.0, DELTA, 0.0)) - sampler(p - float3(0.0, DELTA, 0.0)),\\r\\n\t\t\t\t\t\t\t\tsampler(p + float3(0.0, 0.0, DELTA)) - sampler(p - float3(0.0, 0.0, DELTA))) / (2.0 * DELTA);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Poorly returns the closest point on the surface of an SDF\\r\\n\t* This is an inaccurate method\\r\\n\t*/\\r\\n\tpub fn closest(position: float3, sampler: (pos: float3) -> float) -> float3 {\\r\\n\t\tlet sep = 0.0001;\\r\\n\t\tlet zero = min(env.frame, 0);\\r\\n\t\tlet closest = position;\\r\\n\t\tlet initialDist = sampler(position);\\r\\n\t\tlet seed = 0;\\r\\n\t\tfor (let j: int = 0; j < 200; j++) {\\r\\n\t\t\tlet n = 0.0.xyz;\\r\\n\t\t\tlet distSum = 0.0;\\r\\n\t\t\tfor (let i: int = zero; i < 4; i++) {\\r\\n\t\t\t\tlet e = 0.5773*(2.0*float3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.0);\\r\\n\t\t\t\tlet d = sampler(closest+e*sep);\\r\\n\t\t\t\tdistSum += d;\\r\\n\t\t\t\tn += e*d;\\r\\n\t\t\t}\\r\\n\t\t\tclosest = normalize(n) * distSum * -1 / 4.0 + closest;\\r\\n\t\t\tif (distSum < 0.0001) {\\r\\n\t\t\t\tbreak;\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\treturn closest;\\r\\n\t}\\r\\n\\r\\n\tpub fn normal(position: float3, sampler: (pos: float3) -> float) -> float3 {\\r\\n\t\tconst h = 0.1;\\r\\n    let zero = min(env.frame, 0);\\r\\n    let n = 0.0.xyz;\\r\\n\t\tlet distSum = 0.0;\\r\\n\t\t\\r\\n    for (let i: int = zero; i < 4; i++) {\\r\\n\t\t\tlet e = 0.5773*(2.0*float3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.0);\\r\\n\t\t\tlet d = sampler(position+e*h);\\r\\n\t\t\tdistSum += d;\\r\\n\t\t\tn += e*d;\\r\\n    }\\r\\n    return normalize(n);\\r\\n\t}\\r\\n\\r\\n\tpub fn vizRings(d: float) -> float4 {\\r\\n\t\tif (false) {\\r\\n\t\t\tlet color = 1.0 - sign(d) * float3(0.1, 0.4, 0.7);\\r\\n\t\t\tcolor *= 1.0 - exp(-4.0 * abs(d));\\r\\n\t\t\tcolor *= 0.8 + 0.2 * cos(140.0 * d);\\r\\n\t\t\tcolor = lerp(color, 1.0.xyz, 1.0 - smoothstep(0.0, 0.015, abs(d)));\\r\\n\t\t\treturn (color, 1.0);\\r\\n\t\t}else{\\r\\n\\r\\n\t\tlet size = 2;\\r\\n\t\tlet fadeDist = 100;\\r\\n\t\tlet v = 1-clamp(d/ fadeDist, 0, 1);\\r\\n\t\tlet color = (0.4 * v, 0.6* v, 1, 1);\\r\\n\t\tlet s = sin(d / size);\\r\\n\t\tif (abs(d) < 1) {\\r\\n\t\t\treturn float4(1.xyzw);\\r\\n\t\t}else{\\r\\n\t\t\treturn d > 0 ? color * ceil(1-s) : color * ceil(s);\\r\\n\t\t}\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn march(position: float3, direction: float3, sampler: (pos: float3) -> float) -> float {\\r\\n\t\tlet maxDist = 100000.0;\\r\\n\t\tlet minDist = 1.0;\\r\\n\t\tlet dist = minDist;\\r\\n\\r\\n\t\tfor (let i = 0; i < 256 && dist < maxDist; i++) {\\r\\n\t\t\tlet samp = sampler(position + direction * dist);\\r\\n\t\t\tdist += samp;\\r\\n\t\t\tif (abs(samp) < (0.00005 * dist)) {\\r\\n\t\t\t\tbreak;\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t\tif (dist > maxDist) {\\r\\n\t\t\tdist = -1.0;\\r\\n\t\t}\\r\\n\t\treturn dist;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* See: https://iquilezles.org/articles/distfunctions/\\r\\n\t* Infinitely repeats an SDF with space in between. This returns an updated position\\r\\n\t*\\r\\n\t* Example:\\r\\n\t* ```shadeup\\r\\n\t*\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\\r\\n\t* ```\\r\\n\t*/\\r\\n\tpub fn repeat(position: float3, space: float3) -> float3 {\\r\\n\t\tlet p = position;\\r\\n\t\tlet s = space;\\r\\n\t\treturn p - s*round(p/s);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* See: https://iquilezles.org/articles/distfunctions/\\r\\n\t* Repeats an SDF with space in between upto the limit. This returns an updated position\\r\\n\t*\\r\\n\t* Example:\\r\\n\t* ```shadeup\\r\\n\t*\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\\r\\n\t* ```\\r\\n\t*/\\r\\n\tpub fn repeatLimited(position: float3, space: float, limit: float3) -> float3 {\\r\\n\t\tlet p = position;\\r\\n\t\tlet s = space;\\r\\n\t\treturn p - s*clamp(round(p/s),-limit,limit);\\r\\n\t}\\r\\n\t\\r\\n}\";\nconst files = {\n  shadeup: {\n    mesh,\n    textures,\n    common,\n    sdf,\n    geo\n  },\n  ts: {\n    std,\n    ui,\n    native,\n    paint,\n    buffer,\n    texture,\n    drawIndexed,\n    drawAttributes,\n    drawCount,\n    physics,\n    context\n  }\n};\nasync function makeSimpleShadeupEnvironment(esnext = false, declaration = false) {\n  let env2 = new ShadeupEnvironment({\n    esnext,\n    declaration\n  });\n  env2.emitLogs = false;\n  await env2.init();\n  await env2.writeFile(\n    \"/file.ts\",\n    `\n\t\n\t`\n  );\n  let writes = [];\n  performance.now();\n  for (let [path, contents] of Object.entries(files.ts)) {\n    let p = \"/_std/\" + path + \".ts\";\n    if (path == \"std\")\n      p = \"/std.ts\";\n    writes.push(env2.writeFileTypescript(p, contents));\n  }\n  for (let [path, contents] of Object.entries(files.shadeup)) {\n    let p = \"/_std/\" + path + \".ts\";\n    writes.push(env2.writeFile(p, contents, true));\n  }\n  return env2;\n}\nexport {\n  makeSimpleShadeupEnvironment\n};\n"
  },
  {
    "path": "cli/electron/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Shadeup Preview</title>\n    <meta\n      http-equiv=\"Content-Security-Policy\"\n      content=\"script-src 'self' 'unsafe-inline';\"\n    />\n  </head>\n  <body>\n    <iframe\n      src=\"http://localhost:5128\"\n      style=\"width: 100%; height: 100%; border: none\"\n    ></iframe>\n\n    <style>\n      body {\n        margin: 0;\n        padding: 0;\n        overflow: hidden;\n      }\n      html,\n      body,\n      #app {\n        height: 100%;\n        background-color: black;\n      }\n    </style>\n  </body>\n</html>\n"
  },
  {
    "path": "cli/electron/main.js",
    "content": "import { app, BrowserWindow } from \"electron/main\";\nimport path from \"node:path\";\nconst __dirname = path.dirname(\n  new URL(import.meta.url).pathname.replace(/^\\//g, \"\")\n);\n\nfunction createWindow() {\n  const win = new BrowserWindow({\n    width: 800,\n    height: 600,\n    autoHideMenuBar: true,\n    icon: path.join(__dirname, \"icon.ico\"),\n    webPreferences: {},\n  });\n\n  win.loadFile(\"index.html\");\n}\n\napp.whenReady().then(() => {\n  createWindow();\n\n  app.on(\"activate\", () => {\n    if (BrowserWindow.getAllWindows().length === 0) {\n      createWindow();\n    }\n  });\n});\n\napp.on(\"window-all-closed\", () => {\n  if (process.platform !== \"darwin\") {\n    app.quit();\n  }\n});\n"
  },
  {
    "path": "cli/index.js",
    "content": "throw new Error(\"This is a CLI only package\");\n"
  },
  {
    "path": "cli/package.json",
    "content": "{\n  \"name\": \"@shadeup/cli\",\n  \"version\": \"1.3.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"cli\": \"node cli.js\"\n  },\n  \"bin\": {\n    \"shadeup\": \"./cli.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AskingQuestions/Shadeup\"\n  },\n  \"author\": \"AskingQuestions <npm@jrmy.dev>\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@typescript/vfs\": \"^1.5.0\",\n    \"boxen\": \"^7.0.0\",\n    \"colors\": \"^1.4.0\",\n    \"commander\": \"^9.2.0\",\n    \"electron\": \"^28.2.2\",\n    \"inquirer\": \"^8.2.4\",\n    \"shadeup\": \"^1.3.6\",\n    \"typescript\": \"^5.3.3\",\n    \"uglify-js\": \"^3.17.4\",\n    \"vite\": \"^5.1.1\",\n    \"web-tree-sitter\": \"^0.20.8\"\n  }\n}\n"
  },
  {
    "path": "cli/test/main.d.ts",
    "content": "import * as __ from \"/std_math\";\nexport declare function main(): void;\nexport declare function giveFloat(): __.float;\n"
  },
  {
    "path": "cli/test/main.js",
    "content": "\nimport { bindShadeupEngine } from \"shadeup\";\n\nexport const makeShadeupInstance = bindShadeupEngine((define, localEngineContext) => {\n\tconst __shadeup_gen_shader =\n\tlocalEngineContext.__shadeup_gen_shader.bind(localEngineContext);\nconst __shadeup_make_shader_inst =\n\tlocalEngineContext.__shadeup_make_shader_inst.bind(localEngineContext);\nconst __shadeup_register_struct =\n\tlocalEngineContext.__shadeup_register_struct.bind(localEngineContext);\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/main.js\", deps, func);\n\t__shadeup_gen_shader(\"shd_6515406754369975000349600057000435695077700680380\", {\n\t\t\t\t\twebgl: {},\n\t\t\t\t\twebgpu: {\"attributeInput\":\"\",\"attributeOutput\":\"\",\"locals\":[],\"globals\":[]}\n\t\t\t\t}, {webgpu: `fn shadeup_up_swizzle_xxxx_i32(n: i32) -> vec4<i32>{\n\treturn vec4<i32>(n, n, n, n);\n}\n\nstruct ShaderInput {\n @align(16)  position: vec3<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  clipPosition: vec4<f32>,\n @align(16)  realPosition: vec4<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  screen: vec2<f32>,\n @align(16)  color: vec4<f32>,\n @align(16)  groupId: vec3<i32>,\n @align(16)  groupSize: vec3<i32>,\n @align(16)  globalId: vec3<i32>,\n @align(16)  localId: vec3<i32>,\n @align(16)  instanceIndex: i32,\n @align(16)  vertexIndex: i32,\n};\nstruct ShaderOutput {\n @align(16)  position: vec4<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  color: vec4<f32>,\n// %SHADER_ShaderOutput%\n};\nstruct _InUniformsStruct {\n/*SHADEUP_UNIFORM_STRUCT_START*/\ndummy: vec4<f32>,\n};\n@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)-> /*__SHADEUP_TEMPLATE_OUTPUT*/{\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\n_i_out.color = vec4f(shadeup_up_swizzle_xxxx_i32(i32(1)));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`,webgl:`ivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec2 shadeup_up_swizzle_xy_int(int n) {\n\treturn ivec2(n, n);\n}\n\nivec3 shadeup_up_swizzle_xyz_int(int n) {\n\treturn ivec3(n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec2 shadeup_up_swizzle_xy_int(int n) {\n\treturn ivec2(n, n);\n}\n\nivec3 shadeup_up_swizzle_xyz_int(int n) {\n\treturn ivec3(n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xyzw_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nstruct ShaderInput {\n  vec3 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec4 clipPosition;\n  vec4 realPosition;\n  vec2 uv;\n  vec2 screen;\n  vec4 color;\n  ivec3 groupId;\n  ivec3 groupSize;\n  ivec3 globalId;\n  ivec3 localId;\n  int instanceIndex;\n  int vertexIndex;\n\n};\nstruct ShaderOutput {\n  vec4 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec2 uv;\n  vec4 color;\n\n};\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nvoid main() {\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\n_i_out.color = vec4(shadeup_up_swizzle_xxxx_int(int(1)));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`, software: () => {}}, [[2830,2865,21,38],[2939,2972,38,53],[3048,3082,53,69],[3162,3198,69,87],[3242,3284,87,108],[3289,3331,108,129],[3400,3426,129,140],[3502,3532,140,155],[3609,3644,155,169],[3690,3720,169,186],[3768,3800,186,205],[3879,3910,205,223],[3956,3986,223,240],[4051,4074,240,261],[4123,4144,261,280],[2728,4283,0,284],[4371,4409,306,323],[4444,4477,323,338],[4513,4547,338,354],[4585,4621,354,372],[4655,4681,372,383],[4714,4749,383,397],[4309,4869,284,401],[0,0,503,509],[0,0,510,515],[0,0,503,515],[1882,1888,551,554],[0,0,555,556],[0,0,551,557],[0,0,523,558],[0,0,503,559],[0,0,503,561],[57,87,401,605],[1839,1903,0,605]]);\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std___std_all\", \"/_std/drawIndexed\"], function (require, exports, __, std___std_all_1, drawIndexed_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.giveFloat = exports.main = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    function main() {\n        var _this = this;\n        (0, drawIndexed_1.draw)(__shadeup_make_shader_inst(\"shd_6515406754369975000349600057000435695077700680380\", {}, /**@shadeup=shader*/ function (__in, __out) { return __awaiter(_this, void 0, void 0, function () {\n            var _a;\n            return __generator(this, function (_b) {\n                __out.color = (_a = (1 | 0), [_a, _a, _a, _a]);\n                return [2 /*return*/];\n            });\n        }); }));\n    }\n    exports.main = main;\n    function giveFloat() { return 1.0; }\n    exports.giveFloat = giveFloat;\n    ;\n});\n\n})(define);\n\n});\n"
  },
  {
    "path": "cli/test/other.js",
    "content": ""
  },
  {
    "path": "cli/test/other.shadeup",
    "content": "pub fn drawer() {\n\treturn shader { out.color = 1.xxxx; };\n}"
  },
  {
    "path": "cli/test/vite-project/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "cli/test/vite-project/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + TS</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <canvas id=\"canvas\" style=\"width: 100%; height: 100%\"></canvas>\n    <script type=\"module\" src=\"/src/index.ts\"></script>\n    <style>\n      html,\n      body {\n        margin: 0;\n        padding: 0;\n        width: 100%;\n        height: 100%;\n        overflow: hidden;\n        background-color: black;\n      }\n    </style>\n  </body>\n</html>\n"
  },
  {
    "path": "cli/test/vite-project/package.json",
    "content": "{\n  \"name\": \"vite-project\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc && vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"devDependencies\": {\n    \"typescript\": \"^5.2.2\",\n    \"vite\": \"^5.1.1\"\n  }\n}\n"
  },
  {
    "path": "cli/test/vite-project/src/index.ts",
    "content": "import { makeShadeupInstance } from \"./main\";\n\nconst canvas = document.querySelector<HTMLCanvasElement>(\"#canvas\")!;\n(async () => {\n  let engine = await makeShadeupInstance(canvas);\n  await engine.enableUI();\n  console.log(engine);\n  let tex = await engine.loadTexture2dFromURL(\n    \"https://i.imgur.com/XxtTu4t.jpeg\"\n  );\n  engine.files.main.setTexture(tex);\n\n  let model = await engine.loadModelFromURL(\n    \"https://s3-eu-west-1.amazonaws.com/fetchcfd/original/file-1571050371399.glb\"\n  );\n  // console.log(model);\n  // engine.files.main.setModel(model);\n  // engine.files.main.setSpawning(true);\n  // engine.files.main.useTex(await engine);\n})();\n\nfunction sizeCanvas() {\n  canvas.width = window.innerWidth * devicePixelRatio;\n  canvas.height = window.innerHeight * devicePixelRatio;\n}\n\nsizeCanvas();\n\nwindow.addEventListener(\"resize\", sizeCanvas);\n"
  },
  {
    "path": "cli/test/vite-project/src/logoPath.shadeup",
    "content": "\n\npub const testVal = 12;\n\npub const logoPath = [\n\n(331.8819682214535,309.37499982761074),\n(371.32282194357356,303.64633707500263),\n(407.46032126878504,286.8163539059281),\n(437.274252663429,260.35535066551427),\n(458.29984831576394,226.50580234284354),\n(468.7136104513537,188.03532791839726),\n(467.7118086191006,148.17574354216006),\n(455.35191297112505,110.29043620450224),\n(432.6263207130228,77.53229396479205),\n(401.5178156140271,52.615834986960536),\n(364.58359174118056,37.654862578958394),\n(324.8932794340484,33.92378272686386),\n(285.7795001390052,41.64769023829373),\n(250.56380617643717,60.281665182363334),\n(222.1106045175098,88.2185302598852),\n(202.82739785088438,123.09151777807875),\n(194.38489856271633,162.05350582157),\n(197.38939677012752,201.79863233626673),\n(211.66487429790584,239.00609777264683),\n(236.00990811938493,270.56874343985766),\n(268.34764758612255,293.8916209452305),\n(305.99793844636343,306.94940550263783),\n];\n\npub const logoPath2 = [\n(451.87140094230557,602.1619078110434),\n(486.29251847854266,622.2323459015123),\n(525.0474675157033,631.5641981376127),\n(564.852311019554,629.356639856118),\n(602.3248780708933,615.8045994091574),\n(634.3309736404595,592.0422272891796),\n(658.1539457850712,560.0779291620549),\n(671.7748167680887,522.6324487372781),\n(674.0564197042156,482.83741996002925),\n(664.802513049373,444.0747441577281),\n(644.7848636535293,409.5942420839993),\n(615.7020857431386,382.3322773053413),\n(580.0140772066509,364.5860070980618),\n(540.7286331849546,357.84918467153614),\n(501.165415783651,362.6925101786735),\n(464.6647081529237,378.70718806257287),\n(432.3072593603389,402.199889140537),\n(398.2575592626505,423.1228910326879),\n(360.9127940340042,437.14799612337356),\n(321.174878646251,438.4183448188125),\n(283.2521603337715,426.1623983366661),\n(248.70900986328027,406.05151673315385),\n(216.43777559524344,382.4456871602924),\n(180.8200178325316,364.5371472183075),\n(141.5630951779306,357.6283420525193),\n(101.9834477806449,362.29764865112304),\n(65.40326447164699,378.15686103433126),\n(34.94644591589244,403.8478116568671),\n(13.153800354272045,437.21996187233935),\n(1.8759296978847086,475.4505834586918),\n(2.066709423006884,515.3093933970973),\n(13.710149187603491,553.4309022236707),\n(35.820909042632074,586.5925166847115),\n(66.5392314406395,612.0011914315223),\n(103.252336820272,627.4988351532799),\n(142.8763750292417,631.7887844293851),\n(182.0634692296343,624.5048369401586),\n(217.51107280796145,606.2551520383203),\n(249.81667583724186,582.6938662902708),\n(284.49393762749804,562.8132021128339),\n(322.56195677111145,551.0072036701465),\n(362.2746942768097,552.8769284491539),\n(399.45542942085626,567.3067293377287),\n(433.38932465259774,588.460027547873),\n\n\n \n];\n"
  },
  {
    "path": "cli/test/vite-project/src/main.d.ts",
    "content": "import * as __ from \"shadeup/math\";\n\ndeclare namespace ShadeupFiles {\n  declare namespace main {\n    /**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n    export declare function setTexture(newTex: texture2d<__.float4>): void;\n    export declare function setModel(newModel: Model): void;\n    export declare function main(): void;\n  }\n}\n\nexport declare function makeShadeupInstance(\n  canvas: HTMLCanvasElement\n): Promise<{\n  /**\n   * Set to false to pause\n   */\n  playing: boolean;\n\n  canvas: HTMLCanvasElement;\n\n  adapter: any;\n  hooks: {\n    beforeFrame?: () => {};\n    afterFrame?: () => {};\n    reset?: () => {};\n  }[];\n  start: () => void;\n\n  env: {\n    camera: {\n      position: __.float3;\n      rotation: __.float4;\n      width: __.float;\n      height: __.float;\n      fov: __.float;\n      near: __.float;\n      far: __.float;\n    };\n    camera2d: {\n      position: __.float2;\n      zoom: __.float;\n    };\n    deltaTime: __.float;\n    frame: __.int;\n    keyboard: any;\n    mouse: any;\n    screenSize: __.float2;\n    time: __.float;\n  };\n\n  /**\n   * Used to pass values into the shadeup env (accessed as env.input(\"name\") inside)\n   */\n  inputValues: Map<string, any>;\n\n  enableUI: () => Promise<void>;\n\n  loadTextureFromImageLike: (\n\t\timg: HTMLImageElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas | HTMLVideoElement\n\t) => Promise<__.texture2d<__.float4>>;\n\tloadTexture2dFromURL: (url: string) =? Promise<__.texture2d<__.float4>>;\n\tloadModelFromURL(urlGltf: string) => Promise<__.texture2d<__.float4>>;\n\n  files: typeof ShadeupFiles;\n}>;\n"
  },
  {
    "path": "cli/test/vite-project/src/main.js",
    "content": "import { bindShadeupEngine } from \"shadeup\";\n\nexport const makeShadeupInstance = bindShadeupEngine((define, localEngineContext) => {\n  const __shadeup_gen_shader =\n    localEngineContext.__shadeup_gen_shader.bind(localEngineContext);\n  const __shadeup_make_shader_inst =\n    localEngineContext.__shadeup_make_shader_inst.bind(localEngineContext);\n  const __shadeup_register_struct =\n    localEngineContext.__shadeup_register_struct.bind(localEngineContext);\n  const env = localEngineContext.env;\n((defineFunc) => {\n    let define = (deps, func) => defineFunc(\"/__meta.js\", deps, func);\n  define([\"require\", \"exports\"], function (require, exports, __, std___std_all_1) {\n      \"use strict\";\n      Object.defineProperty(exports, \"__esModule\", { value: true });\n      exports.files = [\"main\"];\n  });\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/main.js\", deps, func);\n\t__shadeup_gen_shader(\"shd_000710086052666091061257200756375023002800009\", {\n\t\t\t\t\twebgl: {_ext_uniform_global_tex: {\"type\":\"primitive\",\"name\":\"texture2d\"}},\n\t\t\t\t\twebgpu: {\"attributeInput\":\"\",\"attributeOutput\":\"\",\"locals\":[],\"globals\":[[\"tex\",{\"fileName\":\"/main.ts\",\"structure\":{\"type\":\"primitive\",\"name\":\"texture2d\",\"access\":\"sample\"}}]]}\n\t\t\t\t}, {webgpu: `struct ShaderInput {\n @align(16)  position: vec3<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  clipPosition: vec4<f32>,\n @align(16)  realPosition: vec4<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  screen: vec2<f32>,\n @align(16)  color: vec4<f32>,\n @align(16)  groupId: vec3<i32>,\n @align(16)  groupSize: vec3<i32>,\n @align(16)  globalId: vec3<i32>,\n @align(16)  localId: vec3<i32>,\n @align(16)  instanceIndex: i32,\n @align(16)  vertexIndex: i32,\n};\nstruct ShaderOutput {\n @align(16)  position: vec4<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  color: vec4<f32>,\n// %SHADER_ShaderOutput%\n};\nstruct _InUniformsStruct {\n/*SHADEUP_UNIFORM_STRUCT_START*/\n@align(16) _ext_uniform_global_tex_size: vec2<f32>,\n};\n@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\n@group(%GROUP_INDEX%) @binding(2) var _ext_uniform_global_tex_texture: texture_2d<f32>;\n@group(%GROUP_INDEX%) @binding(3) var _ext_uniform_global_tex: sampler;\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)-> /*__SHADEUP_TEMPLATE_OUTPUT*/{\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\nvar normal: vec3<f32> = normalize(_i_in.normal);\nvar lightDir: vec3<f32> = normalize(vec3<f32>(f32(i32(2)), f32(4), f32(0.5)));\nvar diffuse: vec4<f32> = max(dot(normal, lightDir), f32(0)) * textureSample(_ext_uniform_global_tex_texture, _ext_uniform_global_tex, vec2(_i_in.uv));\n_i_out.color = vec4<f32>(diffuse.xyz, f32(i32(1)));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`,webgl:`struct ShaderInput {\n  vec3 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec4 clipPosition;\n  vec4 realPosition;\n  vec2 uv;\n  vec2 screen;\n  vec4 color;\n  ivec3 groupId;\n  ivec3 groupSize;\n  ivec3 globalId;\n  ivec3 localId;\n  int instanceIndex;\n  int vertexIndex;\n\n};\nstruct ShaderOutput {\n  vec4 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec2 uv;\n  vec4 color;\n\n};\nuniform sampler2D _ext_uniform_global_tex;\nuniform vec2 _ext_uniform_global_tex_size;\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nvoid main() {\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\nvec3 normal = normalize(_i_in.normal);\nvec3 lightDir = normalize(vec3(int(2), float(4), float(0.5)));\nvec4 diffuse = max(dot(normal, lightDir), float(0)) * texture(_ext_uniform_global_tex, vec2(_i_in.uv));\n_i_out.color = vec4(diffuse.xyz, int(1));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`, software: () => {}}, [[2830,2865,21,38],[2939,2972,38,53],[3048,3082,53,69],[3162,3198,69,87],[3242,3284,87,108],[3289,3331,108,129],[3400,3426,129,140],[3502,3532,140,155],[3609,3644,155,169],[3690,3720,169,186],[3768,3800,186,205],[3879,3910,205,223],[3956,3986,223,240],[4051,4074,240,261],[4123,4144,261,280],[2728,4283,0,284],[4371,4409,306,323],[4444,4477,323,338],[4513,4547,338,354],[4585,4621,354,372],[4655,4681,372,383],[4714,4749,383,397],[4309,4869,284,401],[1922,2081,401,444],[1922,2081,444,487],[3054,3063,603,612],[0,0,613,618],[0,0,619,625],[0,0,613,625],[0,0,603,626],[0,0,589,626],[0,0,589,628],[3134,3143,644,653],[3158,3164,659,662],[0,0,663,664],[0,0,659,665],[3169,3177,667,672],[0,0,673,674],[0,0,667,675],[3184,3192,677,682],[0,0,683,686],[0,0,677,687],[0,0,654,688],[0,0,644,689],[0,0,628,689],[0,0,628,691],[3258,3261,706,709],[3262,3265,710,713],[0,0,714,720],[0,0,722,730],[0,0,710,731],[3285,3293,733,738],[0,0,739,740],[0,0,733,741],[0,0,706,742],[0,0,753,776],[0,0,783,788],[0,0,789,791],[0,0,783,791],[0,0,745,793],[0,0,706,793],[0,0,691,793],[0,0,691,795],[0,0,795,801],[0,0,802,807],[0,0,795,807],[0,0,815,822],[0,0,815,826],[3401,3407,828,831],[0,0,832,833],[0,0,828,834],[0,0,810,835],[0,0,795,835],[0,0,795,837],[628,985,487,881],[2983,3414,0,881]]);\n\n__shadeup_gen_shader(\"shd_0012035060108500265800533466056020000547600000\", {\n\t\t\t\t\twebgl: {_ext_uniform_global_env: {\"type\":\"struct\",\"name\":\"str_i_iistd_native_ts_387_FrameContext\",\"fields\":{\"time\":{\"type\":\"primitive\",\"name\":\"float\"},\"camera\":{\"type\":\"struct\",\"name\":\"str_i_iistd_common_ts_10681_Camera\",\"fields\":{\"position\":{\"type\":\"primitive\",\"name\":\"float3\"},\"rotation\":{\"type\":\"primitive\",\"name\":\"float4\"},\"width\":{\"type\":\"primitive\",\"name\":\"float\"},\"height\":{\"type\":\"primitive\",\"name\":\"float\"},\"fov\":{\"type\":\"primitive\",\"name\":\"float\"},\"near\":{\"type\":\"primitive\",\"name\":\"float\"},\"far\":{\"type\":\"primitive\",\"name\":\"float\"}}}}}},\n\t\t\t\t\twebgpu: {\"attributeInput\":\"\",\"attributeOutput\":\"\",\"locals\":[],\"globals\":[[\"env\",{\"fileName\":\"/_std/native.ts\",\"structure\":{\"type\":\"struct\",\"name\":\"str_i_iistd_native_ts_387_FrameContext\",\"fields\":[[\"time\",{\"type\":\"primitive\",\"name\":\"float\"}],[\"camera\",{\"type\":\"struct\",\"name\":\"str_i_iistd_common_ts_10681_Camera\",\"fields\":[[\"position\",{\"type\":\"primitive\",\"name\":\"float3\"}],[\"rotation\",{\"type\":\"primitive\",\"name\":\"float4\"}],[\"width\",{\"type\":\"primitive\",\"name\":\"float\"}],[\"height\",{\"type\":\"primitive\",\"name\":\"float\"}],[\"fov\",{\"type\":\"primitive\",\"name\":\"float\"}],[\"near\",{\"type\":\"primitive\",\"name\":\"float\"}],[\"far\",{\"type\":\"primitive\",\"name\":\"float\"}]]}]]}}]]}\n\t\t\t\t}, {webgpu: `fn matrix_inversefloat4x4(m: mat4x4<f32>) -> mat4x4<f32>{\n\tlet n11 = m[0][0];\n\tlet n12 = m[1][0];\n\tlet n13 = m[2][0];\n\tlet n14 = m[3][0];\n\tlet n21 = m[0][1];\n\tlet n22 = m[1][1];\n\tlet n23 = m[2][1];\n\tlet n24 = m[3][1];\n\tlet n31 = m[0][2];\n\tlet n32 = m[1][2];\n\tlet n33 = m[2][2];\n\tlet n34 = m[3][2];\n\tlet n41 = m[0][3];\n\tlet n42 = m[1][3];\n\tlet n43 = m[2][3];\n\tlet n44 = m[3][3];\n\n\tlet t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\n\tlet t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\n\tlet t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\n\tlet t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\tlet idet = 1.0 / det;\n\n\tvar ret: mat4x4<f32> = mat4x4<f32>();\n\n\tret[0][0] = t11 * idet;\n\tret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet;\n\tret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet;\n\tret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet;\n\n\tret[1][0] = t12 * idet;\n\tret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet;\n\tret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet;\n\tret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet;\n\n\tret[2][0] = t13 * idet;\n\tret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet;\n\tret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet;\n\tret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet;\n\n\tret[3][0] = t14 * idet;\n\tret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet;\n\tret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet;\n\tret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet;\n\n\treturn ret;\n}\n\nstruct ShaderInput {\n @align(16)  position: vec3<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  clipPosition: vec4<f32>,\n @align(16)  realPosition: vec4<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  screen: vec2<f32>,\n @align(16)  color: vec4<f32>,\n @align(16)  groupId: vec3<i32>,\n @align(16)  groupSize: vec3<i32>,\n @align(16)  globalId: vec3<i32>,\n @align(16)  localId: vec3<i32>,\n @align(16)  instanceIndex: i32,\n @align(16)  vertexIndex: i32,\n};\nstruct ShaderOutput {\n @align(16)  position: vec4<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  color: vec4<f32>,\n// %SHADER_ShaderOutput%\n};\nstruct str_i_iistd_common_ts_10681_Camera {\n @align(16)  position: vec3<f32>,\n @align(16)  rotation: vec4<f32>,\n @align(16)  width: f32,\n @align(16)  height: f32,\n @align(16)  fov: f32,\n @align(16)  near: f32,\n @align(16)  far: f32,\n\n};\nfn _make_struct_str_i_iistd_common_ts_10681_Camera(  far: f32,  fov: f32,  height: f32,  near: f32,  position: vec3<f32>,  rotation: vec4<f32>,  width: f32,) -> str_i_iistd_common_ts_10681_Camera {\nvar _s: str_i_iistd_common_ts_10681_Camera;\n  _s.far = far;\n  _s.fov = fov;\n  _s.height = height;\n  _s.near = near;\n  _s.position = position;\n  _s.rotation = rotation;\n  _s.width = width;\n\nreturn _s; \n}\nstruct str_i_iistd_native_ts_387_FrameContext {\n//  @align(16)  deltaTime: f32,\n @align(16)  time: f32,\n//  @align(16)  screenSize: vec2<f32>,\n//  @align(16)  frame: i32,\n//   mouse: str_i_iistd_native_ts_1719_MouseInputState,\n//   keyboard: str_i_iistd_native_ts_3334_KeyboardInputState,\n  camera: str_i_iistd_common_ts_10681_Camera,\n//   camera2d: str_i_iistd_common_ts_9656_Camera2d,\n\n};\nfn _make_struct_str_i_iistd_native_ts_387_FrameContext(  camera: str_i_iistd_common_ts_10681_Camera,  time: f32,) -> str_i_iistd_native_ts_387_FrameContext {\nvar _s: str_i_iistd_native_ts_387_FrameContext;\n  _s.camera = camera;\n  _s.time = time;\n\nreturn _s; \n}\nstruct _InUniformsStruct {\n/*SHADEUP_UNIFORM_STRUCT_START*/\n_ext_uniform_global_env: str_i_iistd_native_ts_387_FrameContext,\n};\n@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\nfn fn_ii_std_common_ts_3330_quat_static_conjugate(quaternion_const: vec4<f32>) -> vec4<f32> {\nvar quaternion = quaternion_const;\nreturn vec4<f32>(-(quaternion.xyz), quaternion.w);\n\n}\n\nfn fn_ii_std_common_ts_2513_quat_static_mul(a_const: vec4<f32>, b_const: vec4<f32>) -> vec4<f32> {\nvar a = a_const;\nvar b = b_const;\nreturn vec4<f32>(b.xyz * a.w + a.xyz * b.w + cross(a.xyz, b.xyz), a.w * b.w - dot(a.xyz, b.xyz));\n\n}\n\nfn fn_ii_std_common_ts_7975_quat_static_toMatrix(quaternion_const: vec4<f32>) -> mat4x4<f32> {\nvar quaternion = quaternion_const;\nvar x: f32 = quaternion.x;\nvar y: f32 = quaternion.y;\nvar z: f32 = quaternion.z;\nvar w: f32 = quaternion.w;\nvar x2: f32 = x + x;\nvar y2: f32 = y + y;\nvar z2: f32 = z + z;\nvar xx: f32 = x * x2;\nvar xy: f32 = x * y2;\nvar xz: f32 = x * z2;\nvar yy: f32 = y * y2;\nvar yz: f32 = y * z2;\nvar zz: f32 = z * z2;\nvar wx: f32 = w * x2;\nvar wy: f32 = w * y2;\nvar wz: f32 = w * z2;\nvar m: mat4x4<f32> = mat4x4<f32>(f32(1) - (yy + zz), xy + wz, xz - wy, f32(i32(0)), xy - wz, f32(1) - (xx + zz), yz + wx, f32(i32(0)), xz + wy, yz - wx, f32(1) - (xx + yy), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(1));\nreturn m;\n\n}\n\nfn fn_ii_std_common_ts_47518_matrix_static_perspective(fov_const: f32, aspect_const: f32, near_const: f32, far_const: f32) -> mat4x4<f32> {\nvar fov = fov_const;\nvar aspect = aspect_const;\nvar near = near_const;\nvar far = far_const;\nvar fovRad: f32 = radians(fov);\nvar tanFov: f32 = tan(fovRad * f32(0.5));\nvar matrx: mat4x4<f32> = mat4x4<f32>(f32(1) / (tanFov * aspect), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(1) / tanFov, f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(0)), -(((far + near) / (far - near))), f32(-(i32(1))), f32(i32(0)), f32(i32(0)), -(((f32(i32(2)) * (near * far)) / (far - near))), f32(i32(0)));\nreturn matrx;\n\n}\n\nfn fn_ii_std_common_ts_12813_Camera_static_getWorldToViewMatrix(_this: str_i_iistd_common_ts_10681_Camera) -> mat4x4<f32> {\nvar shader_self_temp: str_i_iistd_common_ts_10681_Camera = _this;\nvar rotationMatrix: mat4x4<f32> = fn_ii_std_common_ts_7975_quat_static_toMatrix(_this.rotation);\nvar translationMatrix: mat4x4<f32> = mat4x4<f32>(f32(i32(1)), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(1)), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(0)), f32(i32(1)), f32(i32(0)), _this.position.x, _this.position.y, _this.position.z, f32(i32(1)));\nreturn matrix_inversefloat4x4(translationMatrix * rotationMatrix);\n\n}\n\nfn fn_ii_std_common_ts_13404_Camera_static_getPerspectiveMatrix(_this: str_i_iistd_common_ts_10681_Camera) -> mat4x4<f32> {\nvar shader_self_temp: str_i_iistd_common_ts_10681_Camera = _this;\nreturn fn_ii_std_common_ts_47518_matrix_static_perspective(_this.fov, _this.width / _this.height, _this.near, _this.far);\n\n}\n\nfn fn_ii_std_common_ts_8827_quat_static_fromEulerAngles(angles_const: vec3<f32>) -> vec4<f32> {\nvar angles = angles_const;\nvar cr: f32 = cos(angles.x * f32(0.5));\nvar sr: f32 = sin(angles.x * f32(0.5));\nvar cp: f32 = cos(angles.y * f32(0.5));\nvar sp: f32 = sin(angles.y * f32(0.5));\nvar cy: f32 = cos(angles.z * f32(0.5));\nvar sy: f32 = sin(angles.z * f32(0.5));\nreturn vec4<f32>(sr * cp * cy - cr * sp * sy, cr * sp * cy + sr * cp * sy, cr * cp * sy - sr * sp * cy, cr * cp * cy + sr * sp * sy);\n\n}\n\nfn fn_ii_std_common_ts_2939_quat_static_rotate(quaternion_const: vec4<f32>, vector_const: vec3<f32>) -> vec3<f32> {\nvar quaternion = quaternion_const;\nvar vector = vector_const;\nvar q: vec4<f32> = fn_ii_std_common_ts_2513_quat_static_mul(fn_ii_std_common_ts_2513_quat_static_mul(quaternion, vec4<f32>(vector, f32(i32(0)))), fn_ii_std_common_ts_3330_quat_static_conjugate(quaternion));\nreturn q.xyz;\n\n}\n\nfn fn_ii_std_common_ts_12549_Camera_static_getCombinedMatrix(_this: str_i_iistd_common_ts_10681_Camera) -> mat4x4<f32> {\nvar shader_self_temp: str_i_iistd_common_ts_10681_Camera = _this;\nreturn fn_ii_std_common_ts_13404_Camera_static_getPerspectiveMatrix(_this) * fn_ii_std_common_ts_12813_Camera_static_getWorldToViewMatrix(_this);\n\n}\n\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)-> /*__SHADEUP_TEMPLATE_OUTPUT*/{\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\n_i_out.position = fn_ii_std_common_ts_12549_Camera_static_getCombinedMatrix(_in_uniforms._ext_uniform_global_env.camera) * vec4<f32>(fn_ii_std_common_ts_2939_quat_static_rotate(fn_ii_std_common_ts_8827_quat_static_fromEulerAngles(vec3<f32>(f32(i32(0)), _in_uniforms._ext_uniform_global_env.time, f32(i32(0)))), _i_in.position), f32(i32(1)));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`,webgl:`mat4 matrix_inversefloat4x4(mat4 m) {\n\treturn inverse(m);\n}\n\nstruct ShaderInput {\n  vec3 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec4 clipPosition;\n  vec4 realPosition;\n  vec2 uv;\n  vec2 screen;\n  vec4 color;\n  ivec3 groupId;\n  ivec3 groupSize;\n  ivec3 globalId;\n  ivec3 localId;\n  int instanceIndex;\n  int vertexIndex;\n\n};\nstruct ShaderOutput {\n  vec4 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec2 uv;\n  vec4 color;\n\n};\nstruct str_i_iistd_common_ts_10681_Camera {\n  vec3 position;\n  vec4 rotation;\n  float width;\n  float height;\n  float fov;\n  float near;\n  float far;\n\n};\nstr_i_iistd_common_ts_10681_Camera _make_struct_str_i_iistd_common_ts_10681_Camera(vec3 position, vec4 rotation, float width, float height, float fov, float near, float far) {\nstr_i_iistd_common_ts_10681_Camera _s;  _s.position = position;\n  _s.rotation = rotation;\n  _s.width = width;\n  _s.height = height;\n  _s.fov = fov;\n  _s.near = near;\n  _s.far = far;\n  return _s;\n}\nstruct str_i_iistd_native_ts_387_FrameContext {\n//   float deltaTime;\n  float time;\n//   vec2 screenSize;\n//   int frame;\n//   str_i_iistd_native_ts_1719_MouseInputState mouse;\n//   str_i_iistd_native_ts_3334_KeyboardInputState keyboard;\n  str_i_iistd_common_ts_10681_Camera camera;\n//   str_i_iistd_common_ts_9656_Camera2d camera2d;\n\n};\nstr_i_iistd_native_ts_387_FrameContext _make_struct_str_i_iistd_native_ts_387_FrameContext(float time, str_i_iistd_common_ts_10681_Camera camera) {\nstr_i_iistd_native_ts_387_FrameContext _s;  _s.time = time;\n  _s.camera = camera;\n  return _s;\n}\nuniform str_i_iistd_native_ts_387_FrameContext _ext_uniform_global_env;\nvec4 fn_ii_std_common_ts_3330_quat_static_conjugate(vec4 quaternion) {\nreturn vec4(-(quaternion.xyz), quaternion.w);\n\n}\n\nvec4 fn_ii_std_common_ts_2513_quat_static_mul(vec4 a, vec4 b) {\nreturn vec4(b.xyz * a.w + a.xyz * b.w + cross(a.xyz, b.xyz), a.w * b.w - dot(a.xyz, b.xyz));\n\n}\n\nmat4 fn_ii_std_common_ts_7975_quat_static_toMatrix(vec4 quaternion) {\nfloat x = quaternion.x;\nfloat y = quaternion.y;\nfloat z = quaternion.z;\nfloat w = quaternion.w;\nfloat x2 = x + x;\nfloat y2 = y + y;\nfloat z2 = z + z;\nfloat xx = x * x2;\nfloat xy = x * y2;\nfloat xz = x * z2;\nfloat yy = y * y2;\nfloat yz = y * z2;\nfloat zz = z * z2;\nfloat wx = w * x2;\nfloat wy = w * y2;\nfloat wz = w * z2;\nmat4 m = mat4(float(1) - (yy + zz), xy + wz, xz - wy, int(0), xy - wz, float(1) - (xx + zz), yz + wx, int(0), xz + wy, yz - wx, float(1) - (xx + yy), int(0), int(0), int(0), int(0), float(1));\nreturn m;\n\n}\n\nmat4 fn_ii_std_common_ts_47518_matrix_static_perspective(float fov, float aspect, float near, float far) {\nfloat fovRad = radians(fov);\nfloat tanFov = tan(fovRad * float(0.5));\nmat4 matrx = mat4(float(1) / (tanFov * aspect), int(0), int(0), int(0), int(0), float(1) / tanFov, int(0), int(0), int(0), int(0), -(((far + near) / (far - near))), -(int(1)), int(0), int(0), -(((float(int(2)) * (near * far)) / (far - near))), int(0));\nreturn matrx;\n\n}\n\nmat4 fn_ii_std_common_ts_12813_Camera_static_getWorldToViewMatrix(str_i_iistd_common_ts_10681_Camera _this) {\nstr_i_iistd_common_ts_10681_Camera shader_self_temp = _this;\nmat4 rotationMatrix = fn_ii_std_common_ts_7975_quat_static_toMatrix(_this.rotation);\nmat4 translationMatrix = mat4(int(1), int(0), int(0), int(0), int(0), int(1), int(0), int(0), int(0), int(0), int(1), int(0), _this.position.x, _this.position.y, _this.position.z, int(1));\nreturn matrix_inversefloat4x4(translationMatrix * rotationMatrix);\n\n}\n\nmat4 fn_ii_std_common_ts_13404_Camera_static_getPerspectiveMatrix(str_i_iistd_common_ts_10681_Camera _this) {\nstr_i_iistd_common_ts_10681_Camera shader_self_temp = _this;\nreturn fn_ii_std_common_ts_47518_matrix_static_perspective(_this.fov, _this.width / _this.height, _this.near, _this.far);\n\n}\n\nvec4 fn_ii_std_common_ts_8827_quat_static_fromEulerAngles(vec3 angles) {\nfloat cr = cos(angles.x * float(0.5));\nfloat sr = sin(angles.x * float(0.5));\nfloat cp = cos(angles.y * float(0.5));\nfloat sp = sin(angles.y * float(0.5));\nfloat cy = cos(angles.z * float(0.5));\nfloat sy = sin(angles.z * float(0.5));\nreturn vec4(sr * cp * cy - cr * sp * sy, cr * sp * cy + sr * cp * sy, cr * cp * sy - sr * sp * cy, cr * cp * cy + sr * sp * sy);\n\n}\n\nvec3 fn_ii_std_common_ts_2939_quat_static_rotate(vec4 quaternion, vec3 vector) {\nvec4 q = fn_ii_std_common_ts_2513_quat_static_mul(fn_ii_std_common_ts_2513_quat_static_mul(quaternion, vec4(vector, int(0))), fn_ii_std_common_ts_3330_quat_static_conjugate(quaternion));\nreturn q.xyz;\n\n}\n\nmat4 fn_ii_std_common_ts_12549_Camera_static_getCombinedMatrix(str_i_iistd_common_ts_10681_Camera _this) {\nstr_i_iistd_common_ts_10681_Camera shader_self_temp = _this;\nreturn fn_ii_std_common_ts_13404_Camera_static_getPerspectiveMatrix(_this) * fn_ii_std_common_ts_12813_Camera_static_getWorldToViewMatrix(_this);\n\n}\n\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nvoid main() {\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\n_i_out.position = fn_ii_std_common_ts_12549_Camera_static_getCombinedMatrix(_ext_uniform_global_env.camera) * vec4(fn_ii_std_common_ts_2939_quat_static_rotate(fn_ii_std_common_ts_8827_quat_static_fromEulerAngles(vec3(int(0), _ext_uniform_global_env.time, int(0))), _i_in.position), int(1));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`, software: () => {}}, [[2830,2865,21,38],[2939,2972,38,53],[3048,3082,53,69],[3162,3198,69,87],[3242,3284,87,108],[3289,3331,108,129],[3400,3426,129,140],[3502,3532,140,155],[3609,3644,155,169],[3690,3720,169,186],[3768,3800,186,205],[3879,3910,205,223],[3956,3986,223,240],[4051,4074,240,261],[4123,4144,261,280],[2728,4283,0,284],[4371,4409,306,323],[4444,4477,323,338],[4513,4547,338,354],[4585,4621,354,372],[4655,4681,372,383],[4714,4749,383,397],[4309,4869,284,401],[14920,14947,445,462],[14949,14976,462,479],[14978,15001,479,494],[15003,15027,494,510],[15029,15050,510,523],[15052,15074,523,537],[15076,15097,537,550],[10681,15372,401,554],[10681,15372,554,927],[493,510,975,997],[577,589,997,1011],[623,642,1011,1033],[674,685,1033,1049],[745,792,1049,1104],[842,898,1104,1165],[972,1002,1165,1210],[1007,1043,1210,1261],[387,1715,927,1265],[387,1715,1265,1510],[16316,16333,1510,1582],[0,0,1634,1649],[0,0,1667,1677],[0,0,1667,1681],[0,0,1665,1682],[0,0,1684,1694],[0,0,1684,1696],[0,0,1660,1697],[0,0,1653,1699],[682,696,1582,1703],[0,0,1749,1755],[0,0,1757,1763],[0,0,1779,1780],[0,0,1779,1784],[0,0,1787,1788],[0,0,1787,1790],[0,0,1779,1790],[0,0,1793,1794],[0,0,1793,1798],[0,0,1801,1802],[0,0,1801,1804],[0,0,1793,1804],[0,0,1779,1804],[0,0,1807,1812],[0,0,1813,1814],[0,0,1813,1818],[0,0,1820,1821],[0,0,1820,1825],[0,0,1807,1826],[0,0,1779,1826],[0,0,1828,1829],[0,0,1828,1831],[0,0,1834,1835],[0,0,1834,1837],[0,0,1828,1837],[2802,2805,1840,1843],[0,0,1844,1845],[0,0,1844,1849],[0,0,1851,1852],[0,0,1851,1856],[0,0,1840,1857],[0,0,1828,1857],[0,0,1774,1858],[0,0,1767,1860],[682,696,1703,1864],[0,0,1915,1930],[0,0,1944,1954],[0,0,1944,1956],[0,0,1934,1956],[0,0,1934,1958],[0,0,1968,1978],[0,0,1968,1980],[0,0,1958,1980],[0,0,1958,1982],[0,0,1992,2002],[0,0,1992,2004],[0,0,1982,2004],[0,0,1982,2006],[0,0,2016,2026],[0,0,2016,2028],[0,0,2006,2028],[0,0,2006,2030],[0,0,2041,2042],[0,0,2045,2046],[0,0,2041,2046],[0,0,2030,2046],[0,0,2030,2048],[0,0,2059,2060],[0,0,2063,2064],[0,0,2059,2064],[0,0,2048,2064],[0,0,2048,2066],[0,0,2077,2078],[0,0,2081,2082],[0,0,2077,2082],[0,0,2066,2082],[0,0,2066,2084],[0,0,2095,2096],[0,0,2099,2101],[0,0,2095,2101],[0,0,2084,2101],[0,0,2084,2103],[0,0,2114,2115],[0,0,2118,2120],[0,0,2114,2120],[0,0,2103,2120],[0,0,2103,2122],[0,0,2133,2134],[0,0,2137,2139],[0,0,2133,2139],[0,0,2122,2139],[0,0,2122,2141],[0,0,2152,2153],[0,0,2156,2158],[0,0,2152,2158],[0,0,2141,2158],[0,0,2141,2160],[0,0,2171,2172],[0,0,2175,2177],[0,0,2171,2177],[0,0,2160,2177],[0,0,2160,2179],[0,0,2190,2191],[0,0,2194,2196],[0,0,2190,2196],[0,0,2179,2196],[0,0,2179,2198],[0,0,2209,2210],[0,0,2213,2215],[0,0,2209,2215],[0,0,2198,2215],[0,0,2198,2217],[0,0,2228,2229],[0,0,2232,2234],[0,0,2228,2234],[0,0,2217,2234],[0,0,2217,2236],[0,0,2247,2248],[0,0,2251,2253],[0,0,2247,2253],[0,0,2236,2253],[0,0,2236,2255],[8499,8507,2269,2274],[0,0,2275,2276],[0,0,2269,2277],[0,0,2281,2283],[0,0,2286,2288],[0,0,2281,2288],[0,0,2280,2289],[0,0,2269,2289],[0,0,2291,2293],[0,0,2296,2298],[0,0,2291,2298],[0,0,2300,2302],[0,0,2305,2307],[0,0,2300,2307],[8572,8578,2309,2312],[0,0,2313,2314],[0,0,2309,2315],[0,0,2317,2319],[0,0,2322,2324],[0,0,2317,2324],[8609,8617,2326,2331],[0,0,2332,2333],[0,0,2326,2334],[0,0,2338,2340],[0,0,2343,2345],[0,0,2338,2345],[0,0,2337,2346],[0,0,2326,2346],[0,0,2348,2350],[0,0,2353,2355],[0,0,2348,2355],[8664,8670,2357,2360],[0,0,2361,2362],[0,0,2357,2363],[0,0,2365,2367],[0,0,2370,2372],[0,0,2365,2372],[0,0,2374,2376],[0,0,2379,2381],[0,0,2374,2381],[8719,8727,2383,2388],[0,0,2389,2390],[0,0,2383,2391],[0,0,2395,2397],[0,0,2400,2402],[0,0,2395,2402],[0,0,2394,2403],[0,0,2383,2403],[8756,8762,2405,2408],[0,0,2409,2410],[0,0,2405,2411],[8767,8773,2413,2416],[0,0,2417,2418],[0,0,2413,2419],[8778,8784,2421,2424],[0,0,2425,2426],[0,0,2421,2427],[8789,8795,2429,2432],[0,0,2433,2434],[0,0,2429,2435],[8800,8808,2437,2442],[0,0,2443,2444],[0,0,2437,2445],[0,0,2264,2446],[0,0,2255,2446],[0,0,2255,2448],[0,0,2455,2456],[0,0,2448,2458],[682,696,1864,2462],[0,0,2519,2528],[0,0,2530,2542],[0,0,2544,2554],[0,0,2556,2565],[48073,48080,2584,2591],[0,0,2592,2595],[0,0,2584,2596],[0,0,2569,2596],[0,0,2569,2598],[48100,48103,2613,2616],[0,0,2617,2623],[48120,48128,2626,2631],[0,0,2632,2635],[0,0,2626,2636],[0,0,2617,2636],[0,0,2613,2637],[0,0,2598,2637],[0,0,2598,2639],[48170,48178,2657,2662],[0,0,2663,2664],[0,0,2657,2665],[0,0,2669,2675],[0,0,2678,2684],[0,0,2669,2684],[0,0,2668,2685],[0,0,2657,2685],[48215,48221,2687,2690],[0,0,2691,2692],[0,0,2687,2693],[48226,48232,2695,2698],[0,0,2699,2700],[0,0,2695,2701],[48237,48243,2703,2706],[0,0,2707,2708],[0,0,2703,2709],[48248,48254,2711,2714],[0,0,2715,2716],[0,0,2711,2717],[48267,48275,2719,2724],[0,0,2725,2726],[0,0,2719,2727],[0,0,2730,2736],[0,0,2719,2736],[48292,48298,2738,2741],[0,0,2742,2743],[0,0,2738,2744],[48303,48309,2746,2749],[0,0,2750,2751],[0,0,2746,2752],[48314,48320,2754,2757],[0,0,2758,2759],[0,0,2754,2760],[48325,48331,2762,2765],[0,0,2766,2767],[0,0,2762,2768],[0,0,2774,2777],[0,0,2780,2784],[0,0,2774,2784],[0,0,2773,2785],[0,0,2789,2792],[0,0,2795,2799],[0,0,2789,2799],[0,0,2788,2800],[0,0,2773,2800],[0,0,2772,2801],[0,0,2770,2802],[48415,48421,2806,2809],[0,0,2810,2811],[0,0,2806,2812],[0,0,2804,2813],[48427,48433,2815,2818],[0,0,2819,2820],[0,0,2815,2821],[48438,48444,2823,2826],[0,0,2827,2828],[0,0,2823,2829],[48477,48483,2841,2844],[0,0,2845,2846],[0,0,2841,2847],[0,0,2835,2848],[0,0,2852,2856],[0,0,2859,2862],[0,0,2852,2862],[0,0,2851,2863],[0,0,2835,2863],[0,0,2834,2864],[0,0,2868,2871],[0,0,2874,2878],[0,0,2868,2878],[0,0,2867,2879],[0,0,2834,2879],[0,0,2833,2880],[0,0,2831,2881],[48541,48547,2883,2886],[0,0,2887,2888],[0,0,2883,2889],[0,0,2652,2890],[0,0,2639,2890],[0,0,2639,2892],[0,0,2899,2904],[0,0,2892,2906],[33022,33038,2462,2910],[0,0,3074,3079],[0,0,3020,3079],[0,0,3020,3081],[12885,12898,3103,3148],[0,0,3149,3154],[0,0,3155,3163],[0,0,3149,3163],[0,0,3103,3164],[0,0,3081,3164],[0,0,3081,3166],[12951,12957,3196,3199],[0,0,3200,3201],[0,0,3196,3202],[12962,12968,3204,3207],[0,0,3208,3209],[0,0,3204,3210],[12973,12979,3212,3215],[0,0,3216,3217],[0,0,3212,3218],[12984,12990,3220,3223],[0,0,3224,3225],[0,0,3220,3226],[12995,13001,3228,3231],[0,0,3232,3233],[0,0,3228,3234],[13006,13012,3236,3239],[0,0,3240,3241],[0,0,3236,3242],[13017,13023,3244,3247],[0,0,3248,3249],[0,0,3244,3250],[13028,13034,3252,3255],[0,0,3256,3257],[0,0,3252,3258],[13039,13045,3260,3263],[0,0,3264,3265],[0,0,3260,3266],[13050,13056,3268,3271],[0,0,3272,3273],[0,0,3268,3274],[13061,13067,3276,3279],[0,0,3280,3281],[0,0,3276,3282],[13072,13078,3284,3287],[0,0,3288,3289],[0,0,3284,3290],[0,0,3292,3297],[0,0,3298,3306],[0,0,3292,3306],[0,0,3292,3308],[0,0,3310,3315],[0,0,3316,3324],[0,0,3310,3324],[0,0,3310,3326],[0,0,3328,3333],[0,0,3334,3342],[0,0,3328,3342],[0,0,3328,3344],[13179,13185,3346,3349],[0,0,3350,3351],[0,0,3346,3352],[0,0,3191,3353],[0,0,3166,3353],[0,0,3166,3355],[13198,13205,3362,3384],[0,0,3385,3402],[0,0,3405,3419],[0,0,3385,3419],[0,0,3362,3420],[0,0,3355,3422],[8125,8367,2910,3426],[0,0,3590,3595],[0,0,3536,3595],[0,0,3536,3597],[13462,13480,3604,3655],[0,0,3656,3661],[0,0,3662,3665],[0,0,3656,3665],[0,0,3667,3672],[0,0,3673,3678],[0,0,3667,3678],[0,0,3681,3686],[0,0,3687,3693],[0,0,3681,3693],[0,0,3667,3693],[0,0,3695,3700],[0,0,3701,3705],[0,0,3695,3705],[0,0,3707,3712],[0,0,3713,3716],[0,0,3707,3716],[0,0,3604,3717],[0,0,3597,3719],[8125,8367,3426,3723],[0,0,3781,3792],[8878,8881,3807,3810],[0,0,3811,3817],[0,0,3811,3819],[8915,8923,3822,3827],[0,0,3828,3831],[0,0,3822,3832],[0,0,3811,3832],[0,0,3807,3833],[0,0,3796,3833],[0,0,3796,3835],[8942,8945,3846,3849],[0,0,3850,3856],[0,0,3850,3858],[8979,8987,3861,3866],[0,0,3867,3870],[0,0,3861,3871],[0,0,3850,3871],[0,0,3846,3872],[0,0,3835,3872],[0,0,3835,3874],[9006,9009,3885,3888],[0,0,3889,3895],[0,0,3889,3897],[9043,9051,3900,3905],[0,0,3906,3909],[0,0,3900,3910],[0,0,3889,3910],[0,0,3885,3911],[0,0,3874,3911],[0,0,3874,3913],[9070,9073,3924,3927],[0,0,3928,3934],[0,0,3928,3936],[9107,9115,3939,3944],[0,0,3945,3948],[0,0,3939,3949],[0,0,3928,3949],[0,0,3924,3950],[0,0,3913,3950],[0,0,3913,3952],[9134,9137,3963,3966],[0,0,3967,3973],[0,0,3967,3975],[9171,9179,3978,3983],[0,0,3984,3987],[0,0,3978,3988],[0,0,3967,3988],[0,0,3963,3989],[0,0,3952,3989],[0,0,3952,3991],[9198,9201,4002,4005],[0,0,4006,4012],[0,0,4006,4014],[9235,9243,4017,4022],[0,0,4023,4026],[0,0,4017,4027],[0,0,4006,4027],[0,0,4002,4028],[0,0,3991,4028],[0,0,3991,4030],[0,0,4042,4044],[0,0,4047,4049],[0,0,4042,4049],[0,0,4052,4054],[0,0,4042,4054],[0,0,4057,4059],[0,0,4062,4064],[0,0,4057,4064],[0,0,4067,4069],[0,0,4057,4069],[0,0,4042,4069],[0,0,4071,4073],[0,0,4076,4078],[0,0,4071,4078],[0,0,4081,4083],[0,0,4071,4083],[0,0,4086,4088],[0,0,4091,4093],[0,0,4086,4093],[0,0,4096,4098],[0,0,4086,4098],[0,0,4071,4098],[0,0,4100,4102],[0,0,4105,4107],[0,0,4100,4107],[0,0,4110,4112],[0,0,4100,4112],[0,0,4115,4117],[0,0,4120,4122],[0,0,4115,4122],[0,0,4125,4127],[0,0,4115,4127],[0,0,4100,4127],[0,0,4129,4131],[0,0,4134,4136],[0,0,4129,4136],[0,0,4139,4141],[0,0,4129,4141],[0,0,4144,4146],[0,0,4149,4151],[0,0,4144,4151],[0,0,4154,4156],[0,0,4144,4156],[0,0,4129,4156],[0,0,4037,4157],[0,0,4030,4159],[682,696,3723,4163],[0,0,4212,4227],[0,0,4229,4240],[3003,3011,4253,4293],[3012,3020,4294,4334],[0,0,4335,4345],[0,0,4352,4358],[3051,3057,4360,4363],[0,0,4364,4365],[0,0,4360,4366],[0,0,4347,4367],[0,0,4294,4368],[3064,3078,4370,4416],[0,0,4417,4427],[0,0,4370,4428],[0,0,4253,4429],[0,0,4244,4429],[0,0,4244,4431],[0,0,4438,4439],[0,0,4438,4443],[0,0,4431,4445],[682,696,4163,4449],[0,0,4610,4615],[0,0,4556,4615],[0,0,4556,4617],[12612,12637,4624,4684],[0,0,4685,4690],[0,0,4624,4691],[12641,12666,4694,4754],[0,0,4755,4760],[0,0,4694,4761],[0,0,4624,4761],[0,0,4617,4763],[9276,9402,4449,4767],[0,0,4869,4875],[0,0,4876,4884],[0,0,4869,4884],[2723,2751,4887,4944],[0,0,4945,4968],[0,0,4969,4975],[0,0,4945,4975],[0,0,4887,4976],[2769,2780,4984,5027],[2781,2801,5028,5080],[2816,2822,5086,5089],[0,0,5090,5091],[0,0,5086,5092],[0,0,5094,5117],[0,0,5118,5122],[0,0,5094,5122],[2837,2843,5124,5127],[0,0,5128,5129],[0,0,5124,5130],[0,0,5081,5131],[0,0,5028,5132],[0,0,5134,5139],[0,0,5140,5148],[0,0,5134,5148],[0,0,4984,5149],[2866,2872,5151,5154],[0,0,5155,5156],[0,0,5151,5157],[0,0,4979,5158],[0,0,4887,5158],[0,0,4869,5158],[0,0,4869,5160],[470,623,4767,5204],[2680,2881,0,5204]]);\n\n__shadeup_gen_shader(\"shd_1701801860004512470030001480000000600500422857\", {\n\t\t\t\t\twebgl: {},\n\t\t\t\t\twebgpu: {\"attributeInput\":\"\",\"attributeOutput\":\"\",\"locals\":[],\"globals\":[]}\n\t\t\t\t}, {webgpu: `fn shadeup_up_swizzle_xxxx_i32(n: i32) -> vec4<i32>{\n\treturn vec4<i32>(n, n, n, n);\n}\n\nstruct ShaderInput {\n @align(16)  position: vec3<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  clipPosition: vec4<f32>,\n @align(16)  realPosition: vec4<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  screen: vec2<f32>,\n @align(16)  color: vec4<f32>,\n @align(16)  groupId: vec3<i32>,\n @align(16)  groupSize: vec3<i32>,\n @align(16)  globalId: vec3<i32>,\n @align(16)  localId: vec3<i32>,\n @align(16)  instanceIndex: i32,\n @align(16)  vertexIndex: i32,\n};\nstruct ShaderOutput {\n @align(16)  position: vec4<f32>,\n @align(16)  normal: vec3<f32>,\n @align(16)  tangent: vec3<f32>,\n @align(16)  bitangent: vec3<f32>,\n @align(16)  uv: vec2<f32>,\n @align(16)  color: vec4<f32>,\n// %SHADER_ShaderOutput%\n};\nstruct _InUniformsStruct {\n/*SHADEUP_UNIFORM_STRUCT_START*/\ndummy: vec4<f32>,\n};\n@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)-> /*__SHADEUP_TEMPLATE_OUTPUT*/{\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\n_i_out.color = vec4f(shadeup_up_swizzle_xxxx_i32(i32(1)));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`,webgl:`ivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec2 shadeup_up_swizzle_xy_int(int n) {\n\treturn ivec2(n, n);\n}\n\nivec3 shadeup_up_swizzle_xyz_int(int n) {\n\treturn ivec3(n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec2 shadeup_up_swizzle_xy_int(int n) {\n\treturn ivec2(n, n);\n}\n\nivec3 shadeup_up_swizzle_xyz_int(int n) {\n\treturn ivec3(n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xyzw_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nstruct ShaderInput {\n  vec3 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec4 clipPosition;\n  vec4 realPosition;\n  vec2 uv;\n  vec2 screen;\n  vec4 color;\n  ivec3 groupId;\n  ivec3 groupSize;\n  ivec3 globalId;\n  ivec3 localId;\n  int instanceIndex;\n  int vertexIndex;\n\n};\nstruct ShaderOutput {\n  vec4 position;\n  vec3 normal;\n  vec3 tangent;\n  vec3 bitangent;\n  vec2 uv;\n  vec4 color;\n\n};\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\nvoid main() {\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\n_i_out.color = vec4(shadeup_up_swizzle_xxxx_int(int(1)));\n\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\n}\n`, software: () => {}}, [[2830,2865,21,38],[2939,2972,38,53],[3048,3082,53,69],[3162,3198,69,87],[3242,3284,87,108],[3289,3331,108,129],[3400,3426,129,140],[3502,3532,140,155],[3609,3644,155,169],[3690,3720,169,186],[3768,3800,186,205],[3879,3910,205,223],[3956,3986,223,240],[4051,4074,240,261],[4123,4144,261,280],[2728,4283,0,284],[4371,4409,306,323],[4444,4477,323,338],[4513,4547,338,354],[4585,4621,354,372],[4655,4681,372,383],[4714,4749,383,397],[4309,4869,284,401],[0,0,503,509],[0,0,510,515],[0,0,503,515],[2234,2240,551,554],[0,0,555,556],[0,0,551,557],[0,0,523,558],[0,0,503,559],[0,0,503,561],[166,199,401,605],[2191,2255,0,605]]);\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/drawIndexed\", \"/_std/common\", \"/_std/mesh\"], function (require, exports, __, std_math_1, std___std_all_1, drawIndexed_1, common_1, mesh_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.main = exports.setModel = exports.setTexture = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    // with a size of 100 units (100.xyz)\n    var cube = (0, std___std_all_1.globalVarInit)(\"_slash_main_dot_ts\", \"cube\", function () { var _a, _b; return mesh_1.mesh.box((_a = (0 | 0), [_a, _a, _a]), (_b = (100 | 0), [_b, _b, _b])); }, function () { return cube; });\n    var tex = (0, std___std_all_1.globalVarInit)(\"_slash_main_dot_ts\", \"tex\", function () { var _a; return (0, common_1.texture2d)((_a = (10 | 0), [_a, _a]), \"auto\", \"float4\"); }, function () { return tex; });\n    tex.draw(__shadeup_make_shader_inst(\"shd_1701801860004512470030001480000000600500422857\", {}, /**@shadeup=shader*/ function (__in, __out) { return __awaiter(void 0, void 0, void 0, function () {\n        var _a;\n        return __generator(this, function (_b) {\n            __out.color = (_a = (1 | 0), [_a, _a, _a, _a]);\n            return [2 /*return*/];\n        });\n    }); }));\n    function setTexture(newTex) {\n        tex = newTex;\n    }\n    exports.setTexture = setTexture;\n    ;\n    function setModel(newModel) {\n        var _a;\n        cube = newModel.parts[(0 | 0)].mesh.scale((_a = (20 | 0), [_a, _a, _a]));\n        tex = newModel.parts[(0 | 0)].material.color;\n    }\n    exports.setModel = setModel;\n    ;\n    function main() {\n        var _this = this;\n        common_1.ui.button(\"Hello, world!\");\n        (0, drawIndexed_1.draw)(cube, __shadeup_make_shader_inst(\"shd_0012035060108500265800533466056020000547600000\", { _ext_uniform_global_env: globalVarGet(\"_slash__std_slash_native_dot_ts\", \"env\") }, /**@shadeup=shader*/ function (__in, __out) { return __awaiter(_this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                __out.position = __.mul(env.camera.getCombinedMatrix(), __.makeVector(common_1.quat.rotate(common_1.quat.fromEulerAngles(__.makeVector((0 | 0), env.time, (0 | 0))), __in.position), (1 | 0)));\n                return [2 /*return*/];\n            });\n        }); }), __shadeup_make_shader_inst(\"shd_000710086052666091061257200756375023002800009\", { _ext_uniform_global_tex: globalVarGet(\"_slash_main_dot_ts\", \"tex\") }, /**@shadeup=shader*/ function (__in, __out) { return __awaiter(_this, void 0, void 0, function () {\n            var normal, lightDir, diffuse;\n            var _a, _b, _c;\n            return __generator(this, function (_d) {\n                normal = (0, std_math_1.normalize)(__in.normal);\n                lightDir = (0, std_math_1.normalize)(__.makeVector((2 | 0), 4.0, 0.5));\n                diffuse = (_a = (0, std_math_1.max)((0, std_math_1.dot)(normal, lightDir), 0.0), _b = tex.sample(__in.uv), [_a * _b[0], _a * _b[1], _a * _b[2], _a * _b[3]]);\n                // Output the color\n                __out.color = __.makeVector((_c = diffuse, [_c[0], _c[1], _c[2]]), (1 | 0));\n                return [2 /*return*/];\n            });\n        }); }));\n    }\n    exports.main = main;\n});\n\n})(define);\n\n});"
  },
  {
    "path": "cli/test/vite-project/src/main.shadeup",
    "content": "// Create a cube at the origin (0.xyz)\n// with a size of 100 units (100.xyz)\nlet cube = mesh::box(0.xyz, 100.xyz);\nlet tex = texture2d<float4>(10.xy);\n\ntex.draw(shader {\n\tout.color = 1.xxxx;\n});\n\npub fn setTexture(newTex: texture2d<float4>) {\n\ttex = newTex;\n}\npub fn setModel(newModel: Model) {\n\tcube = newModel.parts[0].mesh.scale(20.xxx);\n\t\n\ttex = newModel.parts[0].material.color;\n}\n\nfn main() {\n\tui::button(\"Hello, world!\");\n\n\tdraw(\n\t\tcube,\n\t\tshader {\n\t\t\tout.position =\n\t\t\t\tenv.camera.getCombinedMatrix()\n\t\t\t\t*\n\t\t\t\t(quat::rotate(quat::fromEulerAngles((0, env.time, 0)), in.position), 1);\n\t\t},\n\t\tshader {\n\t\t\t// Calculate the normal of the surface\n\t\t\tlet normal = normalize(in.normal);\n\n\t\t\t// Calculate the direction of the light\n\t\t\tlet lightDir = normalize((2, 4.0, 0.5));\n\n\t\t\t// Calculate the diffuse lighting\n\t\t\tlet diffuse = max(dot(normal, lightDir), 0.0) * tex.sample(in.uv);\n\n\t\t\t// Output the color\n\t\t\tout.color = (diffuse.xyz, 1);\n\t\t}\n\t);\n}\n"
  },
  {
    "path": "cli/test/vite-project/src/style.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\n#app {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.vanilla:hover {\n  filter: drop-shadow(0 0 2em #3178c6aa);\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "cli/test/vite-project/src/vite-env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "cli/test/vite-project/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"useDefineForClassFields\": true,\n    \"module\": \"ESNext\",\n    \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"],\n    \"skipLibCheck\": true,\n\n    /* Bundler mode */\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n\n    /* Linting */\n    \"strict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"noFallthroughCasesInSwitch\": true\n  },\n  \"include\": [\"src\"]\n}\n"
  },
  {
    "path": "cli/vite/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?"
  },
  {
    "path": "cli/vite/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite App</title>\n  </head>\n  <body>\n    <div id=\"app\">\n      <div class=\"ui-container\">\n        <canvas id=\"canvas\" style=\"width: 100%; height: 100%\"></canvas>\n      </div>\n    </div>\n    <script type=\"module\" src=\"/main.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "cli/vite/main.js",
    "content": "import \"./style.css\";\nimport { makeShadeupInstance } from \"./runner\";\n\nconst canvas = document.querySelector(\"#canvas\");\n(async () => {\n  let engine = await makeShadeupInstance(canvas, {\n    ui: true,\n  });\n})();\n\nfunction sizeCanvas() {\n  canvas.width = window.innerWidth * devicePixelRatio;\n  canvas.height = window.innerHeight * devicePixelRatio;\n}\n\nsizeCanvas();\n\nwindow.addEventListener(\"resize\", sizeCanvas);\n"
  },
  {
    "path": "cli/vite/package.json",
    "content": "{\n  \"name\": \"vite-project\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"^5.1.0\"\n  },\n  \"dependencies\": {\n    \"shadeup\": \"^1.3.6\"\n  }\n}\n"
  },
  {
    "path": "cli/vite/runner.d.ts",
    "content": "import * as __ from \"shadeup/math\";\n\ndeclare namespace ShadeupFiles {\n  declare namespace sand {\n    export declare function pcg_hash(input: __.uint): __.uint;\n    export declare function main(): void;\n  }\n  declare namespace camera {\n    declare class CustomCamera2d {\n        constructor(data: {\n            position?: __.float2;\n            zoom?: __.float;\n        });\n        screenToCamera(screen: __.float2): __.float2;\n        cameraToScreen(camera: __.float2): __.float2;\n        transform(position: __.float2): __.float2;\n        zoomBy(zoom: __.float, center: __.float2): void;\n        position: __.float2;\n        zoom: __.float;\n        clone(): CustomCamera2d;\n    }\n    export declare function getCamera2d(): CustomCamera2d;\n    export {};\n  }\n}\n\nexport declare function makeShadeupInstance(\n  canvas: HTMLCanvasElement,\n  options?: {\n    preferredAdapter?: \"webgl\" | \"webgpu\";\n    limits?: GPUSupportedLimits;\n    ui?: boolean;\n  }\n): Promise<{\n  /**\n   * Set to false to pause\n   */\n  playing: boolean;\n\n  canvas: HTMLCanvasElement;\n\n  adapter: any;\n  hooks: {\n    beforeFrame?: () => void;\n    afterFrame?: () => void;\n    reset?: () => void;\n  }[];\n  start: () => void;\n\n  env: {\n    camera: {\n      position: __.float3;\n      rotation: __.float4;\n      width: __.float;\n      height: __.float;\n      fov: __.float;\n      near: __.float;\n      far: __.float;\n    };\n    camera2d: {\n      position: __.float2;\n      zoom: __.float;\n    };\n    deltaTime: __.float;\n    frame: __.int;\n    keyboard: any;\n    mouse: any;\n    screenSize: __.float2;\n    time: __.float;\n  };\n\n  /**\n   * Used to pass values into the shadeup env (accessed as env.input(\"name\") inside)\n   */\n  inputValues: Map<string, any>;\n\n  enableUI: () => Promise<void>;\n\n  loadTextureFromImageLike: (\n\t\timg: HTMLImageElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas | HTMLVideoElement\n\t) => Promise<__.texture2d<__.float4>>;\n\tloadTexture2dFromURL: (url: string) => Promise<__.texture2d<__.float4>>;\n\tloadModelFromURL: (urlGltf: string) => Promise<__.texture2d<__.float4>>;\n\n  files: typeof ShadeupFiles;\n}>;\n"
  },
  {
    "path": "cli/vite/runner.js",
    "content": "export const makeShadeupInstance = async (canvas) => {\n  return {\n    enableUI: async () => {},\n  };\n};\n"
  },
  {
    "path": "cli/vite/style.css",
    "content": "html,\nbody {\n  margin: 0;\n  padding: 0;\n  font-family: \"Roboto\", sans-serif;\n  background-color: black;\n  overflow: hidden;\n}\n.puck {\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  /* transform: translate(-50%, -50%); */\n  background-color: #3a3a3a;\n  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);\n  cursor: grab;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  color: rgb(80, 80, 80);\n  user-select: none;\n  font-family: monospace;\n  line-height: 12px;\n  font-size: 12px;\n}\n\n.puck[data-down=\"true\"] {\n  cursor: grabbing;\n}\n\n.puck span {\n  height: 14px;\n}\n"
  },
  {
    "path": "cli/vite/vite.config.js",
    "content": "/** @type {import('vite').UserConfig} */\nexport default {\n  // ...\n};\n"
  },
  {
    "path": "extension/vscode/shadeup/.vscodeignore",
    "content": ".vscode/**\n.vscode-test/**\n.gitignore"
  },
  {
    "path": "extension/vscode/shadeup/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to the \"shadeup\" extension will be documented in this file.\n\nCheck [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.\n\n## [Unreleased]\n\n- Initial release"
  },
  {
    "path": "extension/vscode/shadeup/README.md",
    "content": "![logo](https://raw.githubusercontent.com/AskingQuestions/Shadeup/main/unreal-engine/resources/img/logo.png)\n\n# Shadeup Language Support [BETA]\n\n### [shadeup.dev](https://shadeup.dev)\n\nThis extension provides language support for the Shadeup language.\n\n## Features\n\n- Syntax highlighting for Shadeup files\n- Shadeup language server\n  - Intellisense\n  - Diagnostics\n  - Hover\n- File icon for Shadeup files\n\n## Release Notes\n\n### 1.0.0\n\nInitial release\n"
  },
  {
    "path": "extension/vscode/shadeup/Shadeup-tmLanguage.json",
    "content": "{\n  \"information_for_contributors\": [\n    \"This file has been converted from https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScript.tmLanguage\",\n    \"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n    \"Once accepted there, we are happy to receive an update request.\"\n  ],\n  \"version\": \"https://github.com/microsoft/TypeScript-TmLanguage/commit/b80b7509a78e642f789c567e144ed951ab98b4e3\",\n  \"name\": \"Shadeup\",\n  \"scopeName\": \"source.shadeup\",\n  \"patterns\": [\n    {\n      \"include\": \"#directives\"\n    },\n    {\n      \"include\": \"#statements\"\n    },\n    {\n      \"include\": \"#shebang\"\n    }\n  ],\n  \"repository\": {\n    \"shebang\": {\n      \"name\": \"comment.line.shebang.shadeup\",\n      \"match\": \"\\\\A(#!).*(?=$)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.comment.shadeup\"\n        }\n      }\n    },\n    \"statements\": {\n      \"patterns\": [\n        {\n          \"include\": \"#declaration\"\n        },\n        {\n          \"include\": \"#control-statement\"\n        },\n        {\n          \"include\": \"#after-operator-block-as-object-literal\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        },\n        {\n          \"include\": \"#label\"\n        },\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#comment\"\n        }\n      ]\n    },\n    \"declaration\": {\n      \"patterns\": [\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#var-expr\"\n        },\n        {\n          \"include\": \"#function-declaration\"\n        },\n        {\n          \"include\": \"#class-declaration\"\n        },\n        {\n          \"include\": \"#interface-declaration\"\n        },\n        {\n          \"include\": \"#enum-declaration\"\n        },\n        {\n          \"include\": \"#namespace-declaration\"\n        },\n        {\n          \"include\": \"#type-alias-declaration\"\n        },\n        {\n          \"include\": \"#import-equals-declaration\"\n        },\n        {\n          \"include\": \"#import-declaration\"\n        },\n        {\n          \"include\": \"#export-declaration\"\n        },\n        {\n          \"name\": \"storage.modifier.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"control-statement\": {\n      \"patterns\": [\n        {\n          \"include\": \"#switch-statement\"\n        },\n        {\n          \"include\": \"#for-loop\"\n        },\n        {\n          \"name\": \"keyword.control.trycatch.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|goto)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.loop.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.label.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.control.loop.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(return)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.control.flow.shadeup\"\n            }\n          },\n          \"end\": \"(?=[;}]|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"keyword.control.switch.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#if-statement\"\n        },\n        {\n          \"name\": \"keyword.control.conditional.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.control.with.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(with)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.control.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(package)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.other.debugger.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"label\": {\n      \"patterns\": [\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.label.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.separator.label.shadeup\"\n            }\n          },\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#decl-block\"\n            }\n          ]\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.label.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.separator.label.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"expression\": {\n      \"patterns\": [\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"include\": \"#identifiers\"\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"expressionWithoutIdentifiers\": {\n      \"patterns\": [\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#function-expression\"\n        },\n        {\n          \"include\": \"#class-expression\"\n        },\n        {\n          \"include\": \"#arrow-function\"\n        },\n        {\n          \"include\": \"#paren-expression-possibly-arrow\"\n        },\n        {\n          \"include\": \"#cast\"\n        },\n        {\n          \"include\": \"#ternary-expression\"\n        },\n        {\n          \"include\": \"#new-expr\"\n        },\n        {\n          \"include\": \"#instanceof-expr\"\n        },\n        {\n          \"include\": \"#object-literal\"\n        },\n        {\n          \"include\": \"#expression-operators\"\n        },\n        {\n          \"include\": \"#function-call\"\n        },\n        {\n          \"include\": \"#literal\"\n        },\n        {\n          \"include\": \"#support-objects\"\n        },\n        {\n          \"include\": \"#paren-expression\"\n        }\n      ]\n    },\n    \"expressionPunctuations\": {\n      \"patterns\": [\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#punctuation-accessor\"\n        }\n      ]\n    },\n    \"decorator\": {\n      \"name\": \"meta.decorator.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))\\\\@\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.decorator.shadeup\"\n        }\n      },\n      \"end\": \"(?=\\\\s)\",\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"var-expr\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.var.expr.shadeup\",\n          \"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n          \"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^let|[^\\\\._$[:alnum:]]let|^var|[^\\\\._$[:alnum:]]var)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.export.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"storage.modifier.shadeup\"\n                },\n                \"3\": {\n                  \"name\": \"storage.type.shadeup\"\n                }\n              },\n              \"end\": \"(?=\\\\S)\"\n            },\n            {\n              \"include\": \"#destructuring-variable\"\n            },\n            {\n              \"include\": \"#var-single-variable\"\n            },\n            {\n              \"include\": \"#variable-initializer\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.separator.comma.shadeup\"\n                }\n              },\n              \"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#single-line-comment-consuming-line-ending\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#destructuring-variable\"\n                },\n                {\n                  \"include\": \"#var-single-variable\"\n                },\n                {\n                  \"include\": \"#punctuation-comma\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var.expr.shadeup\",\n          \"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"storage.type.shadeup\"\n            }\n          },\n          \"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^const|[^\\\\._$[:alnum:]]const)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.export.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"storage.modifier.shadeup\"\n                },\n                \"3\": {\n                  \"name\": \"storage.type.shadeup\"\n                }\n              },\n              \"end\": \"(?=\\\\S)\"\n            },\n            {\n              \"include\": \"#destructuring-const\"\n            },\n            {\n              \"include\": \"#var-single-const\"\n            },\n            {\n              \"include\": \"#variable-initializer\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.separator.comma.shadeup\"\n                }\n              },\n              \"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#single-line-comment-consuming-line-ending\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#destructuring-const\"\n                },\n                {\n                  \"include\": \"#var-single-const\"\n                },\n                {\n                  \"include\": \"#punctuation-comma\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var.expr.shadeup\",\n          \"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"storage.type.shadeup\"\n            }\n          },\n          \"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|((?<!^using|[^\\\\._$[:alnum:]]using|^await\\\\s+using|[^\\\\._$[:alnum:]]await\\\\s+using)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.export.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"storage.modifier.shadeup\"\n                },\n                \"3\": {\n                  \"name\": \"storage.type.shadeup\"\n                }\n              },\n              \"end\": \"(?=\\\\S)\"\n            },\n            {\n              \"include\": \"#var-single-const\"\n            },\n            {\n              \"include\": \"#variable-initializer\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(,)\\\\s*((?!\\\\S)|(?=\\\\/\\\\/))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.separator.comma.shadeup\"\n                }\n              },\n              \"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#single-line-comment-consuming-line-ending\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#var-single-const\"\n                },\n                {\n                  \"include\": \"#punctuation-comma\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-single-variable\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.var-single-variable.expr.shadeup\",\n          \"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.shadeup entity.name.function.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.definiteassignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var-single-variable.expr.shadeup\",\n          \"begin\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\\\!)?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.shadeup variable.other.constant.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.definiteassignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var-single-variable.expr.shadeup\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.shadeup variable.other.readwrite.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.definiteassignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-single-const\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.var-single-variable.expr.shadeup\",\n          \"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.shadeup variable.other.constant.shadeup entity.name.function.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var-single-variable.expr.shadeup\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.shadeup variable.other.constant.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-single-variable-type-annotation\": {\n      \"patterns\": [\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#comment\"\n        }\n      ]\n    },\n    \"destructuring-variable\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.object-binding-pattern-variable.shadeup\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-pattern\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.array-binding-pattern-variable.shadeup\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#array-binding-pattern\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        }\n      ]\n    },\n    \"destructuring-const\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.object-binding-pattern-variable.shadeup\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-pattern-const\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.array-binding-pattern-variable.shadeup\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#array-binding-pattern-const\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object-binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-element-propertyName\"\n            },\n            {\n              \"include\": \"#binding-element\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#object-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"object-binding-element-const\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-element-propertyName\"\n            },\n            {\n              \"include\": \"#binding-element-const\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#object-binding-pattern-const\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest-const\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"object-binding-element-propertyName\": {\n      \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n      \"end\": \"(:)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.destructuring.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"name\": \"variable.object.property.shadeup\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n        }\n      ]\n    },\n    \"binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#object-binding-pattern\"\n        },\n        {\n          \"include\": \"#array-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        }\n      ]\n    },\n    \"binding-element-const\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#object-binding-pattern-const\"\n        },\n        {\n          \"include\": \"#array-binding-pattern-const\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest-const\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        }\n      ]\n    },\n    \"destructuring-variable-rest\": {\n      \"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"meta.definition.variable.shadeup variable.other.readwrite.shadeup\"\n        }\n      }\n    },\n    \"destructuring-variable-rest-const\": {\n      \"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"meta.definition.variable.shadeup variable.other.constant.shadeup\"\n        }\n      }\n    },\n    \"object-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-binding-element\"\n        }\n      ]\n    },\n    \"object-binding-pattern-const\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-binding-element-const\"\n        }\n      ]\n    },\n    \"array-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#binding-element\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"array-binding-pattern-const\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#binding-element-const\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"parameter-name\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.shadeup variable.language.this.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.function.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.shadeup variable.language.this.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"variable.parameter.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"destructuring-parameter\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.parameter.object-binding-pattern.shadeup\",\n          \"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n            }\n          },\n          \"end\": \"\\\\}\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#parameter-object-binding-element\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.paramter.array-binding-pattern.shadeup\",\n          \"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n            }\n          },\n          \"end\": \"\\\\]\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#parameter-binding-element\"\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        }\n      ]\n    },\n    \"parameter-object-binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-element-propertyName\"\n            },\n            {\n              \"include\": \"#parameter-binding-element\"\n            },\n            {\n              \"include\": \"#paren-expression\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#parameter-object-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-parameter-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"parameter-binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#parameter-object-binding-pattern\"\n        },\n        {\n          \"include\": \"#parameter-array-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-parameter-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        }\n      ]\n    },\n    \"destructuring-parameter-rest\": {\n      \"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"variable.parameter.shadeup\"\n        }\n      }\n    },\n    \"parameter-object-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#parameter-object-binding-element\"\n        }\n      ]\n    },\n    \"parameter-array-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#parameter-binding-element\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"field-declaration\": {\n      \"name\": \"meta.field.declaration.shadeup\",\n      \"begin\": \"(?x)(?<!\\\\()(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s+)?(?=\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|\\\\}|$))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.shadeup\"\n        }\n      },\n      \"end\": \"(?x)(?=\\\\}|;|,|$|(^(?!\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|$))))|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"match\": \"(?x)(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\\\?)|(\\\\!))?(?=\\\\s*\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"meta.definition.property.shadeup entity.name.function.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.definiteassignment.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.definition.property.shadeup variable.object.property.shadeup\",\n          \"match\": \"\\\\#?[_$[:alpha:]][_$[:alnum:]]*\"\n        },\n        {\n          \"name\": \"keyword.operator.optional.shadeup\",\n          \"match\": \"\\\\?\"\n        },\n        {\n          \"name\": \"keyword.operator.definiteassignment.shadeup\",\n          \"match\": \"\\\\!\"\n        }\n      ]\n    },\n    \"variable-initializer\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<!=|!)(=)(?!=)(?=\\\\s*\\\\S)(?!\\\\s*.*=>\\\\s*$)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|^|[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?<!=|!)(=)(?!=)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))|(?=^\\\\s*$)|(?<![\\\\|\\\\&\\\\+\\\\-\\\\*\\\\/])(?<=\\\\S)(?<!=)(?=\\\\s*$)\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        }\n      ]\n    },\n    \"function-declaration\": {\n      \"name\": \"meta.function.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.async.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.function.shadeup\"\n        },\n        \"5\": {\n          \"name\": \"keyword.generator.asterisk.shadeup\"\n        },\n        \"6\": {\n          \"name\": \"meta.definition.function.shadeup entity.name.function.shadeup\"\n        }\n      },\n      \"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#function-name\"\n        },\n        {\n          \"include\": \"#function-body\"\n        }\n      ]\n    },\n    \"function-expression\": {\n      \"name\": \"meta.function.expression.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.async.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.type.function.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"keyword.generator.asterisk.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"meta.definition.function.shadeup entity.name.function.shadeup\"\n        }\n      },\n      \"end\": \"(?=;)|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#function-name\"\n        },\n        {\n          \"include\": \"#single-line-comment-consuming-line-ending\"\n        },\n        {\n          \"include\": \"#function-body\"\n        }\n      ]\n    },\n    \"function-name\": {\n      \"name\": \"meta.definition.function.shadeup entity.name.function.shadeup\",\n      \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n    },\n    \"function-body\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#function-parameters\"\n        },\n        {\n          \"include\": \"#return-type\"\n        },\n        {\n          \"include\": \"#type-function-return-type\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        },\n        {\n          \"name\": \"keyword.generator.asterisk.shadeup\",\n          \"match\": \"\\\\*\"\n        }\n      ]\n    },\n    \"method-declaration\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.method.declaration.shadeup\",\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?\\\\s*\\\\b(constructor)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"storage.type.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            },\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.method.declaration.shadeup\",\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:(?:\\\\s*\\\\b(new)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|(?:(\\\\*)\\\\s*)?)(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.new.shadeup\"\n            },\n            \"6\": {\n              \"name\": \"keyword.generator.asterisk.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            },\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.method.declaration.shadeup\",\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"storage.type.property.shadeup\"\n            },\n            \"6\": {\n              \"name\": \"keyword.generator.asterisk.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            },\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object-literal-method-declaration\": {\n      \"name\": \"meta.method.declaration.shadeup\",\n      \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.async.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.type.property.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"keyword.generator.asterisk.shadeup\"\n        }\n      },\n      \"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#method-declaration-name\"\n        },\n        {\n          \"include\": \"#function-body\"\n        },\n        {\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.property.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.generator.asterisk.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\(|\\\\<)\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            }\n          ]\n        }\n      ]\n    },\n    \"method-declaration-name\": {\n      \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??)\\\\s*[\\\\(\\\\<])\",\n      \"end\": \"(?=\\\\(|\\\\<)\",\n      \"patterns\": [\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"name\": \"meta.definition.method.shadeup entity.name.function.shadeup\",\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n        },\n        {\n          \"name\": \"keyword.operator.optional.shadeup\",\n          \"match\": \"\\\\?\"\n        }\n      ]\n    },\n    \"arrow-function\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.arrow.shadeup\",\n          \"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?==>)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"variable.parameter.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.arrow.shadeup\",\n          \"begin\": \"(?x) (?:\\n  (?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\n)? ((?<![})!\\\\]])\\\\s*\\n  (?=\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  )\\n)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            }\n          },\n          \"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#type-parameters\"\n            },\n            {\n              \"include\": \"#function-parameters\"\n            },\n            {\n              \"include\": \"#arrow-return-type\"\n            },\n            {\n              \"include\": \"#possibly-arrow-return-type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.arrow.shadeup\",\n          \"begin\": \"=>\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"storage.type.function.arrow.shadeup\"\n            }\n          },\n          \"end\": \"((?<=\\\\}|\\\\S)(?<!=>)|((?!\\\\{)(?=\\\\S)))(?!\\\\/[\\\\/\\\\*])\",\n          \"patterns\": [\n            {\n              \"include\": \"#single-line-comment-consuming-line-ending\"\n            },\n            {\n              \"include\": \"#decl-block\"\n            },\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        }\n      ]\n    },\n    \"indexer-declaration\": {\n      \"name\": \"meta.indexer.declaration.shadeup\",\n      \"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=:)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"variable.parameter.shadeup\"\n        }\n      },\n      \"end\": \"(\\\\])\\\\s*(\\\\?\\\\s*)?|$\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"keyword.operator.optional.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#type-annotation\"\n        }\n      ]\n    },\n    \"indexer-mapped-type-declaration\": {\n      \"name\": \"meta.indexer.mappedtype.declaration.shadeup\",\n      \"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([+-])?(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s+(in)\\\\s+\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.type.modifier.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.type.shadeup\"\n        },\n        \"5\": {\n          \"name\": \"keyword.operator.expression.in.shadeup\"\n        }\n      },\n      \"end\": \"(\\\\])([+-])?\\\\s*(\\\\?\\\\s*)?|$\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"keyword.operator.type.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"keyword.operator.optional.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"function-parameters\": {\n      \"name\": \"meta.parameters.shadeup\",\n      \"begin\": \"\\\\(\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.parameters.begin.shadeup\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.parameters.end.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#function-parameters-body\"\n        }\n      ]\n    },\n    \"function-parameters-body\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#destructuring-parameter\"\n        },\n        {\n          \"include\": \"#parameter-name\"\n        },\n        {\n          \"include\": \"#parameter-type-annotation\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"name\": \"punctuation.separator.parameter.shadeup\",\n          \"match\": \",\"\n        }\n      ]\n    },\n    \"class-declaration\": {\n      \"name\": \"meta.class.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(class)\\\\b(?=\\\\s+|/[/*])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.class.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#class-declaration-or-expression-patterns\"\n        }\n      ]\n    },\n    \"class-expression\": {\n      \"name\": \"meta.class.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(class)\\\\b(?=\\\\s+|[<{]|\\\\/[\\\\/*])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.type.class.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#class-declaration-or-expression-patterns\"\n        }\n      ]\n    },\n    \"class-declaration-or-expression-patterns\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#class-or-interface-heritage\"\n        },\n        {\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"entity.name.type.class.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#class-or-interface-body\"\n        }\n      ]\n    },\n    \"interface-declaration\": {\n      \"name\": \"meta.interface.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(interface)\\\\b(?=\\\\s+|/[/*])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.interface.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#class-or-interface-heritage\"\n        },\n        {\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"entity.name.type.interface.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#class-or-interface-body\"\n        }\n      ]\n    },\n    \"class-or-interface-heritage\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(extends|implements)\\\\b)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.shadeup\"\n        }\n      },\n      \"end\": \"(?=\\\\{)\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#class-or-interface-heritage\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s*\\\\??\\\\.\\\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\\\s*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.module.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.other.inherited-class.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"class-or-interface-body\": {\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"begin\": \"(?<=:)\\\\s*\",\n          \"end\": \"(?=\\\\s|[;),}\\\\]:\\\\-\\\\+]|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#method-declaration\"\n        },\n        {\n          \"include\": \"#indexer-declaration\"\n        },\n        {\n          \"include\": \"#field-declaration\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#access-modifier\"\n        },\n        {\n          \"include\": \"#property-accessor\"\n        },\n        {\n          \"include\": \"#async-modifier\"\n        },\n        {\n          \"include\": \"#after-operator-block-as-object-literal\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        },\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        }\n      ]\n    },\n    \"access-modifier\": {\n      \"name\": \"storage.modifier.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"property-accessor\": {\n      \"name\": \"storage.type.property.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"async-modifier\": {\n      \"name\": \"storage.modifier.async.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(async)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"enum-declaration\": {\n      \"name\": \"meta.enum.declaration.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:\\\\b(const)\\\\s+)?\\\\b(enum)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.enum.shadeup\"\n        },\n        \"5\": {\n          \"name\": \"entity.name.type.enum.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"\\\\{\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.shadeup\"\n            }\n          },\n          \"end\": \"\\\\}\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"variable.other.enummember.shadeup\"\n                }\n              },\n              \"end\": \"(?=,|\\\\}|$)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#variable-initializer\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?=((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\])))\",\n              \"end\": \"(?=,|\\\\}|$)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#string\"\n                },\n                {\n                  \"include\": \"#array-literal\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#variable-initializer\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        }\n      ]\n    },\n    \"namespace-declaration\": {\n      \"name\": \"meta.namespace.declaration.shadeup\",\n      \"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(namespace|module)\\\\s+(?=[_$[:alpha:]\\\"'`]))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"storage.type.namespace.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\})|(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"name\": \"entity.name.type.module.shadeup\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n        },\n        {\n          \"include\": \"#punctuation-accessor\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        }\n      ]\n    },\n    \"type-alias-declaration\": {\n      \"name\": \"meta.type.declaration.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(type)\\\\b\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"storage.type.type.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.type.alias.shadeup\"\n        }\n      },\n      \"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"begin\": \"(=)\\\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.intrinsic.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(=)\\\\s*\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import-equals-declaration\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.import-equals.external.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(require)\\\\s*(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.control.import.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"keyword.control.type.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"variable.other.readwrite.alias.shadeup\"\n            },\n            \"6\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            },\n            \"7\": {\n              \"name\": \"keyword.control.require.shadeup\"\n            },\n            \"8\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.import-equals.internal.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(?!require\\\\b)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.control.import.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"keyword.control.type.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"variable.other.readwrite.alias.shadeup\"\n            },\n            \"6\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            }\n          },\n          \"end\": \"(?=;|$|^)\",\n          \"patterns\": [\n            {\n              \"include\": \"#single-line-comment-consuming-line-ending\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"entity.name.type.module.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.accessor.shadeup\"\n                },\n                \"3\": {\n                  \"name\": \"punctuation.accessor.optional.shadeup\"\n                }\n              }\n            },\n            {\n              \"name\": \"variable.other.readwrite.shadeup\",\n              \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import-declaration\": {\n      \"name\": \"meta.import.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type)(?!\\\\s+from))?(?!\\\\s*[:\\\\(])(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"keyword.control.import.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"keyword.control.type.shadeup\"\n        }\n      },\n      \"end\": \"(?<!^import|[^\\\\._$[:alnum:]]import)(?=;|$|^)\",\n      \"patterns\": [\n        {\n          \"include\": \"#single-line-comment-consuming-line-ending\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"begin\": \"(?<=^import|[^\\\\._$[:alnum:]]import)(?!\\\\s*[\\\"'])\",\n          \"end\": \"\\\\bfrom\\\\b\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.control.from.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#import-export-declaration\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#import-export-declaration\"\n        }\n      ]\n    },\n    \"export-declaration\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)\\\\s+(as)\\\\s+(namespace)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"storage.type.namespace.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.type.module.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.export.default.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?(?:(?:\\\\s*(=))|(?:\\\\s+(default)(?=\\\\s+)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.type.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.assignment.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"keyword.control.default.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#interface-declaration\"\n            },\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.export.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?\\\\b(?!(\\\\$)|(\\\\s*:))((?=\\\\s*[\\\\{*])|((?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s|,))(?!\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.type.shadeup\"\n            }\n          },\n          \"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#import-export-declaration\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import-export-declaration\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#import-export-block\"\n        },\n        {\n          \"name\": \"keyword.control.from.shadeup\",\n          \"match\": \"\\\\bfrom\\\\b\"\n        },\n        {\n          \"include\": \"#import-export-assert-clause\"\n        },\n        {\n          \"include\": \"#import-export-clause\"\n        }\n      ]\n    },\n    \"import-export-assert-clause\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(with)|(assert))\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.with.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"keyword.control.assert.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"name\": \"meta.object-literal.key.shadeup\",\n          \"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\"\n        },\n        {\n          \"name\": \"punctuation.separator.key-value.shadeup\",\n          \"match\": \":\"\n        }\n      ]\n    },\n    \"import-export-block\": {\n      \"name\": \"meta.block.shadeup\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#import-export-clause\"\n        }\n      ]\n    },\n    \"import-export-clause\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(?:(\\\\btype)\\\\s+)?(?:(\\\\bdefault)|(\\\\*)|(\\\\b[_$[:alpha:]][_$[:alnum:]]*)))\\\\s+(as)\\\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|([_$[:alpha:]][_$[:alnum:]]*))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.type.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.default.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"constant.language.import-export-all.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"variable.other.readwrite.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            },\n            \"6\": {\n              \"name\": \"keyword.control.default.shadeup\"\n            },\n            \"7\": {\n              \"name\": \"variable.other.readwrite.alias.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"name\": \"constant.language.import-export-all.shadeup\",\n          \"match\": \"\\\\*\"\n        },\n        {\n          \"name\": \"keyword.control.default.shadeup\",\n          \"match\": \"\\\\b(default)\\\\b\"\n        },\n        {\n          \"match\": \"(?:(\\\\btype)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.type.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.readwrite.alias.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"switch-statement\": {\n      \"name\": \"switch-statement.expr.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bswitch\\\\s*\\\\()\",\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"switch-expression.expr.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(switch)\\\\s*(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.switch.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"switch-block.expr.shadeup\",\n          \"begin\": \"\\\\{\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\})\",\n          \"patterns\": [\n            {\n              \"name\": \"case-clause.expr.shadeup\",\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.switch.shadeup\"\n                }\n              },\n              \"end\": \"(?=:)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#expression\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(:)\\\\s*(\\\\{)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"case-clause.expr.shadeup punctuation.definition.section.case-statement.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"meta.block.shadeup punctuation.definition.block.shadeup\"\n                }\n              },\n              \"end\": \"\\\\}\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.block.shadeup punctuation.definition.block.shadeup\"\n                }\n              },\n              \"contentName\": \"meta.block.shadeup\",\n              \"patterns\": [\n                {\n                  \"include\": \"#statements\"\n                }\n              ]\n            },\n            {\n              \"match\": \"(:)\",\n              \"captures\": {\n                \"0\": {\n                  \"name\": \"case-clause.expr.shadeup punctuation.definition.section.case-statement.shadeup\"\n                }\n              }\n            },\n            {\n              \"include\": \"#statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"for-loop\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))for(?=((\\\\s+|(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*))await)?\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)?(\\\\())\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"keyword.control.loop.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\))\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"keyword.control.loop.shadeup\",\n          \"match\": \"await\"\n        },\n        {\n          \"begin\": \"\\\\(\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#var-expr\"\n            },\n            {\n              \"include\": \"#expression\"\n            },\n            {\n              \"include\": \"#punctuation-semicolon\"\n            }\n          ]\n        }\n      ]\n    },\n    \"if-statement\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bif\\\\s*(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))\\\\s*(?!\\\\{))\",\n          \"end\": \"(?=;|$|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(if)\\\\s*(\\\\()\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.conditional.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"meta.brace.round.shadeup\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.shadeup\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression\"\n                }\n              ]\n            },\n            {\n              \"name\": \"string.regexp.shadeup\",\n              \"begin\": \"(?<=\\\\))\\\\s*\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"punctuation.definition.string.begin.shadeup\"\n                }\n              },\n              \"end\": \"(/)([dgimsuy]*)\",\n              \"endCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.definition.string.end.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"keyword.other.shadeup\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#regexp\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"decl-block\": {\n      \"name\": \"meta.block.shadeup\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#statements\"\n        }\n      ]\n    },\n    \"after-operator-block-as-object-literal\": {\n      \"name\": \"meta.objectliteral.shadeup\",\n      \"begin\": \"(?<!\\\\+\\\\+|--)(?<=[:=(,\\\\[?+!>]|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^yield|[^\\\\._$[:alnum:]]yield|^throw|[^\\\\._$[:alnum:]]throw|^in|[^\\\\._$[:alnum:]]in|^of|[^\\\\._$[:alnum:]]of|^typeof|[^\\\\._$[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-member\"\n        }\n      ]\n    },\n    \"object-literal\": {\n      \"name\": \"meta.objectliteral.shadeup\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-member\"\n        }\n      ]\n    },\n    \"object-member\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#object-literal-method-declaration\"\n        },\n        {\n          \"name\": \"meta.object.member.shadeup meta.object-literal.key.shadeup\",\n          \"begin\": \"(?=\\\\[)\",\n          \"end\": \"(?=:)|((?<=[\\\\]])(?=\\\\s*[\\\\(\\\\<]))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#array-literal\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.shadeup meta.object-literal.key.shadeup\",\n          \"begin\": \"(?=[\\\\'\\\\\\\"\\\\`])\",\n          \"end\": \"(?=:)|((?<=[\\\\'\\\\\\\"\\\\`])(?=((\\\\s*[\\\\(\\\\<,}])|(\\\\s+(as|satisifies)\\\\s+))))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.shadeup meta.object-literal.key.shadeup\",\n          \"begin\": \"(?x)(?=(\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)))\",\n          \"end\": \"(?=:)|(?=\\\\s*([\\\\(\\\\<,}])|(\\\\s+as|satisifies\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#numeric-literal\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.method.declaration.shadeup\",\n          \"begin\": \"(?<=[\\\\]\\\\'\\\\\\\"\\\\`])(?=\\\\s*[\\\\(\\\\<])\",\n          \"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"match\": \"(?![_$[:alpha:]])([[:digit:]]+)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.shadeup\"\n            },\n            \"1\": {\n              \"name\": \"constant.numeric.decimal.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"match\": \"(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)*\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.shadeup\"\n            },\n            \"1\": {\n              \"name\": \"entity.name.function.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"begin\": \"\\\\.\\\\.\\\\.\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.spread.shadeup\"\n            }\n          },\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"variable.other.readwrite.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*([,}]|$))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.satisfies.shadeup\"\n            }\n          },\n          \"end\": \"(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisifies)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"begin\": \"(?=[_$[:alpha:]][_$[:alnum:]]*\\\\s*=)\",\n          \"end\": \"(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.shadeup\",\n          \"begin\": \":\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.shadeup punctuation.separator.key-value.shadeup\"\n            }\n          },\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<=:)\\\\s*(async)?(?=\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"storage.modifier.async.shadeup\"\n                }\n              },\n              \"end\": \"(?<=\\\\))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#type-parameters\"\n                },\n                {\n                  \"begin\": \"\\\\(\",\n                  \"beginCaptures\": {\n                    \"0\": {\n                      \"name\": \"meta.brace.round.shadeup\"\n                    }\n                  },\n                  \"end\": \"\\\\)\",\n                  \"endCaptures\": {\n                    \"0\": {\n                      \"name\": \"meta.brace.round.shadeup\"\n                    }\n                  },\n                  \"patterns\": [\n                    {\n                      \"include\": \"#expression-inside-possibly-arrow-parens\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"storage.modifier.async.shadeup\"\n                },\n                \"2\": {\n                  \"name\": \"meta.brace.round.shadeup\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.shadeup\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression-inside-possibly-arrow-parens\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(?=\\\\<\\\\s*$)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"storage.modifier.async.shadeup\"\n                }\n              },\n              \"end\": \"(?<=\\\\>)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#type-parameters\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?<=\\\\>)\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"meta.brace.round.shadeup\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.shadeup\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression-inside-possibly-arrow-parens\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#possibly-arrow-return-type\"\n            },\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        }\n      ]\n    },\n    \"ternary-expression\": {\n      \"begin\": \"(?!\\\\?\\\\.\\\\s*[^[:digit:]])(\\\\?)(?!\\\\?)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.ternary.shadeup\"\n        }\n      },\n      \"end\": \"\\\\s*(:)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.ternary.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"function-call\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n          \"end\": \"(?<=\\\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n          \"patterns\": [\n            {\n              \"name\": \"meta.function-call.shadeup\",\n              \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n              \"end\": \"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n              \"patterns\": [\n                {\n                  \"include\": \"#function-call-target\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#function-call-optionals\"\n            },\n            {\n              \"include\": \"#type-arguments\"\n            },\n            {\n              \"include\": \"#paren-expression\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n          \"end\": \"(?<=\\\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n          \"patterns\": [\n            {\n              \"name\": \"meta.function-call.shadeup\",\n              \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n              \"end\": \"(?=(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#function-call-target\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#function-call-optionals\"\n            },\n            {\n              \"include\": \"#type-arguments\"\n            }\n          ]\n        }\n      ]\n    },\n    \"function-call-target\": {\n      \"patterns\": [\n        {\n          \"include\": \"#support-function-call-identifiers\"\n        },\n        {\n          \"name\": \"entity.name.function.shadeup\",\n          \"match\": \"(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\"\n        }\n      ]\n    },\n    \"function-call-optionals\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.function-call.shadeup punctuation.accessor.optional.shadeup\",\n          \"match\": \"\\\\?\\\\.\"\n        },\n        {\n          \"name\": \"meta.function-call.shadeup keyword.operator.definiteassignment.shadeup\",\n          \"match\": \"\\\\!\"\n        }\n      ]\n    },\n    \"support-function-call-identifiers\": {\n      \"patterns\": [\n        {\n          \"include\": \"#literal\"\n        },\n        {\n          \"include\": \"#support-objects\"\n        },\n        {\n          \"include\": \"#object-identifiers\"\n        },\n        {\n          \"include\": \"#punctuation-accessor\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.import.shadeup\",\n          \"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*[\\\\(]\\\\s*[\\\\\\\"\\\\'\\\\`]))\"\n        }\n      ]\n    },\n    \"new-expr\": {\n      \"name\": \"new.expr.shadeup\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.new.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"instanceof-expr\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.expression.instanceof.shadeup\"\n        }\n      },\n      \"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|(===|!==|==|!=)|(([\\\\&\\\\~\\\\^\\\\|]\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s+instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n      \"patterns\": [\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"paren-expression-possibly-arrow\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<=[(=,])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            }\n          },\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?<=[(=,]|=>|^return|[^\\\\._$[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)))\\\\s*$)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.shadeup\"\n            }\n          },\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#possibly-arrow-return-type\"\n        }\n      ]\n    },\n    \"paren-expression-possibly-arrow-with-typeparameters\": {\n      \"patterns\": [\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"begin\": \"\\\\(\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression-inside-possibly-arrow-parens\"\n            }\n          ]\n        }\n      ]\n    },\n    \"expression-inside-possibly-arrow-parens\": {\n      \"patterns\": [\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#destructuring-parameter\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.shadeup variable.language.this.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.function.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*[:,]|$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.shadeup variable.language.this.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"variable.parameter.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"name\": \"punctuation.separator.parameter.shadeup\",\n          \"match\": \",\"\n        },\n        {\n          \"include\": \"#identifiers\"\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"paren-expression\": {\n      \"begin\": \"\\\\(\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.shadeup\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"cast\": {\n      \"patterns\": [\n        {\n          \"name\": \"cast.expr.shadeup\",\n          \"match\": \"\\\\s*(<)\\\\s*(const)\\\\s*(>)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"meta.brace.angle.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"meta.brace.angle.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"cast.expr.shadeup\",\n          \"begin\": \"(?:(?<!\\\\+\\\\+|--)(?<=^return|[^\\\\._$[:alnum:]]return|^throw|[^\\\\._$[:alnum:]]throw|^yield|[^\\\\._$[:alnum:]]yield|^await|[^\\\\._$[:alnum:]]await|^default|[^\\\\._$[:alnum:]]default|[=(,:>*?\\\\&\\\\|\\\\^]|[^_$[:alnum:]](?:\\\\+\\\\+|\\\\-\\\\-)|[^\\\\+]\\\\+|[^\\\\-]\\\\-))\\\\s*(<)(?!<?\\\\=)(?!\\\\s*$)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.brace.angle.shadeup\"\n            }\n          },\n          \"end\": \"(\\\\>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"meta.brace.angle.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"cast.expr.shadeup\",\n          \"begin\": \"(?:(?<=^))\\\\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\\\\s*>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.brace.angle.shadeup\"\n            }\n          },\n          \"end\": \"(\\\\>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"meta.brace.angle.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"expression-operators\": {\n      \"patterns\": [\n        {\n          \"name\": \"keyword.control.flow.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(await)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?=\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*\\\\*)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.flow.shadeup\"\n            }\n          },\n          \"end\": \"\\\\*\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.generator.asterisk.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s*(\\\\*))?\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.flow.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.generator.asterisk.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.expression.delete.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))delete(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.in.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))in(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.of.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))of(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.instanceof.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.new.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#typeof-operator\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.void.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))void(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*($|[;,:})\\\\]]))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.shadeup\"\n            }\n          }\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.satisfies.shadeup\"\n            }\n          },\n          \"end\": \"(?=^|[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisfies)\\\\s+)|(\\\\s+\\\\<))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"keyword.operator.spread.shadeup\",\n          \"match\": \"\\\\.\\\\.\\\\.\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.compound.shadeup\",\n          \"match\": \"\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.compound.bitwise.shadeup\",\n          \"match\": \"\\\\&=|\\\\^=|<<=|>>=|>>>=|\\\\|=\"\n        },\n        {\n          \"name\": \"keyword.operator.bitwise.shift.shadeup\",\n          \"match\": \"<<|>>>|>>\"\n        },\n        {\n          \"name\": \"keyword.operator.comparison.shadeup\",\n          \"match\": \"===|!==|==|!=\"\n        },\n        {\n          \"name\": \"keyword.operator.relational.shadeup\",\n          \"match\": \"<=|>=|<>|<|>\"\n        },\n        {\n          \"match\": \"(?<=[_$[:alnum:]])(\\\\!)\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.logical.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.assignment.compound.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.arithmetic.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.logical.shadeup\",\n          \"match\": \"\\\\!|&&|\\\\|\\\\||\\\\?\\\\?\"\n        },\n        {\n          \"name\": \"keyword.operator.bitwise.shadeup\",\n          \"match\": \"\\\\&|~|\\\\^|\\\\|\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.shadeup\",\n          \"match\": \"\\\\=\"\n        },\n        {\n          \"name\": \"keyword.operator.decrement.shadeup\",\n          \"match\": \"--\"\n        },\n        {\n          \"name\": \"keyword.operator.increment.shadeup\",\n          \"match\": \"\\\\+\\\\+\"\n        },\n        {\n          \"name\": \"keyword.operator.arithmetic.shadeup\",\n          \"match\": \"%|\\\\*|/|-|\\\\+\"\n        },\n        {\n          \"begin\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)+(?:(/=)|(?:(/)(?![/*]))))\",\n          \"end\": \"(?:(/=)|(?:(/)(?!\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)))\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.compound.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.arithmetic.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.compound.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.arithmetic.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"typeof-operator\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))typeof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"keyword.operator.expression.typeof.shadeup\"\n        }\n      },\n      \"end\": \"(?=[,);}\\\\]=>:&|{\\\\?]|(extends\\\\s+)|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|impl|struct|fn|trait|shader|workgroup|pub|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n      \"patterns\": [\n        {\n          \"include\": \"#type-arguments\"\n        },\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"literal\": {\n      \"patterns\": [\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#boolean-literal\"\n        },\n        {\n          \"include\": \"#null-literal\"\n        },\n        {\n          \"include\": \"#undefined-literal\"\n        },\n        {\n          \"include\": \"#numericConstant-literal\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#this-literal\"\n        },\n        {\n          \"include\": \"#super-literal\"\n        }\n      ]\n    },\n    \"array-literal\": {\n      \"name\": \"meta.array.literal.shadeup\",\n      \"begin\": \"\\\\s*(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"numeric-literal\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.numeric.hex.shadeup\",\n          \"match\": \"\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"constant.numeric.binary.shadeup\",\n          \"match\": \"\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"constant.numeric.octal.shadeup\",\n          \"match\": \"\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n(?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.decimal.shadeup\"\n            },\n            \"1\": {\n              \"name\": \"meta.delimiter.decimal.period.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"meta.delimiter.decimal.period.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"meta.delimiter.decimal.period.shadeup\"\n            },\n            \"6\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"7\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"8\": {\n              \"name\": \"meta.delimiter.decimal.period.shadeup\"\n            },\n            \"9\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"10\": {\n              \"name\": \"meta.delimiter.decimal.period.shadeup\"\n            },\n            \"11\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"12\": {\n              \"name\": \"meta.delimiter.decimal.period.shadeup\"\n            },\n            \"13\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            },\n            \"14\": {\n              \"name\": \"storage.type.numeric.bigint.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"boolean-literal\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.language.boolean.true.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))true(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"constant.language.boolean.false.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))false(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"null-literal\": {\n      \"name\": \"constant.language.null.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))null(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"this-literal\": {\n      \"name\": \"variable.language.this.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))this\\\\b(?!\\\\$)\"\n    },\n    \"super-literal\": {\n      \"name\": \"variable.language.super.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))super\\\\b(?!\\\\$)\"\n    },\n    \"undefined-literal\": {\n      \"name\": \"constant.language.undefined.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))undefined(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"numericConstant-literal\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.language.nan.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))NaN(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"constant.language.infinity.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Infinity(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"support-objects\": {\n      \"patterns\": [\n        {\n          \"name\": \"variable.language.arguments.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(arguments)\\\\b(?!\\\\$)\"\n        },\n        {\n          \"name\": \"support.class.promise.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(Promise)\\\\b(?!\\\\$)\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(import)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(meta)\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.import.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"support.variable.property.importmeta.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(target)\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.new.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"support.variable.property.target.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x) (?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]]))) \\\\s* (?:\\n  (?:(constructor|length|prototype|__proto__)\\\\b(?!\\\\$|\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\\\())\\n  |\\n  (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"support.variable.property.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"support.constant.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(exports)|(module)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"support.type.object.module.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"support.type.object.module.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"support.type.object.module.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"identifiers\": {\n      \"patterns\": [\n        {\n          \"include\": \"#object-identifiers\"\n        },\n        {\n          \"match\": \"(?x)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.constant.property.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.property.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"variable.other.constant.shadeup\",\n          \"match\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n        },\n        {\n          \"name\": \"variable.other.readwrite.shadeup\",\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n        }\n      ]\n    },\n    \"object-identifiers\": {\n      \"patterns\": [\n        {\n          \"name\": \"support.class.shadeup\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\\\??\\\\.\\\\s*prototype\\\\b(?!\\\\$))\"\n        },\n        {\n          \"match\": \"(?x)(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(?:\\n  (\\\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\\n  (\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.constant.object.property.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"variable.other.object.property.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:\\n  ([[:upper:]][_$[:digit:][:upper:]]*) |\\n  ([_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"variable.other.constant.object.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.object.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"type-annotation\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.type.annotation.shadeup\",\n          \"begin\": \"(:)(?=\\\\s*\\\\S)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.shadeup\"\n            }\n          },\n          \"end\": \"(?<![:|&])(?!\\\\s*[|&]\\\\s+)((?=^|[,);\\\\}\\\\]]|//)|(?==[^>])|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.annotation.shadeup\",\n          \"begin\": \"(:)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.shadeup\"\n            }\n          },\n          \"end\": \"(?<![:|&])((?=[,);\\\\}\\\\]]|\\\\/\\\\/)|(?==[^>])|(?=^\\\\s*$)|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"parameter-type-annotation\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.type.annotation.shadeup\",\n          \"begin\": \"(:)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.shadeup\"\n            }\n          },\n          \"end\": \"(?=[,)])|(?==[^>])\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"return-type\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.return.type.shadeup\",\n          \"begin\": \"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.shadeup\"\n            }\n          },\n          \"end\": \"(?<![:|&])(?=$|^|[{};,]|//)\",\n          \"patterns\": [\n            {\n              \"include\": \"#return-type-core\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.return.type.shadeup\",\n          \"begin\": \"(?<=\\\\))\\\\s*(:)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.shadeup\"\n            }\n          },\n          \"end\": \"(?<![:|&])((?=[{};,]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#return-type-core\"\n            }\n          ]\n        }\n      ]\n    },\n    \"return-type-core\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?<=[:|&])(?=\\\\s*\\\\{)\",\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#type-predicate-operator\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"arrow-return-type\": {\n      \"name\": \"meta.return.type.arrow.shadeup\",\n      \"begin\": \"(?<=\\\\))\\\\s*(:)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.type.annotation.shadeup\"\n        }\n      },\n      \"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n      \"patterns\": [\n        {\n          \"include\": \"#arrow-return-type-body\"\n        }\n      ]\n    },\n    \"possibly-arrow-return-type\": {\n      \"begin\": \"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*=>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"meta.arrow.shadeup meta.return.type.arrow.shadeup keyword.operator.type.annotation.shadeup\"\n        }\n      },\n      \"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n      \"contentName\": \"meta.arrow.shadeup meta.return.type.arrow.shadeup\",\n      \"patterns\": [\n        {\n          \"include\": \"#arrow-return-type-body\"\n        }\n      ]\n    },\n    \"arrow-return-type-body\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<=[:])(?=\\\\s*\\\\{)\",\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#type-predicate-operator\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-parameters\": {\n      \"name\": \"meta.type.parameters.shadeup\",\n      \"begin\": \"(<)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.typeparameters.begin.shadeup\"\n        }\n      },\n      \"end\": \"(>)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.typeparameters.end.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"storage.modifier.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#type\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.shadeup\",\n          \"match\": \"(=)(?!>)\"\n        }\n      ]\n    },\n    \"type-arguments\": {\n      \"name\": \"meta.type.parameters.shadeup\",\n      \"begin\": \"\\\\<\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.typeparameters.begin.shadeup\"\n        }\n      },\n      \"end\": \"\\\\>\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.typeparameters.end.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#type-arguments-body\"\n        }\n      ]\n    },\n    \"type-arguments-body\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.type.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"type\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#type-primitive\"\n        },\n        {\n          \"include\": \"#type-builtin-literals\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#type-tuple\"\n        },\n        {\n          \"include\": \"#type-object\"\n        },\n        {\n          \"include\": \"#type-operators\"\n        },\n        {\n          \"include\": \"#type-conditional\"\n        },\n        {\n          \"include\": \"#type-fn-type-parameters\"\n        },\n        {\n          \"include\": \"#type-paren-or-function-parameters\"\n        },\n        {\n          \"include\": \"#type-function-return-type\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-name\"\n        }\n      ]\n    },\n    \"type-primitive\": {\n      \"name\": \"support.type.primitive.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"type-builtin-literals\": {\n      \"name\": \"support.type.builtin.shadeup\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"type-tuple\": {\n      \"name\": \"meta.type.tuple.shadeup\",\n      \"begin\": \"\\\\[\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"keyword.operator.rest.shadeup\",\n          \"match\": \"\\\\.\\\\.\\\\.\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(\\\\?)?\\\\s*(:)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.label.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator.label.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"type-object\": {\n      \"name\": \"meta.object.type.shadeup\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#method-declaration\"\n        },\n        {\n          \"include\": \"#indexer-declaration\"\n        },\n        {\n          \"include\": \"#indexer-mapped-type-declaration\"\n        },\n        {\n          \"include\": \"#field-declaration\"\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"begin\": \"\\\\.\\\\.\\\\.\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.spread.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-conditional\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends)\\\\s+\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            }\n          },\n          \"end\": \"(?<=:)\",\n          \"patterns\": [\n            {\n              \"begin\": \"\\\\?\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"keyword.operator.ternary.shadeup\"\n                }\n              },\n              \"end\": \":\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"keyword.operator.ternary.shadeup\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#type\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type-paren-or-function-parameters\": {\n      \"name\": \"meta.type.paren.cover.shadeup\",\n      \"begin\": \"\\\\(\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.shadeup\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=\\\\s*(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?[\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.shadeup variable.language.this.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.function.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=:)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.shadeup variable.language.this.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"variable.parameter.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"name\": \"punctuation.separator.parameter.shadeup\",\n          \"match\": \",\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-fn-type-parameters\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b(?=\\\\s*\\\\<)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.type.constructor.shadeup storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"meta.type.constructor.shadeup keyword.control.new.shadeup\"\n            }\n          },\n          \"end\": \"(?<=>)\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#type-parameters\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.constructor.shadeup\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b\\\\s*(?=\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.new.shadeup\"\n            }\n          },\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#function-parameters\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.function.shadeup\",\n          \"begin\": \"(?x)(\\n  (?=\\n    [(]\\\\s*(\\n      ([)]) |\\n      (\\\\.\\\\.\\\\.) |\\n      ([_$[:alnum:]]+\\\\s*(\\n        ([:,?=])|\\n        ([)]\\\\s*=>)\\n      ))\\n    )\\n  )\\n)\",\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#function-parameters\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type-function-return-type\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.type.function.return.shadeup\",\n          \"begin\": \"(=>)(?=\\\\s*\\\\S)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.function.arrow.shadeup\"\n            }\n          },\n          \"end\": \"(?<!=>)(?<![|&])(?=[,\\\\]\\\\)\\\\{\\\\}=;>:\\\\?]|//|$)\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-function-return-type-core\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.function.return.shadeup\",\n          \"begin\": \"=>\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"storage.type.function.arrow.shadeup\"\n            }\n          },\n          \"end\": \"(?<!=>)(?<![|&])((?=[,\\\\]\\\\)\\\\{\\\\}=;:\\\\?>]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-function-return-type-core\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type-function-return-type-core\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?<==>)(?=\\\\s*\\\\{)\",\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#type-predicate-operator\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-operators\": {\n      \"patterns\": [\n        {\n          \"include\": \"#typeof-operator\"\n        },\n        {\n          \"include\": \"#type-infer\"\n        },\n        {\n          \"begin\": \"([&|])(?=\\\\s*\\\\{)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.type.shadeup\"\n            }\n          },\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"[&|]\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.type.shadeup\"\n            }\n          },\n          \"end\": \"(?=\\\\S)\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.keyof.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))keyof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.ternary.shadeup\",\n          \"match\": \"(\\\\?|\\\\:)\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.import.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*\\\\()\"\n        }\n      ]\n    },\n    \"type-infer\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(infer)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s+(extends)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))?\",\n          \"name\": \"meta.type.infer.shadeup\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.expression.infer.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.type.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.expression.extends.shadeup\"\n            }\n          }\n        }\n      ]\n    },\n    \"type-predicate-operator\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(asserts)\\\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s(is)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.asserts.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"variable.parameter.shadeup variable.language.this.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"keyword.operator.expression.is.shadeup\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(asserts)\\\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.asserts.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"variable.parameter.shadeup variable.language.this.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.type.asserts.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))asserts(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.is.shadeup\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))is(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"type-name\": {\n      \"patterns\": [\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(<)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.module.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"meta.type.parameters.shadeup punctuation.definition.typeparameters.begin.shadeup\"\n            }\n          },\n          \"end\": \"(>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"meta.type.parameters.shadeup punctuation.definition.typeparameters.end.shadeup\"\n            }\n          },\n          \"contentName\": \"meta.type.parameters.shadeup\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-arguments-body\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(<)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"meta.type.parameters.shadeup punctuation.definition.typeparameters.begin.shadeup\"\n            }\n          },\n          \"end\": \"(>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"meta.type.parameters.shadeup punctuation.definition.typeparameters.end.shadeup\"\n            }\n          },\n          \"contentName\": \"meta.type.parameters.shadeup\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-arguments-body\"\n            }\n          ]\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.module.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.shadeup\"\n            }\n          }\n        },\n        {\n          \"name\": \"entity.name.type.shadeup\",\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n        }\n      ]\n    },\n    \"punctuation-comma\": {\n      \"name\": \"punctuation.separator.comma.shadeup\",\n      \"match\": \",\"\n    },\n    \"punctuation-semicolon\": {\n      \"name\": \"punctuation.terminator.statement.shadeup\",\n      \"match\": \";\"\n    },\n    \"punctuation-accessor\": {\n      \"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"punctuation.accessor.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.accessor.optional.shadeup\"\n        }\n      }\n    },\n    \"string\": {\n      \"patterns\": [\n        {\n          \"include\": \"#qstring-single\"\n        },\n        {\n          \"include\": \"#qstring-double\"\n        },\n        {\n          \"include\": \"#template\"\n        }\n      ]\n    },\n    \"qstring-double\": {\n      \"name\": \"string.quoted.double.shadeup\",\n      \"begin\": \"\\\"\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.begin.shadeup\"\n        }\n      },\n      \"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.string.end.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"invalid.illegal.newline.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#string-character-escape\"\n        }\n      ]\n    },\n    \"qstring-single\": {\n      \"name\": \"string.quoted.single.shadeup\",\n      \"begin\": \"'\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.begin.shadeup\"\n        }\n      },\n      \"end\": \"(\\\\')|((?:[^\\\\\\\\\\\\n])$)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.string.end.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"invalid.illegal.newline.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#string-character-escape\"\n        }\n      ]\n    },\n    \"string-character-escape\": {\n      \"name\": \"constant.character.escape.shadeup\",\n      \"match\": \"\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\\\{[0-9A-Fa-f]+\\\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)\"\n    },\n    \"template\": {\n      \"patterns\": [\n        {\n          \"include\": \"#template-call\"\n        },\n        {\n          \"contentName\": \"string.template.shadeup\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.function.tagged-template.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"string.template.shadeup punctuation.definition.string.template.begin.shadeup\"\n            }\n          },\n          \"end\": \"`\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"string.template.shadeup punctuation.definition.string.template.end.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#template-substitution-element\"\n            },\n            {\n              \"include\": \"#string-character-escape\"\n            }\n          ]\n        }\n      ]\n    },\n    \"template-call\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n          \"end\": \"(?=`)\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))\",\n              \"end\": \"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#support-function-call-identifiers\"\n                },\n                {\n                  \"name\": \"entity.name.function.tagged-template.shadeup\",\n                  \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#type-arguments\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)`)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.function.tagged-template.shadeup\"\n            }\n          },\n          \"end\": \"(?=`)\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-arguments\"\n            }\n          ]\n        }\n      ]\n    },\n    \"template-substitution-element\": {\n      \"name\": \"meta.template.expression.shadeup\",\n      \"begin\": \"\\\\$\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.begin.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.end.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ],\n      \"contentName\": \"meta.embedded.line.shadeup\"\n    },\n    \"type-string\": {\n      \"patterns\": [\n        {\n          \"include\": \"#qstring-single\"\n        },\n        {\n          \"include\": \"#qstring-double\"\n        },\n        {\n          \"include\": \"#template-type\"\n        }\n      ]\n    },\n    \"template-type\": {\n      \"patterns\": [\n        {\n          \"include\": \"#template-call\"\n        },\n        {\n          \"contentName\": \"string.template.shadeup\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.function.tagged-template.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"string.template.shadeup punctuation.definition.string.template.begin.shadeup\"\n            }\n          },\n          \"end\": \"`\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"string.template.shadeup punctuation.definition.string.template.end.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#template-type-substitution-element\"\n            },\n            {\n              \"include\": \"#string-character-escape\"\n            }\n          ]\n        }\n      ]\n    },\n    \"template-type-substitution-element\": {\n      \"name\": \"meta.template.expression.shadeup\",\n      \"begin\": \"\\\\$\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.begin.shadeup\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.end.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#type\"\n        }\n      ],\n      \"contentName\": \"meta.embedded.line.shadeup\"\n    },\n    \"regex\": {\n      \"patterns\": [\n        {\n          \"name\": \"string.regexp.shadeup\",\n          \"begin\": \"(?<!\\\\+\\\\+|--|})(?<=[=(:,\\\\[?+!]|^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case|=>|&&|\\\\|\\\\||\\\\*\\\\/)\\\\s*(\\\\/)(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[\\\\()]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)+\\\\]|\\\\(([^\\\\)\\\\\\\\]|\\\\\\\\.)+\\\\))+\\\\/([dgimsuy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.string.begin.shadeup\"\n            }\n          },\n          \"end\": \"(/)([dgimsuy]*)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.string.end.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.other.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        },\n        {\n          \"name\": \"string.regexp.shadeup\",\n          \"begin\": \"((?<![_$[:alnum:])\\\\]]|\\\\+\\\\+|--|}|\\\\*\\\\/)|((?<=^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case))\\\\s*)\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.string.begin.shadeup\"\n            }\n          },\n          \"end\": \"(/)([dgimsuy]*)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.string.end.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"keyword.other.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        }\n      ]\n    },\n    \"regexp\": {\n      \"patterns\": [\n        {\n          \"name\": \"keyword.control.anchor.regexp\",\n          \"match\": \"\\\\\\\\[bB]|\\\\^|\\\\$\"\n        },\n        {\n          \"match\": \"\\\\\\\\[1-9]\\\\d*|\\\\\\\\k<([a-zA-Z_$][\\\\w$]*)>\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"keyword.other.back-reference.regexp\"\n            },\n            \"1\": {\n              \"name\": \"variable.other.regexp\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.quantifier.regexp\",\n          \"match\": \"[?+*]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)\\\\}\\\\??\"\n        },\n        {\n          \"name\": \"keyword.operator.or.regexp\",\n          \"match\": \"\\\\|\"\n        },\n        {\n          \"name\": \"meta.group.assertion.regexp\",\n          \"begin\": \"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?<!))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.group.assertion.regexp\"\n            },\n            \"3\": {\n              \"name\": \"meta.assertion.look-ahead.regexp\"\n            },\n            \"4\": {\n              \"name\": \"meta.assertion.negative-look-ahead.regexp\"\n            },\n            \"5\": {\n              \"name\": \"meta.assertion.look-behind.regexp\"\n            },\n            \"6\": {\n              \"name\": \"meta.assertion.negative-look-behind.regexp\"\n            }\n          },\n          \"end\": \"(\\\\))\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.group.regexp\",\n          \"begin\": \"\\\\((?:(\\\\?:)|(?:\\\\?<([a-zA-Z_$][\\\\w$]*)>))?\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            },\n            \"1\": {\n              \"name\": \"punctuation.definition.group.no-capture.regexp\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.regexp\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        },\n        {\n          \"name\": \"constant.other.character-class.set.regexp\",\n          \"begin\": \"(\\\\[)(\\\\^)?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.character-class.regexp\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.negation.regexp\"\n            }\n          },\n          \"end\": \"(\\\\])\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.character-class.regexp\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"name\": \"constant.other.character-class.range.regexp\",\n              \"match\": \"(?:.|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\\\\-(?:[^\\\\]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"constant.character.numeric.regexp\"\n                },\n                \"2\": {\n                  \"name\": \"constant.character.control.regexp\"\n                },\n                \"3\": {\n                  \"name\": \"constant.character.escape.backslash.regexp\"\n                },\n                \"4\": {\n                  \"name\": \"constant.character.numeric.regexp\"\n                },\n                \"5\": {\n                  \"name\": \"constant.character.control.regexp\"\n                },\n                \"6\": {\n                  \"name\": \"constant.character.escape.backslash.regexp\"\n                }\n              }\n            },\n            {\n              \"include\": \"#regex-character-class\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#regex-character-class\"\n        }\n      ]\n    },\n    \"regex-character-class\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.other.character-class.regexp\",\n          \"match\": \"\\\\\\\\[wWsSdDtrnvf]|\\\\.\"\n        },\n        {\n          \"name\": \"constant.character.numeric.regexp\",\n          \"match\": \"\\\\\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})\"\n        },\n        {\n          \"name\": \"constant.character.control.regexp\",\n          \"match\": \"\\\\\\\\c[A-Z]\"\n        },\n        {\n          \"name\": \"constant.character.escape.backslash.regexp\",\n          \"match\": \"\\\\\\\\.\"\n        }\n      ]\n    },\n    \"comment\": {\n      \"patterns\": [\n        {\n          \"name\": \"comment.block.documentation.shadeup\",\n          \"begin\": \"/\\\\*\\\\*(?!/)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.comment.shadeup\"\n            }\n          },\n          \"end\": \"\\\\*/\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.comment.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#docblock\"\n            }\n          ]\n        },\n        {\n          \"name\": \"comment.block.shadeup\",\n          \"begin\": \"(/\\\\*)(?:\\\\s*((@)internal)(?=\\\\s|(\\\\*/)))?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.comment.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.internaldeclaration.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.decorator.internaldeclaration.shadeup\"\n            }\n          },\n          \"end\": \"\\\\*/\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.comment.shadeup\"\n            }\n          }\n        },\n        {\n          \"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.whitespace.comment.leading.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"comment.line.double-slash.shadeup\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.comment.shadeup\"\n            },\n            \"4\": {\n              \"name\": \"storage.type.internaldeclaration.shadeup\"\n            },\n            \"5\": {\n              \"name\": \"punctuation.decorator.internaldeclaration.shadeup\"\n            }\n          },\n          \"end\": \"(?=$)\",\n          \"contentName\": \"comment.line.double-slash.shadeup\"\n        }\n      ]\n    },\n    \"single-line-comment-consuming-line-ending\": {\n      \"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.whitespace.comment.leading.shadeup\"\n        },\n        \"2\": {\n          \"name\": \"comment.line.double-slash.shadeup\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.definition.comment.shadeup\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.internaldeclaration.shadeup\"\n        },\n        \"5\": {\n          \"name\": \"punctuation.decorator.internaldeclaration.shadeup\"\n        }\n      },\n      \"end\": \"(?=^)\",\n      \"contentName\": \"comment.line.double-slash.shadeup\"\n    },\n    \"directives\": {\n      \"name\": \"comment.line.triple-slash.directive.shadeup\",\n      \"begin\": \"^(///)\\\\s*(?=<(reference|amd-dependency|amd-module)(\\\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\\\s*=\\\\s*((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))+\\\\s*/>\\\\s*$)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.comment.shadeup\"\n        }\n      },\n      \"end\": \"(?=$)\",\n      \"patterns\": [\n        {\n          \"name\": \"meta.tag.shadeup\",\n          \"begin\": \"(<)(reference|amd-dependency|amd-module)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.directive.shadeup\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.tag.directive.shadeup\"\n            }\n          },\n          \"end\": \"/>\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.tag.directive.shadeup\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"name\": \"entity.other.attribute-name.directive.shadeup\",\n              \"match\": \"path|types|no-default-lib|lib|name|resolution-mode\"\n            },\n            {\n              \"name\": \"keyword.operator.assignment.shadeup\",\n              \"match\": \"=\"\n            },\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        }\n      ]\n    },\n    \"docblock\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?x)\\n((@)(?:access|api))\\n\\\\s+\\n(private|protected|public)\\n\\\\b\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"constant.language.access-type.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)author)\\n\\\\s+\\n(\\n  [^@\\\\s<>*/]\\n  (?:[^@<>*/]|\\\\*[^/])*\\n)\\n(?:\\n  \\\\s*\\n  (<)\\n  ([^>\\\\s]+)\\n  (>)\\n)?\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n            },\n            \"5\": {\n              \"name\": \"constant.other.email.link.underline.jsdoc\"\n            },\n            \"6\": {\n              \"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)borrows) \\\\s+\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <that namepath>\\n\\\\s+ (as) \\\\s+              # as\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <this namepath>\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"keyword.operator.control.jsdoc\"\n            },\n            \"5\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.example.jsdoc\",\n          \"begin\": \"((@)example)\\\\s+\",\n          \"end\": \"(?=@|\\\\*/)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"match\": \"^\\\\s\\\\*\\\\s+\"\n            },\n            {\n              \"contentName\": \"constant.other.description.jsdoc\",\n              \"begin\": \"\\\\G(<)caption(>)\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"entity.name.tag.inline.jsdoc\"\n                },\n                \"1\": {\n                  \"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n                }\n              },\n              \"end\": \"(</)caption(>)|(?=\\\\*/)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"entity.name.tag.inline.jsdoc\"\n                },\n                \"1\": {\n                  \"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n                }\n              }\n            },\n            {\n              \"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n              \"captures\": {\n                \"0\": {\n                  \"name\": \"source.embedded.shadeup\"\n                }\n              }\n            }\n          ]\n        },\n        {\n          \"match\": \"(?x) ((@)kind) \\\\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\\\b\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"constant.language.symbol-type.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)see)\\n\\\\s+\\n(?:\\n  # URL\\n  (\\n    (?=https?://)\\n    (?:[^\\\\s*]|\\\\*[^/])+\\n  )\\n  |\\n  # JSDoc namepath\\n  (\\n    (?!\\n      # Avoid matching bare URIs (also acceptable as links)\\n      https?://\\n      |\\n      # Avoid matching {@inline tags}; we match those below\\n      (?:\\\\[[^\\\\[\\\\]]*\\\\])? # Possible description [preceding]{@tag}\\n      {@(?:link|linkcode|linkplain|tutorial)\\\\b\\n    )\\n    # Matched namepath\\n    (?:[^@\\\\s*/]|\\\\*[^/])+\\n  )\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.link.underline.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)template)\\n\\\\s+\\n# One or more valid identifiers\\n(\\n  [A-Za-z_$]         # First character: non-numeric word character\\n  [\\\\w$.\\\\[\\\\]]*        # Rest of identifier\\n  (?:                # Possible list of additional identifiers\\n    \\\\s* , \\\\s*\\n    [A-Za-z_$]\\n    [\\\\w$.\\\\[\\\\]]*\\n  )*\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            }\n          }\n        },\n        {\n          \"begin\": \"(?x)((@)template)\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            },\n            {\n              \"name\": \"variable.other.jsdoc\",\n              \"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?x)\\n(\\n  (@)\\n  (?:arg|argument|const|constant|member|namespace|param|var)\\n)\\n\\\\s+\\n(\\n  [A-Za-z_$]\\n  [\\\\w$.\\\\[\\\\]]*\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            }\n          }\n        },\n        {\n          \"begin\": \"((@)typedef)\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            },\n            {\n              \"name\": \"entity.name.type.instance.jsdoc\",\n              \"match\": \"(?:[^@\\\\s*/]|\\\\*[^/])+\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            },\n            {\n              \"name\": \"variable.other.jsdoc\",\n              \"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n            },\n            {\n              \"name\": \"variable.other.jsdoc\",\n              \"match\": \"(?x)\\n(\\\\[)\\\\s*\\n[\\\\w$]+\\n(?:\\n  (?:\\\\[\\\\])?                                        # Foo[ ].bar properties within an array\\n  \\\\.                                                # Foo.Bar namespaced parameter\\n  [\\\\w$]+\\n)*\\n(?:\\n  \\\\s*\\n  (=)                                                # [foo=bar] Default parameter value\\n  \\\\s*\\n  (\\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\\n    (?>\\n      \\\"(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!\\\"))|[^*\\\\\\\\])*?\\\" |                      # [foo=\\\"bar\\\"] Double-quoted\\n      '(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!'))|[^*\\\\\\\\])*?' |                      # [foo='bar'] Single-quoted\\n      \\\\[ (?:(?:\\\\*(?!/))|[^*])*? \\\\] |                                # [foo=[1,2]] Array literal\\n      (?:(?:\\\\*(?!/))|\\\\s(?!\\\\s*\\\\])|\\\\[.*?(?:\\\\]|(?=\\\\*/))|[^*\\\\s\\\\[\\\\]])*   # Everything else\\n    )*\\n  )\\n)?\\n\\\\s*(?:(\\\\])((?:[^*\\\\s]|\\\\*[^\\\\s/])+)?|(?=\\\\*/))\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"punctuation.definition.optional-value.begin.bracket.square.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"keyword.operator.assignment.jsdoc\"\n                },\n                \"3\": {\n                  \"name\": \"source.embedded.shadeup\"\n                },\n                \"4\": {\n                  \"name\": \"punctuation.definition.optional-value.end.bracket.square.jsdoc\"\n                },\n                \"5\": {\n                  \"name\": \"invalid.illegal.syntax.jsdoc\"\n                }\n              }\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?x)\\n(\\n  (@)\\n  (?:define|enum|exception|export|extends|lends|implements|modifies\\n  |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\\n  |yields?)\\n)\\n\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?x)\\n(\\n  (@)\\n  (?:alias|augments|callback|constructs|emits|event|fires|exports?\\n  |extends|external|function|func|host|lends|listens|interface|memberof!?\\n  |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [^{}@\\\\s*] | \\\\*[^/]\\n  )+\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            }\n          }\n        },\n        {\n          \"contentName\": \"variable.other.jsdoc\",\n          \"begin\": \"((@)(?:default(?:value)?|license|version))\\\\s+(([''\\\"]))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"punctuation.definition.string.begin.jsdoc\"\n            }\n          },\n          \"end\": \"(\\\\3)|(?=$|\\\\*/)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"variable.other.jsdoc\"\n            },\n            \"1\": {\n              \"name\": \"punctuation.definition.string.end.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^\\\\s*]+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            }\n          }\n        },\n        {\n          \"name\": \"storage.type.class.jsdoc\",\n          \"match\": \"(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\\\b\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          }\n        },\n        {\n          \"include\": \"#inline-tags\"\n        },\n        {\n          \"match\": \"((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\\\s+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          }\n        }\n      ]\n    },\n    \"brackets\": {\n      \"patterns\": [\n        {\n          \"begin\": \"{\",\n          \"end\": \"}|(?=\\\\*/)\",\n          \"patterns\": [\n            {\n              \"include\": \"#brackets\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"\\\\[\",\n          \"end\": \"\\\\]|(?=\\\\*/)\",\n          \"patterns\": [\n            {\n              \"include\": \"#brackets\"\n            }\n          ]\n        }\n      ]\n    },\n    \"inline-tags\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.other.description.jsdoc\",\n          \"match\": \"(\\\\[)[^\\\\]]+(\\\\])(?={@(?:link|linkcode|linkplain|tutorial))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.bracket.square.begin.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.bracket.square.end.jsdoc\"\n            }\n          }\n        },\n        {\n          \"name\": \"entity.name.type.instance.jsdoc\",\n          \"begin\": \"({)((@)(?:link(?:code|plain)?|tutorial))\\\\s*\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.inline.tag.jsdoc\"\n            }\n          },\n          \"end\": \"}|(?=\\\\*/)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"match\": \"\\\\G((?=https?://)(?:[^|}\\\\s*]|\\\\*[/])+)(\\\\|)?\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"variable.other.link.underline.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.separator.pipe.jsdoc\"\n                }\n              }\n            },\n            {\n              \"match\": \"\\\\G((?:[^{}@\\\\s|*]|\\\\*[^/])+)(\\\\|)?\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"variable.other.description.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.separator.pipe.jsdoc\"\n                }\n              }\n            }\n          ]\n        }\n      ]\n    },\n    \"jsdoctype\": {\n      \"patterns\": [\n        {\n          \"contentName\": \"entity.name.type.instance.jsdoc\",\n          \"begin\": \"\\\\G({)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"1\": {\n              \"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n            }\n          },\n          \"end\": \"((}))\\\\s*|(?=\\\\*/)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#brackets\"\n            }\n          ]\n        }\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/client/package.json",
    "content": "{\n  \"name\": \"lsp-shadeup-client\",\n  \"description\": \"VSCode part of a language server\",\n  \"author\": \"Microsoft Corporation\",\n  \"license\": \"MIT\",\n  \"version\": \"0.0.1\",\n  \"publisher\": \"shadeup\",\n  \"engines\": {\n    \"vscode\": \"^1.75.0\"\n  },\n  \"dependencies\": {\n    \"vscode-languageclient\": \"^9.0.1\"\n  },\n  \"devDependencies\": {\n    \"@types/vscode\": \"^1.75.1\",\n    \"@vscode/test-electron\": \"^2.3.8\"\n  }\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/client/src/extension.ts",
    "content": "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n\nimport * as path from \"path\";\nimport { workspace, ExtensionContext } from \"vscode\";\n\nimport {\n  LanguageClient,\n  LanguageClientOptions,\n  ServerOptions,\n  TransportKind,\n} from \"vscode-languageclient/node\";\n\nlet client: LanguageClient;\n\nexport function activate(context: ExtensionContext) {\n  // The server is implemented in node\n  const serverModule = context.asAbsolutePath(\n    path.join(\"server\", \"out\", \"server.js\")\n  );\n  let debugOptions = { execArgv: [\"--nolazy\", \"--inspect=6009\"] };\n  // If the extension is launched in debug mode then the debug server options are used\n  // Otherwise the run options are used\n  const serverOptions: ServerOptions = {\n    run: { module: serverModule, transport: TransportKind.ipc },\n    debug: {\n      module: serverModule,\n      transport: TransportKind.ipc,\n      options: debugOptions,\n    },\n  };\n\n  // Options to control the language client\n  const clientOptions: LanguageClientOptions = {\n    // Register the server for plain text documents\n    documentSelector: [{ scheme: \"file\", language: \"shadeup\" }],\n    synchronize: {\n      // Notify the server about file changes to '.clientrc files contained in the workspace\n      fileEvents: workspace.createFileSystemWatcher(\"**/.clientrc\"),\n    },\n  };\n\n  // Create the language client and start the client.\n  client = new LanguageClient(\n    \"shadeupLanguageServer\",\n    \"Shadeup Language Server\",\n    serverOptions,\n    clientOptions\n  );\n\n  // Start the client. This will also launch the server\n  client.start();\n}\n\nexport function deactivate(): Thenable<void> | undefined {\n  if (!client) {\n    return undefined;\n  }\n  return client.stop();\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/client/testFixture/completion.txt",
    "content": ""
  },
  {
    "path": "extension/vscode/shadeup/client/testFixture/diagnostics.txt",
    "content": "ANY browsers, ANY OS."
  },
  {
    "path": "extension/vscode/shadeup/client/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"module\": \"commonjs\",\n\t\t\"target\": \"es2020\",\n\t\t\"lib\": [\"es2020\"],\n\t\t\"outDir\": \"out\",\n\t\t\"rootDir\": \"src\",\n\t\t\"sourceMap\": true\n\t},\n\t\"include\": [\"src\"],\n\t\"exclude\": [\"node_modules\", \".vscode-test\"]\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/lang.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as tm from \"tmlanguage-generator\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport plist from \"plist\";\n\nconst __dirname = path\n  .dirname(new URL(import.meta.url).pathname)\n  .replace(/^file:\\/\\//, \"\")\n  .replace(/^\\//, \"\");\nexport const grammarPath = path.resolve(__dirname, \"./shadeup.tmlanguage.json\");\n\ntype Rule = tm.Rule<BicepScope>;\ntype IncludeRule = tm.IncludeRule<BicepScope>;\ntype BeginEndRule = tm.BeginEndRule<BicepScope>;\ntype MatchRule = tm.MatchRule<BicepScope>;\ntype Grammar = tm.Grammar<BicepScope>;\n\nexport type BicepScope =\n  | \"comment.block.shadeup\"\n  | \"comment.line.double-slash.shadeup\"\n  | \"constant.character.escape.shadeup\"\n  | \"constant.numeric.shadeup\"\n  | \"constant.language.shadeup\"\n  | \"entity.name.function.shadeup\"\n  | \"keyword.control.declaration.shadeup\"\n  | \"string.quoted.single.shadeup\"\n  | \"string.quoted.double.shadeup\"\n  | \"string.quoted.multi.shadeup\"\n  | \"variable.other.readwrite.shadeup\"\n  | \"storage.type.function.shadeup\"\n  | \"variable.other.property.shadeup\"\n  | \"punctuation.definition.template-expression.begin.shadeup\"\n  | \"punctuation.definition.template-expression.end.shadeup\"\n  | \"storage.modifier.shadeup\"\n  | \"storage.type.shadeup\";\n\nconst bounded = (text: string) => `\\\\b${text}\\\\b`;\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst after = (regex: string) => `(?<=${regex})`;\nconst notAfter = (regex: string) => `(?<!${regex})`;\nconst before = (regex: string) => `(?=${regex})`;\nconst notBefore = (regex: string) => `(?!${regex})`;\n\nconst meta: typeof tm.meta = tm.meta;\nconst identifierStart = \"[_$[:alpha:]]\";\nconst identifierContinue = \"[_$[:alnum:]]\";\nconst identifier = bounded(`${identifierStart}${identifierContinue}*`);\nconst directive = bounded(`[_a-zA-Z-0-9]+`);\n\n// whitespace. ideally we'd tokenize in-line block comments, but that's a lot of work. For now, ignore them.\nconst ws = `(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*`;\n\nconst keywords = [\n  \"metadata\",\n  \"targetScope\",\n  \"resource\",\n  \"module\",\n  \"param\",\n  \"shader\",\n  \"workgroup\",\n  \"output\",\n  \"for\",\n  \"in\",\n  \"if\",\n  \"while\",\n  \"break\",\n  \"continue\",\n  \"else\",\n  \"return\",\n  \"existing\",\n  \"import\",\n  \"as\",\n  \"type\",\n  \"with\",\n  \"using\",\n  \"assert\",\n  \"provider\",\n];\nconst storage = [\"fn\", \"struct\", \"trait\", \"impl\"];\n\nconst keywordExpression: MatchRule = {\n  key: \"keyword\",\n  scope: \"keyword.control.declaration.shadeup\",\n  match: bounded(`(${keywords.join(\"|\")})`),\n};\nconst storageFunc: MatchRule = {\n  key: \"storage-func\",\n  scope: \"storage.type.function.shadeup\",\n  match: bounded(`(${storage.join(\"|\")})`),\n};\n\nconst variableExpression: MatchRule = {\n  key: \"variable\",\n  scope: \"storage.type.shadeup\",\n  match: bounded(`(${[\"let\", \"const\"].join(\"|\")})`),\n};\nconst storageMod: MatchRule = {\n  key: \"storage-modifier\",\n  scope: \"storage.modifier.shadeup\",\n  match: bounded(`(${[\"pub\"].join(\"|\")})`),\n};\n\nconst lineComment: MatchRule = {\n  key: \"line-comment\",\n  scope: \"comment.line.double-slash.shadeup\",\n  match: `//.*${before(`$`)}`,\n};\n\nconst blockComment: BeginEndRule = {\n  key: \"block-comment\",\n  scope: \"comment.block.shadeup\",\n  begin: `/\\\\*`,\n  end: `\\\\*/`,\n};\n\nconst comments: IncludeRule = {\n  key: \"comments\",\n  patterns: [lineComment, blockComment],\n};\n\nfunction withComments(input: Rule[]): Rule[] {\n  return [...input, comments];\n}\n\nconst expression: IncludeRule = {\n  key: \"expression\",\n  patterns: [\n    /* placeholder filled later due to cycle*/\n  ],\n};\n\nconst escapeChar: MatchRule = {\n  key: \"escape-character\",\n  scope: \"constant.character.escape.shadeup\",\n  match: `\\\\\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\\\\\|'|\\\\\\${)`,\n};\n\nconst stringVerbatim: BeginEndRule = {\n  key: \"string-verbatim\",\n  scope: \"string.quoted.multi.shadeup\",\n  begin: `'''`,\n  end: `'''`,\n  patterns: [],\n};\n\nconst stringSubstitution: BeginEndRule = {\n  key: \"string-literal-subst\",\n  scope: meta,\n  begin: `${notAfter(`\\\\\\\\`)}(\\\\\\${)`,\n  beginCaptures: {\n    \"1\": { scope: \"punctuation.definition.template-expression.begin.shadeup\" },\n  },\n  end: `(})`,\n  endCaptures: {\n    \"1\": { scope: \"punctuation.definition.template-expression.end.shadeup\" },\n  },\n  patterns: withComments([expression]),\n};\n\nconst stringLiteral: BeginEndRule = {\n  key: \"string-literal\",\n  scope: \"string.quoted.single.shadeup\",\n  begin: `'${notBefore(`''`)}`,\n  end: `'`,\n  patterns: [escapeChar, stringSubstitution],\n};\nconst stringLiteralDouble: BeginEndRule = {\n  key: \"string-literal-double\",\n  scope: \"string.quoted.double.shadeup\",\n  begin: `\"${notBefore(`\"\"`)}`,\n  end: `\"`,\n  patterns: [escapeChar, stringSubstitution],\n};\n\nconst numericLiteral: MatchRule = {\n  key: \"numeric-literal\",\n  scope: \"constant.numeric.shadeup\",\n  match: `[0-9]+`,\n};\n\nconst namedLiteral: MatchRule = {\n  key: \"named-literal\",\n  scope: \"constant.language.shadeup\",\n  match: bounded(`(true|false|null)`),\n};\n\nconst identifierExpression: MatchRule = {\n  key: \"identifier\",\n  scope: \"variable.other.readwrite.shadeup\",\n  match: `${identifier}${notBefore(`${ws}\\\\(`)}`,\n};\n\nconst objectLiteral: BeginEndRule = {\n  key: \"object-literal\",\n  scope: meta,\n  begin: `{`,\n  end: `}`,\n  patterns: withComments([\n    {\n      key: \"object-property-key\",\n      scope: \"variable.other.property.shadeup\",\n      match: `${identifier}${before(`${ws}:`)}`,\n    },\n    expression,\n  ]),\n};\n\nconst arrayLiteral: BeginEndRule = {\n  key: \"array-literal\",\n  scope: meta,\n  begin: `\\\\[${notBefore(`${ws}${bounded(`for`)}`)}`,\n  end: `]`,\n  patterns: withComments([expression]),\n};\n\nconst functionCall: BeginEndRule = {\n  key: \"function-call\",\n  scope: meta,\n  begin: `(${identifier})${ws}\\\\(`,\n  beginCaptures: {\n    \"1\": { scope: \"entity.name.function.shadeup\" },\n  },\n  end: `\\\\)`,\n  patterns: withComments([expression]),\n};\n\nconst decorator: BeginEndRule = {\n  key: \"decorator\",\n  scope: meta,\n  begin: `@${ws}${before(identifier)}`,\n  end: ``,\n  patterns: withComments([expression]),\n};\n\nconst lambdaStart =\n  `(` +\n  `\\\\(${ws}${identifier}${ws}(,${ws}${identifier}${ws})*\\\\)|` +\n  `\\\\(${ws}\\\\)|` +\n  `${ws}${identifier}${ws}` +\n  `)${before(`${ws}=>`)}`;\n\nconst lambda: BeginEndRule = {\n  key: \"lambda-start\",\n  scope: meta,\n  begin: lambdaStart,\n  beginCaptures: {\n    \"1\": {\n      scope: meta,\n      patterns: withComments([identifierExpression]),\n    },\n  },\n  end: `${ws}=>`,\n};\n\nconst directiveStatement: BeginEndRule = {\n  key: \"directive\",\n  scope: meta,\n  begin: `#${directive}`,\n  end: `$`,\n  patterns: withComments([\n    {\n      key: \"directive-variable\",\n      scope: \"keyword.control.declaration.shadeup\",\n      match: directive,\n    },\n  ]),\n};\n\nexpression.patterns = [\n  stringLiteralDouble,\n  stringLiteral,\n  stringVerbatim,\n  numericLiteral,\n  namedLiteral,\n  objectLiteral,\n  arrayLiteral,\n  keywordExpression,\n  storageFunc,\n  variableExpression,\n  storageMod,\n  identifierExpression,\n  functionCall,\n  decorator,\n  lambda,\n  directiveStatement,\n];\n\nconst grammar: Grammar = {\n  $schema: tm.schema,\n  name: \"Shadeup\",\n  scopeName: \"source.shadeup\",\n  fileTypes: [\".shadeup\"],\n  patterns: withComments([expression]),\n};\n\nexport async function generateGrammar(): Promise<string> {\n  const json = await tm.emitJSON(grammar);\n\n  return JSON.parse(json);\n}\n\ngenerateGrammar().then((grammar) => {\n  const json = JSON.stringify(grammar, null, 2);\n  fs.writeFileSync(grammarPath, json);\n});\n"
  },
  {
    "path": "extension/vscode/shadeup/language-configuration.json",
    "content": "{\n  \"wordPattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\!\\\\@\\\\#\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>\\\\/\\\\?\\\\s]+)\",\n  \"comments\": {\n    // symbol used for single line comment. Remove this entry if your language does not support line comments\n    \"lineComment\": \"//\",\n    // symbols used for start and end a block comment. Remove this entry if your language does not support block comments\n    \"blockComment\": [\"/*\", \"*/\"]\n  },\n  // symbols used as brackets\n  \"brackets\": [\n    [\"{\", \"}\"],\n    [\"[\", \"]\"],\n    [\"(\", \")\"]\n  ],\n  // symbols that are auto closed when typing\n  \"autoClosingPairs\": [\n    [\"{\", \"}\"],\n    [\"[\", \"]\"],\n    [\"(\", \")\"],\n    [\"\\\"\", \"\\\"\"],\n    [\"'\", \"'\"]\n  ],\n  // symbols that can be used to surround a selection\n  \"surroundingPairs\": [\n    [\"{\", \"}\"],\n    [\"[\", \"]\"],\n    [\"(\", \")\"],\n    [\"\\\"\", \"\\\"\"],\n    [\"'\", \"'\"]\n  ],\n  \"folding\": {\n    \"markers\": {\n      \"start\": \"^\\\\\\\\s*//\\\\\\\\s*#?region\\\\\\\\b\",\n      \"end\": \"^\\\\\\\\s*//\\\\\\\\s*#?endregion\\\\\\\\b\"\n    }\n  }\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/package.json",
    "content": "{\n  \"name\": \"shadeup-vscode\",\n  \"displayName\": \"Shadeup for VS Code\",\n  \"description\": \"Shadeup language server and tools\",\n  \"version\": \"1.0.0\",\n  \"engines\": {\n    \"vscode\": \"^1.85.0\"\n  },\n  \"publisher\": \"Shadeup\",\n  \"keywords\": [\n    \"shadeup\",\n    \"language\",\n    \"syntax\",\n    \"highlighting\"\n  ],\n  \"icon\": \"icon.png\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AskingQuestions/shadeup\"\n  },\n  \"main\": \"./client/out/extension\",\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"contributes\": {\n    \"languages\": [\n      {\n        \"id\": \"shadeup\",\n        \"aliases\": [\n          \"Shadeup\",\n          \"shadeup\"\n        ],\n        \"extensions\": [\n          \".shadeup\"\n        ],\n        \"configuration\": \"./language-configuration.json\",\n        \"icon\": {\n          \"light\": \"./icon.png\",\n          \"dark\": \"./icon.png\"\n        }\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"shadeup\",\n        \"scopeName\": \"source.shadeup\",\n        \"path\": \"./shadeup.tmlanguage.json\"\n      }\n    ]\n  },\n  \"scripts\": {\n    \"vscode:prepublish\": \"npm run compile\",\n    \"compile\": \"tsc -b\",\n    \"watch\": \"tsc -b -w\",\n    \"lint\": \"eslint ./client/src ./server/src --ext .ts,.tsx\",\n    \"postinstall\": \"cd client && npm install && cd ../server && npm install && cd ..\"\n  },\n  \"devDependencies\": {\n    \"@types/mocha\": \"^10.0.6\",\n    \"@types/node\": \"^18.14.6\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.14.0\",\n    \"@typescript-eslint/parser\": \"^6.14.0\",\n    \"eslint\": \"^8.56.0\",\n    \"mocha\": \"^10.2.0\",\n    \"typescript\": \"^5.3.3\"\n  }\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/server/compiler-dist/compiler.d.ts",
    "content": "export function makeLSPCompiler(): Promise<any>;\n"
  },
  {
    "path": "extension/vscode/shadeup/server/compiler-dist/compiler.js",
    "content": "const { makeSimpleShadeupEnvironment } = require(\"./shadeup-compiler.umd.cjs\");\nconst Parser = require(\"web-tree-sitter\");\n\nconst path = require(\"path\");\nconst { fileURLToPath } = require(\"url\");\n\nmodule.exports.makeLSPCompiler = async function makeLSPCompiler() {\n  await Parser.init();\n  const parser = new Parser();\n  const Lang = await Parser.Language.load(\n    path.resolve(path.dirname(__filename), \"tree-sitter-shadeup.wasm\")\n  );\n  parser.setLanguage(Lang);\n\n  global.shadeupParser = () => {\n    return parser;\n  };\n\n  const env = await makeSimpleShadeupEnvironment(true);\n\n  return env;\n};\n"
  },
  {
    "path": "extension/vscode/shadeup/server/compiler-dist/readme.md",
    "content": "modify the output of shadeup-compiler.js to:\n\n1. remove the tree sitter wasm strings\n2. Replace getShadeupParse with:\n\nasync function getShadeupParser() {\nreturn global.shadeupParser();\n}\n\n3. import fs and replace e4.readFileSync e4 trace up to \\_\\_viteexternal with fs\n"
  },
  {
    "path": "extension/vscode/shadeup/server/compiler-dist/shadeup-compiler.umd.cjs",
    "content": "(function(global2, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports, require(\"typescript\"), require(\"path\"), require(\"fs\"), require(\"@typescript/vfs\")) : typeof define === \"function\" && define.amd ? define([\"exports\", \"typescript\", \"path\", \"fs\", \"@typescript/vfs\"], factory) : (global2 = typeof globalThis !== \"undefined\" ? globalThis : global2 || self, factory(global2.ShadeupCompiler = {}, global2.typescript, global2.path, global2.fs, global2[\"@typescript/vfs\"]));\n})(this, function(exports2, ts, require$$0$1, require$$1, vfs) {\n  \"use strict\";\n  var commonjsGlobal = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\n  function getDefaultExportFromCjs(x) {\n    return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n  }\n  function getAugmentedNamespace(n) {\n    if (n.__esModule)\n      return n;\n    var f = n.default;\n    if (typeof f == \"function\") {\n      var a = function a2() {\n        if (this instanceof a2) {\n          return Reflect.construct(f, arguments, this.constructor);\n        }\n        return f.apply(this, arguments);\n      };\n      a.prototype = f.prototype;\n    } else\n      a = {};\n    Object.defineProperty(a, \"__esModule\", { value: true });\n    Object.keys(n).forEach(function(k) {\n      var d = Object.getOwnPropertyDescriptor(n, k);\n      Object.defineProperty(a, k, d.get ? d : {\n        enumerable: true,\n        get: function() {\n          return n[k];\n        }\n      });\n    });\n    return a;\n  }\n  var sha256$1 = { exports: {} };\n  (function(module2) {\n    (function(root, factory2) {\n      var exports3 = {};\n      factory2(exports3);\n      var sha2562 = exports3[\"default\"];\n      for (var k in exports3) {\n        sha2562[k] = exports3[k];\n      }\n      {\n        module2.exports = sha2562;\n      }\n    })(commonjsGlobal, function(exports3) {\n      exports3.__esModule = true;\n      exports3.digestLength = 32;\n      exports3.blockSize = 64;\n      var K = new Uint32Array([\n        1116352408,\n        1899447441,\n        3049323471,\n        3921009573,\n        961987163,\n        1508970993,\n        2453635748,\n        2870763221,\n        3624381080,\n        310598401,\n        607225278,\n        1426881987,\n        1925078388,\n        2162078206,\n        2614888103,\n        3248222580,\n        3835390401,\n        4022224774,\n        264347078,\n        604807628,\n        770255983,\n        1249150122,\n        1555081692,\n        1996064986,\n        2554220882,\n        2821834349,\n        2952996808,\n        3210313671,\n        3336571891,\n        3584528711,\n        113926993,\n        338241895,\n        666307205,\n        773529912,\n        1294757372,\n        1396182291,\n        1695183700,\n        1986661051,\n        2177026350,\n        2456956037,\n        2730485921,\n        2820302411,\n        3259730800,\n        3345764771,\n        3516065817,\n        3600352804,\n        4094571909,\n        275423344,\n        430227734,\n        506948616,\n        659060556,\n        883997877,\n        958139571,\n        1322822218,\n        1537002063,\n        1747873779,\n        1955562222,\n        2024104815,\n        2227730452,\n        2361852424,\n        2428436474,\n        2756734187,\n        3204031479,\n        3329325298\n      ]);\n      function hashBlocks(w, v, p, pos, len) {\n        var a, b, c2, d, e, f, g2, h, u, i, j, t1, t2;\n        while (len >= 64) {\n          a = v[0];\n          b = v[1];\n          c2 = v[2];\n          d = v[3];\n          e = v[4];\n          f = v[5];\n          g2 = v[6];\n          h = v[7];\n          for (i = 0; i < 16; i++) {\n            j = pos + i * 4;\n            w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255;\n          }\n          for (i = 16; i < 64; i++) {\n            u = w[i - 2];\n            t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10;\n            u = w[i - 15];\n            t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3;\n            w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n          }\n          for (i = 0; i < 64; i++) {\n            t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g2) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0;\n            t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c2 ^ b & c2) | 0;\n            h = g2;\n            g2 = f;\n            f = e;\n            e = d + t1 | 0;\n            d = c2;\n            c2 = b;\n            b = a;\n            a = t1 + t2 | 0;\n          }\n          v[0] += a;\n          v[1] += b;\n          v[2] += c2;\n          v[3] += d;\n          v[4] += e;\n          v[5] += f;\n          v[6] += g2;\n          v[7] += h;\n          pos += 64;\n          len -= 64;\n        }\n        return pos;\n      }\n      var Hash = (\n        /** @class */\n        function() {\n          function Hash2() {\n            this.digestLength = exports3.digestLength;\n            this.blockSize = exports3.blockSize;\n            this.state = new Int32Array(8);\n            this.temp = new Int32Array(64);\n            this.buffer = new Uint8Array(128);\n            this.bufferLength = 0;\n            this.bytesHashed = 0;\n            this.finished = false;\n            this.reset();\n          }\n          Hash2.prototype.reset = function() {\n            this.state[0] = 1779033703;\n            this.state[1] = 3144134277;\n            this.state[2] = 1013904242;\n            this.state[3] = 2773480762;\n            this.state[4] = 1359893119;\n            this.state[5] = 2600822924;\n            this.state[6] = 528734635;\n            this.state[7] = 1541459225;\n            this.bufferLength = 0;\n            this.bytesHashed = 0;\n            this.finished = false;\n            return this;\n          };\n          Hash2.prototype.clean = function() {\n            for (var i = 0; i < this.buffer.length; i++) {\n              this.buffer[i] = 0;\n            }\n            for (var i = 0; i < this.temp.length; i++) {\n              this.temp[i] = 0;\n            }\n            this.reset();\n          };\n          Hash2.prototype.update = function(data, dataLength) {\n            if (dataLength === void 0) {\n              dataLength = data.length;\n            }\n            if (this.finished) {\n              throw new Error(\"SHA256: can't update because hash was finished.\");\n            }\n            var dataPos = 0;\n            this.bytesHashed += dataLength;\n            if (this.bufferLength > 0) {\n              while (this.bufferLength < 64 && dataLength > 0) {\n                this.buffer[this.bufferLength++] = data[dataPos++];\n                dataLength--;\n              }\n              if (this.bufferLength === 64) {\n                hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n                this.bufferLength = 0;\n              }\n            }\n            if (dataLength >= 64) {\n              dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n              dataLength %= 64;\n            }\n            while (dataLength > 0) {\n              this.buffer[this.bufferLength++] = data[dataPos++];\n              dataLength--;\n            }\n            return this;\n          };\n          Hash2.prototype.finish = function(out) {\n            if (!this.finished) {\n              var bytesHashed = this.bytesHashed;\n              var left = this.bufferLength;\n              var bitLenHi = bytesHashed / 536870912 | 0;\n              var bitLenLo = bytesHashed << 3;\n              var padLength = bytesHashed % 64 < 56 ? 64 : 128;\n              this.buffer[left] = 128;\n              for (var i = left + 1; i < padLength - 8; i++) {\n                this.buffer[i] = 0;\n              }\n              this.buffer[padLength - 8] = bitLenHi >>> 24 & 255;\n              this.buffer[padLength - 7] = bitLenHi >>> 16 & 255;\n              this.buffer[padLength - 6] = bitLenHi >>> 8 & 255;\n              this.buffer[padLength - 5] = bitLenHi >>> 0 & 255;\n              this.buffer[padLength - 4] = bitLenLo >>> 24 & 255;\n              this.buffer[padLength - 3] = bitLenLo >>> 16 & 255;\n              this.buffer[padLength - 2] = bitLenLo >>> 8 & 255;\n              this.buffer[padLength - 1] = bitLenLo >>> 0 & 255;\n              hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n              this.finished = true;\n            }\n            for (var i = 0; i < 8; i++) {\n              out[i * 4 + 0] = this.state[i] >>> 24 & 255;\n              out[i * 4 + 1] = this.state[i] >>> 16 & 255;\n              out[i * 4 + 2] = this.state[i] >>> 8 & 255;\n              out[i * 4 + 3] = this.state[i] >>> 0 & 255;\n            }\n            return this;\n          };\n          Hash2.prototype.digest = function() {\n            var out = new Uint8Array(this.digestLength);\n            this.finish(out);\n            return out;\n          };\n          Hash2.prototype._saveState = function(out) {\n            for (var i = 0; i < this.state.length; i++) {\n              out[i] = this.state[i];\n            }\n          };\n          Hash2.prototype._restoreState = function(from, bytesHashed) {\n            for (var i = 0; i < this.state.length; i++) {\n              this.state[i] = from[i];\n            }\n            this.bytesHashed = bytesHashed;\n            this.finished = false;\n            this.bufferLength = 0;\n          };\n          return Hash2;\n        }()\n      );\n      exports3.Hash = Hash;\n      var HMAC = (\n        /** @class */\n        function() {\n          function HMAC2(key) {\n            this.inner = new Hash();\n            this.outer = new Hash();\n            this.blockSize = this.inner.blockSize;\n            this.digestLength = this.inner.digestLength;\n            var pad = new Uint8Array(this.blockSize);\n            if (key.length > this.blockSize) {\n              new Hash().update(key).finish(pad).clean();\n            } else {\n              for (var i = 0; i < key.length; i++) {\n                pad[i] = key[i];\n              }\n            }\n            for (var i = 0; i < pad.length; i++) {\n              pad[i] ^= 54;\n            }\n            this.inner.update(pad);\n            for (var i = 0; i < pad.length; i++) {\n              pad[i] ^= 54 ^ 92;\n            }\n            this.outer.update(pad);\n            this.istate = new Uint32Array(8);\n            this.ostate = new Uint32Array(8);\n            this.inner._saveState(this.istate);\n            this.outer._saveState(this.ostate);\n            for (var i = 0; i < pad.length; i++) {\n              pad[i] = 0;\n            }\n          }\n          HMAC2.prototype.reset = function() {\n            this.inner._restoreState(this.istate, this.inner.blockSize);\n            this.outer._restoreState(this.ostate, this.outer.blockSize);\n            return this;\n          };\n          HMAC2.prototype.clean = function() {\n            for (var i = 0; i < this.istate.length; i++) {\n              this.ostate[i] = this.istate[i] = 0;\n            }\n            this.inner.clean();\n            this.outer.clean();\n          };\n          HMAC2.prototype.update = function(data) {\n            this.inner.update(data);\n            return this;\n          };\n          HMAC2.prototype.finish = function(out) {\n            if (this.outer.finished) {\n              this.outer.finish(out);\n            } else {\n              this.inner.finish(out);\n              this.outer.update(out, this.digestLength).finish(out);\n            }\n            return this;\n          };\n          HMAC2.prototype.digest = function() {\n            var out = new Uint8Array(this.digestLength);\n            this.finish(out);\n            return out;\n          };\n          return HMAC2;\n        }()\n      );\n      exports3.HMAC = HMAC;\n      function hash(data) {\n        var h = new Hash().update(data);\n        var digest = h.digest();\n        h.clean();\n        return digest;\n      }\n      exports3.hash = hash;\n      exports3[\"default\"] = hash;\n      function hmac(key, data) {\n        var h = new HMAC(key).update(data);\n        var digest = h.digest();\n        h.clean();\n        return digest;\n      }\n      exports3.hmac = hmac;\n      function fillBuffer(buffer2, hmac2, info, counter) {\n        var num = counter[0];\n        if (num === 0) {\n          throw new Error(\"hkdf: cannot expand more\");\n        }\n        hmac2.reset();\n        if (num > 1) {\n          hmac2.update(buffer2);\n        }\n        if (info) {\n          hmac2.update(info);\n        }\n        hmac2.update(counter);\n        hmac2.finish(buffer2);\n        counter[0]++;\n      }\n      var hkdfSalt = new Uint8Array(exports3.digestLength);\n      function hkdf(key, salt, info, length) {\n        if (salt === void 0) {\n          salt = hkdfSalt;\n        }\n        if (length === void 0) {\n          length = 32;\n        }\n        var counter = new Uint8Array([1]);\n        var okm = hmac(salt, key);\n        var hmac_ = new HMAC(okm);\n        var buffer2 = new Uint8Array(hmac_.digestLength);\n        var bufpos = buffer2.length;\n        var out = new Uint8Array(length);\n        for (var i = 0; i < length; i++) {\n          if (bufpos === buffer2.length) {\n            fillBuffer(buffer2, hmac_, info, counter);\n            bufpos = 0;\n          }\n          out[i] = buffer2[bufpos++];\n        }\n        hmac_.clean();\n        buffer2.fill(0);\n        counter.fill(0);\n        return out;\n      }\n      exports3.hkdf = hkdf;\n      function pbkdf2(password, salt, iterations, dkLen) {\n        var prf = new HMAC(password);\n        var len = prf.digestLength;\n        var ctr = new Uint8Array(4);\n        var t = new Uint8Array(len);\n        var u = new Uint8Array(len);\n        var dk = new Uint8Array(dkLen);\n        for (var i = 0; i * len < dkLen; i++) {\n          var c2 = i + 1;\n          ctr[0] = c2 >>> 24 & 255;\n          ctr[1] = c2 >>> 16 & 255;\n          ctr[2] = c2 >>> 8 & 255;\n          ctr[3] = c2 >>> 0 & 255;\n          prf.reset();\n          prf.update(salt);\n          prf.update(ctr);\n          prf.finish(u);\n          for (var j = 0; j < len; j++) {\n            t[j] = u[j];\n          }\n          for (var j = 2; j <= iterations; j++) {\n            prf.reset();\n            prf.update(u).finish(u);\n            for (var k = 0; k < len; k++) {\n              t[k] ^= u[k];\n            }\n          }\n          for (var j = 0; j < len && i * len + j < dkLen; j++) {\n            dk[i * len + j] = t[j];\n          }\n        }\n        for (var i = 0; i < len; i++) {\n          t[i] = u[i] = 0;\n        }\n        for (var i = 0; i < 4; i++) {\n          ctr[i] = 0;\n        }\n        prf.clean();\n        return dk;\n      }\n      exports3.pbkdf2 = pbkdf2;\n    });\n  })(sha256$1);\n  var sha256Exports = sha256$1.exports;\n  const sha256 = /* @__PURE__ */ getDefaultExportFromCjs(sha256Exports);\n  function cleanName(name) {\n    return name.replaceAll(\"file:///\", \"\").replaceAll(\".\", \"_dot_\").replaceAll(\"/\", \"_slash_\").replaceAll(\"-\", \"_dash_\");\n  }\n  function closest(node2, cb) {\n    while (node2) {\n      if (cb(node2))\n        return node2;\n      node2 = node2.parent;\n    }\n    return null;\n  }\n  function findShadeupTags(declar) {\n    let matcher = /=tag\\((.+)\\)$/g;\n    let doc = ts.getJSDocTags(declar);\n    for (let d of doc) {\n      if (d.tagName.text !== \"shadeup\")\n        continue;\n      if (typeof d.comment === \"string\") {\n        let matches = matcher.exec(d.comment);\n        if (matches) {\n          return matches[1].split(\",\").map((s) => s.trim());\n        }\n      }\n    }\n    return [];\n  }\n  function getFunctionDeclarationFromCallExpression(checker, node2) {\n    if (ts.isCallExpression(node2)) {\n      let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n      if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n        exprSmybol = checker.getAliasedSymbol(exprSmybol);\n      }\n      if (exprSmybol) {\n        let funcDeclar = exprSmybol.getDeclarations()?.[0];\n        if (funcDeclar && ts.isFunctionDeclaration(funcDeclar)) {\n          return funcDeclar;\n        }\n      }\n    }\n  }\n  function toposort(edges) {\n    return toposortinternal(uniqueNodes(edges), edges);\n  }\n  function toposortinternal(nodes, edges) {\n    var cursor = nodes.length, sorted = new Array(cursor), visited = {}, i = cursor, outgoingEdges = makeOutgoingEdges(edges), nodesHash = makeNodesHash(nodes);\n    edges.forEach(function(edge) {\n      if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n        throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\");\n      }\n    });\n    while (i--) {\n      if (!visited[i])\n        visit(nodes[i], i, /* @__PURE__ */ new Set());\n    }\n    return sorted;\n    function visit(node2, i2, predecessors) {\n      if (predecessors.has(node2)) {\n        var nodeRep;\n        try {\n          nodeRep = \", node was:\" + JSON.stringify(node2);\n        } catch (e) {\n          nodeRep = \"\";\n        }\n        throw new Error(\"Cyclic dependency\" + nodeRep);\n      }\n      if (!nodesHash.has(node2)) {\n        throw new Error(\n          \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node2)\n        );\n      }\n      if (visited[i2])\n        return;\n      visited[i2] = true;\n      var outgoing = outgoingEdges.get(node2) || /* @__PURE__ */ new Set();\n      outgoing = Array.from(outgoing);\n      if (i2 = outgoing.length) {\n        predecessors.add(node2);\n        do {\n          var child = outgoing[--i2];\n          visit(child, nodesHash.get(child), predecessors);\n        } while (i2);\n        predecessors.delete(node2);\n      }\n      sorted[--cursor] = node2;\n    }\n  }\n  function uniqueNodes(arr) {\n    var res = /* @__PURE__ */ new Set();\n    for (var i = 0, len = arr.length; i < len; i++) {\n      var edge = arr[i];\n      res.add(edge[0]);\n      res.add(edge[1]);\n    }\n    return Array.from(res);\n  }\n  function makeOutgoingEdges(arr) {\n    var edges = /* @__PURE__ */ new Map();\n    for (var i = 0, len = arr.length; i < len; i++) {\n      var edge = arr[i];\n      if (!edges.has(edge[0]))\n        edges.set(edge[0], /* @__PURE__ */ new Set());\n      if (!edges.has(edge[1]))\n        edges.set(edge[1], /* @__PURE__ */ new Set());\n      edges.get(edge[0]).add(edge[1]);\n    }\n    return edges;\n  }\n  function makeNodesHash(arr) {\n    var res = /* @__PURE__ */ new Map();\n    for (var i = 0, len = arr.length; i < len; i++) {\n      res.set(arr[i], i);\n    }\n    return res;\n  }\n  const wgslHeader = \"fn shadeup_up_swizzle_x_u32(n: u32) -> u32{\\r\\n\treturn n;\\r\\n}\\r\\nfn shadeup_up_swizzle_xx_u32(n: u32) -> vec2<u32>{\\r\\n\treturn vec2<u32>(n, n);\\r\\n}\\r\\nfn shadeup_up_swizzle_xxx_u32(n: u32) -> vec3<u32>{\\r\\n\treturn vec3<u32>(n, n, n);\\r\\n}\\r\\nfn shadeup_up_swizzle_xxxx_u32(n: u32) -> vec4<u32>{\\r\\n\treturn vec4<u32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xy_u32(n: u32) -> vec2<u32>{\\r\\n\treturn vec2<u32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyz_u32(n: u32) -> vec3<u32>{\\r\\n\treturn vec3<u32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyzw_u32(n: u32) -> vec4<u32>{\\r\\n\treturn vec4<u32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_x_i32(n: i32) -> i32{\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xx_i32(n: i32) -> vec2<i32>{\\r\\n\treturn vec2<i32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxx_i32(n: i32) -> vec3<i32>{\\r\\n\treturn vec3<i32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxxx_i32(n: i32) -> vec4<i32>{\\r\\n\treturn vec4<i32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xy_i32(n: i32) -> vec2<i32>{\\r\\n\treturn vec2<i32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyz_i32(n: i32) -> vec3<i32>{\\r\\n\treturn vec3<i32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyzw_i32(n: i32) -> vec4<i32>{\\r\\n\treturn vec4<i32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_x_f32(n: f32) -> f32{\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xx_f32(n: f32) -> vec2<f32>{\\r\\n\treturn vec2<f32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxx_f32(n: f32) -> vec3<f32>{\\r\\n\treturn vec3<f32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xxxx_f32(n: f32) -> vec4<f32>{\\r\\n\treturn vec4<f32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xy_f32(n: f32) -> vec2<f32>{\\r\\n\treturn vec2<f32>(n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyz_f32(n: f32) -> vec3<f32>{\\r\\n\treturn vec3<f32>(n, n, n);\\r\\n}\\r\\n\\r\\nfn shadeup_up_swizzle_xyzw_f32(n: f32) -> vec4<f32>{\\r\\n\treturn vec4<f32>(n, n, n, n);\\r\\n}\\r\\n\\r\\nfn squash_bool_vec2(n: vec2<bool>) -> bool {\\r\\n\treturn n.x && n.y;\\r\\n}\\r\\n\\r\\nfn squash_bool_vec3(n: vec3<bool>) -> bool {\\r\\n\treturn n.x && n.y && n.z;\\r\\n}\\r\\n\\r\\nfn squash_bool_vec4(n: vec4<bool>) -> bool {\\r\\n\treturn n.x && n.y && n.z && n.w;\\r\\n}\\r\\n\\r\\nfn matrix_inversefloat4x4(m: mat4x4<f32>) -> mat4x4<f32>{\\r\\n\tlet n11 = m[0][0];\\r\\n\tlet n12 = m[1][0];\\r\\n\tlet n13 = m[2][0];\\r\\n\tlet n14 = m[3][0];\\r\\n\tlet n21 = m[0][1];\\r\\n\tlet n22 = m[1][1];\\r\\n\tlet n23 = m[2][1];\\r\\n\tlet n24 = m[3][1];\\r\\n\tlet n31 = m[0][2];\\r\\n\tlet n32 = m[1][2];\\r\\n\tlet n33 = m[2][2];\\r\\n\tlet n34 = m[3][2];\\r\\n\tlet n41 = m[0][3];\\r\\n\tlet n42 = m[1][3];\\r\\n\tlet n43 = m[2][3];\\r\\n\tlet n44 = m[3][3];\\r\\n\\r\\n\tlet t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\\r\\n\tlet t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\\r\\n\tlet t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\\r\\n\tlet t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\\r\\n\\r\\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\\r\\n\tlet idet = 1.0 / det;\\r\\n\\r\\n\tvar ret: mat4x4<f32> = mat4x4<f32>();\\r\\n\\r\\n\tret[0][0] = t11 * idet;\\r\\n\tret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet;\\r\\n\tret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet;\\r\\n\tret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet;\\r\\n\\r\\n\tret[1][0] = t12 * idet;\\r\\n\tret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet;\\r\\n\tret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet;\\r\\n\tret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet;\\r\\n\\r\\n\tret[2][0] = t13 * idet;\\r\\n\tret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet;\\r\\n\tret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet;\\r\\n\tret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet;\\r\\n\\r\\n\tret[3][0] = t14 * idet;\\r\\n\tret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet;\\r\\n\tret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet;\\r\\n\tret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet;\\r\\n\\r\\n\treturn ret;\\r\\n}\\r\\n\\r\\nfn matrix_inversefloat3x3(m: mat3x3<f32>) -> mat3x3<f32>{\\r\\n\tlet n11 = m[0][0];\\r\\n\tlet n12 = m[1][0];\\r\\n\tlet n13 = m[2][0];\\r\\n\tlet n21 = m[0][1];\\r\\n\tlet n22 = m[1][1];\\r\\n\tlet n23 = m[2][1];\\r\\n\tlet n31 = m[0][2];\\r\\n\tlet n32 = m[1][2];\\r\\n\tlet n33 = m[2][2];\\r\\n\\r\\n\tlet t11 = n22 * n33 - n23 * n32;\\r\\n\tlet t12 = n13 * n32 - n12 * n33;\\r\\n\tlet t13 = n12 * n23 - n13 * n22;\\r\\n\\r\\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13;\\r\\n\tlet idet = 1.0 / det;\\r\\n\\r\\n\tvar ret: mat3x3<f32> = mat3x3<f32>();\\r\\n\\r\\n\tret[0][0] = t11 * idet;\\r\\n\tret[0][1] = (n23 * n31 - n21 * n33) * idet;\\r\\n\tret[0][2] = (n21 * n32 - n22 * n31) * idet;\\r\\n\\r\\n\tret[1][0] = t12 * idet;\\r\\n\tret[1][1] = (n11 * n33 - n13 * n31) * idet;\\r\\n\tret[1][2] = (n12 * n31 - n11 * n32) * idet;\\r\\n\\r\\n\tret[2][0] = t13 * idet;\\r\\n\tret[2][1] = (n13 * n21 - n11 * n23) * idet;\\r\\n\tret[2][2] = (n11 * n22 - n12 * n21) * idet;\\r\\n\\r\\n\treturn ret;\\r\\n}\\r\\n\\r\\nfn matrix_inversefloat2x2(m: mat2x2<f32>) -> mat2x2<f32> {\\r\\n\tlet n11 = m[0][0];\\r\\n\tlet n12 = m[1][0];\\r\\n\tlet n21 = m[0][1];\\r\\n\tlet n22 = m[1][1];\\r\\n\\r\\n\tlet det = n11 * n22 - n12 * n21;\\r\\n\tlet idet = 1.0 / det;\\r\\n\\r\\n\tvar ret: mat2x2<f32> = mat2x2<f32>();\\r\\n\\r\\n\tret[0][0] = n22 * idet;\\r\\n\tret[0][1] = -n12 * idet;\\r\\n\tret[1][0] = -n21 * idet;\\r\\n\tret[1][1] = n11 * idet;\\r\\n\\r\\n\treturn ret;\\r\\n}\\r\\n\\r\\nfn matrix_transposefloat2x2(m: mat2x2<f32>) -> mat2x2<f32> {\\r\\n\treturn mat2x2<f32>(m[0][0], m[1][0], m[0][1], m[1][1]);\\r\\n}\\r\\n\\r\\nfn matrix_transposefloat3x3(m: mat3x3<f32>) -> mat3x3<f32> {\\r\\n\treturn mat3x3<f32>\\r\\n\t(\\r\\n\t\tm[0][0], m[1][0], m[2][0],\\r\\n\t\tm[0][1], m[1][1], m[2][1],\\r\\n\t\tm[0][2], m[1][2], m[2][2]\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn matrix_transposefloat4x4(m: mat4x4<f32>) -> mat4x4<f32> {\\r\\n\treturn mat4x4<f32>\\r\\n\t(\\r\\n\t\tm[0][0], m[1][0], m[2][0], m[3][0],\\r\\n\t\tm[0][1], m[1][1], m[2][1], m[3][1],\\r\\n\t\tm[0][2], m[1][2], m[2][2], m[3][2],\\r\\n\t\tm[0][3], m[1][3], m[2][3], m[3][3]\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn bilerp_float(a: f32, b: f32, c: f32, d: f32, x: f32, y: f32) -> f32 {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float2(a: vec2<f32>, b: vec2<f32>, c: vec2<f32>, d: vec2<f32>, x: f32, y: f32) -> vec2<f32> {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float3(a: vec3<f32>, b: vec3<f32>, c: vec3<f32>, d: vec3<f32>, x: f32, y: f32) -> vec3<f32> {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float4(a: vec4<f32>, b: vec4<f32>, c: vec4<f32>, d: vec4<f32>, x: f32, y: f32) -> vec4<f32> {\\r\\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\\r\\n}\\r\\n\\r\\nfn bilerp_float2x2(a: mat2x2<f32>, b: mat2x2<f32>, c: mat2x2<f32>, d: mat2x2<f32>, x: f32, y: f32) -> mat2x2<f32> {\\r\\n\treturn mat2x2<f32>\\r\\n\t(\\r\\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\\r\\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\\r\\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\\r\\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn bilerp_float3x3(a: mat3x3<f32>, b: mat3x3<f32>, c: mat3x3<f32>, d: mat3x3<f32>, x: f32, y: f32) -> mat3x3<f32> {\\r\\n\treturn mat3x3<f32>\\r\\n\t(\\r\\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\\r\\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\\r\\n\t\tbilerp_float(a[0][2], b[0][2], c[0][2], d[0][2], x, y),\\r\\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\\r\\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y),\\r\\n\t\tbilerp_float(a[1][2], b[1][2], c[1][2], d[1][2], x, y),\\r\\n\t\tbilerp_float(a[2][0], b[2][0], c[2][0], d[2][0], x, y),\\r\\n\t\tbilerp_float(a[2][1], b[2][1], c[2][1], d[2][1], x, y),\\r\\n\t\tbilerp_float(a[2][2], b[2][2], c[2][2], d[2][2], x, y)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfn bilerp_float4x4(a: mat4x4<f32>, b: mat4x4<f32>, c: mat4x4<f32>, d: mat4x4<f32>, x: f32, y: f32) -> mat4x4<f32> {\\r\\n\treturn mat4x4<f32>\\r\\n\t(\\r\\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\\r\\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\\r\\n\t\tbilerp_float(a[0][2], b[0][2], c[0][2], d[0][2], x, y),\\r\\n\t\tbilerp_float(a[0][3], b[0][3], c[0][3], d[0][3], x, y),\\r\\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\\r\\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y),\\r\\n\t\tbilerp_float(a[1][2], b[1][2], c[1][2], d[1][2], x, y),\\r\\n\t\tbilerp_float(a[1][3], b[1][3], c[1][3], d[1][3], x, y),\\r\\n\t\tbilerp_float(a[2][0], b[2][0], c[2][0], d[2][0], x, y),\\r\\n\t\tbilerp_float(a[2][1], b[2][1], c[2][1], d[2][1], x, y),\\r\\n\t\tbilerp_float(a[2][2], b[2][2], c[2][2], d[2][2], x, y),\\r\\n\t\tbilerp_float(a[2][3], b[2][3], c[2][3], d[2][3], x, y),\\r\\n\t\tbilerp_float(a[3][0], b[3][0], c[3][0], d[3][0], x, y),\\r\\n\t\tbilerp_float(a[3][1], b[3][1], c[3][1], d[3][1], x, y),\\r\\n\t\tbilerp_float(a[3][2], b[3][2], c[3][2], d[3][2], x, y),\\r\\n\t\tbilerp_float(a[3][3], b[3][3], c[3][3], d[3][3], x, y)\\r\\n\t);\\r\\n}\";\n  function validate(file, ast, checker) {\n    performance.now();\n    const errors2 = [];\n    function add(e) {\n      if (e) {\n        if (Array.isArray(e)) {\n          errors2.push(...e);\n        } else {\n          errors2.push(e);\n        }\n      }\n    }\n    function visit(ctx) {\n      ctx.node.forEachChild(\n        (node2) => visit({\n          ...ctx,\n          node: node2\n        })\n      );\n      if (ctx.node.kind == ts.SyntaxKind.PropertyAccessExpression) {\n        if (ts.isPropertyAccessExpression(ctx.node)) {\n          add(validatePropertyAccessExpression(ctx, ctx.node));\n        }\n      } else if (ctx.node.kind == ts.SyntaxKind.ConditionalExpression) {\n        if (ts.isConditionalExpression(ctx.node)) {\n          add(validateConditionalExpression(ctx, ctx.node));\n        }\n      } else if (ctx.node.kind == ts.SyntaxKind.CallExpression) {\n        if (ts.isCallExpression(ctx.node)) {\n          add(validateCallExpression(ctx, ctx.node));\n        }\n      }\n    }\n    visit({\n      file,\n      ast,\n      checker,\n      node: ast\n    });\n    return errors2;\n  }\n  function validateGraph(env2, file, ast, checker) {\n    performance.now();\n    const errors2 = [];\n    function add(e) {\n      if (e) {\n        if (Array.isArray(e)) {\n          errors2.push(...e);\n        } else {\n          errors2.push(e);\n        }\n      }\n    }\n    function visit(ctx) {\n      ctx.node.forEachChild(\n        (node2) => visit({\n          ...ctx,\n          node: node2\n        })\n      );\n      if (ts.isCallExpression(ctx.node)) {\n        let lhsType = checker?.getTypeAtLocation(ctx.node.getChildAt(0));\n        let sig = lhsType?.getCallSignatures();\n        if (sig && sig[0] && sig[0].getDeclaration()) {\n          let declaration = sig[0].getDeclaration();\n          if (ts.isIdentifier(ctx.node.expression) && ctx.node.expression.text == \"makeShader\") {\n            checker?.getTypeAtLocation(declaration);\n            if (ctx.node.arguments.length >= 2) {\n              if (ts.isArrowFunction(ctx.node.arguments[1])) {\n                add(validateShaderCalls(env2, ctx, ctx.node.arguments[1]));\n              }\n            }\n          }\n        }\n      }\n      if (ts.isExpressionStatement(ctx.node)) {\n        add(validateStatement(ctx, ctx.node));\n      }\n      if (ts.isArrayLiteralExpression(ctx.node)) {\n        add(validateArrayLiteral(ctx, ctx.node));\n      }\n    }\n    visit({\n      file,\n      ast,\n      checker,\n      node: ast\n    });\n    return errors2;\n  }\n  function isStaticPropertyAccessExpression(checker, node2) {\n    let resultType = checker.getSymbolAtLocation(node2);\n    if (!resultType)\n      return false;\n    let tos = checker.getTypeOfSymbolAtLocation(resultType, node2);\n    let isStaticMember = false;\n    if (resultType.parent) {\n      let p = resultType.parent;\n      if (p.valueDeclaration && p.name != \"__\" && !ts.isSourceFile(p.valueDeclaration) && p.flags & ts.SymbolFlags.Namespace) {\n        isStaticMember = true;\n      }\n    }\n    tos.getCallSignatures().forEach((s) => {\n      if (s.declaration) {\n        s.declaration.modifiers?.forEach((m) => {\n          if (m.kind == ts.SyntaxKind.StaticKeyword) {\n            isStaticMember = true;\n          }\n        });\n      }\n    });\n    return isStaticMember;\n  }\n  function validateStatement({ checker, file }, node2) {\n    if (ts.isLiteralExpression(node2.expression) || ts.isPropertyAccessChain(node2.expression) || ts.isPropertyAccessExpression(node2.expression) || ts.isIdentifier(node2.expression)) {\n      return {\n        file: node2.getSourceFile(),\n        code: 0,\n        messageText: `This expression has no effect`,\n        category: ts.DiagnosticCategory.Error,\n        start: node2.getStart(),\n        length: node2.getEnd() - node2.getStart()\n      };\n    }\n  }\n  function validateConditionalExpression({ checker, file }, node2) {\n    let thenType = checker.getTypeAtLocation(node2.whenTrue);\n    let elseType = checker.getTypeAtLocation(node2.whenFalse);\n    if (!isTypeCompatible(checker, thenType, elseType)) {\n      return void 0;\n    }\n    return void 0;\n  }\n  function validateCallExpression({ checker, file }, node2) {\n    if (ts.isPropertyAccessExpression(node2.expression)) {\n      let left = node2.expression.expression;\n      if (!ts.isIdentifier(left))\n        return void 0;\n      if (left.text != \"__\")\n        return void 0;\n      let right = node2.expression.name.text;\n      if (right.startsWith(\"int\") && (right[right.length - 1] == \"2\" || right[right.length - 1] == \"3\" || right[right.length - 1] == \"4\")) {\n        for (let i = 0; i < node2.arguments.length; i++) {\n          let arg = node2.arguments[i];\n          let type2 = checker.getTypeAtLocation(arg);\n          let typeName = checker.typeToString(type2);\n          if (typeName.startsWith(\"uint\")) {\n            if (node2.arguments.length != 1) {\n              return {\n                file: node2.getSourceFile(),\n                code: 0,\n                messageText: `Cannot convert from uint to int during vector construction, use int() before`,\n                category: ts.DiagnosticCategory.Error,\n                start: arg.getStart(),\n                length: arg.getEnd() - arg.getStart()\n              };\n            }\n          }\n        }\n      }\n    }\n    return void 0;\n  }\n  function validatePropertyAccessExpression({ checker, file }, node2) {\n    let midNode = node2.getChildren()[1];\n    if (file.mapping && midNode) {\n      let range2 = lookupIndexMappingRange(file.mapping, midNode.getStart(), midNode.getEnd());\n      let s = file.content.substring(range2.start, range2.end);\n      let isStaticAccess = s == \"::\";\n      let resultType = checker.getSymbolAtLocation(node2);\n      if (resultType) {\n        let tos = checker.getTypeOfSymbolAtLocation(resultType, node2);\n        let isStaticMember = false;\n        if (resultType.parent) {\n          let p = resultType.parent;\n          if (p.valueDeclaration && p.name != \"__\" && !ts.isSourceFile(p.valueDeclaration) && p.flags & ts.SymbolFlags.Namespace) {\n            isStaticMember = true;\n          }\n        }\n        tos.getCallSignatures().forEach((s2) => {\n          if (s2.declaration) {\n            s2.declaration.modifiers?.forEach((m) => {\n              if (m.kind == ts.SyntaxKind.StaticKeyword) {\n                isStaticMember = true;\n              }\n            });\n          }\n        });\n        resultType.getDeclarations()?.forEach((d) => {\n          if (ts.canHaveModifiers(d) && d.modifiers) {\n            d.modifiers.forEach((m) => {\n              if (m.kind == ts.SyntaxKind.StaticKeyword) {\n                isStaticMember = true;\n              }\n            });\n          }\n        });\n        if (isStaticMember && !isStaticAccess) {\n          return {\n            file: node2.getSourceFile(),\n            code: 0,\n            messageText: `Cannot access static member with '${s}' use '::' instead`,\n            category: ts.DiagnosticCategory.Error,\n            start: midNode.getStart(),\n            length: midNode.getEnd() - midNode.getStart()\n          };\n        } else if (!isStaticMember && isStaticAccess) {\n          return {\n            file: node2.getSourceFile(),\n            code: 0,\n            messageText: `Cannot access non-static member with '${s}' use '.' instead`,\n            category: ts.DiagnosticCategory.Error,\n            start: midNode.getStart(),\n            length: midNode.getEnd() - midNode.getStart()\n          };\n        }\n      }\n    }\n    return void 0;\n  }\n  function isTypeCompatible(checker, type2, typeOther) {\n    return checker.isTypeAssignableTo(type2, typeOther);\n  }\n  function validateArrayLiteral({ checker, file }, node2) {\n    if (node2.elements.length == 3) {\n      let name1 = checker.typeToString(checker.getTypeAtLocation(node2.elements[0]));\n      let name2 = checker.typeToString(checker.getTypeAtLocation(node2.elements[1]));\n      let name3 = checker.typeToString(checker.getTypeAtLocation(node2.elements[2]));\n      if (name1 == \"0\" && name2 == \"shader\" && name3 == \"0\") {\n        return void 0;\n      }\n    }\n    return void 0;\n  }\n  const SHADER_TYPE_BLACKLIST = [\"string\", \"null\", \"map\"];\n  function validateShaderTypeUse(env2, { checker, file }, diags, node2, typeNode) {\n    let type2 = checker.typeToString(typeNode);\n    if (SHADER_TYPE_BLACKLIST.includes(type2) || type2.startsWith(\"map<\")) {\n      diags.push({\n        file: node2.getSourceFile(),\n        code: 0,\n        messageText: `Cannot use type '${type2}' in shader`,\n        category: ts.DiagnosticCategory.Error,\n        start: node2.getStart(),\n        length: node2.getEnd() - node2.getStart()\n      });\n    }\n    if (typeNode.isUnion() && type2 != \"boolean\") {\n      diags.push({\n        file: node2.getSourceFile(),\n        code: 0,\n        messageText: `Cannot use union types in shaders ('${type2}')`,\n        category: ts.DiagnosticCategory.Error,\n        start: node2.getStart(),\n        length: node2.getEnd() - node2.getStart()\n      });\n    }\n    if (typeNode.isLiteral()) {\n      diags.push({\n        file: node2.getSourceFile(),\n        code: 0,\n        messageText: `Cannot use literal types in shaders ('${type2}')`,\n        category: ts.DiagnosticCategory.Error,\n        start: node2.getStart(),\n        length: node2.getEnd() - node2.getStart()\n      });\n    }\n  }\n  function validateShaderCalls(env2, vs, node2) {\n    let diags = [];\n    const { checker, file } = vs;\n    let visit = (node22) => {\n      if (ts.isCallExpression(node22)) {\n        let declar = getFunctionDeclarationFromCallExpression(checker, node22);\n        if (declar) {\n          let graphNodeName = getFunctionNodeName(declar);\n          let graphNode = env2.tagGraph.getNode(graphNodeName);\n          if (graphNode) {\n            if (graphNode.tags.includes(\"async\")) {\n              let rawChain = env2.tagGraph.resolveTagSourceChain(graphNodeName, \"async\");\n              let chain = rawChain.map((m) => m.split(\":\")[1]).join(\" <- \");\n              if (rawChain[rawChain.length - 1].split(\":\")[1] == \"texture2d_internal_empty\")\n                ;\n              else {\n                diags.push({\n                  file: node22.getSourceFile(),\n                  code: 0,\n                  messageText: `Cannot call cpu-only function from a shader. ${chain}`,\n                  category: ts.DiagnosticCategory.Error,\n                  start: node22.getStart(),\n                  length: node22.getEnd() - node22.getStart()\n                });\n              }\n            }\n          }\n        }\n        validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n      }\n      if (ts.isPropertyAccessExpression(node22)) {\n        validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n      }\n      if (ts.isIdentifier(node22)) {\n        validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n      }\n      if (ts.isElementAccessExpression(node22)) {\n        validateShaderTypeUse(env2, vs, diags, node22, checker.getTypeAtLocation(node22));\n      }\n      if (ts.isVariableDeclaration(node22)) {\n        let arrType = checker.getTypeAtLocation(node22);\n        let typeInfo = getArrayTypeInfo(checker, arrType);\n        if (typeInfo.isArray) {\n          if (typeInfo.staticSize <= 0) {\n            diags.push({\n              file: node22.getSourceFile(),\n              code: 0,\n              messageText: `Please explicitly specify the size of the array (let a: T[10] = ...)`,\n              category: ts.DiagnosticCategory.Error,\n              start: node22.getStart(),\n              length: node22.getEnd() - node22.getStart()\n            });\n          }\n        }\n      }\n      ts.forEachChild(node22, visit);\n    };\n    ts.forEachChild(node2, visit);\n    return diags;\n  }\n  var tsutils = {};\n  /*! *****************************************************************************\n  \tCopyright (c) Microsoft Corporation.\n  \n  \tPermission to use, copy, modify, and/or distribute this software for any\n  \tpurpose with or without fee is hereby granted.\n  \n  \tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  \tREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n  \tAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  \tINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  \tLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  \tOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  \tPERFORMANCE OF THIS SOFTWARE.\n  \t***************************************************************************** */\n  var extendStatics = function(d, b) {\n    extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n      d2.__proto__ = b2;\n    } || function(d2, b2) {\n      for (var p in b2)\n        if (b2.hasOwnProperty(p))\n          d2[p] = b2[p];\n    };\n    return extendStatics(d, b);\n  };\n  function __extends(d, b) {\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  }\n  var __assign = function() {\n    __assign = Object.assign || function __assign2(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s)\n          if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n      }\n      return t;\n    };\n    return __assign.apply(this, arguments);\n  };\n  function __rest(s, e) {\n    var t = {};\n    for (var p in s)\n      if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n        if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n          t[p[i]] = s[p[i]];\n      }\n    return t;\n  }\n  function __decorate(decorators, target, key, desc) {\n    var c2 = arguments.length, r = c2 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      r = Reflect.decorate(decorators, target, key, desc);\n    else\n      for (var i = decorators.length - 1; i >= 0; i--)\n        if (d = decorators[i])\n          r = (c2 < 3 ? d(r) : c2 > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c2 > 3 && r && Object.defineProperty(target, key, r), r;\n  }\n  function __param(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  }\n  function __metadata(metadataKey, metadataValue) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(metadataKey, metadataValue);\n  }\n  function __awaiter(thisArg, _arguments, P, generator) {\n    function adopt(value) {\n      return value instanceof P ? value : new P(function(resolve) {\n        resolve(value);\n      });\n    }\n    return new (P || (P = Promise))(function(resolve, reject) {\n      function fulfilled(value) {\n        try {\n          step(generator.next(value));\n        } catch (e) {\n          reject(e);\n        }\n      }\n      function rejected(value) {\n        try {\n          step(generator[\"throw\"](value));\n        } catch (e) {\n          reject(e);\n        }\n      }\n      function step(result) {\n        result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n      }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n  }\n  function __generator(thisArg, body) {\n    var _ = { label: 0, sent: function() {\n      if (t[0] & 1)\n        throw t[1];\n      return t[1];\n    }, trys: [], ops: [] }, f, y, t, g2;\n    return g2 = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g2[Symbol.iterator] = function() {\n      return this;\n    }), g2;\n    function verb(n) {\n      return function(v) {\n        return step([n, v]);\n      };\n    }\n    function step(op) {\n      if (f)\n        throw new TypeError(\"Generator is already executing.\");\n      while (_)\n        try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n            return t;\n          if (y = 0, t)\n            op = [op[0] & 2, t.value];\n          switch (op[0]) {\n            case 0:\n            case 1:\n              t = op;\n              break;\n            case 4:\n              _.label++;\n              return { value: op[1], done: false };\n            case 5:\n              _.label++;\n              y = op[1];\n              op = [0];\n              continue;\n            case 7:\n              op = _.ops.pop();\n              _.trys.pop();\n              continue;\n            default:\n              if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                _ = 0;\n                continue;\n              }\n              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n                _.label = op[1];\n                break;\n              }\n              if (op[0] === 6 && _.label < t[1]) {\n                _.label = t[1];\n                t = op;\n                break;\n              }\n              if (t && _.label < t[2]) {\n                _.label = t[2];\n                _.ops.push(op);\n                break;\n              }\n              if (t[2])\n                _.ops.pop();\n              _.trys.pop();\n              continue;\n          }\n          op = body.call(thisArg, _);\n        } catch (e) {\n          op = [6, e];\n          y = 0;\n        } finally {\n          f = t = 0;\n        }\n      if (op[0] & 5)\n        throw op[1];\n      return { value: op[0] ? op[1] : void 0, done: true };\n    }\n  }\n  function __createBinding(o, m, k, k2) {\n    if (k2 === void 0)\n      k2 = k;\n    o[k2] = m[k];\n  }\n  function __exportStar(m, exports3) {\n    for (var p in m)\n      if (p !== \"default\" && !exports3.hasOwnProperty(p))\n        exports3[p] = m[p];\n  }\n  function __values(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m)\n      return m.call(o);\n    if (o && typeof o.length === \"number\")\n      return {\n        next: function() {\n          if (o && i >= o.length)\n            o = void 0;\n          return { value: o && o[i++], done: !o };\n        }\n      };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n  }\n  function __read(o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m)\n      return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done)\n        ar.push(r.value);\n    } catch (error) {\n      e = { error };\n    } finally {\n      try {\n        if (r && !r.done && (m = i[\"return\"]))\n          m.call(i);\n      } finally {\n        if (e)\n          throw e.error;\n      }\n    }\n    return ar;\n  }\n  function __spread() {\n    for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n    return ar;\n  }\n  function __spreadArrays() {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n      s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n        r[k] = a[j];\n    return r;\n  }\n  function __await(v) {\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\n  }\n  function __asyncGenerator(thisArg, _arguments, generator) {\n    if (!Symbol.asyncIterator)\n      throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n    var g2 = generator.apply(thisArg, _arguments || []), i, q = [];\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n      return this;\n    }, i;\n    function verb(n) {\n      if (g2[n])\n        i[n] = function(v) {\n          return new Promise(function(a, b) {\n            q.push([n, v, a, b]) > 1 || resume(n, v);\n          });\n        };\n    }\n    function resume(n, v) {\n      try {\n        step(g2[n](v));\n      } catch (e) {\n        settle(q[0][3], e);\n      }\n    }\n    function step(r) {\n      r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n    }\n    function fulfill(value) {\n      resume(\"next\", value);\n    }\n    function reject(value) {\n      resume(\"throw\", value);\n    }\n    function settle(f, v) {\n      if (f(v), q.shift(), q.length)\n        resume(q[0][0], q[0][1]);\n    }\n  }\n  function __asyncDelegator(o) {\n    var i, p;\n    return i = {}, verb(\"next\"), verb(\"throw\", function(e) {\n      throw e;\n    }), verb(\"return\"), i[Symbol.iterator] = function() {\n      return this;\n    }, i;\n    function verb(n, f) {\n      i[n] = o[n] ? function(v) {\n        return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v;\n      } : f;\n    }\n  }\n  function __asyncValues(o) {\n    if (!Symbol.asyncIterator)\n      throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n    var m = o[Symbol.asyncIterator], i;\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n      return this;\n    }, i);\n    function verb(n) {\n      i[n] = o[n] && function(v) {\n        return new Promise(function(resolve, reject) {\n          v = o[n](v), settle(resolve, reject, v.done, v.value);\n        });\n      };\n    }\n    function settle(resolve, reject, d, v) {\n      Promise.resolve(v).then(function(v2) {\n        resolve({ value: v2, done: d });\n      }, reject);\n    }\n  }\n  function __makeTemplateObject(cooked, raw) {\n    if (Object.defineProperty) {\n      Object.defineProperty(cooked, \"raw\", { value: raw });\n    } else {\n      cooked.raw = raw;\n    }\n    return cooked;\n  }\n  function __importStar(mod) {\n    if (mod && mod.__esModule)\n      return mod;\n    var result = {};\n    if (mod != null) {\n      for (var k in mod)\n        if (Object.hasOwnProperty.call(mod, k))\n          result[k] = mod[k];\n    }\n    result.default = mod;\n    return result;\n  }\n  function __importDefault(mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  }\n  function __classPrivateFieldGet(receiver, privateMap) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError(\"attempted to get private field on non-instance\");\n    }\n    return privateMap.get(receiver);\n  }\n  function __classPrivateFieldSet(receiver, privateMap, value) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError(\"attempted to set private field on non-instance\");\n    }\n    privateMap.set(receiver, value);\n    return value;\n  }\n  const tslib_es6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n    __proto__: null,\n    get __assign() {\n      return __assign;\n    },\n    __asyncDelegator,\n    __asyncGenerator,\n    __asyncValues,\n    __await,\n    __awaiter,\n    __classPrivateFieldGet,\n    __classPrivateFieldSet,\n    __createBinding,\n    __decorate,\n    __exportStar,\n    __extends,\n    __generator,\n    __importDefault,\n    __importStar,\n    __makeTemplateObject,\n    __metadata,\n    __param,\n    __read,\n    __rest,\n    __spread,\n    __spreadArrays,\n    __values\n  }, Symbol.toStringTag, { value: \"Module\" }));\n  const require$$0 = /* @__PURE__ */ getAugmentedNamespace(tslib_es6);\n  var typeguard = {};\n  var node$4 = {};\n  var node$3 = {};\n  var node$2 = {};\n  var node$1 = {};\n  var node = {};\n  var hasRequiredNode$4;\n  function requireNode$4() {\n    if (hasRequiredNode$4)\n      return node;\n    hasRequiredNode$4 = 1;\n    Object.defineProperty(node, \"__esModule\", { value: true });\n    node.isExpressionStatement = node.isExpression = node.isExportSpecifier = node.isExportDeclaration = node.isExportAssignment = node.isEnumMember = node.isEnumDeclaration = node.isEntityNameExpression = node.isEntityName = node.isEmptyStatement = node.isElementAccessExpression = node.isDoStatement = node.isDeleteExpression = node.isDefaultClause = node.isDecorator = node.isDebuggerStatement = node.isComputedPropertyName = node.isContinueStatement = node.isConstructSignatureDeclaration = node.isConstructorTypeNode = node.isConstructorDeclaration = node.isConditionalTypeNode = node.isConditionalExpression = node.isCommaListExpression = node.isClassLikeDeclaration = node.isClassExpression = node.isClassDeclaration = node.isCatchClause = node.isCaseOrDefaultClause = node.isCaseClause = node.isCaseBlock = node.isCallSignatureDeclaration = node.isCallLikeExpression = node.isCallExpression = node.isBreakStatement = node.isBreakOrContinueStatement = node.isBooleanLiteral = node.isBlockLike = node.isBlock = node.isBindingPattern = node.isBindingElement = node.isBinaryExpression = node.isAwaitExpression = node.isAssertionExpression = node.isAsExpression = node.isArrowFunction = node.isArrayTypeNode = node.isArrayLiteralExpression = node.isArrayBindingPattern = node.isAccessorDeclaration = void 0;\n    node.isNamespaceImport = node.isNamespaceDeclaration = node.isNamedImports = node.isNamedExports = node.isModuleDeclaration = node.isModuleBlock = node.isMethodSignature = node.isMethodDeclaration = node.isMetaProperty = node.isMappedTypeNode = node.isLiteralTypeNode = node.isLiteralExpression = node.isLabeledStatement = node.isJsxText = node.isJsxSpreadAttribute = node.isJsxSelfClosingElement = node.isJsxOpeningLikeElement = node.isJsxOpeningFragment = node.isJsxOpeningElement = node.isJsxFragment = node.isJsxExpression = node.isJsxElement = node.isJsxClosingFragment = node.isJsxClosingElement = node.isJsxAttributes = node.isJsxAttributeLike = node.isJsxAttribute = node.isJsDoc = node.isIterationStatement = node.isIntersectionTypeNode = node.isInterfaceDeclaration = node.isInferTypeNode = node.isIndexSignatureDeclaration = node.isIndexedAccessTypeNode = node.isImportSpecifier = node.isImportEqualsDeclaration = node.isImportDeclaration = node.isImportClause = node.isIfStatement = node.isIdentifier = node.isGetAccessorDeclaration = node.isFunctionTypeNode = node.isFunctionExpression = node.isFunctionDeclaration = node.isForStatement = node.isForOfStatement = node.isForInOrOfStatement = node.isForInStatement = node.isExternalModuleReference = node.isExpressionWithTypeArguments = void 0;\n    node.isVariableStatement = node.isVariableDeclaration = node.isUnionTypeNode = node.isTypeQueryNode = node.isTypeReferenceNode = node.isTypePredicateNode = node.isTypeParameterDeclaration = node.isTypeOperatorNode = node.isTypeOfExpression = node.isTypeLiteralNode = node.isTypeAssertion = node.isTypeAliasDeclaration = node.isTupleTypeNode = node.isTryStatement = node.isThrowStatement = node.isTextualLiteral = node.isTemplateLiteral = node.isTemplateExpression = node.isTaggedTemplateExpression = node.isSyntaxList = node.isSwitchStatement = node.isStringLiteral = node.isSpreadElement = node.isSpreadAssignment = node.isSourceFile = node.isSignatureDeclaration = node.isShorthandPropertyAssignment = node.isSetAccessorDeclaration = node.isReturnStatement = node.isRegularExpressionLiteral = node.isQualifiedName = node.isPropertySignature = node.isPropertyDeclaration = node.isPropertyAssignment = node.isPropertyAccessExpression = node.isPrefixUnaryExpression = node.isPostfixUnaryExpression = node.isParenthesizedTypeNode = node.isParenthesizedExpression = node.isParameterDeclaration = node.isOmittedExpression = node.isObjectLiteralExpression = node.isObjectBindingPattern = node.isNumericOrStringLikeLiteral = node.isNumericLiteral = node.isNullLiteral = node.isNoSubstitutionTemplateLiteral = node.isNonNullExpression = node.isNewExpression = node.isNamespaceExportDeclaration = void 0;\n    node.isWithStatement = node.isWhileStatement = node.isVoidExpression = node.isVariableDeclarationList = void 0;\n    const ts$1 = ts;\n    function isAccessorDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.GetAccessor || node2.kind === ts$1.SyntaxKind.SetAccessor;\n    }\n    node.isAccessorDeclaration = isAccessorDeclaration;\n    function isArrayBindingPattern(node2) {\n      return node2.kind === ts$1.SyntaxKind.ArrayBindingPattern;\n    }\n    node.isArrayBindingPattern = isArrayBindingPattern;\n    function isArrayLiteralExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.ArrayLiteralExpression;\n    }\n    node.isArrayLiteralExpression = isArrayLiteralExpression;\n    function isArrayTypeNode2(node2) {\n      return node2.kind === ts$1.SyntaxKind.ArrayType;\n    }\n    node.isArrayTypeNode = isArrayTypeNode2;\n    function isArrowFunction(node2) {\n      return node2.kind === ts$1.SyntaxKind.ArrowFunction;\n    }\n    node.isArrowFunction = isArrowFunction;\n    function isAsExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.AsExpression;\n    }\n    node.isAsExpression = isAsExpression;\n    function isAssertionExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.AsExpression || node2.kind === ts$1.SyntaxKind.TypeAssertionExpression;\n    }\n    node.isAssertionExpression = isAssertionExpression;\n    function isAwaitExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.AwaitExpression;\n    }\n    node.isAwaitExpression = isAwaitExpression;\n    function isBinaryExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.BinaryExpression;\n    }\n    node.isBinaryExpression = isBinaryExpression;\n    function isBindingElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.BindingElement;\n    }\n    node.isBindingElement = isBindingElement;\n    function isBindingPattern(node2) {\n      return node2.kind === ts$1.SyntaxKind.ArrayBindingPattern || node2.kind === ts$1.SyntaxKind.ObjectBindingPattern;\n    }\n    node.isBindingPattern = isBindingPattern;\n    function isBlock(node2) {\n      return node2.kind === ts$1.SyntaxKind.Block;\n    }\n    node.isBlock = isBlock;\n    function isBlockLike(node2) {\n      return node2.statements !== void 0;\n    }\n    node.isBlockLike = isBlockLike;\n    function isBooleanLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.TrueKeyword || node2.kind === ts$1.SyntaxKind.FalseKeyword;\n    }\n    node.isBooleanLiteral = isBooleanLiteral;\n    function isBreakOrContinueStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.BreakStatement || node2.kind === ts$1.SyntaxKind.ContinueStatement;\n    }\n    node.isBreakOrContinueStatement = isBreakOrContinueStatement;\n    function isBreakStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.BreakStatement;\n    }\n    node.isBreakStatement = isBreakStatement;\n    function isCallExpression2(node2) {\n      return node2.kind === ts$1.SyntaxKind.CallExpression;\n    }\n    node.isCallExpression = isCallExpression2;\n    function isCallLikeExpression(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.CallExpression:\n        case ts$1.SyntaxKind.Decorator:\n        case ts$1.SyntaxKind.JsxOpeningElement:\n        case ts$1.SyntaxKind.JsxSelfClosingElement:\n        case ts$1.SyntaxKind.NewExpression:\n        case ts$1.SyntaxKind.TaggedTemplateExpression:\n          return true;\n        default:\n          return false;\n      }\n    }\n    node.isCallLikeExpression = isCallLikeExpression;\n    function isCallSignatureDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.CallSignature;\n    }\n    node.isCallSignatureDeclaration = isCallSignatureDeclaration;\n    function isCaseBlock(node2) {\n      return node2.kind === ts$1.SyntaxKind.CaseBlock;\n    }\n    node.isCaseBlock = isCaseBlock;\n    function isCaseClause(node2) {\n      return node2.kind === ts$1.SyntaxKind.CaseClause;\n    }\n    node.isCaseClause = isCaseClause;\n    function isCaseOrDefaultClause(node2) {\n      return node2.kind === ts$1.SyntaxKind.CaseClause || node2.kind === ts$1.SyntaxKind.DefaultClause;\n    }\n    node.isCaseOrDefaultClause = isCaseOrDefaultClause;\n    function isCatchClause(node2) {\n      return node2.kind === ts$1.SyntaxKind.CatchClause;\n    }\n    node.isCatchClause = isCatchClause;\n    function isClassDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ClassDeclaration;\n    }\n    node.isClassDeclaration = isClassDeclaration;\n    function isClassExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.ClassExpression;\n    }\n    node.isClassExpression = isClassExpression;\n    function isClassLikeDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ClassDeclaration || node2.kind === ts$1.SyntaxKind.ClassExpression;\n    }\n    node.isClassLikeDeclaration = isClassLikeDeclaration;\n    function isCommaListExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.CommaListExpression;\n    }\n    node.isCommaListExpression = isCommaListExpression;\n    function isConditionalExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.ConditionalExpression;\n    }\n    node.isConditionalExpression = isConditionalExpression;\n    function isConditionalTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.ConditionalType;\n    }\n    node.isConditionalTypeNode = isConditionalTypeNode;\n    function isConstructorDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.Constructor;\n    }\n    node.isConstructorDeclaration = isConstructorDeclaration;\n    function isConstructorTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.ConstructorType;\n    }\n    node.isConstructorTypeNode = isConstructorTypeNode;\n    function isConstructSignatureDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ConstructSignature;\n    }\n    node.isConstructSignatureDeclaration = isConstructSignatureDeclaration;\n    function isContinueStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ContinueStatement;\n    }\n    node.isContinueStatement = isContinueStatement;\n    function isComputedPropertyName(node2) {\n      return node2.kind === ts$1.SyntaxKind.ComputedPropertyName;\n    }\n    node.isComputedPropertyName = isComputedPropertyName;\n    function isDebuggerStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.DebuggerStatement;\n    }\n    node.isDebuggerStatement = isDebuggerStatement;\n    function isDecorator(node2) {\n      return node2.kind === ts$1.SyntaxKind.Decorator;\n    }\n    node.isDecorator = isDecorator;\n    function isDefaultClause(node2) {\n      return node2.kind === ts$1.SyntaxKind.DefaultClause;\n    }\n    node.isDefaultClause = isDefaultClause;\n    function isDeleteExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.DeleteExpression;\n    }\n    node.isDeleteExpression = isDeleteExpression;\n    function isDoStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.DoStatement;\n    }\n    node.isDoStatement = isDoStatement;\n    function isElementAccessExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.ElementAccessExpression;\n    }\n    node.isElementAccessExpression = isElementAccessExpression;\n    function isEmptyStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.EmptyStatement;\n    }\n    node.isEmptyStatement = isEmptyStatement;\n    function isEntityName(node2) {\n      return node2.kind === ts$1.SyntaxKind.Identifier || isQualifiedName(node2);\n    }\n    node.isEntityName = isEntityName;\n    function isEntityNameExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.Identifier || isPropertyAccessExpression2(node2) && isEntityNameExpression(node2.expression);\n    }\n    node.isEntityNameExpression = isEntityNameExpression;\n    function isEnumDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.EnumDeclaration;\n    }\n    node.isEnumDeclaration = isEnumDeclaration;\n    function isEnumMember(node2) {\n      return node2.kind === ts$1.SyntaxKind.EnumMember;\n    }\n    node.isEnumMember = isEnumMember;\n    function isExportAssignment(node2) {\n      return node2.kind === ts$1.SyntaxKind.ExportAssignment;\n    }\n    node.isExportAssignment = isExportAssignment;\n    function isExportDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ExportDeclaration;\n    }\n    node.isExportDeclaration = isExportDeclaration;\n    function isExportSpecifier(node2) {\n      return node2.kind === ts$1.SyntaxKind.ExportSpecifier;\n    }\n    node.isExportSpecifier = isExportSpecifier;\n    function isExpression(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.ArrayLiteralExpression:\n        case ts$1.SyntaxKind.ArrowFunction:\n        case ts$1.SyntaxKind.AsExpression:\n        case ts$1.SyntaxKind.AwaitExpression:\n        case ts$1.SyntaxKind.BinaryExpression:\n        case ts$1.SyntaxKind.CallExpression:\n        case ts$1.SyntaxKind.ClassExpression:\n        case ts$1.SyntaxKind.CommaListExpression:\n        case ts$1.SyntaxKind.ConditionalExpression:\n        case ts$1.SyntaxKind.DeleteExpression:\n        case ts$1.SyntaxKind.ElementAccessExpression:\n        case ts$1.SyntaxKind.FalseKeyword:\n        case ts$1.SyntaxKind.FunctionExpression:\n        case ts$1.SyntaxKind.Identifier:\n        case ts$1.SyntaxKind.JsxElement:\n        case ts$1.SyntaxKind.JsxFragment:\n        case ts$1.SyntaxKind.JsxExpression:\n        case ts$1.SyntaxKind.JsxOpeningElement:\n        case ts$1.SyntaxKind.JsxOpeningFragment:\n        case ts$1.SyntaxKind.JsxSelfClosingElement:\n        case ts$1.SyntaxKind.MetaProperty:\n        case ts$1.SyntaxKind.NewExpression:\n        case ts$1.SyntaxKind.NonNullExpression:\n        case ts$1.SyntaxKind.NoSubstitutionTemplateLiteral:\n        case ts$1.SyntaxKind.NullKeyword:\n        case ts$1.SyntaxKind.NumericLiteral:\n        case ts$1.SyntaxKind.ObjectLiteralExpression:\n        case ts$1.SyntaxKind.OmittedExpression:\n        case ts$1.SyntaxKind.ParenthesizedExpression:\n        case ts$1.SyntaxKind.PostfixUnaryExpression:\n        case ts$1.SyntaxKind.PrefixUnaryExpression:\n        case ts$1.SyntaxKind.PropertyAccessExpression:\n        case ts$1.SyntaxKind.RegularExpressionLiteral:\n        case ts$1.SyntaxKind.SpreadElement:\n        case ts$1.SyntaxKind.StringLiteral:\n        case ts$1.SyntaxKind.SuperKeyword:\n        case ts$1.SyntaxKind.TaggedTemplateExpression:\n        case ts$1.SyntaxKind.TemplateExpression:\n        case ts$1.SyntaxKind.ThisKeyword:\n        case ts$1.SyntaxKind.TrueKeyword:\n        case ts$1.SyntaxKind.TypeAssertionExpression:\n        case ts$1.SyntaxKind.TypeOfExpression:\n        case ts$1.SyntaxKind.VoidExpression:\n        case ts$1.SyntaxKind.YieldExpression:\n          return true;\n        default:\n          return false;\n      }\n    }\n    node.isExpression = isExpression;\n    function isExpressionStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ExpressionStatement;\n    }\n    node.isExpressionStatement = isExpressionStatement;\n    function isExpressionWithTypeArguments(node2) {\n      return node2.kind === ts$1.SyntaxKind.ExpressionWithTypeArguments;\n    }\n    node.isExpressionWithTypeArguments = isExpressionWithTypeArguments;\n    function isExternalModuleReference(node2) {\n      return node2.kind === ts$1.SyntaxKind.ExternalModuleReference;\n    }\n    node.isExternalModuleReference = isExternalModuleReference;\n    function isForInStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ForInStatement;\n    }\n    node.isForInStatement = isForInStatement;\n    function isForInOrOfStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ForOfStatement || node2.kind === ts$1.SyntaxKind.ForInStatement;\n    }\n    node.isForInOrOfStatement = isForInOrOfStatement;\n    function isForOfStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ForOfStatement;\n    }\n    node.isForOfStatement = isForOfStatement;\n    function isForStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ForStatement;\n    }\n    node.isForStatement = isForStatement;\n    function isFunctionDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.FunctionDeclaration;\n    }\n    node.isFunctionDeclaration = isFunctionDeclaration;\n    function isFunctionExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.FunctionExpression;\n    }\n    node.isFunctionExpression = isFunctionExpression;\n    function isFunctionTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.FunctionType;\n    }\n    node.isFunctionTypeNode = isFunctionTypeNode;\n    function isGetAccessorDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.GetAccessor;\n    }\n    node.isGetAccessorDeclaration = isGetAccessorDeclaration;\n    function isIdentifier2(node2) {\n      return node2.kind === ts$1.SyntaxKind.Identifier;\n    }\n    node.isIdentifier = isIdentifier2;\n    function isIfStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.IfStatement;\n    }\n    node.isIfStatement = isIfStatement;\n    function isImportClause(node2) {\n      return node2.kind === ts$1.SyntaxKind.ImportClause;\n    }\n    node.isImportClause = isImportClause;\n    function isImportDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ImportDeclaration;\n    }\n    node.isImportDeclaration = isImportDeclaration;\n    function isImportEqualsDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ImportEqualsDeclaration;\n    }\n    node.isImportEqualsDeclaration = isImportEqualsDeclaration;\n    function isImportSpecifier(node2) {\n      return node2.kind === ts$1.SyntaxKind.ImportSpecifier;\n    }\n    node.isImportSpecifier = isImportSpecifier;\n    function isIndexedAccessTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.IndexedAccessType;\n    }\n    node.isIndexedAccessTypeNode = isIndexedAccessTypeNode;\n    function isIndexSignatureDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.IndexSignature;\n    }\n    node.isIndexSignatureDeclaration = isIndexSignatureDeclaration;\n    function isInferTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.InferType;\n    }\n    node.isInferTypeNode = isInferTypeNode;\n    function isInterfaceDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.InterfaceDeclaration;\n    }\n    node.isInterfaceDeclaration = isInterfaceDeclaration;\n    function isIntersectionTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.IntersectionType;\n    }\n    node.isIntersectionTypeNode = isIntersectionTypeNode;\n    function isIterationStatement(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.ForStatement:\n        case ts$1.SyntaxKind.ForOfStatement:\n        case ts$1.SyntaxKind.ForInStatement:\n        case ts$1.SyntaxKind.WhileStatement:\n        case ts$1.SyntaxKind.DoStatement:\n          return true;\n        default:\n          return false;\n      }\n    }\n    node.isIterationStatement = isIterationStatement;\n    function isJsDoc(node2) {\n      return node2.kind === ts$1.SyntaxKind.JSDocComment;\n    }\n    node.isJsDoc = isJsDoc;\n    function isJsxAttribute(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxAttribute;\n    }\n    node.isJsxAttribute = isJsxAttribute;\n    function isJsxAttributeLike(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxAttribute || node2.kind === ts$1.SyntaxKind.JsxSpreadAttribute;\n    }\n    node.isJsxAttributeLike = isJsxAttributeLike;\n    function isJsxAttributes(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxAttributes;\n    }\n    node.isJsxAttributes = isJsxAttributes;\n    function isJsxClosingElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxClosingElement;\n    }\n    node.isJsxClosingElement = isJsxClosingElement;\n    function isJsxClosingFragment(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxClosingFragment;\n    }\n    node.isJsxClosingFragment = isJsxClosingFragment;\n    function isJsxElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxElement;\n    }\n    node.isJsxElement = isJsxElement;\n    function isJsxExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxExpression;\n    }\n    node.isJsxExpression = isJsxExpression;\n    function isJsxFragment(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxFragment;\n    }\n    node.isJsxFragment = isJsxFragment;\n    function isJsxOpeningElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxOpeningElement;\n    }\n    node.isJsxOpeningElement = isJsxOpeningElement;\n    function isJsxOpeningFragment(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxOpeningFragment;\n    }\n    node.isJsxOpeningFragment = isJsxOpeningFragment;\n    function isJsxOpeningLikeElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxOpeningElement || node2.kind === ts$1.SyntaxKind.JsxSelfClosingElement;\n    }\n    node.isJsxOpeningLikeElement = isJsxOpeningLikeElement;\n    function isJsxSelfClosingElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxSelfClosingElement;\n    }\n    node.isJsxSelfClosingElement = isJsxSelfClosingElement;\n    function isJsxSpreadAttribute(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxSpreadAttribute;\n    }\n    node.isJsxSpreadAttribute = isJsxSpreadAttribute;\n    function isJsxText(node2) {\n      return node2.kind === ts$1.SyntaxKind.JsxText;\n    }\n    node.isJsxText = isJsxText;\n    function isLabeledStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.LabeledStatement;\n    }\n    node.isLabeledStatement = isLabeledStatement;\n    function isLiteralExpression(node2) {\n      return node2.kind >= ts$1.SyntaxKind.FirstLiteralToken && node2.kind <= ts$1.SyntaxKind.LastLiteralToken;\n    }\n    node.isLiteralExpression = isLiteralExpression;\n    function isLiteralTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.LiteralType;\n    }\n    node.isLiteralTypeNode = isLiteralTypeNode;\n    function isMappedTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.MappedType;\n    }\n    node.isMappedTypeNode = isMappedTypeNode;\n    function isMetaProperty(node2) {\n      return node2.kind === ts$1.SyntaxKind.MetaProperty;\n    }\n    node.isMetaProperty = isMetaProperty;\n    function isMethodDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.MethodDeclaration;\n    }\n    node.isMethodDeclaration = isMethodDeclaration;\n    function isMethodSignature(node2) {\n      return node2.kind === ts$1.SyntaxKind.MethodSignature;\n    }\n    node.isMethodSignature = isMethodSignature;\n    function isModuleBlock(node2) {\n      return node2.kind === ts$1.SyntaxKind.ModuleBlock;\n    }\n    node.isModuleBlock = isModuleBlock;\n    function isModuleDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.ModuleDeclaration;\n    }\n    node.isModuleDeclaration = isModuleDeclaration;\n    function isNamedExports(node2) {\n      return node2.kind === ts$1.SyntaxKind.NamedExports;\n    }\n    node.isNamedExports = isNamedExports;\n    function isNamedImports(node2) {\n      return node2.kind === ts$1.SyntaxKind.NamedImports;\n    }\n    node.isNamedImports = isNamedImports;\n    function isNamespaceDeclaration(node2) {\n      return isModuleDeclaration(node2) && node2.name.kind === ts$1.SyntaxKind.Identifier && node2.body !== void 0 && (node2.body.kind === ts$1.SyntaxKind.ModuleBlock || isNamespaceDeclaration(node2.body));\n    }\n    node.isNamespaceDeclaration = isNamespaceDeclaration;\n    function isNamespaceImport(node2) {\n      return node2.kind === ts$1.SyntaxKind.NamespaceImport;\n    }\n    node.isNamespaceImport = isNamespaceImport;\n    function isNamespaceExportDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.NamespaceExportDeclaration;\n    }\n    node.isNamespaceExportDeclaration = isNamespaceExportDeclaration;\n    function isNewExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.NewExpression;\n    }\n    node.isNewExpression = isNewExpression;\n    function isNonNullExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.NonNullExpression;\n    }\n    node.isNonNullExpression = isNonNullExpression;\n    function isNoSubstitutionTemplateLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral;\n    }\n    node.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral;\n    function isNullLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.NullKeyword;\n    }\n    node.isNullLiteral = isNullLiteral;\n    function isNumericLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.NumericLiteral;\n    }\n    node.isNumericLiteral = isNumericLiteral;\n    function isNumericOrStringLikeLiteral(node2) {\n      switch (node2.kind) {\n        case ts$1.SyntaxKind.StringLiteral:\n        case ts$1.SyntaxKind.NumericLiteral:\n        case ts$1.SyntaxKind.NoSubstitutionTemplateLiteral:\n          return true;\n        default:\n          return false;\n      }\n    }\n    node.isNumericOrStringLikeLiteral = isNumericOrStringLikeLiteral;\n    function isObjectBindingPattern(node2) {\n      return node2.kind === ts$1.SyntaxKind.ObjectBindingPattern;\n    }\n    node.isObjectBindingPattern = isObjectBindingPattern;\n    function isObjectLiteralExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.ObjectLiteralExpression;\n    }\n    node.isObjectLiteralExpression = isObjectLiteralExpression;\n    function isOmittedExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.OmittedExpression;\n    }\n    node.isOmittedExpression = isOmittedExpression;\n    function isParameterDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.Parameter;\n    }\n    node.isParameterDeclaration = isParameterDeclaration;\n    function isParenthesizedExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.ParenthesizedExpression;\n    }\n    node.isParenthesizedExpression = isParenthesizedExpression;\n    function isParenthesizedTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.ParenthesizedType;\n    }\n    node.isParenthesizedTypeNode = isParenthesizedTypeNode;\n    function isPostfixUnaryExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.PostfixUnaryExpression;\n    }\n    node.isPostfixUnaryExpression = isPostfixUnaryExpression;\n    function isPrefixUnaryExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.PrefixUnaryExpression;\n    }\n    node.isPrefixUnaryExpression = isPrefixUnaryExpression;\n    function isPropertyAccessExpression2(node2) {\n      return node2.kind === ts$1.SyntaxKind.PropertyAccessExpression;\n    }\n    node.isPropertyAccessExpression = isPropertyAccessExpression2;\n    function isPropertyAssignment(node2) {\n      return node2.kind === ts$1.SyntaxKind.PropertyAssignment;\n    }\n    node.isPropertyAssignment = isPropertyAssignment;\n    function isPropertyDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.PropertyDeclaration;\n    }\n    node.isPropertyDeclaration = isPropertyDeclaration;\n    function isPropertySignature(node2) {\n      return node2.kind === ts$1.SyntaxKind.PropertySignature;\n    }\n    node.isPropertySignature = isPropertySignature;\n    function isQualifiedName(node2) {\n      return node2.kind === ts$1.SyntaxKind.QualifiedName;\n    }\n    node.isQualifiedName = isQualifiedName;\n    function isRegularExpressionLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.RegularExpressionLiteral;\n    }\n    node.isRegularExpressionLiteral = isRegularExpressionLiteral;\n    function isReturnStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ReturnStatement;\n    }\n    node.isReturnStatement = isReturnStatement;\n    function isSetAccessorDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.SetAccessor;\n    }\n    node.isSetAccessorDeclaration = isSetAccessorDeclaration;\n    function isShorthandPropertyAssignment(node2) {\n      return node2.kind === ts$1.SyntaxKind.ShorthandPropertyAssignment;\n    }\n    node.isShorthandPropertyAssignment = isShorthandPropertyAssignment;\n    function isSignatureDeclaration(node2) {\n      return node2.parameters !== void 0;\n    }\n    node.isSignatureDeclaration = isSignatureDeclaration;\n    function isSourceFile(node2) {\n      return node2.kind === ts$1.SyntaxKind.SourceFile;\n    }\n    node.isSourceFile = isSourceFile;\n    function isSpreadAssignment(node2) {\n      return node2.kind === ts$1.SyntaxKind.SpreadAssignment;\n    }\n    node.isSpreadAssignment = isSpreadAssignment;\n    function isSpreadElement(node2) {\n      return node2.kind === ts$1.SyntaxKind.SpreadElement;\n    }\n    node.isSpreadElement = isSpreadElement;\n    function isStringLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.StringLiteral;\n    }\n    node.isStringLiteral = isStringLiteral;\n    function isSwitchStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.SwitchStatement;\n    }\n    node.isSwitchStatement = isSwitchStatement;\n    function isSyntaxList(node2) {\n      return node2.kind === ts$1.SyntaxKind.SyntaxList;\n    }\n    node.isSyntaxList = isSyntaxList;\n    function isTaggedTemplateExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.TaggedTemplateExpression;\n    }\n    node.isTaggedTemplateExpression = isTaggedTemplateExpression;\n    function isTemplateExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.TemplateExpression;\n    }\n    node.isTemplateExpression = isTemplateExpression;\n    function isTemplateLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.TemplateExpression || node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral;\n    }\n    node.isTemplateLiteral = isTemplateLiteral;\n    function isTextualLiteral(node2) {\n      return node2.kind === ts$1.SyntaxKind.StringLiteral || node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral;\n    }\n    node.isTextualLiteral = isTextualLiteral;\n    function isThrowStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.ThrowStatement;\n    }\n    node.isThrowStatement = isThrowStatement;\n    function isTryStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.TryStatement;\n    }\n    node.isTryStatement = isTryStatement;\n    function isTupleTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.TupleType;\n    }\n    node.isTupleTypeNode = isTupleTypeNode;\n    function isTypeAliasDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeAliasDeclaration;\n    }\n    node.isTypeAliasDeclaration = isTypeAliasDeclaration;\n    function isTypeAssertion(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeAssertionExpression;\n    }\n    node.isTypeAssertion = isTypeAssertion;\n    function isTypeLiteralNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeLiteral;\n    }\n    node.isTypeLiteralNode = isTypeLiteralNode;\n    function isTypeOfExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeOfExpression;\n    }\n    node.isTypeOfExpression = isTypeOfExpression;\n    function isTypeOperatorNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeOperator;\n    }\n    node.isTypeOperatorNode = isTypeOperatorNode;\n    function isTypeParameterDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeParameter;\n    }\n    node.isTypeParameterDeclaration = isTypeParameterDeclaration;\n    function isTypePredicateNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypePredicate;\n    }\n    node.isTypePredicateNode = isTypePredicateNode;\n    function isTypeReferenceNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeReference;\n    }\n    node.isTypeReferenceNode = isTypeReferenceNode;\n    function isTypeQueryNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.TypeQuery;\n    }\n    node.isTypeQueryNode = isTypeQueryNode;\n    function isUnionTypeNode(node2) {\n      return node2.kind === ts$1.SyntaxKind.UnionType;\n    }\n    node.isUnionTypeNode = isUnionTypeNode;\n    function isVariableDeclaration(node2) {\n      return node2.kind === ts$1.SyntaxKind.VariableDeclaration;\n    }\n    node.isVariableDeclaration = isVariableDeclaration;\n    function isVariableStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.VariableStatement;\n    }\n    node.isVariableStatement = isVariableStatement;\n    function isVariableDeclarationList(node2) {\n      return node2.kind === ts$1.SyntaxKind.VariableDeclarationList;\n    }\n    node.isVariableDeclarationList = isVariableDeclarationList;\n    function isVoidExpression(node2) {\n      return node2.kind === ts$1.SyntaxKind.VoidExpression;\n    }\n    node.isVoidExpression = isVoidExpression;\n    function isWhileStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.WhileStatement;\n    }\n    node.isWhileStatement = isWhileStatement;\n    function isWithStatement(node2) {\n      return node2.kind === ts$1.SyntaxKind.WithStatement;\n    }\n    node.isWithStatement = isWithStatement;\n    return node;\n  }\n  var hasRequiredNode$3;\n  function requireNode$3() {\n    if (hasRequiredNode$3)\n      return node$1;\n    hasRequiredNode$3 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.isImportTypeNode = void 0;\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireNode$4(), exports3);\n      const ts$1 = ts;\n      function isImportTypeNode(node2) {\n        return node2.kind === ts$1.SyntaxKind.ImportType;\n      }\n      exports3.isImportTypeNode = isImportTypeNode;\n    })(node$1);\n    return node$1;\n  }\n  var hasRequiredNode$2;\n  function requireNode$2() {\n    if (hasRequiredNode$2)\n      return node$2;\n    hasRequiredNode$2 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.isSyntheticExpression = exports3.isRestTypeNode = exports3.isOptionalTypeNode = void 0;\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireNode$3(), exports3);\n      const ts$1 = ts;\n      function isOptionalTypeNode(node2) {\n        return node2.kind === ts$1.SyntaxKind.OptionalType;\n      }\n      exports3.isOptionalTypeNode = isOptionalTypeNode;\n      function isRestTypeNode(node2) {\n        return node2.kind === ts$1.SyntaxKind.RestType;\n      }\n      exports3.isRestTypeNode = isRestTypeNode;\n      function isSyntheticExpression(node2) {\n        return node2.kind === ts$1.SyntaxKind.SyntheticExpression;\n      }\n      exports3.isSyntheticExpression = isSyntheticExpression;\n    })(node$2);\n    return node$2;\n  }\n  var hasRequiredNode$1;\n  function requireNode$1() {\n    if (hasRequiredNode$1)\n      return node$3;\n    hasRequiredNode$1 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.isBigIntLiteral = void 0;\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireNode$2(), exports3);\n      const ts$1 = ts;\n      function isBigIntLiteral(node2) {\n        return node2.kind === ts$1.SyntaxKind.BigIntLiteral;\n      }\n      exports3.isBigIntLiteral = isBigIntLiteral;\n    })(node$3);\n    return node$3;\n  }\n  var hasRequiredNode;\n  function requireNode() {\n    if (hasRequiredNode)\n      return node$4;\n    hasRequiredNode = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireNode$1(), exports3);\n    })(node$4);\n    return node$4;\n  }\n  var type$5 = {};\n  var type$4 = {};\n  var type$3 = {};\n  var type$2 = {};\n  var type$1 = {};\n  var hasRequiredType$5;\n  function requireType$5() {\n    if (hasRequiredType$5)\n      return type$1;\n    hasRequiredType$5 = 1;\n    Object.defineProperty(type$1, \"__esModule\", { value: true });\n    type$1.isUniqueESSymbolType = type$1.isUnionType = type$1.isUnionOrIntersectionType = type$1.isTypeVariable = type$1.isTypeReference = type$1.isTypeParameter = type$1.isSubstitutionType = type$1.isObjectType = type$1.isLiteralType = type$1.isIntersectionType = type$1.isInterfaceType = type$1.isInstantiableType = type$1.isIndexedAccessype = type$1.isIndexedAccessType = type$1.isGenericType = type$1.isEnumType = type$1.isConditionalType = void 0;\n    const ts$1 = ts;\n    function isConditionalType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Conditional) !== 0;\n    }\n    type$1.isConditionalType = isConditionalType;\n    function isEnumType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Enum) !== 0;\n    }\n    type$1.isEnumType = isEnumType;\n    function isGenericType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Object) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.ClassOrInterface) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.Reference) !== 0;\n    }\n    type$1.isGenericType = isGenericType;\n    function isIndexedAccessType(type2) {\n      return (type2.flags & ts$1.TypeFlags.IndexedAccess) !== 0;\n    }\n    type$1.isIndexedAccessType = isIndexedAccessType;\n    function isIndexedAccessype(type2) {\n      return (type2.flags & ts$1.TypeFlags.Index) !== 0;\n    }\n    type$1.isIndexedAccessype = isIndexedAccessype;\n    function isInstantiableType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Instantiable) !== 0;\n    }\n    type$1.isInstantiableType = isInstantiableType;\n    function isInterfaceType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Object) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.ClassOrInterface) !== 0;\n    }\n    type$1.isInterfaceType = isInterfaceType;\n    function isIntersectionType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Intersection) !== 0;\n    }\n    type$1.isIntersectionType = isIntersectionType;\n    function isLiteralType(type2) {\n      return (type2.flags & (ts$1.TypeFlags.StringOrNumberLiteral | ts$1.TypeFlags.BigIntLiteral)) !== 0;\n    }\n    type$1.isLiteralType = isLiteralType;\n    function isObjectType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Object) !== 0;\n    }\n    type$1.isObjectType = isObjectType;\n    function isSubstitutionType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Substitution) !== 0;\n    }\n    type$1.isSubstitutionType = isSubstitutionType;\n    function isTypeParameter(type2) {\n      return (type2.flags & ts$1.TypeFlags.TypeParameter) !== 0;\n    }\n    type$1.isTypeParameter = isTypeParameter;\n    function isTypeReference(type2) {\n      return (type2.flags & ts$1.TypeFlags.Object) !== 0 && (type2.objectFlags & ts$1.ObjectFlags.Reference) !== 0;\n    }\n    type$1.isTypeReference = isTypeReference;\n    function isTypeVariable(type2) {\n      return (type2.flags & ts$1.TypeFlags.TypeVariable) !== 0;\n    }\n    type$1.isTypeVariable = isTypeVariable;\n    function isUnionOrIntersectionType(type2) {\n      return (type2.flags & ts$1.TypeFlags.UnionOrIntersection) !== 0;\n    }\n    type$1.isUnionOrIntersectionType = isUnionOrIntersectionType;\n    function isUnionType(type2) {\n      return (type2.flags & ts$1.TypeFlags.Union) !== 0;\n    }\n    type$1.isUnionType = isUnionType;\n    function isUniqueESSymbolType(type2) {\n      return (type2.flags & ts$1.TypeFlags.UniqueESSymbol) !== 0;\n    }\n    type$1.isUniqueESSymbolType = isUniqueESSymbolType;\n    return type$1;\n  }\n  var hasRequiredType$4;\n  function requireType$4() {\n    if (hasRequiredType$4)\n      return type$2;\n    hasRequiredType$4 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireType$5(), exports3);\n    })(type$2);\n    return type$2;\n  }\n  var hasRequiredType$3;\n  function requireType$3() {\n    if (hasRequiredType$3)\n      return type$3;\n    hasRequiredType$3 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.isTupleTypeReference = exports3.isTupleType = void 0;\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireType$4(), exports3);\n      const ts$1 = ts;\n      const type_1 = requireType$4();\n      function isTupleType(type2) {\n        return (type2.flags & ts$1.TypeFlags.Object && type2.objectFlags & ts$1.ObjectFlags.Tuple) !== 0;\n      }\n      exports3.isTupleType = isTupleType;\n      function isTupleTypeReference(type2) {\n        return type_1.isTypeReference(type2) && isTupleType(type2.target);\n      }\n      exports3.isTupleTypeReference = isTupleTypeReference;\n    })(type$3);\n    return type$3;\n  }\n  var hasRequiredType$2;\n  function requireType$2() {\n    if (hasRequiredType$2)\n      return type$4;\n    hasRequiredType$2 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireType$3(), exports3);\n    })(type$4);\n    return type$4;\n  }\n  var hasRequiredType$1;\n  function requireType$1() {\n    if (hasRequiredType$1)\n      return type$5;\n    hasRequiredType$1 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireType$2(), exports3);\n    })(type$5);\n    return type$5;\n  }\n  var hasRequiredTypeguard;\n  function requireTypeguard() {\n    if (hasRequiredTypeguard)\n      return typeguard;\n    hasRequiredTypeguard = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireNode(), exports3);\n      tslib_1.__exportStar(requireType$1(), exports3);\n    })(typeguard);\n    return typeguard;\n  }\n  var util$2 = {};\n  var util$1 = {};\n  var _3_2 = {};\n  var hasRequired_3_2;\n  function require_3_2() {\n    if (hasRequired_3_2)\n      return _3_2;\n    hasRequired_3_2 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireNode$1(), exports3);\n      tslib_1.__exportStar(requireType$2(), exports3);\n    })(_3_2);\n    return _3_2;\n  }\n  var type = {};\n  var hasRequiredType;\n  function requireType() {\n    if (hasRequiredType)\n      return type;\n    hasRequiredType = 1;\n    Object.defineProperty(type, \"__esModule\", { value: true });\n    type.getBaseClassMemberOfClassElement = type.getIteratorYieldResultFromIteratorResult = type.getInstanceTypeOfClassLikeDeclaration = type.getConstructorTypeOfClassLikeDeclaration = type.getSymbolOfClassLikeDeclaration = type.getPropertyNameFromType = type.symbolHasReadonlyDeclaration = type.isPropertyReadonlyInType = type.getWellKnownSymbolPropertyOfType = type.getPropertyOfType = type.isBooleanLiteralType = type.isFalsyType = type.isThenableType = type.someTypePart = type.intersectionTypeParts = type.unionTypeParts = type.getCallSignaturesOfType = type.isTypeAssignableToString = type.isTypeAssignableToNumber = type.isOptionalChainingUndefinedMarkerType = type.removeOptionalChainingUndefinedMarkerType = type.removeOptionalityFromType = type.isEmptyObjectType = void 0;\n    const ts$1 = ts;\n    const type_1 = requireType$1();\n    const util_1 = requireUtil$1();\n    const node_1 = requireNode();\n    function isEmptyObjectType(type2) {\n      if (type_1.isObjectType(type2) && type2.objectFlags & ts$1.ObjectFlags.Anonymous && type2.getProperties().length === 0 && type2.getCallSignatures().length === 0 && type2.getConstructSignatures().length === 0 && type2.getStringIndexType() === void 0 && type2.getNumberIndexType() === void 0) {\n        const baseTypes = type2.getBaseTypes();\n        return baseTypes === void 0 || baseTypes.every(isEmptyObjectType);\n      }\n      return false;\n    }\n    type.isEmptyObjectType = isEmptyObjectType;\n    function removeOptionalityFromType(checker, type2) {\n      if (!containsTypeWithFlag(type2, ts$1.TypeFlags.Undefined))\n        return type2;\n      const allowsNull = containsTypeWithFlag(type2, ts$1.TypeFlags.Null);\n      type2 = checker.getNonNullableType(type2);\n      return allowsNull ? checker.getNullableType(type2, ts$1.TypeFlags.Null) : type2;\n    }\n    type.removeOptionalityFromType = removeOptionalityFromType;\n    function containsTypeWithFlag(type2, flag) {\n      for (const t of unionTypeParts(type2))\n        if (util_1.isTypeFlagSet(t, flag))\n          return true;\n      return false;\n    }\n    function removeOptionalChainingUndefinedMarkerType(checker, type2) {\n      if (!type_1.isUnionType(type2))\n        return isOptionalChainingUndefinedMarkerType(checker, type2) ? type2.getNonNullableType() : type2;\n      let flags = 0;\n      let containsUndefinedMarker = false;\n      for (const t of type2.types) {\n        if (isOptionalChainingUndefinedMarkerType(checker, t)) {\n          containsUndefinedMarker = true;\n        } else {\n          flags |= t.flags;\n        }\n      }\n      return containsUndefinedMarker ? checker.getNullableType(type2.getNonNullableType(), flags) : type2;\n    }\n    type.removeOptionalChainingUndefinedMarkerType = removeOptionalChainingUndefinedMarkerType;\n    function isOptionalChainingUndefinedMarkerType(checker, t) {\n      return util_1.isTypeFlagSet(t, ts$1.TypeFlags.Undefined) && checker.getNullableType(t.getNonNullableType(), ts$1.TypeFlags.Undefined) !== t;\n    }\n    type.isOptionalChainingUndefinedMarkerType = isOptionalChainingUndefinedMarkerType;\n    function isTypeAssignableToNumber(checker, type2) {\n      return isTypeAssignableTo(checker, type2, ts$1.TypeFlags.NumberLike);\n    }\n    type.isTypeAssignableToNumber = isTypeAssignableToNumber;\n    function isTypeAssignableToString(checker, type2) {\n      return isTypeAssignableTo(checker, type2, ts$1.TypeFlags.StringLike);\n    }\n    type.isTypeAssignableToString = isTypeAssignableToString;\n    function isTypeAssignableTo(checker, type2, flags) {\n      flags |= ts$1.TypeFlags.Any;\n      let typeParametersSeen;\n      return function check(t) {\n        if (type_1.isTypeParameter(t) && t.symbol !== void 0 && t.symbol.declarations !== void 0) {\n          if (typeParametersSeen === void 0) {\n            typeParametersSeen = /* @__PURE__ */ new Set([t]);\n          } else if (!typeParametersSeen.has(t)) {\n            typeParametersSeen.add(t);\n          } else {\n            return false;\n          }\n          const declaration = t.symbol.declarations[0];\n          if (declaration.constraint === void 0)\n            return true;\n          return check(checker.getTypeFromTypeNode(declaration.constraint));\n        }\n        if (type_1.isUnionType(t))\n          return t.types.every(check);\n        if (type_1.isIntersectionType(t))\n          return t.types.some(check);\n        return util_1.isTypeFlagSet(t, flags);\n      }(type2);\n    }\n    function getCallSignaturesOfType(type2) {\n      if (type_1.isUnionType(type2)) {\n        const signatures = [];\n        for (const t of type2.types)\n          signatures.push(...getCallSignaturesOfType(t));\n        return signatures;\n      }\n      if (type_1.isIntersectionType(type2)) {\n        let signatures;\n        for (const t of type2.types) {\n          const sig = getCallSignaturesOfType(t);\n          if (sig.length !== 0) {\n            if (signatures !== void 0)\n              return [];\n            signatures = sig;\n          }\n        }\n        return signatures === void 0 ? [] : signatures;\n      }\n      return type2.getCallSignatures();\n    }\n    type.getCallSignaturesOfType = getCallSignaturesOfType;\n    function unionTypeParts(type2) {\n      return type_1.isUnionType(type2) ? type2.types : [type2];\n    }\n    type.unionTypeParts = unionTypeParts;\n    function intersectionTypeParts(type2) {\n      return type_1.isIntersectionType(type2) ? type2.types : [type2];\n    }\n    type.intersectionTypeParts = intersectionTypeParts;\n    function someTypePart(type2, predicate, cb) {\n      return predicate(type2) ? type2.types.some(cb) : cb(type2);\n    }\n    type.someTypePart = someTypePart;\n    function isThenableType(checker, node2, type2 = checker.getTypeAtLocation(node2)) {\n      for (const ty of unionTypeParts(checker.getApparentType(type2))) {\n        const then = ty.getProperty(\"then\");\n        if (then === void 0)\n          continue;\n        const thenType = checker.getTypeOfSymbolAtLocation(then, node2);\n        for (const t of unionTypeParts(thenType))\n          for (const signature of t.getCallSignatures())\n            if (signature.parameters.length !== 0 && isCallback2(checker, signature.parameters[0], node2))\n              return true;\n      }\n      return false;\n    }\n    type.isThenableType = isThenableType;\n    function isCallback2(checker, param, node2) {\n      let type2 = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node2));\n      if (param.valueDeclaration.dotDotDotToken) {\n        type2 = type2.getNumberIndexType();\n        if (type2 === void 0)\n          return false;\n      }\n      for (const t of unionTypeParts(type2))\n        if (t.getCallSignatures().length !== 0)\n          return true;\n      return false;\n    }\n    function isFalsyType(type2) {\n      if (type2.flags & (ts$1.TypeFlags.Undefined | ts$1.TypeFlags.Null | ts$1.TypeFlags.Void))\n        return true;\n      if (type_1.isLiteralType(type2))\n        return !type2.value;\n      return isBooleanLiteralType(type2, false);\n    }\n    type.isFalsyType = isFalsyType;\n    function isBooleanLiteralType(type2, literal) {\n      return util_1.isTypeFlagSet(type2, ts$1.TypeFlags.BooleanLiteral) && type2.intrinsicName === (literal ? \"true\" : \"false\");\n    }\n    type.isBooleanLiteralType = isBooleanLiteralType;\n    function getPropertyOfType(type2, name) {\n      if (!name.startsWith(\"__\"))\n        return type2.getProperty(name);\n      return type2.getProperties().find((s) => s.escapedName === name);\n    }\n    type.getPropertyOfType = getPropertyOfType;\n    function getWellKnownSymbolPropertyOfType(type2, wellKnownSymbolName, checker) {\n      const prefix = \"__@\" + wellKnownSymbolName;\n      for (const prop of type2.getProperties()) {\n        if (!prop.name.startsWith(prefix))\n          continue;\n        const globalSymbol = checker.getApparentType(checker.getTypeAtLocation(prop.valueDeclaration.name.expression)).symbol;\n        if (prop.escapedName === getPropertyNameOfWellKnownSymbol(checker, globalSymbol, wellKnownSymbolName))\n          return prop;\n      }\n      return;\n    }\n    type.getWellKnownSymbolPropertyOfType = getWellKnownSymbolPropertyOfType;\n    function getPropertyNameOfWellKnownSymbol(checker, symbolConstructor, symbolName) {\n      const knownSymbol = symbolConstructor && checker.getTypeOfSymbolAtLocation(symbolConstructor, symbolConstructor.valueDeclaration).getProperty(symbolName);\n      const knownSymbolType = knownSymbol && checker.getTypeOfSymbolAtLocation(knownSymbol, knownSymbol.valueDeclaration);\n      if (knownSymbolType && type_1.isUniqueESSymbolType(knownSymbolType))\n        return knownSymbolType.escapedName;\n      return \"__@\" + symbolName;\n    }\n    function isPropertyReadonlyInType(type2, name, checker) {\n      let seenProperty = false;\n      let seenReadonlySignature = false;\n      for (const t of unionTypeParts(type2)) {\n        if (getPropertyOfType(t, name) === void 0) {\n          const index = (util_1.isNumericPropertyName(name) ? checker.getIndexInfoOfType(t, ts$1.IndexKind.Number) : void 0) || checker.getIndexInfoOfType(t, ts$1.IndexKind.String);\n          if (index !== void 0 && index.isReadonly) {\n            if (seenProperty)\n              return true;\n            seenReadonlySignature = true;\n          }\n        } else if (seenReadonlySignature || isReadonlyPropertyIntersection(t, name, checker)) {\n          return true;\n        } else {\n          seenProperty = true;\n        }\n      }\n      return false;\n    }\n    type.isPropertyReadonlyInType = isPropertyReadonlyInType;\n    function isReadonlyPropertyIntersection(type2, name, checker) {\n      return someTypePart(type2, type_1.isIntersectionType, (t) => {\n        const prop = getPropertyOfType(t, name);\n        if (prop === void 0)\n          return false;\n        if (prop.flags & ts$1.SymbolFlags.Transient) {\n          if (/^(?:[1-9]\\d*|0)$/.test(name) && type_1.isTupleTypeReference(t))\n            return t.target.readonly;\n          switch (isReadonlyPropertyFromMappedType(t, name, checker)) {\n            case true:\n              return true;\n            case false:\n              return false;\n          }\n        }\n        return (\n          // members of namespace import\n          util_1.isSymbolFlagSet(prop, ts$1.SymbolFlags.ValueModule) || // we unwrapped every mapped type, now we can check the actual declarations\n          symbolHasReadonlyDeclaration(prop, checker)\n        );\n      });\n    }\n    function isReadonlyPropertyFromMappedType(type2, name, checker) {\n      if (!type_1.isObjectType(type2) || !util_1.isObjectFlagSet(type2, ts$1.ObjectFlags.Mapped))\n        return;\n      const declaration = type2.symbol.declarations[0];\n      if (declaration.readonlyToken !== void 0 && !/^__@[^@]+$/.test(name))\n        return declaration.readonlyToken.kind !== ts$1.SyntaxKind.MinusToken;\n      return isPropertyReadonlyInType(type2.modifiersType, name, checker);\n    }\n    function symbolHasReadonlyDeclaration(symbol, checker) {\n      return (symbol.flags & ts$1.SymbolFlags.Accessor) === ts$1.SymbolFlags.GetAccessor || symbol.declarations !== void 0 && symbol.declarations.some((node2) => util_1.isModifierFlagSet(node2, ts$1.ModifierFlags.Readonly) || node_1.isVariableDeclaration(node2) && util_1.isNodeFlagSet(node2.parent, ts$1.NodeFlags.Const) || node_1.isCallExpression(node2) && util_1.isReadonlyAssignmentDeclaration(node2, checker) || node_1.isEnumMember(node2) || (node_1.isPropertyAssignment(node2) || node_1.isShorthandPropertyAssignment(node2)) && util_1.isInConstContext(node2.parent));\n    }\n    type.symbolHasReadonlyDeclaration = symbolHasReadonlyDeclaration;\n    function getPropertyNameFromType(type2) {\n      if (type2.flags & (ts$1.TypeFlags.StringLiteral | ts$1.TypeFlags.NumberLiteral)) {\n        const value = String(type2.value);\n        return { displayName: value, symbolName: ts$1.escapeLeadingUnderscores(value) };\n      }\n      if (type_1.isUniqueESSymbolType(type2))\n        return {\n          displayName: `[${type2.symbol ? `${isKnownSymbol(type2.symbol) ? \"Symbol.\" : \"\"}${type2.symbol.name}` : type2.escapedName.replace(/^__@|@\\d+$/g, \"\")}]`,\n          symbolName: type2.escapedName\n        };\n    }\n    type.getPropertyNameFromType = getPropertyNameFromType;\n    function isKnownSymbol(symbol) {\n      return util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Property) && symbol.valueDeclaration !== void 0 && node_1.isInterfaceDeclaration(symbol.valueDeclaration.parent) && symbol.valueDeclaration.parent.name.text === \"SymbolConstructor\" && isGlobalDeclaration(symbol.valueDeclaration.parent);\n    }\n    function isGlobalDeclaration(node2) {\n      return util_1.isNodeFlagSet(node2.parent, ts$1.NodeFlags.GlobalAugmentation) || node_1.isSourceFile(node2.parent) && !ts$1.isExternalModule(node2.parent);\n    }\n    function getSymbolOfClassLikeDeclaration(node2, checker) {\n      var _a;\n      return checker.getSymbolAtLocation((_a = node2.name) !== null && _a !== void 0 ? _a : util_1.getChildOfKind(node2, ts$1.SyntaxKind.ClassKeyword));\n    }\n    type.getSymbolOfClassLikeDeclaration = getSymbolOfClassLikeDeclaration;\n    function getConstructorTypeOfClassLikeDeclaration(node2, checker) {\n      return node2.kind === ts$1.SyntaxKind.ClassExpression ? checker.getTypeAtLocation(node2) : checker.getTypeOfSymbolAtLocation(getSymbolOfClassLikeDeclaration(node2, checker), node2);\n    }\n    type.getConstructorTypeOfClassLikeDeclaration = getConstructorTypeOfClassLikeDeclaration;\n    function getInstanceTypeOfClassLikeDeclaration(node2, checker) {\n      return node2.kind === ts$1.SyntaxKind.ClassDeclaration ? checker.getTypeAtLocation(node2) : checker.getDeclaredTypeOfSymbol(getSymbolOfClassLikeDeclaration(node2, checker));\n    }\n    type.getInstanceTypeOfClassLikeDeclaration = getInstanceTypeOfClassLikeDeclaration;\n    function getIteratorYieldResultFromIteratorResult(type2, node2, checker) {\n      return type_1.isUnionType(type2) && type2.types.find((t) => {\n        const done = t.getProperty(\"done\");\n        return done !== void 0 && isBooleanLiteralType(removeOptionalityFromType(checker, checker.getTypeOfSymbolAtLocation(done, node2)), false);\n      }) || type2;\n    }\n    type.getIteratorYieldResultFromIteratorResult = getIteratorYieldResultFromIteratorResult;\n    function getBaseClassMemberOfClassElement(node2, checker) {\n      if (!node_1.isClassLikeDeclaration(node2.parent))\n        return;\n      const base = util_1.getBaseOfClassLikeExpression(node2.parent);\n      if (base === void 0)\n        return;\n      const name = util_1.getSingleLateBoundPropertyNameOfPropertyName(node2.name, checker);\n      if (name === void 0)\n        return;\n      const baseType = checker.getTypeAtLocation(util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.StaticKeyword) ? base.expression : base);\n      return getPropertyOfType(baseType, name.symbolName);\n    }\n    type.getBaseClassMemberOfClassElement = getBaseClassMemberOfClassElement;\n    return type;\n  }\n  var hasRequiredUtil$1;\n  function requireUtil$1() {\n    if (hasRequiredUtil$1)\n      return util$1;\n    hasRequiredUtil$1 = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.isValidIdentifier = exports3.getLineBreakStyle = exports3.getLineRanges = exports3.forEachComment = exports3.forEachTokenWithTrivia = exports3.forEachToken = exports3.isFunctionWithBody = exports3.hasOwnThisReference = exports3.isBlockScopeBoundary = exports3.isFunctionScopeBoundary = exports3.isTypeScopeBoundary = exports3.isScopeBoundary = exports3.ScopeBoundarySelector = exports3.ScopeBoundary = exports3.isInSingleStatementContext = exports3.isBlockScopedDeclarationStatement = exports3.isBlockScopedVariableDeclaration = exports3.isBlockScopedVariableDeclarationList = exports3.getVariableDeclarationKind = exports3.VariableDeclarationKind = exports3.forEachDeclaredVariable = exports3.forEachDestructuringIdentifier = exports3.getPropertyName = exports3.getWrappedNodeAtPosition = exports3.getAstNodeAtPosition = exports3.commentText = exports3.isPositionInComment = exports3.getCommentAtPosition = exports3.getTokenAtPosition = exports3.getNextToken = exports3.getPreviousToken = exports3.getNextStatement = exports3.getPreviousStatement = exports3.isModifierFlagSet = exports3.isObjectFlagSet = exports3.isSymbolFlagSet = exports3.isTypeFlagSet = exports3.isNodeFlagSet = exports3.hasAccessModifier = exports3.isParameterProperty = exports3.hasModifier = exports3.getModifier = exports3.isThisParameter = exports3.isKeywordKind = exports3.isJsDocKind = exports3.isTypeNodeKind = exports3.isAssignmentKind = exports3.isNodeKind = exports3.isTokenKind = exports3.getChildOfKind = void 0;\n      exports3.getBaseOfClassLikeExpression = exports3.hasExhaustiveCaseClauses = exports3.formatPseudoBigInt = exports3.unwrapParentheses = exports3.getSingleLateBoundPropertyNameOfPropertyName = exports3.getLateBoundPropertyNamesOfPropertyName = exports3.getLateBoundPropertyNames = exports3.getPropertyNameOfWellKnownSymbol = exports3.isWellKnownSymbolLiterally = exports3.isBindableObjectDefinePropertyCall = exports3.isReadonlyAssignmentDeclaration = exports3.isInConstContext = exports3.isConstAssertion = exports3.getTsCheckDirective = exports3.getCheckJsDirective = exports3.isAmbientModule = exports3.isCompilerOptionEnabled = exports3.isStrictCompilerOptionEnabled = exports3.getIIFE = exports3.isAmbientModuleBlock = exports3.isStatementInAmbientContext = exports3.findImportLikeNodes = exports3.findImports = exports3.ImportKind = exports3.parseJsDocOfNode = exports3.getJsDoc = exports3.canHaveJsDoc = exports3.isReassignmentTarget = exports3.getAccessKind = exports3.AccessKind = exports3.isExpressionValueUsed = exports3.getDeclarationOfBindingElement = exports3.hasSideEffects = exports3.SideEffectOptions = exports3.isSameLine = exports3.isNumericPropertyName = exports3.isValidJsxIdentifier = exports3.isValidNumericLiteral = exports3.isValidPropertyName = exports3.isValidPropertyAccess = void 0;\n      const ts$1 = ts;\n      const node_1 = requireNode();\n      const _3_2_1 = require_3_2();\n      const type_1 = requireType();\n      function getChildOfKind(node2, kind, sourceFile) {\n        for (const child of node2.getChildren(sourceFile))\n          if (child.kind === kind)\n            return child;\n      }\n      exports3.getChildOfKind = getChildOfKind;\n      function isTokenKind(kind) {\n        return kind >= ts$1.SyntaxKind.FirstToken && kind <= ts$1.SyntaxKind.LastToken;\n      }\n      exports3.isTokenKind = isTokenKind;\n      function isNodeKind(kind) {\n        return kind >= ts$1.SyntaxKind.FirstNode;\n      }\n      exports3.isNodeKind = isNodeKind;\n      function isAssignmentKind(kind) {\n        return kind >= ts$1.SyntaxKind.FirstAssignment && kind <= ts$1.SyntaxKind.LastAssignment;\n      }\n      exports3.isAssignmentKind = isAssignmentKind;\n      function isTypeNodeKind(kind) {\n        return kind >= ts$1.SyntaxKind.FirstTypeNode && kind <= ts$1.SyntaxKind.LastTypeNode;\n      }\n      exports3.isTypeNodeKind = isTypeNodeKind;\n      function isJsDocKind(kind) {\n        return kind >= ts$1.SyntaxKind.FirstJSDocNode && kind <= ts$1.SyntaxKind.LastJSDocNode;\n      }\n      exports3.isJsDocKind = isJsDocKind;\n      function isKeywordKind(kind) {\n        return kind >= ts$1.SyntaxKind.FirstKeyword && kind <= ts$1.SyntaxKind.LastKeyword;\n      }\n      exports3.isKeywordKind = isKeywordKind;\n      function isThisParameter(parameter) {\n        return parameter.name.kind === ts$1.SyntaxKind.Identifier && parameter.name.originalKeywordKind === ts$1.SyntaxKind.ThisKeyword;\n      }\n      exports3.isThisParameter = isThisParameter;\n      function getModifier(node2, kind) {\n        if (node2.modifiers !== void 0) {\n          for (const modifier of node2.modifiers)\n            if (modifier.kind === kind)\n              return modifier;\n        }\n      }\n      exports3.getModifier = getModifier;\n      function hasModifier(modifiers, ...kinds) {\n        if (modifiers === void 0)\n          return false;\n        for (const modifier of modifiers)\n          if (kinds.includes(modifier.kind))\n            return true;\n        return false;\n      }\n      exports3.hasModifier = hasModifier;\n      function isParameterProperty(node2) {\n        return hasModifier(node2.modifiers, ts$1.SyntaxKind.PublicKeyword, ts$1.SyntaxKind.ProtectedKeyword, ts$1.SyntaxKind.PrivateKeyword, ts$1.SyntaxKind.ReadonlyKeyword);\n      }\n      exports3.isParameterProperty = isParameterProperty;\n      function hasAccessModifier(node2) {\n        return isModifierFlagSet(node2, ts$1.ModifierFlags.AccessibilityModifier);\n      }\n      exports3.hasAccessModifier = hasAccessModifier;\n      function isFlagSet(obj, flag) {\n        return (obj.flags & flag) !== 0;\n      }\n      exports3.isNodeFlagSet = isFlagSet;\n      exports3.isTypeFlagSet = isFlagSet;\n      exports3.isSymbolFlagSet = isFlagSet;\n      function isObjectFlagSet(objectType, flag) {\n        return (objectType.objectFlags & flag) !== 0;\n      }\n      exports3.isObjectFlagSet = isObjectFlagSet;\n      function isModifierFlagSet(node2, flag) {\n        return (ts$1.getCombinedModifierFlags(node2) & flag) !== 0;\n      }\n      exports3.isModifierFlagSet = isModifierFlagSet;\n      function getPreviousStatement(statement) {\n        const parent = statement.parent;\n        if (node_1.isBlockLike(parent)) {\n          const index = parent.statements.indexOf(statement);\n          if (index > 0)\n            return parent.statements[index - 1];\n        }\n      }\n      exports3.getPreviousStatement = getPreviousStatement;\n      function getNextStatement(statement) {\n        const parent = statement.parent;\n        if (node_1.isBlockLike(parent)) {\n          const index = parent.statements.indexOf(statement);\n          if (index < parent.statements.length)\n            return parent.statements[index + 1];\n        }\n      }\n      exports3.getNextStatement = getNextStatement;\n      function getPreviousToken(node2, sourceFile) {\n        const { pos } = node2;\n        if (pos === 0)\n          return;\n        do\n          node2 = node2.parent;\n        while (node2.pos === pos);\n        return getTokenAtPositionWorker(node2, pos - 1, sourceFile !== null && sourceFile !== void 0 ? sourceFile : node2.getSourceFile(), false);\n      }\n      exports3.getPreviousToken = getPreviousToken;\n      function getNextToken(node2, sourceFile) {\n        if (node2.kind === ts$1.SyntaxKind.SourceFile || node2.kind === ts$1.SyntaxKind.EndOfFileToken)\n          return;\n        const end = node2.end;\n        node2 = node2.parent;\n        while (node2.end === end) {\n          if (node2.parent === void 0)\n            return node2.endOfFileToken;\n          node2 = node2.parent;\n        }\n        return getTokenAtPositionWorker(node2, end, sourceFile !== null && sourceFile !== void 0 ? sourceFile : node2.getSourceFile(), false);\n      }\n      exports3.getNextToken = getNextToken;\n      function getTokenAtPosition(parent, pos, sourceFile, allowJsDoc) {\n        if (pos < parent.pos || pos >= parent.end)\n          return;\n        if (isTokenKind(parent.kind))\n          return parent;\n        return getTokenAtPositionWorker(parent, pos, sourceFile !== null && sourceFile !== void 0 ? sourceFile : parent.getSourceFile(), allowJsDoc === true);\n      }\n      exports3.getTokenAtPosition = getTokenAtPosition;\n      function getTokenAtPositionWorker(node2, pos, sourceFile, allowJsDoc) {\n        if (!allowJsDoc) {\n          node2 = getAstNodeAtPosition(node2, pos);\n          if (isTokenKind(node2.kind))\n            return node2;\n        }\n        outer:\n          while (true) {\n            for (const child of node2.getChildren(sourceFile)) {\n              if (child.end > pos && (allowJsDoc || child.kind !== ts$1.SyntaxKind.JSDocComment)) {\n                if (isTokenKind(child.kind))\n                  return child;\n                node2 = child;\n                continue outer;\n              }\n            }\n            return;\n          }\n      }\n      function getCommentAtPosition(sourceFile, pos, parent = sourceFile) {\n        const token = getTokenAtPosition(parent, pos, sourceFile);\n        if (token === void 0 || token.kind === ts$1.SyntaxKind.JsxText || pos >= token.end - (ts$1.tokenToString(token.kind) || \"\").length)\n          return;\n        const startPos = token.pos === 0 ? (ts$1.getShebang(sourceFile.text) || \"\").length : token.pos;\n        return startPos !== 0 && ts$1.forEachTrailingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos) || ts$1.forEachLeadingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos);\n      }\n      exports3.getCommentAtPosition = getCommentAtPosition;\n      function commentAtPositionCallback(pos, end, kind, _nl, at) {\n        return at >= pos && at < end ? { pos, end, kind } : void 0;\n      }\n      function isPositionInComment(sourceFile, pos, parent) {\n        return getCommentAtPosition(sourceFile, pos, parent) !== void 0;\n      }\n      exports3.isPositionInComment = isPositionInComment;\n      function commentText(sourceText, comment) {\n        return sourceText.substring(comment.pos + 2, comment.kind === ts$1.SyntaxKind.SingleLineCommentTrivia ? comment.end : comment.end - 2);\n      }\n      exports3.commentText = commentText;\n      function getAstNodeAtPosition(node2, pos) {\n        if (node2.pos > pos || node2.end <= pos)\n          return;\n        while (isNodeKind(node2.kind)) {\n          const nested = ts$1.forEachChild(node2, (child) => child.pos <= pos && child.end > pos ? child : void 0);\n          if (nested === void 0)\n            break;\n          node2 = nested;\n        }\n        return node2;\n      }\n      exports3.getAstNodeAtPosition = getAstNodeAtPosition;\n      function getWrappedNodeAtPosition(wrap, pos) {\n        if (wrap.node.pos > pos || wrap.node.end <= pos)\n          return;\n        outer:\n          while (true) {\n            for (const child of wrap.children) {\n              if (child.node.pos > pos)\n                return wrap;\n              if (child.node.end > pos) {\n                wrap = child;\n                continue outer;\n              }\n            }\n            return wrap;\n          }\n      }\n      exports3.getWrappedNodeAtPosition = getWrappedNodeAtPosition;\n      function getPropertyName(propertyName) {\n        if (propertyName.kind === ts$1.SyntaxKind.ComputedPropertyName) {\n          const expression = unwrapParentheses(propertyName.expression);\n          if (node_1.isPrefixUnaryExpression(expression)) {\n            let negate = false;\n            switch (expression.operator) {\n              case ts$1.SyntaxKind.MinusToken:\n                negate = true;\n              case ts$1.SyntaxKind.PlusToken:\n                return node_1.isNumericLiteral(expression.operand) ? `${negate ? \"-\" : \"\"}${expression.operand.text}` : _3_2_1.isBigIntLiteral(expression.operand) ? `${negate ? \"-\" : \"\"}${expression.operand.text.slice(0, -1)}` : void 0;\n              default:\n                return;\n            }\n          }\n          if (_3_2_1.isBigIntLiteral(expression))\n            return expression.text.slice(0, -1);\n          if (node_1.isNumericOrStringLikeLiteral(expression))\n            return expression.text;\n          return;\n        }\n        return propertyName.kind === ts$1.SyntaxKind.PrivateIdentifier ? void 0 : propertyName.text;\n      }\n      exports3.getPropertyName = getPropertyName;\n      function forEachDestructuringIdentifier(pattern, fn) {\n        for (const element of pattern.elements) {\n          if (element.kind !== ts$1.SyntaxKind.BindingElement)\n            continue;\n          let result;\n          if (element.name.kind === ts$1.SyntaxKind.Identifier) {\n            result = fn(element);\n          } else {\n            result = forEachDestructuringIdentifier(element.name, fn);\n          }\n          if (result)\n            return result;\n        }\n      }\n      exports3.forEachDestructuringIdentifier = forEachDestructuringIdentifier;\n      function forEachDeclaredVariable(declarationList, cb) {\n        for (const declaration of declarationList.declarations) {\n          let result;\n          if (declaration.name.kind === ts$1.SyntaxKind.Identifier) {\n            result = cb(declaration);\n          } else {\n            result = forEachDestructuringIdentifier(declaration.name, cb);\n          }\n          if (result)\n            return result;\n        }\n      }\n      exports3.forEachDeclaredVariable = forEachDeclaredVariable;\n      (function(VariableDeclarationKind) {\n        VariableDeclarationKind[VariableDeclarationKind[\"Var\"] = 0] = \"Var\";\n        VariableDeclarationKind[VariableDeclarationKind[\"Let\"] = 1] = \"Let\";\n        VariableDeclarationKind[VariableDeclarationKind[\"Const\"] = 2] = \"Const\";\n      })(exports3.VariableDeclarationKind || (exports3.VariableDeclarationKind = {}));\n      function getVariableDeclarationKind(declarationList) {\n        if (declarationList.flags & ts$1.NodeFlags.Let)\n          return 1;\n        if (declarationList.flags & ts$1.NodeFlags.Const)\n          return 2;\n        return 0;\n      }\n      exports3.getVariableDeclarationKind = getVariableDeclarationKind;\n      function isBlockScopedVariableDeclarationList(declarationList) {\n        return (declarationList.flags & ts$1.NodeFlags.BlockScoped) !== 0;\n      }\n      exports3.isBlockScopedVariableDeclarationList = isBlockScopedVariableDeclarationList;\n      function isBlockScopedVariableDeclaration(declaration) {\n        const parent = declaration.parent;\n        return parent.kind === ts$1.SyntaxKind.CatchClause || isBlockScopedVariableDeclarationList(parent);\n      }\n      exports3.isBlockScopedVariableDeclaration = isBlockScopedVariableDeclaration;\n      function isBlockScopedDeclarationStatement(statement) {\n        switch (statement.kind) {\n          case ts$1.SyntaxKind.VariableStatement:\n            return isBlockScopedVariableDeclarationList(statement.declarationList);\n          case ts$1.SyntaxKind.ClassDeclaration:\n          case ts$1.SyntaxKind.EnumDeclaration:\n          case ts$1.SyntaxKind.InterfaceDeclaration:\n          case ts$1.SyntaxKind.TypeAliasDeclaration:\n            return true;\n          default:\n            return false;\n        }\n      }\n      exports3.isBlockScopedDeclarationStatement = isBlockScopedDeclarationStatement;\n      function isInSingleStatementContext(statement) {\n        switch (statement.parent.kind) {\n          case ts$1.SyntaxKind.ForStatement:\n          case ts$1.SyntaxKind.ForInStatement:\n          case ts$1.SyntaxKind.ForOfStatement:\n          case ts$1.SyntaxKind.WhileStatement:\n          case ts$1.SyntaxKind.DoStatement:\n          case ts$1.SyntaxKind.IfStatement:\n          case ts$1.SyntaxKind.WithStatement:\n          case ts$1.SyntaxKind.LabeledStatement:\n            return true;\n          default:\n            return false;\n        }\n      }\n      exports3.isInSingleStatementContext = isInSingleStatementContext;\n      (function(ScopeBoundary) {\n        ScopeBoundary[ScopeBoundary[\"None\"] = 0] = \"None\";\n        ScopeBoundary[ScopeBoundary[\"Function\"] = 1] = \"Function\";\n        ScopeBoundary[ScopeBoundary[\"Block\"] = 2] = \"Block\";\n        ScopeBoundary[ScopeBoundary[\"Type\"] = 4] = \"Type\";\n        ScopeBoundary[ScopeBoundary[\"ConditionalType\"] = 8] = \"ConditionalType\";\n      })(exports3.ScopeBoundary || (exports3.ScopeBoundary = {}));\n      (function(ScopeBoundarySelector) {\n        ScopeBoundarySelector[ScopeBoundarySelector[\"Function\"] = 1] = \"Function\";\n        ScopeBoundarySelector[ScopeBoundarySelector[\"Block\"] = 3] = \"Block\";\n        ScopeBoundarySelector[ScopeBoundarySelector[\"Type\"] = 7] = \"Type\";\n        ScopeBoundarySelector[ScopeBoundarySelector[\"InferType\"] = 8] = \"InferType\";\n      })(exports3.ScopeBoundarySelector || (exports3.ScopeBoundarySelector = {}));\n      function isScopeBoundary(node2) {\n        return isFunctionScopeBoundary(node2) || isBlockScopeBoundary(node2) || isTypeScopeBoundary(node2);\n      }\n      exports3.isScopeBoundary = isScopeBoundary;\n      function isTypeScopeBoundary(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.InterfaceDeclaration:\n          case ts$1.SyntaxKind.TypeAliasDeclaration:\n          case ts$1.SyntaxKind.MappedType:\n            return 4;\n          case ts$1.SyntaxKind.ConditionalType:\n            return 8;\n          default:\n            return 0;\n        }\n      }\n      exports3.isTypeScopeBoundary = isTypeScopeBoundary;\n      function isFunctionScopeBoundary(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.FunctionExpression:\n          case ts$1.SyntaxKind.ArrowFunction:\n          case ts$1.SyntaxKind.Constructor:\n          case ts$1.SyntaxKind.ModuleDeclaration:\n          case ts$1.SyntaxKind.ClassDeclaration:\n          case ts$1.SyntaxKind.ClassExpression:\n          case ts$1.SyntaxKind.EnumDeclaration:\n          case ts$1.SyntaxKind.MethodDeclaration:\n          case ts$1.SyntaxKind.FunctionDeclaration:\n          case ts$1.SyntaxKind.GetAccessor:\n          case ts$1.SyntaxKind.SetAccessor:\n          case ts$1.SyntaxKind.MethodSignature:\n          case ts$1.SyntaxKind.CallSignature:\n          case ts$1.SyntaxKind.ConstructSignature:\n          case ts$1.SyntaxKind.ConstructorType:\n          case ts$1.SyntaxKind.FunctionType:\n            return 1;\n          case ts$1.SyntaxKind.SourceFile:\n            return ts$1.isExternalModule(node2) ? 1 : 0;\n          default:\n            return 0;\n        }\n      }\n      exports3.isFunctionScopeBoundary = isFunctionScopeBoundary;\n      function isBlockScopeBoundary(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.Block:\n            const parent = node2.parent;\n            return parent.kind !== ts$1.SyntaxKind.CatchClause && // blocks inside SourceFile are block scope boundaries\n            (parent.kind === ts$1.SyntaxKind.SourceFile || // blocks that are direct children of a function scope boundary are no scope boundary\n            // for example the FunctionBlock is part of the function scope of the containing function\n            !isFunctionScopeBoundary(parent)) ? 2 : 0;\n          case ts$1.SyntaxKind.ForStatement:\n          case ts$1.SyntaxKind.ForInStatement:\n          case ts$1.SyntaxKind.ForOfStatement:\n          case ts$1.SyntaxKind.CaseBlock:\n          case ts$1.SyntaxKind.CatchClause:\n          case ts$1.SyntaxKind.WithStatement:\n            return 2;\n          default:\n            return 0;\n        }\n      }\n      exports3.isBlockScopeBoundary = isBlockScopeBoundary;\n      function hasOwnThisReference(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.ClassDeclaration:\n          case ts$1.SyntaxKind.ClassExpression:\n          case ts$1.SyntaxKind.FunctionExpression:\n            return true;\n          case ts$1.SyntaxKind.FunctionDeclaration:\n            return node2.body !== void 0;\n          case ts$1.SyntaxKind.MethodDeclaration:\n          case ts$1.SyntaxKind.GetAccessor:\n          case ts$1.SyntaxKind.SetAccessor:\n            return node2.parent.kind === ts$1.SyntaxKind.ObjectLiteralExpression;\n          default:\n            return false;\n        }\n      }\n      exports3.hasOwnThisReference = hasOwnThisReference;\n      function isFunctionWithBody(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.GetAccessor:\n          case ts$1.SyntaxKind.SetAccessor:\n          case ts$1.SyntaxKind.FunctionDeclaration:\n          case ts$1.SyntaxKind.MethodDeclaration:\n          case ts$1.SyntaxKind.Constructor:\n            return node2.body !== void 0;\n          case ts$1.SyntaxKind.FunctionExpression:\n          case ts$1.SyntaxKind.ArrowFunction:\n            return true;\n          default:\n            return false;\n        }\n      }\n      exports3.isFunctionWithBody = isFunctionWithBody;\n      function forEachToken(node2, cb, sourceFile = node2.getSourceFile()) {\n        const queue = [];\n        while (true) {\n          if (isTokenKind(node2.kind)) {\n            cb(node2);\n          } else if (node2.kind !== ts$1.SyntaxKind.JSDocComment) {\n            const children = node2.getChildren(sourceFile);\n            if (children.length === 1) {\n              node2 = children[0];\n              continue;\n            }\n            for (let i = children.length - 1; i >= 0; --i)\n              queue.push(children[i]);\n          }\n          if (queue.length === 0)\n            break;\n          node2 = queue.pop();\n        }\n      }\n      exports3.forEachToken = forEachToken;\n      function forEachTokenWithTrivia(node2, cb, sourceFile = node2.getSourceFile()) {\n        const fullText = sourceFile.text;\n        const scanner = ts$1.createScanner(sourceFile.languageVersion, false, sourceFile.languageVariant, fullText);\n        return forEachToken(node2, (token) => {\n          const tokenStart = token.kind === ts$1.SyntaxKind.JsxText || token.pos === token.end ? token.pos : token.getStart(sourceFile);\n          if (tokenStart !== token.pos) {\n            scanner.setTextPos(token.pos);\n            let kind = scanner.scan();\n            let pos = scanner.getTokenPos();\n            while (pos < tokenStart) {\n              const textPos = scanner.getTextPos();\n              cb(fullText, kind, { pos, end: textPos }, token.parent);\n              if (textPos === tokenStart)\n                break;\n              kind = scanner.scan();\n              pos = scanner.getTokenPos();\n            }\n          }\n          return cb(fullText, token.kind, { end: token.end, pos: tokenStart }, token.parent);\n        }, sourceFile);\n      }\n      exports3.forEachTokenWithTrivia = forEachTokenWithTrivia;\n      function forEachComment(node2, cb, sourceFile = node2.getSourceFile()) {\n        const fullText = sourceFile.text;\n        const notJsx = sourceFile.languageVariant !== ts$1.LanguageVariant.JSX;\n        return forEachToken(node2, (token) => {\n          if (token.pos === token.end)\n            return;\n          if (token.kind !== ts$1.SyntaxKind.JsxText)\n            ts$1.forEachLeadingCommentRange(\n              fullText,\n              // skip shebang at position 0\n              token.pos === 0 ? (ts$1.getShebang(fullText) || \"\").length : token.pos,\n              commentCallback\n            );\n          if (notJsx || canHaveTrailingTrivia(token))\n            return ts$1.forEachTrailingCommentRange(fullText, token.end, commentCallback);\n        }, sourceFile);\n        function commentCallback(pos, end, kind) {\n          cb(fullText, { pos, end, kind });\n        }\n      }\n      exports3.forEachComment = forEachComment;\n      function canHaveTrailingTrivia(token) {\n        switch (token.kind) {\n          case ts$1.SyntaxKind.CloseBraceToken:\n            return token.parent.kind !== ts$1.SyntaxKind.JsxExpression || !isJsxElementOrFragment(token.parent.parent);\n          case ts$1.SyntaxKind.GreaterThanToken:\n            switch (token.parent.kind) {\n              case ts$1.SyntaxKind.JsxOpeningElement:\n                return token.end !== token.parent.end;\n              case ts$1.SyntaxKind.JsxOpeningFragment:\n                return false;\n              case ts$1.SyntaxKind.JsxSelfClosingElement:\n                return token.end !== token.parent.end || // if end is not equal, this is part of the type arguments list\n                !isJsxElementOrFragment(token.parent.parent);\n              case ts$1.SyntaxKind.JsxClosingElement:\n              case ts$1.SyntaxKind.JsxClosingFragment:\n                return !isJsxElementOrFragment(token.parent.parent.parent);\n            }\n        }\n        return true;\n      }\n      function isJsxElementOrFragment(node2) {\n        return node2.kind === ts$1.SyntaxKind.JsxElement || node2.kind === ts$1.SyntaxKind.JsxFragment;\n      }\n      function getLineRanges(sourceFile) {\n        const lineStarts = sourceFile.getLineStarts();\n        const result = [];\n        const length = lineStarts.length;\n        const sourceText = sourceFile.text;\n        let pos = 0;\n        for (let i = 1; i < length; ++i) {\n          const end = lineStarts[i];\n          let lineEnd = end;\n          for (; lineEnd > pos; --lineEnd)\n            if (!ts$1.isLineBreak(sourceText.charCodeAt(lineEnd - 1)))\n              break;\n          result.push({\n            pos,\n            end,\n            contentLength: lineEnd - pos\n          });\n          pos = end;\n        }\n        result.push({\n          pos,\n          end: sourceFile.end,\n          contentLength: sourceFile.end - pos\n        });\n        return result;\n      }\n      exports3.getLineRanges = getLineRanges;\n      function getLineBreakStyle(sourceFile) {\n        const lineStarts = sourceFile.getLineStarts();\n        return lineStarts.length === 1 || lineStarts[1] < 2 || sourceFile.text[lineStarts[1] - 2] !== \"\\r\" ? \"\\n\" : \"\\r\\n\";\n      }\n      exports3.getLineBreakStyle = getLineBreakStyle;\n      let cachedScanner;\n      function scanToken(text, languageVersion) {\n        if (cachedScanner === void 0) {\n          cachedScanner = ts$1.createScanner(languageVersion, false, void 0, text);\n        } else {\n          cachedScanner.setScriptTarget(languageVersion);\n          cachedScanner.setText(text);\n        }\n        cachedScanner.scan();\n        return cachedScanner;\n      }\n      function isValidIdentifier(text, languageVersion = ts$1.ScriptTarget.Latest) {\n        const scan = scanToken(text, languageVersion);\n        return scan.isIdentifier() && scan.getTextPos() === text.length && scan.getTokenPos() === 0;\n      }\n      exports3.isValidIdentifier = isValidIdentifier;\n      function charSize(ch) {\n        return ch >= 65536 ? 2 : 1;\n      }\n      function isValidPropertyAccess(text, languageVersion = ts$1.ScriptTarget.Latest) {\n        if (text.length === 0)\n          return false;\n        let ch = text.codePointAt(0);\n        if (!ts$1.isIdentifierStart(ch, languageVersion))\n          return false;\n        for (let i = charSize(ch); i < text.length; i += charSize(ch)) {\n          ch = text.codePointAt(i);\n          if (!ts$1.isIdentifierPart(ch, languageVersion))\n            return false;\n        }\n        return true;\n      }\n      exports3.isValidPropertyAccess = isValidPropertyAccess;\n      function isValidPropertyName(text, languageVersion = ts$1.ScriptTarget.Latest) {\n        if (isValidPropertyAccess(text, languageVersion))\n          return true;\n        const scan = scanToken(text, languageVersion);\n        return scan.getTextPos() === text.length && scan.getToken() === ts$1.SyntaxKind.NumericLiteral && scan.getTokenValue() === text;\n      }\n      exports3.isValidPropertyName = isValidPropertyName;\n      function isValidNumericLiteral(text, languageVersion = ts$1.ScriptTarget.Latest) {\n        const scan = scanToken(text, languageVersion);\n        return scan.getToken() === ts$1.SyntaxKind.NumericLiteral && scan.getTextPos() === text.length && scan.getTokenPos() === 0;\n      }\n      exports3.isValidNumericLiteral = isValidNumericLiteral;\n      function isValidJsxIdentifier(text, languageVersion = ts$1.ScriptTarget.Latest) {\n        if (text.length === 0)\n          return false;\n        let seenNamespaceSeparator = false;\n        let ch = text.codePointAt(0);\n        if (!ts$1.isIdentifierStart(ch, languageVersion))\n          return false;\n        for (let i = charSize(ch); i < text.length; i += charSize(ch)) {\n          ch = text.codePointAt(i);\n          if (!ts$1.isIdentifierPart(ch, languageVersion) && ch !== 45) {\n            if (!seenNamespaceSeparator && ch === 58 && i + charSize(ch) !== text.length) {\n              seenNamespaceSeparator = true;\n            } else {\n              return false;\n            }\n          }\n        }\n        return true;\n      }\n      exports3.isValidJsxIdentifier = isValidJsxIdentifier;\n      function isNumericPropertyName(name) {\n        return String(+name) === name;\n      }\n      exports3.isNumericPropertyName = isNumericPropertyName;\n      function isSameLine(sourceFile, pos1, pos2) {\n        return ts$1.getLineAndCharacterOfPosition(sourceFile, pos1).line === ts$1.getLineAndCharacterOfPosition(sourceFile, pos2).line;\n      }\n      exports3.isSameLine = isSameLine;\n      (function(SideEffectOptions) {\n        SideEffectOptions[SideEffectOptions[\"None\"] = 0] = \"None\";\n        SideEffectOptions[SideEffectOptions[\"TaggedTemplate\"] = 1] = \"TaggedTemplate\";\n        SideEffectOptions[SideEffectOptions[\"Constructor\"] = 2] = \"Constructor\";\n        SideEffectOptions[SideEffectOptions[\"JsxElement\"] = 4] = \"JsxElement\";\n      })(exports3.SideEffectOptions || (exports3.SideEffectOptions = {}));\n      function hasSideEffects(node2, options) {\n        var _a, _b;\n        const queue = [];\n        while (true) {\n          switch (node2.kind) {\n            case ts$1.SyntaxKind.CallExpression:\n            case ts$1.SyntaxKind.PostfixUnaryExpression:\n            case ts$1.SyntaxKind.AwaitExpression:\n            case ts$1.SyntaxKind.YieldExpression:\n            case ts$1.SyntaxKind.DeleteExpression:\n              return true;\n            case ts$1.SyntaxKind.TypeAssertionExpression:\n            case ts$1.SyntaxKind.AsExpression:\n            case ts$1.SyntaxKind.ParenthesizedExpression:\n            case ts$1.SyntaxKind.NonNullExpression:\n            case ts$1.SyntaxKind.VoidExpression:\n            case ts$1.SyntaxKind.TypeOfExpression:\n            case ts$1.SyntaxKind.PropertyAccessExpression:\n            case ts$1.SyntaxKind.SpreadElement:\n            case ts$1.SyntaxKind.PartiallyEmittedExpression:\n              node2 = node2.expression;\n              continue;\n            case ts$1.SyntaxKind.BinaryExpression:\n              if (isAssignmentKind(node2.operatorToken.kind))\n                return true;\n              queue.push(node2.right);\n              node2 = node2.left;\n              continue;\n            case ts$1.SyntaxKind.PrefixUnaryExpression:\n              switch (node2.operator) {\n                case ts$1.SyntaxKind.PlusPlusToken:\n                case ts$1.SyntaxKind.MinusMinusToken:\n                  return true;\n                default:\n                  node2 = node2.operand;\n                  continue;\n              }\n            case ts$1.SyntaxKind.ElementAccessExpression:\n              if (node2.argumentExpression !== void 0)\n                queue.push(node2.argumentExpression);\n              node2 = node2.expression;\n              continue;\n            case ts$1.SyntaxKind.ConditionalExpression:\n              queue.push(node2.whenTrue, node2.whenFalse);\n              node2 = node2.condition;\n              continue;\n            case ts$1.SyntaxKind.NewExpression:\n              if (options & 2)\n                return true;\n              if (node2.arguments !== void 0)\n                queue.push(...node2.arguments);\n              node2 = node2.expression;\n              continue;\n            case ts$1.SyntaxKind.TaggedTemplateExpression:\n              if (options & 1)\n                return true;\n              queue.push(node2.tag);\n              node2 = node2.template;\n              if (node2.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral)\n                break;\n            case ts$1.SyntaxKind.TemplateExpression:\n              for (const child of node2.templateSpans)\n                queue.push(child.expression);\n              break;\n            case ts$1.SyntaxKind.ClassExpression: {\n              if (node2.decorators !== void 0)\n                return true;\n              for (const child of node2.members) {\n                if (child.decorators !== void 0)\n                  return true;\n                if (!hasModifier(child.modifiers, ts$1.SyntaxKind.DeclareKeyword)) {\n                  if (((_a = child.name) === null || _a === void 0 ? void 0 : _a.kind) === ts$1.SyntaxKind.ComputedPropertyName)\n                    queue.push(child.name.expression);\n                  if (node_1.isMethodDeclaration(child)) {\n                    for (const p of child.parameters)\n                      if (p.decorators !== void 0)\n                        return true;\n                  } else if (node_1.isPropertyDeclaration(child) && child.initializer !== void 0 && hasModifier(child.modifiers, ts$1.SyntaxKind.StaticKeyword)) {\n                    queue.push(child.initializer);\n                  }\n                }\n              }\n              const base = getBaseOfClassLikeExpression(node2);\n              if (base === void 0)\n                break;\n              node2 = base.expression;\n              continue;\n            }\n            case ts$1.SyntaxKind.ArrayLiteralExpression:\n              queue.push(...node2.elements);\n              break;\n            case ts$1.SyntaxKind.ObjectLiteralExpression:\n              for (const child of node2.properties) {\n                if (((_b = child.name) === null || _b === void 0 ? void 0 : _b.kind) === ts$1.SyntaxKind.ComputedPropertyName)\n                  queue.push(child.name.expression);\n                switch (child.kind) {\n                  case ts$1.SyntaxKind.PropertyAssignment:\n                    queue.push(child.initializer);\n                    break;\n                  case ts$1.SyntaxKind.SpreadAssignment:\n                    queue.push(child.expression);\n                }\n              }\n              break;\n            case ts$1.SyntaxKind.JsxExpression:\n              if (node2.expression === void 0)\n                break;\n              node2 = node2.expression;\n              continue;\n            case ts$1.SyntaxKind.JsxElement:\n            case ts$1.SyntaxKind.JsxFragment:\n              for (const child of node2.children)\n                if (child.kind !== ts$1.SyntaxKind.JsxText)\n                  queue.push(child);\n              if (node2.kind === ts$1.SyntaxKind.JsxFragment)\n                break;\n              node2 = node2.openingElement;\n            case ts$1.SyntaxKind.JsxSelfClosingElement:\n            case ts$1.SyntaxKind.JsxOpeningElement:\n              if (options & 4)\n                return true;\n              for (const child of node2.attributes.properties) {\n                if (child.kind === ts$1.SyntaxKind.JsxSpreadAttribute) {\n                  queue.push(child.expression);\n                } else if (child.initializer !== void 0) {\n                  queue.push(child.initializer);\n                }\n              }\n              break;\n            case ts$1.SyntaxKind.CommaListExpression:\n              queue.push(...node2.elements);\n          }\n          if (queue.length === 0)\n            return false;\n          node2 = queue.pop();\n        }\n      }\n      exports3.hasSideEffects = hasSideEffects;\n      function getDeclarationOfBindingElement(node2) {\n        let parent = node2.parent.parent;\n        while (parent.kind === ts$1.SyntaxKind.BindingElement)\n          parent = parent.parent.parent;\n        return parent;\n      }\n      exports3.getDeclarationOfBindingElement = getDeclarationOfBindingElement;\n      function isExpressionValueUsed(node2) {\n        while (true) {\n          const parent = node2.parent;\n          switch (parent.kind) {\n            case ts$1.SyntaxKind.CallExpression:\n            case ts$1.SyntaxKind.NewExpression:\n            case ts$1.SyntaxKind.ElementAccessExpression:\n            case ts$1.SyntaxKind.WhileStatement:\n            case ts$1.SyntaxKind.DoStatement:\n            case ts$1.SyntaxKind.WithStatement:\n            case ts$1.SyntaxKind.ThrowStatement:\n            case ts$1.SyntaxKind.ReturnStatement:\n            case ts$1.SyntaxKind.JsxExpression:\n            case ts$1.SyntaxKind.JsxSpreadAttribute:\n            case ts$1.SyntaxKind.JsxElement:\n            case ts$1.SyntaxKind.JsxFragment:\n            case ts$1.SyntaxKind.JsxSelfClosingElement:\n            case ts$1.SyntaxKind.ComputedPropertyName:\n            case ts$1.SyntaxKind.ArrowFunction:\n            case ts$1.SyntaxKind.ExportSpecifier:\n            case ts$1.SyntaxKind.ExportAssignment:\n            case ts$1.SyntaxKind.ImportDeclaration:\n            case ts$1.SyntaxKind.ExternalModuleReference:\n            case ts$1.SyntaxKind.Decorator:\n            case ts$1.SyntaxKind.TaggedTemplateExpression:\n            case ts$1.SyntaxKind.TemplateSpan:\n            case ts$1.SyntaxKind.ExpressionWithTypeArguments:\n            case ts$1.SyntaxKind.TypeOfExpression:\n            case ts$1.SyntaxKind.AwaitExpression:\n            case ts$1.SyntaxKind.YieldExpression:\n            case ts$1.SyntaxKind.LiteralType:\n            case ts$1.SyntaxKind.JsxAttributes:\n            case ts$1.SyntaxKind.JsxOpeningElement:\n            case ts$1.SyntaxKind.JsxClosingElement:\n            case ts$1.SyntaxKind.IfStatement:\n            case ts$1.SyntaxKind.CaseClause:\n            case ts$1.SyntaxKind.SwitchStatement:\n              return true;\n            case ts$1.SyntaxKind.PropertyAccessExpression:\n              return parent.expression === node2;\n            case ts$1.SyntaxKind.QualifiedName:\n              return parent.left === node2;\n            case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n              return parent.objectAssignmentInitializer === node2 || !isInDestructuringAssignment(parent);\n            case ts$1.SyntaxKind.PropertyAssignment:\n              return parent.initializer === node2 && !isInDestructuringAssignment(parent);\n            case ts$1.SyntaxKind.SpreadAssignment:\n            case ts$1.SyntaxKind.SpreadElement:\n            case ts$1.SyntaxKind.ArrayLiteralExpression:\n              return !isInDestructuringAssignment(parent);\n            case ts$1.SyntaxKind.ParenthesizedExpression:\n            case ts$1.SyntaxKind.AsExpression:\n            case ts$1.SyntaxKind.TypeAssertionExpression:\n            case ts$1.SyntaxKind.PostfixUnaryExpression:\n            case ts$1.SyntaxKind.PrefixUnaryExpression:\n            case ts$1.SyntaxKind.NonNullExpression:\n              node2 = parent;\n              continue;\n            case ts$1.SyntaxKind.ForStatement:\n              return parent.condition === node2;\n            case ts$1.SyntaxKind.ForInStatement:\n            case ts$1.SyntaxKind.ForOfStatement:\n              return parent.expression === node2;\n            case ts$1.SyntaxKind.ConditionalExpression:\n              if (parent.condition === node2)\n                return true;\n              node2 = parent;\n              break;\n            case ts$1.SyntaxKind.PropertyDeclaration:\n            case ts$1.SyntaxKind.BindingElement:\n            case ts$1.SyntaxKind.VariableDeclaration:\n            case ts$1.SyntaxKind.Parameter:\n            case ts$1.SyntaxKind.EnumMember:\n              return parent.initializer === node2;\n            case ts$1.SyntaxKind.ImportEqualsDeclaration:\n              return parent.moduleReference === node2;\n            case ts$1.SyntaxKind.CommaListExpression:\n              if (parent.elements[parent.elements.length - 1] !== node2)\n                return false;\n              node2 = parent;\n              break;\n            case ts$1.SyntaxKind.BinaryExpression:\n              if (parent.right === node2) {\n                if (parent.operatorToken.kind === ts$1.SyntaxKind.CommaToken) {\n                  node2 = parent;\n                  break;\n                }\n                return true;\n              }\n              switch (parent.operatorToken.kind) {\n                case ts$1.SyntaxKind.CommaToken:\n                case ts$1.SyntaxKind.EqualsToken:\n                  return false;\n                case ts$1.SyntaxKind.EqualsEqualsEqualsToken:\n                case ts$1.SyntaxKind.EqualsEqualsToken:\n                case ts$1.SyntaxKind.ExclamationEqualsEqualsToken:\n                case ts$1.SyntaxKind.ExclamationEqualsToken:\n                case ts$1.SyntaxKind.InstanceOfKeyword:\n                case ts$1.SyntaxKind.PlusToken:\n                case ts$1.SyntaxKind.MinusToken:\n                case ts$1.SyntaxKind.AsteriskToken:\n                case ts$1.SyntaxKind.SlashToken:\n                case ts$1.SyntaxKind.PercentToken:\n                case ts$1.SyntaxKind.AsteriskAsteriskToken:\n                case ts$1.SyntaxKind.GreaterThanToken:\n                case ts$1.SyntaxKind.GreaterThanGreaterThanToken:\n                case ts$1.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n                case ts$1.SyntaxKind.GreaterThanEqualsToken:\n                case ts$1.SyntaxKind.LessThanToken:\n                case ts$1.SyntaxKind.LessThanLessThanToken:\n                case ts$1.SyntaxKind.LessThanEqualsToken:\n                case ts$1.SyntaxKind.AmpersandToken:\n                case ts$1.SyntaxKind.BarToken:\n                case ts$1.SyntaxKind.CaretToken:\n                case ts$1.SyntaxKind.BarBarToken:\n                case ts$1.SyntaxKind.AmpersandAmpersandToken:\n                case ts$1.SyntaxKind.QuestionQuestionToken:\n                case ts$1.SyntaxKind.InKeyword:\n                case ts$1.SyntaxKind.QuestionQuestionEqualsToken:\n                case ts$1.SyntaxKind.AmpersandAmpersandEqualsToken:\n                case ts$1.SyntaxKind.BarBarEqualsToken:\n                  return true;\n                default:\n                  node2 = parent;\n              }\n              break;\n            default:\n              return false;\n          }\n        }\n      }\n      exports3.isExpressionValueUsed = isExpressionValueUsed;\n      function isInDestructuringAssignment(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n            if (node2.objectAssignmentInitializer !== void 0)\n              return true;\n          case ts$1.SyntaxKind.PropertyAssignment:\n          case ts$1.SyntaxKind.SpreadAssignment:\n            node2 = node2.parent;\n            break;\n          case ts$1.SyntaxKind.SpreadElement:\n            if (node2.parent.kind !== ts$1.SyntaxKind.ArrayLiteralExpression)\n              return false;\n            node2 = node2.parent;\n        }\n        while (true) {\n          switch (node2.parent.kind) {\n            case ts$1.SyntaxKind.BinaryExpression:\n              return node2.parent.left === node2 && node2.parent.operatorToken.kind === ts$1.SyntaxKind.EqualsToken;\n            case ts$1.SyntaxKind.ForOfStatement:\n              return node2.parent.initializer === node2;\n            case ts$1.SyntaxKind.ArrayLiteralExpression:\n            case ts$1.SyntaxKind.ObjectLiteralExpression:\n              node2 = node2.parent;\n              break;\n            case ts$1.SyntaxKind.SpreadAssignment:\n            case ts$1.SyntaxKind.PropertyAssignment:\n              node2 = node2.parent.parent;\n              break;\n            case ts$1.SyntaxKind.SpreadElement:\n              if (node2.parent.parent.kind !== ts$1.SyntaxKind.ArrayLiteralExpression)\n                return false;\n              node2 = node2.parent.parent;\n              break;\n            default:\n              return false;\n          }\n        }\n      }\n      (function(AccessKind) {\n        AccessKind[AccessKind[\"None\"] = 0] = \"None\";\n        AccessKind[AccessKind[\"Read\"] = 1] = \"Read\";\n        AccessKind[AccessKind[\"Write\"] = 2] = \"Write\";\n        AccessKind[AccessKind[\"Delete\"] = 4] = \"Delete\";\n        AccessKind[AccessKind[\"ReadWrite\"] = 3] = \"ReadWrite\";\n        AccessKind[AccessKind[\"Modification\"] = 6] = \"Modification\";\n      })(exports3.AccessKind || (exports3.AccessKind = {}));\n      function getAccessKind(node2) {\n        const parent = node2.parent;\n        switch (parent.kind) {\n          case ts$1.SyntaxKind.DeleteExpression:\n            return 4;\n          case ts$1.SyntaxKind.PostfixUnaryExpression:\n            return 3;\n          case ts$1.SyntaxKind.PrefixUnaryExpression:\n            return parent.operator === ts$1.SyntaxKind.PlusPlusToken || parent.operator === ts$1.SyntaxKind.MinusMinusToken ? 3 : 1;\n          case ts$1.SyntaxKind.BinaryExpression:\n            return parent.right === node2 ? 1 : !isAssignmentKind(parent.operatorToken.kind) ? 1 : parent.operatorToken.kind === ts$1.SyntaxKind.EqualsToken ? 2 : 3;\n          case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n            return parent.objectAssignmentInitializer === node2 ? 1 : isInDestructuringAssignment(parent) ? 2 : 1;\n          case ts$1.SyntaxKind.PropertyAssignment:\n            return parent.name === node2 ? 0 : isInDestructuringAssignment(parent) ? 2 : 1;\n          case ts$1.SyntaxKind.ArrayLiteralExpression:\n          case ts$1.SyntaxKind.SpreadElement:\n          case ts$1.SyntaxKind.SpreadAssignment:\n            return isInDestructuringAssignment(parent) ? 2 : 1;\n          case ts$1.SyntaxKind.ParenthesizedExpression:\n          case ts$1.SyntaxKind.NonNullExpression:\n          case ts$1.SyntaxKind.TypeAssertionExpression:\n          case ts$1.SyntaxKind.AsExpression:\n            return getAccessKind(parent);\n          case ts$1.SyntaxKind.ForOfStatement:\n          case ts$1.SyntaxKind.ForInStatement:\n            return parent.initializer === node2 ? 2 : 1;\n          case ts$1.SyntaxKind.ExpressionWithTypeArguments:\n            return parent.parent.token === ts$1.SyntaxKind.ExtendsKeyword && parent.parent.parent.kind !== ts$1.SyntaxKind.InterfaceDeclaration ? 1 : 0;\n          case ts$1.SyntaxKind.ComputedPropertyName:\n          case ts$1.SyntaxKind.ExpressionStatement:\n          case ts$1.SyntaxKind.TypeOfExpression:\n          case ts$1.SyntaxKind.ElementAccessExpression:\n          case ts$1.SyntaxKind.ForStatement:\n          case ts$1.SyntaxKind.IfStatement:\n          case ts$1.SyntaxKind.DoStatement:\n          case ts$1.SyntaxKind.WhileStatement:\n          case ts$1.SyntaxKind.SwitchStatement:\n          case ts$1.SyntaxKind.WithStatement:\n          case ts$1.SyntaxKind.ThrowStatement:\n          case ts$1.SyntaxKind.CallExpression:\n          case ts$1.SyntaxKind.NewExpression:\n          case ts$1.SyntaxKind.TaggedTemplateExpression:\n          case ts$1.SyntaxKind.JsxExpression:\n          case ts$1.SyntaxKind.Decorator:\n          case ts$1.SyntaxKind.TemplateSpan:\n          case ts$1.SyntaxKind.JsxOpeningElement:\n          case ts$1.SyntaxKind.JsxSelfClosingElement:\n          case ts$1.SyntaxKind.JsxSpreadAttribute:\n          case ts$1.SyntaxKind.VoidExpression:\n          case ts$1.SyntaxKind.ReturnStatement:\n          case ts$1.SyntaxKind.AwaitExpression:\n          case ts$1.SyntaxKind.YieldExpression:\n          case ts$1.SyntaxKind.ConditionalExpression:\n          case ts$1.SyntaxKind.CaseClause:\n          case ts$1.SyntaxKind.JsxElement:\n            return 1;\n          case ts$1.SyntaxKind.ArrowFunction:\n            return parent.body === node2 ? 1 : 2;\n          case ts$1.SyntaxKind.PropertyDeclaration:\n          case ts$1.SyntaxKind.VariableDeclaration:\n          case ts$1.SyntaxKind.Parameter:\n          case ts$1.SyntaxKind.EnumMember:\n          case ts$1.SyntaxKind.BindingElement:\n          case ts$1.SyntaxKind.JsxAttribute:\n            return parent.initializer === node2 ? 1 : 0;\n          case ts$1.SyntaxKind.PropertyAccessExpression:\n            return parent.expression === node2 ? 1 : 0;\n          case ts$1.SyntaxKind.ExportAssignment:\n            return parent.isExportEquals ? 1 : 0;\n        }\n        return 0;\n      }\n      exports3.getAccessKind = getAccessKind;\n      function isReassignmentTarget(node2) {\n        return (getAccessKind(node2) & 2) !== 0;\n      }\n      exports3.isReassignmentTarget = isReassignmentTarget;\n      function canHaveJsDoc(node2) {\n        const kind = node2.kind;\n        switch (kind) {\n          case ts$1.SyntaxKind.Parameter:\n          case ts$1.SyntaxKind.CallSignature:\n          case ts$1.SyntaxKind.ConstructSignature:\n          case ts$1.SyntaxKind.MethodSignature:\n          case ts$1.SyntaxKind.PropertySignature:\n          case ts$1.SyntaxKind.ArrowFunction:\n          case ts$1.SyntaxKind.ParenthesizedExpression:\n          case ts$1.SyntaxKind.SpreadAssignment:\n          case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n          case ts$1.SyntaxKind.PropertyAssignment:\n          case ts$1.SyntaxKind.FunctionExpression:\n          case ts$1.SyntaxKind.LabeledStatement:\n          case ts$1.SyntaxKind.ExpressionStatement:\n          case ts$1.SyntaxKind.VariableStatement:\n          case ts$1.SyntaxKind.FunctionDeclaration:\n          case ts$1.SyntaxKind.Constructor:\n          case ts$1.SyntaxKind.MethodDeclaration:\n          case ts$1.SyntaxKind.PropertyDeclaration:\n          case ts$1.SyntaxKind.GetAccessor:\n          case ts$1.SyntaxKind.SetAccessor:\n          case ts$1.SyntaxKind.ClassDeclaration:\n          case ts$1.SyntaxKind.ClassExpression:\n          case ts$1.SyntaxKind.InterfaceDeclaration:\n          case ts$1.SyntaxKind.TypeAliasDeclaration:\n          case ts$1.SyntaxKind.EnumMember:\n          case ts$1.SyntaxKind.EnumDeclaration:\n          case ts$1.SyntaxKind.ModuleDeclaration:\n          case ts$1.SyntaxKind.ImportEqualsDeclaration:\n          case ts$1.SyntaxKind.ImportDeclaration:\n          case ts$1.SyntaxKind.NamespaceExportDeclaration:\n          case ts$1.SyntaxKind.ExportAssignment:\n          case ts$1.SyntaxKind.IndexSignature:\n          case ts$1.SyntaxKind.FunctionType:\n          case ts$1.SyntaxKind.ConstructorType:\n          case ts$1.SyntaxKind.JSDocFunctionType:\n          case ts$1.SyntaxKind.ExportDeclaration:\n          case ts$1.SyntaxKind.NamedTupleMember:\n          case ts$1.SyntaxKind.EndOfFileToken:\n            return true;\n          default:\n            return false;\n        }\n      }\n      exports3.canHaveJsDoc = canHaveJsDoc;\n      function getJsDoc(node2, sourceFile) {\n        const result = [];\n        for (const child of node2.getChildren(sourceFile)) {\n          if (!node_1.isJsDoc(child))\n            break;\n          result.push(child);\n        }\n        return result;\n      }\n      exports3.getJsDoc = getJsDoc;\n      function parseJsDocOfNode(node2, considerTrailingComments, sourceFile = node2.getSourceFile()) {\n        if (canHaveJsDoc(node2) && node2.kind !== ts$1.SyntaxKind.EndOfFileToken) {\n          const result = getJsDoc(node2, sourceFile);\n          if (result.length !== 0 || !considerTrailingComments)\n            return result;\n        }\n        return parseJsDocWorker(node2, node2.getStart(sourceFile), sourceFile, considerTrailingComments);\n      }\n      exports3.parseJsDocOfNode = parseJsDocOfNode;\n      function parseJsDocWorker(node2, nodeStart, sourceFile, considerTrailingComments) {\n        const start = ts$1[considerTrailingComments && isSameLine(sourceFile, node2.pos, nodeStart) ? \"forEachTrailingCommentRange\" : \"forEachLeadingCommentRange\"](\n          sourceFile.text,\n          node2.pos,\n          // return object to make `0` a truthy value\n          (pos, _end, kind) => kind === ts$1.SyntaxKind.MultiLineCommentTrivia && sourceFile.text[pos + 2] === \"*\" ? { pos } : void 0\n        );\n        if (start === void 0)\n          return [];\n        const startPos = start.pos;\n        const text = sourceFile.text.slice(startPos, nodeStart);\n        const newSourceFile = ts$1.createSourceFile(\"jsdoc.ts\", `${text}var a;`, sourceFile.languageVersion);\n        const result = getJsDoc(newSourceFile.statements[0], newSourceFile);\n        for (const doc of result)\n          updateNode(doc, node2);\n        return result;\n        function updateNode(n, parent) {\n          n.pos += startPos;\n          n.end += startPos;\n          n.parent = parent;\n          return ts$1.forEachChild(n, (child) => updateNode(child, n), (children) => {\n            children.pos += startPos;\n            children.end += startPos;\n            for (const child of children)\n              updateNode(child, n);\n          });\n        }\n      }\n      (function(ImportKind) {\n        ImportKind[ImportKind[\"ImportDeclaration\"] = 1] = \"ImportDeclaration\";\n        ImportKind[ImportKind[\"ImportEquals\"] = 2] = \"ImportEquals\";\n        ImportKind[ImportKind[\"ExportFrom\"] = 4] = \"ExportFrom\";\n        ImportKind[ImportKind[\"DynamicImport\"] = 8] = \"DynamicImport\";\n        ImportKind[ImportKind[\"Require\"] = 16] = \"Require\";\n        ImportKind[ImportKind[\"ImportType\"] = 32] = \"ImportType\";\n        ImportKind[ImportKind[\"All\"] = 63] = \"All\";\n        ImportKind[ImportKind[\"AllImports\"] = 59] = \"AllImports\";\n        ImportKind[ImportKind[\"AllStaticImports\"] = 3] = \"AllStaticImports\";\n        ImportKind[ImportKind[\"AllImportExpressions\"] = 24] = \"AllImportExpressions\";\n        ImportKind[ImportKind[\"AllRequireLike\"] = 18] = \"AllRequireLike\";\n        ImportKind[ImportKind[\"AllNestedImports\"] = 56] = \"AllNestedImports\";\n        ImportKind[ImportKind[\"AllTopLevelImports\"] = 7] = \"AllTopLevelImports\";\n      })(exports3.ImportKind || (exports3.ImportKind = {}));\n      function findImports(sourceFile, kinds, ignoreFileName = true) {\n        const result = [];\n        for (const node2 of findImportLikeNodes(sourceFile, kinds, ignoreFileName)) {\n          switch (node2.kind) {\n            case ts$1.SyntaxKind.ImportDeclaration:\n              addIfTextualLiteral(node2.moduleSpecifier);\n              break;\n            case ts$1.SyntaxKind.ImportEqualsDeclaration:\n              addIfTextualLiteral(node2.moduleReference.expression);\n              break;\n            case ts$1.SyntaxKind.ExportDeclaration:\n              addIfTextualLiteral(node2.moduleSpecifier);\n              break;\n            case ts$1.SyntaxKind.CallExpression:\n              addIfTextualLiteral(node2.arguments[0]);\n              break;\n            case ts$1.SyntaxKind.ImportType:\n              if (node_1.isLiteralTypeNode(node2.argument))\n                addIfTextualLiteral(node2.argument.literal);\n              break;\n            default:\n              throw new Error(\"unexpected node\");\n          }\n        }\n        return result;\n        function addIfTextualLiteral(node2) {\n          if (node_1.isTextualLiteral(node2))\n            result.push(node2);\n        }\n      }\n      exports3.findImports = findImports;\n      function findImportLikeNodes(sourceFile, kinds, ignoreFileName = true) {\n        return new ImportFinder(sourceFile, kinds, ignoreFileName).find();\n      }\n      exports3.findImportLikeNodes = findImportLikeNodes;\n      class ImportFinder {\n        constructor(_sourceFile, _options, _ignoreFileName) {\n          this._sourceFile = _sourceFile;\n          this._options = _options;\n          this._ignoreFileName = _ignoreFileName;\n          this._result = [];\n        }\n        find() {\n          if (this._sourceFile.isDeclarationFile)\n            this._options &= ~24;\n          if (this._options & 7)\n            this._findImports(this._sourceFile.statements);\n          if (this._options & 56)\n            this._findNestedImports();\n          return this._result;\n        }\n        _findImports(statements) {\n          for (const statement of statements) {\n            if (node_1.isImportDeclaration(statement)) {\n              if (this._options & 1)\n                this._result.push(statement);\n            } else if (node_1.isImportEqualsDeclaration(statement)) {\n              if (this._options & 2 && statement.moduleReference.kind === ts$1.SyntaxKind.ExternalModuleReference)\n                this._result.push(statement);\n            } else if (node_1.isExportDeclaration(statement)) {\n              if (statement.moduleSpecifier !== void 0 && this._options & 4)\n                this._result.push(statement);\n            } else if (node_1.isModuleDeclaration(statement)) {\n              this._findImportsInModule(statement);\n            }\n          }\n        }\n        _findImportsInModule(declaration) {\n          if (declaration.body === void 0)\n            return;\n          if (declaration.body.kind === ts$1.SyntaxKind.ModuleDeclaration)\n            return this._findImportsInModule(declaration.body);\n          this._findImports(declaration.body.statements);\n        }\n        _findNestedImports() {\n          const isJavaScriptFile = this._ignoreFileName || (this._sourceFile.flags & ts$1.NodeFlags.JavaScriptFile) !== 0;\n          let re;\n          let includeJsDoc;\n          if ((this._options & 56) === 16) {\n            if (!isJavaScriptFile)\n              return;\n            re = /\\brequire\\s*[</(]/g;\n            includeJsDoc = false;\n          } else if (this._options & 16 && isJavaScriptFile) {\n            re = /\\b(?:import|require)\\s*[</(]/g;\n            includeJsDoc = (this._options & 32) !== 0;\n          } else {\n            re = /\\bimport\\s*[</(]/g;\n            includeJsDoc = isJavaScriptFile && (this._options & 32) !== 0;\n          }\n          for (let match2 = re.exec(this._sourceFile.text); match2 !== null; match2 = re.exec(this._sourceFile.text)) {\n            const token = getTokenAtPositionWorker(\n              this._sourceFile,\n              match2.index,\n              this._sourceFile,\n              // only look for ImportTypeNode within JSDoc in JS files\n              match2[0][0] === \"i\" && includeJsDoc\n            );\n            if (token.kind === ts$1.SyntaxKind.ImportKeyword) {\n              if (token.end - \"import\".length !== match2.index)\n                continue;\n              switch (token.parent.kind) {\n                case ts$1.SyntaxKind.ImportType:\n                  this._result.push(token.parent);\n                  break;\n                case ts$1.SyntaxKind.CallExpression:\n                  if (token.parent.arguments.length > 1)\n                    this._result.push(token.parent);\n              }\n            } else if (token.kind === ts$1.SyntaxKind.Identifier && token.end - \"require\".length === match2.index && token.parent.kind === ts$1.SyntaxKind.CallExpression && token.parent.expression === token && token.parent.arguments.length === 1) {\n              this._result.push(token.parent);\n            }\n          }\n        }\n      }\n      function isStatementInAmbientContext(node2) {\n        while (node2.flags & ts$1.NodeFlags.NestedNamespace)\n          node2 = node2.parent;\n        return hasModifier(node2.modifiers, ts$1.SyntaxKind.DeclareKeyword) || isAmbientModuleBlock(node2.parent);\n      }\n      exports3.isStatementInAmbientContext = isStatementInAmbientContext;\n      function isAmbientModuleBlock(node2) {\n        while (node2.kind === ts$1.SyntaxKind.ModuleBlock) {\n          do\n            node2 = node2.parent;\n          while (node2.flags & ts$1.NodeFlags.NestedNamespace);\n          if (hasModifier(node2.modifiers, ts$1.SyntaxKind.DeclareKeyword))\n            return true;\n          node2 = node2.parent;\n        }\n        return false;\n      }\n      exports3.isAmbientModuleBlock = isAmbientModuleBlock;\n      function getIIFE(func) {\n        let node2 = func.parent;\n        while (node2.kind === ts$1.SyntaxKind.ParenthesizedExpression)\n          node2 = node2.parent;\n        return node_1.isCallExpression(node2) && func.end <= node2.expression.end ? node2 : void 0;\n      }\n      exports3.getIIFE = getIIFE;\n      function isStrictCompilerOptionEnabled(options, option) {\n        return (options.strict ? options[option] !== false : options[option] === true) && (option !== \"strictPropertyInitialization\" || isStrictCompilerOptionEnabled(options, \"strictNullChecks\"));\n      }\n      exports3.isStrictCompilerOptionEnabled = isStrictCompilerOptionEnabled;\n      function isCompilerOptionEnabled(options, option) {\n        switch (option) {\n          case \"stripInternal\":\n          case \"declarationMap\":\n          case \"emitDeclarationOnly\":\n            return options[option] === true && isCompilerOptionEnabled(options, \"declaration\");\n          case \"declaration\":\n            return options.declaration || isCompilerOptionEnabled(options, \"composite\");\n          case \"incremental\":\n            return options.incremental === void 0 ? isCompilerOptionEnabled(options, \"composite\") : options.incremental;\n          case \"skipDefaultLibCheck\":\n            return options.skipDefaultLibCheck || isCompilerOptionEnabled(options, \"skipLibCheck\");\n          case \"suppressImplicitAnyIndexErrors\":\n            return options.suppressImplicitAnyIndexErrors === true && isCompilerOptionEnabled(options, \"noImplicitAny\");\n          case \"allowSyntheticDefaultImports\":\n            return options.allowSyntheticDefaultImports !== void 0 ? options.allowSyntheticDefaultImports : isCompilerOptionEnabled(options, \"esModuleInterop\") || options.module === ts$1.ModuleKind.System;\n          case \"noUncheckedIndexedAccess\":\n            return options.noUncheckedIndexedAccess === true && isCompilerOptionEnabled(options, \"strictNullChecks\");\n          case \"allowJs\":\n            return options.allowJs === void 0 ? isCompilerOptionEnabled(options, \"checkJs\") : options.allowJs;\n          case \"noImplicitAny\":\n          case \"noImplicitThis\":\n          case \"strictNullChecks\":\n          case \"strictFunctionTypes\":\n          case \"strictPropertyInitialization\":\n          case \"alwaysStrict\":\n          case \"strictBindCallApply\":\n            return isStrictCompilerOptionEnabled(options, option);\n        }\n        return options[option] === true;\n      }\n      exports3.isCompilerOptionEnabled = isCompilerOptionEnabled;\n      function isAmbientModule(node2) {\n        return node2.name.kind === ts$1.SyntaxKind.StringLiteral || (node2.flags & ts$1.NodeFlags.GlobalAugmentation) !== 0;\n      }\n      exports3.isAmbientModule = isAmbientModule;\n      function getCheckJsDirective(source) {\n        return getTsCheckDirective(source);\n      }\n      exports3.getCheckJsDirective = getCheckJsDirective;\n      function getTsCheckDirective(source) {\n        let directive;\n        ts$1.forEachLeadingCommentRange(source, (ts$1.getShebang(source) || \"\").length, (pos, end, kind) => {\n          if (kind === ts$1.SyntaxKind.SingleLineCommentTrivia) {\n            const text = source.slice(pos, end);\n            const match2 = /^\\/{2,3}\\s*@ts-(no)?check(?:\\s|$)/i.exec(text);\n            if (match2 !== null)\n              directive = { pos, end, enabled: match2[1] === void 0 };\n          }\n        });\n        return directive;\n      }\n      exports3.getTsCheckDirective = getTsCheckDirective;\n      function isConstAssertion(node2) {\n        return node_1.isTypeReferenceNode(node2.type) && node2.type.typeName.kind === ts$1.SyntaxKind.Identifier && node2.type.typeName.escapedText === \"const\";\n      }\n      exports3.isConstAssertion = isConstAssertion;\n      function isInConstContext(node2) {\n        let current = node2;\n        while (true) {\n          const parent = current.parent;\n          outer:\n            switch (parent.kind) {\n              case ts$1.SyntaxKind.TypeAssertionExpression:\n              case ts$1.SyntaxKind.AsExpression:\n                return isConstAssertion(parent);\n              case ts$1.SyntaxKind.PrefixUnaryExpression:\n                if (current.kind !== ts$1.SyntaxKind.NumericLiteral)\n                  return false;\n                switch (parent.operator) {\n                  case ts$1.SyntaxKind.PlusToken:\n                  case ts$1.SyntaxKind.MinusToken:\n                    current = parent;\n                    break outer;\n                  default:\n                    return false;\n                }\n              case ts$1.SyntaxKind.PropertyAssignment:\n                if (parent.initializer !== current)\n                  return false;\n                current = parent.parent;\n                break;\n              case ts$1.SyntaxKind.ShorthandPropertyAssignment:\n                current = parent.parent;\n                break;\n              case ts$1.SyntaxKind.ParenthesizedExpression:\n              case ts$1.SyntaxKind.ArrayLiteralExpression:\n              case ts$1.SyntaxKind.ObjectLiteralExpression:\n              case ts$1.SyntaxKind.TemplateExpression:\n                current = parent;\n                break;\n              default:\n                return false;\n            }\n        }\n      }\n      exports3.isInConstContext = isInConstContext;\n      function isReadonlyAssignmentDeclaration(node2, checker) {\n        if (!isBindableObjectDefinePropertyCall(node2))\n          return false;\n        const descriptorType = checker.getTypeAtLocation(node2.arguments[2]);\n        if (descriptorType.getProperty(\"value\") === void 0)\n          return descriptorType.getProperty(\"set\") === void 0;\n        const writableProp = descriptorType.getProperty(\"writable\");\n        if (writableProp === void 0)\n          return false;\n        const writableType = writableProp.valueDeclaration !== void 0 && node_1.isPropertyAssignment(writableProp.valueDeclaration) ? checker.getTypeAtLocation(writableProp.valueDeclaration.initializer) : checker.getTypeOfSymbolAtLocation(writableProp, node2.arguments[2]);\n        return type_1.isBooleanLiteralType(writableType, false);\n      }\n      exports3.isReadonlyAssignmentDeclaration = isReadonlyAssignmentDeclaration;\n      function isBindableObjectDefinePropertyCall(node2) {\n        return node2.arguments.length === 3 && node_1.isEntityNameExpression(node2.arguments[0]) && node_1.isNumericOrStringLikeLiteral(node2.arguments[1]) && node_1.isPropertyAccessExpression(node2.expression) && node2.expression.name.escapedText === \"defineProperty\" && node_1.isIdentifier(node2.expression.expression) && node2.expression.expression.escapedText === \"Object\";\n      }\n      exports3.isBindableObjectDefinePropertyCall = isBindableObjectDefinePropertyCall;\n      function isWellKnownSymbolLiterally(node2) {\n        return ts$1.isPropertyAccessExpression(node2) && ts$1.isIdentifier(node2.expression) && node2.expression.escapedText === \"Symbol\";\n      }\n      exports3.isWellKnownSymbolLiterally = isWellKnownSymbolLiterally;\n      function getPropertyNameOfWellKnownSymbol(node2) {\n        return {\n          displayName: `[Symbol.${node2.name.text}]`,\n          symbolName: \"__@\" + node2.name.text\n        };\n      }\n      exports3.getPropertyNameOfWellKnownSymbol = getPropertyNameOfWellKnownSymbol;\n      const isTsBefore43 = (([major, minor]) => major < \"4\" || major === \"4\" && minor < \"3\")(ts$1.versionMajorMinor.split(\".\"));\n      function getLateBoundPropertyNames(node2, checker) {\n        const result = {\n          known: true,\n          names: []\n        };\n        node2 = unwrapParentheses(node2);\n        if (isTsBefore43 && isWellKnownSymbolLiterally(node2)) {\n          result.names.push(getPropertyNameOfWellKnownSymbol(node2));\n        } else {\n          const type2 = checker.getTypeAtLocation(node2);\n          for (const key of type_1.unionTypeParts(checker.getBaseConstraintOfType(type2) || type2)) {\n            const propertyName = type_1.getPropertyNameFromType(key);\n            if (propertyName) {\n              result.names.push(propertyName);\n            } else {\n              result.known = false;\n            }\n          }\n        }\n        return result;\n      }\n      exports3.getLateBoundPropertyNames = getLateBoundPropertyNames;\n      function getLateBoundPropertyNamesOfPropertyName(node2, checker) {\n        const staticName = getPropertyName(node2);\n        return staticName !== void 0 ? { known: true, names: [{ displayName: staticName, symbolName: ts$1.escapeLeadingUnderscores(staticName) }] } : node2.kind === ts$1.SyntaxKind.PrivateIdentifier ? { known: true, names: [{ displayName: node2.text, symbolName: checker.getSymbolAtLocation(node2).escapedName }] } : getLateBoundPropertyNames(node2.expression, checker);\n      }\n      exports3.getLateBoundPropertyNamesOfPropertyName = getLateBoundPropertyNamesOfPropertyName;\n      function getSingleLateBoundPropertyNameOfPropertyName(node2, checker) {\n        const staticName = getPropertyName(node2);\n        if (staticName !== void 0)\n          return { displayName: staticName, symbolName: ts$1.escapeLeadingUnderscores(staticName) };\n        if (node2.kind === ts$1.SyntaxKind.PrivateIdentifier)\n          return { displayName: node2.text, symbolName: checker.getSymbolAtLocation(node2).escapedName };\n        const { expression } = node2;\n        return isTsBefore43 && isWellKnownSymbolLiterally(expression) ? getPropertyNameOfWellKnownSymbol(expression) : type_1.getPropertyNameFromType(checker.getTypeAtLocation(expression));\n      }\n      exports3.getSingleLateBoundPropertyNameOfPropertyName = getSingleLateBoundPropertyNameOfPropertyName;\n      function unwrapParentheses(node2) {\n        while (node2.kind === ts$1.SyntaxKind.ParenthesizedExpression)\n          node2 = node2.expression;\n        return node2;\n      }\n      exports3.unwrapParentheses = unwrapParentheses;\n      function formatPseudoBigInt(v) {\n        return `${v.negative ? \"-\" : \"\"}${v.base10Value}n`;\n      }\n      exports3.formatPseudoBigInt = formatPseudoBigInt;\n      function hasExhaustiveCaseClauses(node2, checker) {\n        const caseClauses = node2.caseBlock.clauses.filter(node_1.isCaseClause);\n        if (caseClauses.length === 0)\n          return false;\n        const typeParts = type_1.unionTypeParts(checker.getTypeAtLocation(node2.expression));\n        if (typeParts.length > caseClauses.length)\n          return false;\n        const types2 = new Set(typeParts.map(getPrimitiveLiteralFromType));\n        if (types2.has(void 0))\n          return false;\n        const seen = /* @__PURE__ */ new Set();\n        for (const clause of caseClauses) {\n          const expressionType = checker.getTypeAtLocation(clause.expression);\n          if (exports3.isTypeFlagSet(expressionType, ts$1.TypeFlags.Never))\n            continue;\n          const type2 = getPrimitiveLiteralFromType(expressionType);\n          if (types2.has(type2)) {\n            seen.add(type2);\n          } else if (type2 !== \"null\" && type2 !== \"undefined\") {\n            return false;\n          }\n        }\n        return types2.size === seen.size;\n      }\n      exports3.hasExhaustiveCaseClauses = hasExhaustiveCaseClauses;\n      function getPrimitiveLiteralFromType(t) {\n        if (exports3.isTypeFlagSet(t, ts$1.TypeFlags.Null))\n          return \"null\";\n        if (exports3.isTypeFlagSet(t, ts$1.TypeFlags.Undefined))\n          return \"undefined\";\n        if (exports3.isTypeFlagSet(t, ts$1.TypeFlags.NumberLiteral))\n          return `${exports3.isTypeFlagSet(t, ts$1.TypeFlags.EnumLiteral) ? \"enum:\" : \"\"}${t.value}`;\n        if (exports3.isTypeFlagSet(t, ts$1.TypeFlags.StringLiteral))\n          return `${exports3.isTypeFlagSet(t, ts$1.TypeFlags.EnumLiteral) ? \"enum:\" : \"\"}string:${t.value}`;\n        if (exports3.isTypeFlagSet(t, ts$1.TypeFlags.BigIntLiteral))\n          return formatPseudoBigInt(t.value);\n        if (_3_2_1.isUniqueESSymbolType(t))\n          return t.escapedName;\n        if (type_1.isBooleanLiteralType(t, true))\n          return \"true\";\n        if (type_1.isBooleanLiteralType(t, false))\n          return \"false\";\n      }\n      function getBaseOfClassLikeExpression(node2) {\n        var _a;\n        if (((_a = node2.heritageClauses) === null || _a === void 0 ? void 0 : _a[0].token) === ts$1.SyntaxKind.ExtendsKeyword)\n          return node2.heritageClauses[0].types[0];\n      }\n      exports3.getBaseOfClassLikeExpression = getBaseOfClassLikeExpression;\n    })(util$1);\n    return util$1;\n  }\n  var usage = {};\n  var hasRequiredUsage;\n  function requireUsage() {\n    if (hasRequiredUsage)\n      return usage;\n    hasRequiredUsage = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.collectVariableUsage = exports3.getDeclarationDomain = exports3.getUsageDomain = exports3.UsageDomain = exports3.DeclarationDomain = void 0;\n      const util_1 = requireUtil$1();\n      const ts$1 = ts;\n      (function(DeclarationDomain) {\n        DeclarationDomain[DeclarationDomain[\"Namespace\"] = 1] = \"Namespace\";\n        DeclarationDomain[DeclarationDomain[\"Type\"] = 2] = \"Type\";\n        DeclarationDomain[DeclarationDomain[\"Value\"] = 4] = \"Value\";\n        DeclarationDomain[DeclarationDomain[\"Import\"] = 8] = \"Import\";\n        DeclarationDomain[DeclarationDomain[\"Any\"] = 7] = \"Any\";\n      })(exports3.DeclarationDomain || (exports3.DeclarationDomain = {}));\n      (function(UsageDomain) {\n        UsageDomain[UsageDomain[\"Namespace\"] = 1] = \"Namespace\";\n        UsageDomain[UsageDomain[\"Type\"] = 2] = \"Type\";\n        UsageDomain[UsageDomain[\"Value\"] = 4] = \"Value\";\n        UsageDomain[UsageDomain[\"ValueOrNamespace\"] = 5] = \"ValueOrNamespace\";\n        UsageDomain[UsageDomain[\"Any\"] = 7] = \"Any\";\n        UsageDomain[UsageDomain[\"TypeQuery\"] = 8] = \"TypeQuery\";\n      })(exports3.UsageDomain || (exports3.UsageDomain = {}));\n      function getUsageDomain(node2) {\n        const parent = node2.parent;\n        switch (parent.kind) {\n          case ts$1.SyntaxKind.TypeReference:\n            return node2.originalKeywordKind !== ts$1.SyntaxKind.ConstKeyword ? 2 : void 0;\n          case ts$1.SyntaxKind.ExpressionWithTypeArguments:\n            return parent.parent.token === ts$1.SyntaxKind.ImplementsKeyword || parent.parent.parent.kind === ts$1.SyntaxKind.InterfaceDeclaration ? 2 : 4;\n          case ts$1.SyntaxKind.TypeQuery:\n            return 5 | 8;\n          case ts$1.SyntaxKind.QualifiedName:\n            if (parent.left === node2) {\n              if (getEntityNameParent(parent).kind === ts$1.SyntaxKind.TypeQuery)\n                return 1 | 8;\n              return 1;\n            }\n            break;\n          case ts$1.SyntaxKind.ExportSpecifier:\n            if (parent.propertyName === void 0 || parent.propertyName === node2)\n              return 7;\n            break;\n          case ts$1.SyntaxKind.ExportAssignment:\n            return 7;\n          case ts$1.SyntaxKind.BindingElement:\n            if (parent.initializer === node2)\n              return 5;\n            break;\n          case ts$1.SyntaxKind.Parameter:\n          case ts$1.SyntaxKind.EnumMember:\n          case ts$1.SyntaxKind.PropertyDeclaration:\n          case ts$1.SyntaxKind.VariableDeclaration:\n          case ts$1.SyntaxKind.PropertyAssignment:\n          case ts$1.SyntaxKind.PropertyAccessExpression:\n          case ts$1.SyntaxKind.ImportEqualsDeclaration:\n            if (parent.name !== node2)\n              return 5;\n            break;\n          case ts$1.SyntaxKind.JsxAttribute:\n          case ts$1.SyntaxKind.FunctionDeclaration:\n          case ts$1.SyntaxKind.FunctionExpression:\n          case ts$1.SyntaxKind.NamespaceImport:\n          case ts$1.SyntaxKind.ClassDeclaration:\n          case ts$1.SyntaxKind.ClassExpression:\n          case ts$1.SyntaxKind.ModuleDeclaration:\n          case ts$1.SyntaxKind.MethodDeclaration:\n          case ts$1.SyntaxKind.EnumDeclaration:\n          case ts$1.SyntaxKind.GetAccessor:\n          case ts$1.SyntaxKind.SetAccessor:\n          case ts$1.SyntaxKind.LabeledStatement:\n          case ts$1.SyntaxKind.BreakStatement:\n          case ts$1.SyntaxKind.ContinueStatement:\n          case ts$1.SyntaxKind.ImportClause:\n          case ts$1.SyntaxKind.ImportSpecifier:\n          case ts$1.SyntaxKind.TypePredicate:\n          case ts$1.SyntaxKind.MethodSignature:\n          case ts$1.SyntaxKind.PropertySignature:\n          case ts$1.SyntaxKind.NamespaceExportDeclaration:\n          case ts$1.SyntaxKind.NamespaceExport:\n          case ts$1.SyntaxKind.InterfaceDeclaration:\n          case ts$1.SyntaxKind.TypeAliasDeclaration:\n          case ts$1.SyntaxKind.TypeParameter:\n          case ts$1.SyntaxKind.NamedTupleMember:\n            break;\n          default:\n            return 5;\n        }\n      }\n      exports3.getUsageDomain = getUsageDomain;\n      function getDeclarationDomain(node2) {\n        switch (node2.parent.kind) {\n          case ts$1.SyntaxKind.TypeParameter:\n          case ts$1.SyntaxKind.InterfaceDeclaration:\n          case ts$1.SyntaxKind.TypeAliasDeclaration:\n            return 2;\n          case ts$1.SyntaxKind.ClassDeclaration:\n          case ts$1.SyntaxKind.ClassExpression:\n            return 2 | 4;\n          case ts$1.SyntaxKind.EnumDeclaration:\n            return 7;\n          case ts$1.SyntaxKind.NamespaceImport:\n          case ts$1.SyntaxKind.ImportClause:\n            return 7 | 8;\n          case ts$1.SyntaxKind.ImportEqualsDeclaration:\n          case ts$1.SyntaxKind.ImportSpecifier:\n            return node2.parent.name === node2 ? 7 | 8 : void 0;\n          case ts$1.SyntaxKind.ModuleDeclaration:\n            return 1;\n          case ts$1.SyntaxKind.Parameter:\n            if (node2.parent.parent.kind === ts$1.SyntaxKind.IndexSignature || node2.originalKeywordKind === ts$1.SyntaxKind.ThisKeyword)\n              return;\n          case ts$1.SyntaxKind.BindingElement:\n          case ts$1.SyntaxKind.VariableDeclaration:\n            return node2.parent.name === node2 ? 4 : void 0;\n          case ts$1.SyntaxKind.FunctionDeclaration:\n          case ts$1.SyntaxKind.FunctionExpression:\n            return 4;\n        }\n      }\n      exports3.getDeclarationDomain = getDeclarationDomain;\n      function collectVariableUsage(sourceFile) {\n        return new UsageWalker().getUsage(sourceFile);\n      }\n      exports3.collectVariableUsage = collectVariableUsage;\n      class AbstractScope {\n        constructor(_global) {\n          this._global = _global;\n          this._variables = /* @__PURE__ */ new Map();\n          this._uses = [];\n          this._namespaceScopes = void 0;\n          this._enumScopes = void 0;\n        }\n        addVariable(identifier, name, selector, exported, domain) {\n          const variables = this.getDestinationScope(selector).getVariables();\n          const declaration = {\n            domain,\n            exported,\n            declaration: name\n          };\n          const variable = variables.get(identifier);\n          if (variable === void 0) {\n            variables.set(identifier, {\n              domain,\n              declarations: [declaration],\n              uses: []\n            });\n          } else {\n            variable.domain |= domain;\n            variable.declarations.push(declaration);\n          }\n        }\n        addUse(use) {\n          this._uses.push(use);\n        }\n        getVariables() {\n          return this._variables;\n        }\n        getFunctionScope() {\n          return this;\n        }\n        end(cb) {\n          if (this._namespaceScopes !== void 0)\n            this._namespaceScopes.forEach((value) => value.finish(cb));\n          this._namespaceScopes = this._enumScopes = void 0;\n          this._applyUses();\n          this._variables.forEach((variable) => {\n            for (const declaration of variable.declarations) {\n              const result = {\n                declarations: [],\n                domain: declaration.domain,\n                exported: declaration.exported,\n                inGlobalScope: this._global,\n                uses: []\n              };\n              for (const other of variable.declarations)\n                if (other.domain & declaration.domain)\n                  result.declarations.push(other.declaration);\n              for (const use of variable.uses)\n                if (use.domain & declaration.domain)\n                  result.uses.push(use);\n              cb(result, declaration.declaration, this);\n            }\n          });\n        }\n        // tslint:disable-next-line:prefer-function-over-method\n        markExported(_name) {\n        }\n        // only relevant for the root scope\n        createOrReuseNamespaceScope(name, _exported, ambient, hasExportStatement) {\n          let scope;\n          if (this._namespaceScopes === void 0) {\n            this._namespaceScopes = /* @__PURE__ */ new Map();\n          } else {\n            scope = this._namespaceScopes.get(name);\n          }\n          if (scope === void 0) {\n            scope = new NamespaceScope(ambient, hasExportStatement, this);\n            this._namespaceScopes.set(name, scope);\n          } else {\n            scope.refresh(ambient, hasExportStatement);\n          }\n          return scope;\n        }\n        createOrReuseEnumScope(name, _exported) {\n          let scope;\n          if (this._enumScopes === void 0) {\n            this._enumScopes = /* @__PURE__ */ new Map();\n          } else {\n            scope = this._enumScopes.get(name);\n          }\n          if (scope === void 0) {\n            scope = new EnumScope(this);\n            this._enumScopes.set(name, scope);\n          }\n          return scope;\n        }\n        _applyUses() {\n          for (const use of this._uses)\n            if (!this._applyUse(use))\n              this._addUseToParent(use);\n          this._uses = [];\n        }\n        _applyUse(use, variables = this._variables) {\n          const variable = variables.get(use.location.text);\n          if (variable === void 0 || (variable.domain & use.domain) === 0)\n            return false;\n          variable.uses.push(use);\n          return true;\n        }\n        _addUseToParent(_use) {\n        }\n        // tslint:disable-line:prefer-function-over-method\n      }\n      class RootScope extends AbstractScope {\n        constructor(_exportAll, global2) {\n          super(global2);\n          this._exportAll = _exportAll;\n          this._exports = void 0;\n          this._innerScope = new NonRootScope(\n            this,\n            1\n            /* Function */\n          );\n        }\n        addVariable(identifier, name, selector, exported, domain) {\n          if (domain & 8)\n            return super.addVariable(identifier, name, selector, exported, domain);\n          return this._innerScope.addVariable(identifier, name, selector, exported, domain);\n        }\n        addUse(use, origin) {\n          if (origin === this._innerScope)\n            return super.addUse(use);\n          return this._innerScope.addUse(use);\n        }\n        markExported(id) {\n          if (this._exports === void 0) {\n            this._exports = [id.text];\n          } else {\n            this._exports.push(id.text);\n          }\n        }\n        end(cb) {\n          this._innerScope.end((value, key) => {\n            value.exported = value.exported || this._exportAll || this._exports !== void 0 && this._exports.includes(key.text);\n            value.inGlobalScope = this._global;\n            return cb(value, key, this);\n          });\n          return super.end((value, key, scope) => {\n            value.exported = value.exported || scope === this && this._exports !== void 0 && this._exports.includes(key.text);\n            return cb(value, key, scope);\n          });\n        }\n        getDestinationScope() {\n          return this;\n        }\n      }\n      class NonRootScope extends AbstractScope {\n        constructor(_parent, _boundary) {\n          super(false);\n          this._parent = _parent;\n          this._boundary = _boundary;\n        }\n        _addUseToParent(use) {\n          return this._parent.addUse(use, this);\n        }\n        getDestinationScope(selector) {\n          return this._boundary & selector ? this : this._parent.getDestinationScope(selector);\n        }\n      }\n      class EnumScope extends NonRootScope {\n        constructor(parent) {\n          super(\n            parent,\n            1\n            /* Function */\n          );\n        }\n        end() {\n          this._applyUses();\n        }\n      }\n      class ConditionalTypeScope extends NonRootScope {\n        constructor(parent) {\n          super(\n            parent,\n            8\n            /* ConditionalType */\n          );\n          this._state = 0;\n        }\n        updateState(newState) {\n          this._state = newState;\n        }\n        addUse(use) {\n          if (this._state === 2)\n            return void this._uses.push(use);\n          return this._parent.addUse(use, this);\n        }\n      }\n      class FunctionScope extends NonRootScope {\n        constructor(parent) {\n          super(\n            parent,\n            1\n            /* Function */\n          );\n        }\n        beginBody() {\n          this._applyUses();\n        }\n      }\n      class AbstractNamedExpressionScope extends NonRootScope {\n        constructor(_name, _domain, parent) {\n          super(\n            parent,\n            1\n            /* Function */\n          );\n          this._name = _name;\n          this._domain = _domain;\n        }\n        end(cb) {\n          this._innerScope.end(cb);\n          return cb({\n            declarations: [this._name],\n            domain: this._domain,\n            exported: false,\n            uses: this._uses,\n            inGlobalScope: false\n          }, this._name, this);\n        }\n        addUse(use, source) {\n          if (source !== this._innerScope)\n            return this._innerScope.addUse(use);\n          if (use.domain & this._domain && use.location.text === this._name.text) {\n            this._uses.push(use);\n          } else {\n            return this._parent.addUse(use, this);\n          }\n        }\n        getFunctionScope() {\n          return this._innerScope;\n        }\n        getDestinationScope() {\n          return this._innerScope;\n        }\n      }\n      class FunctionExpressionScope extends AbstractNamedExpressionScope {\n        constructor(name, parent) {\n          super(name, 4, parent);\n          this._innerScope = new FunctionScope(this);\n        }\n        beginBody() {\n          return this._innerScope.beginBody();\n        }\n      }\n      class ClassExpressionScope extends AbstractNamedExpressionScope {\n        constructor(name, parent) {\n          super(name, 4 | 2, parent);\n          this._innerScope = new NonRootScope(\n            this,\n            1\n            /* Function */\n          );\n        }\n      }\n      class BlockScope extends NonRootScope {\n        constructor(_functionScope, parent) {\n          super(\n            parent,\n            2\n            /* Block */\n          );\n          this._functionScope = _functionScope;\n        }\n        getFunctionScope() {\n          return this._functionScope;\n        }\n      }\n      function mapDeclaration(declaration) {\n        return {\n          declaration,\n          exported: true,\n          domain: getDeclarationDomain(declaration)\n        };\n      }\n      class NamespaceScope extends NonRootScope {\n        constructor(_ambient, _hasExport, parent) {\n          super(\n            parent,\n            1\n            /* Function */\n          );\n          this._ambient = _ambient;\n          this._hasExport = _hasExport;\n          this._innerScope = new NonRootScope(\n            this,\n            1\n            /* Function */\n          );\n          this._exports = void 0;\n        }\n        finish(cb) {\n          return super.end(cb);\n        }\n        end(cb) {\n          this._innerScope.end((variable, key, scope) => {\n            if (scope !== this._innerScope || !variable.exported && (!this._ambient || this._exports !== void 0 && !this._exports.has(key.text)))\n              return cb(variable, key, scope);\n            const namespaceVar = this._variables.get(key.text);\n            if (namespaceVar === void 0) {\n              this._variables.set(key.text, {\n                declarations: variable.declarations.map(mapDeclaration),\n                domain: variable.domain,\n                uses: [...variable.uses]\n              });\n            } else {\n              outer:\n                for (const declaration of variable.declarations) {\n                  for (const existing of namespaceVar.declarations)\n                    if (existing.declaration === declaration)\n                      continue outer;\n                  namespaceVar.declarations.push(mapDeclaration(declaration));\n                }\n              namespaceVar.domain |= variable.domain;\n              for (const use of variable.uses) {\n                if (namespaceVar.uses.includes(use))\n                  continue;\n                namespaceVar.uses.push(use);\n              }\n            }\n          });\n          this._applyUses();\n          this._innerScope = new NonRootScope(\n            this,\n            1\n            /* Function */\n          );\n        }\n        createOrReuseNamespaceScope(name, exported, ambient, hasExportStatement) {\n          if (!exported && (!this._ambient || this._hasExport))\n            return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);\n          return super.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);\n        }\n        createOrReuseEnumScope(name, exported) {\n          if (!exported && (!this._ambient || this._hasExport))\n            return this._innerScope.createOrReuseEnumScope(name, exported);\n          return super.createOrReuseEnumScope(name, exported);\n        }\n        addUse(use, source) {\n          if (source !== this._innerScope)\n            return this._innerScope.addUse(use);\n          this._uses.push(use);\n        }\n        refresh(ambient, hasExport) {\n          this._ambient = ambient;\n          this._hasExport = hasExport;\n        }\n        markExported(name, _as) {\n          if (this._exports === void 0)\n            this._exports = /* @__PURE__ */ new Set();\n          this._exports.add(name.text);\n        }\n        getDestinationScope() {\n          return this._innerScope;\n        }\n      }\n      function getEntityNameParent(name) {\n        let parent = name.parent;\n        while (parent.kind === ts$1.SyntaxKind.QualifiedName)\n          parent = parent.parent;\n        return parent;\n      }\n      class UsageWalker {\n        constructor() {\n          this._result = /* @__PURE__ */ new Map();\n        }\n        getUsage(sourceFile) {\n          const variableCallback = (variable, key) => {\n            this._result.set(key, variable);\n          };\n          const isModule = ts$1.isExternalModule(sourceFile);\n          this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);\n          const cb = (node2) => {\n            if (util_1.isBlockScopeBoundary(node2))\n              return continueWithScope(node2, new BlockScope(this._scope.getFunctionScope(), this._scope), handleBlockScope);\n            switch (node2.kind) {\n              case ts$1.SyntaxKind.ClassExpression:\n                return continueWithScope(node2, node2.name !== void 0 ? new ClassExpressionScope(node2.name, this._scope) : new NonRootScope(\n                  this._scope,\n                  1\n                  /* Function */\n                ));\n              case ts$1.SyntaxKind.ClassDeclaration:\n                this._handleDeclaration(\n                  node2,\n                  true,\n                  4 | 2\n                  /* Type */\n                );\n                return continueWithScope(node2, new NonRootScope(\n                  this._scope,\n                  1\n                  /* Function */\n                ));\n              case ts$1.SyntaxKind.InterfaceDeclaration:\n              case ts$1.SyntaxKind.TypeAliasDeclaration:\n                this._handleDeclaration(\n                  node2,\n                  true,\n                  2\n                  /* Type */\n                );\n                return continueWithScope(node2, new NonRootScope(\n                  this._scope,\n                  4\n                  /* Type */\n                ));\n              case ts$1.SyntaxKind.EnumDeclaration:\n                this._handleDeclaration(\n                  node2,\n                  true,\n                  7\n                  /* Any */\n                );\n                return continueWithScope(node2, this._scope.createOrReuseEnumScope(node2.name.text, util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.ExportKeyword)));\n              case ts$1.SyntaxKind.ModuleDeclaration:\n                return this._handleModule(node2, continueWithScope);\n              case ts$1.SyntaxKind.MappedType:\n                return continueWithScope(node2, new NonRootScope(\n                  this._scope,\n                  4\n                  /* Type */\n                ));\n              case ts$1.SyntaxKind.FunctionExpression:\n              case ts$1.SyntaxKind.ArrowFunction:\n              case ts$1.SyntaxKind.Constructor:\n              case ts$1.SyntaxKind.MethodDeclaration:\n              case ts$1.SyntaxKind.FunctionDeclaration:\n              case ts$1.SyntaxKind.GetAccessor:\n              case ts$1.SyntaxKind.SetAccessor:\n              case ts$1.SyntaxKind.MethodSignature:\n              case ts$1.SyntaxKind.CallSignature:\n              case ts$1.SyntaxKind.ConstructSignature:\n              case ts$1.SyntaxKind.ConstructorType:\n              case ts$1.SyntaxKind.FunctionType:\n                return this._handleFunctionLikeDeclaration(node2, cb, variableCallback);\n              case ts$1.SyntaxKind.ConditionalType:\n                return this._handleConditionalType(node2, cb, variableCallback);\n              case ts$1.SyntaxKind.VariableDeclarationList:\n                this._handleVariableDeclaration(node2);\n                break;\n              case ts$1.SyntaxKind.Parameter:\n                if (node2.parent.kind !== ts$1.SyntaxKind.IndexSignature && (node2.name.kind !== ts$1.SyntaxKind.Identifier || node2.name.originalKeywordKind !== ts$1.SyntaxKind.ThisKeyword))\n                  this._handleBindingName(node2.name, false, false);\n                break;\n              case ts$1.SyntaxKind.EnumMember:\n                this._scope.addVariable(\n                  util_1.getPropertyName(node2.name),\n                  node2.name,\n                  1,\n                  true,\n                  4\n                  /* Value */\n                );\n                break;\n              case ts$1.SyntaxKind.ImportClause:\n              case ts$1.SyntaxKind.ImportSpecifier:\n              case ts$1.SyntaxKind.NamespaceImport:\n              case ts$1.SyntaxKind.ImportEqualsDeclaration:\n                this._handleDeclaration(\n                  node2,\n                  false,\n                  7 | 8\n                  /* Import */\n                );\n                break;\n              case ts$1.SyntaxKind.TypeParameter:\n                this._scope.addVariable(\n                  node2.name.text,\n                  node2.name,\n                  node2.parent.kind === ts$1.SyntaxKind.InferType ? 8 : 7,\n                  false,\n                  2\n                  /* Type */\n                );\n                break;\n              case ts$1.SyntaxKind.ExportSpecifier:\n                if (node2.propertyName !== void 0)\n                  return this._scope.markExported(node2.propertyName, node2.name);\n                return this._scope.markExported(node2.name);\n              case ts$1.SyntaxKind.ExportAssignment:\n                if (node2.expression.kind === ts$1.SyntaxKind.Identifier)\n                  return this._scope.markExported(node2.expression);\n                break;\n              case ts$1.SyntaxKind.Identifier:\n                const domain = getUsageDomain(node2);\n                if (domain !== void 0)\n                  this._scope.addUse({ domain, location: node2 });\n                return;\n            }\n            return ts$1.forEachChild(node2, cb);\n          };\n          const continueWithScope = (node2, scope, next = forEachChild) => {\n            const savedScope = this._scope;\n            this._scope = scope;\n            next(node2);\n            this._scope.end(variableCallback);\n            this._scope = savedScope;\n          };\n          const handleBlockScope = (node2) => {\n            if (node2.kind === ts$1.SyntaxKind.CatchClause && node2.variableDeclaration !== void 0)\n              this._handleBindingName(node2.variableDeclaration.name, true, false);\n            return ts$1.forEachChild(node2, cb);\n          };\n          ts$1.forEachChild(sourceFile, cb);\n          this._scope.end(variableCallback);\n          return this._result;\n          function forEachChild(node2) {\n            return ts$1.forEachChild(node2, cb);\n          }\n        }\n        _handleConditionalType(node2, cb, varCb) {\n          const savedScope = this._scope;\n          const scope = this._scope = new ConditionalTypeScope(savedScope);\n          cb(node2.checkType);\n          scope.updateState(\n            1\n            /* Extends */\n          );\n          cb(node2.extendsType);\n          scope.updateState(\n            2\n            /* TrueType */\n          );\n          cb(node2.trueType);\n          scope.updateState(\n            3\n            /* FalseType */\n          );\n          cb(node2.falseType);\n          scope.end(varCb);\n          this._scope = savedScope;\n        }\n        _handleFunctionLikeDeclaration(node2, cb, varCb) {\n          if (node2.decorators !== void 0)\n            node2.decorators.forEach(cb);\n          const savedScope = this._scope;\n          if (node2.kind === ts$1.SyntaxKind.FunctionDeclaration)\n            this._handleDeclaration(\n              node2,\n              false,\n              4\n              /* Value */\n            );\n          const scope = this._scope = node2.kind === ts$1.SyntaxKind.FunctionExpression && node2.name !== void 0 ? new FunctionExpressionScope(node2.name, savedScope) : new FunctionScope(savedScope);\n          if (node2.name !== void 0)\n            cb(node2.name);\n          if (node2.typeParameters !== void 0)\n            node2.typeParameters.forEach(cb);\n          node2.parameters.forEach(cb);\n          if (node2.type !== void 0)\n            cb(node2.type);\n          if (node2.body !== void 0) {\n            scope.beginBody();\n            cb(node2.body);\n          }\n          scope.end(varCb);\n          this._scope = savedScope;\n        }\n        _handleModule(node2, next) {\n          if (node2.flags & ts$1.NodeFlags.GlobalAugmentation)\n            return next(node2, this._scope.createOrReuseNamespaceScope(\"-global\", false, true, false));\n          if (node2.name.kind === ts$1.SyntaxKind.Identifier) {\n            const exported = isNamespaceExported(node2);\n            this._scope.addVariable(\n              node2.name.text,\n              node2.name,\n              1,\n              exported,\n              1 | 4\n              /* Value */\n            );\n            const ambient = util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.DeclareKeyword);\n            return next(node2, this._scope.createOrReuseNamespaceScope(node2.name.text, exported, ambient, ambient && namespaceHasExportStatement(node2)));\n          }\n          return next(node2, this._scope.createOrReuseNamespaceScope(`\"${node2.name.text}\"`, false, true, namespaceHasExportStatement(node2)));\n        }\n        _handleDeclaration(node2, blockScoped, domain) {\n          if (node2.name !== void 0)\n            this._scope.addVariable(node2.name.text, node2.name, blockScoped ? 3 : 1, util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.ExportKeyword), domain);\n        }\n        _handleBindingName(name, blockScoped, exported) {\n          if (name.kind === ts$1.SyntaxKind.Identifier)\n            return this._scope.addVariable(\n              name.text,\n              name,\n              blockScoped ? 3 : 1,\n              exported,\n              4\n              /* Value */\n            );\n          util_1.forEachDestructuringIdentifier(name, (declaration) => {\n            this._scope.addVariable(\n              declaration.name.text,\n              declaration.name,\n              blockScoped ? 3 : 1,\n              exported,\n              4\n              /* Value */\n            );\n          });\n        }\n        _handleVariableDeclaration(declarationList) {\n          const blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);\n          const exported = declarationList.parent.kind === ts$1.SyntaxKind.VariableStatement && util_1.hasModifier(declarationList.parent.modifiers, ts$1.SyntaxKind.ExportKeyword);\n          for (const declaration of declarationList.declarations)\n            this._handleBindingName(declaration.name, blockScoped, exported);\n        }\n      }\n      function isNamespaceExported(node2) {\n        return node2.parent.kind === ts$1.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node2.modifiers, ts$1.SyntaxKind.ExportKeyword);\n      }\n      function namespaceHasExportStatement(ns) {\n        if (ns.body === void 0 || ns.body.kind !== ts$1.SyntaxKind.ModuleBlock)\n          return false;\n        return containsExportStatement(ns.body);\n      }\n      function containsExportStatement(block) {\n        for (const statement of block.statements)\n          if (statement.kind === ts$1.SyntaxKind.ExportDeclaration || statement.kind === ts$1.SyntaxKind.ExportAssignment)\n            return true;\n        return false;\n      }\n    })(usage);\n    return usage;\n  }\n  var controlFlow = {};\n  var hasRequiredControlFlow;\n  function requireControlFlow() {\n    if (hasRequiredControlFlow)\n      return controlFlow;\n    hasRequiredControlFlow = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      exports3.callExpressionAffectsControlFlow = exports3.SignatureEffect = exports3.getControlFlowEnd = exports3.endsControlFlow = void 0;\n      const ts$1 = ts;\n      const node_1 = requireNode();\n      const util_1 = requireUtil$1();\n      function endsControlFlow(statement, checker) {\n        return getControlFlowEnd(statement, checker).end;\n      }\n      exports3.endsControlFlow = endsControlFlow;\n      const defaultControlFlowEnd = { statements: [], end: false };\n      function getControlFlowEnd(statement, checker) {\n        return node_1.isBlockLike(statement) ? handleBlock(statement, checker) : getControlFlowEndWorker(statement, checker);\n      }\n      exports3.getControlFlowEnd = getControlFlowEnd;\n      function getControlFlowEndWorker(statement, checker) {\n        switch (statement.kind) {\n          case ts$1.SyntaxKind.ReturnStatement:\n          case ts$1.SyntaxKind.ThrowStatement:\n          case ts$1.SyntaxKind.ContinueStatement:\n          case ts$1.SyntaxKind.BreakStatement:\n            return { statements: [statement], end: true };\n          case ts$1.SyntaxKind.Block:\n            return handleBlock(statement, checker);\n          case ts$1.SyntaxKind.ForStatement:\n          case ts$1.SyntaxKind.WhileStatement:\n            return handleForAndWhileStatement(statement, checker);\n          case ts$1.SyntaxKind.ForOfStatement:\n          case ts$1.SyntaxKind.ForInStatement:\n            return handleForInOrOfStatement(statement, checker);\n          case ts$1.SyntaxKind.DoStatement:\n            return matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);\n          case ts$1.SyntaxKind.IfStatement:\n            return handleIfStatement(statement, checker);\n          case ts$1.SyntaxKind.SwitchStatement:\n            return matchBreakOrContinue(handleSwitchStatement(statement, checker), node_1.isBreakStatement);\n          case ts$1.SyntaxKind.TryStatement:\n            return handleTryStatement(statement, checker);\n          case ts$1.SyntaxKind.LabeledStatement:\n            return matchLabel(getControlFlowEndWorker(statement.statement, checker), statement.label);\n          case ts$1.SyntaxKind.WithStatement:\n            return getControlFlowEndWorker(statement.statement, checker);\n          case ts$1.SyntaxKind.ExpressionStatement:\n            if (checker === void 0)\n              return defaultControlFlowEnd;\n            return handleExpressionStatement(statement, checker);\n          default:\n            return defaultControlFlowEnd;\n        }\n      }\n      function handleBlock(statement, checker) {\n        const result = { statements: [], end: false };\n        for (const s of statement.statements) {\n          const current = getControlFlowEndWorker(s, checker);\n          result.statements.push(...current.statements);\n          if (current.end) {\n            result.end = true;\n            break;\n          }\n        }\n        return result;\n      }\n      function handleForInOrOfStatement(statement, checker) {\n        const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);\n        end.end = false;\n        return end;\n      }\n      function handleForAndWhileStatement(statement, checker) {\n        const constantCondition = statement.kind === ts$1.SyntaxKind.WhileStatement ? getConstantCondition(statement.expression) : statement.condition === void 0 || getConstantCondition(statement.condition);\n        if (constantCondition === false)\n          return defaultControlFlowEnd;\n        const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);\n        if (constantCondition === void 0)\n          end.end = false;\n        return end;\n      }\n      function getConstantCondition(node2) {\n        switch (node2.kind) {\n          case ts$1.SyntaxKind.TrueKeyword:\n            return true;\n          case ts$1.SyntaxKind.FalseKeyword:\n            return false;\n          default:\n            return;\n        }\n      }\n      function handleIfStatement(node2, checker) {\n        switch (getConstantCondition(node2.expression)) {\n          case true:\n            return getControlFlowEndWorker(node2.thenStatement, checker);\n          case false:\n            return node2.elseStatement === void 0 ? defaultControlFlowEnd : getControlFlowEndWorker(node2.elseStatement, checker);\n        }\n        const then = getControlFlowEndWorker(node2.thenStatement, checker);\n        if (node2.elseStatement === void 0)\n          return {\n            statements: then.statements,\n            end: false\n          };\n        const elze = getControlFlowEndWorker(node2.elseStatement, checker);\n        return {\n          statements: [...then.statements, ...elze.statements],\n          end: then.end && elze.end\n        };\n      }\n      function handleSwitchStatement(node2, checker) {\n        let hasDefault = false;\n        const result = {\n          statements: [],\n          end: false\n        };\n        for (const clause of node2.caseBlock.clauses) {\n          if (clause.kind === ts$1.SyntaxKind.DefaultClause)\n            hasDefault = true;\n          const current = handleBlock(clause, checker);\n          result.end = current.end;\n          result.statements.push(...current.statements);\n        }\n        result.end && (result.end = hasDefault || checker !== void 0 && util_1.hasExhaustiveCaseClauses(node2, checker));\n        return result;\n      }\n      function handleTryStatement(node2, checker) {\n        let finallyResult;\n        if (node2.finallyBlock !== void 0) {\n          finallyResult = handleBlock(node2.finallyBlock, checker);\n          if (finallyResult.end)\n            return finallyResult;\n        }\n        const tryResult = handleBlock(node2.tryBlock, checker);\n        if (node2.catchClause === void 0)\n          return { statements: finallyResult.statements.concat(tryResult.statements), end: tryResult.end };\n        const catchResult = handleBlock(node2.catchClause.block, checker);\n        return {\n          statements: tryResult.statements.filter((s) => s.kind !== ts$1.SyntaxKind.ThrowStatement && s.kind !== ts$1.SyntaxKind.ExpressionStatement).concat(catchResult.statements, finallyResult === void 0 ? [] : finallyResult.statements),\n          end: tryResult.end && catchResult.end\n          // only ends control flow if try AND catch definitely end control flow\n        };\n      }\n      function isDottedNameWithExplicitTypeAnnotation(node2, checker) {\n        while (true) {\n          switch (node2.kind) {\n            case ts$1.SyntaxKind.Identifier: {\n              const symbol = checker.getExportSymbolOfSymbol(checker.getSymbolAtLocation(node2));\n              return isExplicitlyTypedSymbol(util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Alias) ? checker.getAliasedSymbol(symbol) : symbol, checker);\n            }\n            case ts$1.SyntaxKind.ThisKeyword:\n              return isExplicitlyTypedThis(node2);\n            case ts$1.SyntaxKind.SuperKeyword:\n              return true;\n            case ts$1.SyntaxKind.PropertyAccessExpression:\n              if (!isExplicitlyTypedSymbol(checker.getSymbolAtLocation(node2), checker))\n                return false;\n            case ts$1.SyntaxKind.ParenthesizedExpression:\n              node2 = node2.expression;\n              continue;\n            default:\n              return false;\n          }\n        }\n      }\n      function isExplicitlyTypedSymbol(symbol, checker) {\n        if (symbol === void 0)\n          return false;\n        if (util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Function | ts$1.SymbolFlags.Method | ts$1.SymbolFlags.Class | ts$1.SymbolFlags.ValueModule))\n          return true;\n        if (!util_1.isSymbolFlagSet(symbol, ts$1.SymbolFlags.Variable | ts$1.SymbolFlags.Property))\n          return false;\n        if (symbol.valueDeclaration === void 0)\n          return false;\n        if (declarationHasExplicitTypeAnnotation(symbol.valueDeclaration))\n          return true;\n        return node_1.isVariableDeclaration(symbol.valueDeclaration) && symbol.valueDeclaration.parent.parent.kind === ts$1.SyntaxKind.ForOfStatement && isDottedNameWithExplicitTypeAnnotation(symbol.valueDeclaration.parent.parent.expression, checker);\n      }\n      function declarationHasExplicitTypeAnnotation(node2) {\n        if (ts$1.isJSDocPropertyLikeTag(node2))\n          return node2.typeExpression !== void 0;\n        return (node_1.isVariableDeclaration(node2) || node_1.isParameterDeclaration(node2) || node_1.isPropertyDeclaration(node2) || node_1.isPropertySignature(node2)) && (util_1.isNodeFlagSet(node2, ts$1.NodeFlags.JavaScriptFile) ? ts$1.getJSDocType(node2) : node2.type) !== void 0;\n      }\n      function isExplicitlyTypedThis(node2) {\n        var _a;\n        do {\n          node2 = node2.parent;\n          if (node_1.isDecorator(node2)) {\n            if (node2.parent.kind === ts$1.SyntaxKind.Parameter && node_1.isClassLikeDeclaration(node2.parent.parent.parent)) {\n              node2 = node2.parent.parent.parent.parent;\n            } else if (node_1.isClassLikeDeclaration(node2.parent.parent)) {\n              node2 = node2.parent.parent.parent;\n            } else if (node_1.isClassLikeDeclaration(node2.parent)) {\n              node2 = node2.parent.parent;\n            }\n          }\n        } while (util_1.isFunctionScopeBoundary(node2) !== 1 || node2.kind === ts$1.SyntaxKind.ArrowFunction);\n        return util_1.isFunctionWithBody(node2) && (util_1.isNodeFlagSet(node2, ts$1.NodeFlags.JavaScriptFile) ? ((_a = ts$1.getJSDocThisTag(node2)) === null || _a === void 0 ? void 0 : _a.typeExpression) !== void 0 : node2.parameters.length !== 0 && util_1.isThisParameter(node2.parameters[0]) && node2.parameters[0].type !== void 0) || node_1.isClassLikeDeclaration(node2.parent);\n      }\n      (function(SignatureEffect) {\n        SignatureEffect[SignatureEffect[\"Never\"] = 1] = \"Never\";\n        SignatureEffect[SignatureEffect[\"Asserts\"] = 2] = \"Asserts\";\n      })(exports3.SignatureEffect || (exports3.SignatureEffect = {}));\n      function callExpressionAffectsControlFlow(node2, checker) {\n        var _a, _b, _c;\n        if (!node_1.isExpressionStatement(node2.parent) || ts$1.isOptionalChain(node2) || !isDottedNameWithExplicitTypeAnnotation(node2.expression, checker))\n          return;\n        const signature = checker.getResolvedSignature(node2);\n        if ((signature === null || signature === void 0 ? void 0 : signature.declaration) === void 0)\n          return;\n        const typeNode = ts$1.isJSDocSignature(signature.declaration) ? (_b = (_a = signature.declaration.type) === null || _a === void 0 ? void 0 : _a.typeExpression) === null || _b === void 0 ? void 0 : _b.type : (_c = signature.declaration.type) !== null && _c !== void 0 ? _c : util_1.isNodeFlagSet(signature.declaration, ts$1.NodeFlags.JavaScriptFile) ? ts$1.getJSDocReturnType(signature.declaration) : void 0;\n        if (typeNode === void 0)\n          return;\n        if (node_1.isTypePredicateNode(typeNode) && typeNode.assertsModifier !== void 0)\n          return 2;\n        return util_1.isTypeFlagSet(checker.getTypeFromTypeNode(typeNode), ts$1.TypeFlags.Never) ? 1 : void 0;\n      }\n      exports3.callExpressionAffectsControlFlow = callExpressionAffectsControlFlow;\n      function handleExpressionStatement(node2, checker) {\n        if (!node_1.isCallExpression(node2.expression))\n          return defaultControlFlowEnd;\n        switch (callExpressionAffectsControlFlow(node2.expression, checker)) {\n          case 2:\n            return { statements: [node2], end: false };\n          case 1:\n            return { statements: [node2], end: true };\n          case void 0:\n            return defaultControlFlowEnd;\n        }\n      }\n      function matchBreakOrContinue(current, pred) {\n        const result = {\n          statements: [],\n          end: current.end\n        };\n        for (const statement of current.statements) {\n          if (pred(statement) && statement.label === void 0) {\n            result.end = false;\n            continue;\n          }\n          result.statements.push(statement);\n        }\n        return result;\n      }\n      function matchLabel(current, label) {\n        const result = {\n          statements: [],\n          end: current.end\n        };\n        const labelText = label.text;\n        for (const statement of current.statements) {\n          switch (statement.kind) {\n            case ts$1.SyntaxKind.BreakStatement:\n            case ts$1.SyntaxKind.ContinueStatement:\n              if (statement.label !== void 0 && statement.label.text === labelText) {\n                result.end = false;\n                continue;\n              }\n          }\n          result.statements.push(statement);\n        }\n        return result;\n      }\n    })(controlFlow);\n    return controlFlow;\n  }\n  var convertAst = {};\n  var hasRequiredConvertAst;\n  function requireConvertAst() {\n    if (hasRequiredConvertAst)\n      return convertAst;\n    hasRequiredConvertAst = 1;\n    Object.defineProperty(convertAst, \"__esModule\", { value: true });\n    convertAst.convertAst = void 0;\n    const ts$1 = ts;\n    const util_1 = requireUtil$1();\n    function convertAst$1(sourceFile) {\n      const wrapped = {\n        node: sourceFile,\n        parent: void 0,\n        kind: ts$1.SyntaxKind.SourceFile,\n        children: [],\n        next: void 0,\n        skip: void 0\n      };\n      const flat = [];\n      let current = wrapped;\n      function collectChildren(node2) {\n        current.children.push({\n          node: node2,\n          parent: current,\n          kind: node2.kind,\n          children: [],\n          next: void 0,\n          skip: void 0\n        });\n      }\n      const stack = [];\n      while (true) {\n        if (current.children.length === 0) {\n          ts$1.forEachChild(current.node, collectChildren);\n          if (current.children.length === 0) {\n            current = current.parent;\n          } else {\n            const firstChild = current.children[0];\n            current.next = firstChild;\n            flat.push(firstChild.node);\n            if (util_1.isNodeKind(firstChild.kind))\n              current = firstChild;\n            stack.push(1);\n          }\n        } else {\n          const index = stack[stack.length - 1];\n          if (index < current.children.length) {\n            const currentChild = current.children[index];\n            flat.push(currentChild.node);\n            let previous = current.children[index - 1];\n            while (previous.children.length !== 0) {\n              previous.skip = currentChild;\n              previous = previous.children[previous.children.length - 1];\n            }\n            previous.skip = previous.next = currentChild;\n            ++stack[stack.length - 1];\n            if (util_1.isNodeKind(currentChild.kind))\n              current = currentChild;\n          } else {\n            if (stack.length === 1)\n              break;\n            stack.pop();\n            current = current.parent;\n          }\n        }\n      }\n      return {\n        wrapped,\n        flat\n      };\n    }\n    convertAst.convertAst = convertAst$1;\n    return convertAst;\n  }\n  var hasRequiredUtil;\n  function requireUtil() {\n    if (hasRequiredUtil)\n      return util$2;\n    hasRequiredUtil = 1;\n    (function(exports3) {\n      Object.defineProperty(exports3, \"__esModule\", { value: true });\n      const tslib_1 = require$$0;\n      tslib_1.__exportStar(requireUtil$1(), exports3);\n      tslib_1.__exportStar(requireUsage(), exports3);\n      tslib_1.__exportStar(requireControlFlow(), exports3);\n      tslib_1.__exportStar(requireType(), exports3);\n      tslib_1.__exportStar(requireConvertAst(), exports3);\n    })(util$2);\n    return util$2;\n  }\n  (function(exports3) {\n    Object.defineProperty(exports3, \"__esModule\", { value: true });\n    const tslib_1 = require$$0;\n    tslib_1.__exportStar(requireTypeguard(), exports3);\n    tslib_1.__exportStar(requireUtil(), exports3);\n  })(tsutils);\n  const glslHeader = \"uint shadeup_up_swizzle_x_uint(uint n) {\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nuvec2 shadeup_up_swizzle_xx_uint(uint n) {\\r\\n\treturn uvec2(n, n);\\r\\n}\\r\\n\\r\\nuvec3 shadeup_up_swizzle_xxx_uint(uint n) {\\r\\n\treturn uvec3(n, n, n);\\r\\n}\\r\\n\\r\\nuvec4 shadeup_up_swizzle_xxxx_uint(uint n) {\\r\\n\treturn uvec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nivec2 shadeup_up_swizzle_xy_uint(uint n) {\\r\\n\treturn uvec2(n, n);\\r\\n}\\r\\n\\r\\nuvec3 shadeup_up_swizzle_xyz_uint(uint n) {\\r\\n\treturn uvec3(n, n, n);\\r\\n}\\r\\n\\r\\nuvec4 shadeup_up_swizzle_xyzw_uint(uint n) {\\r\\n\treturn uvec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nint shadeup_up_swizzle_x_int(int n) {\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nivec2 shadeup_up_swizzle_xx_int(int n) {\\r\\n\treturn ivec2(n, n);\\r\\n}\\r\\n\\r\\nivec3 shadeup_up_swizzle_xxx_int(int n) {\\r\\n\treturn ivec3(n, n, n);\\r\\n}\\r\\n\\r\\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\\r\\n\treturn ivec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nivec2 shadeup_up_swizzle_xy_int(int n) {\\r\\n\treturn ivec2(n, n);\\r\\n}\\r\\n\\r\\nivec3 shadeup_up_swizzle_xyz_int(int n) {\\r\\n\treturn ivec3(n, n, n);\\r\\n}\\r\\n\\r\\nivec4 shadeup_up_swizzle_xyzw_int(int n) {\\r\\n\treturn ivec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\\r\\n\treturn ivec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nfloat shadeup_up_swizzle_x_float(float n) {\\r\\n\treturn n;\\r\\n}\\r\\n\\r\\nvec2 shadeup_up_swizzle_xx_float(float n) {\\r\\n\treturn vec2(n, n);\\r\\n}\\r\\n\\r\\nvec3 shadeup_up_swizzle_xxx_float(float n) {\\r\\n\treturn vec3(n, n, n);\\r\\n}\\r\\n\\r\\nvec4 shadeup_up_swizzle_xxxx_float(float n) {\\r\\n\treturn vec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nvec2 shadeup_up_swizzle_xy_float(float n) {\\r\\n\treturn vec2(n, n);\\r\\n}\\r\\n\\r\\nvec3 shadeup_up_swizzle_xyz_float(float n) {\\r\\n\treturn vec3(n, n, n);\\r\\n}\\r\\n\\r\\nvec4 shadeup_up_swizzle_xyzw_float(float n) {\\r\\n\treturn vec4(n, n, n, n);\\r\\n}\\r\\n\\r\\nmat4 matrix_inversefloat4x4(mat4 m) {\\r\\n\treturn inverse(m);\\r\\n}\\r\\n\\r\\nmat3 matrix_inversefloat3x3(mat3 m) {\\r\\n\treturn inverse(m);\\r\\n}\\r\\n\\r\\nmat2 matrix_inversefloat2x2(mat2 m) {\\r\\n\treturn inverse(m);\\r\\n}\\r\\n\\r\\nfloat bilerp_float(float a, float b, float c, float d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nvec2 bilerp_float2(vec2 a, vec2 b, vec2 c, vec2 d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nvec3 bilerp_float3(vec3 a, vec3 b, vec3 c, vec3 d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nvec4 bilerp_float4(vec4 a, vec4 b, vec4 c, vec4 d, float u, float v) {\\r\\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\\r\\n}\\r\\n\\r\\nmat2 bilerp_float2x2(mat2 a, mat2 b, mat2 c, mat2 d, float u, float v) {\\r\\n\treturn mat2(bilerp_float2(a[0], b[0], c[0], d[0], u, v), bilerp_float2(a[1], b[1], c[1], d[1], u, v));\\r\\n}\\r\\n\\r\\nmat3 bilerp_float3x3(mat3 a, mat3 b, mat3 c, mat3 d, float u, float v) {\\r\\n\treturn mat3(bilerp_float3(a[0], b[0], c[0], d[0], u, v), bilerp_float3(a[1], b[1], c[1], d[1], u, v), bilerp_float3(a[2], b[2], c[2], d[2], u, v));\\r\\n}\\r\\n\\r\\nmat4 bilerp_float4x4(mat4 a, mat4 b, mat4 c, mat4 d, float u, float v) {\\r\\n\treturn mat4(bilerp_float4(a[0], b[0], c[0], d[0], u, v), bilerp_float4(a[1], b[1], c[1], d[1], u, v), bilerp_float4(a[2], b[2], c[2], d[2], u, v), bilerp_float4(a[3], b[3], c[3], d[3], u, v));\\r\\n}\";\n  let { factory: factory$1, isIdentifier: isIdentifier$1 } = ts;\n  const TYPE_BLACKLIST$1 = [\n    \"never\",\n    \"object\",\n    \"symbol\",\n    \"bigint\",\n    \"undefined\",\n    \"null\",\n    \"map\",\n    \"string\"\n  ];\n  const RESERVED_WORDS$1 = [\"attribute\", \"sample\", \"varying\", \"uniform\", \"layout\"];\n  class GLSLCompilationError extends Error {\n    constructor(message, node2) {\n      super(message);\n      this.message = message;\n      this.node = node2;\n      this.context = node2;\n    }\n  }\n  function generateDefaultForType$2(checker, _type_node) {\n    let _type = checker.getTypeFromTypeNode(_type_node);\n    let name = (_type.aliasSymbol || _type.getSymbol())?.escapedName.toString();\n    switch (name) {\n      case \"int\":\n        return \"int(0)\";\n      case \"uint\":\n        return \"uint(0)\";\n      case \"uint8\":\n        return \"uint(0)\";\n      case \"float\":\n        return \"float(0.0)\";\n      case \"float2\":\n        return \"vec2(0.0, 0.0)\";\n      case \"float3\":\n        return \"vec3(0.0, 0.0, 0.0)\";\n      case \"float4\":\n        return \"vec4(0.0, 0.0, 0.0, 0.0)\";\n      case \"int2\":\n        return \"ivec2(0, 0)\";\n      case \"int3\":\n        return \"ivec3(0, 0, 0)\";\n      case \"int4\":\n        return \"ivec4(0, 0, 0, 0)\";\n      case \"uint2\":\n        return \"uvec2(0u, 0u)\";\n      case \"uint3\":\n        return \"uvec3(0u, 0u, 0u)\";\n      case \"uint4\":\n        return \"uvec4(0u, 0u, 0u, 0u)\";\n      case \"float2x2\":\n        return \"mat2(0.0, 0.0, 0.0, 0.0)\";\n      case \"float3x3\":\n        return \"mat3(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n      case \"float4x4\":\n        return \"mat4(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n      case \"bool\":\n        return \"false\";\n      default:\n        let decl = _type.getSymbol()?.getDeclarations();\n        if (ts.isTupleTypeNode(_type_node)) {\n          let len = _type_node.elements.length;\n          let args = [];\n          let rootNode = _type_node.elements[0];\n          if (rootNode) {\n            for (let i = 0; i < len; i++) {\n              args.push(generateDefaultForType$2(checker, _type_node.elements[i]));\n            }\n            let rootType = checker.getTypeFromTypeNode(rootNode);\n            return translateType$1(checker, rootType) + `[${len}] {` + args.join(\", \") + \"}\";\n          } else {\n            return \"0\";\n          }\n        }\n        if (decl && decl.length > 0) {\n          let d = decl[0];\n          let structProps = [];\n          if (ts.isClassDeclaration(d)) {\n            let symd = _type.getSymbol();\n            symd?.members?.forEach((v, k) => {\n              let decl2 = v.valueDeclaration;\n              if (decl2 && ts.isPropertyDeclaration(decl2)) {\n                structProps.push([k?.toString() ?? \"\", decl2.type]);\n              }\n            });\n            let sortedPropsByKey = structProps.sort((a, b) => {\n              return a[0].localeCompare(b[0]);\n            });\n            let args = sortedPropsByKey.map((p) => {\n              return \"/* \" + p[0] + \": */ \" + generateDefaultForType$2(checker, p[1]) + \"\\n\";\n            });\n            return \"_make_struct_\" + resolveStructName$1(d) + \"(\\n\" + args.join(\", \") + \"\\n)\";\n          } else {\n            return \"0\";\n          }\n        } else {\n          return \"0\";\n        }\n    }\n  }\n  function getTypeFallback$2(checker, t) {\n    let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n    if (!n && t.intrinsicName)\n      n = t.intrinsicName;\n    if (typeof n !== \"string\") {\n      let props = t.getApparentProperties();\n      if (props.length > 0) {\n        for (let p of props) {\n          if (p.escapedName.toString() === \"_opaque_int\")\n            return \"int\";\n          if (p.escapedName.toString() === \"_opaque_float\")\n            return \"float\";\n          if (p.escapedName.toString() === \"_opaque_uint\")\n            return \"uint\";\n        }\n      }\n      let btype = t.getBaseTypes();\n      if (btype && btype.length > 0) {\n        for (let b of btype) {\n          let tn = getTypeFallback$2(checker, b);\n          if (tn)\n            return tn;\n        }\n        return null;\n      }\n    } else {\n      return n;\n    }\n  }\n  function followTypeReferences$1(t) {\n    if (t.flags & ts.TypeFlags.Object && t.objectFlags & ts.ObjectFlags.Reference) {\n      if (t.target === t) {\n        return t;\n      }\n      return followTypeReferences$1(t.target);\n    } else {\n      return t;\n    }\n  }\n  function translateType$1(checker, t, templateFormat = false) {\n    let n = getTypeFallback$2(checker, t);\n    let originalType = t;\n    if (n === void 0) {\n      t = followTypeReferences$1(t);\n    }\n    if (templateFormat) {\n      let name = n?.toString() ?? \"unknown\";\n      if (name === \"Array\" || name === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n        let typeRef = originalType;\n        let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n        return {\n          type: \"array\",\n          element: translateType$1(checker, args[0], true)\n        };\n      }\n      if (name == \"boolean\" || name == \"false\" || name == \"true\")\n        name = \"bool\";\n      if (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\") || name == \"bool\" || name == \"texture2d\" || name == \"atomic\")\n        return { type: \"primitive\", name };\n      let symbol = t.aliasSymbol || t.getSymbol();\n      if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n        if (ts.isClassDeclaration(symbol.declarations[0])) {\n          let fields = {};\n          let decl = symbol.declarations[0];\n          for (let member of decl.members) {\n            if (ts.isPropertyDeclaration(member)) {\n              let name2 = member.name.getText();\n              let type2 = checker.getTypeFromTypeNode(member.type);\n              fields[name2] = translateType$1(checker, type2, true);\n            }\n          }\n          return {\n            type: \"struct\",\n            name: resolveStructName$1(decl),\n            fields\n          };\n        } else {\n          return {\n            type: \"unknown\"\n          };\n        }\n      }\n    } else {\n      if (n === \"Array\" || n === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n        let typeRef = originalType;\n        let toStringed = checker.typeToString(typeRef);\n        let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n        let translated = translateType$1(checker, args[0]);\n        if (toStringed.endsWith(\"[]\")) {\n          return translated + \"[]\";\n        } else {\n          let staticSize = 0;\n          if (tsutils.isTupleType(t)) {\n            staticSize = t.fixedLength;\n          }\n          return translated + \"[\" + staticSize + \"]\";\n        }\n      }\n      if (n === \"texture2d\")\n        return `sampler2D`;\n      if (n == \"atomic\") {\n        let args = t.typeArguments || checker.getTypeArguments(t);\n        let translated = translateType$1(checker, args[0]);\n        return `atomic_${translated}`;\n      }\n      if (n === \"bool\")\n        return \"bool\";\n      if (n === \"boolean\")\n        return \"bool\";\n      if (n === \"float\")\n        return \"float\";\n      if (n === \"float2\")\n        return \"vec2\";\n      if (n === \"float3\")\n        return \"vec3\";\n      if (n === \"float4\")\n        return \"vec4\";\n      if (n === \"int\")\n        return \"int\";\n      if (n === \"int2\")\n        return \"ivec2\";\n      if (n === \"int3\")\n        return \"ivec3\";\n      if (n === \"int4\")\n        return \"ivec4\";\n      if (n === \"uint\")\n        return \"uint\";\n      if (n === \"uint8\")\n        return \"uint\";\n      if (n === \"uint2\")\n        return \"uvec2\";\n      if (n === \"uint3\")\n        return \"uvec3\";\n      if (n === \"uint4\")\n        return \"uvec4\";\n      if (n === \"float2x2\")\n        return \"mat2\";\n      if (n === \"float3x3\")\n        return \"mat3\";\n      if (n === \"float4x4\")\n        return \"mat4\";\n      if (n === \"void\")\n        return \"void\";\n      if (n === \"error\")\n        return \"void\";\n      if (t.isUnion()) {\n        let types2 = t.types.map((t2) => translateType$1(checker, t2));\n        for (let sub of types2) {\n          if (sub && sub !== \"void\" && sub !== \"undefined\")\n            return sub;\n        }\n      }\n      let symbol = t.aliasSymbol || t.getSymbol();\n      if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n        if (ts.isClassDeclaration(symbol.declarations[0])) {\n          return resolveStructName$1(symbol.declarations[0]);\n        } else {\n          return n?.toString() ?? \"void\";\n        }\n      } else {\n        return n?.toString() ?? \"void\";\n      }\n    }\n  }\n  function isTypeNameVector$1(name) {\n    if (name.startsWith(\"float\") || name.startsWith(\"int\")) {\n      if (name.endsWith(\"2\") || name.endsWith(\"3\") || name.endsWith(\"4\")) {\n        return true;\n      }\n    }\n    return false;\n  }\n  function getTypeNameVectorElementType$1(name) {\n    if (name == \"float\") {\n      return [\"float\", 1];\n    }\n    if (name == \"int\") {\n      return [\"int\", 1];\n    }\n    if (name == \"uint\") {\n      return [\"uint\", 1];\n    }\n    if (name.startsWith(\"float\")) {\n      return [\"float\", parseInt(name.substring(5))];\n    }\n    if (name.startsWith(\"int\")) {\n      return [\"int\", parseInt(name.substring(3))];\n    }\n    if (name.startsWith(\"uint\")) {\n      return [\"uint\", parseInt(name.substring(4))];\n    }\n    if (name.startsWith(\"vec\")) {\n      return [\"float\", parseInt(name.substring(3))];\n    }\n    if (name.startsWith(\"ivec\")) {\n      return [\"int\", parseInt(name.substring(4))];\n    }\n    if (name.startsWith(\"uvec\")) {\n      return [\"uint\", parseInt(name.substring(4))];\n    }\n    return [\"\", 0];\n  }\n  function isTranslatedTypeNameVectorOrScalar$1(name) {\n    if (name == \"float\" || name == \"int\" || name == \"uint\")\n      return true;\n    if (name.startsWith(\"vec\") || name.startsWith(\"ivec\") || name.startsWith(\"uvec\")) {\n      if (name.endsWith(\"2\") || name.endsWith(\"3\") || name.endsWith(\"4\")) {\n        return true;\n      }\n      return true;\n    }\n    return false;\n  }\n  function isVector$1(checker, t) {\n    let name = getTypeFallback$2(checker, t);\n    if (name) {\n      return isTypeNameVector$1(name);\n    }\n    return false;\n  }\n  function getVectorElementType$1(checker, t) {\n    let name = getTypeFallback$2(checker, t);\n    if (name) {\n      return getTypeNameVectorElementType$1(name);\n    }\n    return [\"\", 0];\n  }\n  function isNumeric$1(checker, t) {\n    let name = getTypeFallback$2(checker, t);\n    if (name && (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\"))) {\n      return true;\n    }\n    return false;\n  }\n  function escapeIdentifier$1(id) {\n    if (RESERVED_WORDS$1.includes(id)) {\n      return \"_\" + id;\n    }\n    return id.replaceAll(\"___\", \"_ii_\").replaceAll(\"__\", \"_i_\");\n  }\n  function getVectorMask$1(num) {\n    let outMask = \"\";\n    let comps = [\"x\", \"y\", \"z\", \"w\"];\n    for (let i = 0; i < num; i++) {\n      outMask += comps[i];\n    }\n    return outMask;\n  }\n  function isGLSLType$1(name) {\n    return name.startsWith(\"vec\") || name.startsWith(\"mat\") || name.startsWith(\"sampler\") || name.startsWith(\"texture\") || name.startsWith(\"isampler\") || name.startsWith(\"usampler\") || name.startsWith(\"uvec\") || name.startsWith(\"ivec\") || name == \"bool\" || name == \"float\" || name == \"int\" || name == \"uint\" || name == \"uint8\" || name == \"void\";\n  }\n  function autoCastNumeric$1(value, input, expected) {\n    let inputType = getTypeNameVectorElementType$1(input);\n    let expectedType = getTypeNameVectorElementType$1(expected);\n    if (inputType[0] != expectedType[0]) {\n      if (expectedType[1] == 1) {\n        return new SourceNode(value.startIndex, value.endIndex, [`${expectedType[0]}(`, value, `)`]);\n      } else {\n        return new SourceNode(value.startIndex, value.endIndex, [`${expectedType[0]}(`, value, `)`]);\n      }\n    }\n    return value;\n  }\n  function convertConciseBodyToBlock$1(body) {\n    if (ts.isBlock(body)) {\n      return body;\n    } else {\n      return ts.factory.createBlock([ts.factory.createReturnStatement(body)]);\n    }\n  }\n  function compile$2(ctx, ast, originalMapping) {\n    function c2(ast2) {\n      if (!ast2) {\n        return s([]);\n      }\n      return compile$2(ctx, ast2);\n    }\n    function cplain(ast2) {\n      if (!ast2) {\n        return s([]);\n      }\n      return compile$2(\n        {\n          checker: ctx.checker,\n          parentFunction: ctx.parentFunction\n        },\n        ast2\n      );\n    }\n    function s(c22) {\n      if (originalMapping) {\n        let reverseMapped = lookupIndexMappingRange(originalMapping, ast.getStart(), ast.getEnd());\n        return new SourceNode(reverseMapped.start, reverseMapped.end, c22);\n      } else {\n        return new SourceNode(0, 0, c22);\n      }\n    }\n    function join(c22, sep) {\n      return c22.reduce((acc, cur) => {\n        if (acc.length === 0) {\n          return [cur];\n        }\n        return [...acc, sep, cur];\n      }, []);\n    }\n    function children() {\n      return ast.getChildren().map((child) => c2(child));\n    }\n    function autoCastParameter(callExpr, argIndex) {\n      let signature = ctx.checker.getResolvedSignature(callExpr);\n      let params = signature.getParameters();\n      let param = params[argIndex];\n      let paramType = ctx.checker.getTypeOfSymbolAtLocation(param, callExpr);\n      let paramTypeString = translateType$1(ctx.checker, paramType);\n      let arg = callExpr.arguments[argIndex];\n      let argType = ctx.checker.getTypeAtLocation(arg);\n      let argTypeString = translateType$1(ctx.checker, argType);\n      if (paramTypeString !== argTypeString) {\n        return autoCastNumeric$1(c2(arg), argTypeString, paramTypeString);\n      }\n      return s([c2(arg)]);\n    }\n    let prefixFunctions = [];\n    if (ctx.composed) {\n      if (ts.isMethodDeclaration(ast) || ts.isFunctionDeclaration(ast)) {\n        for (let [i, arg] of ctx.composed.arguments.entries()) {\n          if (ts.isArrowFunction(arg)) {\n            let paramFromIndex = ast.parameters[i];\n            let name = paramFromIndex.name.getText() + \"_composed_\" + arg.pos + \"_arg_\" + i;\n            let signature = ctx.checker.getSignatureFromDeclaration(arg);\n            let returnType = signature.getReturnType();\n            let vars = getClosureVars$1(ctx.checker, arg);\n            let vvv = vars.map(\n              (p) => s([\n                translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(p.declarations[0])),\n                \" \",\n                p.escapedName\n              ])\n            );\n            let joins = join([...arg.parameters.map((p) => cplain(p)), ...vvv], \", \");\n            prefixFunctions.push(\n              s([\n                translateType$1(ctx.checker, returnType),\n                \" \",\n                name,\n                \"(\",\n                ...joins,\n                \")\",\n                \" {\\n\",\n                ...convertConciseBodyToBlock$1(arg.body).statements.map((s2) => c2(s2)) ?? [],\n                \"\\n}\\n\\n\"\n              ])\n            );\n          }\n        }\n      }\n    }\n    switch (ast.kind) {\n      case ts.SyntaxKind.FirstPunctuation:\n        return s([ast.getText()]);\n      case ts.SyntaxKind.SyntaxList:\n        return s(children());\n      case ts.SyntaxKind.SourceFile:\n        return s(children());\n      case ts.SyntaxKind.BreakStatement:\n        return s([\"break;\"]);\n      case ts.SyntaxKind.ContinueStatement:\n        return s([\"continue;\"]);\n      case ts.SyntaxKind.MethodDeclaration:\n        let fnDeclar = ast;\n        let fnName = resolveFunctionName$1(fnDeclar);\n        if (ctx.composed) {\n          fnName = fnName + \"_composed_\" + ctx.composed.pos;\n        }\n        let isStatic = false;\n        let signature = ctx.checker.getSignatureFromDeclaration(fnDeclar);\n        if (ts.canHaveModifiers(fnDeclar)) {\n          let mods = ts.getModifiers(fnDeclar);\n          if (mods) {\n            if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n              isStatic = true;\n            }\n          }\n        }\n        let returnType = signature.getReturnType();\n        return s([\n          ...prefixFunctions,\n          translateType$1(ctx.checker, returnType),\n          \" \",\n          fnName,\n          \"(\",\n          ,\n          ...join(\n            [\n              ...isStatic ? [] : [\n                translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(fnDeclar.parent)) + \" _this\"\n              ],\n              ...fnDeclar.parameters.filter((p) => {\n                let type22 = ctx.checker.getTypeAtLocation(p);\n                if (type22.getCallSignatures().length > 0) {\n                  return false;\n                }\n                return true;\n              }).map((p) => c2(p))\n            ],\n            \", \"\n          ),\n          \")\",\n          \" {\\n\",\n          ...fnDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n          \"\\n}\\n\\n\"\n        ]);\n      case ts.SyntaxKind.FunctionDeclaration:\n        let mthdDeclar = ast;\n        let mthdsignature = ctx.checker.getSignatureFromDeclaration(mthdDeclar);\n        let mthdreturnType = mthdsignature.getReturnType();\n        let mthdName = resolveFunctionName$1(mthdDeclar);\n        if (ctx.composed) {\n          mthdName = mthdName + \"_composed_\" + ctx.composed.pos;\n        }\n        return s([\n          ...prefixFunctions,\n          translateType$1(ctx.checker, mthdreturnType),\n          \" \",\n          mthdName,\n          \"(\",\n          ...join(\n            mthdDeclar.parameters.filter((p) => {\n              let type22 = ctx.checker.getTypeAtLocation(p);\n              if (type22.getCallSignatures().length > 0) {\n                return false;\n              }\n              return true;\n            }).map((p) => c2(p)),\n            \", \"\n          ),\n          \")\",\n          \" {\\n\",\n          ...mthdDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n          \"\\n}\\n\\n\"\n        ]);\n      case ts.SyntaxKind.ReturnStatement:\n        let ret = ast;\n        if (!ctx.parentFunction) {\n          if (ret.expression) {\n            return s([\"return \", c2(ret.expression), \";\\n\"]);\n          } else {\n            return s([\"return;\\n\"]);\n          }\n        } else {\n          let expectedReturnType = ctx.checker.getSignatureFromDeclaration(ctx.parentFunction).getReturnType();\n          let actualReturnType = ctx.checker.getTypeAtLocation(ret.expression);\n          if (ret.expression) {\n            let sss = s([\n              \"return \",\n              autoCastNumeric$1(\n                c2(ret.expression),\n                translateType$1(ctx.checker, actualReturnType),\n                translateType$1(ctx.checker, expectedReturnType)\n              ),\n              \";\\n\"\n            ]);\n            return sss;\n          } else {\n            return s([\"return;\\n\"]);\n          }\n        }\n      case ts.SyntaxKind.AsExpression:\n        let asExpr = ast;\n        return c2(asExpr.expression);\n      case ts.SyntaxKind.Parameter:\n        let param = ast;\n        if (ctx.composed) {\n          let indexOf = param.parent.parameters.indexOf(param);\n          let expr2 = ctx.composed.arguments[indexOf];\n          if (expr2) {\n            if (ts.isArrowFunction(expr2)) {\n              let vars = getClosureVars$1(ctx.checker, expr2.body);\n              let closureVars = vars.map((v) => {\n                return s([\n                  translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(v.valueDeclaration)),\n                  \" \",\n                  v.name\n                ]);\n              });\n              return s(join(closureVars, \", \"));\n            }\n          }\n        }\n        return s([\n          translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(param)),\n          \" \",\n          escapeIdentifier$1(param.name.getText())\n        ]);\n      case ts.SyntaxKind.ArrowFunction:\n        let arrow = ast;\n        let body = convertConciseBodyToBlock$1(arrow.body);\n        return s([\n          \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\\nvoid main() {\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\\n\",\n          ...body.statements.map((s2) => c2(s2)),\n          \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\\n}\\n\"\n        ]);\n      case ts.SyntaxKind.VariableStatement:\n        let varStatement = ast;\n        return s([\n          ...join(\n            varStatement.declarationList.declarations.map((d) => c2(d)),\n            \", \"\n          ),\n          \";\\n\"\n        ]);\n      case ts.SyntaxKind.VariableDeclaration:\n        let varDecl = ast;\n        let type2 = ctx.checker.getTypeAtLocation(varDecl);\n        return s([\n          translateType$1(ctx.checker, type2),\n          \" \",\n          varDecl.name.getText(),\n          \" = \",\n          c2(varDecl.initializer)\n        ]);\n      case ts.SyntaxKind.CallExpression:\n        let call = ast;\n        let exprSmybol = ctx.checker.getSymbolAtLocation(call.expression);\n        if (call.expression.getText() == \"Math.random\") {\n          return s([\"0.0\"]);\n        }\n        if (!exprSmybol) {\n          return s([\"/* TODO: Unknown symbol */\"]);\n        }\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = ctx.checker.getAliasedSymbol(exprSmybol);\n        }\n        let symName = exprSmybol?.getName() ?? call.expression.getText();\n        if (symName == \"__index\") {\n          if (ts.isPropertyAccessExpression(call.expression)) {\n            let innerType = translateType$1(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(call.expression.expression)\n            );\n            let returnType2 = ctx.checker.getTypeAtLocation(call);\n            let vecOut = getVectorElementType$1(ctx.checker, returnType2);\n            let outMask = getVectorMask$1(vecOut[1]);\n            if (innerType == \"sampler2D\") {\n              return s([\n                \"texelFetch(\",\n                c2(call.expression.expression),\n                \", ivec2(\",\n                c2(call.arguments[0]),\n                \"), 0).\" + outMask\n              ]);\n            }\n          }\n          return s([c2(call.expression), \"[\", c2(call.arguments[0]), \"]\"]);\n        } else if (symName == \"len\") {\n          let expr2 = call.expression;\n          if (ts.isPropertyAccessExpression(expr2)) {\n            let left = expr2.expression;\n            return s([c2(left), \"_size\"]);\n          }\n        } else if (symName == \"min\" || symName == \"max\") {\n          if (call.arguments.length > 2) {\n            let args2 = call.arguments.map((a) => c2(a));\n            while (args2.length > 2) {\n              let left = args2.shift();\n              let right = args2.shift();\n              args2.unshift(s([symName, \"(\", left, \",\", right, \")\"]));\n            }\n            return s([symName, \"(\", ...join(args2, \",\"), \")\"]);\n          }\n        } else if (symName == \"sample\") {\n          if (ts.isPropertyAccessExpression(call.expression)) {\n            let innerType = translateType$1(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(call.expression.expression)\n            );\n            if (innerType == \"sampler2D\") {\n              return s([\n                \"texture(\",\n                c2(call.expression.expression),\n                \", vec2(\",\n                c2(call.arguments[0]),\n                \"))\"\n              ]);\n            }\n          }\n        } else if (symName == \"__index_assign\") {\n          return s([\n            c2(call.expression.expression),\n            \"[\",\n            c2(call.arguments[0]),\n            \"] = \",\n            autoCastParameter(call, 1)\n          ]);\n        } else if (symName == \"rand\" && call.arguments.length == 0 && call.expression.getText() == \"rand\") {\n          throw new GLSLCompilationError(\n            \"rand() in shaders needs to be seeded, use rand(seed) instead\",\n            call\n          );\n        }\n        if (exprSmybol?.getName() == \"makeVector\" && exprSmybol.valueDeclaration) {\n          if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n            let exprSig2 = ctx.checker.getResolvedSignature(call);\n            if (exprSig2) {\n              return s([\n                translateType$1(ctx.checker, ctx.checker.getReturnTypeOfSignature(exprSig2)),\n                \"(\",\n                ...join(\n                  call.arguments.map((a) => c2(a)),\n                  \", \"\n                ),\n                \")\"\n              ]);\n            }\n          }\n        }\n        if (exprSmybol?.getName() == \"swizzle\" && exprSmybol.valueDeclaration) {\n          if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n            ctx.checker.getSignatureFromDeclaration(exprSmybol.valueDeclaration);\n            let arg = call.arguments[0];\n            let arg2 = call.arguments[1];\n            let propAccess = \"\";\n            if (ts.isStringLiteral(arg2)) {\n              propAccess = arg2.text;\n            }\n            let argType = ctx.checker.getTypeAtLocation(arg);\n            if (isVector$1(ctx.checker, argType)) {\n              return s([c2(arg), \".\", propAccess]);\n            } else if (isNumeric$1(ctx.checker, argType)) {\n              let numericType = translateType$1(ctx.checker, argType);\n              return s([`shadeup_up_swizzle_${propAccess}_${numericType}(`, c2(arg), \")\"]);\n            } else {\n              return s([c2(arg), \".\", propAccess]);\n            }\n          }\n        }\n        if (isTypeNameVector$1(exprSmybol?.getName() ?? \"\")) {\n          return s([\n            translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(call.expression)),\n            \"(\",\n            ...join(call.arguments.length == 0 ? [s([\"0\"])] : call.arguments.map((a) => c2(a)), \", \"),\n            \")\"\n          ]);\n        }\n        let funcName = c2(call.expression);\n        let callArgs = [];\n        let preArgs = [];\n        let exprSig = ctx.checker.getResolvedSignature(call);\n        let exprDeclar = exprSig.getDeclaration();\n        if (exprDeclar) {\n          if (ts.isMethodDeclaration(exprDeclar)) {\n            let isStatic2 = false;\n            if (ts.canHaveModifiers(exprDeclar)) {\n              let mods = ts.getModifiers(exprDeclar);\n              if (mods) {\n                if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n                  isStatic2 = true;\n                }\n              }\n            }\n            if (!isStatic2) {\n              if (ts.isPropertyAccessExpression(call.expression)) {\n                preArgs.push(c2(call.expression.expression));\n              }\n            }\n          }\n        }\n        exprSmybol.getName() + \"(\";\n        for (let [i, arg] of call.arguments.entries()) {\n          let argStr = c2(arg);\n          if (exprSig) {\n            let p = exprSig.getTypeParameterAtPosition(i);\n            if (p) {\n              let translatedBase = translateType$1(ctx.checker, p);\n              let translatedPass = translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n              if (isTranslatedTypeNameVectorOrScalar$1(translatedPass)) {\n                if (translatedBase != translatedPass && isGLSLType$1(translatedBase)) {\n                  argStr = s([`${translatedBase}(`, argStr, `)`]);\n                }\n              }\n            } else {\n              translateType$1(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n            }\n          }\n          if (ts.isArrowFunction(arg)) {\n            let arrow2 = arg;\n            let vars = getClosureVars$1(ctx.checker, arrow2.body);\n            if (vars.length > 0)\n              callArgs.push(vars.map((v) => v.escapedName).join(\", \"));\n          } else {\n            callArgs.push(argStr);\n          }\n        }\n        if (exprSmybol) {\n          let signature2 = ctx.checker.getResolvedSignature(call);\n          let mapping = findRealSignatureMappingToGLSL(ctx.checker, signature2) ?? findSignatureMappingToGLSL(ctx.checker, exprSmybol);\n          if (mapping !== null) {\n            if (mapping.startsWith(\"!\")) {\n              let minType = \"\";\n              let noOp = false;\n              for (let arg of call.arguments) {\n                let argType = ctx.checker.getTypeAtLocation(arg);\n                let argTypeName = translateType$1(ctx.checker, argType);\n                if (!(argTypeName == \"float\" || argTypeName.startsWith(\"vec\") || argTypeName == \"int\" || argTypeName.startsWith(\"ivec\") || argTypeName == \"uint\" || argTypeName.startsWith(\"uvec\"))) {\n                  noOp = true;\n                }\n                if (minType == \"\") {\n                  if (argTypeName == \"float\" || argTypeName.startsWith(\"vec\")) {\n                    minType = \"float\";\n                  } else if (argTypeName == \"int\" || argTypeName.startsWith(\"ivec\")) {\n                    minType = \"int\";\n                  } else if (argTypeName == \"uint\" || minType.startsWith(\"uvec\")) {\n                    minType = \"uint\";\n                  }\n                } else if (argTypeName == \"float\" || minType.startsWith(\"vec\")) {\n                  minType = \"float\";\n                }\n              }\n              if (!noOp) {\n                for (let i = 0; i < callArgs.length; i++) {\n                  let arg = call.arguments[i];\n                  let argType = ctx.checker.getTypeAtLocation(arg);\n                  let argTypeName = translateType$1(ctx.checker, argType);\n                  let argTypeStripped = \"\";\n                  if (argTypeName == \"float\" || argTypeName.startsWith(\"vec\")) {\n                    argTypeStripped = \"float\";\n                  } else if (argTypeName == \"int\" || argTypeName.startsWith(\"ivec\")) {\n                    argTypeStripped = \"int\";\n                  } else if (argTypeName == \"uint\" || argTypeName.startsWith(\"uvec\")) {\n                    argTypeStripped = \"uint\";\n                  }\n                  if (argTypeStripped != minType) {\n                    if (argTypeName.startsWith(\"float\") || argTypeName.startsWith(\"int\")) {\n                      callArgs[i] = s([`${minType}(`, callArgs[i], `)`]);\n                    } else if (argTypeName.startsWith(\"vec\") || argTypeName.startsWith(\"ivec\")) {\n                      let len = argTypeName.match(/\\d+/)?.[0];\n                      if (len === void 0) {\n                        throw new Error(\"Invalid type\");\n                      }\n                      callArgs[i] = s([\n                        `${minType == \"float\" ? \"vec\" : \"ivec\"}${len}(`,\n                        callArgs[i],\n                        `)`\n                      ]);\n                    } else\n                      ;\n                  }\n                }\n              }\n              let template = mapping.slice(1);\n              let outs = [];\n              let argCounter = 0;\n              let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n              for (let i = 0; i < callArgs.length; i++) {\n                let paramType = ctx.checker.getTypeAtLocation(\n                  sig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n                );\n                template = template.replace(\n                  \"`\" + argCounter + \"`\",\n                  ctx.checker.typeToString(paramType)\n                );\n                argCounter++;\n              }\n              let result = template.split(\"$\");\n              for (let r of result) {\n                if (/^\\d+$/.test(r)) {\n                  outs.push(callArgs[parseInt(r)]);\n                } else if (r == \"self\") {\n                  if (call.expression.kind == ts.SyntaxKind.PropertyAccessExpression) {\n                    let propAccess = call.expression;\n                    outs.push(c2(propAccess.getChildAt(0)));\n                  } else {\n                    outs.push(c2(call.expression));\n                  }\n                } else {\n                  outs.push(r);\n                }\n              }\n              if (outs.includes(\" % \")) {\n                if (call.arguments.length == 2) {\n                  let first = getVectorElementType$1(\n                    ctx.checker,\n                    ctx.checker.getTypeAtLocation(call.arguments[0])\n                  );\n                  let last = getVectorElementType$1(\n                    ctx.checker,\n                    ctx.checker.getTypeAtLocation(call.arguments[1])\n                  );\n                  if (first[1] != last[1] && last[1] == 1) {\n                    getVectorMask$1(first[1]);\n                    if (first[0] == \"float\" || last[0] == \"float\") {\n                      outs = [`mod(`, outs[1], \", \", outs[3], \")\"];\n                    }\n                  }\n                }\n              }\n              return s(outs);\n            } else if (mapping.startsWith(\"#\")) {\n              let typeName = \"\";\n              if (call.arguments.length > 0) {\n                let firstArg = call.arguments[0];\n                let firstArgType = ctx.checker.getTypeAtLocation(firstArg);\n                typeName = ctx.checker.typeToString(firstArgType);\n              }\n              return s([\n                new SourceNode(call.expression.getStart(), call.expression.getEnd(), [\n                  mapping.substring(1) + typeName\n                ]),\n                \"(\",\n                ...join([...preArgs, ...callArgs], \", \"),\n                \")\"\n              ]);\n            } else {\n              return s([\n                new SourceNode(call.expression.getStart(), call.expression.getEnd(), [mapping]),\n                \"(\",\n                ...join([...preArgs, ...callArgs], \", \"),\n                \")\"\n              ]);\n            }\n          }\n          if (exprSmybol.declarations[0].parent) {\n            let param2 = exprSmybol.declarations[0];\n            if (ts.isParameter(param2))\n              ;\n          }\n          let funcDeclar = exprSmybol.valueDeclaration;\n          if (exprSmybol.declarations[0].parent) {\n            let param2 = exprSmybol.declarations[0];\n            if (ts.isParameter(param2)) {\n              let indexOf = param2.parent.parameters.indexOf(param2);\n              let additionalArgs = [];\n              if (ctx.composed) {\n                let realAnonymousFunc = ctx.composed.arguments[indexOf];\n                if (ts.isArrowFunction(realAnonymousFunc)) {\n                  let vars = getClosureVars$1(ctx.checker, realAnonymousFunc.body);\n                  additionalArgs = vars.map((v) => v.escapedName);\n                  callArgs.push(...additionalArgs);\n                  return s([\n                    funcName,\n                    \"_composed_\",\n                    realAnonymousFunc.pos.toString(),\n                    \"_arg_\",\n                    indexOf.toString(),\n                    \"(\",\n                    ...join([...preArgs, ...callArgs], \", \"),\n                    \")\"\n                  ]);\n                }\n              }\n            }\n          }\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            funcName = new SourceNode(\n              call.expression.getStart(),\n              call.expression.getEnd(),\n              resolveFunctionName$1(funcDeclar)\n            );\n            let parentDeclar = closest(ast, (n2) => ts.isFunctionDeclaration(n2));\n            if (parentDeclar && ts.isFunctionDeclaration(parentDeclar))\n              ;\n            if (isComposedFunction$1(ctx.checker, funcDeclar)) {\n              return s([\n                funcName,\n                \"_composed_\",\n                call.pos.toString(),\n                \"(\",\n                ...join([...preArgs, ...callArgs], \", \"),\n                \")\"\n              ]);\n            }\n          }\n        }\n        return s([funcName, \"(\", ...join([...preArgs, ...callArgs], \", \"), \")\"]);\n      case ts.SyntaxKind.NewExpression:\n        let newExpr = ast;\n        let newExprSymbol = ctx.checker.getSymbolAtLocation(newExpr.expression);\n        let args = [];\n        if (newExpr.arguments?.length == 1 && ts.isObjectLiteralExpression(newExpr.arguments[0])) {\n          let object = newExpr.arguments[0];\n          let props = object.properties;\n          let sortedPropsByKey = [];\n          let structProps = [];\n          newExprSymbol?.members?.forEach((v, k) => {\n            let decl2 = v.valueDeclaration;\n            if (decl2 && ts.isPropertyDeclaration(decl2)) {\n              structProps.push([k?.toString() ?? \"\", decl2.type]);\n            }\n          });\n          sortedPropsByKey = structProps.sort((a, b) => {\n            return a[0].localeCompare(b[0]);\n          });\n          args = [\n            ...sortedPropsByKey.map((p) => {\n              let prop2 = props.find((p2) => {\n                if (ts.isPropertyAssignment(p2)) {\n                  return p2.name.getText() == p[0];\n                } else if (ts.isShorthandPropertyAssignment(p2)) {\n                  return p2.name.getText() == p[0];\n                } else {\n                  return false;\n                }\n              });\n              if (prop2) {\n                if (ts.isPropertyAssignment(prop2)) {\n                  return s([\"/* \", p[0], \": */ \", c2(prop2.initializer), \"\\n\"]);\n                } else if (ts.isShorthandPropertyAssignment(prop2)) {\n                  return s([\"/* \", p[0], \": */ \", c2(prop2.name), \"\\n\"]);\n                } else {\n                  return s([\"/* \", c2(prop2), \": */ \", \"\\n\"]);\n                }\n              } else {\n                return s([\"/* \", p[0], \": */ \", generateDefaultForType$2(ctx.checker, p[1]), \"\\n\"]);\n              }\n            })\n          ];\n        }\n        let decl = ctx.checker.getTypeAtLocation(newExpr.expression).getSymbol()?.getDeclarations();\n        if (decl && ts.isClassDeclaration(decl[0])) {\n          return s([\"_make_struct_\", resolveStructName$1(decl[0]), \"(\\n\", ...join(args, \", \"), \"\\n)\"]);\n        } else {\n          return s([\"/*\", ...join(args, \", \"), \"*/\"]);\n        }\n      case ts.SyntaxKind.ExpressionStatement:\n        let expr = ast;\n        return s([c2(expr.expression), \";\\n\"]);\n      case ts.SyntaxKind.ObjectLiteralExpression:\n        let obj = ast;\n        return s([\n          \"{\",\n          ...join(\n            obj.properties.map((p) => {\n              if (ts.isPropertyAssignment(p)) {\n                return s([c2(p.name), \": \", c2(p.initializer)]);\n              } else if (ts.isShorthandPropertyAssignment(p)) {\n                return s([c2(p.name)]);\n              } else {\n                return s([\"/*\", c2(p), \"*/\"]);\n              }\n            }),\n            \", \"\n          ),\n          \"}\"\n        ]);\n      case ts.SyntaxKind.ConditionalExpression:\n        let cond = ast;\n        return s([c2(cond.condition), \" ? \", c2(cond.whenTrue), \" : \", c2(cond.whenFalse)]);\n      case ts.SyntaxKind.Identifier:\n        let id = ast;\n        if (ts.isIdentifier(id)) {\n          let sym = ctx.checker.getSymbolAtLocation(id);\n          if (sym && sym.flags & ts.SymbolFlags.Alias) {\n            sym = ctx.checker.getAliasedSymbol(sym);\n          }\n          if (sym?.declarations?.length == 1) {\n            let decl2 = sym.declarations[0];\n            if (isUniformable$1(ctx.checker, decl2)) {\n              if (isVariableDeclarationValue$1(ctx.checker, decl2)) {\n                if (!isInSameScope$1(decl2, ast)) {\n                  if (!isInShader$2(decl2)) {\n                    if (ts.isBinaryExpression(ast.parent)) {\n                      if (ast.parent.left == ast) {\n                        throw new GLSLCompilationError(\n                          `Cannot assign to variable '${id.text.toString()}' because it is not declared in the shader`,\n                          ast\n                        );\n                      }\n                    }\n                    let isGlobalVar = isRootNode$1(decl2);\n                    let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${id.text.toString()}`;\n                    return s([glslVarName]);\n                  } else {\n                    return s([escapeIdentifier$1(id.text.toString())]);\n                  }\n                }\n              }\n            }\n          }\n          return s([escapeIdentifier$1(id.text.toString())]);\n        } else {\n          return c2(id.expression);\n        }\n      case ts.SyntaxKind.PropertyAccessExpression:\n        let prop = ast;\n        let isStaticMember = isStaticPropertyAccessExpression(ctx.checker, prop);\n        if (isStaticMember) {\n          return s([c2(prop.expression), \"_static_\", c2(prop.name)]);\n        } else {\n          let propName = prop.name.getText();\n          if (propName == \"__index\") {\n            return s([c2(prop.expression)]);\n          } else if (propName == \"size\") {\n            let innerType = translateType$1(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(prop.expression)\n            );\n            if (innerType == \"sampler2D\") {\n              return s([c2(prop.expression), \"_\", propName]);\n            }\n          } else {\n            return s([c2(prop.expression), \".\", c2(prop.name)]);\n          }\n        }\n      case ts.SyntaxKind.ThisKeyword:\n        return s([\"_this\"]);\n      case ts.SyntaxKind.FirstLiteralToken:\n        let lit = ast;\n        return s([lit.text]);\n      case ts.SyntaxKind.IfStatement:\n        let ifStmt = ast;\n        if (isIdentifier$1(ifStmt.expression)) {\n          if (ifStmt.expression.escapedText == \"PLATFORM_WEBGL\") {\n            return s([c2(ifStmt.thenStatement)]);\n          }\n          if (ifStmt.expression.escapedText == \"PLATFORM_WEBGPU\") {\n            if (ifStmt.elseStatement) {\n              return s([c2(ifStmt.elseStatement)]);\n            } else {\n              return s([\"\"]);\n            }\n          }\n        }\n        return s([\n          \"if (\",\n          c2(ifStmt.expression),\n          \")\",\n          c2(ifStmt.thenStatement),\n          ifStmt.elseStatement ? s([\"else \\n\", c2(ifStmt.elseStatement), \"\\n\"]) : s([\"\"])\n        ]);\n      case ts.SyntaxKind.TrueKeyword:\n        return s([\"true\"]);\n      case ts.SyntaxKind.FalseKeyword:\n        return s([\"false\"]);\n      case ts.SyntaxKind.PostfixUnaryExpression:\n        let post = ast;\n        return s([c2(post.operand), post.operator == ts.SyntaxKind.PlusPlusToken ? \"++\" : \"--\"]);\n      case ts.SyntaxKind.PlusPlusToken:\n        return s([\"++\"]);\n      case ts.SyntaxKind.MinusMinusToken:\n        return s([\"--\"]);\n      case ts.SyntaxKind.ParenthesizedExpression:\n        let paren = ast;\n        return s([\"(\", c2(paren.expression), \")\"]);\n      case ts.SyntaxKind.VariableDeclarationList:\n        let varDeclList = ast;\n        if (varDeclList.declarations.length > 0) {\n          for (let decl2 of varDeclList.declarations) {\n            let varDecl2 = decl2;\n            let type22 = ctx.checker.getTypeAtLocation(varDecl2);\n            return s([\n              translateType$1(ctx.checker, type22),\n              \" \",\n              varDecl2.name.getText(),\n              \" = \",\n              c2(varDecl2.initializer)\n            ]);\n          }\n        } else {\n          return s([\"\"]);\n        }\n      case ts.SyntaxKind.ForStatement:\n        let forStmt = ast;\n        return s([\n          \"for (\",\n          c2(forStmt.initializer),\n          \";\",\n          c2(forStmt.condition),\n          \";\",\n          c2(forStmt.incrementor),\n          \")\",\n          c2(forStmt.statement)\n        ]);\n      case ts.SyntaxKind.BinaryExpression:\n        let bin = ast;\n        if (bin.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n          let leftType = ctx.checker.getTypeAtLocation(bin.left);\n          let rightType = ctx.checker.getTypeAtLocation(bin.right);\n          if (isVector$1(ctx.checker, leftType) && isVector$1(ctx.checker, rightType)) {\n            let [leftElementType, leftElementSize] = getVectorElementType$1(ctx.checker, leftType);\n            let [rightElementType, rightElementSize] = getVectorElementType$1(ctx.checker, rightType);\n            if (leftElementType != rightElementType) {\n              if (leftElementType == \"float\" && rightElementType == \"int\") {\n                return s([c2(bin.left), ` = vec${leftElementSize}(`, c2(bin.right), \")\"]);\n              } else if (leftElementType == \"int\" && rightElementType == \"float\") {\n                return s([c2(bin.left), ` = ivec${leftElementSize}(`, c2(bin.right), \")\"]);\n              }\n            }\n          }\n          return s([c2(bin.left), \" = \", c2(bin.right)]);\n        }\n        let binExprText = bin.operatorToken.getText();\n        if (binExprText == \"===\") {\n          binExprText = \"==\";\n        }\n        return s([c2(bin.left), \" \", binExprText, \" \", c2(bin.right)]);\n      case ts.SyntaxKind.StringLiteral:\n        return s([\"0\"]);\n      case ts.SyntaxKind.ArrayLiteralExpression:\n        let arr = ast;\n        return s([\n          \"[\",\n          ...join(\n            arr.elements.map((e) => c2(e)),\n            \", \"\n          ),\n          \"]\"\n        ]);\n      case ts.SyntaxKind.ElementAccessExpression:\n        let elem = ast;\n        return s([c2(elem.expression), \"[\", c2(elem.argumentExpression), \"]\"]);\n      case ts.SyntaxKind.Block:\n        let block = ast;\n        return s([\n          \"{\\n\",\n          ...join(\n            block.statements.map((child) => c2(child)),\n            \";\"\n          ),\n          \"\\n}\"\n        ]);\n      case ts.SyntaxKind.TypeOfExpression:\n        return s([\"0\"]);\n      case ts.SyntaxKind.WhileStatement:\n        let whileStmt = ast;\n        return s([\"while (\", c2(whileStmt.expression), \") \", c2(whileStmt.statement)]);\n      default:\n        throw new GLSLCompilationError(`Invalid shader syntax '${ast.getText()}'`, ast);\n    }\n  }\n  function getClosureVars$1(checker, func) {\n    let result = [];\n    let recur = (node2) => {\n      if (node2.kind == ts.SyntaxKind.Identifier) {\n        let id = node2;\n        let symbol = checker.getSymbolAtLocation(id);\n        let declar = symbol.valueDeclaration;\n        if (isVariableDeclarationValue$1(checker, declar)) {\n          if (declar) {\n            if (!isInSameScope$1(declar, node2) && isInShader$2(declar)) {\n              result.push(symbol);\n            }\n          }\n        }\n      } else {\n        node2.forEachChild(recur);\n      }\n    };\n    recur(func);\n    return result;\n  }\n  function getDeclarationType$1(checker, node2) {\n    return node2.type ? checker.getTypeAtLocation(node2.type) : node2.initializer ? checker.getTypeAtLocation(node2.initializer) : checker.getTypeAtLocation(node2);\n  }\n  class GLSLShader {\n    constructor(key, source) {\n      this.globals = {};\n      this.locals = {};\n      this.key = key;\n      this.source = source;\n    }\n  }\n  function resolveFunctionName$1(f) {\n    if (ts.isMethodDeclaration(f)) {\n      let parentName = \"anon\";\n      if (f.parent && ts.isClassDeclaration(f.parent)) {\n        parentName = f.parent.name?.text ?? \"anon\";\n      }\n      return removeDoubleUnderscores$1(\n        `fn_${f.getSourceFile()?.fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\") ?? \"anon\"}_${f.getStart()}_${parentName}_static_${f.name.getText() ?? \"unknown\"}`\n      );\n    } else {\n      return removeDoubleUnderscores$1(\n        `fn_${f.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${f.getStart()}_${f.name?.text.replaceAll(\".\", \"_dot_\") ?? \"unknown\"}`\n      );\n    }\n  }\n  function resolveStructName$1(c2) {\n    if (c2.name?.text == \"ShaderInput\")\n      return \"ShaderInput\";\n    if (c2.name?.text == \"ShaderOutput\")\n      return \"ShaderOutput\";\n    return removeDoubleUnderscores$1(\n      `str_${c2.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${c2.getStart()}_${c2.name?.text ?? \"unknown\"}`.replaceAll(\"__\", \"_i_\")\n    );\n  }\n  function isInSameScope$1(node2, other) {\n    return closest(node2, (node22) => {\n      if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n        return true;\n      }\n      if (ts.isSourceFile(node22)) {\n        return true;\n      }\n    }) == closest(other, (node22) => {\n      if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n        return true;\n      }\n      if (ts.isSourceFile(node22)) {\n        return true;\n      }\n    });\n  }\n  function isInShader$2(node2) {\n    return closest(node2, (node22) => {\n      if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n        if (hasShadeupDocTag(node22, \"shader\")) {\n          return true;\n        }\n      }\n      return false;\n    });\n  }\n  function isRootNode$1(node2) {\n    let parentRoot = closest(node2, (node22) => {\n      if (ts.isMethodDeclaration(node22) || ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n        return true;\n      }\n      if (ts.isSourceFile(node22)) {\n        return true;\n      }\n    });\n    return parentRoot && ts.isSourceFile(parentRoot);\n  }\n  function isComposedFunction$1(checker, func) {\n    let isComposed = false;\n    func.parameters.forEach((param) => {\n      let type2 = checker.getTypeAtLocation(param);\n      if (type2.getCallSignatures().length > 0) {\n        isComposed = true;\n      }\n    });\n    return isComposed;\n  }\n  function resolveDeps$1(checker, root, table = {\n    graph: /* @__PURE__ */ new Map(),\n    functions: /* @__PURE__ */ new Map(),\n    structs: /* @__PURE__ */ new Map(),\n    structsProps: /* @__PURE__ */ new Map(),\n    globals: /* @__PURE__ */ new Map(),\n    composed: /* @__PURE__ */ new Map()\n  }) {\n    function resolveFunction(f1, f2, call) {\n      let n1 = f1 ? resolveFunctionName$1(f1) : \"main\";\n      let n2 = resolveFunctionName$1(f2);\n      if (f2.name?.getText() === \"__index\" || f2.name?.getText() === \"__index_assign\" || f2.name?.getText() === \"__index_assign_op\" || f2.name?.getText() === \"len\" || f2.name?.getText() === \"sample\" || hasShadeupDocTag(f2, \"noemit_gpu\"))\n        return;\n      if (isComposedFunction$1(checker, f2)) {\n        n2 = n2 + \"_composed_\" + call.pos;\n        table.composed.set(n2, call);\n      }\n      let deps = table.graph.get(n1) ?? [];\n      if (!deps.includes(n2))\n        deps.push(n2);\n      table.graph.set(n1, deps);\n      table.functions.set(n2, f2);\n    }\n    function resolveStruct(decl) {\n      let name = resolveStructName$1(decl);\n      if (table.structs.has(name))\n        return;\n      for (let member of decl.members) {\n        if (ts.isPropertyDeclaration(member)) {\n          let type2 = checker.getTypeAtLocation(member);\n          resolveTypeUse(type2, member);\n        }\n      }\n      table.structs.set(name, decl);\n    }\n    function isValidShaderType(type2, checker2) {\n      let symbol = type2.aliasSymbol || type2.getSymbol();\n      let name = checker2.typeToString(type2);\n      let bases = type2.getBaseTypes();\n      if (bases && bases.length > 0) {\n        for (let base of bases) {\n          if (!isValidShaderType(base, checker2))\n            return false;\n        }\n      }\n      if (TYPE_BLACKLIST$1.includes(symbol?.getName() ?? \"\")) {\n        return false;\n      }\n      return !TYPE_BLACKLIST$1.includes(name);\n    }\n    function resolveTypeUse(typeNode, context2, fullStruct = false) {\n      let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n      let name = checker.typeToString(typeNode);\n      if (!isValidShaderType(typeNode, checker)) {\n        throw new GLSLCompilationError(`Type '${name}' is not supported in shaders`, context2);\n      }\n      let decl = symbol?.getDeclarations()?.[0];\n      if (decl && ts.isClassDeclaration(decl)) {\n        resolveStruct(decl);\n      }\n      let typestr = checker.typeToString(typeNode);\n      if (typeNode.aliasTypeArguments)\n        for (let args of typeNode.aliasTypeArguments) {\n          resolveTypeUse(args, context2, typestr.startsWith(\"buffer<\"));\n        }\n    }\n    function resolvePropertyAccess(node2) {\n      let typeNode = checker.getTypeAtLocation(node2.expression);\n      let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n      checker.typeToString(typeNode);\n      if (!isValidShaderType(typeNode, checker)) {\n        throw new GLSLCompilationError(\n          `Type '${symbol?.getName()}' is not supported in shaders`,\n          node2\n        );\n      }\n      resolveTypeUse(typeNode, node2);\n      resolveTypeUse(checker.getTypeAtLocation(node2), node2);\n      let prop = node2.name.getText();\n      let decl = symbol?.getDeclarations()?.[0];\n      if (decl && ts.isClassDeclaration(decl)) {\n        let name2 = resolveStructName$1(decl);\n        let props = table.structsProps.get(name2) ?? /* @__PURE__ */ new Set();\n        props.add(prop);\n        table.structsProps.set(name2, props);\n      }\n    }\n    walkNodes$2(root, (node2) => {\n      if (ts.isCallExpression(node2)) {\n        let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = checker.getAliasedSymbol(exprSmybol);\n        }\n        if (exprSmybol) {\n          let funcDeclar = exprSmybol.getDeclarations()?.[0];\n          exprSmybol.valueDeclaration;\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            let signature = checker.getResolvedSignature(node2);\n            let mapping = findRealSignatureMappingToGLSL(checker, signature) ?? findSignatureMappingToGLSL(checker, exprSmybol);\n            if (mapping === null) {\n              let parentDeclar = closest(\n                node2,\n                (n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n) || ts.isArrowFunction(n)\n              );\n              if (parentDeclar && ts.isArrowFunction(parentDeclar)) {\n                let parentParentDeclar = closest(parentDeclar, (n) => ts.isCallExpression(n));\n                if (parentParentDeclar && ts.isCallExpression(parentParentDeclar)) {\n                  let parentParentSymbol = checker.getSymbolAtLocation(parentParentDeclar.expression);\n                  if (parentParentSymbol && parentParentSymbol.flags & ts.SymbolFlags.Alias) {\n                    parentParentSymbol = checker.getAliasedSymbol(parentParentSymbol);\n                  }\n                  if (parentParentSymbol) {\n                    let parentParentFuncDeclar = parentParentSymbol.getDeclarations()?.[0];\n                    if (parentParentFuncDeclar && (ts.isFunctionDeclaration(parentParentFuncDeclar) || ts.isMethodDeclaration(parentParentFuncDeclar))) {\n                      resolveFunction(parentParentFuncDeclar, funcDeclar, node2);\n                    }\n                  }\n                }\n              } else if (parentDeclar && (ts.isFunctionDeclaration(parentDeclar) || ts.isMethodDeclaration(parentDeclar))) {\n                resolveFunction(parentDeclar, funcDeclar, node2);\n              } else {\n                resolveFunction(null, funcDeclar, node2);\n              }\n              if (!table.graph.has(resolveFunctionName$1(funcDeclar))) {\n                table.graph.set(resolveFunctionName$1(funcDeclar), []);\n                resolveDeps$1(checker, funcDeclar, table);\n              }\n              let sig = checker.getSignatureFromDeclaration(funcDeclar);\n              let returnType = checker.getReturnTypeOfSignature(sig);\n              resolveTypeUse(returnType, node2);\n            }\n          }\n        }\n      }\n      if (ts.isPropertyAccessExpression(node2)) {\n        resolvePropertyAccess(node2);\n      }\n      if (ts.isIdentifier(node2)) {\n        if (checker.getSymbolAtLocation(node2)) {\n          let decl = checker.getSymbolAtLocation(node2)?.declarations;\n          let type2 = checker.getTypeAtLocation(node2);\n          resolveTypeUse(type2, node2);\n          if (decl && ts.isVariableDeclaration(decl[0])) {\n            if (!isInSameScope$1(decl[0], node2) && decl[0].getSourceFile().fileName !== root.getSourceFile().fileName) {\n              if (isVariableDeclarationValue$1(checker, decl[0])) {\n                table.globals.set(node2.text.toString(), decl[0]);\n              }\n            }\n          }\n        }\n      }\n      if (ts.isVariableDeclaration(node2)) {\n        let type2 = checker.getTypeAtLocation(node2);\n        resolveTypeUse(type2, node2);\n      }\n    });\n    return table;\n  }\n  function resolveUniforms$1(checker, root) {\n    let uniforms = [];\n    walkNodesWithCalls$1(checker, root, (node2) => {\n      if (ts.isIdentifier(node2)) {\n        let decl = checker.getSymbolAtLocation(node2);\n        if (decl && decl.flags & ts.SymbolFlags.Alias) {\n          decl = checker.getAliasedSymbol(decl);\n        }\n        if (decl && decl.declarations && decl.declarations.length == 1) {\n          let declNode = decl.declarations[0];\n          if (declNode) {\n            if (isVariableDeclarationValue$1(checker, declNode)) {\n              if (!isInSameScope$1(declNode, node2) && !isInShader$2(declNode)) {\n                if (uniforms.findIndex((d) => d === declNode) == -1)\n                  uniforms.push(declNode);\n              }\n            }\n          }\n        }\n      }\n    });\n    return uniforms;\n  }\n  function isVariableDeclarationValue$1(checker, node2) {\n    try {\n      if (ts.isVariableDeclaration(node2) || ts.isParameter(node2)) {\n        let type2 = checker.getTypeAtLocation(node2);\n        let calls = type2.getCallSignatures();\n        return calls.length == 0;\n      } else {\n        return false;\n      }\n    } catch (e) {\n      return false;\n    }\n  }\n  function isUniformable$1(checker, decl) {\n    let exprSmybol = checker.getSymbolAtLocation(decl);\n    if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n      exprSmybol = checker.getAliasedSymbol(exprSmybol);\n    }\n    if (exprSmybol) {\n      exprSmybol.getDeclarations()?.[0];\n    }\n    return ts.isVariableDeclaration(decl) || ts.isParameter(decl);\n  }\n  function addGLSLShader(key, root, checker, env2, isComputeShader = false, computeShaderSize = [1, 1, 1]) {\n    let deps = resolveDeps$1(checker, root);\n    let uniforms = resolveUniforms$1(checker, root);\n    let mapping = [...deps.graph.entries()].map(([k, v]) => v.map((d) => [k, d])).flat();\n    let sorted = [];\n    try {\n      sorted = toposort(mapping).reverse();\n    } catch (e) {\n      sorted = [];\n    }\n    let preFuncs = [];\n    for (let s of deps.structs.values()) {\n      let name = resolveStructName$1(s);\n      let hasAnyProperty = false;\n      let sp = deps.structsProps.get(name);\n      let members = s.members.map((m) => {\n        if (!ts.isPropertyDeclaration(m))\n          return \"\";\n        let type2 = checker.getTypeAtLocation(m);\n        let translated = translateType$1(checker, type2);\n        let preComment = \"\";\n        if (!sp || !sp.has(m.name.getText())) {\n          if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n            preComment = `// `;\n          }\n        }\n        if (preComment == \"\") {\n          hasAnyProperty = true;\n        }\n        return new SourceNode(\n          m.getStart(),\n          m.getEnd(),\n          `${preComment}  ${translated} ${m.name.getText()};\n`\n        );\n      });\n      let memberNames = s.members.map((m) => {\n        if (!ts.isPropertyDeclaration(m))\n          return \"\";\n        checker.getTypeAtLocation(m);\n        if (!sp || !sp.has(m.name.getText())) {\n          if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n            return \"\";\n          }\n        }\n        return m.name.getText();\n      }).filter((m) => m != \"\");\n      let memberParams = s.members.map((m) => {\n        if (!ts.isPropertyDeclaration(m))\n          return \"\";\n        let type2 = checker.getTypeAtLocation(m);\n        let translated = translateType$1(checker, type2);\n        if (!sp || !sp.has(m.name.getText())) {\n          if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n            return \"\";\n          }\n        }\n        return translated + \" \" + m.name.getText();\n      }).filter((m) => m != \"\");\n      if (!hasAnyProperty)\n        continue;\n      preFuncs.push(\n        new SourceNode(s.getStart(), s.getEnd(), [`struct ${name} {\n`, ...members, \"\\n};\\n\"])\n      );\n      if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n        preFuncs.push(\n          new SourceNode(s.getStart(), s.getEnd(), [\n            name + \" _make_struct_\" + name + \"(\",\n            memberParams.join(\", \") + \")\",\n            \" {\\n\",\n            name,\n            \" _s;\",\n            \"\",\n            ...memberNames.map((m) => `  _s.${m} = ${m};\n`),\n            \"  return _s;\\n\",\n            \"}\\n\"\n          ])\n        );\n      }\n    }\n    for (let u of uniforms) {\n      if (isUniformable$1(checker, u)) {\n        let _type = checker.getTypeAtLocation(u);\n        let translated = translateType$1(checker, _type);\n        let isGlobalVar = isRootNode$1(u);\n        let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${u.name.getText()}`;\n        if (translated.includes(\"[]\")) {\n          translated = translated.replace(/\\[\\]$/, ``);\n          preFuncs.push(\n            new SourceNode(u.getStart(), u.getEnd(), [\n              \"uniform \",\n              \"int\",\n              \" \",\n              glslVarName,\n              \"_size;\\n\"\n            ])\n          );\n          glslVarName += `[%${glslVarName}_size%]`;\n        }\n        preFuncs.push(\n          new SourceNode(u.getStart(), u.getEnd(), [\"uniform \", translated, \" \", glslVarName, \";\\n\"])\n        );\n        if (translated == \"sampler2D\") {\n          preFuncs.push(\n            new SourceNode(u.getStart(), u.getEnd(), [\"uniform vec2 \", glslVarName, \"_size;\\n\"])\n          );\n        }\n      }\n    }\n    for (let k of sorted) {\n      if (k == \"main\")\n        continue;\n      let v = deps.functions.get(k);\n      if (v) {\n        let sourceFile2 = v.getSourceFile();\n        let originalFile2 = env2.files.find((f) => f.path == sourceFile2.fileName);\n        preFuncs.push(\n          compile$2(\n            { parentFunction: v, checker, composed: deps.composed.get(k) ?? null },\n            v,\n            originalFile2?.mapping\n          )\n        );\n      }\n    }\n    let sourceFile = root.getSourceFile();\n    let originalFile = env2.files.find((f) => f.path == sourceFile?.fileName);\n    let main = compile$2(\n      {\n        checker\n      },\n      root,\n      originalFile.mapping\n    );\n    preFuncs.push(main);\n    let source = new SourceNode(root.getStart(), root.getEnd(), preFuncs);\n    let ss = { indexMapping: [], str: \"\" };\n    source.toString(ss);\n    let matches = glslHeader.match(/^([a-zA-Z_][a-zA-Z0-9_]+ [^\\(]+)/gm);\n    let finalShaderOutput = ss.str;\n    let headerSplits = [];\n    for (let i = 0; i < matches.length; i++) {\n      let index = glslHeader.indexOf(matches[i]);\n      let toIndex = i == matches.length - 1 ? glslHeader.length : glslHeader.indexOf(matches[i + 1]);\n      headerSplits.push(glslHeader.substring(index, toIndex));\n    }\n    let realHeader = \"\";\n    for (let i = 0; i < headerSplits.length; i++) {\n      let headerText = headerSplits[i];\n      let fnName = headerText.match(/^[a-zA-Z_][a-zA-Z0-9_]+ ([^\\(]+)/)?.[1];\n      if (fnName) {\n        if (finalShaderOutput.includes(fnName)) {\n          realHeader += headerText;\n        }\n      }\n    }\n    finalShaderOutput = realHeader + finalShaderOutput;\n    let output = new GLSLShader(`shd_${key}`, finalShaderOutput);\n    output.sourceMapping = ss.indexMapping;\n    for (let u of uniforms) {\n      if (isUniformable$1(checker, u)) {\n        let name = u.name.getText();\n        let isGlobalVar = isRootNode$1(u);\n        if (name) {\n          let filterProps = function(props) {\n            if (props && props.name) {\n              let sp = deps.structsProps.get(props.name);\n              let realStruct = deps.structs.get(props.name);\n              if (props.type == \"struct\" && realStruct) {\n                for (let f of Object.keys(props.fields)) {\n                  if (!sp || !sp.has(f)) {\n                    delete props.fields[f];\n                  } else {\n                    if (props.fields[f].type == \"struct\") {\n                      props.fields[f] = filterProps(props.fields[f]);\n                    }\n                  }\n                }\n              }\n            }\n            return props;\n          };\n          let typeOut = getDeclarationType$1(checker, u);\n          let typeNode = checker.getTypeAtLocation(u);\n          let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n          let decl = symbol?.getDeclarations()?.[0];\n          if (decl && ts.isClassDeclaration(decl)) {\n            resolveStructName$1(decl);\n          }\n          if (isGlobalVar) {\n            output.globals[name] = {\n              fileName: getNodeSourceFileName$1(u),\n              structure: filterProps(translateType$1(checker, typeOut, true))\n            };\n          } else {\n            output.locals[name] = filterProps(translateType$1(checker, typeOut, true));\n          }\n        }\n      }\n    }\n    return output;\n  }\n  function getNodeSourceFileName$1(node2) {\n    let found = closest(node2, (n) => ts.isSourceFile(n));\n    if (found && ts.isSourceFile(found)) {\n      return found.fileName;\n    } else {\n      return \"\";\n    }\n  }\n  function walkNodes$2(node2, cb) {\n    cb(node2);\n    node2.forEachChild((n) => walkNodes$2(n, cb));\n  }\n  function walkNodesWithCalls$1(checker, node2, cb) {\n    cb(node2);\n    node2.forEachChild((n) => {\n      if (ts.isCallExpression(node2)) {\n        let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = checker.getAliasedSymbol(exprSmybol);\n        }\n        if (exprSmybol) {\n          let funcDeclar = exprSmybol.getDeclarations()?.[0];\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            let signature = checker.getResolvedSignature(node2);\n            let mapping = findRealSignatureMappingToGLSL(checker, signature) ?? findSignatureMappingToGLSL(checker, exprSmybol);\n            if (mapping === null) {\n              if (funcDeclar.body) {\n                walkNodesWithCalls$1(checker, funcDeclar.body, cb);\n              }\n            }\n          }\n        }\n      }\n      walkNodesWithCalls$1(checker, n, cb);\n    });\n  }\n  function findSignatureMappingToGLSL(checker, sym) {\n    let matcher = /=(?:glsl|univ)\\((.+)\\)$/g;\n    if (!sym.valueDeclaration)\n      return null;\n    let doc = ts.getJSDocTags(sym.valueDeclaration);\n    for (let d of doc) {\n      if (d.tagName.text !== \"shadeup\")\n        continue;\n      if (typeof d.comment === \"string\") {\n        let matches = matcher.exec(d.comment);\n        if (matches) {\n          return matches[1];\n        }\n      }\n    }\n    return null;\n  }\n  function findRealSignatureMappingToGLSL(checker, sig) {\n    let matcher = /=(?:glsl|univ)\\((.+)\\)$/g;\n    let doc = ts.getJSDocTags(sig.getDeclaration());\n    for (let d of doc) {\n      if (d.tagName.text !== \"shadeup\")\n        continue;\n      if (typeof d.comment === \"string\") {\n        let matches = matcher.exec(d.comment);\n        if (matches) {\n          return matches[1];\n        }\n      }\n    }\n    return null;\n  }\n  function removeDoubleUnderscores$1(str) {\n    return str.replace(/__/g, \"_ii\");\n  }\n  let {\n    factory,\n    isArrayTypeNode,\n    isCallExpression,\n    isIdentifier,\n    isPropertyAccessChain,\n    isPropertyAccessExpression\n  } = ts;\n  const TYPE_BLACKLIST = [\n    \"never\",\n    \"object\",\n    \"symbol\",\n    \"bigint\",\n    \"undefined\",\n    \"null\",\n    \"map\",\n    \"string\"\n  ];\n  const RESERVED_WORDS = [\n    \"this\",\n    \"target\",\n    \"attribute\",\n    \"sample\",\n    \"varying\",\n    \"uniform\",\n    \"layout\",\n    \"delete\"\n  ];\n  function generateDefaultForType$1(checker, _type_node) {\n    let _type = checker.getTypeFromTypeNode(_type_node);\n    let name = (_type.aliasSymbol || _type.getSymbol())?.escapedName.toString();\n    switch (name) {\n      case \"int\":\n        return \"i32(0)\";\n      case \"float\":\n        return \"f32(0.0)\";\n      case \"float2\":\n        return \"vec2<f32>(0.0, 0.0)\";\n      case \"float3\":\n        return \"vec3<f32>(0.0, 0.0, 0.0)\";\n      case \"float4\":\n        return \"vec4<f32>(0.0, 0.0, 0.0, 0.0)\";\n      case \"int2\":\n        return \"vec2<i32>(0, 0)\";\n      case \"int3\":\n        return \"vec3<i32>(0, 0, 0)\";\n      case \"int4\":\n        return \"vec4<i32>(0, 0, 0, 0)\";\n      case \"uint\":\n        return \"u32(0)\";\n      case \"uint2\":\n        return \"vec2<u32>(0, 0)\";\n      case \"uint3\":\n        return \"vec3<u32>(0, 0, 0)\";\n      case \"uint4\":\n        return \"vec4<u32>(0, 0, 0, 0)\";\n      case \"float2x2\":\n        return \"mat2x2<f32>(0.0, 0.0, 0.0, 0.0)\";\n      case \"float3x3\":\n        return \"mat3x3<f32>(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n      case \"float4x4\":\n        return \"mat4x4<f32>(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n      case \"bool\":\n        return \"0\";\n      default:\n        let decl = _type.getSymbol()?.getDeclarations();\n        if (ts.isTupleTypeNode(_type_node)) {\n          let len = _type_node.elements.length;\n          let args = [];\n          let rootNode = _type_node.elements[0];\n          if (rootNode) {\n            for (let i = 0; i < len; i++) {\n              args.push(generateDefaultForType$1(checker, _type_node.elements[i]));\n            }\n            let rootType = checker.getTypeFromTypeNode(rootNode);\n            return translateType(checker, rootType) + `[${len}] {` + args.join(\", \") + \"}\";\n          } else {\n            return \"0\";\n          }\n        }\n        if (decl && decl.length > 0) {\n          let d = decl[0];\n          let structProps = [];\n          if (ts.isClassDeclaration(d)) {\n            let symd = _type.getSymbol();\n            symd?.members?.forEach((v, k) => {\n              let decl2 = v.valueDeclaration;\n              if (decl2 && ts.isPropertyDeclaration(decl2)) {\n                structProps.push([k?.toString() ?? \"\", decl2.type]);\n              }\n            });\n            let sortedPropsByKey = structProps.sort((a, b) => {\n              return a[0].localeCompare(b[0]);\n            });\n            let args = sortedPropsByKey.map((p) => {\n              return \"/* \" + p[0] + \": */ \" + generateDefaultForType$1(checker, p[1]) + \"\\n\";\n            });\n            return \"_make_struct_\" + resolveStructName(d) + \"(\\n\" + args.join(\", \") + \"\\n)\";\n          } else {\n            return \"0\";\n          }\n        } else {\n          return \"0\";\n        }\n    }\n  }\n  function getTypeFallback$1(checker, t) {\n    let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n    if (!n && t.intrinsicName)\n      n = t.intrinsicName;\n    if (typeof n !== \"string\") {\n      let props = t.getApparentProperties();\n      if (props.length > 0) {\n        for (let p of props) {\n          if (p.escapedName.toString() === \"_opaque_int\")\n            return \"int\";\n          if (p.escapedName.toString() === \"_opaque_float\")\n            return \"float\";\n          if (p.escapedName.toString() === \"_opaque_uint\")\n            return \"uint\";\n        }\n      }\n      let btype = t.getBaseTypes();\n      if (btype && btype.length > 0) {\n        for (let b of btype) {\n          let tn = getTypeFallback$1(checker, b);\n          if (tn)\n            return tn;\n        }\n        return null;\n      }\n    } else {\n      return n;\n    }\n  }\n  function followTypeReferences(t) {\n    if (t.flags & ts.TypeFlags.Object && t.objectFlags & ts.ObjectFlags.Reference) {\n      if (t.target === t) {\n        return t;\n      }\n      return followTypeReferences(t.target);\n    } else {\n      return t;\n    }\n  }\n  function getArrayTypeInfo(checker, t) {\n    let n = getTypeFallback$1(checker, t);\n    let originalType = t;\n    if (n === void 0) {\n      t = followTypeReferences(t);\n    }\n    let isArray = false;\n    let staticSize = -1;\n    let elementType = \"\";\n    if (n === \"Array\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n      let typeRef = originalType;\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      let translated = translateType(checker, args[0]);\n      if (tsutils.isTupleType(t)) {\n        staticSize = t.fixedLength;\n      }\n      checker.typeToString(typeRef);\n      isArray = true;\n      elementType = translated;\n    }\n    return {\n      isArray,\n      staticSize,\n      elementType\n    };\n  }\n  function translateType(checker, t, templateFormat = false, usedInsidePotentiallyExternalType = false) {\n    let n = getTypeFallback$1(checker, t);\n    let originalType = t;\n    if (n === void 0) {\n      t = followTypeReferences(t);\n    }\n    if (templateFormat) {\n      let name = n?.toString() ?? \"unknown\";\n      if (name === \"Array\" || name === \"array\" || name === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n        let typeRef = originalType;\n        let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n        return {\n          type: name == \"buffer\" ? \"buffer\" : \"array\",\n          element: translateType(checker, args[0], true),\n          staticSize: args.length\n        };\n      }\n      if (name == \"boolean\" || name == \"false\" || name == \"true\")\n        name = \"bool\";\n      if (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\") || name == \"bool\" || name == \"texture2d\" || name == \"texture3d\")\n        return { type: \"primitive\", name };\n      if (name == \"atomic\") {\n        let args = t.typeArguments || checker.getTypeArguments(t);\n        let translated = translateType(checker, args[0]);\n        return { type: \"primitive\", name, element: translated };\n      }\n      let symbol = t.aliasSymbol || t.getSymbol();\n      if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n        if (ts.isClassDeclaration(symbol.declarations[0])) {\n          let fields = [];\n          let decl = symbol.declarations[0];\n          for (let member of decl.members) {\n            if (ts.isPropertyDeclaration(member)) {\n              let name2 = member.name.getText();\n              let type2 = checker.getTypeFromTypeNode(member.type);\n              fields.push([name2, translateType(checker, type2, true)]);\n            }\n          }\n          return {\n            type: \"struct\",\n            name: resolveStructName(decl),\n            fields\n          };\n        } else {\n          return {\n            type: \"unknown\"\n          };\n        }\n      }\n    } else {\n      if (n === \"Array\" || n === \"array\" || n === \"buffer\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n        let typeRef = originalType;\n        let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n        let translated = translateType(checker, args[0]);\n        let typeInfo = getWGSLTypeInfo(translated);\n        let toStringed = checker.typeToString(typeRef);\n        if (n == \"buffer\") {\n          return `array<${translated}>`;\n        }\n        if (typeInfo.needsAlignment) {\n          translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n        }\n        if (toStringed.endsWith(\"[]\")) {\n          return \"array<\" + translated + \">\";\n        } else {\n          let arraySize = 0;\n          if (tsutils.isTupleType(t)) {\n            arraySize = t.fixedLength;\n          }\n          return \"array<\" + translated + \", \" + arraySize + \">\";\n        }\n      }\n      if (n === \"texture2d\")\n        return `sampler`;\n      if (n == \"atomic\") {\n        let args = t.typeArguments || checker.getTypeArguments(t);\n        let translated = translateType(checker, args[0]);\n        return `atomic<${translated}>`;\n      }\n      if (n === \"bool\")\n        return \"bool\";\n      if (n === \"boolean\")\n        return \"bool\";\n      if (n === \"uint8\")\n        return \"f32\";\n      if (n === \"float\")\n        return \"f32\";\n      if (n === \"float2\")\n        return \"vec2<f32>\";\n      if (n === \"float3\")\n        return \"vec3<f32>\";\n      if (n === \"float4\")\n        return \"vec4<f32>\";\n      if (n === \"int\")\n        return \"i32\";\n      if (n === \"int2\")\n        return \"vec2<i32>\";\n      if (n === \"int3\")\n        return \"vec3<i32>\";\n      if (n === \"int4\")\n        return \"vec4<i32>\";\n      if (n === \"uint\")\n        return \"u32\";\n      if (n === \"uint2\")\n        return \"vec2<u32>\";\n      if (n === \"uint3\")\n        return \"vec3<u32>\";\n      if (n === \"uint4\")\n        return \"vec4<u32>\";\n      if (n === \"float2x2\")\n        return \"mat2x2<f32>\";\n      if (n === \"float3x3\")\n        return \"mat3x3<f32>\";\n      if (n === \"float4x4\")\n        return \"mat4x4<f32>\";\n      if (n === \"void\")\n        return \"void\";\n      if (n === \"error\")\n        return \"void\";\n      if (t.isUnion()) {\n        let types2 = t.types.map((t2) => translateType(checker, t2));\n        for (let sub of types2) {\n          if (sub && sub !== \"void\" && sub !== \"undefined\")\n            return sub;\n        }\n      }\n      let symbol = t.aliasSymbol || t.getSymbol();\n      if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n        if (ts.isClassDeclaration(symbol.declarations[0])) {\n          return resolveStructName(symbol.declarations[0]);\n        } else {\n          return n?.toString() ?? \"void\";\n        }\n      } else {\n        return n?.toString() ?? \"void\";\n      }\n    }\n  }\n  function isTypeNameVector(name) {\n    if (name == \"float2\" || name == \"float3\" || name == \"float4\" || name == \"int2\" || name == \"int3\" || name == \"int4\" || name == \"uint2\" || name == \"uint3\" || name == \"uint4\") {\n      return true;\n    }\n    return false;\n  }\n  function getTypeNameVectorElementType(name) {\n    if (name == \"float\") {\n      return [\"float\", 1];\n    }\n    if (name == \"int\") {\n      return [\"int\", 1];\n    }\n    if (name == \"uint\") {\n      return [\"uint\", 1];\n    }\n    if (name.startsWith(\"float\")) {\n      return [\"float\", parseInt(name.substring(5))];\n    }\n    if (name.startsWith(\"int\")) {\n      return [\"int\", parseInt(name.substring(3))];\n    }\n    if (name.startsWith(\"uint\")) {\n      return [\"uint\", parseInt(name.substring(4))];\n    }\n    if (name.startsWith(\"f32\")) {\n      return [\"f32\", 1];\n    }\n    if (name.startsWith(\"i32\")) {\n      return [\"i32\", 1];\n    }\n    if (name.startsWith(\"u32\")) {\n      return [\"u32\", 1];\n    }\n    if (name.endsWith(\"<f32>\")) {\n      return [\"float\", parseInt(name.substring(3, 4))];\n    }\n    if (name.endsWith(\"<i32>\")) {\n      return [\"int\", parseInt(name.substring(3, 4))];\n    }\n    if (name.endsWith(\"<u32>\")) {\n      return [\"uint\", parseInt(name.substring(3, 4))];\n    }\n    return [\"\", 0];\n  }\n  function getTypeNameVectorElementTypeWGSL(name) {\n    if (name == \"f32\") {\n      return [\"f32\", 1];\n    }\n    if (name == \"i32\") {\n      return [\"i32\", 1];\n    }\n    if (name == \"u32\") {\n      return [\"u32\", 1];\n    }\n    if (name.endsWith(\"<f32>\")) {\n      return [\"f32\", parseInt(name.substring(3, 4))];\n    }\n    if (name.endsWith(\"<i32>\")) {\n      return [\"i32\", parseInt(name.substring(3, 4))];\n    }\n    if (name.endsWith(\"<u32>\")) {\n      return [\"u32\", parseInt(name.substring(3, 4))];\n    }\n    return [\"\", 0];\n  }\n  function isTranslatedTypeNameVectorOrScalar(name) {\n    if (name == \"float\" || name == \"int\" || name == \"uint\")\n      return true;\n    if (name.endsWith(\"<f32>\") || name.endsWith(\"<i32>\") || name.endsWith(\"<u32>\")) {\n      if (name.startsWith(\"vec2\") || name.startsWith(\"vec3\") || name.startsWith(\"vec4\")) {\n        return true;\n      }\n      return true;\n    }\n    return false;\n  }\n  function getWGSLTypeInfo(name) {\n    switch (name) {\n      case \"bool\":\n        return { type: \"bool\", length: 1, size: 1, needsAlignment: true, elementType: \"i32\" };\n      case \"u32\":\n        return {\n          type: \"integer\",\n          length: 1,\n          signed: false,\n          size: 4,\n          needsAlignment: true,\n          elementType: \"u32\"\n        };\n      case \"i32\":\n        return {\n          type: \"integer\",\n          length: 1,\n          signed: true,\n          size: 4,\n          needsAlignment: true,\n          elementType: \"i32\"\n        };\n      case \"f32\":\n        return { type: \"float\", length: 1, size: 4, needsAlignment: true, elementType: \"f32\" };\n      case \"vec2<f32>\":\n        return {\n          type: \"vector\",\n          length: 2,\n          element: \"float\",\n          size: 8,\n          needsAlignment: true,\n          elementType: \"f32\"\n        };\n      case \"vec3<f32>\":\n        return {\n          type: \"vector\",\n          length: 3,\n          element: \"float\",\n          size: 12,\n          needsAlignment: true,\n          elementType: \"f32\"\n        };\n      case \"vec4<f32>\":\n        return {\n          type: \"vector\",\n          length: 4,\n          element: \"float\",\n          size: 16,\n          needsAlignment: false,\n          elementType: \"f32\"\n        };\n      case \"vec2<i32>\":\n        return {\n          type: \"vector\",\n          length: 2,\n          signed: true,\n          element: \"integer\",\n          size: 8,\n          needsAlignment: true,\n          elementType: \"i32\"\n        };\n      case \"vec3<i32>\":\n        return {\n          type: \"vector\",\n          length: 3,\n          signed: true,\n          element: \"integer\",\n          size: 12,\n          needsAlignment: true,\n          elementType: \"i32\"\n        };\n      case \"vec4<i32>\":\n        return {\n          type: \"vector\",\n          length: 4,\n          signed: true,\n          element: \"integer\",\n          size: 16,\n          needsAlignment: false,\n          elementType: \"i32\"\n        };\n      case \"vec2<u32>\":\n        return {\n          type: \"vector\",\n          length: 2,\n          signed: false,\n          element: \"integer\",\n          size: 8,\n          needsAlignment: true,\n          elementType: \"u32\"\n        };\n      case \"vec3<u32>\":\n        return {\n          type: \"vector\",\n          length: 3,\n          signed: false,\n          element: \"integer\",\n          size: 12,\n          needsAlignment: true,\n          elementType: \"u32\"\n        };\n      case \"vec4<u32>\":\n        return {\n          type: \"vector\",\n          length: 4,\n          signed: false,\n          element: \"integer\",\n          size: 16,\n          needsAlignment: false,\n          elementType: \"u32\"\n        };\n      case \"mat2x2<f32>\":\n        return { type: \"matrix\", element: \"float\", size: 16, needsAlignment: false };\n      case \"mat3x3<f32>\":\n        return { type: \"matrix\", element: \"float\", size: 36, needsAlignment: false };\n      case \"mat4x4<f32>\":\n        return { type: \"matrix\", element: \"float\", size: 64, needsAlignment: false };\n      default:\n        return { type: \"unknown\", size: 0, needsAlignment: false };\n    }\n  }\n  function isVector(checker, t) {\n    let name = getTypeFallback$1(checker, t);\n    if (name) {\n      return isTypeNameVector(name);\n    }\n    return false;\n  }\n  function getVectorElementType(checker, t) {\n    let name = getTypeFallback$1(checker, t);\n    if (name) {\n      return getTypeNameVectorElementType(name);\n    }\n    return [\"\", 0];\n  }\n  function isNumeric(checker, t) {\n    let name = getTypeFallback$1(checker, t);\n    if (name && (name.startsWith(\"float\") || name.startsWith(\"int\") || name.startsWith(\"uint\"))) {\n      return true;\n    }\n    return false;\n  }\n  function escapeIdentifier(id) {\n    if (RESERVED_WORDS.includes(id)) {\n      return \"_\" + id;\n    }\n    return id.replaceAll(\"___\", \"_ii_\").replaceAll(\"__\", \"_i_\");\n  }\n  function isAssignableType(t) {\n    return !(t.startsWith(\"texture\") || t.startsWith(\"sampler\") || t.startsWith(\"buffer\"));\n  }\n  function isGLSLType(name) {\n    return name.startsWith(\"vec\") || name.startsWith(\"mat\") || name.startsWith(\"sampler\") || name.startsWith(\"texture\") || name == \"bool\" || name == \"f32\" || name == \"i32\" || name == \"void\";\n  }\n  function autoCastNumeric(value, input, expected, node2) {\n    let inputType = getTypeNameVectorElementTypeWGSL(input);\n    let expectedType = getTypeNameVectorElementTypeWGSL(expected);\n    if (inputType[0] !== \"\" && expectedType[0] !== \"\") {\n      if (inputType[0] != expectedType[0]) {\n        if (expectedType[1] == 1) {\n          if (typeof expectedType[0] == \"string\" && expectedType[0].startsWith(\"vector\")) {\n            return new SourceNode(value.startIndex, value.endIndex, [value]);\n          } else {\n            if (inputType[0] == \"u32\") {\n              throw new GLSLCompilationError(`Cannot cast uint to ${expectedType[0]}`, node2);\n            }\n            if (expectedType[0] == \"i32\")\n              ;\n            return new SourceNode(value.startIndex, value.endIndex, [\n              `${expectedType[0]}(`,\n              value,\n              `)`\n            ]);\n          }\n        } else {\n          if (inputType[0] == \"u32\") {\n            throw new GLSLCompilationError(`Cannot cast uint to ${expectedType[0]}`, node2);\n          }\n          return new SourceNode(value.startIndex, value.endIndex, [\n            `vec${expectedType[1]}<${expectedType[0]}>(`,\n            value,\n            `)`\n          ]);\n        }\n      }\n    }\n    return value;\n  }\n  function isUniformAccess(ctx, expr) {\n    if (isCallExpression(expr)) {\n      expr = expr.expression;\n    }\n    let id = null;\n    if (ts.isIdentifier(expr)) {\n      id = expr;\n    }\n    if (isPropertyAccessExpression(expr)) {\n      let chain = expr;\n      while (chain.expression) {\n        if (ts.isPropertyAccessExpression(chain.expression)) {\n          chain = chain.expression;\n        } else {\n          break;\n        }\n      }\n      id = chain.expression;\n    }\n    if (id) {\n      if (ts.isIdentifier(id)) {\n        let sym = ctx.checker.getSymbolAtLocation(id);\n        if (sym && sym.flags & ts.SymbolFlags.Alias) {\n          sym = ctx.checker.getAliasedSymbol(sym);\n        }\n        if (sym?.declarations?.length == 1) {\n          let decl = sym.declarations[0];\n          if (isUniformable(ctx.checker, decl)) {\n            if (isVariableDeclarationValue(ctx.checker, decl)) {\n              if (!isInSameScope(decl, id)) {\n                if (!isInShader$1(decl)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    return false;\n  }\n  function accessWrap(ctx, expr, inner) {\n    if (isPropertyAccessExpression(expr)) {\n      let chain = expr;\n      while (chain.expression) {\n        if (ts.isPropertyAccessExpression(chain.expression)) {\n          chain = chain.expression;\n        } else {\n          break;\n        }\n      }\n      let id = chain.expression;\n      if (ts.isIdentifier(id)) {\n        let sym = ctx.checker.getSymbolAtLocation(id);\n        if (sym && sym.flags & ts.SymbolFlags.Alias) {\n          sym = ctx.checker.getAliasedSymbol(sym);\n        }\n        if (sym?.declarations?.length == 1) {\n          let decl = sym.declarations[0];\n          if (isUniformable(ctx.checker, decl)) {\n            if (isVariableDeclarationValue(ctx.checker, decl)) {\n              if (!isInSameScope(decl, chain.expression)) {\n                if (!isInShader$1(decl)) {\n                  let outputType = ctx.checker.getTypeAtLocation(expr);\n                  let isBooleanAccess = false;\n                  if (isArrayType$1(outputType, ctx.checker)) {\n                    let typeRef = outputType;\n                    let args = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n                    let t = args[0];\n                    let n = getTypeFallback$1(ctx.checker, t);\n                    if (n == \"boolean\" || n == \"bool\") {\n                      isBooleanAccess = true;\n                    }\n                  } else {\n                    let n = getTypeFallback$1(ctx.checker, outputType);\n                    if (n == \"boolean\" || n == \"bool\") {\n                      isBooleanAccess = true;\n                    }\n                  }\n                  if (isBooleanAccess) {\n                    return new SourceNode(inner.startIndex, inner.endIndex, [`((`, inner, `) == 1)`]);\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    return inner;\n  }\n  function getVectorMask(num) {\n    let outMask = \"\";\n    let comps = [\"x\", \"y\", \"z\", \"w\"];\n    for (let i = 0; i < num; i++) {\n      outMask += comps[i];\n    }\n    return outMask;\n  }\n  function convertConciseBodyToBlock(body) {\n    if (ts.isBlock(body)) {\n      return body;\n    } else {\n      return ts.factory.createBlock([ts.factory.createReturnStatement(body)]);\n    }\n  }\n  function getRealReturnType(checker, call) {\n    let fnCallSignature = checker.getResolvedSignature(call);\n    return fnCallSignature.getReturnType();\n  }\n  function augmentParameter(checker, p) {\n    const type2 = checker.getTypeAtLocation(p);\n    const tt = translateType(checker, type2);\n    if (tt == \"sampler\") {\n      const args = checker.getTypeArguments(type2);\n      let innerType = \"f32\";\n      if (args && args.length > 0) {\n        let [et, _] = getVectorElementType(checker, args[0]);\n        innerType = {\n          float: \"f32\",\n          int: \"i32\",\n          uint: \"u32\"\n        }[et];\n      }\n      return [\n        new SourceNode(p.getStart(), p.getEnd(), [\n          p.name.getText() + \"_texture: texture_2d<\" + innerType + \">\"\n        ])\n      ];\n    }\n    return [];\n  }\n  function augmentArgument(ctx, arg) {\n    let type2 = ctx.checker.getTypeAtLocation(arg);\n    let tt = translateType(ctx.checker, type2);\n    if (tt == \"sampler\") {\n      let args = ctx.checker.getTypeArguments(type2);\n      if (args && args.length > 0) {\n        getVectorElementType(ctx.checker, args[0]);\n      }\n      return [new SourceNode(arg.getStart(), arg.getEnd(), [compile$1(ctx, arg), \"_texture\"])];\n    }\n    return [];\n  }\n  function compile$1(ctx, ast, originalMapping) {\n    function c2(ast2) {\n      if (!ast2) {\n        return s([]);\n      }\n      return compile$1(ctx, ast2);\n    }\n    function cplain(ast2) {\n      if (!ast2) {\n        return s([]);\n      }\n      return compile$1(\n        {\n          checker: ctx.checker,\n          parentFunction: ctx.parentFunction\n        },\n        ast2\n      );\n    }\n    function s(c22) {\n      if (originalMapping) {\n        let reverseMapped = lookupIndexMappingRange(originalMapping, ast.getStart(), ast.getEnd());\n        return new SourceNode(reverseMapped.start, reverseMapped.end, c22);\n      } else {\n        return new SourceNode(0, 0, c22);\n      }\n    }\n    function join(c22, sep) {\n      return c22.reduce((acc, cur) => {\n        if (acc.length === 0) {\n          return [cur];\n        }\n        return [...acc, sep, cur];\n      }, []);\n    }\n    function children() {\n      return ast.getChildren().map((child) => c2(child));\n    }\n    let prefixFunctions = [];\n    if (ctx.composed) {\n      if (ts.isMethodDeclaration(ast) || ts.isFunctionDeclaration(ast)) {\n        for (let [i, arg] of ctx.composed.arguments.entries()) {\n          if (ts.isArrowFunction(arg)) {\n            let paramFromIndex = ast.parameters[i];\n            let name = paramFromIndex.name.getText() + \"_composed_\" + arg.pos + \"_arg_\" + i;\n            let signature = ctx.checker.getSignatureFromDeclaration(arg);\n            let returnType = signature.getReturnType();\n            let vars = getClosureVars(ctx.checker, arg);\n            let vvv = vars.map((p) => {\n              let tt = translateType(ctx.checker, ctx.checker.getTypeAtLocation(p.declarations[0]));\n              return s([p.escapedName, isAssignableType(tt) ? \"_const\" : \"\", \": \", tt]);\n            });\n            let joins = join(\n              [\n                ...arg.parameters.map((p) => {\n                  let aug = augmentParameter(ctx.checker, p);\n                  return [cplain(p), ...aug];\n                }).flat(),\n                ...vvv\n              ],\n              \", \"\n            );\n            let returnStr = \" -> \" + translateType(ctx.checker, returnType);\n            if (returnStr == \" -> void\")\n              returnStr = \"\";\n            prefixFunctions.push(\n              s([\n                \"fn \",\n                name,\n                \"(\",\n                ...joins,\n                \")\",\n                returnStr,\n                \" {\\n\",\n                ...vars.filter((p) => {\n                  let type2 = ctx.checker.getTypeAtLocation(p.declarations[0]);\n                  let tt = translateType(ctx.checker, type2);\n                  return isAssignableType(tt);\n                }).map((p) => {\n                  return s([\n                    \"var \",\n                    p.escapedName.toString(),\n                    \" = \",\n                    p.escapedName.toString(),\n                    \"_const;\\n\"\n                  ]);\n                }),\n                ...arg.parameters.filter((p) => {\n                  let type2 = ctx.checker.getTypeAtLocation(p.type);\n                  let tt = translateType(ctx.checker, type2);\n                  return isAssignableType(tt);\n                }).map((p) => {\n                  return s([\"var \", p.name.getText(), \" = \", p.name.getText(), \"_const;\\n\"]);\n                }),\n                ...convertConciseBodyToBlock(arg.body).statements.map((s2) => c2(s2)) ?? [],\n                \"\\n}\\n\\n\"\n              ])\n            );\n          }\n        }\n      }\n    }\n    function autoCastParameter(callExpr, argIndex) {\n      let signature = ctx.checker.getResolvedSignature(callExpr);\n      let params = signature.getParameters();\n      let param = params[argIndex];\n      let paramType = ctx.checker.getTypeOfSymbolAtLocation(param, callExpr);\n      let paramTypeString = translateType(ctx.checker, paramType);\n      let arg = callExpr.arguments[argIndex];\n      let argType = ctx.checker.getTypeAtLocation(arg);\n      let argTypeString = translateType(ctx.checker, argType);\n      if (paramTypeString !== argTypeString) {\n        return autoCastNumeric(c2(arg), argTypeString, paramTypeString, arg);\n      }\n      return s([c2(arg)]);\n    }\n    switch (ast.kind) {\n      case ts.SyntaxKind.FirstPunctuation:\n        return s([ast.getText()]);\n      case ts.SyntaxKind.SyntaxList:\n        return s(children());\n      case ts.SyntaxKind.SourceFile:\n        return s(children());\n      case ts.SyntaxKind.BreakStatement:\n        return s([\"break;\"]);\n      case ts.SyntaxKind.ContinueStatement:\n        return s([\"continue;\"]);\n      case ts.SyntaxKind.MethodDeclaration:\n        let fnDeclar = ast;\n        let fnName = resolveFunctionName(fnDeclar);\n        if (ctx.composed) {\n          fnName = fnName + \"_composed_\" + ctx.composed.pos;\n        }\n        let isStatic = false;\n        let signature = ctx.checker.getSignatureFromDeclaration(fnDeclar);\n        if (ts.canHaveModifiers(fnDeclar)) {\n          let mods = ts.getModifiers(fnDeclar);\n          if (mods) {\n            if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n              isStatic = true;\n            }\n          }\n        }\n        let returnType = signature.getReturnType();\n        let returnStr = \" -> \" + translateType(ctx.checker, returnType);\n        if (returnStr == \" -> void\")\n          returnStr = \"\";\n        return s([\n          ...prefixFunctions,\n          \"fn \",\n          fnName,\n          \"(\",\n          ...join(\n            [\n              ...isStatic ? [] : [\n                \"_this: \" + translateType(ctx.checker, ctx.checker.getTypeAtLocation(fnDeclar.parent))\n              ],\n              ...fnDeclar.parameters.filter((p) => {\n                let type22 = ctx.checker.getTypeAtLocation(p);\n                if (type22.getCallSignatures().length > 0) {\n                  return false;\n                }\n                return true;\n              }).map((p) => {\n                const o = c2(p);\n                const aug = augmentParameter(ctx.checker, p);\n                return [o, ...aug];\n              }).flat()\n            ],\n            \", \"\n          ),\n          \")\",\n          returnStr,\n          \" {\\n\",\n          ...fnDeclar.parameters.filter((p) => {\n            let type22 = ctx.checker.getTypeAtLocation(p);\n            if (type22.getCallSignatures().length > 0) {\n              return false;\n            }\n            return true;\n          }).map(\n            (p) => s([\n              \"var \",\n              escapeIdentifier(p.name.getText()),\n              \" = \",\n              escapeIdentifier(p.name.getText()),\n              \"_const;\\n\"\n            ])\n          ),\n          ...fnDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n          \"\\n}\\n\\n\"\n        ]);\n      case ts.SyntaxKind.FunctionDeclaration:\n        let mthdDeclar = ast;\n        let mthdsignature = ctx.checker.getSignatureFromDeclaration(mthdDeclar);\n        let mthdreturnType = mthdsignature.getReturnType();\n        let mthdName = resolveFunctionName(mthdDeclar);\n        if (ctx.composed) {\n          mthdName = mthdName + \"_composed_\" + ctx.composed.pos;\n        }\n        let returnStrMethod = \" -> \" + translateType(ctx.checker, mthdreturnType);\n        if (returnStrMethod == \" -> void\")\n          returnStrMethod = \"\";\n        return s([\n          ...prefixFunctions,\n          \"fn \",\n          mthdName,\n          \"(\",\n          ...join(\n            mthdDeclar.parameters.filter((p) => {\n              let type22 = ctx.checker.getTypeAtLocation(p);\n              if (type22.getCallSignatures().length > 0) {\n                return false;\n              }\n              return true;\n            }).map((p) => {\n              const o = c2(p);\n              const aug = augmentParameter(ctx.checker, p);\n              return [o, ...aug];\n            }).flat(),\n            \", \"\n          ),\n          \")\",\n          returnStrMethod,\n          \" {\\n\",\n          ...mthdDeclar.parameters.filter((p) => {\n            let type22 = ctx.checker.getTypeAtLocation(p);\n            if (type22.getCallSignatures().length > 0) {\n              return false;\n            }\n            let tt2 = translateType(ctx.checker, type22);\n            return isAssignableType(tt2);\n          }).map(\n            (p) => s([\n              \"var \",\n              escapeIdentifier(p.name.getText()),\n              \" = \",\n              escapeIdentifier(p.name.getText()),\n              \"_const;\\n\"\n            ])\n          ),\n          ...mthdDeclar.body?.statements.map((s2) => c2(s2)) ?? [],\n          \"\\n}\\n\\n\"\n        ]);\n      case ts.SyntaxKind.ReturnStatement:\n        let ret = ast;\n        if (!ctx.parentFunction) {\n          if (ret.expression) {\n            return s([\"return \", c2(ret.expression), \";\\n\"]);\n          } else {\n            return s([\"return;\\n\"]);\n          }\n        } else {\n          let expectedReturnType = ctx.checker.getSignatureFromDeclaration(ctx.parentFunction).getReturnType();\n          let actualReturnType = ctx.checker.getTypeAtLocation(ret.expression);\n          if (ret.expression) {\n            let sss = s([\n              \"return \",\n              autoCastNumeric(\n                c2(ret.expression),\n                translateType(ctx.checker, actualReturnType),\n                translateType(ctx.checker, expectedReturnType),\n                ret.expression\n              ),\n              \";\\n\"\n            ]);\n            return sss;\n          } else {\n            return s([\"return;\\n\"]);\n          }\n        }\n      case ts.SyntaxKind.AsExpression:\n        let asExpr = ast;\n        return c2(asExpr.expression);\n      case ts.SyntaxKind.Parameter:\n        let param = ast;\n        if (ctx.composed) {\n          let indexOf = param.parent.parameters.indexOf(param);\n          let expr2 = ctx.composed.arguments[indexOf];\n          if (expr2) {\n            if (ts.isArrowFunction(expr2)) {\n              let vars = getClosureVars(ctx.checker, expr2.body);\n              let closureVars = vars.map((v) => {\n                return s([\n                  v.name,\n                  \": \",\n                  translateType(ctx.checker, ctx.checker.getTypeAtLocation(v.valueDeclaration))\n                ]);\n              });\n              return s(join(closureVars, \", \"));\n            }\n          }\n        }\n        const tt = translateType(ctx.checker, ctx.checker.getTypeAtLocation(param));\n        return s([\n          escapeIdentifier(param.name.getText()),\n          isAssignableType(tt) ? \"_const\" : \"\",\n          \": \",\n          tt\n        ]);\n      case ts.SyntaxKind.ArrowFunction:\n        let arrow = ast;\n        let body = convertConciseBodyToBlock(arrow.body);\n        let preMain = \"\";\n        if (ctx.isComputeShader) {\n          preMain = `\n@compute @workgroup_size(${ctx.computeSize[0]}, ${ctx.computeSize[1]}, ${ctx.computeSize[2]})`;\n        }\n        return s([\n          \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\" + preMain + \"\\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)\" + (ctx.isComputeShader ? \"\" : \"-> /*__SHADEUP_TEMPLATE_OUTPUT*/\") + \"{\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\\n\",\n          ...body.statements.filter((s2) => !ts.isFunctionDeclaration(s2)).map((s2) => c2(s2)),\n          \"\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\\n}\\n\"\n        ]);\n      case ts.SyntaxKind.VariableStatement:\n        let varStatement = ast;\n        return s([\n          ...join(\n            varStatement.declarationList.declarations.map((d) => c2(d)),\n            \", \"\n          ),\n          \";\\n\"\n        ]);\n      case ts.SyntaxKind.VariableDeclaration:\n        let varDecl = ast;\n        let type2 = ctx.checker.getTypeAtLocation(varDecl);\n        let fullText = varDecl.getSourceFile().getFullText();\n        let fullStart = varDecl.getFullStart();\n        let prefix = `// @workgroup\n `;\n        let mySelf = fullText.slice(fullStart - prefix.length, fullStart);\n        if (mySelf.includes(\"@workgroup\")) {\n          return s([]);\n        } else {\n          let translated = translateType(ctx.checker, type2);\n          if (translated.startsWith(\"array\")) {\n            translated = \"\";\n          }\n          if (isInShader$1(varDecl)) {\n            let arrType = ctx.checker.getTypeAtLocation(varDecl);\n            let typeInfo = getArrayTypeInfo(ctx.checker, arrType);\n            if (typeInfo.isArray) {\n              if (typeInfo.staticSize <= 0) {\n                throw new GLSLCompilationError(\n                  \"Cannot declare an array without a static size in a shader\",\n                  varDecl\n                );\n              }\n            }\n          }\n          let initializerVal = c2(varDecl.initializer);\n          if (translated) {\n            let leftType2 = type2;\n            let rightType2 = ctx.checker.getTypeAtLocation(varDecl.initializer);\n            if (isVector(ctx.checker, leftType2) && isVector(ctx.checker, rightType2)) {\n              let [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType2);\n              let [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType2);\n              if (leftElementType != rightElementType) {\n                if (leftElementType == \"float\" && rightElementType == \"int\") {\n                  initializerVal = s([`vec${leftElementSize}f(`, initializerVal, \")\"]);\n                } else if (leftElementType == \"int\" && rightElementType == \"float\") {\n                  initializerVal = s([`vec${leftElementSize}i(`, initializerVal, \")\"]);\n                }\n              }\n            }\n            if (isNumeric(ctx.checker, leftType2) && isNumeric(ctx.checker, rightType2)) {\n              let leftTypeStr = translateType(ctx.checker, leftType2);\n              let rightTypeStr = translateType(ctx.checker, rightType2);\n              if (leftTypeStr != rightTypeStr) {\n                initializerVal = s([\n                  autoCastNumeric(initializerVal, rightTypeStr, leftTypeStr, varDecl.initializer)\n                ]);\n              }\n            }\n          }\n          if (translated == \"___atomic_compare_exchange_result\") {\n            translated = \"\";\n          }\n          return s([\n            \"var \",\n            escapeIdentifier(varDecl.name.getText()),\n            translated ? \": \" : \"\",\n            translated,\n            \" = \",\n            initializerVal\n          ]);\n        }\n      case ts.SyntaxKind.CallExpression:\n        let call = ast;\n        let exprSmybol = ctx.checker.getSymbolAtLocation(call.expression);\n        if (call.expression.getText() == \"Math.random\") {\n          return s([\"0.0\"]);\n        }\n        if (!exprSmybol) {\n          return s([\"/* TODO: Unknown symbol */\"]);\n        }\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = ctx.checker.getAliasedSymbol(exprSmybol);\n        }\n        let symName = exprSmybol?.getName() ?? call.expression.getText();\n        if (ts.isIdentifier(call.expression)) {\n          if (isUniformAccess(ctx, call.expression)) {\n            let typ = ctx.checker.getTypeAtLocation(call.expression);\n            if (typ.getSymbol().getName().startsWith(\"shader\") || typ.aliasSymbol && typ.aliasSymbol.getName() == \"shader\") {\n              console.log(\"Uniform access to shader\", typ.getSymbol().getName());\n            }\n          }\n        }\n        if (symName == \"__index\") {\n          let postfix2 = \"\";\n          let t2 = ctx.checker.getTypeAtLocation(\n            call.expression.expression\n          );\n          isUniformAccess(\n            ctx,\n            call.expression.expression\n          );\n          if (ts.isPropertyAccessExpression(call.expression)) {\n            let innerType = translateType(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(call.expression.expression)\n            );\n            let returnType2 = getRealReturnType(ctx.checker, call);\n            let vecOut = getVectorElementType(ctx.checker, returnType2);\n            let outMask = getVectorMask(vecOut[1]);\n            if (innerType == \"sampler\") {\n              if (ts.isCallExpression(call.expression.expression)) {\n                let callIndex = call.expression.expression;\n                return s([\n                  \"textureLoad(\",\n                  c2(callIndex.expression),\n                  \"_texture, \",\n                  ...join([...callIndex.arguments.map((a) => c2(a))], \",\"),\n                  \", vec2<u32>(\",\n                  c2(call.arguments[0]),\n                  \"), 0).\" + outMask\n                ]);\n              } else {\n                return s([\n                  \"textureLoad(\",\n                  c2(call.expression.expression),\n                  \"_texture, vec2<u32>(\",\n                  c2(call.arguments[0]),\n                  \"), 0).\" + outMask\n                ]);\n              }\n            }\n          }\n          let translatedOut = translateType(ctx.checker, ctx.checker.getTypeAtLocation(call));\n          if (isArrayType$1(t2, ctx.checker) && isUniformAccess(ctx, call.expression.expression) && !translatedOut.startsWith(\"mat\")) {\n            let typeRef = t2;\n            let args2 = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n            let translated = translateType(ctx.checker, args2[0]);\n            let typeInfo = getWGSLTypeInfo(translated);\n            if (typeInfo.needsAlignment) {\n              translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n            }\n            let lengths = {\n              1: \"x\",\n              2: \"xy\",\n              3: \"xyz\",\n              4: \"xyzw\"\n            };\n            if (typeInfo.type != \"unknown\") {\n              postfix2 = `.${lengths[typeInfo.length ?? 1]}`;\n            }\n          }\n          return accessWrap(\n            ctx,\n            call.expression.expression,\n            s([c2(call.expression), \"[\", c2(call.arguments[0]), \"]\", postfix2])\n          );\n        } else if (symName == \"attr\") {\n          let expr2 = call.expression;\n          if (ts.isPropertyAccessExpression(expr2)) {\n            let left2 = expr2.expression;\n            let leftName = ctx.checker.getTypeAtLocation(left2).getSymbol()?.getName() ?? \"\";\n            if (leftName == \"ShaderInput\") {\n              if (call.arguments.length >= 1) {\n                let arg1 = call.arguments[0];\n                if (ts.isCallExpression(arg1)) {\n                  arg1 = arg1.arguments[0];\n                }\n                if (!ts.isNumericLiteral(arg1)) {\n                  throw new GLSLCompilationError(\"Attribute index must be a number literal\", arg1);\n                }\n                let index = parseInt(arg1.getText());\n                let interpMode = \"perspective\";\n                if (call.arguments.length >= 2) {\n                  let arg2 = call.arguments[1];\n                  if (ts.isStringLiteral(arg2)) {\n                    interpMode = arg2.text;\n                  }\n                }\n                let valType = \"\";\n                if (call.typeArguments.length == 1) {\n                  valType = translateType(\n                    ctx.checker,\n                    ctx.checker.getTypeAtLocation(call.typeArguments[0])\n                  );\n                }\n                ctx.addCustomAttribute(\"in\", index, valType, interpMode);\n                return s([\"_i_in.custom\", index.toString()]);\n              }\n            } else if (leftName == \"ShaderOutput\") {\n              if (call.arguments.length >= 2) {\n                let arg1 = call.arguments[0];\n                if (ts.isCallExpression(arg1)) {\n                  arg1 = arg1.arguments[0];\n                }\n                if (!ts.isNumericLiteral(arg1)) {\n                  throw new GLSLCompilationError(\"Attribute index must be a number literal\", arg1);\n                }\n                let index = parseInt(arg1.getText());\n                let interpMode = \"perspective\";\n                if (call.arguments.length >= 3) {\n                  let arg2 = call.arguments[2];\n                  if (ts.isStringLiteral(arg2)) {\n                    interpMode = arg2.text;\n                  }\n                }\n                let valType = translateType(\n                  ctx.checker,\n                  ctx.checker.getTypeAtLocation(call.arguments[1])\n                );\n                ctx.addCustomAttribute(\"out\", index, valType, interpMode);\n                return s([\"_i_out.custom\", index.toString(), \" = \", c2(call.arguments[1])]);\n              }\n            }\n          }\n        } else if (symName == \"len\") {\n          let expr2 = call.expression;\n          if (ts.isPropertyAccessExpression(expr2)) {\n            let left2 = expr2.expression;\n            if (isUniformAccess(ctx, left2)) {\n              return s([\"_in_uniforms.\", c2(left2), \"_size\"]);\n            } else {\n              let arrType = ctx.checker.getTypeAtLocation(left2);\n              let typeInfo = getArrayTypeInfo(ctx.checker, arrType);\n              return s([typeInfo.staticSize.toString()]);\n            }\n          }\n        } else if (symName == \"min\" || symName == \"max\") {\n          if (call.arguments.length > 2) {\n            let args2 = call.arguments.map((a) => c2(a));\n            while (args2.length > 2) {\n              let left2 = args2.shift();\n              let right2 = args2.shift();\n              args2.unshift(s([symName, \"(\", left2, \",\", right2, \")\"]));\n            }\n            return s([symName, \"(\", ...join(args2, \",\"), \")\"]);\n          }\n        } else if (symName == \"clamp\") {\n          if (call.arguments.length == 3) {\n            let inType = ctx.checker.getTypeAtLocation(call.arguments[0]);\n            let vType = translateType(ctx.checker, inType);\n            let vTypeInfo = getWGSLTypeInfo(vType);\n            if (vTypeInfo.type == \"vector\") {\n              let minV = call.arguments[1];\n              let maxV = call.arguments[2];\n              let minType = ctx.checker.getTypeAtLocation(minV);\n              let maxType = ctx.checker.getTypeAtLocation(maxV);\n              let minTypeInfo = getWGSLTypeInfo(translateType(ctx.checker, minType));\n              let maxTypeInfo = getWGSLTypeInfo(translateType(ctx.checker, maxType));\n              if (minTypeInfo.type == \"vector\" && maxTypeInfo.type == \"vector\")\n                ;\n              else {\n                let minStr = c2(minV);\n                let maxStr = c2(maxV);\n                if (minTypeInfo.type != \"vector\") {\n                  minStr = s([`vec${vTypeInfo.length}<${vTypeInfo.elementType}>(`, minStr, \")\"]);\n                }\n                if (maxTypeInfo.type != \"vector\") {\n                  maxStr = s([`vec${vTypeInfo.length}<${vTypeInfo.elementType}>(`, maxStr, \")\"]);\n                }\n                return s([\"clamp(\", c2(call.arguments[0]), \",\", minStr, \",\", maxStr, \")\"]);\n              }\n            }\n          }\n        } else if (symName == \"atomic\") {\n          throw new GLSLCompilationError(\n            \"Atomics cannot be constructed in shaders, create them outside or in a workgroup\",\n            call.expression\n          );\n        } else if (symName == \"sample\") {\n          if (ts.isPropertyAccessExpression(call.expression)) {\n            let innerType = translateType(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(call.expression.expression)\n            );\n            if (innerType == \"sampler\") {\n              if (ts.isCallExpression(call.expression.expression)) {\n                let callIndex = call.expression.expression;\n                return s([\n                  \"textureSample(\",\n                  c2(callIndex.expression),\n                  \"_texture, \",\n                  c2(callIndex.expression),\n                  \",\",\n                  \"vec2(\",\n                  c2(call.arguments[0]),\n                  \"),\",\n                  ...join([...callIndex.arguments.map((a) => c2(a))], \",\"),\n                  \")\"\n                ]);\n              } else {\n                return s([\n                  \"textureSample(\",\n                  c2(call.expression.expression),\n                  \"_texture, \",\n                  c2(call.expression.expression),\n                  \", vec2(\",\n                  c2(call.arguments[0]),\n                  \"))\"\n                ]);\n              }\n            }\n          }\n        } else if (symName == \"__index_assign\") {\n          let postfix2 = \"\";\n          if (ts.isPropertyAccessExpression(call.expression)) {\n            let innerType = translateType(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(call.expression.expression)\n            );\n            if (innerType == \"sampler\") {\n              if (ts.isCallExpression(call.expression.expression)) {\n                let callIndex = call.expression.expression;\n                return s([\n                  \"textureStore(\",\n                  c2(callIndex.expression),\n                  \"_texture_write, \",\n                  ...join([...callIndex.arguments.map((a) => c2(a))], \",\"),\n                  \", vec2<i32>(\",\n                  c2(call.arguments[0]),\n                  \"), vec4(\",\n                  autoCastParameter(call, 1),\n                  \"))\"\n                ]);\n              } else {\n                return s([\n                  \"textureStore(\",\n                  c2(call.expression.expression),\n                  \"_texture_write, vec2<i32>(\",\n                  c2(call.arguments[0]),\n                  \"), vec4(\",\n                  autoCastParameter(call, 1),\n                  \"))\"\n                ]);\n              }\n            }\n          }\n          ctx.checker.getTypeAtLocation(\n            call.expression.expression\n          );\n          return accessWrap(\n            ctx,\n            call.expression.expression,\n            s([\n              c2(call.expression.expression),\n              \"[\",\n              c2(call.arguments[0]),\n              \"]\",\n              postfix2,\n              \" = \",\n              autoCastParameter(call, 1)\n            ])\n          );\n        } else if (symName == \"eq\" && call.expression.getText() == \"__.eq\") {\n          let leftArg = call.arguments[0];\n          let rightArg = call.arguments[1];\n          let leftType2 = ctx.checker.getTypeAtLocation(leftArg);\n          let rightType2 = ctx.checker.getTypeAtLocation(rightArg);\n          let [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType2);\n          if (isVector(ctx.checker, leftType2) && isVector(ctx.checker, rightType2)) {\n            return s([\n              \"squash_bool_vec\",\n              leftElementSize.toString(),\n              \"(\",\n              c2(leftArg),\n              \" == \",\n              c2(rightArg),\n              \")\"\n            ]);\n          }\n        } else if (symName == \"rand\" && call.arguments.length == 0 && call.expression.getText() == \"rand\") {\n          throw new GLSLCompilationError(\n            \"rand() in shaders needs to be seeded, use rand(seed) instead\",\n            call\n          );\n        }\n        if (exprSmybol?.getName() == \"makeVector\" && exprSmybol.valueDeclaration) {\n          if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n            let exprSig2 = ctx.checker.getResolvedSignature(call);\n            if (exprSig2) {\n              let returnType2 = ctx.checker.getReturnTypeOfSignature(exprSig2);\n              let returnTypeStr = translateType(ctx.checker, returnType2);\n              let returnTypeInfo = getWGSLTypeInfo(returnTypeStr);\n              let callType = translateType(ctx.checker, returnType2);\n              let argStrs = [];\n              for (let [i, arg] of call.arguments.entries()) {\n                let argType = ctx.checker.getTypeAtLocation(arg);\n                let argTypeStr = translateType(ctx.checker, argType);\n                let argTypeInfo = getWGSLTypeInfo(argTypeStr);\n                let paramType = ctx.checker.getTypeAtLocation(\n                  exprSig2.parameters[i].getDeclarations()[0]\n                );\n                let paramTypeStr = translateType(ctx.checker, paramType);\n                if (argTypeInfo.elementType !== returnTypeInfo.elementType) {\n                  paramTypeStr = `vec${argTypeInfo.length}<${returnTypeInfo.elementType}>`;\n                }\n                argStrs.push(autoCastNumeric(c2(arg), argTypeStr, paramTypeStr, arg));\n              }\n              return s([callType, \"(\", ...join(argStrs, \", \"), \")\"]);\n            }\n          }\n        }\n        if (exprSmybol?.getName() == \"swizzle\" && exprSmybol.valueDeclaration) {\n          if (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n            ctx.checker.getSignatureFromDeclaration(exprSmybol.valueDeclaration);\n            let arg = call.arguments[0];\n            let arg2 = call.arguments[1];\n            let propAccess = \"\";\n            if (ts.isStringLiteral(arg2)) {\n              propAccess = arg2.text;\n            }\n            let argType = ctx.checker.getTypeAtLocation(arg);\n            if (isVector(ctx.checker, argType)) {\n              if (call.arguments.length == 2) {\n                return s([c2(arg), \".\", propAccess]);\n              } else {\n                let t2 = s([\n                  \"var tempVal_\",\n                  call.getStart().toString(),\n                  \" = \",\n                  c2(call.arguments[2]),\n                  \";\\n\"\n                ]);\n                let assigns = [];\n                for (let i = 0; i < propAccess.length; i++) {\n                  let char = propAccess[i];\n                  assigns.push(\n                    s([\n                      c2(arg),\n                      \".\",\n                      char,\n                      \" = \",\n                      \"tempVal_\",\n                      call.getStart().toString(),\n                      ...propAccess.length > 1 ? [\".\", char] : [],\n                      \";\\n\"\n                    ])\n                  );\n                }\n                return s([t2, ...assigns]);\n              }\n            } else if (isNumeric(ctx.checker, argType)) {\n              let numericType = translateType(ctx.checker, argType);\n              return s([`shadeup_up_swizzle_${propAccess}_${numericType}(`, c2(arg), \")\"]);\n            } else {\n              return s([c2(arg), \".\", propAccess]);\n            }\n          }\n        }\n        let mutations = {\n          arguments: new Array(call.arguments.length)\n        };\n        for (let [i, arg] of call.arguments.entries()) {\n          mutations.arguments[i] = null;\n        }\n        if (exprSmybol?.getName() == \"max\" || exprSmybol?.getName() == \"min\") {\n          let exprSig2 = ctx.checker.getResolvedSignature(call);\n          if (exprSig2 && exprSig2.parameters.length == 2) {\n            let skip = false;\n            let unbalanced = false;\n            let singleArg = -1;\n            let targetLength = 0;\n            let targetType = \"\";\n            for (let [i, arg] of call.arguments.entries()) {\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let argTypeStr = translateType(ctx.checker, argType);\n              let argTypeInfo = getWGSLTypeInfo(argTypeStr);\n              if (argTypeInfo.length === 1) {\n                if (unbalanced) {\n                  skip = true;\n                }\n                unbalanced = true;\n                singleArg = i;\n              }\n            }\n            for (let [i, arg] of call.arguments.entries()) {\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let argTypeStr = translateType(ctx.checker, argType);\n              let argTypeInfo = getWGSLTypeInfo(argTypeStr);\n              if (argTypeInfo.length !== 1) {\n                targetLength = argTypeInfo.length;\n                targetType = argTypeInfo.elementType;\n              }\n            }\n            if (!skip && unbalanced && singleArg !== -1) {\n              mutations.arguments[singleArg] = s([\n                `vec${targetLength}<${targetType}>(`,\n                c2(call.arguments[singleArg]),\n                `)`\n              ]);\n            }\n          }\n        }\n        let funcName = c2(call.expression);\n        let callArgs = [];\n        let preArgs = [];\n        let exprSig = ctx.checker.getResolvedSignature(call);\n        let exprDeclar = exprSig.getDeclaration();\n        if (exprDeclar) {\n          if (ts.isMethodDeclaration(exprDeclar)) {\n            let isStatic2 = false;\n            if (ts.canHaveModifiers(exprDeclar)) {\n              let mods = ts.getModifiers(exprDeclar);\n              if (mods) {\n                if (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n                  isStatic2 = true;\n                }\n              }\n            }\n            if (!isStatic2) {\n              if (ts.isPropertyAccessExpression(call.expression)) {\n                preArgs.push(c2(call.expression.expression));\n              }\n            }\n          }\n        }\n        exprSmybol.getName() + \"(\";\n        for (let [i, arg] of call.arguments.entries()) {\n          let argStr = c2(arg);\n          if (exprSig) {\n            let p = exprSig.getTypeParameterAtPosition(i);\n            if (p) {\n              let translatedBase = translateType(ctx.checker, p);\n              let translatedPass = translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n              if (isTranslatedTypeNameVectorOrScalar(translatedPass)) {\n                if (translatedBase != translatedPass && isGLSLType(translatedBase)) {\n                  if (translatedBase == \"vector2\" || translatedBase == \"vector3\" || translatedBase == \"vector4\") {\n                    argStr = argStr;\n                  } else {\n                    argStr = s([`${translatedBase}(`, argStr, `)`]);\n                  }\n                }\n              }\n            } else {\n              translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n            }\n          }\n          if (ts.isArrowFunction(arg)) {\n            let arrow2 = arg;\n            let vars = getClosureVars(ctx.checker, arrow2.body);\n            if (vars.length > 0)\n              callArgs.push(vars.map((v) => v.escapedName).join(\", \"));\n          } else {\n            let augs = augmentArgument(ctx, arg);\n            if (augs.length > 0) {\n              argStr = s([argStr, \",\", ...join(augs, \",\")]);\n            }\n            callArgs.push(argStr);\n          }\n        }\n        const levelCalls = {\n          mix: true\n        };\n        const constructs = {\n          \"vec2<f32>\": true,\n          \"vec3<f32>\": true,\n          \"vec4<f32>\": true,\n          \"vec2<i32>\": true,\n          \"vec3<i32>\": true,\n          \"vec4<i32>\": true,\n          \"vec2<u32>\": true,\n          \"vec3<u32>\": true,\n          \"vec4<u32>\": true,\n          \"mat2x2<f32>\": true,\n          \"mat3x3<f32>\": true,\n          \"mat4x4<f32>\": true,\n          \"mat2x2<i32>\": true,\n          \"mat3x3<i32>\": true,\n          \"mat4x4<i32>\": true\n        };\n        if (exprSmybol) {\n          let mapping = findSignatureMappingToWGSL(ctx.checker, exprSmybol);\n          if (mapping !== null) {\n            let levelCastArguments = mapping.startsWith(\"!\") || (levelCalls[mapping] ?? false) || (constructs[mapping] ?? false);\n            if (levelCastArguments) {\n              let minType = \"\";\n              let noOp = false;\n              for (let arg of call.arguments) {\n                let argType = ctx.checker.getTypeAtLocation(arg);\n                let argTypeName = translateType(ctx.checker, argType);\n                if (!(argTypeName == \"f32\" || argTypeName.endsWith(\"<f32>\") || argTypeName == \"i32\" || argTypeName.endsWith(\"<i32>\"))) {\n                  noOp = true;\n                }\n                if (minType == \"\") {\n                  if (argTypeName == \"f32\" || argTypeName.endsWith(\"<f32>\")) {\n                    minType = \"f32\";\n                  } else if (argTypeName == \"i32\" || argTypeName.endsWith(\"<i32>\")) {\n                    minType = \"i32\";\n                  }\n                } else if (argTypeName == \"f32\" || minType.endsWith(\"<f32>\")) {\n                  minType = \"f32\";\n                }\n              }\n              if (constructs[mapping]) {\n                noOp = false;\n                if (mapping.endsWith(\"<f32>\")) {\n                  minType = \"f32\";\n                } else if (mapping.endsWith(\"<i32>\")) {\n                  minType = \"i32\";\n                }\n              }\n              if (!noOp) {\n                for (let i = 0; i < callArgs.length; i++) {\n                  let arg = call.arguments[i];\n                  let argType = ctx.checker.getTypeAtLocation(arg);\n                  let argTypeName = translateType(ctx.checker, argType);\n                  let argTypeStripped = \"\";\n                  if (argTypeName == \"f32\" || argTypeName.endsWith(\"<f32>\")) {\n                    argTypeStripped = \"f32\";\n                  } else if (argTypeName == \"i32\" || argTypeName.endsWith(\"<i32>\")) {\n                    argTypeStripped = \"i32\";\n                  }\n                  if (argTypeStripped != minType) {\n                    if (argTypeName.startsWith(\"f32\") || argTypeName.startsWith(\"i32\")) {\n                      callArgs[i] = s([`${minType}(`, callArgs[i], `)`]);\n                    } else if (argTypeName.endsWith(\"<f32>\") || argTypeName.endsWith(\"<i32>\")) {\n                      let len = argTypeName.match(/\\d+/)?.[0];\n                      if (len === void 0) {\n                        throw new Error(\"Invalid type\");\n                      }\n                      callArgs[i] = s([`vec${len}<${minType}>(`, callArgs[i], `)`]);\n                    } else\n                      ;\n                  }\n                }\n              }\n            } else {\n              let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n              sig = exprSig;\n              for (let i = 0; i < callArgs.length; i++) {\n                let arg = call.arguments[i];\n                let argType = ctx.checker.getTypeAtLocation(arg);\n                let paramType = ctx.checker.getTypeAtLocation(\n                  sig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n                );\n                paramType = sig.getTypeParameterAtPosition(Math.min(i, sig.parameters.length - 1)) ?? paramType;\n                let carg = c2(arg);\n                let augs = augmentArgument(ctx, arg);\n                if (augs.length > 0) {\n                  carg = s([carg, \",\", ...join(augs, \",\")]);\n                }\n                callArgs[i] = autoCastNumeric(\n                  carg,\n                  translateType(ctx.checker, argType),\n                  translateType(ctx.checker, paramType),\n                  arg\n                );\n              }\n            }\n            if (mapping.startsWith(\"!\")) {\n              let template = mapping.slice(1);\n              let outs = [];\n              let argCounter = 0;\n              let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n              for (let i = 0; i < callArgs.length; i++) {\n                let paramType = ctx.checker.getTypeAtLocation(\n                  sig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n                );\n                template = template.replace(\n                  \"`\" + argCounter + \"`\",\n                  ctx.checker.typeToString(paramType)\n                );\n                argCounter++;\n              }\n              let result = template.split(\"$\");\n              for (let r of result) {\n                if (/^\\d+$/.test(r)) {\n                  outs.push(callArgs[parseInt(r)]);\n                } else if (/^\\[\\d+\\]$/.test(r)) {\n                  let templateType = translateType(\n                    ctx.checker,\n                    ctx.checker.getTypeAtLocation(call.typeArguments[parseInt(r.slice(1, -1))])\n                  );\n                  outs.push(templateType);\n                } else if (r == \"self\") {\n                  if (call.expression.kind == ts.SyntaxKind.PropertyAccessExpression) {\n                    let propAccess = call.expression;\n                    outs.push(c2(propAccess.getChildAt(0)));\n                  } else {\n                    outs.push(c2(call.expression));\n                  }\n                } else {\n                  outs.push(r);\n                }\n              }\n              return s(outs);\n            } else if (mapping.startsWith(\"#\")) {\n              let typeName = \"\";\n              if (call.arguments.length > 0) {\n                let firstArg = call.arguments[0];\n                let firstArgType = ctx.checker.getTypeAtLocation(firstArg);\n                typeName = ctx.checker.typeToString(firstArgType);\n              }\n              return s([\n                new SourceNode(call.expression.getStart(), call.expression.getEnd(), [\n                  mapping.substring(1) + typeName\n                ]),\n                \"(\",\n                ...join([...preArgs, ...callArgs], \", \"),\n                \")\"\n              ]);\n            } else {\n              for (let [i, mutation] of mutations.arguments.entries()) {\n                if (mutation) {\n                  callArgs[i] = mutation;\n                }\n              }\n              return s([\n                new SourceNode(call.expression.getStart(), call.expression.getEnd(), [mapping]),\n                \"(\",\n                ...join([...preArgs, ...callArgs], \", \"),\n                \")\"\n              ]);\n            }\n          } else {\n            let sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n            for (let i = 0; i < callArgs.length; i++) {\n              let arg = call.arguments[i];\n              let argType = ctx.checker.getTypeAtLocation(arg);\n              let paramType = ctx.checker.getTypeAtLocation(sig.parameters[i].getDeclarations()[0]);\n              let carg = c2(arg);\n              let augs = augmentArgument(ctx, arg);\n              if (augs.length > 0) {\n                carg = s([carg, \",\", ...join(augs, \",\")]);\n              }\n              callArgs[i] = autoCastNumeric(\n                carg,\n                translateType(ctx.checker, argType),\n                translateType(ctx.checker, paramType),\n                arg\n              );\n            }\n          }\n          if (exprSmybol.declarations[0].parent) {\n            let param2 = exprSmybol.declarations[0];\n            if (ts.isParameter(param2))\n              ;\n          }\n          let funcDeclar = exprSmybol.valueDeclaration;\n          if (exprSmybol.declarations[0].parent) {\n            let param2 = exprSmybol.declarations[0];\n            if (ts.isParameter(param2)) {\n              let indexOf = param2.parent.parameters.indexOf(param2);\n              let additionalArgs = [];\n              if (ctx.composed) {\n                let realAnonymousFunc = ctx.composed.arguments[indexOf];\n                if (ts.isArrowFunction(realAnonymousFunc)) {\n                  let vars = getClosureVars(ctx.checker, realAnonymousFunc.body);\n                  additionalArgs = vars.map((v) => v.escapedName);\n                  callArgs.push(...additionalArgs);\n                  return s([\n                    funcName,\n                    \"_composed_\",\n                    realAnonymousFunc.pos.toString(),\n                    \"_arg_\",\n                    indexOf.toString(),\n                    \"(\",\n                    ...join([...preArgs, ...callArgs], \", \"),\n                    \")\"\n                  ]);\n                }\n              }\n            }\n          }\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            funcName = new SourceNode(\n              call.expression.getStart(),\n              call.expression.getEnd(),\n              resolveFunctionName(funcDeclar)\n            );\n            let parentDeclar = closest(ast, (n3) => ts.isFunctionDeclaration(n3));\n            if (parentDeclar && ts.isFunctionDeclaration(parentDeclar))\n              ;\n            if (isComposedFunction(ctx.checker, funcDeclar)) {\n              return s([\n                funcName,\n                \"_composed_\",\n                call.pos.toString(),\n                \"(\",\n                ...join([...preArgs, ...callArgs], \", \"),\n                \")\"\n              ]);\n            }\n          }\n        }\n        for (let [i, mutation] of mutations.arguments.entries()) {\n          if (mutation) {\n            callArgs[i] = mutation;\n          }\n        }\n        return s([funcName, \"(\", ...join([...preArgs, ...callArgs], \", \"), \")\"]);\n      case ts.SyntaxKind.NewExpression:\n        let newExpr = ast;\n        let newExprSymbol = getSymbolAtLocationAndFollowAliases(ctx.checker, newExpr.expression);\n        let args = [];\n        if (newExpr.arguments?.length == 1 && ts.isObjectLiteralExpression(newExpr.arguments[0])) {\n          let object = newExpr.arguments[0];\n          let props = object.properties;\n          let sortedPropsByKey = [];\n          let structProps = [];\n          newExprSymbol?.members?.forEach((v, k) => {\n            let decl2 = v.valueDeclaration;\n            if (decl2 && ts.isPropertyDeclaration(decl2)) {\n              const typeStr = translateType(ctx.checker, ctx.checker.getTypeAtLocation(decl2));\n              if (typeStr.startsWith(\"atomic<\")) {\n                return;\n              }\n              structProps.push([k?.toString() ?? \"\", decl2.type]);\n            }\n          });\n          sortedPropsByKey = structProps.sort((a, b) => {\n            return a[0].localeCompare(b[0]);\n          });\n          args = [\n            ...sortedPropsByKey.map((p) => {\n              let prop2 = props.find((p2) => {\n                if (ts.isPropertyAssignment(p2)) {\n                  return p2.name.getText() == p[0];\n                } else if (ts.isShorthandPropertyAssignment(p2)) {\n                  return p2.name.getText() == p[0];\n                } else {\n                  return false;\n                }\n              });\n              if (prop2) {\n                if (ts.isPropertyAssignment(prop2)) {\n                  let propType = ctx.checker.getTypeAtLocation(p[1]);\n                  let propValType = ctx.checker.getTypeAtLocation(prop2.initializer);\n                  let propTypeStr = translateType(ctx.checker, propType);\n                  let propValTypeStr = translateType(ctx.checker, propValType);\n                  if (propTypeStr != propValTypeStr) {\n                    return s([\n                      \"/* \",\n                      p[0],\n                      \": */ \",\n                      autoCastNumeric(c2(prop2.initializer), propValTypeStr, propTypeStr, prop2),\n                      \"\\n\"\n                    ]);\n                  } else {\n                    return s([\"/* \", p[0], \": */ \", c2(prop2.initializer), \"\\n\"]);\n                  }\n                } else if (ts.isShorthandPropertyAssignment(prop2)) {\n                  return s([\"/* \", p[0], \": */ \", c2(prop2.name), \"\\n\"]);\n                } else {\n                  return s([\"/* \", c2(prop2), \": */ \", \"\\n\"]);\n                }\n              } else {\n                return s([\"/* \", p[0], \": */ \", generateDefaultForType$1(ctx.checker, p[1]), \"\\n\"]);\n              }\n            })\n          ];\n        }\n        let decl = ctx.checker.getTypeAtLocation(newExpr.expression).getSymbol()?.getDeclarations();\n        if (decl && ts.isClassDeclaration(decl[0])) {\n          return s([\"_make_struct_\", resolveStructName(decl[0]), \"(\\n\", ...join(args, \", \"), \"\\n)\"]);\n        } else {\n          return s([\"/*\", ...join(args, \", \"), \"*/\"]);\n        }\n      case ts.SyntaxKind.ExpressionStatement:\n        let expr = ast;\n        return s([c2(expr.expression), \";\\n\"]);\n      case ts.SyntaxKind.ObjectLiteralExpression:\n        let obj = ast;\n        return s([\n          \"{\",\n          ...join(\n            obj.properties.map((p) => {\n              if (ts.isPropertyAssignment(p)) {\n                return s([c2(p.name), \": \", c2(p.initializer)]);\n              } else if (ts.isShorthandPropertyAssignment(p)) {\n                return s([c2(p.name)]);\n              } else {\n                return s([\"/*\", c2(p), \"*/\"]);\n              }\n            }),\n            \", \"\n          ),\n          \"}\"\n        ]);\n      case ts.SyntaxKind.ConditionalExpression:\n        let cond = ast;\n        let left = c2(cond.whenTrue);\n        let right = c2(cond.whenFalse);\n        let leftType = ctx.checker.getTypeAtLocation(cond.whenTrue);\n        let rightType = ctx.checker.getTypeAtLocation(cond.whenFalse);\n        if (isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType) || isNumeric(ctx.checker, leftType) && isNumeric(ctx.checker, rightType)) {\n          let leftTypeStr = translateType(ctx.checker, leftType);\n          let rightTypeStr = translateType(ctx.checker, rightType);\n          let leftTypeInfo = getWGSLTypeInfo(leftTypeStr);\n          let rightTypeInfo = getWGSLTypeInfo(rightTypeStr);\n          if (leftTypeInfo.elementType == \"f32\") {\n            right = autoCastNumeric(\n              right,\n              translateType(ctx.checker, rightType),\n              translateType(ctx.checker, leftType),\n              cond\n            );\n          }\n          if (rightTypeInfo.elementType == \"f32\") {\n            left = autoCastNumeric(\n              left,\n              translateType(ctx.checker, leftType),\n              translateType(ctx.checker, rightType),\n              cond\n            );\n          }\n        }\n        return s([\"select(\", right, \", \", left, \", \", c2(cond.condition), \")\"]);\n      case ts.SyntaxKind.Identifier:\n        let id = ast;\n        if (ts.isIdentifier(id)) {\n          let sym = ctx.checker.getSymbolAtLocation(id);\n          if (sym && sym.flags & ts.SymbolFlags.Alias) {\n            sym = ctx.checker.getAliasedSymbol(sym);\n          }\n          if (sym?.declarations?.length == 1) {\n            let decl2 = sym.declarations[0];\n            if (isUniformable(ctx.checker, decl2)) {\n              if (isVariableDeclarationValue(ctx.checker, decl2)) {\n                if (!isInSameScope(decl2, ast)) {\n                  if (!isInShader$1(decl2)) {\n                    if (ts.isBinaryExpression(ast.parent)) {\n                      if (ast.parent.left == ast) {\n                        throw new GLSLCompilationError(\n                          `Cannot assign to variable '${id.text.toString()}' because it is not declared in the shader`,\n                          ast\n                        );\n                      }\n                    }\n                    let _type = ctx.checker.getTypeAtLocation(decl2);\n                    let translated = translateType(ctx.checker, _type);\n                    let isGlobalVar = isRootNode(decl2);\n                    let glslVarName = `${!isSpecialUniformType(translated) ? \"_in_uniforms.\" : \"\"}_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${id.text.toString()}`;\n                    return s([glslVarName]);\n                  } else {\n                    return s([escapeIdentifier(id.text.toString())]);\n                  }\n                }\n              }\n            }\n          }\n          return s([escapeIdentifier(id.text.toString())]);\n        } else {\n          return c2(id.expression);\n        }\n      case ts.SyntaxKind.PropertyAccessExpression:\n        let prop = ast;\n        let isStaticMember = isStaticPropertyAccessExpression(ctx.checker, prop);\n        if (isStaticMember) {\n          return s([c2(prop.expression), \"_static_\", c2(prop.name)]);\n        } else {\n          let propName = prop.name.getText();\n          if (propName == \"__index\") {\n            return s([c2(prop.expression)]);\n          } else if (propName == \"size\") {\n            let innerType = translateType(\n              ctx.checker,\n              ctx.checker.getTypeAtLocation(prop.expression)\n            );\n            if (innerType == \"sampler\") {\n              return s([\"vec2<f32>(textureDimensions(\", c2(prop.expression), \"_texture))\"]);\n            }\n          } else {\n            return s([c2(prop.expression), \".\", c2(prop.name)]);\n          }\n        }\n      case ts.SyntaxKind.ThisKeyword:\n        return s([\"_this\"]);\n      case ts.SyntaxKind.FirstLiteralToken:\n        let lit = ast;\n        return s([lit.text]);\n      case ts.SyntaxKind.IfStatement:\n        let ifStmt = ast;\n        if (isIdentifier(ifStmt.expression)) {\n          if (ifStmt.expression.escapedText == \"PLATFORM_WEBGPU\") {\n            return s([c2(ifStmt.thenStatement)]);\n          }\n          if (ifStmt.expression.escapedText == \"PLATFORM_WEBGL\") {\n            if (ifStmt.elseStatement) {\n              return s([c2(ifStmt.elseStatement)]);\n            } else {\n              return s([\"\"]);\n            }\n          }\n        }\n        let addBraces = false;\n        if (!ts.isBlock(ifStmt.thenStatement)) {\n          addBraces = true;\n        }\n        return s([\n          \"if (\",\n          c2(ifStmt.expression),\n          `) ${addBraces ? \"{\" : \"\"}\n`,\n          c2(ifStmt.thenStatement),\n          `${addBraces ? \"}\" : \"\"}\n`,\n          ifStmt.elseStatement ? s([\"else \\n\", c2(ifStmt.elseStatement), \"\\n\"]) : s([\"\"])\n        ]);\n      case ts.SyntaxKind.TrueKeyword:\n        return s([\"true\"]);\n      case ts.SyntaxKind.FalseKeyword:\n        return s([\"false\"]);\n      case ts.SyntaxKind.PostfixUnaryExpression:\n        let post = ast;\n        return s([c2(post.operand), post.operator == ts.SyntaxKind.PlusPlusToken ? \"++\" : \"--\"]);\n      case ts.SyntaxKind.PlusPlusToken:\n        return s([\"++\"]);\n      case ts.SyntaxKind.MinusMinusToken:\n        return s([\"--\"]);\n      case ts.SyntaxKind.ParenthesizedExpression:\n        let paren = ast;\n        return s([\"(\", c2(paren.expression), \")\"]);\n      case ts.SyntaxKind.VariableDeclarationList:\n        let varDeclList = ast;\n        if (varDeclList.declarations.length > 0) {\n          for (let decl2 of varDeclList.declarations) {\n            let varDecl2 = decl2;\n            let type22 = ctx.checker.getTypeAtLocation(varDecl2);\n            let translated = translateType(ctx.checker, type22);\n            let postType = \": \" + translated;\n            if (translated == \"___atomic_compare_exchange_result\") {\n              postType = \"\";\n            }\n            return s([\"var \", varDecl2.name.getText(), postType, \" = \", c2(varDecl2.initializer)]);\n          }\n        } else {\n          return s([\"\"]);\n        }\n      case ts.SyntaxKind.ForStatement:\n        let forStmt = ast;\n        return s([\n          \"for (\",\n          c2(forStmt.initializer),\n          \";\",\n          c2(forStmt.condition),\n          \";\",\n          c2(forStmt.incrementor),\n          \")\",\n          c2(forStmt.statement)\n        ]);\n      case ts.SyntaxKind.BinaryExpression:\n        let bin = ast;\n        let binExprText = bin.operatorToken.getText();\n        if (binExprText == \"===\") {\n          binExprText = \"==\";\n        }\n        if (bin.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n          let leftType2 = ctx.checker.getTypeAtLocation(bin.left);\n          let rightType2 = ctx.checker.getTypeAtLocation(bin.right);\n          if (isVector(ctx.checker, leftType2) && isVector(ctx.checker, rightType2)) {\n            let [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType2);\n            let [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType2);\n            if (leftElementType != rightElementType) {\n              if (leftElementType == \"float\" && rightElementType == \"int\") {\n                return s([c2(bin.left), ` = vec${leftElementSize}f(`, c2(bin.right), \")\"]);\n              } else if (leftElementType == \"int\" && rightElementType == \"float\") {\n                return s([c2(bin.left), ` = vec${leftElementSize}i(`, c2(bin.right), \")\"]);\n              }\n            }\n          }\n          if (isNumeric(ctx.checker, leftType2) && isNumeric(ctx.checker, rightType2)) {\n            let leftTypeStr = translateType(ctx.checker, leftType2);\n            let rightTypeStr = translateType(ctx.checker, rightType2);\n            if (leftTypeStr != rightTypeStr) {\n              return s([\n                c2(bin.left),\n                ` = `,\n                autoCastNumeric(c2(bin.right), rightTypeStr, leftTypeStr, bin)\n              ]);\n            }\n          }\n          if (isUniformAccess(ctx, bin.left)) {\n            if (translateType(ctx.checker, ctx.checker.getTypeAtLocation(bin.left)) == \"bool\") {\n              return s([c2(bin.left), \" = select(0, 1, \", c2(bin.right), \")\"]);\n            }\n          }\n          return s([c2(bin.left), \" \", binExprText, \" \", c2(bin.right)]);\n        }\n        return s([c2(bin.left), \" \", binExprText, \" \", c2(bin.right)]);\n      case ts.SyntaxKind.StringLiteral:\n        return s([\"0\"]);\n      case ts.SyntaxKind.ArrayLiteralExpression:\n        let arr = ast;\n        return s([\n          \"array(\",\n          ...join(\n            arr.elements.map((e) => c2(e)),\n            \", \"\n          ),\n          \")\"\n        ]);\n      case ts.SyntaxKind.ElementAccessExpression:\n        let elem = ast;\n        let t = ctx.checker.getTypeAtLocation(elem.expression);\n        let n2 = getTypeFallback$1(ctx.checker, t);\n        let postfix = \"\";\n        if (n2 === \"Array\" || t.flags & ts.TypeFlags.Object && (t.objectFlags & ts.ObjectFlags.Tuple || t.objectFlags & ts.ObjectFlags.ArrayLiteral || t.objectFlags & ts.ObjectFlags.EvolvingArray)) {\n          let typeRef = t;\n          let args2 = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n          let translated = translateType(ctx.checker, args2[0]);\n          let typeInfo = getWGSLTypeInfo(translated);\n          args2.length;\n          if (typeInfo.needsAlignment) {\n            translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n          }\n          let lengths = {\n            1: \"x\",\n            2: \"xy\",\n            3: \"xyz\",\n            4: \"xyzw\"\n          };\n          postfix = `.${lengths[typeInfo.length ?? 1]}`;\n        }\n        return s([c2(elem.expression), \"[\", c2(elem.argumentExpression), \"]\", postfix]);\n      case ts.SyntaxKind.Block:\n        let block = ast;\n        return s([\n          \"{\\n\",\n          ...join(\n            block.statements.map((child) => c2(child)),\n            \";\"\n          ),\n          \"\\n}\"\n        ]);\n      case ts.SyntaxKind.TypeOfExpression:\n        return s([\"0\"]);\n      case ts.SyntaxKind.WhileStatement:\n        let whileStmt = ast;\n        return s([\"while (\", c2(whileStmt.expression), \") \", c2(whileStmt.statement)]);\n      default:\n        throw new GLSLCompilationError(`Invalid shader syntax '${ast.getText()}'`, ast);\n    }\n  }\n  function getClosureVars(checker, func) {\n    let result = [];\n    let recur = (node2) => {\n      if (node2.kind == ts.SyntaxKind.Identifier) {\n        let id = node2;\n        let symbol = checker.getSymbolAtLocation(id);\n        let declar = symbol.valueDeclaration;\n        if (isVariableDeclarationValue(checker, declar)) {\n          if (declar) {\n            if (!isInSameScope(declar, node2) && isInShader$1(declar)) {\n              result.push(symbol);\n            }\n          }\n        }\n      } else {\n        node2.forEachChild(recur);\n      }\n    };\n    recur(func);\n    return result;\n  }\n  function getDeclarationType(checker, node2) {\n    return node2.type ? checker.getTypeAtLocation(node2.type) : node2.initializer ? checker.getTypeAtLocation(node2.initializer) : checker.getTypeAtLocation(node2);\n  }\n  function isArrayType$1(type2, checker) {\n    return checker.isTupleType(type2) || checker.isArrayType(type2);\n  }\n  class WGSLShader {\n    constructor(key, source) {\n      this.globals = [];\n      this.locals = [];\n      this.attributeInput = \"\";\n      this.attributeOutput = \"\";\n      this.key = key;\n      this.source = source;\n    }\n  }\n  function resolveFunctionName(f) {\n    if (ts.isMethodDeclaration(f)) {\n      let parentName = \"anon\";\n      if (f.parent && ts.isClassDeclaration(f.parent)) {\n        parentName = f.parent.name?.text ?? \"anon\";\n      }\n      return removeDoubleUnderscores(\n        `fn_${f.getSourceFile()?.fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\") ?? \"anon\"}_${f.getStart()}_${parentName}_static_${f.name.getText() ?? \"unknown\"}`\n      );\n    } else {\n      return removeDoubleUnderscores(\n        `fn_${f.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${f.getStart()}_${f.name?.text.replaceAll(\".\", \"_dot_\") ?? \"unknown\"}`\n      );\n    }\n  }\n  function resolveStructName(c2) {\n    if (c2.name?.text == \"ShaderInput\")\n      return \"ShaderInput\";\n    if (c2.name?.text == \"ShaderOutput\")\n      return \"ShaderOutput\";\n    return removeDoubleUnderscores(\n      `str_${c2.getSourceFile().fileName.replaceAll(\"/\", \"_\").replaceAll(\".\", \"_\")}_${c2.getStart()}_${c2.name?.text ?? \"unknown\"}`.replaceAll(\"__\", \"_i_\")\n    );\n  }\n  function isInSameScope(node2, other) {\n    return closest(node2, (node22) => {\n      if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n        return true;\n      }\n      if (ts.isSourceFile(node22)) {\n        return true;\n      }\n    }) == closest(other, (node22) => {\n      if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22)) {\n        return true;\n      }\n      if (ts.isSourceFile(node22)) {\n        return true;\n      }\n    });\n  }\n  function isInShader$1(node2) {\n    return closest(node2, (node22) => {\n      if (ts.isMethodDeclaration(node22) || ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n        if (hasShadeupDocTag(node22, \"shader\")) {\n          return true;\n        }\n      }\n      return false;\n    });\n  }\n  function isInRoot(node2) {\n    let c2 = closest(node2, (node22) => {\n      if (ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22) || ts.isMethodDeclaration(node22) || ts.isSourceFile(node22)) {\n        return true;\n      }\n    });\n    return c2 ? ts.isSourceFile(c2) : false;\n  }\n  function isRootNode(node2) {\n    let parentRoot = closest(node2, (node22) => {\n      if (ts.isMethodDeclaration(node22) || ts.isFunctionDeclaration(node22) || ts.isArrowFunction(node22)) {\n        return true;\n      }\n      if (ts.isSourceFile(node22)) {\n        return true;\n      }\n    });\n    return parentRoot && ts.isSourceFile(parentRoot);\n  }\n  function isComposedFunction(checker, func) {\n    let isComposed = false;\n    func.parameters.forEach((param) => {\n      let type2 = checker.getTypeAtLocation(param);\n      if (type2.getCallSignatures().length > 0) {\n        isComposed = true;\n      }\n    });\n    return isComposed;\n  }\n  function resolveDeps(checker, root, table = {\n    graph: /* @__PURE__ */ new Map(),\n    functions: /* @__PURE__ */ new Map(),\n    structs: /* @__PURE__ */ new Map(),\n    structsProps: /* @__PURE__ */ new Map(),\n    globals: /* @__PURE__ */ new Map(),\n    composed: /* @__PURE__ */ new Map()\n  }) {\n    function resolveFunction(f1, f2, call) {\n      let n1 = f1 ? resolveFunctionName(f1) : \"main\";\n      let n2 = resolveFunctionName(f2);\n      if (f2.name?.getText() === \"__index\" || f2.name?.getText() === \"__index_assign\" || f2.name?.getText() === \"__index_assign_op\" || f2.name?.getText() === \"len\" || f2.name?.getText() === \"sample\" || f2.name?.getText() === \"atomic\" || hasShadeupDocTag(f2, \"noemit_gpu\"))\n        return;\n      if (isComposedFunction(checker, f2)) {\n        n2 = n2 + \"_composed_\" + call.pos;\n        table.composed.set(n2, call);\n      }\n      let deps = table.graph.get(n1) ?? [];\n      if (!deps.includes(n2))\n        deps.push(n2);\n      table.graph.set(n1, deps);\n      table.functions.set(n2, f2);\n    }\n    function resolveStruct(decl, fullStruct = false) {\n      let name = resolveStructName(decl);\n      if (decl.name?.text == \"atomic_internal\") {\n        return;\n      }\n      if (table.structs.has(name)) {\n        if (!fullStruct) {\n          return;\n        }\n      }\n      let props = table.structsProps.get(name) ?? /* @__PURE__ */ new Set();\n      for (let member of decl.members) {\n        if (ts.isPropertyDeclaration(member)) {\n          let type2 = checker.getTypeAtLocation(member);\n          resolveTypeUse(type2, member);\n          if (fullStruct) {\n            props.add(member.name.getText());\n          }\n        }\n      }\n      if (fullStruct) {\n        table.structsProps.set(name, props);\n      }\n      table.structs.set(name, decl);\n    }\n    function isValidShaderType(type2, checker2) {\n      let symbol = type2.aliasSymbol || type2.getSymbol();\n      let name = checker2.typeToString(type2);\n      let bases = type2.getBaseTypes();\n      if (bases && bases.length > 0) {\n        for (let base of bases) {\n          if (!isValidShaderType(base, checker2))\n            return false;\n        }\n      }\n      if (TYPE_BLACKLIST.includes(symbol?.getName() ?? \"\")) {\n        return false;\n      }\n      return !TYPE_BLACKLIST.includes(name);\n    }\n    function resolveTypeUse(typeNode, context2, fullStruct = false) {\n      let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n      if (TYPE_BLACKLIST.includes(symbol?.getName() ?? \"\")) {\n        throw new GLSLCompilationError(\n          `Type '${symbol?.getName()}' is not supported in shaders`,\n          context2\n        );\n      }\n      let decl = symbol?.getDeclarations()?.[0];\n      if (decl && ts.isClassDeclaration(decl)) {\n        resolveStruct(decl, fullStruct);\n      }\n      let typestr = checker.typeToString(typeNode);\n      if (typeNode.aliasTypeArguments)\n        for (let args of typeNode.aliasTypeArguments) {\n          resolveTypeUse(\n            args,\n            context2,\n            typestr.startsWith(\"buffer<\") || typestr.startsWith(\"buffer_internal<\")\n          );\n        }\n    }\n    function resolvePropertyAccess(node2) {\n      let typeNode = checker.getTypeAtLocation(node2.expression);\n      let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n      checker.typeToString(typeNode);\n      if (!isValidShaderType(typeNode, checker)) {\n        throw new GLSLCompilationError(\n          `Type '${symbol?.getName()}' is not supported in shaders`,\n          node2\n        );\n      }\n      let full = checker.getTypeAtLocation(node2).getCallSignatures().length > 0;\n      resolveTypeUse(typeNode, node2, full);\n      resolveTypeUse(checker.getTypeAtLocation(node2), node2);\n      let prop = node2.name.getText();\n      let decl = symbol?.getDeclarations()?.[0];\n      if (decl && ts.isClassDeclaration(decl)) {\n        let name2 = resolveStructName(decl);\n        let props = table.structsProps.get(name2) ?? /* @__PURE__ */ new Set();\n        props.add(prop);\n        table.structsProps.set(name2, props);\n      }\n    }\n    walkNodes$1(root, (node2) => {\n      if (ts.isCallExpression(node2)) {\n        let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = checker.getAliasedSymbol(exprSmybol);\n        }\n        if (exprSmybol) {\n          let funcDeclar = exprSmybol.getDeclarations()?.[0];\n          exprSmybol.valueDeclaration;\n          if (ts.isPropertyAccessExpression(node2.expression)) {\n            resolveTypeUse(\n              checker.getTypeAtLocation(node2.expression.expression),\n              node2.expression.expression\n            );\n          }\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            let mapping = findSignatureMappingToWGSL(checker, exprSmybol);\n            if (mapping === null) {\n              let parentDeclar = closest(\n                node2,\n                (n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n) || ts.isArrowFunction(n)\n              );\n              if (parentDeclar && ts.isArrowFunction(parentDeclar)) {\n                let parentParentDeclar = closest(parentDeclar, (n) => ts.isCallExpression(n));\n                if (parentParentDeclar && ts.isCallExpression(parentParentDeclar)) {\n                  let parentParentSymbol = checker.getSymbolAtLocation(parentParentDeclar.expression);\n                  if (parentParentSymbol && parentParentSymbol.flags & ts.SymbolFlags.Alias) {\n                    parentParentSymbol = checker.getAliasedSymbol(parentParentSymbol);\n                  }\n                  if (parentParentSymbol) {\n                    let parentParentFuncDeclar = parentParentSymbol.getDeclarations()?.[0];\n                    if (parentParentFuncDeclar && (ts.isFunctionDeclaration(parentParentFuncDeclar) || ts.isMethodDeclaration(parentParentFuncDeclar))) {\n                      resolveFunction(parentParentFuncDeclar, funcDeclar, node2);\n                    }\n                  }\n                }\n              } else if (parentDeclar && (ts.isFunctionDeclaration(parentDeclar) || ts.isMethodDeclaration(parentDeclar))) {\n                resolveFunction(parentDeclar, funcDeclar, node2);\n              } else {\n                resolveFunction(null, funcDeclar, node2);\n              }\n              if (!table.graph.has(resolveFunctionName(funcDeclar))) {\n                table.graph.set(resolveFunctionName(funcDeclar), []);\n                resolveDeps(checker, funcDeclar, table);\n              }\n              let sig = checker.getSignatureFromDeclaration(funcDeclar);\n              let returnType = checker.getReturnTypeOfSignature(sig);\n              resolveTypeUse(returnType, node2);\n            }\n          }\n        }\n      }\n      if (ts.isNewExpression(node2)) {\n        resolveTypeUse(checker.getTypeAtLocation(node2), node2.expression, true);\n      }\n      if (ts.isPropertyAccessExpression(node2)) {\n        resolvePropertyAccess(node2);\n      }\n      if (ts.isIdentifier(node2)) {\n        let type2 = checker.getTypeAtLocation(node2);\n        resolveTypeUse(type2, node2);\n        if (checker.getSymbolAtLocation(node2)) {\n          let decl = checker.getSymbolAtLocation(node2)?.declarations;\n          if (decl && ts.isVariableDeclaration(decl[0])) {\n            if (!isInSameScope(decl[0], node2) && decl[0].getSourceFile().fileName !== root.getSourceFile().fileName) {\n              if (isVariableDeclarationValue(checker, decl[0])) {\n                table.globals.set(node2.text.toString(), decl[0]);\n              }\n            }\n          }\n        }\n      }\n      if (ts.isVariableDeclaration(node2)) {\n        let type2 = checker.getTypeAtLocation(node2);\n        resolveTypeUse(type2, node2);\n      }\n    });\n    return table;\n  }\n  function resolveUniforms(checker, root) {\n    let uniforms = [];\n    walkNodesWithCalls(checker, root, (node2) => {\n      if (ts.isIdentifier(node2)) {\n        let decl = checker.getSymbolAtLocation(node2);\n        if (decl && decl.flags & ts.SymbolFlags.Alias) {\n          decl = checker.getAliasedSymbol(decl);\n        }\n        if (decl && decl.declarations && decl.declarations.length == 1) {\n          let declNode = decl.declarations[0];\n          if (declNode) {\n            if (isVariableDeclarationValue(checker, declNode)) {\n              if (!isInSameScope(declNode, node2) && !isInShader$1(declNode)) {\n                let indexAssign = false;\n                let indexRead = false;\n                let sampler = false;\n                let parent = node2.parent;\n                if (parent && ts.isPropertyAccessExpression(parent)) {\n                  if (parent.expression == node2) {\n                    if (parent.name.getText() == \"__index_assign\") {\n                      indexAssign = true;\n                    }\n                    if (parent.name.getText() == \"__index\") {\n                      indexRead = true;\n                      if (parent.parent && parent.parent.parent && ts.isPropertyAccessExpression(parent.parent.parent)) {\n                        if (parent.parent.parent.parent && ts.isBinaryExpression(parent.parent.parent.parent) && parent.parent.parent.parent.left == parent.parent.parent) {\n                          if (parent.parent.parent.parent.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n                            indexAssign = true;\n                          }\n                        }\n                        if (parent.parent.parent.parent && ts.isPropertyAccessExpression(parent.parent.parent.parent)) {\n                          let propType = checker.getTypeAtLocation(parent.parent.parent);\n                          let translatedPropType = translateType(checker, propType);\n                          if (translatedPropType.startsWith(\"atomic<\")) {\n                            if (parent.parent.parent.parent.name.getText() != \"read\") {\n                              indexAssign = true;\n                            } else {\n                              indexRead = true;\n                            }\n                          }\n                        }\n                      }\n                    }\n                    if (parent.name.getText() == \"sample\") {\n                      sampler = true;\n                    }\n                  }\n                }\n                let idx = uniforms.findIndex((d) => d.declaration === declNode);\n                if (idx == -1) {\n                  let translated = translateType(checker, checker.getTypeAtLocation(declNode));\n                  if (translated.includes(\"atomic<\")) {\n                    indexAssign = true;\n                  }\n                  uniforms.push({\n                    declaration: declNode,\n                    usesIndexAssign: indexAssign,\n                    usesIndexRead: indexRead,\n                    usesSampler: sampler\n                  });\n                } else {\n                  uniforms[idx].usesIndexAssign = uniforms[idx].usesIndexAssign || indexAssign;\n                  uniforms[idx].usesIndexRead = uniforms[idx].usesIndexRead || indexRead;\n                  uniforms[idx].usesSampler = uniforms[idx].usesSampler || sampler;\n                }\n              }\n            }\n          }\n        }\n      }\n    });\n    return uniforms;\n  }\n  function isVariableDeclarationValue(checker, node2) {\n    try {\n      if (ts.isVariableDeclaration(node2) || ts.isParameter(node2)) {\n        let type2 = checker.getTypeAtLocation(node2);\n        let calls = type2.getCallSignatures();\n        if (calls.length != 0) {\n          if (type2.aliasSymbol) {\n            if (type2.aliasSymbol.getName() == \"shader\") {\n              return true;\n            }\n          }\n        }\n        return calls.length == 0;\n      } else {\n        return false;\n      }\n    } catch (e) {\n      return false;\n    }\n  }\n  function isUniformable(checker, decl) {\n    let exprSmybol = checker.getSymbolAtLocation(decl);\n    if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n      exprSmybol = checker.getAliasedSymbol(exprSmybol);\n    }\n    if (exprSmybol) {\n      exprSmybol.getDeclarations()?.[0];\n    }\n    return ts.isVariableDeclaration(decl) || ts.isParameter(decl);\n  }\n  function isValidStructType(checker, type2) {\n    let t = translateType(checker, type2);\n    return t != \"sampler\";\n  }\n  function addWGSLShader(key, root, checker, env2, isComputeShader = false, computeShaderSize = [1, 1, 1]) {\n    let deps = resolveDeps(checker, root);\n    let uniforms = resolveUniforms(checker, root);\n    let mapping = [...deps.graph.entries()].map(([k, v]) => v.map((d) => [k, d])).flat();\n    let sorted = [];\n    try {\n      sorted = toposort(mapping).reverse();\n    } catch (e) {\n      sorted = [];\n    }\n    let preFuncs = [];\n    for (let s of deps.structs.values()) {\n      let name = resolveStructName(s);\n      let hasAnyProperty = false;\n      let sp = deps.structsProps.get(name);\n      let members = s.members.map((m) => {\n        if (!ts.isPropertyDeclaration(m))\n          return \"\";\n        let type2 = checker.getTypeAtLocation(m);\n        let translated = translateType(checker, type2);\n        if (translated == \"bool\") {\n          translated = \"i32\";\n        }\n        let preComment = \"\";\n        if (!sp || !sp.has(m.name.getText())) {\n          if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n            preComment = `// `;\n          }\n        }\n        if (!isValidStructType(checker, type2)) {\n          preComment = `// `;\n        }\n        if (preComment == \"\") {\n          hasAnyProperty = true;\n        }\n        return new SourceNode(\n          m.getStart(),\n          m.getEnd(),\n          `${preComment} ${isAlignable(translated) ? \"@align(16) \" : \"\"} ${escapeIdentifier(\n            m.name.getText()\n          )}: ${translated},\n`\n        );\n      });\n      s.members.map((m) => {\n        if (!ts.isPropertyDeclaration(m))\n          return \"\";\n        let type2 = checker.getTypeAtLocation(m);\n        let translated = translateType(checker, type2);\n        if (translated == \"bool\") {\n          translated = \"i32\";\n        }\n        let preComment = \"\";\n        if (!sp || !sp.has(m.name.getText())) {\n          if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n            preComment = `// `;\n          }\n        }\n        if (preComment == \"\") {\n          hasAnyProperty = true;\n        }\n        return new SourceNode(\n          m.getStart(),\n          m.getEnd(),\n          `${preComment} ${escapeIdentifier(m.name.getText())}: ${translated},\n`\n        );\n      });\n      let hasAtomic = false;\n      let memberNames = s.members.map((m) => {\n        if (!ts.isPropertyDeclaration(m))\n          return [\"\", \"\"];\n        let type2 = checker.getTypeAtLocation(m);\n        let translated = translateType(checker, type2);\n        if (!sp || !sp.has(m.name.getText())) {\n          if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n            return [\"\", \"\"];\n          }\n        }\n        if (translated.startsWith(\"atomic<\")) {\n          hasAtomic = true;\n        }\n        return [escapeIdentifier(m.name.getText()), translated, m];\n      }).filter((m) => m[0] != \"\").filter((m) => {\n        return isValidStructType(checker, checker.getTypeAtLocation(m[2]));\n      }).sort((a, b) => {\n        return a[0].localeCompare(b[0]);\n      });\n      if (!hasAnyProperty)\n        continue;\n      if (name == \"ShaderInput\" || name == \"ShaderOutput\") {\n        members.push(new SourceNode(s.getStart(), s.getEnd(), [\"// %SHADER_\" + name + \"%\"]));\n      }\n      preFuncs.push(\n        new SourceNode(s.getStart(), s.getEnd(), [`struct ${name} {\n`, ...members, \"\\n};\\n\"])\n      );\n      if (name != \"ShaderInput\" && name != \"ShaderOutput\") {\n        if (!hasAtomic) {\n          preFuncs.push(\n            new SourceNode(s.getStart(), s.getEnd(), [\n              \"fn _make_struct_\" + name + \"(\",\n              ...memberNames.map((m) => {\n                return `  ${m[0]}: ${m[1]},`;\n              }),\n              \") -> \",\n              name,\n              \" {\\n\",\n              \"var _s: \",\n              name,\n              \";\\n\",\n              ...memberNames.map((m) => {\n                if (m[1] == \"bool\") {\n                  return `  _s.${m[0]} = select(0, 1, ${m[0]});\n`;\n                } else {\n                  return `  _s.${m[0]} = ${m[0]};\n`;\n                }\n              }),\n              \"\\nreturn _s; \\n}\\n\"\n            ])\n          );\n        }\n      }\n    }\n    let specialUniforms = [];\n    preFuncs.push(\n      new SourceNode(0, 0, [\"struct _InUniformsStruct {\\n/*SHADEUP_UNIFORM_STRUCT_START*/\\n\"])\n    );\n    let localStrs = [];\n    let globalStrs = [];\n    let workgroupVars = [];\n    let checkDecl = (node2) => {\n      let fullText = node2.getSourceFile().getFullText();\n      let fullStart = node2.getFullStart();\n      let prefix = `// @workgroup\n `;\n      let mySelf = fullText.slice(fullStart - prefix.length, fullStart);\n      if (mySelf.includes(\"@workgroup\")) {\n        workgroupVars.push(node2);\n      }\n    };\n    if (ts.isArrowFunction(root)) {\n      ts.forEachChild(root.body, (node2) => {\n        if (ts.isVariableDeclaration(node2) || ts.isVariableStatement(node2) || ts.isVariableDeclarationList) {\n          if (ts.isVariableDeclaration(node2)) {\n            checkDecl(node2);\n          } else if (ts.isVariableStatement(node2)) {\n            node2.declarationList.declarations.forEach((d) => {\n              checkDecl(d);\n            });\n          } else if (ts.isVariableDeclarationList(node2)) {\n            for (let d of node2.declarations) {\n              checkDecl(d);\n            }\n          }\n        }\n      });\n    }\n    let globalUnis = [];\n    let localUnis = [];\n    for (let uniformData of uniforms) {\n      let u = uniformData.declaration;\n      if (isUniformable(checker, u)) {\n        let _type = checker.getTypeAtLocation(u);\n        let translated = translateType(checker, _type);\n        let isGlobalVar = isRootNode(u);\n        let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${u.name.getText()}`;\n        let isSpecial = isSpecialUniformType(translated);\n        let pushTo = isGlobalVar ? globalStrs : localStrs;\n        if (translated.startsWith(\"array\")) {\n          pushTo.push(\n            new SourceNode(u.getStart(), u.getEnd(), [\"@align(16) \", glslVarName, \"_size: i32,\\n\"])\n          );\n        }\n        if (translated.startsWith(\"atomic\")) {\n          pushTo.push(\n            new SourceNode(u.getStart(), u.getEnd(), [\"@align(16) \", glslVarName, \"_dummy: u32,\\n\"])\n          );\n        }\n        if (translated == \"sampler\") {\n          pushTo.push(\n            new SourceNode(u.getStart(), u.getEnd(), [\n              \"@align(16) \",\n              glslVarName,\n              \"_size: vec2<f32>,\\n\"\n            ])\n          );\n        }\n        if (isSpecial) {\n          if (isGlobalVar) {\n            globalUnis.push(uniformData);\n          } else {\n            localUnis.push(uniformData);\n          }\n        } else {\n          pushTo.push(\n            new SourceNode(u.getStart(), u.getEnd(), [\n              (isAlignable(translated) ? \"@align(16) \" : \"\") + glslVarName,\n              \": \",\n              translated,\n              \",\\n\"\n            ])\n          );\n        }\n      }\n    }\n    specialUniforms.push(...localUnis, ...globalUnis);\n    if (localStrs.length == 0 && globalStrs.length == 0) {\n      preFuncs.push(new SourceNode(0, 0, [\"\", \"dummy\", \": vec4<f32>,\\n\"]));\n    } else {\n      preFuncs = [...preFuncs, ...localStrs, ...globalStrs];\n    }\n    preFuncs.push(new SourceNode(0, 0, [\"};\\n\"]));\n    preFuncs.push(\n      new SourceNode(0, 0, [\n        \"@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\\n\"\n      ])\n    );\n    let specialUniformsCounter = 2;\n    for (let uniformData of specialUniforms) {\n      let u = uniformData.declaration;\n      if (isUniformable(checker, u)) {\n        let _type = checker.getTypeAtLocation(u);\n        let translated = translateType(checker, _type, false, true);\n        let isGlobalVar = isRootNode(u);\n        let glslVarName = `_ext_uniform_${isGlobalVar ? \"global\" : \"local\"}_${u.name.getText()}`;\n        if (translated == \"sampler\" || translated.startsWith(\"array<sampler\")) {\n          let typeArgs = checker.getTypeArguments(_type);\n          if (translated.startsWith(\"array<sampler\")) {\n            typeArgs = checker.getTypeArguments(typeArgs[0]);\n          }\n          let innerTranslated = translateType(checker, typeArgs[0]);\n          let vecRegex = /vec\\d<([^>]+)>/g;\n          innerTranslated = innerTranslated.replace(vecRegex, \"$1\");\n          let textureKind = \"texture_2d\";\n          let textureKindStorage = \"texture_storage_2d\";\n          if (isArrayType$1(_type, checker)) {\n            textureKind = \"texture_2d_array\";\n            textureKindStorage = \"texture_storage_2d_array\";\n          }\n          if (translated.startsWith(\"array<sampler\")) {\n            translated = \"sampler\";\n          }\n          if (uniformData.usesSampler && uniformData.usesIndexAssign) {\n            preFuncs.push(\n              new SourceNode(0, 0, [\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\n`,\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 1}) var ${glslVarName}: ${translated};\n`,\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 2}) var ${glslVarName}_texture_write: ${textureKindStorage}<%WRITE_TYPE_${glslVarName}%, write>;\n`\n              ])\n            );\n            specialUniformsCounter += 2;\n          } else if (uniformData.usesIndexAssign) {\n            preFuncs.push(\n              new SourceNode(0, 0, [\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\n`,\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 1}) var ${glslVarName}_texture_write: ${textureKindStorage}<%WRITE_TYPE_${glslVarName}%, write>;\n`\n              ])\n            );\n            specialUniformsCounter += 1;\n          } else if (uniformData.usesSampler || uniformData.usesIndexRead) {\n            preFuncs.push(\n              new SourceNode(0, 0, [\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\n`,\n                `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter + 1}) var ${glslVarName}: ${translated};\n`\n              ])\n            );\n            specialUniformsCounter += 1;\n          }\n        } else if (translated.startsWith(\"atomic\")) {\n          preFuncs.push(\n            new SourceNode(0, 0, [\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var<storage, read_write> ${glslVarName}: ${translated};\n`\n            ])\n          );\n        } else if (translated.startsWith(\"array\") || translated.startsWith(\"buffer\")) {\n          let usageType = \"read\";\n          if (uniformData.usesIndexAssign) {\n            usageType = \"read_write\";\n          }\n          preFuncs.push(\n            new SourceNode(0, 0, [\n              `@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var<storage, ${usageType}> ${glslVarName}: ${translated};\n`\n            ])\n          );\n        }\n        specialUniformsCounter++;\n      }\n    }\n    for (let workgroupVar of workgroupVars) {\n      preFuncs.push(\n        new SourceNode(0, 0, [\n          `var<workgroup> ${escapeIdentifier(workgroupVar.name.getText())}: ${translateType(\n            checker,\n            checker.getTypeAtLocation(workgroupVar.type)\n          )};\n`\n        ])\n      );\n    }\n    for (let k of sorted) {\n      if (k == \"main\")\n        continue;\n      let v = deps.functions.get(k);\n      if (v) {\n        let sourceFile2 = v.getSourceFile();\n        let originalFile2 = env2.files.find((f) => f.path == sourceFile2.fileName);\n        preFuncs.push(\n          compile$1(\n            { parentFunction: v, checker, composed: deps.composed.get(k) ?? null },\n            v,\n            originalFile2?.mapping\n          )\n        );\n      }\n    }\n    let sourceFile = root.getSourceFile();\n    let originalFile = env2.files.find((f) => f.path == sourceFile?.fileName);\n    let customAttributesIn = /* @__PURE__ */ new Map();\n    let customAttributesOut = /* @__PURE__ */ new Map();\n    let main = compile$1(\n      {\n        checker,\n        isComputeShader,\n        computeSize: computeShaderSize,\n        addCustomAttribute(type2, idx, valType, interp) {\n          if (type2 == \"in\") {\n            customAttributesIn.set(idx, [valType, interp]);\n          } else if (type2 == \"out\") {\n            customAttributesOut.set(idx, [valType, interp]);\n          }\n        }\n      },\n      root,\n      originalFile.mapping\n    );\n    preFuncs.push(main);\n    let source = new SourceNode(root.getStart(), root.getEnd(), preFuncs);\n    let ss = { indexMapping: [], str: \"\" };\n    source.toString(ss);\n    let finalShaderOutput = ss.str;\n    let customIns = [];\n    for (let [idx, [valType, interp]] of customAttributesIn.entries()) {\n      customIns.push(`@location(${7 + idx}) @interpolate(${interp}) custom${idx}: ${valType},\n`);\n    }\n    finalShaderOutput = finalShaderOutput.replace(\"// %SHADER_ShaderInput%\\n\", customIns.join(\"\"));\n    let customOuts = [];\n    for (let [idx, [valType, interp]] of customAttributesOut.entries()) {\n      customOuts.push(`@location(${7 + idx}) @interpolate(${interp}) custom${idx}: ${valType},\n`);\n    }\n    let matches = wgslHeader.match(/fn ([^\\(]+)/gm);\n    let headerSplits = [];\n    for (let i = 0; i < matches.length; i++) {\n      let index = wgslHeader.indexOf(matches[i]);\n      let toIndex = i == matches.length - 1 ? wgslHeader.length : wgslHeader.indexOf(matches[i + 1]);\n      headerSplits.push(wgslHeader.substring(index, toIndex));\n    }\n    let realHeader = \"\";\n    for (let i = 0; i < headerSplits.length; i++) {\n      let headerText = headerSplits[i];\n      let fnName = headerText.match(/fn ([^\\(]+)/)?.[1];\n      if (fnName) {\n        if (finalShaderOutput.includes(fnName)) {\n          realHeader += headerText;\n        }\n      }\n    }\n    finalShaderOutput = realHeader + finalShaderOutput;\n    let output = new WGSLShader(`shd_${key}`, finalShaderOutput);\n    output.sourceMapping = ss.indexMapping;\n    output.attributeInput = customIns.join(\"\");\n    output.attributeOutput = customOuts.join(\"\");\n    for (let uniformData of uniforms) {\n      let u = uniformData.declaration;\n      if (isUniformable(checker, u)) {\n        let name = u.name.getText();\n        let isGlobalVar = isRootNode(u);\n        if (name) {\n          let filterProps = function(props) {\n            if (props && props.name) {\n              let sp = deps.structsProps.get(props.name);\n              let realStruct = deps.structs.get(props.name);\n              if (props.type == \"struct\" && realStruct) {\n                for (let fi = props.fields.length - 1; fi >= 0; fi--) {\n                  let f = props.fields[fi];\n                  if (!sp || !sp.has(f[0])) {\n                    props.fields.splice(fi, 1);\n                  } else {\n                    if (f[1].type == \"struct\") {\n                      f[1] = filterProps(f[1]);\n                    }\n                  }\n                }\n              }\n            }\n            if (props && (props.type == \"buffer\" || props.type == \"primitive\" && props.name == \"texture2d\")) {\n              if (uniformData.usesSampler && uniformData.usesIndexAssign) {\n                props.access = \"sample_write\";\n              } else if (uniformData.usesIndexAssign) {\n                props.access = \"write\";\n              } else if (uniformData.usesSampler) {\n                props.access = \"sample\";\n              } else {\n                props.access = \"read\";\n              }\n            } else if (props && props.type == \"array\" && props.element.type == \"primitive\" && props.element.name == \"texture2d\") {\n              if (uniformData.usesSampler && uniformData.usesIndexAssign) {\n                props.element.access = \"sample_write\";\n              } else if (uniformData.usesIndexAssign) {\n                props.element.access = \"write\";\n              } else if (uniformData.usesSampler) {\n                props.element.access = \"sample\";\n              } else {\n                props.element.access = \"read\";\n              }\n            }\n            return props;\n          };\n          getDeclarationType(checker, u);\n          let typeNode = checker.getTypeAtLocation(u);\n          let symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n          let decl = symbol?.getDeclarations()?.[0];\n          if (decl && ts.isClassDeclaration(decl)) {\n            resolveStructName(decl);\n          }\n          if (isGlobalVar) {\n            let typeOut2 = getDeclarationType(checker, u);\n            output.globals.push([\n              name,\n              {\n                fileName: getNodeSourceFileName(u),\n                structure: filterProps(translateType(checker, typeOut2, true))\n              }\n            ]);\n          } else {\n            output.locals.push([\n              name,\n              filterProps(translateType(checker, getDeclarationType(checker, u), true))\n            ]);\n          }\n        }\n      }\n    }\n    return output;\n  }\n  function isAlignable(t) {\n    return t.startsWith(\"vec\") || t == \"f32\" || t == \"i32\" || t == \"u32\";\n  }\n  function isSpecialUniformType(t) {\n    return t == \"sampler\" || t.startsWith(\"array\") || t.startsWith(\"buffer\") || t.startsWith(\"atomic\");\n  }\n  function getNodeSourceFileName(node2) {\n    let found = closest(node2, (n) => ts.isSourceFile(n));\n    if (found && ts.isSourceFile(found)) {\n      return found.fileName;\n    } else {\n      return \"\";\n    }\n  }\n  function walkNodes$1(node2, cb) {\n    cb(node2);\n    node2.forEachChild((n) => walkNodes$1(n, cb));\n  }\n  function walkNodesWithCalls(checker, node2, cb) {\n    cb(node2);\n    node2.forEachChild((n) => {\n      if (ts.isCallExpression(node2)) {\n        let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n        if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n          exprSmybol = checker.getAliasedSymbol(exprSmybol);\n        }\n        if (exprSmybol) {\n          let funcDeclar = exprSmybol.getDeclarations()?.[0];\n          if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n            let mapping = findSignatureMappingToWGSL(checker, exprSmybol);\n            if (mapping === null) {\n              if (funcDeclar.body) {\n                walkNodesWithCalls(checker, funcDeclar.body, cb);\n              }\n            }\n          }\n        }\n      }\n      walkNodesWithCalls(checker, n, cb);\n    });\n  }\n  function getSymbolAtLocationAndFollowAliases(checker, node2) {\n    let exprSmybol = checker.getSymbolAtLocation(node2);\n    if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n      exprSmybol = checker.getAliasedSymbol(exprSmybol);\n    }\n    return exprSmybol;\n  }\n  function findSignatureMappingToWGSL(checker, sym) {\n    let matcher = /=(?:wgsl|univ)\\((.+)\\)$/g;\n    if (!sym.valueDeclaration)\n      return null;\n    let doc = ts.getJSDocTags(sym.valueDeclaration);\n    for (let d of doc) {\n      if (d.tagName.text !== \"shadeup\")\n        continue;\n      if (typeof d.comment === \"string\") {\n        let matches = matcher.exec(d.comment);\n        if (matches) {\n          return matches[1];\n        }\n      }\n    }\n    return null;\n  }\n  function removeDoubleUnderscores(str) {\n    return str.replace(/__/g, \"_ii\");\n  }\n  let rootSymbolsFromMath = [\n    \"abs\",\n    \"floor\",\n    \"ceil\",\n    \"round\",\n    \"sign\",\n    \"cos\",\n    \"sin\",\n    \"tan\",\n    \"acos\",\n    \"asin\",\n    \"atan\",\n    \"atan2\",\n    \"cosh\",\n    \"sinh\",\n    \"tanh\",\n    \"acosh\",\n    \"asinh\",\n    \"atanh\",\n    \"exp\",\n    \"log\",\n    \"pow\",\n    \"log2\",\n    \"log10\",\n    \"sqrt\",\n    \"inversesqrt\",\n    \"frac\",\n    \"min\",\n    \"max\",\n    \"step\",\n    \"clamp\",\n    \"saturate\",\n    \"smoothstep\",\n    \"lerp\",\n    \"bilerp\",\n    \"length\",\n    \"distance\",\n    \"dist\",\n    \"normalize\",\n    \"dot\",\n    \"reflect\",\n    \"refract\",\n    \"cross\",\n    \"degrees\",\n    \"radians\",\n    \"wrap\",\n    \"rand\",\n    \"rand2\",\n    \"rand3\",\n    \"float2x2\",\n    \"float3x3\",\n    \"float4x4\",\n    \"inverse\",\n    \"transpose\",\n    \"pingpong\",\n    \"atomic\",\n    \"mod\",\n    \"workgroupBarrier\",\n    \"storageBarrier\",\n    \"workgroupUniformLoad\",\n    \"discard\",\n    \"ddx\",\n    \"ddy\",\n    \"ddxFine\",\n    \"ddyFine\",\n    \"ddxCoarse\",\n    \"ddyCoarse\",\n    \"bitcast\",\n    \"pack4x8snorm\",\n    \"pack4x8unorm\",\n    \"pack2x16snorm\",\n    \"pack2x16unorm\",\n    \"pack2x16float\",\n    \"unpack4x8snorm\",\n    \"unpack4x8unorm\",\n    \"unpack2x16snorm\",\n    \"unpack2x16unorm\",\n    \"unpack2x16float\"\n  ];\n  let rootSymbolsFromAll = [\n    \"print\",\n    \"stat\",\n    \"statGraph\",\n    \"time\",\n    \"compute\",\n    // 'type shader',\n    \"flush\",\n    // 'addressWorkgroup',\n    // 'drawAlt',\n    // 'shader_start_shd_',\n    \"globalVarInit\",\n    // 'type ShaderInput',\n    // 'type ShaderOutput',\n    \"sleep\",\n    \"__makeMap\",\n    \"__deepClone\",\n    \"map\",\n    \"array\"\n  ];\n  let rootSymbolsFromDraw = [\n    \"drawIndexed\",\n    \"drawInstanced\",\n    \"draw\",\n    \"makeShader\",\n    \"ShaderInput\",\n    \"ShaderOutput\",\n    \"shader\",\n    \"drawAlt2\",\n    // 'drawIndexedIndirect',\n    // 'drawInstancedIndexed',\n    // 'drawIndirect',\n    \"drawCount\",\n    \"drawAttributes\",\n    \"drawAdvanced\",\n    \"computeIndirect\",\n    \"drawFullscreen\",\n    \"shader_start_shd_\"\n  ];\n  let rootSymbolsFromCommon = [\n    \"pixelToClip\",\n    \"PI\",\n    \"quat\",\n    \"noise\",\n    \"spatial\",\n    // 'mat4',\n    \"Camera\",\n    \"Camera2d\",\n    \"buffer\",\n    \"matrix\",\n    \"texture2d\",\n    \"texture3d\",\n    \"ui\",\n    \"screenAA\",\n    \"randColor\",\n    \"randColor2\",\n    \"hsl\",\n    \"hsla\",\n    \"rgb\",\n    \"rgba\",\n    \"hslFromColor\",\n    \"hslaFromColor\",\n    \"rgbFromColor\",\n    \"rgbaFromColor\",\n    \"hsv\",\n    \"hsva\",\n    \"hsvFromColor\",\n    \"hsvaFromColor\",\n    \"cmyk\",\n    \"cmykFromColor\",\n    \"hex\",\n    \"hexFromColor\",\n    \"sin1\",\n    \"cos1\",\n    \"tan1\",\n    \"remap\",\n    \"remap1\",\n    \"color\",\n    \"wrap2\",\n    \"wrap3\",\n    \"wrap4\",\n    \"bezier\"\n  ];\n  let rootSymbolsFromMesh = [\"mesh\", \"Mesh\", \"Model\", \"ModelPart\", \"Material\"];\n  const header = `// This file was generated by Shadeup.\nimport * as __ from \"/std_math\";\nimport {${rootSymbolsFromMath.join(\", \")}} from \"/std_math\";\nimport {${rootSymbolsFromAll.join(\", \")}, globalVarGet as __globalVarGet} from \"/std___std_all\";\nimport {${rootSymbolsFromDraw.join(\", \")}} from \"/_std/drawIndexed\";\nimport { physics, PhysicsRigidBody2d, PhysicsCollider2d, PhysicsEngine2d } from \"/_std/physics\";\nlet globalVarGet = __globalVarGet;\n/**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n`;\n  class SourceNode {\n    constructor(startIndex, endIndex, children) {\n      this.startIndex = startIndex;\n      this.endIndex = endIndex;\n      if (Array.isArray(children)) {\n        this.children = children;\n      } else {\n        this.children = [children];\n      }\n    }\n    toString(s) {\n      let start = s.str.length;\n      for (const child of this.children) {\n        if (typeof child === \"string\") {\n          s.str += child;\n        } else if (child instanceof SourceNode) {\n          child.toString(s);\n        }\n      }\n      s.indexMapping.push([this.startIndex, this.endIndex, start, s.str.length]);\n    }\n    print() {\n      const s = { str: \"\", indexMapping: [] };\n      this.toString(s);\n      return s.str;\n    }\n  }\n  function lookupIndexMapping(indexMapping, index) {\n    for (const [start, end, newStart, newEnd] of indexMapping) {\n      if (index >= newStart && index <= newEnd) {\n        return start + (index - newStart);\n      }\n    }\n    return -1;\n  }\n  function lookupIndexMappingRange(indexMapping, start, end) {\n    let minStart = Infinity;\n    let maxEnd = -Infinity;\n    let size = 0;\n    for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n      if (start >= newStart && end <= newEnd) {\n        if (oldEnd - oldStart < size || size === 0) {\n          minStart = oldStart;\n          maxEnd = oldEnd;\n          size = oldEnd - oldStart;\n        }\n      }\n    }\n    return { start: minStart, end: maxEnd };\n  }\n  function reverseLookupIndexMappingRange(indexMapping, start, end) {\n    let minStart = Infinity;\n    let maxEnd = -Infinity;\n    let size = 0;\n    for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n      if (start >= oldStart && end <= oldEnd) {\n        if (newEnd - newStart < size || size === 0) {\n          minStart = newStart;\n          maxEnd = newEnd;\n          size = newEnd - newStart;\n        }\n      }\n    }\n    return { start: minStart, end: maxEnd };\n  }\n  function reverseLookupIndexMappingCursor(indexMapping, cursor) {\n    let exact = -Infinity;\n    let size = 0;\n    for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n      if (cursor >= oldStart && cursor <= oldEnd) {\n        if (newEnd - newStart < size || size === 0) {\n          exact = cursor - oldStart + newStart;\n          size = newEnd - newStart;\n        }\n      }\n    }\n    return exact;\n  }\n  function prePass(ctx, ast) {\n    for (const child of ast.namedChildren) {\n      if (child.type === \"impl_declaration\") {\n        let _for = child.childForFieldName(\"for\");\n        const name = child.childForFieldName(\"name\");\n        if (_for) {\n          ctx.addImplFor(name.text, child);\n        } else {\n          ctx.addImpl(name.text, child);\n        }\n      }\n      if (child.type == \"lexical_declaration\") {\n        let variable_declarator = child.firstNamedChild;\n        if (variable_declarator.type == \"variable_declarator\") {\n          ctx.globals.push(variable_declarator.firstNamedChild.text);\n        }\n      }\n    }\n  }\n  const math_primitives = [\n    \"atomic\",\n    \"uint\",\n    \"uint2\",\n    \"uint3\",\n    \"uint4\",\n    \"uint8\",\n    \"int\",\n    \"float\",\n    \"float2\",\n    \"float3\",\n    \"float4\",\n    \"int2\",\n    \"int3\",\n    \"int4\",\n    \"float2x2\",\n    \"float3x3\",\n    \"float4x4\",\n    \"bool\"\n  ];\n  const operators = {\n    \"+\": \"add\",\n    \"-\": \"sub\",\n    \"*\": \"mul\",\n    \"**\": \"pow\",\n    \"/\": \"div\",\n    \"%\": \"mod\",\n    \"==\": \"eq\",\n    \"!=\": \"neq\",\n    \"<\": \"lt\",\n    \"<=\": \"lte\",\n    \">\": \"gt\",\n    \">=\": \"gte\",\n    \"&&\": \"and\",\n    \"||\": \"or\",\n    \"!\": \"not\",\n    \"&\": \"bitand\",\n    \"|\": \"bitor\",\n    \"^\": \"bitxor\",\n    \"<<\": \"lshift\",\n    \">>\": \"rshift\",\n    \"~\": \"bitnot\"\n  };\n  const keyFunctions = {\n    float: \"__.float\",\n    int: \"__.int\",\n    uint: \"__.uint\",\n    uint2: \"__.uint2\",\n    uint3: \"__.uint3\",\n    uint4: \"__.uint4\",\n    uint8: \"__.uint8\",\n    float2: \"__.float2\",\n    float3: \"__.float3\",\n    float4: \"__.float4\",\n    int2: \"__.int2\",\n    int3: \"__.int3\",\n    int4: \"__.int4\",\n    float2x2: \"__.float2x2\",\n    float3x3: \"__.float3x3\",\n    float4x4: \"__.float4x4\"\n  };\n  const escapeWords = {\n    in: true,\n    out: true\n  };\n  function generateDefaultForType(name) {\n    switch (name) {\n      case \"any\":\n        return \"null\";\n      case \"int\":\n        return \"__.int(0)\";\n      case \"uint\":\n        return \"__.uint(0)\";\n      case \"uint8\":\n        return \"__.uint8(0)\";\n      case \"float\":\n        return \"__.float(0.0)\";\n      case \"float2\":\n        return \"__.float2(0.0, 0.0)\";\n      case \"float3\":\n        return \"__.float3(0.0, 0.0, 0.0)\";\n      case \"float4\":\n        return \"__.float4(0.0, 0.0, 0.0, 0.0)\";\n      case \"int2\":\n        return \"__.int2(0, 0)\";\n      case \"int3\":\n        return \"__.int3(0, 0, 0)\";\n      case \"int4\":\n        return \"__.int4(0, 0, 0, 0)\";\n      case \"float2x2\":\n        return \"__.float2x2(0.0, 0.0, 0.0, 0.0)\";\n      case \"float3x3\":\n        return \"__.float3x3(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n      case \"float4x4\":\n        return \"__.float4x4(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n      case \"bool\":\n        return \"false\";\n      case \"string\":\n        return '\"\"';\n      case \"atomic<uint>\":\n        return \"atomic<__.uint>(__.uint(0))\";\n      case \"atomic<int>\":\n        return \"atomic<__.int>(__.int(0))\";\n      default:\n        if (name.endsWith(\"[]\")) {\n          return \"[]\";\n        } else if (name.endsWith(\"]\")) {\n          let matches = name.match(/(.+)\\[(\\d+)\\]$/);\n          if (matches && matches.length > 2) {\n            let type2 = matches[1];\n            let count2 = matches[2];\n            let args = [];\n            for (let i = 0; i < parseInt(count2); i++) {\n              args.push(generateDefaultForType(type2));\n            }\n            return \"[\" + args.join(\",\") + \"]\";\n          } else {\n            return \"[]\";\n          }\n        } else {\n          if (name.startsWith(\"buffer\") || name.startsWith(\"texture2d\") || name.startsWith(\"texture3d\")) {\n            return \"null\";\n          } else {\n            return \"new \" + name + \"({})\";\n          }\n        }\n    }\n  }\n  function isValidInteger(str) {\n    let n = parseInt(str);\n    if (n > Math.pow(2, 31) - 1 || n < -Math.pow(2, 31)) {\n      return false;\n    }\n    return true;\n  }\n  function compile(ctx, ast) {\n    function c2(myAst, errorMessage = \"Syntax error\") {\n      if (!myAst) {\n        console.log(\"error\");\n        ctx.report(ast, errorMessage);\n        return s([\"/*\", errorMessage, \"*/\"]);\n      } else {\n        return compile(ctx, myAst);\n      }\n    }\n    function s(c22) {\n      return new SourceNode(ast.startIndex, ast.endIndex, c22);\n    }\n    function n(type2) {\n      return ast.childForFieldName(type2);\n    }\n    function flat(...c22) {\n      return c22.reduce((acc, cur) => {\n        return [...acc, ...cur];\n      }, []);\n    }\n    function join(c22, sep) {\n      return c22.filter((v) => {\n        if (typeof v == \"string\" && v.length == 0 || v instanceof SourceNode && v.children.length == 0) {\n          return false;\n        }\n        return true;\n      }).reduce((acc, cur) => {\n        if (acc.length === 0) {\n          return [cur];\n        }\n        return [...acc, sep, cur];\n      }, []);\n    }\n    function children() {\n      return ast.namedChildren.map((child) => c2(child));\n    }\n    function hasName(name) {\n      return ast.childForFieldName(name) !== null;\n    }\n    if (!ast) {\n      return new SourceNode(0, 0, [\"/*\", \"Syntax error\", \"*/\"]);\n    }\n    switch (ast.type) {\n      case \"program\":\n        return s([\n          header,\n          ...ctx.fileName != \"file:////_std/common.ts\" ? [`import {${rootSymbolsFromCommon.join(\", \")}} from \"/_std/common\";`] : [],\n          ...ctx.fileName != \"file:////_std/mesh.ts\" ? [`import {${rootSymbolsFromMesh.join(\", \")}} from \"/_std/mesh\";`] : [],\n          ...ctx.fileName != \"file:////_std/sdf.ts\" ? [`import { sdf } from \"/_std/sdf\";`] : [],\n          ...ast.children.map((child) => c2(child))\n        ]);\n      case \"expression_statement\":\n        if (ast.firstChild) {\n          if (ast.lastNamedChild?.type === \"ERROR\") {\n            return s([c2(ast.firstNamedChild), \".\"]);\n          }\n          if (ast.firstNamedChild.type == \"workgroup\") {\n            return s([c2(ast.firstNamedChild), \"\\n\"]);\n          } else {\n            return s([c2(ast.firstNamedChild), \";\\n\"]);\n          }\n        }\n      case \"binary_expression\":\n        if (ast.firstChild && ast.lastChild) {\n          if (ast.lastChild.text == \"null\" && (ast.children[1].text == \"!=\" || ast.children[1].text == \"==\")) {\n            return s([c2(ast.firstChild), ast.children[1].text + \"=\", \"null\"]);\n          }\n          return s([\n            \"__.\",\n            operators[ast.children[1].text.trim()] ?? ast.children[1].text.trim(),\n            \"( \",\n            c2(ast.firstNamedChild),\n            \", \",\n            c2(ast.lastNamedChild),\n            \" )\"\n          ]);\n        }\n      case \"identifier\":\n        if (keyFunctions[ast.text]) {\n          return s([String(keyFunctions[ast.text])]);\n        } else if (escapeWords[ast.text]) {\n          return s([String(\"__\" + ast.text)]);\n        }\n        return s([\n          String(ast.text === \"self\" ? isInShader(ast) ? \"shader_self_temp\" : \"this\" : ast.text)\n        ]);\n      case \"number\":\n        if (ast.parent?.type == \"pair\" && ast.parent.firstNamedChild == ast) {\n          return s([String(ast.text)]);\n        }\n        if (ast.text.match(/.[xyzwrgba]+$/)) {\n          let swizzle = (ast.text.match(/.[xyzwrgba]+$/) ?? [\"\"])[0];\n          swizzle = swizzle.replace(\".\", \"\");\n          let raw = ast.text.replace(/.[xyzwrgba]+$/, \"\");\n          let isUint2 = raw.indexOf(\"u\") !== -1;\n          let isFloat2 = raw.indexOf(\".\") !== -1;\n          return s([\n            String(\n              \"__.swizzle(\" + (isFloat2 ? \"__.float\" : isUint2 ? \"__.uint\" : \"__.int\") + \"(\" + raw.replace(\"u\", \"\") + '), \"' + swizzle + '\")'\n            )\n          ]);\n        }\n        let isFloat = ast.text.indexOf(\".\") !== -1;\n        let isUint = ast.text.indexOf(\"u\") !== -1;\n        if (!isFloat && !isValidInteger(ast.text) && !isUint) {\n          ctx.report(\n            ast,\n            \"Invalid integer, this overflows the 32 bit integer limit, add a .0 to the end to make it a float\"\n          );\n        }\n        return s([\n          (isFloat ? \"__.float\" : isUint ? \"__.uint\" : \"__.int\") + \"(\",\n          new SourceNode(ast.startIndex, ast.endIndex, ast.text.replace(\"u\", \"\")),\n          \")\"\n        ]);\n      case \"string\":\n        return s([String(ast.text)]);\n      case \"function_declaration\":\n        if (ast.firstChild && ast.lastChild) {\n          let funcName = n(\"name\").text;\n          let prefix = \"\";\n          if (funcName === \"main\") {\n            prefix += \"\";\n            prefix += \"export \";\n          }\n          return s([\n            prefix + \"function \",\n            c2(n(\"name\")),\n            c2(n(\"parameters\")),\n            ...hasName(\"return_type\") ? [c2(n(\"return_type\")), \" \"] : [],\n            c2(n(\"body\")),\n            \"\\n\"\n          ]);\n        }\n      case \"block\":\n        return s(children());\n      case \"formal_parameters\":\n        return s([\"(\", ...join(children(), \", \"), \")\"]);\n      case \"required_parameter\":\n        if (n(\"pattern\")?.text === \"self\") {\n          return s([]);\n        }\n        return s(\n          flat(\n            [c2(n(\"pattern\"))],\n            hasName(\"type\") ? [\": \", c2(n(\"type\"))] : [],\n            hasName(\"value\") ? [\" = \", c2(n(\"value\"))] : []\n          )\n        );\n      case \"type_annotation\":\n        return s([c2(ast.firstNamedChild)]);\n      case \"type_identifier\":\n        if (math_primitives.indexOf(ast.text) !== -1) {\n          return s([String(\"__.\" + ast.text)]);\n        }\n        return s([String(ast.text)]);\n      case \"predefined_type\":\n        if (math_primitives.indexOf(ast.text) !== -1) {\n          return s([String(\"__.\" + ast.text)]);\n        }\n        return s([String(ast.text)]);\n      case \"function_type\":\n        return s([c2(n(\"parameters\")), \" => \", c2(n(\"return_type\"))]);\n      case \"lookup_type\":\n        let len = parseInt(ast.lastNamedChild?.text ?? \"0\");\n        let repeats = [];\n        for (let i = 0; i < len; i++) {\n          repeats.push(c2(ast.firstNamedChild));\n        }\n        return s([\"[\", ...join(repeats, \", \"), \"]\"]);\n      case \"arrow_function\":\n        return s([\n          c2(n(\"parameters\")),\n          \" => \",\n          ...hasName(\"return_type\") ? [c2(n(\"return_type\")), \" \"] : [],\n          c2(n(\"body\"))\n        ]);\n      case \"literal_type\":\n        return s([c2(ast.firstNamedChild)]);\n      case \"return_statement\":\n        if (ast.namedChildCount === 0) {\n          return s([\"return;\"]);\n        } else {\n          if (ast.lastNamedChild?.type === \"ERROR\") {\n            return s([\"return \", c2(ast.firstNamedChild), \".\"]);\n          }\n          return s([\"return \", c2(ast.firstNamedChild), \";\"]);\n        }\n      case \"export_statement\":\n        return s([\"export \", c2(ast.firstNamedChild), \";\"]);\n      case \"export_clause\":\n        return s([\"{\", ...join(children(), \", \"), \"}\"]);\n      case \"export_specifier\":\n        return s([c2(ast.firstNamedChild)]);\n      case \"array\":\n        return s([\"[\", ...join(children(), \", \"), \"]\"]);\n      case \"template_string\":\n        return s([\"`\", ...join(children(), \"\"), \"`\"]);\n      case \"template_substitution\":\n        return s([\"${\", c2(n(\"expression\")), \"}\"]);\n      case \"template_string_segment\":\n        return s([String(ast.text)]);\n      case \"type_alias_declaration\":\n        ctx.report(ast, \"Type aliases aren't supported yet\");\n        return s([\"/*error*/0\"]);\n      case \"import\":\n        return s([\"\"]);\n      case \"comment\":\n        return s([String(ast.text), \"\\n\"]);\n      case \"call_expression\":\n        if (n(\"type_arguments\")) {\n          if (n(\"function\").text == \"buffer\" || n(\"function\").text == \"texture2d\" || n(\"function\").text == \"texture3d\") {\n            let internalArgs = s([\n              \"(\",\n              ...join(\n                [\n                  ...n(\"arguments\").namedChildren.map((chi) => c2(chi)),\n                  ...n(\"arguments\").namedChildren.length == 1 && n(\"function\").text == \"texture2d\" || n(\"function\").text == \"texture3d\" ? [s(['\"auto\"'])] : [],\n                  s(['\"', n(\"type_arguments\").namedChild(0).text, '\"'])\n                ],\n                \", \"\n              ),\n              \")\"\n            ]);\n            return s([c2(n(\"function\")), c2(n(\"type_arguments\")), internalArgs]);\n          }\n          return s([c2(n(\"function\")), c2(n(\"type_arguments\")), c2(n(\"arguments\"))]);\n        } else {\n          return s([c2(n(\"function\")), c2(n(\"arguments\"))]);\n        }\n      case \"construct_expression\":\n        return s([\"new \", c2(n(\"identifier\")), \"(\", c2(n(\"body\")), \")\"]);\n      case \"member_expression\":\n        let prop = n(\"property\");\n        let p = prop.text ?? \"\";\n        let isParentAssignment = ast.parent?.type == \"assignment_expression\" || ast.parent?.type == \"augmented_assignment_expression\";\n        if (isParentAssignment) {\n          let left2 = ast.parent.childForFieldName(\"left\");\n          isParentAssignment = left2.startIndex == ast.startIndex && left2.endIndex == ast.endIndex;\n        }\n        if (p.length > 0 && p.length < 5) {\n          let isSwizzle = true;\n          for (let i = 0; i < p.length; i++) {\n            let char = p[i];\n            if (char !== \"x\" && char !== \"y\" && char !== \"z\" && char !== \"w\" && char !== \"r\" && char !== \"g\" && char !== \"b\" && char !== \"a\") {\n              isSwizzle = false;\n              break;\n            }\n          }\n          if (isSwizzle) {\n            if (isParentAssignment) {\n              ast.parent.childForFieldName(\"right\");\n            }\n            return s([\n              `__.swizzle(`,\n              c2(n(\"object\")),\n              `, '`,\n              new SourceNode(prop.startIndex, prop.endIndex, p),\n              `'`,\n              ...isParentAssignment ? [`, `, c2(ast.parent.childForFieldName(\"right\"))] : [],\n              `)`\n              // new SourceNode(ast.children[1].startIndex, ast.children[1].endIndex, '.'),\n              // c(n('property')!)\n            ]);\n          }\n        }\n        return s([\n          c2(n(\"object\")),\n          new SourceNode(ast.children[1].startIndex, ast.children[1].endIndex, \".\"),\n          c2(n(\"property\"))\n        ]);\n      case \"pair\":\n        return s([c2(n(\"key\")), \": \", c2(n(\"value\"), \"Expected value in pair\")]);\n      case \"object\":\n        let childrens = ast.namedChildren.filter((subc) => subc.type !== \"comment\").map((subc) => c2(subc));\n        return s([\"{\", ...join(childrens, \", \"), \"}\"]);\n      case \"property_identifier\":\n        return s([String(ast.text)]);\n      case \"arguments\":\n        return s([\"(\", ...join(children(), \", \"), \")\"]);\n      case \"parenthesized_expression\":\n        if (ast.lastNamedChild?.type === \"ERROR\") {\n          return s([\"(\", c2(ast.firstNamedChild), \".\", \")\"]);\n        }\n        return s([\"(\", c2(ast.firstNamedChild), \")\"]);\n      case \"function_signature\":\n        ctx.report(ast, \"Missing function body\");\n        return s([\"/*error*/0\"]);\n      case \"parenthesized_expression_vector\":\n        if (ast.firstNamedChild) {\n          if (ast.firstNamedChild.type === \"sequence_expression\") {\n            return s([\"__.makeVector(\", c2(ast.firstNamedChild), \")\"]);\n          } else {\n            return s([\"(\", c2(ast.firstNamedChild), \")\"]);\n          }\n        }\n      case \"if_statement\":\n        return s([\n          \"if \",\n          c2(n(\"condition\")),\n          c2(n(\"consequence\")),\n          hasName(\"alternative\") ? c2(n(\"alternative\")) : \"\"\n        ]);\n      case \"else\":\n        return s([\" else \", c2(ast.firstNamedChild), \"\\n\"]);\n      case \"generic_type\":\n        return s([c2(n(\"name\")), c2(n(\"type_arguments\"))]);\n      case \"type_arguments\":\n        return s([\"<\", ...join(children(), \", \"), \">\"]);\n      case \"array_type\":\n        if (ast.namedChildCount == 2) {\n          return s([c2(ast.firstNamedChild), \"[\", c2(ast.lastNamedChild), \"]\"]);\n        } else {\n          return s([c2(ast.firstNamedChild), \"[]\"]);\n        }\n      case \"ternary_expression\":\n        return s([c2(n(\"condition\")), \" ? \", c2(n(\"consequence\")), \" : \", c2(n(\"alternative\"))]);\n      case \"update_expression\":\n        return s([c2(n(\"argument\")), n(\"operator\").text]);\n      case \"augmented_assignment_expression\":\n        let opMapping = {\n          \"+=\": \"add\",\n          \"-=\": \"sub\",\n          \"*=\": \"mul\",\n          \"/=\": \"div\",\n          \"%=\": \"mod\"\n        };\n        let leftAssignAug = n(\"left\");\n        if (leftAssignAug?.type === \"subscript_expression\") {\n          return s([\n            c2(leftAssignAug.childForFieldName(\"object\")),\n            \".__index_assign_op(__.\",\n            opMapping[n(\"operator\").text],\n            \", \",\n            c2(leftAssignAug.childForFieldName(\"index\")),\n            \", \",\n            c2(n(\"right\")),\n            \")\"\n          ]);\n        }\n        return s([\n          c2(n(\"left\")),\n          \" = __.\",\n          opMapping[n(\"operator\").text],\n          \"(\",\n          c2(n(\"left\")),\n          \", \",\n          c2(n(\"right\")),\n          \")\"\n        ]);\n      case \"for_statement\":\n        return s([\n          \"for (\",\n          c2(n(\"initializer\")),\n          \" \",\n          c2(n(\"condition\")),\n          \" \",\n          c2(n(\"increment\")),\n          \") \",\n          c2(n(\"body\"))\n        ]);\n      case \"for_in_statement\":\n        let leftFor = n(\"left\");\n        let rightFor = n(\"right\");\n        if (leftFor.type === \"parenthesized_expression\") {\n          let forComponents = [];\n          for (let i = 0; i < leftFor.namedChildren[0].namedChildren.length; i++) {\n            let name = leftFor.namedChildren[0].namedChildren[i];\n            if (name.type != \"identifier\") {\n              ctx.report(\n                leftFor.namedChild(i),\n                \"Invalid for loop variable name, must be x, y, z or w\"\n              );\n            }\n            let key2 = name.text;\n            if (![\"x\", \"y\", \"z\", \"w\"].includes(key2)) {\n              ctx.report(\n                leftFor.namedChild(i),\n                \"Invalid for loop variable name, must be x, y, z or w\"\n              );\n            }\n            if (forComponents.includes(key2)) {\n              ctx.report(leftFor.namedChild(i), \"Duplicate for loop variable name\");\n            }\n            forComponents.push(key2);\n          }\n          forComponents = forComponents.reverse();\n          let parts = [];\n          parts.push(s([\"let __for_iter = \", c2(rightFor), \";\\n\"]));\n          let indexes = [\"x\", \"y\", \"z\", \"w\"];\n          for (let n2 of forComponents) {\n            parts.push(\n              s([\n                \"for (let \",\n                n2,\n                \": __.int = __.int(0); \",\n                n2,\n                \" < __for_iter[\",\n                indexes.indexOf(n2).toString(),\n                \"]; \",\n                n2,\n                \"++) {\\n\"\n              ])\n            );\n          }\n          parts.push(s([c2(n(\"body\")), \"\\n\"]));\n          for (let n2 of forComponents) {\n            parts.push(s([\"}\\n\"]));\n          }\n          return s(parts);\n        }\n        return s([\"for (let \", c2(n(\"left\")), \" of \", c2(n(\"right\")), \") \", c2(n(\"body\"))]);\n      case \"while_statement\":\n        return s([\"while (\", c2(n(\"condition\")), \") \", c2(n(\"body\"))]);\n      case \"break_statement\":\n        return s([\"break;\"]);\n      case \"continue_statement\":\n        return s([\"continue;\"]);\n      case \"new_expression\":\n        return s([\"new \", c2(n(\"constructor\")), c2(n(\"arguments\"))]);\n      case \"else_clause\":\n        return s([\" else \", c2(ast.firstNamedChild), \"\\n\"]);\n      case \"statement_block\":\n        if (ast.parent.type == \"method_definition\") {\n          let recur = function(a) {\n            if (a.type == \"identifier\") {\n              if (a.text == \"self\") {\n                doesRefSelf = true;\n              }\n            }\n            a.children.forEach(recur);\n          };\n          let doesRefSelf = false;\n          ast.children.forEach(recur);\n          if (doesRefSelf) {\n            return s([\"{let shader_self_temp = this;\", ...children(), \"}\"]);\n          }\n        }\n        return s([\"{\", ...children(), \"}\"]);\n      case \"import_statement\":\n        let sourceString = n(\"source\");\n        let fromString = sourceString.firstNamedChild?.text;\n        if (fromString) {\n          if (!fromString.startsWith(\"/\") && !fromString.startsWith(\"@\") && !fromString.startsWith(\".\")) {\n            fromString = \"/\" + fromString;\n          }\n        }\n        return s([\n          \"import \",\n          ...ast.namedChildCount == 2 ? [\" \", c2(ast.firstNamedChild), \"  from \"] : [],\n          new SourceNode(sourceString.startIndex, sourceString.endIndex, [\n            JSON.stringify(fromString)\n          ]),\n          \";\"\n        ]);\n      case \"named_imports\":\n        return s([\"{\", ...join(children(), \", \"), \"}\"]);\n      case \"import_clause\":\n        return s([c2(ast.firstChild)]);\n      case \"import_specifier\":\n        return hasName(\"alias\") ? s([c2(n(\"name\")), \" as \", c2(n(\"alias\"))]) : c2(n(\"name\"));\n      case \"predefined_type\":\n        return s([String(ast.text)]);\n      case \"interface_declaration\":\n        return s([\"interface \", c2(n(\"name\")), c2(n(\"body\")), \"\\n\"]);\n      case \"object_method_signature_type\":\n        return s([\"{\\n\", ...children(), \"\\n}\"]);\n      case \"method_signature\":\n        let isStaticSignature = n(\"parameters\")?.firstNamedChild?.text != \"self\";\n        let accessibilityMethod = ast.firstNamedChild?.type === \"accessibility_modifier_member\" ? \"public\" : \"private\";\n        if (ast.parent?.type === \"object_method_signature_type\" && ast.parent?.parent?.type === \"interface_declaration\") {\n          accessibilityMethod = \"\";\n        }\n        return s([\n          accessibilityMethod,\n          \" \",\n          ...isStaticSignature ? [\"static \"] : [],\n          c2(n(\"name\")),\n          c2(n(\"parameters\")),\n          c2(n(\"return_type\")),\n          \";\\n\"\n        ]);\n      case \"type_annotation_arrow\":\n        return s([\": \", c2(ast.firstNamedChild)]);\n      case \"struct_declaration\":\n        let impls = ctx.implsFor.get(n(\"name\").text) ?? [];\n        let properties = n(\"body\")?.namedChildren ?? [];\n        properties = properties.filter((i) => {\n          let isStatic2 = false;\n          for (let child of i.children) {\n            if (child.type === \"static\") {\n              isStatic2 = true;\n            }\n          }\n          return !isStatic2;\n        });\n        let implBodies = [\n          ...(ctx.implsFor.get(n(\"name\").text) ?? []).map((i) => i.childForFieldName(\"body\")),\n          ...(ctx.impls.get(n(\"name\").text) ?? []).map((i) => i.childForFieldName(\"body\")),\n          ...properties\n        ];\n        let staticProperties = n(\"body\")?.namedChildren ?? [];\n        staticProperties = staticProperties.filter((i) => {\n          let isStatic2 = false;\n          for (let child of i.children) {\n            if (child.type === \"static\") {\n              isStatic2 = true;\n            }\n          }\n          return isStatic2;\n        });\n        let props = properties.map((i) => ({\n          name: i.childForFieldName(\"name\")?.text ?? \"_unknown\",\n          type: i.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\",\n          renderedType: compileToString(ctx, i.childForFieldName(\"type\")),\n          default: i.childForFieldName(\"value\") ? compileToString(ctx, i.childForFieldName(\"value\")) : generateDefaultForType(i.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\")\n        }));\n        let cls = s([\n          \"/**@shadeup=struct*/class \",\n          c2(n(\"name\")),\n          ...impls.length > 0 ? [\n            \" implements \",\n            ...join(\n              impls.map((i) => c2(i.childForFieldName(\"for\"))),\n              \",\"\n            )\n          ] : [],\n          \" {\\n\",\n          ...join(\n            staticProperties.map((i) => {\n              return s([\n                \"public static \",\n                c2(i.childForFieldName(\"name\")),\n                \": \",\n                c2(i.childForFieldName(\"type\")),\n                \" = \",\n                c2(i.childForFieldName(\"value\")),\n                \";\\n\"\n              ]);\n            }),\n            \"\"\n          ),\n          `constructor(data: {`,\n          `${props.map(\n            (i) => `${i.name}?: ${math_primitives.includes(i.type ?? \"\") ? \"__.\" + i.type : i.renderedType},`\n          ).join(\"\\n\")}`,\n          `}) {\n`,\n          `${props.map((i) => `this.${i.name} = (data.${i.name} ?? ${i.default}) as any;`).join(\"\\n\")}`,\n          `\n}\n`,\n          ...join(\n            implBodies.map((i) => c2(i)),\n            \"\\n\"\n          ),\n          \"\\n\",\n          `clone(): `,\n          c2(n(\"name\")),\n          ` {\n`,\n          `return new `,\n          c2(n(\"name\")),\n          `({\n`,\n          `${props.map((i) => {\n            return `${i.name}: __deepClone(this.${i.name}),`;\n          }).join(\"\\n\")}`,\n          `});\n`,\n          `}\n`,\n          \"\\n}\",\n          \"\\n\"\n        ]);\n        return cls;\n      case \"object_method_type\":\n        return s([...children()]);\n      case \"method_definition\":\n        let isStatic = n(\"parameters\")?.firstNamedChild?.text != \"self\";\n        return s([\n          ...isStatic ? [\"static \"] : [],\n          c2(n(\"name\")),\n          c2(n(\"parameters\")),\n          c2(n(\"body\")),\n          \"\\n\"\n        ]);\n      case \"impl_for_clause\":\n        return s([ast.firstNamedChild.text]);\n      case \"unary_expression\":\n        let op = ast.firstChild?.text ?? \"\";\n        if (op == \"-\") {\n          return s([\"__.negate(\", c2(n(\"argument\")), \")\"]);\n        } else if (op == \"+\") {\n          return s([\"__.positive(\", c2(n(\"argument\")), \")\"]);\n        } else if (op == \"!\") {\n          return s([\"__.not(\", c2(n(\"argument\")), \")\"]);\n        } else {\n          return s([c2(n(\"argument\"))]);\n        }\n      case \"class_body\":\n        return s([\"{\\n\", ...children(), \"\\n}\"]);\n      case \"public_field_definition\":\n        let accessibility = ast.firstNamedChild?.type === \"accessibility_modifier_member\" ? \"public\" : \"private\";\n        return s([accessibility, \" \", c2(n(\"name\")), \": \", c2(n(\"type\")), \";\\n\"]);\n      case \"impl_declaration\":\n        return s([`/* impl ${n(\"name\")?.text} */\n`]);\n      case \"lexical_declaration\":\n        return s([...children().map((i) => s([\"let \", i, \";\\n\"]))]);\n      case \"variable_declarator\":\n        let isRoot = ast?.parent?.parent.type === \"program\";\n        return s([\n          c2(n(\"name\")),\n          n(\"type\") ? s([\": \", c2(n(\"type\"))]) : \"\",\n          ...hasName(\"value\") ? [\n            \" = \",\n            ...isRoot ? [\n              'globalVarInit(\"' + cleanName(ctx.fileName) + '\", \"',\n              c2(n(\"name\")),\n              '\", () => { return ',\n              c2(n(\"value\")),\n              \"; }, () => { return \",\n              c2(n(\"name\")),\n              \"; })\"\n            ] : [c2(n(\"value\"))]\n          ] : [\" = \", generateDefaultForType(n(\"type\").text.replace(/^:/, \"\")).trim()]\n        ]);\n      case \"object_type\":\n        return s([\n          \"{\",\n          ...join(\n            ast.namedChildren.map((i) => {\n              return s([c2(i), \",\"]);\n            }),\n            \"\"\n          ),\n          \"}\"\n        ]);\n      case \"property_signature\":\n        return s([c2(n(\"name\")), \": \", c2(n(\"type\"))]);\n      case \"workgroup_member\":\n        let typeName = ast.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\";\n        if (typeName === \"atomic<uint>\" || typeName === \"atomic<int>\") {\n          if (hasName(\"value\")) {\n            ctx.report(ast, \"Atomic variables cannot have a default value\");\n          }\n          return s([\n            \"\\n// @workgroup\\n let \",\n            c2(n(\"name\")),\n            \": \",\n            c2(n(\"type\")),\n            \" = \",\n            generateDefaultForType(typeName),\n            \";\\n\"\n          ]);\n        }\n        if (hasName(\"value\")) {\n          return s([\n            \"\\n// @workgroup\\n let \",\n            c2(n(\"name\")),\n            \": \",\n            c2(n(\"type\")),\n            \" = \",\n            c2(n(\"value\")),\n            \";\\n\"\n          ]);\n        } else {\n          let t = c2(n(\"type\"));\n          return s([\n            \"\\n// @workgroup\\n let \",\n            c2(n(\"name\")),\n            \": \",\n            t,\n            \" = \",\n            generateDefaultForType(typeName),\n            \";\\n\"\n          ]);\n        }\n      case \"workgroup\":\n        return s([...children()]);\n      case \"async_block\":\n        return s([\n          \"/** Runs immediately but does not block when running async code inside (e.g. downloading textures from the gpu)*/(async () => \",\n          c2(n(\"body\")),\n          \")()\"\n        ]);\n      case \"shader\":\n        let encoder = new TextEncoder();\n        let u8a = encoder.encode(n(\"body\").text);\n        let key = sha256(u8a).map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n        if (hasName(\"type_arguments\")) {\n          let isComputeShader = n(\"type_arguments\")?.namedChildCount == 3;\n          if (isComputeShader) {\n            let templateArgsRaw = join(\n              n(`type_arguments`).namedChildren.map((nc) => {\n                let innerString = c2(nc).print();\n                return innerString.replace(/__\\.int\\((\\d+)\\)/g, \"$1\");\n              }),\n              \", \"\n            );\n            let templateArgs = join(\n              n(`type_arguments`).namedChildren.map((nc) => {\n                return c2(nc);\n              }),\n              \", \"\n            );\n            return new SourceNode(ast.startIndex, ast.endIndex, [\n              new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n              new SourceNode(ast.startIndex, ast.startIndex + \"shader\".length, `makeShader(`),\n              `\"${key}\", /**@shadeup=shader*/(__in: ShaderInput`,\n              `, __out: {}`,\n              `) => `,\n              c2(n(\"body\")),\n              `) as any, [`,\n              ...templateArgs,\n              `]) as shader<`,\n              ...templateArgsRaw,\n              \">\"\n            ]);\n          } else {\n            let arg1 = n(\"type_arguments\")?.firstNamedChild;\n            let arg2 = n(\"type_arguments\")?.lastNamedChild;\n            return new SourceNode(ast.startIndex, ast.endIndex, [\n              new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n              new SourceNode(ast.startIndex, ast.startIndex + \"shader\".length, `makeShader(`),\n              `\"${key}\", /**@shadeup=shader*/(__in:`,\n              c2(arg1),\n              ` & {vertexIndex: __.int}, __out: `,\n              c2(arg2),\n              `) => `,\n              c2(n(\"body\")),\n              `))`\n            ]);\n          }\n        } else {\n          return new SourceNode(ast.startIndex, ast.endIndex, [\n            new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n            new SourceNode(ast.startIndex, ast.startIndex + \"shader\".length, `makeShader(`),\n            `\"${key}\", /**@shadeup=shader*/(__in, __out) => `,\n            c2(n(\"body\")),\n            `))`\n          ]);\n        }\n      case \"assignment_expression\":\n        let left = n(\"left\");\n        if (left?.type === \"subscript_expression\") {\n          return s([\n            c2(left.childForFieldName(\"object\")),\n            \".__index_assign(\",\n            c2(left.childForFieldName(\"index\")),\n            \", \",\n            c2(n(\"right\")),\n            \")\"\n          ]);\n        } else if (left?.type == \"member_expression\") {\n          let prop2 = left.childForFieldName(\"property\");\n          let p2 = prop2.text ?? \"\";\n          if (p2.length > 0 && p2.length < 5) {\n            let isSwizzle = true;\n            for (let i = 0; i < p2.length; i++) {\n              let char = p2[i];\n              if (char !== \"x\" && char !== \"y\" && char !== \"z\" && char !== \"w\" && char !== \"r\" && char !== \"g\" && char !== \"b\" && char !== \"a\") {\n                isSwizzle = false;\n                break;\n              }\n            }\n            if (isSwizzle) {\n              return s([c2(n(\"left\"))]);\n            } else {\n              return s([c2(n(\"left\")), \" = \", c2(n(\"right\"))]);\n            }\n          } else {\n            return s([c2(n(\"left\")), \" = \", c2(n(\"right\"))]);\n          }\n        } else {\n          return s([c2(n(\"left\")), \" = \", c2(n(\"right\"))]);\n        }\n      case \"sequence_expression\":\n        return s([...join(children(), \", \")]);\n      case \"subscript_expression\":\n        return s([c2(n(\"object\")), \".__index(\", c2(n(\"index\")), \")\"]);\n      case \"empty_statement\":\n        return s([\"\"]);\n      case \"true\":\n        return s([\"true\"]);\n      case \"false\":\n        return s([\"false\"]);\n      case \"null\":\n        return s([\"null\"]);\n      case \"union_type\":\n        return s([...join(children(), \" | \")]);\n      case \"intersection_type\":\n        return s([...join(children(), \" & \")]);\n      case \"ERROR\":\n        ctx.report(ast, \"Syntax error\");\n        if (ast.firstNamedChild?.type == \"identifier\") {\n          return s([c2(ast.firstNamedChild), \".\"]);\n        }\n        return s([\"/* ERROR */ 0\"]);\n      default:\n        ctx.report(ast, \"Unsupported syntax\");\n        console.error(new Error(\"Bad AST \" + ast.type));\n        return s([\"/* ERROR */ 0\"]);\n    }\n  }\n  function compileToString(ctx, ast) {\n    let sn = compile(ctx, ast);\n    let ss = {\n      str: \"\",\n      indexMapping: []\n    };\n    sn.toString(ss);\n    return ss.str;\n  }\n  function isInShader(ast) {\n    if (ast.type === \"shader\") {\n      return true;\n    }\n    if (ast.parent) {\n      return isInShader(ast.parent);\n    }\n    return false;\n  }\n  var treeSitter = { exports: {} };\n  (function(module2, exports3) {\n    var Module = void 0 !== Module ? Module : {}, TreeSitter = function() {\n      var e, t = \"object\" == typeof window ? { currentScript: window.document.currentScript } : null;\n      class Parser2 {\n        constructor() {\n          this.initialize();\n        }\n        initialize() {\n          throw new Error(\"cannot construct a Parser before calling `init()`\");\n        }\n        static init(r) {\n          return e || (Module = Object.assign({}, Module, r), e = new Promise((e2) => {\n            var r2, n = {};\n            for (r2 in Module)\n              Module.hasOwnProperty(r2) && (n[r2] = Module[r2]);\n            var o, s, _ = [], a = \"./this.program\", i = function(e3, t2) {\n              throw t2;\n            }, u = false, l = false;\n            u = \"object\" == typeof window, l = \"function\" == typeof importScripts, o = \"object\" == typeof process && \"object\" == typeof process.versions && \"string\" == typeof process.versions.node, s = !u && !o && !l;\n            var d, c2, m, f, p, h = \"\";\n            o ? (h = l ? require$$0$1.dirname(h) + \"/\" : __dirname + \"/\", d = function(e3, t2) {\n              return f || (f = require$$1), p || (p = require$$0$1), e3 = p.normalize(e3), f.readFileSync(e3, t2 ? null : \"utf8\");\n            }, m = function(e3) {\n              var t2 = d(e3, true);\n              return t2.buffer || (t2 = new Uint8Array(t2)), k(t2.buffer), t2;\n            }, process.argv.length > 1 && (a = process.argv[1].replace(/\\\\/g, \"/\")), _ = process.argv.slice(2), module2.exports = Module, i = function(e3) {\n              process.exit(e3);\n            }, Module.inspect = function() {\n              return \"[Emscripten Module object]\";\n            }) : s ? (\"undefined\" != typeof read && (d = function(e3) {\n              return read(e3);\n            }), m = function(e3) {\n              var t2;\n              return \"function\" == typeof readbuffer ? new Uint8Array(readbuffer(e3)) : (k(\"object\" == typeof (t2 = read(e3, \"binary\"))), t2);\n            }, \"undefined\" != typeof scriptArgs ? _ = scriptArgs : void 0 !== arguments && (_ = arguments), \"function\" == typeof quit && (i = function(e3) {\n              quit(e3);\n            }), \"undefined\" != typeof print && (\"undefined\" == typeof console && (console = {}), console.log = print, console.warn = console.error = \"undefined\" != typeof printErr ? printErr : print)) : (u || l) && (l ? h = self.location.href : void 0 !== t && t.currentScript && (h = t.currentScript.src), h = 0 !== h.indexOf(\"blob:\") ? h.substr(0, h.lastIndexOf(\"/\") + 1) : \"\", d = function(e3) {\n              var t2 = new XMLHttpRequest();\n              return t2.open(\"GET\", e3, false), t2.send(null), t2.responseText;\n            }, l && (m = function(e3) {\n              var t2 = new XMLHttpRequest();\n              return t2.open(\"GET\", e3, false), t2.responseType = \"arraybuffer\", t2.send(null), new Uint8Array(t2.response);\n            }), c2 = function(e3, t2, r3) {\n              var n2 = new XMLHttpRequest();\n              n2.open(\"GET\", e3, true), n2.responseType = \"arraybuffer\", n2.onload = function() {\n                200 == n2.status || 0 == n2.status && n2.response ? t2(n2.response) : r3();\n              }, n2.onerror = r3, n2.send(null);\n            });\n            Module.print || console.log.bind(console);\n            var g2 = Module.printErr || console.warn.bind(console);\n            for (r2 in n)\n              n.hasOwnProperty(r2) && (Module[r2] = n[r2]);\n            n = null, Module.arguments && (_ = Module.arguments), Module.thisProgram && (a = Module.thisProgram), Module.quit && (i = Module.quit);\n            var w = 16;\n            var M, y = [];\n            function b(e3, t2) {\n              if (!M) {\n                M = /* @__PURE__ */ new WeakMap();\n                for (var r3 = 0; r3 < K.length; r3++) {\n                  var n2 = K.get(r3);\n                  n2 && M.set(n2, r3);\n                }\n              }\n              if (M.has(e3))\n                return M.get(e3);\n              var o2 = function() {\n                if (y.length)\n                  return y.pop();\n                try {\n                  K.grow(1);\n                } catch (e4) {\n                  if (!(e4 instanceof RangeError))\n                    throw e4;\n                  throw \"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\";\n                }\n                return K.length - 1;\n              }();\n              try {\n                K.set(o2, e3);\n              } catch (r4) {\n                if (!(r4 instanceof TypeError))\n                  throw r4;\n                var s2 = function(e4, t3) {\n                  if (\"function\" == typeof WebAssembly.Function) {\n                    for (var r5 = { i: \"i32\", j: \"i64\", f: \"f32\", d: \"f64\" }, n3 = { parameters: [], results: \"v\" == t3[0] ? [] : [r5[t3[0]]] }, o3 = 1; o3 < t3.length; ++o3)\n                      n3.parameters.push(r5[t3[o3]]);\n                    return new WebAssembly.Function(n3, e4);\n                  }\n                  var s3 = [1, 0, 1, 96], _2 = t3.slice(0, 1), a2 = t3.slice(1), i2 = { i: 127, j: 126, f: 125, d: 124 };\n                  for (s3.push(a2.length), o3 = 0; o3 < a2.length; ++o3)\n                    s3.push(i2[a2[o3]]);\n                  \"v\" == _2 ? s3.push(0) : s3 = s3.concat([1, i2[_2]]), s3[1] = s3.length - 2;\n                  var u2 = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(s3, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])), l2 = new WebAssembly.Module(u2);\n                  return new WebAssembly.Instance(l2, { e: { f: e4 } }).exports.f;\n                }(e3, t2);\n                K.set(o2, s2);\n              }\n              return M.set(e3, o2), o2;\n            }\n            var v, S = Module.dynamicLibraries || [];\n            Module.wasmBinary && (v = Module.wasmBinary);\n            var I, A = Module.noExitRuntime || true;\n            function x(e3, t2, r3, n2) {\n              switch (\"*\" === (r3 = r3 || \"i8\").charAt(r3.length - 1) && (r3 = \"i32\"), r3) {\n                case \"i1\":\n                case \"i8\":\n                  q[e3 >> 0] = t2;\n                  break;\n                case \"i16\":\n                  R[e3 >> 1] = t2;\n                  break;\n                case \"i32\":\n                  W[e3 >> 2] = t2;\n                  break;\n                case \"i64\":\n                  ie = [t2 >>> 0, (ae = t2, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[e3 >> 2] = ie[0], W[e3 + 4 >> 2] = ie[1];\n                  break;\n                case \"float\":\n                  L[e3 >> 2] = t2;\n                  break;\n                case \"double\":\n                  O[e3 >> 3] = t2;\n                  break;\n                default:\n                  se(\"invalid type for setValue: \" + r3);\n              }\n            }\n            function N(e3, t2, r3) {\n              switch (\"*\" === (t2 = t2 || \"i8\").charAt(t2.length - 1) && (t2 = \"i32\"), t2) {\n                case \"i1\":\n                case \"i8\":\n                  return q[e3 >> 0];\n                case \"i16\":\n                  return R[e3 >> 1];\n                case \"i32\":\n                case \"i64\":\n                  return W[e3 >> 2];\n                case \"float\":\n                  return L[e3 >> 2];\n                case \"double\":\n                  return O[e3 >> 3];\n                default:\n                  se(\"invalid type for getValue: \" + t2);\n              }\n              return null;\n            }\n            \"object\" != typeof WebAssembly && se(\"no native wasm support detected\");\n            var P = false;\n            function k(e3, t2) {\n              e3 || se(\"Assertion failed: \" + t2);\n            }\n            var F = 1;\n            var C, q, T, R, W, L, O, j = \"undefined\" != typeof TextDecoder ? new TextDecoder(\"utf8\") : void 0;\n            function $(e3, t2, r3) {\n              for (var n2 = t2 + r3, o2 = t2; e3[o2] && !(o2 >= n2); )\n                ++o2;\n              if (o2 - t2 > 16 && e3.subarray && j)\n                return j.decode(e3.subarray(t2, o2));\n              for (var s2 = \"\"; t2 < o2; ) {\n                var _2 = e3[t2++];\n                if (128 & _2) {\n                  var a2 = 63 & e3[t2++];\n                  if (192 != (224 & _2)) {\n                    var i2 = 63 & e3[t2++];\n                    if ((_2 = 224 == (240 & _2) ? (15 & _2) << 12 | a2 << 6 | i2 : (7 & _2) << 18 | a2 << 12 | i2 << 6 | 63 & e3[t2++]) < 65536)\n                      s2 += String.fromCharCode(_2);\n                    else {\n                      var u2 = _2 - 65536;\n                      s2 += String.fromCharCode(55296 | u2 >> 10, 56320 | 1023 & u2);\n                    }\n                  } else\n                    s2 += String.fromCharCode((31 & _2) << 6 | a2);\n                } else\n                  s2 += String.fromCharCode(_2);\n              }\n              return s2;\n            }\n            function Z(e3, t2) {\n              return e3 ? $(T, e3, t2) : \"\";\n            }\n            function D(e3, t2, r3, n2) {\n              if (!(n2 > 0))\n                return 0;\n              for (var o2 = r3, s2 = r3 + n2 - 1, _2 = 0; _2 < e3.length; ++_2) {\n                var a2 = e3.charCodeAt(_2);\n                if (a2 >= 55296 && a2 <= 57343)\n                  a2 = 65536 + ((1023 & a2) << 10) | 1023 & e3.charCodeAt(++_2);\n                if (a2 <= 127) {\n                  if (r3 >= s2)\n                    break;\n                  t2[r3++] = a2;\n                } else if (a2 <= 2047) {\n                  if (r3 + 1 >= s2)\n                    break;\n                  t2[r3++] = 192 | a2 >> 6, t2[r3++] = 128 | 63 & a2;\n                } else if (a2 <= 65535) {\n                  if (r3 + 2 >= s2)\n                    break;\n                  t2[r3++] = 224 | a2 >> 12, t2[r3++] = 128 | a2 >> 6 & 63, t2[r3++] = 128 | 63 & a2;\n                } else {\n                  if (r3 + 3 >= s2)\n                    break;\n                  t2[r3++] = 240 | a2 >> 18, t2[r3++] = 128 | a2 >> 12 & 63, t2[r3++] = 128 | a2 >> 6 & 63, t2[r3++] = 128 | 63 & a2;\n                }\n              }\n              return t2[r3] = 0, r3 - o2;\n            }\n            function z(e3, t2, r3) {\n              return D(e3, T, t2, r3);\n            }\n            function U(e3) {\n              for (var t2 = 0, r3 = 0; r3 < e3.length; ++r3) {\n                var n2 = e3.charCodeAt(r3);\n                n2 >= 55296 && n2 <= 57343 && (n2 = 65536 + ((1023 & n2) << 10) | 1023 & e3.charCodeAt(++r3)), n2 <= 127 ? ++t2 : t2 += n2 <= 2047 ? 2 : n2 <= 65535 ? 3 : 4;\n              }\n              return t2;\n            }\n            function H(e3) {\n              var t2 = U(e3) + 1, r3 = Be(t2);\n              return D(e3, q, r3, t2), r3;\n            }\n            function G(e3) {\n              C = e3, Module.HEAP8 = q = new Int8Array(e3), Module.HEAP16 = R = new Int16Array(e3), Module.HEAP32 = W = new Int32Array(e3), Module.HEAPU8 = T = new Uint8Array(e3), Module.HEAPU16 = new Uint16Array(e3), Module.HEAPU32 = new Uint32Array(e3), Module.HEAPF32 = L = new Float32Array(e3), Module.HEAPF64 = O = new Float64Array(e3);\n            }\n            var B = Module.INITIAL_MEMORY || 33554432;\n            (I = Module.wasmMemory ? Module.wasmMemory : new WebAssembly.Memory({ initial: B / 65536, maximum: 32768 })) && (C = I.buffer), B = C.byteLength, G(C);\n            var K = new WebAssembly.Table({ initial: 20, element: \"anyfunc\" }), V = [], X = [], Q = [], J = [], Y = false;\n            var ee = 0, re = null;\n            function ne(e3) {\n              ee++, Module.monitorRunDependencies && Module.monitorRunDependencies(ee);\n            }\n            function oe(e3) {\n              if (ee--, Module.monitorRunDependencies && Module.monitorRunDependencies(ee), 0 == ee && re) {\n                var t2 = re;\n                re = null, t2();\n              }\n            }\n            function se(e3) {\n              throw Module.onAbort && Module.onAbort(e3), g2(e3 += \"\"), P = true, e3 = \"abort(\" + e3 + \"). Build with -s ASSERTIONS=1 for more info.\", new WebAssembly.RuntimeError(e3);\n            }\n            Module.preloadedImages = {}, Module.preloadedAudios = {}, Module.preloadedWasm = {};\n            var _e, ae, ie, ue = \"data:application/octet-stream;base64,\";\n            function le(e3) {\n              return e3.startsWith(ue);\n            }\n            function de(e3) {\n              return e3.startsWith(\"file://\");\n            }\n            function ce(e3) {\n              try {\n                if (e3 == _e && v)\n                  return new Uint8Array(v);\n                if (m)\n                  return m(e3);\n                throw \"both async and sync fetching of the wasm failed\";\n              } catch (e4) {\n                se(e4);\n              }\n            }\n            le(_e = \"tree-sitter.wasm\") || (_e = function(e3) {\n              return Module.locateFile ? Module.locateFile(e3, h) : h + e3;\n            }(_e));\n            var me = {}, fe = { get: function(e3, t2) {\n              return me[t2] || (me[t2] = new WebAssembly.Global({ value: \"i32\", mutable: true })), me[t2];\n            } };\n            function pe(e3) {\n              for (; e3.length > 0; ) {\n                var t2 = e3.shift();\n                if (\"function\" != typeof t2) {\n                  var r3 = t2.func;\n                  \"number\" == typeof r3 ? void 0 === t2.arg ? K.get(r3)() : K.get(r3)(t2.arg) : r3(void 0 === t2.arg ? null : t2.arg);\n                } else\n                  t2(Module);\n              }\n            }\n            function he(e3) {\n              var t2 = 0;\n              function r3() {\n                for (var r4 = 0, n3 = 1; ; ) {\n                  var o3 = e3[t2++];\n                  if (r4 += (127 & o3) * n3, n3 *= 128, !(128 & o3))\n                    break;\n                }\n                return r4;\n              }\n              if (e3 instanceof WebAssembly.Module) {\n                var n2 = WebAssembly.Module.customSections(e3, \"dylink\");\n                k(0 != n2.length, \"need dylink section\"), e3 = new Int8Array(n2[0]);\n              } else {\n                k(1836278016 == new Uint32Array(new Uint8Array(e3.subarray(0, 24)).buffer)[0], \"need to see wasm magic number\"), k(0 === e3[8], \"need the dylink section to be first\"), t2 = 9, r3(), k(6 === e3[t2]), k(e3[++t2] === \"d\".charCodeAt(0)), k(e3[++t2] === \"y\".charCodeAt(0)), k(e3[++t2] === \"l\".charCodeAt(0)), k(e3[++t2] === \"i\".charCodeAt(0)), k(e3[++t2] === \"n\".charCodeAt(0)), k(e3[++t2] === \"k\".charCodeAt(0)), t2++;\n              }\n              var o2 = {};\n              o2.memorySize = r3(), o2.memoryAlign = r3(), o2.tableSize = r3(), o2.tableAlign = r3();\n              var s2 = r3();\n              o2.neededDynlibs = [];\n              for (var _2 = 0; _2 < s2; ++_2) {\n                var a2 = r3(), i2 = e3.subarray(t2, t2 + a2);\n                t2 += a2;\n                var u2 = $(i2, 0);\n                o2.neededDynlibs.push(u2);\n              }\n              return o2;\n            }\n            var ge = 0;\n            function we() {\n              return A || ge > 0;\n            }\n            function Me(e3) {\n              return 0 == e3.indexOf(\"dynCall_\") || [\"stackAlloc\", \"stackSave\", \"stackRestore\"].includes(e3) ? e3 : \"_\" + e3;\n            }\n            function ye(e3, t2) {\n              for (var r3 in e3)\n                if (e3.hasOwnProperty(r3)) {\n                  De.hasOwnProperty(r3) || (De[r3] = e3[r3]);\n                  var n2 = Me(r3);\n                  Module.hasOwnProperty(n2) || (Module[n2] = e3[r3]);\n                }\n            }\n            var be = { nextHandle: 1, loadedLibs: {}, loadedLibNames: {} };\n            function ve(e3, t2, r3) {\n              return e3.includes(\"j\") ? function(e4, t3, r4) {\n                var n2 = Module[\"dynCall_\" + e4];\n                return r4 && r4.length ? n2.apply(null, [t3].concat(r4)) : n2.call(null, t3);\n              }(e3, t2, r3) : K.get(t2).apply(null, r3);\n            }\n            var Ee = 5251072;\n            function Se(e3) {\n              return [\"__cpp_exception\", \"__wasm_apply_data_relocs\", \"__dso_handle\", \"__set_stack_limits\"].includes(e3);\n            }\n            function Ie(e3, t2) {\n              var r3 = {};\n              for (var n2 in e3) {\n                var o2 = e3[n2];\n                \"object\" == typeof o2 && (o2 = o2.value), \"number\" == typeof o2 && (o2 += t2), r3[n2] = o2;\n              }\n              return function(e4) {\n                for (var t3 in e4)\n                  if (!Se(t3)) {\n                    var r4 = false, n3 = e4[t3];\n                    t3.startsWith(\"orig$\") && (t3 = t3.split(\"$\")[1], r4 = true), me[t3] || (me[t3] = new WebAssembly.Global({ value: \"i32\", mutable: true })), (r4 || 0 == me[t3].value) && (\"function\" == typeof n3 ? me[t3].value = b(n3) : \"number\" == typeof n3 ? me[t3].value = n3 : g2(\"unhandled export type for `\" + t3 + \"`: \" + typeof n3));\n                  }\n              }(r3), r3;\n            }\n            function Ae(e3, t2) {\n              var r3, n2;\n              return t2 && (r3 = De[\"orig$\" + e3]), r3 || (r3 = De[e3]), r3 || (r3 = Module[Me(e3)]), !r3 && e3.startsWith(\"invoke_\") && (n2 = e3.split(\"_\")[1], r3 = function() {\n                var e4 = He();\n                try {\n                  return ve(n2, arguments[0], Array.prototype.slice.call(arguments, 1));\n                } catch (t3) {\n                  if (Ge(e4), t3 !== t3 + 0 && \"longjmp\" !== t3)\n                    throw t3;\n                  Ke(1, 0);\n                }\n              }), r3;\n            }\n            function xe(e3, t2) {\n              var r3 = he(e3);\n              function n2() {\n                var n3 = Math.pow(2, r3.memoryAlign);\n                n3 = Math.max(n3, w);\n                var o2, s2, _2, a2 = (o2 = function(e4) {\n                  if (Y)\n                    return ze(e4);\n                  var t3 = Ee, r4 = t3 + e4 + 15 & -16;\n                  return Ee = r4, me.__heap_base.value = r4, t3;\n                }(r3.memorySize + n3), (s2 = n3) || (s2 = w), Math.ceil(o2 / s2) * s2), i2 = K.length;\n                K.grow(r3.tableSize);\n                for (var u2 = a2; u2 < a2 + r3.memorySize; u2++)\n                  q[u2] = 0;\n                for (u2 = i2; u2 < i2 + r3.tableSize; u2++)\n                  K.set(u2, null);\n                var l2 = new Proxy({}, { get: function(e4, t3) {\n                  switch (t3) {\n                    case \"__memory_base\":\n                      return a2;\n                    case \"__table_base\":\n                      return i2;\n                  }\n                  if (t3 in De)\n                    return De[t3];\n                  var r4;\n                  t3 in e4 || (e4[t3] = function() {\n                    return r4 || (r4 = function(e5) {\n                      var t4 = Ae(e5, false);\n                      return t4 || (t4 = _2[e5]), t4;\n                    }(t3)), r4.apply(null, arguments);\n                  });\n                  return e4[t3];\n                } }), d2 = { \"GOT.mem\": new Proxy({}, fe), \"GOT.func\": new Proxy({}, fe), env: l2, wasi_snapshot_preview1: l2 };\n                function c3(e4) {\n                  for (var n4 = 0; n4 < r3.tableSize; n4++) {\n                    var o3 = K.get(i2 + n4);\n                    o3 && M.set(o3, i2 + n4);\n                  }\n                  _2 = Ie(e4.exports, a2), t2.allowUndefined || Pe();\n                  var s3 = _2.__wasm_call_ctors;\n                  return s3 || (s3 = _2.__post_instantiate), s3 && (Y ? s3() : X.push(s3)), _2;\n                }\n                if (t2.loadAsync) {\n                  if (e3 instanceof WebAssembly.Module) {\n                    var m2 = new WebAssembly.Instance(e3, d2);\n                    return Promise.resolve(c3(m2));\n                  }\n                  return WebAssembly.instantiate(e3, d2).then(function(e4) {\n                    return c3(e4.instance);\n                  });\n                }\n                var f2 = e3 instanceof WebAssembly.Module ? e3 : new WebAssembly.Module(e3);\n                return c3(m2 = new WebAssembly.Instance(f2, d2));\n              }\n              return t2.loadAsync ? r3.neededDynlibs.reduce(function(e4, r4) {\n                return e4.then(function() {\n                  return Ne(r4, t2);\n                });\n              }, Promise.resolve()).then(function() {\n                return n2();\n              }) : (r3.neededDynlibs.forEach(function(e4) {\n                Ne(e4, t2);\n              }), n2());\n            }\n            function Ne(e3, t2) {\n              \"__main__\" != e3 || be.loadedLibNames[e3] || (be.loadedLibs[-1] = { refcount: 1 / 0, name: \"__main__\", module: Module.asm, global: true }, be.loadedLibNames.__main__ = -1), t2 = t2 || { global: true, nodelete: true };\n              var r3, n2 = be.loadedLibNames[e3];\n              if (n2)\n                return r3 = be.loadedLibs[n2], t2.global && !r3.global && (r3.global = true, \"loading\" !== r3.module && ye(r3.module)), t2.nodelete && r3.refcount !== 1 / 0 && (r3.refcount = 1 / 0), r3.refcount++, t2.loadAsync ? Promise.resolve(n2) : n2;\n              function o2(e4) {\n                if (t2.fs) {\n                  var r4 = t2.fs.readFile(e4, { encoding: \"binary\" });\n                  return r4 instanceof Uint8Array || (r4 = new Uint8Array(r4)), t2.loadAsync ? Promise.resolve(r4) : r4;\n                }\n                return t2.loadAsync ? (n3 = e4, fetch(n3, { credentials: \"same-origin\" }).then(function(e5) {\n                  if (!e5.ok)\n                    throw \"failed to load binary file at '\" + n3 + \"'\";\n                  return e5.arrayBuffer();\n                }).then(function(e5) {\n                  return new Uint8Array(e5);\n                })) : m(e4);\n                var n3;\n              }\n              function s2() {\n                if (void 0 !== Module.preloadedWasm && void 0 !== Module.preloadedWasm[e3]) {\n                  var r4 = Module.preloadedWasm[e3];\n                  return t2.loadAsync ? Promise.resolve(r4) : r4;\n                }\n                return t2.loadAsync ? o2(e3).then(function(e4) {\n                  return xe(e4, t2);\n                }) : xe(o2(e3), t2);\n              }\n              function _2(e4) {\n                r3.global && ye(e4), r3.module = e4;\n              }\n              return n2 = be.nextHandle++, r3 = { refcount: t2.nodelete ? 1 / 0 : 1, name: e3, module: \"loading\", global: t2.global }, be.loadedLibNames[e3] = n2, be.loadedLibs[n2] = r3, t2.loadAsync ? s2().then(function(e4) {\n                return _2(e4), n2;\n              }) : (_2(s2()), n2);\n            }\n            function Pe() {\n              for (var e3 in me)\n                if (0 == me[e3].value) {\n                  var t2 = Ae(e3, true);\n                  \"function\" == typeof t2 ? me[e3].value = b(t2, t2.sig) : \"number\" == typeof t2 ? me[e3].value = t2 : k(false, \"bad export type for `\" + e3 + \"`: \" + typeof t2);\n                }\n            }\n            Module.___heap_base = Ee;\n            var ke, Fe = new WebAssembly.Global({ value: \"i32\", mutable: true }, 5251072);\n            function Ce() {\n              se();\n            }\n            Module._abort = Ce, Ce.sig = \"v\", ke = o ? function() {\n              var e3 = process.hrtime();\n              return 1e3 * e3[0] + e3[1] / 1e6;\n            } : \"undefined\" != typeof dateNow ? dateNow : function() {\n              return performance.now();\n            };\n            var qe = true;\n            function Te(e3, t2) {\n              var r3, n2;\n              if (0 === e3)\n                r3 = Date.now();\n              else {\n                if (1 !== e3 && 4 !== e3 || !qe)\n                  return n2 = 28, W[Ue() >> 2] = n2, -1;\n                r3 = ke();\n              }\n              return W[t2 >> 2] = r3 / 1e3 | 0, W[t2 + 4 >> 2] = r3 % 1e3 * 1e3 * 1e3 | 0, 0;\n            }\n            function Re(e3) {\n              try {\n                return I.grow(e3 - C.byteLength + 65535 >>> 16), G(I.buffer), 1;\n              } catch (e4) {\n              }\n            }\n            function We(e3) {\n              Je(e3);\n            }\n            Te.sig = \"iii\", We.sig = \"vi\";\n            var Le = { mappings: {}, DEFAULT_POLLMASK: 5, umask: 511, calculateAt: function(e3, t2, r3) {\n              if (\"/\" === t2[0])\n                return t2;\n              var n2;\n              if (-100 === e3)\n                n2 = FS.cwd();\n              else {\n                var o2 = FS.getStream(e3);\n                if (!o2)\n                  throw new FS.ErrnoError(8);\n                n2 = o2.path;\n              }\n              if (0 == t2.length) {\n                if (!r3)\n                  throw new FS.ErrnoError(44);\n                return n2;\n              }\n              return PATH.join2(n2, t2);\n            }, doStat: function(e3, t2, r3) {\n              try {\n                var n2 = e3(t2);\n              } catch (e4) {\n                if (e4 && e4.node && PATH.normalize(t2) !== PATH.normalize(FS.getPath(e4.node)))\n                  return -54;\n                throw e4;\n              }\n              return W[r3 >> 2] = n2.dev, W[r3 + 4 >> 2] = 0, W[r3 + 8 >> 2] = n2.ino, W[r3 + 12 >> 2] = n2.mode, W[r3 + 16 >> 2] = n2.nlink, W[r3 + 20 >> 2] = n2.uid, W[r3 + 24 >> 2] = n2.gid, W[r3 + 28 >> 2] = n2.rdev, W[r3 + 32 >> 2] = 0, ie = [n2.size >>> 0, (ae = n2.size, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[r3 + 40 >> 2] = ie[0], W[r3 + 44 >> 2] = ie[1], W[r3 + 48 >> 2] = 4096, W[r3 + 52 >> 2] = n2.blocks, W[r3 + 56 >> 2] = n2.atime.getTime() / 1e3 | 0, W[r3 + 60 >> 2] = 0, W[r3 + 64 >> 2] = n2.mtime.getTime() / 1e3 | 0, W[r3 + 68 >> 2] = 0, W[r3 + 72 >> 2] = n2.ctime.getTime() / 1e3 | 0, W[r3 + 76 >> 2] = 0, ie = [n2.ino >>> 0, (ae = n2.ino, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[r3 + 80 >> 2] = ie[0], W[r3 + 84 >> 2] = ie[1], 0;\n            }, doMsync: function(e3, t2, r3, n2, o2) {\n              var s2 = T.slice(e3, e3 + r3);\n              FS.msync(t2, s2, o2, r3, n2);\n            }, doMkdir: function(e3, t2) {\n              return \"/\" === (e3 = PATH.normalize(e3))[e3.length - 1] && (e3 = e3.substr(0, e3.length - 1)), FS.mkdir(e3, t2, 0), 0;\n            }, doMknod: function(e3, t2, r3) {\n              switch (61440 & t2) {\n                case 32768:\n                case 8192:\n                case 24576:\n                case 4096:\n                case 49152:\n                  break;\n                default:\n                  return -28;\n              }\n              return FS.mknod(e3, t2, r3), 0;\n            }, doReadlink: function(e3, t2, r3) {\n              if (r3 <= 0)\n                return -28;\n              var n2 = FS.readlink(e3), o2 = Math.min(r3, U(n2)), s2 = q[t2 + o2];\n              return z(n2, t2, r3 + 1), q[t2 + o2] = s2, o2;\n            }, doAccess: function(e3, t2) {\n              if (-8 & t2)\n                return -28;\n              var r3;\n              if (!(r3 = FS.lookupPath(e3, { follow: true }).node))\n                return -44;\n              var n2 = \"\";\n              return 4 & t2 && (n2 += \"r\"), 2 & t2 && (n2 += \"w\"), 1 & t2 && (n2 += \"x\"), n2 && FS.nodePermissions(r3, n2) ? -2 : 0;\n            }, doDup: function(e3, t2, r3) {\n              var n2 = FS.getStream(r3);\n              return n2 && FS.close(n2), FS.open(e3, t2, 0, r3, r3).fd;\n            }, doReadv: function(e3, t2, r3, n2) {\n              for (var o2 = 0, s2 = 0; s2 < r3; s2++) {\n                var _2 = W[t2 + 8 * s2 >> 2], a2 = W[t2 + (8 * s2 + 4) >> 2], i2 = FS.read(e3, q, _2, a2, n2);\n                if (i2 < 0)\n                  return -1;\n                if (o2 += i2, i2 < a2)\n                  break;\n              }\n              return o2;\n            }, doWritev: function(e3, t2, r3, n2) {\n              for (var o2 = 0, s2 = 0; s2 < r3; s2++) {\n                var _2 = W[t2 + 8 * s2 >> 2], a2 = W[t2 + (8 * s2 + 4) >> 2], i2 = FS.write(e3, q, _2, a2, n2);\n                if (i2 < 0)\n                  return -1;\n                o2 += i2;\n              }\n              return o2;\n            }, varargs: void 0, get: function() {\n              return Le.varargs += 4, W[Le.varargs - 4 >> 2];\n            }, getStr: function(e3) {\n              return Z(e3);\n            }, getStreamFromFD: function(e3) {\n              var t2 = FS.getStream(e3);\n              if (!t2)\n                throw new FS.ErrnoError(8);\n              return t2;\n            }, get64: function(e3, t2) {\n              return e3;\n            } };\n            function Oe(e3) {\n              try {\n                var t2 = Le.getStreamFromFD(e3);\n                return FS.close(t2), 0;\n              } catch (e4) {\n                return \"undefined\" != typeof FS && e4 instanceof FS.ErrnoError || se(e4), e4.errno;\n              }\n            }\n            function je(e3, t2, r3, n2) {\n              try {\n                var o2 = Le.getStreamFromFD(e3), s2 = Le.doWritev(o2, t2, r3);\n                return W[n2 >> 2] = s2, 0;\n              } catch (e4) {\n                return \"undefined\" != typeof FS && e4 instanceof FS.ErrnoError || se(e4), e4.errno;\n              }\n            }\n            function $e(e3) {\n            }\n            Oe.sig = \"ii\", je.sig = \"iiiii\", $e.sig = \"vi\";\n            var Ze, De = { __heap_base: Ee, __indirect_function_table: K, __memory_base: 1024, __stack_pointer: Fe, __table_base: 1, abort: Ce, clock_gettime: Te, emscripten_memcpy_big: function(e3, t2, r3) {\n              T.copyWithin(e3, t2, t2 + r3);\n            }, emscripten_resize_heap: function(e3) {\n              var t2, r3, n2 = T.length;\n              if ((e3 >>>= 0) > 2147483648)\n                return false;\n              for (var o2 = 1; o2 <= 4; o2 *= 2) {\n                var s2 = n2 * (1 + 0.2 / o2);\n                if (s2 = Math.min(s2, e3 + 100663296), Re(Math.min(2147483648, ((t2 = Math.max(e3, s2)) % (r3 = 65536) > 0 && (t2 += r3 - t2 % r3), t2))))\n                  return true;\n              }\n              return false;\n            }, exit: We, fd_close: Oe, fd_seek: function(e3, t2, r3, n2, o2) {\n              try {\n                var s2 = Le.getStreamFromFD(e3), _2 = 4294967296 * r3 + (t2 >>> 0);\n                return _2 <= -9007199254740992 || _2 >= 9007199254740992 ? -61 : (FS.llseek(s2, _2, n2), ie = [s2.position >>> 0, (ae = s2.position, +Math.abs(ae) >= 1 ? ae > 0 ? (0 | Math.min(+Math.floor(ae / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ae - +(~~ae >>> 0)) / 4294967296) >>> 0 : 0)], W[o2 >> 2] = ie[0], W[o2 + 4 >> 2] = ie[1], s2.getdents && 0 === _2 && 0 === n2 && (s2.getdents = null), 0);\n              } catch (e4) {\n                return \"undefined\" != typeof FS && e4 instanceof FS.ErrnoError || se(e4), e4.errno;\n              }\n            }, fd_write: je, memory: I, setTempRet0: $e, tree_sitter_log_callback: function(e3, t2) {\n              if (pt) {\n                const r3 = Z(t2);\n                pt(r3, 0 !== e3);\n              }\n            }, tree_sitter_parse_callback: function(e3, t2, r3, n2, o2) {\n              var s2 = ft(t2, { row: r3, column: n2 });\n              \"string\" == typeof s2 ? (x(o2, s2.length, \"i32\"), function(e4, t3, r4) {\n                if (void 0 === r4 && (r4 = 2147483647), r4 < 2)\n                  return 0;\n                for (var n3 = (r4 -= 2) < 2 * e4.length ? r4 / 2 : e4.length, o3 = 0; o3 < n3; ++o3) {\n                  var s3 = e4.charCodeAt(o3);\n                  R[t3 >> 1] = s3, t3 += 2;\n                }\n                R[t3 >> 1] = 0;\n              }(s2, e3, 10240)) : x(o2, 0, \"i32\");\n            } }, ze = (function() {\n              var e3 = { env: De, wasi_snapshot_preview1: De, \"GOT.mem\": new Proxy(De, fe), \"GOT.func\": new Proxy(De, fe) };\n              function t2(e4, t3) {\n                var r4 = e4.exports;\n                r4 = Ie(r4, 1024), Module.asm = r4;\n                var n3, o2 = he(t3);\n                o2.neededDynlibs && (S = o2.neededDynlibs.concat(S)), ye(r4), n3 = Module.asm.__wasm_call_ctors, X.unshift(n3), oe();\n              }\n              function r3(e4) {\n                t2(e4.instance, e4.module);\n              }\n              function n2(t3) {\n                return function() {\n                  if (!v && (u || l)) {\n                    if (\"function\" == typeof fetch && !de(_e))\n                      return fetch(_e, { credentials: \"same-origin\" }).then(function(e4) {\n                        if (!e4.ok)\n                          throw \"failed to load wasm binary file at '\" + _e + \"'\";\n                        return e4.arrayBuffer();\n                      }).catch(function() {\n                        return ce(_e);\n                      });\n                    if (c2)\n                      return new Promise(function(e4, t4) {\n                        c2(_e, function(t5) {\n                          e4(new Uint8Array(t5));\n                        }, t4);\n                      });\n                  }\n                  return Promise.resolve().then(function() {\n                    return ce(_e);\n                  });\n                }().then(function(t4) {\n                  return WebAssembly.instantiate(t4, e3);\n                }).then(t3, function(e4) {\n                  g2(\"failed to asynchronously prepare wasm: \" + e4), se(e4);\n                });\n              }\n              if (ne(), Module.instantiateWasm)\n                try {\n                  return Module.instantiateWasm(e3, t2);\n                } catch (e4) {\n                  return g2(\"Module.instantiateWasm callback failed with error: \" + e4), false;\n                }\n              v || \"function\" != typeof WebAssembly.instantiateStreaming || le(_e) || de(_e) || \"function\" != typeof fetch ? n2(r3) : fetch(_e, { credentials: \"same-origin\" }).then(function(t3) {\n                return WebAssembly.instantiateStreaming(t3, e3).then(r3, function(e4) {\n                  return g2(\"wasm streaming compile failed: \" + e4), g2(\"falling back to ArrayBuffer instantiation\"), n2(r3);\n                });\n              });\n            }(), Module.___wasm_call_ctors = function() {\n              return (Module.___wasm_call_ctors = Module.asm.__wasm_call_ctors).apply(null, arguments);\n            }, Module._malloc = function() {\n              return (ze = Module._malloc = Module.asm.malloc).apply(null, arguments);\n            }), Ue = (Module._calloc = function() {\n              return (Module._calloc = Module.asm.calloc).apply(null, arguments);\n            }, Module._realloc = function() {\n              return (Module._realloc = Module.asm.realloc).apply(null, arguments);\n            }, Module._free = function() {\n              return (Module._free = Module.asm.free).apply(null, arguments);\n            }, Module._ts_language_symbol_count = function() {\n              return (Module._ts_language_symbol_count = Module.asm.ts_language_symbol_count).apply(null, arguments);\n            }, Module._ts_language_version = function() {\n              return (Module._ts_language_version = Module.asm.ts_language_version).apply(null, arguments);\n            }, Module._ts_language_field_count = function() {\n              return (Module._ts_language_field_count = Module.asm.ts_language_field_count).apply(null, arguments);\n            }, Module._ts_language_symbol_name = function() {\n              return (Module._ts_language_symbol_name = Module.asm.ts_language_symbol_name).apply(null, arguments);\n            }, Module._ts_language_symbol_for_name = function() {\n              return (Module._ts_language_symbol_for_name = Module.asm.ts_language_symbol_for_name).apply(null, arguments);\n            }, Module._ts_language_symbol_type = function() {\n              return (Module._ts_language_symbol_type = Module.asm.ts_language_symbol_type).apply(null, arguments);\n            }, Module._ts_language_field_name_for_id = function() {\n              return (Module._ts_language_field_name_for_id = Module.asm.ts_language_field_name_for_id).apply(null, arguments);\n            }, Module._memcpy = function() {\n              return (Module._memcpy = Module.asm.memcpy).apply(null, arguments);\n            }, Module._ts_parser_delete = function() {\n              return (Module._ts_parser_delete = Module.asm.ts_parser_delete).apply(null, arguments);\n            }, Module._ts_parser_reset = function() {\n              return (Module._ts_parser_reset = Module.asm.ts_parser_reset).apply(null, arguments);\n            }, Module._ts_parser_set_language = function() {\n              return (Module._ts_parser_set_language = Module.asm.ts_parser_set_language).apply(null, arguments);\n            }, Module._ts_parser_timeout_micros = function() {\n              return (Module._ts_parser_timeout_micros = Module.asm.ts_parser_timeout_micros).apply(null, arguments);\n            }, Module._ts_parser_set_timeout_micros = function() {\n              return (Module._ts_parser_set_timeout_micros = Module.asm.ts_parser_set_timeout_micros).apply(null, arguments);\n            }, Module._memmove = function() {\n              return (Module._memmove = Module.asm.memmove).apply(null, arguments);\n            }, Module._memcmp = function() {\n              return (Module._memcmp = Module.asm.memcmp).apply(null, arguments);\n            }, Module._ts_query_new = function() {\n              return (Module._ts_query_new = Module.asm.ts_query_new).apply(null, arguments);\n            }, Module._ts_query_delete = function() {\n              return (Module._ts_query_delete = Module.asm.ts_query_delete).apply(null, arguments);\n            }, Module._iswspace = function() {\n              return (Module._iswspace = Module.asm.iswspace).apply(null, arguments);\n            }, Module._iswalnum = function() {\n              return (Module._iswalnum = Module.asm.iswalnum).apply(null, arguments);\n            }, Module._ts_query_pattern_count = function() {\n              return (Module._ts_query_pattern_count = Module.asm.ts_query_pattern_count).apply(null, arguments);\n            }, Module._ts_query_capture_count = function() {\n              return (Module._ts_query_capture_count = Module.asm.ts_query_capture_count).apply(null, arguments);\n            }, Module._ts_query_string_count = function() {\n              return (Module._ts_query_string_count = Module.asm.ts_query_string_count).apply(null, arguments);\n            }, Module._ts_query_capture_name_for_id = function() {\n              return (Module._ts_query_capture_name_for_id = Module.asm.ts_query_capture_name_for_id).apply(null, arguments);\n            }, Module._ts_query_string_value_for_id = function() {\n              return (Module._ts_query_string_value_for_id = Module.asm.ts_query_string_value_for_id).apply(null, arguments);\n            }, Module._ts_query_predicates_for_pattern = function() {\n              return (Module._ts_query_predicates_for_pattern = Module.asm.ts_query_predicates_for_pattern).apply(null, arguments);\n            }, Module._ts_tree_copy = function() {\n              return (Module._ts_tree_copy = Module.asm.ts_tree_copy).apply(null, arguments);\n            }, Module._ts_tree_delete = function() {\n              return (Module._ts_tree_delete = Module.asm.ts_tree_delete).apply(null, arguments);\n            }, Module._ts_init = function() {\n              return (Module._ts_init = Module.asm.ts_init).apply(null, arguments);\n            }, Module._ts_parser_new_wasm = function() {\n              return (Module._ts_parser_new_wasm = Module.asm.ts_parser_new_wasm).apply(null, arguments);\n            }, Module._ts_parser_enable_logger_wasm = function() {\n              return (Module._ts_parser_enable_logger_wasm = Module.asm.ts_parser_enable_logger_wasm).apply(null, arguments);\n            }, Module._ts_parser_parse_wasm = function() {\n              return (Module._ts_parser_parse_wasm = Module.asm.ts_parser_parse_wasm).apply(null, arguments);\n            }, Module._ts_language_type_is_named_wasm = function() {\n              return (Module._ts_language_type_is_named_wasm = Module.asm.ts_language_type_is_named_wasm).apply(null, arguments);\n            }, Module._ts_language_type_is_visible_wasm = function() {\n              return (Module._ts_language_type_is_visible_wasm = Module.asm.ts_language_type_is_visible_wasm).apply(null, arguments);\n            }, Module._ts_tree_root_node_wasm = function() {\n              return (Module._ts_tree_root_node_wasm = Module.asm.ts_tree_root_node_wasm).apply(null, arguments);\n            }, Module._ts_tree_edit_wasm = function() {\n              return (Module._ts_tree_edit_wasm = Module.asm.ts_tree_edit_wasm).apply(null, arguments);\n            }, Module._ts_tree_get_changed_ranges_wasm = function() {\n              return (Module._ts_tree_get_changed_ranges_wasm = Module.asm.ts_tree_get_changed_ranges_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_new_wasm = function() {\n              return (Module._ts_tree_cursor_new_wasm = Module.asm.ts_tree_cursor_new_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_delete_wasm = function() {\n              return (Module._ts_tree_cursor_delete_wasm = Module.asm.ts_tree_cursor_delete_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_reset_wasm = function() {\n              return (Module._ts_tree_cursor_reset_wasm = Module.asm.ts_tree_cursor_reset_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_goto_first_child_wasm = function() {\n              return (Module._ts_tree_cursor_goto_first_child_wasm = Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_goto_next_sibling_wasm = function() {\n              return (Module._ts_tree_cursor_goto_next_sibling_wasm = Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_goto_parent_wasm = function() {\n              return (Module._ts_tree_cursor_goto_parent_wasm = Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_current_node_type_id_wasm = function() {\n              return (Module._ts_tree_cursor_current_node_type_id_wasm = Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_current_node_is_named_wasm = function() {\n              return (Module._ts_tree_cursor_current_node_is_named_wasm = Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_current_node_is_missing_wasm = function() {\n              return (Module._ts_tree_cursor_current_node_is_missing_wasm = Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_current_node_id_wasm = function() {\n              return (Module._ts_tree_cursor_current_node_id_wasm = Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_start_position_wasm = function() {\n              return (Module._ts_tree_cursor_start_position_wasm = Module.asm.ts_tree_cursor_start_position_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_end_position_wasm = function() {\n              return (Module._ts_tree_cursor_end_position_wasm = Module.asm.ts_tree_cursor_end_position_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_start_index_wasm = function() {\n              return (Module._ts_tree_cursor_start_index_wasm = Module.asm.ts_tree_cursor_start_index_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_end_index_wasm = function() {\n              return (Module._ts_tree_cursor_end_index_wasm = Module.asm.ts_tree_cursor_end_index_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_current_field_id_wasm = function() {\n              return (Module._ts_tree_cursor_current_field_id_wasm = Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null, arguments);\n            }, Module._ts_tree_cursor_current_node_wasm = function() {\n              return (Module._ts_tree_cursor_current_node_wasm = Module.asm.ts_tree_cursor_current_node_wasm).apply(null, arguments);\n            }, Module._ts_node_symbol_wasm = function() {\n              return (Module._ts_node_symbol_wasm = Module.asm.ts_node_symbol_wasm).apply(null, arguments);\n            }, Module._ts_node_child_count_wasm = function() {\n              return (Module._ts_node_child_count_wasm = Module.asm.ts_node_child_count_wasm).apply(null, arguments);\n            }, Module._ts_node_named_child_count_wasm = function() {\n              return (Module._ts_node_named_child_count_wasm = Module.asm.ts_node_named_child_count_wasm).apply(null, arguments);\n            }, Module._ts_node_child_wasm = function() {\n              return (Module._ts_node_child_wasm = Module.asm.ts_node_child_wasm).apply(null, arguments);\n            }, Module._ts_node_named_child_wasm = function() {\n              return (Module._ts_node_named_child_wasm = Module.asm.ts_node_named_child_wasm).apply(null, arguments);\n            }, Module._ts_node_child_by_field_id_wasm = function() {\n              return (Module._ts_node_child_by_field_id_wasm = Module.asm.ts_node_child_by_field_id_wasm).apply(null, arguments);\n            }, Module._ts_node_next_sibling_wasm = function() {\n              return (Module._ts_node_next_sibling_wasm = Module.asm.ts_node_next_sibling_wasm).apply(null, arguments);\n            }, Module._ts_node_prev_sibling_wasm = function() {\n              return (Module._ts_node_prev_sibling_wasm = Module.asm.ts_node_prev_sibling_wasm).apply(null, arguments);\n            }, Module._ts_node_next_named_sibling_wasm = function() {\n              return (Module._ts_node_next_named_sibling_wasm = Module.asm.ts_node_next_named_sibling_wasm).apply(null, arguments);\n            }, Module._ts_node_prev_named_sibling_wasm = function() {\n              return (Module._ts_node_prev_named_sibling_wasm = Module.asm.ts_node_prev_named_sibling_wasm).apply(null, arguments);\n            }, Module._ts_node_parent_wasm = function() {\n              return (Module._ts_node_parent_wasm = Module.asm.ts_node_parent_wasm).apply(null, arguments);\n            }, Module._ts_node_descendant_for_index_wasm = function() {\n              return (Module._ts_node_descendant_for_index_wasm = Module.asm.ts_node_descendant_for_index_wasm).apply(null, arguments);\n            }, Module._ts_node_named_descendant_for_index_wasm = function() {\n              return (Module._ts_node_named_descendant_for_index_wasm = Module.asm.ts_node_named_descendant_for_index_wasm).apply(null, arguments);\n            }, Module._ts_node_descendant_for_position_wasm = function() {\n              return (Module._ts_node_descendant_for_position_wasm = Module.asm.ts_node_descendant_for_position_wasm).apply(null, arguments);\n            }, Module._ts_node_named_descendant_for_position_wasm = function() {\n              return (Module._ts_node_named_descendant_for_position_wasm = Module.asm.ts_node_named_descendant_for_position_wasm).apply(null, arguments);\n            }, Module._ts_node_start_point_wasm = function() {\n              return (Module._ts_node_start_point_wasm = Module.asm.ts_node_start_point_wasm).apply(null, arguments);\n            }, Module._ts_node_end_point_wasm = function() {\n              return (Module._ts_node_end_point_wasm = Module.asm.ts_node_end_point_wasm).apply(null, arguments);\n            }, Module._ts_node_start_index_wasm = function() {\n              return (Module._ts_node_start_index_wasm = Module.asm.ts_node_start_index_wasm).apply(null, arguments);\n            }, Module._ts_node_end_index_wasm = function() {\n              return (Module._ts_node_end_index_wasm = Module.asm.ts_node_end_index_wasm).apply(null, arguments);\n            }, Module._ts_node_to_string_wasm = function() {\n              return (Module._ts_node_to_string_wasm = Module.asm.ts_node_to_string_wasm).apply(null, arguments);\n            }, Module._ts_node_children_wasm = function() {\n              return (Module._ts_node_children_wasm = Module.asm.ts_node_children_wasm).apply(null, arguments);\n            }, Module._ts_node_named_children_wasm = function() {\n              return (Module._ts_node_named_children_wasm = Module.asm.ts_node_named_children_wasm).apply(null, arguments);\n            }, Module._ts_node_descendants_of_type_wasm = function() {\n              return (Module._ts_node_descendants_of_type_wasm = Module.asm.ts_node_descendants_of_type_wasm).apply(null, arguments);\n            }, Module._ts_node_is_named_wasm = function() {\n              return (Module._ts_node_is_named_wasm = Module.asm.ts_node_is_named_wasm).apply(null, arguments);\n            }, Module._ts_node_has_changes_wasm = function() {\n              return (Module._ts_node_has_changes_wasm = Module.asm.ts_node_has_changes_wasm).apply(null, arguments);\n            }, Module._ts_node_has_error_wasm = function() {\n              return (Module._ts_node_has_error_wasm = Module.asm.ts_node_has_error_wasm).apply(null, arguments);\n            }, Module._ts_node_is_missing_wasm = function() {\n              return (Module._ts_node_is_missing_wasm = Module.asm.ts_node_is_missing_wasm).apply(null, arguments);\n            }, Module._ts_query_matches_wasm = function() {\n              return (Module._ts_query_matches_wasm = Module.asm.ts_query_matches_wasm).apply(null, arguments);\n            }, Module._ts_query_captures_wasm = function() {\n              return (Module._ts_query_captures_wasm = Module.asm.ts_query_captures_wasm).apply(null, arguments);\n            }, Module._iswdigit = function() {\n              return (Module._iswdigit = Module.asm.iswdigit).apply(null, arguments);\n            }, Module._iswalpha = function() {\n              return (Module._iswalpha = Module.asm.iswalpha).apply(null, arguments);\n            }, Module._iswlower = function() {\n              return (Module._iswlower = Module.asm.iswlower).apply(null, arguments);\n            }, Module._towupper = function() {\n              return (Module._towupper = Module.asm.towupper).apply(null, arguments);\n            }, Module.___errno_location = function() {\n              return (Ue = Module.___errno_location = Module.asm.__errno_location).apply(null, arguments);\n            }), He = (Module._memchr = function() {\n              return (Module._memchr = Module.asm.memchr).apply(null, arguments);\n            }, Module._strlen = function() {\n              return (Module._strlen = Module.asm.strlen).apply(null, arguments);\n            }, Module.stackSave = function() {\n              return (He = Module.stackSave = Module.asm.stackSave).apply(null, arguments);\n            }), Ge = Module.stackRestore = function() {\n              return (Ge = Module.stackRestore = Module.asm.stackRestore).apply(null, arguments);\n            }, Be = Module.stackAlloc = function() {\n              return (Be = Module.stackAlloc = Module.asm.stackAlloc).apply(null, arguments);\n            }, Ke = Module._setThrew = function() {\n              return (Ke = Module._setThrew = Module.asm.setThrew).apply(null, arguments);\n            };\n            Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = function() {\n              return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null, arguments);\n            }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = function() {\n              return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null, arguments);\n            }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = function() {\n              return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null, arguments);\n            }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = function() {\n              return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null, arguments);\n            }, Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = function() {\n              return (Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null, arguments);\n            }, Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = function() {\n              return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null, arguments);\n            }, Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = function() {\n              return (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null, arguments);\n            }, Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = function() {\n              return (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null, arguments);\n            }, Module.__Znwm = function() {\n              return (Module.__Znwm = Module.asm._Znwm).apply(null, arguments);\n            }, Module.__ZdlPv = function() {\n              return (Module.__ZdlPv = Module.asm._ZdlPv).apply(null, arguments);\n            }, Module.dynCall_jiji = function() {\n              return (Module.dynCall_jiji = Module.asm.dynCall_jiji).apply(null, arguments);\n            }, Module._orig$ts_parser_timeout_micros = function() {\n              return (Module._orig$ts_parser_timeout_micros = Module.asm.orig$ts_parser_timeout_micros).apply(null, arguments);\n            }, Module._orig$ts_parser_set_timeout_micros = function() {\n              return (Module._orig$ts_parser_set_timeout_micros = Module.asm.orig$ts_parser_set_timeout_micros).apply(null, arguments);\n            };\n            function Ve(e3) {\n              this.name = \"ExitStatus\", this.message = \"Program terminated with exit(\" + e3 + \")\", this.status = e3;\n            }\n            Module.allocate = function(e3, t2) {\n              var r3;\n              return r3 = t2 == F ? Be(e3.length) : ze(e3.length), e3.subarray || e3.slice ? T.set(e3, r3) : T.set(new Uint8Array(e3), r3), r3;\n            };\n            re = function e3() {\n              Ze || Qe(), Ze || (re = e3);\n            };\n            var Xe = false;\n            function Qe(e3) {\n              function t2() {\n                Ze || (Ze = true, Module.calledRun = true, P || (Y = true, pe(X), pe(Q), Module.onRuntimeInitialized && Module.onRuntimeInitialized(), Ye && function(e4) {\n                  var t3 = Module._main;\n                  if (t3) {\n                    var r3 = (e4 = e4 || []).length + 1, n2 = Be(4 * (r3 + 1));\n                    W[n2 >> 2] = H(a);\n                    for (var o2 = 1; o2 < r3; o2++)\n                      W[(n2 >> 2) + o2] = H(e4[o2 - 1]);\n                    W[(n2 >> 2) + r3] = 0;\n                    try {\n                      Je(t3(r3, n2), true);\n                    } catch (e5) {\n                      if (e5 instanceof Ve)\n                        return;\n                      if (\"unwind\" == e5)\n                        return;\n                      var s2 = e5;\n                      e5 && \"object\" == typeof e5 && e5.stack && (s2 = [e5, e5.stack]), g2(\"exception thrown: \" + s2), i(1, e5);\n                    } finally {\n                    }\n                  }\n                }(e3), function() {\n                  if (Module.postRun)\n                    for (\"function\" == typeof Module.postRun && (Module.postRun = [Module.postRun]); Module.postRun.length; )\n                      e4 = Module.postRun.shift(), J.unshift(e4);\n                  var e4;\n                  pe(J);\n                }()));\n              }\n              e3 = e3 || _, ee > 0 || !Xe && (function() {\n                if (S.length) {\n                  if (!m)\n                    return ne(), void S.reduce(function(e4, t3) {\n                      return e4.then(function() {\n                        return Ne(t3, { loadAsync: true, global: true, nodelete: true, allowUndefined: true });\n                      });\n                    }, Promise.resolve()).then(function() {\n                      oe(), Pe();\n                    });\n                  S.forEach(function(e4) {\n                    Ne(e4, { global: true, nodelete: true, allowUndefined: true });\n                  }), Pe();\n                } else\n                  Pe();\n              }(), Xe = true, ee > 0) || (!function() {\n                if (Module.preRun)\n                  for (\"function\" == typeof Module.preRun && (Module.preRun = [Module.preRun]); Module.preRun.length; )\n                    e4 = Module.preRun.shift(), V.unshift(e4);\n                var e4;\n                pe(V);\n              }(), ee > 0 || (Module.setStatus ? (Module.setStatus(\"Running...\"), setTimeout(function() {\n                setTimeout(function() {\n                  Module.setStatus(\"\");\n                }, 1), t2();\n              }, 1)) : t2()));\n            }\n            function Je(e3, t2) {\n              t2 && we() && 0 === e3 || (we() || (Module.onExit && Module.onExit(e3), P = true), i(e3, new Ve(e3)));\n            }\n            if (Module.run = Qe, Module.preInit)\n              for (\"function\" == typeof Module.preInit && (Module.preInit = [Module.preInit]); Module.preInit.length > 0; )\n                Module.preInit.pop()();\n            var Ye = true;\n            Module.noInitialRun && (Ye = false), Qe();\n            const et = Module, tt = {}, rt = 4, nt = 5 * rt, ot = 2 * rt, st = 2 * rt + 2 * ot, _t = { row: 0, column: 0 }, at = /[\\w-.]*/g, it = 1, ut = 2, lt = /^_?tree_sitter_\\w+/;\n            var dt, ct, mt, ft, pt;\n            class ParserImpl {\n              static init() {\n                mt = et._ts_init(), dt = N(mt, \"i32\"), ct = N(mt + rt, \"i32\");\n              }\n              initialize() {\n                et._ts_parser_new_wasm(), this[0] = N(mt, \"i32\"), this[1] = N(mt + rt, \"i32\");\n              }\n              delete() {\n                et._ts_parser_delete(this[0]), et._free(this[1]), this[0] = 0, this[1] = 0;\n              }\n              setLanguage(e3) {\n                let t2;\n                if (e3) {\n                  if (e3.constructor !== Language)\n                    throw new Error(\"Argument must be a Language\");\n                  {\n                    t2 = e3[0];\n                    const r3 = et._ts_language_version(t2);\n                    if (r3 < ct || dt < r3)\n                      throw new Error(`Incompatible language version ${r3}. Compatibility range ${ct} through ${dt}.`);\n                  }\n                } else\n                  t2 = 0, e3 = null;\n                return this.language = e3, et._ts_parser_set_language(this[0], t2), this;\n              }\n              getLanguage() {\n                return this.language;\n              }\n              parse(e3, t2, r3) {\n                if (\"string\" == typeof e3)\n                  ft = (t3, r4, n3) => e3.slice(t3, n3);\n                else {\n                  if (\"function\" != typeof e3)\n                    throw new Error(\"Argument must be a string or a function\");\n                  ft = e3;\n                }\n                this.logCallback ? (pt = this.logCallback, et._ts_parser_enable_logger_wasm(this[0], 1)) : (pt = null, et._ts_parser_enable_logger_wasm(this[0], 0));\n                let n2 = 0, o2 = 0;\n                if (r3 && r3.includedRanges) {\n                  n2 = r3.includedRanges.length;\n                  let e4 = o2 = et._calloc(n2, st);\n                  for (let t3 = 0; t3 < n2; t3++)\n                    At(e4, r3.includedRanges[t3]), e4 += st;\n                }\n                const s2 = et._ts_parser_parse_wasm(this[0], this[1], t2 ? t2[0] : 0, o2, n2);\n                if (!s2)\n                  throw ft = null, pt = null, new Error(\"Parsing failed\");\n                const _2 = new Tree(tt, s2, this.language, ft);\n                return ft = null, pt = null, _2;\n              }\n              reset() {\n                et._ts_parser_reset(this[0]);\n              }\n              setTimeoutMicros(e3) {\n                et._ts_parser_set_timeout_micros(this[0], e3);\n              }\n              getTimeoutMicros() {\n                return et._ts_parser_timeout_micros(this[0]);\n              }\n              setLogger(e3) {\n                if (e3) {\n                  if (\"function\" != typeof e3)\n                    throw new Error(\"Logger callback must be a function\");\n                } else\n                  e3 = null;\n                return this.logCallback = e3, this;\n              }\n              getLogger() {\n                return this.logCallback;\n              }\n            }\n            class Tree {\n              constructor(e3, t2, r3, n2) {\n                wt(e3), this[0] = t2, this.language = r3, this.textCallback = n2;\n              }\n              copy() {\n                const e3 = et._ts_tree_copy(this[0]);\n                return new Tree(tt, e3, this.language, this.textCallback);\n              }\n              delete() {\n                et._ts_tree_delete(this[0]), this[0] = 0;\n              }\n              edit(e3) {\n                !function(e4) {\n                  let t2 = mt;\n                  St(t2, e4.startPosition), St(t2 += ot, e4.oldEndPosition), St(t2 += ot, e4.newEndPosition), x(t2 += ot, e4.startIndex, \"i32\"), x(t2 += rt, e4.oldEndIndex, \"i32\"), x(t2 += rt, e4.newEndIndex, \"i32\"), t2 += rt;\n                }(e3), et._ts_tree_edit_wasm(this[0]);\n              }\n              get rootNode() {\n                return et._ts_tree_root_node_wasm(this[0]), bt(this);\n              }\n              getLanguage() {\n                return this.language;\n              }\n              walk() {\n                return this.rootNode.walk();\n              }\n              getChangedRanges(e3) {\n                if (e3.constructor !== Tree)\n                  throw new TypeError(\"Argument must be a Tree\");\n                et._ts_tree_get_changed_ranges_wasm(this[0], e3[0]);\n                const t2 = N(mt, \"i32\"), r3 = N(mt + rt, \"i32\"), n2 = new Array(t2);\n                if (t2 > 0) {\n                  let e4 = r3;\n                  for (let r4 = 0; r4 < t2; r4++)\n                    n2[r4] = xt(e4), e4 += st;\n                  et._free(r3);\n                }\n                return n2;\n              }\n            }\n            class Node {\n              constructor(e3, t2) {\n                wt(e3), this.tree = t2;\n              }\n              get typeId() {\n                return yt(this), et._ts_node_symbol_wasm(this.tree[0]);\n              }\n              get type() {\n                return this.tree.language.types[this.typeId] || \"ERROR\";\n              }\n              get endPosition() {\n                return yt(this), et._ts_node_end_point_wasm(this.tree[0]), It(mt);\n              }\n              get endIndex() {\n                return yt(this), et._ts_node_end_index_wasm(this.tree[0]);\n              }\n              get text() {\n                return ht(this.tree, this.startIndex, this.endIndex);\n              }\n              isNamed() {\n                return yt(this), 1 === et._ts_node_is_named_wasm(this.tree[0]);\n              }\n              hasError() {\n                return yt(this), 1 === et._ts_node_has_error_wasm(this.tree[0]);\n              }\n              hasChanges() {\n                return yt(this), 1 === et._ts_node_has_changes_wasm(this.tree[0]);\n              }\n              isMissing() {\n                return yt(this), 1 === et._ts_node_is_missing_wasm(this.tree[0]);\n              }\n              equals(e3) {\n                return this.id === e3.id;\n              }\n              child(e3) {\n                return yt(this), et._ts_node_child_wasm(this.tree[0], e3), bt(this.tree);\n              }\n              namedChild(e3) {\n                return yt(this), et._ts_node_named_child_wasm(this.tree[0], e3), bt(this.tree);\n              }\n              childForFieldId(e3) {\n                return yt(this), et._ts_node_child_by_field_id_wasm(this.tree[0], e3), bt(this.tree);\n              }\n              childForFieldName(e3) {\n                const t2 = this.tree.language.fields.indexOf(e3);\n                if (-1 !== t2)\n                  return this.childForFieldId(t2);\n              }\n              get childCount() {\n                return yt(this), et._ts_node_child_count_wasm(this.tree[0]);\n              }\n              get namedChildCount() {\n                return yt(this), et._ts_node_named_child_count_wasm(this.tree[0]);\n              }\n              get firstChild() {\n                return this.child(0);\n              }\n              get firstNamedChild() {\n                return this.namedChild(0);\n              }\n              get lastChild() {\n                return this.child(this.childCount - 1);\n              }\n              get lastNamedChild() {\n                return this.namedChild(this.namedChildCount - 1);\n              }\n              get children() {\n                if (!this._children) {\n                  yt(this), et._ts_node_children_wasm(this.tree[0]);\n                  const e3 = N(mt, \"i32\"), t2 = N(mt + rt, \"i32\");\n                  if (this._children = new Array(e3), e3 > 0) {\n                    let r3 = t2;\n                    for (let t3 = 0; t3 < e3; t3++)\n                      this._children[t3] = bt(this.tree, r3), r3 += nt;\n                    et._free(t2);\n                  }\n                }\n                return this._children;\n              }\n              get namedChildren() {\n                if (!this._namedChildren) {\n                  yt(this), et._ts_node_named_children_wasm(this.tree[0]);\n                  const e3 = N(mt, \"i32\"), t2 = N(mt + rt, \"i32\");\n                  if (this._namedChildren = new Array(e3), e3 > 0) {\n                    let r3 = t2;\n                    for (let t3 = 0; t3 < e3; t3++)\n                      this._namedChildren[t3] = bt(this.tree, r3), r3 += nt;\n                    et._free(t2);\n                  }\n                }\n                return this._namedChildren;\n              }\n              descendantsOfType(e3, t2, r3) {\n                Array.isArray(e3) || (e3 = [e3]), t2 || (t2 = _t), r3 || (r3 = _t);\n                const n2 = [], o2 = this.tree.language.types;\n                for (let t3 = 0, r4 = o2.length; t3 < r4; t3++)\n                  e3.includes(o2[t3]) && n2.push(t3);\n                const s2 = et._malloc(rt * n2.length);\n                for (let e4 = 0, t3 = n2.length; e4 < t3; e4++)\n                  x(s2 + e4 * rt, n2[e4], \"i32\");\n                yt(this), et._ts_node_descendants_of_type_wasm(this.tree[0], s2, n2.length, t2.row, t2.column, r3.row, r3.column);\n                const _2 = N(mt, \"i32\"), a2 = N(mt + rt, \"i32\"), i2 = new Array(_2);\n                if (_2 > 0) {\n                  let e4 = a2;\n                  for (let t3 = 0; t3 < _2; t3++)\n                    i2[t3] = bt(this.tree, e4), e4 += nt;\n                }\n                return et._free(a2), et._free(s2), i2;\n              }\n              get nextSibling() {\n                return yt(this), et._ts_node_next_sibling_wasm(this.tree[0]), bt(this.tree);\n              }\n              get previousSibling() {\n                return yt(this), et._ts_node_prev_sibling_wasm(this.tree[0]), bt(this.tree);\n              }\n              get nextNamedSibling() {\n                return yt(this), et._ts_node_next_named_sibling_wasm(this.tree[0]), bt(this.tree);\n              }\n              get previousNamedSibling() {\n                return yt(this), et._ts_node_prev_named_sibling_wasm(this.tree[0]), bt(this.tree);\n              }\n              get parent() {\n                return yt(this), et._ts_node_parent_wasm(this.tree[0]), bt(this.tree);\n              }\n              descendantForIndex(e3, t2 = e3) {\n                if (\"number\" != typeof e3 || \"number\" != typeof t2)\n                  throw new Error(\"Arguments must be numbers\");\n                yt(this);\n                let r3 = mt + nt;\n                return x(r3, e3, \"i32\"), x(r3 + rt, t2, \"i32\"), et._ts_node_descendant_for_index_wasm(this.tree[0]), bt(this.tree);\n              }\n              namedDescendantForIndex(e3, t2 = e3) {\n                if (\"number\" != typeof e3 || \"number\" != typeof t2)\n                  throw new Error(\"Arguments must be numbers\");\n                yt(this);\n                let r3 = mt + nt;\n                return x(r3, e3, \"i32\"), x(r3 + rt, t2, \"i32\"), et._ts_node_named_descendant_for_index_wasm(this.tree[0]), bt(this.tree);\n              }\n              descendantForPosition(e3, t2 = e3) {\n                if (!Mt(e3) || !Mt(t2))\n                  throw new Error(\"Arguments must be {row, column} objects\");\n                yt(this);\n                let r3 = mt + nt;\n                return St(r3, e3), St(r3 + ot, t2), et._ts_node_descendant_for_position_wasm(this.tree[0]), bt(this.tree);\n              }\n              namedDescendantForPosition(e3, t2 = e3) {\n                if (!Mt(e3) || !Mt(t2))\n                  throw new Error(\"Arguments must be {row, column} objects\");\n                yt(this);\n                let r3 = mt + nt;\n                return St(r3, e3), St(r3 + ot, t2), et._ts_node_named_descendant_for_position_wasm(this.tree[0]), bt(this.tree);\n              }\n              walk() {\n                return yt(this), et._ts_tree_cursor_new_wasm(this.tree[0]), new TreeCursor(tt, this.tree);\n              }\n              toString() {\n                yt(this);\n                const e3 = et._ts_node_to_string_wasm(this.tree[0]), t2 = function(e4) {\n                  for (var t3 = \"\"; ; ) {\n                    var r3 = T[e4++ >> 0];\n                    if (!r3)\n                      return t3;\n                    t3 += String.fromCharCode(r3);\n                  }\n                }(e3);\n                return et._free(e3), t2;\n              }\n            }\n            class TreeCursor {\n              constructor(e3, t2) {\n                wt(e3), this.tree = t2, Et(this);\n              }\n              delete() {\n                vt(this), et._ts_tree_cursor_delete_wasm(this.tree[0]), this[0] = this[1] = this[2] = 0;\n              }\n              reset(e3) {\n                yt(e3), vt(this, mt + nt), et._ts_tree_cursor_reset_wasm(this.tree[0]), Et(this);\n              }\n              get nodeType() {\n                return this.tree.language.types[this.nodeTypeId] || \"ERROR\";\n              }\n              get nodeTypeId() {\n                return vt(this), et._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]);\n              }\n              get nodeId() {\n                return vt(this), et._ts_tree_cursor_current_node_id_wasm(this.tree[0]);\n              }\n              get nodeIsNamed() {\n                return vt(this), 1 === et._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]);\n              }\n              get nodeIsMissing() {\n                return vt(this), 1 === et._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]);\n              }\n              get nodeText() {\n                vt(this);\n                const e3 = et._ts_tree_cursor_start_index_wasm(this.tree[0]), t2 = et._ts_tree_cursor_end_index_wasm(this.tree[0]);\n                return ht(this.tree, e3, t2);\n              }\n              get startPosition() {\n                return vt(this), et._ts_tree_cursor_start_position_wasm(this.tree[0]), It(mt);\n              }\n              get endPosition() {\n                return vt(this), et._ts_tree_cursor_end_position_wasm(this.tree[0]), It(mt);\n              }\n              get startIndex() {\n                return vt(this), et._ts_tree_cursor_start_index_wasm(this.tree[0]);\n              }\n              get endIndex() {\n                return vt(this), et._ts_tree_cursor_end_index_wasm(this.tree[0]);\n              }\n              currentNode() {\n                return vt(this), et._ts_tree_cursor_current_node_wasm(this.tree[0]), bt(this.tree);\n              }\n              currentFieldId() {\n                return vt(this), et._ts_tree_cursor_current_field_id_wasm(this.tree[0]);\n              }\n              currentFieldName() {\n                return this.tree.language.fields[this.currentFieldId()];\n              }\n              gotoFirstChild() {\n                vt(this);\n                const e3 = et._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);\n                return Et(this), 1 === e3;\n              }\n              gotoNextSibling() {\n                vt(this);\n                const e3 = et._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);\n                return Et(this), 1 === e3;\n              }\n              gotoParent() {\n                vt(this);\n                const e3 = et._ts_tree_cursor_goto_parent_wasm(this.tree[0]);\n                return Et(this), 1 === e3;\n              }\n            }\n            class Language {\n              constructor(e3, t2) {\n                wt(e3), this[0] = t2, this.types = new Array(et._ts_language_symbol_count(this[0]));\n                for (let e4 = 0, t3 = this.types.length; e4 < t3; e4++)\n                  et._ts_language_symbol_type(this[0], e4) < 2 && (this.types[e4] = Z(et._ts_language_symbol_name(this[0], e4)));\n                this.fields = new Array(et._ts_language_field_count(this[0]) + 1);\n                for (let e4 = 0, t3 = this.fields.length; e4 < t3; e4++) {\n                  const t4 = et._ts_language_field_name_for_id(this[0], e4);\n                  this.fields[e4] = 0 !== t4 ? Z(t4) : null;\n                }\n              }\n              get version() {\n                return et._ts_language_version(this[0]);\n              }\n              get fieldCount() {\n                return this.fields.length - 1;\n              }\n              fieldIdForName(e3) {\n                const t2 = this.fields.indexOf(e3);\n                return -1 !== t2 ? t2 : null;\n              }\n              fieldNameForId(e3) {\n                return this.fields[e3] || null;\n              }\n              idForNodeType(e3, t2) {\n                const r3 = U(e3), n2 = et._malloc(r3 + 1);\n                z(e3, n2, r3 + 1);\n                const o2 = et._ts_language_symbol_for_name(this[0], n2, r3, t2);\n                return et._free(n2), o2 || null;\n              }\n              get nodeTypeCount() {\n                return et._ts_language_symbol_count(this[0]);\n              }\n              nodeTypeForId(e3) {\n                const t2 = et._ts_language_symbol_name(this[0], e3);\n                return t2 ? Z(t2) : null;\n              }\n              nodeTypeIsNamed(e3) {\n                return !!et._ts_language_type_is_named_wasm(this[0], e3);\n              }\n              nodeTypeIsVisible(e3) {\n                return !!et._ts_language_type_is_visible_wasm(this[0], e3);\n              }\n              query(e3) {\n                const t2 = U(e3), r3 = et._malloc(t2 + 1);\n                z(e3, r3, t2 + 1);\n                const n2 = et._ts_query_new(this[0], r3, t2, mt, mt + rt);\n                if (!n2) {\n                  const t3 = N(mt + rt, \"i32\"), n3 = Z(r3, N(mt, \"i32\")).length, o3 = e3.substr(n3, 100).split(\"\\n\")[0];\n                  let s3, _3 = o3.match(at)[0];\n                  switch (t3) {\n                    case 2:\n                      s3 = new RangeError(`Bad node name '${_3}'`);\n                      break;\n                    case 3:\n                      s3 = new RangeError(`Bad field name '${_3}'`);\n                      break;\n                    case 4:\n                      s3 = new RangeError(`Bad capture name @${_3}`);\n                      break;\n                    case 5:\n                      s3 = new TypeError(`Bad pattern structure at offset ${n3}: '${o3}'...`), _3 = \"\";\n                      break;\n                    default:\n                      s3 = new SyntaxError(`Bad syntax at offset ${n3}: '${o3}'...`), _3 = \"\";\n                  }\n                  throw s3.index = n3, s3.length = _3.length, et._free(r3), s3;\n                }\n                const o2 = et._ts_query_string_count(n2), s2 = et._ts_query_capture_count(n2), _2 = et._ts_query_pattern_count(n2), a2 = new Array(s2), i2 = new Array(o2);\n                for (let e4 = 0; e4 < s2; e4++) {\n                  const t3 = et._ts_query_capture_name_for_id(n2, e4, mt), r4 = N(mt, \"i32\");\n                  a2[e4] = Z(t3, r4);\n                }\n                for (let e4 = 0; e4 < o2; e4++) {\n                  const t3 = et._ts_query_string_value_for_id(n2, e4, mt), r4 = N(mt, \"i32\");\n                  i2[e4] = Z(t3, r4);\n                }\n                const u2 = new Array(_2), l2 = new Array(_2), d2 = new Array(_2), c3 = new Array(_2), m2 = new Array(_2);\n                for (let e4 = 0; e4 < _2; e4++) {\n                  const t3 = et._ts_query_predicates_for_pattern(n2, e4, mt), r4 = N(mt, \"i32\");\n                  c3[e4] = [], m2[e4] = [];\n                  const o3 = [];\n                  let s3 = t3;\n                  for (let t4 = 0; t4 < r4; t4++) {\n                    const t5 = N(s3, \"i32\"), r5 = N(s3 += rt, \"i32\");\n                    if (s3 += rt, t5 === it)\n                      o3.push({ type: \"capture\", name: a2[r5] });\n                    else if (t5 === ut)\n                      o3.push({ type: \"string\", value: i2[r5] });\n                    else if (o3.length > 0) {\n                      if (\"string\" !== o3[0].type)\n                        throw new Error(\"Predicates must begin with a literal value\");\n                      const t6 = o3[0].value;\n                      let r6 = true;\n                      switch (t6) {\n                        case \"not-eq?\":\n                          r6 = false;\n                        case \"eq?\":\n                          if (3 !== o3.length)\n                            throw new Error(`Wrong number of arguments to \\`#eq?\\` predicate. Expected 2, got ${o3.length - 1}`);\n                          if (\"capture\" !== o3[1].type)\n                            throw new Error(`First argument of \\`#eq?\\` predicate must be a capture. Got \"${o3[1].value}\"`);\n                          if (\"capture\" === o3[2].type) {\n                            const t7 = o3[1].name, n4 = o3[2].name;\n                            m2[e4].push(function(e5) {\n                              let o4, s5;\n                              for (const r7 of e5)\n                                r7.name === t7 && (o4 = r7.node), r7.name === n4 && (s5 = r7.node);\n                              return void 0 === o4 || void 0 === s5 || o4.text === s5.text === r6;\n                            });\n                          } else {\n                            const t7 = o3[1].name, n4 = o3[2].value;\n                            m2[e4].push(function(e5) {\n                              for (const o4 of e5)\n                                if (o4.name === t7)\n                                  return o4.node.text === n4 === r6;\n                              return true;\n                            });\n                          }\n                          break;\n                        case \"not-match?\":\n                          r6 = false;\n                        case \"match?\":\n                          if (3 !== o3.length)\n                            throw new Error(`Wrong number of arguments to \\`#match?\\` predicate. Expected 2, got ${o3.length - 1}.`);\n                          if (\"capture\" !== o3[1].type)\n                            throw new Error(`First argument of \\`#match?\\` predicate must be a capture. Got \"${o3[1].value}\".`);\n                          if (\"string\" !== o3[2].type)\n                            throw new Error(`Second argument of \\`#match?\\` predicate must be a string. Got @${o3[2].value}.`);\n                          const n3 = o3[1].name, s4 = new RegExp(o3[2].value);\n                          m2[e4].push(function(e5) {\n                            for (const t7 of e5)\n                              if (t7.name === n3)\n                                return s4.test(t7.node.text) === r6;\n                            return true;\n                          });\n                          break;\n                        case \"set!\":\n                          if (o3.length < 2 || o3.length > 3)\n                            throw new Error(`Wrong number of arguments to \\`#set!\\` predicate. Expected 1 or 2. Got ${o3.length - 1}.`);\n                          if (o3.some((e5) => \"string\" !== e5.type))\n                            throw new Error('Arguments to `#set!` predicate must be a strings.\".');\n                          u2[e4] || (u2[e4] = {}), u2[e4][o3[1].value] = o3[2] ? o3[2].value : null;\n                          break;\n                        case \"is?\":\n                        case \"is-not?\":\n                          if (o3.length < 2 || o3.length > 3)\n                            throw new Error(`Wrong number of arguments to \\`#${t6}\\` predicate. Expected 1 or 2. Got ${o3.length - 1}.`);\n                          if (o3.some((e5) => \"string\" !== e5.type))\n                            throw new Error(`Arguments to \\`#${t6}\\` predicate must be a strings.\".`);\n                          const _3 = \"is?\" === t6 ? l2 : d2;\n                          _3[e4] || (_3[e4] = {}), _3[e4][o3[1].value] = o3[2] ? o3[2].value : null;\n                          break;\n                        default:\n                          c3[e4].push({ operator: t6, operands: o3.slice(1) });\n                      }\n                      o3.length = 0;\n                    }\n                  }\n                  Object.freeze(u2[e4]), Object.freeze(l2[e4]), Object.freeze(d2[e4]);\n                }\n                return et._free(r3), new Query(tt, n2, a2, m2, c3, Object.freeze(u2), Object.freeze(l2), Object.freeze(d2));\n              }\n              static load(e3) {\n                let t2;\n                if (e3 instanceof Uint8Array)\n                  t2 = Promise.resolve(e3);\n                else {\n                  const r4 = e3;\n                  if (\"undefined\" != typeof process && process.versions && process.versions.node) {\n                    const e4 = require$$1;\n                    t2 = Promise.resolve(e4.readFileSync(r4));\n                  } else\n                    t2 = fetch(r4).then((e4) => e4.arrayBuffer().then((t3) => {\n                      if (e4.ok)\n                        return new Uint8Array(t3);\n                      {\n                        const r5 = new TextDecoder(\"utf-8\").decode(t3);\n                        throw new Error(`Language.load failed with status ${e4.status}.\n\n${r5}`);\n                      }\n                    }));\n                }\n                const r3 = \"function\" == typeof loadSideModule ? loadSideModule : xe;\n                return t2.then((e4) => r3(e4, { loadAsync: true })).then((e4) => {\n                  const t3 = Object.keys(e4), r4 = t3.find((e5) => lt.test(e5) && !e5.includes(\"external_scanner_\"));\n                  r4 || console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(t3, null, 2)}`);\n                  const n2 = e4[r4]();\n                  return new Language(tt, n2);\n                });\n              }\n            }\n            class Query {\n              constructor(e3, t2, r3, n2, o2, s2, _2, a2) {\n                wt(e3), this[0] = t2, this.captureNames = r3, this.textPredicates = n2, this.predicates = o2, this.setProperties = s2, this.assertedProperties = _2, this.refutedProperties = a2, this.exceededMatchLimit = false;\n              }\n              delete() {\n                et._ts_query_delete(this[0]), this[0] = 0;\n              }\n              matches(e3, t2, r3, n2) {\n                t2 || (t2 = _t), r3 || (r3 = _t), n2 || (n2 = {});\n                let o2 = n2.matchLimit;\n                if (void 0 === o2)\n                  o2 = 0;\n                else if (\"number\" != typeof o2)\n                  throw new Error(\"Arguments must be numbers\");\n                yt(e3), et._ts_query_matches_wasm(this[0], e3.tree[0], t2.row, t2.column, r3.row, r3.column, o2);\n                const s2 = N(mt, \"i32\"), _2 = N(mt + rt, \"i32\"), a2 = N(mt + 2 * rt, \"i32\"), i2 = new Array(s2);\n                this.exceededMatchLimit = !!a2;\n                let u2 = 0, l2 = _2;\n                for (let t3 = 0; t3 < s2; t3++) {\n                  const r4 = N(l2, \"i32\"), n3 = N(l2 += rt, \"i32\");\n                  l2 += rt;\n                  const o3 = new Array(n3);\n                  if (l2 = gt(this, e3.tree, l2, o3), this.textPredicates[r4].every((e4) => e4(o3))) {\n                    i2[u2++] = { pattern: r4, captures: o3 };\n                    const e4 = this.setProperties[r4];\n                    e4 && (i2[t3].setProperties = e4);\n                    const n4 = this.assertedProperties[r4];\n                    n4 && (i2[t3].assertedProperties = n4);\n                    const s3 = this.refutedProperties[r4];\n                    s3 && (i2[t3].refutedProperties = s3);\n                  }\n                }\n                return i2.length = u2, et._free(_2), i2;\n              }\n              captures(e3, t2, r3, n2) {\n                t2 || (t2 = _t), r3 || (r3 = _t), n2 || (n2 = {});\n                let o2 = n2.matchLimit;\n                if (void 0 === o2)\n                  o2 = 0;\n                else if (\"number\" != typeof o2)\n                  throw new Error(\"Arguments must be numbers\");\n                yt(e3), et._ts_query_captures_wasm(this[0], e3.tree[0], t2.row, t2.column, r3.row, r3.column, o2);\n                const s2 = N(mt, \"i32\"), _2 = N(mt + rt, \"i32\"), a2 = N(mt + 2 * rt, \"i32\"), i2 = [];\n                this.exceededMatchLimit = !!a2;\n                const u2 = [];\n                let l2 = _2;\n                for (let t3 = 0; t3 < s2; t3++) {\n                  const t4 = N(l2, \"i32\"), r4 = N(l2 += rt, \"i32\"), n3 = N(l2 += rt, \"i32\");\n                  if (l2 += rt, u2.length = r4, l2 = gt(this, e3.tree, l2, u2), this.textPredicates[t4].every((e4) => e4(u2))) {\n                    const e4 = u2[n3], r5 = this.setProperties[t4];\n                    r5 && (e4.setProperties = r5);\n                    const o3 = this.assertedProperties[t4];\n                    o3 && (e4.assertedProperties = o3);\n                    const s3 = this.refutedProperties[t4];\n                    s3 && (e4.refutedProperties = s3), i2.push(e4);\n                  }\n                }\n                return et._free(_2), i2;\n              }\n              predicatesForPattern(e3) {\n                return this.predicates[e3];\n              }\n              didExceedMatchLimit() {\n                return this.exceededMatchLimit;\n              }\n            }\n            function ht(e3, t2, r3) {\n              const n2 = r3 - t2;\n              let o2 = e3.textCallback(t2, null, r3);\n              for (t2 += o2.length; t2 < r3; ) {\n                const n3 = e3.textCallback(t2, null, r3);\n                if (!(n3 && n3.length > 0))\n                  break;\n                t2 += n3.length, o2 += n3;\n              }\n              return t2 > r3 && (o2 = o2.slice(0, n2)), o2;\n            }\n            function gt(e3, t2, r3, n2) {\n              for (let o2 = 0, s2 = n2.length; o2 < s2; o2++) {\n                const s3 = N(r3, \"i32\"), _2 = bt(t2, r3 += rt);\n                r3 += nt, n2[o2] = { name: e3.captureNames[s3], node: _2 };\n              }\n              return r3;\n            }\n            function wt(e3) {\n              if (e3 !== tt)\n                throw new Error(\"Illegal constructor\");\n            }\n            function Mt(e3) {\n              return e3 && \"number\" == typeof e3.row && \"number\" == typeof e3.column;\n            }\n            function yt(e3) {\n              let t2 = mt;\n              x(t2, e3.id, \"i32\"), x(t2 += rt, e3.startIndex, \"i32\"), x(t2 += rt, e3.startPosition.row, \"i32\"), x(t2 += rt, e3.startPosition.column, \"i32\"), x(t2 += rt, e3[0], \"i32\");\n            }\n            function bt(e3, t2 = mt) {\n              const r3 = N(t2, \"i32\");\n              if (0 === r3)\n                return null;\n              const n2 = N(t2 += rt, \"i32\"), o2 = N(t2 += rt, \"i32\"), s2 = N(t2 += rt, \"i32\"), _2 = N(t2 += rt, \"i32\"), a2 = new Node(tt, e3);\n              return a2.id = r3, a2.startIndex = n2, a2.startPosition = { row: o2, column: s2 }, a2[0] = _2, a2;\n            }\n            function vt(e3, t2 = mt) {\n              x(t2 + 0 * rt, e3[0], \"i32\"), x(t2 + 1 * rt, e3[1], \"i32\"), x(t2 + 2 * rt, e3[2], \"i32\");\n            }\n            function Et(e3) {\n              e3[0] = N(mt + 0 * rt, \"i32\"), e3[1] = N(mt + 1 * rt, \"i32\"), e3[2] = N(mt + 2 * rt, \"i32\");\n            }\n            function St(e3, t2) {\n              x(e3, t2.row, \"i32\"), x(e3 + rt, t2.column, \"i32\");\n            }\n            function It(e3) {\n              return { row: N(e3, \"i32\"), column: N(e3 + rt, \"i32\") };\n            }\n            function At(e3, t2) {\n              St(e3, t2.startPosition), St(e3 += ot, t2.endPosition), x(e3 += ot, t2.startIndex, \"i32\"), x(e3 += rt, t2.endIndex, \"i32\"), e3 += rt;\n            }\n            function xt(e3) {\n              const t2 = {};\n              return t2.startPosition = It(e3), e3 += ot, t2.endPosition = It(e3), e3 += ot, t2.startIndex = N(e3, \"i32\"), e3 += rt, t2.endIndex = N(e3, \"i32\"), t2;\n            }\n            for (const e3 of Object.getOwnPropertyNames(ParserImpl.prototype))\n              Object.defineProperty(Parser2.prototype, e3, { value: ParserImpl.prototype[e3], enumerable: false, writable: false });\n            Parser2.Language = Language, Module.onRuntimeInitialized = () => {\n              ParserImpl.init(), e2();\n            };\n          }));\n        }\n      }\n      return Parser2;\n    }();\n    module2.exports = TreeSitter;\n  })(treeSitter);\n  var treeSitterExports = treeSitter.exports;\n  const Parser = /* @__PURE__ */ getDefaultExportFromCjs(treeSitterExports);\n  const treeSitterShadeupURL = \"\";\n  async function getShadeupParser() {\n    if (typeof process === \"object\" && process.versions && process.versions.node) {\n      return global.shadeupParser();\n    }\n    let url = treeSitterShadeupURL;\n    let shadeUrl = treeSitterShadeupURL;\n    await Parser.init({\n      locateFile(scriptName, scriptDirectory) {\n        return url;\n      }\n    });\n    const parser = new Parser();\n    parser.setLanguage(await Parser.Language.load(shadeUrl));\n    return parser;\n  }\n  class AstContext {\n    constructor(fileName) {\n      this.impls = /* @__PURE__ */ new Map();\n      this.implsFor = /* @__PURE__ */ new Map();\n      this.shaders = [];\n      this.diagnostics = [];\n      this.globals = [];\n      this.fileName = fileName;\n    }\n    report(node2, message) {\n      this.diagnostics.push({ message, node: node2 });\n    }\n    addImpl(name, node2) {\n      if (this.impls.has(name)) {\n        this.impls.get(name).push(node2);\n      } else {\n        this.impls.set(name, [node2]);\n      }\n    }\n    addImplFor(name, node2) {\n      if (this.implsFor.has(name)) {\n        this.implsFor.get(name).push(node2);\n      } else {\n        this.implsFor.set(name, [node2]);\n      }\n    }\n  }\n  const stdMath = \"export type bool = boolean;\\r\\nexport type float = number & { _opaque_float: 2 };\\r\\nexport type int = number & { _opaque_int: 1 } & float;\\r\\nexport type uint = number & { _opaque_uint: 1 };\\r\\ntype scalar = float | int | uint;\\r\\n\\r\\nexport type float2 = [float, float] & { _opaque_vector_float_2: 2; length: 2 };\\r\\nexport type float3 = [float, float, float] & { _opaque_vector_float_3: 3; length: 3 };\\r\\nexport type float4 = [float, float, float, float] & { _opaque_vector_float_4: 4; length: 4 };\\r\\nexport type int2 = [int, int] & { _opaque_vector_int_2: 2 } & float2;\\r\\nexport type int3 = [int, int, int] & { _opaque_vector_int_3: 3 } & float3;\\r\\nexport type int4 = [int, int, int, int] & { _opaque_vector_int_4: 4 } & float4;\\r\\n\\r\\nexport type uint2 = [uint, uint] & { _opaque_vector_uint_2: 2 } & float2;\\r\\nexport type uint3 = [uint, uint, uint] & { _opaque_vector_uint_3: 3 } & float3;\\r\\nexport type uint4 = [uint, uint, uint, uint] & { _opaque_vector_uint_4: 4 } & float4;\\r\\n\\r\\nexport type uint8 = number & { _opaque_uint8: 1 };\\r\\n\\r\\ntype anyFloat = float2 | float3 | float4;\\r\\ntype anyInt = int2 | int3 | int4;\\r\\ntype anyUint = uint2 | uint3 | uint4;\\r\\n\\r\\ntype vector2 = float2 | int2 | uint2;\\r\\ntype vector3 = float3 | int3 | uint3;\\r\\ntype vector4 = float4 | int4 | uint4;\\r\\n\\r\\ntype vector = vector2 | vector3 | vector4;\\r\\n\\r\\ntype vectorOrScalar = vector | scalar;\\r\\n\\r\\nexport interface float2x2 extends Omit<[float, float, float, float], '__index'> {\\r\\n\t__matrix: 2;\\r\\n\t[index: int]: float;\\r\\n\t__index(index: number): [float, float];\\r\\n}\\r\\n\\r\\nexport interface float3x3\\r\\n\textends Omit<[float, float, float, float, float, float, float, float, float], '__index'> {\\r\\n\t__matrix: 3;\\r\\n\t[index: int]: float;\\r\\n\t__index(index: number): [float, float, float];\\r\\n}\\r\\n\\r\\nexport interface float4x4\\r\\n\textends Omit<\\r\\n\t\t[\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat,\\r\\n\t\t\tfloat\\r\\n\t\t],\\r\\n\t\t'__index'\\r\\n\t> {\\r\\n\t__matrix: 4;\\r\\n\t[index: int]: float;\\r\\n\t__index(index: number): [float, float, float, float];\\r\\n}\\r\\n\\r\\nfunction isVector(v: vectorOrScalar): v is vector {\\r\\n\treturn Array.isArray(v);\\r\\n}\\r\\n\\r\\nfunction isScalar(v: vectorOrScalar): v is scalar {\\r\\n\treturn typeof v === 'number';\\r\\n}\\r\\n\\r\\nfunction isMatrix(v: number[]): v is float2x2 | float3x3 | float4x4 {\\r\\n\treturn !!(v as any).__matrix;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(!mat2(0)) @shadeup=wgsl(mat2x2<f32>) */\\r\\nexport function float2x2(): float2x2;\\r\\n/** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\\r\\nexport function float2x2(m00: number, m01: number, m10: number, m11: number): float2x2;\\r\\n/** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\\r\\nexport function float2x2(...args: float[]): float2x2 {\\r\\n\tlet arr = [0, 0, 0, 0] as any as float2x2;\\r\\n\tif (args.length === 4) {\\r\\n\t\tarr = [...args] as any as float2x2;\\r\\n\t}\\r\\n\\r\\n\tapplyMatrix2x2Methods(arr);\\r\\n\\r\\n\treturn arr;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(!mat3(0)) @shadeup=wgsl(mat3x3<f32>) */\\r\\nexport function float3x3(): float3x3;\\r\\n/** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\\r\\nexport function float3x3(\\r\\n\tm00: number,\\r\\n\tm01: number,\\r\\n\tm02: number,\\r\\n\tm10: number,\\r\\n\tm11: number,\\r\\n\tm12: number,\\r\\n\tm20: number,\\r\\n\tm21: number,\\r\\n\tm22: number\\r\\n): float3x3;\\r\\n/** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\\r\\nexport function float3x3(...args: float[]): float3x3 {\\r\\n\tlet arr = [0, 0, 0, 0, 0, 0, 0, 0, 0] as any as float3x3;\\r\\n\tif (args.length === 9) {\\r\\n\t\tarr = [...args] as any as float3x3;\\r\\n\t}\\r\\n\\r\\n\tapplyMatrix3x3Methods(arr);\\r\\n\\r\\n\treturn arr;\\r\\n}\\r\\n\\r\\nfunction applyMatrix4x4Methods(arr: float4x4): void {\\r\\n\t(arr as any).__matrix = 4;\\r\\n\\r\\n\t(arr as any).__index = function (index: number) {\\r\\n\t\tlet out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\\r\\n\t\tout_arr.__index = (index_inner: int) => {\\r\\n\t\t\treturn out_arr[index_inner];\\r\\n\t\t};\\r\\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\\r\\n\t\t\tarr[index * 4 + index_inner] = value;\\r\\n\t\t};\\r\\n\\r\\n\t\tout_arr.__index_assign_op = function (\\r\\n\t\t\top_fn: (a: any, b: any) => any,\\r\\n\t\t\tindex_inner: int,\\r\\n\t\t\tvalue: any\\r\\n\t\t) {\\r\\n\t\t\tarr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\\r\\n\t\t};\\r\\n\\r\\n\t\treturn out_arr;\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign = function (index: int, value: float4) {\\r\\n\t\tarr[index * 4] = value[0];\\r\\n\t\tarr[index * 4 + 1] = value[1];\\r\\n\t\tarr[index * 4 + 2] = value[2];\\r\\n\t\tarr[index * 4 + 3] = value[3];\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign_op = function (\\r\\n\t\top_fn: (a: any, b: any) => any,\\r\\n\t\tindex: int,\\r\\n\t\tvalue: any\\r\\n\t) {\\r\\n\t\tarr[index * 4] = op_fn(arr[index * 4], value[0]);\\r\\n\t\tarr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\\r\\n\t\tarr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\\r\\n\t\tarr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\\r\\n\t};\\r\\n}\\r\\n(window as any).applyMatrix4x4Methods = applyMatrix4x4Methods;\\r\\n\\r\\nfunction applyMatrix3x3Methods(arr: float3x3): void {\\r\\n\t(arr as any).__matrix = 3;\\r\\n\\r\\n\t(arr as any).__index = function (index: number) {\\r\\n\t\tlet out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\\r\\n\t\tout_arr.__index = (index_inner: int) => {\\r\\n\t\t\treturn out_arr[index_inner];\\r\\n\t\t};\\r\\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\\r\\n\t\t\tarr[index * 3 + index_inner] = value;\\r\\n\t\t};\\r\\n\\r\\n\t\tout_arr.__index_assign_op = function (\\r\\n\t\t\top_fn: (a: any, b: any) => any,\\r\\n\t\t\tindex_inner: int,\\r\\n\t\t\tvalue: any\\r\\n\t\t) {\\r\\n\t\t\tarr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\\r\\n\t\t};\\r\\n\\r\\n\t\treturn out_arr;\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign = function (index: int, value: float3) {\\r\\n\t\tarr[index * 3] = value[0];\\r\\n\t\tarr[index * 3 + 1] = value[1];\\r\\n\t\tarr[index * 3 + 2] = value[2];\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign_op = function (\\r\\n\t\top_fn: (a: any, b: any) => any,\\r\\n\t\tindex: int,\\r\\n\t\tvalue: any\\r\\n\t) {\\r\\n\t\tarr[index * 3] = op_fn(arr[index * 3], value[0]);\\r\\n\t\tarr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\\r\\n\t\tarr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\\r\\n\t};\\r\\n}\\r\\n\\r\\n(window as any).applyMatrix3x3Methods = applyMatrix3x3Methods;\\r\\n\\r\\nfunction applyMatrix2x2Methods(arr: float2x2): void {\\r\\n\t(arr as any).__matrix = 2;\\r\\n\\r\\n\t(arr as any).__index = function (index: number) {\\r\\n\t\tlet out_arr = [arr[index * 2], arr[index * 2 + 1]];\\r\\n\t\tout_arr.__index = (index_inner: int) => {\\r\\n\t\t\treturn out_arr[index_inner];\\r\\n\t\t};\\r\\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\\r\\n\t\t\tarr[index * 2 + index_inner] = value;\\r\\n\t\t};\\r\\n\\r\\n\t\tout_arr.__index_assign_op = function (\\r\\n\t\t\top_fn: (a: any, b: any) => any,\\r\\n\t\t\tindex_inner: int,\\r\\n\t\t\tvalue: any\\r\\n\t\t) {\\r\\n\t\t\tarr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\\r\\n\t\t};\\r\\n\\r\\n\t\treturn out_arr;\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign = function (index: int, value: float3) {\\r\\n\t\tarr[index * 2] = value[0];\\r\\n\t\tarr[index * 2 + 1] = value[1];\\r\\n\t};\\r\\n\\r\\n\t(arr as any).__index_assign_op = function (\\r\\n\t\top_fn: (a: any, b: any) => any,\\r\\n\t\tindex: int,\\r\\n\t\tvalue: any\\r\\n\t) {\\r\\n\t\tarr[index * 2] = op_fn(arr[index * 2], value[0]);\\r\\n\t\tarr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\\r\\n\t};\\r\\n}\\r\\n\\r\\n(window as any).applyMatrix2x2Methods = applyMatrix2x2Methods;\\r\\n\\r\\n/** @shadeup=glsl(!mat4(0)) @shadeup=wgsl(mat4x4<f32>) */\\r\\nexport function float4x4(): float4x4;\\r\\n/** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\\r\\nexport function float4x4(\\r\\n\tm00: number,\\r\\n\tm01: number,\\r\\n\tm02: number,\\r\\n\tm03: number,\\r\\n\tm10: number,\\r\\n\tm11: number,\\r\\n\tm12: number,\\r\\n\tm13: number,\\r\\n\tm20: number,\\r\\n\tm21: number,\\r\\n\tm22: number,\\r\\n\tm23: number,\\r\\n\tm30: number,\\r\\n\tm31: number,\\r\\n\tm32: number,\\r\\n\tm33: number\\r\\n): float4x4;\\r\\n/** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\\r\\nexport function float4x4(...args: float[]): float4x4 {\\r\\n\tlet arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as any as float4x4;\\r\\n\tif (args.length === 16) {\\r\\n\t\tarr = [...args] as any as float4x4;\\r\\n\t}\\r\\n\\r\\n\tapplyMatrix4x4Methods(arr);\\r\\n\\r\\n\treturn arr;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float) @shadeup=wgsl(f32) */\\r\\nexport function float(x: number): float {\\r\\n\treturn x as float;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int) @shadeup=wgsl(i32) */\\r\\nexport function int(x: number): int {\\r\\n\treturn (x | 0) as int;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\\r\\nexport function uint(x: number): uint {\\r\\n\treturn (x >>> 0) as uint;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\r\\nexport function float2(x: number, y: number): float2;\\r\\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\r\\nexport function float2(xy: vector2): float2;\\r\\n\\r\\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\r\\nexport function float2(...args: (vectorOrScalar | number)[]): float2 {\\r\\n\treturn args.flat() as float2;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(x: number, y: number, z: number): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(xy: vector2, z: number): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(x: number, yz: vector2): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(xyz: vector3): float3;\\r\\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\r\\nexport function float3(...args: (vectorOrScalar | number)[]): float3 {\\r\\n\treturn args.flat() as float3;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, y: number, z: number, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, yz: vector2, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xy: vector2, z: number, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, y: number, zw: vector2): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xy: vector2, zw: vector2): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xyz: vector3, w: number): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(x: number, yzw: vector3): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(xyzw: int4): float4;\\r\\nexport function float4(xyzw: float4): float4;\\r\\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\r\\nexport function float4(...args: (vectorOrScalar | number)[]): float4 {\\r\\n\treturn args.flat() as float4;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\r\\nexport function int2(x: number, y: number): int2;\\r\\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\r\\nexport function int2(xy: vector2): int2;\\r\\n\\r\\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\r\\nexport function int2(...args: (vectorOrScalar | number)[]): int2 {\\r\\n\treturn args.flat().map((x) => x | 0) as int2;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(x: number, y: number, z: number): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(xy: vector2, z: number): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(x: number, yz: vector2): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(xyz: vector3): int3;\\r\\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\r\\nexport function int3(...args: (vectorOrScalar | number)[]): int3 {\\r\\n\treturn args.flat().map((x) => x | 0) as int3;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, y: number, z: number, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, yz: vector2, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xy: vector2, z: number, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, y: number, zw: vector2): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xy: vector2, zw: vector2): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xyz: vector3, w: number): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(x: number, yzw: vector3): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(xyzw: float4): int4;\\r\\nexport function int4(xyzw: int4): int4;\\r\\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\r\\nexport function int4(...args: (vectorOrScalar | number)[]): int4 {\\r\\n\treturn args.flat().map((x) => x | 0) as int4;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint2) @shadeup=wgsl(vec2<u32>) */\\r\\nexport function uint2(x: number, y: number): uint2;\\r\\n/** @shadeup=glsl(uint2) @shadeup=wgsl(vec2<u32>) */\\r\\nexport function uint2(xy: vector2): uint2;\\r\\nexport function uint2(...args: (vectorOrScalar | number)[]): uint2 {\\r\\n\treturn args.flat().map((x) => x >>> 0) as uint2;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(x: number, y: number, z: number): uint3;\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(xy: vector2, z: number): uint3;\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(x: number, yz: vector2): uint3;\\r\\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\\r\\nexport function uint3(xyz: vector3): uint3;\\r\\nexport function uint3(...args: (vectorOrScalar | number)[]): uint3 {\\r\\n\treturn args.flat().map((x) => x >>> 0) as uint3;\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(x: number, y: number, z: number, w: number): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(x: number, yz: vector2, w: number): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(xy: vector2, z: number, w: number): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(x: number, y: number, zw: vector2): uint4;\\r\\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\\r\\nexport function uint4(xy: vector2, zw: vector2): uint4;\\r\\nexport function uint4(xyz: vector3, w: number): uint4;\\r\\nexport function uint4(x: number, yzw: vector3): uint4;\\r\\nexport function uint4(xyzw: float4): uint4;\\r\\nexport function uint4(xyzw: uint4): uint4;\\r\\nexport function uint4(...args: (vectorOrScalar | number)[]): uint4 {\\r\\n\treturn args.flat().map((x) => x >>> 0) as uint4;\\r\\n}\\r\\n\\r\\nexport function uint8(x: number): uint8 {\\r\\n\treturn ((x >>> 0) & 0xff) as uint8;\\r\\n}\\r\\n\\r\\nfunction componentMath(a: any, b: any, f: (a: number, b: number) => number): vectorOrScalar {\\r\\n\tlet aIsScalar = isScalar(a);\\r\\n\tlet bIsScalar = isScalar(b);\\r\\n\tif (aIsScalar && bIsScalar) {\\r\\n\t\treturn f(a, b) as scalar;\\r\\n\t}\\r\\n\tif (!aIsScalar && !bIsScalar) {\\r\\n\t\tif (a.length !== b.length) {\\r\\n\t\t\tthrow new Error('Cannot perform component-wise math on vectors of different lengths');\\r\\n\t\t}\\r\\n\t\t// return a.map((a, i) => f(a, b[i])) as vector;\\r\\n\t\tif (a.length == 2) {\\r\\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1])] as vector;\\r\\n\t\t} else if (a.length == 3) {\\r\\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])] as vector;\\r\\n\t\t} else if (a.length == 4) {\\r\\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])] as vector;\\r\\n\t\t}\\r\\n\t} else if (!aIsScalar && bIsScalar) {\\r\\n\t\tif (a.length == 2) {\\r\\n\t\t\treturn [f(a[0], b), f(a[1], b)] as vector;\\r\\n\t\t} else if (a.length == 3) {\\r\\n\t\t\treturn [f(a[0], b), f(a[1], b), f(a[2], b)] as vector;\\r\\n\t\t} else if (a.length == 4) {\\r\\n\t\t\treturn [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)] as vector;\\r\\n\t\t}\\r\\n\t} else if (!bIsScalar && aIsScalar) {\\r\\n\t\tif (b.length == 2) {\\r\\n\t\t\treturn [f(a, b[0]), f(a, b[1])] as vector;\\r\\n\t\t} else if (b.length == 3) {\\r\\n\t\t\treturn [f(a, b[0]), f(a, b[1]), f(a, b[2])] as vector;\\r\\n\t\t} else if (b.length == 4) {\\r\\n\t\t\treturn [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])] as vector;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tthrow new Error('Cannot perform component-wise math on a scalar and a vector');\\r\\n}\\r\\n\\r\\nfunction componentMathSingular(a: vectorOrScalar, f: (a: number) => number): vectorOrScalar {\\r\\n\tif (isScalar(a)) {\\r\\n\t\treturn f(a) as scalar;\\r\\n\t}\\r\\n\tif (isVector(a)) {\\r\\n\t\treturn a.map((a, i) => f(a)) as vector;\\r\\n\t}\\r\\n\\r\\n\tthrow new Error('Cannot perform component-wise math on a scalar and a vector');\\r\\n}\\r\\n\\r\\ntype cCallCb = (a: number, b: number) => number;\\r\\ntype cCallCbSingle = (a: number) => number;\\r\\n\\r\\nfunction cCall(cb: cCallCb, a: scalar, b: scalar): scalar;\\r\\nfunction cCall(cb: cCallCb, a: vector, b: scalar): vector;\\r\\nfunction cCall(cb: cCallCb, a: vector2, b: vector2): vector2;\\r\\nfunction cCall(cb: cCallCb, a: vector3, b: vector3): vector3;\\r\\nfunction cCall(cb: cCallCb, a: vector4, b: vector4): vector4;\\r\\nfunction cCall(cb: cCallCb, a: vectorOrScalar, b: vectorOrScalar): vectorOrScalar {\\r\\n\treturn componentMath(a, b, (a, b) => a + b);\\r\\n}\\r\\n\\r\\nexport type vectorOverload_2to1_3to3 = {\\r\\n\t(a: float2, b: float2): float;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\\r\\n\t(a: int2, b: int2): int;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\\r\\n\t(a: float2, b: int2): float;\\r\\n\t(a: float3, b: int3): float3;\\r\\n\\r\\n\t(a: int2, b: float2): float;\\r\\n\t(a: int3, b: float3): float3;\\r\\n};\\r\\nexport type vectorOverload_2to1_3to3_4to4 = {\\r\\n\t(a: float2, b: float2): float;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\t(a: float4, b: float4): float4;\\r\\n\\r\\n\t(a: int2, b: int2): int;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\t(a: int4, b: int4): int4;\\r\\n\\r\\n\t(a: float2, b: int2): float;\\r\\n\t(a: float3, b: int3): float3;\\r\\n\t(a: float4, b: int4): float4;\\r\\n\\r\\n\t(a: int2, b: float2): float;\\r\\n\t(a: int3, b: float3): float3;\\r\\n\t(a: int4, b: float4): float4;\\r\\n};\\r\\nexport type vectorOverload_2to1_3to1_4to1 = {\\r\\n\t(a: float2, b: float2): float;\\r\\n\t(a: float3, b: float3): float;\\r\\n\t(a: float4, b: float4): float;\\r\\n\\r\\n\t(a: int2, b: int2): int;\\r\\n\t(a: int3, b: int3): int;\\r\\n\t(a: int4, b: int4): int;\\r\\n\\r\\n\t(a: float2, b: int2): float;\\r\\n\t(a: float3, b: int3): float;\\r\\n\t(a: float4, b: int4): float;\\r\\n\\r\\n\t(a: int2, b: float2): float;\\r\\n\t(a: int3, b: float3): float;\\r\\n\t(a: int4, b: float4): float;\\r\\n};\\r\\n\\r\\nexport type componentOverload = {\\r\\n\t(a: int, b: int): int;\\r\\n\t(a: int2, b: int2): int2;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\t(a: int4, b: int4): int4;\\r\\n\\r\\n\t(a: int, b: float): float;\\r\\n\t(a: float, b: int): float;\\r\\n\\r\\n\t(a: float, b: float): float;\\r\\n\\r\\n\t(a: float2, b: float): float2;\\r\\n\t(a: float3, b: float): float3;\\r\\n\t(a: float4, b: float): float4;\\r\\n\\r\\n\t(a: int2, b: int): int2;\\r\\n\t(a: int3, b: int): int3;\\r\\n\t(a: int4, b: int): int4;\\r\\n\\r\\n\t(a: int2, b: float): float2;\\r\\n\t(a: int3, b: float): float3;\\r\\n\t(a: int4, b: float): float4;\\r\\n\\r\\n\t(a: float2, b: int): float2;\\r\\n\t(a: float3, b: int): float3;\\r\\n\t(a: float4, b: int): float4;\\r\\n\t(a: float2, b: float): float2;\\r\\n\\r\\n\t(a: float, b: float2): float2;\\r\\n\t(a: float, b: float3): float3;\\r\\n\t(a: float, b: float4): float4;\\r\\n\\r\\n\t(a: int, b: int2): int2;\\r\\n\t(a: int, b: int3): int3;\\r\\n\t(a: int, b: int4): int4;\\r\\n\\r\\n\t(a: float, b: int2): float2;\\r\\n\t(a: float, b: int3): float3;\\r\\n\t(a: float, b: int4): float4;\\r\\n\\r\\n\t(a: int, b: float2): float2;\\r\\n\t(a: int, b: float3): float3;\\r\\n\t(a: int, b: float4): float4;\\r\\n\\r\\n\t(a: float2, b: float2): float2;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\t(a: float4, b: float4): float4;\\r\\n\\r\\n\t(a: float2, b: int2): float2;\\r\\n\t(a: float3, b: int3): float3;\\r\\n\t(a: float4, b: int4): float4;\\r\\n\\r\\n\t(a: int2, b: float2): float2;\\r\\n\t(a: int3, b: float3): float3;\\r\\n\t(a: int4, b: float4): float4;\\r\\n\\r\\n\t(a: uint, b: uint): uint;\\r\\n\t(a: uint2, b: uint2): uint2;\\r\\n\t(a: uint3, b: uint3): uint3;\\r\\n\t(a: uint4, b: uint4): uint4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadMatch = {\\r\\n\t(a: uint, b: uint): uint;\\r\\n\t(a: uint2, b: uint2): uint2;\\r\\n\t(a: uint3, b: uint3): uint3;\\r\\n\t(a: uint4, b: uint4): uint4;\\r\\n\t(a: uint2, b: uint): uint2;\\r\\n\t(a: uint3, b: uint): uint3;\\r\\n\t(a: uint4, b: uint): uint4;\\r\\n\\r\\n\t(a: int, b: int): int;\\r\\n\t(a: int2, b: int2): int2;\\r\\n\t(a: int3, b: int3): int3;\\r\\n\t(a: int4, b: int4): int4;\\r\\n\t(a: int2, b: int): int2;\\r\\n\t(a: int3, b: int): int3;\\r\\n\t(a: int4, b: int): int4;\\r\\n\\r\\n\t(a: float, b: float): float;\\r\\n\t(a: float2, b: float2): float2;\\r\\n\t(a: float3, b: float3): float3;\\r\\n\t(a: float4, b: float4): float4;\\r\\n\t(a: float2, b: float): float2;\\r\\n\t(a: float3, b: float): float3;\\r\\n\t(a: float4, b: float): float4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadSingular = {\\r\\n\t(a: int): int;\\r\\n\t(a: float): float;\\r\\n\\r\\n\t(a: float2): float2;\\r\\n\t(a: float3): float3;\\r\\n\t(a: float4): float4;\\r\\n\\r\\n\t(a: int2): int2;\\r\\n\t(a: int3): int3;\\r\\n\t(a: int4): int4;\\r\\n\\r\\n\t(a: uint): uint;\\r\\n\t(a: uint2): uint2;\\r\\n\t(a: uint3): uint3;\\r\\n\t(a: uint4): uint4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadSingularFloat = {\\r\\n\t// (a: int): int;\\r\\n\t(a: float): float;\\r\\n\\r\\n\t(a: float2): float2;\\r\\n\t(a: float3): float3;\\r\\n\t(a: float4): float4;\\r\\n\\r\\n\t// (a: int2): int2;\\r\\n\t// (a: int3): int3;\\r\\n\t// (a: int4): int4;\\r\\n};\\r\\n\\r\\nexport type componentOverloadMatrix = {\\r\\n\t(a: float2x2, b: float2): float2;\\r\\n\t(a: float3x3, b: float3): float3;\\r\\n\t(a: float4x4, b: float4): float4;\\r\\n\\r\\n\t(a: float2, b: float2x2): float2;\\r\\n\t(a: float3, b: float3x3): float3;\\r\\n\t(a: float4, b: float4x4): float4;\\r\\n\\r\\n\t(a: float2x2, b: float2x2): float2x2;\\r\\n\t(a: float3x3, b: float3x3): float3x3;\\r\\n\t(a: float4x4, b: float4x4): float4x4;\\r\\n\\r\\n\t(a: float2x2, b: float): float2x2;\\r\\n\t(a: float3x3, b: float): float3x3;\\r\\n\t(a: float4x4, b: float): float4x4;\\r\\n\\r\\n\t(a: float, b: float2x2): float2x2;\\r\\n\t(a: float, b: float3x3): float3x3;\\r\\n\t(a: float, b: float4x4): float4x4;\\r\\n};\\r\\n\\r\\nfunction componentOp(cb: cCallCb): componentOverload;\\r\\n\\r\\nfunction componentOp(cb: cCallCb) {\\r\\n\treturn (a: any, b: any) => componentMath(a, b, cb);\\r\\n}\\r\\n\\r\\nfunction componentOpMatch(cb: cCallCb): componentOverloadMatch;\\r\\nfunction componentOpMatch(cb: cCallCb) {\\r\\n\treturn (a: any, b: any) => componentMath(a, b, cb);\\r\\n}\\r\\n\\r\\nfunction componentOpSingular(cb: cCallCbSingle): componentOverloadSingular;\\r\\n\\r\\nfunction componentOpSingular(cb: cCallCbSingle) {\\r\\n\treturn (a: any) => componentMathSingular(a, cb);\\r\\n}\\r\\n\\r\\nfunction componentOpSingularFloat(cb: cCallCbSingle): componentOverloadSingularFloat;\\r\\n\\r\\nfunction componentOpSingularFloat(cb: cCallCbSingle) {\\r\\n\treturn (a: any) => componentMathSingular(a, cb);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!$0$ + $1$)*/\\r\\nexport const add: componentOverload & ((a: string, b: string) => string) = (\\r\\n\ta: any,\\r\\n\tb: any\\r\\n): any => {\\r\\n\tif (typeof a === 'string' && typeof b === 'string') {\\r\\n\t\treturn `${a}${b}`;\\r\\n\t} else {\\r\\n\t\tlet addOp: (a: any, b: any) => any = componentOp((a, b) => a + b);\\r\\n\t\tlet v: any = addOp(a, b);\\r\\n\t\treturn v;\\r\\n\t}\\r\\n};\\r\\n\\r\\n/** @shadeup=univ(!$0$ - $1$)*/\\r\\nexport const sub = componentOp((a, b) => a - b);\\r\\n\\r\\ntype matrix = float2x2 | float3x3 | float4x4;\\r\\n\\r\\nfunction matrixMul(a: matrix, b: matrix): matrix {\\r\\n\t// Multiply two square matrices of the same dimension row-major\\r\\n\\r\\n\tlet dimension = a.__matrix;\\r\\n\\r\\n\tlet out: float2x2 | float3x3 | float4x4;\\r\\n\tif (dimension === 2) {\\r\\n\t\tout = float2x2();\\r\\n\t} else if (dimension === 3) {\\r\\n\t\tout = float3x3();\\r\\n\t} else if (dimension === 4) {\\r\\n\t\tvar a00 = a[0 * 4 + 0];\\r\\n\t\tvar a01 = a[0 * 4 + 1];\\r\\n\t\tvar a02 = a[0 * 4 + 2];\\r\\n\t\tvar a03 = a[0 * 4 + 3];\\r\\n\t\tvar a10 = a[1 * 4 + 0];\\r\\n\t\tvar a11 = a[1 * 4 + 1];\\r\\n\t\tvar a12 = a[1 * 4 + 2];\\r\\n\t\tvar a13 = a[1 * 4 + 3];\\r\\n\t\tvar a20 = a[2 * 4 + 0];\\r\\n\t\tvar a21 = a[2 * 4 + 1];\\r\\n\t\tvar a22 = a[2 * 4 + 2];\\r\\n\t\tvar a23 = a[2 * 4 + 3];\\r\\n\t\tvar a30 = a[3 * 4 + 0];\\r\\n\t\tvar a31 = a[3 * 4 + 1];\\r\\n\t\tvar a32 = a[3 * 4 + 2];\\r\\n\t\tvar a33 = a[3 * 4 + 3];\\r\\n\t\tvar b00 = b[0 * 4 + 0];\\r\\n\t\tvar b01 = b[0 * 4 + 1];\\r\\n\t\tvar b02 = b[0 * 4 + 2];\\r\\n\t\tvar b03 = b[0 * 4 + 3];\\r\\n\t\tvar b10 = b[1 * 4 + 0];\\r\\n\t\tvar b11 = b[1 * 4 + 1];\\r\\n\t\tvar b12 = b[1 * 4 + 2];\\r\\n\t\tvar b13 = b[1 * 4 + 3];\\r\\n\t\tvar b20 = b[2 * 4 + 0];\\r\\n\t\tvar b21 = b[2 * 4 + 1];\\r\\n\t\tvar b22 = b[2 * 4 + 2];\\r\\n\t\tvar b23 = b[2 * 4 + 3];\\r\\n\t\tvar b30 = b[3 * 4 + 0];\\r\\n\t\tvar b31 = b[3 * 4 + 1];\\r\\n\t\tvar b32 = b[3 * 4 + 2];\\r\\n\t\tvar b33 = b[3 * 4 + 3];\\r\\n\t\treturn float4x4(\\r\\n\t\t\tb00 * a00 + b01 * a10 + b02 * a20 + b03 * a30,\\r\\n\t\t\tb00 * a01 + b01 * a11 + b02 * a21 + b03 * a31,\\r\\n\t\t\tb00 * a02 + b01 * a12 + b02 * a22 + b03 * a32,\\r\\n\t\t\tb00 * a03 + b01 * a13 + b02 * a23 + b03 * a33,\\r\\n\t\t\tb10 * a00 + b11 * a10 + b12 * a20 + b13 * a30,\\r\\n\t\t\tb10 * a01 + b11 * a11 + b12 * a21 + b13 * a31,\\r\\n\t\t\tb10 * a02 + b11 * a12 + b12 * a22 + b13 * a32,\\r\\n\t\t\tb10 * a03 + b11 * a13 + b12 * a23 + b13 * a33,\\r\\n\t\t\tb20 * a00 + b21 * a10 + b22 * a20 + b23 * a30,\\r\\n\t\t\tb20 * a01 + b21 * a11 + b22 * a21 + b23 * a31,\\r\\n\t\t\tb20 * a02 + b21 * a12 + b22 * a22 + b23 * a32,\\r\\n\t\t\tb20 * a03 + b21 * a13 + b22 * a23 + b23 * a33,\\r\\n\t\t\tb30 * a00 + b31 * a10 + b32 * a20 + b33 * a30,\\r\\n\t\t\tb30 * a01 + b31 * a11 + b32 * a21 + b33 * a31,\\r\\n\t\t\tb30 * a02 + b31 * a12 + b32 * a22 + b33 * a32,\\r\\n\t\t\tb30 * a03 + b31 * a13 + b32 * a23 + b33 * a33\\r\\n\t\t);\\r\\n\t\tout = float4x4();\\r\\n\t}\\r\\n\\r\\n\tfor (let i = 0; i < dimension; i++) {\\r\\n\t\tfor (let j = 0; j < dimension; j++) {\\r\\n\t\t\tlet sum: float = float(0);\\r\\n\t\t\tfor (let k = 0; k < dimension; k++) {\\r\\n\t\t\t\tsum += float(a[i * dimension + k] * b[k * dimension + j]);\\r\\n\t\t\t}\\r\\n\t\t\tout[i * dimension + j] = sum;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn out;\\r\\n\\r\\n\tif (a.__matrix === 2 && b.__matrix === 2) {\\r\\n\t\tlet a00 = a[0];\\r\\n\t\tlet a01 = a[1];\\r\\n\t\tlet a10 = a[2];\\r\\n\t\tlet a11 = a[3];\\r\\n\\r\\n\t\tlet b00 = b[0];\\r\\n\t\tlet b01 = b[1];\\r\\n\t\tlet b10 = b[2];\\r\\n\t\tlet b11 = b[3];\\r\\n\\r\\n\t\tlet v = float2x2(\\r\\n\t\t\ta00 * b00 + a01 * b10,\\r\\n\t\t\ta00 * b01 + a01 * b11,\\r\\n\t\t\ta10 * b00 + a11 * b10,\\r\\n\t\t\ta10 * b01 + a11 * b11\\r\\n\t\t);\\r\\n\\r\\n\t\treturn v;\\r\\n\t} else if (a.__matrix === 3 && b.__matrix === 3) {\\r\\n\t\tlet a00 = a[0];\\r\\n\t\tlet a01 = a[1];\\r\\n\t\tlet a02 = a[2];\\r\\n\t\tlet a10 = a[3];\\r\\n\t\tlet a11 = a[4];\\r\\n\t\tlet a12 = a[5];\\r\\n\t\tlet a20 = a[6];\\r\\n\t\tlet a21 = a[7];\\r\\n\t\tlet a22 = a[8];\\r\\n\\r\\n\t\tlet b00 = b[0];\\r\\n\t\tlet b01 = b[1];\\r\\n\t\tlet b02 = b[2];\\r\\n\t\tlet b10 = b[3];\\r\\n\t\tlet b11 = b[4];\\r\\n\t\tlet b12 = b[5];\\r\\n\t\tlet b20 = b[6];\\r\\n\t\tlet b21 = b[7];\\r\\n\t\tlet b22 = b[8];\\r\\n\\r\\n\t\tlet v = float3x3(\\r\\n\t\t\ta00 * b00 + a01 * b10 + a02 * b20,\\r\\n\t\t\ta00 * b01 + a01 * b11 + a02 * b21,\\r\\n\t\t\ta00 * b02 + a01 * b12 + a02 * b22,\\r\\n\t\t\ta10 * b00 + a11 * b10 + a12 * b20,\\r\\n\t\t\ta10 * b01 + a11 * b11 + a12 * b21,\\r\\n\t\t\ta10 * b02 + a11 * b12 + a12 * b22,\\r\\n\t\t\ta20 * b00 + a21 * b10 + a22 * b20,\\r\\n\t\t\ta20 * b01 + a21 * b11 + a22 * b21,\\r\\n\t\t\ta20 * b02 + a21 * b12 + a22 * b22\\r\\n\t\t);\\r\\n\t\treturn v;\\r\\n\t} else if (a.__matrix === 4 && b.__matrix === 4) {\\r\\n\t\tlet a00 = a[0];\\r\\n\t\tlet a01 = a[1];\\r\\n\t\tlet a02 = a[2];\\r\\n\t\tlet a03 = a[3];\\r\\n\t\tlet a10 = a[4];\\r\\n\t\tlet a11 = a[5];\\r\\n\t\tlet a12 = a[6];\\r\\n\t\tlet a13 = a[7];\\r\\n\t\tlet a20 = a[8];\\r\\n\t\tlet a21 = a[9];\\r\\n\t\tlet a22 = a[10];\\r\\n\t\tlet a23 = a[11];\\r\\n\t\tlet a30 = a[12];\\r\\n\t\tlet a31 = a[13];\\r\\n\t\tlet a32 = a[14];\\r\\n\t\tlet a33 = a[15];\\r\\n\\r\\n\t\tlet b00 = b[0];\\r\\n\t\tlet b01 = b[1];\\r\\n\t\tlet b02 = b[2];\\r\\n\t\tlet b03 = b[3];\\r\\n\t\tlet b10 = b[4];\\r\\n\t\tlet b11 = b[5];\\r\\n\t\tlet b12 = b[6];\\r\\n\t\tlet b13 = b[7];\\r\\n\t\tlet b20 = b[8];\\r\\n\t\tlet b21 = b[9];\\r\\n\t\tlet b22 = b[10];\\r\\n\t\tlet b23 = b[11];\\r\\n\t\tlet b30 = b[12];\\r\\n\t\tlet b31 = b[13];\\r\\n\t\tlet b32 = b[14];\\r\\n\t\tlet b33 = b[15];\\r\\n\\r\\n\t\tlet v = float4x4(\\r\\n\t\t\ta00 * b00 + a01 * b10 + a02 * b20 + a03 * b30,\\r\\n\t\t\ta00 * b01 + a01 * b11 + a02 * b21 + a03 * b31,\\r\\n\t\t\ta00 * b02 + a01 * b12 + a02 * b22 + a03 * b32,\\r\\n\t\t\ta00 * b03 + a01 * b13 + a02 * b23 + a03 * b33,\\r\\n\t\t\ta10 * b00 + a11 * b10 + a12 * b20 + a13 * b30,\\r\\n\t\t\ta10 * b01 + a11 * b11 + a12 * b21 + a13 * b31,\\r\\n\t\t\ta10 * b02 + a11 * b12 + a12 * b22 + a13 * b32,\\r\\n\t\t\ta10 * b03 + a11 * b13 + a12 * b23 + a13 * b33,\\r\\n\t\t\ta20 * b00 + a21 * b10 + a22 * b20 + a23 * b30,\\r\\n\t\t\ta20 * b01 + a21 * b11 + a22 * b21 + a23 * b31,\\r\\n\t\t\ta20 * b02 + a21 * b12 + a22 * b22 + a23 * b32,\\r\\n\t\t\ta20 * b03 + a21 * b13 + a22 * b23 + a23 * b33,\\r\\n\t\t\ta30 * b00 + a31 * b10 + a32 * b20 + a33 * b30,\\r\\n\t\t\ta30 * b01 + a31 * b11 + a32 * b21 + a33 * b31,\\r\\n\t\t\ta30 * b02 + a31 * b12 + a32 * b22 + a33 * b32,\\r\\n\t\t\ta30 * b03 + a31 * b13 + a32 * b23 + a33 * b33\\r\\n\t\t);\\r\\n\\r\\n\t\treturn v;\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid matrix multiplication');\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction matrixInversefloat2x2(m: float2x2): float2x2 {\\r\\n\tlet a = m.__index(0).__index(0),\\r\\n\t\tb = m.__index(1).__index(0),\\r\\n\t\tc = m.__index(0).__index(1),\\r\\n\t\td = m.__index(1).__index(1);\\r\\n\tlet det = a * d - b * c;\\r\\n\tif (det === 0) {\\r\\n\t\tthrow new Error('Matrix determinant is zero');\\r\\n\t}\\r\\n\tlet detInv = 1.0 / det;\\r\\n\treturn float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\\r\\n}\\r\\nfunction matrixInversefloat3x3(m: float3x3): float3x3 {\\r\\n\tlet n11 = m.__index(0).__index(0),\\r\\n\t\tn12 = m.__index(1).__index(0),\\r\\n\t\tn13 = m.__index(2).__index(0);\\r\\n\tlet n21 = m.__index(0).__index(1),\\r\\n\t\tn22 = m.__index(1).__index(1),\\r\\n\t\tn23 = m.__index(2).__index(1);\\r\\n\tlet n31 = m.__index(0).__index(2),\\r\\n\t\tn32 = m.__index(1).__index(2),\\r\\n\t\tn33 = m.__index(2).__index(2);\\r\\n\tlet t11 = n33 * n22 - n32 * n23,\\r\\n\t\tt12 = n32 * n13 - n33 * n12,\\r\\n\t\tt13 = n23 * n12 - n22 * n13;\\r\\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13;\\r\\n\tif (det === 0) {\\r\\n\t\tthrow new Error('Invalid matrix inverse');\\r\\n\t}\\r\\n\tlet detInv = 1 / det;\\r\\n\tlet v = float3x3(\\r\\n\t\tt11 * detInv,\\r\\n\t\t(n31 * n23 - n33 * n21) * detInv,\\r\\n\t\t(n32 * n21 - n31 * n22) * detInv,\\r\\n\t\tt12 * detInv,\\r\\n\t\t(n33 * n11 - n31 * n13) * detInv,\\r\\n\t\t(n31 * n12 - n32 * n11) * detInv,\\r\\n\t\tt13 * detInv,\\r\\n\t\t(n21 * n13 - n23 * n11) * detInv,\\r\\n\t\t(n22 * n11 - n21 * n12) * detInv\\r\\n\t);\\r\\n\treturn v;\\r\\n}\\r\\nfunction matrixInversefloat4x4(m: float4x4): float4x4 {\\r\\n\tvar m00 = m[0 * 4 + 0];\\r\\n\tvar m01 = m[0 * 4 + 1];\\r\\n\tvar m02 = m[0 * 4 + 2];\\r\\n\tvar m03 = m[0 * 4 + 3];\\r\\n\tvar m10 = m[1 * 4 + 0];\\r\\n\tvar m11 = m[1 * 4 + 1];\\r\\n\tvar m12 = m[1 * 4 + 2];\\r\\n\tvar m13 = m[1 * 4 + 3];\\r\\n\tvar m20 = m[2 * 4 + 0];\\r\\n\tvar m21 = m[2 * 4 + 1];\\r\\n\tvar m22 = m[2 * 4 + 2];\\r\\n\tvar m23 = m[2 * 4 + 3];\\r\\n\tvar m30 = m[3 * 4 + 0];\\r\\n\tvar m31 = m[3 * 4 + 1];\\r\\n\tvar m32 = m[3 * 4 + 2];\\r\\n\tvar m33 = m[3 * 4 + 3];\\r\\n\tvar tmp_0 = m22 * m33;\\r\\n\tvar tmp_1 = m32 * m23;\\r\\n\tvar tmp_2 = m12 * m33;\\r\\n\tvar tmp_3 = m32 * m13;\\r\\n\tvar tmp_4 = m12 * m23;\\r\\n\tvar tmp_5 = m22 * m13;\\r\\n\tvar tmp_6 = m02 * m33;\\r\\n\tvar tmp_7 = m32 * m03;\\r\\n\tvar tmp_8 = m02 * m23;\\r\\n\tvar tmp_9 = m22 * m03;\\r\\n\tvar tmp_10 = m02 * m13;\\r\\n\tvar tmp_11 = m12 * m03;\\r\\n\tvar tmp_12 = m20 * m31;\\r\\n\tvar tmp_13 = m30 * m21;\\r\\n\tvar tmp_14 = m10 * m31;\\r\\n\tvar tmp_15 = m30 * m11;\\r\\n\tvar tmp_16 = m10 * m21;\\r\\n\tvar tmp_17 = m20 * m11;\\r\\n\tvar tmp_18 = m00 * m31;\\r\\n\tvar tmp_19 = m30 * m01;\\r\\n\tvar tmp_20 = m00 * m21;\\r\\n\tvar tmp_21 = m20 * m01;\\r\\n\tvar tmp_22 = m00 * m11;\\r\\n\tvar tmp_23 = m10 * m01;\\r\\n\\r\\n\tvar t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\\r\\n\tvar t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\\r\\n\tvar t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\\r\\n\tvar t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\\r\\n\\r\\n\tvar d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\\r\\n\tif (d === 0) {\\r\\n\t\tthrow new Error('Invalid matrix inverse');\\r\\n\t}\\r\\n\treturn float4x4(\\r\\n\t\td * t0,\\r\\n\t\td * t1,\\r\\n\t\td * t2,\\r\\n\t\td * t3,\\r\\n\t\td * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)),\\r\\n\t\td * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)),\\r\\n\t\td * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)),\\r\\n\t\td * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)),\\r\\n\t\td * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)),\\r\\n\t\td * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)),\\r\\n\t\td * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)),\\r\\n\t\td * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)),\\r\\n\t\td * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)),\\r\\n\t\td * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)),\\r\\n\t\td * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)),\\r\\n\t\td * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02))\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixTransposefloat2x2(m: float2x2): float2x2 {\\r\\n\treturn float2x2(\\r\\n\t\tm.__index(0).__index(0),\\r\\n\t\tm.__index(1).__index(0),\\r\\n\t\tm.__index(0).__index(1),\\r\\n\t\tm.__index(1).__index(1)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixTransposefloat3x3(m: float3x3): float3x3 {\\r\\n\treturn float3x3(\\r\\n\t\tm.__index(0).__index(0),\\r\\n\t\tm.__index(1).__index(0),\\r\\n\t\tm.__index(2).__index(0),\\r\\n\t\tm.__index(0).__index(1),\\r\\n\t\tm.__index(1).__index(1),\\r\\n\t\tm.__index(2).__index(1),\\r\\n\t\tm.__index(0).__index(2),\\r\\n\t\tm.__index(1).__index(2),\\r\\n\t\tm.__index(2).__index(2)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixTransposefloat4x4(m: float4x4): float4x4 {\\r\\n\treturn float4x4(\\r\\n\t\tm.__index(0).__index(0),\\r\\n\t\tm.__index(1).__index(0),\\r\\n\t\tm.__index(2).__index(0),\\r\\n\t\tm.__index(3).__index(0),\\r\\n\t\tm.__index(0).__index(1),\\r\\n\t\tm.__index(1).__index(1),\\r\\n\t\tm.__index(2).__index(1),\\r\\n\t\tm.__index(3).__index(1),\\r\\n\t\tm.__index(0).__index(2),\\r\\n\t\tm.__index(1).__index(2),\\r\\n\t\tm.__index(2).__index(2),\\r\\n\t\tm.__index(3).__index(2),\\r\\n\t\tm.__index(0).__index(3),\\r\\n\t\tm.__index(1).__index(3),\\r\\n\t\tm.__index(2).__index(3),\\r\\n\t\tm.__index(3).__index(3)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction matrixMul2x2float2(a: float2x2, b: float2): float2 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let j = 0; j < 2; j++) {\\r\\n\t\tfor (let i = 0; i < 2; i++) {\\r\\n\t\t\tc[i] += a[j * 2 + i] * b[j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float2;\\r\\n}\\r\\n\\r\\nfunction matrixMul3x3float3(a: float3x3, b: float3): float3 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let i = 0; i < 3; i++) {\\r\\n\t\tfor (let j = 0; j < 3; j++) {\\r\\n\t\t\tc[i] += a[j * 3 + i] * b[j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float3;\\r\\n}\\r\\n\\r\\nfunction matrixMul4x4float4(a: float4x4, b: float4): float4 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let j = 0; j < 4; j++) {\\r\\n\t\tfor (let i = 0; i < 4; i++) {\\r\\n\t\t\tc[i] += a[j * 4 + i] * b[j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float4;\\r\\n}\\r\\n\\r\\nfunction matrixMulfloat22x2(a: float2, b: float2x2): float2 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let j = 0; j < 2; j++) {\\r\\n\t\tfor (let i = 0; i < 2; i++) {\\r\\n\t\t\tc[i] += a[j] * b[i * 2 + j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float2;\\r\\n}\\r\\n\\r\\nfunction matrixMulfloat33x3(a: float3, b: float3x3): float3 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let i = 0; i < 3; i++) {\\r\\n\t\tfor (let j = 0; j < 3; j++) {\\r\\n\t\t\tc[i] += a[j] * b[i * 3 + j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float3;\\r\\n}\\r\\n\\r\\nfunction matrixMulfloat44x4(a: float4, b: float4x4): float4 {\\r\\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar, 0 as scalar];\\r\\n\\r\\n\tfor (let i = 0; i < 4; i++) {\\r\\n\t\tfor (let j = 0; j < 4; j++) {\\r\\n\t\t\tc[i] += a[j] * b[i * 4 + j];\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\treturn c as float4;\\r\\n}\\r\\n\\r\\nlet mulFunc: (a: any, b: any) => any = componentOp((a, b) => a * b);\\r\\n\\r\\n/** @shadeup=univ(#matrix_inverse)*/\\r\\nexport function inverse(a: float2x2): float2x2;\\r\\nexport function inverse(a: float3x3): float3x3;\\r\\nexport function inverse(a: float4x4): float4x4;\\r\\nexport function inverse(a: float2x2 | float3x3 | float4x4): float2x2 | float3x3 | float4x4 {\\r\\n\tif (a.__matrix == 2) {\\r\\n\t\treturn matrixInversefloat2x2(a as float2x2);\\r\\n\t} else if (a.__matrix == 3) {\\r\\n\t\treturn matrixInversefloat3x3(a as float3x3);\\r\\n\t} else if (a.__matrix == 4) {\\r\\n\t\treturn matrixInversefloat4x4(a as float4x4);\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(#matrix_transpose)*/\\r\\nexport function transpose(a: float2x2): float2x2;\\r\\nexport function transpose(a: float3x3): float3x3;\\r\\nexport function transpose(a: float4x4): float4x4;\\r\\nexport function transpose(a: float2x2 | float3x3 | float4x4): float2x2 | float3x3 | float4x4 {\\r\\n\tif (a.__matrix == 2) {\\r\\n\t\treturn matrixTransposefloat2x2(a as float2x2);\\r\\n\t} else if (a.__matrix == 3) {\\r\\n\t\treturn matrixTransposefloat3x3(a as float3x3);\\r\\n\t} else if (a.__matrix == 4) {\\r\\n\t\treturn matrixTransposefloat4x4(a as float4x4);\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!$0$ * $1$)*/\\r\\nexport const mul: componentOverload & componentOverloadMatrix = (a: any, b: any): any => {\\r\\n\tif (isMatrix(a) || isMatrix(b)) {\\r\\n\t\tif (isMatrix(a) && isMatrix(b)) {\\r\\n\t\t\treturn matrixMul(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tif (isMatrix(a) && typeof b == 'number') {\\r\\n\t\t\t\treturn componentMath(b as scalar, a as any, (a, b) => a * b);\\r\\n\t\t\t} else if (isMatrix(b) && typeof a == 'number') {\\r\\n\t\t\t\treturn componentMath(a as scalar, b as any, (a, b) => a * b);\\r\\n\t\t\t} else {\\r\\n\t\t\t\tif (isMatrix(a)) {\\r\\n\t\t\t\t\tif (a.length == 4) {\\r\\n\t\t\t\t\t\treturn matrixMul2x2float2(a as float2x2, b as float2);\\r\\n\t\t\t\t\t} else if (a.length == 9) {\\r\\n\t\t\t\t\t\treturn matrixMul3x3float3(a as float3x3, b as float3);\\r\\n\t\t\t\t\t} else if (a.length == 16) {\\r\\n\t\t\t\t\t\treturn matrixMul4x4float4(a as float4x4, b as float4);\\r\\n\t\t\t\t\t}\\r\\n\t\t\t\t} else if (isMatrix(b)) {\\r\\n\t\t\t\t\tif (b.length == 4) {\\r\\n\t\t\t\t\t\treturn matrixMulfloat22x2(a as float2, b as float2x2);\\r\\n\t\t\t\t\t} else if (b.length == 9) {\\r\\n\t\t\t\t\t\treturn matrixMulfloat33x3(a as float3, b as float3x3);\\r\\n\t\t\t\t\t} else if (b.length == 16) {\\r\\n\t\t\t\t\t\treturn matrixMulfloat44x4(a as float4, b as float4x4);\\r\\n\t\t\t\t\t}\\r\\n\t\t\t\t}\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\treturn mulFunc(a, b);\\r\\n\t}\\r\\n};\\r\\n\\r\\n/** @shadeup=univ(!$0$ / $1$)*/\\r\\nexport const div = componentOp((a, b) => a / b);\\r\\n\\r\\n/** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\\r\\nexport const pow = componentOp((a, b) => Math.pow(a, b));\\r\\n\\r\\n/** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\\r\\nexport const mod = componentOpMatch((a, b) => a - b * Math.floor(a / b));\\r\\n\\r\\n/** @shadeup=univ(!$0$ & $1$)*/\\r\\nexport const bitand = componentOp((a, b) => a & b);\\r\\n\\r\\n/** @shadeup=univ(!$0$ | $1$)*/\\r\\nexport const bitor = componentOp((a, b) => a | b);\\r\\n\\r\\n/** @shadeup=univ(!$0$ ^ $1$)*/\\r\\nexport const bitxor = componentOp((a, b) => a ^ b);\\r\\n\\r\\n/** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\\r\\nexport const lshift = componentOp((a, b) => a << b);\\r\\n\\r\\n/** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\\r\\nexport const rshift = componentOp((a, b) => a >> b);\\r\\n\\r\\n/** @shadeup=univ(!~$0$)*/\\r\\nexport const bitnot = componentOpSingular((a) => ~a);\\r\\n\\r\\n/** @shadeup=univ(!-($0$))*/\\r\\nexport const negate = componentOpSingular((a) => -a);\\r\\n\\r\\n/** @shadeup=univ(!+($0$))*/\\r\\nexport const positive = componentOpSingular((a) => Math.abs(a));\\r\\n\\r\\n/** @shadeup=univ(abs)*/\\r\\nexport const abs = componentOpSingular((a) => Math.abs(a));\\r\\n\\r\\n/**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\\r\\nexport const floor = componentOpSingular(Math.floor);\\r\\n\\r\\n/** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\\r\\nexport const ceil = componentOpSingular(Math.ceil);\\r\\n\\r\\n/** @shadeup=univ(round)*/\\r\\nexport const round = componentOpSingular(Math.round);\\r\\n\\r\\n/** @shadeup=univ(sign)*/\\r\\nexport const sign = componentOpSingular(Math.sign);\\r\\n\\r\\n/** @shadeup=univ(cos) */\\r\\nexport const cos = componentOpSingular(Math.cos);\\r\\n\\r\\n/** @shadeup=univ(sin) */\\r\\nexport const sin = componentOpSingularFloat(Math.sin);\\r\\n\\r\\n/** @shadeup=univ(tan) */\\r\\nexport const tan = componentOpSingular(Math.tan);\\r\\n\\r\\n/** @shadeup=univ(acos) */\\r\\nexport const acos = componentOpSingular(Math.acos);\\r\\n\\r\\n/** @shadeup=univ(asin) */\\r\\nexport const asin = componentOpSingular(Math.asin);\\r\\n\\r\\n/** @shadeup=univ(atan) */\\r\\nexport const atan = componentOpSingular(Math.atan);\\r\\n\\r\\n/** @shadeup=univ(atan2) */\\r\\nexport const atan2: (dy: float, dx: float) => float = Math.atan2 as any;\\r\\n\\r\\n/** @shadeup=univ(cosh) */\\r\\nexport const cosh = componentOpSingular(Math.cosh);\\r\\n\\r\\n/** @shadeup=univ(sinh) */\\r\\nexport const sinh = componentOpSingular(Math.sinh);\\r\\n\\r\\n/** @shadeup=univ(tanh) */\\r\\nexport const tanh = componentOpSingular(Math.tanh);\\r\\n\\r\\n/** @shadeup=univ(acosh) */\\r\\nexport const acosh = componentOpSingular(Math.acosh);\\r\\n\\r\\n/** @shadeup=univ(asinh) */\\r\\nexport const asinh = componentOpSingular(Math.asinh);\\r\\n\\r\\n/** @shadeup=univ(atanh) */\\r\\nexport const atanh = componentOpSingular(Math.atanh);\\r\\n\\r\\n/** @shadeup=univ(exp) */\\r\\nexport const exp = componentOpSingular(Math.exp);\\r\\n\\r\\n/** @shadeup=univ(log) */\\r\\nexport const log = componentOpSingular(Math.log);\\r\\n\\r\\n/** @shadeup=univ(log2) */\\r\\nexport const log2 = componentOpSingular(Math.log2);\\r\\n\\r\\n/** @shadeup=univ(log10) */\\r\\nexport const log10 = componentOpSingular(Math.log10);\\r\\n\\r\\n/** @shadeup=univ(sqrt) */\\r\\nexport const sqrt = componentOpSingular(Math.sqrt);\\r\\n\\r\\n/** @shadeup=univ(inversesqrt) */\\r\\nexport const inversesqrt = componentOpSingular((a) => 1 / Math.sqrt(a));\\r\\n\\r\\n/** @shadeup=univ(fract)*/\\r\\nexport const frac = componentOpSingular((a) => a - Math.floor(a));\\r\\n\\r\\nexport function wrap(x: float, low: float, high: float): float {\\r\\n\tif (lt(x, low)) {\\r\\n\t\tlet rng = sub(high, low);\\r\\n\t\tlet s1 = sub(low, x);\\r\\n\t\tlet ms = mod(s1, rng);\\r\\n\t\treturn sub(high, ms);\\r\\n\t} else if (gte(x, high)) {\\r\\n\t\tlet rng = sub(high, low);\\r\\n\t\tlet s1 = sub(x, high);\\r\\n\t\tlet ms = mod(s1, rng);\\r\\n\t\treturn add(low, ms);\\r\\n\t} else {\\r\\n\t\treturn x;\\r\\n\t}\\r\\n\t// return add(mod(sub(x, low), sub(high, low)), low) as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a deterministic (same seed = same output) random float between 0-1\\r\\n *\\r\\n * **Note:** See the noise package for more advanced random functions\\r\\n */\\r\\n\\r\\nexport function rand(seed?: float): float {\\r\\n\tif (typeof seed === 'number') {\\r\\n\t\treturn frac(mul(sin(mul(seed, float(91.3458))), float(47453.5453))) as float;\\r\\n\t} else {\\r\\n\t\treturn Math.random() as float;\\r\\n\t}\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a deterministic (same seed = same output) random float between 0-1\\r\\n *\\r\\n * **Note:** See the noise package for more advanced random functions\\r\\n */\\r\\nexport function rand2(seed: float2): float {\\r\\n\treturn frac(mul(sin(dot(seed, float2(12.9898, 4.1414))), float(43758.5453)));\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a deterministic (same seed = same output) random float between 0-1\\r\\n *\\r\\n * **Note:** See the noise package for more advanced random functions\\r\\n */\\r\\nexport function rand3(seed: float3): float {\\r\\n\treturn rand2(add(swizzle(seed, 'xy'), rand(swizzle(seed, 'z'))));\\r\\n}\\r\\n\\r\\n// export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\\r\\n// \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\\r\\n// }\\r\\n\\r\\nexport function pingpong(x: float, length: float): float {\\r\\n\tconst t = mod(x, mul(length, float(2)));\\r\\n\treturn sub(length, abs(sub(t, length)));\\r\\n}\\r\\n\\r\\nfunction vectorMath_2to1_3to3(\\r\\n\tcb2: (a: vector2, b: vector2) => scalar,\\r\\n\tcb3: (a: vector3, b: vector3) => vector3\\r\\n): vectorOverload_2to1_3to3 {\\r\\n\treturn (a: any, b: any): any => {\\r\\n\t\tif (a.length === 2 && b.length === 2) {\\r\\n\t\t\treturn cb2(a, b);\\r\\n\t\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\t\treturn cb3(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid vector length');\\r\\n\t\t}\\r\\n\t};\\r\\n}\\r\\n\\r\\nfunction vectorMath_2to1_3to3_4to4(\\r\\n\tcb2: (a: vector2, b: vector2) => scalar,\\r\\n\tcb3: (a: vector3, b: vector3) => vector3,\\r\\n\tcb4: (a: vector4, b: vector4) => vector4\\r\\n): vectorOverload_2to1_3to3_4to4 {\\r\\n\treturn (a: any, b: any): any => {\\r\\n\t\tif (a.length === 2 && b.length === 2) {\\r\\n\t\t\treturn cb2(a, b);\\r\\n\t\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\t\treturn cb3(a, b);\\r\\n\t\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\t\treturn cb4(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid vector length');\\r\\n\t\t}\\r\\n\t};\\r\\n}\\r\\nfunction vectorMath_2to1_3to1_4to1(\\r\\n\tcb2: (a: vector2, b: vector2) => scalar,\\r\\n\tcb3: (a: vector3, b: vector3) => scalar,\\r\\n\tcb4: (a: vector4, b: vector4) => scalar\\r\\n): vectorOverload_2to1_3to1_4to1 {\\r\\n\treturn (a: any, b: any): any => {\\r\\n\t\tif (a.length === 2 && b.length === 2) {\\r\\n\t\t\treturn cb2(a, b);\\r\\n\t\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\t\treturn cb3(a, b);\\r\\n\t\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\t\treturn cb4(a, b);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid vector length');\\r\\n\t\t}\\r\\n\t};\\r\\n}\\r\\n\\r\\nfunction cross2(a: float2, b: float2): any {\\r\\n\treturn a[0] * b[1] - a[1] * b[0];\\r\\n}\\r\\n\\r\\nfunction cross3(a: float3, b: float3): any {\\r\\n\treturn [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\\r\\n}\\r\\n\\r\\nexport const cross = vectorMath_2to1_3to3(cross2, cross3);\\r\\n\\r\\nfunction dot2(a: float2, b: float2): any {\\r\\n\treturn a[0] * b[0] + a[1] * b[1];\\r\\n}\\r\\n\\r\\nfunction dot3(a: float3, b: float3): any {\\r\\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\\r\\n}\\r\\n\\r\\nfunction dot4(a: float4, b: float4): any {\\r\\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(dot)*/\\r\\nexport const dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\\r\\n\\r\\nfunction lerp1(a: float, b: float, t: float): float {\\r\\n\treturn (a + (b - a) * t) as float;\\r\\n}\\r\\n\\r\\nfunction lerp2(a: float2, b: float2, t: float): float2 {\\r\\n\treturn [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)] as float2;\\r\\n}\\r\\n\\r\\nfunction lerp3(a: float3, b: float3, t: float): float3 {\\r\\n\treturn [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)] as float3;\\r\\n}\\r\\n\\r\\nfunction lerp4(a: float4, b: float4, t: float): float4 {\\r\\n\treturn [\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t)\\r\\n\t] as float4;\\r\\n}\\r\\n\\r\\nfunction lerp2x2(a: float2x2, b: float2x2, t: float): float2x2 {\\r\\n\treturn float2x2(\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction lerp3x3(a: float3x3, b: float3x3, t: float): float3x3 {\\r\\n\treturn float3x3(\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t),\\r\\n\t\tlerp1(a[4], b[4], t),\\r\\n\t\tlerp1(a[5], b[5], t),\\r\\n\t\tlerp1(a[6], b[6], t),\\r\\n\t\tlerp1(a[7], b[7], t),\\r\\n\t\tlerp1(a[8], b[8], t)\\r\\n\t);\\r\\n}\\r\\n\\r\\nfunction lerp4x4(a: float4x4, b: float4x4, t: float): float4x4 {\\r\\n\treturn float4x4(\\r\\n\t\tlerp1(a[0], b[0], t),\\r\\n\t\tlerp1(a[1], b[1], t),\\r\\n\t\tlerp1(a[2], b[2], t),\\r\\n\t\tlerp1(a[3], b[3], t),\\r\\n\t\tlerp1(a[4], b[4], t),\\r\\n\t\tlerp1(a[5], b[5], t),\\r\\n\t\tlerp1(a[6], b[6], t),\\r\\n\t\tlerp1(a[7], b[7], t),\\r\\n\t\tlerp1(a[8], b[8], t),\\r\\n\t\tlerp1(a[9], b[9], t),\\r\\n\t\tlerp1(a[10], b[10], t),\\r\\n\t\tlerp1(a[11], b[11], t),\\r\\n\t\tlerp1(a[12], b[12], t),\\r\\n\t\tlerp1(a[13], b[13], t),\\r\\n\t\tlerp1(a[14], b[14], t),\\r\\n\t\tlerp1(a[15], b[15], t)\\r\\n\t);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(mix)*/\\r\\nexport function lerp(a: float, b: float, t: float): float;\\r\\nexport function lerp(a: float2, b: float2, t: float): float2;\\r\\nexport function lerp(a: float3, b: float3, t: float): float3;\\r\\nexport function lerp(a: float4, b: float4, t: float): float4;\\r\\nexport function lerp(a: float2x2, b: float2x2, t: float): float2x2;\\r\\nexport function lerp(a: float3x3, b: float3x3, t: float): float3x3;\\r\\nexport function lerp(a: float4x4, b: float4x4, t: float): float4x4;\\r\\n/** @shadeup=univ(mix)*/\\r\\nexport function lerp(a: any, b: any, t: float): any {\\r\\n\tif (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\\r\\n\t\treturn lerp1(a as float, b as float, t);\\r\\n\t} else if (isMatrix(a) && isMatrix(b)) {\\r\\n\t\tif (a.length === 4 && b.length === 4) {\\r\\n\t\t\treturn lerp2x2(a as float2x2, b as float2x2, t);\\r\\n\t\t} else if (a.length === 9 && b.length === 9) {\\r\\n\t\t\treturn lerp3x3(a as float3x3, b as float3x3, t);\\r\\n\t\t} else if (a.length === 16 && b.length === 16) {\\r\\n\t\t\treturn lerp4x4(a as float4x4, b as float4x4, t);\\r\\n\t\t} else {\\r\\n\t\t\tthrow new Error('Invalid matrix length');\\r\\n\t\t}\\r\\n\t} else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\\r\\n\t\treturn lerp2(a, b, t as float);\\r\\n\t} else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\\r\\n\t\treturn lerp3(a, b, t);\\r\\n\t} else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\\r\\n\t\treturn lerp4(a, b, t);\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\\r\\nexport function bilerp(a: float, b: float, c: float, d: float, u: float, v: float): float;\\r\\nexport function bilerp(a: float2, b: float2, c: float2, d: float2, u: float, v: float): float2;\\r\\nexport function bilerp(a: float3, b: float3, c: float3, d: float3, u: float, v: float): float3;\\r\\nexport function bilerp(a: float4, b: float4, c: float4, d: float4, u: float, v: float): float4;\\r\\nexport function bilerp(\\r\\n\ta: float2x2,\\r\\n\tb: float2x2,\\r\\n\tc: float2x2,\\r\\n\td: float2x2,\\r\\n\tu: float,\\r\\n\tv: float\\r\\n): float2x2;\\r\\nexport function bilerp(\\r\\n\ta: float3x3,\\r\\n\tb: float3x3,\\r\\n\tc: float3x3,\\r\\n\td: float3x3,\\r\\n\tu: float,\\r\\n\tv: float\\r\\n): float3x3;\\r\\nexport function bilerp(\\r\\n\ta: float4x4,\\r\\n\tb: float4x4,\\r\\n\tc: float4x4,\\r\\n\td: float4x4,\\r\\n\tu: float,\\r\\n\tv: float\\r\\n): float4x4;\\r\\n/** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\\r\\nexport function bilerp(a: any, b: any, c: any, d: any, u: float, v: float): any {\\r\\n\treturn lerp(lerp(a, b, u), lerp(c, d, u), v);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(length)*/\\r\\nexport function length(a: float): float;\\r\\nexport function length(a: float2): float;\\r\\nexport function length(a: float3): float;\\r\\nexport function length(a: float4): float;\\r\\n/** @shadeup=univ(length)*/\\r\\nexport function length(a: any): any {\\r\\n\tif (typeof a === 'number') {\\r\\n\t\treturn Math.abs(a);\\r\\n\t} else if (a.length === 2) {\\r\\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\\r\\n\t} else if (a.length === 3) {\\r\\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\\r\\n\t} else if (a.length === 4) {\\r\\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(distance)*/\\r\\nexport function dist(a: float, b: float): float;\\r\\nexport function dist(a: float2, b: float2): float;\\r\\nexport function dist(a: float3, b: float3): float;\\r\\nexport function dist(a: float4, b: float4): float;\\r\\nexport function dist<T extends vectorOrScalar>(a: T, b: T): float {\\r\\n\treturn length(sub(a, b));\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(distance)*/\\r\\nexport const distance = dist;\\r\\n\\r\\n/** @shadeup=univ(normalize)*/\\r\\nexport function normalize(a: float2): float2;\\r\\nexport function normalize(a: float3): float3;\\r\\nexport function normalize(a: float4): float4;\\r\\n/** @shadeup=univ(normalize)*/\\r\\nexport function normalize(a: any): any {\\r\\n\tif (a.length === 2) {\\r\\n\t\tlet l = length(a);\\r\\n\t\treturn [a[0] / l, a[1] / l];\\r\\n\t} else if (a.length === 3) {\\r\\n\t\tlet l = length(a);\\r\\n\t\treturn [a[0] / l, a[1] / l, a[2] / l];\\r\\n\t} else if (a.length === 4) {\\r\\n\t\tlet l = length(a);\\r\\n\t\treturn [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(reflect)*/\\r\\nexport function reflect(a: float2, b: float2): float2;\\r\\nexport function reflect(a: float3, b: float3): float3;\\r\\nexport function reflect(a: float4, b: float4): float4;\\r\\n/** @shadeup=univ(reflect)*/\\r\\nexport function reflect(a: any, b: any): any {\\r\\n\tif (a.length === 2 && b.length === 2) {\\r\\n\t\treturn reflect2(a, b);\\r\\n\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\treturn reflect3(a, b);\\r\\n\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\treturn reflect4(a, b);\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction reflect2(b, a) {\\r\\n\tlet dot = dot2(a, b);\\r\\n\treturn [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\\r\\n}\\r\\n\\r\\nfunction reflect3(b, a) {\\r\\n\tlet dot = dot3(a, b);\\r\\n\treturn [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\\r\\n}\\r\\n\\r\\nfunction reflect4(b, a) {\\r\\n\tlet dot = dot4(a, b);\\r\\n\treturn [\\r\\n\t\tb[0] - 2 * dot * a[0],\\r\\n\t\tb[1] - 2 * dot * a[1],\\r\\n\t\tb[2] - 2 * dot * a[2],\\r\\n\t\tb[3] - 2 * dot * a[3]\\r\\n\t];\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(refract)*/\\r\\nexport function refract(a: float2, b: float2, eta: float): float2;\\r\\nexport function refract(a: float3, b: float3, eta: float): float3;\\r\\nexport function refract(a: float4, b: float4, eta: float): float4;\\r\\n/** @shadeup=univ(refract)*/\\r\\nexport function refract(a: any, b: any, eta: number): any {\\r\\n\tif (a.length === 2 && b.length === 2) {\\r\\n\t\treturn refract2(a, b, eta);\\r\\n\t} else if (a.length === 3 && b.length === 3) {\\r\\n\t\treturn refract3(a, b, eta);\\r\\n\t} else if (a.length === 4 && b.length === 4) {\\r\\n\t\treturn refract4(a, b, eta);\\r\\n\t} else {\\r\\n\t\tthrow new Error('Invalid vector length');\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction refract2(b, a, eta) {\\r\\n\tlet dot = dot2(a, b);\\r\\n\tlet k = 1 - eta * eta * (1 - dot * dot);\\r\\n\treturn k < 0\\r\\n\t\t? [0, 0]\\r\\n\t\t: [\\r\\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\r\\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\\r\\n\t\t  ];\\r\\n}\\r\\n\\r\\nfunction refract3(b, a, eta) {\\r\\n\tlet dot = dot3(a, b);\\r\\n\tlet k = 1 - eta * eta * (1 - dot * dot);\\r\\n\treturn k < 0\\r\\n\t\t? [0, 0, 0]\\r\\n\t\t: [\\r\\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\r\\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\\r\\n\t\t\t\teta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\\r\\n\t\t  ];\\r\\n}\\r\\n\\r\\nfunction refract4(b, a, eta) {\\r\\n\tlet dot = dot4(a, b);\\r\\n\tlet k = 1 - eta * eta * (1 - dot * dot);\\r\\n\treturn k < 0\\r\\n\t\t? [0, 0, 0, 0]\\r\\n\t\t: [\\r\\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\r\\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\\r\\n\t\t\t\teta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\\r\\n\t\t\t\teta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\\r\\n\t\t  ];\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(degrees)*/\\r\\nexport function degrees(a: float): float {\\r\\n\treturn float((a * 180) / Math.PI);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(radians)*/\\r\\nexport function radians(a: float): float {\\r\\n\treturn float((a * Math.PI) / 180);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(step)*/\\r\\nexport function step(edge: float, x: float): float;\\r\\nexport function step(edge: int, x: float): float;\\r\\nexport function step<T extends vector>(edge: T, x: T): T;\\r\\nexport function step<T extends vector>(edge: float, x: T): T;\\r\\nexport function step<T extends vector>(edge: int, x: T): T;\\r\\n/** @shadeup=univ(step)*/\\r\\nexport function step(edge: any, x: any): any {\\r\\n\tif (typeof edge === 'number') {\\r\\n\t\tif (typeof x === 'number') {\\r\\n\t\t\treturn x < edge ? 0 : 1;\\r\\n\t\t} else {\\r\\n\t\t\treturn x.map((v) => (v < edge ? 0 : 1));\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\tif (typeof x === 'number') {\\r\\n\t\t\treturn edge.map((v) => (x < v ? 0 : 1));\\r\\n\t\t} else {\\r\\n\t\t\treturn edge.map((v, i) => (x[i] < v ? 0 : 1));\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction _smoothstep(a, b, x) {\\r\\n\tlet t = clamp((x - a) / (b - a), 0, 1);\\r\\n\treturn t * t * (3 - 2 * t);\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(smoothstep)*/\\r\\nexport function smoothstep(a: float, b: float, x: float): float;\\r\\nexport function smoothstep(a: float2, b: float2, x: float2): float2;\\r\\nexport function smoothstep(a: float3, b: float3, x: float3): float3;\\r\\nexport function smoothstep(a: float4, b: float4, x: float4): float4;\\r\\n/** @shadeup=univ(smoothstep)*/\\r\\nexport function smoothstep(a: any, b: any, x: any): any {\\r\\n\tif (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\\r\\n\t\treturn _smoothstep(a, b, x);\\r\\n\t} else if (typeof a === 'number' && typeof b === 'number') {\\r\\n\t\treturn x.map((v) => _smoothstep(a, b, v));\\r\\n\t} else {\\r\\n\t\treturn a.map((v, i) => _smoothstep(v, b[i], x[i]));\\r\\n\t}\\r\\n}\\r\\n\\r\\nfunction componentReduce(vectors: vector[], cb: (a: scalar[]) => scalar) {\\r\\n\tlet result: scalar[] = [];\\r\\n\tfor (let i = 0; i < vectors[0].length; i++) {\\r\\n\t\tresult.push(cb(vectors.map((v) => v[i])));\\r\\n\t}\\r\\n\treturn result;\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(min)*/\\r\\n\\r\\nexport function min(a: int, ...b: int[]): int;\\r\\nexport function min(a: int2, ...b: int2[]): int2;\\r\\nexport function min(a: int3, ...b: int3[]): int3;\\r\\nexport function min(a: int4, ...b: int4[]): int4;\\r\\nexport function min(a: float, ...b: float[]): float;\\r\\nexport function min(a: float2, ...b: float2[]): float2;\\r\\nexport function min(a: float3, ...b: float3[]): float3;\\r\\nexport function min(a: float4, ...b: float4[]): float4;\\r\\n\\r\\nexport function min<T extends float2 | float3 | float4>(a: float, b: T): T;\\r\\nexport function min<T extends float2 | float3 | float4>(a: T, b: float): T;\\r\\nexport function min<T extends int2 | int3 | int4>(a: int, b: T): T;\\r\\nexport function min<T extends int2 | int3 | int4>(a: T, b: int): T;\\r\\n\\r\\n/** @shadeup=univ(min)*/\\r\\nexport function min<T extends vectorOrScalar>(...args: T[]): T {\\r\\n\tif (args.length == 1) {\\r\\n\t\tif (Array.isArray(args[0])) {\\r\\n\t\t\treturn Math.min(...args[0]) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn args[0];\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\tif (Array.isArray(args[0]) && !Array.isArray(args[1])) {\\r\\n\t\t\tlet minTo = args[1] as float;\\r\\n\t\t\treturn args[0].map((v) => Math.min(v, minTo)) as T;\\r\\n\t\t} else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\\r\\n\t\t\tlet minFrom = args[0] as float;\\r\\n\t\t\treturn args[1].map((v) => Math.min(minFrom, v)) as T;\\r\\n\t\t} else if (Array.isArray(args[0])) {\\r\\n\t\t\treturn componentReduce(args as vector[], (a) => Math.min(...a) as scalar) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn Math.min(...(args as number[])) as T;\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(max)*/\\r\\n\\r\\nexport function max(a: int, ...b: int[]): int;\\r\\nexport function max(a: float, ...b: int[]): float;\\r\\nexport function max(a: int, ...b: float[]): float;\\r\\nexport function max(a: int2, ...b: int2[]): int2;\\r\\nexport function max(a: int3, ...b: int3[]): int3;\\r\\nexport function max(a: int4, ...b: int4[]): int4;\\r\\nexport function max(a: float, ...b: float[]): float;\\r\\nexport function max(a: float2, ...b: float2[]): float2;\\r\\nexport function max(a: float3, ...b: float3[]): float3;\\r\\nexport function max(a: float4, ...b: float4[]): float4;\\r\\n\\r\\nexport function max<T extends float2 | float3 | float4>(a: float, b: T): T;\\r\\nexport function max<T extends float2 | float3 | float4>(a: T, b: float): T;\\r\\nexport function max<T extends int2 | int3 | int4>(a: int, b: T): T;\\r\\nexport function max<T extends int2 | int3 | int4>(a: T, b: int): T;\\r\\n/** @shadeup=univ(max)*/\\r\\nexport function max<T extends vectorOrScalar>(...args: T[]): T {\\r\\n\tif (args.length == 1) {\\r\\n\t\tif (Array.isArray(args[0])) {\\r\\n\t\t\treturn Math.max(...args[0]) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn args[0];\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\tif (Array.isArray(args[0]) && !Array.isArray(args[1])) {\\r\\n\t\t\tlet maxTo = args[1] as float;\\r\\n\t\t\treturn args[0].map((v) => Math.max(v, maxTo)) as T;\\r\\n\t\t} else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\\r\\n\t\t\tlet maxFrom = args[0] as float;\\r\\n\t\t\treturn args[1].map((v) => Math.max(maxFrom, v)) as T;\\r\\n\t\t} else if (Array.isArray(args[0])) {\\r\\n\t\t\treturn componentReduce(args as vector[], (a) => Math.max(...a) as scalar) as T;\\r\\n\t\t} else {\\r\\n\t\t\treturn Math.max(...(args as number[])) as T;\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(clamp)*/\\r\\nexport function clamp(arg: int, min: int, max: int): int;\\r\\nexport function clamp(arg: int2, min: int, max: int): int2;\\r\\nexport function clamp(arg: int3, min: int, max: int): int3;\\r\\nexport function clamp(arg: int4, min: int, max: int): int4;\\r\\n\\r\\nexport function clamp(arg: int2, min: int2, max: int2): int2;\\r\\nexport function clamp(arg: int3, min: int3, max: int3): int3;\\r\\nexport function clamp(arg: int4, min: int3, max: int3): int4;\\r\\n\\r\\nexport function clamp(arg: float, min: float, max: float): float;\\r\\nexport function clamp(arg: float2, min: float, max: float): float2;\\r\\nexport function clamp(arg: float3, min: float, max: float): float3;\\r\\nexport function clamp(arg: float4, min: float, max: float): float4;\\r\\n\\r\\nexport function clamp(arg: float2, min: float2, max: float2): float2;\\r\\nexport function clamp(arg: float3, min: float3, max: float3): float3;\\r\\nexport function clamp(arg: float4, min: float4, max: float4): float4;\\r\\n/** @shadeup=univ(clamp)*/\\r\\nexport function clamp(arg: any, min: any, max: any): any {\\r\\n\tif (Array.isArray(arg)) {\\r\\n\t\tif (Array.isArray(min) && Array.isArray(max)) {\\r\\n\t\t\treturn arg.map((a, i) => Math.min(Math.max(a, min[i]), max[i]));\\r\\n\t\t} else {\\r\\n\t\t\treturn arg.map((a) => Math.min(Math.max(a, min), max));\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\treturn Math.min(Math.max(arg, min), max);\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate)*/\\r\\nexport function saturate(arg: float): float;\\r\\nexport function saturate(arg: float2): float2;\\r\\nexport function saturate(arg: float3): float3;\\r\\nexport function saturate(arg: float4): float4;\\r\\n/** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\\r\\nexport function saturate(arg: any): any {\\r\\n\treturn clamp(arg, float(0), float(1));\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!($0$ == $1$))*/\\r\\nexport function eq<T extends vectorOrScalar | string>(a: T, b: T): bool;\\r\\nexport function eq(a: any, b: any): bool {\\r\\n\tlet ta = typeof a;\\r\\n\tlet tb = typeof b;\\r\\n\tif (ta != tb) {\\r\\n\t\treturn false;\\r\\n\t} else if (\\r\\n\t\t(ta == 'number' && tb == 'number') ||\\r\\n\t\t(ta == 'string' && tb == 'string') ||\\r\\n\t\t(ta == 'boolean' && tb == 'boolean') ||\\r\\n\t\t(ta == 'undefined' && tb == 'undefined')\\r\\n\t) {\\r\\n\t\treturn a == b;\\r\\n\t} else if (ta == 'object' && tb == 'object') {\\r\\n\t\tif (Array.isArray(a) && Array.isArray(b)) {\\r\\n\t\t\tif (a.length != b.length) {\\r\\n\t\t\t\treturn false;\\r\\n\t\t\t}\\r\\n\t\t\tfor (let i = 0; i < a.length; i++) {\\r\\n\t\t\t\tif (!eq(a[i], b[i])) {\\r\\n\t\t\t\t\treturn false;\\r\\n\t\t\t\t}\\r\\n\t\t\t}\\r\\n\t\t\treturn true;\\r\\n\t\t} else {\\r\\n\t\t\treturn a == b;\\r\\n\t\t}\\r\\n\t}\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(!($0$ != $1$))*/\\r\\nexport const neq = (a, b) => !eq(a, b);\\r\\n\\r\\n/** @shadeup=univ(!($0$ < $1$))*/\\r\\nexport const lt = (a: scalar, b: scalar) => a < b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ <= $1$))*/\\r\\nexport const lte = (a: scalar, b: scalar) => a <= b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ > $1$))*/\\r\\nexport const gt = (a: scalar, b: scalar) => a > b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ >= $1$))*/\\r\\nexport const gte = (a: scalar, b: scalar) => a >= b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ && $1$))*/\\r\\nexport const and = (a: boolean, b: boolean) => a && b;\\r\\n\\r\\n/** @shadeup=univ(!($0$ || $1$))*/\\r\\nexport const or = (a: boolean, b: boolean) => a || b;\\r\\n\\r\\n/** @shadeup=univ(!(!$0$))*/\\r\\nexport const not = (a: boolean) => !a;\\r\\n\\r\\n/** @shadeup=univ(~)*/\\r\\nexport function makeVector(x: int, y: int): int2;\\r\\nexport function makeVector(x: float, y: int): float2;\\r\\nexport function makeVector(x: int, y: float): float2;\\r\\nexport function makeVector(x: float, y: float): float2;\\r\\n\\r\\nexport function makeVector(x: int, y: int, z: int): int3;\\r\\nexport function makeVector(xy: int2, z: int): int3;\\r\\nexport function makeVector(x: int, yz: int2): int3;\\r\\n\\r\\nexport function makeVector(x: float, y: int, z: int): float3;\\r\\nexport function makeVector(x: int, y: float, z: int): float3;\\r\\nexport function makeVector(x: int, y: int, z: float): float3;\\r\\nexport function makeVector(x: float, y: float, z: int): float3;\\r\\nexport function makeVector(x: float, y: int, z: float): float3;\\r\\nexport function makeVector(x: int, y: float, z: float): float3;\\r\\nexport function makeVector(x: float, y: float, z: float): float3;\\r\\nexport function makeVector(xy: float2, z: float): float3;\\r\\nexport function makeVector(x: float, yz: float2): float3;\\r\\nexport function makeVector(xy: int2, z: float): float3;\\r\\nexport function makeVector(x: int, yz: float2): float3;\\r\\nexport function makeVector(xy: float2, z: int): float3;\\r\\nexport function makeVector(x: float, yz: int2): float3;\\r\\n\\r\\nexport function makeVector(x: int, y: int, z: int, w: int): int4;\\r\\nexport function makeVector(xyz: int3, w: int): int4;\\r\\nexport function makeVector(x: int, yzw: int3): int4;\\r\\n\\r\\nexport function makeVector(x: int, y: int, zw: int2): int4;\\r\\nexport function makeVector(xy: int2, z: int, w: int): int4;\\r\\nexport function makeVector(x: int, yz: int2, w: int): int4;\\r\\n\\r\\nexport function makeVector(xy: int2, zw: int2): int4;\\r\\n\\r\\nexport function makeVector(x: float, y: int, z: int, w: int): float4;\\r\\nexport function makeVector(x: int, y: float, z: int, w: int): float4;\\r\\nexport function makeVector(x: int, y: int, z: float, w: int): float4;\\r\\nexport function makeVector(x: int, y: int, z: int, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, z: int, w: int): float4;\\r\\nexport function makeVector(x: float, y: int, z: float, w: int): float4;\\r\\nexport function makeVector(x: float, y: int, z: int, w: float): float4;\\r\\nexport function makeVector(x: int, y: float, z: float, w: int): float4;\\r\\nexport function makeVector(x: int, y: float, z: int, w: float): float4;\\r\\nexport function makeVector(x: int, y: int, z: float, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, z: float, w: int): float4;\\r\\nexport function makeVector(x: float, y: float, z: int, w: float): float4;\\r\\nexport function makeVector(x: float, y: int, z: float, w: float): float4;\\r\\nexport function makeVector(x: int, y: float, z: float, w: float): float4;\\r\\nexport function makeVector(xyz: float3, w: float): float4;\\r\\nexport function makeVector(x: float, yzw: float3): float4;\\r\\nexport function makeVector(xyz: int3, w: float): float4;\\r\\nexport function makeVector(x: int, yzw: float3): float4;\\r\\nexport function makeVector(xyz: float3, w: int): float4;\\r\\nexport function makeVector(x: float, yzw: int3): float4;\\r\\nexport function makeVector(x: float, yz: float2, w: int): float4;\\r\\nexport function makeVector(x: float, yz: int2, w: float): float4;\\r\\nexport function makeVector(x: int, yz: float2, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, zw: float2): float4;\\r\\nexport function makeVector(x: float, y: int, zw: float2): float4;\\r\\nexport function makeVector(x: float, y: int, zw: int2): float4;\\r\\nexport function makeVector(x: int, y: float, zw: float2): float4;\\r\\nexport function makeVector(x: int, y: float, zw: int2): float4;\\r\\nexport function makeVector(x: int, y: int, zw: float2): float4;\\r\\nexport function makeVector(x: float, y: float, z: float, w: float): float4;\\r\\nexport function makeVector(xy: float2, z: float, w: float): float4;\\r\\nexport function makeVector(x: float, yz: float2, w: float): float4;\\r\\nexport function makeVector(x: float, y: float, zw: float2): float4;\\r\\nexport function makeVector(xy: int2, z: float, w: float): float4;\\r\\nexport function makeVector(x: int, yz: float2, w: float): float4;\\r\\nexport function makeVector(x: int, y: float, zw: float2): float4;\\r\\nexport function makeVector(xy: float2, z: int, w: float): float4;\\r\\nexport function makeVector(x: float, yz: int2, w: float): float4;\\r\\nexport function makeVector(x: float, y: int, zw: float2): float4;\\r\\nexport function makeVector(xy: int2, z: float, w: int): float4;\\r\\nexport function makeVector(x: int, yz: float2, w: int): float4;\\r\\nexport function makeVector(x: int, y: float, zw: int2): float4;\\r\\nexport function makeVector(xy: float2, z: int, w: int): float4;\\r\\nexport function makeVector(x: float, yz: int2, w: int): float4;\\r\\nexport function makeVector(x: float, y: int, zw: int2): float4;\\r\\nexport function makeVector(xy: int2, z: int, w: float): float4;\\r\\nexport function makeVector(x: int, yz: int2, w: float): float4;\\r\\nexport function makeVector(x: int, y: int, zw: float2): float4;\\r\\nexport function makeVector(xy: int2, z: int, w: int): int4;\\r\\n/** @shadeup=univ()*/\\r\\nexport function makeVector() {\\r\\n\tlet out = [];\\r\\n\tfor (let i = 0; i < arguments.length; i++) {\\r\\n\t\tlet a = arguments[i];\\r\\n\t\tif (typeof a === 'number') {\\r\\n\t\t\tout.push(a);\\r\\n\t\t} else {\\r\\n\t\t\tfor (let j = 0; j < a.length; j++) {\\r\\n\t\t\t\tout.push(a[j]);\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t}\\r\\n\treturn out;\\r\\n\\r\\n\tthrow new Error('Invalid vector length');\\r\\n}\\r\\n\\r\\n// add('test', int(1));\\r\\n\\r\\ntype swizChar = 'x' | 'y' | 'z' | 'w' | 'r' | 'g' | 'b' | 'a';\\r\\ntype swizStr4 = `${swizChar}${swizChar}${swizChar}${swizChar}`;\\r\\ntype swizStr3 = `${swizChar}${swizChar}${swizChar}`;\\r\\ntype swizStr2 = `${swizChar}${swizChar}`;\\r\\ntype swizStr1 = `${swizChar}`;\\r\\ntype swizStr4Ord = `xyzw` | `rgba` | `xxxx` | `rrrr`;\\r\\ntype swizStr3Ord = `xyz` | `rgb` | `xxx` | `rrr`;\\r\\ntype swizStr2Ord = `xy` | `rg` | `xx` | `rr`;\\r\\ntype swizStr1Ord = `x` | `r`;\\r\\n\\r\\nconst swizIndex: { [key: string]: number } = {\\r\\n\tx: 0,\\r\\n\ty: 1,\\r\\n\tz: 2,\\r\\n\tw: 3,\\r\\n\tr: 0,\\r\\n\tg: 1,\\r\\n\tb: 2,\\r\\n\ta: 3\\r\\n};\\r\\n\\r\\nconst getSwizIndexFast = (swiz: string) => {\\r\\n\tswitch (swiz) {\\r\\n\t\tcase 'x':\\r\\n\t\t\treturn 0;\\r\\n\t\tcase 'y':\\r\\n\t\t\treturn 1;\\r\\n\t\tcase 'z':\\r\\n\t\t\treturn 2;\\r\\n\t\tcase 'w':\\r\\n\t\t\treturn 3;\\r\\n\t\tcase 'r':\\r\\n\t\t\treturn 0;\\r\\n\t\tcase 'g':\\r\\n\t\t\treturn 1;\\r\\n\t\tcase 'b':\\r\\n\t\t\treturn 2;\\r\\n\t\tcase 'a':\\r\\n\t\t\treturn 3;\\r\\n\t}\\r\\n};\\r\\n\\r\\n/** @shadeup=shader */\\r\\nexport function testDocComment() {\\r\\n\treturn 1;\\r\\n}\\r\\n\\r\\n/** @shadeup=univ(~)*/\\r\\nexport function swizzle<S extends swizStr4Ord, T extends int>(v: T, swiz: S, assign?: T): int4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4Ord, T extends uint>(v: T, swiz: S, assign?: T): uint4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4Ord, T extends float>(v: T, swiz: S, assign?: T): float4;\\r\\n\\r\\nexport function swizzle<S extends swizStr3Ord, T extends int>(v: T, swiz: S, assign?: T): int3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3Ord, T extends uint>(v: T, swiz: S, assign?: T): uint3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3Ord, T extends float>(v: T, swiz: S, assign?: T): float3;\\r\\n\\r\\nexport function swizzle<S extends swizStr2Ord, T extends int>(v: T, swiz: S, assign?: T): int2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2Ord, T extends uint>(v: T, swiz: S, assign?: T): uint2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2Ord, T extends float>(v: T, swiz: S, assign?: T): float2;\\r\\n\\r\\nexport function swizzle<S extends swizStr1Ord, T extends int>(v: T, swiz: S, assign?: T): int;\\r\\n\\r\\nexport function swizzle<S extends swizStr1Ord, T extends uint>(v: T, swiz: S, assign?: T): uint;\\r\\n\\r\\nexport function swizzle<S extends swizStr1Ord, T extends float>(v: T, swiz: S, assign?: T): float;\\r\\n\\r\\nexport function swizzle<S extends swizStr4, T extends anyInt>(v: T, swiz: S, assign?: int4): int4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4, T extends anyUint>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: uint4\\r\\n): uint4;\\r\\n\\r\\nexport function swizzle<S extends swizStr4, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float4\\r\\n): float4;\\r\\n\\r\\nexport function swizzle<S extends swizStr3, T extends anyInt>(v: T, swiz: S, assign?: int3): int3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3, T extends anyUint>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: uint3\\r\\n): uint3;\\r\\n\\r\\nexport function swizzle<S extends swizStr3, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float3\\r\\n): float3;\\r\\n\\r\\nexport function swizzle<S extends swizStr2, T extends anyInt>(v: T, swiz: S, assign?: int2): int2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2, T extends anyUint>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: uint2\\r\\n): uint2;\\r\\n\\r\\nexport function swizzle<S extends swizStr2, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float2\\r\\n): float2;\\r\\n\\r\\nexport function swizzle<S extends swizStr1, T extends anyInt>(v: T, swiz: S, assign?: int): int;\\r\\n\\r\\nexport function swizzle<S extends swizStr1, T extends anyUint>(v: T, swiz: S, assign?: uint): uint;\\r\\n\\r\\nexport function swizzle<S extends swizStr1, T extends anyFloat>(\\r\\n\tv: T,\\r\\n\tswiz: S,\\r\\n\tassign?: float\\r\\n): float;\\r\\n\\r\\nexport function swizzle<S extends string, T, A extends keyof T>(v: T, swiz: A, assign?: T): T[A];\\r\\n\\r\\nexport function swizzle(v: any, swiz: string, assign?: any) {\\r\\n\tif (typeof v === 'number') {\\r\\n\t\tif (swiz.length === 1) {\\r\\n\t\t\treturn v;\\r\\n\t\t} else if (swiz.length === 2) {\\r\\n\t\t\treturn [v, v];\\r\\n\t\t} else if (swiz.length === 3) {\\r\\n\t\t\treturn [v, v, v];\\r\\n\t\t} else if (swiz.length === 4) {\\r\\n\t\t\treturn [v, v, v, v];\\r\\n\t\t}\\r\\n\t} else if (Array.isArray(v)) {\\r\\n\t\tif (typeof assign !== 'undefined') {\\r\\n\t\t\tfor (let i = 0; i < swiz.length; i++) {\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[i])] = assign[i] ?? assign;\\r\\n\t\t\t}\\r\\n\t\t\treturn v;\\r\\n\t\t}\\r\\n\t\tif (swiz.length === 1) {\\r\\n\t\t\treturn v[getSwizIndexFast(swiz)];\\r\\n\t\t} else if (swiz.length === 2) {\\r\\n\t\t\treturn [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\\r\\n\t\t} else if (swiz.length === 3) {\\r\\n\t\t\treturn [\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[0])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[1])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[2])]\\r\\n\t\t\t];\\r\\n\t\t} else if (swiz.length === 4) {\\r\\n\t\t\treturn [\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[0])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[1])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[2])],\\r\\n\t\t\t\tv[getSwizIndexFast(swiz[3])]\\r\\n\t\t\t];\\r\\n\t\t}\\r\\n\t} else {\\r\\n\t\treturn (v as any)[swiz];\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport function intifyVector(v: vector) {\\r\\n\tif (typeof v === 'number') {\\r\\n\t\treturn v;\\r\\n\t} else if (Array.isArray(v)) {\\r\\n\t\treturn v.map((v) => v | 0);\\r\\n\t} else {\\r\\n\t\treturn v;\\r\\n\t}\\r\\n}\\r\\n\\r\\nimport { FM as FastMath } from './static-math';\\r\\nexport const FM = FastMath;\\r\\n\\r\\n// type f32 = number & { __float: never };\\r\\n// type i32 = number & { __int: never };\\r\\n// type num = f32 | i32;\\r\\n\\r\\n// function f32(a: number): f32 {\\r\\n// \treturn a as f32;\\r\\n// }\\r\\n\\r\\n// function i32(a: number): i32 {\\r\\n// \treturn a as i32;\\r\\n// }\\r\\n\\r\\n// type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\\r\\n// type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\\r\\n\\r\\n// export const abc: numeric2 = (a, b, c) => a + b + c;\\r\\n\\r\\n// abc(f32(1), i32(2));\\r\\n\\r\\nexport class atomic_internal<T extends uint | int> {\\r\\n\tprivate __type: T;\\r\\n\tprivate __value: number;\\r\\n\tconstructor(value: T) {\\r\\n\t\tthis.__value = value;\\r\\n\t}\\r\\n\\r\\n\tprivate $mutate?: (to: value) => void;\\r\\n\\r\\n\t/** @shadeup=univ(!atomicLoad(&$self$))*/\\r\\n\tload(): T {\\r\\n\t\treturn this.__value as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicStore(&$self$, $0$))*/\\r\\n\tstore(value: T): void {\\r\\n\t\tthis.__value = value as any;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t}\\r\\n\\r\\n\t/** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\\r\\n\tadd(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value += value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicSub(&$self$, $0$))*/\\r\\n\tsub(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value -= value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicMax(&$self$, $0$))*/\\r\\n\tmax(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = Math.max(value, this.__value);\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicMin(&$self$, $0$))*/\\r\\n\tmin(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = Math.min(value, this.__value);\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\\r\\n\tand(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value & this.__value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicOr(&$self$, $0$))*/\\r\\n\tor(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value | this.__value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicXor(&$self$, $0$))*/\\r\\n\txor(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value ^ this.__value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\\r\\n\texchange(value: T): T {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tthis.__value = value;\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn old as T;\\r\\n\t}\\r\\n\t/** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\\r\\n\tcompareExchangeWeak(compare: T, value: T): __atomic_compare_exchange_result<T> {\\r\\n\t\tlet old = this.__value;\\r\\n\t\tif (old == compare) {\\r\\n\t\t\tthis.__value = value;\\r\\n\t\t}\\r\\n\t\tif (this.$mutate) this.$mutate(this.__value);\\r\\n\t\treturn {\\r\\n\t\t\told_value: old as T,\\r\\n\t\t\texchanged: old == compare\\r\\n\t\t};\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport type __atomic_compare_exchange_result<T extends uint | int> = {\\r\\n\told_value: T;\\r\\n\texchanged: boolean;\\r\\n};\\r\\n\\r\\nexport type atomic<T extends uint | int> = atomic_internal<T>;\\r\\n\\r\\nexport function atomic<T extends uint | int>(value: T): atomic<T> {\\r\\n\treturn new atomic_internal(value);\\r\\n}\\r\\n\\r\\n(window as any).makeAtomic = atomic;\\r\\n\\r\\n/**\\r\\n * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\\r\\n *\\r\\n * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\\r\\n *\\r\\n * @shadeup=univ(!workgroupBarrier())\\r\\n */\\r\\nexport function workgroupBarrier() {}\\r\\n\\r\\n/**\\r\\n * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\\r\\n *\\r\\n * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\\r\\n *\\r\\n * @shadeup=univ(!storageBarrier())\\r\\n */\\r\\nexport function storageBarrier() {}\\r\\n\\r\\n/**\\r\\n * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\\r\\n *\\r\\n * @shadeup=univ(!workgroupUniformLoad(&$0$))\\r\\n */\\r\\nexport function workgroupUniformLoad<T>(p: T): T {\\r\\n\treturn p;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Discards the current fragment.\\r\\n *\\r\\n * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\\r\\n *\\r\\n * See: https://www.w3.org/TR/WGSL/#discard-statement\\r\\n *\\r\\n * @shadeup=univ(!discard;)\\r\\n */\\r\\nexport function discard() {}\\r\\n\\r\\n/**\\r\\n * Returns the derivative of the input value with respect to the window-space x coordinate.\\r\\n * @param value - The input value.\\r\\n * @returns The derivative of the input value with respect to the window-space x coordinate.\\r\\n * @shadeup=glsl(!dFdx($0$))\\r\\n * @shadeup=wgsl(!dpdx($0$))\\r\\n */\\r\\nexport function ddx<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns the derivative of the input value with respect to the window-space y coordinate.\\r\\n * @param value - The input value.\\r\\n *\\r\\n * @returns The derivative of the input value with respect to the window-space y coordinate.\\r\\n * @shadeup=glsl(!dFdy($0$))\\r\\n * @shadeup=wgsl(!dpdy($0$))\\r\\n */\\r\\nexport function ddy<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdxFine($0$))\\r\\n * @shadeup=wgsl(!dpdxFine($0$))\\r\\n */\\r\\nexport function ddxFine<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdyFine($0$))\\r\\n * @shadeup=wgsl(!dpdyFine($0$))\\r\\n */\\r\\nexport function ddyFine<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdxCoarse($0$))\\r\\n * @shadeup=wgsl(!dpdxCoarse($0$))\\r\\n */\\r\\nexport function ddxCoarse<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!dFdyCoarse($0$))\\r\\n * @shadeup=wgsl(!dpdyCoarse($0$))\\r\\n */\\r\\nexport function ddyCoarse<T extends scalar | vector>(value: T): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!bitcast<$[0]$>($0$))\\r\\n */\\r\\nexport function bitcast<T extends scalar>(value: scalar): T {\\r\\n\treturn 0 as T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack4x8snorm($0$))\\r\\n */\\r\\nexport function pack4x8snorm(value: float4): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack4x8unorm($0$))\\r\\n */\\r\\nexport function pack4x8unorm(value: float4): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack2x16snorm($0$))\\r\\n */\\r\\nexport function pack2x16snorm(value: float2): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack2x16unorm($0$))\\r\\n */\\r\\nexport function pack2x16unorm(value: float2): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!pack2x16float($0$))\\r\\n */\\r\\nexport function pack2x16float(value: float2): uint {\\r\\n\treturn uint(0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack4x8snorm($0$))\\r\\n */\\r\\nexport function unpack4x8snorm(value: uint): float4 {\\r\\n\treturn float4(0, 0, 0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack4x8unorm($0$))\\r\\n */\\r\\nexport function unpack4x8unorm(value: uint): float4 {\\r\\n\treturn float4(0, 0, 0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack2x16snorm($0$))\\r\\n */\\r\\nexport function unpack2x16snorm(value: uint): float2 {\\r\\n\treturn float2(0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack2x16unorm($0$))\\r\\n */\\r\\nexport function unpack2x16unorm(value: uint): float2 {\\r\\n\treturn float2(0, 0);\\r\\n}\\r\\n/**\\r\\n * @shadeup=glsl(!$0$)\\r\\n * @shadeup=wgsl(!unpack2x16float($0$))\\r\\n */\\r\\nexport function unpack2x16float(value: uint): float2 {\\r\\n\treturn float2(0, 0);\\r\\n}\\r\\n\";\n  const stdStaticMath = \"\\n///\\n/// GENERATED\\n/// DO NOT EDIT THIS FILE\\n/// see generate-static-math.ts\\n///\\nexport const FM = {\\n\tadd_1_1(a: number, b: number): number { return a + b; },\\n\tadd_2_1(a: [number, number], b: number): [number, number] { return [a[0] + b, a[1] + b]; },\\n\tadd_1_2(a: number, b: [number, number]): [number, number] { return [a + b[0], a + b[1]]; },\\n\tadd_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] + b[0], a[1] + b[1]]; },\\n\tadd_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] + b, a[1] + b, a[2] + b]; },\\n\tadd_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a + b[0], a + b[1], a + b[2]]; },\\n\tadd_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\\n\tadd_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\\n\tadd_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\\n\tadd_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\\n\tsub_1_1(a: number, b: number): number { return a - b; },\\n\tsub_2_1(a: [number, number], b: number): [number, number] { return [a[0] - b, a[1] - b]; },\\n\tsub_1_2(a: number, b: [number, number]): [number, number] { return [a - b[0], a - b[1]]; },\\n\tsub_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] - b[0], a[1] - b[1]]; },\\n\tsub_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] - b, a[1] - b, a[2] - b]; },\\n\tsub_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a - b[0], a - b[1], a - b[2]]; },\\n\tsub_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\\n\tsub_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\\n\tsub_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\\n\tsub_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\\n\tdiv_1_1(a: number, b: number): number { return a / b; },\\n\tdiv_2_1(a: [number, number], b: number): [number, number] { return [a[0] / b, a[1] / b]; },\\n\tdiv_1_2(a: number, b: [number, number]): [number, number] { return [a / b[0], a / b[1]]; },\\n\tdiv_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] / b[0], a[1] / b[1]]; },\\n\tdiv_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] / b, a[1] / b, a[2] / b]; },\\n\tdiv_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a / b[0], a / b[1], a / b[2]]; },\\n\tdiv_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\\n\tdiv_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\\n\tdiv_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\\n\tdiv_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\\n\tmul_1_1(a: number, b: number): number { return a * b; },\\n\tmul_2_1(a: [number, number], b: number): [number, number] { return [a[0] * b, a[1] * b]; },\\n\tmul_1_2(a: number, b: [number, number]): [number, number] { return [a * b[0], a * b[1]]; },\\n\tmul_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] * b[0], a[1] * b[1]]; },\\n\tmul_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] * b, a[1] * b, a[2] * b]; },\\n\tmul_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a * b[0], a * b[1], a * b[2]]; },\\n\tmul_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\\n\tmul_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\\n\tmul_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\\n\tmul_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\\n\tmod_1_1(a: number, b: number): number { return a % b; },\\n\tmod_2_1(a: [number, number], b: number): [number, number] { return [a[0] % b, a[1] % b]; },\\n\tmod_1_2(a: number, b: [number, number]): [number, number] { return [a % b[0], a % b[1]]; },\\n\tmod_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] % b[0], a[1] % b[1]]; },\\n\tmod_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] % b, a[1] % b, a[2] % b]; },\\n\tmod_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a % b[0], a % b[1], a % b[2]]; },\\n\tmod_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\\n\tmod_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\\n\tmod_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\\n\tmod_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\\n\tbitand_1_1(a: number, b: number): number { return a & b; },\\n\tbitand_2_1(a: [number, number], b: number): [number, number] { return [a[0] & b, a[1] & b]; },\\n\tbitand_1_2(a: number, b: [number, number]): [number, number] { return [a & b[0], a & b[1]]; },\\n\tbitand_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] & b[0], a[1] & b[1]]; },\\n\tbitand_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] & b, a[1] & b, a[2] & b]; },\\n\tbitand_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a & b[0], a & b[1], a & b[2]]; },\\n\tbitand_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\\n\tbitand_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\\n\tbitand_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\\n\tbitand_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\\n\tbitor_1_1(a: number, b: number): number { return a | b; },\\n\tbitor_2_1(a: [number, number], b: number): [number, number] { return [a[0] | b, a[1] | b]; },\\n\tbitor_1_2(a: number, b: [number, number]): [number, number] { return [a | b[0], a | b[1]]; },\\n\tbitor_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] | b[0], a[1] | b[1]]; },\\n\tbitor_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] | b, a[1] | b, a[2] | b]; },\\n\tbitor_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a | b[0], a | b[1], a | b[2]]; },\\n\tbitor_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\\n\tbitor_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\\n\tbitor_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\\n\tbitor_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\\n\tbitxor_1_1(a: number, b: number): number { return a ^ b; },\\n\tbitxor_2_1(a: [number, number], b: number): [number, number] { return [a[0] ^ b, a[1] ^ b]; },\\n\tbitxor_1_2(a: number, b: [number, number]): [number, number] { return [a ^ b[0], a ^ b[1]]; },\\n\tbitxor_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] ^ b[0], a[1] ^ b[1]]; },\\n\tbitxor_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\\n\tbitxor_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\\n\tbitxor_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\\n\tbitxor_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\\n\tbitxor_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\\n\tbitxor_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\\n\tlshift_1_1(a: number, b: number): number { return a << b; },\\n\tlshift_2_1(a: [number, number], b: number): [number, number] { return [a[0] << b, a[1] << b]; },\\n\tlshift_1_2(a: number, b: [number, number]): [number, number] { return [a << b[0], a << b[1]]; },\\n\tlshift_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] << b[0], a[1] << b[1]]; },\\n\tlshift_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] << b, a[1] << b, a[2] << b]; },\\n\tlshift_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a << b[0], a << b[1], a << b[2]]; },\\n\tlshift_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\\n\tlshift_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\\n\tlshift_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\\n\tlshift_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\\n\trshift_1_1(a: number, b: number): number { return a >> b; },\\n\trshift_2_1(a: [number, number], b: number): [number, number] { return [a[0] >> b, a[1] >> b]; },\\n\trshift_1_2(a: number, b: [number, number]): [number, number] { return [a >> b[0], a >> b[1]]; },\\n\trshift_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] >> b[0], a[1] >> b[1]]; },\\n\trshift_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\\n\trshift_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a >> b[0], a >> b[1], a >> b[2]]; },\\n\trshift_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\\n\trshift_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\\n\trshift_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\\n\trshift_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\\n\tbitnot_1(a: number): number { return ~a; },\\n\tbitnot_2(a: [number, number]): [number, number] { return [~a[0], ~a[1]]; },\\n\tbitnot_3(a: [number, number, number]): [number, number, number] { return [~a[0], ~a[1], ~a[2]]; },\\n\tbitnot_4(a: [number, number, number, number]): [number, number, number, number] { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\\n\tnegate_1(a: number): number { return -a; },\\n\tnegate_2(a: [number, number]): [number, number] { return [-a[0], -a[1]]; },\\n\tnegate_3(a: [number, number, number]): [number, number, number] { return [-a[0], -a[1], -a[2]]; },\\n\tnegate_4(a: [number, number, number, number]): [number, number, number, number] { return [-a[0], -a[1], -a[2], -a[3]]; },\\n\tpositive_1(a: number): number { return Math.abs(a); },\\n\tpositive_2(a: [number, number]): [number, number] { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n\tpositive_3(a: [number, number, number]): [number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n\tpositive_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n\tabs_1(a: number): number { return Math.abs(a); },\\n\tabs_2(a: [number, number]): [number, number] { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n\tabs_3(a: [number, number, number]): [number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n\tabs_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n\tfloor_1(a: number): number { return Math.floor(a); },\\n\tfloor_2(a: [number, number]): [number, number] { return [Math.floor(a[0]), Math.floor(a[1])]; },\\n\tfloor_3(a: [number, number, number]): [number, number, number] { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\\n\tfloor_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\\n\tceil_1(a: number): number { return Math.ceil(a); },\\n\tceil_2(a: [number, number]): [number, number] { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\\n\tceil_3(a: [number, number, number]): [number, number, number] { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\\n\tceil_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\\n\tround_1(a: number): number { return Math.round(a); },\\n\tround_2(a: [number, number]): [number, number] { return [Math.round(a[0]), Math.round(a[1])]; },\\n\tround_3(a: [number, number, number]): [number, number, number] { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\\n\tround_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\\n\tsign_1(a: number): number { return Math.sign(a); },\\n\tsign_2(a: [number, number]): [number, number] { return [Math.sign(a[0]), Math.sign(a[1])]; },\\n\tsign_3(a: [number, number, number]): [number, number, number] { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\\n\tsign_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\\n\tcos_1(a: number): number { return Math.cos(a); },\\n\tcos_2(a: [number, number]): [number, number] { return [Math.cos(a[0]), Math.cos(a[1])]; },\\n\tcos_3(a: [number, number, number]): [number, number, number] { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\\n\tcos_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\\n\tsin_1(a: number): number { return Math.sin(a); },\\n\tsin_2(a: [number, number]): [number, number] { return [Math.sin(a[0]), Math.sin(a[1])]; },\\n\tsin_3(a: [number, number, number]): [number, number, number] { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\\n\tsin_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\\n\ttan_1(a: number): number { return Math.tan(a); },\\n\ttan_2(a: [number, number]): [number, number] { return [Math.tan(a[0]), Math.tan(a[1])]; },\\n\ttan_3(a: [number, number, number]): [number, number, number] { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\\n\ttan_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\\n\tacos_1(a: number): number { return Math.acos(a); },\\n\tacos_2(a: [number, number]): [number, number] { return [Math.acos(a[0]), Math.acos(a[1])]; },\\n\tacos_3(a: [number, number, number]): [number, number, number] { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\\n\tacos_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\\n\tasin_1(a: number): number { return Math.asin(a); },\\n\tasin_2(a: [number, number]): [number, number] { return [Math.asin(a[0]), Math.asin(a[1])]; },\\n\tasin_3(a: [number, number, number]): [number, number, number] { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\\n\tasin_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\\n\tatan_1(a: number): number { return Math.atan(a); },\\n\tatan_2(a: [number, number]): [number, number] { return [Math.atan(a[0]), Math.atan(a[1])]; },\\n\tatan_3(a: [number, number, number]): [number, number, number] { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\\n\tatan_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\\n\tcosh_1(a: number): number { return Math.cosh(a); },\\n\tcosh_2(a: [number, number]): [number, number] { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\\n\tcosh_3(a: [number, number, number]): [number, number, number] { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\\n\tcosh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\\n\tsinh_1(a: number): number { return Math.sinh(a); },\\n\tsinh_2(a: [number, number]): [number, number] { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\\n\tsinh_3(a: [number, number, number]): [number, number, number] { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\\n\tsinh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\\n\ttanh_1(a: number): number { return Math.tanh(a); },\\n\ttanh_2(a: [number, number]): [number, number] { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\\n\ttanh_3(a: [number, number, number]): [number, number, number] { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\\n\ttanh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\\n\tacosh_1(a: number): number { return Math.acosh(a); },\\n\tacosh_2(a: [number, number]): [number, number] { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\\n\tacosh_3(a: [number, number, number]): [number, number, number] { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\\n\tacosh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\\n\tasinh_1(a: number): number { return Math.asinh(a); },\\n\tasinh_2(a: [number, number]): [number, number] { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\\n\tasinh_3(a: [number, number, number]): [number, number, number] { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\\n\tasinh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\\n\tatanh_1(a: number): number { return Math.atanh(a); },\\n\tatanh_2(a: [number, number]): [number, number] { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\\n\tatanh_3(a: [number, number, number]): [number, number, number] { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\\n\tatanh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\\n\texp_1(a: number): number { return Math.exp(a); },\\n\texp_2(a: [number, number]): [number, number] { return [Math.exp(a[0]), Math.exp(a[1])]; },\\n\texp_3(a: [number, number, number]): [number, number, number] { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\\n\texp_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\\n\tlog_1(a: number): number { return Math.log(a); },\\n\tlog_2(a: [number, number]): [number, number] { return [Math.log(a[0]), Math.log(a[1])]; },\\n\tlog_3(a: [number, number, number]): [number, number, number] { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\\n\tlog_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\\n\tlog2_1(a: number): number { return Math.log2(a); },\\n\tlog2_2(a: [number, number]): [number, number] { return [Math.log2(a[0]), Math.log2(a[1])]; },\\n\tlog2_3(a: [number, number, number]): [number, number, number] { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\\n\tlog2_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\\n\tlog10_1(a: number): number { return Math.log10(a); },\\n\tlog10_2(a: [number, number]): [number, number] { return [Math.log10(a[0]), Math.log10(a[1])]; },\\n\tlog10_3(a: [number, number, number]): [number, number, number] { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\\n\tlog10_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\\n\tsqrt_1(a: number): number { return Math.sqrt(a); },\\n\tsqrt_2(a: [number, number]): [number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\\n\tsqrt_3(a: [number, number, number]): [number, number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\\n\tsqrt_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\\n\tint_2_1_1(a: number, b: number): [number, number] { return [a|0, b|0]; },\\n\tint_2_2(a: [number, number]): [number, number] { return [a[0]|0, a[1]|0]; },\\n\tint_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a|0, b|0, c|0]; },\\n\tint_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]|0, a[1]|0, b|0]; },\\n\tint_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a|0, b[0]|0, b[1]|0]; },\\n\tint_3_3(a: [number, number, number]): [number, number, number] { return [a[0]|0, a[1]|0, a[2]|0]; },\\n\tint_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a|0, b|0, c|0, d|0]; },\\n\tint_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]|0, a[1]|0, b|0, c|0]; },\\n\tint_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a|0, b[0]|0, b[1]|0, c|0]; },\\n\tint_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a|0, b|0, c[0]|0, c[1]|0]; },\\n\tint_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]|0, a[1]|0, a[2]|0, b|0]; },\\n\tint_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a|0, b[0]|0, b[1]|0, b[2]|0]; },\\n\tint_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]|0, a[1]|0, b[0]|0, b[1]|0]; },\\n\tint_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]|0, a[1]|0, a[2]|0, a[3]|0]; },\\n\tfloat_2_1_1(a: number, b: number): [number, number] { return [a, b]; },\\n\tfloat_2_2(a: [number, number]): [number, number] { return [a[0], a[1]]; },\\n\tfloat_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a, b, c]; },\\n\tfloat_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0], a[1], b]; },\\n\tfloat_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a, b[0], b[1]]; },\\n\tfloat_3_3(a: [number, number, number]): [number, number, number] { return [a[0], a[1], a[2]]; },\\n\tfloat_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a, b, c, d]; },\\n\tfloat_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0], a[1], b, c]; },\\n\tfloat_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a, b[0], b[1], c]; },\\n\tfloat_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a, b, c[0], c[1]]; },\\n\tfloat_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0], a[1], a[2], b]; },\\n\tfloat_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a, b[0], b[1], b[2]]; },\\n\tfloat_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0], a[1], b[0], b[1]]; },\\n\tfloat_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0], a[1], a[2], a[3]]; },\\n\tuint_2_1_1(a: number, b: number): [number, number] { return [a>>>0, b>>>0]; },\\n\tuint_2_2(a: [number, number]): [number, number] { return [a[0]>>>0, a[1]>>>0]; },\\n\tuint_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a>>>0, b>>>0, c>>>0]; },\\n\tuint_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]>>>0, a[1]>>>0, b>>>0]; },\\n\tuint_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0]; },\\n\tuint_3_3(a: [number, number, number]): [number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0]; },\\n\tuint_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a>>>0, b>>>0, c>>>0, d>>>0]; },\\n\tuint_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, b>>>0, c>>>0]; },\\n\tuint_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0, c>>>0]; },\\n\tuint_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a>>>0, b>>>0, c[0]>>>0, c[1]>>>0]; },\\n\tuint_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0, b>>>0]; },\\n\tuint_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0, b[2]>>>0]; },\\n\tuint_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, b[0]>>>0, b[1]>>>0]; },\\n\tuint_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0, a[3]>>>0]; },\\n}\\n\";\n  const stdAll = `/**__SHADEUP_STRUCT_INJECTION_HOOK__*/\\r\nexport const __dummy = 1;\\r\n\\r\nimport {\\r\n\tbool,\\r\n\tfloat,\\r\n\tfloat2,\\r\n\tfloat3,\\r\n\tfloat4,\\r\n\tint,\\r\n\tint2,\\r\n\tint3,\\r\n\tint4,\\r\n\tuint,\\r\n\tuint3,\\r\n\tatomic\\r\n} from '/std_math';\\r\n// import { Mesh } from '/_std/mesh';\\r\n\\r\nexport class Mesh {\\r\n\tprivate vertices: float3[] = [];\\r\n\tprivate triangles: int[] = [];\\r\n\tprivate normals: float3[] = [];\\r\n\tprivate tangents: float3[] = [];\\r\n\tprivate bitangents: float3[] = [];\\r\n\tprivate uvs: float2[] = [];\\r\n\tprivate colors: float4[] = [];\\r\n\tsymbol: Symbol;\\r\n\\r\n\tconstructor(prefils: {\\r\n\t\tvertices?: float3[];\\r\n\t\ttriangles?: int[];\\r\n\t\tnormals?: float3[];\\r\n\t\ttangents?: float3[];\\r\n\t\tbitangents?: float3[];\\r\n\t\tuvs?: float2[];\\r\n\t\tcolors?: float4[];\\r\n\t}) {\\r\n\t\tthis.symbol = Symbol();\\r\n\t\tif (prefils.vertices) this.vertices = prefils.vertices;\\r\n\t\tif (prefils.triangles) this.triangles = prefils.triangles;\\r\n\t\tif (prefils.normals) this.normals = prefils.normals;\\r\n\t\tif (prefils.tangents) this.tangents = prefils.tangents;\\r\n\t\tif (prefils.bitangents) this.bitangents = prefils.bitangents;\\r\n\t\tif (prefils.uvs) this.uvs = prefils.uvs;\\r\n\t\tif (prefils.colors) this.colors = prefils.colors;\\r\n\t}\\r\n\\r\n\tgetVertices() {\\r\n\t\treturn this.vertices;\\r\n\t}\\r\n\\r\n\tgetTriangles() {\\r\n\t\treturn this.triangles;\\r\n\t}\\r\n\\r\n\tgetNormals() {\\r\n\t\treturn this.normals;\\r\n\t}\\r\n\\r\n\tgetTangents() {\\r\n\t\treturn this.tangents;\\r\n\t}\\r\n\\r\n\tgetBitangents() {\\r\n\t\treturn this.bitangents;\\r\n\t}\\r\n\\r\n\tgetUVs() {\\r\n\t\treturn this.uvs;\\r\n\t}\\r\n\\r\n\tgetColors() {\\r\n\t\treturn this.colors;\\r\n\t}\\r\n}\\r\n\\r\ndeclare global {\\r\n\tconst localEngineContext: any;\\r\n}\\r\n\\r\nexport const getShadeupLocalContext = (): any => {\\r\n\tif (typeof localEngineContext !== 'undefined') {\\r\n\t\treturn localEngineContext;\\r\n\t} else {\\r\n\t\treturn window;\\r\n\t}\\r\n};\\r\n\\r\n/**\\r\n * Prints a set of value(s) to the console. Values will be converted to strings before printing.\\r\n *\\r\n * @param args Any number of values to print to the console\\r\n */\\r\nexport function print(...args: any[]) {\\r\n\tconsole.log(...args);\\r\n\tif (typeof getShadeupLocalContext()['__shadeup_print'] === 'function') {\\r\n\t\tgetShadeupLocalContext()['__shadeup_print'](...args);\\r\n\t}\\r\n}\\r\n\\r\n/**\\r\n * Flushes (executes) all queued compute or draw calls\\r\n * @shadeup=tag(async) @shadeup=noemit_gpu\\r\n */\\r\nexport async function flush() {\\r\n\tif (typeof getShadeupLocalContext()['flushAdapter'] === 'function') {\\r\n\t\treturn await getShadeupLocalContext()['flushAdapter']();\\r\n\t}\\r\n}\\r\n\\r\n/**\\r\n * Displays a single value in the stats panel at the top right\\r\n *\\r\n * @param name key for this stat (e.g. \"fps\")\\r\n * @param value any value\\r\n */\\r\nexport function stat(name: string, value: any) {\\r\n\tif (typeof getShadeupLocalContext()['__shadeup_stat'] === 'function') {\\r\n\t\tgetShadeupLocalContext()['__shadeup_stat'](name, value);\\r\n\t}\\r\n}\\r\n\\r\n/**\\r\n * Display a graph of a numeric value over time\\r\n *\\r\n * @param name key for this stat (e.g. \"fps\")\\r\n * @param value any numeric value\\r\n * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\\r\n */\\r\nexport function statGraph(name: string, value: float, sampleRate: int = 1) {\\r\n\tif (typeof getShadeupLocalContext()['__shadeup_statGraph'] === 'function') {\\r\n\t\tgetShadeupLocalContext()['__shadeup_statGraph'](name, value);\\r\n\t}\\r\n}\\r\n\\r\n// type InferPayload1<T> = {\\r\n// \tdata: [T];\\r\n// \tcallback: (a: { attachment0: T }) => void;\\r\n// };\\r\n\\r\n// type InferPayload2<T, I> = {\\r\n// \tdata: [T, I];\\r\n// \tcallback: (a: { attachment0: T; attachment1: I }) => void;\\r\n// };\\r\n\\r\n// function infer(payload: InferPayload1 | InferPayload2);\\r\n// function infer(a: any) {}\\r\n\\r\n// infer({\\r\n// \tdata: [67],\\r\n// \tcallback: (a) => {\\r\n// \t\ta[0];\\r\n// \t}\\r\n// });\\r\n\\r\ntype FnPass<T> = (a: T) => void;\\r\n\\r\nfunction infer<I, O, C>(fn: (a: I, b: O) => void): shader<I, O, C> {\\r\n\treturn fn as shader<I, O, C>;\\r\n}\\r\n\\r\n// export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\\r\n// export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\\r\n// export function draw(\\r\n// \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\\r\n// \tsecond?: shader<ShaderInput, ShaderOutput>,\\r\n// \tthird?: shader<ShaderInput, ShaderOutput>\\r\n// ) {\\r\n// \tif ('vertices' in first && second && third) {\\r\n// \t\t__shadeup_dispatch_draw_geometry(first, second, third);\\r\n// \t} else if (first && !second && !third) {\\r\n// \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\r\n// \t}\\r\n// }\\r\n\\r\n// draw(makeShader('', (a, b) => {}));\\r\n// drawAlt(\\r\n// \tmakeShader(\\r\n// \t\t'000004808000091289258019303699031390005438610',\\r\n// \t\t/**@shadeup=shader*/ (__in, __out) => {\\r\n// \t\t\t__out.color;\\r\n// \t\t}\\r\n// \t)\\r\n// );\\r\n// /**\\r\n//  *\\r\n//  */\\r\nexport function compute(workgroups: int3, computeShader: shader<any, any, any>) {\\r\n\tgetShadeupLocalContext().__shadeup_dispatch_compute(workgroups, computeShader);\\r\n}\\r\n\\r\n// function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\\r\n\\r\n// type x<T> = { x: T };\\r\n\\r\n// function makeTex<T>(a: T): x<T> {\\r\n// \treturn { x: a };\\r\n// }\\r\n// draw({\\r\n// \tvertex: shader('abc', (__in, __out) => {}),\\r\n// \tattachments: [\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 }),\\r\n// \t\tmakeTex({ abc: 123 })\\r\n// \t],\\r\n// \tmesh: new Mesh(),\\r\n// \tfragment: shader('abc', (__in, __out) => {\\r\n// \t\t//__out.attachment0\\r\n// \t})\\r\n// });\\r\n\\r\nexport function globalVarInit<T>(\\r\n\tfileName: string,\\r\n\tvarName: string,\\r\n\tinitFn: () => T,\\r\n\tgetterFn: any\\r\n): T {\\r\n\tif (!getShadeupLocalContext()['shadeup_globals']) {\\r\n\t\tgetShadeupLocalContext()['shadeup_globals'] = {};\\r\n\t}\\r\n\\r\n\tif (!getShadeupLocalContext()['shadeup_globals'][fileName]) {\\r\n\t\tgetShadeupLocalContext()['shadeup_globals'][fileName] = {};\\r\n\t}\\r\n\\r\n\t// Disable caching for now\\r\n\tconst cache = false;\\r\n\tif (!(varName in getShadeupLocalContext()['shadeup_globals'][fileName]) || !cache) {\\r\n\t\tgetShadeupLocalContext()['shadeup_globals'][fileName][varName] = initFn();\\r\n\t}\\r\n\tgetShadeupLocalContext()['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\\r\n\treturn getShadeupLocalContext()['shadeup_globals'][fileName][varName] as T;\\r\n}\\r\n\\r\nexport function globalVarGet(fileName, varName) {\\r\n\tif (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\\r\n\t\treturn getShadeupLocalContext()[varName];\\r\n\t}\\r\n\\r\n\treturn getShadeupLocalContext()['shadeup_globals'][fileName]['$getter_' + varName]();\\r\n}\\r\n\\r\ninterface ToString {\\r\n\ttoString(): string;\\r\n}\\r\n\\r\ntype HashableType =\\r\n\t| string\\r\n\t| float\\r\n\t| int\\r\n\t| bool\\r\n\t| float2\\r\n\t| float3\\r\n\t| float4\\r\n\t| int2\\r\n\t| int3\\r\n\t| int4\\r\n\t| ToString;\\r\n\\r\nexport function hashableTypeToString(k: HashableType) {\\r\n\tif (typeof k == 'number') {\\r\n\t\treturn k.toString();\\r\n\t} else if (typeof k == 'object') {\\r\n\t\tif (Array.isArray(k)) {\\r\n\t\t\treturn k.map(hashableTypeToString).join(',');\\r\n\t\t} else {\\r\n\t\t\treturn k.toString();\\r\n\t\t}\\r\n\t} else {\\r\n\t\treturn k.toString();\\r\n\t}\\r\n}\\r\n\\r\ndeclare global {\\r\n\tconst PLATFORM_WEBGPU: boolean;\\r\n\tconst PLATFORM_WEBGL: boolean;\\r\n\\r\n\tinterface Array<T> {\\r\n\t\tlen(): int;\\r\n\t\tpush(...items: T[]): void;\\r\n\t\tpop(): T;\\r\n\\r\n\t\tlast(): T;\\r\n\t\tfirst(): T;\\r\n\\r\n\t\tappend(items: T[]): void;\\r\n\t\tremove(index: int): void;\\r\n\\r\n\t\tindexOf(item: T): int;\\r\n\\r\n\t\t__index(index: int | uint): T;\\r\n\\r\n\t\t__index_assign(index: int | uint, value: T): void;\\r\n\t\t__index_assign_op(op_fn: (a: T, b: T) => T, index: int | uint, value: T): void;\\r\n\\r\n\t\t[index: number]: T;\\r\n\t}\\r\n}\\r\n\\r\nArray.prototype.len = function () {\\r\n\treturn this.length;\\r\n};\\r\n\\r\nArray.prototype.last = function () {\\r\n\treturn this[this.length - 1];\\r\n};\\r\n\\r\nArray.prototype.first = function () {\\r\n\treturn this[0];\\r\n};\\r\n\\r\nArray.prototype.append = function (items: any[]) {\\r\n\tfor (let i = 0; i < items.length; i++) {\\r\n\t\tthis.push(items[i]);\\r\n\t}\\r\n};\\r\n\\r\nArray.prototype.remove = function (index: int) {\\r\n\tthis.splice(index, 1);\\r\n};\\r\n\\r\nArray.prototype.__index = function (index: int) {\\r\n\treturn this[index];\\r\n};\\r\n\\r\nArray.prototype.__index_assign = function (index: int, value: any) {\\r\n\tthis[index] = value;\\r\n};\\r\n\\r\nArray.prototype.__index_assign_op = function (\\r\n\top_fn: (a: any, b: any) => any,\\r\n\tindex: int,\\r\n\tvalue: any\\r\n) {\\r\n\tthis[index] = op_fn(this[index], value);\\r\n};\\r\n\\r\n/** @shadeup=tag(async) */\\r\nexport function sleep(seconds: float) {\\r\n\treturn new Promise((resolve) => setTimeout(resolve, seconds * 1000));\\r\n}\\r\n\\r\nexport type array<T> = Array<T>;\\r\nexport function array<T>(count: number, initializer: any = null): array<T> {\\r\n\tlet arr = new Array<T>(count);\\r\n\tif (initializer) {\\r\n\t\tfor (let i = 0; i < count; i++) {\\r\n\t\t\tarr[i] = initializer;\\r\n\t\t}\\r\n\t}\\r\n\treturn arr;\\r\n}\\r\n\\r\nexport class map<K extends HashableType, V> {\\r\n\tpairs: Map<string, [K, V]> = new Map<string, [K, V]>();\\r\n\\r\n\tconstructor(entries?: [K, V][]) {\\r\n\t\tif (entries)\\r\n\t\t\tfor (let e of entries) {\\r\n\t\t\t\tthis.__index_assign(e[0], e[1]);\\r\n\t\t\t}\\r\n\t}\\r\n\\r\n\t__index(key: K): V {\\r\n\t\tif (!this.pairs.has(hashableTypeToString(key))) {\\r\n\t\t\tthrow new Error('Key not found: ' + hashableTypeToString(key));\\r\n\t\t}\\r\n\\r\n\t\treturn this.pairs.get(hashableTypeToString(key))[1];\\r\n\t}\\r\n\\r\n\t__index_assign(key: K, value: V) {\\r\n\t\tthis.pairs.set(hashableTypeToString(key), [key, value]);\\r\n\t}\\r\n\\r\n\t__index_assign_op(op_fn: (a: V, b: V) => V, key: K, value: V) {\\r\n\t\tthis.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\\r\n\t}\\r\n\\r\n\tdelete(key: K) {\\r\n\t\tthis.pairs.delete(hashableTypeToString(key));\\r\n\t}\\r\n\\r\n\thas(key: K): bool {\\r\n\t\treturn this.pairs.has(hashableTypeToString(key));\\r\n\t}\\r\n\\r\n\tkeys(): K[] {\\r\n\t\treturn Array.from(this.pairs.values()).map((k) => k[0]);\\r\n\t}\\r\n\\r\n\tvalues(): V[] {\\r\n\t\treturn Array.from(this.pairs.values()).map((k) => k[1]);\\r\n\t}\\r\n\\r\n\tstatic new<K extends HashableType, V>(entries?: [K, V][]): map<K, V> {\\r\n\t\treturn new map<K, V>(entries);\\r\n\t}\\r\n}\\r\n\\r\nexport function __makeMap<V>(initial: { [key: number]: V }): map<number, V>;\\r\nexport function __makeMap<V>(initial: { [key: string]: V }): map<string, V>;\\r\nexport function __makeMap<V>(initial: { [key: string | number]: V }): map<string | number, V> {\\r\n\treturn new map<string | number, V>(Object.entries(initial));\\r\n}\\r\n\\r\nexport function __deepClone(value: any) {\\r\n\tif (typeof value == 'object') {\\r\n\t\tif (Array.isArray(value)) {\\r\n\t\t\tlet res = new Array(value.length);\\r\n\t\t\tfor (let i = 0; i < value.length; i++) {\\r\n\t\t\t\tres[i] = __deepClone(value[i]);\\r\n\t\t\t}\\r\n\t\t\treturn res;\\r\n\t\t} else {\\r\n\t\t\tif (value && typeof value.clone == 'function') {\\r\n\t\t\t\treturn value.clone();\\r\n\t\t\t} else {\\r\n\t\t\t\treturn value;\\r\n\t\t\t}\\r\n\t\t}\\r\n\t} else {\\r\n\t\treturn value;\\r\n\t}\\r\n}\\r\n\\r\nexport interface Spatial2d {\\r\n\tgetPosition(): float2;\\r\n\tgetBoundsMin(): float2;\\r\n\tgetBoundsMax(): float2;\\r\n\tgetRadius(): float;\\r\n\\r\n\tsetPosition(pos: float2): void;\\r\n}\\r\n\\r\nexport interface Spatial3d {\\r\n\tgetPosition(): float3;\\r\n\tgetBoundsMin(): float3;\\r\n\tgetBoundsMax(): float3;\\r\n\tgetRadius(): float;\\r\n\\r\n\tsetPosition(pos: float3): void;\\r\n}\\r\n\\r\nexport class time {\\r\n\t/** Saves the current time with a key of name */\\r\n\tstatic start(name?: string) {\\r\n\t\tperformance.mark((name ?? '_default') + '_start');\\r\n\t}\\r\n\\r\n\t/** Returns the difference in milliseconds between a start with the same key */\\r\n\tstatic stop(name?: string): float {\\r\n\t\tperformance.mark((name ?? '_default') + '_end');\\r\n\\r\n\t\tlet res = performance.measure(\\r\n\t\t\t(name ?? '_default') + '_diff',\\r\n\t\t\t(name ?? '_default') + '_start',\\r\n\t\t\t(name ?? '_default') + '_end'\\r\n\t\t);\\r\n\\r\n\t\treturn res.duration;\\r\n\t}\\r\n\\r\n\t/**\\r\n\t * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\\r\n\t *\\r\n\t * This uses performance.now() under the hood:\\r\n\t * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\\r\n\t */\\r\n\tstatic now(): float {\\r\n\t\treturn performance.now();\\r\n\t}\\r\n}\\r\n`;\n  const globalDTS = \"/*! *****************************************************************************\\r\\nCopyright (c) Microsoft Corporation. All rights reserved.\\r\\nLicensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\r\\nthis file except in compliance with the License. You may obtain a copy of the\\r\\nLicense at http://www.apache.org/licenses/LICENSE-2.0\\r\\n\\r\\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\\r\\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\\r\\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\\r\\nMERCHANTABLITY OR NON-INFRINGEMENT.\\r\\n\\r\\nSee the Apache Version 2.0 License for specific language governing permissions\\r\\nand limitations under the License.\\r\\n***************************************************************************** */\\r\\n\\r\\n/// <reference no-default-lib=\\\"true\\\"/>\\r\\n\\r\\n/// <reference lib=\\\"decorators\\\" />\\r\\n/// <reference lib=\\\"decorators.legacy\\\" />\\r\\n\\r\\n/////////////////////////////\\r\\n/// ECMAScript APIs\\r\\n/////////////////////////////\\r\\n\\r\\ntype float = number & { _opaque_float: 2 };\\r\\ntype int = number & { _opaque_int: 1 } & float;\\r\\n\\r\\ndeclare var NaN: number;\\r\\ndeclare var Infinity: number;\\r\\n\\r\\n/**\\r\\n * Converts a string to an integer.\\r\\n * @param string A string to convert into a number.\\r\\n * @param radix A value between 2 and 36 that specifies the base of the number in `string`.\\r\\n * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\\r\\n * All other strings are considered decimal.\\r\\n */\\r\\ndeclare function parseInt(string: string, radix?: number): number;\\r\\n\\r\\n/**\\r\\n * Converts a string to a floating-point number.\\r\\n * @param string A string that contains a floating-point number.\\r\\n */\\r\\ndeclare function parseFloat(string: string): number;\\r\\n\\r\\n/**\\r\\n * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number).\\r\\n * @param number A numeric value.\\r\\n */\\r\\ndeclare function isNaN(number: number): boolean;\\r\\n\\r\\n/**\\r\\n * Determines whether a supplied number is finite.\\r\\n * @param number Any numeric value.\\r\\n */\\r\\ndeclare function isFinite(number: number): boolean;\\r\\n\\r\\n/**\\r\\n * Gets the unencoded version of an encoded Uniform Resource Identifier (URI).\\r\\n * @param encodedURI A value representing an encoded URI.\\r\\n */\\r\\ndeclare function decodeURI(encodedURI: string): string;\\r\\n\\r\\n/**\\r\\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\\r\\n * @param encodedURIComponent A value representing an encoded URI component.\\r\\n */\\r\\ndeclare function decodeURIComponent(encodedURIComponent: string): string;\\r\\n\\r\\n/**\\r\\n * Encodes a text string as a valid Uniform Resource Identifier (URI)\\r\\n * @param uri A value representing an unencoded URI.\\r\\n */\\r\\ndeclare function encodeURI(uri: string): string;\\r\\n\\r\\n/**\\r\\n * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).\\r\\n * @param uriComponent A value representing an unencoded URI component.\\r\\n */\\r\\ndeclare function encodeURIComponent(uriComponent: string | number | boolean): string;\\r\\n\\r\\n/**\\r\\n * Computes a new string in which certain characters have been replaced by a hexadecimal escape sequence.\\r\\n * @deprecated A legacy feature for browser compatibility\\r\\n * @param string A string value\\r\\n */\\r\\ndeclare function escape(string: string): string;\\r\\n\\r\\n/**\\r\\n * Computes a new string in which hexadecimal escape sequences are replaced with the character that it represents.\\r\\n * @deprecated A legacy feature for browser compatibility\\r\\n * @param string A string value\\r\\n */\\r\\ndeclare function unescape(string: string): string;\\r\\n\\r\\ninterface Symbol {\\r\\n\t/** Returns a string representation of an object. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): symbol;\\r\\n}\\r\\n\\r\\ndeclare type PropertyKey = string | number | symbol;\\r\\n\\r\\ninterface PropertyDescriptor {\\r\\n\tconfigurable?: boolean;\\r\\n\tenumerable?: boolean;\\r\\n\tvalue?: any;\\r\\n\twritable?: boolean;\\r\\n\tget?(): any;\\r\\n\tset?(v: any): void;\\r\\n}\\r\\n\\r\\ninterface PropertyDescriptorMap {\\r\\n\t[key: PropertyKey]: PropertyDescriptor;\\r\\n}\\r\\n\\r\\ninterface Object {\\r\\n\t/** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */\\r\\n\tconstructor: Function;\\r\\n\\r\\n\t/** Returns a string representation of an object. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns a date converted to a string using the current locale. */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Object;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether an object has a property with the specified name.\\r\\n\t * @param v A property name.\\r\\n\t */\\r\\n\thasOwnProperty(v: PropertyKey): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether an object exists in another object's prototype chain.\\r\\n\t * @param v Another object whose prototype chain is to be checked.\\r\\n\t */\\r\\n\tisPrototypeOf(v: Object): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether a specified property is enumerable.\\r\\n\t * @param v A property name.\\r\\n\t */\\r\\n\tpropertyIsEnumerable(v: PropertyKey): boolean;\\r\\n}\\r\\n\\r\\ninterface ObjectConstructor {\\r\\n\tnew (value?: any): Object;\\r\\n\t(): any;\\r\\n\t(value: any): any;\\r\\n\\r\\n\t/** A reference to the prototype for a class of objects. */\\r\\n\treadonly prototype: Object;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the prototype of an object.\\r\\n\t * @param o The object that references the prototype.\\r\\n\t */\\r\\n\tgetPrototypeOf(o: any): any;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the own property descriptor of the specified object.\\r\\n\t * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype.\\r\\n\t * @param o Object that contains the property.\\r\\n\t * @param p Name of the property.\\r\\n\t */\\r\\n\tgetOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\\r\\n\t * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\\r\\n\t * @param o Object that contains the own properties.\\r\\n\t */\\r\\n\tgetOwnPropertyNames(o: any): string[];\\r\\n\\r\\n\t/**\\r\\n\t * Creates an object that has the specified prototype or that has null prototype.\\r\\n\t * @param o Object to use as a prototype. May be null.\\r\\n\t */\\r\\n\tcreate(o: object | null): any;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an object that has the specified prototype, and that optionally contains specified properties.\\r\\n\t * @param o Object to use as a prototype. May be null\\r\\n\t * @param properties JavaScript object that contains one or more property descriptors.\\r\\n\t */\\r\\n\tcreate(o: object | null, properties: PropertyDescriptorMap & ThisType<any>): any;\\r\\n\\r\\n\t/**\\r\\n\t * Adds a property to an object, or modifies attributes of an existing property.\\r\\n\t * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.\\r\\n\t * @param p The property name.\\r\\n\t * @param attributes Descriptor for the property. It can be for a data property or an accessor property.\\r\\n\t */\\r\\n\tdefineProperty<T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>): T;\\r\\n\\r\\n\t/**\\r\\n\t * Adds one or more properties to an object, and/or modifies attributes of existing properties.\\r\\n\t * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.\\r\\n\t * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.\\r\\n\t */\\r\\n\tdefineProperties<T>(o: T, properties: PropertyDescriptorMap & ThisType<any>): T;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of attributes of existing properties, and prevents the addition of new properties.\\r\\n\t * @param o Object on which to lock the attributes.\\r\\n\t */\\r\\n\tseal<T>(o: T): T;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\\r\\n\t * @param f Object on which to lock the attributes.\\r\\n\t */\\r\\n\tfreeze<T extends Function>(f: T): T;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\\r\\n\t * @param o Object on which to lock the attributes.\\r\\n\t */\\r\\n\tfreeze<\\r\\n\t\tT extends { [idx: string]: U | null | undefined | object },\\r\\n\t\tU extends string | bigint | number | boolean | symbol\\r\\n\t>(\\r\\n\t\to: T\\r\\n\t): Readonly<T>;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\\r\\n\t * @param o Object on which to lock the attributes.\\r\\n\t */\\r\\n\tfreeze<T>(o: T): Readonly<T>;\\r\\n\\r\\n\t/**\\r\\n\t * Prevents the addition of new properties to an object.\\r\\n\t * @param o Object to make non-extensible.\\r\\n\t */\\r\\n\tpreventExtensions<T>(o: T): T;\\r\\n\\r\\n\t/**\\r\\n\t * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.\\r\\n\t * @param o Object to test.\\r\\n\t */\\r\\n\tisSealed(o: any): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.\\r\\n\t * @param o Object to test.\\r\\n\t */\\r\\n\tisFrozen(o: any): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a value that indicates whether new properties can be added to an object.\\r\\n\t * @param o Object to test.\\r\\n\t */\\r\\n\tisExtensible(o: any): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the names of the enumerable string properties and methods of an object.\\r\\n\t * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\\r\\n\t */\\r\\n\tkeys(o: object): string[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * Provides functionality common to all JavaScript objects.\\r\\n */\\r\\ndeclare var Object: ObjectConstructor;\\r\\n\\r\\n/**\\r\\n * Creates a new function.\\r\\n */\\r\\ninterface Function {\\r\\n\t/**\\r\\n\t * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param argArray A set of arguments to be passed to the function.\\r\\n\t */\\r\\n\tapply(this: Function, thisArg: any, argArray?: any): any;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a method of an object, substituting another object for the current object.\\r\\n\t * @param thisArg The object to be used as the current object.\\r\\n\t * @param argArray A list of arguments to be passed to the method.\\r\\n\t */\\r\\n\tcall(this: Function, thisArg: any, ...argArray: any[]): any;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg An object to which the this keyword can refer inside the new function.\\r\\n\t * @param argArray A list of arguments to be passed to the new function.\\r\\n\t */\\r\\n\tbind(this: Function, thisArg: any, ...argArray: any[]): any;\\r\\n\\r\\n\t/** Returns a string representation of a function. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\tprototype: any;\\r\\n\treadonly length: int;\\r\\n\\r\\n\t// Non-standard extensions\\r\\n\targuments: any;\\r\\n\tcaller: Function;\\r\\n}\\r\\n\\r\\ninterface FunctionConstructor {\\r\\n\t/**\\r\\n\t * Creates a new function.\\r\\n\t * @param args A list of arguments the function accepts.\\r\\n\t */\\r\\n\tnew (...args: string[]): Function;\\r\\n\t(...args: string[]): Function;\\r\\n\treadonly prototype: Function;\\r\\n}\\r\\n\\r\\ndeclare var Function: FunctionConstructor;\\r\\n\\r\\n/**\\r\\n * Extracts the type of the 'this' parameter of a function type, or 'unknown' if the function type has no 'this' parameter.\\r\\n */\\r\\ntype ThisParameterType<T> = T extends (this: infer U, ...args: never) => any ? U : unknown;\\r\\n\\r\\n/**\\r\\n * Removes the 'this' parameter from a function type.\\r\\n */\\r\\ntype OmitThisParameter<T> = unknown extends ThisParameterType<T>\\r\\n\t? T\\r\\n\t: T extends (...args: infer A) => infer R\\r\\n\t? (...args: A) => R\\r\\n\t: T;\\r\\n\\r\\ninterface CallableFunction extends Function {\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tapply<T, R>(this: (this: T) => R, thisArg: T): R;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args An array of argument values to be passed to the function.\\r\\n\t */\\r\\n\tapply<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, args: A): R;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Argument values to be passed to the function.\\r\\n\t */\\r\\n\tcall<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tbind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Arguments to bind to the parameters of the function.\\r\\n\t */\\r\\n\tbind<T, A extends any[], B extends any[], R>(\\r\\n\t\tthis: (this: T, ...args: [...A, ...B]) => R,\\r\\n\t\tthisArg: T,\\r\\n\t\t...args: A\\r\\n\t): (...args: B) => R;\\r\\n}\\r\\n\\r\\ninterface NewableFunction extends Function {\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tapply<T>(this: new () => T, thisArg: T): void;\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args An array of argument values to be passed to the function.\\r\\n\t */\\r\\n\tapply<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, args: A): void;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Argument values to be passed to the function.\\r\\n\t */\\r\\n\tcall<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, ...args: A): void;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t */\\r\\n\tbind<T>(this: T, thisArg: any): T;\\r\\n\\r\\n\t/**\\r\\n\t * For a given function, creates a bound function that has the same body as the original function.\\r\\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\\r\\n\t * @param thisArg The object to be used as the this object.\\r\\n\t * @param args Arguments to bind to the parameters of the function.\\r\\n\t */\\r\\n\tbind<A extends any[], B extends any[], R>(\\r\\n\t\tthis: new (...args: [...A, ...B]) => R,\\r\\n\t\tthisArg: any,\\r\\n\t\t...args: A\\r\\n\t): new (...args: B) => R;\\r\\n}\\r\\n\\r\\ninterface IArguments {\\r\\n\t[index: number]: any;\\r\\n\tlength: int;\\r\\n\tcallee: Function;\\r\\n}\\r\\n\\r\\ninterface String {\\r\\n\t/** Returns a string representation of a string. */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the character at the specified index.\\r\\n\t * @param pos The zero-based index of the desired character.\\r\\n\t */\\r\\n\tcharAt(pos: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the Unicode value of the character at the specified location.\\r\\n\t * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\\r\\n\t */\\r\\n\tcharCodeAt(index: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string that contains the concatenation of two or more strings.\\r\\n\t * @param strings The strings to append to the end of the string.\\r\\n\t */\\r\\n\tconcat(...strings: string[]): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the position of the first occurrence of a substring.\\r\\n\t * @param searchString The substring to search for in the string\\r\\n\t * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\\r\\n\t */\\r\\n\tindexOf(searchString: string, position?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the last occurrence of a substring in the string.\\r\\n\t * @param searchString The substring to search for.\\r\\n\t * @param position The index at which to begin searching. If omitted, the search begins at the end of the string.\\r\\n\t */\\r\\n\tlastIndexOf(searchString: string, position?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether two strings are equivalent in the current locale.\\r\\n\t * @param that String to compare to target string\\r\\n\t */\\r\\n\tlocaleCompare(that: string): number;\\r\\n\\r\\n\t/**\\r\\n\t * Matches a string with a regular expression, and returns an array containing the results of that search.\\r\\n\t * @param regexp A variable name or string literal containing the regular expression pattern and flags.\\r\\n\t */\\r\\n\tmatch(regexp: string | RegExp): RegExpMatchArray | null;\\r\\n\\r\\n\t/**\\r\\n\t * Replaces text in a string, using a regular expression or search string.\\r\\n\t * @param searchValue A string or regular expression to search for.\\r\\n\t * @param replaceValue A string containing the text to replace. When the {@linkcode searchValue} is a `RegExp`, all matches are replaced if the `g` flag is set (or only those matches at the beginning, if the `y` flag is also present). Otherwise, only the first match of {@linkcode searchValue} is replaced.\\r\\n\t */\\r\\n\treplace(searchValue: string | RegExp, replaceValue: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Replaces text in a string, using a regular expression or search string.\\r\\n\t * @param searchValue A string to search for.\\r\\n\t * @param replacer A function that returns the replacement text.\\r\\n\t */\\r\\n\treplace(\\r\\n\t\tsearchValue: string | RegExp,\\r\\n\t\treplacer: (substring: string, ...args: any[]) => string\\r\\n\t): string;\\r\\n\\r\\n\t/**\\r\\n\t * Finds the first substring match in a regular expression search.\\r\\n\t * @param regexp The regular expression pattern and applicable flags.\\r\\n\t */\\r\\n\tsearch(regexp: string | RegExp): number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of a string.\\r\\n\t * @param start The index to the beginning of the specified portion of stringObj.\\r\\n\t * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end.\\r\\n\t * If this value is not specified, the substring continues to the end of stringObj.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Split a string into substrings using the specified separator and return them as an array.\\r\\n\t * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.\\r\\n\t * @param limit A value used to limit the number of elements returned in the array.\\r\\n\t */\\r\\n\tsplit(separator: string | RegExp, limit?: number): string[];\\r\\n\\r\\n\t/**\\r\\n\t * Returns the substring at the specified location within a String object.\\r\\n\t * @param start The zero-based index number indicating the beginning of the substring.\\r\\n\t * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\\r\\n\t * If end is omitted, the characters from start through the end of the original string are returned.\\r\\n\t */\\r\\n\tsubstring(start: number, end?: number): string;\\r\\n\\r\\n\t/** Converts all the alphabetic characters in a string to lowercase. */\\r\\n\ttoLowerCase(): string;\\r\\n\\r\\n\t/** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */\\r\\n\ttoLocaleLowerCase(locales?: string | string[]): string;\\r\\n\\r\\n\t/** Converts all the alphabetic characters in a string to uppercase. */\\r\\n\ttoUpperCase(): string;\\r\\n\\r\\n\t/** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */\\r\\n\ttoLocaleUpperCase(locales?: string | string[]): string;\\r\\n\\r\\n\t/** Removes the leading and trailing white space and line terminator characters from a string. */\\r\\n\ttrim(): string;\\r\\n\\r\\n\t/** Returns the length of a String object. */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t// IE extensions\\r\\n\t/**\\r\\n\t * Gets a substring beginning at the specified location and having the specified length.\\r\\n\t * @deprecated A legacy feature for browser compatibility\\r\\n\t * @param from The starting position of the desired substring. The index of the first character in the string is zero.\\r\\n\t * @param length The number of characters to include in the returned substring.\\r\\n\t */\\r\\n\tsubstr(from: number, length?: number): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): string;\\r\\n\\r\\n\treadonly [index: number]: string;\\r\\n}\\r\\n\\r\\ninterface StringConstructor {\\r\\n\tnew (value?: any): String;\\r\\n\t(value?: any): string;\\r\\n\treadonly prototype: String;\\r\\n\tfromCharCode(...codes: number[]): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Allows manipulation and formatting of text strings and determination and location of substrings within strings.\\r\\n */\\r\\ndeclare var String: StringConstructor;\\r\\n\\r\\ninterface Boolean {\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): boolean;\\r\\n}\\r\\n\\r\\ninterface BooleanConstructor {\\r\\n\tnew (value?: any): Boolean;\\r\\n\t<T>(value?: T): boolean;\\r\\n\treadonly prototype: Boolean;\\r\\n}\\r\\n\\r\\ndeclare var Boolean: BooleanConstructor;\\r\\n\\r\\ninterface Number {\\r\\n\t/**\\r\\n\t * Returns a string representation of an object.\\r\\n\t * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.\\r\\n\t */\\r\\n\ttoString(radix?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representing a number in fixed-point notation.\\r\\n\t * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\\r\\n\t */\\r\\n\ttoFixed(fractionDigits?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string containing a number represented in exponential notation.\\r\\n\t * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\\r\\n\t */\\r\\n\ttoExponential(fractionDigits?: number): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.\\r\\n\t * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.\\r\\n\t */\\r\\n\ttoPrecision(precision?: number): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): number;\\r\\n}\\r\\n\\r\\ninterface NumberConstructor {\\r\\n\tnew (value?: any): Number;\\r\\n\t(value?: any): number;\\r\\n\treadonly prototype: Number;\\r\\n\\r\\n\t/** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */\\r\\n\treadonly MAX_VALUE: number;\\r\\n\\r\\n\t/** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */\\r\\n\treadonly MIN_VALUE: number;\\r\\n\\r\\n\t/**\\r\\n\t * A value that is not a number.\\r\\n\t * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.\\r\\n\t */\\r\\n\treadonly NaN: number;\\r\\n\\r\\n\t/**\\r\\n\t * A value that is less than the largest negative number that can be represented in JavaScript.\\r\\n\t * JavaScript displays NEGATIVE_INFINITY values as -infinity.\\r\\n\t */\\r\\n\treadonly NEGATIVE_INFINITY: number;\\r\\n\\r\\n\t/**\\r\\n\t * A value greater than the largest number that can be represented in JavaScript.\\r\\n\t * JavaScript displays POSITIVE_INFINITY values as infinity.\\r\\n\t */\\r\\n\treadonly POSITIVE_INFINITY: number;\\r\\n}\\r\\n\\r\\n/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */\\r\\ndeclare var Number: NumberConstructor;\\r\\n\\r\\ninterface TemplateStringsArray extends ReadonlyArray<string> {\\r\\n\treadonly raw: readonly string[];\\r\\n}\\r\\n\\r\\n/**\\r\\n * The type of `import.meta`.\\r\\n *\\r\\n * If you need to declare that a given property exists on `import.meta`,\\r\\n * this type may be augmented via interface merging.\\r\\n */\\r\\ninterface ImportMeta {}\\r\\n\\r\\n/**\\r\\n * The type for the optional second argument to `import()`.\\r\\n *\\r\\n * If your host environment supports additional options, this type may be\\r\\n * augmented via interface merging.\\r\\n */\\r\\ninterface ImportCallOptions {\\r\\n\tassert?: ImportAssertions;\\r\\n}\\r\\n\\r\\n/**\\r\\n * The type for the `assert` property of the optional second argument to `import()`.\\r\\n */\\r\\ninterface ImportAssertions {\\r\\n\t[key: string]: string;\\r\\n}\\r\\n\\r\\ninterface Math {\\r\\n\t/** The mathematical constant e. This is Euler's number, the base of natural logarithms. */\\r\\n\treadonly E: number;\\r\\n\t/** The natural logarithm of 10. */\\r\\n\treadonly LN10: number;\\r\\n\t/** The natural logarithm of 2. */\\r\\n\treadonly LN2: number;\\r\\n\t/** The base-2 logarithm of e. */\\r\\n\treadonly LOG2E: number;\\r\\n\t/** The base-10 logarithm of e. */\\r\\n\treadonly LOG10E: number;\\r\\n\t/** Pi. This is the ratio of the circumference of a circle to its diameter. */\\r\\n\treadonly PI: number;\\r\\n\t/** The square root of 0.5, or, equivalently, one divided by the square root of 2. */\\r\\n\treadonly SQRT1_2: number;\\r\\n\t/** The square root of 2. */\\r\\n\treadonly SQRT2: number;\\r\\n\t/**\\r\\n\t * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\\r\\n\t * For example, the absolute value of -5 is the same as the absolute value of 5.\\r\\n\t * @param x A numeric expression for which the absolute value is needed.\\r\\n\t */\\r\\n\tabs(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the arc cosine (or inverse cosine) of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tacos(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the arcsine of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tasin(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the arctangent of a number.\\r\\n\t * @param x A numeric expression for which the arctangent is needed.\\r\\n\t */\\r\\n\tatan(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the angle (in radians) from the X axis to a point.\\r\\n\t * @param y A numeric expression representing the cartesian y-coordinate.\\r\\n\t * @param x A numeric expression representing the cartesian x-coordinate.\\r\\n\t */\\r\\n\tatan2(y: number, x: number): number;\\r\\n\t/**\\r\\n\t * Returns the smallest integer greater than or equal to its numeric argument.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tceil(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the cosine of a number.\\r\\n\t * @param x A numeric expression that contains an angle measured in radians.\\r\\n\t */\\r\\n\tcos(x: number): number;\\r\\n\t/**\\r\\n\t * Returns e (the base of natural logarithms) raised to a power.\\r\\n\t * @param x A numeric expression representing the power of e.\\r\\n\t */\\r\\n\texp(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the greatest integer less than or equal to its numeric argument.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tfloor(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the natural logarithm (base e) of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tlog(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the larger of a set of supplied numeric expressions.\\r\\n\t * @param values Numeric expressions to be evaluated.\\r\\n\t */\\r\\n\tmax(...values: number[]): number;\\r\\n\t/**\\r\\n\t * Returns the smaller of a set of supplied numeric expressions.\\r\\n\t * @param values Numeric expressions to be evaluated.\\r\\n\t */\\r\\n\tmin(...values: number[]): number;\\r\\n\t/**\\r\\n\t * Returns the value of a base expression taken to a specified power.\\r\\n\t * @param x The base value of the expression.\\r\\n\t * @param y The exponent value of the expression.\\r\\n\t */\\r\\n\tpow(x: number, y: number): number;\\r\\n\t/** Returns a pseudorandom number between 0 and 1. */\\r\\n\trandom(): number;\\r\\n\t/**\\r\\n\t * Returns a supplied numeric expression rounded to the nearest integer.\\r\\n\t * @param x The value to be rounded to the nearest integer.\\r\\n\t */\\r\\n\tround(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the sine of a number.\\r\\n\t * @param x A numeric expression that contains an angle measured in radians.\\r\\n\t */\\r\\n\tsin(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the square root of a number.\\r\\n\t * @param x A numeric expression.\\r\\n\t */\\r\\n\tsqrt(x: number): number;\\r\\n\t/**\\r\\n\t * Returns the tangent of a number.\\r\\n\t * @param x A numeric expression that contains an angle measured in radians.\\r\\n\t */\\r\\n\ttan(x: number): number;\\r\\n}\\r\\n/** An intrinsic object that provides basic mathematics functionality and constants. */\\r\\ndeclare var Math: Math;\\r\\n\\r\\n/** Enables basic storage and retrieval of dates and times. */\\r\\ninterface Date {\\r\\n\t/** Returns a string representation of a date. The format of the string depends on the locale. */\\r\\n\ttoString(): string;\\r\\n\t/** Returns a date as a string value. */\\r\\n\ttoDateString(): string;\\r\\n\t/** Returns a time as a string value. */\\r\\n\ttoTimeString(): string;\\r\\n\t/** Returns a value as a string value appropriate to the host environment's current locale. */\\r\\n\ttoLocaleString(): string;\\r\\n\t/** Returns a date as a string value appropriate to the host environment's current locale. */\\r\\n\ttoLocaleDateString(): string;\\r\\n\t/** Returns a time as a string value appropriate to the host environment's current locale. */\\r\\n\ttoLocaleTimeString(): string;\\r\\n\t/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\\r\\n\tvalueOf(): number;\\r\\n\t/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\\r\\n\tgetTime(): number;\\r\\n\t/** Gets the year, using local time. */\\r\\n\tgetFullYear(): number;\\r\\n\t/** Gets the year using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCFullYear(): number;\\r\\n\t/** Gets the month, using local time. */\\r\\n\tgetMonth(): number;\\r\\n\t/** Gets the month of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCMonth(): number;\\r\\n\t/** Gets the day-of-the-month, using local time. */\\r\\n\tgetDate(): number;\\r\\n\t/** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCDate(): number;\\r\\n\t/** Gets the day of the week, using local time. */\\r\\n\tgetDay(): number;\\r\\n\t/** Gets the day of the week using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCDay(): number;\\r\\n\t/** Gets the hours in a date, using local time. */\\r\\n\tgetHours(): number;\\r\\n\t/** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCHours(): number;\\r\\n\t/** Gets the minutes of a Date object, using local time. */\\r\\n\tgetMinutes(): number;\\r\\n\t/** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCMinutes(): number;\\r\\n\t/** Gets the seconds of a Date object, using local time. */\\r\\n\tgetSeconds(): number;\\r\\n\t/** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCSeconds(): number;\\r\\n\t/** Gets the milliseconds of a Date, using local time. */\\r\\n\tgetMilliseconds(): number;\\r\\n\t/** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */\\r\\n\tgetUTCMilliseconds(): number;\\r\\n\t/** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */\\r\\n\tgetTimezoneOffset(): number;\\r\\n\t/**\\r\\n\t * Sets the date and time value in the Date object.\\r\\n\t * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT.\\r\\n\t */\\r\\n\tsetTime(time: number): number;\\r\\n\t/**\\r\\n\t * Sets the milliseconds value in the Date object using local time.\\r\\n\t * @param ms A numeric value equal to the millisecond value.\\r\\n\t */\\r\\n\tsetMilliseconds(ms: number): number;\\r\\n\t/**\\r\\n\t * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param ms A numeric value equal to the millisecond value.\\r\\n\t */\\r\\n\tsetUTCMilliseconds(ms: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Sets the seconds value in the Date object using local time.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetSeconds(sec: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the seconds value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetUTCSeconds(sec: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the minutes value in the Date object using local time.\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetMinutes(min: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the minutes value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetUTCMinutes(min: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the hour value in the Date object using local time.\\r\\n\t * @param hours A numeric value equal to the hours value.\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetHours(hours: number, min?: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the hours value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param hours A numeric value equal to the hours value.\\r\\n\t * @param min A numeric value equal to the minutes value.\\r\\n\t * @param sec A numeric value equal to the seconds value.\\r\\n\t * @param ms A numeric value equal to the milliseconds value.\\r\\n\t */\\r\\n\tsetUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;\\r\\n\t/**\\r\\n\t * Sets the numeric day-of-the-month value of the Date object using local time.\\r\\n\t * @param date A numeric value equal to the day of the month.\\r\\n\t */\\r\\n\tsetDate(date: number): number;\\r\\n\t/**\\r\\n\t * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param date A numeric value equal to the day of the month.\\r\\n\t */\\r\\n\tsetUTCDate(date: number): number;\\r\\n\t/**\\r\\n\t * Sets the month value in the Date object using local time.\\r\\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\\r\\n\t * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.\\r\\n\t */\\r\\n\tsetMonth(month: number, date?: number): number;\\r\\n\t/**\\r\\n\t * Sets the month value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\\r\\n\t * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.\\r\\n\t */\\r\\n\tsetUTCMonth(month: number, date?: number): number;\\r\\n\t/**\\r\\n\t * Sets the year of the Date object using local time.\\r\\n\t * @param year A numeric value for the year.\\r\\n\t * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.\\r\\n\t * @param date A numeric value equal for the day of the month.\\r\\n\t */\\r\\n\tsetFullYear(year: number, month?: number, date?: number): number;\\r\\n\t/**\\r\\n\t * Sets the year value in the Date object using Universal Coordinated Time (UTC).\\r\\n\t * @param year A numeric value equal to the year.\\r\\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.\\r\\n\t * @param date A numeric value equal to the day of the month.\\r\\n\t */\\r\\n\tsetUTCFullYear(year: number, month?: number, date?: number): number;\\r\\n\t/** Returns a date converted to a string using Universal Coordinated Time (UTC). */\\r\\n\ttoUTCString(): string;\\r\\n\t/** Returns a date as a string value in ISO format. */\\r\\n\ttoISOString(): string;\\r\\n\t/** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */\\r\\n\ttoJSON(key?: any): string;\\r\\n}\\r\\n\\r\\ninterface DateConstructor {\\r\\n\tnew (): Date;\\r\\n\tnew (value: number | string): Date;\\r\\n\t/**\\r\\n\t * Creates a new Date.\\r\\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\\r\\n\t * @param monthIndex The month as a number between 0 and 11 (January to December).\\r\\n\t * @param date The date as a number between 1 and 31.\\r\\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\\r\\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\\r\\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\\r\\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\\r\\n\t */\\r\\n\tnew (\\r\\n\t\tyear: number,\\r\\n\t\tmonthIndex: number,\\r\\n\t\tdate?: number,\\r\\n\t\thours?: number,\\r\\n\t\tminutes?: number,\\r\\n\t\tseconds?: number,\\r\\n\t\tms?: number\\r\\n\t): Date;\\r\\n\t(): string;\\r\\n\treadonly prototype: Date;\\r\\n\t/**\\r\\n\t * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.\\r\\n\t * @param s A date string\\r\\n\t */\\r\\n\tparse(s: string): number;\\r\\n\t/**\\r\\n\t * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date.\\r\\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\\r\\n\t * @param monthIndex The month as a number between 0 and 11 (January to December).\\r\\n\t * @param date The date as a number between 1 and 31.\\r\\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\\r\\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\\r\\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\\r\\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\\r\\n\t */\\r\\n\tUTC(\\r\\n\t\tyear: number,\\r\\n\t\tmonthIndex: number,\\r\\n\t\tdate?: number,\\r\\n\t\thours?: number,\\r\\n\t\tminutes?: number,\\r\\n\t\tseconds?: number,\\r\\n\t\tms?: number\\r\\n\t): number;\\r\\n\t/** Returns the number of milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC). */\\r\\n\tnow(): number;\\r\\n}\\r\\n\\r\\ndeclare var Date: DateConstructor;\\r\\n\\r\\ninterface RegExpMatchArray extends Array<string> {\\r\\n\t/**\\r\\n\t * The index of the search at which the result was found.\\r\\n\t */\\r\\n\tindex?: number;\\r\\n\t/**\\r\\n\t * A copy of the search string.\\r\\n\t */\\r\\n\tinput?: string;\\r\\n\t/**\\r\\n\t * The first match. This will always be present because `null` will be returned if there are no matches.\\r\\n\t */\\r\\n\t0: string;\\r\\n}\\r\\n\\r\\ninterface RegExpExecArray extends Array<string> {\\r\\n\t/**\\r\\n\t * The index of the search at which the result was found.\\r\\n\t */\\r\\n\tindex: number;\\r\\n\t/**\\r\\n\t * A copy of the search string.\\r\\n\t */\\r\\n\tinput: string;\\r\\n\t/**\\r\\n\t * The first match. This will always be present because `null` will be returned if there are no matches.\\r\\n\t */\\r\\n\t0: string;\\r\\n}\\r\\n\\r\\ninterface RegExp {\\r\\n\t/**\\r\\n\t * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.\\r\\n\t * @param string The String object or string literal on which to perform the search.\\r\\n\t */\\r\\n\texec(string: string): RegExpExecArray | null;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a Boolean value that indicates whether or not a pattern exists in a searched string.\\r\\n\t * @param string String on which to perform the search.\\r\\n\t */\\r\\n\ttest(string: string): boolean;\\r\\n\\r\\n\t/** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */\\r\\n\treadonly source: string;\\r\\n\\r\\n\t/** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */\\r\\n\treadonly global: boolean;\\r\\n\\r\\n\t/** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */\\r\\n\treadonly ignoreCase: boolean;\\r\\n\\r\\n\t/** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */\\r\\n\treadonly multiline: boolean;\\r\\n\\r\\n\tlastIndex: number;\\r\\n\\r\\n\t// Non-standard extensions\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tcompile(pattern: string, flags?: string): this;\\r\\n}\\r\\n\\r\\ninterface RegExpConstructor {\\r\\n\tnew (pattern: RegExp | string): RegExp;\\r\\n\tnew (pattern: string, flags?: string): RegExp;\\r\\n\t(pattern: RegExp | string): RegExp;\\r\\n\t(pattern: string, flags?: string): RegExp;\\r\\n\treadonly prototype: RegExp;\\r\\n\\r\\n\t// Non-standard extensions\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$1: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$2: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$3: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$4: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$5: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$6: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$7: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$8: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$9: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tinput: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t$_: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tlastMatch: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t'$&': string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tlastParen: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t'$+': string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\tleftContext: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t'$`': string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\trightContext: string;\\r\\n\t/** @deprecated A legacy feature for browser compatibility */\\r\\n\t\\\"$'\\\": string;\\r\\n}\\r\\n\\r\\ndeclare var RegExp: RegExpConstructor;\\r\\n\\r\\ninterface Error {\\r\\n\tname: string;\\r\\n\tmessage: string;\\r\\n\tstack?: string;\\r\\n}\\r\\n\\r\\ninterface ErrorConstructor {\\r\\n\tnew (message?: string): Error;\\r\\n\t(message?: string): Error;\\r\\n\treadonly prototype: Error;\\r\\n}\\r\\n\\r\\ndeclare var Error: ErrorConstructor;\\r\\n\\r\\ninterface EvalError extends Error {}\\r\\n\\r\\ninterface EvalErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): EvalError;\\r\\n\t(message?: string): EvalError;\\r\\n\treadonly prototype: EvalError;\\r\\n}\\r\\n\\r\\ndeclare var EvalError: EvalErrorConstructor;\\r\\n\\r\\ninterface RangeError extends Error {}\\r\\n\\r\\ninterface RangeErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): RangeError;\\r\\n\t(message?: string): RangeError;\\r\\n\treadonly prototype: RangeError;\\r\\n}\\r\\n\\r\\ndeclare var RangeError: RangeErrorConstructor;\\r\\n\\r\\ninterface ReferenceError extends Error {}\\r\\n\\r\\ninterface ReferenceErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): ReferenceError;\\r\\n\t(message?: string): ReferenceError;\\r\\n\treadonly prototype: ReferenceError;\\r\\n}\\r\\n\\r\\ndeclare var ReferenceError: ReferenceErrorConstructor;\\r\\n\\r\\ninterface SyntaxError extends Error {}\\r\\n\\r\\ninterface SyntaxErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): SyntaxError;\\r\\n\t(message?: string): SyntaxError;\\r\\n\treadonly prototype: SyntaxError;\\r\\n}\\r\\n\\r\\ndeclare var SyntaxError: SyntaxErrorConstructor;\\r\\n\\r\\ninterface TypeError extends Error {}\\r\\n\\r\\ninterface TypeErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): TypeError;\\r\\n\t(message?: string): TypeError;\\r\\n\treadonly prototype: TypeError;\\r\\n}\\r\\n\\r\\ndeclare var TypeError: TypeErrorConstructor;\\r\\n\\r\\ninterface URIError extends Error {}\\r\\n\\r\\ninterface URIErrorConstructor extends ErrorConstructor {\\r\\n\tnew (message?: string): URIError;\\r\\n\t(message?: string): URIError;\\r\\n\treadonly prototype: URIError;\\r\\n}\\r\\n\\r\\ndeclare var URIError: URIErrorConstructor;\\r\\n\\r\\ninterface JSON {\\r\\n\t/**\\r\\n\t * Converts a JavaScript Object Notation (JSON) string into an object.\\r\\n\t * @param text A valid JSON string.\\r\\n\t * @param reviver A function that transforms the results. This function is called for each member of the object.\\r\\n\t * If a member contains nested objects, the nested objects are transformed before the parent object is.\\r\\n\t */\\r\\n\tparse(text: string, reviver?: (this: any, key: string, value: any) => any): any;\\r\\n\t/**\\r\\n\t * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\\r\\n\t * @param value A JavaScript value, usually an object or array, to be converted.\\r\\n\t * @param replacer A function that transforms the results.\\r\\n\t * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\\r\\n\t */\\r\\n\tstringify(\\r\\n\t\tvalue: any,\\r\\n\t\treplacer?: (this: any, key: string, value: any) => any,\\r\\n\t\tspace?: string | number\\r\\n\t): string;\\r\\n\t/**\\r\\n\t * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\\r\\n\t * @param value A JavaScript value, usually an object or array, to be converted.\\r\\n\t * @param replacer An array of strings and numbers that acts as an approved list for selecting the object properties that will be stringified.\\r\\n\t * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\\r\\n\t */\\r\\n\tstringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string;\\r\\n}\\r\\n\\r\\n/**\\r\\n * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.\\r\\n */\\r\\ndeclare var JSON: JSON;\\r\\n\\r\\n/////////////////////////////\\r\\n/// ECMAScript Array API (specially handled by compiler)\\r\\n/////////////////////////////\\r\\n\\r\\ninterface ReadonlyArray<T> {\\r\\n\t/**\\r\\n\t * Gets the length of the array. This is a number one higher than the highest element defined in an array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * @param items Additional items to add to the end of array1.\\r\\n\t */\\r\\n\tconcat(...items: ConcatArray<T>[]): T[];\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * @param items Additional items to add to the end of array1.\\r\\n\t */\\r\\n\tconcat(...items: (T | ConcatArray<T>)[]): T[];\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): T[];\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a specified value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): this is readonly S[];\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): S[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T\\r\\n\t): T;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T\\r\\n\t): T;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\treadonly [n: number]: T;\\r\\n}\\r\\n\\r\\ninterface ConcatArray<T> {\\r\\n\treadonly length: int;\\r\\n\treadonly [n: number]: T;\\r\\n\tjoin(separator?: string): string;\\r\\n\tslice(start?: number, end?: number): T[];\\r\\n}\\r\\n\\r\\ninterface Array<T> {\\r\\n\t/**\\r\\n\t * Gets or sets the length of the array. This is a number one higher than the highest index in the array.\\r\\n\t */\\r\\n\tlength: int;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\t/**\\r\\n\t * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\t/**\\r\\n\t * Removes the last element from an array and returns it.\\r\\n\t * If the array is empty, undefined is returned and the array is not modified.\\r\\n\t */\\r\\n\tpop(): T | undefined;\\r\\n\t/**\\r\\n\t * Appends new elements to the end of an array, and returns the new length of the array.\\r\\n\t * @param items New elements to add to the array.\\r\\n\t */\\r\\n\tpush(...items: T[]): number;\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * This method returns a new array without modifying any existing arrays.\\r\\n\t * @param items Additional arrays and/or items to add to the end of the array.\\r\\n\t */\\r\\n\tconcat(...items: ConcatArray<T>[]): T[];\\r\\n\t/**\\r\\n\t * Combines two or more arrays.\\r\\n\t * This method returns a new array without modifying any existing arrays.\\r\\n\t * @param items Additional arrays and/or items to add to the end of the array.\\r\\n\t */\\r\\n\tconcat(...items: (T | ConcatArray<T>)[]): T[];\\r\\n\t/**\\r\\n\t * Adds all the elements of an array into a string, separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\t/**\\r\\n\t * Reverses the elements in an array in place.\\r\\n\t * This method mutates the array and returns a reference to the same array.\\r\\n\t */\\r\\n\treverse(): T[];\\r\\n\t/**\\r\\n\t * Removes the first element from an array and returns it.\\r\\n\t * If the array is empty, undefined is returned and the array is not modified.\\r\\n\t */\\r\\n\tshift(): T | undefined;\\r\\n\t/**\\r\\n\t * Returns a copy of a section of an array.\\r\\n\t * For both start and end, a negative index can be used to indicate an offset from the end of the array.\\r\\n\t * For example, -2 refers to the second to last element of the array.\\r\\n\t * @param start The beginning index of the specified portion of the array.\\r\\n\t * If start is undefined, then the slice begins at index 0.\\r\\n\t * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t * If end is undefined, then the slice extends to the end of the array.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): T[];\\r\\n\t/**\\r\\n\t * Sorts an array in place.\\r\\n\t * This method mutates the array and returns a reference to the same array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: T, b: T) => number): this;\\r\\n\t/**\\r\\n\t * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\\r\\n\t * @param start The zero-based location in the array from which to start removing elements.\\r\\n\t * @param deleteCount The number of elements to remove.\\r\\n\t * @returns An array containing the elements that were deleted.\\r\\n\t */\\r\\n\tsplice(start: number, deleteCount?: number): T[];\\r\\n\t/**\\r\\n\t * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\\r\\n\t * @param start The zero-based location in the array from which to start removing elements.\\r\\n\t * @param deleteCount The number of elements to remove.\\r\\n\t * @param items Elements to insert into the array in place of the deleted elements.\\r\\n\t * @returns An array containing the elements that were deleted.\\r\\n\t */\\r\\n\tsplice(start: number, deleteCount: number, ...items: T[]): T[];\\r\\n\t/**\\r\\n\t * Inserts new elements at the start of an array, and returns the new length of the array.\\r\\n\t * @param items Elements to insert at the start of the array.\\r\\n\t */\\r\\n\tunshift(...items: T[]): number;\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array, or -1 if it is not present.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: T, fromIndex?: number): number;\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): this is S[];\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter<S extends T>(\\r\\n\t\tpredicate: (value: T, index: number, array: T[]) => value is S,\\r\\n\t\tthisArg?: any\\r\\n\t): S[];\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T\\r\\n\t): T;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\\r\\n\t\tinitialValue: T\\r\\n\t): T;\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t[n: number]: T;\\r\\n}\\r\\n\\r\\ninterface ArrayConstructor {\\r\\n\tnew (arrayLength?: number): any[];\\r\\n\tnew <T>(arraylength: int): T[];\\r\\n\tnew <T>(...items: T[]): T[];\\r\\n\t(arrayLength?: number): any[];\\r\\n\t<T>(arraylength: int): T[];\\r\\n\t<T>(...items: T[]): T[];\\r\\n\tisArray(arg: any): arg is any[];\\r\\n\treadonly prototype: any[];\\r\\n}\\r\\n\\r\\ndeclare var Array: ArrayConstructor;\\r\\n\\r\\ninterface TypedPropertyDescriptor<T> {\\r\\n\tenumerable?: boolean;\\r\\n\tconfigurable?: boolean;\\r\\n\twritable?: boolean;\\r\\n\tvalue?: T;\\r\\n\tget?: () => T;\\r\\n\tset?: (value: T) => void;\\r\\n}\\r\\n\\r\\ndeclare type PromiseConstructorLike = new <T>(\\r\\n\texecutor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void\\r\\n) => PromiseLike<T>;\\r\\n\\r\\ninterface PromiseLike<T> {\\r\\n\t/**\\r\\n\t * Attaches callbacks for the resolution and/or rejection of the Promise.\\r\\n\t * @param onfulfilled The callback to execute when the Promise is resolved.\\r\\n\t * @param onrejected The callback to execute when the Promise is rejected.\\r\\n\t * @returns A Promise for the completion of which ever callback is executed.\\r\\n\t */\\r\\n\tthen<TResult1 = T, TResult2 = never>(\\r\\n\t\tonfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\\r\\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\\r\\n\t): PromiseLike<TResult1 | TResult2>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Represents the completion of an asynchronous operation\\r\\n */\\r\\ninterface Promise<T> {\\r\\n\t/**\\r\\n\t * Attaches callbacks for the resolution and/or rejection of the Promise.\\r\\n\t * @param onfulfilled The callback to execute when the Promise is resolved.\\r\\n\t * @param onrejected The callback to execute when the Promise is rejected.\\r\\n\t * @returns A Promise for the completion of which ever callback is executed.\\r\\n\t */\\r\\n\tthen<TResult1 = T, TResult2 = never>(\\r\\n\t\tonfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\\r\\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\\r\\n\t): Promise<TResult1 | TResult2>;\\r\\n\\r\\n\t/**\\r\\n\t * Attaches a callback for only the rejection of the Promise.\\r\\n\t * @param onrejected The callback to execute when the Promise is rejected.\\r\\n\t * @returns A Promise for the completion of the callback.\\r\\n\t */\\r\\n\tcatch<TResult = never>(\\r\\n\t\tonrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null\\r\\n\t): Promise<T | TResult>;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Recursively unwraps the \\\"awaited type\\\" of a type. Non-promise \\\"thenables\\\" should resolve to `never`. This emulates the behavior of `await`.\\r\\n */\\r\\ntype Awaited<T> = T extends null | undefined\\r\\n\t? T // special case for `null | undefined` when not in `--strictNullChecks` mode\\r\\n\t: T extends object & { then(onfulfilled: infer F, ...args: infer _): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped\\r\\n\t? F extends (value: infer V, ...args: infer _) => any // if the argument to `then` is callable, extracts the first argument\\r\\n\t\t? Awaited<V> // recursively unwrap the value\\r\\n\t\t: never // the argument to `then` was not callable\\r\\n\t: T; // non-object or non-thenable\\r\\n\\r\\ninterface ArrayLike<T> {\\r\\n\treadonly length: int;\\r\\n\treadonly [n: number]: T;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Make all properties in T optional\\r\\n */\\r\\ntype Partial<T> = {\\r\\n\t[P in keyof T]?: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Make all properties in T required\\r\\n */\\r\\ntype Required<T> = {\\r\\n\t[P in keyof T]-?: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Make all properties in T readonly\\r\\n */\\r\\ntype Readonly<T> = {\\r\\n\treadonly [P in keyof T]: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * From T, pick a set of properties whose keys are in the union K\\r\\n */\\r\\ntype Pick<T, K extends keyof T> = {\\r\\n\t[P in K]: T[P];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Construct a type with a set of properties K of type T\\r\\n */\\r\\ntype Record<K extends keyof any, T> = {\\r\\n\t[P in K]: T;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Exclude from T those types that are assignable to U\\r\\n */\\r\\ntype Exclude<T, U> = T extends U ? never : T;\\r\\n\\r\\n/**\\r\\n * Extract from T those types that are assignable to U\\r\\n */\\r\\ntype Extract<T, U> = T extends U ? T : never;\\r\\n\\r\\n/**\\r\\n * Construct a type with the properties of T except for those in type K.\\r\\n */\\r\\ntype Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;\\r\\n\\r\\n/**\\r\\n * Exclude null and undefined from T\\r\\n */\\r\\ntype NonNullable<T> = T & {};\\r\\n\\r\\n/**\\r\\n * Obtain the parameters of a function type in a tuple\\r\\n */\\r\\ntype Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;\\r\\n\\r\\n/**\\r\\n * Obtain the parameters of a constructor function type in a tuple\\r\\n */\\r\\ntype ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (\\r\\n\t...args: infer P\\r\\n) => any\\r\\n\t? P\\r\\n\t: never;\\r\\n\\r\\n/**\\r\\n * Obtain the return type of a function type\\r\\n */\\r\\ntype ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;\\r\\n\\r\\n/**\\r\\n * Obtain the return type of a constructor function type\\r\\n */\\r\\ntype InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (\\r\\n\t...args: any\\r\\n) => infer R\\r\\n\t? R\\r\\n\t: any;\\r\\n\\r\\n/**\\r\\n * Convert string literal type to uppercase\\r\\n */\\r\\ntype Uppercase<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Convert string literal type to lowercase\\r\\n */\\r\\ntype Lowercase<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Convert first character of string literal type to uppercase\\r\\n */\\r\\ntype Capitalize<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Convert first character of string literal type to lowercase\\r\\n */\\r\\ntype Uncapitalize<S extends string> = intrinsic;\\r\\n\\r\\n/**\\r\\n * Marker for contextual 'this' type\\r\\n */\\r\\ninterface ThisType<T> {}\\r\\n\\r\\n/**\\r\\n * Represents a raw buffer of binary data, which is used to store data for the\\r\\n * different typed arrays. ArrayBuffers cannot be read from or written to directly,\\r\\n * but can be passed to a typed array or DataView Object to interpret the raw\\r\\n * buffer as needed.\\r\\n */\\r\\ninterface ArrayBuffer {\\r\\n\t/**\\r\\n\t * Read-only. The length of the ArrayBuffer (in bytes).\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an ArrayBuffer.\\r\\n\t */\\r\\n\tslice(begin: number, end?: number): ArrayBuffer;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Allowed ArrayBuffer types for the buffer of an ArrayBufferView and related Typed Arrays.\\r\\n */\\r\\ninterface ArrayBufferTypes {\\r\\n\tArrayBuffer: ArrayBuffer;\\r\\n}\\r\\ntype ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];\\r\\n\\r\\ninterface ArrayBufferConstructor {\\r\\n\treadonly prototype: ArrayBuffer;\\r\\n\tnew (bytelength: int): ArrayBuffer;\\r\\n\tisView(arg: any): arg is ArrayBufferView;\\r\\n}\\r\\ndeclare var ArrayBuffer: ArrayBufferConstructor;\\r\\n\\r\\ninterface ArrayBufferView {\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\tbuffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\tbytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\tbyteOffset: number;\\r\\n}\\r\\n\\r\\ninterface DataView {\\r\\n\treadonly buffer: ArrayBuffer;\\r\\n\treadonly bytelength: int;\\r\\n\treadonly byteOffset: number;\\r\\n\t/**\\r\\n\t * Gets the Float32 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetFloat32(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Float64 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetFloat64(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Int8 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t */\\r\\n\tgetInt8(byteOffset: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Int16 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetInt16(byteOffset: number, littleEndian?: boolean): number;\\r\\n\t/**\\r\\n\t * Gets the Int32 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetInt32(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Uint8 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t */\\r\\n\tgetUint8(byteOffset: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Uint16 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetUint16(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Gets the Uint32 value at the specified byte offset from the start of the view. There is\\r\\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\\r\\n\t */\\r\\n\tgetUint32(byteOffset: number, littleEndian?: boolean): number;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Float32 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetFloat32(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Float64 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetFloat64(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Int8 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t */\\r\\n\tsetInt8(byteOffset: number, value: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Int16 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetInt16(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Int32 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetInt32(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Uint8 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t */\\r\\n\tsetUint8(byteOffset: number, value: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Uint16 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetUint16(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n\\r\\n\t/**\\r\\n\t * Stores an Uint32 value at the specified byte offset from the start of the view.\\r\\n\t * @param byteOffset The place in the buffer at which the value should be set.\\r\\n\t * @param value The value to set.\\r\\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\\r\\n\t */\\r\\n\tsetUint32(byteOffset: number, value: number, littleEndian?: boolean): void;\\r\\n}\\r\\n\\r\\ninterface DataViewConstructor {\\r\\n\treadonly prototype: DataView;\\r\\n\tnew (\\r\\n\t\tbuffer: ArrayBufferLike & { BYTES_PER_ELEMENT?: never },\\r\\n\t\tbyteOffset?: number,\\r\\n\t\tbyteLength?: number\\r\\n\t): DataView;\\r\\n}\\r\\ndeclare var DataView: DataViewConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested\\r\\n * number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Int8Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Int8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Int8Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int8Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int8Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Int8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Int8Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\ninterface Int8ArrayConstructor {\\r\\n\treadonly prototype: Int8Array;\\r\\n\tnew (length: int): Int8Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int8Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Int8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array;\\r\\n}\\r\\ndeclare var Int8Array: Int8ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint8Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint8Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint8ArrayConstructor {\\r\\n\treadonly prototype: Uint8Array;\\r\\n\tnew (length: int): Uint8Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint8Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint8Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array;\\r\\n}\\r\\ndeclare var Uint8Array: Uint8ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0.\\r\\n * If the requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint8ClampedArray {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8ClampedArray) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint8ClampedArray) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint8ClampedArray\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint8ClampedArray;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint8ClampedArrayConstructor {\\r\\n\treadonly prototype: Uint8ClampedArray;\\r\\n\tnew (length: int): Uint8ClampedArray;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint8ClampedArray;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint8ClampedArray;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(\\r\\n\t\tarrayLike: ArrayLike<T>,\\r\\n\t\tmapfn: (v: T, k: number) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint8ClampedArray;\\r\\n}\\r\\ndeclare var Uint8ClampedArray: Uint8ClampedArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Int16Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Int16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Int16Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int16Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int16Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Int16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Int16Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Int16ArrayConstructor {\\r\\n\treadonly prototype: Int16Array;\\r\\n\tnew (length: int): Int16Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int16Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Int16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array;\\r\\n}\\r\\ndeclare var Int16Array: Int16ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint16Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint16Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint16Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint16Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint16Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint16Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint16ArrayConstructor {\\r\\n\treadonly prototype: Uint16Array;\\r\\n\tnew (length: int): Uint16Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint16Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint16Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array;\\r\\n}\\r\\ndeclare var Uint16Array: Uint16ArrayConstructor;\\r\\n/**\\r\\n * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Int32Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Int32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Int32Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Int32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int32Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Int32Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Int32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Int32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Int32Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Int32ArrayConstructor {\\r\\n\treadonly prototype: Int32Array;\\r\\n\tnew (length: int): Int32Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int32Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Int32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array;\\r\\n}\\r\\ndeclare var Int32Array: Int32ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the\\r\\n * requested number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Uint32Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Uint32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint32Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Uint32Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Uint32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Uint32Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Uint32ArrayConstructor {\\r\\n\treadonly prototype: Uint32Array;\\r\\n\tnew (length: int): Uint32Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint32Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Uint32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array;\\r\\n}\\r\\ndeclare var Uint32Array: Uint32ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number\\r\\n * of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Float32Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Float32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Float32Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float32Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float32Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float32Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float32Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Float32Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Float32Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Float32ArrayConstructor {\\r\\n\treadonly prototype: Float32Array;\\r\\n\tnew (length: int): Float32Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Float32Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Float32Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array;\\r\\n}\\r\\ndeclare var Float32Array: Float32ArrayConstructor;\\r\\n\\r\\n/**\\r\\n * A typed array of 64-bit float values. The contents are initialized to 0. If the requested\\r\\n * number of bytes could not be allocated an exception is raised.\\r\\n */\\r\\ninterface Float64Array {\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * The ArrayBuffer instance referenced by the array.\\r\\n\t */\\r\\n\treadonly buffer: ArrayBufferLike;\\r\\n\\r\\n\t/**\\r\\n\t * The length in bytes of the array.\\r\\n\t */\\r\\n\treadonly bytelength: int;\\r\\n\\r\\n\t/**\\r\\n\t * The offset in bytes of the array.\\r\\n\t */\\r\\n\treadonly byteOffset: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the this object after copying a section of the array identified by start and end\\r\\n\t * to the same array starting at position target\\r\\n\t * @param target If target is negative, it is treated as length+target where length is the\\r\\n\t * length of the array.\\r\\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\\r\\n\t * is treated as length+end. If start is omitted, `0` is used.\\r\\n\t * @param end If not specified, length of the this object is used as its default value.\\r\\n\t */\\r\\n\tcopyWithin(target: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether all the members of an array satisfy the specified test.\\r\\n\t * @param predicate A function that accepts up to three arguments. The every method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value false, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tevery(\\r\\n\t\tpredicate: (value: number, index: number, array: Float64Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\\r\\n\t * @param value value to fill array section with\\r\\n\t * @param start index to start filling the array at. If start is negative, it is treated as\\r\\n\t * length+start where length is the length of the array.\\r\\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\\r\\n\t * length+end.\\r\\n\t */\\r\\n\tfill(value: number, start?: number, end?: number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the elements of an array that meet the condition specified in a callback function.\\r\\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\\r\\n\t * the predicate function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tfilter(\\r\\n\t\tpredicate: (value: number, index: number, array: Float64Array) => any,\\r\\n\t\tthisArg?: any\\r\\n\t): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the value of the first element in the array where predicate is true, and undefined\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found, find\\r\\n\t * immediately returns that element value. Otherwise, find returns undefined.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfind(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float64Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number | undefined;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first element in the array where predicate is true, and -1\\r\\n\t * otherwise.\\r\\n\t * @param predicate find calls predicate once for each element of the array, in ascending\\r\\n\t * order, until it finds one where predicate returns true. If such an element is found,\\r\\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\\r\\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\\r\\n\t * predicate. If it is not provided, undefined is used instead.\\r\\n\t */\\r\\n\tfindIndex(\\r\\n\t\tpredicate: (value: number, index: number, obj: Float64Array) => boolean,\\r\\n\t\tthisArg?: any\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Performs the specified action for each element in an array.\\r\\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tforEach(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float64Array) => void,\\r\\n\t\tthisArg?: any\\r\\n\t): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the first occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t *  search starts at index 0.\\r\\n\t */\\r\\n\tindexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * Adds all the elements of an array separated by the specified separator string.\\r\\n\t * @param separator A string used to separate one element of an array from the next in the\\r\\n\t * resulting String. If omitted, the array elements are separated with a comma.\\r\\n\t */\\r\\n\tjoin(separator?: string): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns the index of the last occurrence of a value in an array.\\r\\n\t * @param searchElement The value to locate in the array.\\r\\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\\r\\n\t * search starts at index 0.\\r\\n\t */\\r\\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\\r\\n\\r\\n\t/**\\r\\n\t * The length of the array.\\r\\n\t */\\r\\n\treadonly length: int;\\r\\n\\r\\n\t/**\\r\\n\t * Calls a defined callback function on each element of an array, and returns an array that\\r\\n\t * contains the results.\\r\\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tmap(\\r\\n\t\tcallbackfn: (value: number, index: number, array: Float64Array) => number,\\r\\n\t\tthisArg?: any\\r\\n\t): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduce(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array. The return value of\\r\\n\t * the callback function is the accumulated result, and is provided as an argument in the next\\r\\n\t * call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\\r\\n\t * callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduce<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an\\r\\n\t * argument instead of an array value.\\r\\n\t */\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number\\r\\n\t): number;\\r\\n\treduceRight(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: number,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => number,\\r\\n\t\tinitialValue: number\\r\\n\t): number;\\r\\n\\r\\n\t/**\\r\\n\t * Calls the specified callback function for all the elements in an array, in descending order.\\r\\n\t * The return value of the callback function is the accumulated result, and is provided as an\\r\\n\t * argument in the next call to the callback function.\\r\\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\\r\\n\t * the callbackfn function one time for each element in the array.\\r\\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\\r\\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\\r\\n\t * instead of an array value.\\r\\n\t */\\r\\n\treduceRight<U>(\\r\\n\t\tcallbackfn: (\\r\\n\t\t\tpreviousValue: U,\\r\\n\t\t\tcurrentValue: number,\\r\\n\t\t\tcurrentIndex: number,\\r\\n\t\t\tarray: Float64Array\\r\\n\t\t) => U,\\r\\n\t\tinitialValue: U\\r\\n\t): U;\\r\\n\\r\\n\t/**\\r\\n\t * Reverses the elements in an Array.\\r\\n\t */\\r\\n\treverse(): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Sets a value or an array of values.\\r\\n\t * @param array A typed or untyped array of values to set.\\r\\n\t * @param offset The index in the current array at which the values are to be written.\\r\\n\t */\\r\\n\tset(array: ArrayLike<number>, offset?: number): void;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a section of an array.\\r\\n\t * @param start The beginning of the specified portion of the array.\\r\\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\\r\\n\t */\\r\\n\tslice(start?: number, end?: number): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Determines whether the specified callback function returns true for any element of an array.\\r\\n\t * @param predicate A function that accepts up to three arguments. The some method calls\\r\\n\t * the predicate function for each element in the array until the predicate returns a value\\r\\n\t * which is coercible to the Boolean value true, or until the end of the array.\\r\\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\\r\\n\t * If thisArg is omitted, undefined is used as the this value.\\r\\n\t */\\r\\n\tsome(\\r\\n\t\tpredicate: (value: number, index: number, array: Float64Array) => unknown,\\r\\n\t\tthisArg?: any\\r\\n\t): boolean;\\r\\n\\r\\n\t/**\\r\\n\t * Sorts an array.\\r\\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\\r\\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\\r\\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\\r\\n\t * ```ts\\r\\n\t * [11,2,22,1].sort((a, b) => a - b)\\r\\n\t * ```\\r\\n\t */\\r\\n\tsort(compareFn?: (a: number, b: number) => number): this;\\r\\n\\r\\n\t/**\\r\\n\t * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements\\r\\n\t * at begin, inclusive, up to end, exclusive.\\r\\n\t * @param begin The index of the beginning of the array.\\r\\n\t * @param end The index of the end of the array.\\r\\n\t */\\r\\n\tsubarray(begin?: number, end?: number): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current locale.\\r\\n\t */\\r\\n\ttoLocaleString(): string;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a string representation of an array.\\r\\n\t */\\r\\n\ttoString(): string;\\r\\n\\r\\n\t/** Returns the primitive value of the specified object. */\\r\\n\tvalueOf(): Float64Array;\\r\\n\\r\\n\t[index: number]: number;\\r\\n}\\r\\n\\r\\ninterface Float64ArrayConstructor {\\r\\n\treadonly prototype: Float64Array;\\r\\n\tnew (length: int): Float64Array;\\r\\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Float64Array;\\r\\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * The size in bytes of each element in the array.\\r\\n\t */\\r\\n\treadonly BYTES_PER_ELEMENT: number;\\r\\n\\r\\n\t/**\\r\\n\t * Returns a new array from a set of elements.\\r\\n\t * @param items A set of elements to include in the new array object.\\r\\n\t */\\r\\n\tof(...items: number[]): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t */\\r\\n\tfrom(arrayLike: ArrayLike<number>): Float64Array;\\r\\n\\r\\n\t/**\\r\\n\t * Creates an array from an array-like or iterable object.\\r\\n\t * @param arrayLike An array-like or iterable object to convert to an array.\\r\\n\t * @param mapfn A mapping function to call on every element of the array.\\r\\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\\r\\n\t */\\r\\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array;\\r\\n}\\r\\ndeclare var Float64Array: Float64ArrayConstructor;\\r\\n\\r\\n/////////////////////////////\\r\\n/// ECMAScript Internationalization API\\r\\n/////////////////////////////\\r\\n\\r\\ndeclare namespace Intl {\\r\\n\tinterface CollatorOptions {\\r\\n\t\tusage?: 'sort' | 'search' | undefined;\\r\\n\t\tlocaleMatcher?: 'lookup' | 'best fit' | undefined;\\r\\n\t\tnumeric?: boolean | undefined;\\r\\n\t\tcaseFirst?: 'upper' | 'lower' | 'false' | undefined;\\r\\n\t\tsensitivity?: 'base' | 'accent' | 'case' | 'variant' | undefined;\\r\\n\t\tcollation?:\\r\\n\t\t\t| 'big5han'\\r\\n\t\t\t| 'compat'\\r\\n\t\t\t| 'dict'\\r\\n\t\t\t| 'direct'\\r\\n\t\t\t| 'ducet'\\r\\n\t\t\t| 'emoji'\\r\\n\t\t\t| 'eor'\\r\\n\t\t\t| 'gb2312'\\r\\n\t\t\t| 'phonebk'\\r\\n\t\t\t| 'phonetic'\\r\\n\t\t\t| 'pinyin'\\r\\n\t\t\t| 'reformed'\\r\\n\t\t\t| 'searchjl'\\r\\n\t\t\t| 'stroke'\\r\\n\t\t\t| 'trad'\\r\\n\t\t\t| 'unihan'\\r\\n\t\t\t| 'zhuyin'\\r\\n\t\t\t| undefined;\\r\\n\t\tignorePunctuation?: boolean | undefined;\\r\\n\t}\\r\\n\\r\\n\tinterface ResolvedCollatorOptions {\\r\\n\t\tlocale: string;\\r\\n\t\tusage: string;\\r\\n\t\tsensitivity: string;\\r\\n\t\tignorePunctuation: boolean;\\r\\n\t\tcollation: string;\\r\\n\t\tcaseFirst: string;\\r\\n\t\tnumeric: boolean;\\r\\n\t}\\r\\n\\r\\n\tinterface Collator {\\r\\n\t\tcompare(x: string, y: string): number;\\r\\n\t\tresolvedOptions(): ResolvedCollatorOptions;\\r\\n\t}\\r\\n\tvar Collator: {\\r\\n\t\tnew (locales?: string | string[], options?: CollatorOptions): Collator;\\r\\n\t\t(locales?: string | string[], options?: CollatorOptions): Collator;\\r\\n\t\tsupportedLocalesOf(locales: string | string[], options?: CollatorOptions): string[];\\r\\n\t};\\r\\n\\r\\n\tinterface NumberFormatOptions {\\r\\n\t\tlocaleMatcher?: string | undefined;\\r\\n\t\tstyle?: string | undefined;\\r\\n\t\tcurrency?: string | undefined;\\r\\n\t\tcurrencySign?: string | undefined;\\r\\n\t\tuseGrouping?: boolean | undefined;\\r\\n\t\tminimumIntegerDigits?: number | undefined;\\r\\n\t\tminimumFractionDigits?: number | undefined;\\r\\n\t\tmaximumFractionDigits?: number | undefined;\\r\\n\t\tminimumSignificantDigits?: number | undefined;\\r\\n\t\tmaximumSignificantDigits?: number | undefined;\\r\\n\t}\\r\\n\\r\\n\tinterface ResolvedNumberFormatOptions {\\r\\n\t\tlocale: string;\\r\\n\t\tnumberingSystem: string;\\r\\n\t\tstyle: string;\\r\\n\t\tcurrency?: string;\\r\\n\t\tminimumIntegerDigits: number;\\r\\n\t\tminimumFractionDigits: number;\\r\\n\t\tmaximumFractionDigits: number;\\r\\n\t\tminimumSignificantDigits?: number;\\r\\n\t\tmaximumSignificantDigits?: number;\\r\\n\t\tuseGrouping: boolean;\\r\\n\t}\\r\\n\\r\\n\tinterface NumberFormat {\\r\\n\t\tformat(value: number): string;\\r\\n\t\tresolvedOptions(): ResolvedNumberFormatOptions;\\r\\n\t}\\r\\n\tvar NumberFormat: {\\r\\n\t\tnew (locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\\r\\n\t\t(locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\\r\\n\t\tsupportedLocalesOf(locales: string | string[], options?: NumberFormatOptions): string[];\\r\\n\t\treadonly prototype: NumberFormat;\\r\\n\t};\\r\\n\\r\\n\tinterface DateTimeFormatOptions {\\r\\n\t\tlocaleMatcher?: 'best fit' | 'lookup' | undefined;\\r\\n\t\tweekday?: 'long' | 'short' | 'narrow' | undefined;\\r\\n\t\tera?: 'long' | 'short' | 'narrow' | undefined;\\r\\n\t\tyear?: 'numeric' | '2-digit' | undefined;\\r\\n\t\tmonth?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow' | undefined;\\r\\n\t\tday?: 'numeric' | '2-digit' | undefined;\\r\\n\t\thour?: 'numeric' | '2-digit' | undefined;\\r\\n\t\tminute?: 'numeric' | '2-digit' | undefined;\\r\\n\t\tsecond?: 'numeric' | '2-digit' | undefined;\\r\\n\t\ttimeZoneName?:\\r\\n\t\t\t| 'short'\\r\\n\t\t\t| 'long'\\r\\n\t\t\t| 'shortOffset'\\r\\n\t\t\t| 'longOffset'\\r\\n\t\t\t| 'shortGeneric'\\r\\n\t\t\t| 'longGeneric'\\r\\n\t\t\t| undefined;\\r\\n\t\tformatMatcher?: 'best fit' | 'basic' | undefined;\\r\\n\t\thour12?: boolean | undefined;\\r\\n\t\ttimeZone?: string | undefined;\\r\\n\t}\\r\\n\\r\\n\tinterface ResolvedDateTimeFormatOptions {\\r\\n\t\tlocale: string;\\r\\n\t\tcalendar: string;\\r\\n\t\tnumberingSystem: string;\\r\\n\t\ttimeZone: string;\\r\\n\t\thour12?: boolean;\\r\\n\t\tweekday?: string;\\r\\n\t\tera?: string;\\r\\n\t\tyear?: string;\\r\\n\t\tmonth?: string;\\r\\n\t\tday?: string;\\r\\n\t\thour?: string;\\r\\n\t\tminute?: string;\\r\\n\t\tsecond?: string;\\r\\n\t\ttimeZoneName?: string;\\r\\n\t}\\r\\n\\r\\n\tinterface DateTimeFormat {\\r\\n\t\tformat(date?: Date | number): string;\\r\\n\t\tresolvedOptions(): ResolvedDateTimeFormatOptions;\\r\\n\t}\\r\\n\tvar DateTimeFormat: {\\r\\n\t\tnew (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\\r\\n\t\t(locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\\r\\n\t\tsupportedLocalesOf(locales: string | string[], options?: DateTimeFormatOptions): string[];\\r\\n\t\treadonly prototype: DateTimeFormat;\\r\\n\t};\\r\\n}\\r\\n\\r\\ninterface String {\\r\\n\t/**\\r\\n\t * Determines whether two strings are equivalent in the current or specified locale.\\r\\n\t * @param that String to compare to target string\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.\\r\\n\t */\\r\\n\tlocaleCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): number;\\r\\n}\\r\\n\\r\\ninterface Number {\\r\\n\t/**\\r\\n\t * Converts a number to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string;\\r\\n}\\r\\n\\r\\ninterface Date {\\r\\n\t/**\\r\\n\t * Converts a date and time to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\\r\\n\t/**\\r\\n\t * Converts a date to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\\r\\n\\r\\n\t/**\\r\\n\t * Converts a time to a string by using the current or specified locale.\\r\\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\\r\\n\t * @param options An object that contains one or more properties that specify comparison options.\\r\\n\t */\\r\\n\ttoLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\\r\\n}\\r\\n\";\n  const simpleFunctions = [\n    [\"add\", \"+\"],\n    [\"sub\", \"-\"],\n    [\"div\", \"/\"],\n    [\"mul\", \"*\"],\n    [\"mod\", \"%\"],\n    [\"bitand\", \"&\"],\n    [\"bitor\", \"|\"],\n    [\"bitxor\", \"^\"],\n    [\"lshift\", \"<<\"],\n    [\"rshift\", \">>\"]\n  ];\n  const singleFunctions = [\n    [\"bitnot\", (a) => `~${a}`],\n    [\"negate\", (a) => `-${a}`],\n    [\"positive\", \"Math.abs\"],\n    [\"abs\", \"Math.abs\"],\n    [\"floor\", \"Math.floor\"],\n    [\"ceil\", \"Math.ceil\"],\n    [\"round\", \"Math.round\"],\n    [\"sign\", \"Math.sign\"],\n    [\"cos\", \"Math.cos\"],\n    [\"sin\", \"Math.sin\"],\n    [\"tan\", \"Math.tan\"],\n    [\"acos\", \"Math.acos\"],\n    [\"asin\", \"Math.asin\"],\n    [\"atan\", \"Math.atan\"],\n    [\"cosh\", \"Math.cosh\"],\n    [\"sinh\", \"Math.sinh\"],\n    [\"tanh\", \"Math.tanh\"],\n    [\"acosh\", \"Math.acosh\"],\n    [\"asinh\", \"Math.asinh\"],\n    [\"atanh\", \"Math.atanh\"],\n    [\"exp\", \"Math.exp\"],\n    [\"log\", \"Math.log\"],\n    [\"log2\", \"Math.log2\"],\n    [\"log10\", \"Math.log10\"],\n    [\"sqrt\", \"Math.sqrt\"]\n  ];\n  const makeVectors = [\n    [\"int\", \"|0\"],\n    [\"float\", \"\"],\n    [\"uint\", \">>>0\"]\n  ];\n  const simpleFuncMap = new Map(simpleFunctions);\n  const singleFuncMap = new Map(singleFunctions);\n  const makeVectorsMap = new Map(makeVectors);\n  function getTypeFallback(checker, t) {\n    let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n    if (!n && t.intrinsicName)\n      n = t.intrinsicName;\n    if (typeof n !== \"string\") {\n      let props = t.getApparentProperties();\n      if (props.length > 0) {\n        for (let p of props) {\n          if (p.escapedName.toString() === \"_opaque_int\")\n            return \"int\";\n          if (p.escapedName.toString() === \"_opaque_float\")\n            return \"float\";\n          if (p.escapedName.toString() === \"_opaque_uint\")\n            return \"uint\";\n        }\n      }\n      let btype = t.getBaseTypes();\n      if (btype && btype.length > 0) {\n        for (let b of btype) {\n          let tn = getTypeFallback(checker, b);\n          if (tn)\n            return tn;\n        }\n        return null;\n      }\n    } else {\n      return n;\n    }\n  }\n  function getVectorLen(checker, type2) {\n    let typeFall = getTypeFallback(checker, type2);\n    if (type2.flags & (ts.TypeFlags.NumberLike | ts.TypeFlags.BigIntLike | ts.TypeFlags.NumberLiteral) || typeFall == \"int\" || typeFall == \"float\" || typeFall == \"uint\") {\n      return 1;\n    } else if (typeFall == \"int2\" || typeFall == \"float2\" || typeFall == \"uint2\") {\n      return 2;\n    } else if (typeFall == \"int3\" || typeFall == \"float3\" || typeFall == \"uint3\") {\n      return 3;\n    } else if (typeFall == \"int4\" || typeFall == \"float4\" || typeFall == \"uint4\") {\n      return 4;\n    }\n    return 0;\n  }\n  function isArrayType(type2, checker) {\n    return checker.isTupleType(type2) || checker.isArrayType(type2);\n  }\n  const updateIntegerMixing = (getChecker) => (context2) => {\n    let [checker, env2, loads] = getChecker();\n    loads.clear();\n    env2.libraries.clear();\n    return (rootNode) => {\n      const { factory: factory2 } = context2;\n      function visit(node2) {\n        if (!node2) {\n          return node2;\n        }\n        if (ts.isCallExpression(node2)) {\n          let sig = checker.getResolvedSignature(node2);\n          let returnType = checker.getReturnTypeOfSignature(sig);\n          let symbol = returnType.aliasSymbol || returnType.getSymbol();\n          let expressionText = node2.expression.getText();\n          let ops = {\n            gte: ts.SyntaxKind.GreaterThanEqualsToken,\n            lte: ts.SyntaxKind.LessThanEqualsToken,\n            gt: ts.SyntaxKind.GreaterThanToken,\n            lt: ts.SyntaxKind.LessThanToken,\n            eq: ts.SyntaxKind.EqualsEqualsToken,\n            neq: ts.SyntaxKind.ExclamationEqualsToken,\n            and: ts.SyntaxKind.AmpersandAmpersandToken,\n            or: ts.SyntaxKind.BarBarToken\n          };\n          if (expressionText == \"physics.engine2d\") {\n            env2.libraries.add(\"rapier2d\");\n          }\n          if (expressionText == \"physics.engine3d\") {\n            env2.libraries.add(\"rapier3d\");\n          }\n          if (expressionText == \"load\") {\n            if (!loads.has(rootNode.fileName)) {\n              loads.set(rootNode.fileName, []);\n            }\n            if (node2.arguments.length > 0 && ts.isStringLiteral(node2.arguments[0])) {\n              let realId = env2.assetMappings.get(node2.arguments[0].text);\n              loads.get(rootNode.fileName).push(node2.arguments[0].text);\n              if (realId)\n                return factory2.createCallExpression(factory2.createIdentifier(\"load\"), void 0, [\n                  factory2.createStringLiteral(realId[0])\n                ]);\n            }\n            return node2;\n          }\n          if (expressionText.endsWith(\"__index\")) {\n            let innerExpr = node2.expression;\n            if (ts.isPropertyAccessExpression(innerExpr)) {\n              let left = innerExpr.expression;\n              let leftType = checker.getTypeAtLocation(left);\n              let leftStr = checker.typeToString(leftType);\n              if (isArrayType(leftType, checker)) {\n                return factory2.createElementAccessExpression(visit(left), visit(node2.arguments[0]));\n              }\n              if (leftStr == \"buffer<float>\") {\n                return factory2.createElementAccessExpression(\n                  factory2.createPropertyAccessExpression(visit(left), \"floatArray\"),\n                  visit(node2.arguments[0])\n                );\n              } else if (leftStr == \"buffer<int>\") {\n                return factory2.createElementAccessExpression(\n                  factory2.createPropertyAccessExpression(visit(left), \"intArray\"),\n                  visit(node2.arguments[0])\n                );\n              } else if (leftStr == \"buffer<uint>\") {\n                return factory2.createElementAccessExpression(\n                  factory2.createPropertyAccessExpression(visit(left), \"uintArray\"),\n                  visit(node2.arguments[0])\n                );\n              } else if (!leftType.getProperty(\"__index\")) {\n                console.log(\"Optim no __index\", leftStr, leftType);\n                return factory2.createElementAccessExpression(visit(left), visit(node2.arguments[0]));\n              }\n            }\n          }\n          if (expressionText.startsWith(\"__.\") && ops[expressionText.replace(\"__.\", \"\")]) {\n            if (node2.arguments.length != 2) {\n              return visit(node2.arguments[0]);\n            } else {\n              let left = node2.arguments[0];\n              let right = node2.arguments[1];\n              let leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n              let rightLen = getVectorLen(checker, checker.getTypeAtLocation(right));\n              if (leftLen == 1 && rightLen == 1) {\n                return factory2.createBinaryExpression(\n                  visit(node2.arguments[0]),\n                  ops[expressionText.replace(\"__.\", \"\")],\n                  visit(node2.arguments[1])\n                );\n              }\n            }\n          }\n          if (simpleFuncMap.has(expressionText.replace(\"__.\", \"\"))) {\n            let left = node2.arguments[0];\n            let right = node2.arguments[1];\n            let leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n            let rightLen = getVectorLen(checker, checker.getTypeAtLocation(right));\n            if (leftLen == 1 && rightLen == 1) {\n              let funcDef = simpleFuncMap.get(expressionText.replace(\"__.\", \"\"));\n              if (typeof funcDef == \"string\") {\n                let tokenKinds = {\n                  \"+\": ts.SyntaxKind.PlusToken,\n                  \"-\": ts.SyntaxKind.MinusToken,\n                  \"/\": ts.SyntaxKind.SlashToken,\n                  \"*\": ts.SyntaxKind.AsteriskToken,\n                  \"%\": ts.SyntaxKind.PercentToken,\n                  \"&\": ts.SyntaxKind.AmpersandToken,\n                  \"|\": ts.SyntaxKind.BarToken,\n                  \"^\": ts.SyntaxKind.CaretToken,\n                  \"<<\": ts.SyntaxKind.LessThanLessThanToken,\n                  \">>\": ts.SyntaxKind.GreaterThanGreaterThanToken\n                };\n                return factory2.createBinaryExpression(\n                  visit(left),\n                  factory2.createToken(tokenKinds[funcDef]),\n                  visit(right)\n                );\n              }\n            }\n            if (leftLen > 0 && rightLen > 0) {\n              let leftHoist = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n              let rightHoist = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n              let leftAss = factory2.createAssignment(leftHoist, visit(left));\n              let rightAss = factory2.createAssignment(rightHoist, visit(right));\n              let tokenKinds = {\n                mul: ts.SyntaxKind.AsteriskToken,\n                div: ts.SyntaxKind.SlashToken,\n                add: ts.SyntaxKind.PlusToken,\n                sub: ts.SyntaxKind.MinusToken,\n                mod: ts.SyntaxKind.PercentToken,\n                and: ts.SyntaxKind.AmpersandToken,\n                or: ts.SyntaxKind.BarToken,\n                xor: ts.SyntaxKind.CaretToken,\n                lshift: ts.SyntaxKind.LessThanLessThanToken,\n                rshift: ts.SyntaxKind.GreaterThanGreaterThanToken\n              };\n              let innerElems = [];\n              if (leftLen == rightLen) {\n                for (let i = 0; i < leftLen; i++) {\n                  innerElems.push(\n                    factory2.createBinaryExpression(\n                      factory2.createElementAccessExpression(\n                        leftHoist,\n                        factory2.createNumericLiteral(i)\n                      ),\n                      factory2.createToken(tokenKinds[expressionText.replace(\"__.\", \"\")]),\n                      factory2.createElementAccessExpression(\n                        rightHoist,\n                        factory2.createNumericLiteral(i)\n                      )\n                    )\n                  );\n                }\n              } else if (leftLen == 1) {\n                for (let i = 0; i < rightLen; i++) {\n                  innerElems.push(\n                    factory2.createBinaryExpression(\n                      leftHoist,\n                      factory2.createToken(tokenKinds[expressionText.replace(\"__.\", \"\")]),\n                      factory2.createElementAccessExpression(\n                        rightHoist,\n                        factory2.createNumericLiteral(i)\n                      )\n                    )\n                  );\n                }\n              } else if (rightLen == 1) {\n                for (let i = 0; i < leftLen; i++) {\n                  innerElems.push(\n                    factory2.createBinaryExpression(\n                      factory2.createElementAccessExpression(\n                        leftHoist,\n                        factory2.createNumericLiteral(i)\n                      ),\n                      factory2.createToken(tokenKinds[expressionText.replace(\"__.\", \"\")]),\n                      rightHoist\n                    )\n                  );\n                }\n              }\n              let expr = factory2.createArrayLiteralExpression(innerElems);\n              return factory2.createCommaListExpression([leftAss, rightAss, expr]);\n            }\n          }\n          if (singleFuncMap.has(expressionText.replace(\"__.\", \"\"))) {\n            let left = node2.arguments[0];\n            let leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n            let funcDef = singleFuncMap.get(expressionText.replace(\"__.\", \"\"));\n            if (leftLen == 1) {\n              if (typeof funcDef == \"string\") {\n                return factory2.createCallExpression(\n                  factory2.createIdentifier(funcDef),\n                  [],\n                  [visit(left)]\n                );\n              }\n            }\n            if (leftLen > 0) {\n              if (typeof funcDef == \"string\") {\n                let leftHoist = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n                let leftAss = factory2.createAssignment(leftHoist, visit(left));\n                let innerElems = [];\n                for (let i = 0; i < leftLen; i++) {\n                  innerElems.push(\n                    factory2.createCallExpression(\n                      factory2.createIdentifier(funcDef),\n                      [],\n                      [\n                        factory2.createElementAccessExpression(\n                          leftHoist,\n                          factory2.createNumericLiteral(i)\n                        )\n                      ]\n                    )\n                  );\n                }\n                let expr = factory2.createArrayLiteralExpression(innerElems);\n                return factory2.createCommaListExpression([leftAss, expr]);\n              } else {\n                return factory2.createParenthesizedExpression(\n                  factory2.createCallExpression(\n                    factory2.createPropertyAccessExpression(\n                      factory2.createPropertyAccessExpression(\n                        factory2.createIdentifier(\"__\"),\n                        factory2.createIdentifier(\"FM\")\n                      ),\n                      factory2.createIdentifier(expressionText.replace(\"__.\", \"\") + `_${leftLen}`)\n                    ),\n                    [],\n                    [visit(left)]\n                  )\n                );\n              }\n            }\n          }\n          if (expressionText == \"__.swizzle\" && node2.arguments.length == 2) {\n            let index = {\n              x: 0,\n              y: 1,\n              z: 2,\n              w: 3,\n              r: 0,\n              g: 1,\n              b: 2,\n              a: 3\n            };\n            let vecLen = getVectorLen(checker, checker.getTypeAtLocation(node2.arguments[0]));\n            if (vecLen != 0) {\n              let swizzleLiteral = node2.arguments[1];\n              let swiz = \"\";\n              if (ts.isStringLiteral(swizzleLiteral)) {\n                swiz = swizzleLiteral.text;\n              }\n              if (swiz.length == 1) {\n                return factory2.createElementAccessExpression(\n                  visit(node2.arguments[0]),\n                  factory2.createNumericLiteral(index[swiz])\n                );\n              }\n              let temp = factory2.createTempVariable(context2.hoistVariableDeclaration, true);\n              let tempAss = factory2.createAssignment(temp, visit(node2.arguments[0]));\n              let elems = [];\n              for (let i = 0; i < swiz.length; i++) {\n                if (vecLen == 1) {\n                  elems.push(temp);\n                } else {\n                  elems.push(\n                    factory2.createElementAccessExpression(\n                      temp,\n                      factory2.createNumericLiteral(index[swiz[i]])\n                    )\n                  );\n                }\n              }\n              return factory2.createCommaListExpression([\n                tempAss,\n                factory2.createArrayLiteralExpression(elems)\n              ]);\n            }\n          }\n          if (expressionText.startsWith(\"__.\") && makeVectorsMap.has(expressionText.replace(\"__.\", \"\").replace(/\\d/g, \"\"))) {\n            let arg_lengths = node2.arguments.map(\n              (x) => getVectorLen(checker, checker.getTypeAtLocation(x))\n            );\n            let matches = expressionText.match(/\\d/g);\n            if (matches) {\n              let targetLen = matches[0];\n              let targetName = expressionText.replace(\"__.\", \"\").replace(/\\d/g, \"\");\n              return factory2.createCallExpression(\n                factory2.createPropertyAccessExpression(\n                  factory2.createPropertyAccessExpression(\n                    factory2.createIdentifier(\"__\"),\n                    factory2.createIdentifier(\"FM\")\n                  ),\n                  factory2.createIdentifier(targetName + `_${targetLen}_${arg_lengths.join(\"_\")}`)\n                ),\n                [],\n                node2.arguments.map((x) => ts.visitEachChild(x, visit, context2))\n              );\n            } else {\n              if (expressionText == \"__.float\") {\n                return ts.visitEachChild(node2.arguments[0], visit, context2);\n              } else if (expressionText == \"__.int\") {\n                return factory2.createParenthesizedExpression(\n                  factory2.createBinaryExpression(\n                    ts.visitEachChild(node2.arguments[0], visit, context2),\n                    factory2.createToken(ts.SyntaxKind.BarToken),\n                    factory2.createNumericLiteral(\"0\")\n                  )\n                );\n              } else if (expressionText == \"__.uint\") {\n                return factory2.createParenthesizedExpression(\n                  factory2.createBinaryExpression(\n                    ts.visitEachChild(node2.arguments[0], visit, context2),\n                    factory2.createToken(ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken),\n                    factory2.createNumericLiteral(\"0\")\n                  )\n                );\n              }\n            }\n          }\n          if (symbol && symbol.name == \"int\") {\n            return factory2.createParenthesizedExpression(\n              factory2.createBinaryExpression(\n                ts.visitEachChild(node2, visit, context2),\n                factory2.createToken(ts.SyntaxKind.BarToken),\n                factory2.createNumericLiteral(\"0\")\n              )\n            );\n          } else if (symbol && (symbol.name == \"int2\" || symbol.name == \"int3\" || symbol.name == \"int4\")) {\n            return factory2.createCallExpression(\n              factory2.createPropertyAccessExpression(\n                factory2.createIdentifier(\"__\"),\n                factory2.createIdentifier(\"intifyVector\")\n              ),\n              [],\n              [ts.visitEachChild(node2, visit, context2)]\n            );\n          }\n        }\n        return ts.visitEachChild(node2, visit, context2);\n      }\n      rootNode = ts.visitNode(rootNode, visit);\n      return rootNode;\n    };\n  };\n  const updateClassStructure = (getChecker) => (context2) => {\n    let checker = getChecker();\n    return (rootNode) => {\n      const { factory: factory2 } = context2;\n      function visit(node2) {\n        if (ts.isClassDeclaration(node2)) {\n          return [\n            factory2.updateClassDeclaration(\n              node2,\n              node2.modifiers,\n              node2.name,\n              node2.typeParameters,\n              node2.heritageClauses,\n              [\n                ...node2.members.map((m) => ts.visitEachChild(m, visit, context2)),\n                factory2.createMethodDeclaration(\n                  void 0,\n                  void 0,\n                  factory2.createIdentifier(\"_getStructure\"),\n                  void 0,\n                  void 0,\n                  [],\n                  void 0,\n                  factory2.createBlock(\n                    [\n                      factory2.createReturnStatement(\n                        factory2.createCallExpression(\n                          factory2.createPropertyAccessExpression(\n                            factory2.createIdentifier(\"JSON\"),\n                            \"parse\"\n                          ),\n                          void 0,\n                          [\n                            factory2.createStringLiteral(\n                              JSON.stringify(\n                                translateType(checker, checker.getTypeAtLocation(node2), true)\n                              )\n                            )\n                          ]\n                        )\n                      )\n                    ],\n                    true\n                  )\n                )\n              ]\n            ),\n            factory2.createCallExpression(\n              factory2.createIdentifier(\"__shadeup_register_struct\"),\n              void 0,\n              [\n                factory2.createCallExpression(\n                  factory2.createPropertyAccessExpression(factory2.createIdentifier(\"JSON\"), \"parse\"),\n                  void 0,\n                  [\n                    factory2.createStringLiteral(\n                      JSON.stringify(translateType(checker, checker.getTypeAtLocation(node2), true))\n                    )\n                  ]\n                ),\n                factory2.createIdentifier(node2.name.text)\n              ]\n            )\n          ];\n        } else if (ts.isCallExpression(node2)) {\n          let symbol = checker.getSymbolAtLocation(node2.expression);\n          if (symbol && symbol.name == \"buffer\") {\n            let isInScope = false;\n            let sym = checker.getTypeAtLocation(node2.typeArguments[0]).getSymbol();\n            if (sym) {\n              let syms = checker.getSymbolsInScope(\n                node2,\n                ts.SymbolFlags.Alias | ts.SymbolFlags.TypeAlias | ts.SymbolFlags.Type\n              );\n              for (let s of syms) {\n                if (s == sym) {\n                  isInScope = true;\n                  break;\n                }\n              }\n            }\n            return factory2.updateCallExpression(node2, node2.expression, node2.typeArguments, [\n              ...node2.arguments,\n              factory2.createObjectLiteralExpression([\n                factory2.createSpreadAssignment(\n                  factory2.createCallExpression(\n                    factory2.createPropertyAccessExpression(factory2.createIdentifier(\"JSON\"), \"parse\"),\n                    void 0,\n                    [\n                      factory2.createStringLiteral(\n                        JSON.stringify(\n                          translateType(\n                            checker,\n                            checker.getTypeAtLocation(node2.typeArguments[0]),\n                            true\n                          )\n                        )\n                      )\n                    ]\n                  )\n                ),\n                ...isInScope ? [\n                  factory2.createPropertyAssignment(\n                    \"__type\",\n                    factory2.createIdentifier(\n                      checker.getTypeAtLocation(node2.typeArguments[0]).getSymbol().getName()\n                    )\n                  )\n                ] : []\n              ])\n            ]);\n          }\n        }\n        return ts.visitEachChild(node2, visit, context2);\n      }\n      return ts.visitNode(rootNode, visit);\n    };\n  };\n  const updateAsyncCalls = (getChecker) => (context2) => {\n    let [checker, env2] = getChecker();\n    return (rootNode) => {\n      const { factory: factory2 } = context2;\n      function visit(node2) {\n        if (ts.isCallExpression(node2)) {\n          let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n          if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n            exprSmybol = checker.getAliasedSymbol(exprSmybol);\n          }\n          if (exprSmybol) {\n            let funcDeclar = exprSmybol.getDeclarations()?.[0];\n            if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n              let graphNodeName = getFunctionNodeName(funcDeclar);\n              let graphNode = env2.tagGraph.getNode(graphNodeName);\n              if (graphNode) {\n                if (!isInShader$1(node2) && !isInRoot(node2)) {\n                  if (graphNode.tags.includes(\"async\")) {\n                    return factory2.createAwaitExpression(ts.visitEachChild(node2, visit, context2));\n                  }\n                }\n              }\n            }\n          }\n          if (node2.expression && ts.isIdentifier(node2.expression) && node2.expression.text.startsWith(\"shader_start_shd_\")) {\n            let inner = node2.arguments[0];\n            if (ts.isAsExpression(inner)) {\n              inner = inner.expression;\n            }\n            if (ts.isCallExpression(inner) && inner.arguments[0]) {\n              let shaderKey = inner.arguments[0];\n              if (ts.isStringLiteral(shaderKey)) {\n                let key = shaderKey.text;\n                let file = env2.files.find((x) => x.path == rootNode.fileName);\n                let shader = file.shaders.find((x) => x.glsl.key == \"shd_\" + key);\n                if (shader) {\n                  let params = [];\n                  for (let param of Object.keys(shader.glsl.locals)) {\n                    shader.glsl.locals[param];\n                    let symbols = checker.getSymbolsInScope(node2, ts.SymbolFlags.Variable);\n                    let symbol = symbols.find((x) => x.name == param);\n                    let findInside = (node22) => {\n                      if (ts.isIdentifier(node22) && checker.getSymbolAtLocation(node22) == symbol) {\n                        return node22;\n                      }\n                      return ts.forEachChild(node22, findInside);\n                    };\n                    let found = findInside(inner.arguments[1]);\n                    if (found) {\n                      params.push([`_ext_uniform_local_${param}`, found]);\n                    } else {\n                      params.push([`_ext_uniform_local_${param}`, factory2.createIdentifier(param)]);\n                    }\n                  }\n                  for (let param of Object.keys(shader.glsl.globals)) {\n                    let u = shader.glsl.globals[param];\n                    params.push([\n                      `_ext_uniform_global_${param}`,\n                      factory2.createCallExpression(\n                        factory2.createIdentifier(\"globalVarGet\"),\n                        void 0,\n                        [\n                          factory2.createStringLiteral(cleanName(u.fileName)),\n                          factory2.createStringLiteral(param)\n                        ]\n                      )\n                    ]);\n                  }\n                  let innerArg = inner.arguments[1];\n                  if (ts.isAsExpression(innerArg)) {\n                    innerArg = innerArg.expression;\n                  }\n                  if (ts.isParenthesizedExpression(innerArg)) {\n                    innerArg = innerArg.expression;\n                  }\n                  if (!ts.isArrowFunction(innerArg)) {\n                    throw new Error(\"Expected arrow function\");\n                  }\n                  let arrow = innerArg;\n                  let mods = ts.getModifiers(arrow) || [];\n                  return factory2.createCallExpression(\n                    factory2.createIdentifier(\"__shadeup_make_shader_inst\"),\n                    [],\n                    [\n                      ...[\n                        factory2.createStringLiteral(shader.glsl.key),\n                        factory2.createObjectLiteralExpression(\n                          params.map(([name, value]) => factory2.createPropertyAssignment(name, value))\n                        ),\n                        factory2.updateArrowFunction(\n                          arrow,\n                          [...mods, factory2.createModifier(ts.SyntaxKind.AsyncKeyword)],\n                          arrow.typeParameters,\n                          arrow.parameters,\n                          arrow.type,\n                          arrow.equalsGreaterThanToken,\n                          arrow.body\n                        )\n                      ],\n                      ...inner.arguments.length == 3 ? [inner.arguments[2]] : []\n                    ]\n                  );\n                }\n              }\n            }\n          }\n        }\n        if (ts.isFunctionDeclaration(node2)) {\n          let graphNodeName = getFunctionNodeName(node2, rootNode);\n          let graphNode = env2.tagGraph.getNode(graphNodeName);\n          if (graphNode) {\n            if (graphNode.tags.includes(\"async\")) {\n              let mods = ts.getModifiers(node2) || [];\n              return factory2.updateFunctionDeclaration(\n                node2,\n                [...mods, factory2.createModifier(ts.SyntaxKind.AsyncKeyword)],\n                node2.asteriskToken,\n                node2.name,\n                node2.typeParameters,\n                node2.parameters,\n                node2.type,\n                ts.visitEachChild(node2.body, visit, context2)\n              );\n            }\n          }\n        }\n        if (ts.isClassDeclaration(node2)) {\n          ts.forEachChild(node2, (n) => {\n            if (ts.isMethodDeclaration(n)) {\n              let graphNodeName = getFunctionNodeName(n, rootNode);\n              let graphNode = env2.tagGraph.getNode(graphNodeName);\n              if (graphNode) {\n                if (graphNode.tags.includes(\"async\")) {\n                  let mods = ts.getModifiers(node2) || [];\n                  return factory2.updateMethodDeclaration(\n                    n,\n                    [...mods, factory2.createModifier(ts.SyntaxKind.AsyncKeyword)],\n                    n.asteriskToken,\n                    n.name,\n                    n.questionToken,\n                    n.typeParameters,\n                    n.parameters,\n                    n.type,\n                    ts.visitEachChild(n.body, visit, context2)\n                  );\n                }\n              }\n            }\n          });\n        }\n        return ts.visitEachChild(node2, visit, context2);\n      }\n      return ts.visitNode(rootNode, visit);\n    };\n  };\n  async function makeTypescriptEnvironment(shadeupEnv) {\n    const shouldCache = false;\n    let fsMap = await vfs.createDefaultMapFromCDN(\n      { target: ts.ScriptTarget.ES2015, lib: [\"es5\", \"es2015\", \"es2015.promise\"] },\n      \"3.7.3\",\n      shouldCache,\n      ts\n    );\n    fsMap = /* @__PURE__ */ new Map();\n    fsMap.set(\"/file.ts\", \"\");\n    fsMap.set(\"/std_math.ts\", stdMath);\n    fsMap.set(\"/static-math.ts\", stdStaticMath);\n    fsMap.set(\"/std___std_all.ts\", stdAll);\n    fsMap.set(\"/global.d.ts\", globalDTS);\n    const system = vfs.createSystem(fsMap);\n    system.$fsMap = fsMap;\n    system.writeFile(\"/std___std_all.ts\", stdAll);\n    system.writeFile(\"/std_math.ts\", stdMath);\n    system.writeFile(\"/static-math.ts\", stdStaticMath);\n    system.writeFile(\"/global.d.ts\", globalDTS);\n    const compilerOpts = {\n      module: ts.ModuleKind.AMD,\n      removeComments: false,\n      lib: [\"es5\"],\n      //noImplicitUseStrict: true,\n      alwaysStrict: true,\n      strictNullChecks: true,\n      strictFunctionTypes: true,\n      strictBindCallApply: true,\n      strictPropertyInitialization: true,\n      noImplicitThis: true,\n      strict: true,\n      noImplicitAny: true,\n      noImplicitReturns: true,\n      declaration: shadeupEnv.options?.declaration ?? false\n    };\n    if (shadeupEnv.options.esnext)\n      ;\n    let transformers = {\n      before: [\n        updateIntegerMixing(() => [\n          env2.languageService.getProgram().getTypeChecker(),\n          shadeupEnv,\n          shadeupEnv.loads\n        ]),\n        updateAsyncCalls(() => [env2.languageService.getProgram().getTypeChecker(), shadeupEnv]),\n        // updateAsyncArrows(() => [env.languageService.getProgram().getTypeChecker(), shadeupEnv]),\n        updateClassStructure(() => env2.languageService.getProgram().getTypeChecker())\n      ]\n    };\n    const env2 = vfs.createVirtualTypeScriptEnvironment(\n      system,\n      Object.keys(fsMap),\n      ts,\n      compilerOpts,\n      transformers\n    );\n    env2.createFile(\"/std___std_all.ts\", stdAll);\n    env2.createFile(\"/std_math.ts\", stdMath);\n    env2.createFile(\"/static-math.ts\", stdStaticMath);\n    env2.createFile(\"/global.d.ts\", globalDTS);\n    return {\n      env: env2,\n      fsMap,\n      system\n    };\n  }\n  var DIFF_DELETE = -1;\n  var DIFF_INSERT = 1;\n  var DIFF_EQUAL = 0;\n  function diff_main(text1, text2, cursor_pos, _fix_unicode) {\n    if (text1 === text2) {\n      if (text1) {\n        return [[DIFF_EQUAL, text1]];\n      }\n      return [];\n    }\n    if (cursor_pos != null) {\n      var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n      if (editdiff) {\n        return editdiff;\n      }\n    }\n    var commonlength = diff_commonPrefix(text1, text2);\n    var commonprefix = text1.substring(0, commonlength);\n    text1 = text1.substring(commonlength);\n    text2 = text2.substring(commonlength);\n    commonlength = diff_commonSuffix(text1, text2);\n    var commonsuffix = text1.substring(text1.length - commonlength);\n    text1 = text1.substring(0, text1.length - commonlength);\n    text2 = text2.substring(0, text2.length - commonlength);\n    var diffs = diff_compute_(text1, text2);\n    if (commonprefix) {\n      diffs.unshift([DIFF_EQUAL, commonprefix]);\n    }\n    if (commonsuffix) {\n      diffs.push([DIFF_EQUAL, commonsuffix]);\n    }\n    diff_cleanupMerge(diffs, _fix_unicode);\n    return diffs;\n  }\n  function diff_compute_(text1, text2) {\n    var diffs;\n    if (!text1) {\n      return [[DIFF_INSERT, text2]];\n    }\n    if (!text2) {\n      return [[DIFF_DELETE, text1]];\n    }\n    var longtext = text1.length > text2.length ? text1 : text2;\n    var shorttext = text1.length > text2.length ? text2 : text1;\n    var i = longtext.indexOf(shorttext);\n    if (i !== -1) {\n      diffs = [\n        [DIFF_INSERT, longtext.substring(0, i)],\n        [DIFF_EQUAL, shorttext],\n        [DIFF_INSERT, longtext.substring(i + shorttext.length)]\n      ];\n      if (text1.length > text2.length) {\n        diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n      }\n      return diffs;\n    }\n    if (shorttext.length === 1) {\n      return [\n        [DIFF_DELETE, text1],\n        [DIFF_INSERT, text2]\n      ];\n    }\n    var hm = diff_halfMatch_(text1, text2);\n    if (hm) {\n      var text1_a = hm[0];\n      var text1_b = hm[1];\n      var text2_a = hm[2];\n      var text2_b = hm[3];\n      var mid_common = hm[4];\n      var diffs_a = diff_main(text1_a, text2_a);\n      var diffs_b = diff_main(text1_b, text2_b);\n      return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n    }\n    return diff_bisect_(text1, text2);\n  }\n  function diff_bisect_(text1, text2) {\n    var text1_length = text1.length;\n    var text2_length = text2.length;\n    var max_d = Math.ceil((text1_length + text2_length) / 2);\n    var v_offset = max_d;\n    var v_length = 2 * max_d;\n    var v1 = new Array(v_length);\n    var v2 = new Array(v_length);\n    for (var x = 0; x < v_length; x++) {\n      v1[x] = -1;\n      v2[x] = -1;\n    }\n    v1[v_offset + 1] = 0;\n    v2[v_offset + 1] = 0;\n    var delta = text1_length - text2_length;\n    var front = delta % 2 !== 0;\n    var k1start = 0;\n    var k1end = 0;\n    var k2start = 0;\n    var k2end = 0;\n    for (var d = 0; d < max_d; d++) {\n      for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n        var k1_offset = v_offset + k1;\n        var x1;\n        if (k1 === -d || k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1]) {\n          x1 = v1[k1_offset + 1];\n        } else {\n          x1 = v1[k1_offset - 1] + 1;\n        }\n        var y1 = x1 - k1;\n        while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) === text2.charAt(y1)) {\n          x1++;\n          y1++;\n        }\n        v1[k1_offset] = x1;\n        if (x1 > text1_length) {\n          k1end += 2;\n        } else if (y1 > text2_length) {\n          k1start += 2;\n        } else if (front) {\n          var k2_offset = v_offset + delta - k1;\n          if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n            var x2 = text1_length - v2[k2_offset];\n            if (x1 >= x2) {\n              return diff_bisectSplit_(text1, text2, x1, y1);\n            }\n          }\n        }\n      }\n      for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n        var k2_offset = v_offset + k2;\n        var x2;\n        if (k2 === -d || k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1]) {\n          x2 = v2[k2_offset + 1];\n        } else {\n          x2 = v2[k2_offset - 1] + 1;\n        }\n        var y2 = x2 - k2;\n        while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) === text2.charAt(text2_length - y2 - 1)) {\n          x2++;\n          y2++;\n        }\n        v2[k2_offset] = x2;\n        if (x2 > text1_length) {\n          k2end += 2;\n        } else if (y2 > text2_length) {\n          k2start += 2;\n        } else if (!front) {\n          var k1_offset = v_offset + delta - k2;\n          if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n            var x1 = v1[k1_offset];\n            var y1 = v_offset + x1 - k1_offset;\n            x2 = text1_length - x2;\n            if (x1 >= x2) {\n              return diff_bisectSplit_(text1, text2, x1, y1);\n            }\n          }\n        }\n      }\n    }\n    return [\n      [DIFF_DELETE, text1],\n      [DIFF_INSERT, text2]\n    ];\n  }\n  function diff_bisectSplit_(text1, text2, x, y) {\n    var text1a = text1.substring(0, x);\n    var text2a = text2.substring(0, y);\n    var text1b = text1.substring(x);\n    var text2b = text2.substring(y);\n    var diffs = diff_main(text1a, text2a);\n    var diffsb = diff_main(text1b, text2b);\n    return diffs.concat(diffsb);\n  }\n  function diff_commonPrefix(text1, text2) {\n    if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n      return 0;\n    }\n    var pointermin = 0;\n    var pointermax = Math.min(text1.length, text2.length);\n    var pointermid = pointermax;\n    var pointerstart = 0;\n    while (pointermin < pointermid) {\n      if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n        pointermin = pointermid;\n        pointerstart = pointermin;\n      } else {\n        pointermax = pointermid;\n      }\n      pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n    }\n    if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n      pointermid--;\n    }\n    return pointermid;\n  }\n  function diff_commonSuffix(text1, text2) {\n    if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n      return 0;\n    }\n    var pointermin = 0;\n    var pointermax = Math.min(text1.length, text2.length);\n    var pointermid = pointermax;\n    var pointerend = 0;\n    while (pointermin < pointermid) {\n      if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n        pointermin = pointermid;\n        pointerend = pointermin;\n      } else {\n        pointermax = pointermid;\n      }\n      pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n    }\n    if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n      pointermid--;\n    }\n    return pointermid;\n  }\n  function diff_halfMatch_(text1, text2) {\n    var longtext = text1.length > text2.length ? text1 : text2;\n    var shorttext = text1.length > text2.length ? text2 : text1;\n    if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n      return null;\n    }\n    function diff_halfMatchI_(longtext2, shorttext2, i) {\n      var seed = longtext2.substring(i, i + Math.floor(longtext2.length / 4));\n      var j = -1;\n      var best_common = \"\";\n      var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n      while ((j = shorttext2.indexOf(seed, j + 1)) !== -1) {\n        var prefixLength = diff_commonPrefix(longtext2.substring(i), shorttext2.substring(j));\n        var suffixLength = diff_commonSuffix(longtext2.substring(0, i), shorttext2.substring(0, j));\n        if (best_common.length < suffixLength + prefixLength) {\n          best_common = shorttext2.substring(j - suffixLength, j) + shorttext2.substring(j, j + prefixLength);\n          best_longtext_a = longtext2.substring(0, i - suffixLength);\n          best_longtext_b = longtext2.substring(i + prefixLength);\n          best_shorttext_a = shorttext2.substring(0, j - suffixLength);\n          best_shorttext_b = shorttext2.substring(j + prefixLength);\n        }\n      }\n      if (best_common.length * 2 >= longtext2.length) {\n        return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];\n      } else {\n        return null;\n      }\n    }\n    var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));\n    var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n    var hm;\n    if (!hm1 && !hm2) {\n      return null;\n    } else if (!hm2) {\n      hm = hm1;\n    } else if (!hm1) {\n      hm = hm2;\n    } else {\n      hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n    }\n    var text1_a, text1_b, text2_a, text2_b;\n    if (text1.length > text2.length) {\n      text1_a = hm[0];\n      text1_b = hm[1];\n      text2_a = hm[2];\n      text2_b = hm[3];\n    } else {\n      text2_a = hm[0];\n      text2_b = hm[1];\n      text1_a = hm[2];\n      text1_b = hm[3];\n    }\n    var mid_common = hm[4];\n    return [text1_a, text1_b, text2_a, text2_b, mid_common];\n  }\n  function diff_cleanupMerge(diffs, fix_unicode) {\n    diffs.push([DIFF_EQUAL, \"\"]);\n    var pointer = 0;\n    var count_delete = 0;\n    var count_insert = 0;\n    var text_delete = \"\";\n    var text_insert = \"\";\n    var commonlength;\n    while (pointer < diffs.length) {\n      if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n        diffs.splice(pointer, 1);\n        continue;\n      }\n      switch (diffs[pointer][0]) {\n        case DIFF_INSERT:\n          count_insert++;\n          text_insert += diffs[pointer][1];\n          pointer++;\n          break;\n        case DIFF_DELETE:\n          count_delete++;\n          text_delete += diffs[pointer][1];\n          pointer++;\n          break;\n        case DIFF_EQUAL:\n          var previous_equality = pointer - count_insert - count_delete - 1;\n          if (fix_unicode) {\n            if (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) {\n              var stray = diffs[previous_equality][1].slice(-1);\n              diffs[previous_equality][1] = diffs[previous_equality][1].slice(0, -1);\n              text_delete = stray + text_delete;\n              text_insert = stray + text_insert;\n              if (!diffs[previous_equality][1]) {\n                diffs.splice(previous_equality, 1);\n                pointer--;\n                var k = previous_equality - 1;\n                if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n                  count_insert++;\n                  text_insert = diffs[k][1] + text_insert;\n                  k--;\n                }\n                if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n                  count_delete++;\n                  text_delete = diffs[k][1] + text_delete;\n                  k--;\n                }\n                previous_equality = k;\n              }\n            }\n            if (starts_with_pair_end(diffs[pointer][1])) {\n              var stray = diffs[pointer][1].charAt(0);\n              diffs[pointer][1] = diffs[pointer][1].slice(1);\n              text_delete += stray;\n              text_insert += stray;\n            }\n          }\n          if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n            diffs.splice(pointer, 1);\n            break;\n          }\n          if (text_delete.length > 0 || text_insert.length > 0) {\n            if (text_delete.length > 0 && text_insert.length > 0) {\n              commonlength = diff_commonPrefix(text_insert, text_delete);\n              if (commonlength !== 0) {\n                if (previous_equality >= 0) {\n                  diffs[previous_equality][1] += text_insert.substring(0, commonlength);\n                } else {\n                  diffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]);\n                  pointer++;\n                }\n                text_insert = text_insert.substring(commonlength);\n                text_delete = text_delete.substring(commonlength);\n              }\n              commonlength = diff_commonSuffix(text_insert, text_delete);\n              if (commonlength !== 0) {\n                diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n                text_insert = text_insert.substring(0, text_insert.length - commonlength);\n                text_delete = text_delete.substring(0, text_delete.length - commonlength);\n              }\n            }\n            var n = count_insert + count_delete;\n            if (text_delete.length === 0 && text_insert.length === 0) {\n              diffs.splice(pointer - n, n);\n              pointer = pointer - n;\n            } else if (text_delete.length === 0) {\n              diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n              pointer = pointer - n + 1;\n            } else if (text_insert.length === 0) {\n              diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n              pointer = pointer - n + 1;\n            } else {\n              diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]);\n              pointer = pointer - n + 2;\n            }\n          }\n          if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n            diffs[pointer - 1][1] += diffs[pointer][1];\n            diffs.splice(pointer, 1);\n          } else {\n            pointer++;\n          }\n          count_insert = 0;\n          count_delete = 0;\n          text_delete = \"\";\n          text_insert = \"\";\n          break;\n      }\n    }\n    if (diffs[diffs.length - 1][1] === \"\") {\n      diffs.pop();\n    }\n    var changes = false;\n    pointer = 1;\n    while (pointer < diffs.length - 1) {\n      if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n        if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1]) {\n          diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n          diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n          diffs.splice(pointer - 1, 1);\n          changes = true;\n        } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {\n          diffs[pointer - 1][1] += diffs[pointer + 1][1];\n          diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n          diffs.splice(pointer + 1, 1);\n          changes = true;\n        }\n      }\n      pointer++;\n    }\n    if (changes) {\n      diff_cleanupMerge(diffs, fix_unicode);\n    }\n  }\n  function is_surrogate_pair_start(charCode) {\n    return charCode >= 55296 && charCode <= 56319;\n  }\n  function is_surrogate_pair_end(charCode) {\n    return charCode >= 56320 && charCode <= 57343;\n  }\n  function starts_with_pair_end(str) {\n    return is_surrogate_pair_end(str.charCodeAt(0));\n  }\n  function ends_with_pair_start(str) {\n    return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n  }\n  function remove_empty_tuples(tuples) {\n    var ret = [];\n    for (var i = 0; i < tuples.length; i++) {\n      if (tuples[i][1].length > 0) {\n        ret.push(tuples[i]);\n      }\n    }\n    return ret;\n  }\n  function make_edit_splice(before, oldMiddle, newMiddle, after) {\n    if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n      return null;\n    }\n    return remove_empty_tuples([\n      [DIFF_EQUAL, before],\n      [DIFF_DELETE, oldMiddle],\n      [DIFF_INSERT, newMiddle],\n      [DIFF_EQUAL, after]\n    ]);\n  }\n  function find_cursor_edit_diff(oldText, newText, cursor_pos) {\n    var oldRange = typeof cursor_pos === \"number\" ? { index: cursor_pos, length: 0 } : cursor_pos.oldRange;\n    var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n    var oldLength = oldText.length;\n    var newLength = newText.length;\n    if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n      var oldCursor = oldRange.index;\n      var oldBefore = oldText.slice(0, oldCursor);\n      var oldAfter = oldText.slice(oldCursor);\n      var maybeNewCursor = newRange ? newRange.index : null;\n      editBefore: {\n        var newCursor = oldCursor + newLength - oldLength;\n        if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n          break editBefore;\n        }\n        if (newCursor < 0 || newCursor > newLength) {\n          break editBefore;\n        }\n        var newBefore = newText.slice(0, newCursor);\n        var newAfter = newText.slice(newCursor);\n        if (newAfter !== oldAfter) {\n          break editBefore;\n        }\n        var prefixLength = Math.min(oldCursor, newCursor);\n        var oldPrefix = oldBefore.slice(0, prefixLength);\n        var newPrefix = newBefore.slice(0, prefixLength);\n        if (oldPrefix !== newPrefix) {\n          break editBefore;\n        }\n        var oldMiddle = oldBefore.slice(prefixLength);\n        var newMiddle = newBefore.slice(prefixLength);\n        return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n      }\n      editAfter: {\n        if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n          break editAfter;\n        }\n        var cursor = oldCursor;\n        var newBefore = newText.slice(0, cursor);\n        var newAfter = newText.slice(cursor);\n        if (newBefore !== oldBefore) {\n          break editAfter;\n        }\n        var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n        var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n        var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n        if (oldSuffix !== newSuffix) {\n          break editAfter;\n        }\n        var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n        var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n        return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n      }\n    }\n    if (oldRange.length > 0 && newRange && newRange.length === 0) {\n      replaceRange: {\n        var oldPrefix = oldText.slice(0, oldRange.index);\n        var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n        var prefixLength = oldPrefix.length;\n        var suffixLength = oldSuffix.length;\n        if (newLength < prefixLength + suffixLength) {\n          break replaceRange;\n        }\n        var newPrefix = newText.slice(0, prefixLength);\n        var newSuffix = newText.slice(newLength - suffixLength);\n        if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n          break replaceRange;\n        }\n        var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n        var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n        return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n      }\n    }\n    return null;\n  }\n  function diff(text1, text2, cursor_pos) {\n    return diff_main(text1, text2, cursor_pos, true);\n  }\n  diff.INSERT = DIFF_INSERT;\n  diff.DELETE = DIFF_DELETE;\n  diff.EQUAL = DIFF_EQUAL;\n  Array.prototype.enumerate = function() {\n    let i = 0;\n    let rv = [];\n    for (let item of this)\n      rv.push([i++, item]);\n    return rv;\n  };\n  Array.prototype.filter_map = function(fn) {\n    return this.map(fn).filter((n) => n !== null);\n  };\n  Array.prototype.max_by_key = function(fn) {\n    const max2 = (self2) => {\n      return Math.max.apply(null, self2);\n    };\n    return max2(this.map(fn));\n  };\n  Array.prototype.chain = function(that) {\n    return this.concat(that);\n  };\n  Number.prototype.saturating_sub = function(n) {\n    return this.valueOf() - n;\n  };\n  Number.prototype.max = function(n) {\n    return Math.max(this.valueOf(), n);\n  };\n  Number.prototype.min = function(n) {\n    return Math.min(this.valueOf(), n);\n  };\n  class Option {\n    static from(obj) {\n      if (obj === void 0 || obj === null)\n        return none();\n      return some(obj);\n    }\n  }\n  class Some {\n    constructor(value) {\n      this.value = value;\n    }\n    map(fn) {\n      return some(fn(this.value));\n    }\n    map_or(d, fn) {\n      return fn(this.value);\n    }\n    filter(fn) {\n      if (fn(this.value))\n        return some(this.value);\n      return none();\n    }\n    or(d) {\n      return this;\n    }\n    iter() {\n      return [this.value];\n    }\n    unwrap() {\n      return this.value;\n    }\n    unwrap_or_else(d) {\n      return this.unwrap();\n    }\n    is_some() {\n      return true;\n    }\n    is_none() {\n      return false;\n    }\n    equal(other) {\n      if (other.is_some())\n        return this.value === other.value;\n      return false;\n    }\n    static is(o) {\n      return o instanceof Some;\n    }\n  }\n  class None {\n    map(fn) {\n      return none();\n    }\n    map_or(d, fn) {\n      return d;\n    }\n    filter(fn) {\n      return none();\n    }\n    or(d) {\n      return d;\n    }\n    iter() {\n      return [];\n    }\n    unwrap() {\n      throw new Error(\"Unwrapped None\");\n    }\n    unwrap_or_else(d) {\n      return d();\n    }\n    is_some() {\n      return false;\n    }\n    is_none() {\n      return true;\n    }\n    equal(other) {\n      return other.is_none();\n    }\n    static is(o) {\n      return o instanceof None;\n    }\n  }\n  const some = (value) => {\n    return new Some(value);\n  };\n  const none = () => {\n    return new None();\n  };\n  const isOption = (o) => {\n    return o instanceof Some || o instanceof None;\n  };\n  class Ok {\n    constructor(value) {\n      this.value = value;\n    }\n    map(fn) {\n      return ok(fn(this.value));\n    }\n    map_or(d, fn) {\n      return ok(fn(this.value));\n    }\n    or(d) {\n      return this;\n    }\n    is_ok() {\n      return true;\n    }\n    is_err() {\n      return false;\n    }\n    unwrap() {\n      return this.value;\n    }\n    unwrap_or_else(d) {\n      return d(this.value);\n    }\n    static is(o) {\n      return o instanceof Ok;\n    }\n  }\n  class Err {\n    constructor(value) {\n      this.value = value;\n    }\n    map(fn) {\n      return ok(fn(this.value));\n    }\n    map_or(d, fn) {\n      return ok(d);\n    }\n    or(d) {\n      return d;\n    }\n    unwrap() {\n      return this.value;\n    }\n    unwrap_or_else(d) {\n      return d(this.value);\n    }\n    is_ok() {\n      return false;\n    }\n    is_err() {\n      return true;\n    }\n    static is(o) {\n      return o instanceof Err;\n    }\n  }\n  const ok = (value) => {\n    return new Ok(value);\n  };\n  const err = (value) => {\n    return new Err(value);\n  };\n  const isResult = (o) => {\n    return o instanceof Ok || o instanceof Err;\n  };\n  function binary_search_by_key(arr, x, fn) {\n    let start = 0, end = arr.length - 1, mid, val;\n    while (start < end) {\n      mid = Math.floor((start + end) / 2);\n      val = fn(arr[mid]);\n      if (val === x)\n        return ok(mid);\n      else if (val < x)\n        start = mid + 1;\n      else\n        end = mid - 1;\n    }\n    return err(get_sorted_index(arr, x, fn));\n  }\n  function get_sorted_index(arr, x, fn) {\n    let low = 0, high = arr.length;\n    while (low < high) {\n      let mid = low + high >>> 1;\n      if (x > fn(arr[mid]))\n        low = mid + 1;\n      else\n        high = mid;\n    }\n    return low;\n  }\n  function range(start, end) {\n    let rv = [];\n    while (start < end) {\n      rv.push(start);\n      start++;\n    }\n    return rv;\n  }\n  function* rangeIter(start, end) {\n    while (start < end) {\n      yield start;\n      start++;\n    }\n    return;\n  }\n  const max = (self2) => {\n    if (self2.length === 0)\n      return void 0;\n    return Math.max.apply(null, self2);\n  };\n  const bton = (b) => b === true ? 1 : 0;\n  function sort_by_key(arr, fn) {\n    arr.sort((a, b) => {\n      return fn(a) - fn(b);\n    });\n  }\n  function min_by_key(arr, fn) {\n    let res = [Infinity, null];\n    for (let val of arr) {\n      if (fn(val) < res[0]) {\n        res = [fn(val), val];\n      }\n    }\n    return Option.from(res[1]);\n  }\n  const isString = (o) => typeof o === \"string\";\n  const isNumber = (o) => typeof o === \"number\";\n  const isBoolean = (o) => typeof o === \"boolean\";\n  const isCallback = (maybeFunction) => typeof maybeFunction === \"function\";\n  class Display {\n    constructor(value) {\n      this.value = typeof value === \"string\" ? value : value.value;\n    }\n    fg(color) {\n      if (isOption(color)) {\n        let func = color.is_some() ? color.unwrap() : (a) => a;\n        this.value = func(this.value);\n      } else if (isCallback(color)) {\n        this.value = color(this.value);\n      }\n      return this;\n    }\n    bg(color) {\n      if (isOption(color)) {\n        let func = color.is_some() ? color.unwrap() : (a) => a;\n        this.value = func(this.value);\n      } else if (isCallback(color)) {\n        this.value = color(this.value);\n      }\n      return this;\n    }\n    chars() {\n      return this.value;\n    }\n    map(fn) {\n      return new Display(fn(this.value));\n    }\n    display() {\n      return this.value;\n    }\n    toString() {\n      return this.value;\n    }\n    unwrap_or_else(d) {\n      return this.value ?? d();\n    }\n    static {\n      this.is = (o) => o instanceof Display;\n    }\n  }\n  const isDisplay = Display.is;\n  class Span {\n    constructor(_start, _end) {\n      this._start = _start;\n      this._end = _end;\n    }\n    /// Get the identifier of the source that this span refers to.\n    source() {\n      return this.SourceId;\n    }\n    set start(value) {\n      this._start = value;\n    }\n    get start() {\n      return this._start;\n    }\n    set end(value) {\n      this._end = value;\n    }\n    get end() {\n      return this._end;\n    }\n    /// Get the length of this span (difference between the start of the span and the end of the span).\n    len() {\n      return this.end.saturating_sub(this.start);\n    }\n    /// Determine whether the span contains the given offset.\n    contains(offset) {\n      return range(this.start, this.end).includes(offset);\n    }\n    static {\n      this.is = (o) => o instanceof Span;\n    }\n    static from(o) {\n      if (isNumber(o[0]) && isNumber(o[1]))\n        return new Span(o[0], o[1]);\n      if (isString(o[0]) && Range.is(o[1])) {\n        const s = new Span(o[1].start, o[1].end);\n        s.SourceId = o[0];\n        return s;\n      }\n      throw new Error(`Invalid SpanInit`);\n    }\n  }\n  Span.is;\n  class Range extends Span {\n    constructor() {\n      super(...arguments);\n      this.SourceId = null;\n    }\n    source() {\n      return this.SourceId;\n    }\n    len() {\n      return Math.abs(this.start - this.end);\n    }\n    contains(item) {\n      return item >= this.start && item < this.end;\n    }\n    static is(o) {\n      return o instanceof Range;\n    }\n    static from(o) {\n      if (isNumber(o[0]) && isNumber(o[1]))\n        return new Span(o[0], o[1]);\n      if (isString(o[0]) && Range.is(o[1])) {\n        const s = new Range(o[1].start, o[1].end);\n        s.SourceId = o[0];\n        return s;\n      }\n      throw new Error(`Invalid SpanInit`);\n    }\n    static new(start, end) {\n      return new Range(start, end);\n    }\n  }\n  function ValueError(message) {\n    var err2 = new Error(message);\n    err2.name = \"ValueError\";\n    return err2;\n  }\n  function create(transformers) {\n    return function(template) {\n      var args = Array.prototype.slice.call(arguments, 1);\n      var idx = 0;\n      var state = \"UNDEFINED\";\n      return template.replace(\n        /([{}])\\1|[{](.*?)(?:!(.+?))?[}]/g,\n        function(match2, literal, _key, xf) {\n          if (literal != null) {\n            return literal;\n          }\n          var key = _key;\n          if (key.length > 0) {\n            if (state === \"IMPLICIT\") {\n              throw ValueError(\"cannot switch from implicit to explicit numbering\");\n            }\n            state = \"EXPLICIT\";\n          } else {\n            if (state === \"EXPLICIT\") {\n              throw ValueError(\"cannot switch from explicit to implicit numbering\");\n            }\n            state = \"IMPLICIT\";\n            key = String(idx);\n            idx += 1;\n          }\n          var path = key.split(\".\");\n          var value = (/^\\d+$/.test(path[0]) ? path : [\"0\"].concat(path)).reduce(\n            function(maybe, key2) {\n              return maybe.reduce(function(_, x) {\n                return x != null && key2 in Object(x) ? [typeof x[key2] === \"function\" ? x[key2]() : x[key2]] : [];\n              }, []);\n            },\n            [args]\n          ).reduce(function(_, x) {\n            return x;\n          }, \"\");\n          if (xf == null) {\n            return value;\n          } else if (Object.prototype.hasOwnProperty.call(transformers, xf)) {\n            return transformers[xf](value);\n          } else {\n            throw ValueError('no transformer named \"' + xf + '\"');\n          }\n        }\n      );\n    };\n  }\n  var format$1 = create({});\n  format$1.create = create;\n  format$1.extend = function(prototype, transformers) {\n    var $format = create(transformers);\n    prototype.format = function() {\n      var args = Array.prototype.slice.call(arguments);\n      args.unshift(this);\n      return $format.apply(global, args);\n    };\n  };\n  const stringFormatter = () => new class {\n    constructor() {\n      this.flags = 0;\n      this.fill = \"\";\n      this.align = \"Left\";\n      this.width = none();\n      this.precision = none();\n      this.buf = mkStringWriter();\n    }\n    unwrap() {\n      return this.buf.unwrap();\n    }\n  }();\n  class Show {\n    constructor(self2) {\n      this.self = self2;\n    }\n    fmt(f) {\n      if (isOption(this.self)) {\n        this.self.map((x) => new Show(x).fmt(f));\n        return;\n      }\n      if (isResult(this.self)) {\n        this.self.map((x) => new Show(x).fmt(f));\n        return;\n      }\n      if (typeof this.self === \"string\") {\n        write(f.buf, \"{}\", this.self);\n        return;\n      }\n      if (Array.isArray(this.self) && this.self.length === 2) {\n        if (isCallback(this.self[1])) {\n          for (let x of this.self[0]) {\n            const func = this.self[1];\n            func(f, x);\n          }\n        } else {\n          for (let _ of range(0, this.self[1])) {\n            write(f.buf, \"{}\", this.self[0]);\n          }\n        }\n      } else {\n        const x = this.self[0];\n        write(f.buf, \"{}\", x);\n        return;\n      }\n    }\n    static {\n      this.is = (o) => o instanceof Show;\n    }\n  }\n  const isShow = Show.is;\n  function write(w, ...args) {\n    w.write_fmt(format(...args.map(fromRust)));\n  }\n  function format(...args) {\n    const [head, ...rest] = args.map(fromRust);\n    return format$1(head, ...rest);\n  }\n  function fromRust(node2) {\n    if (isDisplay(node2)) {\n      return node2.display();\n    }\n    if (isShow(node2)) {\n      let f = stringFormatter();\n      node2.fmt(f);\n      return f.unwrap();\n    }\n    if (isOption(node2)) {\n      return node2.unwrap_or_else(() => \"\");\n    }\n    if (isResult(node2)) {\n      return node2.unwrap_or_else(() => \"<(Unwrap Err)>\");\n    }\n    return node2.toString();\n  }\n  function writeln(w, ...args) {\n    let val = format(...args.map(fromRust));\n    w.write_fmt(val);\n    w.write_fmt(\"\\n\");\n  }\n  function eprintln(...args) {\n    console.error(format(...args));\n  }\n  class StdoutWriter {\n    write_str(s) {\n      throw new Error(\"Function not implemented\");\n    }\n    write_char(c2) {\n      throw new Error(\"Function not implemented\");\n    }\n    write_fmt(...args) {\n      console.log(format(...args));\n      return ok(null);\n    }\n  }\n  class StderrWriter {\n    write_str(s) {\n      throw new Error(\"Function not implemented\");\n    }\n    write_char(c2) {\n      throw new Error(\"Function not implemented\");\n    }\n    write_fmt(...args) {\n      process.stderr.write(format(...args));\n      return ok(null);\n    }\n  }\n  class StringWriter {\n    constructor() {\n      this.value = [];\n    }\n    write_str(s) {\n      this.value.push(s);\n      return ok(null);\n    }\n    write_char(c2) {\n      this.value.push(c2);\n      return ok(null);\n    }\n    write_fmt(...args) {\n      this.value.push(format(...args));\n      return ok(null);\n    }\n    map(fn) {\n      return fn(this.unwrap());\n    }\n    unwrap() {\n      return this.value.join(\"\");\n    }\n  }\n  const stdoutWriter = new StdoutWriter();\n  const stderrWriter = new StderrWriter();\n  const mkStringWriter = () => new StringWriter();\n  const ANSI_BACKGROUND_OFFSET = 10;\n  const wrapAnsi16 = (offset = 0) => (code) => `\\x1B[${code + offset}m`;\n  const wrapAnsi256 = (offset = 0) => (code) => `\\x1B[${38 + offset};5;${code}m`;\n  const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\x1B[${38 + offset};2;${red};${green};${blue}m`;\n  const styles$1 = {\n    modifier: {\n      reset: [0, 0],\n      // 21 isn't widely supported and 22 does the same thing\n      bold: [1, 22],\n      dim: [2, 22],\n      italic: [3, 23],\n      underline: [4, 24],\n      overline: [53, 55],\n      inverse: [7, 27],\n      hidden: [8, 28],\n      strikethrough: [9, 29]\n    },\n    color: {\n      black: [30, 39],\n      red: [31, 39],\n      green: [32, 39],\n      yellow: [33, 39],\n      blue: [34, 39],\n      magenta: [35, 39],\n      cyan: [36, 39],\n      white: [37, 39],\n      // Bright color\n      blackBright: [90, 39],\n      gray: [90, 39],\n      // Alias of `blackBright`\n      grey: [90, 39],\n      // Alias of `blackBright`\n      redBright: [91, 39],\n      greenBright: [92, 39],\n      yellowBright: [93, 39],\n      blueBright: [94, 39],\n      magentaBright: [95, 39],\n      cyanBright: [96, 39],\n      whiteBright: [97, 39]\n    },\n    bgColor: {\n      bgBlack: [40, 49],\n      bgRed: [41, 49],\n      bgGreen: [42, 49],\n      bgYellow: [43, 49],\n      bgBlue: [44, 49],\n      bgMagenta: [45, 49],\n      bgCyan: [46, 49],\n      bgWhite: [47, 49],\n      // Bright color\n      bgBlackBright: [100, 49],\n      bgGray: [100, 49],\n      // Alias of `bgBlackBright`\n      bgGrey: [100, 49],\n      // Alias of `bgBlackBright`\n      bgRedBright: [101, 49],\n      bgGreenBright: [102, 49],\n      bgYellowBright: [103, 49],\n      bgBlueBright: [104, 49],\n      bgMagentaBright: [105, 49],\n      bgCyanBright: [106, 49],\n      bgWhiteBright: [107, 49]\n    }\n  };\n  Object.keys(styles$1.modifier);\n  const foregroundColorNames = Object.keys(styles$1.color);\n  const backgroundColorNames = Object.keys(styles$1.bgColor);\n  [...foregroundColorNames, ...backgroundColorNames];\n  function assembleStyles() {\n    const codes = /* @__PURE__ */ new Map();\n    for (const [groupName, group] of Object.entries(styles$1)) {\n      for (const [styleName, style] of Object.entries(group)) {\n        styles$1[styleName] = {\n          open: `\\x1B[${style[0]}m`,\n          close: `\\x1B[${style[1]}m`\n        };\n        group[styleName] = styles$1[styleName];\n        codes.set(style[0], style[1]);\n      }\n      Object.defineProperty(styles$1, groupName, {\n        value: group,\n        enumerable: false\n      });\n    }\n    Object.defineProperty(styles$1, \"codes\", {\n      value: codes,\n      enumerable: false\n    });\n    styles$1.color.close = \"\\x1B[39m\";\n    styles$1.bgColor.close = \"\\x1B[49m\";\n    styles$1.color.ansi = wrapAnsi16();\n    styles$1.color.ansi256 = wrapAnsi256();\n    styles$1.color.ansi16m = wrapAnsi16m();\n    styles$1.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n    styles$1.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n    styles$1.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n    Object.defineProperties(styles$1, {\n      rgbToAnsi256: {\n        value(red, green, blue) {\n          if (red === green && green === blue) {\n            if (red < 8) {\n              return 16;\n            }\n            if (red > 248) {\n              return 231;\n            }\n            return Math.round((red - 8) / 247 * 24) + 232;\n          }\n          return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);\n        },\n        enumerable: false\n      },\n      hexToRgb: {\n        value(hex) {\n          const matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n          if (!matches) {\n            return [0, 0, 0];\n          }\n          let [colorString] = matches;\n          if (colorString.length === 3) {\n            colorString = [...colorString].map((character) => character + character).join(\"\");\n          }\n          const integer = Number.parseInt(colorString, 16);\n          return [\n            /* eslint-disable no-bitwise */\n            integer >> 16 & 255,\n            integer >> 8 & 255,\n            integer & 255\n            /* eslint-enable no-bitwise */\n          ];\n        },\n        enumerable: false\n      },\n      hexToAnsi256: {\n        value: (hex) => styles$1.rgbToAnsi256(...styles$1.hexToRgb(hex)),\n        enumerable: false\n      },\n      ansi256ToAnsi: {\n        value(code) {\n          if (code < 8) {\n            return 30 + code;\n          }\n          if (code < 16) {\n            return 90 + (code - 8);\n          }\n          let red;\n          let green;\n          let blue;\n          if (code >= 232) {\n            red = ((code - 232) * 10 + 8) / 255;\n            green = red;\n            blue = red;\n          } else {\n            code -= 16;\n            const remainder = code % 36;\n            red = Math.floor(code / 36) / 5;\n            green = Math.floor(remainder / 6) / 5;\n            blue = remainder % 6 / 5;\n          }\n          const value = Math.max(red, green, blue) * 2;\n          if (value === 0) {\n            return 30;\n          }\n          let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));\n          if (value === 2) {\n            result += 60;\n          }\n          return result;\n        },\n        enumerable: false\n      },\n      rgbToAnsi: {\n        value: (red, green, blue) => styles$1.ansi256ToAnsi(styles$1.rgbToAnsi256(red, green, blue)),\n        enumerable: false\n      },\n      hexToAnsi: {\n        value: (hex) => styles$1.ansi256ToAnsi(styles$1.hexToAnsi256(hex)),\n        enumerable: false\n      }\n    });\n    return styles$1;\n  }\n  const ansiStyles = assembleStyles();\n  const env = {\n    FORCE_COLOR: \"false\"\n  };\n  let flagForceColor;\n  function envForceColor() {\n    if (\"FORCE_COLOR\" in env) {\n      if (env.FORCE_COLOR === \"true\") {\n        return 1;\n      }\n      if (env.FORCE_COLOR === \"false\") {\n        return 0;\n      }\n      return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n    }\n  }\n  function translateLevel(level) {\n    if (level === 0) {\n      return false;\n    }\n    return {\n      level,\n      hasBasic: true,\n      has256: level >= 2,\n      has16m: level >= 3\n    };\n  }\n  function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {\n    const noFlagForceColor = envForceColor();\n    if (noFlagForceColor !== void 0) {\n      flagForceColor = noFlagForceColor;\n    }\n    const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n    if (forceColor === 0) {\n      return 0;\n    }\n    if (\"TF_BUILD\" in env && \"AGENT_NAME\" in env) {\n      return 1;\n    }\n    if (haveStream && !streamIsTTY && forceColor === void 0) {\n      return 0;\n    }\n    const min = forceColor || 0;\n    if (env.TERM === \"dumb\") {\n      return min;\n    }\n    if (\"CI\" in env) {\n      if (\"GITHUB_ACTIONS\" in env || \"GITEA_ACTIONS\" in env) {\n        return 3;\n      }\n      if ([\"TRAVIS\", \"CIRCLECI\", \"APPVEYOR\", \"GITLAB_CI\", \"BUILDKITE\", \"DRONE\"].some(\n        (sign) => sign in env\n      ) || env.CI_NAME === \"codeship\") {\n        return 1;\n      }\n      return min;\n    }\n    if (\"TEAMCITY_VERSION\" in env) {\n      return /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n    }\n    if (env.COLORTERM === \"truecolor\") {\n      return 3;\n    }\n    if (env.TERM === \"xterm-kitty\") {\n      return 3;\n    }\n    if (\"TERM_PROGRAM\" in env) {\n      const version = Number.parseInt((env.TERM_PROGRAM_VERSION || \"\").split(\".\")[0], 10);\n      switch (env.TERM_PROGRAM) {\n        case \"iTerm.app\": {\n          return version >= 3 ? 3 : 2;\n        }\n        case \"Apple_Terminal\": {\n          return 2;\n        }\n      }\n    }\n    if (/-256(color)?$/i.test(env.TERM)) {\n      return 2;\n    }\n    if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n      return 1;\n    }\n    if (\"COLORTERM\" in env) {\n      return 1;\n    }\n    return min;\n  }\n  function createSupportsColor(stream, options = {}) {\n    const level = _supportsColor(stream, {\n      streamIsTTY: stream && stream.isTTY,\n      ...options\n    });\n    return translateLevel(level);\n  }\n  const supportsColor = {\n    stdout: createSupportsColor({ isTTY: false }),\n    stderr: createSupportsColor({ isTTY: false })\n  };\n  function stringReplaceAll(string, substring, replacer) {\n    let index = string.indexOf(substring);\n    if (index === -1) {\n      return string;\n    }\n    const substringLength = substring.length;\n    let endIndex = 0;\n    let returnValue = \"\";\n    do {\n      returnValue += string.slice(endIndex, index) + substring + replacer;\n      endIndex = index + substringLength;\n      index = string.indexOf(substring, endIndex);\n    } while (index !== -1);\n    returnValue += string.slice(endIndex);\n    return returnValue;\n  }\n  function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n    let endIndex = 0;\n    let returnValue = \"\";\n    do {\n      const gotCR = string[index - 1] === \"\\r\";\n      returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? \"\\r\\n\" : \"\\n\") + postfix;\n      endIndex = index + 1;\n      index = string.indexOf(\"\\n\", endIndex);\n    } while (index !== -1);\n    returnValue += string.slice(endIndex);\n    return returnValue;\n  }\n  const { stdout: stdoutColor, stderr: stderrColor } = supportsColor;\n  const GENERATOR = Symbol(\"GENERATOR\");\n  const STYLER = Symbol(\"STYLER\");\n  const IS_EMPTY = Symbol(\"IS_EMPTY\");\n  const levelMapping = [\"ansi\", \"ansi\", \"ansi256\", \"ansi16m\"];\n  const styles = /* @__PURE__ */ Object.create(null);\n  const applyOptions = (object, options = {}) => {\n    if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n      throw new Error(\"The `level` option should be an integer from 0 to 3\");\n    }\n    const colorLevel = stdoutColor ? stdoutColor.level : 0;\n    object.level = options.level === void 0 ? colorLevel : options.level;\n  };\n  const chalkFactory = (options) => {\n    const chalk2 = (...strings) => strings.join(\" \");\n    applyOptions(chalk2, options);\n    Object.setPrototypeOf(chalk2, createChalk.prototype);\n    return chalk2;\n  };\n  function createChalk(options) {\n    return chalkFactory(options);\n  }\n  Object.setPrototypeOf(createChalk.prototype, Function.prototype);\n  for (const [styleName, style] of Object.entries(ansiStyles)) {\n    styles[styleName] = {\n      get() {\n        const builder = createBuilder(\n          this,\n          createStyler(style.open, style.close, this[STYLER]),\n          this[IS_EMPTY]\n        );\n        Object.defineProperty(this, styleName, { value: builder });\n        return builder;\n      }\n    };\n  }\n  styles.visible = {\n    get() {\n      const builder = createBuilder(this, this[STYLER], true);\n      Object.defineProperty(this, \"visible\", { value: builder });\n      return builder;\n    }\n  };\n  const getModelAnsi = (model, level, type2, ...arguments_) => {\n    if (model === \"rgb\") {\n      if (level === \"ansi16m\") {\n        return ansiStyles[type2].ansi16m(...arguments_);\n      }\n      if (level === \"ansi256\") {\n        return ansiStyles[type2].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n      }\n      return ansiStyles[type2].ansi(ansiStyles.rgbToAnsi(...arguments_));\n    }\n    if (model === \"hex\") {\n      return getModelAnsi(\"rgb\", level, type2, ...ansiStyles.hexToRgb(...arguments_));\n    }\n    return ansiStyles[type2][model](...arguments_);\n  };\n  const usedModels = [\"rgb\", \"hex\", \"ansi256\"];\n  for (const model of usedModels) {\n    styles[model] = {\n      get() {\n        const { level } = this;\n        return function(...arguments_) {\n          const styler = createStyler(\n            getModelAnsi(model, levelMapping[level], \"color\", ...arguments_),\n            ansiStyles.color.close,\n            this[STYLER]\n          );\n          return createBuilder(this, styler, this[IS_EMPTY]);\n        };\n      }\n    };\n    const bgModel = \"bg\" + model[0].toUpperCase() + model.slice(1);\n    styles[bgModel] = {\n      get() {\n        const { level } = this;\n        return function(...arguments_) {\n          const styler = createStyler(\n            getModelAnsi(model, levelMapping[level], \"bgColor\", ...arguments_),\n            ansiStyles.bgColor.close,\n            this[STYLER]\n          );\n          return createBuilder(this, styler, this[IS_EMPTY]);\n        };\n      }\n    };\n  }\n  const proto = Object.defineProperties(() => {\n  }, {\n    ...styles,\n    level: {\n      enumerable: true,\n      get() {\n        return this[GENERATOR].level;\n      },\n      set(level) {\n        this[GENERATOR].level = level;\n      }\n    }\n  });\n  const createStyler = (open, close, parent) => {\n    let openAll;\n    let closeAll;\n    if (parent === void 0) {\n      openAll = open;\n      closeAll = close;\n    } else {\n      openAll = parent.openAll + open;\n      closeAll = close + parent.closeAll;\n    }\n    return {\n      open,\n      close,\n      openAll,\n      closeAll,\n      parent\n    };\n  };\n  const createBuilder = (self2, _styler, _isEmpty) => {\n    const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? \"\" + arguments_[0] : arguments_.join(\" \"));\n    Object.setPrototypeOf(builder, proto);\n    builder[GENERATOR] = self2;\n    builder[STYLER] = _styler;\n    builder[IS_EMPTY] = _isEmpty;\n    return builder;\n  };\n  const applyStyle = (self2, string) => {\n    if (self2.level <= 0 || !string) {\n      return self2[IS_EMPTY] ? \"\" : string;\n    }\n    let styler = self2[STYLER];\n    if (styler === void 0) {\n      return string;\n    }\n    const { openAll, closeAll } = styler;\n    if (string.includes(\"\\x1B\")) {\n      while (styler !== void 0) {\n        string = stringReplaceAll(string, styler.close, styler.open);\n        styler = styler.parent;\n      }\n    }\n    const lfIndex = string.indexOf(\"\\n\");\n    if (lfIndex !== -1) {\n      string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n    }\n    return openAll + string + closeAll;\n  };\n  Object.defineProperties(createChalk.prototype, styles);\n  const chalk = createChalk();\n  createChalk({ level: stderrColor ? stderrColor.level : 0 });\n  const c = chalk;\n  const colors = {\n    blue: c.blue,\n    green: c.green,\n    red: c.red,\n    yellow: c.yellow\n  };\n  ({\n    blue: c.bgBlue,\n    green: c.bgGreen,\n    red: c.bgRed,\n    yellow: c.bgYellow\n  });\n  class Color {\n    static {\n      this.Fixed = Fixed;\n    }\n  }\n  function Fixed(n) {\n    return c.ansi256(n);\n  }\n  class Config {\n    constructor(cross_gap, label_attach, compact, underlines, multiline_arrows, color, tab_width, char_set) {\n      this.cross_gap = cross_gap;\n      this.label_attach = label_attach;\n      this.compact = compact;\n      this.underlines = underlines;\n      this.multiline_arrows = multiline_arrows;\n      this.color = color;\n      this.tab_width = tab_width;\n      this.char_set = char_set;\n    }\n    static default() {\n      return new Config(\n        true,\n        \"Middle\",\n        false,\n        true,\n        true,\n        true,\n        4,\n        \"Unicode\"\n        /* Unicode */\n      );\n    }\n    /// When label lines cross one-another, should there be a gap?\n    ///\n    /// The alternative to this is to insert crossing characters. However, these interact poorly with label colours.\n    ///\n    /// If unspecified, this defaults to [`false`].\n    with_cross_gap(cross_gap) {\n      this.cross_gap = cross_gap;\n      return this;\n    }\n    /// Where should inline labels attach to their spans?\n    ///\n    /// If unspecified, this defaults to [`LabelAttach.Middle`].\n    with_label_attach(label_attach) {\n      this.label_attach = label_attach;\n      return this;\n    }\n    /// Should the report remove gaps to minimise used space?\n    ///\n    /// If unspecified, this defaults to [`false`].\n    with_compact(compact) {\n      this.compact = compact;\n      return this;\n    }\n    /// Should underlines be used for label span where possible?\n    ///\n    /// If unspecified, this defaults to [`true`].\n    with_underlines(underlines) {\n      this.underlines = underlines;\n      return this;\n    }\n    /// Should arrows be used to point to the bounds of multi-line spans?\n    ///\n    /// If unspecified, this defaults to [`true`].\n    with_multiline_arrows(multiline_arrows) {\n      this.multiline_arrows = multiline_arrows;\n      return this;\n    }\n    /// Should colored output should be enabled?\n    ///\n    /// If unspecified, this defaults to [`true`].\n    with_color(color) {\n      this.color = color;\n      return this;\n    }\n    /// How many characters width should tab characters be?\n    ///\n    /// If unspecified, this defaults to `4`.\n    with_tab_width(tab_width) {\n      this.tab_width = tab_width;\n      return this;\n    }\n    /// What character set should be used to display dynamic elements such as boxes and arrows?\n    ///\n    /// If unspecified, this defaults to [`CharSet.Unicode`].\n    with_char_set(char_set) {\n      this.char_set = char_set;\n      return this;\n    }\n    error_color() {\n      return some(colors.red).filter(() => this.color);\n    }\n    warning_color() {\n      return some(colors.yellow).filter(() => this.color);\n    }\n    advice_color() {\n      return some(Fixed(147)).filter(() => this.color);\n    }\n    margin_color() {\n      return some(Fixed(246)).filter(() => this.color);\n    }\n    unimportant_color() {\n      return some(Fixed(249)).filter(() => this.color);\n    }\n    note_color() {\n      return some(Fixed(115)).filter(() => this.color);\n    }\n    // Find the character that should be drawn and the number of times it should be drawn for each char\n    char_width(c2, col) {\n      if (c2 === \"\t\") {\n        let tab_end = (col / this.tab_width + 1) * this.tab_width;\n        return [new Display(\" \"), tab_end - col];\n      }\n      if (c2.match(/[\\s]/))\n        return [new Display(\" \"), 1];\n      return [new Display(c2), 1];\n    }\n  }\n  var LabelAttach = /* @__PURE__ */ ((LabelAttach2) => {\n    LabelAttach2[\"Start\"] = \"Start\";\n    LabelAttach2[\"Middle\"] = \"Middle\";\n    LabelAttach2[\"End\"] = \"End\";\n    return LabelAttach2;\n  })(LabelAttach || {});\n  var CharSet = /* @__PURE__ */ ((CharSet2) => {\n    CharSet2[\"Unicode\"] = \"Unicode\";\n    CharSet2[\"Ascii\"] = \"Ascii\";\n    return CharSet2;\n  })(CharSet || {});\n  class Label {\n    /// Create a new [`Label`].\n    constructor(span) {\n      this.span = span;\n      this.msg = none();\n      this.color = none();\n      this.order = 0;\n      this.priority = 0;\n    }\n    /// Give this label a message.\n    with_message(msg) {\n      this.msg = some(msg);\n      return this;\n    }\n    /// Give this label a highlight colour.\n    with_color(color) {\n      this.color = some(color);\n      return this;\n    }\n    /// Specify the order of this label relative to other labels.\n    ///\n    /// Lower values correspond to this label having an earlier order.\n    ///\n    /// If unspecified, labels default to an order of `0`.\n    ///\n    /// When labels are displayed after a line the crate needs to decide which labels should be displayed first. By\n    /// Default, the orders labels based on where their associated line meets the text (see [`LabelAttach`]).\n    /// Additionally, multi-line labels are ordered before inline labels. You can this this function to override this\n    /// behaviour.\n    with_order(order) {\n      this.order = order;\n      return this;\n    }\n    /// Specify the priority of this label relative to other labels.\n    ///\n    /// Higher values correspond to this label having a higher priority.\n    ///\n    /// If unspecified, labels default to a priority of `0`.\n    ///\n    /// Label spans can overlap. When this happens, the crate needs to decide which labels to prioritise for various\n    /// purposes such as highlighting. By default, spans with a smaller length get a higher priority. You can this this\n    /// function to override this behaviour.\n    with_priority(priority) {\n      this.priority = priority;\n      return this;\n    }\n    last_offset() {\n      return this.span.end.saturating_sub(1).max(this.span.start);\n    }\n    static {\n      this.from = Label.new;\n    }\n    static new(obj) {\n      return new Label(Range.from(obj));\n    }\n    static is(other) {\n      return other instanceof Label;\n    }\n  }\n  var assert$1 = { exports: {} };\n  var errors = {};\n  var util = {};\n  var types = {};\n  var shams$1 = function hasSymbols2() {\n    if (typeof Symbol !== \"function\" || typeof Object.getOwnPropertySymbols !== \"function\") {\n      return false;\n    }\n    if (typeof Symbol.iterator === \"symbol\") {\n      return true;\n    }\n    var obj = {};\n    var sym = Symbol(\"test\");\n    var symObj = Object(sym);\n    if (typeof sym === \"string\") {\n      return false;\n    }\n    if (Object.prototype.toString.call(sym) !== \"[object Symbol]\") {\n      return false;\n    }\n    if (Object.prototype.toString.call(symObj) !== \"[object Symbol]\") {\n      return false;\n    }\n    var symVal = 42;\n    obj[sym] = symVal;\n    for (sym in obj) {\n      return false;\n    }\n    if (typeof Object.keys === \"function\" && Object.keys(obj).length !== 0) {\n      return false;\n    }\n    if (typeof Object.getOwnPropertyNames === \"function\" && Object.getOwnPropertyNames(obj).length !== 0) {\n      return false;\n    }\n    var syms = Object.getOwnPropertySymbols(obj);\n    if (syms.length !== 1 || syms[0] !== sym) {\n      return false;\n    }\n    if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {\n      return false;\n    }\n    if (typeof Object.getOwnPropertyDescriptor === \"function\") {\n      var descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n      if (descriptor.value !== symVal || descriptor.enumerable !== true) {\n        return false;\n      }\n    }\n    return true;\n  };\n  var hasSymbols$1 = shams$1;\n  var shams = function hasToStringTagShams() {\n    return hasSymbols$1() && !!Symbol.toStringTag;\n  };\n  var hasSymbols;\n  var hasRequiredHasSymbols;\n  function requireHasSymbols() {\n    if (hasRequiredHasSymbols)\n      return hasSymbols;\n    hasRequiredHasSymbols = 1;\n    var origSymbol = typeof Symbol !== \"undefined\" && Symbol;\n    var hasSymbolSham = shams$1;\n    hasSymbols = function hasNativeSymbols() {\n      if (typeof origSymbol !== \"function\") {\n        return false;\n      }\n      if (typeof Symbol !== \"function\") {\n        return false;\n      }\n      if (typeof origSymbol(\"foo\") !== \"symbol\") {\n        return false;\n      }\n      if (typeof Symbol(\"bar\") !== \"symbol\") {\n        return false;\n      }\n      return hasSymbolSham();\n    };\n    return hasSymbols;\n  }\n  var implementation$3;\n  var hasRequiredImplementation$3;\n  function requireImplementation$3() {\n    if (hasRequiredImplementation$3)\n      return implementation$3;\n    hasRequiredImplementation$3 = 1;\n    var ERROR_MESSAGE = \"Function.prototype.bind called on incompatible \";\n    var slice = Array.prototype.slice;\n    var toStr2 = Object.prototype.toString;\n    var funcType = \"[object Function]\";\n    implementation$3 = function bind(that) {\n      var target = this;\n      if (typeof target !== \"function\" || toStr2.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n      }\n      var args = slice.call(arguments, 1);\n      var bound;\n      var binder = function() {\n        if (this instanceof bound) {\n          var result = target.apply(\n            this,\n            args.concat(slice.call(arguments))\n          );\n          if (Object(result) === result) {\n            return result;\n          }\n          return this;\n        } else {\n          return target.apply(\n            that,\n            args.concat(slice.call(arguments))\n          );\n        }\n      };\n      var boundLength = Math.max(0, target.length - args.length);\n      var boundArgs = [];\n      for (var i = 0; i < boundLength; i++) {\n        boundArgs.push(\"$\" + i);\n      }\n      bound = Function(\"binder\", \"return function (\" + boundArgs.join(\",\") + \"){ return binder.apply(this,arguments); }\")(binder);\n      if (target.prototype) {\n        var Empty = function Empty2() {\n        };\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n      }\n      return bound;\n    };\n    return implementation$3;\n  }\n  var functionBind;\n  var hasRequiredFunctionBind;\n  function requireFunctionBind() {\n    if (hasRequiredFunctionBind)\n      return functionBind;\n    hasRequiredFunctionBind = 1;\n    var implementation2 = requireImplementation$3();\n    functionBind = Function.prototype.bind || implementation2;\n    return functionBind;\n  }\n  var src;\n  var hasRequiredSrc;\n  function requireSrc() {\n    if (hasRequiredSrc)\n      return src;\n    hasRequiredSrc = 1;\n    var bind = requireFunctionBind();\n    src = bind.call(Function.call, Object.prototype.hasOwnProperty);\n    return src;\n  }\n  var getIntrinsic;\n  var hasRequiredGetIntrinsic;\n  function requireGetIntrinsic() {\n    if (hasRequiredGetIntrinsic)\n      return getIntrinsic;\n    hasRequiredGetIntrinsic = 1;\n    var undefined$1;\n    var $SyntaxError = SyntaxError;\n    var $Function = Function;\n    var $TypeError = TypeError;\n    var getEvalledConstructor = function(expressionSyntax) {\n      try {\n        return $Function('\"use strict\"; return (' + expressionSyntax + \").constructor;\")();\n      } catch (e) {\n      }\n    };\n    var $gOPD2 = Object.getOwnPropertyDescriptor;\n    if ($gOPD2) {\n      try {\n        $gOPD2({}, \"\");\n      } catch (e) {\n        $gOPD2 = null;\n      }\n    }\n    var throwTypeError = function() {\n      throw new $TypeError();\n    };\n    var ThrowTypeError = $gOPD2 ? function() {\n      try {\n        arguments.callee;\n        return throwTypeError;\n      } catch (calleeThrows) {\n        try {\n          return $gOPD2(arguments, \"callee\").get;\n        } catch (gOPDthrows) {\n          return throwTypeError;\n        }\n      }\n    }() : throwTypeError;\n    var hasSymbols2 = requireHasSymbols()();\n    var getProto2 = Object.getPrototypeOf || function(x) {\n      return x.__proto__;\n    };\n    var needsEval = {};\n    var TypedArray = typeof Uint8Array === \"undefined\" ? undefined$1 : getProto2(Uint8Array);\n    var INTRINSICS = {\n      \"%AggregateError%\": typeof AggregateError === \"undefined\" ? undefined$1 : AggregateError,\n      \"%Array%\": Array,\n      \"%ArrayBuffer%\": typeof ArrayBuffer === \"undefined\" ? undefined$1 : ArrayBuffer,\n      \"%ArrayIteratorPrototype%\": hasSymbols2 ? getProto2([][Symbol.iterator]()) : undefined$1,\n      \"%AsyncFromSyncIteratorPrototype%\": undefined$1,\n      \"%AsyncFunction%\": needsEval,\n      \"%AsyncGenerator%\": needsEval,\n      \"%AsyncGeneratorFunction%\": needsEval,\n      \"%AsyncIteratorPrototype%\": needsEval,\n      \"%Atomics%\": typeof Atomics === \"undefined\" ? undefined$1 : Atomics,\n      \"%BigInt%\": typeof BigInt === \"undefined\" ? undefined$1 : BigInt,\n      \"%BigInt64Array%\": typeof BigInt64Array === \"undefined\" ? undefined$1 : BigInt64Array,\n      \"%BigUint64Array%\": typeof BigUint64Array === \"undefined\" ? undefined$1 : BigUint64Array,\n      \"%Boolean%\": Boolean,\n      \"%DataView%\": typeof DataView === \"undefined\" ? undefined$1 : DataView,\n      \"%Date%\": Date,\n      \"%decodeURI%\": decodeURI,\n      \"%decodeURIComponent%\": decodeURIComponent,\n      \"%encodeURI%\": encodeURI,\n      \"%encodeURIComponent%\": encodeURIComponent,\n      \"%Error%\": Error,\n      \"%eval%\": eval,\n      // eslint-disable-line no-eval\n      \"%EvalError%\": EvalError,\n      \"%Float32Array%\": typeof Float32Array === \"undefined\" ? undefined$1 : Float32Array,\n      \"%Float64Array%\": typeof Float64Array === \"undefined\" ? undefined$1 : Float64Array,\n      \"%FinalizationRegistry%\": typeof FinalizationRegistry === \"undefined\" ? undefined$1 : FinalizationRegistry,\n      \"%Function%\": $Function,\n      \"%GeneratorFunction%\": needsEval,\n      \"%Int8Array%\": typeof Int8Array === \"undefined\" ? undefined$1 : Int8Array,\n      \"%Int16Array%\": typeof Int16Array === \"undefined\" ? undefined$1 : Int16Array,\n      \"%Int32Array%\": typeof Int32Array === \"undefined\" ? undefined$1 : Int32Array,\n      \"%isFinite%\": isFinite,\n      \"%isNaN%\": isNaN,\n      \"%IteratorPrototype%\": hasSymbols2 ? getProto2(getProto2([][Symbol.iterator]())) : undefined$1,\n      \"%JSON%\": typeof JSON === \"object\" ? JSON : undefined$1,\n      \"%Map%\": typeof Map === \"undefined\" ? undefined$1 : Map,\n      \"%MapIteratorPrototype%\": typeof Map === \"undefined\" || !hasSymbols2 ? undefined$1 : getProto2((/* @__PURE__ */ new Map())[Symbol.iterator]()),\n      \"%Math%\": Math,\n      \"%Number%\": Number,\n      \"%Object%\": Object,\n      \"%parseFloat%\": parseFloat,\n      \"%parseInt%\": parseInt,\n      \"%Promise%\": typeof Promise === \"undefined\" ? undefined$1 : Promise,\n      \"%Proxy%\": typeof Proxy === \"undefined\" ? undefined$1 : Proxy,\n      \"%RangeError%\": RangeError,\n      \"%ReferenceError%\": ReferenceError,\n      \"%Reflect%\": typeof Reflect === \"undefined\" ? undefined$1 : Reflect,\n      \"%RegExp%\": RegExp,\n      \"%Set%\": typeof Set === \"undefined\" ? undefined$1 : Set,\n      \"%SetIteratorPrototype%\": typeof Set === \"undefined\" || !hasSymbols2 ? undefined$1 : getProto2((/* @__PURE__ */ new Set())[Symbol.iterator]()),\n      \"%SharedArrayBuffer%\": typeof SharedArrayBuffer === \"undefined\" ? undefined$1 : SharedArrayBuffer,\n      \"%String%\": String,\n      \"%StringIteratorPrototype%\": hasSymbols2 ? getProto2(\"\"[Symbol.iterator]()) : undefined$1,\n      \"%Symbol%\": hasSymbols2 ? Symbol : undefined$1,\n      \"%SyntaxError%\": $SyntaxError,\n      \"%ThrowTypeError%\": ThrowTypeError,\n      \"%TypedArray%\": TypedArray,\n      \"%TypeError%\": $TypeError,\n      \"%Uint8Array%\": typeof Uint8Array === \"undefined\" ? undefined$1 : Uint8Array,\n      \"%Uint8ClampedArray%\": typeof Uint8ClampedArray === \"undefined\" ? undefined$1 : Uint8ClampedArray,\n      \"%Uint16Array%\": typeof Uint16Array === \"undefined\" ? undefined$1 : Uint16Array,\n      \"%Uint32Array%\": typeof Uint32Array === \"undefined\" ? undefined$1 : Uint32Array,\n      \"%URIError%\": URIError,\n      \"%WeakMap%\": typeof WeakMap === \"undefined\" ? undefined$1 : WeakMap,\n      \"%WeakRef%\": typeof WeakRef === \"undefined\" ? undefined$1 : WeakRef,\n      \"%WeakSet%\": typeof WeakSet === \"undefined\" ? undefined$1 : WeakSet\n    };\n    try {\n      null.error;\n    } catch (e) {\n      var errorProto = getProto2(getProto2(e));\n      INTRINSICS[\"%Error.prototype%\"] = errorProto;\n    }\n    var doEval = function doEval2(name) {\n      var value;\n      if (name === \"%AsyncFunction%\") {\n        value = getEvalledConstructor(\"async function () {}\");\n      } else if (name === \"%GeneratorFunction%\") {\n        value = getEvalledConstructor(\"function* () {}\");\n      } else if (name === \"%AsyncGeneratorFunction%\") {\n        value = getEvalledConstructor(\"async function* () {}\");\n      } else if (name === \"%AsyncGenerator%\") {\n        var fn = doEval2(\"%AsyncGeneratorFunction%\");\n        if (fn) {\n          value = fn.prototype;\n        }\n      } else if (name === \"%AsyncIteratorPrototype%\") {\n        var gen = doEval2(\"%AsyncGenerator%\");\n        if (gen) {\n          value = getProto2(gen.prototype);\n        }\n      }\n      INTRINSICS[name] = value;\n      return value;\n    };\n    var LEGACY_ALIASES = {\n      \"%ArrayBufferPrototype%\": [\"ArrayBuffer\", \"prototype\"],\n      \"%ArrayPrototype%\": [\"Array\", \"prototype\"],\n      \"%ArrayProto_entries%\": [\"Array\", \"prototype\", \"entries\"],\n      \"%ArrayProto_forEach%\": [\"Array\", \"prototype\", \"forEach\"],\n      \"%ArrayProto_keys%\": [\"Array\", \"prototype\", \"keys\"],\n      \"%ArrayProto_values%\": [\"Array\", \"prototype\", \"values\"],\n      \"%AsyncFunctionPrototype%\": [\"AsyncFunction\", \"prototype\"],\n      \"%AsyncGenerator%\": [\"AsyncGeneratorFunction\", \"prototype\"],\n      \"%AsyncGeneratorPrototype%\": [\"AsyncGeneratorFunction\", \"prototype\", \"prototype\"],\n      \"%BooleanPrototype%\": [\"Boolean\", \"prototype\"],\n      \"%DataViewPrototype%\": [\"DataView\", \"prototype\"],\n      \"%DatePrototype%\": [\"Date\", \"prototype\"],\n      \"%ErrorPrototype%\": [\"Error\", \"prototype\"],\n      \"%EvalErrorPrototype%\": [\"EvalError\", \"prototype\"],\n      \"%Float32ArrayPrototype%\": [\"Float32Array\", \"prototype\"],\n      \"%Float64ArrayPrototype%\": [\"Float64Array\", \"prototype\"],\n      \"%FunctionPrototype%\": [\"Function\", \"prototype\"],\n      \"%Generator%\": [\"GeneratorFunction\", \"prototype\"],\n      \"%GeneratorPrototype%\": [\"GeneratorFunction\", \"prototype\", \"prototype\"],\n      \"%Int8ArrayPrototype%\": [\"Int8Array\", \"prototype\"],\n      \"%Int16ArrayPrototype%\": [\"Int16Array\", \"prototype\"],\n      \"%Int32ArrayPrototype%\": [\"Int32Array\", \"prototype\"],\n      \"%JSONParse%\": [\"JSON\", \"parse\"],\n      \"%JSONStringify%\": [\"JSON\", \"stringify\"],\n      \"%MapPrototype%\": [\"Map\", \"prototype\"],\n      \"%NumberPrototype%\": [\"Number\", \"prototype\"],\n      \"%ObjectPrototype%\": [\"Object\", \"prototype\"],\n      \"%ObjProto_toString%\": [\"Object\", \"prototype\", \"toString\"],\n      \"%ObjProto_valueOf%\": [\"Object\", \"prototype\", \"valueOf\"],\n      \"%PromisePrototype%\": [\"Promise\", \"prototype\"],\n      \"%PromiseProto_then%\": [\"Promise\", \"prototype\", \"then\"],\n      \"%Promise_all%\": [\"Promise\", \"all\"],\n      \"%Promise_reject%\": [\"Promise\", \"reject\"],\n      \"%Promise_resolve%\": [\"Promise\", \"resolve\"],\n      \"%RangeErrorPrototype%\": [\"RangeError\", \"prototype\"],\n      \"%ReferenceErrorPrototype%\": [\"ReferenceError\", \"prototype\"],\n      \"%RegExpPrototype%\": [\"RegExp\", \"prototype\"],\n      \"%SetPrototype%\": [\"Set\", \"prototype\"],\n      \"%SharedArrayBufferPrototype%\": [\"SharedArrayBuffer\", \"prototype\"],\n      \"%StringPrototype%\": [\"String\", \"prototype\"],\n      \"%SymbolPrototype%\": [\"Symbol\", \"prototype\"],\n      \"%SyntaxErrorPrototype%\": [\"SyntaxError\", \"prototype\"],\n      \"%TypedArrayPrototype%\": [\"TypedArray\", \"prototype\"],\n      \"%TypeErrorPrototype%\": [\"TypeError\", \"prototype\"],\n      \"%Uint8ArrayPrototype%\": [\"Uint8Array\", \"prototype\"],\n      \"%Uint8ClampedArrayPrototype%\": [\"Uint8ClampedArray\", \"prototype\"],\n      \"%Uint16ArrayPrototype%\": [\"Uint16Array\", \"prototype\"],\n      \"%Uint32ArrayPrototype%\": [\"Uint32Array\", \"prototype\"],\n      \"%URIErrorPrototype%\": [\"URIError\", \"prototype\"],\n      \"%WeakMapPrototype%\": [\"WeakMap\", \"prototype\"],\n      \"%WeakSetPrototype%\": [\"WeakSet\", \"prototype\"]\n    };\n    var bind = requireFunctionBind();\n    var hasOwn = requireSrc();\n    var $concat = bind.call(Function.call, Array.prototype.concat);\n    var $spliceApply = bind.call(Function.apply, Array.prototype.splice);\n    var $replace = bind.call(Function.call, String.prototype.replace);\n    var $strSlice = bind.call(Function.call, String.prototype.slice);\n    var $exec = bind.call(Function.call, RegExp.prototype.exec);\n    var rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\n    var reEscapeChar = /\\\\(\\\\)?/g;\n    var stringToPath = function stringToPath2(string) {\n      var first = $strSlice(string, 0, 1);\n      var last = $strSlice(string, -1);\n      if (first === \"%\" && last !== \"%\") {\n        throw new $SyntaxError(\"invalid intrinsic syntax, expected closing `%`\");\n      } else if (last === \"%\" && first !== \"%\") {\n        throw new $SyntaxError(\"invalid intrinsic syntax, expected opening `%`\");\n      }\n      var result = [];\n      $replace(string, rePropName, function(match2, number, quote, subString) {\n        result[result.length] = quote ? $replace(subString, reEscapeChar, \"$1\") : number || match2;\n      });\n      return result;\n    };\n    var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {\n      var intrinsicName = name;\n      var alias;\n      if (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n        alias = LEGACY_ALIASES[intrinsicName];\n        intrinsicName = \"%\" + alias[0] + \"%\";\n      }\n      if (hasOwn(INTRINSICS, intrinsicName)) {\n        var value = INTRINSICS[intrinsicName];\n        if (value === needsEval) {\n          value = doEval(intrinsicName);\n        }\n        if (typeof value === \"undefined\" && !allowMissing) {\n          throw new $TypeError(\"intrinsic \" + name + \" exists, but is not available. Please file an issue!\");\n        }\n        return {\n          alias,\n          name: intrinsicName,\n          value\n        };\n      }\n      throw new $SyntaxError(\"intrinsic \" + name + \" does not exist!\");\n    };\n    getIntrinsic = function GetIntrinsic2(name, allowMissing) {\n      if (typeof name !== \"string\" || name.length === 0) {\n        throw new $TypeError(\"intrinsic name must be a non-empty string\");\n      }\n      if (arguments.length > 1 && typeof allowMissing !== \"boolean\") {\n        throw new $TypeError('\"allowMissing\" argument must be a boolean');\n      }\n      if ($exec(/^%?[^%]*%?$/, name) === null) {\n        throw new $SyntaxError(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");\n      }\n      var parts = stringToPath(name);\n      var intrinsicBaseName = parts.length > 0 ? parts[0] : \"\";\n      var intrinsic = getBaseIntrinsic(\"%\" + intrinsicBaseName + \"%\", allowMissing);\n      var intrinsicRealName = intrinsic.name;\n      var value = intrinsic.value;\n      var skipFurtherCaching = false;\n      var alias = intrinsic.alias;\n      if (alias) {\n        intrinsicBaseName = alias[0];\n        $spliceApply(parts, $concat([0, 1], alias));\n      }\n      for (var i = 1, isOwn = true; i < parts.length; i += 1) {\n        var part = parts[i];\n        var first = $strSlice(part, 0, 1);\n        var last = $strSlice(part, -1);\n        if ((first === '\"' || first === \"'\" || first === \"`\" || (last === '\"' || last === \"'\" || last === \"`\")) && first !== last) {\n          throw new $SyntaxError(\"property names with quotes must have matching quotes\");\n        }\n        if (part === \"constructor\" || !isOwn) {\n          skipFurtherCaching = true;\n        }\n        intrinsicBaseName += \".\" + part;\n        intrinsicRealName = \"%\" + intrinsicBaseName + \"%\";\n        if (hasOwn(INTRINSICS, intrinsicRealName)) {\n          value = INTRINSICS[intrinsicRealName];\n        } else if (value != null) {\n          if (!(part in value)) {\n            if (!allowMissing) {\n              throw new $TypeError(\"base intrinsic for \" + name + \" exists, but the property is not available.\");\n            }\n            return void 0;\n          }\n          if ($gOPD2 && i + 1 >= parts.length) {\n            var desc = $gOPD2(value, part);\n            isOwn = !!desc;\n            if (isOwn && \"get\" in desc && !(\"originalValue\" in desc.get)) {\n              value = desc.get;\n            } else {\n              value = value[part];\n            }\n          } else {\n            isOwn = hasOwn(value, part);\n            value = value[part];\n          }\n          if (isOwn && !skipFurtherCaching) {\n            INTRINSICS[intrinsicRealName] = value;\n          }\n        }\n      }\n      return value;\n    };\n    return getIntrinsic;\n  }\n  var callBind$1 = { exports: {} };\n  var hasRequiredCallBind;\n  function requireCallBind() {\n    if (hasRequiredCallBind)\n      return callBind$1.exports;\n    hasRequiredCallBind = 1;\n    (function(module2) {\n      var bind = requireFunctionBind();\n      var GetIntrinsic2 = requireGetIntrinsic();\n      var $apply = GetIntrinsic2(\"%Function.prototype.apply%\");\n      var $call = GetIntrinsic2(\"%Function.prototype.call%\");\n      var $reflectApply = GetIntrinsic2(\"%Reflect.apply%\", true) || bind.call($call, $apply);\n      var $gOPD2 = GetIntrinsic2(\"%Object.getOwnPropertyDescriptor%\", true);\n      var $defineProperty = GetIntrinsic2(\"%Object.defineProperty%\", true);\n      var $max = GetIntrinsic2(\"%Math.max%\");\n      if ($defineProperty) {\n        try {\n          $defineProperty({}, \"a\", { value: 1 });\n        } catch (e) {\n          $defineProperty = null;\n        }\n      }\n      module2.exports = function callBind2(originalFunction) {\n        var func = $reflectApply(bind, $call, arguments);\n        if ($gOPD2 && $defineProperty) {\n          var desc = $gOPD2(func, \"length\");\n          if (desc.configurable) {\n            $defineProperty(\n              func,\n              \"length\",\n              { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n            );\n          }\n        }\n        return func;\n      };\n      var applyBind = function applyBind2() {\n        return $reflectApply(bind, $apply, arguments);\n      };\n      if ($defineProperty) {\n        $defineProperty(module2.exports, \"apply\", { value: applyBind });\n      } else {\n        module2.exports.apply = applyBind;\n      }\n    })(callBind$1);\n    return callBind$1.exports;\n  }\n  var GetIntrinsic$1 = requireGetIntrinsic();\n  var callBind = requireCallBind();\n  var $indexOf$1 = callBind(GetIntrinsic$1(\"String.prototype.indexOf\"));\n  var callBound$3 = function callBoundIntrinsic(name, allowMissing) {\n    var intrinsic = GetIntrinsic$1(name, !!allowMissing);\n    if (typeof intrinsic === \"function\" && $indexOf$1(name, \".prototype.\") > -1) {\n      return callBind(intrinsic);\n    }\n    return intrinsic;\n  };\n  var hasToStringTag$4 = shams();\n  var callBound$2 = callBound$3;\n  var $toString$2 = callBound$2(\"Object.prototype.toString\");\n  var isStandardArguments = function isArguments2(value) {\n    if (hasToStringTag$4 && value && typeof value === \"object\" && Symbol.toStringTag in value) {\n      return false;\n    }\n    return $toString$2(value) === \"[object Arguments]\";\n  };\n  var isLegacyArguments = function isArguments2(value) {\n    if (isStandardArguments(value)) {\n      return true;\n    }\n    return value !== null && typeof value === \"object\" && typeof value.length === \"number\" && value.length >= 0 && $toString$2(value) !== \"[object Array]\" && $toString$2(value.callee) === \"[object Function]\";\n  };\n  var supportsStandardArguments = function() {\n    return isStandardArguments(arguments);\n  }();\n  isStandardArguments.isLegacyArguments = isLegacyArguments;\n  var isArguments$1 = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n  var toStr$2 = Object.prototype.toString;\n  var fnToStr$1 = Function.prototype.toString;\n  var isFnRegex = /^\\s*(?:function)?\\*/;\n  var hasToStringTag$3 = shams();\n  var getProto = Object.getPrototypeOf;\n  var getGeneratorFunc = function() {\n    if (!hasToStringTag$3) {\n      return false;\n    }\n    try {\n      return Function(\"return function*() {}\")();\n    } catch (e) {\n    }\n  };\n  var GeneratorFunction;\n  var isGeneratorFunction = function isGeneratorFunction2(fn) {\n    if (typeof fn !== \"function\") {\n      return false;\n    }\n    if (isFnRegex.test(fnToStr$1.call(fn))) {\n      return true;\n    }\n    if (!hasToStringTag$3) {\n      var str = toStr$2.call(fn);\n      return str === \"[object GeneratorFunction]\";\n    }\n    if (!getProto) {\n      return false;\n    }\n    if (typeof GeneratorFunction === \"undefined\") {\n      var generatorFunc = getGeneratorFunc();\n      GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n    }\n    return getProto(fn) === GeneratorFunction;\n  };\n  var fnToStr = Function.prototype.toString;\n  var reflectApply = typeof Reflect === \"object\" && Reflect !== null && Reflect.apply;\n  var badArrayLike;\n  var isCallableMarker;\n  if (typeof reflectApply === \"function\" && typeof Object.defineProperty === \"function\") {\n    try {\n      badArrayLike = Object.defineProperty({}, \"length\", {\n        get: function() {\n          throw isCallableMarker;\n        }\n      });\n      isCallableMarker = {};\n      reflectApply(function() {\n        throw 42;\n      }, null, badArrayLike);\n    } catch (_) {\n      if (_ !== isCallableMarker) {\n        reflectApply = null;\n      }\n    }\n  } else {\n    reflectApply = null;\n  }\n  var constructorRegex = /^\\s*class\\b/;\n  var isES6ClassFn = function isES6ClassFunction(value) {\n    try {\n      var fnStr = fnToStr.call(value);\n      return constructorRegex.test(fnStr);\n    } catch (e) {\n      return false;\n    }\n  };\n  var tryFunctionObject = function tryFunctionToStr(value) {\n    try {\n      if (isES6ClassFn(value)) {\n        return false;\n      }\n      fnToStr.call(value);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  };\n  var toStr$1 = Object.prototype.toString;\n  var objectClass = \"[object Object]\";\n  var fnClass = \"[object Function]\";\n  var genClass = \"[object GeneratorFunction]\";\n  var ddaClass = \"[object HTMLAllCollection]\";\n  var ddaClass2 = \"[object HTML document.all class]\";\n  var ddaClass3 = \"[object HTMLCollection]\";\n  var hasToStringTag$2 = typeof Symbol === \"function\" && !!Symbol.toStringTag;\n  var isIE68 = !(0 in [,]);\n  var isDDA = function isDocumentDotAll() {\n    return false;\n  };\n  if (typeof document === \"object\") {\n    var all = document.all;\n    if (toStr$1.call(all) === toStr$1.call(document.all)) {\n      isDDA = function isDocumentDotAll(value) {\n        if ((isIE68 || !value) && (typeof value === \"undefined\" || typeof value === \"object\")) {\n          try {\n            var str = toStr$1.call(value);\n            return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value(\"\") == null;\n          } catch (e) {\n          }\n        }\n        return false;\n      };\n    }\n  }\n  var isCallable$1 = reflectApply ? function isCallable2(value) {\n    if (isDDA(value)) {\n      return true;\n    }\n    if (!value) {\n      return false;\n    }\n    if (typeof value !== \"function\" && typeof value !== \"object\") {\n      return false;\n    }\n    try {\n      reflectApply(value, null, badArrayLike);\n    } catch (e) {\n      if (e !== isCallableMarker) {\n        return false;\n      }\n    }\n    return !isES6ClassFn(value) && tryFunctionObject(value);\n  } : function isCallable2(value) {\n    if (isDDA(value)) {\n      return true;\n    }\n    if (!value) {\n      return false;\n    }\n    if (typeof value !== \"function\" && typeof value !== \"object\") {\n      return false;\n    }\n    if (hasToStringTag$2) {\n      return tryFunctionObject(value);\n    }\n    if (isES6ClassFn(value)) {\n      return false;\n    }\n    var strClass = toStr$1.call(value);\n    if (strClass !== fnClass && strClass !== genClass && !/^\\[object HTML/.test(strClass)) {\n      return false;\n    }\n    return tryFunctionObject(value);\n  };\n  var isCallable = isCallable$1;\n  var toStr = Object.prototype.toString;\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n  var forEachArray = function forEachArray2(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n      if (hasOwnProperty.call(array, i)) {\n        if (receiver == null) {\n          iterator(array[i], i, array);\n        } else {\n          iterator.call(receiver, array[i], i, array);\n        }\n      }\n    }\n  };\n  var forEachString = function forEachString2(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n      if (receiver == null) {\n        iterator(string.charAt(i), i, string);\n      } else {\n        iterator.call(receiver, string.charAt(i), i, string);\n      }\n    }\n  };\n  var forEachObject = function forEachObject2(object, iterator, receiver) {\n    for (var k in object) {\n      if (hasOwnProperty.call(object, k)) {\n        if (receiver == null) {\n          iterator(object[k], k, object);\n        } else {\n          iterator.call(receiver, object[k], k, object);\n        }\n      }\n    }\n  };\n  var forEach$2 = function forEach2(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n      throw new TypeError(\"iterator must be a function\");\n    }\n    var receiver;\n    if (arguments.length >= 3) {\n      receiver = thisArg;\n    }\n    if (toStr.call(list) === \"[object Array]\") {\n      forEachArray(list, iterator, receiver);\n    } else if (typeof list === \"string\") {\n      forEachString(list, iterator, receiver);\n    } else {\n      forEachObject(list, iterator, receiver);\n    }\n  };\n  var forEach_1 = forEach$2;\n  var possibleNames = [\n    \"BigInt64Array\",\n    \"BigUint64Array\",\n    \"Float32Array\",\n    \"Float64Array\",\n    \"Int16Array\",\n    \"Int32Array\",\n    \"Int8Array\",\n    \"Uint16Array\",\n    \"Uint32Array\",\n    \"Uint8Array\",\n    \"Uint8ClampedArray\"\n  ];\n  var g$2 = typeof globalThis === \"undefined\" ? commonjsGlobal : globalThis;\n  var availableTypedArrays$2 = function availableTypedArrays2() {\n    var out = [];\n    for (var i = 0; i < possibleNames.length; i++) {\n      if (typeof g$2[possibleNames[i]] === \"function\") {\n        out[out.length] = possibleNames[i];\n      }\n    }\n    return out;\n  };\n  var GetIntrinsic = requireGetIntrinsic();\n  var $gOPD = GetIntrinsic(\"%Object.getOwnPropertyDescriptor%\", true);\n  if ($gOPD) {\n    try {\n      $gOPD([], \"length\");\n    } catch (e) {\n      $gOPD = null;\n    }\n  }\n  var gopd = $gOPD;\n  var forEach$1 = forEach_1;\n  var availableTypedArrays$1 = availableTypedArrays$2;\n  var callBound$1 = callBound$3;\n  var $toString$1 = callBound$1(\"Object.prototype.toString\");\n  var hasToStringTag$1 = shams();\n  var gOPD$1 = gopd;\n  var g$1 = typeof globalThis === \"undefined\" ? commonjsGlobal : globalThis;\n  var typedArrays$1 = availableTypedArrays$1();\n  var $indexOf = callBound$1(\"Array.prototype.indexOf\", true) || function indexOf(array, value) {\n    for (var i = 0; i < array.length; i += 1) {\n      if (array[i] === value) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var $slice$1 = callBound$1(\"String.prototype.slice\");\n  var toStrTags$1 = {};\n  var getPrototypeOf$1 = Object.getPrototypeOf;\n  if (hasToStringTag$1 && gOPD$1 && getPrototypeOf$1) {\n    forEach$1(typedArrays$1, function(typedArray) {\n      var arr = new g$1[typedArray]();\n      if (Symbol.toStringTag in arr) {\n        var proto2 = getPrototypeOf$1(arr);\n        var descriptor = gOPD$1(proto2, Symbol.toStringTag);\n        if (!descriptor) {\n          var superProto = getPrototypeOf$1(proto2);\n          descriptor = gOPD$1(superProto, Symbol.toStringTag);\n        }\n        toStrTags$1[typedArray] = descriptor.get;\n      }\n    });\n  }\n  var tryTypedArrays$1 = function tryAllTypedArrays(value) {\n    var anyTrue = false;\n    forEach$1(toStrTags$1, function(getter, typedArray) {\n      if (!anyTrue) {\n        try {\n          anyTrue = getter.call(value) === typedArray;\n        } catch (e) {\n        }\n      }\n    });\n    return anyTrue;\n  };\n  var isTypedArray$1 = function isTypedArray2(value) {\n    if (!value || typeof value !== \"object\") {\n      return false;\n    }\n    if (!hasToStringTag$1 || !(Symbol.toStringTag in value)) {\n      var tag = $slice$1($toString$1(value), 8, -1);\n      return $indexOf(typedArrays$1, tag) > -1;\n    }\n    if (!gOPD$1) {\n      return false;\n    }\n    return tryTypedArrays$1(value);\n  };\n  var forEach = forEach_1;\n  var availableTypedArrays = availableTypedArrays$2;\n  var callBound = callBound$3;\n  var gOPD = gopd;\n  var $toString = callBound(\"Object.prototype.toString\");\n  var hasToStringTag = shams();\n  var g = typeof globalThis === \"undefined\" ? commonjsGlobal : globalThis;\n  var typedArrays = availableTypedArrays();\n  var $slice = callBound(\"String.prototype.slice\");\n  var toStrTags = {};\n  var getPrototypeOf = Object.getPrototypeOf;\n  if (hasToStringTag && gOPD && getPrototypeOf) {\n    forEach(typedArrays, function(typedArray) {\n      if (typeof g[typedArray] === \"function\") {\n        var arr = new g[typedArray]();\n        if (Symbol.toStringTag in arr) {\n          var proto2 = getPrototypeOf(arr);\n          var descriptor = gOPD(proto2, Symbol.toStringTag);\n          if (!descriptor) {\n            var superProto = getPrototypeOf(proto2);\n            descriptor = gOPD(superProto, Symbol.toStringTag);\n          }\n          toStrTags[typedArray] = descriptor.get;\n        }\n      }\n    });\n  }\n  var tryTypedArrays = function tryAllTypedArrays(value) {\n    var foundName = false;\n    forEach(toStrTags, function(getter, typedArray) {\n      if (!foundName) {\n        try {\n          var name = getter.call(value);\n          if (name === typedArray) {\n            foundName = name;\n          }\n        } catch (e) {\n        }\n      }\n    });\n    return foundName;\n  };\n  var isTypedArray = isTypedArray$1;\n  var whichTypedArray = function whichTypedArray2(value) {\n    if (!isTypedArray(value)) {\n      return false;\n    }\n    if (!hasToStringTag || !(Symbol.toStringTag in value)) {\n      return $slice($toString(value), 8, -1);\n    }\n    return tryTypedArrays(value);\n  };\n  (function(exports3) {\n    var isArgumentsObject = isArguments$1;\n    var isGeneratorFunction$1 = isGeneratorFunction;\n    var whichTypedArray$1 = whichTypedArray;\n    var isTypedArray2 = isTypedArray$1;\n    function uncurryThis(f) {\n      return f.call.bind(f);\n    }\n    var BigIntSupported = typeof BigInt !== \"undefined\";\n    var SymbolSupported = typeof Symbol !== \"undefined\";\n    var ObjectToString = uncurryThis(Object.prototype.toString);\n    var numberValue = uncurryThis(Number.prototype.valueOf);\n    var stringValue = uncurryThis(String.prototype.valueOf);\n    var booleanValue = uncurryThis(Boolean.prototype.valueOf);\n    if (BigIntSupported) {\n      var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n    }\n    if (SymbolSupported) {\n      var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n    }\n    function checkBoxedPrimitive(value, prototypeValueOf) {\n      if (typeof value !== \"object\") {\n        return false;\n      }\n      try {\n        prototypeValueOf(value);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n    exports3.isArgumentsObject = isArgumentsObject;\n    exports3.isGeneratorFunction = isGeneratorFunction$1;\n    exports3.isTypedArray = isTypedArray2;\n    function isPromise(input) {\n      return typeof Promise !== \"undefined\" && input instanceof Promise || input !== null && typeof input === \"object\" && typeof input.then === \"function\" && typeof input.catch === \"function\";\n    }\n    exports3.isPromise = isPromise;\n    function isArrayBufferView(value) {\n      if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n        return ArrayBuffer.isView(value);\n      }\n      return isTypedArray2(value) || isDataView(value);\n    }\n    exports3.isArrayBufferView = isArrayBufferView;\n    function isUint8Array(value) {\n      return whichTypedArray$1(value) === \"Uint8Array\";\n    }\n    exports3.isUint8Array = isUint8Array;\n    function isUint8ClampedArray(value) {\n      return whichTypedArray$1(value) === \"Uint8ClampedArray\";\n    }\n    exports3.isUint8ClampedArray = isUint8ClampedArray;\n    function isUint16Array(value) {\n      return whichTypedArray$1(value) === \"Uint16Array\";\n    }\n    exports3.isUint16Array = isUint16Array;\n    function isUint32Array(value) {\n      return whichTypedArray$1(value) === \"Uint32Array\";\n    }\n    exports3.isUint32Array = isUint32Array;\n    function isInt8Array(value) {\n      return whichTypedArray$1(value) === \"Int8Array\";\n    }\n    exports3.isInt8Array = isInt8Array;\n    function isInt16Array(value) {\n      return whichTypedArray$1(value) === \"Int16Array\";\n    }\n    exports3.isInt16Array = isInt16Array;\n    function isInt32Array(value) {\n      return whichTypedArray$1(value) === \"Int32Array\";\n    }\n    exports3.isInt32Array = isInt32Array;\n    function isFloat32Array(value) {\n      return whichTypedArray$1(value) === \"Float32Array\";\n    }\n    exports3.isFloat32Array = isFloat32Array;\n    function isFloat64Array(value) {\n      return whichTypedArray$1(value) === \"Float64Array\";\n    }\n    exports3.isFloat64Array = isFloat64Array;\n    function isBigInt64Array(value) {\n      return whichTypedArray$1(value) === \"BigInt64Array\";\n    }\n    exports3.isBigInt64Array = isBigInt64Array;\n    function isBigUint64Array(value) {\n      return whichTypedArray$1(value) === \"BigUint64Array\";\n    }\n    exports3.isBigUint64Array = isBigUint64Array;\n    function isMapToString(value) {\n      return ObjectToString(value) === \"[object Map]\";\n    }\n    isMapToString.working = typeof Map !== \"undefined\" && isMapToString(/* @__PURE__ */ new Map());\n    function isMap(value) {\n      if (typeof Map === \"undefined\") {\n        return false;\n      }\n      return isMapToString.working ? isMapToString(value) : value instanceof Map;\n    }\n    exports3.isMap = isMap;\n    function isSetToString(value) {\n      return ObjectToString(value) === \"[object Set]\";\n    }\n    isSetToString.working = typeof Set !== \"undefined\" && isSetToString(/* @__PURE__ */ new Set());\n    function isSet(value) {\n      if (typeof Set === \"undefined\") {\n        return false;\n      }\n      return isSetToString.working ? isSetToString(value) : value instanceof Set;\n    }\n    exports3.isSet = isSet;\n    function isWeakMapToString(value) {\n      return ObjectToString(value) === \"[object WeakMap]\";\n    }\n    isWeakMapToString.working = typeof WeakMap !== \"undefined\" && isWeakMapToString(/* @__PURE__ */ new WeakMap());\n    function isWeakMap(value) {\n      if (typeof WeakMap === \"undefined\") {\n        return false;\n      }\n      return isWeakMapToString.working ? isWeakMapToString(value) : value instanceof WeakMap;\n    }\n    exports3.isWeakMap = isWeakMap;\n    function isWeakSetToString(value) {\n      return ObjectToString(value) === \"[object WeakSet]\";\n    }\n    isWeakSetToString.working = typeof WeakSet !== \"undefined\" && isWeakSetToString(/* @__PURE__ */ new WeakSet());\n    function isWeakSet(value) {\n      return isWeakSetToString(value);\n    }\n    exports3.isWeakSet = isWeakSet;\n    function isArrayBufferToString(value) {\n      return ObjectToString(value) === \"[object ArrayBuffer]\";\n    }\n    isArrayBufferToString.working = typeof ArrayBuffer !== \"undefined\" && isArrayBufferToString(new ArrayBuffer());\n    function isArrayBuffer(value) {\n      if (typeof ArrayBuffer === \"undefined\") {\n        return false;\n      }\n      return isArrayBufferToString.working ? isArrayBufferToString(value) : value instanceof ArrayBuffer;\n    }\n    exports3.isArrayBuffer = isArrayBuffer;\n    function isDataViewToString(value) {\n      return ObjectToString(value) === \"[object DataView]\";\n    }\n    isDataViewToString.working = typeof ArrayBuffer !== \"undefined\" && typeof DataView !== \"undefined\" && isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1));\n    function isDataView(value) {\n      if (typeof DataView === \"undefined\") {\n        return false;\n      }\n      return isDataViewToString.working ? isDataViewToString(value) : value instanceof DataView;\n    }\n    exports3.isDataView = isDataView;\n    var SharedArrayBufferCopy = typeof SharedArrayBuffer !== \"undefined\" ? SharedArrayBuffer : void 0;\n    function isSharedArrayBufferToString(value) {\n      return ObjectToString(value) === \"[object SharedArrayBuffer]\";\n    }\n    function isSharedArrayBuffer(value) {\n      if (typeof SharedArrayBufferCopy === \"undefined\") {\n        return false;\n      }\n      if (typeof isSharedArrayBufferToString.working === \"undefined\") {\n        isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n      }\n      return isSharedArrayBufferToString.working ? isSharedArrayBufferToString(value) : value instanceof SharedArrayBufferCopy;\n    }\n    exports3.isSharedArrayBuffer = isSharedArrayBuffer;\n    function isAsyncFunction(value) {\n      return ObjectToString(value) === \"[object AsyncFunction]\";\n    }\n    exports3.isAsyncFunction = isAsyncFunction;\n    function isMapIterator(value) {\n      return ObjectToString(value) === \"[object Map Iterator]\";\n    }\n    exports3.isMapIterator = isMapIterator;\n    function isSetIterator(value) {\n      return ObjectToString(value) === \"[object Set Iterator]\";\n    }\n    exports3.isSetIterator = isSetIterator;\n    function isGeneratorObject(value) {\n      return ObjectToString(value) === \"[object Generator]\";\n    }\n    exports3.isGeneratorObject = isGeneratorObject;\n    function isWebAssemblyCompiledModule(value) {\n      return ObjectToString(value) === \"[object WebAssembly.Module]\";\n    }\n    exports3.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n    function isNumberObject(value) {\n      return checkBoxedPrimitive(value, numberValue);\n    }\n    exports3.isNumberObject = isNumberObject;\n    function isStringObject(value) {\n      return checkBoxedPrimitive(value, stringValue);\n    }\n    exports3.isStringObject = isStringObject;\n    function isBooleanObject(value) {\n      return checkBoxedPrimitive(value, booleanValue);\n    }\n    exports3.isBooleanObject = isBooleanObject;\n    function isBigIntObject(value) {\n      return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n    }\n    exports3.isBigIntObject = isBigIntObject;\n    function isSymbolObject(value) {\n      return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n    }\n    exports3.isSymbolObject = isSymbolObject;\n    function isBoxedPrimitive(value) {\n      return isNumberObject(value) || isStringObject(value) || isBooleanObject(value) || isBigIntObject(value) || isSymbolObject(value);\n    }\n    exports3.isBoxedPrimitive = isBoxedPrimitive;\n    function isAnyArrayBuffer(value) {\n      return typeof Uint8Array !== \"undefined\" && (isArrayBuffer(value) || isSharedArrayBuffer(value));\n    }\n    exports3.isAnyArrayBuffer = isAnyArrayBuffer;\n    [\"isProxy\", \"isExternal\", \"isModuleNamespaceObject\"].forEach(function(method) {\n      Object.defineProperty(exports3, method, {\n        enumerable: false,\n        value: function() {\n          throw new Error(method + \" is not supported in userland\");\n        }\n      });\n    });\n  })(types);\n  var isBufferBrowser = function isBuffer(arg) {\n    return arg && typeof arg === \"object\" && typeof arg.copy === \"function\" && typeof arg.fill === \"function\" && typeof arg.readUInt8 === \"function\";\n  };\n  var inherits_browser = { exports: {} };\n  if (typeof Object.create === \"function\") {\n    inherits_browser.exports = function inherits(ctor, superCtor) {\n      if (superCtor) {\n        ctor.super_ = superCtor;\n        ctor.prototype = Object.create(superCtor.prototype, {\n          constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n          }\n        });\n      }\n    };\n  } else {\n    inherits_browser.exports = function inherits(ctor, superCtor) {\n      if (superCtor) {\n        ctor.super_ = superCtor;\n        var TempCtor = function() {\n        };\n        TempCtor.prototype = superCtor.prototype;\n        ctor.prototype = new TempCtor();\n        ctor.prototype.constructor = ctor;\n      }\n    };\n  }\n  var inherits_browserExports = inherits_browser.exports;\n  (function(exports3) {\n    var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors2(obj) {\n      var keys = Object.keys(obj);\n      var descriptors = {};\n      for (var i = 0; i < keys.length; i++) {\n        descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n      }\n      return descriptors;\n    };\n    var formatRegExp = /%[sdj%]/g;\n    exports3.format = function(f) {\n      if (!isString2(f)) {\n        var objects = [];\n        for (var i = 0; i < arguments.length; i++) {\n          objects.push(inspect(arguments[i]));\n        }\n        return objects.join(\" \");\n      }\n      var i = 1;\n      var args = arguments;\n      var len = args.length;\n      var str = String(f).replace(formatRegExp, function(x2) {\n        if (x2 === \"%%\")\n          return \"%\";\n        if (i >= len)\n          return x2;\n        switch (x2) {\n          case \"%s\":\n            return String(args[i++]);\n          case \"%d\":\n            return Number(args[i++]);\n          case \"%j\":\n            try {\n              return JSON.stringify(args[i++]);\n            } catch (_) {\n              return \"[Circular]\";\n            }\n          default:\n            return x2;\n        }\n      });\n      for (var x = args[i]; i < len; x = args[++i]) {\n        if (isNull(x) || !isObject(x)) {\n          str += \" \" + x;\n        } else {\n          str += \" \" + inspect(x);\n        }\n      }\n      return str;\n    };\n    exports3.deprecate = function(fn, msg) {\n      if (typeof process !== \"undefined\" && process.noDeprecation === true) {\n        return fn;\n      }\n      if (typeof process === \"undefined\") {\n        return function() {\n          return exports3.deprecate(fn, msg).apply(this, arguments);\n        };\n      }\n      var warned = false;\n      function deprecated() {\n        if (!warned) {\n          if (process.throwDeprecation) {\n            throw new Error(msg);\n          } else if (process.traceDeprecation) {\n            console.trace(msg);\n          } else {\n            console.error(msg);\n          }\n          warned = true;\n        }\n        return fn.apply(this, arguments);\n      }\n      return deprecated;\n    };\n    var debugs = {};\n    var debugEnvRegex = /^$/;\n    if (process.env.NODE_DEBUG) {\n      var debugEnv = process.env.NODE_DEBUG;\n      debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\").replace(/\\*/g, \".*\").replace(/,/g, \"$|^\").toUpperCase();\n      debugEnvRegex = new RegExp(\"^\" + debugEnv + \"$\", \"i\");\n    }\n    exports3.debuglog = function(set) {\n      set = set.toUpperCase();\n      if (!debugs[set]) {\n        if (debugEnvRegex.test(set)) {\n          var pid = process.pid;\n          debugs[set] = function() {\n            var msg = exports3.format.apply(exports3, arguments);\n            console.error(\"%s %d: %s\", set, pid, msg);\n          };\n        } else {\n          debugs[set] = function() {\n          };\n        }\n      }\n      return debugs[set];\n    };\n    function inspect(obj, opts) {\n      var ctx = {\n        seen: [],\n        stylize: stylizeNoColor\n      };\n      if (arguments.length >= 3)\n        ctx.depth = arguments[2];\n      if (arguments.length >= 4)\n        ctx.colors = arguments[3];\n      if (isBoolean2(opts)) {\n        ctx.showHidden = opts;\n      } else if (opts) {\n        exports3._extend(ctx, opts);\n      }\n      if (isUndefined(ctx.showHidden))\n        ctx.showHidden = false;\n      if (isUndefined(ctx.depth))\n        ctx.depth = 2;\n      if (isUndefined(ctx.colors))\n        ctx.colors = false;\n      if (isUndefined(ctx.customInspect))\n        ctx.customInspect = true;\n      if (ctx.colors)\n        ctx.stylize = stylizeWithColor;\n      return formatValue(ctx, obj, ctx.depth);\n    }\n    exports3.inspect = inspect;\n    inspect.colors = {\n      \"bold\": [1, 22],\n      \"italic\": [3, 23],\n      \"underline\": [4, 24],\n      \"inverse\": [7, 27],\n      \"white\": [37, 39],\n      \"grey\": [90, 39],\n      \"black\": [30, 39],\n      \"blue\": [34, 39],\n      \"cyan\": [36, 39],\n      \"green\": [32, 39],\n      \"magenta\": [35, 39],\n      \"red\": [31, 39],\n      \"yellow\": [33, 39]\n    };\n    inspect.styles = {\n      \"special\": \"cyan\",\n      \"number\": \"yellow\",\n      \"boolean\": \"yellow\",\n      \"undefined\": \"grey\",\n      \"null\": \"bold\",\n      \"string\": \"green\",\n      \"date\": \"magenta\",\n      // \"name\": intentionally not styling\n      \"regexp\": \"red\"\n    };\n    function stylizeWithColor(str, styleType) {\n      var style = inspect.styles[styleType];\n      if (style) {\n        return \"\\x1B[\" + inspect.colors[style][0] + \"m\" + str + \"\\x1B[\" + inspect.colors[style][1] + \"m\";\n      } else {\n        return str;\n      }\n    }\n    function stylizeNoColor(str, styleType) {\n      return str;\n    }\n    function arrayToHash(array) {\n      var hash = {};\n      array.forEach(function(val, idx) {\n        hash[val] = true;\n      });\n      return hash;\n    }\n    function formatValue(ctx, value, recurseTimes) {\n      if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special\n      value.inspect !== exports3.inspect && // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n        var ret = value.inspect(recurseTimes, ctx);\n        if (!isString2(ret)) {\n          ret = formatValue(ctx, ret, recurseTimes);\n        }\n        return ret;\n      }\n      var primitive = formatPrimitive(ctx, value);\n      if (primitive) {\n        return primitive;\n      }\n      var keys = Object.keys(value);\n      var visibleKeys = arrayToHash(keys);\n      if (ctx.showHidden) {\n        keys = Object.getOwnPropertyNames(value);\n      }\n      if (isError(value) && (keys.indexOf(\"message\") >= 0 || keys.indexOf(\"description\") >= 0)) {\n        return formatError(value);\n      }\n      if (keys.length === 0) {\n        if (isFunction(value)) {\n          var name = value.name ? \": \" + value.name : \"\";\n          return ctx.stylize(\"[Function\" + name + \"]\", \"special\");\n        }\n        if (isRegExp(value)) {\n          return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n        }\n        if (isDate(value)) {\n          return ctx.stylize(Date.prototype.toString.call(value), \"date\");\n        }\n        if (isError(value)) {\n          return formatError(value);\n        }\n      }\n      var base = \"\", array = false, braces = [\"{\", \"}\"];\n      if (isArray(value)) {\n        array = true;\n        braces = [\"[\", \"]\"];\n      }\n      if (isFunction(value)) {\n        var n = value.name ? \": \" + value.name : \"\";\n        base = \" [Function\" + n + \"]\";\n      }\n      if (isRegExp(value)) {\n        base = \" \" + RegExp.prototype.toString.call(value);\n      }\n      if (isDate(value)) {\n        base = \" \" + Date.prototype.toUTCString.call(value);\n      }\n      if (isError(value)) {\n        base = \" \" + formatError(value);\n      }\n      if (keys.length === 0 && (!array || value.length == 0)) {\n        return braces[0] + base + braces[1];\n      }\n      if (recurseTimes < 0) {\n        if (isRegExp(value)) {\n          return ctx.stylize(RegExp.prototype.toString.call(value), \"regexp\");\n        } else {\n          return ctx.stylize(\"[Object]\", \"special\");\n        }\n      }\n      ctx.seen.push(value);\n      var output;\n      if (array) {\n        output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n      } else {\n        output = keys.map(function(key) {\n          return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n        });\n      }\n      ctx.seen.pop();\n      return reduceToSingleString(output, base, braces);\n    }\n    function formatPrimitive(ctx, value) {\n      if (isUndefined(value))\n        return ctx.stylize(\"undefined\", \"undefined\");\n      if (isString2(value)) {\n        var simple = \"'\" + JSON.stringify(value).replace(/^\"|\"$/g, \"\").replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"') + \"'\";\n        return ctx.stylize(simple, \"string\");\n      }\n      if (isNumber2(value))\n        return ctx.stylize(\"\" + value, \"number\");\n      if (isBoolean2(value))\n        return ctx.stylize(\"\" + value, \"boolean\");\n      if (isNull(value))\n        return ctx.stylize(\"null\", \"null\");\n    }\n    function formatError(value) {\n      return \"[\" + Error.prototype.toString.call(value) + \"]\";\n    }\n    function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n      var output = [];\n      for (var i = 0, l = value.length; i < l; ++i) {\n        if (hasOwnProperty2(value, String(i))) {\n          output.push(formatProperty(\n            ctx,\n            value,\n            recurseTimes,\n            visibleKeys,\n            String(i),\n            true\n          ));\n        } else {\n          output.push(\"\");\n        }\n      }\n      keys.forEach(function(key) {\n        if (!key.match(/^\\d+$/)) {\n          output.push(formatProperty(\n            ctx,\n            value,\n            recurseTimes,\n            visibleKeys,\n            key,\n            true\n          ));\n        }\n      });\n      return output;\n    }\n    function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n      var name, str, desc;\n      desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n      if (desc.get) {\n        if (desc.set) {\n          str = ctx.stylize(\"[Getter/Setter]\", \"special\");\n        } else {\n          str = ctx.stylize(\"[Getter]\", \"special\");\n        }\n      } else {\n        if (desc.set) {\n          str = ctx.stylize(\"[Setter]\", \"special\");\n        }\n      }\n      if (!hasOwnProperty2(visibleKeys, key)) {\n        name = \"[\" + key + \"]\";\n      }\n      if (!str) {\n        if (ctx.seen.indexOf(desc.value) < 0) {\n          if (isNull(recurseTimes)) {\n            str = formatValue(ctx, desc.value, null);\n          } else {\n            str = formatValue(ctx, desc.value, recurseTimes - 1);\n          }\n          if (str.indexOf(\"\\n\") > -1) {\n            if (array) {\n              str = str.split(\"\\n\").map(function(line) {\n                return \"  \" + line;\n              }).join(\"\\n\").slice(2);\n            } else {\n              str = \"\\n\" + str.split(\"\\n\").map(function(line) {\n                return \"   \" + line;\n              }).join(\"\\n\");\n            }\n          }\n        } else {\n          str = ctx.stylize(\"[Circular]\", \"special\");\n        }\n      }\n      if (isUndefined(name)) {\n        if (array && key.match(/^\\d+$/)) {\n          return str;\n        }\n        name = JSON.stringify(\"\" + key);\n        if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n          name = name.slice(1, -1);\n          name = ctx.stylize(name, \"name\");\n        } else {\n          name = name.replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\");\n          name = ctx.stylize(name, \"string\");\n        }\n      }\n      return name + \": \" + str;\n    }\n    function reduceToSingleString(output, base, braces) {\n      var length = output.reduce(function(prev, cur) {\n        if (cur.indexOf(\"\\n\") >= 0)\n          ;\n        return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, \"\").length + 1;\n      }, 0);\n      if (length > 60) {\n        return braces[0] + (base === \"\" ? \"\" : base + \"\\n \") + \" \" + output.join(\",\\n  \") + \" \" + braces[1];\n      }\n      return braces[0] + base + \" \" + output.join(\", \") + \" \" + braces[1];\n    }\n    exports3.types = types;\n    function isArray(ar) {\n      return Array.isArray(ar);\n    }\n    exports3.isArray = isArray;\n    function isBoolean2(arg) {\n      return typeof arg === \"boolean\";\n    }\n    exports3.isBoolean = isBoolean2;\n    function isNull(arg) {\n      return arg === null;\n    }\n    exports3.isNull = isNull;\n    function isNullOrUndefined(arg) {\n      return arg == null;\n    }\n    exports3.isNullOrUndefined = isNullOrUndefined;\n    function isNumber2(arg) {\n      return typeof arg === \"number\";\n    }\n    exports3.isNumber = isNumber2;\n    function isString2(arg) {\n      return typeof arg === \"string\";\n    }\n    exports3.isString = isString2;\n    function isSymbol(arg) {\n      return typeof arg === \"symbol\";\n    }\n    exports3.isSymbol = isSymbol;\n    function isUndefined(arg) {\n      return arg === void 0;\n    }\n    exports3.isUndefined = isUndefined;\n    function isRegExp(re) {\n      return isObject(re) && objectToString(re) === \"[object RegExp]\";\n    }\n    exports3.isRegExp = isRegExp;\n    exports3.types.isRegExp = isRegExp;\n    function isObject(arg) {\n      return typeof arg === \"object\" && arg !== null;\n    }\n    exports3.isObject = isObject;\n    function isDate(d) {\n      return isObject(d) && objectToString(d) === \"[object Date]\";\n    }\n    exports3.isDate = isDate;\n    exports3.types.isDate = isDate;\n    function isError(e) {\n      return isObject(e) && (objectToString(e) === \"[object Error]\" || e instanceof Error);\n    }\n    exports3.isError = isError;\n    exports3.types.isNativeError = isError;\n    function isFunction(arg) {\n      return typeof arg === \"function\";\n    }\n    exports3.isFunction = isFunction;\n    function isPrimitive(arg) {\n      return arg === null || typeof arg === \"boolean\" || typeof arg === \"number\" || typeof arg === \"string\" || typeof arg === \"symbol\" || // ES6 symbol\n      typeof arg === \"undefined\";\n    }\n    exports3.isPrimitive = isPrimitive;\n    exports3.isBuffer = isBufferBrowser;\n    function objectToString(o) {\n      return Object.prototype.toString.call(o);\n    }\n    function pad(n) {\n      return n < 10 ? \"0\" + n.toString(10) : n.toString(10);\n    }\n    var months = [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ];\n    function timestamp() {\n      var d = /* @__PURE__ */ new Date();\n      var time = [\n        pad(d.getHours()),\n        pad(d.getMinutes()),\n        pad(d.getSeconds())\n      ].join(\":\");\n      return [d.getDate(), months[d.getMonth()], time].join(\" \");\n    }\n    exports3.log = function() {\n      console.log(\"%s - %s\", timestamp(), exports3.format.apply(exports3, arguments));\n    };\n    exports3.inherits = inherits_browserExports;\n    exports3._extend = function(origin, add) {\n      if (!add || !isObject(add))\n        return origin;\n      var keys = Object.keys(add);\n      var i = keys.length;\n      while (i--) {\n        origin[keys[i]] = add[keys[i]];\n      }\n      return origin;\n    };\n    function hasOwnProperty2(obj, prop) {\n      return Object.prototype.hasOwnProperty.call(obj, prop);\n    }\n    var kCustomPromisifiedSymbol = typeof Symbol !== \"undefined\" ? Symbol(\"util.promisify.custom\") : void 0;\n    exports3.promisify = function promisify(original) {\n      if (typeof original !== \"function\")\n        throw new TypeError('The \"original\" argument must be of type Function');\n      if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n        var fn = original[kCustomPromisifiedSymbol];\n        if (typeof fn !== \"function\") {\n          throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n        }\n        Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n          value: fn,\n          enumerable: false,\n          writable: false,\n          configurable: true\n        });\n        return fn;\n      }\n      function fn() {\n        var promiseResolve, promiseReject;\n        var promise = new Promise(function(resolve, reject) {\n          promiseResolve = resolve;\n          promiseReject = reject;\n        });\n        var args = [];\n        for (var i = 0; i < arguments.length; i++) {\n          args.push(arguments[i]);\n        }\n        args.push(function(err2, value) {\n          if (err2) {\n            promiseReject(err2);\n          } else {\n            promiseResolve(value);\n          }\n        });\n        try {\n          original.apply(this, args);\n        } catch (err2) {\n          promiseReject(err2);\n        }\n        return promise;\n      }\n      Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n      if (kCustomPromisifiedSymbol)\n        Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n          value: fn,\n          enumerable: false,\n          writable: false,\n          configurable: true\n        });\n      return Object.defineProperties(\n        fn,\n        getOwnPropertyDescriptors(original)\n      );\n    };\n    exports3.promisify.custom = kCustomPromisifiedSymbol;\n    function callbackifyOnRejected(reason, cb) {\n      if (!reason) {\n        var newReason = new Error(\"Promise was rejected with a falsy value\");\n        newReason.reason = reason;\n        reason = newReason;\n      }\n      return cb(reason);\n    }\n    function callbackify(original) {\n      if (typeof original !== \"function\") {\n        throw new TypeError('The \"original\" argument must be of type Function');\n      }\n      function callbackified() {\n        var args = [];\n        for (var i = 0; i < arguments.length; i++) {\n          args.push(arguments[i]);\n        }\n        var maybeCb = args.pop();\n        if (typeof maybeCb !== \"function\") {\n          throw new TypeError(\"The last argument must be of type Function\");\n        }\n        var self2 = this;\n        var cb = function() {\n          return maybeCb.apply(self2, arguments);\n        };\n        original.apply(this, args).then(\n          function(ret) {\n            process.nextTick(cb.bind(null, null, ret));\n          },\n          function(rej) {\n            process.nextTick(callbackifyOnRejected.bind(null, rej, cb));\n          }\n        );\n      }\n      Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n      Object.defineProperties(\n        callbackified,\n        getOwnPropertyDescriptors(original)\n      );\n      return callbackified;\n    }\n    exports3.callbackify = callbackify;\n  })(util);\n  var hasRequiredErrors;\n  function requireErrors() {\n    if (hasRequiredErrors)\n      return errors;\n    hasRequiredErrors = 1;\n    function _typeof(obj) {\n      if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n        _typeof = function _typeof2(obj2) {\n          return typeof obj2;\n        };\n      } else {\n        _typeof = function _typeof2(obj2) {\n          return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n        };\n      }\n      return _typeof(obj);\n    }\n    function _classCallCheck(instance, Constructor) {\n      if (!(instance instanceof Constructor)) {\n        throw new TypeError(\"Cannot call a class as a function\");\n      }\n    }\n    function _possibleConstructorReturn(self2, call) {\n      if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n        return call;\n      }\n      return _assertThisInitialized(self2);\n    }\n    function _assertThisInitialized(self2) {\n      if (self2 === void 0) {\n        throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n      }\n      return self2;\n    }\n    function _getPrototypeOf(o) {\n      _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {\n        return o2.__proto__ || Object.getPrototypeOf(o2);\n      };\n      return _getPrototypeOf(o);\n    }\n    function _inherits(subClass, superClass) {\n      if (typeof superClass !== \"function\" && superClass !== null) {\n        throw new TypeError(\"Super expression must either be null or a function\");\n      }\n      subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n      if (superClass)\n        _setPrototypeOf(subClass, superClass);\n    }\n    function _setPrototypeOf(o, p) {\n      _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) {\n        o2.__proto__ = p2;\n        return o2;\n      };\n      return _setPrototypeOf(o, p);\n    }\n    var codes = {};\n    var assert2;\n    var util$12;\n    function createErrorType(code, message, Base) {\n      if (!Base) {\n        Base = Error;\n      }\n      function getMessage(arg1, arg2, arg3) {\n        if (typeof message === \"string\") {\n          return message;\n        } else {\n          return message(arg1, arg2, arg3);\n        }\n      }\n      var NodeError = /* @__PURE__ */ function(_Base) {\n        _inherits(NodeError2, _Base);\n        function NodeError2(arg1, arg2, arg3) {\n          var _this;\n          _classCallCheck(this, NodeError2);\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError2).call(this, getMessage(arg1, arg2, arg3)));\n          _this.code = code;\n          return _this;\n        }\n        return NodeError2;\n      }(Base);\n      codes[code] = NodeError;\n    }\n    function oneOf(expected, thing) {\n      if (Array.isArray(expected)) {\n        var len = expected.length;\n        expected = expected.map(function(i) {\n          return String(i);\n        });\n        if (len > 2) {\n          return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(\", \"), \", or \") + expected[len - 1];\n        } else if (len === 2) {\n          return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n        } else {\n          return \"of \".concat(thing, \" \").concat(expected[0]);\n        }\n      } else {\n        return \"of \".concat(thing, \" \").concat(String(expected));\n      }\n    }\n    function startsWith(str, search, pos) {\n      return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n    }\n    function endsWith(str, search, this_len) {\n      if (this_len === void 0 || this_len > str.length) {\n        this_len = str.length;\n      }\n      return str.substring(this_len - search.length, this_len) === search;\n    }\n    function includes(str, search, start) {\n      if (typeof start !== \"number\") {\n        start = 0;\n      }\n      if (start + search.length > str.length) {\n        return false;\n      } else {\n        return str.indexOf(search, start) !== -1;\n      }\n    }\n    createErrorType(\"ERR_AMBIGUOUS_ARGUMENT\", 'The \"%s\" argument is ambiguous. %s', TypeError);\n    createErrorType(\"ERR_INVALID_ARG_TYPE\", function(name, expected, actual) {\n      if (assert2 === void 0)\n        assert2 = requireAssert();\n      assert2(typeof name === \"string\", \"'name' must be a string\");\n      var determiner;\n      if (typeof expected === \"string\" && startsWith(expected, \"not \")) {\n        determiner = \"must not be\";\n        expected = expected.replace(/^not /, \"\");\n      } else {\n        determiner = \"must be\";\n      }\n      var msg;\n      if (endsWith(name, \" argument\")) {\n        msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, \"type\"));\n      } else {\n        var type2 = includes(name, \".\") ? \"property\" : \"argument\";\n        msg = 'The \"'.concat(name, '\" ').concat(type2, \" \").concat(determiner, \" \").concat(oneOf(expected, \"type\"));\n      }\n      msg += \". Received type \".concat(_typeof(actual));\n      return msg;\n    }, TypeError);\n    createErrorType(\"ERR_INVALID_ARG_VALUE\", function(name, value) {\n      var reason = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"is invalid\";\n      if (util$12 === void 0)\n        util$12 = util;\n      var inspected = util$12.inspect(value);\n      if (inspected.length > 128) {\n        inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n      }\n      return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n    }, TypeError);\n    createErrorType(\"ERR_INVALID_RETURN_VALUE\", function(input, name, value) {\n      var type2;\n      if (value && value.constructor && value.constructor.name) {\n        type2 = \"instance of \".concat(value.constructor.name);\n      } else {\n        type2 = \"type \".concat(_typeof(value));\n      }\n      return \"Expected \".concat(input, ' to be returned from the \"').concat(name, '\"') + \" function but got \".concat(type2, \".\");\n    }, TypeError);\n    createErrorType(\"ERR_MISSING_ARGS\", function() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      if (assert2 === void 0)\n        assert2 = requireAssert();\n      assert2(args.length > 0, \"At least one arg needs to be specified\");\n      var msg = \"The \";\n      var len = args.length;\n      args = args.map(function(a) {\n        return '\"'.concat(a, '\"');\n      });\n      switch (len) {\n        case 1:\n          msg += \"\".concat(args[0], \" argument\");\n          break;\n        case 2:\n          msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n          break;\n        default:\n          msg += args.slice(0, len - 1).join(\", \");\n          msg += \", and \".concat(args[len - 1], \" arguments\");\n          break;\n      }\n      return \"\".concat(msg, \" must be specified\");\n    }, TypeError);\n    errors.codes = codes;\n    return errors;\n  }\n  var assertion_error;\n  var hasRequiredAssertion_error;\n  function requireAssertion_error() {\n    if (hasRequiredAssertion_error)\n      return assertion_error;\n    hasRequiredAssertion_error = 1;\n    function _objectSpread(target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i] != null ? arguments[i] : {};\n        var ownKeys = Object.keys(source);\n        if (typeof Object.getOwnPropertySymbols === \"function\") {\n          ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n            return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n          }));\n        }\n        ownKeys.forEach(function(key) {\n          _defineProperty(target, key, source[key]);\n        });\n      }\n      return target;\n    }\n    function _defineProperty(obj, key, value) {\n      if (key in obj) {\n        Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });\n      } else {\n        obj[key] = value;\n      }\n      return obj;\n    }\n    function _classCallCheck(instance, Constructor) {\n      if (!(instance instanceof Constructor)) {\n        throw new TypeError(\"Cannot call a class as a function\");\n      }\n    }\n    function _defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor)\n          descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    function _createClass(Constructor, protoProps, staticProps) {\n      if (protoProps)\n        _defineProperties(Constructor.prototype, protoProps);\n      if (staticProps)\n        _defineProperties(Constructor, staticProps);\n      return Constructor;\n    }\n    function _possibleConstructorReturn(self2, call) {\n      if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n        return call;\n      }\n      return _assertThisInitialized(self2);\n    }\n    function _assertThisInitialized(self2) {\n      if (self2 === void 0) {\n        throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n      }\n      return self2;\n    }\n    function _inherits(subClass, superClass) {\n      if (typeof superClass !== \"function\" && superClass !== null) {\n        throw new TypeError(\"Super expression must either be null or a function\");\n      }\n      subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n      if (superClass)\n        _setPrototypeOf(subClass, superClass);\n    }\n    function _wrapNativeSuper(Class) {\n      var _cache = typeof Map === \"function\" ? /* @__PURE__ */ new Map() : void 0;\n      _wrapNativeSuper = function _wrapNativeSuper2(Class2) {\n        if (Class2 === null || !_isNativeFunction(Class2))\n          return Class2;\n        if (typeof Class2 !== \"function\") {\n          throw new TypeError(\"Super expression must either be null or a function\");\n        }\n        if (typeof _cache !== \"undefined\") {\n          if (_cache.has(Class2))\n            return _cache.get(Class2);\n          _cache.set(Class2, Wrapper);\n        }\n        function Wrapper() {\n          return _construct(Class2, arguments, _getPrototypeOf(this).constructor);\n        }\n        Wrapper.prototype = Object.create(Class2.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n        return _setPrototypeOf(Wrapper, Class2);\n      };\n      return _wrapNativeSuper(Class);\n    }\n    function isNativeReflectConstruct() {\n      if (typeof Reflect === \"undefined\" || !Reflect.construct)\n        return false;\n      if (Reflect.construct.sham)\n        return false;\n      if (typeof Proxy === \"function\")\n        return true;\n      try {\n        Date.prototype.toString.call(Reflect.construct(Date, [], function() {\n        }));\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n    function _construct(Parent, args, Class) {\n      if (isNativeReflectConstruct()) {\n        _construct = Reflect.construct;\n      } else {\n        _construct = function _construct2(Parent2, args2, Class2) {\n          var a = [null];\n          a.push.apply(a, args2);\n          var Constructor = Function.bind.apply(Parent2, a);\n          var instance = new Constructor();\n          if (Class2)\n            _setPrototypeOf(instance, Class2.prototype);\n          return instance;\n        };\n      }\n      return _construct.apply(null, arguments);\n    }\n    function _isNativeFunction(fn) {\n      return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n    }\n    function _setPrototypeOf(o, p) {\n      _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) {\n        o2.__proto__ = p2;\n        return o2;\n      };\n      return _setPrototypeOf(o, p);\n    }\n    function _getPrototypeOf(o) {\n      _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {\n        return o2.__proto__ || Object.getPrototypeOf(o2);\n      };\n      return _getPrototypeOf(o);\n    }\n    function _typeof(obj) {\n      if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n        _typeof = function _typeof2(obj2) {\n          return typeof obj2;\n        };\n      } else {\n        _typeof = function _typeof2(obj2) {\n          return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n        };\n      }\n      return _typeof(obj);\n    }\n    var _require = util, inspect = _require.inspect;\n    var _require2 = requireErrors(), ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE;\n    function endsWith(str, search, this_len) {\n      if (this_len === void 0 || this_len > str.length) {\n        this_len = str.length;\n      }\n      return str.substring(this_len - search.length, this_len) === search;\n    }\n    function repeat(str, count2) {\n      count2 = Math.floor(count2);\n      if (str.length == 0 || count2 == 0)\n        return \"\";\n      var maxCount = str.length * count2;\n      count2 = Math.floor(Math.log(count2) / Math.log(2));\n      while (count2) {\n        str += str;\n        count2--;\n      }\n      str += str.substring(0, maxCount - str.length);\n      return str;\n    }\n    var blue = \"\";\n    var green = \"\";\n    var red = \"\";\n    var white = \"\";\n    var kReadableOperator = {\n      deepStrictEqual: \"Expected values to be strictly deep-equal:\",\n      strictEqual: \"Expected values to be strictly equal:\",\n      strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n      deepEqual: \"Expected values to be loosely deep-equal:\",\n      equal: \"Expected values to be loosely equal:\",\n      notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n      notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n      notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n      notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n      notEqual: 'Expected \"actual\" to be loosely unequal to:',\n      notIdentical: \"Values identical but not reference-equal:\"\n    };\n    var kMaxShortLength = 10;\n    function copyError(source) {\n      var keys = Object.keys(source);\n      var target = Object.create(Object.getPrototypeOf(source));\n      keys.forEach(function(key) {\n        target[key] = source[key];\n      });\n      Object.defineProperty(target, \"message\", {\n        value: source.message\n      });\n      return target;\n    }\n    function inspectValue(val) {\n      return inspect(val, {\n        compact: false,\n        customInspect: false,\n        depth: 1e3,\n        maxArrayLength: Infinity,\n        // Assert compares only enumerable properties (with a few exceptions).\n        showHidden: false,\n        // Having a long line as error is better than wrapping the line for\n        // comparison for now.\n        // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n        // have meta information about the inspected properties (i.e., know where\n        // in what line the property starts and ends).\n        breakLength: Infinity,\n        // Assert does not detect proxies currently.\n        showProxy: false,\n        sorted: true,\n        // Inspect getters as we also check them when comparing entries.\n        getters: true\n      });\n    }\n    function createErrDiff(actual, expected, operator) {\n      var other = \"\";\n      var res = \"\";\n      var lastPos = 0;\n      var end = \"\";\n      var skipped = false;\n      var actualInspected = inspectValue(actual);\n      var actualLines = actualInspected.split(\"\\n\");\n      var expectedLines = inspectValue(expected).split(\"\\n\");\n      var i = 0;\n      var indicator = \"\";\n      if (operator === \"strictEqual\" && _typeof(actual) === \"object\" && _typeof(expected) === \"object\" && actual !== null && expected !== null) {\n        operator = \"strictEqualObject\";\n      }\n      if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n        var inputLength = actualLines[0].length + expectedLines[0].length;\n        if (inputLength <= kMaxShortLength) {\n          if ((_typeof(actual) !== \"object\" || actual === null) && (_typeof(expected) !== \"object\" || expected === null) && (actual !== 0 || expected !== 0)) {\n            return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n          }\n        } else if (operator !== \"strictEqualObject\") {\n          var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n          if (inputLength < maxLength) {\n            while (actualLines[0][i] === expectedLines[0][i]) {\n              i++;\n            }\n            if (i > 2) {\n              indicator = \"\\n  \".concat(repeat(\" \", i), \"^\");\n              i = 0;\n            }\n          }\n        }\n      }\n      var a = actualLines[actualLines.length - 1];\n      var b = expectedLines[expectedLines.length - 1];\n      while (a === b) {\n        if (i++ < 2) {\n          end = \"\\n  \".concat(a).concat(end);\n        } else {\n          other = a;\n        }\n        actualLines.pop();\n        expectedLines.pop();\n        if (actualLines.length === 0 || expectedLines.length === 0)\n          break;\n        a = actualLines[actualLines.length - 1];\n        b = expectedLines[expectedLines.length - 1];\n      }\n      var maxLines = Math.max(actualLines.length, expectedLines.length);\n      if (maxLines === 0) {\n        var _actualLines = actualInspected.split(\"\\n\");\n        if (_actualLines.length > 30) {\n          _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n          while (_actualLines.length > 27) {\n            _actualLines.pop();\n          }\n        }\n        return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join(\"\\n\"), \"\\n\");\n      }\n      if (i > 3) {\n        end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n        skipped = true;\n      }\n      if (other !== \"\") {\n        end = \"\\n  \".concat(other).concat(end);\n        other = \"\";\n      }\n      var printedLines = 0;\n      var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n      var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n      for (i = 0; i < maxLines; i++) {\n        var cur = i - lastPos;\n        if (actualLines.length < i + 1) {\n          if (cur > 1 && i > 2) {\n            if (cur > 4) {\n              res += \"\\n\".concat(blue, \"...\").concat(white);\n              skipped = true;\n            } else if (cur > 3) {\n              res += \"\\n  \".concat(expectedLines[i - 2]);\n              printedLines++;\n            }\n            res += \"\\n  \".concat(expectedLines[i - 1]);\n            printedLines++;\n          }\n          lastPos = i;\n          other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n          printedLines++;\n        } else if (expectedLines.length < i + 1) {\n          if (cur > 1 && i > 2) {\n            if (cur > 4) {\n              res += \"\\n\".concat(blue, \"...\").concat(white);\n              skipped = true;\n            } else if (cur > 3) {\n              res += \"\\n  \".concat(actualLines[i - 2]);\n              printedLines++;\n            }\n            res += \"\\n  \".concat(actualLines[i - 1]);\n            printedLines++;\n          }\n          lastPos = i;\n          res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n          printedLines++;\n        } else {\n          var expectedLine = expectedLines[i];\n          var actualLine = actualLines[i];\n          var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, \",\") || actualLine.slice(0, -1) !== expectedLine);\n          if (divergingLines && endsWith(expectedLine, \",\") && expectedLine.slice(0, -1) === actualLine) {\n            divergingLines = false;\n            actualLine += \",\";\n          }\n          if (divergingLines) {\n            if (cur > 1 && i > 2) {\n              if (cur > 4) {\n                res += \"\\n\".concat(blue, \"...\").concat(white);\n                skipped = true;\n              } else if (cur > 3) {\n                res += \"\\n  \".concat(actualLines[i - 2]);\n                printedLines++;\n              }\n              res += \"\\n  \".concat(actualLines[i - 1]);\n              printedLines++;\n            }\n            lastPos = i;\n            res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n            other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n            printedLines += 2;\n          } else {\n            res += other;\n            other = \"\";\n            if (cur === 1 || i === 0) {\n              res += \"\\n  \".concat(actualLine);\n              printedLines++;\n            }\n          }\n        }\n        if (printedLines > 20 && i < maxLines - 2) {\n          return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n        }\n      }\n      return \"\".concat(msg).concat(skipped ? skippedMsg : \"\", \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n    }\n    var AssertionError = /* @__PURE__ */ function(_Error) {\n      _inherits(AssertionError2, _Error);\n      function AssertionError2(options) {\n        var _this;\n        _classCallCheck(this, AssertionError2);\n        if (_typeof(options) !== \"object\" || options === null) {\n          throw new ERR_INVALID_ARG_TYPE(\"options\", \"Object\", options);\n        }\n        var message = options.message, operator = options.operator, stackStartFn = options.stackStartFn;\n        var actual = options.actual, expected = options.expected;\n        var limit = Error.stackTraceLimit;\n        Error.stackTraceLimit = 0;\n        if (message != null) {\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, String(message)));\n        } else {\n          if (process.stderr && process.stderr.isTTY) {\n            if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n              blue = \"\\x1B[34m\";\n              green = \"\\x1B[32m\";\n              white = \"\\x1B[39m\";\n              red = \"\\x1B[31m\";\n            } else {\n              blue = \"\";\n              green = \"\";\n              white = \"\";\n              red = \"\";\n            }\n          }\n          if (_typeof(actual) === \"object\" && actual !== null && _typeof(expected) === \"object\" && expected !== null && \"stack\" in actual && actual instanceof Error && \"stack\" in expected && expected instanceof Error) {\n            actual = copyError(actual);\n            expected = copyError(expected);\n          }\n          if (operator === \"deepStrictEqual\" || operator === \"strictEqual\") {\n            _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, createErrDiff(actual, expected, operator)));\n          } else if (operator === \"notDeepStrictEqual\" || operator === \"notStrictEqual\") {\n            var base = kReadableOperator[operator];\n            var res = inspectValue(actual).split(\"\\n\");\n            if (operator === \"notStrictEqual\" && _typeof(actual) === \"object\" && actual !== null) {\n              base = kReadableOperator.notStrictEqualObject;\n            }\n            if (res.length > 30) {\n              res[26] = \"\".concat(blue, \"...\").concat(white);\n              while (res.length > 27) {\n                res.pop();\n              }\n            }\n            if (res.length === 1) {\n              _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, \"\".concat(base, \" \").concat(res[0])));\n            } else {\n              _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join(\"\\n\"), \"\\n\")));\n            }\n          } else {\n            var _res = inspectValue(actual);\n            var other = \"\";\n            var knownOperators = kReadableOperator[operator];\n            if (operator === \"notDeepEqual\" || operator === \"notEqual\") {\n              _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n              if (_res.length > 1024) {\n                _res = \"\".concat(_res.slice(0, 1021), \"...\");\n              }\n            } else {\n              other = \"\".concat(inspectValue(expected));\n              if (_res.length > 512) {\n                _res = \"\".concat(_res.slice(0, 509), \"...\");\n              }\n              if (other.length > 512) {\n                other = \"\".concat(other.slice(0, 509), \"...\");\n              }\n              if (operator === \"deepEqual\" || operator === \"equal\") {\n                _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n              } else {\n                other = \" \".concat(operator, \" \").concat(other);\n              }\n            }\n            _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError2).call(this, \"\".concat(_res).concat(other)));\n          }\n        }\n        Error.stackTraceLimit = limit;\n        _this.generatedMessage = !message;\n        Object.defineProperty(_assertThisInitialized(_this), \"name\", {\n          value: \"AssertionError [ERR_ASSERTION]\",\n          enumerable: false,\n          writable: true,\n          configurable: true\n        });\n        _this.code = \"ERR_ASSERTION\";\n        _this.actual = actual;\n        _this.expected = expected;\n        _this.operator = operator;\n        if (Error.captureStackTrace) {\n          Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n        }\n        _this.stack;\n        _this.name = \"AssertionError\";\n        return _possibleConstructorReturn(_this);\n      }\n      _createClass(AssertionError2, [{\n        key: \"toString\",\n        value: function toString() {\n          return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n        }\n      }, {\n        key: inspect.custom,\n        value: function value(recurseTimes, ctx) {\n          return inspect(this, _objectSpread({}, ctx, {\n            customInspect: false,\n            depth: 0\n          }));\n        }\n      }]);\n      return AssertionError2;\n    }(_wrapNativeSuper(Error));\n    assertion_error = AssertionError;\n    return assertion_error;\n  }\n  var es6ObjectAssign;\n  var hasRequiredEs6ObjectAssign;\n  function requireEs6ObjectAssign() {\n    if (hasRequiredEs6ObjectAssign)\n      return es6ObjectAssign;\n    hasRequiredEs6ObjectAssign = 1;\n    function assign(target, firstSource) {\n      if (target === void 0 || target === null) {\n        throw new TypeError(\"Cannot convert first argument to object\");\n      }\n      var to = Object(target);\n      for (var i = 1; i < arguments.length; i++) {\n        var nextSource = arguments[i];\n        if (nextSource === void 0 || nextSource === null) {\n          continue;\n        }\n        var keysArray = Object.keys(Object(nextSource));\n        for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n          var nextKey = keysArray[nextIndex];\n          var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n          if (desc !== void 0 && desc.enumerable) {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n      return to;\n    }\n    function polyfill2() {\n      if (!Object.assign) {\n        Object.defineProperty(Object, \"assign\", {\n          enumerable: false,\n          configurable: true,\n          writable: true,\n          value: assign\n        });\n      }\n    }\n    es6ObjectAssign = {\n      assign,\n      polyfill: polyfill2\n    };\n    return es6ObjectAssign;\n  }\n  var isArguments;\n  var hasRequiredIsArguments;\n  function requireIsArguments() {\n    if (hasRequiredIsArguments)\n      return isArguments;\n    hasRequiredIsArguments = 1;\n    var toStr2 = Object.prototype.toString;\n    isArguments = function isArguments2(value) {\n      var str = toStr2.call(value);\n      var isArgs = str === \"[object Arguments]\";\n      if (!isArgs) {\n        isArgs = str !== \"[object Array]\" && value !== null && typeof value === \"object\" && typeof value.length === \"number\" && value.length >= 0 && toStr2.call(value.callee) === \"[object Function]\";\n      }\n      return isArgs;\n    };\n    return isArguments;\n  }\n  var implementation$2;\n  var hasRequiredImplementation$2;\n  function requireImplementation$2() {\n    if (hasRequiredImplementation$2)\n      return implementation$2;\n    hasRequiredImplementation$2 = 1;\n    var keysShim;\n    if (!Object.keys) {\n      var has = Object.prototype.hasOwnProperty;\n      var toStr2 = Object.prototype.toString;\n      var isArgs = requireIsArguments();\n      var isEnumerable = Object.prototype.propertyIsEnumerable;\n      var hasDontEnumBug = !isEnumerable.call({ toString: null }, \"toString\");\n      var hasProtoEnumBug = isEnumerable.call(function() {\n      }, \"prototype\");\n      var dontEnums = [\n        \"toString\",\n        \"toLocaleString\",\n        \"valueOf\",\n        \"hasOwnProperty\",\n        \"isPrototypeOf\",\n        \"propertyIsEnumerable\",\n        \"constructor\"\n      ];\n      var equalsConstructorPrototype = function(o) {\n        var ctor = o.constructor;\n        return ctor && ctor.prototype === o;\n      };\n      var excludedKeys = {\n        $applicationCache: true,\n        $console: true,\n        $external: true,\n        $frame: true,\n        $frameElement: true,\n        $frames: true,\n        $innerHeight: true,\n        $innerWidth: true,\n        $onmozfullscreenchange: true,\n        $onmozfullscreenerror: true,\n        $outerHeight: true,\n        $outerWidth: true,\n        $pageXOffset: true,\n        $pageYOffset: true,\n        $parent: true,\n        $scrollLeft: true,\n        $scrollTop: true,\n        $scrollX: true,\n        $scrollY: true,\n        $self: true,\n        $webkitIndexedDB: true,\n        $webkitStorageInfo: true,\n        $window: true\n      };\n      var hasAutomationEqualityBug = function() {\n        if (typeof window === \"undefined\") {\n          return false;\n        }\n        for (var k in window) {\n          try {\n            if (!excludedKeys[\"$\" + k] && has.call(window, k) && window[k] !== null && typeof window[k] === \"object\") {\n              try {\n                equalsConstructorPrototype(window[k]);\n              } catch (e) {\n                return true;\n              }\n            }\n          } catch (e) {\n            return true;\n          }\n        }\n        return false;\n      }();\n      var equalsConstructorPrototypeIfNotBuggy = function(o) {\n        if (typeof window === \"undefined\" || !hasAutomationEqualityBug) {\n          return equalsConstructorPrototype(o);\n        }\n        try {\n          return equalsConstructorPrototype(o);\n        } catch (e) {\n          return false;\n        }\n      };\n      keysShim = function keys(object) {\n        var isObject = object !== null && typeof object === \"object\";\n        var isFunction = toStr2.call(object) === \"[object Function]\";\n        var isArguments2 = isArgs(object);\n        var isString2 = isObject && toStr2.call(object) === \"[object String]\";\n        var theKeys = [];\n        if (!isObject && !isFunction && !isArguments2) {\n          throw new TypeError(\"Object.keys called on a non-object\");\n        }\n        var skipProto = hasProtoEnumBug && isFunction;\n        if (isString2 && object.length > 0 && !has.call(object, 0)) {\n          for (var i = 0; i < object.length; ++i) {\n            theKeys.push(String(i));\n          }\n        }\n        if (isArguments2 && object.length > 0) {\n          for (var j = 0; j < object.length; ++j) {\n            theKeys.push(String(j));\n          }\n        } else {\n          for (var name in object) {\n            if (!(skipProto && name === \"prototype\") && has.call(object, name)) {\n              theKeys.push(String(name));\n            }\n          }\n        }\n        if (hasDontEnumBug) {\n          var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n          for (var k = 0; k < dontEnums.length; ++k) {\n            if (!(skipConstructor && dontEnums[k] === \"constructor\") && has.call(object, dontEnums[k])) {\n              theKeys.push(dontEnums[k]);\n            }\n          }\n        }\n        return theKeys;\n      };\n    }\n    implementation$2 = keysShim;\n    return implementation$2;\n  }\n  var objectKeys;\n  var hasRequiredObjectKeys;\n  function requireObjectKeys() {\n    if (hasRequiredObjectKeys)\n      return objectKeys;\n    hasRequiredObjectKeys = 1;\n    var slice = Array.prototype.slice;\n    var isArgs = requireIsArguments();\n    var origKeys = Object.keys;\n    var keysShim = origKeys ? function keys(o) {\n      return origKeys(o);\n    } : requireImplementation$2();\n    var originalKeys = Object.keys;\n    keysShim.shim = function shimObjectKeys() {\n      if (Object.keys) {\n        var keysWorksWithArguments = function() {\n          var args = Object.keys(arguments);\n          return args && args.length === arguments.length;\n        }(1, 2);\n        if (!keysWorksWithArguments) {\n          Object.keys = function keys(object) {\n            if (isArgs(object)) {\n              return originalKeys(slice.call(object));\n            }\n            return originalKeys(object);\n          };\n        }\n      } else {\n        Object.keys = keysShim;\n      }\n      return Object.keys || keysShim;\n    };\n    objectKeys = keysShim;\n    return objectKeys;\n  }\n  var hasPropertyDescriptors_1;\n  var hasRequiredHasPropertyDescriptors;\n  function requireHasPropertyDescriptors() {\n    if (hasRequiredHasPropertyDescriptors)\n      return hasPropertyDescriptors_1;\n    hasRequiredHasPropertyDescriptors = 1;\n    var GetIntrinsic2 = requireGetIntrinsic();\n    var $defineProperty = GetIntrinsic2(\"%Object.defineProperty%\", true);\n    var hasPropertyDescriptors = function hasPropertyDescriptors2() {\n      if ($defineProperty) {\n        try {\n          $defineProperty({}, \"a\", { value: 1 });\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }\n      return false;\n    };\n    hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n      if (!hasPropertyDescriptors()) {\n        return null;\n      }\n      try {\n        return $defineProperty([], \"length\", { value: 1 }).length !== 1;\n      } catch (e) {\n        return true;\n      }\n    };\n    hasPropertyDescriptors_1 = hasPropertyDescriptors;\n    return hasPropertyDescriptors_1;\n  }\n  var defineProperties_1;\n  var hasRequiredDefineProperties;\n  function requireDefineProperties() {\n    if (hasRequiredDefineProperties)\n      return defineProperties_1;\n    hasRequiredDefineProperties = 1;\n    var keys = requireObjectKeys();\n    var hasSymbols2 = typeof Symbol === \"function\" && typeof Symbol(\"foo\") === \"symbol\";\n    var toStr2 = Object.prototype.toString;\n    var concat = Array.prototype.concat;\n    var origDefineProperty = Object.defineProperty;\n    var isFunction = function(fn) {\n      return typeof fn === \"function\" && toStr2.call(fn) === \"[object Function]\";\n    };\n    var hasPropertyDescriptors = requireHasPropertyDescriptors()();\n    var supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n    var defineProperty = function(object, name, value, predicate) {\n      if (name in object) {\n        if (predicate === true) {\n          if (object[name] === value) {\n            return;\n          }\n        } else if (!isFunction(predicate) || !predicate()) {\n          return;\n        }\n      }\n      if (supportsDescriptors) {\n        origDefineProperty(object, name, {\n          configurable: true,\n          enumerable: false,\n          value,\n          writable: true\n        });\n      } else {\n        object[name] = value;\n      }\n    };\n    var defineProperties = function(object, map2) {\n      var predicates = arguments.length > 2 ? arguments[2] : {};\n      var props = keys(map2);\n      if (hasSymbols2) {\n        props = concat.call(props, Object.getOwnPropertySymbols(map2));\n      }\n      for (var i = 0; i < props.length; i += 1) {\n        defineProperty(object, props[i], map2[props[i]], predicates[props[i]]);\n      }\n    };\n    defineProperties.supportsDescriptors = !!supportsDescriptors;\n    defineProperties_1 = defineProperties;\n    return defineProperties_1;\n  }\n  var implementation$1;\n  var hasRequiredImplementation$1;\n  function requireImplementation$1() {\n    if (hasRequiredImplementation$1)\n      return implementation$1;\n    hasRequiredImplementation$1 = 1;\n    var numberIsNaN = function(value) {\n      return value !== value;\n    };\n    implementation$1 = function is(a, b) {\n      if (a === 0 && b === 0) {\n        return 1 / a === 1 / b;\n      }\n      if (a === b) {\n        return true;\n      }\n      if (numberIsNaN(a) && numberIsNaN(b)) {\n        return true;\n      }\n      return false;\n    };\n    return implementation$1;\n  }\n  var polyfill$1;\n  var hasRequiredPolyfill$1;\n  function requirePolyfill$1() {\n    if (hasRequiredPolyfill$1)\n      return polyfill$1;\n    hasRequiredPolyfill$1 = 1;\n    var implementation2 = requireImplementation$1();\n    polyfill$1 = function getPolyfill() {\n      return typeof Object.is === \"function\" ? Object.is : implementation2;\n    };\n    return polyfill$1;\n  }\n  var shim$1;\n  var hasRequiredShim$1;\n  function requireShim$1() {\n    if (hasRequiredShim$1)\n      return shim$1;\n    hasRequiredShim$1 = 1;\n    var getPolyfill = requirePolyfill$1();\n    var define2 = requireDefineProperties();\n    shim$1 = function shimObjectIs() {\n      var polyfill2 = getPolyfill();\n      define2(Object, { is: polyfill2 }, {\n        is: function testObjectIs() {\n          return Object.is !== polyfill2;\n        }\n      });\n      return polyfill2;\n    };\n    return shim$1;\n  }\n  var objectIs;\n  var hasRequiredObjectIs;\n  function requireObjectIs() {\n    if (hasRequiredObjectIs)\n      return objectIs;\n    hasRequiredObjectIs = 1;\n    var define2 = requireDefineProperties();\n    var callBind2 = requireCallBind();\n    var implementation2 = requireImplementation$1();\n    var getPolyfill = requirePolyfill$1();\n    var shim2 = requireShim$1();\n    var polyfill2 = callBind2(getPolyfill(), Object);\n    define2(polyfill2, {\n      getPolyfill,\n      implementation: implementation2,\n      shim: shim2\n    });\n    objectIs = polyfill2;\n    return objectIs;\n  }\n  var implementation;\n  var hasRequiredImplementation;\n  function requireImplementation() {\n    if (hasRequiredImplementation)\n      return implementation;\n    hasRequiredImplementation = 1;\n    implementation = function isNaN2(value) {\n      return value !== value;\n    };\n    return implementation;\n  }\n  var polyfill;\n  var hasRequiredPolyfill;\n  function requirePolyfill() {\n    if (hasRequiredPolyfill)\n      return polyfill;\n    hasRequiredPolyfill = 1;\n    var implementation2 = requireImplementation();\n    polyfill = function getPolyfill() {\n      if (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN(\"a\")) {\n        return Number.isNaN;\n      }\n      return implementation2;\n    };\n    return polyfill;\n  }\n  var shim;\n  var hasRequiredShim;\n  function requireShim() {\n    if (hasRequiredShim)\n      return shim;\n    hasRequiredShim = 1;\n    var define2 = requireDefineProperties();\n    var getPolyfill = requirePolyfill();\n    shim = function shimNumberIsNaN() {\n      var polyfill2 = getPolyfill();\n      define2(Number, { isNaN: polyfill2 }, {\n        isNaN: function testIsNaN() {\n          return Number.isNaN !== polyfill2;\n        }\n      });\n      return polyfill2;\n    };\n    return shim;\n  }\n  var isNan;\n  var hasRequiredIsNan;\n  function requireIsNan() {\n    if (hasRequiredIsNan)\n      return isNan;\n    hasRequiredIsNan = 1;\n    var callBind2 = requireCallBind();\n    var define2 = requireDefineProperties();\n    var implementation2 = requireImplementation();\n    var getPolyfill = requirePolyfill();\n    var shim2 = requireShim();\n    var polyfill2 = callBind2(getPolyfill(), Number);\n    define2(polyfill2, {\n      getPolyfill,\n      implementation: implementation2,\n      shim: shim2\n    });\n    isNan = polyfill2;\n    return isNan;\n  }\n  var comparisons;\n  var hasRequiredComparisons;\n  function requireComparisons() {\n    if (hasRequiredComparisons)\n      return comparisons;\n    hasRequiredComparisons = 1;\n    function _slicedToArray(arr, i) {\n      return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n    }\n    function _nonIterableRest() {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n    function _iterableToArrayLimit(arr, i) {\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = void 0;\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n          if (i && _arr.length === i)\n            break;\n        }\n      } catch (err2) {\n        _d = true;\n        _e = err2;\n      } finally {\n        try {\n          if (!_n && _i[\"return\"] != null)\n            _i[\"return\"]();\n        } finally {\n          if (_d)\n            throw _e;\n        }\n      }\n      return _arr;\n    }\n    function _arrayWithHoles(arr) {\n      if (Array.isArray(arr))\n        return arr;\n    }\n    function _typeof(obj) {\n      if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n        _typeof = function _typeof2(obj2) {\n          return typeof obj2;\n        };\n      } else {\n        _typeof = function _typeof2(obj2) {\n          return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n        };\n      }\n      return _typeof(obj);\n    }\n    var regexFlagsSupported = /a/g.flags !== void 0;\n    var arrayFromSet = function arrayFromSet2(set) {\n      var array = [];\n      set.forEach(function(value) {\n        return array.push(value);\n      });\n      return array;\n    };\n    var arrayFromMap = function arrayFromMap2(map2) {\n      var array = [];\n      map2.forEach(function(value, key) {\n        return array.push([key, value]);\n      });\n      return array;\n    };\n    var objectIs2 = Object.is ? Object.is : requireObjectIs();\n    var objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function() {\n      return [];\n    };\n    var numberIsNaN = Number.isNaN ? Number.isNaN : requireIsNan();\n    function uncurryThis(f) {\n      return f.call.bind(f);\n    }\n    var hasOwnProperty2 = uncurryThis(Object.prototype.hasOwnProperty);\n    var propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\n    var objectToString = uncurryThis(Object.prototype.toString);\n    var _require$types = util.types, isAnyArrayBuffer = _require$types.isAnyArrayBuffer, isArrayBufferView = _require$types.isArrayBufferView, isDate = _require$types.isDate, isMap = _require$types.isMap, isRegExp = _require$types.isRegExp, isSet = _require$types.isSet, isNativeError = _require$types.isNativeError, isBoxedPrimitive = _require$types.isBoxedPrimitive, isNumberObject = _require$types.isNumberObject, isStringObject = _require$types.isStringObject, isBooleanObject = _require$types.isBooleanObject, isBigIntObject = _require$types.isBigIntObject, isSymbolObject = _require$types.isSymbolObject, isFloat32Array = _require$types.isFloat32Array, isFloat64Array = _require$types.isFloat64Array;\n    function isNonIndex(key) {\n      if (key.length === 0 || key.length > 10)\n        return true;\n      for (var i = 0; i < key.length; i++) {\n        var code = key.charCodeAt(i);\n        if (code < 48 || code > 57)\n          return true;\n      }\n      return key.length === 10 && key >= Math.pow(2, 32);\n    }\n    function getOwnNonIndexProperties(value) {\n      return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n    }\n    /*!\n     * The buffer module from node.js, for the browser.\n     *\n     * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n     * @license  MIT\n     */\n    function compare(a, b) {\n      if (a === b) {\n        return 0;\n      }\n      var x = a.length;\n      var y = b.length;\n      for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n        if (a[i] !== b[i]) {\n          x = a[i];\n          y = b[i];\n          break;\n        }\n      }\n      if (x < y) {\n        return -1;\n      }\n      if (y < x) {\n        return 1;\n      }\n      return 0;\n    }\n    var kStrict = true;\n    var kLoose = false;\n    var kNoIterator = 0;\n    var kIsArray = 1;\n    var kIsSet = 2;\n    var kIsMap = 3;\n    function areSimilarRegExps(a, b) {\n      return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n    }\n    function areSimilarFloatArrays(a, b) {\n      if (a.byteLength !== b.byteLength) {\n        return false;\n      }\n      for (var offset = 0; offset < a.byteLength; offset++) {\n        if (a[offset] !== b[offset]) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function areSimilarTypedArrays(a, b) {\n      if (a.byteLength !== b.byteLength) {\n        return false;\n      }\n      return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n    }\n    function areEqualArrayBuffers(buf1, buf2) {\n      return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n    }\n    function isEqualBoxedPrimitive(val1, val2) {\n      if (isNumberObject(val1)) {\n        return isNumberObject(val2) && objectIs2(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n      }\n      if (isStringObject(val1)) {\n        return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n      }\n      if (isBooleanObject(val1)) {\n        return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n      }\n      if (isBigIntObject(val1)) {\n        return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n      }\n      return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n    }\n    function innerDeepEqual(val1, val2, strict, memos) {\n      if (val1 === val2) {\n        if (val1 !== 0)\n          return true;\n        return strict ? objectIs2(val1, val2) : true;\n      }\n      if (strict) {\n        if (_typeof(val1) !== \"object\") {\n          return typeof val1 === \"number\" && numberIsNaN(val1) && numberIsNaN(val2);\n        }\n        if (_typeof(val2) !== \"object\" || val1 === null || val2 === null) {\n          return false;\n        }\n        if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n          return false;\n        }\n      } else {\n        if (val1 === null || _typeof(val1) !== \"object\") {\n          if (val2 === null || _typeof(val2) !== \"object\") {\n            return val1 == val2;\n          }\n          return false;\n        }\n        if (val2 === null || _typeof(val2) !== \"object\") {\n          return false;\n        }\n      }\n      var val1Tag = objectToString(val1);\n      var val2Tag = objectToString(val2);\n      if (val1Tag !== val2Tag) {\n        return false;\n      }\n      if (Array.isArray(val1)) {\n        if (val1.length !== val2.length) {\n          return false;\n        }\n        var keys1 = getOwnNonIndexProperties(val1);\n        var keys2 = getOwnNonIndexProperties(val2);\n        if (keys1.length !== keys2.length) {\n          return false;\n        }\n        return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n      }\n      if (val1Tag === \"[object Object]\") {\n        if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n          return false;\n        }\n      }\n      if (isDate(val1)) {\n        if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n          return false;\n        }\n      } else if (isRegExp(val1)) {\n        if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n          return false;\n        }\n      } else if (isNativeError(val1) || val1 instanceof Error) {\n        if (val1.message !== val2.message || val1.name !== val2.name) {\n          return false;\n        }\n      } else if (isArrayBufferView(val1)) {\n        if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n          if (!areSimilarFloatArrays(val1, val2)) {\n            return false;\n          }\n        } else if (!areSimilarTypedArrays(val1, val2)) {\n          return false;\n        }\n        var _keys = getOwnNonIndexProperties(val1);\n        var _keys2 = getOwnNonIndexProperties(val2);\n        if (_keys.length !== _keys2.length) {\n          return false;\n        }\n        return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n      } else if (isSet(val1)) {\n        if (!isSet(val2) || val1.size !== val2.size) {\n          return false;\n        }\n        return keyCheck(val1, val2, strict, memos, kIsSet);\n      } else if (isMap(val1)) {\n        if (!isMap(val2) || val1.size !== val2.size) {\n          return false;\n        }\n        return keyCheck(val1, val2, strict, memos, kIsMap);\n      } else if (isAnyArrayBuffer(val1)) {\n        if (!areEqualArrayBuffers(val1, val2)) {\n          return false;\n        }\n      } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n        return false;\n      }\n      return keyCheck(val1, val2, strict, memos, kNoIterator);\n    }\n    function getEnumerables(val, keys) {\n      return keys.filter(function(k) {\n        return propertyIsEnumerable(val, k);\n      });\n    }\n    function keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n      if (arguments.length === 5) {\n        aKeys = Object.keys(val1);\n        var bKeys = Object.keys(val2);\n        if (aKeys.length !== bKeys.length) {\n          return false;\n        }\n      }\n      var i = 0;\n      for (; i < aKeys.length; i++) {\n        if (!hasOwnProperty2(val2, aKeys[i])) {\n          return false;\n        }\n      }\n      if (strict && arguments.length === 5) {\n        var symbolKeysA = objectGetOwnPropertySymbols(val1);\n        if (symbolKeysA.length !== 0) {\n          var count2 = 0;\n          for (i = 0; i < symbolKeysA.length; i++) {\n            var key = symbolKeysA[i];\n            if (propertyIsEnumerable(val1, key)) {\n              if (!propertyIsEnumerable(val2, key)) {\n                return false;\n              }\n              aKeys.push(key);\n              count2++;\n            } else if (propertyIsEnumerable(val2, key)) {\n              return false;\n            }\n          }\n          var symbolKeysB = objectGetOwnPropertySymbols(val2);\n          if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count2) {\n            return false;\n          }\n        } else {\n          var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n          if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n            return false;\n          }\n        }\n      }\n      if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n        return true;\n      }\n      if (memos === void 0) {\n        memos = {\n          val1: /* @__PURE__ */ new Map(),\n          val2: /* @__PURE__ */ new Map(),\n          position: 0\n        };\n      } else {\n        var val2MemoA = memos.val1.get(val1);\n        if (val2MemoA !== void 0) {\n          var val2MemoB = memos.val2.get(val2);\n          if (val2MemoB !== void 0) {\n            return val2MemoA === val2MemoB;\n          }\n        }\n        memos.position++;\n      }\n      memos.val1.set(val1, memos.position);\n      memos.val2.set(val2, memos.position);\n      var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n      memos.val1.delete(val1);\n      memos.val2.delete(val2);\n      return areEq;\n    }\n    function setHasEqualElement(set, val1, strict, memo) {\n      var setValues = arrayFromSet(set);\n      for (var i = 0; i < setValues.length; i++) {\n        var val2 = setValues[i];\n        if (innerDeepEqual(val1, val2, strict, memo)) {\n          set.delete(val2);\n          return true;\n        }\n      }\n      return false;\n    }\n    function findLooseMatchingPrimitives(prim) {\n      switch (_typeof(prim)) {\n        case \"undefined\":\n          return null;\n        case \"object\":\n          return void 0;\n        case \"symbol\":\n          return false;\n        case \"string\":\n          prim = +prim;\n        case \"number\":\n          if (numberIsNaN(prim)) {\n            return false;\n          }\n      }\n      return true;\n    }\n    function setMightHaveLoosePrim(a, b, prim) {\n      var altValue = findLooseMatchingPrimitives(prim);\n      if (altValue != null)\n        return altValue;\n      return b.has(altValue) && !a.has(altValue);\n    }\n    function mapMightHaveLoosePrim(a, b, prim, item, memo) {\n      var altValue = findLooseMatchingPrimitives(prim);\n      if (altValue != null) {\n        return altValue;\n      }\n      var curB = b.get(altValue);\n      if (curB === void 0 && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n        return false;\n      }\n      return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n    }\n    function setEquiv(a, b, strict, memo) {\n      var set = null;\n      var aValues = arrayFromSet(a);\n      for (var i = 0; i < aValues.length; i++) {\n        var val = aValues[i];\n        if (_typeof(val) === \"object\" && val !== null) {\n          if (set === null) {\n            set = /* @__PURE__ */ new Set();\n          }\n          set.add(val);\n        } else if (!b.has(val)) {\n          if (strict)\n            return false;\n          if (!setMightHaveLoosePrim(a, b, val)) {\n            return false;\n          }\n          if (set === null) {\n            set = /* @__PURE__ */ new Set();\n          }\n          set.add(val);\n        }\n      }\n      if (set !== null) {\n        var bValues = arrayFromSet(b);\n        for (var _i = 0; _i < bValues.length; _i++) {\n          var _val = bValues[_i];\n          if (_typeof(_val) === \"object\" && _val !== null) {\n            if (!setHasEqualElement(set, _val, strict, memo))\n              return false;\n          } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n            return false;\n          }\n        }\n        return set.size === 0;\n      }\n      return true;\n    }\n    function mapHasEqualEntry(set, map2, key1, item1, strict, memo) {\n      var setValues = arrayFromSet(set);\n      for (var i = 0; i < setValues.length; i++) {\n        var key2 = setValues[i];\n        if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map2.get(key2), strict, memo)) {\n          set.delete(key2);\n          return true;\n        }\n      }\n      return false;\n    }\n    function mapEquiv(a, b, strict, memo) {\n      var set = null;\n      var aEntries = arrayFromMap(a);\n      for (var i = 0; i < aEntries.length; i++) {\n        var _aEntries$i = _slicedToArray(aEntries[i], 2), key = _aEntries$i[0], item1 = _aEntries$i[1];\n        if (_typeof(key) === \"object\" && key !== null) {\n          if (set === null) {\n            set = /* @__PURE__ */ new Set();\n          }\n          set.add(key);\n        } else {\n          var item2 = b.get(key);\n          if (item2 === void 0 && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n            if (strict)\n              return false;\n            if (!mapMightHaveLoosePrim(a, b, key, item1, memo))\n              return false;\n            if (set === null) {\n              set = /* @__PURE__ */ new Set();\n            }\n            set.add(key);\n          }\n        }\n      }\n      if (set !== null) {\n        var bEntries = arrayFromMap(b);\n        for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n          var _bEntries$_i = _slicedToArray(bEntries[_i2], 2), key = _bEntries$_i[0], item = _bEntries$_i[1];\n          if (_typeof(key) === \"object\" && key !== null) {\n            if (!mapHasEqualEntry(set, a, key, item, strict, memo))\n              return false;\n          } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n            return false;\n          }\n        }\n        return set.size === 0;\n      }\n      return true;\n    }\n    function objEquiv(a, b, strict, keys, memos, iterationType) {\n      var i = 0;\n      if (iterationType === kIsSet) {\n        if (!setEquiv(a, b, strict, memos)) {\n          return false;\n        }\n      } else if (iterationType === kIsMap) {\n        if (!mapEquiv(a, b, strict, memos)) {\n          return false;\n        }\n      } else if (iterationType === kIsArray) {\n        for (; i < a.length; i++) {\n          if (hasOwnProperty2(a, i)) {\n            if (!hasOwnProperty2(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n              return false;\n            }\n          } else if (hasOwnProperty2(b, i)) {\n            return false;\n          } else {\n            var keysA = Object.keys(a);\n            for (; i < keysA.length; i++) {\n              var key = keysA[i];\n              if (!hasOwnProperty2(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n                return false;\n              }\n            }\n            if (keysA.length !== Object.keys(b).length) {\n              return false;\n            }\n            return true;\n          }\n        }\n      }\n      for (i = 0; i < keys.length; i++) {\n        var _key = keys[i];\n        if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function isDeepEqual(val1, val2) {\n      return innerDeepEqual(val1, val2, kLoose);\n    }\n    function isDeepStrictEqual(val1, val2) {\n      return innerDeepEqual(val1, val2, kStrict);\n    }\n    comparisons = {\n      isDeepEqual,\n      isDeepStrictEqual\n    };\n    return comparisons;\n  }\n  var hasRequiredAssert;\n  function requireAssert() {\n    if (hasRequiredAssert)\n      return assert$1.exports;\n    hasRequiredAssert = 1;\n    function _typeof(obj) {\n      if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n        _typeof = function _typeof2(obj2) {\n          return typeof obj2;\n        };\n      } else {\n        _typeof = function _typeof2(obj2) {\n          return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n        };\n      }\n      return _typeof(obj);\n    }\n    function _classCallCheck(instance, Constructor) {\n      if (!(instance instanceof Constructor)) {\n        throw new TypeError(\"Cannot call a class as a function\");\n      }\n    }\n    var _require = requireErrors(), _require$codes = _require.codes, ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT, ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE, ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE, ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n    var AssertionError = requireAssertion_error();\n    var _require2 = util, inspect = _require2.inspect;\n    var _require$types = util.types, isPromise = _require$types.isPromise, isRegExp = _require$types.isRegExp;\n    var objectAssign = Object.assign ? Object.assign : requireEs6ObjectAssign().assign;\n    var objectIs2 = Object.is ? Object.is : requireObjectIs();\n    var isDeepEqual;\n    var isDeepStrictEqual;\n    function lazyLoadComparison() {\n      var comparison = requireComparisons();\n      isDeepEqual = comparison.isDeepEqual;\n      isDeepStrictEqual = comparison.isDeepStrictEqual;\n    }\n    var warned = false;\n    var assert2 = assert$1.exports = ok2;\n    var NO_EXCEPTION_SENTINEL = {};\n    function innerFail(obj) {\n      if (obj.message instanceof Error)\n        throw obj.message;\n      throw new AssertionError(obj);\n    }\n    function fail(actual, expected, message, operator, stackStartFn) {\n      var argsLen = arguments.length;\n      var internalMessage;\n      if (argsLen === 0) {\n        internalMessage = \"Failed\";\n      } else if (argsLen === 1) {\n        message = actual;\n        actual = void 0;\n      } else {\n        if (warned === false) {\n          warned = true;\n          var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n          warn(\"assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.\", \"DeprecationWarning\", \"DEP0094\");\n        }\n        if (argsLen === 2)\n          operator = \"!=\";\n      }\n      if (message instanceof Error)\n        throw message;\n      var errArgs = {\n        actual,\n        expected,\n        operator: operator === void 0 ? \"fail\" : operator,\n        stackStartFn: stackStartFn || fail\n      };\n      if (message !== void 0) {\n        errArgs.message = message;\n      }\n      var err2 = new AssertionError(errArgs);\n      if (internalMessage) {\n        err2.message = internalMessage;\n        err2.generatedMessage = true;\n      }\n      throw err2;\n    }\n    assert2.fail = fail;\n    assert2.AssertionError = AssertionError;\n    function innerOk(fn, argLen, value, message) {\n      if (!value) {\n        var generatedMessage = false;\n        if (argLen === 0) {\n          generatedMessage = true;\n          message = \"No value argument passed to `assert.ok()`\";\n        } else if (message instanceof Error) {\n          throw message;\n        }\n        var err2 = new AssertionError({\n          actual: value,\n          expected: true,\n          message,\n          operator: \"==\",\n          stackStartFn: fn\n        });\n        err2.generatedMessage = generatedMessage;\n        throw err2;\n      }\n    }\n    function ok2() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      innerOk.apply(void 0, [ok2, args.length].concat(args));\n    }\n    assert2.ok = ok2;\n    assert2.equal = function equal(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (actual != expected) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"==\",\n          stackStartFn: equal\n        });\n      }\n    };\n    assert2.notEqual = function notEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (actual == expected) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"!=\",\n          stackStartFn: notEqual\n        });\n      }\n    };\n    assert2.deepEqual = function deepEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (isDeepEqual === void 0)\n        lazyLoadComparison();\n      if (!isDeepEqual(actual, expected)) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"deepEqual\",\n          stackStartFn: deepEqual\n        });\n      }\n    };\n    assert2.notDeepEqual = function notDeepEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (isDeepEqual === void 0)\n        lazyLoadComparison();\n      if (isDeepEqual(actual, expected)) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"notDeepEqual\",\n          stackStartFn: notDeepEqual\n        });\n      }\n    };\n    assert2.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (isDeepEqual === void 0)\n        lazyLoadComparison();\n      if (!isDeepStrictEqual(actual, expected)) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"deepStrictEqual\",\n          stackStartFn: deepStrictEqual\n        });\n      }\n    };\n    assert2.notDeepStrictEqual = notDeepStrictEqual;\n    function notDeepStrictEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (isDeepEqual === void 0)\n        lazyLoadComparison();\n      if (isDeepStrictEqual(actual, expected)) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"notDeepStrictEqual\",\n          stackStartFn: notDeepStrictEqual\n        });\n      }\n    }\n    assert2.strictEqual = function strictEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (!objectIs2(actual, expected)) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"strictEqual\",\n          stackStartFn: strictEqual\n        });\n      }\n    };\n    assert2.notStrictEqual = function notStrictEqual(actual, expected, message) {\n      if (arguments.length < 2) {\n        throw new ERR_MISSING_ARGS(\"actual\", \"expected\");\n      }\n      if (objectIs2(actual, expected)) {\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: \"notStrictEqual\",\n          stackStartFn: notStrictEqual\n        });\n      }\n    };\n    var Comparison = function Comparison2(obj, keys, actual) {\n      var _this = this;\n      _classCallCheck(this, Comparison2);\n      keys.forEach(function(key) {\n        if (key in obj) {\n          if (actual !== void 0 && typeof actual[key] === \"string\" && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n            _this[key] = actual[key];\n          } else {\n            _this[key] = obj[key];\n          }\n        }\n      });\n    };\n    function compareExceptionKey(actual, expected, key, message, keys, fn) {\n      if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n        if (!message) {\n          var a = new Comparison(actual, keys);\n          var b = new Comparison(expected, keys, actual);\n          var err2 = new AssertionError({\n            actual: a,\n            expected: b,\n            operator: \"deepStrictEqual\",\n            stackStartFn: fn\n          });\n          err2.actual = actual;\n          err2.expected = expected;\n          err2.operator = fn.name;\n          throw err2;\n        }\n        innerFail({\n          actual,\n          expected,\n          message,\n          operator: fn.name,\n          stackStartFn: fn\n        });\n      }\n    }\n    function expectedException(actual, expected, msg, fn) {\n      if (typeof expected !== \"function\") {\n        if (isRegExp(expected))\n          return expected.test(actual);\n        if (arguments.length === 2) {\n          throw new ERR_INVALID_ARG_TYPE(\"expected\", [\"Function\", \"RegExp\"], expected);\n        }\n        if (_typeof(actual) !== \"object\" || actual === null) {\n          var err2 = new AssertionError({\n            actual,\n            expected,\n            message: msg,\n            operator: \"deepStrictEqual\",\n            stackStartFn: fn\n          });\n          err2.operator = fn.name;\n          throw err2;\n        }\n        var keys = Object.keys(expected);\n        if (expected instanceof Error) {\n          keys.push(\"name\", \"message\");\n        } else if (keys.length === 0) {\n          throw new ERR_INVALID_ARG_VALUE(\"error\", expected, \"may not be an empty object\");\n        }\n        if (isDeepEqual === void 0)\n          lazyLoadComparison();\n        keys.forEach(function(key) {\n          if (typeof actual[key] === \"string\" && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n            return;\n          }\n          compareExceptionKey(actual, expected, key, msg, keys, fn);\n        });\n        return true;\n      }\n      if (expected.prototype !== void 0 && actual instanceof expected) {\n        return true;\n      }\n      if (Error.isPrototypeOf(expected)) {\n        return false;\n      }\n      return expected.call({}, actual) === true;\n    }\n    function getActual(fn) {\n      if (typeof fn !== \"function\") {\n        throw new ERR_INVALID_ARG_TYPE(\"fn\", \"Function\", fn);\n      }\n      try {\n        fn();\n      } catch (e) {\n        return e;\n      }\n      return NO_EXCEPTION_SENTINEL;\n    }\n    function checkIsPromise(obj) {\n      return isPromise(obj) || obj !== null && _typeof(obj) === \"object\" && typeof obj.then === \"function\" && typeof obj.catch === \"function\";\n    }\n    function waitForActual(promiseFn) {\n      return Promise.resolve().then(function() {\n        var resultPromise;\n        if (typeof promiseFn === \"function\") {\n          resultPromise = promiseFn();\n          if (!checkIsPromise(resultPromise)) {\n            throw new ERR_INVALID_RETURN_VALUE(\"instance of Promise\", \"promiseFn\", resultPromise);\n          }\n        } else if (checkIsPromise(promiseFn)) {\n          resultPromise = promiseFn;\n        } else {\n          throw new ERR_INVALID_ARG_TYPE(\"promiseFn\", [\"Function\", \"Promise\"], promiseFn);\n        }\n        return Promise.resolve().then(function() {\n          return resultPromise;\n        }).then(function() {\n          return NO_EXCEPTION_SENTINEL;\n        }).catch(function(e) {\n          return e;\n        });\n      });\n    }\n    function expectsError(stackStartFn, actual, error, message) {\n      if (typeof error === \"string\") {\n        if (arguments.length === 4) {\n          throw new ERR_INVALID_ARG_TYPE(\"error\", [\"Object\", \"Error\", \"Function\", \"RegExp\"], error);\n        }\n        if (_typeof(actual) === \"object\" && actual !== null) {\n          if (actual.message === error) {\n            throw new ERR_AMBIGUOUS_ARGUMENT(\"error/message\", 'The error message \"'.concat(actual.message, '\" is identical to the message.'));\n          }\n        } else if (actual === error) {\n          throw new ERR_AMBIGUOUS_ARGUMENT(\"error/message\", 'The error \"'.concat(actual, '\" is identical to the message.'));\n        }\n        message = error;\n        error = void 0;\n      } else if (error != null && _typeof(error) !== \"object\" && typeof error !== \"function\") {\n        throw new ERR_INVALID_ARG_TYPE(\"error\", [\"Object\", \"Error\", \"Function\", \"RegExp\"], error);\n      }\n      if (actual === NO_EXCEPTION_SENTINEL) {\n        var details = \"\";\n        if (error && error.name) {\n          details += \" (\".concat(error.name, \")\");\n        }\n        details += message ? \": \".concat(message) : \".\";\n        var fnType = stackStartFn.name === \"rejects\" ? \"rejection\" : \"exception\";\n        innerFail({\n          actual: void 0,\n          expected: error,\n          operator: stackStartFn.name,\n          message: \"Missing expected \".concat(fnType).concat(details),\n          stackStartFn\n        });\n      }\n      if (error && !expectedException(actual, error, message, stackStartFn)) {\n        throw actual;\n      }\n    }\n    function expectsNoError(stackStartFn, actual, error, message) {\n      if (actual === NO_EXCEPTION_SENTINEL)\n        return;\n      if (typeof error === \"string\") {\n        message = error;\n        error = void 0;\n      }\n      if (!error || expectedException(actual, error)) {\n        var details = message ? \": \".concat(message) : \".\";\n        var fnType = stackStartFn.name === \"doesNotReject\" ? \"rejection\" : \"exception\";\n        innerFail({\n          actual,\n          expected: error,\n          operator: stackStartFn.name,\n          message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + 'Actual message: \"'.concat(actual && actual.message, '\"'),\n          stackStartFn\n        });\n      }\n      throw actual;\n    }\n    assert2.throws = function throws(promiseFn) {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n      expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n    };\n    assert2.rejects = function rejects(promiseFn) {\n      for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n        args[_key3 - 1] = arguments[_key3];\n      }\n      return waitForActual(promiseFn).then(function(result) {\n        return expectsError.apply(void 0, [rejects, result].concat(args));\n      });\n    };\n    assert2.doesNotThrow = function doesNotThrow(fn) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n    };\n    assert2.doesNotReject = function doesNotReject(fn) {\n      for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n        args[_key5 - 1] = arguments[_key5];\n      }\n      return waitForActual(fn).then(function(result) {\n        return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n      });\n    };\n    assert2.ifError = function ifError(err2) {\n      if (err2 !== null && err2 !== void 0) {\n        var message = \"ifError got unwanted exception: \";\n        if (_typeof(err2) === \"object\" && typeof err2.message === \"string\") {\n          if (err2.message.length === 0 && err2.constructor) {\n            message += err2.constructor.name;\n          } else {\n            message += err2.message;\n          }\n        } else {\n          message += inspect(err2);\n        }\n        var newErr = new AssertionError({\n          actual: err2,\n          expected: null,\n          operator: \"ifError\",\n          message,\n          stackStartFn: ifError\n        });\n        var origStack = err2.stack;\n        if (typeof origStack === \"string\") {\n          var tmp2 = origStack.split(\"\\n\");\n          tmp2.shift();\n          var tmp1 = newErr.stack.split(\"\\n\");\n          for (var i = 0; i < tmp2.length; i++) {\n            var pos = tmp1.indexOf(tmp2[i]);\n            if (pos !== -1) {\n              tmp1 = tmp1.slice(0, pos);\n              break;\n            }\n          }\n          newErr.stack = \"\".concat(tmp1.join(\"\\n\"), \"\\n\").concat(tmp2.join(\"\\n\"));\n        }\n        throw newErr;\n      }\n    };\n    function strict() {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n      innerOk.apply(void 0, [strict, args.length].concat(args));\n    }\n    assert2.strict = objectAssign(strict, assert2, {\n      equal: assert2.strictEqual,\n      deepEqual: assert2.deepStrictEqual,\n      notEqual: assert2.notStrictEqual,\n      notDeepEqual: assert2.notDeepStrictEqual\n    });\n    assert2.strict.strict = assert2.strict;\n    return assert$1.exports;\n  }\n  var assertExports = requireAssert();\n  const assert = /* @__PURE__ */ getDefaultExportFromCjs(assertExports);\n  class Characters {\n    static unicode() {\n      return {\n        hbar: \"─\",\n        vbar: \"│\",\n        xbar: \"┼\",\n        vbar_break: \"·\",\n        vbar_gap: \"⋮\",\n        uarrow: \"▲\",\n        rarrow: \"▶\",\n        ltop: \"╭\",\n        mtop: \"┬\",\n        rtop: \"╮\",\n        lbot: \"╰\",\n        mbot: \"┴\",\n        rbot: \"╯\",\n        lbox: \"[\",\n        rbox: \"]\",\n        lcross: \"├\",\n        rcross: \"┤\",\n        underbar: \"┬\",\n        underline: \"─\"\n      };\n    }\n    static ascii() {\n      return {\n        hbar: \"-\",\n        vbar: \"|\",\n        xbar: \"+\",\n        vbar_break: \"*\",\n        vbar_gap: \":\",\n        uarrow: \"^\",\n        rarrow: \">\",\n        ltop: \",\",\n        mtop: \"v\",\n        rtop: \".\",\n        lbot: \"`\",\n        mbot: \"^\",\n        rbot: \"'\",\n        lbox: \"[\",\n        rbox: \"]\",\n        lcross: \"|\",\n        rcross: \"|\",\n        underbar: \"|\",\n        underline: \"^\"\n      };\n    }\n  }\n  var LabelKind = /* @__PURE__ */ ((LabelKind2) => {\n    LabelKind2[\"Inline\"] = \"Inline\";\n    LabelKind2[\"Multiline\"] = \"Multiline\";\n    return LabelKind2;\n  })(LabelKind || {});\n  class LabelInfo {\n    constructor(kind, label) {\n      this.kind = kind;\n      this.label = label;\n    }\n  }\n  class ReportBuilder {\n    constructor(kind, code, msg, note, help, location, labels, config) {\n      this.kind = kind;\n      this.code = code;\n      this.msg = msg;\n      this.note = note;\n      this.help = help;\n      this.location = location;\n      this.labels = labels;\n      this.config = config;\n    }\n    /// Give this report a numerical code that may be used to more precisely look up the error in documentation.\n    with_code(code) {\n      this.code = some(code.toString().padStart(2, \"0\"));\n      return this;\n    }\n    /// Set the message of this report.\n    set_message(msg) {\n      this.msg = some(msg);\n    }\n    /// Add a message to this report.\n    with_message(msg) {\n      this.msg = some(msg);\n      return this;\n    }\n    /// Set the note of this report.\n    set_note(note) {\n      this.note = some(note);\n    }\n    /// Set the note of this report.\n    with_note(note) {\n      this.set_note(note);\n      return this;\n    }\n    /// Set the help message of this report.\n    set_help(note) {\n      this.help = some(note);\n    }\n    /// Set the help message of this report.\n    with_help(note) {\n      this.set_help(note);\n      return this;\n    }\n    /// Add a label to the report.\n    add_label(label) {\n      this.labels.push(label);\n    }\n    /// Add multiple labels to the report.\n    add_labels(labels) {\n      this.labels.push(...labels);\n    }\n    /// Add a label to the report.\n    with_label(label) {\n      this.add_label(label);\n      return this;\n    }\n    /// Use the given [`Config`] to determine diagnostic attributes.\n    with_config(config) {\n      this.config = config;\n      return this;\n    }\n    /// Finish building the [`Report`].\n    finish() {\n      const r = new Report(\n        this.kind,\n        this.code,\n        this.msg,\n        this.note,\n        this.help,\n        this.location,\n        this.labels,\n        this.config\n      );\n      return r;\n    }\n  }\n  class ReportKind {\n    constructor(...args) {\n    }\n    fmt(f) {\n      if (this instanceof ReportKind.Error)\n        return write(f.buf, \"Error\");\n      if (this instanceof ReportKind.Warning)\n        return write(f.buf, \"Warning\");\n      if (this instanceof ReportKind.Advice)\n        return write(f.buf, \"Advice\");\n      if (this instanceof ReportKind.Custom)\n        return write(f.buf, \"{}\", this.s);\n      throw \"invalid ReportKind\";\n    }\n    static {\n      this.Error = class Error extends ReportKind {\n      };\n    }\n    static {\n      this.Warning = class Warning extends ReportKind {\n      };\n    }\n    static {\n      this.Advice = class Advice extends ReportKind {\n      };\n    }\n    static {\n      this.Custom = class Custom extends ReportKind {\n        constructor(s, color) {\n          super();\n          this.s = s;\n          this.color = color;\n        }\n      };\n    }\n  }\n  class Cache {\n    static from(init) {\n      if (Source.is(init))\n        return init;\n      if (FnCache.is(init))\n        return init;\n      const [id, source] = init;\n      return new IdSource(source.lines(), source.len(), init);\n    }\n  }\n  class Line {\n    constructor(_offset, _len, _chars) {\n      this._offset = _offset;\n      this._len = _len;\n      this._chars = _chars;\n    }\n    /// Get the offset of this line in the original [`Source`] (i.e: the number of characters that precede it).\n    offset() {\n      return this._offset;\n    }\n    /// Get the character length of this line.\n    len() {\n      return this._len;\n    }\n    /// Get the offset span of this line in the original [`Source`].\n    span() {\n      return new Range(this.offset(), this.offset() + this.len());\n    }\n    /// Return an iterator over the characters in the line, excluding trailing whitespace.\n    chars() {\n      return this._chars;\n    }\n  }\n  class Source {\n    constructor(_lines, _len) {\n      this._lines = _lines;\n      this._len = _len;\n    }\n    /// Generate a [`Source`] from the given [`str`].\n    ///\n    /// Note that this function can be expensive for long strings. Use an implementor of [`Cache`] where possible.\n    static from(s, ...args) {\n      let offset = 0;\n      const lines = s.split(\"\\n\").map((line) => {\n        let l = new Line(\n          offset,\n          line.length + 1,\n          // line.chars().count() + 1,\n          line.trimEnd()\n        );\n        offset += l.len();\n        return l;\n      });\n      return new Source(lines, offset);\n    }\n    /// Get the length of the total number of characters in the source.\n    len() {\n      return this._len;\n    }\n    /// Return an iterator over the characters in the source.\n    chars() {\n      return this.lines().map((l) => l.chars()).flat();\n    }\n    /// Get access to a specific, zero-indexed [`Line`].\n    line(idx) {\n      const line = this.lines()[idx];\n      return line === void 0 ? none() : some(line);\n    }\n    /// Return an iterator over the [`Line`]s in this source.\n    lines() {\n      return this._lines;\n    }\n    /// Get the line that the given offset appears on, and the line/column numbers of the offset.\n    ///\n    /// Note that the line/column numbers are zero-indexed.\n    get_offset_line(offset) {\n      if (offset <= this.len()) {\n        let idx = binary_search_by_key(this.lines(), offset, (line2) => line2.offset()).unwrap_or_else(\n          (idx2) => Math.max(0, idx2.saturating_sub(1))\n        );\n        let line = this.lines()[idx];\n        assert(\n          line && offset >= line.offset(),\n          format(\"offset = {}, line.offset = {}, idx = {}\", offset, line?.offset() ?? Infinity, idx)\n        );\n        const os = line.offset();\n        return some([line, idx, offset - os]);\n      } else {\n        return none();\n      }\n    }\n    /// Get the range of lines that this span runs across.\n    ///\n    /// The resulting range is guaranteed to contain valid line indices (i.e: those that can be used for\n    /// [`Source::line`]).\n    get_line_range(span) {\n      let start = this.get_offset_line(span.start).map_or(0, ([_, l, __]) => l);\n      let end = this.get_offset_line(span.end.saturating_sub(1).max(span.start)).map_or(\n        this.lines().length,\n        ([_, l, __]) => l + 1\n      );\n      return new Range(start, end);\n    }\n    fetch(_) {\n      return ok(this);\n    }\n    display(_) {\n      return none();\n    }\n    static is(other) {\n      return other instanceof Source;\n    }\n  }\n  class IdSource extends Source {\n    constructor(_lines, _len, data) {\n      super(_lines, _len);\n      this.data = data;\n    }\n    fetch(id) {\n      return id === this.data[0] ? ok(this.data[1]) : err(format(\"Failed to fetch source '{}'\", id));\n    }\n    display(id) {\n      return some(new Display(id));\n    }\n  }\n  class FnCache {\n    constructor(sources2, get) {\n      this.sources = sources2;\n      this.get = get;\n    }\n    /// Create a new [`FnCache`] with the given fetch function.\n    static new(get) {\n      return new FnCache(/* @__PURE__ */ new Map(), get);\n    }\n    /// Pre-insert a selection of [`Source`]s into this cache.\n    with_sources(sources2) {\n      for (let [id, src2] of sources2) {\n        this.sources.set(id, src2);\n      }\n      return this;\n    }\n    fetch(id) {\n      const entry = this.sources.get(id);\n      if (entry !== void 0)\n        return ok(entry);\n      const source = Source.from(this.get(id));\n      this.sources.set(id, source);\n      return ok(source);\n    }\n    display(id) {\n      return some(id);\n    }\n    static is(other) {\n      return other instanceof FnCache;\n    }\n  }\n  class SourceGroup {\n    constructor(src_id, span, labels) {\n      this.src_id = src_id;\n      this.span = span;\n      this.labels = labels;\n    }\n  }\n  class Report {\n    constructor(kind, code, msg, note, help, location, labels, config) {\n      this.kind = kind;\n      this.code = code;\n      this.msg = msg;\n      this.note = note;\n      this.help = help;\n      this.location = location;\n      this.labels = labels;\n      this.config = config;\n    }\n    /// Begin building a new [`Report`].\n    static build(kind, src_id, offset) {\n      const builder = new ReportBuilder(\n        kind,\n        none(),\n        none(),\n        none(),\n        none(),\n        [Option.from(src_id), offset],\n        [],\n        Config.default()\n      );\n      return builder;\n    }\n    /// Write this diagnostic out to `stderr`.\n    eprint(init) {\n      const cache = Cache.from(init);\n      this.write(cache, stderrWriter);\n    }\n    /// Write this diagnostic out to `stdout`.\n    ///\n    /// In most cases, [`Report::eprint`] is the\n    /// ['more correct'](https://en.wikipedia.org/wiki/Standard_streams#Standard_error_(stderr)) function to use.\n    print(init) {\n      const cache = Cache.from(init);\n      this.write(cache, stdoutWriter);\n    }\n    printTo(init, writer) {\n      const cache = Cache.from(init);\n      this.write(cache, writer);\n    }\n    get_source_groups(cache) {\n      let groups = [];\n      for (let label of this.labels) {\n        let src_display = cache.display(label.span.source());\n        let res = cache.fetch(label.span.source());\n        if (res.is_err()) {\n          console.error(\"Unable to fetch source '{}': {}\", src_display, res.unwrap());\n          continue;\n        }\n        let src2 = res.unwrap();\n        assert(label.span.start <= label.span.end, \"Label start is after its end\");\n        let start_line = src2.get_offset_line(label.span.start).map(([_, l, __]) => l);\n        let end_line = src2.get_offset_line(label.span.end.saturating_sub(1).max(label.span.start)).map(([_, l, __]) => l);\n        let label_info = new LabelInfo(\n          start_line.equal(end_line) ? LabelKind.Inline : LabelKind.Multiline,\n          label\n        );\n        const group = groups.find((g2) => g2.src_id === label.span.source());\n        if (group) {\n          group.span.start = group.span.start.min(label.span.start);\n          group.span.end = group.span.end.max(label.span.end);\n          group.labels.push(label_info);\n        } else {\n          groups.push(\n            new SourceGroup(label.span.source(), new Range(label.span.start, label.span.end), [\n              label_info\n            ])\n          );\n        }\n      }\n      return groups;\n    }\n    /// Write this diagnostic to an implementor of [`Write`].\n    ///\n    /// If you wish to write to `stderr` or `stdout`, you can do so via [`Report::eprint`] or [`Report::print`] respectively.\n    write(cache, w) {\n      let draw = match(this.config.char_set, [\n        [CharSet.Unicode, () => Characters.unicode()],\n        [CharSet.Ascii, () => Characters.ascii()]\n      ]);\n      let code = this.code ? format(\"[E{}] \", this.code) : \"\";\n      let id = format(\"{}{}:\", code, this.kind.name);\n      let kind_color = match(this.kind, [\n        [ReportKind.Error, () => this.config.error_color()],\n        [ReportKind.Warning, () => this.config.warning_color()],\n        [ReportKind.Advice, () => this.config.advice_color()],\n        [ReportKind.Custom, (kind) => kind.color]\n      ]);\n      writeln(w, \"{} {}\", new Display(id).fg(kind_color), new Show(this.msg));\n      let groups = this.get_source_groups(cache);\n      let filtered_groups = groups.filter_map(({ span, src_id }) => {\n        let src_name = cache.display(src_id).map((d) => d.toString()).unwrap_or_else(() => \"<unknown>\");\n        let res = cache.fetch(src_id);\n        if (res.is_err()) {\n          eprintln(\"Unable to fetch source {}: {}\", src_name, res.unwrap());\n          return null;\n        }\n        let src2 = res.unwrap();\n        let line_range = src2.get_line_range(span);\n        let iter = rangeIter(1, Infinity);\n        iter = map(iter, (x) => Math.pow(10, x));\n        iter = take_while(iter, (x) => {\n          const d = Math.floor(line_range.end / x);\n          return d !== 0;\n        });\n        const cnt = count(iter);\n        return cnt + 1;\n      });\n      let line_no_width = max(filtered_groups) ?? 0;\n      let groups_len = groups.length;\n      for (let [group_idx, { src_id, span, labels }] of enumerate(groups)) {\n        let src_name = cache.display(src_id).map((d) => d.toString()).unwrap_or_else(() => \"<unknown>\");\n        let res = cache.fetch(src_id);\n        if (res.is_err()) {\n          eprintln(\"Unable to fetch source {}: {}\", src_name, res.unwrap());\n          continue;\n        }\n        let src2 = res.unwrap();\n        let line_range = src2.get_line_range(span);\n        let location = src_id === this.location[0] ? this.location[1] : labels[0].label.span.start;\n        let [line_no, col_no] = src2.get_offset_line(location).map(([_, idx, col]) => [format(\"{}\", idx + 1), format(\"{}\", col + 1)]).unwrap_or_else(() => [\"?\", \"?\"]);\n        let line_ref = format(\":{}:{}\", line_no, col_no);\n        writeln(\n          w,\n          \"{}{}{}{}{}{}{}\",\n          new Show([\" \", line_no_width + 2]),\n          new Display(group_idx === 0 ? draw.ltop : draw.lcross).fg(this.config.margin_color()),\n          new Display(draw.hbar).fg(this.config.margin_color()),\n          new Display(draw.lbox).fg(this.config.margin_color()),\n          src_name,\n          line_ref,\n          new Display(draw.rbox).fg(this.config.margin_color())\n        );\n        if (!this.config.compact) {\n          writeln(\n            w,\n            \"{}{}\",\n            new Show([\" \", line_no_width + 2]),\n            new Display(draw.vbar).fg(this.config.margin_color())\n          );\n        }\n        class LineLabel {\n          constructor(col, label, multi, draw_msg) {\n            this.col = col;\n            this.label = label;\n            this.multi = multi;\n            this.draw_msg = draw_msg;\n            this.col = Math.floor(col);\n          }\n        }\n        let multi_labels = [];\n        for (let label_info of labels) {\n          if (label_info.kind === LabelKind.Multiline) {\n            multi_labels.push(label_info.label);\n          }\n        }\n        multi_labels.sort((a, b) => b.span.len() - a.span.len());\n        let write_margin = (w2, idx, is_line, is_ellipsis2, draw_labels, report_row, line_labels, margin_label) => {\n          let line_no_margin;\n          if (is_line && !is_ellipsis2) {\n            let line_no2 = format(\"{}\", idx + 1);\n            line_no_margin = format(\n              \"{}{} {}\",\n              new Show([\" \", line_no_width - line_no2.length]),\n              line_no2,\n              draw.vbar\n            );\n          } else {\n            line_no_margin = format(\n              \"{}{}\",\n              new Show([\" \", line_no_width + 1]),\n              is_ellipsis2 ? draw.vbar_gap : draw.vbar_break\n            );\n          }\n          write(\n            w2,\n            \" {}{}\",\n            new Display(line_no_margin).fg(this.config.margin_color()),\n            new Show(some(\" \").filter(() => !this.config.compact))\n          );\n          if (draw_labels) {\n            for (let col of range(0, multi_labels.length + bton(multi_labels.length > 0))) {\n              let corner = none();\n              let hbar = none();\n              let vbar = none();\n              let margin_ptr = none();\n              let multi_label = Option.from(multi_labels[col]);\n              let line_span = src2.line(idx).unwrap().span();\n              for (let [i, label] of enumerate(\n                multi_labels.slice(0, (col + 1).min(multi_labels.length))\n              )) {\n                let margin = margin_label.filter((m) => label === m.label);\n                if (label.span.start <= line_span.end && label.span.end > line_span.start) {\n                  let is_parent = i !== col;\n                  let is_start = line_span.contains(label.span.start);\n                  let is_end = line_span.contains(label.last_offset());\n                  if (margin.filter(() => is_line).is_some()) {\n                    let _margin = margin.filter(() => is_line);\n                    margin_ptr = some([_margin.unwrap(), is_start]);\n                  } else if (!is_start && (!is_end || is_line)) {\n                    vbar = vbar.or(some(label).filter(() => !is_parent));\n                  } else {\n                    if (report_row.is_some() && report_row.map_or(false, (o) => isNumber(o[0]) && isBoolean(o[1]))) {\n                      let [_report_row, is_arrow] = report_row.unwrap();\n                      let label_row = Option.from(\n                        line_labels.enumerate().find(([_, l]) => label === l.label)\n                      ).map_or(0, ([r, _]) => r);\n                      if (_report_row === label_row) {\n                        if (margin.is_some()) {\n                          vbar = some(margin.unwrap().label).filter(() => col === i);\n                          if (is_start) {\n                            continue;\n                          }\n                        }\n                        if (is_arrow) {\n                          hbar = some(label);\n                          if (!is_parent) {\n                            corner = some([label, is_start]);\n                          }\n                        } else if (!is_start) {\n                          vbar = vbar.or(some(label).filter(() => !is_parent));\n                        }\n                      } else {\n                        vbar = vbar.or(\n                          some(label).filter(\n                            () => !is_parent && !!(bton(is_start) ^ bton(_report_row < label_row))\n                          )\n                        );\n                      }\n                    }\n                  }\n                }\n              }\n              if (margin_ptr.is_some() && margin_ptr.map_or(false, (o) => Label.is(o[0]) && isBoolean(o[1])) && is_line) {\n                let [margin, _is_start] = margin_ptr.unwrap();\n                if (_is_start) {\n                  let is_col = multi_label.map_or(false, (ml) => ml === margin.label);\n                  let is_limit = col + 1 === multi_labels.length;\n                  if (!is_col && !is_limit) {\n                    hbar = hbar.or(some(margin.label));\n                  }\n                }\n              }\n              hbar = hbar.filter(\n                (l) => margin_label.map_or(true, (margin) => margin.label !== l) || !is_line\n              );\n              const getCorners = () => {\n                if (corner.is_some() && Array.isArray(corner.unwrap()) && Label.is(corner.unwrap()[0]) && isBoolean(corner.unwrap()[1])) {\n                  let [label, is_start] = corner.unwrap();\n                  return [\n                    new Display(is_start ? draw.ltop : draw.lbot).fg(label.color),\n                    new Display(draw.hbar).fg(label.color)\n                  ];\n                } else if (hbar.filter(() => vbar.is_some() && !this.config.cross_gap).is_some()) {\n                  let label = hbar.filter(() => vbar.is_some() && !this.config.cross_gap).unwrap();\n                  return [\n                    new Display(draw.xbar).fg(label.color),\n                    new Display(draw.hbar).fg(label.color)\n                  ];\n                } else if (hbar.is_some()) {\n                  let label = hbar.unwrap();\n                  const d = new Display(draw.hbar).fg(label.color);\n                  return [d, d];\n                } else if (vbar.is_some()) {\n                  let label = vbar.unwrap();\n                  let vb = new Display(is_ellipsis2 ? draw.vbar_gap : draw.vbar);\n                  return [vb.fg(label.color), new Display(\" \").fg(none())];\n                } else if (margin_ptr.is_some() && is_line) {\n                  let [margin, is_start] = margin_ptr.unwrap();\n                  let is_col = multi_label.map_or(false, (ml) => ml === margin.label);\n                  let is_limit = col === multi_labels.length;\n                  return [\n                    new Display(\n                      is_limit ? draw.rarrow : is_col ? is_start ? draw.ltop : draw.lcross : draw.hbar\n                    ).fg(margin.label.color),\n                    new Display(!is_limit ? draw.hbar : \" \").fg(margin.label.color)\n                  ];\n                } else {\n                  const d = new Display(\" \").fg(none());\n                  return [d, d];\n                }\n              };\n              let [a, b] = getCorners();\n              write(w2, \"{}\", a);\n              if (!this.config.compact) {\n                write(w2, \"{}\", b);\n              }\n            }\n          }\n        };\n        let is_ellipsis = false;\n        for (let idx of range(line_range.start, line_range.end)) {\n          if (src2.line(idx).is_none()) {\n            continue;\n          }\n          let line = src2.line(idx).unwrap();\n          const f_labels = multi_labels.enumerate().filter_map(([_i, label]) => {\n            let is_start = line.span().contains(label.span.start);\n            let is_end = line.span().contains(label.last_offset());\n            if (is_start) {\n              return new LineLabel(label.span.start - line.offset(), label, true, false);\n            } else if (is_end) {\n              return new LineLabel(label.last_offset() - line.offset(), label, true, true);\n            } else {\n              return null;\n            }\n          });\n          let margin_label = min_by_key(f_labels, (ll) => ll.col);\n          let line_labels = multi_labels.enumerate().filter_map(([_i, label]) => {\n            let is_start = line.span().contains(label.span.start);\n            let is_end = line.span().contains(label.last_offset());\n            if (is_start && margin_label.map_or(true, (m) => label !== m.label)) {\n              return new LineLabel(\n                label.span.start - line.offset(),\n                label,\n                true,\n                false\n                // Multi-line spans don;t have their messages drawn at the start\n              );\n            } else if (is_end) {\n              return new LineLabel(\n                label.last_offset() - line.offset(),\n                label,\n                true,\n                true\n                // Multi-line spans have their messages drawn at the end\n              );\n            } else {\n              return null;\n            }\n          });\n          for (let label_info of labels.filter(\n            (l) => l.label.span.start >= line.span().start && l.label.span.end <= line.span().end\n          )) {\n            if (label_info.kind === LabelKind.Inline) {\n              let col = match(this.config.label_attach, [\n                [LabelAttach.Start, () => label_info.label.span.start],\n                [\n                  LabelAttach.Middle,\n                  () => (label_info.label.span.start + label_info.label.span.end) / 2\n                ],\n                [LabelAttach.End, () => label_info.label.last_offset()]\n              ]);\n              line_labels.push(\n                new LineLabel(\n                  col.max(label_info.label.span.start) - line.offset(),\n                  label_info.label,\n                  false,\n                  true\n                )\n              );\n            }\n          }\n          if (line_labels.length === 0 && margin_label.is_none()) {\n            let within_label = multi_labels.some((label) => label.span.contains(line.span().start));\n            if (!is_ellipsis && within_label) {\n              is_ellipsis = true;\n            } else {\n              if (!this.config.compact && !is_ellipsis) {\n                write_margin(w, idx, false, is_ellipsis, false, none(), [], none());\n                write(w, \"\\n\");\n              }\n              is_ellipsis = true;\n              continue;\n            }\n          } else {\n            is_ellipsis = false;\n          }\n          sort_by_key(line_labels, (ll) => ll.label.order);\n          sort_by_key(line_labels, (ll) => ll.col);\n          sort_by_key(line_labels, (ll) => bton(!ll.label.span.start));\n          let arrow_end_space = this.config.compact ? 1 : 2;\n          let arrow_len = line_labels.reduce((l, ll) => {\n            return ll.multi ? line.len() : l.max(ll.label.span.end.saturating_sub(line.offset()));\n          }, 0) + arrow_end_space;\n          let get_vbar = (col, row) => Option.from(\n            line_labels.enumerate().filter(\n              ([_, ll]) => ll.label.msg.is_some() && margin_label.map_or(true, (m) => ll.label !== m.label)\n            ).find(\n              ([j, ll]) => ll.col === col && (row <= j && !ll.multi || row <= j && ll.multi)\n            )\n          ).map(([_, ll]) => ll);\n          let get_highlight = (col) => min_by_key(\n            margin_label.iter().map((ll) => ll.label).chain(multi_labels.map((l) => l)).chain(line_labels.map((l) => l.label)).filter((l) => l.span.contains(line.offset() + col)),\n            // Prioritise displaying smaller spans\n            // .min_by_key((l: any) => [-l.priority, l.span.len()]);\n            // .min_by_key(l => l.span.len()));\n            (l) => -l.priority + l.span.len()\n          );\n          let get_underline = (col) => min_by_key(\n            line_labels.filter((ll) => {\n              return this.config.underlines && // Underlines only occur for inline spans (highlighting can occur for all spans)\n              !ll.multi && ll.label.span.contains(line.offset() + col);\n            }),\n            // Prioritise displaying smaller spans\n            // .min_by_key(ll => [-ll.label.priority, ll.label.span.len()]);\n            // .min_by_key(ll => ll.label.span.len()));\n            // ll => -ll.label.priority + ll.label.span.len());\n            (ll) => ll.label.span.len()\n          );\n          write_margin(w, idx, true, is_ellipsis, true, none(), line_labels, margin_label);\n          if (!is_ellipsis) {\n            for (let [col, _c] of enumerate(line.chars())) {\n              let highlight = get_highlight(col);\n              let color = highlight.is_some() ? highlight.unwrap().color : this.config.unimportant_color();\n              let [c2, width] = this.config.char_width(_c, col);\n              for (let _ of range(0, width)) {\n                write(w, \"{}\", new Display(c2).fg(color));\n              }\n            }\n          }\n          write(w, \"\\n\");\n          for (let row of range(0, line_labels.length)) {\n            let line_label = line_labels[row];\n            if (!this.config.compact) {\n              write_margin(\n                w,\n                idx,\n                false,\n                is_ellipsis,\n                true,\n                some([row, false]),\n                line_labels,\n                margin_label\n              );\n              let chars2 = line.chars();\n              let { next: next2 } = makeIter(chars2);\n              for (let col of range(0, arrow_len)) {\n                let width = next2().map_or(1, (c22) => this.config.char_width(c22, col)[1]);\n                let vbar = get_vbar(col, row);\n                let underline = get_underline(col).filter(() => row === 0);\n                const getCTailOuter = () => {\n                  if (vbar.is_some()) {\n                    let vbar_ll = vbar.unwrap();\n                    const getCTailInner = () => {\n                      if (underline.is_some()) {\n                        if (vbar_ll.label.span.len() <= 1) {\n                          return [draw.underbar, draw.underline];\n                        } else if (line.offset() + col === vbar_ll.label.span.start) {\n                          return [draw.ltop, draw.underbar];\n                        } else if (line.offset() + col === vbar_ll.label.last_offset()) {\n                          return [draw.rtop, draw.underbar];\n                        } else {\n                          return [draw.underbar, draw.underline];\n                        }\n                      } else if (vbar_ll.multi && row === 0 && this.config.multiline_arrows) {\n                        return [draw.uarrow, new Display(\" \")];\n                      } else {\n                        return [draw.vbar, new Display(\" \")];\n                      }\n                    };\n                    let [c22, tail2] = getCTailInner();\n                    return [\n                      new Display(c22).fg(vbar_ll.label.color),\n                      new Display(tail2).fg(vbar_ll.label.color)\n                    ];\n                  } else if (underline.is_some()) {\n                    let underline_ll = underline.unwrap();\n                    return [\n                      new Display(draw.underline).fg(underline_ll.label.color),\n                      new Display(draw.underline).fg(underline_ll.label.color)\n                    ];\n                  } else {\n                    return [new Display(\" \").fg(none()), new Display(\" \").fg(none())];\n                  }\n                };\n                let [c2, tail] = getCTailOuter();\n                for (let i of range(0, width)) {\n                  write(w, \"{}\", i === 0 ? c2 : tail);\n                }\n              }\n              write(w, \"\\n\");\n            }\n            write_margin(\n              w,\n              idx,\n              false,\n              is_ellipsis,\n              true,\n              some([row, true]),\n              line_labels,\n              margin_label\n            );\n            let chars = line.chars();\n            let { next } = makeIter(chars);\n            for (let col of range(0, arrow_len)) {\n              let n = next();\n              let width = n.map_or(1, (c22) => this.config.char_width(c22, col)[1]);\n              let is_hbar = ((col > line_label.col ? 1 : 0) ^ (line_label.multi ? 1 : 0) || line_label.label.msg.is_some() && line_label.draw_msg && col > line_label.col) && line_label.label.msg.is_some();\n              const getctail = () => {\n                if (col === line_label.col && line_label.label.msg.is_some() && margin_label.map_or(true, (m) => line_label.label != m.label)) {\n                  return [\n                    new Display(\n                      line_label.multi ? line_label.draw_msg ? draw.mbot : draw.rbot : draw.lbot\n                    ).fg(line_label.label.color),\n                    new Display(draw.hbar).fg(line_label.label.color)\n                  ];\n                } else if (get_vbar(col, row).filter(() => col != line_label.col || line_label.label.msg.is_some()).is_some()) {\n                  let vbar_ll = get_vbar(col, row).filter(() => col != line_label.col || line_label.label.msg.is_some()).unwrap();\n                  if (!this.config.cross_gap && is_hbar) {\n                    return [\n                      new Display(draw.xbar).fg(line_label.label.color),\n                      new Display(\" \").fg(line_label.label.color)\n                    ];\n                  } else if (is_hbar) {\n                    let d = new Display(draw.hbar).fg(line_label.label.color);\n                    return [d, d];\n                  } else {\n                    return [\n                      new Display(\n                        vbar_ll.multi && row === 0 && this.config.compact ? draw.uarrow : draw.vbar\n                      ).fg(vbar_ll.label.color),\n                      new Display(\" \").fg(line_label.label.color)\n                    ];\n                  }\n                } else if (is_hbar) {\n                  let d = new Display(draw.hbar).fg(line_label.label.color);\n                  return [d, d];\n                } else {\n                  let d = new Display(\" \").fg(none());\n                  return [d, d];\n                }\n              };\n              let [c2, tail] = getctail();\n              if (width > 0) {\n                write(w, \"{}\", c2);\n              }\n              for (let _ of range(1, width)) {\n                write(w, \"{}\", tail);\n              }\n            }\n            if (line_label.draw_msg) {\n              write(w, \" {}\", new Show(line_label.label.msg));\n            }\n            write(w, \"\\n\");\n          }\n        }\n        let is_final_group = group_idx + 1 === groups_len;\n        if (this.help.is_some() && is_final_group) {\n          let note = this.help.unwrap();\n          if (!this.config.compact) {\n            write_margin(w, 0, false, false, true, some([0, false]), [], none());\n            write(w, \"\\n\");\n          }\n          write_margin(w, 0, false, false, true, some([0, false]), [], none());\n          write(w, \"{}: {}\\n\", new Display(\"Help\").fg(this.config.note_color()), note);\n        }\n        if (this.note.is_some() && is_final_group) {\n          let note = this.note.unwrap();\n          if (!this.config.compact) {\n            write_margin(w, 0, false, false, true, some([0, false]), [], none());\n            write(w, \"\\n\");\n          }\n          write_margin(w, 0, false, false, true, some([0, false]), [], none());\n          write(w, \"{}: {}\\n\", new Display(\"Note\").fg(this.config.note_color()), note);\n        }\n        if (!this.config.compact) {\n          if (is_final_group) {\n            let final_margin = format(\"{}{}\", new Show([draw.hbar, line_no_width + 2]), draw.rbot);\n            writeln(w, \"{}\", new Display(final_margin).fg(this.config.margin_color()));\n          } else {\n            writeln(\n              w,\n              \"{}{}\",\n              new Show([\" \", line_no_width + 2]),\n              new Display(draw.vbar).fg(this.config.margin_color())\n            );\n          }\n        }\n      }\n      if (groups_len === 0) {\n        if (this.help.is_some()) {\n          let note = this.help.unwrap();\n          if (!this.config.compact) {\n            write(w, \"\\n\");\n          }\n          write(w, \"{}: {}\\n\", new Display(\"Help\").fg(this.config.note_color()), note);\n        }\n        if (this.note.is_some()) {\n          let note = this.note.unwrap();\n          if (!this.config.compact) {\n            write(w, \"\\n\");\n          }\n          write(w, \"{}: {}\\n\", new Display(\"Note\").fg(this.config.note_color()), note);\n        }\n      }\n    }\n  }\n  function match(kind, matchers) {\n    for (let [type2, then] of matchers) {\n      if (kind === type2)\n        return then(kind);\n    }\n    return null;\n  }\n  function* enumerate(groups) {\n    for (let i = 0; i < groups.length; i++)\n      yield [i, groups[i]];\n    return;\n  }\n  function* map(a, f) {\n    let value = a.next();\n    while (value.done === false) {\n      yield f(value.value);\n      value = a.next();\n    }\n  }\n  function* take_while(a, p) {\n    let current = a.next();\n    while (current.done === false) {\n      if (p(current.value))\n        yield current.value;\n      else\n        break;\n      current = a.next();\n    }\n  }\n  function to_array(a) {\n    let result = [];\n    let current = a.next();\n    while (current.done === false) {\n      result.push(current.value);\n      current = a.next();\n    }\n    return result;\n  }\n  function count(a) {\n    return to_array(a).length;\n  }\n  function makeIter(arr) {\n    let cursor = 0;\n    let next = () => {\n      const res = arr[cursor++];\n      if (res === void 0)\n        return none();\n      return some(res);\n    };\n    return { next, cursor };\n  }\n  var ansi_up = {};\n  (function(exports3) {\n    (function(root, factory2) {\n      if (typeof exports3.nodeName !== \"string\") {\n        factory2(exports3);\n      } else {\n        var exp = {};\n        factory2(exp);\n        root.AnsiUp = exp.default;\n      }\n    })(commonjsGlobal, function(exports4) {\n      var __makeTemplateObject2 = this && this.__makeTemplateObject || function(cooked, raw) {\n        if (Object.defineProperty) {\n          Object.defineProperty(cooked, \"raw\", { value: raw });\n        } else {\n          cooked.raw = raw;\n        }\n        return cooked;\n      };\n      var PacketKind;\n      (function(PacketKind2) {\n        PacketKind2[PacketKind2[\"EOS\"] = 0] = \"EOS\";\n        PacketKind2[PacketKind2[\"Text\"] = 1] = \"Text\";\n        PacketKind2[PacketKind2[\"Incomplete\"] = 2] = \"Incomplete\";\n        PacketKind2[PacketKind2[\"ESC\"] = 3] = \"ESC\";\n        PacketKind2[PacketKind2[\"Unknown\"] = 4] = \"Unknown\";\n        PacketKind2[PacketKind2[\"SGR\"] = 5] = \"SGR\";\n        PacketKind2[PacketKind2[\"OSCURL\"] = 6] = \"OSCURL\";\n      })(PacketKind || (PacketKind = {}));\n      var AnsiUp2 = function() {\n        function AnsiUp3() {\n          this.VERSION = \"5.1.0\";\n          this.setup_palettes();\n          this._use_classes = false;\n          this.bold = false;\n          this.italic = false;\n          this.underline = false;\n          this.fg = this.bg = null;\n          this._buffer = \"\";\n          this._url_whitelist = { \"http\": 1, \"https\": 1 };\n        }\n        Object.defineProperty(AnsiUp3.prototype, \"use_classes\", {\n          get: function() {\n            return this._use_classes;\n          },\n          set: function(arg) {\n            this._use_classes = arg;\n          },\n          enumerable: false,\n          configurable: true\n        });\n        Object.defineProperty(AnsiUp3.prototype, \"url_whitelist\", {\n          get: function() {\n            return this._url_whitelist;\n          },\n          set: function(arg) {\n            this._url_whitelist = arg;\n          },\n          enumerable: false,\n          configurable: true\n        });\n        AnsiUp3.prototype.setup_palettes = function() {\n          var _this = this;\n          this.ansi_colors = [\n            [\n              { rgb: [0, 0, 0], class_name: \"ansi-black\" },\n              { rgb: [187, 0, 0], class_name: \"ansi-red\" },\n              { rgb: [0, 187, 0], class_name: \"ansi-green\" },\n              { rgb: [187, 187, 0], class_name: \"ansi-yellow\" },\n              { rgb: [0, 0, 187], class_name: \"ansi-blue\" },\n              { rgb: [187, 0, 187], class_name: \"ansi-magenta\" },\n              { rgb: [0, 187, 187], class_name: \"ansi-cyan\" },\n              { rgb: [255, 255, 255], class_name: \"ansi-white\" }\n            ],\n            [\n              { rgb: [85, 85, 85], class_name: \"ansi-bright-black\" },\n              { rgb: [255, 85, 85], class_name: \"ansi-bright-red\" },\n              { rgb: [0, 255, 0], class_name: \"ansi-bright-green\" },\n              { rgb: [255, 255, 85], class_name: \"ansi-bright-yellow\" },\n              { rgb: [85, 85, 255], class_name: \"ansi-bright-blue\" },\n              { rgb: [255, 85, 255], class_name: \"ansi-bright-magenta\" },\n              { rgb: [85, 255, 255], class_name: \"ansi-bright-cyan\" },\n              { rgb: [255, 255, 255], class_name: \"ansi-bright-white\" }\n            ]\n          ];\n          this.palette_256 = [];\n          this.ansi_colors.forEach(function(palette) {\n            palette.forEach(function(rec) {\n              _this.palette_256.push(rec);\n            });\n          });\n          var levels = [0, 95, 135, 175, 215, 255];\n          for (var r = 0; r < 6; ++r) {\n            for (var g2 = 0; g2 < 6; ++g2) {\n              for (var b = 0; b < 6; ++b) {\n                var col = { rgb: [levels[r], levels[g2], levels[b]], class_name: \"truecolor\" };\n                this.palette_256.push(col);\n              }\n            }\n          }\n          var grey_level = 8;\n          for (var i = 0; i < 24; ++i, grey_level += 10) {\n            var gry = { rgb: [grey_level, grey_level, grey_level], class_name: \"truecolor\" };\n            this.palette_256.push(gry);\n          }\n        };\n        AnsiUp3.prototype.escape_txt_for_html = function(txt) {\n          return txt.replace(/[&<>\"']/gm, function(str) {\n            if (str === \"&\")\n              return \"&amp;\";\n            if (str === \"<\")\n              return \"&lt;\";\n            if (str === \">\")\n              return \"&gt;\";\n            if (str === '\"')\n              return \"&quot;\";\n            if (str === \"'\")\n              return \"&#x27;\";\n          });\n        };\n        AnsiUp3.prototype.append_buffer = function(txt) {\n          var str = this._buffer + txt;\n          this._buffer = str;\n        };\n        AnsiUp3.prototype.get_next_packet = function() {\n          var pkt = {\n            kind: PacketKind.EOS,\n            text: \"\",\n            url: \"\"\n          };\n          var len = this._buffer.length;\n          if (len == 0)\n            return pkt;\n          var pos = this._buffer.indexOf(\"\\x1B\");\n          if (pos == -1) {\n            pkt.kind = PacketKind.Text;\n            pkt.text = this._buffer;\n            this._buffer = \"\";\n            return pkt;\n          }\n          if (pos > 0) {\n            pkt.kind = PacketKind.Text;\n            pkt.text = this._buffer.slice(0, pos);\n            this._buffer = this._buffer.slice(pos);\n            return pkt;\n          }\n          if (pos == 0) {\n            if (len == 1) {\n              pkt.kind = PacketKind.Incomplete;\n              return pkt;\n            }\n            var next_char = this._buffer.charAt(1);\n            if (next_char != \"[\" && next_char != \"]\") {\n              pkt.kind = PacketKind.ESC;\n              pkt.text = this._buffer.slice(0, 1);\n              this._buffer = this._buffer.slice(1);\n              return pkt;\n            }\n            if (next_char == \"[\") {\n              if (!this._csi_regex) {\n                this._csi_regex = rgx(__makeTemplateObject2([\"\\n                        ^                           # beginning of line\\n                                                    #\\n                                                    # First attempt\\n                        (?:                         # legal sequence\\n                          \\x1B[                      # CSI\\n                          ([<-?]?)              # private-mode char\\n                          ([d;]*)                    # any digits or semicolons\\n                          ([ -/]?               # an intermediate modifier\\n                          [@-~])                # the command\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (?:                         # illegal sequence\\n                          \\x1B[                      # CSI\\n                          [ -~]*                # anything legal\\n                          ([\\0-\u001f:])              # anything illegal\\n                        )\\n                    \"], [\"\\n                        ^                           # beginning of line\\n                                                    #\\n                                                    # First attempt\\n                        (?:                         # legal sequence\\n                          \\\\x1b\\\\[                      # CSI\\n                          ([\\\\x3c-\\\\x3f]?)              # private-mode char\\n                          ([\\\\d;]*)                    # any digits or semicolons\\n                          ([\\\\x20-\\\\x2f]?               # an intermediate modifier\\n                          [\\\\x40-\\\\x7e])                # the command\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (?:                         # illegal sequence\\n                          \\\\x1b\\\\[                      # CSI\\n                          [\\\\x20-\\\\x7e]*                # anything legal\\n                          ([\\\\x00-\\\\x1f:])              # anything illegal\\n                        )\\n                    \"]));\n              }\n              var match2 = this._buffer.match(this._csi_regex);\n              if (match2 === null) {\n                pkt.kind = PacketKind.Incomplete;\n                return pkt;\n              }\n              if (match2[4]) {\n                pkt.kind = PacketKind.ESC;\n                pkt.text = this._buffer.slice(0, 1);\n                this._buffer = this._buffer.slice(1);\n                return pkt;\n              }\n              if (match2[1] != \"\" || match2[3] != \"m\")\n                pkt.kind = PacketKind.Unknown;\n              else\n                pkt.kind = PacketKind.SGR;\n              pkt.text = match2[2];\n              var rpos = match2[0].length;\n              this._buffer = this._buffer.slice(rpos);\n              return pkt;\n            }\n            if (next_char == \"]\") {\n              if (len < 4) {\n                pkt.kind = PacketKind.Incomplete;\n                return pkt;\n              }\n              if (this._buffer.charAt(2) != \"8\" || this._buffer.charAt(3) != \";\") {\n                pkt.kind = PacketKind.ESC;\n                pkt.text = this._buffer.slice(0, 1);\n                this._buffer = this._buffer.slice(1);\n                return pkt;\n              }\n              if (!this._osc_st) {\n                this._osc_st = rgxG(__makeTemplateObject2([\"\\n                        (?:                         # legal sequence\\n                          (\\x1B\\\\)                    # ESC                           |                           # alternate\\n                          (\\x07)                      # BEL (what xterm did)\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (                           # illegal sequence\\n                          [\\0-\u0006]                 # anything illegal\\n                          |                           # alternate\\n                          [\\b-\u001a]                 # anything illegal\\n                          |                           # alternate\\n                          [\u001c-\u001f]                 # anything illegal\\n                        )\\n                    \"], [\"\\n                        (?:                         # legal sequence\\n                          (\\\\x1b\\\\\\\\)                    # ESC \\\\\\n                          |                           # alternate\\n                          (\\\\x07)                      # BEL (what xterm did)\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (                           # illegal sequence\\n                          [\\\\x00-\\\\x06]                 # anything illegal\\n                          |                           # alternate\\n                          [\\\\x08-\\\\x1a]                 # anything illegal\\n                          |                           # alternate\\n                          [\\\\x1c-\\\\x1f]                 # anything illegal\\n                        )\\n                    \"]));\n              }\n              this._osc_st.lastIndex = 0;\n              {\n                var match_1 = this._osc_st.exec(this._buffer);\n                if (match_1 === null) {\n                  pkt.kind = PacketKind.Incomplete;\n                  return pkt;\n                }\n                if (match_1[3]) {\n                  pkt.kind = PacketKind.ESC;\n                  pkt.text = this._buffer.slice(0, 1);\n                  this._buffer = this._buffer.slice(1);\n                  return pkt;\n                }\n              }\n              {\n                var match_2 = this._osc_st.exec(this._buffer);\n                if (match_2 === null) {\n                  pkt.kind = PacketKind.Incomplete;\n                  return pkt;\n                }\n                if (match_2[3]) {\n                  pkt.kind = PacketKind.ESC;\n                  pkt.text = this._buffer.slice(0, 1);\n                  this._buffer = this._buffer.slice(1);\n                  return pkt;\n                }\n              }\n              if (!this._osc_regex) {\n                this._osc_regex = rgx(__makeTemplateObject2([\"\\n                        ^                           # beginning of line\\n                                                    #\\n                        \\x1B]8;                    # OSC Hyperlink\\n                        [ -:<-~]*       # params (excluding ;)\\n                        ;                           # end of params\\n                        ([!-~]{0,512})        # URL capture\\n                        (?:                         # ST\\n                          (?:\\x1B\\\\)                  # ESC                           |                           # alternate\\n                          (?:\\x07)                    # BEL (what xterm did)\\n                        )\\n                        ([ -~]+)              # TEXT capture\\n                        \\x1B]8;;                   # OSC Hyperlink End\\n                        (?:                         # ST\\n                          (?:\\x1B\\\\)                  # ESC                           |                           # alternate\\n                          (?:\\x07)                    # BEL (what xterm did)\\n                        )\\n                    \"], [\"\\n                        ^                           # beginning of line\\n                                                    #\\n                        \\\\x1b\\\\]8;                    # OSC Hyperlink\\n                        [\\\\x20-\\\\x3a\\\\x3c-\\\\x7e]*       # params (excluding ;)\\n                        ;                           # end of params\\n                        ([\\\\x21-\\\\x7e]{0,512})        # URL capture\\n                        (?:                         # ST\\n                          (?:\\\\x1b\\\\\\\\)                  # ESC \\\\\\n                          |                           # alternate\\n                          (?:\\\\x07)                    # BEL (what xterm did)\\n                        )\\n                        ([\\\\x20-\\\\x7e]+)              # TEXT capture\\n                        \\\\x1b\\\\]8;;                   # OSC Hyperlink End\\n                        (?:                         # ST\\n                          (?:\\\\x1b\\\\\\\\)                  # ESC \\\\\\n                          |                           # alternate\\n                          (?:\\\\x07)                    # BEL (what xterm did)\\n                        )\\n                    \"]));\n              }\n              var match2 = this._buffer.match(this._osc_regex);\n              if (match2 === null) {\n                pkt.kind = PacketKind.ESC;\n                pkt.text = this._buffer.slice(0, 1);\n                this._buffer = this._buffer.slice(1);\n                return pkt;\n              }\n              pkt.kind = PacketKind.OSCURL;\n              pkt.url = match2[1];\n              pkt.text = match2[2];\n              var rpos = match2[0].length;\n              this._buffer = this._buffer.slice(rpos);\n              return pkt;\n            }\n          }\n        };\n        AnsiUp3.prototype.ansi_to_html = function(txt) {\n          this.append_buffer(txt);\n          var blocks = [];\n          while (true) {\n            var packet = this.get_next_packet();\n            if (packet.kind == PacketKind.EOS || packet.kind == PacketKind.Incomplete)\n              break;\n            if (packet.kind == PacketKind.ESC || packet.kind == PacketKind.Unknown)\n              continue;\n            if (packet.kind == PacketKind.Text)\n              blocks.push(this.transform_to_html(this.with_state(packet)));\n            else if (packet.kind == PacketKind.SGR)\n              this.process_ansi(packet);\n            else if (packet.kind == PacketKind.OSCURL)\n              blocks.push(this.process_hyperlink(packet));\n          }\n          return blocks.join(\"\");\n        };\n        AnsiUp3.prototype.with_state = function(pkt) {\n          return { bold: this.bold, italic: this.italic, underline: this.underline, fg: this.fg, bg: this.bg, text: pkt.text };\n        };\n        AnsiUp3.prototype.process_ansi = function(pkt) {\n          var sgr_cmds = pkt.text.split(\";\");\n          while (sgr_cmds.length > 0) {\n            var sgr_cmd_str = sgr_cmds.shift();\n            var num = parseInt(sgr_cmd_str, 10);\n            if (isNaN(num) || num === 0) {\n              this.fg = this.bg = null;\n              this.bold = false;\n              this.italic = false;\n              this.underline = false;\n            } else if (num === 1) {\n              this.bold = true;\n            } else if (num === 3) {\n              this.italic = true;\n            } else if (num === 4) {\n              this.underline = true;\n            } else if (num === 22) {\n              this.bold = false;\n            } else if (num === 23) {\n              this.italic = false;\n            } else if (num === 24) {\n              this.underline = false;\n            } else if (num === 39) {\n              this.fg = null;\n            } else if (num === 49) {\n              this.bg = null;\n            } else if (num >= 30 && num < 38) {\n              this.fg = this.ansi_colors[0][num - 30];\n            } else if (num >= 40 && num < 48) {\n              this.bg = this.ansi_colors[0][num - 40];\n            } else if (num >= 90 && num < 98) {\n              this.fg = this.ansi_colors[1][num - 90];\n            } else if (num >= 100 && num < 108) {\n              this.bg = this.ansi_colors[1][num - 100];\n            } else if (num === 38 || num === 48) {\n              if (sgr_cmds.length > 0) {\n                var is_foreground = num === 38;\n                var mode_cmd = sgr_cmds.shift();\n                if (mode_cmd === \"5\" && sgr_cmds.length > 0) {\n                  var palette_index = parseInt(sgr_cmds.shift(), 10);\n                  if (palette_index >= 0 && palette_index <= 255) {\n                    if (is_foreground)\n                      this.fg = this.palette_256[palette_index];\n                    else\n                      this.bg = this.palette_256[palette_index];\n                  }\n                }\n                if (mode_cmd === \"2\" && sgr_cmds.length > 2) {\n                  var r = parseInt(sgr_cmds.shift(), 10);\n                  var g2 = parseInt(sgr_cmds.shift(), 10);\n                  var b = parseInt(sgr_cmds.shift(), 10);\n                  if (r >= 0 && r <= 255 && (g2 >= 0 && g2 <= 255) && (b >= 0 && b <= 255)) {\n                    var c2 = { rgb: [r, g2, b], class_name: \"truecolor\" };\n                    if (is_foreground)\n                      this.fg = c2;\n                    else\n                      this.bg = c2;\n                  }\n                }\n              }\n            }\n          }\n        };\n        AnsiUp3.prototype.transform_to_html = function(fragment) {\n          var txt = fragment.text;\n          if (txt.length === 0)\n            return txt;\n          txt = this.escape_txt_for_html(txt);\n          if (!fragment.bold && !fragment.italic && !fragment.underline && fragment.fg === null && fragment.bg === null)\n            return txt;\n          var styles2 = [];\n          var classes = [];\n          var fg = fragment.fg;\n          var bg = fragment.bg;\n          if (fragment.bold)\n            styles2.push(\"font-weight:bold\");\n          if (fragment.italic)\n            styles2.push(\"font-style:italic\");\n          if (fragment.underline)\n            styles2.push(\"text-decoration:underline\");\n          if (!this._use_classes) {\n            if (fg)\n              styles2.push(\"color:rgb(\" + fg.rgb.join(\",\") + \")\");\n            if (bg)\n              styles2.push(\"background-color:rgb(\" + bg.rgb + \")\");\n          } else {\n            if (fg) {\n              if (fg.class_name !== \"truecolor\") {\n                classes.push(fg.class_name + \"-fg\");\n              } else {\n                styles2.push(\"color:rgb(\" + fg.rgb.join(\",\") + \")\");\n              }\n            }\n            if (bg) {\n              if (bg.class_name !== \"truecolor\") {\n                classes.push(bg.class_name + \"-bg\");\n              } else {\n                styles2.push(\"background-color:rgb(\" + bg.rgb.join(\",\") + \")\");\n              }\n            }\n          }\n          var class_string = \"\";\n          var style_string = \"\";\n          if (classes.length)\n            class_string = ' class=\"' + classes.join(\" \") + '\"';\n          if (styles2.length)\n            style_string = ' style=\"' + styles2.join(\";\") + '\"';\n          return \"<span\" + style_string + class_string + \">\" + txt + \"</span>\";\n        };\n        AnsiUp3.prototype.process_hyperlink = function(pkt) {\n          var parts = pkt.url.split(\":\");\n          if (parts.length < 1)\n            return \"\";\n          if (!this._url_whitelist[parts[0]])\n            return \"\";\n          var result = '<a href=\"' + this.escape_txt_for_html(pkt.url) + '\">' + this.escape_txt_for_html(pkt.text) + \"</a>\";\n          return result;\n        };\n        return AnsiUp3;\n      }();\n      function rgx(tmplObj) {\n        var regexText = tmplObj.raw[0];\n        var wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n        var txt2 = regexText.replace(wsrgx, \"\");\n        return new RegExp(txt2);\n      }\n      function rgxG(tmplObj) {\n        var regexText = tmplObj.raw[0];\n        var wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n        var txt2 = regexText.replace(wsrgx, \"\");\n        return new RegExp(txt2, \"g\");\n      }\n      Object.defineProperty(exports4, \"__esModule\", { value: true });\n      exports4.default = AnsiUp2;\n    });\n  })(ansi_up);\n  const AnsiUp = /* @__PURE__ */ getDefaultExportFromCjs(ansi_up);\n  function nicerError(e) {\n    if (e.code == 1070) {\n      return \"Static/public methods are not supported on traits\";\n    }\n    return e.messageText.toString();\n  }\n  class TagNode {\n    constructor(name, tsNode) {\n      this.tsNode = tsNode;\n      this.name = name;\n      this.tags = [];\n      this.edges = [];\n      this.edgesOther = [];\n    }\n  }\n  class TagGraph {\n    constructor() {\n      this.nodes = [];\n    }\n    addNode(name, tsNode) {\n      let node2 = this.nodes.find((node22) => node22.name === name);\n      if (!node2) {\n        node2 = new TagNode(name, tsNode);\n        this.nodes.push(node2);\n      }\n    }\n    addEdge(from, to) {\n      let fromNode = this.nodes.find((node2) => node2.name === from);\n      if (!fromNode) {\n        fromNode = new TagNode(from);\n        this.nodes.push(fromNode);\n      }\n      let toNode = this.nodes.find((node2) => node2.name === to);\n      if (!toNode) {\n        toNode = new TagNode(to);\n        this.nodes.push(toNode);\n      }\n      fromNode.edges.push(toNode);\n      toNode.edgesOther.push(fromNode);\n    }\n    addTag(name, tag) {\n      let node2 = this.nodes.find((node22) => node22.name === name);\n      if (!node2) {\n        node2 = new TagNode(name);\n        this.nodes.push(node2);\n      }\n      node2.tags.push(tag);\n    }\n    getNode(name) {\n      return this.nodes.find((node2) => node2.name === name);\n    }\n    resolveTagSourceChain(name, tag) {\n      const node2 = this.getNode(name);\n      if (!node2)\n        return [];\n      const chain = [name];\n      const visited = /* @__PURE__ */ new Set();\n      const queue = [node2];\n      while (queue.length > 0) {\n        const node22 = queue.shift();\n        if (visited.has(node22.name))\n          continue;\n        visited.add(node22.name);\n        let nodeWithTag = null;\n        for (const edge of node22.edgesOther) {\n          if (edge.tags.includes(tag)) {\n            nodeWithTag = edge;\n            break;\n          }\n        }\n        if (nodeWithTag) {\n          chain.push(nodeWithTag.name);\n          queue.push(nodeWithTag);\n        } else {\n          return chain;\n        }\n      }\n      return [];\n    }\n    propagateTags() {\n      let changed = true;\n      while (changed) {\n        changed = false;\n        for (const node2 of this.nodes) {\n          for (const edge of node2.edges) {\n            for (const tag of node2.tags) {\n              if (!edge.tags.includes(tag)) {\n                edge.tags.push(tag);\n                changed = true;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  const quickCache = {\n    \"/file.ts\": {\n      outputFiles: [\n        {\n          name: \"/file.js\",\n          writeByteOrderMark: false,\n          text: 'define([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/std_math.ts\": {\n      outputFiles: [\n        {\n          name: \"/std_math.js\",\n          writeByteOrderMark: false,\n          text: `var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\ndefine([\"require\", \"exports\", \"./static-math\"], function (require, exports, static_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.unpack2x16float = exports.unpack2x16unorm = exports.unpack2x16snorm = exports.unpack4x8unorm = exports.unpack4x8snorm = exports.pack2x16float = exports.pack2x16unorm = exports.pack2x16snorm = exports.pack4x8unorm = exports.pack4x8snorm = exports.bitcast = exports.ddyCoarse = exports.ddxCoarse = exports.ddyFine = exports.ddxFine = exports.ddy = exports.ddx = exports.discard = exports.workgroupUniformLoad = exports.storageBarrier = exports.workgroupBarrier = exports.atomic = exports.atomic_internal = exports.FM = exports.intifyVector = exports.swizzle = exports.testDocComment = exports.makeVector = exports.not = exports.or = exports.and = exports.gte = exports.gt = exports.lte = exports.lt = exports.neq = exports.eq = exports.saturate = exports.clamp = exports.max = exports.min = exports.smoothstep = exports.step = exports.radians = exports.degrees = exports.refract = exports.reflect = exports.normalize = exports.distance = exports.dist = exports.length = exports.bilerp = exports.lerp = exports.dot = exports.cross = exports.pingpong = exports.rand3 = exports.rand2 = exports.rand = exports.wrap = exports.frac = exports.inversesqrt = exports.sqrt = exports.log10 = exports.log2 = exports.log = exports.exp = exports.atanh = exports.asinh = exports.acosh = exports.tanh = exports.sinh = exports.cosh = exports.atan2 = exports.atan = exports.asin = exports.acos = exports.tan = exports.sin = exports.cos = exports.sign = exports.round = exports.ceil = exports.floor = exports.abs = exports.positive = exports.negate = exports.bitnot = exports.rshift = exports.lshift = exports.bitxor = exports.bitor = exports.bitand = exports.mod = exports.pow = exports.div = exports.mul = exports.transpose = exports.inverse = exports.sub = exports.add = exports.uint8 = exports.uint4 = exports.uint3 = exports.uint2 = exports.int4 = exports.int3 = exports.int2 = exports.float4 = exports.float3 = exports.float2 = exports.uint = exports.int = exports.float = exports.float4x4 = exports.float3x3 = exports.float2x2 = void 0;\n    function isVector(v) {\n        return Array.isArray(v);\n    }\n    function isScalar(v) {\n        return typeof v === 'number';\n    }\n    function isMatrix(v) {\n        return !!v.__matrix;\n    }\n    /** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\n    function float2x2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0];\n        if (args.length === 4) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix2x2Methods(arr);\n        return arr;\n    }\n    exports.float2x2 = float2x2;\n    /** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\n    function float3x3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 9) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix3x3Methods(arr);\n        return arr;\n    }\n    exports.float3x3 = float3x3;\n    function applyMatrix4x4Methods(arr) {\n        arr.__matrix = 4;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 4 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 4] = value[0];\n            arr[index * 4 + 1] = value[1];\n            arr[index * 4 + 2] = value[2];\n            arr[index * 4 + 3] = value[3];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 4] = op_fn(arr[index * 4], value[0]);\n            arr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\n            arr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\n            arr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\n        };\n    }\n    window.applyMatrix4x4Methods = applyMatrix4x4Methods;\n    function applyMatrix3x3Methods(arr) {\n        arr.__matrix = 3;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 3 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 3] = value[0];\n            arr[index * 3 + 1] = value[1];\n            arr[index * 3 + 2] = value[2];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 3] = op_fn(arr[index * 3], value[0]);\n            arr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\n            arr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\n        };\n    }\n    window.applyMatrix3x3Methods = applyMatrix3x3Methods;\n    function applyMatrix2x2Methods(arr) {\n        arr.__matrix = 2;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 2], arr[index * 2 + 1]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 2 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 2] = value[0];\n            arr[index * 2 + 1] = value[1];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 2] = op_fn(arr[index * 2], value[0]);\n            arr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\n        };\n    }\n    window.applyMatrix2x2Methods = applyMatrix2x2Methods;\n    /** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\n    function float4x4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 16) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix4x4Methods(arr);\n        return arr;\n    }\n    exports.float4x4 = float4x4;\n    /** @shadeup=glsl(float) @shadeup=wgsl(f32) */\n    function float(x) {\n        return x;\n    }\n    exports.float = float;\n    /** @shadeup=glsl(int) @shadeup=wgsl(i32) */\n    function int(x) {\n        return (x | 0);\n    }\n    exports.int = int;\n    /** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\n    function uint(x) {\n        return (x >>> 0);\n    }\n    exports.uint = uint;\n    /** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\n    function float2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float2 = float2;\n    /** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\n    function float3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float3 = float3;\n    /** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\n    function float4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float4 = float4;\n    /** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\n    function int2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int2 = int2;\n    /** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\n    function int3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int3 = int3;\n    /** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\n    function int4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int4 = int4;\n    function uint2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint2 = uint2;\n    function uint3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint3 = uint3;\n    function uint4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint4 = uint4;\n    function uint8(x) {\n        return ((x >>> 0) & 0xff);\n    }\n    exports.uint8 = uint8;\n    function componentMath(a, b, f) {\n        var aIsScalar = isScalar(a);\n        var bIsScalar = isScalar(b);\n        if (aIsScalar && bIsScalar) {\n            return f(a, b);\n        }\n        if (!aIsScalar && !bIsScalar) {\n            if (a.length !== b.length) {\n                throw new Error('Cannot perform component-wise math on vectors of different lengths');\n            }\n            // return a.map((a, i) => f(a, b[i])) as vector;\n            if (a.length == 2) {\n                return [f(a[0], b[0]), f(a[1], b[1])];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])];\n            }\n        }\n        else if (!aIsScalar && bIsScalar) {\n            if (a.length == 2) {\n                return [f(a[0], b), f(a[1], b)];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b)];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)];\n            }\n        }\n        else if (!bIsScalar && aIsScalar) {\n            if (b.length == 2) {\n                return [f(a, b[0]), f(a, b[1])];\n            }\n            else if (b.length == 3) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2])];\n            }\n            else if (b.length == 4) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])];\n            }\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function componentMathSingular(a, f) {\n        if (isScalar(a)) {\n            return f(a);\n        }\n        if (isVector(a)) {\n            return a.map(function (a, i) { return f(a); });\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function cCall(cb, a, b) {\n        return componentMath(a, b, function (a, b) { return a + b; });\n    }\n    function componentOp(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpMatch(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpSingular(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    function componentOpSingularFloat(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    /** @shadeup=univ(!$0$ + $1$)*/\n    var add = function (a, b) {\n        if (typeof a === 'string' && typeof b === 'string') {\n            return \"\".concat(a).concat(b);\n        }\n        else {\n            var addOp = componentOp(function (a, b) { return a + b; });\n            var v = addOp(a, b);\n            return v;\n        }\n    };\n    exports.add = add;\n    /** @shadeup=univ(!$0$ - $1$)*/\n    exports.sub = componentOp(function (a, b) { return a - b; });\n    function matrixMul(a, b) {\n        // Multiply two square matrices of the same dimension row-major\n        var dimension = a.__matrix;\n        var out;\n        if (dimension === 2) {\n            out = float2x2();\n        }\n        else if (dimension === 3) {\n            out = float3x3();\n        }\n        else if (dimension === 4) {\n            var a00 = a[0 * 4 + 0];\n            var a01 = a[0 * 4 + 1];\n            var a02 = a[0 * 4 + 2];\n            var a03 = a[0 * 4 + 3];\n            var a10 = a[1 * 4 + 0];\n            var a11 = a[1 * 4 + 1];\n            var a12 = a[1 * 4 + 2];\n            var a13 = a[1 * 4 + 3];\n            var a20 = a[2 * 4 + 0];\n            var a21 = a[2 * 4 + 1];\n            var a22 = a[2 * 4 + 2];\n            var a23 = a[2 * 4 + 3];\n            var a30 = a[3 * 4 + 0];\n            var a31 = a[3 * 4 + 1];\n            var a32 = a[3 * 4 + 2];\n            var a33 = a[3 * 4 + 3];\n            var b00 = b[0 * 4 + 0];\n            var b01 = b[0 * 4 + 1];\n            var b02 = b[0 * 4 + 2];\n            var b03 = b[0 * 4 + 3];\n            var b10 = b[1 * 4 + 0];\n            var b11 = b[1 * 4 + 1];\n            var b12 = b[1 * 4 + 2];\n            var b13 = b[1 * 4 + 3];\n            var b20 = b[2 * 4 + 0];\n            var b21 = b[2 * 4 + 1];\n            var b22 = b[2 * 4 + 2];\n            var b23 = b[2 * 4 + 3];\n            var b30 = b[3 * 4 + 0];\n            var b31 = b[3 * 4 + 1];\n            var b32 = b[3 * 4 + 2];\n            var b33 = b[3 * 4 + 3];\n            return float4x4(b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30, b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31, b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32, b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33, b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30, b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31, b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32, b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33, b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30, b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31, b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32, b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33, b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30, b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31, b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32, b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33);\n            out = float4x4();\n        }\n        for (var i = 0; i < dimension; i++) {\n            for (var j = 0; j < dimension; j++) {\n                var sum = float(0);\n                for (var k = 0; k < dimension; k++) {\n                    sum += float(a[i * dimension + k] * b[k * dimension + j]);\n                }\n                out[i * dimension + j] = sum;\n            }\n        }\n        return out;\n        if (a.__matrix === 2 && b.__matrix === 2) {\n            var a00_1 = a[0];\n            var a01_1 = a[1];\n            var a10_1 = a[2];\n            var a11_1 = a[3];\n            var b00_1 = b[0];\n            var b01_1 = b[1];\n            var b10_1 = b[2];\n            var b11_1 = b[3];\n            var v = float2x2(a00_1 * b00_1 + a01_1 * b10_1, a00_1 * b01_1 + a01_1 * b11_1, a10_1 * b00_1 + a11_1 * b10_1, a10_1 * b01_1 + a11_1 * b11_1);\n            return v;\n        }\n        else if (a.__matrix === 3 && b.__matrix === 3) {\n            var a00_2 = a[0];\n            var a01_2 = a[1];\n            var a02_1 = a[2];\n            var a10_2 = a[3];\n            var a11_2 = a[4];\n            var a12_1 = a[5];\n            var a20_1 = a[6];\n            var a21_1 = a[7];\n            var a22_1 = a[8];\n            var b00_2 = b[0];\n            var b01_2 = b[1];\n            var b02_1 = b[2];\n            var b10_2 = b[3];\n            var b11_2 = b[4];\n            var b12_1 = b[5];\n            var b20_1 = b[6];\n            var b21_1 = b[7];\n            var b22_1 = b[8];\n            var v = float3x3(a00_2 * b00_2 + a01_2 * b10_2 + a02_1 * b20_1, a00_2 * b01_2 + a01_2 * b11_2 + a02_1 * b21_1, a00_2 * b02_1 + a01_2 * b12_1 + a02_1 * b22_1, a10_2 * b00_2 + a11_2 * b10_2 + a12_1 * b20_1, a10_2 * b01_2 + a11_2 * b11_2 + a12_1 * b21_1, a10_2 * b02_1 + a11_2 * b12_1 + a12_1 * b22_1, a20_1 * b00_2 + a21_1 * b10_2 + a22_1 * b20_1, a20_1 * b01_2 + a21_1 * b11_2 + a22_1 * b21_1, a20_1 * b02_1 + a21_1 * b12_1 + a22_1 * b22_1);\n            return v;\n        }\n        else if (a.__matrix === 4 && b.__matrix === 4) {\n            var a00_3 = a[0];\n            var a01_3 = a[1];\n            var a02_2 = a[2];\n            var a03_1 = a[3];\n            var a10_3 = a[4];\n            var a11_3 = a[5];\n            var a12_2 = a[6];\n            var a13_1 = a[7];\n            var a20_2 = a[8];\n            var a21_2 = a[9];\n            var a22_2 = a[10];\n            var a23_1 = a[11];\n            var a30_1 = a[12];\n            var a31_1 = a[13];\n            var a32_1 = a[14];\n            var a33_1 = a[15];\n            var b00_3 = b[0];\n            var b01_3 = b[1];\n            var b02_2 = b[2];\n            var b03_1 = b[3];\n            var b10_3 = b[4];\n            var b11_3 = b[5];\n            var b12_2 = b[6];\n            var b13_1 = b[7];\n            var b20_2 = b[8];\n            var b21_2 = b[9];\n            var b22_2 = b[10];\n            var b23_1 = b[11];\n            var b30_1 = b[12];\n            var b31_1 = b[13];\n            var b32_1 = b[14];\n            var b33_1 = b[15];\n            var v = float4x4(a00_3 * b00_3 + a01_3 * b10_3 + a02_2 * b20_2 + a03_1 * b30_1, a00_3 * b01_3 + a01_3 * b11_3 + a02_2 * b21_2 + a03_1 * b31_1, a00_3 * b02_2 + a01_3 * b12_2 + a02_2 * b22_2 + a03_1 * b32_1, a00_3 * b03_1 + a01_3 * b13_1 + a02_2 * b23_1 + a03_1 * b33_1, a10_3 * b00_3 + a11_3 * b10_3 + a12_2 * b20_2 + a13_1 * b30_1, a10_3 * b01_3 + a11_3 * b11_3 + a12_2 * b21_2 + a13_1 * b31_1, a10_3 * b02_2 + a11_3 * b12_2 + a12_2 * b22_2 + a13_1 * b32_1, a10_3 * b03_1 + a11_3 * b13_1 + a12_2 * b23_1 + a13_1 * b33_1, a20_2 * b00_3 + a21_2 * b10_3 + a22_2 * b20_2 + a23_1 * b30_1, a20_2 * b01_3 + a21_2 * b11_3 + a22_2 * b21_2 + a23_1 * b31_1, a20_2 * b02_2 + a21_2 * b12_2 + a22_2 * b22_2 + a23_1 * b32_1, a20_2 * b03_1 + a21_2 * b13_1 + a22_2 * b23_1 + a23_1 * b33_1, a30_1 * b00_3 + a31_1 * b10_3 + a32_1 * b20_2 + a33_1 * b30_1, a30_1 * b01_3 + a31_1 * b11_3 + a32_1 * b21_2 + a33_1 * b31_1, a30_1 * b02_2 + a31_1 * b12_2 + a32_1 * b22_2 + a33_1 * b32_1, a30_1 * b03_1 + a31_1 * b13_1 + a32_1 * b23_1 + a33_1 * b33_1);\n            return v;\n        }\n        else {\n            throw new Error('Invalid matrix multiplication');\n        }\n    }\n    function matrixInversefloat2x2(m) {\n        var a = m.__index(0)[0], b = m.__index(1)[0], c = m.__index(0)[1], d = m.__index(1)[1];\n        var det = a * d - b * c;\n        if (det === 0) {\n            throw new Error('Matrix determinant is zero');\n        }\n        var detInv = 1.0 / det;\n        return float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\n    }\n    function matrixInversefloat3x3(m) {\n        var n11 = m.__index(0)[0], n12 = m.__index(1)[0], n13 = m.__index(2)[0];\n        var n21 = m.__index(0)[1], n22 = m.__index(1)[1], n23 = m.__index(2)[1];\n        var n31 = m.__index(0)[2], n32 = m.__index(1)[2], n33 = m.__index(2)[2];\n        var t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13;\n        var det = n11 * t11 + n21 * t12 + n31 * t13;\n        if (det === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        var detInv = 1 / det;\n        var v = float3x3(t11 * detInv, (n31 * n23 - n33 * n21) * detInv, (n32 * n21 - n31 * n22) * detInv, t12 * detInv, (n33 * n11 - n31 * n13) * detInv, (n31 * n12 - n32 * n11) * detInv, t13 * detInv, (n21 * n13 - n23 * n11) * detInv, (n22 * n11 - n21 * n12) * detInv);\n        return v;\n    }\n    function matrixInversefloat4x4(m) {\n        var m00 = m[0 * 4 + 0];\n        var m01 = m[0 * 4 + 1];\n        var m02 = m[0 * 4 + 2];\n        var m03 = m[0 * 4 + 3];\n        var m10 = m[1 * 4 + 0];\n        var m11 = m[1 * 4 + 1];\n        var m12 = m[1 * 4 + 2];\n        var m13 = m[1 * 4 + 3];\n        var m20 = m[2 * 4 + 0];\n        var m21 = m[2 * 4 + 1];\n        var m22 = m[2 * 4 + 2];\n        var m23 = m[2 * 4 + 3];\n        var m30 = m[3 * 4 + 0];\n        var m31 = m[3 * 4 + 1];\n        var m32 = m[3 * 4 + 2];\n        var m33 = m[3 * 4 + 3];\n        var tmp_0 = m22 * m33;\n        var tmp_1 = m32 * m23;\n        var tmp_2 = m12 * m33;\n        var tmp_3 = m32 * m13;\n        var tmp_4 = m12 * m23;\n        var tmp_5 = m22 * m13;\n        var tmp_6 = m02 * m33;\n        var tmp_7 = m32 * m03;\n        var tmp_8 = m02 * m23;\n        var tmp_9 = m22 * m03;\n        var tmp_10 = m02 * m13;\n        var tmp_11 = m12 * m03;\n        var tmp_12 = m20 * m31;\n        var tmp_13 = m30 * m21;\n        var tmp_14 = m10 * m31;\n        var tmp_15 = m30 * m11;\n        var tmp_16 = m10 * m21;\n        var tmp_17 = m20 * m11;\n        var tmp_18 = m00 * m31;\n        var tmp_19 = m30 * m01;\n        var tmp_20 = m00 * m21;\n        var tmp_21 = m20 * m01;\n        var tmp_22 = m00 * m11;\n        var tmp_23 = m10 * m01;\n        var t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\n        var t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\n        var t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\n        var t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\n        var d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n        if (d === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        return float4x4(d * t0, d * t1, d * t2, d * t3, d * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)), d * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)), d * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)), d * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)), d * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)), d * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)), d * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)), d * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)), d * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)), d * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)), d * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)), d * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02)));\n    }\n    function matrixTransposefloat2x2(m) {\n        return float2x2(m.__index(0)[0], m.__index(1)[0], m.__index(0)[1], m.__index(1)[1]);\n    }\n    function matrixTransposefloat3x3(m) {\n        return float3x3(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2]);\n    }\n    function matrixTransposefloat4x4(m) {\n        return float4x4(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(3)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(3)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2], m.__index(3)[2], m.__index(0)[3], m.__index(1)[3], m.__index(2)[3], m.__index(3)[3]);\n    }\n    function matrixMul2x2float2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j * 2 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul3x3float3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j * 3 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul4x4float4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var j = 0; j < 4; j++) {\n            for (var i = 0; i < 4; i++) {\n                c[i] += a[j * 4 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat22x2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j] * b[i * 2 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat33x3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j] * b[i * 3 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat44x4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var i = 0; i < 4; i++) {\n            for (var j = 0; j < 4; j++) {\n                c[i] += a[j] * b[i * 4 + j];\n            }\n        }\n        return c;\n    }\n    var mulFunc = componentOp(function (a, b) { return a * b; });\n    function inverse(a) {\n        if (a.__matrix == 2) {\n            return matrixInversefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixInversefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixInversefloat4x4(a);\n        }\n    }\n    exports.inverse = inverse;\n    function transpose(a) {\n        if (a.__matrix == 2) {\n            return matrixTransposefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixTransposefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixTransposefloat4x4(a);\n        }\n    }\n    exports.transpose = transpose;\n    /** @shadeup=univ(!$0$ * $1$)*/\n    var mul = function (a, b) {\n        if (isMatrix(a) || isMatrix(b)) {\n            if (isMatrix(a) && isMatrix(b)) {\n                return matrixMul(a, b);\n            }\n            else {\n                if (isMatrix(a) && typeof b == 'number') {\n                    return componentMath(b, a, function (a, b) { return a * b; });\n                }\n                else if (isMatrix(b) && typeof a == 'number') {\n                    return componentMath(a, b, function (a, b) { return a * b; });\n                }\n                else {\n                    if (isMatrix(a)) {\n                        if (a.length == 4) {\n                            return matrixMul2x2float2(a, b);\n                        }\n                        else if (a.length == 9) {\n                            return matrixMul3x3float3(a, b);\n                        }\n                        else if (a.length == 16) {\n                            return matrixMul4x4float4(a, b);\n                        }\n                    }\n                    else if (isMatrix(b)) {\n                        if (b.length == 4) {\n                            return matrixMulfloat22x2(a, b);\n                        }\n                        else if (b.length == 9) {\n                            return matrixMulfloat33x3(a, b);\n                        }\n                        else if (b.length == 16) {\n                            return matrixMulfloat44x4(a, b);\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            return mulFunc(a, b);\n        }\n    };\n    exports.mul = mul;\n    /** @shadeup=univ(!$0$ / $1$)*/\n    exports.div = componentOp(function (a, b) { return a / b; });\n    /** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\n    exports.pow = componentOp(function (a, b) { return Math.pow(a, b); });\n    /** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\n    exports.mod = componentOpMatch(function (a, b) { return a - b * Math.floor(a / b); });\n    /** @shadeup=univ(!$0$ & $1$)*/\n    exports.bitand = componentOp(function (a, b) { return a & b; });\n    /** @shadeup=univ(!$0$ | $1$)*/\n    exports.bitor = componentOp(function (a, b) { return a | b; });\n    /** @shadeup=univ(!$0$ ^ $1$)*/\n    exports.bitxor = componentOp(function (a, b) { return a ^ b; });\n    /** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\n    exports.lshift = componentOp(function (a, b) { return a << b; });\n    /** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\n    exports.rshift = componentOp(function (a, b) { return a >> b; });\n    /** @shadeup=univ(!~$0$)*/\n    exports.bitnot = componentOpSingular(function (a) { return ~a; });\n    /** @shadeup=univ(!-($0$))*/\n    exports.negate = componentOpSingular(function (a) { return -a; });\n    /** @shadeup=univ(!+($0$))*/\n    exports.positive = componentOpSingular(function (a) { return Math.abs(a); });\n    /** @shadeup=univ(abs)*/\n    exports.abs = componentOpSingular(function (a) { return Math.abs(a); });\n    /**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\n    exports.floor = componentOpSingular(Math.floor);\n    /** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\n    exports.ceil = componentOpSingular(Math.ceil);\n    /** @shadeup=univ(round)*/\n    exports.round = componentOpSingular(Math.round);\n    /** @shadeup=univ(sign)*/\n    exports.sign = componentOpSingular(Math.sign);\n    /** @shadeup=univ(cos) */\n    exports.cos = componentOpSingular(Math.cos);\n    /** @shadeup=univ(sin) */\n    exports.sin = componentOpSingularFloat(Math.sin);\n    /** @shadeup=univ(tan) */\n    exports.tan = componentOpSingular(Math.tan);\n    /** @shadeup=univ(acos) */\n    exports.acos = componentOpSingular(Math.acos);\n    /** @shadeup=univ(asin) */\n    exports.asin = componentOpSingular(Math.asin);\n    /** @shadeup=univ(atan) */\n    exports.atan = componentOpSingular(Math.atan);\n    /** @shadeup=univ(atan2) */\n    exports.atan2 = Math.atan2;\n    /** @shadeup=univ(cosh) */\n    exports.cosh = componentOpSingular(Math.cosh);\n    /** @shadeup=univ(sinh) */\n    exports.sinh = componentOpSingular(Math.sinh);\n    /** @shadeup=univ(tanh) */\n    exports.tanh = componentOpSingular(Math.tanh);\n    /** @shadeup=univ(acosh) */\n    exports.acosh = componentOpSingular(Math.acosh);\n    /** @shadeup=univ(asinh) */\n    exports.asinh = componentOpSingular(Math.asinh);\n    /** @shadeup=univ(atanh) */\n    exports.atanh = componentOpSingular(Math.atanh);\n    /** @shadeup=univ(exp) */\n    exports.exp = componentOpSingular(Math.exp);\n    /** @shadeup=univ(log) */\n    exports.log = componentOpSingular(Math.log);\n    /** @shadeup=univ(log2) */\n    exports.log2 = componentOpSingular(Math.log2);\n    /** @shadeup=univ(log10) */\n    exports.log10 = componentOpSingular(Math.log10);\n    /** @shadeup=univ(sqrt) */\n    exports.sqrt = componentOpSingular(Math.sqrt);\n    /** @shadeup=univ(inversesqrt) */\n    exports.inversesqrt = componentOpSingular(function (a) { return 1 / Math.sqrt(a); });\n    /** @shadeup=univ(fract)*/\n    exports.frac = componentOpSingular(function (a) { return a - Math.floor(a); });\n    function wrap(x, low, high) {\n        if ((0, exports.lt)(x, low)) {\n            var rng = high - low;\n            var s1 = low - x;\n            var ms = s1 % rng;\n            return high - ms;\n        }\n        else if ((0, exports.gte)(x, high)) {\n            var rng = high - low;\n            var s1 = x - high;\n            var ms = s1 % rng;\n            return low + ms;\n        }\n        else {\n            return x;\n        }\n        // return add(mod(sub(x, low), sub(high, low)), low) as T;\n    }\n    exports.wrap = wrap;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand(seed) {\n        if (typeof seed === 'number') {\n            return (0, exports.frac)(Math.sin(seed * float(91.3458)) * float(47453.5453));\n        }\n        else {\n            return Math.random();\n        }\n    }\n    exports.rand = rand;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand2(seed) {\n        return (0, exports.frac)(Math.sin((0, exports.dot)(seed, float2(12.9898, 4.1414))) * float(43758.5453));\n    }\n    exports.rand2 = rand2;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand3(seed) {\n        var _a, _b;\n        return rand2((_a = swizzle(seed, 'xy'), _b = rand(swizzle(seed, 'z')), [_a[0] + _b, _a[1] + _b]));\n    }\n    exports.rand3 = rand3;\n    // export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\n    // \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\n    // }\n    function pingpong(x, length) {\n        var t = x % (length * float(2));\n        return length - Math.abs(t - length);\n    }\n    exports.pingpong = pingpong;\n    function vectorMath_2to1_3to3(cb2, cb3) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to3_4to4(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to1_4to1(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function cross2(a, b) {\n        return a[0] * b[1] - a[1] * b[0];\n    }\n    function cross3(a, b) {\n        return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n    }\n    exports.cross = vectorMath_2to1_3to3(cross2, cross3);\n    function dot2(a, b) {\n        return a[0] * b[0] + a[1] * b[1];\n    }\n    function dot3(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n    }\n    function dot4(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n    }\n    /** @shadeup=univ(dot)*/\n    exports.dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\n    function lerp1(a, b, t) {\n        return (a + (b - a) * t);\n    }\n    function lerp2(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)];\n    }\n    function lerp3(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)];\n    }\n    function lerp4(a, b, t) {\n        return [\n            lerp1(a[0], b[0], t),\n            lerp1(a[1], b[1], t),\n            lerp1(a[2], b[2], t),\n            lerp1(a[3], b[3], t)\n        ];\n    }\n    function lerp2x2(a, b, t) {\n        return float2x2(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t));\n    }\n    function lerp3x3(a, b, t) {\n        return float3x3(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t));\n    }\n    function lerp4x4(a, b, t) {\n        return float4x4(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t), lerp1(a[9], b[9], t), lerp1(a[10], b[10], t), lerp1(a[11], b[11], t), lerp1(a[12], b[12], t), lerp1(a[13], b[13], t), lerp1(a[14], b[14], t), lerp1(a[15], b[15], t));\n    }\n    /** @shadeup=univ(mix)*/\n    function lerp(a, b, t) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\n            return lerp1(a, b, t);\n        }\n        else if (isMatrix(a) && isMatrix(b)) {\n            if (a.length === 4 && b.length === 4) {\n                return lerp2x2(a, b, t);\n            }\n            else if (a.length === 9 && b.length === 9) {\n                return lerp3x3(a, b, t);\n            }\n            else if (a.length === 16 && b.length === 16) {\n                return lerp4x4(a, b, t);\n            }\n            else {\n                throw new Error('Invalid matrix length');\n            }\n        }\n        else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\n            return lerp2(a, b, t);\n        }\n        else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\n            return lerp3(a, b, t);\n        }\n        else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\n            return lerp4(a, b, t);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.lerp = lerp;\n    /** @shadeup=univ(!bilerp_\\`0\\`($0$, $1$, $2$, $3$, $4$, $5$)) */\n    function bilerp(a, b, c, d, u, v) {\n        return lerp(lerp(a, b, u), lerp(c, d, u), v);\n    }\n    exports.bilerp = bilerp;\n    /** @shadeup=univ(length)*/\n    function length(a) {\n        if (typeof a === 'number') {\n            return Math.abs(a);\n        }\n        else if (a.length === 2) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\n        }\n        else if (a.length === 3) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\n        }\n        else if (a.length === 4) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.length = length;\n    function dist(a, b) {\n        return length((0, exports.sub)(a, b));\n    }\n    exports.dist = dist;\n    /** @shadeup=univ(distance)*/\n    exports.distance = dist;\n    /** @shadeup=univ(normalize)*/\n    function normalize(a) {\n        if (a.length === 2) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l];\n        }\n        else if (a.length === 3) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l];\n        }\n        else if (a.length === 4) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.normalize = normalize;\n    /** @shadeup=univ(reflect)*/\n    function reflect(a, b) {\n        if (a.length === 2 && b.length === 2) {\n            return reflect2(a, b);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return reflect3(a, b);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return reflect4(a, b);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.reflect = reflect;\n    function reflect2(b, a) {\n        var dot = dot2(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\n    }\n    function reflect3(b, a) {\n        var dot = dot3(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\n    }\n    function reflect4(b, a) {\n        var dot = dot4(a, b);\n        return [\n            b[0] - 2 * dot * a[0],\n            b[1] - 2 * dot * a[1],\n            b[2] - 2 * dot * a[2],\n            b[3] - 2 * dot * a[3]\n        ];\n    }\n    /** @shadeup=univ(refract)*/\n    function refract(a, b, eta) {\n        if (a.length === 2 && b.length === 2) {\n            return refract2(a, b, eta);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return refract3(a, b, eta);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return refract4(a, b, eta);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.refract = refract;\n    function refract2(b, a, eta) {\n        var dot = dot2(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\n            ];\n    }\n    function refract3(b, a, eta) {\n        var dot = dot3(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\n            ];\n    }\n    function refract4(b, a, eta) {\n        var dot = dot4(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\n                eta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\n            ];\n    }\n    /** @shadeup=univ(degrees)*/\n    function degrees(a) {\n        return float((a * 180) / Math.PI);\n    }\n    exports.degrees = degrees;\n    /** @shadeup=univ(radians)*/\n    function radians(a) {\n        return float((a * Math.PI) / 180);\n    }\n    exports.radians = radians;\n    /** @shadeup=univ(step)*/\n    function step(edge, x) {\n        if (typeof edge === 'number') {\n            if (typeof x === 'number') {\n                return x < edge ? 0 : 1;\n            }\n            else {\n                return x.map(function (v) { return (v < edge ? 0 : 1); });\n            }\n        }\n        else {\n            if (typeof x === 'number') {\n                return edge.map(function (v) { return (x < v ? 0 : 1); });\n            }\n            else {\n                return edge.map(function (v, i) { return (x[i] < v ? 0 : 1); });\n            }\n        }\n    }\n    exports.step = step;\n    function _smoothstep(a, b, x) {\n        var t = clamp((x - a) / (b - a), 0, 1);\n        return t * t * (3 - 2 * t);\n    }\n    /** @shadeup=univ(smoothstep)*/\n    function smoothstep(a, b, x) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\n            return _smoothstep(a, b, x);\n        }\n        else if (typeof a === 'number' && typeof b === 'number') {\n            return x.map(function (v) { return _smoothstep(a, b, v); });\n        }\n        else {\n            return a.map(function (v, i) { return _smoothstep(v, b[i], x[i]); });\n        }\n    }\n    exports.smoothstep = smoothstep;\n    function componentReduce(vectors, cb) {\n        var result = [];\n        var _loop_1 = function (i) {\n            result.push(cb(vectors.map(function (v) { return v[i]; })));\n        };\n        for (var i = 0; i < vectors[0].length; i++) {\n            _loop_1(i);\n        }\n        return result;\n    }\n    /** @shadeup=univ(min)*/\n    function min() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.min.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var minTo_1 = args[1];\n                return args[0].map(function (v) { return Math.min(v, minTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var minFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.min(minFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.min.apply(Math, a); });\n            }\n            else {\n                return Math.min.apply(Math, args);\n            }\n        }\n    }\n    exports.min = min;\n    /** @shadeup=univ(max)*/\n    function max() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.max.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var maxTo_1 = args[1];\n                return args[0].map(function (v) { return Math.max(v, maxTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var maxFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.max(maxFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.max.apply(Math, a); });\n            }\n            else {\n                return Math.max.apply(Math, args);\n            }\n        }\n    }\n    exports.max = max;\n    /** @shadeup=univ(clamp)*/\n    function clamp(arg, min, max) {\n        if (Array.isArray(arg)) {\n            if (Array.isArray(min) && Array.isArray(max)) {\n                return arg.map(function (a, i) { return Math.min(Math.max(a, min[i]), max[i]); });\n            }\n            else {\n                return arg.map(function (a) { return Math.min(Math.max(a, min), max); });\n            }\n        }\n        else {\n            return Math.min(Math.max(arg, min), max);\n        }\n    }\n    exports.clamp = clamp;\n    /** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\n    function saturate(arg) {\n        return clamp(arg, float(0), float(1));\n    }\n    exports.saturate = saturate;\n    function eq(a, b) {\n        var ta = typeof a;\n        var tb = typeof b;\n        if (ta != tb) {\n            return false;\n        }\n        else if ((ta == 'number' && tb == 'number') ||\n            (ta == 'string' && tb == 'string') ||\n            (ta == 'boolean' && tb == 'boolean') ||\n            (ta == 'undefined' && tb == 'undefined')) {\n            return a == b;\n        }\n        else if (ta == 'object' && tb == 'object') {\n            if (Array.isArray(a) && Array.isArray(b)) {\n                if (a.length != b.length) {\n                    return false;\n                }\n                for (var i = 0; i < a.length; i++) {\n                    if (!eq(a[i], b[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            else {\n                return a == b;\n            }\n        }\n    }\n    exports.eq = eq;\n    /** @shadeup=univ(!($0$ != $1$))*/\n    var neq = function (a, b) { return !eq(a, b); };\n    exports.neq = neq;\n    /** @shadeup=univ(!($0$ < $1$))*/\n    var lt = function (a, b) { return a < b; };\n    exports.lt = lt;\n    /** @shadeup=univ(!($0$ <= $1$))*/\n    var lte = function (a, b) { return a <= b; };\n    exports.lte = lte;\n    /** @shadeup=univ(!($0$ > $1$))*/\n    var gt = function (a, b) { return a > b; };\n    exports.gt = gt;\n    /** @shadeup=univ(!($0$ >= $1$))*/\n    var gte = function (a, b) { return a >= b; };\n    exports.gte = gte;\n    /** @shadeup=univ(!($0$ && $1$))*/\n    var and = function (a, b) { return a && b; };\n    exports.and = and;\n    /** @shadeup=univ(!($0$ || $1$))*/\n    var or = function (a, b) { return a || b; };\n    exports.or = or;\n    /** @shadeup=univ(!(!$0$))*/\n    var not = function (a) { return !a; };\n    exports.not = not;\n    /** @shadeup=univ()*/\n    function makeVector() {\n        var out = [];\n        for (var i = 0; i < arguments.length; i++) {\n            var a = arguments[i];\n            if (typeof a === 'number') {\n                out.push(a);\n            }\n            else {\n                for (var j = 0; j < a.length; j++) {\n                    out.push(a[j]);\n                }\n            }\n        }\n        return out;\n        throw new Error('Invalid vector length');\n    }\n    exports.makeVector = makeVector;\n    var swizIndex = {\n        x: 0,\n        y: 1,\n        z: 2,\n        w: 3,\n        r: 0,\n        g: 1,\n        b: 2,\n        a: 3\n    };\n    var getSwizIndexFast = function (swiz) {\n        switch (swiz) {\n            case 'x':\n                return 0;\n            case 'y':\n                return 1;\n            case 'z':\n                return 2;\n            case 'w':\n                return 3;\n            case 'r':\n                return 0;\n            case 'g':\n                return 1;\n            case 'b':\n                return 2;\n            case 'a':\n                return 3;\n        }\n    };\n    /** @shadeup=shader */\n    function testDocComment() {\n        return 1;\n    }\n    exports.testDocComment = testDocComment;\n    function swizzle(v, swiz, assign) {\n        var _a;\n        if (typeof v === 'number') {\n            if (swiz.length === 1) {\n                return v;\n            }\n            else if (swiz.length === 2) {\n                return [v, v];\n            }\n            else if (swiz.length === 3) {\n                return [v, v, v];\n            }\n            else if (swiz.length === 4) {\n                return [v, v, v, v];\n            }\n        }\n        else if (Array.isArray(v)) {\n            if (typeof assign !== 'undefined') {\n                for (var i = 0; i < swiz.length; i++) {\n                    v[getSwizIndexFast(swiz[i])] = (_a = assign[i]) !== null && _a !== void 0 ? _a : assign;\n                }\n                return v;\n            }\n            if (swiz.length === 1) {\n                return v[getSwizIndexFast(swiz)];\n            }\n            else if (swiz.length === 2) {\n                return [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\n            }\n            else if (swiz.length === 3) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])]\n                ];\n            }\n            else if (swiz.length === 4) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])],\n                    v[getSwizIndexFast(swiz[3])]\n                ];\n            }\n        }\n        else {\n            return v[swiz];\n        }\n    }\n    exports.swizzle = swizzle;\n    function intifyVector(v) {\n        if (typeof v === 'number') {\n            return v;\n        }\n        else if (Array.isArray(v)) {\n            return v.map(function (v) { return v | 0; });\n        }\n        else {\n            return v;\n        }\n    }\n    exports.intifyVector = intifyVector;\n    exports.FM = static_math_1.FM;\n    // type f32 = number & { __float: never };\n    // type i32 = number & { __int: never };\n    // type num = f32 | i32;\n    // function f32(a: number): f32 {\n    // \treturn a as f32;\n    // }\n    // function i32(a: number): i32 {\n    // \treturn a as i32;\n    // }\n    // type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\n    // type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\n    // export const abc: numeric2 = (a, b, c) => a + b + c;\n    // abc(f32(1), i32(2));\n    var atomic_internal = /** @class */ (function () {\n        function atomic_internal(value) {\n            this.__value = value;\n        }\n        /** @shadeup=univ(!atomicLoad(&$self$))*/\n        atomic_internal.prototype.load = function () {\n            return this.__value;\n        };\n        /** @shadeup=univ(!atomicStore(&$self$, $0$))*/\n        atomic_internal.prototype.store = function (value) {\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n        };\n        /** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\n        atomic_internal.prototype.add = function (value) {\n            var old = this.__value;\n            this.__value += value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicSub(&$self$, $0$))*/\n        atomic_internal.prototype.sub = function (value) {\n            var old = this.__value;\n            this.__value -= value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMax(&$self$, $0$))*/\n        atomic_internal.prototype.max = function (value) {\n            var old = this.__value;\n            this.__value = Math.max(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMin(&$self$, $0$))*/\n        atomic_internal.prototype.min = function (value) {\n            var old = this.__value;\n            this.__value = Math.min(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\n        atomic_internal.prototype.and = function (value) {\n            var old = this.__value;\n            this.__value = value & this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicOr(&$self$, $0$))*/\n        atomic_internal.prototype.or = function (value) {\n            var old = this.__value;\n            this.__value = value | this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicXor(&$self$, $0$))*/\n        atomic_internal.prototype.xor = function (value) {\n            var old = this.__value;\n            this.__value = value ^ this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\n        atomic_internal.prototype.exchange = function (value) {\n            var old = this.__value;\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\n        atomic_internal.prototype.compareExchangeWeak = function (compare, value) {\n            var old = this.__value;\n            if (old == compare) {\n                this.__value = value;\n            }\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return {\n                old_value: old,\n                exchanged: old == compare\n            };\n        };\n        atomic_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_math_ts_71052_atomic_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__type\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__value\\\\\",null],[\\\\\"$mutate\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\n        };\n        return atomic_internal;\n    }());\n    exports.atomic_internal = atomic_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_math_ts_71052_atomic_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__type\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__value\\\\\",null],[\\\\\"$mutate\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), atomic_internal)\n    function atomic(value) {\n        return new atomic_internal(value);\n    }\n    exports.atomic = atomic;\n    window.makeAtomic = atomic;\n    /**\n     * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\n     *\n     * @shadeup=univ(!workgroupBarrier())\n     */\n    function workgroupBarrier() { }\n    exports.workgroupBarrier = workgroupBarrier;\n    /**\n     * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\n     *\n     * @shadeup=univ(!storageBarrier())\n     */\n    function storageBarrier() { }\n    exports.storageBarrier = storageBarrier;\n    /**\n     * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\n     *\n     * @shadeup=univ(!workgroupUniformLoad(&$0$))\n     */\n    function workgroupUniformLoad(p) {\n        return p;\n    }\n    exports.workgroupUniformLoad = workgroupUniformLoad;\n    /**\n     * Discards the current fragment.\n     *\n     * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\n     *\n     * See: https://www.w3.org/TR/WGSL/#discard-statement\n     *\n     * @shadeup=univ(!discard;)\n     */\n    function discard() { }\n    exports.discard = discard;\n    /**\n     * Returns the derivative of the input value with respect to the window-space x coordinate.\n     * @param value - The input value.\n     * @returns The derivative of the input value with respect to the window-space x coordinate.\n     * @shadeup=glsl(!dFdx($0$))\n     * @shadeup=wgsl(!dpdx($0$))\n     */\n    function ddx(value) {\n        return 0;\n    }\n    exports.ddx = ddx;\n    /**\n     * Returns the derivative of the input value with respect to the window-space y coordinate.\n     * @param value - The input value.\n     *\n     * @returns The derivative of the input value with respect to the window-space y coordinate.\n     * @shadeup=glsl(!dFdy($0$))\n     * @shadeup=wgsl(!dpdy($0$))\n     */\n    function ddy(value) {\n        return 0;\n    }\n    exports.ddy = ddy;\n    /**\n     * @shadeup=glsl(!dFdxFine($0$))\n     * @shadeup=wgsl(!dpdxFine($0$))\n     */\n    function ddxFine(value) {\n        return 0;\n    }\n    exports.ddxFine = ddxFine;\n    /**\n     * @shadeup=glsl(!dFdyFine($0$))\n     * @shadeup=wgsl(!dpdyFine($0$))\n     */\n    function ddyFine(value) {\n        return 0;\n    }\n    exports.ddyFine = ddyFine;\n    /**\n     * @shadeup=glsl(!dFdxCoarse($0$))\n     * @shadeup=wgsl(!dpdxCoarse($0$))\n     */\n    function ddxCoarse(value) {\n        return 0;\n    }\n    exports.ddxCoarse = ddxCoarse;\n    /**\n     * @shadeup=glsl(!dFdyCoarse($0$))\n     * @shadeup=wgsl(!dpdyCoarse($0$))\n     */\n    function ddyCoarse(value) {\n        return 0;\n    }\n    exports.ddyCoarse = ddyCoarse;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!bitcast<$[0]$>($0$))\n     */\n    function bitcast(value) {\n        return 0;\n    }\n    exports.bitcast = bitcast;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8snorm($0$))\n     */\n    function pack4x8snorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8snorm = pack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8unorm($0$))\n     */\n    function pack4x8unorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8unorm = pack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16snorm($0$))\n     */\n    function pack2x16snorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16snorm = pack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16unorm($0$))\n     */\n    function pack2x16unorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16unorm = pack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16float($0$))\n     */\n    function pack2x16float(value) {\n        return uint(0);\n    }\n    exports.pack2x16float = pack2x16float;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8snorm($0$))\n     */\n    function unpack4x8snorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8snorm = unpack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8unorm($0$))\n     */\n    function unpack4x8unorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8unorm = unpack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16snorm($0$))\n     */\n    function unpack2x16snorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16snorm = unpack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16unorm($0$))\n     */\n    function unpack2x16unorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16unorm = unpack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16float($0$))\n     */\n    function unpack2x16float(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16float = unpack2x16float;\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/static-math.ts\": {\n      outputFiles: [\n        {\n          name: \"/static-math.js\",\n          writeByteOrderMark: false,\n          text: 'define([\"require\", \"exports\"], function (require, exports) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.FM = void 0;\\n    ///\\n    /// GENERATED\\n    /// DO NOT EDIT THIS FILE\\n    /// see generate-static-math.ts\\n    ///\\n    exports.FM = {\\n        add_1_1: function (a, b) { return a + b; },\\n        add_2_1: function (a, b) { return [a[0] + b, a[1] + b]; },\\n        add_1_2: function (a, b) { return [a + b[0], a + b[1]]; },\\n        add_2_2: function (a, b) { return [a[0] + b[0], a[1] + b[1]]; },\\n        add_3_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b]; },\\n        add_1_3: function (a, b) { return [a + b[0], a + b[1], a + b[2]]; },\\n        add_3_3: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\\n        add_4_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\\n        add_1_4: function (a, b) { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\\n        add_4_4: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\\n        sub_1_1: function (a, b) { return a - b; },\\n        sub_2_1: function (a, b) { return [a[0] - b, a[1] - b]; },\\n        sub_1_2: function (a, b) { return [a - b[0], a - b[1]]; },\\n        sub_2_2: function (a, b) { return [a[0] - b[0], a[1] - b[1]]; },\\n        sub_3_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b]; },\\n        sub_1_3: function (a, b) { return [a - b[0], a - b[1], a - b[2]]; },\\n        sub_3_3: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\\n        sub_4_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\\n        sub_1_4: function (a, b) { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\\n        sub_4_4: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\\n        div_1_1: function (a, b) { return a / b; },\\n        div_2_1: function (a, b) { return [a[0] / b, a[1] / b]; },\\n        div_1_2: function (a, b) { return [a / b[0], a / b[1]]; },\\n        div_2_2: function (a, b) { return [a[0] / b[0], a[1] / b[1]]; },\\n        div_3_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b]; },\\n        div_1_3: function (a, b) { return [a / b[0], a / b[1], a / b[2]]; },\\n        div_3_3: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\\n        div_4_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\\n        div_1_4: function (a, b) { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\\n        div_4_4: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\\n        mul_1_1: function (a, b) { return a * b; },\\n        mul_2_1: function (a, b) { return [a[0] * b, a[1] * b]; },\\n        mul_1_2: function (a, b) { return [a * b[0], a * b[1]]; },\\n        mul_2_2: function (a, b) { return [a[0] * b[0], a[1] * b[1]]; },\\n        mul_3_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b]; },\\n        mul_1_3: function (a, b) { return [a * b[0], a * b[1], a * b[2]]; },\\n        mul_3_3: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\\n        mul_4_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\\n        mul_1_4: function (a, b) { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\\n        mul_4_4: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\\n        mod_1_1: function (a, b) { return a % b; },\\n        mod_2_1: function (a, b) { return [a[0] % b, a[1] % b]; },\\n        mod_1_2: function (a, b) { return [a % b[0], a % b[1]]; },\\n        mod_2_2: function (a, b) { return [a[0] % b[0], a[1] % b[1]]; },\\n        mod_3_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b]; },\\n        mod_1_3: function (a, b) { return [a % b[0], a % b[1], a % b[2]]; },\\n        mod_3_3: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\\n        mod_4_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\\n        mod_1_4: function (a, b) { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\\n        mod_4_4: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\\n        bitand_1_1: function (a, b) { return a & b; },\\n        bitand_2_1: function (a, b) { return [a[0] & b, a[1] & b]; },\\n        bitand_1_2: function (a, b) { return [a & b[0], a & b[1]]; },\\n        bitand_2_2: function (a, b) { return [a[0] & b[0], a[1] & b[1]]; },\\n        bitand_3_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b]; },\\n        bitand_1_3: function (a, b) { return [a & b[0], a & b[1], a & b[2]]; },\\n        bitand_3_3: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\\n        bitand_4_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\\n        bitand_1_4: function (a, b) { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\\n        bitand_4_4: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\\n        bitor_1_1: function (a, b) { return a | b; },\\n        bitor_2_1: function (a, b) { return [a[0] | b, a[1] | b]; },\\n        bitor_1_2: function (a, b) { return [a | b[0], a | b[1]]; },\\n        bitor_2_2: function (a, b) { return [a[0] | b[0], a[1] | b[1]]; },\\n        bitor_3_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b]; },\\n        bitor_1_3: function (a, b) { return [a | b[0], a | b[1], a | b[2]]; },\\n        bitor_3_3: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\\n        bitor_4_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\\n        bitor_1_4: function (a, b) { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\\n        bitor_4_4: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\\n        bitxor_1_1: function (a, b) { return a ^ b; },\\n        bitxor_2_1: function (a, b) { return [a[0] ^ b, a[1] ^ b]; },\\n        bitxor_1_2: function (a, b) { return [a ^ b[0], a ^ b[1]]; },\\n        bitxor_2_2: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1]]; },\\n        bitxor_3_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\\n        bitxor_1_3: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\\n        bitxor_3_3: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\\n        bitxor_4_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\\n        bitxor_1_4: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\\n        bitxor_4_4: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\\n        lshift_1_1: function (a, b) { return a << b; },\\n        lshift_2_1: function (a, b) { return [a[0] << b, a[1] << b]; },\\n        lshift_1_2: function (a, b) { return [a << b[0], a << b[1]]; },\\n        lshift_2_2: function (a, b) { return [a[0] << b[0], a[1] << b[1]]; },\\n        lshift_3_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b]; },\\n        lshift_1_3: function (a, b) { return [a << b[0], a << b[1], a << b[2]]; },\\n        lshift_3_3: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\\n        lshift_4_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\\n        lshift_1_4: function (a, b) { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\\n        lshift_4_4: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\\n        rshift_1_1: function (a, b) { return a >> b; },\\n        rshift_2_1: function (a, b) { return [a[0] >> b, a[1] >> b]; },\\n        rshift_1_2: function (a, b) { return [a >> b[0], a >> b[1]]; },\\n        rshift_2_2: function (a, b) { return [a[0] >> b[0], a[1] >> b[1]]; },\\n        rshift_3_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\\n        rshift_1_3: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2]]; },\\n        rshift_3_3: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\\n        rshift_4_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\\n        rshift_1_4: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\\n        rshift_4_4: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\\n        bitnot_1: function (a) { return ~a; },\\n        bitnot_2: function (a) { return [~a[0], ~a[1]]; },\\n        bitnot_3: function (a) { return [~a[0], ~a[1], ~a[2]]; },\\n        bitnot_4: function (a) { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\\n        negate_1: function (a) { return -a; },\\n        negate_2: function (a) { return [-a[0], -a[1]]; },\\n        negate_3: function (a) { return [-a[0], -a[1], -a[2]]; },\\n        negate_4: function (a) { return [-a[0], -a[1], -a[2], -a[3]]; },\\n        positive_1: function (a) { return Math.abs(a); },\\n        positive_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n        positive_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n        positive_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n        abs_1: function (a) { return Math.abs(a); },\\n        abs_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n        abs_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n        abs_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n        floor_1: function (a) { return Math.floor(a); },\\n        floor_2: function (a) { return [Math.floor(a[0]), Math.floor(a[1])]; },\\n        floor_3: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\\n        floor_4: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\\n        ceil_1: function (a) { return Math.ceil(a); },\\n        ceil_2: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\\n        ceil_3: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\\n        ceil_4: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\\n        round_1: function (a) { return Math.round(a); },\\n        round_2: function (a) { return [Math.round(a[0]), Math.round(a[1])]; },\\n        round_3: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\\n        round_4: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\\n        sign_1: function (a) { return Math.sign(a); },\\n        sign_2: function (a) { return [Math.sign(a[0]), Math.sign(a[1])]; },\\n        sign_3: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\\n        sign_4: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\\n        cos_1: function (a) { return Math.cos(a); },\\n        cos_2: function (a) { return [Math.cos(a[0]), Math.cos(a[1])]; },\\n        cos_3: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\\n        cos_4: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\\n        sin_1: function (a) { return Math.sin(a); },\\n        sin_2: function (a) { return [Math.sin(a[0]), Math.sin(a[1])]; },\\n        sin_3: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\\n        sin_4: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\\n        tan_1: function (a) { return Math.tan(a); },\\n        tan_2: function (a) { return [Math.tan(a[0]), Math.tan(a[1])]; },\\n        tan_3: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\\n        tan_4: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\\n        acos_1: function (a) { return Math.acos(a); },\\n        acos_2: function (a) { return [Math.acos(a[0]), Math.acos(a[1])]; },\\n        acos_3: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\\n        acos_4: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\\n        asin_1: function (a) { return Math.asin(a); },\\n        asin_2: function (a) { return [Math.asin(a[0]), Math.asin(a[1])]; },\\n        asin_3: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\\n        asin_4: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\\n        atan_1: function (a) { return Math.atan(a); },\\n        atan_2: function (a) { return [Math.atan(a[0]), Math.atan(a[1])]; },\\n        atan_3: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\\n        atan_4: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\\n        cosh_1: function (a) { return Math.cosh(a); },\\n        cosh_2: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\\n        cosh_3: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\\n        cosh_4: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\\n        sinh_1: function (a) { return Math.sinh(a); },\\n        sinh_2: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\\n        sinh_3: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\\n        sinh_4: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\\n        tanh_1: function (a) { return Math.tanh(a); },\\n        tanh_2: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\\n        tanh_3: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\\n        tanh_4: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\\n        acosh_1: function (a) { return Math.acosh(a); },\\n        acosh_2: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\\n        acosh_3: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\\n        acosh_4: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\\n        asinh_1: function (a) { return Math.asinh(a); },\\n        asinh_2: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\\n        asinh_3: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\\n        asinh_4: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\\n        atanh_1: function (a) { return Math.atanh(a); },\\n        atanh_2: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\\n        atanh_3: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\\n        atanh_4: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\\n        exp_1: function (a) { return Math.exp(a); },\\n        exp_2: function (a) { return [Math.exp(a[0]), Math.exp(a[1])]; },\\n        exp_3: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\\n        exp_4: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\\n        log_1: function (a) { return Math.log(a); },\\n        log_2: function (a) { return [Math.log(a[0]), Math.log(a[1])]; },\\n        log_3: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\\n        log_4: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\\n        log2_1: function (a) { return Math.log2(a); },\\n        log2_2: function (a) { return [Math.log2(a[0]), Math.log2(a[1])]; },\\n        log2_3: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\\n        log2_4: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\\n        log10_1: function (a) { return Math.log10(a); },\\n        log10_2: function (a) { return [Math.log10(a[0]), Math.log10(a[1])]; },\\n        log10_3: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\\n        log10_4: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\\n        sqrt_1: function (a) { return Math.sqrt(a); },\\n        sqrt_2: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\\n        sqrt_3: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\\n        sqrt_4: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\\n        int_2_1_1: function (a, b) { return [a | 0, b | 0]; },\\n        int_2_2: function (a) { return [a[0] | 0, a[1] | 0]; },\\n        int_3_1_1_1: function (a, b, c) { return [a | 0, b | 0, c | 0]; },\\n        int_3_2_1: function (a, b) { return [a[0] | 0, a[1] | 0, b | 0]; },\\n        int_3_1_2: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0]; },\\n        int_3_3: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0]; },\\n        int_4_1_1_1_1: function (a, b, c, d) { return [a | 0, b | 0, c | 0, d | 0]; },\\n        int_4_2_1_1: function (a, b, c) { return [a[0] | 0, a[1] | 0, b | 0, c | 0]; },\\n        int_4_1_2_1: function (a, b, c) { return [a | 0, b[0] | 0, b[1] | 0, c | 0]; },\\n        int_4_1_1_2: function (a, b, c) { return [a | 0, b | 0, c[0] | 0, c[1] | 0]; },\\n        int_4_3_1: function (a, b) { return [a[0] | 0, a[1] | 0, a[2] | 0, b | 0]; },\\n        int_4_1_3: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0, b[2] | 0]; },\\n        int_4_2_2: function (a, b) { return [a[0] | 0, a[1] | 0, b[0] | 0, b[1] | 0]; },\\n        int_4_4: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0, a[3] | 0]; },\\n        float_2_1_1: function (a, b) { return [a, b]; },\\n        float_2_2: function (a) { return [a[0], a[1]]; },\\n        float_3_1_1_1: function (a, b, c) { return [a, b, c]; },\\n        float_3_2_1: function (a, b) { return [a[0], a[1], b]; },\\n        float_3_1_2: function (a, b) { return [a, b[0], b[1]]; },\\n        float_3_3: function (a) { return [a[0], a[1], a[2]]; },\\n        float_4_1_1_1_1: function (a, b, c, d) { return [a, b, c, d]; },\\n        float_4_2_1_1: function (a, b, c) { return [a[0], a[1], b, c]; },\\n        float_4_1_2_1: function (a, b, c) { return [a, b[0], b[1], c]; },\\n        float_4_1_1_2: function (a, b, c) { return [a, b, c[0], c[1]]; },\\n        float_4_3_1: function (a, b) { return [a[0], a[1], a[2], b]; },\\n        float_4_1_3: function (a, b) { return [a, b[0], b[1], b[2]]; },\\n        float_4_2_2: function (a, b) { return [a[0], a[1], b[0], b[1]]; },\\n        float_4_4: function (a) { return [a[0], a[1], a[2], a[3]]; },\\n        uint_2_1_1: function (a, b) { return [a >>> 0, b >>> 0]; },\\n        uint_2_2: function (a) { return [a[0] >>> 0, a[1] >>> 0]; },\\n        uint_3_1_1_1: function (a, b, c) { return [a >>> 0, b >>> 0, c >>> 0]; },\\n        uint_3_2_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0]; },\\n        uint_3_1_2: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0]; },\\n        uint_3_3: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0]; },\\n        uint_4_1_1_1_1: function (a, b, c, d) { return [a >>> 0, b >>> 0, c >>> 0, d >>> 0]; },\\n        uint_4_2_1_1: function (a, b, c) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0, c >>> 0]; },\\n        uint_4_1_2_1: function (a, b, c) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, c >>> 0]; },\\n        uint_4_1_1_2: function (a, b, c) { return [a >>> 0, b >>> 0, c[0] >>> 0, c[1] >>> 0]; },\\n        uint_4_3_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, b >>> 0]; },\\n        uint_4_1_3: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, b[2] >>> 0]; },\\n        uint_4_2_2: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b[0] >>> 0, b[1] >>> 0]; },\\n        uint_4_4: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, a[3] >>> 0]; },\\n    };\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/std___std_all.ts\": {\n      outputFiles: [\n        {\n          name: \"/std___std_all.js\",\n          writeByteOrderMark: false,\n          text: `var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.time = exports.__deepClone = exports.__makeMap = exports.map = exports.array = exports.sleep = exports.hashableTypeToString = exports.globalVarGet = exports.globalVarInit = exports.compute = exports.statGraph = exports.stat = exports.flush = exports.print = exports.getShadeupLocalContext = exports.Mesh = exports.__dummy = void 0;\n    /**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n    exports.__dummy = 1;\n    // import { Mesh } from '/_std/mesh';\n    var Mesh = /** @class */ (function () {\n        function Mesh(prefils) {\n            this.vertices = [];\n            this.triangles = [];\n            this.normals = [];\n            this.tangents = [];\n            this.bitangents = [];\n            this.uvs = [];\n            this.colors = [];\n            this.symbol = Symbol();\n            if (prefils.vertices)\n                this.vertices = prefils.vertices;\n            if (prefils.triangles)\n                this.triangles = prefils.triangles;\n            if (prefils.normals)\n                this.normals = prefils.normals;\n            if (prefils.tangents)\n                this.tangents = prefils.tangents;\n            if (prefils.bitangents)\n                this.bitangents = prefils.bitangents;\n            if (prefils.uvs)\n                this.uvs = prefils.uvs;\n            if (prefils.colors)\n                this.colors = prefils.colors;\n        }\n        Mesh.prototype.getVertices = function () {\n            return this.vertices;\n        };\n        Mesh.prototype.getTriangles = function () {\n            return this.triangles;\n        };\n        Mesh.prototype.getNormals = function () {\n            return this.normals;\n        };\n        Mesh.prototype.getTangents = function () {\n            return this.tangents;\n        };\n        Mesh.prototype.getBitangents = function () {\n            return this.bitangents;\n        };\n        Mesh.prototype.getUVs = function () {\n            return this.uvs;\n        };\n        Mesh.prototype.getColors = function () {\n            return this.colors;\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), Mesh)\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n    /**\n     * Prints a set of value(s) to the console. Values will be converted to strings before printing.\n     *\n     * @param args Any number of values to print to the console\n     */\n    function print() {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        console.log.apply(console, args);\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_print'] === 'function') {\n            (_a = (0, exports.getShadeupLocalContext)())['__shadeup_print'].apply(_a, args);\n        }\n    }\n    exports.print = print;\n    /**\n     * Flushes (executes) all queued compute or draw calls\n     * @shadeup=tag(async) @shadeup=noemit_gpu\n     */\n    function flush() {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!(typeof (0, exports.getShadeupLocalContext)()['flushAdapter'] === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, (0, exports.getShadeupLocalContext)()['flushAdapter']()];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    }\n    exports.flush = flush;\n    /**\n     * Displays a single value in the stats panel at the top right\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any value\n     */\n    function stat(name, value) {\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_stat'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_stat'](name, value);\n        }\n    }\n    exports.stat = stat;\n    /**\n     * Display a graph of a numeric value over time\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any numeric value\n     * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\n     */\n    function statGraph(name, value, sampleRate) {\n        if (sampleRate === void 0) { sampleRate = 1; }\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'](name, value);\n        }\n    }\n    exports.statGraph = statGraph;\n    function infer(fn) {\n        return fn;\n    }\n    // export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\n    // export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\n    // export function draw(\n    // \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\n    // \tsecond?: shader<ShaderInput, ShaderOutput>,\n    // \tthird?: shader<ShaderInput, ShaderOutput>\n    // ) {\n    // \tif ('vertices' in first && second && third) {\n    // \t\t__shadeup_dispatch_draw_geometry(first, second, third);\n    // \t} else if (first && !second && !third) {\n    // \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n    // \t}\n    // }\n    // draw(makeShader('', (a, b) => {}));\n    // drawAlt(\n    // \tmakeShader(\n    // \t\t'000004808000091289258019303699031390005438610',\n    // \t\t/**@shadeup=shader*/ (__in, __out) => {\n    // \t\t\t__out.color;\n    // \t\t}\n    // \t)\n    // );\n    // /**\n    //  *\n    //  */\n    function compute(workgroups, computeShader) {\n        (0, exports.getShadeupLocalContext)().__shadeup_dispatch_compute(workgroups, computeShader);\n    }\n    exports.compute = compute;\n    // function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\n    // type x<T> = { x: T };\n    // function makeTex<T>(a: T): x<T> {\n    // \treturn { x: a };\n    // }\n    // draw({\n    // \tvertex: shader('abc', (__in, __out) => {}),\n    // \tattachments: [\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 })\n    // \t],\n    // \tmesh: new Mesh(),\n    // \tfragment: shader('abc', (__in, __out) => {\n    // \t\t//__out.attachment0\n    // \t})\n    // });\n    function globalVarInit(fileName, varName, initFn, getterFn) {\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals']) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'] = {};\n        }\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName] = {};\n        }\n        // Disable caching for now\n        var cache = false;\n        if (!(varName in (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) || !cache) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName] = initFn();\n        }\n        (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName];\n    }\n    exports.globalVarInit = globalVarInit;\n    function globalVarGet(fileName, varName) {\n        if (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\n            return (0, exports.getShadeupLocalContext)()[varName];\n        }\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName]();\n    }\n    exports.globalVarGet = globalVarGet;\n    function hashableTypeToString(k) {\n        if (typeof k == 'number') {\n            return k.toString();\n        }\n        else if (typeof k == 'object') {\n            if (Array.isArray(k)) {\n                return k.map(hashableTypeToString).join(',');\n            }\n            else {\n                return k.toString();\n            }\n        }\n        else {\n            return k.toString();\n        }\n    }\n    exports.hashableTypeToString = hashableTypeToString;\n    Array.prototype.len = function () {\n        return this.length;\n    };\n    Array.prototype.last = function () {\n        return this[this.length - 1];\n    };\n    Array.prototype.first = function () {\n        return this[0];\n    };\n    Array.prototype.append = function (items) {\n        for (var i = 0; i < items.length; i++) {\n            this.push(items[i]);\n        }\n    };\n    Array.prototype.remove = function (index) {\n        this.splice(index, 1);\n    };\n    Array.prototype.__index = function (index) {\n        return this[index];\n    };\n    Array.prototype.__index_assign = function (index, value) {\n        this[index] = value;\n    };\n    Array.prototype.__index_assign_op = function (op_fn, index, value) {\n        this[index] = op_fn(this[index], value);\n    };\n    /** @shadeup=tag(async) */\n    function sleep(seconds) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })];\n            });\n        });\n    }\n    exports.sleep = sleep;\n    function array(count, initializer) {\n        if (initializer === void 0) { initializer = null; }\n        var arr = new Array(count);\n        if (initializer) {\n            for (var i = 0; i < count; i++) {\n                arr[i] = initializer;\n            }\n        }\n        return arr;\n    }\n    exports.array = array;\n    var map = /** @class */ (function () {\n        function map(entries) {\n            this.pairs = new Map();\n            if (entries)\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                    var e = entries_1[_i];\n                    this.__index_assign(e[0], e[1]);\n                }\n        }\n        map.prototype.__index = function (key) {\n            if (!this.pairs.has(hashableTypeToString(key))) {\n                throw new Error('Key not found: ' + hashableTypeToString(key));\n            }\n            return this.pairs.get(hashableTypeToString(key))[1];\n        };\n        map.prototype.__index_assign = function (key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, value]);\n        };\n        map.prototype.__index_assign_op = function (op_fn, key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\n        };\n        map.prototype.delete = function (key) {\n            this.pairs.delete(hashableTypeToString(key));\n        };\n        map.prototype.has = function (key) {\n            return this.pairs.has(hashableTypeToString(key));\n        };\n        map.prototype.keys = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[0]; });\n        };\n        map.prototype.values = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[1]; });\n        };\n        map.new = function (entries) {\n            return new map(entries);\n        };\n        map.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_8545_map\\\\\",\\\\\"fields\\\\\":[[\\\\\"pairs\\\\\",null]]}\");\n        };\n        return map;\n    }());\n    exports.map = map;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_8545_map\\\\\",\\\\\"fields\\\\\":[[\\\\\"pairs\\\\\",null]]}\"), map)\n    function __makeMap(initial) {\n        return new map(Object.entries(initial));\n    }\n    exports.__makeMap = __makeMap;\n    function __deepClone(value) {\n        if (typeof value == 'object') {\n            if (Array.isArray(value)) {\n                var res = new Array(value.length);\n                for (var i = 0; i < value.length; i++) {\n                    res[i] = __deepClone(value[i]);\n                }\n                return res;\n            }\n            else {\n                if (value && typeof value.clone == 'function') {\n                    return value.clone();\n                }\n                else {\n                    return value;\n                }\n            }\n        }\n        else {\n            return value;\n        }\n    }\n    exports.__deepClone = __deepClone;\n    var time = /** @class */ (function () {\n        function time() {\n        }\n        /** Saves the current time with a key of name */\n        time.start = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_start');\n        };\n        /** Returns the difference in milliseconds between a start with the same key */\n        time.stop = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_end');\n            var res = performance.measure((name !== null && name !== void 0 ? name : '_default') + '_diff', (name !== null && name !== void 0 ? name : '_default') + '_start', (name !== null && name !== void 0 ? name : '_default') + '_end');\n            return res.duration;\n        };\n        /**\n         * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\n         *\n         * This uses performance.now() under the hood:\n         * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\n         */\n        time.now = function () {\n            return performance.now();\n        };\n        time.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_10778_time\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return time;\n    }());\n    exports.time = time;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_std_i_iistd_all_ts_10778_time\\\\\",\\\\\"fields\\\\\":[]}\"), time)\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/std.ts\": {\n      outputFiles: [\n        {\n          name: \"/std.js\",\n          writeByteOrderMark: false,\n          text: 'var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\\n};\\ndefine([\"require\", \"exports\", \"/_std/ui\", \"/_std/mesh\", \"/_std/sdf\", \"/_std/geo\", \"/_std/native\"], function (require, exports, ui_1, mesh_1, sdf_1, geo_1, native_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.geo = exports.sdf = exports.Mesh = exports.mesh = exports.ui = void 0;\\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\\n    Object.defineProperty(exports, \"mesh\", { enumerable: true, get: function () { return mesh_1.mesh; } });\\n    Object.defineProperty(exports, \"Mesh\", { enumerable: true, get: function () { return mesh_1.Mesh; } });\\n    Object.defineProperty(exports, \"sdf\", { enumerable: true, get: function () { return sdf_1.sdf; } });\\n    Object.defineProperty(exports, \"geo\", { enumerable: true, get: function () { return geo_1.geo; } });\\n    __exportStar(native_1, exports);\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/ui.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/ui.js\",\n          writeByteOrderMark: false,\n          text: `define([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.ui = void 0;\n    var ui;\n    (function (ui) {\n        function puck(position) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position);\n        }\n        ui.puck = puck;\n        function draggable(position, radius) {\n            if (radius === void 0) { radius = 10; }\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position, radius, true);\n        }\n        ui.draggable = draggable;\n        function textbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('textbox', value);\n        }\n        ui.textbox = textbox;\n        function slider(value, min, max) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_SLIDER(value, { min: min, max: max });\n        }\n        ui.slider = slider;\n        function label(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('label', text);\n        }\n        ui.label = label;\n        function checkbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('checkbox', value);\n        }\n        ui.checkbox = checkbox;\n        function combo(value, options) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('combo', value, { options: options });\n        }\n        ui.combo = combo;\n        function group(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('group', text);\n        }\n        ui.group = group;\n        function button(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('button', false, { text: text });\n        }\n        ui.button = button;\n        function pop() {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('pop');\n        }\n        ui.pop = pop;\n    })(ui = exports.ui || (exports.ui = {}));\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/native.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/native.js\",\n          writeByteOrderMark: false,\n          text: `define([\"require\", \"exports\", \"/_std/common\", \"/_std/context\"], function (require, exports, common_1, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.KeyboardInputState = exports.MouseInputState = exports.FrameContext = exports.shadeupMakeTextureFromUrl = void 0;\n    function shadeupMakeTextureFromUrl(url) {\n        return (0, context_1.getShadeupLocalContext)()['shadeupMakeTextureFromUrlNative'](url);\n    }\n    exports.shadeupMakeTextureFromUrl = shadeupMakeTextureFromUrl;\n    var FrameContext = /** @class */ (function () {\n        function FrameContext() {\n            /** Mouse/touch screen input state for this frame */\n            this.mouse = new MouseInputState();\n            /** Keyboard input state for this frame */\n            this.keyboard = new KeyboardInputState();\n            /** Controllable camera (Hold right click and use WASD to move) */\n            this.camera = new common_1.Camera();\n            this.camera2d = new common_1.Camera2d();\n        }\n        FrameContext.prototype.configureCamera = function (options) { };\n        /**\n         * Use external values from the host JavaScript environment.\n         */\n        FrameContext.prototype.input = function (key, defaultValue) {\n            return defaultValue;\n        };\n        /**\n         * Send values to the host JavaScript environment.\n         */\n        FrameContext.prototype.output = function (key, value) { };\n        FrameContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_387_FrameContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"deltaTime\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"time\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"screenSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frame\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"mouse\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}],[\\\\\"keyboard\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}],[\\\\\"camera\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}],[\\\\\"camera2d\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}]]}\");\n        };\n        return FrameContext;\n    }());\n    exports.FrameContext = FrameContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_387_FrameContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"deltaTime\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"time\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"screenSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frame\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"mouse\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}],[\\\\\"keyboard\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}],[\\\\\"camera\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}],[\\\\\"camera2d\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}]]}\"), FrameContext)\n    var MouseInputState = /** @class */ (function () {\n        function MouseInputState() {\n            /** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\n            this.button = [false, false, false];\n            /** Mouse button pressed state for buttons 0-3 (left, middle, right) */\n            this.clicked = [false, false, false];\n        }\n        MouseInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}\");\n        };\n        return MouseInputState;\n    }());\n    exports.MouseInputState = MouseInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_1719_MouseInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"startUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaUv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"deltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"frameDeltaScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"button\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"clicked\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"},\\\\\"staticSize\\\\\":3}],[\\\\\"dragging\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"wheel\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"velocity\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"focused\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}]]}\"), MouseInputState)\n    var KeyboardInputState = /** @class */ (function () {\n        function KeyboardInputState() {\n        }\n        KeyboardInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}\");\n        };\n        return KeyboardInputState;\n    }());\n    exports.KeyboardInputState = KeyboardInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\\\",\\\\\"fields\\\\\":[[\\\\\"backspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"tab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"enter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"shiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"controlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"altRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"capsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"escape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"space\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"home\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"printScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"insert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"delete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"digit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"keyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"metaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"contextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"f12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"numLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"scrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"semicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"equal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"comma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"minus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"period\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"slash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"backslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"bracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"quote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackspace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedTab\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnter\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedShiftRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedControlRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedAltRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPause\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedCapsLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEscape\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSpace\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPageDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedHome\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowUp\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedArrowDown\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPrintScreen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedInsert\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDelete\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedDigit9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyA\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyB\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyC\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyD\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyE\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyF\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyG\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyH\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyI\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyJ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyK\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyL\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyM\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyN\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyO\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyP\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyQ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyR\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyS\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyT\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyU\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyV\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyW\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyX\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyY\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedKeyZ\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMetaRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedContextMenu\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad0\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpad9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadMultiply\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadAdd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadSubtract\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDecimal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumpadDivide\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF1\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF2\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF3\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF4\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF5\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF6\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF7\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF8\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF9\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF10\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF11\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedF12\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedNumLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedScrollLock\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSemicolon\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedEqual\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedComma\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedMinus\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedPeriod\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedSlash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackquote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketLeft\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBackslash\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedBracketRight\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pressedQuote\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"arrowVector\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}]]}\"), KeyboardInputState)\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/paint.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/paint.js\",\n          writeByteOrderMark: false,\n          text: `define([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.PaintingContext = void 0;\n    var PaintingContext = /** @class */ (function () {\n        function PaintingContext(canvas, gl) {\n            var _this = this;\n            this.markDirtyCallback = function () { };\n            this.__ctx = null;\n            this.__gl = null;\n            this.__offscreen_canvas = null;\n            this.__program = null;\n            this.stagedChanges = false;\n            this.dirty = false;\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.__currentColor = null;\n            this.pointsCounter = 0;\n            this.cacheSize = [0, 0];\n            if (!gl)\n                return;\n            this.__gl = gl;\n            this.__canvas = canvas;\n            this.__offscreen_canvas = document.createElement('canvas');\n            this.__offscreen_canvas.width = canvas.width;\n            this.__offscreen_canvas.height = canvas.height;\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__ctx = this.__offscreen_canvas.getContext('2d', {\n                willReadFrequently: true\n            });\n            this.__offscreen_canvas.style.position = 'absolute';\n            this.__offscreen_canvas.style.zIndex = '10';\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__setColor([0, 0, 0, 1]);\n            gl.addEventListener('context', function (toContext) {\n                if (toContext == 'draw') {\n                    _this.flush();\n                }\n            });\n            gl.addEventListener('flush', function () {\n                _this.flush();\n            });\n        }\n        PaintingContext.prototype.flush = function () {\n            if (!this.__gl)\n                return;\n            if (!this.__canvas)\n                return;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.stagedChanges)\n                return;\n            if (this.fastPoints)\n                this.flushPoints();\n            this.__gl.drawImage(this.__offscreen_canvas);\n            this.stagedChanges = false;\n            if (this.__offscreen_canvas.width != this.__canvas.width ||\n                this.__offscreen_canvas.height != this.__canvas.height) {\n                this.__offscreen_canvas.width = this.__canvas.width;\n                this.__offscreen_canvas.height = this.__canvas.height;\n            }\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.__beforeDraw = function () {\n            var _a;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.__ctx)\n                return;\n            if (!this.__canvas)\n                return;\n            this.markDirtyCallback();\n            (_a = this.__gl) === null || _a === void 0 ? void 0 : _a.activatePaintContext();\n            if (!this.stagedChanges) {\n                this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n                this.__ctx.drawImage(this.__canvas, 0, 0);\n                var color = this.__currentColor;\n                this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n                this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            }\n        };\n        PaintingContext.prototype.__afterDraw = function () {\n            var gl = this.__gl;\n            this.dirty = true;\n            this.stagedChanges = true;\n        };\n        PaintingContext.prototype.__setColor = function (color) {\n            if (!this.__ctx || !color)\n                return;\n            if (this.__currentColor &&\n                this.__currentColor[0] == color[0] &&\n                this.__currentColor[1] == color[1] &&\n                this.__currentColor[2] == color[2] &&\n                this.__currentColor[3] == color[3])\n                return;\n            this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__currentColor = [color[0], color[1], color[2], color[3]];\n        };\n        PaintingContext.prototype.fillRect = function (pos, size, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillCircle = function (pos, radius, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillArc = function (pos, radius, startAngle, endAngle, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.line = function (pos1, pos2, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos1[0], pos1[1]);\n            this.__ctx.lineTo(pos2[0], pos2[1]);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.circle = function (pos, radius, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.arc = function (pos, radius, startAngle, endAngle, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.text = function (pos, text, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillText(text, pos[0], pos[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.startPath = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.lineTo = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.strokePath = function (color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n            this.__setColor(color);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillPath = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__setColor(color);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.setStrokeWidth = function (width) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n        };\n        PaintingContext.prototype.setFont = function (font) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = font;\n        };\n        PaintingContext.prototype.setFontSize = function (size) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = \"\".concat(size, \"px \").concat(this.__ctx.font.split(' ').slice(1).join(' '));\n        };\n        PaintingContext.prototype.setTextAlign = function (align) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textAlign = align;\n        };\n        PaintingContext.prototype.setTextBaseline = function (baseline) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textBaseline = baseline;\n        };\n        PaintingContext.prototype.setLineCap = function (cap) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineCap = cap;\n        };\n        PaintingContext.prototype.setLineJoin = function (join) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineJoin = join;\n        };\n        PaintingContext.prototype.setMiterLimit = function (limit) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.miterLimit = limit;\n        };\n        PaintingContext.prototype.setShadowColor = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowColor = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n        };\n        PaintingContext.prototype.setShadowBlur = function (blur) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowBlur = blur;\n        };\n        PaintingContext.prototype.setShadowOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowOffsetX = offset[0];\n            this.__ctx.shadowOffsetY = offset[1];\n        };\n        PaintingContext.prototype.setGlobalAlpha = function (alpha) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalAlpha = alpha;\n        };\n        PaintingContext.prototype.setGlobalCompositeOperation = function (op) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalCompositeOperation = op;\n        };\n        PaintingContext.prototype.setImageSmoothingEnabled = function (enabled) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingEnabled = enabled;\n        };\n        PaintingContext.prototype.setImageSmoothingQuality = function (quality) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingQuality = quality;\n        };\n        PaintingContext.prototype.setLineDash = function (dash) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setLineDash(dash);\n        };\n        PaintingContext.prototype.setLineDashOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineDashOffset = offset;\n        };\n        PaintingContext.prototype.setTransform = function (a, b, c, d, e, f) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setTransform(a, b, c, d, e, f);\n        };\n        PaintingContext.prototype.resetTransform = function () {\n            if (!this.__ctx)\n                return;\n            this.__ctx.resetTransform();\n        };\n        PaintingContext.prototype.scale = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.scale(v[0], v[1]);\n        };\n        PaintingContext.prototype.rotate = function (angle) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.rotate(angle);\n        };\n        PaintingContext.prototype.translate = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.translate(v[0], v[1]);\n        };\n        PaintingContext.prototype.flushPoints = function () {\n            if (!this.__ctx)\n                return;\n            if (!this.fastPoints)\n                return;\n            if (!this.fastPointsBuffer)\n                return;\n            this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.point = function (pos, color) {\n            if (!this.__ctx)\n                return;\n            this.pointsCounter++;\n            this.__beforeDraw();\n            if (this.pointsCounter > 10) {\n                if (!this.fastPoints) {\n                    this.fastPoints = true;\n                    this.cacheSize = [this.__offscreen_canvas.width, this.__offscreen_canvas.height];\n                    this.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\n                }\n                if (!this.fastPointsBuffer)\n                    return;\n                var x = Math.floor(pos[0]);\n                var y = Math.floor(pos[1]);\n                var index = (y * this.cacheSize[0] + x) * 4;\n                if (!color) {\n                    color = this.__currentColor;\n                }\n                var oldColorx = this.fastPointsBuffer.data[index] / 255;\n                var oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n                var oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n                var oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n                this.fastPointsBuffer.data[index] =\n                    color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 1] =\n                    color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 2] =\n                    color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\n            }\n            else {\n                this.__setColor(color);\n                this.__ctx.fillRect(pos[0], pos[1], 1, 1);\n            }\n            this.__afterDraw();\n        };\n        PaintingContext.prototype.vector = function (pos, dir, color, width) {\n            if (color === void 0) { color = [0.9803921568627451, 0.8, 0.08235294117647059, 1]; }\n            if (width === void 0) { width = 4; }\n            if (!this.__ctx || (dir[0] == 0 && dir[1] == 0))\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            this.__ctx.moveTo(pos[0], pos[1]);\n            this.__ctx.lineCap = 'round';\n            this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.stroke();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            // Arrows\n            var arrowSize = 20;\n            var arrowAngle = Math.PI / 5;\n            var dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n            var arrow1 = [\n                Math.cos(dirAngle + arrowAngle) * arrowSize,\n                Math.sin(dirAngle + arrowAngle) * arrowSize\n            ];\n            var arrow2 = [\n                Math.cos(dirAngle - arrowAngle) * arrowSize,\n                Math.sin(dirAngle - arrowAngle) * arrowSize\n            ];\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.grid = function (center, count, gap, color, width) {\n            if (color === void 0) { color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1]; }\n            if (width === void 0) { width = 2; }\n            if (!this.__ctx)\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            var start = [\n                center[0] - (count[0] / 2) * gap[0],\n                center[1] - (count[1] / 2) * gap[1]\n            ];\n            for (var i = 0; i <= count[0]; i++) {\n                this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n                this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n            }\n            for (var i = 0; i <= count[1]; i++) {\n                this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n                this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n            }\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}\");\n        };\n        return PaintingContext;\n    }());\n    exports.PaintingContext = PaintingContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}\"), PaintingContext)\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/buffer.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/buffer.js\",\n          writeByteOrderMark: false,\n          text: `var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\", \"/_std/context\", \"/std_math\"], function (require, exports, context_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.buffer = exports.buffer_internal = void 0;\n    var __ = { intifyVector: std_math_1.intifyVector };\n    var buffer_internal = /** @class */ (function () {\n        function buffer_internal(size, typeName, structure) {\n            var _this = this;\n            this.__opaque_buffer = true;\n            this.structArray = null;\n            this.floatArray = null;\n            this.intArray = null;\n            this.uintArray = null;\n            this.arrayBuffer = null;\n            this.vectorSize = 0;\n            this.platformPayload = null;\n            this.adapter = null;\n            this.dirty = false;\n            this.pendingWrites = 0;\n            this.cpuReadDirty = false;\n            this.cpuWriteDirty = false;\n            this.elementCount = 0;\n            this.elementBytes = 0;\n            this.structured = false;\n            this.watchMutation = false;\n            this.symbol = Symbol();\n            this.adapter = (0, context_1.getShadeupLocalContext)().shadeupGetGraphicsAdapter();\n            this.typeName = typeName;\n            if (structure) {\n                if (structure.name && !structure.name.startsWith('atomic')) {\n                    this.typeName = structure.name;\n                }\n            }\n            this.elementCount = size;\n            this.elementBytes = 4;\n            if (typeName == 'float4' ||\n                typeName == 'float3' ||\n                typeName == 'float2' ||\n                typeName == 'float') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.floatArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.floatArray[index] = value;\n                };\n                if (typeName == 'float4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float4)(_this.floatArray[index * 4], _this.floatArray[index * 4 + 1], _this.floatArray[index * 4 + 2], _this.floatArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 4] = value[0];\n                        _this.floatArray[index * 4 + 1] = value[1];\n                        _this.floatArray[index * 4 + 2] = value[2];\n                        _this.floatArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'float3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float3)(_this.floatArray[index * 3], _this.floatArray[index * 3 + 1], _this.floatArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 3] = value[0];\n                        _this.floatArray[index * 3 + 1] = value[1];\n                        _this.floatArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'float2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float2)(_this.floatArray[index * 2], _this.floatArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 2] = value[0];\n                        _this.floatArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.floatArray = new Float32Array(size * this.vectorSize);\n                this.arrayBuffer = this.floatArray.buffer;\n            }\n            else if (typeName == 'int4' ||\n                typeName == 'int3' ||\n                typeName == 'int2' ||\n                typeName == 'int') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.intArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.intArray[index] = value;\n                };\n                if (typeName == 'int4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int4)(_this.intArray[index * 4], _this.intArray[index * 4 + 1], _this.intArray[index * 4 + 2], _this.intArray[index * 4 + 3]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 4] = value[0];\n                        _this.intArray[index * 4 + 1] = value[1];\n                        _this.intArray[index * 4 + 2] = value[2];\n                        _this.intArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'int3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int3)(_this.intArray[index * 3], _this.intArray[index * 3 + 1], _this.intArray[index * 3 + 2]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 3] = value[0];\n                        _this.intArray[index * 3 + 1] = value[1];\n                        _this.intArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'int2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int2)(_this.intArray[index * 2], _this.intArray[index * 2 + 1]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 2] = value[0];\n                        _this.intArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.intArray = new Int32Array(size * this.vectorSize);\n                this.arrayBuffer = this.intArray.buffer;\n            }\n            else if (typeName == 'uint4' ||\n                typeName == 'uint3' ||\n                typeName == 'uint2' ||\n                typeName == 'uint') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.uintArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.uintArray[index] = value;\n                };\n                if (typeName == 'uint4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint4)(_this.uintArray[index * 4], _this.uintArray[index * 4 + 1], _this.uintArray[index * 4 + 2], _this.uintArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 4] = value[0];\n                        _this.uintArray[index * 4 + 1] = value[1];\n                        _this.uintArray[index * 4 + 2] = value[2];\n                        _this.uintArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'uint3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint3)(_this.uintArray[index * 3], _this.uintArray[index * 3 + 1], _this.uintArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 3] = value[0];\n                        _this.uintArray[index * 3 + 1] = value[1];\n                        _this.uintArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'uint2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint2)(_this.uintArray[index * 2], _this.uintArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 2] = value[0];\n                        _this.uintArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.uintArray = new Uint32Array(size * this.vectorSize);\n                this.arrayBuffer = this.uintArray.buffer;\n            }\n            else {\n                this.structured = true;\n                if (typeName.startsWith('atomic<')) {\n                    // this.structArray = new Array<T>(size);\n                    this.arrayBuffer = new ArrayBuffer(size * 4);\n                    this.watchMutation = true;\n                    this.vectorSize = 1;\n                    this.elementBytes = 4;\n                    this.elementCount = size;\n                    for (var i = 0; i < size; i++) {\n                        // this.structArray[i] = atomic(0) as T;\n                    }\n                    if (typeName == 'atomic<uint>') {\n                        this.uintArray = new Uint32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.uintArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.uintArray[index] = value.__value;\n                        };\n                    }\n                    else {\n                        this.intArray = new Int32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.intArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.intArray[index] = value.__value;\n                        };\n                    }\n                }\n                else {\n                    var elementSize_1 = this.adapter.getValueSize(structure);\n                    var realSize = elementSize_1 * size;\n                    this.elementCount = size;\n                    this.elementBytes = elementSize_1;\n                    this.arrayBuffer = new ArrayBuffer(realSize);\n                    this.fastIndex = function (index) {\n                        return _this.adapter.readStructuredBuffer(structure, _this.arrayBuffer, index * elementSize_1);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.cpuWriteDirty = true;\n                        _this.adapter.writeStructuredBuffer(structure, value, _this.arrayBuffer, index * (elementSize_1 / 4));\n                    };\n                }\n            }\n            this.__index = function (index) {\n                // await this.download();\n                if (_this.watchMutation) {\n                    var data = _this.fastIndex(index);\n                    data.$mutate = function (to) {\n                        _this.cpuWriteDirty = true;\n                        if (to !== undefined) {\n                            if (_this.intArray) {\n                                _this.intArray[index] = to;\n                            }\n                            else {\n                                _this.uintArray[index] = to;\n                            }\n                        }\n                    };\n                    return data;\n                }\n                else {\n                    return _this.fastIndex(index);\n                }\n            };\n            this.__index_assign = function (index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, value);\n            };\n            this.__index_assign_op = function (op_fn, index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, op_fn(_this.fastIndex(index), value));\n            };\n        }\n        buffer_internal.prototype.destroy = function () {\n            this.adapter.destroyBuffer(this);\n        };\n        buffer_internal.prototype.__index = function (index) {\n            // this.download();\n            // return this.fastIndex(index);\n            return null;\n        };\n        buffer_internal.prototype.__index_assign = function (index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, value);\n        };\n        buffer_internal.prototype.__index_assign_op = function (op_fn, index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\n        };\n        buffer_internal.prototype.len = function () {\n            return this.elementCount;\n        };\n        /**\n         * Returns the underlying cpu buffer as a typed array.\n         *\n         * > [!NOTE]\n         * > This is considerably faster than using the raw index [] operator.\n         *\n         * > [!NOTE]\n         * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\n         *\n         * \\`\\`\\`shadeup\n         * let buf = buffer<uint>();\n         * let data = buf.getData();\n         *\n         * for (let i = 0; i < data.length; i += 4) {\n         * \t// Do something with data[i]\n         * }\n         * \\`\\`\\`\n         */\n        buffer_internal.prototype.getData = function () {\n            var _a, _b, _c;\n            if (this.structured) {\n                return this.structArray;\n            }\n            else {\n                return (_c = (_b = (_a = this.floatArray) !== null && _a !== void 0 ? _a : this.intArray) !== null && _b !== void 0 ? _b : this.uintArray) !== null && _c !== void 0 ? _c : new Uint8Array(0);\n            }\n        };\n        buffer_internal.prototype.write = function (other) {\n            if (!this.adapter)\n                return;\n            this.adapter.copyBufferToBuffer(other, this);\n        };\n        /** @shadeup=tag(async) @shadeup=noemit_gpu */\n        buffer_internal.prototype.download = function () {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!this.adapter)\n                                return [2 /*return*/];\n                            if (this.pendingWrites > 0) {\n                                (0, context_1.getShadeupLocalContext)().flushAdapter();\n                            }\n                            if (!this.cpuReadDirty) return [3 /*break*/, 2];\n                            this.cpuReadDirty = false;\n                            return [4 /*yield*/, this.adapter.downloadBuffer(this)];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        buffer_internal.prototype.downloadAsync = function () {\n            return this['download']();\n        };\n        /** @shadeup=noemit_gpu */\n        buffer_internal.prototype.upload = function () {\n            if (!this.adapter)\n                return;\n            if (this.cpuWriteDirty) {\n                this.cpuWriteDirty = false;\n                this.adapter.uploadBuffer(this);\n            }\n        };\n        buffer_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_buffer\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"structArray\\\\\",null],[\\\\\"floatArray\\\\\",null],[\\\\\"intArray\\\\\",null],[\\\\\"uintArray\\\\\",null],[\\\\\"arrayBuffer\\\\\",null],[\\\\\"vectorSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"typeName\\\\\",null],[\\\\\"platformPayload\\\\\",null],[\\\\\"adapter\\\\\",null],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pendingWrites\\\\\",null],[\\\\\"cpuReadDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"cpuWriteDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"elementCount\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"elementBytes\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"structured\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastIndex\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"fastIndexAssign\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"watchMutation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\n        };\n        return buffer_internal;\n    }());\n    exports.buffer_internal = buffer_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_buffer\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"structArray\\\\\",null],[\\\\\"floatArray\\\\\",null],[\\\\\"intArray\\\\\",null],[\\\\\"uintArray\\\\\",null],[\\\\\"arrayBuffer\\\\\",null],[\\\\\"vectorSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"typeName\\\\\",null],[\\\\\"platformPayload\\\\\",null],[\\\\\"adapter\\\\\",null],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"pendingWrites\\\\\",null],[\\\\\"cpuReadDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"cpuWriteDirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"elementCount\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"elementBytes\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"structured\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastIndex\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"fastIndexAssign\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"watchMutation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"symbol\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), buffer_internal)\n    function buffer(e1, typeName, structure) {\n        if (typeof e1 === 'number') {\n            var size = e1;\n            var buf = new buffer_internal(size, typeName, structure);\n            return buf;\n        }\n        else {\n            var data = e1;\n            var buf = new buffer_internal(data.length, typeName, structure);\n            for (var i = 0; i < data.length; i++) {\n                buf.fastIndexAssign(i, data[i]);\n            }\n            return buf;\n        }\n    }\n    exports.buffer = buffer;\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/texture.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/texture.js\",\n          writeByteOrderMark: false,\n          text: 'define([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.texture3d = exports.texture3d_internal_empty = exports.texture2d = exports.texture2d_internal_empty = void 0;\\n    var texture2d_internal_empty = /** @class */ (function () {\\n        function texture2d_internal_empty() {\\n            this.__opaque_texture2d = true;\\n            this.size = [0, 0];\\n            this.paint = null;\\n        }\\n        /** @shadeup=glsl(!texture($self$, $0$)) */\\n        texture2d_internal_empty.prototype.__index = function (index) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.__index_assign = function (index, value) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.getFast = function (index) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.setFast = function (index, value) {\\n            return null;\\n        };\\n        /** @shadeup=tag(async) */\\n        texture2d_internal_empty.prototype.download = function () { };\\n        texture2d_internal_empty.prototype.downloadAsync = function () {\\n            return null;\\n        };\\n        /**\\n         * Returns the underlying cpu buffer as a typed array.\\n         *\\n         * Note that this is considerably faster than using the raw index [] operator.\\n         *\\n         * ```shadeup\\n         * let tex = texture2d<float4>();\\n         * let data = tex.getData();\\n         *\\n         * for (let i = 0; i < data.length; i += 4) {\\n         * \tlet r = data[i];\\n         * \tlet g = data[i + 1];\\n         * \tlet b = data[i + 2];\\n         * \tlet a = data[i + 3];\\n         *\\n         * \t// Do something with the pixel\\n         * }\\n         * ```\\n         */\\n        texture2d_internal_empty.prototype.getData = function () {\\n            return new Uint32Array(0);\\n        };\\n        texture2d_internal_empty.prototype.upload = function () { };\\n        texture2d_internal_empty.prototype.sample = function (position) { };\\n        texture2d_internal_empty.prototype.clear = function (color) {\\n            if (color === void 0) { color = \\'auto\\'; }\\n        };\\n        texture2d_internal_empty.prototype.flush = function () { };\\n        /** Release the texture */\\n        texture2d_internal_empty.prototype.destroy = function () { };\\n        texture2d_internal_empty.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture2d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"paint\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}],[\\\\\"draw\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawIndexed\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawAdvanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawInstanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\");\\n        };\\n        return texture2d_internal_empty;\\n    }());\\n    exports.texture2d_internal_empty = texture2d_internal_empty;\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture2d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"paint\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\",\\\\\"fields\\\\\":[[\\\\\"markDirtyCallback\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"__ctx\\\\\",null],[\\\\\"__gl\\\\\",null],[\\\\\"__offscreen_canvas\\\\\",null],[\\\\\"__program\\\\\",null],[\\\\\"stagedChanges\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"dirty\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPoints\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"fastPointsBuffer\\\\\",null],[\\\\\"__currentColor\\\\\",null],[\\\\\"pointsCounter\\\\\",null],[\\\\\"cacheSize\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"staticSize\\\\\":2}]]}],[\\\\\"draw\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawIndexed\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawAdvanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}],[\\\\\"drawInstanced\\\\\",{\\\\\"type\\\\\":\\\\\"unknown\\\\\"}]]}\"), texture2d_internal_empty)\\n    function texture2d(size, format, type) {\\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, format, type);\\n    }\\n    exports.texture2d = texture2d;\\n    var texture3d_internal_empty = /** @class */ (function () {\\n        function texture3d_internal_empty() {\\n            this.__opaque_texture3d = true;\\n            this.size = [0, 0, 0];\\n        }\\n        /** @shadeup=glsl(!texture($self$, $0$)) */\\n        texture3d_internal_empty.prototype.__index = function (index) {\\n            return null;\\n        };\\n        texture3d_internal_empty.prototype.__index_assign = function (index, value) { };\\n        texture3d_internal_empty.prototype.sample = function (position) { };\\n        texture3d_internal_empty.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture3d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}]]}\");\\n        };\\n        return texture3d_internal_empty;\\n    }());\\n    exports.texture3d_internal_empty = texture3d_internal_empty;\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\\\",\\\\\"fields\\\\\":[[\\\\\"__opaque_texture3d\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"bool\\\\\"}],[\\\\\"size\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}]]}\"), texture3d_internal_empty)\\n    function texture3d(size, type) {\\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, type);\\n    }\\n    exports.texture3d = texture3d;\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/drawIndexed.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/drawIndexed.js\",\n          writeByteOrderMark: false,\n          text: `define([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\", \"/std_math\"], function (require, exports, context_1, buffer_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.computeIndirect = exports.drawAttributes = exports.drawCount = exports.drawAlt2 = exports.drawFullscreen = exports.draw = exports.drawAdvanced = exports.makeShader = exports.ShaderOutput = exports.ShaderInput = exports.shader_start_shd_ = exports.drawIndirect = exports.drawIndexedIndirect = exports.drawInstancedIndexed = exports.drawInstanced = exports.drawIndexed = void 0;\n    function drawIndexed(indexBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexed = drawIndexed;\n    function drawInstanced(mesh, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstanced = drawInstanced;\n    function drawInstancedIndexed(indexBuffer, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstancedIndexed = drawInstancedIndexed;\n    function drawIndexedIndirect(indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed_indirect(indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexedIndirect = drawIndexedIndirect;\n    function drawIndirect(mesh, indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indirect(mesh, indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndirect = drawIndirect;\n    function shader_start_shd_(s, groupSize) {\n        return s;\n    }\n    exports.shader_start_shd_ = shader_start_shd_;\n    /**@shadeup=struct*/\n    var ShaderInput = /** @class */ (function () {\n        function ShaderInput() {\n            /** Interpolated world position (available in fragment, and vertex) */\n            this.position = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated normal (fragment), Source mesh normal (vertex) */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated tangent (fragment), Source mesh tangent (vertex) */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex shader output position */\n            this.clipPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            this.realPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** UV channel 0 input (available in fragment, and vertex) */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Screen position in pixels (available in fragment, and vertex) */\n            this.screen = (0, std_math_1.float2)(0, 0);\n            /** Interpolated vertex color (available in fragment, and vertex)  */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Group ID (available in compute) */\n            this.groupId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Group size (available in compute) */\n            this.groupSize = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Global id (groupId * groupSize + localId) (available in compute) */\n            this.globalId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Local id (available in compute) */\n            this.localId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Instance index (available in fragment, and vertex) */\n            this.instanceIndex = 0;\n            /** Vertex index (available in vertex) */\n            this.vertexIndex = 0;\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderInput.prototype.attr = function (index, interpolation) {\n            return null;\n        };\n        ShaderInput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderInput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"clipPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"realPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"groupId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"groupSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"globalId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"localId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"instanceIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"vertexIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}]]}\");\n        };\n        return ShaderInput;\n    }());\n    exports.ShaderInput = ShaderInput;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderInput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"clipPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"realPosition\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"screen\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"groupId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"groupSize\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"globalId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"localId\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int3\\\\\"}],[\\\\\"instanceIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"vertexIndex\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}]]}\"), ShaderInput)\n    /**@shadeup=struct*/\n    var ShaderOutput = /** @class */ (function () {\n        function ShaderOutput() {\n            /** Vertex output position */\n            this.position = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Vertex output normal */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output tangent */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output bitangent */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** UV channel 0 output */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Pixel color output */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderOutput.prototype.attr = function (index, value, interpolation) { };\n        ShaderOutput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderOutput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\");\n        };\n        return ShaderOutput;\n    }());\n    exports.ShaderOutput = ShaderOutput;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"ShaderOutput\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"tangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"bitangent\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"uv\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\"), ShaderOutput)\n    /** @shadeup=shader */\n    function makeShader(key, fn) {\n        return fn;\n    }\n    exports.makeShader = makeShader;\n    function drawAdvanced(descriptor) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_advanced(descriptor);\n    }\n    exports.drawAdvanced = drawAdvanced;\n    function draw(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.draw = draw;\n    function drawFullscreen(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.drawFullscreen = drawFullscreen;\n    function drawAlt2(fullScreenPixelShader) { }\n    exports.drawAlt2 = drawAlt2;\n    function drawCount(triCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n    }\n    exports.drawCount = drawCount;\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\n    }\n    exports.drawAttributes = drawAttributes;\n    function computeIndirect(indirectBuffer, indirectOffset, computeShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_compute_indirect(indirectBuffer, indirectOffset, computeShader);\n    }\n    exports.computeIndirect = computeIndirect;\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/drawAttributes.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/drawAttributes.js\",\n          writeByteOrderMark: false,\n          text: 'define([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\"], function (require, exports, context_1, buffer_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.drawAttributes = void 0;\\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\\n    }\\n    exports.drawAttributes = drawAttributes;\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/drawCount.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/drawCount.js\",\n          writeByteOrderMark: false,\n          text: 'define([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    exports.drawCount = void 0;\\n    function drawCount(triCount, vertexShader, pixelShader) {\\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\n    }\\n    exports.drawCount = drawCount;\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/physics.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/physics.js\",\n          writeByteOrderMark: false,\n          text: `define([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.physics = exports.PhysicsEngine3d = exports.PhysicsEngine2d = exports.PhysicsRigidBody2d = exports.PhysicsRayCastResult2d = exports.PhysicsCollider2d = void 0;\n    var PhysicsCollider2d = /** @class */ (function () {\n        function PhysicsCollider2d(rapier, world, collider) {\n            this.rapier = rapier;\n            this.world = world;\n            this.collider = collider;\n        }\n        PhysicsCollider2d.prototype.setTranslation = function (position) {\n            this.collider.setTranslation(toVec2(position));\n        };\n        PhysicsCollider2d.prototype.setRotation = function (rotation) {\n            this.collider.setRotation(rotation);\n        };\n        PhysicsCollider2d.prototype.setSensor = function (isSensor) {\n            this.collider.setSensor(isSensor);\n        };\n        PhysicsCollider2d.prototype.setCollisionGroups = function (groups) {\n            this.collider.setCollisionGroups(groups);\n        };\n        PhysicsCollider2d.prototype.setCollidesWith = function (groups) {\n            this.collider.setActiveCollisionTypes(groups);\n        };\n        PhysicsCollider2d.prototype.setFriction = function (friction) {\n            this.collider.setFriction(friction);\n        };\n        PhysicsCollider2d.prototype.setRestitution = function (restitution) {\n            this.collider.setRestitution(restitution);\n        };\n        PhysicsCollider2d.prototype.setDensity = function (density) {\n            this.collider.setDensity(density);\n        };\n        PhysicsCollider2d.prototype.setMass = function (mass) {\n            this.collider.setMass(mass);\n        };\n        PhysicsCollider2d.prototype.setRadius = function (radius) {\n            this.collider.setRadius(radius);\n        };\n        PhysicsCollider2d.prototype.setHalfExtents = function (halfExtents) {\n            this.collider.setHalfExtents(toVec2(halfExtents));\n        };\n        PhysicsCollider2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"collider\\\\\",null]]}\");\n        };\n        return PhysicsCollider2d;\n    }());\n    exports.PhysicsCollider2d = PhysicsCollider2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"collider\\\\\",null]]}\"), PhysicsCollider2d)\n    function toVec2(v) {\n        return { x: v[0], y: v[1] };\n    }\n    function toVec3(v) {\n        return { x: v[0], y: v[1], z: v[2] };\n    }\n    var PhysicsRayCastResult2d = /** @class */ (function () {\n        function PhysicsRayCastResult2d(rapier, result) {\n            this.rapier = rapier;\n            this.result = result;\n        }\n        PhysicsRayCastResult2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"result\\\\\",null]]}\");\n        };\n        return PhysicsRayCastResult2d;\n    }());\n    exports.PhysicsRayCastResult2d = PhysicsRayCastResult2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"result\\\\\",null]]}\"), PhysicsRayCastResult2d)\n    var PhysicsRigidBody2d = /** @class */ (function () {\n        function PhysicsRigidBody2d(rapier, world, body) {\n            this.rapier = rapier;\n            this.world = world;\n            this.body = body;\n        }\n        PhysicsRigidBody2d.prototype.addBallCollider = function (radius) {\n            var colDesc = this.rapier.ColliderDesc.ball(radius);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addBoxCollider = function (halfExtents) {\n            var colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addCapsuleCollider = function (radius, halfHeight) {\n            var colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addTriangleCollider = function (a, b, c) {\n            var colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addConvexCollider = function (points) {\n            var floatarr = new Float32Array(points.length * 2);\n            for (var i = 0; i < points.length; i++) {\n                floatarr[i * 2 + 0] = points[i][0];\n                floatarr[i * 2 + 1] = points[i][1];\n            }\n            var colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\n            if (!colDesc)\n                throw new Error('Failed to create convex hull collider');\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addHeightfieldCollider = function (heights, scale) {\n            var arr = new Float32Array(heights.length);\n            for (var i = 0; i < heights.length; i++) {\n                arr[i] = heights[i];\n            }\n            var colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.setTranslation = function (position) {\n            this.body.setTranslation(toVec2(position), true);\n        };\n        PhysicsRigidBody2d.prototype.setRotation = function (rotation) {\n            this.body.setRotation(rotation, true);\n        };\n        PhysicsRigidBody2d.prototype.setVelocity = function (velocity) {\n            this.body.setLinvel(toVec2(velocity), true);\n        };\n        PhysicsRigidBody2d.prototype.setAngularVelocity = function (velocity) {\n            this.body.setAngvel(velocity, true);\n        };\n        PhysicsRigidBody2d.prototype.addForce = function (force) {\n            this.body.addForce(toVec2(force), true);\n        };\n        PhysicsRigidBody2d.prototype.addForceAtPoint = function (force, point) {\n            this.body.addForceAtPoint(toVec2(force), toVec2(point), true);\n        };\n        PhysicsRigidBody2d.prototype.addTorque = function (torque) {\n            this.body.addTorque(torque, true);\n        };\n        PhysicsRigidBody2d.prototype.setAdditionalMass = function (mass) {\n            this.body.setAdditionalMass(mass, true);\n        };\n        PhysicsRigidBody2d.prototype.setEnabled = function (enabled) {\n            this.body.setEnabled(enabled);\n        };\n        PhysicsRigidBody2d.prototype.sleep = function () {\n            this.body.sleep();\n        };\n        PhysicsRigidBody2d.prototype.wakeUp = function () {\n            this.body.wakeUp();\n        };\n        PhysicsRigidBody2d.prototype.setGravityScale = function (scale) {\n            this.body.setGravityScale(scale, true);\n        };\n        PhysicsRigidBody2d.prototype.setLinearDamping = function (damping) {\n            this.body.setLinearDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.setAngularDamping = function (damping) {\n            this.body.setAngularDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.isSleeping = function () {\n            return this.body.isSleeping();\n        };\n        PhysicsRigidBody2d.prototype.mass = function () {\n            return this.body.mass();\n        };\n        PhysicsRigidBody2d.prototype.translation = function () {\n            var t = this.body.translation();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.rotation = function () {\n            return this.body.rotation();\n        };\n        PhysicsRigidBody2d.prototype.velocity = function () {\n            var t = this.body.linvel();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.angularVelocity = function () {\n            return this.body.angvel();\n        };\n        PhysicsRigidBody2d.prototype.isMoving = function () {\n            return this.body.isMoving();\n        };\n        PhysicsRigidBody2d.prototype.collider = function (index) {\n            var collider = this.body.collider(index);\n            if (!collider)\n                throw new Error('Failed to get collider');\n            return new PhysicsCollider2d(this.rapier, this.world, collider);\n        };\n        PhysicsRigidBody2d.prototype.applyImpulse = function (impulse) {\n            this.body.applyImpulse(toVec2(impulse), true);\n        };\n        PhysicsRigidBody2d.prototype.applyTorqueImpulse = function (impulse) {\n            this.body.applyTorqueImpulse(impulse, true);\n        };\n        PhysicsRigidBody2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"body\\\\\",null]]}\");\n        };\n        return PhysicsRigidBody2d;\n    }());\n    exports.PhysicsRigidBody2d = PhysicsRigidBody2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null],[\\\\\"body\\\\\",null]]}\"), PhysicsRigidBody2d)\n    var PhysicsEngine2d = /** @class */ (function () {\n        function PhysicsEngine2d(rapier) {\n            this.rapier = rapier;\n            this.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\n        }\n        PhysicsEngine2d.prototype.step = function () {\n            this.world.step();\n        };\n        PhysicsEngine2d.prototype.createRigidBody = function (position, rotation, mode) {\n            var rbDesc = mode == 'dynamic'\n                ? this.rapier.RigidBodyDesc.dynamic()\n                : mode == 'fixed'\n                    ? this.rapier.RigidBodyDesc.fixed()\n                    : this.rapier.RigidBodyDesc.dynamic();\n            rbDesc.setTranslation(position[0], position[1]);\n            rbDesc.setRotation(rotation);\n            var rb = this.world.createRigidBody(rbDesc);\n            return new PhysicsRigidBody2d(this.rapier, this.world, rb);\n        };\n        PhysicsEngine2d.prototype.bodies = function () {\n            var bodies = this.world.bodies;\n            var result = [];\n            for (var i = 0; i < bodies.len(); i++) {\n                result.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)));\n            }\n            return result;\n        };\n        PhysicsEngine2d.prototype.castRay = function (start, end, maxi) {\n            var result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\n            if (!result)\n                return null;\n            return new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent());\n        };\n        PhysicsEngine2d.prototype.setGravity = function (gravity) {\n            this.world.gravity = toVec2(gravity);\n        };\n        PhysicsEngine2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null]]}\");\n        };\n        return PhysicsEngine2d;\n    }());\n    exports.PhysicsEngine2d = PhysicsEngine2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"rapier\\\\\",null],[\\\\\"world\\\\\",null]]}\"), PhysicsEngine2d)\n    var PhysicsEngine3d = /** @class */ (function () {\n        function PhysicsEngine3d() {\n        }\n        PhysicsEngine3d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return PhysicsEngine3d;\n    }());\n    exports.PhysicsEngine3d = PhysicsEngine3d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\\\",\\\\\"fields\\\\\":[]}\"), PhysicsEngine3d)\n    var physics;\n    (function (physics) {\n        function engine2d() {\n            return new PhysicsEngine2d(window.RAPIER_2D);\n        }\n        physics.engine2d = engine2d;\n    })(physics = exports.physics || (exports.physics = {}));\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/context.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/context.js\",\n          writeByteOrderMark: false,\n          text: `define([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.getShadeupLocalContext = void 0;\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/mesh.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/mesh.js\",\n          writeByteOrderMark: false,\n          text: `var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/common\"], function (require, exports, __, std_math_1, std___std_all_1, common_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.Model = exports.ModelPart = exports.Material = exports.mesh = exports.Mesh = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var Mesh = /** @class */ (function () {\n        function Mesh(data) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            this.vertices = ((_a = data.vertices) !== null && _a !== void 0 ? _a : []);\n            this.triangles = ((_b = data.triangles) !== null && _b !== void 0 ? _b : []);\n            this.normals = ((_c = data.normals) !== null && _c !== void 0 ? _c : []);\n            this.tangents = ((_d = data.tangents) !== null && _d !== void 0 ? _d : []);\n            this.bitangents = ((_e = data.bitangents) !== null && _e !== void 0 ? _e : []);\n            this.uvs = ((_f = data.uvs) !== null && _f !== void 0 ? _f : []);\n            this.colors = ((_g = data.colors) !== null && _g !== void 0 ? _g : []);\n            this.symbol = ((_h = data.symbol) !== null && _h !== void 0 ? _h : null);\n        }\n        Mesh.prototype.rect = function (size) {\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.quad = function (position, direction, right, size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;\n            var shader_self_temp = this;\n            var up = (0, std_math_1.normalize)((0, std_math_1.cross)(right, direction));\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            var index = (this.vertices.len() | 0);\n            this.vertices.push((_c = (_e = position, _f = (_g = right, _h = (__.FM.negate_1(halfSize[0])), [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_j = up, _k = halfSize[1], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]));\n            this.vertices.push((_l = (_o = position, _p = (_q = right, _r = halfSize[0], [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = (_s = up, _t = halfSize[1], [_s[0] * _t, _s[1] * _t, _s[2] * _t]), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]]));\n            this.vertices.push((_u = (_w = position, _x = (_y = right, _z = halfSize[0], [_y[0] * _z, _y[1] * _z, _y[2] * _z]), [_w[0] + _x[0], _w[1] + _x[1], _w[2] + _x[2]]), _v = (_0 = up, _1 = (__.FM.negate_1(halfSize[1])), [_0[0] * _1, _0[1] * _1, _0[2] * _1]), [_u[0] + _v[0], _u[1] + _v[1], _u[2] + _v[2]]));\n            this.vertices.push((_2 = (_4 = position, _5 = (_6 = right, _7 = (__.FM.negate_1(halfSize[0])), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2]]), _3 = (_8 = up, _9 = (__.FM.negate_1(halfSize[1])), [_8[0] * _9, _8[1] * _9, _8[2] * _9]), [_2[0] + _3[0], _2[1] + _3[1], _2[2] + _3[2]]));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.box = function (size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var shader_self_temp = this;\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b]);\n            var UP = __.makeVector((0 | 0), 1.0, (0 | 0));\n            var DOWN = __.makeVector((0 | 0), (__.FM.negate_1(1.0)), (0 | 0));\n            var LEFT = __.makeVector((__.FM.negate_1(1.0)), (0 | 0), (0 | 0));\n            var RIGHT = __.makeVector(1.0, (0 | 0), (0 | 0));\n            var FORWARD = __.makeVector((0 | 0), (0 | 0), 1.0);\n            var BACK = __.makeVector((0 | 0), (0 | 0), (__.FM.negate_1(1.0)));\n            // Up\n            this.quad((_c = UP, _d = halfSize[1], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), UP, LEFT, __.makeVector(size[0], size[2]));\n            // Down\n            this.quad((_e = DOWN, _f = halfSize[1], [_e[0] * _f, _e[1] * _f, _e[2] * _f]), DOWN, RIGHT, __.makeVector(size[0], size[2]));\n            // Left\n            this.quad((_g = LEFT, _h = halfSize[0], [_g[0] * _h, _g[1] * _h, _g[2] * _h]), LEFT, BACK, __.makeVector(size[2], size[1]));\n            // Right\n            this.quad((_j = RIGHT, _k = halfSize[0], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), RIGHT, FORWARD, __.makeVector(size[2], size[1]));\n            // Forward\n            this.quad((_l = FORWARD, _m = halfSize[2], [_l[0] * _m, _l[1] * _m, _l[2] * _m]), FORWARD, LEFT, __.makeVector(size[0], size[1]));\n            // Back\n            this.quad((_o = BACK, _p = halfSize[2], [_o[0] * _p, _o[1] * _p, _o[2] * _p]), BACK, RIGHT, __.makeVector(size[0], size[1]));\n        };\n        Mesh.prototype.rectAt = function (minPos, maxPos) {\n            var _a, _b;\n            var shader_self_temp = this;\n            this.rect((_a = maxPos, _b = minPos, [_a[0] - _b[0], _a[1] - _b[1]]));\n            this.translate(__.makeVector(minPos, (0 | 0)));\n        };\n        Mesh.prototype.circle = function (pos, radius, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n        };\n        Mesh.prototype.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var verticesPerRing = vertices + (1 | 0);\n            for (var i = (0 | 0); i <= rings; i++) {\n                var y = i / rings;\n                var angleY = y * common_1.PI;\n                var posY = Math.cos(angleY);\n                var radiusY = Math.sin(angleY);\n                for (var j = (0 | 0); j <= vertices; j++) {\n                    var x = j / vertices;\n                    var angleX = x * common_1.PI * (2 | 0);\n                    var posX = Math.cos(angleX);\n                    var posZ = Math.sin(angleX);\n                    this.vertices.push(__.makeVector(posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\n                    this.normals.push((0, std_math_1.normalize)(__.makeVector(posX * radiusY, posY, posZ * radiusY)));\n                    var tangent = (0, std_math_1.normalize)(__.makeVector(posZ, (0 | 0), (__.FM.negate_1(posX))));\n                    var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(this.normals[(this.normals.len() | 0) - (1 | 0)], tangent));\n                    this.tangents.push(tangent);\n                    this.bitangents.push(bitangent);\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < rings; i++) {\n                for (var j = (0 | 0); j < vertices; j++) {\n                    var i0 = i * verticesPerRing + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + verticesPerRing;\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.icoSphere = function (pos, radius, subdivisions) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var t = (1.0 + Math.sqrt(5.0)) / 2.0;\n            var vertices = [__.makeVector((__.FM.negate_1((1 | 0))), t, (0 | 0)), __.makeVector((1 | 0), t, (0 | 0)), __.makeVector((__.FM.negate_1((1 | 0))), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((1 | 0), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), t), __.makeVector((0 | 0), (1 | 0), t), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), (__.FM.negate_1(t))), __.makeVector((0 | 0), (1 | 0), (__.FM.negate_1(t))), __.makeVector(t, (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector(t, (0 | 0), (1 | 0)), __.makeVector((__.FM.negate_1(t)), (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector((__.FM.negate_1(t)), (0 | 0), (1 | 0))];\n            var triangles = [__.intifyVector(__.makeVector((0 | 0), (11 | 0), (5 | 0))), __.intifyVector(__.makeVector((0 | 0), (5 | 0), (1 | 0))), __.intifyVector(__.makeVector((0 | 0), (1 | 0), (7 | 0))), __.intifyVector(__.makeVector((0 | 0), (7 | 0), (10 | 0))), __.intifyVector(__.makeVector((0 | 0), (10 | 0), (11 | 0))), __.intifyVector(__.makeVector((1 | 0), (5 | 0), (9 | 0))), __.intifyVector(__.makeVector((5 | 0), (11 | 0), (4 | 0))), __.intifyVector(__.makeVector((11 | 0), (10 | 0), (2 | 0))), __.intifyVector(__.makeVector((10 | 0), (7 | 0), (6 | 0))), __.intifyVector(__.makeVector((7 | 0), (1 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (9 | 0), (4 | 0))), __.intifyVector(__.makeVector((3 | 0), (4 | 0), (2 | 0))), __.intifyVector(__.makeVector((3 | 0), (2 | 0), (6 | 0))), __.intifyVector(__.makeVector((3 | 0), (6 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (8 | 0), (9 | 0))), __.intifyVector(__.makeVector((4 | 0), (9 | 0), (5 | 0))), __.intifyVector(__.makeVector((2 | 0), (4 | 0), (11 | 0))), __.intifyVector(__.makeVector((6 | 0), (2 | 0), (10 | 0))), __.intifyVector(__.makeVector((8 | 0), (6 | 0), (7 | 0))), __.intifyVector(__.makeVector((9 | 0), (8 | 0), (1 | 0)))];\n            for (var i = (0 | 0); i < (vertices.len() | 0); i++) {\n                this.vertices.push((_a = (0, std_math_1.normalize)(vertices[i]), _b = radius, [_a[0] * _b, _a[1] * _b, _a[2] * _b]));\n            }\n            for (var i = (0 | 0); i < (triangles.len() | 0); i++) {\n                this.triangles.push(index + triangles[i][0]);\n                this.triangles.push(index + triangles[i][1]);\n                this.triangles.push(index + triangles[i][2]);\n            }\n            for (var i = (0 | 0); i < subdivisions; i++) {\n                var newTriangles = [];\n                for (var j = (0 | 0); j < (this.triangles.len() | 0); j = j + (3 | 0)) {\n                    var i0 = this.triangles[j + (0 | 0)];\n                    var i1 = this.triangles[j + (1 | 0)];\n                    var i2 = this.triangles[j + (2 | 0)];\n                    var v0 = this.vertices[i0];\n                    var v1 = this.vertices[i1];\n                    var v2 = this.vertices[i2];\n                    var v3 = (0, std_math_1.normalize)((_c = (_e = v0, _f = v1, [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = 2.0, [_c[0] / _d, _c[1] / _d, _c[2] / _d]));\n                    var v4 = (0, std_math_1.normalize)((_g = (_j = v1, _k = v2, [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = 2.0, [_g[0] / _h, _g[1] / _h, _g[2] / _h]));\n                    var v5 = (0, std_math_1.normalize)((_l = (_o = v2, _p = v0, [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = 2.0, [_l[0] / _m, _l[1] / _m, _l[2] / _m]));\n                    var i3 = (this.vertices.len() | 0);\n                    var i4 = i3 + (1 | 0);\n                    var i5 = i3 + (2 | 0);\n                    this.vertices.push((_q = v3, _r = radius, [_q[0] * _r, _q[1] * _r, _q[2] * _r]));\n                    this.vertices.push((_s = v4, _t = radius, [_s[0] * _t, _s[1] * _t, _s[2] * _t]));\n                    this.vertices.push((_u = v5, _v = radius, [_u[0] * _v, _u[1] * _v, _u[2] * _v]));\n                    newTriangles.push(i0, i3, i5);\n                    newTriangles.push(i3, i1, i4);\n                    newTriangles.push(i3, i4, i5);\n                    newTriangles.push(i5, i4, i2);\n                }\n                this.triangles = newTriangles;\n            }\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                var normal = (0, std_math_1.normalize)(this.vertices[i]);\n                var tangent = (0, std_math_1.normalize)(__.makeVector(normal[2], (0 | 0), (__.FM.negate_1(normal[0]))));\n                var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(normal, tangent));\n                this.normals.push(normal);\n                this.tangents.push(tangent);\n                this.bitangents.push(bitangent);\n            }\n            for (var i = (0 | 0); i < (this.triangles.len() | 0); i = i + (3 | 0)) {\n                var i0 = this.triangles[i + (0 | 0)];\n                var i1 = this.triangles[i + (1 | 0)];\n                var i2 = this.triangles[i + (2 | 0)];\n                var v0 = this.vertices[i0];\n                var v1 = this.vertices[i1];\n                var v2 = this.vertices[i2];\n                var uv0 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v0[2], v0[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v0[1]) / common_1.PI, 0.5));\n                var uv1 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v1[2], v1[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v1[1]) / common_1.PI, 0.5));\n                var uv2 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v2[2], v2[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v2[1]) / common_1.PI, 0.5));\n                this.uvs.push(uv0);\n                this.uvs.push(uv1);\n                this.uvs.push(uv2);\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.cylinder = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.capsule = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.cone = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.translate(pos);\n        };\n        Mesh.prototype.plane = function (pos, size, subdivisions) {\n            var _a, _b;\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            for (var i = (0 | 0); i <= subdivisions[0]; i++) {\n                var x = i / __.swizzle(subdivisions, 'x');\n                var posX = x * size[0] - halfSize[0];\n                for (var j = (0 | 0); j <= subdivisions[1]; j++) {\n                    var y = j / __.swizzle(subdivisions, 'y');\n                    var posY = y * size[1] - halfSize[1];\n                    this.vertices.push(__.makeVector(posX, (0 | 0), posY));\n                    this.normals.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n                    this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n                    this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < subdivisions[0]; i++) {\n                for (var j = (0 | 0); j < subdivisions[1]; j++) {\n                    var i0 = i * (subdivisions[1] + (1 | 0)) + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + subdivisions[1] + (1 | 0);\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.translate = function (pos) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.add, i, pos);\n            }\n            return this;\n        };\n        Mesh.prototype.rotate = function (quaternion) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, common_1.quat.rotate(quaternion, this.vertices[i]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, common_1.quat.rotate(quaternion, this.normals[i]));\n            }\n            return this;\n        };\n        Mesh.prototype.transform = function (matrix) {\n            var _a, _b;\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, (_a = (__.mul(__.makeVector(this.vertices[i], (1 | 0)), matrix)), [_a[0], _a[1], _a[2]]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, (_b = (__.mul(__.makeVector(this.normals[i], (1 | 0)), matrix)), [_b[0], _b[1], _b[2]]));\n            }\n            return this;\n        };\n        Mesh.prototype.scale = function (scale) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.mul, i, scale);\n            }\n            return this;\n        };\n        Mesh.prototype.bounds = function () {\n            var _a, _b, _c, _d;\n            var shader_self_temp = this;\n            var mn = (_a = 0.0, [_a, _a, _a]);\n            var mx = (_b = 0.0, [_b, _b, _b]);\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                mn = (0, std_math_1.min)(mn, this.vertices[i]);\n                mx = (0, std_math_1.max)(mx, this.vertices[i]);\n            }\n            return _c = mx, _d = mn, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]];\n        };\n        Mesh.prototype.center = function () {\n            var _a, _b;\n            var shader_self_temp = this;\n            var bounds = this.bounds();\n            return _a = bounds, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        Mesh.new = function () { return new Mesh({ vertices: [], triangles: [], tangents: [], bitangents: [], normals: [], uvs: [], colors: [] }); };\n        Mesh.prototype.append = function (other) {\n            var shader_self_temp = this;\n            var oldVertices = (this.vertices.len() | 0);\n            var oldTriangles = (this.triangles.len() | 0);\n            this.vertices.append(other.vertices);\n            this.triangles.append(other.triangles);\n            this.normals.append(other.normals);\n            this.tangents.append(other.tangents);\n            this.bitangents.append(other.bitangents);\n            this.uvs.append(other.uvs);\n            this.colors.append(other.colors);\n            for (var i = oldTriangles; i < (this.triangles.len() | 0); i++) {\n                this.triangles.__index_assign_op(__.add, i, oldVertices);\n            }\n        };\n        Mesh.prototype.getVertices = function () { var shader_self_temp = this; return this.vertices; };\n        Mesh.prototype.getTriangles = function () { var shader_self_temp = this; return this.triangles; };\n        Mesh.prototype.getNormals = function () { var shader_self_temp = this; return this.normals; };\n        Mesh.prototype.getTangents = function () { var shader_self_temp = this; return this.tangents; };\n        Mesh.prototype.getBitangents = function () { var shader_self_temp = this; return this.bitangents; };\n        Mesh.prototype.getUVs = function () { var shader_self_temp = this; return this.uvs; };\n        Mesh.prototype.getColors = function () { var shader_self_temp = this; return this.colors; };\n        Mesh.prototype.setVertices = function (vertices) {\n            var shader_self_temp = this;\n            this.vertices = vertices;\n        };\n        Mesh.prototype.setTriangles = function (triangles) {\n            var shader_self_temp = this;\n            this.triangles = triangles;\n        };\n        Mesh.prototype.setNormals = function (normals) {\n            var shader_self_temp = this;\n            this.normals = normals;\n        };\n        Mesh.prototype.setTangents = function (tangents) {\n            var shader_self_temp = this;\n            this.tangents = tangents;\n        };\n        Mesh.prototype.setBitangents = function (bitangents) {\n            var shader_self_temp = this;\n            this.bitangents = bitangents;\n        };\n        Mesh.prototype.setUVs = function (uvs) {\n            var shader_self_temp = this;\n            this.uvs = uvs;\n        };\n        Mesh.prototype.setColors = function (colors) {\n            var shader_self_temp = this;\n            this.colors = colors;\n        };\n        Mesh.prototype.clone = function () {\n            return new Mesh({\n                vertices: (0, std___std_all_1.__deepClone)(this.vertices),\n                triangles: (0, std___std_all_1.__deepClone)(this.triangles),\n                normals: (0, std___std_all_1.__deepClone)(this.normals),\n                tangents: (0, std___std_all_1.__deepClone)(this.tangents),\n                bitangents: (0, std___std_all_1.__deepClone)(this.bitangents),\n                uvs: (0, std___std_all_1.__deepClone)(this.uvs),\n                colors: (0, std___std_all_1.__deepClone)(this.colors),\n                symbol: (0, std___std_all_1.__deepClone)(this.symbol),\n            });\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}\"), Mesh)\n    ; /* impl Mesh */\n    var mesh = /** @class */ (function () {\n        function mesh(data) {\n        }\n        mesh.rect = function (pos, size) {\n            var _a, _b;\n            var g = Mesh.new();\n            g.rectAt(pos, (_a = pos, _b = size, [_a[0] + _b[0], _a[1] + _b[1]]));\n            return g;\n        };\n        mesh.box = function (pos, size) {\n            var g = Mesh.new();\n            g.box(size);\n            g.translate(pos);\n            return g;\n        };\n        mesh.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var g = Mesh.new();\n            g.uvSphere(pos, radius, vertices, rings);\n            return g;\n        };\n        mesh.icoSphere = function (pos, radius, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var g = Mesh.new();\n            g.icoSphere(pos, radius, subdivisions);\n            return g;\n        };\n        mesh.plane = function (pos, size, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var g = Mesh.new();\n            g.plane(pos, size, subdivisions);\n            return g;\n        };\n        /**\n            * Returns a [-1, 1] position for a given index.\n            */\n        mesh.triangleFromIndex = function (index) {\n            if (index == (0 | 0)) {\n                return __.FM.float_2_1_1(__.negate((1 | 0)), __.int(1));\n            }\n            else if (index == (1 | 0)) {\n                return __.FM.float_2_1_1(__.int(1), __.int(1));\n            }\n            else if (index == (2 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.negate((1 | 0)));\n            }\n            else {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n        };\n        mesh.circleFromIndex = function (vertexIndex, vertices) {\n            vertexIndex = vertices - vertexIndex;\n            var numSlices = vertices / (3 | 0);\n            var sliceIndex = Math.floor(vertexIndex / vertices * numSlices);\n            var incAngle = common_1.PI * 2.0 / numSlices;\n            var baseAngle = incAngle * sliceIndex;\n            if (vertexIndex % (3 | 0) == (0 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n            else if (vertexIndex % (3 | 0) == (1 | 0)) {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle), (0, std_math_1.sin)(baseAngle));\n            }\n            else {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle + incAngle), (0, std_math_1.sin)(baseAngle + incAngle));\n            }\n        };\n        mesh.rectFromIndex = function (index, vertices) {\n            var _a, _b, _c, _d, _e, _f;\n            var x = index % vertices;\n            var y = index / vertices;\n            return _a = (_c = (_e = __.FM.float_2_1_1(x, y), _f = vertices, [_e[0] / _f, _e[1] / _f]), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = 1.0, [_a[0] - _b, _a[1] - _b];\n        };\n        mesh.empty = function (numVerts) {\n            var _a, _b, _c, _d, _e, _f;\n            if (numVerts === void 0) { numVerts = (0 | 0); }\n            var g = Mesh.new();\n            if (numVerts > (0 | 0)) {\n                g.setVertices((0, std___std_all_1.array)(numVerts, (_a = (0 | 0), [_a, _a, _a])));\n                g.setNormals((0, std___std_all_1.array)(numVerts, (_b = (0 | 0), [_b, _b, _b])));\n                g.setTangents((0, std___std_all_1.array)(numVerts, (_c = (0 | 0), [_c, _c, _c])));\n                g.setBitangents((0, std___std_all_1.array)(numVerts, (_d = (0 | 0), [_d, _d, _d])));\n                g.setUVs((0, std___std_all_1.array)(numVerts, (_e = (0 | 0), [_e, _e])));\n                g.setColors((0, std___std_all_1.array)(numVerts, (_f = (0 | 0), [_f, _f, _f, _f])));\n                var tris = (0, std___std_all_1.array)(numVerts, (0 | 0));\n                for (var i = (0 | 0); i < numVerts; i++) {\n                    tris.__index_assign(i, i);\n                }\n                g.setTriangles(tris);\n            }\n            return g;\n        };\n        mesh.join = function (mesh1, mesh2) {\n            var g = Mesh.new();\n            g.append(mesh1);\n            g.append(mesh2);\n            return g;\n        };\n        // pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cylinder(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.capsule(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cone(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        mesh.prototype.clone = function () {\n            return new mesh({});\n        };\n        mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_19895_mesh\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return mesh;\n    }());\n    exports.mesh = mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_19895_mesh\\\\\",\\\\\"fields\\\\\":[]}\"), mesh)\n    ; /* impl mesh */\n    var Material = /** @class */ (function () {\n        function Material(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.baseColor = ((_a = data.baseColor) !== null && _a !== void 0 ? _a : __.FM.float_4_1_1_1_1(0.0, 0.0, 0.0, 0.0));\n            this.color = ((_b = data.color) !== null && _b !== void 0 ? _b : null);\n            this.normal = ((_c = data.normal) !== null && _c !== void 0 ? _c : null);\n            this.normalScale = ((_d = data.normalScale) !== null && _d !== void 0 ? _d : __.FM.float_2_1_1(0.0, 0.0));\n            this.roughness = ((_e = data.roughness) !== null && _e !== void 0 ? _e : null);\n            this.emissive = ((_f = data.emissive) !== null && _f !== void 0 ? _f : null);\n            this.metallic = ((_g = data.metallic) !== null && _g !== void 0 ? _g : null);\n        }\n        Material.prototype.clone = function () {\n            return new Material({\n                baseColor: (0, std___std_all_1.__deepClone)(this.baseColor),\n                color: (0, std___std_all_1.__deepClone)(this.color),\n                normal: (0, std___std_all_1.__deepClone)(this.normal),\n                normalScale: (0, std___std_all_1.__deepClone)(this.normalScale),\n                roughness: (0, std___std_all_1.__deepClone)(this.roughness),\n                emissive: (0, std___std_all_1.__deepClone)(this.emissive),\n                metallic: (0, std___std_all_1.__deepClone)(this.metallic),\n            });\n        };\n        Material.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}\");\n        };\n        return Material;\n    }());\n    exports.Material = Material;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}\"), Material)\n    ;\n    var ModelPart = /** @class */ (function () {\n        function ModelPart(data) {\n            var _a, _b, _c;\n            this.mesh = ((_a = data.mesh) !== null && _a !== void 0 ? _a : new Mesh({}));\n            this.material = ((_b = data.material) !== null && _b !== void 0 ? _b : new Material({}));\n            this.transform = ((_c = data.transform) !== null && _c !== void 0 ? _c : __.float4x4(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));\n        }\n        ModelPart.prototype.clone = function () {\n            return new ModelPart({\n                mesh: (0, std___std_all_1.__deepClone)(this.mesh),\n                material: (0, std___std_all_1.__deepClone)(this.material),\n                transform: (0, std___std_all_1.__deepClone)(this.transform),\n            });\n        };\n        ModelPart.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]}\");\n        };\n        return ModelPart;\n    }());\n    exports.ModelPart = ModelPart;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]}\"), ModelPart)\n    ;\n    var Model = /** @class */ (function () {\n        function Model(data) {\n            var _a;\n            this.parts = ((_a = data.parts) !== null && _a !== void 0 ? _a : []);\n        }\n        Model.prototype.clone = function () {\n            return new Model({\n                parts: (0, std___std_all_1.__deepClone)(this.parts),\n            });\n        };\n        Model.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_25266_Model\\\\\",\\\\\"fields\\\\\":[[\\\\\"parts\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\");\n        };\n        return Model;\n    }());\n    exports.Model = Model;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_25266_Model\\\\\",\\\\\"fields\\\\\":[[\\\\\"parts\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\\\",\\\\\"fields\\\\\":[[\\\\\"mesh\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_1759_Mesh\\\\\",\\\\\"fields\\\\\":[[\\\\\"vertices\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"triangles\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"normals\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"tangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"bitangents\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"uvs\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"colors\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"},\\\\\"staticSize\\\\\":1}],[\\\\\"symbol\\\\\",null]]}],[\\\\\"material\\\\\",{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_mesh_ts_23437_Material\\\\\",\\\\\"fields\\\\\":[[\\\\\"baseColor\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"color\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normal\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"normalScale\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"roughness\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"emissive\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}],[\\\\\"metallic\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"texture2d\\\\\"}]]}],[\\\\\"transform\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4x4\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\"), Model)\n    ;\n    window.SHD_Mesh = Mesh;\n    window.SHD_Model = Model;\n    window.SHD_ModelPart = ModelPart;\n    window.SHD_Material = Material;\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/textures.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/textures.js\",\n          writeByteOrderMark: false,\n          text: 'define([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n});\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/common.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/common.js\",\n          writeByteOrderMark: false,\n          text: `var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/buffer\", \"/_std/ui\", \"/_std/texture\"], function (require, exports, __, std_math_1, std___std_all_1, buffer_1, ui_1, texture_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.wrap4 = exports.wrap3 = exports.wrap2 = exports.color = exports.remap1 = exports.remap = exports.tan1 = exports.cos1 = exports.sin1 = exports.hexFromColor = exports.hex = exports.cmykFromColor = exports.cmyk = exports.rgbaFromColor = exports.rgbFromColor = exports.rgba = exports.rgb = exports.hsvaFromColor = exports.hsvFromColor = exports.hsva = exports.hsv = exports.hslaFromColor = exports.hslFromColor = exports.hsla = exports.hsl = exports.screenAA = exports.matrix = exports.noise = exports.reverseMortonCode2 = exports.randColor2 = exports.randColor = exports.mortonCode2 = exports.spatial = exports.bezier = exports.Camera = exports.Camera2d = exports.quat = exports.ui = exports.texture3d = exports.texture2d = exports.buffer = exports.PI = exports.pixelToClip = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    Object.defineProperty(exports, \"buffer\", { enumerable: true, get: function () { return buffer_1.buffer; } });\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\n    Object.defineProperty(exports, \"texture2d\", { enumerable: true, get: function () { return texture_1.texture2d; } });\n    Object.defineProperty(exports, \"texture3d\", { enumerable: true, get: function () { return texture_1.texture3d; } });\n    function pixelToClip(pixelPosition) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        var zeroToOne = (_a = pixelPosition, _b = env.screenSize, [_a[0] / _b[0], _a[1] / _b[1]]);\n        var zeroToTwo = (_c = zeroToOne, _d = 2.0, [_c[0] * _d, _c[1] * _d]);\n        var clipSpace = (_e = zeroToTwo, _f = (_g = 1.0, [_g, _g]), [_e[0] - _f[0], _e[1] - _f[1]]);\n        return __.makeVector(clipSpace[0], clipSpace[1] * (__.FM.negate_1(1.0)));\n    }\n    exports.pixelToClip = pixelToClip;\n    ; /**\n    * Value of PI to 35 decimal places.\n    */\n    var PI = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PI\", function () { return 3.14159265358979323846264338327950288; }, function () { return PI; });\n    exports.PI = PI;\n    var quat = /** @class */ (function () {\n        function quat(data) {\n        }\n        /**\n            * Creates a quaternion from an angle and axis.\n            */\n        quat.fromAngleAxis = function (angle, axis) { return __.FM.float_4_3_1(__.mul(axis, Math.sin(angle * 0.5)), (0, std_math_1.cos)(angle * 0.5)); };\n        /**\n            * Multiplies two quaternions and returns the result.\n            */\n        quat.mul = function (a, b) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; return __.FM.float_4_3_1(__.add((_a = (_c = (_e = b, [_e[0], _e[1], _e[2]]), _d = a[3], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = (_f = (_h = a, [_h[0], _h[1], _h[2]]), _g = b[3], [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]), (0, std_math_1.cross)((_j = a, [_j[0], _j[1], _j[2]]), (_k = b, [_k[0], _k[1], _k[2]]))), __.sub(a[3] * b[3], (0, std_math_1.dot)((_l = a, [_l[0], _l[1], _l[2]]), (_m = b, [_m[0], _m[1], _m[2]])))); };\n        /**\n            * Rotates a vector by a quaternion and returns the rotated vector.\n            */\n        quat.rotate = function (quaternion, vector) {\n            var _a;\n            var q = quat.mul(quat.mul(quaternion, __.FM.float_4_3_1(vector, __.int(0))), quat.conjugate(quaternion));\n            return _a = q, [_a[0], _a[1], _a[2]];\n        };\n        /**\n            * Returns the conjugate of the input quaternion.\n            *\n            * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\n            */\n        quat.conjugate = function (quaternion) { var _a; return __.FM.float_4_3_1(__.negate((_a = quaternion, [_a[0], _a[1], _a[2]])), __.swizzle(quaternion, 'w')); };\n        /**\n            * Returns the inverse of the input quaternion.\n            */\n        quat.inverse = function (quaternion) { var _a, _b; return _a = quat.conjugate(quaternion), _b = (0, std_math_1.dot)(quaternion, quaternion), [_a[0] / _b, _a[1] / _b, _a[2] / _b, _a[3] / _b]; };\n        /**\n            * Generates a quaternion that rotates from one direction to another via the shortest path.\n            */\n        quat.fromToRotation = function (from, to) {\n            var _a;\n            var q = (_a = 0.0, [_a, _a, _a, _a]);\n            var d = (0, std_math_1.dot)(from, to);\n            if (d < (__.FM.negate_1(0.999999))) {\n                var right = __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0));\n                var up = __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0));\n                var tmp = (0, std_math_1.cross)(right, from);\n                if ((0, std_math_1.length)(tmp) < 0.000001) {\n                    tmp = (0, std_math_1.cross)(up, from);\n                }\n                tmp = (0, std_math_1.normalize)(tmp);\n                q = quat.fromAngleAxis(PI, tmp);\n            }\n            else if (d > 0.999999) {\n                q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            }\n            else {\n                q = __.FM.float_4_3_1((0, std_math_1.cross)(from, to), __.add((1 | 0), d));\n                q = (0, std_math_1.normalize)(q);\n            }\n            return q;\n        };\n        quat.diff = function (a, b) { var _a, _b; return _a = a, _b = quat.inverse(b), [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]]; };\n        /**\n            * Generates lookAt quaternion.\n            */\n        quat.lookAt = function (forward, up) {\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, up));\n            up = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, right));\n            var m00 = right[0];\n            var m01 = right[1];\n            var m02 = right[2];\n            var m10 = up[0];\n            var m11 = up[1];\n            var m12 = up[2];\n            var m20 = forward[0];\n            var m21 = forward[1];\n            var m22 = forward[2];\n            var num8 = (m00 + m11) + m22;\n            var q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            if (num8 > 0.0) {\n                var num = Math.sqrt(num8 + 1.0);\n                var w_1 = num * 0.5;\n                num = 0.5 / num;\n                var x_1 = (m12 - m21) * num;\n                var y_1 = (m20 - m02) * num;\n                var z_1 = (m01 - m10) * num;\n                return __.FM.float_4_1_1_1_1(x_1, y_1, z_1, w_1);\n            }\n            if (__.and((m00 >= m11), (m00 >= m22))) {\n                var num7 = Math.sqrt(((1.0 + m00) - m11) - m22);\n                var num4 = 0.5 / num7;\n                var x_2 = 0.5 * num7;\n                var y_2 = (m01 + m10) * num4;\n                var z_2 = (m02 + m20) * num4;\n                var w_2 = (m12 - m21) * num4;\n                return __.FM.float_4_1_1_1_1(x_2, y_2, z_2, w_2);\n            }\n            if (m11 > m22) {\n                var num6 = Math.sqrt(((1.0 + m11) - m00) - m22);\n                var num3 = 0.5 / num6;\n                var x_3 = (m10 + m01) * num3;\n                var y_3 = 0.5 * num6;\n                var z_3 = (m21 + m12) * num3;\n                var w_3 = (m20 - m02) * num3;\n                return __.FM.float_4_1_1_1_1(x_3, y_3, z_3, w_3);\n            }\n            var num5 = Math.sqrt(((1.0 + m22) - m00) - m11);\n            var num2 = 0.5 / num5;\n            var x = (m20 + m02) * num2;\n            var y = (m21 + m12) * num2;\n            var z = 0.5 * num5;\n            var w = (m01 - m10) * num2;\n            return __.FM.float_4_1_1_1_1(x, y, z, w);\n        };\n        /**\n            * Smooth interpolation between two quaternions.\n            */\n        quat.slerp = function (a, b, t) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            if ((0, std_math_1.length)(a) == 0.0) {\n                if ((0, std_math_1.length)(b) == 0.0) {\n                    return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n                }\n                return b;\n            }\n            else if ((0, std_math_1.length)(b) == 0.0) {\n                return a;\n            }\n            var cosHalfAngle = a[3] * b[3] + (0, std_math_1.dot)((_a = a, [_a[0], _a[1], _a[2]]), (_b = b, [_b[0], _b[1], _b[2]]));\n            if (__.or(cosHalfAngle >= 1.0, cosHalfAngle <= (__.FM.negate_1(1.0)))) {\n                return a;\n            }\n            else if (cosHalfAngle < 0.0) {\n                b = (_c = b, _d = (__.FM.negate_1(1.0)), [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]);\n                cosHalfAngle = (__.FM.negate_1(cosHalfAngle));\n            }\n            var blendA = 0.0;\n            var blendB = 0.0;\n            if (cosHalfAngle < 0.99) {\n                var halfAngle = Math.acos(cosHalfAngle);\n                var sinHalfAngle = Math.sin(halfAngle);\n                var oneOverSinHalfAngle = 1.0 / sinHalfAngle;\n                blendA = Math.sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\n                blendB = Math.sin(halfAngle * t) * oneOverSinHalfAngle;\n            }\n            else {\n                blendA = 1.0 - t;\n                blendB = t;\n            }\n            var result = __.FM.float_4_3_1(__.add((_e = blendA, _f = (_g = a, [_g[0], _g[1], _g[2]]), [_e * _f[0], _e * _f[1], _e * _f[2]]), (_h = blendB, _j = (_k = b, [_k[0], _k[1], _k[2]]), [_h * _j[0], _h * _j[1], _h * _j[2]])), __.add(blendA * a[3], blendB * b[3]));\n            if ((0, std_math_1.length)(result) > 0.0) {\n                return (0, std_math_1.normalize)(result);\n            }\n            return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n        };\n        /**\n            * Converts quaternion to matrix.\n            */\n        quat.toMatrix = function (quaternion) {\n            var x = quaternion[0];\n            var y = quaternion[1];\n            var z = quaternion[2];\n            var w = quaternion[3];\n            var x2 = x + x;\n            var y2 = y + y;\n            var z2 = z + z;\n            var xx = x * x2;\n            var xy = x * y2;\n            var xz = x * z2;\n            var yy = y * y2;\n            var yz = y * z2;\n            var zz = z * z2;\n            var wx = w * x2;\n            var wy = w * y2;\n            var wz = w * z2;\n            var m = __.float4x4(1.0 - (yy + zz), xy + wz, xz - wy, (0 | 0), xy - wz, 1.0 - (xx + zz), yz + wx, (0 | 0), xz + wy, yz - wx, 1.0 - (xx + yy), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0);\n            return m;\n        };\n        quat.fromEulerAngles = function (angles) {\n            var cr = Math.cos(angles[0] * 0.5);\n            var sr = Math.sin(angles[0] * 0.5);\n            var cp = Math.cos(angles[1] * 0.5);\n            var sp = Math.sin(angles[1] * 0.5);\n            var cy = Math.cos(angles[2] * 0.5);\n            var sy = Math.sin(angles[2] * 0.5);\n            return __.FM.float_4_1_1_1_1(__.sub(sr * cp * cy, cr * sp * sy), __.add(cr * sp * cy, sr * cp * sy), __.sub(cr * cp * sy, sr * sp * cy), __.add(cr * cp * cy, sr * sp * sy));\n        };\n        quat.prototype.clone = function () {\n            return new quat({});\n        };\n        quat.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_2304_quat\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return quat;\n    }());\n    exports.quat = quat;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_2304_quat\\\\\",\\\\\"fields\\\\\":[]}\"), quat)\n    ; /* impl quat */\n    window.shadeupQuat = quat;\n    var Camera2d = /** @class */ (function () {\n        function Camera2d(data) {\n            var _a, _b;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(__.int(0), __.int(0)));\n            this.zoom = ((_b = data.zoom) !== null && _b !== void 0 ? _b : (1 | 0));\n        }\n        Camera2d.prototype.transform = function (position) { var _a, _b, _c, _d; var shader_self_temp = this; return _a = (_c = position, _d = this.position, [_c[0] - _d[0], _c[1] - _d[1]]), _b = this.zoom, [_a[0] * _b, _a[1] * _b]; };\n        /**\n            * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\n            */\n        Camera2d.prototype.fit = function (size) {\n            var _a, _b, _c, _d, _e, _f;\n            var shader_self_temp = this;\n            var zoom = (1 | 0) / (0, std_math_1.min)(env.screenSize[0] / size[0], env.screenSize[1] / size[1]);\n            var position = (_a = (_c = env.screenSize, _d = (_e = size, _f = ((1 | 0) / zoom), [_e[0] * _f, _e[1] * _f]), [_c[0] - _d[0], _c[1] - _d[1]]), _b = (2 | 0), [_a[0] / _b, _a[1] / _b]);\n            this.position = position;\n            this.zoom = zoom;\n        };\n        Camera2d.prototype.clone = function () {\n            return new Camera2d({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                zoom: (0, std___std_all_1.__deepClone)(this.zoom),\n            });\n        };\n        Camera2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\");\n        };\n        return Camera2d;\n    }());\n    exports.Camera2d = Camera2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_9812_Camera2d\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"zoom\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\"), Camera2d)\n    ; /* impl Camera2d */\n    var Camera = /** @class */ (function () {\n        function Camera(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)));\n            this.rotation = ((_b = data.rotation) !== null && _b !== void 0 ? _b : __.FM.float_4_1_1_1_1(__.int(1), __.int(0), __.int(0), __.int(0)));\n            this.width = ((_c = data.width) !== null && _c !== void 0 ? _c : (1920 | 0));\n            this.height = ((_d = data.height) !== null && _d !== void 0 ? _d : (1080 | 0));\n            this.fov = ((_e = data.fov) !== null && _e !== void 0 ? _e : (90 | 0));\n            this.near = ((_f = data.near) !== null && _f !== void 0 ? _f : (1 | 0));\n            this.far = ((_g = data.far) !== null && _g !== void 0 ? _g : (100000 | 0));\n        }\n        Camera.prototype.getRay = function (screen) {\n            var shader_self_temp = this;\n            var aspect = this.width / this.height;\n            var x = screen[0];\n            var y = screen[1];\n            var Px = ((2 | 0) * ((x + 0.5) / this.width) - (1 | 0)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0)) * aspect;\n            var Py = ((1 | 0) - (2 | 0) * ((y + 0.5) / this.height)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0));\n            return quat.rotate(this.rotation, (0, std_math_1.normalize)(__.makeVector(Px, Py, (__.FM.negate_1((1 | 0))))));\n        };\n        Camera.prototype.getTransformToViewMatrix = function (position, scale, rotation) {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(rotation);\n            var translationMatrix = __.float4x4(scale[0], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[1], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[2], (0 | 0), position[0], position[1], position[2], (1 | 0));\n            return __.mul(__.mul(__.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()), translationMatrix), rotationMatrix);\n        };\n        Camera.prototype.getCombinedMatrix = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getCombinedMatrixReverseZ = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrixReverseZ(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getWorldToViewMatrix = function () {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(this.rotation);\n            var translationMatrix = __.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), this.position[0], this.position[1], this.position[2], (1 | 0));\n            return (0, std_math_1.inverse)(__.mul(translationMatrix, rotationMatrix));\n        };\n        Camera.prototype.getPerspectiveMatrixReverseZ = function () { var shader_self_temp = this; return matrix.perspectiveReverseZ(this.fov, this.width / this.height, this.near); };\n        Camera.prototype.getPerspectiveMatrix = function () {\n            var shader_self_temp = this;\n            return matrix.perspective(this.fov, this.width / this.height, this.near, this.far); // // let matrix = float4x4();\n            // let far = self.far;\n            // let near = self.near;\n            // let aspect = self.width / self.height;\n            // let fovRad = radians(self.fov);\n            // let tanFov = tan( fovRad * 0.5 );\n            // // matrix[0][0] = ;\n            // // matrix[1][1] = 1.0 / tanFov;\n            // // matrix[2][2] = -((far + near)/(far - near));\n            // // matrix[3][2] = -((2*(near*far))/(far - near));\n            // // matrix[2][3] = -1;\n            // // matrix[3][3] = 0;\n            // let matrix = float4x4(\n            //     1.0 / (tanFov * aspect), 0, 0, 0,\n            //     0, 1.0 / tanFov, 0, 0,\n            //     0, 0, -((far + near)/(far - near)), -1,\n            //     0, 0, -((2*(near*far))/(far - near)), 0\n            // );\n            // return matrix;\n        };\n        Camera.prototype.getOrthographicMatrix = function () {\n            var shader_self_temp = this;\n            var matrix = __.float4x4();\n            var far = this.far;\n            var near = this.near;\n            var w = 1.0 / this.width;\n            var h = 1.0 / this.height;\n            matrix.__index((0 | 0)).__index_assign((0 | 0), w);\n            matrix.__index((1 | 0)).__index_assign((1 | 0), h);\n            matrix.__index((2 | 0)).__index_assign((2 | 0), (__.FM.negate_1((2.0 / (far - near)))));\n            matrix.__index((2 | 0)).__index_assign((3 | 0), ((far + near) / (far - near)));\n            //matrix[2][2] = -((far + near)/(far - near));\n            //matrix[3][2] = -((2*(near*far))/(far - near));\n            matrix.__index((3 | 0)).__index_assign((3 | 0), 1.0);\n            return matrix;\n        };\n        Camera.prototype.clone = function () {\n            return new Camera({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                rotation: (0, std___std_all_1.__deepClone)(this.rotation),\n                width: (0, std___std_all_1.__deepClone)(this.width),\n                height: (0, std___std_all_1.__deepClone)(this.height),\n                fov: (0, std___std_all_1.__deepClone)(this.fov),\n                near: (0, std___std_all_1.__deepClone)(this.near),\n                far: (0, std___std_all_1.__deepClone)(this.far),\n            });\n        };\n        Camera.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\");\n        };\n        return Camera;\n    }());\n    exports.Camera = Camera;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_10837_Camera\\\\\",\\\\\"fields\\\\\":[[\\\\\"position\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float3\\\\\"}],[\\\\\"rotation\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"width\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"height\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"fov\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"near\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"far\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\"), Camera)\n    ; /* impl Camera */\n    window._makeCamera = Camera;\n    window._makeCamera2d = Camera2d;\n    function easeA(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n    function easeB(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n    function easeC(aA1) { return 3.0 * aA1; }\n    function calcBezier(aT, aA1, aA2) { return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT; }\n    function getSlope(aT, aA1, aA2) { return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1); }\n    // fn getTForX(aX: float, aA1: float, aA2: float) -> float {\n    //     let aGuessT = aX;\n    //     for (let i = 0; i <= 10; i++) {\n    //         let currentSlope = bezSlope(aGuessT, aA1, aA2);\n    //         if (currentSlope == 0.0) {\n    //             return aGuessT;\n    //         }\n    //         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\n    //         aGuessT -= currentX / currentSlope;\n    //     }\n    //     return aGuessT;\n    // }\n    var NEWTON_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_ITERATIONS\", function () { return (4 | 0); }, function () { return NEWTON_ITERATIONS; }) | 0);\n    var NEWTON_MIN_SLOPE = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_MIN_SLOPE\", function () { return 0.02; }, function () { return NEWTON_MIN_SLOPE; });\n    var SUBDIVISION_PRECISION = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_PRECISION\", function () { return 0.0000001; }, function () { return SUBDIVISION_PRECISION; });\n    var SUBDIVISION_MAX_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_MAX_ITERATIONS\", function () { return (10 | 0); }, function () { return SUBDIVISION_MAX_ITERATIONS; }) | 0);\n    var kSplineTableSize = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSplineTableSize\", function () { return (11 | 0); }, function () { return kSplineTableSize; }) | 0);\n    var kSampleStepSize = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSampleStepSize\", function () { return 1.0 / __.sub(kSplineTableSize, (1 | 0)); }, function () { return kSampleStepSize; });\n    function getTForX(aX, mX1, mX2) {\n        var mSampleValues = (0, std___std_all_1.array)((11 | 0), (0 | 0));\n        for (var i = (0 | 0); i < kSplineTableSize; i++) {\n            mSampleValues.__index_assign(i, calcBezier(i * kSampleStepSize, mX1, mX2));\n        } // Find interval where t lies\n        var intervalStart = 0.0;\n        var currentSample = (1 | 0);\n        var lastSample = kSplineTableSize - (1 | 0);\n        for (var dummy = (0 | 0); __.and(currentSample != lastSample, mSampleValues[currentSample] <= aX); currentSample++) {\n            intervalStart = intervalStart + kSampleStepSize;\n        }\n        currentSample--;\n        // t now lies between *currentSample and *currentSample+1\n        // Interpolate to provide an initial guess for t\n        var csamp = mSampleValues[currentSample];\n        var dst = (aX - csamp) / (mSampleValues[currentSample + (1 | 0)] - csamp);\n        var guessForT = intervalStart + dst * kSampleStepSize;\n        // Check the slope to see what strategy to use. If the slope is too small\n        // Newton-Raphson iteration won't converge on a root so we use bisection\n        // instead.\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n            return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n        else if (initialSlope == 0.0) {\n            return guessForT;\n        }\n        else {\n            return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n        }\n    }\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n        for (var i = (0 | 0); i < NEWTON_ITERATIONS; i++) { // We're trying to find where f(t) = aX,\n            // so we're actually looking for a root for: CalcBezier(t) - aX\n            var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n            var currentSlope = getSlope(aGuessT, mX1, mX2);\n            if (currentSlope == 0.0)\n                return aGuessT;\n            aGuessT = aGuessT - currentX / currentSlope;\n        }\n        return aGuessT;\n    }\n    function binarySubdivide(aX, aA, aB) {\n        var currentX = 0.0;\n        var currentT = 0.0;\n        var i = (0 | 0);\n        var mX1 = aA;\n        var mX2 = aB;\n        while ((true)) {\n            i++;\n            if (__.and(Math.abs(currentX) > SUBDIVISION_PRECISION, i < SUBDIVISION_MAX_ITERATIONS)) {\n                currentT = aA + (aB - aA) / 2.0;\n                currentX = calcBezier(currentT, mX1, mX2) - aX;\n                if (currentX > 0.0) {\n                    aB = currentT;\n                }\n                else {\n                    aA = currentT;\n                }\n            }\n            else {\n                break;\n            }\n        }\n        return currentT;\n    }\n    var bezier = /** @class */ (function () {\n        function bezier(data) {\n        }\n        bezier.cubic2 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1]]), [_e[0] + _f[0], _e[1] + _f[1]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.cubic3 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1], _g * _h[2]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1], _l * _m[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1], _o * _p[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        bezier.quadratic2 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.quadratic3 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1], _e * _f[2]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1], _g * _h[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        /**\n            * 3d triangle patch evaulation with barycentric coordinates.\n            */\n        bezier.patch = function (a, ab, b, bc, c, ca, barycentricT) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n            var s = barycentricT[0];\n            var t = barycentricT[1];\n            var u = barycentricT[2];\n            return _a = (_c = (_e = (_g = (_j = (_l = (_o = 1.0, _p = c, [_o * _p[0], _o * _p[1], _o * _p[2]]), _m = (s * s), [_l[0] * _m, _l[1] * _m, _l[2] * _m]), _k = (_q = (_s = (_u = 2.0, _v = bc, [_u * _v[0], _u * _v[1], _u * _v[2]]), _t = s, [_s[0] * _t, _s[1] * _t, _s[2] * _t]), _r = t, [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = (_w = (_y = (_0 = 2.0, _1 = ca, [_0 * _1[0], _0 * _1[1], _0 * _1[2]]), _z = s, [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = u, [_w[0] * _x, _w[1] * _x, _w[2] * _x]), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]]), _f = (_2 = (_4 = 1.0, _5 = b, [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), _3 = (t * t), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_6 = (_8 = (_10 = 2.0, _11 = ab, [_10 * _11[0], _10 * _11[1], _10 * _11[2]]), _9 = t, [_8[0] * _9, _8[1] * _9, _8[2] * _9]), _7 = u, [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_12 = (_14 = 1.0, _15 = a, [_14 * _15[0], _14 * _15[1], _14 * _15[2]]), _13 = (u * u), [_12[0] * _13, _12[1] * _13, _12[2] * _13]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]];\n        };\n        bezier.easing = function (controlA, controlB, t) { return calcBezier(getTForX(t, controlA[0], controlB[0]), controlA[1], controlB[1]); };\n        bezier.prototype.clone = function () {\n            return new bezier({});\n        };\n        bezier.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_20500_bezier\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return bezier;\n    }());\n    exports.bezier = bezier;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_20500_bezier\\\\\",\\\\\"fields\\\\\":[]}\"), bezier)\n    ; /* impl bezier */\n    /**\n    * Provides space related utilities like z-order curves and quadtrees.\n    */\n    var spatial = /** @class */ (function () {\n        function spatial(data) {\n        }\n        spatial.cantorPair = function (v) { return ((v[0] + v[1]) * (v[0] + v[1] + (1 | 0))) / (2 | 0) + v[1]; };\n        spatial.cantorUnpair = function (v) {\n            var w = Math.floor((Math.sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\n            var t = (w * w + w) / 2.0;\n            var y = v - t;\n            var x = w - y;\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertRotate = function (n, b, r) {\n            var x = b[0];\n            var y = b[1];\n            if (r[1] == (0 | 0)) {\n                if (r[0] == (1 | 0)) {\n                    x = n - (1 | 0) - x;\n                    y = n - (1 | 0) - y;\n                }\n                var t = x;\n                x = y;\n                y = t;\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertUncurve = function (n, v) {\n            var x = v[0];\n            var y = v[1];\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var s = (0 | 0);\n            var d = (0 | 0);\n            for (s = n / (2 | 0); s > (0 | 0); s = s / (2 | 0)) {\n                rx = ((x & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                ry = ((y & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                d = d + s * s * (((3 | 0) * rx) ^ ry);\n                var o = __.intifyVector(spatial.hilbertRotate(n, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n            }\n            return d;\n        };\n        spatial.hilbertCurve = function (n, v) {\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var t = v;\n            var x = (0 | 0);\n            var y = (0 | 0);\n            for (var s = (1 | 0); s < n; s = s * (2 | 0)) {\n                rx = (1 | 0) & (t / (2 | 0));\n                ry = (1 | 0) & (t ^ rx);\n                var o = __.intifyVector(spatial.hilbertRotate(s, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n                x = x + s * rx;\n                y = y + s * ry;\n                t = t / (4 | 0);\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.mortonDecode = function (p) { return __.FM.uint_2_1_1(reverseMortonCode2(p), reverseMortonCode2(p >> (1 >>> 0))); };\n        spatial.mortonEncode = function (p) { return (__.bitor(mortonCode2(p[0]), (mortonCode2(p[1]) << (1 >>> 0))) >>> 0); };\n        spatial.prototype.clone = function () {\n            return new spatial({});\n        };\n        spatial.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_23054_spatial\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return spatial;\n    }());\n    exports.spatial = spatial;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_23054_spatial\\\\\",\\\\\"fields\\\\\":[]}\"), spatial)\n    ; /* impl spatial */\n    function mortonCode2(x) {\n        x = x & (0x0000ffff >>> 0);\n        var n8 = (8 >>> 0);\n        var n4 = (4 >>> 0);\n        var n2 = (2 >>> 0);\n        var n1 = (1 >>> 0);\n        x = (x ^ (x << n8)) & (0x00ff00ff >>> 0);\n        x = (x ^ (x << n4)) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x << n2)) & (0x33333333 >>> 0);\n        x = (x ^ (x << n1)) & (0x55555555 >>> 0);\n        return x;\n    }\n    exports.mortonCode2 = mortonCode2;\n    ;\n    function randColor(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand2)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor = randColor;\n    ;\n    function randColor2(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand3)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor2 = randColor2;\n    ;\n    function reverseMortonCode2(x) {\n        x = x & (0x55555555 >>> 0);\n        x = (x ^ (x >> (1 >>> 0))) & (0x33333333 >>> 0);\n        x = (x ^ (x >> (2 >>> 0))) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x >> (4 >>> 0))) & (0x00ff00ff >>> 0);\n        x = (x ^ (x >> (8 >>> 0))) & (0x0000ffff >>> 0);\n        return x;\n    }\n    exports.reverseMortonCode2 = reverseMortonCode2;\n    ;\n    var noise = /** @class */ (function () {\n        function noise(data) {\n        }\n        noise.gaussian3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;\n            var p = v;\n            var a = (_a = p, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var d = (_b = p, _c = a, [_b[0] - _c[0], _b[1] - _c[1], _b[2] - _c[2]]);\n            d = (_d = (_f = d, _g = d, [_f[0] * _g[0], _f[1] * _g[1], _f[2] * _g[2]]), _e = (_h = 3.0, _j = (_k = 2.0, _l = d, [_k * _l[0], _k * _l[1], _k * _l[2]]), [_h - _j[0], _h - _j[1], _h - _j[2]]), [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]);\n            var b = (_m = (_p = a, [_p[0], _p[0], _p[1], _p[1]]), _o = __.FM.float_4_1_1_1_1(__.float(0.0), __.float(1.0), __.float(0.0), __.float(1.0)), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2], _m[3] + _o[3]]);\n            var k1 = perm((_q = b, [_q[0], _q[1], _q[0], _q[1]]));\n            var k2 = perm((_r = (_t = k1, [_t[0], _t[1], _t[0], _t[1]]), _s = (_u = b, [_u[2], _u[2], _u[3], _u[3]]), [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2], _r[3] + _s[3]]));\n            var c = (_v = k2, _w = (_x = a, [_x[2], _x[2], _x[2], _x[2]]), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2], _v[3] + _w[3]]);\n            var k3 = perm(c);\n            var k4 = perm((_y = c, _z = 1.0, [_y[0] + _z, _y[1] + _z, _y[2] + _z, _y[3] + _z]));\n            var o1 = (0, std_math_1.frac)((_0 = k3, _1 = (1.0 / 41.0), [_0[0] * _1, _0[1] * _1, _0[2] * _1, _0[3] * _1]));\n            var o2 = (0, std_math_1.frac)((_2 = k4, _3 = (1.0 / 41.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3, _2[3] * _3]));\n            var o3 = (_4 = (_6 = o2, _7 = d[2], [_6[0] * _7, _6[1] * _7, _6[2] * _7, _6[3] * _7]), _5 = (_8 = o1, _9 = (1.0 - d[2]), [_8[0] * _9, _8[1] * _9, _8[2] * _9, _8[3] * _9]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2], _4[3] + _5[3]]);\n            var o4 = (_10 = (_12 = (_14 = o3, [_14[1], _14[3]]), _13 = d[0], [_12[0] * _13, _12[1] * _13]), _11 = (_15 = (_17 = o3, [_17[0], _17[2]]), _16 = (1.0 - d[0]), [_15[0] * _16, _15[1] * _16]), [_10[0] + _11[0], _10[1] + _11[1]]);\n            return o4[1] * d[1] + o4[0] * (1.0 - d[1]);\n        };\n        noise.gaussian2 = function (v) { return noise.gaussian3(__.makeVector(v, (0 | 0))); };\n        noise.noise1 = function (x) {\n            var i = Math.floor(x);\n            var f = (0, std_math_1.frac)(x);\n            var u = f * f * (3.0 - 2.0 * f);\n            return (0, std_math_1.lerp)(hash(i), hash(i + 1.0), u);\n        };\n        noise.noise2 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var f = (0, std_math_1.frac)(x);\n            // Four corners in 2D of a tile\n            var a = hash2(i);\n            var b = hash2((_b = i, _c = __.FM.float_2_1_1(__.float(1.0), __.float(0.0)), [_b[0] + _c[0], _b[1] + _c[1]]));\n            var c = hash2((_d = i, _e = __.FM.float_2_1_1(__.float(0.0), __.float(1.0)), [_d[0] + _e[0], _d[1] + _e[1]]));\n            var d = hash2((_f = i, _g = __.FM.float_2_1_1(__.float(1.0), __.float(1.0)), [_f[0] + _g[0], _f[1] + _g[1]]));\n            // Simple 2D lerp using smoothstep envelope between the values.\n            // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tsmoothstep(0.0, 1.0, f.y)));\n            // Same code, with the clamps in smoothstep and common subexpressions\n            // optimized away.\n            var u = (_h = (_k = f, _l = f, [_k[0] * _l[0], _k[1] * _l[1]]), _j = (_m = 3.0, _o = (_p = 2.0, _q = f, [_p * _q[0], _p * _q[1]]), [_m - _o[0], _m - _o[1]]), [_h[0] * _j[0], _h[1] * _j[1]]);\n            return (0, std_math_1.lerp)(a, b, u[0]) + (c - a) * u[1] * (1.0 - u[0]) + (d - b) * u[0] * u[1];\n        };\n        noise.fmb1 = function (x) {\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.int(100);\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise1(x);\n                x = x * 2.0 + shift;\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm2 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_2_2(__.swizzle((100 | 0), \"xy\"));\n            // Rotate to reduce axial bias\n            var rot = __.float2x2(Math.cos(0.5), Math.sin(0.5), (__.FM.negate_1(Math.sin(0.5))), Math.cos(0.50));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise2(x);\n                x = (_a = (_c = __.mul(rot, x), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm3 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_3_3(__.swizzle((100 | 0), \"xyz\"));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise3(x);\n                x = (_a = (_c = x, _d = 2.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.noise3 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n            var step = __.FM.float_3_1_1_1(__.int(110), __.int(241), __.int(171));\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var f = (0, std_math_1.frac)(x);\n            // For performance, compute the base input to a 1D hash from the integer part of the argument and the \n            // incremental change to the 1D based on the 3D -> 1D wrapping\n            var n = (0, std_math_1.dot)(i, step);\n            var u = (_b = (_d = f, _e = f, [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]), _c = (_f = 3.0, _g = (_h = 2.0, _j = f, [_h * _j[0], _h * _j[1], _h * _j[2]]), [_f - _g[0], _f - _g[1], _f - _g[2]]), [_b[0] * _c[0], _b[1] * _c[1], _b[2] * _c[2]]);\n            return (0, std_math_1.lerp)((0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(0)))), u[0]), u[1]), (0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(1)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(1)))), u[0]), u[1]), u[2]);\n        };\n        noise.simplex2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.211324865405187), __.float(0.366025403784439), __.negate(0.577350269189626), __.float(0.024390243902439));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1]])), [_b[0] + _c, _b[1] + _c]), [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0]])), [_e[0] + _f, _e[1] + _f]);\n            var xv = (0, std_math_1.step)(x0[1], x0[0]);\n            var i1 = __.FM.float_2_1_1(xv, __.sub(1.0, xv));\n            var x1 = (_k = (_m = x0, _o = (_p = C, [_p[0], _p[0]]), [_m[0] + _o[0], _m[1] + _o[1]]), _l = i1, [_k[0] - _l[0], _k[1] - _l[1]]);\n            var x2 = (_q = x0, _r = (_s = C, [_s[2], _s[2]]), [_q[0] + _r[0], _q[1] + _r[1]]);\n            i = mod289_2(i);\n            var p = permute((_t = (_v = permute((_x = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.float(1.0)), _y = i[1], [_x[0] + _y, _x[1] + _y, _x[2] + _y])), _w = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.float(1.0)), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2]]), _u = i[0], [_t[0] + _u, _t[1] + _u, _t[2] + _u]));\n            var m = (0, std_math_1.max)((_z = (_1 = 0.5, [_1, _1, _1]), _0 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_z[0] - _0[0], _z[1] - _0[1], _z[2] - _0[2]]), 0.0);\n            m = (_2 = m, _3 = m, [_2[0] * _3[0], _2[1] * _3[1], _2[2] * _3[2]]);\n            m = (_4 = m, _5 = m, [_4[0] * _5[0], _4[1] * _5[1], _4[2] * _5[2]]);\n            var x = (_6 = (_8 = 2.0, _9 = (0, std_math_1.frac)((_10 = p, _11 = (_12 = C, [_12[3], _12[3], _12[3]]), [_10[0] * _11[0], _10[1] * _11[1], _10[2] * _11[2]])), [_8 * _9[0], _8 * _9[1], _8 * _9[2]]), _7 = 1.0, [_6[0] - _7, _6[1] - _7, _6[2] - _7]);\n            var h = (_13 = (_15 = x, [Math.abs(_15[0]), Math.abs(_15[1]), Math.abs(_15[2])]), _14 = 0.5, [_13[0] - _14, _13[1] - _14, _13[2] - _14]);\n            var ox = (_16 = (_17 = x, _18 = 0.5, [_17[0] + _18, _17[1] + _18, _17[2] + _18]), [Math.floor(_16[0]), Math.floor(_16[1]), Math.floor(_16[2])]);\n            var a0 = (_19 = x, _20 = ox, [_19[0] - _20[0], _19[1] - _20[1], _19[2] - _20[2]]);\n            // Normalise gradients implicitly by scaling m\n            m = (_21 = m, _22 = taylorInvSqrt((_23 = (_25 = a0, _26 = a0, [_25[0] * _26[0], _25[1] * _26[1], _25[2] * _26[2]]), _24 = (_27 = h, _28 = h, [_27[0] * _28[0], _27[1] * _28[1], _27[2] * _28[2]]), [_23[0] + _24[0], _23[1] + _24[1], _23[2] + _24[2]])), [_21[0] * _22[0], _21[1] * _22[1], _21[2] * _22[2]]);\n            // Compute final noise value at P\n            var g = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g);\n        };\n        noise.perlin2 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = 0.0;\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        noise.perlin3 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = v[2];\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        /**\n            * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\n            */\n        noise.voronoi2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var n = (_a = v, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var minDist = 10.0;\n            var toClose = (_b = 0.0, [_b, _b]);\n            var closestCell = (_c = 0.0, [_c, _c]);\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_d = n, _e = __.FM.float_2_1_1(i, j), [_d[0] + _e[0], _d[1] + _e[1]]);\n                    var cellPos = (_f = cell, _g = hash2(cell), [_f[0] + _g, _f[1] + _g]);\n                    var toCell = (_h = cellPos, _j = v, [_h[0] - _j[0], _h[1] - _j[1]]);\n                    var dst = (0, std_math_1.length)(toCell);\n                    if (dst < minDist) {\n                        minDist = dst;\n                        toClose = toCell;\n                        closestCell = cell;\n                    }\n                }\n            }\n            var minEdge = 10.0;\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_k = n, _l = __.FM.float_2_1_1(i, j), [_k[0] + _l[0], _k[1] + _l[1]]);\n                    var cellPos = (_m = cell, _o = hash2(cell), [_m[0] + _o, _m[1] + _o]);\n                    var toCell = (_p = cellPos, _q = v, [_p[0] - _q[0], _p[1] - _q[1]]);\n                    var diff = (_r = (_s = closestCell, _t = cell, [_s[0] - _t[0], _s[1] - _t[1]]), [Math.abs(_r[0]), Math.abs(_r[1])]);\n                    var isClosest = diff[0] + diff[1] < 0.1;\n                    if (__.not(isClosest)) {\n                        var toCenter = (_u = (_w = toClose, _x = toCell, [_w[0] + _x[0], _w[1] + _x[1]]), _v = 0.5, [_u[0] * _v, _u[1] * _v]);\n                        var cellDiff = (0, std_math_1.normalize)((_y = toCell, _z = toClose, [_y[0] - _z[0], _y[1] - _z[1]]));\n                        var edge = (0, std_math_1.dot)(toCenter, cellDiff);\n                        minEdge = (0, std_math_1.min)(minEdge, edge);\n                    }\n                }\n            }\n            var random = hash2(closestCell);\n            return __.FM.float_3_1_1_1(minDist, random, minEdge);\n        };\n        noise.simplex3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.138196601125011), __.float(0.276393202250021), __.float(0.414589803375032), __.negate(0.447213595499958));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1], _d[1]])), [_b[0] + _c, _b[1] + _c, _b[2] + _c]), [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0], _j[0]])), [_e[0] + _f, _e[1] + _f, _e[2] + _f]);\n            var g = (0, std_math_1.step)((_k = x0, [_k[1], _k[2], _k[0]]), (_l = x0, [_l[0], _l[1], _l[2]]));\n            var l = (_m = 1.0, _o = g, [_m - _o[0], _m - _o[1], _m - _o[2]]);\n            var i1 = (0, std_math_1.min)((_p = g, [_p[0], _p[1], _p[2]]), (_q = l, [_q[2], _q[0], _q[1]]));\n            var i2 = (0, std_math_1.max)((_r = g, [_r[0], _r[1], _r[2]]), (_s = l, [_s[2], _s[0], _s[1]]));\n            var x1 = (_t = (_v = x0, _w = i1, [_v[0] - _w[0], _v[1] - _w[1], _v[2] - _w[2]]), _u = (_x = 1.0, _y = (_z = C, [_z[0], _z[0], _z[0]]), [_x * _y[0], _x * _y[1], _x * _y[2]]), [_t[0] + _u[0], _t[1] + _u[1], _t[2] + _u[2]]);\n            var x2 = (_0 = (_2 = x0, _3 = i2, [_2[0] - _3[0], _2[1] - _3[1], _2[2] - _3[2]]), _1 = (_4 = 2.0, _5 = (_6 = C, [_6[0], _6[0], _6[0]]), [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), [_0[0] + _1[0], _0[1] + _1[1], _0[2] + _1[2]]);\n            var x3 = (_7 = (_9 = x0, _10 = 1., [_9[0] - _10, _9[1] - _10, _9[2] - _10]), _8 = (_11 = 3.0, _12 = (_13 = C, [_13[0], _13[0], _13[0]]), [_11 * _12[0], _11 * _12[1], _11 * _12[2]]), [_7[0] + _8[0], _7[1] + _8[1], _7[2] + _8[2]]);\n            i = mod289_3(i);\n            var p = permute((_14 = (_16 = permute((_18 = (_20 = permute((_22 = i[2], _23 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'z'), __.swizzle(i2, 'z')), [_22 + _23[0], _22 + _23[1], _22 + _23[2]])), _21 = i[1], [_20[0] + _21, _20[1] + _21, _20[2] + _21]), _19 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.swizzle(i2, 'y')), [_18[0] + _19[0], _18[1] + _19[1], _18[2] + _19[2]])), _17 = i[0], [_16[0] + _17, _16[1] + _17, _16[2] + _17]), _15 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.swizzle(i2, 'x')), [_14[0] + _15[0], _14[1] + _15[1], _14[2] + _15[2]]));\n            var m = (0, std_math_1.max)((_24 = 0.5, _25 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_24 - _25[0], _24 - _25[1], _24 - _25[2]]), 0.0);\n            m = (_26 = m, _27 = m, [_26[0] * _27[0], _26[1] * _27[1], _26[2] * _27[2]]);\n            m = (_28 = m, _29 = m, [_28[0] * _29[0], _28[1] * _29[1], _28[2] * _29[2]]);\n            var x = (_30 = (_32 = 2.0, _33 = (0, std_math_1.frac)((_34 = p, _35 = (_36 = C, [_36[3], _36[3], _36[3]]), [_34[0] * _35[0], _34[1] * _35[1], _34[2] * _35[2]])), [_32 * _33[0], _32 * _33[1], _32 * _33[2]]), _31 = 1.0, [_30[0] - _31, _30[1] - _31, _30[2] - _31]);\n            var h = (_37 = (_39 = x, [Math.abs(_39[0]), Math.abs(_39[1]), Math.abs(_39[2])]), _38 = 0.5, [_37[0] - _38, _37[1] - _38, _37[2] - _38]);\n            var ox = (_40 = (_41 = x, _42 = 0.5, [_41[0] + _42, _41[1] + _42, _41[2] + _42]), [Math.floor(_40[0]), Math.floor(_40[1]), Math.floor(_40[2])]);\n            var a0 = (_43 = x, _44 = ox, [_43[0] - _44[0], _43[1] - _44[1], _43[2] - _44[2]]);\n            // Normalise gradients implicitly by scaling m\n            // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\n            m = (_45 = m, _46 = (_47 = 1.79284291400159, _48 = (_49 = 0.85373472095314, _50 = (_51 = (_53 = a0, _54 = a0, [_53[0] * _54[0], _53[1] * _54[1], _53[2] * _54[2]]), _52 = (_55 = h, _56 = h, [_55[0] * _56[0], _55[1] * _56[1], _55[2] * _56[2]]), [_51[0] + _52[0], _51[1] + _52[1], _51[2] + _52[2]]), [_49 * _50[0], _49 * _50[1], _49 * _50[2]]), [_47 - _48[0], _47 - _48[1], _47 - _48[2]]), [_45[0] * _46[0], _45[1] * _46[1], _45[2] * _46[2]]);\n            // Compute final noise value at P\n            var g2 = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g2);\n        };\n        noise.prototype.clone = function () {\n            return new noise({});\n        };\n        noise.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_26913_noise\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return noise;\n    }());\n    exports.noise = noise;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_26913_noise\\\\\",\\\\\"fields\\\\\":[]}\"), noise)\n    ;\n    var PERLIN_YWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAPB\", function () { return (4 | 0); }, function () { return PERLIN_YWRAPB; }) | 0);\n    var PERLIN_YWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAP\", function () { return (1 | 0) << PERLIN_YWRAPB; }, function () { return PERLIN_YWRAP; }) | 0);\n    var PERLIN_ZWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAPB\", function () { return (8 | 0); }, function () { return PERLIN_ZWRAPB; }) | 0);\n    var PERLIN_ZWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAP\", function () { return (1 | 0) << PERLIN_ZWRAPB; }, function () { return PERLIN_ZWRAP; }) | 0);\n    var PERLIN_SIZE = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_SIZE\", function () { return (4095 | 0); }, function () { return PERLIN_SIZE; }) | 0);\n    var perlin_octaves = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_octaves\", function () { return (4 | 0); }, function () { return perlin_octaves; }) | 0);\n    // default to medium smooth\n    var perlin_amp_falloff = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_amp_falloff\", function () { return 0.5; }, function () { return perlin_amp_falloff; });\n    // 50% reduction/octave\n    function scaled_cosine(i) { return 0.5 * (1.0 - Math.cos(i * PI)); }\n    var perlin = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin\", function () { return (0, buffer_1.buffer)(PERLIN_SIZE + (1 | 0), \"float\", __assign({}, JSON.parse(\"{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}\"))); }, function () { return perlin; });\n    for (var i = (0 | 0); i < PERLIN_SIZE + (1 | 0); i++) {\n        perlin.__index_assign(i, (0, std_math_1.rand)(i));\n    } //\t<https://www.shadertoy.com/view/4dS3Wd>\n    //\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\n    //\n    function hash(n) { return (0, std_math_1.frac)(Math.sin(n) * (1e4 | 0)); }\n    function hash2(p) { return (0, std_math_1.frac)((1e4 | 0) * Math.sin(17.0 * p[0] + p[1] * 0.1) * (0.1 + Math.abs(Math.sin(p[1] * 13.0 + p[0])))); }\n    function hash3(p) {\n        var h = (0, std_math_1.dot)(p, __.FM.float_3_1_1_1(__.float(127.1), __.float(311.7), __.float(74.7)));\n        return (0, std_math_1.frac)(Math.sin(h) * 43758.5453123);\n    }\n    /* impl noise */\n    function mod289_1(x) { return x - Math.floor(x * (1.0 / 289.0)) * 289.0; }\n    function mod289_4(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g, _f[3] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2]), Math.floor(_e[3])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2], _a[3] - _b[3]]; }\n    function perm(x) { var _a, _b, _c, _d, _e, _f; return mod289_4((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f, _e[3] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d, _c[3] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]])); }\n    function mod289_3(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]; }\n    function mod289_2(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g]), [Math.floor(_e[0]), Math.floor(_e[1])]), _d = 289.0, [_c[0] * _d, _c[1] * _d]), [_a[0] - _b[0], _a[1] - _b[1]]; }\n    function permute(x) { var _a, _b, _c, _d, _e, _f; return mod289_3((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2]])); }\n    function taylorInvSqrt(r) { var _a, _b, _c, _d; return _a = 1.79284291400159, _b = (_c = 0.85373472095314, _d = r, [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]; }\n    var matrix = /** @class */ (function () {\n        function matrix(data) {\n        }\n        matrix.lookAt = function (from, to, up) {\n            var _a, _b, _c, _d;\n            var zAxis = (0, std_math_1.normalize)((_a = from, _b = to, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]));\n            var xAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(up, zAxis));\n            var yAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(zAxis, xAxis));\n            var dst = __.float4x4();\n            dst.__index((0 | 0)).__index_assign((0 | 0), xAxis[0]);\n            dst.__index((0 | 0)).__index_assign((1 | 0), yAxis[0]);\n            dst.__index((0 | 0)).__index_assign((2 | 0), zAxis[0]);\n            dst.__index((0 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((1 | 0)).__index_assign((0 | 0), xAxis[1]);\n            dst.__index((1 | 0)).__index_assign((1 | 0), yAxis[1]);\n            dst.__index((1 | 0)).__index_assign((2 | 0), zAxis[1]);\n            dst.__index((1 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((2 | 0)).__index_assign((0 | 0), xAxis[2]);\n            dst.__index((2 | 0)).__index_assign((1 | 0), yAxis[2]);\n            dst.__index((2 | 0)).__index_assign((2 | 0), zAxis[2]);\n            dst.__index((2 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((3 | 0)).__index_assign((0 | 0), (__.FM.negate_1((xAxis[0] * from[0] + xAxis[1] * from[1] + xAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((1 | 0), (__.FM.negate_1((yAxis[0] * from[0] + yAxis[1] * from[1] + yAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((2 | 0), (__.FM.negate_1((zAxis[0] * from[0] + zAxis[1] * from[1] + zAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((3 | 0), (1 | 0));\n            return dst;\n            var forward = (0, std_math_1.normalize)((_c = from, _d = to, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]));\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(up, forward));\n            var newup = (0, std_math_1.cross)(forward, right);\n            var m = __.float4x4();\n            m.__index((0 | 0)).__index_assign((0 | 0), right[0]), m.__index((0 | 0)).__index_assign((1 | 0), right[1]), m.__index((0 | 0)).__index_assign((2 | 0), right[2]);\n            m.__index((1 | 0)).__index_assign((0 | 0), newup[0]), m.__index((1 | 0)).__index_assign((1 | 0), newup[1]), m.__index((1 | 0)).__index_assign((2 | 0), newup[2]);\n            m.__index((2 | 0)).__index_assign((0 | 0), forward[0]), m.__index((2 | 0)).__index_assign((1 | 0), forward[1]), m.__index((2 | 0)).__index_assign((2 | 0), forward[2]);\n            m.__index((3 | 0)).__index_assign((0 | 0), from[0]), m.__index((3 | 0)).__index_assign((1 | 0), from[1]), m.__index((3 | 0)).__index_assign((2 | 0), from[2]);\n            return m;\n        };\n        matrix.perspective = function (fov, aspect, near, far) {\n            // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = -1;  //set w = -z \n            // M[3][3] = 0; \n            //return M;\n            var fovRad = (0, std_math_1.radians)(fov);\n            var tanFov = Math.tan(fovRad * 0.5);\n            var matrx = __.float4x4(1.0 / (tanFov * aspect), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0 / tanFov, (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1(((far + near) / (far - near)))), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (__.FM.negate_1((((2 | 0) * (near * far)) / (far - near)))), (0 | 0));\n            return matrx;\n        };\n        matrix.perspectiveReverseZ = function (fov, aspect, near) {\n            // let far = 10000000.0;\n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = 0;  //set w = -z \n            // M[3][3] = 0; \n            // return M;\n            var matrx = __.mul(__.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (1 | 0)), matrix.perspective(fov, aspect, near, 10000000.0));\n            return matrx;\n        };\n        matrix.prototype.clone = function () {\n            return new matrix({});\n        };\n        matrix.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_44684_matrix\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return matrix;\n    }());\n    exports.matrix = matrix;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_44684_matrix\\\\\",\\\\\"fields\\\\\":[]}\"), matrix)\n    ; /* impl matrix */\n    /**\n    * Uses Super Sampling Anti Aliasing to smooth out the image.\n    */\n    function screenAA(inScreenPos, gridSize, func) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        var weightSum = 0.0;\n        var accumulatedColor = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(0));\n        for (var y = (0 | 0); y < gridSize; y++) {\n            for (var x = (0 | 0); x < gridSize; x++) {\n                var offset = __.FM.float_2_1_1(__.div((x + 0.5 - gridSize * 0.5), gridSize), __.div((y + 0.5 - gridSize * 0.5), gridSize));\n                var weight = Math.exp((__.FM.negate_1((0, std_math_1.dot)(offset, offset))) * (5 | 0));\n                // Gaussian weight\n                accumulatedColor = (_a = accumulatedColor, _b = (_c = func((_e = inScreenPos, _f = offset, [_e[0] + _f[0], _e[1] + _f[1]])), _d = weight, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2], _a[3] + _b[3]]);\n                weightSum = weightSum + weight;\n            }\n        }\n        return _g = accumulatedColor, _h = weightSum, [_g[0] / _h, _g[1] / _h, _g[2] / _h, _g[3] / _h];\n    }\n    exports.screenAA = screenAA;\n    ; // Color conversion helpers\n    // A color = float4 containing rgba values in the range [0, 1]\n    // All functions have an extra alpha functon and a reverse\n    // i.e. hsl, hsla, hslFromColor, hslaFromColor\n    // fn hsl(v: float3) -> float4\n    function hsl(v) { return hsla(__.makeVector(v, (1 | 0))); }\n    exports.hsl = hsl;\n    ;\n    function hsla(v) {\n        var h = v[0];\n        var s = v[1];\n        var l = v[2];\n        var a = v[3];\n        var c = ((1 | 0) - Math.abs((2 | 0) * l - (1 | 0))) * s;\n        var x = c * ((1 | 0) - Math.abs(((h / (60 | 0)) % (2 | 0)) - (1 | 0)));\n        var m = l - c / (2 | 0);\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsla = hsla;\n    ;\n    function hslFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var a = c[3];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var l = (mx + mn) / (2 | 0);\n        if (mx == mn) {\n            h = (0 | 0);\n            s = (0 | 0);\n        }\n        else {\n            var d = mx - mn;\n            s = (l > 0.5) ? d / ((2 | 0) - mx - mn) : d / (mx + mn);\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, l);\n    }\n    exports.hslFromColor = hslFromColor;\n    ;\n    function hslaFromColor(c) {\n        var hsl = hslFromColor(c);\n        return __.FM.float_4_3_1(hsl, __.swizzle(c, 'a'));\n    }\n    exports.hslaFromColor = hslaFromColor;\n    ;\n    function hsv(v) { return hsva(__.makeVector(v, (1 | 0))); }\n    exports.hsv = hsv;\n    ;\n    function hsva(val) {\n        var h = val[0];\n        var s = val[1];\n        var v = val[2];\n        var a = val[3];\n        var c = v * s;\n        var x = c * ((1 | 0) - Math.abs(h / (60 | 0) % (2 | 0) - (1 | 0)));\n        var m = v - c;\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsva = hsva;\n    ;\n    function hsvFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var v = mx;\n        var d = mx - mn;\n        s = (mx == (0 | 0)) ? (0 | 0) : d / mx;\n        if (mx == mn) {\n            h = (0 | 0);\n        }\n        else {\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, v);\n    }\n    exports.hsvFromColor = hsvFromColor;\n    ;\n    function hsvaFromColor(c) {\n        var hsv = hsvFromColor(c);\n        return __.FM.float_4_3_1(hsv, __.swizzle(c, 'a'));\n    }\n    exports.hsvaFromColor = hsvaFromColor;\n    ;\n    function rgb(v) { return __.FM.float_4_3_1(__.div(v, 255.0), __.int(1)); }\n    exports.rgb = rgb;\n    ;\n    function rgba(v) { return __.FM.float_4_4(__.div(v, 255.0)); }\n    exports.rgba = rgba;\n    ;\n    function rgbFromColor(c) { var _a, _b, _c; return _a = (_c = c, [_c[0], _c[1], _c[2]]), _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b]; }\n    exports.rgbFromColor = rgbFromColor;\n    ;\n    function rgbaFromColor(c) { var _a, _b; return _a = c, _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b, _a[3] * _b]; }\n    exports.rgbaFromColor = rgbaFromColor;\n    ;\n    function cmyk(v) {\n        var c = v[0];\n        var m = v[1];\n        var y = v[2];\n        var k = v[3];\n        var r = (1 | 0) - (0, std_math_1.min)((1 | 0), c * ((1 | 0) - k) + k);\n        var g = (1 | 0) - (0, std_math_1.min)((1 | 0), m * ((1 | 0) - k) + k);\n        var b = (1 | 0) - (0, std_math_1.min)((1 | 0), y * ((1 | 0) - k) + k);\n        return __.FM.float_4_1_1_1_1(r, g, b, __.int(1));\n    }\n    exports.cmyk = cmyk;\n    ;\n    function cmykFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var k = (1 | 0) - (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var c1 = ((1 | 0) - r - k) / ((1 | 0) - k);\n        var m = ((1 | 0) - g - k) / ((1 | 0) - k);\n        var y = ((1 | 0) - b - k) / ((1 | 0) - k);\n        return __.FM.float_4_1_1_1_1(c1, m, y, k);\n    }\n    exports.cmykFromColor = cmykFromColor;\n    ;\n    function hex(v) {\n        var r = (v >> (16 | 0)) & (0xFF | 0);\n        var g = (v >> (8 | 0)) & (0xFF | 0);\n        var b = v & (0xFF | 0);\n        return __.FM.float_4_1_1_1_1(__.div(r, 255.0), __.div(g, 255.0), __.div(b, 255.0), __.float(1.0));\n    }\n    exports.hex = hex;\n    ;\n    function hexFromColor(c) {\n        var r = (__.mul(c[0], 255.0) | 0);\n        var g = (__.mul(c[1], 255.0) | 0);\n        var b = (__.mul(c[2], 255.0) | 0);\n        return (r << (16 | 0)) | (g << (8 | 0)) | b;\n    }\n    exports.hexFromColor = hexFromColor;\n    ; /**\n    * Returns sin remapped to [0, 1]\n    */\n    function sin1(v) { return (Math.sin(v) + (1 | 0)) * 0.5; }\n    exports.sin1 = sin1;\n    ; /**\n    * Returns cos remapped to [0, 1]\n    */\n    function cos1(v) { return (Math.cos(v) + (1 | 0)) * 0.5; }\n    exports.cos1 = cos1;\n    ; /**\n    * Returns tan remapped to [0, 1]\n    */\n    function tan1(v) { return (Math.tan(v) + (1 | 0)) * 0.5; }\n    exports.tan1 = tan1;\n    ;\n    function remap(v, low1, high1, low2, high2) { return low2 + (v - low1) * (high2 - low2) / (high1 - low1); }\n    exports.remap = remap;\n    ;\n    function remap1(v, low, high) { return remap(v, low, high, (0 | 0), (1 | 0)); }\n    exports.remap1 = remap1;\n    ;\n    var color = /** @class */ (function () {\n        function color(data) {\n        }\n        color.prototype.clone = function () {\n            return new color({});\n        };\n        color.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_57436_color\\\\\",\\\\\"fields\\\\\":[[\\\\\"slate50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\");\n        };\n        color.slate50 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.9803921568627451), __.float(0.9882352941176471), __.int(1));\n        color.slate100 = __.FM.float_4_1_1_1_1(__.float(0.9450980392156862), __.float(0.9607843137254902), __.float(0.9764705882352941), __.int(1));\n        color.slate200 = __.FM.float_4_1_1_1_1(__.float(0.8862745098039215), __.float(0.9098039215686274), __.float(0.9411764705882353), __.int(1));\n        color.slate300 = __.FM.float_4_1_1_1_1(__.float(0.796078431372549), __.float(0.8352941176470589), __.float(0.8823529411764706), __.int(1));\n        color.slate400 = __.FM.float_4_1_1_1_1(__.float(0.5803921568627451), __.float(0.6392156862745098), __.float(0.7215686274509804), __.int(1));\n        color.slate500 = __.FM.float_4_1_1_1_1(__.float(0.39215686274509803), __.float(0.4549019607843137), __.float(0.5450980392156862), __.int(1));\n        color.slate600 = __.FM.float_4_1_1_1_1(__.float(0.2784313725490196), __.float(0.3333333333333333), __.float(0.4117647058823529), __.int(1));\n        color.slate700 = __.FM.float_4_1_1_1_1(__.float(0.2), __.float(0.2549019607843137), __.float(0.3333333333333333), __.int(1));\n        color.slate800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.1607843137254902), __.float(0.23137254901960785), __.int(1));\n        color.slate900 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.09019607843137255), __.float(0.16470588235294117), __.int(1));\n        color.slate950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.023529411764705882), __.float(0.09019607843137255), __.int(1));\n        color.gray50 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.9803921568627451), __.float(0.984313725490196), __.int(1));\n        color.gray100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9568627450980393), __.float(0.9647058823529412), __.int(1));\n        color.gray200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.9058823529411765), __.float(0.9215686274509803), __.int(1));\n        color.gray300 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.8352941176470589), __.float(0.8588235294117647), __.int(1));\n        color.gray400 = __.FM.float_4_1_1_1_1(__.float(0.611764705882353), __.float(0.6392156862745098), __.float(0.6862745098039216), __.int(1));\n        color.gray500 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.4470588235294118), __.float(0.5019607843137255), __.int(1));\n        color.gray600 = __.FM.float_4_1_1_1_1(__.float(0.29411764705882354), __.float(0.3333333333333333), __.float(0.38823529411764707), __.int(1));\n        color.gray700 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.2549019607843137), __.float(0.3176470588235294), __.int(1));\n        color.gray800 = __.FM.float_4_1_1_1_1(__.float(0.12156862745098039), __.float(0.1607843137254902), __.float(0.21568627450980393), __.int(1));\n        color.gray900 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.09411764705882353), __.float(0.15294117647058825), __.int(1));\n        color.gray950 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.027450980392156862), __.float(0.07058823529411765), __.int(1));\n        color.zinc50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.zinc100 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.9568627450980393), __.float(0.9607843137254902), __.int(1));\n        color.zinc200 = __.FM.float_4_1_1_1_1(__.float(0.8941176470588236), __.float(0.8941176470588236), __.float(0.9058823529411765), __.int(1));\n        color.zinc300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8470588235294118), __.int(1));\n        color.zinc400 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.6313725490196078), __.float(0.6666666666666666), __.int(1));\n        color.zinc500 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.44313725490196076), __.float(0.47843137254901963), __.int(1));\n        color.zinc600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3568627450980392), __.int(1));\n        color.zinc700 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.24705882352941178), __.float(0.27450980392156865), __.int(1));\n        color.zinc800 = __.FM.float_4_1_1_1_1(__.float(0.15294117647058825), __.float(0.15294117647058825), __.float(0.16470588235294117), __.int(1));\n        color.zinc900 = __.FM.float_4_1_1_1_1(__.float(0.09411764705882353), __.float(0.09411764705882353), __.float(0.10588235294117647), __.int(1));\n        color.zinc950 = __.FM.float_4_1_1_1_1(__.float(0.03529411764705882), __.float(0.03529411764705882), __.float(0.043137254901960784), __.int(1));\n        color.neutral50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.neutral100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9607843137254902), __.int(1));\n        color.neutral200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.8980392156862745), __.float(0.8980392156862745), __.int(1));\n        color.neutral300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8313725490196079), __.int(1));\n        color.neutral400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.6392156862745098), __.float(0.6392156862745098), __.int(1));\n        color.neutral500 = __.FM.float_4_1_1_1_1(__.float(0.45098039215686275), __.float(0.45098039215686275), __.float(0.45098039215686275), __.int(1));\n        color.neutral600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3215686274509804), __.int(1));\n        color.neutral700 = __.FM.float_4_1_1_1_1(__.float(0.25098039215686274), __.float(0.25098039215686274), __.float(0.25098039215686274), __.int(1));\n        color.neutral800 = __.FM.float_4_1_1_1_1(__.float(0.14901960784313725), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.neutral900 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.09019607843137255), __.float(0.09019607843137255), __.int(1));\n        color.neutral950 = __.FM.float_4_1_1_1_1(__.float(0.0392156862745098), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.stone50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9764705882352941), __.int(1));\n        color.stone100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9568627450980393), __.int(1));\n        color.stone200 = __.FM.float_4_1_1_1_1(__.float(0.9058823529411765), __.float(0.8980392156862745), __.float(0.8941176470588236), __.int(1));\n        color.stone300 = __.FM.float_4_1_1_1_1(__.float(0.8392156862745098), __.float(0.8274509803921568), __.float(0.8196078431372549), __.int(1));\n        color.stone400 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.6352941176470588), __.float(0.6196078431372549), __.int(1));\n        color.stone500 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.44313725490196076), __.float(0.4235294117647059), __.int(1));\n        color.stone600 = __.FM.float_4_1_1_1_1(__.float(0.3411764705882353), __.float(0.3254901960784314), __.float(0.3058823529411765), __.int(1));\n        color.stone700 = __.FM.float_4_1_1_1_1(__.float(0.26666666666666666), __.float(0.25098039215686274), __.float(0.23529411764705882), __.int(1));\n        color.stone800 = __.FM.float_4_1_1_1_1(__.float(0.1607843137254902), __.float(0.1450980392156863), __.float(0.1411764705882353), __.int(1));\n        color.stone900 = __.FM.float_4_1_1_1_1(__.float(0.10980392156862745), __.float(0.09803921568627451), __.float(0.09019607843137255), __.int(1));\n        color.stone950 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.0392156862745098), __.float(0.03529411764705882), __.int(1));\n        color.red50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9490196078431372), __.float(0.9490196078431372), __.int(1));\n        color.red100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8862745098039215), __.float(0.8862745098039215), __.int(1));\n        color.red200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.792156862745098), __.float(0.792156862745098), __.int(1));\n        color.red300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.6470588235294118), __.float(0.6470588235294118), __.int(1));\n        color.red400 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.44313725490196076), __.float(0.44313725490196076), __.int(1));\n        color.red500 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.26666666666666666), __.float(0.26666666666666666), __.int(1));\n        color.red600 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.red700 = __.FM.float_4_1_1_1_1(__.float(0.7254901960784313), __.float(0.10980392156862745), __.float(0.10980392156862745), __.int(1));\n        color.red800 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.10588235294117647), __.float(0.10588235294117647), __.int(1));\n        color.red900 = __.FM.float_4_1_1_1_1(__.float(0.4980392156862745), __.float(0.11372549019607843), __.float(0.11372549019607843), __.int(1));\n        color.red950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.orange50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9686274509803922), __.float(0.9294117647058824), __.int(1));\n        color.orange100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9294117647058824), __.float(0.8352941176470589), __.int(1));\n        color.orange200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8431372549019608), __.float(0.6666666666666666), __.int(1));\n        color.orange300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.7294117647058823), __.float(0.4549019607843137), __.int(1));\n        color.orange400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.5725490196078431), __.float(0.23529411764705882), __.int(1));\n        color.orange500 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.45098039215686275), __.float(0.08627450980392157), __.int(1));\n        color.orange600 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.34509803921568627), __.float(0.047058823529411764), __.int(1));\n        color.orange700 = __.FM.float_4_1_1_1_1(__.float(0.7607843137254902), __.float(0.2549019607843137), __.float(0.047058823529411764), __.int(1));\n        color.orange800 = __.FM.float_4_1_1_1_1(__.float(0.6039215686274509), __.float(0.20392156862745098), __.float(0.07058823529411765), __.int(1));\n        color.orange900 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.17647058823529413), __.float(0.07058823529411765), __.int(1));\n        color.orange950 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.0784313725490196), __.float(0.027450980392156862), __.int(1));\n        color.amber50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.984313725490196), __.float(0.9215686274509803), __.int(1));\n        color.amber100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9529411764705882), __.float(0.7803921568627451), __.int(1));\n        color.amber200 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9019607843137255), __.float(0.5411764705882353), __.int(1));\n        color.amber300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.8274509803921568), __.float(0.30196078431372547), __.int(1));\n        color.amber400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.7490196078431373), __.float(0.1411764705882353), __.int(1));\n        color.amber500 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.6196078431372549), __.float(0.043137254901960784), __.int(1));\n        color.amber600 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.4666666666666667), __.float(0.023529411764705882), __.int(1));\n        color.amber700 = __.FM.float_4_1_1_1_1(__.float(0.7058823529411765), __.float(0.3254901960784314), __.float(0.03529411764705882), __.int(1));\n        color.amber800 = __.FM.float_4_1_1_1_1(__.float(0.5725490196078431), __.float(0.25098039215686274), __.float(0.054901960784313725), __.int(1));\n        color.amber900 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.20784313725490197), __.float(0.058823529411764705), __.int(1));\n        color.amber950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.10196078431372549), __.float(0.011764705882352941), __.int(1));\n        color.yellow50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9882352941176471), __.float(0.9098039215686274), __.int(1));\n        color.yellow100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9764705882352941), __.float(0.7647058823529411), __.int(1));\n        color.yellow200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9411764705882353), __.float(0.5411764705882353), __.int(1));\n        color.yellow300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.8784313725490196), __.float(0.2784313725490196), __.int(1));\n        color.yellow400 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.8), __.float(0.08235294117647059), __.int(1));\n        color.yellow500 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.7019607843137254), __.float(0.03137254901960784), __.int(1));\n        color.yellow600 = __.FM.float_4_1_1_1_1(__.float(0.792156862745098), __.float(0.5411764705882353), __.float(0.01568627450980392), __.int(1));\n        color.yellow700 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.3843137254901961), __.float(0.027450980392156862), __.int(1));\n        color.yellow800 = __.FM.float_4_1_1_1_1(__.float(0.5215686274509804), __.float(0.30196078431372547), __.float(0.054901960784313725), __.int(1));\n        color.yellow900 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.24705882352941178), __.float(0.07058823529411765), __.int(1));\n        color.yellow950 = __.FM.float_4_1_1_1_1(__.float(0.25882352941176473), __.float(0.12549019607843137), __.float(0.023529411764705882), __.int(1));\n        color.lime50 = __.FM.float_4_1_1_1_1(__.float(0.9686274509803922), __.float(0.996078431372549), __.float(0.9058823529411765), __.int(1));\n        color.lime100 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9882352941176471), __.float(0.796078431372549), __.int(1));\n        color.lime200 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.9764705882352941), __.float(0.615686274509804), __.int(1));\n        color.lime300 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.9490196078431372), __.float(0.39215686274509803), __.int(1));\n        color.lime400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.9019607843137255), __.float(0.20784313725490197), __.int(1));\n        color.lime500 = __.FM.float_4_1_1_1_1(__.float(0.5176470588235295), __.float(0.8), __.float(0.08627450980392157), __.int(1));\n        color.lime600 = __.FM.float_4_1_1_1_1(__.float(0.396078431372549), __.float(0.6392156862745098), __.float(0.050980392156862744), __.int(1));\n        color.lime700 = __.FM.float_4_1_1_1_1(__.float(0.30196078431372547), __.float(0.48627450980392156), __.float(0.058823529411764705), __.int(1));\n        color.lime800 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.3843137254901961), __.float(0.07058823529411765), __.int(1));\n        color.lime900 = __.FM.float_4_1_1_1_1(__.float(0.21176470588235294), __.float(0.3254901960784314), __.float(0.0784313725490196), __.int(1));\n        color.lime950 = __.FM.float_4_1_1_1_1(__.float(0.10196078431372549), __.float(0.1803921568627451), __.float(0.0196078431372549), __.int(1));\n        color.green50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1));\n        color.green100 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.9882352941176471), __.float(0.9058823529411765), __.int(1));\n        color.green200 = __.FM.float_4_1_1_1_1(__.float(0.7333333333333333), __.float(0.9686274509803922), __.float(0.8156862745098039), __.int(1));\n        color.green300 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.9372549019607843), __.float(0.6745098039215687), __.int(1));\n        color.green400 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.8705882352941177), __.float(0.5019607843137255), __.int(1));\n        color.green500 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.7725490196078432), __.float(0.3686274509803922), __.int(1));\n        color.green600 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.6392156862745098), __.float(0.2901960784313726), __.int(1));\n        color.green700 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.5019607843137255), __.float(0.23921568627450981), __.int(1));\n        color.green800 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.396078431372549), __.float(0.20392156862745098), __.int(1));\n        color.green900 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.3254901960784314), __.float(0.17647058823529413), __.int(1));\n        color.green950 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.1803921568627451), __.float(0.08627450980392157), __.int(1));\n        color.emerald50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9921568627450981), __.float(0.9607843137254902), __.int(1));\n        color.emerald100 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.9803921568627451), __.float(0.8980392156862745), __.int(1));\n        color.emerald200 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.9529411764705882), __.float(0.8156862745098039), __.int(1));\n        color.emerald300 = __.FM.float_4_1_1_1_1(__.float(0.43137254901960786), __.float(0.9058823529411765), __.float(0.7176470588235294), __.int(1));\n        color.emerald400 = __.FM.float_4_1_1_1_1(__.float(0.20392156862745098), __.float(0.8274509803921568), __.float(0.6), __.int(1));\n        color.emerald500 = __.FM.float_4_1_1_1_1(__.float(0.06274509803921569), __.float(0.7254901960784313), __.float(0.5058823529411764), __.int(1));\n        color.emerald600 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.5882352941176471), __.float(0.4117647058823529), __.int(1));\n        color.emerald700 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.47058823529411764), __.float(0.3411764705882353), __.int(1));\n        color.emerald800 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.37254901960784315), __.float(0.27450980392156865), __.int(1));\n        color.emerald900 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.3058823529411765), __.float(0.23137254901960785), __.int(1));\n        color.emerald950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.17254901960784313), __.float(0.13333333333333333), __.int(1));\n        color.teal50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9803921568627451), __.int(1));\n        color.teal100 = __.FM.float_4_1_1_1_1(__.float(0.8), __.float(0.984313725490196), __.float(0.9450980392156862), __.int(1));\n        color.teal200 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.9647058823529412), __.float(0.8941176470588236), __.int(1));\n        color.teal300 = __.FM.float_4_1_1_1_1(__.float(0.3686274509803922), __.float(0.9176470588235294), __.float(0.8313725490196079), __.int(1));\n        color.teal400 = __.FM.float_4_1_1_1_1(__.float(0.17647058823529413), __.float(0.8313725490196079), __.float(0.7490196078431373), __.int(1));\n        color.teal500 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.7215686274509804), __.float(0.6509803921568628), __.int(1));\n        color.teal600 = __.FM.float_4_1_1_1_1(__.float(0.050980392156862744), __.float(0.5803921568627451), __.float(0.5333333333333333), __.int(1));\n        color.teal700 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.4627450980392157), __.float(0.43137254901960786), __.int(1));\n        color.teal800 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.3686274509803922), __.float(0.34901960784313724), __.int(1));\n        color.teal900 = __.FM.float_4_1_1_1_1(__.float(0.07450980392156863), __.float(0.3058823529411765), __.float(0.2901960784313726), __.int(1));\n        color.teal950 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.1843137254901961), __.float(0.1803921568627451), __.int(1));\n        color.cyan50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.996078431372549), __.int(1), __.int(1));\n        color.cyan100 = __.FM.float_4_1_1_1_1(__.float(0.8117647058823529), __.float(0.9803921568627451), __.float(0.996078431372549), __.int(1));\n        color.cyan200 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.9529411764705882), __.float(0.9882352941176471), __.int(1));\n        color.cyan300 = __.FM.float_4_1_1_1_1(__.float(0.403921568627451), __.float(0.9098039215686274), __.float(0.9764705882352941), __.int(1));\n        color.cyan400 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.8274509803921568), __.float(0.9333333333333333), __.int(1));\n        color.cyan500 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.7137254901960784), __.float(0.8313725490196079), __.int(1));\n        color.cyan600 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.5686274509803921), __.float(0.6980392156862745), __.int(1));\n        color.cyan700 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.4549019607843137), __.float(0.5647058823529412), __.int(1));\n        color.cyan800 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.3686274509803922), __.float(0.4588235294117647), __.int(1));\n        color.cyan900 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.3058823529411765), __.float(0.38823529411764707), __.int(1));\n        color.cyan950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.2), __.float(0.26666666666666666), __.int(1));\n        color.sky50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9764705882352941), __.int(1), __.int(1));\n        color.sky100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9490196078431372), __.float(0.996078431372549), __.int(1));\n        color.sky200 = __.FM.float_4_1_1_1_1(__.float(0.7294117647058823), __.float(0.9019607843137255), __.float(0.9921568627450981), __.int(1));\n        color.sky300 = __.FM.float_4_1_1_1_1(__.float(0.49019607843137253), __.float(0.8274509803921568), __.float(0.9882352941176471), __.int(1));\n        color.sky400 = __.FM.float_4_1_1_1_1(__.float(0.2196078431372549), __.float(0.7411764705882353), __.float(0.9725490196078431), __.int(1));\n        color.sky500 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.6470588235294118), __.float(0.9137254901960784), __.int(1));\n        color.sky600 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.5176470588235295), __.float(0.7803921568627451), __.int(1));\n        color.sky700 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.4117647058823529), __.float(0.6313725490196078), __.int(1));\n        color.sky800 = __.FM.float_4_1_1_1_1(__.float(0.027450980392156862), __.float(0.34901960784313724), __.float(0.5215686274509804), __.int(1));\n        color.sky900 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.2901960784313726), __.float(0.43137254901960786), __.int(1));\n        color.sky950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.1843137254901961), __.float(0.28627450980392155), __.int(1));\n        color.blue50 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.9647058823529412), __.int(1), __.int(1));\n        color.blue100 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.9176470588235294), __.float(0.996078431372549), __.int(1));\n        color.blue200 = __.FM.float_4_1_1_1_1(__.float(0.7490196078431373), __.float(0.8588235294117647), __.float(0.996078431372549), __.int(1));\n        color.blue300 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.7725490196078432), __.float(0.9921568627450981), __.int(1));\n        color.blue400 = __.FM.float_4_1_1_1_1(__.float(0.3764705882352941), __.float(0.6470588235294118), __.float(0.9803921568627451), __.int(1));\n        color.blue500 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.5098039215686274), __.float(0.9647058823529412), __.int(1));\n        color.blue600 = __.FM.float_4_1_1_1_1(__.float(0.1450980392156863), __.float(0.38823529411764707), __.float(0.9215686274509803), __.int(1));\n        color.blue700 = __.FM.float_4_1_1_1_1(__.float(0.11372549019607843), __.float(0.3058823529411765), __.float(0.8470588235294118), __.int(1));\n        color.blue800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.25098039215686274), __.float(0.6862745098039216), __.int(1));\n        color.blue900 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.22745098039215686), __.float(0.5411764705882353), __.int(1));\n        color.blue950 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.1450980392156863), __.float(0.32941176470588235), __.int(1));\n        color.indigo50 = __.FM.float_4_1_1_1_1(__.float(0.9333333333333333), __.float(0.9490196078431372), __.int(1), __.int(1));\n        color.indigo100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9058823529411765), __.int(1), __.int(1));\n        color.indigo200 = __.FM.float_4_1_1_1_1(__.float(0.7803921568627451), __.float(0.8235294117647058), __.float(0.996078431372549), __.int(1));\n        color.indigo300 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.7058823529411765), __.float(0.9882352941176471), __.int(1));\n        color.indigo400 = __.FM.float_4_1_1_1_1(__.float(0.5058823529411764), __.float(0.5490196078431373), __.float(0.9725490196078431), __.int(1));\n        color.indigo500 = __.FM.float_4_1_1_1_1(__.float(0.38823529411764707), __.float(0.4), __.float(0.9450980392156862), __.int(1));\n        color.indigo600 = __.FM.float_4_1_1_1_1(__.float(0.30980392156862746), __.float(0.27450980392156865), __.float(0.8980392156862745), __.int(1));\n        color.indigo700 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.2196078431372549), __.float(0.792156862745098), __.int(1));\n        color.indigo800 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.18823529411764706), __.float(0.6392156862745098), __.int(1));\n        color.indigo900 = __.FM.float_4_1_1_1_1(__.float(0.19215686274509805), __.float(0.1803921568627451), __.float(0.5058823529411764), __.int(1));\n        color.indigo950 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.10588235294117647), __.float(0.29411764705882354), __.int(1));\n        color.violet50 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9529411764705882), __.int(1), __.int(1));\n        color.violet100 = __.FM.float_4_1_1_1_1(__.float(0.9294117647058824), __.float(0.9137254901960784), __.float(0.996078431372549), __.int(1));\n        color.violet200 = __.FM.float_4_1_1_1_1(__.float(0.8666666666666667), __.float(0.8392156862745098), __.float(0.996078431372549), __.int(1));\n        color.violet300 = __.FM.float_4_1_1_1_1(__.float(0.7686274509803922), __.float(0.7098039215686275), __.float(0.9921568627450981), __.int(1));\n        color.violet400 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.5450980392156862), __.float(0.9803921568627451), __.int(1));\n        color.violet500 = __.FM.float_4_1_1_1_1(__.float(0.5450980392156862), __.float(0.3607843137254902), __.float(0.9647058823529412), __.int(1));\n        color.violet600 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.22745098039215686), __.float(0.9294117647058824), __.int(1));\n        color.violet700 = __.FM.float_4_1_1_1_1(__.float(0.42745098039215684), __.float(0.1568627450980392), __.float(0.8509803921568627), __.int(1));\n        color.violet800 = __.FM.float_4_1_1_1_1(__.float(0.3568627450980392), __.float(0.12941176470588237), __.float(0.7137254901960784), __.int(1));\n        color.violet900 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.11372549019607843), __.float(0.5843137254901961), __.int(1));\n        color.violet950 = __.FM.float_4_1_1_1_1(__.float(0.1803921568627451), __.float(0.06274509803921569), __.float(0.396078431372549), __.int(1));\n        color.purple50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9607843137254902), __.int(1), __.int(1));\n        color.purple100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.purple200 = __.FM.float_4_1_1_1_1(__.float(0.9137254901960784), __.float(0.8352941176470589), __.int(1), __.int(1));\n        color.purple300 = __.FM.float_4_1_1_1_1(__.float(0.8470588235294118), __.float(0.7058823529411765), __.float(0.996078431372549), __.int(1));\n        color.purple400 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.5176470588235295), __.float(0.9882352941176471), __.int(1));\n        color.purple500 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.3333333333333333), __.float(0.9686274509803922), __.int(1));\n        color.purple600 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.2), __.float(0.9176470588235294), __.int(1));\n        color.purple700 = __.FM.float_4_1_1_1_1(__.float(0.49411764705882355), __.float(0.13333333333333333), __.float(0.807843137254902), __.int(1));\n        color.purple800 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.12941176470588237), __.float(0.6588235294117647), __.int(1));\n        color.purple900 = __.FM.float_4_1_1_1_1(__.float(0.34509803921568627), __.float(0.10980392156862745), __.float(0.5294117647058824), __.int(1));\n        color.purple950 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.027450980392156862), __.float(0.39215686274509803), __.int(1));\n        color.fuchsia50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1), __.int(1));\n        color.fuchsia100 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.fuchsia200 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.8156862745098039), __.float(0.996078431372549), __.int(1));\n        color.fuchsia300 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.6705882352941176), __.float(0.9882352941176471), __.int(1));\n        color.fuchsia400 = __.FM.float_4_1_1_1_1(__.float(0.9098039215686274), __.float(0.4745098039215686), __.float(0.9764705882352941), __.int(1));\n        color.fuchsia500 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.27450980392156865), __.float(0.9372549019607843), __.int(1));\n        color.fuchsia600 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.14901960784313725), __.float(0.8274509803921568), __.int(1));\n        color.fuchsia700 = __.FM.float_4_1_1_1_1(__.float(0.6352941176470588), __.float(0.10980392156862745), __.float(0.6862745098039216), __.int(1));\n        color.fuchsia800 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.09803921568627451), __.float(0.5607843137254902), __.int(1));\n        color.fuchsia900 = __.FM.float_4_1_1_1_1(__.float(0.4392156862745098), __.float(0.10196078431372549), __.float(0.4588235294117647), __.int(1));\n        color.fuchsia950 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.01568627450980392), __.float(0.3058823529411765), __.int(1));\n        color.pink50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9490196078431372), __.float(0.9725490196078431), __.int(1));\n        color.pink100 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.9058823529411765), __.float(0.9529411764705882), __.int(1));\n        color.pink200 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.8117647058823529), __.float(0.9098039215686274), __.int(1));\n        color.pink300 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.6588235294117647), __.float(0.8313725490196079), __.int(1));\n        color.pink400 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.4470588235294118), __.float(0.7137254901960784), __.int(1));\n        color.pink500 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.2823529411764706), __.float(0.6), __.int(1));\n        color.pink600 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.15294117647058825), __.float(0.4666666666666667), __.int(1));\n        color.pink700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.09411764705882353), __.float(0.36470588235294116), __.int(1));\n        color.pink800 = __.FM.float_4_1_1_1_1(__.float(0.615686274509804), __.float(0.09019607843137255), __.float(0.30196078431372547), __.int(1));\n        color.pink900 = __.FM.float_4_1_1_1_1(__.float(0.5137254901960784), __.float(0.09411764705882353), __.float(0.2627450980392157), __.int(1));\n        color.pink950 = __.FM.float_4_1_1_1_1(__.float(0.3137254901960784), __.float(0.027450980392156862), __.float(0.1411764705882353), __.int(1));\n        color.rose50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9450980392156862), __.float(0.9490196078431372), __.int(1));\n        color.rose100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.8941176470588236), __.float(0.9019607843137255), __.int(1));\n        color.rose200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.803921568627451), __.float(0.8274509803921568), __.int(1));\n        color.rose300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.6431372549019608), __.float(0.6862745098039216), __.int(1));\n        color.rose400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.44313725490196076), __.float(0.5215686274509804), __.int(1));\n        color.rose500 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.24705882352941178), __.float(0.3686274509803922), __.int(1));\n        color.rose600 = __.FM.float_4_1_1_1_1(__.float(0.8823529411764706), __.float(0.11372549019607843), __.float(0.2823529411764706), __.int(1));\n        color.rose700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.07058823529411765), __.float(0.23529411764705882), __.int(1));\n        color.rose800 = __.FM.float_4_1_1_1_1(__.float(0.6235294117647059), __.float(0.07058823529411765), __.float(0.2235294117647059), __.int(1));\n        color.rose900 = __.FM.float_4_1_1_1_1(__.float(0.5333333333333333), __.float(0.07450980392156863), __.float(0.21568627450980393), __.int(1));\n        color.rose950 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.0196078431372549), __.float(0.09803921568627451), __.int(1));\n        return color;\n    }());\n    exports.color = color;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_common_ts_57436_color\\\\\",\\\\\"fields\\\\\":[[\\\\\"slate50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"slate950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"gray950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"zinc950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"neutral950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"stone950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"red950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"orange950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"amber950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"yellow950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"lime950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"green950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"emerald950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"teal950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"cyan950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"sky950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"blue950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"indigo950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"violet950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"purple950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"fuchsia950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"pink950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose50\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose100\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose200\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose300\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose400\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose500\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose600\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose700\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose800\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose900\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}],[\\\\\"rose950\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float4\\\\\"}]]}\"), color)\n    ;\n    function wrap2(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high)); }\n    exports.wrap2 = wrap2;\n    ;\n    function wrap3(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high)); }\n    exports.wrap3 = wrap3;\n    ;\n    function wrap4(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high), (0, std_math_1.wrap)(value[3], low, high)); }\n    exports.wrap4 = wrap4;\n    ;\n});\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/sdf.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/sdf.js\",\n          writeByteOrderMark: false,\n          text: `var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std_math_1, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.sdf = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var sdf = /** @class */ (function () {\n        function sdf(data) {\n        }\n        sdf.sphere = function (samplePosition, sphereCenter, radius) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.box = function (samplePosition, boxCenter, boxSize) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0);\n        };\n        sdf.roundBox = function (samplePosition, boxCenter, boxSize, cornerRadius) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var r = cornerRadius;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0) - r;\n        };\n        sdf.boxFrame = function (samplePosition, boxCenter, boxSize, frameThickness) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var b = boxSize;\n            var e = frameThickness;\n            p = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = b, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var q = (_f = (_h = (_j = p, _k = e, [_j[0] + _k, _j[1] + _k, _j[2] + _k]), [Math.abs(_h[0]), Math.abs(_h[1]), Math.abs(_h[2])]), _g = e, [_f[0] - _g, _f[1] - _g, _f[2] - _g]);\n            return (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(p, 'x'), __.swizzle(q, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(p[0], (0, std_math_1.max)(q[1], q[2])), 0.0), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(p, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(p[1], q[2])), 0.0)), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(q, 'y'), __.swizzle(p, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], p[2])), 0.0));\n        };\n        sdf.torus = function (samplePosition, torusCenter, torusSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var t = torusSize;\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), t[0]), __.swizzle(p, 'y'));\n            return (0, std_math_1.length)(q) - t[1];\n        };\n        sdf.cappedTorus = function (samplePosition, torusCenter, torusSize, ra, rb) {\n            var _a, _b, _c, _d, _e;\n            var p1 = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var p = __.makeVector(Math.abs(p1[0]), (_c = p1, [_c[1], _c[2]]));\n            var sc = torusSize;\n            var k = (sc[1] * p[0] > sc[0] * p[1]) ? (0, std_math_1.dot)((_d = p, [_d[0], _d[1]]), sc) : (0, std_math_1.length)((_e = p, [_e[0], _e[1]]));\n            return Math.sqrt((0, std_math_1.dot)(p, p) + ra * ra - 2.0 * ra * k) - rb;\n        };\n        sdf.link = function (samplePosition, linkCenter, linkLength, r1, r2) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = linkCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var le = linkLength;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'x'), (0, std_math_1.max)(Math.abs(p[1]) - le, 0.0), __.swizzle(p, 'z'));\n            return (0, std_math_1.length)(__.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = q, [_c[0], _c[1]])), r1), __.swizzle(q, 'z'))) - r2;\n        };\n        sdf.infinteCylinder = function (samplePosition, cylinderCenter, cylinderSize) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = cylinderSize;\n            return (0, std_math_1.length)((_c = (_e = p, [_e[0], _e[2]]), _d = (_f = c, [_f[0], _f[1]]), [_c[0] - _d[0], _c[1] - _d[1]])) - c[2];\n        };\n        sdf.cone = function (samplePosition, coneCenter, c, coneHeight) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = coneHeight;\n            // c is the sin/cos of the angle, h is height\n            // Alternatively pass q instead of (c,h),\n            // which is the point at the base in 2D\n            var q = (_c = h, _d = __.FM.float_2_1_1(__.div(c[0], c[1]), __.negate(1.0)), [_c * _d[0], _c * _d[1]]);\n            var w = __.FM.float_2_1_1((0, std_math_1.length)((_e = p, [_e[0], _e[2]])), __.swizzle(p, 'y'));\n            var a = (_f = w, _g = (_h = q, _j = (0, std_math_1.clamp)((0, std_math_1.dot)(w, q) / (0, std_math_1.dot)(q, q), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_f[0] - _g[0], _f[1] - _g[1]]);\n            var b = (_k = w, _l = (_m = q, _o = __.FM.float_2_1_1((0, std_math_1.clamp)(w[0] / q[0], 0.0, 1.0), __.float(1.0)), [_m[0] * _o[0], _m[1] * _o[1]]), [_k[0] - _l[0], _k[1] - _l[1]]);\n            var k = Math.sign(q[1]);\n            var d = (0, std_math_1.min)((0, std_math_1.dot)(a, a), (0, std_math_1.dot)(b, b));\n            var s = (0, std_math_1.max)(k * (w[0] * q[1] - w[1] * q[0]), k * (w[1] - q[1]));\n            return Math.sqrt(d) * Math.sign(s);\n        };\n        sdf.plane = function (samplePosition, planeCenter, planeNormal, planeHeight) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = planeCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var n = planeNormal;\n            var h = planeHeight;\n            // n must be normalized\n            return (0, std_math_1.dot)(p, n) + h;\n        };\n        sdf.hexPrism = function (samplePosition, hexCenter, hexSize) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = hexCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = hexSize;\n            var k = __.FM.float_3_1_1_1(__.negate(0.8660254), __.float(0.5), __.float(0.57735));\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var dddd = (0, std_math_1.min)((0, std_math_1.dot)((_d = k, [_d[0], _d[1]]), (_e = p, [_e[0], _e[1]])), 0.0) * 2.0;\n            p = (_f = p, _g = __.FM.float_3_2_1(__.mul(dddd, (_h = k, [_h[0], _h[1]])), __.float(0.0)), [_f[0] - _g[0], _f[1] - _g[1], _f[2] - _g[2]]);\n            var d = __.FM.float_2_1_1(__.mul((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[1]]), _k = __.FM.float_2_1_1((0, std_math_1.clamp)(p[0], (__.FM.negate_1(k[2])) * h[0], k[2] * h[0]), __.swizzle(h, 'x')), [_j[0] - _k[0], _j[1] - _k[1]])), Math.sign(p[1] - h[0])), __.sub(p[2], h[1]));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.triPrism = function (samplePosition, triCenter, triSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = triCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = triSize;\n            var q = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            return (0, std_math_1.max)(q[2] - h[1], (0, std_math_1.max)(q[0] * 0.866025 + p[1] * 0.5, (__.FM.negate_1(p[1]))) - h[0] * 0.5);\n        };\n        sdf.capsuleLine = function (samplePosition, lineStart, lineEnd, capsuleRadius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = capsuleRadius;\n            var pa = (_a = p, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var ba = (_c = b, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var h = (0, std_math_1.clamp)((0, std_math_1.dot)(pa, ba) / (0, std_math_1.dot)(ba, ba), 0.0, 1.0);\n            return (0, std_math_1.length)((_e = pa, _f = (_g = ba, _h = h, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r;\n        };\n        sdf.capsule = function (samplePosition, capsuleCenter, height, radius) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = capsuleCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var p = __.makeVector(p1[0], p1[1] - (0, std_math_1.clamp)(p1[1], 0.0, h), p1[2]);\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.cylinder = function (samplePosition, cylinderCenter, height, radius) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var d = (_c = (_e = __.FM.float_2_1_1((0, std_math_1.length)((_f = p, [_f[0], _f[2]])), __.swizzle(p, 'y')), [Math.abs(_e[0]), Math.abs(_e[1])]), _d = __.FM.float_2_1_1(r, h), [_c[0] - _d[0], _c[1] - _d[1]]);\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.cylinderLine = function (samplePosition, lineStart, lineEnd, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = radius;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var baba = (0, std_math_1.dot)(ba, ba);\n            var paba = (0, std_math_1.dot)(pa, ba);\n            var x = (0, std_math_1.length)((_e = (_g = pa, _h = baba, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), _f = (_j = ba, _k = paba, [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r * baba;\n            var y = Math.abs(paba - baba * 0.5) - baba * 0.5;\n            var x2 = x * x;\n            var y2 = y * y * baba;\n            var mxxy = (0, std_math_1.max)(x, y);\n            var d = (mxxy < 0.0) ? (__.FM.negate_1((0, std_math_1.min)(x2, y2))) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0));\n            return Math.sign(d) * Math.sqrt(Math.abs(d)) / baba;\n        };\n        sdf.roundedCylinder = function (samplePosition, cylinderCenter, cylinderRadius, cornerRadius, height) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b, _a[1] - _b, _a[2] - _b]);\n            var h = height;\n            var ra = cylinderRadius;\n            var rb = cornerRadius;\n            var d = __.FM.float_2_1_1(__.add((0, std_math_1.length)((_c = p, [_c[0], _c[2]])) - 2.0 * ra, rb), __.sub(Math.abs(p[1]), h));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0)) - rb;\n        };\n        sdf.cappedCone = function (samplePosition, coneCenter, height, r1, r2) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k1 = __.FM.float_2_1_1(r2, h);\n            var k2 = __.FM.float_2_1_1(__.sub(r2, r1), __.mul(2.0, h));\n            var ca = __.FM.float_2_1_1(__.sub(q[0], (0, std_math_1.min)(q[0], (q[1] < 0.0) ? r1 : r2)), __.sub(Math.abs(q[1]), h));\n            var cb = (_d = (_f = q, _g = k1, [_f[0] - _g[0], _f[1] - _g[1]]), _e = (_h = k2, _j = (0, std_math_1.clamp)((0, std_math_1.dot)((_k = k1, _l = q, [_k[0] - _l[0], _k[1] - _l[1]]), k2) / dot2(k2), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_d[0] + _e[0], _d[1] + _e[1]]);\n            var s = (__.and(cb[0] < 0.0, ca[1] < 0.0)) ? (__.FM.negate_1(1.0)) : 1.0;\n            return s * Math.sqrt((0, std_math_1.min)(dot2(ca), dot2(cb)));\n        };\n        sdf.solidAngle = function (samplePosition, solidCenter, size, radius) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = solidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = size;\n            var ra = radius;\n            // c is the sin/cos of the angle\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var l = (0, std_math_1.length)(q) - ra;\n            var m = (0, std_math_1.length)((_d = q, _e = (_f = c, _g = (0, std_math_1.clamp)((0, std_math_1.dot)(q, c), 0.0, ra), [_f[0] * _g, _f[1] * _g]), [_d[0] - _e[0], _d[1] - _e[1]]));\n            return (0, std_math_1.max)(l, m * Math.sign(c[1] * q[0] - c[0] * q[1]));\n        };\n        sdf.cutSphere = function (samplePosition, sphereCenter, radius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var s = (0, std_math_1.max)((h - r) * q[0] * q[0] + w * w * (h + r - 2.0 * q[1]), h * q[0] - w * q[1]);\n            return (s < 0.0) ? (0, std_math_1.length)(q) - r : (q[0] < w) ? h - q[1] : (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]]));\n        };\n        sdf.cutHollowSphere = function (samplePosition, sphereCenter, radius, height, thickness) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var h = height;\n            var t = thickness;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            return ((h * q[0] < w * q[1]) ? (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]])) : Math.abs((0, std_math_1.length)(q) - r)) - t;\n        };\n        sdf.roundCone = function (samplePosition, coneCenter, coneRadius, cornerRadius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r1 = coneRadius;\n            var r2 = cornerRadius;\n            // sampling independent computations (only depend on shape)\n            var b = (r1 - r2) / h;\n            var a = Math.sqrt(1.0 - b * b);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k = (0, std_math_1.dot)(q, __.FM.float_2_1_1(__.negate(b), a));\n            if (k < 0.0)\n                return (0, std_math_1.length)(q) - r1;\n            if (k > a * h)\n                return (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(__.float(0.0), h), [_d[0] - _e[0], _d[1] - _e[1]])) - r2;\n            return (0, std_math_1.dot)(q, __.FM.float_2_1_1(a, b)) - r1;\n        };\n        sdf.ellipsoid = function (samplePosition, center, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var k0 = (0, std_math_1.length)((_c = p, _d = r, [_c[0] / _d[0], _c[1] / _d[1], _c[2] / _d[2]]));\n            var k1 = (0, std_math_1.length)((_e = p, _f = (_g = r, _h = r, [_g[0] * _h[0], _g[1] * _h[1], _g[2] * _h[2]]), [_e[0] / _f[0], _e[1] / _f[1], _e[2] / _f[2]]));\n            return k0 * (k0 - 1.0) / k1;\n        };\n        sdf.rhombus = function (samplePosition, rhombusCenter, la, lb, height, ra) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var p = (_a = samplePosition, _b = rhombusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var b = __.FM.float_2_1_1(la, lb);\n            var f = (0, std_math_1.clamp)((ndot(b, (_d = b, _e = (_f = 2.0, _g = (_h = p, [_h[0], _h[2]]), [_f * _g[0], _f * _g[1]]), [_d[0] - _e[0], _d[1] - _e[1]]))) / (0, std_math_1.dot)(b, b), (__.FM.negate_1(1.0)), 1.0);\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[2]]), _k = (_m = (_p = 0.5, _q = b, [_p * _q[0], _p * _q[1]]), _o = __.FM.float_2_1_1(__.sub(1.0, f), __.add(1.0, f)), [_m[0] * _o[0], _m[1] * _o[1]]), [_j[0] - _k[0], _j[1] - _k[1]])) * Math.sign(p[0] * b[1] + p[2] * b[0] - b[0] * b[1]), ra), __.sub(p[1], h));\n            return (0, std_math_1.min)((0, std_math_1.max)(q[0], q[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(q, 0.0));\n        };\n        sdf.octahedron = function (samplePosition, center, size) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = size;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var m = p[0] + p[1] + p[2] - s;\n            var q = (_d = 0.0, [_d, _d, _d]);\n            if (3.0 * p[0] < m)\n                q = (_e = p, [_e[0], _e[1], _e[2]]);\n            else if (3.0 * p[1] < m)\n                q = (_f = p, [_f[1], _f[2], _f[0]]);\n            else if (3.0 * p[2] < m)\n                q = (_g = p, [_g[2], _g[0], _g[1]]);\n            else\n                return m * 0.57735027;\n            var k = (0, std_math_1.clamp)(0.5 * (q[2] - q[1] + s), 0.0, s);\n            return (0, std_math_1.length)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.add(q[1] - s, k), __.sub(q[2], k)));\n        };\n        sdf.pyramid = function (samplePosition, pyramidCenter, height) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = pyramidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var m2 = h * h + 0.25;\n            var p2 = __.makeVector(Math.abs(p1[0]), p1[1], Math.abs(p1[2]));\n            if (p1[2] > p1[0]) {\n                p2 = __.makeVector(p2[2], p2[1], p2[0]);\n            }\n            p2 = __.makeVector(p2[0] - 0.5, p2[1], p2[2] - 0.5);\n            var p = p2;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'z'), __.sub(h * p[1], 0.5 * p[0]), __.add(h * p[0], 0.5 * p[1]));\n            var s = (0, std_math_1.max)((__.FM.negate_1(q[0])), 0.0);\n            var t = (0, std_math_1.clamp)((q[1] - 0.5 * p[2]) / (m2 + 0.25), 0.0, 1.0);\n            var a = m2 * (q[0] + s) * (q[0] + s) + q[1] * q[1];\n            var b = m2 * (q[0] + 0.5 * t) * (q[0] + 0.5 * t) + (q[1] - m2 * t) * (q[1] - m2 * t);\n            var d2 = (0, std_math_1.min)(q[1], (__.FM.negate_1(q[0])) * m2 - q[1] * 0.5) > 0.0 ? 0.0 : (0, std_math_1.min)(a, b);\n            return Math.sqrt((d2 + q[2] * q[2]) / m2) * Math.sign((0, std_math_1.max)(q[2], (__.FM.negate_1(p[1]))));\n        };\n        sdf.udTriangle = function (samplePosition, a, b, c) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var ac = (_j = a, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var nor = (0, std_math_1.cross)(ba, ac);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ac, nor), pc)) < 2.0) ? (0, std_math_1.min)((0, std_math_1.min)(dot3((_o = (_q = ba, _r = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_q[0] * _r, _q[1] * _r, _q[2] * _r]), _p = pa, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])), dot3((_s = (_u = cb, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pb, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]]))), dot3((_w = (_y = ac, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(ac, pc) / dot3(ac), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pc, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        sdf.udQuad = function (samplePosition, a, b, c, d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var dc = (_j = d, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var ad = (_o = a, _p = d, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]]);\n            var pd = (_q = p, _r = d, [_q[0] - _r[0], _q[1] - _r[1], _q[2] - _r[2]]);\n            var nor = (0, std_math_1.cross)(ba, ad);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(dc, nor), pc)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ad, nor), pd)) < 3.0) ? (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.min)(dot3((_s = (_u = ba, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pa, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]])), dot3((_w = (_y = cb, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pb, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))), dot3((_0 = (_2 = dc, _3 = (0, std_math_1.clamp)((0, std_math_1.dot)(dc, pc) / dot3(dc), 0.0, 1.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), _1 = pc, [_0[0] - _1[0], _0[1] - _1[1], _0[2] - _1[2]]))), dot3((_4 = (_6 = ad, _7 = (0, std_math_1.clamp)((0, std_math_1.dot)(ad, pd) / dot3(ad), 0.0, 1.0), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), _5 = pd, [_4[0] - _5[0], _4[1] - _5[1], _4[2] - _5[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        /**\n            * Returns the intersection of two SDFs\n            * = max(a, b)\n            */\n        sdf.intersect = function (a, b) { return (0, std_math_1.max)(a, b); };\n        /**\n            * Returns the union of two SDFs\n            * = min(a, b)\n            */\n        sdf.union = function (a, b) { return (0, std_math_1.min)(a, b); };\n        sdf.subtract = function (a, b) { return (0, std_math_1.max)((__.FM.negate_1(a)), b); };\n        sdf.smoothIntersect = function (a, b, k) {\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(b, a, h) - k * h * (1.0 - h);\n        };\n        /**\n            * Smoothly joins two SDFs using blending distance k\n            */\n        sdf.smoothUnion = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, d1, h) - k * h * (1.0 - h);\n        };\n        sdf.smoothSubtract = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, (__.FM.negate_1(d1)), h) + k * h * (1.0 - h);\n        };\n        /**\n            * Blends between two SDFs using interpolation\n            */\n        sdf.blend = function (a, b, t) { return t * a + ((1 | 0) - t) * b; };\n        sdf.round = function (a, r) { return a - r; };\n        /**\n            * Carve out the interior of an SDF\n            */\n        sdf.onion = function (a, thickness) { return Math.abs(a) - thickness; };\n        sdf.grad = function (p, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var DELTA = 0.0001;\n            return _a = __.FM.float_3_1_1_1(__.sub(sampler((_c = p, _d = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]])), sampler((_e = p, _f = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]))), __.sub(sampler((_g = p, _h = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]])), sampler((_j = p, _k = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]))), __.sub(sampler((_l = p, _m = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]])), sampler((_o = p, _p = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])))), _b = (2.0 * DELTA), [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        /**\n            * Poorly returns the closest point on the surface of an SDF\n            * This is an inaccurate method\n            */\n        sdf.closest = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n            var sep = 0.0001;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var closest = position;\n            var initialDist = sampler(position);\n            var seed = (0 | 0);\n            for (var j = (0 | 0); j < (200 | 0); j++) {\n                var n = (_a = 0.0, [_a, _a, _a]);\n                var distSum = 0.0;\n                for (var i = zero; i < (4 | 0); i++) {\n                    var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                    var d = sampler((_h = closest, _j = (_k = e, _l = sep, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                    distSum = distSum + d;\n                    n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n                }\n                closest = (_r = (_t = (_v = (_x = (0, std_math_1.normalize)(n), _y = distSum, [_x[0] * _y, _x[1] * _y, _x[2] * _y]), _w = (__.FM.negate_1((1 | 0))), [_v[0] * _w, _v[1] * _w, _v[2] * _w]), _u = 4.0, [_t[0] / _u, _t[1] / _u, _t[2] / _u]), _s = closest, [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2]]);\n                if (distSum < 0.0001) {\n                    break;\n                }\n            }\n            return closest;\n        };\n        sdf.normal = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var h = 0.1;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var n = (_a = 0.0, [_a, _a, _a]);\n            var distSum = 0.0;\n            for (var i = zero; i < (4 | 0); i++) {\n                var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                var d = sampler((_h = position, _j = (_k = e, _l = h, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                distSum = distSum + d;\n                n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n            }\n            return (0, std_math_1.normalize)(n);\n        };\n        sdf.vizRings = function (d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            if (false) {\n                var color_1 = (_a = 1.0, _b = (_c = Math.sign(d), _d = __.FM.float_3_1_1_1(__.float(0.1), __.float(0.4), __.float(0.7)), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]);\n                color_1 = (_e = color_1, _f = 1.0 - Math.exp((__.FM.negate_1(4.0)) * Math.abs(d)), [_e[0] * _f, _e[1] * _f, _e[2] * _f]);\n                color_1 = (_g = color_1, _h = 0.8 + 0.2 * Math.cos(140.0 * d), [_g[0] * _h, _g[1] * _h, _g[2] * _h]);\n                color_1 = (0, std_math_1.lerp)(color_1, (_j = 1.0, [_j, _j, _j]), 1.0 - (0, std_math_1.smoothstep)(0.0, 0.015, Math.abs(d)));\n                return __.makeVector(color_1, 1.0);\n            }\n            else {\n                var size = (2 | 0);\n                var fadeDist = (100 | 0);\n                var v = (1 | 0) - (0, std_math_1.clamp)(d / fadeDist, (0 | 0), (1 | 0));\n                var color_2 = __.makeVector(0.4 * v, 0.6 * v, (1 | 0), (1 | 0));\n                var s = Math.sin(d / size);\n                if (Math.abs(d) < (1 | 0)) {\n                    return __.FM.float_4_4(__.swizzle((1 | 0), \"xyzw\"));\n                }\n                else {\n                    return d > (0 | 0) ? (_k = color_2, _l = Math.ceil((1 | 0) - s), [_k[0] * _l, _k[1] * _l, _k[2] * _l, _k[3] * _l]) : (_m = color_2, _o = Math.ceil(s), [_m[0] * _o, _m[1] * _o, _m[2] * _o, _m[3] * _o]);\n                }\n            }\n        };\n        sdf.march = function (position, direction, sampler) {\n            var _a, _b, _c, _d;\n            var maxDist = 100000.0;\n            var minDist = 1.0;\n            var dist = minDist;\n            for (var i = (0 | 0); __.and(i < (256 | 0), dist < maxDist); i++) {\n                var samp = sampler((_a = position, _b = (_c = direction, _d = dist, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]));\n                dist = dist + samp;\n                if (Math.abs(samp) < (0.00005 * dist)) {\n                    break;\n                }\n            }\n            if (dist > maxDist) {\n                dist = (__.FM.negate_1(1.0));\n            }\n            return dist;\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Infinitely repeats an SDF with space in between. This returns an updated position\n            *\n            * Example:\n            * \\`\\`\\`shadeup\n            *\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\n            * \\`\\`\\`\n            */\n        sdf.repeat = function (position, space) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (_e = (_f = p, _g = s, [_f[0] / _g[0], _f[1] / _g[1], _f[2] / _g[2]]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), [_c[0] * _d[0], _c[1] * _d[1], _c[2] * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Repeats an SDF with space in between upto the limit. This returns an updated position\n            *\n            * Example:\n            * \\`\\`\\`shadeup\n            *\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\n            * \\`\\`\\`\n            */\n        sdf.repeatLimited = function (position, space, limit) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (0, std_math_1.clamp)((_e = (_f = p, _g = s, [_f[0] / _g, _f[1] / _g, _f[2] / _g]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), (__.FM.negate_3(limit)), limit), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        sdf.prototype.clone = function () {\n            return new sdf({});\n        };\n        sdf.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_sdf_ts_1953_sdf\\\\\",\\\\\"fields\\\\\":[]}\");\n        };\n        return sdf;\n    }());\n    exports.sdf = sdf;\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_sdf_ts_1953_sdf\\\\\",\\\\\"fields\\\\\":[]}\"), sdf)\n    ;\n    function dot2(v) { return (0, std_math_1.dot)(v, v); }\n    function dot3(v) { return (0, std_math_1.dot)(v, v); }\n    function ndot(a, b) { return a[0] * b[0] - a[1] * b[1]; }\n});\n/* impl sdf */\n`\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    },\n    \"/_std/geo.ts\": {\n      outputFiles: [\n        {\n          name: \"/_std/geo.js\",\n          writeByteOrderMark: false,\n          text: 'var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\\n}) : function(o, v) {\\n    o[\"default\"] = v;\\n});\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n    if (mod && mod.__esModule) return mod;\\n    var result = {};\\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\\n    __setModuleDefault(result, mod);\\n    return result;\\n};\\ndefine([\"require\", \"exports\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std___std_all_1) {\\n    \"use strict\";\\n    Object.defineProperty(exports, \"__esModule\", { value: true });\\n    __ = __importStar(__);\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n    var GeoSegment = /** @class */ (function () {\\n        function GeoSegment(data) {\\n            var _a, _b, _c, _d, _e, _f;\\n            this.start = ((_a = data.start) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(0.0, 0.0));\\n            this.end = ((_b = data.end) !== null && _b !== void 0 ? _b : __.FM.float_2_1_1(0.0, 0.0));\\n            this.kind = ((_c = data.kind) !== null && _c !== void 0 ? _c : (0 | 0));\\n            this.arcRadius = ((_d = data.arcRadius) !== null && _d !== void 0 ? _d : 0.0);\\n            this.arcStart = ((_e = data.arcStart) !== null && _e !== void 0 ? _e : 0.0);\\n            this.arcEnd = ((_f = data.arcEnd) !== null && _f !== void 0 ? _f : 0.0);\\n        }\\n        GeoSegment.prototype.clone = function () {\\n            return new GeoSegment({\\n                start: (0, std___std_all_1.__deepClone)(this.start),\\n                end: (0, std___std_all_1.__deepClone)(this.end),\\n                kind: (0, std___std_all_1.__deepClone)(this.kind),\\n                arcRadius: (0, std___std_all_1.__deepClone)(this.arcRadius),\\n                arcStart: (0, std___std_all_1.__deepClone)(this.arcStart),\\n                arcEnd: (0, std___std_all_1.__deepClone)(this.arcEnd),\\n            });\\n        };\\n        GeoSegment.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\");\\n        };\\n        return GeoSegment;\\n    }());\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]}\"), GeoSegment)\\n    /**@shadeup=struct*/ var GeoPoly = /** @class */ (function () {\\n        function GeoPoly(data) {\\n            var _a;\\n            this.segments = ((_a = data.segments) !== null && _a !== void 0 ? _a : []);\\n        }\\n        GeoPoly.prototype.area = function () { return 0.0; };\\n        GeoPoly.prototype.perimeter = function () { return 0.0; };\\n        GeoPoly.prototype.discretize = function () { var shader_self_temp = this; return this.clone(); };\\n        GeoPoly.prototype.clone = function () {\\n            return new GeoPoly({\\n                segments: (0, std___std_all_1.__deepClone)(this.segments),\\n            });\\n        };\\n        GeoPoly.prototype._getStructure = function () {\\n            return JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\\\",\\\\\"fields\\\\\":[[\\\\\"segments\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\");\\n        };\\n        return GeoPoly;\\n    }());\\n    __shadeup_register_struct(JSON.parse(\"{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\\\",\\\\\"fields\\\\\":[[\\\\\"segments\\\\\",{\\\\\"type\\\\\":\\\\\"array\\\\\",\\\\\"element\\\\\":{\\\\\"type\\\\\":\\\\\"struct\\\\\",\\\\\"name\\\\\":\\\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\\\",\\\\\"fields\\\\\":[[\\\\\"start\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"end\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float2\\\\\"}],[\\\\\"kind\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"int\\\\\"}],[\\\\\"arcRadius\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcStart\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}],[\\\\\"arcEnd\\\\\",{\\\\\"type\\\\\":\\\\\"primitive\\\\\",\\\\\"name\\\\\":\\\\\"float\\\\\"}]]},\\\\\"staticSize\\\\\":1}]]}\"), GeoPoly)\\n});\\n/* impl GeoPoly */\\n'\n        }\n      ],\n      emitSkipped: false,\n      diagnostics: []\n    }\n  };\n  function countLines(str) {\n    let count2 = 0;\n    for (let i = 0; i < str.length; i++) {\n      if (str[i] === \"\\n\") {\n        count2++;\n      }\n    }\n    return count2;\n  }\n  function indexToRowColumn(str, index) {\n    let row = 0;\n    let column = 0;\n    for (let i = 0; i < index; i++) {\n      if (str[i] === \"\\n\") {\n        row++;\n        column = 0;\n      } else {\n        column++;\n      }\n    }\n    return { row, column };\n  }\n  function rowColumnToIndex(str, row, column) {\n    let index = 0;\n    let currentRow = 0;\n    let currentColumn = 0;\n    while (currentRow < row || currentColumn < column) {\n      if (str[index] === \"\\n\") {\n        currentRow++;\n        currentColumn = 0;\n      } else {\n        currentColumn++;\n      }\n      index++;\n    }\n    return index;\n  }\n  function getDiffRange(a, b) {\n    let diffs = diff(a, b);\n    if (diffs.length === 1) {\n      return null;\n    }\n    let startIndex = 0;\n    let oldEndIndex = a.length;\n    let newEndIndex = b.length;\n    let insertions = 0;\n    let deletions = 0;\n    let neutrals = 0;\n    for (let i = 0; i < diffs.length; i++) {\n      let diff2 = diffs[i];\n      if (diff2[0] === 1) {\n        insertions++;\n      } else if (diff2[0] === -1) {\n        deletions++;\n      } else if (diff2[0] === 0) {\n        neutrals++;\n      }\n      if (insertions > 1 || deletions > 1 || neutrals > 1) {\n        return null;\n      }\n    }\n    for (let i = 0; i < diffs.length; i++) {\n      let diff2 = diffs[i];\n      if (diff2[0] === 0) {\n        startIndex += diff2[1].length;\n      } else if (diff2[0] === -1) {\n        oldEndIndex = startIndex + diff2[1].length;\n        newEndIndex = startIndex;\n        break;\n      } else if (diff2[0] === 1) {\n        newEndIndex = startIndex + diff2[1].length;\n        oldEndIndex = startIndex;\n        break;\n      }\n    }\n    return {\n      startIndex,\n      oldEndIndex,\n      newEndIndex,\n      startPosition: indexToRowColumn(a, startIndex),\n      oldEndPosition: indexToRowColumn(a, oldEndIndex),\n      newEndPosition: indexToRowColumn(b, newEndIndex)\n    };\n  }\n  function getReplaceRange(a, b) {\n    let diffs = diff(a, b);\n    if (diffs.length === 1) {\n      return {\n        content: b,\n        range: {\n          start: 0,\n          length: a.length\n        }\n      };\n    }\n    let insertions = 0;\n    let deletions = 0;\n    let neutrals = 0;\n    for (let i = 0; i < diffs.length; i++) {\n      let diff2 = diffs[i];\n      if (diff2[0] === 1) {\n        insertions++;\n      } else if (diff2[0] === -1) {\n        deletions++;\n      } else if (diff2[0] === 0) {\n        neutrals++;\n      }\n      if (insertions > 1 || deletions > 1 || neutrals > 1) {\n        return {\n          content: b,\n          range: {\n            start: 0,\n            length: a.length\n          }\n        };\n      }\n    }\n    let startIndex = 0;\n    let oldEndIndex = a.length;\n    let newEndIndex = b.length;\n    for (let i = 0; i < diffs.length; i++) {\n      let diff2 = diffs[i];\n      if (diff2[0] === 0) {\n        startIndex += diff2[1].length;\n      } else if (diff2[0] === -1) {\n        oldEndIndex = startIndex + diff2[1].length;\n        newEndIndex = startIndex;\n      } else if (diff2[0] === 1) {\n        newEndIndex = startIndex + diff2[1].length;\n        break;\n      }\n    }\n    return {\n      content: b.substring(startIndex, newEndIndex),\n      range: {\n        start: startIndex,\n        length: oldEndIndex - startIndex\n      }\n    };\n  }\n  function getFunctionNodeName(node2, sourceFile) {\n    if (!sourceFile) {\n      sourceFile = node2.getSourceFile();\n    }\n    if (ts.isMethodDeclaration(node2)) {\n      let parentName = node2.parent && ts.isClassDeclaration(node2.parent) ? node2.parent.name?.getText() : \"not_class\";\n      return sourceFile.fileName + \":\" + parentName + \":\" + node2.name?.getText();\n    }\n    return sourceFile.fileName + \":\" + node2.name?.getText();\n  }\n  function canTypesBeCasted(a, b) {\n    if (a === b) {\n      return true;\n    }\n    if (a.startsWith(\"float\") && b.startsWith(\"int\") || a.startsWith(\"int\") && b.startsWith(\"float\")) {\n      let aSize = parseInt(a[a.length - 1]);\n      let bSize = parseInt(b[b.length - 1]);\n      if (aSize == bSize) {\n        return true;\n      }\n    }\n    return false;\n  }\n  class ShadeupEnvironment {\n    constructor(opts) {\n      this.files = [];\n      this.parser = null;\n      this.tsEnv = null;\n      this.loads = /* @__PURE__ */ new Map();\n      this.libraries = /* @__PURE__ */ new Set();\n      this.assetMappings = /* @__PURE__ */ new Map();\n      this.validationDiagnostics = /* @__PURE__ */ new Map();\n      this.graphValidationDiagnostics = /* @__PURE__ */ new Map();\n      this.options = {\n        esnext: false\n      };\n      this.emitLogs = true;\n      this.stdEmitCache = /* @__PURE__ */ new Map();\n      if (opts) {\n        this.options = opts;\n      }\n    }\n    async init() {\n      this.parser = await getShadeupParser();\n      this.tsEnv = await makeTypescriptEnvironment(this);\n      {\n        for (let k of Object.keys(quickCache)) {\n          this.stdEmitCache.set(k, quickCache[k]);\n        }\n      }\n    }\n    setAssetMapping(assets) {\n      console.log(\"Set asset mapping\", assets);\n      this.assetMappings = new Map(assets);\n    }\n    print(...args) {\n      if (this.emitLogs) {\n        console.log(...args);\n      }\n    }\n    reset() {\n      this.tagGraph = new TagGraph();\n      for (let f of this.files) {\n        if (f.path == \"/file.ts\" || f.path.startsWith(\"/_std/\"))\n          continue;\n        this.tsEnv.system.$fsMap.delete(f.path);\n      }\n      this.files = [];\n      this.validationDiagnostics.clear();\n      this.graphValidationDiagnostics.clear();\n    }\n    /**\n     * Wipes out the tagGraph and rebuilds all  and tags\n     */\n    applyTags() {\n      let checker = this.tsEnv?.env.languageService.getProgram().getTypeChecker();\n      let files2 = this.tsEnv.env.languageService.getProgram().getSourceFiles();\n      this.tagGraph = new TagGraph();\n      for (let file of files2) {\n        ts.forEachChild(file, (node2) => {\n          if (ts.isFunctionDeclaration(node2) || ts.isMethodDeclaration(node2)) {\n            let name = getFunctionNodeName(node2);\n            this.tagGraph.addNode(name, node2);\n            let tags = findShadeupTags(node2);\n            for (let tag of tags) {\n              this.tagGraph.addTag(name, tag);\n            }\n          }\n          if (ts.isClassDeclaration(node2)) {\n            ts.forEachChild(node2, (child) => {\n              if (ts.isMethodDeclaration(child)) {\n                let name = getFunctionNodeName(child);\n                this.tagGraph.addNode(name, child);\n                let tags = findShadeupTags(child);\n                for (let tag of tags) {\n                  this.tagGraph.addTag(name, tag);\n                }\n              }\n            });\n          }\n        });\n      }\n      const visitNode = (node2) => {\n        if (ts.isCallExpression(node2)) {\n          let exprSmybol = checker.getSymbolAtLocation(node2.expression);\n          if (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n            exprSmybol = checker.getAliasedSymbol(exprSmybol);\n          }\n          if (exprSmybol) {\n            let funcDeclar = exprSmybol.getDeclarations()?.[0];\n            if (funcDeclar && (ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))) {\n              let referencedFunctionName = getFunctionNodeName(funcDeclar);\n              let callingFunction = closest(\n                node2,\n                (n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n)\n              );\n              if (callingFunction && (ts.isFunctionDeclaration(callingFunction) || ts.isMethodDeclaration(callingFunction))) {\n                let callingFunctionName = getFunctionNodeName(callingFunction);\n                this.tagGraph.addEdge(referencedFunctionName, callingFunctionName);\n              }\n            }\n          }\n        }\n        ts.forEachChild(node2, visitNode);\n      };\n      for (let file of files2) {\n        ts.forEachChild(file, (node2) => {\n          if (ts.isFunctionDeclaration(node2) || ts.isMethodDeclaration(node2)) {\n            ts.forEachChild(node2, visitNode);\n          }\n          if (ts.isClassDeclaration(node2)) {\n            ts.forEachChild(node2, (child) => {\n              if (ts.isMethodDeclaration(child)) {\n                ts.forEachChild(child, visitNode);\n              }\n            });\n          }\n        });\n      }\n      this.tagGraph.propagateTags();\n    }\n    async regenerate(filePath) {\n      if (!this.tsEnv) {\n        throw new Error(\"Typescript environment not initialized\");\n      }\n      let addedFiles = /* @__PURE__ */ new Set();\n      this.graphValidationDiagnostics.clear();\n      let now = performance.now();\n      let outputs = [];\n      this.applyTags();\n      this.print(\"Tagged in \", performance.now() - now, \"ms\");\n      now = performance.now();\n      let checker = this.tsEnv.env.languageService.getProgram().getTypeChecker();\n      const addFile = (path) => {\n        if (this.stdEmitCache.has(path)) {\n          outputs.push(this.stdEmitCache.get(path));\n          return;\n        }\n        if (addedFiles.has(path)) {\n          return;\n        }\n        console.log(\"Adding file \", path);\n        addedFiles.add(path);\n        let sourceFile = this.files.find((f) => f.path === path);\n        let shaders = this.renderShaders(path);\n        if (sourceFile) {\n          sourceFile.shaders = shaders;\n        }\n        let out = this.tsEnv?.env.languageService.getEmitOutput(path);\n        if (out) {\n          let sf = this.tsEnv.env.getSourceFile(path);\n          if (sourceFile) {\n            this.graphValidationDiagnostics.set(path, validateGraph(this, sourceFile, sf, checker));\n            let outputCode = this.mixInShaders(sourceFile, out?.outputFiles[0].text);\n            out.outputFiles[0].text = outputCode;\n          }\n          if (sf) {\n            out.outputFiles[0].text = this.mixInStructs(sf, out.outputFiles[0].text);\n          }\n          if (this.loads.has(path)) {\n            let jsOut = `__shadeup_register_loads(${JSON.stringify(\n              this.loads.get(path).map((p) => {\n                return this.assetMappings.get(p) || p;\n              })\n            )});`;\n            out.outputFiles[0].text = jsOut + out.outputFiles[0].text;\n          }\n          if (this.libraries.size > 0) {\n            let jsOut = `__shadeup_register_libs(${JSON.stringify(Array.from(this.libraries))});`;\n            out.outputFiles[0].text = jsOut + out.outputFiles[0].text;\n          }\n          if (path.startsWith(\"/_std/\") || path == \"/file.ts\" || path == \"/std_math.ts\" || path == \"/static-math.ts\" || path == \"/std___std_all.ts\" || path == \"/std.ts\") {\n            this.stdEmitCache.set(path, out);\n          }\n          outputs.push(out);\n        }\n      };\n      const addDir = (path) => {\n        let files2 = this.tsEnv?.system.readDirectory(path);\n        if (files2) {\n          for (let f of files2) {\n            let dirExists = this.tsEnv?.system.directoryExists(path + f);\n            if (dirExists) {\n              addDir(path + f.replace(/^\\//, \"\") + \"/\");\n            } else {\n              if (f.endsWith(\".d.ts\"))\n                continue;\n              let p = path + f.replace(/^\\//, \"\");\n              try {\n                addFile(p);\n              } catch (e) {\n                console.error(e);\n              }\n            }\n          }\n        }\n      };\n      if (filePath) {\n        await Promise.all(\n          filePath.map(async (f) => {\n            let sourceFile = this.tsEnv.env.getSourceFile(f);\n            if (sourceFile) {\n              let refs = this.tsEnv.env.languageService.getFileReferences(f);\n              for (let dep of refs) {\n                let shadeupFile = this.files.find((f2) => f2.path === dep.fileName);\n                if (shadeupFile) {\n                  await this.writeFile(\n                    shadeupFile.path,\n                    shadeupFile.content,\n                    this.stdEmitCache.has(shadeupFile.path)\n                  );\n                  try {\n                    addFile(dep.fileName);\n                  } catch (e) {\n                    console.error(e);\n                  }\n                }\n              }\n              try {\n                addFile(f);\n              } catch (e) {\n                console.error(e);\n              }\n            }\n          })\n        );\n      } else {\n        addDir(\"/\");\n      }\n      let s = outputs.map(\n        (o) => o.outputFiles.map((oo) => ({\n          path: oo.name,\n          contents: oo.text\n        }))\n      ).flat();\n      this.print(\"Regenerated in\", performance.now() - now, \"ms\");\n      return s;\n    }\n    mixInShaders(file, code) {\n      let finalPass = code;\n      for (let pair of file.shaders) {\n        let shader = pair.glsl;\n        let params = [];\n        let paramsTyped = [];\n        for (let param of Object.keys(shader.locals)) {\n          let u = shader.locals[param];\n          params.push(`_ext_uniform_local_${param}: ${param}`);\n          paramsTyped.push(`_ext_uniform_local_${param}: ${JSON.stringify(u)}`);\n        }\n        for (let param of Object.keys(shader.globals)) {\n          let u = shader.globals[param];\n          params.push(\n            `_ext_uniform_global_${param}: globalVarGet(\"${cleanName(u.fileName)}\", \"${param}\")`\n          );\n          paramsTyped.push(`_ext_uniform_global_${param}: ${JSON.stringify(u.structure)}`);\n        }\n        finalPass = `__shadeup_gen_shader(\"${shader.key}\", {\n\t\t\t\t\twebgl: {${paramsTyped.join(\", \")}},\n\t\t\t\t\twebgpu: ${JSON.stringify({\n          attributeInput: pair.wgsl.attributeInput,\n          attributeOutput: pair.wgsl.attributeOutput,\n          locals: pair.wgsl.locals,\n          globals: pair.wgsl.globals\n        })}\n\t\t\t\t}, {webgpu: \\`${pair.wgsl.source}\\`,webgl:\\`${pair.glsl.source}\\`, software: () => {}}, ${JSON.stringify(shader.sourceMapping)});\n\n` + finalPass;\n      }\n      if (file.path === \"/main.ts\") {\n        this.print(\"Final pass\", finalPass);\n      }\n      return finalPass;\n    }\n    mixInStructs(root, code) {\n      let finalPass = code;\n      let structs = [];\n      walkNodes(root, (node2) => {\n        if (ts.isClassDeclaration(node2)) {\n          if (hasShadeupDocTag(node2, \"struct\")) {\n            let structName = node2.name?.getText() ?? \"Unknown\";\n            let struct = {\n              name: structName,\n              fields: []\n            };\n            for (let member of node2.members) {\n              if (ts.isPropertyDeclaration(member)) {\n                let name = member.name.getText();\n                let type2 = member.type?.getText() ?? \"any\";\n                struct.fields.push({\n                  name,\n                  type: type2\n                });\n              }\n            }\n            structs.push(struct);\n          }\n        }\n      });\n      let sBlocks = [];\n      for (let struct of structs) {\n        sBlocks.push(\n          `__shadeup_register_struct(\"${struct.name}\", {${JSON.stringify(struct.fields)}});`\n        );\n      }\n      return finalPass;\n    }\n    errors(files2) {\n      if (!this.tsEnv) {\n        throw new Error(\"Typescript environment not initialized\");\n      }\n      let now = performance.now();\n      let all2 = [];\n      for (let f of this.files) {\n        if (files2) {\n          if (!files2.includes(f.path)) {\n            continue;\n          }\n        }\n        let errors2 = this.tsEnv.env.languageService.getSemanticDiagnostics(f.path);\n        let syntacticErrors = this.tsEnv.env.languageService.getSyntacticDiagnostics(f.path);\n        all2.push(\n          ...[...errors2, ...syntacticErrors].filter((e) => {\n            if (e.code == 2345) {\n              let parsed = /Argument of type '(.*)' is not assignable to parameter of type '(.*).*'/.exec(\n                typeof e.messageText == \"string\" ? e.messageText : e.messageText.messageText\n              );\n              if (parsed) {\n                let [_, from, to] = parsed;\n                if (canTypesBeCasted(from, to)) {\n                  return false;\n                }\n              }\n            } else if (e.code == 2339) {\n              let msgText = typeof e.messageText == \"string\" ? e.messageText : e.messageText.messageText;\n              if (msgText.startsWith(\"Property '__index' does not exist on type '\")) {\n                return false;\n              }\n            } else if (e.code == 2705) {\n              let msgText = typeof e.messageText == \"string\" ? e.messageText : e.messageText.messageText;\n              if (msgText.startsWith(\n                \"An async function or method in ES5/ES3 requires the 'Promise' constructor.\"\n              )) {\n                return false;\n              }\n            }\n            return true;\n          }).map((e) => this.transformTSError(f, e))\n        );\n        let validationDiagnostics = this.validationDiagnostics.get(f.path) ?? [];\n        all2.push(...validationDiagnostics.map((e) => this.transformTSError(f, e)));\n        let graphValidationDiagnostics = this.graphValidationDiagnostics.get(f.path) ?? [];\n        all2.push(...graphValidationDiagnostics.map((e) => this.transformTSError(f, e)));\n      }\n      this.print(\"Got errors in\", performance.now() - now, \"ms\");\n      return all2;\n    }\n    completions(path, pos) {\n      if (!this.tsEnv) {\n        throw new Error(\"Typescript environment not initialized\");\n      }\n      let file = this.files.find((f) => f.path === path);\n      if (!file) {\n        throw new Error(\"File not found\");\n      }\n      let source = file.transpiled;\n      indexToRowColumn(source, pos);\n      let backTransform = reverseLookupIndexMappingCursor(file.mapping, pos);\n      let fp = this.tsEnv.env.getSourceFile(path);\n      console.log(fp.getFullText());\n      console.log(\n        fp.getFullText().substring(0, backTransform) + \"^\" + fp.getFullText().substring(backTransform)\n      );\n      let completions = this.tsEnv.env.languageService.getCompletionsAtPosition(\n        path,\n        backTransform,\n        {\n          includeExternalModuleExports: true,\n          includeInsertTextCompletions: true,\n          includeCompletionsForModuleExports: true,\n          includeCompletionsWithInsertText: true,\n          includeInlayVariableTypeHints: true,\n          includeCompletionsWithClassMemberSnippets: true,\n          includeCompletionsWithSnippetText: true,\n          includeAutomaticOptionalChainCompletions: true,\n          includeCompletionsForImportStatements: true,\n          useLabelDetailsInCompletionEntries: true,\n          includeInlayPropertyDeclarationTypeHints: true\n        },\n        {}\n      );\n      if (!completions) {\n        return [];\n      }\n      let entries = [];\n      let maxCompletions = 100;\n      for (let c2 of completions.entries) {\n        if (entries.length >= maxCompletions) {\n          break;\n        }\n        let range2 = null;\n        if (c2.replacementSpan) {\n          let startOffset = c2.replacementSpan.start;\n          let endOffset = c2.replacementSpan.start + c2.replacementSpan.length;\n          let offsetRangeReal = lookupIndexMappingRange(file.mapping, startOffset, endOffset);\n          let start = indexToRowColumn(file.content, offsetRangeReal.start);\n          let end = indexToRowColumn(file.content, offsetRangeReal.end);\n          range2 = {\n            startLineNumber: start.row + 1,\n            startColumn: start.column + 1,\n            endLineNumber: end.row + 1,\n            endColumn: end.column + 1\n          };\n        }\n        entries.push({\n          range: range2,\n          completion: c2,\n          details: this.tsEnv.env.languageService.getCompletionEntryDetails(\n            path,\n            backTransform,\n            c2.name,\n            {},\n            c2.source,\n            {},\n            c2.data\n          )\n        });\n      }\n      console.log(entries);\n      return entries;\n    }\n    classifications(path) {\n      if (!this.tsEnv) {\n        throw new Error(\"Typescript environment not initialized\");\n      }\n      let file = this.files.find((f) => f.path === path);\n      if (!file) {\n        throw new Error(\"File not found\");\n      }\n      this.tsEnv.env.getSourceFile(path);\n      this.tsEnv.env.languageService.getProgram().getTypeChecker();\n      let ranges = [];\n      for (let symbolRange of file.parsedFlatSymbolMap) {\n        let offsetRangeReal = reverseLookupIndexMappingRange(\n          file.mapping,\n          symbolRange.startIndex,\n          symbolRange.endIndex\n        );\n        if (offsetRangeReal.start != 0 && offsetRangeReal.end < file.transpiled.length - 1 && isFinite(offsetRangeReal.start) && isFinite(offsetRangeReal.end)) {\n          let info = this.tsEnv.env.languageService.getQuickInfoAtPosition(\n            path,\n            offsetRangeReal.start\n          );\n          if (info) {\n            let backRange = lookupIndexMappingRange(\n              file.mapping,\n              info.textSpan.start,\n              info.textSpan.start + info.textSpan.length\n            );\n            let kind = info.kind;\n            const funcMatch = /^\\(alias\\)\\s+[^(]+\\(/i;\n            if (kind == \"alias\") {\n              let fullStr = \"\";\n              let isNew = false;\n              for (let p of info.displayParts) {\n                fullStr += p.text;\n                if (p.kind == \"keyword\" && (p.text == \"class\" || p.text == \"new\")) {\n                  kind = ts.ScriptElementKind.classElement;\n                  if (p.text == \"new\") {\n                    isNew = true;\n                  }\n                }\n                if (p.kind == \"keyword\" && p.text == \"namespace\") {\n                  kind = ts.ScriptElementKind.classElement;\n                }\n                if (p.kind == \"keyword\" && p.text == \"type\") {\n                  kind = ts.ScriptElementKind.classElement;\n                }\n              }\n              if (!isNew && funcMatch.test(fullStr)) {\n                kind = ts.ScriptElementKind.functionElement;\n              }\n            }\n            ranges.push([backRange.start, backRange.end, kind]);\n          }\n        }\n      }\n      return {\n        ranges\n      };\n    }\n    hover(path, pos) {\n      if (!this.tsEnv) {\n        throw new Error(\"Typescript environment not initialized\");\n      }\n      let file = this.files.find((f) => f.path === path);\n      if (!file) {\n        throw new Error(\"File not found\");\n      }\n      let source = file.transpiled;\n      indexToRowColumn(source, pos);\n      let backTransform = reverseLookupIndexMappingCursor(file.mapping, pos);\n      this.tsEnv.env.getSourceFile(path);\n      let hovers = this.tsEnv.env.languageService.getQuickInfoAtPosition(path, backTransform);\n      if (!hovers) {\n        return null;\n      }\n      let startOffset = hovers.textSpan.start;\n      let endOffset = hovers.textSpan.start + hovers.textSpan.length;\n      let offsetRangeReal = lookupIndexMappingRange(file.mapping, startOffset, endOffset);\n      let start = indexToRowColumn(file.content, offsetRangeReal.start);\n      let end = indexToRowColumn(file.content, offsetRangeReal.end);\n      hovers.range = {\n        startLineNumber: start.row + 1,\n        startColumn: start.column + 1,\n        endLineNumber: end.row + 1,\n        endColumn: end.column + 1\n      };\n      return hovers;\n    }\n    getFileErrorData(f, estart, eend) {\n      let file = this.files.find((f2) => f2.path === f.path);\n      if (!file) {\n        return {\n          file: f,\n          source: f.getFullText(),\n          start: estart,\n          end: eend\n        };\n      }\n      let start = indexToRowColumn(file.transpiled, estart ?? 0);\n      let realStart = file.map?.originalPositionFor({ column: start.column, line: start.row + 1 });\n      let end = indexToRowColumn(file.transpiled, eend);\n      let realEnd = file.map?.originalPositionFor({ column: end.column, line: end.row + 1 });\n      let startIndex = realStart?.line && realStart?.column ? rowColumnToIndex(file.content, realStart?.line, realStart?.column) : 0;\n      let endIndex = realEnd?.line && realEnd?.column ? rowColumnToIndex(file.content, realEnd?.line, realEnd?.column) : 0;\n      startIndex = lookupIndexMapping(file.mapping, estart ?? 0);\n      endIndex = lookupIndexMapping(file.mapping, eend);\n      let o = lookupIndexMappingRange(file.mapping, estart ?? 0, eend);\n      startIndex = o.start;\n      endIndex = o.end;\n      return {\n        file,\n        source: file.content,\n        start: startIndex,\n        end: endIndex\n      };\n    }\n    transformTSError(file, error) {\n      if (error.file === void 0) {\n        return {\n          error,\n          file: file.path,\n          message: error.messageText.toString()\n        };\n      }\n      const printReal = true;\n      let { source, start, end } = this.getFileErrorData(\n        error.file,\n        error.start ?? 0,\n        (error.start ?? 0) + (error.length ?? 0)\n      );\n      {\n        start = error.start ?? 0;\n        end = (error.start ?? 0) + (error.length ?? 0);\n      }\n      let categorymapping = {\n        [ts.DiagnosticCategory.Error]: ReportKind.Error,\n        [ts.DiagnosticCategory.Warning]: ReportKind.Warning,\n        [ts.DiagnosticCategory.Message]: ReportKind.Advice,\n        [ts.DiagnosticCategory.Suggestion]: ReportKind.Advice\n      };\n      let r = Report.build(categorymapping[error.category], file.path, start).with_code(error.code);\n      if (typeof error.messageText === \"string\") {\n        r = r.with_message(error.messageText);\n      }\n      function addMessage(msgObj) {\n        if (typeof msgObj === \"string\") {\n          r = r.with_label(\n            Label.from([file.path, Range.new(start, Math.max(start, end))]).with_message(msgObj)\n          );\n        } else {\n          r = r.with_label(\n            Label.from([file.path, Range.new(start, Math.max(start, end))]).with_message(\n              nicerError(msgObj)\n            )\n          );\n          for (let d of msgObj.next ?? []) {\n            addMessage(d);\n          }\n        }\n      }\n      if (typeof error.messageText === \"string\") {\n        addMessage(nicerError(error));\n      } else {\n        addMessage(error.messageText);\n      }\n      for (let d of error.relatedInformation ?? []) {\n        let relatedRange = { start: d.start ?? 0, end: (d.start ?? 0) + (d.length ?? 0) };\n        if (typeof d.messageText === \"string\") {\n          r.with_label(\n            Label.from([\n              file.path,\n              Range.new(relatedRange.start, Math.max(relatedRange.start, relatedRange.end))\n            ]).with_message(nicerError(d))\n          );\n        } else {\n          for (let d2 of d.messageText.next ?? []) {\n            addMessage(d2);\n          }\n        }\n      }\n      let rf = r.finish();\n      let writer = mkStringWriter();\n      try {\n        rf.printTo(\n          [file.path, Source.from(printReal ? error.file.text : source)],\n          writer\n        );\n      } catch (e) {\n        this.print(e);\n      }\n      let ansi_up2 = new AnsiUp();\n      let msg = writer.unwrap();\n      if (typeof process === \"undefined\" || typeof process.stdout === \"undefined\") {\n        msg = ansi_up2.ansi_to_html(msg);\n      }\n      return {\n        error,\n        file: file.path,\n        message: msg\n      };\n    }\n    async translateSource(file, range2 = null) {\n      if (!this.parser) {\n        throw new Error(\"Parser not initialized\");\n      }\n      let now = performance.now();\n      if (range2)\n        file.oldTree?.edit(range2);\n      let f = this.parser.parse(file.content, range2 ? file.oldTree ?? void 0 : void 0);\n      if (file.oldTree) {\n        let nowTree = performance.now();\n        file.oldTree.getChangedRanges(f);\n        this.print(\"Got edited range in\", performance.now() - nowTree, \"ms\");\n      }\n      this.print(\"Parsed in\", performance.now() - now, \"ms\");\n      file.oldTree = f;\n      file.parsedFlatSymbolMap = this.extractFlatSymbolMap(f.rootNode);\n      now = performance.now();\n      try {\n        let ctx = new AstContext(\"file:///\" + file.path);\n        prePass(ctx, f.rootNode);\n        let compiled = compile(ctx, f.rootNode);\n        file.parseDiagnostics = ctx.diagnostics.map((d) => ({\n          message: d.message,\n          startIndex: d.node.startIndex,\n          endIndex: d.node.endIndex\n        }));\n        this.print(\"Compiled in\", performance.now() - now, \"ms\");\n        now = performance.now();\n        let ss = {\n          str: \"\",\n          indexMapping: []\n        };\n        compiled.toString(ss);\n        this.print(\"Rendered with source map in \", performance.now() - now, \"ms\");\n        this.print(\"---- Translated ----\");\n        file.transpiled = ss.str;\n        now = performance.now();\n        file.mapping = ss.indexMapping;\n        this.print(\"Created source map consumer in\", performance.now() - now, \"ms\");\n      } catch (e) {\n        console.error(\"Error while compiling\", e);\n        this.print(f.rootNode.toString());\n      }\n    }\n    extractFlatSymbolMap(rootNode) {\n      let symbols = [];\n      let stack = [rootNode];\n      while (stack.length > 0) {\n        let node2 = stack.pop();\n        if (node2.type === \"identifier\" || node2.type === \"property_identifier\" || node2.type === \"type_identifier\") {\n          symbols.push({\n            startIndex: node2.startIndex,\n            endIndex: node2.endIndex\n          });\n        }\n        for (let c2 of node2.children) {\n          stack.push(c2);\n        }\n      }\n      return symbols;\n    }\n    async writeFile(path, content, ignoreValidate = false) {\n      if (!ignoreValidate)\n        console.log(\"Writing\", path);\n      let now = performance.now();\n      let file = this.files.find((f) => f.path === path);\n      let oldContent = \"\";\n      if (!file) {\n        this.files.push({\n          path,\n          content,\n          transpiled: \"\",\n          shaders: [],\n          map: null,\n          oldTree: null,\n          mapping: [],\n          parseDiagnostics: [],\n          parsedFlatSymbolMap: []\n        });\n        file = this.files[this.files.length - 1];\n      } else {\n        oldContent = file.content;\n        file.content = content;\n      }\n      let nowDiff = performance.now();\n      let r = getDiffRange(oldContent, content);\n      this.print(\n        \"Source code diff took\",\n        performance.now() - nowDiff,\n        \"ms\",\n        \"with\",\n        countLines(content),\n        \"lines\"\n      );\n      let getNow = performance.now();\n      this.print(\"Get source file took\", performance.now() - getNow, \"ms\");\n      await this.translateSource(file, r);\n      let sf = this.tsEnv?.env.getSourceFile(path);\n      if (sf) {\n        nowDiff = performance.now();\n        let r2 = getReplaceRange(sf.text, file.transpiled);\n        this.print(\n          \"TypeScript code diff took\",\n          performance.now() - nowDiff,\n          \"ms\",\n          \"with\",\n          countLines(sf.text),\n          \"lines\"\n        );\n        let updateNow = performance.now();\n        this.print(\"Replacing\", r2.range, \"with\", r2.content.length, \"chars\");\n        this.tsEnv?.env.updateFile(path, r2.content, r2.range);\n        this.print(\"Update took\", performance.now() - updateNow, \"ms\");\n        let finalText = this.tsEnv.env.getSourceFile(path)?.text;\n        if (finalText !== file.transpiled) {\n          console.error(\"Final text does not match transpiled text\");\n        }\n      } else {\n        this.tsEnv?.env.createFile(path, file.transpiled);\n      }\n      this.print(\"---- Took\", performance.now() - now, \"ms ----\");\n      this.print(\"\");\n      if (!ignoreValidate) {\n        let sourceFile = this.tsEnv?.env.getSourceFile(path);\n        if (sourceFile) {\n          let program = this.tsEnv?.env.languageService.getProgram();\n          let checker = program?.getTypeChecker();\n          if (checker) {\n            this.validationDiagnostics.set(path, validate(file, sourceFile, checker));\n          }\n        }\n      }\n    }\n    async writeFileTypescript(path, content) {\n      this.print(\"Writing\", path);\n      let now = performance.now();\n      let sf = this.tsEnv?.env.getSourceFile(path);\n      if (sf) {\n        let nowDiff = performance.now();\n        let r = getReplaceRange(sf.text, content);\n        this.print(sf.text.substring(r.range.start, r.range.start + r.range.length), r.content);\n        this.print(\n          \"TypeScript code diff took\",\n          performance.now() - nowDiff,\n          \"ms\",\n          \"with\",\n          countLines(sf.text),\n          \"lines\"\n        );\n        let updateNow = performance.now();\n        this.print(\"Replacing\", r.range, \"with\", r.content.length, \"chars\");\n        this.tsEnv?.env.updateFile(path, r.content, r.range);\n        this.print(\"Update took\", performance.now() - updateNow, \"ms\");\n        let finalText = this.tsEnv.env.getSourceFile(path)?.text;\n        this.print(finalText);\n        if (finalText !== content) {\n          console.error(\"Final text does not match input text\");\n        }\n      } else {\n        this.tsEnv?.env.createFile(path, content);\n      }\n      this.print(\"---- Took\", performance.now() - now, \"ms ----\");\n      this.print(\"\");\n    }\n    addDiagnostic(path, diagnostic) {\n      if (!this.validationDiagnostics.has(path)) {\n        this.validationDiagnostics.set(path, []);\n      }\n      this.validationDiagnostics.get(path)?.push(diagnostic);\n    }\n    printNodeLocation(n) {\n      let sf = n.getSourceFile();\n      let file = this.files.find((f) => f.path === sf.fileName);\n      if (!file) {\n        return \"internal\";\n      } else {\n        let mapping = lookupIndexMappingRange(file.mapping, n.getStart(), n.getEnd());\n        let loc = indexToRowColumn(file.content, mapping.start);\n        return `${sf.fileName}:${loc.row + 1}:${loc.column + 1}`;\n      }\n    }\n    renderShaders(path) {\n      let shaders = [];\n      this.tsEnv?.env.getSourceFile(path);\n      let program = this.tsEnv?.env.languageService.getProgram();\n      if (!program) {\n        return [];\n      }\n      let checker = program?.getTypeChecker();\n      if (!checker) {\n        return [];\n      }\n      for (let sourceFile of program?.getSourceFiles() ?? []) {\n        if (sourceFile.fileName === path) {\n          walkNodes(sourceFile, (node2) => {\n            if (ts.isCallExpression(node2) && node2.expression.getText() == \"makeShader\") {\n              let lhsType = checker?.getTypeAtLocation(node2.getChildAt(0));\n              let sig = lhsType?.getCallSignatures();\n              if (sig && sig[0] && sig[0].getDeclaration()) {\n                let declaration = sig[0].getDeclaration();\n                if (hasShadeupDocTag(declaration, \"shader\")) {\n                  let isComputeShader = false;\n                  let computeShaderSize = [0, 0, 0];\n                  let parentNode = node2.parent;\n                  if (parentNode && ts.isAsExpression(parentNode) && parentNode.parent && ts.isCallExpression(parentNode.parent)) {\n                    if (parentNode.parent.arguments.length === 2) {\n                      isComputeShader = true;\n                      let lastChildArg = parentNode.parent.arguments[1];\n                      if (ts.isArrayLiteralExpression(lastChildArg)) {\n                        let elements = lastChildArg.elements;\n                        if (elements.length === 3) {\n                          computeShaderSize = [\n                            parseInt(elements[0].getText().replace(/[^\\d]/g, \"\")),\n                            parseInt(elements[1].getText().replace(/[^\\d]/g, \"\")),\n                            parseInt(elements[2].getText().replace(/[^\\d]/g, \"\"))\n                          ];\n                        }\n                      }\n                    }\n                  }\n                  checker?.getTypeAtLocation(declaration);\n                  if (node2.arguments.length === 2) {\n                    if (ts.isStringLiteral(node2.arguments[0])) {\n                      let key = node2.arguments[0].text;\n                      try {\n                        let glslShader = addGLSLShader(\n                          key,\n                          node2.arguments[1],\n                          checker,\n                          this,\n                          isComputeShader,\n                          computeShaderSize\n                        );\n                        let wgslShader = addWGSLShader(\n                          key,\n                          node2.arguments[1],\n                          checker,\n                          this,\n                          isComputeShader,\n                          computeShaderSize\n                        );\n                        if (glslShader && wgslShader) {\n                          shaders.push({\n                            glsl: glslShader,\n                            wgsl: wgslShader\n                          });\n                        }\n                      } catch (e) {\n                        console.error(e);\n                        if (e instanceof GLSLCompilationError) {\n                          this.addDiagnostic(path, {\n                            file: e.node.getSourceFile(),\n                            code: 0,\n                            messageText: e.message + \" (this is being used in the shader defined at \" + this.printNodeLocation(node2) + \")\",\n                            category: ts.DiagnosticCategory.Error,\n                            start: e.node.getStart(),\n                            length: 2\n                          });\n                          this.addDiagnostic(path, {\n                            file: node2.getSourceFile(),\n                            code: 0,\n                            messageText: \"this shader has an error in its code (\" + e.message + \" at \" + this.printNodeLocation(e.node) + \")\",\n                            category: ts.DiagnosticCategory.Error,\n                            start: node2.getStart(),\n                            length: node2.getEnd() - node2.getStart()\n                          });\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          });\n        }\n      }\n      return shaders;\n    }\n    patchFile(path, content, start, length) {\n    }\n  }\n  function walkNodes(node2, cb) {\n    cb(node2);\n    node2.forEachChild((n) => walkNodes(n, cb));\n  }\n  function hasShadeupDocTag(node2, tagName) {\n    return ts.getJSDocTags(node2).some((tag) => tag.tagName.text === \"shadeup\" && tag.comment === \"=\" + tagName);\n  }\n  const std = \"export { ui } from '/_std/ui';\\r\\nexport { mesh, Mesh } from '/_std/mesh';\\r\\nexport { sdf } from '/_std/sdf';\\r\\nexport { geo } from '/_std/geo';\\r\\nexport * from '/_std/native';\\r\\n\";\n  const ui = \"import { getShadeupLocalContext } from '/_std/context';\\r\\n\\r\\nexport namespace ui {\\r\\n\texport function puck(position: float2): float2 {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_PUCK(position);\\r\\n\t}\\r\\n\\r\\n\texport function draggable(position: float2, radius: float = 10): float2 {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_PUCK(position, radius, true);\\r\\n\t}\\r\\n\\r\\n\texport function textbox(value: string): string {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('textbox', value);\\r\\n\t}\\r\\n\\r\\n\texport function slider(value: float, min: float, max: float): float {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_SLIDER(value, { min, max });\\r\\n\t}\\r\\n\\r\\n\texport function label(text: string): void {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('label', text);\\r\\n\t}\\r\\n\\r\\n\texport function checkbox(value: bool): bool {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('checkbox', value);\\r\\n\t}\\r\\n\\r\\n\texport function combo(value: string, options: string[]): string {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('combo', value, { options });\\r\\n\t}\\r\\n\\r\\n\texport function group(text: string): void {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('group', text);\\r\\n\t}\\r\\n\\r\\n\texport function button(text: string): bool {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('button', false, { text });\\r\\n\t}\\r\\n\\r\\n\texport function pop(): void {\\r\\n\t\treturn getShadeupLocalContext()._SHADEUP_UI_CONTROL('pop');\\r\\n\t}\\r\\n}\\r\\n\";\n  const native = `import { float4, float3, float, float2, bool, int } from '/std_math';\\r\nimport { texture2d } from '/_std/texture';\\r\nimport { Camera, Camera2d, quat } from '/_std/common';\\r\nimport { getShadeupLocalContext } from '/_std/context';\\r\n\\r\nexport function shadeupMakeTextureFromUrl(url: string): texture2d<float4> {\\r\n\treturn getShadeupLocalContext()['shadeupMakeTextureFromUrlNative'](url);\\r\n}\\r\n\\r\nexport class FrameContext {\\r\n\t/** Delta between the previous frame's time and this frame (in seconds */\\r\n\tdeltaTime: float;\\r\n\t/** Current time in seconds from the start of the renderer */\\r\n\ttime: float;\\r\n\t/** Canvas size in pixels */\\r\n\tscreenSize: float2;\\r\n\t/** Current frame index */\\r\n\tframe: int;\\r\n\\r\n\t/** Mouse/touch screen input state for this frame */\\r\n\tmouse: MouseInputState = new MouseInputState();\\r\n\\r\n\t/** Keyboard input state for this frame */\\r\n\tkeyboard: KeyboardInputState = new KeyboardInputState();\\r\n\\r\n\t/** Controllable camera (Hold right click and use WASD to move) */\\r\n\tcamera: Camera = new Camera();\\r\n\\r\n\tcamera2d: Camera2d = new Camera2d();\\r\n\\r\n\tconfigureCamera(options: {\\r\n\t\tmode?: 'free' | 'orbit' | 'orbit-free';\\r\n\\r\n\t\tspinning?: boolean;\\r\n\\r\n\t\tinitialPosition?: float3;\\r\n\t\tinitialPitch?: float;\\r\n\t\tinitialYaw?: float;\\r\n\\r\n\t\tspeed?: float;\\r\n\\r\n\t\torbitTarget?: float3;\\r\n\t\torbitDistance?: float;\\r\n\t\torbitPitch?: float;\\r\n\t\torbitYaw?: float;\\r\n\t\torbitMinDistance?: float;\\r\n\t\torbitMaxDistance?: float;\\r\n\t\torbitMinPitch?: float;\\r\n\t\torbitMaxPitch?: float;\\r\n\t}) {}\\r\n\\r\n\t/**\\r\n\t * Use external values from the host JavaScript environment.\\r\n\t */\\r\n\tinput<T>(key: string, defaultValue: T): T {\\r\n\t\treturn defaultValue;\\r\n\t}\\r\n\\r\n\t/**\\r\n\t * Send values to the host JavaScript environment.\\r\n\t */\\r\n\toutput<T>(key: string, value: T) {}\\r\n}\\r\n\\r\nexport class MouseInputState {\\r\n\t/** Current mouse position relative to canvas in pixels ((0, 0) is the top left */\\r\n\tscreen: float2;\\r\n\t/** Current mouse position mapped from 0-1 in canvas space ((0, 0) is the top left while (1, 1) is the bottom right */\\r\n\tuv: float2;\\r\n\t/** Caches the mouse position relative to canvas in pixels when any mouse button is pressed (resets after subsequent presses */\\r\n\tstartScreen: float2;\\r\n\t/** Caches the mouse position mapped from 0-1 in canvas space when any mouse button is pressed (resets after subsequent presses */\\r\n\tstartUv: float2;\\r\n\t/** If dragging, this will be the delta between the start and current mouse position */\\r\n\tdeltaUv: float2;\\r\n\t/** If dragging, this will be the delta between the mouse position last frame and the current mouse position */\\r\n\tframeDeltaUv: float2;\\r\n\t/** If dragging, this will be the delta between the start and current mouse position */\\r\n\tdeltaScreen: float2;\\r\n\t/** If dragging, this will be the delta between the mouse position last frame and the current mouse position */\\r\n\tframeDeltaScreen: float2;\\r\n\t/** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\\r\n\tbutton: [boolean, boolean, boolean] = [false, false, false];\\r\n\t/** Mouse button pressed state for buttons 0-3 (left, middle, right) */\\r\n\tclicked: [boolean, boolean, boolean] = [false, false, false];\\r\n\t/** If currently dragging */\\r\n\tdragging: bool;\\r\n\t/** Accumulated mouse wheel movement for this frame in the range of -1 to 1 */\\r\n\twheel: float;\\r\n\t/** Rate of change */\\r\n\tvelocity: float;\\r\n\t/** Is the mouse focused within the screen */\\r\n\tfocused: bool;\\r\n}\\r\n\\r\nexport class KeyboardInputState {\\r\n\t/** Is key down this frame */\\r\n\tbackspace: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\ttab: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tenter: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tshiftLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tshiftRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcontrolLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcontrolRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\taltLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\taltRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tpause: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcapsLock: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tescape: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tspace: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tpageUp: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tpageDown: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tend: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\thome: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowUp: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tarrowDown: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tprintScreen: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tinsert: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdelete: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit0: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit1: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit2: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit3: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit4: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit5: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit6: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit7: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit8: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tdigit9: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyA: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyB: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyC: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyD: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyE: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyF: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyG: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyH: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyI: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyJ: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyK: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyL: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyM: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyN: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyO: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyP: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyQ: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyR: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyS: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyT: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyU: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyV: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyW: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyX: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyY: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tkeyZ: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tmetaLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tmetaRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcontextMenu: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad0: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad1: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad2: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad3: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad4: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad5: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad6: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad7: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad8: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpad9: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadMultiply: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadAdd: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadSubtract: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadDecimal: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumpadDivide: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf1: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf2: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf3: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf4: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf5: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf6: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf7: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf8: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf9: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf10: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf11: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tf12: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tnumLock: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tscrollLock: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tsemicolon: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tequal: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tcomma: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tminus: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tperiod: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tslash: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbackquote: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbracketLeft: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbackslash: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tbracketRight: bool;\\r\n\\r\n\t/** Is key down this frame */\\r\n\tquote: bool;\\r\n\\r\n\t/** Key pressed, triggered once until released  */ pressedBackspace: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedTab: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEnter: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedShiftLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedShiftRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedControlLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedControlRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedAltLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedAltRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPause: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedCapsLock: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEscape: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedSpace: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPageUp: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPageDown: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEnd: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedHome: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowUp: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedArrowDown: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPrintScreen: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedInsert: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDelete: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit0: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit1: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit2: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit3: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit4: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit5: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit6: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit7: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit8: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedDigit9: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyA: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyB: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyC: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyD: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyE: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyF: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyG: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyH: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyI: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyJ: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyK: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyL: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyM: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyN: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyO: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyP: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyQ: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyR: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyS: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyT: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyU: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyV: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyW: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyX: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyY: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedKeyZ: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedMetaLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedMetaRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedContextMenu: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad0: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad1: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad2: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad3: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad4: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad5: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad6: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad7: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad8: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpad9: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadMultiply: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadAdd: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadSubtract: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadDecimal: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumpadDivide: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF1: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF2: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF3: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF4: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF5: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF6: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF7: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF8: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF9: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF10: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF11: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedF12: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedNumLock: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedScrollLock: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedSemicolon: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedEqual: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedComma: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedMinus: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedPeriod: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedSlash: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBackquote: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBracketLeft: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBackslash: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedBracketRight: bool;\\r\n\t/** Key pressed, triggered once until released  */ pressedQuote: bool;\\r\n\t/** 2D vector that encodes the arrow keys and WASD aligned with the screen (e.g. up arrow = (0, -1)) */\\r\n\tarrowVector: float2;\\r\n}\\r\n\\r\ndeclare global {\\r\n\tconst env: FrameContext;\\r\n}\\r\n`;\n  const buffer = \"import { getValueSize } from '../engine/adapters/webgpu';\\r\\nimport { getShadeupLocalContext } from '/_std/context';\\r\\nimport {\\r\\n\tfloat4,\\r\\n\tfloat3,\\r\\n\tfloat,\\r\\n\tfloat2,\\r\\n\tbool,\\r\\n\tint,\\r\\n\tint2,\\r\\n\tint3,\\r\\n\tint4,\\r\\n\tuint,\\r\\n\tuint2,\\r\\n\tuint3,\\r\\n\tuint4,\\r\\n\tatomic,\\r\\n\tintifyVector\\r\\n} from '/std_math';\\r\\n\\r\\nlet __ = { intifyVector };\\r\\n\\r\\nexport class buffer_internal<T> {\\r\\n\t__opaque_buffer: true = true;\\r\\n\\r\\n\tstructArray: T[] | null = null;\\r\\n\tfloatArray: Float32Array | null = null;\\r\\n\tintArray: Int32Array | null = null;\\r\\n\tuintArray: Uint32Array | null = null;\\r\\n\tarrayBuffer: ArrayBuffer | null = null;\\r\\n\tvectorSize: int = 0;\\r\\n\ttypeName: string;\\r\\n\\r\\n\tplatformPayload: any = null;\\r\\n\tadapter: any = null;\\r\\n\\r\\n\tdirty: boolean = false;\\r\\n\tpendingWrites: number = 0;\\r\\n\tcpuReadDirty: boolean = false;\\r\\n\tcpuWriteDirty: boolean = false;\\r\\n\\r\\n\telementCount: int = 0;\\r\\n\telementBytes: int = 0;\\r\\n\tstructured: boolean = false;\\r\\n\\r\\n\tfastIndex: (index: int) => T;\\r\\n\tfastIndexAssign: (index: int, value: T) => void;\\r\\n\\r\\n\tdestroy() {\\r\\n\t\tthis.adapter.destroyBuffer(this);\\r\\n\t}\\r\\n\\r\\n\t[index: number]: T;\\r\\n\\r\\n\t__index(index: int | uint): T {\\r\\n\t\t// this.download();\\r\\n\t\t// return this.fastIndex(index);\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t__index_assign(index: int | uint, value: T): void {\\r\\n\t\t// this.download();\\r\\n\t\t// this.cpuWriteDirty = true;\\r\\n\t\t// this.fastIndexAssign(index, value);\\r\\n\t}\\r\\n\\r\\n\t__index_assign_op(op_fn: (a: T, b: T) => T, index: int | uint, value: T): void {\\r\\n\t\t// this.download();\\r\\n\t\t// this.cpuWriteDirty = true;\\r\\n\t\t// this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\\r\\n\t}\\r\\n\\r\\n\tlen() {\\r\\n\t\treturn this.elementCount;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t * Returns the underlying cpu buffer as a typed array.\\r\\n\t *\\r\\n\t * > [!NOTE]\\r\\n\t * > This is considerably faster than using the raw index [] operator.\\r\\n\t *\\r\\n\t * > [!NOTE]\\r\\n\t * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\\r\\n\t *\\r\\n\t * ```shadeup\\r\\n\t * let buf = buffer<uint>();\\r\\n\t * let data = buf.getData();\\r\\n\t *\\r\\n\t * for (let i = 0; i < data.length; i += 4) {\\r\\n\t * \t// Do something with data[i]\\r\\n\t * }\\r\\n\t * ```\\r\\n\t */\\r\\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array | T[] {\\r\\n\t\tif (this.structured) {\\r\\n\t\t\treturn this.structArray!;\\r\\n\t\t} else {\\r\\n\t\t\treturn this.floatArray ?? this.intArray ?? this.uintArray ?? new Uint8Array(0);\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\twrite(other: buffer_internal<T>) {\\r\\n\t\tif (!this.adapter) return;\\r\\n\\r\\n\t\tthis.adapter.copyBufferToBuffer(other, this);\\r\\n\t}\\r\\n\\r\\n\twatchMutation: boolean = false;\\r\\n\\r\\n\t/** @shadeup=tag(async) @shadeup=noemit_gpu */\\r\\n\tasync download() {\\r\\n\t\tif (!this.adapter) return;\\r\\n\\r\\n\t\tif (this.pendingWrites > 0) {\\r\\n\t\t\tgetShadeupLocalContext().flushAdapter();\\r\\n\t\t}\\r\\n\\r\\n\t\tif (this.cpuReadDirty) {\\r\\n\t\t\tthis.cpuReadDirty = false;\\r\\n\t\t\tawait this.adapter.downloadBuffer(this);\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tdownloadAsync(): Promise<void> {\\r\\n\t\treturn this['download']();\\r\\n\t}\\r\\n\\r\\n\t/** @shadeup=noemit_gpu */\\r\\n\tupload(): void {\\r\\n\t\tif (!this.adapter) return;\\r\\n\\r\\n\t\tif (this.cpuWriteDirty) {\\r\\n\t\t\tthis.cpuWriteDirty = false;\\r\\n\t\t\tthis.adapter.uploadBuffer(this);\\r\\n\t\t}\\r\\n\t}\\r\\n\tsymbol: Symbol = Symbol();\\r\\n\\r\\n\tconstructor(size: int, typeName: string, structure: any) {\\r\\n\t\tthis.adapter = getShadeupLocalContext().shadeupGetGraphicsAdapter();\\r\\n\t\tthis.typeName = typeName;\\r\\n\t\tif (structure) {\\r\\n\t\t\tif (structure.name && !structure.name.startsWith('atomic')) {\\r\\n\t\t\t\tthis.typeName = structure.name;\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t\tthis.elementCount = size;\\r\\n\t\tthis.elementBytes = 4;\\r\\n\t\tif (\\r\\n\t\t\ttypeName == 'float4' ||\\r\\n\t\t\ttypeName == 'float3' ||\\r\\n\t\t\ttypeName == 'float2' ||\\r\\n\t\t\ttypeName == 'float'\\r\\n\t\t) {\\r\\n\t\t\tthis.vectorSize = 1;\\r\\n\\r\\n\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\treturn this.floatArray![index] as T;\\r\\n\t\t\t};\\r\\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\tthis.floatArray![index] = value as float;\\r\\n\t\t\t};\\r\\n\\r\\n\t\t\tif (typeName == 'float4') {\\r\\n\t\t\t\tthis.vectorSize = 4;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn float4(\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4 + 1],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4 + 2],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 4 + 3]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float4) => {\\r\\n\t\t\t\t\tthis.floatArray![index * 4] = value[0];\\r\\n\t\t\t\t\tthis.floatArray![index * 4 + 1] = value[1];\\r\\n\t\t\t\t\tthis.floatArray![index * 4 + 2] = value[2];\\r\\n\t\t\t\t\tthis.floatArray![index * 4 + 3] = value[3];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'float3') {\\r\\n\t\t\t\tthis.vectorSize = 3;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn float3(\\r\\n\t\t\t\t\t\tthis.floatArray![index * 3],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 3 + 1],\\r\\n\t\t\t\t\t\tthis.floatArray![index * 3 + 2]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float3) => {\\r\\n\t\t\t\t\tthis.floatArray![index * 3] = value[0];\\r\\n\t\t\t\t\tthis.floatArray![index * 3 + 1] = value[1];\\r\\n\t\t\t\t\tthis.floatArray![index * 3 + 2] = value[2];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\t\t\tif (typeName == 'float2') {\\r\\n\t\t\t\tthis.vectorSize = 2;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn float2(this.floatArray![index * 2], this.floatArray![index * 2 + 1]) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float2) => {\\r\\n\t\t\t\t\tthis.floatArray![index * 2] = value[0];\\r\\n\t\t\t\t\tthis.floatArray![index * 2 + 1] = value[1];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\t\t\tthis.floatArray = new Float32Array(size * this.vectorSize);\\r\\n\t\t\tthis.arrayBuffer = this.floatArray.buffer;\\r\\n\t\t} else if (\\r\\n\t\t\ttypeName == 'int4' ||\\r\\n\t\t\ttypeName == 'int3' ||\\r\\n\t\t\ttypeName == 'int2' ||\\r\\n\t\t\ttypeName == 'int'\\r\\n\t\t) {\\r\\n\t\t\tthis.vectorSize = 1;\\r\\n\\r\\n\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\treturn this.intArray![index] as T;\\r\\n\t\t\t};\\r\\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\tthis.intArray![index] = value as int;\\r\\n\t\t\t};\\r\\n\\r\\n\t\t\tif (typeName == 'int4') {\\r\\n\t\t\t\tthis.vectorSize = 4;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn int4(\\r\\n\t\t\t\t\t\tthis.intArray![index * 4],\\r\\n\t\t\t\t\t\tthis.intArray![index * 4 + 1],\\r\\n\t\t\t\t\t\tthis.intArray![index * 4 + 2],\\r\\n\t\t\t\t\t\tthis.intArray![index * 4 + 3]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int4) => {\\r\\n\t\t\t\t\tthis.intArray![index * 4] = value[0];\\r\\n\t\t\t\t\tthis.intArray![index * 4 + 1] = value[1];\\r\\n\t\t\t\t\tthis.intArray![index * 4 + 2] = value[2];\\r\\n\t\t\t\t\tthis.intArray![index * 4 + 3] = value[3];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'int3') {\\r\\n\t\t\t\tthis.vectorSize = 3;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn int3(\\r\\n\t\t\t\t\t\tthis.intArray![index * 3],\\r\\n\t\t\t\t\t\tthis.intArray![index * 3 + 1],\\r\\n\t\t\t\t\t\tthis.intArray![index * 3 + 2]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int3) => {\\r\\n\t\t\t\t\tthis.intArray![index * 3] = value[0];\\r\\n\t\t\t\t\tthis.intArray![index * 3 + 1] = value[1];\\r\\n\t\t\t\t\tthis.intArray![index * 3 + 2] = value[2];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'int2') {\\r\\n\t\t\t\tthis.vectorSize = 2;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn int2(this.intArray![index * 2], this.intArray![index * 2 + 1]) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int2) => {\\r\\n\t\t\t\t\tthis.intArray![index * 2] = value[0];\\r\\n\t\t\t\t\tthis.intArray![index * 2 + 1] = value[1];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tthis.intArray = new Int32Array(size * this.vectorSize);\\r\\n\t\t\tthis.arrayBuffer = this.intArray.buffer;\\r\\n\t\t} else if (\\r\\n\t\t\ttypeName == 'uint4' ||\\r\\n\t\t\ttypeName == 'uint3' ||\\r\\n\t\t\ttypeName == 'uint2' ||\\r\\n\t\t\ttypeName == 'uint'\\r\\n\t\t) {\\r\\n\t\t\tthis.vectorSize = 1;\\r\\n\\r\\n\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\treturn this.uintArray![index] as T;\\r\\n\t\t\t};\\r\\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\tthis.uintArray![index] = value as uint;\\r\\n\t\t\t};\\r\\n\\r\\n\t\t\tif (typeName == 'uint4') {\\r\\n\t\t\t\tthis.vectorSize = 4;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn uint4(\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4 + 1],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4 + 2],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 4 + 3]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint4) => {\\r\\n\t\t\t\t\tthis.uintArray![index * 4] = value[0];\\r\\n\t\t\t\t\tthis.uintArray![index * 4 + 1] = value[1];\\r\\n\t\t\t\t\tthis.uintArray![index * 4 + 2] = value[2];\\r\\n\t\t\t\t\tthis.uintArray![index * 4 + 3] = value[3];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'uint3') {\\r\\n\t\t\t\tthis.vectorSize = 3;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn uint3(\\r\\n\t\t\t\t\t\tthis.uintArray![index * 3],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 3 + 1],\\r\\n\t\t\t\t\t\tthis.uintArray![index * 3 + 2]\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint3) => {\\r\\n\t\t\t\t\tthis.uintArray![index * 3] = value[0];\\r\\n\t\t\t\t\tthis.uintArray![index * 3 + 1] = value[1];\\r\\n\t\t\t\t\tthis.uintArray![index * 3 + 2] = value[2];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (typeName == 'uint2') {\\r\\n\t\t\t\tthis.vectorSize = 2;\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn uint2(this.uintArray![index * 2], this.uintArray![index * 2 + 1]) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint2) => {\\r\\n\t\t\t\t\tthis.uintArray![index * 2] = value[0];\\r\\n\t\t\t\t\tthis.uintArray![index * 2 + 1] = value[1];\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tthis.uintArray = new Uint32Array(size * this.vectorSize);\\r\\n\t\t\tthis.arrayBuffer = this.uintArray.buffer;\\r\\n\t\t} else {\\r\\n\t\t\tthis.structured = true;\\r\\n\\r\\n\t\t\tif (typeName.startsWith('atomic<')) {\\r\\n\t\t\t\t// this.structArray = new Array<T>(size);\\r\\n\t\t\t\tthis.arrayBuffer = new ArrayBuffer(size * 4);\\r\\n\\r\\n\t\t\t\tthis.watchMutation = true;\\r\\n\t\t\t\tthis.vectorSize = 1;\\r\\n\t\t\t\tthis.elementBytes = 4;\\r\\n\t\t\t\tthis.elementCount = size;\\r\\n\t\t\t\tfor (let i = 0; i < size; i++) {\\r\\n\t\t\t\t\t// this.structArray[i] = atomic(0) as T;\\r\\n\t\t\t\t}\\r\\n\t\t\t\tif (typeName == 'atomic<uint>') {\\r\\n\t\t\t\t\tthis.uintArray = new Uint32Array(this.arrayBuffer);\\r\\n\t\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\t\treturn atomic(this.uintArray![index]) as T;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\t\t\tthis.uintArray![index] = value.__value as any;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t} else {\\r\\n\t\t\t\t\tthis.intArray = new Int32Array(this.arrayBuffer);\\r\\n\t\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\t\treturn atomic(this.intArray![index]) as T;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\t\t\tthis.intArray![index] = value.__value as any;\\r\\n\t\t\t\t\t};\\r\\n\t\t\t\t}\\r\\n\t\t\t} else {\\r\\n\t\t\t\tlet elementSize = this.adapter.getValueSize(structure);\\r\\n\t\t\t\tlet realSize = elementSize * size;\\r\\n\t\t\t\tthis.elementCount = size;\\r\\n\t\t\t\tthis.elementBytes = elementSize;\\r\\n\t\t\t\tthis.arrayBuffer = new ArrayBuffer(realSize);\\r\\n\\r\\n\t\t\t\tthis.fastIndex = (index: int) => {\\r\\n\t\t\t\t\treturn this.adapter.readStructuredBuffer(\\r\\n\t\t\t\t\t\tstructure,\\r\\n\t\t\t\t\t\tthis.arrayBuffer,\\r\\n\t\t\t\t\t\tindex * elementSize\\r\\n\t\t\t\t\t) as T;\\r\\n\t\t\t\t};\\r\\n\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\\r\\n\t\t\t\t\tthis.cpuWriteDirty = true;\\r\\n\t\t\t\t\tthis.adapter.writeStructuredBuffer(\\r\\n\t\t\t\t\t\tstructure,\\r\\n\t\t\t\t\t\tvalue,\\r\\n\t\t\t\t\t\tthis.arrayBuffer,\\r\\n\t\t\t\t\t\tindex * (elementSize / 4)\\r\\n\t\t\t\t\t);\\r\\n\t\t\t\t};\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\t(this.__index as any) = (index: int): T => {\\r\\n\t\t\t// await this.download();\\r\\n\t\t\tif (this.watchMutation) {\\r\\n\t\t\t\tlet data = this.fastIndex(index);\\r\\n\t\t\t\t(data as any).$mutate = (to?: T) => {\\r\\n\t\t\t\t\tthis.cpuWriteDirty = true;\\r\\n\t\t\t\t\tif (to !== undefined) {\\r\\n\t\t\t\t\t\tif (this.intArray) {\\r\\n\t\t\t\t\t\t\tthis.intArray[index] = to as any;\\r\\n\t\t\t\t\t\t} else {\\r\\n\t\t\t\t\t\t\tthis.uintArray![index] = to as any;\\r\\n\t\t\t\t\t\t}\\r\\n\t\t\t\t\t}\\r\\n\t\t\t\t};\\r\\n\t\t\t\treturn data;\\r\\n\t\t\t} else {\\r\\n\t\t\t\treturn this.fastIndex(index);\\r\\n\t\t\t}\\r\\n\t\t};\\r\\n\\r\\n\t\tthis.__index_assign = (index: int, value: T): void => {\\r\\n\t\t\t// await this.download();\\r\\n\t\t\tthis.cpuWriteDirty = true;\\r\\n\t\t\tthis.fastIndexAssign(index, value);\\r\\n\t\t};\\r\\n\\r\\n\t\tthis.__index_assign_op = (op_fn: (a: T, b: T) => T, index: int, value: T): void => {\\r\\n\t\t\t// await this.download();\\r\\n\t\t\tthis.cpuWriteDirty = true;\\r\\n\\r\\n\t\t\tthis.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\\r\\n\t\t};\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport type buffer<T> = buffer_internal<T>;\\r\\n\\r\\n/**\\r\\n * Creates a new buffer.\\r\\n * ```shadeup\\r\\n * let buf = buffer<float>(100);\\r\\n *\\r\\n * ```\\r\\n */\\r\\nexport function buffer<T>(data: T[], typeName: string, structure?: object): buffer<T>;\\r\\nexport function buffer<T>(size: int, typeName: string, structure?: object): buffer<T>;\\r\\nexport function buffer<T>(e1: any, typeName: string, structure?: object): buffer<T> {\\r\\n\tif (typeof e1 === 'number') {\\r\\n\t\tlet size = e1;\\r\\n\t\tlet buf = new buffer_internal<T>(size, typeName, structure!);\\r\\n\t\treturn buf;\\r\\n\t} else {\\r\\n\t\tlet data = e1;\\r\\n\t\tlet buf = new buffer_internal<T>(data.length, typeName, structure!);\\r\\n\t\tfor (let i = 0; i < data.length; i++) {\\r\\n\t\t\tbuf.fastIndexAssign(i, data[i]);\\r\\n\t\t}\\r\\n\t\treturn buf;\\r\\n\t}\\r\\n}\\r\\n\";\n  const texture = \"import {\\r\\n\tfloat4,\\r\\n\tfloat3,\\r\\n\tfloat,\\r\\n\tfloat2,\\r\\n\tbool,\\r\\n\tint,\\r\\n\tint2,\\r\\n\tint3,\\r\\n\tint4,\\r\\n\tuint,\\r\\n\tuint2,\\r\\n\tuint3,\\r\\n\tuint4,\\r\\n\tuint8\\r\\n} from '/std_math';\\r\\n\\r\\nimport {\\r\\n\tShaderInput,\\r\\n\tShaderOutput,\\r\\n\tshader,\\r\\n\tdraw,\\r\\n\tdrawInstanced,\\r\\n\tdrawAdvanced,\\r\\n\tdrawIndexed\\r\\n} from '/_std/drawIndexed';\\r\\n\\r\\nimport { Mesh } from '/_std/mesh';\\r\\nimport { PaintingContext } from '/_std/paint';\\r\\nimport { getShadeupLocalContext } from '/_std/context';\\r\\n\\r\\nexport class texture2d_internal_empty<T> {\\r\\n\t__opaque_texture2d: true = true;\\r\\n\\r\\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\\r\\n\t__index(index: int2 | uint2): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t__index_assign(index: int2 | uint2, value: T): void {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\tgetFast(index: int2 | uint2): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\tsetFast(index: int2 | uint2, value: T): void {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t/** @shadeup=tag(async) */\\r\\n\tdownload(): void {}\\r\\n\\r\\n\tdownloadAsync(): Promise<void> {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t * Returns the underlying cpu buffer as a typed array.\\r\\n\t *\\r\\n\t * Note that this is considerably faster than using the raw index [] operator.\\r\\n\t *\\r\\n\t * ```shadeup\\r\\n\t * let tex = texture2d<float4>();\\r\\n\t * let data = tex.getData();\\r\\n\t *\\r\\n\t * for (let i = 0; i < data.length; i += 4) {\\r\\n\t * \tlet r = data[i];\\r\\n\t * \tlet g = data[i + 1];\\r\\n\t * \tlet b = data[i + 2];\\r\\n\t * \tlet a = data[i + 3];\\r\\n\t *\\r\\n\t * \t// Do something with the pixel\\r\\n\t * }\\r\\n\t * ```\\r\\n\t */\\r\\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array {\\r\\n\t\treturn new Uint32Array(0);\\r\\n\t}\\r\\n\\r\\n\tupload(): void {}\\r\\n\\r\\n\tsize: float2 = [0, 0];\\r\\n\\r\\n\tpaint: PaintingContext = null as any;\\r\\n\\r\\n\tsample(position: float2): float4 {}\\r\\n\\r\\n\tclear(color: float | float4 | 'auto' = 'auto'): void {}\\r\\n\tflush(): void {}\\r\\n\t// draw(\\r\\n\t// \tgeometry: Mesh,\\r\\n\t// \tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\t// \tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n\t// ): void;\\r\\n\t// draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\n\t// draw() {\\r\\n\t// \tthrow new Error('Not implemented');\\r\\n\t// }\\r\\n\\r\\n\tdraw: typeof draw;\\r\\n\\r\\n\tdrawIndexed: typeof drawIndexed;\\r\\n\tdrawAdvanced: typeof drawAdvanced;\\r\\n\tdrawInstanced: typeof drawInstanced;\\r\\n\\r\\n\t/** Release the texture */\\r\\n\tdestroy() {}\\r\\n}\\r\\n\\r\\nexport type texture2d<T> = texture2d_internal_empty<T>;\\r\\nexport type TextureFormat = '32bit' | '16bit' | '8bit' | 'depth' | 'depth-32' | 'auto';\\r\\nexport function texture2d<T = uint8>(\\r\\n\tsize: float2,\\r\\n\tformat: TextureFormat,\\r\\n\ttype: string\\r\\n): texture2d<T> {\\r\\n\treturn getShadeupLocalContext().shadeupMakeTextureInternal(size, format, type) as texture2d<T>;\\r\\n}\\r\\n\\r\\nexport class texture3d_internal_empty<T> {\\r\\n\t__opaque_texture3d: true = true;\\r\\n\\r\\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\\r\\n\t__index(index: int3): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n\t__index_assign(index: int3, value: T): void {}\\r\\n\tsize: float3 = [0, 0, 0];\\r\\n\\r\\n\tsample(position: float3): float4 {}\\r\\n}\\r\\n\\r\\nexport type texture3d<T> = texture3d_internal_empty<T>;\\r\\n\\r\\nexport function texture3d<T>(size: float3, type: string): texture3d<T> {\\r\\n\treturn getShadeupLocalContext().shadeupMakeTextureInternal(size, type) as texture3d<T>;\\r\\n}\\r\\n\";\n  const physics = \"import type RAPIER2DNamespace from '@dimforge/rapier2d/rapier';\\r\\nimport type RAPIER3DNamespace from '@dimforge/rapier3d/rapier';\\r\\nimport type { float, float2, float3 } from './types';\\r\\n\\r\\ntype RAPIER2D = typeof RAPIER2DNamespace;\\r\\n\\r\\nexport class PhysicsCollider2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tworld: RAPIER2DNamespace.World;\\r\\n\tcollider: RAPIER2DNamespace.Collider;\\r\\n\\r\\n\tconstructor(\\r\\n\t\trapier: RAPIER2D,\\r\\n\t\tworld: RAPIER2DNamespace.World,\\r\\n\t\tcollider: RAPIER2DNamespace.Collider\\r\\n\t) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.world = world;\\r\\n\t\tthis.collider = collider;\\r\\n\t}\\r\\n\\r\\n\tsetTranslation(position: float2) {\\r\\n\t\tthis.collider.setTranslation(toVec2(position));\\r\\n\t}\\r\\n\\r\\n\tsetRotation(rotation: float) {\\r\\n\t\tthis.collider.setRotation(rotation);\\r\\n\t}\\r\\n\\r\\n\tsetSensor(isSensor: boolean) {\\r\\n\t\tthis.collider.setSensor(isSensor);\\r\\n\t}\\r\\n\\r\\n\tsetCollisionGroups(groups: int) {\\r\\n\t\tthis.collider.setCollisionGroups(groups);\\r\\n\t}\\r\\n\\r\\n\tsetCollidesWith(groups: int) {\\r\\n\t\tthis.collider.setActiveCollisionTypes(groups);\\r\\n\t}\\r\\n\\r\\n\tsetFriction(friction: float) {\\r\\n\t\tthis.collider.setFriction(friction);\\r\\n\t}\\r\\n\\r\\n\tsetRestitution(restitution: float) {\\r\\n\t\tthis.collider.setRestitution(restitution);\\r\\n\t}\\r\\n\\r\\n\tsetDensity(density: float) {\\r\\n\t\tthis.collider.setDensity(density);\\r\\n\t}\\r\\n\\r\\n\tsetMass(mass: float) {\\r\\n\t\tthis.collider.setMass(mass);\\r\\n\t}\\r\\n\\r\\n\tsetRadius(radius: float) {\\r\\n\t\tthis.collider.setRadius(radius);\\r\\n\t}\\r\\n\\r\\n\tsetHalfExtents(halfExtents: float2) {\\r\\n\t\tthis.collider.setHalfExtents(toVec2(halfExtents));\\r\\n\t}\\r\\n}\\r\\nfunction toVec2(v: float2): RAPIER2DNamespace.Vector2 {\\r\\n\treturn { x: v[0], y: v[1] };\\r\\n}\\r\\n\\r\\nfunction toVec3(v: float3): RAPIER3DNamespace.Vector {\\r\\n\treturn { x: v[0], y: v[1], z: v[2] };\\r\\n}\\r\\n\\r\\nexport class PhysicsRayCastResult2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tresult: RAPIER2DNamespace.RayIntersection;\\r\\n\\r\\n\tconstructor(rapier: RAPIER2D, result: RAPIER2DNamespace.RayIntersection) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.result = result;\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport class PhysicsRigidBody2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tworld: RAPIER2DNamespace.World;\\r\\n\tbody: RAPIER2DNamespace.RigidBody;\\r\\n\\r\\n\tconstructor(rapier: RAPIER2D, world: RAPIER2DNamespace.World, body: RAPIER2DNamespace.RigidBody) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.world = world;\\r\\n\t\tthis.body = body;\\r\\n\t}\\r\\n\\r\\n\taddBallCollider(radius: float): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.ball(radius);\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddBoxCollider(halfExtents: float2): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddCapsuleCollider(radius: float, halfHeight: float): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddTriangleCollider(a: float2, b: float2, c: float2): PhysicsCollider2d {\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddConvexCollider(points: float2[]): PhysicsCollider2d {\\r\\n\t\tlet floatarr = new Float32Array(points.length * 2);\\r\\n\t\tfor (let i = 0; i < points.length; i++) {\\r\\n\t\t\tfloatarr[i * 2 + 0] = points[i][0];\\r\\n\t\t\tfloatarr[i * 2 + 1] = points[i][1];\\r\\n\t\t}\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\\r\\n\t\tif (!colDesc) throw new Error('Failed to create convex hull collider');\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\taddHeightfieldCollider(heights: float[], scale: float2): PhysicsCollider2d {\\r\\n\t\tlet arr = new Float32Array(heights.length);\\r\\n\t\tfor (let i = 0; i < heights.length; i++) {\\r\\n\t\t\tarr[i] = heights[i];\\r\\n\t\t}\\r\\n\t\tlet colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\\r\\n\t\tlet col = this.world.createCollider(colDesc, this.body);\\r\\n\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\\r\\n\t}\\r\\n\\r\\n\tsetTranslation(position: float2) {\\r\\n\t\tthis.body.setTranslation(toVec2(position), true);\\r\\n\t}\\r\\n\\r\\n\tsetRotation(rotation: float) {\\r\\n\t\tthis.body.setRotation(rotation, true);\\r\\n\t}\\r\\n\\r\\n\tsetVelocity(velocity: float2) {\\r\\n\t\tthis.body.setLinvel(toVec2(velocity), true);\\r\\n\t}\\r\\n\\r\\n\tsetAngularVelocity(velocity: float) {\\r\\n\t\tthis.body.setAngvel(velocity, true);\\r\\n\t}\\r\\n\\r\\n\taddForce(force: float2) {\\r\\n\t\tthis.body.addForce(toVec2(force), true);\\r\\n\t}\\r\\n\\r\\n\taddForceAtPoint(force: float2, point: float2) {\\r\\n\t\tthis.body.addForceAtPoint(toVec2(force), toVec2(point), true);\\r\\n\t}\\r\\n\\r\\n\taddTorque(torque: float) {\\r\\n\t\tthis.body.addTorque(torque, true);\\r\\n\t}\\r\\n\\r\\n\tsetAdditionalMass(mass: float) {\\r\\n\t\tthis.body.setAdditionalMass(mass, true);\\r\\n\t}\\r\\n\\r\\n\tsetEnabled(enabled: boolean) {\\r\\n\t\tthis.body.setEnabled(enabled);\\r\\n\t}\\r\\n\\r\\n\tsleep() {\\r\\n\t\tthis.body.sleep();\\r\\n\t}\\r\\n\\r\\n\twakeUp() {\\r\\n\t\tthis.body.wakeUp();\\r\\n\t}\\r\\n\\r\\n\tsetGravityScale(scale: float) {\\r\\n\t\tthis.body.setGravityScale(scale, true);\\r\\n\t}\\r\\n\\r\\n\tsetLinearDamping(damping: float) {\\r\\n\t\tthis.body.setLinearDamping(damping);\\r\\n\t}\\r\\n\\r\\n\tsetAngularDamping(damping: float) {\\r\\n\t\tthis.body.setAngularDamping(damping);\\r\\n\t}\\r\\n\\r\\n\tisSleeping(): boolean {\\r\\n\t\treturn this.body.isSleeping();\\r\\n\t}\\r\\n\\r\\n\tmass(): float {\\r\\n\t\treturn this.body.mass() as float;\\r\\n\t}\\r\\n\\r\\n\ttranslation(): float2 {\\r\\n\t\tlet t = this.body.translation();\\r\\n\t\treturn [t.x as float, t.y as float];\\r\\n\t}\\r\\n\\r\\n\trotation(): float {\\r\\n\t\treturn this.body.rotation() as float;\\r\\n\t}\\r\\n\\r\\n\tvelocity(): float2 {\\r\\n\t\tlet t = this.body.linvel();\\r\\n\t\treturn [t.x as float, t.y as float];\\r\\n\t}\\r\\n\\r\\n\tangularVelocity(): float {\\r\\n\t\treturn this.body.angvel() as float;\\r\\n\t}\\r\\n\\r\\n\tisMoving(): boolean {\\r\\n\t\treturn this.body.isMoving();\\r\\n\t}\\r\\n\\r\\n\tcollider(index: int): PhysicsCollider2d {\\r\\n\t\tlet collider = this.body.collider(index);\\r\\n\t\tif (!collider) throw new Error('Failed to get collider');\\r\\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, collider);\\r\\n\t}\\r\\n\\r\\n\tapplyImpulse(impulse: float2) {\\r\\n\t\tthis.body.applyImpulse(toVec2(impulse), true);\\r\\n\t}\\r\\n\\r\\n\tapplyTorqueImpulse(impulse: float) {\\r\\n\t\tthis.body.applyTorqueImpulse(impulse, true);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport class PhysicsEngine2d {\\r\\n\trapier: RAPIER2D;\\r\\n\tworld: RAPIER2DNamespace.World;\\r\\n\tconstructor(rapier: RAPIER2D) {\\r\\n\t\tthis.rapier = rapier;\\r\\n\t\tthis.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\\r\\n\t}\\r\\n\\r\\n\tstep() {\\r\\n\t\tthis.world.step();\\r\\n\t}\\r\\n\\r\\n\tcreateRigidBody(\\r\\n\t\tposition: float2,\\r\\n\t\trotation: float,\\r\\n\t\tmode: 'dynamic' | 'fixed'\\r\\n\t): PhysicsRigidBody2d {\\r\\n\t\tlet rbDesc =\\r\\n\t\t\tmode == 'dynamic'\\r\\n\t\t\t\t? this.rapier.RigidBodyDesc.dynamic()\\r\\n\t\t\t\t: mode == 'fixed'\\r\\n\t\t\t\t? this.rapier.RigidBodyDesc.fixed()\\r\\n\t\t\t\t: this.rapier.RigidBodyDesc.dynamic();\\r\\n\t\trbDesc.setTranslation(position[0], position[1]);\\r\\n\t\trbDesc.setRotation(rotation);\\r\\n\t\tlet rb = this.world.createRigidBody(rbDesc);\\r\\n\\r\\n\t\treturn new PhysicsRigidBody2d(this.rapier, this.world, rb);\\r\\n\t}\\r\\n\\r\\n\tbodies(): PhysicsRigidBody2d[] {\\r\\n\t\tlet bodies = this.world.bodies;\\r\\n\t\tlet result: PhysicsRigidBody2d[] = [];\\r\\n\t\tfor (let i = 0; i < bodies.len(); i++) {\\r\\n\t\t\tresult.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)!));\\r\\n\t\t}\\r\\n\t\treturn result;\\r\\n\t}\\r\\n\\r\\n\tcastRay(start: float2, end: float2, maxi: int): PhysicsRigidBody2d | null {\\r\\n\t\tlet result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\\r\\n\t\tif (!result) return null;\\r\\n\t\treturn new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent()!);\\r\\n\t}\\r\\n\\r\\n\tsetGravity(gravity: float2) {\\r\\n\t\tthis.world.gravity = toVec2(gravity);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport class PhysicsEngine3d {\\r\\n\tconstructor() {}\\r\\n}\\r\\n\\r\\nexport namespace physics {\\r\\n\texport function engine2d(): PhysicsEngine2d {\\r\\n\t\treturn new PhysicsEngine2d((window as any).RAPIER_2D);\\r\\n\t}\\r\\n}\\r\\n\";\n  const context = \"declare global {\\r\\n\tconst localEngineContext: any;\\r\\n}\\r\\nexport const getShadeupLocalContext = (): any => {\\r\\n\tif (typeof localEngineContext !== 'undefined') {\\r\\n\t\treturn localEngineContext;\\r\\n\t} else {\\r\\n\t\treturn window;\\r\\n\t}\\r\\n};\\r\\n\";\n  const drawIndexed = \"import { getShadeupLocalContext } from '/_std/context';\\r\\nimport { buffer } from '/_std/buffer';\\r\\nimport { Mesh } from '/_std/mesh';\\r\\nimport { texture2d } from '/_std/texture';\\r\\nimport { float4, float3, float, float2, bool, int, uint, atomic, int3 } from '/std_math';\\r\\n\\r\\nexport function drawIndexed(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\\r\\n}\\r\\n\\r\\nexport function drawInstanced(\\r\\n\tmesh: Mesh,\\r\\n\tinstanceCount: int,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_instanced(\\r\\n\t\tmesh,\\r\\n\t\tinstanceCount,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function drawInstancedIndexed(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tinstanceCount: int,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_instanced_indexed(\\r\\n\t\tindexBuffer,\\r\\n\t\tinstanceCount,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function drawIndexedIndirect(\\r\\n\tindirectBuffer: buffer<int> | buffer<atomic<int>>,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_indexed_indirect(\\r\\n\t\tindirectBuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function drawIndirect(\\r\\n\tmesh: Mesh,\\r\\n\tindirectBuffer: buffer<int> | buffer<atomic<int>>,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_indirect(\\r\\n\t\tmesh,\\r\\n\t\tindirectBuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\\r\\nexport function shader_start_shd_<T_IN, T_OUT, T_COMPUTE_Z>(\\r\\n\ts: shader<T_IN, T_OUT, T_COMPUTE_Z>,\\r\\n\tgroupSize?: any\\r\\n): shader<T_IN, T_OUT, T_COMPUTE_Z> {\\r\\n\treturn s;\\r\\n}\\r\\n\\r\\nexport type shader<T_IN = ShaderInput, T_OUT = ShaderOutput, T_COMPUTE_Z = 0> = (\\r\\n\t__in: Omit<T_IN, 'vertexIndex'>\\r\\n) => T_OUT;\\r\\ndeclare global {\\r\\n\t// function __shadeup_make_shader_inst(\\r\\n\t// \tkey: string,\\r\\n\t// \tparams: any,\\r\\n\t// \tclosure: any\\r\\n\t// ): shader<ShaderInput, ShaderOutput>;\\r\\n\t// function __shadeup_dispatch_draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\n\t// function __shadeup_dispatch_draw_geometry(\\r\\n\t// \tgeometry: Mesh,\\r\\n\t// \tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\t// \tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n\t// ): void;\\r\\n\\r\\n\tinterface Array<T> {\\r\\n\t\t[index: int]: T;\\r\\n\t}\\r\\n\\r\\n\tlet window: {\\r\\n\t\t[index: string]: any;\\r\\n\t};\\r\\n}\\r\\n\\r\\n/**@shadeup=struct*/\\r\\nexport class ShaderInput {\\r\\n\t/** Interpolated world position (available in fragment, and vertex) */\\r\\n\tposition: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Interpolated normal (fragment), Source mesh normal (vertex) */\\r\\n\tnormal: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Interpolated tangent (fragment), Source mesh tangent (vertex) */\\r\\n\ttangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\\r\\n\tbitangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Vertex shader output position */\\r\\n\tclipPosition: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\trealPosition: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** UV channel 0 input (available in fragment, and vertex) */\\r\\n\tuv: float2 = float2(0, 0);\\r\\n\\r\\n\t/** Screen position in pixels (available in fragment, and vertex) */\\r\\n\tscreen: float2 = float2(0, 0);\\r\\n\\r\\n\t/** Interpolated vertex color (available in fragment, and vertex)  */\\r\\n\tcolor: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** Group ID (available in compute) */\\r\\n\tgroupId: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Group size (available in compute) */\\r\\n\tgroupSize: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Global id (groupId * groupSize + localId) (available in compute) */\\r\\n\tglobalId: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Local id (available in compute) */\\r\\n\tlocalId: int3 = int3(0, 0, 0);\\r\\n\\r\\n\t/** Instance index (available in fragment, and vertex) */\\r\\n\tinstanceIndex: int = 0;\\r\\n\\r\\n\t/** Vertex index (available in vertex) */\\r\\n\tvertexIndex: int = 0;\\r\\n\\r\\n\t/** @shadeup=noemit_gpu */\\r\\n\tattr<T>(index: int, interpolation?: 'flat' | 'linear' | 'perspective'): T {\\r\\n\t\treturn null as any;\\r\\n\t}\\r\\n}\\r\\n\\r\\n/**@shadeup=struct*/\\r\\nexport class ShaderOutput {\\r\\n\t/** Vertex output position */\\r\\n\tposition: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** Vertex output normal */\\r\\n\tnormal: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Vertex output tangent */\\r\\n\ttangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** Vertex output bitangent */\\r\\n\tbitangent: float3 = float3(0, 0, 0);\\r\\n\\r\\n\t/** UV channel 0 output */\\r\\n\tuv: float2 = float2(0, 0);\\r\\n\\r\\n\t/** Pixel color output */\\r\\n\tcolor: float4 = float4(0, 0, 0, 0);\\r\\n\\r\\n\t/** @shadeup=noemit_gpu */\\r\\n\tattr<T>(index: int, value: T, interpolation?: 'flat' | 'linear' | 'perspective') {}\\r\\n}\\r\\n\\r\\n/** @shadeup=shader */\\r\\nexport function makeShader<I, O, CZ = 0>(\\r\\n\tkey: string,\\r\\n\tfn: (__in: I, __out: O) => void\\r\\n): shader<I, O, CZ> {\\r\\n\treturn fn as shader<I, O, CZ>;\\r\\n}\\r\\n\\r\\ntype AttachmentBindings1<A0> = {\\r\\n\tattachments: [texture2d<A0>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings2<A0, A1> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings3<A0, A1, A2> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings4<A0, A1, A2, A3> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>, texture2d<A3>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings5<A0, A1, A2, A3, A4> = {\\r\\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>, texture2d<A3>, texture2d<A4>];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings6<A0, A1, A2, A3, A4, A5> = {\\r\\n\tattachments: [\\r\\n\t\ttexture2d<A0>,\\r\\n\t\ttexture2d<A1>,\\r\\n\t\ttexture2d<A2>,\\r\\n\t\ttexture2d<A3>,\\r\\n\t\ttexture2d<A4>,\\r\\n\t\ttexture2d<A5>\\r\\n\t];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t\tattachment5: A5;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings7<A0, A1, A2, A3, A4, A5, A6> = {\\r\\n\tattachments: [\\r\\n\t\ttexture2d<A0>,\\r\\n\t\ttexture2d<A1>,\\r\\n\t\ttexture2d<A2>,\\r\\n\t\ttexture2d<A3>,\\r\\n\t\ttexture2d<A4>,\\r\\n\t\ttexture2d<A5>,\\r\\n\t\ttexture2d<A6>\\r\\n\t];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t\tattachment5: A5;\\r\\n\t\t\tattachment6: A6;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\ntype AttachmentBindings8<A0, A1, A2, A3, A4, A5, A6, A7> = {\\r\\n\tattachments: [\\r\\n\t\ttexture2d<A0>,\\r\\n\t\ttexture2d<A1>,\\r\\n\t\ttexture2d<A2>,\\r\\n\t\ttexture2d<A3>,\\r\\n\t\ttexture2d<A4>,\\r\\n\t\ttexture2d<A5>,\\r\\n\t\ttexture2d<A6>,\\r\\n\t\ttexture2d<A7>\\r\\n\t];\\r\\n\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\tfragment: shader<\\r\\n\t\tShaderInput,\\r\\n\t\t{\\r\\n\t\t\tattachment0: A0;\\r\\n\t\t\tattachment1: A1;\\r\\n\t\t\tattachment2: A2;\\r\\n\t\t\tattachment3: A3;\\r\\n\t\t\tattachment4: A4;\\r\\n\t\t\tattachment5: A5;\\r\\n\t\t\tattachment6: A6;\\r\\n\t\t\tattachment7: A7;\\r\\n\t\t}\\r\\n\t>;\\r\\n};\\r\\n\\r\\ntype DrawDescriptorBase = (\\r\\n\t| {\\r\\n\t\t\tmesh: Mesh;\\r\\n\t  }\\r\\n\t| {\\r\\n\t\t\tindexBuffer: buffer<uint>;\\r\\n\t  }\\r\\n\t| {}\\r\\n) & {\\r\\n\tindirect?: buffer<uint> | buffer<atomic<uint>>;\\r\\n\tindirectOffset?: int | uint;\\r\\n\tdepth?: texture2d<float>;\\r\\n\tdepthOnly?: boolean;\\r\\n\tdepthTest?: boolean;\\r\\n\tdepthCompare?:\\r\\n\t\t| 'greater'\\r\\n\t\t| 'less'\\r\\n\t\t| 'equal'\\r\\n\t\t| 'greater_equal'\\r\\n\t\t| 'less_equal'\\r\\n\t\t| 'not_equal'\\r\\n\t\t| 'always'\\r\\n\t\t| 'never';\\r\\n\tbackfaceCulling?: boolean;\\r\\n\tinstances?: int;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Normal:\\r\\n * ```shadeup\\r\\n * drawAdvanced({\\r\\n *\tmesh: mesh::box(0.xyz, 100.xyz),\\r\\n *\tvertex: shader {\\r\\n *\t\t// ...\\r\\n *\t},\\r\\n *\tfragment: shader {\\r\\n *  \t// ...\\r\\n *\t},\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * Instancing:\\r\\n * ```shadeup\\r\\n * drawAdvanced({\\r\\n *\tmesh: mesh::box(0.xyz, 100.xyz),\\r\\n *\tvertex: shader {\\r\\n *\t\tin.instanceIndex;\\r\\n *\t},\\r\\n *\tfragment: shader {\\r\\n *  \t// ...\\r\\n *\t},\\r\\n *  instances: 100,\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * Indirect:\\r\\n * ```shadeup\\r\\n * let mesh = mesh::box(0.xyz, 100.xyz);\\r\\n *\\r\\n * let indirectBuffer = buffer<uint>(5);\\r\\n * indirectBuffer[0] = uint(m.getTriangles().len()); // indexCount\\r\\n * indirectBuffer[1] = 1; // instanceCount\\r\\n * indirectBuffer[2] = 0; // firstIndex\\r\\n * indirectBuffer[3] = 0; // vertexOffset\\r\\n * indirectBuffer[4] = 0; // firstInstance\\r\\n *\\r\\n * drawAdvanced({\\r\\n *\tmesh: mesh::box(0.xyz, 100.xyz),\\r\\n *\tvertex: shader {\\r\\n *\t\t// ...\\r\\n *\t},\\r\\n *\tfragment: shader {\\r\\n *  \t// ...\\r\\n *\t},\\r\\n *  indirect: indirectBuffer,\\r\\n * });\\r\\n * ```\\r\\n *\\r\\n * Attachments:\\r\\n * ```shadeup\\r\\n * let mesh = mesh::box(0.xyz, 100.xyz);\\r\\n * let color = texture2d<float4>(100.xy);\\r\\n * let normal = texture2d<float3>(100.xy);\\r\\n * let depth = texture2d<float>(100.xy, \\\"depth\\\");\\r\\n *\\r\\n * drawAdvanced({\\r\\n * \tmesh: mesh,\\r\\n * \tvertex: shader {\\r\\n * \t // ...\\r\\n * \t},\\r\\n * \tfragment: shader {\\r\\n * \t out.attachment0 = float4(1, 0, 0, 1);\\r\\n * \t out.attachment1 = float3(0, 0, 1);\\r\\n * \t},\\r\\n * \tdepth: depth, // Override depth buffer\\r\\n * \tattachments: [color, normal],\\r\\n * });\\r\\n */\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5, A6, A7>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings8<A0, A1, A2, A3, A4, A5, A6, A7>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5, A6>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings7<A0, A1, A2, A3, A4, A5, A6>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings6<A0, A1, A2, A3, A4, A5>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3, A4>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings5<A0, A1, A2, A3, A4>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2, A3>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings4<A0, A1, A2, A3>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1, A2>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings3<A0, A1, A2>\\r\\n): void;\\r\\nexport function drawAdvanced<A0, A1>(\\r\\n\tdescriptor: DrawDescriptorBase & AttachmentBindings2<A0, A1>\\r\\n): void;\\r\\nexport function drawAdvanced<A0>(descriptor: DrawDescriptorBase & AttachmentBindings1<A0>): void;\\r\\n\\r\\nexport function drawAdvanced(\\r\\n\tdescriptor: DrawDescriptorBase & {\\r\\n\t\tvertex: shader<ShaderInput, ShaderOutput>;\\r\\n\t\tfragment: shader<ShaderInput, ShaderOutput>;\\r\\n\t}\\r\\n): void;\\r\\nexport function drawAdvanced(descriptor: any): void {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_advanced(descriptor);\\r\\n}\\r\\n\\r\\nexport function draw(\\r\\n\tgeometry: Mesh,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n): void;\\r\\nexport function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\nexport function draw(\\r\\n\tfirst: Mesh | DrawDescriptorBase | shader<ShaderInput, ShaderOutput>,\\r\\n\tsecond?: shader<ShaderInput, ShaderOutput> | number,\\r\\n\tthird?: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tif ('vertices' in first && second && third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw_geometry(first, second, third);\\r\\n\t} else if (first && !second && !third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport function drawFullscreen(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\\r\\nexport function drawFullscreen(\\r\\n\tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\\r\\n\tsecond?: shader<ShaderInput, ShaderOutput>,\\r\\n\tthird?: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tif ('vertices' in first && second && third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw_geometry(first, second, third);\\r\\n\t} else if (first && !second && !third) {\\r\\n\t\tgetShadeupLocalContext().__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\r\\n\t}\\r\\n}\\r\\n\\r\\nexport function drawAlt2(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void {}\\r\\n\\r\\nexport function drawCount(\\r\\n\ttriCount: number,\\r\\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\\r\\n\tpixelShader: shader<ShaderInput, ShaderOutput>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\r\\n}\\r\\n\\r\\nexport function drawAttributes<T extends { [key: string]: any }, X, Y>(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tbuffers:\\r\\n\t\t| Map<keyof T, buffer<any>>\\r\\n\t\t| {\\r\\n\t\t\t\t[key in keyof T]: buffer<T[key]>;\\r\\n\t\t  },\\r\\n\tvertexShader: shader<T, X>,\\r\\n\tpixelShader: shader<X, Y>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_attributes(\\r\\n\t\tindexBuffer,\\r\\n\t\tbuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\nexport function computeIndirect(\\r\\n\tindirectBuffer: buffer<uint> | buffer<atomic<uint>>,\\r\\n\tindirectOffset: int,\\r\\n\tcomputeShader: shader<any, any, any>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_compute_indirect(\\r\\n\t\tindirectBuffer,\\r\\n\t\tindirectOffset,\\r\\n\t\tcomputeShader\\r\\n\t);\\r\\n}\\r\\n\";\n  const drawCount = \"import { getShadeupLocalContext } from '/_std/context';\\r\\nimport { buffer } from '/_std/buffer';\\r\\nimport { float4, float3, float, float2, bool, int, uint } from '/std_math';\\r\\n\\r\\nexport function drawCount(triCount: number, vertexShader: shader, pixelShader: shader) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\r\\n}\\r\\n\";\n  const drawAttributes = \"import { getShadeupLocalContext } from '/_std/context';\\r\\nimport { buffer } from '/_std/buffer';\\r\\nimport { float4, float3, float, float2, bool, int, uint } from '/std_math';\\r\\n\\r\\nexport function drawAttributes<T extends { [key: string]: any }, X, Y>(\\r\\n\tindexBuffer: buffer<uint>,\\r\\n\tbuffers:\\r\\n\t\t| Map<keyof T, buffer<any>>\\r\\n\t\t| {\\r\\n\t\t\t\t[key in keyof T]: buffer<T[key]>;\\r\\n\t\t  },\\r\\n\tvertexShader: shader<T, X>,\\r\\n\tpixelShader: shader<X, Y>\\r\\n) {\\r\\n\tgetShadeupLocalContext().__shadeup_dispatch_draw_attributes(\\r\\n\t\tindexBuffer,\\r\\n\t\tbuffer,\\r\\n\t\tvertexShader,\\r\\n\t\tpixelShader\\r\\n\t);\\r\\n}\\r\\n\";\n  const paint = \"type GraphicsAdapter = {\\r\\n\tdrawImage(image: HTMLCanvasElement): void;\\r\\n\taddEventListener(name: string, fn: (...args: any) => void): void;\\r\\n\tactivatePaintContext(): void;\\r\\n};\\r\\nimport type { float4, float2 } from './types';\\r\\n\\r\\nexport class PaintingContext {\\r\\n\tmarkDirtyCallback: () => void = () => {};\\r\\n\tconstructor(canvas: HTMLCanvasElement, gl: GraphicsAdapter | null) {\\r\\n\t\tif (!gl) return;\\r\\n\t\tthis.__gl = gl;\\r\\n\t\tthis.__canvas = canvas;\\r\\n\t\tthis.__offscreen_canvas = document.createElement('canvas');\\r\\n\t\tthis.__offscreen_canvas.width = canvas.width;\\r\\n\t\tthis.__offscreen_canvas.height = canvas.height;\\r\\n\t\t// document.body.appendChild(this.__offscreen_canvas);\\r\\n\t\tthis.__ctx = this.__offscreen_canvas.getContext('2d', {\\r\\n\t\t\twillReadFrequently: true\\r\\n\t\t})!;\\r\\n\t\tthis.__offscreen_canvas.style.position = 'absolute';\\r\\n\t\tthis.__offscreen_canvas.style.zIndex = '10';\\r\\n\t\t// document.body.appendChild(this.__offscreen_canvas);\\r\\n\t\tthis.__setColor([0, 0, 0, 1] as float4);\\r\\n\\r\\n\t\tgl.addEventListener('context', (toContext: string) => {\\r\\n\t\t\tif (toContext == 'draw') {\\r\\n\t\t\t\tthis.flush();\\r\\n\t\t\t}\\r\\n\t\t});\\r\\n\\r\\n\t\tgl.addEventListener('flush', () => {\\r\\n\t\t\tthis.flush();\\r\\n\t\t});\\r\\n\t}\\r\\n\\r\\n\tflush() {\\r\\n\t\tif (!this.__gl) return;\\r\\n\t\tif (!this.__canvas) return;\\r\\n\t\tif (!this.__offscreen_canvas) return;\\r\\n\\r\\n\t\tif (!this.stagedChanges) return;\\r\\n\\r\\n\t\tif (this.fastPoints) this.flushPoints();\\r\\n\\r\\n\t\tthis.__gl.drawImage(this.__offscreen_canvas);\\r\\n\t\tthis.stagedChanges = false;\\r\\n\\r\\n\t\tif (\\r\\n\t\t\tthis.__offscreen_canvas.width != this.__canvas.width ||\\r\\n\t\t\tthis.__offscreen_canvas.height != this.__canvas.height\\r\\n\t\t) {\\r\\n\t\t\tthis.__offscreen_canvas.width = this.__canvas.width;\\r\\n\t\t\tthis.__offscreen_canvas.height = this.__canvas.height;\\r\\n\t\t}\\r\\n\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tprivate __ctx: CanvasRenderingContext2D | null = null;\\r\\n\tprivate __gl: GraphicsAdapter | null = null;\\r\\n\tprivate __offscreen_canvas: HTMLCanvasElement | null = null;\\r\\n\\r\\n\tprivate __program: WebGLProgram | null = null;\\r\\n\\r\\n\tprivate stagedChanges: boolean = false;\\r\\n\tprivate dirty: boolean = false;\\r\\n\\r\\n\tprivate fastPoints: boolean = false;\\r\\n\tprivate fastPointsBuffer: ImageData | null = null;\\r\\n\\r\\n\tprivate __beforeDraw() {\\r\\n\t\tif (!this.__offscreen_canvas) return;\\r\\n\t\tif (!this.__ctx) return;\\r\\n\t\tif (!this.__canvas) return;\\r\\n\t\tthis.markDirtyCallback();\\r\\n\t\tthis.__gl?.activatePaintContext();\\r\\n\\r\\n\t\tif (!this.stagedChanges) {\\r\\n\t\t\tthis.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\\r\\n\\r\\n\t\t\tthis.__ctx.drawImage(this.__canvas, 0, 0);\\r\\n\\r\\n\t\t\tlet color = this.__currentColor;\\r\\n\t\t\tthis.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\t\tcolor[3]\\r\\n\t\t\t})`;\\r\\n\t\t\tthis.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\t\tcolor[3]\\r\\n\t\t\t})`;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tprivate __afterDraw() {\\r\\n\t\tlet gl = this.__gl;\\r\\n\t\tthis.dirty = true;\\r\\n\t\tthis.stagedChanges = true;\\r\\n\t}\\r\\n\\r\\n\tprivate __currentColor: number[] | null = null;\\r\\n\tprivate __setColor(color?: float4) {\\r\\n\t\tif (!this.__ctx || !color) return;\\r\\n\\r\\n\t\tif (\\r\\n\t\t\tthis.__currentColor &&\\r\\n\t\t\tthis.__currentColor[0] == color[0] &&\\r\\n\t\t\tthis.__currentColor[1] == color[1] &&\\r\\n\t\t\tthis.__currentColor[2] == color[2] &&\\r\\n\t\t\tthis.__currentColor[3] == color[3]\\r\\n\t\t)\\r\\n\t\t\treturn;\\r\\n\\r\\n\t\tthis.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\tcolor[3]\\r\\n\t\t})`;\\r\\n\t\tthis.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\tcolor[3]\\r\\n\t\t})`;\\r\\n\\r\\n\t\tthis.__currentColor = [color[0], color[1], color[2], color[3]];\\r\\n\t}\\r\\n\\r\\n\tfillRect(pos: float2, size: float2, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tfillCircle(pos: float2, radius: number, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\\r\\n\t\tthis.__ctx.fill();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tfillArc(pos: float2, radius: number, startAngle: number, endAngle: number, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\\r\\n\t\tthis.__ctx.fill();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tline(pos1: float2, pos2: float2, color?: float4, width: number = 1) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.moveTo(pos1[0], pos1[1]);\\r\\n\\r\\n\t\tthis.__ctx.lineTo(pos2[0], pos2[1]);\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tcircle(pos: float2, radius: number, color?: float4, width: number = 1) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tarc(\\r\\n\t\tpos: float2,\\r\\n\t\tradius: number,\\r\\n\t\tstartAngle: number,\\r\\n\t\tendAngle: number,\\r\\n\t\tcolor?: float4,\\r\\n\t\twidth: number = 1\\r\\n\t) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\ttext(pos: float2, text: string, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.fillText(text, pos[0], pos[1]);\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tstartPath(pos: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.flushPoints();\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.moveTo(pos[0], pos[1]);\\r\\n\t}\\r\\n\\r\\n\tlineTo(pos: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineTo(pos[0], pos[1]);\\r\\n\t}\\r\\n\\r\\n\tstrokePath(color?: float4, width: number = 1) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tfillPath(color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.fill();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tsetStrokeWidth(width: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineWidth = width;\\r\\n\t}\\r\\n\\r\\n\tsetFont(font: string) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.font = font;\\r\\n\t}\\r\\n\\r\\n\tsetFontSize(size: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.font = `${size}px ${this.__ctx.font.split(' ').slice(1).join(' ')}`;\\r\\n\t}\\r\\n\\r\\n\tsetTextAlign(align: CanvasTextAlign) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.textAlign = align;\\r\\n\t}\\r\\n\\r\\n\tsetTextBaseline(baseline: CanvasTextBaseline) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.textBaseline = baseline;\\r\\n\t}\\r\\n\\r\\n\tsetLineCap(cap: 'butt' | 'round' | 'square') {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineCap = cap;\\r\\n\t}\\r\\n\\r\\n\tsetLineJoin(join: CanvasLineJoin) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineJoin = join;\\r\\n\t}\\r\\n\\r\\n\tsetMiterLimit(limit: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.miterLimit = limit;\\r\\n\t}\\r\\n\\r\\n\tsetShadowColor(color: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.shadowColor = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\\r\\n\t\t\tcolor[3]\\r\\n\t\t})`;\\r\\n\t}\\r\\n\\r\\n\tsetShadowBlur(blur: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.shadowBlur = blur;\\r\\n\t}\\r\\n\\r\\n\tsetShadowOffset(offset: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.shadowOffsetX = offset[0];\\r\\n\t\tthis.__ctx.shadowOffsetY = offset[1];\\r\\n\t}\\r\\n\\r\\n\tsetGlobalAlpha(alpha: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.globalAlpha = alpha;\\r\\n\t}\\r\\n\\r\\n\tsetGlobalCompositeOperation(op: string) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.globalCompositeOperation = op as any;\\r\\n\t}\\r\\n\\r\\n\tsetImageSmoothingEnabled(enabled: boolean) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.imageSmoothingEnabled = enabled;\\r\\n\t}\\r\\n\\r\\n\tsetImageSmoothingQuality(quality: ImageSmoothingQuality) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.imageSmoothingQuality = quality;\\r\\n\t}\\r\\n\\r\\n\tsetLineDash(dash: number[]) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.setLineDash(dash);\\r\\n\t}\\r\\n\\r\\n\tsetLineDashOffset(offset: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.lineDashOffset = offset;\\r\\n\t}\\r\\n\\r\\n\tsetTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.setTransform(a, b, c, d, e, f);\\r\\n\t}\\r\\n\\r\\n\tresetTransform() {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.resetTransform();\\r\\n\t}\\r\\n\\r\\n\tscale(v: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.scale(v[0], v[1]);\\r\\n\t}\\r\\n\\r\\n\trotate(angle: number) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.rotate(angle);\\r\\n\t}\\r\\n\\r\\n\ttranslate(v: float2) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__ctx.translate(v[0], v[1]);\\r\\n\t}\\r\\n\\r\\n\tprivate flushPoints() {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\t\tif (!this.fastPoints) return;\\r\\n\t\tif (!this.fastPointsBuffer) return;\\r\\n\\r\\n\t\tthis.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\\r\\n\\r\\n\t\tthis.fastPoints = false;\\r\\n\t\tthis.fastPointsBuffer = null;\\r\\n\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tprivate pointsCounter: number = 0;\\r\\n\tprivate cacheSize: [number, number] = [0, 0];\\r\\n\tpoint(pos: float2, color?: float4) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.pointsCounter++;\\r\\n\\r\\n\t\tthis.__beforeDraw();\\r\\n\t\tif (this.pointsCounter > 10) {\\r\\n\t\t\tif (!this.fastPoints) {\\r\\n\t\t\t\tthis.fastPoints = true;\\r\\n\t\t\t\tthis.cacheSize = [this.__offscreen_canvas!.width, this.__offscreen_canvas!.height];\\r\\n\t\t\t\tthis.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tif (!this.fastPointsBuffer) return;\\r\\n\\r\\n\t\t\tlet x = Math.floor(pos[0]);\\r\\n\t\t\tlet y = Math.floor(pos[1]);\\r\\n\\r\\n\t\t\tlet index = (y * this.cacheSize[0] + x) * 4;\\r\\n\\r\\n\t\t\tif (!color) {\\r\\n\t\t\t\tcolor = this.__currentColor;\\r\\n\t\t\t}\\r\\n\t\t\tlet oldColorx = this.fastPointsBuffer.data[index] / 255;\\r\\n\t\t\tlet oldColory = this.fastPointsBuffer.data[index + 1] / 255;\\r\\n\t\t\tlet oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\\r\\n\t\t\tlet oldColora = this.fastPointsBuffer.data[index + 3] / 255;\\r\\n\\r\\n\t\t\tthis.fastPointsBuffer.data[index] =\\r\\n\t\t\t\tcolor[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\\r\\n\t\t\tthis.fastPointsBuffer.data[index + 1] =\\r\\n\t\t\t\tcolor[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\\r\\n\t\t\tthis.fastPointsBuffer.data[index + 2] =\\r\\n\t\t\t\tcolor[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\\r\\n\t\t\tthis.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\\r\\n\t\t} else {\\r\\n\t\t\tthis.__setColor(color);\\r\\n\t\t\tthis.__ctx.fillRect(pos[0], pos[1], 1, 1);\\r\\n\t\t}\\r\\n\t\tthis.__afterDraw();\\r\\n\t}\\r\\n\\r\\n\tvector(\\r\\n\t\tpos: float2,\\r\\n\t\tdir: float2,\\r\\n\t\tcolor: float4 = [0.9803921568627451, 0.8, 0.08235294117647059, 1] as float4,\\r\\n\t\twidth: number = 4\\r\\n\t) {\\r\\n\t\tif (!this.__ctx || (dir[0] == 0 && dir[1] == 0)) return;\\r\\n\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.setStrokeWidth(width);\\r\\n\t\tthis.__ctx.moveTo(pos[0], pos[1]);\\r\\n\t\tthis.__ctx.lineCap = 'round';\\r\\n\\r\\n\t\tthis.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\\r\\n\t\tthis.__ctx.stroke();\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\\r\\n\t\t// Arrows\\r\\n\t\tlet arrowSize = 20;\\r\\n\t\tlet arrowAngle = Math.PI / 5;\\r\\n\t\tlet dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\\r\\n\t\tlet arrow1 = [\\r\\n\t\t\tMath.cos(dirAngle + arrowAngle) * arrowSize,\\r\\n\t\t\tMath.sin(dirAngle + arrowAngle) * arrowSize\\r\\n\t\t];\\r\\n\t\tlet arrow2 = [\\r\\n\t\t\tMath.cos(dirAngle - arrowAngle) * arrowSize,\\r\\n\t\t\tMath.sin(dirAngle - arrowAngle) * arrowSize\\r\\n\t\t];\\r\\n\t\tthis.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\\r\\n\t\tthis.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\\r\\n\t\tthis.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\\r\\n\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n\\r\\n\tgrid(\\r\\n\t\tcenter: float2,\\r\\n\t\tcount: float2,\\r\\n\t\tgap: float2,\\r\\n\t\tcolor: float4 = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1] as float4,\\r\\n\t\twidth: number = 2\\r\\n\t) {\\r\\n\t\tif (!this.__ctx) return;\\r\\n\\r\\n\t\tthis.__beforeDraw();\\r\\n\\r\\n\t\tthis.__setColor(color);\\r\\n\t\tthis.__ctx.beginPath();\\r\\n\t\tthis.setStrokeWidth(width);\\r\\n\\r\\n\t\tlet start = [\\r\\n\t\t\tcenter[0] - (count[0] / 2) * gap[0],\\r\\n\t\t\tcenter[1] - (count[1] / 2) * gap[1]\\r\\n\t\t] as float2;\\r\\n\\r\\n\t\tfor (let i = 0; i <= count[0]; i++) {\\r\\n\t\t\tthis.__ctx.moveTo(start[0] + i * gap[0], start[1]);\\r\\n\t\t\tthis.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i <= count[1]; i++) {\\r\\n\t\t\tthis.__ctx.moveTo(start[0], start[1] + i * gap[1]);\\r\\n\t\t\tthis.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\\r\\n\t\t}\\r\\n\\r\\n\t\tthis.__ctx.stroke();\\r\\n\\r\\n\t\tthis.__afterDraw();\\r\\n\t\tthis.pointsCounter = 0;\\r\\n\t}\\r\\n}\\r\\n\\r\\ndeclare global {\\r\\n\tconst paint: PaintingContext;\\r\\n}\\r\\n\";\n  const mesh = \"\\r\\npub struct Mesh {\\r\\n\tvertices: float3[];\\r\\n\ttriangles: int[];\\r\\n\tnormals: float3[];\\r\\n\ttangents: float3[];\\r\\n\tbitangents: float3[];\\r\\n\tuvs: float2[];\\r\\n\tcolors: float4[];\\r\\n\tpub symbol: any;\\r\\n}\\r\\n\\r\\nimpl Mesh {\\r\\n\tpub fn rect(self, size: float2) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tself.vertices.push((-size.x / 2, -size.y / 2, 0));\\r\\n\t\tself.vertices.push((size.x / 2, -size.y / 2, 0));\\r\\n\t\tself.vertices.push((size.x / 2, size.y / 2, 0));\\r\\n\t\tself.vertices.push((-size.x / 2, size.y / 2, 0));\\r\\n\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\t\tself.triangles.push(index + 1);\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\t\tself.triangles.push(index + 3);\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\t\tself.normals.push((0, 0, 1));\\r\\n\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\t\tself.tangents.push((1, 0, 0));\\r\\n\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\t\tself.bitangents.push((0, 1, 0));\\r\\n\\r\\n\t\tself.uvs.push((0, 0));\\r\\n\t\tself.uvs.push((1, 0));\\r\\n\t\tself.uvs.push((0, 1));\\r\\n\t\tself.uvs.push((1, 1));\\r\\n\t}\\r\\n\\r\\n\tpub fn quad(self, position: float3, direction: float3, right: float3, size: float2) {\\r\\n\t\tlet up = normalize(cross(right, direction));\\r\\n\\r\\n\t\tlet halfSize = size / 2.0;\\r\\n\\r\\n\t\tlet index = self.vertices.len();\\r\\n\t\t\\r\\n\t\tself.vertices.push(position + right * -halfSize.x + up * halfSize.y);\\r\\n\t\tself.vertices.push(position + right * halfSize.x + up * halfSize.y);\\r\\n\t\tself.vertices.push(position + right * halfSize.x + up * -halfSize.y);\\r\\n\t\tself.vertices.push(position + right * -halfSize.x + up * -halfSize.y);\\r\\n\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\t\tself.triangles.push(index + 1);\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\\r\\n\t\tself.triangles.push(index + 2);\\r\\n\t\tself.triangles.push(index + 3);\\r\\n\t\tself.triangles.push(index + 0);\\r\\n\\r\\n\t\tself.normals.push(direction);\\r\\n\t\tself.normals.push(direction);\\r\\n\t\tself.normals.push(direction);\\r\\n\t\tself.normals.push(direction);\\r\\n\\r\\n\t\tself.tangents.push(right);\\r\\n\t\tself.tangents.push(right);\\r\\n\t\tself.tangents.push(right);\\r\\n\t\tself.tangents.push(right);\\r\\n\\r\\n\t\tself.bitangents.push(up);\\r\\n\t\tself.bitangents.push(up);\\r\\n\t\tself.bitangents.push(up);\\r\\n\t\tself.bitangents.push(up);\\r\\n\\r\\n\t\tself.uvs.push((1, 0));\\r\\n\t\tself.uvs.push((0, 0));\\r\\n\t\tself.uvs.push((0, 1));\\r\\n\t\tself.uvs.push((1, 1));\\r\\n\t}\\r\\n\\r\\n\tpub fn box(self, size: float3) {\\r\\n\t\tlet halfSize = size / 2.0;\\r\\n\\r\\n\t\tconst UP = (0, 1.0, 0);\\r\\n\t\tconst DOWN = (0, -1.0, 0);\\r\\n\t\tconst LEFT = (-1.0, 0, 0);\\r\\n\t\tconst RIGHT = (1.0, 0, 0);\\r\\n\t\tconst FORWARD = (0, 0, 1.0);\\r\\n\t\tconst BACK = (0, 0, -1.0);\\r\\n\\r\\n\t\t// Up\\r\\n\t\tself.quad(UP * halfSize.y, UP, LEFT, (size.x, size.z));\\r\\n\\r\\n\t\t// Down\\r\\n\t\tself.quad(DOWN * halfSize.y, DOWN, RIGHT, (size.x, size.z));\\r\\n\\r\\n\t\t// Left\\r\\n\t\tself.quad(LEFT * halfSize.x, LEFT, BACK, (size.z, size.y));\\r\\n\\r\\n\t\t// Right\\r\\n\t\tself.quad(RIGHT * halfSize.x, RIGHT, FORWARD, (size.z, size.y));\\r\\n\\r\\n\t\t// Forward\\r\\n\t\tself.quad(FORWARD * halfSize.z, FORWARD, LEFT, (size.x, size.y));\\r\\n\\r\\n\t\t// Back\\r\\n\t\tself.quad(BACK * halfSize.z, BACK, RIGHT, (size.x, size.y));\\r\\n\t}\\r\\n\\r\\n\tpub fn rectAt(self, minPos: float2, maxPos: float2) {\\r\\n\t\tself.rect(maxPos - minPos);\\r\\n\t\tself.translate((minPos, 0));\\r\\n\t}\\r\\n\\r\\n\tpub fn circle(self, pos: float2, radius: float, vertices: int = 32) {\\r\\n\\r\\n\t}\\r\\n\\r\\n\tpub fn uvSphere(self, pos: float3, radius: float, vertices: int = 32, rings: int = 16) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tlet verticesPerRing = vertices + 1;\\r\\n\\r\\n\t\tfor (let i = 0; i <= rings; i++) {\\r\\n\t\t\tlet y = i / float(rings);\\r\\n\t\t\tlet angleY = y * PI;\\r\\n\\r\\n\t\t\tlet posY = cos(angleY);\\r\\n\t\t\tlet radiusY = sin(angleY);\\r\\n\\r\\n\t\t\tfor (let j = 0; j <= vertices; j++) {\\r\\n\t\t\t\tlet x = j / float(vertices);\\r\\n\t\t\t\tlet angleX = x * PI * 2;\\r\\n\\r\\n\t\t\t\tlet posX = cos(angleX);\\r\\n\t\t\t\tlet posZ = sin(angleX);\\r\\n\\r\\n\t\t\t\tself.vertices.push((posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\\r\\n\t\t\t\tself.normals.push(normalize((posX * radiusY, posY, posZ * radiusY)));\\r\\n\t\t\t\t\\r\\n\t\t\t\tlet tangent = normalize((posZ, 0, -posX));\\r\\n\t\t\t\tlet bitangent = normalize(cross(self.normals[self.normals.len() - 1], tangent));\\r\\n\\r\\n\t\t\t\tself.tangents.push(tangent);\\r\\n\t\t\t\tself.bitangents.push(bitangent);\\r\\n\t\t\t\tself.uvs.push((x, y));\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < rings; i++) {\\r\\n\t\t\tfor (let j = 0; j < vertices; j++) {\\r\\n\t\t\t\tlet i0 = i * verticesPerRing + j;\\r\\n\t\t\t\tlet i1 = i0 + 1;\\r\\n\t\t\t\tlet i2 = i0 + verticesPerRing;\\r\\n\t\t\t\tlet i3 = i2 + 1;\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i0);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i3);\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn icoSphere(self, pos: float3, radius: float, subdivisions: int = 1) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tlet t = (1.0 + sqrt(5.0)) / 2.0;\\r\\n\\r\\n\t\tlet vertices: float3[] = [\\r\\n\t\t\t(-1, t, 0),\\r\\n\t\t\t(1, t, 0),\\r\\n\t\t\t(-1, -t, 0),\\r\\n\t\t\t(1, -t, 0),\\r\\n\t\t\t(0, -1, t),\\r\\n\t\t\t(0, 1, t),\\r\\n\t\t\t(0, -1, -t),\\r\\n\t\t\t(0, 1, -t),\\r\\n\t\t\t(t, 0, -1),\\r\\n\t\t\t(t, 0, 1),\\r\\n\t\t\t(-t, 0, -1),\\r\\n\t\t\t(-t, 0, 1),\\r\\n\t\t];\\r\\n\\r\\n\t\tlet triangles: int3[] = [\\r\\n\t\t\t(0, 11, 5),\\r\\n\t\t\t(0, 5, 1),\\r\\n\t\t\t(0, 1, 7),\\r\\n\t\t\t(0, 7, 10),\\r\\n\t\t\t(0, 10, 11),\\r\\n\t\t\t(1, 5, 9),\\r\\n\t\t\t(5, 11, 4),\\r\\n\t\t\t(11, 10, 2),\\r\\n\t\t\t(10, 7, 6),\\r\\n\t\t\t(7, 1, 8),\\r\\n\t\t\t(3, 9, 4),\\r\\n\t\t\t(3, 4, 2),\\r\\n\t\t\t(3, 2, 6),\\r\\n\t\t\t(3, 6, 8),\\r\\n\t\t\t(3, 8, 9),\\r\\n\t\t\t(4, 9, 5),\\r\\n\t\t\t(2, 4, 11),\\r\\n\t\t\t(6, 2, 10),\\r\\n\t\t\t(8, 6, 7),\\r\\n\t\t\t(9, 8, 1),\\r\\n\t\t];\\r\\n\\r\\n\t\tfor (let i = 0; i < vertices.len(); i++) {\\r\\n\t\t\tself.vertices.push(normalize(vertices[i]) * radius);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < triangles.len(); i++) {\\r\\n\t\t\tself.triangles.push(index + triangles[i].x);\\r\\n\t\t\tself.triangles.push(index + triangles[i].y);\\r\\n\t\t\tself.triangles.push(index + triangles[i].z);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < subdivisions; i++) {\\r\\n\t\t\tlet newTriangles: int[] = [];\\r\\n\\r\\n\t\t\tfor (let j = 0; j < self.triangles.len(); j += 3) {\\r\\n\t\t\t\tlet i0 = self.triangles[j + 0];\\r\\n\t\t\t\tlet i1 = self.triangles[j + 1];\\r\\n\t\t\t\tlet i2 = self.triangles[j + 2];\\r\\n\\r\\n\t\t\t\tlet v0 = self.vertices[i0];\\r\\n\t\t\t\tlet v1 = self.vertices[i1];\\r\\n\t\t\t\tlet v2 = self.vertices[i2];\\r\\n\\r\\n\t\t\t\tlet v3 = normalize((v0 + v1) / 2.0);\\r\\n\t\t\t\tlet v4 = normalize((v1 + v2) / 2.0);\\r\\n\t\t\t\tlet v5 = normalize((v2 + v0) / 2.0);\\r\\n\\r\\n\t\t\t\tlet i3 = self.vertices.len();\\r\\n\t\t\t\tlet i4 = i3 + 1;\\r\\n\t\t\t\tlet i5 = i3 + 2;\\r\\n\\r\\n\t\t\t\tself.vertices.push(v3 * radius);\\r\\n\t\t\t\tself.vertices.push(v4 * radius);\\r\\n\t\t\t\tself.vertices.push(v5 * radius);\\r\\n\\r\\n\t\t\t\tnewTriangles.push(i0, i3, i5);\\r\\n\t\t\t\tnewTriangles.push(i3, i1, i4);\\r\\n\t\t\t\tnewTriangles.push(i3, i4, i5);\\r\\n\t\t\t\tnewTriangles.push(i5, i4, i2);\\r\\n\t\t\t}\\r\\n\\r\\n\t\t\tself.triangles = newTriangles;\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tlet normal = normalize(self.vertices[i]);\\r\\n\t\t\tlet tangent = normalize((normal.z, 0, -normal.x));\\r\\n\t\t\tlet bitangent = normalize(cross(normal, tangent));\\r\\n\t\t\tself.normals.push(normal);\\r\\n\t\t\tself.tangents.push(tangent);\\r\\n\t\t\tself.bitangents.push(bitangent);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.triangles.len(); i += 3) {\\r\\n\t\t\tlet i0 = self.triangles[i + 0];\\r\\n\t\t\tlet i1 = self.triangles[i + 1];\\r\\n\t\t\tlet i2 = self.triangles[i + 2];\\r\\n\\r\\n\t\t\tlet v0 = self.vertices[i0];\\r\\n\t\t\tlet v1 = self.vertices[i1];\\r\\n\t\t\tlet v2 = self.vertices[i2];\\r\\n\\r\\n\t\t\tlet uv0 = float2(atan2(v0.z, v0.x) / PI / 2.0 + 0.5, asin(v0.y) / PI + 0.5);\\r\\n\t\t\tlet uv1 = float2(atan2(v1.z, v1.x) / PI / 2.0 + 0.5, asin(v1.y) / PI + 0.5);\\r\\n\t\t\tlet uv2 = float2(atan2(v2.z, v2.x) / PI / 2.0 + 0.5, asin(v2.y) / PI + 0.5);\\r\\n\\r\\n\t\t\tself.uvs.push(uv0);\\r\\n\t\t\tself.uvs.push(uv1);\\r\\n\t\t\tself.uvs.push(uv2);\\r\\n\t\t}\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn cylinder(self, pos: float3, radius: float, height: float, vertices: int = 32) {\\r\\n\t\t\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\\r\\n\t}\\r\\n\\r\\n\tpub fn capsule(self, pos: float3, radius: float, height: float, vertices: int = 32) {\\r\\n\t\t\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn cone(self, pos: float3, radius: float, height: float, vertices: int = 32) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn plane(self, pos: float3, size: float2, subdivisions: int2 = (2, 2)) {\\r\\n\t\tlet index = self.vertices.len();\\r\\n\\r\\n\t\tlet halfSize = size / 2.0;\\r\\n\\r\\n\t\tfor (let i = 0; i <= subdivisions.x; i++) {\\r\\n\t\t\tlet x = i / float(subdivisions.x);\\r\\n\t\t\tlet posX = x * size.x - halfSize.x;\\r\\n\\r\\n\t\t\tfor (let j = 0; j <= subdivisions.y; j++) {\\r\\n\t\t\t\tlet y = j / float(subdivisions.y);\\r\\n\t\t\t\tlet posY = y * size.y - halfSize.y;\\r\\n\\r\\n\t\t\t\tself.vertices.push((posX, 0, posY));\\r\\n\t\t\t\tself.normals.push((0, 1, 0));\\r\\n\t\t\t\tself.tangents.push((1, 0, 0));\\r\\n\t\t\t\tself.bitangents.push((0, 0, 1));\\r\\n\t\t\t\tself.uvs.push((x, y));\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < subdivisions.x; i++) {\\r\\n\t\t\tfor (let j = 0; j < subdivisions.y; j++) {\\r\\n\t\t\t\tlet i0 = i * (subdivisions.y + 1) + j;\\r\\n\t\t\t\tlet i1 = i0 + 1;\\r\\n\t\t\t\tlet i2 = i0 + subdivisions.y + 1;\\r\\n\t\t\t\tlet i3 = i2 + 1;\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i0);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\\r\\n\t\t\t\tself.triangles.push(index + i2);\\r\\n\t\t\t\tself.triangles.push(index + i1);\\r\\n\t\t\t\tself.triangles.push(index + i3);\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\tself.translate(pos);\\r\\n\t}\\r\\n\\r\\n\tpub fn translate(self, pos: float3): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] += pos;\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn rotate(self, quaternion: float4): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] = quat::rotate(quaternion, self.vertices[i]);\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.normals.len(); i++) {\\r\\n\t\t\tself.normals[i] = quat::rotate(quaternion, self.normals[i]);\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn transform(self, matrix: float4x4): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] = ((self.vertices[i], 1) * matrix).xyz;\\r\\n\t\t}\\r\\n\\r\\n\t\tfor (let i = 0; i < self.normals.len(); i++) {\\r\\n\t\t\tself.normals[i] = ((self.normals[i], 1) * matrix).xyz;\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn scale(self, scale: float3): Mesh {\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tself.vertices[i] *= scale;\\r\\n\t\t}\\r\\n\\r\\n\t\treturn self;\\r\\n\t}\\r\\n\\r\\n\tpub fn bounds(self): float3 {\\r\\n\t\tlet mn = 0.0.xyz;\\r\\n\t\tlet mx = 0.0.xyz;\\r\\n\\r\\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\\r\\n\t\t\tmn = min(mn, self.vertices[i]);\\r\\n\t\t\tmx = max(mx, self.vertices[i]);\\r\\n\t\t}\\r\\n\\r\\n\t\treturn mx - mn;\\r\\n\t}\\r\\n\\r\\n\tpub fn center(self): float3 {\\r\\n\t\tlet bounds = self.bounds();\\r\\n\t\treturn bounds / 2.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn new() {\\r\\n\t\treturn Mesh {\\r\\n\t\t\tvertices: [],\\r\\n\t\t\ttriangles: [],\\r\\n\t\t\ttangents: [],\\r\\n\t\t\tbitangents: [],\\r\\n\t\t\tnormals: [],\\r\\n\t\t\tuvs: [],\\r\\n\t\t\tcolors: [],\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn append(self, other: Mesh) {\\r\\n\t\tlet oldVertices = self.vertices.len();\\r\\n\t\tlet oldTriangles = self.triangles.len();\\r\\n\\r\\n\t\tself.vertices.append(other.vertices);\\r\\n\t\tself.triangles.append(other.triangles);\\r\\n\t\tself.normals.append(other.normals);\\r\\n\t\tself.tangents.append(other.tangents);\\r\\n\t\tself.bitangents.append(other.bitangents);\\r\\n\t\tself.uvs.append(other.uvs);\\r\\n\t\tself.colors.append(other.colors);\\r\\n\\r\\n\t\tfor (let i = oldTriangles; i < self.triangles.len(); i++) {\\r\\n\t\t\tself.triangles[i] += oldVertices;\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn getVertices(self) {\\r\\n\t\treturn self.vertices;\\r\\n\t}\\r\\n\\r\\n\tpub fn getTriangles(self) {\\r\\n\t\treturn self.triangles;\\r\\n\t}\\r\\n\\r\\n\tpub fn getNormals(self) {\\r\\n\t\treturn self.normals;\\r\\n\t}\\r\\n\\r\\n\tpub fn getTangents(self) {\\r\\n\t\treturn self.tangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn getBitangents(self) {\\r\\n\t\treturn self.bitangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn getUVs(self) {\\r\\n\t\treturn self.uvs;\\r\\n\t}\\r\\n\\r\\n\tpub fn getColors(self) {\\r\\n\t\treturn self.colors;\\r\\n\t}\\r\\n\\r\\n\tpub fn setVertices(self, vertices: float3[]) {\\r\\n\t\tself.vertices = vertices;\\r\\n\t}\\r\\n\\r\\n\tpub fn setTriangles(self, triangles: int[]) {\\r\\n\t\tself.triangles = triangles;\\r\\n\t}\\r\\n\\r\\n\tpub fn setNormals(self, normals: float3[]) {\\r\\n\t\tself.normals = normals;\\r\\n\t}\\r\\n\\r\\n\tpub fn setTangents(self, tangents: float3[]) {\\r\\n\t\tself.tangents = tangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn setBitangents(self, bitangents: float3[]) {\\r\\n\t\tself.bitangents = bitangents;\\r\\n\t}\\r\\n\\r\\n\tpub fn setUVs(self, uvs: float2[]) {\\r\\n\t\tself.uvs = uvs;\\r\\n\t}\\r\\n\\r\\n\tpub fn setColors(self, colors: float4[]) {\\r\\n\t\tself.colors = colors;\\r\\n\t}\\r\\n}\\r\\n\\r\\npub struct mesh {}\\r\\n\\r\\nimpl mesh {\\r\\n\tpub fn rect(pos: float2, size: float2) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.rectAt(pos, pos + size);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn box(pos: float3, size: float3) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.box(size);\\r\\n\t\tg.translate(pos);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn uvSphere(pos: float3, radius: float, vertices: int = 32, rings: int = 16) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.uvSphere(pos, radius, vertices, rings);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn icoSphere(pos: float3, radius: float, subdivisions: int = 1) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.icoSphere(pos, radius, subdivisions);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn plane(pos: float3, size: float2, subdivisions: int2 = (2, 2)) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.plane(pos, size, subdivisions);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Returns a [-1, 1] position for a given index.\\r\\n\t*/\\r\\n\tpub fn triangleFromIndex(index: int): float2 {\\r\\n\t\tif (index == 0) {\\r\\n\t\t\treturn float2(-1, 1);\\r\\n\t\t} else if (index == 1) {\\r\\n\t\t\treturn float2(1, 1);\\r\\n\t\t} else if (index == 2) {\\r\\n\t\t\treturn float2(0, -1);\\r\\n\t\t} else {\\r\\n\t\t\treturn float2(0, 0);\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn circleFromIndex(vertexIndex: int, vertices: int): float2 {\\r\\n\t\tvertexIndex = vertices - vertexIndex;\\r\\n\t\tlet numSlices = vertices / 3;\\r\\n\t\tlet sliceIndex = floor(float(vertexIndex) / float(vertices) * float(numSlices));\\r\\n\t\t\\r\\n\t\tlet incAngle = PI * 2.0 / float(numSlices);\\r\\n\t\tlet baseAngle = incAngle * float(sliceIndex);\\r\\n\\r\\n\t\tif (vertexIndex % 3 == 0) {\\r\\n\t\t\treturn float2(0, 0);\\r\\n\t\t} else if (vertexIndex % 3 == 1) {\\r\\n\t\t\treturn float2(cos(baseAngle), sin(baseAngle));\\r\\n\t\t} else {\\r\\n\t\t\treturn float2(cos(baseAngle + incAngle), sin(baseAngle + incAngle));\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn rectFromIndex(index: int, vertices: int): float2 {\\r\\n\t\tlet x = index % vertices;\\r\\n\t\tlet y = index / vertices;\\r\\n\\r\\n\t\treturn float2(x, y) / float(vertices) * 2.0 - 1.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn empty(numVerts: int = 0) -> Mesh {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tif (numVerts > 0) {\\r\\n\t\t\tg.setVertices(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setNormals(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setTangents(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setBitangents(array<float3>(numVerts, 0.xyz));\\r\\n\t\t\tg.setUVs(array<float2>(numVerts, 0.xy));\\r\\n\t\t\tg.setColors(array<float4>(numVerts, 0.xyzw));\\r\\n\t\t\tlet tris = array<int>(numVerts, 0);\\r\\n\t\t\tfor (let i = 0; i < numVerts; i++) {\\r\\n\t\t\t\ttris[i] = i;\\r\\n\t\t\t}\\r\\n\t\t\tg.setTriangles(tris);\\r\\n\t\t}\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\tpub fn join(mesh1: Mesh, mesh2: Mesh) {\\r\\n\t\tlet g = Mesh::new();\\r\\n\t\tg.append(mesh1);\\r\\n\t\tg.append(mesh2);\\r\\n\\r\\n\t\treturn g;\\r\\n\t}\\r\\n\\r\\n\t// pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\r\\n\t// \tlet g = Mesh::new();\\r\\n\t// \tg.cylinder(pos, radius, height, vertices);\\r\\n\\r\\n\t// \treturn g;\\r\\n\t// }\\r\\n\\r\\n\t// pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\r\\n\t// \tlet g = Mesh::new();\\r\\n\t// \tg.capsule(pos, radius, height, vertices);\\r\\n\\r\\n\t// \treturn g;\\r\\n\t// }\\r\\n\\r\\n\t// pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\r\\n\t// \tlet g = Mesh::new();\\r\\n\t// \tg.cone(pos, radius, height, vertices);\\r\\n\\r\\n\t// \treturn g;\\r\\n\t// }\\r\\n}\\r\\n\\r\\npub struct Material {\\r\\n\tpub baseColor: float4,\\r\\n\tpub color: texture2d<float4>,\\r\\n\t\\r\\n\tpub normal: texture2d<float4>,\\r\\n\tpub normalScale: float2,\\r\\n\tpub roughness: texture2d<float4>,\\r\\n\tpub emissive: texture2d<float4>,\\r\\n\t\\r\\n\t\\r\\n\tpub metallic: texture2d<float4>,\\r\\n}\\r\\n\\r\\npub struct ModelPart {\\r\\n\tpub mesh: Mesh,\\r\\n\tpub material: Material,\\r\\n\tpub transform: float4x4,\\r\\n}\\r\\n\\r\\npub struct Model {\\r\\n\tpub parts: ModelPart[],\\r\\n}\\r\\n\\r\\nwindow.SHD_Mesh = Mesh;\\r\\nwindow.SHD_Model = Model;\\r\\nwindow.SHD_ModelPart = ModelPart;\\r\\nwindow.SHD_Material = Material;\";\n  const geo = \"struct GeoSegment {\\r\\n\tstart: float2,\\r\\n\tend: float2,\\r\\n\tkind: int,\\r\\n\tarcRadius: float,\\r\\n\tarcStart: float,\\r\\n\tarcEnd: float\\r\\n}\\r\\n\\r\\nstruct GeoPoly {\\r\\n\tsegments: GeoSegment[]\\r\\n}\\r\\n\\r\\ntrait Geometry {\\r\\n\tfn area(self) -> float;\\r\\n\tfn perimeter(self) -> float;\\r\\n\tfn discretize(self) -> GeoPoly;\\r\\n}\\r\\n\\r\\nimpl Geometry for GeoPoly {\\r\\n\tpub fn area(self) -> float {\\r\\n\t\treturn 0.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn perimeter(self) -> float {\\r\\n\t\treturn 0.0;\\r\\n\t}\\r\\n\\r\\n\tpub fn discretize(self) -> GeoPoly {\\r\\n\t\treturn self.clone();\\r\\n\t}\\r\\n}\";\n  const textures = \"\";\n  const common = `\\r\nimport buffer from \"/_std/buffer\";\\r\nimport ui from \"/_std/ui\";\\r\nimport texture2d, texture3d from \"/_std/texture\";\\r\n\\r\n/**\\r\n* Converts a position in screenSpace to a position in 2d clipSpace. e.g. (0, screenSize.x) -> (-1, 1)\\r\n*/\\r\npub fn pixelToClip(pixelPosition: float2) -> float2 {\\r\n    let zeroToOne = pixelPosition / env.screenSize;\\r\n    let zeroToTwo = zeroToOne * 2.0;\\r\n    let clipSpace = zeroToTwo - 1.0.xy;\\r\n    return (clipSpace.x, clipSpace.y * -1.0);\\r\n}\\r\n\\r\n/**\\r\n* Value of PI to 35 decimal places.\\r\n*/\\r\nconst PI = 3.14159265358979323846264338327950288;\\r\n\\r\nexport {\\r\n    PI,\\r\n    buffer,\\r\n    texture2d,\\r\n    texture3d,\\r\n    ui\\r\n};\\r\n\\r\n/**\\r\n* Quaternion helpers\\r\n*/\\r\npub struct quat {}\\r\n\\r\nimpl quat {\\r\n    /**\\r\n    * Creates a quaternion from an angle and axis.\\r\n    */\\r\n\tpub fn fromAngleAxis(angle: float, axis: float3) -> float4 {\\r\n\t\treturn float4(axis * sin(angle * 0.5), cos(angle * 0.5));\\r\n\t}\\r\n\\r\n    /**\\r\n    * Multiplies two quaternions and returns the result.\\r\n    */\\r\n\tpub fn mul(a: float4, b: float4) -> float4 {\\r\n\t\treturn float4(\\r\n            b.xyz * a.w + a.xyz * b.w + cross(a.xyz, b.xyz),\\r\n            a.w * b.w - dot(a.xyz, b.xyz)\\r\n        );\\r\n\t}\\r\n\\r\n    /**\\r\n    * Rotates a vector by a quaternion and returns the rotated vector.\\r\n    */\\r\n    pub fn rotate(quaternion: float4, vector: float3) -> float3 {\\r\n        let q = quat::mul(quat::mul(quaternion, float4(vector, 0)), quat::conjugate(quaternion));\\r\n        return q.xyz;\\r\n    }\\r\n\\r\n    /**\\r\n    * Returns the conjugate of the input quaternion.\\r\n    *\\r\n    * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\\r\n    */\\r\n    pub fn conjugate(quaternion: float4) -> float4 {\\r\n        return float4(-quaternion.xyz, quaternion.w);\\r\n    }\\r\n\\r\n    /**\\r\n    * Returns the inverse of the input quaternion.\\r\n    */\\r\n    pub fn inverse(quaternion: float4) -> float4 {\\r\n        return quat::conjugate(quaternion) / dot(quaternion, quaternion);\\r\n    }\\r\n\\r\n    /**\\r\n    * Generates a quaternion that rotates from one direction to another via the shortest path.\\r\n    */\\r\n    pub fn fromToRotation(from: float3, to: float3) -> float4 {\\r\n        let q = 0.0.xyzw;\\r\n        let d = dot(from, to);\\r\n        if (d < -0.999999)\\r\n        {\\r\n            let right = float3(1, 0, 0);\\r\n            let up = float3(0, 1, 0);\\r\n            let tmp = cross(right, from);\\r\n            if (length(tmp) < 0.000001)\\r\n            {\\r\n                tmp = cross(up, from);\\r\n            }\\r\n            tmp = normalize(tmp);\\r\n            q = quat::fromAngleAxis(PI, tmp);\\r\n        } else if (d > 0.999999) {\\r\n            q = float4(0, 0, 0, 1);\\r\n        } else {\\r\n            q = float4(cross(from, to), 1 + d);\\r\n            q = normalize(q);\\r\n        }\\r\n        return q;\\r\n    }\\r\n\\r\n    \\r\n    pub fn diff(a: float4, b: float4) -> float {\\r\n        return a * quat::inverse(b);\\r\n    }\\r\n\\r\n\\r\n    /**\\r\n    * Generates lookAt quaternion.\\r\n    */\\r\n    pub fn lookAt(forward: float3, up: float3): float4 {\\r\n        let right = normalize(cross(forward, up));\\r\n        up = normalize(cross(forward, right));\\r\n\\r\n        let m00 = right.x;\\r\n        let m01 = right.y;\\r\n        let m02 = right.z;\\r\n        let m10 = up.x;\\r\n        let m11 = up.y;\\r\n        let m12 = up.z;\\r\n        let m20 = forward.x;\\r\n        let m21 = forward.y;\\r\n        let m22 = forward.z;\\r\n\\r\n        let num8 = (m00 + m11) + m22;\\r\n        let q = float4(0, 0, 0, 1);\\r\n        if (num8 > 0.0)\\r\n        {\\r\n            let num = sqrt(num8 + 1.0);\\r\n            let w = num * 0.5;\\r\n            num = 0.5 / num;\\r\n            let x = (m12 - m21) * num;\\r\n            let y = (m20 - m02) * num;\\r\n            let z = (m01 - m10) * num;\\r\n            return float4(x, y, z, w);\\r\n        }\\r\n\\r\n        if ((m00 >= m11) && (m00 >= m22))\\r\n        {\\r\n            let num7 = sqrt(((1.0 + m00) - m11) - m22);\\r\n            let num4 = 0.5 / num7;\\r\n            let x = 0.5 * num7;\\r\n            let y = (m01 + m10) * num4;\\r\n            let z = (m02 + m20) * num4;\\r\n            let w = (m12 - m21) * num4;\\r\n            return float4(x, y, z, w);\\r\n        }\\r\n\\r\n        if (m11 > m22)\\r\n        {\\r\n            let num6 = sqrt(((1.0 + m11) - m00) - m22);\\r\n            let num3 = 0.5 / num6;\\r\n            let x = (m10 + m01) * num3;\\r\n            let y = 0.5 * num6;\\r\n            let z = (m21 + m12) * num3;\\r\n            let w = (m20 - m02) * num3;\\r\n            return float4(x, y, z, w);\\r\n        }\\r\n\\r\n        let num5 = sqrt(((1.0 + m22) - m00) - m11);\\r\n        let num2 = 0.5 / num5;\\r\n        let x = (m20 + m02) * num2;\\r\n        let y = (m21 + m12) * num2;\\r\n        let z = 0.5 * num5;\\r\n        let w = (m01 - m10) * num2;\\r\n        return float4(x, y, z, w);\\r\n    }\\r\n\\r\n    /**\\r\n    * Smooth interpolation between two quaternions.\\r\n    */\\r\n    pub fn slerp(a: float4, b: float4, t: float) -> float4 {\\r\n        \\r\n        if (length(a) == 0.0)\\r\n        {\\r\n            if (length(b) == 0.0)\\r\n            {\\r\n                return float4(0, 0, 0, 1);\\r\n            }\\r\n            return b;\\r\n        } else if (length(b) == 0.0) {\\r\n            return a;\\r\n        }\\r\n\\r\n        let cosHalfAngle = a.w * b.w + dot(a.xyz, b.xyz);\\r\n\\r\n        if (cosHalfAngle >= 1.0 || cosHalfAngle <= -1.0)\\r\n        {\\r\n            return a;\\r\n        } else if (cosHalfAngle < 0.0) {\\r\n            b *= -1.0;\\r\n            cosHalfAngle = -cosHalfAngle;\\r\n        }\\r\n\\r\n        let blendA = 0.0;\\r\n        let blendB = 0.0;\\r\n        if (cosHalfAngle < 0.99)\\r\n        {\\r\n            let halfAngle = acos(cosHalfAngle);\\r\n            let sinHalfAngle = sin(halfAngle);\\r\n            let oneOverSinHalfAngle = 1.0 / sinHalfAngle;\\r\n            blendA = sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\\r\n            blendB = sin(halfAngle * t) * oneOverSinHalfAngle;\\r\n        }\\r\n        else\\r\n        {\\r\n            blendA = 1.0 - t;\\r\n            blendB = t;\\r\n        }\\r\n\\r\n        let result = float4(blendA * a.xyz + blendB * b.xyz, blendA * a.w + blendB * b.w);\\r\n        if (length(result) > 0.0)\\r\n        {\\r\n            return normalize(result);\\r\n        }\\r\n        return float4(0, 0, 0, 1);\\r\n    }\\r\n\\r\n    /**\\r\n    * Converts quaternion to matrix.\\r\n    */\\r\n    pub fn toMatrix(quaternion: float4) {\\r\n        let x = quaternion.x;\\r\n        let y = quaternion.y;\\r\n        let z = quaternion.z;\\r\n        let w = quaternion.w;\\r\n        let x2 = x + x;\\r\n        let y2 = y + y;\\r\n        let z2 = z + z;\\r\n        let xx = x * x2;\\r\n        let xy = x * y2;\\r\n        let xz = x * z2;\\r\n        let yy = y * y2;\\r\n        let yz = y * z2;\\r\n        let zz = z * z2;\\r\n        let wx = w * x2;\\r\n        let wy = w * y2;\\r\n        let wz = w * z2;\\r\n\\r\n\\r\n        let m = float4x4(\\r\n            1.0 - (yy + zz), xy + wz,         xz - wy,         0,\\r\n            xy - wz,         1.0 - (xx + zz), yz + wx,         0,\\r\n            xz + wy,         yz - wx,         1.0 - (xx + yy), 0,\\r\n            0,               0,               0,               1.0\\r\n        );\\r\n\\r\n        return m;\\r\n    }\\r\n\\r\n    pub fn fromEulerAngles(angles: float3) {\\r\n        let cr = cos(angles.x * 0.5);\\r\n        let sr = sin(angles.x * 0.5);\\r\n        let cp = cos(angles.y * 0.5);\\r\n        let sp = sin(angles.y * 0.5);\\r\n        let cy = cos(angles.z * 0.5);\\r\n        let sy = sin(angles.z * 0.5);\\r\n\\r\n        return float4(\\r\n            sr * cp * cy - cr * sp * sy,\\r\n            cr * sp * cy + sr * cp * sy,\\r\n            cr * cp * sy - sr * sp * cy,\\r\n            cr * cp * cy + sr * sp * sy\\r\n        )\\r\n    }\\r\n}\\r\n\\r\nwindow.shadeupQuat = quat;\\r\n\\r\n\\r\npub struct Camera2d {\\r\n    pub position: float2 = float2(0, 0);\\r\n    pub zoom: float = 1;\\r\n}\\r\n\\r\nimpl Camera2d {\\r\n    pub fn transform(self, position: float2) -> float2 {\\r\n        return (position - self.position) * self.zoom;\\r\n    }\\r\n\\r\n    /**\\r\n    * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\\r\n    */\\r\n    pub fn fit(self, size: float2) {\\r\n        let zoom = 1/min(env.screenSize.x / size.x, env.screenSize.y / size.y);\\r\n        let position = (env.screenSize - size * (1/zoom)) / 2;\\r\n        self.position = position;\\r\n        self.zoom = zoom;\\r\n    }\\r\n}\\r\n\\r\npub struct Camera {\\r\n    pub position: float3 = float3(0, 0, 0);\\r\n\tpub rotation: float4 = float4(1, 0, 0, 0);\\r\n    pub width: float = 1920;\\r\n    pub height: float = 1080;\\r\n\tpub fov: float = 90;\\r\n\tpub near: float = 1;\\r\n\tpub far: float = 100000;\\r\n}\\r\n\\r\nimpl Camera {\\r\n    pub fn getRay(self, screen: float2) {\\r\n        let aspect = self.width / self.height;\\r\n        let x = screen.x;\\r\n        let y = screen.y;\\r\n        let Px = (2 * ((x + 0.5) / self.width) - 1) * tan(self.fov / 2 * PI / 180) * aspect;\\r\n        let Py = (1 - 2 * ((y + 0.5) / self.height)) * tan(self.fov / 2 * PI / 180);\\r\n        \\r\n        return quat::rotate(self.rotation, normalize((Px, Py, -1)));\\r\n    }\\r\n\\r\n    pub fn getTransformToViewMatrix(self, position: float3, scale: float3, rotation: float4) {\\r\n        let rotationMatrix = quat::toMatrix(rotation);\\r\n        let translationMatrix = float4x4(\\r\n            scale.x, 0, 0, 0,\\r\n            0, scale.y, 0, 0,\\r\n            0, 0, scale.z, 0,\\r\n            position.x, position.y, position.z, 1\\r\n        );\\r\n        return self.getPerspectiveMatrix() * self.getWorldToViewMatrix() * translationMatrix * rotationMatrix;\\r\n    }\\r\n\\r\n    pub fn getCombinedMatrix(self) -> float4x4 {\\r\n        return self.getPerspectiveMatrix() * self.getWorldToViewMatrix();\\r\n    }\\r\n\\r\n    pub fn getCombinedMatrixReverseZ(self) -> float4x4 {\\r\n        return self.getPerspectiveMatrixReverseZ() * self.getWorldToViewMatrix();\\r\n    }\\r\n\\r\n    pub fn getWorldToViewMatrix(self) -> float4x4 {\\r\n        let rotationMatrix = quat::toMatrix(self.rotation);\\r\n        let translationMatrix = float4x4(\\r\n            1, 0, 0, 0,\\r\n            0, 1, 0, 0,\\r\n            0, 0, 1, 0,\\r\n            self.position.x, self.position.y, self.position.z, 1\\r\n        );\\r\n        return inverse(translationMatrix * rotationMatrix);\\r\n    }\\r\n\\r\n    pub fn getPerspectiveMatrixReverseZ(self) -> float4x4 {\\r\n        return matrix::perspectiveReverseZ(self.fov, self.width / self.height, self.near);\\r\n    }\\r\n\\r\n    pub fn getPerspectiveMatrix(self) -> float4x4 {\\r\n        return matrix::perspective(self.fov, self.width / self.height, self.near, self.far);\\r\n        // // let matrix = float4x4();\\r\n        // let far = self.far;\\r\n        // let near = self.near;\\r\n        // let aspect = self.width / self.height;\\r\n        // let fovRad = radians(self.fov);\\r\n        // let tanFov = tan( fovRad * 0.5 );\\r\n        // // matrix[0][0] = ;\\r\n        // // matrix[1][1] = 1.0 / tanFov;\\r\n        // // matrix[2][2] = -((far + near)/(far - near));\\r\n        // // matrix[3][2] = -((2*(near*far))/(far - near));\\r\n        // // matrix[2][3] = -1;\\r\n        // // matrix[3][3] = 0;\\r\n\\r\n        // let matrix = float4x4(\\r\n        //     1.0 / (tanFov * aspect), 0, 0, 0,\\r\n        //     0, 1.0 / tanFov, 0, 0,\\r\n        //     0, 0, -((far + near)/(far - near)), -1,\\r\n        //     0, 0, -((2*(near*far))/(far - near)), 0\\r\n        // );\\r\n\\r\n        // return matrix;\\r\n    }\\r\n\\r\n    pub fn getOrthographicMatrix(self) -> float4x4 {\\r\n        let matrix = float4x4();\\r\n        let far = self.far;\\r\n        let near = self.near;\\r\n\\r\n        let w = 1.0 / self.width;\\r\n        let h = 1.0 / self.height;\\r\n\\r\n        matrix[0][0] = w;\\r\n        matrix[1][1] = h;\\r\n        matrix[2][2] = -(2.0/(far - near));\\r\n        matrix[2][3] = ((far + near)/(far-near));\\r\n        //matrix[2][2] = -((far + near)/(far - near));\\r\n        //matrix[3][2] = -((2*(near*far))/(far - near));\\r\n        matrix[3][3] = 1.0;\\r\n\\r\n        return matrix;\\r\n    }\\r\n}\\r\n\\r\n\\r\nwindow._makeCamera = Camera;\\r\nwindow._makeCamera2d = Camera2d;\\r\n\\r\nfn easeA(aA1: float, aA2: float) -> float {\\r\n    return 1.0 - 3.0 * aA2 + 3.0 * aA1;\\r\n}\\r\n\\r\nfn easeB(aA1: float, aA2: float) -> float {\\r\n    return 3.0 * aA2 - 6.0 * aA1;\\r\n}\\r\n\\r\nfn easeC(aA1: float) -> float {\\r\n    return 3.0 * aA1;\\r\n}\\r\n\\r\nfn calcBezier(aT: float, aA1: float, aA2: float) -> float {\\r\n    return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT;\\r\n}\\r\n\\r\nfn getSlope(aT: float, aA1: float, aA2: float) -> float {\\r\n    return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1);\\r\n}\\r\n\\r\n// fn getTForX(aX: float, aA1: float, aA2: float) -> float {\\r\n//     let aGuessT = aX;\\r\n//     for (let i = 0; i <= 10; i++) {\\r\n//         let currentSlope = bezSlope(aGuessT, aA1, aA2);\\r\n//         if (currentSlope == 0.0) {\\r\n//             return aGuessT;\\r\n//         }\\r\n//         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\\r\n//         aGuessT -= currentX / currentSlope;\\r\n//     }\\r\n//     return aGuessT;\\r\n// }\\r\n\\r\n\\r\nconst NEWTON_ITERATIONS =          4;\\r\nconst NEWTON_MIN_SLOPE =           0.02;\\r\nconst SUBDIVISION_PRECISION =      0.0000001;\\r\nconst SUBDIVISION_MAX_ITERATIONS = 10;\\r\nconst kSplineTableSize =           11;\\r\n\\r\nconst kSampleStepSize =\\r\n                                        1.0 / float(kSplineTableSize - 1);\\r\n\\r\n\\r\nfn getTForX(aX: float, mX1: float, mX2: float) {\\r\n  let mSampleValues: array<float> = array<float>(11, 0);\\r\n  for (let i = 0; i < kSplineTableSize; i++) {\\r\n    mSampleValues[i] = calcBezier(float(i) * kSampleStepSize, mX1, mX2);\\r\n  }\\r\n\\r\n  // Find interval where t lies\\r\n  let intervalStart = 0.0;\\r\n  let currentSample = 1;\\r\n  let lastSample = kSplineTableSize - 1;\\r\n  \\r\n  for (let dummy = 0; currentSample != lastSample && mSampleValues[currentSample] <= aX; currentSample++) {\\r\n    intervalStart += kSampleStepSize;\\r\n  }\\r\n  currentSample--; // t now lies between *currentSample and *currentSample+1\\r\n\\r\n  // Interpolate to provide an initial guess for t\\r\n  let csamp = mSampleValues[currentSample];\\r\n  let dst = (aX - csamp) /\\r\n                (mSampleValues[currentSample + 1] - csamp);\\r\n  let guessForT = intervalStart + dst * kSampleStepSize;\\r\n\\r\n  // Check the slope to see what strategy to use. If the slope is too small\\r\n  // Newton-Raphson iteration won't converge on a root so we use bisection\\r\n  // instead.\\r\n  let initialSlope = getSlope(guessForT, mX1, mX2);\\r\n  if (initialSlope >= NEWTON_MIN_SLOPE) {\\r\n    return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\\r\n  } else if (initialSlope == 0.0) {\\r\n    return guessForT;\\r\n  } else {\\r\n    return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\\r\n  }\\r\n}\\r\n\\r\nfn newtonRaphsonIterate(aX: float, aGuessT: float, mX1: float, mX2: float) {\\r\n  // Refine guess with Newton-Raphson iteration\\r\n  for (let i = 0; i < NEWTON_ITERATIONS; i++) {\\r\n    // We're trying to find where f(t) = aX,\\r\n    // so we're actually looking for a root for: CalcBezier(t) - aX\\r\n    let currentX = calcBezier(aGuessT, mX1, mX2) - aX;\\r\n    let currentSlope = getSlope(aGuessT, mX1, mX2);\\r\n\\r\n    if (currentSlope == 0.0)\\r\n      return aGuessT;\\r\n\\r\n    aGuessT -= currentX / currentSlope;\\r\n  }\\r\n\\r\n  return aGuessT;\\r\n}\\r\n\\r\nfn binarySubdivide(aX: float, aA: float, aB: float) {\\r\n  let currentX = 0.0;\\r\n  let currentT = 0.0;\\r\n  let i = 0;\\r\n    let mX1 = aA;\\r\n    let mX2 = aB;\\r\n\\r\n  while (true) {\\r\n    i++;\\r\n    if (abs(currentX) > SUBDIVISION_PRECISION && i < SUBDIVISION_MAX_ITERATIONS) {\\r\n        currentT = aA + (aB - aA) / 2.0;\\r\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\\r\n\\r\n        if (currentX > 0.0) {\\r\n        aB = currentT;\\r\n        } else {\\r\n        aA = currentT;\\r\n        }\\r\n    }else{\\r\n        break;\\r\n    }\\r\n  }\\r\n\\r\n  return currentT;\\r\n}\\r\n\\r\npub struct bezier {};\\r\n\\r\nimpl bezier {\\r\n    pub fn cubic2(a: float2, b: float2, c: float2, d: float2, t: float) -> float2 {\\r\n        return (1.0 - t)**3 * a + 3.0 * (1.0 - t)**2 * t * b + 3.0 * (1.0 - t) * t**2 * c + t**3 * d;\\r\n    }\\r\n\\r\n    pub fn cubic3(a: float3, b: float3, c: float3, d: float3, t: float) -> float3 {\\r\n        return (1.0 - t)**3 * a + 3.0 * (1.0 - t)**2 * t * b + 3.0 * (1.0 - t) * t**2 * c + t**3 * d;\\r\n    }\\r\n\\r\n    pub fn quadratic2(a: float2, b: float2, c: float2, t: float) -> float2 {\\r\n        return (1.0 - t)**2 * a + 2.0 * (1.0 - t) * t * b + t**2 * c;\\r\n    }\\r\n\\r\n    pub fn quadratic3(a: float3, b: float3, c: float3, t: float) -> float3 {\\r\n        return (1.0 - t)**2 * a + 2.0 * (1.0 - t) * t * b + t**2 * c;\\r\n    }\\r\n\\r\n    /**\\r\n    * 3d triangle patch evaulation with barycentric coordinates.\\r\n    */\\r\n    pub fn patch(a: float3, ab: float3, b: float3, bc: float3, c: float3, ca: float3, barycentricT: float3) {\\r\n        const s = barycentricT.x;\\r\n        const t = barycentricT.y;\\r\n        const u = barycentricT.z;\\r\n      return 1.0 * c * (s * s) +\\r\n        2.0 * bc * s * t +\\r\n        2.0 * ca * s * u +\\r\n        1.0 * b * (t * t) +\\r\n        2.0 * ab * t * u +\\r\n        1.0 * a * (u * u);\\r\n    }\\r\n\\r\n    \\r\n\\r\n    pub fn easing(controlA: float2, controlB: float2, t: float) -> float {\\r\n        return calcBezier(getTForX(t, controlA.x, controlB.x), controlA.y, controlB.y);\\r\n    }\\r\n}\\r\n\\r\n/**\\r\n* Provides space related utilities like z-order curves and quadtrees.\\r\n*/\\r\npub struct spatial {};\\r\n\\r\nimpl spatial {\\r\n    pub fn cantorPair(v: int2) -> int {\\r\n        return ((v.x + v.y) * (v.x + v.y + 1)) / 2 + v.y;\\r\n    }\\r\n\\r\n    pub fn cantorUnpair(v: int) -> int2 {\\r\n        let w = floor((sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\\r\n        let t = (w * w + w) / 2.0;\\r\n        let y = v - t;\\r\n        let x = w - y;\\r\n        return int2(x, y);\\r\n    }\\r\n\\r\n    pub fn hilbertRotate(n: int, b: int2, r: int2) -> int2 {\\r\n        let x = b.x;\\r\n        let y = b.y;\\r\n        if (r.y == 0) {\\r\n            if (r.x == 1) {\\r\n                x = n-1 - x;\\r\n                y = n-1 - y;\\r\n            }\\r\n\\r\n            let t = x;\\r\n            x = y;\\r\n            y = t;\\r\n        }\\r\n\\r\n        return int2(x, y);\\r\n    }\\r\n\\r\n    pub fn hilbertUncurve(n: int, v: int2) -> int {\\r\n        let x = v.x;\\r\n        let y = v.y;\\r\n        let rx: int = 0;\\r\n        let ry: int = 0;\\r\n        let s: int = 0;\\r\n        let d: int = 0;\\r\n        for (s=n/2; s>0; s/=2) {\\r\n            rx = ((x & s) > 0) ? 1 : 0;\\r\n            ry = ((y & s) > 0) ? 1 : 0;\\r\n            d += s * s * ((3 * rx) ^ ry);\\r\n            let o = spatial::hilbertRotate(n, (x, y), (rx, ry));\\r\n            x = o.x;\\r\n            y = o.y;\\r\n        }\\r\n        return d;\\r\n    }\\r\n\\r\n    pub fn hilbertCurve(n: int, v: int) -> int2 {\\r\n        let rx: int = 0;\\r\n        let ry: int = 0;\\r\n        let t = v;\\r\n        let x = 0;\\r\n        let y = 0;\\r\n        for (let s: int = 1; s < n; s *= 2) {\\r\n            rx = 1 & (t/2);\\r\n            ry = 1 & (t ^ rx);\\r\n            let o = spatial::hilbertRotate(s, (x, y), (rx, ry));\\r\n            x = o.x;\\r\n            y = o.y;\\r\n            x += s * rx;\\r\n            y += s * ry;\\r\n            t /= 4;\\r\n        }\\r\n\\r\n        return int2(x, y);\\r\n    }\\r\n\\r\n    pub fn mortonDecode(p: uint) -> uint2 {\\r\n        return uint2(reverseMortonCode2(p), reverseMortonCode2(p >> 1u));\\r\n    }\\r\n\\r\n    pub fn mortonEncode(p: uint2) -> uint {\\r\n        return uint(mortonCode2(p.x) | (mortonCode2(p.y) << 1u));\\r\n    }\\r\n\\r\n}\\r\n\\r\npub fn mortonCode2(x: uint) -> uint {\\r\n\tx = x & 0x0000ffffu;\\r\n    let n8 = 8u;\\r\n    let n4 = 4u;\\r\n    let n2 = 2u;\\r\n    let n1 = 1u;\\r\n\tx = (x ^ (x << n8)) & 0x00ff00ffu;\\r\n\tx = (x ^ (x << n4)) & 0x0f0f0f0fu;\\r\n\tx = (x ^ (x << n2)) & 0x33333333u;\\r\n\tx = (x ^ (x << n1)) & 0x55555555u;\\r\n\treturn x;\\r\n}\\r\n\\r\npub fn randColor(seed: float) -> float4 {\\r\n    return float4(rand2((seed,5)), rand2((seed, 1)), rand2((seed, 4)), 1);\\r\n}\\r\n\\r\npub fn randColor2(seed: float2) -> float4 {\\r\n    return float4(rand3((seed,5)), rand3((seed, 1)), rand3((seed, 4)), 1);\\r\n}\\r\n\\r\npub fn reverseMortonCode2(x: uint) -> uint {\\r\n    x = x & 0x55555555u;\\r\n    x = (x ^ (x >> 1u)) & 0x33333333u;\\r\n    x = (x ^ (x >> 2u)) & 0x0f0f0f0fu;\\r\n    x = (x ^ (x >> 4u)) & 0x00ff00ffu;\\r\n    x = (x ^ (x >> 8u)) & 0x0000ffffu;\\r\n    return x;\\r\n}\\r\n\\r\npub struct noise {};\\r\n\\r\n\\r\nconst PERLIN_YWRAPB = 4;\\r\nconst PERLIN_YWRAP = 1 << PERLIN_YWRAPB;\\r\nconst PERLIN_ZWRAPB = 8;\\r\nconst PERLIN_ZWRAP = 1 << PERLIN_ZWRAPB;\\r\nconst PERLIN_SIZE = 4095;\\r\n\\r\nlet perlin_octaves = 4; // default to medium smooth\\r\nlet perlin_amp_falloff = 0.5; // 50% reduction/octave\\r\n\\r\n\\r\nfn scaled_cosine(i: float) -> float {\\r\n    return 0.5 * (1.0 - cos(i * PI));\\r\n}\\r\n\\r\nlet perlin = buffer<float>(PERLIN_SIZE + 1);\\r\nfor (let i = 0; i < PERLIN_SIZE + 1; i++) {\\r\n    perlin[i] = rand(i);\\r\n}\\r\n\\r\n//\t<https://www.shadertoy.com/view/4dS3Wd>\\r\n//\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\\r\n//\\r\nfn hash(n: float) -> float { return frac(sin(n) * 1e4); }\\r\nfn hash2(p: float2) -> float { return frac(1e4 * sin(17.0 * p.x + p.y * 0.1) * (0.1 + abs(sin(p.y * 13.0 + p.x)))); }\\r\nfn hash3(p: float3) -> float { let h = dot(p, float3(127.1, 311.7, 74.7)); return frac(sin(h) * 43758.5453123); }\\r\n\\r\n\\r\n\\r\nimpl noise {\\r\n    pub fn gaussian3(v: float3) -> float {\\r\n        let p = v;\\r\n    \tlet a = floor(p);\\r\n\t    let d = p - a;\\r\n    \td = d * d * (3.0 - 2.0 * d);\\r\n\\r\n    \tlet b = a.xxyy + float4(0.0, 1.0, 0.0, 1.0);\\r\n    \tlet k1 = perm(b.xyxy);\\r\n    \tlet k2 = perm(k1.xyxy + b.zzww);\\r\n\\r\n    \tlet c = k2 + a.zzzz;\\r\n    \tlet k3 = perm(c);\\r\n    \tlet k4 = perm(c + 1.0);\\r\n\\r\n    \tlet o1 = frac(k3 * (1.0 / 41.0));\\r\n    \tlet o2 = frac(k4 * (1.0 / 41.0));\\r\n\\r\n    \tlet o3 = o2 * d.z + o1 * (1.0 - d.z);\\r\n    \tlet o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);\\r\n\\r\n    \treturn o4.y * d.y + o4.x * (1.0 - d.y);\\r\n    }\\r\n    \\r\n    pub fn gaussian2(v: float2) -> float {\\r\n        return noise::gaussian3((v, 0));\\r\n    }\\r\n\\r\n    pub fn noise1(x: float) {\\r\n        let i = floor(x);\\r\n        let f = frac(x);\\r\n        let u = f * f * (3.0 - 2.0 * f);\\r\n        return lerp(hash(i), hash(i + 1.0), u);\\r\n    }\\r\n\\r\n    pub fn noise2(x: float2) -> float {\\r\n        let i = floor(x);\\r\n        let f = frac(x);\\r\n\\r\n        // Four corners in 2D of a tile\\r\n        let a = hash2(i);\\r\n        let b = hash2(i + float2(1.0, 0.0));\\r\n        let c = hash2(i + float2(0.0, 1.0));\\r\n        let d = hash2(i + float2(1.0, 1.0));\\r\n\\r\n        // Simple 2D lerp using smoothstep envelope between the values.\\r\n        // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\\r\n        //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\\r\n        //\t\t\tsmoothstep(0.0, 1.0, f.y)));\\r\n\\r\n        // Same code, with the clamps in smoothstep and common subexpressions\\r\n        // optimized away.\\r\n        let u = f * f * (3.0 - 2.0 * f);\\r\n        return lerp(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\\r\n    }\\r\n\\r\n    pub fn fmb1(x: float) -> float {\\r\n        let v = 0.0;\\r\n        let a = 0.5;\\r\n        let shift = float(100);\\r\n        for (let i = 0; i < 5; i++) {\\r\n            v += a * noise::noise1(x);\\r\n            x = x * 2.0 + shift;\\r\n            a *= 0.5;\\r\n        }\\r\n        return v;\\r\n    }\\r\n\\r\n    pub fn fbm2(x: float2) -> float {\\r\n        let v = 0.0;\\r\n        let a = 0.5;\\r\n        let shift = float2(100.xy);\\r\n        // Rotate to reduce axial bias\\r\n        let rot = float2x2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50));\\r\n        for (let i = 0; i < 5; i++) {\\r\n            v += a * noise::noise2(x);\\r\n            x = rot * x * 2.0 + shift;\\r\n            a *= 0.5;\\r\n        }\\r\n        return v;\\r\n    }\\r\n\\r\n    pub fn fbm3(x: float3) -> float {\\r\n        let v = 0.0;\\r\n        let a = 0.5;\\r\n        let shift = float3(100.xyz);\\r\n        for (let i = 0; i < 5; i++) {\\r\n            v += a * noise::noise3(x);\\r\n            x = x * 2.0 + shift;\\r\n            a *= 0.5;\\r\n        }\\r\n        return v;\\r\n    }\\r\n\\r\n    pub fn noise3(x: float3) -> float {\\r\n        const step = float3(110, 241, 171);\\r\n\\r\n        let i = floor(x);\\r\n        let f = frac(x);\\r\n    \\r\n        // For performance, compute the base input to a 1D hash from the integer part of the argument and the \\r\n        // incremental change to the 1D based on the 3D -> 1D wrapping\\r\n        let n = dot(i, step);\\r\n\\r\n        let u = f * f * (3.0 - 2.0 * f);\\r\n        return lerp(lerp(lerp( hash(n + dot(step, float3(0, 0, 0))), hash(n + dot(step, float3(1, 0, 0))), u.x),\\r\n                lerp( hash(n + dot(step, float3(0, 1, 0))), hash(n + dot(step, float3(1, 1, 0))), u.x), u.y),\\r\n                lerp(lerp( hash(n + dot(step, float3(0, 0, 1))), hash(n + dot(step, float3(1, 0, 1))), u.x),\\r\n                lerp( hash(n + dot(step, float3(0, 1, 1))), hash(n + dot(step, float3(1, 1, 1))), u.x), u.y), u.z);\\r\n    }\\r\n\\r\n    pub fn simplex2(v: float2) -> float {\\r\n        let C = float4(0.211324865405187,\\r\n                            0.366025403784439,\\r\n                            -0.577350269189626,\\r\n                            0.024390243902439);\\r\n\\r\n        let i  = floor(v + dot(v, C.yy));\\r\n        let x0 = v -   i + dot(i, C.xx);\\r\n\\r\n        let xv = step(x0.y, x0.x);\\r\n        \\r\n        let i1 = float2(xv, 1.0 - xv);\\r\n\\r\n        let x1 = x0 + C.xx - i1;\\r\n        let x2 = x0 + C.zz;\\r\n\\r\n        \\r\n        i = mod289_2(i);\\r\n        let p =\\r\n        permute(\\r\n            permute(float3(0.0, i1.y, 1.0) + i.y)\\r\n                        + float3(0.0, i1.x, 1.0) + i.x);\\r\n\\r\n        let m = max(0.5.xyz - float3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), 0.0);\\r\n        m = m * m;\\r\n        m = m * m;\\r\n\\r\n        let x = 2.0 * frac(p * C.www) - 1.0;\\r\n        let h = abs(x) - 0.5;\\r\n        let ox = floor(x + 0.5);\\r\n        let a0 = x - ox;\\r\n\\r\n        // Normalise gradients implicitly by scaling m\\r\n        m *= taylorInvSqrt(a0 * a0 + h * h);\\r\n\\r\n        // Compute final noise value at P\\r\n        let g = float3(\\r\n            a0.x * x0.x + h.x * x0.y,\\r\n            a0.y * x1.x + h.y * x1.y,\\r\n            a0.z * x2.x + h.z * x2.y\\r\n        );\\r\n        return 130.0 * dot(m, g);\\r\n    }\\r\n    \\r\n    pub fn perlin2(v: float2) -> float {\\r\n    let x = v.x;\\r\n    let y = v.y;\\r\n    let z = 0.0;\\r\n\\r\n        if (x < 0) {\\r\n            x = -x;\\r\n        }\\r\n        if (y < 0) {\\r\n            y = -y;\\r\n        }\\r\n        if (z < 0) {\\r\n            z = -z;\\r\n        }\\r\n\\r\n        let xi = int(floor(x)),\\r\n            yi = int(floor(y)),\\r\n            zi = int(floor(z));\\r\n        let xf = x - xi;\\r\n        let yf = y - yi;\\r\n        let zf = z - zi;\\r\n        let rxf = 0.0, ryf = 0.0;\\r\n\\r\n        let r = 0.0;\\r\n        let ampl = 0.5;\\r\n\\r\n        let n1= 0.0, n2 = 0.0, n3 = 0.0;\\r\n\\r\n        for (let o = 0; o < perlin_octaves; o++) {\\r\n            let of1: int = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\\r\n\\r\n            rxf = scaled_cosine(xf);\\r\n            ryf = scaled_cosine(yf);\\r\n\\r\n            n1 = perlin[of1 & PERLIN_SIZE];\\r\n            n1 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n1);\\r\n            n2 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);\\r\n            n1 += ryf * (n2 - n1);\\r\n\\r\n            of1 += PERLIN_ZWRAP;\\r\n            n2 = perlin[of1 & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n2);\\r\n            n3 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n3 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);\\r\n            n2 += ryf * (n3 - n2);\\r\n\\r\n            n1 += scaled_cosine(zf) * (n2 - n1);\\r\n\\r\n            r += n1 * ampl;\\r\n            ampl *= perlin_amp_falloff;\\r\n            xi = xi << 1;\\r\n            xf *= 2.0;\\r\n            yi = yi << 1;\\r\n            yf *= 2.0;\\r\n            zi = zi << 1;\\r\n            zf *= 2.0;\\r\n\\r\n            if (xf >= 1.0) {\\r\n            xi++;\\r\n            xf-= 1.0;\\r\n            }\\r\n            if (yf >= 1.0) {\\r\n            yi++;\\r\n            yf-= 1.0;\\r\n            }\\r\n            if (zf >= 1.0) {\\r\n            zi++;\\r\n            zf-= 1.0;\\r\n            }\\r\n        }\\r\n        return r;\\r\n\\r\n    }\\r\n\\r\n    pub fn perlin3(v: float3) -> float {\\r\n        let x = v.x;\\r\n        let y = v.y;\\r\n        let z = v.z;\\r\n\\r\n        if (x < 0) {\\r\n            x = -x;\\r\n        }\\r\n        if (y < 0) {\\r\n            y = -y;\\r\n        }\\r\n        if (z < 0) {\\r\n            z = -z;\\r\n        }\\r\n\\r\n        let xi = int(floor(x)),\\r\n            yi = int(floor(y)),\\r\n            zi = int(floor(z));\\r\n        let xf = x - xi;\\r\n        let yf = y - yi;\\r\n        let zf = z - zi;\\r\n        let rxf = 0.0, ryf = 0.0;\\r\n\\r\n        let r = 0.0;\\r\n        let ampl = 0.5;\\r\n\\r\n        let n1= 0.0, n2 = 0.0, n3 = 0.0;\\r\n\\r\n        for (let o = 0; o < perlin_octaves; o++) {\\r\n            let of1: int = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\\r\n\\r\n            rxf = scaled_cosine(xf);\\r\n            ryf = scaled_cosine(yf);\\r\n\\r\n            n1 = perlin[of1 & PERLIN_SIZE];\\r\n            n1 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n1);\\r\n            n2 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);\\r\n            n1 += ryf * (n2 - n1);\\r\n\\r\n            of1 += PERLIN_ZWRAP;\\r\n            n2 = perlin[of1 & PERLIN_SIZE];\\r\n            n2 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n2);\\r\n            n3 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\r\n            n3 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);\\r\n            n2 += ryf * (n3 - n2);\\r\n\\r\n            n1 += scaled_cosine(zf) * (n2 - n1);\\r\n\\r\n            r += n1 * ampl;\\r\n            ampl *= perlin_amp_falloff;\\r\n            xi = xi << 1;\\r\n            xf *= 2.0;\\r\n            yi = yi << 1;\\r\n            yf *= 2.0;\\r\n            zi = zi << 1;\\r\n            zf *= 2.0;\\r\n\\r\n            if (xf >= 1.0) {\\r\n            xi++;\\r\n            xf-= 1.0;\\r\n            }\\r\n            if (yf >= 1.0) {\\r\n            yi++;\\r\n            yf-= 1.0;\\r\n            }\\r\n            if (zf >= 1.0) {\\r\n            zi++;\\r\n            zf-= 1.0;\\r\n            }\\r\n        }\\r\n        return r;\\r\n    }\\r\n\\r\n    /**\\r\n    * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\\r\n    */\\r\n    pub fn voronoi2(v: float2) -> float3 {\\r\n        let n = floor(v);\\r\n        let minDist = 10.0;\\r\n        let toClose = 0.0.xy;\\r\n        let closestCell = 0.0.xy;\\r\n        \\r\n        \\r\n        for (let j = -1; j <= 1; j++) {\\r\n            for (let i = -1; i <= 1; i++) {\\r\n                let cell = n + float2(i, j);\\r\n                let cellPos = cell + hash2(cell);\\r\n                let toCell = cellPos - v;\\r\n                let dst = length(toCell);\\r\n                if (dst < minDist) {\\r\n                    minDist = dst;\\r\n                    toClose = toCell;\\r\n                    closestCell = cell;\\r\n                }\\r\n            }\\r\n        }\\r\n        \\r\n        let minEdge = 10.0;\\r\n        for (let j = -1; j <= 1; j++) {\\r\n            for (let i = -1; i <= 1; i++) {\\r\n                let cell = n + float2(i, j);\\r\n                let cellPos = cell + hash2(cell);\\r\n                let toCell = cellPos - v;\\r\n                let diff = abs(closestCell - cell);\\r\n                let isClosest = diff.x + diff.y < 0.1;\\r\n                if (!isClosest) {\\r\n                    let toCenter = (toClose + toCell) * 0.5;\\r\n                    let cellDiff = normalize(toCell - toClose);\\r\n                    let edge = dot(toCenter, cellDiff);\\r\n                    minEdge = min(minEdge, edge);\\r\n                }\\r\n            }\\r\n        }\\r\n\\r\n        let random = hash2(closestCell);\\r\n        return float3(minDist, random, minEdge);\\r\n    }\\r\n\\r\n    pub fn simplex3(v: float3) -> float {\\r\n        let C = float4(0.138196601125011,\\r\n                            0.276393202250021,\\r\n                            0.414589803375032,\\r\n                            -0.447213595499958);\\r\n\\r\n        let i  = floor(v + dot(v, C.yyy));\\r\n        let x0 = v -   i + dot(i, C.xxx);\\r\n\\r\n        let g = step(x0.yzx, x0.xyz);\\r\n        let l = 1.0 - g;\\r\n        let i1 = min(g.xyz, l.zxy);\\r\n        let i2 = max(g.xyz, l.zxy);\\r\n\\r\n        let x1 = x0 - i1 + 1.0 * C.xxx;\\r\n        let x2 = x0 - i2 + 2.0 * C.xxx;\\r\n        let x3 = x0 - 1. + 3.0 * C.xxx;\\r\n\\r\n        i = mod289_3(i);\\r\n        let p =\\r\n        permute(\\r\n            permute(\\r\n                permute(i.z + float3(0.0, i1.z, i2.z))\\r\n                + i.y + float3(0.0, i1.y, i2.y))\\r\n                + i.x + float3(0.0, i1.x, i2.x));\\r\n\\r\n        let m = max(0.5 - float3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);\\r\n        m = m * m;\\r\n        m = m * m;\\r\n\\r\n        let x = 2.0 * frac(p * C.www) - 1.0;\\r\n        let h = abs(x) - 0.5;\\r\n        let ox = floor(x + 0.5);\\r\n        let a0 = x - ox;\\r\n\\r\n        // Normalise gradients implicitly by scaling m\\r\n        // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\\r\n        m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\\r\n\\r\n        // Compute final noise value at P\\r\n        let g2 = float3(\\r\n            a0.x * x0.x + h.x * x0.y,\\r\n            a0.y * x1.x + h.y * x1.y,\\r\n            a0.z * x2.x + h.z * x2.y\\r\n        );\\r\n        return 130.0 * dot(m, g2);\\r\n    }\\r\n}\\r\n\\r\nfn mod289_1(x: float) -> float { return x - floor(x * (1.0 / 289.0)) * 289.0;}\\r\nfn mod289_4(x: float4) -> float4 { return x - floor(x * (1.0 / 289.0)) * 289.0;}\\r\nfn perm(x: float4) -> float4  { return mod289_4(((x * 34.0) + 1.0) * x);}\\r\n\\r\nfn mod289_3(x: float3) -> float3 {\\r\n    return x - floor(x * (1.0 / 289.0)) * 289.0;\\r\n}\\r\n\\r\nfn mod289_2(x: float2) -> float2 {\\r\n    return x - floor(x * (1.0 / 289.0)) * 289.0;\\r\n}\\r\n\\r\nfn permute(x: float3) -> float3 {\\r\n    return mod289_3((x * 34.0 + 1.0) * x);\\r\n}\\r\n\\r\nfn taylorInvSqrt(r: float3) -> float3 {\\r\n    return 1.79284291400159 - 0.85373472095314 * r;\\r\n}\\r\n\\r\npub struct matrix {}\\r\n\\r\nimpl matrix {\\r\n    pub fn lookAt(from: float3, to: float3, up: float3) -> float4x4 {\\r\n        let zAxis = normalize(from - to);\\r\n        let xAxis = normalize(cross(up, zAxis));\\r\n        let yAxis = normalize(cross(zAxis, xAxis));\\r\n        let dst = float4x4();\\r\n        dst[0][0] = xAxis.x;  dst[0][1] = yAxis.x;  dst[0][2] = zAxis.x;  dst[0][3] = 0;\\r\n        dst[1][0] = xAxis.y;  dst[1][1] = yAxis.y;  dst[1][2] = zAxis.y;  dst[1][3] = 0;\\r\n        dst[2][0] = xAxis.z;  dst[2][1] = yAxis.z;  dst[2][2] = zAxis.z;  dst[2][3] = 0;\\r\n\\r\n        dst[3][0] = -(xAxis.x * from.x + xAxis.y * from.y + xAxis.z * from.z);\\r\n        dst[3][1] = -(yAxis.x * from.x + yAxis.y * from.y + yAxis.z * from.z);\\r\n        dst[3][2] = -(zAxis.x * from.x + zAxis.y * from.y + zAxis.z * from.z);\\r\n        dst[3][3] = 1;\\r\n\\r\n        return dst;\\r\n\\r\n        let forward = normalize(from - to); \\r\n        \\r\n        let right = normalize(cross(up, forward)); \\r\n        \\r\n        let newup = cross(forward, right); \\r\n        let m = float4x4();\\r\n        m[0][0] = right.x,   m[0][1] = right.y,   m[0][2] = right.z; \\r\n        m[1][0] = newup.x,   m[1][1] = newup.y,   m[1][2] = newup.z; \\r\n        m[2][0] = forward.x, m[2][1] = forward.y, m[2][2] = forward.z; \\r\n        m[3][0] = from.x,    m[3][1] = from.y,    m[3][2] = from.z; \\r\n\\r\n        return m;\\r\n\\r\n    }\\r\n\\r\n\\r\n    pub fn perspective(fov: float, aspect: float, near: float, far: float) -> float4x4 {\\r\n        \\r\n        // set the basic projection matrix\\r\n        // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \\r\n        // let M = float4x4();\\r\n        // M[0][0] = scale;  //scale the x coordinates of the projected point \\r\n        // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \\r\n        // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \\r\n        // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \\r\n        // M[2][3] = -1;  //set w = -z \\r\n        // M[3][3] = 0; \\r\n\\r\n        //return M;\\r\n\\r\n        let fovRad = radians(fov);\\r\n        let tanFov = tan( fovRad * 0.5 );\\r\n\\r\n        let matrx = float4x4(\\r\n            1.0 / (tanFov * aspect), 0, 0, 0,\\r\n            0, 1.0 / tanFov, 0, 0,\\r\n            0, 0, -((far + near)/(far - near)), -1,\\r\n            0, 0, -((2*(near*far))/(far - near)), 0\\r\n        );\\r\n\\r\n        return matrx;\\r\n    }\\r\n\\r\n    pub fn perspectiveReverseZ(fov: float, aspect: float, near: float) -> float4 {\\r\n        // let scale = 1.0 / tan(fov * 0.5 * PI / 180);\\r\n        // let far = 10000000.0;\\r\n        // let M = float4x4();\\r\n        // M[0][0] = scale;  //scale the x coordinates of the projected point \\r\n        // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \\r\n        // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \\r\n        // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \\r\n        // M[2][3] = 0;  //set w = -z \\r\n        // M[3][3] = 0; \\r\n        // return M;\\r\n\\r\n        let matrx = float4x4(\\r\n            1, 0, 0, 0,\\r\n            0, 1, 0, 0,\\r\n            0, 0, -1, 0,\\r\n            0, 0, 1, 1\\r\n        ) * matrix::perspective(fov, aspect, near, 10000000.0);\\r\n\\r\n        return matrx;\\r\n    }\\r\n}\\r\n\\r\n/**\\r\n* Uses Super Sampling Anti Aliasing to smooth out the image.\\r\n*/\\r\npub fn screenAA(inScreenPos: float2, gridSize: int, func: (screenPos: float2) -> float4) {\\r\n    let weightSum = 0.0;\\r\n    let accumulatedColor = float4(0, 0, 0, 0);\\r\n\\r\n    for (let y = 0; y < gridSize; y++) {\\r\n        for (let x = 0; x < gridSize; x++) {\\r\n            let offset = float2(\\r\n                (x + 0.5 - gridSize * 0.5) / gridSize,\\r\n                (y + 0.5 - gridSize * 0.5) / gridSize\\r\n            );\\r\n            \\r\n            let weight = exp(-dot(offset, offset) * 5); // Gaussian weight\\r\n            accumulatedColor += func(inScreenPos + offset) * weight;\\r\n            weightSum += weight;\\r\n        }\\r\n    }\\r\n\\r\n    return accumulatedColor / weightSum;\\r\n}\\r\n\\r\n\\r\n// Color conversion helpers\\r\n// A color = float4 containing rgba values in the range [0, 1]\\r\n// All functions have an extra alpha functon and a reverse\\r\n// i.e. hsl, hsla, hslFromColor, hslaFromColor\\r\n// fn hsl(v: float3) -> float4\\r\n\\r\npub fn hsl(v: float3) -> float4 {\\r\n    return hsla((v, 1));\\r\n}\\r\n\\r\npub fn hsla(v: float4) -> float4 {\\r\n    let h = v.x;\\r\n    let s = v.y;\\r\n    let l = v.z;\\r\n    let a = v.w;\\r\n    let c = (1 - abs(2 * l - 1)) * s;\\r\n    let x = c * (1 - abs(((h / 60) % 2) - 1));\\r\n    let m = l - c / 2;\\r\n    let r = 0.0;\\r\n    let g = 0.0;\\r\n    let b = 0.0;\\r\n    if (h < 60) {\\r\n        r = c;\\r\n        g = x;\\r\n        b = 0;\\r\n    } else if (h < 120) {\\r\n        r = x;\\r\n        g = c;\\r\n        b = 0;\\r\n    } else if (h < 180) {\\r\n        r = 0;\\r\n        g = c;\\r\n        b = x;\\r\n    } else if (h < 240) {\\r\n        r = 0;\\r\n        g = x;\\r\n        b = c;\\r\n    } else if (h < 300) {\\r\n        r = x;\\r\n        g = 0;\\r\n        b = c;\\r\n    } else {\\r\n        r = c;\\r\n        g = 0;\\r\n        b = x;\\r\n    }\\r\n    return float4(r + m, g + m, b + m, a);\\r\n}\\r\n\\r\npub fn hslFromColor(c: float4) -> float3 {\\r\n    let r = c.r;\\r\n    let g = c.g;\\r\n    let b = c.b;\\r\n    let a = c.a;\\r\n    let mx = max(r, max(g, b));\\r\n    let mn = min(r, min(g, b));\\r\n    let h = 0.0;\\r\n    let s = 0.0;\\r\n    let l = (mx + mn) / 2;\\r\n    if (mx == mn) {\\r\n        h = 0;\\r\n        s = 0;\\r\n    } else {\\r\n        let d = mx - mn;\\r\n        s = (l > 0.5) ? d / (2 - mx - mn) : d / (mx + mn);\\r\n        if (mx == r) {\\r\n            h = (g - b) / d + ((g < b) ? 6:0);\\r\n        } else if (mx == g) {\\r\n            h = (b - r) / d + 2;\\r\n        } else if (mx == b) {\\r\n            h = (r - g) / d + 4;\\r\n        }\\r\n        h /= 6;\\r\n    }\\r\n    return float3(h * 360, s, l);\\r\n}\\r\n\\r\npub fn hslaFromColor(c: float4) -> float4 {\\r\n    let hsl = hslFromColor(c);\\r\n    return float4(hsl, c.a);\\r\n}\\r\n\\r\npub fn hsv(v: float3) -> float4 {\\r\n    return hsva((v, 1));\\r\n}\\r\n\\r\npub fn hsva(val: float4) -> float4 {\\r\n    let h = val.x;\\r\n    let s = val.y;\\r\n    let v = val.z;\\r\n    let a = val.w;\\r\n    let c = v * s;\\r\n    let x = c * (1 - abs(mod(h / 60, 2) - 1));\\r\n    let m = v - c;\\r\n    let r = 0.0;\\r\n    let g = 0.0;\\r\n    let b = 0.0;\\r\n    if (h < 60) {\\r\n        r = c;\\r\n        g = x;\\r\n        b = 0;\\r\n    } else if (h < 120) {\\r\n        r = x;\\r\n        g = c;\\r\n        b = 0;\\r\n    } else if (h < 180) {\\r\n        r = 0;\\r\n        g = c;\\r\n        b = x;\\r\n    } else if (h < 240) {\\r\n        r = 0;\\r\n        g = x;\\r\n        b = c;\\r\n    } else if (h < 300) {\\r\n        r = x;\\r\n        g = 0;\\r\n        b = c;\\r\n    } else {\\r\n        r = c;\\r\n        g = 0;\\r\n        b = x;\\r\n    }\\r\n    return float4(r + m, g + m, b + m, a);\\r\n}\\r\n\\r\npub fn hsvFromColor(c: float4) -> float3 {\\r\n    let r = c.r;\\r\n    let g = c.g;\\r\n    let b = c.b;\\r\n    let mx = max(r, max(g, b));\\r\n    let mn = min(r, min(g, b));\\r\n    let h = 0.0;\\r\n    let s = 0.0;\\r\n    let v = mx;\\r\n    let d = mx - mn;\\r\n    s = (mx == 0) ? 0 :  d / mx ;\\r\n    if (mx == mn) {\\r\n        h = 0;\\r\n    } else {\\r\n        if (mx == r) {\\r\n            h = (g - b) / d + ((g < b) ? 6 : 0 );\\r\n        } else if (mx == g) {\\r\n            h = (b - r) / d + 2;\\r\n        } else if (mx == b) {\\r\n            h = (r - g) / d + 4;\\r\n        }\\r\n        h /= 6;\\r\n    }\\r\n    return float3(h * 360, s, v);\\r\n}\\r\n\\r\npub fn hsvaFromColor(c: float4) -> float4 {\\r\n    let hsv = hsvFromColor(c);\\r\n    return float4(hsv, c.a);\\r\n}\\r\n\\r\npub fn rgb(v: float3) -> float4 {\\r\n    return float4(v / 255.0, 1);\\r\n}\\r\n\\r\npub fn rgba(v: float4) -> float4 {\\r\n    return float4(v / 255.0);\\r\n}\\r\n\\r\npub fn rgbFromColor(c: float4) -> float3 {\\r\n    return c.rgb * 255.0;\\r\n}\\r\n\\r\npub fn rgbaFromColor(c: float4) -> float4 {\\r\n    return c * 255.0;\\r\n}\\r\n\\r\npub fn cmyk(v: float4) -> float4 {\\r\n    let c = v.r;\\r\n    let m = v.g;\\r\n    let y = v.b;\\r\n    let k = v.a;\\r\n    let r = 1 - min(1, c * (1 - k) + k);\\r\n    let g = 1 - min(1, m * (1 - k) + k);\\r\n    let b = 1 - min(1, y * (1 - k) + k);\\r\n    return float4(r, g, b, 1);\\r\n}\\r\n\\r\npub fn cmykFromColor(c: float4) -> float4 {\\r\n    let r = c.r;\\r\n    let g = c.g;\\r\n    let b = c.b;\\r\n    let k = 1 - max(r, max(g, b));\\r\n    let c1 = (1 - r - k) / (1 - k);\\r\n    let m = (1 - g - k) / (1 - k);\\r\n    let y = (1 - b - k) / (1 - k);\\r\n    return float4(c1, m, y, k);\\r\n}\\r\n\\r\npub fn hex(v: int) -> float4 {\\r\n    let r: float = (v >> 16) & 0xFF;\\r\n    let g: float = (v >> 8) & 0xFF;\\r\n    let b: float = v & 0xFF;\\r\n    return float4(r / 255.0, g / 255.0, b / 255.0, 1.0);\\r\n}\\r\n\\r\npub fn hexFromColor(c: float4) -> int {\\r\n    let r = int(c.r * 255.0);\\r\n    let g = int(c.g * 255.0);\\r\n    let b = int(c.b * 255.0);\\r\n    return (r << 16) | (g << 8) | b;\\r\n}\\r\n\\r\n/**\\r\n* Returns sin remapped to [0, 1]\\r\n*/\\r\npub fn sin1(v: float) -> float {\\r\n    return (sin(v) + 1) * 0.5;\\r\n}\\r\n\\r\n/**\\r\n* Returns cos remapped to [0, 1]\\r\n*/\\r\npub fn cos1(v: float) -> float {\\r\n    return (cos(v) + 1) * 0.5;\\r\n}\\r\n\\r\n/**\\r\n* Returns tan remapped to [0, 1]\\r\n*/\\r\npub fn tan1(v: float) -> float {\\r\n    return (tan(v) + 1) * 0.5;\\r\n}\\r\n\\r\npub fn remap(v: float, low1: float, high1: float, low2: float, high2: float) -> float {\\r\n    return low2 + (v - low1) * (high2 - low2) / (high1 - low1);\\r\n}\\r\n\\r\npub fn remap1(v: float, low: float, high: float) -> float {\\r\n    return remap(v, low, high, 0, 1);\\r\n}\\r\n\\r\npub struct color {\\r\n\tstatic slate50: float4 = float4(0.9725490196078431, 0.9803921568627451, 0.9882352941176471, 1);\\r\n\tstatic slate100: float4 = float4(0.9450980392156862, 0.9607843137254902, 0.9764705882352941, 1);\\r\n\tstatic slate200: float4 = float4(0.8862745098039215, 0.9098039215686274, 0.9411764705882353, 1);\\r\n\tstatic slate300: float4 = float4(0.796078431372549, 0.8352941176470589, 0.8823529411764706, 1);\\r\n\tstatic slate400: float4 = float4(0.5803921568627451, 0.6392156862745098, 0.7215686274509804, 1);\\r\n\tstatic slate500: float4 = float4(0.39215686274509803, 0.4549019607843137, 0.5450980392156862, 1);\\r\n\tstatic slate600: float4 = float4(0.2784313725490196, 0.3333333333333333, 0.4117647058823529, 1);\\r\n\tstatic slate700: float4 = float4(0.2, 0.2549019607843137, 0.3333333333333333, 1);\\r\n\tstatic slate800: float4 = float4(0.11764705882352941, 0.1607843137254902, 0.23137254901960785, 1);\\r\n\tstatic slate900: float4 = float4(0.058823529411764705, 0.09019607843137255, 0.16470588235294117, 1);\\r\n\tstatic slate950: float4 = float4(0.00784313725490196, 0.023529411764705882, 0.09019607843137255, 1);\\r\n\tstatic gray50: float4 = float4(0.9764705882352941, 0.9803921568627451, 0.984313725490196, 1);\\r\n\tstatic gray100: float4 = float4(0.9529411764705882, 0.9568627450980393, 0.9647058823529412, 1);\\r\n\tstatic gray200: float4 = float4(0.8980392156862745, 0.9058823529411765, 0.9215686274509803, 1);\\r\n\tstatic gray300: float4 = float4(0.8196078431372549, 0.8352941176470589, 0.8588235294117647, 1);\\r\n\tstatic gray400: float4 = float4(0.611764705882353, 0.6392156862745098, 0.6862745098039216, 1);\\r\n\tstatic gray500: float4 = float4(0.4196078431372549, 0.4470588235294118, 0.5019607843137255, 1);\\r\n\tstatic gray600: float4 = float4(0.29411764705882354, 0.3333333333333333, 0.38823529411764707, 1);\\r\n\tstatic gray700: float4 = float4(0.21568627450980393, 0.2549019607843137, 0.3176470588235294, 1);\\r\n\tstatic gray800: float4 = float4(0.12156862745098039, 0.1607843137254902, 0.21568627450980393, 1);\\r\n\tstatic gray900: float4 = float4(0.06666666666666667, 0.09411764705882353, 0.15294117647058825, 1);\\r\n\tstatic gray950: float4 = float4(0.011764705882352941, 0.027450980392156862, 0.07058823529411765, 1);\\r\n\tstatic zinc50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\\r\n\tstatic zinc100: float4 = float4(0.9568627450980393, 0.9568627450980393, 0.9607843137254902, 1);\\r\n\tstatic zinc200: float4 = float4(0.8941176470588236, 0.8941176470588236, 0.9058823529411765, 1);\\r\n\tstatic zinc300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8470588235294118, 1);\\r\n\tstatic zinc400: float4 = float4(0.6313725490196078, 0.6313725490196078, 0.6666666666666666, 1);\\r\n\tstatic zinc500: float4 = float4(0.44313725490196076, 0.44313725490196076, 0.47843137254901963, 1);\\r\n\tstatic zinc600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3568627450980392, 1);\\r\n\tstatic zinc700: float4 = float4(0.24705882352941178, 0.24705882352941178, 0.27450980392156865, 1);\\r\n\tstatic zinc800: float4 = float4(0.15294117647058825, 0.15294117647058825, 0.16470588235294117, 1);\\r\n\tstatic zinc900: float4 = float4(0.09411764705882353, 0.09411764705882353, 0.10588235294117647, 1);\\r\n\tstatic zinc950: float4 = float4(0.03529411764705882, 0.03529411764705882, 0.043137254901960784, 1);\\r\n\tstatic neutral50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\\r\n\tstatic neutral100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9607843137254902, 1);\\r\n\tstatic neutral200: float4 = float4(0.8980392156862745, 0.8980392156862745, 0.8980392156862745, 1);\\r\n\tstatic neutral300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8313725490196079, 1);\\r\n\tstatic neutral400: float4 = float4(0.6392156862745098, 0.6392156862745098, 0.6392156862745098, 1);\\r\n\tstatic neutral500: float4 = float4(0.45098039215686275, 0.45098039215686275, 0.45098039215686275, 1);\\r\n\tstatic neutral600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3215686274509804, 1);\\r\n\tstatic neutral700: float4 = float4(0.25098039215686274, 0.25098039215686274, 0.25098039215686274, 1);\\r\n\tstatic neutral800: float4 = float4(0.14901960784313725, 0.14901960784313725, 0.14901960784313725, 1);\\r\n\tstatic neutral900: float4 = float4(0.09019607843137255, 0.09019607843137255, 0.09019607843137255, 1);\\r\n\tstatic neutral950: float4 = float4(0.0392156862745098, 0.0392156862745098, 0.0392156862745098, 1);\\r\n\tstatic stone50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9764705882352941, 1);\\r\n\tstatic stone100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9568627450980393, 1);\\r\n\tstatic stone200: float4 = float4(0.9058823529411765, 0.8980392156862745, 0.8941176470588236, 1);\\r\n\tstatic stone300: float4 = float4(0.8392156862745098, 0.8274509803921568, 0.8196078431372549, 1);\\r\n\tstatic stone400: float4 = float4(0.6588235294117647, 0.6352941176470588, 0.6196078431372549, 1);\\r\n\tstatic stone500: float4 = float4(0.47058823529411764, 0.44313725490196076, 0.4235294117647059, 1);\\r\n\tstatic stone600: float4 = float4(0.3411764705882353, 0.3254901960784314, 0.3058823529411765, 1);\\r\n\tstatic stone700: float4 = float4(0.26666666666666666, 0.25098039215686274, 0.23529411764705882, 1);\\r\n\tstatic stone800: float4 = float4(0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1);\\r\n\tstatic stone900: float4 = float4(0.10980392156862745, 0.09803921568627451, 0.09019607843137255, 1);\\r\n\tstatic stone950: float4 = float4(0.047058823529411764, 0.0392156862745098, 0.03529411764705882, 1);\\r\n\tstatic red50: float4 = float4(0.996078431372549, 0.9490196078431372, 0.9490196078431372, 1);\\r\n\tstatic red100: float4 = float4(0.996078431372549, 0.8862745098039215, 0.8862745098039215, 1);\\r\n\tstatic red200: float4 = float4(0.996078431372549, 0.792156862745098, 0.792156862745098, 1);\\r\n\tstatic red300: float4 = float4(0.9882352941176471, 0.6470588235294118, 0.6470588235294118, 1);\\r\n\tstatic red400: float4 = float4(0.9725490196078431, 0.44313725490196076, 0.44313725490196076, 1);\\r\n\tstatic red500: float4 = float4(0.9372549019607843, 0.26666666666666666, 0.26666666666666666, 1);\\r\n\tstatic red600: float4 = float4(0.8627450980392157, 0.14901960784313725, 0.14901960784313725, 1);\\r\n\tstatic red700: float4 = float4(0.7254901960784313, 0.10980392156862745, 0.10980392156862745, 1);\\r\n\tstatic red800: float4 = float4(0.6, 0.10588235294117647, 0.10588235294117647, 1);\\r\n\tstatic red900: float4 = float4(0.4980392156862745, 0.11372549019607843, 0.11372549019607843, 1);\\r\n\tstatic red950: float4 = float4(0.27058823529411763, 0.0392156862745098, 0.0392156862745098, 1);\\r\n\tstatic orange50: float4 = float4(1, 0.9686274509803922, 0.9294117647058824, 1);\\r\n\tstatic orange100: float4 = float4(1, 0.9294117647058824, 0.8352941176470589, 1);\\r\n\tstatic orange200: float4 = float4(0.996078431372549, 0.8431372549019608, 0.6666666666666666, 1);\\r\n\tstatic orange300: float4 = float4(0.9921568627450981, 0.7294117647058823, 0.4549019607843137, 1);\\r\n\tstatic orange400: float4 = float4(0.984313725490196, 0.5725490196078431, 0.23529411764705882, 1);\\r\n\tstatic orange500: float4 = float4(0.9764705882352941, 0.45098039215686275, 0.08627450980392157, 1);\\r\n\tstatic orange600: float4 = float4(0.9176470588235294, 0.34509803921568627, 0.047058823529411764, 1);\\r\n\tstatic orange700: float4 = float4(0.7607843137254902, 0.2549019607843137, 0.047058823529411764, 1);\\r\n\tstatic orange800: float4 = float4(0.6039215686274509, 0.20392156862745098, 0.07058823529411765, 1);\\r\n\tstatic orange900: float4 = float4(0.48627450980392156, 0.17647058823529413, 0.07058823529411765, 1);\\r\n\tstatic orange950: float4 = float4(0.2627450980392157, 0.0784313725490196, 0.027450980392156862, 1);\\r\n\tstatic amber50: float4 = float4(1, 0.984313725490196, 0.9215686274509803, 1);\\r\n\tstatic amber100: float4 = float4(0.996078431372549, 0.9529411764705882, 0.7803921568627451, 1);\\r\n\tstatic amber200: float4 = float4(0.9921568627450981, 0.9019607843137255, 0.5411764705882353, 1);\\r\n\tstatic amber300: float4 = float4(0.9882352941176471, 0.8274509803921568, 0.30196078431372547, 1);\\r\n\tstatic amber400: float4 = float4(0.984313725490196, 0.7490196078431373, 0.1411764705882353, 1);\\r\n\tstatic amber500: float4 = float4(0.9607843137254902, 0.6196078431372549, 0.043137254901960784, 1);\\r\n\tstatic amber600: float4 = float4(0.8509803921568627, 0.4666666666666667, 0.023529411764705882, 1);\\r\n\tstatic amber700: float4 = float4(0.7058823529411765, 0.3254901960784314, 0.03529411764705882, 1);\\r\n\tstatic amber800: float4 = float4(0.5725490196078431, 0.25098039215686274, 0.054901960784313725, 1);\\r\n\tstatic amber900: float4 = float4(0.47058823529411764, 0.20784313725490197, 0.058823529411764705, 1);\\r\n\tstatic amber950: float4 = float4(0.27058823529411763, 0.10196078431372549, 0.011764705882352941, 1);\\r\n\tstatic yellow50: float4 = float4(0.996078431372549, 0.9882352941176471, 0.9098039215686274, 1);\\r\n\tstatic yellow100: float4 = float4(0.996078431372549, 0.9764705882352941, 0.7647058823529411, 1);\\r\n\tstatic yellow200: float4 = float4(0.996078431372549, 0.9411764705882353, 0.5411764705882353, 1);\\r\n\tstatic yellow300: float4 = float4(0.9921568627450981, 0.8784313725490196, 0.2784313725490196, 1);\\r\n\tstatic yellow400: float4 = float4(0.9803921568627451, 0.8, 0.08235294117647059, 1);\\r\n\tstatic yellow500: float4 = float4(0.9176470588235294, 0.7019607843137254, 0.03137254901960784, 1);\\r\n\tstatic yellow600: float4 = float4(0.792156862745098, 0.5411764705882353, 0.01568627450980392, 1);\\r\n\tstatic yellow700: float4 = float4(0.6313725490196078, 0.3843137254901961, 0.027450980392156862, 1);\\r\n\tstatic yellow800: float4 = float4(0.5215686274509804, 0.30196078431372547, 0.054901960784313725, 1);\\r\n\tstatic yellow900: float4 = float4(0.44313725490196076, 0.24705882352941178, 0.07058823529411765, 1);\\r\n\tstatic yellow950: float4 = float4(0.25882352941176473, 0.12549019607843137, 0.023529411764705882, 1);\\r\n\tstatic lime50: float4 = float4(0.9686274509803922, 0.996078431372549, 0.9058823529411765, 1);\\r\n\tstatic lime100: float4 = float4(0.9254901960784314, 0.9882352941176471, 0.796078431372549, 1);\\r\n\tstatic lime200: float4 = float4(0.8509803921568627, 0.9764705882352941, 0.615686274509804, 1);\\r\n\tstatic lime300: float4 = float4(0.7450980392156863, 0.9490196078431372, 0.39215686274509803, 1);\\r\n\tstatic lime400: float4 = float4(0.6392156862745098, 0.9019607843137255, 0.20784313725490197, 1);\\r\n\tstatic lime500: float4 = float4(0.5176470588235295, 0.8, 0.08627450980392157, 1);\\r\n\tstatic lime600: float4 = float4(0.396078431372549, 0.6392156862745098, 0.050980392156862744, 1);\\r\n\tstatic lime700: float4 = float4(0.30196078431372547, 0.48627450980392156, 0.058823529411764705, 1);\\r\n\tstatic lime800: float4 = float4(0.24705882352941178, 0.3843137254901961, 0.07058823529411765, 1);\\r\n\tstatic lime900: float4 = float4(0.21176470588235294, 0.3254901960784314, 0.0784313725490196, 1);\\r\n\tstatic lime950: float4 = float4(0.10196078431372549, 0.1803921568627451, 0.0196078431372549, 1);\\r\n\tstatic green50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9568627450980393, 1);\\r\n\tstatic green100: float4 = float4(0.8627450980392157, 0.9882352941176471, 0.9058823529411765, 1);\\r\n\tstatic green200: float4 = float4(0.7333333333333333, 0.9686274509803922, 0.8156862745098039, 1);\\r\n\tstatic green300: float4 = float4(0.5254901960784314, 0.9372549019607843, 0.6745098039215687, 1);\\r\n\tstatic green400: float4 = float4(0.2901960784313726, 0.8705882352941177, 0.5019607843137255, 1);\\r\n\tstatic green500: float4 = float4(0.13333333333333333, 0.7725490196078432, 0.3686274509803922, 1);\\r\n\tstatic green600: float4 = float4(0.08627450980392157, 0.6392156862745098, 0.2901960784313726, 1);\\r\n\tstatic green700: float4 = float4(0.08235294117647059, 0.5019607843137255, 0.23921568627450981, 1);\\r\n\tstatic green800: float4 = float4(0.08627450980392157, 0.396078431372549, 0.20392156862745098, 1);\\r\n\tstatic green900: float4 = float4(0.0784313725490196, 0.3254901960784314, 0.17647058823529413, 1);\\r\n\tstatic green950: float4 = float4(0.0196078431372549, 0.1803921568627451, 0.08627450980392157, 1);\\r\n\tstatic emerald50: float4 = float4(0.9254901960784314, 0.9921568627450981, 0.9607843137254902, 1);\\r\n\tstatic emerald100: float4 = float4(0.8196078431372549, 0.9803921568627451, 0.8980392156862745, 1);\\r\n\tstatic emerald200: float4 = float4(0.6549019607843137, 0.9529411764705882, 0.8156862745098039, 1);\\r\n\tstatic emerald300: float4 = float4(0.43137254901960786, 0.9058823529411765, 0.7176470588235294, 1);\\r\n\tstatic emerald400: float4 = float4(0.20392156862745098, 0.8274509803921568, 0.6, 1);\\r\n\tstatic emerald500: float4 = float4(0.06274509803921569, 0.7254901960784313, 0.5058823529411764, 1);\\r\n\tstatic emerald600: float4 = float4(0.0196078431372549, 0.5882352941176471, 0.4117647058823529, 1);\\r\n\tstatic emerald700: float4 = float4(0.01568627450980392, 0.47058823529411764, 0.3411764705882353, 1);\\r\n\tstatic emerald800: float4 = float4(0.023529411764705882, 0.37254901960784315, 0.27450980392156865, 1);\\r\n\tstatic emerald900: float4 = float4(0.023529411764705882, 0.3058823529411765, 0.23137254901960785, 1);\\r\n\tstatic emerald950: float4 = float4(0.00784313725490196, 0.17254901960784313, 0.13333333333333333, 1);\\r\n\tstatic teal50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9803921568627451, 1);\\r\n\tstatic teal100: float4 = float4(0.8, 0.984313725490196, 0.9450980392156862, 1);\\r\n\tstatic teal200: float4 = float4(0.6, 0.9647058823529412, 0.8941176470588236, 1);\\r\n\tstatic teal300: float4 = float4(0.3686274509803922, 0.9176470588235294, 0.8313725490196079, 1);\\r\n\tstatic teal400: float4 = float4(0.17647058823529413, 0.8313725490196079, 0.7490196078431373, 1);\\r\n\tstatic teal500: float4 = float4(0.0784313725490196, 0.7215686274509804, 0.6509803921568628, 1);\\r\n\tstatic teal600: float4 = float4(0.050980392156862744, 0.5803921568627451, 0.5333333333333333, 1);\\r\n\tstatic teal700: float4 = float4(0.058823529411764705, 0.4627450980392157, 0.43137254901960786, 1);\\r\n\tstatic teal800: float4 = float4(0.06666666666666667, 0.3686274509803922, 0.34901960784313724, 1);\\r\n\tstatic teal900: float4 = float4(0.07450980392156863, 0.3058823529411765, 0.2901960784313726, 1);\\r\n\tstatic teal950: float4 = float4(0.01568627450980392, 0.1843137254901961, 0.1803921568627451, 1);\\r\n\tstatic cyan50: float4 = float4(0.9254901960784314, 0.996078431372549, 1, 1);\\r\n\tstatic cyan100: float4 = float4(0.8117647058823529, 0.9803921568627451, 0.996078431372549, 1);\\r\n\tstatic cyan200: float4 = float4(0.6470588235294118, 0.9529411764705882, 0.9882352941176471, 1);\\r\n\tstatic cyan300: float4 = float4(0.403921568627451, 0.9098039215686274, 0.9764705882352941, 1);\\r\n\tstatic cyan400: float4 = float4(0.13333333333333333, 0.8274509803921568, 0.9333333333333333, 1);\\r\n\tstatic cyan500: float4 = float4(0.023529411764705882, 0.7137254901960784, 0.8313725490196079, 1);\\r\n\tstatic cyan600: float4 = float4(0.03137254901960784, 0.5686274509803921, 0.6980392156862745, 1);\\r\n\tstatic cyan700: float4 = float4(0.054901960784313725, 0.4549019607843137, 0.5647058823529412, 1);\\r\n\tstatic cyan800: float4 = float4(0.08235294117647059, 0.3686274509803922, 0.4588235294117647, 1);\\r\n\tstatic cyan900: float4 = float4(0.08627450980392157, 0.3058823529411765, 0.38823529411764707, 1);\\r\n\tstatic cyan950: float4 = float4(0.03137254901960784, 0.2, 0.26666666666666666, 1);\\r\n\tstatic sky50: float4 = float4(0.9411764705882353, 0.9764705882352941, 1, 1);\\r\n\tstatic sky100: float4 = float4(0.8784313725490196, 0.9490196078431372, 0.996078431372549, 1);\\r\n\tstatic sky200: float4 = float4(0.7294117647058823, 0.9019607843137255, 0.9921568627450981, 1);\\r\n\tstatic sky300: float4 = float4(0.49019607843137253, 0.8274509803921568, 0.9882352941176471, 1);\\r\n\tstatic sky400: float4 = float4(0.2196078431372549, 0.7411764705882353, 0.9725490196078431, 1);\\r\n\tstatic sky500: float4 = float4(0.054901960784313725, 0.6470588235294118, 0.9137254901960784, 1);\\r\n\tstatic sky600: float4 = float4(0.00784313725490196, 0.5176470588235295, 0.7803921568627451, 1);\\r\n\tstatic sky700: float4 = float4(0.011764705882352941, 0.4117647058823529, 0.6313725490196078, 1);\\r\n\tstatic sky800: float4 = float4(0.027450980392156862, 0.34901960784313724, 0.5215686274509804, 1);\\r\n\tstatic sky900: float4 = float4(0.047058823529411764, 0.2901960784313726, 0.43137254901960786, 1);\\r\n\tstatic sky950: float4 = float4(0.03137254901960784, 0.1843137254901961, 0.28627450980392155, 1);\\r\n\tstatic blue50: float4 = float4(0.9372549019607843, 0.9647058823529412, 1, 1);\\r\n\tstatic blue100: float4 = float4(0.8588235294117647, 0.9176470588235294, 0.996078431372549, 1);\\r\n\tstatic blue200: float4 = float4(0.7490196078431373, 0.8588235294117647, 0.996078431372549, 1);\\r\n\tstatic blue300: float4 = float4(0.5764705882352941, 0.7725490196078432, 0.9921568627450981, 1);\\r\n\tstatic blue400: float4 = float4(0.3764705882352941, 0.6470588235294118, 0.9803921568627451, 1);\\r\n\tstatic blue500: float4 = float4(0.23137254901960785, 0.5098039215686274, 0.9647058823529412, 1);\\r\n\tstatic blue600: float4 = float4(0.1450980392156863, 0.38823529411764707, 0.9215686274509803, 1);\\r\n\tstatic blue700: float4 = float4(0.11372549019607843, 0.3058823529411765, 0.8470588235294118, 1);\\r\n\tstatic blue800: float4 = float4(0.11764705882352941, 0.25098039215686274, 0.6862745098039216, 1);\\r\n\tstatic blue900: float4 = float4(0.11764705882352941, 0.22745098039215686, 0.5411764705882353, 1);\\r\n\tstatic blue950: float4 = float4(0.09019607843137255, 0.1450980392156863, 0.32941176470588235, 1);\\r\n\tstatic indigo50: float4 = float4(0.9333333333333333, 0.9490196078431372, 1, 1);\\r\n\tstatic indigo100: float4 = float4(0.8784313725490196, 0.9058823529411765, 1, 1);\\r\n\tstatic indigo200: float4 = float4(0.7803921568627451, 0.8235294117647058, 0.996078431372549, 1);\\r\n\tstatic indigo300: float4 = float4(0.6470588235294118, 0.7058823529411765, 0.9882352941176471, 1);\\r\n\tstatic indigo400: float4 = float4(0.5058823529411764, 0.5490196078431373, 0.9725490196078431, 1);\\r\n\tstatic indigo500: float4 = float4(0.38823529411764707, 0.4, 0.9450980392156862, 1);\\r\n\tstatic indigo600: float4 = float4(0.30980392156862746, 0.27450980392156865, 0.8980392156862745, 1);\\r\n\tstatic indigo700: float4 = float4(0.2627450980392157, 0.2196078431372549, 0.792156862745098, 1);\\r\n\tstatic indigo800: float4 = float4(0.21568627450980393, 0.18823529411764706, 0.6392156862745098, 1);\\r\n\tstatic indigo900: float4 = float4(0.19215686274509805, 0.1803921568627451, 0.5058823529411764, 1);\\r\n\tstatic indigo950: float4 = float4(0.11764705882352941, 0.10588235294117647, 0.29411764705882354, 1);\\r\n\tstatic violet50: float4 = float4(0.9607843137254902, 0.9529411764705882, 1, 1);\\r\n\tstatic violet100: float4 = float4(0.9294117647058824, 0.9137254901960784, 0.996078431372549, 1);\\r\n\tstatic violet200: float4 = float4(0.8666666666666667, 0.8392156862745098, 0.996078431372549, 1);\\r\n\tstatic violet300: float4 = float4(0.7686274509803922, 0.7098039215686275, 0.9921568627450981, 1);\\r\n\tstatic violet400: float4 = float4(0.6549019607843137, 0.5450980392156862, 0.9803921568627451, 1);\\r\n\tstatic violet500: float4 = float4(0.5450980392156862, 0.3607843137254902, 0.9647058823529412, 1);\\r\n\tstatic violet600: float4 = float4(0.48627450980392156, 0.22745098039215686, 0.9294117647058824, 1);\\r\n\tstatic violet700: float4 = float4(0.42745098039215684, 0.1568627450980392, 0.8509803921568627, 1);\\r\n\tstatic violet800: float4 = float4(0.3568627450980392, 0.12941176470588237, 0.7137254901960784, 1);\\r\n\tstatic violet900: float4 = float4(0.2980392156862745, 0.11372549019607843, 0.5843137254901961, 1);\\r\n\tstatic violet950: float4 = float4(0.1803921568627451, 0.06274509803921569, 0.396078431372549, 1);\\r\n\tstatic purple50: float4 = float4(0.9803921568627451, 0.9607843137254902, 1, 1);\\r\n\tstatic purple100: float4 = float4(0.9529411764705882, 0.9098039215686274, 1, 1);\\r\n\tstatic purple200: float4 = float4(0.9137254901960784, 0.8352941176470589, 1, 1);\\r\n\tstatic purple300: float4 = float4(0.8470588235294118, 0.7058823529411765, 0.996078431372549, 1);\\r\n\tstatic purple400: float4 = float4(0.7529411764705882, 0.5176470588235295, 0.9882352941176471, 1);\\r\n\tstatic purple500: float4 = float4(0.6588235294117647, 0.3333333333333333, 0.9686274509803922, 1);\\r\n\tstatic purple600: float4 = float4(0.5764705882352941, 0.2, 0.9176470588235294, 1);\\r\n\tstatic purple700: float4 = float4(0.49411764705882355, 0.13333333333333333, 0.807843137254902, 1);\\r\n\tstatic purple800: float4 = float4(0.4196078431372549, 0.12941176470588237, 0.6588235294117647, 1);\\r\n\tstatic purple900: float4 = float4(0.34509803921568627, 0.10980392156862745, 0.5294117647058824, 1);\\r\n\tstatic purple950: float4 = float4(0.23137254901960785, 0.027450980392156862, 0.39215686274509803, 1);\\r\n\tstatic fuchsia50: float4 = float4(0.9921568627450981, 0.9568627450980393, 1, 1);\\r\n\tstatic fuchsia100: float4 = float4(0.9803921568627451, 0.9098039215686274, 1, 1);\\r\n\tstatic fuchsia200: float4 = float4(0.9607843137254902, 0.8156862745098039, 0.996078431372549, 1);\\r\n\tstatic fuchsia300: float4 = float4(0.9411764705882353, 0.6705882352941176, 0.9882352941176471, 1);\\r\n\tstatic fuchsia400: float4 = float4(0.9098039215686274, 0.4745098039215686, 0.9764705882352941, 1);\\r\n\tstatic fuchsia500: float4 = float4(0.8509803921568627, 0.27450980392156865, 0.9372549019607843, 1);\\r\n\tstatic fuchsia600: float4 = float4(0.7529411764705882, 0.14901960784313725, 0.8274509803921568, 1);\\r\n\tstatic fuchsia700: float4 = float4(0.6352941176470588, 0.10980392156862745, 0.6862745098039216, 1);\\r\n\tstatic fuchsia800: float4 = float4(0.5254901960784314, 0.09803921568627451, 0.5607843137254902, 1);\\r\n\tstatic fuchsia900: float4 = float4(0.4392156862745098, 0.10196078431372549, 0.4588235294117647, 1);\\r\n\tstatic fuchsia950: float4 = float4(0.2901960784313726, 0.01568627450980392, 0.3058823529411765, 1);\\r\n\tstatic pink50: float4 = float4(0.9921568627450981, 0.9490196078431372, 0.9725490196078431, 1);\\r\n\tstatic pink100: float4 = float4(0.9882352941176471, 0.9058823529411765, 0.9529411764705882, 1);\\r\n\tstatic pink200: float4 = float4(0.984313725490196, 0.8117647058823529, 0.9098039215686274, 1);\\r\n\tstatic pink300: float4 = float4(0.9764705882352941, 0.6588235294117647, 0.8313725490196079, 1);\\r\n\tstatic pink400: float4 = float4(0.9568627450980393, 0.4470588235294118, 0.7137254901960784, 1);\\r\n\tstatic pink500: float4 = float4(0.9254901960784314, 0.2823529411764706, 0.6, 1);\\r\n\tstatic pink600: float4 = float4(0.8588235294117647, 0.15294117647058825, 0.4666666666666667, 1);\\r\n\tstatic pink700: float4 = float4(0.7450980392156863, 0.09411764705882353, 0.36470588235294116, 1);\\r\n\tstatic pink800: float4 = float4(0.615686274509804, 0.09019607843137255, 0.30196078431372547, 1);\\r\n\tstatic pink900: float4 = float4(0.5137254901960784, 0.09411764705882353, 0.2627450980392157, 1);\\r\n\tstatic pink950: float4 = float4(0.3137254901960784, 0.027450980392156862, 0.1411764705882353, 1);\\r\n\tstatic rose50: float4 = float4(1, 0.9450980392156862, 0.9490196078431372, 1);\\r\n\tstatic rose100: float4 = float4(1, 0.8941176470588236, 0.9019607843137255, 1);\\r\n\tstatic rose200: float4 = float4(0.996078431372549, 0.803921568627451, 0.8274509803921568, 1);\\r\n\tstatic rose300: float4 = float4(0.9921568627450981, 0.6431372549019608, 0.6862745098039216, 1);\\r\n\tstatic rose400: float4 = float4(0.984313725490196, 0.44313725490196076, 0.5215686274509804, 1);\\r\n\tstatic rose500: float4 = float4(0.9568627450980393, 0.24705882352941178, 0.3686274509803922, 1);\\r\n\tstatic rose600: float4 = float4(0.8823529411764706, 0.11372549019607843, 0.2823529411764706, 1);\\r\n\tstatic rose700: float4 = float4(0.7450980392156863, 0.07058823529411765, 0.23529411764705882, 1);\\r\n\tstatic rose800: float4 = float4(0.6235294117647059, 0.07058823529411765, 0.2235294117647059, 1);\\r\n\tstatic rose900: float4 = float4(0.5333333333333333, 0.07450980392156863, 0.21568627450980393, 1);\\r\n\tstatic rose950: float4 = float4(0.2980392156862745, 0.0196078431372549, 0.09803921568627451, 1);\\r\n\\r\n}\\r\n\\r\n\\r\npub fn wrap2(value: float2, low: float, high: float) {\\r\n    return (wrap(value.x, low, high), wrap(value.y, low, high));\\r\n}\\r\n\\r\npub fn wrap3(value: float3, low: float, high: float) {\\r\n    return (wrap(value.x, low, high), wrap(value.y, low, high), wrap(value.z, low, high));\\r\n}\\r\n\\r\npub fn wrap4(value: float4, low: float, high: float) {\\r\n    return (wrap(value.x, low, high), wrap(value.y, low, high), wrap(value.z, low, high), wrap(value.w, low, high));\\r\n}`;\n  const sdf = \"/**\\r\\n* Heplful utility for working with signed distance fields.\\r\\n* Most of the implementation was taken from https://iquilezles.org/articles/distfunctions/\\r\\n*/\\r\\n\\r\\npub struct sdf {}\\r\\n\\r\\nfn dot2( v: float2 ) -> float { return dot(v,v); }\\r\\nfn dot3( v: float3 ) -> float { return dot(v,v); }\\r\\nfn ndot( a: float2, b: float2 ) -> float { return a.x*b.x - a.y*b.y; }\\r\\n\\r\\nimpl sdf {\\r\\n\tpub fn sphere(samplePosition: float3, sphereCenter: float3, radius: float) -> float {\\r\\n\t\tlet p = samplePosition - sphereCenter;\\r\\n\t\tlet r = radius;\\r\\n\t\treturn length(p) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn box(samplePosition: float3, boxCenter: float3, boxSize: float3) -> float {\\r\\n\t\tlet p = samplePosition - boxCenter;\\r\\n\t\tlet s = boxSize;\\r\\n\t\tlet q = abs(p) - s;\\r\\n\t\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\\r\\n\t}\\r\\n\\r\\n\tpub fn roundBox(samplePosition: float3, boxCenter: float3, boxSize: float3, cornerRadius: float) -> float {\\r\\n\t\tlet p = samplePosition - boxCenter;\\r\\n\t\tlet s = boxSize;\\r\\n\t\tlet r = cornerRadius;\\r\\n\t\tlet q = abs(p) - s;\\r\\n\t\treturn length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn boxFrame(samplePosition: float3, boxCenter: float3, boxSize: float3, frameThickness: float) -> float {\\r\\n\t\tlet p = samplePosition - boxCenter;\\r\\n\t\tlet b = boxSize;\\r\\n\t\tlet e = frameThickness;\\r\\n\t\tp = abs(p  )-b;\\r\\n\t\tlet q = abs(p+e)-e;\\r\\n\t\treturn min(min(\\r\\n\t\t\t\tlength(max(float3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\\r\\n\t\t\t\tlength(max(float3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\\r\\n\t\t\t\tlength(max(float3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn torus( samplePosition: float3, torusCenter: float3, torusSize: float2 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - torusCenter;\\r\\n\t\tlet t = torusSize;\\r\\n\t\tlet q = float2(length(p.xz)-t.x,p.y);\\r\\n\t\treturn length(q)-t.y;\\r\\n\t}\\r\\n\\r\\n\tpub fn cappedTorus( samplePosition: float3, torusCenter: float3, torusSize: float2, ra: float, rb: float) -> float\\r\\n\t{\\r\\n\t\t\\r\\n\t\tlet p1 = samplePosition - torusCenter;\\r\\n\t\tlet p = (abs(p1.x), p1.yz);\\r\\n\t\tlet sc = torusSize;\\r\\n\t\tlet k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy);\\r\\n\t\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\\r\\n\t}\\r\\n\\r\\n\tpub fn link( samplePosition: float3, linkCenter: float3, linkLength: float, r1: float, r2: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - linkCenter;\\r\\n\t\tlet le = linkLength;\\r\\n\t\tlet q = float3( p.x, max(abs(p.y)-le,0.0), p.z );\\r\\n\t\treturn length(float2(length(q.xy)-r1,q.z)) - r2;\\r\\n\t}\\r\\n\\r\\n\tpub fn infinteCylinder( samplePosition: float3, cylinderCenter: float3, cylinderSize: float3) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - cylinderCenter;\\r\\n\t\tlet c = cylinderSize;\\r\\n\t\treturn length(p.xz-c.xy)-c.z;\\r\\n\t}\\r\\n\\r\\n\tpub fn cone( samplePosition: float3,  coneCenter: float3, c: float2, coneHeight: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - coneCenter;\\r\\n\t\tlet h = coneHeight;\\r\\n\t\t// c is the sin/cos of the angle, h is height\\r\\n\t\t// Alternatively pass q instead of (c,h),\\r\\n\t\t// which is the point at the base in 2D\\r\\n\t\tlet q = h*float2(c.x/c.y,-1.0);\\r\\n\t\t\t\\r\\n\t\tlet w = float2( length(p.xz), p.y );\\r\\n\t\tlet a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\\r\\n\t\tlet b = w - q*float2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\\r\\n\t\tlet k = sign( q.y );\\r\\n\t\tlet d = min(dot( a, a ),dot(b, b));\\r\\n\t\tlet s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y)  );\\r\\n\t\treturn sqrt(d)*sign(s);\\r\\n\t}\\r\\n\\r\\n\tpub fn plane( samplePosition: float3, planeCenter: float3, planeNormal: float3, planeHeight: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - planeCenter;\\r\\n\t\tlet n = planeNormal;\\r\\n\t\tlet h = planeHeight;\\r\\n\t\t\\r\\n\t\t// n must be normalized\\r\\n\t\treturn dot(p,n) + h;\\r\\n\t}\\r\\n\\r\\n\tpub fn hexPrism( samplePosition: float3, hexCenter: float3, hexSize: float2 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - hexCenter;\\r\\n\t\tlet h = hexSize;\\r\\n\\r\\n\t\tlet k = float3(-0.8660254, 0.5, 0.57735);\\r\\n\t\tp = abs(p);\\r\\n\t\tlet dddd = min(dot(k.xy, p.xy), 0.0) * 2.0;\\r\\n\\r\\n\t\tp = p - float3(dddd * k.xy, 0.0);\\r\\n\t\tlet d = float2(\\r\\n\t\t\t\t\tlength(p.xy-float2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\\r\\n\t\t\t\t\tp.z-h.y );\\r\\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn triPrism( samplePosition: float3, triCenter: float3, triSize: float2 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - triCenter;\\r\\n\t\tlet h = triSize;\\r\\n\t\tlet q = abs(p);\\r\\n\t\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\\r\\n\t}\\r\\n\\r\\n\tpub fn capsuleLine( samplePosition: float3, lineStart: float3, lineEnd: float3, capsuleRadius: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet a = lineStart;\\r\\n\t\tlet b = lineEnd;\\r\\n\t\tlet r = capsuleRadius;\\r\\n\t\tlet pa = p - a;\\r\\n\t\tlet ba = b - a;\\r\\n\t\tlet h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\\r\\n\t\treturn length( pa - ba*h ) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn capsule( samplePosition: float3, capsuleCenter: float3, height: float, radius: float ) -> float\\r\\n\t{\\r\\n\t\tlet p1 = samplePosition - capsuleCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet p = (p1.x, p1.y - clamp( p1.y, 0.0, h ), p1.z);\\r\\n\t\treturn length( p ) - r;\\r\\n\t}\\r\\n\\r\\n\tpub fn cylinder( samplePosition: float3, cylinderCenter: float3, height: float, radius: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - cylinderCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet d = abs(float2(length(p.xz),p.y)) - float2(r,h);\\r\\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn cylinderLine( samplePosition: float3, lineStart: float3, lineEnd: float3, radius: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet a = lineStart;\\r\\n\t\tlet b = lineEnd;\\r\\n\t\tlet r = radius;\\r\\n\\r\\n\t\tlet ba = b - a;\\r\\n\t\tlet pa = p - a;\\r\\n\t\tlet baba = dot(ba,ba);\\r\\n\t\tlet paba = dot(pa,ba);\\r\\n\t\tlet x = length(pa*baba-ba*paba) - r*baba;\\r\\n\t\tlet y = abs(paba-baba*0.5) - baba*0.5;\\r\\n\t\tlet x2 = x*x;\\r\\n\t\tlet y2 = y*y*baba;\\r\\n\t\tlet mxxy = max(x,y);\\r\\n\t\tlet d = (mxxy<0.0)?-min(x2,y2):(((x>0.0)?x2:0.0)+((y>0.0)?y2:0.0));\\r\\n\t\treturn sign(d)*sqrt(abs(d))/baba;\\r\\n\t}\\r\\n\\r\\n\tpub fn roundedCylinder( samplePosition: float3, cylinderCenter: float, cylinderRadius: float, cornerRadius: float, height: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - cylinderCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet ra = cylinderRadius;\\r\\n\t\tlet rb = cornerRadius;\\r\\n\t\tlet d = float2( length(p.xz)-2.0*ra+rb, abs(p.y) - h );\\r\\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0)) - rb;\\r\\n\t}\\r\\n\\r\\n\tpub fn cappedCone( samplePosition: float3, coneCenter: float3, height: float, r1: float, r2: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - coneCenter;\\r\\n\t\tlet h = height;\\r\\n\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet k1 = float2(r2,h);\\r\\n\t\tlet k2 = float2(r2-r1,2.0*h);\\r\\n\t\tlet ca = float2(q.x-min(q.x,(q.y<0.0)?r1:r2), abs(q.y)-h);\\r\\n\t\tlet cb = q - k1 + k2*clamp( dot(k1-q,k2)/dot2(k2), 0.0, 1.0 );\\r\\n\t\tlet s = (cb.x<0.0 && ca.y<0.0) ? -1.0 : 1.0;\\r\\n\t\treturn s*sqrt( min(dot2(ca),dot2(cb)) );\\r\\n\t}\\r\\n\\r\\n\tpub fn solidAngle( samplePosition: float3, solidCenter: float3, size: float2, radius: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - solidCenter;\\r\\n\t\tlet c = size;\\r\\n\t\tlet ra = radius;\\r\\n\t\t// c is the sin/cos of the angle\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet l = length(q) - ra;\\r\\n\t\tlet m = length(q - c*clamp(dot(q,c),0.0,ra) );\\r\\n\t\treturn max(l,m*sign(c.y*q.x-c.x*q.y));\\r\\n\t}\\r\\n\\r\\n\tpub fn cutSphere( samplePosition: float3, sphereCenter: float3, radius: float, height: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - sphereCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r = radius;\\r\\n\\r\\n\t\t// sampling independent computations (only depend on shape)\\r\\n\t\tlet w = sqrt(r*r-h*h);\\r\\n\\r\\n\t\t// sampling dependant computations\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\\r\\n\t\treturn (s<0.0) ? length(q)-r :\\r\\n\t\t\t\t\t(q.x<w) ? h - q.y     :\\r\\n\t\t\t\t\t\t\t\t\t\tlength(q-float2(w,h));\\r\\n\t}\\r\\n\\r\\n\tpub fn cutHollowSphere( samplePosition: float3, sphereCenter: float3, radius: float, height: float, thickness: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - sphereCenter;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet h = height;\\r\\n\t\tlet t = thickness;\\r\\n\\r\\n\t\t// sampling independent computations (only depend on shape)\\r\\n\t\tlet w = sqrt(r*r-h*h);\\r\\n\\r\\n\t\t// sampling dependant computations\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\treturn ((h*q.x<w*q.y) ? length(q-float2(w,h)) : \\r\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\\r\\n\t}\\r\\n\\r\\n\tpub fn roundCone( samplePosition: float3, coneCenter: float3, coneRadius: float, cornerRadius: float, height: float ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - coneCenter;\\r\\n\t\tlet h = height;\\r\\n\t\tlet r1 = coneRadius;\\r\\n\t\tlet r2 = cornerRadius;\\r\\n\\r\\n\t\t// sampling independent computations (only depend on shape)\\r\\n\t\tlet b = (r1-r2)/h;\\r\\n\t\tlet a = sqrt(1.0-b*b);\\r\\n\\r\\n\t\t// sampling dependant computations\\r\\n\t\tlet q = float2( length(p.xz), p.y );\\r\\n\t\tlet k = dot(q,float2(-b,a));\\r\\n\t\tif( k<0.0 ) return length(q) - r1;\\r\\n\t\tif( k>a*h ) return length(q-float2(0.0,h)) - r2;\\r\\n\t\treturn dot(q, float2(a,b) ) - r1;\\r\\n\t}\\r\\n\\r\\n\tpub fn ellipsoid( samplePosition: float3, center: float3,  radius: float3 ) -> float\\r\\n\t{\t\\r\\n\t\tlet p = samplePosition - center;\\r\\n\t\tlet r = radius;\\r\\n\t\tlet k0 = length(p/r);\\r\\n\t\tlet k1 = length(p/(r*r));\\r\\n\t\treturn k0*(k0-1.0)/k1;\\r\\n\t}\\r\\n\\r\\n\tpub fn rhombus( samplePosition: float3, rhombusCenter: float3, la: float, lb: float, height: float, ra: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - rhombusCenter;\\r\\n\t\tlet h = height;\\r\\n\\r\\n\t\tp = abs(p);\\r\\n\t\tlet b = float2(la,lb);\\r\\n\t\tlet f = clamp( (ndot(b,b-2.0*p.xz))/dot(b,b), -1.0, 1.0 );\\r\\n\t\tlet q = float2(length(p.xz-0.5*b*float2(1.0-f,1.0+f))*sign(p.x*b.y+p.z*b.x-b.x*b.y)-ra, p.y-h);\\r\\n\t\treturn min(max(q.x,q.y),0.0) + length(max(q,0.0));\\r\\n\t}\\r\\n\\r\\n\tpub fn octahedron( samplePosition: float3, center: float3, size: float) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition - center;\\r\\n\t\tlet s = size;\\r\\n\t\tp = abs(p);\\r\\n\t\tlet m = p.x+p.y+p.z-s;\\r\\n\t\tlet q = 0.0.xyz;\\r\\n\t\t\t\t\tif( 3.0*p.x < m ) q = p.xyz;\\r\\n\t\telse if( 3.0*p.y < m ) q = p.yzx;\\r\\n\t\telse if( 3.0*p.z < m ) q = p.zxy;\\r\\n\t\telse return m*0.57735027;\\r\\n\t\t\t\\r\\n\t\tlet k = clamp(0.5*(q.z-q.y+s),0.0,s); \\r\\n\t\treturn length(float3(q.x,q.y-s+k,q.z-k)); \\r\\n\t}\\r\\n\\r\\n\tpub fn pyramid( samplePosition: float3, pyramidCenter: float3, height: float) -> float\\r\\n\t{\\r\\n\t\tlet p1 = samplePosition - pyramidCenter;\\r\\n\t\tlet h = height;\\r\\n\\r\\n\t\tlet m2 = h*h + 0.25;\\r\\n\t\t\\r\\n\t\tlet p2 = (abs(p1.x), p1.y, abs(p1.z));\\r\\n\t\tif (p1.z > p1.x) {\\r\\n\t\t\tp2 = (p2.z, p2.y, p2.x);\\r\\n\t\t}\\r\\n\t\tp2 = (p2.x - 0.5, p2.y, p2.z - 0.5);\\r\\n\t\tlet p = p2;\\r\\n\\r\\n\t\tlet q = float3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\\r\\n\t\t\t\\r\\n\t\tlet s = max(-q.x,0.0);\\r\\n\t\tlet t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\\r\\n\t\t\t\\r\\n\t\tlet a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\\r\\n\t\tlet b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\\r\\n\t\t\t\\r\\n\t\tlet d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\\r\\n\t\t\t\\r\\n\t\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\\r\\n\t}\\r\\n\\r\\n\tpub fn udTriangle(  samplePosition: float3, a: float3, b: float3, c: float3 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet ba = b - a;\\r\\n\t\tlet pa = p - a;\\r\\n\t\tlet cb = c - b;\\r\\n\t\tlet pb = p - b;\\r\\n\t\tlet ac = a - c;\\r\\n\t\tlet pc = p - c;\\r\\n\t\tlet nor = cross( ba, ac );\\r\\n\\r\\n\t\treturn sqrt(\\r\\n\t\t\t(sign(dot(cross(ba,nor),pa)) +\\r\\n\t\t\t\tsign(dot(cross(cb,nor),pb)) +\\r\\n\t\t\t\tsign(dot(cross(ac,nor),pc))<2.0)\\r\\n\t\t\t\t?\\r\\n\t\t\t\tmin( min(\\r\\n\t\t\t\tdot3(ba*clamp(dot(ba,pa)/dot3(ba),0.0,1.0) - pa),\\r\\n\t\t\t\tdot3(cb*clamp(dot(cb,pb)/dot3(cb),0.0,1.0) - pb) ),\\r\\n\t\t\t\tdot3(ac*clamp(dot(ac,pc)/dot3(ac),0.0,1.0) - pc) )\\r\\n\t\t\t\t:\\r\\n\t\t\t\tdot(nor,pa)*dot(nor,pa)/dot3(nor) );\\r\\n\t}\\r\\n\\r\\n\tpub fn udQuad(  samplePosition: float3, a: float3, b: float3, c: float3, d: float3 ) -> float\\r\\n\t{\\r\\n\t\tlet p = samplePosition;\\r\\n\t\tlet ba = b - a; let pa = p - a;\\r\\n\t\tlet cb = c - b; let pb = p - b;\\r\\n\t\tlet dc = d - c; let pc = p - c;\\r\\n\t\tlet ad = a - d; let pd = p - d;\\r\\n\t\tlet nor = cross( ba, ad );\\r\\n\\r\\n\t\treturn sqrt(\\r\\n\t\t\t(sign(dot(cross(ba,nor),pa)) +\\r\\n\t\t\t\tsign(dot(cross(cb,nor),pb)) +\\r\\n\t\t\t\tsign(dot(cross(dc,nor),pc)) +\\r\\n\t\t\t\tsign(dot(cross(ad,nor),pd))<3.0)\\r\\n\t\t\t\t?\\r\\n\t\t\t\tmin( min( min(\\r\\n\t\t\t\tdot3(ba*clamp(dot(ba,pa)/dot3(ba),0.0,1.0)-pa),\\r\\n\t\t\t\tdot3(cb*clamp(dot(cb,pb)/dot3(cb),0.0,1.0)-pb) ),\\r\\n\t\t\t\tdot3(dc*clamp(dot(dc,pc)/dot3(dc),0.0,1.0)-pc) ),\\r\\n\t\t\t\tdot3(ad*clamp(dot(ad,pd)/dot3(ad),0.0,1.0)-pd) )\\r\\n\t\t\t\t:\\r\\n\t\t\t\tdot(nor,pa)*dot(nor,pa)/dot3(nor) );\\r\\n\t}\\r\\n\\r\\n\\r\\n\t/**\\r\\n\t* Returns the intersection of two SDFs\\r\\n\t* = max(a, b)\\r\\n\t*/\\r\\n\tpub fn intersect(a: float, b: float) -> float {\\r\\n\t\treturn max(a, b);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Returns the union of two SDFs\\r\\n\t* = min(a, b)\\r\\n\t*/\\r\\n\tpub fn union(a: float, b: float) -> float {\\r\\n\t\treturn min(a, b);\\r\\n\t}\\r\\n\\r\\n\tpub fn subtract(a: float, b: float) -> float {\\r\\n\t\treturn max(-a, b);\\r\\n\t}\\r\\n\\r\\n\tpub fn smoothIntersect(a: float, b: float, k: float) -> float {\\r\\n\t\tlet h = clamp(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\\r\\n\t\treturn lerp(b, a, h) - k * h * (1.0 - h);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Smoothly joins two SDFs using blending distance k\\r\\n\t*/\\r\\n\tpub fn smoothUnion(a: float, b: float, k: float) -> float {\\r\\n\t\tlet d1 = a;\\r\\n\t\tlet d2 = b;\\r\\n\t\tlet h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\\r\\n    return lerp( d2, d1, h ) - k*h*(1.0-h);\\r\\n\t}\\r\\n\\r\\n\tpub fn smoothSubtract(a: float, b: float, k: float) -> float {\\r\\n\t\tlet d1 = a;\\r\\n\t\tlet d2 = b;\\r\\n\t\tlet h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\\r\\n    return lerp( d2, -d1, h ) + k*h*(1.0-h); \\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Blends between two SDFs using interpolation\\r\\n\t*/\\r\\n\tpub fn blend(a: float, b: float, t: float) -> float {\\r\\n\t\treturn t * a + (1 - t) * b;\\r\\n\t}\\r\\n\\r\\n\tpub fn round(a: float, r: float) -> float {\\r\\n\t\treturn a - r;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Carve out the interior of an SDF\\r\\n\t*/\\r\\n\tpub fn onion(a: float, thickness: float) -> float {\\r\\n\t\treturn abs(a) - thickness;\\r\\n\t}\\r\\n\\r\\n\\r\\n\tpub fn grad(p:float3, sampler: (pos: float3) -> float) {\\r\\n\t\tconst DELTA = 0.0001;\\r\\n\t\treturn float3(sampler(p + float3(DELTA, 0.0, 0.0)) - sampler(p - float3(DELTA, 0.0, 0.0)),\\r\\n\t\t\t\t\t\t\t\tsampler(p + float3(0.0, DELTA, 0.0)) - sampler(p - float3(0.0, DELTA, 0.0)),\\r\\n\t\t\t\t\t\t\t\tsampler(p + float3(0.0, 0.0, DELTA)) - sampler(p - float3(0.0, 0.0, DELTA))) / (2.0 * DELTA);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* Poorly returns the closest point on the surface of an SDF\\r\\n\t* This is an inaccurate method\\r\\n\t*/\\r\\n\tpub fn closest(position: float3, sampler: (pos: float3) -> float) -> float3 {\\r\\n\t\tlet sep = 0.0001;\\r\\n\t\tlet zero = min(env.frame, 0);\\r\\n\t\tlet closest = position;\\r\\n\t\tlet initialDist = sampler(position);\\r\\n\t\tlet seed = 0;\\r\\n\t\tfor (let j: int = 0; j < 200; j++) {\\r\\n\t\t\tlet n = 0.0.xyz;\\r\\n\t\t\tlet distSum = 0.0;\\r\\n\t\t\tfor (let i: int = zero; i < 4; i++) {\\r\\n\t\t\t\tlet e = 0.5773*(2.0*float3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.0);\\r\\n\t\t\t\tlet d = sampler(closest+e*sep);\\r\\n\t\t\t\tdistSum += d;\\r\\n\t\t\t\tn += e*d;\\r\\n\t\t\t}\\r\\n\t\t\tclosest = normalize(n) * distSum * -1 / 4.0 + closest;\\r\\n\t\t\tif (distSum < 0.0001) {\\r\\n\t\t\t\tbreak;\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\\r\\n\t\treturn closest;\\r\\n\t}\\r\\n\\r\\n\tpub fn normal(position: float3, sampler: (pos: float3) -> float) -> float3 {\\r\\n\t\tconst h = 0.1;\\r\\n    let zero = min(env.frame, 0);\\r\\n    let n = 0.0.xyz;\\r\\n\t\tlet distSum = 0.0;\\r\\n\t\t\\r\\n    for (let i: int = zero; i < 4; i++) {\\r\\n\t\t\tlet e = 0.5773*(2.0*float3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.0);\\r\\n\t\t\tlet d = sampler(position+e*h);\\r\\n\t\t\tdistSum += d;\\r\\n\t\t\tn += e*d;\\r\\n    }\\r\\n    return normalize(n);\\r\\n\t}\\r\\n\\r\\n\tpub fn vizRings(d: float) -> float4 {\\r\\n\t\tif (false) {\\r\\n\t\t\tlet color = 1.0 - sign(d) * float3(0.1, 0.4, 0.7);\\r\\n\t\t\tcolor *= 1.0 - exp(-4.0 * abs(d));\\r\\n\t\t\tcolor *= 0.8 + 0.2 * cos(140.0 * d);\\r\\n\t\t\tcolor = lerp(color, 1.0.xyz, 1.0 - smoothstep(0.0, 0.015, abs(d)));\\r\\n\t\t\treturn (color, 1.0);\\r\\n\t\t}else{\\r\\n\\r\\n\t\tlet size = 2;\\r\\n\t\tlet fadeDist = 100;\\r\\n\t\tlet v = 1-clamp(d/ fadeDist, 0, 1);\\r\\n\t\tlet color = (0.4 * v, 0.6* v, 1, 1);\\r\\n\t\tlet s = sin(d / size);\\r\\n\t\tif (abs(d) < 1) {\\r\\n\t\t\treturn float4(1.xyzw);\\r\\n\t\t}else{\\r\\n\t\t\treturn d > 0 ? color * ceil(1-s) : color * ceil(s);\\r\\n\t\t}\\r\\n\t\t}\\r\\n\t}\\r\\n\\r\\n\tpub fn march(position: float3, direction: float3, sampler: (pos: float3) -> float) -> float {\\r\\n\t\tlet maxDist = 100000.0;\\r\\n\t\tlet minDist = 1.0;\\r\\n\t\tlet dist = minDist;\\r\\n\\r\\n\t\tfor (let i = 0; i < 256 && dist < maxDist; i++) {\\r\\n\t\t\tlet samp = sampler(position + direction * dist);\\r\\n\t\t\tdist += samp;\\r\\n\t\t\tif (abs(samp) < (0.00005 * dist)) {\\r\\n\t\t\t\tbreak;\\r\\n\t\t\t}\\r\\n\t\t}\\r\\n\t\tif (dist > maxDist) {\\r\\n\t\t\tdist = -1.0;\\r\\n\t\t}\\r\\n\t\treturn dist;\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* See: https://iquilezles.org/articles/distfunctions/\\r\\n\t* Infinitely repeats an SDF with space in between. This returns an updated position\\r\\n\t*\\r\\n\t* Example:\\r\\n\t* ```shadeup\\r\\n\t*\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\\r\\n\t* ```\\r\\n\t*/\\r\\n\tpub fn repeat(position: float3, space: float3) -> float3 {\\r\\n\t\tlet p = position;\\r\\n\t\tlet s = space;\\r\\n\t\treturn p - s*round(p/s);\\r\\n\t}\\r\\n\\r\\n\t/**\\r\\n\t* See: https://iquilezles.org/articles/distfunctions/\\r\\n\t* Repeats an SDF with space in between upto the limit. This returns an updated position\\r\\n\t*\\r\\n\t* Example:\\r\\n\t* ```shadeup\\r\\n\t*\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\\r\\n\t* ```\\r\\n\t*/\\r\\n\tpub fn repeatLimited(position: float3, space: float, limit: float3) -> float3 {\\r\\n\t\tlet p = position;\\r\\n\t\tlet s = space;\\r\\n\t\treturn p - s*clamp(round(p/s),-limit,limit);\\r\\n\t}\\r\\n\t\\r\\n}\";\n  const files = {\n    shadeup: {\n      mesh,\n      textures,\n      common,\n      sdf,\n      geo\n    },\n    ts: {\n      std,\n      ui,\n      native,\n      paint,\n      buffer,\n      texture,\n      drawIndexed,\n      drawAttributes,\n      drawCount,\n      physics,\n      context\n    }\n  };\n  async function makeSimpleShadeupEnvironment(esnext = false, declaration = false) {\n    let env2 = new ShadeupEnvironment({\n      esnext,\n      declaration\n    });\n    env2.emitLogs = false;\n    await env2.init();\n    await env2.writeFile(\n      \"/file.ts\",\n      `\n\t\n\t`\n    );\n    let writes = [];\n    performance.now();\n    for (let [path, contents] of Object.entries(files.ts)) {\n      let p = \"/_std/\" + path + \".ts\";\n      if (path == \"std\")\n        p = \"/std.ts\";\n      writes.push(env2.writeFileTypescript(p, contents));\n    }\n    for (let [path, contents] of Object.entries(files.shadeup)) {\n      let p = \"/_std/\" + path + \".ts\";\n      writes.push(env2.writeFile(p, contents, true));\n    }\n    return env2;\n  }\n  exports2.makeSimpleShadeupEnvironment = makeSimpleShadeupEnvironment;\n  Object.defineProperty(exports2, Symbol.toStringTag, { value: \"Module\" });\n});\n"
  },
  {
    "path": "extension/vscode/shadeup/server/package.json",
    "content": "{\n  \"name\": \"lsp-sample-server\",\n  \"description\": \"Example implementation of a language server in node.\",\n  \"version\": \"1.0.0\",\n  \"author\": \"Microsoft Corporation\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"*\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Microsoft/vscode-extension-samples\"\n  },\n  \"dependencies\": {\n    \"@typescript/vfs\": \"^1.5.0\",\n    \"typescript\": \"^5.3.3\",\n    \"uglify-js\": \"^3.17.4\",\n    \"vscode-languageserver\": \"^9.0.1\",\n    \"vscode-languageserver-textdocument\": \"^1.0.11\",\n    \"web-tree-sitter\": \"^0.20.8\"\n  },\n  \"scripts\": {}\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/server/src/server.ts",
    "content": "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nimport {\n  createConnection,\n  TextDocuments,\n  Diagnostic,\n  DiagnosticSeverity,\n  ProposedFeatures,\n  InitializeParams,\n  DidChangeConfigurationNotification,\n  CompletionItem,\n  CompletionItemKind,\n  TextDocumentPositionParams,\n  TextDocumentSyncKind,\n  InitializeResult,\n  SemanticTokensBuilder,\n} from \"vscode-languageserver/node\";\nimport { makeLSPCompiler } from \"../compiler-dist/compiler.js\";\nimport * as ts from \"typescript\";\n\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\n\n// Create a connection for the server, using Node's IPC as a transport.\n// Also include all preview / proposed LSP features.\nconst connection = createConnection(ProposedFeatures.all);\n\n// Create a simple text document manager.\nconst documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);\nlet env: any = undefined;\n\nlet hasConfigurationCapability = false;\nlet hasWorkspaceFolderCapability = false;\nlet hasDiagnosticRelatedInformationCapability = false;\n\nexport type ShadeupFileOutput = {\n  path: string;\n  contents: string;\n  mapping: IndexMapping;\n};\n\nexport type ShadeupRenderedFile = {\n  path: string;\n  contents: string;\n};\n\nexport type ShadeupDiagnostic = {\n  path: string;\n  level: \"info\" | \"warning\" | \"error\";\n  fullMessage: string;\n  startLine: number;\n  startColumn: number;\n  endLine: number;\n  endColumn: number;\n  message: string;\n};\n\nexport function indexToRowColumn(str: string, index: number) {\n  let row = 0;\n  let column = 0;\n  for (let i = 0; i < index; i++) {\n    if (str[i] === \"\\n\") {\n      row++;\n      column = 0;\n    } else {\n      column++;\n    }\n  }\n  return { row, column };\n}\n\nexport function rowColumnToIndex(str: string, row: number, column: number) {\n  let index = 0;\n  let currentRow = 0;\n  let currentColumn = 0;\n  while (currentRow < row || currentColumn < column) {\n    if (str[index] === \"\\n\") {\n      currentRow++;\n      currentColumn = 0;\n    } else {\n      currentColumn++;\n    }\n    index++;\n  }\n  return index;\n}\n\nexport type IndexMapping = [number, number, number, number][];\nexport type SourceString = {\n  str: string;\n  indexMapping: IndexMapping;\n};\n\nexport type ShadeupGenericDiagnostic = {\n  message: string;\n  startIndex: number;\n  endIndex: number;\n};\n\n// Finds the smallest range in the index mapping that contains the given range\nexport function lookupIndexMappingRange(\n  indexMapping: IndexMapping,\n  start: number,\n  end: number\n) {\n  let minStart = Infinity;\n  let maxEnd = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (start >= newStart && end <= newEnd) {\n      if (oldEnd - oldStart < size || size === 0) {\n        minStart = oldStart;\n        maxEnd = oldEnd;\n        size = oldEnd - oldStart;\n      }\n    }\n  }\n  return { start: minStart, end: maxEnd };\n}\n\nfunction findFile(path: string) {\n  return env.files.find((f: any) => f.path === path);\n}\n\nfunction tsDiagnosticToShadeupDiagnostic(diag: {\n  error: ts.Diagnostic;\n  file: string;\n  message: string;\n}): Diagnostic | null {\n  let path = diag.error.file?.fileName ?? \"\";\n  let file = findFile(path);\n  if (!file) return null;\n  let mapping = file.mapping;\n  if (!mapping) return null;\n\n  let to = lookupIndexMappingRange(\n    mapping,\n    diag.error.start ?? 0,\n    (diag.error.start ?? 0) + (diag.error.length ?? 0)\n  );\n\n  let fileSource = file.content;\n  if (fileSource) {\n    let start = indexToRowColumn(fileSource, to.start);\n    let end = indexToRowColumn(fileSource, to.end);\n\n    return {\n      severity: DiagnosticSeverity.Error,\n      /**\n       * A human-readable string describing the source of this\n       * diagnostic, e.g. 'typescript' or 'super lint'. It usually\n       * appears in the user interface.\n       */\n      source: \"shadeup\",\n      /**\n       * The diagnostic's message. It usually appears in the user interface\n       */\n      message: ts.flattenDiagnosticMessageText(diag.error.messageText, \"\\n\"),\n\n      range: {\n        start: {\n          character: start.column,\n          line: start.row,\n        },\n        end: {\n          character: end.column,\n          line: end.row,\n        },\n      },\n    };\n  }\n\n  return null;\n}\n\nfunction genericDiagnosticToShadeupDiagnostic(\n  path: string,\n  diag: ShadeupGenericDiagnostic\n): Diagnostic | null {\n  let file = findFile(path);\n  if (!file) return null;\n  let mapping = file.mapping;\n  if (!mapping) return null;\n\n  let fileSource = file.content;\n  if (fileSource) {\n    let start = indexToRowColumn(fileSource, diag.startIndex);\n    let end = indexToRowColumn(fileSource, diag.endIndex);\n\n    return {\n      source: \"shadeup\",\n      message: diag.message ?? \"\",\n      range: {\n        start: {\n          character: start.column,\n          line: start.row,\n        },\n        end: {\n          character: end.column,\n          line: end.row,\n        },\n      },\n    };\n  }\n\n  return null;\n}\n\nfunction delay(ms: number) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nlet dirtyFiles = new Set<string>();\nconst TOKEN_TYPES = [\n  \"class\",\n  \"comment\",\n  \"constant\",\n  \"function\",\n  \"keyword\",\n  \"number\",\n  \"operator\",\n  \"parameter\",\n  \"property\",\n  \"string\",\n  \"type\",\n  \"variable\",\n];\nconst TOKEN_MAP = {\n  class: \"class\",\n  comment: \"comment\",\n  constant: \"constant\",\n  function: \"function\",\n  functionElement: \"function\",\n  keyword: \"keyword\",\n  let: \"variable\",\n  alias: \"keyword\",\n  const: \"variable\",\n  constElement: \"variable\",\n  letElement: \"variable\",\n  number: \"number\",\n  operator: \"operator\",\n  parameter: \"parameter\",\n  property: \"property\",\n  string: \"string\",\n  type: \"type\",\n  typeElement: \"type\",\n  variable: \"variable\",\n  var: \"variable\",\n  \"local var\": \"variable\",\n  variableElement: \"variable\",\n  localVariableElement: \"variable\",\n};\nconnection.onInitialize(async (params: InitializeParams) => {\n  const capabilities = params.capabilities;\n\n  env = await makeLSPCompiler();\n  connection.console.log(\"Initialized\");\n\n  // Does the client support the `workspace/configuration` request?\n  // If not, we fall back using global settings.\n  hasConfigurationCapability = !!(\n    capabilities.workspace && !!capabilities.workspace.configuration\n  );\n  hasWorkspaceFolderCapability = !!(\n    capabilities.workspace && !!capabilities.workspace.workspaceFolders\n  );\n  hasDiagnosticRelatedInformationCapability = !!(\n    capabilities.textDocument &&\n    capabilities.textDocument.publishDiagnostics &&\n    capabilities.textDocument.publishDiagnostics.relatedInformation\n  );\n\n  const result: InitializeResult = {\n    capabilities: {\n      textDocumentSync: TextDocumentSyncKind.Incremental,\n      // Tell the client that this server supports code completion.\n      completionProvider: {\n        resolveProvider: true,\n      },\n      hoverProvider: true,\n      semanticTokensProvider: {\n        legend: {\n          tokenTypes: TOKEN_TYPES,\n          tokenModifiers: [\"declaration\", \"definition\", \"readonly\"],\n        },\n        range: false,\n        full: true,\n      },\n    },\n  };\n  if (hasWorkspaceFolderCapability) {\n    result.capabilities.workspace = {\n      workspaceFolders: {\n        supported: true,\n      },\n    };\n  }\n  return result;\n});\n\nconnection.onInitialized(() => {\n  if (hasConfigurationCapability) {\n    // Register for all configuration changes.\n    connection.client.register(\n      DidChangeConfigurationNotification.type,\n      undefined\n    );\n  }\n  if (hasWorkspaceFolderCapability) {\n    connection.workspace.onDidChangeWorkspaceFolders((_event) => {\n      connection.console.log(\"Workspace folder change event received.\");\n    });\n  }\n});\n\nconnection.onDidChangeConfiguration((change) => {});\n\n// Only keep settings for open documents\ndocuments.onDidClose((e) => {});\n\nfunction cleanPath(path: string) {\n  path = path.replace(\"file://\", \"\");\n  path = path.replace(\"%3A\", \":\").replace(/\\\\/g, \"/\");\n  // path = path.split(\"/\").slice(-1)[0];\n  path = path.replace(\".shadeup\", \".ts\");\n  return path;\n}\n\nconst tokenBuilders: Map<string, SemanticTokensBuilder> = new Map();\ndocuments.onDidClose((event) => {\n  tokenBuilders.delete(event.document.uri);\n});\nfunction getTokenBuilder(document: TextDocument): SemanticTokensBuilder {\n  let result = tokenBuilders.get(document.uri);\n  if (result !== undefined) {\n    return result;\n  }\n  result = new SemanticTokensBuilder();\n  tokenBuilders.set(document.uri, result);\n  return result;\n}\n\nlet docChangePromise: Map<string, Promise<void>> = new Map();\n\nconnection.languages.semanticTokens.on(async (params) => {\n  let path = cleanPath(params.textDocument.uri);\n\n  let docChange =\n    docChangePromise.get(params.textDocument.uri) ?? Promise.resolve();\n  await Promise.race([docChange, delay(400)]);\n\n  const document = documents.get(params.textDocument.uri);\n  let file = findFile(path);\n  if (!file) return { data: [] };\n  if (document === undefined) {\n    return { data: [] };\n  }\n  // const builder = getTokenBuilder(document);\n  let builder = new SemanticTokensBuilder();\n  let toks = env.classifications(path);\n  toks.ranges.sort((a: any, b: any) => a[0] - b[0]);\n  for (let tok of toks.ranges) {\n    let s = tok[0];\n    let e = tok[1];\n    let type = (TOKEN_MAP as any)[tok[2]];\n\n    let fileSource = file.content;\n    // let start = indexToRowColumn(fileSource, s);\n    // let end = indexToRowColumn(fileSource, e);\n    let start = document.positionAt(s);\n    let length = e - s;\n\n    builder.push(\n      start.line,\n      start.character,\n      length,\n      TOKEN_TYPES.indexOf(type),\n      0\n    );\n  }\n\n  return builder.build();\n});\n\n// The content of a text document has changed. This event is emitted\n// when the text document first opened or when its content has changed.\n\nlet currentContentChange: NodeJS.Timeout | null = null;\n\ndocuments.onDidChangeContent((change) => {\n  let outResolve = () => {};\n  let resolveable = new Promise<void>((resolve) => {\n    outResolve = resolve;\n  });\n  docChangePromise.set(change.document.uri, resolveable);\n  if (currentContentChange) clearTimeout(currentContentChange);\n  currentContentChange = setTimeout(async () => {\n    const contents = change.document.getText();\n    let path = cleanPath(change.document.uri);\n\n    const ignoreErrors = false;\n\n    await env.writeFile(path, contents, ignoreErrors);\n    // let filesToGenerate = [e.data.message.path];\n    // for (let dirty of dirtyFiles) {\n    // \tif (dirty !== e.data.message.path) filesToGenerate.push(dirty);\n    // }\n\n    let output: {\n      path: string;\n      contents: string;\n    }[] = [];\n    // if (e.data.message.emit) output = await env.regenerate(filesToGenerate);\n\n    //await env.regenerate();\n    let errors: {\n      error: ts.Diagnostic;\n      file: string;\n      message: string;\n    }[] = [];\n\n    if (!ignoreErrors) {\n      errors = await env.errors([path]);\n    }\n\n    outResolve();\n\n    let file = findFile(path);\n\n    let diags: Diagnostic[] = [];\n\n    for (let parseError of file?.parseDiagnostics ?? []) {\n      if (parseError.path !== path) continue;\n      let diag = genericDiagnosticToShadeupDiagnostic(path, parseError);\n      if (diag) diags.push(diag);\n    }\n\n    for (let error of errors) {\n      if (error.file !== path) continue;\n      let diag = tsDiagnosticToShadeupDiagnostic(error);\n      if (diag) diags.push(diag);\n    }\n\n    // let output: ShadeupRenderedFile[] = [];\n\n    if (errors.length == 0) {\n      dirtyFiles.clear();\n      // console.log('Output', e.data.message.path, output);\n    } else {\n      dirtyFiles.add(path);\n      // console.log('Errors', e.data.message.path, errors);\n    }\n    // connection.console.log(JSON.stringify(env.classifications(path)));\n\n    const diagnostics: Diagnostic[] = diags.map((d) => d);\n\n    // Send the computed diagnostics to VSCode.\n    connection.sendDiagnostics({ uri: change.document.uri, diagnostics });\n\n    // console.log('Sending writefile nonce', e.data.nonce);\n    // postMessage({\n    // \tnonce: e.data.nonce,\n    // \tclassifications: {\n    // \t\tpath: e.data.message.path,\n    // \t\tencoded: env.classifications(e.data.message.path)\n    // \t},\n    // \tfiles: env.files.map((f) => ({\n    // \t\tpath: f.path,\n    // \t\tcontents: f.content,\n    // \t\tmapping: f.mapping\n    // \t})),\n    // \tdiagnostics: diags,\n    // \toutput\n    // });\n  }, 400);\n});\n\nconnection.onDidChangeWatchedFiles(async (_change) => {});\n\nfunction displayPartsToString(parts?: ts.SymbolDisplayPart[]): string {\n  if (parts) {\n    let content = \"\";\n    for (let p of parts) {\n      content += p.text;\n    }\n    return content\n      .replace(/__\\./g, \"\")\n      .replace(/\\(property\\)/g, \"\")\n      .replace(/\\(method\\)/g, \"\");\n  } else {\n    return \"\";\n  }\n}\n\nconnection.onCompletion(\n  async (\n    _textDocumentPosition: TextDocumentPositionParams\n  ): Promise<CompletionItem[]> => {\n    const doc = documents.get(_textDocumentPosition.textDocument.uri);\n    if (!doc) return [];\n    let offset = doc.offsetAt(_textDocumentPosition.position);\n    const path = cleanPath(_textDocumentPosition.textDocument.uri);\n    let start = Date.now();\n    let completions = await env.completions(path, offset);\n\n    let items: CompletionItem[] = [];\n\n    for (let completion of completions) {\n      let c = completion.completion;\n      let kind =\n        (\n          {\n            [ts.ScriptElementKind.functionElement]: CompletionItemKind.Function,\n\n            [ts.ScriptElementKind.memberVariableElement]:\n              CompletionItemKind.Field,\n            [ts.ScriptElementKind.memberGetAccessorElement]:\n              CompletionItemKind.Field,\n            [ts.ScriptElementKind.memberSetAccessorElement]:\n              CompletionItemKind.Field,\n            [ts.ScriptElementKind.variableElement]: CompletionItemKind.Variable,\n            [ts.ScriptElementKind.constElement]: CompletionItemKind.Variable,\n            [ts.ScriptElementKind.localVariableElement]:\n              CompletionItemKind.Variable,\n            [ts.ScriptElementKind.classElement]: CompletionItemKind.Class,\n            [ts.ScriptElementKind.interfaceElement]:\n              CompletionItemKind.Interface,\n            [ts.ScriptElementKind.typeElement]: CompletionItemKind.Class,\n            [ts.ScriptElementKind.enumElement]: CompletionItemKind.Enum,\n            [ts.ScriptElementKind.moduleElement]: CompletionItemKind.Module,\n            [ts.ScriptElementKind.keyword]: CompletionItemKind.Keyword,\n            [ts.ScriptElementKind.scriptElement]: CompletionItemKind.File,\n            [ts.ScriptElementKind.alias]: CompletionItemKind.File,\n            [ts.ScriptElementKind.letElement]: CompletionItemKind.Variable,\n            [ts.ScriptElementKind.directory]: CompletionItemKind.Folder,\n            [ts.ScriptElementKind.string]: CompletionItemKind.Text,\n          } as any\n        )[c.kind.toString()] ?? CompletionItemKind.Property;\n\n      let parts = displayPartsToString(completion.details?.displayParts);\n      if (c.kind.toString() == ts.ScriptElementKind.alias) {\n        if (parts.startsWith(\"(alias) class\")) {\n          kind = CompletionItemKind.Class;\n        } else if (parts.startsWith(\"(alias) enum\")) {\n          kind = CompletionItemKind.Enum;\n        } else if (parts.startsWith(\"(alias) interface\")) {\n          kind = CompletionItemKind.Interface;\n        } else if (parts.startsWith(\"(alias) type\")) {\n          kind = CompletionItemKind.Class;\n        } else if (parts.startsWith(\"(alias) namespace\")) {\n          kind = CompletionItemKind.Module;\n        } else if (parts.startsWith(\"(alias) function\")) {\n          kind = CompletionItemKind.Function;\n        } else if (\n          parts.startsWith(\"(alias) var\") ||\n          parts.startsWith(\"(alias) let\")\n        ) {\n          kind = CompletionItemKind.Variable;\n        } else if (parts.startsWith(\"(alias) const\")) {\n          kind = CompletionItemKind.Variable;\n        }\n      }\n\n      if (c.kind.toString() == ts.ScriptElementKind.string) {\n        c.name = `\"${c.name.replace(/\"/g, \"\")}\"`;\n      }\n\n      let documentation =\n        completion.details?.documentation?.map((p: any) => ({\n          value: p.text,\n        })) ?? [];\n\n      if (!c.name.startsWith(\"__\"))\n        items.push({\n          label: c.name,\n          sortText: c.sortText,\n          kind,\n          insertText: c.name,\n          detail: parts,\n          documentation: documentation[0] ?? undefined,\n          // range: (completion as any).range,\n        });\n    }\n\n    return items;\n  }\n);\n\nconnection.onHover(async (params) => {\n  const doc = documents.get(params.textDocument.uri);\n  if (!doc) return null;\n  let offset = doc.offsetAt(params.position);\n  const path = cleanPath(params.textDocument.uri);\n  let hover = await env.hover(path, offset);\n\n  if (hover) {\n    return {\n      contents:\n        \"```ts\\n\" +\n        hover.displayParts.map((p: any) => p.text).join(\"\") +\n        \"\\n```\",\n      range: {\n        start: {\n          line: hover.range.startLineNumber,\n          character: hover.range.startColumn,\n        },\n        end: {\n          line: hover.range.endLineNumber,\n          character: hover.range.endColumn,\n        },\n      },\n    };\n  }\n  return null;\n});\n\n// This handler resolves additional information for the item selected in\n// the completion list.\nconnection.onCompletionResolve((item: CompletionItem): CompletionItem => {\n  if (item.data === 1) {\n    item.detail = \"TypeScript details\";\n    item.documentation = \"TypeScript documentation\";\n  } else if (item.data === 2) {\n    item.detail = \"JavaScript details\";\n    item.documentation = \"JavaScript documentation\";\n  }\n  return item;\n});\n\n// Make the text document manager listen on the connection\n// for open, change and close text document events\ndocuments.listen(connection);\n\n// Listen on the connection\nconnection.listen();\n"
  },
  {
    "path": "extension/vscode/shadeup/server/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2020\",\n    \"lib\": [\"es2020\"],\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"sourceMap\": true,\n    \"strict\": true,\n    \"outDir\": \"out\",\n    \"rootDir\": \"src\"\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \".vscode-test\"]\n}\n"
  },
  {
    "path": "extension/vscode/shadeup/shadeup.tmlanguage.json",
    "content": "{\n  \"$schema\": \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n  \"name\": \"Shadeup\",\n  \"scopeName\": \"source.shadeup\",\n  \"fileTypes\": [\n    \".shadeup\"\n  ],\n  \"patterns\": [\n    {\n      \"include\": \"#expression\"\n    },\n    {\n      \"include\": \"#comments\"\n    }\n  ],\n  \"repository\": {\n    \"array-literal\": {\n      \"name\": \"meta.array-literal.shadeup\",\n      \"begin\": \"\\\\[(?!(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\bfor\\\\b)\",\n      \"end\": \"]\",\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#comments\"\n        }\n      ]\n    },\n    \"block-comment\": {\n      \"name\": \"comment.block.shadeup\",\n      \"begin\": \"/\\\\*\",\n      \"end\": \"\\\\*/\"\n    },\n    \"comments\": {\n      \"patterns\": [\n        {\n          \"include\": \"#line-comment\"\n        },\n        {\n          \"include\": \"#block-comment\"\n        }\n      ]\n    },\n    \"decorator\": {\n      \"name\": \"meta.decorator.shadeup\",\n      \"begin\": \"@(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*(?=\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b)\",\n      \"end\": \"\",\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#comments\"\n        }\n      ]\n    },\n    \"directive\": {\n      \"name\": \"meta.directive.shadeup\",\n      \"begin\": \"#\\\\b[_a-zA-Z-0-9]+\\\\b\",\n      \"end\": \"$\",\n      \"patterns\": [\n        {\n          \"include\": \"#directive-variable\"\n        },\n        {\n          \"include\": \"#comments\"\n        }\n      ]\n    },\n    \"directive-variable\": {\n      \"name\": \"keyword.control.declaration.shadeup\",\n      \"match\": \"\\\\b[_a-zA-Z-0-9]+\\\\b\"\n    },\n    \"escape-character\": {\n      \"name\": \"constant.character.escape.shadeup\",\n      \"match\": \"\\\\\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\\\\\|'|\\\\${)\"\n    },\n    \"expression\": {\n      \"patterns\": [\n        {\n          \"include\": \"#string-literal-double\"\n        },\n        {\n          \"include\": \"#string-literal\"\n        },\n        {\n          \"include\": \"#string-verbatim\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#named-literal\"\n        },\n        {\n          \"include\": \"#object-literal\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#keyword\"\n        },\n        {\n          \"include\": \"#storage-func\"\n        },\n        {\n          \"include\": \"#variable\"\n        },\n        {\n          \"include\": \"#storage-modifier\"\n        },\n        {\n          \"include\": \"#identifier\"\n        },\n        {\n          \"include\": \"#function-call\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#lambda-start\"\n        },\n        {\n          \"include\": \"#directive\"\n        }\n      ]\n    },\n    \"function-call\": {\n      \"name\": \"meta.function-call.shadeup\",\n      \"begin\": \"(\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b)(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\(\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"entity.name.function.shadeup\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#comments\"\n        }\n      ]\n    },\n    \"identifier\": {\n      \"name\": \"variable.other.readwrite.shadeup\",\n      \"match\": \"\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b(?!(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\()\"\n    },\n    \"keyword\": {\n      \"name\": \"keyword.control.declaration.shadeup\",\n      \"match\": \"\\\\b(metadata|targetScope|resource|module|param|shader|workgroup|output|for|in|if|while|break|continue|else|return|existing|import|as|type|with|using|assert|provider)\\\\b\"\n    },\n    \"lambda-start\": {\n      \"name\": \"meta.lambda-start.shadeup\",\n      \"begin\": \"(\\\\((?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*(,(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*)*\\\\)|\\\\((?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\)|(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*)(?=(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*=>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"meta.undefined.shadeup\",\n          \"patterns\": [\n            {\n              \"include\": \"#identifier\"\n            },\n            {\n              \"include\": \"#comments\"\n            }\n          ]\n        }\n      },\n      \"end\": \"(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*=>\"\n    },\n    \"line-comment\": {\n      \"name\": \"comment.line.double-slash.shadeup\",\n      \"match\": \"//.*(?=$)\"\n    },\n    \"named-literal\": {\n      \"name\": \"constant.language.shadeup\",\n      \"match\": \"\\\\b(true|false|null)\\\\b\"\n    },\n    \"numeric-literal\": {\n      \"name\": \"constant.numeric.shadeup\",\n      \"match\": \"[0-9]+\"\n    },\n    \"object-literal\": {\n      \"name\": \"meta.object-literal.shadeup\",\n      \"begin\": \"{\",\n      \"end\": \"}\",\n      \"patterns\": [\n        {\n          \"include\": \"#object-property-key\"\n        },\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#comments\"\n        }\n      ]\n    },\n    \"object-property-key\": {\n      \"name\": \"variable.other.property.shadeup\",\n      \"match\": \"\\\\b[_$[:alpha:]][_$[:alnum:]]*\\\\b(?=(?:[ \\\\t\\\\r\\\\n]|\\\\/\\\\*(?:\\\\*(?!\\\\/)|[^*])*\\\\*\\\\/)*:)\"\n    },\n    \"storage-func\": {\n      \"name\": \"storage.type.function.shadeup\",\n      \"match\": \"\\\\b(fn|struct|trait|impl)\\\\b\"\n    },\n    \"storage-modifier\": {\n      \"name\": \"storage.modifier.shadeup\",\n      \"match\": \"\\\\b(pub)\\\\b\"\n    },\n    \"string-literal\": {\n      \"name\": \"string.quoted.single.shadeup\",\n      \"begin\": \"'(?!'')\",\n      \"end\": \"'\",\n      \"patterns\": [\n        {\n          \"include\": \"#escape-character\"\n        },\n        {\n          \"include\": \"#string-literal-subst\"\n        }\n      ]\n    },\n    \"string-literal-double\": {\n      \"name\": \"string.quoted.double.shadeup\",\n      \"begin\": \"\\\"(?!\\\"\\\")\",\n      \"end\": \"\\\"\",\n      \"patterns\": [\n        {\n          \"include\": \"#escape-character\"\n        },\n        {\n          \"include\": \"#string-literal-subst\"\n        }\n      ]\n    },\n    \"string-literal-subst\": {\n      \"name\": \"meta.string-literal-subst.shadeup\",\n      \"begin\": \"(?<!\\\\\\\\)(\\\\${)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.template-expression.begin.shadeup\"\n        }\n      },\n      \"end\": \"(})\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.template-expression.end.shadeup\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#comments\"\n        }\n      ]\n    },\n    \"string-verbatim\": {\n      \"name\": \"string.quoted.multi.shadeup\",\n      \"begin\": \"'''\",\n      \"end\": \"'''\",\n      \"patterns\": []\n    },\n    \"variable\": {\n      \"name\": \"storage.type.shadeup\",\n      \"match\": \"\\\\b(let|const)\\\\b\"\n    }\n  }\n}"
  },
  {
    "path": "extension/vscode/shadeup/syntaxes/shadeup.tmLanguage.json",
    "content": "{\n\t\"$schema\": \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n\t\"name\": \"Shadeup\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [{\n\t\t\t\t\"name\": \"keyword.control.shadeup\",\n\t\t\t\t\"match\": \"\\\\b(if|while|for|return)\\\\b\"\n\t\t\t}]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"name\": \"string.quoted.double.shadeup\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.shadeup\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"scopeName\": \"source.shadeup\"\n}"
  },
  {
    "path": "extension/vscode/shadeup/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2020\",\n    \"lib\": [\"es2020\"],\n    \"outDir\": \"out\",\n    \"rootDir\": \"src\",\n    \"sourceMap\": true\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \".vscode-test\"],\n  \"references\": [{ \"path\": \"./client\" }, { \"path\": \"./server\" }]\n}\n"
  },
  {
    "path": "lang/README.md",
    "content": "<p align=\"center\"><a href=\"https://unreal.shadeup.dev\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"100\" src=\"https://unreal.shadeup.dev/favicon.png\" alt=\"Shadeup logo\"></a></p>\n\n<h1 align=\"center\"><a href=\"https://unreal.shadeup.dev\">Shadeup Lang</a></h1>\n\nHere lies a partial mirror of the shadeup language tools.\n\n> [!NOTE]\n> Running/building this standalone is not possible at the moment, but this is in the works.\n"
  },
  {
    "path": "lang/shadeup/alert.ts",
    "content": "export type ShadeupAlert = {\n\tlevel: 'info' | 'warning' | 'error';\n\tmessage: string;\n\tlocation: Number;\n\tline?: Number;\n\tcolumn?: Number;\n};\n"
  },
  {
    "path": "lang/shadeup/compiler/assets.json",
    "content": "[\n\t[\"heightmaps/crater-lake-color\", \"image\"],\n\t[\"heightmaps/crater-lake\", \"image\"],\n\t[\"heightmaps/grand-canyon\", \"image\"],\n\t[\"heightmaps/rugged\", \"image\"],\n\t[\"models/bunny\", \"model\"],\n\t[\"models/cornell-box\", \"model\"],\n\t[\"models/dragon\", \"model\"],\n\t[\"models/erato\", \"model\"],\n\t[\"models/head\", \"model\"],\n\t[\"models/sponza\", \"model\"],\n\t[\"models/suzanne\", \"model\"],\n\t[\"models/teapot\", \"model\"],\n\t[\"textures/bark/arm\", \"image\"],\n\t[\"textures/bark/color\", \"image\"],\n\t[\"textures/bark/displacement\", \"image\"],\n\t[\"textures/bark/normal\", \"image\"],\n\t[\"textures/beach/arm\", \"image\"],\n\t[\"textures/beach/color\", \"image\"],\n\t[\"textures/beach/displacement\", \"image\"],\n\t[\"textures/beach/normal\", \"image\"],\n\t[\"textures/brick/arm\", \"image\"],\n\t[\"textures/brick/color\", \"image\"],\n\t[\"textures/brick/displacement\", \"image\"],\n\t[\"textures/brick/normal\", \"image\"],\n\t[\"textures/pebbles/arm\", \"image\"],\n\t[\"textures/pebbles/color\", \"image\"],\n\t[\"textures/pebbles/displacement\", \"image\"],\n\t[\"textures/pebbles/normal\", \"image\"],\n\t[\"textures/stone-path/arm\", \"image\"],\n\t[\"textures/stone-path/color\", \"image\"],\n\t[\"textures/stone-path/displacement\", \"image\"],\n\t[\"textures/stone-path/normal\", \"image\"],\n\t[\"textures/wood/arm\", \"image\"],\n\t[\"textures/wood/color\", \"image\"],\n\t[\"textures/wood/normal\", \"image\"]\n]\n"
  },
  {
    "path": "lang/shadeup/compiler/assets.ts",
    "content": "import type { AssetFileType } from '../../components/common/Asset';\n\nimport builtInAssets from './assets.json';\n\nexport function buildAssetsFile(content: string) {\n\tlet out = `\nimport {\nfloat4,\nfloat3,\nfloat,\nfloat2,\nbool,\nint,\nint2,\nint3,\nint4,\nuint,\nuint2,\nuint3,\nuint4,\nuint8\n} from '/std_math';\n\nimport { Mesh, Model } from '/_std/mesh';\nimport { texture2d } from '/_std/texture';\n\ndeclare global {\\n`;\n\tlet typeMapping: { [key in AssetFileType]: string } = {\n\t\timage: 'texture2d<float4>',\n\t\taudio: 'unknown',\n\t\tvideo: 'unknown',\n\t\tbinary: 'buffer<uint8>',\n\t\ttext: 'string',\n\t\tmodel: 'Model'\n\t};\n\n\ttry {\n\t\tlet parsed = JSON.parse(content);\n\n\t\tparsed.forEach((asset: { name: string; type: AssetFileType; previewId: string }) => {\n\t\t\tlet docCom = `![thumb](https://assets.shadeup.dev/`;\n\t\t\tout += `\n/**\n * ${docCom}${asset.previewId})\n */\nfunction load(asset: '${asset.name}'): ${typeMapping[asset.type]};\n`;\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n\n\tfor (let asset of builtInAssets) {\n\t\tout += `\n/**\n* Built-in asset: ${asset[0]}\n*/\nfunction load(asset: '${asset[0]}'): ${typeMapping[asset[1] as AssetFileType]};\n`;\n\t}\n\n\treturn out + `}`;\n}\n\nexport const defaultAssets = builtInAssets;\n"
  },
  {
    "path": "lang/shadeup/compiler/common.ts",
    "content": "import type ts from 'typescript';\nimport type { ClassificationRanges } from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport type { IndexMapping } from '../../../../shadeup-frontend/lib/generator/root';\n\nexport type ShadeupFileOutput = {\n\tpath: string;\n\tcontents: string;\n\tmapping: IndexMapping;\n};\n\nexport type ShadeupRenderedFile = {\n\tpath: string;\n\tcontents: string;\n};\n\nexport type ShadeupDiagnostic = {\n\tpath: string;\n\tlevel: 'info' | 'warning' | 'error';\n\tfullMessage: string;\n\tstartLine: number;\n\tstartColumn: number;\n\tendLine: number;\n\tendColumn: number;\n\tmessage: string;\n};\n\nexport type MessageWorkerToMain = {\n\tnonce: number;\n\tfiles: ShadeupFileOutput[];\n\tdiagnostics: ShadeupDiagnostic[];\n\tclassifications?: {\n\t\tpath: string;\n\t\tencoded: ClassificationRanges;\n\t};\n\tcompletions: {\n\t\tcompletion: ts.CompletionEntry;\n\t\tdetails: ts.CompletionEntryDetails | undefined;\n\t}[];\n\thover:\n\t\t| (ts.QuickInfo & {\n\t\t\t\trange: {\n\t\t\t\t\tstartLineNumber: number;\n\t\t\t\t\tendLineNumber: number;\n\t\t\t\t\tstartColumn: number;\n\t\t\t\t\tendColumn: number;\n\t\t\t\t};\n\t\t  })\n\t\t| null;\n\toutput: ShadeupRenderedFile[];\n\tready: boolean;\n};\n\ntype WriteFileMessage = {\n\tpath: string;\n\tcontents: string;\n\temit: boolean;\n\tignoreErrors?: boolean;\n};\n\ntype GetCompletionsMessage = {\n\tpath: string;\n\tposition: number;\n};\n\ntype GetHoverMessage = {\n\tpath: string;\n\tposition: number;\n};\n\nexport type MessageMainToWorker = {\n\tnonce?: number;\n} & (\n\t| {\n\t\t\tkey: 'writeFile';\n\t\t\tmessage: WriteFileMessage;\n\t  }\n\t| {\n\t\t\tkey: 'writeFileTypescript';\n\t\t\tmessage: WriteFileMessage;\n\t  }\n\t| {\n\t\t\tkey: 'getCompletions';\n\t\t\tmessage: GetCompletionsMessage;\n\t  }\n\t| {\n\t\t\tkey: 'getHover';\n\t\t\tmessage: GetHoverMessage;\n\t  }\n\t| {\n\t\t\tkey: 'init';\n\t  }\n\t| {\n\t\t\tkey: 'build';\n\t  }\n\t| { key: 'reset' }\n\t| { key: 'assets'; message: [string, [string, string]][] }\n);\n"
  },
  {
    "path": "lang/shadeup/compiler/generateDocs.ts",
    "content": "import {\n\tShadeupEnvironment,\n\ttype ShadeupGenericDiagnostic\n} from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport type {\n\tMessageMainToWorker,\n\tMessageWorkerToMain,\n\tShadeupDiagnostic,\n\tShadeupRenderedFile\n} from './common';\nimport {\n\tlookupIndexMappingRange,\n\treverseLookupIndexMapping\n} from '../../../../shadeup-frontend/lib/generator/root';\nimport { indexToRowColumn } from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport ts from 'typescript';\nimport files from '../library/files';\n\nexport type DocFunction = {\n\tname: string;\n\toverloads: {\n\t\tdescription: string;\n\t\tparameters: {\n\t\t\tname: string;\n\t\t\tdescription: string;\n\t\t\ttype: string;\n\t\t}[];\n\t\ttypeParameters: string[];\n\t\treturnType: string;\n\t}[];\n};\n\nexport type DocProp = {\n\tname: string;\n\tdescription: string;\n\ttype: string;\n\tdefault?: string;\n};\n\nexport type DocModule = {\n\tname: string;\n\tdescription: string;\n\tfunctions: DocFunction[];\n};\n\nexport type DocClass = {\n\tname: string;\n\tdescription: string;\n\tfunctions: DocFunction[];\n\tprops: DocProp[];\n};\n\nexport type Doc = {\n\tmodules: DocModule[];\n\tclasses: DocClass[];\n\tfunctions: DocFunction[];\n\tconstants: DocProp[];\n};\n\nexport async function generateDocs() {\n\tlet env = new ShadeupEnvironment();\n\tenv.emitLogs = false;\n\tawait env.init();\n\tawait env.writeFile(\n\t\t'/file.ts',\n\t\t`\n\t\n\t`\n\t);\n\n\tlet writes: Promise<any>[] = [];\n\n\tlet initFiles = ['/file.ts'];\n\n\tlet start = performance.now();\n\n\tfor (let [path, contents] of Object.entries(files.ts)) {\n\t\tlet p = '/_std/' + path + '.ts';\n\t\tif (path == 'std') p = '/std.ts'; // So we can import it via import ui from \"std\";\n\n\t\twrites.push(env.writeFileTypescript(p, contents));\n\t\tinitFiles.push(p);\n\t}\n\n\tfor (let [path, contents] of Object.entries(files.shadeup)) {\n\t\tlet p = '/_std/' + path + '.ts';\n\t\twrites.push(env.writeFile(p, contents, true));\n\t\tinitFiles.push(p);\n\t}\n\n\tawait Promise.all(writes);\n\n\tlet docs: Doc = {\n\t\tmodules: [],\n\t\tfunctions: [],\n\t\tclasses: [],\n\t\tconstants: [\n\t\t\t{\n\t\t\t\tname: 'env',\n\t\t\t\tdescription:\n\t\t\t\t\t'Global env context struct. This updates every frame and includes input data, time data, and more.',\n\t\t\t\ttype: 'FrameContext'\n\t\t\t}\n\t\t]\n\t};\n\n\tconst IGNORE_LIST = [\n\t\t'swizzle',\n\t\t'add',\n\t\t'sub',\n\t\t'div',\n\t\t'shader_start_shd_',\n\t\t'shadeupMakeTextureFromUrl',\n\t\t'rshift',\n\t\t'lshift',\n\t\t'refract2',\n\t\t'refract3',\n\t\t'refract4',\n\t\t'RegExp',\n\t\t'RangeError',\n\t\t'ReferenceError',\n\t\t'Number',\n\t\t'neq',\n\t\t'Object',\n\t\t'or',\n\t\t'and',\n\t\t'gte',\n\t\t'lte',\n\t\t'negate',\n\t\t'mul',\n\t\t'mod289_1',\n\t\t'mod289_2',\n\t\t'mod289_3',\n\t\t'mod289_4',\n\t\t'matrixMul2x2float2',\n\t\t'matrixMul3x3float3',\n\t\t'matrixMul4x4float4',\n\t\t'matrixMulfloat22x2',\n\t\t'matrixMulfloat33x3',\n\t\t'matrixMulfloat44x4',\n\t\t'matrixTransposefloat2x2',\n\t\t'matrixTransposefloat3x3',\n\t\t'matrixTransposefloat4x4',\n\t\t'matrixMul',\n\t\t'matrixInversefloat4x4',\n\t\t'matrixInversefloat3x3',\n\t\t'matrixInversefloat2x2',\n\t\t'makeVector',\n\t\t'String',\n\t\t'SyntaxError',\n\t\t'TypeError',\n\t\t'testDocComment',\n\t\t'bitand',\n\t\t'bitnot',\n\t\t'bitor',\n\t\t'bitxor',\n\t\t'Boolean',\n\t\t'cCall',\n\t\t'componentOpSingularFloat',\n\t\t'componentOpSingular',\n\t\t'componentOpMatch',\n\n\t\t'componentOp',\n\t\t'componentMathSingular',\n\t\t'componentMath',\n\t\t'componentReduce',\n\t\t'drawAlt2',\n\t\t'drawFullscreen',\n\t\t'cross2',\n\t\t'cross3',\n\t\t'dot2',\n\t\t'dot3',\n\t\t'dot4',\n\t\t'Array',\n\t\t'lt',\n\t\t'gt',\n\t\t'applyMatrix3x3Methods',\n\t\t'applyMatrix2x2Methods',\n\t\t'applyMatrix4x4Methods',\n\t\t'makeShader',\n\t\t'lerp1',\n\t\t'lerp2',\n\t\t'lerp3'\n\t];\n\n\tlet checker: ts.TypeChecker = env.tsEnv?.env.languageService\n\t\t.getProgram()\n\t\t?.getTypeChecker() as any;\n\n\tlet allFiles = env.tsEnv?.fsMap.keys();\n\tif (allFiles && checker) {\n\t\tfor (let f of allFiles) {\n\t\t\tlet ff = env.tsEnv?.env.getSourceFile(f);\n\t\t\tif (!ff) continue;\n\n\t\t\tfunction addFunc(node: ts.Node, list: DocFunction[]): DocFunction | undefined {\n\t\t\t\tif (\n\t\t\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\t\t\tts.isVariableStatement(node) ||\n\t\t\t\t\tts.isMethodDeclaration(node)\n\t\t\t\t) {\n\t\t\t\t\tif (ts.isVariableStatement(node)) {\n\t\t\t\t\t\tnode = node.declarationList.declarations[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet signatures = checker.getSignaturesOfType(\n\t\t\t\t\t\tchecker.getTypeAtLocation(node),\n\t\t\t\t\t\tts.SignatureKind.Call\n\t\t\t\t\t);\n\t\t\t\t\tif (IGNORE_LIST.includes(node.name?.getText())) return;\n\t\t\t\t\tlet funcExists = list.find((f) => f.name === node.name?.getText());\n\t\t\t\t\tif (!funcExists) {\n\t\t\t\t\t\tif (!node.name?.getText()) return;\n\t\t\t\t\t\tlet funcDoc = {\n\t\t\t\t\t\t\tname: node.name?.getText() ?? '',\n\t\t\t\t\t\t\toverloads: signatures.map((sig) => {\n\t\t\t\t\t\t\t\tlet sigSymbol = checker.getSymbolAtLocation(sig.declaration!);\n\n\t\t\t\t\t\t\t\tlet params = sig.getParameters().map((p) => {\n\t\t\t\t\t\t\t\t\tlet decl = p.getDeclarations()![0];\n\t\t\t\t\t\t\t\t\tlet symbol = checker.getSymbolAtLocation(decl);\n\t\t\t\t\t\t\t\t\tif (!symbol) {\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tname: p.name,\n\t\t\t\t\t\t\t\t\t\t\tdescription: '',\n\t\t\t\t\t\t\t\t\t\t\ttype: checker.typeToString(checker.getTypeOfSymbolAtLocation(p, decl))\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlet type = checker.typeToString(checker.getTypeOfSymbolAtLocation(symbol!, decl));\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tname: p.name,\n\t\t\t\t\t\t\t\t\t\tdescription: ts.displayPartsToString(p.getDocumentationComment(checker)),\n\t\t\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tlet returnType = checker.typeToString(sig.getReturnType());\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttypeParameters: sig.typeParameters?.map((t) => checker.typeToString(t)) ?? [],\n\t\t\t\t\t\t\t\t\tdescription: ts.displayPartsToString(sig.getDocumentationComment(checker)),\n\t\t\t\t\t\t\t\t\tparameters: params,\n\t\t\t\t\t\t\t\t\treturnType\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} as DocFunction;\n\t\t\t\t\t\tif (funcDoc.overloads.length == 12) {\n\t\t\t\t\t\t\tlet isMatch = true;\n\t\t\t\t\t\t\tfor (let ov of funcDoc.overloads) {\n\t\t\t\t\t\t\t\tif (ov.parameters.length != 1) {\n\t\t\t\t\t\t\t\t\tisMatch = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (ov.parameters[0].type != ov.returnType) {\n\t\t\t\t\t\t\t\t\tisMatch = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t![\n\t\t\t\t\t\t\t\t\t\t'float',\n\t\t\t\t\t\t\t\t\t\t'float2',\n\t\t\t\t\t\t\t\t\t\t'float3',\n\t\t\t\t\t\t\t\t\t\t'float4',\n\t\t\t\t\t\t\t\t\t\t'int',\n\t\t\t\t\t\t\t\t\t\t'int2',\n\t\t\t\t\t\t\t\t\t\t'int3',\n\t\t\t\t\t\t\t\t\t\t'int4',\n\t\t\t\t\t\t\t\t\t\t'uint',\n\t\t\t\t\t\t\t\t\t\t'uint2',\n\t\t\t\t\t\t\t\t\t\t'uint3',\n\t\t\t\t\t\t\t\t\t\t'uint4'\n\t\t\t\t\t\t\t\t\t].includes(ov.parameters[0].type)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tisMatch = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (isMatch) {\n\t\t\t\t\t\t\t\tfuncDoc.overloads = [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdescription: funcDoc.overloads[0].description,\n\t\t\t\t\t\t\t\t\t\tparameters: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tname: 'a',\n\t\t\t\t\t\t\t\t\t\t\t\ttype: 'vec | scalar',\n\t\t\t\t\t\t\t\t\t\t\t\tdescription: ''\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\ttypeParameters: funcDoc.overloads[0].typeParameters,\n\t\t\t\t\t\t\t\t\t\treturnType: 'vec | scalar'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn funcDoc;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction recursive(node: ts.Node) {\n\t\t\t\tif (!isNodeExported(node)) return;\n\n\t\t\t\tif (\n\t\t\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\t\t\tts.isVariableStatement(node) ||\n\t\t\t\t\tts.isMethodDeclaration(node)\n\t\t\t\t) {\n\t\t\t\t\tif (ts.isVariableStatement(node)) {\n\t\t\t\t\t\tlet decl = node.declarationList.declarations[0];\n\t\t\t\t\t\tif (['PI', 'env'].includes(decl.name?.getText() ?? '')) {\n\t\t\t\t\t\t\tdocs.constants.push({\n\t\t\t\t\t\t\t\tname: decl.name?.getText() ?? '',\n\t\t\t\t\t\t\t\tdescription: ts.displayPartsToString(\n\t\t\t\t\t\t\t\t\tchecker.getSymbolAtLocation(decl.name!)?.getDocumentationComment(checker)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\ttype: checker.typeToString(\n\t\t\t\t\t\t\t\t\tchecker.getTypeOfSymbolAtLocation(checker.getSymbolAtLocation(decl.name!)!, decl)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet f = addFunc(node, docs.functions);\n\t\t\t\t\tif (f && f.overloads.length > 0) docs.functions.push(f);\n\t\t\t\t} else if (ts.isClassDeclaration(node) || ts.isModuleDeclaration(node)) {\n\t\t\t\t\tlet name = node.name?.getText();\n\t\t\t\t\tif (!name) return;\n\t\t\t\t\tif (['global', 'Intl'].includes(name)) return;\n\n\t\t\t\t\tlet symbol = checker.getSymbolAtLocation(node.name!);\n\t\t\t\t\tif (!symbol) return;\n\t\t\t\t\tlet isModule = true;\n\t\t\t\t\tif (symbol.members) {\n\t\t\t\t\t\tsymbol.members.forEach((m) => {\n\t\t\t\t\t\t\tlet decl = m.valueDeclaration;\n\t\t\t\t\t\t\tif (decl && ts.isPropertyDeclaration(decl)) {\n\t\t\t\t\t\t\t\tisModule = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isModule) {\n\t\t\t\t\t\tlet mod = docs.modules.find((m) => m.name === name);\n\t\t\t\t\t\tif (!mod) {\n\t\t\t\t\t\t\tlet funcs: DocFunction[] = [];\n\t\t\t\t\t\t\tfunction visitModuleSub(n: ts.Node) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tts.isFunctionDeclaration(n) ||\n\t\t\t\t\t\t\t\t\tts.isVariableStatement(n) ||\n\t\t\t\t\t\t\t\t\tts.isMethodDeclaration(n)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tlet f = addFunc(n, funcs);\n\t\t\t\t\t\t\t\t\tif (f) funcs.push(f);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tn.forEachChild((n) => {\n\t\t\t\t\t\t\t\t\t\tvisitModuleSub(n);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode.forEachChild((n) => {\n\t\t\t\t\t\t\t\tvisitModuleSub(n);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmod = {\n\t\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\t\tdescription: ts.displayPartsToString(symbol.getDocumentationComment(checker)),\n\t\t\t\t\t\t\t\tfunctions: funcs\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdocs.modules.push(mod);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.forEachChild((node) => {\n\t\t\t\t\t\t\trecursive(node);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (name == 'buffer_internal') name = 'buffer';\n\t\t\t\t\t\tif (name == 'texture2d_internal_empty') name = 'texture2d';\n\t\t\t\t\t\tif (name == 'texture3d_internal_empty') name = 'texture3d';\n\t\t\t\t\t\tif (name == 'atomic_internal') name = 'atomic';\n\t\t\t\t\t\tlet mod = docs.classes.find((m) => m.name === name);\n\t\t\t\t\t\tif (!mod) {\n\t\t\t\t\t\t\tlet funcs: DocFunction[] = [];\n\t\t\t\t\t\t\tlet props: DocProp[] = [];\n\t\t\t\t\t\t\tfunction visitModuleSub(n: ts.Node) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tts.isFunctionDeclaration(n) ||\n\t\t\t\t\t\t\t\t\tts.isVariableStatement(n) ||\n\t\t\t\t\t\t\t\t\tts.isMethodDeclaration(n)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tlet f = addFunc(n, funcs);\n\t\t\t\t\t\t\t\t\tif (f) funcs.push(f);\n\t\t\t\t\t\t\t\t} else if (ts.isPropertyDeclaration(n)) {\n\t\t\t\t\t\t\t\t\tlet name = n.name.getText();\n\t\t\t\t\t\t\t\t\tlet symbol = checker.getSymbolAtLocation(n.name);\n\t\t\t\t\t\t\t\t\tif (!symbol) return;\n\t\t\t\t\t\t\t\t\tlet type = checker.typeToString(checker.getTypeOfSymbolAtLocation(symbol!, n));\n\t\t\t\t\t\t\t\t\tprops.push({\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tdescription: ts.displayPartsToString(symbol.getDocumentationComment(checker)),\n\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\tdefault: n.initializer ? n.initializer.getText() : undefined\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tn.forEachChild((n) => {\n\t\t\t\t\t\t\t\t\t\tvisitModuleSub(n);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode.forEachChild((n) => {\n\t\t\t\t\t\t\t\tvisitModuleSub(n);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmod = {\n\t\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\t\tdescription: ts.displayPartsToString(symbol.getDocumentationComment(checker)),\n\t\t\t\t\t\t\t\tfunctions: funcs,\n\t\t\t\t\t\t\t\tprops: props\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdocs.classes.push(mod);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.forEachChild((node) => {\n\t\t\t\t\t\t\trecursive(node);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnode.forEachChild((node) => {\n\t\t\t\t\t\trecursive(node);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tff.forEachChild((node) => {\n\t\t\t\trecursive(node);\n\t\t\t});\n\t\t}\n\t}\n\t// env.emitLogs = true;\n\tconsole.log('Generated docs in ', performance.now() - start, 'ms');\n\tconsole.log(docs);\n\n\treturn docs;\n}\n\nfunction isNodeExported(node: ts.Node): boolean {\n\treturn (\n\t\t(ts.getCombinedModifierFlags(node as ts.Declaration) & ts.ModifierFlags.Export) !== 0 ||\n\t\t(!!node.parent && node.parent.kind === ts.SyntaxKind.SourceFile)\n\t);\n}\n"
  },
  {
    "path": "lang/shadeup/compiler/generateTsCache.ts",
    "content": "import {\n\tShadeupEnvironment,\n\ttype ShadeupGenericDiagnostic\n} from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport type {\n\tMessageMainToWorker,\n\tMessageWorkerToMain,\n\tShadeupDiagnostic,\n\tShadeupRenderedFile\n} from './common';\nimport {\n\tlookupIndexMappingRange,\n\treverseLookupIndexMapping\n} from '../../../../shadeup-frontend/lib/generator/root';\nimport { indexToRowColumn } from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport ts from 'typescript';\nimport files from '../library/files';\n\nexport async function generateTsCache() {\n\tlet env = new ShadeupEnvironment();\n\tenv.emitLogs = false;\n\tawait env.init();\n\tenv.stdEmitCache.clear();\n\tawait env.writeFile(\n\t\t'/file.ts',\n\t\t`\n\t\n\t`\n\t);\n\n\tlet writes: Promise<any>[] = [];\n\n\tlet initFiles = ['/file.ts'];\n\n\tlet start = performance.now();\n\n\tfor (let [path, contents] of Object.entries(files.ts)) {\n\t\tlet p = '/_std/' + path + '.ts';\n\t\tif (path == 'std') p = '/std.ts'; // So we can import it via import ui from \"std\";\n\n\t\twrites.push(env.writeFileTypescript(p, contents));\n\t\tinitFiles.push(p);\n\t}\n\n\tfor (let [path, contents] of Object.entries(files.shadeup)) {\n\t\tlet p = '/_std/' + path + '.ts';\n\t\twrites.push(env.writeFile(p, contents, true));\n\t\tinitFiles.push(p);\n\t}\n\n\tawait Promise.all(writes);\n\n\tawait env.regenerate();\n\tlet outs = await env.errors();\n\tfor (let out of outs) {\n\t\tif (out.error) {\n\t\t\tconsole.log(out.error);\n\t\t}\n\t}\n\n\treturn env.stdEmitCache;\n}\n"
  },
  {
    "path": "lang/shadeup/compiler/interface.ts",
    "content": "import type { IndexMapping } from '../../../../shadeup-frontend/lib/generator/root';\n\nimport type { MonacoEditorInstance } from 'src/monaco/editor';\nimport type ts from 'typescript';\n\nimport type {\n\tMessageMainToWorker,\n\tMessageWorkerToMain,\n\tShadeupDiagnostic,\n\tShadeupRenderedFile\n} from './common';\n\nexport type ShadeupWorkspaceDiagnosticEvent = {\n\tdiagnostics: ShadeupDiagnostic[];\n};\n\nexport type ShadeupWorkspaceOutputEvent = {\n\tfiles: ShadeupRenderedFile[];\n};\n\nexport class ShadeupWorkspaceInterface extends EventTarget {\n\tid: number = 0;\n\tworker: Worker;\n\n\tautoCompile = true;\n\n\tmessageTimings: Map<number, { name: string; timestamp: number }> = new Map();\n\n\tpendingWrites: Map<string, { nonce: number; content: string }> = new Map();\n\tdirtyFilesForWrite: Set<string> = new Set();\n\n\tfiles: Map<string, string> = new Map();\n\tfileTypes: Map<string, 'typescript' | 'shadeup'> = new Map();\n\tfileMapping: Map<string, IndexMapping> = new Map();\n\tdiagnostics: ShadeupDiagnostic[] = [];\n\n\tcachedFiles: ShadeupRenderedFile[] = [];\n\n\tqueue: MessageMainToWorker[] = [];\n\n\tworkerReady = false;\n\n\tnonceCounter = 0;\n\n\twaitingForNonce: Map<number, (msg: MessageWorkerToMain) => void> = new Map();\n\n\tconstructor(worker: Worker) {\n\t\tsuper();\n\n\t\tthis.setupWorker(worker);\n\t}\n\n\tsetupWorker(worker: Worker) {\n\t\tthis.worker = worker;\n\n\t\tthis.worker.onerror = (e) => {\n\t\t\tconsole.log('Worker crashed');\n\t\t\tconsole.error(e);\n\t\t\tlet newWorker = new Worker(new URL('./worker', import.meta.url), { type: 'module' });\n\t\t\tthis.setupWorker(newWorker);\n\t\t};\n\n\t\tthis.worker.onmessage = async (e: MessageEvent<MessageWorkerToMain>) => {\n\t\t\tconsole.log('Got message', e.data);\n\t\t\tif (e.data.ready) {\n\t\t\t\tthis.workerReady = true;\n\n\t\t\t\tlet resp = await this.sendMessageWithResponse({\n\t\t\t\t\tkey: 'init'\n\t\t\t\t});\n\n\t\t\t\tif (resp.output) {\n\t\t\t\t\tthis.updateCachedFiles(resp.output);\n\t\t\t\t\tthis.dispatchOutputEvent(resp.output);\n\t\t\t\t}\n\n\t\t\t\tthis.processQueue();\n\t\t\t}\n\t\t\tconsole.log(\n\t\t\t\t'Processing message with',\n\t\t\t\te.data.nonce,\n\t\t\t\t'in',\n\t\t\t\tthis.nonceCounter - 1,\n\t\t\t\t'and',\n\t\t\t\tthis.pendingWrites.size,\n\t\t\t\t'pending writes'\n\t\t\t);\n\t\t\tfor (let entry of this.pendingWrites.entries()) {\n\t\t\t\tif (entry[1].nonce === e.data.nonce) {\n\t\t\t\t\tthis.pendingWrites.delete(entry[0]);\n\t\t\t\t\tif (this.dirtyFilesForWrite.has(entry[0])) {\n\t\t\t\t\t\tthis.dirtyFilesForWrite.delete(entry[0]);\n\t\t\t\t\t\tthis.trySendWrite(entry[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.pendingWriteWatcher) this.pendingWriteWatcher();\n\n\t\t\t// if (e.data.nonce < this.nonceCounter - 1) return;\n\n\t\t\tif (typeof e.data.nonce === 'number') {\n\t\t\t\tlet cb = this.waitingForNonce.get(e.data.nonce);\n\t\t\t\tif (cb) {\n\t\t\t\t\tcb(e.data);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet timing = this.messageTimings.get(e.data.nonce);\n\n\t\t\tif (timing) {\n\t\t\t\tconsole.log(`Message ${timing.name} took ${performance.now() - timing.timestamp}ms`);\n\t\t\t\tthis.messageTimings.delete(e.data.nonce);\n\t\t\t}\n\n\t\t\tif (e.data.files) {\n\t\t\t\tfor (let f of e.data.files) {\n\t\t\t\t\tthis.fileMapping.set(f.path, f.mapping);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (e.data.diagnostics) this.diagnostics = e.data.diagnostics;\n\n\t\t\tif (e.data.output) {\n\t\t\t\tthis.updateCachedFiles(e.data.output);\n\t\t\t\tthis.dispatchOutputEvent(e.data.output);\n\t\t\t}\n\n\t\t\tif (e.data.classifications) {\n\t\t\t\tthis.applyClassifications(e.data.classifications.path, e.data.classifications.encoded);\n\t\t\t}\n\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<ShadeupWorkspaceDiagnosticEvent>('diagnostic', {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tdiagnostics: e.data.diagnostics\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t};\n\t}\n\n\tcatchUpWorker() {\n\t\tfor (let file of this.files.entries()) {\n\t\t\tlet type = this.fileTypes.get(file[0]);\n\t\t\tif (type == 'shadeup') {\n\t\t\t\tthis.writeFile(file[0], file[1]);\n\t\t\t} else {\n\t\t\t\tthis.writeFileTypescript(file[0], file[1]);\n\t\t\t}\n\t\t}\n\t}\n\n\tpendingWriteWatcher: (() => void) | null = null;\n\n\tflushWrites(): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.pendingWriteWatcher = () => {\n\t\t\t\tif (this.pendingWrites.size == 0 && this.dirtyFilesForWrite.size == 0) {\n\t\t\t\t\tthis.pendingWriteWatcher = null;\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\treplayOutput() {\n\t\tconsole.log('Replaying output', this.cachedFiles);\n\t\tthis.dispatchOutputEvent(this.cachedFiles);\n\t}\n\n\tupdateCachedFiles(files: ShadeupRenderedFile[]) {\n\t\tfor (let i = this.cachedFiles.length - 1; i >= 0; i--) {\n\t\t\tlet f = this.cachedFiles[i];\n\t\t\tif (files.find((f2) => f2.path === f.path)) {\n\t\t\t\tthis.cachedFiles.splice(i, 1);\n\t\t\t}\n\t\t}\n\n\t\tthis.cachedFiles.push(...files);\n\t}\n\n\tapplyClassifications(path: string, encoded: ts.Classifications) {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<{ path: string; encoded: ts.Classifications }>('classifications', {\n\t\t\t\tdetail: {\n\t\t\t\t\tpath,\n\t\t\t\t\tencoded\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tdispatchOutputEvent(files: ShadeupRenderedFile[]) {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<ShadeupWorkspaceOutputEvent>('output', {\n\t\t\t\tdetail: {\n\t\t\t\t\tfiles\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\ton(\n\t\tevent: 'diagnostic',\n\t\tlistener: (evt: CustomEvent<ShadeupWorkspaceDiagnosticEvent>) => void\n\t): void;\n\ton(event: 'output', listener: (evt: CustomEvent<ShadeupWorkspaceOutputEvent>) => void): void;\n\ton(\n\t\tevent: 'writeFile',\n\t\tlistener: (evt: CustomEvent<{ file: string; content: string }>) => void\n\t): void;\n\ton(\n\t\tevent: 'classifications',\n\t\tlistener: (evt: CustomEvent<{ path: string; encoded: ts.Classifications }>) => void\n\t): void;\n\ton(event: string, listener: (evt: CustomEvent<any>) => void) {\n\t\tthis.addEventListener(event, listener as any);\n\t}\n\n\toff(\n\t\tevent: 'diagnostic',\n\t\tlistener: (evt: CustomEvent<ShadeupWorkspaceDiagnosticEvent>) => void\n\t): void;\n\toff(event: 'output', listener: (evt: CustomEvent<ShadeupWorkspaceOutputEvent>) => void): void;\n\toff(\n\t\tevent: 'writeFile',\n\t\tlistener: (evt: CustomEvent<{ file: string; content: string }>) => void\n\t): void;\n\toff(\n\t\tevent: 'classifications',\n\t\tlistener: (evt: CustomEvent<{ path: string; encoded: ts.Classifications }>) => void\n\t): void;\n\toff(event: string, listener: (evt: CustomEvent<any>) => void) {\n\t\tthis.removeEventListener(event, listener as any);\n\t}\n\n\tprocessQueue() {\n\t\tif (!this.workerReady) return;\n\n\t\tfor (let msg of this.queue) {\n\t\t\tthis.sendMessage(msg);\n\t\t}\n\t}\n\n\tenqueueMessage(msg: MessageMainToWorker) {\n\t\tif (this.workerReady) {\n\t\t\tthis.sendMessage(msg);\n\t\t\treturn;\n\t\t}\n\t\tthis.queue.push(msg);\n\t}\n\n\tasync enqueueMessageWithResponse(msg: MessageMainToWorker): Promise<MessageWorkerToMain> {\n\t\twhile (!this.workerReady) {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10));\n\t\t}\n\t\treturn await this.sendMessageWithResponse(msg);\n\t}\n\n\ttrySendWrite(path: string, ignoreErrors = false) {\n\t\tlet pending = this.pendingWrites.get(path);\n\t\tif (pending) {\n\t\t\tthis.dirtyFilesForWrite.add(path);\n\t\t} else {\n\t\t\tlet contents = this.files.get(path);\n\t\t\tif (contents) {\n\t\t\t\tthis.enqueueMessage({\n\t\t\t\t\tkey: 'writeFile',\n\t\t\t\t\tmessage: { path, emit: this.autoCompile, contents, ignoreErrors }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\twriteFile(path: string, contents: string, ignoreErrors = false) {\n\t\tthis.files.set(path, contents);\n\t\tthis.fileTypes.set(path, 'shadeup');\n\t\tthis.trySendWrite(path, ignoreErrors);\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<{ file: string; content: string; ignoreErrors: boolean }>('writeFile', {\n\t\t\t\tdetail: {\n\t\t\t\t\tfile: path,\n\t\t\t\t\temit: this.autoCompile,\n\t\t\t\t\tcontent: contents,\n\t\t\t\t\tignoreErrors\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\twriteFileWithResponse(path: string, contents: string, ignoreErrors = false) {\n\t\tthis.files.set(path, contents);\n\t\tthis.fileTypes.set(path, 'shadeup');\n\n\t\tlet ppromise = new Promise(() => {});\n\n\t\tlet pending = this.pendingWrites.get(path);\n\t\tif (pending) {\n\t\t\tconsole.log('pending write', path);\n\t\t\tthis.dirtyFilesForWrite.add(path);\n\t\t} else {\n\t\t\tlet contents = this.files.get(path);\n\t\t\tif (contents) {\n\t\t\t\tppromise = this.enqueueMessageWithResponse({\n\t\t\t\t\tkey: 'writeFile',\n\t\t\t\t\tmessage: { path, emit: this.autoCompile, contents, ignoreErrors }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<{ file: string; content: string }>('writeFile', {\n\t\t\t\tdetail: {\n\t\t\t\t\tfile: path,\n\t\t\t\t\tcontent: contents\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\treturn ppromise;\n\t}\n\n\twriteFileTypescript(path: string, contents: string) {\n\t\tthis.files.set(path, contents);\n\t\tthis.fileTypes.set(path, 'typescript');\n\t\tthis.enqueueMessage({\n\t\t\tkey: 'writeFileTypescript',\n\t\t\tmessage: { path, contents, emit: this.autoCompile }\n\t\t});\n\t}\n\n\tsendMessage(msg: MessageMainToWorker) {\n\t\tmsg.nonce = this.nonceCounter++;\n\t\tthis.messageTimings.set(msg.nonce, { name: msg.key, timestamp: performance.now() });\n\t\tif (msg.key == 'writeFile') {\n\t\t\tconsole.log('Set Pending write for', msg.message.path, msg.nonce);\n\t\t\tthis.pendingWrites.set(msg.message.path, {\n\t\t\t\tnonce: msg.nonce,\n\t\t\t\tcontent: msg.message.contents\n\t\t\t});\n\t\t}\n\t\tthis.worker.postMessage(msg);\n\t}\n\n\tsendMessageWithResponse(msg: MessageMainToWorker): Promise<MessageWorkerToMain> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tmsg.nonce = this.nonceCounter++;\n\t\t\tthis.waitingForNonce.set(msg.nonce, (msg) => {\n\t\t\t\t// console.log('got response', msg);\n\t\t\t\tthis.waitingForNonce.delete(msg.nonce);\n\t\t\t\tresolve(msg);\n\t\t\t});\n\n\t\t\tthis.worker.postMessage(msg);\n\t\t});\n\t}\n\n\tasync connectEditor(path: string, monacoFilename: string, editor: MonacoEditorInstance) {\n\t\tconst connectMonacoEditorToShadeupWorkspace = (await import('../monaco/connector'))\n\t\t\t.connectMonacoEditorToShadeupWorkspace;\n\t\tconnectMonacoEditorToShadeupWorkspace(this, path, monacoFilename, editor);\n\t}\n\n\tasync getCompletions(path: string, position: number) {\n\t\tlet resp = await this.sendMessageWithResponse({\n\t\t\tkey: 'getCompletions',\n\t\t\tmessage: {\n\t\t\t\tpath,\n\t\t\t\tposition\n\t\t\t}\n\t\t});\n\n\t\treturn resp.completions;\n\t}\n\n\tasync getHover(path: string, position: number) {\n\t\tlet resp = await this.sendMessageWithResponse({\n\t\t\tkey: 'getHover',\n\t\t\tmessage: {\n\t\t\t\tpath,\n\t\t\t\tposition\n\t\t\t}\n\t\t});\n\n\t\treturn resp.hover;\n\t}\n\n\treset() {\n\t\tthis.enqueueMessage({ key: 'reset' });\n\t\tthis.files.clear();\n\t\tthis.fileMapping.clear();\n\t\tthis.diagnostics = [];\n\t\tthis.cachedFiles = [];\n\t\tthis.dirtyFilesForWrite.clear();\n\t\tthis.pendingWrites.clear();\n\t}\n\n\tassets(assets: [string, [string, string]][]) {\n\t\tthis.enqueueMessage({ key: 'assets', message: assets });\n\t}\n}\n\nexport async function makeShadeupWorkspace(): Promise<ShadeupWorkspaceInterface> {\n\tlet worker = new Worker(new URL('./worker', import.meta.url), { type: 'module' });\n\n\tlet p = new ShadeupWorkspaceInterface(worker);\n\tif (!(window as any)['workspaceCounter']) (window as any)['workspaceCounter'] = 0;\n\n\tp.id = (window as any)['workspaceCounter']++;\n\n\treturn p;\n}\n"
  },
  {
    "path": "lang/shadeup/compiler/simple.ts",
    "content": "import { ShadeupEnvironment } from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\n\nimport files from '../library/files';\n\nexport async function makeSimpleShadeupEnvironment() {\n\tlet env = new ShadeupEnvironment();\n\tenv.emitLogs = false;\n\tawait env.init();\n\tawait env.writeFile(\n\t\t'/file.ts',\n\t\t`\n\t\n\t`\n\t);\n\n\tlet writes: Promise<any>[] = [];\n\n\tlet initFiles = ['/file.ts'];\n\n\tlet start = performance.now();\n\n\tfor (let [path, contents] of Object.entries(files.ts)) {\n\t\tlet p = '/_std/' + path + '.ts';\n\t\tif (path == 'std') p = '/std.ts'; // So we can import it via import ui from \"std\";\n\n\t\twrites.push(env.writeFileTypescript(p, contents));\n\t\tinitFiles.push(p);\n\t}\n\n\tfor (let [path, contents] of Object.entries(files.shadeup)) {\n\t\tlet p = '/_std/' + path + '.ts';\n\t\twrites.push(env.writeFile(p, contents, true));\n\t\tinitFiles.push(p);\n\t}\n\n\treturn env;\n}\n"
  },
  {
    "path": "lang/shadeup/compiler/worker.ts",
    "content": "import {\n\tShadeupEnvironment,\n\ttype ShadeupGenericDiagnostic\n} from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport type {\n\tMessageMainToWorker,\n\tMessageWorkerToMain,\n\tShadeupDiagnostic,\n\tShadeupRenderedFile\n} from './common';\nimport {\n\tlookupIndexMappingRange,\n\treverseLookupIndexMapping\n} from '../../../../shadeup-frontend/lib/generator/root';\nimport { indexToRowColumn } from '../../../../shadeup-frontend/lib/environment/ShadeupEnvironment';\nimport ts from 'typescript';\n\nlet env = new ShadeupEnvironment();\nenv.emitLogs = false;\nawait env.init();\nawait env.writeFile(\n\t'/file.ts',\n\t`\n\t\n\t`\n);\n\nimport files from '../library/files';\n\nlet writes: Promise<any>[] = [];\n\nlet initFiles = ['/file.ts'];\n\nlet start = performance.now();\n\nfor (let [path, contents] of Object.entries(files.ts)) {\n\tlet p = '/_std/' + path + '.ts';\n\tif (path == 'std') p = '/std.ts'; // So we can import it via import ui from \"std\";\n\n\twrites.push(env.writeFileTypescript(p, contents));\n\tinitFiles.push(p);\n}\n\nfor (let [path, contents] of Object.entries(files.shadeup)) {\n\tlet p = '/_std/' + path + '.ts';\n\twrites.push(env.writeFile(p, contents, true));\n\tinitFiles.push(p);\n}\n\nawait Promise.all(writes);\n// env.emitLogs = true;\nconsole.log('Initialized worker in', performance.now() - start, 'ms');\n\npostMessage({\n\tnonce: 0,\n\tdiagnostics: [],\n\tfiles: [],\n\tready: true,\n\tcompletions: [],\n\thover: null,\n\toutput: []\n} as MessageWorkerToMain);\n\nfunction findFile(path: string) {\n\treturn env.files.find((f) => f.path === path);\n}\n\nfunction tsDiagnosticToShadeupDiagnostic(diag: {\n\terror: ts.Diagnostic;\n\tfile: string;\n\tmessage: string;\n}): ShadeupDiagnostic | null {\n\tlet path = diag.error.file?.fileName ?? '';\n\tlet file = findFile(path);\n\tif (!file) return null;\n\tlet mapping = file.mapping;\n\tif (!mapping) return null;\n\n\tlet to = lookupIndexMappingRange(\n\t\tmapping,\n\t\tdiag.error.start ?? 0,\n\t\t(diag.error.start ?? 0) + (diag.error.length ?? 0)\n\t);\n\n\tlet fileSource = file.content;\n\tif (fileSource) {\n\t\tlet start = indexToRowColumn(fileSource, to.start);\n\t\tlet end = indexToRowColumn(fileSource, to.end);\n\n\t\treturn {\n\t\t\tpath: diag.file,\n\t\t\tlevel: 'error',\n\t\t\tfullMessage: diag.message ?? '',\n\t\t\tstartLine: start.row + 1,\n\t\t\tstartColumn: start.column + 1,\n\t\t\tendLine: end.row + 1,\n\t\t\tendColumn: end.column + 1,\n\t\t\tmessage: ts.flattenDiagnosticMessageText(diag.error.messageText, '\\n')\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction genericDiagnosticToShadeupDiagnostic(\n\tpath: string,\n\tdiag: ShadeupGenericDiagnostic\n): ShadeupDiagnostic | null {\n\tlet file = findFile(path);\n\tif (!file) return null;\n\tlet mapping = file.mapping;\n\tif (!mapping) return null;\n\n\tlet fileSource = file.content;\n\tif (fileSource) {\n\t\tlet start = indexToRowColumn(fileSource, diag.startIndex);\n\t\tlet end = indexToRowColumn(fileSource, diag.endIndex);\n\n\t\treturn {\n\t\t\tpath,\n\t\t\tlevel: 'error',\n\t\t\tfullMessage: diag.message ?? '',\n\t\t\tstartLine: start.row + 1,\n\t\t\tstartColumn: start.column + 1,\n\t\t\tendLine: end.row + 1,\n\t\t\tendColumn: end.column + 1,\n\t\t\tmessage: diag.message\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction delay(ms: number) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nlet dirtyFiles = new Set<string>();\n\nonerror = function (e) {\n\tconsole.error(e);\n};\n\nonmessage = async function (e: MessageEvent<MessageMainToWorker>) {\n\tif (e.data.key === 'writeFile') {\n\t\tconsole.log('Received writefile nonce', e.data.nonce);\n\t\tawait env.writeFile(e.data.message.path, e.data.message.contents, e.data.message.ignoreErrors);\n\t\tlet filesToGenerate = [e.data.message.path];\n\t\tfor (let dirty of dirtyFiles) {\n\t\t\tif (dirty !== e.data.message.path) filesToGenerate.push(dirty);\n\t\t}\n\n\t\tlet output: {\n\t\t\tpath: string;\n\t\t\tcontents: string;\n\t\t}[] = [];\n\t\tif (e.data.message.emit) output = await env.regenerate(filesToGenerate);\n\n\t\t// await env.regenerate();\n\t\tlet errors: {\n\t\t\terror: ts.Diagnostic;\n\t\t\tfile: string;\n\t\t\tmessage: string;\n\t\t}[] = [];\n\n\t\tif (!e.data.message.ignoreErrors) {\n\t\t\terrors = await env.errors([e.data.message.path]);\n\t\t}\n\n\t\tlet file = findFile(e.data.message.path);\n\n\t\tlet diags: ShadeupDiagnostic[] = [];\n\n\t\tfor (let parseError of file?.parseDiagnostics ?? []) {\n\t\t\tlet diag = genericDiagnosticToShadeupDiagnostic(e.data.message.path, parseError);\n\t\t\tif (diag) diags.push(diag);\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tlet diag = tsDiagnosticToShadeupDiagnostic(error);\n\t\t\tif (diag) diags.push(diag);\n\t\t}\n\n\t\t// let output: ShadeupRenderedFile[] = [];\n\n\t\tif (errors.length == 0) {\n\t\t\tdirtyFiles.clear();\n\t\t\t// console.log('Output', e.data.message.path, output);\n\t\t} else {\n\t\t\tdirtyFiles.add(e.data.message.path);\n\t\t\t// console.log('Errors', e.data.message.path, errors);\n\t\t}\n\t\tconsole.log('Sending writefile nonce', e.data.nonce);\n\t\tpostMessage({\n\t\t\tnonce: e.data.nonce,\n\t\t\tclassifications: {\n\t\t\t\tpath: e.data.message.path,\n\t\t\t\tencoded: env.classifications(e.data.message.path)\n\t\t\t},\n\t\t\tfiles: env.files.map((f) => ({\n\t\t\t\tpath: f.path,\n\t\t\t\tcontents: f.content,\n\t\t\t\tmapping: f.mapping\n\t\t\t})),\n\t\t\tdiagnostics: diags,\n\t\t\toutput\n\t\t});\n\t} else if (e.data.key === 'build') {\n\t\tlet all = await env.regenerate();\n\t\tpostMessage({\n\t\t\tnonce: e.data.nonce,\n\t\t\toutput: all\n\t\t});\n\t} else if (e.data.key === 'writeFileTypescript') {\n\t\tawait env.writeFileTypescript(e.data.message.path, e.data.message.contents);\n\n\t\tlet errors = await env.errors();\n\n\t\tlet file = findFile(e.data.message.path);\n\n\t\tlet diags: ShadeupDiagnostic[] = [];\n\n\t\tfor (let parseError of file?.parseDiagnostics ?? []) {\n\t\t\tlet diag = genericDiagnosticToShadeupDiagnostic(e.data.message.path, parseError);\n\t\t\tif (diag) diags.push(diag);\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tlet diag = tsDiagnosticToShadeupDiagnostic(error);\n\t\t\tif (diag) diags.push(diag);\n\t\t}\n\n\t\tlet output: ShadeupRenderedFile[] = [];\n\n\t\tif (errors.length == 0) {\n\t\t\tlet filesToGenerate = [e.data.message.path];\n\t\t\tfor (let dirty of dirtyFiles) {\n\t\t\t\tif (dirty !== e.data.message.path) filesToGenerate.push(dirty);\n\t\t\t}\n\t\t\tconsole.log('Ready to regenerate', filesToGenerate, dirtyFiles);\n\t\t\tif (e.data.message.emit) output = await env.regenerate(filesToGenerate);\n\t\t\tdirtyFiles.clear();\n\t\t\t// console.log('Output', e.data.message.path, output);\n\t\t} else {\n\t\t\tdirtyFiles.add(e.data.message.path);\n\t\t\t// console.log('Errors', e.data.message.path, errors);\n\t\t}\n\n\t\tpostMessage({\n\t\t\tnonce: e.data.nonce,\n\t\t\tfiles: env.files.map((f) => ({\n\t\t\t\tpath: f.path,\n\t\t\t\tcontents: f.content,\n\t\t\t\tmapping: f.mapping\n\t\t\t})),\n\t\t\tdiagnostics: diags,\n\t\t\toutput\n\t\t});\n\t} else if (e.data.key == 'getCompletions') {\n\t\tlet completions = await env.completions(e.data.message.path, e.data.message.position);\n\t\tpostMessage({\n\t\t\tnonce: e.data.nonce,\n\t\t\tcompletions\n\t\t});\n\t} else if (e.data.key == 'getHover') {\n\t\tlet hover = await env.hover(e.data.message.path, e.data.message.position);\n\t\tpostMessage({\n\t\t\tnonce: e.data.nonce,\n\t\t\thover\n\t\t});\n\t} else if (e.data.key == 'init') {\n\t\tlet output = await env.regenerate([\n\t\t\t'/static-math.ts',\n\t\t\t'/std_math.ts',\n\t\t\t'/std___std_all.ts',\n\t\t\t...initFiles\n\t\t]);\n\n\t\tlet errors = await env.errors();\n\n\t\tif (errors.length == 0) {\n\t\t\tdirtyFiles.clear();\n\t\t} else {\n\t\t\tdirtyFiles.add([...env.files][0].path);\n\t\t}\n\n\t\tpostMessage({\n\t\t\tnonce: e.data.nonce,\n\t\t\toutput: output //.filter((f) => f.path == '/std___std_all.js' || f.path == '/std_math.js')\n\t\t});\n\t} else if (e.data.key == 'reset') {\n\t\tdirtyFiles.clear();\n\n\t\tenv.reset();\n\t} else if (e.data.key == 'assets') {\n\t\tenv.setAssetMapping(e.data.message);\n\t}\n};\n"
  },
  {
    "path": "lang/shadeup/engine/adapters/adapter.ts",
    "content": "import type { buffer } from 'src/shadeup/library/buffer';\nimport type { Mesh } from '../../../../../shadeup-frontend/lib/std/all';\nimport type { ShadeupTexture2d } from '../engine';\nimport type { ShadeupShaderInstance, ShadeupShaderSource } from '../shader';\nimport type { int } from 'src/shadeup/library/types';\nimport type { texture2d } from '../../library/texture';\n\nexport type ShaderType = 'vertex' | 'fragment' | 'compute' | 'vertex-indexed';\nexport type ShaderCodeMapping = {\n\twebgl: string;\n\twebgpu: string;\n\tsoftware: () => void;\n};\nexport type ShaderParamsMapping = {\n\twebgl: { [key: string]: UniformValueType };\n\twebgpu: {\n\t\tattributeInput: string;\n\t\tattributeOutput: string;\n\t\tglobals: [string, { fileName: string; structure: UniformValueType }][];\n\t\tlocals: UniformKeyValuePair[];\n\t};\n};\n\nexport class GenericShader {\n\tuniqueSourceKey: string = '';\n\tcode: string;\n\ttype: ShaderType;\n\tpayload: any;\n\n\tparent: ShadeupShaderSource | null = null;\n\n\tconstructor(code: string, type: ShaderType) {\n\t\tthis.code = code;\n\t\tthis.type = type;\n\t}\n}\n\nexport type UniformKeyValuePair = [string, UniformValueType];\n\nexport type PrimitiveVectorSizes = '' | '2' | '3' | '4';\nexport type PrimitiveUniformType =\n\t| `float${PrimitiveVectorSizes}`\n\t| `float2x2`\n\t| `float3x3`\n\t| `float4x4`\n\t| `int${PrimitiveVectorSizes}`\n\t| `uint${PrimitiveVectorSizes}`\n\t| 'bool';\n\nexport class UniformValue {\n\tvalueType: UniformValueType;\n\tvalue: any;\n\n\tconstructor(valueType: UniformValueType, value: any) {\n\t\tthis.valueType = valueType;\n\t\tthis.value = value;\n\t}\n}\n\nexport type UniformValueType =\n\t| {\n\t\t\ttype: 'array';\n\t\t\telement: UniformValueType;\n\t\t\tstaticSize?: number;\n\t  }\n\t| {\n\t\t\ttype: 'struct';\n\t\t\tfields: UniformKeyValuePair[];\n\t\t\tname: string;\n\t  }\n\t| {\n\t\t\ttype: 'primitive';\n\t\t\tname: PrimitiveUniformType;\n\t  }\n\t| {\n\t\t\ttype: 'primitive';\n\t\t\tname: 'texture2d' | 'rwtexture2d';\n\t\t\telement: UniformValueType;\n\t\t\taccess: 'read' | 'write' | 'sample' | 'sample_write';\n\t  }\n\t| {\n\t\t\ttype: 'primitive';\n\t\t\tname: 'atomic';\n\t\t\telement: UniformValueType;\n\t  }\n\t| {\n\t\t\ttype: 'buffer';\n\t\t\telement: UniformValueType;\n\t\t\taccess: 'read' | 'write';\n\t  };\n\nexport function makePrimitiveUniform(type: UniformValueType, value: any): UniformValue {\n\treturn new UniformValue(type, value);\n}\n\nexport class UniformPayload {\n\tuniforms: Map<string, UniformValue> = new Map();\n}\n\nexport type ShaderTextureType =\n\t| `float${'' | '2' | '3' | '4'}`\n\t| `int${'' | '2' | '3' | '4'}`\n\t| `uint${'' | '2' | '3' | '4'}`\n\t| `uint8`;\nexport type ShaderBindingOptions = {\n\tattachments?: ShaderTextureType[];\n\tinitialDispatch?: ShadeupShaderInstance;\n};\n\nexport type ShaderDepthCompareMode =\n\t| 'greater'\n\t| 'less'\n\t| 'equal'\n\t| 'greater-equal'\n\t| 'less-equal'\n\t| 'not-equal'\n\t| 'always'\n\t| 'never';\n\nexport class ShaderDispatch {\n\ttype: 'draw' | 'compute';\n\tdrawType: 'indexed' | 'screen' | 'count' | 'geometry' = 'screen';\n\tvertexUniforms: UniformPayload;\n\tfragmentUniforms: UniformPayload;\n\n\tdepthOnly: boolean = false;\n\tbackfaceCulling: boolean = true;\n\treverseZ: boolean = false;\n\tdepthCompare: ShaderDepthCompareMode | 'auto' = 'auto';\n\n\tattachments: ShadeupTexture2d[] | null = null;\n\n\tvertexShader: GenericShader | null = null;\n\tfragmentShader: GenericShader | null = null;\n\tcomputeShader: GenericShader | null = null;\n\n\tgeometry: Mesh | null = null;\n\tindexBuffer: buffer<int> | null = null;\n\tdrawCount: number = 0;\n\tinstanceCount: number = 1;\n\n\tindirectBuffer: buffer<int> | null = null;\n\tindirectOffset: number = 0;\n\n\toverrideDepth: ShadeupTexture2d | null = null;\n\n\tcomputeCount: [number, number, number] = [0, 0, 0];\n\n\tconstructor(type: 'draw' | 'compute') {\n\t\tthis.type = type;\n\t\tthis.vertexUniforms = new UniformPayload();\n\t\tthis.fragmentUniforms = new UniformPayload();\n\t}\n\n\tsetVertexUniform(name: string, value: UniformValue) {\n\t\tthis.vertexUniforms.uniforms.set(name, value);\n\t}\n\n\tsetFragmentUniform(name: string, value: UniformValue) {\n\t\tthis.fragmentUniforms.uniforms.set(name, value);\n\t}\n\n\tsetVertexShader(shader: GenericShader) {\n\t\tthis.vertexShader = shader;\n\t}\n\n\tsetFragmentShader(shader: GenericShader) {\n\t\tthis.fragmentShader = shader;\n\t}\n\n\tsetComputeShader(shader: GenericShader) {\n\t\tthis.computeShader = shader;\n\t}\n\n\tsetGeometry(geometry: Mesh) {\n\t\tthis.geometry = geometry;\n\t}\n\n\tsetIndexBuffer(indexBuffer: buffer<int>) {\n\t\tthis.indexBuffer = indexBuffer;\n\t}\n}\n\nexport class GraphicsAdapter {\n\tcanvas: HTMLCanvasElement | null;\n\tcontextMode: 'paint' | 'draw' = 'draw';\n\tlisteners: Map<string, any> = new Map();\n\tconstructor(cnvs: HTMLCanvasElement | null) {\n\t\tthis.canvas = cnvs;\n\t}\n\n\tclear(\n\t\timmediate: boolean = false,\n\t\tcolor: float | [number, number, number, number] | 'auto' = 'auto'\n\t) {}\n\n\tdraw() {}\n\n\tinit() {}\n\n\taddEventListener(name: string, callback: any) {\n\t\tlet listeners = this.listeners.get(name);\n\t\tif (!listeners) {\n\t\t\tlisteners = [];\n\t\t\tthis.listeners.set(name, listeners);\n\t\t}\n\t\tlisteners.push(callback);\n\t}\n\n\tremoveEventListener(name: string, callback: any) {\n\t\tconst listeners = this.listeners.get(name);\n\t\tif (!listeners) return;\n\t\tconst index = listeners.indexOf(callback);\n\t\tif (index === -1) return;\n\t\tlisteners.splice(index, 1);\n\t}\n\n\ttriggerEvent(name: string, ...args: any[]) {\n\t\tconst listeners = this.listeners.get(name);\n\t\tif (!listeners) return;\n\t\tfor (const listener of listeners) {\n\t\t\tlistener(...args);\n\t\t}\n\t}\n\n\tdispatch(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tthis.activateDrawContext();\n\t}\n\n\tactivateDrawContext() {\n\t\tif (this.contextMode === 'paint') {\n\t\t\tthis.switchContext('draw');\n\t\t}\n\t}\n\n\tactivatePaintContext() {\n\t\tif (this.contextMode === 'draw') {\n\t\t\tthis.switchContext('paint');\n\t\t\tthis.flush();\n\t\t}\n\t}\n\n\tswitchContext(mode: 'paint' | 'draw') {\n\t\tthis.contextMode = mode;\n\t\tthis.triggerEvent('context', mode);\n\t}\n\n\tdrawImage(image: HTMLCanvasElement, x: number, y: number, width: number, height: number) {}\n\n\tasync downloadImage(): Promise<Uint32Array | Int32Array | Float32Array | Uint8Array> {\n\t\treturn new Float32Array(0);\n\t}\n\tuploadImage(\n\t\tdata: Uint32Array | Uint16Array | Int16Array | Int32Array | Float32Array | Uint8Array\n\t) {}\n\n\tsetViewport(width: number, height: number) {}\n\n\tgetOrCreateShader(\n\t\tinstance: ShadeupShaderInstance,\n\t\ttype: ShaderType,\n\t\tconfig?: ShaderBindingOptions\n\t): GenericShader {\n\t\treturn new GenericShader('', 'vertex');\n\t}\n\n\tcreateShader(code: ShaderCodeMapping, type: ShaderType): GenericShader {\n\t\treturn new GenericShader('', 'vertex');\n\t}\n\n\tunbindTexture(texture: ShadeupTexture2d) {}\n\n\tdispose() {}\n\n\tflush() {\n\t\tthis.triggerEvent('flush');\n\t}\n\n\twaitForDraw(): Promise<void> {\n\t\treturn Promise.resolve();\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/engine/adapters/webgl.ts",
    "content": "import type { buffer } from 'src/shadeup/library/buffer';\nimport { ShadeupTexture2d } from '../engine';\nimport type { ShadeupShaderInstance } from '../shader';\nimport { translateNumericToGLSL } from '../util';\nimport {\n\tGenericShader,\n\tGraphicsAdapter,\n\tShaderDispatch,\n\ttype ShaderCodeMapping,\n\ttype ShaderType,\n\ttype UniformValueType,\n\ttype ShaderBindingOptions\n} from './adapter';\nimport { LRUCache } from 'lru-cache';\n\nexport function indexToRowColumn(str: string, index: number) {\n\tlet row = 0;\n\tlet column = 0;\n\tfor (let i = 0; i < index; i++) {\n\t\tif (str[i] === '\\n') {\n\t\t\trow++;\n\t\t\tcolumn = 0;\n\t\t} else {\n\t\t\tcolumn++;\n\t\t}\n\t}\n\treturn { row, column };\n}\n\ntype WithCachedUniformLocation = {\n\tgetUniformLocationCached: (path: string) => WebGLUniformLocation;\n};\n\nconst TRANSPOSE_MATRICES_UNIFORM = false;\nconst boundTextures = new Map<number, any | null>();\nlet boundTexturesCache = new LRUCache({\n\tmax: 16\n});\nfor (let ti = 0; ti < 16; ti++) {\n\tboundTextures.set(ti, null);\n}\n\nexport function rowColumnToIndex(str: string, row: number, column: number) {\n\tlet index = 0;\n\tlet currentRow = 0;\n\tlet currentColumn = 0;\n\twhile (currentRow < row || currentColumn < column) {\n\t\tif (str[index] === '\\n') {\n\t\t\tcurrentRow++;\n\t\t\tcurrentColumn = 0;\n\t\t} else {\n\t\t\tcurrentColumn++;\n\t\t}\n\t\tindex++;\n\t}\n\treturn index;\n}\n\nlet webglCounter = 0;\nexport class WebGLAdapter extends GraphicsAdapter {\n\tgl: WebGL2RenderingContext | null = null;\n\tindex: number = 0;\n\tblankImage: HTMLCanvasElement | null = null;\n\tGL_SHADER_TYPES: { [K in ShaderType]: number } = {\n\t\tvertex: 0,\n\t\t'vertex-indexed': 0,\n\t\tfragment: 0,\n\t\tcompute: -1\n\t};\n\n\tprogramCache = new Map<string, WebGLProgram & WithCachedUniformLocation>();\n\n\tinit() {\n\t\tthis.index = webglCounter++;\n\t\tconsole.log('Creating gl with index', this.index);\n\t\tthis.gl = this.canvas.getContext('webgl2', {\n\t\t\tpreserveDrawingBuffer: true\n\t\t});\n\t\tif (!this.gl) {\n\t\t\tthrow new Error('WebGL is not supported');\n\t\t}\n\n\t\tthis.GL_SHADER_TYPES = {\n\t\t\tvertex: this.gl.VERTEX_SHADER,\n\t\t\tfragment: this.gl.FRAGMENT_SHADER,\n\t\t\t'vertex-indexed': this.gl.VERTEX_SHADER,\n\t\t\tcompute: -1\n\t\t};\n\n\t\tthis.blankImage = document.createElement('canvas');\n\t\tthis.blankImage.width = 1;\n\t\tthis.blankImage.height = 1;\n\t\tthis.blankImage.getContext('2d')!.fillRect(0, 0, 1, 1);\n\t\tthis.setupImageDrawing();\n\t}\n\n\t__program: WebGLProgram | null = null;\n\n\tsetupImageDrawing() {\n\t\tconst gl = this.getGL();\n\t\tthis.__program = gl.createProgram();\n\t\tlet program = this.__program;\n\t\tif (!program) throw new Error('Could not create program');\n\t\tlet vertexShader = this.genNativeShader(\n\t\t\t`#version 300 es\nprecision highp float;\n\nin vec4 a_position;\nin vec2 a_texcoord;\n\nuniform vec2 size;\n\nout vec2 v_texcoord;\n\nvoid main() {\n\tgl_Position = a_position;\n\tv_texcoord = a_texcoord;\n\n\tfloat x = float((gl_VertexID & 1) << 2);\n\tfloat y = float((gl_VertexID & 2) << 1);\n\tv_texcoord.x = x * 0.5;\n\tv_texcoord.y = 1.f - (y * 0.5);\n\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\n}\n`,\n\t\t\tgl.VERTEX_SHADER\n\t\t);\n\n\t\tlet fragmentShader = this.genNativeShader(\n\t\t\t`#version 300 es\nprecision mediump float;\nprecision mediump int;\n\nin vec2 v_texcoord;\nout vec4 _i_gl_out_pixel;\n\t\nuniform sampler2D u_texture;\n\t\nvoid main() {\n\tvec2 t = vec2(v_texcoord.x, v_texcoord.y);\n\tvec4 c = texture(u_texture, t);\n\t// c.rgb *= c.a;\n\t_i_gl_out_pixel = c;\n\t// _i_gl_out_pixel = vec4(t, 0.0, 1.0);\n}\n`,\n\t\t\tgl.FRAGMENT_SHADER\n\t\t);\n\n\t\tif (!vertexShader || !fragmentShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.attachShader(program, vertexShader!);\n\t\tgl.attachShader(program, fragmentShader!);\n\t\tgl.linkProgram(program);\n\t}\n\n\tdrawImage(\n\t\timage: HTMLCanvasElement,\n\t\tdstX: number,\n\t\tdstY: number,\n\t\ttexWidth: number,\n\t\ttexHeight: number\n\t): void {\n\t\tconst gl = this.getGL();\n\t\tconst program = this.__program;\n\t\tif (!program) throw new Error('Could not create program');\n\n\t\tlet positionLocation = gl.getAttribLocation(program, 'a_position');\n\t\tlet texcoordLocation = gl.getAttribLocation(program, 'a_texcoord');\n\n\t\tlet matrixLocation = gl.getUniformLocation(program, 'u_matrix');\n\t\tlet textureLocation = gl.getUniformLocation(program, 'u_texture');\n\n\t\tlet positionBuffer = gl.createBuffer();\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n\n\t\tlet positions = [-1, -1, -1, 1, 1, -1, 1, -1];\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n\t\tlet texcoordBuffer = gl.createBuffer();\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n\n\t\tlet texcoords = [0, 0, 0, 1, 1, 0, 1, 0];\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(texcoords), gl.STATIC_DRAW);\n\n\t\tlet unit = this.getTextureUnit(image);\n\t\t// let tex = gl.createTexture();\n\t\t// gl.bindTexture(gl.TEXTURE_2D, tex);\n\n\t\t// gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n\t\tgl.useProgram(program);\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n\t\tgl.enableVertexAttribArray(positionLocation);\n\t\tgl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n\t\tgl.enableVertexAttribArray(texcoordLocation);\n\t\tgl.vertexAttribPointer(texcoordLocation, 2, gl.FLOAT, false, 0, 0);\n\n\t\tgl.uniform1i(textureLocation, unit);\n\n\t\t// gl.activeTexture(gl.TEXTURE0 + unit);\n\t\t// gl.bindTexture(gl.TEXTURE_2D, unit);\n\n\t\tgl.enable(gl.BLEND);\n\t\t// gl.blendFunc(gl.ONE, gl.ZERO);\n\n\t\tlet indexBuffer = gl.createBuffer();\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n\t\tlet tris = [0, 1, 2];\n\t\tlet indexArr = new Uint16Array(tris.length);\n\n\t\tfor (let i = 0; i < tris.length; i += 3) {\n\t\t\tindexArr[i] = tris[i];\n\t\t\tindexArr[i + 1] = tris[i + 1];\n\t\t\tindexArr[i + 2] = tris[i + 2];\n\t\t}\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n\n\t\tgl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_SHORT, 0);\n\n\t\t// gl.deleteTexture(tex);\n\t\tgl.deleteBuffer(positionBuffer);\n\t\tgl.deleteBuffer(texcoordBuffer);\n\t}\n\n\tgetGL(): WebGL2RenderingContext {\n\t\tif (!this.gl) {\n\t\t\tthrow new Error('WebGL is not supported');\n\t\t}\n\n\t\treturn this.gl;\n\t}\n\n\tsetViewport(width: number, height: number) {\n\t\tconst gl = this.getGL();\n\n\t\tgl.viewport(0, 0, width, height);\n\t}\n\n\tgetOrCreateShader(\n\t\tinstance: ShadeupShaderInstance,\n\t\ttype: ShaderType,\n\t\tconfig?: ShaderBindingOptions\n\t): GenericShader {\n\t\tconst gl = this.getGL();\n\n\t\tlet arrSizeChanged = false;\n\t\tfor (let param of Object.keys(instance.parent.params.webgl)) {\n\t\t\tlet type = instance.parent.params.webgl[param];\n\t\t\tif (type.type == 'array') {\n\t\t\t\tif (!instance.parent.arraySizes[param]) instance.parent.arraySizes[param] = 0;\n\n\t\t\t\tif (Array.isArray(instance.bindings[param])) {\n\t\t\t\t\tif (instance.bindings[param].length > instance.parent.arraySizes[param]) {\n\t\t\t\t\t\tinstance.parent.arraySizes[param] = instance.bindings[param].length;\n\t\t\t\t\t\tarrSizeChanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (instance.parent.types[type] && !arrSizeChanged) {\n\t\t\treturn instance.parent.types[type];\n\t\t} else {\n\t\t\tif (type == 'compute') {\n\t\t\t\tthrow new Error('Compute shaders are not supported in WebGL');\n\t\t\t}\n\t\t\tlet shader = gl.createShader(this.GL_SHADER_TYPES[type]);\n\t\t\tif (!shader) {\n\t\t\t\tconsole.log('Shader on canvas failed', this.canvas);\n\t\t\t\tthrow new Error('Failed to create shader of type ' + type);\n\t\t\t}\n\n\t\t\tlet base = instance.parent.code.webgl;\n\t\t\tfor (let param of Object.keys(instance.parent.arraySizes)) {\n\t\t\t\tbase = base.replace(`%${param}_size%`, instance.parent.arraySizes[param]);\n\t\t\t\t// console.log(base, `%${param}_size%`);\n\t\t\t}\n\n\t\t\tif (type == 'vertex') {\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`in vec3 a_position;\n\t\t\t\t\tin vec3 a_normal;\n\t\t\t\t\tin vec3 a_tangent;\n\t\t\t\t\tin vec3 a_bitangent;\n\t\t\t\t\tin vec2 a_uv;\n\t\t\t\t\tin vec4 a_color;\n\t\t\t\t\t\n\t\t\t\t\tout vec3 _v_position;\n\t\t\t\t\tout vec3 _v_normal;\n\t\t\t\t\tout vec3 _v_tangent;\n\t\t\t\t\tout vec3 _v_bitangent;\n\t\t\t\t\tout vec2 _v_uv;\n\t\t\t\t\tout vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`ShaderOutput _i_out;\n\t\t\t\t\t_i_out.position = vec4(a_position, 1.0);\n\t\t\t\t\t_i_out.normal = a_normal;\n\t\t\t\t\t_i_out.tangent = a_tangent;\n\t\t\t\t\t_i_out.bitangent = a_bitangent;\n\t\t\t\t\t_i_out.uv = a_uv;\n\t\t\t\t\t_i_out.color = a_color;\n\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.position = a_position;\n\t\t\t\t\t_i_in.uv = a_uv;\n\t\t\t\t\t_i_in.normal = a_normal;\n\t\t\t\t\t_i_in.tangent = a_tangent;\n\t\t\t\t\t_i_in.bitangent = a_bitangent;\n\t\t\t\t\t_i_in.color = a_color;\n\t\t\t\t\t_i_in.screen = vec2(0, 0);`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/',\n\t\t\t\t\t`gl_Position = _i_out.position;\n\t\t\t\t\t_v_position = _i_out.position.xyz;\n\t\t\t\t\t_v_normal = _i_out.normal;\n\t\t\t\t\t_v_tangent = _i_out.tangent;\n\t\t\t\t\t_v_bitangent = _i_out.bitangent;\n\t\t\t\t\t_v_uv = _i_out.uv;\n\t\t\t\t\t_v_color = _i_out.color;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replaceAll('_ext_uniform_global_', '_vertex_ext_uniform_global_');\n\t\t\t\tbase = base.replaceAll('_ext_uniform_local_', '_vertex_ext_uniform_local_');\n\t\t\t} else if (type == 'vertex-indexed') {\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`\n\t\t\t\t\tout vec3 _v_position;\n\t\t\t\t\tout vec3 _v_normal;\n\t\t\t\t\tout vec3 _v_tangent;\n\t\t\t\t\tout vec3 _v_bitangent;\n\t\t\t\t\tout vec2 _v_uv;\n\t\t\t\t\tout vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`ShaderOutput _i_out;\n\t\t\t\t\t_i_out.position = vec4(0.0, 0.0, 0.0, 1.0);\n\t\t\t\t\t_i_out.normal = vec3(0.0);\n\t\t\t\t\t_i_out.tangent = vec3(0.0);\n\t\t\t\t\t_i_out.bitangent = vec3(0.0);\n\t\t\t\t\t_i_out.uv = vec2(0.0);\n\t\t\t\t\t_i_out.color = vec4(0.0);\n\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.vertexIndex = uint(gl_VertexID);\n\t\t\t\t\t_i_in.position = vec3(0.0);\n\t\t\t\t\t_i_in.uv = vec2(0.0);\n\t\t\t\t\t_i_in.normal = vec3(0.0);\n\t\t\t\t\t_i_in.tangent = vec3(0.0);\n\t\t\t\t\t_i_in.bitangent = vec3(0.0);\n\t\t\t\t\t_i_in.color = vec4(0.0);\n\t\t\t\t\t_i_in.screen = vec2(0, 0);`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/',\n\t\t\t\t\t`gl_Position = _i_out.position;\n\t\t\t\t\t_v_position = _i_out.position.xyz;\n\t\t\t\t\t_v_normal = _i_out.normal;\n\t\t\t\t\t_v_tangent = _i_out.tangent;\n\t\t\t\t\t_v_bitangent = _i_out.bitangent;\n\t\t\t\t\t_v_uv = _i_out.uv;\n\t\t\t\t\t_v_color = _i_out.color;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replaceAll('_ext_uniform_global_', '_vertex_ext_uniform_global_');\n\t\t\t\tbase = base.replaceAll('_ext_uniform_local_', '_vertex_ext_uniform_local_');\n\t\t\t} else {\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`out vec4 _i_gl_out_pixel;\n\t\t\t\t\tin vec3 _v_position;\n\t\t\t\t\tin vec3 _v_normal;\n\t\t\t\t\tin vec3 _v_tangent;\n\t\t\t\t\tin vec3 _v_bitangent;\n\t\t\t\t\tin vec2 _v_uv;\n\t\t\t\t\tin vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`ShaderOutput _i_out;\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.uv = _v_uv;\n\t\t\t\t\t_i_in.normal = _v_normal;\n\t\t\t\t\t_i_in.tangent = _v_tangent;\n\t\t\t\t\t_i_in.bitangent = _v_bitangent;\n\t\t\t\t\t_i_in.color = _v_color;\n\t\t\t\t\t_i_in.position = _v_position;\n\t\t\t\t\t_i_in.screen = vec2(gl_FragCoord.x, _vtex_canvas.y - gl_FragCoord.y);`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/',\n\t\t\t\t\t'_i_gl_out_pixel = _i_out.color;'\n\t\t\t\t);\n\t\t\t\tbase = base.replaceAll('_ext_uniform_global_', '_pixel_ext_uniform_global_');\n\t\t\t\tbase = base.replaceAll('_ext_uniform_local_', '_pixel_ext_uniform_local_');\n\t\t\t}\n\t\t\tlet finalSource = `#version 300 es\\nprecision mediump float;\\nprecision mediump int;\\n\\n${base}`;\n\n\t\t\tgl.shaderSource(shader, finalSource);\n\t\t\tgl.compileShader(shader);\n\t\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\t\tlet err = gl.getShaderInfoLog(shader);\n\t\t\t\tif (err) {\n\t\t\t\t\tlet location = err.match(/ERROR: \\d+:(\\d+):/);\n\t\t\t\t\tif (location) {\n\t\t\t\t\t\tlet line = parseInt(location[1]);\n\t\t\t\t\t\tlet col = parseInt(location[0]);\n\n\t\t\t\t\t\tlet lines = finalSource.split('\\n');\n\t\t\t\t\t\tconsole.error(lines[line - 1]);\n\t\t\t\t\t\tconsole.error(' '.repeat(col - 1) + '^');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.error('Shader compile error', gl.getShaderInfoLog(shader));\n\t\t\t\t// gl.shader;\n\t\t\t\tconsole.log(finalSource);\n\t\t\t\t(window as any).bubbleError('Shader compile error ' + gl.getShaderInfoLog(shader));\n\t\t\t}\n\n\t\t\tinstance.version++;\n\n\t\t\tlet gShader = new GenericShader(instance.parent.code.webgl, type);\n\t\t\tif (!gShader.payload) {\n\t\t\t\tgShader.payload = {};\n\t\t\t}\n\t\t\tgShader.payload[this.index] = shader;\n\t\t\tgShader.code = finalSource;\n\t\t\tgShader.parent = instance.parent;\n\n\t\t\tinstance.parent.types[type] = gShader;\n\t\t\treturn gShader;\n\t\t}\n\t}\n\n\tcreateShader(code: ShaderCodeMapping, type: ShaderType) {\n\t\tconst gl = this.getGL();\n\n\t\tif (type == 'compute') {\n\t\t\tlet gComputeShader = new GenericShader(code.webgl, type);\n\t\t\tgComputeShader.payload = code.software;\n\t\t\tgComputeShader.parent = null;\n\t\t\treturn gComputeShader;\n\t\t}\n\n\t\tlet shader = gl.createShader(this.GL_SHADER_TYPES[type]);\n\n\t\tif (!shader) {\n\t\t\tthrow new Error('Failed to create shader');\n\t\t}\n\n\t\tgl.shaderSource(shader, code.webgl);\n\t\tgl.compileShader(shader);\n\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\tconsole.log('Code', code);\n\t\t\tconsole.error('Shader compile error', gl.getShaderInfoLog(shader));\n\t\t\tthrow new Error('Shader compile error');\n\t\t}\n\n\t\tlet gShader = new GenericShader(code.webgl, type);\n\t\tgShader.payload = { [this.index]: shader };\n\t\tgShader.parent = null;\n\n\t\treturn gShader;\n\t}\n\n\tclear() {\n\t\tconst gl = this.getGL();\n\n\t\tgl.clearColor(0.0, 0.0, 0.0, 0.0);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\n\t}\n\n\tgetProgramVertexPixel(\n\t\tvertexShaderKey: string,\n\t\tvertexShader: WebGLShader,\n\t\tpixelShaderKey: string,\n\t\tpixelShader: WebGLShader\n\t): (WebGLProgram & WithCachedUniformLocation) | null {\n\t\tconst gl = this.getGL();\n\n\t\tlet key = `${vertexShaderKey}_${pixelShaderKey}`;\n\n\t\tlet uniformCache = new Map<string, WebGLUniformLocation>();\n\n\t\tif (this.programCache.has(key)) {\n\t\t\treturn this.programCache.get(key) ?? null;\n\t\t}\n\n\t\tlet program: WebGLProgram & WithCachedUniformLocation = gl.createProgram() as any;\n\t\tif (!program) {\n\t\t\treturn null;\n\t\t}\n\n\t\t(program as any).getUniformLocationCached = (path: string) => {\n\t\t\tif (!program) throw new Error('Program is null');\n\n\t\t\tif (uniformCache.has(path)) {\n\t\t\t\treturn uniformCache.get(path) ?? null;\n\t\t\t}\n\t\t\t// let errBefore = gl.getError();\n\t\t\tlet loc = gl.getUniformLocation(program, path);\n\t\t\tif (!loc) {\n\t\t\t\t// let err = gl.getError();\n\t\t\t\t// throw new Error('Uniform not found ' + path + ' ' + err + ' ' + errBefore + ' ' + loc);\n\t\t\t} else {\n\t\t\t\tuniformCache.set(path, loc);\n\t\t\t\treturn loc;\n\t\t\t}\n\t\t};\n\n\t\tif (!vertexShader || !pixelShader) {\n\t\t\treturn null;\n\t\t}\n\n\t\tgl.attachShader(program, vertexShader);\n\t\tgl.attachShader(program, pixelShader);\n\t\tgl.linkProgram(program);\n\t\tgl.useProgram(program);\n\t\tthis.programCache.set(key, program);\n\t\treturn program ?? null;\n\t}\n\n\tunbindTexture(texture: ShadeupTexture2d) {\n\t\tconst gl = this.getGL();\n\t\tif (texture.isBound && texture.payload) {\n\t\t\tboundTextures.set(texture.payload.unit, null);\n\t\t\ttexture.isBound = false;\n\n\t\t\tgl.deleteTexture(texture.payload.texture);\n\t\t\ttexture.payload = null;\n\t\t}\n\t}\n\n\tflush(): void {\n\t\tconst gl = this.getGL();\n\n\t\tgl.flush();\n\t}\n\n\tgetTextureUnit(texture: ShadeupTexture2d | TexImageSource) {\n\t\tconst gl = this.getGL();\n\n\t\tlet isBound = false;\n\t\tif (texture instanceof ShadeupTexture2d) {\n\t\t\ttexture.flush();\n\t\t\tisBound = texture.isBound;\n\t\t}\n\n\t\tif (!isBound) {\n\t\t\tlet unit = -1;\n\t\t\tfor (let [ti, tex] of boundTextures) {\n\t\t\t\tif (tex == null) {\n\t\t\t\t\tunit = ti;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unit == -1) {\n\t\t\t\tlet oldest = boundTexturesCache.pop();\n\n\t\t\t\tunit = oldest![0];\n\n\t\t\t\t// throw new Error('Too many textures bound');\n\t\t\t}\n\n\t\t\tif (texture instanceof ShadeupTexture2d) {\n\t\t\t\ttexture.payload = {\n\t\t\t\t\ttexture: gl.createTexture(),\n\t\t\t\t\tunit: -1,\n\t\t\t\t\tversion: texture.version\n\t\t\t\t};\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + unit);\n\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, texture.payload.texture);\n\t\t\t} else {\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + unit);\n\t\t\t\tif (!texture.$gl) {\n\t\t\t\t\ttexture.$gl = {};\n\t\t\t\t}\n\n\t\t\t\tif (!texture.$gl[this.index]) {\n\t\t\t\t\ttexture.$gl[this.index] = gl.createTexture();\n\t\t\t\t}\n\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, texture.$gl[this.index]!);\n\t\t\t}\n\n\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n\t\t\tif (texture instanceof ShadeupTexture2d) {\n\t\t\t\tlet webglAdapter = texture.adapter as WebGLAdapter;\n\t\t\t\tlet useImage: TexImageSource = webglAdapter.canvas as TexImageSource;\n\n\t\t\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, useImage);\n\t\t\t} else {\n\t\t\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture);\n\t\t\t}\n\n\t\t\tboundTextures.set(unit, texture);\n\n\t\t\tif (texture instanceof ShadeupTexture2d) {\n\t\t\t\ttexture.isBound = true;\n\t\t\t\ttexture.payload.unit = unit;\n\n\t\t\t\tboundTexturesCache.set(texture.payload.unit, [texture.payload.unit, texture]);\n\t\t\t} else {\n\t\t\t\tboundTexturesCache.set(unit, [unit, texture]);\n\t\t\t}\n\t\t\treturn unit;\n\t\t} else {\n\t\t\tif (texture instanceof ShadeupTexture2d) {\n\t\t\t\tif (texture.payload.version != texture.version) {\n\t\t\t\t\tgl.activeTexture(gl.TEXTURE0 + texture.payload.unit);\n\n\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, texture.payload.texture);\n\n\t\t\t\t\tlet webglAdapter = texture.adapter as WebGLAdapter;\n\t\t\t\t\tlet useImage: TexImageSource = webglAdapter.canvas as TexImageSource;\n\n\t\t\t\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, useImage);\n\n\t\t\t\t\ttexture.payload.version = texture.version;\n\t\t\t\t}\n\n\t\t\t\tboundTexturesCache.set(texture.payload.unit, [\n\t\t\t\t\ttexture.payload.unit,\n\t\t\t\t\ttexture.payload.texture\n\t\t\t\t]);\n\t\t\t\treturn texture.payload.unit;\n\t\t\t}\n\t\t}\n\t}\n\n\tsetUniform(\n\t\tprogram: WebGLProgram & WithCachedUniformLocation,\n\t\tpath: string,\n\t\tval: any,\n\t\ttype: UniformValueType,\n\t\tshaderKind: 'pixel' | 'vertex'\n\t) {\n\t\tconst gl = this.getGL();\n\t\tconst setUniform = this.setUniform.bind(this);\n\n\t\tlet expandedType = type;\n\t\tif (expandedType.type == 'array') {\n\t\t\tlet innerType = expandedType.element;\n\t\t\tfor (let i = 0; i < val.length; i++) {\n\t\t\t\tsetUniform(program, `${path}[${i}]`, val[i], innerType, shaderKind);\n\t\t\t}\n\t\t\tif (path.split('.').length < 2) {\n\t\t\t\tsetUniform(\n\t\t\t\t\tprogram,\n\t\t\t\t\t`${path}_size`,\n\t\t\t\t\tval.length,\n\t\t\t\t\t{ type: 'primitive', name: 'int' },\n\t\t\t\t\tshaderKind\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (expandedType.type == 'primitive') {\n\t\t\tif (expandedType.name == 'texture2d' || expandedType.name == 'rwtexture2d') {\n\t\t\t\tlet innerType = expandedType.element;\n\n\t\t\t\tlet u = this.getTextureUnit(val);\n\n\t\t\t\tlet loc = program.getUniformLocationCached(path);\n\t\t\t\tgl.uniform1i(loc, u);\n\n\t\t\t\tif (path.split('.').length < 2) {\n\t\t\t\t\tsetUniform(\n\t\t\t\t\t\tprogram,\n\t\t\t\t\t\t`${path}_size`,\n\t\t\t\t\t\tval.size,\n\t\t\t\t\t\t{ type: 'primitive', name: 'float2' },\n\t\t\t\t\t\tshaderKind\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet methodName = translateNumericToGLSL(expandedType.name);\n\t\t\t\tlet loc = program.getUniformLocationCached(path);\n\t\t\t\tif (!Array.isArray(val)) {\n\t\t\t\t\tval = [val];\n\t\t\t\t}\n\t\t\t\tmethodName = `uniform${methodName}v`;\n\t\t\t\tif (methodName.startsWith('uniformMatrix')) {\n\t\t\t\t\t// Transpose the matrix if TRANSPOSE_MATRICES_UNIFORM\n\t\t\t\t\tif (val.length == 4) {\n\t\t\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) val = [val[0], val[2], val[1], val[3]];\n\t\t\t\t\t} else if (val.length == 9) {\n\t\t\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM)\n\t\t\t\t\t\t\tval = [val[0], val[3], val[6], val[1], val[4], val[7], val[2], val[5], val[8]];\n\t\t\t\t\t} else if (val.length == 16) {\n\t\t\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM)\n\t\t\t\t\t\t\tval = [\n\t\t\t\t\t\t\t\tval[0],\n\t\t\t\t\t\t\t\tval[4],\n\t\t\t\t\t\t\t\tval[8],\n\t\t\t\t\t\t\t\tval[12],\n\t\t\t\t\t\t\t\tval[1],\n\t\t\t\t\t\t\t\tval[5],\n\t\t\t\t\t\t\t\tval[9],\n\t\t\t\t\t\t\t\tval[13],\n\t\t\t\t\t\t\t\tval[2],\n\t\t\t\t\t\t\t\tval[6],\n\t\t\t\t\t\t\t\tval[10],\n\t\t\t\t\t\t\t\tval[14],\n\t\t\t\t\t\t\t\tval[3],\n\t\t\t\t\t\t\t\tval[7],\n\t\t\t\t\t\t\t\tval[11],\n\t\t\t\t\t\t\t\tval[15]\n\t\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\t(gl as any)[methodName](loc, false, val);\n\t\t\t\t} else {\n\t\t\t\t\t(gl as any)[methodName](loc, val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (expandedType.type == 'buffer') {\n\t\t} else if (expandedType.type == 'struct') {\n\t\t\tfor (let field of Object.keys(expandedType.fields)) {\n\t\t\t\tif (!val) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Found null value for ${path}.${field} while passing to shader (nulls are not allowed)`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tsetUniform(program, `${path}.${field}`, val[field], expandedType.fields[field], shaderKind);\n\t\t\t}\n\t\t}\n\t}\n\n\tdispatchDraw(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tconst gl = this.getGL();\n\n\t\tlet pixelShader = dispatch.fragmentShader;\n\t\tlet vertexShader = dispatch.vertexShader;\n\t\tif (!pixelShader || !vertexShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet program = this.getProgramVertexPixel(\n\t\t\tvertexShader.uniqueSourceKey,\n\t\t\tvertexShader.payload[this.index],\n\t\t\tpixelShader.uniqueSourceKey,\n\t\t\tpixelShader.payload[this.index]\n\t\t);\n\n\t\tif (!program) {\n\t\t\treturn;\n\t\t}\n\n\t\t// let err = gl.getError();\n\t\t// if (err != gl.NO_ERROR) {\n\t\t// \tthrow new Error(`WebGL error: ${err}`);\n\t\t// }\n\t\t// let log = gl.getProgramInfoLog(program);\n\t\t// if (log) {\n\t\t// \tthrow new Error(log + '\\n\\n' + vertexShader.code + '\\n\\n' + pixelShader.code);\n\t\t// }\n\n\t\tgl.useProgram(program);\n\n\t\tfor (let k of dispatch.vertexUniforms.uniforms.keys()) {\n\t\t\tlet val = dispatch.vertexUniforms.uniforms.get(k);\n\t\t\tif (!val) continue;\n\t\t\tk = k.replaceAll('_ext_uniform_global_', '_vertex_ext_uniform_global_');\n\t\t\tk = k.replaceAll('_ext_uniform_local_', '_vertex_ext_uniform_local_');\n\t\t\tthis.setUniform(program, k, val.value, val.valueType, 'vertex');\n\t\t}\n\n\t\tfor (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n\t\t\tlet val = dispatch.fragmentUniforms.uniforms.get(k);\n\t\t\tif (!val) continue;\n\t\t\tk = k.replaceAll('_ext_uniform_global_', '_pixel_ext_uniform_global_');\n\t\t\tk = k.replaceAll('_ext_uniform_local_', '_pixel_ext_uniform_local_');\n\t\t\tthis.setUniform(program, k, val.value, val.valueType, 'pixel');\n\t\t}\n\n\t\tconst geometry = dispatch.geometry;\n\n\t\tif (!geometry) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet vao = gl.createVertexArray();\n\t\tgl.bindVertexArray(vao);\n\n\t\tfunction generateEmptyData(arr: number[], size: number, numItems: number) {\n\t\t\tif (arr.length == 0) {\n\t\t\t\tfor (let i = 0; i < numItems * size; i++) {\n\t\t\t\t\tfor (let j = 0; j < size; j++) arr.push(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tlet geoGl = geometry as typeof geometry & {\n\t\t\t_cacheGL?: {\n\t\t\t\tpositionBuffer: WebGLBuffer | null;\n\t\t\t\tnormalBuffer: WebGLBuffer | null;\n\t\t\t\ttangentBuffer: WebGLBuffer | null;\n\t\t\t\tbitangentBuffer: WebGLBuffer | null;\n\t\t\t\tuvBuffer: WebGLBuffer | null;\n\t\t\t\tcolorBuffer: WebGLBuffer | null;\n\t\t\t\tindexBuffer: WebGLBuffer | null;\n\t\t\t};\n\t\t};\n\n\t\tlet positionBuffer: WebGLBuffer | null;\n\t\tlet normalBuffer: WebGLBuffer | null;\n\t\tlet tangentBuffer: WebGLBuffer | null;\n\t\tlet bitangentBuffer: WebGLBuffer | null;\n\t\tlet uvBuffer: WebGLBuffer | null;\n\t\tlet colorBuffer: WebGLBuffer | null;\n\t\tlet indexBuffer: WebGLBuffer | null;\n\n\t\tif (geoGl._cacheGL) {\n\t\t\tpositionBuffer = geoGl._cacheGL.positionBuffer;\n\t\t\tnormalBuffer = geoGl._cacheGL.normalBuffer;\n\t\t\ttangentBuffer = geoGl._cacheGL.tangentBuffer;\n\t\t\tbitangentBuffer = geoGl._cacheGL.bitangentBuffer;\n\t\t\tuvBuffer = geoGl._cacheGL.uvBuffer;\n\t\t\tcolorBuffer = geoGl._cacheGL.colorBuffer;\n\t\t\tindexBuffer = geoGl._cacheGL.indexBuffer;\n\t\t} else {\n\t\t\tlet tris = geometry.getTriangles();\n\n\t\t\tpositionBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n\t\t\tgl.bufferData(\n\t\t\t\tgl.ARRAY_BUFFER,\n\t\t\t\tnew Float32Array(geometry.getVertices().flat()),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\n\t\t\tnormalBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);\n\t\t\tgl.bufferData(\n\t\t\t\tgl.ARRAY_BUFFER,\n\t\t\t\tnew Float32Array(generateEmptyData(geometry.getNormals().flat(), 3, tris.length)),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\n\t\t\ttangentBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, tangentBuffer);\n\t\t\tgl.bufferData(\n\t\t\t\tgl.ARRAY_BUFFER,\n\t\t\t\tnew Float32Array(generateEmptyData(geometry.getTangents().flat(), 3, tris.length)),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\n\t\t\tbitangentBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, bitangentBuffer);\n\t\t\tgl.bufferData(\n\t\t\t\tgl.ARRAY_BUFFER,\n\t\t\t\tnew Float32Array(generateEmptyData(geometry.getBitangents().flat(), 3, tris.length)),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\n\t\t\tuvBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n\n\t\t\tgl.bufferData(\n\t\t\t\tgl.ARRAY_BUFFER,\n\t\t\t\tnew Float32Array(generateEmptyData(geometry.getUVs().flat(), 2, tris.length)),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\n\t\t\tcolorBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n\n\t\t\tgl.bufferData(\n\t\t\t\tgl.ARRAY_BUFFER,\n\t\t\t\tnew Float32Array(generateEmptyData(geometry.getColors().flat(), 4, tris.length)),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\n\t\t\tindexBuffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n\t\t\tlet indexArr = new Uint16Array(tris.length);\n\n\t\t\tfor (let i = 0; i < tris.length; i += 3) {\n\t\t\t\tif (false) {\n\t\t\t\t\tindexArr[i] = tris[i + 2];\n\t\t\t\t\tindexArr[i + 1] = tris[i + 1];\n\t\t\t\t\tindexArr[i + 2] = tris[i];\n\t\t\t\t} else {\n\t\t\t\t\tindexArr[i] = tris[i];\n\t\t\t\t\tindexArr[i + 1] = tris[i + 1];\n\t\t\t\t\tindexArr[i + 2] = tris[i + 2];\n\t\t\t\t}\n\t\t\t}\n\t\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);\n\n\t\t\tgeoGl._cacheGL = {\n\t\t\t\tpositionBuffer,\n\t\t\t\tnormalBuffer,\n\t\t\t\ttangentBuffer,\n\t\t\t\tbitangentBuffer,\n\t\t\t\tuvBuffer,\n\t\t\t\tcolorBuffer,\n\t\t\t\tindexBuffer\n\t\t\t};\n\t\t}\n\n\t\tlet positionAttr = gl.getAttribLocation(program, 'a_position');\n\t\tlet normalAttr = gl.getAttribLocation(program, 'a_normal');\n\t\tlet tangentAttr = gl.getAttribLocation(program, 'a_tangent');\n\t\tlet bitangentAttr = gl.getAttribLocation(program, 'a_bitangent');\n\t\tlet uvAttr = gl.getAttribLocation(program, 'a_uv');\n\t\tlet colorAttr = gl.getAttribLocation(program, 'a_color');\n\n\t\tgl.enable(gl.BLEND);\n\t\tif (options.depthTest) gl.enable(gl.DEPTH_TEST);\n\t\tgl.enable(gl.CULL_FACE);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n\t\tif (positionAttr != -1) {\n\t\t\tgl.enableVertexAttribArray(positionAttr);\n\t\t\tgl.vertexAttribPointer(\n\t\t\t\tpositionAttr, // location\n\t\t\t\t3, // size (components per iteration)\n\t\t\t\tgl.FLOAT, // type of to get from buffer\n\t\t\t\tfalse, // normalize\n\t\t\t\t0, // stride (bytes to advance each iteration)\n\t\t\t\t0 // offset (bytes from start of buffer)\n\t\t\t);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);\n\t\tif (normalAttr != -1) {\n\t\t\tgl.enableVertexAttribArray(normalAttr);\n\t\t\tgl.vertexAttribPointer(\n\t\t\t\tnormalAttr, // location\n\t\t\t\t3, // size (components per iteration)\n\t\t\t\tgl.FLOAT, // type of to get from buffer\n\t\t\t\tfalse, // normalize\n\t\t\t\t0, // stride (bytes to advance each iteration)\n\t\t\t\t0 // offset (bytes from start of buffer)\n\t\t\t);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, tangentBuffer);\n\t\tif (tangentAttr != -1) {\n\t\t\tgl.enableVertexAttribArray(tangentAttr);\n\t\t\tgl.vertexAttribPointer(\n\t\t\t\ttangentAttr, // location\n\t\t\t\t3, // size (components per iteration)\n\t\t\t\tgl.FLOAT, // type of to get from buffer\n\t\t\t\tfalse, // normalize\n\t\t\t\t0, // stride (bytes to advance each iteration)\n\t\t\t\t0 // offset (bytes from start of buffer)\n\t\t\t);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, bitangentBuffer);\n\t\tif (bitangentAttr != -1) {\n\t\t\tgl.enableVertexAttribArray(bitangentAttr);\n\t\t\tgl.vertexAttribPointer(\n\t\t\t\tbitangentAttr, // location\n\t\t\t\t3, // size (components per iteration)\n\t\t\t\tgl.FLOAT, // type of to get from buffer\n\t\t\t\tfalse, // normalize\n\t\t\t\t0, // stride (bytes to advance each iteration)\n\t\t\t\t0 // offset (bytes from start of buffer)\n\t\t\t);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n\t\tif (uvAttr != -1) {\n\t\t\tgl.enableVertexAttribArray(uvAttr);\n\t\t\tgl.vertexAttribPointer(\n\t\t\t\tuvAttr, // location\n\t\t\t\t2, // size (components per iteration)\n\t\t\t\tgl.FLOAT, // type of to get from buffer\n\t\t\t\tfalse, // normalize\n\t\t\t\t0, // stride (bytes to advance each iteration)\n\t\t\t\t0 // offset (bytes from start of buffer)\n\t\t\t);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n\t\tif (colorAttr != -1) {\n\t\t\tgl.enableVertexAttribArray(colorAttr);\n\t\t\tgl.vertexAttribPointer(\n\t\t\t\tcolorAttr, // location\n\t\t\t\t4, // size (components per iteration)\n\t\t\t\tgl.FLOAT, // type of to get from buffer\n\t\t\t\tfalse, // normalize\n\t\t\t\t0, // stride (bytes to advance each iteration)\n\t\t\t\t0 // offset (bytes from start of buffer)\n\t\t\t);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n\n\t\tgl.drawElements(gl.TRIANGLES, geometry.getTriangles().length, gl.UNSIGNED_SHORT, 0);\n\n\t\t// gl.deleteBuffer(positionBuffer);\n\t\t// gl.deleteBuffer(normalBuffer);\n\t\t// gl.deleteBuffer(uvBuffer);\n\t\t// gl.deleteBuffer(colorBuffer);\n\t\t// gl.deleteBuffer(indexBuffer);\n\n\t\tgl.deleteVertexArray(vao);\n\n\t\t// let errors = gl.getError();\n\t\t// if (errors) {\n\t\t// \tconsole.error(errors);\n\t\t// }\n\t\t// let log2 = gl.getProgramInfoLog(program);\n\t\t// if (log2) {\n\t\t// \tthrow new Error(log2 + '\\n\\n' + vertexShader.code + '\\n\\n' + pixelShader.code);\n\t\t// }\n\t}\n\n\tdispatchDrawIndexed(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tconst gl = this.getGL();\n\n\t\tlet pixelShader = dispatch.fragmentShader;\n\t\tlet vertexShader = dispatch.vertexShader;\n\t\tif (!pixelShader || !vertexShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet program = this.getProgramVertexPixel(\n\t\t\tvertexShader.uniqueSourceKey,\n\t\t\tvertexShader.payload[this.index],\n\t\t\tpixelShader.uniqueSourceKey,\n\t\t\tpixelShader.payload[this.index]\n\t\t);\n\n\t\tif (!program) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.useProgram(program);\n\n\t\tfor (let k of dispatch.vertexUniforms.uniforms.keys()) {\n\t\t\tlet val = dispatch.vertexUniforms.uniforms.get(k);\n\t\t\tif (!val) continue;\n\t\t\tk = k.replaceAll('_ext_uniform_global_', '_vertex_ext_uniform_global_');\n\t\t\tk = k.replaceAll('_ext_uniform_local_', '_vertex_ext_uniform_local_');\n\t\t\tthis.setUniform(program, k, val.value, val.valueType, 'vertex');\n\t\t}\n\n\t\tfor (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n\t\t\tlet val = dispatch.fragmentUniforms.uniforms.get(k);\n\t\t\tif (!val) continue;\n\t\t\tk = k.replaceAll('_ext_uniform_global_', '_pixel_ext_uniform_global_');\n\t\t\tk = k.replaceAll('_ext_uniform_local_', '_pixel_ext_uniform_local_');\n\t\t\tthis.setUniform(program, k, val.value, val.valueType, 'pixel');\n\t\t}\n\n\t\tconst indexBuffer = dispatch.indexBuffer;\n\n\t\tif (!indexBuffer) {\n\t\t\treturn;\n\t\t}\n\n\t\t// let vertexIdLoc = gl.getAttribLocation(program, '_a_vertex_id');\n\n\t\t// gl.enableVertexAttribArray(vertexIdLoc);\n\n\t\t// gl.bindBuffer(gl.ARRAY_BUFFER, this.getOrCreateBuffer(indexBuffer, gl.ARRAY_BUFFER));\n\n\t\t// const size = 1; // 1 components per iteration\n\t\t// const type = gl.UNSIGNED_INT; // the data is 32bit uint\n\t\t// const normalize = false; // don't normalize the data\n\t\t// const stride = 0; // 0 = move forward size * sizeof(type) each iteration to get the next position\n\t\t// const offset = 0; // start at the beginning of the buffer\n\t\t// gl.vertexAttribPointer(vertexIdLoc, size, type, normalize, stride, offset);\n\n\t\t// let vao = gl.createVertexArray();\n\t\t// gl.bindVertexArray(vao);\n\n\t\tfunction generateEmptyData(arr: number[], size: number, numItems: number) {\n\t\t\tif (arr.length == 0) {\n\t\t\t\tfor (let i = 0; i < numItems * size; i++) {\n\t\t\t\t\tfor (let j = 0; j < size; j++) arr.push(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tgl.enable(gl.BLEND);\n\t\tif (options.depthTest) gl.enable(gl.DEPTH_TEST);\n\t\tgl.enable(gl.CULL_FACE);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tgl.drawArrays(gl.TRIANGLES, 0, indexBuffer.len());\n\n\t\t// gl.deleteVertexArray(vao);\n\t}\n\n\tdispatchDrawCount(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tconst gl = this.getGL();\n\n\t\tlet pixelShader = dispatch.fragmentShader;\n\t\tlet vertexShader = dispatch.vertexShader;\n\t\tif (!pixelShader || !vertexShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet program = this.getProgramVertexPixel(\n\t\t\tvertexShader.uniqueSourceKey,\n\t\t\tvertexShader.payload[this.index],\n\t\t\tpixelShader.uniqueSourceKey,\n\t\t\tpixelShader.payload[this.index]\n\t\t);\n\n\t\tif (!program) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.useProgram(program);\n\n\t\tfor (let k of dispatch.vertexUniforms.uniforms.keys()) {\n\t\t\tlet val = dispatch.vertexUniforms.uniforms.get(k);\n\t\t\tif (!val) continue;\n\t\t\tk = k.replaceAll('_ext_uniform_global_', '_vertex_ext_uniform_global_');\n\t\t\tk = k.replaceAll('_ext_uniform_local_', '_vertex_ext_uniform_local_');\n\t\t\tthis.setUniform(program, k, val.value, val.valueType, 'vertex');\n\t\t}\n\n\t\tfor (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n\t\t\tlet val = dispatch.fragmentUniforms.uniforms.get(k);\n\t\t\tif (!val) continue;\n\t\t\tk = k.replaceAll('_ext_uniform_global_', '_pixel_ext_uniform_global_');\n\t\t\tk = k.replaceAll('_ext_uniform_local_', '_pixel_ext_uniform_local_');\n\t\t\tthis.setUniform(program, k, val.value, val.valueType, 'pixel');\n\t\t}\n\n\t\tgl.enable(gl.BLEND);\n\t\tif (options.depthTest) gl.enable(gl.DEPTH_TEST);\n\t\tgl.enable(gl.CULL_FACE);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tgl.drawArrays(gl.TRIANGLES, 0, dispatch.drawCount * 3);\n\t}\n\n\tgetOrCreateBuffer(buf: buffer<any>, binding: number): WebGLBuffer {\n\t\tconst gl = this.getGL();\n\n\t\tif (buf.platformPayload) {\n\t\t\treturn buf.platformPayload as WebGLBuffer;\n\t\t}\n\n\t\tlet buffer = gl.createBuffer();\n\t\tif (!buffer) {\n\t\t\tthrow new Error('Could not create buffer');\n\t\t}\n\t\tgl.bindBuffer(binding, buffer);\n\n\t\tif (buf.structured) {\n\t\t\t// todo\n\t\t} else {\n\t\t\tgl.bufferData(\n\t\t\t\tbinding,\n\t\t\t\tbuf.uintArray ?? buf.floatArray ?? buf.intArray ?? new Uint8Array(0),\n\t\t\t\tgl.STATIC_DRAW\n\t\t\t);\n\t\t}\n\n\t\tbuf.platformPayload = buffer;\n\n\t\treturn buffer;\n\t}\n\n\tdispatch(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t): void {\n\t\tsuper.dispatch(dispatch, options);\n\t\tif (dispatch.type == 'draw') {\n\t\t\tthis.activateDrawContext();\n\t\t\tthis.triggerEvent('draw', dispatch);\n\t\t\tif (dispatch.drawType == 'indexed') {\n\t\t\t\tthis.dispatchDrawIndexed(dispatch, options);\n\t\t\t} else if (dispatch.drawType == 'count') {\n\t\t\t\tthis.dispatchDrawCount(dispatch, options);\n\t\t\t} else {\n\t\t\t\tthis.dispatchDraw(dispatch, options);\n\t\t\t}\n\t\t}\n\t}\n\n\tgenNativeShader(code: string, type: number) {\n\t\tconst gl = this.getGL();\n\t\tlet shader = gl.createShader(type);\n\t\tif (!shader) {\n\t\t\tthrow new Error('Could not create shader');\n\t\t}\n\t\tgl.shaderSource(shader, code);\n\t\tgl.compileShader(shader);\n\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\tconsole.log('Code', code);\n\t\t\tconsole.error('Shader compile error', gl.getShaderInfoLog(shader));\n\t\t}\n\n\t\treturn shader;\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/engine/adapters/webgpu.ts",
    "content": "import type { buffer, buffer_internal } from '../../library/buffer';\nimport type { Mesh } from '../../../../../shadeup-frontend/lib/std/all';\nimport { ShadeupTexture2d, type TextureComponentType } from '../engine';\nimport type { ShadeupShaderInstance } from '../shader';\nimport {\n\tFloat16Array,\n\tisFloat16Array,\n\tisTypedArray,\n\tgetFloat16,\n\tsetFloat16,\n\tf16round\n} from '@petamoriken/float16';\n\nimport {\n\tGenericShader,\n\tGraphicsAdapter,\n\tShaderDispatch,\n\ttype ShaderCodeMapping,\n\ttype ShaderType,\n\tUniformPayload,\n\ttype UniformValueType,\n\ttype UniformKeyValuePair,\n\tUniformValue,\n\ttype ShaderBindingOptions\n} from './adapter';\n\nimport { LRUCache } from 'lru-cache';\n\nconst CACHE_PIPELINES = false;\n\nconst FormatCapabilities: {\n\t[key in GPUTextureFormat]: {\n\t\tblendable: boolean;\n\t\tsampleTypes: string[];\n\t};\n} = {\n\tr8unorm: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\tr8snorm: {\n\t\tblendable: false,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\tr8uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\tr8sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\trg8unorm: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trg8snorm: {\n\t\tblendable: false,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trg8uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trg8sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\trgba8unorm: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\t'rgba8unorm-srgb': {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trgba8snorm: {\n\t\tblendable: false,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trgba8uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trgba8sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\tbgra8unorm: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\t'bgra8unorm-srgb': {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\tr16uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\tr16sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\tr16float: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trg16uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trg16sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\trg16float: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trgba16uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trgba16sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\trgba16float: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\tr32uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\tr32sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\tr32float: {\n\t\tblendable: false,\n\t\tsampleTypes: [\n\t\t\t'unfilterable-float',\n\t\t\t'float',\n\t\t\t'float32-filterable',\n\t\t\t'float',\n\t\t\t'float32-filterable'\n\t\t]\n\t},\n\trg32uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trg32sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\trg32float: {\n\t\tblendable: false,\n\t\tsampleTypes: [\n\t\t\t'unfilterable-float',\n\t\t\t'float',\n\t\t\t'float32-filterable',\n\t\t\t'float',\n\t\t\t'float32-filterable'\n\t\t]\n\t},\n\trgba32uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trgba32sint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['sint']\n\t},\n\trgba32float: {\n\t\tblendable: false,\n\t\tsampleTypes: [\n\t\t\t'unfilterable-float',\n\t\t\t'float',\n\t\t\t'float32-filterable',\n\t\t\t'float',\n\t\t\t'float32-filterable'\n\t\t]\n\t},\n\trgb10a2uint: {\n\t\tblendable: false,\n\t\tsampleTypes: ['uint']\n\t},\n\trgb10a2unorm: {\n\t\tblendable: true,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t},\n\trg11b10ufloat: {\n\t\tblendable: false,\n\t\tsampleTypes: ['float', 'unfilterable-float']\n\t}\n};\n\nclass WebGPUMeshData {\n\tsourceMesh: Mesh;\n\tvertexBuffer: GPUBuffer;\n\tindexBuffer: GPUBuffer;\n\tvertexCount: number;\n\tindexCount: number;\n\n\tconstructor(\n\t\tsourceMesh: Mesh,\n\t\tvertexBuffer: GPUBuffer,\n\t\tindexBuffer: GPUBuffer,\n\t\tvertexCount: number,\n\t\tindexCount: number\n\t) {\n\t\tthis.sourceMesh = sourceMesh;\n\t\tthis.vertexBuffer = vertexBuffer;\n\t\tthis.indexBuffer = indexBuffer;\n\t\tthis.vertexCount = vertexCount;\n\t\tthis.indexCount = indexCount;\n\t}\n}\n\nconst lruCacheOptions = {\n\tmax: 500\n};\n\nlet lruUniformOptions = {\n\tmax: 128\n};\n\ntype ShaderUniformCachePayload = {\n\tkey: (number | string)[];\n\tbindGroupLayout: GPUBindGroupLayout;\n\tbindGroup: GPUBindGroup;\n\tuniformBuffer: GPUBuffer;\n\tspecialBuffers: GPUBuffer[];\n\tcachedUniforms: ArrayBuffer;\n\tspecialsKey: (number | string | Symbol)[];\n\tspecialEntries: GPUBindGroupEntry[];\n};\n\ntype PipelinePreDispatchCommands = ((encoder: GPUCommandEncoder) => void)[];\n\ntype DrawPipelinePayload = {\n\tpipeline: GPURenderPipeline;\n\tbindGroupFragment: GPUBindGroup;\n\tbindGroupVertex: GPUBindGroup;\n\tbaseUniformBuffer: GPUBuffer;\n\tfragmentUniformBuffer: GPUBuffer;\n\tvertexUniformBuffer: GPUBuffer;\n\tspecialBuffersFragment: GPUBuffer[];\n\tspecialBuffersVertex: GPUBuffer[];\n\tcommands: PipelinePreDispatchCommands;\n};\n\ntype ComputePipelinePayload = {\n\tpipeline: GPUComputePipeline;\n\tbindGroup: GPUBindGroup;\n\tbaseUniformBuffer: GPUBuffer;\n\tuniformBuffer: GPUBuffer;\n\tspecialBuffers: GPUBuffer[];\n\n\tcommands: PipelinePreDispatchCommands;\n};\n\nconst vertexLayout: GPUVertexBufferLayout[] = [\n\t{\n\t\t// Position\n\t\tarrayStride:\n\t\t\t(3 + // Position\n\t\t\t\t3 + // Normal\n\t\t\t\t3 + // Tangent\n\t\t\t\t3 + // Bitangent\n\t\t\t\t2 + // UV\n\t\t\t\t4) * // Color\n\t\t\t4,\n\t\tstepMode: 'vertex',\n\t\tattributes: [\n\t\t\t{\n\t\t\t\tshaderLocation: 0,\n\t\t\t\toffset: 0,\n\t\t\t\tformat: 'float32x3'\n\t\t\t},\n\t\t\t{\n\t\t\t\tshaderLocation: 1,\n\t\t\t\toffset: 3 * 4,\n\t\t\t\tformat: 'float32x3'\n\t\t\t},\n\t\t\t{\n\t\t\t\tshaderLocation: 2,\n\t\t\t\toffset: (3 + 3) * 4,\n\t\t\t\tformat: 'float32x3'\n\t\t\t},\n\t\t\t{\n\t\t\t\tshaderLocation: 3,\n\t\t\t\toffset: (3 + 3 + 3) * 4,\n\t\t\t\tformat: 'float32x3'\n\t\t\t},\n\t\t\t{\n\t\t\t\tshaderLocation: 4,\n\t\t\t\toffset: (3 + 3 + 3 + 3) * 4,\n\t\t\t\tformat: 'float32x2'\n\t\t\t},\n\t\t\t{\n\t\t\t\tshaderLocation: 5,\n\t\t\t\toffset: (3 + 3 + 3 + 3 + 2) * 4,\n\t\t\t\tformat: 'float32x4'\n\t\t\t}\n\t\t]\n\t}\n];\nconst FORMATS: { [key in TextureComponentType]: GPUTextureFormat } & { uint8: GPUTextureFormat } = {\n\tfloat: 'r32float',\n\tint: 'r32sint',\n\tuint: 'r32uint',\n\tfloat2: 'rg32float',\n\tint2: 'rg32sint',\n\tuint2: 'rg32uint',\n\tfloat3: 'rgba32float',\n\tint3: 'rgba32sint',\n\tuint3: 'rgba32uint',\n\tfloat4: 'rgba32float',\n\tint4: 'rgba32sint',\n\tuint4: 'rgba32uint',\n\tuint8: 'rgba8unorm'\n};\nconst CAN_BLEND: { [key in TextureComponentType]: boolean } & { uint8: boolean } = {\n\tfloat: false,\n\tint: false,\n\tuint: false,\n\tfloat2: false,\n\tint2: false,\n\tuint2: false,\n\tfloat3: false,\n\tint3: false,\n\tuint3: false,\n\tfloat4: false,\n\tint4: false,\n\tuint4: false,\n\tuint8: true\n};\nexport class WebGPUAdapter extends GraphicsAdapter {\n\tctx: GPUCanvasContext | null = null;\n\ttexture: GPUTexture | null = null;\n\tstorageTexture: GPUTexture | null = null;\n\tstorageDirty = false;\n\tpendingWrites: number = 0;\n\tadapter: GPUAdapter | null = null;\n\tdevice: GPUDevice | null = null;\n\n\theadless = false;\n\theadlessDimensions: 2 | 3 = 2;\n\theadlessWidth = 1024;\n\theadlessHeight = 1024;\n\theadlessDepth = 1024;\n\n\tbaseUniformBufferSize = 2 * 4; // _vtex_canvas\n\tbaseUniformValues = new Float32Array(this.baseUniformBufferSize / 4);\n\tbaseUniformBuffer: GPUBuffer | null = null;\n\n\tpipelineCache: LRUCache<string, DrawPipelinePayload | ComputePipelinePayload> = new LRUCache(\n\t\tlruCacheOptions\n\t);\n\n\tready = false;\n\n\tcatchGPUErrors = true;\n\n\tgpuMeshData: Map<Symbol, WebGPUMeshData> = new Map();\n\n\tdepthTexture: GPUTexture | null = null;\n\ttextureFormat: TextureComponentType | 'uint8' = 'float4';\n\tgpuTextureFormat: GPUTextureFormat = 'rgba8unorm';\n\n\tclearEnqueued = false;\n\n\tgetValueSize(vt: UniformValueType) {\n\t\treturn getValueSize(vt);\n\t}\n\n\tinit() {\n\t\tthis.ready = false;\n\t\tthis.adapter = (window as any).shadeupWebGPUAdapter;\n\t\tthis.device = (window as any).shadeupWebGPUDevice;\n\t\tif (!this.adapter || !this.device) {\n\t\t\tthrow new Error('WebGPU is not supported');\n\t\t}\n\n\t\tthis.addEventListener('context', (to: string) => {\n\t\t\tif (to == 'paint') {\n\t\t\t\tif (!this.clearEnqueued) {\n\t\t\t\t\tthis.beforeScreenDraw();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.baseUniformBuffer = this.device.createBuffer({\n\t\t\tsize: this.baseUniformBufferSize,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\n\t\t// this.adapter = await navigator.gpu.requestAdapter();\n\t\t// if (!this.adapter) {\n\t\t// \tthrow new Error('WebGPU is not supported');\n\t\t// }\n\n\t\t// this.device = await this.adapter.requestDevice();\n\n\t\t// if (!this.device) {\n\t\t// \tthrow new Error('WebGPU is not supported');\n\t\t// }\n\n\t\tif (this.headless) {\n\t\t\tif (this.headlessDimensions == 2) {\n\t\t\t\tthis.startDispatch();\n\t\t\t\tthis.texture = this.device.createTexture({\n\t\t\t\t\tsize: {\n\t\t\t\t\t\twidth: this.headlessWidth,\n\t\t\t\t\t\theight: this.headlessHeight\n\t\t\t\t\t},\n\t\t\t\t\tformat: this.gpuTextureFormat,\n\t\t\t\t\tdimension: '2d',\n\t\t\t\t\tviewFormats: [this.gpuTextureFormat],\n\t\t\t\t\tusage:\n\t\t\t\t\t\tGPUTextureUsage.RENDER_ATTACHMENT |\n\t\t\t\t\t\tGPUTextureUsage.TEXTURE_BINDING |\n\t\t\t\t\t\tGPUTextureUsage.COPY_SRC |\n\t\t\t\t\t\tGPUTextureUsage.COPY_DST\n\t\t\t\t});\n\t\t\t\tthis.endDispatch();\n\t\t\t} else {\n\t\t\t\tthis.startDispatch();\n\t\t\t\tthis.texture = this.device.createTexture({\n\t\t\t\t\tsize: {\n\t\t\t\t\t\twidth: this.headlessWidth,\n\t\t\t\t\t\theight: this.headlessHeight,\n\t\t\t\t\t\tdepthOrArrayLayers: this.headlessDepth\n\t\t\t\t\t},\n\t\t\t\t\tformat: this.gpuTextureFormat,\n\t\t\t\t\tdimension: '3d',\n\t\t\t\t\tusage:\n\t\t\t\t\t\tGPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t\t\t\t});\n\t\t\t\tthis.endDispatch();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.textureFormat = 'uint8';\n\t\t\tthis.ctx = this.canvas!.getContext('webgpu');\n\n\t\t\tif (!this.ctx) {\n\t\t\t\tthrow new Error('WebGPU is not supported');\n\t\t\t}\n\n\t\t\tthis.ctx.configure({\n\t\t\t\tdevice: this.device,\n\t\t\t\tformat: 'rgba8unorm',\n\t\t\t\talphaMode: 'premultiplied',\n\t\t\t\tusage:\n\t\t\t\t\tGPUTextureUsage.RENDER_ATTACHMENT |\n\t\t\t\t\tGPUTextureUsage.TEXTURE_BINDING |\n\t\t\t\t\tGPUTextureUsage.COPY_SRC |\n\t\t\t\t\tGPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t}\n\n\t\tif (this.canvas) {\n\t\t\tthis.startDispatch();\n\t\t\tthis.depthTexture = this.device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth: this.canvas.width,\n\t\t\t\t\theight: this.canvas.height\n\t\t\t\t},\n\t\t\t\tformat: 'depth24plus',\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t\tthis.endDispatch();\n\t\t}\n\n\t\tthis.ready = true;\n\t}\n\n\tstartDispatch() {\n\t\tif (!this.device) return;\n\t\tif (this.catchGPUErrors) {\n\t\t\tthis.device.pushErrorScope('validation');\n\t\t\tthis.device.pushErrorScope('internal');\n\t\t\tthis.device.pushErrorScope('out-of-memory');\n\t\t}\n\t}\n\n\tendDispatch() {\n\t\tif (!this.device) return;\n\t\tlet handler = (e: GPUError | null) => {\n\t\t\tif (!e) return;\n\t\t\tlet ignore =\n\t\t\t\te.message.includes('[Invalid ShaderModule] is invalid.') ||\n\t\t\t\te.message.includes('[Invalid BindGroup] is invalid.') ||\n\t\t\t\te.message.includes('[Invalid ComputePipeline') ||\n\t\t\t\te.message.includes('[Invalid RenderPipeline');\n\t\t\tif (ignore) return;\n\t\t\t(window as any).bubbleError(e.message);\n\t\t\tlet stack = new Error();\n\t\t\tconsole.error(e, stack.stack);\n\t\t};\n\t\tif (this.catchGPUErrors) {\n\t\t\tthis.device.popErrorScope().then(handler);\n\t\t\tthis.device.popErrorScope().then(handler);\n\t\t\tthis.device.popErrorScope().then(handler);\n\t\t}\n\t}\n\n\tdrawImageCache: any | null;\n\n\ttrace(id: string, data: any) {\n\t\t// console.log(id, data);\n\t}\n\n\tdrawImage(image: HTMLCanvasElement, x: number, y: number, width: number, height: number): void {\n\t\tconst { device } = this.getGPU();\n\t\tthis.trace('drawImage', { image, x, y, width, height });\n\n\t\tif (!this.ready) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.startDispatch();\n\n\t\t// this.clear(true);\n\n\t\tlet selfTexture = this.getTexture();\n\n\t\t// this.fill([1, 0, 0, 1], true);\n\t\t// this.fill([0, 0, 0, 0], true);\n\t\tdevice.queue.copyExternalImageToTexture(\n\t\t\t{ source: image },\n\t\t\t{ texture: selfTexture, premultipliedAlpha: true },\n\t\t\t{ width: image.width, height: image.height }\n\t\t);\n\n\t\tthis.copyToCanvas();\n\n\t\t//printImage(image.toDataURL(), 10, () => console.log('Image read 0'));\n\t\t// printImage(this.canvas.toDataURL(), 10, () => console.log('canvas raed 0'));\n\n\t\t// let doCop = (msg: string) => {\n\t\t// \tlet mapTex = this.device?.createBuffer({\n\t\t// \t\tsize: image.width * image.height * 4 * 2,\n\t\t// \t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t\t// \t});\n\t\t// \tlet encoder = this.device?.createCommandEncoder();\n\n\t\t// \tencoder.copyTextureToBuffer(\n\t\t// \t\t{ texture: selfTexture },\n\t\t// \t\t{ buffer: mapTex, bytesPerRow: image.width * 4 * 2 },\n\t\t// \t\t{ width: image.width, height: image.height }\n\t\t// \t);\n\n\t\t// \tlet commandBuffer = encoder.finish();\n\t\t// \tdevice.queue.submit([commandBuffer]);\n\n\t\t// \tmapTex?.mapAsync(GPUMapMode.READ).then(() => {\n\t\t// \t\tlet data = new Uint16Array(mapTex?.getMappedRange()!);\n\n\t\t// \t\tlet buf = new Uint8Array(image.width * image.height * 4);\n\t\t// \t\tfor (let i = 0; i < image.width * image.height * 4; i++) {\n\t\t// \t\t\tbuf[i] = data[i] / 100;\n\t\t// \t\t}\n\t\t// \t\tlet cnvs = document.createElement('canvas');\n\t\t// \t\tcnvs.width = image.width;\n\t\t// \t\tcnvs.height = image.height;\n\n\t\t// \t\tlet ctx = cnvs.getContext('2d');\n\n\t\t// \t\tif (!ctx) return;\n\n\t\t// \t\tlet imageData = ctx.createImageData(image.width, image.height);\n\t\t// \t\timageData.data.set(buf);\n\t\t// \t\tctx.putImageData(imageData, 0, 0);\n\n\t\t// \t\tprintImage(cnvs.toDataURL(), 10, () => console.log('MAp read', msg));\n\t\t// \t});\n\t\t// };\n\t\t// setTimeout(() => doCop('5000'), 5000);\n\t\t// setTimeout(() => doCop('1000'), 1000);\n\t\t// setTimeout(() => doCop('100'), 100);\n\t\t// setTimeout(() => doCop('10'), 10);\n\t\t// setTimeout(() => doCop('1'), 1);\n\t\t// doCop('0');\n\n\t\t// setTimeout(() => {\n\t\t// \tprintImage(image.toDataURL(), 10, () => console.log('Image read 5000'));\n\t\t// \tprintImage(this.canvas.toDataURL(), 10, () => console.log('canvas raed 5000'));\n\t\t// }, 5000);\n\t\t// setTimeout(() => {\n\t\t// \tprintImage(image.toDataURL(), 10, () => console.log('Image read 2500'));\n\t\t// \tprintImage(this.canvas.toDataURL(), 10, () => console.log('canvas raed 2500'));\n\t\t// }, 2500);\n\t\t// setTimeout(() => {\n\t\t// \tprintImage(image.toDataURL(), 10, () => console.log('Image read 10'));\n\t\t// \tprintImage(this.canvas.toDataURL(), 10, () => console.log('canvas raed 10'));\n\t\t// }, 10);\n\n\t\t// device.queue.copyExternalImageToTexture(\n\t\t// \t{ source: image },\n\t\t// \t{ texture: this.ctx?.getCurrentTexture(), premultipliedAlpha: false },\n\t\t// \t{ width: image.width, height: image.height }\n\t\t// );\n\n\t\t// const data = new Uint8Array([1 * 255, 1 * 255, 0 * 255, 0 * 255]);\n\t\t// device.queue.copyExternalImageToTexture(\n\t\t// \t{ source: image },\n\t\t// \t{ texture: selfTexture, premultipliedAlpha: true },\n\t\t// \t{ width: image.width, height: image.height }\n\t\t// );\n\t\t// this.fill([1, 0, 0, 1], true);\n\t\t// device.queue.writeTexture(\n\t\t// \t{ texture: selfTexture },\n\t\t// \tdata,\n\t\t// \t{},\n\t\t// \t{ width: selfTexture.width, height: selfTexture.height }\n\t\t// );\n\t\t// this.copyToCanvas();\n\t\t// device.queue.copyExternalImageToTexture(\n\t\t// \t{ source: image },\n\t\t// \t{ texture: selfTexture, premultipliedAlpha: true },\n\t\t// \t{ width: image.width, height: image.height }\n\t\t// );\n\n\t\tthis.endDispatch();\n\t}\n\n\tgenericBufferFlags() {\n\t\treturn GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n\t}\n\n\tcopyBufferToBuffer<T>(from: buffer<T>, to: buffer<T>) {\n\t\tconst { device } = this.getGPU();\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tencoder.copyBufferToBuffer(\n\t\t\t\tthis.getOrCreateBuffer(from, this.genericBufferFlags()),\n\t\t\t\t0,\n\t\t\t\tthis.getOrCreateBuffer(to, this.genericBufferFlags()),\n\t\t\t\t0,\n\t\t\t\tfrom.elementCount * from.elementBytes\n\t\t\t);\n\t\t});\n\t}\n\n\tasync downloadBuffer(buf: buffer<any>) {\n\t\tthis.trace('downloadBuffer', { buffer: buf });\n\t\tconst { device } = this.getGPU();\n\n\t\tlet nativeBuffer = this.getOrCreateBuffer(buf, this.genericBufferFlags());\n\n\t\tthis.startDispatch();\n\t\tlet encoder = device.createCommandEncoder();\n\n\t\tlet buffer = device.createBuffer({\n\t\t\tsize: nativeBuffer.size,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t});\n\n\t\tencoder.copyBufferToBuffer(nativeBuffer, 0, buffer, 0, nativeBuffer.size);\n\n\t\tlet commandBuffer = encoder.finish();\n\n\t\tdevice.queue.submit([commandBuffer]);\n\n\t\tawait buffer.mapAsync(GPUMapMode.READ);\n\n\t\tlet arr = buffer.getMappedRange();\n\n\t\tif (!buf.structured) {\n\t\t\t// Simple 1-to-1 mapping\n\n\t\t\tif (buf.arrayBuffer) {\n\t\t\t\tlet u8down = new Uint8Array(arr);\n\t\t\t\tlet u8in = new Uint8Array(buf.arrayBuffer);\n\t\t\t\tu8in.set(u8down);\n\t\t\t} else {\n\t\t\t\tthrow new Error('Buffer not found while downloading');\n\t\t\t}\n\t\t} else {\n\t\t\tif (buf.typeName == 'atomic<uint>') {\n\t\t\t\t// if (!buf.structArray) throw new Error('Buffer not found while downloading');\n\t\t\t\tlet u32down = new Uint32Array(arr);\n\n\t\t\t\tbuf.uintArray?.set(u32down);\n\t\t\t} else if (buf.typeName == 'atomic<int>') {\n\t\t\t\t// if (!buf.structArray) throw new Error('Buffer not found while downloading');\n\t\t\t\tlet i32down = new Int32Array(arr);\n\n\t\t\t\tbuf.intArray?.set(i32down);\n\t\t\t} else {\n\t\t\t\t// let structure = (window as any).__shadeup_structs[buf.typeName];\n\t\t\t\t// let elSize = getValueSize(structure.fields);\n\t\t\t\t// for (let i = 0; i < buf.elementCount; i++) {\n\t\t\t\t// \tbuf.structArray[i] = this.readStructuredBuffer(structure.fields, arr, i * elSize);\n\t\t\t\t// }\n\n\t\t\t\tnew Uint8Array(buf.arrayBuffer!).set(new Uint8Array(arr));\n\t\t\t}\n\t\t}\n\n\t\tbuffer.destroy();\n\n\t\tthis.endDispatch();\n\t}\n\n\tuploadBuffer(buf: buffer<any>) {\n\t\tconst { device } = this.getGPU();\n\t\tthis.trace('uploadBuffer', { buffer: buf });\n\n\t\tthis.startDispatch();\n\t\tlet nativeBuffer = this.getOrCreateBuffer(buf, this.genericBufferFlags());\n\n\t\tif (!buf.structured) {\n\t\t\t// Simple 1-to-1 mapping\n\n\t\t\tif (buf.arrayBuffer) {\n\t\t\t\tlet u8in = new Uint8Array(buf.arrayBuffer);\n\t\t\t\tdevice.queue.writeBuffer(nativeBuffer, 0, u8in);\n\t\t\t} else {\n\t\t\t\tthrow new Error('Buffer not found while downloading');\n\t\t\t}\n\t\t} else {\n\t\t\tif (buf.typeName == 'atomic<uint>') {\n\t\t\t\tdevice.queue.writeBuffer(nativeBuffer, 0, buf.arrayBuffer!);\n\t\t\t} else if (buf.typeName == 'atomic<int>') {\n\t\t\t\tlet i32down = new Int32Array(buf.elementCount);\n\n\t\t\t\tdevice.queue.writeBuffer(nativeBuffer, 0, buf.arrayBuffer!);\n\t\t\t} else {\n\t\t\t\t// let structure = (window as any).__shadeup_structs[buf.typeName];\n\t\t\t\t// let size = getValueSize(structure.fields);\n\t\t\t\t// let arrayBuffer = new ArrayBuffer(buf.elementCount * size);\n\t\t\t\t// for (let i = 0; i < buf.elementCount; i++) {\n\t\t\t\t// \tthis.writeStructuredBuffer(structure.fields, buf.structArray[i], arrayBuffer, i * size);\n\t\t\t\t// }\n\n\t\t\t\tdevice.queue.writeBuffer(nativeBuffer, 0, new Uint8Array(buf.arrayBuffer!));\n\t\t\t}\n\t\t}\n\n\t\tthis.endDispatch();\n\t}\n\n\tasync downloadImage() {\n\t\tconst { device } = this.getGPU();\n\n\t\tthis.flushStorage();\n\n\t\tthis.startDispatch();\n\n\t\tlet encoder = device.createCommandEncoder();\n\t\tlet texture = this.getTexture();\n\t\tlet stride = parseInt(this.textureFormat[this.textureFormat.length - 1]) || 1;\n\t\tif (this.textureFormat == 'uint8') {\n\t\t\tstride = 4;\n\t\t}\n\n\t\tlet bytesPerComponent = 2;\n\t\tif (this.textureFormat == 'uint8') {\n\t\t\tbytesPerComponent = 1;\n\t\t} else if (this.textureFormat.startsWith('float')) {\n\t\t\tbytesPerComponent = 4;\n\t\t} else if (this.textureFormat.startsWith('int')) {\n\t\t\tbytesPerComponent = 4;\n\t\t} else {\n\t\t\tbytesPerComponent = 4;\n\t\t}\n\n\t\tlet alignment = 256;\n\n\t\tlet bytesPerRow = texture.width * stride * bytesPerComponent;\n\t\tlet neededAlignment = false;\n\t\tlet alignmentPad = 0;\n\t\tif (bytesPerRow % alignment != 0) {\n\t\t\tlet oldBytes = bytesPerRow;\n\t\t\tbytesPerRow += alignment - (bytesPerRow % alignment);\n\n\t\t\talignmentPad = bytesPerRow - oldBytes;\n\t\t\tneededAlignment = true;\n\t\t}\n\n\t\tlet buffer = device.createBuffer({\n\t\t\tsize: bytesPerRow * texture.height,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t});\n\n\t\tencoder.copyTextureToBuffer({ texture: texture }, { buffer: buffer, bytesPerRow }, texture);\n\n\t\tlet commandBuffer = encoder.finish();\n\n\t\tdevice.queue.submit([commandBuffer]);\n\n\t\tawait buffer.mapAsync(GPUMapMode.READ);\n\n\t\tlet arr: Uint32Array | Uint16Array | Int16Array | Int32Array | Float32Array | Uint8Array;\n\t\tlet buf = new Uint8Array(buffer.getMappedRange());\n\t\tif (neededAlignment) {\n\t\t\tlet oldBytes = bytesPerRow - alignmentPad;\n\t\t\tlet newData = new Uint8Array(oldBytes * texture.height);\n\n\t\t\tfor (let i = 0; i < texture.height; i++) {\n\t\t\t\tnewData.set(new Uint8Array(buf.buffer, i * bytesPerRow, oldBytes), i * oldBytes);\n\t\t\t}\n\n\t\t\tbuf = newData;\n\t\t}\n\t\tif (this.textureFormat == 'uint8') {\n\t\t\tarr = new Uint8Array(buf.buffer);\n\t\t} else if (this.textureFormat.startsWith('float')) {\n\t\t\tarr = new Float32Array(buf.buffer);\n\t\t} else if (this.textureFormat.startsWith('int')) {\n\t\t\tarr = new Uint32Array(buf.buffer);\n\t\t} else {\n\t\t\tarr = new Uint32Array(buf.buffer);\n\t\t}\n\n\t\tthis.endDispatch();\n\t\treturn arr;\n\t}\n\n\tuploadImage(\n\t\tdata: Uint32Array | Uint16Array | Int16Array | Int32Array | Float32Array | Uint8Array\n\t): void {\n\t\tthis.startDispatch();\n\t\tconst { device } = this.getGPU();\n\n\t\tlet encoder = device.createCommandEncoder();\n\n\t\tlet texture = this.getTexture();\n\n\t\tlet stride = parseInt(this.textureFormat[this.textureFormat.length - 1]) || 1;\n\t\tif (this.textureFormat == 'uint8') {\n\t\t\tstride = 4;\n\t\t}\n\n\t\tlet bytesPerComponent = 2;\n\t\tif (this.textureFormat == 'uint8') {\n\t\t\tbytesPerComponent = 1;\n\t\t} else if (this.textureFormat.startsWith('float')) {\n\t\t\tbytesPerComponent = 4;\n\t\t} else if (this.textureFormat.startsWith('int')) {\n\t\t\tbytesPerComponent = 4;\n\t\t} else {\n\t\t\tbytesPerComponent = 4;\n\t\t}\n\n\t\tlet alignment = 256;\n\n\t\tlet bytesPerRow = texture.width * stride * bytesPerComponent;\n\n\t\tif (bytesPerRow % alignment != 0) {\n\t\t\tlet oldBytes = bytesPerRow;\n\t\t\tbytesPerRow += alignment - (bytesPerRow % alignment);\n\n\t\t\tlet pad = bytesPerRow - oldBytes;\n\n\t\t\t// Add padding\n\t\t\tlet newData = new Uint8Array(bytesPerRow * texture.height);\n\n\t\t\tfor (let i = 0; i < texture.height; i++) {\n\t\t\t\tnewData.set(new Uint8Array(data.buffer, i * oldBytes, oldBytes), i * bytesPerRow);\n\t\t\t}\n\n\t\t\tdata = newData;\n\t\t}\n\n\t\tlet buffer = device.createBuffer({\n\t\t\tsize: data.byteLength,\n\t\t\tusage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeBuffer(buffer, 0, data);\n\n\t\tencoder.copyBufferToTexture(\n\t\t\t{ buffer: buffer, bytesPerRow },\n\t\t\t{ texture: texture },\n\t\t\t{ width: texture.width, height: texture.height }\n\t\t);\n\n\t\tlet commandBuffer = encoder.finish();\n\n\t\tdevice.queue.submit([commandBuffer]);\n\n\t\tbuffer.destroy();\n\n\t\tthis.copyToCanvas();\n\t\tthis.endDispatch();\n\t}\n\n\tgetGPU(): {\n\t\tdevice: GPUDevice;\n\t} {\n\t\tif (!this.device) {\n\t\t\tthrow new Error('WebGPU is not supported');\n\t\t}\n\n\t\tif (!this.ready) {\n\t\t\tthrow new Error('WebGPU is not ready');\n\t\t}\n\n\t\treturn {\n\t\t\tdevice: this.device\n\t\t};\n\t}\n\n\tsetViewport(width: number, height: number) {\n\t\tif (!this.device) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Refresh depth tex\n\t\tthis.startDispatch();\n\t\tthis.depthTexture?.destroy();\n\t\tthis.depthTexture = this.device.createTexture({\n\t\t\tsize: {\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t},\n\t\t\tformat: 'depth24plus',\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tthis.endDispatch();\n\t}\n\n\ttranslateFormatToGPUType(type: TextureComponentType): string {\n\t\tif (type == 'float4') {\n\t\t\treturn 'vec4<f32>';\n\t\t}\n\t\tif (type == 'float3') {\n\t\t\treturn 'vec3<f32>';\n\t\t}\n\t\tif (type == 'float2') {\n\t\t\treturn 'vec2<f32>';\n\t\t}\n\t\tif (type == 'float') {\n\t\t\treturn 'f32';\n\t\t}\n\t\tif (type == 'int4') {\n\t\t\treturn 'vec4<i32>';\n\t\t}\n\t\tif (type == 'int3') {\n\t\t\treturn 'vec3<i32>';\n\t\t}\n\t\tif (type == 'int2') {\n\t\t\treturn 'vec2<i32>';\n\t\t}\n\t\tif (type == 'int') {\n\t\t\treturn 'i32';\n\t\t}\n\t\tif (type == 'uint4') {\n\t\t\treturn 'vec4<u32>';\n\t\t}\n\t\tif (type == 'uint3') {\n\t\t\treturn 'vec3<u32>';\n\t\t}\n\t\tif (type == 'uint2') {\n\t\t\treturn 'vec2<u32>';\n\t\t}\n\t\tif (type == 'uint') {\n\t\t\treturn 'u32';\n\t\t}\n\n\t\tthrow new Error('Invalid type');\n\t}\n\n\tgetOrCreateShader(\n\t\tinstance: ShadeupShaderInstance,\n\t\ttype: ShaderType,\n\t\tconfig?: ShaderBindingOptions\n\t): GenericShader {\n\t\tconst { device } = this.getGPU();\n\n\t\tlet key: string = type;\n\t\tif (config) {\n\t\t\tif (config.attachments) {\n\t\t\t\tkey += '|' + config.attachments.join(',');\n\t\t\t}\n\t\t}\n\t\tif (instance.parent.types[key]) {\n\t\t\treturn instance.parent.types[key];\n\t\t} else {\n\t\t\tlet base = instance.parent.code.webgpu;\n\n\t\t\tfor (let param of Object.keys(instance.parent.arraySizes)) {\n\t\t\t\tbase = base.replace(`%${param}_size%`, instance.parent.arraySizes[param]);\n\t\t\t\t// console.log(base, `%${param}_size%`);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tinstance.parent.params.webgpu.globals.length == 0 &&\n\t\t\t\tinstance.parent.params.webgpu.locals.length == 0\n\t\t\t) {\n\t\t\t\tbase = base.replace(`/*SHADEUP_UNIFORM_STRUCT_START*/`, '');\n\t\t\t}\n\n\t\t\tif (instance) {\n\t\t\t\tfor (let key of Object.keys(instance.bindings)) {\n\t\t\t\t\tlet value = instance.bindings[key];\n\t\t\t\t\tlet isArrayTex = false;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tvalue instanceof ShadeupTexture2d ||\n\t\t\t\t\t\t(Array.isArray(value) && value.length > 0 && value[0] instanceof ShadeupTexture2d)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tif (value.length == 0) {\n\t\t\t\t\t\t\t\tthrow new Error('Invalid array length');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (value[0] instanceof ShadeupTexture2d) {\n\t\t\t\t\t\t\t\t\tvalue = value[0];\n\t\t\t\t\t\t\t\t\tisArrayTex = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Replace %WRITE_TYPE_X% with the correct type\n\t\t\t\t\t\tlet name = `%WRITE_TYPE_${key}%`;\n\t\t\t\t\t\tlet texFormat = (value.adapter as WebGPUAdapter).gpuTextureFormat;\n\t\t\t\t\t\tbase = base.replace(name, texFormat);\n\n\t\t\t\t\t\tif (texFormat == 'depth24plus' || texFormat == 'depth32float') {\n\t\t\t\t\t\t\tbase = base.replace(\n\t\t\t\t\t\t\t\t`var ${key}_texture: texture_2d${isArrayTex ? '_array' : ''}<${\n\t\t\t\t\t\t\t\t\tvalue.innerType.startsWith('float')\n\t\t\t\t\t\t\t\t\t\t? 'f32'\n\t\t\t\t\t\t\t\t\t\t: value.innerType.startsWith('int')\n\t\t\t\t\t\t\t\t\t\t? 'i32'\n\t\t\t\t\t\t\t\t\t\t: 'u32'\n\t\t\t\t\t\t\t\t}>`,\n\t\t\t\t\t\t\t\t`var ${key}_texture: texture_depth_2d${isArrayTex ? '_array' : ''}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// .replace(\n\t\t\t\t\t\t\t// \tnew RegExp(\n\t\t\t\t\t\t\t// \t\t`@group\\\\(%GROUP_INDEX%\\\\) @binding\\\\(\\\\d\\\\) var ${key}: sampler;`,\n\t\t\t\t\t\t\t// \t\t'g'\n\t\t\t\t\t\t\t// \t),\n\t\t\t\t\t\t\t// \t''\n\t\t\t\t\t\t\t// );\n\n\t\t\t\t\t\t\t// Replace texture loads\n\t\t\t\t\t\t\tlet startIndexes = base.matchAll(new RegExp(`textureLoad\\\\(${key}_texture, `, 'g'));\n\t\t\t\t\t\t\tfor (let match of startIndexes) {\n\t\t\t\t\t\t\t\tlet balance = 0;\n\t\t\t\t\t\t\t\tlet hitFirst = false;\n\t\t\t\t\t\t\t\tfor (let i = match.index ?? 0; i < base.length; i++) {\n\t\t\t\t\t\t\t\t\tlet count;\n\t\t\t\t\t\t\t\t\tif (base[i] == '(') {\n\t\t\t\t\t\t\t\t\t\tbalance++;\n\t\t\t\t\t\t\t\t\t\thitFirst = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (base[i] == ')') {\n\t\t\t\t\t\t\t\t\t\tbalance--;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (balance == 0 && hitFirst) {\n\t\t\t\t\t\t\t\t\t\tbase = base.substring(0, i + 1) + base.substring(i + 3, base.length);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Replace samples\n\t\t\t\t\t\t\tstartIndexes = base.matchAll(new RegExp(`textureSample\\\\(${key}_texture, `, 'g'));\n\t\t\t\t\t\t\tlet replaces = [];\n\t\t\t\t\t\t\tfor (let match of startIndexes) {\n\t\t\t\t\t\t\t\tlet balance = 0;\n\t\t\t\t\t\t\t\tlet hitFirst = false;\n\t\t\t\t\t\t\t\tfor (let i = match.index ?? 0; i < base.length; i++) {\n\t\t\t\t\t\t\t\t\tlet count;\n\t\t\t\t\t\t\t\t\tif (base[i] == '(') {\n\t\t\t\t\t\t\t\t\t\tbalance++;\n\t\t\t\t\t\t\t\t\t\thitFirst = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (base[i] == ')') {\n\t\t\t\t\t\t\t\t\t\tbalance--;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (balance == 0 && hitFirst) {\n\t\t\t\t\t\t\t\t\t\treplaces.push(base.substring(match.index!, i));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (let replace of replaces) {\n\t\t\t\t\t\t\t\tbase = base.replace(replace, 'vec4<f32>(' + replace + ')');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (type == 'compute') {\n\t\t\t\tbase = base.replaceAll('%GROUP_INDEX%', '0');\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`\n\t\t\t\t\t\n\t\t\t\t\tstruct _ComputeUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _compute_uniform_input: _ComputeUniformInput;\n\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `void`);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t`/*__SHADEUP_TEMPLATE_INPUT*/`,\n\t\t\t\t\t`\n\t\t\t\t@builtin(workgroup_id) workgroup_id : vec3<u32>,\n\t\t\t\t@builtin(local_invocation_id) local_invocation_id : vec3<u32>,\n\t\t\t\t@builtin(global_invocation_id) global_invocation_id : vec3<u32>,\n\t\t\t\t@builtin(local_invocation_index) local_invocation_index: u32,\n\t\t\t\t@builtin(num_workgroups) num_workgroups: vec3<u32>\n\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`var _i_in: ShaderInput;\n\t\t\t\t\t_i_in.groupId = vec3<i32>(workgroup_id);\n\t\t\t\t\t_i_in.groupSize = vec3<i32>(num_workgroups);\n\t\t\t\t\t_i_in.localId = vec3<i32>(local_invocation_id);\n\t\t\t\t\t_i_in.globalId = vec3<i32>(global_invocation_id);\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace('/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/', ``.replace(/\\t\\n/g, ''));\n\t\t\t} else if (type == 'vertex') {\n\t\t\t\tbase = base.replaceAll('%GROUP_INDEX%', '1');\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeOutput}\n\t\t\t\t\t};\n\t\t\t\t\tstruct _VertexUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _vertex_uniform_input: _VertexUniformInput;\n\n\t\t\t\t\t@vertex\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `_VertexShaderOutput`);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t`/*__SHADEUP_TEMPLATE_INPUT*/`,\n\t\t\t\t\t`\n\t\t\t\t@builtin(vertex_index) vertexIndex: u32,\n\t\t\t\t@builtin(instance_index) instanceIndex: u32,\n\t\t\t\t@location(0) position: vec3<f32>,\n\t\t\t\t@location(1) normal: vec3<f32>,\n\t\t\t\t@location(2) tangent: vec3<f32>,\n\t\t\t\t@location(3) bitangent: vec3<f32>,\n\t\t\t\t@location(4) uv: vec2<f32>,\n\t\t\t\t@location(5) color: vec4<f32>\n\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`var _i_out: _VertexShaderOutput;\n\t\t\t\t\t_i_out.position = vec4(position, 1.0);\n\t\t\t\t\t_i_out.normal = normal;\n\t\t\t\t\t_i_out.tangent = tangent;\n\t\t\t\t\t_i_out.bitangent = bitangent;\n\t\t\t\t\t_i_out.uv = uv;\n\t\t\t\t\t_i_out.color = color;\n\t\t\t\t\t_i_out.instanceIndex = instanceIndex;\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = position;\n\t\t\t\t\t_i_in.normal = normal;\n\t\t\t\t\t_i_in.tangent = tangent;\n\t\t\t\t\t_i_in.bitangent = bitangent;\n\t\t\t\t\t_i_in.vertexIndex = i32(vertexIndex);\n\t\t\t\t\t_i_in.instanceIndex = i32(instanceIndex);\n\t\t\t\t\t_i_in.uv = uv;\n\t\t\t\t\t_i_in.color = color;\n\t\t\t\t\t_i_in.screen = vec2<f32>(0, 0);\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/',\n\t\t\t\t\t`\n\t\t\t\t\t// _i_out.position = vec4<f32>(_i_out.position.x, _i_out.position.y, (1.0 + _i_out.position.z) / 2.0, _i_out.position.w);\n\t\t\t\t\t_i_out.worldPosition = position;\n\t\t\t\t\treturn _i_out;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t} else if (type == 'vertex-indexed') {\n\t\t\t\tbase = base.replaceAll('%GROUP_INDEX%', '1');\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeOutput}\n\t\t\t\t\t};\n\t\t\t\t\tstruct _VertexUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _vertex_uniform_input: _VertexUniformInput;\n\n\t\t\t\t\t@vertex\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `_VertexShaderOutput`);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t`/*__SHADEUP_TEMPLATE_INPUT*/`,\n\t\t\t\t\t`\n\t\t\t\t@builtin(vertex_index) vertexIndex: u32,\n\t\t\t\t@builtin(instance_index) instanceIndex: u32,\n\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`var _i_out: _VertexShaderOutput;\n\t\t\t\t\t_i_out.position = vec4(0.0, 0.0, 0.0, 1.0);\n\t\t\t\t\t_i_out.normal = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.tangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.bitangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.uv = vec2(0.0, 0.0);\n\t\t\t\t\t_i_out.color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.instanceIndex = instanceIndex;\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.normal = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.tangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.bitangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.vertexIndex = i32(vertexIndex);\n\t\t\t\t\t_i_in.instanceIndex = i32(instanceIndex);\n\t\t\t\t\t_i_in.uv = vec2(0.0, 0.0);\n\t\t\t\t\t_i_in.color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.screen = vec2<f32>(0, 0);\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/',\n\t\t\t\t\t`\n\t\t\t\t\t// _i_out.position = vec4<f32>(_i_out.position.x, _i_out.position.y, (1.0 + _i_out.position.z) / 2.0, _i_out.position.w);\n\t\t\t\t\t// _i_out.worldPosition = position;\n\t\t\t\t\treturn _i_out;`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlet headerStr = '';\n\t\t\t\tif (config?.attachments) {\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\theaderStr += 'struct _ShaderFragmentOutput {\\n';\n\t\t\t\t\tfor (let attachment of config.attachments) {\n\t\t\t\t\t\theaderStr += `@location(${i}) attachment${i}: ${this.translateFormatToGPUType(\n\t\t\t\t\t\t\tattachment\n\t\t\t\t\t\t)},\\n`;\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\theaderStr += '\\n};';\n\t\t\t\t}\n\t\t\t\tbase = base.replaceAll('%GROUP_INDEX%', '0');\n\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/',\n\t\t\t\t\t`\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeInput}\n\t\t\t\t\t};\n\n\t\t\t\t\t${headerStr}\n\t\t\t\t\t\n\t\t\t\t\tstruct _FragmentUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _fragment_uniform_input: _FragmentUniformInput;\n\n\t\t\t\t\t@fragment\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t`/*__SHADEUP_TEMPLATE_OUTPUT*/`,\n\t\t\t\t\tconfig?.attachments ? `_ShaderFragmentOutput` : `@location(0) vec4<f32>`\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t`/*__SHADEUP_TEMPLATE_INPUT*/`,\n\t\t\t\t\t`\n\t\t\t\t_frag_in: _VertexShaderOutput\n\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tlet writeCustoms = instance.parent.params.webgpu.attributeInput.split('@location').length;\n\t\t\t\tlet extra = '';\n\t\t\t\tif (writeCustoms >= 2) {\n\t\t\t\t\tfor (let i = 0; i < writeCustoms - 1; i++) {\n\t\t\t\t\t\textra += `_i_in.custom${i} = _frag_in.custom${i};\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/',\n\t\t\t\t\t`var _i_out: ${config?.attachments ? '_ShaderFragmentOutput' : 'ShaderOutput'};\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = _frag_in.worldPosition;\n\t\t\t\t\t_i_in.clipPosition = _frag_in.position;\n\t\t\t\t\t_i_in.normal = _frag_in.normal;\n\t\t\t\t\t_i_in.tangent = _frag_in.tangent;\n\t\t\t\t\t_i_in.bitangent = _frag_in.bitangent;\n\t\t\t\t\t_i_in.uv = _frag_in.uv;\n\t\t\t\t\t_i_in.color = _frag_in.color;\n\t\t\t\t\t_i_in.screen = vec2<f32>(_frag_in.position.x, _frag_in.position.y);\n\t\t\t\t\t_i_in.instanceIndex = i32(_frag_in.instanceIndex);\n\t\t\t\t\t${extra}\n\t\t\t\t\t`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t\tbase = base.replace(\n\t\t\t\t\t'/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/',\n\t\t\t\t\t`return ${config?.attachments ? '_i_out' : '_i_out.color'};`.replace(/\\t\\n/g, '')\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.startDispatch();\n\n\t\t\tlet shader = device.createShaderModule({\n\t\t\t\tcode: base\n\t\t\t});\n\n\t\t\tthis.endDispatch();\n\n\t\t\tif (!shader) throw new Error('Failed to create shader');\n\n\t\t\tinstance.version++;\n\n\t\t\tlet gShader = new GenericShader(base, type);\n\t\t\tgShader.payload = shader;\n\t\t\tgShader.parent = instance.parent;\n\n\t\t\tinstance.parent.types[key] = gShader;\n\t\t\treturn gShader;\n\t\t}\n\t}\n\n\tcreateShader(code: ShaderCodeMapping, type: ShaderType) {\n\t\tconst { device } = this.getGPU();\n\n\t\tif (type == 'compute') {\n\t\t\tlet gComputeShader = new GenericShader(code.webgl, type);\n\t\t\tgComputeShader.payload = code.software;\n\t\t\tgComputeShader.parent = null;\n\t\t\treturn gComputeShader;\n\t\t}\n\n\t\tthis.startDispatch();\n\n\t\tlet shader = device.createShaderModule({\n\t\t\tcode: code.webgpu\n\t\t});\n\n\t\t// shader.getCompilationInfo().then((info) => {\n\t\t// \tconsole.log(info);\n\t\t// });\n\n\t\tthis.endDispatch();\n\n\t\tif (!shader) {\n\t\t\tconsole.error('Failed to create shader');\n\n\t\t\tthrow new Error('Failed to create shader');\n\t\t}\n\n\t\tlet gShader = new GenericShader(code.webgpu, type);\n\t\tgShader.payload = shader;\n\t\tgShader.parent = null;\n\n\t\treturn gShader;\n\t}\n\n\tclear(immediate = false, color: number | [number, number, number, number] | 'auto' = 'auto') {\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tconst { device } = this.getGPU();\n\t\t\tif (!this.depthTexture) return;\n\n\t\t\tconst textureView = this.getTexture().createView();\n\n\t\t\tif (this.gpuTextureFormat == 'depth24plus' || this.gpuTextureFormat == 'depth32float') {\n\t\t\t\tconst clearPassDesc: GPURenderPassDescriptor = {\n\t\t\t\t\tcolorAttachments: [],\n\t\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\t\tview: this.getTexture().createView(),\n\t\t\t\t\t\tdepthClearValue: typeof color === 'number' ? color : 1.0,\n\t\t\t\t\t\tdepthLoadOp: 'clear',\n\t\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst passEncoder = encoder.beginRenderPass(clearPassDesc);\n\t\t\t\tpassEncoder.end();\n\t\t\t} else {\n\t\t\t\tconst clearPassDesc: GPURenderPassDescriptor = {\n\t\t\t\t\tcolorAttachments: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tview: textureView,\n\t\t\t\t\t\t\tclearValue: Array.isArray(color)\n\t\t\t\t\t\t\t\t? { r: color[0], g: color[1], b: color[2], a: color[3] }\n\t\t\t\t\t\t\t\t: { r: 0, g: 0, b: 0, a: 0 },\n\n\t\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\t\tloadOp: 'clear'\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\t\tview: this.depthTexture.createView(),\n\t\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\t\tdepthLoadOp: 'clear',\n\t\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst passEncoder = encoder.beginRenderPass(clearPassDesc);\n\t\t\t\tpassEncoder.end();\n\t\t\t}\n\t\t}, immediate);\n\t}\n\n\tfill(color: [number, number, number, number], immediate = false) {\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tconst { device } = this.getGPU();\n\t\t\tif (!this.depthTexture) return;\n\n\t\t\tconst textureView = this.getTexture().createView({\n\t\t\t\tformat: this.gpuTextureFormat\n\t\t\t});\n\t\t\tconst clearPassDesc: GPURenderPassDescriptor = {\n\t\t\t\tcolorAttachments: [\n\t\t\t\t\t{\n\t\t\t\t\t\tview: textureView,\n\t\t\t\t\t\tclearValue: { r: color[0], g: color[1], b: color[2], a: color[3] },\n\n\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\tloadOp: 'clear'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\tview: this.depthTexture.createView(),\n\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\tdepthLoadOp: 'clear',\n\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst passEncoder = encoder.beginRenderPass(clearPassDesc);\n\t\t\tpassEncoder.end();\n\t\t}, immediate);\n\t}\n\n\tunbindTexture(texture: ShadeupTexture2d) {}\n\n\tgetOrCreateMeshData(mesh: Mesh) {\n\t\tconst { device } = this.getGPU();\n\t\tif (mesh.symbol == null) mesh.symbol = Symbol();\n\t\tif ((mesh as any).$__gpuMeshData) {\n\t\t\treturn (mesh as any).$__gpuMeshData as WebGPUMeshData;\n\t\t} else {\n\t\t\tlet meshVertices = mesh.getVertices();\n\t\t\tlet meshIndices = mesh.getTriangles();\n\t\t\tlet meshNormals = mesh.getNormals();\n\t\t\tlet meshTangents = mesh.getTangents();\n\t\t\tlet meshBitangents = mesh.getBitangents();\n\t\t\tlet meshUVs = mesh.getUVs();\n\t\t\tlet meshColors = mesh.getColors();\n\n\t\t\tlet vertexCount = meshVertices.length;\n\n\t\t\tlet vertexData = new Float32Array(vertexCount * (3 + 3 + 3 + 3 + 2 + 4));\n\n\t\t\tlet indexData = new Uint32Array(meshIndices.length);\n\t\t\tlet offset = 0;\n\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\tvertexData[offset++] = meshVertices[i][0];\n\t\t\t\tvertexData[offset++] = meshVertices[i][1];\n\t\t\t\tvertexData[offset++] = meshVertices[i][2];\n\n\t\t\t\tif (meshNormals[i]) {\n\t\t\t\t\tvertexData[offset++] = meshNormals[i][0];\n\t\t\t\t\tvertexData[offset++] = meshNormals[i][1];\n\t\t\t\t\tvertexData[offset++] = meshNormals[i][2];\n\t\t\t\t} else {\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t}\n\t\t\t\tif (meshTangents[i]) {\n\t\t\t\t\tvertexData[offset++] = meshTangents[i][0];\n\t\t\t\t\tvertexData[offset++] = meshTangents[i][1];\n\t\t\t\t\tvertexData[offset++] = meshTangents[i][2];\n\t\t\t\t} else {\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t}\n\n\t\t\t\tif (meshBitangents[i]) {\n\t\t\t\t\tvertexData[offset++] = meshBitangents[i][0];\n\t\t\t\t\tvertexData[offset++] = meshBitangents[i][1];\n\t\t\t\t\tvertexData[offset++] = meshBitangents[i][2];\n\t\t\t\t} else {\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t}\n\n\t\t\t\tif (meshUVs[i]) {\n\t\t\t\t\tvertexData[offset++] = meshUVs[i][0];\n\t\t\t\t\tvertexData[offset++] = meshUVs[i][1];\n\t\t\t\t} else {\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t}\n\n\t\t\t\tif (meshColors[i]) {\n\t\t\t\t\tvertexData[offset++] = meshColors[i][0];\n\t\t\t\t\tvertexData[offset++] = meshColors[i][1];\n\t\t\t\t\tvertexData[offset++] = meshColors[i][2];\n\t\t\t\t\tvertexData[offset++] = meshColors[i][3];\n\t\t\t\t} else {\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t\tvertexData[offset++] = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < meshIndices.length; i++) {\n\t\t\t\tindexData[i] = meshIndices[i];\n\t\t\t}\n\n\t\t\tlet vertexBuffer = device.createBuffer({\n\t\t\t\tsize: vertexData.byteLength,\n\t\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n\t\t\t});\n\n\t\t\tlet indexBuffer = device.createBuffer({\n\t\t\t\tsize: indexData.byteLength,\n\t\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n\t\t\t});\n\n\t\t\tdevice.queue.writeBuffer(vertexBuffer, 0, vertexData);\n\t\t\tdevice.queue.writeBuffer(indexBuffer, 0, indexData);\n\n\t\t\tlet meshData = new WebGPUMeshData(\n\t\t\t\tmesh,\n\t\t\t\tvertexBuffer,\n\t\t\t\tindexBuffer,\n\t\t\t\tvertexCount,\n\t\t\t\tmeshIndices.length\n\t\t\t);\n\n\t\t\t(mesh as any).$__gpuMeshData = meshData;\n\n\t\t\treturn meshData;\n\t\t}\n\t}\n\n\tflushStorage() {\n\t\tconst { device } = this.getGPU();\n\t\tthis.startDispatch();\n\t\tif (this.storageDirty && this.texture) {\n\t\t\tlet encoder = device.createCommandEncoder();\n\n\t\t\tencoder.copyTextureToTexture(\n\t\t\t\t{ texture: this.getStorageTexture() },\n\t\t\t\t{ texture: this.getTexture() },\n\t\t\t\t{ width: this.texture.width, height: this.texture.height }\n\t\t\t);\n\n\t\t\tdevice.queue.submit([encoder.finish()]);\n\t\t\tthis.storageDirty = false;\n\t\t}\n\t\tthis.endDispatch();\n\t}\n\n\tbuildUniformKey(generatedUniforms: GeneratedUniforms): (number | string)[] {\n\t\tlet key = [];\n\n\t\tconst KEY_TYPES = {\n\t\t\tBINDING: 1241253932,\n\t\t\tMARK: 153925923059,\n\t\t\tSAMPLER: 1241253932,\n\t\t\tTEXTURE: 153925923059,\n\t\t\tBUFFER: 1241253932\n\t\t};\n\n\t\tkey.push(KEY_TYPES.BINDING, 0, KEY_TYPES.MARK);\n\n\t\tif (generatedUniforms.size > 0) {\n\t\t\tkey.push(KEY_TYPES.BINDING, 1, KEY_TYPES.MARK);\n\t\t}\n\n\t\tif (generatedUniforms.special)\n\t\t\tfor (let s of generatedUniforms.special) {\n\t\t\t\tif (s.type == 'sampler2D') {\n\t\t\t\t\tlet gpuFormat = (s.value?.texture.adapter as WebGPUAdapter).gpuTextureFormat;\n\t\t\t\t\tlet texInner = s.value?.texture?.innerType ?? 'float4';\n\t\t\t\t\tlet filterMode = texInner == 'uint8' ? 'filtering' : 'non-filtering';\n\n\t\t\t\t\tif (s.access == 'sample_write') {\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 2, KEY_TYPES.MARK);\n\t\t\t\t\t} else if (s.access == 'write') {\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 1, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t} else if (s.access == 'sample' || s.access == 'read') {\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n\t\t\t\t\t}\n\t\t\t\t} else if (s.type == 'sampler2DArray') {\n\t\t\t\t\tif (!s.value?.textures[0]) continue;\n\t\t\t\t\tlet firstTexture = s.value?.textures[0];\n\t\t\t\t\tlet gpuFormat = (firstTexture.adapter as WebGPUAdapter).gpuTextureFormat;\n\t\t\t\t\tlet texInner = firstTexture.innerType ?? 'float4';\n\t\t\t\t\tlet filterMode = texInner == 'uint8' ? 'filtering' : 'non-filtering';\n\n\t\t\t\t\tif (s.access == 'sample_write') {\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 2, KEY_TYPES.MARK);\n\t\t\t\t\t} else if (s.access == 'write') {\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 1, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t} else if (s.access == 'sample' || s.access == 'read') {\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n\t\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n\t\t\t\t\t}\n\t\t\t\t\tkey.push('len', s.value.textures.length);\n\t\t\t\t} else if (s.type == 'array') {\n\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.BUFFER, s.index, 3623, KEY_TYPES.MARK);\n\t\t\t\t} else if (s.type == 'atomic') {\n\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.BUFFER, s.index, 124, KEY_TYPES.MARK);\n\t\t\t\t} else if (s.type == 'buffer') {\n\t\t\t\t\tkey.push(KEY_TYPES.BINDING, KEY_TYPES.BUFFER, s.index, 111, s.access, KEY_TYPES.MARK);\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn key;\n\t}\n\n\tbindGroupLayoutCounter = 0;\n\n\tbuildUniformsForPipeline(\n\t\tshader: GenericShader & {\n\t\t\twebgpuUniformCache?: LRUCache<string, ShaderUniformCachePayload>;\n\t\t},\n\t\tgeneratedUniforms: GeneratedUniforms,\n\t\tbaseUniformBuffer: GPUBuffer,\n\t\tstage: number\n\t) {\n\t\t// We need to cache bind group layouts based on the uniforms passed in\n\t\t// Prepass will build a lightweight key for the uniforms passed in\n\t\t// If the key is the same, we can reuse the bind group layout\n\t\t// Otherwise, we need to rebuild the bind group layout and pipeline\n\n\t\t// We also need to cache the uniform buffer if possible\n\t\t// We can build a create a buffer locally on the cpu and compare it to the previous buffer\n\t\t// If the buffer is the same, we can reuse the buffer\n\t\t// Otherwise, we need to rebuild the buffer and bind group layout and pipeline\n\n\t\tlet key = this.buildUniformKey(generatedUniforms).join('|');\n\n\t\tconst { device } = this.getGPU();\n\n\t\tlet commands: PipelinePreDispatchCommands = [];\n\t\tif (generatedUniforms.special) {\n\t\t\tfor (let s of generatedUniforms.special) {\n\t\t\t\tif (s.type == 'sampler2D') {\n\t\t\t\t\tcommands.push((encoder) => {\n\t\t\t\t\t\tif (s.value && 'texture' in s.value) {\n\t\t\t\t\t\t\tif (s.value?.texture.adapter && s.value.texture.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\t\tif (s.value.texture.adapter.storageDirty) {\n\t\t\t\t\t\t\t\t\tthis.trace('copyWritableTextureToReadable', { texture: s.value.texture });\n\t\t\t\t\t\t\t\t\tencoder.copyTextureToTexture(\n\t\t\t\t\t\t\t\t\t\t{ texture: s.value.texture.adapter.getStorageTexture() },\n\t\t\t\t\t\t\t\t\t\t{ texture: s.value.texture.adapter.getTexture() },\n\t\t\t\t\t\t\t\t\t\t{ width: s.value.texture.size[0], height: s.value.texture.size[1] }\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\ts.value.texture.adapter.storageDirty = false;\n\t\t\t\t\t\t\t\t\ts.value.texture.cpuReadDirty = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ts.value?.texture.flush(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tlet texInner = s.value?.texture?.innerType ?? 'float4';\n\t\t\t\t\tif (s.access == 'sample_write') {\n\t\t\t\t\t\t// No op\n\t\t\t\t\t} else if (s.access == 'write') {\n\t\t\t\t\t\tif (s.value?.texture.adapter && s.value.texture.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\ts.value.texture.adapter.pendingWrites++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommands.push((encoder) => {\n\t\t\t\t\t\t\tif (s.value && 'texture' in s.value) {\n\t\t\t\t\t\t\t\tif (s.value?.texture.adapter && s.value.texture.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\t\t\tthis.trace('markWritableTextureDirty', { texture: s.value.texture });\n\t\t\t\t\t\t\t\t\ts.value.texture.adapter.storageDirty = true;\n\t\t\t\t\t\t\t\t\ts.value.texture.adapter.pendingWrites--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (s.access == 'sample' || s.access == 'read') {\n\t\t\t\t\t\t// No op\n\t\t\t\t\t}\n\t\t\t\t} else if (s.type == 'sampler2DArray') {\n\t\t\t\t\tlet needsNewTexture = false;\n\t\t\t\t\tif (s.value && 'textures' in s.value) {\n\t\t\t\t\t\tif (!s.value?.textures.$arrTexture) {\n\t\t\t\t\t\t\tneedsNewTexture = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ts.value.textures[0].adapter.getTexture().usage != s.value.textures.$arrTexture.usage\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tneedsNewTexture = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ts.value.textures[0].adapter.getTexture().format !=\n\t\t\t\t\t\t\t\ts.value.textures.$arrTexture.format\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tneedsNewTexture = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ts.value.textures[0].adapter.getTexture().width != s.value.textures.$arrTexture.width\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tneedsNewTexture = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ts.value.textures[0].adapter.getTexture().height !=\n\t\t\t\t\t\t\t\ts.value.textures.$arrTexture.height\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tneedsNewTexture = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (s.value.textures.length != s.value.textures.$arrTexture.depthOrArrayLayers) {\n\t\t\t\t\t\t\t\tneedsNewTexture = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (needsNewTexture) {\n\t\t\t\t\t\t\tif (s.value.textures.$arrTexture) {\n\t\t\t\t\t\t\t\tlet oldTex = s.value.textures.$arrTexture;\n\n\t\t\t\t\t\t\t\tthis.enqueueCleanupCommand(() => {\n\t\t\t\t\t\t\t\t\tthis.trace('destroyMissizedArrayTexture', { texture: oldTex });\n\t\t\t\t\t\t\t\t\toldTex.destroy();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ts.value.textures.$arrTexture = device.createTexture({\n\t\t\t\t\t\t\t\tsize: [\n\t\t\t\t\t\t\t\t\ts.value.textures[0].size[0],\n\t\t\t\t\t\t\t\t\ts.value.textures[0].size[1],\n\t\t\t\t\t\t\t\t\ts.value.textures.length\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tformat: (s.value.textures[0].adapter as WebGPUAdapter).gpuTextureFormat,\n\t\t\t\t\t\t\t\tusage: (s.value.textures[0].adapter as WebGPUAdapter).getTexture().usage\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcommands.push((encoder) => {\n\t\t\t\t\t\tlet arrDirty = false;\n\n\t\t\t\t\t\tlet texVersions: number[] = [];\n\n\t\t\t\t\t\tif (s.value && 'textures' in s.value) {\n\t\t\t\t\t\t\tif (s.value.textures.$arrTexture) {\n\t\t\t\t\t\t\t\tif (s.value.textures.$arrTexture.$versions) {\n\t\t\t\t\t\t\t\t\ttexVersions = s.value.textures.$arrTexture.$versions;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (texVersions.length != s.value.textures.length) {\n\t\t\t\t\t\t\t\ttexVersions = [];\n\t\t\t\t\t\t\t\tfor (let i = 0; i < s.value.textures.length; i++) {\n\t\t\t\t\t\t\t\t\ttexVersions.push(-1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (let [i, texture] of s.value.textures.entries()) {\n\t\t\t\t\t\t\t\tif (texture.adapter && texture.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\t\t\tif (texture.adapter.storageDirty) {\n\t\t\t\t\t\t\t\t\t\tarrDirty = true;\n\t\t\t\t\t\t\t\t\t\tencoder.copyTextureToTexture(\n\t\t\t\t\t\t\t\t\t\t\t{ texture: texture.adapter.getStorageTexture() },\n\t\t\t\t\t\t\t\t\t\t\t{ texture: texture.adapter.getTexture() },\n\t\t\t\t\t\t\t\t\t\t\t{ width: texture.size[0], height: texture.size[1] }\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\ttexture.adapter.storageDirty = false;\n\t\t\t\t\t\t\t\t\t\ttexture.cpuReadDirty = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (texture.version != texVersions[i]) {\n\t\t\t\t\t\t\t\t\t\ttexVersions[i] = texture.version;\n\t\t\t\t\t\t\t\t\t\tarrDirty = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttexture.flush(false);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (arrDirty) {\n\t\t\t\t\t\t\t\ts.value.textures.$arrTexture.$versions = texVersions;\n\t\t\t\t\t\t\t\tthis.trace('copyToArrayTexture', { texture: s.value.textures.$arrTexture });\n\n\t\t\t\t\t\t\t\tfor (let [i, texture] of s.value.textures.entries()) {\n\t\t\t\t\t\t\t\t\tencoder.copyTextureToTexture(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttexture: (texture.adapter as WebGPUAdapter).getTexture()\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttexture: s.value.textures.$arrTexture,\n\t\t\t\t\t\t\t\t\t\t\torigin: [0, 0, i]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\twidth: texture.size[0],\n\t\t\t\t\t\t\t\t\t\t\theight: texture.size[1],\n\t\t\t\t\t\t\t\t\t\t\tdepthOrArrayLayers: 1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (s.value && 'textures' in s.value) {\n\t\t\t\t\t\tfor (let texture of s.value.textures) {\n\t\t\t\t\t\t\tlet texInner = texture.innerType ?? 'float4';\n\t\t\t\t\t\t\tif (s.access == 'sample_write') {\n\t\t\t\t\t\t\t\t// No op\n\t\t\t\t\t\t\t} else if (s.access == 'write') {\n\t\t\t\t\t\t\t\tif (texture.adapter && texture.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\t\t\ttexture.adapter.pendingWrites++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcommands.push((encoder) => {\n\t\t\t\t\t\t\t\t\tif (texture.adapter && texture.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\t\t\t\tthis.trace('markWritableTextureDirty', { texture: texture });\n\t\t\t\t\t\t\t\t\t\ttexture.adapter.storageDirty = true;\n\t\t\t\t\t\t\t\t\t\ttexture.adapter.pendingWrites--;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (s.access == 'sample' || s.access == 'read') {\n\t\t\t\t\t\t\t\t// No op\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (s.type == 'array') {\n\t\t\t\t\t// No op\n\t\t\t\t} else if (s.type == 'atomic') {\n\t\t\t\t\t// No op\n\t\t\t\t} else if (s.type == 'buffer') {\n\t\t\t\t\tif (s.value && s.access == 'write') {\n\t\t\t\t\t\ts.value.pendingWrites++;\n\t\t\t\t\t}\n\t\t\t\t\tcommands.push((encoder) => {\n\t\t\t\t\t\tif (s.value) {\n\t\t\t\t\t\t\tlet sv = s.value as any;\n\t\t\t\t\t\t\tif (sv.cpuWriteDirty) {\n\t\t\t\t\t\t\t\tthis.trace('uploadCPUDirtyBuffer', { buffer: s.value });\n\t\t\t\t\t\t\t\tsv.upload();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((s as any).access == 'write') {\n\t\t\t\t\t\t\t\tthis.trace('markBufferDirty', { buffer: s.value });\n\t\t\t\t\t\t\t\tsv.cpuReadDirty = true;\n\t\t\t\t\t\t\t\tsv.pendingWrites--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t// No op\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet bindGroupLayout: GPUBindGroupLayout | null = null;\n\t\tlet bindGroup: GPUBindGroup | null = null;\n\t\tif (!shader.webgpuUniformCache) {\n\t\t\tshader.webgpuUniformCache = new LRUCache({\n\t\t\t\t...lruUniformOptions,\n\t\t\t\tdispose(value, key) {\n\t\t\t\t\tvalue.uniformBuffer.destroy();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet cache: ShaderUniformCachePayload | undefined = undefined;\n\n\t\tif (shader.webgpuUniformCache) {\n\t\t\tcache = shader.webgpuUniformCache.get(key);\n\t\t\tlet matches = true;\n\t\t\tif (!cache) {\n\t\t\t\tmatches = false;\n\t\t\t} else {\n\t\t\t\t// for (let i = 0; i < key.length; i++) {\n\t\t\t\t// \tif (shader.webgpuUniformCache.key[i] != key[i]) {\n\t\t\t\t// \t\tmatches = false;\n\t\t\t\t// \t\tbreak;\n\t\t\t\t// \t}\n\t\t\t\t// }\n\t\t\t}\n\n\t\t\tif (matches && cache) {\n\t\t\t\tbindGroupLayout = cache.bindGroupLayout;\n\t\t\t\tbindGroup = cache.bindGroup;\n\t\t\t}\n\t\t}\n\n\t\tif (!bindGroupLayout) {\n\t\t\tthis.startDispatch();\n\t\t\tbindGroupLayout = device.createBindGroupLayout({\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\tbuffer: {\n\t\t\t\t\t\t\tminBindingSize: 0\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t...(generatedUniforms.size > 0\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\tbuffer: {\n\t\t\t\t\t\t\t\t\t\tminBindingSize: 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t  ]\n\t\t\t\t\t\t: []),\n\t\t\t\t\t...(generatedUniforms.special\n\t\t\t\t\t\t.map((s) => {\n\t\t\t\t\t\t\tif (s.type == 'sampler2D') {\n\t\t\t\t\t\t\t\tlet sampleType = (t: string): GPUTextureSampleType => {\n\t\t\t\t\t\t\t\t\tlet gpuFormat = (s.value?.texture.adapter as WebGPUAdapter).gpuTextureFormat;\n\t\t\t\t\t\t\t\t\tif (gpuFormat == 'depth24plus' || gpuFormat == 'depth32float') {\n\t\t\t\t\t\t\t\t\t\treturn 'depth';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (t == 'uint8') {\n\t\t\t\t\t\t\t\t\t\treturn 'float';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (t.startsWith('int')) {\n\t\t\t\t\t\t\t\t\t\treturn 'sint';\n\t\t\t\t\t\t\t\t\t} else if (t.startsWith('uint')) {\n\t\t\t\t\t\t\t\t\t\treturn 'uint';\n\t\t\t\t\t\t\t\t\t} else if (t.startsWith('float')) {\n\t\t\t\t\t\t\t\t\t\treturn 'unfilterable-float';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn 'unfilterable-float';\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tlet texInner = s.value?.texture?.innerType ?? 'float4';\n\t\t\t\t\t\t\t\tlet filterMode = texInner == 'uint8' ? 'filtering' : 'non-filtering';\n\t\t\t\t\t\t\t\tlet sampleTypeGPU = sampleType(s.value?.texture?.innerType ?? 'float4');\n\n\t\t\t\t\t\t\t\tif (s.access == 'sample_write') {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\ttexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tsampleType: sampleType(texInner),\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d',\n\t\t\t\t\t\t\t\t\t\t\t\tmultisampled: false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 1,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tsampler: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: filterMode\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 2,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tstorageTexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tformat: (s.value?.texture.adapter as WebGPUAdapter).gpuTextureFormat,\n\t\t\t\t\t\t\t\t\t\t\t\taccess: 'write-only',\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else if (s.access == 'write') {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\ttexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tsampleType: sampleTypeGPU,\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d',\n\t\t\t\t\t\t\t\t\t\t\t\tmultisampled: false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 1,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tstorageTexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tformat: (s.value?.texture.adapter as WebGPUAdapter).gpuTextureFormat,\n\t\t\t\t\t\t\t\t\t\t\t\taccess: 'write-only',\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else if (s.access == 'sample' || s.access == 'read') {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\ttexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tsampleType: sampleTypeGPU,\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d',\n\t\t\t\t\t\t\t\t\t\t\t\tmultisampled: false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 1,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tsampler: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: filterMode\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (s.type == 'sampler2DArray') {\n\t\t\t\t\t\t\t\tif (!s.value?.textures[0]) return [];\n\t\t\t\t\t\t\t\tlet firstTexture: ShadeupTexture2d = s.value?.textures[0]!;\n\t\t\t\t\t\t\t\tlet sampleType = (t: string): GPUTextureSampleType => {\n\t\t\t\t\t\t\t\t\tlet gpuFormat = (firstTexture.adapter as WebGPUAdapter).gpuTextureFormat;\n\t\t\t\t\t\t\t\t\tif (gpuFormat == 'depth24plus' || gpuFormat == 'depth32float') {\n\t\t\t\t\t\t\t\t\t\treturn 'depth';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (t == 'uint8') {\n\t\t\t\t\t\t\t\t\t\treturn 'float';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (t.startsWith('int')) {\n\t\t\t\t\t\t\t\t\t\treturn 'sint';\n\t\t\t\t\t\t\t\t\t} else if (t.startsWith('uint')) {\n\t\t\t\t\t\t\t\t\t\treturn 'uint';\n\t\t\t\t\t\t\t\t\t} else if (t.startsWith('float')) {\n\t\t\t\t\t\t\t\t\t\treturn 'unfilterable-float';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn 'unfilterable-float';\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tlet texInner = firstTexture.innerType ?? 'float4';\n\t\t\t\t\t\t\t\tlet filterMode = texInner == 'uint8' ? 'filtering' : 'non-filtering';\n\t\t\t\t\t\t\t\tlet sampleTypeGPU = sampleType(firstTexture.innerType ?? 'float4');\n\n\t\t\t\t\t\t\t\tif (s.access == 'sample_write') {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\ttexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tsampleType: sampleType(texInner),\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d-array',\n\t\t\t\t\t\t\t\t\t\t\t\tmultisampled: false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 1,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tsampler: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: filterMode\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 2,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tstorageTexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tformat: (firstTexture.adapter as WebGPUAdapter).gpuTextureFormat,\n\t\t\t\t\t\t\t\t\t\t\t\taccess: 'write-only',\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d-array'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else if (s.access == 'write') {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\ttexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tsampleType: sampleTypeGPU,\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d-array',\n\t\t\t\t\t\t\t\t\t\t\t\tmultisampled: false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 1,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tstorageTexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tformat: (firstTexture.adapter as WebGPUAdapter).gpuTextureFormat,\n\t\t\t\t\t\t\t\t\t\t\t\taccess: 'write-only',\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d-array'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else if (s.access == 'sample' || s.access == 'read') {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\ttexture: {\n\t\t\t\t\t\t\t\t\t\t\t\tsampleType: sampleTypeGPU,\n\t\t\t\t\t\t\t\t\t\t\t\tviewDimension: '2d-array',\n\t\t\t\t\t\t\t\t\t\t\t\tmultisampled: false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry,\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tbinding: s.index + 1,\n\t\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\t\tsampler: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: filterMode\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} as GPUBindGroupLayoutEntry\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (s.type == 'array') {\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\tbuffer: { type: 'read-only-storage' }\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t} else if (s.type == 'atomic') {\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\tbuffer: { type: 'storage' }\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t} else if (s.type == 'buffer') {\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbinding: s.index,\n\t\t\t\t\t\t\t\t\t\tvisibility: stage,\n\t\t\t\t\t\t\t\t\t\tbuffer: { type: s.access == 'read' ? 'read-only-storage' : 'storage' }\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.flat() as any)\n\t\t\t\t]\n\t\t\t});\n\n\t\t\t(bindGroupLayout as any).$__gpuKey = this.bindGroupLayoutCounter++;\n\t\t\tthis.endDispatch();\n\t\t}\n\n\t\tlet outUniformBuffer = cache?.uniformBuffer;\n\t\tlet outSpecialBuffers = cache?.specialBuffers;\n\n\t\tif (cache) {\n\t\t\tif (cache.cachedUniforms) {\n\t\t\t\tlet matches = generatedUniforms.data.byteLength == cache.cachedUniforms.byteLength;\n\t\t\t\tlet uintView = new Uint8Array(generatedUniforms.data);\n\t\t\t\tlet uintView2 = new Uint8Array(cache.cachedUniforms);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tfor (let i = 0; i < uintView.length; i++) {\n\t\t\t\t\t\tif (uintView[i] != uintView2[i]) {\n\t\t\t\t\t\t\tmatches = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!matches) {\n\t\t\t\t\tif (outUniformBuffer) {\n\t\t\t\t\t\t// Clean it up after the frame\n\t\t\t\t\t\tlet oldBuffer = outUniformBuffer;\n\t\t\t\t\t\tthis.enqueueCleanupCommand(() => {\n\t\t\t\t\t\t\toldBuffer.destroy();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbindGroup = null;\n\t\t\t\t\toutUniformBuffer = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet specialsKey: (number | string | Symbol)[] = [];\n\n\t\tlet alwaysDirty = false;\n\n\t\tfor (let special of generatedUniforms.special) {\n\t\t\tif (special.type == 'sampler2D') {\n\t\t\t\tif (!special.value || !('texture' in special.value)) continue;\n\n\t\t\t\tlet tex = special.value.texture;\n\n\t\t\t\tif (tex.image) {\n\t\t\t\t\tlet texture;\n\t\t\t\t\tif (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n\t\t\t\t\t\tlet texCtx = tex.adapter.getTexture();\n\n\t\t\t\t\t\ttexture = texCtx;\n\n\t\t\t\t\t\tif (!texture) continue;\n\n\t\t\t\t\t\tspecialsKey.push(5623462, special.index, tex.symbol, tex.innerType, special.access);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (special.type == 'sampler2DArray') {\n\t\t\t\tif (!special.value || !('textures' in special.value)) continue;\n\n\t\t\t\tlet tex = special.value.textures[0];\n\t\t\t\tif (tex) {\n\t\t\t\t\tif (tex.image) {\n\t\t\t\t\t\tlet texture;\n\t\t\t\t\t\tif (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n\t\t\t\t\t\t\tlet texCtx = tex.adapter.getTexture();\n\n\t\t\t\t\t\t\ttexture = texCtx;\n\n\t\t\t\t\t\t\tif (!texture) continue;\n\n\t\t\t\t\t\t\tspecialsKey.push(\n\t\t\t\t\t\t\t\t5653223462,\n\t\t\t\t\t\t\t\tspecial.index,\n\t\t\t\t\t\t\t\ttex.symbol,\n\t\t\t\t\t\t\t\ttex.innerType,\n\t\t\t\t\t\t\t\tspecial.access\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (special.type == 'array' && special.value) {\n\t\t\t\tspecialsKey.push(5523462, special.index);\n\t\t\t\talwaysDirty = true;\n\t\t\t} else if (special.type == 'buffer' && special.value) {\n\t\t\t\tspecialsKey.push(1253462, special.index, special.access, special.value.symbol);\n\t\t\t} else if (special.type == 'atomic' && special.value) {\n\t\t\t\tspecialsKey.push(125342, special.index);\n\t\t\t\talwaysDirty = true;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Unknown special type ${special.type}`);\n\t\t\t}\n\t\t}\n\n\t\tlet specialsDirty = false;\n\n\t\tif (cache) {\n\t\t\tif (cache.specialsKey.length != specialsKey.length) {\n\t\t\t\tspecialsDirty = true;\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < specialsKey.length; i++) {\n\t\t\t\t\tif (cache.specialsKey[i] != specialsKey[i]) {\n\t\t\t\t\t\tspecialsDirty = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialsDirty = true;\n\t\t}\n\n\t\tlet specialEntries: GPUBindGroupEntry[] | undefined = undefined;\n\n\t\tif (cache) {\n\t\t\tspecialEntries = cache.specialEntries;\n\t\t}\n\n\t\tif (alwaysDirty || specialsDirty) {\n\t\t\toutSpecialBuffers = undefined;\n\t\t\tspecialEntries = undefined;\n\t\t}\n\n\t\tif (!bindGroup || !outUniformBuffer || !outSpecialBuffers || !specialEntries) {\n\t\t\tlet outEntries: GPUBindGroupEntry[] = [\n\t\t\t\t{ binding: 0, resource: { buffer: baseUniformBuffer } }\n\t\t\t];\n\n\t\t\tif (!outSpecialBuffers || !specialEntries) {\n\t\t\t\toutSpecialBuffers = [];\n\t\t\t\tspecialEntries = [];\n\t\t\t\tfor (let special of generatedUniforms.special) {\n\t\t\t\t\tif (special.type == 'sampler2D') {\n\t\t\t\t\t\t// TODO: Support samplers\n\t\t\t\t\t\t// fragmentEntries.push({\n\t\t\t\t\t\t// \tbinding: special.index,\n\t\t\t\t\t\t// \tresource: special.value\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tif (!special.value || !('texture' in special.value)) continue;\n\n\t\t\t\t\t\tlet tex = special.value.texture;\n\n\t\t\t\t\t\tif (tex.image) {\n\t\t\t\t\t\t\tlet texture;\n\t\t\t\t\t\t\tif (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n\t\t\t\t\t\t\t\tlet texCtx = tex.adapter.getTexture();\n\n\t\t\t\t\t\t\t\ttexture = texCtx;\n\n\t\t\t\t\t\t\t\tif (!texture) continue;\n\n\t\t\t\t\t\t\t\tlet filterable = tex.innerType == 'uint8';\n\t\t\t\t\t\t\t\tif (special.access == 'sample_write') {\n\t\t\t\t\t\t\t\t\tconst sampler = device.createSampler(\n\t\t\t\t\t\t\t\t\t\tfilterable\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmagFilter: 'linear',\n\t\t\t\t\t\t\t\t\t\t\t\t\tminFilter: 'linear'\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\t\t\t\tresource: texture.createView({\n\t\t\t\t\t\t\t\t\t\t\tformat: tex.adapter.gpuTextureFormat\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 1,\n\t\t\t\t\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 2,\n\n\t\t\t\t\t\t\t\t\t\tresource: tex.adapter.getStorageTexture().createView()\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else if (special.access == 'write') {\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\t\t\t\tresource: texture.createView({\n\t\t\t\t\t\t\t\t\t\t\tformat: tex.adapter.gpuTextureFormat\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 1,\n\n\t\t\t\t\t\t\t\t\t\tresource: tex.adapter.getStorageTexture().createView()\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else if (special.access == 'read' || special.access == 'sample') {\n\t\t\t\t\t\t\t\t\tconst sampler = device.createSampler(\n\t\t\t\t\t\t\t\t\t\tfilterable\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmagFilter: 'linear',\n\t\t\t\t\t\t\t\t\t\t\t\t\tminFilter: 'linear'\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\t\t\t\tresource: texture.createView({\n\t\t\t\t\t\t\t\t\t\t\tformat: tex.adapter.gpuTextureFormat\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 1,\n\t\t\t\t\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (special.type == 'sampler2DArray') {\n\t\t\t\t\t\t// TODO: Support samplers\n\t\t\t\t\t\t// fragmentEntries.push({\n\t\t\t\t\t\t// \tbinding: special.index,\n\t\t\t\t\t\t// \tresource: special.value\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tif (!special.value || !('textures' in special.value)) continue;\n\n\t\t\t\t\t\tif (special.value.textures.$arrTexture) {\n\t\t\t\t\t\t\tif (special.value.textures.$arrTexture instanceof GPUTexture) {\n\t\t\t\t\t\t\t\tlet tex = special.value.textures[0];\n\t\t\t\t\t\t\t\tif (!tex) return;\n\t\t\t\t\t\t\t\tlet texture: GPUTexture = special.value.textures.$arrTexture as any;\n\n\t\t\t\t\t\t\t\tlet filterable = tex.innerType == 'uint8';\n\t\t\t\t\t\t\t\tif (special.access == 'sample_write') {\n\t\t\t\t\t\t\t\t\tconst sampler = device.createSampler(\n\t\t\t\t\t\t\t\t\t\tfilterable\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmagFilter: 'linear',\n\t\t\t\t\t\t\t\t\t\t\t\t\tminFilter: 'linear'\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\t\t\t\tresource: texture.createView({\n\t\t\t\t\t\t\t\t\t\t\tformat: tex.adapter.gpuTextureFormat\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 1,\n\t\t\t\t\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 2,\n\n\t\t\t\t\t\t\t\t\t\tresource: tex.adapter.getStorageTexture().createView()\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tthrow new Error('Writing to texture arrays is not supported yet');\n\t\t\t\t\t\t\t\t} else if (special.access == 'write') {\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\t\t\t\tresource: texture.createView({\n\t\t\t\t\t\t\t\t\t\t\tformat: tex.adapter.gpuTextureFormat\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 1,\n\n\t\t\t\t\t\t\t\t\t\tresource: tex.adapter.getStorageTexture().createView()\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tthrow new Error('Writing to texture arrays is not supported yet');\n\t\t\t\t\t\t\t\t} else if (special.access == 'read' || special.access == 'sample') {\n\t\t\t\t\t\t\t\t\tconst sampler = device.createSampler(\n\t\t\t\t\t\t\t\t\t\tfilterable\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmagFilter: 'linear',\n\t\t\t\t\t\t\t\t\t\t\t\t\tminFilter: 'linear'\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\t\t\t\tresource: texture.createView({\n\t\t\t\t\t\t\t\t\t\t\tformat: tex.adapter.gpuTextureFormat,\n\t\t\t\t\t\t\t\t\t\t\tarrayLayerCount: special.value.textures.length,\n\t\t\t\t\t\t\t\t\t\t\tbaseArrayLayer: 0,\n\t\t\t\t\t\t\t\t\t\t\tdimension: '2d-array'\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\t\t\t\tbinding: special.index + 1,\n\t\t\t\t\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (special.type == 'array' && special.value) {\n\t\t\t\t\t\tlet buffer = device.createBuffer({\n\t\t\t\t\t\t\tsize: special.value.size,\n\t\t\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t\t\t\t\t\t});\n\t\t\t\t\t\toutSpecialBuffers.push(buffer);\n\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\tresource: { buffer }\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (special.type == 'buffer' && special.value) {\n\t\t\t\t\t\tlet buf = this.getOrCreateBuffer(special.value, this.genericBufferFlags());\n\n\t\t\t\t\t\toutSpecialBuffers.push(buf);\n\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\tresource: { buffer: buf }\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (special.type == 'atomic' && special.value) {\n\t\t\t\t\t\tlet buf = device.createBuffer({\n\t\t\t\t\t\t\tsize: 4,\n\t\t\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\toutSpecialBuffers.push(buf);\n\t\t\t\t\t\tspecialEntries.push({\n\t\t\t\t\t\t\tbinding: special.index,\n\n\t\t\t\t\t\t\tresource: {\n\t\t\t\t\t\t\t\tbuffer: buf\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(`Unknown special type ${special.type}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet needsUniformWrite = false;\n\t\t\tif (!outUniformBuffer) {\n\t\t\t\toutUniformBuffer = device.createBuffer({\n\t\t\t\t\tsize: generatedUniforms.size,\n\t\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t\t\t});\n\t\t\t\tneedsUniformWrite = true;\n\t\t\t}\n\n\t\t\tif (generatedUniforms.size > 0) {\n\t\t\t\toutEntries.push({ binding: 1, resource: { buffer: outUniformBuffer } });\n\n\t\t\t\tif (needsUniformWrite)\n\t\t\t\t\tdevice.queue.writeBuffer(outUniformBuffer, 0, generatedUniforms.data);\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < specialEntries.length; i++) {\n\t\t\t\toutEntries.push(specialEntries[i]);\n\t\t\t}\n\n\t\t\tlet bufCounter = 0;\n\t\t\tfor (let i = 0; i < generatedUniforms.special.length; i++) {\n\t\t\t\tlet special = generatedUniforms.special[i];\n\t\t\t\tif (special.type == 'array' && special.value) {\n\t\t\t\t\tdevice.queue.writeBuffer(outSpecialBuffers[bufCounter++], 0, special.value.buffer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbindGroup = device.createBindGroup({\n\t\t\t\tlayout: bindGroupLayout,\n\t\t\t\tentries: outEntries\n\t\t\t});\n\t\t}\n\n\t\tif (cache) {\n\t\t\tcache.key = key;\n\t\t\tcache.bindGroupLayout = bindGroupLayout;\n\t\t\tcache.bindGroup = bindGroup;\n\t\t\tcache.uniformBuffer = outUniformBuffer;\n\t\t\tcache.specialBuffers = outSpecialBuffers;\n\t\t\tcache.cachedUniforms = generatedUniforms.data;\n\n\t\t\tcache.specialsKey = specialsKey;\n\t\t\tcache.specialEntries = specialEntries;\n\t\t} else {\n\t\t\tshader.webgpuUniformCache.set(key, {\n\t\t\t\tkey,\n\t\t\t\tbindGroupLayout,\n\t\t\t\tbindGroup,\n\t\t\t\tuniformBuffer: outUniformBuffer,\n\t\t\t\tspecialBuffers: outSpecialBuffers,\n\t\t\t\tcachedUniforms: generatedUniforms.data,\n\t\t\t\tspecialsKey,\n\t\t\t\tspecialEntries\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tbindGroupLayout,\n\t\t\tbindGroup,\n\t\t\tuniformBuffer: outUniformBuffer,\n\t\t\tspecialBuffers: outSpecialBuffers,\n\t\t\tcommands\n\t\t};\n\t}\n\n\twriteStructuredBuffer(\n\t\tstructure: UniformValueType,\n\t\traw: any,\n\t\tbuffer: ArrayBuffer,\n\t\toffset: number = 0\n\t) {\n\t\tlet rootObj: { [key: string]: any } = {\n\t\t\tval: raw\n\t\t};\n\t\tlet queue: [UniformKeyValuePair, any, number | null][] = [[['val', structure], rootObj, null]];\n\n\t\twriteBufferStructure(queue, rootObj, buffer, offset);\n\t}\n\n\treadStructuredBuffer(structure: UniformValueType, buffer: ArrayBuffer, offset: number = 0): any {\n\t\tif (structure.type == 'array') {\n\t\t\tlet arr = [];\n\t\t\tif ('staticSize' in structure && structure.staticSize != null) {\n\t\t\t\tlet elSize = getValueSize(structure.element);\n\t\t\t\tfor (let i = 0; i < structure.staticSize; i++) {\n\t\t\t\t\tarr.push(this.readStructuredBuffer(structure.element, buffer, offset));\n\t\t\t\t\toffset += elSize / 4;\n\t\t\t\t}\n\t\t\t\treturn arr;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Unable to read dynamic array`);\n\t\t\t}\n\t\t} else if (structure.type == 'primitive') {\n\t\t\tlet uview = new Uint32Array(buffer);\n\t\t\tlet iview = new Int32Array(buffer);\n\t\t\tlet fview = new Float32Array(buffer);\n\t\t\tif (structure.name == 'uint4') {\n\t\t\t\treturn [uview[offset], uview[offset + 1], uview[offset + 2], uview[offset + 3]];\n\t\t\t} else if (structure.name == 'int4') {\n\t\t\t\treturn [iview[offset], iview[offset + 1], iview[offset + 2], iview[offset + 3]];\n\t\t\t} else if (structure.name == 'float4') {\n\t\t\t\treturn [fview[offset], fview[offset + 1], fview[offset + 2], fview[offset + 3]];\n\t\t\t} else if (structure.name == 'uint3') {\n\t\t\t\treturn [uview[offset], uview[offset + 1], uview[offset + 2]];\n\t\t\t} else if (structure.name == 'int3') {\n\t\t\t\treturn [iview[offset], iview[offset + 1], iview[offset + 2]];\n\t\t\t} else if (structure.name == 'float3') {\n\t\t\t\treturn [fview[offset], fview[offset + 1], fview[offset + 2]];\n\t\t\t} else if (structure.name == 'uint2') {\n\t\t\t\treturn [uview[offset], uview[offset + 1]];\n\t\t\t} else if (structure.name == 'int2') {\n\t\t\t\treturn [iview[offset], iview[offset + 1]];\n\t\t\t} else if (structure.name == 'float2') {\n\t\t\t\treturn [fview[offset], fview[offset + 1]];\n\t\t\t} else if (structure.name == 'uint') {\n\t\t\t\treturn uview[offset];\n\t\t\t} else if (structure.name == 'int') {\n\t\t\t\treturn iview[offset];\n\t\t\t} else if (structure.name == 'float') {\n\t\t\t\treturn fview[offset];\n\t\t\t} else if (structure.name == 'bool') {\n\t\t\t\treturn uview[offset] == 1;\n\t\t\t} else if (structure.name == 'float2x2') {\n\t\t\t\treturn (window as any).applyMatrix2x2Methods([\n\t\t\t\t\t[fview[offset], fview[offset + 1]],\n\t\t\t\t\t[fview[offset + 2], fview[offset + 3]]\n\t\t\t\t]);\n\t\t\t} else if (structure.name == 'float3x3') {\n\t\t\t\treturn (window as any).applyMatrix3x3Methods([\n\t\t\t\t\t[fview[offset], fview[offset + 1], fview[offset + 2]],\n\t\t\t\t\t[fview[offset + 3], fview[offset + 4], fview[offset + 5]],\n\t\t\t\t\t[fview[offset + 6], fview[offset + 7], fview[offset + 8]]\n\t\t\t\t]);\n\t\t\t} else if (structure.name == 'float4x4') {\n\t\t\t\treturn (window as any).applyMatrix4x4Methods([\n\t\t\t\t\t[fview[offset], fview[offset + 1], fview[offset + 2], fview[offset + 3]],\n\t\t\t\t\t[fview[offset + 4], fview[offset + 5], fview[offset + 6], fview[offset + 7]],\n\t\t\t\t\t[fview[offset + 8], fview[offset + 9], fview[offset + 10], fview[offset + 11]],\n\t\t\t\t\t[fview[offset + 12], fview[offset + 13], fview[offset + 14], fview[offset + 15]]\n\t\t\t\t]);\n\t\t\t} else if (structure.name == 'atomic') {\n\t\t\t\tif (structure.element.type == 'primitive') {\n\t\t\t\t\tif (structure.element.name == 'uint') {\n\t\t\t\t\t\treturn (window as any).makeAtomic(uview[offset]);\n\t\t\t\t\t} else if (structure.element.name == 'int') {\n\t\t\t\t\t\treturn (window as any).makeAtomic(iview[offset]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Unable to convert primitive type ${structure.name}`);\n\t\t\t}\n\t\t} else if (structure.type == 'struct') {\n\t\t\tlet out: any = {};\n\n\t\t\tfor (let field of structure.fields) {\n\t\t\t\tlet size = getValueSize(field[1]);\n\t\t\t\tout[field[0]] = this.readStructuredBuffer(field[1], buffer, offset / 4);\n\t\t\t\toffset += size;\n\t\t\t}\n\n\t\t\tlet clazz = (window as any).__shadeup_structs[structure.name].struct;\n\t\t\tif (clazz) {\n\t\t\t\treturn new clazz(out);\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Unable to convert type ${structure.type}`);\n\t\t}\n\t}\n\n\tbuildComputePipeline(\n\t\tshader: GenericShader,\n\t\tcomputeUniform: GeneratedUniforms\n\t): ComputePipelinePayload | undefined {\n\t\tconst { device } = this.getGPU();\n\t\tlet commands: PipelinePreDispatchCommands = [];\n\t\tconst baseUniformValues = this.baseUniformValues;\n\t\tconst baseUniformBufferSize = this.baseUniformBufferSize;\n\t\tconst baseUniformBuffer = device.createBuffer({\n\t\t\tsize: baseUniformBufferSize,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\n\t\tconst compute = this.buildUniformsForPipeline(\n\t\t\tshader,\n\t\t\tcomputeUniform,\n\t\t\tbaseUniformBuffer,\n\t\t\tGPUShaderStage.COMPUTE\n\t\t);\n\n\t\tif (!compute) {\n\t\t\treturn;\n\t\t}\n\n\t\tcommands = compute.commands;\n\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tbindGroupLayouts: [compute.bindGroupLayout]\n\t\t});\n\n\t\tthis.startDispatch();\n\t\tlet pipeline = device.createComputePipeline({\n\t\t\tlabel: 'compute pipeline',\n\t\t\tlayout: pipelineLayout,\n\t\t\tcompute: {\n\t\t\t\tmodule: shader.payload,\n\t\t\t\tentryPoint: 'main'\n\t\t\t}\n\t\t});\n\t\tthis.endDispatch();\n\t\treturn {\n\t\t\tpipeline,\n\t\t\tbindGroup: compute.bindGroup,\n\t\t\tbaseUniformBuffer,\n\t\t\tuniformBuffer: compute.uniformBuffer,\n\t\t\tspecialBuffers: compute.specialBuffers,\n\t\t\tcommands\n\t\t};\n\t}\n\n\tcachedPipelines: Map<string, GPURenderPipeline> = new Map();\n\tcachedPipelineLayouts: Map<string, GPUPipelineLayout> = new Map();\n\n\tsetupDrawPipeline(\n\t\tshaders: { fragment: GenericShader; vertex: GenericShader },\n\t\tfragmentUniform: GeneratedUniforms,\n\t\tvertexUniform: GeneratedUniforms,\n\t\toptions: DrawOptions,\n\t\tignoreVertexLayout: boolean = false\n\t): DrawPipelinePayload | undefined {\n\t\tconst { device } = this.getGPU();\n\t\tif (!this.baseUniformBuffer) {\n\t\t\tthrow new Error('Base uniform buffer not initialized');\n\t\t}\n\n\t\tlet commands: PipelinePreDispatchCommands = [];\n\n\t\tconst fragment = this.buildUniformsForPipeline(\n\t\t\tshaders.fragment,\n\t\t\tfragmentUniform,\n\t\t\tthis.baseUniformBuffer,\n\t\t\tGPUShaderStage.FRAGMENT\n\t\t);\n\n\t\tconst vertex = this.buildUniformsForPipeline(\n\t\t\tshaders.vertex,\n\t\t\tvertexUniform,\n\t\t\tthis.baseUniformBuffer,\n\t\t\tGPUShaderStage.VERTEX\n\t\t);\n\n\t\tif (!fragment || !vertex) {\n\t\t\treturn;\n\t\t}\n\n\t\tcommands.push(...fragment.commands);\n\t\tcommands.push(...vertex.commands);\n\n\t\tlet pipelineLayoutKey = `${shaders.fragment.uniqueSourceKey}_${fragment.bindGroupLayout.$__gpuKey}_${shaders.vertex.uniqueSourceKey}_${vertex.bindGroupLayout.$__gpuKey}`;\n\n\t\tlet pipelineLayout: GPUPipelineLayout;\n\n\t\tif (this.cachedPipelineLayouts.has(pipelineLayoutKey)) {\n\t\t\tpipelineLayout = this.cachedPipelineLayouts.get(pipelineLayoutKey)!;\n\t\t} else {\n\t\t\tpipelineLayout = device.createPipelineLayout({\n\t\t\t\tbindGroupLayouts: [fragment.bindGroupLayout, vertex.bindGroupLayout]\n\t\t\t});\n\t\t\tthis.cachedPipelineLayouts.set(pipelineLayoutKey, pipelineLayout);\n\t\t}\n\n\t\tif (!this.depthTexture) {\n\t\t\tthrow new Error('Depth texture not initialized');\n\t\t}\n\n\t\tlet pipelineKey =\n\t\t\tpipelineLayoutKey +\n\t\t\tthis.depthTexture.format +\n\t\t\toptions.depthTest +\n\t\t\toptions.depthFormat +\n\t\t\toptions.depthOnly +\n\t\t\toptions.backfaceCulling +\n\t\t\toptions.depthCompare +\n\t\t\toptions.attachments?.length;\n\t\tlet pipeline: GPURenderPipeline;\n\n\t\tif (this.cachedPipelines.has(pipelineKey)) {\n\t\t\tpipeline = this.cachedPipelines.get(pipelineKey)!;\n\t\t} else {\n\t\t\tconst generateTarget = (adap: WebGPUAdapter) => {\n\t\t\t\treturn {\n\t\t\t\t\tformat: adap.headless ? adap.gpuTextureFormat : 'rgba8unorm',\n\t\t\t\t\tblend: FormatCapabilities[adap.gpuTextureFormat].blendable\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\t\t\tsrcFactor: 'src-alpha',\n\t\t\t\t\t\t\t\t\tdstFactor: 'one-minus-src-alpha',\n\t\t\t\t\t\t\t\t\toperation: 'add'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t\tsrcFactor: 'src-alpha',\n\t\t\t\t\t\t\t\t\tdstFactor: 'one-minus-src-alpha',\n\t\t\t\t\t\t\t\t\toperation: 'add'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t  }\n\t\t\t\t\t\t: undefined\n\t\t\t\t} as GPUColorTargetState;\n\t\t\t};\n\n\t\t\tconst pipelineDescriptor = {\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaders.vertex.payload,\n\t\t\t\t\tentryPoint: 'main',\n\t\t\t\t\tbuffers: ignoreVertexLayout ? [] : vertexLayout\n\t\t\t\t},\n\n\t\t\t\t...(options.depthOnly\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tfragment: {\n\t\t\t\t\t\t\t\tmodule: shaders.fragment.payload,\n\t\t\t\t\t\t\t\tentryPoint: 'main',\n\t\t\t\t\t\t\t\ttargets:\n\t\t\t\t\t\t\t\t\toptions.attachments && options.attachments.length > 0\n\t\t\t\t\t\t\t\t\t\t? options.attachments.map((att) => generateTarget(att.adapter as WebGPUAdapter))\n\t\t\t\t\t\t\t\t\t\t: [generateTarget(this)]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t  }),\n\n\t\t\t\tprimitive: {\n\t\t\t\t\ttopology: 'triangle-list',\n\t\t\t\t\tcullMode: options.backfaceCulling ? 'back' : 'none'\n\t\t\t\t},\n\t\t\t\t...(options.depthTest\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tdepthStencil: {\n\t\t\t\t\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\t\t\t\t\tdepthCompare: options.depthCompare ?? 'less',\n\t\t\t\t\t\t\t\tformat: options.depthFormat ?? 'depth24plus'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t  }\n\t\t\t\t\t: {}),\n\n\t\t\t\tlayout: pipelineLayout\n\t\t\t} as GPURenderPipelineDescriptor;\n\t\t\tthis.startDispatch();\n\t\t\tpipeline = device.createRenderPipeline(pipelineDescriptor);\n\t\t\tthis.endDispatch();\n\n\t\t\tthis.cachedPipelines.set(pipelineKey, pipeline);\n\t\t}\n\n\t\tlet drawData = {\n\t\t\tpipeline,\n\t\t\tbindGroupFragment: fragment.bindGroup,\n\t\t\tbindGroupVertex: vertex.bindGroup,\n\t\t\tbaseUniformBuffer: this.baseUniformBuffer,\n\t\t\tvertexUniformBuffer: vertex.uniformBuffer,\n\t\t\tfragmentUniformBuffer: fragment.uniformBuffer,\n\t\t\tspecialBuffersFragment: fragment.specialBuffers,\n\t\t\tspecialBuffersVertex: vertex.specialBuffers,\n\t\t\tcommands\n\t\t};\n\n\t\treturn drawData;\n\t}\n\n\tbuildDrawPipeline(\n\t\tshaders: { fragment: GenericShader; vertex: GenericShader },\n\t\tfragmentUniform: GeneratedUniforms,\n\t\tvertexUniform: GeneratedUniforms,\n\t\toptions: DrawOptions,\n\t\tignoreVertexLayout: boolean = false\n\t): DrawPipelinePayload | undefined {\n\t\tconst { device } = this.getGPU();\n\t\tlet commands: PipelinePreDispatchCommands = [];\n\t\tconst baseUniformValues = this.baseUniformValues;\n\t\tconst baseUniformBufferSize = this.baseUniformBufferSize;\n\t\tconst baseUniformBuffer = device.createBuffer({\n\t\t\tsize: baseUniformBufferSize,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\n\t\tconst fragment = this.buildUniformsForPipeline(\n\t\t\tshaders.fragment,\n\t\t\tfragmentUniform,\n\t\t\tbaseUniformBuffer,\n\t\t\tGPUShaderStage.FRAGMENT\n\t\t);\n\n\t\tconst vertex = this.buildUniformsForPipeline(\n\t\t\tshaders.vertex,\n\t\t\tvertexUniform,\n\t\t\tbaseUniformBuffer,\n\t\t\tGPUShaderStage.VERTEX\n\t\t);\n\n\t\tif (!fragment || !vertex) {\n\t\t\treturn;\n\t\t}\n\n\t\tcommands.push(...fragment.commands);\n\t\tcommands.push(...vertex.commands);\n\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tbindGroupLayouts: [fragment.bindGroupLayout, vertex.bindGroupLayout]\n\t\t});\n\n\t\tif (!this.depthTexture) {\n\t\t\tthrow new Error('Depth texture not initialized');\n\t\t}\n\t\tconst generateTarget = (adap: WebGPUAdapter) => {\n\t\t\treturn {\n\t\t\t\tformat: adap.headless ? adap.gpuTextureFormat : 'rgba8unorm',\n\t\t\t\tblend: FormatCapabilities[adap.gpuTextureFormat].blendable\n\t\t\t\t\t? {\n\t\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\t\tsrcFactor: 'src-alpha',\n\t\t\t\t\t\t\t\tdstFactor: 'one-minus-src-alpha',\n\t\t\t\t\t\t\t\toperation: 'add'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\tsrcFactor: 'src-alpha',\n\t\t\t\t\t\t\t\tdstFactor: 'one-minus-src-alpha',\n\t\t\t\t\t\t\t\toperation: 'add'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t  }\n\t\t\t\t\t: undefined\n\t\t\t} as GPUColorTargetState;\n\t\t};\n\t\tconst pipelineDescriptor = {\n\t\t\tvertex: {\n\t\t\t\tmodule: shaders.vertex.payload,\n\t\t\t\tentryPoint: 'main',\n\t\t\t\tbuffers: ignoreVertexLayout ? [] : vertexLayout\n\t\t\t},\n\n\t\t\t...(options.depthOnly\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tfragment: {\n\t\t\t\t\t\t\tmodule: shaders.fragment.payload,\n\t\t\t\t\t\t\tentryPoint: 'main',\n\t\t\t\t\t\t\ttargets:\n\t\t\t\t\t\t\t\toptions.attachments && options.attachments.length > 0\n\t\t\t\t\t\t\t\t\t? options.attachments.map((att) => generateTarget(att.adapter as WebGPUAdapter))\n\t\t\t\t\t\t\t\t\t: [generateTarget(this)]\n\t\t\t\t\t\t}\n\t\t\t\t  }),\n\n\t\t\tprimitive: {\n\t\t\t\ttopology: 'triangle-list',\n\t\t\t\tcullMode: 'back'\n\t\t\t},\n\t\t\t...(options.depthTest\n\t\t\t\t? {\n\t\t\t\t\t\tdepthStencil: {\n\t\t\t\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\t\t\t\tdepthCompare: 'less',\n\t\t\t\t\t\t\tformat: options.depthFormat ?? 'depth24plus'\n\t\t\t\t\t\t}\n\t\t\t\t  }\n\t\t\t\t: {}),\n\n\t\t\tlayout: pipelineLayout\n\t\t} as GPURenderPipelineDescriptor;\n\t\tthis.startDispatch();\n\t\tlet pipeline = device.createRenderPipeline(pipelineDescriptor);\n\t\tthis.endDispatch();\n\n\t\tlet drawData = {\n\t\t\tpipeline,\n\t\t\tbindGroupFragment: fragment.bindGroup,\n\t\t\tbindGroupVertex: vertex.bindGroup,\n\t\t\tbaseUniformBuffer,\n\t\t\tvertexUniformBuffer: vertex.uniformBuffer,\n\t\t\tfragmentUniformBuffer: fragment.uniformBuffer,\n\t\t\tspecialBuffersFragment: fragment.specialBuffers,\n\t\t\tspecialBuffersVertex: vertex.specialBuffers,\n\t\t\tcommands\n\t\t};\n\n\t\treturn drawData;\n\t}\n\n\tgetTexture(): GPUTexture {\n\t\tif (!this.headless) {\n\t\t\tif (this.ctx) {\n\t\t\t\treturn this.ctx.getCurrentTexture();\n\t\t\t} else {\n\t\t\t\tthrow new Error('No context');\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.texture as GPUTexture;\n\t\t}\n\t}\n\n\tgetStorageTexture(): GPUTexture {\n\t\tconst { device } = this.getGPU();\n\t\tif (!this.storageTexture) {\n\t\t\tthis.startDispatch();\n\t\t\tthis.storageTexture = device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth: this.headlessWidth,\n\t\t\t\t\theight: this.headlessHeight\n\t\t\t\t},\n\t\t\t\tformat: this.gpuTextureFormat,\n\t\t\t\tdimension: '2d',\n\t\t\t\tviewFormats: [this.gpuTextureFormat],\n\t\t\t\tusage:\n\t\t\t\t\tGPUTextureUsage.RENDER_ATTACHMENT |\n\t\t\t\t\tGPUTextureUsage.STORAGE_BINDING |\n\t\t\t\t\tGPUTextureUsage.COPY_SRC |\n\t\t\t\t\tGPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tthis.endDispatch();\n\t\t}\n\n\t\treturn this.storageTexture;\n\t}\n\n\tcommandQueue: ((encoder: GPUCommandEncoder) => void | undefined | (() => void | undefined))[] =\n\t\t[];\n\n\tcleanupCommands: ((() => void | undefined | (() => void | undefined)) & { $counter: number })[] =\n\t\t[];\n\n\timmediate = false;\n\tenqueueCommand(\n\t\tcommand: (encoder: GPUCommandEncoder) => void | undefined | (() => void | undefined),\n\t\timmediate = false\n\t) {\n\t\tif (this.immediate || immediate) {\n\t\t\tconst { device } = this.getGPU();\n\t\t\tthis.startDispatch();\n\t\t\tlet encoder = device.createCommandEncoder();\n\t\t\tlet result = command(encoder);\n\t\t\tdevice.queue.submit([encoder.finish()]);\n\t\t\tif (result) {\n\t\t\t\tresult();\n\t\t\t}\n\t\t\tthis.endDispatch();\n\t\t} else {\n\t\t\tthis.commandQueue.push(command);\n\t\t}\n\t}\n\n\tenqueueCleanupCommand(command: () => void | undefined | (() => void | undefined)) {\n\t\tlet cmd = command as any;\n\t\tcmd.$counter = 10;\n\t\tthis.cleanupCommands.push(cmd);\n\t}\n\n\tdispatchCompute(dispatch: ShaderDispatch) {\n\t\tthis.trace('enqueueCompute', { dispatch });\n\t\tconst { device } = this.getGPU();\n\n\t\tif (!dispatch.computeShader) {\n\t\t\tthrow new Error('Dispatch is missing compute shader');\n\t\t}\n\n\t\t// this.startDispatch();\n\n\t\tlet cacheKey = `${dispatch.computeShader.uniqueSourceKey}`;\n\t\tconst computeUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.computeShader);\n\t\tlet output = this.buildComputePipeline(dispatch.computeShader, computeUniform);\n\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\t// const encoder = device.createCommandEncoder({ label: 'compute builtin encoder' });\n\t\t\tif (output)\n\t\t\t\tfor (let command of output.commands) {\n\t\t\t\t\tcommand(encoder);\n\t\t\t\t}\n\n\t\t\tconst pass = encoder.beginComputePass({ label: 'compute builtin pass' });\n\t\t\tlet baseUniformValues = this.baseUniformValues;\n\n\t\t\tlet baseUniformBufferSize = this.baseUniformBufferSize;\n\n\t\t\tbaseUniformValues.set([0, 0], 0);\n\n\t\t\tlet computeData: ComputePipelinePayload;\n\n\t\t\tif (CACHE_PIPELINES) {\n\t\t\t\tlet cacheValue = this.pipelineCache.get(cacheKey);\n\n\t\t\t\tif (!cacheValue) {\n\t\t\t\t\tlet output = this.buildComputePipeline(dispatch.computeShader, computeUniform);\n\t\t\t\t\tif (!output) return;\n\t\t\t\t\tcomputeData = output;\n\t\t\t\t\tthis.pipelineCache.set(cacheKey, computeData);\n\t\t\t\t} else {\n\t\t\t\t\tcomputeData = cacheValue as ComputePipelinePayload;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!output) return;\n\t\t\t\tcomputeData = output;\n\t\t\t}\n\n\t\t\tlet { pipeline, bindGroup, baseUniformBuffer, uniformBuffer, specialBuffers } = computeData;\n\n\t\t\tdevice.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n\n\t\t\tdevice.queue.writeBuffer(uniformBuffer, 0, computeUniform.data);\n\t\t\tlet bufCounter = 0;\n\t\t\tfor (let i = 0; i < computeUniform.special.length; i++) {\n\t\t\t\tlet special = computeUniform.special[i];\n\t\t\t\tif (special.type == 'array' && special.value) {\n\t\t\t\t\tthis.trace('writeArray', { special });\n\t\t\t\t\tdevice.queue.writeBuffer(specialBuffers[bufCounter++], 0, special.value.buffer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpass.setPipeline(pipeline);\n\t\t\tpass.setBindGroup(0, bindGroup);\n\t\t\tif (dispatch.indirectBuffer) {\n\t\t\t\tpass.dispatchWorkgroupsIndirect(\n\t\t\t\t\tthis.getOrCreateBuffer(dispatch.indirectBuffer, GPUBufferUsage.INDIRECT),\n\t\t\t\t\tdispatch.indirectOffset\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpass.dispatchWorkgroups(...dispatch.computeCount);\n\t\t\t}\n\t\t\tthis.trace('dispatchCompute', { dispatch });\n\t\t\tpass.end();\n\t\t});\n\n\t\t// device.queue.submit([encoder.finish()]);\n\n\t\t// this.endDispatch();\n\t}\n\n\twriteSpecialBuffer(buffer: GPUBuffer, data: Float32Array) {\n\t\tconst { device } = this.getGPU();\n\t\tthis.startDispatch();\n\t\tdevice.queue.writeBuffer(buffer, 0, data);\n\t\tthis.endDispatch();\n\t}\n\n\tbeforeScreenDraw() {\n\t\tif (!this.clearEnqueued) {\n\t\t\tthis.enqueueCommand((encoder) => {\n\t\t\t\tconst { device } = this.getGPU();\n\t\t\t\tif (!this.depthTexture) return;\n\t\t\t\tconst textureView = this.getTexture().createView();\n\t\t\t\tif (this.gpuTextureFormat == 'depth24plus' || this.gpuTextureFormat == 'depth32float') {\n\t\t\t\t\tconst clearPassDesc: GPURenderPassDescriptor = {\n\t\t\t\t\t\tcolorAttachments: [],\n\t\t\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\t\t\tview: textureView,\n\t\t\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\t\t\tdepthLoadOp: 'clear',\n\t\t\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tconst passEncoder = encoder.beginRenderPass(clearPassDesc);\n\t\t\t\t\tpassEncoder.end();\n\t\t\t\t} else {\n\t\t\t\t\tconst clearPassDesc: GPURenderPassDescriptor = {\n\t\t\t\t\t\tcolorAttachments: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tview: textureView,\n\t\t\t\t\t\t\t\tclearValue: { r: 0, g: 0, b: 0, a: 0 },\n\n\t\t\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\t\t\tloadOp: 'clear'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\t\t\tview: this.depthTexture.createView(),\n\t\t\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\t\t\tdepthLoadOp: 'clear',\n\t\t\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tconst passEncoder = encoder.beginRenderPass(clearPassDesc);\n\t\t\t\t\tpassEncoder.end();\n\t\t\t\t}\n\n\t\t\t\tthis.clearEnqueued = false;\n\t\t\t});\n\t\t\tthis.clearEnqueued = true;\n\t\t}\n\t}\n\n\tdispatchDraw(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tthis.trace('enqueueDraw', { dispatch, options });\n\t\tconst { device } = this.getGPU();\n\n\t\tif (!dispatch.vertexShader || !dispatch.fragmentShader) {\n\t\t\tthrow new Error('Dispatch is missing vertex or fragment shader');\n\t\t}\n\n\t\tif (!dispatch.geometry && !dispatch.indirectBuffer) {\n\t\t\tthrow new Error('Dispatch is missing geometry');\n\t\t}\n\n\t\tif (!this.depthTexture) {\n\t\t\tthrow new Error('Depth texture not created');\n\t\t}\n\n\t\tthis.startDispatch();\n\n\t\tif (dispatch.overrideDepth) {\n\t\t\tif (dispatch.overrideDepth.adapter instanceof WebGPUAdapter) {\n\t\t\t\tdispatch.overrideDepth.adapter.flush();\n\t\t\t}\n\t\t}\n\n\t\tlet fragment = dispatch.fragmentShader;\n\t\tlet vertex = dispatch.vertexShader;\n\n\t\tconst fragmentUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.fragmentShader);\n\t\tconst vertexUniform = generateUniforms(dispatch.vertexUniforms, dispatch.vertexShader);\n\t\tlet cacheKey = `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n\t\tlet depthTex = dispatch.overrideDepth\n\t\t\t? (dispatch.overrideDepth.adapter as WebGPUAdapter).getTexture()\n\t\t\t: this.depthTexture;\n\t\tlet output = this.setupDrawPipeline(\n\t\t\t{\n\t\t\t\tfragment,\n\t\t\t\tvertex\n\t\t\t},\n\t\t\tfragmentUniform,\n\t\t\tvertexUniform,\n\t\t\t{\n\t\t\t\t...options,\n\t\t\t\tdepthFormat: depthTex.format,\n\t\t\t\tdepthOnly: dispatch.depthOnly,\n\t\t\t\tattachments: dispatch.attachments ?? [],\n\t\t\t\tdepthCompare: dispatch.depthCompare == 'auto' ? 'less' : dispatch.depthCompare,\n\t\t\t\tbackfaceCulling: dispatch.backfaceCulling\n\t\t\t}\n\t\t);\n\n\t\tthis.beforeScreenDraw();\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tif (output)\n\t\t\t\tfor (let command of output.commands) {\n\t\t\t\t\tcommand(encoder);\n\t\t\t\t}\n\n\t\t\tlet attachments = [] as GPURenderPassColorAttachment[];\n\t\t\tif (!dispatch.depthOnly) {\n\t\t\t\tif (!dispatch.attachments) {\n\t\t\t\t\tattachments.push({\n\t\t\t\t\t\tview: this.getTexture().createView(),\n\n\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\tloadOp: 'load'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfor (let attachment of dispatch.attachments) {\n\t\t\t\t\t\tif (attachment.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\tlet view = attachment.adapter.getTexture().createView();\n\n\t\t\t\t\t\t\tattachments.push({\n\t\t\t\t\t\t\t\tview,\n\n\t\t\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\t\t\tloadOp: 'load'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet passDescriptor: GPURenderPassDescriptor = {\n\t\t\t\tcolorAttachments: attachments,\n\t\t\t\t...(options.depthTest\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\t\t\t\tview: depthTex.createView(),\n\t\t\t\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\t\t\t\tdepthLoadOp: 'load',\n\t\t\t\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t  }\n\t\t\t\t\t: {})\n\t\t\t};\n\t\t\tconst pass = encoder.beginRenderPass(passDescriptor);\n\t\t\tlet myTex = this.getTexture();\n\t\t\t// pass.setViewport(0, 0, myTex.width, myTex.height, 0, 1);\n\n\t\t\tlet baseUniformValues = this.baseUniformValues;\n\t\t\tlet baseUniformBufferSize = this.baseUniformBufferSize;\n\t\t\tbaseUniformValues.set([myTex.width, myTex.height], 0);\n\n\t\t\tlet drawData: DrawPipelinePayload;\n\n\t\t\tif (!output) return;\n\t\t\tdrawData = output;\n\n\t\t\tlet {\n\t\t\t\tpipeline,\n\t\t\t\tbindGroupFragment,\n\t\t\t\tbindGroupVertex,\n\t\t\t\tbaseUniformBuffer,\n\t\t\t\tvertexUniformBuffer,\n\t\t\t\tfragmentUniformBuffer,\n\t\t\t\tspecialBuffersFragment,\n\t\t\t\tspecialBuffersVertex\n\t\t\t} = drawData;\n\n\t\t\tpass.setPipeline(pipeline);\n\n\t\t\tdevice.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n\n\t\t\t// device.queue.writeBuffer(fragmentUniformBuffer, 0, fragmentUniform.data);\n\n\t\t\t// let bufCounterFrag = 0;\n\t\t\t// for (let i = 0; i < fragmentUniform.special.length; i++) {\n\t\t\t// \tlet special = fragmentUniform.special[i];\n\t\t\t// \tif (special.type == 'array' && special.value) {\n\t\t\t// \t\tdevice.queue.writeBuffer(\n\t\t\t// \t\t\tspecialBuffersFragment[bufCounterFrag++],\n\t\t\t// \t\t\t0,\n\t\t\t// \t\t\tspecial.value.buffer\n\t\t\t// \t\t);\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\t// device.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n\n\t\t\t// let bufCounterVert = 0;\n\t\t\t// for (let i = 0; i < vertexUniform.special.length; i++) {\n\t\t\t// \tlet special = vertexUniform.special[i];\n\t\t\t// \tif (special.type == 'array' && special.value) {\n\t\t\t// \t\tdevice.queue.writeBuffer(specialBuffersVertex[bufCounterVert++], 0, special.value.buffer);\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\tpass.setBindGroup(0, bindGroupFragment);\n\t\t\tpass.setBindGroup(1, bindGroupVertex);\n\n\t\t\tif (dispatch.indirectBuffer) {\n\t\t\t\tif (dispatch.geometry) {\n\t\t\t\t\tlet meshData = this.getOrCreateMeshData(dispatch.geometry);\n\t\t\t\t\tpass.setVertexBuffer(0, meshData.vertexBuffer);\n\t\t\t\t\tpass.setIndexBuffer(meshData.indexBuffer, 'uint32');\n\t\t\t\t}\n\t\t\t\tif (dispatch.indexBuffer) {\n\t\t\t\t\tif (dispatch.indexBuffer) {\n\t\t\t\t\t\tpass.setIndexBuffer(\n\t\t\t\t\t\t\tthis.getOrCreateBuffer(dispatch.indexBuffer, GPUBufferUsage.INDEX),\n\t\t\t\t\t\t\t'uint32'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch.indirectBuffer.elementCount % 5 != 0) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Indirect buffer needs to be a multiple of 5 (must be at least 5 elements for indexedIndirect)'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tpass.drawIndexedIndirect(\n\t\t\t\t\t\tthis.getOrCreateBuffer(dispatch.indirectBuffer, GPUBufferUsage.INDIRECT),\n\t\t\t\t\t\tdispatch.indirectOffset\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tif (dispatch.indirectBuffer.elementCount % 4 != 0) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Indirect buffer needs to be a multiple of 4 (must be at least 4 elements for indirect)'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tpass.drawIndirect(\n\t\t\t\t\t\tthis.getOrCreateBuffer(dispatch.indirectBuffer, GPUBufferUsage.INDIRECT),\n\t\t\t\t\t\tdispatch.indirectOffset\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (dispatch.geometry) {\n\t\t\t\tlet meshData = this.getOrCreateMeshData(dispatch.geometry);\n\t\t\t\tpass.setVertexBuffer(0, meshData.vertexBuffer);\n\t\t\t\tif (meshData.indexCount > 0) {\n\t\t\t\t\tpass.setIndexBuffer(meshData.indexBuffer, 'uint32');\n\n\t\t\t\t\tpass.drawIndexed(meshData.indexCount, dispatch.instanceCount);\n\t\t\t\t} else {\n\t\t\t\t\tpass.draw(meshData.vertexCount, dispatch.instanceCount);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.trace('dispatchDraw', { dispatch, options });\n\t\t\tpass.end();\n\n\t\t\treturn () => {\n\t\t\t\t// baseUniformBuffer.destroy();\n\t\t\t\t// vertexUniformBuffer.destroy();\n\t\t\t\t// fragmentUniformBuffer.destroy();\n\t\t\t};\n\t\t});\n\n\t\t// device.queue.submit([encoder.finish()]);\n\n\t\t// this.endDispatch();\n\t}\n\n\tdispatchDrawIndexed(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tconst { device } = this.getGPU();\n\n\t\tif (!dispatch.vertexShader || !dispatch.fragmentShader) {\n\t\t\tthrow new Error('Dispatch is missing vertex or fragment shader');\n\t\t}\n\n\t\tif (!dispatch.indexBuffer) {\n\t\t\tthrow new Error('Dispatch is missing indexBuffer');\n\t\t}\n\n\t\tthis.startDispatch();\n\n\t\tlet fragment = dispatch.fragmentShader;\n\t\tlet vertex = dispatch.vertexShader;\n\n\t\tconst fragmentUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.fragmentShader);\n\t\tconst vertexUniform = generateUniforms(dispatch.vertexUniforms, dispatch.vertexShader);\n\t\tlet cacheKey = `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n\t\tlet output = this.buildDrawPipeline(\n\t\t\t{\n\t\t\t\tfragment,\n\t\t\t\tvertex\n\t\t\t},\n\t\t\tfragmentUniform,\n\t\t\tvertexUniform,\n\t\t\toptions,\n\t\t\ttrue\n\t\t);\n\n\t\tthis.beforeScreenDraw();\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tif (output)\n\t\t\t\tfor (let command of output.commands) {\n\t\t\t\t\tcommand(encoder);\n\t\t\t\t}\n\t\t\tif (!this.depthTexture) {\n\t\t\t\tthrow new Error('Depth texture not created');\n\t\t\t}\n\t\t\tlet passDescriptor: GPURenderPassDescriptor = {\n\t\t\t\tcolorAttachments: [\n\t\t\t\t\t{\n\t\t\t\t\t\tview: this.getTexture().createView(),\n\n\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\tloadOp: 'load'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\tview: this.depthTexture.createView(),\n\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\tdepthLoadOp: 'load',\n\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst pass = encoder.beginRenderPass(passDescriptor);\n\n\t\t\tlet baseUniformValues = this.baseUniformValues;\n\t\t\tlet baseUniformBufferSize = this.baseUniformBufferSize;\n\t\t\tlet myTex = this.getTexture();\n\t\t\tbaseUniformValues.set([myTex.width, myTex.height], 0);\n\n\t\t\tlet drawData: DrawPipelinePayload;\n\n\t\t\tif (CACHE_PIPELINES) {\n\t\t\t\tlet cacheValue = this.pipelineCache.get(cacheKey);\n\n\t\t\t\tif (!cacheValue) {\n\t\t\t\t\tlet output = this.buildDrawPipeline(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfragment,\n\t\t\t\t\t\t\tvertex\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfragmentUniform,\n\t\t\t\t\t\tvertexUniform,\n\t\t\t\t\t\toptions\n\t\t\t\t\t);\n\t\t\t\t\tif (!output) return;\n\t\t\t\t\tdrawData = output;\n\t\t\t\t\tthis.pipelineCache.set(cacheKey, drawData);\n\t\t\t\t} else {\n\t\t\t\t\tdrawData = cacheValue as DrawPipelinePayload;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!output) return;\n\t\t\t\tdrawData = output;\n\t\t\t}\n\n\t\t\tlet {\n\t\t\t\tpipeline,\n\t\t\t\tbindGroupFragment,\n\t\t\t\tbindGroupVertex,\n\t\t\t\tbaseUniformBuffer,\n\t\t\t\tvertexUniformBuffer,\n\t\t\t\tfragmentUniformBuffer,\n\t\t\t\tspecialBuffersFragment,\n\t\t\t\tspecialBuffersVertex\n\t\t\t} = drawData;\n\n\t\t\tpass.setPipeline(pipeline);\n\n\t\t\tdevice.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n\n\t\t\tdevice.queue.writeBuffer(fragmentUniformBuffer, 0, fragmentUniform.data);\n\n\t\t\tlet bufCounterFrag = 0;\n\t\t\tfor (let i = 0; i < fragmentUniform.special.length; i++) {\n\t\t\t\tlet special = fragmentUniform.special[i];\n\t\t\t\tif (special.type == 'array' && special.value) {\n\t\t\t\t\tdevice.queue.writeBuffer(\n\t\t\t\t\t\tspecialBuffersFragment[bufCounterFrag++],\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tspecial.value.buffer\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdevice.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n\n\t\t\tlet bufCounterVert = 0;\n\t\t\tfor (let i = 0; i < vertexUniform.special.length; i++) {\n\t\t\t\tlet special = vertexUniform.special[i];\n\t\t\t\tif (special.type == 'array' && special.value) {\n\t\t\t\t\tdevice.queue.writeBuffer(specialBuffersVertex[bufCounterVert++], 0, special.value.buffer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpass.setBindGroup(0, bindGroupFragment);\n\t\t\tpass.setBindGroup(1, bindGroupVertex);\n\n\t\t\tpass.setIndexBuffer(\n\t\t\t\tthis.getOrCreateBuffer(dispatch.indexBuffer, GPUBufferUsage.INDEX),\n\t\t\t\t'uint32'\n\t\t\t);\n\n\t\t\tpass.drawIndexed(dispatch.indexBuffer.len(), dispatch.instanceCount);\n\n\t\t\tpass.end();\n\t\t});\n\n\t\t// device.queue.submit([encoder.finish()]);\n\n\t\t// this.endDispatch();\n\t}\n\n\tdispatchDrawCount(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: { depthTest: boolean } = {\n\t\t\tdepthTest: true\n\t\t}\n\t) {\n\t\tconst { device } = this.getGPU();\n\n\t\tif (!dispatch.vertexShader || !dispatch.fragmentShader) {\n\t\t\tthrow new Error('Dispatch is missing vertex or fragment shader');\n\t\t}\n\n\t\tthis.startDispatch();\n\n\t\tlet fragment = dispatch.fragmentShader;\n\t\tlet vertex = dispatch.vertexShader;\n\t\tlet cacheKey = `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n\t\tconst fragmentUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.fragmentShader);\n\t\tconst vertexUniform = generateUniforms(dispatch.vertexUniforms, dispatch.vertexShader);\n\t\tlet output = this.buildDrawPipeline(\n\t\t\t{\n\t\t\t\tfragment,\n\t\t\t\tvertex\n\t\t\t},\n\t\t\tfragmentUniform,\n\t\t\tvertexUniform,\n\t\t\toptions,\n\t\t\ttrue\n\t\t);\n\n\t\tthis.beforeScreenDraw();\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tif (output)\n\t\t\t\tfor (let command of output.commands) {\n\t\t\t\t\tcommand(encoder);\n\t\t\t\t}\n\t\t\tif (!this.depthTexture) {\n\t\t\t\tthrow new Error('Depth texture not created');\n\t\t\t}\n\t\t\tlet passDescriptor: GPURenderPassDescriptor = {\n\t\t\t\tcolorAttachments: [\n\t\t\t\t\t{\n\t\t\t\t\t\tview: this.getTexture().createView(),\n\n\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\tloadOp: 'load'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\tview: this.depthTexture.createView(),\n\t\t\t\t\tdepthClearValue: 1.0,\n\t\t\t\t\tdepthLoadOp: 'load',\n\t\t\t\t\tdepthStoreOp: 'store'\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst pass = encoder.beginRenderPass(passDescriptor);\n\n\t\t\tlet baseUniformValues = this.baseUniformValues;\n\t\t\tlet baseUniformBufferSize = this.baseUniformBufferSize;\n\t\t\tlet myTex = this.getTexture();\n\t\t\tbaseUniformValues.set([myTex.width, myTex.height], 0);\n\n\t\t\tlet drawData: DrawPipelinePayload;\n\n\t\t\tif (CACHE_PIPELINES) {\n\t\t\t\tlet cacheValue = this.pipelineCache.get(cacheKey);\n\n\t\t\t\tif (!cacheValue) {\n\t\t\t\t\tlet output = this.buildDrawPipeline(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfragment,\n\t\t\t\t\t\t\tvertex\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfragmentUniform,\n\t\t\t\t\t\tvertexUniform,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t\tif (!output) return;\n\t\t\t\t\tdrawData = output;\n\t\t\t\t\tthis.pipelineCache.set(cacheKey, drawData);\n\t\t\t\t} else {\n\t\t\t\t\tdrawData = cacheValue as DrawPipelinePayload;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!output) return;\n\t\t\t\tdrawData = output;\n\t\t\t}\n\n\t\t\tlet {\n\t\t\t\tpipeline,\n\t\t\t\tbindGroupFragment,\n\t\t\t\tbindGroupVertex,\n\t\t\t\tbaseUniformBuffer,\n\t\t\t\tvertexUniformBuffer,\n\t\t\t\tfragmentUniformBuffer,\n\t\t\t\tspecialBuffersFragment,\n\t\t\t\tspecialBuffersVertex\n\t\t\t} = drawData;\n\n\t\t\tpass.setPipeline(pipeline);\n\n\t\t\tdevice.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n\n\t\t\tdevice.queue.writeBuffer(fragmentUniformBuffer, 0, fragmentUniform.data);\n\n\t\t\tlet bufCounterFrag = 0;\n\t\t\tfor (let i = 0; i < fragmentUniform.special.length; i++) {\n\t\t\t\tlet special = fragmentUniform.special[i];\n\t\t\t\tif (special.type == 'array' && special.value) {\n\t\t\t\t\tdevice.queue.writeBuffer(\n\t\t\t\t\t\tspecialBuffersFragment[bufCounterFrag++],\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tspecial.value.buffer\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdevice.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n\n\t\t\tlet bufCounterVert = 0;\n\t\t\tfor (let i = 0; i < vertexUniform.special.length; i++) {\n\t\t\t\tlet special = vertexUniform.special[i];\n\t\t\t\tif (special.type == 'array' && special.value) {\n\t\t\t\t\tdevice.queue.writeBuffer(specialBuffersVertex[bufCounterVert++], 0, special.value.buffer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpass.setBindGroup(0, bindGroupFragment);\n\t\t\tpass.setBindGroup(1, bindGroupVertex);\n\n\t\t\tpass.draw(dispatch.drawCount * 3, 1, 0, 0);\n\n\t\t\tpass.end();\n\t\t});\n\t}\n\n\tdrawCalls: GPUCommandBuffer[] = [];\n\n\tflush(): Promise<void> {\n\t\tthis.trace('flush', {});\n\t\tsuper.flush();\n\n\t\tconst { device } = this.getGPU();\n\n\t\tlet needsDraw = true;\n\t\tif (this.drawCalls.length == 0 && this.commandQueue.length == 0) needsDraw = false;\n\n\t\tif (needsDraw) {\n\t\t\tif (this.drawCalls.length > 0) {\n\t\t\t\tdevice.queue.submit(this.drawCalls);\n\t\t\t\tthis.drawCalls = [];\n\t\t\t}\n\n\t\t\tif (this.commandQueue.length > 0) {\n\t\t\t\tlet cleanups = [];\n\t\t\t\tthis.startDispatch();\n\t\t\t\tlet encoder = device.createCommandEncoder();\n\n\t\t\t\tfor (let i = 0; i < this.commandQueue.length; i++) {\n\t\t\t\t\tlet o = this.commandQueue[i](encoder);\n\t\t\t\t\tif (o) {\n\t\t\t\t\t\tcleanups.push(o);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdevice.queue.submit([encoder.finish()]);\n\n\t\t\t\tfor (let i = this.cleanupCommands.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (this.cleanupCommands[i].$counter > 0) {\n\t\t\t\t\t\tthis.cleanupCommands[i].$counter--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.cleanupCommands[i]();\n\t\t\t\t\t\tthis.cleanupCommands.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 0; i < cleanups.length; i++) {\n\t\t\t\t\tcleanups[i]();\n\t\t\t\t}\n\t\t\t\tthis.endDispatch();\n\n\t\t\t\tthis.commandQueue = [];\n\t\t\t}\n\n\t\t\tthis.copyToCanvas();\n\t\t}\n\n\t\treturn device.queue.onSubmittedWorkDone();\n\t}\n\n\tdrawImageRender(texture: GPUTexture, toTexture: GPUTexture): void {\n\t\tconst { device } = this.getGPU();\n\n\t\tif (!this.ready) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.drawImageCache) {\n\t\t\tthis.drawImageCache(texture, toTexture);\n\t\t\treturn;\n\t\t}\n\n\t\tconst bindGroupLayout = device.createBindGroupLayout({\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: 'unfilterable-float' }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: 'non-filtering' }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\tlet vertexShader = this.createShader(\n\t\t\t{\n\t\t\t\twebgl: ``,\n\t\t\t\twebgpu: `\n\t\tstruct VertexOutput {\n\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t@location(1) TexCoord : vec2<f32>,\n\t\t\t@location(2) Color : vec4<f32>,\n\t\t};\n\t\n\t\t@vertex\n\t\tfn main(\n\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t) -> VertexOutput {\n\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\tvar output : VertexOutput;\n\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\n\t\t\treturn output;\n\t\t}\n\t\t`,\n\t\t\t\tsoftware: () => {}\n\t\t\t},\n\t\t\t'vertex'\n\t\t);\n\n\t\tlet fragmentShader = this.createShader(\n\t\t\t{\n\t\t\t\twebgl: ``,\n\t\t\t\twebgpu: `\n\t\t\tstruct VertexOutput {\n\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t@location(1) TexCoord : vec2<f32>,\n\t\t\t\t@location(2) Color : vec4<f32>,\n\t\t\t};\n\t\t\t@group(0) @binding(1) var _sampler: sampler;\n\t\t\t@group(0) @binding(0) var _texture: texture_2d<f32>;\n\n\t\t@fragment\n\t\tfn main(\n\t\t\t_in: VertexOutput\n\t\t) -> @location(0) vec4<f32> {\n\t\t\treturn textureSample(_texture, _sampler, _in.TexCoord);\n\t\t}\n\t\t`,\n\t\t\t\tsoftware: () => {}\n\t\t\t},\n\t\t\t'fragment'\n\t\t);\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tbindGroupLayouts: [bindGroupLayout]\n\t\t});\n\n\t\tconst pipelineDescriptor = {\n\t\t\tvertex: {\n\t\t\t\tmodule: vertexShader.payload,\n\t\t\t\tentryPoint: 'main',\n\t\t\t\tbuffers: vertexLayout\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: fragmentShader.payload,\n\t\t\t\tentryPoint: 'main',\n\t\t\t\ttargets: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformat: 'rgba8unorm',\n\n\t\t\t\t\t\tblend: {\n\t\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\t\tsrcFactor: 'one',\n\t\t\t\t\t\t\t\tdstFactor: 'one-minus-src-alpha',\n\t\t\t\t\t\t\t\toperation: 'add'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\tsrcFactor: 'one',\n\t\t\t\t\t\t\t\tdstFactor: 'one-minus-src-alpha',\n\t\t\t\t\t\t\t\toperation: 'add'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: 'triangle-list',\n\t\t\t\tcullMode: 'back'\n\t\t\t},\n\n\t\t\tlayout: pipelineLayout\n\t\t} as GPURenderPipelineDescriptor;\n\n\t\tconst pipeline = device.createRenderPipeline(pipelineDescriptor);\n\n\t\tlet geo = {\n\t\t\tvertices: [\n\t\t\t\t[0, 0, 0],\n\t\t\t\t[0, 1, 0],\n\t\t\t\t[1, 1, 0],\n\t\t\t\t[1, 0, 0]\n\t\t\t],\n\t\t\tuvs: [\n\t\t\t\t[0, 0],\n\t\t\t\t[0, 1],\n\t\t\t\t[1, 1],\n\t\t\t\t[1, 0]\n\t\t\t],\n\t\t\ttriangles: [0, 1, 2],\n\t\t\tcolors: [],\n\t\t\tnormals: [],\n\t\t\ttangents: [],\n\t\t\tbitangents: [],\n\t\t\tgetTriangles: () => {\n\t\t\t\treturn geo.triangles;\n\t\t\t},\n\t\t\tgetVertices: () => {\n\t\t\t\treturn geo.vertices;\n\t\t\t},\n\t\t\tgetUVs: () => {\n\t\t\t\treturn geo.uvs;\n\t\t\t},\n\t\t\tgetNormals: (): number[][] => {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tgetTangents: (): number[][] => {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tgetBitangents: (): number[][] => {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tgetColors: (): number[][] => {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tsymbol: Symbol()\n\t\t};\n\n\t\tlet meshData = this.getOrCreateMeshData(geo as any);\n\n\t\tthis.drawImageCache = (texture: GPUTexture, toTexture: GPUTexture) => {\n\t\t\tdevice.pushErrorScope('internal');\n\t\t\tdevice.pushErrorScope('validation');\n\n\t\t\tconst commandEncoder = device.createCommandEncoder();\n\t\t\tconst passEncoder = commandEncoder.beginRenderPass({\n\t\t\t\tcolorAttachments: [\n\t\t\t\t\t{\n\t\t\t\t\t\tview: toTexture.createView(),\n\n\t\t\t\t\t\tstoreOp: 'store',\n\t\t\t\t\t\tloadOp: 'load'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t} as GPURenderPassDescriptor);\n\n\t\t\tconst sampler = device.createSampler({});\n\n\t\t\tpassEncoder.setPipeline(pipeline);\n\n\t\t\tconst bindGroup = device.createBindGroup({\n\t\t\t\tlayout: bindGroupLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\n\t\t\t\t\t\tresource: texture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tpassEncoder.setBindGroup(0, bindGroup);\n\n\t\t\tpassEncoder.setVertexBuffer(0, meshData.vertexBuffer);\n\t\t\tpassEncoder.setIndexBuffer(meshData.indexBuffer, 'uint32');\n\n\t\t\tpassEncoder.drawIndexed(meshData.indexCount);\n\n\t\t\tpassEncoder.end();\n\n\t\t\tdevice.queue.submit([commandEncoder.finish()]);\n\n\t\t\tdevice.popErrorScope().then((error) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.log('Error', error);\n\t\t\t\t\t(window as any).bubbleError(error.message);\n\t\t\t\t\tthrow new Error('Failed to create shader');\n\t\t\t\t}\n\t\t\t});\n\t\t\tdevice.popErrorScope().then((error) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.log('Error', error);\n\t\t\t\t\t(window as any).bubbleError(error.message);\n\t\t\t\t\tthrow new Error('Failed to create shader');\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tthis.drawImageCache(texture, toTexture);\n\t}\n\n\tasync copyToOtherCanvas(canvas: HTMLCanvasElement): Promise<void> {\n\t\tconst { device } = this.getGPU();\n\n\t\tlet encoder = device.createCommandEncoder();\n\t\tlet ctx = canvas.getContext('webgpu');\n\t\tif (!ctx) throw new Error('Could not get webgpu context');\n\t\tctx.configure({\n\t\t\tdevice: device,\n\t\t\tformat: 'rgba8unorm',\n\t\t\talphaMode: 'premultiplied',\n\t\t\tusage:\n\t\t\t\tGPUTextureUsage.RENDER_ATTACHMENT |\n\t\t\t\tGPUTextureUsage.TEXTURE_BINDING |\n\t\t\t\tGPUTextureUsage.COPY_SRC |\n\t\t\t\tGPUTextureUsage.COPY_DST\n\t\t});\n\n\t\tencoder.copyTextureToTexture(\n\t\t\t{ texture: this.getTexture() },\n\t\t\t{ texture: ctx.getCurrentTexture() },\n\t\t\t{ width: this.getTexture().width, height: this.getTexture().height }\n\t\t);\n\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait device.queue.onSubmittedWorkDone();\n\t}\n\n\tcopyToCanvas() {\n\t\tconst { device } = this.getGPU();\n\t\tif (\n\t\t\tthis.headless &&\n\t\t\tthis.texture &&\n\t\t\t(this.textureFormat.endsWith('4') || this.textureFormat == 'uint8')\n\t\t) {\n\t\t\t// Draw to canvas\n\t\t\tif (!this.ctx) {\n\t\t\t\tthis.ctx = this.canvas!.getContext('webgpu');\n\t\t\t\tif (!this.ctx) throw new Error('Could not get webgpu context');\n\n\t\t\t\tthis.ctx.configure({\n\t\t\t\t\tdevice,\n\t\t\t\t\tformat: 'rgba8unorm',\n\t\t\t\t\talphaMode: 'premultiplied',\n\t\t\t\t\tusage:\n\t\t\t\t\t\tGPUTextureUsage.RENDER_ATTACHMENT |\n\t\t\t\t\t\tGPUTextureUsage.TEXTURE_BINDING |\n\t\t\t\t\t\tGPUTextureUsage.COPY_SRC |\n\t\t\t\t\t\tGPUTextureUsage.COPY_DST\n\t\t\t\t});\n\t\t\t\t// document.body.appendChild(this.canvas!);\n\t\t\t}\n\n\t\t\tthis.startDispatch();\n\n\t\t\tlet encoder = device.createCommandEncoder();\n\n\t\t\tif (this.texture.format == 'rgba8unorm') {\n\t\t\t\tencoder.copyTextureToTexture(\n\t\t\t\t\t{ texture: this.texture },\n\t\t\t\t\t{ texture: this.ctx.getCurrentTexture() },\n\t\t\t\t\t{ width: this.texture.width, height: this.texture.height }\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Render via draw call\n\t\t\t\tthis.drawImageRender(this.texture, this.ctx.getCurrentTexture());\n\t\t\t}\n\n\t\t\tdevice.queue.submit([encoder.finish()]);\n\n\t\t\tthis.endDispatch();\n\t\t}\n\t}\n\n\tdispatch(\n\t\tdispatch: ShaderDispatch,\n\t\toptions: {\n\t\t\tdepthTest: boolean;\n\t\t} = {\n\t\t\tdepthTest: true\n\t\t}\n\t): void {\n\t\tsuper.dispatch(dispatch, options);\n\t\tif (dispatch.type == 'draw') {\n\t\t\tthis.activateDrawContext();\n\t\t\tthis.triggerEvent('draw', dispatch);\n\t\t\tif (dispatch.drawType == 'indexed') {\n\t\t\t\tthis.dispatchDrawIndexed(dispatch, options);\n\t\t\t} else if (dispatch.drawType == 'count') {\n\t\t\t\tthis.dispatchDrawCount(dispatch, options);\n\t\t\t} else {\n\t\t\t\tthis.dispatchDraw(dispatch, options);\n\t\t\t}\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.canvas?.remove();\n\t\tthis.texture?.destroy();\n\t\tthis.storageTexture?.destroy();\n\t}\n\n\tdestroyBuffer(buf: buffer<any>): void {\n\t\tthis.enqueueCommand((encoder) => {\n\t\t\tif (buf.platformPayload) {\n\t\t\t\tbuf.platformPayload.destroy();\n\t\t\t}\n\t\t});\n\t}\n\n\twaitForDraw(): Promise<void> {\n\t\tconst { device } = this.getGPU();\n\n\t\treturn device.queue.onSubmittedWorkDone();\n\t}\n\n\tbufferCounter: number = 0;\n\tgetOrCreateBuffer(buf: buffer<any>, extraFlags: GPUBufferUsageFlags | null): GPUBuffer {\n\t\tlet useOldBuffer: GPUBuffer | null = null;\n\t\tif (buf.platformPayload) {\n\t\t\tlet gpuBuf = buf.platformPayload as GPUBuffer;\n\t\t\tif (extraFlags !== null) {\n\t\t\t\tif (gpuBuf.usage & extraFlags) {\n\t\t\t\t\treturn gpuBuf;\n\t\t\t\t}\n\n\t\t\t\textraFlags |= gpuBuf.usage;\n\t\t\t\tuseOldBuffer = gpuBuf;\n\t\t\t} else {\n\t\t\t\treturn gpuBuf;\n\t\t\t}\n\t\t}\n\n\t\tconst { device } = this.getGPU();\n\t\tlet flags = this.genericBufferFlags();\n\t\tif (extraFlags) {\n\t\t\tflags |= extraFlags;\n\t\t}\n\t\tlet bufferSize = buf.len() * buf.elementBytes;\n\t\tif (!buf.structured) {\n\t\t\tbufferSize *= buf.vectorSize;\n\t\t}\n\t\tthis.startDispatch();\n\t\tlet buffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: flags\n\t\t});\n\t\t(buf as any).$_bufferIndex = this.bufferCounter;\n\t\tthis.bufferCounter++;\n\t\tbuf.symbol = Symbol();\n\n\t\tif (useOldBuffer) {\n\t\t\tlet encoder = device.createCommandEncoder();\n\t\t\tencoder.copyBufferToBuffer(useOldBuffer, 0, buffer, 0, bufferSize);\n\t\t\tdevice.queue.submit([encoder.finish()]);\n\t\t} else if (buf.cpuWriteDirty) {\n\t\t\tif (buf.structured) {\n\t\t\t\tif (buf.typeName == 'atomic<uint>' || buf.typeName == 'atomic<int>') {\n\t\t\t\t\tlet zero: Uint32Array | Int32Array;\n\t\t\t\t\tif (buf.typeName == 'atomic<uint>') {\n\t\t\t\t\t\tzero = new Uint32Array(buf.elementCount);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tzero = new Int32Array(buf.elementCount);\n\t\t\t\t\t}\n\t\t\t\t\tif (buf.structArray)\n\t\t\t\t\t\tfor (let i = 0; i < buf.structArray.length; i++) {\n\t\t\t\t\t\t\tlet struct = buf.structArray[i];\n\t\t\t\t\t\t\tif (struct) {\n\t\t\t\t\t\t\t\tzero[i] = struct;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tdevice.queue.writeBuffer(buffer, 0, zero);\n\t\t\t\t} else {\n\t\t\t\t\t// let structure = (window as any).__shadeup_structs[buf.typeName];\n\t\t\t\t\t// let size = getValueSize(structure.fields);\n\t\t\t\t\t// let arrayBuffer = new ArrayBuffer(buf.elementCount * size);\n\t\t\t\t\t// if (buf.structArray)\n\t\t\t\t\t// \tfor (let i = 0; i < buf.elementCount; i++) {\n\t\t\t\t\t// \t\tthis.writeStructuredBuffer(structure.fields, buf.structArray[i], arrayBuffer, i * size);\n\t\t\t\t\t// \t}\n\n\t\t\t\t\tdevice.queue.writeBuffer(buffer, 0, buf.arrayBuffer!);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdevice.queue.writeBuffer(\n\t\t\t\t\tbuffer,\n\t\t\t\t\t0,\n\t\t\t\t\tbuf.uintArray ?? buf.floatArray ?? buf.intArray ?? new Uint8Array(0)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbuf.cpuWriteDirty = false;\n\t\t}\n\n\t\tbuf.platformPayload = buffer;\n\t\tbuf.adapter = this;\n\t\tthis.endDispatch();\n\t\treturn buffer;\n\t}\n}\n\nconst TYPE_SIZES_NATIVE = {\n\tf32: 4,\n\t'vec2<f32>': 8,\n\t'vec3<f32>': 12,\n\t'vec4<f32>': 16,\n\n\t'mat2x2<f32>': 16,\n\t'mat3x3<f32>': 36,\n\t'mat4x4<f32>': 64,\n\n\tu32: 4,\n\t'vec2<u32>': 8,\n\t'vec3<u32>': 12,\n\t'vec4<u32>': 16,\n\n\ti32: 4,\n\t'vec2<i32>': 8,\n\t'vec3<i32>': 12,\n\t'vec4<i32>': 16\n};\nconst TRANSPOSE_MATRICES_UNIFORM = false;\nconst TYPE_SIZES = {\n\tatomic: [8, 8],\n\ttexture2d: [8, 8],\n\trwtexture2d: [8, 8],\n\tbool: [1, 15],\n\n\tfloat: [4, 12],\n\tfloat2: [8, 8],\n\tfloat3: [12, 4],\n\tfloat4: [16, 0],\n\n\tfloat2x2: [16, 0],\n\tfloat3x3: [12 + 12 + 12, 4 + 4 + 4],\n\tfloat4x4: [16 + 16 + 16 + 16, 4 + 4 + 4 + 4],\n\n\tuint: [4, 12],\n\tuint2: [8, 8],\n\tuint3: [12, 4],\n\tuint4: [16, 0],\n\n\tint: [4, 12],\n\tint2: [8, 8],\n\tint3: [12, 4],\n\tint4: [16, 0]\n};\n\nfunction getValueSize(val: UniformValueType): number {\n\tlet totalSize = 0;\n\tif (val.type == 'struct') {\n\t\tlet lastSlotPadding = 0;\n\t\tfor (let member of val.fields) {\n\t\t\tlet fieldSize = getValueSize(member[1]);\n\t\t\ttotalSize += fieldSize;\n\t\t\tif (lastSlotPadding == 0) {\n\t\t\t\tlastSlotPadding = 16 - fieldSize;\n\t\t\t} else if (lastSlotPadding == 4 && fieldSize == 4) {\n\t\t\t} else if (lastSlotPadding == 8 && fieldSize == 4) {\n\t\t\t\tlastSlotPadding = 4;\n\t\t\t} else if (lastSlotPadding == 12 && fieldSize == 4) {\n\t\t\t\tlastSlotPadding = 0;\n\t\t\t}\n\t\t\t// if (member[1].type == 'primitive') {\n\t\t\t// \tlastSlotPadding = 16 - fieldSize;\n\t\t\t// }else{\n\t\t\t// \tlastSlotPadding = 0;\n\t\t\t// }\n\t\t}\n\t} else if (val.type == 'primitive') {\n\t\tlet n = val.name;\n\t\tif (n == 'atomic') {\n\t\t\ttotalSize += 4;\n\t\t} else if (n == 'texture2d' || n == 'rwtexture2d') {\n\t\t\ttotalSize += 8;\n\t\t} else {\n\t\t\tlet s = TYPE_SIZES[n];\n\t\t\tif (s[0] == 0) {\n\t\t\t\tthrow new Error(`Cannot calculate size of struct with unknown size type ${n}`);\n\t\t\t}\n\t\t\ttotalSize += s[0] + s[1];\n\t\t}\n\t} else if (val.type == 'array') {\n\t\tlet elementSize = getValueSize(val.element);\n\n\t\tif (typeof val.staticSize !== 'undefined') {\n\t\t\ttotalSize += val.staticSize * elementSize;\n\t\t} else {\n\t\t\tthrow new Error(`Cannot calculate size of struct with unknown size type ${val.element}`);\n\t\t}\n\t}\n\treturn totalSize;\n}\n\nfunction generateArrayBuffer(\n\trootVt: UniformValueType,\n\trawData: any,\n\tdata?: ArrayBuffer,\n\toffset?: number\n): {\n\tbuffer: ArrayBuffer;\n\tsize: number;\n} {\n\tif (rootVt.type != 'array') {\n\t\tthrow new Error(`Cannot generate array buffer for non-array type ${rootVt.type}`);\n\t}\n\tlet specialCounter = 2;\n\tlet totalSize = 0;\n\tlet lastFieldPadding = 0;\n\n\tlet vsize = getValueSize(rootVt.element);\n\ttotalSize += vsize * rawData.value.len();\n\n\tif (totalSize == 0) {\n\t\t// Dummy data\n\t\ttotalSize = 4 * 4;\n\t}\n\n\tif (!data) data = new ArrayBuffer(totalSize);\n\tlet floatView = new Float32Array(data);\n\tlet uintView = new Uint32Array(data);\n\tlet intView = new Int32Array(data);\n\n\tif (!offset) offset = 0;\n\tlet queue: [UniformKeyValuePair, any, number | null][] = [];\n\tlet rootObj = rawData.value;\n\n\tfor (let i = 0; i < rawData.value.len(); i++) {\n\t\tqueue.unshift([[`[${i}]`, rootVt.element], rootObj, i]);\n\t}\n\n\twhile (queue.length > 0) {\n\t\tlet [uniform, obj, arrayIndex] = queue.pop() as [UniformKeyValuePair, any, number | null];\n\t\tlet vt = uniform[1];\n\t\tlet name = uniform[0];\n\t\tif (vt.type == 'primitive') {\n\t\t\tlet n = vt.name;\n\t\t\tlet s = TYPE_SIZES[n];\n\t\t\tif (s[0] == 0) {\n\t\t\t\tthrow new Error(`Cannot calculate size of struct with unknown size type ${n}`);\n\t\t\t}\n\t\t\tlet val;\n\t\t\tif (arrayIndex !== null) {\n\t\t\t\tval = obj[arrayIndex];\n\t\t\t} else {\n\t\t\t\tval = obj[name];\n\t\t\t}\n\t\t\tif (typeof val === 'undefined') {\n\t\t\t\tthrow new Error(`Uniform ${name} is not defined`);\n\t\t\t}\n\t\t\tif (val instanceof UniformValue) {\n\t\t\t\tval = val.value;\n\t\t\t}\n\t\t\tlet view: Float32Array | Uint32Array | Int32Array = floatView;\n\t\t\tif (n.startsWith('u')) {\n\t\t\t\tview = uintView;\n\t\t\t} else if (n.startsWith('i')) {\n\t\t\t\tview = intView;\n\t\t\t}\n\t\t\tif (n == 'float' || n == 'uint' || n == 'int') {\n\t\t\t\tif (typeof val == 'boolean') {\n\t\t\t\t\tval = val ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\tview[offset++] = val;\n\t\t\t\toffset += 3;\n\t\t\t} else if (n == 'float2' || n == 'uint2' || n == 'int2') {\n\t\t\t\tview[offset++] = val[0];\n\t\t\t\tview[offset++] = val[1];\n\t\t\t\toffset += 2;\n\t\t\t} else if (n == 'float3' || n == 'uint3' || n == 'int3') {\n\t\t\t\tview[offset++] = val[0];\n\t\t\t\tview[offset++] = val[1];\n\t\t\t\tview[offset++] = val[2];\n\t\t\t\toffset += 1;\n\t\t\t} else if (n == 'float4' || n == 'uint4' || n == 'int4') {\n\t\t\t\tview[offset++] = val[0];\n\t\t\t\tview[offset++] = val[1];\n\t\t\t\tview[offset++] = val[2];\n\t\t\t\tview[offset++] = val[3];\n\t\t\t} else if (n == 'float2x2') {\n\t\t\t\t// Column major order\n\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t} else {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t}\n\t\t\t} else if (n == 'float3x3') {\n\t\t\t\t// Column major order\n\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[7];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\toffset++;\n\t\t\t\t} else {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\tview[offset++] = val[7];\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\toffset++;\n\t\t\t\t}\n\t\t\t} else if (n == 'float4x4') {\n\t\t\t\t// Column major order\n\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\tview[offset++] = val[12];\n\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\tview[offset++] = val[9];\n\t\t\t\t\tview[offset++] = val[13];\n\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\tview[offset++] = val[10];\n\t\t\t\t\tview[offset++] = val[14];\n\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t\tview[offset++] = val[7];\n\t\t\t\t\tview[offset++] = val[11];\n\t\t\t\t\tview[offset++] = val[15];\n\t\t\t\t} else {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[3];\n\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\tview[offset++] = val[7];\n\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\tview[offset++] = val[9];\n\t\t\t\t\tview[offset++] = val[10];\n\t\t\t\t\tview[offset++] = val[11];\n\n\t\t\t\t\tview[offset++] = val[12];\n\t\t\t\t\tview[offset++] = val[13];\n\t\t\t\t\tview[offset++] = val[14];\n\t\t\t\t\tview[offset++] = val[15];\n\t\t\t\t}\n\t\t\t} else if (n == 'bool') {\n\t\t\t\tintView[offset++] = val ? 1 : 0;\n\t\t\t\toffset += 3;\n\t\t\t} else if (n == 'rwtexture2d' || n == 'texture2d') {\n\t\t\t\tfloatView[offset++] = val.size[0];\n\t\t\t\tfloatView[offset++] = val.size[1];\n\t\t\t\toffset += 2;\n\t\t\t} else if (n == 'atomic') {\n\t\t\t\tview[offset++] = val;\n\t\t\t\toffset += 3;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid param type ' + n);\n\t\t\t}\n\t\t} else if (vt.type == 'array') {\n\t\t\tlet val = obj[name];\n\t\t\tif (val instanceof UniformValue) {\n\t\t\t\tval = val.value;\n\t\t\t}\n\t\t\tif (obj == rootObj) {\n\t\t\t\tif (typeof val === 'object' && Array.isArray(val)) {\n\t\t\t\t\tintView[offset++] = val.length;\n\t\t\t\t\toffset += 3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = val.length - 1; i >= 0; i--) {\n\t\t\t\t\tqueue.push([['', vt.element], val, i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (vt.type == 'buffer') {\n\t\t\tlet val = obj[name];\n\t\t\tif (val instanceof UniformValue) {\n\t\t\t\tval = val.value;\n\t\t\t}\n\t\t\tif (obj == rootObj) {\n\t\t\t\tif (typeof val === 'object') {\n\t\t\t\t\tintView[offset++] = val.elementCount;\n\t\t\t\t\toffset += 3;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (vt.type == 'struct') {\n\t\t\tlet val;\n\t\t\tif (arrayIndex !== null) {\n\t\t\t\tval = obj[arrayIndex];\n\t\t\t} else {\n\t\t\t\tval = obj[name];\n\t\t\t}\n\t\t\tif (typeof val === 'object') {\n\t\t\t\tfor (let i = vt.fields.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet member = vt.fields[i];\n\t\t\t\t\tif (val instanceof UniformValue) {\n\t\t\t\t\t\tqueue.push([member, val.value, null]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push([member, val, null]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tsize: totalSize,\n\t\tbuffer: data\n\t};\n}\n\ntype WebGPUSpecialUniform =\n\t| {\n\t\t\tindex: number;\n\t\t\ttype: 'sampler2D';\n\t\t\tvalueType: UniformValueType;\n\t\t\taccess: 'read' | 'write' | 'sample_write' | 'sample';\n\t\t\tvalue?: {\n\t\t\t\ttexture: ShadeupTexture2d;\n\t\t\t};\n\t  }\n\t| {\n\t\t\tindex: number;\n\t\t\ttype: 'sampler2DArray';\n\t\t\tvalueType: UniformValueType;\n\t\t\taccess: 'read' | 'write' | 'sample_write' | 'sample';\n\t\t\tvalue?: {\n\t\t\t\ttextures: ShadeupTexture2d[];\n\t\t\t};\n\t  }\n\t| {\n\t\t\tindex: number;\n\t\t\ttype: 'array';\n\t\t\tvalueType: UniformValueType;\n\t\t\tvalue?: {\n\t\t\t\tsize: number;\n\t\t\t\tbuffer: ArrayBuffer;\n\t\t\t};\n\t  }\n\t| {\n\t\t\tindex: number;\n\t\t\ttype: 'buffer';\n\t\t\taccess: 'read' | 'write';\n\t\t\tvalueType: UniformValueType;\n\t\t\tvalue?: buffer<any>;\n\t  }\n\t| {\n\t\t\tindex: number;\n\t\t\ttype: 'atomic';\n\t\t\tvalueType: UniformValueType;\n\t\t\tvalue: { __value: number };\n\t  };\n\ntype GeneratedUniforms = {\n\tsize: number;\n\tspecial: WebGPUSpecialUniform[];\n\tdata: ArrayBuffer;\n};\n\nfunction generateUniforms(\n\tfragmentUniforms: UniformPayload,\n\tfragmentShader: GenericShader\n): GeneratedUniforms {\n\tif (fragmentShader.parent == null) {\n\t\treturn {\n\t\t\tsize: 0,\n\t\t\tspecial: [],\n\t\t\tdata: new ArrayBuffer(0)\n\t\t};\n\t}\n\tlet orderedUniforms: UniformKeyValuePair[] = [\n\t\t...fragmentShader.parent.params.webgpu.locals.map((l) => {\n\t\t\treturn ['_ext_uniform_local_' + l[0], l[1]] as UniformKeyValuePair;\n\t\t}),\n\t\t...fragmentShader.parent.params.webgpu.globals.map((g) => {\n\t\t\treturn ['_ext_uniform_global_' + g[0], g[1].structure] as UniformKeyValuePair;\n\t\t})\n\t];\n\n\tlet special: WebGPUSpecialUniform[] = [];\n\tlet specialCounter = 2;\n\tlet totalSize = 0;\n\tlet lastFieldPadding = 0;\n\n\tfor (let uniform of orderedUniforms) {\n\t\tlet vt = uniform[1];\n\t\tif (vt.type == 'primitive' && (vt.name == 'texture2d' || vt.name == 'rwtexture2d')) {\n\t\t\tlet texPayload = fragmentUniforms.uniforms.get(uniform[0]) as any;\n\t\t\tspecial.push({\n\t\t\t\tindex: specialCounter,\n\t\t\t\ttype: 'sampler2D',\n\t\t\t\tvalueType: vt,\n\t\t\t\tvalue: {\n\t\t\t\t\ttexture: texPayload.value\n\t\t\t\t},\n\t\t\t\taccess: vt.access\n\t\t\t});\n\t\t\tspecialCounter += 2;\n\t\t\tlastFieldPadding = 8;\n\t\t\ttotalSize += 8 + lastFieldPadding; // Size\n\t\t} else if (vt.type == 'array') {\n\t\t\tif (vt.element.type == 'primitive' && vt.element.name == 'texture2d') {\n\t\t\t\tlet texPayload = fragmentUniforms.uniforms.get(uniform[0]) as any;\n\t\t\t\tspecial.push({\n\t\t\t\t\tindex: specialCounter,\n\t\t\t\t\ttype: 'sampler2DArray',\n\t\t\t\t\tvalueType: vt,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\ttextures: texPayload.value\n\t\t\t\t\t},\n\t\t\t\t\taccess: vt.element.access\n\t\t\t\t});\n\t\t\t\tspecialCounter += 2;\n\t\t\t\tlastFieldPadding = 8;\n\t\t\t\ttotalSize += 8 + lastFieldPadding; // Size\n\t\t\t} else {\n\t\t\t\tspecial.push({\n\t\t\t\t\tindex: specialCounter,\n\t\t\t\t\ttype: 'array',\n\t\t\t\t\tvalueType: vt,\n\t\t\t\t\tvalue: generateArrayBuffer(vt, fragmentUniforms.uniforms.get(uniform[0]) as any)\n\t\t\t\t});\n\t\t\t\tspecialCounter++;\n\t\t\t\tlastFieldPadding = 12;\n\t\t\t\ttotalSize += 4 + lastFieldPadding; // Len\n\t\t\t}\n\t\t} else if (vt.type == 'buffer') {\n\t\t\tspecial.push({\n\t\t\t\ttype: 'buffer',\n\t\t\t\tvalueType: vt,\n\t\t\t\taccess: vt.access,\n\t\t\t\tindex: specialCounter,\n\t\t\t\tvalue: fragmentUniforms.uniforms.get(uniform[0])?.value as buffer_internal<any> as any\n\t\t\t});\n\t\t\tspecialCounter++;\n\t\t\tlastFieldPadding = 12;\n\t\t\ttotalSize += 4 + lastFieldPadding; // Len\n\t\t} else if (vt.type == 'primitive' && vt.name == 'atomic') {\n\t\t\tspecial.push({\n\t\t\t\ttype: 'atomic',\n\t\t\t\tvalueType: vt,\n\t\t\t\tindex: specialCounter,\n\t\t\t\tvalue: fragmentUniforms.uniforms.get(uniform[0])?.value as any\n\t\t\t});\n\t\t\tspecialCounter++;\n\t\t\tlastFieldPadding = 12;\n\t\t\ttotalSize += 4 + lastFieldPadding; // Len\n\t\t} else {\n\t\t\tlet vsize = getValueSize(vt);\n\t\t\tlet extra = vsize % 16;\n\t\t\tif (vt.type == 'primitive') {\n\t\t\t\tlastFieldPadding = 16 - extra;\n\t\t\t} else {\n\t\t\t\tlastFieldPadding = 0;\n\t\t\t}\n\n\t\t\ttotalSize += vsize + lastFieldPadding;\n\t\t}\n\t}\n\n\tif (totalSize == 0) {\n\t\t// Dummy data\n\t\ttotalSize = 4 * 4;\n\t}\n\n\tlet queue: [UniformKeyValuePair, any, number | null][] = [];\n\tlet rootObj: { [key: string]: any } = {};\n\tfor (let k of fragmentUniforms.uniforms.keys()) {\n\t\trootObj[k] = fragmentUniforms.uniforms.get(k);\n\t}\n\tfor (let uniform of orderedUniforms) {\n\t\tqueue.unshift([uniform, rootObj, null]);\n\t}\n\n\tlet data = new ArrayBuffer(totalSize);\n\tlet offset = 0;\n\n\twriteBufferStructure(queue, rootObj, data, offset);\n\n\treturn {\n\t\tsize: totalSize,\n\t\tspecial,\n\t\tdata\n\t};\n}\n\nfunction writeBufferStructure(\n\tinitialQueue: [UniformKeyValuePair, any, number | null][],\n\trootObj: { [key: string]: any },\n\tdata: ArrayBuffer,\n\toffset: number\n) {\n\tlet floatView = new Float32Array(data);\n\tlet uintView = new Uint32Array(data);\n\tlet intView = new Int32Array(data);\n\n\tlet queue: [UniformKeyValuePair, any, number | null][] = [...initialQueue];\n\n\twhile (queue.length > 0) {\n\t\tlet [uniform, obj, arrayIndex] = queue.pop() as [UniformKeyValuePair, any, number | null];\n\t\tlet vt = uniform[1];\n\t\tlet name = uniform[0];\n\t\tif (vt.type == 'primitive') {\n\t\t\tlet n = vt.name;\n\t\t\tlet s = TYPE_SIZES[n];\n\t\t\tif (s[0] == 0) {\n\t\t\t\tthrow new Error(`Cannot calculate size of struct with unknown size type ${n}`);\n\t\t\t}\n\t\t\tlet val;\n\t\t\tif (arrayIndex !== null) {\n\t\t\t\tval = obj[arrayIndex];\n\t\t\t} else {\n\t\t\t\tval = obj[name];\n\t\t\t}\n\t\t\tif (typeof val === 'undefined') {\n\t\t\t\tthrow new Error(`Uniform ${name} is not defined`);\n\t\t\t}\n\t\t\tif (val instanceof UniformValue) {\n\t\t\t\tval = val.value;\n\t\t\t}\n\t\t\tlet view: Float32Array | Uint32Array | Int32Array = floatView;\n\t\t\tif (n.startsWith('u')) {\n\t\t\t\tview = uintView;\n\t\t\t} else if (n.startsWith('i')) {\n\t\t\t\tview = intView;\n\t\t\t}\n\t\t\tif (n == 'float' || n == 'uint' || n == 'int') {\n\t\t\t\tif (typeof val == 'boolean') {\n\t\t\t\t\tval = val ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\tview[offset++] = val;\n\t\t\t\toffset += 3;\n\t\t\t} else if (n == 'float2' || n == 'uint2' || n == 'int2') {\n\t\t\t\tview[offset++] = val[0];\n\t\t\t\tview[offset++] = val[1];\n\t\t\t\toffset += 2;\n\t\t\t} else if (n == 'float3' || n == 'uint3' || n == 'int3') {\n\t\t\t\tview[offset++] = val[0];\n\t\t\t\tview[offset++] = val[1];\n\t\t\t\tview[offset++] = val[2];\n\t\t\t\toffset += 1;\n\t\t\t} else if (n == 'float4' || n == 'uint4' || n == 'int4') {\n\t\t\t\tview[offset++] = val[0];\n\t\t\t\tview[offset++] = val[1];\n\t\t\t\tview[offset++] = val[2];\n\t\t\t\tview[offset++] = val[3];\n\t\t\t} else if (n == 'float2x2') {\n\t\t\t\t// Column major order\n\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t} else {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t}\n\t\t\t} else if (n == 'float3x3') {\n\t\t\t\t// Column major order\n\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[7];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\toffset++;\n\t\t\t\t} else {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\toffset++;\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\tview[offset++] = val[7];\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\toffset++;\n\t\t\t\t}\n\t\t\t} else if (n == 'float4x4') {\n\t\t\t\t// Column major order\n\t\t\t\tif (TRANSPOSE_MATRICES_UNIFORM) {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\tview[offset++] = val[12];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\tview[offset++] = val[9];\n\t\t\t\t\tview[offset++] = val[13];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\tview[offset++] = val[10];\n\t\t\t\t\tview[offset++] = val[14];\n\t\t\t\t\tview[offset++] = val[3];\n\t\t\t\t\tview[offset++] = val[7];\n\t\t\t\t\tview[offset++] = val[11];\n\t\t\t\t\tview[offset++] = val[15];\n\t\t\t\t} else {\n\t\t\t\t\tview[offset++] = val[0];\n\t\t\t\t\tview[offset++] = val[1];\n\t\t\t\t\tview[offset++] = val[2];\n\t\t\t\t\tview[offset++] = val[3];\n\n\t\t\t\t\tview[offset++] = val[4];\n\t\t\t\t\tview[offset++] = val[5];\n\t\t\t\t\tview[offset++] = val[6];\n\t\t\t\t\tview[offset++] = val[7];\n\n\t\t\t\t\tview[offset++] = val[8];\n\t\t\t\t\tview[offset++] = val[9];\n\t\t\t\t\tview[offset++] = val[10];\n\t\t\t\t\tview[offset++] = val[11];\n\n\t\t\t\t\tview[offset++] = val[12];\n\t\t\t\t\tview[offset++] = val[13];\n\t\t\t\t\tview[offset++] = val[14];\n\t\t\t\t\tview[offset++] = val[15];\n\t\t\t\t}\n\t\t\t} else if (n == 'bool') {\n\t\t\t\tintView[offset++] = val ? 1 : 0;\n\t\t\t\toffset += 3;\n\t\t\t} else if (n == 'rwtexture2d' || n == 'texture2d') {\n\t\t\t\tfloatView[offset++] = val.size[0];\n\t\t\t\tfloatView[offset++] = val.size[1];\n\t\t\t\toffset += 2;\n\t\t\t} else if (n == 'atomic') {\n\t\t\t\tif ((vt as any).element == 'uint') {\n\t\t\t\t\tuintView[offset++] = val;\n\t\t\t\t} else {\n\t\t\t\t\tintView[offset++] = val;\n\t\t\t\t}\n\t\t\t\toffset += 3;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid param type ' + n);\n\t\t\t}\n\t\t} else if (vt.type == 'array') {\n\t\t\tlet val = obj[name];\n\t\t\tif (val instanceof UniformValue) {\n\t\t\t\tval = val.value;\n\t\t\t}\n\t\t\tif (obj == rootObj) {\n\t\t\t\tif (typeof val === 'object' && Array.isArray(val)) {\n\t\t\t\t\tintView[offset++] = val.length;\n\t\t\t\t\toffset += 3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = val.length - 1; i >= 0; i--) {\n\t\t\t\t\tqueue.push([['', vt.element], val, i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (vt.type == 'buffer') {\n\t\t\tlet val = obj[name];\n\t\t\tif (val instanceof UniformValue) {\n\t\t\t\tval = val.value;\n\t\t\t}\n\t\t\tif (obj == rootObj) {\n\t\t\t\tif (typeof val === 'object') {\n\t\t\t\t\tintView[offset++] = val.elementCount;\n\t\t\t\t\toffset += 3;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (vt.type == 'struct') {\n\t\t\tlet val;\n\t\t\tif (arrayIndex !== null) {\n\t\t\t\tval = obj[arrayIndex];\n\t\t\t} else {\n\t\t\t\tval = obj[name];\n\t\t\t}\n\t\t\tif (typeof val === 'object') {\n\t\t\t\tfor (let i = vt.fields.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet member = vt.fields[i];\n\t\t\t\t\tif (val instanceof UniformValue) {\n\t\t\t\t\t\tqueue.push([member, val.value, null]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push([member, val, null]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype DrawOptions = {\n\tdepthFormat: GPUTextureFormat;\n\tdepthOnly?: boolean;\n\tdepthTest: boolean;\n\tattachments?: ShadeupTexture2d[];\n\tbackfaceCulling: boolean;\n\tdepthCompare: GPUCompareFunction;\n};\nfunction printImage(url: string, size = 10, afterRead?: () => void) {\n\tvar image = new Image();\n\timage.onload = function () {\n\t\tvar style = [\n\t\t\t'font-size: 1px;',\n\t\t\t'padding: ' + (this.height / 100) * size + 'px ' + (this.width / 100) * size + 'px;',\n\t\t\t'background: url(' + url + ') no-repeat;',\n\t\t\t'background-size: contain;'\n\t\t].join(' ');\n\t\tif (afterRead) {\n\t\t\tafterRead();\n\t\t}\n\t\tconsole.log('%c ', style);\n\t};\n\timage.src = url;\n}\n"
  },
  {
    "path": "lang/shadeup/engine/amd.ts",
    "content": "import resolvePathname from 'resolve-pathname';\n// AMD loader\n\n// This is a very simple AMD loader that is only intended to be used in the\n// context of the editor. It is not intended to be used in production.\n\nexport function globalDefine(name: string, deps: string[], callback: Function): void {\n\tif (typeof name !== 'string') {\n\t\tcallback = deps;\n\t\tdeps = name;\n\t\tname = null;\n\t}\n\tif (!Array.isArray(deps)) {\n\t\tcallback = deps;\n\t\tdeps = [];\n\t}\n\tif (!deps.length && callback.length) {\n\t\tif (callback.length === 1) {\n\t\t\tdeps = ['require'];\n\t\t} else if (callback.length === 2) {\n\t\t\tdeps = ['require', 'exports'];\n\t\t} else {\n\t\t\tdeps = ['require', 'exports', 'module'];\n\t\t}\n\t}\n\tglobalDefine.amd[name] = {\n\t\tdeps: deps,\n\t\tcallback: callback\n\t};\n}\n\nglobalDefine.amd = {\n\trequire: {\n\t\tdeps: [],\n\t\tcallback: function () {\n\t\t\treturn globalRequire;\n\t\t}\n\t},\n\texports: {\n\t\tdeps: [],\n\t\tcallback: function () {\n\t\t\treturn {};\n\t\t}\n\t}\n};\n\nexport function globalRequire(deps: string[]): any {\n\tlet result = [];\n\tfor (let i = 0; i < deps.length; i++) {\n\t\tlet dep = deps[i];\n\t\tif (dep !== 'require' && dep !== 'exports' && dep !== 'module') {\n\t\t\tdep = resolvePathname(dep, '/');\n\n\t\t\tif (!(dep in globalDefine.amd)) {\n\t\t\t\tif (!dep.endsWith('.js')) {\n\t\t\t\t\tdep += '.js';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dep in globalDefine.amd) {\n\t\t\tlet deps = globalDefine.amd[dep].deps;\n\t\t\tlet depsResults = [];\n\t\t\tfor (let d of deps) {\n\t\t\t\tdepsResults.push(globalRequire([d])[0]);\n\t\t\t}\n\n\t\t\tlet callback = globalDefine.amd[dep].callback;\n\n\t\t\tlet exports = callback.apply(null, depsResults);\n\t\t\tif (deps.indexOf('exports') !== -1) {\n\t\t\t\texports = depsResults[deps.indexOf('exports')];\n\t\t\t}\n\t\t\tresult.push(exports);\n\t\t} else {\n\t\t\tthrow new Error(`Cannot find module '${dep}'`);\n\t\t}\n\t}\n\treturn result;\n}\n"
  },
  {
    "path": "lang/shadeup/engine/engine-headless.ts",
    "content": "import type { ShadeupRenderedFile } from '../compiler/common';\nimport { globalDefine, globalRequire } from './amd';\nimport { initInput, type MouseState } from './input/input';\nimport { keyboardKeys } from './input/keyboardKeys';\nimport { ShadeupShaderInstance, ShadeupShaderSource } from './shader';\nimport { initUI } from './ui/ui';\nimport { parse_type, stringify_type, translateIdentifier, translateNumericToGLSL } from './util';\n\nwindow.addEventListener('message', async function (e: MessageEvent) {\n\tvar mainWindow = e.source;\n\tif (mainWindow == null) return;\n\n\tvar result = '';\n\tif (e.data.type == 'frame') {\n\t\ttry {\n\t\t\tlet files: ShadeupRenderedFile[] = e.data.files;\n\t\t\tconsole.log(e.data);\n\n\t\t\tfor (let file of files) {\n\t\t\t\tconsole.log(file);\n\t\t\t\t(() => {\n\t\t\t\t\tlet define = (deps: string[], func: Function) => {\n\t\t\t\t\t\tglobalDefine(file.path, deps, func);\n\t\t\t\t\t};\n\t\t\t\t\tdefine;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst postMessage = (v: any) => mainWindow.postMessage(v, e.origin);\n\t\t\t\t\t\teval(file.contents);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\tresult = e.message;\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tlet outs = globalRequire(['/main.js'])[0];\n\n\t\t\t\tif (typeof outs.main === 'function') {\n\t\t\t\t\tlet result = await outs.main();\n\t\t\t\t\tmainWindow.postMessage({ gid: (window as any)['LONG_GID'], data: result }, e.origin);\n\t\t\t\t} else {\n\t\t\t\t\tresult = 'main is not a function';\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t\tresult = e.message;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tresult = 'eval() threw an exception.';\n\t\t}\n\t\tmainWindow.postMessage(result, e.origin);\n\t}\n});\n"
  },
  {
    "path": "lang/shadeup/engine/engine.ts",
    "content": "import type { IndexMapping } from '../../../../shadeup-frontend/lib/generator/root';\nimport type { ShadeupRenderedFile } from '../compiler/common';\nimport { globalDefine, globalRequire } from './amd';\nimport { initInput, normalizeWheel, type MouseState } from './input/input';\nimport { keyboardKeys } from './input/keyboardKeys';\nimport { ShadeupShaderInstance, ShadeupShaderSource } from './shader';\nimport { initUI } from './ui/ui';\nimport { parse_type, stringify_type, translateIdentifier, translateNumericToGLSL } from './util';\n\nimport { PaintingContext } from '../library/paint';\nimport type { Mesh } from '../../../../shadeup-frontend/lib/std/all';\nimport type { atomic } from '../../../../shadeup-frontend/lib/std/math';\nimport { WebGLAdapter } from './adapters/webgl';\nimport { WebGPUAdapter } from './adapters/webgpu';\nimport {\n\tShaderDispatch,\n\ttype ShaderCodeMapping,\n\ttype ShaderType,\n\tmakePrimitiveUniform,\n\tGraphicsAdapter,\n\tGenericShader,\n\ttype UniformKeyValuePair,\n\ttype UniformValueType,\n\ttype ShaderParamsMapping\n} from './adapters/adapter';\nimport type { buffer } from '../library/buffer';\nimport type { uint } from '../library/types';\nimport type { RenderOptions } from 'src/routes/(app)/farm/render/farm';\nimport type { AssetFileType } from '../../components/common/Asset';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';\n\nimport './setZero';\nimport type { TextureFormat, texture2d } from '../library/texture';\n\nconsole.log('Engine loaded');\n\nlet registeredLibs = new Set<string>();\n\nfunction __shadeup_register_libs(libs: string[]) {\n\tconsole.log('Registering libs', libs);\n\tfor (let lib of libs) {\n\t\tregisteredLibs.add(lib);\n\t}\n}\n\n(window as any).__shadeup_register_libs = __shadeup_register_libs;\n\nlet fpsCanvas = document.getElementById('fps') as HTMLCanvasElement;\nlet fpsCtx = fpsCanvas.getContext('2d');\nfpsCtx.font = 12 * window.devicePixelRatio + 'px monospace';\nif (fpsCanvas) fpsCanvas.style.display = 'none';\nlet canvas: HTMLCanvasElement = document.getElementById('canvas') as HTMLCanvasElement;\nlet container = document.querySelector('.render-container');\n\nif (!container) throw new Error('container not found');\n\nlet preferredAdapter = document.body.dataset.renderingMode ?? 'webgl';\n\nif (navigator.gpu) {\n\t(window as any).shadeupWebGPUAdapter = await navigator.gpu.requestAdapter({\n\t\tpowerPreference: 'high-performance'\n\t});\n\tif (!(window as any).shadeupWebGPUAdapter) {\n\t\tthrow new Error('WebGPU not supported');\n\t}\n\tconsole.log(\n\t\t'Using WebGPU adapter',\n\t\tawait (window as any).shadeupWebGPUAdapter.requestAdapterInfo()\n\t);\n\tlet supported = await (window as any).shadeupWebGPUAdapter.limits;\n\tlet requiredLimits = {\n\t\tmaxStorageBufferBindingSize: Math.min(\n\t\t\t1024 * 1024 * 1024,\n\t\t\tsupported.maxStorageBufferBindingSize\n\t\t), // 1GB\n\t\tmaxBufferSize: Math.min(1024 * 1024 * 1024, supported.maxBufferSize), // 1GB\n\t\tmaxColorAttachmentBytesPerSample: Math.min(64, supported.maxColorAttachmentBytesPerSample), // 64 bytes\n\t\tmaxComputeWorkgroupSizeX: Math.min(1024, supported.maxComputeWorkgroupSizeX),\n\t\tmaxComputeWorkgroupSizeY: Math.min(1024, supported.maxComputeWorkgroupSizeY),\n\t\tmaxComputeWorkgroupSizeZ: Math.min(64, supported.maxComputeWorkgroupSizeZ),\n\t\tmaxComputeInvocationsPerWorkgroup: Math.min(1024, supported.maxComputeInvocationsPerWorkgroup)\n\t};\n\tconsole.log('WebGPU limits', requiredLimits);\n\t(window as any).shadeupWebGPUDevice = await (window as any).shadeupWebGPUAdapter.requestDevice({\n\t\t// requiredLimits: (window as any).shadeupWebGPUAdapter.limits\n\t\trequiredLimits\n\t});\n\t(window as any).shadeupWebGPUDevice.addEventListener('uncapturederror', (e) => {\n\t\tconsole.error('Uncaught WebGPU', e);\n\t\t(window as any).bubbleError((e as GPUUncapturedErrorEvent).error.message);\n\t});\n}\n\nlet graphicsAdapter: GraphicsAdapter;\n\nwindow.onerror = (e) => {\n\tconsole.error(e);\n\t(window as any).bubbleError(e.toString());\n};\n\nif (preferredAdapter == 'webgl') {\n\tgraphicsAdapter = new WebGLAdapter(canvas);\n} else if (preferredAdapter == 'webgpu') {\n\tgraphicsAdapter = new WebGPUAdapter(canvas);\n} else {\n\tthrow new Error('No adapter found');\n}\nconst blank = document.createElement('canvas');\n\nblank.width = canvas.width;\nblank.height = canvas.height;\n\nfunction sizeCanvas() {\n\tlet targetWidth = Math.floor(container.clientWidth * window.devicePixelRatio);\n\tlet targetHeight = Math.floor(container.clientHeight * window.devicePixelRatio);\n\n\tif (canvas.width != targetWidth || canvas.height != targetHeight) {\n\t\tcanvas.width = targetWidth;\n\t\tcanvas.height = targetHeight;\n\t\tblank.width = canvas.width;\n\t\tblank.height = canvas.height;\n\t\tif (graphicsAdapter) graphicsAdapter.setViewport(canvas.width, canvas.height);\n\t}\n\tif ((window as any).env && (window as any).env.camera) {\n\t\t(window as any).env.camera.width = canvas.width;\n\t\t(window as any).env.camera.height = canvas.height;\n\t}\n\tlet targetFpsWidth = Math.floor(96 * window.devicePixelRatio);\n\tlet targetFpsHeight = Math.floor(20 * window.devicePixelRatio);\n\tif (fpsCanvas.width != targetFpsWidth || fpsCanvas.height != targetFpsHeight) {\n\t\tfpsCanvas.width = targetFpsWidth;\n\t\tfpsCanvas.height = targetFpsHeight;\n\t\tfpsCanvas.style.width = '96px';\n\t\tfpsCanvas.style.height = '20px';\n\t}\n\n\tif ((window as any)['paint']) {\n\t\tlet offscreen = (window as any)['paint'].__offscreen_canvas;\n\t\tif (offscreen.width != canvas.width || offscreen.height != canvas.height) {\n\t\t\toffscreen.width = canvas.width;\n\t\t\toffscreen.height = canvas.height;\n\t\t}\n\t}\n}\n\ntry {\n\tgraphicsAdapter.init();\n\n\tsizeCanvas();\n\n\t(window as any)['paint'] = new PaintingContext(canvas, graphicsAdapter as any);\n} catch (e) {\n\tconsole.error(e);\n\tif (preferredAdapter == 'webgpu') {\n\t\tconsole.log('Failed to initialize WebGPU, falling back to WebGL');\n\t\tpreferredAdapter = 'webgl';\n\t\trebuildAdapter();\n\t\tgraphicsAdapter.init();\n\t\t(window as any)['paint'] = new PaintingContext(canvas, graphicsAdapter as any);\n\t}\n}\n\nfunction rebuildAdapter() {\n\tconsole.log('Rebuilding adapter');\n\tlet newCanvas = document.createElement('canvas');\n\tnewCanvas.width = canvas.width;\n\tnewCanvas.height = canvas.height;\n\tnewCanvas.style.maxWidth = canvas.style.maxWidth;\n\tnewCanvas.style.borderRadius = canvas.style.borderRadius;\n\n\tcontainer?.appendChild(newCanvas);\n\tcanvas.remove();\n\tcanvas = newCanvas;\n\n\tgraphicsAdapter.dispose();\n\tif (preferredAdapter == 'webgl') {\n\t\tgraphicsAdapter = new WebGLAdapter(canvas);\n\t} else if (preferredAdapter == 'webgpu') {\n\t\tgraphicsAdapter = new WebGPUAdapter(canvas);\n\t}\n}\n\n(window as any).shadeupGetGraphicsAdapter = () => graphicsAdapter;\n\nlet inputValues = new Map<string, any>();\n\nlet lastFrame = performance.now();\nlet frameCount = 0;\nlet timeCounter = 0;\nlet errCount = 0;\n\nlet screenshotQueue: RenderOptions[] = [];\nlet screenshotQueueResults: { options: RenderOptions; image: string }[] = [];\n\nlet keyboardSink = new Map();\nlet lastFrameMousePosition = [0, 0];\nlet mouseState: MouseState = {\n\tbutton: [false, false, false],\n\tclicked: [false, false, false],\n\tscreen: [0, 0],\n\tuv: [0, 0],\n\tstartScreen: [0, 0],\n\tstartUv: [0, 0],\n\tdeltaUv: [0, 0],\n\tframeDeltaUv: [0, 0],\n\tdeltaScreen: [0, 0],\n\tframeDeltaScreen: [0, 0],\n\tdragging: false,\n\tvelocity: 0,\n\twheel: 0,\n\tfocused: false\n};\n\nlet { getKeyboardState } = initInput(canvas, mouseState, keyboardSink);\n\nlet { frame: uiFrame, puck, slider, preFrame: uiPreFrame, controls } = initUI(canvas);\n\nfunction resetFrameContext() {\n\tlastFrame = performance.now();\n\ttimeCounter = 0;\n\tframeCount = 0;\n\terrCount = 0;\n\tcameraRotX = 0;\n\tcameraRotY = 0;\n\n\tif ((window as any).env.camera) {\n\t\tlet cam = (window as any).env.camera;\n\t\tcam.position = [0, 0, 0];\n\t\tcam.rotation = [1, 0, 0, 0];\n\t\tcam.width = canvas.width;\n\t\tcam.height = canvas.height;\n\t\tcam.fov = 90;\n\t\tcam.near = 1;\n\t\tcam.far = 100000;\n\n\t\tlet cam2d = (window as any).env.camera2d;\n\t\tcam2d.position = [0, 0];\n\t\tcam2d.zoom = 1;\n\n\t\tcameraConfig = { ...defaultCameraConfig };\n\t\ttargetOrbitDistance = cameraConfig.orbitDistance;\n\t}\n}\n\nlet cameraConfig = {\n\tmode: 'orbit-free',\n\n\tspinning: false,\n\n\tinitialPosition: [0, 0, 0],\n\tinitialPitch: 0,\n\tinitialYaw: 0,\n\n\tspeed: 10,\n\n\torbitTarget: [0, 0, 0],\n\torbitDistance: 650,\n\torbitPitch: Math.PI / 6,\n\torbitYaw: Math.PI / 4,\n\torbitMinDistance: 0,\n\torbitMaxDistance: 100000,\n\torbitMinPitch: -Math.PI / 2,\n\torbitMaxPitch: Math.PI / 2 - 0.001\n};\n\nlet defaultCameraConfig = { ...cameraConfig };\n\nfunction updateFrameContext() {\n\tlet delta = performance.now() - lastFrame;\n\tlastFrame = performance.now();\n\ttimeCounter += (delta / 1000) * timeMultiplier;\n\tframeCount += 1 * timeMultiplier;\n\n\tlet lastFramePos = lastFrameMousePosition;\n\n\tmouseState.frameDeltaScreen = [\n\t\tmouseState.screen[0] - lastFramePos[0],\n\t\tmouseState.screen[1] - lastFramePos[1]\n\t];\n\tlet lastFramePosUv = [lastFramePos[0] / canvas.width, lastFramePos[1] / canvas.height];\n\tmouseState.frameDeltaUv = [\n\t\tmouseState.uv[0] - lastFramePosUv[0],\n\t\tmouseState.uv[1] - lastFramePosUv[1]\n\t];\n\n\tmouseState.velocity = Math.sqrt(\n\t\tmouseState.frameDeltaScreen[0] ** 2 + mouseState.frameDeltaScreen[1] ** 2\n\t);\n\n\tlastFrameMousePosition = [...mouseState.screen];\n\n\twindow.env = {\n\t\tcamera:\n\t\t\t(window as any)?.env?.camera ??\n\t\t\t((window as any)._makeCamera ? new (window as any)._makeCamera({}) : null),\n\t\tcamera2d:\n\t\t\t(window as any)?.env?.camera2d ??\n\t\t\t((window as any)._makeCamera2d ? new (window as any)._makeCamera2d({}) : null),\n\t\tdeltaTime: (delta / 1000) * timeMultiplier,\n\t\ttime: timeCounter,\n\t\tframe: frameCount,\n\t\tscreenSize: [canvas.width, canvas.height],\n\t\tkeyboard: getKeyboardState(),\n\t\tmouse: {\n\t\t\t...mouseState\n\t\t},\n\t\tconfigureCamera(options: {\n\t\t\tmode?: 'free' | 'orbit' | 'orbit-free';\n\n\t\t\tspinning?: boolean;\n\n\t\t\tinitialPosition?: [number, number, number];\n\t\t\tinitialPitch?: float;\n\t\t\tinitialYaw?: float;\n\n\t\t\tspeed?: float;\n\n\t\t\torbitTarget?: [number, number, number];\n\t\t\torbitDistance?: float;\n\t\t\torbitPitch?: float;\n\t\t\torbitYaw?: float;\n\t\t\torbitMinDistance?: float;\n\t\t\torbitMaxDistance?: float;\n\t\t\torbitMinPitch?: float;\n\t\t\torbitMaxPitch?: float;\n\t\t}) {\n\t\t\tcameraConfig = { ...cameraConfig, ...options };\n\t\t\ttargetOrbitDistance = cameraConfig.orbitDistance;\n\t\t},\n\t\tinput<T>(key: string, defaultValue: T): T {\n\t\t\treturn inputValues.get(key) ?? defaultValue;\n\t\t},\n\t\toutput<T>(key: string, value: T) {\n\t\t\twindow.parent.postMessage({ type: 'output', key, value }, '*');\n\t\t}\n\t};\n\n\tsizeCanvas();\n}\n\nfunction clear() {\n\ttry {\n\t\tgraphicsAdapter.clear();\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\n(window as any).flushAdapter = async () => {\n\tawait graphicsAdapter.flush();\n};\n\nwindow.addEventListener('resize', sizeCanvas);\nsetTimeout(() => {\n\tsizeCanvas();\n}, 1000);\n\nlet playing = true;\nlet timeMultiplier = 1;\nlet useAnimationFrame = true;\n\nlet now = performance.now();\nlet gatherSpeed = 1;\nlet fpsHistogram = new Array(fpsCanvas.width).fill(0);\nlet fpsHistogramIndex = 0;\nlet lastFps = 0;\nlet fps = 0;\nlet minFps = Infinity;\nlet maxFps = -Infinity;\nlet counter = 0;\nlet isFirstFrame = true;\nlet hasLoadedCode = false;\nlet frameFunc = () => {};\nlet initFunc = () => {};\n\nlet localLerp = (a: number, b: number, t: number) => a * (1 - t) + b * t;\nasync function frameLoop() {\n\ttry {\n\t\tif (movementFrame) movementFrame();\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n\n\tif (playing) {\n\t\tfor (let i = screenshotQueue.length - 1; i >= 0; i--) {\n\t\t\tlet item = screenshotQueue[i];\n\t\t\tlet doCapture = false;\n\t\t\tif ('frame' in item) {\n\t\t\t\tif (item.frame <= frameCount - 1 || (timeMultiplier != 1 && frameCount - 1 > item.frame!)) {\n\t\t\t\t\tdoCapture = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ('time' in item) {\n\t\t\t\tif (timeCounter >= item.time!) {\n\t\t\t\t\tdoCapture = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('Checking screenshot', item, doCapture);\n\n\t\t\tif (doCapture) {\n\t\t\t\t// Wait for all commands to finish\n\n\t\t\t\t// Wait an extra event tick for the paint to finish\n\t\t\t\tperformance.mark('start capture');\n\n\t\t\t\tperformance.mark('wait cap');\n\t\t\t\tif (canvas) {\n\t\t\t\t\tlet cacheScreenshotItem = screenshotQueue[i];\n\t\t\t\t\tscreenshotQueue.splice(i, 1);\n\n\t\t\t\t\tperformance.mark('start to url');\n\t\t\t\t\t// debugger;\n\t\t\t\t\tlet data = canvas.toDataURL('image/png');\n\n\t\t\t\t\tlet ctx = blank.getContext('2d');\n\t\t\t\t\tctx?.drawImage(canvas, 0, 0);\n\t\t\t\t\tlet blankData = ctx?.getImageData(0, 0, blank.width, blank.height);\n\t\t\t\t\tif (cacheScreenshotItem.$tries && cacheScreenshotItem.$tries > 100 && blankData) {\n\t\t\t\t\t\tblankData.data[0] = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!blankData?.data.some((v) => v != 0)) {\n\t\t\t\t\t\tconsole.log('Blank screenshot, retrying', screenshotQueue);\n\t\t\t\t\t\tif (!cacheScreenshotItem.$tries) cacheScreenshotItem.$tries = 0;\n\t\t\t\t\t\tcacheScreenshotItem.$tries++;\n\t\t\t\t\t\tscreenshotQueue.push(cacheScreenshotItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tperformance.mark('end to url');\n\t\t\t\t\t\tconsole.log('Screenshot captured, sending to parent');\n\n\t\t\t\t\t\tscreenshotQueueResults.push({\n\t\t\t\t\t\t\toptions: item,\n\t\t\t\t\t\t\timage: data\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tupdateFrameContext();\n\t\tuiPreFrame();\n\n\t\tfps++;\n\t\tlet then = now;\n\t\tnow = performance.now();\n\t\tlet dt = now - then;\n\t\tcounter += dt;\n\t\tlet smoothness = 0.2;\n\t\tif (counter >= 1000) {\n\t\t\tcounter -= 1000;\n\n\t\t\tif (lastFps <= 1) {\n\t\t\t\tlastFps = 1 / env.deltaTime;\n\t\t\t}\n\t\t\tlastFps = Math.round(lastFps * smoothness + fps * (1 - smoothness));\n\t\t\tfps = 0;\n\t\t}\n\t\tif (fps >= Infinity) {\n\t\t\tfps = lastFps;\n\t\t}\n\n\t\tmaxFps = localLerp(maxFps, lastFps, 0.1);\n\t\tminFps = localLerp(minFps, lastFps, 0.1);\n\n\t\tif (fps < minFps) minFps = lastFps;\n\t\tif (fps > maxFps) maxFps = lastFps;\n\n\t\tif (counter > 50) {\n\t\t\tfpsHistogram[fpsHistogramIndex] = 1000 / dt;\n\t\t\tfpsHistogramIndex = (fpsHistogramIndex + 1) % fpsHistogram.length;\n\t\t}\n\n\t\t// Draw fps histogram and value\n\t\t// fpsCtx.clearColor = 'transparent';\n\t\tlet width = 96 * window.devicePixelRatio;\n\t\tlet histwidth = 64 * window.devicePixelRatio;\n\t\tlet textwidth = 32 * window.devicePixelRatio;\n\t\tlet height = 20 * window.devicePixelRatio;\n\t\tfpsCtx.clearRect(0, 0, width, height);\n\t\tfpsCtx.fillStyle = 'white';\n\n\t\tfpsCtx?.beginPath();\n\n\t\tif (true) {\n\t\t\tfor (let j = 0; j < fpsHistogram.length; j++) {\n\t\t\t\tlet rev = fpsHistogramIndex - j;\n\n\t\t\t\tlet i = rev < 0 ? fpsHistogram.length + rev : rev;\n\t\t\t\tlet x = (1 - j / fpsHistogram.length) * histwidth;\n\t\t\t\tlet drawHeight = 12 * window.devicePixelRatio;\n\n\t\t\t\tlet fpsPercent = Math.min(1, fpsHistogram[i] / maxFps);\n\n\t\t\t\tlet top = height - drawHeight * fpsPercent;\n\n\t\t\t\tif (isNaN(top)) {\n\t\t\t\t\ttop = height;\n\t\t\t\t}\n\t\t\t\tif (isNaN(x)) {\n\t\t\t\t\tx = 0;\n\t\t\t\t}\n\t\t\t\tif (j == 0) {\n\t\t\t\t\tfpsCtx?.moveTo(textwidth + x, top);\n\t\t\t\t}\n\t\t\t\t// fpsCtx.fillRect(textwidth + x, top, (histwidth / fpsHistogram.length) * 2, bottom - top);\n\t\t\t\tfpsCtx.lineTo(textwidth + x, top);\n\t\t\t}\n\n\t\t\tfpsCtx.lineTo(textwidth, height);\n\t\t\tfpsCtx.lineTo(width, height);\n\n\t\t\tfpsCtx.fill();\n\t\t}\n\n\t\tfpsCtx.fillStyle = 'white';\n\t\tlet fontStyle = 12 * window.devicePixelRatio + 'px monospace';\n\t\tif (fpsCtx.font != fontStyle) {\n\t\t\tfpsCtx.font = fontStyle;\n\t\t}\n\t\t// fpsCtx.font = 12 * window.devicePixelRatio + 'px monospace';\n\t\tfpsCtx.fillText(lastFps, 0, 18 * window.devicePixelRatio);\n\t\tfpsCtx.lineWidth = 1;\n\t\t// fpsCtx.strokeStyle = 'black';\n\t\t// fpsCtx.strokeText(lastFps, 0, 24);\n\n\t\ttry {\n\t\t\tlet now = performance.now();\n\t\t\tif (graphicsAdapter instanceof WebGPUAdapter) {\n\t\t\t\t// We let the adapter clear just before the first draw call to the screen\n\t\t\t} else {\n\t\t\t\tclear();\n\t\t\t}\n\t\t\t// performance.mark('frameStart');\n\n\t\t\tawait frameFunc();\n\n\t\t\tpaint.flush();\n\t\t\tgraphicsAdapter.flush();\n\t\t\tif (graphicsAdapter instanceof WebGPUAdapter) {\n\t\t\t\tgraphicsAdapter.trace('endFrame\\n\\n', {});\n\t\t\t}\n\t\t\tgraphicsAdapter.switchContext('draw');\n\n\t\t\t// performance.mark('frameEnd');\n\n\t\t\tfor (let tex of textureDestroyQueue) {\n\t\t\t\tif (tex.adapter) {\n\t\t\t\t\ttex.adapter.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttextureDestroyQueue = [];\n\t\t} catch (e) {\n\t\t\tif (errCount < 10) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tif ((window as any).bubbleError) (window as any).bubbleError(e.toString() + e.stack);\n\t\t\t\terrCount++;\n\t\t\t\tif (errCount === 10) {\n\t\t\t\t\tconsole.warn('Too many errors, slowing logs');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrCount++;\n\t\t\t\tif (errCount % 100 === 0) {\n\t\t\t\t\tif ((window as any).bubbleError) (window as any).bubbleError(e.toString() + e.stack);\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tuiFrame();\n\n\t\tmouseState.clicked[0] = false;\n\t\tmouseState.clicked[1] = false;\n\t\tmouseState.clicked[2] = false;\n\n\t\tfor (let statKey of stats.keys()) {\n\t\t\tif ((statsMark.get(statKey) ?? 0) <= 0) {\n\t\t\t\tstats.get(statKey)?.remove();\n\t\t\t\tstats.delete(statKey);\n\t\t\t\tstatsMark.delete(statKey);\n\t\t\t} else {\n\t\t\t\tstatsMark.set(statKey, statsMark.get(statKey)! - 1);\n\t\t\t}\n\t\t}\n\n\t\tfor (let statKey of statsGraph.keys()) {\n\t\t\tif ((statsGraphMark.get(statKey) ?? 0) <= 0) {\n\t\t\t\tstatsGraph.get(statKey)?.graph.parentElement?.remove();\n\t\t\t\tstatsGraph.delete(statKey);\n\t\t\t\tstatsGraphMark.delete(statKey);\n\t\t\t} else {\n\t\t\t\tstatsGraphMark.set(statKey, statsGraphMark.get(statKey)! - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (screenshotQueue.length == 0 && screenshotQueueResults.length > 0) {\n\t\t\tconsole.log('Posting screenshot results');\n\t\t\twindow.parent.postMessage({ type: 'screenshot-results', data: screenshotQueueResults }, '*');\n\t\t\tscreenshotQueueResults = [];\n\t\t}\n\n\t\tif (isFirstFrame && hasLoadedCode) {\n\t\t\tisFirstFrame = false;\n\t\t\t(async () => {\n\t\t\t\tawait graphicsAdapter.waitForDraw();\n\t\t\t\twindow.parent.postMessage({ type: 'firstFrame' }, '*');\n\t\t\t})();\n\t\t}\n\t}\n}\n\n// frameLoop();\n\nfunction __shadeup_gen_native_shader(code: ShaderCodeMapping, type: ShaderType) {\n\treturn graphicsAdapter.createShader(code, type);\n}\n\n(window as any).__shadeup_gen_native_shader = __shadeup_gen_native_shader;\n\nlet registeredShaders = new Map<string, ShadeupShaderSource>();\n\nfunction __shadeup_gen_shader(\n\tkey: string,\n\tparams: ShaderParamsMapping,\n\tcode: ShaderCodeMapping,\n\tindexMapping: IndexMapping\n) {\n\tregisteredShaders.set(key, new ShadeupShaderSource(params, code, indexMapping));\n}\n\n(window as any).__shadeup_gen_shader = __shadeup_gen_shader;\n\nfunction __shadeup_make_shader_inst(\n\tkey: string,\n\tparams: { [key: string]: string },\n\tclosure: Function\n) {\n\tlet shader = registeredShaders.get(key);\n\tif (!shader) {\n\t\tthrow new Error('Shader not found');\n\t}\n\n\treturn shader.instance(params);\n}\n\n(window as any).__shadeup_make_shader_inst = __shadeup_make_shader_inst;\n\nlet fullscreenVertexShader: GenericShader | null = null;\n\nexport type TextureComponentType = `${'float' | 'int' | 'uint'}${'' | '2' | '3' | '4'}` | 'uint8';\n\nexport class ShadeupTexture3d {\n\tsize: [number, number, number] = [0, 0, 0];\n\twidth: number = 0;\n\theight: number = 0;\n\tdepth: number = 0;\n\n\tadapter: GraphicsAdapter | null = null;\n\tinnerType: TextureComponentType = 'float4';\n\n\tisBound = false;\n\tboundUnit = -1;\n\n\tdirty = true;\n\n\tpayload: any;\n\n\tconstructor() {}\n\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\n\t__index(index: [number, number, number]): number[] {\n\t\treturn [0, 0, 0, 0];\n\t\t// return (window as any).__shadeup_texture2d_index(this, index);\n\t}\n\n\t__index_assign(index: [number, number, number], value: number[]) {\n\t\t// (window as any).__shadeup_texture2d_index_assign(this, index, value);\n\t}\n}\n\nlet textureDestroyQueue: ShadeupTexture2d[] = [];\n\nlet shadeupTextureCounter = 0;\n\nexport class ShadeupTexture2d {\n\tsymbol: string;\n\timage: HTMLCanvasElement | null = null;\n\tloading: boolean = true;\n\tsize: [number, number] = [0, 0];\n\twidth: number = 0;\n\theight: number = 0;\n\tpaint: PaintingContext | null = null;\n\tadapter: GraphicsAdapter | null = null;\n\n\tinnerType: TextureComponentType = 'float4';\n\n\tisBound = false;\n\tboundUnit = -1;\n\n\tdirty = true;\n\tcpuReadDirty = true;\n\tcpuWriteDirty = false;\n\tcpuData: Uint8Array | Uint32Array | Int32Array | Float32Array | null = null;\n\tdataIndexStride = 4;\n\tversion = 0;\n\n\tpayload: any;\n\n\tdata: ArrayBuffer | null = null;\n\n\tconstructor() {\n\t\tthis.symbol = `stx${shadeupTextureCounter++}`;\n\t}\n\n\tdestroy() {\n\t\ttextureDestroyQueue.push(this);\n\t}\n\n\tasync download() {\n\t\tif (!this.adapter) return;\n\n\t\tif (this.adapter instanceof WebGPUAdapter) {\n\t\t\tif (this.adapter.pendingWrites > 0) {\n\t\t\t\tgraphicsAdapter.flush();\n\t\t\t}\n\t\t\tif (this.adapter.storageDirty) {\n\t\t\t\tthis.cpuReadDirty = true;\n\t\t\t}\n\t\t}\n\t\tif (this.cpuReadDirty) {\n\t\t\tif (this.dirty) {\n\t\t\t\tthis.flush();\n\t\t\t}\n\n\t\t\tthis.cpuReadDirty = false;\n\n\t\t\tthis.cpuData = await this.adapter.downloadImage();\n\t\t}\n\t}\n\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array {\n\t\treturn this.cpuData!;\n\t}\n\n\tdownloadAsync(): Promise<void> {\n\t\treturn this.download();\n\t}\n\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\n\t__index(index: [number, number]): number[] | number {\n\t\t// if (this.cpuReadDirty) {\n\t\t// \tawait this.download();\n\t\t// }\n\n\t\tif (!this.cpuData) return [0, 0, 0, 0];\n\n\t\treturn this.getFast(index);\n\t}\n\n\tgetFast: any;\n\tsetFast: any;\n\n\tinit() {\n\t\tthis.dataIndexStride = parseInt(this.innerType[this.innerType.length - 1] as any) || 1;\n\t\tif (this.innerType == 'uint8') {\n\t\t\tthis.dataIndexStride = 4;\n\t\t}\n\t\tlet width = this.size[0];\n\n\t\tif (this.innerType == 'uint8') {\n\t\t\tthis.getFast = (index: [number, number]) => {\n\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\treturn [\n\t\t\t\t\tthis.cpuData![i] / 255,\n\t\t\t\t\tthis.cpuData![i + 1] / 255,\n\t\t\t\t\tthis.cpuData![i + 2] / 255,\n\t\t\t\t\tthis.cpuData![i + 3] / 255\n\t\t\t\t];\n\t\t\t};\n\t\t} else {\n\t\t\tif (this.dataIndexStride == 4) {\n\t\t\t\tthis.getFast = (index: [number, number]) => {\n\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\treturn [\n\t\t\t\t\t\tthis.cpuData![i],\n\t\t\t\t\t\tthis.cpuData![i + 1],\n\t\t\t\t\t\tthis.cpuData![i + 2],\n\t\t\t\t\t\tthis.cpuData![i + 3]\n\t\t\t\t\t];\n\t\t\t\t};\n\t\t\t} else if (this.dataIndexStride == 3) {\n\t\t\t\tthis.getFast = (index: [number, number]) => {\n\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\treturn [this.cpuData![i], this.cpuData![i + 1], this.cpuData![i + 2]];\n\t\t\t\t};\n\t\t\t} else if (this.dataIndexStride == 2) {\n\t\t\t\tthis.getFast = (index: [number, number]) => {\n\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\treturn [this.cpuData![i], this.cpuData![i + 1]];\n\t\t\t\t};\n\t\t\t} else if (this.dataIndexStride == 1) {\n\t\t\t\tthis.getFast = (index: [number, number]) => {\n\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\treturn this.cpuData![i];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.dataIndexStride == 1) {\n\t\t\tthis.setFast = (index: [number, number], val: any) => {\n\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\tthis.cpuData![i] = val;\n\t\t\t};\n\t\t} else {\n\t\t\tif (this.innerType == 'uint8') {\n\t\t\t\tthis.setFast = (index: [number, number], value: any) => {\n\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\t\tthis.cpuData![i] = value[2] * 255;\n\t\t\t\t\tthis.cpuData![i + 1] = value[1] * 255;\n\t\t\t\t\tthis.cpuData![i + 2] = value[0] * 255;\n\t\t\t\t\tthis.cpuData![i + 3] = value[3] * 255;\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tif (this.dataIndexStride == 4) {\n\t\t\t\t\tthis.setFast = (index: [number, number], value: any) => {\n\t\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\t\t\tthis.cpuData![i] = value[0];\n\t\t\t\t\t\tthis.cpuData![i + 1] = value[1];\n\t\t\t\t\t\tthis.cpuData![i + 2] = value[2];\n\t\t\t\t\t\tthis.cpuData![i + 3] = value[3];\n\t\t\t\t\t};\n\t\t\t\t} else if (this.dataIndexStride == 3) {\n\t\t\t\t\tthis.setFast = (index: [number, number], value: any) => {\n\t\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\t\t\tthis.cpuData![i] = value[0];\n\t\t\t\t\t\tthis.cpuData![i + 1] = value[1];\n\t\t\t\t\t\tthis.cpuData![i + 2] = value[2];\n\t\t\t\t\t};\n\t\t\t\t} else if (this.dataIndexStride == 2) {\n\t\t\t\t\tthis.setFast = (index: [number, number], value: any) => {\n\t\t\t\t\t\tlet i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n\t\t\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\t\t\tthis.cpuData![i] = value[0];\n\n\t\t\t\t\t\tthis.cpuData![i + 1] = value[1];\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t__index_assign(index: [number, number], value: number[] | number) {\n\t\t// if (this.cpuReadDirty) {\n\t\t// \tawait this.download();\n\t\t// }\n\n\t\tif (!this.cpuData) this.fillCpuData();\n\n\t\tthis.setFast(index, value);\n\t}\n\n\tfillCpuData() {\n\t\tlet arr;\n\t\tlet components = this.dataIndexStride;\n\t\tif (this.innerType.startsWith('float')) {\n\t\t\tarr = new Float32Array(this.width * this.height * this.dataIndexStride);\n\t\t} else if (this.innerType.startsWith('int')) {\n\t\t\tarr = new Int32Array(this.width * this.height * this.dataIndexStride);\n\t\t} else if (this.innerType.startsWith('uint')) {\n\t\t\tarr = new Uint32Array(this.width * this.height * this.dataIndexStride);\n\t\t} else if (this.innerType == 'uint8') {\n\t\t\tarr = new Uint8Array(this.width * this.height * this.dataIndexStride);\n\t\t} else {\n\t\t\tthrow new Error('Unknown texture type ' + this.innerType);\n\t\t}\n\n\t\tthis.cpuData = arr;\n\t}\n\n\tsample(pos: [number, number]): number[] {\n\t\treturn [0, 0, 0, 0];\n\t}\n\n\tcpuFlush() {\n\t\tif (this.cpuData && this.cpuWriteDirty && this.adapter) {\n\t\t\tthis.adapter.uploadImage(this.cpuData);\n\t\t}\n\t}\n\tupload() {\n\t\tthis.cpuFlush();\n\t}\n\n\tflush(flushStorage = true) {\n\t\tthis.cpuFlush();\n\n\t\tif (flushStorage) {\n\t\t\tif (this.adapter instanceof WebGPUAdapter) {\n\t\t\t\tif (this.adapter.storageDirty) {\n\t\t\t\t\tthis.adapter.flushStorage();\n\t\t\t\t\tthis.cpuReadDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.dirty) {\n\t\t\tthis.dirty = false;\n\t\t\tif (this.adapter?.contextMode == 'draw') {\n\t\t\t\tthis.adapter?.flush();\n\t\t\t} else {\n\t\t\t\tthis.paint?.flush();\n\t\t\t}\n\t\t}\n\t}\n\n\tdrawAdvanced(config: {\n\t\tfragment: ShadeupShaderInstance;\n\t\tvertex: ShadeupShaderInstance;\n\t\tmesh?: Mesh;\n\t\tinstances?: number;\n\t\tindirect?: buffer<uint> | buffer<atomic<uint>>;\n\t\tindirectOffset?: int | uint;\n\t\tindexBuffer?: buffer<uint>;\n\t\tattachments: ShadeupTexture2d[];\n\t\tdepthTest?: boolean;\n\t\tdepthOnly?: boolean;\n\t\tdepth?: ShadeupTexture2d;\n\t\tdepthCompare?:\n\t\t\t| 'greater'\n\t\t\t| 'less'\n\t\t\t| 'equal'\n\t\t\t| 'greater-equal'\n\t\t\t| 'less-equal'\n\t\t\t| 'not-equal'\n\t\t\t| 'always'\n\t\t\t| 'never';\n\t\tbackfaceCulling?: boolean;\n\t}) {\n\t\tif (!this.adapter) return;\n\t\tlet drawCall = new ShaderDispatch('draw');\n\t\tif (config.mesh) {\n\t\t\tdrawCall.drawType = 'geometry';\n\t\t} else if (config.indexBuffer) {\n\t\t\tdrawCall.drawType = 'indexed';\n\t\t}\n\n\t\tif (config.depth) {\n\t\t\tdrawCall.overrideDepth = config.depth;\n\t\t}\n\n\t\tif (config.indirect) {\n\t\t\tdrawCall.indirectBuffer = config.indirect;\n\t\t}\n\n\t\tif (config.depthCompare) {\n\t\t\tdrawCall.depthCompare = config.depthCompare;\n\t\t}\n\n\t\tif ('backfaceCulling' in config) {\n\t\t\tdrawCall.backfaceCulling = config.backfaceCulling!;\n\t\t}\n\n\t\tif ('indirectOffset' in config) {\n\t\t\tdrawCall.indirectOffset = config.indirectOffset!;\n\t\t}\n\n\t\tdrawCall.instanceCount = config.instances ?? 1;\n\n\t\tdrawCall.attachments = config.attachments ?? null;\n\t\tdrawCall.depthOnly = config.depthOnly ?? false;\n\n\t\tlet fragShader = config.fragment.get(this.adapter, 'fragment', {\n\t\t\tattachments: config.attachments ? config.attachments.map((a) => a.innerType) : undefined\n\t\t});\n\t\tif (!fragShader) {\n\t\t\tthrow new Error('Fragment shader not found');\n\t\t}\n\n\t\tdrawCall.setFragmentShader(fragShader);\n\n\t\tlet vertShader = config.vertex.get(this.adapter, 'vertex');\n\n\t\tif (!vertShader) {\n\t\t\tthrow new Error('Vertex shader not found');\n\t\t}\n\n\t\tdrawCall.setVertexShader(vertShader);\n\n\t\tconfig.fragment.bindUniforms(drawCall.fragmentUniforms);\n\n\t\tconfig.vertex.bindUniforms(drawCall.vertexUniforms);\n\n\t\tif (config.mesh) {\n\t\t\tdrawCall.setGeometry(config.mesh as any);\n\t\t} else if (config.indexBuffer) {\n\t\t\tdrawCall.setIndexBuffer(config.indexBuffer);\n\t\t}\n\n\t\tthis.adapter.dispatch(drawCall, {\n\t\t\tdepthTest: config.depthTest ?? true\n\t\t});\n\t}\n\n\tdraw(geometry: Mesh | any, vertexShader: shader<any, any>, pixelShader: shader<any, any>): void;\n\tdraw(fullScreenPixelShader: shader<any, any>): void;\n\tdraw(first: Mesh | any | shader<any, any>, second?: shader<any, any>, third?: shader<any, any>) {\n\t\tthis.cpuFlush();\n\n\t\tthis.dirty = true;\n\t\tthis.cpuReadDirty = true;\n\t\tthis.version++;\n\t\tif ('vertices' in first && second && third) {\n\t\t\tthis._draw_geometry(first, second as any, third as any);\n\t\t} else if (first && !second && !third) {\n\t\t\tthis._draw_fullscreen(first as any);\n\t\t}\n\t}\n\tfullscreenVertexShaderInternal: GenericShader | null = null;\n\t_draw_fullscreen(pixelShaderInst: ShadeupShaderInstance) {\n\t\tif (!this.adapter) return;\n\n\t\tif (!this.fullscreenVertexShaderInternal) {\n\t\t\tthis.fullscreenVertexShaderInternal = this.adapter.createShader(\n\t\t\t\t{\n\t\t\t\t\twebgl: `#version 300 es\n\t\t\t\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tin vec3 a_position;\n\t\t\tin vec3 a_normal;\n\t\t\tin vec3 a_tangent;\n\t\t\tin vec3 a_bitangent;\n\t\t\tin vec2 a_uv;\n\t\t\tin vec4 a_color;\n\t\n\t\t\tout vec3 _v_position;\n\t\t\tout vec3 _v_normal;\n\t\t\tout vec3 _v_tangent;\n\t\t\tout vec3 _v_bitangent;\n\t\t\tout vec2 _v_uv;\n\t\t\tout vec4 _v_color;\n\t\t\t\n\t\t\tvoid main(void) {\n\t\t\tfloat x = float((gl_VertexID & 1) << 2);\n\t\t\tfloat y = float((gl_VertexID & 2) << 1);\n\t\t\t_v_uv.x = x * 0.5;\n\t\t\t_v_uv.y = 1.f - (y * 0.5);\n\t\t\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\t\t\t}`,\n\t\t\t\t\twebgpu: `\n\t\t\t\tstruct VertexOutput {\n\t\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t\t@location(1) Tangent : vec3<f32>,\n\t\t\t\t\t@location(2) Bitangent : vec3<f32>,\n\t\t\t\t\t@location(3) TexCoord : vec2<f32>,\n\t\t\t\t\t@location(4) Color : vec4<f32>,\n\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex : u32,\n\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t};\n\t\t\t\n\t\t\t\t@vertex\n\t\t\t\tfn main(\n\t\t\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t\t\t) -> VertexOutput {\n\t\t\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\t\t\tvar output : VertexOutput;\n\t\t\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\t\t\toutput.Tangent = vec3<f32>(0.0, 1.0, 0.0);\n\t\t\t\t\toutput.Bitangent = vec3<f32>(0.0, 0.0, 1.0);\n\t\t\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\toutput.instanceIndex = 0;\n\t\t\t\n\t\t\t\t\treturn output;\n\t\t\t\t}\n\t\t\t\t`,\n\t\t\t\t\tsoftware: () => {}\n\t\t\t\t},\n\t\t\t\t'vertex'\n\t\t\t);\n\t\t}\n\n\t\tif (!this.fullscreenVertexShaderInternal) {\n\t\t\tthrow new Error('Fullscreen vertex shader not found');\n\t\t}\n\n\t\tlet drawCall = new ShaderDispatch('draw');\n\t\tdrawCall.drawType = 'screen';\n\t\tdrawCall.setVertexUniform(\n\t\t\t'_vtex_canvas',\n\t\t\tmakePrimitiveUniform(\n\t\t\t\t{\n\t\t\t\t\ttype: 'primitive',\n\t\t\t\t\tname: 'float2'\n\t\t\t\t},\n\t\t\t\t[this.size[0], this.size[1]]\n\t\t\t)\n\t\t);\n\n\t\tdrawCall.setVertexShader(this.fullscreenVertexShaderInternal);\n\t\tlet fragShader = pixelShaderInst.get(this.adapter, 'fragment');\n\t\tif (!fragShader) {\n\t\t\tthrow new Error('Fragment shader not found');\n\t\t}\n\n\t\tdrawCall.setFragmentShader(fragShader);\n\n\t\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\t\tif (!this.$geo) {\n\t\t\tthis.$geo = makeFullscreenQuadGeometry();\n\t\t}\n\n\t\tdrawCall.setGeometry(this.$geo);\n\n\t\tthis.adapter.dispatch(drawCall, {\n\t\t\tdepthTest: false\n\t\t});\n\t}\n\n\t_draw_geometry(\n\t\tgeometry: Geometry,\n\t\tvertexShaderInst: ShadeupShaderInstance,\n\t\tpixelShaderInst: ShadeupShaderInstance\n\t) {\n\t\tthis.dirty = true;\n\t\tthis.cpuReadDirty = true;\n\t\tthis.cpuFlush();\n\t\tthis.version++;\n\t\tif (!this.adapter) return;\n\t\tlet drawCall = new ShaderDispatch('draw');\n\t\tdrawCall.drawType = 'geometry';\n\t\tdrawCall.setVertexUniform(\n\t\t\t'_vtex_canvas',\n\t\t\tmakePrimitiveUniform(\n\t\t\t\t{\n\t\t\t\t\ttype: 'primitive',\n\t\t\t\t\tname: 'float2'\n\t\t\t\t},\n\t\t\t\t[this.size[0], this.size[1]]\n\t\t\t)\n\t\t);\n\n\t\tlet fragShader = pixelShaderInst.get(this.adapter, 'fragment');\n\t\tif (!fragShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setFragmentShader(fragShader);\n\n\t\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\t\tlet vertShader = vertexShaderInst.get(this.adapter, 'vertex');\n\t\tif (!vertShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setVertexShader(vertShader);\n\n\t\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\t\tdrawCall.setGeometry(geometry);\n\n\t\tthis.adapter.dispatch(drawCall);\n\t}\n\n\tdrawIndexed(\n\t\tindexBuffer: buffer<uint>,\n\t\tvertexShaderInst: ShadeupShaderInstance,\n\t\tpixelShaderInst: ShadeupShaderInstance\n\t) {\n\t\tthis.dirty = true;\n\t\tthis.cpuReadDirty = true;\n\t\tthis.cpuFlush();\n\t\tthis.version++;\n\t\tif (!this.adapter) return;\n\n\t\tlet drawCall = new ShaderDispatch('draw');\n\t\tdrawCall.drawType = 'indexed';\n\t\tdrawCall.setVertexUniform(\n\t\t\t'_vtex_canvas',\n\t\t\tmakePrimitiveUniform(\n\t\t\t\t{\n\t\t\t\t\ttype: 'primitive',\n\t\t\t\t\tname: 'float2'\n\t\t\t\t},\n\t\t\t\t[canvas.width, canvas.height]\n\t\t\t)\n\t\t);\n\n\t\tlet fragShader = pixelShaderInst.get(this.adapter, 'fragment');\n\t\tif (!fragShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setFragmentShader(fragShader);\n\n\t\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\t\tlet vertShader = vertexShaderInst.get(this.adapter, 'vertex-indexed');\n\t\tif (!vertShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setVertexShader(vertShader);\n\n\t\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\t\tdrawCall.setIndexBuffer(indexBuffer);\n\n\t\tthis.adapter.dispatch(drawCall);\n\t}\n\n\tclear(color: float | [number, number, number, number] | 'auto' = 'auto') {\n\t\tthis.dirty = true;\n\t\tthis.cpuReadDirty = true;\n\t\tthis.cpuFlush();\n\t\tthis.version++;\n\t\tif (!this.adapter) return;\n\t\tthis.adapter.clear(false, color);\n\t}\n\n\tdrawCount(\n\t\tcount: number,\n\t\tvertexShaderInst: ShadeupShaderInstance,\n\t\tpixelShaderInst: ShadeupShaderInstance\n\t) {\n\t\tthis.dirty = true;\n\t\tthis.cpuReadDirty = true;\n\t\tthis.cpuFlush();\n\t\tthis.version++;\n\t\tif (!this.adapter) return;\n\t\tlet drawCall = new ShaderDispatch('draw');\n\t\tdrawCall.drawType = 'count';\n\t\tdrawCall.drawCount = count;\n\t\tdrawCall.setVertexUniform(\n\t\t\t'_vtex_canvas',\n\t\t\tmakePrimitiveUniform(\n\t\t\t\t{\n\t\t\t\t\ttype: 'primitive',\n\t\t\t\t\tname: 'float2'\n\t\t\t\t},\n\t\t\t\t[canvas.width, canvas.height]\n\t\t\t)\n\t\t);\n\n\t\tlet fragShader = pixelShaderInst.get(this.adapter, 'fragment');\n\t\tif (!fragShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setFragmentShader(fragShader);\n\n\t\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\t\tlet vertShader = vertexShaderInst.get(this.adapter, 'vertex-indexed');\n\t\tif (!vertShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setVertexShader(vertShader);\n\n\t\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\t\tthis.adapter.dispatch(drawCall);\n\t}\n\n\tdrawInstanced(\n\t\tmesh: Mesh,\n\t\tinstanceCount: number,\n\t\tvertexShaderInst: ShadeupShaderInstance,\n\t\tpixelShaderInst: ShadeupShaderInstance\n\t) {\n\t\tif (!this.adapter) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet drawCall = new ShaderDispatch('draw');\n\t\tdrawCall.drawType = 'geometry';\n\t\tdrawCall.instanceCount = instanceCount;\n\t\tdrawCall.setVertexUniform(\n\t\t\t'_vtex_canvas',\n\t\t\tmakePrimitiveUniform(\n\t\t\t\t{\n\t\t\t\t\ttype: 'primitive',\n\t\t\t\t\tname: 'float2'\n\t\t\t\t},\n\t\t\t\t[canvas.width, canvas.height]\n\t\t\t)\n\t\t);\n\n\t\tlet fragShader = pixelShaderInst.get(this.adapter, 'fragment');\n\t\tif (!fragShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setFragmentShader(fragShader);\n\n\t\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\t\tlet vertShader = vertexShaderInst.get(this.adapter, 'vertex');\n\t\tif (!vertShader) {\n\t\t\treturn;\n\t\t}\n\n\t\tdrawCall.setVertexShader(vertShader);\n\n\t\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\t\tdrawCall.setGeometry(mesh);\n\n\t\tthis.adapter.dispatch(drawCall);\n\t}\n}\n\nlet registeredLoads: [string, string][] = [];\n\n(window as any).__shadeup_register_loads = (ids: [string, string][]) => {\n\tregisteredLoads.push(...ids);\n};\n\n(window as any).load = (id: string) => {\n\tlet asset = loadedAssets.get(id);\n\tif (!asset) {\n\t\tthrow new Error('Asset not found');\n\t}\n\n\tif (asset instanceof HTMLCanvasElement) {\n\t\tif (primedTextureAssets.has(id)) {\n\t\t\tlet a = primedTextureAssets.get(id)!;\n\t\t\tprimedTextureAssets.delete(id);\n\t\t\treturn a;\n\t\t}\n\n\t\tlet tex = (window as any).shadeupMakeTextureInternal(\n\t\t\t[asset.width, asset.height],\n\t\t\t'8bit',\n\t\t\t'uint8'\n\t\t) as ShadeupTexture2d;\n\t\ttex.adapter?.drawImage(asset, 0, 0, asset.width, asset.height);\n\t\ttex.adapter?.flush();\n\n\t\treturn tex;\n\t} else if (asset && asset.clone) {\n\t\treturn asset.clone();\n\t}\n\n\treturn asset;\n};\n\nconst FormatInnerTypeMapping: {\n\t[key in `${Exclude<TextureFormat, 'auto'>}-${TextureComponentType}`]: GPUTextureFormat;\n} = {\n\t'8bit-float': 'r16float',\n\t'8bit-float2': 'rg16float',\n\t'8bit-float3': 'rgba16float',\n\t'8bit-float4': 'rgba16float',\n\t'16bit-float': 'r16float',\n\t'16bit-float2': 'rg16float',\n\t'16bit-float3': 'rgba16float',\n\t'16bit-float4': 'rgba16float',\n\t'32bit-float': 'r32float',\n\t'32bit-float2': 'rg32float',\n\t'32bit-float3': 'rgba32float',\n\t'32bit-float4': 'rgba32float',\n\t'16bit-int': 'r16sint',\n\t'16bit-int2': 'rg16sint',\n\t'16bit-int3': 'rgba16sint',\n\t'16bit-int4': 'rgba16sint',\n\t'8bit-int': 'r8sint',\n\t'8bit-int2': 'rg8sint',\n\t'8bit-int3': 'rgba8sint',\n\t'8bit-int4': 'rgba8sint',\n\t'32bit-int': 'r32sint',\n\t'32bit-int2': 'rg32sint',\n\t'32bit-int3': 'rgba32sint',\n\t'32bit-int4': 'rgba32sint',\n\t'8bit-uint': 'r8uint',\n\t'8bit-uint2': 'rg8uint',\n\t'8bit-uint3': 'rgba8uint',\n\t'8bit-uint4': 'rgba8uint',\n\t'16bit-uint': 'r16uint',\n\t'16bit-uint2': 'rg16uint',\n\t'16bit-uint3': 'rgba16uint',\n\t'16bit-uint4': 'rgba16uint',\n\t'32bit-uint': 'r32uint',\n\t'32bit-uint2': 'rg32uint',\n\t'32bit-uint3': 'rgba32uint',\n\t'32bit-uint4': 'rgba32uint',\n\n\t'8bit-uint8': 'rgba8unorm',\n\t'16bit-uint8': 'rgba16uint',\n\t'32bit-uint8': 'rgba32float',\n\n\t'depth-uint8': 'depth24plus',\n\t'depth-float': 'depth24plus',\n\t'depth-float2': 'depth24plus',\n\t'depth-float3': 'depth24plus',\n\t'depth-float4': 'depth24plus',\n\t'depth-int': 'depth24plus',\n\t'depth-int2': 'depth24plus',\n\t'depth-int3': 'depth24plus',\n\t'depth-int4': 'depth24plus',\n\t'depth-uint': 'depth24plus',\n\t'depth-uint2': 'depth24plus',\n\t'depth-uint3': 'depth24plus',\n\t'depth-uint4': 'depth24plus',\n\n\t'depth-32-uint8': 'depth32float',\n\t'depth-32-float': 'depth32float',\n\t'depth-32-float2': 'depth32float',\n\t'depth-32-float3': 'depth32float',\n\t'depth-32-float4': 'depth32float',\n\t'depth-32-int': 'depth32float',\n\t'depth-32-int2': 'depth32float',\n\t'depth-32-int3': 'depth32float',\n\t'depth-32-int4': 'depth32float',\n\t'depth-32-uint': 'depth32float',\n\t'depth-32-uint2': 'depth32float',\n\t'depth-32-uint3': 'depth32float',\n\t'depth-32-uint4': 'depth32float'\n};\nfunction shadeupMakeTextureInternal(\n\tsize: [number, number] | [number, number, number],\n\tformat: TextureFormat,\n\tinnerType: TextureComponentType = 'float4'\n) {\n\tif (size.length == 3) {\n\t\tsize = [Math.floor(size[0]), Math.floor(size[1]), Math.floor(size[2])];\n\t\tlet tex = new ShadeupTexture3d();\n\t\ttex.innerType = innerType;\n\t\ttex.size = size;\n\t\ttex.width = size[0];\n\t\ttex.height = size[1];\n\t\ttex.depth = size[2];\n\t\tif (preferredAdapter == 'webgl') {\n\t\t\ttex.adapter = new WebGLAdapter(null);\n\t\t} else if (preferredAdapter == 'webgpu') {\n\t\t\ttex.adapter = new WebGPUAdapter(null);\n\t\t\tlet webgpu = tex.adapter as WebGPUAdapter;\n\t\t\twebgpu.textureFormat = tex.innerType;\n\t\t\twebgpu.headless = true;\n\t\t\twebgpu.headlessHeight = tex.height;\n\t\t\twebgpu.headlessWidth = tex.width;\n\t\t\twebgpu.headlessDepth = tex.depth;\n\t\t\twebgpu.headlessDimensions = 3;\n\t\t} else {\n\t\t\tthrow new Error('No adapter found');\n\t\t}\n\n\t\ttex.adapter.init();\n\t\ttex.adapter.setViewport(0, 0);\n\n\t\treturn tex;\n\t}\n\n\tsize = [Math.floor(size[0]), Math.floor(size[1])];\n\tlet tex = new ShadeupTexture2d();\n\ttex.innerType = innerType;\n\ttex.size = size;\n\ttex.width = size[0];\n\ttex.height = size[1];\n\ttex.image = document.createElement('canvas');\n\t// document.body.appendChild(tex.image);\n\ttex.image.width = tex.width;\n\ttex.image.height = tex.height;\n\n\tif (preferredAdapter == 'webgl') {\n\t\ttex.adapter = new WebGLAdapter(tex.image);\n\t} else if (preferredAdapter == 'webgpu') {\n\t\tlet gpuTextureFormat: GPUTextureFormat = 'rgba8unorm';\n\t\tif (format == 'auto') {\n\t\t\tformat = innerType == 'uint8' ? '8bit' : '32bit';\n\t\t}\n\n\t\tgpuTextureFormat =\n\t\t\tFormatInnerTypeMapping[`${format as Exclude<'auto', TextureFormat>}-${innerType}`];\n\t\ttex.adapter = new WebGPUAdapter(tex.image);\n\n\t\tlet webgpu = tex.adapter as WebGPUAdapter;\n\t\twebgpu.textureFormat = tex.innerType;\n\t\twebgpu.gpuTextureFormat = gpuTextureFormat;\n\t\twebgpu.headless = true;\n\t\twebgpu.headlessHeight = tex.height;\n\t\twebgpu.headlessWidth = tex.width;\n\t} else {\n\t\tthrow new Error('No adapter found');\n\t}\n\n\ttex.init();\n\ttex.adapter.init();\n\ttex.adapter.setViewport(tex.width, tex.height);\n\n\ttex.paint = new PaintingContext(tex.image, tex.adapter as any);\n\ttex.paint.markDirtyCallback = () => {\n\t\ttex.cpuFlush();\n\t\ttex.dirty = true;\n\t\ttex.cpuReadDirty = true;\n\t\ttex.version++;\n\t};\n\ttex.adapter.clear(true);\n\n\treturn tex;\n}\n\n(window as any)['shadeupMakeTextureInternal'] = shadeupMakeTextureInternal;\n\nfunction shadeupMakeTextureFromImageLike(\n\timg: HTMLImageElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas | HTMLVideoElement\n) {\n\tlet tex = shadeupMakeTextureInternal([img.width, img.height], '8bit', 'uint8');\n\tlet canvas = document.createElement('canvas');\n\tcanvas.width = img.width;\n\tcanvas.height = img.height;\n\tlet ctx = canvas.getContext('2d');\n\tctx?.drawImage(img, 0, 0);\n\ttex.adapter?.drawImage(canvas, 0, 0, img.width, img.height);\n\ttex.adapter?.flush();\n\treturn tex;\n}\n\n(window as any)['shadeupMakeTextureFromUrlNative'] = (url: string) => {\n\tvar image = new Image();\n\timage.crossOrigin = 'anonymous';\n\timage.src = `/images/${url}`;\n\tlet tex = new ShadeupTexture2d();\n\n\timage.onload = function () {\n\t\ttex.image = document.createElement('canvas');\n\t\ttex.loading = false;\n\t\ttex.size = [image.width, image.height];\n\t\tif (!tex.image) return;\n\t\ttex.image.width = image.width;\n\t\ttex.image.height = image.height;\n\n\t\tlet ctx = tex.image.getContext('2d');\n\t\tctx?.drawImage(image, 0, 0);\n\t\tgraphicsAdapter.unbindTexture(tex);\n\t};\n\n\treturn tex;\n};\n\nlet logger = document.createElement('div');\nlogger.style.position = 'absolute';\nlogger.style.pointerEvents = 'none';\nlogger.style.top = '0';\nlogger.style.left = '0';\nlogger.style.bottom = '0';\nlogger.style.width = '100%';\nlogger.style.overflow = 'auto';\nlogger.style.display = 'flex';\nlogger.style.flexDirection = 'column';\nlogger.style.justifyContent = 'flex-end';\nlogger.style.fontFamily = 'monospace';\nlogger.style.color = 'white';\nlogger.style.backgroundColor = 'rgba(0,0,0,0.5)';\nlogger.style.borderRadius = 'inherit';\nlogger.style.zIndex = '1000';\nlogger.style.display = 'none';\nlogger.style.paddingBottom = '0.5rem';\nlet realUiContainer = document.querySelector('.ui-container');\nlet uiContainer = document.querySelector('.render-container');\nif (uiContainer) {\n\tuiContainer.appendChild(logger);\n}\n\nlet stater = document.createElement('div');\nstater.classList.add('stater');\nstater.style.position = 'absolute';\nstater.style.pointerEvents = 'none';\nstater.style.top = '0';\nstater.style.right = '0';\nstater.style.width = '100%';\n\nstater.style.display = 'flex';\nstater.style.flexDirection = 'column';\nstater.style.alignItems = 'flex-end';\nstater.style.paddingRight = '10px';\nstater.style.paddingTop = '10px';\nstater.style.fontFamily = 'monospace';\nstater.style.color = 'white';\nstater.style.zIndex = '1001';\n\nif (uiContainer) {\n\tuiContainer.appendChild(stater);\n}\n\n(window as any).__shadeup_print = (...args: any[]) => {\n\tlogger.style.display = 'flex';\n\tlet el = document.createElement('div');\n\tel.style.display = 'flex';\n\tel.style.alignItems = 'center';\n\tel.style.height = 'auto';\n\tel.style.lineHeight = '1em';\n\tel.style.flexShrink = '0';\n\tel.style.borderTop = '1px solid rgba(255,255,255,0.2)';\n\tel.style.backgroundColor = 'rgba(255,255,255,0.05)';\n\n\tlet texts = [];\n\tfor (let arg of args) {\n\t\tif (typeof arg === 'string') {\n\t\t\ttexts.push(arg);\n\t\t} else {\n\t\t\tlet stringified = JSON.stringify(arg);\n\t\t\ttexts.push(stringified);\n\t\t}\n\t}\n\tel.innerText = texts.join(' ');\n\tif (logger.childElementCount > 50) {\n\t\tlogger.removeChild(logger.children[0]);\n\t}\n\tlogger.appendChild(el);\n};\n\nlet stats = new Map<string, HTMLElement>();\nlet statsGraph = new Map<\n\tstring,\n\t{\n\t\tnum: HTMLElement;\n\t\tgraph: HTMLCanvasElement;\n\t\tctx: CanvasRenderingContext2D;\n\t\tmin: number;\n\t\tmax: number;\n\t\tindex: number;\n\t\tcounter: number;\n\t\thistory: number[];\n\t}\n>();\nlet statsMark = new Map<string, number>();\nlet statsGraphMark = new Map<string, number>();\n\nfunction serializeValueToHtml(value: any) {\n\tlet placesColoring = ['#9abcff', '#aadfaa', '#f0ff76', '#aeaeae'];\n\tlet displayValue = value.toString();\n\tif (typeof value == 'number') {\n\t\tdisplayValue = `<span style=\"color: ${placesColoring[0]}\">${splitNumberPlaces(value)}</span>`;\n\t} else if (typeof value == 'object') {\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length == 0) {\n\t\t\t\tdisplayValue = `<span style=\"color: #a1a1a1\">[]</span>`;\n\t\t\t} else {\n\t\t\t\tlet numeric = true;\n\t\t\t\tfor (let v of value) {\n\t\t\t\t\tif (typeof v != 'number') {\n\t\t\t\t\t\tnumeric = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (numeric) {\n\t\t\t\t\tdisplayValue = value\n\t\t\t\t\t\t.map((v, i) => {\n\t\t\t\t\t\t\tlet index = i % 4;\n\t\t\t\t\t\t\treturn `<span style=\"color: ${placesColoring[index]}\">${splitNumberPlaces(v)}</span>`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(' ');\n\t\t\t\t} else {\n\t\t\t\t\tdisplayValue = `[ ${value.map(serializeValueToHtml).join(',')} ]`;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof value == 'boolean') {\n\t\t\tif (value) {\n\t\t\t\tdisplayValue = `<span style=\"color: #66ffab\">true</span>`;\n\t\t\t} else {\n\t\t\t\tdisplayValue = `<span style=\"color: #ff6666\">false</span>`;\n\t\t\t}\n\t\t} else if (typeof value == 'string') {\n\t\t\tdisplayValue = `<span style=\"color: #fabb20\">${value}</span>`;\n\t\t} else {\n\t\t\tdisplayValue = JSON.stringify(value);\n\t\t}\n\t}\n\n\treturn displayValue;\n}\nconst statTimeout = 144;\n\n(window as any).__shadeup_stat = (name: string, value: any) => {\n\tif (!stats.has(name)) {\n\t\tlet el = document.createElement('div');\n\t\tel.style.display = 'inline-flex';\n\t\tel.style.alignItems = 'center';\n\t\tel.style.backdropFilter = 'blur(1px)';\n\t\tel.style.borderRadius = '20px';\n\t\tel.style.padding = '2px 4px';\n\n\t\tel.style.background = 'rgba(0,0,0,0.5)';\n\t\tel.style.fontSize = '12px';\n\t\tel.style.lineHeight = '12px';\n\t\tel.style.flexShrink = '0';\n\t\tel.style.marginBottom = '2px';\n\n\t\tstats.set(name, el);\n\t\tstater.appendChild(el);\n\t}\n\n\tstatsMark.set(name, statTimeout);\n\n\tlet el = stats.get(name);\n\tif (!el) return;\n\tlet htm = `<i>${name}</i> <span style=\"margin-left: 8px;\">${serializeValueToHtml(value)}</span>`;\n\tif (el.innerHTML != htm) {\n\t\tel.innerHTML = htm;\n\t}\n};\n\n(window as any).__shadeup_statGraph = (name: string, value: any, sampleRate: number = 1) => {\n\tif (!statsGraph.has(name)) {\n\t\tlet el = document.createElement('div');\n\t\tel.style.display = 'inline-flex';\n\t\tel.style.alignItems = 'center';\n\t\tel.style.backdropFilter = 'blur(1px)';\n\t\tel.style.borderRadius = '20px';\n\t\tel.style.padding = '2px 4px';\n\n\t\tlet text = document.createElement('span');\n\t\ttext.style.marginLeft = '8px';\n\t\ttext.innerText = name;\n\t\tel.appendChild(text);\n\n\t\tel.style.background = 'rgba(0,0,0,0.5)';\n\t\tel.style.fontSize = '12px';\n\t\tel.style.lineHeight = '12px';\n\t\tel.style.flexShrink = '0';\n\t\tel.style.marginBottom = '2px';\n\n\t\tlet canvas = document.createElement('canvas');\n\t\tcanvas.width = 100;\n\t\tcanvas.height = 20;\n\t\tcanvas.style.marginLeft = '8px';\n\t\tcanvas.style.borderRadius = '4px';\n\t\tcanvas.style.background = 'rgba(0,0,0,0.3)';\n\t\tel.appendChild(canvas);\n\n\t\tlet ctx = canvas.getContext('2d');\n\t\tlet num = document.createElement('span');\n\t\tnum.style.marginLeft = '8px';\n\t\tel.appendChild(num);\n\n\t\tstatsGraph.set(name, {\n\t\t\tctx: ctx!,\n\t\t\tgraph: canvas,\n\t\t\tnum,\n\t\t\tmin: value,\n\t\t\tmax: value,\n\t\t\tindex: 0,\n\t\t\tcounter: 0,\n\t\t\thistory: new Array(canvas.width).fill(0)\n\t\t});\n\t\tstater.appendChild(el);\n\t}\n\n\tlet statData = statsGraph.get(name)!;\n\tstatData.counter++;\n\n\tlet histMax = localLerp(statData.max, value, 0.1);\n\tlet histMin = localLerp(statData.min, value, 0.1);\n\n\tfor (let subVal of statData.history) {\n\t\tif (subVal < histMin) histMin = subVal;\n\t\tif (subVal > histMax) histMax = subVal;\n\t}\n\n\tstatData.max = histMax;\n\tstatData.min = histMin;\n\n\tif (statData.counter % sampleRate == 0) {\n\t\tstatData.history[statData.index] = value;\n\t\tstatData.index = (statData.index + 1) % statData.history.length;\n\t}\n\n\t// Draw fps histogram and value\n\tlet width = statData.graph.width;\n\tlet histwidth = width;\n\tlet height = statData.graph.height;\n\tlet ctx = statData.ctx;\n\tctx.fillStyle = 'white';\n\tctx.clearRect(0, 0, width, height);\n\n\tctx?.beginPath();\n\n\tfor (let j = 0; j < statData.history.length; j++) {\n\t\tlet rev = statData.index - j;\n\n\t\tlet i = rev < 0 ? statData.history.length + rev : rev;\n\t\tlet x = (1 - j / statData.history.length) * histwidth;\n\t\tlet drawHeight = height;\n\n\t\tlet valPercent = Math.min(1, (statData.history[i] - histMin) / (histMax - histMin));\n\n\t\tlet top = height - drawHeight * valPercent;\n\n\t\tif (isNaN(top)) {\n\t\t\ttop = height;\n\t\t}\n\t\tif (isNaN(x)) {\n\t\t\tx = 0;\n\t\t}\n\t\tif (j == 0) {\n\t\t\tctx?.moveTo(x, top);\n\t\t}\n\n\t\tctx.lineTo(x, top);\n\t}\n\n\tctx.lineTo(0, height);\n\tctx.lineTo(width, height);\n\n\tctx.fill();\n\n\tstatsGraphMark.set(name, statTimeout);\n\n\tlet lastValue = statData.history[statData.index];\n\tlet htm = `${serializeValueToHtml(value)}`;\n\tif (statData.num.innerHTML != htm) {\n\t\tstatData.num.innerHTML = htm;\n\t}\n};\n\nfunction splitNumberPlaces(num: number) {\n\tlet parts = '';\n\tlet decimalCount = 5;\n\tif (num > 100) {\n\t\tdecimalCount = 2;\n\t}\n\tlet str = num.toFixed(decimalCount);\n\tif (num > 100) {\n\t\tstr = str.replace(/\\.?0+$/, '');\n\t}\n\tlet hitDecimal = !str.includes('.');\n\tlet counter = 0;\n\tfor (let i = str.length - 1; i >= 0; i--) {\n\t\tif (hitDecimal) {\n\t\t\tif (counter == 3) {\n\t\t\t\tparts = str[i] + ',' + parts;\n\t\t\t\tcounter = 0;\n\t\t\t} else {\n\t\t\t\tparts = str[i] + parts;\n\t\t\t}\n\t\t\tcounter++;\n\t\t} else {\n\t\t\tparts = str[i] + parts;\n\t\t}\n\t\tif (str[i] == '.') {\n\t\t\thitDecimal = true;\n\t\t}\n\t}\n\n\treturn parts;\n}\n\nconst fullscreenGeo = makeFullscreenQuadGeometry();\n\nlet flying = false;\nlet orbiting = false;\n\nlet cameraUnlocked = false;\n\nfunction activateFreeFly() {\n\tif (cameraConfig.mode == 'orbit-free') {\n\t\tcameraUnlocked = true;\n\t}\n\tcameraConfig.mode = 'free';\n\tcameraRotY = cameraConfig.orbitPitch;\n\tcameraRotX = cameraConfig.orbitYaw - Math.PI / 2;\n}\nfunction activateOrbit() {\n\tif (cameraConfig.mode == 'free') {\n\t\tcameraUnlocked = false;\n\t}\n\tcameraConfig.mode = 'orbit-free';\n\n\t// Recalc orbit target, and then pitch and yaw\n\t// Reproject orbit target based on our current position and free look\n\n\tlet camera = (window as any).env.camera;\n\tlet currentDist = cameraConfig.orbitDistance;\n\tlet currentCameraPos = camera.position;\n\n\tlet rotation = camera.rotation;\n\tlet quatMulled = quaternionMul(rotation, [0, 0, 1]);\n\tlet targetForward: [number, number, number] = [quatMulled[0], quatMulled[1], quatMulled[2]];\n\n\tcameraConfig.orbitTarget = [\n\t\tcurrentCameraPos[0] - targetForward[0] * currentDist,\n\t\tcurrentCameraPos[1] - targetForward[1] * currentDist,\n\t\tcurrentCameraPos[2] - targetForward[2] * currentDist\n\t];\n\n\t// Recalc pitch and yaw\n\n\tlet target = cameraConfig.orbitTarget;\n\tlet position = currentCameraPos;\n\n\tlet dx = target[0] - position[0];\n\tlet dy = target[1] - position[1];\n\tlet dz = target[2] - position[2];\n\n\tlet yaw = Math.atan2(dz, dx);\n\tlet pitch = Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));\n\n\tcameraConfig.orbitPitch = -pitch;\n\tcameraConfig.orbitYaw = yaw - Math.PI;\n}\n\nwindow.addEventListener('contextmenu', async (e) => {\n\tif (e.target == realUiContainer) {\n\t\te.preventDefault();\n\t\tif (cameraConfig.mode == 'orbit-free' || cameraConfig.mode == 'free') {\n\t\t\tawait canvas.requestPointerLock();\n\t\t\tflying = true;\n\t\t\tif (cameraConfig.mode == 'orbit-free') {\n\t\t\t\tactivateFreeFly();\n\t\t\t}\n\t\t\tcanvas.focus();\n\t\t}\n\t}\n});\n\nwindow.addEventListener('mousedown', async (e) => {\n\tif (e.target == realUiContainer) {\n\t\tif (e.button == 2) {\n\t\t\te.preventDefault();\n\t\t\tif (cameraConfig.mode == 'orbit-free' || cameraConfig.mode == 'free') {\n\t\t\t\tawait canvas.requestPointerLock();\n\t\t\t\tcanvas.focus();\n\t\t\t\tflying = true;\n\t\t\t\tif (cameraConfig.mode == 'orbit-free') {\n\t\t\t\t\tactivateFreeFly();\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (e.buttons == 4) {\n\t\t\te.preventDefault();\n\t\t\torbiting = true;\n\t\t} else if (e.button == 0 || e.button == 1) {\n\t\t\torbiting = true;\n\t\t}\n\t}\n});\n\nwindow.addEventListener('mouseup', async (e) => {\n\tif (e.target == realUiContainer || e.target == document.body || e.target == canvas) {\n\t\tif (e.button == 2) {\n\t\t\te.preventDefault();\n\t\t\tif (cameraConfig.mode == 'orbit-free' || cameraConfig.mode == 'free') {\n\t\t\t\tdocument.exitPointerLock();\n\t\t\t\tif (cameraUnlocked) {\n\t\t\t\t\tactivateOrbit();\n\t\t\t\t}\n\t\t\t\tflying = false;\n\t\t\t\tcameraSpeed = defaultCameraSpeed;\n\t\t\t}\n\t\t} else if (e.buttons == 4) {\n\t\t\te.preventDefault();\n\t\t\torbiting = false;\n\t\t} else if (e.button == 0 || e.button == 1) {\n\t\t\torbiting = false;\n\t\t}\n\t}\n});\n\nfunction quaternionFromAxisAngle(\n\taxis: [number, number, number],\n\tangle: number\n): [number, number, number, number] {\n\tlet halfAngle = angle * 0.5;\n\tlet sin = Math.sin(halfAngle);\n\tlet cos = Math.cos(halfAngle);\n\treturn [axis[0] * sin, axis[1] * sin, axis[2] * sin, cos];\n}\n\nfunction normalizeVector3(v: [number, number, number]): [number, number, number] {\n\tlet len = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n\treturn [v[0] / len, v[1] / len, v[2] / len];\n}\n\nlet cameraRotX = 0;\nlet cameraRotY = 0;\nlet cameraPitchVelocity = 0;\nlet cameraYawVelocity = 0;\nwindow.addEventListener('mousemove', (e) => {\n\tif (e.target == document.body || e.target == realUiContainer || e.target == canvas) {\n\t\tif (e.buttons == 4 || e.buttons == 2) {\n\t\t\tlet camera2d = (window as any).env.camera2d;\n\t\t\tif (camera2d) {\n\t\t\t\tcamera2d.position[0] += e.movementX * window.devicePixelRatio;\n\t\t\t\tcamera2d.position[1] += e.movementY * window.devicePixelRatio;\n\t\t\t}\n\t\t}\n\n\t\tif (flying) {\n\t\t\tlet dx = e.movementX;\n\t\t\tlet dy = e.movementY;\n\n\t\t\tlet camera = (window as any).env.camera;\n\t\t\tlet up: [number, number, number] = [0, 1, 0];\n\t\t\tlet forward: [number, number, number] = [0, 0, -1];\n\t\t\tlet right: [number, number, number] = [1, 0, 0];\n\t\t\tlet cameraRight = quaternionRotate(camera.rotation, right);\n\t\t\t// Lock the cameraRight vector to the horizontal plane\n\t\t\tcameraRight[1] = 0;\n\t\t\tcameraRight = normalizeVector3(cameraRight);\n\n\t\t\t// Lock rotation to horizontal plane\n\n\t\t\tcameraRotX += dx * 0.001;\n\t\t\tcameraRotY += dy * 0.001;\n\n\t\t\t// let rightRot = quaternionFromAxisAngle(cameraRight, dy * 0.001);\n\t\t\t// camera.rotation = quaternionMulQuaternion(camera.rotation, rightRot);\n\n\t\t\t// let upRot = quaternionFromAxisAngle(up, dx * -0.001);\n\t\t\t// camera.rotation = quaternionMulQuaternion(camera.rotation, upRot);\n\t\t} else {\n\t\t\tif (cameraConfig.mode.startsWith('orbit') && orbiting) {\n\t\t\t\tif (e.buttons == 1) {\n\t\t\t\t\tcameraYawVelocity += e.movementX * 0.01;\n\t\t\t\t\tcameraPitchVelocity += e.movementY * 0.01;\n\t\t\t\t\tcameraConfig.spinning = false;\n\t\t\t\t} else if (e.buttons == 4) {\n\t\t\t\t\tcameraConfig.spinning = false;\n\t\t\t\t\tlet camera = (window as any).env.camera;\n\t\t\t\t\tif (camera) {\n\t\t\t\t\t\t// Move camera cameraConfig.orbitTarget along the camera's right vector and up vector\n\t\t\t\t\t\tlet up: [number, number, number] = [0, 1, 0];\n\t\t\t\t\t\tlet forward: [number, number, number] = [0, 0, -1];\n\t\t\t\t\t\tlet right: [number, number, number] = [1, 0, 0];\n\t\t\t\t\t\tlet cameraRight = quaternionRotate(camera.rotation, right);\n\t\t\t\t\t\t// Lock the cameraRight vector to the horizontal plane\n\n\t\t\t\t\t\tcameraRight = normalizeVector3(cameraRight);\n\n\t\t\t\t\t\tlet cameraUp = quaternionRotate(camera.rotation, up);\n\n\t\t\t\t\t\tcameraUp = normalizeVector3(cameraUp);\n\n\t\t\t\t\t\tlet cameraForward = quaternionRotate(camera.rotation, forward);\n\t\t\t\t\t\tcameraForward[1] = 0;\n\t\t\t\t\t\tcameraForward = normalizeVector3(cameraForward);\n\n\t\t\t\t\t\tlet cameraSpeed = 0.6 * (Math.sqrt(cameraConfig.orbitDistance) / 20);\n\t\t\t\t\t\tlet cameraTarget = cameraConfig.orbitTarget;\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tcameraSpeed = 0.01;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (e.ctrlKey) {\n\t\t\t\t\t\t\tcameraSpeed = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcameraTarget[0] += cameraRight[0] * e.movementX * cameraSpeed * -1;\n\t\t\t\t\t\tcameraTarget[1] += cameraRight[1] * e.movementX * cameraSpeed * -1;\n\t\t\t\t\t\tcameraTarget[2] += cameraRight[2] * e.movementX * cameraSpeed * -1;\n\n\t\t\t\t\t\tcameraTarget[0] += cameraUp[0] * e.movementY * cameraSpeed;\n\t\t\t\t\t\tcameraTarget[1] += cameraUp[1] * e.movementY * cameraSpeed;\n\t\t\t\t\t\tcameraTarget[2] += cameraUp[2] * e.movementY * cameraSpeed;\n\n\t\t\t\t\t\tcameraConfig.orbitTarget = cameraTarget;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\nfunction quaternionRotate(\n\tquaternion: [number, number, number, number],\n\tvector: [number, number, number]\n): [number, number, number] {\n\tlet [x, y, z] = vector;\n\tlet [qx, qy, qz, qw] = quaternion;\n\tlet ix = qw * x + qy * z - qz * y;\n\tlet iy = qw * y + qz * x - qx * z;\n\tlet iz = qw * z + qx * y - qy * x;\n\tlet iw = -qx * x - qy * y - qz * z;\n\treturn [\n\t\tix * qw + iw * -qx + iy * -qz - iz * -qy,\n\t\tiy * qw + iw * -qy + iz * -qx - ix * -qz,\n\t\tiz * qw + iw * -qz + ix * -qy - iy * -qx\n\t];\n}\n\nfunction quaternionMul(\n\tquat: [number, number, number, number],\n\tvec: [number, number, number]\n): [number, number, number, number] {\n\tlet [qx, qy, qz, qw] = quat;\n\tlet [vx, vy, vz] = vec;\n\tlet ix = qw * vx + qy * vz - qz * vy;\n\tlet iy = qw * vy + qz * vx - qx * vz;\n\tlet iz = qw * vz + qx * vy - qy * vx;\n\tlet iw = -qx * vx - qy * vy - qz * vz;\n\treturn [\n\t\tix * qw + iw * -qx + iy * -qz - iz * -qy,\n\t\tiy * qw + iw * -qy + iz * -qx - ix * -qz,\n\t\tiz * qw + iw * -qz + ix * -qy - iy * -qx,\n\t\tiw * qw - ix * -qx - iy * -qy - iz * -qz\n\t];\n}\n\nfunction quaternionMulQuaternion(\n\ta: [number, number, number, number],\n\tb: [number, number, number, number]\n): [number, number, number, number] {\n\tlet [ax, ay, az, aw] = a;\n\tlet [bx, by, bz, bw] = b;\n\tlet ix = aw * bx + ax * bw + ay * bz - az * by;\n\tlet iy = aw * by + ay * bw + az * bx - ax * bz;\n\tlet iz = aw * bz + az * bw + ax * by - ay * bx;\n\tlet iw = aw * bw - ax * bx - ay * by - az * bz;\n\treturn [ix, iy, iz, iw];\n}\n\nlet movementForward = 0;\nlet movementRight = 0;\nlet movementUp = 0;\nlet movement = {\n\tw: 0,\n\ta: 0,\n\ts: 0,\n\td: 0,\n\tq: 0,\n\te: 0\n};\nlet movementReal = {\n\tw: 0,\n\ta: 0,\n\ts: 0,\n\td: 0,\n\tq: 0,\n\te: 0\n};\nlet fovDirection = 0;\n\nwindow.addEventListener('keydown', (e) => {\n\tif (e.target && (e.target.closest('input') || e.target.closest('textarea'))) return;\n\n\tif (e.key == 'w') {\n\t\tmovement.w = 1;\n\t} else if (e.key == 's') {\n\t\tmovement.s = 1;\n\t} else if (e.key == 'a') {\n\t\tmovement.a = 1;\n\t} else if (e.key == 'd') {\n\t\tmovement.d = 1;\n\t} else if (e.key == 'e') {\n\t\tmovement.e = 1;\n\t} else if (e.key == 'q') {\n\t\tmovement.q = 1;\n\t} else if (e.key == 'c') {\n\t\tfovDirection = -1;\n\t} else if (e.key == 'z') {\n\t\tfovDirection = 1;\n\t}\n});\n\nlet targetOrbitDistance = cameraConfig.orbitDistance;\n\nwindow.addEventListener('wheel', (e) => {\n\tif (e.target == document.body || e.target == realUiContainer || e.target == canvas) {\n\t\tif (e.deltaY > 0) {\n\t\t\tcameraSpeed = cameraSpeed / 1.2;\n\t\t} else if (e.deltaY < 0) {\n\t\t\tcameraSpeed = cameraSpeed * 1.2;\n\t\t}\n\n\t\tlet wheel = normalizeWheel(e);\n\t\tif (cameraConfig.mode.startsWith('orbit')) {\n\t\t\ttargetOrbitDistance = Math.max(0.1, targetOrbitDistance - wheel.spinY * -100);\n\t\t}\n\n\t\tlet camera2d = (window as any).env.camera2d;\n\t\tif (camera2d) {\n\t\t\t// Zoom to the center of the mouse\n\t\t\tlet mousePos = [mouseState.screen[0], mouseState.screen[1]];\n\t\t\tlet cameraPos = camera2d.position;\n\t\t\tlet cameraZoom = camera2d.zoom;\n\t\t\tlet zoomDelta = wheel.spinY * 0.1;\n\t\t\t// Exponential zoom\n\t\t\tlet newZoom = Math.max(0.01, cameraZoom + zoomDelta * cameraZoom);\n\n\t\t\tlet mouseWorldPos = [\n\t\t\t\t(mousePos[0] - cameraPos[0]) / cameraZoom,\n\t\t\t\t(mousePos[1] - cameraPos[1]) / cameraZoom\n\t\t\t];\n\t\t\tlet mouseWorldPos2 = [\n\t\t\t\t(mousePos[0] - cameraPos[0]) / newZoom,\n\t\t\t\t(mousePos[1] - cameraPos[1]) / newZoom\n\t\t\t];\n\t\t\tlet mouseWorldDelta = [\n\t\t\t\tmouseWorldPos2[0] - mouseWorldPos[0],\n\t\t\t\tmouseWorldPos2[1] - mouseWorldPos[1]\n\t\t\t];\n\t\t\tcamera2d.position = [\n\t\t\t\tcameraPos[0] - mouseWorldDelta[0] * cameraZoom,\n\t\t\t\tcameraPos[1] - mouseWorldDelta[1] * cameraZoom\n\t\t\t];\n\t\t\tcamera2d.zoom = newZoom;\n\t\t}\n\t}\n});\n\nwindow.addEventListener('keyup', (e) => {\n\tif (e.key == 'w') {\n\t\tmovement.w = 0;\n\t} else if (e.key == 's') {\n\t\tmovement.s = 0;\n\t} else if (e.key == 'a') {\n\t\tmovement.a = 0;\n\t} else if (e.key == 'd') {\n\t\tmovement.d = 0;\n\t} else if (e.key == 'e') {\n\t\tmovement.e = 0;\n\t} else if (e.key == 'q') {\n\t\tmovement.q = 0;\n\t} else if (e.key == 'c' || e.key == 'z') {\n\t\tfovDirection = 0;\n\t}\n});\n\nlet lastFrameMovement = Date.now();\nlet defaultCameraSpeed = 1;\nlet cameraSpeed = defaultCameraSpeed;\nfunction lerp(a: number, b: number, t: number) {\n\treturn a + (b - a) * t;\n}\nfunction quaternionFromEuler(euler: [number, number, number]): [number, number, number, number] {\n\tlet [x, y, z] = euler;\n\tlet c1 = Math.cos(x / 2);\n\tlet c2 = Math.cos(y / 2);\n\tlet c3 = Math.cos(z / 2);\n\tlet s1 = Math.sin(x / 2);\n\tlet s2 = Math.sin(y / 2);\n\tlet s3 = Math.sin(z / 2);\n\treturn [\n\t\ts1 * c2 * c3 + c1 * s2 * s3,\n\t\tc1 * s2 * c3 - s1 * c2 * s3,\n\t\tc1 * c2 * s3 + s1 * s2 * c3,\n\t\tc1 * c2 * c3 - s1 * s2 * s3\n\t];\n}\n\nfunction cross(a: [number, number, number], b: [number, number, number]): [number, number, number] {\n\tlet [ax, ay, az] = a;\n\tlet [bx, by, bz] = b;\n\treturn [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx];\n}\n\nfunction movementFrame() {\n\tlet now = Date.now();\n\tlet dt = now - lastFrameMovement;\n\tlastFrameMovement = now;\n\tif (cameraConfig.mode == 'orbit-free' || cameraConfig.mode == 'free') {\n\t\tif (!flying) {\n\t\t\tif ((window as any).env.camera) {\n\t\t\t\t(window as any).env.camera.fov = lerp((window as any).env.camera.fov, 90, dt * 0.01);\n\t\t\t}\n\t\t}\n\t}\n\tif (cameraConfig.mode == 'orbit' || cameraConfig.mode == 'orbit-free') {\n\t\t{\n\t\t\tcameraConfig.orbitYaw += cameraYawVelocity * dt * 0.025;\n\t\t\tcameraConfig.orbitPitch += cameraPitchVelocity * dt * 0.025;\n\t\t\tcameraYawVelocity = lerp(cameraYawVelocity, 0, dt * 0.03);\n\t\t\tcameraPitchVelocity = lerp(cameraPitchVelocity, 0, dt * 0.03);\n\t\t\tcameraConfig.orbitPitch = Math.max(\n\t\t\t\tcameraConfig.orbitMinPitch,\n\t\t\t\tMath.min(cameraConfig.orbitMaxPitch, cameraConfig.orbitPitch)\n\t\t\t);\n\t\t}\n\n\t\tcameraConfig.orbitDistance = lerp(cameraConfig.orbitDistance, targetOrbitDistance, dt * 0.025);\n\n\t\tif (cameraConfig.spinning) {\n\t\t\tcameraConfig.orbitYaw -= dt * 0.0002;\n\t\t}\n\t\tlet theta = cameraConfig.orbitYaw;\n\t\tlet phi = Math.PI / 2 - cameraConfig.orbitPitch;\n\t\tlet orbitTarget = cameraConfig.orbitTarget;\n\t\tlet cameraPosition = [\n\t\t\tMath.sin(phi) * Math.cos(theta) * cameraConfig.orbitDistance + orbitTarget[0],\n\t\t\tMath.cos(phi) * cameraConfig.orbitDistance + orbitTarget[1],\n\t\t\tMath.sin(phi) * Math.sin(theta) * cameraConfig.orbitDistance + orbitTarget[2]\n\t\t];\n\n\t\tlet camera = (window as any).env.camera;\n\t\tif (camera) {\n\t\t\tcamera.position = cameraPosition;\n\t\t\tlet quat = (window as any).shadeupQuat;\n\t\t\tif (quat) {\n\t\t\t\tcamera.rotation = quat.lookAt(\n\t\t\t\t\tnormalizeVector3([\n\t\t\t\t\t\tcameraPosition[0] - orbitTarget[0],\n\t\t\t\t\t\tcameraPosition[1] - orbitTarget[1],\n\t\t\t\t\t\tcameraPosition[2] - orbitTarget[2]\n\t\t\t\t\t]),\n\t\t\t\t\t[0, -1, 0]\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else if (cameraConfig.mode == 'free') {\n\t\tconst damping = 60;\n\t\tmovementReal = {\n\t\t\tw: lerp(movementReal.w, movement.w, dt / damping),\n\t\t\ta: lerp(movementReal.a, movement.a, dt / damping),\n\t\t\ts: lerp(movementReal.s, movement.s, dt / damping),\n\t\t\td: lerp(movementReal.d, movement.d, dt / damping),\n\t\t\tq: lerp(movementReal.q, movement.q, dt / damping),\n\t\t\te: lerp(movementReal.e, movement.e, dt / damping)\n\t\t};\n\n\t\tlet camera = (window as any).env.camera;\n\t\tlet up: [number, number, number] = [0, 1, 0];\n\t\tlet forward: [number, number, number] = [0, 0, -1];\n\t\tlet right: [number, number, number] = [1, 0, 0];\n\n\t\tif (camera) {\n\t\t\tcameraRotY = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, cameraRotY));\n\t\t\tcamera.rotation = quaternionMulQuaternion(\n\t\t\t\tquaternionFromEuler([0, -cameraRotX, 0]),\n\t\t\t\tquaternionFromEuler([-cameraRotY, 0, 0])\n\t\t\t);\n\t\t}\n\n\t\tif (!flying) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotation = camera.rotation;\n\t\tlet quatMulled = quaternionMul(rotation, [0, 0, 1]);\n\t\tlet targetForward: [number, number, number] = [quatMulled[0], quatMulled[1], quatMulled[2]];\n\t\t// targetForward[0] = 2 * (rotation[0] * rotation[2] - rotation[3] * rotation[1]);\n\t\t// targetForward[1] = 2 * (rotation[1] * rotation[2] + rotation[3] * rotation[0]);\n\t\t// targetForward[2] = 1 - 2 * (rotation[0] * rotation[0] + rotation[1] * rotation[1]);\n\t\tlet targetUp = up;\n\t\tlet targetRight = cross(targetForward, targetUp);\n\t\ttargetRight = normalizeVector3(targetRight);\n\n\t\tmovementForward = 0;\n\t\tmovementRight = 0;\n\t\tmovementUp = 0;\n\t\tmovementForward += movementReal.w;\n\t\tmovementForward -= movementReal.s;\n\t\tmovementRight += movementReal.d;\n\t\tmovementRight -= movementReal.a;\n\t\tmovementUp += movementReal.e;\n\t\tmovementUp -= movementReal.q;\n\n\t\tmovementRight *= -1;\n\t\tmovementForward *= -1;\n\n\t\tlet movementVector = [0, 0, 0];\n\t\tmovementVector[0] += targetForward[0] * movementForward;\n\t\tmovementVector[1] += targetForward[1] * movementForward;\n\t\tmovementVector[2] += targetForward[2] * movementForward;\n\t\tmovementVector[0] += targetRight[0] * movementRight;\n\t\tmovementVector[1] += targetRight[1] * movementRight;\n\t\tmovementVector[2] += targetRight[2] * movementRight;\n\t\tmovementVector[0] += targetUp[0] * movementUp;\n\t\tmovementVector[1] += targetUp[1] * movementUp;\n\t\tmovementVector[2] += targetUp[2] * movementUp;\n\n\t\t// let dist = Math.sqrt(\n\t\t// \tmovementVector[0] * movementVector[0] +\n\t\t// \t\tmovementVector[1] * movementVector[1] +\n\t\t// \t\tmovementVector[2] * movementVector[2]\n\t\t// );\n\t\t// if (dist > 0) {\n\t\t// \tmovementVector[0] /= dist;\n\t\t// \tmovementVector[1] /= dist;\n\t\t// \tmovementVector[2] /= dist;\n\t\t// }\n\n\t\tcamera.position = [\n\t\t\tcamera.position[0] + movementVector[0] * dt * cameraSpeed,\n\t\t\tcamera.position[1] + movementVector[1] * dt * cameraSpeed,\n\t\t\tcamera.position[2] + movementVector[2] * dt * cameraSpeed\n\t\t];\n\n\t\tcamera.fov += fovDirection * dt * 0.1;\n\t\tcamera.fov = Math.max(Math.min(camera.fov, 150), 4);\n\t}\n}\n\n// movementFrame();\n\nfunction __shadeup_dispatch_compute(\n\tworkgroups: [number, number, number],\n\tshaderInst: ShadeupShaderInstance\n) {\n\tlet computeCall = new ShaderDispatch('compute');\n\n\tcomputeCall.computeCount = workgroups;\n\n\tlet compShader = shaderInst.get(graphicsAdapter, 'compute', {\n\t\tinitialDispatch: shaderInst\n\t});\n\tif (!compShader) {\n\t\tthrow new Error('Fragment shader not found');\n\t}\n\n\tcomputeCall.setComputeShader(compShader);\n\n\tshaderInst.bindUniforms(computeCall.fragmentUniforms);\n\n\tif (graphicsAdapter instanceof WebGPUAdapter) {\n\t\tgraphicsAdapter.dispatchCompute(computeCall);\n\t} else {\n\t\tthrow new Error('WebGL compute not supported');\n\t}\n}\n\n(window as any).__shadeup_dispatch_compute = __shadeup_dispatch_compute;\n\nfunction __shadeup_dispatch_compute_indirect(\n\tindirectBuffer: buffer<uint> | buffer<atomic<uint>>,\n\tindirectOffset: number,\n\tshaderInst: ShadeupShaderInstance\n) {\n\tlet computeCall = new ShaderDispatch('compute');\n\n\tcomputeCall.indirectBuffer = indirectBuffer;\n\tcomputeCall.indirectOffset = indirectOffset;\n\n\tlet compShader = shaderInst.get(graphicsAdapter, 'compute', {\n\t\tinitialDispatch: shaderInst\n\t});\n\tif (!compShader) {\n\t\tthrow new Error('Fragment shader not found');\n\t}\n\n\tcomputeCall.setComputeShader(compShader);\n\n\tshaderInst.bindUniforms(computeCall.fragmentUniforms);\n\n\tif (graphicsAdapter instanceof WebGPUAdapter) {\n\t\tgraphicsAdapter.dispatchCompute(computeCall);\n\t} else {\n\t\tthrow new Error('WebGL compute not supported');\n\t}\n}\n\n(window as any).__shadeup_dispatch_compute_indirect = __shadeup_dispatch_compute_indirect;\n\nfunction __shadeup_dispatch_draw_advanced(config: {\n\tfragment: ShadeupShaderInstance;\n\tvertex: ShadeupShaderInstance;\n\tmesh?: Mesh;\n\tinstances?: number;\n\tindirect?: buffer<uint> | buffer<atomic<uint>>;\n\tindexBuffer?: buffer<uint>;\n\tattachments: ShadeupTexture2d[];\n\tdepthTest?: boolean;\n\tdepthOnly?: boolean;\n\tdepth?: ShadeupTexture2d;\n\tdepthCompare?:\n\t\t| 'greater'\n\t\t| 'less'\n\t\t| 'equal'\n\t\t| 'greater-equal'\n\t\t| 'less-equal'\n\t\t| 'not-equal'\n\t\t| 'always'\n\t\t| 'never';\n\tbackfaceCulling?: boolean;\n}) {\n\tlet drawCall = new ShaderDispatch('draw');\n\tif (config.mesh) {\n\t\tdrawCall.drawType = 'geometry';\n\t} else if (config.indexBuffer) {\n\t\tdrawCall.drawType = 'indexed';\n\t}\n\n\tif (config.depth) {\n\t\tdrawCall.overrideDepth = config.depth;\n\t}\n\n\tif (config.depthCompare) {\n\t\tdrawCall.depthCompare = config.depthCompare;\n\t}\n\n\tif ('backfaceCulling' in config) {\n\t\tdrawCall.backfaceCulling = config.backfaceCulling!;\n\t}\n\n\tif (config.indirect) {\n\t\tdrawCall.indirectBuffer = config.indirect;\n\t}\n\n\tdrawCall.instanceCount = config.instances ?? 1;\n\n\tdrawCall.attachments = config.attachments ?? null;\n\tdrawCall.depthOnly = config.depthOnly ?? false;\n\n\tlet fragShader = config.fragment.get(graphicsAdapter, 'fragment', {\n\t\tattachments: config.attachments ? config.attachments.map((a) => a.innerType) : undefined\n\t});\n\tif (!fragShader) {\n\t\tthrow new Error('Fragment shader not found');\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tlet vertShader = config.vertex.get(graphicsAdapter, 'vertex');\n\n\tif (!vertShader) {\n\t\tthrow new Error('Vertex shader not found');\n\t}\n\n\tdrawCall.setVertexShader(vertShader);\n\n\tconfig.fragment.bindUniforms(drawCall.fragmentUniforms);\n\n\tconfig.vertex.bindUniforms(drawCall.vertexUniforms);\n\n\tif (config.mesh) {\n\t\tdrawCall.setGeometry(config.mesh as any);\n\t} else if (config.indexBuffer) {\n\t\tdrawCall.setIndexBuffer(config.indexBuffer);\n\t}\n\n\tgraphicsAdapter.dispatch(drawCall, {\n\t\tdepthTest: config.depthTest ?? true\n\t});\n}\n\n(window as any).__shadeup_dispatch_draw_advanced = __shadeup_dispatch_draw_advanced;\n\nfunction __shadeup_dispatch_draw(pixelShaderInst: ShadeupShaderInstance) {\n\tif (!fullscreenVertexShader) {\n\t\tfullscreenVertexShader = __shadeup_gen_native_shader(\n\t\t\t{\n\t\t\t\twebgl: `#version 300 es\n\t\t\n\t\tprecision highp float;\n\t\t\n\t\tin vec3 a_position;\n\t\tin vec3 a_normal;\n\t\tin vec3 a_tangent;\n\t\tin vec3 a_bitangent;\n\t\tin vec2 a_uv;\n\t\tin vec4 a_color;\n\n\t\tout vec3 _v_position;\n\t\tout vec3 _v_normal;\n\t\tout vec3 _v_tangent;\n\t\tout vec3 _v_bitangent;\n\t\tout vec2 _v_uv;\n\t\tout vec4 _v_color;\n\t\t\n\t\tvoid main(void) {\n\t\tfloat x = float((gl_VertexID & 1) << 2);\n\t\tfloat y = float((gl_VertexID & 2) << 1);\n\t\t_v_uv.x = x * 0.5;\n\t\t_v_uv.y = 1.f - (y * 0.5);\n\t\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\t\t}`,\n\t\t\t\twebgpu: `\n\t\t\tstruct VertexOutput {\n\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t@location(1) Tangent : vec3<f32>,\n\t\t\t\t@location(2) Bitangent : vec3<f32>,\n\t\t\t\t@location(3) TexCoord : vec2<f32>,\n\t\t\t\t@location(4) Color : vec4<f32>,\n\t\t\t\t@location(5) @interpolate(flat) instanceIndex : u32,\n\t\t\t\t@location(6) WorldPosition : vec3<f32>,\n\t\t\t};\n\t\t\n\t\t\t@vertex\n\t\t\tfn main(\n\t\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t\t) -> VertexOutput {\n\t\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\t\tvar output : VertexOutput;\n\t\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\t\toutput.Tangent = vec3<f32>(0.0, 1.0, 0.0);\n\t\t\t\toutput.Bitangent = vec3<f32>(0.0, 0.0, 1.0);\n\t\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t\t\toutput.instanceIndex = 0;\n\t\t\n\t\t\t\treturn output;\n\t\t\t}\n\t\t\t`,\n\t\t\t\tsoftware: () => {}\n\t\t\t},\n\t\t\t'vertex'\n\t\t);\n\t}\n\n\tif (!fullscreenVertexShader) {\n\t\tthrow new Error('Fullscreen vertex shader not found');\n\t}\n\n\tlet drawCall = new ShaderDispatch('draw');\n\tdrawCall.drawType = 'screen';\n\tdrawCall.setVertexUniform(\n\t\t'_vtex_canvas',\n\t\tmakePrimitiveUniform(\n\t\t\t{\n\t\t\t\ttype: 'primitive',\n\t\t\t\tname: 'float2'\n\t\t\t},\n\t\t\t[canvas.width, canvas.height]\n\t\t)\n\t);\n\n\tdrawCall.setVertexShader(fullscreenVertexShader);\n\tlet fragShader = pixelShaderInst.get(graphicsAdapter, 'fragment', {\n\t\tinitialDispatch: pixelShaderInst\n\t});\n\tif (!fragShader) {\n\t\tthrow new Error('Fragment shader not found');\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\tdrawCall.setGeometry(fullscreenGeo as any);\n\n\tgraphicsAdapter.dispatch(drawCall, {\n\t\tdepthTest: false\n\t});\n}\n\nfunction makeFullscreenQuadGeometry() {\n\tlet geo = {\n\t\tvertices: [\n\t\t\t[0, 0, 0],\n\t\t\t[0, 1, 0],\n\t\t\t[1, 1, 0],\n\t\t\t[1, 0, 0]\n\t\t],\n\t\tuvs: [\n\t\t\t[0, 0],\n\t\t\t[0, 1],\n\t\t\t[1, 1],\n\t\t\t[1, 0]\n\t\t],\n\t\ttriangles: [0, 1, 2],\n\t\tcolors: [],\n\t\tnormals: [],\n\t\ttangents: [],\n\t\tbitangents: [],\n\t\tgetTriangles: () => {\n\t\t\treturn geo.triangles;\n\t\t},\n\t\tgetVertices: () => {\n\t\t\treturn geo.vertices;\n\t\t},\n\t\tgetUVs: () => {\n\t\t\treturn geo.uvs;\n\t\t},\n\t\tgetNormals: (): number[][] => {\n\t\t\treturn [];\n\t\t},\n\t\tgetTangents: (): number[][] => {\n\t\t\treturn [];\n\t\t},\n\t\tgetBitangents: (): number[][] => {\n\t\t\treturn [];\n\t\t},\n\t\tgetColors: (): number[][] => {\n\t\t\treturn [];\n\t\t},\n\t\tsymbol: Symbol()\n\t};\n\n\treturn geo;\n}\n\n(window as any).PLATFORM_WEBGL = preferredAdapter == 'webgl';\n(window as any).PLATFORM_WEBGPU = preferredAdapter == 'webgpu';\n\n(window as any).__shadeup_dispatch_draw = __shadeup_dispatch_draw;\n\nfunction __shadeup_dispatch_draw_geometry(\n\tgeometry: Mesh,\n\tvertexShaderInst: ShadeupShaderInstance,\n\tpixelShaderInst: ShadeupShaderInstance\n) {\n\tlet drawCall = new ShaderDispatch('draw');\n\tdrawCall.drawType = 'geometry';\n\tdrawCall.setVertexUniform(\n\t\t'_vtex_canvas',\n\t\tmakePrimitiveUniform(\n\t\t\t{\n\t\t\t\ttype: 'primitive',\n\t\t\t\tname: 'float2'\n\t\t\t},\n\t\t\t[canvas.width, canvas.height]\n\t\t)\n\t);\n\n\tlet fragShader = pixelShaderInst.get(graphicsAdapter, 'fragment');\n\tif (!fragShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\tlet vertShader = vertexShaderInst.get(graphicsAdapter, 'vertex');\n\tif (!vertShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setVertexShader(vertShader);\n\n\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\tdrawCall.setGeometry(geometry);\n\n\tgraphicsAdapter.dispatch(drawCall);\n}\n\n(window as any).__shadeup_dispatch_draw_geometry = __shadeup_dispatch_draw_geometry;\n\nfunction __shadeup_dispatch_draw_indexed(\n\tindexBuffer: buffer<uint>,\n\tvertexShaderInst: ShadeupShaderInstance,\n\tpixelShaderInst: ShadeupShaderInstance\n) {\n\tlet drawCall = new ShaderDispatch('draw');\n\tdrawCall.drawType = 'indexed';\n\tdrawCall.setVertexUniform(\n\t\t'_vtex_canvas',\n\t\tmakePrimitiveUniform(\n\t\t\t{\n\t\t\t\ttype: 'primitive',\n\t\t\t\tname: 'float2'\n\t\t\t},\n\t\t\t[canvas.width, canvas.height]\n\t\t)\n\t);\n\n\tlet fragShader = pixelShaderInst.get(graphicsAdapter, 'fragment');\n\tif (!fragShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\tlet vertShader = vertexShaderInst.get(graphicsAdapter, 'vertex-indexed');\n\tif (!vertShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setVertexShader(vertShader);\n\n\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\tdrawCall.setIndexBuffer(indexBuffer);\n\n\tgraphicsAdapter.dispatch(drawCall);\n}\n\n(window as any).__shadeup_dispatch_draw_indexed = __shadeup_dispatch_draw_indexed;\n\nfunction __shadeup_dispatch_draw_instanced_indexed(\n\tindexBuffer: buffer<uint>,\n\tinstanceCount: int,\n\tvertexShaderInst: ShadeupShaderInstance,\n\tpixelShaderInst: ShadeupShaderInstance\n) {\n\tlet drawCall = new ShaderDispatch('draw');\n\tdrawCall.drawType = 'indexed';\n\tdrawCall.instanceCount = instanceCount;\n\tdrawCall.setVertexUniform(\n\t\t'_vtex_canvas',\n\t\tmakePrimitiveUniform(\n\t\t\t{\n\t\t\t\ttype: 'primitive',\n\t\t\t\tname: 'float2'\n\t\t\t},\n\t\t\t[canvas.width, canvas.height]\n\t\t)\n\t);\n\n\tlet fragShader = pixelShaderInst.get(graphicsAdapter, 'fragment');\n\tif (!fragShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\tlet vertShader = vertexShaderInst.get(graphicsAdapter, 'vertex-indexed');\n\tif (!vertShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setVertexShader(vertShader);\n\n\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\tdrawCall.setIndexBuffer(indexBuffer);\n\n\tgraphicsAdapter.dispatch(drawCall);\n}\n\n(window as any).__shadeup_dispatch_draw_instanced_indexed =\n\t__shadeup_dispatch_draw_instanced_indexed;\n\nfunction __shadeup_dispatch_draw_instanced(\n\tmesh: Mesh,\n\tinstanceCount: int,\n\tvertexShaderInst: ShadeupShaderInstance,\n\tpixelShaderInst: ShadeupShaderInstance\n) {\n\tlet drawCall = new ShaderDispatch('draw');\n\tdrawCall.drawType = 'geometry';\n\tdrawCall.instanceCount = instanceCount;\n\tdrawCall.setVertexUniform(\n\t\t'_vtex_canvas',\n\t\tmakePrimitiveUniform(\n\t\t\t{\n\t\t\t\ttype: 'primitive',\n\t\t\t\tname: 'float2'\n\t\t\t},\n\t\t\t[canvas.width, canvas.height]\n\t\t)\n\t);\n\n\tlet fragShader = pixelShaderInst.get(graphicsAdapter, 'fragment');\n\tif (!fragShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\tlet vertShader = vertexShaderInst.get(graphicsAdapter, 'vertex');\n\tif (!vertShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setVertexShader(vertShader);\n\n\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\tdrawCall.setGeometry(mesh);\n\n\tgraphicsAdapter.dispatch(drawCall);\n}\n\n(window as any).__shadeup_dispatch_draw_instanced = __shadeup_dispatch_draw_instanced;\n\nfunction __shadeup_dispatch_draw_count(\n\tcount: number,\n\tvertexShaderInst: ShadeupShaderInstance,\n\tpixelShaderInst: ShadeupShaderInstance\n) {\n\tlet drawCall = new ShaderDispatch('draw');\n\tdrawCall.drawType = 'count';\n\tdrawCall.drawCount = count;\n\tdrawCall.setVertexUniform(\n\t\t'_vtex_canvas',\n\t\tmakePrimitiveUniform(\n\t\t\t{\n\t\t\t\ttype: 'primitive',\n\t\t\t\tname: 'float2'\n\t\t\t},\n\t\t\t[canvas.width, canvas.height]\n\t\t)\n\t);\n\n\tlet fragShader = pixelShaderInst.get(graphicsAdapter, 'fragment');\n\tif (!fragShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setFragmentShader(fragShader);\n\n\tpixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n\n\tlet vertShader = vertexShaderInst.get(graphicsAdapter, 'vertex-indexed');\n\tif (!vertShader) {\n\t\treturn;\n\t}\n\n\tdrawCall.setVertexShader(vertShader);\n\n\tvertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n\n\tgraphicsAdapter.dispatch(drawCall);\n}\n\n(window as any).__shadeup_dispatch_draw_count = __shadeup_dispatch_draw_count;\n\nfunction __shadeup_get_struct(name) {\n\tif (!window.__shadeup_structs) window.__shadeup_structs = {};\n\treturn window.__shadeup_structs[name];\n}\n\nfunction __shadeup_register_struct(fields, cls) {\n\tif (!window.__shadeup_structs) window.__shadeup_structs = {};\n\twindow.__shadeup_structs[fields.name] = { fields, struct: cls };\n}\n\n(window as any).__shadeup_register_struct = __shadeup_register_struct;\n\nfunction __shadeup_error(err, context) {\n\treturn err || context;\n\n\tif (!err.__shadeup_stack) {\n\t\treturn { stack: [context], error: err, message: err.message };\n\t} else {\n\t\terr.stack.push(context);\n\t\treturn err;\n\t}\n}\n\nlet initFuncs = new Map<string, Function>();\n\nlet sourceWindow: MessageEventSource | null = null;\nlet sourceOrigin: MessageEventSource | null = null;\n\n(window as any).bubbleError = function (err: string) {\n\tif (!sourceWindow || !sourceOrigin) {\n\t\treturn;\n\t}\n\tsourceWindow.postMessage(err, sourceOrigin);\n};\n\nlet mainRestart = () => {};\n\nlet loadedAssets = new Map<string, any>();\nlet primedTextureAssets = new Map<string, ShadeupTexture2d>();\n\nasync function loadLib(name: string) {\n\tif (name == 'rapier2d') {\n\t\tconsole.log('Loading rapier2d');\n\t\t(window as any).RAPIER_2D = await import('https://cdn.skypack.dev/@dimforge/rapier2d-compat');\n\t\tconsole.log('Loaded rapier2d');\n\t\tawait (window as any).RAPIER_2D.init();\n\t\tconsole.log('Initialized rapier2d');\n\t} else if (name == 'rapier3d') {\n\t\t(window as any).RAPIER_3D = await import('https://cdn.skypack.dev/@dimforge/rapier3d-compat');\n\t\tawait (window as any).RAPIER_3D.init();\n\t}\n}\n\nasync function loadLibs() {\n\tconsole.log('Loading libs', [...registeredLibs.keys()]);\n\tawait Promise.all(\n\t\t[...registeredLibs.keys()].map(async (lib) => {\n\t\t\tawait loadLib(lib);\n\t\t})\n\t);\n}\n\nasync function loadAssets() {\n\tlet promises = [];\n\tconsole.log('Loading assets', [...registeredLoads.keys()]);\n\tregisteredLoads = registeredLoads.filter((load) => {\n\t\treturn !loadedAssets.has(load[0]);\n\t});\n\n\tfor (let load of registeredLoads) {\n\t\tpromises.push(\n\t\t\t(async () => {\n\t\t\t\tlet [key, type] = load as [string, AssetFileType];\n\t\t\t\tlet baseUrl = 'https://assets.shadeup.dev/';\n\t\t\t\t// if (key.startsWith('models/') || key.startsWith('textures/')) {\n\t\t\t\t// \tbaseUrl = 'localhost:5173/assets/';\n\t\t\t\t// }\n\t\t\t\tif (type == 'image') {\n\t\t\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\t\t\tlet img = new Image();\n\t\t\t\t\t\timg.crossOrigin = 'anonymous';\n\t\t\t\t\t\timg.onerror = () => {\n\t\t\t\t\t\t\tconsole.error('Failed to load image ' + key);\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t};\n\t\t\t\t\t\timg.onload = async () => {\n\t\t\t\t\t\t\tlet canvas = document.createElement('canvas');\n\t\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\t\t// document.body.appendChild(canvas);\n\t\t\t\t\t\t\tlet ctx = canvas.getContext('2d');\n\t\t\t\t\t\t\tif (ctx) ctx.drawImage(img, 0, 0);\n\t\t\t\t\t\t\tloadedAssets.set(key, canvas);\n\n\t\t\t\t\t\t\tlet tex = (window as any).shadeupMakeTextureInternal(\n\t\t\t\t\t\t\t\t[canvas.width, canvas.height],\n\t\t\t\t\t\t\t\t'8bit',\n\t\t\t\t\t\t\t\t'uint8'\n\t\t\t\t\t\t\t) as ShadeupTexture2d;\n\t\t\t\t\t\t\ttex.adapter?.drawImage(canvas, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\t\ttex.adapter?.flush();\n\n\t\t\t\t\t\t\tif (tex.adapter instanceof WebGPUAdapter) {\n\t\t\t\t\t\t\t\tawait tex.adapter.waitForDraw();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tprimedTextureAssets.set(key, tex);\n\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t};\n\t\t\t\t\t\timg.src = baseUrl + key;\n\t\t\t\t\t});\n\t\t\t\t} else if (type == 'audio') {\n\t\t\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\t\t\tlet audio = new Audio();\n\t\t\t\t\t\taudio.oncanplaythrough = () => {\n\t\t\t\t\t\t\tloadedAssets.set(key, audio);\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t};\n\t\t\t\t\t\taudio.src = baseUrl + key;\n\t\t\t\t\t});\n\t\t\t\t} else if (type == 'video') {\n\t\t\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\t\t\tlet video = document.createElement('video');\n\t\t\t\t\t\tvideo.oncanplaythrough = () => {\n\t\t\t\t\t\t\tloadedAssets.set(key, video);\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvideo.src = baseUrl + key;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tlet raw = fetch(baseUrl + key);\n\t\t\t\t\tif (type == 'binary') {\n\t\t\t\t\t\tawait raw\n\t\t\t\t\t\t\t.then((res) => res.arrayBuffer())\n\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\tloadedAssets.set(key, res);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else if (type == 'text') {\n\t\t\t\t\t\tawait raw\n\t\t\t\t\t\t\t.then((res) => res.text())\n\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\tloadedAssets.set(key, res);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else if (type == 'model') {\n\t\t\t\t\t\tawait raw\n\t\t\t\t\t\t\t.then((res) => res.arrayBuffer())\n\t\t\t\t\t\t\t.then(async (res) => {\n\t\t\t\t\t\t\t\tconst { GLTFLoader } = await import('three/examples/jsm/loaders/GLTFLoader');\n\t\t\t\t\t\t\t\tconst { Vector3, Mesh: THREEMesh, MeshStandardMaterial } = await import('three');\n\n\t\t\t\t\t\t\t\tconst { DRACOLoader } = await import('three/examples/jsm/loaders/DRACOLoader');\n\t\t\t\t\t\t\t\tconst dracoLoader = new DRACOLoader();\n\t\t\t\t\t\t\t\tdracoLoader.setDecoderPath('/lib/draco/');\n\n\t\t\t\t\t\t\t\tconst loader = new GLTFLoader();\n\n\t\t\t\t\t\t\t\tloader.setDRACOLoader(dracoLoader);\n\t\t\t\t\t\t\t\tlet out = await new Promise<GLTF>((reso, rej) => {\n\t\t\t\t\t\t\t\t\tloader.parse(\n\t\t\t\t\t\t\t\t\t\tres,\n\t\t\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t\t\t(d) => {\n\t\t\t\t\t\t\t\t\t\t\treso(d);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t(e) => {\n\t\t\t\t\t\t\t\t\t\t\trej(e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlet parts: any[] = [];\n\t\t\t\t\t\t\t\tlet scene = out.scene;\n\n\t\t\t\t\t\t\t\tclass SHD_Mesh {}\n\n\t\t\t\t\t\t\t\tfunction convertMesh(mesh: THREE.Mesh): SHD_Mesh {\n\t\t\t\t\t\t\t\t\tlet positions: [number, number, number][] = [];\n\t\t\t\t\t\t\t\t\tlet normals: [number, number, number][] = [];\n\t\t\t\t\t\t\t\t\tlet tangents: [number, number, number][] = [];\n\t\t\t\t\t\t\t\t\tlet bitangents: [number, number, number][] = [];\n\t\t\t\t\t\t\t\t\tlet uvs: [number, number][] = [];\n\t\t\t\t\t\t\t\t\tlet colors: [number, number, number, number][] = [];\n\t\t\t\t\t\t\t\t\tlet indices: number[] = [];\n\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.index) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.index.count; i++) {\n\t\t\t\t\t\t\t\t\t\t\tindices.push(mesh.geometry.index?.array[i]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.attributes.position) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.attributes.position.array.length; i += 3) {\n\t\t\t\t\t\t\t\t\t\t\tpositions.push([\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.position.array[i],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.position.array[i + 1],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.position.array[i + 2]\n\t\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.attributes.normal) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.attributes.normal.array.length; i += 3) {\n\t\t\t\t\t\t\t\t\t\t\tnormals.push([\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.normal.array[i],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.normal.array[i + 1],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.normal.array[i + 2]\n\t\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.attributes.tangent) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.attributes.tangent.array.length; i += 4) {\n\t\t\t\t\t\t\t\t\t\t\ttangents.push([\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.tangent.array[i],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.tangent.array[i + 1],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.tangent.array[i + 2]\n\t\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.attributes.bitangent) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.attributes.bitangent.array.length; i += 3) {\n\t\t\t\t\t\t\t\t\t\t\tbitangents.push([\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.bitangent.array[i],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.bitangent.array[i + 1],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.bitangent.array[i + 2]\n\t\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.attributes.uv) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.attributes.uv.array.length; i += 2) {\n\t\t\t\t\t\t\t\t\t\t\tuvs.push([\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.uv.array[i],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.uv.array[i + 1]\n\t\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (mesh.geometry.attributes.color) {\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < mesh.geometry.attributes.color.array.length; i += 4) {\n\t\t\t\t\t\t\t\t\t\t\tcolors.push([\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.color.array[i],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.color.array[i + 1],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.color.array[i + 2],\n\t\t\t\t\t\t\t\t\t\t\t\tmesh.geometry.attributes.color.array[i + 3]\n\t\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet m = new (window as any).SHD_Mesh({}) as any;\n\n\t\t\t\t\t\t\t\t\tm.vertices = positions;\n\t\t\t\t\t\t\t\t\tm.normals = normals;\n\t\t\t\t\t\t\t\t\tm.uvs = uvs;\n\t\t\t\t\t\t\t\t\tm.colors = colors;\n\t\t\t\t\t\t\t\t\tm.triangles = indices;\n\n\t\t\t\t\t\t\t\t\treturn m;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfunction convertTexMap(map: THREE.Texture): ShadeupTexture2d {\n\t\t\t\t\t\t\t\t\tlet t = shadeupMakeTextureFromImageLike(map.source.data);\n\t\t\t\t\t\t\t\t\treturn t;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tscene.traverse((obj) => {\n\t\t\t\t\t\t\t\t\tif (obj instanceof THREEMesh && obj.isMesh) {\n\t\t\t\t\t\t\t\t\t\tlet mobj = obj as THREE.Mesh;\n\t\t\t\t\t\t\t\t\t\tlet m = convertMesh(mobj);\n\t\t\t\t\t\t\t\t\t\tlet mat = mobj.material;\n\t\t\t\t\t\t\t\t\t\tlet part = new (window as any).SHD_ModelPart({}) as any;\n\t\t\t\t\t\t\t\t\t\tif (!Array.isArray(mat)) {\n\t\t\t\t\t\t\t\t\t\t\tlet shdMat = new (window as any).SHD_Material({}) as any;\n\t\t\t\t\t\t\t\t\t\t\tif (mat instanceof MeshStandardMaterial) {\n\t\t\t\t\t\t\t\t\t\t\t\tshdMat.baseColor = [mat.color.r, mat.color.g, mat.color.b, 1];\n\t\t\t\t\t\t\t\t\t\t\t\tif (mat.normalMap) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tshdMat.normal = convertTexMap(mat.normalMap);\n\t\t\t\t\t\t\t\t\t\t\t\t\tshdMat.normalScale = [mat.normalScale.x, mat.normalScale.y];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (mat.map) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tshdMat.color = convertTexMap(mat.map);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (mat.metalnessMap) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tshdMat.metallic = convertTexMap(mat.metalnessMap);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (mat.roughnessMap) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tshdMat.roughness = convertTexMap(mat.roughnessMap);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (mat.emissiveMap) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tshdMat.emissive = convertTexMap(mat.emissiveMap);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tpart.material = shdMat;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tpart.mesh = m;\n\t\t\t\t\t\t\t\t\t\tlet world = obj.getWorldPosition(new Vector3());\n\t\t\t\t\t\t\t\t\t\tpart.position = [world.x, world.y, world.z];\n\n\t\t\t\t\t\t\t\t\t\tparts.push(part);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlet model = new (window as any).SHD_Model({}) as any;\n\t\t\t\t\t\t\t\tmodel.parts = parts;\n\n\t\t\t\t\t\t\t\tloadedAssets.set(key, model);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})()\n\t\t);\n\t}\n\n\tawait Promise.all(promises);\n\tconsole.log('Loaded assets', [...loadedAssets.keys()]);\n}\n\nwindow.addEventListener('message', async function (e: MessageEvent) {\n\tvar mainWindow = e.source;\n\tsourceWindow = mainWindow;\n\tsourceOrigin = e.origin;\n\tvar result = '';\n\n\tif (e.data.type == 'frame') {\n\t\tlogger.innerHTML = '';\n\t\tlogger.style.display = 'none';\n\t\tfpsCanvas.style.display = 'block';\n\t\ttry {\n\t\t\tlet files: ShadeupRenderedFile[] = e.data.files;\n\t\t\tlet hasMain = files.some((f) => f.path == '/main.js');\n\t\t\tregisteredLoads.splice(0, registeredLoads.length);\n\t\t\tregisteredLibs.clear();\n\t\t\t// loadedAssets.clear();\n\t\t\t// console.log(e.data);\n\n\t\t\tfor (let file of files) {\n\t\t\t\t// console.log(file);\n\t\t\t\t(() => {\n\t\t\t\t\tlet define = (deps: string[], func: Function) => {\n\t\t\t\t\t\tglobalDefine(file.path, deps, func);\n\t\t\t\t\t};\n\t\t\t\t\t(window as any).define = define;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet f = new Function(`${file.contents}`);\n\t\t\t\t\t\tf();\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\tresult = e.message;\n\t\t\t\t\t\tconsole.log(file.contents);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\n\t\t\tglobalRequire(['/_std/mesh.js'])[0];\n\n\t\t\t// Load any assets before calling main\n\n\t\t\tawait loadAssets();\n\t\t\tawait loadLibs();\n\n\t\t\tif (hasMain) {\n\t\t\t\ttry {\n\t\t\t\t\tlet outs = globalRequire(['/main.js'])[0];\n\n\t\t\t\t\tif (typeof outs.main === 'function') {\n\t\t\t\t\t\tframeFunc = outs.main;\n\n\t\t\t\t\t\thasLoadedCode = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = 'main is not a function';\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t\tresult = e.message;\n\t\t\t\t}\n\t\t\t\tmainRestart = () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet outs = globalRequire(['/main.js'])[0];\n\n\t\t\t\t\t\tif (typeof outs.main === 'function') {\n\t\t\t\t\t\t\tframeFunc = outs.main;\n\n\t\t\t\t\t\t\thasLoadedCode = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult = 'main is not a function';\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\n\t\t\tresult = 'eval() threw an exception.';\n\t\t}\n\t\tmainWindow.postMessage(result, e.origin);\n\t} else if (e.data.type == 'preview') {\n\t\tconsole.log('preview received', e.data);\n\t\tregisteredLoads.splice(0, registeredLoads.length);\n\t\tregisteredLibs.clear();\n\t\t// loadedAssets.clear();\n\n\t\tisFirstFrame = true;\n\t\thasLoadedCode = false;\n\t\tframeFunc = () => {};\n\t\tclear();\n\n\t\t(() => {\n\t\t\tlet define = (path: string, deps: string[], func: Function) => {\n\t\t\t\tglobalDefine(path, deps, func);\n\t\t\t};\n\t\t\t(window as any).define = define;\n\t\t\ttry {\n\t\t\t\tlet f = new Function(`${e.data.code}`);\n\t\t\t\tf();\n\t\t\t} catch (e: any) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tresult = e.message;\n\t\t\t}\n\t\t})();\n\n\t\tglobalRequire(['/_std/mesh.js'])[0];\n\n\t\tawait loadAssets();\n\t\tawait loadLibs();\n\n\t\ttry {\n\t\t\tlet outs = globalRequire(['/main.js'])[0];\n\n\t\t\tif (typeof outs.main === 'function') {\n\t\t\t\tframeFunc = outs.main;\n\t\t\t\thasLoadedCode = true;\n\t\t\t} else {\n\t\t\t\tresult = 'main is not a function';\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t\t(window as any).bubbleError(e.message);\n\t\t}\n\n\t\tsizeCanvas();\n\t} else if (e.data.type == 'focus') {\n\t\tmouseState.focused = e.data.focused;\n\t\tmouseState.button[0] = false;\n\t\tmouseState.button[1] = false;\n\t\tmouseState.button[2] = false;\n\t\tmouseState.dragging = false;\n\t} else if (e.data.type == 'restart') {\n\t\tregisteredLoads.splice(0, registeredLoads.length);\n\t\tregisteredLibs.clear();\n\t\t// loadedAssets.clear();\n\n\t\tresetFrameContext();\n\t\tlogger.innerHTML = '';\n\t\tlogger.style.display = 'none';\n\n\t\tsizeCanvas();\n\n\t\tmainRestart();\n\t} else if (e.data.type == 'kill') {\n\t\tregisteredLoads.splice(0, registeredLoads.length);\n\t\tregisteredLibs.clear();\n\t\tloadedAssets.clear();\n\n\t\tclear();\n\t\tframeFunc = () => {};\n\t\tisFirstFrame = true;\n\t\thasLoadedCode = false;\n\t\tresetFrameContext();\n\t} else if (e.data.type == 'frameless') {\n\t\tfpsCanvas.style.display = 'none';\n\t} else if (e.data.type == 'meta') {\n\t\tconsole.log('got meta', e.data);\n\t\tlastFrame = performance.now();\n\t\tplaying = e.data.playing;\n\t\tif (e.data.timeMultiplier) {\n\t\t\ttimeMultiplier = e.data.timeMultiplier;\n\t\t}\n\t\tif ('useAnimationFrame' in e.data) {\n\t\t\tuseAnimationFrame = e.data.useAnimationFrame;\n\t\t}\n\t\tif (e.data.roundedCorners) {\n\t\t\tif (!container) return;\n\t\t\tlet containerEl = container as HTMLElement;\n\n\t\t\tif (e.data.roundedCorners.topLeft) {\n\t\t\t\tcanvas.style.borderTopLeftRadius = '0.75rem';\n\t\t\t\tcontainerEl.style.borderTopLeftRadius = '0.75rem';\n\t\t\t} else {\n\t\t\t\tcanvas.style.borderTopLeftRadius = '0';\n\t\t\t\tcontainerEl.style.borderTopLeftRadius = '0';\n\t\t\t}\n\n\t\t\tif (e.data.roundedCorners.topRight) {\n\t\t\t\tcanvas.style.borderTopRightRadius = '0.75rem';\n\t\t\t\tcontainerEl.style.borderTopRightRadius = '0.75rem';\n\t\t\t} else {\n\t\t\t\tcanvas.style.borderTopRightRadius = '0';\n\t\t\t\tcontainerEl.style.borderTopRightRadius = '0';\n\t\t\t}\n\n\t\t\tif (e.data.roundedCorners.bottomLeft) {\n\t\t\t\tcanvas.style.borderBottomLeftRadius = '0.75rem';\n\t\t\t\tcontainerEl.style.borderBottomLeftRadius = '0.75rem';\n\t\t\t} else {\n\t\t\t\tcanvas.style.borderBottomLeftRadius = '0';\n\t\t\t\tcontainerEl.style.borderBottomLeftRadius = '0';\n\t\t\t}\n\n\t\t\tif (e.data.roundedCorners.bottomRight) {\n\t\t\t\tcanvas.style.borderBottomRightRadius = '0.75rem';\n\t\t\t\tcontainerEl.style.borderBottomRightRadius = '0.75rem';\n\t\t\t} else {\n\t\t\t\tcanvas.style.borderBottomRightRadius = '0';\n\t\t\t\tcontainerEl.style.borderBottomRightRadius = '0';\n\t\t\t}\n\t\t}\n\t\tif ('transparent' in e.data) {\n\t\t\tif (container && container instanceof HTMLElement) {\n\t\t\t\tif (e.data.transparent) {\n\t\t\t\t\tcontainer.style.backgroundColor = 'transparent';\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.style.backgroundColor = '#111111';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (e.data.fullscreen) {\n\t\t\tthis.document.body.classList.add('fullscreen');\n\t\t} else {\n\t\t\tthis.document.body.classList.remove('fullscreen');\n\t\t}\n\t} else if (e.data.type == 'screenshot') {\n\t\tif (canvas) {\n\t\t\tlet data = canvas.toDataURL('image/png');\n\n\t\t\tmainWindow.postMessage(\n\t\t\t\t{ type: 'screenshot', data: data, width: canvas.width, height: canvas.height },\n\t\t\t\te.origin\n\t\t\t);\n\t\t} else {\n\t\t\tmainWindow.postMessage({ type: 'screenshot', data: null }, e.origin);\n\t\t}\n\t} else if (e.data.type == 'video') {\n\t\tif (canvas) {\n\t\t\tlet framerate = e.data.framerate ?? 30;\n\t\t\tlet duration = e.data.duration ?? 10;\n\t\t\tlet width = e.data.width ?? canvas.width;\n\t\t\tlet height = e.data.height ?? canvas.height;\n\t\t\tlet format = e.data.format ?? 'webm';\n\n\t\t\tlet videoStream = canvas.captureStream(framerate);\n\t\t\tlet mediaRecorder = new MediaRecorder(videoStream, {\n\t\t\t\tvideoBitsPerSecond: width * height * framerate * 4 * 8\n\t\t\t});\n\n\t\t\tlet chunks: Blob[] = [];\n\t\t\tmediaRecorder.ondataavailable = function (e) {\n\t\t\t\tchunks.push(e.data);\n\t\t\t};\n\t\t\tlet ogOrigin = e.origin;\n\t\t\tmediaRecorder.onstop = async function (e) {\n\t\t\t\tlet blob = new Blob(chunks, { type: 'video/mp4' });\n\t\t\t\tchunks = [];\n\t\t\t\tlet video = document.createElement('video');\n\n\t\t\t\tlet videoURL = URL.createObjectURL(blob);\n\t\t\t\t// video.src = videoURL;\n\t\t\t\t// video.style.position = 'absolute';\n\t\t\t\t// video.style.top = '0';\n\t\t\t\t// video.style.left = '0';\n\t\t\t\t// document.body.appendChild(video);\n\n\t\t\t\tif (format == 'mp4') {\n\t\t\t\t\tlet funcs = await getFfmpeg();\n\t\t\t\t\tlet out = await funcs.transcode(videoURL);\n\t\t\t\t\tvideoURL = out;\n\t\t\t\t}\n\t\t\t\tlet elem = window.document.createElement('a');\n\t\t\t\telem.href = videoURL; //window.URL.createObjectURL(blob);\n\t\t\t\telem.download = 'shadeup_video_capture.' + format.toLowerCase();\n\t\t\t\tdocument.body.appendChild(elem);\n\t\t\t\telem.click();\n\t\t\t\tdocument.body.removeChild(elem);\n\n\t\t\t\tif (mainWindow)\n\t\t\t\t\tmainWindow.postMessage(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\tdata: videoURL,\n\t\t\t\t\t\t\twidth: canvas.width,\n\t\t\t\t\t\t\theight: canvas.height,\n\t\t\t\t\t\t\tframerate: framerate,\n\t\t\t\t\t\t\tduration: duration\n\t\t\t\t\t\t},\n\t\t\t\t\t\togOrigin\n\t\t\t\t\t);\n\t\t\t};\n\t\t\tmediaRecorder.ondataavailable = function (e) {\n\t\t\t\tchunks.push(e.data);\n\t\t\t};\n\n\t\t\tmediaRecorder.start();\n\t\t\tsetTimeout(function () {\n\t\t\t\tmediaRecorder.stop();\n\t\t\t}, duration * 1000);\n\t\t}\n\t} else if (e.data.type == 'enqueue-screenshots') {\n\t\tscreenshotQueue.push(...e.data.items);\n\t} else if (e.data.type == 'get-canvas-size') {\n\t\tmainWindow.postMessage(\n\t\t\t{ type: 'get-canvas-size', width: canvas.width, height: canvas.height },\n\t\t\te.origin\n\t\t);\n\t} else if (e.data.type == 'setInput') {\n\t\tif (!e.data.key) {\n\t\t\tconsole.error('No key provided for input');\n\t\t\treturn;\n\t\t}\n\t\tinputValues.set(e.data.key, e.data.value);\n\t}\n});\n\nfunction printImage(url: string, size = 10) {\n\tvar image = new Image();\n\timage.onload = function () {\n\t\tvar style = [\n\t\t\t'font-size: 1px;',\n\t\t\t'padding: ' + (this.height / 100) * size + 'px ' + (this.width / 100) * size + 'px;',\n\t\t\t'background: url(' + url + ') no-repeat;',\n\t\t\t'background-size: contain;'\n\t\t].join(' ');\n\t\tconsole.log('%c ', style);\n\t};\n\timage.src = url;\n}\n(window as any)._SHADEUP_UI_PUCK = puck;\n(window as any)._SHADEUP_UI_SLIDER = slider;\n(window as any)._SHADEUP_UI_CONTROL = (name: string, ...args: any[]) => {\n\treturn controls[name](...args);\n};\n\nwindow.parent.postMessage({ type: 'ready' }, '*');\n\nfunction bubbleToParent(e: Event) {\n\tif (!sourceWindow || !sourceOrigin) {\n\t\treturn;\n\t}\n\tsourceWindow.postMessage(\n\t\t{\n\t\t\ttype: 'keydown',\n\t\t\tevent: {\n\t\t\t\tkey: (e as KeyboardEvent).key,\n\t\t\t\tctrlKey: (e as KeyboardEvent).ctrlKey,\n\t\t\t\taltKey: (e as KeyboardEvent).altKey,\n\t\t\t\tmetaKey: (e as KeyboardEvent).metaKey,\n\t\t\t\tshiftKey: (e as KeyboardEvent).shiftKey,\n\t\t\t\tcode: (e as KeyboardEvent).code\n\t\t\t}\n\t\t},\n\t\tsourceOrigin\n\t);\n}\n\nfunction handleKeyDown(e: KeyboardEvent) {\n\tif (e.key === 's' && (e.ctrlKey || e.metaKey)) {\n\t\te.preventDefault();\n\t\tbubbleToParent(e);\n\t}\n\n\tif (e.key === 'r' && (e.ctrlKey || e.metaKey)) {\n\t\te.preventDefault();\n\t\tbubbleToParent(e);\n\t}\n}\n\nwindow.addEventListener('keydown', handleKeyDown);\n\n(async () => {\n\tdo {\n\t\tawait frameLoop();\n\t\tif (graphicsAdapter instanceof WebGPUAdapter) {\n\t\t\t// await graphicsAdapter.waitForDraw();\n\t\t}\n\t\tif (useAnimationFrame) {\n\t\t\tawait new Promise(requestAnimationFrame);\n\t\t} else {\n\t\t\tawait new Promise(setZeroTimeout);\n\t\t}\n\t} while (true);\n})();\n\nlet ffmpegFuncs = {};\nlet ffmpeg = null;\nlet ffmpegLoaded = false;\nasync function getFfmpeg(): Promise<any> {\n\tif (!ffmpegLoaded) {\n\t\tconst { FFmpeg } = await import('@ffmpeg/ffmpeg');\n\t\tconst { fetchFile, toBlobURL } = await import('@ffmpeg/util');\n\t\tconst ffmpeg = new FFmpeg();\n\t\tconst baseURL = 'https://unpkg.com/@ffmpeg/core@0.12.2/dist/esm';\n\n\t\tffmpeg.on('log', ({ message }) => {\n\t\t\tconsole.log(message);\n\t\t});\n\t\t// toBlobURL is used to bypass CORS issue, urls with the same\n\t\t// domain can be used directly.\n\t\tawait ffmpeg.load({\n\t\t\tcoreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n\t\t\twasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm')\n\t\t});\n\n\t\tffmpegFuncs = {\n\t\t\tasync transcode(input: string) {\n\t\t\t\tawait ffmpeg.writeFile('input.webm', await fetchFile(input));\n\t\t\t\tawait ffmpeg.exec(['-i', 'input.webm', 'output.mp4']);\n\t\t\t\tconst data = await ffmpeg.readFile('output.mp4');\n\t\t\t\tlet video = document.createElement('video');\n\t\t\t\tlet outSrc = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));\n\t\t\t\tvideo.src = outSrc;\n\t\t\t\tvideo.autoplay = true;\n\t\t\t\tvideo.loop = true;\n\t\t\t\tvideo.controls = true;\n\t\t\t\tdocument.body.appendChild(video);\n\t\t\t\tvideo.style.position = 'absolute';\n\t\t\t\tvideo.style.top = '0';\n\t\t\t\treturn outSrc;\n\t\t\t}\n\t\t};\n\t\tffmpegLoaded = true;\n\t}\n\n\treturn ffmpegFuncs;\n}\n"
  },
  {
    "path": "lang/shadeup/engine/frame-embed.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title>Shadeup engine</title>\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\t\t\t\tline-height: 0;\n\t\t\t\tfont-size: 16px;\n\t\t\t\tposition: relative;\n\t\t\t\tuser-select: none;\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n\t\t\t.render-container {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tleft: 0px;\n\t\t\t\ttop: 0px;\n\t\t\t\tright: 0px;\n\t\t\t\tbottom: 0px;\n\n\t\t\t\tposition: absolute;\n\t\t\t}\n\t\t\t.ui-container {\n\t\t\t\tleft: 0px;\n\t\t\t\ttop: 0px;\n\t\t\t\tright: 0px;\n\t\t\t\tbottom: 0px;\n\n\t\t\t\tposition: absolute;\n\t\t\t}\n\n\t\t\t.puck {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\t/* transform: translate(-50%, -50%); */\n\t\t\t\tbackground-color: #3a3a3a;\n\t\t\t\tbox-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);\n\t\t\t\tcursor: grab;\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tcolor: rgb(80, 80, 80);\n\t\t\t\tuser-select: none;\n\t\t\t\tfont-family: monospace;\n\t\t\t\tline-height: 12px;\n\t\t\t\tfont-size: 12px;\n\t\t\t}\n\n\t\t\t.puck[data-down='true'] {\n\t\t\t\tcursor: grabbing;\n\t\t\t}\n\n\t\t\t.puck span {\n\t\t\t\theight: 14px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body style=\"\" data-rendering-mode=\"%ENGINE_BACKEND%\">\n\t\t<div class=\"render-container\">\n\t\t\t<canvas style=\"position: absolute\" id=\"fps\" width=\"100\" height=\"50\"></canvas>\n\t\t\t<canvas id=\"canvas\" style=\"max-width: 100%\" width=\"1\" height=\"1\"></canvas>\n\t\t</div>\n\t\t<div class=\"ui-container\"></div>\n\t\t<script type=\"module\" src=\"%ENGINE_URL%\"></script>\n\t</body>\n</html>\n"
  },
  {
    "path": "lang/shadeup/engine/frame-headless.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title>Shadeup engine (headless)</title>\n\t</head>\n\t<body>\n\t\t<script>\n\t\t\twindow.LONG_GID = %GID%;\n\t\t</script>\n\t\t<script type=\"module\" src=\"%ENGINE_URL%\"></script>\n\t</body>\n</html>\n"
  },
  {
    "path": "lang/shadeup/engine/frame-preview.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title>Shadeup engine</title>\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\t\t\t\tline-height: 0;\n\t\t\t\tfont-size: 16px;\n\t\t\t\tposition: relative;\n\t\t\t\tuser-select: none;\n\t\t\t}\n\n\t\t\t.render-container {\n\t\t\t\tborder-radius: 0.75rem;\n\t\t\t\tbackground-color: #111111;\n\t\t\t\tleft: 0px;\n\t\t\t\ttop: 0px;\n\t\t\t\tright: 0px;\n\t\t\t\tbottom: 0px;\n\n\t\t\t\tposition: absolute;\n\t\t\t}\n\t\t\t.ui-container {\n\t\t\t\tleft: 0px;\n\t\t\t\ttop: 0px;\n\t\t\t\tright: 0px;\n\t\t\t\tbottom: 0px;\n\n\t\t\t\tposition: absolute;\n\t\t\t}\n\n\t\t\tcanvas {\n\t\t\t\tborder-radius: 0.75rem;\n\t\t\t}\n\n\t\t\t.puck {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\t/* transform: translate(-50%, -50%); */\n\t\t\t\tbackground-color: #3a3a3a;\n\t\t\t\tbox-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);\n\t\t\t\tcursor: grab;\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tcolor: rgb(80, 80, 80);\n\t\t\t\tuser-select: none;\n\t\t\t\tfont-family: monospace;\n\t\t\t\tline-height: 12px;\n\t\t\t\tfont-size: 12px;\n\t\t\t}\n\n\t\t\t.puck[data-down='true'] {\n\t\t\t\tcursor: grabbing;\n\t\t\t}\n\n\t\t\t.puck span {\n\t\t\t\theight: 14px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body style=\"\" data-rendering-mode=\"%ENGINE_BACKEND%\">\n\t\t<div class=\"render-container\">\n\t\t\t<canvas style=\"position: absolute\" id=\"fps\" width=\"100\" height=\"50\"></canvas>\n\t\t\t<canvas id=\"canvas\" style=\"max-width: 100%\" width=\"1\" height=\"1\"></canvas>\n\t\t</div>\n\t\t<div class=\"ui-container\"></div>\n\t\t<script type=\"module\" src=\"%ENGINE_URL%\"></script>\n\t</body>\n</html>\n"
  },
  {
    "path": "lang/shadeup/engine/frame.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title>Shadeup engine</title>\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\t\t\t\tline-height: 0;\n\t\t\t\tfont-size: 16px;\n\t\t\t\tposition: relative;\n\t\t\t\tuser-select: none;\n\t\t\t}\n\n\t\t\t.render-container {\n\t\t\t\tborder-radius: 0.75rem;\n\t\t\t\tbackground-color: #111111;\n\t\t\t\tleft: 24px;\n\t\t\t\ttop: 24px;\n\t\t\t\tright: 24px;\n\t\t\t\tbottom: 24px;\n\n\t\t\t\tposition: absolute;\n\t\t\t}\n\t\t\t.ui-container {\n\t\t\t\tleft: 24px;\n\t\t\t\ttop: 24px;\n\t\t\t\tright: 24px;\n\t\t\t\tbottom: 24px;\n\n\t\t\t\tposition: absolute;\n\t\t\t}\n\n\t\t\tcanvas {\n\t\t\t\tborder-radius: 0.75rem;\n\t\t\t}\n\n\t\t\t.puck {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\t/* transform: translate(-50%, -50%); */\n\t\t\t\tbackground-color: #3a3a3a;\n\t\t\t\tbox-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);\n\t\t\t\tcursor: grab;\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tcolor: rgb(80, 80, 80);\n\t\t\t\tuser-select: none;\n\t\t\t\tfont-family: monospace;\n\t\t\t\tline-height: 12px;\n\t\t\t\tfont-size: 12px;\n\t\t\t}\n\n\t\t\t.puck[data-down='true'] {\n\t\t\t\tcursor: grabbing;\n\t\t\t}\n\n\t\t\t.puck span {\n\t\t\t\theight: 14px;\n\t\t\t}\n\n\t\t\t.fullscreen canvas,\n\t\t\t.fullscreen .render-container {\n\t\t\t\tborder-radius: 0 !important;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body style=\"\" data-rendering-mode=\"%ENGINE_BACKEND%\">\n\t\t<div class=\"render-container\">\n\t\t\t<canvas\n\t\t\t\tstyle=\"position: absolute; right: 72px; bottom: -20px; border-radius: 0px\"\n\t\t\t\tid=\"fps\"\n\t\t\t\twidth=\"64\"\n\t\t\t\theight=\"20\"\n\t\t\t></canvas>\n\t\t\t<canvas id=\"canvas\" style=\"max-width: 100%\" width=\"1\" height=\"1\"></canvas>\n\t\t</div>\n\t\t<div class=\"ui-container\"></div>\n\t\t<script type=\"module\" src=\"%ENGINE_URL%\"></script>\n\t</body>\n</html>\n"
  },
  {
    "path": "lang/shadeup/engine/gltf.js",
    "content": "var Uo=\"155\";var Hl=0,ba=1,Vl=2;var sl=1,Gl=2,hn=3,jt=0,bt=1,Gt=2;var Tn=0,xi=1,Aa=2,Ta=3,Ea=4,Wl=5,mi=100,Xl=101,ql=102,wa=103,Ra=104,Yl=200,Zl=201,Kl=202,Jl=203,rl=204,ol=205,$l=206,jl=207,Ql=208,eh=209,th=210,nh=0,ih=1,sh=2,Kr=3,rh=4,oh=5,ah=6,ch=7,al=0,lh=1,hh=2,En=0,uh=1,dh=2,fh=3,ph=4,mh=5,cl=300,Mi=301,Si=302,Jr=303,$r=304,lr=306,Zn=1e3,Rt=1001,Ki=1002,st=1003,Fs=1004;var Wi=1005;var vt=1006,Do=1007;var Rn=1008;var wn=1009,gh=1010,_h=1011,No=1012,ll=1013,An=1014,dn=1015,Ji=1016,hl=1017,ul=1018,Wn=1020,xh=1021,Ut=1023,yh=1024,vh=1025,Xn=1026,bi=1027,Mh=1028,dl=1029,Sh=1030,fl=1031,pl=1033,_r=33776,xr=33777,yr=33778,vr=33779,Ca=35840,Pa=35841,La=35842,Ia=35843,bh=36196,Ua=37492,Da=37496,Na=37808,Oa=37809,Fa=37810,Ba=37811,za=37812,ka=37813,Ha=37814,Va=37815,Ga=37816,Wa=37817,Xa=37818,qa=37819,Ya=37820,Za=37821,Mr=36492,Ah=36283,Ka=36284,Ja=36285,$a=36286;var Ai=2300,Kn=2301,Sr=2302,ja=2400,Qa=2401,ec=2402,Th=2500;var ml=0,hr=1,cs=2,gl=3e3,qn=3001,Eh=3200,wh=3201,_l=0,Rh=1,Yn=\"\",xe=\"srgb\",Nt=\"srgb-linear\",xl=\"display-p3\";var br=7680;var Ch=519,Ph=512,Lh=513,Ih=514,Uh=515,Dh=516,Nh=517,Oh=518,Fh=519,jr=35044;var tc=\"300 es\",Qr=1035,fn=2e3,Bs=2001,Cn=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let i=this._listeners[e];if(i!==void 0){let r=i.indexOf(t);r!==-1&&i.splice(r,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let n=this._listeners[e.type];if(n!==void 0){e.target=this;let i=n.slice(0);for(let r=0,o=i.length;r<o;r++)i[r].call(this,e);e.target=null}}},dt=[\"00\",\"01\",\"02\",\"03\",\"04\",\"05\",\"06\",\"07\",\"08\",\"09\",\"0a\",\"0b\",\"0c\",\"0d\",\"0e\",\"0f\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"1a\",\"1b\",\"1c\",\"1d\",\"1e\",\"1f\",\"20\",\"21\",\"22\",\"23\",\"24\",\"25\",\"26\",\"27\",\"28\",\"29\",\"2a\",\"2b\",\"2c\",\"2d\",\"2e\",\"2f\",\"30\",\"31\",\"32\",\"33\",\"34\",\"35\",\"36\",\"37\",\"38\",\"39\",\"3a\",\"3b\",\"3c\",\"3d\",\"3e\",\"3f\",\"40\",\"41\",\"42\",\"43\",\"44\",\"45\",\"46\",\"47\",\"48\",\"49\",\"4a\",\"4b\",\"4c\",\"4d\",\"4e\",\"4f\",\"50\",\"51\",\"52\",\"53\",\"54\",\"55\",\"56\",\"57\",\"58\",\"59\",\"5a\",\"5b\",\"5c\",\"5d\",\"5e\",\"5f\",\"60\",\"61\",\"62\",\"63\",\"64\",\"65\",\"66\",\"67\",\"68\",\"69\",\"6a\",\"6b\",\"6c\",\"6d\",\"6e\",\"6f\",\"70\",\"71\",\"72\",\"73\",\"74\",\"75\",\"76\",\"77\",\"78\",\"79\",\"7a\",\"7b\",\"7c\",\"7d\",\"7e\",\"7f\",\"80\",\"81\",\"82\",\"83\",\"84\",\"85\",\"86\",\"87\",\"88\",\"89\",\"8a\",\"8b\",\"8c\",\"8d\",\"8e\",\"8f\",\"90\",\"91\",\"92\",\"93\",\"94\",\"95\",\"96\",\"97\",\"98\",\"99\",\"9a\",\"9b\",\"9c\",\"9d\",\"9e\",\"9f\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\",\"a6\",\"a7\",\"a8\",\"a9\",\"aa\",\"ab\",\"ac\",\"ad\",\"ae\",\"af\",\"b0\",\"b1\",\"b2\",\"b3\",\"b4\",\"b5\",\"b6\",\"b7\",\"b8\",\"b9\",\"ba\",\"bb\",\"bc\",\"bd\",\"be\",\"bf\",\"c0\",\"c1\",\"c2\",\"c3\",\"c4\",\"c5\",\"c6\",\"c7\",\"c8\",\"c9\",\"ca\",\"cb\",\"cc\",\"cd\",\"ce\",\"cf\",\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\",\"d6\",\"d7\",\"d8\",\"d9\",\"da\",\"db\",\"dc\",\"dd\",\"de\",\"df\",\"e0\",\"e1\",\"e2\",\"e3\",\"e4\",\"e5\",\"e6\",\"e7\",\"e8\",\"e9\",\"ea\",\"eb\",\"ec\",\"ed\",\"ee\",\"ef\",\"f0\",\"f1\",\"f2\",\"f3\",\"f4\",\"f5\",\"f6\",\"f7\",\"f8\",\"f9\",\"fa\",\"fb\",\"fc\",\"fd\",\"fe\",\"ff\"],nc=1234567,Xi=Math.PI/180,Ti=180/Math.PI;function Wt(){let s=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(dt[s&255]+dt[s>>8&255]+dt[s>>16&255]+dt[s>>24&255]+\"-\"+dt[e&255]+dt[e>>8&255]+\"-\"+dt[e>>16&15|64]+dt[e>>24&255]+\"-\"+dt[t&63|128]+dt[t>>8&255]+\"-\"+dt[t>>16&255]+dt[t>>24&255]+dt[n&255]+dt[n>>8&255]+dt[n>>16&255]+dt[n>>24&255]).toLowerCase()}function pt(s,e,t){return Math.max(e,Math.min(t,s))}function Oo(s,e){return(s%e+e)%e}function Bh(s,e,t,n,i){return n+(s-e)*(i-n)/(t-e)}function zh(s,e,t){return s!==e?(t-s)/(e-s):0}function qi(s,e,t){return(1-t)*s+t*e}function kh(s,e,t,n){return qi(s,e,1-Math.exp(-t*n))}function Hh(s,e=1){return e-Math.abs(Oo(s,e*2)-e)}function Vh(s,e,t){return s<=e?0:s>=t?1:(s=(s-e)/(t-e),s*s*(3-2*s))}function Gh(s,e,t){return s<=e?0:s>=t?1:(s=(s-e)/(t-e),s*s*s*(s*(s*6-15)+10))}function Wh(s,e){return s+Math.floor(Math.random()*(e-s+1))}function Xh(s,e){return s+Math.random()*(e-s)}function qh(s){return s*(.5-Math.random())}function Yh(s){s!==void 0&&(nc=s);let e=nc+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function Zh(s){return s*Xi}function Kh(s){return s*Ti}function eo(s){return(s&s-1)===0&&s!==0}function yl(s){return Math.pow(2,Math.ceil(Math.log(s)/Math.LN2))}function zs(s){return Math.pow(2,Math.floor(Math.log(s)/Math.LN2))}function Jh(s,e,t,n,i){let r=Math.cos,o=Math.sin,a=r(t/2),c=o(t/2),l=r((e+n)/2),h=o((e+n)/2),u=r((e-n)/2),d=o((e-n)/2),p=r((n-e)/2),g=o((n-e)/2);switch(i){case\"XYX\":s.set(a*h,c*u,c*d,a*l);break;case\"YZY\":s.set(c*d,a*h,c*u,a*l);break;case\"ZXZ\":s.set(c*u,c*d,a*h,a*l);break;case\"XZX\":s.set(a*h,c*g,c*p,a*l);break;case\"YXY\":s.set(c*p,a*h,c*g,a*l);break;case\"ZYZ\":s.set(c*g,c*p,a*h,a*l);break;default:console.warn(\"THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: \"+i)}}function Jt(s,e){switch(e.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error(\"Invalid component type.\")}}function Ve(s,e){switch(e.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error(\"Invalid component type.\")}}var vl={DEG2RAD:Xi,RAD2DEG:Ti,generateUUID:Wt,clamp:pt,euclideanModulo:Oo,mapLinear:Bh,inverseLerp:zh,lerp:qi,damp:kh,pingpong:Hh,smoothstep:Vh,smootherstep:Gh,randInt:Wh,randFloat:Xh,randFloatSpread:qh,seededRandom:Yh,degToRad:Zh,radToDeg:Kh,isPowerOfTwo:eo,ceilPowerOfTwo:yl,floorPowerOfTwo:zs,setQuaternionFromProperEuler:Jh,normalize:Ve,denormalize:Jt},Be=class s{constructor(e=0,t=0){s.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error(\"index is out of range: \"+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error(\"index is out of range: \"+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6],this.y=i[1]*t+i[4]*n+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(pt(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),i=Math.sin(t),r=this.x-e.x,o=this.y-e.y;return this.x=r*n-o*i+e.x,this.y=r*i+o*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Ie=class s{constructor(e,t,n,i,r,o,a,c,l){s.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,i,r,o,a,c,l)}set(e,t,n,i,r,o,a,c,l){let h=this.elements;return h[0]=e,h[1]=i,h[2]=a,h[3]=t,h[4]=r,h[5]=c,h[6]=n,h[7]=o,h[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,o=n[0],a=n[3],c=n[6],l=n[1],h=n[4],u=n[7],d=n[2],p=n[5],g=n[8],_=i[0],m=i[3],f=i[6],S=i[1],x=i[4],A=i[7],E=i[2],C=i[5],w=i[8];return r[0]=o*_+a*S+c*E,r[3]=o*m+a*x+c*C,r[6]=o*f+a*A+c*w,r[1]=l*_+h*S+u*E,r[4]=l*m+h*x+u*C,r[7]=l*f+h*A+u*w,r[2]=d*_+p*S+g*E,r[5]=d*m+p*x+g*C,r[8]=d*f+p*A+g*w,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],a=e[5],c=e[6],l=e[7],h=e[8];return t*o*h-t*a*l-n*r*h+n*a*c+i*r*l-i*o*c}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],a=e[5],c=e[6],l=e[7],h=e[8],u=h*o-a*l,d=a*c-h*r,p=l*r-o*c,g=t*u+n*d+i*p;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);let _=1/g;return e[0]=u*_,e[1]=(i*l-h*n)*_,e[2]=(a*n-i*o)*_,e[3]=d*_,e[4]=(h*t-i*c)*_,e[5]=(i*r-a*t)*_,e[6]=p*_,e[7]=(n*c-l*t)*_,e[8]=(o*t-n*r)*_,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,i,r,o,a){let c=Math.cos(r),l=Math.sin(r);return this.set(n*c,n*l,-n*(c*o+l*a)+o+e,-i*l,i*c,-i*(-l*o+c*a)+a+t,0,0,1),this}scale(e,t){return this.premultiply(Ar.makeScale(e,t)),this}rotate(e){return this.premultiply(Ar.makeRotation(-e)),this}translate(e,t){return this.premultiply(Ar.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let i=0;i<9;i++)if(t[i]!==n[i])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},Ar=new Ie;function Ml(s){for(let e=s.length-1;e>=0;--e)if(s[e]>=65535)return!0;return!1}function $i(s){return document.createElementNS(\"http://www.w3.org/1999/xhtml\",s)}var ic={};function Yi(s){s in ic||(ic[s]=!0,console.warn(s))}function yi(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function Tr(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}var $h=new Ie().fromArray([.8224621,.0331941,.0170827,.177538,.9668058,.0723974,-1e-7,1e-7,.9105199]),jh=new Ie().fromArray([1.2249401,-.0420569,-.0196376,-.2249404,1.0420571,-.0786361,1e-7,0,1.0982735]);function Qh(s){return s.convertSRGBToLinear().applyMatrix3(jh)}function eu(s){return s.applyMatrix3($h).convertLinearToSRGB()}var tu={[Nt]:s=>s,[xe]:s=>s.convertSRGBToLinear(),[xl]:Qh},nu={[Nt]:s=>s,[xe]:s=>s.convertLinearToSRGB(),[xl]:eu},zt={enabled:!0,get legacyMode(){return console.warn(\"THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.\"),!this.enabled},set legacyMode(s){console.warn(\"THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.\"),this.enabled=!s},get workingColorSpace(){return Nt},set workingColorSpace(s){console.warn(\"THREE.ColorManagement: .workingColorSpace is readonly.\")},convert:function(s,e,t){if(this.enabled===!1||e===t||!e||!t)return s;let n=tu[e],i=nu[t];if(n===void 0||i===void 0)throw new Error(`Unsupported color space conversion, \"${e}\" to \"${t}\".`);return i(n(s))},fromWorkingColorSpace:function(s,e){return this.convert(s,this.workingColorSpace,e)},toWorkingColorSpace:function(s,e){return this.convert(s,e,this.workingColorSpace)}},$n,ks=class{static getDataURL(e){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>\"u\")return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{$n===void 0&&($n=$i(\"canvas\")),$n.width=e.width,$n.height=e.height;let n=$n.getContext(\"2d\");e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=$n}return t.width>2048||t.height>2048?(console.warn(\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",e),t.toDataURL(\"image/jpeg\",.6)):t.toDataURL(\"image/png\")}static sRGBToLinear(e){if(typeof HTMLImageElement<\"u\"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<\"u\"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<\"u\"&&e instanceof ImageBitmap){let t=$i(\"canvas\");t.width=e.width,t.height=e.height;let n=t.getContext(\"2d\");n.drawImage(e,0,0,e.width,e.height);let i=n.getImageData(0,0,e.width,e.height),r=i.data;for(let o=0;o<r.length;o++)r[o]=yi(r[o]/255)*255;return n.putImageData(i,0,0),t}else if(e.data){let t=e.data.slice(0);for(let n=0;n<t.length;n++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[n]=Math.floor(yi(t[n]/255)*255):t[n]=yi(t[n]);return{data:t,width:e.width,height:e.height}}else return console.warn(\"THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.\"),e}},iu=0,Hs=class{constructor(e=null){this.isSource=!0,Object.defineProperty(this,\"id\",{value:iu++}),this.uuid=Wt(),this.data=e,this.version=0}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==\"string\";if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:\"\"},i=this.data;if(i!==null){let r;if(Array.isArray(i)){r=[];for(let o=0,a=i.length;o<a;o++)i[o].isDataTexture?r.push(Er(i[o].image)):r.push(Er(i[o]))}else r=Er(i);n.url=r}return t||(e.images[this.uuid]=n),n}};function Er(s){return typeof HTMLImageElement<\"u\"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<\"u\"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<\"u\"&&s instanceof ImageBitmap?ks.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(console.warn(\"THREE.Texture: Unable to serialize Texture.\"),{})}var su=0,mt=class s extends Cn{constructor(e=s.DEFAULT_IMAGE,t=s.DEFAULT_MAPPING,n=Rt,i=Rt,r=vt,o=Rn,a=Ut,c=wn,l=s.DEFAULT_ANISOTROPY,h=Yn){super(),this.isTexture=!0,Object.defineProperty(this,\"id\",{value:su++}),this.uuid=Wt(),this.name=\"\",this.source=new Hs(e),this.mipmaps=[],this.mapping=t,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=a,this.internalFormat=null,this.type=c,this.offset=new Be(0,0),this.repeat=new Be(1,1),this.center=new Be(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Ie,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,typeof h==\"string\"?this.colorSpace=h:(Yi(\"THREE.Texture: Property .encoding has been replaced by .colorSpace.\"),this.colorSpace=h===qn?xe:Yn),this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=e===void 0||typeof e==\"string\";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.6,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\"dispose\"})}transformUv(e){if(this.mapping!==cl)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Zn:e.x=e.x-Math.floor(e.x);break;case Rt:e.x=e.x<0?0:1;break;case Ki:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case Zn:e.y=e.y-Math.floor(e.y);break;case Rt:e.y=e.y<0?0:1;break;case Ki:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}get encoding(){return Yi(\"THREE.Texture: Property .encoding has been replaced by .colorSpace.\"),this.colorSpace===xe?qn:gl}set encoding(e){Yi(\"THREE.Texture: Property .encoding has been replaced by .colorSpace.\"),this.colorSpace=e===qn?xe:Yn}};mt.DEFAULT_IMAGE=null;mt.DEFAULT_MAPPING=cl;mt.DEFAULT_ANISOTROPY=1;var We=class s{constructor(e=0,t=0,n=0,i=1){s.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,i){return this.x=e,this.y=t,this.z=n,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error(\"index is out of range: \"+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\"index is out of range: \"+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=this.w,o=e.elements;return this.x=o[0]*t+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*t+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*t+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*t+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,i,r,c=e.elements,l=c[0],h=c[4],u=c[8],d=c[1],p=c[5],g=c[9],_=c[2],m=c[6],f=c[10];if(Math.abs(h-d)<.01&&Math.abs(u-_)<.01&&Math.abs(g-m)<.01){if(Math.abs(h+d)<.1&&Math.abs(u+_)<.1&&Math.abs(g+m)<.1&&Math.abs(l+p+f-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;let x=(l+1)/2,A=(p+1)/2,E=(f+1)/2,C=(h+d)/4,w=(u+_)/4,k=(g+m)/4;return x>A&&x>E?x<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(x),i=C/n,r=w/n):A>E?A<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(A),n=C/i,r=k/i):E<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(E),n=w/r,i=k/r),this.set(n,i,r,t),this}let S=Math.sqrt((m-g)*(m-g)+(u-_)*(u-_)+(d-h)*(d-h));return Math.abs(S)<.001&&(S=1),this.x=(m-g)/S,this.y=(u-_)/S,this.z=(d-h)/S,this.w=Math.acos((l+p+f-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},to=class extends Cn{constructor(e=1,t=1,n={}){super(),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new We(0,0,e,t),this.scissorTest=!1,this.viewport=new We(0,0,e,t);let i={width:e,height:t,depth:1};n.encoding!==void 0&&(Yi(\"THREE.WebGLRenderTarget: option.encoding has been replaced by option.colorSpace.\"),n.colorSpace=n.encoding===qn?xe:Yn),this.texture=new mt(i,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=n.generateMipmaps!==void 0?n.generateMipmaps:!1,this.texture.internalFormat=n.internalFormat!==void 0?n.internalFormat:null,this.texture.minFilter=n.minFilter!==void 0?n.minFilter:vt,this.depthBuffer=n.depthBuffer!==void 0?n.depthBuffer:!0,this.stencilBuffer=n.stencilBuffer!==void 0?n.stencilBuffer:!1,this.depthTexture=n.depthTexture!==void 0?n.depthTexture:null,this.samples=n.samples!==void 0?n.samples:0}setSize(e,t,n=1){(this.width!==e||this.height!==t||this.depth!==n)&&(this.width=e,this.height=t,this.depth=n,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;let t=Object.assign({},e.texture.image);return this.texture.source=new Hs(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,e.depthTexture!==null&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:\"dispose\"})}},pn=class extends to{constructor(e=1,t=1,n={}){super(e,t,n),this.isWebGLRenderTarget=!0}},Vs=class extends mt{constructor(e=null,t=1,n=1,i=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:n,depth:i},this.magFilter=st,this.minFilter=st,this.wrapR=Rt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}};var no=class extends mt{constructor(e=null,t=1,n=1,i=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:n,depth:i},this.magFilter=st,this.minFilter=st,this.wrapR=Rt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}};var Xt=class{constructor(e=0,t=0,n=0,i=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=i}static slerpFlat(e,t,n,i,r,o,a){let c=n[i+0],l=n[i+1],h=n[i+2],u=n[i+3],d=r[o+0],p=r[o+1],g=r[o+2],_=r[o+3];if(a===0){e[t+0]=c,e[t+1]=l,e[t+2]=h,e[t+3]=u;return}if(a===1){e[t+0]=d,e[t+1]=p,e[t+2]=g,e[t+3]=_;return}if(u!==_||c!==d||l!==p||h!==g){let m=1-a,f=c*d+l*p+h*g+u*_,S=f>=0?1:-1,x=1-f*f;if(x>Number.EPSILON){let E=Math.sqrt(x),C=Math.atan2(E,f*S);m=Math.sin(m*C)/E,a=Math.sin(a*C)/E}let A=a*S;if(c=c*m+d*A,l=l*m+p*A,h=h*m+g*A,u=u*m+_*A,m===1-a){let E=1/Math.sqrt(c*c+l*l+h*h+u*u);c*=E,l*=E,h*=E,u*=E}}e[t]=c,e[t+1]=l,e[t+2]=h,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,i,r,o){let a=n[i],c=n[i+1],l=n[i+2],h=n[i+3],u=r[o],d=r[o+1],p=r[o+2],g=r[o+3];return e[t]=a*g+h*u+c*p-l*d,e[t+1]=c*g+h*d+l*u-a*p,e[t+2]=l*g+h*p+a*d-c*u,e[t+3]=h*g-a*u-c*d-l*p,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){let n=e._x,i=e._y,r=e._z,o=e._order,a=Math.cos,c=Math.sin,l=a(n/2),h=a(i/2),u=a(r/2),d=c(n/2),p=c(i/2),g=c(r/2);switch(o){case\"XYZ\":this._x=d*h*u+l*p*g,this._y=l*p*u-d*h*g,this._z=l*h*g+d*p*u,this._w=l*h*u-d*p*g;break;case\"YXZ\":this._x=d*h*u+l*p*g,this._y=l*p*u-d*h*g,this._z=l*h*g-d*p*u,this._w=l*h*u+d*p*g;break;case\"ZXY\":this._x=d*h*u-l*p*g,this._y=l*p*u+d*h*g,this._z=l*h*g+d*p*u,this._w=l*h*u-d*p*g;break;case\"ZYX\":this._x=d*h*u-l*p*g,this._y=l*p*u+d*h*g,this._z=l*h*g-d*p*u,this._w=l*h*u+d*p*g;break;case\"YZX\":this._x=d*h*u+l*p*g,this._y=l*p*u+d*h*g,this._z=l*h*g-d*p*u,this._w=l*h*u-d*p*g;break;case\"XZY\":this._x=d*h*u-l*p*g,this._y=l*p*u-d*h*g,this._z=l*h*g+d*p*u,this._w=l*h*u+d*p*g;break;default:console.warn(\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \"+o)}return t!==!1&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,i=Math.sin(n);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],i=t[4],r=t[8],o=t[1],a=t[5],c=t[9],l=t[2],h=t[6],u=t[10],d=n+a+u;if(d>0){let p=.5/Math.sqrt(d+1);this._w=.25/p,this._x=(h-c)*p,this._y=(r-l)*p,this._z=(o-i)*p}else if(n>a&&n>u){let p=2*Math.sqrt(1+n-a-u);this._w=(h-c)/p,this._x=.25*p,this._y=(i+o)/p,this._z=(r+l)/p}else if(a>u){let p=2*Math.sqrt(1+a-n-u);this._w=(r-l)/p,this._x=(i+o)/p,this._y=.25*p,this._z=(c+h)/p}else{let p=2*Math.sqrt(1+u-n-a);this._w=(o-i)/p,this._x=(r+l)/p,this._y=(c+h)/p,this._z=.25*p}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<Number.EPSILON?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(pt(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let i=Math.min(1,t/n);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,i=e._y,r=e._z,o=e._w,a=t._x,c=t._y,l=t._z,h=t._w;return this._x=n*h+o*a+i*l-r*c,this._y=i*h+o*c+r*a-n*l,this._z=r*h+o*l+n*c-i*a,this._w=o*h-n*a-i*c-r*l,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);let n=this._x,i=this._y,r=this._z,o=this._w,a=o*e._w+n*e._x+i*e._y+r*e._z;if(a<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e),a>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;let c=1-a*a;if(c<=Number.EPSILON){let p=1-t;return this._w=p*o+t*this._w,this._x=p*n+t*this._x,this._y=p*i+t*this._y,this._z=p*r+t*this._z,this.normalize(),this._onChangeCallback(),this}let l=Math.sqrt(c),h=Math.atan2(l,a),u=Math.sin((1-t)*h)/l,d=Math.sin(t*h)/l;return this._w=o*u+this._w*d,this._x=n*u+this._x*d,this._y=i*u+this._y*d,this._z=r*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=Math.random(),t=Math.sqrt(1-e),n=Math.sqrt(e),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(t*Math.cos(i),n*Math.sin(r),n*Math.cos(r),t*Math.sin(i))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},P=class s{constructor(e=0,t=0,n=0){s.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error(\"index is out of range: \"+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\"index is out of range: \"+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(sc.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(sc.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6]*i,this.y=r[1]*t+r[4]*n+r[7]*i,this.z=r[2]*t+r[5]*n+r[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=e.elements,o=1/(r[3]*t+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*t+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*t+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*t+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(e){let t=this.x,n=this.y,i=this.z,r=e.x,o=e.y,a=e.z,c=e.w,l=c*t+o*i-a*n,h=c*n+a*t-r*i,u=c*i+r*n-o*t,d=-r*t-o*n-a*i;return this.x=l*c+d*-r+h*-a-u*-o,this.y=h*c+d*-o+u*-r-l*-a,this.z=u*c+d*-a+l*-o-h*-r,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*i,this.y=r[1]*t+r[5]*n+r[9]*i,this.z=r[2]*t+r[6]*n+r[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,i=e.y,r=e.z,o=t.x,a=t.y,c=t.z;return this.x=i*c-r*a,this.y=r*o-n*c,this.z=n*a-i*o,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return wr.copy(this).projectOnVector(e),this.sub(wr)}reflect(e){return this.sub(wr.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(pt(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,i=this.z-e.z;return t*t+n*n+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let i=Math.sin(t)*e;return this.x=i*Math.sin(n),this.y=Math.cos(t)*e,this.z=i*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=i,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,n=Math.sqrt(1-e**2);return this.x=n*Math.cos(t),this.y=n*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},wr=new P,sc=new Xt,Ot=class{constructor(e=new P(1/0,1/0,1/0),t=new P(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(sn.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(sn.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=sn.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){if(e.updateWorldMatrix(!1,!1),e.boundingBox!==void 0)e.boundingBox===null&&e.computeBoundingBox(),jn.copy(e.boundingBox),jn.applyMatrix4(e.matrixWorld),this.union(jn);else{let i=e.geometry;if(i!==void 0)if(t&&i.attributes!==void 0&&i.attributes.position!==void 0){let r=i.attributes.position;for(let o=0,a=r.count;o<a;o++)sn.fromBufferAttribute(r,o).applyMatrix4(e.matrixWorld),this.expandByPoint(sn)}else i.boundingBox===null&&i.computeBoundingBox(),jn.copy(i.boundingBox),jn.applyMatrix4(e.matrixWorld),this.union(jn)}let n=e.children;for(let i=0,r=n.length;i<r;i++)this.expandByObject(n[i],t);return this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsSphere(e){return this.clampPoint(e.center,sn),sn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Oi),ds.subVectors(this.max,Oi),Qn.subVectors(e.a,Oi),ei.subVectors(e.b,Oi),ti.subVectors(e.c,Oi),yn.subVectors(ei,Qn),vn.subVectors(ti,ei),Bn.subVectors(Qn,ti);let t=[0,-yn.z,yn.y,0,-vn.z,vn.y,0,-Bn.z,Bn.y,yn.z,0,-yn.x,vn.z,0,-vn.x,Bn.z,0,-Bn.x,-yn.y,yn.x,0,-vn.y,vn.x,0,-Bn.y,Bn.x,0];return!Rr(t,Qn,ei,ti,ds)||(t=[1,0,0,0,1,0,0,0,1],!Rr(t,Qn,ei,ti,ds))?!1:(fs.crossVectors(yn,vn),t=[fs.x,fs.y,fs.z],Rr(t,Qn,ei,ti,ds))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,sn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(sn).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(nn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),nn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),nn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),nn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),nn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),nn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),nn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),nn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(nn),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},nn=[new P,new P,new P,new P,new P,new P,new P,new P],sn=new P,jn=new Ot,Qn=new P,ei=new P,ti=new P,yn=new P,vn=new P,Bn=new P,Oi=new P,ds=new P,fs=new P,zn=new P;function Rr(s,e,t,n,i){for(let r=0,o=s.length-3;r<=o;r+=3){zn.fromArray(s,r);let a=i.x*Math.abs(zn.x)+i.y*Math.abs(zn.y)+i.z*Math.abs(zn.z),c=e.dot(zn),l=t.dot(zn),h=n.dot(zn);if(Math.max(-Math.max(c,l,h),Math.min(c,l,h))>a)return!1}return!0}var ru=new Ot,Fi=new P,Cr=new P,Ct=class{constructor(e=new P,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t!==void 0?n.copy(t):ru.setFromPoints(e).getCenter(n);let i=0;for(let r=0,o=e.length;r<o;r++)i=Math.max(i,n.distanceToSquared(e[r]));return this.radius=Math.sqrt(i),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let n=this.center.distanceToSquared(e);return t.copy(e),n>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Fi.subVectors(e,this.center);let t=Fi.lengthSq();if(t>this.radius*this.radius){let n=Math.sqrt(t),i=(n-this.radius)*.5;this.center.addScaledVector(Fi,i/n),this.radius+=i}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Cr.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Fi.copy(e.center).add(Cr)),this.expandByPoint(Fi.copy(e.center).sub(Cr))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}},rn=new P,Pr=new P,ps=new P,Mn=new P,Lr=new P,ms=new P,Ir=new P,Ei=class{constructor(e=new P,t=new P(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,rn)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=rn.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(rn.copy(this.origin).addScaledVector(this.direction,t),rn.distanceToSquared(e))}distanceSqToSegment(e,t,n,i){Pr.copy(e).add(t).multiplyScalar(.5),ps.copy(t).sub(e).normalize(),Mn.copy(this.origin).sub(Pr);let r=e.distanceTo(t)*.5,o=-this.direction.dot(ps),a=Mn.dot(this.direction),c=-Mn.dot(ps),l=Mn.lengthSq(),h=Math.abs(1-o*o),u,d,p,g;if(h>0)if(u=o*c-a,d=o*a-c,g=r*h,u>=0)if(d>=-g)if(d<=g){let _=1/h;u*=_,d*=_,p=u*(u+o*d+2*a)+d*(o*u+d+2*c)+l}else d=r,u=Math.max(0,-(o*d+a)),p=-u*u+d*(d+2*c)+l;else d=-r,u=Math.max(0,-(o*d+a)),p=-u*u+d*(d+2*c)+l;else d<=-g?(u=Math.max(0,-(-o*r+a)),d=u>0?-r:Math.min(Math.max(-r,-c),r),p=-u*u+d*(d+2*c)+l):d<=g?(u=0,d=Math.min(Math.max(-r,-c),r),p=d*(d+2*c)+l):(u=Math.max(0,-(o*r+a)),d=u>0?r:Math.min(Math.max(-r,-c),r),p=-u*u+d*(d+2*c)+l);else d=o>0?-r:r,u=Math.max(0,-(o*d+a)),p=-u*u+d*(d+2*c)+l;return n&&n.copy(this.origin).addScaledVector(this.direction,u),i&&i.copy(Pr).addScaledVector(ps,d),p}intersectSphere(e,t){rn.subVectors(e.center,this.origin);let n=rn.dot(this.direction),i=rn.dot(rn)-n*n,r=e.radius*e.radius;if(i>r)return null;let o=Math.sqrt(r-i),a=n-o,c=n+o;return c<0?null:a<0?this.at(c,t):this.at(a,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,i,r,o,a,c,l=1/this.direction.x,h=1/this.direction.y,u=1/this.direction.z,d=this.origin;return l>=0?(n=(e.min.x-d.x)*l,i=(e.max.x-d.x)*l):(n=(e.max.x-d.x)*l,i=(e.min.x-d.x)*l),h>=0?(r=(e.min.y-d.y)*h,o=(e.max.y-d.y)*h):(r=(e.max.y-d.y)*h,o=(e.min.y-d.y)*h),n>o||r>i||((r>n||isNaN(n))&&(n=r),(o<i||isNaN(i))&&(i=o),u>=0?(a=(e.min.z-d.z)*u,c=(e.max.z-d.z)*u):(a=(e.max.z-d.z)*u,c=(e.min.z-d.z)*u),n>c||a>i)||((a>n||n!==n)&&(n=a),(c<i||i!==i)&&(i=c),i<0)?null:this.at(n>=0?n:i,t)}intersectsBox(e){return this.intersectBox(e,rn)!==null}intersectTriangle(e,t,n,i,r){Lr.subVectors(t,e),ms.subVectors(n,e),Ir.crossVectors(Lr,ms);let o=this.direction.dot(Ir),a;if(o>0){if(i)return null;a=1}else if(o<0)a=-1,o=-o;else return null;Mn.subVectors(this.origin,e);let c=a*this.direction.dot(ms.crossVectors(Mn,ms));if(c<0)return null;let l=a*this.direction.dot(Lr.cross(Mn));if(l<0||c+l>o)return null;let h=-a*Mn.dot(Ir);return h<0?null:this.at(h/o,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},Ue=class s{constructor(e,t,n,i,r,o,a,c,l,h,u,d,p,g,_,m){s.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,i,r,o,a,c,l,h,u,d,p,g,_,m)}set(e,t,n,i,r,o,a,c,l,h,u,d,p,g,_,m){let f=this.elements;return f[0]=e,f[4]=t,f[8]=n,f[12]=i,f[1]=r,f[5]=o,f[9]=a,f[13]=c,f[2]=l,f[6]=h,f[10]=u,f[14]=d,f[3]=p,f[7]=g,f[11]=_,f[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new s().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,i=1/ni.setFromMatrixColumn(e,0).length(),r=1/ni.setFromMatrixColumn(e,1).length(),o=1/ni.setFromMatrixColumn(e,2).length();return t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=0,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=0,t[8]=n[8]*o,t[9]=n[9]*o,t[10]=n[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,i=e.y,r=e.z,o=Math.cos(n),a=Math.sin(n),c=Math.cos(i),l=Math.sin(i),h=Math.cos(r),u=Math.sin(r);if(e.order===\"XYZ\"){let d=o*h,p=o*u,g=a*h,_=a*u;t[0]=c*h,t[4]=-c*u,t[8]=l,t[1]=p+g*l,t[5]=d-_*l,t[9]=-a*c,t[2]=_-d*l,t[6]=g+p*l,t[10]=o*c}else if(e.order===\"YXZ\"){let d=c*h,p=c*u,g=l*h,_=l*u;t[0]=d+_*a,t[4]=g*a-p,t[8]=o*l,t[1]=o*u,t[5]=o*h,t[9]=-a,t[2]=p*a-g,t[6]=_+d*a,t[10]=o*c}else if(e.order===\"ZXY\"){let d=c*h,p=c*u,g=l*h,_=l*u;t[0]=d-_*a,t[4]=-o*u,t[8]=g+p*a,t[1]=p+g*a,t[5]=o*h,t[9]=_-d*a,t[2]=-o*l,t[6]=a,t[10]=o*c}else if(e.order===\"ZYX\"){let d=o*h,p=o*u,g=a*h,_=a*u;t[0]=c*h,t[4]=g*l-p,t[8]=d*l+_,t[1]=c*u,t[5]=_*l+d,t[9]=p*l-g,t[2]=-l,t[6]=a*c,t[10]=o*c}else if(e.order===\"YZX\"){let d=o*c,p=o*l,g=a*c,_=a*l;t[0]=c*h,t[4]=_-d*u,t[8]=g*u+p,t[1]=u,t[5]=o*h,t[9]=-a*h,t[2]=-l*h,t[6]=p*u+g,t[10]=d-_*u}else if(e.order===\"XZY\"){let d=o*c,p=o*l,g=a*c,_=a*l;t[0]=c*h,t[4]=-u,t[8]=l*h,t[1]=d*u+_,t[5]=o*h,t[9]=p*u-g,t[2]=g*u-p,t[6]=a*h,t[10]=_*u+d}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(ou,e,au)}lookAt(e,t,n){let i=this.elements;return Et.subVectors(e,t),Et.lengthSq()===0&&(Et.z=1),Et.normalize(),Sn.crossVectors(n,Et),Sn.lengthSq()===0&&(Math.abs(n.z)===1?Et.x+=1e-4:Et.z+=1e-4,Et.normalize(),Sn.crossVectors(n,Et)),Sn.normalize(),gs.crossVectors(Et,Sn),i[0]=Sn.x,i[4]=gs.x,i[8]=Et.x,i[1]=Sn.y,i[5]=gs.y,i[9]=Et.y,i[2]=Sn.z,i[6]=gs.z,i[10]=Et.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,o=n[0],a=n[4],c=n[8],l=n[12],h=n[1],u=n[5],d=n[9],p=n[13],g=n[2],_=n[6],m=n[10],f=n[14],S=n[3],x=n[7],A=n[11],E=n[15],C=i[0],w=i[4],k=i[8],v=i[12],T=i[1],Y=i[5],ne=i[9],B=i[13],V=i[2],G=i[6],$=i[10],W=i[14],q=i[3],Z=i[7],K=i[11],D=i[15];return r[0]=o*C+a*T+c*V+l*q,r[4]=o*w+a*Y+c*G+l*Z,r[8]=o*k+a*ne+c*$+l*K,r[12]=o*v+a*B+c*W+l*D,r[1]=h*C+u*T+d*V+p*q,r[5]=h*w+u*Y+d*G+p*Z,r[9]=h*k+u*ne+d*$+p*K,r[13]=h*v+u*B+d*W+p*D,r[2]=g*C+_*T+m*V+f*q,r[6]=g*w+_*Y+m*G+f*Z,r[10]=g*k+_*ne+m*$+f*K,r[14]=g*v+_*B+m*W+f*D,r[3]=S*C+x*T+A*V+E*q,r[7]=S*w+x*Y+A*G+E*Z,r[11]=S*k+x*ne+A*$+E*K,r[15]=S*v+x*B+A*W+E*D,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],i=e[8],r=e[12],o=e[1],a=e[5],c=e[9],l=e[13],h=e[2],u=e[6],d=e[10],p=e[14],g=e[3],_=e[7],m=e[11],f=e[15];return g*(+r*c*u-i*l*u-r*a*d+n*l*d+i*a*p-n*c*p)+_*(+t*c*p-t*l*d+r*o*d-i*o*p+i*l*h-r*c*h)+m*(+t*l*u-t*a*p-r*o*u+n*o*p+r*a*h-n*l*h)+f*(-i*a*h-t*c*u+t*a*d+i*o*u-n*o*d+n*c*h)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=t,i[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],a=e[5],c=e[6],l=e[7],h=e[8],u=e[9],d=e[10],p=e[11],g=e[12],_=e[13],m=e[14],f=e[15],S=u*m*l-_*d*l+_*c*p-a*m*p-u*c*f+a*d*f,x=g*d*l-h*m*l-g*c*p+o*m*p+h*c*f-o*d*f,A=h*_*l-g*u*l+g*a*p-o*_*p-h*a*f+o*u*f,E=g*u*c-h*_*c-g*a*d+o*_*d+h*a*m-o*u*m,C=t*S+n*x+i*A+r*E;if(C===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let w=1/C;return e[0]=S*w,e[1]=(_*d*r-u*m*r-_*i*p+n*m*p+u*i*f-n*d*f)*w,e[2]=(a*m*r-_*c*r+_*i*l-n*m*l-a*i*f+n*c*f)*w,e[3]=(u*c*r-a*d*r-u*i*l+n*d*l+a*i*p-n*c*p)*w,e[4]=x*w,e[5]=(h*m*r-g*d*r+g*i*p-t*m*p-h*i*f+t*d*f)*w,e[6]=(g*c*r-o*m*r-g*i*l+t*m*l+o*i*f-t*c*f)*w,e[7]=(o*d*r-h*c*r+h*i*l-t*d*l-o*i*p+t*c*p)*w,e[8]=A*w,e[9]=(g*u*r-h*_*r-g*n*p+t*_*p+h*n*f-t*u*f)*w,e[10]=(o*_*r-g*a*r+g*n*l-t*_*l-o*n*f+t*a*f)*w,e[11]=(h*a*r-o*u*r-h*n*l+t*u*l+o*n*p-t*a*p)*w,e[12]=E*w,e[13]=(h*_*i-g*u*i+g*n*d-t*_*d-h*n*m+t*u*m)*w,e[14]=(g*a*i-o*_*i-g*n*c+t*_*c+o*n*m-t*a*m)*w,e[15]=(o*u*i-h*a*i+h*n*c-t*u*c-o*n*d+t*a*d)*w,this}scale(e){let t=this.elements,n=e.x,i=e.y,r=e.z;return t[0]*=n,t[4]*=i,t[8]*=r,t[1]*=n,t[5]*=i,t[9]*=r,t[2]*=n,t[6]*=i,t[10]*=r,t[3]*=n,t[7]*=i,t[11]*=r,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,i))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),i=Math.sin(t),r=1-n,o=e.x,a=e.y,c=e.z,l=r*o,h=r*a;return this.set(l*o+n,l*a-i*c,l*c+i*a,0,l*a+i*c,h*a+n,h*c-i*o,0,l*c-i*a,h*c+i*o,r*c*c+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,i,r,o){return this.set(1,n,r,0,e,1,o,0,t,i,1,0,0,0,0,1),this}compose(e,t,n){let i=this.elements,r=t._x,o=t._y,a=t._z,c=t._w,l=r+r,h=o+o,u=a+a,d=r*l,p=r*h,g=r*u,_=o*h,m=o*u,f=a*u,S=c*l,x=c*h,A=c*u,E=n.x,C=n.y,w=n.z;return i[0]=(1-(_+f))*E,i[1]=(p+A)*E,i[2]=(g-x)*E,i[3]=0,i[4]=(p-A)*C,i[5]=(1-(d+f))*C,i[6]=(m+S)*C,i[7]=0,i[8]=(g+x)*w,i[9]=(m-S)*w,i[10]=(1-(d+_))*w,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,t,n){let i=this.elements,r=ni.set(i[0],i[1],i[2]).length(),o=ni.set(i[4],i[5],i[6]).length(),a=ni.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),e.x=i[12],e.y=i[13],e.z=i[14],kt.copy(this);let l=1/r,h=1/o,u=1/a;return kt.elements[0]*=l,kt.elements[1]*=l,kt.elements[2]*=l,kt.elements[4]*=h,kt.elements[5]*=h,kt.elements[6]*=h,kt.elements[8]*=u,kt.elements[9]*=u,kt.elements[10]*=u,t.setFromRotationMatrix(kt),n.x=r,n.y=o,n.z=a,this}makePerspective(e,t,n,i,r,o,a=fn){let c=this.elements,l=2*r/(t-e),h=2*r/(n-i),u=(t+e)/(t-e),d=(n+i)/(n-i),p,g;if(a===fn)p=-(o+r)/(o-r),g=-2*o*r/(o-r);else if(a===Bs)p=-o/(o-r),g=-o*r/(o-r);else throw new Error(\"THREE.Matrix4.makePerspective(): Invalid coordinate system: \"+a);return c[0]=l,c[4]=0,c[8]=u,c[12]=0,c[1]=0,c[5]=h,c[9]=d,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,i,r,o,a=fn){let c=this.elements,l=1/(t-e),h=1/(n-i),u=1/(o-r),d=(t+e)*l,p=(n+i)*h,g,_;if(a===fn)g=(o+r)*u,_=-2*u;else if(a===Bs)g=r*u,_=-1*u;else throw new Error(\"THREE.Matrix4.makeOrthographic(): Invalid coordinate system: \"+a);return c[0]=2*l,c[4]=0,c[8]=0,c[12]=-d,c[1]=0,c[5]=2*h,c[9]=0,c[13]=-p,c[2]=0,c[6]=0,c[10]=_,c[14]=-g,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let i=0;i<16;i++)if(t[i]!==n[i])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},ni=new P,kt=new Ue,ou=new P(0,0,0),au=new P(1,1,1),Sn=new P,gs=new P,Et=new P,rc=new Ue,oc=new Xt,Gs=class s{constructor(e=0,t=0,n=0,i=s.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,i=this._order){return this._x=e,this._y=t,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let i=e.elements,r=i[0],o=i[4],a=i[8],c=i[1],l=i[5],h=i[9],u=i[2],d=i[6],p=i[10];switch(t){case\"XYZ\":this._y=Math.asin(pt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-o,r)):(this._x=Math.atan2(d,l),this._z=0);break;case\"YXZ\":this._x=Math.asin(-pt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-u,r),this._z=0);break;case\"ZXY\":this._x=Math.asin(pt(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-o,l)):(this._y=0,this._z=Math.atan2(c,r));break;case\"ZYX\":this._y=Math.asin(-pt(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(c,r)):(this._x=0,this._z=Math.atan2(-o,l));break;case\"YZX\":this._z=Math.asin(pt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-h,l),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(a,p));break;case\"XZY\":this._z=Math.asin(-pt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn(\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \"+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return rc.makeRotationFromQuaternion(e),this.setFromRotationMatrix(rc,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return oc.setFromEuler(this),this.setFromQuaternion(oc,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Gs.DEFAULT_ORDER=\"XYZ\";var Ws=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!==0}},cu=0,ac=new P,ii=new Xt,on=new Ue,_s=new P,Bi=new P,lu=new P,hu=new Xt,cc=new P(1,0,0),lc=new P(0,1,0),hc=new P(0,0,1),uu={type:\"added\"},uc={type:\"removed\"},Qe=class s extends Cn{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,\"id\",{value:cu++}),this.uuid=Wt(),this.name=\"\",this.type=\"Object3D\",this.parent=null,this.children=[],this.up=s.DEFAULT_UP.clone();let e=new P,t=new Gs,n=new Xt,i=new P(1,1,1);function r(){n.setFromEuler(t,!1)}function o(){t.setFromQuaternion(n,void 0,!1)}t._onChange(r),n._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Ue},normalMatrix:{value:new Ie}}),this.matrix=new Ue,this.matrixWorld=new Ue,this.matrixAutoUpdate=s.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=s.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new Ws,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return ii.setFromAxisAngle(e,t),this.quaternion.multiply(ii),this}rotateOnWorldAxis(e,t){return ii.setFromAxisAngle(e,t),this.quaternion.premultiply(ii),this}rotateX(e){return this.rotateOnAxis(cc,e)}rotateY(e){return this.rotateOnAxis(lc,e)}rotateZ(e){return this.rotateOnAxis(hc,e)}translateOnAxis(e,t){return ac.copy(e).applyQuaternion(this.quaternion),this.position.add(ac.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(cc,e)}translateY(e){return this.translateOnAxis(lc,e)}translateZ(e){return this.translateOnAxis(hc,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(on.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?_s.copy(e):_s.set(e,t,n);let i=this.parent;this.updateWorldMatrix(!0,!1),Bi.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?on.lookAt(Bi,_s,this.up):on.lookAt(_s,Bi,this.up),this.quaternion.setFromRotationMatrix(on),i&&(on.extractRotation(i.matrixWorld),ii.setFromRotationMatrix(on),this.quaternion.premultiply(ii.invert()))}add(e){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return e===this?(console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",e),this):(e&&e.isObject3D?(e.parent!==null&&e.parent.remove(e),e.parent=this,this.children.push(e),e.dispatchEvent(uu)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",e),this)}remove(e){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(uc)),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){for(let e=0;e<this.children.length;e++){let t=this.children[e];t.parent=null,t.dispatchEvent(uc)}return this.children.length=0,this}attach(e){return this.updateWorldMatrix(!0,!1),on.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),on.multiply(e.parent.matrixWorld)),e.applyMatrix4(on),this.add(e),e.updateWorldMatrix(!1,!0),this}getObjectById(e){return this.getObjectByProperty(\"id\",e)}getObjectByName(e){return this.getObjectByProperty(\"name\",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,i=this.children.length;n<i;n++){let o=this.children[n].getObjectByProperty(e,t);if(o!==void 0)return o}}getObjectsByProperty(e,t){let n=[];this[e]===t&&n.push(this);for(let i=0,r=this.children.length;i<r;i++){let o=this.children[i].getObjectsByProperty(e,t);o.length>0&&(n=n.concat(o))}return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Bi,e,lu),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Bi,hu,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,i=t.length;n<i;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,i=t.length;n<i;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,i=t.length;n<i;n++){let r=t[n];(r.matrixWorldAutoUpdate===!0||e===!0)&&r.updateMatrixWorld(e)}}updateWorldMatrix(e,t){let n=this.parent;if(e===!0&&n!==null&&n.matrixWorldAutoUpdate===!0&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),t===!0){let i=this.children;for(let r=0,o=i.length;r<o;r++){let a=i[r];a.matrixWorldAutoUpdate===!0&&a.updateWorldMatrix(!1,!0)}}}toJSON(e){let t=e===void 0||typeof e==\"string\",n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.6,type:\"Object\",generator:\"Object3D.toJSON\"});let i={};i.uuid=this.uuid,i.type=this.type,this.name!==\"\"&&(i.name=this.name),this.castShadow===!0&&(i.castShadow=!0),this.receiveShadow===!0&&(i.receiveShadow=!0),this.visible===!1&&(i.visible=!1),this.frustumCulled===!1&&(i.frustumCulled=!1),this.renderOrder!==0&&(i.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type=\"InstancedMesh\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON()));function r(a,c){return a[c.uuid]===void 0&&(a[c.uuid]=c.toJSON(e)),c.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(e.geometries,this.geometry);let a=this.geometry.parameters;if(a!==void 0&&a.shapes!==void 0){let c=a.shapes;if(Array.isArray(c))for(let l=0,h=c.length;l<h;l++){let u=c[l];r(e.shapes,u)}else r(e.shapes,c)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(e.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let a=[];for(let c=0,l=this.material.length;c<l;c++)a.push(r(e.materials,this.material[c]));i.material=a}else i.material=r(e.materials,this.material);if(this.children.length>0){i.children=[];for(let a=0;a<this.children.length;a++)i.children.push(this.children[a].toJSON(e).object)}if(this.animations.length>0){i.animations=[];for(let a=0;a<this.animations.length;a++){let c=this.animations[a];i.animations.push(r(e.animations,c))}}if(t){let a=o(e.geometries),c=o(e.materials),l=o(e.textures),h=o(e.images),u=o(e.shapes),d=o(e.skeletons),p=o(e.animations),g=o(e.nodes);a.length>0&&(n.geometries=a),c.length>0&&(n.materials=c),l.length>0&&(n.textures=l),h.length>0&&(n.images=h),u.length>0&&(n.shapes=u),d.length>0&&(n.skeletons=d),p.length>0&&(n.animations=p),g.length>0&&(n.nodes=g)}return n.object=i,n;function o(a){let c=[];for(let l in a){let h=a[l];delete h.metadata,c.push(h)}return c}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let n=0;n<e.children.length;n++){let i=e.children[n];this.add(i.clone())}return this}};Qe.DEFAULT_UP=new P(0,1,0);Qe.DEFAULT_MATRIX_AUTO_UPDATE=!0;Qe.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Ht=new P,an=new P,Ur=new P,cn=new P,si=new P,ri=new P,dc=new P,Dr=new P,Nr=new P,Or=new P,xs=!1,gi=class s{constructor(e=new P,t=new P,n=new P){this.a=e,this.b=t,this.c=n}static getNormal(e,t,n,i){i.subVectors(n,t),Ht.subVectors(e,t),i.cross(Ht);let r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(e,t,n,i,r){Ht.subVectors(i,t),an.subVectors(n,t),Ur.subVectors(e,t);let o=Ht.dot(Ht),a=Ht.dot(an),c=Ht.dot(Ur),l=an.dot(an),h=an.dot(Ur),u=o*l-a*a;if(u===0)return r.set(-2,-1,-1);let d=1/u,p=(l*c-a*h)*d,g=(o*h-a*c)*d;return r.set(1-p-g,g,p)}static containsPoint(e,t,n,i){return this.getBarycoord(e,t,n,i,cn),cn.x>=0&&cn.y>=0&&cn.x+cn.y<=1}static getUV(e,t,n,i,r,o,a,c){return xs===!1&&(console.warn(\"THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().\"),xs=!0),this.getInterpolation(e,t,n,i,r,o,a,c)}static getInterpolation(e,t,n,i,r,o,a,c){return this.getBarycoord(e,t,n,i,cn),c.setScalar(0),c.addScaledVector(r,cn.x),c.addScaledVector(o,cn.y),c.addScaledVector(a,cn.z),c}static isFrontFacing(e,t,n,i){return Ht.subVectors(n,t),an.subVectors(e,t),Ht.cross(an).dot(i)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,i){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,t,n,i){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Ht.subVectors(this.c,this.b),an.subVectors(this.a,this.b),Ht.cross(an).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return s.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return s.getBarycoord(e,this.a,this.b,this.c,t)}getUV(e,t,n,i,r){return xs===!1&&(console.warn(\"THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().\"),xs=!0),s.getInterpolation(e,this.a,this.b,this.c,t,n,i,r)}getInterpolation(e,t,n,i,r){return s.getInterpolation(e,this.a,this.b,this.c,t,n,i,r)}containsPoint(e){return s.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return s.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,i=this.b,r=this.c,o,a;si.subVectors(i,n),ri.subVectors(r,n),Dr.subVectors(e,n);let c=si.dot(Dr),l=ri.dot(Dr);if(c<=0&&l<=0)return t.copy(n);Nr.subVectors(e,i);let h=si.dot(Nr),u=ri.dot(Nr);if(h>=0&&u<=h)return t.copy(i);let d=c*u-h*l;if(d<=0&&c>=0&&h<=0)return o=c/(c-h),t.copy(n).addScaledVector(si,o);Or.subVectors(e,r);let p=si.dot(Or),g=ri.dot(Or);if(g>=0&&p<=g)return t.copy(r);let _=p*l-c*g;if(_<=0&&l>=0&&g<=0)return a=l/(l-g),t.copy(n).addScaledVector(ri,a);let m=h*g-p*u;if(m<=0&&u-h>=0&&p-g>=0)return dc.subVectors(r,i),a=(u-h)/(u-h+(p-g)),t.copy(i).addScaledVector(dc,a);let f=1/(m+_+d);return o=_*f,a=d*f,t.copy(n).addScaledVector(si,o).addScaledVector(ri,a)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},du=0,Pt=class extends Cn{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,\"id\",{value:du++}),this.uuid=Wt(),this.name=\"\",this.type=\"Material\",this.blending=xi,this.side=jt,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=rl,this.blendDst=ol,this.blendEquation=mi,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=Kr,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Ch,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=br,this.stencilZFail=br,this.stencilZPass=br,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}let i=this[t];if(i===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==\"string\";t&&(e={textures:{},images:{}});let n={metadata:{version:4.6,type:\"Material\",generator:\"Material.toJSON\"}};n.uuid=this.uuid,n.type=this.type,this.name!==\"\"&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==xi&&(n.blending=this.blending),this.side!==jt&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=this.alphaHash),this.alphaToCoverage===!0&&(n.alphaToCoverage=this.alphaToCoverage),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=this.premultipliedAlpha),this.forceSinglePass===!0&&(n.forceSinglePass=this.forceSinglePass),this.wireframe===!0&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==\"round\"&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==\"round\"&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=this.flatShading),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function i(r){let o=[];for(let a in r){let c=r[a];delete c.metadata,o.push(c)}return o}if(t){let r=i(e.textures),o=i(e.images);r.length>0&&(n.textures=r),o.length>0&&(n.images=o)}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let i=t.length;n=new Array(i);for(let r=0;r!==i;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}set needsUpdate(e){e===!0&&this.version++}},Sl={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Vt={h:0,s:0,l:0},ys={h:0,s:0,l:0};function Fr(s,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?s+(e-s)*6*t:t<1/2?e:t<2/3?s+(e-s)*6*(2/3-t):s}var Ae=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let i=e;i&&i.isColor?this.copy(i):typeof i==\"number\"?this.setHex(i):typeof i==\"string\"&&this.setStyle(i)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=xe){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,zt.toWorkingColorSpace(this,t),this}setRGB(e,t,n,i=zt.workingColorSpace){return this.r=e,this.g=t,this.b=n,zt.toWorkingColorSpace(this,i),this}setHSL(e,t,n,i=zt.workingColorSpace){if(e=Oo(e,1),t=pt(t,0,1),n=pt(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,o=2*n-r;this.r=Fr(o,r,e+1/3),this.g=Fr(o,r,e),this.b=Fr(o,r,e-1/3)}return zt.toWorkingColorSpace(this,i),this}setStyle(e,t=xe){function n(r){r!==void 0&&parseFloat(r)<1&&console.warn(\"THREE.Color: Alpha component of \"+e+\" will be ignored.\")}let i;if(i=/^(\\w+)\\(([^\\)]*)\\)/.exec(e)){let r,o=i[1],a=i[2];switch(o){case\"rgb\":case\"rgba\":if(r=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case\"hsl\":case\"hsla\":if(r=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:console.warn(\"THREE.Color: Unknown color model \"+e)}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(e)){let r=i[1],o=r.length;if(o===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,t);if(o===6)return this.setHex(parseInt(r,16),t);console.warn(\"THREE.Color: Invalid hex color \"+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=xe){let n=Sl[e.toLowerCase()];return n!==void 0?this.setHex(n,t):console.warn(\"THREE.Color: Unknown color \"+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=yi(e.r),this.g=yi(e.g),this.b=yi(e.b),this}copyLinearToSRGB(e){return this.r=Tr(e.r),this.g=Tr(e.g),this.b=Tr(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=xe){return zt.fromWorkingColorSpace(ft.copy(this),e),Math.round(pt(ft.r*255,0,255))*65536+Math.round(pt(ft.g*255,0,255))*256+Math.round(pt(ft.b*255,0,255))}getHexString(e=xe){return(\"000000\"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=zt.workingColorSpace){zt.fromWorkingColorSpace(ft.copy(this),t);let n=ft.r,i=ft.g,r=ft.b,o=Math.max(n,i,r),a=Math.min(n,i,r),c,l,h=(a+o)/2;if(a===o)c=0,l=0;else{let u=o-a;switch(l=h<=.5?u/(o+a):u/(2-o-a),o){case n:c=(i-r)/u+(i<r?6:0);break;case i:c=(r-n)/u+2;break;case r:c=(n-i)/u+4;break}c/=6}return e.h=c,e.s=l,e.l=h,e}getRGB(e,t=zt.workingColorSpace){return zt.fromWorkingColorSpace(ft.copy(this),t),e.r=ft.r,e.g=ft.g,e.b=ft.b,e}getStyle(e=xe){zt.fromWorkingColorSpace(ft.copy(this),e);let t=ft.r,n=ft.g,i=ft.b;return e!==xe?`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${i.toFixed(3)})`:`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(i*255)})`}offsetHSL(e,t,n){return this.getHSL(Vt),Vt.h+=e,Vt.s+=t,Vt.l+=n,this.setHSL(Vt.h,Vt.s,Vt.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(Vt),e.getHSL(ys);let n=qi(Vt.h,ys.h,t),i=qi(Vt.s,ys.s,t),r=qi(Vt.l,ys.l,t);return this.setHSL(n,i,r),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,i=this.b,r=e.elements;return this.r=r[0]*t+r[3]*n+r[6]*i,this.g=r[1]*t+r[4]*n+r[7]*i,this.b=r[2]*t+r[5]*n+r[8]*i,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},ft=new Ae;Ae.NAMES=Sl;var Qt=class extends Pt{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=\"MeshBasicMaterial\",this.color=new Ae(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=al,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}};var it=new P,vs=new Be,$e=class{constructor(e,t,n=!1){if(Array.isArray(e))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.isBufferAttribute=!0,this.name=\"\",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=n,this.usage=jr,this.updateRange={offset:0,count:-1},this.gpuType=dn,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let i=0,r=this.itemSize;i<r;i++)this.array[e+i]=t.array[n+i];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(this.itemSize===2)for(let t=0,n=this.count;t<n;t++)vs.fromBufferAttribute(this,t),vs.applyMatrix3(e),this.setXY(t,vs.x,vs.y);else if(this.itemSize===3)for(let t=0,n=this.count;t<n;t++)it.fromBufferAttribute(this,t),it.applyMatrix3(e),this.setXYZ(t,it.x,it.y,it.z);return this}applyMatrix4(e){for(let t=0,n=this.count;t<n;t++)it.fromBufferAttribute(this,t),it.applyMatrix4(e),this.setXYZ(t,it.x,it.y,it.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)it.fromBufferAttribute(this,t),it.applyNormalMatrix(e),this.setXYZ(t,it.x,it.y,it.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)it.fromBufferAttribute(this,t),it.transformDirection(e),this.setXYZ(t,it.x,it.y,it.z);return this}set(e,t=0){return this.array.set(e,t),this}getComponent(e,t){let n=this.array[e*this.itemSize+t];return this.normalized&&(n=Jt(n,this.array)),n}setComponent(e,t,n){return this.normalized&&(n=Ve(n,this.array)),this.array[e*this.itemSize+t]=n,this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=Jt(t,this.array)),t}setX(e,t){return this.normalized&&(t=Ve(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=Jt(t,this.array)),t}setY(e,t){return this.normalized&&(t=Ve(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=Jt(t,this.array)),t}setZ(e,t){return this.normalized&&(t=Ve(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=Jt(t,this.array)),t}setW(e,t){return this.normalized&&(t=Ve(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,n){return e*=this.itemSize,this.normalized&&(t=Ve(t,this.array),n=Ve(n,this.array)),this.array[e+0]=t,this.array[e+1]=n,this}setXYZ(e,t,n,i){return e*=this.itemSize,this.normalized&&(t=Ve(t,this.array),n=Ve(n,this.array),i=Ve(i,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=i,this}setXYZW(e,t,n,i,r){return e*=this.itemSize,this.normalized&&(t=Ve(t,this.array),n=Ve(n,this.array),i=Ve(i,this.array),r=Ve(r,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=i,this.array[e+3]=r,this}onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==\"\"&&(e.name=this.name),this.usage!==jr&&(e.usage=this.usage),(this.updateRange.offset!==0||this.updateRange.count!==-1)&&(e.updateRange=this.updateRange),e}};var Xs=class extends $e{constructor(e,t,n){super(new Uint16Array(e),t,n)}};var qs=class extends $e{constructor(e,t,n){super(new Uint32Array(e),t,n)}};var Dt=class extends $e{constructor(e,t,n){super(new Float32Array(e),t,n)}};var fu=0,It=new Ue,Br=new Qe,oi=new P,wt=new Ot,zi=new Ot,at=new P,At=class s extends Cn{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,\"id\",{value:fu++}),this.uuid=Wt(),this.name=\"\",this.type=\"BufferGeometry\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(Ml(e)?qs:Xs)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let r=new Ie().getNormalMatrix(e);n.applyNormalMatrix(r),n.needsUpdate=!0}let i=this.attributes.tangent;return i!==void 0&&(i.transformDirection(e),i.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(e){return It.makeRotationFromQuaternion(e),this.applyMatrix4(It),this}rotateX(e){return It.makeRotationX(e),this.applyMatrix4(It),this}rotateY(e){return It.makeRotationY(e),this.applyMatrix4(It),this}rotateZ(e){return It.makeRotationZ(e),this.applyMatrix4(It),this}translate(e,t,n){return It.makeTranslation(e,t,n),this.applyMatrix4(It),this}scale(e,t,n){return It.makeScale(e,t,n),this.applyMatrix4(It),this}lookAt(e){return Br.lookAt(e),Br.updateMatrix(),this.applyMatrix4(Br.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(oi).negate(),this.translate(oi.x,oi.y,oi.z),this}setFromPoints(e){let t=[];for(let n=0,i=e.length;n<i;n++){let r=e[n];t.push(r.x,r.y,r.z||0)}return this.setAttribute(\"position\",new Dt(t,3)),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ot);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),this.boundingBox.set(new P(-1/0,-1/0,-1/0),new P(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let n=0,i=t.length;n<i;n++){let r=t[n];wt.setFromBufferAttribute(r),this.morphTargetsRelative?(at.addVectors(this.boundingBox.min,wt.min),this.boundingBox.expandByPoint(at),at.addVectors(this.boundingBox.max,wt.max),this.boundingBox.expandByPoint(at)):(this.boundingBox.expandByPoint(wt.min),this.boundingBox.expandByPoint(wt.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Ct);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),this.boundingSphere.set(new P,1/0);return}if(e){let n=this.boundingSphere.center;if(wt.setFromBufferAttribute(e),t)for(let r=0,o=t.length;r<o;r++){let a=t[r];zi.setFromBufferAttribute(a),this.morphTargetsRelative?(at.addVectors(wt.min,zi.min),wt.expandByPoint(at),at.addVectors(wt.max,zi.max),wt.expandByPoint(at)):(wt.expandByPoint(zi.min),wt.expandByPoint(zi.max))}wt.getCenter(n);let i=0;for(let r=0,o=e.count;r<o;r++)at.fromBufferAttribute(e,r),i=Math.max(i,n.distanceToSquared(at));if(t)for(let r=0,o=t.length;r<o;r++){let a=t[r],c=this.morphTargetsRelative;for(let l=0,h=a.count;l<h;l++)at.fromBufferAttribute(a,l),c&&(oi.fromBufferAttribute(e,l),at.add(oi)),i=Math.max(i,n.distanceToSquared(at))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}computeTangents(){let e=this.index,t=this.attributes;if(e===null||t.position===void 0||t.normal===void 0||t.uv===void 0){console.error(\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\");return}let n=e.array,i=t.position.array,r=t.normal.array,o=t.uv.array,a=i.length/3;this.hasAttribute(\"tangent\")===!1&&this.setAttribute(\"tangent\",new $e(new Float32Array(4*a),4));let c=this.getAttribute(\"tangent\").array,l=[],h=[];for(let T=0;T<a;T++)l[T]=new P,h[T]=new P;let u=new P,d=new P,p=new P,g=new Be,_=new Be,m=new Be,f=new P,S=new P;function x(T,Y,ne){u.fromArray(i,T*3),d.fromArray(i,Y*3),p.fromArray(i,ne*3),g.fromArray(o,T*2),_.fromArray(o,Y*2),m.fromArray(o,ne*2),d.sub(u),p.sub(u),_.sub(g),m.sub(g);let B=1/(_.x*m.y-m.x*_.y);isFinite(B)&&(f.copy(d).multiplyScalar(m.y).addScaledVector(p,-_.y).multiplyScalar(B),S.copy(p).multiplyScalar(_.x).addScaledVector(d,-m.x).multiplyScalar(B),l[T].add(f),l[Y].add(f),l[ne].add(f),h[T].add(S),h[Y].add(S),h[ne].add(S))}let A=this.groups;A.length===0&&(A=[{start:0,count:n.length}]);for(let T=0,Y=A.length;T<Y;++T){let ne=A[T],B=ne.start,V=ne.count;for(let G=B,$=B+V;G<$;G+=3)x(n[G+0],n[G+1],n[G+2])}let E=new P,C=new P,w=new P,k=new P;function v(T){w.fromArray(r,T*3),k.copy(w);let Y=l[T];E.copy(Y),E.sub(w.multiplyScalar(w.dot(Y))).normalize(),C.crossVectors(k,Y);let B=C.dot(h[T])<0?-1:1;c[T*4]=E.x,c[T*4+1]=E.y,c[T*4+2]=E.z,c[T*4+3]=B}for(let T=0,Y=A.length;T<Y;++T){let ne=A[T],B=ne.start,V=ne.count;for(let G=B,$=B+V;G<$;G+=3)v(n[G+0]),v(n[G+1]),v(n[G+2])}}computeVertexNormals(){let e=this.index,t=this.getAttribute(\"position\");if(t!==void 0){let n=this.getAttribute(\"normal\");if(n===void 0)n=new $e(new Float32Array(t.count*3),3),this.setAttribute(\"normal\",n);else for(let d=0,p=n.count;d<p;d++)n.setXYZ(d,0,0,0);let i=new P,r=new P,o=new P,a=new P,c=new P,l=new P,h=new P,u=new P;if(e)for(let d=0,p=e.count;d<p;d+=3){let g=e.getX(d+0),_=e.getX(d+1),m=e.getX(d+2);i.fromBufferAttribute(t,g),r.fromBufferAttribute(t,_),o.fromBufferAttribute(t,m),h.subVectors(o,r),u.subVectors(i,r),h.cross(u),a.fromBufferAttribute(n,g),c.fromBufferAttribute(n,_),l.fromBufferAttribute(n,m),a.add(h),c.add(h),l.add(h),n.setXYZ(g,a.x,a.y,a.z),n.setXYZ(_,c.x,c.y,c.z),n.setXYZ(m,l.x,l.y,l.z)}else for(let d=0,p=t.count;d<p;d+=3)i.fromBufferAttribute(t,d+0),r.fromBufferAttribute(t,d+1),o.fromBufferAttribute(t,d+2),h.subVectors(o,r),u.subVectors(i,r),h.cross(u),n.setXYZ(d+0,h.x,h.y,h.z),n.setXYZ(d+1,h.x,h.y,h.z),n.setXYZ(d+2,h.x,h.y,h.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let e=this.attributes.normal;for(let t=0,n=e.count;t<n;t++)at.fromBufferAttribute(e,t),at.normalize(),e.setXYZ(t,at.x,at.y,at.z)}toNonIndexed(){function e(a,c){let l=a.array,h=a.itemSize,u=a.normalized,d=new l.constructor(c.length*h),p=0,g=0;for(let _=0,m=c.length;_<m;_++){a.isInterleavedBufferAttribute?p=c[_]*a.data.stride+a.offset:p=c[_]*h;for(let f=0;f<h;f++)d[g++]=l[p++]}return new $e(d,h,u)}if(this.index===null)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"),this;let t=new s,n=this.index.array,i=this.attributes;for(let a in i){let c=i[a],l=e(c,n);t.setAttribute(a,l)}let r=this.morphAttributes;for(let a in r){let c=[],l=r[a];for(let h=0,u=l.length;h<u;h++){let d=l[h],p=e(d,n);c.push(p)}t.morphAttributes[a]=c}t.morphTargetsRelative=this.morphTargetsRelative;let o=this.groups;for(let a=0,c=o.length;a<c;a++){let l=o[a];t.addGroup(l.start,l.count,l.materialIndex)}return t}toJSON(){let e={metadata:{version:4.6,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};if(e.uuid=this.uuid,e.type=this.type,this.name!==\"\"&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),this.parameters!==void 0){let c=this.parameters;for(let l in c)c[l]!==void 0&&(e[l]=c[l]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let c in n){let l=n[c];e.data.attributes[c]=l.toJSON(e.data)}let i={},r=!1;for(let c in this.morphAttributes){let l=this.morphAttributes[c],h=[];for(let u=0,d=l.length;u<d;u++){let p=l[u];h.push(p.toJSON(e.data))}h.length>0&&(i[c]=h,r=!0)}r&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);let o=this.groups;o.length>0&&(e.data.groups=JSON.parse(JSON.stringify(o)));let a=this.boundingSphere;return a!==null&&(e.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone(t));let i=e.attributes;for(let l in i){let h=i[l];this.setAttribute(l,h.clone(t))}let r=e.morphAttributes;for(let l in r){let h=[],u=r[l];for(let d=0,p=u.length;d<p;d++)h.push(u[d].clone(t));this.morphAttributes[l]=h}this.morphTargetsRelative=e.morphTargetsRelative;let o=e.groups;for(let l=0,h=o.length;l<h;l++){let u=o[l];this.addGroup(u.start,u.count,u.materialIndex)}let a=e.boundingBox;a!==null&&(this.boundingBox=a.clone());let c=e.boundingSphere;return c!==null&&(this.boundingSphere=c.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,this}dispose(){this.dispatchEvent({type:\"dispose\"})}},fc=new Ue,kn=new Ei,Ms=new Ct,pc=new P,ai=new P,ci=new P,li=new P,zr=new P,Ss=new P,bs=new Be,As=new Be,Ts=new Be,mc=new P,gc=new P,_c=new P,Es=new P,ws=new P,Mt=class extends Qe{constructor(e=new At,t=new Qt){super(),this.isMesh=!0,this.type=\"Mesh\",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=e.material,this.geometry=e.geometry,this}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let i=t[n[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=i.length;r<o;r++){let a=i[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=r}}}}getVertexPosition(e,t){let n=this.geometry,i=n.attributes.position,r=n.morphAttributes.position,o=n.morphTargetsRelative;t.fromBufferAttribute(i,e);let a=this.morphTargetInfluences;if(r&&a){Ss.set(0,0,0);for(let c=0,l=r.length;c<l;c++){let h=a[c],u=r[c];h!==0&&(zr.fromBufferAttribute(u,e),o?Ss.addScaledVector(zr,h):Ss.addScaledVector(zr.sub(t),h))}t.add(Ss)}return t}raycast(e,t){let n=this.geometry,i=this.material,r=this.matrixWorld;i!==void 0&&(n.boundingSphere===null&&n.computeBoundingSphere(),Ms.copy(n.boundingSphere),Ms.applyMatrix4(r),kn.copy(e.ray).recast(e.near),!(Ms.containsPoint(kn.origin)===!1&&(kn.intersectSphere(Ms,pc)===null||kn.origin.distanceToSquared(pc)>(e.far-e.near)**2))&&(fc.copy(r).invert(),kn.copy(e.ray).applyMatrix4(fc),!(n.boundingBox!==null&&kn.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,kn)))}_computeIntersections(e,t,n){let i,r=this.geometry,o=this.material,a=r.index,c=r.attributes.position,l=r.attributes.uv,h=r.attributes.uv1,u=r.attributes.normal,d=r.groups,p=r.drawRange;if(a!==null)if(Array.isArray(o))for(let g=0,_=d.length;g<_;g++){let m=d[g],f=o[m.materialIndex],S=Math.max(m.start,p.start),x=Math.min(a.count,Math.min(m.start+m.count,p.start+p.count));for(let A=S,E=x;A<E;A+=3){let C=a.getX(A),w=a.getX(A+1),k=a.getX(A+2);i=Rs(this,f,e,n,l,h,u,C,w,k),i&&(i.faceIndex=Math.floor(A/3),i.face.materialIndex=m.materialIndex,t.push(i))}}else{let g=Math.max(0,p.start),_=Math.min(a.count,p.start+p.count);for(let m=g,f=_;m<f;m+=3){let S=a.getX(m),x=a.getX(m+1),A=a.getX(m+2);i=Rs(this,o,e,n,l,h,u,S,x,A),i&&(i.faceIndex=Math.floor(m/3),t.push(i))}}else if(c!==void 0)if(Array.isArray(o))for(let g=0,_=d.length;g<_;g++){let m=d[g],f=o[m.materialIndex],S=Math.max(m.start,p.start),x=Math.min(c.count,Math.min(m.start+m.count,p.start+p.count));for(let A=S,E=x;A<E;A+=3){let C=A,w=A+1,k=A+2;i=Rs(this,f,e,n,l,h,u,C,w,k),i&&(i.faceIndex=Math.floor(A/3),i.face.materialIndex=m.materialIndex,t.push(i))}}else{let g=Math.max(0,p.start),_=Math.min(c.count,p.start+p.count);for(let m=g,f=_;m<f;m+=3){let S=m,x=m+1,A=m+2;i=Rs(this,o,e,n,l,h,u,S,x,A),i&&(i.faceIndex=Math.floor(m/3),t.push(i))}}}};function pu(s,e,t,n,i,r,o,a){let c;if(e.side===bt?c=n.intersectTriangle(o,r,i,!0,a):c=n.intersectTriangle(i,r,o,e.side===jt,a),c===null)return null;ws.copy(a),ws.applyMatrix4(s.matrixWorld);let l=t.ray.origin.distanceTo(ws);return l<t.near||l>t.far?null:{distance:l,point:ws.clone(),object:s}}function Rs(s,e,t,n,i,r,o,a,c,l){s.getVertexPosition(a,ai),s.getVertexPosition(c,ci),s.getVertexPosition(l,li);let h=pu(s,e,t,n,ai,ci,li,Es);if(h){i&&(bs.fromBufferAttribute(i,a),As.fromBufferAttribute(i,c),Ts.fromBufferAttribute(i,l),h.uv=gi.getInterpolation(Es,ai,ci,li,bs,As,Ts,new Be)),r&&(bs.fromBufferAttribute(r,a),As.fromBufferAttribute(r,c),Ts.fromBufferAttribute(r,l),h.uv1=gi.getInterpolation(Es,ai,ci,li,bs,As,Ts,new Be),h.uv2=h.uv1),o&&(mc.fromBufferAttribute(o,a),gc.fromBufferAttribute(o,c),_c.fromBufferAttribute(o,l),h.normal=gi.getInterpolation(Es,ai,ci,li,mc,gc,_c,new P),h.normal.dot(n.direction)>0&&h.normal.multiplyScalar(-1));let u={a,b:c,c:l,normal:new P,materialIndex:0};gi.getNormal(ai,ci,li,u.normal),h.face=u}return h}var ji=class s extends At{constructor(e=1,t=1,n=1,i=1,r=1,o=1){super(),this.type=\"BoxGeometry\",this.parameters={width:e,height:t,depth:n,widthSegments:i,heightSegments:r,depthSegments:o};let a=this;i=Math.floor(i),r=Math.floor(r),o=Math.floor(o);let c=[],l=[],h=[],u=[],d=0,p=0;g(\"z\",\"y\",\"x\",-1,-1,n,t,e,o,r,0),g(\"z\",\"y\",\"x\",1,-1,n,t,-e,o,r,1),g(\"x\",\"z\",\"y\",1,1,e,n,t,i,o,2),g(\"x\",\"z\",\"y\",1,-1,e,n,-t,i,o,3),g(\"x\",\"y\",\"z\",1,-1,e,t,n,i,r,4),g(\"x\",\"y\",\"z\",-1,-1,e,t,-n,i,r,5),this.setIndex(c),this.setAttribute(\"position\",new Dt(l,3)),this.setAttribute(\"normal\",new Dt(h,3)),this.setAttribute(\"uv\",new Dt(u,2));function g(_,m,f,S,x,A,E,C,w,k,v){let T=A/w,Y=E/k,ne=A/2,B=E/2,V=C/2,G=w+1,$=k+1,W=0,q=0,Z=new P;for(let K=0;K<$;K++){let D=K*Y-B;for(let X=0;X<G;X++){let oe=X*T-ne;Z[_]=oe*S,Z[m]=D*x,Z[f]=V,l.push(Z.x,Z.y,Z.z),Z[_]=0,Z[m]=0,Z[f]=C>0?1:-1,h.push(Z.x,Z.y,Z.z),u.push(X/w),u.push(1-K/k),W+=1}}for(let K=0;K<k;K++)for(let D=0;D<w;D++){let X=d+D+G*K,oe=d+D+G*(K+1),ae=d+(D+1)+G*(K+1),ce=d+(D+1)+G*K;c.push(X,oe,ce),c.push(oe,ae,ce),q+=6}a.addGroup(p,q,v),p+=q,d+=W}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new s(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}};function wi(s){let e={};for(let t in s){e[t]={};for(let n in s[t]){let i=s[t][n];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture||i.isQuaternion)?i.isRenderTargetTexture?(console.warn(\"UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().\"),e[t][n]=null):e[t][n]=i.clone():Array.isArray(i)?e[t][n]=i.slice():e[t][n]=i}}return e}function yt(s){let e={};for(let t=0;t<s.length;t++){let n=wi(s[t]);for(let i in n)e[i]=n[i]}return e}function mu(s){let e=[];for(let t=0;t<s.length;t++)e.push(s[t].clone());return e}function bl(s){return s.getRenderTarget()===null?s.outputColorSpace:Nt}var gu={clone:wi,merge:yt},_u=`void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}`,xu=`void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}`,mn=class extends Pt{constructor(e){super(),this.isShaderMaterial=!0,this.type=\"ShaderMaterial\",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=_u,this.fragmentShader=xu,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=wi(e.uniforms),this.uniformsGroups=mu(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){let t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(let i in this.uniforms){let o=this.uniforms[i].value;o&&o.isTexture?t.uniforms[i]={type:\"t\",value:o.toJSON(e).uuid}:o&&o.isColor?t.uniforms[i]={type:\"c\",value:o.getHex()}:o&&o.isVector2?t.uniforms[i]={type:\"v2\",value:o.toArray()}:o&&o.isVector3?t.uniforms[i]={type:\"v3\",value:o.toArray()}:o&&o.isVector4?t.uniforms[i]={type:\"v4\",value:o.toArray()}:o&&o.isMatrix3?t.uniforms[i]={type:\"m3\",value:o.toArray()}:o&&o.isMatrix4?t.uniforms[i]={type:\"m4\",value:o.toArray()}:t.uniforms[i]={value:o}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let i in this.extensions)this.extensions[i]===!0&&(n[i]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}},Ys=class extends Qe{constructor(){super(),this.isCamera=!0,this.type=\"Camera\",this.matrixWorldInverse=new Ue,this.projectionMatrix=new Ue,this.projectionMatrixInverse=new Ue,this.coordinateSystem=fn}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},lt=class extends Ys{constructor(e=50,t=1,n=.1,i=2e3){super(),this.isPerspectiveCamera=!0,this.type=\"PerspectiveCamera\",this.fov=e,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=Ti*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(Xi*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return Ti*2*Math.atan(Math.tan(Xi*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,n,i,r,o){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(Xi*.5*this.fov)/this.zoom,n=2*t,i=this.aspect*n,r=-.5*i,o=this.view;if(this.view!==null&&this.view.enabled){let c=o.fullWidth,l=o.fullHeight;r+=o.offsetX*i/c,t-=o.offsetY*n/l,i*=o.width/c,n*=o.height/l}let a=this.filmOffset;a!==0&&(r+=e*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,t,t-n,e,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},hi=-90,ui=1,io=class extends Qe{constructor(e,t,n){super(),this.type=\"CubeCamera\",this.renderTarget=n,this.coordinateSystem=null;let i=new lt(hi,ui,e,t);i.layers=this.layers,this.add(i);let r=new lt(hi,ui,e,t);r.layers=this.layers,this.add(r);let o=new lt(hi,ui,e,t);o.layers=this.layers,this.add(o);let a=new lt(hi,ui,e,t);a.layers=this.layers,this.add(a);let c=new lt(hi,ui,e,t);c.layers=this.layers,this.add(c);let l=new lt(hi,ui,e,t);l.layers=this.layers,this.add(l)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,i,r,o,a,c]=t;for(let l of t)this.remove(l);if(e===fn)n.up.set(0,1,0),n.lookAt(1,0,0),i.up.set(0,1,0),i.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),o.up.set(0,0,1),o.lookAt(0,-1,0),a.up.set(0,1,0),a.lookAt(0,0,1),c.up.set(0,1,0),c.lookAt(0,0,-1);else if(e===Bs)n.up.set(0,-1,0),n.lookAt(-1,0,0),i.up.set(0,-1,0),i.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),o.up.set(0,0,-1),o.lookAt(0,-1,0),a.up.set(0,-1,0),a.lookAt(0,0,1),c.up.set(0,-1,0),c.lookAt(0,0,-1);else throw new Error(\"THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: \"+e);for(let l of t)this.add(l),l.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let n=this.renderTarget;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,r,o,a,c,l]=this.children,h=e.getRenderTarget(),u=e.xr.enabled;e.xr.enabled=!1;let d=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0),e.render(t,i),e.setRenderTarget(n,1),e.render(t,r),e.setRenderTarget(n,2),e.render(t,o),e.setRenderTarget(n,3),e.render(t,a),e.setRenderTarget(n,4),e.render(t,c),n.texture.generateMipmaps=d,e.setRenderTarget(n,5),e.render(t,l),e.setRenderTarget(h),e.xr.enabled=u,n.texture.needsPMREMUpdate=!0}},Zs=class extends mt{constructor(e,t,n,i,r,o,a,c,l,h){e=e!==void 0?e:[],t=t!==void 0?t:Mi,super(e,t,n,i,r,o,a,c,l,h),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},so=class extends pn{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1},i=[n,n,n,n,n,n];t.encoding!==void 0&&(Yi(\"THREE.WebGLCubeRenderTarget: option.encoding has been replaced by option.colorSpace.\"),t.colorSpace=t.encoding===qn?xe:Yn),this.texture=new Zs(i,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=t.generateMipmaps!==void 0?t.generateMipmaps:!1,this.texture.minFilter=t.minFilter!==void 0?t.minFilter:vt}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t`,fragmentShader:`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`},i=new ji(5,5,5),r=new mn({name:\"CubemapFromEquirect\",uniforms:wi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:bt,blending:Tn});r.uniforms.tEquirect.value=t;let o=new Mt(i,r),a=t.minFilter;return t.minFilter===Rn&&(t.minFilter=vt),new io(1,10,this).update(e,o),t.minFilter=a,o.geometry.dispose(),o.material.dispose(),this}clear(e,t,n,i){let r=e.getRenderTarget();for(let o=0;o<6;o++)e.setRenderTarget(this,o),e.clear(t,n,i);e.setRenderTarget(r)}},kr=new P,yu=new P,vu=new Ie,un=class{constructor(e=new P(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,i){return this.normal.set(e,t,n),this.constant=i,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){let i=kr.subVectors(n,t).cross(yu.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(i,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t){let n=e.delta(kr),i=this.normal.dot(n);if(i===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;let r=-(e.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:t.copy(e.start).addScaledVector(n,r)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||vu.getNormalMatrix(e),i=this.coplanarPoint(kr).applyMatrix4(e),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},Hn=new Ct,Cs=new P,Qi=class{constructor(e=new un,t=new un,n=new un,i=new un,r=new un,o=new un){this.planes=[e,t,n,i,r,o]}set(e,t,n,i,r,o){let a=this.planes;return a[0].copy(e),a[1].copy(t),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(o),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=fn){let n=this.planes,i=e.elements,r=i[0],o=i[1],a=i[2],c=i[3],l=i[4],h=i[5],u=i[6],d=i[7],p=i[8],g=i[9],_=i[10],m=i[11],f=i[12],S=i[13],x=i[14],A=i[15];if(n[0].setComponents(c-r,d-l,m-p,A-f).normalize(),n[1].setComponents(c+r,d+l,m+p,A+f).normalize(),n[2].setComponents(c+o,d+h,m+g,A+S).normalize(),n[3].setComponents(c-o,d-h,m-g,A-S).normalize(),n[4].setComponents(c-a,d-u,m-_,A-x).normalize(),t===fn)n[5].setComponents(c+a,d+u,m+_,A+x).normalize();else if(t===Bs)n[5].setComponents(a,u,_,x).normalize();else throw new Error(\"THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: \"+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Hn.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Hn.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Hn)}intersectsSprite(e){return Hn.center.set(0,0,0),Hn.radius=.7071067811865476,Hn.applyMatrix4(e.matrixWorld),this.intersectsSphere(Hn)}intersectsSphere(e){let t=this.planes,n=e.center,i=-e.radius;for(let r=0;r<6;r++)if(t[r].distanceToPoint(n)<i)return!1;return!0}intersectsBox(e){let t=this.planes;for(let n=0;n<6;n++){let i=t[n];if(Cs.x=i.normal.x>0?e.max.x:e.min.x,Cs.y=i.normal.y>0?e.max.y:e.min.y,Cs.z=i.normal.z>0?e.max.z:e.min.z,i.distanceToPoint(Cs)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}};function Al(){let s=null,e=!1,t=null,n=null;function i(r,o){t(r,o),n=s.requestAnimationFrame(i)}return{start:function(){e!==!0&&t!==null&&(n=s.requestAnimationFrame(i),e=!0)},stop:function(){s.cancelAnimationFrame(n),e=!1},setAnimationLoop:function(r){t=r},setContext:function(r){s=r}}}function Mu(s,e){let t=e.isWebGL2,n=new WeakMap;function i(l,h){let u=l.array,d=l.usage,p=s.createBuffer();s.bindBuffer(h,p),s.bufferData(h,u,d),l.onUploadCallback();let g;if(u instanceof Float32Array)g=s.FLOAT;else if(u instanceof Uint16Array)if(l.isFloat16BufferAttribute)if(t)g=s.HALF_FLOAT;else throw new Error(\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\");else g=s.UNSIGNED_SHORT;else if(u instanceof Int16Array)g=s.SHORT;else if(u instanceof Uint32Array)g=s.UNSIGNED_INT;else if(u instanceof Int32Array)g=s.INT;else if(u instanceof Int8Array)g=s.BYTE;else if(u instanceof Uint8Array)g=s.UNSIGNED_BYTE;else if(u instanceof Uint8ClampedArray)g=s.UNSIGNED_BYTE;else throw new Error(\"THREE.WebGLAttributes: Unsupported buffer data format: \"+u);return{buffer:p,type:g,bytesPerElement:u.BYTES_PER_ELEMENT,version:l.version}}function r(l,h,u){let d=h.array,p=h.updateRange;s.bindBuffer(u,l),p.count===-1?s.bufferSubData(u,0,d):(t?s.bufferSubData(u,p.offset*d.BYTES_PER_ELEMENT,d,p.offset,p.count):s.bufferSubData(u,p.offset*d.BYTES_PER_ELEMENT,d.subarray(p.offset,p.offset+p.count)),p.count=-1),h.onUploadCallback()}function o(l){return l.isInterleavedBufferAttribute&&(l=l.data),n.get(l)}function a(l){l.isInterleavedBufferAttribute&&(l=l.data);let h=n.get(l);h&&(s.deleteBuffer(h.buffer),n.delete(l))}function c(l,h){if(l.isGLBufferAttribute){let d=n.get(l);(!d||d.version<l.version)&&n.set(l,{buffer:l.buffer,type:l.type,bytesPerElement:l.elementSize,version:l.version});return}l.isInterleavedBufferAttribute&&(l=l.data);let u=n.get(l);u===void 0?n.set(l,i(l,h)):u.version<l.version&&(r(u.buffer,l,h),u.version=l.version)}return{get:o,remove:a,update:c}}var ro=class s extends At{constructor(e=1,t=1,n=1,i=1){super(),this.type=\"PlaneGeometry\",this.parameters={width:e,height:t,widthSegments:n,heightSegments:i};let r=e/2,o=t/2,a=Math.floor(n),c=Math.floor(i),l=a+1,h=c+1,u=e/a,d=t/c,p=[],g=[],_=[],m=[];for(let f=0;f<h;f++){let S=f*d-o;for(let x=0;x<l;x++){let A=x*u-r;g.push(A,-S,0),_.push(0,0,1),m.push(x/a),m.push(1-f/c)}}for(let f=0;f<c;f++)for(let S=0;S<a;S++){let x=S+l*f,A=S+l*(f+1),E=S+1+l*(f+1),C=S+1+l*f;p.push(x,A,C),p.push(A,E,C)}this.setIndex(p),this.setAttribute(\"position\",new Dt(g,3)),this.setAttribute(\"normal\",new Dt(_,3)),this.setAttribute(\"uv\",new Dt(m,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new s(e.width,e.height,e.widthSegments,e.heightSegments)}},Su=`#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif`,bu=`#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif`,Au=`#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif`,Tu=`#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif`,Eu=`#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTest ) discard;\n#endif`,wu=`#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif`,Ru=`#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif`,Cu=`#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif`,Pu=`vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif`,Lu=`vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif`,Iu=`float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated`,Uu=`#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660,  0.0556434,\n\t\t-1.5371385,  1.8760108, -0.2040259,\n\t\t-0.4985314,  0.0415560,  1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif`,Du=`#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif`,Nu=`#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif`,Ou=`#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif`,Fu=`#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif`,Bu=`#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif`,zu=`#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif`,ku=`#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif`,Hu=`#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif`,Vu=`#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif`,Gu=`#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated`,Wu=`#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif`,Xu=`vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif`,qu=`#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif`,Yu=`#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif`,Zu=`#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif`,Ku=`#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif`,Ju=\"gl_FragColor = linearToOutputTexel( gl_FragColor );\",$u=`vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}`,ju=`#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif`,Qu=`#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif`,ed=`#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif`,td=`#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif`,nd=`#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif`,id=`#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif`,sd=`#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif`,rd=`#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif`,od=`#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif`,ad=`#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}`,cd=`#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif`,ld=`#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif`,hd=`LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;`,ud=`varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert`,dd=`uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( LEGACY_LIGHTS )\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#else\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif`,fd=`#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif`,pd=`ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;`,md=`varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon`,gd=`BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;`,_d=`varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong`,xd=`PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tanisotropyV /= material.anisotropy;\n\tmaterial.anisotropy = saturate( material.anisotropy );\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x - tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x + tbn[ 0 ] * anisotropyV.y;\n#endif`,yd=`struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n    float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n    float x2 = x * x;\n    float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n    return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(    0, 1,    0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}`,vd=`\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif`,Md=`#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometry.viewDir, geometry.normal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif`,Sd=`#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif`,bd=`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif`,Ad=`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif`,Td=`#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif`,Ed=`#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif`,wd=`#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, vMapUv );\n#endif`,Rd=`#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif`,Cd=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif`,Pd=`#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif`,Ld=`float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif`,Id=`#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif`,Ud=`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif`,Dd=`#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif`,Nd=`#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif`,Od=`#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif`,Fd=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 geometryNormal = normal;`,Bd=`#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif`,zd=`#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif`,kd=`#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif`,Hd=`#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif`,Vd=`#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif`,Gd=`#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif`,Wd=`#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif`,Xd=`#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif`,qd=`#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif`,Yd=`#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );`,Zd=`vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}`,Kd=`#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif`,Jd=`vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;`,$d=`#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif`,jd=`#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif`,Qd=`float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif`,ef=`#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif`,tf=`#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t  f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t  f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif`,nf=`#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif`,sf=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif`,rf=`float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}`,of=`#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif`,af=`#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif`,cf=`#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif`,lf=`#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif`,hf=`float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif`,uf=`#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif`,df=`#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif`,ff=`#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(  1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,  1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,  1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }`,pf=`#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif`,mf=`#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a *  a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif`,gf=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif`,_f=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif`,xf=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif`,yf=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif`,vf=`varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}`,Mf=`uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}`,Sf=`varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}`,bf=`#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}`,Af=`varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}`,Tf=`uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}`,Ef=`#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}`,wf=`#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <logdepthbuf_fragment>\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}`,Rf=`#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}`,Cf=`#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}`,Pf=`varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}`,Lf=`uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}`,If=`uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}`,Uf=`uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}`,Df=`#include <common>\n#include <uv_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinbase_vertex>\n\t\t#include <skinnormal_vertex>\n\t\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}`,Nf=`uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}`,Of=`#define LAMBERT\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}`,Ff=`#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_lambert_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_lambert_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}`,Bf=`#define MATCAP\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}`,zf=`#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}`,kf=`#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}`,Hf=`#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}`,Vf=`#define PHONG\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}`,Gf=`#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}`,Wf=`#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}`,Xf=`#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}`,qf=`#define TOON\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}`,Yf=`#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}`,Zf=`uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}`,Kf=`uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}`,Jf=`#include <common>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}`,$f=`uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <logdepthbuf_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n}`,jf=`uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}`,Qf=`uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n}`,Ce={alphahash_fragment:Su,alphahash_pars_fragment:bu,alphamap_fragment:Au,alphamap_pars_fragment:Tu,alphatest_fragment:Eu,alphatest_pars_fragment:wu,aomap_fragment:Ru,aomap_pars_fragment:Cu,begin_vertex:Pu,beginnormal_vertex:Lu,bsdfs:Iu,iridescence_fragment:Uu,bumpmap_pars_fragment:Du,clipping_planes_fragment:Nu,clipping_planes_pars_fragment:Ou,clipping_planes_pars_vertex:Fu,clipping_planes_vertex:Bu,color_fragment:zu,color_pars_fragment:ku,color_pars_vertex:Hu,color_vertex:Vu,common:Gu,cube_uv_reflection_fragment:Wu,defaultnormal_vertex:Xu,displacementmap_pars_vertex:qu,displacementmap_vertex:Yu,emissivemap_fragment:Zu,emissivemap_pars_fragment:Ku,colorspace_fragment:Ju,colorspace_pars_fragment:$u,envmap_fragment:ju,envmap_common_pars_fragment:Qu,envmap_pars_fragment:ed,envmap_pars_vertex:td,envmap_physical_pars_fragment:fd,envmap_vertex:nd,fog_vertex:id,fog_pars_vertex:sd,fog_fragment:rd,fog_pars_fragment:od,gradientmap_pars_fragment:ad,lightmap_fragment:cd,lightmap_pars_fragment:ld,lights_lambert_fragment:hd,lights_lambert_pars_fragment:ud,lights_pars_begin:dd,lights_toon_fragment:pd,lights_toon_pars_fragment:md,lights_phong_fragment:gd,lights_phong_pars_fragment:_d,lights_physical_fragment:xd,lights_physical_pars_fragment:yd,lights_fragment_begin:vd,lights_fragment_maps:Md,lights_fragment_end:Sd,logdepthbuf_fragment:bd,logdepthbuf_pars_fragment:Ad,logdepthbuf_pars_vertex:Td,logdepthbuf_vertex:Ed,map_fragment:wd,map_pars_fragment:Rd,map_particle_fragment:Cd,map_particle_pars_fragment:Pd,metalnessmap_fragment:Ld,metalnessmap_pars_fragment:Id,morphcolor_vertex:Ud,morphnormal_vertex:Dd,morphtarget_pars_vertex:Nd,morphtarget_vertex:Od,normal_fragment_begin:Fd,normal_fragment_maps:Bd,normal_pars_fragment:zd,normal_pars_vertex:kd,normal_vertex:Hd,normalmap_pars_fragment:Vd,clearcoat_normal_fragment_begin:Gd,clearcoat_normal_fragment_maps:Wd,clearcoat_pars_fragment:Xd,iridescence_pars_fragment:qd,opaque_fragment:Yd,packing:Zd,premultiplied_alpha_fragment:Kd,project_vertex:Jd,dithering_fragment:$d,dithering_pars_fragment:jd,roughnessmap_fragment:Qd,roughnessmap_pars_fragment:ef,shadowmap_pars_fragment:tf,shadowmap_pars_vertex:nf,shadowmap_vertex:sf,shadowmask_pars_fragment:rf,skinbase_vertex:of,skinning_pars_vertex:af,skinning_vertex:cf,skinnormal_vertex:lf,specularmap_fragment:hf,specularmap_pars_fragment:uf,tonemapping_fragment:df,tonemapping_pars_fragment:ff,transmission_fragment:pf,transmission_pars_fragment:mf,uv_pars_fragment:gf,uv_pars_vertex:_f,uv_vertex:xf,worldpos_vertex:yf,background_vert:vf,background_frag:Mf,backgroundCube_vert:Sf,backgroundCube_frag:bf,cube_vert:Af,cube_frag:Tf,depth_vert:Ef,depth_frag:wf,distanceRGBA_vert:Rf,distanceRGBA_frag:Cf,equirect_vert:Pf,equirect_frag:Lf,linedashed_vert:If,linedashed_frag:Uf,meshbasic_vert:Df,meshbasic_frag:Nf,meshlambert_vert:Of,meshlambert_frag:Ff,meshmatcap_vert:Bf,meshmatcap_frag:zf,meshnormal_vert:kf,meshnormal_frag:Hf,meshphong_vert:Vf,meshphong_frag:Gf,meshphysical_vert:Wf,meshphysical_frag:Xf,meshtoon_vert:qf,meshtoon_frag:Yf,points_vert:Zf,points_frag:Kf,shadow_vert:Jf,shadow_frag:$f,sprite_vert:jf,sprite_frag:Qf},ie={common:{diffuse:{value:new Ae(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Ie},alphaMap:{value:null},alphaMapTransform:{value:new Ie},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Ie}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Ie}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Ie}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Ie},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Ie},normalScale:{value:new Be(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Ie},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Ie}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Ie}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Ie}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Ae(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Ae(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Ie},alphaTest:{value:0},uvTransform:{value:new Ie}},sprite:{diffuse:{value:new Ae(16777215)},opacity:{value:1},center:{value:new Be(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Ie},alphaMap:{value:null},alphaMapTransform:{value:new Ie},alphaTest:{value:0}}},Kt={basic:{uniforms:yt([ie.common,ie.specularmap,ie.envmap,ie.aomap,ie.lightmap,ie.fog]),vertexShader:Ce.meshbasic_vert,fragmentShader:Ce.meshbasic_frag},lambert:{uniforms:yt([ie.common,ie.specularmap,ie.envmap,ie.aomap,ie.lightmap,ie.emissivemap,ie.bumpmap,ie.normalmap,ie.displacementmap,ie.fog,ie.lights,{emissive:{value:new Ae(0)}}]),vertexShader:Ce.meshlambert_vert,fragmentShader:Ce.meshlambert_frag},phong:{uniforms:yt([ie.common,ie.specularmap,ie.envmap,ie.aomap,ie.lightmap,ie.emissivemap,ie.bumpmap,ie.normalmap,ie.displacementmap,ie.fog,ie.lights,{emissive:{value:new Ae(0)},specular:{value:new Ae(1118481)},shininess:{value:30}}]),vertexShader:Ce.meshphong_vert,fragmentShader:Ce.meshphong_frag},standard:{uniforms:yt([ie.common,ie.envmap,ie.aomap,ie.lightmap,ie.emissivemap,ie.bumpmap,ie.normalmap,ie.displacementmap,ie.roughnessmap,ie.metalnessmap,ie.fog,ie.lights,{emissive:{value:new Ae(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ce.meshphysical_vert,fragmentShader:Ce.meshphysical_frag},toon:{uniforms:yt([ie.common,ie.aomap,ie.lightmap,ie.emissivemap,ie.bumpmap,ie.normalmap,ie.displacementmap,ie.gradientmap,ie.fog,ie.lights,{emissive:{value:new Ae(0)}}]),vertexShader:Ce.meshtoon_vert,fragmentShader:Ce.meshtoon_frag},matcap:{uniforms:yt([ie.common,ie.bumpmap,ie.normalmap,ie.displacementmap,ie.fog,{matcap:{value:null}}]),vertexShader:Ce.meshmatcap_vert,fragmentShader:Ce.meshmatcap_frag},points:{uniforms:yt([ie.points,ie.fog]),vertexShader:Ce.points_vert,fragmentShader:Ce.points_frag},dashed:{uniforms:yt([ie.common,ie.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ce.linedashed_vert,fragmentShader:Ce.linedashed_frag},depth:{uniforms:yt([ie.common,ie.displacementmap]),vertexShader:Ce.depth_vert,fragmentShader:Ce.depth_frag},normal:{uniforms:yt([ie.common,ie.bumpmap,ie.normalmap,ie.displacementmap,{opacity:{value:1}}]),vertexShader:Ce.meshnormal_vert,fragmentShader:Ce.meshnormal_frag},sprite:{uniforms:yt([ie.sprite,ie.fog]),vertexShader:Ce.sprite_vert,fragmentShader:Ce.sprite_frag},background:{uniforms:{uvTransform:{value:new Ie},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Ce.background_vert,fragmentShader:Ce.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:Ce.backgroundCube_vert,fragmentShader:Ce.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ce.cube_vert,fragmentShader:Ce.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ce.equirect_vert,fragmentShader:Ce.equirect_frag},distanceRGBA:{uniforms:yt([ie.common,ie.displacementmap,{referencePosition:{value:new P},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ce.distanceRGBA_vert,fragmentShader:Ce.distanceRGBA_frag},shadow:{uniforms:yt([ie.lights,ie.fog,{color:{value:new Ae(0)},opacity:{value:1}}]),vertexShader:Ce.shadow_vert,fragmentShader:Ce.shadow_frag}};Kt.physical={uniforms:yt([Kt.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Ie},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Ie},clearcoatNormalScale:{value:new Be(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Ie},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Ie},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Ie},sheen:{value:0},sheenColor:{value:new Ae(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Ie},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Ie},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Ie},transmissionSamplerSize:{value:new Be},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Ie},attenuationDistance:{value:0},attenuationColor:{value:new Ae(0)},specularColor:{value:new Ae(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Ie},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Ie},anisotropyVector:{value:new Be},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Ie}}]),vertexShader:Ce.meshphysical_vert,fragmentShader:Ce.meshphysical_frag};var Ps={r:0,b:0,g:0};function ep(s,e,t,n,i,r,o){let a=new Ae(0),c=r===!0?0:1,l,h,u=null,d=0,p=null;function g(m,f){let S=!1,x=f.isScene===!0?f.background:null;switch(x&&x.isTexture&&(x=(f.backgroundBlurriness>0?t:e).get(x)),x===null?_(a,c):x&&x.isColor&&(_(x,1),S=!0),s.xr.getEnvironmentBlendMode()){case\"opaque\":S=!0;break;case\"additive\":n.buffers.color.setClear(0,0,0,1,o),S=!0;break;case\"alpha-blend\":n.buffers.color.setClear(0,0,0,0,o),S=!0;break}(s.autoClear||S)&&s.clear(s.autoClearColor,s.autoClearDepth,s.autoClearStencil),x&&(x.isCubeTexture||x.mapping===lr)?(h===void 0&&(h=new Mt(new ji(1,1,1),new mn({name:\"BackgroundCubeMaterial\",uniforms:wi(Kt.backgroundCube.uniforms),vertexShader:Kt.backgroundCube.vertexShader,fragmentShader:Kt.backgroundCube.fragmentShader,side:bt,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute(\"normal\"),h.geometry.deleteAttribute(\"uv\"),h.onBeforeRender=function(C,w,k){this.matrixWorld.copyPosition(k.matrixWorld)},Object.defineProperty(h.material,\"envMap\",{get:function(){return this.uniforms.envMap.value}}),i.update(h)),h.material.uniforms.envMap.value=x,h.material.uniforms.flipEnvMap.value=x.isCubeTexture&&x.isRenderTargetTexture===!1?-1:1,h.material.uniforms.backgroundBlurriness.value=f.backgroundBlurriness,h.material.uniforms.backgroundIntensity.value=f.backgroundIntensity,h.material.toneMapped=x.colorSpace!==xe,(u!==x||d!==x.version||p!==s.toneMapping)&&(h.material.needsUpdate=!0,u=x,d=x.version,p=s.toneMapping),h.layers.enableAll(),m.unshift(h,h.geometry,h.material,0,0,null)):x&&x.isTexture&&(l===void 0&&(l=new Mt(new ro(2,2),new mn({name:\"BackgroundMaterial\",uniforms:wi(Kt.background.uniforms),vertexShader:Kt.background.vertexShader,fragmentShader:Kt.background.fragmentShader,side:jt,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute(\"normal\"),Object.defineProperty(l.material,\"map\",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=x,l.material.uniforms.backgroundIntensity.value=f.backgroundIntensity,l.material.toneMapped=x.colorSpace!==xe,x.matrixAutoUpdate===!0&&x.updateMatrix(),l.material.uniforms.uvTransform.value.copy(x.matrix),(u!==x||d!==x.version||p!==s.toneMapping)&&(l.material.needsUpdate=!0,u=x,d=x.version,p=s.toneMapping),l.layers.enableAll(),m.unshift(l,l.geometry,l.material,0,0,null))}function _(m,f){m.getRGB(Ps,bl(s)),n.buffers.color.setClear(Ps.r,Ps.g,Ps.b,f,o)}return{getClearColor:function(){return a},setClearColor:function(m,f=1){a.set(m),c=f,_(a,c)},getClearAlpha:function(){return c},setClearAlpha:function(m){c=m,_(a,c)},render:g}}function tp(s,e,t,n){let i=s.getParameter(s.MAX_VERTEX_ATTRIBS),r=n.isWebGL2?null:e.get(\"OES_vertex_array_object\"),o=n.isWebGL2||r!==null,a={},c=m(null),l=c,h=!1;function u(V,G,$,W,q){let Z=!1;if(o){let K=_(W,$,G);l!==K&&(l=K,p(l.object)),Z=f(V,W,$,q),Z&&S(V,W,$,q)}else{let K=G.wireframe===!0;(l.geometry!==W.id||l.program!==$.id||l.wireframe!==K)&&(l.geometry=W.id,l.program=$.id,l.wireframe=K,Z=!0)}q!==null&&t.update(q,s.ELEMENT_ARRAY_BUFFER),(Z||h)&&(h=!1,k(V,G,$,W),q!==null&&s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,t.get(q).buffer))}function d(){return n.isWebGL2?s.createVertexArray():r.createVertexArrayOES()}function p(V){return n.isWebGL2?s.bindVertexArray(V):r.bindVertexArrayOES(V)}function g(V){return n.isWebGL2?s.deleteVertexArray(V):r.deleteVertexArrayOES(V)}function _(V,G,$){let W=$.wireframe===!0,q=a[V.id];q===void 0&&(q={},a[V.id]=q);let Z=q[G.id];Z===void 0&&(Z={},q[G.id]=Z);let K=Z[W];return K===void 0&&(K=m(d()),Z[W]=K),K}function m(V){let G=[],$=[],W=[];for(let q=0;q<i;q++)G[q]=0,$[q]=0,W[q]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:G,enabledAttributes:$,attributeDivisors:W,object:V,attributes:{},index:null}}function f(V,G,$,W){let q=l.attributes,Z=G.attributes,K=0,D=$.getAttributes();for(let X in D)if(D[X].location>=0){let ae=q[X],ce=Z[X];if(ce===void 0&&(X===\"instanceMatrix\"&&V.instanceMatrix&&(ce=V.instanceMatrix),X===\"instanceColor\"&&V.instanceColor&&(ce=V.instanceColor)),ae===void 0||ae.attribute!==ce||ce&&ae.data!==ce.data)return!0;K++}return l.attributesNum!==K||l.index!==W}function S(V,G,$,W){let q={},Z=G.attributes,K=0,D=$.getAttributes();for(let X in D)if(D[X].location>=0){let ae=Z[X];ae===void 0&&(X===\"instanceMatrix\"&&V.instanceMatrix&&(ae=V.instanceMatrix),X===\"instanceColor\"&&V.instanceColor&&(ae=V.instanceColor));let ce={};ce.attribute=ae,ae&&ae.data&&(ce.data=ae.data),q[X]=ce,K++}l.attributes=q,l.attributesNum=K,l.index=W}function x(){let V=l.newAttributes;for(let G=0,$=V.length;G<$;G++)V[G]=0}function A(V){E(V,0)}function E(V,G){let $=l.newAttributes,W=l.enabledAttributes,q=l.attributeDivisors;$[V]=1,W[V]===0&&(s.enableVertexAttribArray(V),W[V]=1),q[V]!==G&&((n.isWebGL2?s:e.get(\"ANGLE_instanced_arrays\"))[n.isWebGL2?\"vertexAttribDivisor\":\"vertexAttribDivisorANGLE\"](V,G),q[V]=G)}function C(){let V=l.newAttributes,G=l.enabledAttributes;for(let $=0,W=G.length;$<W;$++)G[$]!==V[$]&&(s.disableVertexAttribArray($),G[$]=0)}function w(V,G,$,W,q,Z,K){K===!0?s.vertexAttribIPointer(V,G,$,q,Z):s.vertexAttribPointer(V,G,$,W,q,Z)}function k(V,G,$,W){if(n.isWebGL2===!1&&(V.isInstancedMesh||W.isInstancedBufferGeometry)&&e.get(\"ANGLE_instanced_arrays\")===null)return;x();let q=W.attributes,Z=$.getAttributes(),K=G.defaultAttributeValues;for(let D in Z){let X=Z[D];if(X.location>=0){let oe=q[D];if(oe===void 0&&(D===\"instanceMatrix\"&&V.instanceMatrix&&(oe=V.instanceMatrix),D===\"instanceColor\"&&V.instanceColor&&(oe=V.instanceColor)),oe!==void 0){let ae=oe.normalized,ce=oe.itemSize,_e=t.get(oe);if(_e===void 0)continue;let Ee=_e.buffer,ye=_e.type,He=_e.bytesPerElement,St=n.isWebGL2===!0&&(ye===s.INT||ye===s.UNSIGNED_INT||oe.gpuType===ll);if(oe.isInterleavedBufferAttribute){let Pe=oe.data,U=Pe.stride,ht=oe.offset;if(Pe.isInstancedInterleavedBuffer){for(let ve=0;ve<X.locationSize;ve++)E(X.location+ve,Pe.meshPerAttribute);V.isInstancedMesh!==!0&&W._maxInstanceCount===void 0&&(W._maxInstanceCount=Pe.meshPerAttribute*Pe.count)}else for(let ve=0;ve<X.locationSize;ve++)A(X.location+ve);s.bindBuffer(s.ARRAY_BUFFER,Ee);for(let ve=0;ve<X.locationSize;ve++)w(X.location+ve,ce/X.locationSize,ye,ae,U*He,(ht+ce/X.locationSize*ve)*He,St)}else{if(oe.isInstancedBufferAttribute){for(let Pe=0;Pe<X.locationSize;Pe++)E(X.location+Pe,oe.meshPerAttribute);V.isInstancedMesh!==!0&&W._maxInstanceCount===void 0&&(W._maxInstanceCount=oe.meshPerAttribute*oe.count)}else for(let Pe=0;Pe<X.locationSize;Pe++)A(X.location+Pe);s.bindBuffer(s.ARRAY_BUFFER,Ee);for(let Pe=0;Pe<X.locationSize;Pe++)w(X.location+Pe,ce/X.locationSize,ye,ae,ce*He,ce/X.locationSize*Pe*He,St)}}else if(K!==void 0){let ae=K[D];if(ae!==void 0)switch(ae.length){case 2:s.vertexAttrib2fv(X.location,ae);break;case 3:s.vertexAttrib3fv(X.location,ae);break;case 4:s.vertexAttrib4fv(X.location,ae);break;default:s.vertexAttrib1fv(X.location,ae)}}}}C()}function v(){ne();for(let V in a){let G=a[V];for(let $ in G){let W=G[$];for(let q in W)g(W[q].object),delete W[q];delete G[$]}delete a[V]}}function T(V){if(a[V.id]===void 0)return;let G=a[V.id];for(let $ in G){let W=G[$];for(let q in W)g(W[q].object),delete W[q];delete G[$]}delete a[V.id]}function Y(V){for(let G in a){let $=a[G];if($[V.id]===void 0)continue;let W=$[V.id];for(let q in W)g(W[q].object),delete W[q];delete $[V.id]}}function ne(){B(),h=!0,l!==c&&(l=c,p(l.object))}function B(){c.geometry=null,c.program=null,c.wireframe=!1}return{setup:u,reset:ne,resetDefaultState:B,dispose:v,releaseStatesOfGeometry:T,releaseStatesOfProgram:Y,initAttributes:x,enableAttribute:A,disableUnusedAttributes:C}}function np(s,e,t,n){let i=n.isWebGL2,r;function o(l){r=l}function a(l,h){s.drawArrays(r,l,h),t.update(h,r,1)}function c(l,h,u){if(u===0)return;let d,p;if(i)d=s,p=\"drawArraysInstanced\";else if(d=e.get(\"ANGLE_instanced_arrays\"),p=\"drawArraysInstancedANGLE\",d===null){console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");return}d[p](r,l,h,u),t.update(h,r,u)}this.setMode=o,this.render=a,this.renderInstances=c}function ip(s,e,t){let n;function i(){if(n!==void 0)return n;if(e.has(\"EXT_texture_filter_anisotropic\")===!0){let w=e.get(\"EXT_texture_filter_anisotropic\");n=s.getParameter(w.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n}function r(w){if(w===\"highp\"){if(s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT).precision>0)return\"highp\";w=\"mediump\"}return w===\"mediump\"&&s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.MEDIUM_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.MEDIUM_FLOAT).precision>0?\"mediump\":\"lowp\"}let o=typeof WebGL2RenderingContext<\"u\"&&s.constructor.name===\"WebGL2RenderingContext\",a=t.precision!==void 0?t.precision:\"highp\",c=r(a);c!==a&&(console.warn(\"THREE.WebGLRenderer:\",a,\"not supported, using\",c,\"instead.\"),a=c);let l=o||e.has(\"WEBGL_draw_buffers\"),h=t.logarithmicDepthBuffer===!0,u=s.getParameter(s.MAX_TEXTURE_IMAGE_UNITS),d=s.getParameter(s.MAX_VERTEX_TEXTURE_IMAGE_UNITS),p=s.getParameter(s.MAX_TEXTURE_SIZE),g=s.getParameter(s.MAX_CUBE_MAP_TEXTURE_SIZE),_=s.getParameter(s.MAX_VERTEX_ATTRIBS),m=s.getParameter(s.MAX_VERTEX_UNIFORM_VECTORS),f=s.getParameter(s.MAX_VARYING_VECTORS),S=s.getParameter(s.MAX_FRAGMENT_UNIFORM_VECTORS),x=d>0,A=o||e.has(\"OES_texture_float\"),E=x&&A,C=o?s.getParameter(s.MAX_SAMPLES):0;return{isWebGL2:o,drawBuffers:l,getMaxAnisotropy:i,getMaxPrecision:r,precision:a,logarithmicDepthBuffer:h,maxTextures:u,maxVertexTextures:d,maxTextureSize:p,maxCubemapSize:g,maxAttributes:_,maxVertexUniforms:m,maxVaryings:f,maxFragmentUniforms:S,vertexTextures:x,floatFragmentTextures:A,floatVertexTextures:E,maxSamples:C}}function sp(s){let e=this,t=null,n=0,i=!1,r=!1,o=new un,a=new Ie,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(u,d){let p=u.length!==0||d||n!==0||i;return i=d,n=u.length,p},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(u,d){t=h(u,d,0)},this.setState=function(u,d,p){let g=u.clippingPlanes,_=u.clipIntersection,m=u.clipShadows,f=s.get(u);if(!i||g===null||g.length===0||r&&!m)r?h(null):l();else{let S=r?0:n,x=S*4,A=f.clippingState||null;c.value=A,A=h(g,d,x,p);for(let E=0;E!==x;++E)A[E]=t[E];f.clippingState=A,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=S}};function l(){c.value!==t&&(c.value=t,c.needsUpdate=n>0),e.numPlanes=n,e.numIntersection=0}function h(u,d,p,g){let _=u!==null?u.length:0,m=null;if(_!==0){if(m=c.value,g!==!0||m===null){let f=p+_*4,S=d.matrixWorldInverse;a.getNormalMatrix(S),(m===null||m.length<f)&&(m=new Float32Array(f));for(let x=0,A=p;x!==_;++x,A+=4)o.copy(u[x]).applyMatrix4(S,a),o.normal.toArray(m,A),m[A+3]=o.constant}c.value=m,c.needsUpdate=!0}return e.numPlanes=_,e.numIntersection=0,m}}function rp(s){let e=new WeakMap;function t(o,a){return a===Jr?o.mapping=Mi:a===$r&&(o.mapping=Si),o}function n(o){if(o&&o.isTexture&&o.isRenderTargetTexture===!1){let a=o.mapping;if(a===Jr||a===$r)if(e.has(o)){let c=e.get(o).texture;return t(c,o.mapping)}else{let c=o.image;if(c&&c.height>0){let l=new so(c.height/2);return l.fromEquirectangularTexture(s,o),e.set(o,l),o.addEventListener(\"dispose\",i),t(l.texture,o.mapping)}else return null}}return o}function i(o){let a=o.target;a.removeEventListener(\"dispose\",i);let c=e.get(a);c!==void 0&&(e.delete(a),c.dispose())}function r(){e=new WeakMap}return{get:n,dispose:r}}var Ri=class extends Ys{constructor(e=-1,t=1,n=1,i=-1,r=.1,o=2e3){super(),this.isOrthographicCamera=!0,this.type=\"OrthographicCamera\",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=i,this.near=r,this.far=o,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,n,i,r,o){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2,r=n-e,o=n+e,a=i+t,c=i-t;if(this.view!==null&&this.view.enabled){let l=(this.right-this.left)/this.view.fullWidth/this.zoom,h=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=l*this.view.offsetX,o=r+l*this.view.width,a-=h*this.view.offsetY,c=a-h*this.view.height}this.projectionMatrix.makeOrthographic(r,o,a,c,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}},_i=4,xc=[.125,.215,.35,.446,.526,.582],Gn=20,Hr=new Ri,yc=new Ae,Vr=null,Vn=(1+Math.sqrt(5))/2,di=1/Vn,vc=[new P(1,1,1),new P(-1,1,1),new P(1,1,-1),new P(-1,1,-1),new P(0,Vn,di),new P(0,Vn,-di),new P(di,0,Vn),new P(-di,0,Vn),new P(Vn,di,0),new P(-Vn,di,0)],Ks=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,i=100){Vr=this._renderer.getRenderTarget(),this._setSize(256);let r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(e,n,i,r),t>0&&this._blur(r,0,0,t),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=bc(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=Sc(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(Vr),e.scissorTest=!1,Ls(e,0,0,e.width,e.height)}_fromTexture(e,t){e.mapping===Mi||e.mapping===Si?this._setSize(e.image.length===0?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),Vr=this._renderer.getRenderTarget();let n=t||this._allocateTargets();return this._textureToCubeUV(e,n),this._applyPMREM(n),this._cleanup(n),n}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,n={magFilter:vt,minFilter:vt,generateMipmaps:!1,type:Ji,format:Ut,colorSpace:Nt,depthBuffer:!1},i=Mc(e,t,n);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=Mc(e,t,n);let{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=op(r)),this._blurMaterial=ap(r,e,t)}return i}_compileMaterial(e){let t=new Mt(this._lodPlanes[0],e);this._renderer.compile(t,Hr)}_sceneToCubeUV(e,t,n,i){let a=new lt(90,1,t,n),c=[1,-1,1,1,1,1],l=[1,1,1,-1,-1,-1],h=this._renderer,u=h.autoClear,d=h.toneMapping;h.getClearColor(yc),h.toneMapping=En,h.autoClear=!1;let p=new Qt({name:\"PMREM.Background\",side:bt,depthWrite:!1,depthTest:!1}),g=new Mt(new ji,p),_=!1,m=e.background;m?m.isColor&&(p.color.copy(m),e.background=null,_=!0):(p.color.copy(yc),_=!0);for(let f=0;f<6;f++){let S=f%3;S===0?(a.up.set(0,c[f],0),a.lookAt(l[f],0,0)):S===1?(a.up.set(0,0,c[f]),a.lookAt(0,l[f],0)):(a.up.set(0,c[f],0),a.lookAt(0,0,l[f]));let x=this._cubeSize;Ls(i,S*x,f>2?x:0,x,x),h.setRenderTarget(i),_&&h.render(g,a),h.render(e,a)}g.geometry.dispose(),g.material.dispose(),h.toneMapping=d,h.autoClear=u,e.background=m}_textureToCubeUV(e,t){let n=this._renderer,i=e.mapping===Mi||e.mapping===Si;i?(this._cubemapMaterial===null&&(this._cubemapMaterial=bc()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=Sc());let r=i?this._cubemapMaterial:this._equirectMaterial,o=new Mt(this._lodPlanes[0],r),a=r.uniforms;a.envMap.value=e;let c=this._cubeSize;Ls(t,0,0,3*c,2*c),n.setRenderTarget(t),n.render(o,Hr)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;for(let i=1;i<this._lodPlanes.length;i++){let r=Math.sqrt(this._sigmas[i]*this._sigmas[i]-this._sigmas[i-1]*this._sigmas[i-1]),o=vc[(i-1)%vc.length];this._blur(e,i-1,i,r,o)}t.autoClear=n}_blur(e,t,n,i,r){let o=this._pingPongRenderTarget;this._halfBlur(e,o,t,n,i,\"latitudinal\",r),this._halfBlur(o,e,n,n,i,\"longitudinal\",r)}_halfBlur(e,t,n,i,r,o,a){let c=this._renderer,l=this._blurMaterial;o!==\"latitudinal\"&&o!==\"longitudinal\"&&console.error(\"blur direction must be either latitudinal or longitudinal!\");let h=3,u=new Mt(this._lodPlanes[i],l),d=l.uniforms,p=this._sizeLods[n]-1,g=isFinite(r)?Math.PI/(2*p):2*Math.PI/(2*Gn-1),_=r/g,m=isFinite(r)?1+Math.floor(h*_):Gn;m>Gn&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Gn}`);let f=[],S=0;for(let w=0;w<Gn;++w){let k=w/_,v=Math.exp(-k*k/2);f.push(v),w===0?S+=v:w<m&&(S+=2*v)}for(let w=0;w<f.length;w++)f[w]=f[w]/S;d.envMap.value=e.texture,d.samples.value=m,d.weights.value=f,d.latitudinal.value=o===\"latitudinal\",a&&(d.poleAxis.value=a);let{_lodMax:x}=this;d.dTheta.value=g,d.mipInt.value=x-n;let A=this._sizeLods[i],E=3*A*(i>x-_i?i-x+_i:0),C=4*(this._cubeSize-A);Ls(t,E,C,3*A,2*A),c.setRenderTarget(t),c.render(u,Hr)}};function op(s){let e=[],t=[],n=[],i=s,r=s-_i+1+xc.length;for(let o=0;o<r;o++){let a=Math.pow(2,i);t.push(a);let c=1/a;o>s-_i?c=xc[o-s+_i-1]:o===0&&(c=0),n.push(c);let l=1/(a-2),h=-l,u=1+l,d=[h,h,u,h,u,u,h,h,u,u,h,u],p=6,g=6,_=3,m=2,f=1,S=new Float32Array(_*g*p),x=new Float32Array(m*g*p),A=new Float32Array(f*g*p);for(let C=0;C<p;C++){let w=C%3*2/3-1,k=C>2?0:-1,v=[w,k,0,w+2/3,k,0,w+2/3,k+1,0,w,k,0,w+2/3,k+1,0,w,k+1,0];S.set(v,_*g*C),x.set(d,m*g*C);let T=[C,C,C,C,C,C];A.set(T,f*g*C)}let E=new At;E.setAttribute(\"position\",new $e(S,_)),E.setAttribute(\"uv\",new $e(x,m)),E.setAttribute(\"faceIndex\",new $e(A,f)),e.push(E),i>_i&&i--}return{lodPlanes:e,sizeLods:t,sigmas:n}}function Mc(s,e,t){let n=new pn(s,e,t);return n.texture.mapping=lr,n.texture.name=\"PMREM.cubeUv\",n.scissorTest=!0,n}function Ls(s,e,t,n,i){s.viewport.set(e,t,n,i),s.scissor.set(e,t,n,i)}function ap(s,e,t){let n=new Float32Array(Gn),i=new P(0,1,0);return new mn({name:\"SphericalGaussianBlur\",defines:{n:Gn,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${s}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i}},vertexShader:Fo(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,blending:Tn,depthTest:!1,depthWrite:!1})}function Sc(){return new mn({name:\"EquirectangularToCubeUV\",uniforms:{envMap:{value:null}},vertexShader:Fo(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,blending:Tn,depthTest:!1,depthWrite:!1})}function bc(){return new mn({name:\"CubemapToCubeUV\",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Fo(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,blending:Tn,depthTest:!1,depthWrite:!1})}function Fo(){return`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`}function cp(s){let e=new WeakMap,t=null;function n(a){if(a&&a.isTexture){let c=a.mapping,l=c===Jr||c===$r,h=c===Mi||c===Si;if(l||h)if(a.isRenderTargetTexture&&a.needsPMREMUpdate===!0){a.needsPMREMUpdate=!1;let u=e.get(a);return t===null&&(t=new Ks(s)),u=l?t.fromEquirectangular(a,u):t.fromCubemap(a,u),e.set(a,u),u.texture}else{if(e.has(a))return e.get(a).texture;{let u=a.image;if(l&&u&&u.height>0||h&&u&&i(u)){t===null&&(t=new Ks(s));let d=l?t.fromEquirectangular(a):t.fromCubemap(a);return e.set(a,d),a.addEventListener(\"dispose\",r),d.texture}else return null}}}return a}function i(a){let c=0,l=6;for(let h=0;h<l;h++)a[h]!==void 0&&c++;return c===l}function r(a){let c=a.target;c.removeEventListener(\"dispose\",r);let l=e.get(c);l!==void 0&&(e.delete(c),l.dispose())}function o(){e=new WeakMap,t!==null&&(t.dispose(),t=null)}return{get:n,dispose:o}}function lp(s){let e={};function t(n){if(e[n]!==void 0)return e[n];let i;switch(n){case\"WEBGL_depth_texture\":i=s.getExtension(\"WEBGL_depth_texture\")||s.getExtension(\"MOZ_WEBGL_depth_texture\")||s.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case\"EXT_texture_filter_anisotropic\":i=s.getExtension(\"EXT_texture_filter_anisotropic\")||s.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||s.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case\"WEBGL_compressed_texture_s3tc\":i=s.getExtension(\"WEBGL_compressed_texture_s3tc\")||s.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||s.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case\"WEBGL_compressed_texture_pvrtc\":i=s.getExtension(\"WEBGL_compressed_texture_pvrtc\")||s.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;default:i=s.getExtension(n)}return e[n]=i,i}return{has:function(n){return t(n)!==null},init:function(n){n.isWebGL2?t(\"EXT_color_buffer_float\"):(t(\"WEBGL_depth_texture\"),t(\"OES_texture_float\"),t(\"OES_texture_half_float\"),t(\"OES_texture_half_float_linear\"),t(\"OES_standard_derivatives\"),t(\"OES_element_index_uint\"),t(\"OES_vertex_array_object\"),t(\"ANGLE_instanced_arrays\")),t(\"OES_texture_float_linear\"),t(\"EXT_color_buffer_half_float\"),t(\"WEBGL_multisampled_render_to_texture\")},get:function(n){let i=t(n);return i===null&&console.warn(\"THREE.WebGLRenderer: \"+n+\" extension not supported.\"),i}}}function hp(s,e,t,n){let i={},r=new WeakMap;function o(u){let d=u.target;d.index!==null&&e.remove(d.index);for(let g in d.attributes)e.remove(d.attributes[g]);for(let g in d.morphAttributes){let _=d.morphAttributes[g];for(let m=0,f=_.length;m<f;m++)e.remove(_[m])}d.removeEventListener(\"dispose\",o),delete i[d.id];let p=r.get(d);p&&(e.remove(p),r.delete(d)),n.releaseStatesOfGeometry(d),d.isInstancedBufferGeometry===!0&&delete d._maxInstanceCount,t.memory.geometries--}function a(u,d){return i[d.id]===!0||(d.addEventListener(\"dispose\",o),i[d.id]=!0,t.memory.geometries++),d}function c(u){let d=u.attributes;for(let g in d)e.update(d[g],s.ARRAY_BUFFER);let p=u.morphAttributes;for(let g in p){let _=p[g];for(let m=0,f=_.length;m<f;m++)e.update(_[m],s.ARRAY_BUFFER)}}function l(u){let d=[],p=u.index,g=u.attributes.position,_=0;if(p!==null){let S=p.array;_=p.version;for(let x=0,A=S.length;x<A;x+=3){let E=S[x+0],C=S[x+1],w=S[x+2];d.push(E,C,C,w,w,E)}}else if(g!==void 0){let S=g.array;_=g.version;for(let x=0,A=S.length/3-1;x<A;x+=3){let E=x+0,C=x+1,w=x+2;d.push(E,C,C,w,w,E)}}else return;let m=new(Ml(d)?qs:Xs)(d,1);m.version=_;let f=r.get(u);f&&e.remove(f),r.set(u,m)}function h(u){let d=r.get(u);if(d){let p=u.index;p!==null&&d.version<p.version&&l(u)}else l(u);return r.get(u)}return{get:a,update:c,getWireframeAttribute:h}}function up(s,e,t,n){let i=n.isWebGL2,r;function o(d){r=d}let a,c;function l(d){a=d.type,c=d.bytesPerElement}function h(d,p){s.drawElements(r,p,a,d*c),t.update(p,r,1)}function u(d,p,g){if(g===0)return;let _,m;if(i)_=s,m=\"drawElementsInstanced\";else if(_=e.get(\"ANGLE_instanced_arrays\"),m=\"drawElementsInstancedANGLE\",_===null){console.error(\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");return}_[m](r,p,a,d*c,g),t.update(p,r,g)}this.setMode=o,this.setIndex=l,this.render=h,this.renderInstances=u}function dp(s){let e={geometries:0,textures:0},t={frame:0,calls:0,triangles:0,points:0,lines:0};function n(r,o,a){switch(t.calls++,o){case s.TRIANGLES:t.triangles+=a*(r/3);break;case s.LINES:t.lines+=a*(r/2);break;case s.LINE_STRIP:t.lines+=a*(r-1);break;case s.LINE_LOOP:t.lines+=a*r;break;case s.POINTS:t.points+=a*r;break;default:console.error(\"THREE.WebGLInfo: Unknown draw mode:\",o);break}}function i(){t.calls=0,t.triangles=0,t.points=0,t.lines=0}return{memory:e,render:t,programs:null,autoReset:!0,reset:i,update:n}}function fp(s,e){return s[0]-e[0]}function pp(s,e){return Math.abs(e[1])-Math.abs(s[1])}function mp(s,e,t){let n={},i=new Float32Array(8),r=new WeakMap,o=new We,a=[];for(let l=0;l<8;l++)a[l]=[l,0];function c(l,h,u){let d=l.morphTargetInfluences;if(e.isWebGL2===!0){let p=h.morphAttributes.position||h.morphAttributes.normal||h.morphAttributes.color,g=p!==void 0?p.length:0,_=r.get(h);if(_===void 0||_.count!==g){let V=function(){ne.dispose(),r.delete(h),h.removeEventListener(\"dispose\",V)};_!==void 0&&_.texture.dispose();let S=h.morphAttributes.position!==void 0,x=h.morphAttributes.normal!==void 0,A=h.morphAttributes.color!==void 0,E=h.morphAttributes.position||[],C=h.morphAttributes.normal||[],w=h.morphAttributes.color||[],k=0;S===!0&&(k=1),x===!0&&(k=2),A===!0&&(k=3);let v=h.attributes.position.count*k,T=1;v>e.maxTextureSize&&(T=Math.ceil(v/e.maxTextureSize),v=e.maxTextureSize);let Y=new Float32Array(v*T*4*g),ne=new Vs(Y,v,T,g);ne.type=dn,ne.needsUpdate=!0;let B=k*4;for(let G=0;G<g;G++){let $=E[G],W=C[G],q=w[G],Z=v*T*4*G;for(let K=0;K<$.count;K++){let D=K*B;S===!0&&(o.fromBufferAttribute($,K),Y[Z+D+0]=o.x,Y[Z+D+1]=o.y,Y[Z+D+2]=o.z,Y[Z+D+3]=0),x===!0&&(o.fromBufferAttribute(W,K),Y[Z+D+4]=o.x,Y[Z+D+5]=o.y,Y[Z+D+6]=o.z,Y[Z+D+7]=0),A===!0&&(o.fromBufferAttribute(q,K),Y[Z+D+8]=o.x,Y[Z+D+9]=o.y,Y[Z+D+10]=o.z,Y[Z+D+11]=q.itemSize===4?o.w:1)}}_={count:g,texture:ne,size:new Be(v,T)},r.set(h,_),h.addEventListener(\"dispose\",V)}let m=0;for(let S=0;S<d.length;S++)m+=d[S];let f=h.morphTargetsRelative?1:1-m;u.getUniforms().setValue(s,\"morphTargetBaseInfluence\",f),u.getUniforms().setValue(s,\"morphTargetInfluences\",d),u.getUniforms().setValue(s,\"morphTargetsTexture\",_.texture,t),u.getUniforms().setValue(s,\"morphTargetsTextureSize\",_.size)}else{let p=d===void 0?0:d.length,g=n[h.id];if(g===void 0||g.length!==p){g=[];for(let x=0;x<p;x++)g[x]=[x,0];n[h.id]=g}for(let x=0;x<p;x++){let A=g[x];A[0]=x,A[1]=d[x]}g.sort(pp);for(let x=0;x<8;x++)x<p&&g[x][1]?(a[x][0]=g[x][0],a[x][1]=g[x][1]):(a[x][0]=Number.MAX_SAFE_INTEGER,a[x][1]=0);a.sort(fp);let _=h.morphAttributes.position,m=h.morphAttributes.normal,f=0;for(let x=0;x<8;x++){let A=a[x],E=A[0],C=A[1];E!==Number.MAX_SAFE_INTEGER&&C?(_&&h.getAttribute(\"morphTarget\"+x)!==_[E]&&h.setAttribute(\"morphTarget\"+x,_[E]),m&&h.getAttribute(\"morphNormal\"+x)!==m[E]&&h.setAttribute(\"morphNormal\"+x,m[E]),i[x]=C,f+=C):(_&&h.hasAttribute(\"morphTarget\"+x)===!0&&h.deleteAttribute(\"morphTarget\"+x),m&&h.hasAttribute(\"morphNormal\"+x)===!0&&h.deleteAttribute(\"morphNormal\"+x),i[x]=0)}let S=h.morphTargetsRelative?1:1-f;u.getUniforms().setValue(s,\"morphTargetBaseInfluence\",S),u.getUniforms().setValue(s,\"morphTargetInfluences\",i)}}return{update:c}}function gp(s,e,t,n){let i=new WeakMap;function r(c){let l=n.render.frame,h=c.geometry,u=e.get(c,h);if(i.get(u)!==l&&(e.update(u),i.set(u,l)),c.isInstancedMesh&&(c.hasEventListener(\"dispose\",a)===!1&&c.addEventListener(\"dispose\",a),i.get(c)!==l&&(t.update(c.instanceMatrix,s.ARRAY_BUFFER),c.instanceColor!==null&&t.update(c.instanceColor,s.ARRAY_BUFFER),i.set(c,l))),c.isSkinnedMesh){let d=c.skeleton;i.get(d)!==l&&(d.update(),i.set(d,l))}return u}function o(){i=new WeakMap}function a(c){let l=c.target;l.removeEventListener(\"dispose\",a),t.remove(l.instanceMatrix),l.instanceColor!==null&&t.remove(l.instanceColor)}return{update:r,dispose:o}}var Tl=new mt,El=new Vs,wl=new no,Rl=new Zs,Ac=[],Tc=[],Ec=new Float32Array(16),wc=new Float32Array(9),Rc=new Float32Array(4);function Ui(s,e,t){let n=s[0];if(n<=0||n>0)return s;let i=e*t,r=Ac[i];if(r===void 0&&(r=new Float32Array(i),Ac[i]=r),e!==0){n.toArray(r,0);for(let o=1,a=0;o!==e;++o)a+=t,s[o].toArray(r,a)}return r}function rt(s,e){if(s.length!==e.length)return!1;for(let t=0,n=s.length;t<n;t++)if(s[t]!==e[t])return!1;return!0}function ot(s,e){for(let t=0,n=e.length;t<n;t++)s[t]=e[t]}function ur(s,e){let t=Tc[e];t===void 0&&(t=new Int32Array(e),Tc[e]=t);for(let n=0;n!==e;++n)t[n]=s.allocateTextureUnit();return t}function _p(s,e){let t=this.cache;t[0]!==e&&(s.uniform1f(this.addr,e),t[0]=e)}function xp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)&&(s.uniform2f(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(rt(t,e))return;s.uniform2fv(this.addr,e),ot(t,e)}}function yp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)&&(s.uniform3f(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else if(e.r!==void 0)(t[0]!==e.r||t[1]!==e.g||t[2]!==e.b)&&(s.uniform3f(this.addr,e.r,e.g,e.b),t[0]=e.r,t[1]=e.g,t[2]=e.b);else{if(rt(t,e))return;s.uniform3fv(this.addr,e),ot(t,e)}}function vp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)&&(s.uniform4f(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(rt(t,e))return;s.uniform4fv(this.addr,e),ot(t,e)}}function Mp(s,e){let t=this.cache,n=e.elements;if(n===void 0){if(rt(t,e))return;s.uniformMatrix2fv(this.addr,!1,e),ot(t,e)}else{if(rt(t,n))return;Rc.set(n),s.uniformMatrix2fv(this.addr,!1,Rc),ot(t,n)}}function Sp(s,e){let t=this.cache,n=e.elements;if(n===void 0){if(rt(t,e))return;s.uniformMatrix3fv(this.addr,!1,e),ot(t,e)}else{if(rt(t,n))return;wc.set(n),s.uniformMatrix3fv(this.addr,!1,wc),ot(t,n)}}function bp(s,e){let t=this.cache,n=e.elements;if(n===void 0){if(rt(t,e))return;s.uniformMatrix4fv(this.addr,!1,e),ot(t,e)}else{if(rt(t,n))return;Ec.set(n),s.uniformMatrix4fv(this.addr,!1,Ec),ot(t,n)}}function Ap(s,e){let t=this.cache;t[0]!==e&&(s.uniform1i(this.addr,e),t[0]=e)}function Tp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)&&(s.uniform2i(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(rt(t,e))return;s.uniform2iv(this.addr,e),ot(t,e)}}function Ep(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)&&(s.uniform3i(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else{if(rt(t,e))return;s.uniform3iv(this.addr,e),ot(t,e)}}function wp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)&&(s.uniform4i(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(rt(t,e))return;s.uniform4iv(this.addr,e),ot(t,e)}}function Rp(s,e){let t=this.cache;t[0]!==e&&(s.uniform1ui(this.addr,e),t[0]=e)}function Cp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)&&(s.uniform2ui(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(rt(t,e))return;s.uniform2uiv(this.addr,e),ot(t,e)}}function Pp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)&&(s.uniform3ui(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else{if(rt(t,e))return;s.uniform3uiv(this.addr,e),ot(t,e)}}function Lp(s,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)&&(s.uniform4ui(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(rt(t,e))return;s.uniform4uiv(this.addr,e),ot(t,e)}}function Ip(s,e,t){let n=this.cache,i=t.allocateTextureUnit();n[0]!==i&&(s.uniform1i(this.addr,i),n[0]=i),t.setTexture2D(e||Tl,i)}function Up(s,e,t){let n=this.cache,i=t.allocateTextureUnit();n[0]!==i&&(s.uniform1i(this.addr,i),n[0]=i),t.setTexture3D(e||wl,i)}function Dp(s,e,t){let n=this.cache,i=t.allocateTextureUnit();n[0]!==i&&(s.uniform1i(this.addr,i),n[0]=i),t.setTextureCube(e||Rl,i)}function Np(s,e,t){let n=this.cache,i=t.allocateTextureUnit();n[0]!==i&&(s.uniform1i(this.addr,i),n[0]=i),t.setTexture2DArray(e||El,i)}function Op(s){switch(s){case 5126:return _p;case 35664:return xp;case 35665:return yp;case 35666:return vp;case 35674:return Mp;case 35675:return Sp;case 35676:return bp;case 5124:case 35670:return Ap;case 35667:case 35671:return Tp;case 35668:case 35672:return Ep;case 35669:case 35673:return wp;case 5125:return Rp;case 36294:return Cp;case 36295:return Pp;case 36296:return Lp;case 35678:case 36198:case 36298:case 36306:case 35682:return Ip;case 35679:case 36299:case 36307:return Up;case 35680:case 36300:case 36308:case 36293:return Dp;case 36289:case 36303:case 36311:case 36292:return Np}}function Fp(s,e){s.uniform1fv(this.addr,e)}function Bp(s,e){let t=Ui(e,this.size,2);s.uniform2fv(this.addr,t)}function zp(s,e){let t=Ui(e,this.size,3);s.uniform3fv(this.addr,t)}function kp(s,e){let t=Ui(e,this.size,4);s.uniform4fv(this.addr,t)}function Hp(s,e){let t=Ui(e,this.size,4);s.uniformMatrix2fv(this.addr,!1,t)}function Vp(s,e){let t=Ui(e,this.size,9);s.uniformMatrix3fv(this.addr,!1,t)}function Gp(s,e){let t=Ui(e,this.size,16);s.uniformMatrix4fv(this.addr,!1,t)}function Wp(s,e){s.uniform1iv(this.addr,e)}function Xp(s,e){s.uniform2iv(this.addr,e)}function qp(s,e){s.uniform3iv(this.addr,e)}function Yp(s,e){s.uniform4iv(this.addr,e)}function Zp(s,e){s.uniform1uiv(this.addr,e)}function Kp(s,e){s.uniform2uiv(this.addr,e)}function Jp(s,e){s.uniform3uiv(this.addr,e)}function $p(s,e){s.uniform4uiv(this.addr,e)}function jp(s,e,t){let n=this.cache,i=e.length,r=ur(t,i);rt(n,r)||(s.uniform1iv(this.addr,r),ot(n,r));for(let o=0;o!==i;++o)t.setTexture2D(e[o]||Tl,r[o])}function Qp(s,e,t){let n=this.cache,i=e.length,r=ur(t,i);rt(n,r)||(s.uniform1iv(this.addr,r),ot(n,r));for(let o=0;o!==i;++o)t.setTexture3D(e[o]||wl,r[o])}function em(s,e,t){let n=this.cache,i=e.length,r=ur(t,i);rt(n,r)||(s.uniform1iv(this.addr,r),ot(n,r));for(let o=0;o!==i;++o)t.setTextureCube(e[o]||Rl,r[o])}function tm(s,e,t){let n=this.cache,i=e.length,r=ur(t,i);rt(n,r)||(s.uniform1iv(this.addr,r),ot(n,r));for(let o=0;o!==i;++o)t.setTexture2DArray(e[o]||El,r[o])}function nm(s){switch(s){case 5126:return Fp;case 35664:return Bp;case 35665:return zp;case 35666:return kp;case 35674:return Hp;case 35675:return Vp;case 35676:return Gp;case 5124:case 35670:return Wp;case 35667:case 35671:return Xp;case 35668:case 35672:return qp;case 35669:case 35673:return Yp;case 5125:return Zp;case 36294:return Kp;case 36295:return Jp;case 36296:return $p;case 35678:case 36198:case 36298:case 36306:case 35682:return jp;case 35679:case 36299:case 36307:return Qp;case 35680:case 36300:case 36308:case 36293:return em;case 36289:case 36303:case 36311:case 36292:return tm}}var oo=class{constructor(e,t,n){this.id=e,this.addr=n,this.cache=[],this.setValue=Op(t.type)}},ao=class{constructor(e,t,n){this.id=e,this.addr=n,this.cache=[],this.size=t.size,this.setValue=nm(t.type)}},co=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,n){let i=this.seq;for(let r=0,o=i.length;r!==o;++r){let a=i[r];a.setValue(e,t[a.id],n)}}},Gr=/(\\w+)(\\])?(\\[|\\.)?/g;function Cc(s,e){s.seq.push(e),s.map[e.id]=e}function im(s,e,t){let n=s.name,i=n.length;for(Gr.lastIndex=0;;){let r=Gr.exec(n),o=Gr.lastIndex,a=r[1],c=r[2]===\"]\",l=r[3];if(c&&(a=a|0),l===void 0||l===\"[\"&&o+2===i){Cc(t,l===void 0?new oo(a,s,e):new ao(a,s,e));break}else{let u=t.map[a];u===void 0&&(u=new co(a),Cc(t,u)),t=u}}}var vi=class{constructor(e,t){this.seq=[],this.map={};let n=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let i=0;i<n;++i){let r=e.getActiveUniform(t,i),o=e.getUniformLocation(t,r.name);im(r,o,this)}}setValue(e,t,n,i){let r=this.map[t];r!==void 0&&r.setValue(e,n,i)}setOptional(e,t,n){let i=t[n];i!==void 0&&this.setValue(e,n,i)}static upload(e,t,n,i){for(let r=0,o=t.length;r!==o;++r){let a=t[r],c=n[a.id];c.needsUpdate!==!1&&a.setValue(e,c.value,i)}}static seqWithValue(e,t){let n=[];for(let i=0,r=e.length;i!==r;++i){let o=e[i];o.id in t&&n.push(o)}return n}};function Pc(s,e,t){let n=s.createShader(e);return s.shaderSource(n,t),s.compileShader(n),n}var sm=0;function rm(s,e){let t=s.split(`\n`),n=[],i=Math.max(e-6,0),r=Math.min(e+6,t.length);for(let o=i;o<r;o++){let a=o+1;n.push(`${a===e?\">\":\" \"} ${a}: ${t[o]}`)}return n.join(`\n`)}function om(s){switch(s){case Nt:return[\"Linear\",\"( value )\"];case xe:return[\"sRGB\",\"( value )\"];default:return console.warn(\"THREE.WebGLProgram: Unsupported color space:\",s),[\"Linear\",\"( value )\"]}}function Lc(s,e,t){let n=s.getShaderParameter(e,s.COMPILE_STATUS),i=s.getShaderInfoLog(e).trim();if(n&&i===\"\")return\"\";let r=/ERROR: 0:(\\d+)/.exec(i);if(r){let o=parseInt(r[1]);return t.toUpperCase()+`\n\n`+i+`\n\n`+rm(s.getShaderSource(e),o)}else return i}function am(s,e){let t=om(e);return\"vec4 \"+s+\"( vec4 value ) { return LinearTo\"+t[0]+t[1]+\"; }\"}function cm(s,e){let t;switch(e){case uh:t=\"Linear\";break;case dh:t=\"Reinhard\";break;case fh:t=\"OptimizedCineon\";break;case ph:t=\"ACESFilmic\";break;case mh:t=\"Custom\";break;default:console.warn(\"THREE.WebGLProgram: Unsupported toneMapping:\",e),t=\"Linear\"}return\"vec3 \"+s+\"( vec3 color ) { return \"+t+\"ToneMapping( color ); }\"}function lm(s){return[s.extensionDerivatives||s.envMapCubeUVHeight||s.bumpMap||s.normalMapTangentSpace||s.clearcoatNormalMap||s.flatShading||s.shaderID===\"physical\"?\"#extension GL_OES_standard_derivatives : enable\":\"\",(s.extensionFragDepth||s.logarithmicDepthBuffer)&&s.rendererExtensionFragDepth?\"#extension GL_EXT_frag_depth : enable\":\"\",s.extensionDrawBuffers&&s.rendererExtensionDrawBuffers?\"#extension GL_EXT_draw_buffers : require\":\"\",(s.extensionShaderTextureLOD||s.envMap||s.transmission)&&s.rendererExtensionShaderTextureLod?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(Gi).join(`\n`)}function hm(s){let e=[];for(let t in s){let n=s[t];n!==!1&&e.push(\"#define \"+t+\" \"+n)}return e.join(`\n`)}function um(s,e){let t={},n=s.getProgramParameter(e,s.ACTIVE_ATTRIBUTES);for(let i=0;i<n;i++){let r=s.getActiveAttrib(e,i),o=r.name,a=1;r.type===s.FLOAT_MAT2&&(a=2),r.type===s.FLOAT_MAT3&&(a=3),r.type===s.FLOAT_MAT4&&(a=4),t[o]={type:r.type,location:s.getAttribLocation(e,o),locationSize:a}}return t}function Gi(s){return s!==\"\"}function Ic(s,e){let t=e.numSpotLightShadows+e.numSpotLightMaps-e.numSpotLightShadowsWithMaps;return s.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,e.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,t).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,e.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function Uc(s,e){return s.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}var dm=/^[ \\t]*#include +<([\\w\\d./]+)>/gm;function lo(s){return s.replace(dm,pm)}var fm=new Map([[\"encodings_fragment\",\"colorspace_fragment\"],[\"encodings_pars_fragment\",\"colorspace_pars_fragment\"],[\"output_fragment\",\"opaque_fragment\"]]);function pm(s,e){let t=Ce[e];if(t===void 0){let n=fm.get(e);if(n!==void 0)t=Ce[n],console.warn('THREE.WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.',e,n);else throw new Error(\"Can not resolve #include <\"+e+\">\")}return lo(t)}var mm=/#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*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;function Dc(s){return s.replace(mm,gm)}function gm(s,e,t,n){let i=\"\";for(let r=parseInt(e);r<parseInt(t);r++)i+=n.replace(/\\[\\s*i\\s*\\]/g,\"[ \"+r+\" ]\").replace(/UNROLLED_LOOP_INDEX/g,r);return i}function Nc(s){let e=\"precision \"+s.precision+` float;\nprecision `+s.precision+\" int;\";return s.precision===\"highp\"?e+=`\n#define HIGH_PRECISION`:s.precision===\"mediump\"?e+=`\n#define MEDIUM_PRECISION`:s.precision===\"lowp\"&&(e+=`\n#define LOW_PRECISION`),e}function _m(s){let e=\"SHADOWMAP_TYPE_BASIC\";return s.shadowMapType===sl?e=\"SHADOWMAP_TYPE_PCF\":s.shadowMapType===Gl?e=\"SHADOWMAP_TYPE_PCF_SOFT\":s.shadowMapType===hn&&(e=\"SHADOWMAP_TYPE_VSM\"),e}function xm(s){let e=\"ENVMAP_TYPE_CUBE\";if(s.envMap)switch(s.envMapMode){case Mi:case Si:e=\"ENVMAP_TYPE_CUBE\";break;case lr:e=\"ENVMAP_TYPE_CUBE_UV\";break}return e}function ym(s){let e=\"ENVMAP_MODE_REFLECTION\";if(s.envMap)switch(s.envMapMode){case Si:e=\"ENVMAP_MODE_REFRACTION\";break}return e}function vm(s){let e=\"ENVMAP_BLENDING_NONE\";if(s.envMap)switch(s.combine){case al:e=\"ENVMAP_BLENDING_MULTIPLY\";break;case lh:e=\"ENVMAP_BLENDING_MIX\";break;case hh:e=\"ENVMAP_BLENDING_ADD\";break}return e}function Mm(s){let e=s.envMapCubeUVHeight;if(e===null)return null;let t=Math.log2(e)-2,n=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),7*16)),texelHeight:n,maxMip:t}}function Sm(s,e,t,n){let i=s.getContext(),r=t.defines,o=t.vertexShader,a=t.fragmentShader,c=_m(t),l=xm(t),h=ym(t),u=vm(t),d=Mm(t),p=t.isWebGL2?\"\":lm(t),g=hm(r),_=i.createProgram(),m,f,S=t.glslVersion?\"#version \"+t.glslVersion+`\n`:\"\";t.isRawShaderMaterial?(m=[\"#define SHADER_TYPE \"+t.shaderType,\"#define SHADER_NAME \"+t.shaderName,g].filter(Gi).join(`\n`),m.length>0&&(m+=`\n`),f=[p,\"#define SHADER_TYPE \"+t.shaderType,\"#define SHADER_NAME \"+t.shaderName,g].filter(Gi).join(`\n`),f.length>0&&(f+=`\n`)):(m=[Nc(t),\"#define SHADER_TYPE \"+t.shaderType,\"#define SHADER_NAME \"+t.shaderName,g,t.instancing?\"#define USE_INSTANCING\":\"\",t.instancingColor?\"#define USE_INSTANCING_COLOR\":\"\",t.useFog&&t.fog?\"#define USE_FOG\":\"\",t.useFog&&t.fogExp2?\"#define FOG_EXP2\":\"\",t.map?\"#define USE_MAP\":\"\",t.envMap?\"#define USE_ENVMAP\":\"\",t.envMap?\"#define \"+h:\"\",t.lightMap?\"#define USE_LIGHTMAP\":\"\",t.aoMap?\"#define USE_AOMAP\":\"\",t.bumpMap?\"#define USE_BUMPMAP\":\"\",t.normalMap?\"#define USE_NORMALMAP\":\"\",t.normalMapObjectSpace?\"#define USE_NORMALMAP_OBJECTSPACE\":\"\",t.normalMapTangentSpace?\"#define USE_NORMALMAP_TANGENTSPACE\":\"\",t.displacementMap?\"#define USE_DISPLACEMENTMAP\":\"\",t.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",t.anisotropyMap?\"#define USE_ANISOTROPYMAP\":\"\",t.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",t.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",t.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",t.iridescenceMap?\"#define USE_IRIDESCENCEMAP\":\"\",t.iridescenceThicknessMap?\"#define USE_IRIDESCENCE_THICKNESSMAP\":\"\",t.specularMap?\"#define USE_SPECULARMAP\":\"\",t.specularColorMap?\"#define USE_SPECULAR_COLORMAP\":\"\",t.specularIntensityMap?\"#define USE_SPECULAR_INTENSITYMAP\":\"\",t.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",t.metalnessMap?\"#define USE_METALNESSMAP\":\"\",t.alphaMap?\"#define USE_ALPHAMAP\":\"\",t.alphaHash?\"#define USE_ALPHAHASH\":\"\",t.transmission?\"#define USE_TRANSMISSION\":\"\",t.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",t.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",t.sheenColorMap?\"#define USE_SHEEN_COLORMAP\":\"\",t.sheenRoughnessMap?\"#define USE_SHEEN_ROUGHNESSMAP\":\"\",t.mapUv?\"#define MAP_UV \"+t.mapUv:\"\",t.alphaMapUv?\"#define ALPHAMAP_UV \"+t.alphaMapUv:\"\",t.lightMapUv?\"#define LIGHTMAP_UV \"+t.lightMapUv:\"\",t.aoMapUv?\"#define AOMAP_UV \"+t.aoMapUv:\"\",t.emissiveMapUv?\"#define EMISSIVEMAP_UV \"+t.emissiveMapUv:\"\",t.bumpMapUv?\"#define BUMPMAP_UV \"+t.bumpMapUv:\"\",t.normalMapUv?\"#define NORMALMAP_UV \"+t.normalMapUv:\"\",t.displacementMapUv?\"#define DISPLACEMENTMAP_UV \"+t.displacementMapUv:\"\",t.metalnessMapUv?\"#define METALNESSMAP_UV \"+t.metalnessMapUv:\"\",t.roughnessMapUv?\"#define ROUGHNESSMAP_UV \"+t.roughnessMapUv:\"\",t.anisotropyMapUv?\"#define ANISOTROPYMAP_UV \"+t.anisotropyMapUv:\"\",t.clearcoatMapUv?\"#define CLEARCOATMAP_UV \"+t.clearcoatMapUv:\"\",t.clearcoatNormalMapUv?\"#define CLEARCOAT_NORMALMAP_UV \"+t.clearcoatNormalMapUv:\"\",t.clearcoatRoughnessMapUv?\"#define CLEARCOAT_ROUGHNESSMAP_UV \"+t.clearcoatRoughnessMapUv:\"\",t.iridescenceMapUv?\"#define IRIDESCENCEMAP_UV \"+t.iridescenceMapUv:\"\",t.iridescenceThicknessMapUv?\"#define IRIDESCENCE_THICKNESSMAP_UV \"+t.iridescenceThicknessMapUv:\"\",t.sheenColorMapUv?\"#define SHEEN_COLORMAP_UV \"+t.sheenColorMapUv:\"\",t.sheenRoughnessMapUv?\"#define SHEEN_ROUGHNESSMAP_UV \"+t.sheenRoughnessMapUv:\"\",t.specularMapUv?\"#define SPECULARMAP_UV \"+t.specularMapUv:\"\",t.specularColorMapUv?\"#define SPECULAR_COLORMAP_UV \"+t.specularColorMapUv:\"\",t.specularIntensityMapUv?\"#define SPECULAR_INTENSITYMAP_UV \"+t.specularIntensityMapUv:\"\",t.transmissionMapUv?\"#define TRANSMISSIONMAP_UV \"+t.transmissionMapUv:\"\",t.thicknessMapUv?\"#define THICKNESSMAP_UV \"+t.thicknessMapUv:\"\",t.vertexTangents&&t.flatShading===!1?\"#define USE_TANGENT\":\"\",t.vertexColors?\"#define USE_COLOR\":\"\",t.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",t.vertexUv1s?\"#define USE_UV1\":\"\",t.vertexUv2s?\"#define USE_UV2\":\"\",t.vertexUv3s?\"#define USE_UV3\":\"\",t.pointsUvs?\"#define USE_POINTS_UV\":\"\",t.flatShading?\"#define FLAT_SHADED\":\"\",t.skinning?\"#define USE_SKINNING\":\"\",t.morphTargets?\"#define USE_MORPHTARGETS\":\"\",t.morphNormals&&t.flatShading===!1?\"#define USE_MORPHNORMALS\":\"\",t.morphColors&&t.isWebGL2?\"#define USE_MORPHCOLORS\":\"\",t.morphTargetsCount>0&&t.isWebGL2?\"#define MORPHTARGETS_TEXTURE\":\"\",t.morphTargetsCount>0&&t.isWebGL2?\"#define MORPHTARGETS_TEXTURE_STRIDE \"+t.morphTextureStride:\"\",t.morphTargetsCount>0&&t.isWebGL2?\"#define MORPHTARGETS_COUNT \"+t.morphTargetsCount:\"\",t.doubleSided?\"#define DOUBLE_SIDED\":\"\",t.flipSided?\"#define FLIP_SIDED\":\"\",t.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",t.shadowMapEnabled?\"#define \"+c:\"\",t.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",t.useLegacyLights?\"#define LEGACY_LIGHTS\":\"\",t.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",\"#ifdef USE_INSTANCING\",\"\tattribute mat4 instanceMatrix;\",\"#endif\",\"#ifdef USE_INSTANCING_COLOR\",\"\tattribute vec3 instanceColor;\",\"#endif\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_UV1\",\"\tattribute vec2 uv1;\",\"#endif\",\"#ifdef USE_UV2\",\"\tattribute vec2 uv2;\",\"#endif\",\"#ifdef USE_UV3\",\"\tattribute vec2 uv3;\",\"#endif\",\"#ifdef USE_TANGENT\",\"\tattribute vec4 tangent;\",\"#endif\",\"#if defined( USE_COLOR_ALPHA )\",\"\tattribute vec4 color;\",\"#elif defined( USE_COLOR )\",\"\tattribute vec3 color;\",\"#endif\",\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\",\"\tattribute vec3 morphTarget0;\",\"\tattribute vec3 morphTarget1;\",\"\tattribute vec3 morphTarget2;\",\"\tattribute vec3 morphTarget3;\",\"\t#ifdef USE_MORPHNORMALS\",\"\t\tattribute vec3 morphNormal0;\",\"\t\tattribute vec3 morphNormal1;\",\"\t\tattribute vec3 morphNormal2;\",\"\t\tattribute vec3 morphNormal3;\",\"\t#else\",\"\t\tattribute vec3 morphTarget4;\",\"\t\tattribute vec3 morphTarget5;\",\"\t\tattribute vec3 morphTarget6;\",\"\t\tattribute vec3 morphTarget7;\",\"\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\tattribute vec4 skinIndex;\",\"\tattribute vec4 skinWeight;\",\"#endif\",`\n`].filter(Gi).join(`\n`),f=[p,Nc(t),\"#define SHADER_TYPE \"+t.shaderType,\"#define SHADER_NAME \"+t.shaderName,g,t.useFog&&t.fog?\"#define USE_FOG\":\"\",t.useFog&&t.fogExp2?\"#define FOG_EXP2\":\"\",t.map?\"#define USE_MAP\":\"\",t.matcap?\"#define USE_MATCAP\":\"\",t.envMap?\"#define USE_ENVMAP\":\"\",t.envMap?\"#define \"+l:\"\",t.envMap?\"#define \"+h:\"\",t.envMap?\"#define \"+u:\"\",d?\"#define CUBEUV_TEXEL_WIDTH \"+d.texelWidth:\"\",d?\"#define CUBEUV_TEXEL_HEIGHT \"+d.texelHeight:\"\",d?\"#define CUBEUV_MAX_MIP \"+d.maxMip+\".0\":\"\",t.lightMap?\"#define USE_LIGHTMAP\":\"\",t.aoMap?\"#define USE_AOMAP\":\"\",t.bumpMap?\"#define USE_BUMPMAP\":\"\",t.normalMap?\"#define USE_NORMALMAP\":\"\",t.normalMapObjectSpace?\"#define USE_NORMALMAP_OBJECTSPACE\":\"\",t.normalMapTangentSpace?\"#define USE_NORMALMAP_TANGENTSPACE\":\"\",t.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",t.anisotropy?\"#define USE_ANISOTROPY\":\"\",t.anisotropyMap?\"#define USE_ANISOTROPYMAP\":\"\",t.clearcoat?\"#define USE_CLEARCOAT\":\"\",t.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",t.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",t.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",t.iridescence?\"#define USE_IRIDESCENCE\":\"\",t.iridescenceMap?\"#define USE_IRIDESCENCEMAP\":\"\",t.iridescenceThicknessMap?\"#define USE_IRIDESCENCE_THICKNESSMAP\":\"\",t.specularMap?\"#define USE_SPECULARMAP\":\"\",t.specularColorMap?\"#define USE_SPECULAR_COLORMAP\":\"\",t.specularIntensityMap?\"#define USE_SPECULAR_INTENSITYMAP\":\"\",t.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",t.metalnessMap?\"#define USE_METALNESSMAP\":\"\",t.alphaMap?\"#define USE_ALPHAMAP\":\"\",t.alphaTest?\"#define USE_ALPHATEST\":\"\",t.alphaHash?\"#define USE_ALPHAHASH\":\"\",t.sheen?\"#define USE_SHEEN\":\"\",t.sheenColorMap?\"#define USE_SHEEN_COLORMAP\":\"\",t.sheenRoughnessMap?\"#define USE_SHEEN_ROUGHNESSMAP\":\"\",t.transmission?\"#define USE_TRANSMISSION\":\"\",t.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",t.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",t.vertexTangents&&t.flatShading===!1?\"#define USE_TANGENT\":\"\",t.vertexColors||t.instancingColor?\"#define USE_COLOR\":\"\",t.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",t.vertexUv1s?\"#define USE_UV1\":\"\",t.vertexUv2s?\"#define USE_UV2\":\"\",t.vertexUv3s?\"#define USE_UV3\":\"\",t.pointsUvs?\"#define USE_POINTS_UV\":\"\",t.gradientMap?\"#define USE_GRADIENTMAP\":\"\",t.flatShading?\"#define FLAT_SHADED\":\"\",t.doubleSided?\"#define DOUBLE_SIDED\":\"\",t.flipSided?\"#define FLIP_SIDED\":\"\",t.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",t.shadowMapEnabled?\"#define \"+c:\"\",t.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",t.useLegacyLights?\"#define LEGACY_LIGHTS\":\"\",t.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",t.toneMapping!==En?\"#define TONE_MAPPING\":\"\",t.toneMapping!==En?Ce.tonemapping_pars_fragment:\"\",t.toneMapping!==En?cm(\"toneMapping\",t.toneMapping):\"\",t.dithering?\"#define DITHERING\":\"\",t.opaque?\"#define OPAQUE\":\"\",Ce.colorspace_pars_fragment,am(\"linearToOutputTexel\",t.outputColorSpace),t.useDepthPacking?\"#define DEPTH_PACKING \"+t.depthPacking:\"\",`\n`].filter(Gi).join(`\n`)),o=lo(o),o=Ic(o,t),o=Uc(o,t),a=lo(a),a=Ic(a,t),a=Uc(a,t),o=Dc(o),a=Dc(a),t.isWebGL2&&t.isRawShaderMaterial!==!0&&(S=`#version 300 es\n`,m=[\"precision mediump sampler2DArray;\",\"#define attribute in\",\"#define varying out\",\"#define texture2D texture\"].join(`\n`)+`\n`+m,f=[\"#define varying in\",t.glslVersion===tc?\"\":\"layout(location = 0) out highp vec4 pc_fragColor;\",t.glslVersion===tc?\"\":\"#define gl_FragColor pc_fragColor\",\"#define gl_FragDepthEXT gl_FragDepth\",\"#define texture2D texture\",\"#define textureCube texture\",\"#define texture2DProj textureProj\",\"#define texture2DLodEXT textureLod\",\"#define texture2DProjLodEXT textureProjLod\",\"#define textureCubeLodEXT textureLod\",\"#define texture2DGradEXT textureGrad\",\"#define texture2DProjGradEXT textureProjGrad\",\"#define textureCubeGradEXT textureGrad\"].join(`\n`)+`\n`+f);let x=S+m+o,A=S+f+a,E=Pc(i,i.VERTEX_SHADER,x),C=Pc(i,i.FRAGMENT_SHADER,A);if(i.attachShader(_,E),i.attachShader(_,C),t.index0AttributeName!==void 0?i.bindAttribLocation(_,0,t.index0AttributeName):t.morphTargets===!0&&i.bindAttribLocation(_,0,\"position\"),i.linkProgram(_),s.debug.checkShaderErrors){let v=i.getProgramInfoLog(_).trim(),T=i.getShaderInfoLog(E).trim(),Y=i.getShaderInfoLog(C).trim(),ne=!0,B=!0;if(i.getProgramParameter(_,i.LINK_STATUS)===!1)if(ne=!1,typeof s.debug.onShaderError==\"function\")s.debug.onShaderError(i,_,E,C);else{let V=Lc(i,E,\"vertex\"),G=Lc(i,C,\"fragment\");console.error(\"THREE.WebGLProgram: Shader Error \"+i.getError()+\" - VALIDATE_STATUS \"+i.getProgramParameter(_,i.VALIDATE_STATUS)+`\n\nProgram Info Log: `+v+`\n`+V+`\n`+G)}else v!==\"\"?console.warn(\"THREE.WebGLProgram: Program Info Log:\",v):(T===\"\"||Y===\"\")&&(B=!1);B&&(this.diagnostics={runnable:ne,programLog:v,vertexShader:{log:T,prefix:m},fragmentShader:{log:Y,prefix:f}})}i.deleteShader(E),i.deleteShader(C);let w;this.getUniforms=function(){return w===void 0&&(w=new vi(i,_)),w};let k;return this.getAttributes=function(){return k===void 0&&(k=um(i,_)),k},this.destroy=function(){n.releaseStatesOfProgram(this),i.deleteProgram(_),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=sm++,this.cacheKey=e,this.usedTimes=1,this.program=_,this.vertexShader=E,this.fragmentShader=C,this}var bm=0,ho=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,n=e.fragmentShader,i=this._getShaderStage(t),r=this._getShaderStage(n),o=this._getShaderCacheForMaterial(e);return o.has(i)===!1&&(o.add(i),i.usedTimes++),o.has(r)===!1&&(o.add(r),r.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let n of t)n.usedTimes--,n.usedTimes===0&&this.shaderCache.delete(n.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,n=t.get(e);return n===void 0&&(n=new Set,t.set(e,n)),n}_getShaderStage(e){let t=this.shaderCache,n=t.get(e);return n===void 0&&(n=new uo(e),t.set(e,n)),n}},uo=class{constructor(e){this.id=bm++,this.code=e,this.usedTimes=0}};function Am(s,e,t,n,i,r,o){let a=new Ws,c=new ho,l=[],h=i.isWebGL2,u=i.logarithmicDepthBuffer,d=i.vertexTextures,p=i.precision,g={MeshDepthMaterial:\"depth\",MeshDistanceMaterial:\"distanceRGBA\",MeshNormalMaterial:\"normal\",MeshBasicMaterial:\"basic\",MeshLambertMaterial:\"lambert\",MeshPhongMaterial:\"phong\",MeshToonMaterial:\"toon\",MeshStandardMaterial:\"physical\",MeshPhysicalMaterial:\"physical\",MeshMatcapMaterial:\"matcap\",LineBasicMaterial:\"basic\",LineDashedMaterial:\"dashed\",PointsMaterial:\"points\",ShadowMaterial:\"shadow\",SpriteMaterial:\"sprite\"};function _(v){return v===0?\"uv\":`uv${v}`}function m(v,T,Y,ne,B){let V=ne.fog,G=B.geometry,$=v.isMeshStandardMaterial?ne.environment:null,W=(v.isMeshStandardMaterial?t:e).get(v.envMap||$),q=W&&W.mapping===lr?W.image.height:null,Z=g[v.type];v.precision!==null&&(p=i.getMaxPrecision(v.precision),p!==v.precision&&console.warn(\"THREE.WebGLProgram.getParameters:\",v.precision,\"not supported, using\",p,\"instead.\"));let K=G.morphAttributes.position||G.morphAttributes.normal||G.morphAttributes.color,D=K!==void 0?K.length:0,X=0;G.morphAttributes.position!==void 0&&(X=1),G.morphAttributes.normal!==void 0&&(X=2),G.morphAttributes.color!==void 0&&(X=3);let oe,ae,ce,_e;if(Z){let Ye=Kt[Z];oe=Ye.vertexShader,ae=Ye.fragmentShader}else oe=v.vertexShader,ae=v.fragmentShader,c.update(v),ce=c.getVertexShaderID(v),_e=c.getFragmentShaderID(v);let Ee=s.getRenderTarget(),ye=B.isInstancedMesh===!0,He=!!v.map,St=!!v.matcap,Pe=!!W,U=!!v.aoMap,ht=!!v.lightMap,ve=!!v.bumpMap,we=!!v.normalMap,Te=!!v.displacementMap,Ze=!!v.emissiveMap,Fe=!!v.metalnessMap,Le=!!v.roughnessMap,Ge=v.anisotropy>0,ct=v.clearcoat>0,ut=v.iridescence>0,b=v.sheen>0,y=v.transmission>0,N=Ge&&!!v.anisotropyMap,j=ct&&!!v.clearcoatMap,J=ct&&!!v.clearcoatNormalMap,Q=ct&&!!v.clearcoatRoughnessMap,de=ut&&!!v.iridescenceMap,ee=ut&&!!v.iridescenceThicknessMap,F=b&&!!v.sheenColorMap,me=b&&!!v.sheenRoughnessMap,fe=!!v.specularMap,pe=!!v.specularColorMap,he=!!v.specularIntensityMap,ue=y&&!!v.transmissionMap,De=y&&!!v.thicknessMap,Xe=!!v.gradientMap,R=!!v.alphaMap,se=v.alphaTest>0,O=!!v.alphaHash,te=!!v.extensions,re=!!G.attributes.uv1,ke=!!G.attributes.uv2,Ke=!!G.attributes.uv3,et=En;return v.toneMapped&&(Ee===null||Ee.isXRRenderTarget===!0)&&(et=s.toneMapping),{isWebGL2:h,shaderID:Z,shaderType:v.type,shaderName:v.name,vertexShader:oe,fragmentShader:ae,defines:v.defines,customVertexShaderID:ce,customFragmentShaderID:_e,isRawShaderMaterial:v.isRawShaderMaterial===!0,glslVersion:v.glslVersion,precision:p,instancing:ye,instancingColor:ye&&B.instanceColor!==null,supportsVertexTextures:d,outputColorSpace:Ee===null?s.outputColorSpace:Ee.isXRRenderTarget===!0?Ee.texture.colorSpace:Nt,map:He,matcap:St,envMap:Pe,envMapMode:Pe&&W.mapping,envMapCubeUVHeight:q,aoMap:U,lightMap:ht,bumpMap:ve,normalMap:we,displacementMap:d&&Te,emissiveMap:Ze,normalMapObjectSpace:we&&v.normalMapType===Rh,normalMapTangentSpace:we&&v.normalMapType===_l,metalnessMap:Fe,roughnessMap:Le,anisotropy:Ge,anisotropyMap:N,clearcoat:ct,clearcoatMap:j,clearcoatNormalMap:J,clearcoatRoughnessMap:Q,iridescence:ut,iridescenceMap:de,iridescenceThicknessMap:ee,sheen:b,sheenColorMap:F,sheenRoughnessMap:me,specularMap:fe,specularColorMap:pe,specularIntensityMap:he,transmission:y,transmissionMap:ue,thicknessMap:De,gradientMap:Xe,opaque:v.transparent===!1&&v.blending===xi,alphaMap:R,alphaTest:se,alphaHash:O,combine:v.combine,mapUv:He&&_(v.map.channel),aoMapUv:U&&_(v.aoMap.channel),lightMapUv:ht&&_(v.lightMap.channel),bumpMapUv:ve&&_(v.bumpMap.channel),normalMapUv:we&&_(v.normalMap.channel),displacementMapUv:Te&&_(v.displacementMap.channel),emissiveMapUv:Ze&&_(v.emissiveMap.channel),metalnessMapUv:Fe&&_(v.metalnessMap.channel),roughnessMapUv:Le&&_(v.roughnessMap.channel),anisotropyMapUv:N&&_(v.anisotropyMap.channel),clearcoatMapUv:j&&_(v.clearcoatMap.channel),clearcoatNormalMapUv:J&&_(v.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Q&&_(v.clearcoatRoughnessMap.channel),iridescenceMapUv:de&&_(v.iridescenceMap.channel),iridescenceThicknessMapUv:ee&&_(v.iridescenceThicknessMap.channel),sheenColorMapUv:F&&_(v.sheenColorMap.channel),sheenRoughnessMapUv:me&&_(v.sheenRoughnessMap.channel),specularMapUv:fe&&_(v.specularMap.channel),specularColorMapUv:pe&&_(v.specularColorMap.channel),specularIntensityMapUv:he&&_(v.specularIntensityMap.channel),transmissionMapUv:ue&&_(v.transmissionMap.channel),thicknessMapUv:De&&_(v.thicknessMap.channel),alphaMapUv:R&&_(v.alphaMap.channel),vertexTangents:!!G.attributes.tangent&&(we||Ge),vertexColors:v.vertexColors,vertexAlphas:v.vertexColors===!0&&!!G.attributes.color&&G.attributes.color.itemSize===4,vertexUv1s:re,vertexUv2s:ke,vertexUv3s:Ke,pointsUvs:B.isPoints===!0&&!!G.attributes.uv&&(He||R),fog:!!V,useFog:v.fog===!0,fogExp2:V&&V.isFogExp2,flatShading:v.flatShading===!0,sizeAttenuation:v.sizeAttenuation===!0,logarithmicDepthBuffer:u,skinning:B.isSkinnedMesh===!0,morphTargets:G.morphAttributes.position!==void 0,morphNormals:G.morphAttributes.normal!==void 0,morphColors:G.morphAttributes.color!==void 0,morphTargetsCount:D,morphTextureStride:X,numDirLights:T.directional.length,numPointLights:T.point.length,numSpotLights:T.spot.length,numSpotLightMaps:T.spotLightMap.length,numRectAreaLights:T.rectArea.length,numHemiLights:T.hemi.length,numDirLightShadows:T.directionalShadowMap.length,numPointLightShadows:T.pointShadowMap.length,numSpotLightShadows:T.spotShadowMap.length,numSpotLightShadowsWithMaps:T.numSpotLightShadowsWithMaps,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:v.dithering,shadowMapEnabled:s.shadowMap.enabled&&Y.length>0,shadowMapType:s.shadowMap.type,toneMapping:et,useLegacyLights:s._useLegacyLights,premultipliedAlpha:v.premultipliedAlpha,doubleSided:v.side===Gt,flipSided:v.side===bt,useDepthPacking:v.depthPacking>=0,depthPacking:v.depthPacking||0,index0AttributeName:v.index0AttributeName,extensionDerivatives:te&&v.extensions.derivatives===!0,extensionFragDepth:te&&v.extensions.fragDepth===!0,extensionDrawBuffers:te&&v.extensions.drawBuffers===!0,extensionShaderTextureLOD:te&&v.extensions.shaderTextureLOD===!0,rendererExtensionFragDepth:h||n.has(\"EXT_frag_depth\"),rendererExtensionDrawBuffers:h||n.has(\"WEBGL_draw_buffers\"),rendererExtensionShaderTextureLod:h||n.has(\"EXT_shader_texture_lod\"),customProgramCacheKey:v.customProgramCacheKey()}}function f(v){let T=[];if(v.shaderID?T.push(v.shaderID):(T.push(v.customVertexShaderID),T.push(v.customFragmentShaderID)),v.defines!==void 0)for(let Y in v.defines)T.push(Y),T.push(v.defines[Y]);return v.isRawShaderMaterial===!1&&(S(T,v),x(T,v),T.push(s.outputColorSpace)),T.push(v.customProgramCacheKey),T.join()}function S(v,T){v.push(T.precision),v.push(T.outputColorSpace),v.push(T.envMapMode),v.push(T.envMapCubeUVHeight),v.push(T.mapUv),v.push(T.alphaMapUv),v.push(T.lightMapUv),v.push(T.aoMapUv),v.push(T.bumpMapUv),v.push(T.normalMapUv),v.push(T.displacementMapUv),v.push(T.emissiveMapUv),v.push(T.metalnessMapUv),v.push(T.roughnessMapUv),v.push(T.anisotropyMapUv),v.push(T.clearcoatMapUv),v.push(T.clearcoatNormalMapUv),v.push(T.clearcoatRoughnessMapUv),v.push(T.iridescenceMapUv),v.push(T.iridescenceThicknessMapUv),v.push(T.sheenColorMapUv),v.push(T.sheenRoughnessMapUv),v.push(T.specularMapUv),v.push(T.specularColorMapUv),v.push(T.specularIntensityMapUv),v.push(T.transmissionMapUv),v.push(T.thicknessMapUv),v.push(T.combine),v.push(T.fogExp2),v.push(T.sizeAttenuation),v.push(T.morphTargetsCount),v.push(T.morphAttributeCount),v.push(T.numDirLights),v.push(T.numPointLights),v.push(T.numSpotLights),v.push(T.numSpotLightMaps),v.push(T.numHemiLights),v.push(T.numRectAreaLights),v.push(T.numDirLightShadows),v.push(T.numPointLightShadows),v.push(T.numSpotLightShadows),v.push(T.numSpotLightShadowsWithMaps),v.push(T.shadowMapType),v.push(T.toneMapping),v.push(T.numClippingPlanes),v.push(T.numClipIntersection),v.push(T.depthPacking)}function x(v,T){a.disableAll(),T.isWebGL2&&a.enable(0),T.supportsVertexTextures&&a.enable(1),T.instancing&&a.enable(2),T.instancingColor&&a.enable(3),T.matcap&&a.enable(4),T.envMap&&a.enable(5),T.normalMapObjectSpace&&a.enable(6),T.normalMapTangentSpace&&a.enable(7),T.clearcoat&&a.enable(8),T.iridescence&&a.enable(9),T.alphaTest&&a.enable(10),T.vertexColors&&a.enable(11),T.vertexAlphas&&a.enable(12),T.vertexUv1s&&a.enable(13),T.vertexUv2s&&a.enable(14),T.vertexUv3s&&a.enable(15),T.vertexTangents&&a.enable(16),T.anisotropy&&a.enable(17),v.push(a.mask),a.disableAll(),T.fog&&a.enable(0),T.useFog&&a.enable(1),T.flatShading&&a.enable(2),T.logarithmicDepthBuffer&&a.enable(3),T.skinning&&a.enable(4),T.morphTargets&&a.enable(5),T.morphNormals&&a.enable(6),T.morphColors&&a.enable(7),T.premultipliedAlpha&&a.enable(8),T.shadowMapEnabled&&a.enable(9),T.useLegacyLights&&a.enable(10),T.doubleSided&&a.enable(11),T.flipSided&&a.enable(12),T.useDepthPacking&&a.enable(13),T.dithering&&a.enable(14),T.transmission&&a.enable(15),T.sheen&&a.enable(16),T.opaque&&a.enable(17),T.pointsUvs&&a.enable(18),v.push(a.mask)}function A(v){let T=g[v.type],Y;if(T){let ne=Kt[T];Y=gu.clone(ne.uniforms)}else Y=v.uniforms;return Y}function E(v,T){let Y;for(let ne=0,B=l.length;ne<B;ne++){let V=l[ne];if(V.cacheKey===T){Y=V,++Y.usedTimes;break}}return Y===void 0&&(Y=new Sm(s,T,v,r),l.push(Y)),Y}function C(v){if(--v.usedTimes===0){let T=l.indexOf(v);l[T]=l[l.length-1],l.pop(),v.destroy()}}function w(v){c.remove(v)}function k(){c.dispose()}return{getParameters:m,getProgramCacheKey:f,getUniforms:A,acquireProgram:E,releaseProgram:C,releaseShaderCache:w,programs:l,dispose:k}}function Tm(){let s=new WeakMap;function e(r){let o=s.get(r);return o===void 0&&(o={},s.set(r,o)),o}function t(r){s.delete(r)}function n(r,o,a){s.get(r)[o]=a}function i(){s=new WeakMap}return{get:e,remove:t,update:n,dispose:i}}function Em(s,e){return s.groupOrder!==e.groupOrder?s.groupOrder-e.groupOrder:s.renderOrder!==e.renderOrder?s.renderOrder-e.renderOrder:s.material.id!==e.material.id?s.material.id-e.material.id:s.z!==e.z?s.z-e.z:s.id-e.id}function Oc(s,e){return s.groupOrder!==e.groupOrder?s.groupOrder-e.groupOrder:s.renderOrder!==e.renderOrder?s.renderOrder-e.renderOrder:s.z!==e.z?e.z-s.z:s.id-e.id}function Fc(){let s=[],e=0,t=[],n=[],i=[];function r(){e=0,t.length=0,n.length=0,i.length=0}function o(u,d,p,g,_,m){let f=s[e];return f===void 0?(f={id:u.id,object:u,geometry:d,material:p,groupOrder:g,renderOrder:u.renderOrder,z:_,group:m},s[e]=f):(f.id=u.id,f.object=u,f.geometry=d,f.material=p,f.groupOrder=g,f.renderOrder=u.renderOrder,f.z=_,f.group=m),e++,f}function a(u,d,p,g,_,m){let f=o(u,d,p,g,_,m);p.transmission>0?n.push(f):p.transparent===!0?i.push(f):t.push(f)}function c(u,d,p,g,_,m){let f=o(u,d,p,g,_,m);p.transmission>0?n.unshift(f):p.transparent===!0?i.unshift(f):t.unshift(f)}function l(u,d){t.length>1&&t.sort(u||Em),n.length>1&&n.sort(d||Oc),i.length>1&&i.sort(d||Oc)}function h(){for(let u=e,d=s.length;u<d;u++){let p=s[u];if(p.id===null)break;p.id=null,p.object=null,p.geometry=null,p.material=null,p.group=null}}return{opaque:t,transmissive:n,transparent:i,init:r,push:a,unshift:c,finish:h,sort:l}}function wm(){let s=new WeakMap;function e(n,i){let r=s.get(n),o;return r===void 0?(o=new Fc,s.set(n,[o])):i>=r.length?(o=new Fc,r.push(o)):o=r[i],o}function t(){s=new WeakMap}return{get:e,dispose:t}}function Rm(){let s={};return{get:function(e){if(s[e.id]!==void 0)return s[e.id];let t;switch(e.type){case\"DirectionalLight\":t={direction:new P,color:new Ae};break;case\"SpotLight\":t={position:new P,direction:new P,color:new Ae,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\"PointLight\":t={position:new P,color:new Ae,distance:0,decay:0};break;case\"HemisphereLight\":t={direction:new P,skyColor:new Ae,groundColor:new Ae};break;case\"RectAreaLight\":t={color:new Ae,position:new P,halfWidth:new P,halfHeight:new P};break}return s[e.id]=t,t}}}function Cm(){let s={};return{get:function(e){if(s[e.id]!==void 0)return s[e.id];let t;switch(e.type){case\"DirectionalLight\":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Be};break;case\"SpotLight\":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Be};break;case\"PointLight\":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Be,shadowCameraNear:1,shadowCameraFar:1e3};break}return s[e.id]=t,t}}}var Pm=0;function Lm(s,e){return(e.castShadow?2:0)-(s.castShadow?2:0)+(e.map?1:0)-(s.map?1:0)}function Im(s,e){let t=new Rm,n=Cm(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let h=0;h<9;h++)i.probe.push(new P);let r=new P,o=new Ue,a=new Ue;function c(h,u){let d=0,p=0,g=0;for(let Y=0;Y<9;Y++)i.probe[Y].set(0,0,0);let _=0,m=0,f=0,S=0,x=0,A=0,E=0,C=0,w=0,k=0;h.sort(Lm);let v=u===!0?Math.PI:1;for(let Y=0,ne=h.length;Y<ne;Y++){let B=h[Y],V=B.color,G=B.intensity,$=B.distance,W=B.shadow&&B.shadow.map?B.shadow.map.texture:null;if(B.isAmbientLight)d+=V.r*G*v,p+=V.g*G*v,g+=V.b*G*v;else if(B.isLightProbe)for(let q=0;q<9;q++)i.probe[q].addScaledVector(B.sh.coefficients[q],G);else if(B.isDirectionalLight){let q=t.get(B);if(q.color.copy(B.color).multiplyScalar(B.intensity*v),B.castShadow){let Z=B.shadow,K=n.get(B);K.shadowBias=Z.bias,K.shadowNormalBias=Z.normalBias,K.shadowRadius=Z.radius,K.shadowMapSize=Z.mapSize,i.directionalShadow[_]=K,i.directionalShadowMap[_]=W,i.directionalShadowMatrix[_]=B.shadow.matrix,A++}i.directional[_]=q,_++}else if(B.isSpotLight){let q=t.get(B);q.position.setFromMatrixPosition(B.matrixWorld),q.color.copy(V).multiplyScalar(G*v),q.distance=$,q.coneCos=Math.cos(B.angle),q.penumbraCos=Math.cos(B.angle*(1-B.penumbra)),q.decay=B.decay,i.spot[f]=q;let Z=B.shadow;if(B.map&&(i.spotLightMap[w]=B.map,w++,Z.updateMatrices(B),B.castShadow&&k++),i.spotLightMatrix[f]=Z.matrix,B.castShadow){let K=n.get(B);K.shadowBias=Z.bias,K.shadowNormalBias=Z.normalBias,K.shadowRadius=Z.radius,K.shadowMapSize=Z.mapSize,i.spotShadow[f]=K,i.spotShadowMap[f]=W,C++}f++}else if(B.isRectAreaLight){let q=t.get(B);q.color.copy(V).multiplyScalar(G),q.halfWidth.set(B.width*.5,0,0),q.halfHeight.set(0,B.height*.5,0),i.rectArea[S]=q,S++}else if(B.isPointLight){let q=t.get(B);if(q.color.copy(B.color).multiplyScalar(B.intensity*v),q.distance=B.distance,q.decay=B.decay,B.castShadow){let Z=B.shadow,K=n.get(B);K.shadowBias=Z.bias,K.shadowNormalBias=Z.normalBias,K.shadowRadius=Z.radius,K.shadowMapSize=Z.mapSize,K.shadowCameraNear=Z.camera.near,K.shadowCameraFar=Z.camera.far,i.pointShadow[m]=K,i.pointShadowMap[m]=W,i.pointShadowMatrix[m]=B.shadow.matrix,E++}i.point[m]=q,m++}else if(B.isHemisphereLight){let q=t.get(B);q.skyColor.copy(B.color).multiplyScalar(G*v),q.groundColor.copy(B.groundColor).multiplyScalar(G*v),i.hemi[x]=q,x++}}S>0&&(e.isWebGL2||s.has(\"OES_texture_float_linear\")===!0?(i.rectAreaLTC1=ie.LTC_FLOAT_1,i.rectAreaLTC2=ie.LTC_FLOAT_2):s.has(\"OES_texture_half_float_linear\")===!0?(i.rectAreaLTC1=ie.LTC_HALF_1,i.rectAreaLTC2=ie.LTC_HALF_2):console.error(\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\")),i.ambient[0]=d,i.ambient[1]=p,i.ambient[2]=g;let T=i.hash;(T.directionalLength!==_||T.pointLength!==m||T.spotLength!==f||T.rectAreaLength!==S||T.hemiLength!==x||T.numDirectionalShadows!==A||T.numPointShadows!==E||T.numSpotShadows!==C||T.numSpotMaps!==w)&&(i.directional.length=_,i.spot.length=f,i.rectArea.length=S,i.point.length=m,i.hemi.length=x,i.directionalShadow.length=A,i.directionalShadowMap.length=A,i.pointShadow.length=E,i.pointShadowMap.length=E,i.spotShadow.length=C,i.spotShadowMap.length=C,i.directionalShadowMatrix.length=A,i.pointShadowMatrix.length=E,i.spotLightMatrix.length=C+w-k,i.spotLightMap.length=w,i.numSpotLightShadowsWithMaps=k,T.directionalLength=_,T.pointLength=m,T.spotLength=f,T.rectAreaLength=S,T.hemiLength=x,T.numDirectionalShadows=A,T.numPointShadows=E,T.numSpotShadows=C,T.numSpotMaps=w,i.version=Pm++)}function l(h,u){let d=0,p=0,g=0,_=0,m=0,f=u.matrixWorldInverse;for(let S=0,x=h.length;S<x;S++){let A=h[S];if(A.isDirectionalLight){let E=i.directional[d];E.direction.setFromMatrixPosition(A.matrixWorld),r.setFromMatrixPosition(A.target.matrixWorld),E.direction.sub(r),E.direction.transformDirection(f),d++}else if(A.isSpotLight){let E=i.spot[g];E.position.setFromMatrixPosition(A.matrixWorld),E.position.applyMatrix4(f),E.direction.setFromMatrixPosition(A.matrixWorld),r.setFromMatrixPosition(A.target.matrixWorld),E.direction.sub(r),E.direction.transformDirection(f),g++}else if(A.isRectAreaLight){let E=i.rectArea[_];E.position.setFromMatrixPosition(A.matrixWorld),E.position.applyMatrix4(f),a.identity(),o.copy(A.matrixWorld),o.premultiply(f),a.extractRotation(o),E.halfWidth.set(A.width*.5,0,0),E.halfHeight.set(0,A.height*.5,0),E.halfWidth.applyMatrix4(a),E.halfHeight.applyMatrix4(a),_++}else if(A.isPointLight){let E=i.point[p];E.position.setFromMatrixPosition(A.matrixWorld),E.position.applyMatrix4(f),p++}else if(A.isHemisphereLight){let E=i.hemi[m];E.direction.setFromMatrixPosition(A.matrixWorld),E.direction.transformDirection(f),m++}}}return{setup:c,setupView:l,state:i}}function Bc(s,e){let t=new Im(s,e),n=[],i=[];function r(){n.length=0,i.length=0}function o(u){n.push(u)}function a(u){i.push(u)}function c(u){t.setup(n,u)}function l(u){t.setupView(n,u)}return{init:r,state:{lightsArray:n,shadowsArray:i,lights:t},setupLights:c,setupLightsView:l,pushLight:o,pushShadow:a}}function Um(s,e){let t=new WeakMap;function n(r,o=0){let a=t.get(r),c;return a===void 0?(c=new Bc(s,e),t.set(r,[c])):o>=a.length?(c=new Bc(s,e),a.push(c)):c=a[o],c}function i(){t=new WeakMap}return{get:n,dispose:i}}var fo=class extends Pt{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type=\"MeshDepthMaterial\",this.depthPacking=Eh,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},po=class extends Pt{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type=\"MeshDistanceMaterial\",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},Dm=`void main() {\n\tgl_Position = vec4( position, 1.0 );\n}`,Nm=`uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}`;function Om(s,e,t){let n=new Qi,i=new Be,r=new Be,o=new We,a=new fo({depthPacking:wh}),c=new po,l={},h=t.maxTextureSize,u={[jt]:bt,[bt]:jt,[Gt]:Gt},d=new mn({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Be},radius:{value:4}},vertexShader:Dm,fragmentShader:Nm}),p=d.clone();p.defines.HORIZONTAL_PASS=1;let g=new At;g.setAttribute(\"position\",new $e(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let _=new Mt(g,d),m=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=sl;let f=this.type;this.render=function(E,C,w){if(m.enabled===!1||m.autoUpdate===!1&&m.needsUpdate===!1||E.length===0)return;let k=s.getRenderTarget(),v=s.getActiveCubeFace(),T=s.getActiveMipmapLevel(),Y=s.state;Y.setBlending(Tn),Y.buffers.color.setClear(1,1,1,1),Y.buffers.depth.setTest(!0),Y.setScissorTest(!1);let ne=f!==hn&&this.type===hn,B=f===hn&&this.type!==hn;for(let V=0,G=E.length;V<G;V++){let $=E[V],W=$.shadow;if(W===void 0){console.warn(\"THREE.WebGLShadowMap:\",$,\"has no shadow.\");continue}if(W.autoUpdate===!1&&W.needsUpdate===!1)continue;i.copy(W.mapSize);let q=W.getFrameExtents();if(i.multiply(q),r.copy(W.mapSize),(i.x>h||i.y>h)&&(i.x>h&&(r.x=Math.floor(h/q.x),i.x=r.x*q.x,W.mapSize.x=r.x),i.y>h&&(r.y=Math.floor(h/q.y),i.y=r.y*q.y,W.mapSize.y=r.y)),W.map===null||ne===!0||B===!0){let K=this.type!==hn?{minFilter:st,magFilter:st}:{};W.map!==null&&W.map.dispose(),W.map=new pn(i.x,i.y,K),W.map.texture.name=$.name+\".shadowMap\",W.camera.updateProjectionMatrix()}s.setRenderTarget(W.map),s.clear();let Z=W.getViewportCount();for(let K=0;K<Z;K++){let D=W.getViewport(K);o.set(r.x*D.x,r.y*D.y,r.x*D.z,r.y*D.w),Y.viewport(o),W.updateMatrices($,K),n=W.getFrustum(),A(C,w,W.camera,$,this.type)}W.isPointLightShadow!==!0&&this.type===hn&&S(W,w),W.needsUpdate=!1}f=this.type,m.needsUpdate=!1,s.setRenderTarget(k,v,T)};function S(E,C){let w=e.update(_);d.defines.VSM_SAMPLES!==E.blurSamples&&(d.defines.VSM_SAMPLES=E.blurSamples,p.defines.VSM_SAMPLES=E.blurSamples,d.needsUpdate=!0,p.needsUpdate=!0),E.mapPass===null&&(E.mapPass=new pn(i.x,i.y)),d.uniforms.shadow_pass.value=E.map.texture,d.uniforms.resolution.value=E.mapSize,d.uniforms.radius.value=E.radius,s.setRenderTarget(E.mapPass),s.clear(),s.renderBufferDirect(C,null,w,d,_,null),p.uniforms.shadow_pass.value=E.mapPass.texture,p.uniforms.resolution.value=E.mapSize,p.uniforms.radius.value=E.radius,s.setRenderTarget(E.map),s.clear(),s.renderBufferDirect(C,null,w,p,_,null)}function x(E,C,w,k){let v=null,T=w.isPointLight===!0?E.customDistanceMaterial:E.customDepthMaterial;if(T!==void 0)v=T;else if(v=w.isPointLight===!0?c:a,s.localClippingEnabled&&C.clipShadows===!0&&Array.isArray(C.clippingPlanes)&&C.clippingPlanes.length!==0||C.displacementMap&&C.displacementScale!==0||C.alphaMap&&C.alphaTest>0||C.map&&C.alphaTest>0){let Y=v.uuid,ne=C.uuid,B=l[Y];B===void 0&&(B={},l[Y]=B);let V=B[ne];V===void 0&&(V=v.clone(),B[ne]=V),v=V}if(v.visible=C.visible,v.wireframe=C.wireframe,k===hn?v.side=C.shadowSide!==null?C.shadowSide:C.side:v.side=C.shadowSide!==null?C.shadowSide:u[C.side],v.alphaMap=C.alphaMap,v.alphaTest=C.alphaTest,v.map=C.map,v.clipShadows=C.clipShadows,v.clippingPlanes=C.clippingPlanes,v.clipIntersection=C.clipIntersection,v.displacementMap=C.displacementMap,v.displacementScale=C.displacementScale,v.displacementBias=C.displacementBias,v.wireframeLinewidth=C.wireframeLinewidth,v.linewidth=C.linewidth,w.isPointLight===!0&&v.isMeshDistanceMaterial===!0){let Y=s.properties.get(v);Y.light=w}return v}function A(E,C,w,k,v){if(E.visible===!1)return;if(E.layers.test(C.layers)&&(E.isMesh||E.isLine||E.isPoints)&&(E.castShadow||E.receiveShadow&&v===hn)&&(!E.frustumCulled||n.intersectsObject(E))){E.modelViewMatrix.multiplyMatrices(w.matrixWorldInverse,E.matrixWorld);let ne=e.update(E),B=E.material;if(Array.isArray(B)){let V=ne.groups;for(let G=0,$=V.length;G<$;G++){let W=V[G],q=B[W.materialIndex];if(q&&q.visible){let Z=x(E,q,k,v);s.renderBufferDirect(w,null,ne,Z,E,W)}}}else if(B.visible){let V=x(E,B,k,v);s.renderBufferDirect(w,null,ne,V,E,null)}}let Y=E.children;for(let ne=0,B=Y.length;ne<B;ne++)A(Y[ne],C,w,k,v)}}function Fm(s,e,t){let n=t.isWebGL2;function i(){let R=!1,se=new We,O=null,te=new We(0,0,0,0);return{setMask:function(re){O!==re&&!R&&(s.colorMask(re,re,re,re),O=re)},setLocked:function(re){R=re},setClear:function(re,ke,Ke,et,xn){xn===!0&&(re*=et,ke*=et,Ke*=et),se.set(re,ke,Ke,et),te.equals(se)===!1&&(s.clearColor(re,ke,Ke,et),te.copy(se))},reset:function(){R=!1,O=null,te.set(-1,0,0,0)}}}function r(){let R=!1,se=null,O=null,te=null;return{setTest:function(re){re?Ee(s.DEPTH_TEST):ye(s.DEPTH_TEST)},setMask:function(re){se!==re&&!R&&(s.depthMask(re),se=re)},setFunc:function(re){if(O!==re){switch(re){case nh:s.depthFunc(s.NEVER);break;case ih:s.depthFunc(s.ALWAYS);break;case sh:s.depthFunc(s.LESS);break;case Kr:s.depthFunc(s.LEQUAL);break;case rh:s.depthFunc(s.EQUAL);break;case oh:s.depthFunc(s.GEQUAL);break;case ah:s.depthFunc(s.GREATER);break;case ch:s.depthFunc(s.NOTEQUAL);break;default:s.depthFunc(s.LEQUAL)}O=re}},setLocked:function(re){R=re},setClear:function(re){te!==re&&(s.clearDepth(re),te=re)},reset:function(){R=!1,se=null,O=null,te=null}}}function o(){let R=!1,se=null,O=null,te=null,re=null,ke=null,Ke=null,et=null,xn=null;return{setTest:function(Ye){R||(Ye?Ee(s.STENCIL_TEST):ye(s.STENCIL_TEST))},setMask:function(Ye){se!==Ye&&!R&&(s.stencilMask(Ye),se=Ye)},setFunc:function(Ye,Zt,gt){(O!==Ye||te!==Zt||re!==gt)&&(s.stencilFunc(Ye,Zt,gt),O=Ye,te=Zt,re=gt)},setOp:function(Ye,Zt,gt){(ke!==Ye||Ke!==Zt||et!==gt)&&(s.stencilOp(Ye,Zt,gt),ke=Ye,Ke=Zt,et=gt)},setLocked:function(Ye){R=Ye},setClear:function(Ye){xn!==Ye&&(s.clearStencil(Ye),xn=Ye)},reset:function(){R=!1,se=null,O=null,te=null,re=null,ke=null,Ke=null,et=null,xn=null}}}let a=new i,c=new r,l=new o,h=new WeakMap,u=new WeakMap,d={},p={},g=new WeakMap,_=[],m=null,f=!1,S=null,x=null,A=null,E=null,C=null,w=null,k=null,v=!1,T=null,Y=null,ne=null,B=null,V=null,G=s.getParameter(s.MAX_COMBINED_TEXTURE_IMAGE_UNITS),$=!1,W=0,q=s.getParameter(s.VERSION);q.indexOf(\"WebGL\")!==-1?(W=parseFloat(/^WebGL (\\d)/.exec(q)[1]),$=W>=1):q.indexOf(\"OpenGL ES\")!==-1&&(W=parseFloat(/^OpenGL ES (\\d)/.exec(q)[1]),$=W>=2);let Z=null,K={},D=s.getParameter(s.SCISSOR_BOX),X=s.getParameter(s.VIEWPORT),oe=new We().fromArray(D),ae=new We().fromArray(X);function ce(R,se,O,te){let re=new Uint8Array(4),ke=s.createTexture();s.bindTexture(R,ke),s.texParameteri(R,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(R,s.TEXTURE_MAG_FILTER,s.NEAREST);for(let Ke=0;Ke<O;Ke++)n&&(R===s.TEXTURE_3D||R===s.TEXTURE_2D_ARRAY)?s.texImage3D(se,0,s.RGBA,1,1,te,0,s.RGBA,s.UNSIGNED_BYTE,re):s.texImage2D(se+Ke,0,s.RGBA,1,1,0,s.RGBA,s.UNSIGNED_BYTE,re);return ke}let _e={};_e[s.TEXTURE_2D]=ce(s.TEXTURE_2D,s.TEXTURE_2D,1),_e[s.TEXTURE_CUBE_MAP]=ce(s.TEXTURE_CUBE_MAP,s.TEXTURE_CUBE_MAP_POSITIVE_X,6),n&&(_e[s.TEXTURE_2D_ARRAY]=ce(s.TEXTURE_2D_ARRAY,s.TEXTURE_2D_ARRAY,1,1),_e[s.TEXTURE_3D]=ce(s.TEXTURE_3D,s.TEXTURE_3D,1,1)),a.setClear(0,0,0,1),c.setClear(1),l.setClear(0),Ee(s.DEPTH_TEST),c.setFunc(Kr),Te(!1),Ze(ba),Ee(s.CULL_FACE),ve(Tn);function Ee(R){d[R]!==!0&&(s.enable(R),d[R]=!0)}function ye(R){d[R]!==!1&&(s.disable(R),d[R]=!1)}function He(R,se){return p[R]!==se?(s.bindFramebuffer(R,se),p[R]=se,n&&(R===s.DRAW_FRAMEBUFFER&&(p[s.FRAMEBUFFER]=se),R===s.FRAMEBUFFER&&(p[s.DRAW_FRAMEBUFFER]=se)),!0):!1}function St(R,se){let O=_,te=!1;if(R)if(O=g.get(se),O===void 0&&(O=[],g.set(se,O)),R.isWebGLMultipleRenderTargets){let re=R.texture;if(O.length!==re.length||O[0]!==s.COLOR_ATTACHMENT0){for(let ke=0,Ke=re.length;ke<Ke;ke++)O[ke]=s.COLOR_ATTACHMENT0+ke;O.length=re.length,te=!0}}else O[0]!==s.COLOR_ATTACHMENT0&&(O[0]=s.COLOR_ATTACHMENT0,te=!0);else O[0]!==s.BACK&&(O[0]=s.BACK,te=!0);te&&(t.isWebGL2?s.drawBuffers(O):e.get(\"WEBGL_draw_buffers\").drawBuffersWEBGL(O))}function Pe(R){return m!==R?(s.useProgram(R),m=R,!0):!1}let U={[mi]:s.FUNC_ADD,[Xl]:s.FUNC_SUBTRACT,[ql]:s.FUNC_REVERSE_SUBTRACT};if(n)U[wa]=s.MIN,U[Ra]=s.MAX;else{let R=e.get(\"EXT_blend_minmax\");R!==null&&(U[wa]=R.MIN_EXT,U[Ra]=R.MAX_EXT)}let ht={[Yl]:s.ZERO,[Zl]:s.ONE,[Kl]:s.SRC_COLOR,[rl]:s.SRC_ALPHA,[th]:s.SRC_ALPHA_SATURATE,[Ql]:s.DST_COLOR,[$l]:s.DST_ALPHA,[Jl]:s.ONE_MINUS_SRC_COLOR,[ol]:s.ONE_MINUS_SRC_ALPHA,[eh]:s.ONE_MINUS_DST_COLOR,[jl]:s.ONE_MINUS_DST_ALPHA};function ve(R,se,O,te,re,ke,Ke,et){if(R===Tn){f===!0&&(ye(s.BLEND),f=!1);return}if(f===!1&&(Ee(s.BLEND),f=!0),R!==Wl){if(R!==S||et!==v){if((x!==mi||C!==mi)&&(s.blendEquation(s.FUNC_ADD),x=mi,C=mi),et)switch(R){case xi:s.blendFuncSeparate(s.ONE,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case Aa:s.blendFunc(s.ONE,s.ONE);break;case Ta:s.blendFuncSeparate(s.ZERO,s.ONE_MINUS_SRC_COLOR,s.ZERO,s.ONE);break;case Ea:s.blendFuncSeparate(s.ZERO,s.SRC_COLOR,s.ZERO,s.SRC_ALPHA);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",R);break}else switch(R){case xi:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case Aa:s.blendFunc(s.SRC_ALPHA,s.ONE);break;case Ta:s.blendFuncSeparate(s.ZERO,s.ONE_MINUS_SRC_COLOR,s.ZERO,s.ONE);break;case Ea:s.blendFunc(s.ZERO,s.SRC_COLOR);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",R);break}A=null,E=null,w=null,k=null,S=R,v=et}return}re=re||se,ke=ke||O,Ke=Ke||te,(se!==x||re!==C)&&(s.blendEquationSeparate(U[se],U[re]),x=se,C=re),(O!==A||te!==E||ke!==w||Ke!==k)&&(s.blendFuncSeparate(ht[O],ht[te],ht[ke],ht[Ke]),A=O,E=te,w=ke,k=Ke),S=R,v=!1}function we(R,se){R.side===Gt?ye(s.CULL_FACE):Ee(s.CULL_FACE);let O=R.side===bt;se&&(O=!O),Te(O),R.blending===xi&&R.transparent===!1?ve(Tn):ve(R.blending,R.blendEquation,R.blendSrc,R.blendDst,R.blendEquationAlpha,R.blendSrcAlpha,R.blendDstAlpha,R.premultipliedAlpha),c.setFunc(R.depthFunc),c.setTest(R.depthTest),c.setMask(R.depthWrite),a.setMask(R.colorWrite);let te=R.stencilWrite;l.setTest(te),te&&(l.setMask(R.stencilWriteMask),l.setFunc(R.stencilFunc,R.stencilRef,R.stencilFuncMask),l.setOp(R.stencilFail,R.stencilZFail,R.stencilZPass)),Le(R.polygonOffset,R.polygonOffsetFactor,R.polygonOffsetUnits),R.alphaToCoverage===!0?Ee(s.SAMPLE_ALPHA_TO_COVERAGE):ye(s.SAMPLE_ALPHA_TO_COVERAGE)}function Te(R){T!==R&&(R?s.frontFace(s.CW):s.frontFace(s.CCW),T=R)}function Ze(R){R!==Hl?(Ee(s.CULL_FACE),R!==Y&&(R===ba?s.cullFace(s.BACK):R===Vl?s.cullFace(s.FRONT):s.cullFace(s.FRONT_AND_BACK))):ye(s.CULL_FACE),Y=R}function Fe(R){R!==ne&&($&&s.lineWidth(R),ne=R)}function Le(R,se,O){R?(Ee(s.POLYGON_OFFSET_FILL),(B!==se||V!==O)&&(s.polygonOffset(se,O),B=se,V=O)):ye(s.POLYGON_OFFSET_FILL)}function Ge(R){R?Ee(s.SCISSOR_TEST):ye(s.SCISSOR_TEST)}function ct(R){R===void 0&&(R=s.TEXTURE0+G-1),Z!==R&&(s.activeTexture(R),Z=R)}function ut(R,se,O){O===void 0&&(Z===null?O=s.TEXTURE0+G-1:O=Z);let te=K[O];te===void 0&&(te={type:void 0,texture:void 0},K[O]=te),(te.type!==R||te.texture!==se)&&(Z!==O&&(s.activeTexture(O),Z=O),s.bindTexture(R,se||_e[R]),te.type=R,te.texture=se)}function b(){let R=K[Z];R!==void 0&&R.type!==void 0&&(s.bindTexture(R.type,null),R.type=void 0,R.texture=void 0)}function y(){try{s.compressedTexImage2D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function N(){try{s.compressedTexImage3D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function j(){try{s.texSubImage2D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function J(){try{s.texSubImage3D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function Q(){try{s.compressedTexSubImage2D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function de(){try{s.compressedTexSubImage3D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function ee(){try{s.texStorage2D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function F(){try{s.texStorage3D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function me(){try{s.texImage2D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function fe(){try{s.texImage3D.apply(s,arguments)}catch(R){console.error(\"THREE.WebGLState:\",R)}}function pe(R){oe.equals(R)===!1&&(s.scissor(R.x,R.y,R.z,R.w),oe.copy(R))}function he(R){ae.equals(R)===!1&&(s.viewport(R.x,R.y,R.z,R.w),ae.copy(R))}function ue(R,se){let O=u.get(se);O===void 0&&(O=new WeakMap,u.set(se,O));let te=O.get(R);te===void 0&&(te=s.getUniformBlockIndex(se,R.name),O.set(R,te))}function De(R,se){let te=u.get(se).get(R);h.get(se)!==te&&(s.uniformBlockBinding(se,te,R.__bindingPointIndex),h.set(se,te))}function Xe(){s.disable(s.BLEND),s.disable(s.CULL_FACE),s.disable(s.DEPTH_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SCISSOR_TEST),s.disable(s.STENCIL_TEST),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),s.blendEquation(s.FUNC_ADD),s.blendFunc(s.ONE,s.ZERO),s.blendFuncSeparate(s.ONE,s.ZERO,s.ONE,s.ZERO),s.colorMask(!0,!0,!0,!0),s.clearColor(0,0,0,0),s.depthMask(!0),s.depthFunc(s.LESS),s.clearDepth(1),s.stencilMask(4294967295),s.stencilFunc(s.ALWAYS,0,4294967295),s.stencilOp(s.KEEP,s.KEEP,s.KEEP),s.clearStencil(0),s.cullFace(s.BACK),s.frontFace(s.CCW),s.polygonOffset(0,0),s.activeTexture(s.TEXTURE0),s.bindFramebuffer(s.FRAMEBUFFER,null),n===!0&&(s.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),s.bindFramebuffer(s.READ_FRAMEBUFFER,null)),s.useProgram(null),s.lineWidth(1),s.scissor(0,0,s.canvas.width,s.canvas.height),s.viewport(0,0,s.canvas.width,s.canvas.height),d={},Z=null,K={},p={},g=new WeakMap,_=[],m=null,f=!1,S=null,x=null,A=null,E=null,C=null,w=null,k=null,v=!1,T=null,Y=null,ne=null,B=null,V=null,oe.set(0,0,s.canvas.width,s.canvas.height),ae.set(0,0,s.canvas.width,s.canvas.height),a.reset(),c.reset(),l.reset()}return{buffers:{color:a,depth:c,stencil:l},enable:Ee,disable:ye,bindFramebuffer:He,drawBuffers:St,useProgram:Pe,setBlending:ve,setMaterial:we,setFlipSided:Te,setCullFace:Ze,setLineWidth:Fe,setPolygonOffset:Le,setScissorTest:Ge,activeTexture:ct,bindTexture:ut,unbindTexture:b,compressedTexImage2D:y,compressedTexImage3D:N,texImage2D:me,texImage3D:fe,updateUBOMapping:ue,uniformBlockBinding:De,texStorage2D:ee,texStorage3D:F,texSubImage2D:j,texSubImage3D:J,compressedTexSubImage2D:Q,compressedTexSubImage3D:de,scissor:pe,viewport:he,reset:Xe}}function Bm(s,e,t,n,i,r,o){let a=i.isWebGL2,c=i.maxTextures,l=i.maxCubemapSize,h=i.maxTextureSize,u=i.maxSamples,d=e.has(\"WEBGL_multisampled_render_to_texture\")?e.get(\"WEBGL_multisampled_render_to_texture\"):null,p=typeof navigator>\"u\"?!1:/OculusBrowser/g.test(navigator.userAgent),g=new WeakMap,_,m=new WeakMap,f=!1;try{f=typeof OffscreenCanvas<\"u\"&&new OffscreenCanvas(1,1).getContext(\"2d\")!==null}catch{}function S(b,y){return f?new OffscreenCanvas(b,y):$i(\"canvas\")}function x(b,y,N,j){let J=1;if((b.width>j||b.height>j)&&(J=j/Math.max(b.width,b.height)),J<1||y===!0)if(typeof HTMLImageElement<\"u\"&&b instanceof HTMLImageElement||typeof HTMLCanvasElement<\"u\"&&b instanceof HTMLCanvasElement||typeof ImageBitmap<\"u\"&&b instanceof ImageBitmap){let Q=y?zs:Math.floor,de=Q(J*b.width),ee=Q(J*b.height);_===void 0&&(_=S(de,ee));let F=N?S(de,ee):_;return F.width=de,F.height=ee,F.getContext(\"2d\").drawImage(b,0,0,de,ee),console.warn(\"THREE.WebGLRenderer: Texture has been resized from (\"+b.width+\"x\"+b.height+\") to (\"+de+\"x\"+ee+\").\"),F}else return\"data\"in b&&console.warn(\"THREE.WebGLRenderer: Image in DataTexture is too big (\"+b.width+\"x\"+b.height+\").\"),b;return b}function A(b){return eo(b.width)&&eo(b.height)}function E(b){return a?!1:b.wrapS!==Rt||b.wrapT!==Rt||b.minFilter!==st&&b.minFilter!==vt}function C(b,y){return b.generateMipmaps&&y&&b.minFilter!==st&&b.minFilter!==vt}function w(b){s.generateMipmap(b)}function k(b,y,N,j,J=!1){if(a===!1)return y;if(b!==null){if(s[b]!==void 0)return s[b];console.warn(\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\"+b+\"'\")}let Q=y;return y===s.RED&&(N===s.FLOAT&&(Q=s.R32F),N===s.HALF_FLOAT&&(Q=s.R16F),N===s.UNSIGNED_BYTE&&(Q=s.R8)),y===s.RED_INTEGER&&(N===s.UNSIGNED_BYTE&&(Q=s.R8UI),N===s.UNSIGNED_SHORT&&(Q=s.R16UI),N===s.UNSIGNED_INT&&(Q=s.R32UI),N===s.BYTE&&(Q=s.R8I),N===s.SHORT&&(Q=s.R16I),N===s.INT&&(Q=s.R32I)),y===s.RG&&(N===s.FLOAT&&(Q=s.RG32F),N===s.HALF_FLOAT&&(Q=s.RG16F),N===s.UNSIGNED_BYTE&&(Q=s.RG8)),y===s.RGBA&&(N===s.FLOAT&&(Q=s.RGBA32F),N===s.HALF_FLOAT&&(Q=s.RGBA16F),N===s.UNSIGNED_BYTE&&(Q=j===xe&&J===!1?s.SRGB8_ALPHA8:s.RGBA8),N===s.UNSIGNED_SHORT_4_4_4_4&&(Q=s.RGBA4),N===s.UNSIGNED_SHORT_5_5_5_1&&(Q=s.RGB5_A1)),(Q===s.R16F||Q===s.R32F||Q===s.RG16F||Q===s.RG32F||Q===s.RGBA16F||Q===s.RGBA32F)&&e.get(\"EXT_color_buffer_float\"),Q}function v(b,y,N){return C(b,N)===!0||b.isFramebufferTexture&&b.minFilter!==st&&b.minFilter!==vt?Math.log2(Math.max(y.width,y.height))+1:b.mipmaps!==void 0&&b.mipmaps.length>0?b.mipmaps.length:b.isCompressedTexture&&Array.isArray(b.image)?y.mipmaps.length:1}function T(b){return b===st||b===Fs||b===Wi?s.NEAREST:s.LINEAR}function Y(b){let y=b.target;y.removeEventListener(\"dispose\",Y),B(y),y.isVideoTexture&&g.delete(y)}function ne(b){let y=b.target;y.removeEventListener(\"dispose\",ne),G(y)}function B(b){let y=n.get(b);if(y.__webglInit===void 0)return;let N=b.source,j=m.get(N);if(j){let J=j[y.__cacheKey];J.usedTimes--,J.usedTimes===0&&V(b),Object.keys(j).length===0&&m.delete(N)}n.remove(b)}function V(b){let y=n.get(b);s.deleteTexture(y.__webglTexture);let N=b.source,j=m.get(N);delete j[y.__cacheKey],o.memory.textures--}function G(b){let y=b.texture,N=n.get(b),j=n.get(y);if(j.__webglTexture!==void 0&&(s.deleteTexture(j.__webglTexture),o.memory.textures--),b.depthTexture&&b.depthTexture.dispose(),b.isWebGLCubeRenderTarget)for(let J=0;J<6;J++){if(Array.isArray(N.__webglFramebuffer[J]))for(let Q=0;Q<N.__webglFramebuffer[J].length;Q++)s.deleteFramebuffer(N.__webglFramebuffer[J][Q]);else s.deleteFramebuffer(N.__webglFramebuffer[J]);N.__webglDepthbuffer&&s.deleteRenderbuffer(N.__webglDepthbuffer[J])}else{if(Array.isArray(N.__webglFramebuffer))for(let J=0;J<N.__webglFramebuffer.length;J++)s.deleteFramebuffer(N.__webglFramebuffer[J]);else s.deleteFramebuffer(N.__webglFramebuffer);if(N.__webglDepthbuffer&&s.deleteRenderbuffer(N.__webglDepthbuffer),N.__webglMultisampledFramebuffer&&s.deleteFramebuffer(N.__webglMultisampledFramebuffer),N.__webglColorRenderbuffer)for(let J=0;J<N.__webglColorRenderbuffer.length;J++)N.__webglColorRenderbuffer[J]&&s.deleteRenderbuffer(N.__webglColorRenderbuffer[J]);N.__webglDepthRenderbuffer&&s.deleteRenderbuffer(N.__webglDepthRenderbuffer)}if(b.isWebGLMultipleRenderTargets)for(let J=0,Q=y.length;J<Q;J++){let de=n.get(y[J]);de.__webglTexture&&(s.deleteTexture(de.__webglTexture),o.memory.textures--),n.remove(y[J])}n.remove(y),n.remove(b)}let $=0;function W(){$=0}function q(){let b=$;return b>=c&&console.warn(\"THREE.WebGLTextures: Trying to use \"+b+\" texture units while this GPU supports only \"+c),$+=1,b}function Z(b){let y=[];return y.push(b.wrapS),y.push(b.wrapT),y.push(b.wrapR||0),y.push(b.magFilter),y.push(b.minFilter),y.push(b.anisotropy),y.push(b.internalFormat),y.push(b.format),y.push(b.type),y.push(b.generateMipmaps),y.push(b.premultiplyAlpha),y.push(b.flipY),y.push(b.unpackAlignment),y.push(b.colorSpace),y.join()}function K(b,y){let N=n.get(b);if(b.isVideoTexture&&ct(b),b.isRenderTargetTexture===!1&&b.version>0&&N.__version!==b.version){let j=b.image;if(j===null)console.warn(\"THREE.WebGLRenderer: Texture marked for update but no image data found.\");else if(j.complete===!1)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\");else{He(N,b,y);return}}t.bindTexture(s.TEXTURE_2D,N.__webglTexture,s.TEXTURE0+y)}function D(b,y){let N=n.get(b);if(b.version>0&&N.__version!==b.version){He(N,b,y);return}t.bindTexture(s.TEXTURE_2D_ARRAY,N.__webglTexture,s.TEXTURE0+y)}function X(b,y){let N=n.get(b);if(b.version>0&&N.__version!==b.version){He(N,b,y);return}t.bindTexture(s.TEXTURE_3D,N.__webglTexture,s.TEXTURE0+y)}function oe(b,y){let N=n.get(b);if(b.version>0&&N.__version!==b.version){St(N,b,y);return}t.bindTexture(s.TEXTURE_CUBE_MAP,N.__webglTexture,s.TEXTURE0+y)}let ae={[Zn]:s.REPEAT,[Rt]:s.CLAMP_TO_EDGE,[Ki]:s.MIRRORED_REPEAT},ce={[st]:s.NEAREST,[Fs]:s.NEAREST_MIPMAP_NEAREST,[Wi]:s.NEAREST_MIPMAP_LINEAR,[vt]:s.LINEAR,[Do]:s.LINEAR_MIPMAP_NEAREST,[Rn]:s.LINEAR_MIPMAP_LINEAR},_e={[Ph]:s.NEVER,[Fh]:s.ALWAYS,[Lh]:s.LESS,[Uh]:s.LEQUAL,[Ih]:s.EQUAL,[Oh]:s.GEQUAL,[Dh]:s.GREATER,[Nh]:s.NOTEQUAL};function Ee(b,y,N){if(N?(s.texParameteri(b,s.TEXTURE_WRAP_S,ae[y.wrapS]),s.texParameteri(b,s.TEXTURE_WRAP_T,ae[y.wrapT]),(b===s.TEXTURE_3D||b===s.TEXTURE_2D_ARRAY)&&s.texParameteri(b,s.TEXTURE_WRAP_R,ae[y.wrapR]),s.texParameteri(b,s.TEXTURE_MAG_FILTER,ce[y.magFilter]),s.texParameteri(b,s.TEXTURE_MIN_FILTER,ce[y.minFilter])):(s.texParameteri(b,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(b,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),(b===s.TEXTURE_3D||b===s.TEXTURE_2D_ARRAY)&&s.texParameteri(b,s.TEXTURE_WRAP_R,s.CLAMP_TO_EDGE),(y.wrapS!==Rt||y.wrapT!==Rt)&&console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\"),s.texParameteri(b,s.TEXTURE_MAG_FILTER,T(y.magFilter)),s.texParameteri(b,s.TEXTURE_MIN_FILTER,T(y.minFilter)),y.minFilter!==st&&y.minFilter!==vt&&console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\")),y.compareFunction&&(s.texParameteri(b,s.TEXTURE_COMPARE_MODE,s.COMPARE_REF_TO_TEXTURE),s.texParameteri(b,s.TEXTURE_COMPARE_FUNC,_e[y.compareFunction])),e.has(\"EXT_texture_filter_anisotropic\")===!0){let j=e.get(\"EXT_texture_filter_anisotropic\");if(y.magFilter===st||y.minFilter!==Wi&&y.minFilter!==Rn||y.type===dn&&e.has(\"OES_texture_float_linear\")===!1||a===!1&&y.type===Ji&&e.has(\"OES_texture_half_float_linear\")===!1)return;(y.anisotropy>1||n.get(y).__currentAnisotropy)&&(s.texParameterf(b,j.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(y.anisotropy,i.getMaxAnisotropy())),n.get(y).__currentAnisotropy=y.anisotropy)}}function ye(b,y){let N=!1;b.__webglInit===void 0&&(b.__webglInit=!0,y.addEventListener(\"dispose\",Y));let j=y.source,J=m.get(j);J===void 0&&(J={},m.set(j,J));let Q=Z(y);if(Q!==b.__cacheKey){J[Q]===void 0&&(J[Q]={texture:s.createTexture(),usedTimes:0},o.memory.textures++,N=!0),J[Q].usedTimes++;let de=J[b.__cacheKey];de!==void 0&&(J[b.__cacheKey].usedTimes--,de.usedTimes===0&&V(y)),b.__cacheKey=Q,b.__webglTexture=J[Q].texture}return N}function He(b,y,N){let j=s.TEXTURE_2D;(y.isDataArrayTexture||y.isCompressedArrayTexture)&&(j=s.TEXTURE_2D_ARRAY),y.isData3DTexture&&(j=s.TEXTURE_3D);let J=ye(b,y),Q=y.source;t.bindTexture(j,b.__webglTexture,s.TEXTURE0+N);let de=n.get(Q);if(Q.version!==de.__version||J===!0){t.activeTexture(s.TEXTURE0+N),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,y.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,y.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.NONE);let ee=E(y)&&A(y.image)===!1,F=x(y.image,ee,!1,h);F=ut(y,F);let me=A(F)||a,fe=r.convert(y.format,y.colorSpace),pe=r.convert(y.type),he=k(y.internalFormat,fe,pe,y.colorSpace);Ee(j,y,me);let ue,De=y.mipmaps,Xe=a&&y.isVideoTexture!==!0,R=de.__version===void 0||J===!0,se=v(y,F,me);if(y.isDepthTexture)he=s.DEPTH_COMPONENT,a?y.type===dn?he=s.DEPTH_COMPONENT32F:y.type===An?he=s.DEPTH_COMPONENT24:y.type===Wn?he=s.DEPTH24_STENCIL8:he=s.DEPTH_COMPONENT16:y.type===dn&&console.error(\"WebGLRenderer: Floating point depth texture requires WebGL2.\"),y.format===Xn&&he===s.DEPTH_COMPONENT&&y.type!==No&&y.type!==An&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),y.type=An,pe=r.convert(y.type)),y.format===bi&&he===s.DEPTH_COMPONENT&&(he=s.DEPTH_STENCIL,y.type!==Wn&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),y.type=Wn,pe=r.convert(y.type))),R&&(Xe?t.texStorage2D(s.TEXTURE_2D,1,he,F.width,F.height):t.texImage2D(s.TEXTURE_2D,0,he,F.width,F.height,0,fe,pe,null));else if(y.isDataTexture)if(De.length>0&&me){Xe&&R&&t.texStorage2D(s.TEXTURE_2D,se,he,De[0].width,De[0].height);for(let O=0,te=De.length;O<te;O++)ue=De[O],Xe?t.texSubImage2D(s.TEXTURE_2D,O,0,0,ue.width,ue.height,fe,pe,ue.data):t.texImage2D(s.TEXTURE_2D,O,he,ue.width,ue.height,0,fe,pe,ue.data);y.generateMipmaps=!1}else Xe?(R&&t.texStorage2D(s.TEXTURE_2D,se,he,F.width,F.height),t.texSubImage2D(s.TEXTURE_2D,0,0,0,F.width,F.height,fe,pe,F.data)):t.texImage2D(s.TEXTURE_2D,0,he,F.width,F.height,0,fe,pe,F.data);else if(y.isCompressedTexture)if(y.isCompressedArrayTexture){Xe&&R&&t.texStorage3D(s.TEXTURE_2D_ARRAY,se,he,De[0].width,De[0].height,F.depth);for(let O=0,te=De.length;O<te;O++)ue=De[O],y.format!==Ut?fe!==null?Xe?t.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,O,0,0,0,ue.width,ue.height,F.depth,fe,ue.data,0,0):t.compressedTexImage3D(s.TEXTURE_2D_ARRAY,O,he,ue.width,ue.height,F.depth,0,ue.data,0,0):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):Xe?t.texSubImage3D(s.TEXTURE_2D_ARRAY,O,0,0,0,ue.width,ue.height,F.depth,fe,pe,ue.data):t.texImage3D(s.TEXTURE_2D_ARRAY,O,he,ue.width,ue.height,F.depth,0,fe,pe,ue.data)}else{Xe&&R&&t.texStorage2D(s.TEXTURE_2D,se,he,De[0].width,De[0].height);for(let O=0,te=De.length;O<te;O++)ue=De[O],y.format!==Ut?fe!==null?Xe?t.compressedTexSubImage2D(s.TEXTURE_2D,O,0,0,ue.width,ue.height,fe,ue.data):t.compressedTexImage2D(s.TEXTURE_2D,O,he,ue.width,ue.height,0,ue.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):Xe?t.texSubImage2D(s.TEXTURE_2D,O,0,0,ue.width,ue.height,fe,pe,ue.data):t.texImage2D(s.TEXTURE_2D,O,he,ue.width,ue.height,0,fe,pe,ue.data)}else if(y.isDataArrayTexture)Xe?(R&&t.texStorage3D(s.TEXTURE_2D_ARRAY,se,he,F.width,F.height,F.depth),t.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,0,F.width,F.height,F.depth,fe,pe,F.data)):t.texImage3D(s.TEXTURE_2D_ARRAY,0,he,F.width,F.height,F.depth,0,fe,pe,F.data);else if(y.isData3DTexture)Xe?(R&&t.texStorage3D(s.TEXTURE_3D,se,he,F.width,F.height,F.depth),t.texSubImage3D(s.TEXTURE_3D,0,0,0,0,F.width,F.height,F.depth,fe,pe,F.data)):t.texImage3D(s.TEXTURE_3D,0,he,F.width,F.height,F.depth,0,fe,pe,F.data);else if(y.isFramebufferTexture){if(R)if(Xe)t.texStorage2D(s.TEXTURE_2D,se,he,F.width,F.height);else{let O=F.width,te=F.height;for(let re=0;re<se;re++)t.texImage2D(s.TEXTURE_2D,re,he,O,te,0,fe,pe,null),O>>=1,te>>=1}}else if(De.length>0&&me){Xe&&R&&t.texStorage2D(s.TEXTURE_2D,se,he,De[0].width,De[0].height);for(let O=0,te=De.length;O<te;O++)ue=De[O],Xe?t.texSubImage2D(s.TEXTURE_2D,O,0,0,fe,pe,ue):t.texImage2D(s.TEXTURE_2D,O,he,fe,pe,ue);y.generateMipmaps=!1}else Xe?(R&&t.texStorage2D(s.TEXTURE_2D,se,he,F.width,F.height),t.texSubImage2D(s.TEXTURE_2D,0,0,0,fe,pe,F)):t.texImage2D(s.TEXTURE_2D,0,he,fe,pe,F);C(y,me)&&w(j),de.__version=Q.version,y.onUpdate&&y.onUpdate(y)}b.__version=y.version}function St(b,y,N){if(y.image.length!==6)return;let j=ye(b,y),J=y.source;t.bindTexture(s.TEXTURE_CUBE_MAP,b.__webglTexture,s.TEXTURE0+N);let Q=n.get(J);if(J.version!==Q.__version||j===!0){t.activeTexture(s.TEXTURE0+N),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,y.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,y.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.NONE);let de=y.isCompressedTexture||y.image[0].isCompressedTexture,ee=y.image[0]&&y.image[0].isDataTexture,F=[];for(let O=0;O<6;O++)!de&&!ee?F[O]=x(y.image[O],!1,!0,l):F[O]=ee?y.image[O].image:y.image[O],F[O]=ut(y,F[O]);let me=F[0],fe=A(me)||a,pe=r.convert(y.format,y.colorSpace),he=r.convert(y.type),ue=k(y.internalFormat,pe,he,y.colorSpace),De=a&&y.isVideoTexture!==!0,Xe=Q.__version===void 0||j===!0,R=v(y,me,fe);Ee(s.TEXTURE_CUBE_MAP,y,fe);let se;if(de){De&&Xe&&t.texStorage2D(s.TEXTURE_CUBE_MAP,R,ue,me.width,me.height);for(let O=0;O<6;O++){se=F[O].mipmaps;for(let te=0;te<se.length;te++){let re=se[te];y.format!==Ut?pe!==null?De?t.compressedTexSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te,0,0,re.width,re.height,pe,re.data):t.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te,ue,re.width,re.height,0,re.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):De?t.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te,0,0,re.width,re.height,pe,he,re.data):t.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te,ue,re.width,re.height,0,pe,he,re.data)}}}else{se=y.mipmaps,De&&Xe&&(se.length>0&&R++,t.texStorage2D(s.TEXTURE_CUBE_MAP,R,ue,F[0].width,F[0].height));for(let O=0;O<6;O++)if(ee){De?t.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,0,0,0,F[O].width,F[O].height,pe,he,F[O].data):t.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,0,ue,F[O].width,F[O].height,0,pe,he,F[O].data);for(let te=0;te<se.length;te++){let ke=se[te].image[O].image;De?t.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te+1,0,0,ke.width,ke.height,pe,he,ke.data):t.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te+1,ue,ke.width,ke.height,0,pe,he,ke.data)}}else{De?t.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,0,0,0,pe,he,F[O]):t.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,0,ue,pe,he,F[O]);for(let te=0;te<se.length;te++){let re=se[te];De?t.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te+1,0,0,pe,he,re.image[O]):t.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+O,te+1,ue,pe,he,re.image[O])}}}C(y,fe)&&w(s.TEXTURE_CUBE_MAP),Q.__version=J.version,y.onUpdate&&y.onUpdate(y)}b.__version=y.version}function Pe(b,y,N,j,J,Q){let de=r.convert(N.format,N.colorSpace),ee=r.convert(N.type),F=k(N.internalFormat,de,ee,N.colorSpace);if(!n.get(y).__hasExternalTextures){let fe=Math.max(1,y.width>>Q),pe=Math.max(1,y.height>>Q);J===s.TEXTURE_3D||J===s.TEXTURE_2D_ARRAY?t.texImage3D(J,Q,F,fe,pe,y.depth,0,de,ee,null):t.texImage2D(J,Q,F,fe,pe,0,de,ee,null)}t.bindFramebuffer(s.FRAMEBUFFER,b),Ge(y)?d.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,j,J,n.get(N).__webglTexture,0,Le(y)):(J===s.TEXTURE_2D||J>=s.TEXTURE_CUBE_MAP_POSITIVE_X&&J<=s.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&s.framebufferTexture2D(s.FRAMEBUFFER,j,J,n.get(N).__webglTexture,Q),t.bindFramebuffer(s.FRAMEBUFFER,null)}function U(b,y,N){if(s.bindRenderbuffer(s.RENDERBUFFER,b),y.depthBuffer&&!y.stencilBuffer){let j=s.DEPTH_COMPONENT16;if(N||Ge(y)){let J=y.depthTexture;J&&J.isDepthTexture&&(J.type===dn?j=s.DEPTH_COMPONENT32F:J.type===An&&(j=s.DEPTH_COMPONENT24));let Q=Le(y);Ge(y)?d.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,Q,j,y.width,y.height):s.renderbufferStorageMultisample(s.RENDERBUFFER,Q,j,y.width,y.height)}else s.renderbufferStorage(s.RENDERBUFFER,j,y.width,y.height);s.framebufferRenderbuffer(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.RENDERBUFFER,b)}else if(y.depthBuffer&&y.stencilBuffer){let j=Le(y);N&&Ge(y)===!1?s.renderbufferStorageMultisample(s.RENDERBUFFER,j,s.DEPTH24_STENCIL8,y.width,y.height):Ge(y)?d.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,j,s.DEPTH24_STENCIL8,y.width,y.height):s.renderbufferStorage(s.RENDERBUFFER,s.DEPTH_STENCIL,y.width,y.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.RENDERBUFFER,b)}else{let j=y.isWebGLMultipleRenderTargets===!0?y.texture:[y.texture];for(let J=0;J<j.length;J++){let Q=j[J],de=r.convert(Q.format,Q.colorSpace),ee=r.convert(Q.type),F=k(Q.internalFormat,de,ee,Q.colorSpace),me=Le(y);N&&Ge(y)===!1?s.renderbufferStorageMultisample(s.RENDERBUFFER,me,F,y.width,y.height):Ge(y)?d.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,me,F,y.width,y.height):s.renderbufferStorage(s.RENDERBUFFER,F,y.width,y.height)}}s.bindRenderbuffer(s.RENDERBUFFER,null)}function ht(b,y){if(y&&y.isWebGLCubeRenderTarget)throw new Error(\"Depth Texture with cube render targets is not supported\");if(t.bindFramebuffer(s.FRAMEBUFFER,b),!(y.depthTexture&&y.depthTexture.isDepthTexture))throw new Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");(!n.get(y.depthTexture).__webglTexture||y.depthTexture.image.width!==y.width||y.depthTexture.image.height!==y.height)&&(y.depthTexture.image.width=y.width,y.depthTexture.image.height=y.height,y.depthTexture.needsUpdate=!0),K(y.depthTexture,0);let j=n.get(y.depthTexture).__webglTexture,J=Le(y);if(y.depthTexture.format===Xn)Ge(y)?d.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,j,0,J):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,j,0);else if(y.depthTexture.format===bi)Ge(y)?d.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,j,0,J):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,j,0);else throw new Error(\"Unknown depthTexture format\")}function ve(b){let y=n.get(b),N=b.isWebGLCubeRenderTarget===!0;if(b.depthTexture&&!y.__autoAllocateDepthBuffer){if(N)throw new Error(\"target.depthTexture not supported in Cube render targets\");ht(y.__webglFramebuffer,b)}else if(N){y.__webglDepthbuffer=[];for(let j=0;j<6;j++)t.bindFramebuffer(s.FRAMEBUFFER,y.__webglFramebuffer[j]),y.__webglDepthbuffer[j]=s.createRenderbuffer(),U(y.__webglDepthbuffer[j],b,!1)}else t.bindFramebuffer(s.FRAMEBUFFER,y.__webglFramebuffer),y.__webglDepthbuffer=s.createRenderbuffer(),U(y.__webglDepthbuffer,b,!1);t.bindFramebuffer(s.FRAMEBUFFER,null)}function we(b,y,N){let j=n.get(b);y!==void 0&&Pe(j.__webglFramebuffer,b,b.texture,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,0),N!==void 0&&ve(b)}function Te(b){let y=b.texture,N=n.get(b),j=n.get(y);b.addEventListener(\"dispose\",ne),b.isWebGLMultipleRenderTargets!==!0&&(j.__webglTexture===void 0&&(j.__webglTexture=s.createTexture()),j.__version=y.version,o.memory.textures++);let J=b.isWebGLCubeRenderTarget===!0,Q=b.isWebGLMultipleRenderTargets===!0,de=A(b)||a;if(J){N.__webglFramebuffer=[];for(let ee=0;ee<6;ee++)if(a&&y.mipmaps&&y.mipmaps.length>0){N.__webglFramebuffer[ee]=[];for(let F=0;F<y.mipmaps.length;F++)N.__webglFramebuffer[ee][F]=s.createFramebuffer()}else N.__webglFramebuffer[ee]=s.createFramebuffer()}else{if(a&&y.mipmaps&&y.mipmaps.length>0){N.__webglFramebuffer=[];for(let ee=0;ee<y.mipmaps.length;ee++)N.__webglFramebuffer[ee]=s.createFramebuffer()}else N.__webglFramebuffer=s.createFramebuffer();if(Q)if(i.drawBuffers){let ee=b.texture;for(let F=0,me=ee.length;F<me;F++){let fe=n.get(ee[F]);fe.__webglTexture===void 0&&(fe.__webglTexture=s.createTexture(),o.memory.textures++)}}else console.warn(\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\");if(a&&b.samples>0&&Ge(b)===!1){let ee=Q?y:[y];N.__webglMultisampledFramebuffer=s.createFramebuffer(),N.__webglColorRenderbuffer=[],t.bindFramebuffer(s.FRAMEBUFFER,N.__webglMultisampledFramebuffer);for(let F=0;F<ee.length;F++){let me=ee[F];N.__webglColorRenderbuffer[F]=s.createRenderbuffer(),s.bindRenderbuffer(s.RENDERBUFFER,N.__webglColorRenderbuffer[F]);let fe=r.convert(me.format,me.colorSpace),pe=r.convert(me.type),he=k(me.internalFormat,fe,pe,me.colorSpace,b.isXRRenderTarget===!0),ue=Le(b);s.renderbufferStorageMultisample(s.RENDERBUFFER,ue,he,b.width,b.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+F,s.RENDERBUFFER,N.__webglColorRenderbuffer[F])}s.bindRenderbuffer(s.RENDERBUFFER,null),b.depthBuffer&&(N.__webglDepthRenderbuffer=s.createRenderbuffer(),U(N.__webglDepthRenderbuffer,b,!0)),t.bindFramebuffer(s.FRAMEBUFFER,null)}}if(J){t.bindTexture(s.TEXTURE_CUBE_MAP,j.__webglTexture),Ee(s.TEXTURE_CUBE_MAP,y,de);for(let ee=0;ee<6;ee++)if(a&&y.mipmaps&&y.mipmaps.length>0)for(let F=0;F<y.mipmaps.length;F++)Pe(N.__webglFramebuffer[ee][F],b,y,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+ee,F);else Pe(N.__webglFramebuffer[ee],b,y,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+ee,0);C(y,de)&&w(s.TEXTURE_CUBE_MAP),t.unbindTexture()}else if(Q){let ee=b.texture;for(let F=0,me=ee.length;F<me;F++){let fe=ee[F],pe=n.get(fe);t.bindTexture(s.TEXTURE_2D,pe.__webglTexture),Ee(s.TEXTURE_2D,fe,de),Pe(N.__webglFramebuffer,b,fe,s.COLOR_ATTACHMENT0+F,s.TEXTURE_2D,0),C(fe,de)&&w(s.TEXTURE_2D)}t.unbindTexture()}else{let ee=s.TEXTURE_2D;if((b.isWebGL3DRenderTarget||b.isWebGLArrayRenderTarget)&&(a?ee=b.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY:console.error(\"THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.\")),t.bindTexture(ee,j.__webglTexture),Ee(ee,y,de),a&&y.mipmaps&&y.mipmaps.length>0)for(let F=0;F<y.mipmaps.length;F++)Pe(N.__webglFramebuffer[F],b,y,s.COLOR_ATTACHMENT0,ee,F);else Pe(N.__webglFramebuffer,b,y,s.COLOR_ATTACHMENT0,ee,0);C(y,de)&&w(ee),t.unbindTexture()}b.depthBuffer&&ve(b)}function Ze(b){let y=A(b)||a,N=b.isWebGLMultipleRenderTargets===!0?b.texture:[b.texture];for(let j=0,J=N.length;j<J;j++){let Q=N[j];if(C(Q,y)){let de=b.isWebGLCubeRenderTarget?s.TEXTURE_CUBE_MAP:s.TEXTURE_2D,ee=n.get(Q).__webglTexture;t.bindTexture(de,ee),w(de),t.unbindTexture()}}}function Fe(b){if(a&&b.samples>0&&Ge(b)===!1){let y=b.isWebGLMultipleRenderTargets?b.texture:[b.texture],N=b.width,j=b.height,J=s.COLOR_BUFFER_BIT,Q=[],de=b.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,ee=n.get(b),F=b.isWebGLMultipleRenderTargets===!0;if(F)for(let me=0;me<y.length;me++)t.bindFramebuffer(s.FRAMEBUFFER,ee.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+me,s.RENDERBUFFER,null),t.bindFramebuffer(s.FRAMEBUFFER,ee.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+me,s.TEXTURE_2D,null,0);t.bindFramebuffer(s.READ_FRAMEBUFFER,ee.__webglMultisampledFramebuffer),t.bindFramebuffer(s.DRAW_FRAMEBUFFER,ee.__webglFramebuffer);for(let me=0;me<y.length;me++){Q.push(s.COLOR_ATTACHMENT0+me),b.depthBuffer&&Q.push(de);let fe=ee.__ignoreDepthValues!==void 0?ee.__ignoreDepthValues:!1;if(fe===!1&&(b.depthBuffer&&(J|=s.DEPTH_BUFFER_BIT),b.stencilBuffer&&(J|=s.STENCIL_BUFFER_BIT)),F&&s.framebufferRenderbuffer(s.READ_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.RENDERBUFFER,ee.__webglColorRenderbuffer[me]),fe===!0&&(s.invalidateFramebuffer(s.READ_FRAMEBUFFER,[de]),s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,[de])),F){let pe=n.get(y[me]).__webglTexture;s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,pe,0)}s.blitFramebuffer(0,0,N,j,0,0,N,j,J,s.NEAREST),p&&s.invalidateFramebuffer(s.READ_FRAMEBUFFER,Q)}if(t.bindFramebuffer(s.READ_FRAMEBUFFER,null),t.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),F)for(let me=0;me<y.length;me++){t.bindFramebuffer(s.FRAMEBUFFER,ee.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+me,s.RENDERBUFFER,ee.__webglColorRenderbuffer[me]);let fe=n.get(y[me]).__webglTexture;t.bindFramebuffer(s.FRAMEBUFFER,ee.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+me,s.TEXTURE_2D,fe,0)}t.bindFramebuffer(s.DRAW_FRAMEBUFFER,ee.__webglMultisampledFramebuffer)}}function Le(b){return Math.min(u,b.samples)}function Ge(b){let y=n.get(b);return a&&b.samples>0&&e.has(\"WEBGL_multisampled_render_to_texture\")===!0&&y.__useRenderToTexture!==!1}function ct(b){let y=o.render.frame;g.get(b)!==y&&(g.set(b,y),b.update())}function ut(b,y){let N=b.colorSpace,j=b.format,J=b.type;return b.isCompressedTexture===!0||b.format===Qr||N!==Nt&&N!==Yn&&(N===xe?a===!1?e.has(\"EXT_sRGB\")===!0&&j===Ut?(b.format=Qr,b.minFilter=vt,b.generateMipmaps=!1):y=ks.sRGBToLinear(y):(j!==Ut||J!==wn)&&console.warn(\"THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.\"):console.error(\"THREE.WebGLTextures: Unsupported texture color space:\",N)),y}this.allocateTextureUnit=q,this.resetTextureUnits=W,this.setTexture2D=K,this.setTexture2DArray=D,this.setTexture3D=X,this.setTextureCube=oe,this.rebindTextures=we,this.setupRenderTarget=Te,this.updateRenderTargetMipmap=Ze,this.updateMultisampleRenderTarget=Fe,this.setupDepthRenderbuffer=ve,this.setupFrameBufferTexture=Pe,this.useMultisampledRTT=Ge}function zm(s,e,t){let n=t.isWebGL2;function i(r,o=Yn){let a;if(r===wn)return s.UNSIGNED_BYTE;if(r===hl)return s.UNSIGNED_SHORT_4_4_4_4;if(r===ul)return s.UNSIGNED_SHORT_5_5_5_1;if(r===gh)return s.BYTE;if(r===_h)return s.SHORT;if(r===No)return s.UNSIGNED_SHORT;if(r===ll)return s.INT;if(r===An)return s.UNSIGNED_INT;if(r===dn)return s.FLOAT;if(r===Ji)return n?s.HALF_FLOAT:(a=e.get(\"OES_texture_half_float\"),a!==null?a.HALF_FLOAT_OES:null);if(r===xh)return s.ALPHA;if(r===Ut)return s.RGBA;if(r===yh)return s.LUMINANCE;if(r===vh)return s.LUMINANCE_ALPHA;if(r===Xn)return s.DEPTH_COMPONENT;if(r===bi)return s.DEPTH_STENCIL;if(r===Qr)return a=e.get(\"EXT_sRGB\"),a!==null?a.SRGB_ALPHA_EXT:null;if(r===Mh)return s.RED;if(r===dl)return s.RED_INTEGER;if(r===Sh)return s.RG;if(r===fl)return s.RG_INTEGER;if(r===pl)return s.RGBA_INTEGER;if(r===_r||r===xr||r===yr||r===vr)if(o===xe)if(a=e.get(\"WEBGL_compressed_texture_s3tc_srgb\"),a!==null){if(r===_r)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(r===xr)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(r===yr)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(r===vr)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get(\"WEBGL_compressed_texture_s3tc\"),a!==null){if(r===_r)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(r===xr)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(r===yr)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(r===vr)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(r===Ca||r===Pa||r===La||r===Ia)if(a=e.get(\"WEBGL_compressed_texture_pvrtc\"),a!==null){if(r===Ca)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(r===Pa)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(r===La)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(r===Ia)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(r===bh)return a=e.get(\"WEBGL_compressed_texture_etc1\"),a!==null?a.COMPRESSED_RGB_ETC1_WEBGL:null;if(r===Ua||r===Da)if(a=e.get(\"WEBGL_compressed_texture_etc\"),a!==null){if(r===Ua)return o===xe?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(r===Da)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(r===Na||r===Oa||r===Fa||r===Ba||r===za||r===ka||r===Ha||r===Va||r===Ga||r===Wa||r===Xa||r===qa||r===Ya||r===Za)if(a=e.get(\"WEBGL_compressed_texture_astc\"),a!==null){if(r===Na)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(r===Oa)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(r===Fa)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(r===Ba)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(r===za)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(r===ka)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(r===Ha)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(r===Va)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(r===Ga)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(r===Wa)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(r===Xa)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(r===qa)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(r===Ya)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(r===Za)return o===xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(r===Mr)if(a=e.get(\"EXT_texture_compression_bptc\"),a!==null){if(r===Mr)return o===xe?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT}else return null;if(r===Ah||r===Ka||r===Ja||r===$a)if(a=e.get(\"EXT_texture_compression_rgtc\"),a!==null){if(r===Mr)return a.COMPRESSED_RED_RGTC1_EXT;if(r===Ka)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(r===Ja)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(r===$a)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return r===Wn?n?s.UNSIGNED_INT_24_8:(a=e.get(\"WEBGL_depth_texture\"),a!==null?a.UNSIGNED_INT_24_8_WEBGL:null):s[r]!==void 0?s[r]:null}return{convert:i}}var mo=class extends lt{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}},$t=class extends Qe{constructor(){super(),this.isGroup=!0,this.type=\"Group\"}},km={type:\"move\"},Zi=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new $t,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new $t,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new P,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new P),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new $t,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new P,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new P),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let n of e.hand.values())this._getHandJoint(t,n)}return this.dispatchEvent({type:\"connected\",data:e}),this}disconnect(e){return this.dispatchEvent({type:\"disconnected\",data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,n){let i=null,r=null,o=null,a=this._targetRay,c=this._grip,l=this._hand;if(e&&t.session.visibilityState!==\"visible-blurred\"){if(l&&e.hand){o=!0;for(let _ of e.hand.values()){let m=t.getJointPose(_,n),f=this._getHandJoint(l,_);m!==null&&(f.matrix.fromArray(m.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale),f.matrixWorldNeedsUpdate=!0,f.jointRadius=m.radius),f.visible=m!==null}let h=l.joints[\"index-finger-tip\"],u=l.joints[\"thumb-tip\"],d=h.position.distanceTo(u.position),p=.02,g=.005;l.inputState.pinching&&d>p+g?(l.inputState.pinching=!1,this.dispatchEvent({type:\"pinchend\",handedness:e.handedness,target:this})):!l.inputState.pinching&&d<=p-g&&(l.inputState.pinching=!0,this.dispatchEvent({type:\"pinchstart\",handedness:e.handedness,target:this}))}else c!==null&&e.gripSpace&&(r=t.getPose(e.gripSpace,n),r!==null&&(c.matrix.fromArray(r.transform.matrix),c.matrix.decompose(c.position,c.rotation,c.scale),c.matrixWorldNeedsUpdate=!0,r.linearVelocity?(c.hasLinearVelocity=!0,c.linearVelocity.copy(r.linearVelocity)):c.hasLinearVelocity=!1,r.angularVelocity?(c.hasAngularVelocity=!0,c.angularVelocity.copy(r.angularVelocity)):c.hasAngularVelocity=!1));a!==null&&(i=t.getPose(e.targetRaySpace,n),i===null&&r!==null&&(i=r),i!==null&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(km)))}return a!==null&&(a.visible=i!==null),c!==null&&(c.visible=r!==null),l!==null&&(l.visible=o!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new $t;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},go=class extends mt{constructor(e,t,n,i,r,o,a,c,l,h){if(h=h!==void 0?h:Xn,h!==Xn&&h!==bi)throw new Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");n===void 0&&h===Xn&&(n=An),n===void 0&&h===bi&&(n=Wn),super(null,i,r,o,a,c,h,n,l),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=a!==void 0?a:st,this.minFilter=c!==void 0?c:st,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}},_o=class extends Cn{constructor(e,t){super();let n=this,i=null,r=1,o=null,a=\"local-floor\",c=1,l=null,h=null,u=null,d=null,p=null,g=null,_=t.getContextAttributes(),m=null,f=null,S=[],x=[],A=new lt;A.layers.enable(1),A.viewport=new We;let E=new lt;E.layers.enable(2),E.viewport=new We;let C=[A,E],w=new mo;w.layers.enable(1),w.layers.enable(2);let k=null,v=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(D){let X=S[D];return X===void 0&&(X=new Zi,S[D]=X),X.getTargetRaySpace()},this.getControllerGrip=function(D){let X=S[D];return X===void 0&&(X=new Zi,S[D]=X),X.getGripSpace()},this.getHand=function(D){let X=S[D];return X===void 0&&(X=new Zi,S[D]=X),X.getHandSpace()};function T(D){let X=x.indexOf(D.inputSource);if(X===-1)return;let oe=S[X];oe!==void 0&&(oe.update(D.inputSource,D.frame,l||o),oe.dispatchEvent({type:D.type,data:D.inputSource}))}function Y(){i.removeEventListener(\"select\",T),i.removeEventListener(\"selectstart\",T),i.removeEventListener(\"selectend\",T),i.removeEventListener(\"squeeze\",T),i.removeEventListener(\"squeezestart\",T),i.removeEventListener(\"squeezeend\",T),i.removeEventListener(\"end\",Y),i.removeEventListener(\"inputsourceschange\",ne);for(let D=0;D<S.length;D++){let X=x[D];X!==null&&(x[D]=null,S[D].disconnect(X))}k=null,v=null,e.setRenderTarget(m),p=null,d=null,u=null,i=null,f=null,K.stop(),n.isPresenting=!1,n.dispatchEvent({type:\"sessionend\"})}this.setFramebufferScaleFactor=function(D){r=D,n.isPresenting===!0&&console.warn(\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\")},this.setReferenceSpaceType=function(D){a=D,n.isPresenting===!0&&console.warn(\"THREE.WebXRManager: Cannot change reference space type while presenting.\")},this.getReferenceSpace=function(){return l||o},this.setReferenceSpace=function(D){l=D},this.getBaseLayer=function(){return d!==null?d:p},this.getBinding=function(){return u},this.getFrame=function(){return g},this.getSession=function(){return i},this.setSession=async function(D){if(i=D,i!==null){if(m=e.getRenderTarget(),i.addEventListener(\"select\",T),i.addEventListener(\"selectstart\",T),i.addEventListener(\"selectend\",T),i.addEventListener(\"squeeze\",T),i.addEventListener(\"squeezestart\",T),i.addEventListener(\"squeezeend\",T),i.addEventListener(\"end\",Y),i.addEventListener(\"inputsourceschange\",ne),_.xrCompatible!==!0&&await t.makeXRCompatible(),i.renderState.layers===void 0||e.capabilities.isWebGL2===!1){let X={antialias:i.renderState.layers===void 0?_.antialias:!0,alpha:!0,depth:_.depth,stencil:_.stencil,framebufferScaleFactor:r};p=new XRWebGLLayer(i,t,X),i.updateRenderState({baseLayer:p}),f=new pn(p.framebufferWidth,p.framebufferHeight,{format:Ut,type:wn,colorSpace:e.outputColorSpace,stencilBuffer:_.stencil})}else{let X=null,oe=null,ae=null;_.depth&&(ae=_.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,X=_.stencil?bi:Xn,oe=_.stencil?Wn:An);let ce={colorFormat:t.RGBA8,depthFormat:ae,scaleFactor:r};u=new XRWebGLBinding(i,t),d=u.createProjectionLayer(ce),i.updateRenderState({layers:[d]}),f=new pn(d.textureWidth,d.textureHeight,{format:Ut,type:wn,depthTexture:new go(d.textureWidth,d.textureHeight,oe,void 0,void 0,void 0,void 0,void 0,void 0,X),stencilBuffer:_.stencil,colorSpace:e.outputColorSpace,samples:_.antialias?4:0});let _e=e.properties.get(f);_e.__ignoreDepthValues=d.ignoreDepthValues}f.isXRRenderTarget=!0,this.setFoveation(c),l=null,o=await i.requestReferenceSpace(a),K.setContext(i),K.start(),n.isPresenting=!0,n.dispatchEvent({type:\"sessionstart\"})}},this.getEnvironmentBlendMode=function(){if(i!==null)return i.environmentBlendMode};function ne(D){for(let X=0;X<D.removed.length;X++){let oe=D.removed[X],ae=x.indexOf(oe);ae>=0&&(x[ae]=null,S[ae].disconnect(oe))}for(let X=0;X<D.added.length;X++){let oe=D.added[X],ae=x.indexOf(oe);if(ae===-1){for(let _e=0;_e<S.length;_e++)if(_e>=x.length){x.push(oe),ae=_e;break}else if(x[_e]===null){x[_e]=oe,ae=_e;break}if(ae===-1)break}let ce=S[ae];ce&&ce.connect(oe)}}let B=new P,V=new P;function G(D,X,oe){B.setFromMatrixPosition(X.matrixWorld),V.setFromMatrixPosition(oe.matrixWorld);let ae=B.distanceTo(V),ce=X.projectionMatrix.elements,_e=oe.projectionMatrix.elements,Ee=ce[14]/(ce[10]-1),ye=ce[14]/(ce[10]+1),He=(ce[9]+1)/ce[5],St=(ce[9]-1)/ce[5],Pe=(ce[8]-1)/ce[0],U=(_e[8]+1)/_e[0],ht=Ee*Pe,ve=Ee*U,we=ae/(-Pe+U),Te=we*-Pe;X.matrixWorld.decompose(D.position,D.quaternion,D.scale),D.translateX(Te),D.translateZ(we),D.matrixWorld.compose(D.position,D.quaternion,D.scale),D.matrixWorldInverse.copy(D.matrixWorld).invert();let Ze=Ee+we,Fe=ye+we,Le=ht-Te,Ge=ve+(ae-Te),ct=He*ye/Fe*Ze,ut=St*ye/Fe*Ze;D.projectionMatrix.makePerspective(Le,Ge,ct,ut,Ze,Fe),D.projectionMatrixInverse.copy(D.projectionMatrix).invert()}function $(D,X){X===null?D.matrixWorld.copy(D.matrix):D.matrixWorld.multiplyMatrices(X.matrixWorld,D.matrix),D.matrixWorldInverse.copy(D.matrixWorld).invert()}this.updateCamera=function(D){if(i===null)return;w.near=E.near=A.near=D.near,w.far=E.far=A.far=D.far,(k!==w.near||v!==w.far)&&(i.updateRenderState({depthNear:w.near,depthFar:w.far}),k=w.near,v=w.far);let X=D.parent,oe=w.cameras;$(w,X);for(let ae=0;ae<oe.length;ae++)$(oe[ae],X);oe.length===2?G(w,A,E):w.projectionMatrix.copy(A.projectionMatrix),W(D,w,X)};function W(D,X,oe){oe===null?D.matrix.copy(X.matrixWorld):(D.matrix.copy(oe.matrixWorld),D.matrix.invert(),D.matrix.multiply(X.matrixWorld)),D.matrix.decompose(D.position,D.quaternion,D.scale),D.updateMatrixWorld(!0);let ae=D.children;for(let ce=0,_e=ae.length;ce<_e;ce++)ae[ce].updateMatrixWorld(!0);D.projectionMatrix.copy(X.projectionMatrix),D.projectionMatrixInverse.copy(X.projectionMatrixInverse),D.isPerspectiveCamera&&(D.fov=Ti*2*Math.atan(1/D.projectionMatrix.elements[5]),D.zoom=1)}this.getCamera=function(){return w},this.getFoveation=function(){if(!(d===null&&p===null))return c},this.setFoveation=function(D){c=D,d!==null&&(d.fixedFoveation=D),p!==null&&p.fixedFoveation!==void 0&&(p.fixedFoveation=D)};let q=null;function Z(D,X){if(h=X.getViewerPose(l||o),g=X,h!==null){let oe=h.views;p!==null&&(e.setRenderTargetFramebuffer(f,p.framebuffer),e.setRenderTarget(f));let ae=!1;oe.length!==w.cameras.length&&(w.cameras.length=0,ae=!0);for(let ce=0;ce<oe.length;ce++){let _e=oe[ce],Ee=null;if(p!==null)Ee=p.getViewport(_e);else{let He=u.getViewSubImage(d,_e);Ee=He.viewport,ce===0&&(e.setRenderTargetTextures(f,He.colorTexture,d.ignoreDepthValues?void 0:He.depthStencilTexture),e.setRenderTarget(f))}let ye=C[ce];ye===void 0&&(ye=new lt,ye.layers.enable(ce),ye.viewport=new We,C[ce]=ye),ye.matrix.fromArray(_e.transform.matrix),ye.matrix.decompose(ye.position,ye.quaternion,ye.scale),ye.projectionMatrix.fromArray(_e.projectionMatrix),ye.projectionMatrixInverse.copy(ye.projectionMatrix).invert(),ye.viewport.set(Ee.x,Ee.y,Ee.width,Ee.height),ce===0&&(w.matrix.copy(ye.matrix),w.matrix.decompose(w.position,w.quaternion,w.scale)),ae===!0&&w.cameras.push(ye)}}for(let oe=0;oe<S.length;oe++){let ae=x[oe],ce=S[oe];ae!==null&&ce!==void 0&&ce.update(ae,X,l||o)}q&&q(D,X),X.detectedPlanes&&n.dispatchEvent({type:\"planesdetected\",data:X}),g=null}let K=new Al;K.setAnimationLoop(Z),this.setAnimationLoop=function(D){q=D},this.dispose=function(){}}};function Hm(s,e){function t(m,f){m.matrixAutoUpdate===!0&&m.updateMatrix(),f.value.copy(m.matrix)}function n(m,f){f.color.getRGB(m.fogColor.value,bl(s)),f.isFog?(m.fogNear.value=f.near,m.fogFar.value=f.far):f.isFogExp2&&(m.fogDensity.value=f.density)}function i(m,f,S,x,A){f.isMeshBasicMaterial||f.isMeshLambertMaterial?r(m,f):f.isMeshToonMaterial?(r(m,f),u(m,f)):f.isMeshPhongMaterial?(r(m,f),h(m,f)):f.isMeshStandardMaterial?(r(m,f),d(m,f),f.isMeshPhysicalMaterial&&p(m,f,A)):f.isMeshMatcapMaterial?(r(m,f),g(m,f)):f.isMeshDepthMaterial?r(m,f):f.isMeshDistanceMaterial?(r(m,f),_(m,f)):f.isMeshNormalMaterial?r(m,f):f.isLineBasicMaterial?(o(m,f),f.isLineDashedMaterial&&a(m,f)):f.isPointsMaterial?c(m,f,S,x):f.isSpriteMaterial?l(m,f):f.isShadowMaterial?(m.color.value.copy(f.color),m.opacity.value=f.opacity):f.isShaderMaterial&&(f.uniformsNeedUpdate=!1)}function r(m,f){m.opacity.value=f.opacity,f.color&&m.diffuse.value.copy(f.color),f.emissive&&m.emissive.value.copy(f.emissive).multiplyScalar(f.emissiveIntensity),f.map&&(m.map.value=f.map,t(f.map,m.mapTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,t(f.alphaMap,m.alphaMapTransform)),f.bumpMap&&(m.bumpMap.value=f.bumpMap,t(f.bumpMap,m.bumpMapTransform),m.bumpScale.value=f.bumpScale,f.side===bt&&(m.bumpScale.value*=-1)),f.normalMap&&(m.normalMap.value=f.normalMap,t(f.normalMap,m.normalMapTransform),m.normalScale.value.copy(f.normalScale),f.side===bt&&m.normalScale.value.negate()),f.displacementMap&&(m.displacementMap.value=f.displacementMap,t(f.displacementMap,m.displacementMapTransform),m.displacementScale.value=f.displacementScale,m.displacementBias.value=f.displacementBias),f.emissiveMap&&(m.emissiveMap.value=f.emissiveMap,t(f.emissiveMap,m.emissiveMapTransform)),f.specularMap&&(m.specularMap.value=f.specularMap,t(f.specularMap,m.specularMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest);let S=e.get(f).envMap;if(S&&(m.envMap.value=S,m.flipEnvMap.value=S.isCubeTexture&&S.isRenderTargetTexture===!1?-1:1,m.reflectivity.value=f.reflectivity,m.ior.value=f.ior,m.refractionRatio.value=f.refractionRatio),f.lightMap){m.lightMap.value=f.lightMap;let x=s._useLegacyLights===!0?Math.PI:1;m.lightMapIntensity.value=f.lightMapIntensity*x,t(f.lightMap,m.lightMapTransform)}f.aoMap&&(m.aoMap.value=f.aoMap,m.aoMapIntensity.value=f.aoMapIntensity,t(f.aoMap,m.aoMapTransform))}function o(m,f){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,f.map&&(m.map.value=f.map,t(f.map,m.mapTransform))}function a(m,f){m.dashSize.value=f.dashSize,m.totalSize.value=f.dashSize+f.gapSize,m.scale.value=f.scale}function c(m,f,S,x){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,m.size.value=f.size*S,m.scale.value=x*.5,f.map&&(m.map.value=f.map,t(f.map,m.uvTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,t(f.alphaMap,m.alphaMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest)}function l(m,f){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,m.rotation.value=f.rotation,f.map&&(m.map.value=f.map,t(f.map,m.mapTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,t(f.alphaMap,m.alphaMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest)}function h(m,f){m.specular.value.copy(f.specular),m.shininess.value=Math.max(f.shininess,1e-4)}function u(m,f){f.gradientMap&&(m.gradientMap.value=f.gradientMap)}function d(m,f){m.metalness.value=f.metalness,f.metalnessMap&&(m.metalnessMap.value=f.metalnessMap,t(f.metalnessMap,m.metalnessMapTransform)),m.roughness.value=f.roughness,f.roughnessMap&&(m.roughnessMap.value=f.roughnessMap,t(f.roughnessMap,m.roughnessMapTransform)),e.get(f).envMap&&(m.envMapIntensity.value=f.envMapIntensity)}function p(m,f,S){m.ior.value=f.ior,f.sheen>0&&(m.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),m.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(m.sheenColorMap.value=f.sheenColorMap,t(f.sheenColorMap,m.sheenColorMapTransform)),f.sheenRoughnessMap&&(m.sheenRoughnessMap.value=f.sheenRoughnessMap,t(f.sheenRoughnessMap,m.sheenRoughnessMapTransform))),f.clearcoat>0&&(m.clearcoat.value=f.clearcoat,m.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(m.clearcoatMap.value=f.clearcoatMap,t(f.clearcoatMap,m.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,t(f.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(m.clearcoatNormalMap.value=f.clearcoatNormalMap,t(f.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===bt&&m.clearcoatNormalScale.value.negate())),f.iridescence>0&&(m.iridescence.value=f.iridescence,m.iridescenceIOR.value=f.iridescenceIOR,m.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(m.iridescenceMap.value=f.iridescenceMap,t(f.iridescenceMap,m.iridescenceMapTransform)),f.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=f.iridescenceThicknessMap,t(f.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),f.transmission>0&&(m.transmission.value=f.transmission,m.transmissionSamplerMap.value=S.texture,m.transmissionSamplerSize.value.set(S.width,S.height),f.transmissionMap&&(m.transmissionMap.value=f.transmissionMap,t(f.transmissionMap,m.transmissionMapTransform)),m.thickness.value=f.thickness,f.thicknessMap&&(m.thicknessMap.value=f.thicknessMap,t(f.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=f.attenuationDistance,m.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(m.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(m.anisotropyMap.value=f.anisotropyMap,t(f.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=f.specularIntensity,m.specularColor.value.copy(f.specularColor),f.specularColorMap&&(m.specularColorMap.value=f.specularColorMap,t(f.specularColorMap,m.specularColorMapTransform)),f.specularIntensityMap&&(m.specularIntensityMap.value=f.specularIntensityMap,t(f.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,f){f.matcap&&(m.matcap.value=f.matcap)}function _(m,f){let S=e.get(f).light;m.referencePosition.value.setFromMatrixPosition(S.matrixWorld),m.nearDistance.value=S.shadow.camera.near,m.farDistance.value=S.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:i}}function Vm(s,e,t,n){let i={},r={},o=[],a=t.isWebGL2?s.getParameter(s.MAX_UNIFORM_BUFFER_BINDINGS):0;function c(S,x){let A=x.program;n.uniformBlockBinding(S,A)}function l(S,x){let A=i[S.id];A===void 0&&(g(S),A=h(S),i[S.id]=A,S.addEventListener(\"dispose\",m));let E=x.program;n.updateUBOMapping(S,E);let C=e.render.frame;r[S.id]!==C&&(d(S),r[S.id]=C)}function h(S){let x=u();S.__bindingPointIndex=x;let A=s.createBuffer(),E=S.__size,C=S.usage;return s.bindBuffer(s.UNIFORM_BUFFER,A),s.bufferData(s.UNIFORM_BUFFER,E,C),s.bindBuffer(s.UNIFORM_BUFFER,null),s.bindBufferBase(s.UNIFORM_BUFFER,x,A),A}function u(){for(let S=0;S<a;S++)if(o.indexOf(S)===-1)return o.push(S),S;return console.error(\"THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.\"),0}function d(S){let x=i[S.id],A=S.uniforms,E=S.__cache;s.bindBuffer(s.UNIFORM_BUFFER,x);for(let C=0,w=A.length;C<w;C++){let k=A[C];if(p(k,C,E)===!0){let v=k.__offset,T=Array.isArray(k.value)?k.value:[k.value],Y=0;for(let ne=0;ne<T.length;ne++){let B=T[ne],V=_(B);typeof B==\"number\"?(k.__data[0]=B,s.bufferSubData(s.UNIFORM_BUFFER,v+Y,k.__data)):B.isMatrix3?(k.__data[0]=B.elements[0],k.__data[1]=B.elements[1],k.__data[2]=B.elements[2],k.__data[3]=B.elements[0],k.__data[4]=B.elements[3],k.__data[5]=B.elements[4],k.__data[6]=B.elements[5],k.__data[7]=B.elements[0],k.__data[8]=B.elements[6],k.__data[9]=B.elements[7],k.__data[10]=B.elements[8],k.__data[11]=B.elements[0]):(B.toArray(k.__data,Y),Y+=V.storage/Float32Array.BYTES_PER_ELEMENT)}s.bufferSubData(s.UNIFORM_BUFFER,v,k.__data)}}s.bindBuffer(s.UNIFORM_BUFFER,null)}function p(S,x,A){let E=S.value;if(A[x]===void 0){if(typeof E==\"number\")A[x]=E;else{let C=Array.isArray(E)?E:[E],w=[];for(let k=0;k<C.length;k++)w.push(C[k].clone());A[x]=w}return!0}else if(typeof E==\"number\"){if(A[x]!==E)return A[x]=E,!0}else{let C=Array.isArray(A[x])?A[x]:[A[x]],w=Array.isArray(E)?E:[E];for(let k=0;k<C.length;k++){let v=C[k];if(v.equals(w[k])===!1)return v.copy(w[k]),!0}}return!1}function g(S){let x=S.uniforms,A=0,E=16,C=0;for(let w=0,k=x.length;w<k;w++){let v=x[w],T={boundary:0,storage:0},Y=Array.isArray(v.value)?v.value:[v.value];for(let ne=0,B=Y.length;ne<B;ne++){let V=Y[ne],G=_(V);T.boundary+=G.boundary,T.storage+=G.storage}if(v.__data=new Float32Array(T.storage/Float32Array.BYTES_PER_ELEMENT),v.__offset=A,w>0){C=A%E;let ne=E-C;C!==0&&ne-T.boundary<0&&(A+=E-C,v.__offset=A)}A+=T.storage}return C=A%E,C>0&&(A+=E-C),S.__size=A,S.__cache={},this}function _(S){let x={boundary:0,storage:0};return typeof S==\"number\"?(x.boundary=4,x.storage=4):S.isVector2?(x.boundary=8,x.storage=8):S.isVector3||S.isColor?(x.boundary=16,x.storage=12):S.isVector4?(x.boundary=16,x.storage=16):S.isMatrix3?(x.boundary=48,x.storage=48):S.isMatrix4?(x.boundary=64,x.storage=64):S.isTexture?console.warn(\"THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.\"):console.warn(\"THREE.WebGLRenderer: Unsupported uniform value type.\",S),x}function m(S){let x=S.target;x.removeEventListener(\"dispose\",m);let A=o.indexOf(x.__bindingPointIndex);o.splice(A,1),s.deleteBuffer(i[x.id]),delete i[x.id],delete r[x.id]}function f(){for(let S in i)s.deleteBuffer(i[S]);o=[],i={},r={}}return{bind:c,update:l,dispose:f}}function Gm(){let s=$i(\"canvas\");return s.style.display=\"block\",s}var xo=class{constructor(e={}){let{canvas:t=Gm(),context:n=null,depth:i=!0,stencil:r=!0,alpha:o=!1,antialias:a=!1,premultipliedAlpha:c=!0,preserveDrawingBuffer:l=!1,powerPreference:h=\"default\",failIfMajorPerformanceCaveat:u=!1}=e;this.isWebGLRenderer=!0;let d;n!==null?d=n.getContextAttributes().alpha:d=o;let p=new Uint32Array(4),g=new Int32Array(4),_=null,m=null,f=[],S=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputColorSpace=xe,this._useLegacyLights=!1,this.toneMapping=En,this.toneMappingExposure=1;let x=this,A=!1,E=0,C=0,w=null,k=-1,v=null,T=new We,Y=new We,ne=null,B=new Ae(0),V=0,G=t.width,$=t.height,W=1,q=null,Z=null,K=new We(0,0,G,$),D=new We(0,0,G,$),X=!1,oe=new Qi,ae=!1,ce=!1,_e=null,Ee=new Ue,ye=new Be,He=new P,St={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function Pe(){return w===null?W:1}let U=n;function ht(M,I){for(let H=0;H<M.length;H++){let L=M[H],z=t.getContext(L,I);if(z!==null)return z}return null}try{let M={alpha:!0,depth:i,stencil:r,antialias:a,premultipliedAlpha:c,preserveDrawingBuffer:l,powerPreference:h,failIfMajorPerformanceCaveat:u};if(\"setAttribute\"in t&&t.setAttribute(\"data-engine\",`three.js r${Uo}`),t.addEventListener(\"webglcontextlost\",se,!1),t.addEventListener(\"webglcontextrestored\",O,!1),t.addEventListener(\"webglcontextcreationerror\",te,!1),U===null){let I=[\"webgl2\",\"webgl\",\"experimental-webgl\"];if(x.isWebGL1Renderer===!0&&I.shift(),U=ht(I,M),U===null)throw ht(I)?new Error(\"Error creating WebGL context with your selected attributes.\"):new Error(\"Error creating WebGL context.\")}typeof WebGLRenderingContext<\"u\"&&U instanceof WebGLRenderingContext&&console.warn(\"THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163.\"),U.getShaderPrecisionFormat===void 0&&(U.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(M){throw console.error(\"THREE.WebGLRenderer: \"+M.message),M}let ve,we,Te,Ze,Fe,Le,Ge,ct,ut,b,y,N,j,J,Q,de,ee,F,me,fe,pe,he,ue,De;function Xe(){ve=new lp(U),we=new ip(U,ve,e),ve.init(we),he=new zm(U,ve,we),Te=new Fm(U,ve,we),Ze=new dp(U),Fe=new Tm,Le=new Bm(U,ve,Te,Fe,we,he,Ze),Ge=new rp(x),ct=new cp(x),ut=new Mu(U,we),ue=new tp(U,ve,ut,we),b=new hp(U,ut,Ze,ue),y=new gp(U,b,ut,Ze),me=new mp(U,we,Le),de=new sp(Fe),N=new Am(x,Ge,ct,ve,we,ue,de),j=new Hm(x,Fe),J=new wm,Q=new Um(ve,we),F=new ep(x,Ge,ct,Te,y,d,c),ee=new Om(x,y,we),De=new Vm(U,Ze,we,Te),fe=new np(U,ve,Ze,we),pe=new up(U,ve,Ze,we),Ze.programs=N.programs,x.capabilities=we,x.extensions=ve,x.properties=Fe,x.renderLists=J,x.shadowMap=ee,x.state=Te,x.info=Ze}Xe();let R=new _o(x,U);this.xr=R,this.getContext=function(){return U},this.getContextAttributes=function(){return U.getContextAttributes()},this.forceContextLoss=function(){let M=ve.get(\"WEBGL_lose_context\");M&&M.loseContext()},this.forceContextRestore=function(){let M=ve.get(\"WEBGL_lose_context\");M&&M.restoreContext()},this.getPixelRatio=function(){return W},this.setPixelRatio=function(M){M!==void 0&&(W=M,this.setSize(G,$,!1))},this.getSize=function(M){return M.set(G,$)},this.setSize=function(M,I,H=!0){if(R.isPresenting){console.warn(\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\");return}G=M,$=I,t.width=Math.floor(M*W),t.height=Math.floor(I*W),H===!0&&(t.style.width=M+\"px\",t.style.height=I+\"px\"),this.setViewport(0,0,M,I)},this.getDrawingBufferSize=function(M){return M.set(G*W,$*W).floor()},this.setDrawingBufferSize=function(M,I,H){G=M,$=I,W=H,t.width=Math.floor(M*H),t.height=Math.floor(I*H),this.setViewport(0,0,M,I)},this.getCurrentViewport=function(M){return M.copy(T)},this.getViewport=function(M){return M.copy(K)},this.setViewport=function(M,I,H,L){M.isVector4?K.set(M.x,M.y,M.z,M.w):K.set(M,I,H,L),Te.viewport(T.copy(K).multiplyScalar(W).floor())},this.getScissor=function(M){return M.copy(D)},this.setScissor=function(M,I,H,L){M.isVector4?D.set(M.x,M.y,M.z,M.w):D.set(M,I,H,L),Te.scissor(Y.copy(D).multiplyScalar(W).floor())},this.getScissorTest=function(){return X},this.setScissorTest=function(M){Te.setScissorTest(X=M)},this.setOpaqueSort=function(M){q=M},this.setTransparentSort=function(M){Z=M},this.getClearColor=function(M){return M.copy(F.getClearColor())},this.setClearColor=function(){F.setClearColor.apply(F,arguments)},this.getClearAlpha=function(){return F.getClearAlpha()},this.setClearAlpha=function(){F.setClearAlpha.apply(F,arguments)},this.clear=function(M=!0,I=!0,H=!0){let L=0;if(M){let z=!1;if(w!==null){let le=w.texture.format;z=le===pl||le===fl||le===dl}if(z){let le=w.texture.type,ge=le===wn||le===An||le===No||le===Wn||le===hl||le===ul,Se=F.getClearColor(),be=F.getClearAlpha(),Ne=Se.r,Me=Se.g,Re=Se.b;ge?(p[0]=Ne,p[1]=Me,p[2]=Re,p[3]=be,U.clearBufferuiv(U.COLOR,0,p)):(g[0]=Ne,g[1]=Me,g[2]=Re,g[3]=be,U.clearBufferiv(U.COLOR,0,g))}else L|=U.COLOR_BUFFER_BIT}I&&(L|=U.DEPTH_BUFFER_BIT),H&&(L|=U.STENCIL_BUFFER_BIT),U.clear(L)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener(\"webglcontextlost\",se,!1),t.removeEventListener(\"webglcontextrestored\",O,!1),t.removeEventListener(\"webglcontextcreationerror\",te,!1),J.dispose(),Q.dispose(),Fe.dispose(),Ge.dispose(),ct.dispose(),y.dispose(),ue.dispose(),De.dispose(),N.dispose(),R.dispose(),R.removeEventListener(\"sessionstart\",Ye),R.removeEventListener(\"sessionend\",Zt),_e&&(_e.dispose(),_e=null),gt.stop()};function se(M){M.preventDefault(),console.log(\"THREE.WebGLRenderer: Context Lost.\"),A=!0}function O(){console.log(\"THREE.WebGLRenderer: Context Restored.\"),A=!1;let M=Ze.autoReset,I=ee.enabled,H=ee.autoUpdate,L=ee.needsUpdate,z=ee.type;Xe(),Ze.autoReset=M,ee.enabled=I,ee.autoUpdate=H,ee.needsUpdate=L,ee.type=z}function te(M){console.error(\"THREE.WebGLRenderer: A WebGL context could not be created. Reason: \",M.statusMessage)}function re(M){let I=M.target;I.removeEventListener(\"dispose\",re),ke(I)}function ke(M){Ke(M),Fe.remove(M)}function Ke(M){let I=Fe.get(M).programs;I!==void 0&&(I.forEach(function(H){N.releaseProgram(H)}),M.isShaderMaterial&&N.releaseShaderCache(M))}this.renderBufferDirect=function(M,I,H,L,z,le){I===null&&(I=St);let ge=z.isMesh&&z.matrixWorld.determinant()<0,Se=Fl(M,I,H,L,z);Te.setMaterial(L,ge);let be=H.index,Ne=1;if(L.wireframe===!0){if(be=b.getWireframeAttribute(H),be===void 0)return;Ne=2}let Me=H.drawRange,Re=H.attributes.position,Je=Me.start*Ne,je=(Me.start+Me.count)*Ne;le!==null&&(Je=Math.max(Je,le.start*Ne),je=Math.min(je,(le.start+le.count)*Ne)),be!==null?(Je=Math.max(Je,0),je=Math.min(je,be.count)):Re!=null&&(Je=Math.max(Je,0),je=Math.min(je,Re.count));let Lt=je-Je;if(Lt<0||Lt===1/0)return;ue.setup(z,L,Se,H,be);let tn,tt=fe;if(be!==null&&(tn=ut.get(be),tt=pe,tt.setIndex(tn)),z.isMesh)L.wireframe===!0?(Te.setLineWidth(L.wireframeLinewidth*Pe()),tt.setMode(U.LINES)):tt.setMode(U.TRIANGLES);else if(z.isLine){let Oe=L.linewidth;Oe===void 0&&(Oe=1),Te.setLineWidth(Oe*Pe()),z.isLineSegments?tt.setMode(U.LINES):z.isLineLoop?tt.setMode(U.LINE_LOOP):tt.setMode(U.LINE_STRIP)}else z.isPoints?tt.setMode(U.POINTS):z.isSprite&&tt.setMode(U.TRIANGLES);if(z.isInstancedMesh)tt.renderInstances(Je,Lt,z.count);else if(H.isInstancedBufferGeometry){let Oe=H._maxInstanceCount!==void 0?H._maxInstanceCount:1/0,fr=Math.min(H.instanceCount,Oe);tt.renderInstances(Je,Lt,fr)}else tt.render(Je,Lt)},this.compile=function(M,I){function H(L,z,le){L.transparent===!0&&L.side===Gt&&L.forceSinglePass===!1?(L.side=bt,L.needsUpdate=!0,us(L,z,le),L.side=jt,L.needsUpdate=!0,us(L,z,le),L.side=Gt):us(L,z,le)}m=Q.get(M),m.init(),S.push(m),M.traverseVisible(function(L){L.isLight&&L.layers.test(I.layers)&&(m.pushLight(L),L.castShadow&&m.pushShadow(L))}),m.setupLights(x._useLegacyLights),M.traverse(function(L){let z=L.material;if(z)if(Array.isArray(z))for(let le=0;le<z.length;le++){let ge=z[le];H(ge,M,L)}else H(z,M,L)}),S.pop(),m=null};let et=null;function xn(M){et&&et(M)}function Ye(){gt.stop()}function Zt(){gt.start()}let gt=new Al;gt.setAnimationLoop(xn),typeof self<\"u\"&&gt.setContext(self),this.setAnimationLoop=function(M){et=M,R.setAnimationLoop(M),M===null?gt.stop():gt.start()},R.addEventListener(\"sessionstart\",Ye),R.addEventListener(\"sessionend\",Zt),this.render=function(M,I){if(I!==void 0&&I.isCamera!==!0){console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");return}if(A===!0)return;M.matrixWorldAutoUpdate===!0&&M.updateMatrixWorld(),I.parent===null&&I.matrixWorldAutoUpdate===!0&&I.updateMatrixWorld(),R.enabled===!0&&R.isPresenting===!0&&(R.cameraAutoUpdate===!0&&R.updateCamera(I),I=R.getCamera()),M.isScene===!0&&M.onBeforeRender(x,M,I,w),m=Q.get(M,S.length),m.init(),S.push(m),Ee.multiplyMatrices(I.projectionMatrix,I.matrixWorldInverse),oe.setFromProjectionMatrix(Ee),ce=this.localClippingEnabled,ae=de.init(this.clippingPlanes,ce),_=J.get(M,f.length),_.init(),f.push(_),_a(M,I,0,x.sortObjects),_.finish(),x.sortObjects===!0&&_.sort(q,Z),this.info.render.frame++,ae===!0&&de.beginShadows();let H=m.state.shadowsArray;if(ee.render(H,M,I),ae===!0&&de.endShadows(),this.info.autoReset===!0&&this.info.reset(),F.render(_,M),m.setupLights(x._useLegacyLights),I.isArrayCamera){let L=I.cameras;for(let z=0,le=L.length;z<le;z++){let ge=L[z];xa(_,M,ge,ge.viewport)}}else xa(_,M,I);w!==null&&(Le.updateMultisampleRenderTarget(w),Le.updateRenderTargetMipmap(w)),M.isScene===!0&&M.onAfterRender(x,M,I),ue.resetDefaultState(),k=-1,v=null,S.pop(),S.length>0?m=S[S.length-1]:m=null,f.pop(),f.length>0?_=f[f.length-1]:_=null};function _a(M,I,H,L){if(M.visible===!1)return;if(M.layers.test(I.layers)){if(M.isGroup)H=M.renderOrder;else if(M.isLOD)M.autoUpdate===!0&&M.update(I);else if(M.isLight)m.pushLight(M),M.castShadow&&m.pushShadow(M);else if(M.isSprite){if(!M.frustumCulled||oe.intersectsSprite(M)){L&&He.setFromMatrixPosition(M.matrixWorld).applyMatrix4(Ee);let ge=y.update(M),Se=M.material;Se.visible&&_.push(M,ge,Se,H,He.z,null)}}else if((M.isMesh||M.isLine||M.isPoints)&&(!M.frustumCulled||oe.intersectsObject(M))){let ge=y.update(M),Se=M.material;if(L&&(M.boundingSphere!==void 0?(M.boundingSphere===null&&M.computeBoundingSphere(),He.copy(M.boundingSphere.center)):(ge.boundingSphere===null&&ge.computeBoundingSphere(),He.copy(ge.boundingSphere.center)),He.applyMatrix4(M.matrixWorld).applyMatrix4(Ee)),Array.isArray(Se)){let be=ge.groups;for(let Ne=0,Me=be.length;Ne<Me;Ne++){let Re=be[Ne],Je=Se[Re.materialIndex];Je&&Je.visible&&_.push(M,ge,Je,H,He.z,Re)}}else Se.visible&&_.push(M,ge,Se,H,He.z,null)}}let le=M.children;for(let ge=0,Se=le.length;ge<Se;ge++)_a(le[ge],I,H,L)}function xa(M,I,H,L){let z=M.opaque,le=M.transmissive,ge=M.transparent;m.setupLightsView(H),ae===!0&&de.setGlobalState(x.clippingPlanes,H),le.length>0&&Ol(z,le,I,H),L&&Te.viewport(T.copy(L)),z.length>0&&hs(z,I,H),le.length>0&&hs(le,I,H),ge.length>0&&hs(ge,I,H),Te.buffers.depth.setTest(!0),Te.buffers.depth.setMask(!0),Te.buffers.color.setMask(!0),Te.setPolygonOffset(!1)}function Ol(M,I,H,L){let z=we.isWebGL2;_e===null&&(_e=new pn(1,1,{generateMipmaps:!0,type:ve.has(\"EXT_color_buffer_half_float\")?Ji:wn,minFilter:Rn,samples:z?4:0})),x.getDrawingBufferSize(ye),z?_e.setSize(ye.x,ye.y):_e.setSize(zs(ye.x),zs(ye.y));let le=x.getRenderTarget();x.setRenderTarget(_e),x.getClearColor(B),V=x.getClearAlpha(),V<1&&x.setClearColor(16777215,.5),x.clear();let ge=x.toneMapping;x.toneMapping=En,hs(M,H,L),Le.updateMultisampleRenderTarget(_e),Le.updateRenderTargetMipmap(_e);let Se=!1;for(let be=0,Ne=I.length;be<Ne;be++){let Me=I[be],Re=Me.object,Je=Me.geometry,je=Me.material,Lt=Me.group;if(je.side===Gt&&Re.layers.test(L.layers)){let tn=je.side;je.side=bt,je.needsUpdate=!0,ya(Re,H,L,Je,je,Lt),je.side=tn,je.needsUpdate=!0,Se=!0}}Se===!0&&(Le.updateMultisampleRenderTarget(_e),Le.updateRenderTargetMipmap(_e)),x.setRenderTarget(le),x.setClearColor(B,V),x.toneMapping=ge}function hs(M,I,H){let L=I.isScene===!0?I.overrideMaterial:null;for(let z=0,le=M.length;z<le;z++){let ge=M[z],Se=ge.object,be=ge.geometry,Ne=L===null?ge.material:L,Me=ge.group;Se.layers.test(H.layers)&&ya(Se,I,H,be,Ne,Me)}}function ya(M,I,H,L,z,le){M.onBeforeRender(x,I,H,L,z,le),M.modelViewMatrix.multiplyMatrices(H.matrixWorldInverse,M.matrixWorld),M.normalMatrix.getNormalMatrix(M.modelViewMatrix),z.onBeforeRender(x,I,H,L,M,le),z.transparent===!0&&z.side===Gt&&z.forceSinglePass===!1?(z.side=bt,z.needsUpdate=!0,x.renderBufferDirect(H,I,L,z,M,le),z.side=jt,z.needsUpdate=!0,x.renderBufferDirect(H,I,L,z,M,le),z.side=Gt):x.renderBufferDirect(H,I,L,z,M,le),M.onAfterRender(x,I,H,L,z,le)}function us(M,I,H){I.isScene!==!0&&(I=St);let L=Fe.get(M),z=m.state.lights,le=m.state.shadowsArray,ge=z.state.version,Se=N.getParameters(M,z.state,le,I,H),be=N.getProgramCacheKey(Se),Ne=L.programs;L.environment=M.isMeshStandardMaterial?I.environment:null,L.fog=I.fog,L.envMap=(M.isMeshStandardMaterial?ct:Ge).get(M.envMap||L.environment),Ne===void 0&&(M.addEventListener(\"dispose\",re),Ne=new Map,L.programs=Ne);let Me=Ne.get(be);if(Me!==void 0){if(L.currentProgram===Me&&L.lightsStateVersion===ge)return va(M,Se),Me}else Se.uniforms=N.getUniforms(M),M.onBuild(H,Se,x),M.onBeforeCompile(Se,x),Me=N.acquireProgram(Se,be),Ne.set(be,Me),L.uniforms=Se.uniforms;let Re=L.uniforms;(!M.isShaderMaterial&&!M.isRawShaderMaterial||M.clipping===!0)&&(Re.clippingPlanes=de.uniform),va(M,Se),L.needsLights=zl(M),L.lightsStateVersion=ge,L.needsLights&&(Re.ambientLightColor.value=z.state.ambient,Re.lightProbe.value=z.state.probe,Re.directionalLights.value=z.state.directional,Re.directionalLightShadows.value=z.state.directionalShadow,Re.spotLights.value=z.state.spot,Re.spotLightShadows.value=z.state.spotShadow,Re.rectAreaLights.value=z.state.rectArea,Re.ltc_1.value=z.state.rectAreaLTC1,Re.ltc_2.value=z.state.rectAreaLTC2,Re.pointLights.value=z.state.point,Re.pointLightShadows.value=z.state.pointShadow,Re.hemisphereLights.value=z.state.hemi,Re.directionalShadowMap.value=z.state.directionalShadowMap,Re.directionalShadowMatrix.value=z.state.directionalShadowMatrix,Re.spotShadowMap.value=z.state.spotShadowMap,Re.spotLightMatrix.value=z.state.spotLightMatrix,Re.spotLightMap.value=z.state.spotLightMap,Re.pointShadowMap.value=z.state.pointShadowMap,Re.pointShadowMatrix.value=z.state.pointShadowMatrix);let Je=Me.getUniforms(),je=vi.seqWithValue(Je.seq,Re);return L.currentProgram=Me,L.uniformsList=je,Me}function va(M,I){let H=Fe.get(M);H.outputColorSpace=I.outputColorSpace,H.instancing=I.instancing,H.instancingColor=I.instancingColor,H.skinning=I.skinning,H.morphTargets=I.morphTargets,H.morphNormals=I.morphNormals,H.morphColors=I.morphColors,H.morphTargetsCount=I.morphTargetsCount,H.numClippingPlanes=I.numClippingPlanes,H.numIntersection=I.numClipIntersection,H.vertexAlphas=I.vertexAlphas,H.vertexTangents=I.vertexTangents,H.toneMapping=I.toneMapping}function Fl(M,I,H,L,z){I.isScene!==!0&&(I=St),Le.resetTextureUnits();let le=I.fog,ge=L.isMeshStandardMaterial?I.environment:null,Se=w===null?x.outputColorSpace:w.isXRRenderTarget===!0?w.texture.colorSpace:Nt,be=(L.isMeshStandardMaterial?ct:Ge).get(L.envMap||ge),Ne=L.vertexColors===!0&&!!H.attributes.color&&H.attributes.color.itemSize===4,Me=!!H.attributes.tangent&&(!!L.normalMap||L.anisotropy>0),Re=!!H.morphAttributes.position,Je=!!H.morphAttributes.normal,je=!!H.morphAttributes.color,Lt=En;L.toneMapped&&(w===null||w.isXRRenderTarget===!0)&&(Lt=x.toneMapping);let tn=H.morphAttributes.position||H.morphAttributes.normal||H.morphAttributes.color,tt=tn!==void 0?tn.length:0,Oe=Fe.get(L),fr=m.state.lights;if(ae===!0&&(ce===!0||M!==v)){let Tt=M===v&&L.id===k;de.setState(L,M,Tt)}let nt=!1;L.version===Oe.__version?(Oe.needsLights&&Oe.lightsStateVersion!==fr.state.version||Oe.outputColorSpace!==Se||z.isInstancedMesh&&Oe.instancing===!1||!z.isInstancedMesh&&Oe.instancing===!0||z.isSkinnedMesh&&Oe.skinning===!1||!z.isSkinnedMesh&&Oe.skinning===!0||z.isInstancedMesh&&Oe.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&Oe.instancingColor===!1&&z.instanceColor!==null||Oe.envMap!==be||L.fog===!0&&Oe.fog!==le||Oe.numClippingPlanes!==void 0&&(Oe.numClippingPlanes!==de.numPlanes||Oe.numIntersection!==de.numIntersection)||Oe.vertexAlphas!==Ne||Oe.vertexTangents!==Me||Oe.morphTargets!==Re||Oe.morphNormals!==Je||Oe.morphColors!==je||Oe.toneMapping!==Lt||we.isWebGL2===!0&&Oe.morphTargetsCount!==tt)&&(nt=!0):(nt=!0,Oe.__version=L.version);let On=Oe.currentProgram;nt===!0&&(On=us(L,I,z));let Ma=!1,Ni=!1,pr=!1,_t=On.getUniforms(),Fn=Oe.uniforms;if(Te.useProgram(On.program)&&(Ma=!0,Ni=!0,pr=!0),L.id!==k&&(k=L.id,Ni=!0),Ma||v!==M){if(_t.setValue(U,\"projectionMatrix\",M.projectionMatrix),we.logarithmicDepthBuffer&&_t.setValue(U,\"logDepthBufFC\",2/(Math.log(M.far+1)/Math.LN2)),v!==M&&(v=M,Ni=!0,pr=!0),L.isShaderMaterial||L.isMeshPhongMaterial||L.isMeshToonMaterial||L.isMeshStandardMaterial||L.envMap){let Tt=_t.map.cameraPosition;Tt!==void 0&&Tt.setValue(U,He.setFromMatrixPosition(M.matrixWorld))}(L.isMeshPhongMaterial||L.isMeshToonMaterial||L.isMeshLambertMaterial||L.isMeshBasicMaterial||L.isMeshStandardMaterial||L.isShaderMaterial)&&_t.setValue(U,\"isOrthographic\",M.isOrthographicCamera===!0),(L.isMeshPhongMaterial||L.isMeshToonMaterial||L.isMeshLambertMaterial||L.isMeshBasicMaterial||L.isMeshStandardMaterial||L.isShaderMaterial||L.isShadowMaterial||z.isSkinnedMesh)&&_t.setValue(U,\"viewMatrix\",M.matrixWorldInverse)}if(z.isSkinnedMesh){_t.setOptional(U,z,\"bindMatrix\"),_t.setOptional(U,z,\"bindMatrixInverse\");let Tt=z.skeleton;Tt&&(we.floatVertexTextures?(Tt.boneTexture===null&&Tt.computeBoneTexture(),_t.setValue(U,\"boneTexture\",Tt.boneTexture,Le),_t.setValue(U,\"boneTextureSize\",Tt.boneTextureSize)):console.warn(\"THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.\"))}let mr=H.morphAttributes;if((mr.position!==void 0||mr.normal!==void 0||mr.color!==void 0&&we.isWebGL2===!0)&&me.update(z,H,On),(Ni||Oe.receiveShadow!==z.receiveShadow)&&(Oe.receiveShadow=z.receiveShadow,_t.setValue(U,\"receiveShadow\",z.receiveShadow)),L.isMeshGouraudMaterial&&L.envMap!==null&&(Fn.envMap.value=be,Fn.flipEnvMap.value=be.isCubeTexture&&be.isRenderTargetTexture===!1?-1:1),Ni&&(_t.setValue(U,\"toneMappingExposure\",x.toneMappingExposure),Oe.needsLights&&Bl(Fn,pr),le&&L.fog===!0&&j.refreshFogUniforms(Fn,le),j.refreshMaterialUniforms(Fn,L,W,$,_e),vi.upload(U,Oe.uniformsList,Fn,Le)),L.isShaderMaterial&&L.uniformsNeedUpdate===!0&&(vi.upload(U,Oe.uniformsList,Fn,Le),L.uniformsNeedUpdate=!1),L.isSpriteMaterial&&_t.setValue(U,\"center\",z.center),_t.setValue(U,\"modelViewMatrix\",z.modelViewMatrix),_t.setValue(U,\"normalMatrix\",z.normalMatrix),_t.setValue(U,\"modelMatrix\",z.matrixWorld),L.isShaderMaterial||L.isRawShaderMaterial){let Tt=L.uniformsGroups;for(let gr=0,kl=Tt.length;gr<kl;gr++)if(we.isWebGL2){let Sa=Tt[gr];De.update(Sa,On),De.bind(Sa,On)}else console.warn(\"THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.\")}return On}function Bl(M,I){M.ambientLightColor.needsUpdate=I,M.lightProbe.needsUpdate=I,M.directionalLights.needsUpdate=I,M.directionalLightShadows.needsUpdate=I,M.pointLights.needsUpdate=I,M.pointLightShadows.needsUpdate=I,M.spotLights.needsUpdate=I,M.spotLightShadows.needsUpdate=I,M.rectAreaLights.needsUpdate=I,M.hemisphereLights.needsUpdate=I}function zl(M){return M.isMeshLambertMaterial||M.isMeshToonMaterial||M.isMeshPhongMaterial||M.isMeshStandardMaterial||M.isShadowMaterial||M.isShaderMaterial&&M.lights===!0}this.getActiveCubeFace=function(){return E},this.getActiveMipmapLevel=function(){return C},this.getRenderTarget=function(){return w},this.setRenderTargetTextures=function(M,I,H){Fe.get(M.texture).__webglTexture=I,Fe.get(M.depthTexture).__webglTexture=H;let L=Fe.get(M);L.__hasExternalTextures=!0,L.__hasExternalTextures&&(L.__autoAllocateDepthBuffer=H===void 0,L.__autoAllocateDepthBuffer||ve.has(\"WEBGL_multisampled_render_to_texture\")===!0&&(console.warn(\"THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided\"),L.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(M,I){let H=Fe.get(M);H.__webglFramebuffer=I,H.__useDefaultFramebuffer=I===void 0},this.setRenderTarget=function(M,I=0,H=0){w=M,E=I,C=H;let L=!0,z=null,le=!1,ge=!1;if(M){let be=Fe.get(M);be.__useDefaultFramebuffer!==void 0?(Te.bindFramebuffer(U.FRAMEBUFFER,null),L=!1):be.__webglFramebuffer===void 0?Le.setupRenderTarget(M):be.__hasExternalTextures&&Le.rebindTextures(M,Fe.get(M.texture).__webglTexture,Fe.get(M.depthTexture).__webglTexture);let Ne=M.texture;(Ne.isData3DTexture||Ne.isDataArrayTexture||Ne.isCompressedArrayTexture)&&(ge=!0);let Me=Fe.get(M).__webglFramebuffer;M.isWebGLCubeRenderTarget?(Array.isArray(Me[I])?z=Me[I][H]:z=Me[I],le=!0):we.isWebGL2&&M.samples>0&&Le.useMultisampledRTT(M)===!1?z=Fe.get(M).__webglMultisampledFramebuffer:Array.isArray(Me)?z=Me[H]:z=Me,T.copy(M.viewport),Y.copy(M.scissor),ne=M.scissorTest}else T.copy(K).multiplyScalar(W).floor(),Y.copy(D).multiplyScalar(W).floor(),ne=X;if(Te.bindFramebuffer(U.FRAMEBUFFER,z)&&we.drawBuffers&&L&&Te.drawBuffers(M,z),Te.viewport(T),Te.scissor(Y),Te.setScissorTest(ne),le){let be=Fe.get(M.texture);U.framebufferTexture2D(U.FRAMEBUFFER,U.COLOR_ATTACHMENT0,U.TEXTURE_CUBE_MAP_POSITIVE_X+I,be.__webglTexture,H)}else if(ge){let be=Fe.get(M.texture),Ne=I||0;U.framebufferTextureLayer(U.FRAMEBUFFER,U.COLOR_ATTACHMENT0,be.__webglTexture,H||0,Ne)}k=-1},this.readRenderTargetPixels=function(M,I,H,L,z,le,ge){if(!(M&&M.isWebGLRenderTarget)){console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");return}let Se=Fe.get(M).__webglFramebuffer;if(M.isWebGLCubeRenderTarget&&ge!==void 0&&(Se=Se[ge]),Se){Te.bindFramebuffer(U.FRAMEBUFFER,Se);try{let be=M.texture,Ne=be.format,Me=be.type;if(Ne!==Ut&&he.convert(Ne)!==U.getParameter(U.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\");return}let Re=Me===Ji&&(ve.has(\"EXT_color_buffer_half_float\")||we.isWebGL2&&ve.has(\"EXT_color_buffer_float\"));if(Me!==wn&&he.convert(Me)!==U.getParameter(U.IMPLEMENTATION_COLOR_READ_TYPE)&&!(Me===dn&&(we.isWebGL2||ve.has(\"OES_texture_float\")||ve.has(\"WEBGL_color_buffer_float\")))&&!Re){console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\");return}I>=0&&I<=M.width-L&&H>=0&&H<=M.height-z&&U.readPixels(I,H,L,z,he.convert(Ne),he.convert(Me),le)}finally{let be=w!==null?Fe.get(w).__webglFramebuffer:null;Te.bindFramebuffer(U.FRAMEBUFFER,be)}}},this.copyFramebufferToTexture=function(M,I,H=0){let L=Math.pow(2,-H),z=Math.floor(I.image.width*L),le=Math.floor(I.image.height*L);Le.setTexture2D(I,0),U.copyTexSubImage2D(U.TEXTURE_2D,H,0,0,M.x,M.y,z,le),Te.unbindTexture()},this.copyTextureToTexture=function(M,I,H,L=0){let z=I.image.width,le=I.image.height,ge=he.convert(H.format),Se=he.convert(H.type);Le.setTexture2D(H,0),U.pixelStorei(U.UNPACK_FLIP_Y_WEBGL,H.flipY),U.pixelStorei(U.UNPACK_PREMULTIPLY_ALPHA_WEBGL,H.premultiplyAlpha),U.pixelStorei(U.UNPACK_ALIGNMENT,H.unpackAlignment),I.isDataTexture?U.texSubImage2D(U.TEXTURE_2D,L,M.x,M.y,z,le,ge,Se,I.image.data):I.isCompressedTexture?U.compressedTexSubImage2D(U.TEXTURE_2D,L,M.x,M.y,I.mipmaps[0].width,I.mipmaps[0].height,ge,I.mipmaps[0].data):U.texSubImage2D(U.TEXTURE_2D,L,M.x,M.y,ge,Se,I.image),L===0&&H.generateMipmaps&&U.generateMipmap(U.TEXTURE_2D),Te.unbindTexture()},this.copyTextureToTexture3D=function(M,I,H,L,z=0){if(x.isWebGL1Renderer){console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\");return}let le=M.max.x-M.min.x+1,ge=M.max.y-M.min.y+1,Se=M.max.z-M.min.z+1,be=he.convert(L.format),Ne=he.convert(L.type),Me;if(L.isData3DTexture)Le.setTexture3D(L,0),Me=U.TEXTURE_3D;else if(L.isDataArrayTexture)Le.setTexture2DArray(L,0),Me=U.TEXTURE_2D_ARRAY;else{console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\");return}U.pixelStorei(U.UNPACK_FLIP_Y_WEBGL,L.flipY),U.pixelStorei(U.UNPACK_PREMULTIPLY_ALPHA_WEBGL,L.premultiplyAlpha),U.pixelStorei(U.UNPACK_ALIGNMENT,L.unpackAlignment);let Re=U.getParameter(U.UNPACK_ROW_LENGTH),Je=U.getParameter(U.UNPACK_IMAGE_HEIGHT),je=U.getParameter(U.UNPACK_SKIP_PIXELS),Lt=U.getParameter(U.UNPACK_SKIP_ROWS),tn=U.getParameter(U.UNPACK_SKIP_IMAGES),tt=H.isCompressedTexture?H.mipmaps[0]:H.image;U.pixelStorei(U.UNPACK_ROW_LENGTH,tt.width),U.pixelStorei(U.UNPACK_IMAGE_HEIGHT,tt.height),U.pixelStorei(U.UNPACK_SKIP_PIXELS,M.min.x),U.pixelStorei(U.UNPACK_SKIP_ROWS,M.min.y),U.pixelStorei(U.UNPACK_SKIP_IMAGES,M.min.z),H.isDataTexture||H.isData3DTexture?U.texSubImage3D(Me,z,I.x,I.y,I.z,le,ge,Se,be,Ne,tt.data):H.isCompressedArrayTexture?(console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\"),U.compressedTexSubImage3D(Me,z,I.x,I.y,I.z,le,ge,Se,be,tt.data)):U.texSubImage3D(Me,z,I.x,I.y,I.z,le,ge,Se,be,Ne,tt),U.pixelStorei(U.UNPACK_ROW_LENGTH,Re),U.pixelStorei(U.UNPACK_IMAGE_HEIGHT,Je),U.pixelStorei(U.UNPACK_SKIP_PIXELS,je),U.pixelStorei(U.UNPACK_SKIP_ROWS,Lt),U.pixelStorei(U.UNPACK_SKIP_IMAGES,tn),z===0&&L.generateMipmaps&&U.generateMipmap(Me),Te.unbindTexture()},this.initTexture=function(M){M.isCubeTexture?Le.setTextureCube(M,0):M.isData3DTexture?Le.setTexture3D(M,0):M.isDataArrayTexture||M.isCompressedArrayTexture?Le.setTexture2DArray(M,0):Le.setTexture2D(M,0),Te.unbindTexture()},this.resetState=function(){E=0,C=0,w=null,Te.reset(),ue.reset()},typeof __THREE_DEVTOOLS__<\"u\"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}get coordinateSystem(){return fn}get physicallyCorrectLights(){return console.warn(\"THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.\"),!this.useLegacyLights}set physicallyCorrectLights(e){console.warn(\"THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.\"),this.useLegacyLights=!e}get outputEncoding(){return console.warn(\"THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.\"),this.outputColorSpace===xe?qn:gl}set outputEncoding(e){console.warn(\"THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.\"),this.outputColorSpace=e===qn?xe:Nt}get useLegacyLights(){return console.warn(\"THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.\"),this._useLegacyLights}set useLegacyLights(e){console.warn(\"THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.\"),this._useLegacyLights=e}},yo=class extends xo{};yo.prototype.isWebGL1Renderer=!0;var es=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=jr,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Wt()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let i=0,r=this.stride;i<r;i++)this.array[e+i]=t.array[n+i];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){e.arrayBuffers===void 0&&(e.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Wt()),e.arrayBuffers[this.array.buffer._uuid]===void 0&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(t,this.stride);return n.setUsage(this.usage),n}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return e.arrayBuffers===void 0&&(e.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Wt()),e.arrayBuffers[this.array.buffer._uuid]===void 0&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},xt=new P,ts=class s{constructor(e,t,n,i=!1){this.isInterleavedBufferAttribute=!0,this.name=\"\",this.data=e,this.itemSize=t,this.offset=n,this.normalized=i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,n=this.data.count;t<n;t++)xt.fromBufferAttribute(this,t),xt.applyMatrix4(e),this.setXYZ(t,xt.x,xt.y,xt.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)xt.fromBufferAttribute(this,t),xt.applyNormalMatrix(e),this.setXYZ(t,xt.x,xt.y,xt.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)xt.fromBufferAttribute(this,t),xt.transformDirection(e),this.setXYZ(t,xt.x,xt.y,xt.z);return this}setX(e,t){return this.normalized&&(t=Ve(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=Ve(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=Ve(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=Ve(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=Jt(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=Jt(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=Jt(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=Jt(t,this.array)),t}setXY(e,t,n){return e=e*this.data.stride+this.offset,this.normalized&&(t=Ve(t,this.array),n=Ve(n,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this}setXYZ(e,t,n,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=Ve(t,this.array),n=Ve(n,this.array),i=Ve(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=i,this}setXYZW(e,t,n,i,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=Ve(t,this.array),n=Ve(n,this.array),i=Ve(i,this.array),r=Ve(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=i,this.data.array[e+3]=r,this}clone(e){if(e===void 0){console.log(\"THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.\");let t=[];for(let n=0;n<this.count;n++){let i=n*this.data.stride+this.offset;for(let r=0;r<this.itemSize;r++)t.push(this.data.array[i+r])}return new $e(new this.array.constructor(t),this.itemSize,this.normalized)}else return e.interleavedBuffers===void 0&&(e.interleavedBuffers={}),e.interleavedBuffers[this.data.uuid]===void 0&&(e.interleavedBuffers[this.data.uuid]=this.data.clone(e)),new s(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(e){if(e===void 0){console.log(\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.\");let t=[];for(let n=0;n<this.count;n++){let i=n*this.data.stride+this.offset;for(let r=0;r<this.itemSize;r++)t.push(this.data.array[i+r])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}else return e.interleavedBuffers===void 0&&(e.interleavedBuffers={}),e.interleavedBuffers[this.data.uuid]===void 0&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}};var zc=new P,kc=new We,Hc=new We,Wm=new P,Vc=new Ue,fi=new P,Wr=new Ct,Gc=new Ue,Xr=new Ei,Js=class extends Mt{constructor(e,t){super(e,t),this.isSkinnedMesh=!0,this.type=\"SkinnedMesh\",this.bindMode=\"attached\",this.bindMatrix=new Ue,this.bindMatrixInverse=new Ue,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){let e=this.geometry;this.boundingBox===null&&(this.boundingBox=new Ot),this.boundingBox.makeEmpty();let t=e.getAttribute(\"position\");for(let n=0;n<t.count;n++)fi.fromBufferAttribute(t,n),this.applyBoneTransform(n,fi),this.boundingBox.expandByPoint(fi)}computeBoundingSphere(){let e=this.geometry;this.boundingSphere===null&&(this.boundingSphere=new Ct),this.boundingSphere.makeEmpty();let t=e.getAttribute(\"position\");for(let n=0;n<t.count;n++)fi.fromBufferAttribute(t,n),this.applyBoneTransform(n,fi),this.boundingSphere.expandByPoint(fi)}copy(e,t){return super.copy(e,t),this.bindMode=e.bindMode,this.bindMatrix.copy(e.bindMatrix),this.bindMatrixInverse.copy(e.bindMatrixInverse),this.skeleton=e.skeleton,e.boundingBox!==null&&(this.boundingBox=e.boundingBox.clone()),e.boundingSphere!==null&&(this.boundingSphere=e.boundingSphere.clone()),this}raycast(e,t){let n=this.material,i=this.matrixWorld;n!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),Wr.copy(this.boundingSphere),Wr.applyMatrix4(i),e.ray.intersectsSphere(Wr)!==!1&&(Gc.copy(i).invert(),Xr.copy(e.ray).applyMatrix4(Gc),!(this.boundingBox!==null&&Xr.intersectsBox(this.boundingBox)===!1)&&this._computeIntersections(e,t,Xr)))}getVertexPosition(e,t){return super.getVertexPosition(e,t),this.applyBoneTransform(e,t),t}bind(e,t){this.skeleton=e,t===void 0&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){let e=new We,t=this.geometry.attributes.skinWeight;for(let n=0,i=t.count;n<i;n++){e.fromBufferAttribute(t,n);let r=1/e.manhattanLength();r!==1/0?e.multiplyScalar(r):e.set(1,0,0,0),t.setXYZW(n,e.x,e.y,e.z,e.w)}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.bindMode===\"attached\"?this.bindMatrixInverse.copy(this.matrixWorld).invert():this.bindMode===\"detached\"?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\"THREE.SkinnedMesh: Unrecognized bindMode: \"+this.bindMode)}applyBoneTransform(e,t){let n=this.skeleton,i=this.geometry;kc.fromBufferAttribute(i.attributes.skinIndex,e),Hc.fromBufferAttribute(i.attributes.skinWeight,e),zc.copy(t).applyMatrix4(this.bindMatrix),t.set(0,0,0);for(let r=0;r<4;r++){let o=Hc.getComponent(r);if(o!==0){let a=kc.getComponent(r);Vc.multiplyMatrices(n.bones[a].matrixWorld,n.boneInverses[a]),t.addScaledVector(Wm.copy(zc).applyMatrix4(Vc),o)}}return t.applyMatrix4(this.bindMatrixInverse)}boneTransform(e,t){return console.warn(\"THREE.SkinnedMesh: .boneTransform() was renamed to .applyBoneTransform() in r151.\"),this.applyBoneTransform(e,t)}},ns=class extends Qe{constructor(){super(),this.isBone=!0,this.type=\"Bone\"}},vo=class extends mt{constructor(e=null,t=1,n=1,i,r,o,a,c,l=st,h=st,u,d){super(null,o,a,c,l,h,i,r,u,d),this.isDataTexture=!0,this.image={data:e,width:t,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},Wc=new Ue,Xm=new Ue,$s=class s{constructor(e=[],t=[]){this.uuid=Wt(),this.bones=e.slice(0),this.boneInverses=t,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.init()}init(){let e=this.bones,t=this.boneInverses;if(this.boneMatrices=new Float32Array(e.length*16),t.length===0)this.calculateInverses();else if(e.length!==t.length){console.warn(\"THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.\"),this.boneInverses=[];for(let n=0,i=this.bones.length;n<i;n++)this.boneInverses.push(new Ue)}}calculateInverses(){this.boneInverses.length=0;for(let e=0,t=this.bones.length;e<t;e++){let n=new Ue;this.bones[e]&&n.copy(this.bones[e].matrixWorld).invert(),this.boneInverses.push(n)}}pose(){for(let e=0,t=this.bones.length;e<t;e++){let n=this.bones[e];n&&n.matrixWorld.copy(this.boneInverses[e]).invert()}for(let e=0,t=this.bones.length;e<t;e++){let n=this.bones[e];n&&(n.parent&&n.parent.isBone?(n.matrix.copy(n.parent.matrixWorld).invert(),n.matrix.multiply(n.matrixWorld)):n.matrix.copy(n.matrixWorld),n.matrix.decompose(n.position,n.quaternion,n.scale))}}update(){let e=this.bones,t=this.boneInverses,n=this.boneMatrices,i=this.boneTexture;for(let r=0,o=e.length;r<o;r++){let a=e[r]?e[r].matrixWorld:Xm;Wc.multiplyMatrices(a,t[r]),Wc.toArray(n,r*16)}i!==null&&(i.needsUpdate=!0)}clone(){return new s(this.bones,this.boneInverses)}computeBoneTexture(){let e=Math.sqrt(this.bones.length*4);e=yl(e),e=Math.max(e,4);let t=new Float32Array(e*e*4);t.set(this.boneMatrices);let n=new vo(t,e,e,Ut,dn);return n.needsUpdate=!0,this.boneMatrices=t,this.boneTexture=n,this.boneTextureSize=e,this}getBoneByName(e){for(let t=0,n=this.bones.length;t<n;t++){let i=this.bones[t];if(i.name===e)return i}}dispose(){this.boneTexture!==null&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(e,t){this.uuid=e.uuid;for(let n=0,i=e.bones.length;n<i;n++){let r=e.bones[n],o=t[r];o===void 0&&(console.warn(\"THREE.Skeleton: No bone found with UUID:\",r),o=new ns),this.bones.push(o),this.boneInverses.push(new Ue().fromArray(e.boneInverses[n]))}return this.init(),this}toJSON(){let e={metadata:{version:4.6,type:\"Skeleton\",generator:\"Skeleton.toJSON\"},bones:[],boneInverses:[]};e.uuid=this.uuid;let t=this.bones,n=this.boneInverses;for(let i=0,r=t.length;i<r;i++){let o=t[i];e.bones.push(o.uuid);let a=n[i];e.boneInverses.push(a.toArray())}return e}},is=class extends $e{constructor(e,t,n,i=1){super(e,t,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=i}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}},pi=new Ue,Xc=new Ue,Is=[],qc=new Ot,qm=new Ue,ki=new Mt,Hi=new Ct,js=class extends Mt{constructor(e,t,n){super(e,t),this.isInstancedMesh=!0,this.instanceMatrix=new is(new Float32Array(n*16),16),this.instanceColor=null,this.count=n,this.boundingBox=null,this.boundingSphere=null;for(let i=0;i<n;i++)this.setMatrixAt(i,qm)}computeBoundingBox(){let e=this.geometry,t=this.count;this.boundingBox===null&&(this.boundingBox=new Ot),e.boundingBox===null&&e.computeBoundingBox(),this.boundingBox.makeEmpty();for(let n=0;n<t;n++)this.getMatrixAt(n,pi),qc.copy(e.boundingBox).applyMatrix4(pi),this.boundingBox.union(qc)}computeBoundingSphere(){let e=this.geometry,t=this.count;this.boundingSphere===null&&(this.boundingSphere=new Ct),e.boundingSphere===null&&e.computeBoundingSphere(),this.boundingSphere.makeEmpty();for(let n=0;n<t;n++)this.getMatrixAt(n,pi),Hi.copy(e.boundingSphere).applyMatrix4(pi),this.boundingSphere.union(Hi)}copy(e,t){return super.copy(e,t),this.instanceMatrix.copy(e.instanceMatrix),e.instanceColor!==null&&(this.instanceColor=e.instanceColor.clone()),this.count=e.count,e.boundingBox!==null&&(this.boundingBox=e.boundingBox.clone()),e.boundingSphere!==null&&(this.boundingSphere=e.boundingSphere.clone()),this}getColorAt(e,t){t.fromArray(this.instanceColor.array,e*3)}getMatrixAt(e,t){t.fromArray(this.instanceMatrix.array,e*16)}raycast(e,t){let n=this.matrixWorld,i=this.count;if(ki.geometry=this.geometry,ki.material=this.material,ki.material!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),Hi.copy(this.boundingSphere),Hi.applyMatrix4(n),e.ray.intersectsSphere(Hi)!==!1))for(let r=0;r<i;r++){this.getMatrixAt(r,pi),Xc.multiplyMatrices(n,pi),ki.matrixWorld=Xc,ki.raycast(e,Is);for(let o=0,a=Is.length;o<a;o++){let c=Is[o];c.instanceId=r,c.object=this,t.push(c)}Is.length=0}}setColorAt(e,t){this.instanceColor===null&&(this.instanceColor=new is(new Float32Array(this.instanceMatrix.count*3),3)),t.toArray(this.instanceColor.array,e*3)}setMatrixAt(e,t){t.toArray(this.instanceMatrix.array,e*16)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\"dispose\"})}},ss=class extends Pt{constructor(e){super(),this.isLineBasicMaterial=!0,this.type=\"LineBasicMaterial\",this.color=new Ae(16777215),this.map=null,this.linewidth=1,this.linecap=\"round\",this.linejoin=\"round\",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},Yc=new P,Zc=new P,Kc=new Ue,qr=new Ei,Us=new Ct,Ci=class extends Qe{constructor(e=new At,t=new ss){super(),this.isLine=!0,this.type=\"Line\",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[0];for(let i=1,r=t.count;i<r;i++)Yc.fromBufferAttribute(t,i-1),Zc.fromBufferAttribute(t,i),n[i]=n[i-1],n[i]+=Yc.distanceTo(Zc);e.setAttribute(\"lineDistance\",new Dt(n,1))}else console.warn(\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");return this}raycast(e,t){let n=this.geometry,i=this.matrixWorld,r=e.params.Line.threshold,o=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),Us.copy(n.boundingSphere),Us.applyMatrix4(i),Us.radius+=r,e.ray.intersectsSphere(Us)===!1)return;Kc.copy(i).invert(),qr.copy(e.ray).applyMatrix4(Kc);let a=r/((this.scale.x+this.scale.y+this.scale.z)/3),c=a*a,l=new P,h=new P,u=new P,d=new P,p=this.isLineSegments?2:1,g=n.index,m=n.attributes.position;if(g!==null){let f=Math.max(0,o.start),S=Math.min(g.count,o.start+o.count);for(let x=f,A=S-1;x<A;x+=p){let E=g.getX(x),C=g.getX(x+1);if(l.fromBufferAttribute(m,E),h.fromBufferAttribute(m,C),qr.distanceSqToSegment(l,h,d,u)>c)continue;d.applyMatrix4(this.matrixWorld);let k=e.ray.origin.distanceTo(d);k<e.near||k>e.far||t.push({distance:k,point:u.clone().applyMatrix4(this.matrixWorld),index:x,face:null,faceIndex:null,object:this})}}else{let f=Math.max(0,o.start),S=Math.min(m.count,o.start+o.count);for(let x=f,A=S-1;x<A;x+=p){if(l.fromBufferAttribute(m,x),h.fromBufferAttribute(m,x+1),qr.distanceSqToSegment(l,h,d,u)>c)continue;d.applyMatrix4(this.matrixWorld);let C=e.ray.origin.distanceTo(d);C<e.near||C>e.far||t.push({distance:C,point:u.clone().applyMatrix4(this.matrixWorld),index:x,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let i=t[n[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=i.length;r<o;r++){let a=i[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=r}}}}},Jc=new P,$c=new P,Qs=class extends Ci{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=\"LineSegments\"}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let i=0,r=t.count;i<r;i+=2)Jc.fromBufferAttribute(t,i),$c.fromBufferAttribute(t,i+1),n[i]=i===0?0:n[i-1],n[i+1]=n[i]+Jc.distanceTo($c);e.setAttribute(\"lineDistance\",new Dt(n,1))}else console.warn(\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");return this}},er=class extends Ci{constructor(e,t){super(e,t),this.isLineLoop=!0,this.type=\"LineLoop\"}},rs=class extends Pt{constructor(e){super(),this.isPointsMaterial=!0,this.type=\"PointsMaterial\",this.color=new Ae(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.size=e.size,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}},jc=new Ue,Mo=new Ei,Ds=new Ct,Ns=new P,tr=class extends Qe{constructor(e=new At,t=new rs){super(),this.isPoints=!0,this.type=\"Points\",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=e.material,this.geometry=e.geometry,this}raycast(e,t){let n=this.geometry,i=this.matrixWorld,r=e.params.Points.threshold,o=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),Ds.copy(n.boundingSphere),Ds.applyMatrix4(i),Ds.radius+=r,e.ray.intersectsSphere(Ds)===!1)return;jc.copy(i).invert(),Mo.copy(e.ray).applyMatrix4(jc);let a=r/((this.scale.x+this.scale.y+this.scale.z)/3),c=a*a,l=n.index,u=n.attributes.position;if(l!==null){let d=Math.max(0,o.start),p=Math.min(l.count,o.start+o.count);for(let g=d,_=p;g<_;g++){let m=l.getX(g);Ns.fromBufferAttribute(u,m),Qc(Ns,m,c,i,e,t,this)}}else{let d=Math.max(0,o.start),p=Math.min(u.count,o.start+o.count);for(let g=d,_=p;g<_;g++)Ns.fromBufferAttribute(u,g),Qc(Ns,g,c,i,e,t,this)}}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let i=t[n[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=i.length;r<o;r++){let a=i[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=r}}}}};function Qc(s,e,t,n,i,r,o){let a=Mo.distanceSqToPoint(s);if(a<t){let c=new P;Mo.closestPointToPoint(s,c),c.applyMatrix4(n);let l=i.ray.origin.distanceTo(c);if(l<i.near||l>i.far)return;r.push({distance:l,distanceToRay:Math.sqrt(a),point:c,index:e,face:null,object:o})}}var Pi=class extends Pt{constructor(e){super(),this.isMeshStandardMaterial=!0,this.defines={STANDARD:\"\"},this.type=\"MeshStandardMaterial\",this.color=new Ae(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ae(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=_l,this.normalScale=new Be(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:\"\"},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},qt=class extends Pi{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.type=\"MeshPhysicalMaterial\",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Be(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,\"reflectivity\",{get:function(){return pt(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Ae(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Ae(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Ae(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}};function bn(s,e,t){return Cl(s)?new s.constructor(s.subarray(e,t!==void 0?t:s.length)):s.slice(e,t)}function Os(s,e,t){return!s||!t&&s.constructor===e?s:typeof e.BYTES_PER_ELEMENT==\"number\"?new e(s):Array.prototype.slice.call(s)}function Cl(s){return ArrayBuffer.isView(s)&&!(s instanceof DataView)}function Ym(s){function e(i,r){return s[i]-s[r]}let t=s.length,n=new Array(t);for(let i=0;i!==t;++i)n[i]=i;return n.sort(e),n}function el(s,e,t){let n=s.length,i=new s.constructor(n);for(let r=0,o=0;o!==n;++r){let a=t[r]*e;for(let c=0;c!==e;++c)i[o++]=s[a+c]}return i}function Pl(s,e,t,n){let i=1,r=s[0];for(;r!==void 0&&r[n]===void 0;)r=s[i++];if(r===void 0)return;let o=r[n];if(o!==void 0)if(Array.isArray(o))do o=r[n],o!==void 0&&(e.push(r.time),t.push.apply(t,o)),r=s[i++];while(r!==void 0);else if(o.toArray!==void 0)do o=r[n],o!==void 0&&(e.push(r.time),o.toArray(t,t.length)),r=s[i++];while(r!==void 0);else do o=r[n],o!==void 0&&(e.push(r.time),t.push(o)),r=s[i++];while(r!==void 0)}var Pn=class{constructor(e,t,n,i){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=i!==void 0?i:new t.constructor(n),this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,i=t[n],r=t[n-1];n:{e:{let o;t:{i:if(!(e<i)){for(let a=n+2;;){if(i===void 0){if(e<r)break i;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(r=i,i=t[++n],e<i)break e}o=t.length;break t}if(!(e>=r)){let a=t[1];e<a&&(n=2,r=a);for(let c=n-2;;){if(r===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===c)break;if(i=r,r=t[--n-1],e>=r)break e}o=n,n=0;break t}break n}for(;n<o;){let a=n+o>>>1;e<t[a]?o=a:n=a+1}if(i=t[n],r=t[n-1],r===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(i===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,e,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=e*i;for(let o=0;o!==i;++o)t[o]=n[r+o];return t}interpolate_(){throw new Error(\"call to abstract method\")}intervalChanged_(){}},So=class extends Pn{constructor(e,t,n,i){super(e,t,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ja,endingEnd:ja}}intervalChanged_(e,t,n){let i=this.parameterPositions,r=e-2,o=e+1,a=i[r],c=i[o];if(a===void 0)switch(this.getSettings_().endingStart){case Qa:r=e,a=2*t-n;break;case ec:r=i.length-2,a=t+i[r]-i[r+1];break;default:r=e,a=n}if(c===void 0)switch(this.getSettings_().endingEnd){case Qa:o=e,c=2*n-t;break;case ec:o=1,c=n+i[1]-i[0];break;default:o=e-1,c=t}let l=(n-t)*.5,h=this.valueSize;this._weightPrev=l/(t-a),this._weightNext=l/(c-n),this._offsetPrev=r*h,this._offsetNext=o*h}interpolate_(e,t,n,i){let r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,c=e*a,l=c-a,h=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,p=this._weightNext,g=(n-t)/(i-t),_=g*g,m=_*g,f=-d*m+2*d*_-d*g,S=(1+d)*m+(-1.5-2*d)*_+(-.5+d)*g+1,x=(-1-p)*m+(1.5+p)*_+.5*g,A=p*m-p*_;for(let E=0;E!==a;++E)r[E]=f*o[h+E]+S*o[l+E]+x*o[c+E]+A*o[u+E];return r}},bo=class extends Pn{constructor(e,t,n,i){super(e,t,n,i)}interpolate_(e,t,n,i){let r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,c=e*a,l=c-a,h=(n-t)/(i-t),u=1-h;for(let d=0;d!==a;++d)r[d]=o[l+d]*u+o[c+d]*h;return r}},Ao=class extends Pn{constructor(e,t,n,i){super(e,t,n,i)}interpolate_(e){return this.copySampleValue_(e-1)}},Ft=class{constructor(e,t,n,i){if(e===void 0)throw new Error(\"THREE.KeyframeTrack: track name is undefined\");if(t===void 0||t.length===0)throw new Error(\"THREE.KeyframeTrack: no keyframes in track named \"+e);this.name=e,this.times=Os(t,this.TimeBufferType),this.values=Os(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:Os(e.times,Array),values:Os(e.values,Array)};let i=e.getInterpolation();i!==e.DefaultInterpolation&&(n.interpolation=i)}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new Ao(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new bo(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new So(this.times,this.values,this.getValueSize(),e)}setInterpolation(e){let t;switch(e){case Ai:t=this.InterpolantFactoryMethodDiscrete;break;case Kn:t=this.InterpolantFactoryMethodLinear;break;case Sr:t=this.InterpolantFactoryMethodSmooth;break}if(t===void 0){let n=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(this.createInterpolant===void 0)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(n);return console.warn(\"THREE.KeyframeTrack:\",n),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return Ai;case this.InterpolantFactoryMethodLinear:return Kn;case this.InterpolantFactoryMethodSmooth:return Sr}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,i=t.length;n!==i;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,i=t.length;n!==i;++n)t[n]*=e}return this}trim(e,t){let n=this.times,i=n.length,r=0,o=i-1;for(;r!==i&&n[r]<e;)++r;for(;o!==-1&&n[o]>t;)--o;if(++o,r!==0||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);let a=this.getValueSize();this.times=bn(n,r,o),this.values=bn(this.values,r*a,o*a)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(console.error(\"THREE.KeyframeTrack: Invalid value size in track.\",this),e=!1);let n=this.times,i=this.values,r=n.length;r===0&&(console.error(\"THREE.KeyframeTrack: Track is empty.\",this),e=!1);let o=null;for(let a=0;a!==r;a++){let c=n[a];if(typeof c==\"number\"&&isNaN(c)){console.error(\"THREE.KeyframeTrack: Time is not a valid number.\",this,a,c),e=!1;break}if(o!==null&&o>c){console.error(\"THREE.KeyframeTrack: Out of order keys.\",this,a,c,o),e=!1;break}o=c}if(i!==void 0&&Cl(i))for(let a=0,c=i.length;a!==c;++a){let l=i[a];if(isNaN(l)){console.error(\"THREE.KeyframeTrack: Value is not a valid number.\",this,a,l),e=!1;break}}return e}optimize(){let e=bn(this.times),t=bn(this.values),n=this.getValueSize(),i=this.getInterpolation()===Sr,r=e.length-1,o=1;for(let a=1;a<r;++a){let c=!1,l=e[a],h=e[a+1];if(l!==h&&(a!==1||l!==e[0]))if(i)c=!0;else{let u=a*n,d=u-n,p=u+n;for(let g=0;g!==n;++g){let _=t[u+g];if(_!==t[d+g]||_!==t[p+g]){c=!0;break}}}if(c){if(a!==o){e[o]=e[a];let u=a*n,d=o*n;for(let p=0;p!==n;++p)t[d+p]=t[u+p]}++o}}if(r>0){e[o]=e[r];for(let a=r*n,c=o*n,l=0;l!==n;++l)t[c+l]=t[a+l];++o}return o!==e.length?(this.times=bn(e,0,o),this.values=bn(t,0,o*n)):(this.times=e,this.values=t),this}clone(){let e=bn(this.times,0),t=bn(this.values,0),n=this.constructor,i=new n(this.name,e,t);return i.createInterpolant=this.createInterpolant,i}};Ft.prototype.TimeBufferType=Float32Array;Ft.prototype.ValueBufferType=Float32Array;Ft.prototype.DefaultInterpolation=Kn;var Ln=class extends Ft{};Ln.prototype.ValueTypeName=\"bool\";Ln.prototype.ValueBufferType=Array;Ln.prototype.DefaultInterpolation=Ai;Ln.prototype.InterpolantFactoryMethodLinear=void 0;Ln.prototype.InterpolantFactoryMethodSmooth=void 0;var nr=class extends Ft{};nr.prototype.ValueTypeName=\"color\";var gn=class extends Ft{};gn.prototype.ValueTypeName=\"number\";var To=class extends Pn{constructor(e,t,n,i){super(e,t,n,i)}interpolate_(e,t,n,i){let r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,c=(n-t)/(i-t),l=e*a;for(let h=l+a;l!==h;l+=4)Xt.slerpFlat(r,0,o,l-a,o,l,c);return r}},en=class extends Ft{InterpolantFactoryMethodLinear(e){return new To(this.times,this.values,this.getValueSize(),e)}};en.prototype.ValueTypeName=\"quaternion\";en.prototype.DefaultInterpolation=Kn;en.prototype.InterpolantFactoryMethodSmooth=void 0;var In=class extends Ft{};In.prototype.ValueTypeName=\"string\";In.prototype.ValueBufferType=Array;In.prototype.DefaultInterpolation=Ai;In.prototype.InterpolantFactoryMethodLinear=void 0;In.prototype.InterpolantFactoryMethodSmooth=void 0;var _n=class extends Ft{};_n.prototype.ValueTypeName=\"vector\";var ir=class{constructor(e,t=-1,n,i=Th){this.name=e,this.tracks=n,this.duration=t,this.blendMode=i,this.uuid=Wt(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,i=1/(e.fps||1);for(let o=0,a=n.length;o!==a;++o)t.push(Km(n[o]).scale(i));let r=new this(e.name,e.duration,t,e.blendMode);return r.uuid=e.uuid,r}static toJSON(e){let t=[],n=e.tracks,i={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let r=0,o=n.length;r!==o;++r)t.push(Ft.toJSON(n[r]));return i}static CreateFromMorphTargetSequence(e,t,n,i){let r=t.length,o=[];for(let a=0;a<r;a++){let c=[],l=[];c.push((a+r-1)%r,a,(a+1)%r),l.push(0,1,0);let h=Ym(c);c=el(c,1,h),l=el(l,1,h),!i&&c[0]===0&&(c.push(r),l.push(l[0])),o.push(new gn(\".morphTargetInfluences[\"+t[a].name+\"]\",c,l).scale(1/n))}return new this(e,-1,o)}static findByName(e,t){let n=e;if(!Array.isArray(e)){let i=e;n=i.geometry&&i.geometry.animations||i.animations}for(let i=0;i<n.length;i++)if(n[i].name===t)return n[i];return null}static CreateClipsFromMorphTargetSequences(e,t,n){let i={},r=/^([\\w-]*?)([\\d]+)$/;for(let a=0,c=e.length;a<c;a++){let l=e[a],h=l.name.match(r);if(h&&h.length>1){let u=h[1],d=i[u];d||(i[u]=d=[]),d.push(l)}}let o=[];for(let a in i)o.push(this.CreateFromMorphTargetSequence(a,i[a],t,n));return o}static parseAnimation(e,t){if(!e)return console.error(\"THREE.AnimationClip: No animation in JSONLoader data.\"),null;let n=function(u,d,p,g,_){if(p.length!==0){let m=[],f=[];Pl(p,m,f,g),m.length!==0&&_.push(new u(d,m,f))}},i=[],r=e.name||\"default\",o=e.fps||30,a=e.blendMode,c=e.length||-1,l=e.hierarchy||[];for(let u=0;u<l.length;u++){let d=l[u].keys;if(!(!d||d.length===0))if(d[0].morphTargets){let p={},g;for(g=0;g<d.length;g++)if(d[g].morphTargets)for(let _=0;_<d[g].morphTargets.length;_++)p[d[g].morphTargets[_]]=-1;for(let _ in p){let m=[],f=[];for(let S=0;S!==d[g].morphTargets.length;++S){let x=d[g];m.push(x.time),f.push(x.morphTarget===_?1:0)}i.push(new gn(\".morphTargetInfluence[\"+_+\"]\",m,f))}c=p.length*o}else{let p=\".bones[\"+t[u].name+\"]\";n(_n,p+\".position\",d,\"pos\",i),n(en,p+\".quaternion\",d,\"rot\",i),n(_n,p+\".scale\",d,\"scl\",i)}}return i.length===0?null:new this(r,c,i,a)}resetDuration(){let e=this.tracks,t=0;for(let n=0,i=e.length;n!==i;++n){let r=this.tracks[n];t=Math.max(t,r.times[r.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this}validate(){let e=!0;for(let t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e}optimize(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}clone(){let e=[];for(let t=0;t<this.tracks.length;t++)e.push(this.tracks[t].clone());return new this.constructor(this.name,this.duration,e,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}};function Zm(s){switch(s.toLowerCase()){case\"scalar\":case\"double\":case\"float\":case\"number\":case\"integer\":return gn;case\"vector\":case\"vector2\":case\"vector3\":case\"vector4\":return _n;case\"color\":return nr;case\"quaternion\":return en;case\"bool\":case\"boolean\":return Ln;case\"string\":return In}throw new Error(\"THREE.KeyframeTrack: Unsupported typeName: \"+s)}function Km(s){if(s.type===void 0)throw new Error(\"THREE.KeyframeTrack: track type undefined, can not parse\");let e=Zm(s.type);if(s.times===void 0){let t=[],n=[];Pl(s.keys,t,n,\"value\"),s.times=t,s.values=n}return e.parse!==void 0?e.parse(s):new e(s.name,s.times,s.values,s.interpolation)}var Li={enabled:!1,files:{},add:function(s,e){this.enabled!==!1&&(this.files[s]=e)},get:function(s){if(this.enabled!==!1)return this.files[s]},remove:function(s){delete this.files[s]},clear:function(){this.files={}}},Eo=class{constructor(e,t,n){let i=this,r=!1,o=0,a=0,c,l=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this.itemStart=function(h){a++,r===!1&&i.onStart!==void 0&&i.onStart(h,o,a),r=!0},this.itemEnd=function(h){o++,i.onProgress!==void 0&&i.onProgress(h,o,a),o===a&&(r=!1,i.onLoad!==void 0&&i.onLoad())},this.itemError=function(h){i.onError!==void 0&&i.onError(h)},this.resolveURL=function(h){return c?c(h):h},this.setURLModifier=function(h){return c=h,this},this.addHandler=function(h,u){return l.push(h,u),this},this.removeHandler=function(h){let u=l.indexOf(h);return u!==-1&&l.splice(u,2),this},this.getHandler=function(h){for(let u=0,d=l.length;u<d;u+=2){let p=l[u],g=l[u+1];if(p.global&&(p.lastIndex=0),p.test(h))return g}return null}}},Jm=new Eo,Yt=class{constructor(e){this.manager=e!==void 0?e:Jm,this.crossOrigin=\"anonymous\",this.withCredentials=!1,this.path=\"\",this.resourcePath=\"\",this.requestHeader={}}load(){}loadAsync(e,t){let n=this;return new Promise(function(i,r){n.load(e,i,t,r)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}};Yt.DEFAULT_MATERIAL_NAME=\"__DEFAULT\";var ln={},wo=class extends Error{constructor(e,t){super(e),this.response=t}},Un=class extends Yt{constructor(e){super(e)}load(e,t,n,i){e===void 0&&(e=\"\"),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let r=Li.get(e);if(r!==void 0)return this.manager.itemStart(e),setTimeout(()=>{t&&t(r),this.manager.itemEnd(e)},0),r;if(ln[e]!==void 0){ln[e].push({onLoad:t,onProgress:n,onError:i});return}ln[e]=[],ln[e].push({onLoad:t,onProgress:n,onError:i});let o=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?\"include\":\"same-origin\"}),a=this.mimeType,c=this.responseType;fetch(o).then(l=>{if(l.status===200||l.status===0){if(l.status===0&&console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),typeof ReadableStream>\"u\"||l.body===void 0||l.body.getReader===void 0)return l;let h=ln[e],u=l.body.getReader(),d=l.headers.get(\"Content-Length\")||l.headers.get(\"X-File-Size\"),p=d?parseInt(d):0,g=p!==0,_=0,m=new ReadableStream({start(f){S();function S(){u.read().then(({done:x,value:A})=>{if(x)f.close();else{_+=A.byteLength;let E=new ProgressEvent(\"progress\",{lengthComputable:g,loaded:_,total:p});for(let C=0,w=h.length;C<w;C++){let k=h[C];k.onProgress&&k.onProgress(E)}f.enqueue(A),S()}})}}});return new Response(m)}else throw new wo(`fetch for \"${l.url}\" responded with ${l.status}: ${l.statusText}`,l)}).then(l=>{switch(c){case\"arraybuffer\":return l.arrayBuffer();case\"blob\":return l.blob();case\"document\":return l.text().then(h=>new DOMParser().parseFromString(h,a));case\"json\":return l.json();default:if(a===void 0)return l.text();{let u=/charset=\"?([^;\"\\s]*)\"?/i.exec(a),d=u&&u[1]?u[1].toLowerCase():void 0,p=new TextDecoder(d);return l.arrayBuffer().then(g=>p.decode(g))}}}).then(l=>{Li.add(e,l);let h=ln[e];delete ln[e];for(let u=0,d=h.length;u<d;u++){let p=h[u];p.onLoad&&p.onLoad(l)}}).catch(l=>{let h=ln[e];if(h===void 0)throw this.manager.itemError(e),l;delete ln[e];for(let u=0,d=h.length;u<d;u++){let p=h[u];p.onError&&p.onError(l)}this.manager.itemError(e)}).finally(()=>{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}};var Ro=class extends Yt{constructor(e){super(e)}load(e,t,n,i){this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let r=this,o=Li.get(e);if(o!==void 0)return r.manager.itemStart(e),setTimeout(function(){t&&t(o),r.manager.itemEnd(e)},0),o;let a=$i(\"img\");function c(){h(),Li.add(e,this),t&&t(this),r.manager.itemEnd(e)}function l(u){h(),i&&i(u),r.manager.itemError(e),r.manager.itemEnd(e)}function h(){a.removeEventListener(\"load\",c,!1),a.removeEventListener(\"error\",l,!1)}return a.addEventListener(\"load\",c,!1),a.addEventListener(\"error\",l,!1),e.slice(0,5)!==\"data:\"&&this.crossOrigin!==void 0&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(e),a.src=e,a}};var sr=class extends Yt{constructor(e){super(e)}load(e,t,n,i){let r=new mt,o=new Ro(this.manager);return o.setCrossOrigin(this.crossOrigin),o.setPath(this.path),o.load(e,function(a){r.image=a,r.needsUpdate=!0,t!==void 0&&t(r)},n,i),r}},os=class extends Qe{constructor(e,t=1){super(),this.isLight=!0,this.type=\"Light\",this.color=new Ae(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,this.groundColor!==void 0&&(t.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(t.object.distance=this.distance),this.angle!==void 0&&(t.object.angle=this.angle),this.decay!==void 0&&(t.object.decay=this.decay),this.penumbra!==void 0&&(t.object.penumbra=this.penumbra),this.shadow!==void 0&&(t.object.shadow=this.shadow.toJSON()),t}};var Yr=new Ue,tl=new P,nl=new P,as=class{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Be(512,512),this.map=null,this.mapPass=null,this.matrix=new Ue,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Qi,this._frameExtents=new Be(1,1),this._viewportCount=1,this._viewports=[new We(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,n=this.matrix;tl.setFromMatrixPosition(e.matrixWorld),t.position.copy(tl),nl.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(nl),t.updateMatrixWorld(),Yr.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Yr),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(Yr)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return this.bias!==0&&(e.bias=this.bias),this.normalBias!==0&&(e.normalBias=this.normalBias),this.radius!==1&&(e.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},Co=class extends as{constructor(){super(new lt(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,n=Ti*2*e.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=e.distance||t.far;(n!==t.fov||i!==t.aspect||r!==t.far)&&(t.fov=n,t.aspect=i,t.far=r,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}},rr=class extends os{constructor(e,t,n=0,i=Math.PI/3,r=0,o=2){super(e,t),this.isSpotLight=!0,this.type=\"SpotLight\",this.position.copy(Qe.DEFAULT_UP),this.updateMatrix(),this.target=new Qe,this.distance=n,this.angle=i,this.penumbra=r,this.decay=o,this.map=null,this.shadow=new Co}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},il=new Ue,Vi=new P,Zr=new P,Po=class extends as{constructor(){super(new lt(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new Be(4,2),this._viewportCount=6,this._viewports=[new We(2,1,1,1),new We(0,1,1,1),new We(3,1,1,1),new We(1,1,1,1),new We(3,0,1,1),new We(1,0,1,1)],this._cubeDirections=[new P(1,0,0),new P(-1,0,0),new P(0,0,1),new P(0,0,-1),new P(0,1,0),new P(0,-1,0)],this._cubeUps=[new P(0,1,0),new P(0,1,0),new P(0,1,0),new P(0,1,0),new P(0,0,1),new P(0,0,-1)]}updateMatrices(e,t=0){let n=this.camera,i=this.matrix,r=e.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),Vi.setFromMatrixPosition(e.matrixWorld),n.position.copy(Vi),Zr.copy(n.position),Zr.add(this._cubeDirections[t]),n.up.copy(this._cubeUps[t]),n.lookAt(Zr),n.updateMatrixWorld(),i.makeTranslation(-Vi.x,-Vi.y,-Vi.z),il.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(il)}},or=class extends os{constructor(e,t,n=0,i=2){super(e,t),this.isPointLight=!0,this.type=\"PointLight\",this.distance=n,this.decay=i,this.shadow=new Po}get power(){return this.intensity*4*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}},Lo=class extends as{constructor(){super(new Ri(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},ar=class extends os{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type=\"DirectionalLight\",this.position.copy(Qe.DEFAULT_UP),this.updateMatrix(),this.target=new Qe,this.shadow=new Lo}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}};var Ii=class{static decodeText(e){if(typeof TextDecoder<\"u\")return new TextDecoder().decode(e);let t=\"\";for(let n=0,i=e.length;n<i;n++)t+=String.fromCharCode(e[n]);try{return decodeURIComponent(escape(t))}catch{return t}}static extractUrlBase(e){let t=e.lastIndexOf(\"/\");return t===-1?\"./\":e.slice(0,t+1)}static resolveURL(e,t){return typeof e!=\"string\"||e===\"\"?\"\":(/^https?:\\/\\//i.test(t)&&/^\\//.test(e)&&(t=t.replace(/(^https?:\\/\\/[^\\/]+).*/i,\"$1\")),/^(https?:)?\\/\\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}};var cr=class extends Yt{constructor(e){super(e),this.isImageBitmapLoader=!0,typeof createImageBitmap>\"u\"&&console.warn(\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\"),typeof fetch>\"u\"&&console.warn(\"THREE.ImageBitmapLoader: fetch() not supported.\"),this.options={premultiplyAlpha:\"none\"}}setOptions(e){return this.options=e,this}load(e,t,n,i){e===void 0&&(e=\"\"),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let r=this,o=Li.get(e);if(o!==void 0)return r.manager.itemStart(e),setTimeout(function(){t&&t(o),r.manager.itemEnd(e)},0),o;let a={};a.credentials=this.crossOrigin===\"anonymous\"?\"same-origin\":\"include\",a.headers=this.requestHeader,fetch(e,a).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(r.options,{colorSpaceConversion:\"none\"}))}).then(function(c){Li.add(e,c),t&&t(c),r.manager.itemEnd(e)}).catch(function(c){i&&i(c),r.manager.itemError(e),r.manager.itemEnd(e)}),r.manager.itemStart(e)}};var Bo=\"\\\\[\\\\]\\\\.:\\\\/\",$m=new RegExp(\"[\"+Bo+\"]\",\"g\"),zo=\"[^\"+Bo+\"]\",jm=\"[^\"+Bo.replace(\"\\\\.\",\"\")+\"]\",Qm=/((?:WC+[\\/:])*)/.source.replace(\"WC\",zo),eg=/(WCOD+)?/.source.replace(\"WCOD\",jm),tg=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace(\"WC\",zo),ng=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace(\"WC\",zo),ig=new RegExp(\"^\"+Qm+eg+tg+ng+\"$\"),sg=[\"material\",\"materials\",\"bones\",\"map\"],Io=class{constructor(e,t,n){let i=n||qe.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,i)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,i=this._bindings[n];i!==void 0&&i.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},qe=class s{constructor(e,t,n){this.path=t,this.parsedPath=n||s.parseTrackName(t),this.node=s.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,n){return e&&e.isAnimationObjectGroup?new s.Composite(e,t,n):new s(e,t,n)}static sanitizeNodeName(e){return e.replace(/\\s/g,\"_\").replace($m,\"\")}static parseTrackName(e){let t=ig.exec(e);if(t===null)throw new Error(\"PropertyBinding: Cannot parse trackName: \"+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},i=n.nodeName&&n.nodeName.lastIndexOf(\".\");if(i!==void 0&&i!==-1){let r=n.nodeName.substring(i+1);sg.indexOf(r)!==-1&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=r)}if(n.propertyName===null||n.propertyName.length===0)throw new Error(\"PropertyBinding: can not parse propertyName from trackName: \"+e);return n}static findNode(e,t){if(t===void 0||t===\"\"||t===\".\"||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(r){for(let o=0;o<r.length;o++){let a=r[o];if(a.name===t||a.uuid===t)return a;let c=n(a.children);if(c)return c}return null},i=n(e.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)e[t++]=n[i]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let e=this.node,t=this.parsedPath,n=t.objectName,i=t.propertyName,r=t.propertyIndex;if(e||(e=s.findNode(this.rootNode,t.nodeName),this.node=e),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!e){console.warn(\"THREE.PropertyBinding: No target node found for track: \"+this.path+\".\");return}if(n){let l=t.objectIndex;switch(n){case\"materials\":if(!e.material){console.error(\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",this);return}if(!e.material.materials){console.error(\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\",this);return}e=e.material.materials;break;case\"bones\":if(!e.skeleton){console.error(\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\",this);return}e=e.skeleton.bones;for(let h=0;h<e.length;h++)if(e[h].name===l){l=h;break}break;case\"map\":if(\"map\"in e){e=e.map;break}if(!e.material){console.error(\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",this);return}if(!e.material.map){console.error(\"THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.\",this);return}e=e.material.map;break;default:if(e[n]===void 0){console.error(\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\",this);return}e=e[n]}if(l!==void 0){if(e[l]===void 0){console.error(\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\",this,e);return}e=e[l]}}let o=e[i];if(o===void 0){let l=t.nodeName;console.error(\"THREE.PropertyBinding: Trying to update property for track: \"+l+\".\"+i+\" but it wasn't found.\",e);return}let a=this.Versioning.None;this.targetObject=e,e.needsUpdate!==void 0?a=this.Versioning.NeedsUpdate:e.matrixWorldNeedsUpdate!==void 0&&(a=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(r!==void 0){if(i===\"morphTargetInfluences\"){if(!e.geometry){console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\",this);return}if(!e.geometry.morphAttributes){console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\",this);return}e.morphTargetDictionary[r]!==void 0&&(r=e.morphTargetDictionary[r])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=r}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][a]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};qe.Composite=Io;qe.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};qe.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};qe.prototype.GetterByBindingType=[qe.prototype._getValue_direct,qe.prototype._getValue_array,qe.prototype._getValue_arrayElement,qe.prototype._getValue_toArray];qe.prototype.SetterByBindingTypeAndVersioning=[[qe.prototype._setValue_direct,qe.prototype._setValue_direct_setNeedsUpdate,qe.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[qe.prototype._setValue_array,qe.prototype._setValue_array_setNeedsUpdate,qe.prototype._setValue_array_setMatrixWorldNeedsUpdate],[qe.prototype._setValue_arrayElement,qe.prototype._setValue_arrayElement_setNeedsUpdate,qe.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[qe.prototype._setValue_fromArray,qe.prototype._setValue_fromArray_setNeedsUpdate,qe.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var gg=new Float32Array(1);typeof __THREE_DEVTOOLS__<\"u\"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"register\",{detail:{revision:Uo}}));typeof window<\"u\"&&(window.__THREE__?console.warn(\"WARNING: Multiple instances of Three.js being imported.\"):window.__THREE__=Uo);function ko(s,e){if(e===ml)return console.warn(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.\"),s;if(e===cs||e===hr){let t=s.getIndex();if(t===null){let o=[],a=s.getAttribute(\"position\");if(a!==void 0){for(let c=0;c<a.count;c++)o.push(c);s.setIndex(o),t=s.getIndex()}else return console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.\"),s}let n=t.count-2,i=[];if(e===cs)for(let o=1;o<=n;o++)i.push(t.getX(0)),i.push(t.getX(o)),i.push(t.getX(o+1));else for(let o=0;o<n;o++)o%2===0?(i.push(t.getX(o)),i.push(t.getX(o+1)),i.push(t.getX(o+2))):(i.push(t.getX(o+2)),i.push(t.getX(o+1)),i.push(t.getX(o)));i.length/3!==n&&console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.\");let r=s.clone();return r.setIndex(i),r.clearGroups(),r}else return console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:\",e),s}var Wo=class extends Yt{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new Zo(t)}),this.register(function(t){return new na(t)}),this.register(function(t){return new ia(t)}),this.register(function(t){return new sa(t)}),this.register(function(t){return new Jo(t)}),this.register(function(t){return new $o(t)}),this.register(function(t){return new jo(t)}),this.register(function(t){return new Qo(t)}),this.register(function(t){return new Yo(t)}),this.register(function(t){return new ea(t)}),this.register(function(t){return new Ko(t)}),this.register(function(t){return new ta(t)}),this.register(function(t){return new Xo(t)}),this.register(function(t){return new ra(t)}),this.register(function(t){return new oa(t)})}load(e,t,n,i){let r=this,o;this.resourcePath!==\"\"?o=this.resourcePath:this.path!==\"\"?o=this.path:o=Ii.extractUrlBase(e),this.manager.itemStart(e);let a=function(l){i?i(l):console.error(l),r.manager.itemError(e),r.manager.itemEnd(e)},c=new Un(this.manager);c.setPath(this.path),c.setResponseType(\"arraybuffer\"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(l){try{r.parse(l,o,function(h){t(h),r.manager.itemEnd(e)},a)}catch(h){a(h)}},n,a)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,i){let r,o={},a={},c=new TextDecoder;if(typeof e==\"string\")r=JSON.parse(e);else if(e instanceof ArrayBuffer)if(c.decode(new Uint8Array(e,0,4))===Nl){try{o[ze.KHR_BINARY_GLTF]=new aa(e)}catch(u){i&&i(u);return}r=JSON.parse(o[ze.KHR_BINARY_GLTF].content)}else r=JSON.parse(c.decode(e));else r=e;if(r.asset===void 0||r.asset.version[0]<2){i&&i(new Error(\"THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.\"));return}let l=new pa(r,{path:t||this.resourcePath||\"\",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h<this.pluginCallbacks.length;h++){let u=this.pluginCallbacks[h](l);a[u.name]=u,o[u.name]=!0}if(r.extensionsUsed)for(let h=0;h<r.extensionsUsed.length;++h){let u=r.extensionsUsed[h],d=r.extensionsRequired||[];switch(u){case ze.KHR_MATERIALS_UNLIT:o[u]=new qo;break;case ze.KHR_DRACO_MESH_COMPRESSION:o[u]=new ca(r,this.dracoLoader);break;case ze.KHR_TEXTURE_TRANSFORM:o[u]=new la;break;case ze.KHR_MESH_QUANTIZATION:o[u]=new ha;break;default:d.indexOf(u)>=0&&a[u]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension \"'+u+'\".')}}l.setExtensions(o),l.setPlugins(a),l.parse(n,i)}parseAsync(e,t){let n=this;return new Promise(function(i,r){n.parse(e,t,i,r)})}};function rg(){let s={};return{get:function(e){return s[e]},add:function(e,t){s[e]=t},remove:function(e){delete s[e]},removeAll:function(){s={}}}}var ze={KHR_BINARY_GLTF:\"KHR_binary_glTF\",KHR_DRACO_MESH_COMPRESSION:\"KHR_draco_mesh_compression\",KHR_LIGHTS_PUNCTUAL:\"KHR_lights_punctual\",KHR_MATERIALS_CLEARCOAT:\"KHR_materials_clearcoat\",KHR_MATERIALS_IOR:\"KHR_materials_ior\",KHR_MATERIALS_SHEEN:\"KHR_materials_sheen\",KHR_MATERIALS_SPECULAR:\"KHR_materials_specular\",KHR_MATERIALS_TRANSMISSION:\"KHR_materials_transmission\",KHR_MATERIALS_IRIDESCENCE:\"KHR_materials_iridescence\",KHR_MATERIALS_ANISOTROPY:\"KHR_materials_anisotropy\",KHR_MATERIALS_UNLIT:\"KHR_materials_unlit\",KHR_MATERIALS_VOLUME:\"KHR_materials_volume\",KHR_TEXTURE_BASISU:\"KHR_texture_basisu\",KHR_TEXTURE_TRANSFORM:\"KHR_texture_transform\",KHR_MESH_QUANTIZATION:\"KHR_mesh_quantization\",KHR_MATERIALS_EMISSIVE_STRENGTH:\"KHR_materials_emissive_strength\",EXT_TEXTURE_WEBP:\"EXT_texture_webp\",EXT_TEXTURE_AVIF:\"EXT_texture_avif\",EXT_MESHOPT_COMPRESSION:\"EXT_meshopt_compression\",EXT_MESH_GPU_INSTANCING:\"EXT_mesh_gpu_instancing\"},Xo=class{constructor(e){this.parser=e,this.name=ze.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,i=t.length;n<i;n++){let r=t[n];r.extensions&&r.extensions[this.name]&&r.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){let t=this.parser,n=\"light:\"+e,i=t.cache.get(n);if(i)return i;let r=t.json,c=((r.extensions&&r.extensions[this.name]||{}).lights||[])[e],l,h=new Ae(16777215);c.color!==void 0&&h.fromArray(c.color);let u=c.range!==void 0?c.range:0;switch(c.type){case\"directional\":l=new ar(h),l.target.position.set(0,0,-1),l.add(l.target);break;case\"point\":l=new or(h),l.distance=u;break;case\"spot\":l=new rr(h),l.distance=u,c.spot=c.spot||{},c.spot.innerConeAngle=c.spot.innerConeAngle!==void 0?c.spot.innerConeAngle:0,c.spot.outerConeAngle=c.spot.outerConeAngle!==void 0?c.spot.outerConeAngle:Math.PI/4,l.angle=c.spot.outerConeAngle,l.penumbra=1-c.spot.innerConeAngle/c.spot.outerConeAngle,l.target.position.set(0,0,-1),l.add(l.target);break;default:throw new Error(\"THREE.GLTFLoader: Unexpected light type: \"+c.type)}return l.position.set(0,0,0),l.decay=2,Nn(l,c),c.intensity!==void 0&&(l.intensity=c.intensity),l.name=t.createUniqueName(c.name||\"light_\"+e),i=Promise.resolve(l),t.cache.add(n,i),i}getDependency(e,t){if(e===\"light\")return this._loadLight(t)}createNodeAttachment(e){let t=this,n=this.parser,r=n.json.nodes[e],a=(r.extensions&&r.extensions[this.name]||{}).light;return a===void 0?null:this._loadLight(a).then(function(c){return n._getNodeRef(t.cache,a,c)})}},qo=class{constructor(){this.name=ze.KHR_MATERIALS_UNLIT}getMaterialType(){return Qt}extendParams(e,t,n){let i=[];e.color=new Ae(1,1,1),e.opacity=1;let r=t.pbrMetallicRoughness;if(r){if(Array.isArray(r.baseColorFactor)){let o=r.baseColorFactor;e.color.fromArray(o),e.opacity=o[3]}r.baseColorTexture!==void 0&&i.push(n.assignTexture(e,\"map\",r.baseColorTexture,xe))}return Promise.all(i)}},Yo=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){let i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=i.extensions[this.name].emissiveStrength;return r!==void 0&&(t.emissiveIntensity=r),Promise.resolve()}},Zo=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[],o=i.extensions[this.name];if(o.clearcoatFactor!==void 0&&(t.clearcoat=o.clearcoatFactor),o.clearcoatTexture!==void 0&&r.push(n.assignTexture(t,\"clearcoatMap\",o.clearcoatTexture)),o.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),o.clearcoatRoughnessTexture!==void 0&&r.push(n.assignTexture(t,\"clearcoatRoughnessMap\",o.clearcoatRoughnessTexture)),o.clearcoatNormalTexture!==void 0&&(r.push(n.assignTexture(t,\"clearcoatNormalMap\",o.clearcoatNormalTexture)),o.clearcoatNormalTexture.scale!==void 0)){let a=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new Be(a,a)}return Promise.all(r)}},Ko=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[],o=i.extensions[this.name];return o.iridescenceFactor!==void 0&&(t.iridescence=o.iridescenceFactor),o.iridescenceTexture!==void 0&&r.push(n.assignTexture(t,\"iridescenceMap\",o.iridescenceTexture)),o.iridescenceIor!==void 0&&(t.iridescenceIOR=o.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),o.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),o.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),o.iridescenceThicknessTexture!==void 0&&r.push(n.assignTexture(t,\"iridescenceThicknessMap\",o.iridescenceThicknessTexture)),Promise.all(r)}},Jo=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_SHEEN}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[];t.sheenColor=new Ae(0,0,0),t.sheenRoughness=0,t.sheen=1;let o=i.extensions[this.name];return o.sheenColorFactor!==void 0&&t.sheenColor.fromArray(o.sheenColorFactor),o.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=o.sheenRoughnessFactor),o.sheenColorTexture!==void 0&&r.push(n.assignTexture(t,\"sheenColorMap\",o.sheenColorTexture,xe)),o.sheenRoughnessTexture!==void 0&&r.push(n.assignTexture(t,\"sheenRoughnessMap\",o.sheenRoughnessTexture)),Promise.all(r)}},$o=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[],o=i.extensions[this.name];return o.transmissionFactor!==void 0&&(t.transmission=o.transmissionFactor),o.transmissionTexture!==void 0&&r.push(n.assignTexture(t,\"transmissionMap\",o.transmissionTexture)),Promise.all(r)}},jo=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_VOLUME}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[],o=i.extensions[this.name];t.thickness=o.thicknessFactor!==void 0?o.thicknessFactor:0,o.thicknessTexture!==void 0&&r.push(n.assignTexture(t,\"thicknessMap\",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;let a=o.attenuationColor||[1,1,1];return t.attenuationColor=new Ae(a[0],a[1],a[2]),Promise.all(r)}},Qo=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_IOR}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=i.extensions[this.name];return t.ior=r.ior!==void 0?r.ior:1.5,Promise.resolve()}},ea=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_SPECULAR}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[],o=i.extensions[this.name];t.specularIntensity=o.specularFactor!==void 0?o.specularFactor:1,o.specularTexture!==void 0&&r.push(n.assignTexture(t,\"specularIntensityMap\",o.specularTexture));let a=o.specularColorFactor||[1,1,1];return t.specularColor=new Ae(a[0],a[1],a[2]),o.specularColorTexture!==void 0&&r.push(n.assignTexture(t,\"specularColorMap\",o.specularColorTexture,xe)),Promise.all(r)}},ta=class{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){let n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:qt}extendMaterialParams(e,t){let n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();let r=[],o=i.extensions[this.name];return o.anisotropyStrength!==void 0&&(t.anisotropy=o.anisotropyStrength),o.anisotropyRotation!==void 0&&(t.anisotropyRotation=o.anisotropyRotation),o.anisotropyTexture!==void 0&&r.push(n.assignTexture(t,\"anisotropyMap\",o.anisotropyTexture)),Promise.all(r)}},na=class{constructor(e){this.parser=e,this.name=ze.KHR_TEXTURE_BASISU}loadTexture(e){let t=this.parser,n=t.json,i=n.textures[e];if(!i.extensions||!i.extensions[this.name])return null;let r=i.extensions[this.name],o=t.options.ktx2Loader;if(!o){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error(\"THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures\");return null}return t.loadTextureImage(e,r.source,o)}},ia=class{constructor(e){this.parser=e,this.name=ze.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,i=n.json,r=i.textures[e];if(!r.extensions||!r.extensions[t])return null;let o=r.extensions[t],a=i.images[o.source],c=n.textureLoader;if(a.uri){let l=n.options.manager.getHandler(a.uri);l!==null&&(c=l)}return this.detectSupport().then(function(l){if(l)return n.loadTextureImage(e,o.source,c);if(i.extensionsRequired&&i.extensionsRequired.indexOf(t)>=0)throw new Error(\"THREE.GLTFLoader: WebP required by asset but unsupported.\");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src=\"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}},sa=class{constructor(e){this.parser=e,this.name=ze.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,i=n.json,r=i.textures[e];if(!r.extensions||!r.extensions[t])return null;let o=r.extensions[t],a=i.images[o.source],c=n.textureLoader;if(a.uri){let l=n.options.manager.getHandler(a.uri);l!==null&&(c=l)}return this.detectSupport().then(function(l){if(l)return n.loadTextureImage(e,o.source,c);if(i.extensionsRequired&&i.extensionsRequired.indexOf(t)>=0)throw new Error(\"THREE.GLTFLoader: AVIF required by asset but unsupported.\");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src=\"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}},ra=class{constructor(e){this.name=ze.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let i=n.extensions[this.name],r=this.parser.getDependency(\"buffer\",i.buffer),o=this.parser.options.meshoptDecoder;if(!o||!o.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error(\"THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files\");return null}return r.then(function(a){let c=i.byteOffset||0,l=i.byteLength||0,h=i.count,u=i.byteStride,d=new Uint8Array(a,c,l);return o.decodeGltfBufferAsync?o.decodeGltfBufferAsync(h,u,d,i.mode,i.filter).then(function(p){return p.buffer}):o.ready.then(function(){let p=new ArrayBuffer(h*u);return o.decodeGltfBuffer(new Uint8Array(p),h,u,d,i.mode,i.filter),p})})}else return null}},oa=class{constructor(e){this.name=ze.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;let i=t.meshes[n.mesh];for(let l of i.primitives)if(l.mode!==Bt.TRIANGLES&&l.mode!==Bt.TRIANGLE_STRIP&&l.mode!==Bt.TRIANGLE_FAN&&l.mode!==void 0)return null;let o=n.extensions[this.name].attributes,a=[],c={};for(let l in o)a.push(this.parser.getDependency(\"accessor\",o[l]).then(h=>(c[l]=h,c[l])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(l=>{let h=l.pop(),u=h.isGroup?h.children:[h],d=l[0].count,p=[];for(let g of u){let _=new Ue,m=new P,f=new Xt,S=new P(1,1,1),x=new js(g.geometry,g.material,d);for(let A=0;A<d;A++)c.TRANSLATION&&m.fromBufferAttribute(c.TRANSLATION,A),c.ROTATION&&f.fromBufferAttribute(c.ROTATION,A),c.SCALE&&S.fromBufferAttribute(c.SCALE,A),x.setMatrixAt(A,_.compose(m,f,S));for(let A in c)A!==\"TRANSLATION\"&&A!==\"ROTATION\"&&A!==\"SCALE\"&&g.geometry.setAttribute(A,c[A]);Qe.prototype.copy.call(x,g),this.parser.assignFinalMaterial(x),p.push(x)}return h.isGroup?(h.clear(),h.add(...p),h):p[0]}))}},Nl=\"glTF\",ls=12,Ll={JSON:1313821514,BIN:5130562},aa=class{constructor(e){this.name=ze.KHR_BINARY_GLTF,this.content=null,this.body=null;let t=new DataView(e,0,ls),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Nl)throw new Error(\"THREE.GLTFLoader: Unsupported glTF-Binary header.\");if(this.header.version<2)throw new Error(\"THREE.GLTFLoader: Legacy binary file detected.\");let i=this.header.length-ls,r=new DataView(e,ls),o=0;for(;o<i;){let a=r.getUint32(o,!0);o+=4;let c=r.getUint32(o,!0);if(o+=4,c===Ll.JSON){let l=new Uint8Array(e,ls+o,a);this.content=n.decode(l)}else if(c===Ll.BIN){let l=ls+o;this.body=e.slice(l,l+a)}o+=a}if(this.content===null)throw new Error(\"THREE.GLTFLoader: JSON content not found.\")}},ca=class{constructor(e,t){if(!t)throw new Error(\"THREE.GLTFLoader: No DRACOLoader instance provided.\");this.name=ze.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){let n=this.json,i=this.dracoLoader,r=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,a={},c={},l={};for(let h in o){let u=da[h]||h.toLowerCase();a[u]=o[h]}for(let h in e.attributes){let u=da[h]||h.toLowerCase();if(o[h]!==void 0){let d=n.accessors[e.attributes[h]],p=Di[d.componentType];l[u]=p.name,c[u]=d.normalized===!0}}return t.getDependency(\"bufferView\",r).then(function(h){return new Promise(function(u){i.decodeDracoFile(h,function(d){for(let p in d.attributes){let g=d.attributes[p],_=c[p];_!==void 0&&(g.normalized=_)}u(d)},a,l)})})}},la=class{constructor(){this.name=ze.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}},ha=class{constructor(){this.name=ze.KHR_MESH_QUANTIZATION}},dr=class extends Pn{constructor(e,t,n,i){super(e,t,n,i)}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=e*i*3+i;for(let o=0;o!==i;o++)t[o]=n[r+o];return t}interpolate_(e,t,n,i){let r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,c=a*2,l=a*3,h=i-t,u=(n-t)/h,d=u*u,p=d*u,g=e*l,_=g-l,m=-2*p+3*d,f=p-d,S=1-m,x=f-d+u;for(let A=0;A!==a;A++){let E=o[_+A+a],C=o[_+A+c]*h,w=o[g+A+a],k=o[g+A]*h;r[A]=S*E+x*C+m*w+f*k}return r}},og=new Xt,ua=class extends dr{interpolate_(e,t,n,i){let r=super.interpolate_(e,t,n,i);return og.fromArray(r).normalize().toArray(r),r}},Bt={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},Di={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Il={9728:st,9729:vt,9984:Fs,9985:Do,9986:Wi,9987:Rn},Ul={33071:Rt,33648:Ki,10497:Zn},Ho={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},da={POSITION:\"position\",NORMAL:\"normal\",TANGENT:\"tangent\",TEXCOORD_0:\"uv\",TEXCOORD_1:\"uv1\",TEXCOORD_2:\"uv2\",TEXCOORD_3:\"uv3\",COLOR_0:\"color\",WEIGHTS_0:\"skinWeight\",JOINTS_0:\"skinIndex\"},Dn={scale:\"scale\",translation:\"position\",rotation:\"quaternion\",weights:\"morphTargetInfluences\"},ag={CUBICSPLINE:void 0,LINEAR:Kn,STEP:Ai},Vo={OPAQUE:\"OPAQUE\",MASK:\"MASK\",BLEND:\"BLEND\"};function cg(s){return s.DefaultMaterial===void 0&&(s.DefaultMaterial=new Pi({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:jt})),s.DefaultMaterial}function Jn(s,e,t){for(let n in t.extensions)s[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=t.extensions[n])}function Nn(s,e){e.extras!==void 0&&(typeof e.extras==\"object\"?Object.assign(s.userData,e.extras):console.warn(\"THREE.GLTFLoader: Ignoring primitive type .extras, \"+e.extras))}function lg(s,e,t){let n=!1,i=!1,r=!1;for(let l=0,h=e.length;l<h;l++){let u=e[l];if(u.POSITION!==void 0&&(n=!0),u.NORMAL!==void 0&&(i=!0),u.COLOR_0!==void 0&&(r=!0),n&&i&&r)break}if(!n&&!i&&!r)return Promise.resolve(s);let o=[],a=[],c=[];for(let l=0,h=e.length;l<h;l++){let u=e[l];if(n){let d=u.POSITION!==void 0?t.getDependency(\"accessor\",u.POSITION):s.attributes.position;o.push(d)}if(i){let d=u.NORMAL!==void 0?t.getDependency(\"accessor\",u.NORMAL):s.attributes.normal;a.push(d)}if(r){let d=u.COLOR_0!==void 0?t.getDependency(\"accessor\",u.COLOR_0):s.attributes.color;c.push(d)}}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(c)]).then(function(l){let h=l[0],u=l[1],d=l[2];return n&&(s.morphAttributes.position=h),i&&(s.morphAttributes.normal=u),r&&(s.morphAttributes.color=d),s.morphTargetsRelative=!0,s})}function hg(s,e){if(s.updateMorphTargets(),e.weights!==void 0)for(let t=0,n=e.weights.length;t<n;t++)s.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){let t=e.extras.targetNames;if(s.morphTargetInfluences.length===t.length){s.morphTargetDictionary={};for(let n=0,i=t.length;n<i;n++)s.morphTargetDictionary[t[n]]=n}else console.warn(\"THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.\")}}function ug(s){let e,t=s.extensions&&s.extensions[ze.KHR_DRACO_MESH_COMPRESSION];if(t?e=\"draco:\"+t.bufferView+\":\"+t.indices+\":\"+Go(t.attributes):e=s.indices+\":\"+Go(s.attributes)+\":\"+s.mode,s.targets!==void 0)for(let n=0,i=s.targets.length;n<i;n++)e+=\":\"+Go(s.targets[n]);return e}function Go(s){let e=\"\",t=Object.keys(s).sort();for(let n=0,i=t.length;n<i;n++)e+=t[n]+\":\"+s[t[n]]+\";\";return e}function fa(s){switch(s){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error(\"THREE.GLTFLoader: Unsupported normalized accessor component type.\")}}function dg(s){return s.search(/\\.jpe?g($|\\?)/i)>0||s.search(/^data\\:image\\/jpeg/)===0?\"image/jpeg\":s.search(/\\.webp($|\\?)/i)>0||s.search(/^data\\:image\\/webp/)===0?\"image/webp\":\"image/png\"}var fg=new Ue,pa=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new rg,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,i=!1,r=-1;typeof navigator<\"u\"&&(n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,i=navigator.userAgent.indexOf(\"Firefox\")>-1,r=i?navigator.userAgent.match(/Firefox\\/([0-9]+)\\./)[1]:-1),typeof createImageBitmap>\"u\"||n||i&&r<98?this.textureLoader=new sr(this.options.manager):this.textureLoader=new cr(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Un(this.options.manager),this.fileLoader.setResponseType(\"arraybuffer\"),this.options.crossOrigin===\"use-credentials\"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,i=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(o){return o._markDefs&&o._markDefs()}),Promise.all(this._invokeAll(function(o){return o.beforeRoot&&o.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(\"scene\"),n.getDependencies(\"animation\"),n.getDependencies(\"camera\")])}).then(function(o){let a={scene:o[0][i.scene||0],scenes:o[0],animations:o[1],cameras:o[2],asset:i.asset,parser:n,userData:{}};Jn(r,a,i),Nn(a,i),Promise.all(n._invokeAll(function(c){return c.afterRoot&&c.afterRoot(a)})).then(function(){e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let i=0,r=t.length;i<r;i++){let o=t[i].joints;for(let a=0,c=o.length;a<c;a++)e[o[a]].isBone=!0}for(let i=0,r=e.length;i<r;i++){let o=e[i];o.mesh!==void 0&&(this._addNodeRef(this.meshCache,o.mesh),o.skin!==void 0&&(n[o.mesh].isSkinnedMesh=!0)),o.camera!==void 0&&this._addNodeRef(this.cameraCache,o.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;let i=n.clone(),r=(o,a)=>{let c=this.associations.get(o);c!=null&&this.associations.set(a,c);for(let[l,h]of o.children.entries())r(h,a.children[l])};return r(n,i),i.name+=\"_instance_\"+e.uses[t]++,i}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}_invokeAll(e){let t=Object.values(this.plugins);t.unshift(this);let n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n}getDependency(e,t){let n=e+\":\"+t,i=this.cache.get(n);if(!i){switch(e){case\"scene\":i=this.loadScene(t);break;case\"node\":i=this._invokeOne(function(r){return r.loadNode&&r.loadNode(t)});break;case\"mesh\":i=this._invokeOne(function(r){return r.loadMesh&&r.loadMesh(t)});break;case\"accessor\":i=this.loadAccessor(t);break;case\"bufferView\":i=this._invokeOne(function(r){return r.loadBufferView&&r.loadBufferView(t)});break;case\"buffer\":i=this.loadBuffer(t);break;case\"material\":i=this._invokeOne(function(r){return r.loadMaterial&&r.loadMaterial(t)});break;case\"texture\":i=this._invokeOne(function(r){return r.loadTexture&&r.loadTexture(t)});break;case\"skin\":i=this.loadSkin(t);break;case\"animation\":i=this._invokeOne(function(r){return r.loadAnimation&&r.loadAnimation(t)});break;case\"camera\":i=this.loadCamera(t);break;default:if(i=this._invokeOne(function(r){return r!=this&&r.getDependency&&r.getDependency(e,t)}),!i)throw new Error(\"Unknown type: \"+e);break}this.cache.add(n,i)}return i}getDependencies(e){let t=this.cache.get(e);if(!t){let n=this,i=this.json[e+(e===\"mesh\"?\"es\":\"s\")]||[];t=Promise.all(i.map(function(r,o){return n.getDependency(e,o)})),this.cache.add(e,t)}return t}loadBuffer(e){let t=this.json.buffers[e],n=this.fileLoader;if(t.type&&t.type!==\"arraybuffer\")throw new Error(\"THREE.GLTFLoader: \"+t.type+\" buffer type is not supported.\");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[ze.KHR_BINARY_GLTF].body);let i=this.options;return new Promise(function(r,o){n.load(Ii.resolveURL(t.uri,i.path),r,void 0,function(){o(new Error('THREE.GLTFLoader: Failed to load buffer \"'+t.uri+'\".'))})})}loadBufferView(e){let t=this.json.bufferViews[e];return this.getDependency(\"buffer\",t.buffer).then(function(n){let i=t.byteLength||0,r=t.byteOffset||0;return n.slice(r,r+i)})}loadAccessor(e){let t=this,n=this.json,i=this.json.accessors[e];if(i.bufferView===void 0&&i.sparse===void 0){let o=Ho[i.type],a=Di[i.componentType],c=i.normalized===!0,l=new a(i.count*o);return Promise.resolve(new $e(l,o,c))}let r=[];return i.bufferView!==void 0?r.push(this.getDependency(\"bufferView\",i.bufferView)):r.push(null),i.sparse!==void 0&&(r.push(this.getDependency(\"bufferView\",i.sparse.indices.bufferView)),r.push(this.getDependency(\"bufferView\",i.sparse.values.bufferView))),Promise.all(r).then(function(o){let a=o[0],c=Ho[i.type],l=Di[i.componentType],h=l.BYTES_PER_ELEMENT,u=h*c,d=i.byteOffset||0,p=i.bufferView!==void 0?n.bufferViews[i.bufferView].byteStride:void 0,g=i.normalized===!0,_,m;if(p&&p!==u){let f=Math.floor(d/p),S=\"InterleavedBuffer:\"+i.bufferView+\":\"+i.componentType+\":\"+f+\":\"+i.count,x=t.cache.get(S);x||(_=new l(a,f*p,i.count*p/h),x=new es(_,p/h),t.cache.add(S,x)),m=new ts(x,c,d%p/h,g)}else a===null?_=new l(i.count*c):_=new l(a,d,i.count*c),m=new $e(_,c,g);if(i.sparse!==void 0){let f=Ho.SCALAR,S=Di[i.sparse.indices.componentType],x=i.sparse.indices.byteOffset||0,A=i.sparse.values.byteOffset||0,E=new S(o[1],x,i.sparse.count*f),C=new l(o[2],A,i.sparse.count*c);a!==null&&(m=new $e(m.array.slice(),m.itemSize,m.normalized));for(let w=0,k=E.length;w<k;w++){let v=E[w];if(m.setX(v,C[w*c]),c>=2&&m.setY(v,C[w*c+1]),c>=3&&m.setZ(v,C[w*c+2]),c>=4&&m.setW(v,C[w*c+3]),c>=5)throw new Error(\"THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.\")}}return m})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,o=t.images[r],a=this.textureLoader;if(o.uri){let c=n.manager.getHandler(o.uri);c!==null&&(a=c)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let i=this,r=this.json,o=r.textures[e],a=r.images[t],c=(a.uri||a.bufferView)+\":\"+o.sampler;if(this.textureCache[c])return this.textureCache[c];let l=this.loadImageSource(t,n).then(function(h){h.flipY=!1,h.name=o.name||a.name||\"\",h.name===\"\"&&typeof a.uri==\"string\"&&a.uri.startsWith(\"data:image/\")===!1&&(h.name=a.uri);let d=(r.samplers||{})[o.sampler]||{};return h.magFilter=Il[d.magFilter]||vt,h.minFilter=Il[d.minFilter]||Rn,h.wrapS=Ul[d.wrapS]||Zn,h.wrapT=Ul[d.wrapT]||Zn,i.associations.set(h,{textures:e}),h}).catch(function(){return null});return this.textureCache[c]=l,l}loadImageSource(e,t){let n=this,i=this.json,r=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(u=>u.clone());let o=i.images[e],a=self.URL||self.webkitURL,c=o.uri||\"\",l=!1;if(o.bufferView!==void 0)c=n.getDependency(\"bufferView\",o.bufferView).then(function(u){l=!0;let d=new Blob([u],{type:o.mimeType});return c=a.createObjectURL(d),c});else if(o.uri===void 0)throw new Error(\"THREE.GLTFLoader: Image \"+e+\" is missing URI and bufferView\");let h=Promise.resolve(c).then(function(u){return new Promise(function(d,p){let g=d;t.isImageBitmapLoader===!0&&(g=function(_){let m=new mt(_);m.needsUpdate=!0,d(m)}),t.load(Ii.resolveURL(u,r.path),g,void 0,p)})}).then(function(u){return l===!0&&a.revokeObjectURL(c),u.userData.mimeType=o.mimeType||dg(o.uri),u}).catch(function(u){throw console.error(\"THREE.GLTFLoader: Couldn't load texture\",c),u});return this.sourceCache[e]=h,h}assignTexture(e,t,n,i){let r=this;return this.getDependency(\"texture\",n.index).then(function(o){if(!o)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(o=o.clone(),o.channel=n.texCoord),r.extensions[ze.KHR_TEXTURE_TRANSFORM]){let a=n.extensions!==void 0?n.extensions[ze.KHR_TEXTURE_TRANSFORM]:void 0;if(a){let c=r.associations.get(o);o=r.extensions[ze.KHR_TEXTURE_TRANSFORM].extendTexture(o,a),r.associations.set(o,c)}}return i!==void 0&&(o.colorSpace=i),e[t]=o,o})}assignFinalMaterial(e){let t=e.geometry,n=e.material,i=t.attributes.tangent===void 0,r=t.attributes.color!==void 0,o=t.attributes.normal===void 0;if(e.isPoints){let a=\"PointsMaterial:\"+n.uuid,c=this.cache.get(a);c||(c=new rs,Pt.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,c.sizeAttenuation=!1,this.cache.add(a,c)),n=c}else if(e.isLine){let a=\"LineBasicMaterial:\"+n.uuid,c=this.cache.get(a);c||(c=new ss,Pt.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,this.cache.add(a,c)),n=c}if(i||r||o){let a=\"ClonedMaterial:\"+n.uuid+\":\";i&&(a+=\"derivative-tangents:\"),r&&(a+=\"vertex-colors:\"),o&&(a+=\"flat-shading:\");let c=this.cache.get(a);c||(c=n.clone(),r&&(c.vertexColors=!0),o&&(c.flatShading=!0),i&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(a,c),this.associations.set(c,this.associations.get(n))),n=c}e.material=n}getMaterialType(){return Pi}loadMaterial(e){let t=this,n=this.json,i=this.extensions,r=n.materials[e],o,a={},c=r.extensions||{},l=[];if(c[ze.KHR_MATERIALS_UNLIT]){let u=i[ze.KHR_MATERIALS_UNLIT];o=u.getMaterialType(),l.push(u.extendParams(a,r,t))}else{let u=r.pbrMetallicRoughness||{};if(a.color=new Ae(1,1,1),a.opacity=1,Array.isArray(u.baseColorFactor)){let d=u.baseColorFactor;a.color.fromArray(d),a.opacity=d[3]}u.baseColorTexture!==void 0&&l.push(t.assignTexture(a,\"map\",u.baseColorTexture,xe)),a.metalness=u.metallicFactor!==void 0?u.metallicFactor:1,a.roughness=u.roughnessFactor!==void 0?u.roughnessFactor:1,u.metallicRoughnessTexture!==void 0&&(l.push(t.assignTexture(a,\"metalnessMap\",u.metallicRoughnessTexture)),l.push(t.assignTexture(a,\"roughnessMap\",u.metallicRoughnessTexture))),o=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,a)})))}r.doubleSided===!0&&(a.side=Gt);let h=r.alphaMode||Vo.OPAQUE;if(h===Vo.BLEND?(a.transparent=!0,a.depthWrite=!1):(a.transparent=!1,h===Vo.MASK&&(a.alphaTest=r.alphaCutoff!==void 0?r.alphaCutoff:.5)),r.normalTexture!==void 0&&o!==Qt&&(l.push(t.assignTexture(a,\"normalMap\",r.normalTexture)),a.normalScale=new Be(1,1),r.normalTexture.scale!==void 0)){let u=r.normalTexture.scale;a.normalScale.set(u,u)}return r.occlusionTexture!==void 0&&o!==Qt&&(l.push(t.assignTexture(a,\"aoMap\",r.occlusionTexture)),r.occlusionTexture.strength!==void 0&&(a.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&o!==Qt&&(a.emissive=new Ae().fromArray(r.emissiveFactor)),r.emissiveTexture!==void 0&&o!==Qt&&l.push(t.assignTexture(a,\"emissiveMap\",r.emissiveTexture,xe)),Promise.all(l).then(function(){let u=new o(a);return r.name&&(u.name=r.name),Nn(u,r),t.associations.set(u,{materials:e}),r.extensions&&Jn(i,u,r),u})}createUniqueName(e){let t=qe.sanitizeNodeName(e||\"\");return t in this.nodeNamesUsed?t+\"_\"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,i=this.primitiveCache;function r(a){return n[ze.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(a,t).then(function(c){return Dl(c,a,t)})}let o=[];for(let a=0,c=e.length;a<c;a++){let l=e[a],h=ug(l),u=i[h];if(u)o.push(u.promise);else{let d;l.extensions&&l.extensions[ze.KHR_DRACO_MESH_COMPRESSION]?d=r(l):d=Dl(new At,l,t),i[h]={primitive:l,promise:d},o.push(d)}}return Promise.all(o)}loadMesh(e){let t=this,n=this.json,i=this.extensions,r=n.meshes[e],o=r.primitives,a=[];for(let c=0,l=o.length;c<l;c++){let h=o[c].material===void 0?cg(this.cache):this.getDependency(\"material\",o[c].material);a.push(h)}return a.push(t.loadGeometries(o)),Promise.all(a).then(function(c){let l=c.slice(0,c.length-1),h=c[c.length-1],u=[];for(let p=0,g=h.length;p<g;p++){let _=h[p],m=o[p],f,S=l[p];if(m.mode===Bt.TRIANGLES||m.mode===Bt.TRIANGLE_STRIP||m.mode===Bt.TRIANGLE_FAN||m.mode===void 0)f=r.isSkinnedMesh===!0?new Js(_,S):new Mt(_,S),f.isSkinnedMesh===!0&&f.normalizeSkinWeights(),m.mode===Bt.TRIANGLE_STRIP?f.geometry=ko(f.geometry,hr):m.mode===Bt.TRIANGLE_FAN&&(f.geometry=ko(f.geometry,cs));else if(m.mode===Bt.LINES)f=new Qs(_,S);else if(m.mode===Bt.LINE_STRIP)f=new Ci(_,S);else if(m.mode===Bt.LINE_LOOP)f=new er(_,S);else if(m.mode===Bt.POINTS)f=new tr(_,S);else throw new Error(\"THREE.GLTFLoader: Primitive mode unsupported: \"+m.mode);Object.keys(f.geometry.morphAttributes).length>0&&hg(f,r),f.name=t.createUniqueName(r.name||\"mesh_\"+e),Nn(f,r),m.extensions&&Jn(i,f,m),t.assignFinalMaterial(f),u.push(f)}for(let p=0,g=u.length;p<g;p++)t.associations.set(u[p],{meshes:e,primitives:p});if(u.length===1)return r.extensions&&Jn(i,u[0],r),u[0];let d=new $t;r.extensions&&Jn(i,d,r),t.associations.set(d,{meshes:e});for(let p=0,g=u.length;p<g;p++)d.add(u[p]);return d})}loadCamera(e){let t,n=this.json.cameras[e],i=n[n.type];if(!i){console.warn(\"THREE.GLTFLoader: Missing camera parameters.\");return}return n.type===\"perspective\"?t=new lt(vl.radToDeg(i.yfov),i.aspectRatio||1,i.znear||1,i.zfar||2e6):n.type===\"orthographic\"&&(t=new Ri(-i.xmag,i.xmag,i.ymag,-i.ymag,i.znear,i.zfar)),n.name&&(t.name=this.createUniqueName(n.name)),Nn(t,n),Promise.resolve(t)}loadSkin(e){let t=this.json.skins[e],n=[];for(let i=0,r=t.joints.length;i<r;i++)n.push(this._loadNodeShallow(t.joints[i]));return t.inverseBindMatrices!==void 0?n.push(this.getDependency(\"accessor\",t.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(i){let r=i.pop(),o=i,a=[],c=[];for(let l=0,h=o.length;l<h;l++){let u=o[l];if(u){a.push(u);let d=new Ue;r!==null&&d.fromArray(r.array,l*16),c.push(d)}else console.warn('THREE.GLTFLoader: Joint \"%s\" could not be found.',t.joints[l])}return new $s(a,c)})}loadAnimation(e){let t=this.json,n=this,i=t.animations[e],r=i.name?i.name:\"animation_\"+e,o=[],a=[],c=[],l=[],h=[];for(let u=0,d=i.channels.length;u<d;u++){let p=i.channels[u],g=i.samplers[p.sampler],_=p.target,m=_.node,f=i.parameters!==void 0?i.parameters[g.input]:g.input,S=i.parameters!==void 0?i.parameters[g.output]:g.output;_.node!==void 0&&(o.push(this.getDependency(\"node\",m)),a.push(this.getDependency(\"accessor\",f)),c.push(this.getDependency(\"accessor\",S)),l.push(g),h.push(_))}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(c),Promise.all(l),Promise.all(h)]).then(function(u){let d=u[0],p=u[1],g=u[2],_=u[3],m=u[4],f=[];for(let S=0,x=d.length;S<x;S++){let A=d[S],E=p[S],C=g[S],w=_[S],k=m[S];if(A===void 0)continue;A.updateMatrix&&A.updateMatrix();let v=n._createAnimationTracks(A,E,C,w,k);if(v)for(let T=0;T<v.length;T++)f.push(v[T])}return new ir(r,void 0,f)})}createNodeMesh(e){let t=this.json,n=this,i=t.nodes[e];return i.mesh===void 0?null:n.getDependency(\"mesh\",i.mesh).then(function(r){let o=n._getNodeRef(n.meshCache,i.mesh,r);return i.weights!==void 0&&o.traverse(function(a){if(a.isMesh)for(let c=0,l=i.weights.length;c<l;c++)a.morphTargetInfluences[c]=i.weights[c]}),o})}loadNode(e){let t=this.json,n=this,i=t.nodes[e],r=n._loadNodeShallow(e),o=[],a=i.children||[];for(let l=0,h=a.length;l<h;l++)o.push(n.getDependency(\"node\",a[l]));let c=i.skin===void 0?Promise.resolve(null):n.getDependency(\"skin\",i.skin);return Promise.all([r,Promise.all(o),c]).then(function(l){let h=l[0],u=l[1],d=l[2];d!==null&&h.traverse(function(p){p.isSkinnedMesh&&p.bind(d,fg)});for(let p=0,g=u.length;p<g;p++)h.add(u[p]);return h})}_loadNodeShallow(e){let t=this.json,n=this.extensions,i=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let r=t.nodes[e],o=r.name?i.createUniqueName(r.name):\"\",a=[],c=i._invokeOne(function(l){return l.createNodeMesh&&l.createNodeMesh(e)});return c&&a.push(c),r.camera!==void 0&&a.push(i.getDependency(\"camera\",r.camera).then(function(l){return i._getNodeRef(i.cameraCache,r.camera,l)})),i._invokeAll(function(l){return l.createNodeAttachment&&l.createNodeAttachment(e)}).forEach(function(l){a.push(l)}),this.nodeCache[e]=Promise.all(a).then(function(l){let h;if(r.isBone===!0?h=new ns:l.length>1?h=new $t:l.length===1?h=l[0]:h=new Qe,h!==l[0])for(let u=0,d=l.length;u<d;u++)h.add(l[u]);if(r.name&&(h.userData.name=r.name,h.name=o),Nn(h,r),r.extensions&&Jn(n,h,r),r.matrix!==void 0){let u=new Ue;u.fromArray(r.matrix),h.applyMatrix4(u)}else r.translation!==void 0&&h.position.fromArray(r.translation),r.rotation!==void 0&&h.quaternion.fromArray(r.rotation),r.scale!==void 0&&h.scale.fromArray(r.scale);return i.associations.has(h)||i.associations.set(h,{}),i.associations.get(h).nodes=e,h}),this.nodeCache[e]}loadScene(e){let t=this.extensions,n=this.json.scenes[e],i=this,r=new $t;n.name&&(r.name=i.createUniqueName(n.name)),Nn(r,n),n.extensions&&Jn(t,r,n);let o=n.nodes||[],a=[];for(let c=0,l=o.length;c<l;c++)a.push(i.getDependency(\"node\",o[c]));return Promise.all(a).then(function(c){for(let h=0,u=c.length;h<u;h++)r.add(c[h]);let l=h=>{let u=new Map;for(let[d,p]of i.associations)(d instanceof Pt||d instanceof mt)&&u.set(d,p);return h.traverse(d=>{let p=i.associations.get(d);p!=null&&u.set(d,p)}),u};return i.associations=l(r),r})}_createAnimationTracks(e,t,n,i,r){let o=[],a=e.name?e.name:e.uuid,c=[];Dn[r.path]===Dn.weights?e.traverse(function(d){d.morphTargetInfluences&&c.push(d.name?d.name:d.uuid)}):c.push(a);let l;switch(Dn[r.path]){case Dn.weights:l=gn;break;case Dn.rotation:l=en;break;case Dn.position:case Dn.scale:l=_n;break;default:switch(n.itemSize){case 1:l=gn;break;case 2:case 3:default:l=_n;break}break}let h=i.interpolation!==void 0?ag[i.interpolation]:Kn,u=this._getArrayFromAccessor(n);for(let d=0,p=c.length;d<p;d++){let g=new l(c[d]+\".\"+Dn[r.path],t.array,u,h);i.interpolation===\"CUBICSPLINE\"&&this._createCubicSplineTrackInterpolant(g),o.push(g)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){let n=fa(t.constructor),i=new Float32Array(t.length);for(let r=0,o=t.length;r<o;r++)i[r]=t[r]*n;t=i}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){let i=this instanceof en?ua:dr;return new i(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}};function pg(s,e,t){let n=e.attributes,i=new Ot;if(n.POSITION!==void 0){let a=t.json.accessors[n.POSITION],c=a.min,l=a.max;if(c!==void 0&&l!==void 0){if(i.set(new P(c[0],c[1],c[2]),new P(l[0],l[1],l[2])),a.normalized){let h=fa(Di[a.componentType]);i.min.multiplyScalar(h),i.max.multiplyScalar(h)}}else{console.warn(\"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\");return}}else return;let r=e.targets;if(r!==void 0){let a=new P,c=new P;for(let l=0,h=r.length;l<h;l++){let u=r[l];if(u.POSITION!==void 0){let d=t.json.accessors[u.POSITION],p=d.min,g=d.max;if(p!==void 0&&g!==void 0){if(c.setX(Math.max(Math.abs(p[0]),Math.abs(g[0]))),c.setY(Math.max(Math.abs(p[1]),Math.abs(g[1]))),c.setZ(Math.max(Math.abs(p[2]),Math.abs(g[2]))),d.normalized){let _=fa(Di[d.componentType]);c.multiplyScalar(_)}a.max(c)}else console.warn(\"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\")}}i.expandByVector(a)}s.boundingBox=i;let o=new Ct;i.getCenter(o.center),o.radius=i.min.distanceTo(i.max)/2,s.boundingSphere=o}function Dl(s,e,t){let n=e.attributes,i=[];function r(o,a){return t.getDependency(\"accessor\",o).then(function(c){s.setAttribute(a,c)})}for(let o in n){let a=da[o]||o.toLowerCase();a in s.attributes||i.push(r(n[o],a))}if(e.indices!==void 0&&!s.index){let o=t.getDependency(\"accessor\",e.indices).then(function(a){s.setIndex(a)});i.push(o)}return Nn(s,e),pg(s,e,t),Promise.all(i).then(function(){return e.targets!==void 0?lg(s,e.targets,t):s})}var ma=new WeakMap,ga=class extends Yt{constructor(e){super(e),this.decoderPath=\"\",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL=\"\",this.defaultAttributeIDs={position:\"POSITION\",normal:\"NORMAL\",color:\"COLOR\",uv:\"TEX_COORD\"},this.defaultAttributeTypes={position:\"Float32Array\",normal:\"Float32Array\",color:\"Float32Array\",uv:\"Float32Array\"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,i){let r=new Un(this.manager);r.setPath(this.path),r.setResponseType(\"arraybuffer\"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,o=>{this.parse(o,t,i)},n,i)}parse(e,t,n){this.decodeDracoFile(e,t,null,null,xe).catch(n)}decodeDracoFile(e,t,n,i,r=Nt){let o={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:i||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:r};return this.decodeGeometry(e,o).then(t)}decodeGeometry(e,t){let n=JSON.stringify(t);if(ma.has(e)){let c=ma.get(e);if(c.key===n)return c.promise;if(e.byteLength===0)throw new Error(\"THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.\")}let i,r=this.workerNextTaskID++,o=e.byteLength,a=this._getWorker(r,o).then(c=>(i=c,new Promise((l,h)=>{i._callbacks[r]={resolve:l,reject:h},i.postMessage({type:\"decode\",id:r,taskConfig:t,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return a.catch(()=>!0).then(()=>{i&&r&&this._releaseTask(i,r)}),ma.set(e,{key:n,promise:a}),a}_createGeometry(e){let t=new At;e.index&&t.setIndex(new $e(e.index.array,1));for(let n=0;n<e.attributes.length;n++){let i=e.attributes[n],r=i.name,o=i.array,a=i.itemSize,c=new $e(o,a);r===\"color\"&&(this._assignVertexColorSpace(c,i.vertexColorSpace),c.normalized=!(o instanceof Float32Array)),t.setAttribute(r,c)}return t}_assignVertexColorSpace(e,t){if(t!==xe)return;let n=new Ae;for(let i=0,r=e.count;i<r;i++)n.fromBufferAttribute(e,i).convertSRGBToLinear(),e.setXYZ(i,n.r,n.g,n.b)}_loadLibrary(e,t){let n=new Un(this.manager);return n.setPath(this.decoderPath),n.setResponseType(t),n.setWithCredentials(this.withCredentials),new Promise((i,r)=>{n.load(e,i,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!=\"object\"||this.decoderConfig.type===\"js\",t=[];return e?t.push(this._loadLibrary(\"draco_decoder.js\",\"text\")):(t.push(this._loadLibrary(\"draco_wasm_wrapper.js\",\"text\")),t.push(this._loadLibrary(\"draco_decoder.wasm\",\"arraybuffer\"))),this.decoderPending=Promise.all(t).then(n=>{let i=n[0];e||(this.decoderConfig.wasmBinary=n[1]);let r=mg.toString(),o=[\"/* draco decoder */\",i,\"\",\"/* worker */\",r.substring(r.indexOf(\"{\")+1,r.lastIndexOf(\"}\"))].join(`\n`);this.workerSourceURL=URL.createObjectURL(new Blob([o]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let i=new Worker(this.workerSourceURL);i._callbacks={},i._taskCosts={},i._taskLoad=0,i.postMessage({type:\"init\",decoderConfig:this.decoderConfig}),i.onmessage=function(r){let o=r.data;switch(o.type){case\"decode\":i._callbacks[o.id].resolve(o);break;case\"error\":i._callbacks[o.id].reject(o);break;default:console.error('THREE.DRACOLoader: Unexpected message, \"'+o.type+'\"')}},this.workerPool.push(i)}else this.workerPool.sort(function(i,r){return i._taskLoad>r._taskLoad?-1:1});let n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log(\"Task load: \",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==\"\"&&URL.revokeObjectURL(this.workerSourceURL),this}};function mg(){let s,e;onmessage=function(o){let a=o.data;switch(a.type){case\"init\":s=a.decoderConfig,e=new Promise(function(h){s.onModuleLoaded=function(u){h({draco:u})},DracoDecoderModule(s)});break;case\"decode\":let c=a.buffer,l=a.taskConfig;e.then(h=>{let u=h.draco,d=new u.Decoder;try{let p=t(u,d,new Int8Array(c),l),g=p.attributes.map(_=>_.array.buffer);p.index&&g.push(p.index.array.buffer),self.postMessage({type:\"decode\",id:a.id,geometry:p},g)}catch(p){console.error(p),self.postMessage({type:\"error\",id:a.id,error:p.message})}finally{u.destroy(d)}});break}};function t(o,a,c,l){let h=l.attributeIDs,u=l.attributeTypes,d,p,g=a.GetEncodedGeometryType(c);if(g===o.TRIANGULAR_MESH)d=new o.Mesh,p=a.DecodeArrayToMesh(c,c.byteLength,d);else if(g===o.POINT_CLOUD)d=new o.PointCloud,p=a.DecodeArrayToPointCloud(c,c.byteLength,d);else throw new Error(\"THREE.DRACOLoader: Unexpected geometry type.\");if(!p.ok()||d.ptr===0)throw new Error(\"THREE.DRACOLoader: Decoding failed: \"+p.error_msg());let _={index:null,attributes:[]};for(let m in h){let f=self[u[m]],S,x;if(l.useUniqueIDs)x=h[m],S=a.GetAttributeByUniqueId(d,x);else{if(x=a.GetAttributeId(d,o[h[m]]),x===-1)continue;S=a.GetAttribute(d,x)}let A=i(o,a,d,m,f,S);m===\"color\"&&(A.vertexColorSpace=l.vertexColorSpace),_.attributes.push(A)}return g===o.TRIANGULAR_MESH&&(_.index=n(o,a,d)),o.destroy(d),_}function n(o,a,c){let h=c.num_faces()*3,u=h*4,d=o._malloc(u);a.GetTrianglesUInt32Array(c,u,d);let p=new Uint32Array(o.HEAPF32.buffer,d,h).slice();return o._free(d),{array:p,itemSize:1}}function i(o,a,c,l,h,u){let d=u.num_components(),g=c.num_points()*d,_=g*h.BYTES_PER_ELEMENT,m=r(o,h),f=o._malloc(_);a.GetAttributeDataArrayForAllPoints(c,u,m,_,f);let S=new h(o.HEAPF32.buffer,f,g).slice();return o._free(f),{name:l,array:S,itemSize:d}}function r(o,a){switch(a){case Float32Array:return o.DT_FLOAT32;case Int8Array:return o.DT_INT8;case Int16Array:return o.DT_INT16;case Int32Array:return o.DT_INT32;case Uint8Array:return o.DT_UINT8;case Uint16Array:return o.DT_UINT16;case Uint32Array:return o.DT_UINT32}}}export{ga as DRACOLoader,Wo as GLTFLoader};\n/**\n * @license\n * Copyright 2010-2023 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\n"
  },
  {
    "path": "lang/shadeup/engine/input/input.ts",
    "content": "import { keyboardKeys } from './keyboardKeys';\n\nexport type MouseState = {\n\tbutton: [boolean, boolean, boolean];\n\tclicked: [boolean, boolean, boolean];\n\tscreen: [number, number];\n\tuv: [number, number];\n\tstartScreen: [number, number];\n\tstartUv: [number, number];\n\tdeltaUv: [number, number];\n\tframeDeltaUv: [number, number];\n\tdeltaScreen: [number, number];\n\tframeDeltaScreen: [number, number];\n\tdragging: boolean;\n\tvelocity: number;\n\twheel: number;\n\tfocused: boolean;\n};\n\nexport function initInput(\n\tcanvas: HTMLCanvasElement,\n\tmouseState: MouseState,\n\tkeyboardSink: Map<string, boolean>\n) {\n\tlet frameKeySink = new Map<string, boolean>();\n\twindow.addEventListener('keydown', (e) => {\n\t\tkeyboardSink.set(e.code, true);\n\t\tframeKeySink.set(e.code, true);\n\t\tif (e.code.startsWith('Arrow')) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\n\twindow.addEventListener('keyup', (e) => {\n\t\tif (keyboardSink.has(e.code)) {\n\t\t\tkeyboardSink.delete(e.code);\n\t\t}\n\t});\n\n\tlet puckDown = false;\n\tlet puckId = '';\n\n\tlet offsetLeft = document.querySelector('.ui-container')?.offsetLeft ?? 0;\n\tlet offsetTop = document.querySelector('.ui-container')?.offsetTop ?? 0;\n\n\twindow.addEventListener('mousedown', (e: MouseEvent) => {\n\t\tif (e.target && (e.target as HTMLElement).closest('.ui-container')) {\n\t\t\tmouseState.button[e.button] = true;\n\t\t\tconsole.log('down', mouseState.button);\n\t\t\tmouseState.startScreen = [...mouseState.screen];\n\t\t\tmouseState.startUv = [...mouseState.uv];\n\t\t\tmouseState.deltaScreen = [0, 0];\n\t\t\tmouseState.deltaUv = [0, 0];\n\t\t\tmouseState.dragging = true;\n\t\t}\n\t});\n\n\twindow.addEventListener('mouseup', (e) => {\n\t\tmouseState.clicked[0] = false;\n\t\tmouseState.clicked[1] = false;\n\t\tmouseState.clicked[2] = false;\n\t\tmouseState.button[e.button] = false;\n\t\tmouseState.dragging = false;\n\t});\n\n\twindow.addEventListener('click', (e) => {\n\t\tif (e.target && (e.target as HTMLElement).closest('.ui-container')) {\n\t\t\tmouseState.clicked[e.button] = true;\n\t\t}\n\t});\n\n\twindow.addEventListener('mousemove', (e) => {\n\t\tmouseState.screen = [\n\t\t\t(e.clientX - offsetLeft) * window.devicePixelRatio,\n\t\t\t(e.clientY - offsetTop) * window.devicePixelRatio\n\t\t];\n\t\tmouseState.uv = [\n\t\t\t((e.clientX - offsetLeft) * window.devicePixelRatio) / canvas.width,\n\t\t\t((e.clientY - offsetTop) * window.devicePixelRatio) / canvas.height\n\t\t];\n\n\t\tif (mouseState.dragging) {\n\t\t\tmouseState.deltaScreen = [\n\t\t\t\tmouseState.screen[0] - mouseState.startScreen[0],\n\t\t\t\tmouseState.screen[1] - mouseState.startScreen[1]\n\t\t\t];\n\t\t\tmouseState.deltaUv = [\n\t\t\t\tmouseState.uv[0] - mouseState.startUv[0],\n\t\t\t\tmouseState.uv[1] - mouseState.startUv[1]\n\t\t\t];\n\t\t}\n\t});\n\n\twindow.addEventListener('touchstart', (e) => {\n\t\tif (e.target && (e.target as HTMLElement).closest('.ui-container')) {\n\t\t\tmouseState.button[0] = true;\n\t\t\tmouseState.startScreen = [...mouseState.screen];\n\t\t\tmouseState.startUv = [...mouseState.uv];\n\t\t\tmouseState.deltaScreen = [0, 0];\n\t\t\tmouseState.deltaUv = [0, 0];\n\t\t\tmouseState.dragging = true;\n\t\t}\n\t});\n\n\twindow.addEventListener('touchend', (e) => {\n\t\tmouseState.button[0] = false;\n\t\tmouseState.dragging = false;\n\t});\n\n\twindow.addEventListener('touchmove', (e) => {\n\t\tmouseState.screen = [\n\t\t\t(e.touches[0].clientX - offsetLeft) * window.devicePixelRatio,\n\t\t\t(e.touches[0].clientY - offsetTop) * window.devicePixelRatio\n\t\t];\n\t\tmouseState.uv = [\n\t\t\t((e.touches[0].clientX - offsetLeft) * window.devicePixelRatio) / canvas.width,\n\t\t\t((e.touches[0].clientY - offsetTop) * window.devicePixelRatio) / canvas.height\n\t\t];\n\n\t\tif (mouseState.dragging) {\n\t\t\tmouseState.deltaScreen = [\n\t\t\t\tmouseState.screen[0] - mouseState.startScreen[0],\n\t\t\t\tmouseState.screen[1] - mouseState.startScreen[1]\n\t\t\t];\n\t\t\tmouseState.deltaUv = [\n\t\t\t\tmouseState.uv[0] - mouseState.startUv[0],\n\t\t\t\tmouseState.uv[1] - mouseState.startUv[1]\n\t\t\t];\n\t\t}\n\t});\n\n\twindow.addEventListener(\n\t\t'wheel',\n\t\t(e) => {\n\t\t\tif (\n\t\t\t\te.target.matches('canvas') ||\n\t\t\t\te.target.matches('.ui-container') ||\n\t\t\t\te.target == document.body\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tmouseState.wheel += normalizeWheel(e).pixelY * -0.01;\n\t\t\t}\n\t\t},\n\t\t{ passive: false }\n\t);\n\twindow.addEventListener('scroll', (e) => {\n\t\tif (\n\t\t\te.target.matches('canvas') ||\n\t\t\te.target.matches('.ui-container') ||\n\t\t\te.target == document.body\n\t\t) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\tdocument.addEventListener('scroll', (e) => {\n\t\t// e.preventDefault();\n\t});\n\n\tlet getKeyboardState = () => {\n\t\tlet keys: { [key: string]: boolean | [number, number] } = {};\n\t\tfor (let key of keyboardKeys) {\n\t\t\tif (!key.code) continue;\n\n\t\t\tlet realKey = key.code[0].toLowerCase() + key.code.slice(1);\n\t\t\tkeys[realKey] = keyboardSink.has(key.code);\n\t\t\tkeys['pressed' + key.code] = frameKeySink.has(key.code);\n\t\t}\n\t\tlet vec = [0, 0];\n\n\t\tif (keys.keyW) vec[1] -= 1;\n\t\tif (keys.keyS) vec[1] += 1;\n\t\tif (keys.keyA) vec[0] -= 1;\n\t\tif (keys.keyD) vec[0] += 1;\n\n\t\tif (keys.arrowUp) vec[1] -= 1;\n\t\tif (keys.arrowDown) vec[1] += 1;\n\t\tif (keys.arrowLeft) vec[0] -= 1;\n\t\tif (keys.arrowRight) vec[0] += 1;\n\n\t\tkeys.arrowVector = [vec[0], vec[1]];\n\t\tframeKeySink.clear();\n\t\treturn keys;\n\t};\n\n\treturn {\n\t\tgetKeyboardState\n\t};\n}\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n// Taken from SO answer/facebook code https://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers\nexport function normalizeWheel(/*object*/ event: any) /*object*/ {\n\tvar sX = 0,\n\t\tsY = 0, // spinX, spinY\n\t\tpX = 0,\n\t\tpY = 0; // pixelX, pixelY\n\n\t// Legacy\n\tif ('detail' in event) {\n\t\tsY = event.detail;\n\t}\n\tif ('wheelDelta' in event) {\n\t\tsY = -event.wheelDelta / 120;\n\t}\n\tif ('wheelDeltaY' in event) {\n\t\tsY = -event.wheelDeltaY / 120;\n\t}\n\tif ('wheelDeltaX' in event) {\n\t\tsX = -event.wheelDeltaX / 120;\n\t}\n\n\t// side scrolling on FF with DOMMouseScroll\n\tif ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {\n\t\tsX = sY;\n\t\tsY = 0;\n\t}\n\n\tpX = sX * PIXEL_STEP;\n\tpY = sY * PIXEL_STEP;\n\n\tif ('deltaY' in event) {\n\t\tpY = event.deltaY;\n\t}\n\tif ('deltaX' in event) {\n\t\tpX = event.deltaX;\n\t}\n\n\tif ((pX || pY) && event.deltaMode) {\n\t\tif (event.deltaMode == 1) {\n\t\t\t// delta in LINE units\n\t\t\tpX *= LINE_HEIGHT;\n\t\t\tpY *= LINE_HEIGHT;\n\t\t} else {\n\t\t\t// delta in PAGE units\n\t\t\tpX *= PAGE_HEIGHT;\n\t\t\tpY *= PAGE_HEIGHT;\n\t\t}\n\t}\n\n\t// Fall-back if spin cannot be determined\n\tif (pX && !sX) {\n\t\tsX = pX < 1 ? -1 : 1;\n\t}\n\tif (pY && !sY) {\n\t\tsY = pY < 1 ? -1 : 1;\n\t}\n\n\treturn { spinX: sX, spinY: sY, pixelX: pX, pixelY: pY };\n}\n"
  },
  {
    "path": "lang/shadeup/engine/input/keyboardKeys.ts",
    "content": "export const keyboardKeys = [\n\t{\n\t\tname: 'backspace',\n\t\twhich: '8',\n\t\tkey: 'Backspace',\n\t\tcode: 'Backspace'\n\t},\n\t{\n\t\tname: 'tab',\n\t\twhich: '9',\n\t\tkey: 'Tab',\n\t\tcode: 'Tab'\n\t},\n\t{\n\t\tname: 'enter',\n\t\twhich: '13',\n\t\tkey: 'Enter',\n\t\tcode: 'Enter'\n\t},\n\t{\n\t\tname: 'shift(left)',\n\t\twhich: '16',\n\t\tkey: 'Shift',\n\t\tcode: 'ShiftLeft'\n\t},\n\t{\n\t\tname: 'shift(right)',\n\t\twhich: '16',\n\t\tkey: 'Shift',\n\t\tcode: 'ShiftRight'\n\t},\n\t{\n\t\tname: 'ctrl(left)',\n\t\twhich: '17',\n\t\tkey: 'Control',\n\t\tcode: 'ControlLeft'\n\t},\n\t{\n\t\tname: 'ctrl(right)',\n\t\twhich: '17',\n\t\tkey: 'Control',\n\t\tcode: 'ControlRight'\n\t},\n\t{\n\t\tname: 'alt(left)',\n\t\twhich: '18',\n\t\tkey: 'Alt',\n\t\tcode: 'AltLeft'\n\t},\n\t{\n\t\tname: 'alt(right)',\n\t\twhich: '18',\n\t\tkey: 'Alt',\n\t\tcode: 'AltRight'\n\t},\n\t{\n\t\tname: 'pause/break',\n\t\twhich: '19',\n\t\tkey: 'Pause',\n\t\tcode: 'Pause'\n\t},\n\t{\n\t\tname: 'caps lock',\n\t\twhich: '20',\n\t\tkey: 'CapsLock',\n\t\tcode: 'CapsLock'\n\t},\n\t{\n\t\tname: 'escape',\n\t\twhich: '27',\n\t\tkey: 'Escape',\n\t\tcode: 'Escape'\n\t},\n\t{\n\t\tname: 'space',\n\t\twhich: '32',\n\t\tkey: '',\n\t\tcode: 'Space'\n\t},\n\t{\n\t\tname: 'page up',\n\t\twhich: '33',\n\t\tkey: 'PageUp',\n\t\tcode: 'PageUp'\n\t},\n\t{\n\t\tname: 'page down',\n\t\twhich: '34',\n\t\tkey: 'PageDown',\n\t\tcode: 'PageDown'\n\t},\n\t{\n\t\tname: 'end',\n\t\twhich: '35',\n\t\tkey: 'End',\n\t\tcode: 'End'\n\t},\n\t{\n\t\tname: 'home',\n\t\twhich: '36',\n\t\tkey: 'Home',\n\t\tcode: 'Home'\n\t},\n\t{\n\t\tname: 'left arrow',\n\t\twhich: '37',\n\t\tkey: 'ArrowLeft',\n\t\tcode: 'ArrowLeft'\n\t},\n\t{\n\t\tname: 'up arrow',\n\t\twhich: '38',\n\t\tkey: 'ArrowUp',\n\t\tcode: 'ArrowUp'\n\t},\n\t{\n\t\tname: 'right arrow',\n\t\twhich: '39',\n\t\tkey: 'ArrowRight',\n\t\tcode: 'ArrowRight'\n\t},\n\t{\n\t\tname: 'down arrow',\n\t\twhich: '40',\n\t\tkey: 'ArrowDown',\n\t\tcode: 'ArrowDown'\n\t},\n\t{\n\t\tname: 'print screen',\n\t\twhich: '44',\n\t\tkey: 'PrintScreen',\n\t\tcode: 'PrintScreen'\n\t},\n\t{\n\t\tname: 'insert',\n\t\twhich: '45',\n\t\tkey: 'Insert',\n\t\tcode: 'Insert'\n\t},\n\t{\n\t\tname: 'delete',\n\t\twhich: '46',\n\t\tkey: 'Delete',\n\t\tcode: 'Delete'\n\t},\n\t{\n\t\tname: '0',\n\t\twhich: '48',\n\t\tkey: '0',\n\t\tcode: 'Digit0'\n\t},\n\t{\n\t\tname: '1',\n\t\twhich: '49',\n\t\tkey: '1',\n\t\tcode: 'Digit1'\n\t},\n\t{\n\t\tname: '2',\n\t\twhich: '50',\n\t\tkey: '2',\n\t\tcode: 'Digit2'\n\t},\n\t{\n\t\tname: '3',\n\t\twhich: '51',\n\t\tkey: '3',\n\t\tcode: 'Digit3'\n\t},\n\t{\n\t\tname: '#',\n\t\twhich: '51',\n\t\tkey: '#',\n\t\tcode: 'Digit3'\n\t},\n\t{\n\t\tname: '4',\n\t\twhich: '52',\n\t\tkey: '4',\n\t\tcode: 'Digit4'\n\t},\n\t{\n\t\tname: '5',\n\t\twhich: '53',\n\t\tkey: '5',\n\t\tcode: 'Digit5'\n\t},\n\t{\n\t\tname: '6',\n\t\twhich: '54',\n\t\tkey: '6',\n\t\tcode: 'Digit6'\n\t},\n\t{\n\t\tname: '7',\n\t\twhich: '55',\n\t\tkey: '7',\n\t\tcode: 'Digit7'\n\t},\n\t{\n\t\tname: '8',\n\t\twhich: '56',\n\t\tkey: '8',\n\t\tcode: 'Digit8'\n\t},\n\t{\n\t\tname: '9',\n\t\twhich: '57',\n\t\tkey: '9',\n\t\tcode: 'Digit9'\n\t},\n\t{\n\t\tname: 'a',\n\t\twhich: '65',\n\t\tkey: 'a',\n\t\tcode: 'KeyA'\n\t},\n\t{\n\t\tname: 'b',\n\t\twhich: '66',\n\t\tkey: 'b',\n\t\tcode: 'KeyB'\n\t},\n\t{\n\t\tname: 'c',\n\t\twhich: '67',\n\t\tkey: 'c',\n\t\tcode: 'KeyC'\n\t},\n\t{\n\t\tname: 'd',\n\t\twhich: '68',\n\t\tkey: 'd',\n\t\tcode: 'KeyD'\n\t},\n\t{\n\t\tname: 'e',\n\t\twhich: '69',\n\t\tkey: 'e',\n\t\tcode: 'KeyE'\n\t},\n\t{\n\t\tname: 'f',\n\t\twhich: '70',\n\t\tkey: 'f',\n\t\tcode: 'KeyF'\n\t},\n\t{\n\t\tname: 'g',\n\t\twhich: '71',\n\t\tkey: 'g',\n\t\tcode: 'KeyG'\n\t},\n\t{\n\t\tname: 'h',\n\t\twhich: '72',\n\t\tkey: 'h',\n\t\tcode: 'KeyH'\n\t},\n\t{\n\t\tname: 'i',\n\t\twhich: '73',\n\t\tkey: 'i',\n\t\tcode: 'KeyI'\n\t},\n\t{\n\t\tname: 'j',\n\t\twhich: '74',\n\t\tkey: 'j',\n\t\tcode: 'KeyJ'\n\t},\n\t{\n\t\tname: 'k',\n\t\twhich: '75',\n\t\tkey: 'k',\n\t\tcode: 'KeyK'\n\t},\n\t{\n\t\tname: 'l',\n\t\twhich: '76',\n\t\tkey: 'l',\n\t\tcode: 'KeyL'\n\t},\n\t{\n\t\tname: 'm',\n\t\twhich: '77',\n\t\tkey: 'm',\n\t\tcode: 'KeyM'\n\t},\n\t{\n\t\tname: 'n',\n\t\twhich: '78',\n\t\tkey: 'n',\n\t\tcode: 'KeyN'\n\t},\n\t{\n\t\tname: 'o',\n\t\twhich: '79',\n\t\tkey: 'o',\n\t\tcode: 'KeyO'\n\t},\n\t{\n\t\tname: 'p',\n\t\twhich: '80',\n\t\tkey: 'p',\n\t\tcode: 'KeyP'\n\t},\n\t{\n\t\tname: 'q',\n\t\twhich: '81',\n\t\tkey: 'q',\n\t\tcode: 'KeyQ'\n\t},\n\t{\n\t\tname: 'r',\n\t\twhich: '82',\n\t\tkey: 'r',\n\t\tcode: 'KeyR'\n\t},\n\t{\n\t\tname: 's',\n\t\twhich: '83',\n\t\tkey: 's',\n\t\tcode: 'KeyS'\n\t},\n\t{\n\t\tname: 't',\n\t\twhich: '84',\n\t\tkey: 't',\n\t\tcode: 'KeyT'\n\t},\n\t{\n\t\tname: 'u',\n\t\twhich: '85',\n\t\tkey: 'u',\n\t\tcode: 'KeyU'\n\t},\n\t{\n\t\tname: 'v',\n\t\twhich: '86',\n\t\tkey: 'v',\n\t\tcode: 'KeyV'\n\t},\n\t{\n\t\tname: 'w',\n\t\twhich: '87',\n\t\tkey: 'w',\n\t\tcode: 'KeyW'\n\t},\n\t{\n\t\tname: 'x',\n\t\twhich: '88',\n\t\tkey: 'x',\n\t\tcode: 'KeyX'\n\t},\n\t{\n\t\tname: 'y',\n\t\twhich: '89',\n\t\tkey: 'y',\n\t\tcode: 'KeyY'\n\t},\n\t{\n\t\tname: 'z',\n\t\twhich: '90',\n\t\tkey: 'z',\n\t\tcode: 'KeyZ'\n\t},\n\t{\n\t\tname: 'left window key',\n\t\twhich: '91',\n\t\tkey: 'Meta',\n\t\tcode: 'MetaLeft'\n\t},\n\t{\n\t\tname: 'right window key',\n\t\twhich: '92',\n\t\tkey: 'Meta',\n\t\tcode: 'MetaRight'\n\t},\n\t{\n\t\tname: 'select key (Context Menu)',\n\t\twhich: '93',\n\t\tkey: 'ContextMenu',\n\t\tcode: 'ContextMenu'\n\t},\n\t{\n\t\tname: 'numpad 0',\n\t\twhich: '96',\n\t\tkey: '0',\n\t\tcode: 'Numpad0'\n\t},\n\t{\n\t\tname: 'numpad 1',\n\t\twhich: '97',\n\t\tkey: '1',\n\t\tcode: 'Numpad1'\n\t},\n\t{\n\t\tname: 'numpad 2',\n\t\twhich: '98',\n\t\tkey: '2',\n\t\tcode: 'Numpad2'\n\t},\n\t{\n\t\tname: 'numpad 3',\n\t\twhich: '99',\n\t\tkey: '3',\n\t\tcode: 'Numpad3'\n\t},\n\t{\n\t\tname: 'numpad 4',\n\t\twhich: '100',\n\t\tkey: '4',\n\t\tcode: 'Numpad4'\n\t},\n\t{\n\t\tname: 'numpad 5',\n\t\twhich: '101',\n\t\tkey: '5',\n\t\tcode: 'Numpad5'\n\t},\n\t{\n\t\tname: 'numpad 6',\n\t\twhich: '102',\n\t\tkey: '6',\n\t\tcode: 'Numpad6'\n\t},\n\t{\n\t\tname: 'numpad 7',\n\t\twhich: '103',\n\t\tkey: '7',\n\t\tcode: 'Numpad7'\n\t},\n\t{\n\t\tname: 'numpad 8',\n\t\twhich: '104',\n\t\tkey: '8',\n\t\tcode: 'Numpad8'\n\t},\n\t{\n\t\tname: 'numpad 9',\n\t\twhich: '105',\n\t\tkey: '9',\n\t\tcode: 'Numpad9'\n\t},\n\t{\n\t\tname: 'multiply',\n\t\twhich: '106',\n\t\tkey: '*',\n\t\tcode: 'NumpadMultiply'\n\t},\n\t{\n\t\tname: 'add',\n\t\twhich: '107',\n\t\tkey: '+',\n\t\tcode: 'NumpadAdd'\n\t},\n\t{\n\t\tname: 'subtract',\n\t\twhich: '109',\n\t\tkey: '-',\n\t\tcode: 'NumpadSubtract'\n\t},\n\t{\n\t\tname: 'decimal point',\n\t\twhich: '110',\n\t\tkey: '.',\n\t\tcode: 'NumpadDecimal'\n\t},\n\t{\n\t\tname: 'divide',\n\t\twhich: '111',\n\t\tkey: '/',\n\t\tcode: 'NumpadDivide'\n\t},\n\t{\n\t\tname: 'f1',\n\t\twhich: '112',\n\t\tkey: 'F1',\n\t\tcode: 'F1'\n\t},\n\t{\n\t\tname: 'f2',\n\t\twhich: '113',\n\t\tkey: 'F2',\n\t\tcode: 'F2'\n\t},\n\t{\n\t\tname: 'f3',\n\t\twhich: '114',\n\t\tkey: 'F3',\n\t\tcode: 'F3'\n\t},\n\t{\n\t\tname: 'f4',\n\t\twhich: '115',\n\t\tkey: 'F4',\n\t\tcode: 'F4'\n\t},\n\t{\n\t\tname: 'f5',\n\t\twhich: '116',\n\t\tkey: 'F5',\n\t\tcode: 'F5'\n\t},\n\t{\n\t\tname: 'f6',\n\t\twhich: '117',\n\t\tkey: 'F6',\n\t\tcode: 'F6'\n\t},\n\t{\n\t\tname: 'f7',\n\t\twhich: '118',\n\t\tkey: 'F7',\n\t\tcode: 'F7'\n\t},\n\t{\n\t\tname: 'f8',\n\t\twhich: '119',\n\t\tkey: 'F8',\n\t\tcode: 'F8'\n\t},\n\t{\n\t\tname: 'f9',\n\t\twhich: '120',\n\t\tkey: 'F9',\n\t\tcode: 'F9'\n\t},\n\t{\n\t\tname: 'f10',\n\t\twhich: '121',\n\t\tkey: 'F10',\n\t\tcode: 'F10'\n\t},\n\t{\n\t\tname: 'f11',\n\t\twhich: '122',\n\t\tkey: 'F11',\n\t\tcode: 'F11'\n\t},\n\t{\n\t\tname: 'f12',\n\t\twhich: '123',\n\t\tkey: 'F12',\n\t\tcode: 'F12'\n\t},\n\t{\n\t\tname: 'num lock',\n\t\twhich: '144',\n\t\tkey: 'NumLock',\n\t\tcode: 'NumLock'\n\t},\n\t{\n\t\tname: 'scroll lock',\n\t\twhich: '145',\n\t\tkey: 'ScrollLock',\n\t\tcode: 'ScrollLock'\n\t},\n\t{\n\t\tname: 'audio volume mute',\n\t\twhich: '173',\n\t\tkey: 'AudioVolumeMute',\n\t\tcode: ''\n\t},\n\t{\n\t\tname: 'audio volume down',\n\t\twhich: '174',\n\t\tkey: 'AudioVolumeDown',\n\t\tcode: ''\n\t},\n\t{\n\t\tname: 'audio volume up',\n\t\twhich: '175',\n\t\tkey: 'AudioVolumeUp',\n\t\tcode: ''\n\t},\n\t{\n\t\tname: 'media player',\n\t\twhich: '181',\n\t\tkey: 'LaunchMediaPlayer',\n\t\tcode: ''\n\t},\n\t{\n\t\tname: 'launch application 1',\n\t\twhich: '182',\n\t\tkey: 'LaunchApplication1',\n\t\tcode: ''\n\t},\n\t{\n\t\tname: 'launch application 2',\n\t\twhich: '183',\n\t\tkey: 'LaunchApplication2',\n\t\tcode: ''\n\t},\n\t{\n\t\tname: 'semi-colon',\n\t\twhich: '186',\n\t\tkey: ';',\n\t\tcode: 'Semicolon'\n\t},\n\t{\n\t\tname: 'equal sign',\n\t\twhich: '187',\n\t\tkey: '=',\n\t\tcode: 'Equal'\n\t},\n\t{\n\t\tname: 'comma',\n\t\twhich: '188',\n\t\tkey: ',',\n\t\tcode: 'Comma'\n\t},\n\t{\n\t\tname: 'dash',\n\t\twhich: '189',\n\t\tkey: '-',\n\t\tcode: 'Minus'\n\t},\n\t{\n\t\tname: 'period',\n\t\twhich: '190',\n\t\tkey: '.',\n\t\tcode: 'Period'\n\t},\n\t{\n\t\tname: 'forward slash',\n\t\twhich: '191',\n\t\tkey: '/',\n\t\tcode: 'Slash'\n\t},\n\t{\n\t\tname: 'Backquote/Grave accent',\n\t\twhich: '192',\n\t\tkey: '`',\n\t\tcode: 'Backquote'\n\t},\n\t{\n\t\tname: 'open bracket',\n\t\twhich: '219',\n\t\tkey: '[',\n\t\tcode: 'BracketLeft'\n\t},\n\t{\n\t\tname: 'back slash',\n\t\twhich: '220',\n\t\tkey: '\\\\',\n\t\tcode: 'Backslash'\n\t},\n\t{\n\t\tname: 'close bracket',\n\t\twhich: '221',\n\t\tkey: ']',\n\t\tcode: 'BracketRight'\n\t},\n\t{\n\t\tname: 'single quote',\n\t\twhich: '222',\n\t\tkey: \"'\",\n\t\tcode: 'Quote'\n\t}\n];\n"
  },
  {
    "path": "lang/shadeup/engine/requirejs.js",
    "content": "/** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n */\n//Not using strict: uneven strict support in browsers, #392, and causes\n//problems with requirejs.exec()/transpiler plugins that may not be strict.\n/*jslint regexp: true, nomen: true, sloppy: true */\n/*global window, navigator, document, importScripts, setTimeout, opera */\n\nvar requirejs, require, define;\n(function (global, setTimeout) {\n\tvar req,\n\t\ts,\n\t\thead,\n\t\tbaseElement,\n\t\tdataMain,\n\t\tsrc,\n\t\tinteractiveScript,\n\t\tcurrentlyAddingScript,\n\t\tmainScript,\n\t\tsubPath,\n\t\tversion = '2.3.6',\n\t\tcommentRegExp = /\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,\n\t\tcjsRequireRegExp = /[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,\n\t\tjsSuffixRegExp = /\\.js$/,\n\t\tcurrDirRegExp = /^\\.\\//,\n\t\top = Object.prototype,\n\t\tostring = op.toString,\n\t\thasOwn = op.hasOwnProperty,\n\t\tisBrowser = !!(\n\t\t\ttypeof window !== 'undefined' &&\n\t\t\ttypeof navigator !== 'undefined' &&\n\t\t\twindow.document\n\t\t),\n\t\tisWebWorker = !isBrowser && typeof importScripts !== 'undefined',\n\t\t//PS3 indicates loaded and complete, but need to wait for complete\n\t\t//specifically. Sequence is 'loading', 'loaded', execution,\n\t\t// then 'complete'. The UA check is unfortunate, but not sure how\n\t\t//to feature test w/o causing perf issues.\n\t\treadyRegExp =\n\t\t\tisBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/,\n\t\tdefContextName = '_',\n\t\t//Oh the tragedy, detecting opera. See the usage of isOpera for reason.\n\t\tisOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',\n\t\tcontexts = {},\n\t\tcfg = {},\n\t\tglobalDefQueue = [],\n\t\tuseInteractive = false;\n\n\t//Could match something like ')//comment', do not lose the prefix to comment.\n\tfunction commentReplace(match, singlePrefix) {\n\t\treturn singlePrefix || '';\n\t}\n\n\tfunction isFunction(it) {\n\t\treturn ostring.call(it) === '[object Function]';\n\t}\n\n\tfunction isArray(it) {\n\t\treturn ostring.call(it) === '[object Array]';\n\t}\n\n\t/**\n\t * Helper function for iterating over an array. If the func returns\n\t * a true value, it will break out of the loop.\n\t */\n\tfunction each(ary, func) {\n\t\tif (ary) {\n\t\t\tvar i;\n\t\t\tfor (i = 0; i < ary.length; i += 1) {\n\t\t\t\tif (ary[i] && func(ary[i], i, ary)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Helper function for iterating over an array backwards. If the func\n\t * returns a true value, it will break out of the loop.\n\t */\n\tfunction eachReverse(ary, func) {\n\t\tif (ary) {\n\t\t\tvar i;\n\t\t\tfor (i = ary.length - 1; i > -1; i -= 1) {\n\t\t\t\tif (ary[i] && func(ary[i], i, ary)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasProp(obj, prop) {\n\t\treturn hasOwn.call(obj, prop);\n\t}\n\n\tfunction getOwn(obj, prop) {\n\t\treturn hasProp(obj, prop) && obj[prop];\n\t}\n\n\t/**\n\t * Cycles over properties in an object and calls a function for each\n\t * property value. If the function returns a truthy value, then the\n\t * iteration is stopped.\n\t */\n\tfunction eachProp(obj, func) {\n\t\tvar prop;\n\t\tfor (prop in obj) {\n\t\t\tif (hasProp(obj, prop)) {\n\t\t\t\tif (func(obj[prop], prop)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Simple function to mix in properties from source into target,\n\t * but only if target does not already have a property of the same name.\n\t */\n\tfunction mixin(target, source, force, deepStringMixin) {\n\t\tif (source) {\n\t\t\teachProp(source, function (value, prop) {\n\t\t\t\tif (force || !hasProp(target, prop)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tdeepStringMixin &&\n\t\t\t\t\t\ttypeof value === 'object' &&\n\t\t\t\t\t\tvalue &&\n\t\t\t\t\t\t!isArray(value) &&\n\t\t\t\t\t\t!isFunction(value) &&\n\t\t\t\t\t\t!(value instanceof RegExp)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (!target[prop]) {\n\t\t\t\t\t\t\ttarget[prop] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmixin(target[prop], value, force, deepStringMixin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn target;\n\t}\n\n\t//Similar to Function.prototype.bind, but the 'this' object is specified\n\t//first, since it is easier to read/figure out what 'this' will be.\n\tfunction bind(obj, fn) {\n\t\treturn function () {\n\t\t\treturn fn.apply(obj, arguments);\n\t\t};\n\t}\n\n\tfunction scripts() {\n\t\treturn document.getElementsByTagName('script');\n\t}\n\n\tfunction defaultOnError(err) {\n\t\tthrow err;\n\t}\n\n\t//Allow getting a global that is expressed in\n\t//dot notation, like 'a.b.c'.\n\tfunction getGlobal(value) {\n\t\tif (!value) {\n\t\t\treturn value;\n\t\t}\n\t\tvar g = global;\n\t\teach(value.split('.'), function (part) {\n\t\t\tg = g[part];\n\t\t});\n\t\treturn g;\n\t}\n\n\t/**\n\t * Constructs an error with a pointer to an URL with more information.\n\t * @param {String} id the error ID that maps to an ID on a web page.\n\t * @param {String} message human readable error.\n\t * @param {Error} [err] the original error, if there is one.\n\t *\n\t * @returns {Error}\n\t */\n\tfunction makeError(id, msg, err, requireModules) {\n\t\tvar e = new Error(msg + '\\nhttps://requirejs.org/docs/errors.html#' + id);\n\t\te.requireType = id;\n\t\te.requireModules = requireModules;\n\t\tif (err) {\n\t\t\te.originalError = err;\n\t\t}\n\t\treturn e;\n\t}\n\n\tif (typeof define !== 'undefined') {\n\t\t//If a define is already in play via another AMD loader,\n\t\t//do not overwrite.\n\t\treturn;\n\t}\n\n\tif (typeof requirejs !== 'undefined') {\n\t\tif (isFunction(requirejs)) {\n\t\t\t//Do not overwrite an existing requirejs instance.\n\t\t\treturn;\n\t\t}\n\t\tcfg = requirejs;\n\t\trequirejs = undefined;\n\t}\n\n\t//Allow for a require config object\n\tif (typeof require !== 'undefined' && !isFunction(require)) {\n\t\t//assume it is a config object.\n\t\tcfg = require;\n\t\trequire = undefined;\n\t}\n\n\tfunction newContext(contextName) {\n\t\tvar inCheckLoaded,\n\t\t\tModule,\n\t\t\tcontext,\n\t\t\thandlers,\n\t\t\tcheckLoadedTimeoutId,\n\t\t\tconfig = {\n\t\t\t\t//Defaults. Do not set a default for map\n\t\t\t\t//config to speed up normalize(), which\n\t\t\t\t//will run faster if there is no default.\n\t\t\t\twaitSeconds: 7,\n\t\t\t\tbaseUrl: './',\n\t\t\t\tpaths: {},\n\t\t\t\tbundles: {},\n\t\t\t\tpkgs: {},\n\t\t\t\tshim: {},\n\t\t\t\tconfig: {}\n\t\t\t},\n\t\t\tregistry = {},\n\t\t\t//registry of just enabled modules, to speed\n\t\t\t//cycle breaking code when lots of modules\n\t\t\t//are registered, but not activated.\n\t\t\tenabledRegistry = {},\n\t\t\tundefEvents = {},\n\t\t\tdefQueue = [],\n\t\t\tdefined = {},\n\t\t\turlFetched = {},\n\t\t\tbundlesMap = {},\n\t\t\trequireCounter = 1,\n\t\t\tunnormalizedCounter = 1;\n\n\t\t/**\n\t\t * Trims the . and .. from an array of path segments.\n\t\t * It will keep a leading path segment if a .. will become\n\t\t * the first path segment, to help with module name lookups,\n\t\t * which act like paths, but can be remapped. But the end result,\n\t\t * all paths that use this function should look normalized.\n\t\t * NOTE: this method MODIFIES the input array.\n\t\t * @param {Array} ary the array of path segments.\n\t\t */\n\t\tfunction trimDots(ary) {\n\t\t\tvar i, part;\n\t\t\tfor (i = 0; i < ary.length; i++) {\n\t\t\t\tpart = ary[i];\n\t\t\t\tif (part === '.') {\n\t\t\t\t\tary.splice(i, 1);\n\t\t\t\t\ti -= 1;\n\t\t\t\t} else if (part === '..') {\n\t\t\t\t\t// If at the start, or previous value is still ..,\n\t\t\t\t\t// keep them so that when converted to a path it may\n\t\t\t\t\t// still work when converted to a path, even though\n\t\t\t\t\t// as an ID it is less than ideal. In larger point\n\t\t\t\t\t// releases, may be better to just kick out an error.\n\t\t\t\t\tif (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (i > 0) {\n\t\t\t\t\t\tary.splice(i - 1, 2);\n\t\t\t\t\t\ti -= 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Given a relative module name, like ./something, normalize it to\n\t\t * a real name that can be mapped to a path.\n\t\t * @param {String} name the relative name\n\t\t * @param {String} baseName a real name that the name arg is relative\n\t\t * to.\n\t\t * @param {Boolean} applyMap apply the map config to the value. Should\n\t\t * only be done if this normalization is for a dependency ID.\n\t\t * @returns {String} normalized name\n\t\t */\n\t\tfunction normalize(name, baseName, applyMap) {\n\t\t\tvar pkgMain,\n\t\t\t\tmapValue,\n\t\t\t\tnameParts,\n\t\t\t\ti,\n\t\t\t\tj,\n\t\t\t\tnameSegment,\n\t\t\t\tlastIndex,\n\t\t\t\tfoundMap,\n\t\t\t\tfoundI,\n\t\t\t\tfoundStarMap,\n\t\t\t\tstarI,\n\t\t\t\tnormalizedBaseParts,\n\t\t\t\tbaseParts = baseName && baseName.split('/'),\n\t\t\t\tmap = config.map,\n\t\t\t\tstarMap = map && map['*'];\n\n\t\t\t//Adjust any relative paths.\n\t\t\tif (name) {\n\t\t\t\tname = name.split('/');\n\t\t\t\tlastIndex = name.length - 1;\n\n\t\t\t\t// If wanting node ID compatibility, strip .js from end\n\t\t\t\t// of IDs. Have to do this here, and not in nameToUrl\n\t\t\t\t// because node allows either .js or non .js to map\n\t\t\t\t// to same file.\n\t\t\t\tif (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n\t\t\t\t\tname[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n\t\t\t\t}\n\n\t\t\t\t// Starts with a '.' so need the baseName\n\t\t\t\tif (name[0].charAt(0) === '.' && baseParts) {\n\t\t\t\t\t//Convert baseName to array, and lop off the last part,\n\t\t\t\t\t//so that . matches that 'directory' and not name of the baseName's\n\t\t\t\t\t//module. For instance, baseName of 'one/two/three', maps to\n\t\t\t\t\t//'one/two/three.js', but we want the directory, 'one/two' for\n\t\t\t\t\t//this normalization.\n\t\t\t\t\tnormalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n\t\t\t\t\tname = normalizedBaseParts.concat(name);\n\t\t\t\t}\n\n\t\t\t\ttrimDots(name);\n\t\t\t\tname = name.join('/');\n\t\t\t}\n\n\t\t\t//Apply map config if available.\n\t\t\tif (applyMap && map && (baseParts || starMap)) {\n\t\t\t\tnameParts = name.split('/');\n\n\t\t\t\touterLoop: for (i = nameParts.length; i > 0; i -= 1) {\n\t\t\t\t\tnameSegment = nameParts.slice(0, i).join('/');\n\n\t\t\t\t\tif (baseParts) {\n\t\t\t\t\t\t//Find the longest baseName segment match in the config.\n\t\t\t\t\t\t//So, do joins on the biggest to smallest lengths of baseParts.\n\t\t\t\t\t\tfor (j = baseParts.length; j > 0; j -= 1) {\n\t\t\t\t\t\t\tmapValue = getOwn(map, baseParts.slice(0, j).join('/'));\n\n\t\t\t\t\t\t\t//baseName segment has config, find if it has one for\n\t\t\t\t\t\t\t//this name.\n\t\t\t\t\t\t\tif (mapValue) {\n\t\t\t\t\t\t\t\tmapValue = getOwn(mapValue, nameSegment);\n\t\t\t\t\t\t\t\tif (mapValue) {\n\t\t\t\t\t\t\t\t\t//Match, update name to the new value.\n\t\t\t\t\t\t\t\t\tfoundMap = mapValue;\n\t\t\t\t\t\t\t\t\tfoundI = i;\n\t\t\t\t\t\t\t\t\tbreak outerLoop;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//Check for a star map match, but just hold on to it,\n\t\t\t\t\t//if there is a shorter segment match later in a matching\n\t\t\t\t\t//config, then favor over this star map.\n\t\t\t\t\tif (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {\n\t\t\t\t\t\tfoundStarMap = getOwn(starMap, nameSegment);\n\t\t\t\t\t\tstarI = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!foundMap && foundStarMap) {\n\t\t\t\t\tfoundMap = foundStarMap;\n\t\t\t\t\tfoundI = starI;\n\t\t\t\t}\n\n\t\t\t\tif (foundMap) {\n\t\t\t\t\tnameParts.splice(0, foundI, foundMap);\n\t\t\t\t\tname = nameParts.join('/');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the name points to a package's name, use\n\t\t\t// the package main instead.\n\t\t\tpkgMain = getOwn(config.pkgs, name);\n\n\t\t\treturn pkgMain ? pkgMain : name;\n\t\t}\n\n\t\tfunction removeScript(name) {\n\t\t\tif (isBrowser) {\n\t\t\t\teach(scripts(), function (scriptNode) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tscriptNode.getAttribute('data-requiremodule') === name &&\n\t\t\t\t\t\tscriptNode.getAttribute('data-requirecontext') === context.contextName\n\t\t\t\t\t) {\n\t\t\t\t\t\tscriptNode.parentNode.removeChild(scriptNode);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction hasPathFallback(id) {\n\t\t\tvar pathConfig = getOwn(config.paths, id);\n\t\t\tif (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {\n\t\t\t\t//Pop off the first array value, since it failed, and\n\t\t\t\t//retry\n\t\t\t\tpathConfig.shift();\n\t\t\t\tcontext.require.undef(id);\n\n\t\t\t\t//Custom require that does not do map translation, since\n\t\t\t\t//ID is \"absolute\", already mapped/resolved.\n\t\t\t\tcontext.makeRequire(null, {\n\t\t\t\t\tskipMap: true\n\t\t\t\t})([id]);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t//Turns a plugin!resource to [plugin, resource]\n\t\t//with the plugin being undefined if the name\n\t\t//did not have a plugin prefix.\n\t\tfunction splitPrefix(name) {\n\t\t\tvar prefix,\n\t\t\t\tindex = name ? name.indexOf('!') : -1;\n\t\t\tif (index > -1) {\n\t\t\t\tprefix = name.substring(0, index);\n\t\t\t\tname = name.substring(index + 1, name.length);\n\t\t\t}\n\t\t\treturn [prefix, name];\n\t\t}\n\n\t\t/**\n\t\t * Creates a module mapping that includes plugin prefix, module\n\t\t * name, and path. If parentModuleMap is provided it will\n\t\t * also normalize the name via require.normalize()\n\t\t *\n\t\t * @param {String} name the module name\n\t\t * @param {String} [parentModuleMap] parent module map\n\t\t * for the module name, used to resolve relative names.\n\t\t * @param {Boolean} isNormalized: is the ID already normalized.\n\t\t * This is true if this call is done for a define() module ID.\n\t\t * @param {Boolean} applyMap: apply the map config to the ID.\n\t\t * Should only be true if this map is for a dependency.\n\t\t *\n\t\t * @returns {Object}\n\t\t */\n\t\tfunction makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {\n\t\t\tvar url,\n\t\t\t\tpluginModule,\n\t\t\t\tsuffix,\n\t\t\t\tnameParts,\n\t\t\t\tprefix = null,\n\t\t\t\tparentName = parentModuleMap ? parentModuleMap.name : null,\n\t\t\t\toriginalName = name,\n\t\t\t\tisDefine = true,\n\t\t\t\tnormalizedName = '';\n\n\t\t\t//If no name, then it means it is a require call, generate an\n\t\t\t//internal name.\n\t\t\tif (!name) {\n\t\t\t\tisDefine = false;\n\t\t\t\tname = '_@r' + (requireCounter += 1);\n\t\t\t}\n\n\t\t\tnameParts = splitPrefix(name);\n\t\t\tprefix = nameParts[0];\n\t\t\tname = nameParts[1];\n\n\t\t\tif (prefix) {\n\t\t\t\tprefix = normalize(prefix, parentName, applyMap);\n\t\t\t\tpluginModule = getOwn(defined, prefix);\n\t\t\t}\n\n\t\t\t//Account for relative paths if there is a base name.\n\t\t\tif (name) {\n\t\t\t\tif (prefix) {\n\t\t\t\t\tif (isNormalized) {\n\t\t\t\t\t\tnormalizedName = name;\n\t\t\t\t\t} else if (pluginModule && pluginModule.normalize) {\n\t\t\t\t\t\t//Plugin is loaded, use its normalize method.\n\t\t\t\t\t\tnormalizedName = pluginModule.normalize(name, function (name) {\n\t\t\t\t\t\t\treturn normalize(name, parentName, applyMap);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If nested plugin references, then do not try to\n\t\t\t\t\t\t// normalize, as it will not normalize correctly. This\n\t\t\t\t\t\t// places a restriction on resourceIds, and the longer\n\t\t\t\t\t\t// term solution is not to normalize until plugins are\n\t\t\t\t\t\t// loaded and all normalizations to allow for async\n\t\t\t\t\t\t// loading of a loader plugin. But for now, fixes the\n\t\t\t\t\t\t// common uses. Details in #1131\n\t\t\t\t\t\tnormalizedName =\n\t\t\t\t\t\t\tname.indexOf('!') === -1 ? normalize(name, parentName, applyMap) : name;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//A regular module.\n\t\t\t\t\tnormalizedName = normalize(name, parentName, applyMap);\n\n\t\t\t\t\t//Normalized name may be a plugin ID due to map config\n\t\t\t\t\t//application in normalize. The map config values must\n\t\t\t\t\t//already be normalized, so do not need to redo that part.\n\t\t\t\t\tnameParts = splitPrefix(normalizedName);\n\t\t\t\t\tprefix = nameParts[0];\n\t\t\t\t\tnormalizedName = nameParts[1];\n\t\t\t\t\tisNormalized = true;\n\n\t\t\t\t\turl = context.nameToUrl(normalizedName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//If the id is a plugin id that cannot be determined if it needs\n\t\t\t//normalization, stamp it with a unique ID so two matching relative\n\t\t\t//ids that may conflict can be separate.\n\t\t\tsuffix =\n\t\t\t\tprefix && !pluginModule && !isNormalized\n\t\t\t\t\t? '_unnormalized' + (unnormalizedCounter += 1)\n\t\t\t\t\t: '';\n\n\t\t\treturn {\n\t\t\t\tprefix: prefix,\n\t\t\t\tname: normalizedName,\n\t\t\t\tparentMap: parentModuleMap,\n\t\t\t\tunnormalized: !!suffix,\n\t\t\t\turl: url,\n\t\t\t\toriginalName: originalName,\n\t\t\t\tisDefine: isDefine,\n\t\t\t\tid: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix\n\t\t\t};\n\t\t}\n\n\t\tfunction getModule(depMap) {\n\t\t\tvar id = depMap.id,\n\t\t\t\tmod = getOwn(registry, id);\n\n\t\t\tif (!mod) {\n\t\t\t\tmod = registry[id] = new context.Module(depMap);\n\t\t\t}\n\n\t\t\treturn mod;\n\t\t}\n\n\t\tfunction on(depMap, name, fn) {\n\t\t\tvar id = depMap.id,\n\t\t\t\tmod = getOwn(registry, id);\n\n\t\t\tif (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) {\n\t\t\t\tif (name === 'defined') {\n\t\t\t\t\tfn(defined[id]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmod = getModule(depMap);\n\t\t\t\tif (mod.error && name === 'error') {\n\t\t\t\t\tfn(mod.error);\n\t\t\t\t} else {\n\t\t\t\t\tmod.on(name, fn);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(err, errback) {\n\t\t\tvar ids = err.requireModules,\n\t\t\t\tnotified = false;\n\n\t\t\tif (errback) {\n\t\t\t\terrback(err);\n\t\t\t} else {\n\t\t\t\teach(ids, function (id) {\n\t\t\t\t\tvar mod = getOwn(registry, id);\n\t\t\t\t\tif (mod) {\n\t\t\t\t\t\t//Set error on module, so it skips timeout checks.\n\t\t\t\t\t\tmod.error = err;\n\t\t\t\t\t\tif (mod.events.error) {\n\t\t\t\t\t\t\tnotified = true;\n\t\t\t\t\t\t\tmod.emit('error', err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!notified) {\n\t\t\t\t\treq.onError(err);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Internal method to transfer globalQueue items to this context's\n\t\t * defQueue.\n\t\t */\n\t\tfunction takeGlobalQueue() {\n\t\t\t//Push all the globalDefQueue items into the context's defQueue\n\t\t\tif (globalDefQueue.length) {\n\t\t\t\teach(globalDefQueue, function (queueItem) {\n\t\t\t\t\tvar id = queueItem[0];\n\t\t\t\t\tif (typeof id === 'string') {\n\t\t\t\t\t\tcontext.defQueueMap[id] = true;\n\t\t\t\t\t}\n\t\t\t\t\tdefQueue.push(queueItem);\n\t\t\t\t});\n\t\t\t\tglobalDefQueue = [];\n\t\t\t}\n\t\t}\n\n\t\thandlers = {\n\t\t\trequire: function (mod) {\n\t\t\t\tif (mod.require) {\n\t\t\t\t\treturn mod.require;\n\t\t\t\t} else {\n\t\t\t\t\treturn (mod.require = context.makeRequire(mod.map));\n\t\t\t\t}\n\t\t\t},\n\t\t\texports: function (mod) {\n\t\t\t\tmod.usingExports = true;\n\t\t\t\tif (mod.map.isDefine) {\n\t\t\t\t\tif (mod.exports) {\n\t\t\t\t\t\treturn (defined[mod.map.id] = mod.exports);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn (mod.exports = defined[mod.map.id] = {});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tmodule: function (mod) {\n\t\t\t\tif (mod.module) {\n\t\t\t\t\treturn mod.module;\n\t\t\t\t} else {\n\t\t\t\t\treturn (mod.module = {\n\t\t\t\t\t\tid: mod.map.id,\n\t\t\t\t\t\turi: mod.map.url,\n\t\t\t\t\t\tconfig: function () {\n\t\t\t\t\t\t\treturn getOwn(config.config, mod.map.id) || {};\n\t\t\t\t\t\t},\n\t\t\t\t\t\texports: mod.exports || (mod.exports = {})\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfunction cleanRegistry(id) {\n\t\t\t//Clean up machinery used for waiting modules.\n\t\t\tdelete registry[id];\n\t\t\tdelete enabledRegistry[id];\n\t\t}\n\n\t\tfunction breakCycle(mod, traced, processed) {\n\t\t\tvar id = mod.map.id;\n\n\t\t\tif (mod.error) {\n\t\t\t\tmod.emit('error', mod.error);\n\t\t\t} else {\n\t\t\t\ttraced[id] = true;\n\t\t\t\teach(mod.depMaps, function (depMap, i) {\n\t\t\t\t\tvar depId = depMap.id,\n\t\t\t\t\t\tdep = getOwn(registry, depId);\n\n\t\t\t\t\t//Only force things that have not completed\n\t\t\t\t\t//being defined, so still in the registry,\n\t\t\t\t\t//and only if it has not been matched up\n\t\t\t\t\t//in the module already.\n\t\t\t\t\tif (dep && !mod.depMatched[i] && !processed[depId]) {\n\t\t\t\t\t\tif (getOwn(traced, depId)) {\n\t\t\t\t\t\t\tmod.defineDep(i, defined[depId]);\n\t\t\t\t\t\t\tmod.check(); //pass false?\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreakCycle(dep, traced, processed);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tprocessed[id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction checkLoaded() {\n\t\t\tvar err,\n\t\t\t\tusingPathFallback,\n\t\t\t\twaitInterval = config.waitSeconds * 1000,\n\t\t\t\t//It is possible to disable the wait interval by using waitSeconds of 0.\n\t\t\t\texpired = waitInterval && context.startTime + waitInterval < new Date().getTime(),\n\t\t\t\tnoLoads = [],\n\t\t\t\treqCalls = [],\n\t\t\t\tstillLoading = false,\n\t\t\t\tneedCycleCheck = true;\n\n\t\t\t//Do not bother if this call was a result of a cycle break.\n\t\t\tif (inCheckLoaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinCheckLoaded = true;\n\n\t\t\t//Figure out the state of all the modules.\n\t\t\teachProp(enabledRegistry, function (mod) {\n\t\t\t\tvar map = mod.map,\n\t\t\t\t\tmodId = map.id;\n\n\t\t\t\t//Skip things that are not enabled or in error state.\n\t\t\t\tif (!mod.enabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!map.isDefine) {\n\t\t\t\t\treqCalls.push(mod);\n\t\t\t\t}\n\n\t\t\t\tif (!mod.error) {\n\t\t\t\t\t//If the module should be executed, and it has not\n\t\t\t\t\t//been inited and time is up, remember it.\n\t\t\t\t\tif (!mod.inited && expired) {\n\t\t\t\t\t\tif (hasPathFallback(modId)) {\n\t\t\t\t\t\t\tusingPathFallback = true;\n\t\t\t\t\t\t\tstillLoading = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnoLoads.push(modId);\n\t\t\t\t\t\t\tremoveScript(modId);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!mod.inited && mod.fetched && map.isDefine) {\n\t\t\t\t\t\tstillLoading = true;\n\t\t\t\t\t\tif (!map.prefix) {\n\t\t\t\t\t\t\t//No reason to keep looking for unfinished\n\t\t\t\t\t\t\t//loading. If the only stillLoading is a\n\t\t\t\t\t\t\t//plugin resource though, keep going,\n\t\t\t\t\t\t\t//because it may be that a plugin resource\n\t\t\t\t\t\t\t//is waiting on a non-plugin cycle.\n\t\t\t\t\t\t\treturn (needCycleCheck = false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (expired && noLoads.length) {\n\t\t\t\t//If wait time expired, throw error of unloaded modules.\n\t\t\t\terr = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);\n\t\t\t\terr.contextName = context.contextName;\n\t\t\t\treturn onError(err);\n\t\t\t}\n\n\t\t\t//Not expired, check for a cycle.\n\t\t\tif (needCycleCheck) {\n\t\t\t\teach(reqCalls, function (mod) {\n\t\t\t\t\tbreakCycle(mod, {}, {});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//If still waiting on loads, and the waiting load is something\n\t\t\t//other than a plugin resource, or there are still outstanding\n\t\t\t//scripts, then just try back later.\n\t\t\tif ((!expired || usingPathFallback) && stillLoading) {\n\t\t\t\t//Something is still waiting to load. Wait for it, but only\n\t\t\t\t//if a timeout is not already in effect.\n\t\t\t\tif ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {\n\t\t\t\t\tcheckLoadedTimeoutId = setTimeout(function () {\n\t\t\t\t\t\tcheckLoadedTimeoutId = 0;\n\t\t\t\t\t\tcheckLoaded();\n\t\t\t\t\t}, 50);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinCheckLoaded = false;\n\t\t}\n\n\t\tModule = function (map) {\n\t\t\tthis.events = getOwn(undefEvents, map.id) || {};\n\t\t\tthis.map = map;\n\t\t\tthis.shim = getOwn(config.shim, map.id);\n\t\t\tthis.depExports = [];\n\t\t\tthis.depMaps = [];\n\t\t\tthis.depMatched = [];\n\t\t\tthis.pluginMaps = {};\n\t\t\tthis.depCount = 0;\n\n\t\t\t/* this.exports this.factory\n               this.depMaps = [],\n               this.enabled, this.fetched\n            */\n\t\t};\n\n\t\tModule.prototype = {\n\t\t\tinit: function (depMaps, factory, errback, options) {\n\t\t\t\toptions = options || {};\n\n\t\t\t\t//Do not do more inits if already done. Can happen if there\n\t\t\t\t//are multiple define calls for the same module. That is not\n\t\t\t\t//a normal, common case, but it is also not unexpected.\n\t\t\t\tif (this.inited) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.factory = factory;\n\n\t\t\t\tif (errback) {\n\t\t\t\t\t//Register for errors on this module.\n\t\t\t\t\tthis.on('error', errback);\n\t\t\t\t} else if (this.events.error) {\n\t\t\t\t\t//If no errback already, but there are error listeners\n\t\t\t\t\t//on this module, set up an errback to pass to the deps.\n\t\t\t\t\terrback = bind(this, function (err) {\n\t\t\t\t\t\tthis.emit('error', err);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t//Do a copy of the dependency array, so that\n\t\t\t\t//source inputs are not modified. For example\n\t\t\t\t//\"shim\" deps are passed in here directly, and\n\t\t\t\t//doing a direct modification of the depMaps array\n\t\t\t\t//would affect that config.\n\t\t\t\tthis.depMaps = depMaps && depMaps.slice(0);\n\n\t\t\t\tthis.errback = errback;\n\n\t\t\t\t//Indicate this module has be initialized\n\t\t\t\tthis.inited = true;\n\n\t\t\t\tthis.ignore = options.ignore;\n\n\t\t\t\t//Could have option to init this module in enabled mode,\n\t\t\t\t//or could have been previously marked as enabled. However,\n\t\t\t\t//the dependencies are not known until init is called. So\n\t\t\t\t//if enabled previously, now trigger dependencies as enabled.\n\t\t\t\tif (options.enabled || this.enabled) {\n\t\t\t\t\t//Enable this module and dependencies.\n\t\t\t\t\t//Will call this.check()\n\t\t\t\t\tthis.enable();\n\t\t\t\t} else {\n\t\t\t\t\tthis.check();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdefineDep: function (i, depExports) {\n\t\t\t\t//Because of cycles, defined callback for a given\n\t\t\t\t//export can be called more than once.\n\t\t\t\tif (!this.depMatched[i]) {\n\t\t\t\t\tthis.depMatched[i] = true;\n\t\t\t\t\tthis.depCount -= 1;\n\t\t\t\t\tthis.depExports[i] = depExports;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfetch: function () {\n\t\t\t\tif (this.fetched) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.fetched = true;\n\n\t\t\t\tcontext.startTime = new Date().getTime();\n\n\t\t\t\tvar map = this.map;\n\n\t\t\t\t//If the manager is for a plugin managed resource,\n\t\t\t\t//ask the plugin to load it now.\n\t\t\t\tif (this.shim) {\n\t\t\t\t\tcontext.makeRequire(this.map, {\n\t\t\t\t\t\tenableBuildCallback: true\n\t\t\t\t\t})(\n\t\t\t\t\t\tthis.shim.deps || [],\n\t\t\t\t\t\tbind(this, function () {\n\t\t\t\t\t\t\treturn map.prefix ? this.callPlugin() : this.load();\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t//Regular dependency.\n\t\t\t\t\treturn map.prefix ? this.callPlugin() : this.load();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tload: function () {\n\t\t\t\tvar url = this.map.url;\n\n\t\t\t\t//Regular dependency.\n\t\t\t\tif (!urlFetched[url]) {\n\t\t\t\t\turlFetched[url] = true;\n\t\t\t\t\tcontext.load(this.map.id, url);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Checks if the module is ready to define itself, and if so,\n\t\t\t * define it.\n\t\t\t */\n\t\t\tcheck: function () {\n\t\t\t\tif (!this.enabled || this.enabling) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar err,\n\t\t\t\t\tcjsModule,\n\t\t\t\t\tid = this.map.id,\n\t\t\t\t\tdepExports = this.depExports,\n\t\t\t\t\texports = this.exports,\n\t\t\t\t\tfactory = this.factory;\n\n\t\t\t\tif (!this.inited) {\n\t\t\t\t\t// Only fetch if not already in the defQueue.\n\t\t\t\t\tif (!hasProp(context.defQueueMap, id)) {\n\t\t\t\t\t\tthis.fetch();\n\t\t\t\t\t}\n\t\t\t\t} else if (this.error) {\n\t\t\t\t\tthis.emit('error', this.error);\n\t\t\t\t} else if (!this.defining) {\n\t\t\t\t\t//The factory could trigger another require call\n\t\t\t\t\t//that would result in checking this module to\n\t\t\t\t\t//define itself again. If already in the process\n\t\t\t\t\t//of doing that, skip this work.\n\t\t\t\t\tthis.defining = true;\n\n\t\t\t\t\tif (this.depCount < 1 && !this.defined) {\n\t\t\t\t\t\tif (isFunction(factory)) {\n\t\t\t\t\t\t\t//If there is an error listener, favor passing\n\t\t\t\t\t\t\t//to that instead of throwing an error. However,\n\t\t\t\t\t\t\t//only do it for define()'d  modules. require\n\t\t\t\t\t\t\t//errbacks should not be called for failures in\n\t\t\t\t\t\t\t//their callbacks (#699). However if a global\n\t\t\t\t\t\t\t//onError is set, use that.\n\t\t\t\t\t\t\tif ((this.events.error && this.map.isDefine) || req.onError !== defaultOnError) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\texports = context.execCb(id, factory, depExports, exports);\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\terr = e;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\texports = context.execCb(id, factory, depExports, exports);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Favor return value over exports. If node/cjs in play,\n\t\t\t\t\t\t\t// then will not have a return value anyway. Favor\n\t\t\t\t\t\t\t// module.exports assignment over exports object.\n\t\t\t\t\t\t\tif (this.map.isDefine && exports === undefined) {\n\t\t\t\t\t\t\t\tcjsModule = this.module;\n\t\t\t\t\t\t\t\tif (cjsModule) {\n\t\t\t\t\t\t\t\t\texports = cjsModule.exports;\n\t\t\t\t\t\t\t\t} else if (this.usingExports) {\n\t\t\t\t\t\t\t\t\t//exports already set the defined value.\n\t\t\t\t\t\t\t\t\texports = this.exports;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\terr.requireMap = this.map;\n\t\t\t\t\t\t\t\terr.requireModules = this.map.isDefine ? [this.map.id] : null;\n\t\t\t\t\t\t\t\terr.requireType = this.map.isDefine ? 'define' : 'require';\n\t\t\t\t\t\t\t\treturn onError((this.error = err));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//Just a literal value\n\t\t\t\t\t\t\texports = factory;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.exports = exports;\n\n\t\t\t\t\t\tif (this.map.isDefine && !this.ignore) {\n\t\t\t\t\t\t\tdefined[id] = exports;\n\n\t\t\t\t\t\t\tif (req.onResourceLoad) {\n\t\t\t\t\t\t\t\tvar resLoadMaps = [];\n\t\t\t\t\t\t\t\teach(this.depMaps, function (depMap) {\n\t\t\t\t\t\t\t\t\tresLoadMaps.push(depMap.normalizedMap || depMap);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treq.onResourceLoad(context, this.map, resLoadMaps);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Clean up\n\t\t\t\t\t\tcleanRegistry(id);\n\n\t\t\t\t\t\tthis.defined = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t//Finished the define stage. Allow calling check again\n\t\t\t\t\t//to allow define notifications below in the case of a\n\t\t\t\t\t//cycle.\n\t\t\t\t\tthis.defining = false;\n\n\t\t\t\t\tif (this.defined && !this.defineEmitted) {\n\t\t\t\t\t\tthis.defineEmitted = true;\n\t\t\t\t\t\tthis.emit('defined', this.exports);\n\t\t\t\t\t\tthis.defineEmitComplete = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcallPlugin: function () {\n\t\t\t\tvar map = this.map,\n\t\t\t\t\tid = map.id,\n\t\t\t\t\t//Map already normalized the prefix.\n\t\t\t\t\tpluginMap = makeModuleMap(map.prefix);\n\n\t\t\t\t//Mark this as a dependency for this plugin, so it\n\t\t\t\t//can be traced for cycles.\n\t\t\t\tthis.depMaps.push(pluginMap);\n\n\t\t\t\ton(\n\t\t\t\t\tpluginMap,\n\t\t\t\t\t'defined',\n\t\t\t\t\tbind(this, function (plugin) {\n\t\t\t\t\t\tvar load,\n\t\t\t\t\t\t\tnormalizedMap,\n\t\t\t\t\t\t\tnormalizedMod,\n\t\t\t\t\t\t\tbundleId = getOwn(bundlesMap, this.map.id),\n\t\t\t\t\t\t\tname = this.map.name,\n\t\t\t\t\t\t\tparentName = this.map.parentMap ? this.map.parentMap.name : null,\n\t\t\t\t\t\t\tlocalRequire = context.makeRequire(map.parentMap, {\n\t\t\t\t\t\t\t\tenableBuildCallback: true\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//If current map is not normalized, wait for that\n\t\t\t\t\t\t//normalized name to load instead of continuing.\n\t\t\t\t\t\tif (this.map.unnormalized) {\n\t\t\t\t\t\t\t//Normalize the ID if the plugin allows it.\n\t\t\t\t\t\t\tif (plugin.normalize) {\n\t\t\t\t\t\t\t\tname =\n\t\t\t\t\t\t\t\t\tplugin.normalize(name, function (name) {\n\t\t\t\t\t\t\t\t\t\treturn normalize(name, parentName, true);\n\t\t\t\t\t\t\t\t\t}) || '';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//prefix and name should already be normalized, no need\n\t\t\t\t\t\t\t//for applying map config again either.\n\t\t\t\t\t\t\tnormalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap, true);\n\t\t\t\t\t\t\ton(\n\t\t\t\t\t\t\t\tnormalizedMap,\n\t\t\t\t\t\t\t\t'defined',\n\t\t\t\t\t\t\t\tbind(this, function (value) {\n\t\t\t\t\t\t\t\t\tthis.map.normalizedMap = normalizedMap;\n\t\t\t\t\t\t\t\t\tthis.init(\n\t\t\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\t\t\t\t\tignore: true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tnormalizedMod = getOwn(registry, normalizedMap.id);\n\t\t\t\t\t\t\tif (normalizedMod) {\n\t\t\t\t\t\t\t\t//Mark this as a dependency for this plugin, so it\n\t\t\t\t\t\t\t\t//can be traced for cycles.\n\t\t\t\t\t\t\t\tthis.depMaps.push(normalizedMap);\n\n\t\t\t\t\t\t\t\tif (this.events.error) {\n\t\t\t\t\t\t\t\t\tnormalizedMod.on(\n\t\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\t\tbind(this, function (err) {\n\t\t\t\t\t\t\t\t\t\t\tthis.emit('error', err);\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnormalizedMod.enable();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//If a paths config, then just load that file instead to\n\t\t\t\t\t\t//resolve the plugin, as it is built into that paths layer.\n\t\t\t\t\t\tif (bundleId) {\n\t\t\t\t\t\t\tthis.map.url = context.nameToUrl(bundleId);\n\t\t\t\t\t\t\tthis.load();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tload = bind(this, function (value) {\n\t\t\t\t\t\t\tthis.init(\n\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tload.error = bind(this, function (err) {\n\t\t\t\t\t\t\tthis.inited = true;\n\t\t\t\t\t\t\tthis.error = err;\n\t\t\t\t\t\t\terr.requireModules = [id];\n\n\t\t\t\t\t\t\t//Remove temp unnormalized modules for this module,\n\t\t\t\t\t\t\t//since they will never be resolved otherwise now.\n\t\t\t\t\t\t\teachProp(registry, function (mod) {\n\t\t\t\t\t\t\t\tif (mod.map.id.indexOf(id + '_unnormalized') === 0) {\n\t\t\t\t\t\t\t\t\tcleanRegistry(mod.map.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tonError(err);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//Allow plugins to load other code without having to know the\n\t\t\t\t\t\t//context or how to 'complete' the load.\n\t\t\t\t\t\tload.fromText = bind(this, function (text, textAlt) {\n\t\t\t\t\t\t\t/*jslint evil: true */\n\t\t\t\t\t\t\tvar moduleName = map.name,\n\t\t\t\t\t\t\t\tmoduleMap = makeModuleMap(moduleName),\n\t\t\t\t\t\t\t\thasInteractive = useInteractive;\n\n\t\t\t\t\t\t\t//As of 2.1.0, support just passing the text, to reinforce\n\t\t\t\t\t\t\t//fromText only being called once per resource. Still\n\t\t\t\t\t\t\t//support old style of passing moduleName but discard\n\t\t\t\t\t\t\t//that moduleName in favor of the internal ref.\n\t\t\t\t\t\t\tif (textAlt) {\n\t\t\t\t\t\t\t\ttext = textAlt;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Turn off interactive script matching for IE for any define\n\t\t\t\t\t\t\t//calls in the text, then turn it back on at the end.\n\t\t\t\t\t\t\tif (hasInteractive) {\n\t\t\t\t\t\t\t\tuseInteractive = false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Prime the system by creating a module instance for\n\t\t\t\t\t\t\t//it.\n\t\t\t\t\t\t\tgetModule(moduleMap);\n\n\t\t\t\t\t\t\t//Transfer any config to this other module.\n\t\t\t\t\t\t\tif (hasProp(config.config, id)) {\n\t\t\t\t\t\t\t\tconfig.config[moduleName] = config.config[id];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treq.exec(text);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn onError(\n\t\t\t\t\t\t\t\t\tmakeError('fromtexteval', 'fromText eval for ' + id + ' failed: ' + e, e, [id])\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hasInteractive) {\n\t\t\t\t\t\t\t\tuseInteractive = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Mark this as a dependency for the plugin\n\t\t\t\t\t\t\t//resource\n\t\t\t\t\t\t\tthis.depMaps.push(moduleMap);\n\n\t\t\t\t\t\t\t//Support anonymous modules.\n\t\t\t\t\t\t\tcontext.completeLoad(moduleName);\n\n\t\t\t\t\t\t\t//Bind the value of that module to the value for this\n\t\t\t\t\t\t\t//resource ID.\n\t\t\t\t\t\t\tlocalRequire([moduleName], load);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//Use parentName here since the plugin's name is not reliable,\n\t\t\t\t\t\t//could be some weird string with no path that actually wants to\n\t\t\t\t\t\t//reference the parentName's path.\n\t\t\t\t\t\tplugin.load(map.name, localRequire, load, config);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tcontext.enable(pluginMap, this);\n\t\t\t\tthis.pluginMaps[pluginMap.id] = pluginMap;\n\t\t\t},\n\n\t\t\tenable: function () {\n\t\t\t\tenabledRegistry[this.map.id] = this;\n\t\t\t\tthis.enabled = true;\n\n\t\t\t\t//Set flag mentioning that the module is enabling,\n\t\t\t\t//so that immediate calls to the defined callbacks\n\t\t\t\t//for dependencies do not trigger inadvertent load\n\t\t\t\t//with the depCount still being zero.\n\t\t\t\tthis.enabling = true;\n\n\t\t\t\t//Enable each dependency\n\t\t\t\teach(\n\t\t\t\t\tthis.depMaps,\n\t\t\t\t\tbind(this, function (depMap, i) {\n\t\t\t\t\t\tvar id, mod, handler;\n\n\t\t\t\t\t\tif (typeof depMap === 'string') {\n\t\t\t\t\t\t\t//Dependency needs to be converted to a depMap\n\t\t\t\t\t\t\t//and wired up to this module.\n\t\t\t\t\t\t\tdepMap = makeModuleMap(\n\t\t\t\t\t\t\t\tdepMap,\n\t\t\t\t\t\t\t\tthis.map.isDefine ? this.map : this.map.parentMap,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t!this.skipMap\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.depMaps[i] = depMap;\n\n\t\t\t\t\t\t\thandler = getOwn(handlers, depMap.id);\n\n\t\t\t\t\t\t\tif (handler) {\n\t\t\t\t\t\t\t\tthis.depExports[i] = handler(this);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.depCount += 1;\n\n\t\t\t\t\t\t\ton(\n\t\t\t\t\t\t\t\tdepMap,\n\t\t\t\t\t\t\t\t'defined',\n\t\t\t\t\t\t\t\tbind(this, function (depExports) {\n\t\t\t\t\t\t\t\t\tif (this.undefed) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis.defineDep(i, depExports);\n\t\t\t\t\t\t\t\t\tthis.check();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (this.errback) {\n\t\t\t\t\t\t\t\ton(depMap, 'error', bind(this, this.errback));\n\t\t\t\t\t\t\t} else if (this.events.error) {\n\t\t\t\t\t\t\t\t// No direct errback on this module, but something\n\t\t\t\t\t\t\t\t// else is listening for errors, so be sure to\n\t\t\t\t\t\t\t\t// propagate the error correctly.\n\t\t\t\t\t\t\t\ton(\n\t\t\t\t\t\t\t\t\tdepMap,\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tbind(this, function (err) {\n\t\t\t\t\t\t\t\t\t\tthis.emit('error', err);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tid = depMap.id;\n\t\t\t\t\t\tmod = registry[id];\n\n\t\t\t\t\t\t//Skip special modules like 'require', 'exports', 'module'\n\t\t\t\t\t\t//Also, don't call enable if it is already enabled,\n\t\t\t\t\t\t//important in circular dependency cases.\n\t\t\t\t\t\tif (!hasProp(handlers, id) && mod && !mod.enabled) {\n\t\t\t\t\t\t\tcontext.enable(depMap, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\t//Enable each plugin that is used in\n\t\t\t\t//a dependency\n\t\t\t\teachProp(\n\t\t\t\t\tthis.pluginMaps,\n\t\t\t\t\tbind(this, function (pluginMap) {\n\t\t\t\t\t\tvar mod = getOwn(registry, pluginMap.id);\n\t\t\t\t\t\tif (mod && !mod.enabled) {\n\t\t\t\t\t\t\tcontext.enable(pluginMap, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tthis.enabling = false;\n\n\t\t\t\tthis.check();\n\t\t\t},\n\n\t\t\ton: function (name, cb) {\n\t\t\t\tvar cbs = this.events[name];\n\t\t\t\tif (!cbs) {\n\t\t\t\t\tcbs = this.events[name] = [];\n\t\t\t\t}\n\t\t\t\tcbs.push(cb);\n\t\t\t},\n\n\t\t\temit: function (name, evt) {\n\t\t\t\teach(this.events[name], function (cb) {\n\t\t\t\t\tcb(evt);\n\t\t\t\t});\n\t\t\t\tif (name === 'error') {\n\t\t\t\t\t//Now that the error handler was triggered, remove\n\t\t\t\t\t//the listeners, since this broken Module instance\n\t\t\t\t\t//can stay around for a while in the registry.\n\t\t\t\t\tdelete this.events[name];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfunction callGetModule(args) {\n\t\t\t//Skip modules already defined.\n\t\t\tif (!hasProp(defined, args[0])) {\n\t\t\t\tgetModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);\n\t\t\t}\n\t\t}\n\n\t\tfunction removeListener(node, func, name, ieName) {\n\t\t\t//Favor detachEvent because of IE9\n\t\t\t//issue, see attachEvent/addEventListener comment elsewhere\n\t\t\t//in this file.\n\t\t\tif (node.detachEvent && !isOpera) {\n\t\t\t\t//Probably IE. If not it will throw an error, which will be\n\t\t\t\t//useful to know.\n\t\t\t\tif (ieName) {\n\t\t\t\t\tnode.detachEvent(ieName, func);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.removeEventListener(name, func, false);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Given an event from a script node, get the requirejs info from it,\n\t\t * and then removes the event listeners on the node.\n\t\t * @param {Event} evt\n\t\t * @returns {Object}\n\t\t */\n\t\tfunction getScriptData(evt) {\n\t\t\t//Using currentTarget instead of target for Firefox 2.0's sake. Not\n\t\t\t//all old browsers will be supported, but this one was easy enough\n\t\t\t//to support and still makes sense.\n\t\t\tvar node = evt.currentTarget || evt.srcElement;\n\n\t\t\t//Remove the listeners once here.\n\t\t\tremoveListener(node, context.onScriptLoad, 'load', 'onreadystatechange');\n\t\t\tremoveListener(node, context.onScriptError, 'error');\n\n\t\t\treturn {\n\t\t\t\tnode: node,\n\t\t\t\tid: node && node.getAttribute('data-requiremodule')\n\t\t\t};\n\t\t}\n\n\t\tfunction intakeDefines() {\n\t\t\tvar args;\n\n\t\t\t//Any defined modules in the global queue, intake them now.\n\t\t\ttakeGlobalQueue();\n\n\t\t\t//Make sure any remaining defQueue items get properly processed.\n\t\t\twhile (defQueue.length) {\n\t\t\t\targs = defQueue.shift();\n\t\t\t\tif (args[0] === null) {\n\t\t\t\t\treturn onError(\n\t\t\t\t\t\tmakeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t//args are id, deps, factory. Should be normalized by the\n\t\t\t\t\t//define() function.\n\t\t\t\t\tcallGetModule(args);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.defQueueMap = {};\n\t\t}\n\n\t\tcontext = {\n\t\t\tconfig: config,\n\t\t\tcontextName: contextName,\n\t\t\tregistry: registry,\n\t\t\tdefined: defined,\n\t\t\turlFetched: urlFetched,\n\t\t\tdefQueue: defQueue,\n\t\t\tdefQueueMap: {},\n\t\t\tModule: Module,\n\t\t\tmakeModuleMap: makeModuleMap,\n\t\t\tnextTick: req.nextTick,\n\t\t\tonError: onError,\n\n\t\t\t/**\n\t\t\t * Set a configuration for the context.\n\t\t\t * @param {Object} cfg config object to integrate.\n\t\t\t */\n\t\t\tconfigure: function (cfg) {\n\t\t\t\t//Make sure the baseUrl ends in a slash.\n\t\t\t\tif (cfg.baseUrl) {\n\t\t\t\t\tif (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {\n\t\t\t\t\t\tcfg.baseUrl += '/';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Convert old style urlArgs string to a function.\n\t\t\t\tif (typeof cfg.urlArgs === 'string') {\n\t\t\t\t\tvar urlArgs = cfg.urlArgs;\n\t\t\t\t\tcfg.urlArgs = function (id, url) {\n\t\t\t\t\t\treturn (url.indexOf('?') === -1 ? '?' : '&') + urlArgs;\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//Save off the paths since they require special processing,\n\t\t\t\t//they are additive.\n\t\t\t\tvar shim = config.shim,\n\t\t\t\t\tobjs = {\n\t\t\t\t\t\tpaths: true,\n\t\t\t\t\t\tbundles: true,\n\t\t\t\t\t\tconfig: true,\n\t\t\t\t\t\tmap: true\n\t\t\t\t\t};\n\n\t\t\t\teachProp(cfg, function (value, prop) {\n\t\t\t\t\tif (objs[prop]) {\n\t\t\t\t\t\tif (!config[prop]) {\n\t\t\t\t\t\t\tconfig[prop] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmixin(config[prop], value, true, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig[prop] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//Reverse map the bundles\n\t\t\t\tif (cfg.bundles) {\n\t\t\t\t\teachProp(cfg.bundles, function (value, prop) {\n\t\t\t\t\t\teach(value, function (v) {\n\t\t\t\t\t\t\tif (v !== prop) {\n\t\t\t\t\t\t\t\tbundlesMap[v] = prop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t//Merge shim\n\t\t\t\tif (cfg.shim) {\n\t\t\t\t\teachProp(cfg.shim, function (value, id) {\n\t\t\t\t\t\t//Normalize the structure\n\t\t\t\t\t\tif (isArray(value)) {\n\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\tdeps: value\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((value.exports || value.init) && !value.exportsFn) {\n\t\t\t\t\t\t\tvalue.exportsFn = context.makeShimExports(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tshim[id] = value;\n\t\t\t\t\t});\n\t\t\t\t\tconfig.shim = shim;\n\t\t\t\t}\n\n\t\t\t\t//Adjust packages if necessary.\n\t\t\t\tif (cfg.packages) {\n\t\t\t\t\teach(cfg.packages, function (pkgObj) {\n\t\t\t\t\t\tvar location, name;\n\n\t\t\t\t\t\tpkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;\n\n\t\t\t\t\t\tname = pkgObj.name;\n\t\t\t\t\t\tlocation = pkgObj.location;\n\t\t\t\t\t\tif (location) {\n\t\t\t\t\t\t\tconfig.paths[name] = pkgObj.location;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Save pointer to main module ID for pkg name.\n\t\t\t\t\t\t//Remove leading dot in main, so main paths are normalized,\n\t\t\t\t\t\t//and remove any trailing .js, since different package\n\t\t\t\t\t\t//envs have different conventions: some use a module name,\n\t\t\t\t\t\t//some use a file name.\n\t\t\t\t\t\tconfig.pkgs[name] =\n\t\t\t\t\t\t\tpkgObj.name +\n\t\t\t\t\t\t\t'/' +\n\t\t\t\t\t\t\t(pkgObj.main || 'main').replace(currDirRegExp, '').replace(jsSuffixRegExp, '');\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t//If there are any \"waiting to execute\" modules in the registry,\n\t\t\t\t//update the maps for them, since their info, like URLs to load,\n\t\t\t\t//may have changed.\n\t\t\t\teachProp(registry, function (mod, id) {\n\t\t\t\t\t//If module already has init called, since it is too\n\t\t\t\t\t//late to modify them, and ignore unnormalized ones\n\t\t\t\t\t//since they are transient.\n\t\t\t\t\tif (!mod.inited && !mod.map.unnormalized) {\n\t\t\t\t\t\tmod.map = makeModuleMap(id, null, true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//If a deps array or a config callback is specified, then call\n\t\t\t\t//require with those args. This is useful when require is defined as a\n\t\t\t\t//config object before require.js is loaded.\n\t\t\t\tif (cfg.deps || cfg.callback) {\n\t\t\t\t\tcontext.require(cfg.deps || [], cfg.callback);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tmakeShimExports: function (value) {\n\t\t\t\tfunction fn() {\n\t\t\t\t\tvar ret;\n\t\t\t\t\tif (value.init) {\n\t\t\t\t\t\tret = value.init.apply(global, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn ret || (value.exports && getGlobal(value.exports));\n\t\t\t\t}\n\t\t\t\treturn fn;\n\t\t\t},\n\n\t\t\tmakeRequire: function (relMap, options) {\n\t\t\t\toptions = options || {};\n\n\t\t\t\tfunction localRequire(deps, callback, errback) {\n\t\t\t\t\tvar id, map, requireMod;\n\n\t\t\t\t\tif (options.enableBuildCallback && callback && isFunction(callback)) {\n\t\t\t\t\t\tcallback.__requireJsBuild = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof deps === 'string') {\n\t\t\t\t\t\tif (isFunction(callback)) {\n\t\t\t\t\t\t\t//Invalid call\n\t\t\t\t\t\t\treturn onError(makeError('requireargs', 'Invalid require call'), errback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//If require|exports|module are requested, get the\n\t\t\t\t\t\t//value for them from the special handlers. Caveat:\n\t\t\t\t\t\t//this only works while module is being defined.\n\t\t\t\t\t\tif (relMap && hasProp(handlers, deps)) {\n\t\t\t\t\t\t\treturn handlers[deps](registry[relMap.id]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Synchronous access to one module. If require.get is\n\t\t\t\t\t\t//available (as in the Node adapter), prefer that.\n\t\t\t\t\t\tif (req.get) {\n\t\t\t\t\t\t\treturn req.get(context, deps, relMap, localRequire);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Normalize module name, if it contains . or ..\n\t\t\t\t\t\tmap = makeModuleMap(deps, relMap, false, true);\n\t\t\t\t\t\tid = map.id;\n\n\t\t\t\t\t\tif (!hasProp(defined, id)) {\n\t\t\t\t\t\t\treturn onError(\n\t\t\t\t\t\t\t\tmakeError(\n\t\t\t\t\t\t\t\t\t'notloaded',\n\t\t\t\t\t\t\t\t\t'Module name \"' +\n\t\t\t\t\t\t\t\t\t\tid +\n\t\t\t\t\t\t\t\t\t\t'\" has not been loaded yet for context: ' +\n\t\t\t\t\t\t\t\t\t\tcontextName +\n\t\t\t\t\t\t\t\t\t\t(relMap ? '' : '. Use require([])')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn defined[id];\n\t\t\t\t\t}\n\n\t\t\t\t\t//Grab defines waiting in the global queue.\n\t\t\t\t\tintakeDefines();\n\n\t\t\t\t\t//Mark all the dependencies as needing to be loaded.\n\t\t\t\t\tcontext.nextTick(function () {\n\t\t\t\t\t\t//Some defines could have been added since the\n\t\t\t\t\t\t//require call, collect them.\n\t\t\t\t\t\tintakeDefines();\n\n\t\t\t\t\t\trequireMod = getModule(makeModuleMap(null, relMap));\n\n\t\t\t\t\t\t//Store if map config should be applied to this require\n\t\t\t\t\t\t//call for dependencies.\n\t\t\t\t\t\trequireMod.skipMap = options.skipMap;\n\n\t\t\t\t\t\trequireMod.init(deps, callback, errback, {\n\t\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcheckLoaded();\n\t\t\t\t\t});\n\n\t\t\t\t\treturn localRequire;\n\t\t\t\t}\n\n\t\t\t\tmixin(localRequire, {\n\t\t\t\t\tisBrowser: isBrowser,\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Converts a module name + .extension into an URL path.\n\t\t\t\t\t * *Requires* the use of a module name. It does not support using\n\t\t\t\t\t * plain URLs like nameToUrl.\n\t\t\t\t\t */\n\t\t\t\t\ttoUrl: function (moduleNamePlusExt) {\n\t\t\t\t\t\tvar ext,\n\t\t\t\t\t\t\tindex = moduleNamePlusExt.lastIndexOf('.'),\n\t\t\t\t\t\t\tsegment = moduleNamePlusExt.split('/')[0],\n\t\t\t\t\t\t\tisRelative = segment === '.' || segment === '..';\n\n\t\t\t\t\t\t//Have a file extension alias, and it is not the\n\t\t\t\t\t\t//dots from a relative path.\n\t\t\t\t\t\tif (index !== -1 && (!isRelative || index > 1)) {\n\t\t\t\t\t\t\text = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);\n\t\t\t\t\t\t\tmoduleNamePlusExt = moduleNamePlusExt.substring(0, index);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn context.nameToUrl(\n\t\t\t\t\t\t\tnormalize(moduleNamePlusExt, relMap && relMap.id, true),\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\n\t\t\t\t\tdefined: function (id) {\n\t\t\t\t\t\treturn hasProp(defined, makeModuleMap(id, relMap, false, true).id);\n\t\t\t\t\t},\n\n\t\t\t\t\tspecified: function (id) {\n\t\t\t\t\t\tid = makeModuleMap(id, relMap, false, true).id;\n\t\t\t\t\t\treturn hasProp(defined, id) || hasProp(registry, id);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//Only allow undef on top level require calls\n\t\t\t\tif (!relMap) {\n\t\t\t\t\tlocalRequire.undef = function (id) {\n\t\t\t\t\t\t//Bind any waiting define() calls to this context,\n\t\t\t\t\t\t//fix for #408\n\t\t\t\t\t\ttakeGlobalQueue();\n\n\t\t\t\t\t\tvar map = makeModuleMap(id, relMap, true),\n\t\t\t\t\t\t\tmod = getOwn(registry, id);\n\n\t\t\t\t\t\tmod.undefed = true;\n\t\t\t\t\t\tremoveScript(id);\n\n\t\t\t\t\t\tdelete defined[id];\n\t\t\t\t\t\tdelete urlFetched[map.url];\n\t\t\t\t\t\tdelete undefEvents[id];\n\n\t\t\t\t\t\t//Clean queued defines too. Go backwards\n\t\t\t\t\t\t//in array so that the splices do not\n\t\t\t\t\t\t//mess up the iteration.\n\t\t\t\t\t\teachReverse(defQueue, function (args, i) {\n\t\t\t\t\t\t\tif (args[0] === id) {\n\t\t\t\t\t\t\t\tdefQueue.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdelete context.defQueueMap[id];\n\n\t\t\t\t\t\tif (mod) {\n\t\t\t\t\t\t\t//Hold on to listeners in case the\n\t\t\t\t\t\t\t//module will be attempted to be reloaded\n\t\t\t\t\t\t\t//using a different config.\n\t\t\t\t\t\t\tif (mod.events.defined) {\n\t\t\t\t\t\t\t\tundefEvents[id] = mod.events;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcleanRegistry(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn localRequire;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Called to enable a module if it is still in the registry\n\t\t\t * awaiting enablement. A second arg, parent, the parent module,\n\t\t\t * is passed in for context, when this method is overridden by\n\t\t\t * the optimizer. Not shown here to keep code compact.\n\t\t\t */\n\t\t\tenable: function (depMap) {\n\t\t\t\tvar mod = getOwn(registry, depMap.id);\n\t\t\t\tif (mod) {\n\t\t\t\t\tgetModule(depMap).enable();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Internal method used by environment adapters to complete a load event.\n\t\t\t * A load event could be a script load or just a load pass from a synchronous\n\t\t\t * load call.\n\t\t\t * @param {String} moduleName the name of the module to potentially complete.\n\t\t\t */\n\t\t\tcompleteLoad: function (moduleName) {\n\t\t\t\tvar found,\n\t\t\t\t\targs,\n\t\t\t\t\tmod,\n\t\t\t\t\tshim = getOwn(config.shim, moduleName) || {},\n\t\t\t\t\tshExports = shim.exports;\n\n\t\t\t\ttakeGlobalQueue();\n\n\t\t\t\twhile (defQueue.length) {\n\t\t\t\t\targs = defQueue.shift();\n\t\t\t\t\tif (args[0] === null) {\n\t\t\t\t\t\targs[0] = moduleName;\n\t\t\t\t\t\t//If already found an anonymous module and bound it\n\t\t\t\t\t\t//to this name, then this is some other anon module\n\t\t\t\t\t\t//waiting for its completeLoad to fire.\n\t\t\t\t\t\tif (found) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t} else if (args[0] === moduleName) {\n\t\t\t\t\t\t//Found matching define call for this script!\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tcallGetModule(args);\n\t\t\t\t}\n\t\t\t\tcontext.defQueueMap = {};\n\n\t\t\t\t//Do this after the cycle of callGetModule in case the result\n\t\t\t\t//of those calls/init calls changes the registry.\n\t\t\t\tmod = getOwn(registry, moduleName);\n\n\t\t\t\tif (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {\n\t\t\t\t\tif (config.enforceDefine && (!shExports || !getGlobal(shExports))) {\n\t\t\t\t\t\tif (hasPathFallback(moduleName)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn onError(\n\t\t\t\t\t\t\t\tmakeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//A script that does not call define(), so just simulate\n\t\t\t\t\t\t//the call for it.\n\t\t\t\t\t\tcallGetModule([moduleName, shim.deps || [], shim.exportsFn]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcheckLoaded();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Converts a module name to a file path. Supports cases where\n\t\t\t * moduleName may actually be just an URL.\n\t\t\t * Note that it **does not** call normalize on the moduleName,\n\t\t\t * it is assumed to have already been normalized. This is an\n\t\t\t * internal API, not a public one. Use toUrl for the public API.\n\t\t\t */\n\t\t\tnameToUrl: function (moduleName, ext, skipExt) {\n\t\t\t\tvar paths,\n\t\t\t\t\tsyms,\n\t\t\t\t\ti,\n\t\t\t\t\tparentModule,\n\t\t\t\t\turl,\n\t\t\t\t\tparentPath,\n\t\t\t\t\tbundleId,\n\t\t\t\t\tpkgMain = getOwn(config.pkgs, moduleName);\n\n\t\t\t\tif (pkgMain) {\n\t\t\t\t\tmoduleName = pkgMain;\n\t\t\t\t}\n\n\t\t\t\tbundleId = getOwn(bundlesMap, moduleName);\n\n\t\t\t\tif (bundleId) {\n\t\t\t\t\treturn context.nameToUrl(bundleId, ext, skipExt);\n\t\t\t\t}\n\n\t\t\t\t//If a colon is in the URL, it indicates a protocol is used and it is just\n\t\t\t\t//an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)\n\t\t\t\t//or ends with .js, then assume the user meant to use an url and not a module id.\n\t\t\t\t//The slash is important for protocol-less URLs as well as full paths.\n\t\t\t\tif (req.jsExtRegExp.test(moduleName)) {\n\t\t\t\t\t//Just a plain path, not module name lookup, so just return it.\n\t\t\t\t\t//Add extension if it is included. This is a bit wonky, only non-.js things pass\n\t\t\t\t\t//an extension, this method probably needs to be reworked.\n\t\t\t\t\turl = moduleName + (ext || '');\n\t\t\t\t} else {\n\t\t\t\t\t//A module that needs to be converted to a path.\n\t\t\t\t\tpaths = config.paths;\n\n\t\t\t\t\tsyms = moduleName.split('/');\n\t\t\t\t\t//For each module name segment, see if there is a path\n\t\t\t\t\t//registered for it. Start with most specific name\n\t\t\t\t\t//and work up from it.\n\t\t\t\t\tfor (i = syms.length; i > 0; i -= 1) {\n\t\t\t\t\t\tparentModule = syms.slice(0, i).join('/');\n\n\t\t\t\t\t\tparentPath = getOwn(paths, parentModule);\n\t\t\t\t\t\tif (parentPath) {\n\t\t\t\t\t\t\t//If an array, it means there are a few choices,\n\t\t\t\t\t\t\t//Choose the one that is desired\n\t\t\t\t\t\t\tif (isArray(parentPath)) {\n\t\t\t\t\t\t\t\tparentPath = parentPath[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsyms.splice(0, i, parentPath);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//Join the path parts together, then figure out if baseUrl is needed.\n\t\t\t\t\turl = syms.join('/');\n\t\t\t\t\turl += ext || (/^data\\:|^blob\\:|\\?/.test(url) || skipExt ? '' : '.js');\n\t\t\t\t\turl = (url.charAt(0) === '/' || url.match(/^[\\w\\+\\.\\-]+:/) ? '' : config.baseUrl) + url;\n\t\t\t\t}\n\n\t\t\t\treturn config.urlArgs && !/^blob\\:/.test(url) ? url + config.urlArgs(moduleName, url) : url;\n\t\t\t},\n\n\t\t\t//Delegates to req.load. Broken out as a separate function to\n\t\t\t//allow overriding in the optimizer.\n\t\t\tload: function (id, url) {\n\t\t\t\treq.load(context, id, url);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Executes a module callback function. Broken out as a separate function\n\t\t\t * solely to allow the build system to sequence the files in the built\n\t\t\t * layer in the right sequence.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\texecCb: function (name, callback, args, exports) {\n\t\t\t\treturn callback.apply(exports, args);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * callback for script loads, used to check status of loading.\n\t\t\t *\n\t\t\t * @param {Event} evt the event from the browser for the script\n\t\t\t * that was loaded.\n\t\t\t */\n\t\t\tonScriptLoad: function (evt) {\n\t\t\t\t//Using currentTarget instead of target for Firefox 2.0's sake. Not\n\t\t\t\t//all old browsers will be supported, but this one was easy enough\n\t\t\t\t//to support and still makes sense.\n\t\t\t\tif (\n\t\t\t\t\tevt.type === 'load' ||\n\t\t\t\t\treadyRegExp.test((evt.currentTarget || evt.srcElement).readyState)\n\t\t\t\t) {\n\t\t\t\t\t//Reset interactive script so a script node is not held onto for\n\t\t\t\t\t//to long.\n\t\t\t\t\tinteractiveScript = null;\n\n\t\t\t\t\t//Pull out the name of the module and the context.\n\t\t\t\t\tvar data = getScriptData(evt);\n\t\t\t\t\tcontext.completeLoad(data.id);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Callback for script errors.\n\t\t\t */\n\t\t\tonScriptError: function (evt) {\n\t\t\t\tvar data = getScriptData(evt);\n\t\t\t\tif (!hasPathFallback(data.id)) {\n\t\t\t\t\tvar parents = [];\n\t\t\t\t\teachProp(registry, function (value, key) {\n\t\t\t\t\t\tif (key.indexOf('_@r') !== 0) {\n\t\t\t\t\t\t\teach(value.depMaps, function (depMap) {\n\t\t\t\t\t\t\t\tif (depMap.id === data.id) {\n\t\t\t\t\t\t\t\t\tparents.push(key);\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn onError(\n\t\t\t\t\t\tmakeError(\n\t\t\t\t\t\t\t'scripterror',\n\t\t\t\t\t\t\t'Script error for \"' +\n\t\t\t\t\t\t\t\tdata.id +\n\t\t\t\t\t\t\t\t(parents.length ? '\", needed by: ' + parents.join(', ') : '\"'),\n\t\t\t\t\t\t\tevt,\n\t\t\t\t\t\t\t[data.id]\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tcontext.require = context.makeRequire();\n\t\treturn context;\n\t}\n\n\t/**\n\t * Main entry point.\n\t *\n\t * If the only argument to require is a string, then the module that\n\t * is represented by that string is fetched for the appropriate context.\n\t *\n\t * If the first argument is an array, then it will be treated as an array\n\t * of dependency string names to fetch. An optional function callback can\n\t * be specified to execute when all of those dependencies are available.\n\t *\n\t * Make a local req variable to help Caja compliance (it assumes things\n\t * on a require that are not standardized), and to give a short\n\t * name for minification/local scope use.\n\t */\n\treq = requirejs = function (deps, callback, errback, optional) {\n\t\t//Find the right context, use default\n\t\tvar context,\n\t\t\tconfig,\n\t\t\tcontextName = defContextName;\n\n\t\t// Determine if have config object in the call.\n\t\tif (!isArray(deps) && typeof deps !== 'string') {\n\t\t\t// deps is a config object\n\t\t\tconfig = deps;\n\t\t\tif (isArray(callback)) {\n\t\t\t\t// Adjust args if there are dependencies\n\t\t\t\tdeps = callback;\n\t\t\t\tcallback = errback;\n\t\t\t\terrback = optional;\n\t\t\t} else {\n\t\t\t\tdeps = [];\n\t\t\t}\n\t\t}\n\n\t\tif (config && config.context) {\n\t\t\tcontextName = config.context;\n\t\t}\n\n\t\tcontext = getOwn(contexts, contextName);\n\t\tif (!context) {\n\t\t\tcontext = contexts[contextName] = req.s.newContext(contextName);\n\t\t}\n\n\t\tif (config) {\n\t\t\tcontext.configure(config);\n\t\t}\n\n\t\treturn context.require(deps, callback, errback);\n\t};\n\n\t/**\n\t * Support require.config() to make it easier to cooperate with other\n\t * AMD loaders on globally agreed names.\n\t */\n\treq.config = function (config) {\n\t\treturn req(config);\n\t};\n\n\t/**\n\t * Execute something after the current tick\n\t * of the event loop. Override for other envs\n\t * that have a better solution than setTimeout.\n\t * @param  {Function} fn function to execute later.\n\t */\n\treq.nextTick =\n\t\ttypeof setTimeout !== 'undefined'\n\t\t\t? function (fn) {\n\t\t\t\t\tsetTimeout(fn, 4);\n\t\t\t  }\n\t\t\t: function (fn) {\n\t\t\t\t\tfn();\n\t\t\t  };\n\n\t/**\n\t * Export require as a global, but only if it does not already exist.\n\t */\n\tif (!require) {\n\t\trequire = req;\n\t}\n\n\treq.version = version;\n\n\t//Used to filter out dependencies that are already paths.\n\treq.jsExtRegExp = /^\\/|:|\\?|\\.js$/;\n\treq.isBrowser = isBrowser;\n\ts = req.s = {\n\t\tcontexts: contexts,\n\t\tnewContext: newContext\n\t};\n\n\t//Create default context.\n\treq({});\n\n\t//Exports some context-sensitive methods on global require.\n\teach(['toUrl', 'undef', 'defined', 'specified'], function (prop) {\n\t\t//Reference from contexts instead of early binding to default context,\n\t\t//so that during builds, the latest instance of the default context\n\t\t//with its config gets used.\n\t\treq[prop] = function () {\n\t\t\tvar ctx = contexts[defContextName];\n\t\t\treturn ctx.require[prop].apply(ctx, arguments);\n\t\t};\n\t});\n\n\tif (isBrowser) {\n\t\thead = s.head = document.getElementsByTagName('head')[0];\n\t\t//If BASE tag is in play, using appendChild is a problem for IE6.\n\t\t//When that browser dies, this can be removed. Details in this jQuery bug:\n\t\t//http://dev.jquery.com/ticket/2709\n\t\tbaseElement = document.getElementsByTagName('base')[0];\n\t\tif (baseElement) {\n\t\t\thead = s.head = baseElement.parentNode;\n\t\t}\n\t}\n\n\t/**\n\t * Any errors that require explicitly generates will be passed to this\n\t * function. Intercept/override it if you want custom error handling.\n\t * @param {Error} err the error object.\n\t */\n\treq.onError = defaultOnError;\n\n\t/**\n\t * Creates the node for the load command. Only used in browser envs.\n\t */\n\treq.createNode = function (config, moduleName, url) {\n\t\tvar node = config.xhtml\n\t\t\t? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script')\n\t\t\t: document.createElement('script');\n\t\tnode.type = config.scriptType || 'text/javascript';\n\t\tnode.charset = 'utf-8';\n\t\tnode.async = true;\n\t\treturn node;\n\t};\n\n\t/**\n\t * Does the request to load a module for the browser case.\n\t * Make this a separate function to allow other environments\n\t * to override it.\n\t *\n\t * @param {Object} context the require context to find state.\n\t * @param {String} moduleName the name of the module.\n\t * @param {Object} url the URL to the module.\n\t */\n\treq.load = function (context, moduleName, url) {\n\t\tvar config = (context && context.config) || {},\n\t\t\tnode;\n\t\tif (isBrowser) {\n\t\t\t//In the browser so use a script tag\n\t\t\tnode = req.createNode(config, moduleName, url);\n\n\t\t\tnode.setAttribute('data-requirecontext', context.contextName);\n\t\t\tnode.setAttribute('data-requiremodule', moduleName);\n\n\t\t\t//Set up load listener. Test attachEvent first because IE9 has\n\t\t\t//a subtle issue in its addEventListener and script onload firings\n\t\t\t//that do not match the behavior of all other browsers with\n\t\t\t//addEventListener support, which fire the onload event for a\n\t\t\t//script right after the script execution. See:\n\t\t\t//https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution\n\t\t\t//UNFORTUNATELY Opera implements attachEvent but does not follow the script\n\t\t\t//script execution mode.\n\t\t\tif (\n\t\t\t\tnode.attachEvent &&\n\t\t\t\t//Check if node.attachEvent is artificially added by custom script or\n\t\t\t\t//natively supported by browser\n\t\t\t\t//read https://github.com/requirejs/requirejs/issues/187\n\t\t\t\t//if we can NOT find [native code] then it must NOT natively supported.\n\t\t\t\t//in IE8, node.attachEvent does not have toString()\n\t\t\t\t//Note the test for \"[native code\" with no closing brace, see:\n\t\t\t\t//https://github.com/requirejs/requirejs/issues/273\n\t\t\t\t!(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&\n\t\t\t\t!isOpera\n\t\t\t) {\n\t\t\t\t//Probably IE. IE (at least 6-8) do not fire\n\t\t\t\t//script onload right after executing the script, so\n\t\t\t\t//we cannot tie the anonymous define call to a name.\n\t\t\t\t//However, IE reports the script as being in 'interactive'\n\t\t\t\t//readyState at the time of the define call.\n\t\t\t\tuseInteractive = true;\n\n\t\t\t\tnode.attachEvent('onreadystatechange', context.onScriptLoad);\n\t\t\t\t//It would be great to add an error handler here to catch\n\t\t\t\t//404s in IE9+. However, onreadystatechange will fire before\n\t\t\t\t//the error handler, so that does not help. If addEventListener\n\t\t\t\t//is used, then IE will fire error before load, but we cannot\n\t\t\t\t//use that pathway given the connect.microsoft.com issue\n\t\t\t\t//mentioned above about not doing the 'script execute,\n\t\t\t\t//then fire the script load event listener before execute\n\t\t\t\t//next script' that other browsers do.\n\t\t\t\t//Best hope: IE10 fixes the issues,\n\t\t\t\t//and then destroys all installs of IE 6-9.\n\t\t\t\t//node.attachEvent('onerror', context.onScriptError);\n\t\t\t} else {\n\t\t\t\tnode.addEventListener('load', context.onScriptLoad, false);\n\t\t\t\tnode.addEventListener('error', context.onScriptError, false);\n\t\t\t}\n\t\t\tnode.src = url;\n\n\t\t\t//Calling onNodeCreated after all properties on the node have been\n\t\t\t//set, but before it is placed in the DOM.\n\t\t\tif (config.onNodeCreated) {\n\t\t\t\tconfig.onNodeCreated(node, config, moduleName, url);\n\t\t\t}\n\n\t\t\t//For some cache cases in IE 6-8, the script executes before the end\n\t\t\t//of the appendChild execution, so to tie an anonymous define\n\t\t\t//call to the module name (which is stored on the node), hold on\n\t\t\t//to a reference to this node, but clear after the DOM insertion.\n\t\t\tcurrentlyAddingScript = node;\n\t\t\tif (baseElement) {\n\t\t\t\thead.insertBefore(node, baseElement);\n\t\t\t} else {\n\t\t\t\thead.appendChild(node);\n\t\t\t}\n\t\t\tcurrentlyAddingScript = null;\n\n\t\t\treturn node;\n\t\t} else if (isWebWorker) {\n\t\t\ttry {\n\t\t\t\t//In a web worker, use importScripts. This is not a very\n\t\t\t\t//efficient use of importScripts, importScripts will block until\n\t\t\t\t//its script is downloaded and evaluated. However, if web workers\n\t\t\t\t//are in play, the expectation is that a build has been done so\n\t\t\t\t//that only one script needs to be loaded anyway. This may need\n\t\t\t\t//to be reevaluated if other use cases become common.\n\n\t\t\t\t// Post a task to the event loop to work around a bug in WebKit\n\t\t\t\t// where the worker gets garbage-collected after calling\n\t\t\t\t// importScripts(): https://webkit.org/b/153317\n\t\t\t\tsetTimeout(function () {}, 0);\n\t\t\t\timportScripts(url);\n\n\t\t\t\t//Account for anonymous modules\n\t\t\t\tcontext.completeLoad(moduleName);\n\t\t\t} catch (e) {\n\t\t\t\tcontext.onError(\n\t\t\t\t\tmakeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [\n\t\t\t\t\t\tmoduleName\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction getInteractiveScript() {\n\t\tif (interactiveScript && interactiveScript.readyState === 'interactive') {\n\t\t\treturn interactiveScript;\n\t\t}\n\n\t\teachReverse(scripts(), function (script) {\n\t\t\tif (script.readyState === 'interactive') {\n\t\t\t\treturn (interactiveScript = script);\n\t\t\t}\n\t\t});\n\t\treturn interactiveScript;\n\t}\n\n\t//Look for a data-main script attribute, which could also adjust the baseUrl.\n\tif (isBrowser && !cfg.skipDataMain) {\n\t\t//Figure out baseUrl. Get it from the script tag with require.js in it.\n\t\teachReverse(scripts(), function (script) {\n\t\t\t//Set the 'head' where we can append children by\n\t\t\t//using the script's parent.\n\t\t\tif (!head) {\n\t\t\t\thead = script.parentNode;\n\t\t\t}\n\n\t\t\t//Look for a data-main attribute to set main script for the page\n\t\t\t//to load. If it is there, the path to data main becomes the\n\t\t\t//baseUrl, if it is not already set.\n\t\t\tdataMain = script.getAttribute('data-main');\n\t\t\tif (dataMain) {\n\t\t\t\t//Preserve dataMain in case it is a path (i.e. contains '?')\n\t\t\t\tmainScript = dataMain;\n\n\t\t\t\t//Set final baseUrl if there is not already an explicit one,\n\t\t\t\t//but only do so if the data-main value is not a loader plugin\n\t\t\t\t//module ID.\n\t\t\t\tif (!cfg.baseUrl && mainScript.indexOf('!') === -1) {\n\t\t\t\t\t//Pull off the directory of data-main for use as the\n\t\t\t\t\t//baseUrl.\n\t\t\t\t\tsrc = mainScript.split('/');\n\t\t\t\t\tmainScript = src.pop();\n\t\t\t\t\tsubPath = src.length ? src.join('/') + '/' : './';\n\n\t\t\t\t\tcfg.baseUrl = subPath;\n\t\t\t\t}\n\n\t\t\t\t//Strip off any trailing .js since mainScript is now\n\t\t\t\t//like a module name.\n\t\t\t\tmainScript = mainScript.replace(jsSuffixRegExp, '');\n\n\t\t\t\t//If mainScript is still a path, fall back to dataMain\n\t\t\t\tif (req.jsExtRegExp.test(mainScript)) {\n\t\t\t\t\tmainScript = dataMain;\n\t\t\t\t}\n\n\t\t\t\t//Put the data-main script in the files to load.\n\t\t\t\tcfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript];\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * The function that handles definitions of modules. Differs from\n\t * require() in that a string for the module should be the first argument,\n\t * and the function to execute after dependencies are loaded should\n\t * return a value to define the module corresponding to the first argument's\n\t * name.\n\t */\n\tdefine = function (name, deps, callback) {\n\t\tvar node, context;\n\n\t\t//Allow for anonymous modules\n\t\tif (typeof name !== 'string') {\n\t\t\t//Adjust args appropriately\n\t\t\tcallback = deps;\n\t\t\tdeps = name;\n\t\t\tname = null;\n\t\t}\n\n\t\t//This module may not have dependencies\n\t\tif (!isArray(deps)) {\n\t\t\tcallback = deps;\n\t\t\tdeps = null;\n\t\t}\n\n\t\t//If no name, and callback is a function, then figure out if it a\n\t\t//CommonJS thing with dependencies.\n\t\tif (!deps && isFunction(callback)) {\n\t\t\tdeps = [];\n\t\t\t//Remove comments from the callback string,\n\t\t\t//look for require calls, and pull them into the dependencies,\n\t\t\t//but only if there are function args.\n\t\t\tif (callback.length) {\n\t\t\t\tcallback\n\t\t\t\t\t.toString()\n\t\t\t\t\t.replace(commentRegExp, commentReplace)\n\t\t\t\t\t.replace(cjsRequireRegExp, function (match, dep) {\n\t\t\t\t\t\tdeps.push(dep);\n\t\t\t\t\t});\n\n\t\t\t\t//May be a CommonJS thing even without require calls, but still\n\t\t\t\t//could use exports, and module. Avoid doing exports and module\n\t\t\t\t//work though if it just needs require.\n\t\t\t\t//REQUIRES the function to expect the CommonJS variables in the\n\t\t\t\t//order listed below.\n\t\t\t\tdeps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(\n\t\t\t\t\tdeps\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t//If in IE 6-8 and hit an anonymous define() call, do the interactive\n\t\t//work.\n\t\tif (useInteractive) {\n\t\t\tnode = currentlyAddingScript || getInteractiveScript();\n\t\t\tif (node) {\n\t\t\t\tif (!name) {\n\t\t\t\t\tname = node.getAttribute('data-requiremodule');\n\t\t\t\t}\n\t\t\t\tcontext = contexts[node.getAttribute('data-requirecontext')];\n\t\t\t}\n\t\t}\n\n\t\t//Always save off evaluating the def call until the script onload handler.\n\t\t//This allows multiple modules to be in a file without prematurely\n\t\t//tracing dependencies, and allows for anonymous module support,\n\t\t//where the module name is not known until the script onload event\n\t\t//occurs. If no context, use the global queue, and get it processed\n\t\t//in the onscript load callback.\n\t\tif (context) {\n\t\t\tcontext.defQueue.push([name, deps, callback]);\n\t\t\tcontext.defQueueMap[name] = true;\n\t\t} else {\n\t\t\tglobalDefQueue.push([name, deps, callback]);\n\t\t}\n\t};\n\n\tdefine.amd = {\n\t\tjQuery: true\n\t};\n\n\t/**\n\t * Executes the text. Normally just uses eval, but can be modified\n\t * to use a better, environment-specific call. Only used for transpiling\n\t * loader plugins, not for plain JS modules.\n\t * @param {String} text the text to execute/evaluate.\n\t */\n\treq.exec = function (text) {\n\t\t/*jslint evil: true */\n\t\treturn eval(text);\n\t};\n\n\t//Set up with config info.\n\treq(cfg);\n})({}, typeof setTimeout === 'undefined' ? undefined : setTimeout);\n\nexport { define, require, requirejs };\n"
  },
  {
    "path": "lang/shadeup/engine/setZero.ts",
    "content": "// Only add setZeroTimeout to the window object, and hide everything\n// else in a closure.\n(function () {\n\tvar timeouts = [];\n\tvar messageName = 'zero-timeout-message';\n\n\t// Like setTimeout, but only takes a function argument.  There's\n\t// no time argument (always zero) and no arguments (you have to\n\t// use a closure).\n\tfunction setZeroTimeout(fn) {\n\t\ttimeouts.push(fn);\n\t\twindow.postMessage(messageName, '*');\n\t}\n\n\tfunction handleMessage(event) {\n\t\tif (event.source == window && event.data == messageName) {\n\t\t\tevent.stopPropagation();\n\t\t\tif (timeouts.length > 0) {\n\t\t\t\tvar fn = timeouts.shift();\n\t\t\t\tfn();\n\t\t\t}\n\t\t}\n\t}\n\n\twindow.addEventListener('message', handleMessage, true);\n\n\t// Add the one thing we want added to the window object.\n\twindow.setZeroTimeout = setZeroTimeout;\n})();\n\nexport {};\ndeclare global {\n\tinterface Window {\n\t\tsetZeroTimeout(fn: () => void): void;\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/engine/shader.ts",
    "content": "import type { IndexMapping } from '../../../../shadeup-frontend/lib/generator/root';\n\nimport {\n\tUniformValue,\n\ttype GenericShader,\n\ttype GraphicsAdapter,\n\ttype ShaderCodeMapping,\n\ttype ShaderType,\n\ttype UniformPayload,\n\ttype ShaderParamsMapping,\n\ttype ShaderBindingOptions\n} from './adapters/adapter';\nimport { translateIdentifier } from './util';\nimport { parse_type, getGl } from './util';\nconst simpleHash = (str: string) => {\n\tlet hash = 0;\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charCodeAt(i);\n\t\thash = (hash << 5) - hash + char;\n\t\thash &= hash; // Convert to 32bit integer\n\t}\n\treturn new Uint32Array([hash])[0].toString(36);\n};\n\nexport class ShadeupShaderInstance {\n\tparent: ShadeupShaderSource;\n\tbindings: any;\n\tkey: string;\n\tversion: number;\n\n\tconstructor(parentSource: ShadeupShaderSource, bindings: any, key: string) {\n\t\tthis.parent = parentSource;\n\t\tthis.bindings = bindings;\n\t\tthis.key = key;\n\t\tthis.version = 0;\n\t}\n\n\tgetKey() {\n\t\treturn `${this.key}_${this.version}`;\n\t}\n\n\tget(\n\t\tadapter: GraphicsAdapter,\n\t\ttype: ShaderType,\n\t\tconfig?: ShaderBindingOptions\n\t): GenericShader | null {\n\t\tlet shade = adapter.getOrCreateShader(this, type, config);\n\t\tshade.uniqueSourceKey = this.getKey();\n\t\treturn shade;\n\t}\n\n\tbindUniforms(to: UniformPayload) {\n\t\tfor (let k of Object.keys(this.parent.params.webgl)) {\n\t\t\tlet paramType = this.parent.params.webgl[k];\n\t\t\tlet val = this.bindings[k];\n\n\t\t\tlet uniVal = new UniformValue(paramType, val);\n\n\t\t\tlet uniformName = translateIdentifier(k);\n\n\t\t\tto.uniforms.set(uniformName, uniVal);\n\t\t}\n\t}\n}\n\nexport class ShadeupShaderSource {\n\tcode: ShaderCodeMapping;\n\tparams: ShaderParamsMapping;\n\ttypes: { [key: string]: any };\n\tarraySizes: { [key: string]: any };\n\tindexMapping: IndexMapping;\n\tkey: string;\n\n\tconstructor(params: ShaderParamsMapping, code: ShaderCodeMapping, indexMapping: IndexMapping) {\n\t\tthis.code = code;\n\t\tthis.params = params;\n\t\tthis.indexMapping = indexMapping;\n\t\tthis.types = {};\n\t\tthis.arraySizes = {};\n\t\tthis.key = simpleHash(JSON.stringify(code));\n\t}\n\n\tinstance(bindings: any) {\n\t\treturn new ShadeupShaderInstance(this, bindings, this.key);\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Button.svelte",
    "content": "<script lang=\"ts\">\n\texport let text: string;\n\texport let setValue: (value: boolean) => void = () => {};\n</script>\n\n<div class=\"px-3 pt-0 pb-1 flex\">\n\t<button\n\t\ton:click={(event) => {\n\t\t\tsetValue(true);\n\t\t}}\n\t\tclass=\"rounded-md hover:border-purple-600 border border-gray-600 bg-gray-900 w-full cursor-pointer flex items-center justify-center\"\n\t>\n\t\t{text}\n\t</button>\n</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Checkbox.svelte",
    "content": "<script lang=\"ts\">\n\texport let value: boolean;\n\texport let setValue: (value: boolean) => void = () => {};\n</script>\n\n<div class=\"px-3 pt-0 pb-1 flex flex-row items-center justify-end\">\n\t<button\n\t\ton:click={(event) => {\n\t\t\tvalue = !value;\n\t\t\tsetValue(value);\n\t\t}}\n\t\tclass=\"rounded-md border border-gray-600 bg-gray-900 w-4 h-4 cursor-pointer flex items-center justify-center\"\n\t>\n\t\t{#if value}\n\t\t\t<div class=\"w-2 h-2 rounded-sm bg-purple-600 \" />\n\t\t{/if}\n\t</button>\n\t<input\n\t\tstyle=\"display: none;\"\n\t\thidden\n\t\ttype=\"checkbox\"\n\t\tchecked={value}\n\t\ton:input={(e) => {\n\t\t\tsetValue(e.target.checked);\n\t\t\tvalue = e.target.checked;\n\t\t}}\n\t/>\n</div>\n\n<style lang=\"scss\">\n\t:global(.control-label + .control-checkbox) {\n\t\tmargin-top: -1rem;\n\t}\n</style>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Combo.svelte",
    "content": "<script lang=\"ts\">\n\texport let value: string;\n\texport let options: string[];\n\texport let setValue: (value: boolean) => void = () => {};\n</script>\n\n<div class=\"px-3 pt-0 pb-1 flex flex-row items-center justify-end\">\n\t<select\n\t\tclass=\"border border-gray-600 outline-none rounded-md text-sm p-0.5 px-1 bg-gray-800 bg-opacity-30 w-full\"\n\t\ton:input={(e) => {\n\t\t\tsetValue(e.target.value);\n\t\t\tvalue = e.target.value;\n\t\t}}\n\t>\n\t\t{#if typeof options == 'object' && Array.isArray(options)}\n\t\t\t{#each options as option}\n\t\t\t\t<option class=\"bg-gray-800\" selected={value == option} value={option}>{option}</option>\n\t\t\t{/each}\n\t\t{/if}\n\t</select>\n</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/FloatingPanel.svelte",
    "content": "<script lang=\"ts\">\n\timport { slide } from 'svelte/transition';\n\timport type { UIChild } from '../puck';\n\timport { measureElement } from '$lib/measure';\n\timport { writable } from 'svelte/store';\n\timport { onMount } from 'svelte';\n\n\texport let children: UIChild[] = [];\n\tlet panelHeight = writable(0);\n\tlet open = true;\n\n\tlet isFullscreen = false;\n\n\t$: shouldPush = open && children && children.length > 0;\n\n\t$: styleStr = `<style> .stater {\n\t\ttransition: 0.2s all;\n\t\t\n\t\tmargin-right: ${shouldPush ? '186px;' : '0px'}\n\t\tmargin-top: ${shouldPush ? '4px;' : '0px'}\n\t}</style>`;\n\n\tonMount(() => {\n\t\tisFullscreen = window.innerHeight >= screen.height;\n\t});\n</script>\n\n<svelte:window\n\ton:resize={() => {\n\t\tisFullscreen = window.innerHeight >= screen.height;\n\t}}\n/>\n\n{@html styleStr}\n{#if children.length > 0}\n\t<div\n\t\tclass=\"z-40 absolute  flex flex-col items-end justify-start\"\n\t\tclass:right-2={!isFullscreen || (isFullscreen && !open)}\n\t\tclass:top-10={!isFullscreen}\n\t\tclass:right-8={isFullscreen && open}\n\t\tclass:top-8={isFullscreen}\n\t>\n\t\t<div\n\t\t\tclass=\"floating-panel scrollbar bg-gray-800 over border border-gray-800 rounded-lg shadow-lg flex flex-col overflow-x-hidden backdrop-blur-sm bg-opacity-20 transition-all duration-300\"\n\t\t\tclass:w-0={!open}\n\t\t\tclass:w-[200px]={open}\n\t\t\tclass:mr-4={!open}\n\t\t\tstyle=\"max-height: calc(100vh - 64px - 16px); overflow-y: overlay;\"\n\t\t\tuse:measureElement={{ height: panelHeight }}\n\t\t>\n\t\t\t{#each children as child}\n\t\t\t\t<div class=\"min-w-[200px] control-{child.name}\">\n\t\t\t\t\t<svelte:component\n\t\t\t\t\t\tthis={child.type}\n\t\t\t\t\t\tvalue={child.value}\n\t\t\t\t\t\tsetValue={child.setValue}\n\t\t\t\t\t\tchildren={child.children}\n\t\t\t\t\t\t{...child.options}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\n\t\t{#if isFullscreen}\n\t\t\t<button\n\t\t\t\ttransition:slide\n\t\t\t\tclass=\"bg-gray-700 rounded-md shadow-lg backdrop-blur-sm bg-opacity-30 w-4 h-4 flex items-center justify-center transition-all duration-300\"\n\t\t\t\tstyle=\"margin-top: {open ? 2 : -($panelHeight + 8)}px;\"\n\t\t\t\tclass:mr-4={!open}\n\t\t\t\ton:click={() => {\n\t\t\t\t\topen = !open;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"transition-all duration-300 transform max-w-[16px]\"\n\t\t\t\t\tclass:rotate-180={!open}\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\theight=\"24px\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\twidth=\"24px\"\n\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t\t><path d=\"M0 0h24v24H0V0z\" fill=\"none\" /><path\n\t\t\t\t\t\td=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\"\n\t\t\t\t\t/></svg\n\t\t\t\t>\n\t\t\t</button>\n\t\t{:else}\n\t\t\t<button\n\t\t\t\ttransition:slide\n\t\t\t\tclass=\"bg-gray-700 rounded-r-md shadow-lg backdrop-blur-sm bg-opacity-30 w-4 h-4 flex items-center justify-center transition-all duration-300\"\n\t\t\t\tstyle=\"margin-top: {open ? 2 : -($panelHeight / 2 + 8)}px;\"\n\t\t\t\ton:click={() => {\n\t\t\t\t\topen = !open;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"transition-all duration-300 transform max-w-[16px]\"\n\t\t\t\t\tclass:rotate-180={!open}\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\theight=\"24px\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\twidth=\"24px\"\n\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t\t><path d=\"M0 0h24v24H0V0z\" fill=\"none\" /><path\n\t\t\t\t\t\td=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\"\n\t\t\t\t\t/></svg\n\t\t\t\t>\n\t\t\t</button>\n\t\t{/if}\n\t</div>\n{/if}\n\n<style lang=\"scss\">\n\t/* ===== Scrollbar CSS ===== */\n\t/* Firefox */\n\t.scrollbar {\n\t\tscrollbar-width: auto;\n\t\tscrollbar-color: rgb(63, 63, 63) #161616;\n\t}\n\n\t/* Chrome, Edge, and Safari */\n\t.scrollbar::-webkit-scrollbar {\n\t\twidth: 0px;\n\t}\n\n\t.scrollbar::-webkit-scrollbar-track {\n\t\tbackground: transparent;\n\t}\n\n\t.scrollbar::-webkit-scrollbar-thumb {\n\t\tbackground-color: rgb(63, 63, 63);\n\t\tborder-radius: 10px;\n\t\tborder: 1px solid #161616;\n\t}\n</style>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Group.svelte",
    "content": "<script lang=\"ts\">\n\timport { measureElement } from '$lib/measure';\n\timport { writable } from 'svelte/store';\n\timport type { UIChild } from '../puck';\n\n\texport let value: string;\n\texport let children: UIChild[];\n\tlet open = true;\n\tlet height = writable(0);\n</script>\n\n<div class=\"flex flex-col\">\n\t<button\n\t\tclass=\"flex flex-row items-center mx-1  bg-gray-500 bg-opacity-5\"\n\t\tclass:rounded-md={!open}\n\t\tclass:rounded-t-md={open}\n\t\ton:click={() => {\n\t\t\topen = !open;\n\t\t}}\n\t>\n\t\t<span class=\"w-4 h-4 ml-1 opacity-50 flex items-center justify-center rounded-md\">\n\t\t\t<svg\n\t\t\t\tclass=\"transition-all duration-300 transform max-w-[16px]\"\n\t\t\t\tclass:rotate-90={open}\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\theight=\"24px\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\twidth=\"24px\"\n\t\t\t\tfill=\"#fff\"\n\t\t\t\t><path d=\"M0 0h24v24H0V0z\" fill=\"none\" /><path\n\t\t\t\t\td=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\"\n\t\t\t\t/></svg\n\t\t\t>\n\t\t</span>\n\t\t<span class=\"flex-1 ml-2 text-left text-sm text-white text-opacity-75\">\n\t\t\t{value}\n\t\t\t{$height}\n\t\t</span>\n\t</button>\n</div>\n<div\n\tclass=\"transition-all mb-1 flex flex-col\"\n\tstyle=\"max-height: {open ? $height : 0}px; overflow: hidden;\"\n>\n\t<div use:measureElement={{ height }} class=\"flex flex-col mx-1\">\n\t\t{#each children as child, i}\n\t\t\t<div\n\t\t\t\tclass=\"min-w-[200px - 16px] bg-gray-500 bg-opacity-5 control-{child.name}\"\n\t\t\t\tclass:rounded-b-md={i === children.length - 1}\n\t\t\t>\n\t\t\t\t<svelte:component\n\t\t\t\t\tthis={child.type}\n\t\t\t\t\tvalue={child.value}\n\t\t\t\t\tsetValue={child.setValue}\n\t\t\t\t\tchildren={child.children}\n\t\t\t\t\t{...child.options}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t{/each}\n\t</div>\n</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Host.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SvelteComponent } from 'svelte';\n\timport FloatingPanel from './FloatingPanel.svelte';\n\timport './host.scss';\n\timport type { UIChild } from '../puck';\n\n\texport let children: UIChild[];\n</script>\n\n<div class=\"host\">\n\t{#each children as child}\n\t\t<svelte:component\n\t\t\tthis={child.type}\n\t\t\tvalue={child.value}\n\t\t\tsetValue={child.setValue}\n\t\t\tchildren={child.children}\n\t\t\t{...child.options}\n\t\t/>\n\t{/each}\n</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Label.svelte",
    "content": "<script lang=\"ts\">\n\texport let value: string;\n</script>\n\n<div class=\"px-3 pb-0.5 text-xs text-white text-opacity-50 pt-2\">{value}</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Slider.svelte",
    "content": "<script lang=\"ts\">\n\texport let value: number;\n\texport let min: number;\n\texport let max: number;\n\texport let setValue: (value: number) => void = () => {};\n\n\tlet dragging = false;\n\n\tlet selfElement: HTMLDivElement;\n\n\tfunction handleMove(e: MouseEvent) {\n\t\tif (dragging) {\n\t\t\tconst rect = selfElement.getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst percent = x / rect.width;\n\t\t\tlet newValue = min + (max - min) * percent;\n\t\t\tnewValue = Math.max(min, Math.min(max, newValue));\n\t\t\tsetValue(newValue);\n\t\t\tvalue = newValue;\n\t\t}\n\t}\n</script>\n\n<svelte:window on:mouseup={() => (dragging = false)} on:mousemove={handleMove} />\n\n<div class=\"px-3 pt-0 pb-1 flex flex-row items-center\">\n\t<div\n\t\tbind:this={selfElement}\n\t\ton:mousedown={(event) => {\n\t\t\tdragging = true;\n\t\t\thandleMove(event);\n\t\t}}\n\t\tclass=\"track w-full h-4 relative flex items-center\"\n\t>\n\t\t<div class=\"absolute rounded-full bg-gray-600 w-full h-1\" />\n\t\t<div\n\t\t\tclass=\"handle absolute w-[6px] h-[14px] rounded-full bg-purple-600 cursor-pointer\"\n\t\t\tstyle=\"left: calc(100% * {value - min} / {max - min} - 3px);\"\n\t\t/>\n\t</div>\n\t<input\n\t\tclass=\"bg-black bg-opacity-10 p-0 rounded-sm w-5 h-4 text-sm outline-none border-none ml-2 text-right\"\n\t\tstyle=\"font-size: 10px;\"\n\t\ttype=\"text\"\n\t\tvalue={value.toFixed(1).replace(/\\.0$/, '')}\n\t\t{min}\n\t\t{max}\n\t\ton:input={(e) => {\n\t\t\tsetValue(parseFloat(e.target.value));\n\t\t\tvalue = parseFloat(e.target.value);\n\t\t}}\n\t/>\n\t<input\n\t\thidden\n\t\ttype=\"range\"\n\t\t{min}\n\t\t{max}\n\t\t{value}\n\t\ton:input={(e) => {\n\t\t\tsetValue(parseFloat(e.target.value));\n\t\t\tvalue = parseFloat(e.target.value);\n\t\t}}\n\t/>\n</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/Text.svelte",
    "content": "<script lang=\"ts\">\n\texport let value: string;\n\texport let setValue: (value: string) => void = () => {};\n</script>\n\n<div class=\"px-3 pt-0 pb-1\">\n\t<input\n\t\tclass=\"outline-none border border-gray-600 bg-gray-800 bg-opacity-30 p-0.5 px-1 text-sm w-full rounded-md\"\n\t\ttype=\"text\"\n\t\t{value}\n\t\ton:input={(e) => {\n\t\t\tsetValue(e.target.value);\n\t\t\tvalue = e.target.value;\n\t\t}}\n\t/>\n</div>\n"
  },
  {
    "path": "lang/shadeup/engine/ui/components/host.scss",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n\thtml {\n\t\t@apply text-white;\n\t}\n}\n\n.floating-panel {\n\t> .control-button:first-child,\n\t> .control-combo:first-child,\n\t> .control-input:first-child,\n\t> .control-label:first-child,\n\t> .control-select:first-child,\n\t> .control-text:first-child {\n\t\t@apply mt-2;\n\t}\n\n\t> .control-button:last-child,\n\t> .control-combo:last-child,\n\t> .control-input:last-child,\n\t> .control-label:last-child,\n\t> .control-select:last-child,\n\t> .control-text:last-child {\n\t\t@apply mb-1;\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/engine/ui/puck.ts",
    "content": "import type { SvelteComponent } from 'svelte';\nimport Slider from './components/Slider.svelte';\nimport Combo from './components/Combo.svelte';\nimport Label from './components/Label.svelte';\nimport Host from './components/Host.svelte';\nimport Group from './components/Group.svelte';\nimport Checkbox from './components/Checkbox.svelte';\nimport Button from './components/Button.svelte';\nimport Text from './components/Text.svelte';\nimport FloatingPanel from './components/FloatingPanel.svelte';\n\nexport type UIChild = {\n\tname: string;\n\ttype: typeof SvelteComponent;\n\tvalue: any;\n\toptions: object;\n\tchildren?: UIChild[];\n\tsetValue: (v: any) => void;\n};\n\nconst ENABLE_INERTIA = true;\nexport function initPuck(canvas: HTMLCanvasElement) {\n\tlet uiContainer = document.querySelector('.ui-container');\n\tlet puckDown = false;\n\tlet puckId = '';\n\tlet pucks = {};\n\n\tfunction blankUISink() {\n\t\treturn {\n\t\t\tknob: new Map(),\n\t\t\tknobCounter: 0,\n\t\t\tbutton: new Map(),\n\t\t\tbuttonCounter: 0,\n\t\t\tswitch: new Map(),\n\t\t\tswitchCounter: 0,\n\t\t\tslider: new Map(),\n\t\t\tsliderCounter: 0,\n\t\t\tpuck: new Map(),\n\t\t\tpuckCounter: 0\n\t\t};\n\t}\n\n\tlet uiSink = blankUISink();\n\n\tfunction copyUISink(s) {\n\t\treturn {\n\t\t\t...s,\n\t\t\tknob: new Map(s.knob),\n\t\t\tbutton: new Map(s.button),\n\t\t\tswitch: new Map(s.switch),\n\t\t\tslider: new Map(s.slider),\n\t\t\tpuck: new Map(s.puck)\n\t\t};\n\t}\n\n\tlet uiSinkLastFrame = blankUISink();\n\n\twindow.addEventListener('mousedown', (e: MouseEvent) => {\n\t\tif (e.target.closest('.puck')) {\n\t\t\tlet p = e.target.closest('.puck');\n\t\t\tp.dataset.down = true;\n\t\t\tlet mp = getPosRelativeToCanvas([e.clientX, e.clientY]);\n\t\t\tlet rect = p.getBoundingClientRect();\n\t\t\tlet pmp = getPosRelativeToCanvas([rect.left + rect.width / 2, rect.top + rect.height / 2]);\n\t\t\tp.dataset.offsetX = pmp[0] - mp[0];\n\t\t\tp.dataset.offsetY = pmp[1] - mp[1];\n\t\t\tpuckId = p.dataset.id;\n\t\t\tpuckDown = true;\n\t\t\tlastPuckPos = [...pmp];\n\t\t\tupdateDocumentCursor();\n\t\t}\n\t});\n\n\tfunction updateDocumentCursor() {\n\t\tif (puckDown) {\n\t\t\tdocument.body.style.cursor = 'grabbing';\n\t\t} else {\n\t\t\tdocument.body.style.cursor = 'default';\n\t\t}\n\t}\n\n\twindow.addEventListener('mouseup', (e) => {\n\t\tpuckDown = false;\n\t\tupdateDocumentCursor();\n\t\tfor (let el of [...document.querySelectorAll('.puck')]) {\n\t\t\tlet p = el as HTMLElement;\n\t\t\tif (p.dataset.down == 'true') {\n\t\t\t\t// let velocityX = parseInt(p.dataset.velocityX ?? '0');\n\t\t\t\t// let velocityY = parseInt(p.dataset.velocityY ?? '0');\n\n\t\t\t\t// let vectorLength = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n\n\t\t\t\t// let angle = Math.atan2(velocityY, velocityX);\n\t\t\t\t// p.dataset.velocity = vectorLength.toString();\n\t\t\t\t// p.dataset.angle = angle.toString();\n\t\t\t\t// console.log(p.dataset.velocity, angle * (180 / Math.PI));\n\t\t\t\tp.dataset.down = 'false';\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getPuckPos(puck: HTMLElement) {\n\t\tlet rect = canvas.getBoundingClientRect();\n\t\tlet x = puck.offsetLeft - rect.left;\n\t\tlet y = puck.offsetTop - rect.top;\n\n\t\treturn [\n\t\t\t[x, y],\n\t\t\t[puck.offsetLeft, puck.offsetTop]\n\t\t];\n\t}\n\n\tfunction getPosRelativeToCanvas(pos: [number, number]) {\n\t\tlet rect = canvas.getBoundingClientRect();\n\t\treturn [\n\t\t\t((pos[0] - rect.left) / rect.width) * canvas.width,\n\t\t\t((pos[1] - rect.top) / rect.height) * canvas.height\n\t\t];\n\t}\n\n\tconst host = new Host({\n\t\ttarget: document.body,\n\t\tprops: {\n\t\t\tchildren: []\n\t\t}\n\t});\n\n\tlet queuedCommands = [];\n\tlet realSetControls: any = null;\n\n\thost.$on('init', (e) => {});\n\n\tlet lastPuckPos = [0, 0];\n\n\twindow.addEventListener('mousemove', (e) => {\n\t\tif (!puckDown) return;\n\n\t\tlet puck = document.querySelector(`.puck[data-id=\"${puckId}\"]`) as HTMLElement;\n\t\tif (!puck) return;\n\t\tlet [x, y] = getPosRelativeToCanvas([e.clientX, e.clientY]);\n\t\t// puck.dataset.velocityX = (\n\t\t// \t(parseInt(puck.dataset.velocityX ?? '0') || 0) +\n\t\t// \t(x - lastPuckPos[0]) * 2\n\t\t// ).toString();\n\t\t// puck.dataset.velocityY = (\n\t\t// \t(parseInt(puck.dataset.velocityY ?? '0') || 0) +\n\t\t// \t(y - lastPuckPos[1]) * 2\n\t\t// ).toString();\n\n\t\tlet velocityX = x - lastPuckPos[0];\n\n\t\tlet velocityY = y - lastPuckPos[1];\n\n\t\tlet vectorLength = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n\t\tlet angle = Math.atan2(velocityY, velocityX);\n\n\t\tlet oldVel = parseFloat(puck.dataset.velocity ?? '0');\n\t\tpuck.dataset.velocity = (oldVel + vectorLength).toString();\n\n\t\tlet oldAngle = parseFloat(puck.dataset.angle ?? '0');\n\n\t\tlet oldDirVelX = oldVel * Math.cos(oldAngle);\n\t\tlet oldDirVelY = oldVel * Math.sin(oldAngle);\n\n\t\tlet newDirVelX = vectorLength * Math.cos(angle);\n\t\tlet newDirVelY = vectorLength * Math.sin(angle);\n\n\t\tpuck.dataset.angle = Math.atan2(oldDirVelY + newDirVelY, oldDirVelX + newDirVelX).toString();\n\n\t\tlastPuckPos = [x, y];\n\n\t\tpuck.dataset.oldX = puck.offsetLeft.toString();\n\t\tpuck.dataset.oldY = puck.offsetTop.toString();\n\n\t\tx += parseInt(puck.dataset.offsetX ?? '0');\n\t\ty += parseInt(puck.dataset.offsetY ?? '0');\n\n\t\tuiSinkLastFrame.puck.set(puckId, { vec: [x, y] });\n\t});\n\n\tsetInterval(() => {\n\t\tfor (let el of [...document.querySelectorAll('.puck')]) {\n\t\t\tlet p: HTMLElement = el as HTMLElement;\n\n\t\t\tlet maxSpeed = 105;\n\t\t\tlet restitution = 0.75;\n\t\t\t// p.dataset.velocityX = Math.max(\n\t\t\t// \tMath.min(parseInt(p.dataset.velocityX ?? '0') * restitution, maxSpeed),\n\t\t\t// \t-maxSpeed\n\t\t\t// ).toString();\n\t\t\t// p.dataset.velocityY = Math.max(\n\t\t\t// \tMath.min(parseInt(p.dataset.velocityY ?? '0') * restitution, maxSpeed),\n\t\t\t// \t-maxSpeed\n\t\t\t// ).toString();\n\t\t\tp.dataset.velocity = Math.max(\n\t\t\t\tMath.min(parseFloat(p.dataset.velocity ?? '0') * restitution, maxSpeed),\n\t\t\t\t-maxSpeed\n\t\t\t).toString();\n\t\t\tlet angle = parseFloat(p.dataset.angle ?? '0');\n\t\t\tlet velocity = parseFloat(p.dataset.velocity ?? '0') / 5;\n\n\t\t\tif (p.dataset.down == 'true') continue;\n\t\t\tif (ENABLE_INERTIA) {\n\t\t\t\tif (uiSink.puck.has(p.dataset.id) && velocity > 1) {\n\t\t\t\t\tlet { vec } = uiSink.puck.get(p.dataset.id);\n\t\t\t\t\tuiSinkLastFrame.puck.set(p.dataset.id, {\n\t\t\t\t\t\tvec: [vec[0] + Math.cos(angle) * velocity, vec[1] + Math.sin(angle) * velocity]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, 1000 / 60);\n\n\tconst SIMPLE_MATH = {\n\t\tclamp(a, min, max) {\n\t\t\treturn Math.min(Math.max(a, min), max);\n\t\t},\n\n\t\tclamp2(a, min, max) {\n\t\t\treturn [this.clamp(a[0], min[0], max[0]), this.clamp(a[1], min[1], max[1])];\n\t\t}\n\t};\n\n\tfunction _SHADEUP_UI_PUCK(vec, radius = 10, invisible = false) {\n\t\tlet id = uiSink.puckCounter++;\n\t\tuiSink.puck.set(id.toString(), {\n\t\t\tvec: [...vec]\n\t\t});\n\n\t\taddPuck(id.toString(), vec, radius, invisible);\n\n\t\tif (uiSinkLastFrame.puck.has(id.toString())) {\n\t\t\treturn SIMPLE_MATH.clamp2(\n\t\t\t\tuiSinkLastFrame.puck.get(id.toString()).vec,\n\t\t\t\t[0, 0],\n\t\t\t\t[canvas.width, canvas.height]\n\t\t\t);\n\t\t} else {\n\t\t\treturn [...vec];\n\t\t}\n\t}\n\n\tfunction addPuck(name, puck, radius = 10, invisible = false) {\n\t\tpuck = [puck[0] / canvas.width, puck[1] / canvas.height];\n\t\tif (pucks[name]) {\n\t\t\tpucks[name].div.style.left = `calc(${puck[0] * 100}% - ${radius}px)`;\n\t\t\tpucks[name].div.style.top = `calc(${puck[1] * 100}% - ${radius}px)`;\n\t\t\tpucks[name].div.style.opacity = invisible ? '0' : '1';\n\t\t\tpucks[name].div.style.width = `${radius * 2}px`;\n\t\t\tpucks[name].div.style.height = `${radius * 2}px`;\n\n\t\t\treturn;\n\t\t}\n\t\tlet div = document.createElement('div');\n\t\tdiv.className = 'puck';\n\t\tdiv.dataset.id = name;\n\t\tdiv.innerHTML = `<span><svg style=\"width: 10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill=\"#505050\" d=\"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40H40c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40H200c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40H360c-22.1 0-40 17.9-40 40v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328z\"/></svg></span>`;\n\t\tdiv.style.width = `${radius * 2}px`;\n\t\tdiv.style.height = `${radius * 2}px`;\n\t\tdiv.style.opacity = invisible ? '0' : '1';\n\t\tuiContainer.appendChild(div);\n\n\t\tpucks[name] = {\n\t\t\tdiv,\n\t\t\tpuck\n\t\t};\n\t}\n\n\tlet hostChildren: UIChild[] = [];\n\tlet childrenCrumbs: UIChild[] = [];\n\tlet rootChild: UIChild;\n\n\tlet preFrameHandlers: (() => void)[] = [];\n\tlet postFrameHandlers: (() => void)[] = [];\n\tfunction createImmediateModeUIElement(\n\t\ttype: string,\n\t\tcomponent: typeof SvelteComponent,\n\t\tcanHaveChildren = false\n\t) {\n\t\tlet els: Map<string, SvelteComponent> = new Map();\n\n\t\tfunction blankUISink() {\n\t\t\treturn {\n\t\t\t\tmap: new Map(),\n\t\t\t\tcounter: 0\n\t\t\t};\n\t\t}\n\n\t\tlet uiSink = blankUISink();\n\t\tlet uiSinkLastFrame = blankUISink();\n\n\t\tpreFrameHandlers.push(() => {\n\t\t\tuiSink = blankUISink();\n\t\t});\n\n\t\tpostFrameHandlers.push(() => {\n\t\t\t// Clean up unused controls\n\t\t\tfor (let name of els.keys()) {\n\t\t\t\tif (!uiSink.map.has(name)) {\n\t\t\t\t\t// els.get(name)!.$destroy();\n\t\t\t\t\t// els.delete(name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tuiSinkLastFrame = blankUISink();\n\t\t});\n\n\t\tfunction invoke(value: any, options: any = {}) {\n\t\t\tlet id = uiSink.counter++;\n\t\t\tuiSink.map.set(id.toString(), {\n\t\t\t\tvalue: value,\n\t\t\t\toptions: options\n\t\t\t});\n\n\t\t\taddControl(\n\t\t\t\tid.toString(),\n\t\t\t\t{\n\t\t\t\t\tvalue: value,\n\t\t\t\t\toptions: options\n\t\t\t\t},\n\t\t\t\tcanHaveChildren\n\t\t\t);\n\n\t\t\tif (uiSinkLastFrame.map.has(id.toString())) {\n\t\t\t\treturn uiSinkLastFrame.map.get(id.toString()).value;\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\n\t\tfunction addControl(name: string, v: { value: any; options: object }, canHaveChildren = false) {\n\t\t\tif (els.has(name)) {\n\t\t\t\tels.get(name)!.$set({\n\t\t\t\t\tvalue: v.value,\n\t\t\t\t\t...v.options\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction setValue(v: any) {\n\t\t\t\tuiSinkLastFrame.map.set(name, {\n\t\t\t\t\tvalue: v\n\t\t\t\t});\n\t\t\t}\n\t\t\t// let comp = new component({\n\t\t\t// \ttarget: uiContainer!,\n\t\t\t// \tprops: {\n\t\t\t// \t\tvalue: v.value,\n\t\t\t// \t\t...v.options,\n\t\t\t// \t\tsetValue\n\t\t\t// \t}\n\t\t\t// });\n\n\t\t\trootChild.children?.push({\n\t\t\t\ttype: component,\n\t\t\t\tvalue: v.value,\n\t\t\t\toptions: v.options,\n\t\t\t\tchildren: canHaveChildren ? [] : undefined,\n\t\t\t\tsetValue,\n\t\t\t\tname: type\n\t\t\t});\n\n\t\t\tif (canHaveChildren) {\n\t\t\t\tchildrenCrumbs.push(rootChild);\n\t\t\t\trootChild = rootChild.children![rootChild.children!.length - 1];\n\t\t\t}\n\n\t\t\t// els.set(name, comp);\n\t\t}\n\n\t\treturn invoke;\n\t}\n\n\tlet slider = createImmediateModeUIElement('slider', Slider);\n\tlet label = createImmediateModeUIElement('label', Label);\n\tlet group = createImmediateModeUIElement('group', Group, true);\n\tlet checkbox = createImmediateModeUIElement('checkbox', Checkbox);\n\tlet textbox = createImmediateModeUIElement('textbox', Text);\n\tlet combo = createImmediateModeUIElement('combo', Combo);\n\tlet button = createImmediateModeUIElement('button', Button);\n\n\tfunction preFrame() {\n\t\thostChildren = [];\n\n\t\trootChild = {\n\t\t\ttype: FloatingPanel,\n\t\t\tvalue: null,\n\t\t\tchildren: [],\n\t\t\toptions: {},\n\t\t\tsetValue: () => {},\n\t\t\tname: 'root'\n\t\t};\n\n\t\thostChildren.push(rootChild);\n\t\tchildrenCrumbs = [rootChild];\n\n\t\tfor (let handler of preFrameHandlers) {\n\t\t\thandler();\n\t\t}\n\t\tuiSink = blankUISink();\n\t}\n\n\treturn {\n\t\tframe() {\n\t\t\t// Clean up unused pucks\n\t\t\tfor (let name in pucks) {\n\t\t\t\tif (!uiSink.puck.has(name)) {\n\t\t\t\t\tpucks[name].div.remove();\n\t\t\t\t\tdelete pucks[name];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let post of postFrameHandlers) {\n\t\t\t\tpost();\n\t\t\t}\n\n\t\t\tuiSinkLastFrame = blankUISink();\n\n\t\t\thost.$set({\n\t\t\t\tchildren: hostChildren\n\t\t\t});\n\t\t},\n\t\tpreFrame,\n\t\tpuck: _SHADEUP_UI_PUCK,\n\t\tslider,\n\t\tcontrols: {\n\t\t\tlabel,\n\t\t\tgroup,\n\t\t\tcheckbox,\n\t\t\ttextbox,\n\t\t\tcombo,\n\t\t\tbutton,\n\t\t\tpop() {\n\t\t\t\tchildrenCrumbs.pop();\n\t\t\t\trootChild = childrenCrumbs[childrenCrumbs.length - 1];\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "lang/shadeup/engine/ui/ui.ts",
    "content": "import { initPuck } from './puck';\nimport Host from './components/Host.svelte';\n\nexport function initUI(canvas: HTMLCanvasElement) {\n\tlet { frame, puck, preFrame, slider, controls } = initPuck(canvas);\n\n\treturn {\n\t\tframe() {\n\t\t\tframe();\n\t\t},\n\t\tpreFrame() {\n\t\t\tpreFrame();\n\t\t},\n\t\tpuck,\n\t\tslider,\n\t\tcontrols: controls\n\t\t// controls: host\n\t};\n}\n"
  },
  {
    "path": "lang/shadeup/engine/util.ts",
    "content": "type ExpandedType = { name: string; generics: ExpandedType[] };\n\nexport function parse_type(type: string): ExpandedType {\n\tlet name = '';\n\tlet generics = [];\n\tlet generic = '';\n\tlet depth = 0;\n\tfor (let i = 0; i < type.length; i++) {\n\t\tlet c = type[i];\n\t\tif (c == '<') {\n\t\t\tdepth += 1;\n\t\t\tif (depth == 1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} else if (c == '>') {\n\t\t\tdepth -= 1;\n\t\t\tif (depth == 0) {\n\t\t\t\tgenerics.push(parse_type(generic));\n\t\t\t\tgeneric = '';\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} else if (c == ',' && depth == 1) {\n\t\t\tgenerics.push(parse_type(generic));\n\t\t\tgeneric = '';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (depth == 0) {\n\t\t\tname += c;\n\t\t} else {\n\t\t\tgeneric += c;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: name,\n\t\tgenerics: generics\n\t};\n}\n\nexport function stringify_type(type: ExpandedType): string {\n\treturn `${type.name}${\n\t\ttype.generics.length > 0 ? '<' + type.generics.map(stringify_type).join(',') + '>' : ''\n\t}`;\n}\n\nexport function translateNumericToGLSL(type: string): string | null {\n\tif (type == 'float2x2') {\n\t\treturn 'Matrix2f';\n\t} else if (type == 'float3x3') {\n\t\treturn 'Matrix3f';\n\t} else if (type == 'float4x4') {\n\t\treturn 'Matrix4f';\n\t}\n\n\tlet matches = type.match(/^([A-Za-z]+)(\\d)?$/);\n\tif (!matches) {\n\t\treturn null;\n\t}\n\tlet base = matches[1];\n\tlet size = matches[2] ? parseInt(matches[2]) : 1;\n\tlet type_name = '';\n\n\tswitch (base) {\n\t\tcase 'float':\n\t\t\ttype_name = 'f';\n\t\t\tbreak;\n\t\tcase 'int':\n\t\t\ttype_name = 'i';\n\t\t\tbreak;\n\t\tcase 'uint':\n\t\t\ttype_name = 'i';\n\t\t\tbreak;\n\t\tcase 'bool':\n\t\t\ttype_name = 'i';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n\n\treturn `${size}${type_name}`;\n}\n\nexport function translate_type_for_uniform(type: ExpandedType): string | null {\n\tif (type.name == 'array') {\n\t\tlet inner = translate_type_for_uniform(type.generics[0]);\n\t\treturn `${inner}[]`;\n\t} else {\n\t\treturn translateNumericToGLSL(type.name);\n\t}\n}\n\nexport function translateIdentifier(str: string) {\n\treturn str.replace(/\\_\\_\\_/g, '_ii_').replace(/\\_\\_/g, '_i_');\n}\n\nexport function getGl(): WebGL2RenderingContext {\n\treturn (window as any).gl;\n}\n"
  },
  {
    "path": "lang/shadeup/engine/virtual-webgl2.js",
    "content": "/*\n * Copyright 2018, Gregg Tavares.\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 are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following disclaimer\n *    in the documentation and/or other materials provided with the\n *    distribution.\n *\n *  * Neither the name of Gregg Tavares. nor the names of his\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\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/* eslint-env browser */\n\n(function () {\n\tconst settings = {\n\t\tdisableWebGL1: true,\n\t\tcompositorCreator() {}\n\t};\n\tconst canvasToVirtualContextMap = new Map();\n\tconst extensionInfo = {};\n\tconst extensionSaveRestoreHelpersArray = [];\n\tconst extensionSaveRestoreHelpers = {};\n\n\tlet currentVirtualContext = null;\n\tlet someContextsNeedRendering;\n\n\tconst sharedWebGLContext = document.createElement('canvas').getContext('webgl2');\n\tconst numAttribs = sharedWebGLContext.getParameter(sharedWebGLContext.MAX_VERTEX_ATTRIBS);\n\tconst numTextureUnits = sharedWebGLContext.getParameter(\n\t\tsharedWebGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS\n\t);\n\tconst numUniformBufferBindings = sharedWebGLContext.getParameter(\n\t\tsharedWebGLContext.MAX_UNIFORM_BUFFER_BINDINGS\n\t);\n\tconst baseState = makeDefaultState(sharedWebGLContext, 300, 150);\n\n\tconst INT = 0x1404;\n\tconst UNSIGNED_INT = 0x1405;\n\tconst FLOAT = 0x1406;\n\n\tconst vs = `\n  attribute vec4 position;\n  varying vec2 v_texcoord;\n  void main() {\n    gl_Position = position;\n    v_texcoord = position.xy * .5 + .5;\n  }\n  `;\n\n\tconst fs = `\n  precision mediump float;\n  varying vec2 v_texcoord;\n  uniform sampler2D u_tex;\n  void main() {\n    gl_FragColor = texture2D(u_tex, v_texcoord);\n  }\n  `;\n\n\tconst fs2 = `\n  precision mediump float;\n  varying vec2 v_texcoord;\n  uniform sampler2D u_tex;\n  void main() {\n    gl_FragColor = texture2D(u_tex, v_texcoord);\n    gl_FragColor.rgb *= gl_FragColor.a;\n  }\n  `;\n\n\tconst premultiplyAlphaTrueProgram = createProgram(sharedWebGLContext, [vs, fs]);\n\tconst premultiplyAlphaFalseProgram = createProgram(sharedWebGLContext, [vs, fs2]);\n\n\t{\n\t\tconst gl = sharedWebGLContext;\n\t\tconst positionLoc = 0; // hard coded in createProgram\n\n\t\tconst buffer = gl.createBuffer();\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n\t\tgl.bufferData(\n\t\t\tgl.ARRAY_BUFFER,\n\t\t\tnew Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n\t\t\tgl.STATIC_DRAW\n\t\t);\n\n\t\tgl.enableVertexAttribArray(positionLoc);\n\t\tgl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0);\n\t}\n\n\tsaveAllState(baseState);\n\n\tHTMLCanvasElement.prototype.getContext = (function (origFn) {\n\t\treturn function (type, contextAttributes) {\n\t\t\tif (type === 'webgl' || type === 'experimental-webgl') {\n\t\t\t\treturn createOrGetVirtualWebGLContext(this, type, contextAttributes);\n\t\t\t} else if (type === 'webgl2') {\n\t\t\t\treturn createOrGetVirtualWebGLContext(this, type, contextAttributes);\n\t\t\t}\n\t\t\treturn origFn.call(this, type, contextAttributes);\n\t\t};\n\t})(HTMLCanvasElement.prototype.getContext);\n\n\tfunction valueOrDefault(value, defaultValue) {\n\t\treturn value === undefined ? defaultValue : value;\n\t}\n\n\tfunction errorDisposedContext(fnName) {\n\t\treturn function () {\n\t\t\tthrow new Error(`tried to call ${fnName} on disposed context`);\n\t\t};\n\t}\n\n\tclass DefaultCompositor {\n\t\tconstructor(canvas) {\n\t\t\tthis._ctx = canvas.getContext('2d');\n\t\t}\n\t\tcomposite(gl, texture, canvas, contextAttributes) {\n\t\t\t// note: not entirely sure what to do here. We need this canvas to be at least as large\n\t\t\t// as the canvas we're drawing to. Resizing a canvas is slow so I think just making\n\t\t\t// sure we never get smaller than the largest canvas. At the moment though I'm too lazy\n\t\t\t// to make it smaller.\n\t\t\tconst ctx = this._ctx;\n\t\t\tconst width = canvas.width;\n\t\t\tconst height = canvas.height;\n\t\t\tconst maxWidth = Math.max(gl.canvas.width, width);\n\t\t\tconst maxHeight = Math.max(gl.canvas.height, height);\n\t\t\tif (gl.canvas.width !== maxWidth || gl.canvas.height !== maxHeight) {\n\t\t\t\tgl.canvas.width = maxWidth;\n\t\t\t\tgl.canvas.height = maxHeight;\n\t\t\t}\n\n\t\t\tgl.viewport(0, 0, width, height);\n\n\t\t\tgl.useProgram(\n\t\t\t\tcontextAttributes.premultipliedAlpha\n\t\t\t\t\t? premultiplyAlphaTrueProgram\n\t\t\t\t\t: premultiplyAlphaFalseProgram\n\t\t\t);\n\n\t\t\t// draw the drawingbuffer's texture to the offscreen canvas\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, texture);\n\t\t\tgl.drawArrays(gl.TRIANGLES, 0, 6);\n\n\t\t\t// copy it to target canvas\n\t\t\tctx.globalCompositeOperation = 'copy';\n\t\t\tctx.drawImage(\n\t\t\t\tgl.canvas,\n\t\t\t\t0,\n\t\t\t\tmaxHeight - height,\n\t\t\t\twidth,\n\t\t\t\theight, // src rect\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t); // dest rect\n\t\t}\n\t\tdispose() {}\n\t}\n\n\tfunction virtualGLConstruct(canvas, contextAttributes = {}, compositor, disposeHelper) {\n\t\tconst gl = sharedWebGLContext;\n\t\tthis._canvas = canvas;\n\t\t// Should use Symbols or something to hide these variables from the outside.\n\n\t\tthis._compositor = compositor;\n\t\tthis._disposeHelper = disposeHelper;\n\t\tthis._extensions = {};\n\t\t// based on context attributes and canvas.width, canvas.height\n\t\t// create a texture and framebuffer\n\t\tthis._drawingbufferTexture = gl.createTexture();\n\t\tthis._drawingbufferFramebuffer = gl.createFramebuffer();\n\t\tthis._contextAttributes = {\n\t\t\talpha: valueOrDefault(contextAttributes.alpha, true),\n\t\t\tantialias: false,\n\t\t\tdepth: valueOrDefault(contextAttributes.depth, true),\n\t\t\tfailIfMajorPerformanceCaveat: false,\n\t\t\tpremultipliedAlpha: valueOrDefault(contextAttributes.premultipliedAlpha, true),\n\t\t\tstencil: valueOrDefault(contextAttributes.stencil, false)\n\t\t};\n\t\tthis._preserveDrawingbuffer = valueOrDefault(contextAttributes.preserveDrawingBuffer, false);\n\n\t\tconst oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n\t\tconst oldFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n\n\t\tgl.bindTexture(gl.TEXTURE_2D, this._drawingbufferTexture);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\t// this._drawingbufferTexture.id = canvas.id;\n\t\t// this._drawingbufferFramebuffer.id = canvas.id;\n\n\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, this._drawingbufferFramebuffer);\n\t\tgl.framebufferTexture2D(\n\t\t\tgl.FRAMEBUFFER,\n\t\t\tgl.COLOR_ATTACHMENT0,\n\t\t\tgl.TEXTURE_2D,\n\t\t\tthis._drawingbufferTexture,\n\t\t\t0\n\t\t);\n\n\t\tif (this._contextAttributes.depth) {\n\t\t\tconst oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n\t\t\tthis._depthRenderbuffer = gl.createRenderbuffer();\n\t\t\tgl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderbuffer);\n\t\t\tconst attachmentPoint = this._contextAttributes.stencil\n\t\t\t\t? gl.DEPTH_STENCIL_ATTACHMENT\n\t\t\t\t: gl.DEPTH_ATTACHMENT;\n\t\t\tgl.framebufferRenderbuffer(\n\t\t\t\tgl.FRAMEBUFFER,\n\t\t\t\tattachmentPoint,\n\t\t\t\tgl.RENDERBUFFER,\n\t\t\t\tthis._depthRenderbuffer\n\t\t\t);\n\t\t\tgl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);\n\t\t}\n\n\t\tgl.bindTexture(gl.TEXTURE_2D, oldTexture);\n\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, oldFramebuffer);\n\n\t\t// remember all WebGL state (default bindings, default texture units,\n\t\t// default attributes and/or vertex shade object, default program,\n\t\t// default blend, stencil, zBuffer, culling, viewport etc... state\n\t\tthis._state = makeDefaultState(gl, canvas.width, canvas.height);\n\t\tthis._state.readFramebuffer = this._drawingbufferFramebuffer;\n\t\tthis._state.drawFramebuffer = this._drawingbufferFramebuffer;\n\t\tthis._state.readBuffer = gl.COLOR_ATTACHMENT0;\n\n\t\tthis._state.vertexArray = gl.createVertexArray();\n\t\tthis._defaultVertexArray = this._state.vertexArray;\n\t}\n\n\tfunction virtualGLDispose() {\n\t\tthis._disposeHelper();\n\t\tconst gl = sharedWebGLContext;\n\t\tgl.deleteFramebuffer(this._drawingbufferFramebuffer);\n\t\tgl.deleteTexture(this._drawingbufferTexture);\n\t\tif (this._depthRenderbuffer) {\n\t\t\tgl.deleteRenderbuffer(this._depthRenderbuffer);\n\t\t}\n\t\tif (this._compositor.dispose) {\n\t\t\tthis._compositor.dispose();\n\t\t}\n\t\tfor (const [key, value] of Object.entries(this)) {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\tthis[key] = errorDisposedContext(key);\n\t\t\t}\n\t\t}\n\t\tfor (const [key, value] of Object.entries(this.prototype)) {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\tthis[key] = errorDisposedContext(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction virtualGLComposite(gl) {\n\t\tthis._compositor.composite(\n\t\t\tgl,\n\t\t\tthis._drawingbufferTexture,\n\t\t\tthis.canvas,\n\t\t\tthis._contextAttributes\n\t\t);\n\t\tif (!this._preserveDrawingbuffer) {\n\t\t\tthis._needClear = true;\n\t\t}\n\t}\n\n\t// Base exists so VirtualWebGLContext has a base class we can replace\n\t// because otherwise it's base is Object which we can't replace.\n\tclass Base {}\n\tclass VirtualWebGLContext extends Base {\n\t\tconstructor(canvas, contextAttributes = {}, compositor, disposeHelper) {\n\t\t\tsuper();\n\t\t\tthis.dispose = virtualGLDispose;\n\t\t\tthis.composite = virtualGLComposite;\n\t\t\tvirtualGLConstruct.call(this, canvas, contextAttributes, compositor, disposeHelper);\n\t\t}\n\t\tget canvas() {\n\t\t\treturn this._canvas;\n\t\t}\n\t\tget drawingBufferWidth() {\n\t\t\treturn this.canvas.width;\n\t\t}\n\t\tget drawingBufferHeight() {\n\t\t\treturn this.canvas.height;\n\t\t}\n\t}\n\tclass Base2 {}\n\tclass VirtualWebGL2Context extends Base2 {\n\t\tconstructor(canvas, contextAttributes = {}, compositor, disposeHelper) {\n\t\t\tsuper();\n\t\t\tthis.dispose = virtualGLDispose;\n\t\t\tthis.composite = virtualGLComposite;\n\t\t\tvirtualGLConstruct.call(this, canvas, contextAttributes, compositor, disposeHelper);\n\t\t}\n\t\tget canvas() {\n\t\t\treturn this._canvas;\n\t\t}\n\t\tget drawingBufferWidth() {\n\t\t\treturn this.canvas.width;\n\t\t}\n\t\tget drawingBufferHeight() {\n\t\t\treturn this.canvas.height;\n\t\t}\n\t}\n\n\t// Replace the prototype with WebGL2RenderingContext so that someCtx instanceof WebGL2RenderingContext returns true\n\tObject.setPrototypeOf(\n\t\tObject.getPrototypeOf(VirtualWebGLContext.prototype),\n\t\tWebGLRenderingContext.prototype\n\t);\n\tObject.setPrototypeOf(\n\t\tObject.getPrototypeOf(VirtualWebGL2Context.prototype),\n\t\tWebGL2RenderingContext.prototype\n\t);\n\n\tfunction makeDefaultState(gl, width, height) {\n\t\tconst vao = gl.createVertexArray();\n\t\tgl.bindVertexArray(vao);\n\n\t\tconst state = {\n\t\t\tarrayBuffer: null,\n\t\t\trenderbuffer: null,\n\t\t\tdrawFramebuffer: null,\n\t\t\treadFramebuffer: null,\n\t\t\tcopyReadBuffer: null,\n\t\t\tcopyWriteBuffer: null,\n\t\t\tpixelPackBuffer: null,\n\t\t\tpixelUnpackBuffer: null,\n\t\t\ttransformFeedbackBuffer: null,\n\t\t\tuniformBuffer: null,\n\n\t\t\treadBuffer: gl.BACK,\n\n\t\t\tenable: new Map([\n\t\t\t\t[gl.BLEND, false],\n\t\t\t\t[gl.CULL_FACE, false],\n\t\t\t\t[gl.DEPTH_TEST, false],\n\t\t\t\t[gl.DITHER, false],\n\t\t\t\t[gl.POLYGON_OFFSET_FILL, false],\n\t\t\t\t[gl.RASTERIZER_DISCARD, false],\n\t\t\t\t[gl.SAMPLE_ALPHA_TO_COVERAGE, false],\n\t\t\t\t[gl.SAMPLE_COVERAGE, false],\n\t\t\t\t[gl.SCISSOR_TEST, false],\n\t\t\t\t[gl.STENCIL_TEST, false]\n\t\t\t]),\n\n\t\t\t// This is a place the spec gets wrong! This data should have been part of a VertexArray\n\t\t\tattribValues: new Array(numAttribs).fill(0).map(() => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: gl.FLOAT,\n\t\t\t\t\tvalue: [0, 0, 0, 1]\n\t\t\t\t};\n\t\t\t}),\n\n\t\t\tvertexArray: vao,\n\t\t\tactiveTexture: gl.TEXTURE0,\n\t\t\ttransformFeedback: null,\n\n\t\t\tpack: new Map([\n\t\t\t\t[gl.PACK_ALIGNMENT, 4],\n\t\t\t\t[gl.UNPACK_ALIGNMENT, 4],\n\t\t\t\t[gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.BROWSER_DEFAULT_WEBGL],\n\t\t\t\t[gl.UNPACK_FLIP_Y_WEBGL, 0],\n\t\t\t\t[gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0],\n\t\t\t\t[gl.UNPACK_ROW_LENGTH, 0],\n\t\t\t\t[gl.UNPACK_SKIP_ROWS, 0],\n\t\t\t\t[gl.UNPACK_SKIP_PIXELS, 0],\n\t\t\t\t[gl.UNPACK_SKIP_IMAGES, 0],\n\t\t\t\t[gl.UNPACK_IMAGE_HEIGHT, 0],\n\t\t\t\t[gl.PACK_ROW_LENGTH, 0],\n\t\t\t\t[gl.PACK_SKIP_ROWS, 0],\n\t\t\t\t[gl.PACK_SKIP_PIXELS, 0]\n\t\t\t]),\n\n\t\t\tcurrentProgram: null,\n\t\t\tviewport: [0, 0, width, height],\n\t\t\tscissor: [0, 0, width, height],\n\t\t\tblendSrcRgb: gl.ONE,\n\t\t\tblendDstRgb: gl.ZERO,\n\t\t\tblendSrcAlpha: gl.ONE,\n\t\t\tblendDstAlpha: gl.ZERO,\n\t\t\tblendEquationRgb: gl.FUNC_ADD,\n\t\t\tblendEquationAlpha: gl.FUNC_ADD,\n\t\t\tblendColor: [0, 0, 0, 0],\n\t\t\tclearColor: [0, 0, 0, 0],\n\t\t\tcolorMask: [true, true, true, true],\n\t\t\tcullFaceMode: gl.BACK,\n\t\t\tclearDepth: 1,\n\t\t\tdepthFunc: gl.LESS,\n\t\t\tdepthRange: [0, 1],\n\t\t\tdepthMask: true,\n\t\t\tfrontFace: gl.CCW,\n\t\t\tgenerateMipmapHint: gl.DONT_CARE,\n\t\t\tlineWidth: 1,\n\t\t\tpolygonOffsetFactor: 0,\n\t\t\tpolygonOffsetUnits: 0,\n\t\t\tsampleCoverageValue: 1,\n\t\t\tsampleCoverageUnits: false,\n\t\t\tstencilFront: {\n\t\t\t\tfail: gl.KEEP,\n\t\t\t\tfunc: gl.ALWAYS,\n\t\t\t\tdepthFail: gl.KEEP,\n\t\t\t\tdepthPass: gl.KEEP,\n\t\t\t\tref: 0,\n\t\t\t\tvalueMask: 0xffffffff,\n\t\t\t\twriteMask: 0xffffffff\n\t\t\t},\n\t\t\tstencilBack: {\n\t\t\t\tfail: gl.KEEP,\n\t\t\t\tfunc: gl.ALWAYS,\n\t\t\t\tdepthFail: gl.KEEP,\n\t\t\t\tdepthPass: gl.KEEP,\n\t\t\t\tref: 0,\n\t\t\t\tvalueMask: 0xffffffff,\n\t\t\t\twriteMask: 0xffffffff\n\t\t\t},\n\t\t\tstencilClearValue: 0,\n\n\t\t\ttextureUnits: new Array(numTextureUnits).fill(0).map(() => {\n\t\t\t\treturn {\n\t\t\t\t\ttexture2D: null,\n\t\t\t\t\ttextureCubemap: null,\n\t\t\t\t\ttexture2DArray: null,\n\t\t\t\t\ttexture3D: null,\n\t\t\t\t\tsampler: null\n\t\t\t\t};\n\t\t\t}),\n\t\t\tuniformBufferBindings: new Array(numUniformBufferBindings).fill(0).map(() => {\n\t\t\t\treturn {\n\t\t\t\t\tbuffer: null,\n\t\t\t\t\tsize: 0,\n\t\t\t\t\tstart: 0\n\t\t\t\t};\n\t\t\t})\n\t\t};\n\n\t\treturn state;\n\t}\n\n\tfunction isFramebufferBindingNull(vCtx) {\n\t\treturn vCtx._state.drawFramebuffer === vCtx._drawingbufferFramebuffer;\n\t}\n\n\tfunction createWrapper(origFn /*, name*/) {\n\t\t// lots of optimization could happen here depending on specific functions\n\t\treturn function (...args) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\treturn origFn.call(sharedWebGLContext, ...args);\n\t\t};\n\t}\n\n\tfunction clearIfNeeded(vCtx) {\n\t\tif (vCtx._needClear) {\n\t\t\tvCtx._needClear = false;\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, vCtx._drawingbufferFramebuffer);\n\t\t\tgl.disable(gl.SCISSOR_TEST);\n\t\t\tgl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\n\t\t\tenableDisable(gl, gl.SCISSOR_TEST, vCtx._state.scissorTest);\n\t\t\tgl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, vCtx._state.drawFramebuffer);\n\t\t}\n\t}\n\n\tfunction beforeDraw(vCtx) {\n\t\tmakeCurrentContext(vCtx);\n\t\tresizeCanvasIfChanged(vCtx);\n\t\tclearIfNeeded(vCtx);\n\t}\n\n\tfunction afterDraw(vCtx) {\n\t\tif (isFramebufferBindingNull(vCtx)) {\n\t\t\tvCtx._needComposite = true;\n\t\t\tif (!someContextsNeedRendering) {\n\t\t\t\tsomeContextsNeedRendering = true;\n\t\t\t\tsetTimeout(renderAllDirtyVirtualCanvases, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction createDrawWrapper(origFn) {\n\t\treturn function (...args) {\n\t\t\t// a rendering function was called so we need to copy are drawingBuffer\n\t\t\t// to the canvas for this context after the current event.\n\t\t\tbeforeDraw(this);\n\t\t\tconst result = origFn.call(sharedWebGLContext, ...args);\n\t\t\tafterDraw(this);\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tfunction createStateArgsSaverFn(fnName) {\n\t\treturn function (...args) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl[fnName](...args);\n\t\t\tconst v = this._state[fnName];\n\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\tv[i] = args[i];\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction createSaveStateNamedArgs(fnName, argsToStateProps) {\n\t\treturn function (...args) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl[fnName](...args);\n\t\t\tfor (let i = 0; i < argsToStateProps.length; ++i) {\n\t\t\t\tthis._state[argsToStateProps[i]] = args[i];\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction createVertexAttribWrapper(origFn, fn) {\n\t\treturn function (loc, ...args) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\torigFn.call(gl, loc, ...args);\n\t\t\tconst [type, value] = fn(args);\n\t\t\tthis._state.attribValues[loc] = { type, value };\n\t\t};\n\t}\n\n\tfunction saveStencilMaskImpl(st, mask) {\n\t\tst.writeMask = mask;\n\t}\n\n\tfunction saveStencilMask(state, face, mask) {\n\t\tif (face === sharedWebGLContext.FRONT || face === sharedWebGLContext.FRONT_AND_BACK) {\n\t\t\tsaveStencilMaskImpl(state.stencilFront, mask);\n\t\t}\n\t\tif (face === sharedWebGLContext.BACK || face === sharedWebGLContext.FRONT_AND_BACK) {\n\t\t\tsaveStencilMaskImpl(state.stencilBack, mask);\n\t\t}\n\t}\n\n\tfunction saveStencilFuncImpl(st, func, ref, mask) {\n\t\tst.func = func;\n\t\tst.ref = ref;\n\t\tst.valueMask = mask;\n\t}\n\n\tfunction saveStencilFunc(state, face, func, ref, mask) {\n\t\tif (face === sharedWebGLContext.FRONT || face === sharedWebGLContext.FRONT_AND_BACK) {\n\t\t\tsaveStencilFuncImpl(state.stencilFront, func, ref, mask);\n\t\t}\n\t\tif (face === sharedWebGLContext.BACK || face === sharedWebGLContext.FRONT_AND_BACK) {\n\t\t\tsaveStencilFuncImpl(state.stencilBack, func, ref, mask);\n\t\t}\n\t}\n\n\tfunction saveStencilOpImpl(st, fail, zfail, zpass) {\n\t\tst.fail = fail;\n\t\tst.depthFail = zfail;\n\t\tst.depthPass = zpass;\n\t}\n\n\tfunction saveStencilOp(state, face, fail, zfail, zpass) {\n\t\tif (face === sharedWebGLContext.FRONT || face === sharedWebGLContext.FRONT_AND_BACK) {\n\t\t\tsaveStencilOpImpl(state.stencilFront, fail, zfail, zpass);\n\t\t}\n\t\tif (face === sharedWebGLContext.BACK || face === sharedWebGLContext.FRONT_AND_BACK) {\n\t\t\tsaveStencilOpImpl(state.stencilBack, fail, zfail, zpass);\n\t\t}\n\t}\n\n\tconst virtualFns = {\n\t\tgetExtension(name) {\n\t\t\t// just like the real context each extension needs a virtual class because each use\n\t\t\t// of the extension might be modified (as in people adding properties to it)\n\t\t\tconst existingExt = this._extensions[name];\n\t\t\tif (existingExt) {\n\t\t\t\treturn existingExt;\n\t\t\t}\n\n\t\t\tconst ext = sharedWebGLContext.getExtension(name);\n\t\t\tif (!ext) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst wrapperInfo = extensionInfo[name] || {};\n\t\t\tconst wrapperFnMakerFn =\n\t\t\t\twrapperInfo.wrapperFnMakerFn ||\n\t\t\t\t(() => {\n\t\t\t\t\tconsole.log('trying to get extension:', name);\n\t\t\t\t});\n\t\t\tconst saveRestoreHelper = extensionSaveRestoreHelpers[name];\n\t\t\tif (!saveRestoreHelper) {\n\t\t\t\tconst saveRestoreMakerFn = wrapperInfo.saveRestoreMakerFn;\n\t\t\t\tif (saveRestoreMakerFn) {\n\t\t\t\t\tconst saveRestore = saveRestoreMakerFn(ext);\n\t\t\t\t\textensionSaveRestoreHelpers[name] = saveRestore;\n\t\t\t\t\textensionSaveRestoreHelpersArray.push(saveRestore);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst wrapper = {\n\t\t\t\t_context: this\n\t\t\t};\n\t\t\tfor (const key in ext) {\n\t\t\t\tlet value = ext[key];\n\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\tvalue = wrapperFnMakerFn(ext, value, name);\n\t\t\t\t}\n\t\t\t\twrapper[key] = value;\n\t\t\t}\n\n\t\t\treturn wrapper;\n\t\t},\n\t\tactiveTexture(unit) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.activeTexture(unit);\n\t\t\tthis._state.activeTexture = unit;\n\t\t},\n\t\tenable(pname) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.enable(pname);\n\t\t\tthis._state.enable.set(pname, true);\n\t\t},\n\t\tdisable(pname) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.disable(pname);\n\t\t\tthis._state.enable.set(pname, false);\n\t\t},\n\t\tviewport: createStateArgsSaverFn('viewport'),\n\t\tscissor: createStateArgsSaverFn('scissor'),\n\t\tblendColor: createStateArgsSaverFn('blendColor'),\n\t\tclearColor: createStateArgsSaverFn('clearColor'),\n\t\tcolorMask: createStateArgsSaverFn('colorMask'),\n\t\tdepthRange: createStateArgsSaverFn('depthRange'),\n\t\tbindBuffer(target, buffer) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindBuffer(target, buffer);\n\t\t\tswitch (gl.target) {\n\t\t\t\tcase gl.ARRAY_BUFFER:\n\t\t\t\t\tthis._state.arrayBuffer = buffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.COPY_READ_BUFFER:\n\t\t\t\t\tthis._state.copyReadBuffer = buffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.COPY_WRITE_BUFFER:\n\t\t\t\t\tthis._state.copyWriteBuffer = buffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.PIXEL_PACK_BUFFER:\n\t\t\t\t\tthis._state.pixelPackBuffer = buffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.PIXEL_UNPACK_BUFFER:\n\t\t\t\t\tthis._state.pixelUnpackBuffer = buffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.TRANSFORM_FEEDBACK_BUFFER:\n\t\t\t\t\tthis._state.transformFeedbackBuffer = buffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.UNIFORM_BUFFER:\n\t\t\t\t\tthis._state.uniformBuffer = buffer;\n\t\t\t}\n\t\t},\n\t\tbindBufferBase(target, index, buffer) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindBufferBase(target, index, buffer);\n\t\t\tswitch (target) {\n\t\t\t\tcase gl.UNIFORM_BUFFER: {\n\t\t\t\t\tconst ub = this._state.uniformBufferBindings[index];\n\t\t\t\t\tub.buffer = buffer;\n\t\t\t\t\tub.size = 0;\n\t\t\t\t\tub.start = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tbindBufferRange(target, index, buffer, offset, size) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindBufferRange(target, index, buffer, offset, size);\n\t\t\tswitch (target) {\n\t\t\t\tcase gl.UNIFORM_BUFFER: {\n\t\t\t\t\tconst ub = this._state.uniformBufferBindings[index];\n\t\t\t\t\tub.buffer = buffer;\n\t\t\t\t\tub.size = size;\n\t\t\t\t\tub.start = offset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tbindTexture(target, texture) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindTexture(target, texture);\n\t\t\tconst unit = this._state.textureUnits[this._state.activeTexture - gl.TEXTURE0];\n\t\t\tswitch (target) {\n\t\t\t\tcase gl.TEXTURE_2D:\n\t\t\t\t\tunit.texture2D = texture;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.TEXTURE_CUBE_MAP:\n\t\t\t\t\tunit.textureCubemap = texture;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.TEXTURE_2D_ARRAY:\n\t\t\t\t\tunit.texture2DArray = texture;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.TEXTURE_3D:\n\t\t\t\t\tunit.texture3D = texture;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tbindRenderbuffer(target, renderbuffer) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindRenderbuffer(target, renderbuffer);\n\t\t\tthis._state.renderbuffer = renderbuffer;\n\t\t},\n\t\tbindSampler(unit, sampler) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindSampler(unit, sampler);\n\t\t\tthis._state.textureUnits[unit].sampler = sampler;\n\t\t},\n\t\tbindVertexArray(va) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tif (va === null) {\n\t\t\t\tva = this._defaultVertexArray;\n\t\t\t}\n\t\t\tgl.bindVertexArray(va);\n\t\t\tthis._state.vertexArray = va;\n\t\t},\n\t\tgetContextAttributes() {\n\t\t\treturn this._contextAttributes;\n\t\t},\n\t\treadPixels(...args) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tclearIfNeeded(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\treturn gl.readPixels(...args);\n\t\t},\n\t\tgetParameter(pname) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tconst value = gl.getParameter(pname);\n\t\t\tswitch (pname) {\n\t\t\t\tcase gl.FRAMEBUFFER_BINDING:\n\t\t\t\t\tif (value === this._drawingbufferFramebuffer) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.DRAW_BUFFER0:\n\t\t\t\t\tif (isFramebufferBindingNull(this)) {\n\t\t\t\t\t\tif (value === gl.COLOR_ATTACHMENT0) {\n\t\t\t\t\t\t\treturn gl.BACK;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.READ_BUFFER:\n\t\t\t\t\tif (isFramebufferBindingNull(this)) {\n\t\t\t\t\t\tif (value === gl.COLOR_ATTACHMENT0) {\n\t\t\t\t\t\t\treturn gl.BACK;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.VERTEX_ARRAY_BINDING:\n\t\t\t\t\tif (value === this._defaultVertexArray) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tblendFunc(sfactor, dfactor) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.blendFunc(sfactor, dfactor);\n\t\t\tthis._state.blendSrcRgb = sfactor;\n\t\t\tthis._state.blendSrcAlpha = sfactor;\n\t\t\tthis._state.blendDstRgb = dfactor;\n\t\t\tthis._state.blendDstAlpha = dfactor;\n\t\t},\n\t\tblendEquation(mode) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.blendEquation(mode);\n\t\t\tthis._state.blendEquationRgb = mode;\n\t\t\tthis._state.blendEquationAlpha = mode;\n\t\t},\n\t\tblendFuncSeparate: createSaveStateNamedArgs('blendFuncSeparate', [\n\t\t\t'blendSrcRgb',\n\t\t\t'blendDstRgb',\n\t\t\t'blendSrcAlpha',\n\t\t\t'blendDstAlpha'\n\t\t]),\n\t\tblendEquationSeparate: createSaveStateNamedArgs('blendEquationSeparate', [\n\t\t\t'blendEquationRgb',\n\t\t\t'blendEquationAlpha'\n\t\t]),\n\t\tcullFace: createSaveStateNamedArgs('cullFace', ['cullFaceMode']),\n\t\tclearDepth: createSaveStateNamedArgs('clearDepth', ['clearDepth']),\n\t\tdepthFunc: createSaveStateNamedArgs('depthFunc', ['depthFunc']),\n\t\tdepthMask: createSaveStateNamedArgs('depthMask', ['depthMask']),\n\t\tfrontFace: createSaveStateNamedArgs('frontFace', ['frontFace']),\n\t\tlineWidth: createSaveStateNamedArgs('lineWidth', ['lineWidth']),\n\t\tpolygonOffset: createSaveStateNamedArgs('polygonOffset', [\n\t\t\t'polygonOffsetFactor',\n\t\t\t'polygonOffsetUnits'\n\t\t]),\n\t\tsampleCoverage: createSaveStateNamedArgs('sampleCoverage', [\n\t\t\t'sampleCoverageValue',\n\t\t\t'sampleCoverageUnits'\n\t\t]),\n\t\tclearStencil: createSaveStateNamedArgs('clearStencil', ['clearStencilValue']),\n\t\thint(pname, value) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.hint(pname, value);\n\t\t\tthis._state.generateMipmapHint = value;\n\t\t},\n\t\tbindFramebuffer(bindPoint, framebuffer) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tif (framebuffer === null) {\n\t\t\t\t// bind our drawingBuffer\n\t\t\t\tframebuffer = this._drawingbufferFramebuffer;\n\t\t\t}\n\t\t\tgl.bindFramebuffer(bindPoint, framebuffer);\n\t\t\tswitch (bindPoint) {\n\t\t\t\tcase gl.FRAMEBUFFER:\n\t\t\t\t\tthis._state.readFramebuffer = framebuffer;\n\t\t\t\t\tthis._state.drawFramebuffer = framebuffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.DRAW_FRAMEBUFFER:\n\t\t\t\t\tthis._state.drawFramebuffer = framebuffer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.READ_FRAMEBUFFER:\n\t\t\t\t\tthis._state.readFramebuffer = framebuffer;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tdrawBuffers: (function () {\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tconst backBuffer = [gl.COLOR_ATTACHMENT0];\n\n\t\t\treturn function (drawingBuffers) {\n\t\t\t\tmakeCurrentContext(this);\n\t\t\t\tresizeCanvasIfChanged(this);\n\t\t\t\t// if the virtual context is bound to canvas then fake it\n\t\t\t\tif (isFramebufferBindingNull(this)) {\n\t\t\t\t\t// this really isn't checking everything\n\t\t\t\t\t// for example if the user passed in array.length != 1\n\t\t\t\t\t// then we are supposed to generate an error\n\t\t\t\t\tif (drawingBuffers[0] === gl.BACK) {\n\t\t\t\t\t\tdrawingBuffers = backBuffer;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgl.drawBuffers(drawingBuffers);\n\t\t\t};\n\t\t})(),\n\t\tclear: createDrawWrapper(WebGL2RenderingContext.prototype.clear),\n\t\tdrawArrays: createDrawWrapper(WebGL2RenderingContext.prototype.drawArrays),\n\t\tdrawElements: createDrawWrapper(WebGL2RenderingContext.prototype.drawElements),\n\t\tdrawArraysInstanced: createDrawWrapper(WebGL2RenderingContext.prototype.drawArraysInstanced),\n\t\tdrawElementsInstanced: createDrawWrapper(\n\t\t\tWebGL2RenderingContext.prototype.drawElementsInstanced\n\t\t),\n\t\tdrawRangeElements: createDrawWrapper(WebGL2RenderingContext.prototype.drawRangeElements),\n\t\tuseProgram(program) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.useProgram(program);\n\t\t\tthis._state.currentProgram = program;\n\t\t},\n\t\tbindTransformFeedback(target, tb) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.bindTransformFeedback(target, tb);\n\t\t\tthis._state.transformFeedback = tb;\n\t\t},\n\t\treadBuffer(src) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tif (src === gl.BACK) {\n\t\t\t\tsrc = gl.COLOR_ATTACHMENT0;\n\t\t\t}\n\t\t\tgl.readBuffer(src);\n\t\t\tthis._state.readBuffer = src;\n\t\t},\n\t\tstencilFunc(func, ref, mask) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.stencilFunc(func, ref, mask);\n\t\t\tsaveStencilFunc(this._state, gl.FRONT_AND_BACK, func, ref, mask);\n\t\t},\n\t\tstencilFuncSeparate(face, func, ref, mask) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.stencilFuncSeparate(face, func, ref, mask);\n\t\t\tsaveStencilFunc(this._state, face, func, ref, mask);\n\t\t},\n\t\tstencilMask(mask) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.stencilMask(mask);\n\t\t\tsaveStencilMask(this._state, gl.FRONT_AND_BACK, mask);\n\t\t},\n\t\tstencilMaskSeparate(face, mask) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.stencilMaskSeparate(face, mask);\n\t\t\tsaveStencilMask(this._state, face, mask);\n\t\t},\n\t\tstencilOp(fail, zfail, zpass) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.stencilOp(fail, zfail, zpass);\n\t\t\tsaveStencilOp(this._state, gl.FRONT_AND_BACK, fail, zfail, zpass);\n\t\t},\n\t\tstencilOpSeparate(face, fail, zfail, zpass) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tgl.stencilOpSeparate(face, fail, zfail, zpass);\n\t\t\tsaveStencilOp(this._state, face, fail, zfail, zpass);\n\t\t},\n\t\tvertexAttrib1f: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1f,\n\t\t\t([x]) => [FLOAT, [x, 0, 0, 1]]\n\t\t),\n\t\tvertexAttrib2f: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1f,\n\t\t\t([x, y]) => [FLOAT, [x, y, 0, 1]]\n\t\t),\n\t\tvertexAttrib3f: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1f,\n\t\t\t([x, y, z]) => [FLOAT, [x, y, z, 1]]\n\t\t),\n\t\tvertexAttrib4f: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1f,\n\t\t\t([x, y, z, w]) => [FLOAT, [x, y, z, w]]\n\t\t),\n\t\tvertexAttrib1fv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1fv,\n\t\t\t([[x]]) => [FLOAT, [x, 0, 0, 1]]\n\t\t),\n\t\tvertexAttrib2fv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1fv,\n\t\t\t([[x, y]]) => [FLOAT, [x, y, 0, 1]]\n\t\t),\n\t\tvertexAttrib3fv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1fv,\n\t\t\t([[x, y, z]]) => [FLOAT, [x, y, z, 1]]\n\t\t),\n\t\tvertexAttrib4fv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1fv,\n\t\t\t([[x, y, z, w]]) => [FLOAT, [x, y, z, w]]\n\t\t),\n\t\tvertexAttrib1i: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1i,\n\t\t\t([x]) => [FLOAT, [x, 0, 0, 1]]\n\t\t),\n\t\tvertexAttrib2i: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1i,\n\t\t\t([x, y]) => [FLOAT, [x, y, 0, 1]]\n\t\t),\n\t\tvertexAttrib3i: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1i,\n\t\t\t([x, y, z]) => [FLOAT, [x, y, z, 1]]\n\t\t),\n\t\tvertexAttrib4i: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1i,\n\t\t\t([x, y, z, w]) => [FLOAT, [x, y, z, w]]\n\t\t),\n\t\tvertexAttrib1iv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1iv,\n\t\t\t([[x]]) => [FLOAT, [x, 0, 0, 1]]\n\t\t),\n\t\tvertexAttrib2iv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1iv,\n\t\t\t([[x, y]]) => [FLOAT, [x, y, 0, 1]]\n\t\t),\n\t\tvertexAttrib3iv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1iv,\n\t\t\t([[x, y, z]]) => [FLOAT, [x, y, z, 1]]\n\t\t),\n\t\tvertexAttrib4iv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1iv,\n\t\t\t([[x, y, z, w]]) => [FLOAT, [x, y, z, w]]\n\t\t),\n\t\tvertexAttrib1ui: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1ui,\n\t\t\t([x]) => [FLOAT, [x, 0, 0, 1]]\n\t\t),\n\t\tvertexAttrib2ui: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1ui,\n\t\t\t([x, y]) => [FLOAT, [x, y, 0, 1]]\n\t\t),\n\t\tvertexAttrib3ui: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1ui,\n\t\t\t([x, y, z]) => [FLOAT, [x, y, z, 1]]\n\t\t),\n\t\tvertexAttrib4ui: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1ui,\n\t\t\t([x, y, z, w]) => [FLOAT, [x, y, z, w]]\n\t\t),\n\t\tvertexAttrib1uiv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1uiv,\n\t\t\t([[x]]) => [FLOAT, [x, 0, 0, 1]]\n\t\t),\n\t\tvertexAttrib2uiv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1uiv,\n\t\t\t([[x, y]]) => [FLOAT, [x, y, 0, 1]]\n\t\t),\n\t\tvertexAttrib3uiv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1uiv,\n\t\t\t([[x, y, z]]) => [FLOAT, [x, y, z, 1]]\n\t\t),\n\t\tvertexAttrib4uiv: createVertexAttribWrapper(\n\t\t\tWebGL2RenderingContext.prototype.vertexAttrib1uiv,\n\t\t\t([[x, y, z, w]]) => [FLOAT, [x, y, z, w]]\n\t\t)\n\t};\n\n\tconst webgl1Extensions = {\n\t\tOES_texture_float: {\n\t\t\tfn() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\tOES_vertex_array_object: {\n\t\t\tfn(vCtx) {\n\t\t\t\treturn {\n\t\t\t\t\tVERTEX_ARRAY_BINDING_OES: sharedWebGLContext.VERTEX_ARRAY_BINDING,\n\t\t\t\t\tcreateVertexArrayOES() {\n\t\t\t\t\t\treturn sharedWebGLContext.createVertexArray();\n\t\t\t\t\t},\n\t\t\t\t\tdeleteVertexArrayOES(va) {\n\t\t\t\t\t\tsharedWebGLContext.deleteVertexArray(va);\n\t\t\t\t\t},\n\t\t\t\t\tbindVertexArrayOES(va) {\n\t\t\t\t\t\tvirtualFns.bindVertexArray.call(vCtx, va);\n\t\t\t\t\t},\n\t\t\t\t\tisVertexArrayOES(va) {\n\t\t\t\t\t\treturn sharedWebGLContext.isVertexArray(va);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tANGLE_instanced_arrays: {\n\t\t\tfn(vCtx) {\n\t\t\t\treturn {\n\t\t\t\t\tVERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88fe,\n\t\t\t\t\tdrawArraysInstancedANGLE(...args) {\n\t\t\t\t\t\tvirtualFns.drawArraysInstanced.call(vCtx, ...args);\n\t\t\t\t\t},\n\t\t\t\t\tdrawElementsInstancedANGLE(...args) {\n\t\t\t\t\t\tvirtualFns.drawElementsInstanced.call(vCtx, ...args);\n\t\t\t\t\t},\n\t\t\t\t\tvertexAttribDivisorANGLE(...args) {\n\t\t\t\t\t\tsharedWebGLContext.vertexAttribDivisor(...args);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t// We can't easily support WebGL_draw_buffers because WebGL2 does not\n\t\t// support gl_FragData. Instead, it requires you to write your shaders\n\t\t// in GLSL ES 3.0 if you want to use multiple color attachments. To support\n\t\t// that correctly would require writing a GLSL parser. We need to change\n\t\t// 'attribute' -> 'in', 'varying' -> 'out' in vertex shaders, 'varying' to 'in'\n\t\t// in fragment shader, 'texture2D' to 'texture' and declare outputs. That sounds\n\t\t// simple but it quickly becomes complicated.\n\t\t//\n\t\t// * 'texture' is a valid identifier in GLSL ES 1.0 but a reserved word in\n\t\t//   GLSL ES 3.0 so we'd have to rename identifiers\n\t\t//\n\t\t// * Changing the fragment shader means it's on longer compatible with\n\t\t//   GLSL ES 1.0 vertex shaders. But, back in WebGL1, we could easily use\n\t\t//   the same vertex shader with and without WEBGL_draw_buffers. That means\n\t\t//   we now need 2 versions of every vertex shader (ES 1.0 and ES 3.0), OR\n\t\t//   we need to translate ALL shaders to GLSL ES 3.0\n\t\t//\n\t\t// * GLSL 1.0 shaders support dynamically indexing an array of samplers.\n\t\t//   GLSL 3.0 does not. So we'd have to emit an emulation function.\n\t\t//\n\t\t// The point is it's not a trivial amount of work.\n\t\t/*\n    WEBGL_draw_buffers: {\n      fn(vCtx) {\n        return {\n          COLOR_ATTACHMENT0_WEBGL     : 0x8CE0,\n          COLOR_ATTACHMENT1_WEBGL     : 0x8CE1,\n          COLOR_ATTACHMENT2_WEBGL     : 0x8CE2,\n          COLOR_ATTACHMENT3_WEBGL     : 0x8CE3,\n          COLOR_ATTACHMENT4_WEBGL     : 0x8CE4,\n          COLOR_ATTACHMENT5_WEBGL     : 0x8CE5,\n          COLOR_ATTACHMENT6_WEBGL     : 0x8CE6,\n          COLOR_ATTACHMENT7_WEBGL     : 0x8CE7,\n          COLOR_ATTACHMENT8_WEBGL     : 0x8CE8,\n          COLOR_ATTACHMENT9_WEBGL     : 0x8CE9,\n          COLOR_ATTACHMENT10_WEBGL    : 0x8CEA,\n          COLOR_ATTACHMENT11_WEBGL    : 0x8CEB,\n          COLOR_ATTACHMENT12_WEBGL    : 0x8CEC,\n          COLOR_ATTACHMENT13_WEBGL    : 0x8CED,\n          COLOR_ATTACHMENT14_WEBGL    : 0x8CEE,\n          COLOR_ATTACHMENT15_WEBGL    : 0x8CEF,\n\n          DRAW_BUFFER0_WEBGL          : 0x8825,\n          DRAW_BUFFER1_WEBGL          : 0x8826,\n          DRAW_BUFFER2_WEBGL          : 0x8827,\n          DRAW_BUFFER3_WEBGL          : 0x8828,\n          DRAW_BUFFER4_WEBGL          : 0x8829,\n          DRAW_BUFFER5_WEBGL          : 0x882A,\n          DRAW_BUFFER6_WEBGL          : 0x882B,\n          DRAW_BUFFER7_WEBGL          : 0x882C,\n          DRAW_BUFFER8_WEBGL          : 0x882D,\n          DRAW_BUFFER9_WEBGL          : 0x882E,\n          DRAW_BUFFER10_WEBGL         : 0x882F,\n          DRAW_BUFFER11_WEBGL         : 0x8830,\n          DRAW_BUFFER12_WEBGL         : 0x8831,\n          DRAW_BUFFER13_WEBGL         : 0x8832,\n          DRAW_BUFFER14_WEBGL         : 0x8833,\n          DRAW_BUFFER15_WEBGL         : 0x8834,\n\n          MAX_COLOR_ATTACHMENTS_WEBGL : 0x8CDF,\n          MAX_DRAW_BUFFERS_WEBGL      : 0x8824,\n\n          drawBuffersWEBGL(buffers) {\n            virtualFns.drawBuffers.call(vCtx, buffers);\n          },\n        };\n      },\n    },\n    */\n\t};\n\n\tconst texImage2DArgParersMap = new Map([\n\t\t[\n\t\t\t9,\n\t\t\tfunction ([target, level, internalFormat, width, height, , format, type]) {\n\t\t\t\treturn { target, level, internalFormat, width, height, format, type };\n\t\t\t}\n\t\t],\n\t\t[\n\t\t\t6,\n\t\t\tfunction ([target, level, internalFormat, format, type, texImageSource]) {\n\t\t\t\treturn {\n\t\t\t\t\ttarget,\n\t\t\t\t\tlevel,\n\t\t\t\t\tinternalFormat,\n\t\t\t\t\twidth: texImageSource.width,\n\t\t\t\t\theight: texImageSource.height,\n\t\t\t\t\tformat,\n\t\t\t\t\ttype\n\t\t\t\t};\n\t\t\t}\n\t\t],\n\t\t[\n\t\t\t10,\n\t\t\tfunction ([target, level, internalFormat, width, height, , format, type]) {\n\t\t\t\treturn { target, level, internalFormat, width, height, format, type };\n\t\t\t}\n\t\t]\n\t]);\n\n\tconst webgl1Fns = {\n\t\tgetExtension(name) {\n\t\t\tconst existingExt = this._extensions[name];\n\t\t\tif (existingExt) {\n\t\t\t\treturn existingExt;\n\t\t\t}\n\n\t\t\tconst info = webgl1Extensions[name];\n\t\t\tif (!info) {\n\t\t\t\treturn virtualFns.getExtension.call(this, name);\n\t\t\t}\n\n\t\t\treturn info.fn(this);\n\t\t},\n\t\ttexImage2D(...args) {\n\t\t\tmakeCurrentContext(this);\n\t\t\tresizeCanvasIfChanged(this);\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tconst fn = texImage2DArgParersMap.get(args.length);\n\t\t\tconst { internalFormat, type } = fn(args);\n\t\t\tif (type === sharedWebGLContext.FLOAT) {\n\t\t\t\tswitch (internalFormat) {\n\t\t\t\t\tcase gl.RGBA:\n\t\t\t\t\t\targs[2] = gl.RGBA32F;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase gl.RGB:\n\t\t\t\t\t\targs[2] = gl.RGB32F;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tgl.texImage2D(...args);\n\t\t},\n\t\tgetSupportedExtensions: function () {\n\t\t\treturn [\n\t\t\t\t...sharedWebGLContext.getSupportedExtensions(),\n\t\t\t\t'OES_texture_float',\n\t\t\t\t'WEBGL_depth_texture',\n\t\t\t\t'OES_vertex_array_object'\n\t\t\t\t// \"WEBGL_draw_buffers\",  // See other comment\n\t\t\t];\n\t\t}\n\t};\n\n\t// copy all WebGL constants and functions to the prototype of\n\t// VirtualWebGLContext\n\tfunction copyProperties(keys, VirtualClass, overrideFns) {\n\t\tfor (const key of keys) {\n\t\t\tconst propDesc = Object.getOwnPropertyDescriptor(WebGL2RenderingContext.prototype, key);\n\t\t\tif (propDesc.get) {\n\t\t\t\t// it's a getter/setter ?\n\t\t\t\tconst virtualPropDesc = Object.getOwnPropertyDescriptor(VirtualClass.prototype, key);\n\t\t\t\tif (!virtualPropDesc) {\n\t\t\t\t\tconsole.warn(`WebGL2RenderingContext.${key} is not supported`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tswitch (key) {\n\t\t\t\tdefault: {\n\t\t\t\t\tconst value = WebGL2RenderingContext.prototype[key];\n\t\t\t\t\tlet newValue = value;\n\t\t\t\t\tconst fn = overrideFns[key] || virtualFns[key];\n\t\t\t\t\tif (fn) {\n\t\t\t\t\t\tnewValue = fn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\t\t\tnewValue = createWrapper(value, key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tVirtualClass.prototype[key] = newValue;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// console.log(e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcopyProperties(Object.keys(WebGLRenderingContext.prototype), VirtualWebGLContext, webgl1Fns);\n\tcopyProperties(Object.keys(WebGL2RenderingContext.prototype), VirtualWebGL2Context, {});\n\n\tfunction makeCurrentContext(vCtx) {\n\t\tif (currentVirtualContext === vCtx) {\n\t\t\treturn;\n\t\t}\n\n\t\t// save all current WebGL state on the previous current virtual context\n\t\tif (currentVirtualContext) {\n\t\t\tsaveAllState(currentVirtualContext._state, currentVirtualContext);\n\t\t}\n\n\t\t// restore all state for the new context\n\t\trestoreAllState(vCtx._state, vCtx);\n\n\t\t// check if the current state is supposed to be rendering to the canvas.\n\t\t// if so bind vCtx._drawingbuffer\n\n\t\tcurrentVirtualContext = vCtx;\n\t}\n\n\tfunction resizeCanvasIfChanged(vCtx) {\n\t\tconst width = vCtx.canvas.width;\n\t\tconst height = vCtx.canvas.height;\n\n\t\tif (width !== vCtx._width || height !== vCtx._height) {\n\t\t\tvCtx._width = width;\n\t\t\tvCtx._height = height;\n\t\t\tconst gl = sharedWebGLContext;\n\t\t\tconst oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n\t\t\tconst format = vCtx._contextAttributes.alpha ? gl.RGBA : gl.RGB;\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, vCtx._drawingbufferTexture);\n\t\t\tgl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, format, gl.UNSIGNED_BYTE, null);\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, oldTexture);\n\n\t\t\tif (vCtx._depthRenderbuffer) {\n\t\t\t\tconst oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n\t\t\t\tconst internalFormat = vCtx._contextAttributes.stencil\n\t\t\t\t\t? gl.DEPTH_STENCIL\n\t\t\t\t\t: gl.DEPTH_COMPONENT16;\n\t\t\t\tgl.bindRenderbuffer(gl.RENDERBUFFER, vCtx._depthRenderbuffer);\n\t\t\t\tgl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height);\n\t\t\t\tgl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction createOrGetVirtualWebGLContext(canvas, type, contextAttributes) {\n\t\t// check if this canvas already has a context\n\t\tconst existingVirtualCtx = canvasToVirtualContextMap.get(canvas);\n\t\tif (existingVirtualCtx) {\n\t\t\treturn existingVirtualCtx;\n\t\t}\n\n\t\tconst compositor =\n\t\t\tsettings.compositorCreator(canvas, type, contextAttributes) ||\n\t\t\tnew DefaultCompositor(canvas, type, contextAttributes);\n\t\tconst newVirtualCtx =\n\t\t\ttype === 'webgl2'\n\t\t\t\t? new VirtualWebGL2Context(canvas, contextAttributes, compositor, () => {\n\t\t\t\t\t\tcanvasToVirtualContextMap.delete(canvas);\n\t\t\t\t  })\n\t\t\t\t: new VirtualWebGLContext(canvas, contextAttributes, compositor, () => {\n\t\t\t\t\t\tcanvasToVirtualContextMap.delete(canvas);\n\t\t\t\t  });\n\n\t\tcanvasToVirtualContextMap.set(canvas, newVirtualCtx);\n\n\t\treturn newVirtualCtx;\n\t}\n\n\tfunction createProgram(gl, shaderSources) {\n\t\tconst program = gl.createProgram();\n\t\t[gl.VERTEX_SHADER, gl.FRAGMENT_SHADER].forEach((type, ndx) => {\n\t\t\tconst shader = gl.createShader(type);\n\t\t\tgl.shaderSource(shader, shaderSources[ndx]);\n\t\t\tgl.compileShader(shader);\n\t\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\t\tconsole.error(gl.getShaderInfoLog(shader)); // eslint-disable-line\n\t\t\t}\n\t\t\tgl.attachShader(program, shader);\n\t\t});\n\t\tgl.bindAttribLocation(program, 0, 'position');\n\t\tgl.linkProgram(program);\n\t\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\t\tconsole.error(gl.getProgramInfoLog(program)); // eslint-disable-line\n\t\t}\n\n\t\treturn program;\n\t}\n\n\tfunction saveAllState(state, vCtx) {\n\t\t// save all WebGL state (current bindings, current texture units,\n\t\t// current attributes and/or vertex shade object, current program,\n\t\t// current blend, stencil, zBuffer, culling, viewport etc... state\n\t\tfor (const fns of extensionSaveRestoreHelpersArray) {\n\t\t\tfns.save(state, vCtx);\n\t\t}\n\t}\n\n\tfunction setStencil(gl, face, st) {\n\t\tgl.stencilFuncSeparate(face, st.func, st.ref, st.valueMask);\n\t\tgl.stencilOpSeparate(face, st.fail, st.depthFail, st.depthPass);\n\t\tgl.stencilMaskSeparate(face, st.writeMask);\n\t}\n\n\tfunction restoreAllState(state, vCtx) {\n\t\t// restore all WebGL state (current bindings, current texture units,\n\t\t// current attributes and/or vertex shade object, current program,\n\t\t// current blend, stencil, zBuffer, culling, viewport etc... state\n\t\t// save all WebGL state (current bindings, current texture units,\n\t\t// current attributes and/or vertex shade object, current program,\n\t\t// current blend, stencil, zBuffer, culling, viewport etc... state\n\t\tconst gl = sharedWebGLContext;\n\n\t\tgl.bindRenderbuffer(gl.RENDERBUFFER, state.renderbuffer);\n\t\tgl.bindFramebuffer(gl.READ_FRAMEBUFFER, state.readFramebuffer);\n\t\tgl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, state.drawFramebuffer);\n\n\t\t// restore attributes\n\t\tgl.bindVertexArray(state.vertexArray);\n\t\tfor (let i = 0; i < numAttribs; ++i) {\n\t\t\tconst attr = state.attribValues[i];\n\t\t\tswitch (attr.type) {\n\t\t\t\tcase gl.FLOAT:\n\t\t\t\t\tgl.vertexAttrib4fv(i, attr.value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.INT:\n\t\t\t\t\tgl.vertexAttribI4iv(i, attr.value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase gl.UNSIGNED_INT:\n\t\t\t\t\tgl.vertexAttribI4uiv(i, attr.value);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tgl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, state.transformFeedback);\n\n\t\t// restore texture units\n\t\tfor (let i = 0; i < numTextureUnits; ++i) {\n\t\t\tgl.activeTexture(gl.TEXTURE0 + i);\n\t\t\tconst unit = state.textureUnits[i];\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, unit.texture2D);\n\t\t\tgl.bindTexture(gl.TEXTURE_CUBE_MAP, unit.textureCubemap);\n\t\t\tgl.bindTexture(gl.TEXTURE_2D_ARRAY, unit.texture2DArray);\n\t\t\tgl.bindTexture(gl.TEXTURE_3D, unit.texture3D);\n\t\t\tgl.bindSampler(i, unit.sampler);\n\t\t}\n\t\tgl.activeTexture(state.activeTexture);\n\n\t\t// uniform buffer bindings (must be restored before UNIFORM_BUFFER restore)\n\t\tfor (let i = 0; i < numUniformBufferBindings; ++i) {\n\t\t\tconst ub = state.uniformBufferBindings[i];\n\t\t\tif (ub.size || ub.start) {\n\t\t\t\tgl.bindBufferRange(gl.UNIFORM_BUFFER, i, ub.buffer, ub.start, ub.size);\n\t\t\t} else {\n\t\t\t\tgl.bindBufferBase(gl.UNIFORM_BUFFER, i, ub.buffer);\n\t\t\t}\n\t\t}\n\n\t\t// bindings\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, state.arrayBuffer);\n\t\tgl.bindBuffer(gl.COPY_READ_BUFFER, state.copyReadBuffer);\n\t\tgl.bindBuffer(gl.COPY_WRITE_BUFFER, state.copyWriteBuffer);\n\t\tgl.bindBuffer(gl.PIXEL_PACK_BUFFER, state.pixelPackBuffer);\n\t\tgl.bindBuffer(gl.PIXEL_UNPACK_BUFFER, state.pixelUnpackBuffer);\n\t\tgl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, state.transformFeedbackBuffer);\n\t\tgl.bindBuffer(gl.UNIFORM_BUFFER, state.uniformBuffer);\n\n\t\tgl.readBuffer(state.readBuffer);\n\n\t\tstate.enable.forEach((value, key) => {\n\t\t\tenableDisable(gl, key, value);\n\t\t});\n\n\t\tstate.pack.forEach((value, key) => {\n\t\t\tgl.pixelStorei(key, value);\n\t\t});\n\n\t\tgl.useProgram(state.currentProgram);\n\n\t\tgl.viewport(...state.viewport);\n\t\tgl.scissor(...state.scissor);\n\t\tgl.blendFuncSeparate(\n\t\t\tstate.blendSrcRgb,\n\t\t\tstate.blendDstRgb,\n\t\t\tstate.blendSrcAlpha,\n\t\t\tstate.blendDstAlpha\n\t\t);\n\t\tgl.blendEquationSeparate(state.blendEquationRgb, state.blendEquationAlpha);\n\t\tgl.blendColor(...state.blendColor);\n\t\tgl.clearColor(...state.clearColor);\n\t\tgl.colorMask(...state.colorMask);\n\t\tgl.cullFace(state.cullFaceMode);\n\t\tgl.clearDepth(state.clearDepth);\n\t\tgl.depthFunc(state.depthFunc);\n\t\tgl.depthRange(...state.depthRange);\n\t\tgl.depthMask(state.depthMask);\n\t\tgl.frontFace(state.frontFace);\n\t\tgl.hint(gl.GENERATE_MIPMAP_HINT, state.generateMipmapHint);\n\t\tgl.lineWidth(state.lineWidth);\n\t\tgl.polygonOffset(state.polygonOffsetFactor, state.polygonOffsetUnits);\n\t\tgl.sampleCoverage(state.sampleCoverageValue, state.sampleCoverageUnits);\n\n\t\tsetStencil(gl, gl.BACK, state.stencilBack);\n\t\tsetStencil(gl, gl.FRONT, state.stencilFront);\n\n\t\tgl.clearStencil(state.stencilClearValue);\n\n\t\tfor (const fns of extensionSaveRestoreHelpersArray) {\n\t\t\tfns.restore(state, vCtx);\n\t\t}\n\t}\n\n\tfunction enableDisable(gl, feature, enable) {\n\t\tif (enable) {\n\t\t\tgl.enable(feature);\n\t\t} else {\n\t\t\tgl.disable(feature);\n\t\t}\n\t}\n\n\tfunction renderAllDirtyVirtualCanvases() {\n\t\tif (!someContextsNeedRendering) {\n\t\t\treturn;\n\t\t}\n\t\tsomeContextsNeedRendering = false;\n\n\t\t// save all current WebGL state on the previous current virtual context\n\t\tif (currentVirtualContext) {\n\t\t\tsaveAllState(currentVirtualContext._state, currentVirtualContext);\n\t\t\tcurrentVirtualContext = null;\n\t\t}\n\n\t\t// set the state back to the one for drawing the canvas\n\t\trestoreAllState(baseState);\n\n\t\tfor (const vCtx of canvasToVirtualContextMap.values()) {\n\t\t\tif (!vCtx._needComposite) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvCtx._needComposite = false;\n\t\t\tvCtx.composite(sharedWebGLContext);\n\t\t}\n\t}\n\n\twindow.requestAnimationFrame = (function (origFn) {\n\t\treturn function (callback) {\n\t\t\treturn origFn.call(window, (time) => {\n\t\t\t\tconst result = callback(time);\n\t\t\t\trenderAllDirtyVirtualCanvases();\n\t\t\t\treturn result;\n\t\t\t});\n\t\t};\n\t})(window.requestAnimationFrame);\n\n\tfunction setup(options) {\n\t\tObject.assign(settings, options);\n\t}\n\n\twindow.virtualWebGL = {\n\t\tsetup\n\t};\n})();\n"
  },
  {
    "path": "lang/shadeup/environment.ts",
    "content": "// parse(\"hello world\");\n\nimport type { ShadeupExternalSymbol } from './symbol.js';\n\nimport type * as TYPES from '../../../parser-wasm/pkg/parser_wasm';\nimport type { ShadeupAlert } from './alert.js';\n\nimport files from './library/files';\n\nlet wasm_cache: any = null;\n\nexport function loadWasm() {\n\tif (wasm_cache) {\n\t\treturn wasm_cache;\n\t}\n\n\tlet exp = import('../../../parser-wasm/pkg/parser_wasm.js');\n\twasm_cache = exp;\n\n\treturn exp;\n}\n\nexport default class ShadeupEnvironment extends EventTarget {\n\tfiles: Map<string, string>;\n\tprivate alerts: Map<string, ShadeupAlert[]>;\n\tprivate env: TYPES.Environment;\n\tprivate mod: any;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.files = new Map();\n\t\tthis.alerts = new Map();\n\t}\n\n\tasync load() {\n\t\tlet exp = await loadWasm();\n\t\tthis.mod = exp;\n\t\tthis.env = exp.make_environment();\n\n\t\tfor (let k of Object.keys(files)) {\n\t\t\tthis.updateFile(k, files[k]);\n\t\t\tthis.evaluate(k);\n\t\t}\n\n\t\tconsole.log('loaded', this.files);\n\t}\n\n\tloaded() {\n\t\tif (this.env) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\treturn new Promise<void>((resolve) => {\n\t\t\tif (this.env) {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tconst interval = setInterval(() => {\n\t\t\t\t\tif (this.env) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t});\n\t}\n\n\taddSymbol(sym: ShadeupExternalSymbol) {\n\t\tif (sym.kind == 'function') {\n\t\t\tlet send = {\n\t\t\t\tname: sym.name,\n\t\t\t\tparameters: sym.parameters,\n\t\t\t\treturn_type: sym.outType,\n\t\t\t\tjs: sym.js\n\t\t\t};\n\t\t\tthis.mod.add_native_function(this.env, send);\n\t\t}\n\t}\n\n\tgetAlerts(filename: string) {\n\t\treturn this.alerts.get(filename) || [];\n\t}\n\n\tgetIntellisense(filename: string) {\n\t\treturn this.mod.get_intellisense(this.env, filename) || [];\n\t}\n\n\tevaluate(filename: string): boolean {\n\t\tlet now = performance.now();\n\t\tconst content = this.files.get(filename);\n\t\t// const ast = this.parse(content);\n\n\t\t// console.log(\n\t\t//   ast.alerts.length + \" alerts in \" + (performance.now() - now) + \"ms\"\n\t\t// );\n\n\t\t// this.alerts.set(filename, ast.alerts);\n\n\t\tthis.mod.set_file(this.env, filename, content);\n\n\t\tlet successfulParse = this.mod.parse_file(this.env, filename);\n\n\t\tlet alerts = this.mod.get_file_alerts(this.env, filename);\n\t\tthis.alerts.set(filename, alerts);\n\n\t\treturn successfulParse;\n\t}\n\n\tgetAst(filename: string) {\n\t\treturn this.mod.get_ast(this.env, filename);\n\t}\n\n\tupdateFile(filename: string, content: string) {\n\t\tthis.files.set(filename, content);\n\t\tthis.mod.set_file(this.env, filename, content);\n\t\tsetTimeout(() => {\n\t\t\tthis.dispatchEvent(new CustomEvent('change', { detail: filename }));\n\t\t}, 0);\n\t}\n\n\tgenerateFile(filename: string): string {\n\t\treturn this.mod.generate_file(this.env, filename);\n\t}\n\n\tgetImports(filename: string) {\n\t\treturn this.mod.get_imports(this.env, filename);\n\t}\n\n\tgetSymbols() {\n\t\treturn this.mod.get_symbols(this.env);\n\t}\n\n\treset() {\n\t\tthis.files.clear();\n\t\tthis.alerts.clear();\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/environmentWorker.ts",
    "content": "import type ShadeupEnvironment from './environment';\nimport type { ShadeupExternalSymbol } from './symbol';\n\nimport type { ShadeupAlert } from './alert.js';\n\nexport class ShadeupEnvironmentProxy extends EventTarget {\n\tworker: Worker;\n\n\trenderedFiles: Map<string, string>;\n\tfiles: Map<string, string>;\n\talerts: Map<string, ShadeupAlert[]>;\n\tintellisense: Map<string, any>;\n\tsymbols: any;\n\timports: Map<string, any>;\n\n\tconstructor(worker: Worker) {\n\t\tsuper();\n\n\t\tthis.worker = worker;\n\n\t\tthis.renderedFiles = new Map();\n\t\tthis.files = new Map();\n\t\tthis.alerts = new Map();\n\t\tthis.intellisense = new Map();\n\t\tthis.symbols = new Map();\n\t\tthis.imports = new Map();\n\n\t\tlet handleMessage = (msg: any) => {\n\t\t\tif (msg.type == 'intellisense') {\n\t\t\t\tthis.intellisense.set(msg.filename, msg.data);\n\t\t\t\tthis.dispatchEvent(new CustomEvent('intellisensed', { detail: msg.filename }));\n\t\t\t} else if (msg.type == 'alerts') {\n\t\t\t\tthis.alerts.set(msg.filename, msg.data);\n\t\t\t\tthis.dispatchEvent(new CustomEvent('alerted', { detail: msg.filename }));\n\t\t\t} else if (msg.type == 'symbols') {\n\t\t\t\tthis.symbols = msg.data;\n\t\t\t} else if (msg.type == 'imports') {\n\t\t\t\tthis.imports.set(msg.filename, msg.data);\n\t\t\t} else if (msg.type == 'rendered') {\n\t\t\t\tthis.renderedFiles.set(msg.filename, msg.data);\n\t\t\t}\n\t\t};\n\t\tthis.worker.onmessage = (e) => {\n\t\t\tif (e.data.type == 'messages') {\n\t\t\t\tlet hadRender = false;\n\t\t\t\tlet renderFile = null;\n\t\t\t\tfor (let msg of e.data.messages) {\n\t\t\t\t\thandleMessage(msg);\n\t\t\t\t\tif (msg.type == 'rendered') {\n\t\t\t\t\t\thadRender = true;\n\t\t\t\t\t\trenderFile = msg.filename;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hadRender) {\n\t\t\t\t\tthis.dispatchEvent(new CustomEvent('rendered', { detail: renderFile }));\n\t\t\t\t}\n\n\t\t\t\tthis.dispatchEvent(new CustomEvent('refresh', {}));\n\t\t\t} else {\n\t\t\t\thandleMessage(e.data);\n\t\t\t}\n\t\t};\n\t}\n\n\tsendMessage(message: any) {\n\t\tthis.worker.postMessage(message);\n\t}\n\n\taddSymbol(sym: ShadeupExternalSymbol) {\n\t\tthis.sendMessage({ type: 'addSymbol', symbol: sym });\n\t}\n\n\tgetAlerts(filename: string) {\n\t\treturn this.alerts.get(filename) ?? [];\n\t}\n\n\tgetIntellisense(filename: string) {\n\t\treturn this.intellisense.get(filename);\n\t}\n\n\twriteFile(filename: string, content: string) {\n\t\tthis.files.set(filename, content);\n\t\tthis.sendMessage({ type: 'writeFile', filename, data: content });\n\t\tthis.dispatchEvent(new CustomEvent('fileChanged', { detail: filename }));\n\t}\n\n\tevaluate(filename: string, skipGenerate = false) {\n\t\tthis.sendMessage({ type: 'evaluate', filename, data: { skipGenerate } });\n\t}\n\n\tgetImports(filename: string) {\n\t\treturn this.imports.get(filename);\n\t}\n\n\tgetSymbols() {\n\t\treturn this.symbols;\n\t}\n\n\treset() {\n\t\tthis.sendMessage({ type: 'reset' });\n\t\tthis.files.clear();\n\t\tthis.alerts.clear();\n\t\tthis.intellisense.clear();\n\t\tthis.symbols.clear();\n\t\tthis.imports.clear();\n\t}\n}\n\nexport function newEnvironmentWorker(): ShadeupEnvironmentProxy {\n\tlet worker = new Worker(new URL('./worker', import.meta.url), { type: 'module' });\n\n\tlet p = new ShadeupEnvironmentProxy(worker);\n\n\treturn p;\n}\n"
  },
  {
    "path": "lang/shadeup/frame.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title>Shadeup sandbox</title>\n\t\t<script>\n\t\t\tfunction __shadeup_get_struct(name) {\n\t\t\t\tif (!window.__shadeup_structs) window.__shadeup_structs = {};\n\t\t\t\treturn window.__shadeup_structs[name];\n\t\t\t}\n\n\t\t\tfunction __shadeup_register_struct(name, fields) {\n\t\t\t\tif (!window.__shadeup_structs) window.__shadeup_structs = {};\n\t\t\t\twindow.__shadeup_structs[name] = fields;\n\t\t\t}\n\n\t\t\twindow.addEventListener('message', async function (e) {\n\t\t\t\tvar mainWindow = e.source;\n\t\t\t\tvar result = '';\n\t\t\t\ttry {\n\t\t\t\t\tconst postMessage = (v) => mainWindow.postMessage(v, e.origin);\n\t\t\t\t\teval(e.data);\n\t\t\t\t\tresult = await main__shadeup_main();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t\tresult = 'eval() threw an exception.';\n\t\t\t\t}\n\t\t\t\tmainWindow.postMessage({ gid: LONG_GID, data: result }, e.origin);\n\t\t\t});\n\t\t</script>\n\t</head>\n</html>\n"
  },
  {
    "path": "lang/shadeup/library/buffer.ts",
    "content": "import { getValueSize } from '../engine/adapters/webgpu';\nimport {\n\tfloat4,\n\tfloat3,\n\tfloat,\n\tfloat2,\n\tbool,\n\tint,\n\tint2,\n\tint3,\n\tint4,\n\tuint,\n\tuint2,\n\tuint3,\n\tuint4,\n\tatomic\n} from '/std_math';\n\nexport class buffer_internal<T> {\n\t__opaque_buffer: true = true;\n\n\tstructArray: T[] | null = null;\n\tfloatArray: Float32Array | null = null;\n\tintArray: Int32Array | null = null;\n\tuintArray: Uint32Array | null = null;\n\tarrayBuffer: ArrayBuffer | null = null;\n\tvectorSize: int = 0;\n\ttypeName: string;\n\n\tplatformPayload: any = null;\n\tadapter: any = null;\n\n\tdirty: boolean = false;\n\tpendingWrites: number = 0;\n\tcpuReadDirty: boolean = false;\n\tcpuWriteDirty: boolean = false;\n\n\telementCount: int = 0;\n\telementBytes: int = 0;\n\tstructured: boolean = false;\n\n\tfastIndex: (index: int) => T;\n\tfastIndexAssign: (index: int, value: T) => void;\n\n\tdestroy() {\n\t\tthis.adapter.destroyBuffer(this);\n\t}\n\n\t[index: number]: T;\n\n\t__index(index: int | uint): T {\n\t\t// this.download();\n\t\t// return this.fastIndex(index);\n\t\treturn null as any;\n\t}\n\n\t__index_assign(index: int | uint, value: T): void {\n\t\t// this.download();\n\t\t// this.cpuWriteDirty = true;\n\t\t// this.fastIndexAssign(index, value);\n\t}\n\n\t__index_assign_op(op_fn: (a: T, b: T) => T, index: int | uint, value: T): void {\n\t\t// this.download();\n\t\t// this.cpuWriteDirty = true;\n\t\t// this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\n\t}\n\n\tlen() {\n\t\treturn this.elementCount;\n\t}\n\n\t/**\n\t * Returns the underlying cpu buffer as a typed array.\n\t *\n\t * > [!NOTE]\n\t * > This is considerably faster than using the raw index [] operator.\n\t *\n\t * > [!NOTE]\n\t * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\n\t *\n\t * ```shadeup\n\t * let buf = buffer<uint>();\n\t * let data = buf.getData();\n\t *\n\t * for (let i = 0; i < data.length; i += 4) {\n\t * \t// Do something with data[i]\n\t * }\n\t * ```\n\t */\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array | T[] {\n\t\tif (this.structured) {\n\t\t\treturn this.structArray!;\n\t\t} else {\n\t\t\treturn this.floatArray ?? this.intArray ?? this.uintArray ?? new Uint8Array(0);\n\t\t}\n\t}\n\n\twrite(other: buffer_internal<T>) {\n\t\tif (!this.adapter) return;\n\n\t\tthis.adapter.copyBufferToBuffer(other, this);\n\t}\n\n\twatchMutation: boolean = false;\n\n\t/** @shadeup=tag(async) @shadeup=noemit_gpu */\n\tasync download() {\n\t\tif (!this.adapter) return;\n\n\t\tif (this.pendingWrites > 0) {\n\t\t\t(window as any).flushAdapter();\n\t\t}\n\n\t\tif (this.cpuReadDirty) {\n\t\t\tthis.cpuReadDirty = false;\n\t\t\tawait this.adapter.downloadBuffer(this);\n\t\t}\n\t}\n\n\tdownloadAsync(): Promise<void> {\n\t\treturn this['download']();\n\t}\n\n\t/** @shadeup=noemit_gpu */\n\tupload(): void {\n\t\tif (!this.adapter) return;\n\n\t\tif (this.cpuWriteDirty) {\n\t\t\tthis.cpuWriteDirty = false;\n\t\t\tthis.adapter.uploadBuffer(this);\n\t\t}\n\t}\n\tsymbol: Symbol = Symbol();\n\n\tconstructor(size: int, typeName: string, structure: any) {\n\t\tthis.adapter = (window as any).shadeupGetGraphicsAdapter();\n\t\tthis.typeName = typeName;\n\t\tif (structure) {\n\t\t\tif (structure.name && !structure.name.startsWith('atomic')) {\n\t\t\t\tthis.typeName = structure.name;\n\t\t\t}\n\t\t}\n\t\tthis.elementCount = size;\n\t\tthis.elementBytes = 4;\n\t\tif (\n\t\t\ttypeName == 'float4' ||\n\t\t\ttypeName == 'float3' ||\n\t\t\ttypeName == 'float2' ||\n\t\t\ttypeName == 'float'\n\t\t) {\n\t\t\tthis.vectorSize = 1;\n\n\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\treturn this.floatArray![index] as T;\n\t\t\t};\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\n\t\t\t\tthis.floatArray![index] = value as float;\n\t\t\t};\n\n\t\t\tif (typeName == 'float4') {\n\t\t\t\tthis.vectorSize = 4;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn float4(\n\t\t\t\t\t\tthis.floatArray![index * 4],\n\t\t\t\t\t\tthis.floatArray![index * 4 + 1],\n\t\t\t\t\t\tthis.floatArray![index * 4 + 2],\n\t\t\t\t\t\tthis.floatArray![index * 4 + 3]\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float4) => {\n\t\t\t\t\tthis.floatArray![index * 4] = value[0];\n\t\t\t\t\tthis.floatArray![index * 4 + 1] = value[1];\n\t\t\t\t\tthis.floatArray![index * 4 + 2] = value[2];\n\t\t\t\t\tthis.floatArray![index * 4 + 3] = value[3];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (typeName == 'float3') {\n\t\t\t\tthis.vectorSize = 3;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn float3(\n\t\t\t\t\t\tthis.floatArray![index * 3],\n\t\t\t\t\t\tthis.floatArray![index * 3 + 1],\n\t\t\t\t\t\tthis.floatArray![index * 3 + 2]\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float3) => {\n\t\t\t\t\tthis.floatArray![index * 3] = value[0];\n\t\t\t\t\tthis.floatArray![index * 3 + 1] = value[1];\n\t\t\t\t\tthis.floatArray![index * 3 + 2] = value[2];\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (typeName == 'float2') {\n\t\t\t\tthis.vectorSize = 2;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn float2(this.floatArray![index * 2], this.floatArray![index * 2 + 1]) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: float2) => {\n\t\t\t\t\tthis.floatArray![index * 2] = value[0];\n\t\t\t\t\tthis.floatArray![index * 2 + 1] = value[1];\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.floatArray = new Float32Array(size * this.vectorSize);\n\t\t\tthis.arrayBuffer = this.floatArray.buffer;\n\t\t} else if (\n\t\t\ttypeName == 'int4' ||\n\t\t\ttypeName == 'int3' ||\n\t\t\ttypeName == 'int2' ||\n\t\t\ttypeName == 'int'\n\t\t) {\n\t\t\tthis.vectorSize = 1;\n\n\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\treturn this.intArray![index] as T;\n\t\t\t};\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\n\t\t\t\tthis.intArray![index] = value as int;\n\t\t\t};\n\n\t\t\tif (typeName == 'int4') {\n\t\t\t\tthis.vectorSize = 4;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn int4(\n\t\t\t\t\t\tthis.intArray![index * 4],\n\t\t\t\t\t\tthis.intArray![index * 4 + 1],\n\t\t\t\t\t\tthis.intArray![index * 4 + 2],\n\t\t\t\t\t\tthis.intArray![index * 4 + 3]\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int4) => {\n\t\t\t\t\tthis.intArray![index * 4] = value[0];\n\t\t\t\t\tthis.intArray![index * 4 + 1] = value[1];\n\t\t\t\t\tthis.intArray![index * 4 + 2] = value[2];\n\t\t\t\t\tthis.intArray![index * 4 + 3] = value[3];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (typeName == 'int3') {\n\t\t\t\tthis.vectorSize = 3;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn int3(\n\t\t\t\t\t\tthis.intArray![index * 3],\n\t\t\t\t\t\tthis.intArray![index * 3 + 1],\n\t\t\t\t\t\tthis.intArray![index * 3 + 2]\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int3) => {\n\t\t\t\t\tthis.intArray![index * 3] = value[0];\n\t\t\t\t\tthis.intArray![index * 3 + 1] = value[1];\n\t\t\t\t\tthis.intArray![index * 3 + 2] = value[2];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (typeName == 'int2') {\n\t\t\t\tthis.vectorSize = 2;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn int2(this.intArray![index * 2], this.intArray![index * 2 + 1]) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: int2) => {\n\t\t\t\t\tthis.intArray![index * 2] = value[0];\n\t\t\t\t\tthis.intArray![index * 2 + 1] = value[1];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.intArray = new Int32Array(size * this.vectorSize);\n\t\t\tthis.arrayBuffer = this.intArray.buffer;\n\t\t} else if (\n\t\t\ttypeName == 'uint4' ||\n\t\t\ttypeName == 'uint3' ||\n\t\t\ttypeName == 'uint2' ||\n\t\t\ttypeName == 'uint'\n\t\t) {\n\t\t\tthis.vectorSize = 1;\n\n\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\treturn this.uintArray![index] as T;\n\t\t\t};\n\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\n\t\t\t\tthis.uintArray![index] = value as uint;\n\t\t\t};\n\n\t\t\tif (typeName == 'uint4') {\n\t\t\t\tthis.vectorSize = 4;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn uint4(\n\t\t\t\t\t\tthis.uintArray![index * 4],\n\t\t\t\t\t\tthis.uintArray![index * 4 + 1],\n\t\t\t\t\t\tthis.uintArray![index * 4 + 2],\n\t\t\t\t\t\tthis.uintArray![index * 4 + 3]\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint4) => {\n\t\t\t\t\tthis.uintArray![index * 4] = value[0];\n\t\t\t\t\tthis.uintArray![index * 4 + 1] = value[1];\n\t\t\t\t\tthis.uintArray![index * 4 + 2] = value[2];\n\t\t\t\t\tthis.uintArray![index * 4 + 3] = value[3];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (typeName == 'uint3') {\n\t\t\t\tthis.vectorSize = 3;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn uint3(\n\t\t\t\t\t\tthis.uintArray![index * 3],\n\t\t\t\t\t\tthis.uintArray![index * 3 + 1],\n\t\t\t\t\t\tthis.uintArray![index * 3 + 2]\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint3) => {\n\t\t\t\t\tthis.uintArray![index * 3] = value[0];\n\t\t\t\t\tthis.uintArray![index * 3 + 1] = value[1];\n\t\t\t\t\tthis.uintArray![index * 3 + 2] = value[2];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (typeName == 'uint2') {\n\t\t\t\tthis.vectorSize = 2;\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn uint2(this.uintArray![index * 2], this.uintArray![index * 2 + 1]) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: uint2) => {\n\t\t\t\t\tthis.uintArray![index * 2] = value[0];\n\t\t\t\t\tthis.uintArray![index * 2 + 1] = value[1];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.uintArray = new Uint32Array(size * this.vectorSize);\n\t\t\tthis.arrayBuffer = this.uintArray.buffer;\n\t\t} else {\n\t\t\tthis.structured = true;\n\n\t\t\tif (typeName.startsWith('atomic<')) {\n\t\t\t\t// this.structArray = new Array<T>(size);\n\t\t\t\tthis.arrayBuffer = new ArrayBuffer(size * 4);\n\n\t\t\t\tthis.watchMutation = true;\n\t\t\t\tthis.vectorSize = 1;\n\t\t\t\tthis.elementBytes = 4;\n\t\t\t\tthis.elementCount = size;\n\t\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\t\t// this.structArray[i] = atomic(0) as T;\n\t\t\t\t}\n\t\t\t\tif (typeName == 'atomic<uint>') {\n\t\t\t\t\tthis.uintArray = new Uint32Array(this.arrayBuffer);\n\t\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\t\treturn atomic(this.uintArray![index]) as T;\n\t\t\t\t\t};\n\t\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\n\t\t\t\t\t\tthis.uintArray![index] = value.__value as any;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.intArray = new Int32Array(this.arrayBuffer);\n\t\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\t\treturn atomic(this.intArray![index]) as T;\n\t\t\t\t\t};\n\t\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\n\t\t\t\t\t\tthis.intArray![index] = value.__value as any;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet elementSize = this.adapter.getValueSize(structure);\n\t\t\t\tlet realSize = elementSize * size;\n\t\t\t\tthis.elementCount = size;\n\t\t\t\tthis.elementBytes = elementSize;\n\t\t\t\tthis.arrayBuffer = new ArrayBuffer(realSize);\n\n\t\t\t\tthis.fastIndex = (index: int) => {\n\t\t\t\t\treturn this.adapter.readStructuredBuffer(\n\t\t\t\t\t\tstructure,\n\t\t\t\t\t\tthis.arrayBuffer,\n\t\t\t\t\t\tindex * elementSize\n\t\t\t\t\t) as T;\n\t\t\t\t};\n\t\t\t\tthis.fastIndexAssign = (index: int, value: T) => {\n\t\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\t\tthis.adapter.writeStructuredBuffer(\n\t\t\t\t\t\tstructure,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tthis.arrayBuffer,\n\t\t\t\t\t\tindex * (elementSize / 4)\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t(this.__index as any) = (index: int): T => {\n\t\t\t// await this.download();\n\t\t\tif (this.watchMutation) {\n\t\t\t\tlet data = this.fastIndex(index);\n\t\t\t\t(data as any).$mutate = (to?: T) => {\n\t\t\t\t\tthis.cpuWriteDirty = true;\n\t\t\t\t\tif (to !== undefined) {\n\t\t\t\t\t\tif (this.intArray) {\n\t\t\t\t\t\t\tthis.intArray[index] = to as any;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.uintArray![index] = to as any;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn data;\n\t\t\t} else {\n\t\t\t\treturn this.fastIndex(index);\n\t\t\t}\n\t\t};\n\n\t\tthis.__index_assign = (index: int, value: T): void => {\n\t\t\t// await this.download();\n\t\t\tthis.cpuWriteDirty = true;\n\t\t\tthis.fastIndexAssign(index, value);\n\t\t};\n\n\t\tthis.__index_assign_op = (op_fn: (a: T, b: T) => T, index: int, value: T): void => {\n\t\t\t// await this.download();\n\t\t\tthis.cpuWriteDirty = true;\n\n\t\t\tthis.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\n\t\t};\n\t}\n}\n\nexport type buffer<T> = buffer_internal<T>;\n\n/**\n * Creates a new buffer.\n * ```shadeup\n * let buf = buffer<float>(100);\n *\n * ```\n */\nexport function buffer<T>(data: T[], typeName: string, structure?: object): buffer<T>;\nexport function buffer<T>(size: int, typeName: string, structure?: object): buffer<T>;\nexport function buffer<T>(e1: any, typeName: string, structure?: object): buffer<T> {\n\tif (typeof e1 === 'number') {\n\t\tlet size = e1;\n\t\tlet buf = new buffer_internal<T>(size, typeName, structure!);\n\t\treturn buf;\n\t} else {\n\t\tlet data = e1;\n\t\tlet buf = new buffer_internal<T>(data.length, typeName, structure!);\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tbuf.fastIndexAssign(i, data[i]);\n\t\t}\n\t\treturn buf;\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/library/color.ts",
    "content": "export namespace color {\n\texport const slate50 = [0.9725490196078431, 0.9803921568627451, 0.9882352941176471, 1];\n\texport const slate100 = [0.9450980392156862, 0.9607843137254902, 0.9764705882352941, 1];\n\texport const slate200 = [0.8862745098039215, 0.9098039215686274, 0.9411764705882353, 1];\n\texport const slate300 = [0.796078431372549, 0.8352941176470589, 0.8823529411764706, 1];\n\texport const slate400 = [0.5803921568627451, 0.6392156862745098, 0.7215686274509804, 1];\n\texport const slate500 = [0.39215686274509803, 0.4549019607843137, 0.5450980392156862, 1];\n\texport const slate600 = [0.2784313725490196, 0.3333333333333333, 0.4117647058823529, 1];\n\texport const slate700 = [0.2, 0.2549019607843137, 0.3333333333333333, 1];\n\texport const slate800 = [0.11764705882352941, 0.1607843137254902, 0.23137254901960785, 1];\n\texport const slate900 = [0.058823529411764705, 0.09019607843137255, 0.16470588235294117, 1];\n\texport const slate950 = [0.00784313725490196, 0.023529411764705882, 0.09019607843137255, 1];\n\texport const gray50 = [0.9764705882352941, 0.9803921568627451, 0.984313725490196, 1];\n\texport const gray100 = [0.9529411764705882, 0.9568627450980393, 0.9647058823529412, 1];\n\texport const gray200 = [0.8980392156862745, 0.9058823529411765, 0.9215686274509803, 1];\n\texport const gray300 = [0.8196078431372549, 0.8352941176470589, 0.8588235294117647, 1];\n\texport const gray400 = [0.611764705882353, 0.6392156862745098, 0.6862745098039216, 1];\n\texport const gray500 = [0.4196078431372549, 0.4470588235294118, 0.5019607843137255, 1];\n\texport const gray600 = [0.29411764705882354, 0.3333333333333333, 0.38823529411764707, 1];\n\texport const gray700 = [0.21568627450980393, 0.2549019607843137, 0.3176470588235294, 1];\n\texport const gray800 = [0.12156862745098039, 0.1607843137254902, 0.21568627450980393, 1];\n\texport const gray900 = [0.06666666666666667, 0.09411764705882353, 0.15294117647058825, 1];\n\texport const gray950 = [0.011764705882352941, 0.027450980392156862, 0.07058823529411765, 1];\n\texport const zinc50 = [0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1];\n\texport const zinc100 = [0.9568627450980393, 0.9568627450980393, 0.9607843137254902, 1];\n\texport const zinc200 = [0.8941176470588236, 0.8941176470588236, 0.9058823529411765, 1];\n\texport const zinc300 = [0.8313725490196079, 0.8313725490196079, 0.8470588235294118, 1];\n\texport const zinc400 = [0.6313725490196078, 0.6313725490196078, 0.6666666666666666, 1];\n\texport const zinc500 = [0.44313725490196076, 0.44313725490196076, 0.47843137254901963, 1];\n\texport const zinc600 = [0.3215686274509804, 0.3215686274509804, 0.3568627450980392, 1];\n\texport const zinc700 = [0.24705882352941178, 0.24705882352941178, 0.27450980392156865, 1];\n\texport const zinc800 = [0.15294117647058825, 0.15294117647058825, 0.16470588235294117, 1];\n\texport const zinc900 = [0.09411764705882353, 0.09411764705882353, 0.10588235294117647, 1];\n\texport const zinc950 = [0.03529411764705882, 0.03529411764705882, 0.043137254901960784, 1];\n\texport const neutral50 = [0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1];\n\texport const neutral100 = [0.9607843137254902, 0.9607843137254902, 0.9607843137254902, 1];\n\texport const neutral200 = [0.8980392156862745, 0.8980392156862745, 0.8980392156862745, 1];\n\texport const neutral300 = [0.8313725490196079, 0.8313725490196079, 0.8313725490196079, 1];\n\texport const neutral400 = [0.6392156862745098, 0.6392156862745098, 0.6392156862745098, 1];\n\texport const neutral500 = [0.45098039215686275, 0.45098039215686275, 0.45098039215686275, 1];\n\texport const neutral600 = [0.3215686274509804, 0.3215686274509804, 0.3215686274509804, 1];\n\texport const neutral700 = [0.25098039215686274, 0.25098039215686274, 0.25098039215686274, 1];\n\texport const neutral800 = [0.14901960784313725, 0.14901960784313725, 0.14901960784313725, 1];\n\texport const neutral900 = [0.09019607843137255, 0.09019607843137255, 0.09019607843137255, 1];\n\texport const neutral950 = [0.0392156862745098, 0.0392156862745098, 0.0392156862745098, 1];\n\texport const stone50 = [0.9803921568627451, 0.9803921568627451, 0.9764705882352941, 1];\n\texport const stone100 = [0.9607843137254902, 0.9607843137254902, 0.9568627450980393, 1];\n\texport const stone200 = [0.9058823529411765, 0.8980392156862745, 0.8941176470588236, 1];\n\texport const stone300 = [0.8392156862745098, 0.8274509803921568, 0.8196078431372549, 1];\n\texport const stone400 = [0.6588235294117647, 0.6352941176470588, 0.6196078431372549, 1];\n\texport const stone500 = [0.47058823529411764, 0.44313725490196076, 0.4235294117647059, 1];\n\texport const stone600 = [0.3411764705882353, 0.3254901960784314, 0.3058823529411765, 1];\n\texport const stone700 = [0.26666666666666666, 0.25098039215686274, 0.23529411764705882, 1];\n\texport const stone800 = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1];\n\texport const stone900 = [0.10980392156862745, 0.09803921568627451, 0.09019607843137255, 1];\n\texport const stone950 = [0.047058823529411764, 0.0392156862745098, 0.03529411764705882, 1];\n\texport const red50 = [0.996078431372549, 0.9490196078431372, 0.9490196078431372, 1];\n\texport const red100 = [0.996078431372549, 0.8862745098039215, 0.8862745098039215, 1];\n\texport const red200 = [0.996078431372549, 0.792156862745098, 0.792156862745098, 1];\n\texport const red300 = [0.9882352941176471, 0.6470588235294118, 0.6470588235294118, 1];\n\texport const red400 = [0.9725490196078431, 0.44313725490196076, 0.44313725490196076, 1];\n\texport const red500 = [0.9372549019607843, 0.26666666666666666, 0.26666666666666666, 1];\n\texport const red600 = [0.8627450980392157, 0.14901960784313725, 0.14901960784313725, 1];\n\texport const red700 = [0.7254901960784313, 0.10980392156862745, 0.10980392156862745, 1];\n\texport const red800 = [0.6, 0.10588235294117647, 0.10588235294117647, 1];\n\texport const red900 = [0.4980392156862745, 0.11372549019607843, 0.11372549019607843, 1];\n\texport const red950 = [0.27058823529411763, 0.0392156862745098, 0.0392156862745098, 1];\n\texport const orange50 = [1, 0.9686274509803922, 0.9294117647058824, 1];\n\texport const orange100 = [1, 0.9294117647058824, 0.8352941176470589, 1];\n\texport const orange200 = [0.996078431372549, 0.8431372549019608, 0.6666666666666666, 1];\n\texport const orange300 = [0.9921568627450981, 0.7294117647058823, 0.4549019607843137, 1];\n\texport const orange400 = [0.984313725490196, 0.5725490196078431, 0.23529411764705882, 1];\n\texport const orange500 = [0.9764705882352941, 0.45098039215686275, 0.08627450980392157, 1];\n\texport const orange600 = [0.9176470588235294, 0.34509803921568627, 0.047058823529411764, 1];\n\texport const orange700 = [0.7607843137254902, 0.2549019607843137, 0.047058823529411764, 1];\n\texport const orange800 = [0.6039215686274509, 0.20392156862745098, 0.07058823529411765, 1];\n\texport const orange900 = [0.48627450980392156, 0.17647058823529413, 0.07058823529411765, 1];\n\texport const orange950 = [0.2627450980392157, 0.0784313725490196, 0.027450980392156862, 1];\n\texport const amber50 = [1, 0.984313725490196, 0.9215686274509803, 1];\n\texport const amber100 = [0.996078431372549, 0.9529411764705882, 0.7803921568627451, 1];\n\texport const amber200 = [0.9921568627450981, 0.9019607843137255, 0.5411764705882353, 1];\n\texport const amber300 = [0.9882352941176471, 0.8274509803921568, 0.30196078431372547, 1];\n\texport const amber400 = [0.984313725490196, 0.7490196078431373, 0.1411764705882353, 1];\n\texport const amber500 = [0.9607843137254902, 0.6196078431372549, 0.043137254901960784, 1];\n\texport const amber600 = [0.8509803921568627, 0.4666666666666667, 0.023529411764705882, 1];\n\texport const amber700 = [0.7058823529411765, 0.3254901960784314, 0.03529411764705882, 1];\n\texport const amber800 = [0.5725490196078431, 0.25098039215686274, 0.054901960784313725, 1];\n\texport const amber900 = [0.47058823529411764, 0.20784313725490197, 0.058823529411764705, 1];\n\texport const amber950 = [0.27058823529411763, 0.10196078431372549, 0.011764705882352941, 1];\n\texport const yellow50 = [0.996078431372549, 0.9882352941176471, 0.9098039215686274, 1];\n\texport const yellow100 = [0.996078431372549, 0.9764705882352941, 0.7647058823529411, 1];\n\texport const yellow200 = [0.996078431372549, 0.9411764705882353, 0.5411764705882353, 1];\n\texport const yellow300 = [0.9921568627450981, 0.8784313725490196, 0.2784313725490196, 1];\n\texport const yellow400 = [0.9803921568627451, 0.8, 0.08235294117647059, 1];\n\texport const yellow500 = [0.9176470588235294, 0.7019607843137254, 0.03137254901960784, 1];\n\texport const yellow600 = [0.792156862745098, 0.5411764705882353, 0.01568627450980392, 1];\n\texport const yellow700 = [0.6313725490196078, 0.3843137254901961, 0.027450980392156862, 1];\n\texport const yellow800 = [0.5215686274509804, 0.30196078431372547, 0.054901960784313725, 1];\n\texport const yellow900 = [0.44313725490196076, 0.24705882352941178, 0.07058823529411765, 1];\n\texport const yellow950 = [0.25882352941176473, 0.12549019607843137, 0.023529411764705882, 1];\n\texport const lime50 = [0.9686274509803922, 0.996078431372549, 0.9058823529411765, 1];\n\texport const lime100 = [0.9254901960784314, 0.9882352941176471, 0.796078431372549, 1];\n\texport const lime200 = [0.8509803921568627, 0.9764705882352941, 0.615686274509804, 1];\n\texport const lime300 = [0.7450980392156863, 0.9490196078431372, 0.39215686274509803, 1];\n\texport const lime400 = [0.6392156862745098, 0.9019607843137255, 0.20784313725490197, 1];\n\texport const lime500 = [0.5176470588235295, 0.8, 0.08627450980392157, 1];\n\texport const lime600 = [0.396078431372549, 0.6392156862745098, 0.050980392156862744, 1];\n\texport const lime700 = [0.30196078431372547, 0.48627450980392156, 0.058823529411764705, 1];\n\texport const lime800 = [0.24705882352941178, 0.3843137254901961, 0.07058823529411765, 1];\n\texport const lime900 = [0.21176470588235294, 0.3254901960784314, 0.0784313725490196, 1];\n\texport const lime950 = [0.10196078431372549, 0.1803921568627451, 0.0196078431372549, 1];\n\texport const green50 = [0.9411764705882353, 0.9921568627450981, 0.9568627450980393, 1];\n\texport const green100 = [0.8627450980392157, 0.9882352941176471, 0.9058823529411765, 1];\n\texport const green200 = [0.7333333333333333, 0.9686274509803922, 0.8156862745098039, 1];\n\texport const green300 = [0.5254901960784314, 0.9372549019607843, 0.6745098039215687, 1];\n\texport const green400 = [0.2901960784313726, 0.8705882352941177, 0.5019607843137255, 1];\n\texport const green500 = [0.13333333333333333, 0.7725490196078432, 0.3686274509803922, 1];\n\texport const green600 = [0.08627450980392157, 0.6392156862745098, 0.2901960784313726, 1];\n\texport const green700 = [0.08235294117647059, 0.5019607843137255, 0.23921568627450981, 1];\n\texport const green800 = [0.08627450980392157, 0.396078431372549, 0.20392156862745098, 1];\n\texport const green900 = [0.0784313725490196, 0.3254901960784314, 0.17647058823529413, 1];\n\texport const green950 = [0.0196078431372549, 0.1803921568627451, 0.08627450980392157, 1];\n\texport const emerald50 = [0.9254901960784314, 0.9921568627450981, 0.9607843137254902, 1];\n\texport const emerald100 = [0.8196078431372549, 0.9803921568627451, 0.8980392156862745, 1];\n\texport const emerald200 = [0.6549019607843137, 0.9529411764705882, 0.8156862745098039, 1];\n\texport const emerald300 = [0.43137254901960786, 0.9058823529411765, 0.7176470588235294, 1];\n\texport const emerald400 = [0.20392156862745098, 0.8274509803921568, 0.6, 1];\n\texport const emerald500 = [0.06274509803921569, 0.7254901960784313, 0.5058823529411764, 1];\n\texport const emerald600 = [0.0196078431372549, 0.5882352941176471, 0.4117647058823529, 1];\n\texport const emerald700 = [0.01568627450980392, 0.47058823529411764, 0.3411764705882353, 1];\n\texport const emerald800 = [0.023529411764705882, 0.37254901960784315, 0.27450980392156865, 1];\n\texport const emerald900 = [0.023529411764705882, 0.3058823529411765, 0.23137254901960785, 1];\n\texport const emerald950 = [0.00784313725490196, 0.17254901960784313, 0.13333333333333333, 1];\n\texport const teal50 = [0.9411764705882353, 0.9921568627450981, 0.9803921568627451, 1];\n\texport const teal100 = [0.8, 0.984313725490196, 0.9450980392156862, 1];\n\texport const teal200 = [0.6, 0.9647058823529412, 0.8941176470588236, 1];\n\texport const teal300 = [0.3686274509803922, 0.9176470588235294, 0.8313725490196079, 1];\n\texport const teal400 = [0.17647058823529413, 0.8313725490196079, 0.7490196078431373, 1];\n\texport const teal500 = [0.0784313725490196, 0.7215686274509804, 0.6509803921568628, 1];\n\texport const teal600 = [0.050980392156862744, 0.5803921568627451, 0.5333333333333333, 1];\n\texport const teal700 = [0.058823529411764705, 0.4627450980392157, 0.43137254901960786, 1];\n\texport const teal800 = [0.06666666666666667, 0.3686274509803922, 0.34901960784313724, 1];\n\texport const teal900 = [0.07450980392156863, 0.3058823529411765, 0.2901960784313726, 1];\n\texport const teal950 = [0.01568627450980392, 0.1843137254901961, 0.1803921568627451, 1];\n\texport const cyan50 = [0.9254901960784314, 0.996078431372549, 1, 1];\n\texport const cyan100 = [0.8117647058823529, 0.9803921568627451, 0.996078431372549, 1];\n\texport const cyan200 = [0.6470588235294118, 0.9529411764705882, 0.9882352941176471, 1];\n\texport const cyan300 = [0.403921568627451, 0.9098039215686274, 0.9764705882352941, 1];\n\texport const cyan400 = [0.13333333333333333, 0.8274509803921568, 0.9333333333333333, 1];\n\texport const cyan500 = [0.023529411764705882, 0.7137254901960784, 0.8313725490196079, 1];\n\texport const cyan600 = [0.03137254901960784, 0.5686274509803921, 0.6980392156862745, 1];\n\texport const cyan700 = [0.054901960784313725, 0.4549019607843137, 0.5647058823529412, 1];\n\texport const cyan800 = [0.08235294117647059, 0.3686274509803922, 0.4588235294117647, 1];\n\texport const cyan900 = [0.08627450980392157, 0.3058823529411765, 0.38823529411764707, 1];\n\texport const cyan950 = [0.03137254901960784, 0.2, 0.26666666666666666, 1];\n\texport const sky50 = [0.9411764705882353, 0.9764705882352941, 1, 1];\n\texport const sky100 = [0.8784313725490196, 0.9490196078431372, 0.996078431372549, 1];\n\texport const sky200 = [0.7294117647058823, 0.9019607843137255, 0.9921568627450981, 1];\n\texport const sky300 = [0.49019607843137253, 0.8274509803921568, 0.9882352941176471, 1];\n\texport const sky400 = [0.2196078431372549, 0.7411764705882353, 0.9725490196078431, 1];\n\texport const sky500 = [0.054901960784313725, 0.6470588235294118, 0.9137254901960784, 1];\n\texport const sky600 = [0.00784313725490196, 0.5176470588235295, 0.7803921568627451, 1];\n\texport const sky700 = [0.011764705882352941, 0.4117647058823529, 0.6313725490196078, 1];\n\texport const sky800 = [0.027450980392156862, 0.34901960784313724, 0.5215686274509804, 1];\n\texport const sky900 = [0.047058823529411764, 0.2901960784313726, 0.43137254901960786, 1];\n\texport const sky950 = [0.03137254901960784, 0.1843137254901961, 0.28627450980392155, 1];\n\texport const blue50 = [0.9372549019607843, 0.9647058823529412, 1, 1];\n\texport const blue100 = [0.8588235294117647, 0.9176470588235294, 0.996078431372549, 1];\n\texport const blue200 = [0.7490196078431373, 0.8588235294117647, 0.996078431372549, 1];\n\texport const blue300 = [0.5764705882352941, 0.7725490196078432, 0.9921568627450981, 1];\n\texport const blue400 = [0.3764705882352941, 0.6470588235294118, 0.9803921568627451, 1];\n\texport const blue500 = [0.23137254901960785, 0.5098039215686274, 0.9647058823529412, 1];\n\texport const blue600 = [0.1450980392156863, 0.38823529411764707, 0.9215686274509803, 1];\n\texport const blue700 = [0.11372549019607843, 0.3058823529411765, 0.8470588235294118, 1];\n\texport const blue800 = [0.11764705882352941, 0.25098039215686274, 0.6862745098039216, 1];\n\texport const blue900 = [0.11764705882352941, 0.22745098039215686, 0.5411764705882353, 1];\n\texport const blue950 = [0.09019607843137255, 0.1450980392156863, 0.32941176470588235, 1];\n\texport const indigo50 = [0.9333333333333333, 0.9490196078431372, 1, 1];\n\texport const indigo100 = [0.8784313725490196, 0.9058823529411765, 1, 1];\n\texport const indigo200 = [0.7803921568627451, 0.8235294117647058, 0.996078431372549, 1];\n\texport const indigo300 = [0.6470588235294118, 0.7058823529411765, 0.9882352941176471, 1];\n\texport const indigo400 = [0.5058823529411764, 0.5490196078431373, 0.9725490196078431, 1];\n\texport const indigo500 = [0.38823529411764707, 0.4, 0.9450980392156862, 1];\n\texport const indigo600 = [0.30980392156862746, 0.27450980392156865, 0.8980392156862745, 1];\n\texport const indigo700 = [0.2627450980392157, 0.2196078431372549, 0.792156862745098, 1];\n\texport const indigo800 = [0.21568627450980393, 0.18823529411764706, 0.6392156862745098, 1];\n\texport const indigo900 = [0.19215686274509805, 0.1803921568627451, 0.5058823529411764, 1];\n\texport const indigo950 = [0.11764705882352941, 0.10588235294117647, 0.29411764705882354, 1];\n\texport const violet50 = [0.9607843137254902, 0.9529411764705882, 1, 1];\n\texport const violet100 = [0.9294117647058824, 0.9137254901960784, 0.996078431372549, 1];\n\texport const violet200 = [0.8666666666666667, 0.8392156862745098, 0.996078431372549, 1];\n\texport const violet300 = [0.7686274509803922, 0.7098039215686275, 0.9921568627450981, 1];\n\texport const violet400 = [0.6549019607843137, 0.5450980392156862, 0.9803921568627451, 1];\n\texport const violet500 = [0.5450980392156862, 0.3607843137254902, 0.9647058823529412, 1];\n\texport const violet600 = [0.48627450980392156, 0.22745098039215686, 0.9294117647058824, 1];\n\texport const violet700 = [0.42745098039215684, 0.1568627450980392, 0.8509803921568627, 1];\n\texport const violet800 = [0.3568627450980392, 0.12941176470588237, 0.7137254901960784, 1];\n\texport const violet900 = [0.2980392156862745, 0.11372549019607843, 0.5843137254901961, 1];\n\texport const violet950 = [0.1803921568627451, 0.06274509803921569, 0.396078431372549, 1];\n\texport const purple50 = [0.9803921568627451, 0.9607843137254902, 1, 1];\n\texport const purple100 = [0.9529411764705882, 0.9098039215686274, 1, 1];\n\texport const purple200 = [0.9137254901960784, 0.8352941176470589, 1, 1];\n\texport const purple300 = [0.8470588235294118, 0.7058823529411765, 0.996078431372549, 1];\n\texport const purple400 = [0.7529411764705882, 0.5176470588235295, 0.9882352941176471, 1];\n\texport const purple500 = [0.6588235294117647, 0.3333333333333333, 0.9686274509803922, 1];\n\texport const purple600 = [0.5764705882352941, 0.2, 0.9176470588235294, 1];\n\texport const purple700 = [0.49411764705882355, 0.13333333333333333, 0.807843137254902, 1];\n\texport const purple800 = [0.4196078431372549, 0.12941176470588237, 0.6588235294117647, 1];\n\texport const purple900 = [0.34509803921568627, 0.10980392156862745, 0.5294117647058824, 1];\n\texport const purple950 = [0.23137254901960785, 0.027450980392156862, 0.39215686274509803, 1];\n\texport const fuchsia50 = [0.9921568627450981, 0.9568627450980393, 1, 1];\n\texport const fuchsia100 = [0.9803921568627451, 0.9098039215686274, 1, 1];\n\texport const fuchsia200 = [0.9607843137254902, 0.8156862745098039, 0.996078431372549, 1];\n\texport const fuchsia300 = [0.9411764705882353, 0.6705882352941176, 0.9882352941176471, 1];\n\texport const fuchsia400 = [0.9098039215686274, 0.4745098039215686, 0.9764705882352941, 1];\n\texport const fuchsia500 = [0.8509803921568627, 0.27450980392156865, 0.9372549019607843, 1];\n\texport const fuchsia600 = [0.7529411764705882, 0.14901960784313725, 0.8274509803921568, 1];\n\texport const fuchsia700 = [0.6352941176470588, 0.10980392156862745, 0.6862745098039216, 1];\n\texport const fuchsia800 = [0.5254901960784314, 0.09803921568627451, 0.5607843137254902, 1];\n\texport const fuchsia900 = [0.4392156862745098, 0.10196078431372549, 0.4588235294117647, 1];\n\texport const fuchsia950 = [0.2901960784313726, 0.01568627450980392, 0.3058823529411765, 1];\n\texport const pink50 = [0.9921568627450981, 0.9490196078431372, 0.9725490196078431, 1];\n\texport const pink100 = [0.9882352941176471, 0.9058823529411765, 0.9529411764705882, 1];\n\texport const pink200 = [0.984313725490196, 0.8117647058823529, 0.9098039215686274, 1];\n\texport const pink300 = [0.9764705882352941, 0.6588235294117647, 0.8313725490196079, 1];\n\texport const pink400 = [0.9568627450980393, 0.4470588235294118, 0.7137254901960784, 1];\n\texport const pink500 = [0.9254901960784314, 0.2823529411764706, 0.6, 1];\n\texport const pink600 = [0.8588235294117647, 0.15294117647058825, 0.4666666666666667, 1];\n\texport const pink700 = [0.7450980392156863, 0.09411764705882353, 0.36470588235294116, 1];\n\texport const pink800 = [0.615686274509804, 0.09019607843137255, 0.30196078431372547, 1];\n\texport const pink900 = [0.5137254901960784, 0.09411764705882353, 0.2627450980392157, 1];\n\texport const pink950 = [0.3137254901960784, 0.027450980392156862, 0.1411764705882353, 1];\n\texport const rose50 = [1, 0.9450980392156862, 0.9490196078431372, 1];\n\texport const rose100 = [1, 0.8941176470588236, 0.9019607843137255, 1];\n\texport const rose200 = [0.996078431372549, 0.803921568627451, 0.8274509803921568, 1];\n\texport const rose300 = [0.9921568627450981, 0.6431372549019608, 0.6862745098039216, 1];\n\texport const rose400 = [0.984313725490196, 0.44313725490196076, 0.5215686274509804, 1];\n\texport const rose500 = [0.9568627450980393, 0.24705882352941178, 0.3686274509803922, 1];\n\texport const rose600 = [0.8823529411764706, 0.11372549019607843, 0.2823529411764706, 1];\n\texport const rose700 = [0.7450980392156863, 0.07058823529411765, 0.23529411764705882, 1];\n\texport const rose800 = [0.6235294117647059, 0.07058823529411765, 0.2235294117647059, 1];\n\texport const rose900 = [0.5333333333333333, 0.07450980392156863, 0.21568627450980393, 1];\n\texport const rose950 = [0.2980392156862745, 0.0196078431372549, 0.09803921568627451, 1];\n}\n"
  },
  {
    "path": "lang/shadeup/library/common.shadeup",
    "content": "\nimport buffer from \"/_std/buffer\";\nimport ui from \"/_std/ui\";\nimport texture2d, texture3d from \"/_std/texture\";\n\n/**\n* Converts a position in screenSpace to a position in 2d clipSpace. e.g. (0, screenSize.x) -> (-1, 1)\n*/\npub fn pixelToClip(pixelPosition: float2) -> float2 {\n    let zeroToOne = pixelPosition / env.screenSize;\n    let zeroToTwo = zeroToOne * 2.0;\n    let clipSpace = zeroToTwo - 1.0.xy;\n    return (clipSpace.x, clipSpace.y * -1.0);\n}\n\n/**\n* Value of PI to 35 decimal places.\n*/\nconst PI = 3.14159265358979323846264338327950288;\n\nexport {\n    PI,\n    buffer,\n    texture2d,\n    texture3d,\n    ui\n};\n\n/**\n* Quaternion helpers\n*/\npub struct quat {}\n\nimpl quat {\n    /**\n    * Creates a quaternion from an angle and axis.\n    */\n\tpub fn fromAngleAxis(angle: float, axis: float3) -> float4 {\n\t\treturn float4(axis * sin(angle * 0.5), cos(angle * 0.5));\n\t}\n\n    /**\n    * Multiplies two quaternions and returns the result.\n    */\n\tpub fn mul(a: float4, b: float4) -> float4 {\n\t\treturn float4(\n            b.xyz * a.w + a.xyz * b.w + cross(a.xyz, b.xyz),\n            a.w * b.w - dot(a.xyz, b.xyz)\n        );\n\t}\n\n    /**\n    * Rotates a vector by a quaternion and returns the rotated vector.\n    */\n    pub fn rotate(quaternion: float4, vector: float3) -> float3 {\n        let q = quat::mul(quat::mul(quaternion, float4(vector, 0)), quat::conjugate(quaternion));\n        return q.xyz;\n    }\n\n    /**\n    * Returns the conjugate of the input quaternion.\n    *\n    * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\n    */\n    pub fn conjugate(quaternion: float4) -> float4 {\n        return float4(-quaternion.xyz, quaternion.w);\n    }\n\n    /**\n    * Returns the inverse of the input quaternion.\n    */\n    pub fn inverse(quaternion: float4) -> float4 {\n        return quat::conjugate(quaternion) / dot(quaternion, quaternion);\n    }\n\n    /**\n    * Generates a quaternion that rotates from one direction to another via the shortest path.\n    */\n    pub fn fromToRotation(from: float3, to: float3) -> float4 {\n        let q = 0.0.xyzw;\n        let d = dot(from, to);\n        if (d < -0.999999)\n        {\n            let right = float3(1, 0, 0);\n            let up = float3(0, 1, 0);\n            let tmp = cross(right, from);\n            if (length(tmp) < 0.000001)\n            {\n                tmp = cross(up, from);\n            }\n            tmp = normalize(tmp);\n            q = quat::fromAngleAxis(PI, tmp);\n        } else if (d > 0.999999) {\n            q = float4(0, 0, 0, 1);\n        } else {\n            q = float4(cross(from, to), 1 + d);\n            q = normalize(q);\n        }\n        return q;\n    }\n\n    \n    pub fn diff(a: float4, b: float4) -> float {\n        return a * quat::inverse(b);\n    }\n\n\n    /**\n    * Generates lookAt quaternion.\n    */\n    pub fn lookAt(forward: float3, up: float3): float4 {\n        let right = normalize(cross(forward, up));\n        up = normalize(cross(forward, right));\n\n        let m00 = right.x;\n        let m01 = right.y;\n        let m02 = right.z;\n        let m10 = up.x;\n        let m11 = up.y;\n        let m12 = up.z;\n        let m20 = forward.x;\n        let m21 = forward.y;\n        let m22 = forward.z;\n\n        let num8 = (m00 + m11) + m22;\n        let q = float4(0, 0, 0, 1);\n        if (num8 > 0.0)\n        {\n            let num = sqrt(num8 + 1.0);\n            let w = num * 0.5;\n            num = 0.5 / num;\n            let x = (m12 - m21) * num;\n            let y = (m20 - m02) * num;\n            let z = (m01 - m10) * num;\n            return float4(x, y, z, w);\n        }\n\n        if ((m00 >= m11) && (m00 >= m22))\n        {\n            let num7 = sqrt(((1.0 + m00) - m11) - m22);\n            let num4 = 0.5 / num7;\n            let x = 0.5 * num7;\n            let y = (m01 + m10) * num4;\n            let z = (m02 + m20) * num4;\n            let w = (m12 - m21) * num4;\n            return float4(x, y, z, w);\n        }\n\n        if (m11 > m22)\n        {\n            let num6 = sqrt(((1.0 + m11) - m00) - m22);\n            let num3 = 0.5 / num6;\n            let x = (m10 + m01) * num3;\n            let y = 0.5 * num6;\n            let z = (m21 + m12) * num3;\n            let w = (m20 - m02) * num3;\n            return float4(x, y, z, w);\n        }\n\n        let num5 = sqrt(((1.0 + m22) - m00) - m11);\n        let num2 = 0.5 / num5;\n        let x = (m20 + m02) * num2;\n        let y = (m21 + m12) * num2;\n        let z = 0.5 * num5;\n        let w = (m01 - m10) * num2;\n        return float4(x, y, z, w);\n    }\n\n    /**\n    * Smooth interpolation between two quaternions.\n    */\n    pub fn slerp(a: float4, b: float4, t: float) -> float4 {\n        \n        if (length(a) == 0.0)\n        {\n            if (length(b) == 0.0)\n            {\n                return float4(0, 0, 0, 1);\n            }\n            return b;\n        } else if (length(b) == 0.0) {\n            return a;\n        }\n\n        let cosHalfAngle = a.w * b.w + dot(a.xyz, b.xyz);\n\n        if (cosHalfAngle >= 1.0 || cosHalfAngle <= -1.0)\n        {\n            return a;\n        } else if (cosHalfAngle < 0.0) {\n            b *= -1.0;\n            cosHalfAngle = -cosHalfAngle;\n        }\n\n        let blendA = 0.0;\n        let blendB = 0.0;\n        if (cosHalfAngle < 0.99)\n        {\n            let halfAngle = acos(cosHalfAngle);\n            let sinHalfAngle = sin(halfAngle);\n            let oneOverSinHalfAngle = 1.0 / sinHalfAngle;\n            blendA = sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\n            blendB = sin(halfAngle * t) * oneOverSinHalfAngle;\n        }\n        else\n        {\n            blendA = 1.0 - t;\n            blendB = t;\n        }\n\n        let result = float4(blendA * a.xyz + blendB * b.xyz, blendA * a.w + blendB * b.w);\n        if (length(result) > 0.0)\n        {\n            return normalize(result);\n        }\n        return float4(0, 0, 0, 1);\n    }\n\n    /**\n    * Converts quaternion to matrix.\n    */\n    pub fn toMatrix(quaternion: float4) {\n        let x = quaternion.x;\n        let y = quaternion.y;\n        let z = quaternion.z;\n        let w = quaternion.w;\n        let x2 = x + x;\n        let y2 = y + y;\n        let z2 = z + z;\n        let xx = x * x2;\n        let xy = x * y2;\n        let xz = x * z2;\n        let yy = y * y2;\n        let yz = y * z2;\n        let zz = z * z2;\n        let wx = w * x2;\n        let wy = w * y2;\n        let wz = w * z2;\n\n\n        let m = float4x4(\n            1.0 - (yy + zz), xy + wz,         xz - wy,         0,\n            xy - wz,         1.0 - (xx + zz), yz + wx,         0,\n            xz + wy,         yz - wx,         1.0 - (xx + yy), 0,\n            0,               0,               0,               1.0\n        );\n\n        return m;\n    }\n\n    pub fn fromEulerAngles(angles: float3) {\n        let cr = cos(angles.x * 0.5);\n        let sr = sin(angles.x * 0.5);\n        let cp = cos(angles.y * 0.5);\n        let sp = sin(angles.y * 0.5);\n        let cy = cos(angles.z * 0.5);\n        let sy = sin(angles.z * 0.5);\n\n        return float4(\n            sr * cp * cy - cr * sp * sy,\n            cr * sp * cy + sr * cp * sy,\n            cr * cp * sy - sr * sp * cy,\n            cr * cp * cy + sr * sp * sy\n        )\n    }\n}\n\nwindow.shadeupQuat = quat;\n\n\npub struct Camera2d {\n    pub position: float2 = float2(0, 0);\n    pub zoom: float = 1;\n}\n\nimpl Camera2d {\n    pub fn transform(self, position: float2) -> float2 {\n        return (position - self.position) * self.zoom;\n    }\n\n    /**\n    * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\n    */\n    pub fn fit(self, size: float2) {\n        let zoom = 1/min(env.screenSize.x / size.x, env.screenSize.y / size.y);\n        let position = (env.screenSize - size * (1/zoom)) / 2;\n        self.position = position;\n        self.zoom = zoom;\n    }\n}\n\npub struct Camera {\n    pub position: float3 = float3(0, 0, 0);\n\tpub rotation: float4 = float4(1, 0, 0, 0);\n    pub width: float = 1920;\n    pub height: float = 1080;\n\tpub fov: float = 90;\n\tpub near: float = 1;\n\tpub far: float = 100000;\n}\n\nimpl Camera {\n    pub fn getRay(self, screen: float2) {\n        let aspect = self.width / self.height;\n        let x = screen.x;\n        let y = screen.y;\n        let Px = (2 * ((x + 0.5) / self.width) - 1) * tan(self.fov / 2 * PI / 180) * aspect;\n        let Py = (1 - 2 * ((y + 0.5) / self.height)) * tan(self.fov / 2 * PI / 180);\n        \n        return quat::rotate(self.rotation, normalize((Px, Py, -1)));\n    }\n\n    pub fn getTransformToViewMatrix(self, position: float3, scale: float3, rotation: float4) {\n        let rotationMatrix = quat::toMatrix(rotation);\n        let translationMatrix = float4x4(\n            scale.x, 0, 0, 0,\n            0, scale.y, 0, 0,\n            0, 0, scale.z, 0,\n            position.x, position.y, position.z, 1\n        );\n        return self.getPerspectiveMatrix() * self.getWorldToViewMatrix() * translationMatrix * rotationMatrix;\n    }\n\n    pub fn getCombinedMatrix(self) -> float4x4 {\n        return self.getPerspectiveMatrix() * self.getWorldToViewMatrix();\n    }\n\n    pub fn getCombinedMatrixReverseZ(self) -> float4x4 {\n        return self.getPerspectiveMatrixReverseZ() * self.getWorldToViewMatrix();\n    }\n\n    pub fn getWorldToViewMatrix(self) -> float4x4 {\n        let rotationMatrix = quat::toMatrix(self.rotation);\n        let translationMatrix = float4x4(\n            1, 0, 0, 0,\n            0, 1, 0, 0,\n            0, 0, 1, 0,\n            self.position.x, self.position.y, self.position.z, 1\n        );\n        return inverse(translationMatrix * rotationMatrix);\n    }\n\n    pub fn getPerspectiveMatrixReverseZ(self) -> float4x4 {\n        return matrix::perspectiveReverseZ(self.fov, self.width / self.height, self.near);\n    }\n\n    pub fn getPerspectiveMatrix(self) -> float4x4 {\n        return matrix::perspective(self.fov, self.width / self.height, self.near, self.far);\n        // // let matrix = float4x4();\n        // let far = self.far;\n        // let near = self.near;\n        // let aspect = self.width / self.height;\n        // let fovRad = radians(self.fov);\n        // let tanFov = tan( fovRad * 0.5 );\n        // // matrix[0][0] = ;\n        // // matrix[1][1] = 1.0 / tanFov;\n        // // matrix[2][2] = -((far + near)/(far - near));\n        // // matrix[3][2] = -((2*(near*far))/(far - near));\n        // // matrix[2][3] = -1;\n        // // matrix[3][3] = 0;\n\n        // let matrix = float4x4(\n        //     1.0 / (tanFov * aspect), 0, 0, 0,\n        //     0, 1.0 / tanFov, 0, 0,\n        //     0, 0, -((far + near)/(far - near)), -1,\n        //     0, 0, -((2*(near*far))/(far - near)), 0\n        // );\n\n        // return matrix;\n    }\n\n    pub fn getOrthographicMatrix(self) -> float4x4 {\n        let matrix = float4x4();\n        let far = self.far;\n        let near = self.near;\n\n        let w = 1.0 / self.width;\n        let h = 1.0 / self.height;\n\n        matrix[0][0] = w;\n        matrix[1][1] = h;\n        matrix[2][2] = -(2.0/(far - near));\n        matrix[2][3] = ((far + near)/(far-near));\n        //matrix[2][2] = -((far + near)/(far - near));\n        //matrix[3][2] = -((2*(near*far))/(far - near));\n        matrix[3][3] = 1.0;\n\n        return matrix;\n    }\n}\n\n\nwindow._makeCamera = Camera;\nwindow._makeCamera2d = Camera2d;\n\nfn easeA(aA1: float, aA2: float) -> float {\n    return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\n\nfn easeB(aA1: float, aA2: float) -> float {\n    return 3.0 * aA2 - 6.0 * aA1;\n}\n\nfn easeC(aA1: float) -> float {\n    return 3.0 * aA1;\n}\n\nfn calcBezier(aT: float, aA1: float, aA2: float) -> float {\n    return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT;\n}\n\nfn getSlope(aT: float, aA1: float, aA2: float) -> float {\n    return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1);\n}\n\n// fn getTForX(aX: float, aA1: float, aA2: float) -> float {\n//     let aGuessT = aX;\n//     for (let i = 0; i <= 10; i++) {\n//         let currentSlope = bezSlope(aGuessT, aA1, aA2);\n//         if (currentSlope == 0.0) {\n//             return aGuessT;\n//         }\n//         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\n//         aGuessT -= currentX / currentSlope;\n//     }\n//     return aGuessT;\n// }\n\n\nconst NEWTON_ITERATIONS =          4;\nconst NEWTON_MIN_SLOPE =           0.02;\nconst SUBDIVISION_PRECISION =      0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\nconst kSplineTableSize =           11;\n\nconst kSampleStepSize =\n                                        1.0 / float(kSplineTableSize - 1);\n\n\nfn getTForX(aX: float, mX1: float, mX2: float) {\n  let mSampleValues: float[11] = array<float>(11, 0);\n  for (let i = 0; i < kSplineTableSize; i++) {\n    mSampleValues[i] = calcBezier(float(i) * kSampleStepSize, mX1, mX2);\n  }\n\n  // Find interval where t lies\n  let intervalStart = 0.0;\n  let currentSample = 1;\n  let lastSample = kSplineTableSize - 1;\n  \n  for (let dummy = 0; currentSample != lastSample && mSampleValues[currentSample] <= aX; currentSample++) {\n    intervalStart += kSampleStepSize;\n  }\n  currentSample--; // t now lies between *currentSample and *currentSample+1\n\n  // Interpolate to provide an initial guess for t\n  let csamp = mSampleValues[currentSample];\n  let dst = (aX - csamp) /\n                (mSampleValues[currentSample + 1] - csamp);\n  let guessForT = intervalStart + dst * kSampleStepSize;\n\n  // Check the slope to see what strategy to use. If the slope is too small\n  // Newton-Raphson iteration won't converge on a root so we use bisection\n  // instead.\n  let initialSlope = getSlope(guessForT, mX1, mX2);\n  if (initialSlope >= NEWTON_MIN_SLOPE) {\n    return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n  } else if (initialSlope == 0.0) {\n    return guessForT;\n  } else {\n    return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n  }\n}\n\nfn newtonRaphsonIterate(aX: float, aGuessT: float, mX1: float, mX2: float) {\n  // Refine guess with Newton-Raphson iteration\n  for (let i = 0; i < NEWTON_ITERATIONS; i++) {\n    // We're trying to find where f(t) = aX,\n    // so we're actually looking for a root for: CalcBezier(t) - aX\n    let currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n    let currentSlope = getSlope(aGuessT, mX1, mX2);\n\n    if (currentSlope == 0.0)\n      return aGuessT;\n\n    aGuessT -= currentX / currentSlope;\n  }\n\n  return aGuessT;\n}\n\nfn binarySubdivide(aX: float, aA: float, aB: float) {\n  let currentX = 0.0;\n  let currentT = 0.0;\n  let i = 0;\n\n  while (true) {\n    i++;\n    if (abs(currentX) > SUBDIVISION_PRECISION && i < SUBDIVISION_MAX_ITERATIONS) {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = CalcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n        aB = currentT;\n        } else {\n        aA = currentT;\n        }\n    }else{\n        break;\n    }\n  }\n\n  return currentT;\n}\n\npub struct bezier {};\n\nimpl bezier {\n    pub fn cubic2(a: float2, b: float2, c: float2, d: float2, t: float) -> float2 {\n        return (1.0 - t)**3 * a + 3.0 * (1.0 - t)**2 * t * b + 3.0 * (1.0 - t) * t**2 * c + t**3 * d;\n    }\n\n    pub fn cubic3(a: float3, b: float3, c: float3, d: float3, t: float) -> float3 {\n        return (1.0 - t)**3 * a + 3.0 * (1.0 - t)**2 * t * b + 3.0 * (1.0 - t) * t**2 * c + t**3 * d;\n    }\n\n    pub fn quadratic2(a: float2, b: float2, c: float2, t: float) -> float2 {\n        return (1.0 - t)**2 * a + 2.0 * (1.0 - t) * t * b + t**2 * c;\n    }\n\n    pub fn quadratic3(a: float3, b: float3, c: float3, t: float) -> float3 {\n        return (1.0 - t)**2 * a + 2.0 * (1.0 - t) * t * b + t**2 * c;\n    }\n\n    /**\n    * 3d triangle patch evaulation with barycentric coordinates.\n    */\n    pub fn patch(a: float3, ab: float3, b: float3, bc: float3, c: float3, ca: float3, barycentricT: float3) {\n      return 1.f * c * (s * s) +\n        2.f * bc * s * t +\n        2.f * ca * s * u +\n        1.f * b * (t * t) +\n        2.f * ab * t * u +\n        1.f * a * (u * u);\n    }\n\n    \n\n    pub fn easing(controlA: float2, controlB: float2, t: float) -> float {\n        return calcBezier(getTForX(t, controlA.x, controlB.x), controlA.y, controlB.y);\n    }\n}\n\n/**\n* Provides space related utilities like z-order curves and quadtrees.\n*/\npub struct spatial {};\n\nimpl spatial {\n    pub fn cantorPair(v: int2) -> int {\n        return ((v.x + v.y) * (v.x + v.y + 1)) / 2 + v.y;\n    }\n\n    pub fn cantorUnpair(v: int) -> int2 {\n        let w = floor((sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\n        let t = (w * w + w) / 2.0;\n        let y = v - t;\n        let x = w - y;\n        return int2(x, y);\n    }\n\n    pub fn hilbertRotate(n: int, b: int2, r: int2) -> int2 {\n        let x = b.x;\n        let y = b.y;\n        if (r.y == 0) {\n            if (r.x == 1) {\n                x = n-1 - x;\n                y = n-1 - y;\n            }\n\n            let t = x;\n            x = y;\n            y = t;\n        }\n\n        return int2(x, y);\n    }\n\n    pub fn hilbertUncurve(n: int, v: int2) -> int {\n        let x = v.x;\n        let y = v.y;\n        let rx: int = 0;\n        let ry: int = 0;\n        let s: int = 0;\n        let d: int = 0;\n        for (s=n/2; s>0; s/=2) {\n            rx = ((x & s) > 0) ? 1 : 0;\n            ry = ((y & s) > 0) ? 1 : 0;\n            d += s * s * ((3 * rx) ^ ry);\n            let o = spatial::hilbertRotate(n, (x, y), (rx, ry));\n            x = o.x;\n            y = o.y;\n        }\n        return d;\n    }\n\n    pub fn hilbertCurve(n: int, v: int) -> int2 {\n        let rx: int = 0;\n        let ry: int = 0;\n        let t = v;\n        let x = 0;\n        let y = 0;\n        for (let s: int = 1; s < n; s *= 2) {\n            rx = 1 & (t/2);\n            ry = 1 & (t ^ rx);\n            let o = spatial::hilbertRotate(s, (x, y), (rx, ry));\n            x = o.x;\n            y = o.y;\n            x += s * rx;\n            y += s * ry;\n            t /= 4;\n        }\n\n        return int2(x, y);\n    }\n\n    pub fn mortonDecode(p: uint) -> uint2 {\n        return uint2(reverseMortonCode2(p), reverseMortonCode2(p >> 1u));\n    }\n\n    pub fn mortonEncode(p: uint2) -> uint {\n        return uint(mortonCode2(p.x) | (mortonCode2(p.y) << 1u));\n    }\n\n}\n\npub fn mortonCode2(x: uint) -> uint {\n\tx = x & 0x0000ffffu;\n\tx = (x ^ (x << 8)) & 0x00ff00ffu;\n\tx = (x ^ (x << 4)) & 0x0f0f0f0fu;\n\tx = (x ^ (x << 2)) & 0x33333333u;\n\tx = (x ^ (x << 1)) & 0x55555555u;\n\treturn x;\n}\n\npub fn randColor(seed: float) -> float4 {\n    return float4(rand2((seed,5)), rand2((seed, 1)), rand2((seed, 4)), 1);\n}\n\npub fn randColor2(seed: float2) -> float4 {\n    return float4(rand3((seed,5)), rand3((seed, 1)), rand3((seed, 4)), 1);\n}\n\npub fn reverseMortonCode2(x: uint) -> uint {\n    x = x & 0x55555555u;\n    x = (x ^ (x >> 1)) & 0x33333333u;\n    x = (x ^ (x >> 2)) & 0x0f0f0f0fu;\n    x = (x ^ (x >> 4)) & 0x00ff00ffu;\n    x = (x ^ (x >> 8)) & 0x0000ffffu;\n    return x;\n}\n\npub struct noise {};\n\n\nconst PERLIN_YWRAPB = 4;\nconst PERLIN_YWRAP = 1 << PERLIN_YWRAPB;\nconst PERLIN_ZWRAPB = 8;\nconst PERLIN_ZWRAP = 1 << PERLIN_ZWRAPB;\nconst PERLIN_SIZE = 4095;\n\nlet perlin_octaves = 4; // default to medium smooth\nlet perlin_amp_falloff = 0.5; // 50% reduction/octave\n\n\nfn scaled_cosine(i: float) -> float {\n    return 0.5 * (1.0 - cos(i * PI));\n}\n\nlet perlin = buffer<float>(PERLIN_SIZE + 1);\nfor (let i = 0; i < PERLIN_SIZE + 1; i++) {\n    perlin[i] = rand(i);\n}\n\n//\t<https://www.shadertoy.com/view/4dS3Wd>\n//\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\n//\nfn hash(n: float) -> float { return frac(sin(n) * 1e4); }\nfn hash2(p: float2) -> float { return frac(1e4 * sin(17.0 * p.x + p.y * 0.1) * (0.1 + abs(sin(p.y * 13.0 + p.x)))); }\nfn hash3(p: float3) -> float { let h = dot(p, float3(127.1, 311.7, 74.7)); return frac(sin(h) * 43758.5453123); }\n\n\n\nimpl noise {\n    pub fn gaussian3(v: float3) -> float {\n        let p = v;\n    \tlet a = floor(p);\n\t    let d = p - a;\n    \td = d * d * (3.0 - 2.0 * d);\n\n    \tlet b = a.xxyy + float4(0.0, 1.0, 0.0, 1.0);\n    \tlet k1 = perm(b.xyxy);\n    \tlet k2 = perm(k1.xyxy + b.zzww);\n\n    \tlet c = k2 + a.zzzz;\n    \tlet k3 = perm(c);\n    \tlet k4 = perm(c + 1.0);\n\n    \tlet o1 = frac(k3 * (1.0 / 41.0));\n    \tlet o2 = frac(k4 * (1.0 / 41.0));\n\n    \tlet o3 = o2 * d.z + o1 * (1.0 - d.z);\n    \tlet o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);\n\n    \treturn o4.y * d.y + o4.x * (1.0 - d.y);\n    }\n    \n    pub fn gaussian2(v: float2) -> float {\n        return noise::gaussian3((v, 0));\n    }\n\n    pub fn noise1(x: float) {\n        let i = floor(x);\n        let f = frac(x);\n        let u = f * f * (3.0 - 2.0 * f);\n        return lerp(hash(i), hash(i + 1.0), u);\n    }\n\n    pub fn noise2(x: float2) -> float {\n        let i = floor(x);\n        let f = frac(x);\n\n        // Four corners in 2D of a tile\n        let a = hash2(i);\n        let b = hash2(i + float2(1.0, 0.0));\n        let c = hash2(i + float2(0.0, 1.0));\n        let d = hash2(i + float2(1.0, 1.0));\n\n        // Simple 2D lerp using smoothstep envelope between the values.\n        // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\n        //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\n        //\t\t\tsmoothstep(0.0, 1.0, f.y)));\n\n        // Same code, with the clamps in smoothstep and common subexpressions\n        // optimized away.\n        let u = f * f * (3.0 - 2.0 * f);\n        return lerp(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n    }\n\n    pub fn fmb1(x: float) -> float {\n        let v = 0.0;\n        let a = 0.5;\n        let shift = float(100);\n        for (let i = 0; i < 5; i++) {\n            v += a * noise::noise1(x);\n            x = x * 2.0 + shift;\n            a *= 0.5;\n        }\n        return v;\n    }\n\n    pub fn fbm2(x: float2) -> float {\n        let v = 0.0;\n        let a = 0.5;\n        let shift = float2(100.xy);\n        // Rotate to reduce axial bias\n        let rot = float2x2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50));\n        for (let i = 0; i < 5; i++) {\n            v += a * noise::noise2(x);\n            x = rot * x * 2.0 + shift;\n            a *= 0.5;\n        }\n        return v;\n    }\n\n    pub fn fbm3(x: float3) -> float {\n        let v = 0.0;\n        let a = 0.5;\n        let shift = float3(100.xyz);\n        for (let i = 0; i < 5; i++) {\n            v += a * noise::noise3(x);\n            x = x * 2.0 + shift;\n            a *= 0.5;\n        }\n        return v;\n    }\n\n    pub fn noise3(x: float3) -> float {\n        const step = float3(110, 241, 171);\n\n        let i = floor(x);\n        let f = frac(x);\n    \n        // For performance, compute the base input to a 1D hash from the integer part of the argument and the \n        // incremental change to the 1D based on the 3D -> 1D wrapping\n        let n = dot(i, step);\n\n        let u = f * f * (3.0 - 2.0 * f);\n        return lerp(lerp(lerp( hash(n + dot(step, float3(0, 0, 0))), hash(n + dot(step, float3(1, 0, 0))), u.x),\n                lerp( hash(n + dot(step, float3(0, 1, 0))), hash(n + dot(step, float3(1, 1, 0))), u.x), u.y),\n                lerp(lerp( hash(n + dot(step, float3(0, 0, 1))), hash(n + dot(step, float3(1, 0, 1))), u.x),\n                lerp( hash(n + dot(step, float3(0, 1, 1))), hash(n + dot(step, float3(1, 1, 1))), u.x), u.y), u.z);\n    }\n\n    pub fn simplex2(v: float2) -> float {\n        let C = float4(0.211324865405187,\n                            0.366025403784439,\n                            -0.577350269189626,\n                            0.024390243902439);\n\n        let i  = floor(v + dot(v, C.yy));\n        let x0 = v -   i + dot(i, C.xx);\n\n        let xv = step(x0.y, x0.x);\n        \n        let i1 = float2(xv, 1.0 - xv);\n\n        let x1 = x0 + C.xx - i1;\n        let x2 = x0 + C.zz;\n\n        \n        i = mod289_2(i);\n        let p =\n        permute(\n            permute(float3(0.0, i1.y, 1.0) + i.y)\n                        + float3(0.0, i1.x, 1.0) + i.x);\n\n        let m = max(0.5.xyz - float3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), 0.0);\n        m = m * m;\n        m = m * m;\n\n        let x = 2.0 * frac(p * C.www) - 1.0;\n        let h = abs(x) - 0.5;\n        let ox = floor(x + 0.5);\n        let a0 = x - ox;\n\n        // Normalise gradients implicitly by scaling m\n        m *= taylorInvSqrt(a0 * a0 + h * h);\n\n        // Compute final noise value at P\n        let g = float3(\n            a0.x * x0.x + h.x * x0.y,\n            a0.y * x1.x + h.y * x1.y,\n            a0.z * x2.x + h.z * x2.y\n        );\n        return 130.0 * dot(m, g);\n    }\n    \n    pub fn perlin2(v: float2) -> float {\n    let x = v.x;\n    let y = v.y;\n    let z = 0.0;\n\n        if (x < 0) {\n            x = -x;\n        }\n        if (y < 0) {\n            y = -y;\n        }\n        if (z < 0) {\n            z = -z;\n        }\n\n        let xi = int(floor(x)),\n            yi = int(floor(y)),\n            zi = int(floor(z));\n        let xf = x - xi;\n        let yf = y - yi;\n        let zf = z - zi;\n        let rxf = 0.0, ryf = 0.0;\n\n        let r = 0.0;\n        let ampl = 0.5;\n\n        let n1= 0.0, n2 = 0.0, n3 = 0.0;\n\n        for (let o = 0; o < perlin_octaves; o++) {\n            let of1: int = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n\n            rxf = scaled_cosine(xf);\n            ryf = scaled_cosine(yf);\n\n            n1 = perlin[of1 & PERLIN_SIZE];\n            n1 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n1);\n            n2 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n            n2 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);\n            n1 += ryf * (n2 - n1);\n\n            of1 += PERLIN_ZWRAP;\n            n2 = perlin[of1 & PERLIN_SIZE];\n            n2 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n2);\n            n3 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n            n3 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);\n            n2 += ryf * (n3 - n2);\n\n            n1 += scaled_cosine(zf) * (n2 - n1);\n\n            r += n1 * ampl;\n            ampl *= perlin_amp_falloff;\n            xi = xi << 1;\n            xf *= 2.0;\n            yi = yi << 1;\n            yf *= 2.0;\n            zi = zi << 1;\n            zf *= 2.0;\n\n            if (xf >= 1.0) {\n            xi++;\n            xf-= 1.0;\n            }\n            if (yf >= 1.0) {\n            yi++;\n            yf-= 1.0;\n            }\n            if (zf >= 1.0) {\n            zi++;\n            zf-= 1.0;\n            }\n        }\n        return r;\n\n    }\n\n    pub fn perlin3(v: float3) -> float {\n        let x = v.x;\n        let y = v.y;\n        let z = v.z;\n\n        if (x < 0) {\n            x = -x;\n        }\n        if (y < 0) {\n            y = -y;\n        }\n        if (z < 0) {\n            z = -z;\n        }\n\n        let xi = int(floor(x)),\n            yi = int(floor(y)),\n            zi = int(floor(z));\n        let xf = x - xi;\n        let yf = y - yi;\n        let zf = z - zi;\n        let rxf = 0.0, ryf = 0.0;\n\n        let r = 0.0;\n        let ampl = 0.5;\n\n        let n1= 0.0, n2 = 0.0, n3 = 0.0;\n\n        for (let o = 0; o < perlin_octaves; o++) {\n            let of1: int = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n\n            rxf = scaled_cosine(xf);\n            ryf = scaled_cosine(yf);\n\n            n1 = perlin[of1 & PERLIN_SIZE];\n            n1 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n1);\n            n2 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n            n2 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);\n            n1 += ryf * (n2 - n1);\n\n            of1 += PERLIN_ZWRAP;\n            n2 = perlin[of1 & PERLIN_SIZE];\n            n2 += rxf * (perlin[(of1 + 1) & PERLIN_SIZE] - n2);\n            n3 = perlin[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n            n3 += rxf * (perlin[(of1 + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);\n            n2 += ryf * (n3 - n2);\n\n            n1 += scaled_cosine(zf) * (n2 - n1);\n\n            r += n1 * ampl;\n            ampl *= perlin_amp_falloff;\n            xi = xi << 1;\n            xf *= 2.0;\n            yi = yi << 1;\n            yf *= 2.0;\n            zi = zi << 1;\n            zf *= 2.0;\n\n            if (xf >= 1.0) {\n            xi++;\n            xf-= 1.0;\n            }\n            if (yf >= 1.0) {\n            yi++;\n            yf-= 1.0;\n            }\n            if (zf >= 1.0) {\n            zi++;\n            zf-= 1.0;\n            }\n        }\n        return r;\n    }\n\n    /**\n    * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\n    */\n    pub fn voronoi2(v: float2) -> float3 {\n        let n = floor(v);\n        let minDist = 10.0;\n        let toClose = 0.0.xy;\n        let closestCell = 0.0.xy;\n        \n        \n        for (let j = -1; j <= 1; j++) {\n            for (let i = -1; i <= 1; i++) {\n                let cell = n + float2(i, j);\n                let cellPos = cell + hash2(cell);\n                let toCell = cellPos - v;\n                let dst = length(toCell);\n                if (dst < minDist) {\n                    minDist = dst;\n                    toClose = toCell;\n                    closestCell = cell;\n                }\n            }\n        }\n        \n        let minEdge = 10.0;\n        for (let j = -1; j <= 1; j++) {\n            for (let i = -1; i <= 1; i++) {\n                let cell = n + float2(i, j);\n                let cellPos = cell + hash2(cell);\n                let toCell = cellPos - v;\n                let diff = abs(closestCell - cell);\n                let isClosest = diff.x + diff.y < 0.1;\n                if (!isClosest) {\n                    let toCenter = (toClose + toCell) * 0.5;\n                    let cellDiff = normalize(toCell - toClose);\n                    let edge = dot(toCenter, cellDiff);\n                    minEdge = min(minEdge, edge);\n                }\n            }\n        }\n\n        let random = hash2(closestCell);\n        return float3(minDist, random, minEdge);\n    }\n\n    pub fn simplex3(v: float3) -> float {\n        let C = float4(0.138196601125011,\n                            0.276393202250021,\n                            0.414589803375032,\n                            -0.447213595499958);\n\n        let i  = floor(v + dot(v, C.yyy));\n        let x0 = v -   i + dot(i, C.xxx);\n\n        let g = step(x0.yzx, x0.xyz);\n        let l = 1.0 - g;\n        let i1 = min(g.xyz, l.zxy);\n        let i2 = max(g.xyz, l.zxy);\n\n        let x1 = x0 - i1 + 1.0 * C.xxx;\n        let x2 = x0 - i2 + 2.0 * C.xxx;\n        let x3 = x0 - 1. + 3.0 * C.xxx;\n\n        i = mod289_3(i);\n        let p =\n        permute(\n            permute(\n                permute(i.z + float3(0.0, i1.z, i2.z))\n                + i.y + float3(0.0, i1.y, i2.y))\n                + i.x + float3(0.0, i1.x, i2.x));\n\n        let m = max(0.5 - float3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);\n        m = m * m;\n        m = m * m;\n\n        let x = 2.0 * frac(p * C.www) - 1.0;\n        let h = abs(x) - 0.5;\n        let ox = floor(x + 0.5);\n        let a0 = x - ox;\n\n        // Normalise gradients implicitly by scaling m\n        // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\n        m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\n\n        // Compute final noise value at P\n        let g2 = float3(\n            a0.x * x0.x + h.x * x0.y,\n            a0.y * x1.x + h.y * x1.y,\n            a0.z * x2.x + h.z * x2.y\n        );\n        return 130.0 * dot(m, g2);\n    }\n}\n\nfn mod289_1(x: float) -> float { return x - floor(x * (1.0 / 289.0)) * 289.0;}\nfn mod289_4(x: float4) -> float4 { return x - floor(x * (1.0 / 289.0)) * 289.0;}\nfn perm(x: float4) -> float4  { return mod289_4(((x * 34.0) + 1.0) * x);}\n\nfn mod289_3(x: float3) -> float3 {\n    return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nfn mod289_2(x: float2) -> float2 {\n    return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nfn permute(x: float3) -> float3 {\n    return mod289_3((x * 34.0 + 1.0) * x);\n}\n\nfn taylorInvSqrt(r: float3) -> float3 {\n    return 1.79284291400159 - 0.85373472095314 * r;\n}\n\npub struct matrix {}\n\nimpl matrix {\n    pub fn lookAt(from: float3, to: float3, up: float3) -> float4x4 {\n        let zAxis = normalize(from - to);\n        let xAxis = normalize(cross(up, zAxis));\n        let yAxis = normalize(cross(zAxis, xAxis));\n        let dst = float4x4();\n        dst[0][0] = xAxis.x;  dst[0][1] = yAxis.x;  dst[0][2] = zAxis.x;  dst[0][3] = 0;\n        dst[1][0] = xAxis.y;  dst[1][1] = yAxis.y;  dst[1][2] = zAxis.y;  dst[1][3] = 0;\n        dst[2][0] = xAxis.z;  dst[2][1] = yAxis.z;  dst[2][2] = zAxis.z;  dst[2][3] = 0;\n\n        dst[3][0] = -(xAxis.x * from.x + xAxis.y * from.y + xAxis.z * from.z);\n        dst[3][1] = -(yAxis.x * from.x + yAxis.y * from.y + yAxis.z * from.z);\n        dst[3][2] = -(zAxis.x * from.x + zAxis.y * from.y + zAxis.z * from.z);\n        dst[3][3] = 1;\n\n        return dst;\n\n        let forward = normalize(from - to); \n        \n        let right = normalize(cross(up, forward)); \n        \n        let newup = cross(forward, right); \n        let m = float4x4();\n        m[0][0] = right.x,   m[0][1] = right.y,   m[0][2] = right.z; \n        m[1][0] = newup.x,   m[1][1] = newup.y,   m[1][2] = newup.z; \n        m[2][0] = forward.x, m[2][1] = forward.y, m[2][2] = forward.z; \n        m[3][0] = from.x,    m[3][1] = from.y,    m[3][2] = from.z; \n\n        return m;\n\n    }\n\n\n    pub fn perspective(fov: float, aspect: float, near: float, far: float) -> float4x4 {\n        \n        // set the basic projection matrix\n        // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \n        // let M = float4x4();\n        // M[0][0] = scale;  //scale the x coordinates of the projected point \n        // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n        // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \n        // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n        // M[2][3] = -1;  //set w = -z \n        // M[3][3] = 0; \n\n        //return M;\n\n        let fovRad = radians(fov);\n        let tanFov = tan( fovRad * 0.5 );\n\n        let matrx = float4x4(\n            1.0 / (tanFov * aspect), 0, 0, 0,\n            0, 1.0 / tanFov, 0, 0,\n            0, 0, -((far + near)/(far - near)), -1,\n            0, 0, -((2*(near*far))/(far - near)), 0\n        );\n\n        return matrx;\n    }\n\n    pub fn perspectiveReverseZ(fov: float, aspect: float, near: float) -> float4 {\n        // let scale = 1.0 / tan(fov * 0.5 * PI / 180);\n        // let far = 10000000.0;\n        // let M = float4x4();\n        // M[0][0] = scale;  //scale the x coordinates of the projected point \n        // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n        // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \n        // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n        // M[2][3] = 0;  //set w = -z \n        // M[3][3] = 0; \n        // return M;\n\n        let matrx = float4x4(\n            1, 0, 0, 0,\n            0, 1, 0, 0,\n            0, 0, -1, 0,\n            0, 0, 1, 1\n        ) * matrix::perspective(fov, aspect, near, 10000000.0);\n\n        return matrx;\n    }\n}\n\n/**\n* Uses Super Sampling Anti Aliasing to smooth out the image.\n*/\npub fn screenAA(inScreenPos: float2, gridSize: int, func: (screenPos: float2) -> float4) {\n    let weightSum = 0.0;\n    let accumulatedColor = float4(0, 0, 0, 0);\n\n    for (let y = 0; y < gridSize; y++) {\n        for (let x = 0; x < gridSize; x++) {\n            let offset = float2(\n                (x + 0.5 - gridSize * 0.5) / gridSize,\n                (y + 0.5 - gridSize * 0.5) / gridSize\n            );\n            \n            let weight = exp(-dot(offset, offset) * 5); // Gaussian weight\n            accumulatedColor += func(inScreenPos + offset) * weight;\n            weightSum += weight;\n        }\n    }\n\n    return accumulatedColor / weightSum;\n}\n\n\n// Color conversion helpers\n// A color = float4 containing rgba values in the range [0, 1]\n// All functions have an extra alpha functon and a reverse\n// i.e. hsl, hsla, hslFromColor, hslaFromColor\n// fn hsl(v: float3) -> float4\n\npub fn hsl(v: float3) -> float4 {\n    return hsla((v, 1));\n}\n\npub fn hsla(v: float4) -> float4 {\n    let h = v.x;\n    let s = v.y;\n    let l = v.z;\n    let a = v.w;\n    let c = (1 - abs(2 * l - 1)) * s;\n    let x = c * (1 - abs(((h / 60) % 2) - 1));\n    let m = l - c / 2;\n    let r = 0.0;\n    let g = 0.0;\n    let b = 0.0;\n    if (h < 60) {\n        r = c;\n        g = x;\n        b = 0;\n    } else if (h < 120) {\n        r = x;\n        g = c;\n        b = 0;\n    } else if (h < 180) {\n        r = 0;\n        g = c;\n        b = x;\n    } else if (h < 240) {\n        r = 0;\n        g = x;\n        b = c;\n    } else if (h < 300) {\n        r = x;\n        g = 0;\n        b = c;\n    } else {\n        r = c;\n        g = 0;\n        b = x;\n    }\n    return float4(r + m, g + m, b + m, a);\n}\n\npub fn hslFromColor(c: float4) -> float3 {\n    let r = c.r;\n    let g = c.g;\n    let b = c.b;\n    let a = c.a;\n    let mx = max(r, max(g, b));\n    let mn = min(r, min(g, b));\n    let h = 0.0;\n    let s = 0.0;\n    let l = (mx + mn) / 2;\n    if (mx == mn) {\n        h = 0;\n        s = 0;\n    } else {\n        let d = mx - mn;\n        s = (l > 0.5) ? d / (2 - mx - mn) : d / (mx + mn);\n        if (mx == r) {\n            h = (g - b) / d + ((g < b) ? 6:0);\n        } else if (mx == g) {\n            h = (b - r) / d + 2;\n        } else if (mx == b) {\n            h = (r - g) / d + 4;\n        }\n        h /= 6;\n    }\n    return float3(h * 360, s, l);\n}\n\npub fn hslaFromColor(c: float4) -> float4 {\n    let hsl = hslFromColor(c);\n    return float4(hsl, c.a);\n}\n\npub fn hsv(v: float3) -> float4 {\n    return hsva((v, 1));\n}\n\npub fn hsva(val: float4) -> float4 {\n    let h = val.x;\n    let s = val.y;\n    let v = val.z;\n    let a = val.w;\n    let c = v * s;\n    let x = c * (1 - abs(mod(h / 60, 2) - 1));\n    let m = v - c;\n    let r = 0.0;\n    let g = 0.0;\n    let b = 0.0;\n    if (h < 60) {\n        r = c;\n        g = x;\n        b = 0;\n    } else if (h < 120) {\n        r = x;\n        g = c;\n        b = 0;\n    } else if (h < 180) {\n        r = 0;\n        g = c;\n        b = x;\n    } else if (h < 240) {\n        r = 0;\n        g = x;\n        b = c;\n    } else if (h < 300) {\n        r = x;\n        g = 0;\n        b = c;\n    } else {\n        r = c;\n        g = 0;\n        b = x;\n    }\n    return float4(r + m, g + m, b + m, a);\n}\n\npub fn hsvFromColor(c: float4) -> float3 {\n    let r = c.r;\n    let g = c.g;\n    let b = c.b;\n    let mx = max(r, max(g, b));\n    let mn = min(r, min(g, b));\n    let h = 0.0;\n    let s = 0.0;\n    let v = mx;\n    let d = mx - mn;\n    s = (mx == 0) ? 0 :  d / mx ;\n    if (mx == mn) {\n        h = 0;\n    } else {\n        if (mx == r) {\n            h = (g - b) / d + ((g < b) ? 6 : 0 );\n        } else if (mx == g) {\n            h = (b - r) / d + 2;\n        } else if (mx == b) {\n            h = (r - g) / d + 4;\n        }\n        h /= 6;\n    }\n    return float3(h * 360, s, v);\n}\n\npub fn hsvaFromColor(c: float4) -> float4 {\n    let hsv = hsvFromColor(c);\n    return float4(hsv, c.a);\n}\n\npub fn rgb(v: float3) -> float4 {\n    return float4(v / 255.0, 1);\n}\n\npub fn rgba(v: float4) -> float4 {\n    return float4(v / 255.0);\n}\n\npub fn rgbFromColor(c: float4) -> float3 {\n    return c.rgb * 255.0;\n}\n\npub fn rgbaFromColor(c: float4) -> float4 {\n    return c * 255.0;\n}\n\npub fn cmyk(v: float4) -> float4 {\n    let c = v.r;\n    let m = v.g;\n    let y = v.b;\n    let k = v.a;\n    let r = 1 - min(1, c * (1 - k) + k);\n    let g = 1 - min(1, m * (1 - k) + k);\n    let b = 1 - min(1, y * (1 - k) + k);\n    return float4(r, g, b, 1);\n}\n\npub fn cmykFromColor(c: float4) -> float4 {\n    let r = c.r;\n    let g = c.g;\n    let b = c.b;\n    let k = 1 - max(r, max(g, b));\n    let c1 = (1 - r - k) / (1 - k);\n    let m = (1 - g - k) / (1 - k);\n    let y = (1 - b - k) / (1 - k);\n    return float4(c1, m, y, k);\n}\n\npub fn hex(v: int) -> float4 {\n    let r: float = (v >> 16) & 0xFF;\n    let g: float = (v >> 8) & 0xFF;\n    let b: float = v & 0xFF;\n    return float4(r / 255.0, g / 255.0, b / 255.0, 1.0);\n}\n\npub fn hexFromColor(c: float4) -> int {\n    let r = int(c.r * 255.0);\n    let g = int(c.g * 255.0);\n    let b = int(c.b * 255.0);\n    return (r << 16) | (g << 8) | b;\n}\n\n/**\n* Returns sin remapped to [0, 1]\n*/\npub fn sin1(v: float) -> float {\n    return (sin(v) + 1) * 0.5;\n}\n\n/**\n* Returns cos remapped to [0, 1]\n*/\npub fn cos1(v: float) -> float {\n    return (cos(v) + 1) * 0.5;\n}\n\n/**\n* Returns tan remapped to [0, 1]\n*/\npub fn tan1(v: float) -> float {\n    return (tan(v) + 1) * 0.5;\n}\n\npub fn remap(v: float, low1: float, high1: float, low2: float, high2: float) -> float {\n    return low2 + (v - low1) * (high2 - low2) / (high1 - low1);\n}\n\npub fn remap1(v: float, low: float, high: float) -> float {\n    return remap(v, low, high, 0, 1);\n}\n\npub struct color {\n\tstatic slate50: float4 = float4(0.9725490196078431, 0.9803921568627451, 0.9882352941176471, 1);\n\tstatic slate100: float4 = float4(0.9450980392156862, 0.9607843137254902, 0.9764705882352941, 1);\n\tstatic slate200: float4 = float4(0.8862745098039215, 0.9098039215686274, 0.9411764705882353, 1);\n\tstatic slate300: float4 = float4(0.796078431372549, 0.8352941176470589, 0.8823529411764706, 1);\n\tstatic slate400: float4 = float4(0.5803921568627451, 0.6392156862745098, 0.7215686274509804, 1);\n\tstatic slate500: float4 = float4(0.39215686274509803, 0.4549019607843137, 0.5450980392156862, 1);\n\tstatic slate600: float4 = float4(0.2784313725490196, 0.3333333333333333, 0.4117647058823529, 1);\n\tstatic slate700: float4 = float4(0.2, 0.2549019607843137, 0.3333333333333333, 1);\n\tstatic slate800: float4 = float4(0.11764705882352941, 0.1607843137254902, 0.23137254901960785, 1);\n\tstatic slate900: float4 = float4(0.058823529411764705, 0.09019607843137255, 0.16470588235294117, 1);\n\tstatic slate950: float4 = float4(0.00784313725490196, 0.023529411764705882, 0.09019607843137255, 1);\n\tstatic gray50: float4 = float4(0.9764705882352941, 0.9803921568627451, 0.984313725490196, 1);\n\tstatic gray100: float4 = float4(0.9529411764705882, 0.9568627450980393, 0.9647058823529412, 1);\n\tstatic gray200: float4 = float4(0.8980392156862745, 0.9058823529411765, 0.9215686274509803, 1);\n\tstatic gray300: float4 = float4(0.8196078431372549, 0.8352941176470589, 0.8588235294117647, 1);\n\tstatic gray400: float4 = float4(0.611764705882353, 0.6392156862745098, 0.6862745098039216, 1);\n\tstatic gray500: float4 = float4(0.4196078431372549, 0.4470588235294118, 0.5019607843137255, 1);\n\tstatic gray600: float4 = float4(0.29411764705882354, 0.3333333333333333, 0.38823529411764707, 1);\n\tstatic gray700: float4 = float4(0.21568627450980393, 0.2549019607843137, 0.3176470588235294, 1);\n\tstatic gray800: float4 = float4(0.12156862745098039, 0.1607843137254902, 0.21568627450980393, 1);\n\tstatic gray900: float4 = float4(0.06666666666666667, 0.09411764705882353, 0.15294117647058825, 1);\n\tstatic gray950: float4 = float4(0.011764705882352941, 0.027450980392156862, 0.07058823529411765, 1);\n\tstatic zinc50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\n\tstatic zinc100: float4 = float4(0.9568627450980393, 0.9568627450980393, 0.9607843137254902, 1);\n\tstatic zinc200: float4 = float4(0.8941176470588236, 0.8941176470588236, 0.9058823529411765, 1);\n\tstatic zinc300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8470588235294118, 1);\n\tstatic zinc400: float4 = float4(0.6313725490196078, 0.6313725490196078, 0.6666666666666666, 1);\n\tstatic zinc500: float4 = float4(0.44313725490196076, 0.44313725490196076, 0.47843137254901963, 1);\n\tstatic zinc600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3568627450980392, 1);\n\tstatic zinc700: float4 = float4(0.24705882352941178, 0.24705882352941178, 0.27450980392156865, 1);\n\tstatic zinc800: float4 = float4(0.15294117647058825, 0.15294117647058825, 0.16470588235294117, 1);\n\tstatic zinc900: float4 = float4(0.09411764705882353, 0.09411764705882353, 0.10588235294117647, 1);\n\tstatic zinc950: float4 = float4(0.03529411764705882, 0.03529411764705882, 0.043137254901960784, 1);\n\tstatic neutral50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\n\tstatic neutral100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9607843137254902, 1);\n\tstatic neutral200: float4 = float4(0.8980392156862745, 0.8980392156862745, 0.8980392156862745, 1);\n\tstatic neutral300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8313725490196079, 1);\n\tstatic neutral400: float4 = float4(0.6392156862745098, 0.6392156862745098, 0.6392156862745098, 1);\n\tstatic neutral500: float4 = float4(0.45098039215686275, 0.45098039215686275, 0.45098039215686275, 1);\n\tstatic neutral600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3215686274509804, 1);\n\tstatic neutral700: float4 = float4(0.25098039215686274, 0.25098039215686274, 0.25098039215686274, 1);\n\tstatic neutral800: float4 = float4(0.14901960784313725, 0.14901960784313725, 0.14901960784313725, 1);\n\tstatic neutral900: float4 = float4(0.09019607843137255, 0.09019607843137255, 0.09019607843137255, 1);\n\tstatic neutral950: float4 = float4(0.0392156862745098, 0.0392156862745098, 0.0392156862745098, 1);\n\tstatic stone50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9764705882352941, 1);\n\tstatic stone100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9568627450980393, 1);\n\tstatic stone200: float4 = float4(0.9058823529411765, 0.8980392156862745, 0.8941176470588236, 1);\n\tstatic stone300: float4 = float4(0.8392156862745098, 0.8274509803921568, 0.8196078431372549, 1);\n\tstatic stone400: float4 = float4(0.6588235294117647, 0.6352941176470588, 0.6196078431372549, 1);\n\tstatic stone500: float4 = float4(0.47058823529411764, 0.44313725490196076, 0.4235294117647059, 1);\n\tstatic stone600: float4 = float4(0.3411764705882353, 0.3254901960784314, 0.3058823529411765, 1);\n\tstatic stone700: float4 = float4(0.26666666666666666, 0.25098039215686274, 0.23529411764705882, 1);\n\tstatic stone800: float4 = float4(0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1);\n\tstatic stone900: float4 = float4(0.10980392156862745, 0.09803921568627451, 0.09019607843137255, 1);\n\tstatic stone950: float4 = float4(0.047058823529411764, 0.0392156862745098, 0.03529411764705882, 1);\n\tstatic red50: float4 = float4(0.996078431372549, 0.9490196078431372, 0.9490196078431372, 1);\n\tstatic red100: float4 = float4(0.996078431372549, 0.8862745098039215, 0.8862745098039215, 1);\n\tstatic red200: float4 = float4(0.996078431372549, 0.792156862745098, 0.792156862745098, 1);\n\tstatic red300: float4 = float4(0.9882352941176471, 0.6470588235294118, 0.6470588235294118, 1);\n\tstatic red400: float4 = float4(0.9725490196078431, 0.44313725490196076, 0.44313725490196076, 1);\n\tstatic red500: float4 = float4(0.9372549019607843, 0.26666666666666666, 0.26666666666666666, 1);\n\tstatic red600: float4 = float4(0.8627450980392157, 0.14901960784313725, 0.14901960784313725, 1);\n\tstatic red700: float4 = float4(0.7254901960784313, 0.10980392156862745, 0.10980392156862745, 1);\n\tstatic red800: float4 = float4(0.6, 0.10588235294117647, 0.10588235294117647, 1);\n\tstatic red900: float4 = float4(0.4980392156862745, 0.11372549019607843, 0.11372549019607843, 1);\n\tstatic red950: float4 = float4(0.27058823529411763, 0.0392156862745098, 0.0392156862745098, 1);\n\tstatic orange50: float4 = float4(1, 0.9686274509803922, 0.9294117647058824, 1);\n\tstatic orange100: float4 = float4(1, 0.9294117647058824, 0.8352941176470589, 1);\n\tstatic orange200: float4 = float4(0.996078431372549, 0.8431372549019608, 0.6666666666666666, 1);\n\tstatic orange300: float4 = float4(0.9921568627450981, 0.7294117647058823, 0.4549019607843137, 1);\n\tstatic orange400: float4 = float4(0.984313725490196, 0.5725490196078431, 0.23529411764705882, 1);\n\tstatic orange500: float4 = float4(0.9764705882352941, 0.45098039215686275, 0.08627450980392157, 1);\n\tstatic orange600: float4 = float4(0.9176470588235294, 0.34509803921568627, 0.047058823529411764, 1);\n\tstatic orange700: float4 = float4(0.7607843137254902, 0.2549019607843137, 0.047058823529411764, 1);\n\tstatic orange800: float4 = float4(0.6039215686274509, 0.20392156862745098, 0.07058823529411765, 1);\n\tstatic orange900: float4 = float4(0.48627450980392156, 0.17647058823529413, 0.07058823529411765, 1);\n\tstatic orange950: float4 = float4(0.2627450980392157, 0.0784313725490196, 0.027450980392156862, 1);\n\tstatic amber50: float4 = float4(1, 0.984313725490196, 0.9215686274509803, 1);\n\tstatic amber100: float4 = float4(0.996078431372549, 0.9529411764705882, 0.7803921568627451, 1);\n\tstatic amber200: float4 = float4(0.9921568627450981, 0.9019607843137255, 0.5411764705882353, 1);\n\tstatic amber300: float4 = float4(0.9882352941176471, 0.8274509803921568, 0.30196078431372547, 1);\n\tstatic amber400: float4 = float4(0.984313725490196, 0.7490196078431373, 0.1411764705882353, 1);\n\tstatic amber500: float4 = float4(0.9607843137254902, 0.6196078431372549, 0.043137254901960784, 1);\n\tstatic amber600: float4 = float4(0.8509803921568627, 0.4666666666666667, 0.023529411764705882, 1);\n\tstatic amber700: float4 = float4(0.7058823529411765, 0.3254901960784314, 0.03529411764705882, 1);\n\tstatic amber800: float4 = float4(0.5725490196078431, 0.25098039215686274, 0.054901960784313725, 1);\n\tstatic amber900: float4 = float4(0.47058823529411764, 0.20784313725490197, 0.058823529411764705, 1);\n\tstatic amber950: float4 = float4(0.27058823529411763, 0.10196078431372549, 0.011764705882352941, 1);\n\tstatic yellow50: float4 = float4(0.996078431372549, 0.9882352941176471, 0.9098039215686274, 1);\n\tstatic yellow100: float4 = float4(0.996078431372549, 0.9764705882352941, 0.7647058823529411, 1);\n\tstatic yellow200: float4 = float4(0.996078431372549, 0.9411764705882353, 0.5411764705882353, 1);\n\tstatic yellow300: float4 = float4(0.9921568627450981, 0.8784313725490196, 0.2784313725490196, 1);\n\tstatic yellow400: float4 = float4(0.9803921568627451, 0.8, 0.08235294117647059, 1);\n\tstatic yellow500: float4 = float4(0.9176470588235294, 0.7019607843137254, 0.03137254901960784, 1);\n\tstatic yellow600: float4 = float4(0.792156862745098, 0.5411764705882353, 0.01568627450980392, 1);\n\tstatic yellow700: float4 = float4(0.6313725490196078, 0.3843137254901961, 0.027450980392156862, 1);\n\tstatic yellow800: float4 = float4(0.5215686274509804, 0.30196078431372547, 0.054901960784313725, 1);\n\tstatic yellow900: float4 = float4(0.44313725490196076, 0.24705882352941178, 0.07058823529411765, 1);\n\tstatic yellow950: float4 = float4(0.25882352941176473, 0.12549019607843137, 0.023529411764705882, 1);\n\tstatic lime50: float4 = float4(0.9686274509803922, 0.996078431372549, 0.9058823529411765, 1);\n\tstatic lime100: float4 = float4(0.9254901960784314, 0.9882352941176471, 0.796078431372549, 1);\n\tstatic lime200: float4 = float4(0.8509803921568627, 0.9764705882352941, 0.615686274509804, 1);\n\tstatic lime300: float4 = float4(0.7450980392156863, 0.9490196078431372, 0.39215686274509803, 1);\n\tstatic lime400: float4 = float4(0.6392156862745098, 0.9019607843137255, 0.20784313725490197, 1);\n\tstatic lime500: float4 = float4(0.5176470588235295, 0.8, 0.08627450980392157, 1);\n\tstatic lime600: float4 = float4(0.396078431372549, 0.6392156862745098, 0.050980392156862744, 1);\n\tstatic lime700: float4 = float4(0.30196078431372547, 0.48627450980392156, 0.058823529411764705, 1);\n\tstatic lime800: float4 = float4(0.24705882352941178, 0.3843137254901961, 0.07058823529411765, 1);\n\tstatic lime900: float4 = float4(0.21176470588235294, 0.3254901960784314, 0.0784313725490196, 1);\n\tstatic lime950: float4 = float4(0.10196078431372549, 0.1803921568627451, 0.0196078431372549, 1);\n\tstatic green50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9568627450980393, 1);\n\tstatic green100: float4 = float4(0.8627450980392157, 0.9882352941176471, 0.9058823529411765, 1);\n\tstatic green200: float4 = float4(0.7333333333333333, 0.9686274509803922, 0.8156862745098039, 1);\n\tstatic green300: float4 = float4(0.5254901960784314, 0.9372549019607843, 0.6745098039215687, 1);\n\tstatic green400: float4 = float4(0.2901960784313726, 0.8705882352941177, 0.5019607843137255, 1);\n\tstatic green500: float4 = float4(0.13333333333333333, 0.7725490196078432, 0.3686274509803922, 1);\n\tstatic green600: float4 = float4(0.08627450980392157, 0.6392156862745098, 0.2901960784313726, 1);\n\tstatic green700: float4 = float4(0.08235294117647059, 0.5019607843137255, 0.23921568627450981, 1);\n\tstatic green800: float4 = float4(0.08627450980392157, 0.396078431372549, 0.20392156862745098, 1);\n\tstatic green900: float4 = float4(0.0784313725490196, 0.3254901960784314, 0.17647058823529413, 1);\n\tstatic green950: float4 = float4(0.0196078431372549, 0.1803921568627451, 0.08627450980392157, 1);\n\tstatic emerald50: float4 = float4(0.9254901960784314, 0.9921568627450981, 0.9607843137254902, 1);\n\tstatic emerald100: float4 = float4(0.8196078431372549, 0.9803921568627451, 0.8980392156862745, 1);\n\tstatic emerald200: float4 = float4(0.6549019607843137, 0.9529411764705882, 0.8156862745098039, 1);\n\tstatic emerald300: float4 = float4(0.43137254901960786, 0.9058823529411765, 0.7176470588235294, 1);\n\tstatic emerald400: float4 = float4(0.20392156862745098, 0.8274509803921568, 0.6, 1);\n\tstatic emerald500: float4 = float4(0.06274509803921569, 0.7254901960784313, 0.5058823529411764, 1);\n\tstatic emerald600: float4 = float4(0.0196078431372549, 0.5882352941176471, 0.4117647058823529, 1);\n\tstatic emerald700: float4 = float4(0.01568627450980392, 0.47058823529411764, 0.3411764705882353, 1);\n\tstatic emerald800: float4 = float4(0.023529411764705882, 0.37254901960784315, 0.27450980392156865, 1);\n\tstatic emerald900: float4 = float4(0.023529411764705882, 0.3058823529411765, 0.23137254901960785, 1);\n\tstatic emerald950: float4 = float4(0.00784313725490196, 0.17254901960784313, 0.13333333333333333, 1);\n\tstatic teal50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9803921568627451, 1);\n\tstatic teal100: float4 = float4(0.8, 0.984313725490196, 0.9450980392156862, 1);\n\tstatic teal200: float4 = float4(0.6, 0.9647058823529412, 0.8941176470588236, 1);\n\tstatic teal300: float4 = float4(0.3686274509803922, 0.9176470588235294, 0.8313725490196079, 1);\n\tstatic teal400: float4 = float4(0.17647058823529413, 0.8313725490196079, 0.7490196078431373, 1);\n\tstatic teal500: float4 = float4(0.0784313725490196, 0.7215686274509804, 0.6509803921568628, 1);\n\tstatic teal600: float4 = float4(0.050980392156862744, 0.5803921568627451, 0.5333333333333333, 1);\n\tstatic teal700: float4 = float4(0.058823529411764705, 0.4627450980392157, 0.43137254901960786, 1);\n\tstatic teal800: float4 = float4(0.06666666666666667, 0.3686274509803922, 0.34901960784313724, 1);\n\tstatic teal900: float4 = float4(0.07450980392156863, 0.3058823529411765, 0.2901960784313726, 1);\n\tstatic teal950: float4 = float4(0.01568627450980392, 0.1843137254901961, 0.1803921568627451, 1);\n\tstatic cyan50: float4 = float4(0.9254901960784314, 0.996078431372549, 1, 1);\n\tstatic cyan100: float4 = float4(0.8117647058823529, 0.9803921568627451, 0.996078431372549, 1);\n\tstatic cyan200: float4 = float4(0.6470588235294118, 0.9529411764705882, 0.9882352941176471, 1);\n\tstatic cyan300: float4 = float4(0.403921568627451, 0.9098039215686274, 0.9764705882352941, 1);\n\tstatic cyan400: float4 = float4(0.13333333333333333, 0.8274509803921568, 0.9333333333333333, 1);\n\tstatic cyan500: float4 = float4(0.023529411764705882, 0.7137254901960784, 0.8313725490196079, 1);\n\tstatic cyan600: float4 = float4(0.03137254901960784, 0.5686274509803921, 0.6980392156862745, 1);\n\tstatic cyan700: float4 = float4(0.054901960784313725, 0.4549019607843137, 0.5647058823529412, 1);\n\tstatic cyan800: float4 = float4(0.08235294117647059, 0.3686274509803922, 0.4588235294117647, 1);\n\tstatic cyan900: float4 = float4(0.08627450980392157, 0.3058823529411765, 0.38823529411764707, 1);\n\tstatic cyan950: float4 = float4(0.03137254901960784, 0.2, 0.26666666666666666, 1);\n\tstatic sky50: float4 = float4(0.9411764705882353, 0.9764705882352941, 1, 1);\n\tstatic sky100: float4 = float4(0.8784313725490196, 0.9490196078431372, 0.996078431372549, 1);\n\tstatic sky200: float4 = float4(0.7294117647058823, 0.9019607843137255, 0.9921568627450981, 1);\n\tstatic sky300: float4 = float4(0.49019607843137253, 0.8274509803921568, 0.9882352941176471, 1);\n\tstatic sky400: float4 = float4(0.2196078431372549, 0.7411764705882353, 0.9725490196078431, 1);\n\tstatic sky500: float4 = float4(0.054901960784313725, 0.6470588235294118, 0.9137254901960784, 1);\n\tstatic sky600: float4 = float4(0.00784313725490196, 0.5176470588235295, 0.7803921568627451, 1);\n\tstatic sky700: float4 = float4(0.011764705882352941, 0.4117647058823529, 0.6313725490196078, 1);\n\tstatic sky800: float4 = float4(0.027450980392156862, 0.34901960784313724, 0.5215686274509804, 1);\n\tstatic sky900: float4 = float4(0.047058823529411764, 0.2901960784313726, 0.43137254901960786, 1);\n\tstatic sky950: float4 = float4(0.03137254901960784, 0.1843137254901961, 0.28627450980392155, 1);\n\tstatic blue50: float4 = float4(0.9372549019607843, 0.9647058823529412, 1, 1);\n\tstatic blue100: float4 = float4(0.8588235294117647, 0.9176470588235294, 0.996078431372549, 1);\n\tstatic blue200: float4 = float4(0.7490196078431373, 0.8588235294117647, 0.996078431372549, 1);\n\tstatic blue300: float4 = float4(0.5764705882352941, 0.7725490196078432, 0.9921568627450981, 1);\n\tstatic blue400: float4 = float4(0.3764705882352941, 0.6470588235294118, 0.9803921568627451, 1);\n\tstatic blue500: float4 = float4(0.23137254901960785, 0.5098039215686274, 0.9647058823529412, 1);\n\tstatic blue600: float4 = float4(0.1450980392156863, 0.38823529411764707, 0.9215686274509803, 1);\n\tstatic blue700: float4 = float4(0.11372549019607843, 0.3058823529411765, 0.8470588235294118, 1);\n\tstatic blue800: float4 = float4(0.11764705882352941, 0.25098039215686274, 0.6862745098039216, 1);\n\tstatic blue900: float4 = float4(0.11764705882352941, 0.22745098039215686, 0.5411764705882353, 1);\n\tstatic blue950: float4 = float4(0.09019607843137255, 0.1450980392156863, 0.32941176470588235, 1);\n\tstatic indigo50: float4 = float4(0.9333333333333333, 0.9490196078431372, 1, 1);\n\tstatic indigo100: float4 = float4(0.8784313725490196, 0.9058823529411765, 1, 1);\n\tstatic indigo200: float4 = float4(0.7803921568627451, 0.8235294117647058, 0.996078431372549, 1);\n\tstatic indigo300: float4 = float4(0.6470588235294118, 0.7058823529411765, 0.9882352941176471, 1);\n\tstatic indigo400: float4 = float4(0.5058823529411764, 0.5490196078431373, 0.9725490196078431, 1);\n\tstatic indigo500: float4 = float4(0.38823529411764707, 0.4, 0.9450980392156862, 1);\n\tstatic indigo600: float4 = float4(0.30980392156862746, 0.27450980392156865, 0.8980392156862745, 1);\n\tstatic indigo700: float4 = float4(0.2627450980392157, 0.2196078431372549, 0.792156862745098, 1);\n\tstatic indigo800: float4 = float4(0.21568627450980393, 0.18823529411764706, 0.6392156862745098, 1);\n\tstatic indigo900: float4 = float4(0.19215686274509805, 0.1803921568627451, 0.5058823529411764, 1);\n\tstatic indigo950: float4 = float4(0.11764705882352941, 0.10588235294117647, 0.29411764705882354, 1);\n\tstatic violet50: float4 = float4(0.9607843137254902, 0.9529411764705882, 1, 1);\n\tstatic violet100: float4 = float4(0.9294117647058824, 0.9137254901960784, 0.996078431372549, 1);\n\tstatic violet200: float4 = float4(0.8666666666666667, 0.8392156862745098, 0.996078431372549, 1);\n\tstatic violet300: float4 = float4(0.7686274509803922, 0.7098039215686275, 0.9921568627450981, 1);\n\tstatic violet400: float4 = float4(0.6549019607843137, 0.5450980392156862, 0.9803921568627451, 1);\n\tstatic violet500: float4 = float4(0.5450980392156862, 0.3607843137254902, 0.9647058823529412, 1);\n\tstatic violet600: float4 = float4(0.48627450980392156, 0.22745098039215686, 0.9294117647058824, 1);\n\tstatic violet700: float4 = float4(0.42745098039215684, 0.1568627450980392, 0.8509803921568627, 1);\n\tstatic violet800: float4 = float4(0.3568627450980392, 0.12941176470588237, 0.7137254901960784, 1);\n\tstatic violet900: float4 = float4(0.2980392156862745, 0.11372549019607843, 0.5843137254901961, 1);\n\tstatic violet950: float4 = float4(0.1803921568627451, 0.06274509803921569, 0.396078431372549, 1);\n\tstatic purple50: float4 = float4(0.9803921568627451, 0.9607843137254902, 1, 1);\n\tstatic purple100: float4 = float4(0.9529411764705882, 0.9098039215686274, 1, 1);\n\tstatic purple200: float4 = float4(0.9137254901960784, 0.8352941176470589, 1, 1);\n\tstatic purple300: float4 = float4(0.8470588235294118, 0.7058823529411765, 0.996078431372549, 1);\n\tstatic purple400: float4 = float4(0.7529411764705882, 0.5176470588235295, 0.9882352941176471, 1);\n\tstatic purple500: float4 = float4(0.6588235294117647, 0.3333333333333333, 0.9686274509803922, 1);\n\tstatic purple600: float4 = float4(0.5764705882352941, 0.2, 0.9176470588235294, 1);\n\tstatic purple700: float4 = float4(0.49411764705882355, 0.13333333333333333, 0.807843137254902, 1);\n\tstatic purple800: float4 = float4(0.4196078431372549, 0.12941176470588237, 0.6588235294117647, 1);\n\tstatic purple900: float4 = float4(0.34509803921568627, 0.10980392156862745, 0.5294117647058824, 1);\n\tstatic purple950: float4 = float4(0.23137254901960785, 0.027450980392156862, 0.39215686274509803, 1);\n\tstatic fuchsia50: float4 = float4(0.9921568627450981, 0.9568627450980393, 1, 1);\n\tstatic fuchsia100: float4 = float4(0.9803921568627451, 0.9098039215686274, 1, 1);\n\tstatic fuchsia200: float4 = float4(0.9607843137254902, 0.8156862745098039, 0.996078431372549, 1);\n\tstatic fuchsia300: float4 = float4(0.9411764705882353, 0.6705882352941176, 0.9882352941176471, 1);\n\tstatic fuchsia400: float4 = float4(0.9098039215686274, 0.4745098039215686, 0.9764705882352941, 1);\n\tstatic fuchsia500: float4 = float4(0.8509803921568627, 0.27450980392156865, 0.9372549019607843, 1);\n\tstatic fuchsia600: float4 = float4(0.7529411764705882, 0.14901960784313725, 0.8274509803921568, 1);\n\tstatic fuchsia700: float4 = float4(0.6352941176470588, 0.10980392156862745, 0.6862745098039216, 1);\n\tstatic fuchsia800: float4 = float4(0.5254901960784314, 0.09803921568627451, 0.5607843137254902, 1);\n\tstatic fuchsia900: float4 = float4(0.4392156862745098, 0.10196078431372549, 0.4588235294117647, 1);\n\tstatic fuchsia950: float4 = float4(0.2901960784313726, 0.01568627450980392, 0.3058823529411765, 1);\n\tstatic pink50: float4 = float4(0.9921568627450981, 0.9490196078431372, 0.9725490196078431, 1);\n\tstatic pink100: float4 = float4(0.9882352941176471, 0.9058823529411765, 0.9529411764705882, 1);\n\tstatic pink200: float4 = float4(0.984313725490196, 0.8117647058823529, 0.9098039215686274, 1);\n\tstatic pink300: float4 = float4(0.9764705882352941, 0.6588235294117647, 0.8313725490196079, 1);\n\tstatic pink400: float4 = float4(0.9568627450980393, 0.4470588235294118, 0.7137254901960784, 1);\n\tstatic pink500: float4 = float4(0.9254901960784314, 0.2823529411764706, 0.6, 1);\n\tstatic pink600: float4 = float4(0.8588235294117647, 0.15294117647058825, 0.4666666666666667, 1);\n\tstatic pink700: float4 = float4(0.7450980392156863, 0.09411764705882353, 0.36470588235294116, 1);\n\tstatic pink800: float4 = float4(0.615686274509804, 0.09019607843137255, 0.30196078431372547, 1);\n\tstatic pink900: float4 = float4(0.5137254901960784, 0.09411764705882353, 0.2627450980392157, 1);\n\tstatic pink950: float4 = float4(0.3137254901960784, 0.027450980392156862, 0.1411764705882353, 1);\n\tstatic rose50: float4 = float4(1, 0.9450980392156862, 0.9490196078431372, 1);\n\tstatic rose100: float4 = float4(1, 0.8941176470588236, 0.9019607843137255, 1);\n\tstatic rose200: float4 = float4(0.996078431372549, 0.803921568627451, 0.8274509803921568, 1);\n\tstatic rose300: float4 = float4(0.9921568627450981, 0.6431372549019608, 0.6862745098039216, 1);\n\tstatic rose400: float4 = float4(0.984313725490196, 0.44313725490196076, 0.5215686274509804, 1);\n\tstatic rose500: float4 = float4(0.9568627450980393, 0.24705882352941178, 0.3686274509803922, 1);\n\tstatic rose600: float4 = float4(0.8823529411764706, 0.11372549019607843, 0.2823529411764706, 1);\n\tstatic rose700: float4 = float4(0.7450980392156863, 0.07058823529411765, 0.23529411764705882, 1);\n\tstatic rose800: float4 = float4(0.6235294117647059, 0.07058823529411765, 0.2235294117647059, 1);\n\tstatic rose900: float4 = float4(0.5333333333333333, 0.07450980392156863, 0.21568627450980393, 1);\n\tstatic rose950: float4 = float4(0.2980392156862745, 0.0196078431372549, 0.09803921568627451, 1);\n\n}\n\n\npub fn wrap2(value: float2, low: float, high: float) {\n    return (wrap(value.x, low, high), wrap(value.y, low, high));\n}\n\npub fn wrap3(value: float3, low: float, high: float) {\n    return (wrap(value.x, low, high), wrap(value.y, low, high), wrap(value.z, low, high));\n}\n\npub fn wrap4(value: float4, low: float, high: float) {\n    return (wrap(value.x, low, high), wrap(value.y, low, high), wrap(value.z, low, high), wrap(value.w, low, high));\n}"
  },
  {
    "path": "lang/shadeup/library/drawAttributes.ts",
    "content": "import { buffer } from '/_std/buffer';\nimport { float4, float3, float, float2, bool, int, uint } from '/std_math';\n\nexport function drawAttributes<T extends { [key: string]: any }, X, Y>(\n\tindexBuffer: buffer<uint>,\n\tbuffers:\n\t\t| Map<keyof T, buffer<any>>\n\t\t| {\n\t\t\t\t[key in keyof T]: buffer<T[key]>;\n\t\t  },\n\tvertexShader: shader<T, X>,\n\tpixelShader: shader<X, Y>\n) {\n\t__shadeup_dispatch_draw_attributes(indexBuffer, buffer, vertexShader, pixelShader);\n}\n"
  },
  {
    "path": "lang/shadeup/library/drawCount.ts",
    "content": "import { buffer } from '/_std/buffer';\nimport { float4, float3, float, float2, bool, int, uint } from '/std_math';\n\nexport function drawCount(triCount: number, vertexShader: shader, pixelShader: shader) {\n\t__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n}\n"
  },
  {
    "path": "lang/shadeup/library/drawIndexed.ts",
    "content": "import { buffer } from '/_std/buffer';\nimport { Mesh } from '/_std/mesh';\nimport { texture2d } from '/_std/texture';\nimport { float4, float3, float, float2, bool, int, uint, atomic, int3 } from '/std_math';\n\nexport function drawIndexed(\n\tindexBuffer: buffer<uint>,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n) {\n\t__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\n}\n\nexport function drawInstanced(\n\tmesh: Mesh,\n\tinstanceCount: int,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n) {\n\t__shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShader, pixelShader);\n}\n\nexport function drawInstancedIndexed(\n\tindexBuffer: buffer<uint>,\n\tinstanceCount: int,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n) {\n\t__shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShader, pixelShader);\n}\n\nexport function drawIndexedIndirect(\n\tindirectBuffer: buffer<int> | buffer<atomic<int>>,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n) {\n\t__shadeup_dispatch_draw_indexed_indirect(indirectBuffer, vertexShader, pixelShader);\n}\n\nexport function drawIndirect(\n\tmesh: Mesh,\n\tindirectBuffer: buffer<int> | buffer<atomic<int>>,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n) {\n\t__shadeup_dispatch_draw_indirect(mesh, indirectBuffer, vertexShader, pixelShader);\n}\n\nexport function shader_start_shd_<T_IN, T_OUT, T_COMPUTE_Z>(\n\ts: shader<T_IN, T_OUT, T_COMPUTE_Z>,\n\tgroupSize?: any\n): shader<T_IN, T_OUT, T_COMPUTE_Z> {\n\treturn s;\n}\n\nexport type shader<T_IN = ShaderInput, T_OUT = ShaderOutput, T_COMPUTE_Z = 0> = (\n\t__in: Omit<T_IN, 'vertexIndex'>\n) => T_OUT;\ndeclare global {\n\t// function __shadeup_make_shader_inst(\n\t// \tkey: string,\n\t// \tparams: any,\n\t// \tclosure: any\n\t// ): shader<ShaderInput, ShaderOutput>;\n\t// function __shadeup_dispatch_draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\n\t// function __shadeup_dispatch_draw_geometry(\n\t// \tgeometry: Mesh,\n\t// \tvertexShader: shader<ShaderInput, ShaderOutput>,\n\t// \tpixelShader: shader<ShaderInput, ShaderOutput>\n\t// ): void;\n\n\tinterface Array<T> {\n\t\t[index: int]: T;\n\t}\n\n\tlet window: {\n\t\t[index: string]: any;\n\t};\n}\n\n/**@shadeup=struct*/\nexport class ShaderInput {\n\t/** Interpolated world position (available in fragment, and vertex) */\n\tposition: float3 = float3(0, 0, 0);\n\n\t/** Interpolated normal (fragment), Source mesh normal (vertex) */\n\tnormal: float3 = float3(0, 0, 0);\n\n\t/** Interpolated tangent (fragment), Source mesh tangent (vertex) */\n\ttangent: float3 = float3(0, 0, 0);\n\n\t/** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\n\tbitangent: float3 = float3(0, 0, 0);\n\n\t/** Vertex shader output position */\n\tclipPosition: float4 = float4(0, 0, 0, 0);\n\n\trealPosition: float4 = float4(0, 0, 0, 0);\n\n\t/** UV channel 0 input (available in fragment, and vertex) */\n\tuv: float2 = float2(0, 0);\n\n\t/** Screen position in pixels (available in fragment, and vertex) */\n\tscreen: float2 = float2(0, 0);\n\n\t/** Interpolated vertex color (available in fragment, and vertex)  */\n\tcolor: float4 = float4(0, 0, 0, 0);\n\n\t/** Group ID (available in compute) */\n\tgroupId: int3 = int3(0, 0, 0);\n\n\t/** Group size (available in compute) */\n\tgroupSize: int3 = int3(0, 0, 0);\n\n\t/** Global id (groupId * groupSize + localId) (available in compute) */\n\tglobalId: int3 = int3(0, 0, 0);\n\n\t/** Local id (available in compute) */\n\tlocalId: int3 = int3(0, 0, 0);\n\n\t/** Instance index (available in fragment, and vertex) */\n\tinstanceIndex: int = 0;\n\n\t/** Vertex index (available in vertex) */\n\tvertexIndex: int = 0;\n\n\t/** @shadeup=noemit_gpu */\n\tattr<T>(index: int, interpolation?: 'flat' | 'linear' | 'perspective'): T {\n\t\treturn null as any;\n\t}\n}\n\n/**@shadeup=struct*/\nexport class ShaderOutput {\n\t/** Vertex output position */\n\tposition: float4 = float4(0, 0, 0, 0);\n\n\t/** Vertex output normal */\n\tnormal: float3 = float3(0, 0, 0);\n\n\t/** Vertex output tangent */\n\ttangent: float3 = float3(0, 0, 0);\n\n\t/** Vertex output bitangent */\n\tbitangent: float3 = float3(0, 0, 0);\n\n\t/** UV channel 0 output */\n\tuv: float2 = float2(0, 0);\n\n\t/** Pixel color output */\n\tcolor: float4 = float4(0, 0, 0, 0);\n\n\t/** @shadeup=noemit_gpu */\n\tattr<T>(index: int, value: T, interpolation?: 'flat' | 'linear' | 'perspective') {}\n}\n\n/** @shadeup=shader */\nexport function makeShader<I, O, CZ = 0>(\n\tkey: string,\n\tfn: (__in: I, __out: O) => void\n): shader<I, O, CZ> {\n\treturn fn as shader<I, O, CZ>;\n}\n\ntype AttachmentBindings1<A0> = {\n\tattachments: [texture2d<A0>];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t}\n\t>;\n};\ntype AttachmentBindings2<A0, A1> = {\n\tattachments: [texture2d<A0>, texture2d<A1>];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t}\n\t>;\n};\ntype AttachmentBindings3<A0, A1, A2> = {\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t\tattachment2: A2;\n\t\t}\n\t>;\n};\ntype AttachmentBindings4<A0, A1, A2, A3> = {\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>, texture2d<A3>];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t\tattachment2: A2;\n\t\t\tattachment3: A3;\n\t\t}\n\t>;\n};\ntype AttachmentBindings5<A0, A1, A2, A3, A4> = {\n\tattachments: [texture2d<A0>, texture2d<A1>, texture2d<A2>, texture2d<A3>, texture2d<A4>];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t\tattachment2: A2;\n\t\t\tattachment3: A3;\n\t\t\tattachment4: A4;\n\t\t}\n\t>;\n};\ntype AttachmentBindings6<A0, A1, A2, A3, A4, A5> = {\n\tattachments: [\n\t\ttexture2d<A0>,\n\t\ttexture2d<A1>,\n\t\ttexture2d<A2>,\n\t\ttexture2d<A3>,\n\t\ttexture2d<A4>,\n\t\ttexture2d<A5>\n\t];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t\tattachment2: A2;\n\t\t\tattachment3: A3;\n\t\t\tattachment4: A4;\n\t\t\tattachment5: A5;\n\t\t}\n\t>;\n};\ntype AttachmentBindings7<A0, A1, A2, A3, A4, A5, A6> = {\n\tattachments: [\n\t\ttexture2d<A0>,\n\t\ttexture2d<A1>,\n\t\ttexture2d<A2>,\n\t\ttexture2d<A3>,\n\t\ttexture2d<A4>,\n\t\ttexture2d<A5>,\n\t\ttexture2d<A6>\n\t];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t\tattachment2: A2;\n\t\t\tattachment3: A3;\n\t\t\tattachment4: A4;\n\t\t\tattachment5: A5;\n\t\t\tattachment6: A6;\n\t\t}\n\t>;\n};\ntype AttachmentBindings8<A0, A1, A2, A3, A4, A5, A6, A7> = {\n\tattachments: [\n\t\ttexture2d<A0>,\n\t\ttexture2d<A1>,\n\t\ttexture2d<A2>,\n\t\ttexture2d<A3>,\n\t\ttexture2d<A4>,\n\t\ttexture2d<A5>,\n\t\ttexture2d<A6>,\n\t\ttexture2d<A7>\n\t];\n\tvertex: shader<ShaderInput, ShaderOutput>;\n\tfragment: shader<\n\t\tShaderInput,\n\t\t{\n\t\t\tattachment0: A0;\n\t\t\tattachment1: A1;\n\t\t\tattachment2: A2;\n\t\t\tattachment3: A3;\n\t\t\tattachment4: A4;\n\t\t\tattachment5: A5;\n\t\t\tattachment6: A6;\n\t\t\tattachment7: A7;\n\t\t}\n\t>;\n};\n\ntype DrawDescriptorBase = (\n\t| {\n\t\t\tmesh: Mesh;\n\t  }\n\t| {\n\t\t\tindexBuffer: buffer<uint>;\n\t  }\n\t| {}\n) & {\n\tindirect?: buffer<uint> | buffer<atomic<uint>>;\n\tindirectOffset?: int | uint;\n\tdepth?: texture2d<float>;\n\tdepthOnly?: boolean;\n\tdepthTest?: boolean;\n\tdepthCompare?:\n\t\t| 'greater'\n\t\t| 'less'\n\t\t| 'equal'\n\t\t| 'greater_equal'\n\t\t| 'less_equal'\n\t\t| 'not_equal'\n\t\t| 'always'\n\t\t| 'never';\n\tbackfaceCulling?: boolean;\n\tinstances?: int;\n};\n\n/**\n * Normal:\n * ```shadeup\n * drawAdvanced({\n *\tmesh: mesh::box(0.xyz, 100.xyz),\n *\tvertex: shader {\n *\t\t// ...\n *\t},\n *\tfragment: shader {\n *  \t// ...\n *\t},\n * });\n * ```\n *\n * Instancing:\n * ```shadeup\n * drawAdvanced({\n *\tmesh: mesh::box(0.xyz, 100.xyz),\n *\tvertex: shader {\n *\t\tin.instanceIndex;\n *\t},\n *\tfragment: shader {\n *  \t// ...\n *\t},\n *  instances: 100,\n * });\n * ```\n *\n * Indirect:\n * ```shadeup\n * let mesh = mesh::box(0.xyz, 100.xyz);\n *\n * let indirectBuffer = buffer<uint>(5);\n * indirectBuffer[0] = uint(m.getTriangles().len()); // indexCount\n * indirectBuffer[1] = 1; // instanceCount\n * indirectBuffer[2] = 0; // firstIndex\n * indirectBuffer[3] = 0; // vertexOffset\n * indirectBuffer[4] = 0; // firstInstance\n *\n * drawAdvanced({\n *\tmesh: mesh::box(0.xyz, 100.xyz),\n *\tvertex: shader {\n *\t\t// ...\n *\t},\n *\tfragment: shader {\n *  \t// ...\n *\t},\n *  indirect: indirectBuffer,\n * });\n * ```\n *\n * Attachments:\n * ```shadeup\n * let mesh = mesh::box(0.xyz, 100.xyz);\n * let color = texture2d<float4>(100.xy);\n * let normal = texture2d<float3>(100.xy);\n * let depth = texture2d<float>(100.xy, \"depth\");\n *\n * drawAdvanced({\n * \tmesh: mesh,\n * \tvertex: shader {\n * \t // ...\n * \t},\n * \tfragment: shader {\n * \t out.attachment0 = float4(1, 0, 0, 1);\n * \t out.attachment1 = float3(0, 0, 1);\n * \t},\n * \tdepth: depth, // Override depth buffer\n * \tattachments: [color, normal],\n * });\n */\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5, A6, A7>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings8<A0, A1, A2, A3, A4, A5, A6, A7>\n): void;\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5, A6>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings7<A0, A1, A2, A3, A4, A5, A6>\n): void;\nexport function drawAdvanced<A0, A1, A2, A3, A4, A5>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings6<A0, A1, A2, A3, A4, A5>\n): void;\nexport function drawAdvanced<A0, A1, A2, A3, A4>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings5<A0, A1, A2, A3, A4>\n): void;\nexport function drawAdvanced<A0, A1, A2, A3>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings4<A0, A1, A2, A3>\n): void;\nexport function drawAdvanced<A0, A1, A2>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings3<A0, A1, A2>\n): void;\nexport function drawAdvanced<A0, A1>(\n\tdescriptor: DrawDescriptorBase & AttachmentBindings2<A0, A1>\n): void;\nexport function drawAdvanced<A0>(descriptor: DrawDescriptorBase & AttachmentBindings1<A0>): void;\n\nexport function drawAdvanced(\n\tdescriptor: DrawDescriptorBase & {\n\t\tvertex: shader<ShaderInput, ShaderOutput>;\n\t\tfragment: shader<ShaderInput, ShaderOutput>;\n\t}\n): void;\nexport function drawAdvanced(descriptor: any): void {\n\t(window as any).__shadeup_dispatch_draw_advanced(descriptor);\n}\n\nexport function draw(\n\tgeometry: Mesh,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n): void;\nexport function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\nexport function draw(\n\tfirst: Mesh | DrawDescriptorBase | shader<ShaderInput, ShaderOutput>,\n\tsecond?: shader<ShaderInput, ShaderOutput> | number,\n\tthird?: shader<ShaderInput, ShaderOutput>\n) {\n\tif ('vertices' in first && second && third) {\n\t\t(window as any).__shadeup_dispatch_draw_geometry(first, second, third);\n\t} else if (first && !second && !third) {\n\t\t(window as any).__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n\t}\n}\n\nexport function drawFullscreen(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\nexport function drawFullscreen(\n\tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\n\tsecond?: shader<ShaderInput, ShaderOutput>,\n\tthird?: shader<ShaderInput, ShaderOutput>\n) {\n\tif ('vertices' in first && second && third) {\n\t\t(window as any).__shadeup_dispatch_draw_geometry(first, second, third);\n\t} else if (first && !second && !third) {\n\t\t(window as any).__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n\t}\n}\n\nexport function drawAlt2(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void {}\n\nexport function drawCount(\n\ttriCount: number,\n\tvertexShader: shader<ShaderInput, ShaderOutput>,\n\tpixelShader: shader<ShaderInput, ShaderOutput>\n) {\n\t__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n}\n\nexport function drawAttributes<T extends { [key: string]: any }, X, Y>(\n\tindexBuffer: buffer<uint>,\n\tbuffers:\n\t\t| Map<keyof T, buffer<any>>\n\t\t| {\n\t\t\t\t[key in keyof T]: buffer<T[key]>;\n\t\t  },\n\tvertexShader: shader<T, X>,\n\tpixelShader: shader<X, Y>\n) {\n\t__shadeup_dispatch_draw_attributes(indexBuffer, buffer, vertexShader, pixelShader);\n}\nexport function computeIndirect(\n\tindirectBuffer: buffer<uint> | buffer<atomic<uint>>,\n\tindirectOffset: int,\n\tcomputeShader: shader<any, any, any>\n) {\n\t(window as any).__shadeup_dispatch_compute_indirect(\n\t\tindirectBuffer,\n\t\tindirectOffset,\n\t\tcomputeShader\n\t);\n}\n"
  },
  {
    "path": "lang/shadeup/library/examples/deferred.shadeup",
    "content": "let depth = texture2d<float>(env.screenSize, \"depth\");\nlet albedo = texture2d<float4>(env.screenSize, \"16bit\");\nlet normal = texture2d<float4>(env.screenSize, \"16bit\");\n\nfn randNeg(seed: int) { return (rand(seed) - 0.5) * 2; }\n\nfn main() {\n\tlet lights: float3[] = [];\n\n\tlet lightXZArea = 400.0;\n\tlet lightYArea = 200.0;\n\n\tfor (let i = 0; i < 400; i++) {\n\t\tlights.push(\n\t\t\tlerp(\n\t\t\t\t(randNeg(i * 3 + 0) * lightXZArea, randNeg(i * 3 + 1) * lightYArea, randNeg(i * 3 + 2) * lightXZArea),\n\t\t\t\t(randNeg(i * 6 + 0) * lightXZArea, randNeg(i * 6 + 1) * lightYArea, randNeg(i * 6 + 2) * lightXZArea),\n\t\t\t\tsin(env.time / 1000.0 + i)\n\t\t\t)\n\t\t);\n\t}\n\n\tlet projectionMatrix = matrix::perspective(120.0, env.screenSize.x / env.screenSize.y, 1.0, 2000.0);\n\tlet t = env.time / 1000.0;\n\tlet viewMatrix = (\n\t\tmatrix::lookAt((sin(t), 0.5, cos(t)) * 400.0, 0.xyz, (0, 1.0, 0))\n\t);\n\tlet viewProjMatrix = projectionMatrix * viewMatrix;\n\tif (true) {\n\t\tviewProjMatrix = env.camera.getPerspectiveMatrix() * env.camera.getWorldToViewMatrix();\n\t}\n\tlet viewProjMatrixInv = inverse(viewProjMatrix);\n\n\tlet meshes = [\n\t\tmesh::box((sin(t * 2) * 100.0, 0.0, cos(t * 2) * 100.0), 100.xyz),\n\t\tmesh::box((0, -50.1, 0), (1000, 0.1, 1000))\n\t];\n\n\tfor (let m of meshes)\n\t\tdrawAdvanced({\n\t\t\tmesh: m,\n\t\t\tattachments: [albedo, normal],\n\t\t\tdepth: depth,\n\t\t\tvertex: shader {\n\t\t\t\tout.position = viewProjMatrix * (in.position, 1);\n\t\t\t},\n\t\t\tfragment: shader {\n\t\t\t\tout.attachment0 = (0.4.xyz, 1.0);\n\t\t\t\tout.attachment1 = (in.normal, 1);\n\t\t\t}\n\t\t});\n\t\n\tdraw(shader{\n\t\tlet d = depth[floor(in.uv * depth.size)];\n\t\tlet a = albedo.sample(in.uv);\n\t\tlet n = normal.sample(in.uv);\n\n\t\tlet posClip = float4(in.uv.x * 2.0 - 1.0, (1.0 - in.uv.y) * 2.0 - 1.0, d, 1.0);\n\t\tlet posWorldW = viewProjMatrixInv * posClip;\n\t\tlet posWorld = posWorldW.xyz / posWorldW.www;\n\t\t\n\t\tlet finalColor = 0.0.xyz;\n\n\t\tfor (let i = 0; i < lights.len(); i++) {\n\t\t\tlet L = lights[i].xyz - posWorld;\n\t\t\tlet radius = 200.0;\n\t\t\tlet color = lerp((0.3, 0.2, 0.8), (0.1, 0.7, 0.7), rand(float(i) / float(lights.len())));\n\t\t\tlet distance = length(L);\n\t\t\tif (distance <= radius) {\n\t\t\t\tlet lambert = max(dot(n.xyz, normalize(L)), 0.0);\n\t\t\t\tfinalColor += lambert * pow((1.0 - distance / radius),  2.0) * color * a.xyz;\n\t\t\t}\n\t\t}\n\t\n\t\tfinalColor += 0.5 * a.xyz;\n\n\t\tout.color = (finalColor, 1);\n\n\t\tlet cornerNormal = normal.sample(in.uv * 10.0);\n\t\tlet cornerDepth = depth.sample((in.uv - (0.1, 0.0)) * 10.0);\n\t\tif (in.uv.x < 0.1 && in.uv.y < 0.1) {\n\t\t\tout.color = (cornerNormal + 1.0) / 2.0;\n\t\t} else if (in.uv.x < 0.2 && in.uv.y < 0.1) {\n\t\t\tout.color = cornerDepth;\n\t\t}\n\t});\n\n\talbedo.clear();\n\tnormal.clear();\n\tdepth.clear();\n}"
  },
  {
    "path": "lang/shadeup/library/examples/shadow-map.shadeup",
    "content": "const shadowMapSize = 4096;\n\nlet albedo = texture2d<float4>(env.screenSize, \"16bit\");\nlet normal = texture2d<float4>(env.screenSize, \"16bit\");\nlet shadow = texture2d<float>(shadowMapSize.xy, \"depth-32\");\n\nfn main() {\n\tlet sun = (sin(env.time / 1000.0), 1, 0.5) * 600.0;\n\tenv.camera.near = 20.0;\n\tenv.camera.far = 20000.0;\n\t\n\tlet sunProjectionMatrix = matrix::perspective(90.0, 1.0, env.camera.near, env.camera.far);\n\tlet sunViewMatrix = matrix::lookAt(sun, 0.xyz, (0, 1.0, 0));\n\tlet sunViewProjMatrix = sunProjectionMatrix * sunViewMatrix;\n\t\n\tlet viewProjMatrix = env.camera.getPerspectiveMatrix() * env.camera.getWorldToViewMatrix();\n\n\tlet t = env.time / 1000.0;\n\tlet cube = mesh::box((sin(t * 2) * 100.0, 0.0, cos(t * 2) * 100.0), 100.xyz);\n\tlet ground = mesh::box((0, -50.1, 0), (1000, 0.1, 1000));\n\t\n\tlet meshes = [cube, ground];\n\t\n\tfor (let m of meshes)\n\tdrawAdvanced({\n\t\tmesh: m,\n\t\tdepth: shadow,\n\t\tdepthOnly: true,\n\t\tvertex: shader {\n\t\t\tout.position = sunViewProjMatrix * (in.position, 1);\n\t\t},\n\t\tfragment: shader {}\n\t});\n\n\tfor (let m of meshes)\n\tdraw(m,\n\t\tshader {\n\t\t\tout.position = viewProjMatrix * (in.position, 1);\n\t\t},\n\t\tshader {\n\t\t\tlet posFromLight = sunViewProjMatrix * (in.position, 1.0);\n\t\t\tposFromLight /= posFromLight.w;\n\t\t\t\n\t\t\tlet shadowPos = (posFromLight.xy * (0.5, -0.5) + 0.5.xy, posFromLight.z);\n\n\n\t\t\tlet visibility = 0.0;\n\t\t\tfor (let y = -1; y <= 1; y++) {\n\t\t\t\tfor (let x = -1; x <= 1; x++) {\n\t\t\t\t\tlet offset = float2(x, y) * (1.0 / shadowMapSize);\n\n\t\t\t\t\tlet sampVal = shadow.sample(shadowPos.xy + offset).x;\n\t\t\t\t\tlet compVal = shadowPos.z - 0.00007;\n\t\t\t\t\t\n\t\t\t\t\tvisibility += compVal < sampVal ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisibility /= 9.0;\n\n\t\t\tlet lambertFactor = max(dot(normalize(sun - in.position), in.normal), 0.0);\n\t\t\tlet lightingFactor = min(0.2 + visibility * lambertFactor, 1.0);\n\n\t\t\tout.color = float4(lightingFactor * 0.8.xyz, 1.0);\n\t\t}\n\t);\n\n\talbedo.clear();\n\tnormal.clear();\n\tshadow.clear();\n}"
  },
  {
    "path": "lang/shadeup/library/examples/transparency.shadeup",
    "content": "struct LinkedListElement {\n  pub color: float4,\n  pub depth: float,\n  pub next: uint\n};\n\nlet maxScreenSize = env.screenSize;\n\nlet numPixels = int(maxScreenSize.x * maxScreenSize.y);\n\nlet numFragments = buffer<atomic<uint>>(1);\n\nlet heads = buffer<atomic<uint>>(numPixels);\nlet headsInit = buffer<atomic<uint>>(numPixels);\nfor (let i = 0; i < numPixels; i++) { headsInit[i] = atomic<uint>(0xffffffu); }\nheadsInit.upload();\n\n\nlet linkedItems = buffer<LinkedListElement>(numPixels * 4);\n\n\n/*linkedItems[0] = LinkedListElement {\n\tcolor: 0.xyzw,\n\tdepth: 1.0,\n\tnext: 2u\n};*/\n\n//linkedItems.upload();\n\n\n\nfn main() {\n\tstatGraph(\"dt\", env.deltaTime * 1000.0);\n\theads.write(headsInit);\n\tnumFragments[0] = atomic<uint>(0u);\n\t\n\tconst colors = [\n\t\t(1.0, 0.0, 0.0),\n\t\t(0.0, 1.0, 0.0),\n\t\t(0.0, 0.0, 1.0),\n\t\t(1.0, 0.0, 1.0),\n\t\t(1.0, 1.0, 0.0),\n\t\t(0.0, 1.0, 1.0),\n\t];\n\n\n\n\n\tlet mat = env.camera.getTransformToViewMatrix(0.xyz, 1.xyz, 0.xyzw);\n\tfor (let (x, y) of 4.xy) {\n\t\tlet instance = uint(y * 4 + x);\n\t\tdraw(\n\t\t\tmesh::box((x, 0, y) * 100.0 - (200, 0, 200), 90.xyz),\n\t\t\tshader {\n\t\t\t\tout.position = mat * (in.position, 1);\n\t\t\t},\n\t\t\tshader {\n\t\t\t\tlet pixel = in.screen;\n\t\t\t\tif (pixel.x < maxScreenSize.x && pixel.y < maxScreenSize.y) {\n\t\t\t\t\tlet headIndex = int(pixel.y * maxScreenSize.x + pixel.x);\n\t\t\t\t\tlet fragIndex = numFragments[0].add(1u);\n\t\t\t\t\tif (int(fragIndex) < numPixels * 4) {\n\t\t\t\t\t\tlet lastHead = heads[headIndex].exchange(fragIndex);\n\t\t\t\t\t\tlinkedItems[int(fragIndex)] = LinkedListElement {\n\t\t\t\t\t\t\tdepth: in.clipPosition.z,\n\t\t\t\t\t\t\tnext: lastHead,\n\t\t\t\t\t\t\tcolor: float4(colors[int(instance % 6u)], 0.3)\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlinkedItems[int(fragIndex)].depth = in.clipPosition.z;\n\t\t\t\t\t\tlinkedItems[int(fragIndex)].next = lastHead;\n\t\t\t\t\t\tlinkedItems[int(fragIndex)].color = float4(colors[int(instance % 6u)], 0.3);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tdraw(shader {\n\t\tlet pixel = in.screen;\n\t\tif (pixel.x < maxScreenSize.x && pixel.y < maxScreenSize.y) {\n\t\t\tlet headsIndex = uint(pixel.y * maxScreenSize.x + pixel.x);\n\n\t\t\t// The maximum layers we can process for any pixel\n\t\t\tconst maxLayers = 24u;\n\n\t\t\tlet layers: LinkedListElement[24];\n\n\t\t\tlet numLayers = 0u;\n\t\t\tlet elementIndex = heads[headsIndex].load();\n\t\t\t// copy the list elements into an array up to the maximum amount of layers\n\t\t\twhile (elementIndex < 0xffffffu && numLayers < maxLayers) {\n\t\t\t\tlayers[numLayers] = linkedItems[elementIndex];\n\t\t\t\tnumLayers++;\n\t\t\t\telementIndex = linkedItems[elementIndex].next;\n\t\t\t}\n\t\t\t\n\t\t\tif (numLayers == 0u) {\n\t\t\t}else{\t\t\n\t\t\t\t// sort the fragments by depth\n\t\t\t\tfor (let i = 1u; i < numLayers; i++) {\n\t\t\t\t\tlet toInsert = layers[i];\n\t\t\t\t\tlet j = i;\n\n\t\t\t\t\twhile (j > 0u && toInsert.depth > layers[j - 1u].depth) {\n\t\t\t\t\t\tlayers[j] = layers[j - 1u];\n\t\t\t\t\t\tj--;\n\t\t\t\t\t}\n\n\t\t\t\t\tlayers[j] = toInsert;\n\t\t\t\t}\n\n\t\t\t\t// pre-multiply alpha for the first layer\n\t\t\t\tlet color = float4(layers[0].color.a * layers[0].color.rgb, layers[0].color.a);\n\n\t\t\t\t// blend the remaining layers\n\t\t\t\tfor (let i = 1u; i < numLayers; i++) {\n\t\t\t\t\tlet mixed = lerp(color.rgb, layers[i].color.rgb, layers[i].color.a);\n\t\t\t\t\tcolor = float4(mixed, color.a);\n\t\t\t\t}\n\n\t\t\t\tout.color = color;\n\t\t\t}\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "lang/shadeup/library/files.ts",
    "content": "import std from './std.ts?raw';\nimport ui from './ui.ts?raw';\nimport native from './native.ts?raw';\nimport buffer from './buffer.ts?raw';\nimport texture from './texture.ts?raw';\nimport physics from './physics.ts?raw';\nimport drawIndexed from './drawIndexed.ts?raw';\nimport drawCount from './drawCount.ts?raw';\nimport drawAttributes from './drawAttributes.ts?raw';\nimport paint from './paint.ts?raw';\nimport mesh from './mesh.shadeup?raw';\nimport geo from './geo.shadeup?raw';\nimport textures from './textures.shadeup?raw';\nimport common from './common.shadeup?raw';\nimport sdf from './sdf.shadeup?raw';\n\nexport default {\n\tshadeup: {\n\t\tmesh,\n\t\ttextures,\n\t\tcommon,\n\t\tsdf,\n\t\tgeo\n\t},\n\tts: {\n\t\tstd,\n\t\tui,\n\t\tnative,\n\t\tpaint,\n\t\tbuffer,\n\t\ttexture,\n\t\tdrawIndexed,\n\t\tdrawAttributes,\n\t\tdrawCount,\n\t\tphysics\n\t}\n};\n"
  },
  {
    "path": "lang/shadeup/library/geo.shadeup",
    "content": "struct GeoSegment {\n\tstart: float2,\n\tend: float2,\n\tkind: int,\n\tarcRadius: float,\n\tarcStart: float,\n\tarcEnd: float\n}\n\nstruct GeoPoly {\n\tsegments: GeoSegment[]\n}\n\ntrait Geometry {\n\tfn area(self) -> float;\n\tfn perimeter(self) -> float;\n\tfn discretize(self) -> GeoPoly;\n}\n\nimpl Geometry for GeoPoly {\n\tpub fn area(self) -> float {\n\t\treturn 0.0;\n\t}\n\n\tpub fn perimeter(self) -> float {\n\t\treturn 0.0;\n\t}\n\n\tpub fn discretize(self) -> GeoPoly {\n\t\treturn self.clone();\n\t}\n}"
  },
  {
    "path": "lang/shadeup/library/mesh.shadeup",
    "content": "\npub struct Mesh {\n\tvertices: float3[];\n\ttriangles: int[];\n\tnormals: float3[];\n\ttangents: float3[];\n\tbitangents: float3[];\n\tuvs: float2[];\n\tcolors: float4[];\n\tpub symbol: any;\n}\n\nimpl Mesh {\n\tpub fn rect(self, size: float2) {\n\t\tlet index = self.vertices.len();\n\n\t\tself.vertices.push((-size.x / 2, -size.y / 2, 0));\n\t\tself.vertices.push((size.x / 2, -size.y / 2, 0));\n\t\tself.vertices.push((size.x / 2, size.y / 2, 0));\n\t\tself.vertices.push((-size.x / 2, size.y / 2, 0));\n\n\t\tself.triangles.push(index + 2);\n\t\tself.triangles.push(index + 1);\n\t\tself.triangles.push(index + 0);\n\n\t\tself.triangles.push(index + 0);\n\t\tself.triangles.push(index + 3);\n\t\tself.triangles.push(index + 2);\n\n\t\tself.normals.push((0, 0, 1));\n\t\tself.normals.push((0, 0, 1));\n\t\tself.normals.push((0, 0, 1));\n\t\tself.normals.push((0, 0, 1));\n\n\t\tself.tangents.push((1, 0, 0));\n\t\tself.tangents.push((1, 0, 0));\n\t\tself.tangents.push((1, 0, 0));\n\t\tself.tangents.push((1, 0, 0));\n\n\t\tself.bitangents.push((0, 1, 0));\n\t\tself.bitangents.push((0, 1, 0));\n\t\tself.bitangents.push((0, 1, 0));\n\t\tself.bitangents.push((0, 1, 0));\n\n\t\tself.uvs.push((0, 0));\n\t\tself.uvs.push((1, 0));\n\t\tself.uvs.push((0, 1));\n\t\tself.uvs.push((1, 1));\n\t}\n\n\tpub fn quad(self, position: float3, direction: float3, right: float3, size: float2) {\n\t\tlet up = normalize(cross(right, direction));\n\n\t\tlet halfSize = size / 2.0;\n\n\t\tlet index = self.vertices.len();\n\t\t\n\t\tself.vertices.push(position + right * -halfSize.x + up * halfSize.y);\n\t\tself.vertices.push(position + right * halfSize.x + up * halfSize.y);\n\t\tself.vertices.push(position + right * halfSize.x + up * -halfSize.y);\n\t\tself.vertices.push(position + right * -halfSize.x + up * -halfSize.y);\n\n\t\tself.triangles.push(index + 0);\n\t\tself.triangles.push(index + 1);\n\t\tself.triangles.push(index + 2);\n\n\t\tself.triangles.push(index + 2);\n\t\tself.triangles.push(index + 3);\n\t\tself.triangles.push(index + 0);\n\n\t\tself.normals.push(direction);\n\t\tself.normals.push(direction);\n\t\tself.normals.push(direction);\n\t\tself.normals.push(direction);\n\n\t\tself.tangents.push(right);\n\t\tself.tangents.push(right);\n\t\tself.tangents.push(right);\n\t\tself.tangents.push(right);\n\n\t\tself.bitangents.push(up);\n\t\tself.bitangents.push(up);\n\t\tself.bitangents.push(up);\n\t\tself.bitangents.push(up);\n\n\t\tself.uvs.push((1, 0));\n\t\tself.uvs.push((0, 0));\n\t\tself.uvs.push((0, 1));\n\t\tself.uvs.push((1, 1));\n\t}\n\n\tpub fn box(self, size: float3) {\n\t\tlet halfSize = size / 2.0;\n\n\t\tconst UP = (0, 1.0, 0);\n\t\tconst DOWN = (0, -1.0, 0);\n\t\tconst LEFT = (-1.0, 0, 0);\n\t\tconst RIGHT = (1.0, 0, 0);\n\t\tconst FORWARD = (0, 0, 1.0);\n\t\tconst BACK = (0, 0, -1.0);\n\n\t\t// Up\n\t\tself.quad(UP * halfSize.y, UP, LEFT, (size.x, size.z));\n\n\t\t// Down\n\t\tself.quad(DOWN * halfSize.y, DOWN, RIGHT, (size.x, size.z));\n\n\t\t// Left\n\t\tself.quad(LEFT * halfSize.x, LEFT, BACK, (size.z, size.y));\n\n\t\t// Right\n\t\tself.quad(RIGHT * halfSize.x, RIGHT, FORWARD, (size.z, size.y));\n\n\t\t// Forward\n\t\tself.quad(FORWARD * halfSize.z, FORWARD, LEFT, (size.x, size.y));\n\n\t\t// Back\n\t\tself.quad(BACK * halfSize.z, BACK, RIGHT, (size.x, size.y));\n\t}\n\n\tpub fn rectAt(self, minPos: float2, maxPos: float2) {\n\t\tself.rect(maxPos - minPos);\n\t\tself.translate((minPos, 0));\n\t}\n\n\tpub fn circle(self, pos: float2, radius: float, vertices: int = 32) {\n\n\t}\n\n\tpub fn uvSphere(self, pos: float3, radius: float, vertices: int = 32, rings: int = 16) {\n\t\tlet index = self.vertices.len();\n\n\t\tlet verticesPerRing = vertices + 1;\n\n\t\tfor (let i = 0; i <= rings; i++) {\n\t\t\tlet y = i / float(rings);\n\t\t\tlet angleY = y * PI;\n\n\t\t\tlet posY = cos(angleY);\n\t\t\tlet radiusY = sin(angleY);\n\n\t\t\tfor (let j = 0; j <= vertices; j++) {\n\t\t\t\tlet x = j / float(vertices);\n\t\t\t\tlet angleX = x * PI * 2;\n\n\t\t\t\tlet posX = cos(angleX);\n\t\t\t\tlet posZ = sin(angleX);\n\n\t\t\t\tself.vertices.push((posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\n\t\t\t\tself.normals.push(normalize((posX * radiusY, posY, posZ * radiusY)));\n\t\t\t\t\n\t\t\t\tlet tangent = normalize((posZ, 0, -posX));\n\t\t\t\tlet bitangent = normalize(cross(self.normals[self.normals.len() - 1], tangent));\n\n\t\t\t\tself.tangents.push(tangent);\n\t\t\t\tself.bitangents.push(bitangent);\n\t\t\t\tself.uvs.push((x, y));\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < rings; i++) {\n\t\t\tfor (let j = 0; j < vertices; j++) {\n\t\t\t\tlet i0 = i * verticesPerRing + j;\n\t\t\t\tlet i1 = i0 + 1;\n\t\t\t\tlet i2 = i0 + verticesPerRing;\n\t\t\t\tlet i3 = i2 + 1;\n\n\t\t\t\tself.triangles.push(index + i0);\n\t\t\t\tself.triangles.push(index + i1);\n\t\t\t\tself.triangles.push(index + i2);\n\n\t\t\t\tself.triangles.push(index + i2);\n\t\t\t\tself.triangles.push(index + i1);\n\t\t\t\tself.triangles.push(index + i3);\n\t\t\t}\n\t\t}\n\n\t\tself.translate(pos);\n\t}\n\n\tpub fn icoSphere(self, pos: float3, radius: float, subdivisions: int = 1) {\n\t\tlet index = self.vertices.len();\n\n\t\tlet t = (1.0 + sqrt(5.0)) / 2.0;\n\n\t\tlet vertices: float3[] = [\n\t\t\t(-1, t, 0),\n\t\t\t(1, t, 0),\n\t\t\t(-1, -t, 0),\n\t\t\t(1, -t, 0),\n\t\t\t(0, -1, t),\n\t\t\t(0, 1, t),\n\t\t\t(0, -1, -t),\n\t\t\t(0, 1, -t),\n\t\t\t(t, 0, -1),\n\t\t\t(t, 0, 1),\n\t\t\t(-t, 0, -1),\n\t\t\t(-t, 0, 1),\n\t\t];\n\n\t\tlet triangles: int3[] = [\n\t\t\t(0, 11, 5),\n\t\t\t(0, 5, 1),\n\t\t\t(0, 1, 7),\n\t\t\t(0, 7, 10),\n\t\t\t(0, 10, 11),\n\t\t\t(1, 5, 9),\n\t\t\t(5, 11, 4),\n\t\t\t(11, 10, 2),\n\t\t\t(10, 7, 6),\n\t\t\t(7, 1, 8),\n\t\t\t(3, 9, 4),\n\t\t\t(3, 4, 2),\n\t\t\t(3, 2, 6),\n\t\t\t(3, 6, 8),\n\t\t\t(3, 8, 9),\n\t\t\t(4, 9, 5),\n\t\t\t(2, 4, 11),\n\t\t\t(6, 2, 10),\n\t\t\t(8, 6, 7),\n\t\t\t(9, 8, 1),\n\t\t];\n\n\t\tfor (let i = 0; i < vertices.len(); i++) {\n\t\t\tself.vertices.push(normalize(vertices[i]) * radius);\n\t\t}\n\n\t\tfor (let i = 0; i < triangles.len(); i++) {\n\t\t\tself.triangles.push(index + triangles[i].x);\n\t\t\tself.triangles.push(index + triangles[i].y);\n\t\t\tself.triangles.push(index + triangles[i].z);\n\t\t}\n\n\t\tfor (let i = 0; i < subdivisions; i++) {\n\t\t\tlet newTriangles: int = [];\n\n\t\t\tfor (let j = 0; j < self.triangles.len(); j += 3) {\n\t\t\t\tlet i0 = self.triangles[j + 0];\n\t\t\t\tlet i1 = self.triangles[j + 1];\n\t\t\t\tlet i2 = self.triangles[j + 2];\n\n\t\t\t\tlet v0 = self.vertices[i0];\n\t\t\t\tlet v1 = self.vertices[i1];\n\t\t\t\tlet v2 = self.vertices[i2];\n\n\t\t\t\tlet v3 = normalize((v0 + v1) / 2.0);\n\t\t\t\tlet v4 = normalize((v1 + v2) / 2.0);\n\t\t\t\tlet v5 = normalize((v2 + v0) / 2.0);\n\n\t\t\t\tlet i3 = self.vertices.len();\n\t\t\t\tlet i4 = i3 + 1;\n\t\t\t\tlet i5 = i3 + 2;\n\n\t\t\t\tself.vertices.push(v3 * radius);\n\t\t\t\tself.vertices.push(v4 * radius);\n\t\t\t\tself.vertices.push(v5 * radius);\n\n\t\t\t\tnewTriangles.push(i0, i3, i5);\n\t\t\t\tnewTriangles.push(i3, i1, i4);\n\t\t\t\tnewTriangles.push(i3, i4, i5);\n\t\t\t\tnewTriangles.push(i5, i4, i2);\n\t\t\t}\n\n\t\t\tself.triangles = newTriangles;\n\t\t}\n\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\n\t\t\tlet normal = normalize(self.vertices[i]);\n\t\t\tlet tangent = normalize((normal.z, 0, -normal.x));\n\t\t\tlet bitangent = normalize(cross(normal, tangent));\n\t\t\tself.normals.push(normal);\n\t\t\tself.tangents.push(tangent);\n\t\t\tself.bitangents.push(bitangent);\n\t\t}\n\n\t\tfor (let i = 0; i < self.triangles.len(); i += 3) {\n\t\t\tlet i0 = self.triangles[i + 0];\n\t\t\tlet i1 = self.triangles[i + 1];\n\t\t\tlet i2 = self.triangles[i + 2];\n\n\t\t\tlet v0 = self.vertices[i0];\n\t\t\tlet v1 = self.vertices[i1];\n\t\t\tlet v2 = self.vertices[i2];\n\n\t\t\tlet uv0 = float2(atan2(v0.z, v0.x) / PI / 2.0 + 0.5, asin(v0.y) / PI + 0.5);\n\t\t\tlet uv1 = float2(atan2(v1.z, v1.x) / PI / 2.0 + 0.5, asin(v1.y) / PI + 0.5);\n\t\t\tlet uv2 = float2(atan2(v2.z, v2.x) / PI / 2.0 + 0.5, asin(v2.y) / PI + 0.5);\n\n\t\t\tself.uvs.push(uv0);\n\t\t\tself.uvs.push(uv1);\n\t\t\tself.uvs.push(uv2);\n\t\t}\n\n\t\tself.translate(pos);\n\t}\n\n\tpub fn cylinder(self, pos: float3, radius: float, height: float, vertices: int = 32) {\n\t\t\n\n\t\tself.translate(pos);\n\n\t}\n\n\tpub fn capsule(self, pos: float3, radius: float, height: float, vertices: int = 32) {\n\t\t\n\n\t\tself.translate(pos);\n\t}\n\n\tpub fn cone(self, pos: float3, radius: float, height: float, vertices: int = 32) {\n\t\tlet index = self.vertices.len();\n\n\n\t\tself.translate(pos);\n\t}\n\n\tpub fn plane(self, pos: float3, size: float2, subdivisions: int2 = 1) {\n\t\tlet index = self.vertices.len();\n\n\t\tlet halfSize = size / 2.0;\n\n\t\tfor (let i = 0; i <= subdivisions.x; i++) {\n\t\t\tlet x = i / float(subdivisions.x);\n\t\t\tlet posX = x * size.x - halfSize.x;\n\n\t\t\tfor (let j = 0; j <= subdivisions.y; j++) {\n\t\t\t\tlet y = j / float(subdivisions.y);\n\t\t\t\tlet posY = y * size.y - halfSize.y;\n\n\t\t\t\tself.vertices.push((posX, 0, posY));\n\t\t\t\tself.normals.push((0, 1, 0));\n\t\t\t\tself.tangents.push((1, 0, 0));\n\t\t\t\tself.bitangents.push((0, 0, 1));\n\t\t\t\tself.uvs.push((x, y));\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < subdivisions.x; i++) {\n\t\t\tfor (let j = 0; j < subdivisions.y; j++) {\n\t\t\t\tlet i0 = i * (subdivisions.y + 1) + j;\n\t\t\t\tlet i1 = i0 + 1;\n\t\t\t\tlet i2 = i0 + subdivisions.y + 1;\n\t\t\t\tlet i3 = i2 + 1;\n\n\t\t\t\tself.triangles.push(index + i0);\n\t\t\t\tself.triangles.push(index + i1);\n\t\t\t\tself.triangles.push(index + i2);\n\n\t\t\t\tself.triangles.push(index + i2);\n\t\t\t\tself.triangles.push(index + i1);\n\t\t\t\tself.triangles.push(index + i3);\n\t\t\t}\n\t\t}\n\n\t\tself.translate(pos);\n\t}\n\n\tpub fn translate(self, pos: float3): Mesh {\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\n\t\t\tself.vertices[i] += pos;\n\t\t}\n\n\t\treturn self;\n\t}\n\n\tpub fn rotate(self, quaternion: float4): Mesh {\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\n\t\t\tself.vertices[i] = quat::rotate(quaternion, self.vertices[i]);\n\t\t}\n\n\t\tfor (let i = 0; i < self.normals.len(); i++) {\n\t\t\tself.normals[i] = quat::rotate(quaternion, self.normals[i]);\n\t\t}\n\n\t\treturn self;\n\t}\n\n\tpub fn transform(self, matrix: float4x4): Mesh {\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\n\t\t\tself.vertices[i] = ((self.vertices[i], 1) * matrix).xyz;\n\t\t}\n\n\t\tfor (let i = 0; i < self.normals.len(); i++) {\n\t\t\tself.normals[i] = ((self.normals[i], 1) * matrix).xyz;\n\t\t}\n\n\t\treturn self;\n\t}\n\n\tpub fn scale(self, scale: float3): Mesh {\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\n\t\t\tself.vertices[i] *= scale;\n\t\t}\n\n\t\treturn self;\n\t}\n\n\tpub fn bounds(self): float3 {\n\t\tlet mn = 0.0.xyz;\n\t\tlet mx = 0.0.xyz;\n\n\t\tfor (let i = 0; i < self.vertices.len(); i++) {\n\t\t\tmn = min(mn, self.vertices[i]);\n\t\t\tmx = max(mx, self.vertices[i]);\n\t\t}\n\n\t\treturn mx - mn;\n\t}\n\n\tpub fn center(self): float3 {\n\t\tlet bounds = self.bounds();\n\t\treturn bounds / 2.0;\n\t}\n\n\tpub fn new() {\n\t\treturn Mesh {\n\t\t\tvertices: [],\n\t\t\ttriangles: [],\n\t\t\ttangents: [],\n\t\t\tbitangents: [],\n\t\t\tnormals: [],\n\t\t\tuvs: [],\n\t\t\tcolors: [],\n\t\t}\n\t}\n\n\tpub fn append(self, other: Mesh) {\n\t\tlet oldVertices = self.vertices.len();\n\t\tlet oldTriangles = self.triangles.len();\n\n\t\tself.vertices.append(other.vertices);\n\t\tself.triangles.append(other.triangles);\n\t\tself.normals.append(other.normals);\n\t\tself.tangents.append(other.tangents);\n\t\tself.bitangents.append(other.bitangents);\n\t\tself.uvs.append(other.uvs);\n\t\tself.colors.append(other.colors);\n\n\t\tfor (let i = oldTriangles; i < self.triangles.len(); i++) {\n\t\t\tself.triangles[i] += oldVertices;\n\t\t}\n\t}\n\n\tpub fn getVertices(self) {\n\t\treturn self.vertices;\n\t}\n\n\tpub fn getTriangles(self) {\n\t\treturn self.triangles;\n\t}\n\n\tpub fn getNormals(self) {\n\t\treturn self.normals;\n\t}\n\n\tpub fn getTangents(self) {\n\t\treturn self.tangents;\n\t}\n\n\tpub fn getBitangents(self) {\n\t\treturn self.bitangents;\n\t}\n\n\tpub fn getUVs(self) {\n\t\treturn self.uvs;\n\t}\n\n\tpub fn getColors(self) {\n\t\treturn self.colors;\n\t}\n\n\tpub fn setVertices(self, vertices: float3[]) {\n\t\tself.vertices = vertices;\n\t}\n\n\tpub fn setTriangles(self, triangles: int[]) {\n\t\tself.triangles = triangles;\n\t}\n\n\tpub fn setNormals(self, normals: float3[]) {\n\t\tself.normals = normals;\n\t}\n\n\tpub fn setTangents(self, tangents: float3[]) {\n\t\tself.tangents = tangents;\n\t}\n\n\tpub fn setBitangents(self, bitangents: float3[]) {\n\t\tself.bitangents = bitangents;\n\t}\n\n\tpub fn setUVs(self, uvs: float2[]) {\n\t\tself.uvs = uvs;\n\t}\n\n\tpub fn setColors(self, colors: float4[]) {\n\t\tself.colors = colors;\n\t}\n}\n\npub struct mesh {}\n\nimpl mesh {\n\tpub fn rect(pos: float2, size: float2) -> Mesh {\n\t\tlet g = Mesh::new();\n\t\tg.rectAt(pos, pos + size);\n\n\t\treturn g;\n\t}\n\n\tpub fn box(pos: float3, size: float3) -> Mesh {\n\t\tlet g = Mesh::new();\n\t\tg.box(size);\n\t\tg.translate(pos);\n\n\t\treturn g;\n\t}\n\n\tpub fn uvSphere(pos: float3, radius: float, vertices: int = 32, rings: int = 16) -> Mesh {\n\t\tlet g = Mesh::new();\n\t\tg.uvSphere(pos, radius, vertices, rings);\n\n\t\treturn g;\n\t}\n\n\tpub fn icoSphere(pos: float3, radius: float, subdivisions: int = 1) -> Mesh {\n\t\tlet g = Mesh::new();\n\t\tg.icoSphere(pos, radius, subdivisions);\n\n\t\treturn g;\n\t}\n\n\tpub fn plane(pos: float3, size: float2, subdivisions: int2 = 1) -> Mesh {\n\t\tlet g = Mesh::new();\n\t\tg.plane(pos, size, subdivisions);\n\n\t\treturn g;\n\t}\n\n\t/**\n\t* Returns a [-1, 1] position for a given index.\n\t*/\n\tpub fn triangleFromIndex(index: int): float2 {\n\t\tif (index == 0) {\n\t\t\treturn float2(-1, 1);\n\t\t} else if (index == 1) {\n\t\t\treturn float2(1, 1);\n\t\t} else if (index == 2) {\n\t\t\treturn float2(0, -1);\n\t\t} else {\n\t\t\treturn float2(0, 0);\n\t\t}\n\t}\n\n\tpub fn circleFromIndex(vertexIndex: int, vertices: int): float2 {\n\t\tvertexIndex = vertices - vertexIndex;\n\t\tlet numSlices = vertices / 3;\n\t\tlet sliceIndex = floor(float(vertexIndex) / float(vertices) * float(numSlices));\n\t\t\n\t\tlet incAngle = PI * 2.0 / float(numSlices);\n\t\tlet baseAngle = incAngle * float(sliceIndex);\n\n\t\tif (vertexIndex % 3 == 0) {\n\t\t\treturn float2(0, 0);\n\t\t} else if (vertexIndex % 3 == 1) {\n\t\t\treturn float2(cos(baseAngle), sin(baseAngle));\n\t\t} else {\n\t\t\treturn float2(cos(baseAngle + incAngle), sin(baseAngle + incAngle));\n\t\t}\n\t}\n\n\tpub fn rectFromIndex(index: int, vertices: int): float2 {\n\t\tlet x = index % vertices;\n\t\tlet y = index / vertices;\n\n\t\treturn float2(x, y) / float(vertices) * 2.0 - 1.0;\n\t}\n\n\tpub fn empty(numVerts: int = 0) -> Mesh {\n\t\tlet g = Mesh::new();\n\t\tif (numVerts > 0) {\n\t\t\tg.setVertices(array<float3>(numVerts, 0.xyz));\n\t\t\tg.setNormals(array<float3>(numVerts, 0.xyz));\n\t\t\tg.setTangents(array<float3>(numVerts, 0.xyz));\n\t\t\tg.setBitangents(array<float3>(numVerts, 0.xyz));\n\t\t\tg.setUVs(array<float2>(numVerts, 0.xy));\n\t\t\tg.setColors(array<float4>(numVerts, 0.xyzw));\n\t\t\tlet tris = array<int>(numVerts, 0);\n\t\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\t\ttris[i] = i;\n\t\t\t}\n\t\t\tg.setTriangles(tris);\n\t\t}\n\n\t\treturn g;\n\t}\n\n\tpub fn join(mesh1: Mesh, mesh2: Mesh) {\n\t\tlet g = Mesh::new();\n\t\tg.append(mesh1);\n\t\tg.append(mesh2);\n\n\t\treturn g;\n\t}\n\n\t// pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n\t// \tlet g = Mesh::new();\n\t// \tg.cylinder(pos, radius, height, vertices);\n\n\t// \treturn g;\n\t// }\n\n\t// pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n\t// \tlet g = Mesh::new();\n\t// \tg.capsule(pos, radius, height, vertices);\n\n\t// \treturn g;\n\t// }\n\n\t// pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n\t// \tlet g = Mesh::new();\n\t// \tg.cone(pos, radius, height, vertices);\n\n\t// \treturn g;\n\t// }\n}\n\npub struct Material {\n\tpub baseColor: float4,\n\tpub color: texture2d<float4>,\n\t\n\tpub normal: texture2d<float4>,\n\tpub normalScale: float2,\n\tpub roughness: texture2d<float4>,\n\tpub emissive: texture2d<float4>,\n\t\n\t\n\tpub metallic: texture2d<float4>,\n}\n\npub struct ModelPart {\n\tpub mesh: Mesh,\n\tpub material: Material,\n\tpub transform: float4x4,\n}\n\npub struct Model {\n\tpub parts: ModelPart[],\n}\n\nwindow.SHD_Mesh = Mesh;\nwindow.SHD_Model = Model;\nwindow.SHD_ModelPart = ModelPart;\nwindow.SHD_Material = Material;"
  },
  {
    "path": "lang/shadeup/library/mesh.ts",
    "content": ""
  },
  {
    "path": "lang/shadeup/library/native.ts",
    "content": "import { float4, float3, float, float2, bool, int } from '/std_math';\nimport { texture2d } from '/_std/texture';\nimport { Camera, Camera2d, quat } from '/_std/common';\n\nexport function shadeupMakeTextureFromUrl(url: string): texture2d<float4> {\n\treturn (window as any)['shadeupMakeTextureFromUrlNative'](url);\n}\n\nexport class FrameContext {\n\t/** Delta between the previous frame's time and this frame (in seconds */\n\tdeltaTime: float;\n\t/** Current time in seconds from the start of the renderer */\n\ttime: float;\n\t/** Canvas size in pixels */\n\tscreenSize: float2;\n\t/** Current frame index */\n\tframe: int;\n\n\t/** Mouse/touch screen input state for this frame */\n\tmouse: MouseInputState = new MouseInputState();\n\n\t/** Keyboard input state for this frame */\n\tkeyboard: KeyboardInputState = new KeyboardInputState();\n\n\t/** Controllable camera (Hold right click and use WASD to move) */\n\tcamera: Camera = new Camera();\n\n\tcamera2d: Camera2d = new Camera2d();\n\n\tconfigureCamera(options: {\n\t\tmode?: 'free' | 'orbit' | 'orbit-free';\n\n\t\tspinning?: boolean;\n\n\t\tinitialPosition?: float3;\n\t\tinitialPitch?: float;\n\t\tinitialYaw?: float;\n\n\t\tspeed?: float;\n\n\t\torbitTarget?: float3;\n\t\torbitDistance?: float;\n\t\torbitPitch?: float;\n\t\torbitYaw?: float;\n\t\torbitMinDistance?: float;\n\t\torbitMaxDistance?: float;\n\t\torbitMinPitch?: float;\n\t\torbitMaxPitch?: float;\n\t}) {}\n\n\t/**\n\t * Use external values from the host JavaScript environment.\n\t */\n\tinput<T>(key: string, defaultValue: T): T {\n\t\treturn defaultValue;\n\t}\n\n\t/**\n\t * Send values to the host JavaScript environment.\n\t */\n\toutput<T>(key: string, value: T) {}\n}\n\nexport class MouseInputState {\n\t/** Current mouse position relative to canvas in pixels ((0, 0) is the top left */\n\tscreen: float2;\n\t/** Current mouse position mapped from 0-1 in canvas space ((0, 0) is the top left while (1, 1) is the bottom right */\n\tuv: float2;\n\t/** Caches the mouse position relative to canvas in pixels when any mouse button is pressed (resets after subsequent presses */\n\tstartScreen: float2;\n\t/** Caches the mouse position mapped from 0-1 in canvas space when any mouse button is pressed (resets after subsequent presses */\n\tstartUv: float2;\n\t/** If dragging, this will be the delta between the start and current mouse position */\n\tdeltaUv: float2;\n\t/** If dragging, this will be the delta between the mouse position last frame and the current mouse position */\n\tframeDeltaUv: float2;\n\t/** If dragging, this will be the delta between the start and current mouse position */\n\tdeltaScreen: float2;\n\t/** If dragging, this will be the delta between the mouse position last frame and the current mouse position */\n\tframeDeltaScreen: float2;\n\t/** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\n\tbutton: [boolean, boolean, boolean] = [false, false, false];\n\t/** Mouse button pressed state for buttons 0-3 (left, middle, right) */\n\tclicked: [boolean, boolean, boolean] = [false, false, false];\n\t/** If currently dragging */\n\tdragging: bool;\n\t/** Accumulated mouse wheel movement for this frame in the range of -1 to 1 */\n\twheel: float;\n\t/** Rate of change */\n\tvelocity: float;\n\t/** Is the mouse focused within the screen */\n\tfocused: bool;\n}\n\nexport class KeyboardInputState {\n\t/** Is key down this frame */\n\tbackspace: bool;\n\n\t/** Is key down this frame */\n\ttab: bool;\n\n\t/** Is key down this frame */\n\tenter: bool;\n\n\t/** Is key down this frame */\n\tshiftLeft: bool;\n\n\t/** Is key down this frame */\n\tshiftRight: bool;\n\n\t/** Is key down this frame */\n\tcontrolLeft: bool;\n\n\t/** Is key down this frame */\n\tcontrolRight: bool;\n\n\t/** Is key down this frame */\n\taltLeft: bool;\n\n\t/** Is key down this frame */\n\taltRight: bool;\n\n\t/** Is key down this frame */\n\tpause: bool;\n\n\t/** Is key down this frame */\n\tcapsLock: bool;\n\n\t/** Is key down this frame */\n\tescape: bool;\n\n\t/** Is key down this frame */\n\tspace: bool;\n\n\t/** Is key down this frame */\n\tpageUp: bool;\n\n\t/** Is key down this frame */\n\tpageDown: bool;\n\n\t/** Is key down this frame */\n\tend: bool;\n\n\t/** Is key down this frame */\n\thome: bool;\n\n\t/** Is key down this frame */\n\tarrowLeft: bool;\n\n\t/** Is key down this frame */\n\tarrowUp: bool;\n\n\t/** Is key down this frame */\n\tarrowRight: bool;\n\n\t/** Is key down this frame */\n\tarrowDown: bool;\n\n\t/** Is key down this frame */\n\tprintScreen: bool;\n\n\t/** Is key down this frame */\n\tinsert: bool;\n\n\t/** Is key down this frame */\n\tdelete: bool;\n\n\t/** Is key down this frame */\n\tdigit0: bool;\n\n\t/** Is key down this frame */\n\tdigit1: bool;\n\n\t/** Is key down this frame */\n\tdigit2: bool;\n\n\t/** Is key down this frame */\n\tdigit3: bool;\n\n\t/** Is key down this frame */\n\tdigit4: bool;\n\n\t/** Is key down this frame */\n\tdigit5: bool;\n\n\t/** Is key down this frame */\n\tdigit6: bool;\n\n\t/** Is key down this frame */\n\tdigit7: bool;\n\n\t/** Is key down this frame */\n\tdigit8: bool;\n\n\t/** Is key down this frame */\n\tdigit9: bool;\n\n\t/** Is key down this frame */\n\tkeyA: bool;\n\n\t/** Is key down this frame */\n\tkeyB: bool;\n\n\t/** Is key down this frame */\n\tkeyC: bool;\n\n\t/** Is key down this frame */\n\tkeyD: bool;\n\n\t/** Is key down this frame */\n\tkeyE: bool;\n\n\t/** Is key down this frame */\n\tkeyF: bool;\n\n\t/** Is key down this frame */\n\tkeyG: bool;\n\n\t/** Is key down this frame */\n\tkeyH: bool;\n\n\t/** Is key down this frame */\n\tkeyI: bool;\n\n\t/** Is key down this frame */\n\tkeyJ: bool;\n\n\t/** Is key down this frame */\n\tkeyK: bool;\n\n\t/** Is key down this frame */\n\tkeyL: bool;\n\n\t/** Is key down this frame */\n\tkeyM: bool;\n\n\t/** Is key down this frame */\n\tkeyN: bool;\n\n\t/** Is key down this frame */\n\tkeyO: bool;\n\n\t/** Is key down this frame */\n\tkeyP: bool;\n\n\t/** Is key down this frame */\n\tkeyQ: bool;\n\n\t/** Is key down this frame */\n\tkeyR: bool;\n\n\t/** Is key down this frame */\n\tkeyS: bool;\n\n\t/** Is key down this frame */\n\tkeyT: bool;\n\n\t/** Is key down this frame */\n\tkeyU: bool;\n\n\t/** Is key down this frame */\n\tkeyV: bool;\n\n\t/** Is key down this frame */\n\tkeyW: bool;\n\n\t/** Is key down this frame */\n\tkeyX: bool;\n\n\t/** Is key down this frame */\n\tkeyY: bool;\n\n\t/** Is key down this frame */\n\tkeyZ: bool;\n\n\t/** Is key down this frame */\n\tmetaLeft: bool;\n\n\t/** Is key down this frame */\n\tmetaRight: bool;\n\n\t/** Is key down this frame */\n\tcontextMenu: bool;\n\n\t/** Is key down this frame */\n\tnumpad0: bool;\n\n\t/** Is key down this frame */\n\tnumpad1: bool;\n\n\t/** Is key down this frame */\n\tnumpad2: bool;\n\n\t/** Is key down this frame */\n\tnumpad3: bool;\n\n\t/** Is key down this frame */\n\tnumpad4: bool;\n\n\t/** Is key down this frame */\n\tnumpad5: bool;\n\n\t/** Is key down this frame */\n\tnumpad6: bool;\n\n\t/** Is key down this frame */\n\tnumpad7: bool;\n\n\t/** Is key down this frame */\n\tnumpad8: bool;\n\n\t/** Is key down this frame */\n\tnumpad9: bool;\n\n\t/** Is key down this frame */\n\tnumpadMultiply: bool;\n\n\t/** Is key down this frame */\n\tnumpadAdd: bool;\n\n\t/** Is key down this frame */\n\tnumpadSubtract: bool;\n\n\t/** Is key down this frame */\n\tnumpadDecimal: bool;\n\n\t/** Is key down this frame */\n\tnumpadDivide: bool;\n\n\t/** Is key down this frame */\n\tf1: bool;\n\n\t/** Is key down this frame */\n\tf2: bool;\n\n\t/** Is key down this frame */\n\tf3: bool;\n\n\t/** Is key down this frame */\n\tf4: bool;\n\n\t/** Is key down this frame */\n\tf5: bool;\n\n\t/** Is key down this frame */\n\tf6: bool;\n\n\t/** Is key down this frame */\n\tf7: bool;\n\n\t/** Is key down this frame */\n\tf8: bool;\n\n\t/** Is key down this frame */\n\tf9: bool;\n\n\t/** Is key down this frame */\n\tf10: bool;\n\n\t/** Is key down this frame */\n\tf11: bool;\n\n\t/** Is key down this frame */\n\tf12: bool;\n\n\t/** Is key down this frame */\n\tnumLock: bool;\n\n\t/** Is key down this frame */\n\tscrollLock: bool;\n\n\t/** Is key down this frame */\n\tsemicolon: bool;\n\n\t/** Is key down this frame */\n\tequal: bool;\n\n\t/** Is key down this frame */\n\tcomma: bool;\n\n\t/** Is key down this frame */\n\tminus: bool;\n\n\t/** Is key down this frame */\n\tperiod: bool;\n\n\t/** Is key down this frame */\n\tslash: bool;\n\n\t/** Is key down this frame */\n\tbackquote: bool;\n\n\t/** Is key down this frame */\n\tbracketLeft: bool;\n\n\t/** Is key down this frame */\n\tbackslash: bool;\n\n\t/** Is key down this frame */\n\tbracketRight: bool;\n\n\t/** Is key down this frame */\n\tquote: bool;\n\n\t/** Key pressed, triggered once until released  */ pressedBackspace: bool;\n\t/** Key pressed, triggered once until released  */ pressedTab: bool;\n\t/** Key pressed, triggered once until released  */ pressedEnter: bool;\n\t/** Key pressed, triggered once until released  */ pressedShiftLeft: bool;\n\t/** Key pressed, triggered once until released  */ pressedShiftRight: bool;\n\t/** Key pressed, triggered once until released  */ pressedControlLeft: bool;\n\t/** Key pressed, triggered once until released  */ pressedControlRight: bool;\n\t/** Key pressed, triggered once until released  */ pressedAltLeft: bool;\n\t/** Key pressed, triggered once until released  */ pressedAltRight: bool;\n\t/** Key pressed, triggered once until released  */ pressedPause: bool;\n\t/** Key pressed, triggered once until released  */ pressedCapsLock: bool;\n\t/** Key pressed, triggered once until released  */ pressedEscape: bool;\n\t/** Key pressed, triggered once until released  */ pressedSpace: bool;\n\t/** Key pressed, triggered once until released  */ pressedPageUp: bool;\n\t/** Key pressed, triggered once until released  */ pressedPageDown: bool;\n\t/** Key pressed, triggered once until released  */ pressedEnd: bool;\n\t/** Key pressed, triggered once until released  */ pressedHome: bool;\n\t/** Key pressed, triggered once until released  */ pressedArrowLeft: bool;\n\t/** Key pressed, triggered once until released  */ pressedArrowUp: bool;\n\t/** Key pressed, triggered once until released  */ pressedArrowRight: bool;\n\t/** Key pressed, triggered once until released  */ pressedArrowDown: bool;\n\t/** Key pressed, triggered once until released  */ pressedPrintScreen: bool;\n\t/** Key pressed, triggered once until released  */ pressedInsert: bool;\n\t/** Key pressed, triggered once until released  */ pressedDelete: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit0: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit1: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit2: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit3: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit4: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit5: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit6: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit7: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit8: bool;\n\t/** Key pressed, triggered once until released  */ pressedDigit9: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyA: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyB: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyC: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyD: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyE: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyF: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyG: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyH: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyI: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyJ: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyK: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyL: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyM: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyN: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyO: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyP: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyQ: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyR: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyS: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyT: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyU: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyV: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyW: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyX: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyY: bool;\n\t/** Key pressed, triggered once until released  */ pressedKeyZ: bool;\n\t/** Key pressed, triggered once until released  */ pressedMetaLeft: bool;\n\t/** Key pressed, triggered once until released  */ pressedMetaRight: bool;\n\t/** Key pressed, triggered once until released  */ pressedContextMenu: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad0: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad1: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad2: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad3: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad4: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad5: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad6: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad7: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad8: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpad9: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpadMultiply: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpadAdd: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpadSubtract: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpadDecimal: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumpadDivide: bool;\n\t/** Key pressed, triggered once until released  */ pressedF1: bool;\n\t/** Key pressed, triggered once until released  */ pressedF2: bool;\n\t/** Key pressed, triggered once until released  */ pressedF3: bool;\n\t/** Key pressed, triggered once until released  */ pressedF4: bool;\n\t/** Key pressed, triggered once until released  */ pressedF5: bool;\n\t/** Key pressed, triggered once until released  */ pressedF6: bool;\n\t/** Key pressed, triggered once until released  */ pressedF7: bool;\n\t/** Key pressed, triggered once until released  */ pressedF8: bool;\n\t/** Key pressed, triggered once until released  */ pressedF9: bool;\n\t/** Key pressed, triggered once until released  */ pressedF10: bool;\n\t/** Key pressed, triggered once until released  */ pressedF11: bool;\n\t/** Key pressed, triggered once until released  */ pressedF12: bool;\n\t/** Key pressed, triggered once until released  */ pressedNumLock: bool;\n\t/** Key pressed, triggered once until released  */ pressedScrollLock: bool;\n\t/** Key pressed, triggered once until released  */ pressedSemicolon: bool;\n\t/** Key pressed, triggered once until released  */ pressedEqual: bool;\n\t/** Key pressed, triggered once until released  */ pressedComma: bool;\n\t/** Key pressed, triggered once until released  */ pressedMinus: bool;\n\t/** Key pressed, triggered once until released  */ pressedPeriod: bool;\n\t/** Key pressed, triggered once until released  */ pressedSlash: bool;\n\t/** Key pressed, triggered once until released  */ pressedBackquote: bool;\n\t/** Key pressed, triggered once until released  */ pressedBracketLeft: bool;\n\t/** Key pressed, triggered once until released  */ pressedBackslash: bool;\n\t/** Key pressed, triggered once until released  */ pressedBracketRight: bool;\n\t/** Key pressed, triggered once until released  */ pressedQuote: bool;\n\t/** 2D vector that encodes the arrow keys and WASD aligned with the screen (e.g. up arrow = (0, -1)) */\n\tarrowVector: float2;\n}\n\ndeclare global {\n\tconst env: FrameContext;\n}\n"
  },
  {
    "path": "lang/shadeup/library/paint.ts",
    "content": "type GraphicsAdapter = {\n\tdrawImage(image: HTMLCanvasElement): void;\n\taddEventListener(name: string, fn: (...args: any) => void): void;\n\tactivatePaintContext(): void;\n};\nimport type { float4, float2 } from './types';\n\nexport class PaintingContext {\n\tmarkDirtyCallback: () => void = () => {};\n\tconstructor(canvas: HTMLCanvasElement, gl: GraphicsAdapter | null) {\n\t\tif (!gl) return;\n\t\tthis.__gl = gl;\n\t\tthis.__canvas = canvas;\n\t\tthis.__offscreen_canvas = document.createElement('canvas');\n\t\tthis.__offscreen_canvas.width = canvas.width;\n\t\tthis.__offscreen_canvas.height = canvas.height;\n\t\t// document.body.appendChild(this.__offscreen_canvas);\n\t\tthis.__ctx = this.__offscreen_canvas.getContext('2d', {\n\t\t\twillReadFrequently: true\n\t\t})!;\n\t\tthis.__offscreen_canvas.style.position = 'absolute';\n\t\tthis.__offscreen_canvas.style.zIndex = '10';\n\t\t// document.body.appendChild(this.__offscreen_canvas);\n\t\tthis.__setColor([0, 0, 0, 1] as float4);\n\n\t\tgl.addEventListener('context', (toContext: string) => {\n\t\t\tif (toContext == 'draw') {\n\t\t\t\tthis.flush();\n\t\t\t}\n\t\t});\n\n\t\tgl.addEventListener('flush', () => {\n\t\t\tthis.flush();\n\t\t});\n\t}\n\n\tflush() {\n\t\tif (!this.__gl) return;\n\t\tif (!this.__canvas) return;\n\t\tif (!this.__offscreen_canvas) return;\n\n\t\tif (!this.stagedChanges) return;\n\n\t\tif (this.fastPoints) this.flushPoints();\n\n\t\tthis.__gl.drawImage(this.__offscreen_canvas);\n\t\tthis.stagedChanges = false;\n\n\t\tif (\n\t\t\tthis.__offscreen_canvas.width != this.__canvas.width ||\n\t\t\tthis.__offscreen_canvas.height != this.__canvas.height\n\t\t) {\n\t\t\tthis.__offscreen_canvas.width = this.__canvas.width;\n\t\t\tthis.__offscreen_canvas.height = this.__canvas.height;\n\t\t}\n\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tprivate __ctx: CanvasRenderingContext2D | null = null;\n\tprivate __gl: GraphicsAdapter | null = null;\n\tprivate __offscreen_canvas: HTMLCanvasElement | null = null;\n\n\tprivate __program: WebGLProgram | null = null;\n\n\tprivate stagedChanges: boolean = false;\n\tprivate dirty: boolean = false;\n\n\tprivate fastPoints: boolean = false;\n\tprivate fastPointsBuffer: ImageData | null = null;\n\n\tprivate __beforeDraw() {\n\t\tif (!this.__offscreen_canvas) return;\n\t\tif (!this.__ctx) return;\n\t\tif (!this.__canvas) return;\n\t\tthis.markDirtyCallback();\n\t\tthis.__gl?.activatePaintContext();\n\n\t\tif (!this.stagedChanges) {\n\t\t\tthis.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n\n\t\t\tthis.__ctx.drawImage(this.__canvas, 0, 0);\n\n\t\t\tlet color = this.__currentColor;\n\t\t\tthis.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\n\t\t\t\tcolor[3]\n\t\t\t})`;\n\t\t\tthis.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\n\t\t\t\tcolor[3]\n\t\t\t})`;\n\t\t}\n\t}\n\n\tprivate __afterDraw() {\n\t\tlet gl = this.__gl;\n\t\tthis.dirty = true;\n\t\tthis.stagedChanges = true;\n\t}\n\n\tprivate __currentColor: number[] | null = null;\n\tprivate __setColor(color?: float4) {\n\t\tif (!this.__ctx || !color) return;\n\n\t\tif (\n\t\t\tthis.__currentColor &&\n\t\t\tthis.__currentColor[0] == color[0] &&\n\t\t\tthis.__currentColor[1] == color[1] &&\n\t\t\tthis.__currentColor[2] == color[2] &&\n\t\t\tthis.__currentColor[3] == color[3]\n\t\t)\n\t\t\treturn;\n\n\t\tthis.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\n\t\t\tcolor[3]\n\t\t})`;\n\t\tthis.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\n\t\t\tcolor[3]\n\t\t})`;\n\n\t\tthis.__currentColor = [color[0], color[1], color[2], color[3]];\n\t}\n\n\tfillRect(pos: float2, size: float2, color?: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tfillCircle(pos: float2, radius: number, color?: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n\t\tthis.__ctx.fill();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tfillArc(pos: float2, radius: number, startAngle: number, endAngle: number, color?: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n\t\tthis.__ctx.fill();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tline(pos1: float2, pos2: float2, color?: float4, width: number = 1) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.moveTo(pos1[0], pos1[1]);\n\n\t\tthis.__ctx.lineTo(pos2[0], pos2[1]);\n\t\tthis.__ctx.lineWidth = width;\n\t\tthis.__ctx.stroke();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tcircle(pos: float2, radius: number, color?: float4, width: number = 1) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n\t\tthis.__ctx.lineWidth = width;\n\t\tthis.__ctx.stroke();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tarc(\n\t\tpos: float2,\n\t\tradius: number,\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tcolor?: float4,\n\t\twidth: number = 1\n\t) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n\t\tthis.__ctx.lineWidth = width;\n\t\tthis.__ctx.stroke();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\ttext(pos: float2, text: string, color?: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.fillText(text, pos[0], pos[1]);\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tstartPath(pos: float2) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.flushPoints();\n\t\tthis.__beforeDraw();\n\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.moveTo(pos[0], pos[1]);\n\t}\n\n\tlineTo(pos: float2) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.lineTo(pos[0], pos[1]);\n\t}\n\n\tstrokePath(color?: float4, width: number = 1) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.lineWidth = width;\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.stroke();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tfillPath(color?: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.fill();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tsetStrokeWidth(width: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.lineWidth = width;\n\t}\n\n\tsetFont(font: string) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.font = font;\n\t}\n\n\tsetFontSize(size: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.font = `${size}px ${this.__ctx.font.split(' ').slice(1).join(' ')}`;\n\t}\n\n\tsetTextAlign(align: CanvasTextAlign) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.textAlign = align;\n\t}\n\n\tsetTextBaseline(baseline: CanvasTextBaseline) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.textBaseline = baseline;\n\t}\n\n\tsetLineCap(cap: 'butt' | 'round' | 'square') {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.lineCap = cap;\n\t}\n\n\tsetLineJoin(join: CanvasLineJoin) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.lineJoin = join;\n\t}\n\n\tsetMiterLimit(limit: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.miterLimit = limit;\n\t}\n\n\tsetShadowColor(color: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.shadowColor = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${\n\t\t\tcolor[3]\n\t\t})`;\n\t}\n\n\tsetShadowBlur(blur: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.shadowBlur = blur;\n\t}\n\n\tsetShadowOffset(offset: float2) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.shadowOffsetX = offset[0];\n\t\tthis.__ctx.shadowOffsetY = offset[1];\n\t}\n\n\tsetGlobalAlpha(alpha: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.globalAlpha = alpha;\n\t}\n\n\tsetGlobalCompositeOperation(op: string) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.globalCompositeOperation = op as any;\n\t}\n\n\tsetImageSmoothingEnabled(enabled: boolean) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.imageSmoothingEnabled = enabled;\n\t}\n\n\tsetImageSmoothingQuality(quality: ImageSmoothingQuality) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.imageSmoothingQuality = quality;\n\t}\n\n\tsetLineDash(dash: number[]) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.setLineDash(dash);\n\t}\n\n\tsetLineDashOffset(offset: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.lineDashOffset = offset;\n\t}\n\n\tsetTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.setTransform(a, b, c, d, e, f);\n\t}\n\n\tresetTransform() {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.resetTransform();\n\t}\n\n\tscale(v: float2) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.scale(v[0], v[1]);\n\t}\n\n\trotate(angle: number) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.rotate(angle);\n\t}\n\n\ttranslate(v: float2) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__ctx.translate(v[0], v[1]);\n\t}\n\n\tprivate flushPoints() {\n\t\tif (!this.__ctx) return;\n\t\tif (!this.fastPoints) return;\n\t\tif (!this.fastPointsBuffer) return;\n\n\t\tthis.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n\n\t\tthis.fastPoints = false;\n\t\tthis.fastPointsBuffer = null;\n\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tprivate pointsCounter: number = 0;\n\tprivate cacheSize: [number, number] = [0, 0];\n\tpoint(pos: float2, color?: float4) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.pointsCounter++;\n\n\t\tthis.__beforeDraw();\n\t\tif (this.pointsCounter > 10) {\n\t\t\tif (!this.fastPoints) {\n\t\t\t\tthis.fastPoints = true;\n\t\t\t\tthis.cacheSize = [this.__offscreen_canvas!.width, this.__offscreen_canvas!.height];\n\t\t\t\tthis.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\n\t\t\t}\n\n\t\t\tif (!this.fastPointsBuffer) return;\n\n\t\t\tlet x = Math.floor(pos[0]);\n\t\t\tlet y = Math.floor(pos[1]);\n\n\t\t\tlet index = (y * this.cacheSize[0] + x) * 4;\n\n\t\t\tif (!color) {\n\t\t\t\tcolor = this.__currentColor;\n\t\t\t}\n\t\t\tlet oldColorx = this.fastPointsBuffer.data[index] / 255;\n\t\t\tlet oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n\t\t\tlet oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n\t\t\tlet oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n\n\t\t\tthis.fastPointsBuffer.data[index] =\n\t\t\t\tcolor[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n\t\t\tthis.fastPointsBuffer.data[index + 1] =\n\t\t\t\tcolor[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n\t\t\tthis.fastPointsBuffer.data[index + 2] =\n\t\t\t\tcolor[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n\t\t\tthis.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\n\t\t} else {\n\t\t\tthis.__setColor(color);\n\t\t\tthis.__ctx.fillRect(pos[0], pos[1], 1, 1);\n\t\t}\n\t\tthis.__afterDraw();\n\t}\n\n\tvector(\n\t\tpos: float2,\n\t\tdir: float2,\n\t\tcolor: float4 = [0.9803921568627451, 0.8, 0.08235294117647059, 1] as float4,\n\t\twidth: number = 4\n\t) {\n\t\tif (!this.__ctx || (dir[0] == 0 && dir[1] == 0)) return;\n\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.setStrokeWidth(width);\n\t\tthis.__ctx.moveTo(pos[0], pos[1]);\n\t\tthis.__ctx.lineCap = 'round';\n\n\t\tthis.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n\t\tthis.__ctx.stroke();\n\t\tthis.__ctx.beginPath();\n\t\tthis.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n\t\t// Arrows\n\t\tlet arrowSize = 20;\n\t\tlet arrowAngle = Math.PI / 5;\n\t\tlet dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n\t\tlet arrow1 = [\n\t\t\tMath.cos(dirAngle + arrowAngle) * arrowSize,\n\t\t\tMath.sin(dirAngle + arrowAngle) * arrowSize\n\t\t];\n\t\tlet arrow2 = [\n\t\t\tMath.cos(dirAngle - arrowAngle) * arrowSize,\n\t\t\tMath.sin(dirAngle - arrowAngle) * arrowSize\n\t\t];\n\t\tthis.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\n\t\tthis.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n\t\tthis.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\n\n\t\tthis.__ctx.stroke();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n\n\tgrid(\n\t\tcenter: float2,\n\t\tcount: float2,\n\t\tgap: float2,\n\t\tcolor: float4 = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1] as float4,\n\t\twidth: number = 2\n\t) {\n\t\tif (!this.__ctx) return;\n\n\t\tthis.__beforeDraw();\n\n\t\tthis.__setColor(color);\n\t\tthis.__ctx.beginPath();\n\t\tthis.setStrokeWidth(width);\n\n\t\tlet start = [\n\t\t\tcenter[0] - (count[0] / 2) * gap[0],\n\t\t\tcenter[1] - (count[1] / 2) * gap[1]\n\t\t] as float2;\n\n\t\tfor (let i = 0; i <= count[0]; i++) {\n\t\t\tthis.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n\t\t\tthis.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n\t\t}\n\n\t\tfor (let i = 0; i <= count[1]; i++) {\n\t\t\tthis.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n\t\t\tthis.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n\t\t}\n\n\t\tthis.__ctx.stroke();\n\n\t\tthis.__afterDraw();\n\t\tthis.pointsCounter = 0;\n\t}\n}\n\ndeclare global {\n\tconst paint: PaintingContext;\n}\n"
  },
  {
    "path": "lang/shadeup/library/physics.ts",
    "content": "import type RAPIER2DNamespace from '@dimforge/rapier2d/rapier';\nimport type RAPIER3DNamespace from '@dimforge/rapier3d/rapier';\nimport type { float, float2, float3 } from './types';\n\ntype RAPIER2D = typeof RAPIER2DNamespace;\n\nexport class PhysicsCollider2d {\n\trapier: RAPIER2D;\n\tworld: RAPIER2DNamespace.World;\n\tcollider: RAPIER2DNamespace.Collider;\n\n\tconstructor(\n\t\trapier: RAPIER2D,\n\t\tworld: RAPIER2DNamespace.World,\n\t\tcollider: RAPIER2DNamespace.Collider\n\t) {\n\t\tthis.rapier = rapier;\n\t\tthis.world = world;\n\t\tthis.collider = collider;\n\t}\n\n\tsetTranslation(position: float2) {\n\t\tthis.collider.setTranslation(toVec2(position));\n\t}\n\n\tsetRotation(rotation: float) {\n\t\tthis.collider.setRotation(rotation);\n\t}\n\n\tsetSensor(isSensor: boolean) {\n\t\tthis.collider.setSensor(isSensor);\n\t}\n\n\tsetCollisionGroups(groups: int) {\n\t\tthis.collider.setCollisionGroups(groups);\n\t}\n\n\tsetCollidesWith(groups: int) {\n\t\tthis.collider.setActiveCollisionTypes(groups);\n\t}\n\n\tsetFriction(friction: float) {\n\t\tthis.collider.setFriction(friction);\n\t}\n\n\tsetRestitution(restitution: float) {\n\t\tthis.collider.setRestitution(restitution);\n\t}\n\n\tsetDensity(density: float) {\n\t\tthis.collider.setDensity(density);\n\t}\n\n\tsetMass(mass: float) {\n\t\tthis.collider.setMass(mass);\n\t}\n\n\tsetRadius(radius: float) {\n\t\tthis.collider.setRadius(radius);\n\t}\n\n\tsetHalfExtents(halfExtents: float2) {\n\t\tthis.collider.setHalfExtents(toVec2(halfExtents));\n\t}\n}\nfunction toVec2(v: float2): RAPIER2DNamespace.Vector2 {\n\treturn { x: v[0], y: v[1] };\n}\n\nfunction toVec3(v: float3): RAPIER3DNamespace.Vector {\n\treturn { x: v[0], y: v[1], z: v[2] };\n}\n\nexport class PhysicsRayCastResult2d {\n\trapier: RAPIER2D;\n\tresult: RAPIER2DNamespace.RayIntersection;\n\n\tconstructor(rapier: RAPIER2D, result: RAPIER2DNamespace.RayIntersection) {\n\t\tthis.rapier = rapier;\n\t\tthis.result = result;\n\t}\n}\n\nexport class PhysicsRigidBody2d {\n\trapier: RAPIER2D;\n\tworld: RAPIER2DNamespace.World;\n\tbody: RAPIER2DNamespace.RigidBody;\n\n\tconstructor(rapier: RAPIER2D, world: RAPIER2DNamespace.World, body: RAPIER2DNamespace.RigidBody) {\n\t\tthis.rapier = rapier;\n\t\tthis.world = world;\n\t\tthis.body = body;\n\t}\n\n\taddBallCollider(radius: float): PhysicsCollider2d {\n\t\tlet colDesc = this.rapier.ColliderDesc.ball(radius);\n\t\tlet col = this.world.createCollider(colDesc, this.body);\n\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\n\t}\n\n\taddBoxCollider(halfExtents: float2): PhysicsCollider2d {\n\t\tlet colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\n\t\tlet col = this.world.createCollider(colDesc, this.body);\n\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\n\t}\n\n\taddCapsuleCollider(radius: float, halfHeight: float): PhysicsCollider2d {\n\t\tlet colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\n\t\tlet col = this.world.createCollider(colDesc, this.body);\n\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\n\t}\n\n\taddTriangleCollider(a: float2, b: float2, c: float2): PhysicsCollider2d {\n\t\tlet colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\n\t\tlet col = this.world.createCollider(colDesc, this.body);\n\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\n\t}\n\n\taddConvexCollider(points: float2[]): PhysicsCollider2d {\n\t\tlet floatarr = new Float32Array(points.length * 2);\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tfloatarr[i * 2 + 0] = points[i][0];\n\t\t\tfloatarr[i * 2 + 1] = points[i][1];\n\t\t}\n\t\tlet colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\n\t\tif (!colDesc) throw new Error('Failed to create convex hull collider');\n\t\tlet col = this.world.createCollider(colDesc, this.body);\n\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\n\t}\n\n\taddHeightfieldCollider(heights: float[], scale: float2): PhysicsCollider2d {\n\t\tlet arr = new Float32Array(heights.length);\n\t\tfor (let i = 0; i < heights.length; i++) {\n\t\t\tarr[i] = heights[i];\n\t\t}\n\t\tlet colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\n\t\tlet col = this.world.createCollider(colDesc, this.body);\n\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, col);\n\t}\n\n\tsetTranslation(position: float2) {\n\t\tthis.body.setTranslation(toVec2(position), true);\n\t}\n\n\tsetRotation(rotation: float) {\n\t\tthis.body.setRotation(rotation, true);\n\t}\n\n\tsetVelocity(velocity: float2) {\n\t\tthis.body.setLinvel(toVec2(velocity), true);\n\t}\n\n\tsetAngularVelocity(velocity: float) {\n\t\tthis.body.setAngvel(velocity, true);\n\t}\n\n\taddForce(force: float2) {\n\t\tthis.body.addForce(toVec2(force), true);\n\t}\n\n\taddForceAtPoint(force: float2, point: float2) {\n\t\tthis.body.addForceAtPoint(toVec2(force), toVec2(point), true);\n\t}\n\n\taddTorque(torque: float) {\n\t\tthis.body.addTorque(torque, true);\n\t}\n\n\tsetAdditionalMass(mass: float) {\n\t\tthis.body.setAdditionalMass(mass, true);\n\t}\n\n\tsetEnabled(enabled: boolean) {\n\t\tthis.body.setEnabled(enabled);\n\t}\n\n\tsleep() {\n\t\tthis.body.sleep();\n\t}\n\n\twakeUp() {\n\t\tthis.body.wakeUp();\n\t}\n\n\tsetGravityScale(scale: float) {\n\t\tthis.body.setGravityScale(scale, true);\n\t}\n\n\tsetLinearDamping(damping: float) {\n\t\tthis.body.setLinearDamping(damping);\n\t}\n\n\tsetAngularDamping(damping: float) {\n\t\tthis.body.setAngularDamping(damping);\n\t}\n\n\tisSleeping(): boolean {\n\t\treturn this.body.isSleeping();\n\t}\n\n\tmass(): float {\n\t\treturn this.body.mass() as float;\n\t}\n\n\ttranslation(): float2 {\n\t\tlet t = this.body.translation();\n\t\treturn [t.x as float, t.y as float];\n\t}\n\n\trotation(): float {\n\t\treturn this.body.rotation() as float;\n\t}\n\n\tvelocity(): float2 {\n\t\tlet t = this.body.linvel();\n\t\treturn [t.x as float, t.y as float];\n\t}\n\n\tangularVelocity(): float {\n\t\treturn this.body.angvel() as float;\n\t}\n\n\tisMoving(): boolean {\n\t\treturn this.body.isMoving();\n\t}\n\n\tcollider(index: int): PhysicsCollider2d {\n\t\tlet collider = this.body.collider(index);\n\t\tif (!collider) throw new Error('Failed to get collider');\n\t\treturn new PhysicsCollider2d(this.rapier, this.world, collider);\n\t}\n\n\tapplyImpulse(impulse: float2) {\n\t\tthis.body.applyImpulse(toVec2(impulse), true);\n\t}\n\n\tapplyTorqueImpulse(impulse: float) {\n\t\tthis.body.applyTorqueImpulse(impulse, true);\n\t}\n}\n\nexport class PhysicsEngine2d {\n\trapier: RAPIER2D;\n\tworld: RAPIER2DNamespace.World;\n\tconstructor(rapier: RAPIER2D) {\n\t\tthis.rapier = rapier;\n\t\tthis.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\n\t}\n\n\tstep() {\n\t\tthis.world.step();\n\t}\n\n\tcreateRigidBody(\n\t\tposition: float2,\n\t\trotation: float,\n\t\tmode: 'dynamic' | 'fixed'\n\t): PhysicsRigidBody2d {\n\t\tlet rbDesc =\n\t\t\tmode == 'dynamic'\n\t\t\t\t? this.rapier.RigidBodyDesc.dynamic()\n\t\t\t\t: mode == 'fixed'\n\t\t\t\t? this.rapier.RigidBodyDesc.fixed()\n\t\t\t\t: this.rapier.RigidBodyDesc.dynamic();\n\t\trbDesc.setTranslation(position[0], position[1]);\n\t\trbDesc.setRotation(rotation);\n\t\tlet rb = this.world.createRigidBody(rbDesc);\n\n\t\treturn new PhysicsRigidBody2d(this.rapier, this.world, rb);\n\t}\n\n\tbodies(): PhysicsRigidBody2d[] {\n\t\tlet bodies = this.world.bodies;\n\t\tlet result: PhysicsRigidBody2d[] = [];\n\t\tfor (let i = 0; i < bodies.len(); i++) {\n\t\t\tresult.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)!));\n\t\t}\n\t\treturn result;\n\t}\n\n\tcastRay(start: float2, end: float2, maxi: int): PhysicsRigidBody2d | null {\n\t\tlet result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\n\t\tif (!result) return null;\n\t\treturn new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent()!);\n\t}\n\n\tsetGravity(gravity: float2) {\n\t\tthis.world.gravity = toVec2(gravity);\n\t}\n}\n\nexport class PhysicsEngine3d {\n\tconstructor() {}\n}\n\nexport namespace physics {\n\texport function engine2d(): PhysicsEngine2d {\n\t\treturn new PhysicsEngine2d((window as any).RAPIER_2D);\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/library/sdf.shadeup",
    "content": "/**\n* Heplful utility for working with signed distance fields.\n* Most of the implementation was taken from https://iquilezles.org/articles/distfunctions/\n*/\n\npub struct sdf {}\n\nfn dot2( v: float2 ) -> float { return dot(v,v); }\nfn dot3( v: float3 ) -> float { return dot(v,v); }\nfn ndot( a: float2, b: float2 ) -> float { return a.x*b.x - a.y*b.y; }\n\nimpl sdf {\n\tpub fn sphere(samplePosition: float3, sphereCenter: float3, radius: float) -> float {\n\t\tlet p = samplePosition - sphereCenter;\n\t\tlet r = radius;\n\t\treturn length(p) - r;\n\t}\n\n\tpub fn box(samplePosition: float3, boxCenter: float3, boxSize: float3) -> float {\n\t\tlet p = samplePosition - boxCenter;\n\t\tlet s = boxSize;\n\t\tlet q = abs(p) - s;\n\t\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n\t}\n\n\tpub fn roundBox(samplePosition: float3, boxCenter: float3, boxSize: float3, cornerRadius: float) -> float {\n\t\tlet p = samplePosition - boxCenter;\n\t\tlet s = boxSize;\n\t\tlet r = cornerRadius;\n\t\tlet q = abs(p) - s;\n\t\treturn length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - r;\n\t}\n\n\tpub fn boxFrame(samplePosition: float3, boxCenter: float3, boxSize: float3, frameThickness: float) -> float {\n\t\tlet p = samplePosition - boxCenter;\n\t\tlet b = boxSize;\n\t\tlet e = frameThickness;\n\t\tp = abs(p  )-b;\n\t\tlet q = abs(p+e)-e;\n\t\treturn min(min(\n\t\t\t\tlength(max(float3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\t\t\tlength(max(float3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\t\t\tlength(max(float3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n\t}\n\n\tpub fn torus( samplePosition: float3, torusCenter: float3, torusSize: float2 ) -> float\n\t{\n\t\tlet p = samplePosition - torusCenter;\n\t\tlet t = torusSize;\n\t\tlet q = float2(length(p.xz)-t.x,p.y);\n\t\treturn length(q)-t.y;\n\t}\n\n\tpub fn cappedTorus( samplePosition: float3, torusCenter: float3, torusSize: float2, ra: float, rb: float) -> float\n\t{\n\t\t\n\t\tlet p1 = samplePosition - torusCenter;\n\t\tlet p = (abs(p1.x), p1.yz);\n\t\tlet sc = torusSize;\n\t\tlet k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy);\n\t\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n\t}\n\n\tpub fn link( samplePosition: float3, linkCenter: float3, linkLength: float, r1: float, r2: float ) -> float\n\t{\n\t\tlet p = samplePosition - linkCenter;\n\t\tlet le = linkLength;\n\t\tlet q = float3( p.x, max(abs(p.y)-le,0.0), p.z );\n\t\treturn length(float2(length(q.xy)-r1,q.z)) - r2;\n\t}\n\n\tpub fn infinteCylinder( samplePosition: float3, cylinderCenter: float3, cylinderSize: float3) -> float\n\t{\n\t\tlet p = samplePosition - cylinderCenter;\n\t\tlet c = cylinderSize;\n\t\treturn length(p.xz-c.xy)-c.z;\n\t}\n\n\tpub fn cone( samplePosition: float3,  coneCenter: float3, c: float2, coneHeight: float ) -> float\n\t{\n\t\tlet p = samplePosition - coneCenter;\n\t\tlet h = coneHeight;\n\t\t// c is the sin/cos of the angle, h is height\n\t\t// Alternatively pass q instead of (c,h),\n\t\t// which is the point at the base in 2D\n\t\tlet q = h*float2(c.x/c.y,-1.0);\n\t\t\t\n\t\tlet w = float2( length(p.xz), p.y );\n\t\tlet a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\t\tlet b = w - q*float2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\t\tlet k = sign( q.y );\n\t\tlet d = min(dot( a, a ),dot(b, b));\n\t\tlet s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y)  );\n\t\treturn sqrt(d)*sign(s);\n\t}\n\n\tpub fn plane( samplePosition: float3, planeCenter: float3, planeNormal: float3, planeHeight: float ) -> float\n\t{\n\t\tlet p = samplePosition - planeCenter;\n\t\tlet n = planeNormal;\n\t\tlet h = planeHeight;\n\t\t\n\t\t// n must be normalized\n\t\treturn dot(p,n) + h;\n\t}\n\n\tpub fn hexPrism( samplePosition: float3, hexCenter: float3, hexSize: float2 ) -> float\n\t{\n\t\tlet p = samplePosition - hexCenter;\n\t\tlet h = hexSize;\n\n\t\tlet k = float3(-0.8660254, 0.5, 0.57735);\n\t\tp = abs(p);\n\t\tlet dddd = min(dot(k.xy, p.xy), 0.0) * 2.0;\n\n\t\tp = p - float3(dddd * k.xy, 0.0);\n\t\tlet d = float2(\n\t\t\t\t\tlength(p.xy-float2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\t\t\t\tp.z-h.y );\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n\t}\n\n\tpub fn triPrism( samplePosition: float3, triCenter: float3, triSize: float2 ) -> float\n\t{\n\t\tlet p = samplePosition - triCenter;\n\t\tlet h = triSize;\n\t\tlet q = abs(p);\n\t\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n\t}\n\n\tpub fn capsuleLine( samplePosition: float3, lineStart: float3, lineEnd: float3, capsuleRadius: float ) -> float\n\t{\n\t\tlet p = samplePosition;\n\t\tlet a = lineStart;\n\t\tlet b = lineEnd;\n\t\tlet r = capsuleRadius;\n\t\tlet pa = p - a;\n\t\tlet ba = b - a;\n\t\tlet h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\t\treturn length( pa - ba*h ) - r;\n\t}\n\n\tpub fn capsule( samplePosition: float3, capsuleCenter: float3, height: float, radius: float ) -> float\n\t{\n\t\tlet p1 = samplePosition - capsuleCenter;\n\t\tlet h = height;\n\t\tlet r = radius;\n\t\tlet p = (p1.x, p1.y - clamp( p1.y, 0.0, h ), p1.z);\n\t\treturn length( p ) - r;\n\t}\n\n\tpub fn cylinder( samplePosition: float3, cylinderCenter: float3, height: float, radius: float ) -> float\n\t{\n\t\tlet p = samplePosition - cylinderCenter;\n\t\tlet h = height;\n\t\tlet r = radius;\n\t\tlet d = abs(float2(length(p.xz),p.y)) - float2(r,h);\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n\t}\n\n\tpub fn cylinderLine( samplePosition: float3, lineStart: float3, lineEnd: float3, radius: float) -> float\n\t{\n\t\tlet p = samplePosition;\n\t\tlet a = lineStart;\n\t\tlet b = lineEnd;\n\t\tlet r = radius;\n\n\t\tlet ba = b - a;\n\t\tlet pa = p - a;\n\t\tlet baba = dot(ba,ba);\n\t\tlet paba = dot(pa,ba);\n\t\tlet x = length(pa*baba-ba*paba) - r*baba;\n\t\tlet y = abs(paba-baba*0.5) - baba*0.5;\n\t\tlet x2 = x*x;\n\t\tlet y2 = y*y*baba;\n\t\tlet mxxy = max(x,y);\n\t\tlet d = (mxxy<0.0)?-min(x2,y2):(((x>0.0)?x2:0.0)+((y>0.0)?y2:0.0));\n\t\treturn sign(d)*sqrt(abs(d))/baba;\n\t}\n\n\tpub fn roundedCylinder( samplePosition: float3, cylinderCenter: float, cylinderRadius: float, cornerRadius: float, height: float ) -> float\n\t{\n\t\tlet p = samplePosition - cylinderCenter;\n\t\tlet h = height;\n\t\tlet ra = cylinderRadius;\n\t\tlet rb = cornerRadius;\n\t\tlet d = float2( length(p.xz)-2.0*ra+rb, abs(p.y) - h );\n\t\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0)) - rb;\n\t}\n\n\tpub fn cappedCone( samplePosition: float3, coneCenter: float3, height: float, r1: float, r2: float ) -> float\n\t{\n\t\tlet p = samplePosition - coneCenter;\n\t\tlet h = height;\n\n\t\tlet q = float2( length(p.xz), p.y );\n\t\tlet k1 = float2(r2,h);\n\t\tlet k2 = float2(r2-r1,2.0*h);\n\t\tlet ca = float2(q.x-min(q.x,(q.y<0.0)?r1:r2), abs(q.y)-h);\n\t\tlet cb = q - k1 + k2*clamp( dot(k1-q,k2)/dot2(k2), 0.0, 1.0 );\n\t\tlet s = (cb.x<0.0 && ca.y<0.0) ? -1.0 : 1.0;\n\t\treturn s*sqrt( min(dot2(ca),dot2(cb)) );\n\t}\n\n\tpub fn solidAngle( samplePosition: float3, solidCenter: float3, size: float2, radius: float) -> float\n\t{\n\t\tlet p = samplePosition - solidCenter;\n\t\tlet c = size;\n\t\tlet ra = radius;\n\t\t// c is the sin/cos of the angle\n\t\tlet q = float2( length(p.xz), p.y );\n\t\tlet l = length(q) - ra;\n\t\tlet m = length(q - c*clamp(dot(q,c),0.0,ra) );\n\t\treturn max(l,m*sign(c.y*q.x-c.x*q.y));\n\t}\n\n\tpub fn cutSphere( samplePosition: float3, sphereCenter: float3, radius: float, height: float ) -> float\n\t{\n\t\tlet p = samplePosition - sphereCenter;\n\t\tlet h = height;\n\t\tlet r = radius;\n\n\t\t// sampling independent computations (only depend on shape)\n\t\tlet w = sqrt(r*r-h*h);\n\n\t\t// sampling dependant computations\n\t\tlet q = float2( length(p.xz), p.y );\n\t\tlet s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\t\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t\t(q.x<w) ? h - q.y     :\n\t\t\t\t\t\t\t\t\t\tlength(q-float2(w,h));\n\t}\n\n\tpub fn cutHollowSphere( samplePosition: float3, sphereCenter: float3, radius: float, height: float, thickness: float ) -> float\n\t{\n\t\tlet p = samplePosition - sphereCenter;\n\t\tlet r = radius;\n\t\tlet h = height;\n\t\tlet t = thickness;\n\n\t\t// sampling independent computations (only depend on shape)\n\t\tlet w = sqrt(r*r-h*h);\n\n\t\t// sampling dependant computations\n\t\tlet q = float2( length(p.xz), p.y );\n\t\treturn ((h*q.x<w*q.y) ? length(q-float2(w,h)) : \n\t\t\t\t\t\t\t\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n\t}\n\n\tpub fn roundCone( samplePosition: float3, coneCenter: float3, coneRadius: float, cornerRadius: float, height: float ) -> float\n\t{\n\t\tlet p = samplePosition - coneCenter;\n\t\tlet h = height;\n\t\tlet r1 = coneRadius;\n\t\tlet r2 = cornerRadius;\n\n\t\t// sampling independent computations (only depend on shape)\n\t\tlet b = (r1-r2)/h;\n\t\tlet a = sqrt(1.0-b*b);\n\n\t\t// sampling dependant computations\n\t\tlet q = float2( length(p.xz), p.y );\n\t\tlet k = dot(q,float2(-b,a));\n\t\tif( k<0.0 ) return length(q) - r1;\n\t\tif( k>a*h ) return length(q-float2(0.0,h)) - r2;\n\t\treturn dot(q, float2(a,b) ) - r1;\n\t}\n\n\tpub fn ellipsoid( samplePosition: float3, center: float3,  radius: float3 ) -> float\n\t{\t\n\t\tlet p = samplePosition - center;\n\t\tlet r = radius;\n\t\tlet k0 = length(p/r);\n\t\tlet k1 = length(p/(r*r));\n\t\treturn k0*(k0-1.0)/k1;\n\t}\n\n\tpub fn rhombus( samplePosition: float3, rhombusCenter: float3, la: float, lb: float, height: float, ra: float) -> float\n\t{\n\t\tlet p = samplePosition - rhombusCenter;\n\t\tlet h = height;\n\n\t\tp = abs(p);\n\t\tlet b = float2(la,lb);\n\t\tlet f = clamp( (ndot(b,b-2.0*p.xz))/dot(b,b), -1.0, 1.0 );\n\t\tlet q = float2(length(p.xz-0.5*b*float2(1.0-f,1.0+f))*sign(p.x*b.y+p.z*b.x-b.x*b.y)-ra, p.y-h);\n\t\treturn min(max(q.x,q.y),0.0) + length(max(q,0.0));\n\t}\n\n\tpub fn octahedron( samplePosition: float3, center: float3, size: float) -> float\n\t{\n\t\tlet p = samplePosition - center;\n\t\tlet s = size;\n\t\tp = abs(p);\n\t\tlet m = p.x+p.y+p.z-s;\n\t\tlet q = 0.0.xyz;\n\t\t\t\t\tif( 3.0*p.x < m ) q = p.xyz;\n\t\telse if( 3.0*p.y < m ) q = p.yzx;\n\t\telse if( 3.0*p.z < m ) q = p.zxy;\n\t\telse return m*0.57735027;\n\t\t\t\n\t\tlet k = clamp(0.5*(q.z-q.y+s),0.0,s); \n\t\treturn length(float3(q.x,q.y-s+k,q.z-k)); \n\t}\n\n\tpub fn pyramid( samplePosition: float3, pyramidCenter: float3, height: float) -> float\n\t{\n\t\tlet p1 = samplePosition - pyramidCenter;\n\t\tlet h = height;\n\n\t\tlet m2 = h*h + 0.25;\n\t\t\n\t\tlet p2 = (abs(p1.x), p1.y, abs(p1.z));\n\t\tif (p1.z > p1.x) {\n\t\t\tp2 = (p2.z, p2.y, p2.x);\n\t\t}\n\t\tp2 = (p2.x - 0.5, p2.y, p2.z - 0.5);\n\t\tlet p = p2;\n\n\t\tlet q = float3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\t\t\t\n\t\tlet s = max(-q.x,0.0);\n\t\tlet t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\t\t\t\n\t\tlet a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\t\tlet b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\t\t\t\n\t\tlet d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\t\t\t\n\t\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n\t}\n\n\tpub fn udTriangle(  samplePosition: float3, a: float3, b: float3, c: float3 ) -> float\n\t{\n\t\tlet p = samplePosition;\n\t\tlet ba = b - a;\n\t\tlet pa = p - a;\n\t\tlet cb = c - b;\n\t\tlet pb = p - b;\n\t\tlet ac = a - c;\n\t\tlet pc = p - c;\n\t\tlet nor = cross( ba, ac );\n\n\t\treturn sqrt(\n\t\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\t\t\tsign(dot(cross(cb,nor),pb)) +\n\t\t\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t\t\t?\n\t\t\t\tmin( min(\n\t\t\t\tdot3(ba*clamp(dot(ba,pa)/dot3(ba),0.0,1.0) - pa),\n\t\t\t\tdot3(cb*clamp(dot(cb,pb)/dot3(cb),0.0,1.0) - pb) ),\n\t\t\t\tdot3(ac*clamp(dot(ac,pc)/dot3(ac),0.0,1.0) - pc) )\n\t\t\t\t:\n\t\t\t\tdot(nor,pa)*dot(nor,pa)/dot3(nor) );\n\t}\n\n\tpub fn udQuad(  samplePosition: float3, a: float3, b: float3, c: float3, d: float3 ) -> float\n\t{\n\t\tlet p = samplePosition;\n\t\tlet ba = b - a; let pa = p - a;\n\t\tlet cb = c - b; let pb = p - b;\n\t\tlet dc = d - c; let pc = p - c;\n\t\tlet ad = a - d; let pd = p - d;\n\t\tlet nor = cross( ba, ad );\n\n\t\treturn sqrt(\n\t\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\t\t\tsign(dot(cross(cb,nor),pb)) +\n\t\t\t\tsign(dot(cross(dc,nor),pc)) +\n\t\t\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t\t\t?\n\t\t\t\tmin( min( min(\n\t\t\t\tdot3(ba*clamp(dot(ba,pa)/dot3(ba),0.0,1.0)-pa),\n\t\t\t\tdot3(cb*clamp(dot(cb,pb)/dot3(cb),0.0,1.0)-pb) ),\n\t\t\t\tdot3(dc*clamp(dot(dc,pc)/dot3(dc),0.0,1.0)-pc) ),\n\t\t\t\tdot3(ad*clamp(dot(ad,pd)/dot3(ad),0.0,1.0)-pd) )\n\t\t\t\t:\n\t\t\t\tdot(nor,pa)*dot(nor,pa)/dot3(nor) );\n\t}\n\n\n\t/**\n\t* Returns the intersection of two SDFs\n\t* = max(a, b)\n\t*/\n\tpub fn intersect(a: float, b: float) -> float {\n\t\treturn max(a, b);\n\t}\n\n\t/**\n\t* Returns the union of two SDFs\n\t* = min(a, b)\n\t*/\n\tpub fn union(a: float, b: float) -> float {\n\t\treturn min(a, b);\n\t}\n\n\tpub fn subtract(a: float, b: float) -> float {\n\t\treturn max(-a, b);\n\t}\n\n\tpub fn smoothIntersect(a: float, b: float, k: float) -> float {\n\t\tlet h = clamp(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\n\t\treturn lerp(b, a, h) - k * h * (1.0 - h);\n\t}\n\n\t/**\n\t* Smoothly joins two SDFs using blending distance k\n\t*/\n\tpub fn smoothUnion(a: float, b: float, k: float) -> float {\n\t\tlet d1 = a;\n\t\tlet d2 = b;\n\t\tlet h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n    return lerp( d2, d1, h ) - k*h*(1.0-h);\n\t}\n\n\tpub fn smoothSubtract(a: float, b: float, k: float) -> float {\n\t\tlet d1 = a;\n\t\tlet d2 = b;\n\t\tlet h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n    return lerp( d2, -d1, h ) + k*h*(1.0-h); \n\t}\n\n\t/**\n\t* Blends between two SDFs using interpolation\n\t*/\n\tpub fn blend(a: float, b: float, t: float) -> float {\n\t\treturn t * a + (1 - t) * b;\n\t}\n\n\tpub fn round(a: float, r: float) -> float {\n\t\treturn a - r;\n\t}\n\n\t/**\n\t* Carve out the interior of an SDF\n\t*/\n\tpub fn onion(a: float, thickness: float) -> float {\n\t\treturn abs(a) - thickness;\n\t}\n\n\n\tpub fn grad(p:float3, sampler: (pos: float3) -> float) {\n\t\tconst DELTA = 0.0001;\n\t\treturn float3(sampler(p + float3(DELTA, 0.0, 0.0)) - sampler(p - float3(DELTA, 0.0, 0.0)),\n\t\t\t\t\t\t\t\tsampler(p + float3(0.0, DELTA, 0.0)) - sampler(p - float3(0.0, DELTA, 0.0)),\n\t\t\t\t\t\t\t\tsampler(p + float3(0.0, 0.0, DELTA)) - sampler(p - float3(0.0, 0.0, DELTA))) / (2.0 * DELTA);\n\t}\n\n\t/**\n\t* Poorly returns the closest point on the surface of an SDF\n\t* This is an inaccurate method\n\t*/\n\tpub fn closest(position: float3, sampler: (pos: float3) -> float) -> float3 {\n\t\tlet sep = 0.0001;\n\t\tlet zero = min(env.frame, 0);\n\t\tlet closest = position;\n\t\tlet initialDist = sampler(position);\n\t\tlet seed = 0;\n\t\tfor (let j: int = 0; j < 200; j++) {\n\t\t\tlet n = 0.0.xyz;\n\t\t\tlet distSum = 0.0;\n\t\t\tfor (let i: int = zero; i < 4; i++) {\n\t\t\t\tlet e = 0.5773*(2.0*float3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.0);\n\t\t\t\tlet d = sampler(closest+e*sep);\n\t\t\t\tdistSum += d;\n\t\t\t\tn += e*d;\n\t\t\t}\n\t\t\tclosest = normalize(n) * distSum * -1 / 4.0 + closest;\n\t\t\tif (distSum < 0.0001) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn closest;\n\t}\n\n\tpub fn normal(position: float3, sampler: (pos: float3) -> float) -> float3 {\n\t\tconst h = 0.1;\n    let zero = min(env.frame, 0);\n    let n = 0.0.xyz;\n\t\tlet distSum = 0.0;\n\t\t\n    for (let i: int = zero; i < 4; i++) {\n\t\t\tlet e = 0.5773*(2.0*float3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.0);\n\t\t\tlet d = sampler(position+e*h);\n\t\t\tdistSum += d;\n\t\t\tn += e*d;\n    }\n    return normalize(n);\n\t}\n\n\tpub fn vizRings(d: float) -> float4 {\n\t\tif (false) {\n\t\t\tlet color = 1.0 - sign(d) * float3(0.1, 0.4, 0.7);\n\t\t\tcolor *= 1.0 - exp(-4.0 * abs(d));\n\t\t\tcolor *= 0.8 + 0.2 * cos(140.0 * d);\n\t\t\tcolor = lerp(color, 1.0.xyz, 1.0 - smoothstep(0.0, 0.015, abs(d)));\n\t\t\treturn (color, 1.0);\n\t\t}else{\n\n\t\tlet size = 2;\n\t\tlet fadeDist = 100;\n\t\tlet v = 1-clamp(d/ fadeDist, 0, 1);\n\t\tlet color = (0.4 * v, 0.6* v, 1, 1);\n\t\tlet s = sin(d / size);\n\t\tif (abs(d) < 1) {\n\t\t\treturn float4(1.xyzw);\n\t\t}else{\n\t\t\treturn d > 0 ? color * ceil(1-s) : color * ceil(s);\n\t\t}\n\t\t}\n\t}\n\n\tpub fn march(position: float3, direction: float3, sampler: (pos: float3) -> float) -> float {\n\t\tlet maxDist = 100000.0;\n\t\tlet minDist = 1.0;\n\t\tlet dist = minDist;\n\n\t\tfor (let i = 0; i < 256 && dist < maxDist; i++) {\n\t\t\tlet samp = sampler(position + direction * dist);\n\t\t\tdist += samp;\n\t\t\tif (abs(samp) < (0.00005 * dist)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (dist > maxDist) {\n\t\t\tdist = -1.0;\n\t\t}\n\t\treturn dist;\n\t}\n\n\t/**\n\t* See: https://iquilezles.org/articles/distfunctions/\n\t* Infinitely repeats an SDF with space in between. This returns an updated position\n\t*\n\t* Example:\n\t* ```shadeup\n\t*\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\n\t* ```\n\t*/\n\tpub fn repeat(position: float3, space: float3) -> float3 {\n\t\tlet p = position;\n\t\tlet s = space;\n\t\treturn p - s*round(p/s);\n\t}\n\n\t/**\n\t* See: https://iquilezles.org/articles/distfunctions/\n\t* Repeats an SDF with space in between upto the limit. This returns an updated position\n\t*\n\t* Example:\n\t* ```shadeup\n\t*\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\n\t* ```\n\t*/\n\tpub fn repeatLimited(position: float3, space: float, limit: float3) -> float3 {\n\t\tlet p = position;\n\t\tlet s = space;\n\t\treturn p - s*clamp(round(p/s),-limit,limit);\n\t}\n\t\n}"
  },
  {
    "path": "lang/shadeup/library/std.ts",
    "content": "export { ui } from '/_std/ui';\nexport { mesh, Mesh } from '/_std/mesh';\nexport { sdf } from '/_std/sdf';\nexport { geo } from '/_std/geo';\nexport * from '/_std/native';\n"
  },
  {
    "path": "lang/shadeup/library/test.shadeup",
    "content": "\n// Option 1\nlet idx = buffer<uint>::new();\nlet buf = buffer<float4>::new();\nlet otherBuf = buffer<float4>::new();\n\ndrawIndexed(idx, shader {\n\tlet pos = buf[in.index].xyz;\n\tout.position = pos;\n\tout.custom<float>(\"test\", pos.x);\n}, shader {\n\tlet px = in.custom<float>(\"test\");\n\tlet c = otherBuf[round(px)];\n\tout.color = c.xyzw;\n});\n\n// Option 2\nlet idx = buffer<uint>::new();\nlet buf = buffer<float4>::new();\nlet otherBuf = buffer<float4>::new();\n\ndrawIndexed(idx, shader -> ({test: float}) {\n\tlet pos = buf[in.index].xyz;\n\tout.position = pos;\n\tout.test = pos.x;\n}, shader <- ({test: float}) {\n\tlet px = in.test;\n\tlet c = otherBuf[round(px)];\n\tout.color = c.xyzw;\n});\n\n// Option 3\n\nlet idx = buffer<uint>::new();\nlet buf = buffer<float4>::new();\nlet otherBuf = buffer<float4>::new();\n\ndrawIndexed(idx, shader<{}, {test: float}> {\n\tlet pos = buf[in.index].xyz;\n\tout.position = pos;\n\tout.test = pos.x;\n}, shader<{test: float}, {}> {\n\tlet px = in.test;\n\tlet c = otherBuf[round(px)];\n\tout.color = c.xyzw;\n});"
  },
  {
    "path": "lang/shadeup/library/texture.ts",
    "content": "import {\n\tfloat4,\n\tfloat3,\n\tfloat,\n\tfloat2,\n\tbool,\n\tint,\n\tint2,\n\tint3,\n\tint4,\n\tuint,\n\tuint2,\n\tuint3,\n\tuint4,\n\tuint8\n} from '/std_math';\n\nimport {\n\tShaderInput,\n\tShaderOutput,\n\tshader,\n\tdraw,\n\tdrawInstanced,\n\tdrawAdvanced,\n\tdrawIndexed\n} from '/_std/drawIndexed';\n\nimport { Mesh } from '/_std/mesh';\nimport { PaintingContext } from '/_std/paint';\n\nexport class texture2d_internal_empty<T> {\n\t__opaque_texture2d: true = true;\n\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\n\t__index(index: int2 | uint2): T {\n\t\treturn null as any;\n\t}\n\n\t__index_assign(index: int2 | uint2, value: T): void {\n\t\treturn null as any;\n\t}\n\n\tgetFast(index: int2 | uint2): T {\n\t\treturn null as any;\n\t}\n\n\tsetFast(index: int2 | uint2, value: T): void {\n\t\treturn null as any;\n\t}\n\n\t/** @shadeup=tag(async) */\n\tdownload(): void {}\n\n\tdownloadAsync(): Promise<void> {\n\t\treturn null as any;\n\t}\n\n\t/**\n\t * Returns the underlying cpu buffer as a typed array.\n\t *\n\t * Note that this is considerably faster than using the raw index [] operator.\n\t *\n\t * ```shadeup\n\t * let tex = texture2d<float4>();\n\t * let data = tex.getData();\n\t *\n\t * for (let i = 0; i < data.length; i += 4) {\n\t * \tlet r = data[i];\n\t * \tlet g = data[i + 1];\n\t * \tlet b = data[i + 2];\n\t * \tlet a = data[i + 3];\n\t *\n\t * \t// Do something with the pixel\n\t * }\n\t * ```\n\t */\n\tgetData(): Uint32Array | Float32Array | Uint8Array | Int32Array {\n\t\treturn new Uint32Array(0);\n\t}\n\n\tupload(): void {}\n\n\tsize: float2 = [0, 0];\n\n\tpaint: PaintingContext = null as any;\n\n\tsample(position: float2): float4 {}\n\n\tclear(color: float | float4 | 'auto' = 'auto'): void {}\n\tflush(): void {}\n\t// draw(\n\t// \tgeometry: Mesh,\n\t// \tvertexShader: shader<ShaderInput, ShaderOutput>,\n\t// \tpixelShader: shader<ShaderInput, ShaderOutput>\n\t// ): void;\n\t// draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput>): void;\n\t// draw() {\n\t// \tthrow new Error('Not implemented');\n\t// }\n\n\tdraw: typeof draw;\n\n\tdrawIndexed: typeof drawIndexed;\n\tdrawAdvanced: typeof drawAdvanced;\n\tdrawInstanced: typeof drawInstanced;\n\n\t/** Release the texture */\n\tdestroy() {}\n}\n\nexport type texture2d<T> = texture2d_internal_empty<T>;\nexport type TextureFormat = '32bit' | '16bit' | '8bit' | 'depth' | 'depth-32' | 'auto';\nexport function texture2d<T = uint8>(\n\tsize: float2,\n\tformat: TextureFormat,\n\ttype: string\n): texture2d<T> {\n\treturn (window as any).shadeupMakeTextureInternal(size, format, type) as texture2d<T>;\n}\n\nexport class texture3d_internal_empty<T> {\n\t__opaque_texture3d: true = true;\n\n\t/** @shadeup=glsl(!texture($self$, $0$)) */\n\t__index(index: int3): T {\n\t\treturn null as any;\n\t}\n\t__index_assign(index: int3, value: T): void {}\n\tsize: float3 = [0, 0, 0];\n\n\tsample(position: float3): float4 {}\n}\n\nexport type texture3d<T> = texture3d_internal_empty<T>;\n\nexport function texture3d<T>(size: float3, type: string): texture3d<T> {\n\treturn (window as any).shadeupMakeTextureInternal(size, type) as texture3d<T>;\n}\n"
  },
  {
    "path": "lang/shadeup/library/textures.shadeup",
    "content": ""
  },
  {
    "path": "lang/shadeup/library/types.ts",
    "content": "export type bool = boolean;\nexport type float = number & { _opaque_float: 2 };\nexport type int = number & { _opaque_int: 1 } & float;\nexport type uint = number & { _opaque_uint: 1 } & float & int;\ntype scalar = float | int;\n\nexport type float2 = [float, float];\nexport type float3 = [float, float, float];\nexport type float4 = [float, float, float, float];\nexport type int2 = [int, int];\nexport type int3 = [int, int, int];\nexport type int4 = [int, int, int, int];\n\ntype anyFloat = float2 | float3 | float4;\ntype anyInt = int2 | int3 | int4;\n\ntype vector2 = float2 | int2;\ntype vector3 = float3 | int3;\ntype vector4 = float4 | int4;\n\ntype vector = vector2 | vector3 | vector4;\n\ntype vectorOrScalar = vector | scalar;\n\ntype float2x2 = [float, float, float, float];\ntype float3x3 = [float, float, float, float, float, float, float, float, float];\ntype float4x4 = [\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat,\n\tfloat\n];\n"
  },
  {
    "path": "lang/shadeup/library/ui.ts",
    "content": "export namespace ui {\n\texport function puck(position: float2): float2 {\n\t\treturn (window as any)._SHADEUP_UI_PUCK(position);\n\t}\n\n\texport function draggable(position: float2, radius: float = 10): float2 {\n\t\treturn (window as any)._SHADEUP_UI_PUCK(position, radius, true);\n\t}\n\n\texport function textbox(value: string): string {\n\t\treturn (window as any)._SHADEUP_UI_CONTROL('textbox', value);\n\t}\n\n\texport function slider(value: float, min: float, max: float): float {\n\t\treturn (window as any)._SHADEUP_UI_SLIDER(value, { min, max });\n\t}\n\n\texport function label(text: string): void {\n\t\treturn (window as any)._SHADEUP_UI_CONTROL('label', text);\n\t}\n\n\texport function checkbox(value: bool): bool {\n\t\treturn (window as any)._SHADEUP_UI_CONTROL('checkbox', value);\n\t}\n\n\texport function combo(value: string, options: string[]): string {\n\t\treturn (window as any)._SHADEUP_UI_CONTROL('combo', value, { options });\n\t}\n\n\texport function group(text: string): void {\n\t\treturn (window as any)._SHADEUP_UI_CONTROL('group', text);\n\t}\n\n\texport function button(text: string): bool {\n\t\treturn (window as any)._SHADEUP_UI_CONTROL('button', false, { text });\n\t}\n\n\texport function pop(): void {\n\t\t(window as any)._SHADEUP_UI_CONTROL('pop');\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/monaco/connector.ts",
    "content": "import type { MonacoEditorInstance } from 'src/monaco/editor';\nimport type { ShadeupWorkspaceInterface } from '../compiler/interface';\nimport monaco from '../../monaco/monaco';\n\nimport ts from 'typescript';\n\nexport function connectMonacoEditorToShadeupWorkspace(\n\tworkspace: ShadeupWorkspaceInterface,\n\tpath: string,\n\tmonacoFilename: string,\n\teditor: MonacoEditorInstance\n) {\n\teditor.editor?.setValue(workspace.files.get(path) ?? '');\n\n\teditor.editor?.onDidChangeModelContent((e) => {\n\t\tworkspace.writeFile(path, editor.editor?.getValue() ?? '', true);\n\n\t\tsetTimeout(() => {\n\t\t\tworkspace.writeFile(path, editor.editor?.getValue() ?? '');\n\t\t}, 100);\n\t});\n\n\tlet model = editor?.editor?.getModel();\n\n\tif (model) {\n\t\tlet m = model as monaco.editor.ITextModel;\n\n\t\t(model as any).$shd = {\n\t\t\tasync provideCompletionItems(model: monaco.editor.ITextModel, position: monaco.Position) {\n\t\t\t\tlet offset = model.getOffsetAt(position);\n\t\t\t\tlet completions = await workspace.getCompletions(path, offset);\n\n\t\t\t\tlet items: monaco.languages.CompletionItem[] = [];\n\n\t\t\t\tfor (let completion of completions) {\n\t\t\t\t\tlet c = completion.completion;\n\t\t\t\t\tlet kind =\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[ts.ScriptElementKind.functionElement]: monaco.languages.CompletionItemKind.Function,\n\n\t\t\t\t\t\t\t[ts.ScriptElementKind.memberVariableElement]:\n\t\t\t\t\t\t\t\tmonaco.languages.CompletionItemKind.Field,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.memberGetAccessorElement]:\n\t\t\t\t\t\t\t\tmonaco.languages.CompletionItemKind.Field,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.memberSetAccessorElement]:\n\t\t\t\t\t\t\t\tmonaco.languages.CompletionItemKind.Field,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.variableElement]: monaco.languages.CompletionItemKind.Variable,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.constElement]: monaco.languages.CompletionItemKind.Variable,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.localVariableElement]:\n\t\t\t\t\t\t\t\tmonaco.languages.CompletionItemKind.Variable,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.classElement]: monaco.languages.CompletionItemKind.Class,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.interfaceElement]:\n\t\t\t\t\t\t\t\tmonaco.languages.CompletionItemKind.Interface,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.typeElement]: monaco.languages.CompletionItemKind.Class,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.enumElement]: monaco.languages.CompletionItemKind.Enum,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.moduleElement]: monaco.languages.CompletionItemKind.Module,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.keyword]: monaco.languages.CompletionItemKind.Keyword,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.scriptElement]: monaco.languages.CompletionItemKind.File,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.alias]: monaco.languages.CompletionItemKind.File,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.letElement]: monaco.languages.CompletionItemKind.Variable,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.directory]: monaco.languages.CompletionItemKind.Folder,\n\t\t\t\t\t\t\t[ts.ScriptElementKind.string]: monaco.languages.CompletionItemKind.Text\n\t\t\t\t\t\t}[c.kind.toString()] ?? monaco.languages.CompletionItemKind.Property;\n\n\t\t\t\t\tlet parts = displayPartsToString(completion.details?.displayParts);\n\t\t\t\t\tif (c.kind.toString() == ts.ScriptElementKind.alias) {\n\t\t\t\t\t\tif (parts.startsWith('(alias) class')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Class;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) enum')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Enum;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) interface')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Interface;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) type')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Class;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) namespace')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Module;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) function')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Function;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) var') || parts.startsWith('(alias) let')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Variable;\n\t\t\t\t\t\t} else if (parts.startsWith('(alias) const')) {\n\t\t\t\t\t\t\tkind = monaco.languages.CompletionItemKind.Variable;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c.kind.toString() == ts.ScriptElementKind.string) {\n\t\t\t\t\t\tc.name = `\"${c.name.replace(/\"/g, '')}\"`;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet documentation =\n\t\t\t\t\t\tcompletion.details?.documentation?.map((p) => ({ value: p.text })) ?? [];\n\n\t\t\t\t\tif (!c.name.startsWith('__'))\n\t\t\t\t\t\titems.push({\n\t\t\t\t\t\t\tlabel: c.name,\n\t\t\t\t\t\t\tsortText: c.sortText,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tinsertText: c.name,\n\t\t\t\t\t\t\tdetail: parts,\n\t\t\t\t\t\t\tdocumentation: documentation[0] ?? undefined,\n\t\t\t\t\t\t\trange: (completion as any).range\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsuggestions: items\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync provideHover(\n\t\t\t\tmodel: monaco.editor.ITextModel,\n\t\t\t\tposition: monaco.Position\n\t\t\t): Promise<monaco.languages.Hover | null> {\n\t\t\t\tlet offset = model.getOffsetAt(position);\n\t\t\t\tlet hover = await workspace.getHover(path, offset);\n\t\t\t\tif (hover) {\n\t\t\t\t\tlet contents: monaco.IMarkdownString[] = [];\n\t\t\t\t\tif (hover.displayParts) {\n\t\t\t\t\t\tlet content = '';\n\t\t\t\t\t\tfor (let p of hover.displayParts) {\n\t\t\t\t\t\t\t// if (p.kind == ts.SymbolDisplayPartKind)\n\t\t\t\t\t\t\tcontent += p.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontents.push({ value: '```ts\\n' + content.replaceAll('__.', '') + '\\n```' });\n\t\t\t\t\t}\n\t\t\t\t\tif (hover.documentation) {\n\t\t\t\t\t\tlet documentation = hover.documentation.map((p) => ({ value: p.text }));\n\t\t\t\t\t\tcontents = contents.concat(documentation);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontents,\n\t\t\t\t\t\trange: hover.range\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tworkspace.on('diagnostic', (e) => {\n\t\t\tlet alerts: monaco.editor.IMarkerData[] = [];\n\t\t\tfor (let d of e.detail.diagnostics) {\n\t\t\t\tif (d.path === path) {\n\t\t\t\t\talerts.push({\n\t\t\t\t\t\tmessage: d.message,\n\t\t\t\t\t\tstartLineNumber: d.startLine,\n\t\t\t\t\t\tstartColumn: d.startColumn,\n\t\t\t\t\t\tendLineNumber: d.endLine,\n\t\t\t\t\t\tendColumn: d.endColumn,\n\t\t\t\t\t\tseverity: monaco.MarkerSeverity.Error\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmonaco.editor.setModelMarkers(m, 'shadeup', alerts);\n\t\t});\n\t}\n}\n\nfunction displayPartsToString(parts?: ts.SymbolDisplayPart[]): string {\n\tif (parts) {\n\t\tlet content = '';\n\t\tfor (let p of parts) {\n\t\t\tcontent += p.text;\n\t\t}\n\t\treturn content.replaceAll('__.', '').replaceAll('(property)', '').replaceAll('(method)', '');\n\t} else {\n\t\treturn '';\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/runner.ts",
    "content": "import type { ShadeupWorkspaceInterface } from './compiler/interface';\nimport ShadeupEnvironment from './environment';\nimport frame from './frame.html?raw';\nimport frameHeadless from './engine/frame-headless.html?raw';\nimport engineUrlHeadless from './engine/engine-headless?url';\nimport type { ShadeupExternalSymbol } from './symbol';\nimport type { ShadeupRenderedFile } from './compiler/common';\n\nexport async function simpleRun(source: string, expose: ShadeupExternalSymbol[] = []) {\n\tlet env = await makeEnvironment(source, expose);\n\n\treturn await runEnvironment(env);\n}\n\nexport async function makeEnvironment(source: string, expose: ShadeupExternalSymbol[] = []) {\n\tlet env = new ShadeupEnvironment();\n\n\tawait env.load();\n\n\tfor (let sym of expose) {\n\t\tenv.addSymbol(sym);\n\t}\n\n\treturn env;\n}\n\nexport async function runEnvironmentLong(\n\tenv: ShadeupWorkspaceInterface,\n\tcb: (message: any) => void\n) {\n\tlet gid = (window as any).runLongId || 0;\n\t(window as any).runLongId = gid + 1;\n\n\tlet iframe = document.createElement('iframe');\n\tiframe.sandbox.add('allow-scripts');\n\tiframe.srcdoc = frame;\n\tiframe.style.display = 'none';\n\tiframe.srcdoc = frameHeadless.replace('%GID%', gid).replace('%ENGINE_URL%', engineUrlHeadless);\n\n\tlet windowListener = (e: MessageEvent) => {\n\t\tconsole.log('got message from iframe', e);\n\t\tvar frame = document.getElementById('sandboxed');\n\t\tif (e.origin === 'null' && e.source === iframe.contentWindow && e.data && e.data.gid === gid) {\n\t\t\tcb(e.data.data);\n\t\t}\n\t};\n\n\twindow.addEventListener('message', windowListener);\n\n\tlet iframeIsLoaded = false;\n\tlet enqueuedFiles: ShadeupRenderedFile[] = [];\n\n\tconst sendFilesToIframe = () => {\n\t\tiframe.contentWindow?.postMessage(\n\t\t\t{\n\t\t\t\ttype: 'frame',\n\t\t\t\tfiles: enqueuedFiles\n\t\t\t},\n\t\t\t'*'\n\t\t);\n\t};\n\n\tiframe.onload = () => {\n\t\tif (iframe.contentWindow) {\n\t\t\tiframeIsLoaded = true;\n\t\t\tif (enqueuedFiles.length > 0) {\n\t\t\t\tsendFilesToIframe();\n\t\t\t}\n\t\t}\n\t};\n\n\tenv.on('output', (msg) => {\n\t\tenqueuedFiles = [...enqueuedFiles, ...msg.detail.files];\n\t\tif (iframeIsLoaded) {\n\t\t\tsendFilesToIframe();\n\t\t}\n\t});\n\n\tdocument.body.appendChild(iframe);\n\n\treturn () => {\n\t\tiframe.remove();\n\n\t\twindow.removeEventListener('message', windowListener);\n\t};\n}\n\nexport async function runEnvironment(env: ShadeupEnvironment) {\n\tenv.evaluate('main.shadeup');\n\n\tlet js = await env.generateFile('main.shadeup');\n\n\treturn await new Promise((resolve) => {\n\t\tlet iframe = document.createElement('iframe');\n\t\tiframe.sandbox.add('allow-scripts');\n\t\tiframe.srcdoc = frame;\n\t\tiframe.style.display = 'none';\n\n\t\tlet windowListener = (e: MessageEvent) => {\n\t\t\tvar frame = document.getElementById('sandboxed');\n\t\t\tif (e.origin === 'null' && e.source === iframe.contentWindow) {\n\t\t\t\tresolve(e.data);\n\t\t\t\twindow.removeEventListener('message', windowListener);\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('message', windowListener);\n\n\t\tiframe.onload = () => {\n\t\t\tif (iframe.contentWindow) {\n\t\t\t\tiframe.contentWindow.postMessage(js, '*');\n\t\t\t} else {\n\t\t\t\tconsole.log('no content window');\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t};\n\t\tdocument.body.appendChild(iframe);\n\t});\n}\n"
  },
  {
    "path": "lang/shadeup/symbol.ts",
    "content": "export class ShadeupExternalSymbol {\n\tname: string = '';\n\tkind: string = '';\n\n\toutType: string = '';\n\tparameters: [string, string, boolean][] = [];\n\n\tfields: [string, string][] = [];\n\tmethods: ShadeupExternalSymbol[] = [];\n\n\tjs: string = '';\n\n\tconstructor(name: string, kind: string) {\n\t\tthis.name = name;\n\t\tthis.kind = kind;\n\t}\n\n\tstatic makeFunction(\n\t\tname: string,\n\t\toutType: string,\n\t\tparameters: [string, string, boolean][],\n\t\tsource: string\n\t): ShadeupExternalSymbol {\n\t\tlet symbol = new ShadeupExternalSymbol(name, 'function');\n\t\tsymbol.outType = outType;\n\t\tsymbol.parameters = parameters;\n\t\tsymbol.js = source;\n\n\t\treturn symbol;\n\t}\n\n\tstatic makeVariable(name: string, outType: string): ShadeupExternalSymbol {\n\t\tconst symbol = new ShadeupExternalSymbol(name, 'variable');\n\t\tsymbol.outType = outType;\n\t\treturn symbol;\n\t}\n\n\tstatic makeType(\n\t\tname: string,\n\t\tfields: [string, string][],\n\t\tmethods: ShadeupExternalSymbol[]\n\t): ShadeupExternalSymbol {\n\t\tlet symbol = new ShadeupExternalSymbol(name, 'type');\n\t\tsymbol.fields = fields;\n\t\tsymbol.methods = methods;\n\t\treturn symbol;\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup/vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill';\nimport wasm from 'vite-plugin-wasm';\n// const prefix = `monaco-editor/esm/vs`;\nimport { sveltekit } from '@sveltejs/kit/vite';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport createExternal from 'vite-plugin-external';\nexport default defineConfig({\n\tplugins: [\n\t\twasm(),\n\t\tnodeResolve(),\n\t\tcreateExternal({\n\t\t\texternals: {\n\t\t\t\ttypescript: 'typescript',\n\t\t\t\tchalk: 'chalk',\n\t\t\t\t'@typescript/vfs': '@typescript/vfs'\n\t\t\t}\n\t\t})\n\t],\n\tbuild: {\n\t\tcommonjsOptions: {\n\t\t\ttransformMixedEsModules: true\n\t\t},\n\t\tlib: {\n\t\t\t// Could also be a dictionary or array of multiple entry points\n\t\t\tentry: './compiler/simple.ts',\n\t\t\tname: 'ShadeupCompiler',\n\t\t\t// the proper extensions will be added\n\t\t\tfileName: 'shadeup-compiler'\n\t\t},\n\t\toutDir: '../../../compiler-api/',\n\t\tsourcemap: false\n\t},\n\tesbuild: {\n\t\tkeepNames: false\n\t},\n\tresolve: {\n\t\talias: {\n\t\t\tsrc: '/src',\n\t\t\tpunycode: 'punycode/punycode.js',\n\t\t\t'/std_math': '../shadeup-frontend/lib/std/math.ts'\n\t\t}\n\t},\n\tworker: {\n\t\tformat: 'es',\n\t\tplugins: [wasm()]\n\t},\n\toptimizeDeps: {\n\t\tesbuildOptions: {\n\t\t\tdefine: {\n\t\t\t\tself: 'globalThis',\n\t\t\t\tglobal: 'globalThis'\n\t\t\t},\n\t\t\tplugins: [\n\t\t\t\tNodeGlobalsPolyfillPlugin({\n\t\t\t\t\tprocess: true,\n\t\t\t\t\tbuffer: true\n\t\t\t\t})\n\t\t\t]\n\t\t}\n\t},\n\tserver: {\n\t\tfs: {\n\t\t\t// Allow serving files from one level up to the project root\n\t\t\tallow: ['..']\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "lang/shadeup/worker.ts",
    "content": "import { makeEnvironment } from 'src/shadeup/runner';\nimport type * as TYPES from '../../../parser-wasm/pkg/parser_wasm';\nimport { ShadeupExternalSymbol } from './symbol';\n\nconst env = await makeEnvironment(``, [\n\tShadeupExternalSymbol.makeFunction(\n\t\t'draw',\n\t\t'void',\n\t\t[\n\t\t\t['geo', 'Geometry', false],\n\t\t\t['shade', 'shader', false]\n\t\t],\n\t\t`\n\tconsole.log(\"Drawing\");\n\t`\n\t)\n]);\n\nfunction hiddenProtosToObj(obj: any) {\n\tlet out: any = {};\n\n\tlet proto = Object.getPrototypeOf(obj);\n\n\twhile (proto) {\n\t\tfor (let key of Object.getOwnPropertyNames(proto)) {\n\t\t\tif (key == 'constructor') continue;\n\t\t\tout[key] = obj[key];\n\t\t}\n\t}\n\n\treturn out;\n}\n\nlet evaluating = new Map<string, boolean>();\nlet evaluateQueue = new Map<string, boolean>();\nfunction evaluate(filename: string, skipGenerate = false) {\n\tlet now = performance.now();\n\n\tconsole.log('evaluating', filename);\n\n\tlet success = env.evaluate(filename);\n\tlet messages = [];\n\tlet totalAlerts = 0;\n\n\tfor (let f of env.files.keys()) {\n\t\tlet alerts: TYPES.Alert[] = env.getAlerts(f);\n\t\ttotalAlerts += alerts.length;\n\t}\n\n\tif (success && totalAlerts == 0 && !skipGenerate) {\n\t\tlet out = env.generateFile(filename);\n\n\t\tmessages.push({\n\t\t\ttype: 'rendered',\n\t\t\tfilename,\n\t\t\tdata: out\n\t\t});\n\t}\n\n\tfor (let f of env.files.keys()) {\n\t\tlet alerts: TYPES.Alert[] = env.getAlerts(f);\n\n\t\tlet alertsMessage = {\n\t\t\ttype: 'alerts',\n\t\t\tfilename: f,\n\t\t\tdata: alerts.map((a) => ({\n\t\t\t\tlevel: a.level,\n\t\t\t\tmessage: a.message,\n\t\t\t\tsimple_message: a.simple_message,\n\t\t\t\tlocation: {\n\t\t\t\t\tstart_line_and_column: [\n\t\t\t\t\t\ta.location.start_line_and_column[0],\n\t\t\t\t\t\ta.location.start_line_and_column[1]\n\t\t\t\t\t],\n\t\t\t\t\tend_line_and_column: [\n\t\t\t\t\t\ta.location.end_line_and_column[0],\n\t\t\t\t\t\ta.location.end_line_and_column[1]\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}))\n\t\t};\n\t\tmessages.push(alertsMessage);\n\n\t\tlet imports = env.getImports(f);\n\t\tlet importsMessage = {\n\t\t\ttype: 'imports',\n\t\t\tfilename: f,\n\t\t\tdata: imports.map((s: any) => ({\n\t\t\t\timports: s.imports.map((i: any) => ({\n\t\t\t\t\tname: i.name,\n\t\t\t\t\talias: i.alias,\n\t\t\t\t\tspan: mapSpan(i.span)\n\t\t\t\t})),\n\t\t\t\tpath: s.path,\n\t\t\t\tspan: mapSpan(s.span)\n\t\t\t}))\n\t\t};\n\t\tmessages.push(importsMessage);\n\n\t\tlet intellisense = env.getIntellisense(f);\n\t\tlet intellisenseMessage = {\n\t\t\ttype: 'intellisense',\n\t\t\tfilename: f,\n\t\t\tdata: intellisense\n\t\t};\n\t\tmessages.push(intellisenseMessage);\n\t}\n\n\tlet symbols = env.getSymbols();\n\tlet symbolsMessage = {\n\t\ttype: 'symbols',\n\t\tdata: symbols.map((s: any) => ({\n\t\t\tname: s.name,\n\t\t\tfile: s.file,\n\t\t\taliased: s.aliased,\n\t\t\timported: s.imported,\n\t\t\tkind: s.kind\n\t\t}))\n\t};\n\tmessages.push(symbolsMessage);\n\n\tfunction mapSpan(span: any) {\n\t\treturn {\n\t\t\tstart: span.start,\n\t\t\tend: span.end\n\t\t};\n\t}\n\n\tpostMessage({ type: 'messages', messages });\n\n\tconsole.log('evaluated', filename, 'in', performance.now() - now, 'ms');\n}\n\nonmessage = function (e) {\n\tconst { type, filename, data } = e.data;\n\tif (type == 'addSymbol') {\n\t\tenv.addSymbol(data);\n\t} else if (type == 'writeFile') {\n\t\tenv.updateFile(filename, data);\n\t} else if (type == 'evaluate') {\n\t\tif (evaluating.has(filename)) {\n\t\t\tconsole.log('already evaluating', filename, 'skipping');\n\t\t\t// Mark the file as dirty so that it will be re-evaluated after the current evaluation is done\n\t\t\tevaluateQueue.set(filename, true);\n\t\t\treturn;\n\t\t}\n\n\t\tevaluating.set(filename, true);\n\t\tthis.setTimeout(() => {\n\t\t\tevaluate(filename, data.skipGenerate);\n\n\t\t\tevaluating.delete(filename);\n\t\t}, 0);\n\n\t\tif (evaluateQueue.has(filename)) {\n\t\t\t// evaluateQueue.delete(filename);\n\t\t\t// evaluate(filename);\n\t\t}\n\t} else if (type == 'reset') {\n\t\tenv.reset();\n\t}\n};\n"
  },
  {
    "path": "lang/shadeup-frontend/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "lang/shadeup-frontend/f.js",
    "content": "let x = [\n    1,\n    2,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n    3,\n];\n// 0x0804A7B0\n"
  },
  {
    "path": "lang/shadeup-frontend/f.ts",
    "content": "let x = [\n\t1,\n\t2,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n\t3,\n];\n\n// 0x0804A7B0\n"
  },
  {
    "path": "lang/shadeup-frontend/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" style=\"background-color: black\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t<title>Vite App</title>\n\t</head>\n\t<body style=\"background-color: black\">\n\t\t<div id=\"app\"></div>\n\t\t<script type=\"module\" src=\"/src/main.ts\"></script>\n\t</body>\n</html>\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/_extensions.ts",
    "content": "declare global {\n\tinterface Array<T> {\n\t\tenumerate(): [number, T][];\n\t\tfilter_map<B>(fn: (value: T, index: number) => B | null): B[];\n\t\tmax_by_key(fn: (value: T, index: number) => any): T;\n\t\tchain(arg: any): this;\n\t}\n}\n\n(Array.prototype as any).enumerate = function <A, B>(): [number, B][] {\n\tlet i = 0;\n\tlet rv: [number, B][] = [];\n\tfor (let item of this) rv.push([i++, item]);\n\treturn rv;\n};\n\n(Array.prototype as any).filter_map = function <B>(\n\tthis,\n\tfn: (value: typeof this, index: number) => B | null\n): B[] {\n\treturn this.map(fn).filter((n) => n !== null) as B[];\n};\n\n(Array.prototype as any).max_by_key = function (\n\tthis,\n\tfn: (value: typeof this, index: number) => number\n): typeof this {\n\tconst max = (self: number[]) => {\n\t\treturn Math.max.apply(null, self);\n\t};\n\n\treturn max(this.map(fn)) as any;\n};\n\n(Array.prototype as any).chain = function (this, that) {\n\treturn this.concat(that);\n};\n\ndeclare global {\n\tinterface Number {\n\t\tsaturating_sub(n: number): number;\n\t\tmax(n: number): number;\n\t\tmin(n: number): number;\n\t}\n}\n\n(Number.prototype as any).saturating_sub = function (n: number): number {\n\treturn this.valueOf() - n;\n};\n\n(Number.prototype as any).max = function (n: number): number {\n\treturn Math.max(this.valueOf(), n);\n};\n\n(Number.prototype as any).min = function (n: number): number {\n\treturn Math.min(this.valueOf(), n);\n};\n\nexport const __dummy = 1;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/browser.ts",
    "content": "import \"./_extensions\"\nexport { Display } from \"./data/Display\"\nexport { Range } from './data/Range'\nexport { mkStringWriter } from './data/Write'\nexport { Color, Fixed } from './lib/Color'\nexport { ColorGenerator } from \"./lib/ColorGenerator\"\nexport { Config } from \"./lib/Config\"\nexport { Label } from './lib/Label'\nexport { Report } from './lib/Report'\nexport { ReportKind } from './lib/ReportKind'\nexport { Source, sources } from './lib/Source'\nexport { format } from \"./write\"\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Display.ts",
    "content": "import { isCallback } from \"../utils\";\nimport { ColorFn } from \"../lib/Color\";\nimport { isOption, type Option } from \"./Option\";\n\nexport interface Display {\n  fg(color: Option<ColorFn>): any;\n  bg(color: Option<ColorFn>): any;\n  chars(): string;\n  display(): string;\n  map(fn: (d: any) => any): this;\n  unwrap_or_else(d: () => string): string;\n}\n\nexport class Display implements Display {\n  constructor(value: string | Display) {\n    this.value = typeof value === \"string\" ? value : value.value\n  }\n  fg(color: Option<ColorFn> | ColorFn): this {\n    if (isOption(color)) {\n      let func = (color.is_some() ? color.unwrap() : (a: any) => a) as any\n      this.value = func(this.value)\n    } else if (isCallback(color)) {\n      this.value = color(this.value)\n    }\n    return this\n  };\n  bg(color: Option<ColorFn> | ColorFn): this {\n    if (isOption(color)) {\n      let func = (color.is_some() ? color.unwrap() : (a: any) => a) as any\n      this.value = func(this.value)\n    } else if (isCallback(color)) {\n      this.value = color(this.value)\n    }\n    return this\n  };\n  chars(): string {\n    return this.value\n  };\n  map(fn: (d: string) => string): Display {\n    return new Display(fn(this.value))\n  };\n  display(): string {\n    return this.value\n  };\n  toString(): string {\n    return this.value\n  }\n  unwrap_or_else(d: () => string): string {\n    return this.value ?? d()\n  };\n\n  private value: string\n\n  static is = (o: any): o is Display => o instanceof Display\n}\n\nexport const isDisplay = Display.is;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Formatter.ts",
    "content": "import { none, type Option } from './Option';\nimport { mkStringWriter, type Write, StdoutWriter } from './Write';\n\nexport enum Alignment {\n\tLeft = 'Left',\n\tRight = 'Right',\n\tCenter = 'Center'\n}\n\nexport interface Formatter {\n\tflags: number;\n\tfill: string;\n\talign: Alignment;\n\twidth: Option<number>;\n\tprecision: Option<number>;\n\tbuf: Write | null;\n}\n\nexport const formatter = new (class implements Formatter {\n\tflags: number = 0;\n\tfill: string = '';\n\talign: Alignment = Alignment.Left;\n\twidth: Option<number> = none();\n\tprecision: Option<number> = none();\n\tbuf: Write | null = null;\n})();\n\n// formatter.buf = new StdoutWriter();\n\nexport const stringFormatter = () =>\n\tnew (class implements Formatter {\n\t\tflags: number = 0;\n\t\tfill: string = '';\n\t\talign: Alignment = Alignment.Left;\n\t\twidth: Option<number> = none();\n\t\tprecision: Option<number> = none();\n\t\tbuf = mkStringWriter();\n\t\tunwrap() {\n\t\t\treturn this.buf.unwrap();\n\t\t}\n\t})();\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Iter.ts",
    "content": "export class Iter {}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Option.ts",
    "content": "\nexport abstract class Option<T> {\n  abstract map<R>(fn: (val: T) => R): Option<R>\n  abstract map_or<R>(d: R, fn: (val: T) => R): R\n  abstract filter(fn: (val: T) => boolean): Option<T>\n  abstract or(d: Option<T>): Option<T>\n  abstract unwrap(): T\n  abstract unwrap_or_else(d: () => T): T\n  abstract is_some(): this is Some<T>\n  abstract is_none(): this is None<T>\n  abstract iter(): T[]\n  abstract equal(other: Option<T>): boolean\n  static from<T>(obj: T | undefined | null): Option<T> {\n    if (obj === undefined || obj === null)\n      return none()\n    return some(obj)\n  }\n}\n\nclass Some<T> implements Option<T> {\n  constructor(private value: T) {}\n  map<R>(fn: (value: T) => R): Option<R> {\n    return some(fn(this.value))\n  }\n  map_or<R>(d: R, fn: (val: T) => R): R {\n    return fn(this.value)\n  }\n  filter(fn: (m: T) => boolean): Option<T> {\n    if (fn(this.value)) return some(this.value)\n    return none()\n  }\n  or(d: Option<T>): Option<T> {\n    return this\n  }\n  iter(): T[] {\n    return [this.value]\n  }\n  unwrap(): T {\n    return this.value\n  }\n  unwrap_or_else(d: () => T): T {\n    return this.unwrap()\n  }\n  is_some(): this is Some<T> {\n    return true\n  }\n  is_none(): this is None<T> {\n    return false\n  }\n  equal(other: Option<T>): boolean {\n    if (other.is_some())\n      return this.value === other.value\n    return false\n  }\n  static is<T>(o: Option<T>): o is Some<T> {\n    return o instanceof Some\n  }\n}\n\nclass None<T> implements Option<T> {\n  map<R>(fn: (value: T) => R): Option<R> {\n    return none()\n  }\n  map_or<R>(d: R, fn: (val: T) => R): R {\n    return d\n  }\n  filter(fn: (m: T) => boolean): Option<T> {\n    return none()\n  }\n  or(d: Option<T>): Option<T> {\n    return d\n  }\n  iter(): T[] {\n    return []\n  }\n  unwrap(): T {\n    throw new Error(\"Unwrapped None\")\n  }\n  unwrap_or_else(d: () => T): T {\n    return d()\n  }\n  is_some(): this is Some<T> {\n    return false\n  }\n  is_none(): this is None<T> {\n    return true\n  }\n  equal(other: Option<T>): boolean {\n    return other.is_none()\n  }\n  static is<T>(o: Option<T>): o is None<T> {\n    return o instanceof None\n  }\n}\n\nexport const some = <T>(value: T): Option<T> => {\n  return new Some<T>(value);\n}\n\nexport const none = <T>(): Option<T> => {\n  return new None()\n}\n\nexport const isOption = <T>(o: any): o is Option<T> => {\n  return o instanceof Some || o instanceof None\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Range.ts",
    "content": "import { isNumber, isString } from '../utils';\nimport { Span, SpanInit } from './Span';\n\nexport class Range extends Span {\n\tpublic SourceId: any = null;\n\n\tpublic source(): any {\n\t\treturn this.SourceId;\n\t}\n\n\tpublic len(): number {\n\t\treturn Math.abs(this.start - this.end);\n\t}\n\tpublic contains(item: any): boolean {\n\t\treturn item >= this.start && item < this.end;\n\t}\n\n\tstatic is(o: any): o is Range {\n\t\treturn o instanceof Range;\n\t}\n\n\tstatic from(o: SpanInit): Range {\n\t\tif (isNumber(o[0]) && isNumber(o[1])) return new Span(o[0], o[1]);\n\n\t\tif (isString(o[0]) && Range.is(o[1])) {\n\t\t\tconst s = new Range(o[1].start, o[1].end);\n\t\t\ts.SourceId = o[0];\n\t\t\treturn s;\n\t\t}\n\n\t\tthrow new Error(`Invalid SpanInit`);\n\t}\n\n\tstatic new(start: number, end: number): Span {\n\t\treturn new Range(start, end);\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Result.ts",
    "content": "export type Result<T, E> = Ok<T, E> | Err<T, E>;\n\nclass Ok<T, E> {\n  constructor(private value: T) {}\n  map<R>(fn: (value: T) => R): Result<R, E> {\n    return ok(fn(this.value))\n  }\n  map_or<R>(d: R, fn: (val: T) => R): Result<R, E> {\n    return ok(fn(this.value))\n  }\n  or(d: Result<T, E>): Result<T, E> {\n    return this\n  }\n  is_ok(): this is Ok<T, E> { return true }\n  is_err(): this is Err<T, E> { return false }\n  unwrap(): T {\n    return this.value\n  }\n  unwrap_or_else<R>(d: (v: T) => R): R {\n    return d(this.value)\n  }\n  static is<T, E>(o: Result<T, E>): o is Ok<T, E> {\n    return o instanceof Ok\n  }\n}\n\nexport class Err<T, E> {\n  constructor(private value: E) {}\n  map<R>(fn: (value: E) => R): Result<R, E> {\n    return ok(fn(this.value))\n  }\n  map_or<R>(d: R, fn: (val: T) => R): Result<R, E> {\n    return ok(d)\n  }\n  or(d: Result<T, E>): Result<T, E> {\n    return d\n  }\n  unwrap(): E {\n    return this.value\n  }\n  unwrap_or_else<R>(d: (v: E) => R): R {\n    return d(this.value)\n  }\n  is_ok(): this is Ok<T, E> { return false }\n  is_err(): this is Err<T, E> { return true }\n  static is<T, E>(o: Result<T, E>): o is Err<T, E> {\n    return o instanceof Err\n  }\n}\n\nexport const ok = <T, E>(value: T): Result<T, E> => {\n  return new Ok<T, E>(value);\n}\n\nexport const err = <T, E>(value: E): Result<T, E> => {\n  return new Err<T, E>(value)\n}\n\nexport const isResult = (o: any): o is Result<any, any> => {\n  return o instanceof Ok || o instanceof Err\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Show.ts",
    "content": "\nimport { Formatter } from \"./Formatter\";\nimport { isOption } from \"./Option\";\nimport { isResult } from \"./Result\";\nimport { isCallback, range } from \"../utils\";\nimport { write } from \"../write\";\n\nexport class Show {\n  constructor(public self: any) {}\n  fmt(f: Formatter): void {\n\n    if (isOption<string>(this.self)) {\n      this.self.map(x => new Show(x).fmt(f))\n      return\n    }\n    if (isResult(this.self)) {\n      this.self.map(x => new Show(x).fmt(f))\n      return\n    }\n    if (typeof this.self === \"string\") {\n      write(f.buf, \"{}\", this.self)\n      return\n    }\n    // TODO: this is all probably wrong\n    if (Array.isArray(this.self) && this.self.length === 2) {\n      if (isCallback(this.self[1])) {\n        for (let x of this.self[0]) {\n          const func = this.self[1];\n          func(f, x)\n        }\n      } else {\n        for (let _ of range(0, this.self[1])) {\n          write(f.buf, \"{}\", this.self[0])\n        }\n      }\n    }\n    else {\n      const x = this.self[0];\n      write(f.buf, \"{}\", x)\n      return\n    }\n  }\n\n  static is = (o: any): o is Show => o instanceof Show\n}\n\nexport const isShow = Show.is\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Span.ts",
    "content": "import { isNumber, isString, range } from \"../utils\";\nimport { Range } from \"./Range\";\n\nexport type SpanInit = [src: string, range: Range] | [start: number, end: number];\n\nexport class Span {\n  constructor(\n    private _start: number,\n    private _end: number,\n  ) {}\n  /// The identifier used to uniquely refer to a source. In most cases, this is the fully-qualified path of the file.\n  SourceId: any;\n\n  /// Get the identifier of the source that this span refers to.\n  source() { return this.SourceId }\n\n  set start(value: number) { this._start = value };\n  get start(): number { return this._start };\n  set end(value: number) { this._end = value };\n  get end(): number { return this._end };\n\n  /// Get the length of this span (difference between the start of the span and the end of the span).\n  len(): number {\n    return this.end.saturating_sub(this.start)\n  };\n\n  /// Determine whether the span contains the given offset.\n  contains(offset: number): boolean {\n    return range(this.start, this.end).includes(offset);\n  };\n\n  static is = (o: any): o is Span => o instanceof Span\n\n  static from(o: SpanInit) {\n    if (isNumber(o[0]) && isNumber(o[1]))\n      return new Span(o[0], o[1])\n\n    if (isString(o[0]) && Range.is(o[1])) {\n      const s = new Span(o[1].start, o[1].end);\n      s.SourceId = o[0]\n      return s\n    }\n\n    throw new Error(`Invalid SpanInit`)\n  }\n}\n\nexport const isSpan = Span.is\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/data/Write.ts",
    "content": "import { format } from '../write';\nimport { ok, Result } from './Result';\n\nexport interface Write {\n\twrite_str(s: string): Result<null, Error>;\n\twrite_char(c: string): Result<null, Error>;\n\twrite_fmt(...args: any[]): Result<null, Error>;\n}\n\nexport class StdoutWriter implements Write {\n\twrite_str(s: string): Result<null, Error> {\n\t\tthrow new Error('Function not implemented');\n\t}\n\twrite_char(c: string): Result<null, Error> {\n\t\tthrow new Error('Function not implemented');\n\t}\n\twrite_fmt(...args: any[]): Result<null, Error> {\n\t\tconsole.log(format(...args));\n\t\treturn ok(null);\n\t}\n}\n\nclass StderrWriter implements Write {\n\twrite_str(s: string): Result<null, Error> {\n\t\tthrow new Error('Function not implemented');\n\t}\n\twrite_char(c: string): Result<null, Error> {\n\t\tthrow new Error('Function not implemented');\n\t}\n\twrite_fmt(...args: any[]): Result<null, Error> {\n\t\tprocess.stderr.write(format(...args));\n\t\treturn ok(null);\n\t}\n}\n\nclass StringWriter implements Write {\n\tprivate value: string[] = [];\n\twrite_str(s: string): Result<null, Error> {\n\t\tthis.value.push(s);\n\t\treturn ok(null);\n\t}\n\twrite_char(c: string): Result<null, Error> {\n\t\tthis.value.push(c);\n\t\treturn ok(null);\n\t}\n\twrite_fmt(...args: any[]): Result<null, Error> {\n\t\tthis.value.push(format(...args));\n\t\treturn ok(null);\n\t}\n\tmap(fn: (value: string) => any) {\n\t\treturn fn(this.unwrap());\n\t}\n\tunwrap() {\n\t\treturn this.value.join('');\n\t}\n}\n\nexport const stdoutWriter = new StdoutWriter();\nexport const stderrWriter = new StderrWriter();\nexport const mkStringWriter = () => new StringWriter();\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/index.ts",
    "content": "import \"./_extensions\"\nexport { Display } from \"./data/Display\"\nexport { Range } from './data/Range'\nexport { Color, Fixed } from './lib/Color'\nexport { ColorGenerator } from \"./lib/ColorGenerator\"\nexport { Config } from \"./lib/Config\"\nexport { Label } from './lib/Label'\nexport { Report } from './lib/Report'\nexport { ReportKind } from './lib/ReportKind'\nexport { Source, sources } from './lib/Source'\nexport { include_str } from './utils/include_str'\nexport { format } from \"./write\"\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/Characters.ts",
    "content": "\nexport interface iCharacters {\n  hbar: string;\n  vbar: string;\n  xbar: string;\n  vbar_break: string;\n  vbar_gap: string;\n\n  uarrow: string;\n  rarrow: string;\n\n  ltop: string;\n  mtop: string;\n  rtop: string;\n  lbot: string;\n  rbot: string;\n  mbot: string;\n\n  lbox: string;\n  rbox: string;\n\n  lcross: string;\n  rcross: string;\n\n  underbar: string;\n  underline: string;\n}\n\nexport abstract class Characters {\n  static unicode(): iCharacters {\n    return {\n      hbar: '─',\n      vbar: '│',\n      xbar: '┼',\n      vbar_break: '·',\n      vbar_gap: '⋮',\n      uarrow: '▲',\n      rarrow: '▶',\n      ltop: '╭',\n      mtop: '┬',\n      rtop: '╮',\n      lbot: '╰',\n      mbot: '┴',\n      rbot: '╯',\n      lbox: '[',\n      rbox: ']',\n      lcross: '├',\n      rcross: '┤',\n      underbar: '┬',\n      underline: '─',\n    };\n  }\n\n  static ascii(): iCharacters {\n    return {\n      hbar: '-',\n      vbar: '|',\n      xbar: '+',\n      vbar_break: '*',\n      vbar_gap: ':',\n      uarrow: '^',\n      rarrow: '>',\n      ltop: ',',\n      mtop: 'v',\n      rtop: '.',\n      lbot: '`',\n      mbot: '^',\n      rbot: '\\'',\n      lbox: '[',\n      rbox: ']',\n      lcross: '|',\n      rcross: '|',\n      underbar: '|',\n      underline: '^',\n    };\n  }\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/Color.ts",
    "content": "import chalk, { ChalkInstance } from './chalk/chalk/source/index';\n\nconst options: any = { enabled: true, level: 2 };\nconst c = chalk;\n\nexport const colors = {\n\tblue: c.blue,\n\tgreen: c.green,\n\tred: c.red,\n\tyellow: c.yellow\n};\n\nexport const bgColors = {\n\tblue: c.bgBlue,\n\tgreen: c.bgGreen,\n\tred: c.bgRed,\n\tyellow: c.bgYellow\n};\n\nexport type ColorFn = ((s: string) => string) | ChalkInstance;\n\nexport abstract class Color {\n\tstatic Fixed = Fixed;\n}\n\nexport function Fixed(n: number) {\n\treturn c.ansi256(n);\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/ColorGenerator.ts",
    "content": "\nimport { ColorFn, Fixed } from \"./Color\"\nimport { clamp, range, wrapping_add_usize } from \"../utils\"\n\n/// A type that can generate distinct 8-bit colors.\nexport class ColorGenerator {\n  constructor(\n    public state: [number, number, number],\n    public min_brightness: number,\n  ) {}\n\n  /// Create a new [`ColorGenerator`] with the given pre-chosen state.\n  ///\n  /// The minimum brightness can be used to control the colour brightness (0.0 - 1.0). The default is 0.5.\n  static from_state(state: [number, number, number], min_brightness: number): ColorGenerator {\n    return new ColorGenerator(state, clamp(min_brightness, 0.0, 1.0))\n  }\n\n  /// Create a new [`ColorGenerator`] with the default state.\n  static new(): ColorGenerator {\n    return ColorGenerator.default()\n  }\n\n  /// Generate the next colour in the sequence.\n  next(out?: [number, ColorFn][]): ColorFn {\n    for (let i of range(0, 3)) {\n      // magic constant, one of only two that have this property!\n      const rhs = 40503 * (i * 4 + 1130)\n      const c = wrapping_add_usize(this.state[i], rhs)\n      const u16 = parseInt(`${c.toString(2).slice(-16)}`, 2)\n      this.state[i] = u16;\n    }\n\n    const value = Math.floor(16\n      + ((this.state[2] / 65535.0 * (1.0 - this.min_brightness) + this.min_brightness) * 5.0\n       + (this.state[1] / 65535.0 * (1.0 - this.min_brightness) + this.min_brightness) * 30.0\n       + (this.state[0] / 65535.0 * (1.0 - this.min_brightness) + this.min_brightness) * 180.0) % 256)\n\n    const colorFn = Fixed(value);\n    out?.push([value, colorFn])\n    return colorFn\n  }\n\n  static default(): ColorGenerator {\n    return new ColorGenerator([30000, 15000, 35000], 0.5)\n  }\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/Config.ts",
    "content": "import { ColorFn, colors, Fixed } from \"./Color\";\nimport { Display } from \"../data/Display\";\nimport { Option, some } from \"../data/Option\";\n\nexport class Config {\n\n  constructor(\n    public cross_gap: boolean,\n    public label_attach: LabelAttach,\n    public compact: boolean,\n    public underlines: boolean,\n    public multiline_arrows: boolean,\n    public color: boolean,\n    public tab_width: number,\n    public char_set: CharSet\n  ) { }\n\n  static default(): Config {\n    return new Config(\n      true,\n      LabelAttach.Middle,\n      false,\n      true,\n      true,\n      true,\n      4,\n      CharSet.Unicode\n    );\n  }\n\n  /// When label lines cross one-another, should there be a gap?\n  ///\n  /// The alternative to this is to insert crossing characters. However, these interact poorly with label colours.\n  ///\n  /// If unspecified, this defaults to [`false`].\n  with_cross_gap(cross_gap: boolean): this {\n    this.cross_gap = cross_gap;\n    return this;\n  }\n  /// Where should inline labels attach to their spans?\n  ///\n  /// If unspecified, this defaults to [`LabelAttach.Middle`].\n  with_label_attach(label_attach: LabelAttach): this {\n    this.label_attach = label_attach;\n    return this;\n  }\n  /// Should the report remove gaps to minimise used space?\n  ///\n  /// If unspecified, this defaults to [`false`].\n  with_compact(compact: boolean): this {\n    this.compact = compact;\n    return this;\n  }\n  /// Should underlines be used for label span where possible?\n  ///\n  /// If unspecified, this defaults to [`true`].\n  with_underlines(underlines: boolean): this {\n    this.underlines = underlines;\n    return this;\n  }\n  /// Should arrows be used to point to the bounds of multi-line spans?\n  ///\n  /// If unspecified, this defaults to [`true`].\n  with_multiline_arrows(multiline_arrows: boolean): this {\n    this.multiline_arrows = multiline_arrows;\n    return this;\n  }\n  /// Should colored output should be enabled?\n  ///\n  /// If unspecified, this defaults to [`true`].\n  with_color(color: boolean): this {\n    this.color = color;\n    return this;\n  }\n  /// How many characters width should tab characters be?\n  ///\n  /// If unspecified, this defaults to `4`.\n  with_tab_width(tab_width: number): this {\n    this.tab_width = tab_width;\n    return this;\n  }\n  /// What character set should be used to display dynamic elements such as boxes and arrows?\n  ///\n  /// If unspecified, this defaults to [`CharSet.Unicode`].\n  with_char_set(char_set: CharSet): this {\n    this.char_set = char_set;\n    return this;\n  }\n\n  error_color(): Option<ColorFn> {\n    return some(colors.red).filter(() => this.color);\n  }\n  warning_color(): Option<ColorFn> {\n    return some(colors.yellow).filter(() => this.color);\n  }\n  advice_color(): Option<ColorFn> {\n    return some(Fixed(147)).filter(() => this.color);\n  }\n  margin_color(): Option<ColorFn> {\n    return some(Fixed(246)).filter(() => this.color);\n  }\n  unimportant_color():Option<ColorFn> {\n    return some(Fixed(249)).filter(() => this.color);\n  }\n  note_color(): Option<ColorFn> {\n    return some(Fixed(115)).filter(() => this.color);\n  }\n\n  // Find the character that should be drawn and the number of times it should be drawn for each char\n  char_width(c: string, col: number): [Display, number] {\n    if (c === '\\t') {\n      // Find the column that the tab should end at\n      let tab_end = (col / this.tab_width + 1) * this.tab_width;\n      return [new Display(' '), tab_end - col];\n    }\n    if (c.match(/[\\s]/))\n      return [new Display(' '), 1];\n    return [new Display(c), 1];\n  }\n}\n\n/// The attachment point of inline label arrows\nexport enum LabelAttach {\n  /// Arrows should attach to the start of the label span.\n  Start = 'Start',\n  /// Arrows should attach to the middle of the label span (or as close to the middle as we can get).\n  Middle = 'Middle',\n  /// Arrows should attach to the end of the label span.\n  End = 'End'\n}\n\n/// Possible character sets to use when rendering diagnostics.\nexport enum CharSet {\n  /// Unicode characters (an attempt is made to use only commonly-supported characters).\n  Unicode = 'Unicode',\n  /// ASCII-only characters.\n  Ascii = 'Ascii'\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/Label.ts",
    "content": "import { ColorFn } from \"./Color\";\nimport { none, Option, some } from \"../data/Option\";\nimport { SpanInit } from \"../data/Span\";\nimport { Range } from \"../data/Range\";\n\n/// A type that represents a labelled section of source code.\nexport interface Label<S extends Range> {\n  span: S;\n  msg: Option<string>;\n  color: Option<ColorFn>;\n  order: number;\n  priority: number;\n}\n\nexport class Label<S> {\n  /// Create a new [`Label`].\n  constructor(span: S) {\n    this.span = span;\n    this.msg = none();\n    this.color = none();\n    this.order = 0;\n    this.priority = 0;\n  }\n\n  /// Give this label a message.\n  with_message(msg: string): this {\n    this.msg = some(msg);\n    return this;\n  }\n\n  /// Give this label a highlight colour.\n  with_color(color: ColorFn): this {\n    this.color = some(color);\n    return this;\n  }\n\n  /// Specify the order of this label relative to other labels.\n  ///\n  /// Lower values correspond to this label having an earlier order.\n  ///\n  /// If unspecified, labels default to an order of `0`.\n  ///\n  /// When labels are displayed after a line the crate needs to decide which labels should be displayed first. By\n  /// Default, the orders labels based on where their associated line meets the text (see [`LabelAttach`]).\n  /// Additionally, multi-line labels are ordered before inline labels. You can this this function to override this\n  /// behaviour.\n  with_order(order: number): this {\n    this.order = order;\n    return this;\n  }\n\n  /// Specify the priority of this label relative to other labels.\n  ///\n  /// Higher values correspond to this label having a higher priority.\n  ///\n  /// If unspecified, labels default to a priority of `0`.\n  ///\n  /// Label spans can overlap. When this happens, the crate needs to decide which labels to prioritise for various\n  /// purposes such as highlighting. By default, spans with a smaller length get a higher priority. You can this this\n  /// function to override this behaviour.\n  with_priority(priority: number): this {\n    this.priority = priority;\n    return this;\n  }\n\n  last_offset(): number {\n    return this.span.end.saturating_sub(1).max(this.span.start)\n  }\n\n  static from = Label.new\n\n  static new<S extends Range, Init extends SpanInit>(obj: Init): Label<S> {\n    return new Label(Range.from(obj)) as Label<S>\n  }\n\n  static is<S extends Range>(other: any): other is Label<S>{\n    return other instanceof Label\n  }\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/LabelInfo.ts",
    "content": "\nimport { Range } from \"../data/Range\";\nimport { Label } from \"./Label\";\n\nexport enum LabelKind {\n  Inline = 'Inline',\n  Multiline = 'Multiline',\n}\n\nexport class LabelInfo<S extends Range> {\n  constructor(\n    public kind: LabelKind,\n    public label: Label<S>,\n  ) {}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/Report.ts",
    "content": "import assert from 'assert';\nimport { Display } from '../data/Display';\nimport { none, Option, some } from '../data/Option';\nimport { Range } from '../data/Range';\nimport { Show } from '../data/Show';\nimport { Span } from '../data/Span';\nimport { stderrWriter, stdoutWriter, Write } from '../data/Write';\nimport { CharSet, Config, LabelAttach } from '../lib/Config';\nimport {\n\tbton,\n\tisBoolean,\n\tisNumber,\n\tmax,\n\tmin_by_key,\n\trange,\n\trangeIter,\n\tsort_by_key\n} from '../utils';\nimport { eprintln, format, write, writeln } from '../write';\nimport { Characters, iCharacters } from './Characters';\nimport { Label } from './Label';\nimport { LabelInfo, LabelKind } from './LabelInfo';\nimport { ReportBuilder } from './ReportBuilder';\nimport { ReportKind } from './ReportKind';\nimport { Cache, CacheInit } from './Source';\nimport { SourceGroup } from './SourceGroup';\n\n/// A type representing a diagnostic that is ready to be written to output.\n\nexport interface iReport<S extends Span> {\n\tkind: typeof ReportKind;\n\tcode: Option<string>;\n\tmsg: Option<string>;\n\tnote: Option<string>;\n\thelp: Option<string>;\n\tlocation: [S['SourceId'], number];\n\tlabels: Label<S>[];\n\tconfig: Config;\n\teprint(cache: CacheInit): void;\n\tprint(cache: CacheInit): void;\n\tprintTo(init: CacheInit, writer: Write): void;\n}\n\nexport class Report<S extends Span> implements iReport<S> {\n\tconstructor(\n\t\tpublic kind: typeof ReportKind,\n\t\tpublic code: Option<string>,\n\t\tpublic msg: Option<string>,\n\t\tpublic note: Option<string>,\n\t\tpublic help: Option<string>,\n\t\tpublic location: [S['SourceId'], number],\n\t\tpublic labels: Label<S>[],\n\t\tpublic config: Config\n\t) {}\n\n\t/// Begin building a new [`Report`].\n\tstatic build<S extends Span, Id extends string>(\n\t\tkind: typeof ReportKind,\n\t\tsrc_id: Id | null,\n\t\toffset: number\n\t): ReportBuilder<S> {\n\t\t// TODO\n\t\tconst builder = new ReportBuilder<S>(\n\t\t\tkind,\n\t\t\tnone(),\n\t\t\tnone(),\n\t\t\tnone(),\n\t\t\tnone(),\n\t\t\t[Option.from(src_id), offset],\n\t\t\t[],\n\t\t\tConfig.default()\n\t\t);\n\t\treturn builder;\n\t}\n\n\t/// Write this diagnostic out to `stderr`.\n\teprint(init: CacheInit): void {\n\t\tconst cache = Cache.from(init);\n\t\tthis.write(cache, stderrWriter);\n\t}\n\n\t/// Write this diagnostic out to `stdout`.\n\t///\n\t/// In most cases, [`Report::eprint`] is the\n\t/// ['more correct'](https://en.wikipedia.org/wiki/Standard_streams#Standard_error_(stderr)) function to use.\n\tprint(init: CacheInit): void {\n\t\tconst cache = Cache.from(init);\n\t\tthis.write(cache, stdoutWriter);\n\t}\n\n\tprintTo(init: CacheInit, writer: Write): void {\n\t\tconst cache = Cache.from(init);\n\t\tthis.write(cache, writer);\n\t}\n\n\tprivate get_source_groups(cache: Cache<S['SourceId']>): SourceGroup<S>[] {\n\t\tlet groups: SourceGroup<S>[] = [];\n\t\tfor (let label of this.labels) {\n\t\t\tlet src_display = cache.display(label.span.source());\n\t\t\tlet res = cache.fetch(label.span.source());\n\t\t\tif (res.is_err()) {\n\t\t\t\tconsole.error(\"Unable to fetch source '{}': {}\", src_display, res.unwrap());\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet src = res.unwrap();\n\n\t\t\tassert(label.span.start <= label.span.end, 'Label start is after its end');\n\n\t\t\tlet start_line = src.get_offset_line(label.span.start).map(([_, l, __]) => l);\n\t\t\tlet end_line = src\n\t\t\t\t.get_offset_line(label.span.end.saturating_sub(1).max(label.span.start))\n\t\t\t\t.map(([_, l, __]) => l);\n\n\t\t\tlet label_info = new LabelInfo<any>(\n\t\t\t\tstart_line.equal(end_line) ? LabelKind.Inline : LabelKind.Multiline,\n\t\t\t\tlabel\n\t\t\t);\n\n\t\t\tconst group = groups.find((g: SourceGroup<S>) => g.src_id === label.span.source());\n\n\t\t\tif (group) {\n\t\t\t\tgroup.span.start = group.span.start.min(label.span.start);\n\t\t\t\tgroup.span.end = group.span.end.max(label.span.end);\n\t\t\t\tgroup.labels.push(label_info);\n\t\t\t} else {\n\t\t\t\tgroups.push(\n\t\t\t\t\tnew SourceGroup(label.span.source(), new Range(label.span.start, label.span.end), [\n\t\t\t\t\t\tlabel_info\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn groups;\n\t}\n\n\t/// Write this diagnostic to an implementor of [`Write`].\n\t///\n\t/// If you wish to write to `stderr` or `stdout`, you can do so via [`Report::eprint`] or [`Report::print`] respectively.\n\tprivate write<C extends Cache<string>, W extends Write>(cache: C, w: W): void {\n\t\tlet draw: iCharacters = match(this.config.char_set, [\n\t\t\t[CharSet.Unicode, () => Characters.unicode()],\n\t\t\t[CharSet.Ascii, () => Characters.ascii()]\n\t\t]);\n\n\t\t// --- Header ---\n\n\t\tlet code = this.code ? format('[E{}] ', this.code) : '';\n\t\tlet id = format('{}{}:', code, this.kind.name);\n\t\tlet kind_color = match(this.kind, [\n\t\t\t[ReportKind.Error, () => this.config.error_color()],\n\t\t\t[ReportKind.Warning, () => this.config.warning_color()],\n\t\t\t[ReportKind.Advice, () => this.config.advice_color()],\n\t\t\t[ReportKind.Custom, (kind: any) => kind.color]\n\t\t]);\n\n\t\twriteln(w, '{} {}', new Display(id).fg(kind_color), new Show(this.msg));\n\n\t\tlet groups = this.get_source_groups(cache);\n\n\t\t// Line number maximum width\n\t\tlet filtered_groups = groups.filter_map(({ span, src_id }: SourceGroup<S>) => {\n\t\t\tlet src_name: string = cache\n\t\t\t\t.display(src_id)!\n\t\t\t\t.map((d) => d.toString())\n\t\t\t\t.unwrap_or_else(() => '<unknown>');\n\n\t\t\tlet res = cache.fetch(src_id);\n\n\t\t\tif (res.is_err()) {\n\t\t\t\teprintln('Unable to fetch source {}: {}', src_name, res.unwrap());\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet src = res.unwrap();\n\n\t\t\tlet line_range = src.get_line_range(span);\n\n\t\t\tlet iter = rangeIter(1, Infinity);\n\t\t\titer = map(iter, (x) => Math.pow(10, x));\n\t\t\titer = take_while(iter, (x) => {\n\t\t\t\tconst d = Math.floor(line_range.end / x);\n\t\t\t\treturn d !== 0;\n\t\t\t});\n\t\t\tconst cnt = count(iter);\n\t\t\treturn cnt + 1;\n\t\t});\n\n\t\tlet line_no_width = max(filtered_groups) ?? 0;\n\n\t\t// --- Source sections ---\n\t\tlet groups_len = groups.length;\n\t\tfor (let [group_idx, { src_id, span, labels }] of enumerate(groups)) {\n\t\t\tlet src_name = cache\n\t\t\t\t.display(src_id)\n\t\t\t\t.map((d) => d.toString())\n\t\t\t\t.unwrap_or_else(() => '<unknown>');\n\n\t\t\tlet res = cache.fetch(src_id);\n\n\t\t\tif (res.is_err()) {\n\t\t\t\teprintln('Unable to fetch source {}: {}', src_name, res.unwrap());\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet src = res.unwrap();\n\n\t\t\tlet line_range = src.get_line_range(span);\n\n\t\t\t// File name & reference\n\t\t\tlet location = src_id === this.location[0] ? this.location[1] : labels[0].label.span.start;\n\n\t\t\tlet [line_no, col_no] = src\n\t\t\t\t.get_offset_line(location)\n\t\t\t\t.map(([_, idx, col]) => [format('{}', idx + 1), format('{}', col + 1)])\n\t\t\t\t.unwrap_or_else(() => ['?', '?']);\n\n\t\t\tlet line_ref = format(':{}:{}', line_no, col_no);\n\t\t\twriteln(\n\t\t\t\tw,\n\t\t\t\t'{}{}{}{}{}{}{}',\n\t\t\t\tnew Show([' ', line_no_width + 2]),\n\t\t\t\tnew Display(group_idx === 0 ? draw.ltop : draw.lcross).fg(this.config.margin_color()),\n\t\t\t\tnew Display(draw.hbar).fg(this.config.margin_color()),\n\t\t\t\tnew Display(draw.lbox).fg(this.config.margin_color()),\n\t\t\t\tsrc_name,\n\t\t\t\tline_ref,\n\t\t\t\tnew Display(draw.rbox).fg(this.config.margin_color())\n\t\t\t);\n\n\t\t\tif (!this.config.compact) {\n\t\t\t\twriteln(\n\t\t\t\t\tw,\n\t\t\t\t\t'{}{}',\n\t\t\t\t\tnew Show([' ', line_no_width + 2]),\n\t\t\t\t\tnew Display(draw.vbar).fg(this.config.margin_color())\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tclass LineLabel<S extends Span> {\n\t\t\t\tconstructor(\n\t\t\t\t\tpublic col: number,\n\t\t\t\t\tpublic label: Label<S>,\n\t\t\t\t\tpublic multi: boolean,\n\t\t\t\t\tpublic draw_msg: boolean\n\t\t\t\t) {\n\t\t\t\t\tthis.col = Math.floor(col);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Generate a list of multi-line labels\n\t\t\tlet multi_labels: Label<S>[] = [];\n\t\t\tfor (let label_info of labels) {\n\t\t\t\tif (label_info.kind === LabelKind.Multiline) {\n\t\t\t\t\tmulti_labels.push(label_info.label);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sort multiline labels by length\n\t\t\tmulti_labels.sort((a, b) => b.span.len() - a.span.len());\n\n\t\t\t//#region [ rgba(0, 20, 0, 0.3) ] Write_Margin\n\t\t\tlet write_margin = (\n\t\t\t\tw: W,\n\t\t\t\tidx: number,\n\t\t\t\tis_line: boolean,\n\t\t\t\tis_ellipsis: boolean,\n\t\t\t\tdraw_labels: boolean,\n\t\t\t\treport_row: Option<[number, boolean]>,\n\t\t\t\tline_labels: Array<LineLabel<S>>,\n\t\t\t\tmargin_label: Option<LineLabel<S>>\n\t\t\t): void => {\n\t\t\t\tlet line_no_margin: string;\n\n\t\t\t\tif (is_line && !is_ellipsis) {\n\t\t\t\t\tlet line_no = format('{}', idx + 1);\n\t\t\t\t\tline_no_margin = format(\n\t\t\t\t\t\t'{}{} {}',\n\t\t\t\t\t\tnew Show([' ', line_no_width - line_no.length]),\n\t\t\t\t\t\tline_no,\n\t\t\t\t\t\tdraw.vbar\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tline_no_margin = format(\n\t\t\t\t\t\t'{}{}',\n\t\t\t\t\t\tnew Show([' ', line_no_width + 1]),\n\t\t\t\t\t\tis_ellipsis ? draw.vbar_gap : draw.vbar_break\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\twrite(\n\t\t\t\t\tw,\n\t\t\t\t\t' {}{}',\n\t\t\t\t\tnew Display(line_no_margin).fg(this.config.margin_color()),\n\t\t\t\t\tnew Show(some(' ').filter(() => !this.config.compact))\n\t\t\t\t);\n\n\t\t\t\t// Multi-line margins\n\t\t\t\tif (draw_labels) {\n\t\t\t\t\tfor (let col of range(0, multi_labels.length + bton(multi_labels.length > 0))) {\n\t\t\t\t\t\tlet corner: Option<[Label<S>, boolean]> = none();\n\t\t\t\t\t\tlet hbar: Option<Label<S>> = none();\n\t\t\t\t\t\tlet vbar: Option<Label<S>> = none();\n\t\t\t\t\t\tlet margin_ptr: Option<[LineLabel<S>, boolean]> = none();\n\n\t\t\t\t\t\tlet multi_label = Option.from(multi_labels[col]);\n\t\t\t\t\t\tlet line_span = src.line(idx).unwrap().span();\n\n\t\t\t\t\t\tfor (let [i, label] of enumerate(\n\t\t\t\t\t\t\tmulti_labels.slice(0, (col + 1).min(multi_labels.length))\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\tlet margin = margin_label.filter((m) => label === m.label);\n\n\t\t\t\t\t\t\tif (label.span.start <= line_span.end && label.span.end > line_span.start) {\n\t\t\t\t\t\t\t\tlet is_parent = i !== col;\n\t\t\t\t\t\t\t\tlet is_start = line_span.contains(label.span.start);\n\t\t\t\t\t\t\t\tlet is_end = line_span.contains(label.last_offset());\n\n\t\t\t\t\t\t\t\tif (margin.filter(() => is_line).is_some()) {\n\t\t\t\t\t\t\t\t\tlet _margin = margin.filter(() => is_line);\n\t\t\t\t\t\t\t\t\tmargin_ptr = some([_margin.unwrap(), is_start]);\n\t\t\t\t\t\t\t\t} else if (!is_start && (!is_end || is_line)) {\n\t\t\t\t\t\t\t\t\tvbar = vbar.or(some(label).filter(() => !is_parent));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\treport_row.is_some() &&\n\t\t\t\t\t\t\t\t\t\treport_row.map_or(false, (o) => isNumber(o[0]) && isBoolean(o[1]))\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tlet [_report_row, is_arrow] = report_row.unwrap();\n\n\t\t\t\t\t\t\t\t\t\tlet label_row: number = Option.from(\n\t\t\t\t\t\t\t\t\t\t\tline_labels.enumerate().find(([_, l]) => label === l.label)\n\t\t\t\t\t\t\t\t\t\t).map_or(0, ([r, _]) => r);\n\n\t\t\t\t\t\t\t\t\t\tif (_report_row === label_row) {\n\t\t\t\t\t\t\t\t\t\t\tif (margin.is_some()) {\n\t\t\t\t\t\t\t\t\t\t\t\tvbar = some(margin.unwrap().label).filter(() => col === i);\n\t\t\t\t\t\t\t\t\t\t\t\tif (is_start) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (is_arrow) {\n\t\t\t\t\t\t\t\t\t\t\t\thbar = some(label);\n\t\t\t\t\t\t\t\t\t\t\t\tif (!is_parent) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcorner = some([label, is_start]);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} else if (!is_start) {\n\t\t\t\t\t\t\t\t\t\t\t\tvbar = vbar.or(some(label).filter(() => !is_parent));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tvbar = vbar.or(\n\t\t\t\t\t\t\t\t\t\t\t\tsome(label).filter(\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => !is_parent && !!(bton(is_start) ^ bton(_report_row < label_row))\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tmargin_ptr.is_some() &&\n\t\t\t\t\t\t\tmargin_ptr.map_or(false, (o) => Label.is(o[0]) && isBoolean(o[1])) &&\n\t\t\t\t\t\t\tis_line\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlet [margin, _is_start] = margin_ptr.unwrap();\n\t\t\t\t\t\t\tif (_is_start) {\n\t\t\t\t\t\t\t\tlet is_col = multi_label.map_or(false, (ml) => ml === margin.label);\n\t\t\t\t\t\t\t\tlet is_limit = col + 1 === multi_labels.length;\n\t\t\t\t\t\t\t\tif (!is_col && !is_limit) {\n\t\t\t\t\t\t\t\t\thbar = hbar.or(some(margin.label));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thbar = hbar.filter(\n\t\t\t\t\t\t\t(l) => margin_label.map_or(true, (margin) => margin.label !== l) || !is_line\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst getCorners = (): [Display, Display] => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tcorner.is_some() &&\n\t\t\t\t\t\t\t\tArray.isArray(corner.unwrap()) &&\n\t\t\t\t\t\t\t\tLabel.is(corner.unwrap()[0]) &&\n\t\t\t\t\t\t\t\tisBoolean(corner.unwrap()[1])\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tlet [label, is_start] = corner.unwrap();\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tnew Display(is_start ? draw.ltop : draw.lbot).fg(label.color),\n\t\t\t\t\t\t\t\t\tnew Display(draw.hbar).fg(label.color)\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t} else if (hbar.filter(() => vbar.is_some() && !this.config.cross_gap).is_some()) {\n\t\t\t\t\t\t\t\tlet label: Label<S> = hbar\n\t\t\t\t\t\t\t\t\t.filter(() => vbar.is_some() && !this.config.cross_gap)\n\t\t\t\t\t\t\t\t\t.unwrap();\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tnew Display(draw.xbar).fg(label.color),\n\t\t\t\t\t\t\t\t\tnew Display(draw.hbar).fg(label.color)\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t} else if (hbar.is_some()) {\n\t\t\t\t\t\t\t\tlet label: Label<S> = hbar.unwrap();\n\t\t\t\t\t\t\t\tconst d = new Display(draw.hbar).fg(label.color);\n\t\t\t\t\t\t\t\treturn [d, d];\n\t\t\t\t\t\t\t} else if (vbar.is_some()) {\n\t\t\t\t\t\t\t\tlet label: Label<S> = vbar.unwrap();\n\t\t\t\t\t\t\t\tlet vb = new Display(is_ellipsis ? draw.vbar_gap : draw.vbar);\n\t\t\t\t\t\t\t\treturn [vb.fg(label.color), new Display(' ').fg(none())];\n\t\t\t\t\t\t\t} else if (margin_ptr.is_some() && is_line) {\n\t\t\t\t\t\t\t\tlet [margin, is_start] = margin_ptr.unwrap();\n\t\t\t\t\t\t\t\tlet is_col = multi_label.map_or(false, (ml) => ml === margin.label);\n\t\t\t\t\t\t\t\tlet is_limit = col === multi_labels.length;\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tnew Display(\n\t\t\t\t\t\t\t\t\t\tis_limit\n\t\t\t\t\t\t\t\t\t\t\t? draw.rarrow\n\t\t\t\t\t\t\t\t\t\t\t: is_col\n\t\t\t\t\t\t\t\t\t\t\t? is_start\n\t\t\t\t\t\t\t\t\t\t\t\t? draw.ltop\n\t\t\t\t\t\t\t\t\t\t\t\t: draw.lcross\n\t\t\t\t\t\t\t\t\t\t\t: draw.hbar\n\t\t\t\t\t\t\t\t\t).fg(margin.label.color),\n\n\t\t\t\t\t\t\t\t\tnew Display(!is_limit ? draw.hbar : ' ').fg(margin.label.color)\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst d = new Display(' ').fg(none());\n\t\t\t\t\t\t\t\treturn [d, d];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet [a, b] = getCorners();\n\n\t\t\t\t\t\twrite(w, '{}', a);\n\t\t\t\t\t\tif (!this.config.compact) {\n\t\t\t\t\t\t\twrite(w, '{}', b);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t// #endregion\n\n\t\t\t//#region [ rgba(0, 0, 0, 0.3) ] Body\n\t\t\tlet is_ellipsis = false;\n\t\t\tfor (let idx of range(line_range.start, line_range.end)) {\n\t\t\t\tif (src.line(idx).is_none()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet line = src.line(idx).unwrap();\n\n\t\t\t\tconst f_labels = multi_labels.enumerate().filter_map(([_i, label]) => {\n\t\t\t\t\tlet is_start = line.span().contains(label.span.start);\n\t\t\t\t\tlet is_end = line.span().contains(label.last_offset());\n\t\t\t\t\tif (is_start) {\n\t\t\t\t\t\t// TODO: Check to see whether multi is the first on the start line or first on the end line\n\t\t\t\t\t\treturn new LineLabel(label.span.start - line.offset(), label, true, false);\n\t\t\t\t\t} else if (is_end) {\n\t\t\t\t\t\treturn new LineLabel(label.last_offset() - line.offset(), label, true, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// let margin_label = min_by_key(f_labels, ll => <any>[ll.col, !ll.label.span.start]);\n\t\t\t\tlet margin_label = min_by_key(f_labels, (ll) => ll.col);\n\t\t\t\t// .min_by_key(ll => [ll.col, !ll.label.span.start]));\n\n\t\t\t\t// Generate a list of labels for this line, along with their label columns\n\t\t\t\tlet line_labels = multi_labels.enumerate().filter_map(([_i, label]) => {\n\t\t\t\t\tlet is_start = line.span().contains(label.span.start);\n\t\t\t\t\tlet is_end = line.span().contains(label.last_offset());\n\t\t\t\t\tif (is_start && margin_label.map_or(true, (m: any) => label !== m.label)) {\n\t\t\t\t\t\t// TODO: Check to see whether multi is the first on the start line or first on the end line\n\t\t\t\t\t\treturn new LineLabel(\n\t\t\t\t\t\t\tlabel.span.start - line.offset(),\n\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tfalse // Multi-line spans don;t have their messages drawn at the start\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (is_end) {\n\t\t\t\t\t\treturn new LineLabel(\n\t\t\t\t\t\t\tlabel.last_offset() - line.offset(),\n\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\ttrue // Multi-line spans have their messages drawn at the end\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfor (let label_info of labels.filter(\n\t\t\t\t\t(l) => l.label.span.start >= line.span().start && l.label.span.end <= line.span().end\n\t\t\t\t)) {\n\t\t\t\t\tif (label_info.kind === LabelKind.Inline) {\n\t\t\t\t\t\tlet col = match(this.config.label_attach, [\n\t\t\t\t\t\t\t[LabelAttach.Start, () => label_info.label.span.start],\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tLabelAttach.Middle,\n\t\t\t\t\t\t\t\t() => (label_info.label.span.start + label_info.label.span.end) / 2\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t[LabelAttach.End, () => label_info.label.last_offset()]\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tline_labels.push(\n\t\t\t\t\t\t\tnew LineLabel(\n\t\t\t\t\t\t\t\tcol.max(label_info.label.span.start) - line.offset(),\n\t\t\t\t\t\t\t\tlabel_info.label,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Skip this line if we don't have labels for it\n\t\t\t\tif (line_labels.length === 0 && margin_label.is_none()) {\n\t\t\t\t\tlet within_label = multi_labels.some((label) => label.span.contains(line.span().start));\n\t\t\t\t\tif (!is_ellipsis && within_label) {\n\t\t\t\t\t\tis_ellipsis = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!this.config.compact && !is_ellipsis) {\n\t\t\t\t\t\t\twrite_margin(w, idx, false, is_ellipsis, false, none(), [], none());\n\t\t\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tis_ellipsis = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tis_ellipsis = false;\n\t\t\t\t}\n\n\t\t\t\t// Sort the labels by their columns\n\t\t\t\tsort_by_key(line_labels, (ll) => ll.label.order);\n\t\t\t\tsort_by_key(line_labels, (ll) => ll.col);\n\t\t\t\tsort_by_key(line_labels, (ll) => bton(!ll.label.span.start));\n\n\t\t\t\t// Determine label bounds so we know where to put error messages\n\t\t\t\tlet arrow_end_space = this.config.compact ? 1 : 2;\n\t\t\t\tlet arrow_len =\n\t\t\t\t\tline_labels.reduce((l, ll) => {\n\t\t\t\t\t\treturn ll.multi ? line.len() : l.max(ll.label.span.end.saturating_sub(line.offset()));\n\t\t\t\t\t}, 0) + arrow_end_space;\n\n\t\t\t\t// Should we draw a vertical bar as part of a label arrow on this line?\n\t\t\t\tlet get_vbar = (col: number, row: number): Option<LineLabel<S>> =>\n\t\t\t\t\tOption.from(\n\t\t\t\t\t\tline_labels\n\t\t\t\t\t\t\t// Only labels with notes get an arrow\n\t\t\t\t\t\t\t.enumerate()\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t([_, ll]) =>\n\t\t\t\t\t\t\t\t\tll.label.msg.is_some() && margin_label.map_or(true, (m) => ll.label !== m.label)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.find(\n\t\t\t\t\t\t\t\t([j, ll]) => ll.col === col && ((row <= j && !ll.multi) || (row <= j && ll.multi))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t).map(([_, ll]) => ll);\n\n\t\t\t\tlet get_highlight = (col: number): Option<Label<S>> =>\n\t\t\t\t\tmin_by_key(\n\t\t\t\t\t\tmargin_label\n\t\t\t\t\t\t\t.iter()\n\t\t\t\t\t\t\t.map((ll) => ll.label)\n\t\t\t\t\t\t\t.chain(multi_labels.map((l) => l))\n\t\t\t\t\t\t\t.chain(line_labels.map((l) => l.label))\n\t\t\t\t\t\t\t.filter((l) => l.span.contains(line.offset() + col)),\n\t\t\t\t\t\t// Prioritise displaying smaller spans\n\t\t\t\t\t\t// .min_by_key((l: any) => [-l.priority, l.span.len()]);\n\t\t\t\t\t\t// .min_by_key(l => l.span.len()));\n\t\t\t\t\t\t(l) => -l.priority + l.span.len()\n\t\t\t\t\t);\n\t\t\t\t// l => l.span.len());\n\t\t\t\t// l => -l.priority);\n\n\t\t\t\tlet get_underline = (col: number): Option<LineLabel<S>> =>\n\t\t\t\t\tmin_by_key(\n\t\t\t\t\t\tline_labels.filter((ll: any) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tthis.config.underlines &&\n\t\t\t\t\t\t\t\t// Underlines only occur for inline spans (highlighting can occur for all spans)\n\t\t\t\t\t\t\t\t!ll.multi &&\n\t\t\t\t\t\t\t\tll.label.span.contains(line.offset() + col)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t// Prioritise displaying smaller spans\n\t\t\t\t\t\t// .min_by_key(ll => [-ll.label.priority, ll.label.span.len()]);\n\t\t\t\t\t\t// .min_by_key(ll => ll.label.span.len()));\n\t\t\t\t\t\t// ll => -ll.label.priority + ll.label.span.len());\n\t\t\t\t\t\t(ll) => ll.label.span.len()\n\t\t\t\t\t);\n\t\t\t\t// ll => -ll.label.priority);\n\n\t\t\t\t// Margin\n\t\t\t\twrite_margin(w, idx, true, is_ellipsis, true, none(), line_labels, margin_label);\n\n\t\t\t\t// Line\n\t\t\t\tif (!is_ellipsis) {\n\t\t\t\t\tfor (let [col, _c] of enumerate(line.chars() as any as string[])) {\n\t\t\t\t\t\tlet highlight = get_highlight(col);\n\t\t\t\t\t\tlet color = highlight.is_some()\n\t\t\t\t\t\t\t? highlight.unwrap().color\n\t\t\t\t\t\t\t: this.config.unimportant_color();\n\t\t\t\t\t\tlet [c, width] = this.config.char_width(_c, col);\n\t\t\t\t\t\tfor (let _ of range(0, width)) {\n\t\t\t\t\t\t\twrite(w, '{}', new Display(c).fg(color));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twrite(w, '\\n');\n\n\t\t\t\t// Arrows !!!\n\t\t\t\tfor (let row of range(0, line_labels.length)) {\n\t\t\t\t\tlet line_label = line_labels[row];\n\n\t\t\t\t\tif (!this.config.compact) {\n\t\t\t\t\t\t// Margin alternate\n\t\t\t\t\t\twrite_margin(\n\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tis_ellipsis,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tsome([row, false]),\n\t\t\t\t\t\t\tline_labels,\n\t\t\t\t\t\t\tmargin_label\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// Lines alternate\n\t\t\t\t\t\tlet chars = line.chars();\n\n\t\t\t\t\t\tlet { next } = makeIter(chars);\n\n\t\t\t\t\t\tfor (let col of range(0, arrow_len)) {\n\t\t\t\t\t\t\tlet width = next().map_or(1, (c) => this.config.char_width(c, col)[1]);\n\n\t\t\t\t\t\t\tlet vbar = get_vbar(col, row);\n\t\t\t\t\t\t\tlet underline = get_underline(col).filter(() => row === 0);\n\n\t\t\t\t\t\t\tconst getCTailOuter = () => {\n\t\t\t\t\t\t\t\tif (vbar.is_some()) {\n\t\t\t\t\t\t\t\t\tlet vbar_ll = vbar.unwrap();\n\n\t\t\t\t\t\t\t\t\tconst getCTailInner = () => {\n\t\t\t\t\t\t\t\t\t\tif (underline.is_some()) {\n\t\t\t\t\t\t\t\t\t\t\t// TODO: Is this good?\n\t\t\t\t\t\t\t\t\t\t\tif (vbar_ll.label.span.len() <= 1) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn [draw.underbar, draw.underline];\n\t\t\t\t\t\t\t\t\t\t\t} else if (line.offset() + col === vbar_ll.label.span.start) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn [draw.ltop, draw.underbar];\n\t\t\t\t\t\t\t\t\t\t\t} else if (line.offset() + col === vbar_ll.label.last_offset()) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn [draw.rtop, draw.underbar];\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\treturn [draw.underbar, draw.underline];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else if (vbar_ll.multi && row === 0 && this.config.multiline_arrows) {\n\t\t\t\t\t\t\t\t\t\t\treturn [draw.uarrow, new Display(' ')];\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\treturn [draw.vbar, new Display(' ')];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tlet [c, tail] = getCTailInner();\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\tnew Display(c).fg(vbar_ll.label.color),\n\t\t\t\t\t\t\t\t\t\tnew Display(tail).fg(vbar_ll.label.color)\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else if (underline.is_some()) {\n\t\t\t\t\t\t\t\t\tlet underline_ll = underline.unwrap();\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\tnew Display(draw.underline).fg(underline_ll.label.color),\n\t\t\t\t\t\t\t\t\t\tnew Display(draw.underline).fg(underline_ll.label.color)\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn [new Display(' ').fg(none()), new Display(' ').fg(none())];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tlet [c, tail] = getCTailOuter();\n\t\t\t\t\t\t\tfor (let i of range(0, width)) {\n\t\t\t\t\t\t\t\twrite(w, '{}', i === 0 ? c : tail);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t\t}\n\n\t\t\t\t\t// Margin\n\t\t\t\t\twrite_margin(\n\t\t\t\t\t\tw,\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tis_ellipsis,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tsome([row, true]),\n\t\t\t\t\t\tline_labels,\n\t\t\t\t\t\tmargin_label\n\t\t\t\t\t);\n\t\t\t\t\t// Lines\n\t\t\t\t\tlet chars = line.chars();\n\t\t\t\t\tlet { next } = makeIter(chars);\n\n\t\t\t\t\tfor (let col of range(0, arrow_len)) {\n\t\t\t\t\t\tlet n = next();\n\t\t\t\t\t\tlet width = n.map_or(1, (c) => this.config.char_width(c, col)[1]);\n\n\t\t\t\t\t\tlet is_hbar =\n\t\t\t\t\t\t\t((col > line_label.col ? 1 : 0) ^ (line_label.multi ? 1 : 0) ||\n\t\t\t\t\t\t\t\t(line_label.label.msg.is_some() && line_label.draw_msg && col > line_label.col)) &&\n\t\t\t\t\t\t\tline_label.label.msg.is_some();\n\n\t\t\t\t\t\tconst getctail = (): [any, any] => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tcol === line_label.col &&\n\t\t\t\t\t\t\t\tline_label.label.msg.is_some() &&\n\t\t\t\t\t\t\t\tmargin_label.map_or(true, (m) => line_label.label != m.label)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tnew Display(\n\t\t\t\t\t\t\t\t\t\tline_label.multi ? (line_label.draw_msg ? draw.mbot : draw.rbot) : draw.lbot\n\t\t\t\t\t\t\t\t\t).fg(line_label.label.color),\n\n\t\t\t\t\t\t\t\t\tnew Display(draw.hbar).fg(line_label.label.color)\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tget_vbar(col, row)\n\t\t\t\t\t\t\t\t\t.filter(() => col != line_label.col || line_label.label.msg.is_some())\n\t\t\t\t\t\t\t\t\t.is_some()\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tlet vbar_ll = get_vbar(col, row)\n\t\t\t\t\t\t\t\t\t.filter(() => col != line_label.col || line_label.label.msg.is_some())\n\t\t\t\t\t\t\t\t\t.unwrap();\n\t\t\t\t\t\t\t\tif (!this.config.cross_gap && is_hbar) {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\tnew Display(draw.xbar).fg(line_label.label.color),\n\t\t\t\t\t\t\t\t\t\tnew Display(' ').fg(line_label.label.color)\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t} else if (is_hbar) {\n\t\t\t\t\t\t\t\t\tlet d = new Display(draw.hbar).fg(line_label.label.color);\n\t\t\t\t\t\t\t\t\treturn [d, d];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\tnew Display(\n\t\t\t\t\t\t\t\t\t\t\tvbar_ll.multi && row === 0 && this.config.compact ? draw.uarrow : draw.vbar\n\t\t\t\t\t\t\t\t\t\t).fg(vbar_ll.label.color),\n\n\t\t\t\t\t\t\t\t\t\tnew Display(' ').fg(line_label.label.color)\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (is_hbar) {\n\t\t\t\t\t\t\t\tlet d = new Display(draw.hbar).fg(line_label.label.color);\n\t\t\t\t\t\t\t\treturn [d, d];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlet d = new Display(' ').fg(none());\n\t\t\t\t\t\t\t\treturn [d, d];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet [c, tail] = getctail();\n\n\t\t\t\t\t\tif (width > 0) {\n\t\t\t\t\t\t\twrite(w, '{}', c);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let _ of range(1, width)) {\n\t\t\t\t\t\t\twrite(w, '{}', tail);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (line_label.draw_msg) {\n\t\t\t\t\t\twrite(w, ' {}', new Show(line_label.label.msg));\n\t\t\t\t\t}\n\n\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t}\n\t\t\t}\n\t\t\t//#endregion\n\n\t\t\tlet is_final_group = group_idx + 1 === groups_len;\n\n\t\t\t// Help\n\t\t\tif (this.help.is_some() && is_final_group) {\n\t\t\t\tlet note = this.help.unwrap();\n\t\t\t\tif (!this.config.compact) {\n\t\t\t\t\twrite_margin(w, 0, false, false, true, some([0, false]), [], none());\n\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t}\n\t\t\t\twrite_margin(w, 0, false, false, true, some([0, false]), [], none());\n\t\t\t\twrite(w, '{}: {}\\n', new Display('Help').fg(this.config.note_color()), note);\n\t\t\t}\n\n\t\t\t// Note\n\t\t\tif (this.note.is_some() && is_final_group) {\n\t\t\t\tlet note = this.note.unwrap();\n\t\t\t\tif (!this.config.compact) {\n\t\t\t\t\twrite_margin(w, 0, false, false, true, some([0, false]), [], none());\n\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t}\n\t\t\t\twrite_margin(w, 0, false, false, true, some([0, false]), [], none());\n\t\t\t\twrite(w, '{}: {}\\n', new Display('Note').fg(this.config.note_color()), note);\n\t\t\t}\n\n\t\t\t// Tail of report\n\t\t\tif (!this.config.compact) {\n\t\t\t\tif (is_final_group) {\n\t\t\t\t\tlet final_margin = format('{}{}', new Show([draw.hbar, line_no_width + 2]), draw.rbot);\n\t\t\t\t\twriteln(w, '{}', new Display(final_margin).fg(this.config.margin_color()));\n\t\t\t\t} else {\n\t\t\t\t\twriteln(\n\t\t\t\t\t\tw,\n\t\t\t\t\t\t'{}{}',\n\t\t\t\t\t\tnew Show([' ', line_no_width + 2]),\n\t\t\t\t\t\tnew Display(draw.vbar).fg(this.config.margin_color())\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (groups_len === 0) {\n\t\t\t// Help\n\t\t\tif (this.help.is_some()) {\n\t\t\t\tlet note = this.help.unwrap();\n\t\t\t\tif (!this.config.compact) {\n\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t}\n\t\t\t\twrite(w, '{}: {}\\n', new Display('Help').fg(this.config.note_color()), note);\n\t\t\t}\n\n\t\t\t// Note\n\t\t\tif (this.note.is_some()) {\n\t\t\t\tlet note = this.note.unwrap();\n\t\t\t\tif (!this.config.compact) {\n\t\t\t\t\twrite(w, '\\n');\n\t\t\t\t}\n\t\t\t\twrite(w, '{}: {}\\n', new Display('Note').fg(this.config.note_color()), note);\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype MatchResult<T> = T extends abstract new (...args: any) => infer RT ? RT : T;\n\nfunction match<T, R>(kind: T, matchers: [T, (arg: MatchResult<T>) => R][]): R {\n\tfor (let [type, then] of matchers) {\n\t\t// TODO: fixme .. this is a hack\n\t\tif (<any>kind === type) return then(kind as any);\n\t}\n\treturn null as any;\n}\n\nfunction* enumerate<T>(groups: T[]) {\n\tfor (let i = 0; i < groups.length; i++) yield [i, groups[i]] as [number, T];\n\treturn;\n}\n\nfunction* map<a, b>(a: Iterator<a>, f: (a: a) => b) {\n\tlet value = a.next();\n\twhile (value.done === false) {\n\t\tyield f(value.value);\n\t\tvalue = a.next();\n\t}\n}\n\nfunction* take_while<a>(a: Iterator<a>, p: (a: a) => boolean) {\n\tlet current = a.next();\n\twhile (current.done === false) {\n\t\tif (p(current.value)) yield current.value;\n\t\telse break;\n\t\tcurrent = a.next();\n\t}\n}\n\nfunction to_array<a>(a: Iterator<a>) {\n\tlet result: a[] = [];\n\tlet current = a.next();\n\twhile (current.done === false) {\n\t\tresult.push(current.value);\n\t\tcurrent = a.next();\n\t}\n\treturn result;\n}\n\nfunction count<a>(a: Iterator<a>) {\n\treturn to_array(a).length;\n}\n\nfunction makeIter<T extends any[] | string>(arr: T) {\n\tlet cursor = 0;\n\tlet next = (): Option<string> => {\n\t\tconst res = arr[cursor++];\n\t\tif (res === undefined) return none();\n\t\treturn some(res);\n\t};\n\n\treturn { next, cursor };\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/ReportBuilder.ts",
    "content": "import { Option, some } from \"../data/Option\";\nimport { Span } from \"../data/Span\";\nimport { Config } from \"./Config\";\nimport { Label } from \"./Label\";\nimport { iReport, Report } from \"./Report\";\nimport { ReportKind } from \"./ReportKind\";\n\n/// A type used to build a [`Report`].\n\nexport interface iReportBuilder<S extends Span> {\n  kind: ReportKind;\n  code: string;\n  msg: string;\n  note: string;\n  help: string;\n  location: [S['SourceId'] /* ::Owned */, number];\n  labels: Label<S>[];\n  config: Config;\n}\n\nexport class ReportBuilder<S extends Span> {\n  constructor(\n    private kind: typeof ReportKind,\n    private code: Option<string>,\n    private msg: Option<string>,\n    private note: Option<string>,\n    private help: Option<string>,\n    private location: [S['SourceId'], number],\n    private labels: Label<S>[],\n    private config: Config\n  ) { }\n  /// Give this report a numerical code that may be used to more precisely look up the error in documentation.\n  with_code(code: number | string): this {\n    this.code = some(code.toString().padStart(2, '0'));\n    return this;\n  }\n\n  /// Set the message of this report.\n  set_message(msg: string) {\n    this.msg = some(msg);\n  }\n\n  /// Add a message to this report.\n  with_message(msg: string): this {\n    this.msg = some(msg);\n    return this;\n  }\n\n  /// Set the note of this report.\n  set_note(note: string) {\n    this.note = some(note);\n  }\n\n  /// Set the note of this report.\n  with_note(note: string): this {\n    this.set_note(note);\n    return this;\n  }\n\n  /// Set the help message of this report.\n  set_help(note: string) {\n    this.help = some(note);\n  }\n\n  /// Set the help message of this report.\n  with_help(note: string): this {\n    this.set_help(note);\n    return this;\n  }\n\n  /// Add a label to the report.\n  add_label(label: Label<S>) {\n    this.labels.push(label);\n  }\n\n  /// Add multiple labels to the report.\n  add_labels(labels: Label<S>[]) {\n    this.labels.push(...labels);\n  }\n\n  /// Add a label to the report.\n  with_label(label: Label<S>): this {\n    this.add_label(label);\n    return this;\n  }\n\n  /// Use the given [`Config`] to determine diagnostic attributes.\n  with_config(config: Config): this {\n    this.config = config;\n    return this;\n  }\n\n  /// Finish building the [`Report`].\n  finish(): iReport<S> {\n    const r = new Report<S>(\n      this.kind,\n      this.code,\n      this.msg,\n      this.note,\n      this.help,\n      this.location,\n      this.labels,\n      this.config\n    );\n    return r;\n  }\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/ReportKind.ts",
    "content": "import { Formatter } from \"../data/Formatter\";\nimport { write } from \"../write\";\n\n/// A type that defines the kind of report being produced.\n\nexport class ReportKind {\n  constructor(...args: any[]) {}\n  fmt(f: Formatter): any {\n    if (this instanceof ReportKind.Error)\n      return write(f.buf, \"Error\");\n    if (this instanceof ReportKind.Warning)\n      return write(f.buf, \"Warning\");\n    if (this instanceof ReportKind.Advice)\n      return write(f.buf, \"Advice\");\n    if (this instanceof ReportKind.Custom)\n      return write(f.buf, \"{}\", this.s);\n    throw 'invalid ReportKind';\n  }\n  /// The report is an error and indicates a critical problem that prevents the program performing the requested\n  /// action.\n  static Error = class Error extends ReportKind { };\n  /// The report is a warning and indicates a likely problem, but not to the extent that the requested action cannot\n  /// be performed.\n  static Warning = class Warning extends ReportKind { };\n  /// The report is advice to the user about a potential anti-pattern of other benign issues.\n  static Advice = class Advice extends ReportKind { };\n  /// The report is of a kind not built into Ariadne.\n  static Custom = class Custom extends ReportKind {\n    constructor(public s: any, public color: any) {\n      super()\n    }\n  };\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/Source.ts",
    "content": "import assert from 'assert';\n\nimport { Display } from '../data/Display';\nimport { none, Option, some } from '../data/Option';\nimport { err, ok, Result } from '../data/Result';\nimport { Span } from '../data/Span';\nimport { Range } from '../data/Range';\nimport { binary_search_by_key } from '../utils';\nimport { Displayable, format } from '../write';\n\nexport type ErrMsg = string;\n\nexport type CacheInit = [id: string, source: Source] | Source | FnCache<string, any>;\n\n/// A trait implemented by [`Source`] caches.\nexport abstract class Cache<Id> {\n\t/// Fetch the [`Source`] identified by the given ID, if possible.\n\tabstract fetch(id: Id): Result<Source, ErrMsg>;\n\n\t/// Display the given ID. as a single inline value.\n\t///\n\t/// This function may make use of attributes from the [`Fmt`] trait.\n\tabstract display(id: Id): Option<Displayable>;\n\n\tstatic from(init: CacheInit) {\n\t\tif (Source.is(init)) return init;\n\t\tif (FnCache.is(init)) return init;\n\t\tconst [id, source] = init;\n\t\treturn new IdSource(source.lines(), source.len(), init);\n\t}\n}\n\n/// A type representing a single line of a [`Source`].\nclass Line {\n\tconstructor(private _offset: number, private _len: number, private _chars: string) {}\n\t/// Get the offset of this line in the original [`Source`] (i.e: the number of characters that precede it).\n\toffset(): number {\n\t\treturn this._offset;\n\t}\n\n\t/// Get the character length of this line.\n\tlen(): number {\n\t\treturn this._len;\n\t}\n\n\t/// Get the offset span of this line in the original [`Source`].\n\tspan(): Range {\n\t\treturn new Range(this.offset(), this.offset() + this.len());\n\t}\n\n\t/// Return an iterator over the characters in the line, excluding trailing whitespace.\n\tchars(): string {\n\t\treturn this._chars;\n\t}\n}\n\n/// A type representing a single source that may be referred to by [`Span`]s.\n///\n/// In most cases, a source is a single input file.\nexport class Source implements Cache<string> {\n\tconstructor(private _lines: Line[], private _len: number) {}\n\n\t/// Generate a [`Source`] from the given [`str`].\n\t///\n\t/// Note that this function can be expensive for long strings. Use an implementor of [`Cache`] where possible.\n\tstatic from(s: string, ...args: any[]): Source {\n\t\tlet offset = 0;\n\t\tconst lines = s\n\t\t\t.split('\\n') // TODO: Handle non-\\n newlines\n\t\t\t.map((line) => {\n\t\t\t\tlet l = new Line(\n\t\t\t\t\toffset,\n\t\t\t\t\tline.length + 1, // line.chars().count() + 1,\n\t\t\t\t\tline.trimEnd()\n\t\t\t\t);\n\t\t\t\toffset += l.len();\n\t\t\t\treturn l;\n\t\t\t});\n\n\t\treturn new Source(lines, offset);\n\t}\n\t/// Get the length of the total number of characters in the source.\n\tlen(): number {\n\t\treturn this._len;\n\t}\n\n\t/// Return an iterator over the characters in the source.\n\tchars(): string {\n\t\treturn this.lines()\n\t\t\t.map((l) => l.chars())\n\t\t\t.flat() as any; // TODO\n\t}\n\n\t/// Get access to a specific, zero-indexed [`Line`].\n\tline(idx: number): Option<Line> {\n\t\tconst line = this.lines()[idx];\n\t\treturn line === undefined ? none() : some(line);\n\t}\n\n\t/// Return an iterator over the [`Line`]s in this source.\n\tlines(): Line[] {\n\t\treturn this._lines;\n\t}\n\n\t/// Get the line that the given offset appears on, and the line/column numbers of the offset.\n\t///\n\t/// Note that the line/column numbers are zero-indexed.\n\tget_offset_line(offset: number): Option<[Line, number, number]> {\n\t\tif (offset <= this.len()) {\n\t\t\tlet idx = binary_search_by_key(this.lines(), offset, (line) => line.offset()).unwrap_or_else(\n\t\t\t\t(idx) => Math.max(0, (idx as any).saturating_sub(1))\n\t\t\t);\n\t\t\tlet line = this.lines()[idx];\n\t\t\tassert(\n\t\t\t\tline && offset >= line.offset(),\n\t\t\t\tformat('offset = {}, line.offset = {}, idx = {}', offset, line?.offset() ?? Infinity, idx)\n\t\t\t);\n\t\t\tconst os = line.offset();\n\t\t\treturn some([line, idx, offset - os]);\n\t\t} else {\n\t\t\treturn none();\n\t\t}\n\t}\n\n\t/// Get the range of lines that this span runs across.\n\t///\n\t/// The resulting range is guaranteed to contain valid line indices (i.e: those that can be used for\n\t/// [`Source::line`]).\n\tget_line_range(span: Span): Range {\n\t\tlet start = this.get_offset_line(span.start).map_or(0, ([_, l, __]) => l);\n\t\tlet end = this.get_offset_line((span.end as any).saturating_sub(1).max(span.start)).map_or(\n\t\t\tthis.lines().length,\n\t\t\t([_, l, __]) => l + 1\n\t\t);\n\t\t// start..end\n\t\treturn new Range(start, end);\n\t}\n\n\tfetch(_: any): Result<Source, ErrMsg> {\n\t\treturn ok(this);\n\t}\n\tdisplay(_: any): Option<Displayable> {\n\t\treturn none();\n\t}\n\n\tstatic is(other: any): other is Source {\n\t\treturn other instanceof Source;\n\t}\n}\n\nexport class IdSource extends Source {\n\tconstructor(_lines: Line[], _len: number, public data: [id: string, source: Source]) {\n\t\tsuper(_lines, _len);\n\t}\n\tfetch(id: string): Result<Source, ErrMsg> {\n\t\treturn id === this.data[0] ? ok(this.data[1]) : err(format(\"Failed to fetch source '{}'\", id));\n\t}\n\tdisplay(id: string): Option<Display> {\n\t\treturn some(new Display(id));\n\t}\n}\n\ntype PathBuf = {};\ntype Path = {\n\tto_path_buf(): PathBuf;\n\tdisplay(): Option<Display>;\n\ttoString(): string;\n};\n\n/// A [`Cache`] that fetches [`Source`]s from the filesystem.\nexport class FileCache implements Cache<Path> {\n\tconstructor(public files: Map<PathBuf, Source>) {}\n\n\tstatic default(): FileCache {\n\t\treturn new FileCache(new Map() /* HashMap::default() */);\n\t}\n\n\tfetch(path: Path): Result<Source, ErrMsg> {\n\t\tconst entry = this.files.get(path.to_path_buf());\n\t\tif (entry !== undefined) return ok(entry);\n\n\t\tconst source = Source.from('');\n\t\tthis.files.set(path.to_path_buf(), source);\n\t\treturn ok(source);\n\t}\n\tdisplay(path: Path): Option<Displayable> {\n\t\treturn path.display();\n\t}\n\n\tstatic is(other: any): other is FileCache {\n\t\treturn other instanceof FileCache;\n\t}\n}\n\n/// A [`Cache`] that fetches [`Source`]s using the provided function.\nexport class FnCache<Id, F extends Function> implements Cache<Id> {\n\tconstructor(public sources: Map<Id, Source>, public get: F) {}\n\n\t/// Create a new [`FnCache`] with the given fetch function.\n\tstatic new<Id, F extends Function>(get: F): FnCache<Id, F> {\n\t\treturn new FnCache<Id, F>(new Map() /* HashMap::default() */, get);\n\t}\n\n\t/// Pre-insert a selection of [`Source`]s into this cache.\n\twith_sources(sources: [Id, Source][]): this {\n\t\t// this.sources.reserve(sources.length);\n\t\tfor (let [id, src] of sources) {\n\t\t\tthis.sources.set(id, src);\n\t\t}\n\t\treturn this;\n\t}\n\tfetch(id: any): Result<Source, ErrMsg> {\n\t\tconst entry = this.sources.get(id);\n\t\tif (entry !== undefined) return ok(entry);\n\n\t\tconst source = Source.from(this.get(id));\n\t\tthis.sources.set(id, source);\n\t\treturn ok(source);\n\t}\n\tdisplay(id: any): Option<Displayable> {\n\t\treturn some(id);\n\t}\n\n\tstatic is(other: any): other is FnCache<any, any> {\n\t\treturn other instanceof FnCache;\n\t}\n}\n\n/// Create a [`Cache`] from a collection of ID/strings, where each corresponds to a [`Source`].\nexport function sources<Id extends string, S, I extends Array<[string, string]>>(\n\titer: I\n): FnCache<any, any> {\n\treturn FnCache.new((id: Id) => format(\"Failed to fetch source '{}'\", id)).with_sources(\n\t\titer.map(([id, s]) => [id, Source.from(s)] as [Id, Source])\n\t);\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/SourceGroup.ts",
    "content": "import { Span } from \"../data/Span\";\nimport { Range } from \"../data/Range\";\nimport { LabelInfo } from \"./LabelInfo\";\n\nexport class SourceGroup<S extends Span> {\n  constructor(\n    public src_id: string,\n    public span: Range,\n    public labels: LabelInfo<S>[]\n  ) { }\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/license",
    "content": "MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/readme.md",
    "content": "<h1 align=\"center\">\n\t<br>\n\t<br>\n\t<img width=\"320\" src=\"media/logo.svg\" alt=\"Chalk\">\n\t<br>\n\t<br>\n\t<br>\n</h1>\n\n> Terminal string styling done right\n\n[![Coverage Status](https://codecov.io/gh/chalk/chalk/branch/main/graph/badge.svg)](https://codecov.io/gh/chalk/chalk)\n[![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents)\n[![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk)\n[![run on repl.it](https://img.shields.io/badge/Run_on_Replit-f26207?logo=replit&logoColor=white)](https://repl.it/github/chalk/chalk)\n\n![](media/screenshot.png)\n\n<br>\n\n---\n\n<div align=\"center\">\n\t<p>\n\t\t<p>\n\t\t\t<sup>\n\t\t\t\tSindre Sorhus' open source work is supported by the community on <a href=\"https://github.com/sponsors/sindresorhus\">GitHub Sponsors</a>\n\t\t\t</sup>\n\t\t</p>\n\t\t<sup>Special thanks to:</sup>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://standardresume.co/tech\">\n\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/standard-resume-logo.svg\" width=\"160\">\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://retool.com/?utm_campaign=sindresorhus\">\n\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/retool-logo.svg\" width=\"230\">\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://strapi.io/?ref=sindresorhus\">\n\t\t\t<div>\n\t\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/strapi-logo-white-bg.png\" width=\"220\" alt=\"Strapi\">\n\t\t\t</div>\n\t\t\t<b>Strapi is the leading open-source headless CMS.</b>\n\t\t\t<div>\n\t\t\t\t<sup>It’s 100% JavaScript, fully customizable, and developer-first.</sup>\n\t\t\t</div>\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://www.stackaid.us/?utm_campaign=sindre\">\n\t\t\t<div>\n\t\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/stackaid-logo.png\" width=\"230\" alt=\"StackAid\">\n\t\t\t</div>\n\t\t\t<b>Fund your open source dependencies</b>\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t</p>\n</div>\n\n---\n\n<br>\n\n## Highlights\n\n- Expressive API\n- Highly performant\n- No dependencies\n- Ability to nest styles\n- [256/Truecolor color support](#256-and-truecolor-color-support)\n- Auto-detects color support\n- Doesn't extend `String.prototype`\n- Clean and focused\n- Actively maintained\n- [Used by ~86,000 packages](https://www.npmjs.com/browse/depended/chalk) as of October 4, 2022\n\n## Install\n\n```sh\nnpm install chalk\n```\n\n**IMPORTANT:** Chalk 5 is ESM. If you want to use Chalk with TypeScript or a build tool, you will probably want to use Chalk 4 for now. [Read more.](https://github.com/chalk/chalk/releases/tag/v5.0.0)\n\n## Usage\n\n```js\nimport chalk from 'chalk';\n\nconsole.log(chalk.blue('Hello world!'));\n```\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nimport chalk from 'chalk';\n\nconst log = console.log;\n\n// Combine styled and normal strings\nlog(chalk.blue('Hello') + ' World' + chalk.red('!'));\n\n// Compose multiple styles using the chainable API\nlog(chalk.blue.bgRed.bold('Hello world!'));\n\n// Pass in multiple arguments\nlog(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));\n\n// Nest styles\nlog(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));\n\n// Nest styles of the same type even (color, underline, background)\nlog(chalk.green(\n\t'I am a green line ' +\n\tchalk.blue.underline.bold('with a blue substring') +\n\t' that becomes green again!'\n));\n\n// ES2015 template literal\nlog(`\nCPU: ${chalk.red('90%')}\nRAM: ${chalk.green('40%')}\nDISK: ${chalk.yellow('70%')}\n`);\n\n// Use RGB colors in terminal emulators that support it.\nlog(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));\nlog(chalk.hex('#DEADED').bold('Bold gray!'));\n```\n\nEasily define your own themes:\n\n```js\nimport chalk from 'chalk';\n\nconst error = chalk.bold.red;\nconst warning = chalk.hex('#FFA500'); // Orange color\n\nconsole.log(error('Error!'));\nconsole.log(warning('Warning!'));\n```\n\nTake advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):\n\n```js\nimport chalk from 'chalk';\n\nconst name = 'Sindre';\nconsole.log(chalk.green('Hello %s'), name);\n//=> 'Hello Sindre'\n```\n\n## API\n\n### chalk.`<style>[.<style>...](string, [string...])`\n\nExample: `chalk.red.bold.underline('Hello', 'world');`\n\nChain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n\nMultiple arguments will be separated by space.\n\n### chalk.level\n\nSpecifies the level of color support.\n\nColor support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.\n\nIf you need to change this in a reusable module, create a new instance:\n\n```js\nimport {Chalk} from 'chalk';\n\nconst customChalk = new Chalk({level: 0});\n```\n\n| Level | Description |\n| :---: | :--- |\n| `0` | All colors disabled |\n| `1` | Basic color support (16 colors) |\n| `2` | 256 color support |\n| `3` | Truecolor support (16 million colors) |\n\n### supportsColor\n\nDetect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.\n\nCan be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.\n\nExplicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.\n\n### chalkStderr and supportsColorStderr\n\n`chalkStderr` contains a separate instance configured with color support detected for `stderr` stream instead of `stdout`. Override rules from `supportsColor` apply to this too. `supportsColorStderr` is exposed for convenience.\n\n### modifierNames, foregroundColorNames, backgroundColorNames, and colorNames\n\nAll supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`.\n\nThis can be useful if you wrap Chalk and need to validate input:\n\n```js\nimport {modifierNames, foregroundColorNames} from 'chalk';\n\nconsole.log(modifierNames.includes('bold'));\n//=> true\n\nconsole.log(foregroundColorNames.includes('pink'));\n//=> false\n```\n\n## Styles\n\n### Modifiers\n\n- `reset` - Reset the current style.\n- `bold` - Make the text bold.\n- `dim` - Make the text have lower opacity.\n- `italic` - Make the text italic. *(Not widely supported)*\n- `underline` - Put a horizontal line below the text. *(Not widely supported)*\n- `overline` - Put a horizontal line above the text. *(Not widely supported)*\n- `inverse`- Invert background and foreground colors.\n- `hidden` - Print the text but make it invisible.\n- `strikethrough` - Puts a horizontal line through the center of the text. *(Not widely supported)*\n- `visible`- Print the text only when Chalk has a color level above zero. Can be useful for things that are purely cosmetic.\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `blackBright` (alias: `gray`, `grey`)\n- `redBright`\n- `greenBright`\n- `yellowBright`\n- `blueBright`\n- `magentaBright`\n- `cyanBright`\n- `whiteBright`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n- `bgBlackBright` (alias: `bgGray`, `bgGrey`)\n- `bgRedBright`\n- `bgGreenBright`\n- `bgYellowBright`\n- `bgBlueBright`\n- `bgMagentaBright`\n- `bgCyanBright`\n- `bgWhiteBright`\n\n## 256 and Truecolor color support\n\nChalk supports 256 colors and [Truecolor](https://github.com/termstandard/colors) (16 million colors) on supported terminal apps.\n\nColors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).\n\nExamples:\n\n- `chalk.hex('#DEADED').underline('Hello, world!')`\n- `chalk.rgb(15, 100, 204).inverse('Hello!')`\n\nBackground versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `hex` for foreground colors and `bgHex` for background colors).\n\n- `chalk.bgHex('#DEADED').underline('Hello, world!')`\n- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`\n\nThe following color models can be used:\n\n- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`\n- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`\n- [`ansi256`](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) - Example: `chalk.bgAnsi256(194)('Honeydew, more or less')`\n\n## Browser support\n\nSince Chrome 69, ANSI escape codes are natively supported in the developer console.\n\n## Windows\n\nIf you're on Windows, do yourself a favor and use [Windows Terminal](https://github.com/microsoft/terminal) instead of `cmd.exe`.\n\n## Origin story\n\n[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.\n\n## Related\n\n- [chalk-template](https://github.com/chalk/chalk-template) - [Tagged template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) support for this module\n- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module\n- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal\n- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color\n- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes\n- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes\n- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes\n- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models\n- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal\n- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings\n- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings\n- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/index.d.ts",
    "content": "// TODO: Make it this when TS suports that.\n// import {ModifierName, ForegroundColor, BackgroundColor, ColorName} from '#ansi-styles';\n// import {ColorInfo, ColorSupportLevel} from '#supports-color';\nimport {ModifierName, ForegroundColorName, BackgroundColorName, ColorName} from './vendor/ansi-styles/index.js';\nimport {ColorInfo, ColorSupportLevel} from './vendor/supports-color/index.js';\n\nexport interface Options {\n\t/**\n\tSpecify the color support for Chalk.\n\n\tBy default, color support is automatically detected based on the environment.\n\n\tLevels:\n\t- `0` - All colors disabled.\n\t- `1` - Basic 16 colors support.\n\t- `2` - ANSI 256 colors support.\n\t- `3` - Truecolor 16 million colors support.\n\t*/\n\treadonly level?: ColorSupportLevel;\n}\n\n/**\nReturn a new Chalk instance.\n*/\nexport const Chalk: new (options?: Options) => ChalkInstance; // eslint-disable-line @typescript-eslint/naming-convention\n\nexport interface ChalkInstance {\n\t(...text: unknown[]): string;\n\n\t/**\n\tThe color support for Chalk.\n\n\tBy default, color support is automatically detected based on the environment.\n\n\tLevels:\n\t- `0` - All colors disabled.\n\t- `1` - Basic 16 colors support.\n\t- `2` - ANSI 256 colors support.\n\t- `3` - Truecolor 16 million colors support.\n\t*/\n\tlevel: ColorSupportLevel;\n\n\t/**\n\tUse RGB values to set text color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.rgb(222, 173, 237);\n\t```\n\t*/\n\trgb: (red: number, green: number, blue: number) => this;\n\n\t/**\n\tUse HEX value to set text color.\n\n\t@param color - Hexadecimal value representing the desired color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.hex('#DEADED');\n\t```\n\t*/\n\thex: (color: string) => this;\n\n\t/**\n\tUse an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.ansi256(201);\n\t```\n\t*/\n\tansi256: (index: number) => this;\n\n\t/**\n\tUse RGB values to set background color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.bgRgb(222, 173, 237);\n\t```\n\t*/\n\tbgRgb: (red: number, green: number, blue: number) => this;\n\n\t/**\n\tUse HEX value to set background color.\n\n\t@param color - Hexadecimal value representing the desired color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.bgHex('#DEADED');\n\t```\n\t*/\n\tbgHex: (color: string) => this;\n\n\t/**\n\tUse a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.bgAnsi256(201);\n\t```\n\t*/\n\tbgAnsi256: (index: number) => this;\n\n\t/**\n\tModifier: Reset the current style.\n\t*/\n\treadonly reset: this;\n\n\t/**\n\tModifier: Make the text bold.\n\t*/\n\treadonly bold: this;\n\n\t/**\n\tModifier: Make the text have lower opacity.\n\t*/\n\treadonly dim: this;\n\n\t/**\n\tModifier: Make the text italic. *(Not widely supported)*\n\t*/\n\treadonly italic: this;\n\n\t/**\n\tModifier: Put a horizontal line below the text. *(Not widely supported)*\n\t*/\n\treadonly underline: this;\n\n\t/**\n\tModifier: Put a horizontal line above the text. *(Not widely supported)*\n\t*/\n\treadonly overline: this;\n\n\t/**\n\tModifier: Invert background and foreground colors.\n\t*/\n\treadonly inverse: this;\n\n\t/**\n\tModifier: Print the text but make it invisible.\n\t*/\n\treadonly hidden: this;\n\n\t/**\n\tModifier: Puts a horizontal line through the center of the text. *(Not widely supported)*\n\t*/\n\treadonly strikethrough: this;\n\n\t/**\n\tModifier: Print the text only when Chalk has a color level above zero.\n\n\tCan be useful for things that are purely cosmetic.\n\t*/\n\treadonly visible: this;\n\n\treadonly black: this;\n\treadonly red: this;\n\treadonly green: this;\n\treadonly yellow: this;\n\treadonly blue: this;\n\treadonly magenta: this;\n\treadonly cyan: this;\n\treadonly white: this;\n\n\t/*\n\tAlias for `blackBright`.\n\t*/\n\treadonly gray: this;\n\n\t/*\n\tAlias for `blackBright`.\n\t*/\n\treadonly grey: this;\n\n\treadonly blackBright: this;\n\treadonly redBright: this;\n\treadonly greenBright: this;\n\treadonly yellowBright: this;\n\treadonly blueBright: this;\n\treadonly magentaBright: this;\n\treadonly cyanBright: this;\n\treadonly whiteBright: this;\n\n\treadonly bgBlack: this;\n\treadonly bgRed: this;\n\treadonly bgGreen: this;\n\treadonly bgYellow: this;\n\treadonly bgBlue: this;\n\treadonly bgMagenta: this;\n\treadonly bgCyan: this;\n\treadonly bgWhite: this;\n\n\t/*\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGray: this;\n\n\t/*\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGrey: this;\n\n\treadonly bgBlackBright: this;\n\treadonly bgRedBright: this;\n\treadonly bgGreenBright: this;\n\treadonly bgYellowBright: this;\n\treadonly bgBlueBright: this;\n\treadonly bgMagentaBright: this;\n\treadonly bgCyanBright: this;\n\treadonly bgWhiteBright: this;\n}\n\n/**\nMain Chalk object that allows to chain styles together.\n\nCall the last one as a method with a string argument.\n\nOrder doesn't matter, and later styles take precedent in case of a conflict.\n\nThis simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n*/\ndeclare const chalk: ChalkInstance;\n\nexport const supportsColor: ColorInfo;\n\nexport const chalkStderr: typeof chalk;\nexport const supportsColorStderr: typeof supportsColor;\n\nexport {\n\tModifierName, ForegroundColorName, BackgroundColorName, ColorName,\n\tmodifierNames, foregroundColorNames, backgroundColorNames, colorNames,\n// } from '#ansi-styles';\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tColorInfo,\n\tColorSupport,\n\tColorSupportLevel,\n// } from '#supports-color';\n} from './vendor/supports-color/index.js';\n\n// TODO: Remove these aliases in the next major version\n/**\n@deprecated Use `ModifierName` instead.\n\nBasic modifier names.\n*/\nexport type Modifiers = ModifierName;\n\n/**\n@deprecated Use `ForegroundColorName` instead.\n\nBasic foreground color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type ForegroundColor = ForegroundColorName;\n\n/**\n@deprecated Use `BackgroundColorName` instead.\n\nBasic background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type BackgroundColor = BackgroundColorName;\n\n/**\n@deprecated Use `ColorName` instead.\n\nBasic color names. The combination of foreground and background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type Color = ColorName;\n\n/**\n@deprecated Use `modifierNames` instead.\n\nBasic modifier names.\n*/\nexport const modifiers: readonly Modifiers[];\n\n/**\n@deprecated Use `foregroundColorNames` instead.\n\nBasic foreground color names.\n*/\nexport const foregroundColors: readonly ForegroundColor[];\n\n/**\n@deprecated Use `backgroundColorNames` instead.\n\nBasic background color names.\n*/\nexport const backgroundColors: readonly BackgroundColor[];\n\n/**\n@deprecated Use `colorNames` instead.\n\nBasic color names. The combination of foreground and background color names.\n*/\nexport const colors: readonly Color[];\n\nexport default chalk;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/index.js",
    "content": "import ansiStyles from './vendor/ansi-styles';\nimport supportsColor from './vendor/supports-color';\nimport {\n\t// eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} from './utilities.js';\n\nconst { stdout: stdoutColor, stderr: stderrColor } = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (\n\t\toptions.level &&\n\t\t!(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)\n\t) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = (options) => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(\n\t\t\t\tthis,\n\t\t\t\tcreateStyler(style.open, style.close, this[STYLER]),\n\t\t\t\tthis[IS_EMPTY]\n\t\t\t);\n\t\t\tObject.defineProperty(this, styleName, { value: builder });\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', { value: builder });\n\t\treturn builder;\n\t}\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst { level } = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(\n\t\t\t\t\tgetModelAnsi(model, levelMapping[level], 'color', ...arguments_),\n\t\t\t\t\tansiStyles.color.close,\n\t\t\t\t\tthis[STYLER]\n\t\t\t\t);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t}\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst { level } = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(\n\t\t\t\t\tgetModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_),\n\t\t\t\t\tansiStyles.bgColor.close,\n\t\t\t\t\tthis[STYLER]\n\t\t\t\t);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) =>\n\t\tapplyStyle(builder, arguments_.length === 1 ? '' + arguments_[0] : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst { openAll, closeAll } = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors\n} from './vendor/ansi-styles/index.js';\n\nexport { stdoutColor as supportsColor, stderrColor as supportsColorStderr };\n\nexport default chalk;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/utilities.js",
    "content": "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/vendor/ansi-styles/index.d.ts",
    "content": "export interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention\n\t/**\n\tThe ANSI terminal control sequence for starting this style.\n\t*/\n\treadonly open: string;\n\n\t/**\n\tThe ANSI terminal control sequence for ending this style.\n\t*/\n\treadonly close: string;\n}\n\nexport interface ColorBase {\n\t/**\n\tThe ANSI terminal control sequence for ending this color.\n\t*/\n\treadonly close: string;\n\n\tansi(code: number): string;\n\n\tansi256(code: number): string;\n\n\tansi16m(red: number, green: number, blue: number): string;\n}\n\nexport interface Modifier {\n\t/**\n\tResets the current color chain.\n\t*/\n\treadonly reset: CSPair;\n\n\t/**\n\tMake text bold.\n\t*/\n\treadonly bold: CSPair;\n\n\t/**\n\tEmitting only a small amount of light.\n\t*/\n\treadonly dim: CSPair;\n\n\t/**\n\tMake text italic. (Not widely supported)\n\t*/\n\treadonly italic: CSPair;\n\n\t/**\n\tMake text underline. (Not widely supported)\n\t*/\n\treadonly underline: CSPair;\n\n\t/**\n\tMake text overline.\n\n\tSupported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.\n\t*/\n\treadonly overline: CSPair;\n\n\t/**\n\tInverse background and foreground colors.\n\t*/\n\treadonly inverse: CSPair;\n\n\t/**\n\tPrints the text, but makes it invisible.\n\t*/\n\treadonly hidden: CSPair;\n\n\t/**\n\tPuts a horizontal line through the center of the text. (Not widely supported)\n\t*/\n\treadonly strikethrough: CSPair;\n}\n\nexport interface ForegroundColor {\n\treadonly black: CSPair;\n\treadonly red: CSPair;\n\treadonly green: CSPair;\n\treadonly yellow: CSPair;\n\treadonly blue: CSPair;\n\treadonly cyan: CSPair;\n\treadonly magenta: CSPair;\n\treadonly white: CSPair;\n\n\t/**\n\tAlias for `blackBright`.\n\t*/\n\treadonly gray: CSPair;\n\n\t/**\n\tAlias for `blackBright`.\n\t*/\n\treadonly grey: CSPair;\n\n\treadonly blackBright: CSPair;\n\treadonly redBright: CSPair;\n\treadonly greenBright: CSPair;\n\treadonly yellowBright: CSPair;\n\treadonly blueBright: CSPair;\n\treadonly cyanBright: CSPair;\n\treadonly magentaBright: CSPair;\n\treadonly whiteBright: CSPair;\n}\n\nexport interface BackgroundColor {\n\treadonly bgBlack: CSPair;\n\treadonly bgRed: CSPair;\n\treadonly bgGreen: CSPair;\n\treadonly bgYellow: CSPair;\n\treadonly bgBlue: CSPair;\n\treadonly bgCyan: CSPair;\n\treadonly bgMagenta: CSPair;\n\treadonly bgWhite: CSPair;\n\n\t/**\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGray: CSPair;\n\n\t/**\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGrey: CSPair;\n\n\treadonly bgBlackBright: CSPair;\n\treadonly bgRedBright: CSPair;\n\treadonly bgGreenBright: CSPair;\n\treadonly bgYellowBright: CSPair;\n\treadonly bgBlueBright: CSPair;\n\treadonly bgCyanBright: CSPair;\n\treadonly bgMagentaBright: CSPair;\n\treadonly bgWhiteBright: CSPair;\n}\n\nexport interface ConvertColor {\n\t/**\n\tConvert from the RGB color space to the ANSI 256 color space.\n\n\t@param red - (`0...255`)\n\t@param green - (`0...255`)\n\t@param blue - (`0...255`)\n\t*/\n\trgbToAnsi256(red: number, green: number, blue: number): number;\n\n\t/**\n\tConvert from the RGB HEX color space to the RGB color space.\n\n\t@param hex - A hexadecimal string containing RGB data.\n\t*/\n\thexToRgb(hex: string): [red: number, green: number, blue: number];\n\n\t/**\n\tConvert from the RGB HEX color space to the ANSI 256 color space.\n\n\t@param hex - A hexadecimal string containing RGB data.\n\t*/\n\thexToAnsi256(hex: string): number;\n\n\t/**\n\tConvert from the ANSI 256 color space to the ANSI 16 color space.\n\n\t@param code - A number representing the ANSI 256 color.\n\t*/\n\tansi256ToAnsi(code: number): number;\n\n\t/**\n\tConvert from the RGB color space to the ANSI 16 color space.\n\n\t@param red - (`0...255`)\n\t@param green - (`0...255`)\n\t@param blue - (`0...255`)\n\t*/\n\trgbToAnsi(red: number, green: number, blue: number): number;\n\n\t/**\n\tConvert from the RGB HEX color space to the ANSI 16 color space.\n\n\t@param hex - A hexadecimal string containing RGB data.\n\t*/\n\thexToAnsi(hex: string): number;\n}\n\n/**\nBasic modifier names.\n*/\nexport type ModifierName = keyof Modifier;\n\n/**\nBasic foreground color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type ForegroundColorName = keyof ForegroundColor;\n\n/**\nBasic background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type BackgroundColorName = keyof BackgroundColor;\n\n/**\nBasic color names. The combination of foreground and background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type ColorName = ForegroundColorName | BackgroundColorName;\n\n/**\nBasic modifier names.\n*/\nexport const modifierNames: readonly ModifierName[];\n\n/**\nBasic foreground color names.\n*/\nexport const foregroundColorNames: readonly ForegroundColorName[];\n\n/**\nBasic background color names.\n*/\nexport const backgroundColorNames: readonly BackgroundColorName[];\n\n/*\nBasic color names. The combination of foreground and background color names.\n*/\nexport const colorNames: readonly ColorName[];\n\ndeclare const ansiStyles: {\n\treadonly modifier: Modifier;\n\treadonly color: ColorBase & ForegroundColor;\n\treadonly bgColor: ColorBase & BackgroundColor;\n\treadonly codes: ReadonlyMap<number, number>;\n} & ForegroundColor & BackgroundColor & Modifier & ConvertColor;\n\nexport default ansiStyles;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/vendor/ansi-styles/index.js",
    "content": "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/vendor/supports-color/browser.d.ts",
    "content": "export {default} from './index.js';\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/vendor/supports-color/browser.js",
    "content": "/* eslint-env browser */\n\nconst level = (() => {\n\tif (navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/vendor/supports-color/index.d.ts",
    "content": "import type {WriteStream} from 'node:tty';\n\nexport type Options = {\n\t/**\n\tWhether `process.argv` should be sniffed for `--color` and `--no-color` flags.\n\n\t@default true\n\t*/\n\treadonly sniffFlags?: boolean;\n};\n\n/**\nLevels:\n- `0` - All colors disabled.\n- `1` - Basic 16 colors support.\n- `2` - ANSI 256 colors support.\n- `3` - Truecolor 16 million colors support.\n*/\nexport type ColorSupportLevel = 0 | 1 | 2 | 3;\n\n/**\nDetect whether the terminal supports color.\n*/\nexport type ColorSupport = {\n\t/**\n\tThe color level.\n\t*/\n\tlevel: ColorSupportLevel;\n\n\t/**\n\tWhether basic 16 colors are supported.\n\t*/\n\thasBasic: boolean;\n\n\t/**\n\tWhether ANSI 256 colors are supported.\n\t*/\n\thas256: boolean;\n\n\t/**\n\tWhether Truecolor 16 million colors are supported.\n\t*/\n\thas16m: boolean;\n};\n\nexport type ColorInfo = ColorSupport | false;\n\nexport function createSupportsColor(stream?: WriteStream, options?: Options): ColorInfo;\n\ndeclare const supportsColor: {\n\tstdout: ColorInfo;\n\tstderr: ColorInfo;\n};\n\nexport default supportsColor;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/lib/chalk/chalk/source/vendor/supports-color/index.js",
    "content": "// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv) {\n\treturn false;\n}\n\nconst env = {\n\tFORCE_COLOR: 'false'\n};\n\nlet flagForceColor;\nif (\n\thasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m') || hasFlag('color=full') || hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif ('CI' in env) {\n\t\tif ('GITHUB_ACTIONS' in env || 'GITEA_ACTIONS' in env) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (\n\t\t\t['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(\n\t\t\t\t(sign) => sign in env\n\t\t\t) ||\n\t\t\tenv.CI_NAME === 'codeship'\n\t\t) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({ isTTY: false }),\n\tstderr: createSupportsColor({ isTTY: false })\n};\n\nexport default supportsColor;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/stringFormat.ts",
    "content": "//  ValueError :: String -> Error\nfunction ValueError(message) {\n\tvar err = new Error(message);\n\terr.name = 'ValueError';\n\treturn err;\n}\n\n//  create :: Object -> String,*... -> String\nfunction create(transformers) {\n\treturn function (template) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\tvar idx = 0;\n\t\tvar state = 'UNDEFINED';\n\n\t\treturn template.replace(\n\t\t\t/([{}])\\1|[{](.*?)(?:!(.+?))?[}]/g,\n\t\t\tfunction (match, literal, _key, xf) {\n\t\t\t\tif (literal != null) {\n\t\t\t\t\treturn literal;\n\t\t\t\t}\n\t\t\t\tvar key = _key;\n\t\t\t\tif (key.length > 0) {\n\t\t\t\t\tif (state === 'IMPLICIT') {\n\t\t\t\t\t\tthrow ValueError('cannot switch from ' + 'implicit to explicit numbering');\n\t\t\t\t\t}\n\t\t\t\t\tstate = 'EXPLICIT';\n\t\t\t\t} else {\n\t\t\t\t\tif (state === 'EXPLICIT') {\n\t\t\t\t\t\tthrow ValueError('cannot switch from ' + 'explicit to implicit numbering');\n\t\t\t\t\t}\n\t\t\t\t\tstate = 'IMPLICIT';\n\t\t\t\t\tkey = String(idx);\n\t\t\t\t\tidx += 1;\n\t\t\t\t}\n\n\t\t\t\t//  1.  Split the key into a lookup path.\n\t\t\t\t//  2.  If the first path component is not an index, prepend '0'.\n\t\t\t\t//  3.  Reduce the lookup path to a single result. If the lookup\n\t\t\t\t//      succeeds the result is a singleton array containing the\n\t\t\t\t//      value at the lookup path; otherwise the result is [].\n\t\t\t\t//  4.  Unwrap the result by reducing with '' as the default value.\n\t\t\t\tvar path = key.split('.');\n\t\t\t\tvar value = (/^\\d+$/.test(path[0]) ? path : ['0'].concat(path))\n\t\t\t\t\t.reduce(\n\t\t\t\t\t\tfunction (maybe, key) {\n\t\t\t\t\t\t\treturn maybe.reduce(function (_, x) {\n\t\t\t\t\t\t\t\treturn x != null && key in Object(x)\n\t\t\t\t\t\t\t\t\t? [typeof x[key] === 'function' ? x[key]() : x[key]]\n\t\t\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\t\t}, []);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[args]\n\t\t\t\t\t)\n\t\t\t\t\t.reduce(function (_, x) {\n\t\t\t\t\t\treturn x;\n\t\t\t\t\t}, '');\n\n\t\t\t\tif (xf == null) {\n\t\t\t\t\treturn value;\n\t\t\t\t} else if (Object.prototype.hasOwnProperty.call(transformers, xf)) {\n\t\t\t\t\treturn transformers[xf](value);\n\t\t\t\t} else {\n\t\t\t\t\tthrow ValueError('no transformer named \"' + xf + '\"');\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n}\n\n//  format :: String,*... -> String\nvar format = create({});\n\n//  format.create :: Object -> String,*... -> String\nformat.create = create;\n\n//  format.extend :: Object,Object -> ()\nformat.extend = function (prototype, transformers) {\n\tvar $format = create(transformers);\n\tprototype.format = function () {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\targs.unshift(this);\n\t\treturn $format.apply(global, args);\n\t};\n};\n\nexport default format;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/utils/binary_search_by_key.ts",
    "content": "import { err, ok, Result } from '../data/Result';\n\n\nexport function binary_search_by_key<T>(arr: T[], x: any, fn: (o: T) => number): Result<number, number> {\n\n  let start = 0, end = arr.length - 1, mid, val;\n\n  // Iterate while start not meets end\n  while (start < end) {\n\n    // Find the mid index\n    mid = Math.floor((start + end) / 2);\n\n    val = fn(arr[mid]);\n\n    // If element is present at mid, return True\n    if (val === x)\n      return ok(mid);\n\n\n    // Else look in left or right half accordingly\n    else if (val < x)\n      start = mid + 1;\n\n    else\n      end = mid - 1;\n  }\n\n  return err(get_sorted_index(arr, x, fn));\n}\nfunction get_sorted_index(arr: any[], x: any, fn: any) {\n  let low = 0, high = arr.length;\n\n  while (low < high) {\n    let mid = (low + high) >>> 1;\n    if (x > fn(arr[mid]))\n      low = mid + 1;\n    else\n      high = mid;\n  }\n\n  return low;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/utils/include_str.ts",
    "content": "// import { readFileSync } from 'fs';\nimport { join } from 'path';\n\nexport function include_str(path: string): string {\n\t// return readFileSync(join(process.cwd(), path)).toString();\n\treturn '';\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/utils/index.ts",
    "content": "import { Option } from '../data/Option';\n\nexport { binary_search_by_key } from './binary_search_by_key'\n\nexport function range(start: number, end: number) {\n  let rv = [];\n  while (start < end) {\n    rv.push(start);\n    start++;\n  }\n  return rv;\n}\n\nexport function *rangeIter(start: number, end: number) {\n  while (start < end) {\n    yield start\n    start++\n  }\n  return\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(max, Math.max(min, value))\n}\n\nexport function wrapping_add_usize(lhs: number, rhs: number): number {\n  // NOTE: this seems to work but is definitely wrong\n  return (lhs + rhs)\n}\n\nexport const max = (self: number[]) => {\n  if (self.length === 0) return undefined\n  return Math.max.apply(null, self);\n};\n\nexport const min = (self: number[]) => {\n  if (self.length === 0) return undefined\n  return Math.min.apply(null, self);\n};\n\n// convert a boolean to an integer value\nexport const bton = (b: boolean): number => b === true ? 1 : 0\n\nexport function sort_by_key<T>(arr: T[], fn: (a: T) => number | string): void {\n  arr.sort((a, b) => {\n    return (fn(a) as any) - (fn(b) as any)\n  })\n}\n\nexport function min_by_key<T>(arr: T[], fn: (value: T) => number): Option<T> {\n  let res: [number, T | null] = [Infinity, null]\n  for (let val of arr) {\n    if (fn(val) < res[0]) {\n      res = [fn(val), val]\n    }\n  }\n  return Option.from(res[1])\n}\n\nexport const isString = (o: any): o is string => typeof o === \"string\"\nexport const isNumber = (o: any): o is number => typeof o === \"number\"\nexport const isBoolean = (o: any): o is boolean => typeof o === \"boolean\"\n\nexport const isCallback = (\n  maybeFunction: true | ((...args: any[]) => void),\n): maybeFunction is (...args: any[]) => void =>\n  typeof maybeFunction === 'function'\n\nexport function toCamelCase(str: string) {\n  return str\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n      return index === 0 ? word.toLowerCase() : word.toUpperCase();\n    })\n    .replace(/\\s+/g, \"\");\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/ariadne-ts/src/write.ts",
    "content": "import sf from './stringFormat.js';\nimport { Display, isDisplay } from './data/Display';\nimport { stringFormatter } from './data/Formatter';\nimport { isOption, Option } from './data/Option';\nimport { isResult, Result } from './data/Result';\nimport { Write } from './data/Write';\nimport { isShow, Show } from './data/Show';\n\nexport type Displayable<T = any, E = any> =\n\t| Display\n\t| Show\n\t| Option<T>\n\t| Result<T, E>\n\t| string\n\t| number;\n\nexport function write<W extends Write>(w: W, ...args: Displayable[]) {\n\tw.write_fmt(format(...args.map(fromRust)));\n}\n\nexport function format(...args: Displayable[]): string {\n\tconst [head, ...rest] = args.map(fromRust);\n\treturn sf(head, ...rest);\n}\n\nfunction fromRust(node: Displayable): string {\n\tif (isDisplay(node)) {\n\t\treturn node.display();\n\t}\n\tif (isShow(node)) {\n\t\tlet f = stringFormatter();\n\t\tnode.fmt(f);\n\t\treturn f.unwrap();\n\t}\n\tif (isOption(node)) {\n\t\treturn node.unwrap_or_else(() => '') as string;\n\t}\n\tif (isResult(node)) {\n\t\treturn node.unwrap_or_else(() => '<(Unwrap Err)>');\n\t}\n\treturn node.toString();\n}\n\nexport function writeln<W extends Write>(w: W, ...args: Displayable[]) {\n\tlet val = format(...args.map(fromRust));\n\tw.write_fmt(val);\n\tw.write_fmt('\\n');\n}\n\nexport function eprintln(...args: Displayable[]): void {\n\tconsole.error(format(...args));\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/environment/Errors.ts",
    "content": "import ts from 'typescript';\n\nexport function nicerError(e: ts.DiagnosticMessageChain | ts.DiagnosticRelatedInformation) {\n\tif (e.code == 1070) {\n\t\treturn 'Static/public methods are not supported on traits';\n\t}\n\n\treturn e.messageText.toString();\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/environment/ShadeupEnvironment.ts",
    "content": "import { SourceMapConsumer } from 'source-map';\nimport Parser from 'web-tree-sitter';\nimport {\n\tcompile,\n\tIndexMapping,\n\tlookupIndexMapping,\n\tlookupIndexMappingRange,\n\tprePass,\n\treverseLookupIndexMapping,\n\treverseLookupIndexMappingCursor,\n\treverseLookupIndexMappingRange,\n\tSourceNode,\n\tSourceString\n} from '../generator/root';\nimport { getShadeupParser } from '../parser';\nimport { AstContext } from '../parser/AstContext';\nimport { makeTypescriptEnvironment, TypescriptEnvironment } from './TypescriptEnvironment';\nimport sourceMappingURL from 'source-map/lib/mappings.wasm?url';\nimport diff from '../fast-diff/diff.js';\n\nimport ts from 'typescript';\nimport { Color, Report, ReportKind, Source, Label, Range } from '../ariadne-ts/src/browser';\nimport { mkStringWriter } from '../ariadne-ts/src/data/Write.js';\nimport AnsiUp from 'ansi_up';\nimport { nicerError } from './Errors';\nimport { validate, validateGraph } from './validate';\nimport { addGLSLShader, GLSLCompilationError, GLSLShader } from '../generator/glsl';\nimport { Write } from '../ariadne-ts/src/data/Write';\nimport { cleanName, closest, findShadeupTags } from '../generator/util';\nimport { updateIntegerMixing } from '../generator/transform';\nimport { TagGraph } from './tagGraph';\nimport { addWGSLShader, WGSLShader } from '../generator/wgsl';\n\nimport quickCache from './quickCache.json';\n\nfunction countLines(str: string) {\n\tlet count = 0;\n\tfor (let i = 0; i < str.length; i++) {\n\t\tif (str[i] === '\\n') {\n\t\t\tcount++;\n\t\t}\n\t}\n\treturn count;\n}\n\nexport type ShadeupGenericDiagnostic = {\n\tmessage: string;\n\tstartIndex: number;\n\tendIndex: number;\n};\n\ntype SymbolRange = {\n\tstartIndex: number;\n\tendIndex: number;\n};\n\nexport type ShadeupFile = {\n\tpath: string;\n\tcontent: string;\n\tparsedFlatSymbolMap: SymbolRange[];\n\ttranspiled: string;\n\tshaders: { glsl: GLSLShader; wgsl: WGSLShader }[];\n\tmap: SourceMapConsumer | null;\n\tmapping: IndexMapping | null;\n\toldTree: Parser.Tree | null;\n\tparseDiagnostics: ShadeupGenericDiagnostic[];\n\tcachedDiagnostics: ShadeupGenericDiagnostic[];\n};\n\ntype DiffRange = {\n\tstartIndex: number;\n\toldEndIndex: number;\n\tnewEndIndex: number;\n\tstartPosition: { row: number; column: number };\n\toldEndPosition: { row: number; column: number };\n\tnewEndPosition: { row: number; column: number };\n};\n\nexport type ClassificationRanges = {\n\tranges: [number, number, ts.ScriptElementKind][];\n};\n\nexport function indexToRowColumn(str: string, index: number) {\n\tlet row = 0;\n\tlet column = 0;\n\tfor (let i = 0; i < index; i++) {\n\t\tif (str[i] === '\\n') {\n\t\t\trow++;\n\t\t\tcolumn = 0;\n\t\t} else {\n\t\t\tcolumn++;\n\t\t}\n\t}\n\treturn { row, column };\n}\n\nexport function rowColumnToIndex(str: string, row: number, column: number) {\n\tlet index = 0;\n\tlet currentRow = 0;\n\tlet currentColumn = 0;\n\twhile (currentRow < row || currentColumn < column) {\n\t\tif (str[index] === '\\n') {\n\t\t\tcurrentRow++;\n\t\t\tcurrentColumn = 0;\n\t\t} else {\n\t\t\tcurrentColumn++;\n\t\t}\n\t\tindex++;\n\t}\n\treturn index;\n}\n\nfunction getDiffRange(a: string, b: string) {\n\tlet diffs = diff(a, b);\n\tif (diffs.length === 1) {\n\t\treturn null;\n\t}\n\tlet startIndex = 0;\n\tlet oldEndIndex = a.length;\n\tlet newEndIndex = b.length;\n\n\tlet insertions = 0;\n\tlet deletions = 0;\n\tlet neutrals = 0;\n\n\tfor (let i = 0; i < diffs.length; i++) {\n\t\tlet diff = diffs[i];\n\t\tif (diff[0] === 1) {\n\t\t\tinsertions++;\n\t\t} else if (diff[0] === -1) {\n\t\t\tdeletions++;\n\t\t} else if (diff[0] === 0) {\n\t\t\tneutrals++;\n\t\t}\n\n\t\tif (insertions > 1 || deletions > 1 || neutrals > 1) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tfor (let i = 0; i < diffs.length; i++) {\n\t\tlet diff = diffs[i];\n\n\t\tif (diff[0] === 0) {\n\t\t\tstartIndex += diff[1].length;\n\t\t} else if (diff[0] === -1) {\n\t\t\toldEndIndex = startIndex + diff[1].length;\n\t\t\tnewEndIndex = startIndex;\n\t\t\tbreak;\n\t\t} else if (diff[0] === 1) {\n\t\t\tnewEndIndex = startIndex + diff[1].length;\n\t\t\toldEndIndex = startIndex;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\tstartIndex,\n\t\toldEndIndex,\n\t\tnewEndIndex,\n\t\tstartPosition: indexToRowColumn(a, startIndex),\n\t\toldEndPosition: indexToRowColumn(a, oldEndIndex),\n\t\tnewEndPosition: indexToRowColumn(b, newEndIndex)\n\t};\n}\n\nfunction getReplaceRange(a: string, b: string) {\n\tlet diffs = diff(a, b);\n\tif (diffs.length === 1) {\n\t\treturn {\n\t\t\tcontent: b,\n\t\t\trange: {\n\t\t\t\tstart: 0,\n\t\t\t\tlength: a.length\n\t\t\t}\n\t\t};\n\t}\n\n\tlet insertions = 0;\n\tlet deletions = 0;\n\tlet neutrals = 0;\n\n\tfor (let i = 0; i < diffs.length; i++) {\n\t\tlet diff = diffs[i];\n\t\tif (diff[0] === 1) {\n\t\t\tinsertions++;\n\t\t} else if (diff[0] === -1) {\n\t\t\tdeletions++;\n\t\t} else if (diff[0] === 0) {\n\t\t\tneutrals++;\n\t\t}\n\n\t\tif (insertions > 1 || deletions > 1 || neutrals > 1) {\n\t\t\treturn {\n\t\t\t\tcontent: b,\n\t\t\t\trange: {\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tlength: a.length\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tlet startIndex = 0;\n\tlet oldEndIndex = a.length;\n\tlet newEndIndex = b.length;\n\n\tfor (let i = 0; i < diffs.length; i++) {\n\t\tlet diff = diffs[i];\n\t\tif (diff[0] === 0) {\n\t\t\tstartIndex += diff[1].length;\n\t\t} else if (diff[0] === -1) {\n\t\t\toldEndIndex = startIndex + diff[1].length;\n\t\t\tnewEndIndex = startIndex;\n\t\t} else if (diff[0] === 1) {\n\t\t\tnewEndIndex = startIndex + diff[1].length;\n\n\t\t\t// oldEndIndex = startIndex;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: b.substring(startIndex, newEndIndex),\n\t\trange: {\n\t\t\tstart: startIndex,\n\t\t\tlength: oldEndIndex - startIndex\n\t\t}\n\t};\n}\n\nexport function getFunctionNodeName(\n\tnode: ts.FunctionDeclaration | ts.MethodDeclaration,\n\tsourceFile?: ts.SourceFile\n) {\n\tif (!sourceFile) {\n\t\tsourceFile = node.getSourceFile();\n\t}\n\tif (ts.isMethodDeclaration(node)) {\n\t\tlet parentName =\n\t\t\tnode.parent && ts.isClassDeclaration(node.parent) ? node.parent.name?.getText() : 'not_class';\n\n\t\treturn sourceFile.fileName + ':' + parentName + ':' + node.name?.getText();\n\t}\n\treturn sourceFile.fileName + ':' + node.name?.getText();\n}\n\nfunction canTypesBeCasted(a: string, b: string) {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (\n\t\t(a.startsWith('float') && b.startsWith('int')) ||\n\t\t(a.startsWith('int') && b.startsWith('float'))\n\t) {\n\t\tlet aSize = parseInt(a[a.length - 1]);\n\t\tlet bSize = parseInt(b[b.length - 1]);\n\t\tif (aSize == bSize) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport const USING_QUICK_CACHE = true;\n\nexport class ShadeupEnvironment {\n\tfiles: ShadeupFile[] = [];\n\tparser: Parser | null = null;\n\ttsEnv: TypescriptEnvironment | null = null;\n\tloads: Map<string, string[]> = new Map();\n\tlibraries: Set<string> = new Set();\n\n\tassetMappings: Map<string, [string, string]> = new Map();\n\n\ttagGraph: TagGraph;\n\n\tvalidationDiagnostics: Map<string, ts.Diagnostic[]> = new Map();\n\tgraphValidationDiagnostics: Map<string, ts.Diagnostic[]> = new Map();\n\n\tconstructor() {}\n\n\tasync init() {\n\t\tthis.parser = await getShadeupParser();\n\t\tthis.tsEnv = await makeTypescriptEnvironment(this);\n\t\tif (USING_QUICK_CACHE) {\n\t\t\tfor (let k of Object.keys(quickCache)) {\n\t\t\t\tthis.stdEmitCache.set(k, quickCache[k]);\n\t\t\t}\n\t\t}\n\t}\n\n\temitLogs = true;\n\n\tsetAssetMapping(assets: [string, [string, string]][]) {\n\t\tconsole.log('Set asset mapping', assets);\n\t\tthis.assetMappings = new Map(assets);\n\t}\n\n\tprint(...args: any[]) {\n\t\tif (this.emitLogs) {\n\t\t\tconsole.log(...args);\n\t\t}\n\t}\n\n\treset() {\n\t\tthis.tagGraph = new TagGraph();\n\t\tfor (let f of this.files) {\n\t\t\tif (f.path == '/file.ts' || f.path.startsWith('/_std/')) continue;\n\t\t\tthis.tsEnv.system.$fsMap.delete(f.path);\n\t\t}\n\t\tthis.files = [];\n\t\tthis.validationDiagnostics.clear();\n\t\tthis.graphValidationDiagnostics.clear();\n\t}\n\n\t/**\n\t * Wipes out the tagGraph and rebuilds all  and tags\n\t */\n\tapplyTags() {\n\t\tlet checker = this.tsEnv?.env.languageService.getProgram().getTypeChecker();\n\t\tlet files = this.tsEnv.env.languageService.getProgram().getSourceFiles();\n\n\t\tthis.tagGraph = new TagGraph();\n\t\tfor (let file of files) {\n\t\t\tts.forEachChild(file, (node) => {\n\t\t\t\tif (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) {\n\t\t\t\t\tlet name = getFunctionNodeName(node);\n\t\t\t\t\tthis.tagGraph.addNode(name, node);\n\n\t\t\t\t\tlet tags = findShadeupTags(node);\n\t\t\t\t\tfor (let tag of tags) {\n\t\t\t\t\t\tthis.tagGraph.addTag(name, tag);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ts.isClassDeclaration(node)) {\n\t\t\t\t\tts.forEachChild(node, (child) => {\n\t\t\t\t\t\tif (ts.isMethodDeclaration(child)) {\n\t\t\t\t\t\t\tlet name = getFunctionNodeName(child);\n\t\t\t\t\t\t\tthis.tagGraph.addNode(name, child);\n\n\t\t\t\t\t\t\tlet tags = findShadeupTags(child);\n\t\t\t\t\t\t\tfor (let tag of tags) {\n\t\t\t\t\t\t\t\tthis.tagGraph.addTag(name, tag);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst visitNode = (node: ts.Node) => {\n\t\t\tif (ts.isCallExpression(node)) {\n\t\t\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t\t\t}\n\t\t\t\tif (exprSmybol) {\n\t\t\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet referencedFunctionName = getFunctionNodeName(funcDeclar);\n\t\t\t\t\t\tlet callingFunction = closest(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t(n) => ts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcallingFunction &&\n\t\t\t\t\t\t\t(ts.isFunctionDeclaration(callingFunction) || ts.isMethodDeclaration(callingFunction))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlet callingFunctionName = getFunctionNodeName(callingFunction);\n\n\t\t\t\t\t\t\tthis.tagGraph.addEdge(referencedFunctionName, callingFunctionName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tts.forEachChild(node, visitNode);\n\t\t};\n\t\tfor (let file of files) {\n\t\t\tts.forEachChild(file, (node) => {\n\t\t\t\tif (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) {\n\t\t\t\t\tts.forEachChild(node, visitNode);\n\t\t\t\t}\n\n\t\t\t\tif (ts.isClassDeclaration(node)) {\n\t\t\t\t\tts.forEachChild(node, (child) => {\n\t\t\t\t\t\tif (ts.isMethodDeclaration(child)) {\n\t\t\t\t\t\t\tts.forEachChild(child, visitNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.tagGraph.propagateTags();\n\t}\n\n\tstdEmitCache: Map<string, ts.EmitOutput> = new Map();\n\n\tasync regenerate(filePath?: string[]) {\n\t\tif (!this.tsEnv) {\n\t\t\tthrow new Error('Typescript environment not initialized');\n\t\t}\n\t\tlet addedFiles = new Set<string>();\n\t\tthis.graphValidationDiagnostics.clear();\n\t\tlet now = performance.now();\n\t\tlet outputs: ts.EmitOutput[] = [];\n\n\t\tthis.applyTags();\n\n\t\tthis.print('Tagged in ', performance.now() - now, 'ms');\n\n\t\tnow = performance.now();\n\n\t\tlet checker = this.tsEnv.env.languageService.getProgram().getTypeChecker();\n\n\t\tconst addFile = (path: string) => {\n\t\t\tif (this.stdEmitCache.has(path)) {\n\t\t\t\toutputs.push(this.stdEmitCache.get(path)!);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (addedFiles.has(path)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log('Adding file ', path);\n\t\t\taddedFiles.add(path);\n\t\t\tlet sourceFile = this.files.find((f) => f.path === path);\n\t\t\tlet shaders = this.renderShaders(path);\n\t\t\tif (sourceFile) {\n\t\t\t\tsourceFile.shaders = shaders;\n\t\t\t}\n\n\t\t\tlet out = this.tsEnv?.env.languageService.getEmitOutput(path);\n\n\t\t\tif (out) {\n\t\t\t\tlet sf = this.tsEnv.env.getSourceFile(path);\n\t\t\t\tif (sourceFile) {\n\t\t\t\t\tthis.graphValidationDiagnostics.set(path, validateGraph(this, sourceFile, sf, checker));\n\t\t\t\t\tlet outputCode = this.mixInShaders(sourceFile, out?.outputFiles[0].text!);\n\n\t\t\t\t\tout.outputFiles[0].text = outputCode;\n\t\t\t\t}\n\t\t\t\tif (sf) {\n\t\t\t\t\tout.outputFiles[0].text = this.mixInStructs(sf, out.outputFiles[0].text);\n\t\t\t\t}\n\n\t\t\t\tif (this.loads.has(path)) {\n\t\t\t\t\tlet jsOut = `__shadeup_register_loads(${JSON.stringify(\n\t\t\t\t\t\tthis.loads.get(path).map((p) => {\n\t\t\t\t\t\t\treturn this.assetMappings.get(p) || p;\n\t\t\t\t\t\t})\n\t\t\t\t\t)});`;\n\t\t\t\t\tout.outputFiles[0].text = jsOut + out.outputFiles[0].text;\n\t\t\t\t}\n\n\t\t\t\tif (this.libraries.size > 0) {\n\t\t\t\t\tlet jsOut = `__shadeup_register_libs(${JSON.stringify(Array.from(this.libraries))});`;\n\t\t\t\t\tout.outputFiles[0].text = jsOut + out.outputFiles[0].text;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tpath.startsWith('/_std/') ||\n\t\t\t\t\tpath == '/file.ts' ||\n\t\t\t\t\tpath == '/std_math.ts' ||\n\t\t\t\t\tpath == '/static-math.ts' ||\n\t\t\t\t\tpath == '/std___std_all.ts' ||\n\t\t\t\t\tpath == '/std.ts'\n\t\t\t\t) {\n\t\t\t\t\tthis.stdEmitCache.set(path, out);\n\t\t\t\t}\n\t\t\t\toutputs.push(out);\n\t\t\t}\n\t\t};\n\n\t\tconst addDir = (path: string) => {\n\t\t\tlet files = this.tsEnv?.system.readDirectory(path);\n\t\t\tif (files) {\n\t\t\t\tfor (let f of files) {\n\t\t\t\t\tlet dirExists = this.tsEnv?.system.directoryExists(path + f);\n\n\t\t\t\t\tif (dirExists) {\n\t\t\t\t\t\taddDir(path + f.replace(/^\\//, '') + '/');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (f.endsWith('.d.ts')) continue;\n\t\t\t\t\t\tlet p = path + f.replace(/^\\//, '');\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\taddFile(p);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (filePath) {\n\t\t\tawait Promise.all(\n\t\t\t\tfilePath.map(async (f) => {\n\t\t\t\t\tlet sourceFile = this.tsEnv.env.getSourceFile(f);\n\t\t\t\t\tif (sourceFile) {\n\t\t\t\t\t\tlet refs = this.tsEnv.env.languageService.getFileReferences(f);\n\n\t\t\t\t\t\tfor (let dep of refs) {\n\t\t\t\t\t\t\tlet shadeupFile = this.files.find((f) => f.path === dep.fileName);\n\t\t\t\t\t\t\tif (shadeupFile) {\n\t\t\t\t\t\t\t\t// Force a recompile of the file\n\t\t\t\t\t\t\t\tawait this.writeFile(\n\t\t\t\t\t\t\t\t\tshadeupFile.path,\n\t\t\t\t\t\t\t\t\tshadeupFile.content,\n\t\t\t\t\t\t\t\t\tthis.stdEmitCache.has(shadeupFile.path)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\taddFile(dep.fileName);\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\taddFile(f);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t} else {\n\t\t\taddDir('/');\n\t\t}\n\n\t\tlet s = outputs.map((o) => ({\n\t\t\tpath: o.outputFiles[0].name,\n\t\t\tcontents: o.outputFiles[0].text\n\t\t}));\n\n\t\tthis.print('Regenerated in', performance.now() - now, 'ms');\n\t\treturn s;\n\t}\n\n\tmixInShaders(file: ShadeupFile, code: string) {\n\t\tlet finalPass = code;\n\t\t// this.print('Shaders', file.shaders);\n\t\tfor (let pair of file.shaders) {\n\t\t\tlet shader = pair.glsl;\n\t\t\tlet params: string[] = [];\n\t\t\tlet paramsTyped: string[] = [];\n\t\t\tfor (let param of Object.keys(shader.locals)) {\n\t\t\t\tlet u = shader.locals[param];\n\n\t\t\t\tparams.push(`_ext_uniform_local_${param}: ${param}`);\n\t\t\t\tparamsTyped.push(`_ext_uniform_local_${param}: ${JSON.stringify(u)}`);\n\t\t\t}\n\n\t\t\tfor (let param of Object.keys(shader.globals)) {\n\t\t\t\tlet u = shader.globals[param];\n\n\t\t\t\tparams.push(\n\t\t\t\t\t`_ext_uniform_global_${param}: globalVarGet(\"${cleanName(u.fileName)}\", \"${param}\")`\n\t\t\t\t);\n\t\t\t\tparamsTyped.push(`_ext_uniform_global_${param}: ${JSON.stringify(u.structure)}`);\n\t\t\t}\n\n\t\t\t// finalPass = finalPass.replaceAll(\n\t\t\t// \t`window.shader_start_${shader.key}(`,\n\t\t\t// \t`__shadeup_make_shader_inst(\"${shader.key}\", {${params.join(', ')}}, `\n\t\t\t// );\n\n\t\t\tfinalPass =\n\t\t\t\t`__shadeup_gen_shader(\"${shader.key}\", {\n\t\t\t\t\twebgl: {${paramsTyped.join(', ')}},\n\t\t\t\t\twebgpu: ${JSON.stringify({\n\t\t\t\t\t\tattributeInput: pair.wgsl.attributeInput,\n\t\t\t\t\t\tattributeOutput: pair.wgsl.attributeOutput,\n\t\t\t\t\t\tlocals: pair.wgsl.locals,\n\t\t\t\t\t\tglobals: pair.wgsl.globals\n\t\t\t\t\t})}\n\t\t\t\t}, {webgpu: \\`${pair.wgsl.source}\\`,webgl:\\`${\n\t\t\t\t\tpair.glsl.source\n\t\t\t\t}\\`, software: () => {}}, ${JSON.stringify(shader.sourceMapping)});\\n\\n` + finalPass;\n\t\t}\n\n\t\tif (file.path === '/main.ts') {\n\t\t\tthis.print('Final pass', finalPass);\n\t\t}\n\n\t\treturn finalPass;\n\t}\n\n\tmixInStructs(root: ts.SourceFile, code: string): string {\n\t\tlet finalPass = code;\n\t\tlet structs = [];\n\n\t\twalkNodes(root, (node) => {\n\t\t\tif (ts.isClassDeclaration(node)) {\n\t\t\t\tif (hasShadeupDocTag(node, 'struct')) {\n\t\t\t\t\tlet structName = node.name?.getText() ?? 'Unknown';\n\t\t\t\t\tlet struct = {\n\t\t\t\t\t\tname: structName,\n\t\t\t\t\t\tfields: []\n\t\t\t\t\t};\n\t\t\t\t\tfor (let member of node.members) {\n\t\t\t\t\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\t\t\t\t\tlet name = member.name.getText();\n\t\t\t\t\t\t\tlet type = member.type?.getText() ?? 'any';\n\t\t\t\t\t\t\tstruct.fields.push({\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstructs.push(struct);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tlet sBlocks = [];\n\t\tfor (let struct of structs) {\n\t\t\tsBlocks.push(\n\t\t\t\t`__shadeup_register_struct(\"${struct.name}\", {${JSON.stringify(struct.fields)}});`\n\t\t\t);\n\t\t}\n\t\t// finalPass = finalPass.replace(`/**__SHADEUP_STRUCT_INJECTION_HOOK__*/`, sBlocks.join('\\n\\n'));\n\n\t\treturn finalPass;\n\t}\n\n\terrors(files?: string[]) {\n\t\tif (!this.tsEnv) {\n\t\t\tthrow new Error('Typescript environment not initialized');\n\t\t}\n\t\tlet now = performance.now();\n\t\tlet all = [];\n\t\tfor (let f of this.files) {\n\t\t\tif (files) {\n\t\t\t\tif (!files.includes(f.path)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet errors = this.tsEnv.env.languageService.getSemanticDiagnostics(f.path);\n\t\t\tlet syntacticErrors = this.tsEnv.env.languageService.getSyntacticDiagnostics(f.path);\n\n\t\t\tall.push(\n\t\t\t\t...[...errors, ...syntacticErrors]\n\t\t\t\t\t.filter((e) => {\n\t\t\t\t\t\tif (e.code == 2345) {\n\t\t\t\t\t\t\t// Argument of type '...' is not assignable to parameter of type '...'\n\t\t\t\t\t\t\tlet parsed =\n\t\t\t\t\t\t\t\t/Argument of type '(.*)' is not assignable to parameter of type '(.*).*'/.exec(\n\t\t\t\t\t\t\t\t\ttypeof e.messageText == 'string' ? e.messageText : e.messageText.messageText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (parsed) {\n\t\t\t\t\t\t\t\tlet [_, from, to] = parsed;\n\n\t\t\t\t\t\t\t\tif (canTypesBeCasted(from, to)) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.code == 2339) {\n\t\t\t\t\t\t\tlet msgText =\n\t\t\t\t\t\t\t\ttypeof e.messageText == 'string' ? e.messageText : e.messageText.messageText;\n\t\t\t\t\t\t\tif (msgText.startsWith(\"Property '__index' does not exist on type '\")) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.code == 2705) {\n\t\t\t\t\t\t\tlet msgText =\n\t\t\t\t\t\t\t\ttypeof e.messageText == 'string' ? e.messageText : e.messageText.messageText;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tmsgText.startsWith(\n\t\t\t\t\t\t\t\t\t\"An async function or method in ES5/ES3 requires the 'Promise' constructor.\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t})\n\t\t\t\t\t.map((e) => this.transformTSError(f, e))\n\t\t\t);\n\n\t\t\tlet validationDiagnostics = this.validationDiagnostics.get(f.path) ?? [];\n\t\t\tall.push(...validationDiagnostics.map((e) => this.transformTSError(f, e)));\n\n\t\t\tlet graphValidationDiagnostics = this.graphValidationDiagnostics.get(f.path) ?? [];\n\t\t\tall.push(...graphValidationDiagnostics.map((e) => this.transformTSError(f, e)));\n\t\t}\n\t\tthis.print('Got errors in', performance.now() - now, 'ms');\n\n\t\treturn all;\n\t}\n\n\tcompletions(path: string, pos: number) {\n\t\tif (!this.tsEnv) {\n\t\t\tthrow new Error('Typescript environment not initialized');\n\t\t}\n\t\tlet file = this.files.find((f) => f.path === path);\n\t\tif (!file) {\n\t\t\tthrow new Error('File not found');\n\t\t}\n\n\t\tlet source = file.transpiled;\n\t\tlet rowCol = indexToRowColumn(source, pos);\n\t\tlet backTransform = reverseLookupIndexMappingCursor(file.mapping, pos);\n\n\t\tlet fp = this.tsEnv.env.getSourceFile(path);\n\t\tconsole.log(fp.getFullText());\n\t\tconsole.log(\n\t\t\tfp.getFullText().substring(0, backTransform) + '^' + fp.getFullText().substring(backTransform)\n\t\t);\n\n\t\tlet completions = this.tsEnv.env.languageService.getCompletionsAtPosition(\n\t\t\tpath,\n\t\t\tbackTransform,\n\t\t\t{\n\t\t\t\tincludeExternalModuleExports: true,\n\t\t\t\tincludeInsertTextCompletions: true,\n\t\t\t\tincludeCompletionsForModuleExports: true,\n\t\t\t\tincludeCompletionsWithInsertText: true,\n\t\t\t\tincludeInlayVariableTypeHints: true,\n\t\t\t\tincludeCompletionsWithClassMemberSnippets: true,\n\t\t\t\tincludeCompletionsWithSnippetText: true,\n\t\t\t\tincludeAutomaticOptionalChainCompletions: true,\n\t\t\t\tincludeCompletionsForImportStatements: true,\n\t\t\t\tuseLabelDetailsInCompletionEntries: true,\n\t\t\t\tincludeInlayPropertyDeclarationTypeHints: true\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\tif (!completions) {\n\t\t\treturn [];\n\t\t}\n\t\tlet entries = [];\n\t\tlet maxCompletions = 100;\n\t\tfor (let c of completions.entries) {\n\t\t\tif (entries.length >= maxCompletions) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet range = null;\n\t\t\tif (c.replacementSpan) {\n\t\t\t\tlet startOffset = c.replacementSpan.start;\n\t\t\t\tlet endOffset = c.replacementSpan.start + c.replacementSpan.length;\n\n\t\t\t\tlet offsetRangeReal = lookupIndexMappingRange(file.mapping, startOffset, endOffset);\n\n\t\t\t\tlet start = indexToRowColumn(file.content, offsetRangeReal.start);\n\t\t\t\tlet end = indexToRowColumn(file.content, offsetRangeReal.end);\n\n\t\t\t\trange = {\n\t\t\t\t\tstartLineNumber: start.row + 1,\n\t\t\t\t\tstartColumn: start.column + 1,\n\t\t\t\t\tendLineNumber: end.row + 1,\n\t\t\t\t\tendColumn: end.column + 1\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tentries.push({\n\t\t\t\trange,\n\t\t\t\tcompletion: c,\n\t\t\t\tdetails: this.tsEnv.env.languageService.getCompletionEntryDetails(\n\t\t\t\t\tpath,\n\t\t\t\t\tbackTransform,\n\t\t\t\t\tc.name,\n\t\t\t\t\t{},\n\t\t\t\t\tc.source,\n\t\t\t\t\t{},\n\t\t\t\t\tc.data\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\t\tconsole.log(entries);\n\n\t\treturn entries;\n\t}\n\n\tclassifications(path: string): ClassificationRanges {\n\t\tif (!this.tsEnv) {\n\t\t\tthrow new Error('Typescript environment not initialized');\n\t\t}\n\t\tlet file = this.files.find((f) => f.path === path);\n\t\tif (!file) {\n\t\t\tthrow new Error('File not found');\n\t\t}\n\n\t\tlet fp = this.tsEnv.env.getSourceFile(path);\n\t\tlet checker = this.tsEnv.env.languageService.getProgram().getTypeChecker();\n\t\tlet ranges = [];\n\n\t\tfor (let symbolRange of file.parsedFlatSymbolMap) {\n\t\t\tlet offsetRangeReal = reverseLookupIndexMappingRange(\n\t\t\t\tfile.mapping,\n\t\t\t\tsymbolRange.startIndex,\n\t\t\t\tsymbolRange.endIndex\n\t\t\t);\n\t\t\tif (\n\t\t\t\toffsetRangeReal.start != 0 &&\n\t\t\t\toffsetRangeReal.end < file.transpiled.length - 1 &&\n\t\t\t\tisFinite(offsetRangeReal.start) &&\n\t\t\t\tisFinite(offsetRangeReal.end)\n\t\t\t) {\n\t\t\t\tlet info = this.tsEnv.env.languageService.getQuickInfoAtPosition(\n\t\t\t\t\tpath,\n\t\t\t\t\toffsetRangeReal.start\n\t\t\t\t);\n\n\t\t\t\tif (info) {\n\t\t\t\t\tlet backRange = lookupIndexMappingRange(\n\t\t\t\t\t\tfile.mapping,\n\t\t\t\t\t\tinfo.textSpan.start,\n\t\t\t\t\t\tinfo.textSpan.start + info.textSpan.length\n\t\t\t\t\t);\n\n\t\t\t\t\tlet kind = info.kind;\n\t\t\t\t\tconst funcMatch = /^\\(alias\\)\\s+[^(]+\\(/i;\n\t\t\t\t\tif (kind == 'alias') {\n\t\t\t\t\t\tlet fullStr = '';\n\t\t\t\t\t\tlet isNew = false;\n\t\t\t\t\t\tfor (let p of info.displayParts) {\n\t\t\t\t\t\t\tfullStr += p.text;\n\t\t\t\t\t\t\tif (p.kind == 'keyword' && (p.text == 'class' || p.text == 'new')) {\n\t\t\t\t\t\t\t\tkind = ts.ScriptElementKind.classElement;\n\n\t\t\t\t\t\t\t\tif (p.text == 'new') {\n\t\t\t\t\t\t\t\t\tisNew = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (p.kind == 'keyword' && p.text == 'namespace') {\n\t\t\t\t\t\t\t\tkind = ts.ScriptElementKind.classElement;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (p.kind == 'keyword' && p.text == 'type') {\n\t\t\t\t\t\t\t\tkind = ts.ScriptElementKind.classElement;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!isNew && funcMatch.test(fullStr)) {\n\t\t\t\t\t\t\tkind = ts.ScriptElementKind.functionElement;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tranges.push([backRange.start, backRange.end, kind]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tranges: ranges\n\t\t};\n\t}\n\n\thover(path: string, pos: number) {\n\t\tif (!this.tsEnv) {\n\t\t\tthrow new Error('Typescript environment not initialized');\n\t\t}\n\t\tlet file = this.files.find((f) => f.path === path);\n\t\tif (!file) {\n\t\t\tthrow new Error('File not found');\n\t\t}\n\n\t\tlet source = file.transpiled;\n\t\tlet rowCol = indexToRowColumn(source, pos);\n\t\tlet backTransform = reverseLookupIndexMappingCursor(file.mapping, pos);\n\n\t\tlet fp = this.tsEnv.env.getSourceFile(path);\n\n\t\tlet hovers = this.tsEnv.env.languageService.getQuickInfoAtPosition(path, backTransform);\n\n\t\tif (!hovers) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet startOffset = hovers.textSpan.start;\n\t\tlet endOffset = hovers.textSpan.start + hovers.textSpan.length;\n\n\t\tlet offsetRangeReal = lookupIndexMappingRange(file.mapping, startOffset, endOffset);\n\n\t\tlet start = indexToRowColumn(file.content, offsetRangeReal.start);\n\t\tlet end = indexToRowColumn(file.content, offsetRangeReal.end);\n\n\t\t(hovers as any).range = {\n\t\t\tstartLineNumber: start.row + 1,\n\t\t\tstartColumn: start.column + 1,\n\t\t\tendLineNumber: end.row + 1,\n\t\t\tendColumn: end.column + 1\n\t\t};\n\n\t\treturn hovers;\n\t}\n\n\tgetFileErrorData(f: ts.SourceFile, estart: number, eend: number) {\n\t\tlet file = this.files.find((f2) => f2.path === (f as any).path);\n\n\t\tif (!file) {\n\t\t\t// Use native file\n\n\t\t\treturn {\n\t\t\t\tfile: f,\n\t\t\t\tsource: f.getFullText(),\n\t\t\t\tstart: estart,\n\t\t\t\tend: eend\n\t\t\t};\n\t\t}\n\t\tlet start = indexToRowColumn(file.transpiled, estart ?? 0);\n\n\t\tlet realStart = file.map?.originalPositionFor({ column: start.column, line: start.row + 1 });\n\n\t\tlet end = indexToRowColumn(file.transpiled, eend);\n\t\tlet realEnd = file.map?.originalPositionFor({ column: end.column, line: end.row + 1 });\n\n\t\tlet startIndex =\n\t\t\trealStart?.line && realStart?.column\n\t\t\t\t? rowColumnToIndex(file.content, realStart?.line, realStart?.column)\n\t\t\t\t: 0;\n\t\tlet endIndex =\n\t\t\trealEnd?.line && realEnd?.column\n\t\t\t\t? rowColumnToIndex(file.content, realEnd?.line, realEnd?.column)\n\t\t\t\t: 0;\n\n\t\tstartIndex = lookupIndexMapping(file.mapping!, estart ?? 0);\n\t\tendIndex = lookupIndexMapping(file.mapping!, eend);\n\t\tlet o = lookupIndexMappingRange(file.mapping!, estart ?? 0, eend);\n\n\t\tstartIndex = o.start;\n\t\tendIndex = o.end;\n\n\t\treturn {\n\t\t\tfile: file,\n\t\t\tsource: file.content,\n\t\t\tstart: startIndex,\n\t\t\tend: endIndex\n\t\t};\n\t}\n\n\ttransformTSError(file: ShadeupFile, error: ts.Diagnostic) {\n\t\tif (error.file === undefined) {\n\t\t\treturn {\n\t\t\t\terror: error,\n\t\t\t\tfile: file.path,\n\t\t\t\tmessage: error.messageText.toString()\n\t\t\t};\n\t\t}\n\n\t\tconst printReal = true;\n\n\t\tlet { source, start, end } = this.getFileErrorData(\n\t\t\terror.file,\n\t\t\terror.start ?? 0,\n\t\t\t(error.start ?? 0) + (error.length ?? 0)\n\t\t);\n\t\tif (printReal) {\n\t\t\tstart = error.start ?? 0;\n\t\t\tend = (error.start ?? 0) + (error.length ?? 0);\n\t\t}\n\n\t\tlet categorymapping = {\n\t\t\t[ts.DiagnosticCategory.Error]: ReportKind.Error,\n\t\t\t[ts.DiagnosticCategory.Warning]: ReportKind.Warning,\n\t\t\t[ts.DiagnosticCategory.Message]: ReportKind.Advice,\n\t\t\t[ts.DiagnosticCategory.Suggestion]: ReportKind.Advice\n\t\t};\n\n\t\tlet r = Report.build(categorymapping[error.category], file.path, start).with_code(error.code);\n\t\tif (typeof error.messageText === 'string') {\n\t\t\tr = r.with_message(error.messageText);\n\t\t}\n\n\t\tlet sources = [];\n\t\tfunction addMessage(msgObj: ts.DiagnosticMessageChain | string) {\n\t\t\tif (typeof msgObj === 'string') {\n\t\t\t\tr = r.with_label(\n\t\t\t\t\tLabel.from([file.path, Range.new(start, Math.max(start, end))]).with_message(msgObj)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tr = r.with_label(\n\t\t\t\t\tLabel.from([file.path, Range.new(start, Math.max(start, end))]).with_message(\n\t\t\t\t\t\tnicerError(msgObj)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tfor (let d of msgObj.next ?? []) {\n\t\t\t\t\taddMessage(d);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof error.messageText === 'string') {\n\t\t\taddMessage(nicerError(error as ts.DiagnosticMessageChain));\n\t\t} else {\n\t\t\taddMessage(error.messageText);\n\t\t}\n\n\t\tfor (let d of error.relatedInformation ?? []) {\n\t\t\tlet relatedRange = printReal\n\t\t\t\t? { start: d.start ?? 0, end: (d.start ?? 0) + (d.length ?? 0) }\n\t\t\t\t: lookupIndexMappingRange(file.mapping!, d.start ?? 0, (d.start ?? 0) + (d.length ?? 0));\n\t\t\tif (typeof d.messageText === 'string') {\n\t\t\t\tr.with_label(\n\t\t\t\t\tLabel.from([\n\t\t\t\t\t\tfile.path,\n\t\t\t\t\t\tRange.new(relatedRange.start, Math.max(relatedRange.start, relatedRange.end))\n\t\t\t\t\t]).with_message(nicerError(d))\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tfor (let d2 of d.messageText.next ?? []) {\n\t\t\t\t\taddMessage(d2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet rf = r.finish();\n\n\t\tlet writer = mkStringWriter();\n\t\ttry {\n\t\t\trf.printTo(\n\t\t\t\t[file.path, Source.from(printReal ? error.file.text : source)],\n\t\t\t\twriter as unknown as Write\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tthis.print(e);\n\t\t}\n\t\tlet ansi_up = new AnsiUp();\n\t\tlet msg = ansi_up.ansi_to_html(writer.unwrap());\n\n\t\treturn {\n\t\t\terror: error,\n\t\t\tfile: file.path,\n\t\t\tmessage: msg\n\t\t};\n\t}\n\n\tasync translateSource(file: ShadeupFile, range: DiffRange | null = null) {\n\t\tif (!this.parser) {\n\t\t\tthrow new Error('Parser not initialized');\n\t\t}\n\t\tlet now = performance.now();\n\t\tif (range) file.oldTree?.edit(range);\n\n\t\tlet f = this.parser.parse(file.content, range ? file.oldTree ?? undefined : undefined);\n\t\tif (file.oldTree) {\n\t\t\tlet nowTree = performance.now();\n\t\t\tlet editedRange = file.oldTree.getChangedRanges(f);\n\t\t\tthis.print('Got edited range in', performance.now() - nowTree, 'ms');\n\t\t\tif (editedRange) {\n\t\t\t\t// this.print('Edited range', JSON.stringify(editedRange));\n\t\t\t}\n\t\t}\n\n\t\tthis.print('Parsed in', performance.now() - now, 'ms');\n\t\tfile.oldTree = f;\n\n\t\tfile.parsedFlatSymbolMap = this.extractFlatSymbolMap(f.rootNode);\n\n\t\tnow = performance.now();\n\t\ttry {\n\t\t\tlet ctx = new AstContext('file:///' + file.path);\n\t\t\tprePass(ctx, f.rootNode);\n\t\t\tlet compiled = compile(ctx, f.rootNode);\n\n\t\t\tfile.parseDiagnostics = ctx.diagnostics.map((d) => ({\n\t\t\t\tmessage: d.message,\n\t\t\t\tstartIndex: d.node.startIndex,\n\t\t\t\tendIndex: d.node.endIndex\n\t\t\t}));\n\n\t\t\tthis.print('Compiled in', performance.now() - now, 'ms');\n\t\t\tnow = performance.now();\n\t\t\tlet ss = {\n\t\t\t\tstr: '',\n\t\t\t\tindexMapping: []\n\t\t\t} as SourceString;\n\n\t\t\tcompiled.toString(ss);\n\t\t\tthis.print('Rendered with source map in ', performance.now() - now, 'ms');\n\t\t\tthis.print('---- Translated ----');\n\n\t\t\tfile.transpiled = ss.str;\n\t\t\tconsole.log('Transpiled output', ss.str);\n\n\t\t\t// (SourceMapConsumer as any).initialize({\n\t\t\t// \t'lib/mappings.wasm': sourceMappingURL\n\t\t\t// });\n\t\t\t// if (file.map) {\n\t\t\t// \tfile.map.destroy();\n\t\t\t// }\n\t\t\tnow = performance.now();\n\t\t\t// file.map = await new SourceMapConsumer(c.map.toJSON());\n\t\t\tfile.mapping = ss.indexMapping;\n\t\t\tthis.print('Created source map consumer in', performance.now() - now, 'ms');\n\t\t} catch (e) {\n\t\t\tconsole.error('Error while compiling', e);\n\t\t\tthis.print(f.rootNode.toString());\n\t\t}\n\t}\n\n\textractFlatSymbolMap(rootNode: Parser.SyntaxNode): SymbolRange[] {\n\t\tlet symbols: SymbolRange[] = [];\n\t\tlet stack: Parser.SyntaxNode[] = [rootNode];\n\t\twhile (stack.length > 0) {\n\t\t\tlet node = stack.pop()!;\n\t\t\tif (\n\t\t\t\tnode.type === 'identifier' ||\n\t\t\t\tnode.type === 'property_identifier' ||\n\t\t\t\tnode.type === 'type_identifier'\n\t\t\t) {\n\t\t\t\tsymbols.push({\n\t\t\t\t\tstartIndex: node.startIndex,\n\t\t\t\t\tendIndex: node.endIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let c of node.children) {\n\t\t\t\tstack.push(c);\n\t\t\t}\n\t\t}\n\t\treturn symbols;\n\t}\n\n\tasync writeFile(path: string, content: string, ignoreValidate = false) {\n\t\tif (!ignoreValidate) console.log('Writing', path);\n\t\tlet now = performance.now();\n\t\tlet file = this.files.find((f) => f.path === path);\n\t\tlet oldContent = '';\n\t\tif (!file) {\n\t\t\tthis.files.push({\n\t\t\t\tpath,\n\t\t\t\tcontent,\n\t\t\t\ttranspiled: '',\n\t\t\t\tshaders: [],\n\t\t\t\tmap: null,\n\t\t\t\toldTree: null,\n\t\t\t\tmapping: [],\n\t\t\t\tparseDiagnostics: [],\n\t\t\t\tparsedFlatSymbolMap: []\n\t\t\t});\n\n\t\t\tfile = this.files[this.files.length - 1];\n\t\t} else {\n\t\t\toldContent = file.content;\n\t\t\tfile.content = content;\n\t\t}\n\n\t\tlet nowDiff = performance.now();\n\t\t// let diffs = diff(oldContent, content);\n\t\t// If there's one diff, find its range\n\t\tlet r = getDiffRange(oldContent, content);\n\t\tthis.print(\n\t\t\t'Source code diff took',\n\t\t\tperformance.now() - nowDiff,\n\t\t\t'ms',\n\t\t\t'with',\n\t\t\tcountLines(content),\n\t\t\t'lines'\n\t\t);\n\n\t\tlet getNow = performance.now();\n\t\tthis.print('Get source file took', performance.now() - getNow, 'ms');\n\t\tawait this.translateSource(file, r);\n\n\t\tlet sf = this.tsEnv?.env.getSourceFile(path);\n\t\tif (sf) {\n\t\t\t// Diff\n\t\t\tnowDiff = performance.now();\n\t\t\tlet r = getReplaceRange(sf.text, file.transpiled);\n\n\t\t\tthis.print(\n\t\t\t\t'TypeScript code diff took',\n\t\t\t\tperformance.now() - nowDiff,\n\t\t\t\t'ms',\n\t\t\t\t'with',\n\t\t\t\tcountLines(sf.text),\n\t\t\t\t'lines'\n\t\t\t);\n\t\t\tlet updateNow = performance.now();\n\t\t\tthis.print('Replacing', r.range, 'with', r.content.length, 'chars');\n\t\t\tthis.tsEnv?.env.updateFile(path, r.content, r.range);\n\n\t\t\tthis.print('Update took', performance.now() - updateNow, 'ms');\n\t\t\tlet finalText = this.tsEnv.env.getSourceFile(path)?.text;\n\n\t\t\tif (finalText !== file.transpiled) {\n\t\t\t\tconsole.error('Final text does not match transpiled text');\n\t\t\t}\n\t\t\t// this.print('File name: ', path, finalText);\n\t\t} else {\n\t\t\tthis.tsEnv?.env.createFile(path, file.transpiled);\n\t\t}\n\t\tthis.print('---- Took', performance.now() - now, 'ms ----');\n\t\tthis.print('');\n\n\t\tif (!ignoreValidate) {\n\t\t\tlet sourceFile = this.tsEnv?.env.getSourceFile(path);\n\t\t\tif (sourceFile) {\n\t\t\t\tlet program = this.tsEnv?.env.languageService.getProgram();\n\t\t\t\tlet checker = program?.getTypeChecker();\n\t\t\t\tif (checker) {\n\t\t\t\t\tthis.validationDiagnostics.set(path, validate(file, sourceFile, checker));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// let shaders = this.renderShaders(path);\n\n\t\t// file.shaders = shaders;\n\t}\n\n\tasync writeFileTypescript(path: string, content: string) {\n\t\tthis.print('Writing', path);\n\t\tlet now = performance.now();\n\n\t\tlet sf = this.tsEnv?.env.getSourceFile(path);\n\t\tif (sf) {\n\t\t\t// Diff\n\t\t\tlet nowDiff = performance.now();\n\t\t\tlet r = getReplaceRange(sf.text, content);\n\n\t\t\tthis.print(sf.text.substring(r.range.start, r.range.start + r.range.length), r.content);\n\n\t\t\tthis.print(\n\t\t\t\t'TypeScript code diff took',\n\t\t\t\tperformance.now() - nowDiff,\n\t\t\t\t'ms',\n\t\t\t\t'with',\n\t\t\t\tcountLines(sf.text),\n\t\t\t\t'lines'\n\t\t\t);\n\t\t\tlet updateNow = performance.now();\n\t\t\tthis.print('Replacing', r.range, 'with', r.content.length, 'chars');\n\t\t\tthis.tsEnv?.env.updateFile(path, r.content, r.range);\n\n\t\t\tthis.print('Update took', performance.now() - updateNow, 'ms');\n\t\t\tlet finalText = this.tsEnv.env.getSourceFile(path)?.text;\n\t\t\tthis.print(finalText);\n\t\t\tif (finalText !== content) {\n\t\t\t\tconsole.error('Final text does not match input text');\n\t\t\t}\n\t\t} else {\n\t\t\tthis.tsEnv?.env.createFile(path, content);\n\t\t}\n\t\tthis.print('---- Took', performance.now() - now, 'ms ----');\n\t\tthis.print('');\n\t}\n\n\taddDiagnostic(path: string, diagnostic: ts.Diagnostic) {\n\t\tif (!this.validationDiagnostics.has(path)) {\n\t\t\tthis.validationDiagnostics.set(path, []);\n\t\t}\n\n\t\tthis.validationDiagnostics.get(path)?.push(diagnostic);\n\t}\n\n\tprintNodeLocation(n: ts.Node) {\n\t\tlet sf = n.getSourceFile();\n\t\tlet file = this.files.find((f) => f.path === sf.fileName);\n\t\tif (!file) {\n\t\t\treturn 'internal';\n\t\t} else {\n\t\t\tlet mapping = lookupIndexMappingRange(file.mapping, n.getStart(), n.getEnd());\n\t\t\tlet loc = indexToRowColumn(file.content, mapping.start);\n\t\t\treturn `${sf.fileName}:${loc.row + 1}:${loc.column + 1}`;\n\t\t}\n\t}\n\n\trenderShaders(path: string): { glsl: GLSLShader; wgsl: WGSLShader }[] {\n\t\tlet shaders: { glsl: GLSLShader; wgsl: WGSLShader }[] = [];\n\t\tlet sfNew = this.tsEnv?.env.getSourceFile(path);\n\t\tlet program = this.tsEnv?.env.languageService.getProgram();\n\t\tif (!program) {\n\t\t\treturn [];\n\t\t}\n\t\tlet checker = program?.getTypeChecker();\n\t\tif (!checker) {\n\t\t\treturn [];\n\t\t}\n\t\tfor (let sourceFile of program?.getSourceFiles() ?? []) {\n\t\t\tif (sourceFile.fileName === path) {\n\t\t\t\twalkNodes(sourceFile, (node) => {\n\t\t\t\t\tif (ts.isCallExpression(node) && node.expression.getText() == 'makeShader') {\n\t\t\t\t\t\tlet lhsType = checker?.getTypeAtLocation(node.getChildAt(0));\n\t\t\t\t\t\tlet sig = lhsType?.getCallSignatures();\n\t\t\t\t\t\tif (sig && sig[0] && sig[0].getDeclaration()) {\n\t\t\t\t\t\t\tlet declaration = sig[0].getDeclaration();\n\n\t\t\t\t\t\t\tif (hasShadeupDocTag(declaration, 'shader')) {\n\t\t\t\t\t\t\t\tlet isComputeShader = false;\n\t\t\t\t\t\t\t\tlet computeShaderSize: [number, number, number] = [0, 0, 0];\n\t\t\t\t\t\t\t\tlet parentNode = node.parent;\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tparentNode &&\n\t\t\t\t\t\t\t\t\tts.isAsExpression(parentNode) &&\n\t\t\t\t\t\t\t\t\tparentNode.parent &&\n\t\t\t\t\t\t\t\t\tts.isCallExpression(parentNode.parent)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tif (parentNode.parent.arguments.length === 2) {\n\t\t\t\t\t\t\t\t\t\tisComputeShader = true;\n\t\t\t\t\t\t\t\t\t\tlet lastChildArg = parentNode.parent.arguments[1];\n\t\t\t\t\t\t\t\t\t\tif (ts.isArrayLiteralExpression(lastChildArg)) {\n\t\t\t\t\t\t\t\t\t\t\tlet elements = lastChildArg.elements;\n\t\t\t\t\t\t\t\t\t\t\tif (elements.length === 3) {\n\t\t\t\t\t\t\t\t\t\t\t\tcomputeShaderSize = [\n\t\t\t\t\t\t\t\t\t\t\t\t\tparseInt(elements[0].getText().replace(/[^\\d]/g, '')),\n\t\t\t\t\t\t\t\t\t\t\t\t\tparseInt(elements[1].getText().replace(/[^\\d]/g, '')),\n\t\t\t\t\t\t\t\t\t\t\t\t\tparseInt(elements[2].getText().replace(/[^\\d]/g, ''))\n\t\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet n = checker?.getTypeAtLocation(declaration);\n\n\t\t\t\t\t\t\t\tif (node.arguments.length === 2) {\n\t\t\t\t\t\t\t\t\tif (ts.isStringLiteral(node.arguments[0])) {\n\t\t\t\t\t\t\t\t\t\tlet key = node.arguments[0].text;\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet glslShader = addGLSLShader(\n\t\t\t\t\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\t\t\t\t\tnode.arguments[1],\n\t\t\t\t\t\t\t\t\t\t\t\tchecker,\n\t\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\t\tisComputeShader,\n\t\t\t\t\t\t\t\t\t\t\t\tcomputeShaderSize\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tlet wgslShader = addWGSLShader(\n\t\t\t\t\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\t\t\t\t\tnode.arguments[1],\n\t\t\t\t\t\t\t\t\t\t\t\tchecker,\n\t\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\t\tisComputeShader,\n\t\t\t\t\t\t\t\t\t\t\t\tcomputeShaderSize\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\tif (glslShader && wgslShader) {\n\t\t\t\t\t\t\t\t\t\t\t\tshaders.push({\n\t\t\t\t\t\t\t\t\t\t\t\t\tglsl: glslShader,\n\t\t\t\t\t\t\t\t\t\t\t\t\twgsl: wgslShader\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t\t\t\t\t\tif (e instanceof GLSLCompilationError) {\n\t\t\t\t\t\t\t\t\t\t\t\tthis.addDiagnostic(path, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfile: e.node.getSourceFile(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessageText:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.message +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t' (this is being used in the shader defined at ' +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.printNodeLocation(node) +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t')',\n\t\t\t\t\t\t\t\t\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstart: e.node.getStart(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tlength: 2\n\t\t\t\t\t\t\t\t\t\t\t\t} as ts.Diagnostic);\n\n\t\t\t\t\t\t\t\t\t\t\t\tthis.addDiagnostic(path, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfile: node.getSourceFile(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessageText:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'this shader has an error in its code (' +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.message +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t' at ' +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.printNodeLocation(e.node) +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t')',\n\t\t\t\t\t\t\t\t\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstart: node.getStart(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tlength: node.getEnd() - node.getStart()\n\t\t\t\t\t\t\t\t\t\t\t\t} as ts.Diagnostic);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn shaders;\n\t}\n\n\tpatchFile(path: string, content: string, start: number, length: number) {}\n}\n\nfunction walkNodes(node: ts.Node, cb: (node: ts.Node) => void) {\n\tcb(node);\n\tnode.forEachChild((n) => walkNodes(n, cb));\n}\n\nexport function hasShadeupDocTag(node: ts.Node, tagName: string) {\n\treturn ts\n\t\t.getJSDocTags(node)\n\t\t.some((tag) => tag.tagName.text === 'shadeup' && tag.comment === '=' + tagName);\n}\nexport function hasWorkgroupDocTag(node: ts.Node) {\n\treturn ts.getJSDocTags(node).some((tag) => tag.tagName.text === 'workgroup');\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/environment/TypescriptEnvironment.ts",
    "content": "import {\n\tcreateDefaultMapFromCDN,\n\tcreateVirtualTypeScriptEnvironment,\n\tcreateSystem,\n\tVirtualTypeScriptEnvironment,\n\tcreateVirtualLanguageServiceHost\n} from '@typescript/vfs';\nimport ts from 'typescript';\nimport lzstring from 'lz-string';\nimport diff from '../fast-diff/diff.js';\n\nimport stdMath from '../std/math?raw';\nimport stdStaticMath from '../std/static-math?raw';\nimport stdAll from '../std/all?raw';\nimport globalDTS from '../std/global.d.ts?raw';\nimport {\n\tupdateAsyncArrows,\n\tupdateAsyncCalls,\n\tupdateClassStructure,\n\tupdateIntegerMixing\n} from '../generator/transform';\nimport { ShadeupEnvironment } from './ShadeupEnvironment';\n\nexport type TypescriptEnvironment = {\n\tenv: VirtualTypeScriptEnvironment;\n\tsystem: ts.System;\n\tfsMap: Map<string, string>;\n};\n\nexport async function makeTypescriptEnvironment(shadeupEnv: ShadeupEnvironment) {\n\tconst shouldCache = false;\n\t// This caches the lib files in the site's localStorage\n\tlet fsMap = await createDefaultMapFromCDN(\n\t\t{ target: ts.ScriptTarget.ES2015, lib: ['es5', 'es2015', 'es2015.promise'] },\n\t\t'3.7.3',\n\t\tshouldCache,\n\t\tts\n\t);\n\n\tfsMap = new Map();\n\n\tfsMap.set('/file.ts', '');\n\tfsMap.set('/std_math.ts', stdMath);\n\tfsMap.set('/static-math.ts', stdStaticMath);\n\tfsMap.set('/std___std_all.ts', stdAll);\n\tfsMap.set('/global.d.ts', globalDTS);\n\n\t// This stores the lib files as a zipped string to save space in the cache\n\t// const otherMap = await createDefaultMapFromCDN(\n\t// \t{ target: ts.ScriptTarget.ES2015 },\n\t// \t'3.7.3',\n\t// \tshouldCache,\n\t// \tts,\n\t// \tlzstring\n\t// );\n\n\t// fsMap.set('index.ts', \"console.log('hello world!')\");\n\n\tconst system = createSystem(fsMap);\n\tsystem.$fsMap = fsMap;\n\n\t// system.write('std');\n\n\tsystem.writeFile('/std___std_all.ts', stdAll);\n\tsystem.writeFile('/std_math.ts', stdMath);\n\tsystem.writeFile('/static-math.ts', stdStaticMath);\n\tsystem.writeFile('/global.d.ts', globalDTS);\n\tconst compilerOpts = {\n\t\tmodule: ts.ModuleKind.AMD,\n\t\tremoveComments: false,\n\t\tlib: ['es5'],\n\t\t//noImplicitUseStrict: true,\n\t\talwaysStrict: true,\n\t\tstrictNullChecks: true,\n\t\tstrictFunctionTypes: true,\n\t\tstrictBindCallApply: true,\n\t\tstrictPropertyInitialization: true,\n\t\tnoImplicitThis: true,\n\t\tstrict: true,\n\t\tnoImplicitAny: true,\n\t\tnoImplicitReturns: true\n\t};\n\tlet transformers = {\n\t\tbefore: [\n\t\t\tupdateIntegerMixing(() => [\n\t\t\t\tenv.languageService.getProgram().getTypeChecker(),\n\t\t\t\tshadeupEnv,\n\t\t\t\tshadeupEnv.loads\n\t\t\t]),\n\t\t\tupdateAsyncCalls(() => [env.languageService.getProgram().getTypeChecker(), shadeupEnv]),\n\t\t\t// updateAsyncArrows(() => [env.languageService.getProgram().getTypeChecker(), shadeupEnv]),\n\t\t\tupdateClassStructure(() => env.languageService.getProgram().getTypeChecker())\n\t\t]\n\t} as ts.CustomTransformers;\n\n\tconst env = createVirtualTypeScriptEnvironment(\n\t\tsystem,\n\t\tObject.keys(fsMap),\n\t\tts,\n\t\tcompilerOpts,\n\t\ttransformers\n\t);\n\n\t// let services = createVirtualLanguageServiceHost(\n\t// \tsystem,\n\t// \tObject.keys(fsMap),\n\t// \tcompilerOpts,\n\t// \tts,\n\t// \ttransformers\n\t// );\n\n\t// let f = fs.readFileSync('f.ts', 'utf8');\n\t// let now = performance.now();\n\t// let diffs = diff(f, 'a' + f + \"console.log('hello world!')\");\n\t// console.log('took', performance.now() - now, 'ms for diff');\n\t// let f = \"console.log('hello world!')\"\n\t// You can then interact with the languageService to introspect the code\n\t// now = performance.now();\n\t// let h = env.languageService.getEmitOutput('index.ts');\n\t// console.log(h.outputFiles[0].text);\n\t// console.log('took', performance.now() - now, 'ms');\n\t// env.updateFile('index.ts', f);\n\t// now = performance.now();\n\t// h = env.languageService.getEmitOutput('index.ts');\n\t// console.log('took', performance.now() - now, 'ms');\n\n\t// now = performance.now();\n\t// env.getSourceFile(\"index.ts\").update(f + \"console.log()\", {\n\t// \tspan: {\n\t// \t\tstart: f.length,\n\t// \t\tlength: 0\n\t// \t},\n\t// \tnewLength: 13\n\t// \t}\n\t// )\n\t// env.updateFile('index.ts', 'console.log();', {\n\t// \tstart: 0,\n\t// \tlength: 0\n\t// });\n\n\t// env.updateFile(\"index.ts\", f + \"console.log()\");\n\t// h = env.languageService.getEmitOutput(\"index.ts\")\n\t// let s = env.languageService.getCompletionsAtPosition('index.ts', f.length + 1, undefined);\n\t// console.log(s)\n\t// console.log('took', performance.now() - now, 'ms');\n\n\t// now = performance.now();\n\t// env.updateFile('index.ts', f + 'console.l');\n\t// h = env.languageService.getEmitOutput(\"index.ts\")\n\t// s = env.languageService.getCompletionsAtPosition('index.ts', f.length + 1, undefined);\n\n\tenv.createFile('/std___std_all.ts', stdAll);\n\tenv.createFile('/std_math.ts', stdMath);\n\tenv.createFile('/static-math.ts', stdStaticMath);\n\tenv.createFile('/global.d.ts', globalDTS);\n\n\t// let sfNew = env.getSourceFile('std/__std_all.ts');\n\t// let program = env.languageService.getProgram();\n\t// let checker = program?.getTypeChecker();\n\t// console.log(program?.getSemanticDiagnostics(sfNew));\n\n\treturn {\n\t\tenv,\n\t\tfsMap,\n\t\tsystem\n\t} as TypescriptEnvironment;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/environment/quickCache.json",
    "content": "{\"/file.ts\":{\"outputFiles\":[{\"name\":\"/file.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\", \\\"/std___std_all\\\"], function (require, exports, std___std_all_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/std_math.ts\":{\"outputFiles\":[{\"name\":\"/std_math.js\",\"writeByteOrderMark\":false,\"text\":\"var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\\n        if (ar || !(i in from)) {\\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\\n            ar[i] = from[i];\\n        }\\n    }\\n    return to.concat(ar || Array.prototype.slice.call(from));\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"./static-math\\\"], function (require, exports, static_math_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.bitcast = exports.ddyCoarse = exports.ddxCoarse = exports.ddyFine = exports.ddxFine = exports.ddy = exports.ddx = exports.discard = exports.workgroupUniformLoad = exports.storageBarrier = exports.workgroupBarrier = exports.atomic = exports.atomic_internal = exports.FM = exports.intifyVector = exports.swizzle = exports.testDocComment = exports.makeVector = exports.not = exports.or = exports.and = exports.gte = exports.gt = exports.lte = exports.lt = exports.neq = exports.eq = exports.saturate = exports.clamp = exports.max = exports.min = exports.smoothstep = exports.step = exports.radians = exports.degrees = exports.refract = exports.reflect = exports.normalize = exports.distance = exports.dist = exports.length = exports.bilerp = exports.lerp = exports.dot = exports.cross = exports.pingpong = exports.rand3 = exports.rand2 = exports.rand = exports.wrap = exports.frac = exports.inversesqrt = exports.sqrt = exports.log10 = exports.log2 = exports.log = exports.exp = exports.atanh = exports.asinh = exports.acosh = exports.tanh = exports.sinh = exports.cosh = exports.atan2 = exports.atan = exports.asin = exports.acos = exports.tan = exports.sin = exports.cos = exports.sign = exports.round = exports.ceil = exports.floor = exports.abs = exports.positive = exports.negate = exports.bitnot = exports.rshift = exports.lshift = exports.bitxor = exports.bitor = exports.bitand = exports.mod = exports.pow = exports.div = exports.mul = exports.transpose = exports.inverse = exports.sub = exports.add = exports.uint8 = exports.uint4 = exports.uint3 = exports.uint2 = exports.int4 = exports.int3 = exports.int2 = exports.float4 = exports.float3 = exports.float2 = exports.uint = exports.int = exports.float = exports.float4x4 = exports.float3x3 = exports.float2x2 = void 0;\\n    function isVector(v) {\\n        return Array.isArray(v);\\n    }\\n    function isScalar(v) {\\n        return typeof v === 'number';\\n    }\\n    function isMatrix(v) {\\n        return !!v.__matrix;\\n    }\\n    /** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\\n    function float2x2() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        var arr = [0, 0, 0, 0];\\n        if (args.length === 4) {\\n            arr = __spreadArray([], args, true);\\n        }\\n        applyMatrix2x2Methods(arr);\\n        return arr;\\n    }\\n    exports.float2x2 = float2x2;\\n    /** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\\n    function float3x3() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0];\\n        if (args.length === 9) {\\n            arr = __spreadArray([], args, true);\\n        }\\n        applyMatrix3x3Methods(arr);\\n        return arr;\\n    }\\n    exports.float3x3 = float3x3;\\n    function applyMatrix4x4Methods(arr) {\\n        arr.__matrix = 4;\\n        arr.__index = function (index) {\\n            var out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\\n            out_arr.__index = function (index_inner) {\\n                return out_arr[index_inner];\\n            };\\n            out_arr.__index_assign = function (index_inner, value) {\\n                arr[index * 4 + index_inner] = value;\\n            };\\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\\n                arr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\\n            };\\n            return out_arr;\\n        };\\n        arr.__index_assign = function (index, value) {\\n            arr[index * 4] = value[0];\\n            arr[index * 4 + 1] = value[1];\\n            arr[index * 4 + 2] = value[2];\\n            arr[index * 4 + 3] = value[3];\\n        };\\n        arr.__index_assign_op = function (op_fn, index, value) {\\n            arr[index * 4] = op_fn(arr[index * 4], value[0]);\\n            arr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\\n            arr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\\n            arr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\\n        };\\n    }\\n    window.applyMatrix4x4Methods = applyMatrix4x4Methods;\\n    function applyMatrix3x3Methods(arr) {\\n        arr.__matrix = 3;\\n        arr.__index = function (index) {\\n            var out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\\n            out_arr.__index = function (index_inner) {\\n                return out_arr[index_inner];\\n            };\\n            out_arr.__index_assign = function (index_inner, value) {\\n                arr[index * 3 + index_inner] = value;\\n            };\\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\\n                arr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\\n            };\\n            return out_arr;\\n        };\\n        arr.__index_assign = function (index, value) {\\n            arr[index * 3] = value[0];\\n            arr[index * 3 + 1] = value[1];\\n            arr[index * 3 + 2] = value[2];\\n        };\\n        arr.__index_assign_op = function (op_fn, index, value) {\\n            arr[index * 3] = op_fn(arr[index * 3], value[0]);\\n            arr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\\n            arr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\\n        };\\n    }\\n    window.applyMatrix3x3Methods = applyMatrix3x3Methods;\\n    function applyMatrix2x2Methods(arr) {\\n        arr.__matrix = 2;\\n        arr.__index = function (index) {\\n            var out_arr = [arr[index * 2], arr[index * 2 + 1]];\\n            out_arr.__index = function (index_inner) {\\n                return out_arr[index_inner];\\n            };\\n            out_arr.__index_assign = function (index_inner, value) {\\n                arr[index * 2 + index_inner] = value;\\n            };\\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\\n                arr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\\n            };\\n            return out_arr;\\n        };\\n        arr.__index_assign = function (index, value) {\\n            arr[index * 2] = value[0];\\n            arr[index * 2 + 1] = value[1];\\n        };\\n        arr.__index_assign_op = function (op_fn, index, value) {\\n            arr[index * 2] = op_fn(arr[index * 2], value[0]);\\n            arr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\\n        };\\n    }\\n    window.applyMatrix2x2Methods = applyMatrix2x2Methods;\\n    /** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\\n    function float4x4() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\\n        if (args.length === 16) {\\n            arr = __spreadArray([], args, true);\\n        }\\n        applyMatrix4x4Methods(arr);\\n        return arr;\\n    }\\n    exports.float4x4 = float4x4;\\n    /** @shadeup=glsl(float) @shadeup=wgsl(f32) */\\n    function float(x) {\\n        return x;\\n    }\\n    exports.float = float;\\n    /** @shadeup=glsl(int) @shadeup=wgsl(i32) */\\n    function int(x) {\\n        return (x | 0);\\n    }\\n    exports.int = int;\\n    /** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\\n    function uint(x) {\\n        return (x >>> 0);\\n    }\\n    exports.uint = uint;\\n    /** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\\n    function float2() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat();\\n    }\\n    exports.float2 = float2;\\n    /** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\\n    function float3() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat();\\n    }\\n    exports.float3 = float3;\\n    /** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\\n    function float4() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat();\\n    }\\n    exports.float4 = float4;\\n    /** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\\n    function int2() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat().map(function (x) { return x | 0; });\\n    }\\n    exports.int2 = int2;\\n    /** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\\n    function int3() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat().map(function (x) { return x | 0; });\\n    }\\n    exports.int3 = int3;\\n    /** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\\n    function int4() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat().map(function (x) { return x | 0; });\\n    }\\n    exports.int4 = int4;\\n    function uint2() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat().map(function (x) { return x >>> 0; });\\n    }\\n    exports.uint2 = uint2;\\n    function uint3() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat().map(function (x) { return x >>> 0; });\\n    }\\n    exports.uint3 = uint3;\\n    function uint4() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        return args.flat().map(function (x) { return x >>> 0; });\\n    }\\n    exports.uint4 = uint4;\\n    function uint8(x) {\\n        return ((x >>> 0) & 0xff);\\n    }\\n    exports.uint8 = uint8;\\n    function componentMath(a, b, f) {\\n        var aIsScalar = isScalar(a);\\n        var bIsScalar = isScalar(b);\\n        if (aIsScalar && bIsScalar) {\\n            return f(a, b);\\n        }\\n        if (!aIsScalar && !bIsScalar) {\\n            if (a.length !== b.length) {\\n                throw new Error('Cannot perform component-wise math on vectors of different lengths');\\n            }\\n            // return a.map((a, i) => f(a, b[i])) as vector;\\n            if (a.length == 2) {\\n                return [f(a[0], b[0]), f(a[1], b[1])];\\n            }\\n            else if (a.length == 3) {\\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])];\\n            }\\n            else if (a.length == 4) {\\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])];\\n            }\\n        }\\n        else if (!aIsScalar && bIsScalar) {\\n            if (a.length == 2) {\\n                return [f(a[0], b), f(a[1], b)];\\n            }\\n            else if (a.length == 3) {\\n                return [f(a[0], b), f(a[1], b), f(a[2], b)];\\n            }\\n            else if (a.length == 4) {\\n                return [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)];\\n            }\\n        }\\n        else if (!bIsScalar && aIsScalar) {\\n            if (b.length == 2) {\\n                return [f(a, b[0]), f(a, b[1])];\\n            }\\n            else if (b.length == 3) {\\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2])];\\n            }\\n            else if (b.length == 4) {\\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])];\\n            }\\n        }\\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\\n    }\\n    function componentMathSingular(a, f) {\\n        if (isScalar(a)) {\\n            return f(a);\\n        }\\n        if (isVector(a)) {\\n            return a.map(function (a, i) { return f(a); });\\n        }\\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\\n    }\\n    function cCall(cb, a, b) {\\n        return componentMath(a, b, function (a, b) { return a + b; });\\n    }\\n    function componentOp(cb) {\\n        return function (a, b) { return componentMath(a, b, cb); };\\n    }\\n    function componentOpMatch(cb) {\\n        return function (a, b) { return componentMath(a, b, cb); };\\n    }\\n    function componentOpSingular(cb) {\\n        return function (a) { return componentMathSingular(a, cb); };\\n    }\\n    function componentOpSingularFloat(cb) {\\n        return function (a) { return componentMathSingular(a, cb); };\\n    }\\n    /** @shadeup=univ(!$0$ + $1$)*/\\n    var add = function (a, b) {\\n        if (typeof a === 'string' && typeof b === 'string') {\\n            return \\\"\\\".concat(a).concat(b);\\n        }\\n        else {\\n            var addOp = componentOp(function (a, b) { return a + b; });\\n            var v = addOp(a, b);\\n            return v;\\n        }\\n    };\\n    exports.add = add;\\n    /** @shadeup=univ(!$0$ - $1$)*/\\n    exports.sub = componentOp(function (a, b) { return a - b; });\\n    function matrixMul(a, b) {\\n        // Multiply two square matrices of the same dimension row-major\\n        var dimension = a.__matrix;\\n        var out;\\n        if (dimension === 2) {\\n            out = float2x2();\\n        }\\n        else if (dimension === 3) {\\n            out = float3x3();\\n        }\\n        else if (dimension === 4) {\\n            var a00 = a[0 * 4 + 0];\\n            var a01 = a[0 * 4 + 1];\\n            var a02 = a[0 * 4 + 2];\\n            var a03 = a[0 * 4 + 3];\\n            var a10 = a[1 * 4 + 0];\\n            var a11 = a[1 * 4 + 1];\\n            var a12 = a[1 * 4 + 2];\\n            var a13 = a[1 * 4 + 3];\\n            var a20 = a[2 * 4 + 0];\\n            var a21 = a[2 * 4 + 1];\\n            var a22 = a[2 * 4 + 2];\\n            var a23 = a[2 * 4 + 3];\\n            var a30 = a[3 * 4 + 0];\\n            var a31 = a[3 * 4 + 1];\\n            var a32 = a[3 * 4 + 2];\\n            var a33 = a[3 * 4 + 3];\\n            var b00 = b[0 * 4 + 0];\\n            var b01 = b[0 * 4 + 1];\\n            var b02 = b[0 * 4 + 2];\\n            var b03 = b[0 * 4 + 3];\\n            var b10 = b[1 * 4 + 0];\\n            var b11 = b[1 * 4 + 1];\\n            var b12 = b[1 * 4 + 2];\\n            var b13 = b[1 * 4 + 3];\\n            var b20 = b[2 * 4 + 0];\\n            var b21 = b[2 * 4 + 1];\\n            var b22 = b[2 * 4 + 2];\\n            var b23 = b[2 * 4 + 3];\\n            var b30 = b[3 * 4 + 0];\\n            var b31 = b[3 * 4 + 1];\\n            var b32 = b[3 * 4 + 2];\\n            var b33 = b[3 * 4 + 3];\\n            return float4x4(b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30, b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31, b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32, b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33, b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30, b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31, b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32, b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33, b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30, b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31, b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32, b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33, b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30, b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31, b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32, b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33);\\n            out = float4x4();\\n        }\\n        for (var i = 0; i < dimension; i++) {\\n            for (var j = 0; j < dimension; j++) {\\n                var sum = float(0);\\n                for (var k = 0; k < dimension; k++) {\\n                    sum += float(a[i * dimension + k] * b[k * dimension + j]);\\n                }\\n                out[i * dimension + j] = sum;\\n            }\\n        }\\n        return out;\\n        if (a.__matrix === 2 && b.__matrix === 2) {\\n            var a00_1 = a[0];\\n            var a01_1 = a[1];\\n            var a10_1 = a[2];\\n            var a11_1 = a[3];\\n            var b00_1 = b[0];\\n            var b01_1 = b[1];\\n            var b10_1 = b[2];\\n            var b11_1 = b[3];\\n            var v = float2x2(a00_1 * b00_1 + a01_1 * b10_1, a00_1 * b01_1 + a01_1 * b11_1, a10_1 * b00_1 + a11_1 * b10_1, a10_1 * b01_1 + a11_1 * b11_1);\\n            return v;\\n        }\\n        else if (a.__matrix === 3 && b.__matrix === 3) {\\n            var a00_2 = a[0];\\n            var a01_2 = a[1];\\n            var a02_1 = a[2];\\n            var a10_2 = a[3];\\n            var a11_2 = a[4];\\n            var a12_1 = a[5];\\n            var a20_1 = a[6];\\n            var a21_1 = a[7];\\n            var a22_1 = a[8];\\n            var b00_2 = b[0];\\n            var b01_2 = b[1];\\n            var b02_1 = b[2];\\n            var b10_2 = b[3];\\n            var b11_2 = b[4];\\n            var b12_1 = b[5];\\n            var b20_1 = b[6];\\n            var b21_1 = b[7];\\n            var b22_1 = b[8];\\n            var v = float3x3(a00_2 * b00_2 + a01_2 * b10_2 + a02_1 * b20_1, a00_2 * b01_2 + a01_2 * b11_2 + a02_1 * b21_1, a00_2 * b02_1 + a01_2 * b12_1 + a02_1 * b22_1, a10_2 * b00_2 + a11_2 * b10_2 + a12_1 * b20_1, a10_2 * b01_2 + a11_2 * b11_2 + a12_1 * b21_1, a10_2 * b02_1 + a11_2 * b12_1 + a12_1 * b22_1, a20_1 * b00_2 + a21_1 * b10_2 + a22_1 * b20_1, a20_1 * b01_2 + a21_1 * b11_2 + a22_1 * b21_1, a20_1 * b02_1 + a21_1 * b12_1 + a22_1 * b22_1);\\n            return v;\\n        }\\n        else if (a.__matrix === 4 && b.__matrix === 4) {\\n            var a00_3 = a[0];\\n            var a01_3 = a[1];\\n            var a02_2 = a[2];\\n            var a03_1 = a[3];\\n            var a10_3 = a[4];\\n            var a11_3 = a[5];\\n            var a12_2 = a[6];\\n            var a13_1 = a[7];\\n            var a20_2 = a[8];\\n            var a21_2 = a[9];\\n            var a22_2 = a[10];\\n            var a23_1 = a[11];\\n            var a30_1 = a[12];\\n            var a31_1 = a[13];\\n            var a32_1 = a[14];\\n            var a33_1 = a[15];\\n            var b00_3 = b[0];\\n            var b01_3 = b[1];\\n            var b02_2 = b[2];\\n            var b03_1 = b[3];\\n            var b10_3 = b[4];\\n            var b11_3 = b[5];\\n            var b12_2 = b[6];\\n            var b13_1 = b[7];\\n            var b20_2 = b[8];\\n            var b21_2 = b[9];\\n            var b22_2 = b[10];\\n            var b23_1 = b[11];\\n            var b30_1 = b[12];\\n            var b31_1 = b[13];\\n            var b32_1 = b[14];\\n            var b33_1 = b[15];\\n            var v = float4x4(a00_3 * b00_3 + a01_3 * b10_3 + a02_2 * b20_2 + a03_1 * b30_1, a00_3 * b01_3 + a01_3 * b11_3 + a02_2 * b21_2 + a03_1 * b31_1, a00_3 * b02_2 + a01_3 * b12_2 + a02_2 * b22_2 + a03_1 * b32_1, a00_3 * b03_1 + a01_3 * b13_1 + a02_2 * b23_1 + a03_1 * b33_1, a10_3 * b00_3 + a11_3 * b10_3 + a12_2 * b20_2 + a13_1 * b30_1, a10_3 * b01_3 + a11_3 * b11_3 + a12_2 * b21_2 + a13_1 * b31_1, a10_3 * b02_2 + a11_3 * b12_2 + a12_2 * b22_2 + a13_1 * b32_1, a10_3 * b03_1 + a11_3 * b13_1 + a12_2 * b23_1 + a13_1 * b33_1, a20_2 * b00_3 + a21_2 * b10_3 + a22_2 * b20_2 + a23_1 * b30_1, a20_2 * b01_3 + a21_2 * b11_3 + a22_2 * b21_2 + a23_1 * b31_1, a20_2 * b02_2 + a21_2 * b12_2 + a22_2 * b22_2 + a23_1 * b32_1, a20_2 * b03_1 + a21_2 * b13_1 + a22_2 * b23_1 + a23_1 * b33_1, a30_1 * b00_3 + a31_1 * b10_3 + a32_1 * b20_2 + a33_1 * b30_1, a30_1 * b01_3 + a31_1 * b11_3 + a32_1 * b21_2 + a33_1 * b31_1, a30_1 * b02_2 + a31_1 * b12_2 + a32_1 * b22_2 + a33_1 * b32_1, a30_1 * b03_1 + a31_1 * b13_1 + a32_1 * b23_1 + a33_1 * b33_1);\\n            return v;\\n        }\\n        else {\\n            throw new Error('Invalid matrix multiplication');\\n        }\\n    }\\n    function matrixInversefloat2x2(m) {\\n        var a = m.__index(0)[0], b = m.__index(1)[0], c = m.__index(0)[1], d = m.__index(1)[1];\\n        var det = a * d - b * c;\\n        if (det === 0) {\\n            throw new Error('Matrix determinant is zero');\\n        }\\n        var detInv = 1.0 / det;\\n        return float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\\n    }\\n    function matrixInversefloat3x3(m) {\\n        var n11 = m.__index(0)[0], n12 = m.__index(1)[0], n13 = m.__index(2)[0];\\n        var n21 = m.__index(0)[1], n22 = m.__index(1)[1], n23 = m.__index(2)[1];\\n        var n31 = m.__index(0)[2], n32 = m.__index(1)[2], n33 = m.__index(2)[2];\\n        var t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13;\\n        var det = n11 * t11 + n21 * t12 + n31 * t13;\\n        if (det === 0) {\\n            throw new Error('Invalid matrix inverse');\\n        }\\n        var detInv = 1 / det;\\n        var v = float3x3(t11 * detInv, (n31 * n23 - n33 * n21) * detInv, (n32 * n21 - n31 * n22) * detInv, t12 * detInv, (n33 * n11 - n31 * n13) * detInv, (n31 * n12 - n32 * n11) * detInv, t13 * detInv, (n21 * n13 - n23 * n11) * detInv, (n22 * n11 - n21 * n12) * detInv);\\n        return v;\\n    }\\n    function matrixInversefloat4x4(m) {\\n        var m00 = m[0 * 4 + 0];\\n        var m01 = m[0 * 4 + 1];\\n        var m02 = m[0 * 4 + 2];\\n        var m03 = m[0 * 4 + 3];\\n        var m10 = m[1 * 4 + 0];\\n        var m11 = m[1 * 4 + 1];\\n        var m12 = m[1 * 4 + 2];\\n        var m13 = m[1 * 4 + 3];\\n        var m20 = m[2 * 4 + 0];\\n        var m21 = m[2 * 4 + 1];\\n        var m22 = m[2 * 4 + 2];\\n        var m23 = m[2 * 4 + 3];\\n        var m30 = m[3 * 4 + 0];\\n        var m31 = m[3 * 4 + 1];\\n        var m32 = m[3 * 4 + 2];\\n        var m33 = m[3 * 4 + 3];\\n        var tmp_0 = m22 * m33;\\n        var tmp_1 = m32 * m23;\\n        var tmp_2 = m12 * m33;\\n        var tmp_3 = m32 * m13;\\n        var tmp_4 = m12 * m23;\\n        var tmp_5 = m22 * m13;\\n        var tmp_6 = m02 * m33;\\n        var tmp_7 = m32 * m03;\\n        var tmp_8 = m02 * m23;\\n        var tmp_9 = m22 * m03;\\n        var tmp_10 = m02 * m13;\\n        var tmp_11 = m12 * m03;\\n        var tmp_12 = m20 * m31;\\n        var tmp_13 = m30 * m21;\\n        var tmp_14 = m10 * m31;\\n        var tmp_15 = m30 * m11;\\n        var tmp_16 = m10 * m21;\\n        var tmp_17 = m20 * m11;\\n        var tmp_18 = m00 * m31;\\n        var tmp_19 = m30 * m01;\\n        var tmp_20 = m00 * m21;\\n        var tmp_21 = m20 * m01;\\n        var tmp_22 = m00 * m11;\\n        var tmp_23 = m10 * m01;\\n        var t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\\n        var t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\\n        var t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\\n        var t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\\n        var d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\\n        if (d === 0) {\\n            throw new Error('Invalid matrix inverse');\\n        }\\n        return float4x4(d * t0, d * t1, d * t2, d * t3, d * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)), d * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)), d * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)), d * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)), d * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)), d * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)), d * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)), d * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)), d * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)), d * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)), d * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)), d * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02)));\\n    }\\n    function matrixTransposefloat2x2(m) {\\n        return float2x2(m.__index(0)[0], m.__index(1)[0], m.__index(0)[1], m.__index(1)[1]);\\n    }\\n    function matrixTransposefloat3x3(m) {\\n        return float3x3(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2]);\\n    }\\n    function matrixTransposefloat4x4(m) {\\n        return float4x4(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(3)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(3)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2], m.__index(3)[2], m.__index(0)[3], m.__index(1)[3], m.__index(2)[3], m.__index(3)[3]);\\n    }\\n    function matrixMul2x2float2(a, b) {\\n        var c = [0, 0];\\n        for (var j = 0; j < 2; j++) {\\n            for (var i = 0; i < 2; i++) {\\n                c[i] += a[j * 2 + i] * b[j];\\n            }\\n        }\\n        return c;\\n    }\\n    function matrixMul3x3float3(a, b) {\\n        var c = [0, 0, 0];\\n        for (var i = 0; i < 3; i++) {\\n            for (var j = 0; j < 3; j++) {\\n                c[i] += a[j * 3 + i] * b[j];\\n            }\\n        }\\n        return c;\\n    }\\n    function matrixMul4x4float4(a, b) {\\n        var c = [0, 0, 0, 0];\\n        for (var j = 0; j < 4; j++) {\\n            for (var i = 0; i < 4; i++) {\\n                c[i] += a[j * 4 + i] * b[j];\\n            }\\n        }\\n        return c;\\n    }\\n    function matrixMulfloat22x2(a, b) {\\n        var c = [0, 0];\\n        for (var j = 0; j < 2; j++) {\\n            for (var i = 0; i < 2; i++) {\\n                c[i] += a[j] * b[i * 2 + j];\\n            }\\n        }\\n        return c;\\n    }\\n    function matrixMulfloat33x3(a, b) {\\n        var c = [0, 0, 0];\\n        for (var i = 0; i < 3; i++) {\\n            for (var j = 0; j < 3; j++) {\\n                c[i] += a[j] * b[i * 3 + j];\\n            }\\n        }\\n        return c;\\n    }\\n    function matrixMulfloat44x4(a, b) {\\n        var c = [0, 0, 0, 0];\\n        for (var i = 0; i < 4; i++) {\\n            for (var j = 0; j < 4; j++) {\\n                c[i] += a[j] * b[i * 4 + j];\\n            }\\n        }\\n        return c;\\n    }\\n    var mulFunc = componentOp(function (a, b) { return a * b; });\\n    function inverse(a) {\\n        if (a.__matrix == 2) {\\n            return matrixInversefloat2x2(a);\\n        }\\n        else if (a.__matrix == 3) {\\n            return matrixInversefloat3x3(a);\\n        }\\n        else if (a.__matrix == 4) {\\n            return matrixInversefloat4x4(a);\\n        }\\n    }\\n    exports.inverse = inverse;\\n    function transpose(a) {\\n        if (a.__matrix == 2) {\\n            return matrixTransposefloat2x2(a);\\n        }\\n        else if (a.__matrix == 3) {\\n            return matrixTransposefloat3x3(a);\\n        }\\n        else if (a.__matrix == 4) {\\n            return matrixTransposefloat4x4(a);\\n        }\\n    }\\n    exports.transpose = transpose;\\n    /** @shadeup=univ(!$0$ * $1$)*/\\n    var mul = function (a, b) {\\n        if (isMatrix(a) || isMatrix(b)) {\\n            if (isMatrix(a) && isMatrix(b)) {\\n                return matrixMul(a, b);\\n            }\\n            else {\\n                if (isMatrix(a) && typeof b == 'number') {\\n                    return componentMath(b, a, function (a, b) { return a * b; });\\n                }\\n                else if (isMatrix(b) && typeof a == 'number') {\\n                    return componentMath(a, b, function (a, b) { return a * b; });\\n                }\\n                else {\\n                    if (isMatrix(a)) {\\n                        if (a.length == 4) {\\n                            return matrixMul2x2float2(a, b);\\n                        }\\n                        else if (a.length == 9) {\\n                            return matrixMul3x3float3(a, b);\\n                        }\\n                        else if (a.length == 16) {\\n                            return matrixMul4x4float4(a, b);\\n                        }\\n                    }\\n                    else if (isMatrix(b)) {\\n                        if (b.length == 4) {\\n                            return matrixMulfloat22x2(a, b);\\n                        }\\n                        else if (b.length == 9) {\\n                            return matrixMulfloat33x3(a, b);\\n                        }\\n                        else if (b.length == 16) {\\n                            return matrixMulfloat44x4(a, b);\\n                        }\\n                    }\\n                }\\n            }\\n        }\\n        else {\\n            return mulFunc(a, b);\\n        }\\n    };\\n    exports.mul = mul;\\n    /** @shadeup=univ(!$0$ / $1$)*/\\n    exports.div = componentOp(function (a, b) { return a / b; });\\n    /** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\\n    exports.pow = componentOp(function (a, b) { return Math.pow(a, b); });\\n    /** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\\n    exports.mod = componentOpMatch(function (a, b) { return a - b * Math.floor(a / b); });\\n    /** @shadeup=univ(!$0$ & $1$)*/\\n    exports.bitand = componentOp(function (a, b) { return a & b; });\\n    /** @shadeup=univ(!$0$ | $1$)*/\\n    exports.bitor = componentOp(function (a, b) { return a | b; });\\n    /** @shadeup=univ(!$0$ ^ $1$)*/\\n    exports.bitxor = componentOp(function (a, b) { return a ^ b; });\\n    /** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\\n    exports.lshift = componentOp(function (a, b) { return a << b; });\\n    /** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\\n    exports.rshift = componentOp(function (a, b) { return a >> b; });\\n    /** @shadeup=univ(!~$0$)*/\\n    exports.bitnot = componentOpSingular(function (a) { return ~a; });\\n    /** @shadeup=univ(!-($0$))*/\\n    exports.negate = componentOpSingular(function (a) { return -a; });\\n    /** @shadeup=univ(!+($0$))*/\\n    exports.positive = componentOpSingular(function (a) { return Math.abs(a); });\\n    /** @shadeup=univ(abs)*/\\n    exports.abs = componentOpSingular(function (a) { return Math.abs(a); });\\n    /**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\\n    exports.floor = componentOpSingular(Math.floor);\\n    /** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\\n    exports.ceil = componentOpSingular(Math.ceil);\\n    /** @shadeup=univ(round)*/\\n    exports.round = componentOpSingular(Math.round);\\n    /** @shadeup=univ(sign)*/\\n    exports.sign = componentOpSingular(Math.sign);\\n    /** @shadeup=univ(cos) */\\n    exports.cos = componentOpSingular(Math.cos);\\n    /** @shadeup=univ(sin) */\\n    exports.sin = componentOpSingularFloat(Math.sin);\\n    /** @shadeup=univ(tan) */\\n    exports.tan = componentOpSingular(Math.tan);\\n    /** @shadeup=univ(acos) */\\n    exports.acos = componentOpSingular(Math.acos);\\n    /** @shadeup=univ(asin) */\\n    exports.asin = componentOpSingular(Math.asin);\\n    /** @shadeup=univ(atan) */\\n    exports.atan = componentOpSingular(Math.atan);\\n    /** @shadeup=univ(atan2) */\\n    exports.atan2 = Math.atan2;\\n    /** @shadeup=univ(cosh) */\\n    exports.cosh = componentOpSingular(Math.cosh);\\n    /** @shadeup=univ(sinh) */\\n    exports.sinh = componentOpSingular(Math.sinh);\\n    /** @shadeup=univ(tanh) */\\n    exports.tanh = componentOpSingular(Math.tanh);\\n    /** @shadeup=univ(acosh) */\\n    exports.acosh = componentOpSingular(Math.acosh);\\n    /** @shadeup=univ(asinh) */\\n    exports.asinh = componentOpSingular(Math.asinh);\\n    /** @shadeup=univ(atanh) */\\n    exports.atanh = componentOpSingular(Math.atanh);\\n    /** @shadeup=univ(exp) */\\n    exports.exp = componentOpSingular(Math.exp);\\n    /** @shadeup=univ(log) */\\n    exports.log = componentOpSingular(Math.log);\\n    /** @shadeup=univ(log2) */\\n    exports.log2 = componentOpSingular(Math.log2);\\n    /** @shadeup=univ(log10) */\\n    exports.log10 = componentOpSingular(Math.log10);\\n    /** @shadeup=univ(sqrt) */\\n    exports.sqrt = componentOpSingular(Math.sqrt);\\n    /** @shadeup=univ(inversesqrt) */\\n    exports.inversesqrt = componentOpSingular(function (a) { return 1 / Math.sqrt(a); });\\n    /** @shadeup=univ(fract)*/\\n    exports.frac = componentOpSingular(function (a) { return a - Math.floor(a); });\\n    function wrap(x, low, high) {\\n        if ((0, exports.lt)(x, low)) {\\n            var rng = high - low;\\n            var s1 = low - x;\\n            var ms = s1 % rng;\\n            return high - ms;\\n        }\\n        else if ((0, exports.gte)(x, high)) {\\n            var rng = high - low;\\n            var s1 = x - high;\\n            var ms = s1 % rng;\\n            return low + ms;\\n        }\\n        else {\\n            return x;\\n        }\\n        // return add(mod(sub(x, low), sub(high, low)), low) as T;\\n    }\\n    exports.wrap = wrap;\\n    /**\\n     * Returns a deterministic (same seed = same output) random float between 0-1\\n     *\\n     * **Note:** See the noise package for more advanced random functions\\n     */\\n    function rand(seed) {\\n        if (typeof seed === 'number') {\\n            return (0, exports.frac)(Math.sin(seed * float(91.3458)) * float(47453.5453));\\n        }\\n        else {\\n            return Math.random();\\n        }\\n    }\\n    exports.rand = rand;\\n    /**\\n     * Returns a deterministic (same seed = same output) random float between 0-1\\n     *\\n     * **Note:** See the noise package for more advanced random functions\\n     */\\n    function rand2(seed) {\\n        return (0, exports.frac)(Math.sin((0, exports.dot)(seed, float2(12.9898, 4.1414))) * float(43758.5453));\\n    }\\n    exports.rand2 = rand2;\\n    /**\\n     * Returns a deterministic (same seed = same output) random float between 0-1\\n     *\\n     * **Note:** See the noise package for more advanced random functions\\n     */\\n    function rand3(seed) {\\n        var _a, _b;\\n        return rand2((_a = swizzle(seed, 'xy'), _b = rand(swizzle(seed, 'z')), [_a[0] + _b, _a[1] + _b]));\\n    }\\n    exports.rand3 = rand3;\\n    // export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\\n    // \\treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\\n    // }\\n    function pingpong(x, length) {\\n        var t = x % (length * float(2));\\n        return length - Math.abs(t - length);\\n    }\\n    exports.pingpong = pingpong;\\n    function vectorMath_2to1_3to3(cb2, cb3) {\\n        return function (a, b) {\\n            if (a.length === 2 && b.length === 2) {\\n                return cb2(a, b);\\n            }\\n            else if (a.length === 3 && b.length === 3) {\\n                return cb3(a, b);\\n            }\\n            else {\\n                throw new Error('Invalid vector length');\\n            }\\n        };\\n    }\\n    function vectorMath_2to1_3to3_4to4(cb2, cb3, cb4) {\\n        return function (a, b) {\\n            if (a.length === 2 && b.length === 2) {\\n                return cb2(a, b);\\n            }\\n            else if (a.length === 3 && b.length === 3) {\\n                return cb3(a, b);\\n            }\\n            else if (a.length === 4 && b.length === 4) {\\n                return cb4(a, b);\\n            }\\n            else {\\n                throw new Error('Invalid vector length');\\n            }\\n        };\\n    }\\n    function vectorMath_2to1_3to1_4to1(cb2, cb3, cb4) {\\n        return function (a, b) {\\n            if (a.length === 2 && b.length === 2) {\\n                return cb2(a, b);\\n            }\\n            else if (a.length === 3 && b.length === 3) {\\n                return cb3(a, b);\\n            }\\n            else if (a.length === 4 && b.length === 4) {\\n                return cb4(a, b);\\n            }\\n            else {\\n                throw new Error('Invalid vector length');\\n            }\\n        };\\n    }\\n    function cross2(a, b) {\\n        return a[0] * b[1] - a[1] * b[0];\\n    }\\n    function cross3(a, b) {\\n        return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\\n    }\\n    exports.cross = vectorMath_2to1_3to3(cross2, cross3);\\n    function dot2(a, b) {\\n        return a[0] * b[0] + a[1] * b[1];\\n    }\\n    function dot3(a, b) {\\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\\n    }\\n    function dot4(a, b) {\\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\\n    }\\n    /** @shadeup=univ(dot)*/\\n    exports.dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\\n    function lerp1(a, b, t) {\\n        return (a + (b - a) * t);\\n    }\\n    function lerp2(a, b, t) {\\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)];\\n    }\\n    function lerp3(a, b, t) {\\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)];\\n    }\\n    function lerp4(a, b, t) {\\n        return [\\n            lerp1(a[0], b[0], t),\\n            lerp1(a[1], b[1], t),\\n            lerp1(a[2], b[2], t),\\n            lerp1(a[3], b[3], t)\\n        ];\\n    }\\n    function lerp2x2(a, b, t) {\\n        return float2x2(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t));\\n    }\\n    function lerp3x3(a, b, t) {\\n        return float3x3(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t));\\n    }\\n    function lerp4x4(a, b, t) {\\n        return float4x4(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t), lerp1(a[9], b[9], t), lerp1(a[10], b[10], t), lerp1(a[11], b[11], t), lerp1(a[12], b[12], t), lerp1(a[13], b[13], t), lerp1(a[14], b[14], t), lerp1(a[15], b[15], t));\\n    }\\n    /** @shadeup=univ(mix)*/\\n    function lerp(a, b, t) {\\n        if (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\\n            return lerp1(a, b, t);\\n        }\\n        else if (isMatrix(a) && isMatrix(b)) {\\n            if (a.length === 4 && b.length === 4) {\\n                return lerp2x2(a, b, t);\\n            }\\n            else if (a.length === 9 && b.length === 9) {\\n                return lerp3x3(a, b, t);\\n            }\\n            else if (a.length === 16 && b.length === 16) {\\n                return lerp4x4(a, b, t);\\n            }\\n            else {\\n                throw new Error('Invalid matrix length');\\n            }\\n        }\\n        else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\\n            return lerp2(a, b, t);\\n        }\\n        else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\\n            return lerp3(a, b, t);\\n        }\\n        else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\\n            return lerp4(a, b, t);\\n        }\\n        else {\\n            throw new Error('Invalid vector length');\\n        }\\n    }\\n    exports.lerp = lerp;\\n    /** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\\n    function bilerp(a, b, c, d, u, v) {\\n        return lerp(lerp(a, b, u), lerp(c, d, u), v);\\n    }\\n    exports.bilerp = bilerp;\\n    /** @shadeup=univ(length)*/\\n    function length(a) {\\n        if (typeof a === 'number') {\\n            return Math.abs(a);\\n        }\\n        else if (a.length === 2) {\\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\\n        }\\n        else if (a.length === 3) {\\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\\n        }\\n        else if (a.length === 4) {\\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\\n        }\\n        else {\\n            throw new Error('Invalid vector length');\\n        }\\n    }\\n    exports.length = length;\\n    function dist(a, b) {\\n        return length((0, exports.sub)(a, b));\\n    }\\n    exports.dist = dist;\\n    /** @shadeup=univ(distance)*/\\n    exports.distance = dist;\\n    /** @shadeup=univ(normalize)*/\\n    function normalize(a) {\\n        if (a.length === 2) {\\n            var l = length(a);\\n            return [a[0] / l, a[1] / l];\\n        }\\n        else if (a.length === 3) {\\n            var l = length(a);\\n            return [a[0] / l, a[1] / l, a[2] / l];\\n        }\\n        else if (a.length === 4) {\\n            var l = length(a);\\n            return [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\\n        }\\n        else {\\n            throw new Error('Invalid vector length');\\n        }\\n    }\\n    exports.normalize = normalize;\\n    /** @shadeup=univ(reflect)*/\\n    function reflect(a, b) {\\n        if (a.length === 2 && b.length === 2) {\\n            return reflect2(a, b);\\n        }\\n        else if (a.length === 3 && b.length === 3) {\\n            return reflect3(a, b);\\n        }\\n        else if (a.length === 4 && b.length === 4) {\\n            return reflect4(a, b);\\n        }\\n        else {\\n            throw new Error('Invalid vector length');\\n        }\\n    }\\n    exports.reflect = reflect;\\n    function reflect2(b, a) {\\n        var dot = dot2(a, b);\\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\\n    }\\n    function reflect3(b, a) {\\n        var dot = dot3(a, b);\\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\\n    }\\n    function reflect4(b, a) {\\n        var dot = dot4(a, b);\\n        return [\\n            b[0] - 2 * dot * a[0],\\n            b[1] - 2 * dot * a[1],\\n            b[2] - 2 * dot * a[2],\\n            b[3] - 2 * dot * a[3]\\n        ];\\n    }\\n    /** @shadeup=univ(refract)*/\\n    function refract(a, b, eta) {\\n        if (a.length === 2 && b.length === 2) {\\n            return refract2(a, b, eta);\\n        }\\n        else if (a.length === 3 && b.length === 3) {\\n            return refract3(a, b, eta);\\n        }\\n        else if (a.length === 4 && b.length === 4) {\\n            return refract4(a, b, eta);\\n        }\\n        else {\\n            throw new Error('Invalid vector length');\\n        }\\n    }\\n    exports.refract = refract;\\n    function refract2(b, a, eta) {\\n        var dot = dot2(a, b);\\n        var k = 1 - eta * eta * (1 - dot * dot);\\n        return k < 0\\n            ? [0, 0]\\n            : [\\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\\n            ];\\n    }\\n    function refract3(b, a, eta) {\\n        var dot = dot3(a, b);\\n        var k = 1 - eta * eta * (1 - dot * dot);\\n        return k < 0\\n            ? [0, 0, 0]\\n            : [\\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\\n            ];\\n    }\\n    function refract4(b, a, eta) {\\n        var dot = dot4(a, b);\\n        var k = 1 - eta * eta * (1 - dot * dot);\\n        return k < 0\\n            ? [0, 0, 0, 0]\\n            : [\\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\\n                eta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\\n            ];\\n    }\\n    /** @shadeup=univ(degrees)*/\\n    function degrees(a) {\\n        return float((a * 180) / Math.PI);\\n    }\\n    exports.degrees = degrees;\\n    /** @shadeup=univ(radians)*/\\n    function radians(a) {\\n        return float((a * Math.PI) / 180);\\n    }\\n    exports.radians = radians;\\n    /** @shadeup=univ(step)*/\\n    function step(edge, x) {\\n        if (typeof edge === 'number') {\\n            if (typeof x === 'number') {\\n                return x < edge ? 0 : 1;\\n            }\\n            else {\\n                return x.map(function (v) { return (v < edge ? 0 : 1); });\\n            }\\n        }\\n        else {\\n            if (typeof x === 'number') {\\n                return edge.map(function (v) { return (x < v ? 0 : 1); });\\n            }\\n            else {\\n                return edge.map(function (v, i) { return (x[i] < v ? 0 : 1); });\\n            }\\n        }\\n    }\\n    exports.step = step;\\n    function _smoothstep(a, b, x) {\\n        var t = clamp((x - a) / (b - a), 0, 1);\\n        return t * t * (3 - 2 * t);\\n    }\\n    /** @shadeup=univ(smoothstep)*/\\n    function smoothstep(a, b, x) {\\n        if (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\\n            return _smoothstep(a, b, x);\\n        }\\n        else if (typeof a === 'number' && typeof b === 'number') {\\n            return x.map(function (v) { return _smoothstep(a, b, v); });\\n        }\\n        else {\\n            return a.map(function (v, i) { return _smoothstep(v, b[i], x[i]); });\\n        }\\n    }\\n    exports.smoothstep = smoothstep;\\n    function componentReduce(vectors, cb) {\\n        var result = [];\\n        var _loop_1 = function (i) {\\n            result.push(cb(vectors.map(function (v) { return v[i]; })));\\n        };\\n        for (var i = 0; i < vectors[0].length; i++) {\\n            _loop_1(i);\\n        }\\n        return result;\\n    }\\n    /** @shadeup=univ(min)*/\\n    function min() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        if (args.length == 1) {\\n            if (Array.isArray(args[0])) {\\n                return Math.min.apply(Math, args[0]);\\n            }\\n            else {\\n                return args[0];\\n            }\\n        }\\n        else {\\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\\n                var minTo_1 = args[1];\\n                return args[0].map(function (v) { return Math.min(v, minTo_1); });\\n            }\\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\\n                var minFrom_1 = args[0];\\n                return args[1].map(function (v) { return Math.min(minFrom_1, v); });\\n            }\\n            else if (Array.isArray(args[0])) {\\n                return componentReduce(args, function (a) { return Math.min.apply(Math, a); });\\n            }\\n            else {\\n                return Math.min.apply(Math, args);\\n            }\\n        }\\n    }\\n    exports.min = min;\\n    /** @shadeup=univ(max)*/\\n    function max() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        if (args.length == 1) {\\n            if (Array.isArray(args[0])) {\\n                return Math.max.apply(Math, args[0]);\\n            }\\n            else {\\n                return args[0];\\n            }\\n        }\\n        else {\\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\\n                var maxTo_1 = args[1];\\n                return args[0].map(function (v) { return Math.max(v, maxTo_1); });\\n            }\\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\\n                var maxFrom_1 = args[0];\\n                return args[1].map(function (v) { return Math.max(maxFrom_1, v); });\\n            }\\n            else if (Array.isArray(args[0])) {\\n                return componentReduce(args, function (a) { return Math.max.apply(Math, a); });\\n            }\\n            else {\\n                return Math.max.apply(Math, args);\\n            }\\n        }\\n    }\\n    exports.max = max;\\n    /** @shadeup=univ(clamp)*/\\n    function clamp(arg, min, max) {\\n        if (Array.isArray(arg)) {\\n            if (Array.isArray(min) && Array.isArray(max)) {\\n                return arg.map(function (a, i) { return Math.min(Math.max(a, min[i]), max[i]); });\\n            }\\n            else {\\n                return arg.map(function (a) { return Math.min(Math.max(a, min), max); });\\n            }\\n        }\\n        else {\\n            return Math.min(Math.max(arg, min), max);\\n        }\\n    }\\n    exports.clamp = clamp;\\n    /** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\\n    function saturate(arg) {\\n        return clamp(arg, float(0), float(1));\\n    }\\n    exports.saturate = saturate;\\n    function eq(a, b) {\\n        var ta = typeof a;\\n        var tb = typeof b;\\n        if (ta != tb) {\\n            return false;\\n        }\\n        else if ((ta == 'number' && tb == 'number') ||\\n            (ta == 'string' && tb == 'string') ||\\n            (ta == 'boolean' && tb == 'boolean') ||\\n            (ta == 'undefined' && tb == 'undefined')) {\\n            return a == b;\\n        }\\n        else if (ta == 'object' && tb == 'object') {\\n            if (Array.isArray(a) && Array.isArray(b)) {\\n                if (a.length != b.length) {\\n                    return false;\\n                }\\n                for (var i = 0; i < a.length; i++) {\\n                    if (!eq(a[i], b[i])) {\\n                        return false;\\n                    }\\n                }\\n                return true;\\n            }\\n            else {\\n                return a == b;\\n            }\\n        }\\n    }\\n    exports.eq = eq;\\n    /** @shadeup=univ(!($0$ != $1$))*/\\n    var neq = function (a, b) { return !eq(a, b); };\\n    exports.neq = neq;\\n    /** @shadeup=univ(!($0$ < $1$))*/\\n    var lt = function (a, b) { return a < b; };\\n    exports.lt = lt;\\n    /** @shadeup=univ(!($0$ <= $1$))*/\\n    var lte = function (a, b) { return a <= b; };\\n    exports.lte = lte;\\n    /** @shadeup=univ(!($0$ > $1$))*/\\n    var gt = function (a, b) { return a > b; };\\n    exports.gt = gt;\\n    /** @shadeup=univ(!($0$ >= $1$))*/\\n    var gte = function (a, b) { return a >= b; };\\n    exports.gte = gte;\\n    /** @shadeup=univ(!($0$ && $1$))*/\\n    var and = function (a, b) { return a && b; };\\n    exports.and = and;\\n    /** @shadeup=univ(!($0$ || $1$))*/\\n    var or = function (a, b) { return a || b; };\\n    exports.or = or;\\n    /** @shadeup=univ(!(!$0$))*/\\n    var not = function (a) { return !a; };\\n    exports.not = not;\\n    /** @shadeup=univ()*/\\n    function makeVector() {\\n        var out = [];\\n        for (var i = 0; i < arguments.length; i++) {\\n            var a = arguments[i];\\n            if (typeof a === 'number') {\\n                out.push(a);\\n            }\\n            else {\\n                for (var j = 0; j < a.length; j++) {\\n                    out.push(a[j]);\\n                }\\n            }\\n        }\\n        return out;\\n        throw new Error('Invalid vector length');\\n    }\\n    exports.makeVector = makeVector;\\n    var swizIndex = {\\n        x: 0,\\n        y: 1,\\n        z: 2,\\n        w: 3,\\n        r: 0,\\n        g: 1,\\n        b: 2,\\n        a: 3\\n    };\\n    var getSwizIndexFast = function (swiz) {\\n        switch (swiz) {\\n            case 'x':\\n                return 0;\\n            case 'y':\\n                return 1;\\n            case 'z':\\n                return 2;\\n            case 'w':\\n                return 3;\\n            case 'r':\\n                return 0;\\n            case 'g':\\n                return 1;\\n            case 'b':\\n                return 2;\\n            case 'a':\\n                return 3;\\n        }\\n    };\\n    /** @shadeup=shader */\\n    function testDocComment() {\\n        return 1;\\n    }\\n    exports.testDocComment = testDocComment;\\n    function swizzle(v, swiz, assign) {\\n        var _a;\\n        if (typeof v === 'number') {\\n            if (swiz.length === 1) {\\n                return v;\\n            }\\n            else if (swiz.length === 2) {\\n                return [v, v];\\n            }\\n            else if (swiz.length === 3) {\\n                return [v, v, v];\\n            }\\n            else if (swiz.length === 4) {\\n                return [v, v, v, v];\\n            }\\n        }\\n        else if (Array.isArray(v)) {\\n            if (typeof assign !== 'undefined') {\\n                for (var i = 0; i < swiz.length; i++) {\\n                    v[getSwizIndexFast(swiz[i])] = (_a = assign[i]) !== null && _a !== void 0 ? _a : assign;\\n                }\\n                return v;\\n            }\\n            if (swiz.length === 1) {\\n                return v[getSwizIndexFast(swiz)];\\n            }\\n            else if (swiz.length === 2) {\\n                return [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\\n            }\\n            else if (swiz.length === 3) {\\n                return [\\n                    v[getSwizIndexFast(swiz[0])],\\n                    v[getSwizIndexFast(swiz[1])],\\n                    v[getSwizIndexFast(swiz[2])]\\n                ];\\n            }\\n            else if (swiz.length === 4) {\\n                return [\\n                    v[getSwizIndexFast(swiz[0])],\\n                    v[getSwizIndexFast(swiz[1])],\\n                    v[getSwizIndexFast(swiz[2])],\\n                    v[getSwizIndexFast(swiz[3])]\\n                ];\\n            }\\n        }\\n        else {\\n            return v[swiz];\\n        }\\n    }\\n    exports.swizzle = swizzle;\\n    function intifyVector(v) {\\n        if (typeof v === 'number') {\\n            return v;\\n        }\\n        else if (Array.isArray(v)) {\\n            return v.map(function (v) { return v | 0; });\\n        }\\n        else {\\n            return v;\\n        }\\n    }\\n    exports.intifyVector = intifyVector;\\n    exports.FM = static_math_1.FM;\\n    // type f32 = number & { __float: never };\\n    // type i32 = number & { __int: never };\\n    // type num = f32 | i32;\\n    // function f32(a: number): f32 {\\n    // \\treturn a as f32;\\n    // }\\n    // function i32(a: number): i32 {\\n    // \\treturn a as i32;\\n    // }\\n    // type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\\n    // type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\\n    // export const abc: numeric2 = (a, b, c) => a + b + c;\\n    // abc(f32(1), i32(2));\\n    var atomic_internal = /** @class */ (function () {\\n        function atomic_internal(value) {\\n            this.__value = value;\\n        }\\n        /** @shadeup=univ(!atomicLoad(&$self$))*/\\n        atomic_internal.prototype.load = function () {\\n            return this.__value;\\n        };\\n        /** @shadeup=univ(!atomicStore(&$self$, $0$))*/\\n        atomic_internal.prototype.store = function (value) {\\n            this.__value = value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n        };\\n        /** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\\n        atomic_internal.prototype.add = function (value) {\\n            var old = this.__value;\\n            this.__value += value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicSub(&$self$, $0$))*/\\n        atomic_internal.prototype.sub = function (value) {\\n            var old = this.__value;\\n            this.__value -= value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicMax(&$self$, $0$))*/\\n        atomic_internal.prototype.max = function (value) {\\n            var old = this.__value;\\n            this.__value = Math.max(value, this.__value);\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicMin(&$self$, $0$))*/\\n        atomic_internal.prototype.min = function (value) {\\n            var old = this.__value;\\n            this.__value = Math.min(value, this.__value);\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\\n        atomic_internal.prototype.and = function (value) {\\n            var old = this.__value;\\n            this.__value = value & this.__value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicOr(&$self$, $0$))*/\\n        atomic_internal.prototype.or = function (value) {\\n            var old = this.__value;\\n            this.__value = value | this.__value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicXor(&$self$, $0$))*/\\n        atomic_internal.prototype.xor = function (value) {\\n            var old = this.__value;\\n            this.__value = value ^ this.__value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\\n        atomic_internal.prototype.exchange = function (value) {\\n            var old = this.__value;\\n            this.__value = value;\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return old;\\n        };\\n        /** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\\n        atomic_internal.prototype.compareExchangeWeak = function (compare, value) {\\n            var old = this.__value;\\n            if (old == compare) {\\n                this.__value = value;\\n            }\\n            if (this.$mutate)\\n                this.$mutate(this.__value);\\n            return {\\n                old_value: old,\\n                exchanged: old == compare\\n            };\\n        };\\n        atomic_internal.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_math_ts_71052_atomic_internal\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__type\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"__value\\\\\\\",null],[\\\\\\\"$mutate\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\");\\n        };\\n        return atomic_internal;\\n    }());\\n    exports.atomic_internal = atomic_internal;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_math_ts_71052_atomic_internal\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__type\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"__value\\\\\\\",null],[\\\\\\\"$mutate\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\"), atomic_internal)\\n    function atomic(value) {\\n        return new atomic_internal(value);\\n    }\\n    exports.atomic = atomic;\\n    window.makeAtomic = atomic;\\n    /**\\n     * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\\n     *\\n     * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\\n     *\\n     * @shadeup=univ(!workgroupBarrier())\\n     */\\n    function workgroupBarrier() { }\\n    exports.workgroupBarrier = workgroupBarrier;\\n    /**\\n     * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\\n     *\\n     * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\\n     *\\n     * @shadeup=univ(!storageBarrier())\\n     */\\n    function storageBarrier() { }\\n    exports.storageBarrier = storageBarrier;\\n    /**\\n     * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\\n     *\\n     * @shadeup=univ(!workgroupUniformLoad(&$0$))\\n     */\\n    function workgroupUniformLoad(p) {\\n        return p;\\n    }\\n    exports.workgroupUniformLoad = workgroupUniformLoad;\\n    /**\\n     * Discards the current fragment.\\n     *\\n     * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\\n     *\\n     * See: https://www.w3.org/TR/WGSL/#discard-statement\\n     *\\n     * @shadeup=univ(!discard;)\\n     */\\n    function discard() { }\\n    exports.discard = discard;\\n    /**\\n     * Returns the derivative of the input value with respect to the window-space x coordinate.\\n     * @param value - The input value.\\n     * @returns The derivative of the input value with respect to the window-space x coordinate.\\n     * @shadeup=glsl(!dFdx($0$))\\n     * @shadeup=wgsl(!dpdx($0$))\\n     */\\n    function ddx(value) {\\n        return 0;\\n    }\\n    exports.ddx = ddx;\\n    /**\\n     * Returns the derivative of the input value with respect to the window-space y coordinate.\\n     * @param value - The input value.\\n     *\\n     * @returns The derivative of the input value with respect to the window-space y coordinate.\\n     * @shadeup=glsl(!dFdy($0$))\\n     * @shadeup=wgsl(!dpdy($0$))\\n     */\\n    function ddy(value) {\\n        return 0;\\n    }\\n    exports.ddy = ddy;\\n    /**\\n     * @shadeup=glsl(!dFdxFine($0$))\\n     * @shadeup=wgsl(!dpdxFine($0$))\\n     */\\n    function ddxFine(value) {\\n        return 0;\\n    }\\n    exports.ddxFine = ddxFine;\\n    /**\\n     * @shadeup=glsl(!dFdyFine($0$))\\n     * @shadeup=wgsl(!dpdyFine($0$))\\n     */\\n    function ddyFine(value) {\\n        return 0;\\n    }\\n    exports.ddyFine = ddyFine;\\n    /**\\n     * @shadeup=glsl(!dFdxCoarse($0$))\\n     * @shadeup=wgsl(!dpdxCoarse($0$))\\n     */\\n    function ddxCoarse(value) {\\n        return 0;\\n    }\\n    exports.ddxCoarse = ddxCoarse;\\n    /**\\n     * @shadeup=glsl(!dFdyCoarse($0$))\\n     * @shadeup=wgsl(!dpdyCoarse($0$))\\n     */\\n    function ddyCoarse(value) {\\n        return 0;\\n    }\\n    exports.ddyCoarse = ddyCoarse;\\n    /**\\n     * @shadeup=glsl(!$0$)\\n     * @shadeup=wgsl(!bitcast<$[0]$>($0$))\\n     */\\n    function bitcast(value) {\\n        return 0;\\n    }\\n    exports.bitcast = bitcast;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/static-math.ts\":{\"outputFiles\":[{\"name\":\"/static-math.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.FM = void 0;\\n    ///\\n    /// GENERATED\\n    /// DO NOT EDIT THIS FILE\\n    /// see generate-static-math.ts\\n    ///\\n    exports.FM = {\\n        add_1_1: function (a, b) { return a + b; },\\n        add_2_1: function (a, b) { return [a[0] + b, a[1] + b]; },\\n        add_1_2: function (a, b) { return [a + b[0], a + b[1]]; },\\n        add_2_2: function (a, b) { return [a[0] + b[0], a[1] + b[1]]; },\\n        add_3_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b]; },\\n        add_1_3: function (a, b) { return [a + b[0], a + b[1], a + b[2]]; },\\n        add_3_3: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\\n        add_4_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\\n        add_1_4: function (a, b) { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\\n        add_4_4: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\\n        sub_1_1: function (a, b) { return a - b; },\\n        sub_2_1: function (a, b) { return [a[0] - b, a[1] - b]; },\\n        sub_1_2: function (a, b) { return [a - b[0], a - b[1]]; },\\n        sub_2_2: function (a, b) { return [a[0] - b[0], a[1] - b[1]]; },\\n        sub_3_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b]; },\\n        sub_1_3: function (a, b) { return [a - b[0], a - b[1], a - b[2]]; },\\n        sub_3_3: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\\n        sub_4_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\\n        sub_1_4: function (a, b) { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\\n        sub_4_4: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\\n        div_1_1: function (a, b) { return a / b; },\\n        div_2_1: function (a, b) { return [a[0] / b, a[1] / b]; },\\n        div_1_2: function (a, b) { return [a / b[0], a / b[1]]; },\\n        div_2_2: function (a, b) { return [a[0] / b[0], a[1] / b[1]]; },\\n        div_3_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b]; },\\n        div_1_3: function (a, b) { return [a / b[0], a / b[1], a / b[2]]; },\\n        div_3_3: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\\n        div_4_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\\n        div_1_4: function (a, b) { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\\n        div_4_4: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\\n        mul_1_1: function (a, b) { return a * b; },\\n        mul_2_1: function (a, b) { return [a[0] * b, a[1] * b]; },\\n        mul_1_2: function (a, b) { return [a * b[0], a * b[1]]; },\\n        mul_2_2: function (a, b) { return [a[0] * b[0], a[1] * b[1]]; },\\n        mul_3_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b]; },\\n        mul_1_3: function (a, b) { return [a * b[0], a * b[1], a * b[2]]; },\\n        mul_3_3: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\\n        mul_4_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\\n        mul_1_4: function (a, b) { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\\n        mul_4_4: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\\n        mod_1_1: function (a, b) { return a % b; },\\n        mod_2_1: function (a, b) { return [a[0] % b, a[1] % b]; },\\n        mod_1_2: function (a, b) { return [a % b[0], a % b[1]]; },\\n        mod_2_2: function (a, b) { return [a[0] % b[0], a[1] % b[1]]; },\\n        mod_3_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b]; },\\n        mod_1_3: function (a, b) { return [a % b[0], a % b[1], a % b[2]]; },\\n        mod_3_3: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\\n        mod_4_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\\n        mod_1_4: function (a, b) { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\\n        mod_4_4: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\\n        bitand_1_1: function (a, b) { return a & b; },\\n        bitand_2_1: function (a, b) { return [a[0] & b, a[1] & b]; },\\n        bitand_1_2: function (a, b) { return [a & b[0], a & b[1]]; },\\n        bitand_2_2: function (a, b) { return [a[0] & b[0], a[1] & b[1]]; },\\n        bitand_3_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b]; },\\n        bitand_1_3: function (a, b) { return [a & b[0], a & b[1], a & b[2]]; },\\n        bitand_3_3: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\\n        bitand_4_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\\n        bitand_1_4: function (a, b) { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\\n        bitand_4_4: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\\n        bitor_1_1: function (a, b) { return a | b; },\\n        bitor_2_1: function (a, b) { return [a[0] | b, a[1] | b]; },\\n        bitor_1_2: function (a, b) { return [a | b[0], a | b[1]]; },\\n        bitor_2_2: function (a, b) { return [a[0] | b[0], a[1] | b[1]]; },\\n        bitor_3_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b]; },\\n        bitor_1_3: function (a, b) { return [a | b[0], a | b[1], a | b[2]]; },\\n        bitor_3_3: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\\n        bitor_4_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\\n        bitor_1_4: function (a, b) { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\\n        bitor_4_4: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\\n        bitxor_1_1: function (a, b) { return a ^ b; },\\n        bitxor_2_1: function (a, b) { return [a[0] ^ b, a[1] ^ b]; },\\n        bitxor_1_2: function (a, b) { return [a ^ b[0], a ^ b[1]]; },\\n        bitxor_2_2: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1]]; },\\n        bitxor_3_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\\n        bitxor_1_3: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\\n        bitxor_3_3: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\\n        bitxor_4_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\\n        bitxor_1_4: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\\n        bitxor_4_4: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\\n        lshift_1_1: function (a, b) { return a << b; },\\n        lshift_2_1: function (a, b) { return [a[0] << b, a[1] << b]; },\\n        lshift_1_2: function (a, b) { return [a << b[0], a << b[1]]; },\\n        lshift_2_2: function (a, b) { return [a[0] << b[0], a[1] << b[1]]; },\\n        lshift_3_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b]; },\\n        lshift_1_3: function (a, b) { return [a << b[0], a << b[1], a << b[2]]; },\\n        lshift_3_3: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\\n        lshift_4_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\\n        lshift_1_4: function (a, b) { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\\n        lshift_4_4: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\\n        rshift_1_1: function (a, b) { return a >> b; },\\n        rshift_2_1: function (a, b) { return [a[0] >> b, a[1] >> b]; },\\n        rshift_1_2: function (a, b) { return [a >> b[0], a >> b[1]]; },\\n        rshift_2_2: function (a, b) { return [a[0] >> b[0], a[1] >> b[1]]; },\\n        rshift_3_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\\n        rshift_1_3: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2]]; },\\n        rshift_3_3: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\\n        rshift_4_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\\n        rshift_1_4: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\\n        rshift_4_4: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\\n        bitnot_1: function (a) { return ~a; },\\n        bitnot_2: function (a) { return [~a[0], ~a[1]]; },\\n        bitnot_3: function (a) { return [~a[0], ~a[1], ~a[2]]; },\\n        bitnot_4: function (a) { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\\n        negate_1: function (a) { return -a; },\\n        negate_2: function (a) { return [-a[0], -a[1]]; },\\n        negate_3: function (a) { return [-a[0], -a[1], -a[2]]; },\\n        negate_4: function (a) { return [-a[0], -a[1], -a[2], -a[3]]; },\\n        positive_1: function (a) { return Math.abs(a); },\\n        positive_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n        positive_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n        positive_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n        abs_1: function (a) { return Math.abs(a); },\\n        abs_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\\n        abs_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\\n        abs_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\\n        floor_1: function (a) { return Math.floor(a); },\\n        floor_2: function (a) { return [Math.floor(a[0]), Math.floor(a[1])]; },\\n        floor_3: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\\n        floor_4: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\\n        ceil_1: function (a) { return Math.ceil(a); },\\n        ceil_2: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\\n        ceil_3: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\\n        ceil_4: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\\n        round_1: function (a) { return Math.round(a); },\\n        round_2: function (a) { return [Math.round(a[0]), Math.round(a[1])]; },\\n        round_3: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\\n        round_4: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\\n        sign_1: function (a) { return Math.sign(a); },\\n        sign_2: function (a) { return [Math.sign(a[0]), Math.sign(a[1])]; },\\n        sign_3: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\\n        sign_4: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\\n        cos_1: function (a) { return Math.cos(a); },\\n        cos_2: function (a) { return [Math.cos(a[0]), Math.cos(a[1])]; },\\n        cos_3: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\\n        cos_4: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\\n        sin_1: function (a) { return Math.sin(a); },\\n        sin_2: function (a) { return [Math.sin(a[0]), Math.sin(a[1])]; },\\n        sin_3: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\\n        sin_4: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\\n        tan_1: function (a) { return Math.tan(a); },\\n        tan_2: function (a) { return [Math.tan(a[0]), Math.tan(a[1])]; },\\n        tan_3: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\\n        tan_4: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\\n        acos_1: function (a) { return Math.acos(a); },\\n        acos_2: function (a) { return [Math.acos(a[0]), Math.acos(a[1])]; },\\n        acos_3: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\\n        acos_4: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\\n        asin_1: function (a) { return Math.asin(a); },\\n        asin_2: function (a) { return [Math.asin(a[0]), Math.asin(a[1])]; },\\n        asin_3: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\\n        asin_4: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\\n        atan_1: function (a) { return Math.atan(a); },\\n        atan_2: function (a) { return [Math.atan(a[0]), Math.atan(a[1])]; },\\n        atan_3: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\\n        atan_4: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\\n        cosh_1: function (a) { return Math.cosh(a); },\\n        cosh_2: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\\n        cosh_3: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\\n        cosh_4: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\\n        sinh_1: function (a) { return Math.sinh(a); },\\n        sinh_2: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\\n        sinh_3: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\\n        sinh_4: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\\n        tanh_1: function (a) { return Math.tanh(a); },\\n        tanh_2: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\\n        tanh_3: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\\n        tanh_4: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\\n        acosh_1: function (a) { return Math.acosh(a); },\\n        acosh_2: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\\n        acosh_3: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\\n        acosh_4: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\\n        asinh_1: function (a) { return Math.asinh(a); },\\n        asinh_2: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\\n        asinh_3: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\\n        asinh_4: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\\n        atanh_1: function (a) { return Math.atanh(a); },\\n        atanh_2: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\\n        atanh_3: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\\n        atanh_4: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\\n        exp_1: function (a) { return Math.exp(a); },\\n        exp_2: function (a) { return [Math.exp(a[0]), Math.exp(a[1])]; },\\n        exp_3: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\\n        exp_4: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\\n        log_1: function (a) { return Math.log(a); },\\n        log_2: function (a) { return [Math.log(a[0]), Math.log(a[1])]; },\\n        log_3: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\\n        log_4: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\\n        log2_1: function (a) { return Math.log2(a); },\\n        log2_2: function (a) { return [Math.log2(a[0]), Math.log2(a[1])]; },\\n        log2_3: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\\n        log2_4: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\\n        log10_1: function (a) { return Math.log10(a); },\\n        log10_2: function (a) { return [Math.log10(a[0]), Math.log10(a[1])]; },\\n        log10_3: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\\n        log10_4: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\\n        sqrt_1: function (a) { return Math.sqrt(a); },\\n        sqrt_2: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\\n        sqrt_3: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\\n        sqrt_4: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\\n        int_2_1_1: function (a, b) { return [a | 0, b | 0]; },\\n        int_2_2: function (a) { return [a[0] | 0, a[1] | 0]; },\\n        int_3_1_1_1: function (a, b, c) { return [a | 0, b | 0, c | 0]; },\\n        int_3_2_1: function (a, b) { return [a[0] | 0, a[1] | 0, b | 0]; },\\n        int_3_1_2: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0]; },\\n        int_3_3: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0]; },\\n        int_4_1_1_1_1: function (a, b, c, d) { return [a | 0, b | 0, c | 0, d | 0]; },\\n        int_4_2_1_1: function (a, b, c) { return [a[0] | 0, a[1] | 0, b | 0, c | 0]; },\\n        int_4_1_2_1: function (a, b, c) { return [a | 0, b[0] | 0, b[1] | 0, c | 0]; },\\n        int_4_1_1_2: function (a, b, c) { return [a | 0, b | 0, c[0] | 0, c[1] | 0]; },\\n        int_4_3_1: function (a, b) { return [a[0] | 0, a[1] | 0, a[2] | 0, b | 0]; },\\n        int_4_1_3: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0, b[2] | 0]; },\\n        int_4_2_2: function (a, b) { return [a[0] | 0, a[1] | 0, b[0] | 0, b[1] | 0]; },\\n        int_4_4: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0, a[3] | 0]; },\\n        float_2_1_1: function (a, b) { return [a, b]; },\\n        float_2_2: function (a) { return [a[0], a[1]]; },\\n        float_3_1_1_1: function (a, b, c) { return [a, b, c]; },\\n        float_3_2_1: function (a, b) { return [a[0], a[1], b]; },\\n        float_3_1_2: function (a, b) { return [a, b[0], b[1]]; },\\n        float_3_3: function (a) { return [a[0], a[1], a[2]]; },\\n        float_4_1_1_1_1: function (a, b, c, d) { return [a, b, c, d]; },\\n        float_4_2_1_1: function (a, b, c) { return [a[0], a[1], b, c]; },\\n        float_4_1_2_1: function (a, b, c) { return [a, b[0], b[1], c]; },\\n        float_4_1_1_2: function (a, b, c) { return [a, b, c[0], c[1]]; },\\n        float_4_3_1: function (a, b) { return [a[0], a[1], a[2], b]; },\\n        float_4_1_3: function (a, b) { return [a, b[0], b[1], b[2]]; },\\n        float_4_2_2: function (a, b) { return [a[0], a[1], b[0], b[1]]; },\\n        float_4_4: function (a) { return [a[0], a[1], a[2], a[3]]; },\\n        uint_2_1_1: function (a, b) { return [a >>> 0, b >>> 0]; },\\n        uint_2_2: function (a) { return [a[0] >>> 0, a[1] >>> 0]; },\\n        uint_3_1_1_1: function (a, b, c) { return [a >>> 0, b >>> 0, c >>> 0]; },\\n        uint_3_2_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0]; },\\n        uint_3_1_2: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0]; },\\n        uint_3_3: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0]; },\\n        uint_4_1_1_1_1: function (a, b, c, d) { return [a >>> 0, b >>> 0, c >>> 0, d >>> 0]; },\\n        uint_4_2_1_1: function (a, b, c) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0, c >>> 0]; },\\n        uint_4_1_2_1: function (a, b, c) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, c >>> 0]; },\\n        uint_4_1_1_2: function (a, b, c) { return [a >>> 0, b >>> 0, c[0] >>> 0, c[1] >>> 0]; },\\n        uint_4_3_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, b >>> 0]; },\\n        uint_4_1_3: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, b[2] >>> 0]; },\\n        uint_4_2_2: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b[0] >>> 0, b[1] >>> 0]; },\\n        uint_4_4: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, a[3] >>> 0]; },\\n    };\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/std___std_all.ts\":{\"outputFiles\":[{\"name\":\"/std___std_all.js\",\"writeByteOrderMark\":false,\"text\":\"var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n    return new (P || (P = Promise))(function (resolve, reject) {\\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n        function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\\n    });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n    return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n    function verb(n) { return function (v) { return step([n, v]); }; }\\n    function step(op) {\\n        if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\\n            if (f = 1, y && (t = op[0] & 2 ? y[\\\"return\\\"] : op[0] ? y[\\\"throw\\\"] || ((t = y[\\\"return\\\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\\n            if (y = 0, t) op = [op[0] & 2, t.value];\\n            switch (op[0]) {\\n                case 0: case 1: t = op; break;\\n                case 4: _.label++; return { value: op[1], done: false };\\n                case 5: _.label++; y = op[1]; op = [0]; continue;\\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n                default:\\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n                    if (t[2]) _.ops.pop();\\n                    _.trys.pop(); continue;\\n            }\\n            op = body.call(thisArg, _);\\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n    }\\n};\\ndefine([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.time = exports.__deepClone = exports.__makeMap = exports.map = exports.array = exports.sleep = exports.hashableTypeToString = exports.globalVarGet = exports.globalVarInit = exports.compute = exports.statGraph = exports.stat = exports.flush = exports.print = exports.Mesh = exports.__dummy = void 0;\\n    /**__SHADEUP_STRUCT_INJECTION_HOOK__*/\\n    exports.__dummy = 1;\\n    // import { Mesh } from '/_std/mesh';\\n    var Mesh = /** @class */ (function () {\\n        function Mesh(prefils) {\\n            this.vertices = [];\\n            this.triangles = [];\\n            this.normals = [];\\n            this.tangents = [];\\n            this.bitangents = [];\\n            this.uvs = [];\\n            this.colors = [];\\n            this.symbol = Symbol();\\n            if (prefils.vertices)\\n                this.vertices = prefils.vertices;\\n            if (prefils.triangles)\\n                this.triangles = prefils.triangles;\\n            if (prefils.normals)\\n                this.normals = prefils.normals;\\n            if (prefils.tangents)\\n                this.tangents = prefils.tangents;\\n            if (prefils.bitangents)\\n                this.bitangents = prefils.bitangents;\\n            if (prefils.uvs)\\n                this.uvs = prefils.uvs;\\n            if (prefils.colors)\\n                this.colors = prefils.colors;\\n        }\\n        Mesh.prototype.getVertices = function () {\\n            return this.vertices;\\n        };\\n        Mesh.prototype.getTriangles = function () {\\n            return this.triangles;\\n        };\\n        Mesh.prototype.getNormals = function () {\\n            return this.normals;\\n        };\\n        Mesh.prototype.getTangents = function () {\\n            return this.tangents;\\n        };\\n        Mesh.prototype.getBitangents = function () {\\n            return this.bitangents;\\n        };\\n        Mesh.prototype.getUVs = function () {\\n            return this.uvs;\\n        };\\n        Mesh.prototype.getColors = function () {\\n            return this.colors;\\n        };\\n        Mesh.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\");\\n        };\\n        return Mesh;\\n    }());\\n    exports.Mesh = Mesh;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\"), Mesh)\\n    /**\\n     * Prints a set of value(s) to the console. Values will be converted to strings before printing.\\n     *\\n     * @param args Any number of values to print to the console\\n     */\\n    function print() {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n        }\\n        console.log.apply(console, args);\\n        if (typeof window['__shadeup_print'] === 'function') {\\n            window['__shadeup_print'].apply(window, args);\\n        }\\n    }\\n    exports.print = print;\\n    /**\\n     * Flushes (executes) all queued compute or draw calls\\n     * @shadeup=tag(async) @shadeup=noemit_gpu\\n     */\\n    function flush() {\\n        return __awaiter(this, void 0, void 0, function () {\\n            return __generator(this, function (_a) {\\n                switch (_a.label) {\\n                    case 0:\\n                        if (!(typeof window['flushAdapter'] === 'function')) return [3 /*break*/, 2];\\n                        return [4 /*yield*/, window['flushAdapter']()];\\n                    case 1: return [2 /*return*/, _a.sent()];\\n                    case 2: return [2 /*return*/];\\n                }\\n            });\\n        });\\n    }\\n    exports.flush = flush;\\n    /**\\n     * Displays a single value in the stats panel at the top right\\n     *\\n     * @param name key for this stat (e.g. \\\"fps\\\")\\n     * @param value any value\\n     */\\n    function stat(name, value) {\\n        if (typeof window['__shadeup_stat'] === 'function') {\\n            window['__shadeup_stat'](name, value);\\n        }\\n    }\\n    exports.stat = stat;\\n    /**\\n     * Display a graph of a numeric value over time\\n     *\\n     * @param name key for this stat (e.g. \\\"fps\\\")\\n     * @param value any numeric value\\n     * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\\n     */\\n    function statGraph(name, value, sampleRate) {\\n        if (sampleRate === void 0) { sampleRate = 1; }\\n        if (typeof window['__shadeup_statGraph'] === 'function') {\\n            window['__shadeup_statGraph'](name, value);\\n        }\\n    }\\n    exports.statGraph = statGraph;\\n    function infer(fn) {\\n        return fn;\\n    }\\n    // export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\\n    // export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\\n    // export function draw(\\n    // \\tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\\n    // \\tsecond?: shader<ShaderInput, ShaderOutput>,\\n    // \\tthird?: shader<ShaderInput, ShaderOutput>\\n    // ) {\\n    // \\tif ('vertices' in first && second && third) {\\n    // \\t\\t__shadeup_dispatch_draw_geometry(first, second, third);\\n    // \\t} else if (first && !second && !third) {\\n    // \\t\\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\\n    // \\t}\\n    // }\\n    // draw(makeShader('', (a, b) => {}));\\n    // drawAlt(\\n    // \\tmakeShader(\\n    // \\t\\t'000004808000091289258019303699031390005438610',\\n    // \\t\\t/**@shadeup=shader*/ (__in, __out) => {\\n    // \\t\\t\\t__out.color;\\n    // \\t\\t}\\n    // \\t)\\n    // );\\n    // /**\\n    //  *\\n    //  */\\n    function compute(workgroups, computeShader) {\\n        window.__shadeup_dispatch_compute(workgroups, computeShader);\\n    }\\n    exports.compute = compute;\\n    // function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\\n    // type x<T> = { x: T };\\n    // function makeTex<T>(a: T): x<T> {\\n    // \\treturn { x: a };\\n    // }\\n    // draw({\\n    // \\tvertex: shader('abc', (__in, __out) => {}),\\n    // \\tattachments: [\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 }),\\n    // \\t\\tmakeTex({ abc: 123 })\\n    // \\t],\\n    // \\tmesh: new Mesh(),\\n    // \\tfragment: shader('abc', (__in, __out) => {\\n    // \\t\\t//__out.attachment0\\n    // \\t})\\n    // });\\n    function globalVarInit(fileName, varName, initFn, getterFn) {\\n        if (!window['shadeup_globals']) {\\n            window['shadeup_globals'] = {};\\n        }\\n        if (!window['shadeup_globals'][fileName]) {\\n            window['shadeup_globals'][fileName] = {};\\n        }\\n        // Disable caching for now\\n        var cache = false;\\n        if (!window['shadeup_globals'][fileName][varName] || !cache) {\\n            window['shadeup_globals'][fileName][varName] = initFn();\\n        }\\n        window['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\\n        return window['shadeup_globals'][fileName][varName];\\n    }\\n    exports.globalVarInit = globalVarInit;\\n    function globalVarGet(fileName, varName) {\\n        if (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\\n            return window[varName];\\n        }\\n        return window['shadeup_globals'][fileName]['$getter_' + varName]();\\n    }\\n    exports.globalVarGet = globalVarGet;\\n    function hashableTypeToString(k) {\\n        if (typeof k == 'number') {\\n            return k.toString();\\n        }\\n        else if (typeof k == 'object') {\\n            if (Array.isArray(k)) {\\n                return k.map(hashableTypeToString).join(',');\\n            }\\n            else {\\n                return k.toString();\\n            }\\n        }\\n        else {\\n            return k.toString();\\n        }\\n    }\\n    exports.hashableTypeToString = hashableTypeToString;\\n    Array.prototype.len = function () {\\n        return this.length;\\n    };\\n    Array.prototype.last = function () {\\n        return this[this.length - 1];\\n    };\\n    Array.prototype.first = function () {\\n        return this[0];\\n    };\\n    Array.prototype.append = function (items) {\\n        for (var i = 0; i < items.length; i++) {\\n            this.push(items[i]);\\n        }\\n    };\\n    Array.prototype.remove = function (index) {\\n        this.splice(index, 1);\\n    };\\n    Array.prototype.__index = function (index) {\\n        return this[index];\\n    };\\n    Array.prototype.__index_assign = function (index, value) {\\n        this[index] = value;\\n    };\\n    Array.prototype.__index_assign_op = function (op_fn, index, value) {\\n        this[index] = op_fn(this[index], value);\\n    };\\n    /** @shadeup=tag(async) */\\n    function sleep(seconds) {\\n        return __awaiter(this, void 0, void 0, function () {\\n            return __generator(this, function (_a) {\\n                return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })];\\n            });\\n        });\\n    }\\n    exports.sleep = sleep;\\n    function array(count, initializer) {\\n        if (initializer === void 0) { initializer = null; }\\n        var arr = new Array(count);\\n        if (initializer) {\\n            for (var i = 0; i < count; i++) {\\n                arr[i] = initializer;\\n            }\\n        }\\n        return arr;\\n    }\\n    exports.array = array;\\n    var map = /** @class */ (function () {\\n        function map(entries) {\\n            this.pairs = new Map();\\n            if (entries)\\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\\n                    var e = entries_1[_i];\\n                    this.__index_assign(e[0], e[1]);\\n                }\\n        }\\n        map.prototype.__index = function (key) {\\n            if (!this.pairs.has(hashableTypeToString(key))) {\\n                throw new Error('Key not found: ' + hashableTypeToString(key));\\n            }\\n            return this.pairs.get(hashableTypeToString(key))[1];\\n        };\\n        map.prototype.__index_assign = function (key, value) {\\n            this.pairs.set(hashableTypeToString(key), [key, value]);\\n        };\\n        map.prototype.__index_assign_op = function (op_fn, key, value) {\\n            this.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\\n        };\\n        map.prototype.delete = function (key) {\\n            this.pairs.delete(hashableTypeToString(key));\\n        };\\n        map.prototype.has = function (key) {\\n            return this.pairs.has(hashableTypeToString(key));\\n        };\\n        map.prototype.keys = function () {\\n            return Array.from(this.pairs.values()).map(function (k) { return k[0]; });\\n        };\\n        map.prototype.values = function () {\\n            return Array.from(this.pairs.values()).map(function (k) { return k[1]; });\\n        };\\n        map.new = function (entries) {\\n            return new map(entries);\\n        };\\n        map.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_i_iistd_all_ts_7982_map\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"pairs\\\\\\\",null]]}\\\");\\n        };\\n        return map;\\n    }());\\n    exports.map = map;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_i_iistd_all_ts_7982_map\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"pairs\\\\\\\",null]]}\\\"), map)\\n    function __makeMap(initial) {\\n        return new map(Object.entries(initial));\\n    }\\n    exports.__makeMap = __makeMap;\\n    function __deepClone(value) {\\n        if (typeof value == 'object') {\\n            if (Array.isArray(value)) {\\n                var res = new Array(value.length);\\n                for (var i = 0; i < value.length; i++) {\\n                    res[i] = __deepClone(value[i]);\\n                }\\n                return res;\\n            }\\n            else {\\n                if (value && typeof value.clone == 'function') {\\n                    return value.clone();\\n                }\\n                else {\\n                    return value;\\n                }\\n            }\\n        }\\n        else {\\n            return value;\\n        }\\n    }\\n    exports.__deepClone = __deepClone;\\n    var time = /** @class */ (function () {\\n        function time() {\\n        }\\n        /** Saves the current time with a key of name */\\n        time.start = function (name) {\\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_start');\\n        };\\n        /** Returns the difference in milliseconds between a start with the same key */\\n        time.stop = function (name) {\\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_end');\\n            var res = performance.measure((name !== null && name !== void 0 ? name : '_default') + '_diff', (name !== null && name !== void 0 ? name : '_default') + '_start', (name !== null && name !== void 0 ? name : '_default') + '_end');\\n            return res.duration;\\n        };\\n        /**\\n         * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\\n         *\\n         * This uses performance.now() under the hood:\\n         * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\\n         */\\n        time.now = function () {\\n            return performance.now();\\n        };\\n        time.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_i_iistd_all_ts_10215_time\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return time;\\n    }());\\n    exports.time = time;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_std_i_iistd_all_ts_10215_time\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), time)\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/std.ts\":{\"outputFiles\":[{\"name\":\"/std.js\",\"writeByteOrderMark\":false,\"text\":\"var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\\\"get\\\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\\n    for (var p in m) if (p !== \\\"default\\\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"/_std/ui\\\", \\\"/_std/mesh\\\", \\\"/_std/sdf\\\", \\\"/_std/geo\\\", \\\"/_std/native\\\"], function (require, exports, ui_1, mesh_1, sdf_1, geo_1, native_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.geo = exports.sdf = exports.Mesh = exports.mesh = exports.ui = void 0;\\n    Object.defineProperty(exports, \\\"ui\\\", { enumerable: true, get: function () { return ui_1.ui; } });\\n    Object.defineProperty(exports, \\\"mesh\\\", { enumerable: true, get: function () { return mesh_1.mesh; } });\\n    Object.defineProperty(exports, \\\"Mesh\\\", { enumerable: true, get: function () { return mesh_1.Mesh; } });\\n    Object.defineProperty(exports, \\\"sdf\\\", { enumerable: true, get: function () { return sdf_1.sdf; } });\\n    Object.defineProperty(exports, \\\"geo\\\", { enumerable: true, get: function () { return geo_1.geo; } });\\n    __exportStar(native_1, exports);\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/ui.ts\":{\"outputFiles\":[{\"name\":\"/_std/ui.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.ui = void 0;\\n    var ui;\\n    (function (ui) {\\n        function puck(position) {\\n            return window._SHADEUP_UI_PUCK(position);\\n        }\\n        ui.puck = puck;\\n        function draggable(position, radius) {\\n            if (radius === void 0) { radius = 10; }\\n            return window._SHADEUP_UI_PUCK(position, radius, true);\\n        }\\n        ui.draggable = draggable;\\n        function textbox(value) {\\n            return window._SHADEUP_UI_CONTROL('textbox', value);\\n        }\\n        ui.textbox = textbox;\\n        function slider(value, min, max) {\\n            return window._SHADEUP_UI_SLIDER(value, { min: min, max: max });\\n        }\\n        ui.slider = slider;\\n        function label(text) {\\n            return window._SHADEUP_UI_CONTROL('label', text);\\n        }\\n        ui.label = label;\\n        function checkbox(value) {\\n            return window._SHADEUP_UI_CONTROL('checkbox', value);\\n        }\\n        ui.checkbox = checkbox;\\n        function combo(value, options) {\\n            return window._SHADEUP_UI_CONTROL('combo', value, { options: options });\\n        }\\n        ui.combo = combo;\\n        function group(text) {\\n            return window._SHADEUP_UI_CONTROL('group', text);\\n        }\\n        ui.group = group;\\n        function button(text) {\\n            return window._SHADEUP_UI_CONTROL('button', false, { text: text });\\n        }\\n        ui.button = button;\\n        function pop() {\\n            window._SHADEUP_UI_CONTROL('pop');\\n        }\\n        ui.pop = pop;\\n    })(ui = exports.ui || (exports.ui = {}));\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/native.ts\":{\"outputFiles\":[{\"name\":\"/_std/native.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\", \\\"/_std/common\\\"], function (require, exports, common_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.KeyboardInputState = exports.MouseInputState = exports.FrameContext = exports.shadeupMakeTextureFromUrl = void 0;\\n    function shadeupMakeTextureFromUrl(url) {\\n        return window['shadeupMakeTextureFromUrlNative'](url);\\n    }\\n    exports.shadeupMakeTextureFromUrl = shadeupMakeTextureFromUrl;\\n    var FrameContext = /** @class */ (function () {\\n        function FrameContext() {\\n            /** Mouse/touch screen input state for this frame */\\n            this.mouse = new MouseInputState();\\n            /** Keyboard input state for this frame */\\n            this.keyboard = new KeyboardInputState();\\n            /** Controllable camera (Hold right click and use WASD to move) */\\n            this.camera = new common_1.Camera();\\n            this.camera2d = new common_1.Camera2d();\\n        }\\n        FrameContext.prototype.configureCamera = function (options) { };\\n        /**\\n         * Use external values from the host JavaScript environment.\\n         */\\n        FrameContext.prototype.input = function (key, defaultValue) {\\n            return defaultValue;\\n        };\\n        /**\\n         * Send values to the host JavaScript environment.\\n         */\\n        FrameContext.prototype.output = function (key, value) { };\\n        FrameContext.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_313_FrameContext\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"deltaTime\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"time\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"screenSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frame\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"mouse\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_1590_MouseInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"screen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"button\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"clicked\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"dragging\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"wheel\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"velocity\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"focused\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}]]}],[\\\\\\\"keyboard\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_3174_KeyboardInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"backspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"tab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"enter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"capsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"escape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"space\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"home\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"printScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"insert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"delete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"contextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"scrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"semicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"equal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"comma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"minus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"period\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"slash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"quote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedTab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedCapsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEscape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSpace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedHome\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPrintScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedInsert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDelete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedContextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedScrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSemicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEqual\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedComma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMinus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPeriod\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSlash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedQuote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowVector\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}]]}],[\\\\\\\"camera\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_10663_Camera\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"rotation\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"width\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"height\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"fov\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"near\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"far\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}],[\\\\\\\"camera2d\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_9656_Camera2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"zoom\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}]]}\\\");\\n        };\\n        return FrameContext;\\n    }());\\n    exports.FrameContext = FrameContext;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_313_FrameContext\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"deltaTime\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"time\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"screenSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frame\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"mouse\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_1590_MouseInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"screen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"button\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"clicked\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"dragging\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"wheel\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"velocity\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"focused\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}]]}],[\\\\\\\"keyboard\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_3174_KeyboardInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"backspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"tab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"enter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"capsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"escape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"space\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"home\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"printScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"insert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"delete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"contextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"scrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"semicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"equal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"comma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"minus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"period\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"slash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"quote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedTab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedCapsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEscape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSpace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedHome\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPrintScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedInsert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDelete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedContextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedScrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSemicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEqual\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedComma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMinus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPeriod\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSlash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedQuote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowVector\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}]]}],[\\\\\\\"camera\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_10663_Camera\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"rotation\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"width\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"height\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"fov\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"near\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"far\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}],[\\\\\\\"camera2d\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_9656_Camera2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"zoom\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}]]}\\\"), FrameContext)\\n    var MouseInputState = /** @class */ (function () {\\n        function MouseInputState() {\\n            /** , Some(\\\"Mouse button down state for buttons 0-3 (left, middle, right */\\n            this.button = [false, false, false];\\n            /** Mouse button pressed state for buttons 0-3 (left, middle, right) */\\n            this.clicked = [false, false, false];\\n        }\\n        MouseInputState.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_1590_MouseInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"screen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"button\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"clicked\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"dragging\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"wheel\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"velocity\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"focused\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}]]}\\\");\\n        };\\n        return MouseInputState;\\n    }());\\n    exports.MouseInputState = MouseInputState;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_1590_MouseInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"screen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"startUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaUv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"deltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"frameDeltaScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"button\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"clicked\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"},\\\\\\\"staticSize\\\\\\\":3}],[\\\\\\\"dragging\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"wheel\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"velocity\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"focused\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}]]}\\\"), MouseInputState)\\n    var KeyboardInputState = /** @class */ (function () {\\n        function KeyboardInputState() {\\n        }\\n        KeyboardInputState.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_3174_KeyboardInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"backspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"tab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"enter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"capsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"escape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"space\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"home\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"printScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"insert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"delete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"contextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"scrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"semicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"equal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"comma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"minus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"period\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"slash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"quote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedTab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedCapsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEscape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSpace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedHome\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPrintScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedInsert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDelete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedContextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedScrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSemicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEqual\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedComma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMinus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPeriod\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSlash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedQuote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowVector\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}]]}\\\");\\n        };\\n        return KeyboardInputState;\\n    }());\\n    exports.KeyboardInputState = KeyboardInputState;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_native_ts_3174_KeyboardInputState\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"backspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"tab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"enter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"shiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"controlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"altRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"capsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"escape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"space\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"home\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"printScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"insert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"delete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"digit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"keyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"metaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"contextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"f12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"numLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"scrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"semicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"equal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"comma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"minus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"period\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"slash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"backslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"bracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"quote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackspace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedTab\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnter\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedShiftRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedControlRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedAltRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPause\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedCapsLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEscape\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSpace\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPageDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedHome\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowUp\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedArrowDown\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPrintScreen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedInsert\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDelete\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedDigit9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyA\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyB\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyC\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyD\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyE\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyF\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyG\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyH\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyI\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyJ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyK\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyL\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyM\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyN\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyO\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyP\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyQ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyR\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyS\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyT\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyU\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyV\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyW\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyX\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyY\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedKeyZ\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMetaRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedContextMenu\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad0\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpad9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadMultiply\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadAdd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadSubtract\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDecimal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumpadDivide\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF1\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF2\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF3\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF4\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF5\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF6\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF7\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF8\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF9\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF10\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF11\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedF12\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedNumLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedScrollLock\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSemicolon\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedEqual\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedComma\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedMinus\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedPeriod\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedSlash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackquote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketLeft\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBackslash\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedBracketRight\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pressedQuote\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"arrowVector\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}]]}\\\"), KeyboardInputState)\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/paint.ts\":{\"outputFiles\":[{\"name\":\"/_std/paint.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.PaintingContext = void 0;\\n    var PaintingContext = /** @class */ (function () {\\n        function PaintingContext(canvas, gl) {\\n            var _this = this;\\n            this.markDirtyCallback = function () { };\\n            this.__ctx = null;\\n            this.__gl = null;\\n            this.__offscreen_canvas = null;\\n            this.__program = null;\\n            this.stagedChanges = false;\\n            this.dirty = false;\\n            this.fastPoints = false;\\n            this.fastPointsBuffer = null;\\n            this.__currentColor = null;\\n            this.pointsCounter = 0;\\n            this.cacheSize = [0, 0];\\n            if (!gl)\\n                return;\\n            this.__gl = gl;\\n            this.__canvas = canvas;\\n            this.__offscreen_canvas = document.createElement('canvas');\\n            this.__offscreen_canvas.width = canvas.width;\\n            this.__offscreen_canvas.height = canvas.height;\\n            // document.body.appendChild(this.__offscreen_canvas);\\n            this.__ctx = this.__offscreen_canvas.getContext('2d', {\\n                willReadFrequently: true\\n            });\\n            this.__offscreen_canvas.style.position = 'absolute';\\n            this.__offscreen_canvas.style.zIndex = '10';\\n            // document.body.appendChild(this.__offscreen_canvas);\\n            this.__setColor([0, 0, 0, 1]);\\n            gl.addEventListener('context', function (toContext) {\\n                if (toContext == 'draw') {\\n                    _this.flush();\\n                }\\n            });\\n            gl.addEventListener('flush', function () {\\n                _this.flush();\\n            });\\n        }\\n        PaintingContext.prototype.flush = function () {\\n            if (!this.__gl)\\n                return;\\n            if (!this.__canvas)\\n                return;\\n            if (!this.__offscreen_canvas)\\n                return;\\n            if (!this.stagedChanges)\\n                return;\\n            if (this.fastPoints)\\n                this.flushPoints();\\n            this.__gl.drawImage(this.__offscreen_canvas);\\n            this.stagedChanges = false;\\n            if (this.__offscreen_canvas.width != this.__canvas.width ||\\n                this.__offscreen_canvas.height != this.__canvas.height) {\\n                this.__offscreen_canvas.width = this.__canvas.width;\\n                this.__offscreen_canvas.height = this.__canvas.height;\\n            }\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.__beforeDraw = function () {\\n            var _a;\\n            if (!this.__offscreen_canvas)\\n                return;\\n            if (!this.__ctx)\\n                return;\\n            if (!this.__canvas)\\n                return;\\n            this.markDirtyCallback();\\n            (_a = this.__gl) === null || _a === void 0 ? void 0 : _a.activatePaintContext();\\n            if (!this.stagedChanges) {\\n                this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\\n                this.__ctx.drawImage(this.__canvas, 0, 0);\\n                var color = this.__currentColor;\\n                this.__ctx.fillStyle = \\\"rgba(\\\".concat(color[0] * 255, \\\", \\\").concat(color[1] * 255, \\\", \\\").concat(color[2] * 255, \\\", \\\").concat(color[3], \\\")\\\");\\n                this.__ctx.strokeStyle = \\\"rgba(\\\".concat(color[0] * 255, \\\", \\\").concat(color[1] * 255, \\\", \\\").concat(color[2] * 255, \\\", \\\").concat(color[3], \\\")\\\");\\n            }\\n        };\\n        PaintingContext.prototype.__afterDraw = function () {\\n            var gl = this.__gl;\\n            this.dirty = true;\\n            this.stagedChanges = true;\\n        };\\n        PaintingContext.prototype.__setColor = function (color) {\\n            if (!this.__ctx || !color)\\n                return;\\n            if (this.__currentColor &&\\n                this.__currentColor[0] == color[0] &&\\n                this.__currentColor[1] == color[1] &&\\n                this.__currentColor[2] == color[2] &&\\n                this.__currentColor[3] == color[3])\\n                return;\\n            this.__ctx.strokeStyle = \\\"rgba(\\\".concat(color[0] * 255, \\\", \\\").concat(color[1] * 255, \\\", \\\").concat(color[2] * 255, \\\", \\\").concat(color[3], \\\")\\\");\\n            this.__ctx.fillStyle = \\\"rgba(\\\".concat(color[0] * 255, \\\", \\\").concat(color[1] * 255, \\\", \\\").concat(color[2] * 255, \\\", \\\").concat(color[3], \\\")\\\");\\n            this.__currentColor = [color[0], color[1], color[2], color[3]];\\n        };\\n        PaintingContext.prototype.fillRect = function (pos, size, color) {\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.fillCircle = function (pos, radius, color) {\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\\n            this.__ctx.fill();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.fillArc = function (pos, radius, startAngle, endAngle, color) {\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\\n            this.__ctx.fill();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.line = function (pos1, pos2, color, width) {\\n            if (width === void 0) { width = 1; }\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.__ctx.moveTo(pos1[0], pos1[1]);\\n            this.__ctx.lineTo(pos2[0], pos2[1]);\\n            this.__ctx.lineWidth = width;\\n            this.__ctx.stroke();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.circle = function (pos, radius, color, width) {\\n            if (width === void 0) { width = 1; }\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\\n            this.__ctx.lineWidth = width;\\n            this.__ctx.stroke();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.arc = function (pos, radius, startAngle, endAngle, color, width) {\\n            if (width === void 0) { width = 1; }\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\\n            this.__ctx.lineWidth = width;\\n            this.__ctx.stroke();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.text = function (pos, text, color) {\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.fillText(text, pos[0], pos[1]);\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.startPath = function (pos) {\\n            if (!this.__ctx)\\n                return;\\n            this.flushPoints();\\n            this.__beforeDraw();\\n            this.__ctx.beginPath();\\n            this.__ctx.moveTo(pos[0], pos[1]);\\n        };\\n        PaintingContext.prototype.lineTo = function (pos) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.lineTo(pos[0], pos[1]);\\n        };\\n        PaintingContext.prototype.strokePath = function (color, width) {\\n            if (width === void 0) { width = 1; }\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.lineWidth = width;\\n            this.__setColor(color);\\n            this.__ctx.stroke();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.fillPath = function (color) {\\n            if (!this.__ctx)\\n                return;\\n            this.__setColor(color);\\n            this.__ctx.fill();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.setStrokeWidth = function (width) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.lineWidth = width;\\n        };\\n        PaintingContext.prototype.setFont = function (font) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.font = font;\\n        };\\n        PaintingContext.prototype.setFontSize = function (size) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.font = \\\"\\\".concat(size, \\\"px \\\").concat(this.__ctx.font.split(' ').slice(1).join(' '));\\n        };\\n        PaintingContext.prototype.setTextAlign = function (align) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.textAlign = align;\\n        };\\n        PaintingContext.prototype.setTextBaseline = function (baseline) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.textBaseline = baseline;\\n        };\\n        PaintingContext.prototype.setLineCap = function (cap) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.lineCap = cap;\\n        };\\n        PaintingContext.prototype.setLineJoin = function (join) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.lineJoin = join;\\n        };\\n        PaintingContext.prototype.setMiterLimit = function (limit) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.miterLimit = limit;\\n        };\\n        PaintingContext.prototype.setShadowColor = function (color) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.shadowColor = \\\"rgba(\\\".concat(color[0] * 255, \\\", \\\").concat(color[1] * 255, \\\", \\\").concat(color[2] * 255, \\\", \\\").concat(color[3], \\\")\\\");\\n        };\\n        PaintingContext.prototype.setShadowBlur = function (blur) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.shadowBlur = blur;\\n        };\\n        PaintingContext.prototype.setShadowOffset = function (offset) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.shadowOffsetX = offset[0];\\n            this.__ctx.shadowOffsetY = offset[1];\\n        };\\n        PaintingContext.prototype.setGlobalAlpha = function (alpha) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.globalAlpha = alpha;\\n        };\\n        PaintingContext.prototype.setGlobalCompositeOperation = function (op) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.globalCompositeOperation = op;\\n        };\\n        PaintingContext.prototype.setImageSmoothingEnabled = function (enabled) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.imageSmoothingEnabled = enabled;\\n        };\\n        PaintingContext.prototype.setImageSmoothingQuality = function (quality) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.imageSmoothingQuality = quality;\\n        };\\n        PaintingContext.prototype.setLineDash = function (dash) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.setLineDash(dash);\\n        };\\n        PaintingContext.prototype.setLineDashOffset = function (offset) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.lineDashOffset = offset;\\n        };\\n        PaintingContext.prototype.setTransform = function (a, b, c, d, e, f) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.setTransform(a, b, c, d, e, f);\\n        };\\n        PaintingContext.prototype.resetTransform = function () {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.resetTransform();\\n        };\\n        PaintingContext.prototype.scale = function (v) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.scale(v[0], v[1]);\\n        };\\n        PaintingContext.prototype.rotate = function (angle) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.rotate(angle);\\n        };\\n        PaintingContext.prototype.translate = function (v) {\\n            if (!this.__ctx)\\n                return;\\n            this.__ctx.translate(v[0], v[1]);\\n        };\\n        PaintingContext.prototype.flushPoints = function () {\\n            if (!this.__ctx)\\n                return;\\n            if (!this.fastPoints)\\n                return;\\n            if (!this.fastPointsBuffer)\\n                return;\\n            this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\\n            this.fastPoints = false;\\n            this.fastPointsBuffer = null;\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.point = function (pos, color) {\\n            if (!this.__ctx)\\n                return;\\n            this.pointsCounter++;\\n            this.__beforeDraw();\\n            if (this.pointsCounter > 10) {\\n                if (!this.fastPoints) {\\n                    this.fastPoints = true;\\n                    this.cacheSize = [this.__offscreen_canvas.width, this.__offscreen_canvas.height];\\n                    this.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\\n                }\\n                if (!this.fastPointsBuffer)\\n                    return;\\n                var x = Math.floor(pos[0]);\\n                var y = Math.floor(pos[1]);\\n                var index = (y * this.cacheSize[0] + x) * 4;\\n                if (!color) {\\n                    color = this.__currentColor;\\n                }\\n                var oldColorx = this.fastPointsBuffer.data[index] / 255;\\n                var oldColory = this.fastPointsBuffer.data[index + 1] / 255;\\n                var oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\\n                var oldColora = this.fastPointsBuffer.data[index + 3] / 255;\\n                this.fastPointsBuffer.data[index] =\\n                    color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\\n                this.fastPointsBuffer.data[index + 1] =\\n                    color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\\n                this.fastPointsBuffer.data[index + 2] =\\n                    color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\\n                this.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\\n            }\\n            else {\\n                this.__setColor(color);\\n                this.__ctx.fillRect(pos[0], pos[1], 1, 1);\\n            }\\n            this.__afterDraw();\\n        };\\n        PaintingContext.prototype.vector = function (pos, dir, color, width) {\\n            if (color === void 0) { color = [0.9803921568627451, 0.8, 0.08235294117647059, 1]; }\\n            if (width === void 0) { width = 4; }\\n            if (!this.__ctx || (dir[0] == 0 && dir[1] == 0))\\n                return;\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.setStrokeWidth(width);\\n            this.__ctx.moveTo(pos[0], pos[1]);\\n            this.__ctx.lineCap = 'round';\\n            this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\\n            this.__ctx.stroke();\\n            this.__ctx.beginPath();\\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\\n            // Arrows\\n            var arrowSize = 20;\\n            var arrowAngle = Math.PI / 5;\\n            var dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\\n            var arrow1 = [\\n                Math.cos(dirAngle + arrowAngle) * arrowSize,\\n                Math.sin(dirAngle + arrowAngle) * arrowSize\\n            ];\\n            var arrow2 = [\\n                Math.cos(dirAngle - arrowAngle) * arrowSize,\\n                Math.sin(dirAngle - arrowAngle) * arrowSize\\n            ];\\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\\n            this.__ctx.stroke();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype.grid = function (center, count, gap, color, width) {\\n            if (color === void 0) { color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1]; }\\n            if (width === void 0) { width = 2; }\\n            if (!this.__ctx)\\n                return;\\n            this.__beforeDraw();\\n            this.__setColor(color);\\n            this.__ctx.beginPath();\\n            this.setStrokeWidth(width);\\n            var start = [\\n                center[0] - (count[0] / 2) * gap[0],\\n                center[1] - (count[1] / 2) * gap[1]\\n            ];\\n            for (var i = 0; i <= count[0]; i++) {\\n                this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\\n                this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\\n            }\\n            for (var i = 0; i <= count[1]; i++) {\\n                this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\\n                this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\\n            }\\n            this.__ctx.stroke();\\n            this.__afterDraw();\\n            this.pointsCounter = 0;\\n        };\\n        PaintingContext.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"markDirtyCallback\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"__ctx\\\\\\\",null],[\\\\\\\"__gl\\\\\\\",null],[\\\\\\\"__offscreen_canvas\\\\\\\",null],[\\\\\\\"__program\\\\\\\",null],[\\\\\\\"stagedChanges\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"dirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPoints\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPointsBuffer\\\\\\\",null],[\\\\\\\"__currentColor\\\\\\\",null],[\\\\\\\"pointsCounter\\\\\\\",null],[\\\\\\\"cacheSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"staticSize\\\\\\\":2}]]}\\\");\\n        };\\n        return PaintingContext;\\n    }());\\n    exports.PaintingContext = PaintingContext;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"markDirtyCallback\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"__ctx\\\\\\\",null],[\\\\\\\"__gl\\\\\\\",null],[\\\\\\\"__offscreen_canvas\\\\\\\",null],[\\\\\\\"__program\\\\\\\",null],[\\\\\\\"stagedChanges\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"dirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPoints\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPointsBuffer\\\\\\\",null],[\\\\\\\"__currentColor\\\\\\\",null],[\\\\\\\"pointsCounter\\\\\\\",null],[\\\\\\\"cacheSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"staticSize\\\\\\\":2}]]}\\\"), PaintingContext)\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/buffer.ts\":{\"outputFiles\":[{\"name\":\"/_std/buffer.js\",\"writeByteOrderMark\":false,\"text\":\"var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n    return new (P || (P = Promise))(function (resolve, reject) {\\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n        function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\\n    });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n    return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n    function verb(n) { return function (v) { return step([n, v]); }; }\\n    function step(op) {\\n        if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\\n            if (f = 1, y && (t = op[0] & 2 ? y[\\\"return\\\"] : op[0] ? y[\\\"throw\\\"] || ((t = y[\\\"return\\\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\\n            if (y = 0, t) op = [op[0] & 2, t.value];\\n            switch (op[0]) {\\n                case 0: case 1: t = op; break;\\n                case 4: _.label++; return { value: op[1], done: false };\\n                case 5: _.label++; y = op[1]; op = [0]; continue;\\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n                default:\\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n                    if (t[2]) _.ops.pop();\\n                    _.trys.pop(); continue;\\n            }\\n            op = body.call(thisArg, _);\\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n    }\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"/std_math\\\"], function (require, exports, std_math_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.buffer = exports.buffer_internal = void 0;\\n    var buffer_internal = /** @class */ (function () {\\n        function buffer_internal(size, typeName, structure) {\\n            var _this = this;\\n            this.__opaque_buffer = true;\\n            this.structArray = null;\\n            this.floatArray = null;\\n            this.intArray = null;\\n            this.uintArray = null;\\n            this.arrayBuffer = null;\\n            this.vectorSize = 0;\\n            this.platformPayload = null;\\n            this.adapter = null;\\n            this.dirty = false;\\n            this.pendingWrites = 0;\\n            this.cpuReadDirty = false;\\n            this.cpuWriteDirty = false;\\n            this.elementCount = 0;\\n            this.elementBytes = 0;\\n            this.structured = false;\\n            this.watchMutation = false;\\n            this.symbol = Symbol();\\n            this.adapter = window.shadeupGetGraphicsAdapter();\\n            this.typeName = typeName;\\n            if (structure) {\\n                if (structure.name && !structure.name.startsWith('atomic')) {\\n                    this.typeName = structure.name;\\n                }\\n            }\\n            this.elementCount = size;\\n            this.elementBytes = 4;\\n            if (typeName == 'float4' ||\\n                typeName == 'float3' ||\\n                typeName == 'float2' ||\\n                typeName == 'float') {\\n                this.vectorSize = 1;\\n                this.fastIndex = function (index) {\\n                    return _this.floatArray[index];\\n                };\\n                this.fastIndexAssign = function (index, value) {\\n                    _this.floatArray[index] = value;\\n                };\\n                if (typeName == 'float4') {\\n                    this.vectorSize = 4;\\n                    this.fastIndex = function (index) {\\n                        return (0, std_math_1.float4)(_this.floatArray[index * 4], _this.floatArray[index * 4 + 1], _this.floatArray[index * 4 + 2], _this.floatArray[index * 4 + 3]);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.floatArray[index * 4] = value[0];\\n                        _this.floatArray[index * 4 + 1] = value[1];\\n                        _this.floatArray[index * 4 + 2] = value[2];\\n                        _this.floatArray[index * 4 + 3] = value[3];\\n                    };\\n                }\\n                if (typeName == 'float3') {\\n                    this.vectorSize = 3;\\n                    this.fastIndex = function (index) {\\n                        return (0, std_math_1.float3)(_this.floatArray[index * 3], _this.floatArray[index * 3 + 1], _this.floatArray[index * 3 + 2]);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.floatArray[index * 3] = value[0];\\n                        _this.floatArray[index * 3 + 1] = value[1];\\n                        _this.floatArray[index * 3 + 2] = value[2];\\n                    };\\n                }\\n                if (typeName == 'float2') {\\n                    this.vectorSize = 2;\\n                    this.fastIndex = function (index) {\\n                        return (0, std_math_1.float2)(_this.floatArray[index * 2], _this.floatArray[index * 2 + 1]);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.floatArray[index * 2] = value[0];\\n                        _this.floatArray[index * 2 + 1] = value[1];\\n                    };\\n                }\\n                this.floatArray = new Float32Array(size * this.vectorSize);\\n                this.arrayBuffer = this.floatArray.buffer;\\n            }\\n            else if (typeName == 'int4' ||\\n                typeName == 'int3' ||\\n                typeName == 'int2' ||\\n                typeName == 'int') {\\n                this.vectorSize = 1;\\n                this.fastIndex = function (index) {\\n                    return _this.intArray[index];\\n                };\\n                this.fastIndexAssign = function (index, value) {\\n                    _this.intArray[index] = value;\\n                };\\n                if (typeName == 'int4') {\\n                    this.vectorSize = 4;\\n                    this.fastIndex = function (index) {\\n                        return __.intifyVector((0, std_math_1.int4)(_this.intArray[index * 4], _this.intArray[index * 4 + 1], _this.intArray[index * 4 + 2], _this.intArray[index * 4 + 3]));\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.intArray[index * 4] = value[0];\\n                        _this.intArray[index * 4 + 1] = value[1];\\n                        _this.intArray[index * 4 + 2] = value[2];\\n                        _this.intArray[index * 4 + 3] = value[3];\\n                    };\\n                }\\n                if (typeName == 'int3') {\\n                    this.vectorSize = 3;\\n                    this.fastIndex = function (index) {\\n                        return __.intifyVector((0, std_math_1.int3)(_this.intArray[index * 3], _this.intArray[index * 3 + 1], _this.intArray[index * 3 + 2]));\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.intArray[index * 3] = value[0];\\n                        _this.intArray[index * 3 + 1] = value[1];\\n                        _this.intArray[index * 3 + 2] = value[2];\\n                    };\\n                }\\n                if (typeName == 'int2') {\\n                    this.vectorSize = 2;\\n                    this.fastIndex = function (index) {\\n                        return __.intifyVector((0, std_math_1.int2)(_this.intArray[index * 2], _this.intArray[index * 2 + 1]));\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.intArray[index * 2] = value[0];\\n                        _this.intArray[index * 2 + 1] = value[1];\\n                    };\\n                }\\n                this.intArray = new Int32Array(size * this.vectorSize);\\n                this.arrayBuffer = this.intArray.buffer;\\n            }\\n            else if (typeName == 'uint4' ||\\n                typeName == 'uint3' ||\\n                typeName == 'uint2' ||\\n                typeName == 'uint') {\\n                this.vectorSize = 1;\\n                this.fastIndex = function (index) {\\n                    return _this.uintArray[index];\\n                };\\n                this.fastIndexAssign = function (index, value) {\\n                    _this.uintArray[index] = value;\\n                };\\n                if (typeName == 'uint4') {\\n                    this.vectorSize = 4;\\n                    this.fastIndex = function (index) {\\n                        return (0, std_math_1.uint4)(_this.uintArray[index * 4], _this.uintArray[index * 4 + 1], _this.uintArray[index * 4 + 2], _this.uintArray[index * 4 + 3]);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.uintArray[index * 4] = value[0];\\n                        _this.uintArray[index * 4 + 1] = value[1];\\n                        _this.uintArray[index * 4 + 2] = value[2];\\n                        _this.uintArray[index * 4 + 3] = value[3];\\n                    };\\n                }\\n                if (typeName == 'uint3') {\\n                    this.vectorSize = 3;\\n                    this.fastIndex = function (index) {\\n                        return (0, std_math_1.uint3)(_this.uintArray[index * 3], _this.uintArray[index * 3 + 1], _this.uintArray[index * 3 + 2]);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.uintArray[index * 3] = value[0];\\n                        _this.uintArray[index * 3 + 1] = value[1];\\n                        _this.uintArray[index * 3 + 2] = value[2];\\n                    };\\n                }\\n                if (typeName == 'uint2') {\\n                    this.vectorSize = 2;\\n                    this.fastIndex = function (index) {\\n                        return (0, std_math_1.uint2)(_this.uintArray[index * 2], _this.uintArray[index * 2 + 1]);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.uintArray[index * 2] = value[0];\\n                        _this.uintArray[index * 2 + 1] = value[1];\\n                    };\\n                }\\n                this.uintArray = new Uint32Array(size * this.vectorSize);\\n                this.arrayBuffer = this.uintArray.buffer;\\n            }\\n            else {\\n                this.structured = true;\\n                if (typeName.startsWith('atomic<')) {\\n                    // this.structArray = new Array<T>(size);\\n                    this.arrayBuffer = new ArrayBuffer(size * 4);\\n                    this.watchMutation = true;\\n                    this.vectorSize = 1;\\n                    this.elementBytes = 4;\\n                    this.elementCount = size;\\n                    for (var i = 0; i < size; i++) {\\n                        // this.structArray[i] = atomic(0) as T;\\n                    }\\n                    if (typeName == 'atomic<uint>') {\\n                        this.uintArray = new Uint32Array(this.arrayBuffer);\\n                        this.fastIndex = function (index) {\\n                            return (0, std_math_1.atomic)(_this.uintArray[index]);\\n                        };\\n                        this.fastIndexAssign = function (index, value) {\\n                            _this.uintArray[index] = value.__value;\\n                        };\\n                    }\\n                    else {\\n                        this.intArray = new Int32Array(this.arrayBuffer);\\n                        this.fastIndex = function (index) {\\n                            return (0, std_math_1.atomic)(_this.intArray[index]);\\n                        };\\n                        this.fastIndexAssign = function (index, value) {\\n                            _this.intArray[index] = value.__value;\\n                        };\\n                    }\\n                }\\n                else {\\n                    var elementSize_1 = this.adapter.getValueSize(structure);\\n                    var realSize = elementSize_1 * size;\\n                    this.elementCount = size;\\n                    this.elementBytes = elementSize_1;\\n                    this.arrayBuffer = new ArrayBuffer(realSize);\\n                    this.fastIndex = function (index) {\\n                        return _this.adapter.readStructuredBuffer(structure, _this.arrayBuffer, index * elementSize_1);\\n                    };\\n                    this.fastIndexAssign = function (index, value) {\\n                        _this.cpuWriteDirty = true;\\n                        _this.adapter.writeStructuredBuffer(structure, value, _this.arrayBuffer, index * (elementSize_1 / 4));\\n                    };\\n                }\\n            }\\n            this.__index = function (index) {\\n                // await this.download();\\n                if (_this.watchMutation) {\\n                    var data = _this.fastIndex(index);\\n                    data.$mutate = function (to) {\\n                        _this.cpuWriteDirty = true;\\n                        if (to !== undefined) {\\n                            if (_this.intArray) {\\n                                _this.intArray[index] = to;\\n                            }\\n                            else {\\n                                _this.uintArray[index] = to;\\n                            }\\n                        }\\n                    };\\n                    return data;\\n                }\\n                else {\\n                    return _this.fastIndex(index);\\n                }\\n            };\\n            this.__index_assign = function (index, value) {\\n                // await this.download();\\n                _this.cpuWriteDirty = true;\\n                _this.fastIndexAssign(index, value);\\n            };\\n            this.__index_assign_op = function (op_fn, index, value) {\\n                // await this.download();\\n                _this.cpuWriteDirty = true;\\n                _this.fastIndexAssign(index, op_fn(_this.fastIndex(index), value));\\n            };\\n        }\\n        buffer_internal.prototype.destroy = function () {\\n            this.adapter.destroyBuffer(this);\\n        };\\n        buffer_internal.prototype.__index = function (index) {\\n            // this.download();\\n            // return this.fastIndex(index);\\n            return null;\\n        };\\n        buffer_internal.prototype.__index_assign = function (index, value) {\\n            // this.download();\\n            // this.cpuWriteDirty = true;\\n            // this.fastIndexAssign(index, value);\\n        };\\n        buffer_internal.prototype.__index_assign_op = function (op_fn, index, value) {\\n            // this.download();\\n            // this.cpuWriteDirty = true;\\n            // this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\\n        };\\n        buffer_internal.prototype.len = function () {\\n            return this.elementCount;\\n        };\\n        /**\\n         * Returns the underlying cpu buffer as a typed array.\\n         *\\n         * > [!NOTE]\\n         * > This is considerably faster than using the raw index [] operator.\\n         *\\n         * > [!NOTE]\\n         * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\\n         *\\n         * ```shadeup\\n         * let buf = buffer<uint>();\\n         * let data = buf.getData();\\n         *\\n         * for (let i = 0; i < data.length; i += 4) {\\n         * \\t// Do something with data[i]\\n         * }\\n         * ```\\n         */\\n        buffer_internal.prototype.getData = function () {\\n            var _a, _b, _c;\\n            if (this.structured) {\\n                return this.structArray;\\n            }\\n            else {\\n                return (_c = (_b = (_a = this.floatArray) !== null && _a !== void 0 ? _a : this.intArray) !== null && _b !== void 0 ? _b : this.uintArray) !== null && _c !== void 0 ? _c : new Uint8Array(0);\\n            }\\n        };\\n        buffer_internal.prototype.write = function (other) {\\n            if (!this.adapter)\\n                return;\\n            this.adapter.copyBufferToBuffer(other, this);\\n        };\\n        /** @shadeup=tag(async) @shadeup=noemit_gpu */\\n        buffer_internal.prototype.download = function () {\\n            return __awaiter(this, void 0, void 0, function () {\\n                return __generator(this, function (_a) {\\n                    switch (_a.label) {\\n                        case 0:\\n                            if (!this.adapter)\\n                                return [2 /*return*/];\\n                            if (this.pendingWrites > 0) {\\n                                window.flushAdapter();\\n                            }\\n                            if (!this.cpuReadDirty) return [3 /*break*/, 2];\\n                            this.cpuReadDirty = false;\\n                            return [4 /*yield*/, this.adapter.downloadBuffer(this)];\\n                        case 1:\\n                            _a.sent();\\n                            _a.label = 2;\\n                        case 2: return [2 /*return*/];\\n                    }\\n                });\\n            });\\n        };\\n        buffer_internal.prototype.downloadAsync = function () {\\n            return this['download']();\\n        };\\n        /** @shadeup=noemit_gpu */\\n        buffer_internal.prototype.upload = function () {\\n            if (!this.adapter)\\n                return;\\n            if (this.cpuWriteDirty) {\\n                this.cpuWriteDirty = false;\\n                this.adapter.uploadBuffer(this);\\n            }\\n        };\\n        buffer_internal.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_buffer_ts_214_buffer_internal\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__opaque_buffer\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"structArray\\\\\\\",null],[\\\\\\\"floatArray\\\\\\\",null],[\\\\\\\"intArray\\\\\\\",null],[\\\\\\\"uintArray\\\\\\\",null],[\\\\\\\"arrayBuffer\\\\\\\",null],[\\\\\\\"vectorSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"typeName\\\\\\\",null],[\\\\\\\"platformPayload\\\\\\\",null],[\\\\\\\"adapter\\\\\\\",null],[\\\\\\\"dirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pendingWrites\\\\\\\",null],[\\\\\\\"cpuReadDirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"cpuWriteDirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"elementCount\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"elementBytes\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"structured\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastIndex\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"fastIndexAssign\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"watchMutation\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"symbol\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\");\\n        };\\n        return buffer_internal;\\n    }());\\n    exports.buffer_internal = buffer_internal;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_buffer_ts_214_buffer_internal\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__opaque_buffer\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"structArray\\\\\\\",null],[\\\\\\\"floatArray\\\\\\\",null],[\\\\\\\"intArray\\\\\\\",null],[\\\\\\\"uintArray\\\\\\\",null],[\\\\\\\"arrayBuffer\\\\\\\",null],[\\\\\\\"vectorSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"typeName\\\\\\\",null],[\\\\\\\"platformPayload\\\\\\\",null],[\\\\\\\"adapter\\\\\\\",null],[\\\\\\\"dirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"pendingWrites\\\\\\\",null],[\\\\\\\"cpuReadDirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"cpuWriteDirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"elementCount\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"elementBytes\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"structured\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastIndex\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"fastIndexAssign\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"watchMutation\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"symbol\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\"), buffer_internal)\\n    function buffer(e1, typeName, structure) {\\n        if (typeof e1 === 'number') {\\n            var size = e1;\\n            var buf = new buffer_internal(size, typeName, structure);\\n            return buf;\\n        }\\n        else {\\n            var data = e1;\\n            var buf = new buffer_internal(data.length, typeName, structure);\\n            for (var i = 0; i < data.length; i++) {\\n                buf.fastIndexAssign(i, data[i]);\\n            }\\n            return buf;\\n        }\\n    }\\n    exports.buffer = buffer;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/texture.ts\":{\"outputFiles\":[{\"name\":\"/_std/texture.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.texture3d = exports.texture3d_internal_empty = exports.texture2d = exports.texture2d_internal_empty = void 0;\\n    var texture2d_internal_empty = /** @class */ (function () {\\n        function texture2d_internal_empty() {\\n            this.__opaque_texture2d = true;\\n            this.size = [0, 0];\\n            this.paint = null;\\n        }\\n        /** @shadeup=glsl(!texture($self$, $0$)) */\\n        texture2d_internal_empty.prototype.__index = function (index) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.__index_assign = function (index, value) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.getFast = function (index) {\\n            return null;\\n        };\\n        texture2d_internal_empty.prototype.setFast = function (index, value) {\\n            return null;\\n        };\\n        /** @shadeup=tag(async) */\\n        texture2d_internal_empty.prototype.download = function () { };\\n        texture2d_internal_empty.prototype.downloadAsync = function () {\\n            return null;\\n        };\\n        /**\\n         * Returns the underlying cpu buffer as a typed array.\\n         *\\n         * Note that this is considerably faster than using the raw index [] operator.\\n         *\\n         * ```shadeup\\n         * let tex = texture2d<float4>();\\n         * let data = tex.getData();\\n         *\\n         * for (let i = 0; i < data.length; i += 4) {\\n         * \\tlet r = data[i];\\n         * \\tlet g = data[i + 1];\\n         * \\tlet b = data[i + 2];\\n         * \\tlet a = data[i + 3];\\n         *\\n         * \\t// Do something with the pixel\\n         * }\\n         * ```\\n         */\\n        texture2d_internal_empty.prototype.getData = function () {\\n            return new Uint32Array(0);\\n        };\\n        texture2d_internal_empty.prototype.upload = function () { };\\n        texture2d_internal_empty.prototype.sample = function (position) { };\\n        texture2d_internal_empty.prototype.clear = function (color) {\\n            if (color === void 0) { color = 'auto'; }\\n        };\\n        texture2d_internal_empty.prototype.flush = function () { };\\n        /** Release the texture */\\n        texture2d_internal_empty.prototype.destroy = function () { };\\n        texture2d_internal_empty.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_texture_ts_377_texture2d_internal_empty\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__opaque_texture2d\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"size\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"paint\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"markDirtyCallback\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"__ctx\\\\\\\",null],[\\\\\\\"__gl\\\\\\\",null],[\\\\\\\"__offscreen_canvas\\\\\\\",null],[\\\\\\\"__program\\\\\\\",null],[\\\\\\\"stagedChanges\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"dirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPoints\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPointsBuffer\\\\\\\",null],[\\\\\\\"__currentColor\\\\\\\",null],[\\\\\\\"pointsCounter\\\\\\\",null],[\\\\\\\"cacheSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"staticSize\\\\\\\":2}]]}],[\\\\\\\"draw\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"drawIndexed\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"drawAdvanced\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"drawInstanced\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\");\\n        };\\n        return texture2d_internal_empty;\\n    }());\\n    exports.texture2d_internal_empty = texture2d_internal_empty;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_texture_ts_377_texture2d_internal_empty\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__opaque_texture2d\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"size\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"paint\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_paint_ts_225_PaintingContext\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"markDirtyCallback\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"__ctx\\\\\\\",null],[\\\\\\\"__gl\\\\\\\",null],[\\\\\\\"__offscreen_canvas\\\\\\\",null],[\\\\\\\"__program\\\\\\\",null],[\\\\\\\"stagedChanges\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"dirty\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPoints\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"fastPointsBuffer\\\\\\\",null],[\\\\\\\"__currentColor\\\\\\\",null],[\\\\\\\"pointsCounter\\\\\\\",null],[\\\\\\\"cacheSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"staticSize\\\\\\\":2}]]}],[\\\\\\\"draw\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"drawIndexed\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"drawAdvanced\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}],[\\\\\\\"drawInstanced\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"unknown\\\\\\\"}]]}\\\"), texture2d_internal_empty)\\n    function texture2d(size, format, type) {\\n        return window.shadeupMakeTextureInternal(size, format, type);\\n    }\\n    exports.texture2d = texture2d;\\n    var texture3d_internal_empty = /** @class */ (function () {\\n        function texture3d_internal_empty() {\\n            this.__opaque_texture3d = true;\\n            this.size = [0, 0, 0];\\n        }\\n        /** @shadeup=glsl(!texture($self$, $0$)) */\\n        texture3d_internal_empty.prototype.__index = function (index) {\\n            return null;\\n        };\\n        texture3d_internal_empty.prototype.__index_assign = function (index, value) { };\\n        texture3d_internal_empty.prototype.sample = function (position) { };\\n        texture3d_internal_empty.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_texture_ts_2518_texture3d_internal_empty\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__opaque_texture3d\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"size\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}]]}\\\");\\n        };\\n        return texture3d_internal_empty;\\n    }());\\n    exports.texture3d_internal_empty = texture3d_internal_empty;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_texture_ts_2518_texture3d_internal_empty\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"__opaque_texture3d\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"bool\\\\\\\"}],[\\\\\\\"size\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}]]}\\\"), texture3d_internal_empty)\\n    function texture3d(size, type) {\\n        return window.shadeupMakeTextureInternal(size, type);\\n    }\\n    exports.texture3d = texture3d;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/drawIndexed.ts\":{\"outputFiles\":[{\"name\":\"/_std/drawIndexed.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\", \\\"/_std/buffer\\\", \\\"/std_math\\\"], function (require, exports, buffer_1, std_math_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.computeIndirect = exports.drawAttributes = exports.drawCount = exports.drawAlt2 = exports.drawFullscreen = exports.draw = exports.drawAdvanced = exports.makeShader = exports.ShaderOutput = exports.ShaderInput = exports.shader_start_shd_ = exports.drawIndirect = exports.drawIndexedIndirect = exports.drawInstancedIndexed = exports.drawInstanced = exports.drawIndexed = void 0;\\n    function drawIndexed(indexBuffer, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\\n    }\\n    exports.drawIndexed = drawIndexed;\\n    function drawInstanced(mesh, instanceCount, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShader, pixelShader);\\n    }\\n    exports.drawInstanced = drawInstanced;\\n    function drawInstancedIndexed(indexBuffer, instanceCount, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShader, pixelShader);\\n    }\\n    exports.drawInstancedIndexed = drawInstancedIndexed;\\n    function drawIndexedIndirect(indirectBuffer, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_indexed_indirect(indirectBuffer, vertexShader, pixelShader);\\n    }\\n    exports.drawIndexedIndirect = drawIndexedIndirect;\\n    function drawIndirect(mesh, indirectBuffer, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_indirect(mesh, indirectBuffer, vertexShader, pixelShader);\\n    }\\n    exports.drawIndirect = drawIndirect;\\n    function shader_start_shd_(s, groupSize) {\\n        return s;\\n    }\\n    exports.shader_start_shd_ = shader_start_shd_;\\n    /**@shadeup=struct*/\\n    var ShaderInput = /** @class */ (function () {\\n        function ShaderInput() {\\n            /** Interpolated world position (available in fragment, and vertex) */\\n            this.position = (0, std_math_1.float3)(0, 0, 0);\\n            /** Interpolated normal (fragment), Source mesh normal (vertex) */\\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\\n            /** Interpolated tangent (fragment), Source mesh tangent (vertex) */\\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\\n            /** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\\n            /** Vertex shader output position */\\n            this.clipPosition = (0, std_math_1.float4)(0, 0, 0, 0);\\n            this.realPosition = (0, std_math_1.float4)(0, 0, 0, 0);\\n            /** UV channel 0 input (available in fragment, and vertex) */\\n            this.uv = (0, std_math_1.float2)(0, 0);\\n            /** Screen position in pixels (available in fragment, and vertex) */\\n            this.screen = (0, std_math_1.float2)(0, 0);\\n            /** Interpolated vertex color (available in fragment, and vertex)  */\\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\\n            /** Group ID (available in compute) */\\n            this.groupId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\\n            /** Group size (available in compute) */\\n            this.groupSize = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\\n            /** Global id (groupId * groupSize + localId) (available in compute) */\\n            this.globalId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\\n            /** Local id (available in compute) */\\n            this.localId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\\n            /** Instance index (available in fragment, and vertex) */\\n            this.instanceIndex = 0;\\n            /** Vertex index (available in vertex) */\\n            this.vertexIndex = 0;\\n        }\\n        /** @shadeup=noemit_gpu */\\n        ShaderInput.prototype.attr = function (index, interpolation) {\\n            return null;\\n        };\\n        ShaderInput.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"ShaderInput\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"tangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"bitangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"clipPosition\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"realPosition\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"screen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"groupId\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"groupSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"globalId\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"localId\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"instanceIndex\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"vertexIndex\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}]]}\\\");\\n        };\\n        return ShaderInput;\\n    }());\\n    exports.ShaderInput = ShaderInput;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"ShaderInput\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"tangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"bitangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"clipPosition\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"realPosition\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"screen\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"groupId\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"groupSize\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"globalId\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"localId\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int3\\\\\\\"}],[\\\\\\\"instanceIndex\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"vertexIndex\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}]]}\\\"), ShaderInput)\\n    /**@shadeup=struct*/\\n    var ShaderOutput = /** @class */ (function () {\\n        function ShaderOutput() {\\n            /** Vertex output position */\\n            this.position = (0, std_math_1.float4)(0, 0, 0, 0);\\n            /** Vertex output normal */\\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\\n            /** Vertex output tangent */\\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\\n            /** Vertex output bitangent */\\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\\n            /** UV channel 0 output */\\n            this.uv = (0, std_math_1.float2)(0, 0);\\n            /** Pixel color output */\\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\\n        }\\n        /** @shadeup=noemit_gpu */\\n        ShaderOutput.prototype.attr = function (index, value, interpolation) { };\\n        ShaderOutput.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"ShaderOutput\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"tangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"bitangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}]]}\\\");\\n        };\\n        return ShaderOutput;\\n    }());\\n    exports.ShaderOutput = ShaderOutput;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"ShaderOutput\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"tangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"bitangent\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"uv\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}]]}\\\"), ShaderOutput)\\n    /** @shadeup=shader */\\n    function makeShader(key, fn) {\\n        return fn;\\n    }\\n    exports.makeShader = makeShader;\\n    function drawAdvanced(descriptor) {\\n        window.__shadeup_dispatch_draw_advanced(descriptor);\\n    }\\n    exports.drawAdvanced = drawAdvanced;\\n    function draw(first, second, third) {\\n        if ('vertices' in first && second && third) {\\n            window.__shadeup_dispatch_draw_geometry(first, second, third);\\n        }\\n        else if (first && !second && !third) {\\n            window.__shadeup_dispatch_draw(first);\\n        }\\n    }\\n    exports.draw = draw;\\n    function drawFullscreen(first, second, third) {\\n        if ('vertices' in first && second && third) {\\n            window.__shadeup_dispatch_draw_geometry(first, second, third);\\n        }\\n        else if (first && !second && !third) {\\n            window.__shadeup_dispatch_draw(first);\\n        }\\n    }\\n    exports.drawFullscreen = drawFullscreen;\\n    function drawAlt2(fullScreenPixelShader) { }\\n    exports.drawAlt2 = drawAlt2;\\n    function drawCount(triCount, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\n    }\\n    exports.drawCount = drawCount;\\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\\n    }\\n    exports.drawAttributes = drawAttributes;\\n    function computeIndirect(indirectBuffer, indirectOffset, computeShader) {\\n        window.__shadeup_dispatch_compute_indirect(indirectBuffer, indirectOffset, computeShader);\\n    }\\n    exports.computeIndirect = computeIndirect;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/drawAttributes.ts\":{\"outputFiles\":[{\"name\":\"/_std/drawAttributes.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\", \\\"/_std/buffer\\\"], function (require, exports, buffer_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.drawAttributes = void 0;\\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\\n    }\\n    exports.drawAttributes = drawAttributes;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/drawCount.ts\":{\"outputFiles\":[{\"name\":\"/_std/drawCount.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.drawCount = void 0;\\n    function drawCount(triCount, vertexShader, pixelShader) {\\n        __shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\\n    }\\n    exports.drawCount = drawCount;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/physics.ts\":{\"outputFiles\":[{\"name\":\"/_std/physics.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\"], function (require, exports) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.physics = exports.PhysicsEngine3d = exports.PhysicsEngine2d = exports.PhysicsRigidBody2d = exports.PhysicsRayCastResult2d = exports.PhysicsCollider2d = void 0;\\n    var PhysicsCollider2d = /** @class */ (function () {\\n        function PhysicsCollider2d(rapier, world, collider) {\\n            this.rapier = rapier;\\n            this.world = world;\\n            this.collider = collider;\\n        }\\n        PhysicsCollider2d.prototype.setTranslation = function (position) {\\n            this.collider.setTranslation(toVec2(position));\\n        };\\n        PhysicsCollider2d.prototype.setRotation = function (rotation) {\\n            this.collider.setRotation(rotation);\\n        };\\n        PhysicsCollider2d.prototype.setSensor = function (isSensor) {\\n            this.collider.setSensor(isSensor);\\n        };\\n        PhysicsCollider2d.prototype.setCollisionGroups = function (groups) {\\n            this.collider.setCollisionGroups(groups);\\n        };\\n        PhysicsCollider2d.prototype.setCollidesWith = function (groups) {\\n            this.collider.setActiveCollisionTypes(groups);\\n        };\\n        PhysicsCollider2d.prototype.setFriction = function (friction) {\\n            this.collider.setFriction(friction);\\n        };\\n        PhysicsCollider2d.prototype.setRestitution = function (restitution) {\\n            this.collider.setRestitution(restitution);\\n        };\\n        PhysicsCollider2d.prototype.setDensity = function (density) {\\n            this.collider.setDensity(density);\\n        };\\n        PhysicsCollider2d.prototype.setMass = function (mass) {\\n            this.collider.setMass(mass);\\n        };\\n        PhysicsCollider2d.prototype.setRadius = function (radius) {\\n            this.collider.setRadius(radius);\\n        };\\n        PhysicsCollider2d.prototype.setHalfExtents = function (halfExtents) {\\n            this.collider.setHalfExtents(toVec2(halfExtents));\\n        };\\n        PhysicsCollider2d.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"world\\\\\\\",null],[\\\\\\\"collider\\\\\\\",null]]}\\\");\\n        };\\n        return PhysicsCollider2d;\\n    }());\\n    exports.PhysicsCollider2d = PhysicsCollider2d;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"world\\\\\\\",null],[\\\\\\\"collider\\\\\\\",null]]}\\\"), PhysicsCollider2d)\\n    function toVec2(v) {\\n        return { x: v[0], y: v[1] };\\n    }\\n    function toVec3(v) {\\n        return { x: v[0], y: v[1], z: v[2] };\\n    }\\n    var PhysicsRayCastResult2d = /** @class */ (function () {\\n        function PhysicsRayCastResult2d(rapier, result) {\\n            this.rapier = rapier;\\n            this.result = result;\\n        }\\n        PhysicsRayCastResult2d.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"result\\\\\\\",null]]}\\\");\\n        };\\n        return PhysicsRayCastResult2d;\\n    }());\\n    exports.PhysicsRayCastResult2d = PhysicsRayCastResult2d;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"result\\\\\\\",null]]}\\\"), PhysicsRayCastResult2d)\\n    var PhysicsRigidBody2d = /** @class */ (function () {\\n        function PhysicsRigidBody2d(rapier, world, body) {\\n            this.rapier = rapier;\\n            this.world = world;\\n            this.body = body;\\n        }\\n        PhysicsRigidBody2d.prototype.addBallCollider = function (radius) {\\n            var colDesc = this.rapier.ColliderDesc.ball(radius);\\n            var col = this.world.createCollider(colDesc, this.body);\\n            return new PhysicsCollider2d(this.rapier, this.world, col);\\n        };\\n        PhysicsRigidBody2d.prototype.addBoxCollider = function (halfExtents) {\\n            var colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\\n            var col = this.world.createCollider(colDesc, this.body);\\n            return new PhysicsCollider2d(this.rapier, this.world, col);\\n        };\\n        PhysicsRigidBody2d.prototype.addCapsuleCollider = function (radius, halfHeight) {\\n            var colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\\n            var col = this.world.createCollider(colDesc, this.body);\\n            return new PhysicsCollider2d(this.rapier, this.world, col);\\n        };\\n        PhysicsRigidBody2d.prototype.addTriangleCollider = function (a, b, c) {\\n            var colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\\n            var col = this.world.createCollider(colDesc, this.body);\\n            return new PhysicsCollider2d(this.rapier, this.world, col);\\n        };\\n        PhysicsRigidBody2d.prototype.addConvexCollider = function (points) {\\n            var floatarr = new Float32Array(points.length * 2);\\n            for (var i = 0; i < points.length; i++) {\\n                floatarr[i * 2 + 0] = points[i][0];\\n                floatarr[i * 2 + 1] = points[i][1];\\n            }\\n            var colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\\n            if (!colDesc)\\n                throw new Error('Failed to create convex hull collider');\\n            var col = this.world.createCollider(colDesc, this.body);\\n            return new PhysicsCollider2d(this.rapier, this.world, col);\\n        };\\n        PhysicsRigidBody2d.prototype.addHeightfieldCollider = function (heights, scale) {\\n            var arr = new Float32Array(heights.length);\\n            for (var i = 0; i < heights.length; i++) {\\n                arr[i] = heights[i];\\n            }\\n            var colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\\n            var col = this.world.createCollider(colDesc, this.body);\\n            return new PhysicsCollider2d(this.rapier, this.world, col);\\n        };\\n        PhysicsRigidBody2d.prototype.setTranslation = function (position) {\\n            this.body.setTranslation(toVec2(position), true);\\n        };\\n        PhysicsRigidBody2d.prototype.setRotation = function (rotation) {\\n            this.body.setRotation(rotation, true);\\n        };\\n        PhysicsRigidBody2d.prototype.setVelocity = function (velocity) {\\n            this.body.setLinvel(toVec2(velocity), true);\\n        };\\n        PhysicsRigidBody2d.prototype.setAngularVelocity = function (velocity) {\\n            this.body.setAngvel(velocity, true);\\n        };\\n        PhysicsRigidBody2d.prototype.addForce = function (force) {\\n            this.body.addForce(toVec2(force), true);\\n        };\\n        PhysicsRigidBody2d.prototype.addForceAtPoint = function (force, point) {\\n            this.body.addForceAtPoint(toVec2(force), toVec2(point), true);\\n        };\\n        PhysicsRigidBody2d.prototype.addTorque = function (torque) {\\n            this.body.addTorque(torque, true);\\n        };\\n        PhysicsRigidBody2d.prototype.setAdditionalMass = function (mass) {\\n            this.body.setAdditionalMass(mass, true);\\n        };\\n        PhysicsRigidBody2d.prototype.setEnabled = function (enabled) {\\n            this.body.setEnabled(enabled);\\n        };\\n        PhysicsRigidBody2d.prototype.sleep = function () {\\n            this.body.sleep();\\n        };\\n        PhysicsRigidBody2d.prototype.wakeUp = function () {\\n            this.body.wakeUp();\\n        };\\n        PhysicsRigidBody2d.prototype.setGravityScale = function (scale) {\\n            this.body.setGravityScale(scale, true);\\n        };\\n        PhysicsRigidBody2d.prototype.setLinearDamping = function (damping) {\\n            this.body.setLinearDamping(damping);\\n        };\\n        PhysicsRigidBody2d.prototype.setAngularDamping = function (damping) {\\n            this.body.setAngularDamping(damping);\\n        };\\n        PhysicsRigidBody2d.prototype.isSleeping = function () {\\n            return this.body.isSleeping();\\n        };\\n        PhysicsRigidBody2d.prototype.mass = function () {\\n            return this.body.mass();\\n        };\\n        PhysicsRigidBody2d.prototype.translation = function () {\\n            var t = this.body.translation();\\n            return [t.x, t.y];\\n        };\\n        PhysicsRigidBody2d.prototype.rotation = function () {\\n            return this.body.rotation();\\n        };\\n        PhysicsRigidBody2d.prototype.velocity = function () {\\n            var t = this.body.linvel();\\n            return [t.x, t.y];\\n        };\\n        PhysicsRigidBody2d.prototype.angularVelocity = function () {\\n            return this.body.angvel();\\n        };\\n        PhysicsRigidBody2d.prototype.isMoving = function () {\\n            return this.body.isMoving();\\n        };\\n        PhysicsRigidBody2d.prototype.collider = function (index) {\\n            var collider = this.body.collider(index);\\n            if (!collider)\\n                throw new Error('Failed to get collider');\\n            return new PhysicsCollider2d(this.rapier, this.world, collider);\\n        };\\n        PhysicsRigidBody2d.prototype.applyImpulse = function (impulse) {\\n            this.body.applyImpulse(toVec2(impulse), true);\\n        };\\n        PhysicsRigidBody2d.prototype.applyTorqueImpulse = function (impulse) {\\n            this.body.applyTorqueImpulse(impulse, true);\\n        };\\n        PhysicsRigidBody2d.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"world\\\\\\\",null],[\\\\\\\"body\\\\\\\",null]]}\\\");\\n        };\\n        return PhysicsRigidBody2d;\\n    }());\\n    exports.PhysicsRigidBody2d = PhysicsRigidBody2d;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"world\\\\\\\",null],[\\\\\\\"body\\\\\\\",null]]}\\\"), PhysicsRigidBody2d)\\n    var PhysicsEngine2d = /** @class */ (function () {\\n        function PhysicsEngine2d(rapier) {\\n            this.rapier = rapier;\\n            this.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\\n        }\\n        PhysicsEngine2d.prototype.step = function () {\\n            this.world.step();\\n        };\\n        PhysicsEngine2d.prototype.createRigidBody = function (position, rotation, mode) {\\n            var rbDesc = mode == 'dynamic'\\n                ? this.rapier.RigidBodyDesc.dynamic()\\n                : mode == 'fixed'\\n                    ? this.rapier.RigidBodyDesc.fixed()\\n                    : this.rapier.RigidBodyDesc.dynamic();\\n            rbDesc.setTranslation(position[0], position[1]);\\n            rbDesc.setRotation(rotation);\\n            var rb = this.world.createRigidBody(rbDesc);\\n            return new PhysicsRigidBody2d(this.rapier, this.world, rb);\\n        };\\n        PhysicsEngine2d.prototype.bodies = function () {\\n            var bodies = this.world.bodies;\\n            var result = [];\\n            for (var i = 0; i < bodies.len(); i++) {\\n                result.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)));\\n            }\\n            return result;\\n        };\\n        PhysicsEngine2d.prototype.castRay = function (start, end, maxi) {\\n            var result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\\n            if (!result)\\n                return null;\\n            return new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent());\\n        };\\n        PhysicsEngine2d.prototype.setGravity = function (gravity) {\\n            this.world.gravity = toVec2(gravity);\\n        };\\n        PhysicsEngine2d.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"world\\\\\\\",null]]}\\\");\\n        };\\n        return PhysicsEngine2d;\\n    }());\\n    exports.PhysicsEngine2d = PhysicsEngine2d;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"rapier\\\\\\\",null],[\\\\\\\"world\\\\\\\",null]]}\\\"), PhysicsEngine2d)\\n    var PhysicsEngine3d = /** @class */ (function () {\\n        function PhysicsEngine3d() {\\n        }\\n        PhysicsEngine3d.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return PhysicsEngine3d;\\n    }());\\n    exports.PhysicsEngine3d = PhysicsEngine3d;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), PhysicsEngine3d)\\n    var physics;\\n    (function (physics) {\\n        function engine2d() {\\n            return new PhysicsEngine2d(window.RAPIER_2D);\\n        }\\n        physics.engine2d = engine2d;\\n    })(physics = exports.physics || (exports.physics = {}));\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/mesh.ts\":{\"outputFiles\":[{\"name\":\"/_std/mesh.js\",\"writeByteOrderMark\":false,\"text\":\"var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\\\"get\\\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\\n    Object.defineProperty(o, \\\"default\\\", { enumerable: true, value: v });\\n}) : function(o, v) {\\n    o[\\\"default\\\"] = v;\\n});\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n    if (mod && mod.__esModule) return mod;\\n    var result = {};\\n    if (mod != null) for (var k in mod) if (k !== \\\"default\\\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\\n    __setModuleDefault(result, mod);\\n    return result;\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"/std_math\\\", \\\"/std_math\\\", \\\"/std___std_all\\\", \\\"/_std/common\\\"], function (require, exports, __, std_math_1, std___std_all_1, common_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.Model = exports.ModelPart = exports.Material = exports.mesh = exports.Mesh = void 0;\\n    __ = __importStar(__);\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n    var Mesh = /** @class */ (function () {\\n        function Mesh(data) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h;\\n            this.vertices = (_a = data.vertices) !== null && _a !== void 0 ? _a : [];\\n            this.triangles = (_b = data.triangles) !== null && _b !== void 0 ? _b : [];\\n            this.normals = (_c = data.normals) !== null && _c !== void 0 ? _c : [];\\n            this.tangents = (_d = data.tangents) !== null && _d !== void 0 ? _d : [];\\n            this.bitangents = (_e = data.bitangents) !== null && _e !== void 0 ? _e : [];\\n            this.uvs = (_f = data.uvs) !== null && _f !== void 0 ? _f : [];\\n            this.colors = (_g = data.colors) !== null && _g !== void 0 ? _g : [];\\n            this.symbol = (_h = data.symbol) !== null && _h !== void 0 ? _h : null;\\n        }\\n        Mesh.prototype.rect = function (size) {\\n            var shader_self_temp = this;\\n            var index = (this.vertices.len() | 0);\\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), size[1] / (2 | 0), (0 | 0)));\\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), size[1] / (2 | 0), (0 | 0)));\\n            this.triangles.push(index + (2 | 0));\\n            this.triangles.push(index + (1 | 0));\\n            this.triangles.push(index + (0 | 0));\\n            this.triangles.push(index + (0 | 0));\\n            this.triangles.push(index + (3 | 0));\\n            this.triangles.push(index + (2 | 0));\\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\\n        };\\n        Mesh.prototype.quad = function (position, direction, right, size) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;\\n            var shader_self_temp = this;\\n            var up = (0, std_math_1.normalize)((0, std_math_1.cross)(right, direction));\\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\\n            var index = (this.vertices.len() | 0);\\n            this.vertices.push((_c = (_e = position, _f = (_g = right, _h = (__.FM.negate_1(halfSize[0])), [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_j = up, _k = halfSize[1], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]));\\n            this.vertices.push((_l = (_o = position, _p = (_q = right, _r = halfSize[0], [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = (_s = up, _t = halfSize[1], [_s[0] * _t, _s[1] * _t, _s[2] * _t]), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]]));\\n            this.vertices.push((_u = (_w = position, _x = (_y = right, _z = halfSize[0], [_y[0] * _z, _y[1] * _z, _y[2] * _z]), [_w[0] + _x[0], _w[1] + _x[1], _w[2] + _x[2]]), _v = (_0 = up, _1 = (__.FM.negate_1(halfSize[1])), [_0[0] * _1, _0[1] * _1, _0[2] * _1]), [_u[0] + _v[0], _u[1] + _v[1], _u[2] + _v[2]]));\\n            this.vertices.push((_2 = (_4 = position, _5 = (_6 = right, _7 = (__.FM.negate_1(halfSize[0])), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2]]), _3 = (_8 = up, _9 = (__.FM.negate_1(halfSize[1])), [_8[0] * _9, _8[1] * _9, _8[2] * _9]), [_2[0] + _3[0], _2[1] + _3[1], _2[2] + _3[2]]));\\n            this.triangles.push(index + (0 | 0));\\n            this.triangles.push(index + (1 | 0));\\n            this.triangles.push(index + (2 | 0));\\n            this.triangles.push(index + (2 | 0));\\n            this.triangles.push(index + (3 | 0));\\n            this.triangles.push(index + (0 | 0));\\n            this.normals.push(direction);\\n            this.normals.push(direction);\\n            this.normals.push(direction);\\n            this.normals.push(direction);\\n            this.tangents.push(right);\\n            this.tangents.push(right);\\n            this.tangents.push(right);\\n            this.tangents.push(right);\\n            this.bitangents.push(up);\\n            this.bitangents.push(up);\\n            this.bitangents.push(up);\\n            this.bitangents.push(up);\\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\\n        };\\n        Mesh.prototype.box = function (size) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\\n            var shader_self_temp = this;\\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b]);\\n            var UP = __.makeVector((0 | 0), 1.0, (0 | 0));\\n            var DOWN = __.makeVector((0 | 0), (__.FM.negate_1(1.0)), (0 | 0));\\n            var LEFT = __.makeVector((__.FM.negate_1(1.0)), (0 | 0), (0 | 0));\\n            var RIGHT = __.makeVector(1.0, (0 | 0), (0 | 0));\\n            var FORWARD = __.makeVector((0 | 0), (0 | 0), 1.0);\\n            var BACK = __.makeVector((0 | 0), (0 | 0), (__.FM.negate_1(1.0)));\\n            // Up\\n            this.quad((_c = UP, _d = halfSize[1], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), UP, LEFT, __.makeVector(size[0], size[2]));\\n            // Down\\n            this.quad((_e = DOWN, _f = halfSize[1], [_e[0] * _f, _e[1] * _f, _e[2] * _f]), DOWN, RIGHT, __.makeVector(size[0], size[2]));\\n            // Left\\n            this.quad((_g = LEFT, _h = halfSize[0], [_g[0] * _h, _g[1] * _h, _g[2] * _h]), LEFT, BACK, __.makeVector(size[2], size[1]));\\n            // Right\\n            this.quad((_j = RIGHT, _k = halfSize[0], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), RIGHT, FORWARD, __.makeVector(size[2], size[1]));\\n            // Forward\\n            this.quad((_l = FORWARD, _m = halfSize[2], [_l[0] * _m, _l[1] * _m, _l[2] * _m]), FORWARD, LEFT, __.makeVector(size[0], size[1]));\\n            // Back\\n            this.quad((_o = BACK, _p = halfSize[2], [_o[0] * _p, _o[1] * _p, _o[2] * _p]), BACK, RIGHT, __.makeVector(size[0], size[1]));\\n        };\\n        Mesh.prototype.rectAt = function (minPos, maxPos) {\\n            var _a, _b;\\n            var shader_self_temp = this;\\n            this.rect((_a = maxPos, _b = minPos, [_a[0] - _b[0], _a[1] - _b[1]]));\\n            this.translate(__.makeVector(minPos, (0 | 0)));\\n        };\\n        Mesh.prototype.circle = function (pos, radius, vertices) {\\n            if (vertices === void 0) { vertices = (32 | 0); }\\n        };\\n        Mesh.prototype.uvSphere = function (pos, radius, vertices, rings) {\\n            if (vertices === void 0) { vertices = (32 | 0); }\\n            if (rings === void 0) { rings = (16 | 0); }\\n            var shader_self_temp = this;\\n            var index = (this.vertices.len() | 0);\\n            var verticesPerRing = vertices + (1 | 0);\\n            for (var i = (0 | 0); i <= rings; i++) {\\n                var y = i / rings;\\n                var angleY = y * common_1.PI;\\n                var posY = Math.cos(angleY);\\n                var radiusY = Math.sin(angleY);\\n                for (var j = (0 | 0); j <= vertices; j++) {\\n                    var x = j / vertices;\\n                    var angleX = x * common_1.PI * (2 | 0);\\n                    var posX = Math.cos(angleX);\\n                    var posZ = Math.sin(angleX);\\n                    this.vertices.push(__.makeVector(posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\\n                    this.normals.push((0, std_math_1.normalize)(__.makeVector(posX * radiusY, posY, posZ * radiusY)));\\n                    var tangent = (0, std_math_1.normalize)(__.makeVector(posZ, (0 | 0), (__.FM.negate_1(posX))));\\n                    var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(this.normals[(this.normals.len() | 0) - (1 | 0)], tangent));\\n                    this.tangents.push(tangent);\\n                    this.bitangents.push(bitangent);\\n                    this.uvs.push(__.makeVector(x, y));\\n                }\\n            }\\n            for (var i = (0 | 0); i < rings; i++) {\\n                for (var j = (0 | 0); j < vertices; j++) {\\n                    var i0 = i * verticesPerRing + j;\\n                    var i1 = i0 + (1 | 0);\\n                    var i2 = i0 + verticesPerRing;\\n                    var i3 = i2 + (1 | 0);\\n                    this.triangles.push(index + i0);\\n                    this.triangles.push(index + i1);\\n                    this.triangles.push(index + i2);\\n                    this.triangles.push(index + i2);\\n                    this.triangles.push(index + i1);\\n                    this.triangles.push(index + i3);\\n                }\\n            }\\n            this.translate(pos);\\n        };\\n        Mesh.prototype.icoSphere = function (pos, radius, subdivisions) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;\\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\\n            var shader_self_temp = this;\\n            var index = (this.vertices.len() | 0);\\n            var t = (1.0 + Math.sqrt(5.0)) / 2.0;\\n            var vertices = [__.makeVector((__.FM.negate_1((1 | 0))), t, (0 | 0)), __.makeVector((1 | 0), t, (0 | 0)), __.makeVector((__.FM.negate_1((1 | 0))), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((1 | 0), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), t), __.makeVector((0 | 0), (1 | 0), t), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), (__.FM.negate_1(t))), __.makeVector((0 | 0), (1 | 0), (__.FM.negate_1(t))), __.makeVector(t, (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector(t, (0 | 0), (1 | 0)), __.makeVector((__.FM.negate_1(t)), (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector((__.FM.negate_1(t)), (0 | 0), (1 | 0))];\\n            var triangles = [__.intifyVector(__.makeVector((0 | 0), (11 | 0), (5 | 0))), __.intifyVector(__.makeVector((0 | 0), (5 | 0), (1 | 0))), __.intifyVector(__.makeVector((0 | 0), (1 | 0), (7 | 0))), __.intifyVector(__.makeVector((0 | 0), (7 | 0), (10 | 0))), __.intifyVector(__.makeVector((0 | 0), (10 | 0), (11 | 0))), __.intifyVector(__.makeVector((1 | 0), (5 | 0), (9 | 0))), __.intifyVector(__.makeVector((5 | 0), (11 | 0), (4 | 0))), __.intifyVector(__.makeVector((11 | 0), (10 | 0), (2 | 0))), __.intifyVector(__.makeVector((10 | 0), (7 | 0), (6 | 0))), __.intifyVector(__.makeVector((7 | 0), (1 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (9 | 0), (4 | 0))), __.intifyVector(__.makeVector((3 | 0), (4 | 0), (2 | 0))), __.intifyVector(__.makeVector((3 | 0), (2 | 0), (6 | 0))), __.intifyVector(__.makeVector((3 | 0), (6 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (8 | 0), (9 | 0))), __.intifyVector(__.makeVector((4 | 0), (9 | 0), (5 | 0))), __.intifyVector(__.makeVector((2 | 0), (4 | 0), (11 | 0))), __.intifyVector(__.makeVector((6 | 0), (2 | 0), (10 | 0))), __.intifyVector(__.makeVector((8 | 0), (6 | 0), (7 | 0))), __.intifyVector(__.makeVector((9 | 0), (8 | 0), (1 | 0)))];\\n            for (var i = (0 | 0); i < (vertices.len() | 0); i++) {\\n                this.vertices.push((_a = (0, std_math_1.normalize)(vertices[i]), _b = radius, [_a[0] * _b, _a[1] * _b, _a[2] * _b]));\\n            }\\n            for (var i = (0 | 0); i < (triangles.len() | 0); i++) {\\n                this.triangles.push(index + triangles[i][0]);\\n                this.triangles.push(index + triangles[i][1]);\\n                this.triangles.push(index + triangles[i][2]);\\n            }\\n            for (var i = (0 | 0); i < subdivisions; i++) {\\n                var newTriangles = [];\\n                for (var j = (0 | 0); j < (this.triangles.len() | 0); j = j + (3 | 0)) {\\n                    var i0 = this.triangles[j + (0 | 0)];\\n                    var i1 = this.triangles[j + (1 | 0)];\\n                    var i2 = this.triangles[j + (2 | 0)];\\n                    var v0 = this.vertices[i0];\\n                    var v1 = this.vertices[i1];\\n                    var v2 = this.vertices[i2];\\n                    var v3 = (0, std_math_1.normalize)((_c = (_e = v0, _f = v1, [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = 2.0, [_c[0] / _d, _c[1] / _d, _c[2] / _d]));\\n                    var v4 = (0, std_math_1.normalize)((_g = (_j = v1, _k = v2, [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = 2.0, [_g[0] / _h, _g[1] / _h, _g[2] / _h]));\\n                    var v5 = (0, std_math_1.normalize)((_l = (_o = v2, _p = v0, [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = 2.0, [_l[0] / _m, _l[1] / _m, _l[2] / _m]));\\n                    var i3 = (this.vertices.len() | 0);\\n                    var i4 = i3 + (1 | 0);\\n                    var i5 = i3 + (2 | 0);\\n                    this.vertices.push((_q = v3, _r = radius, [_q[0] * _r, _q[1] * _r, _q[2] * _r]));\\n                    this.vertices.push((_s = v4, _t = radius, [_s[0] * _t, _s[1] * _t, _s[2] * _t]));\\n                    this.vertices.push((_u = v5, _v = radius, [_u[0] * _v, _u[1] * _v, _u[2] * _v]));\\n                    newTriangles.push(i0, i3, i5);\\n                    newTriangles.push(i3, i1, i4);\\n                    newTriangles.push(i3, i4, i5);\\n                    newTriangles.push(i5, i4, i2);\\n                }\\n                this.triangles = newTriangles;\\n            }\\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\\n                var normal = (0, std_math_1.normalize)(this.vertices[i]);\\n                var tangent = (0, std_math_1.normalize)(__.makeVector(normal[2], (0 | 0), (__.FM.negate_1(normal[0]))));\\n                var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(normal, tangent));\\n                this.normals.push(normal);\\n                this.tangents.push(tangent);\\n                this.bitangents.push(bitangent);\\n            }\\n            for (var i = (0 | 0); i < (this.triangles.len() | 0); i = i + (3 | 0)) {\\n                var i0 = this.triangles[i + (0 | 0)];\\n                var i1 = this.triangles[i + (1 | 0)];\\n                var i2 = this.triangles[i + (2 | 0)];\\n                var v0 = this.vertices[i0];\\n                var v1 = this.vertices[i1];\\n                var v2 = this.vertices[i2];\\n                var uv0 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v0[2], v0[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v0[1]) / common_1.PI, 0.5));\\n                var uv1 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v1[2], v1[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v1[1]) / common_1.PI, 0.5));\\n                var uv2 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v2[2], v2[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v2[1]) / common_1.PI, 0.5));\\n                this.uvs.push(uv0);\\n                this.uvs.push(uv1);\\n                this.uvs.push(uv2);\\n            }\\n            this.translate(pos);\\n        };\\n        Mesh.prototype.cylinder = function (pos, radius, height, vertices) {\\n            if (vertices === void 0) { vertices = (32 | 0); }\\n            var shader_self_temp = this;\\n            this.translate(pos);\\n        };\\n        Mesh.prototype.capsule = function (pos, radius, height, vertices) {\\n            if (vertices === void 0) { vertices = (32 | 0); }\\n            var shader_self_temp = this;\\n            this.translate(pos);\\n        };\\n        Mesh.prototype.cone = function (pos, radius, height, vertices) {\\n            if (vertices === void 0) { vertices = (32 | 0); }\\n            var shader_self_temp = this;\\n            var index = (this.vertices.len() | 0);\\n            this.translate(pos);\\n        };\\n        Mesh.prototype.plane = function (pos, size, subdivisions) {\\n            var _a, _b;\\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\\n            var shader_self_temp = this;\\n            var index = (this.vertices.len() | 0);\\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\\n            for (var i = (0 | 0); i <= subdivisions[0]; i++) {\\n                var x = i / __.swizzle(subdivisions, 'x');\\n                var posX = x * size[0] - halfSize[0];\\n                for (var j = (0 | 0); j <= subdivisions[1]; j++) {\\n                    var y = j / __.swizzle(subdivisions, 'y');\\n                    var posY = y * size[1] - halfSize[1];\\n                    this.vertices.push(__.makeVector(posX, (0 | 0), posY));\\n                    this.normals.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\\n                    this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\\n                    this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\\n                    this.uvs.push(__.makeVector(x, y));\\n                }\\n            }\\n            for (var i = (0 | 0); i < subdivisions[0]; i++) {\\n                for (var j = (0 | 0); j < subdivisions[1]; j++) {\\n                    var i0 = i * (subdivisions[1] + (1 | 0)) + j;\\n                    var i1 = i0 + (1 | 0);\\n                    var i2 = i0 + subdivisions[1] + (1 | 0);\\n                    var i3 = i2 + (1 | 0);\\n                    this.triangles.push(index + i0);\\n                    this.triangles.push(index + i1);\\n                    this.triangles.push(index + i2);\\n                    this.triangles.push(index + i2);\\n                    this.triangles.push(index + i1);\\n                    this.triangles.push(index + i3);\\n                }\\n            }\\n            this.translate(pos);\\n        };\\n        Mesh.prototype.translate = function (pos) {\\n            var shader_self_temp = this;\\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\\n                this.vertices.__index_assign_op(__.add, i, pos);\\n            }\\n            return this;\\n        };\\n        Mesh.prototype.rotate = function (quaternion) {\\n            var shader_self_temp = this;\\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\\n                this.vertices.__index_assign(i, common_1.quat.rotate(quaternion, this.vertices[i]));\\n            }\\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\\n                this.normals.__index_assign(i, common_1.quat.rotate(quaternion, this.normals[i]));\\n            }\\n            return this;\\n        };\\n        Mesh.prototype.transform = function (matrix) {\\n            var _a, _b;\\n            var shader_self_temp = this;\\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\\n                this.vertices.__index_assign(i, (_a = (__.mul(__.makeVector(this.vertices[i], (1 | 0)), matrix)), [_a[0], _a[1], _a[2]]));\\n            }\\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\\n                this.normals.__index_assign(i, (_b = (__.mul(__.makeVector(this.normals[i], (1 | 0)), matrix)), [_b[0], _b[1], _b[2]]));\\n            }\\n            return this;\\n        };\\n        Mesh.prototype.scale = function (scale) {\\n            var shader_self_temp = this;\\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\\n                this.vertices.__index_assign_op(__.mul, i, scale);\\n            }\\n            return this;\\n        };\\n        Mesh.prototype.bounds = function () {\\n            var _a, _b, _c, _d;\\n            var shader_self_temp = this;\\n            var mn = (_a = 0.0, [_a, _a, _a]);\\n            var mx = (_b = 0.0, [_b, _b, _b]);\\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\\n                mn = (0, std_math_1.min)(mn, this.vertices[i]);\\n                mx = (0, std_math_1.max)(mx, this.vertices[i]);\\n            }\\n            return _c = mx, _d = mn, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]];\\n        };\\n        Mesh.prototype.center = function () {\\n            var _a, _b;\\n            var shader_self_temp = this;\\n            var bounds = this.bounds();\\n            return _a = bounds, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b];\\n        };\\n        Mesh.new = function () { return new Mesh({ vertices: [], triangles: [], tangents: [], bitangents: [], normals: [], uvs: [], colors: [] }); };\\n        Mesh.prototype.append = function (other) {\\n            var shader_self_temp = this;\\n            var oldVertices = (this.vertices.len() | 0);\\n            var oldTriangles = (this.triangles.len() | 0);\\n            this.vertices.append(other.vertices);\\n            this.triangles.append(other.triangles);\\n            this.normals.append(other.normals);\\n            this.tangents.append(other.tangents);\\n            this.bitangents.append(other.bitangents);\\n            this.uvs.append(other.uvs);\\n            this.colors.append(other.colors);\\n            for (var i = oldTriangles; i < (this.triangles.len() | 0); i++) {\\n                this.triangles.__index_assign_op(__.add, i, oldVertices);\\n            }\\n        };\\n        Mesh.prototype.getVertices = function () { var shader_self_temp = this; return this.vertices; };\\n        Mesh.prototype.getTriangles = function () { var shader_self_temp = this; return this.triangles; };\\n        Mesh.prototype.getNormals = function () { var shader_self_temp = this; return this.normals; };\\n        Mesh.prototype.getTangents = function () { var shader_self_temp = this; return this.tangents; };\\n        Mesh.prototype.getBitangents = function () { var shader_self_temp = this; return this.bitangents; };\\n        Mesh.prototype.getUVs = function () { var shader_self_temp = this; return this.uvs; };\\n        Mesh.prototype.getColors = function () { var shader_self_temp = this; return this.colors; };\\n        Mesh.prototype.setVertices = function (vertices) {\\n            var shader_self_temp = this;\\n            this.vertices = vertices;\\n        };\\n        Mesh.prototype.setTriangles = function (triangles) {\\n            var shader_self_temp = this;\\n            this.triangles = triangles;\\n        };\\n        Mesh.prototype.setNormals = function (normals) {\\n            var shader_self_temp = this;\\n            this.normals = normals;\\n        };\\n        Mesh.prototype.setTangents = function (tangents) {\\n            var shader_self_temp = this;\\n            this.tangents = tangents;\\n        };\\n        Mesh.prototype.setBitangents = function (bitangents) {\\n            var shader_self_temp = this;\\n            this.bitangents = bitangents;\\n        };\\n        Mesh.prototype.setUVs = function (uvs) {\\n            var shader_self_temp = this;\\n            this.uvs = uvs;\\n        };\\n        Mesh.prototype.setColors = function (colors) {\\n            var shader_self_temp = this;\\n            this.colors = colors;\\n        };\\n        Mesh.prototype.clone = function () {\\n            return new Mesh({\\n                vertices: (0, std___std_all_1.__deepClone)(this.vertices),\\n                triangles: (0, std___std_all_1.__deepClone)(this.triangles),\\n                normals: (0, std___std_all_1.__deepClone)(this.normals),\\n                tangents: (0, std___std_all_1.__deepClone)(this.tangents),\\n                bitangents: (0, std___std_all_1.__deepClone)(this.bitangents),\\n                uvs: (0, std___std_all_1.__deepClone)(this.uvs),\\n                colors: (0, std___std_all_1.__deepClone)(this.colors),\\n                symbol: (0, std___std_all_1.__deepClone)(this.symbol),\\n            });\\n        };\\n        Mesh.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_1603_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",null]]}\\\");\\n        };\\n        return Mesh;\\n    }());\\n    exports.Mesh = Mesh;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_1603_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",null]]}\\\"), Mesh)\\n    ; /* impl Mesh */\\n    var mesh = /** @class */ (function () {\\n        function mesh(data) {\\n        }\\n        mesh.rect = function (pos, size) {\\n            var _a, _b;\\n            var g = Mesh.new();\\n            g.rectAt(pos, (_a = pos, _b = size, [_a[0] + _b[0], _a[1] + _b[1]]));\\n            return g;\\n        };\\n        mesh.box = function (pos, size) {\\n            var g = Mesh.new();\\n            g.box(size);\\n            g.translate(pos);\\n            return g;\\n        };\\n        mesh.uvSphere = function (pos, radius, vertices, rings) {\\n            if (vertices === void 0) { vertices = (32 | 0); }\\n            if (rings === void 0) { rings = (16 | 0); }\\n            var g = Mesh.new();\\n            g.uvSphere(pos, radius, vertices, rings);\\n            return g;\\n        };\\n        mesh.icoSphere = function (pos, radius, subdivisions) {\\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\\n            var g = Mesh.new();\\n            g.icoSphere(pos, radius, subdivisions);\\n            return g;\\n        };\\n        mesh.plane = function (pos, size, subdivisions) {\\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\\n            var g = Mesh.new();\\n            g.plane(pos, size, subdivisions);\\n            return g;\\n        };\\n        /**\\n            * Returns a [-1, 1] position for a given index.\\n            */\\n        mesh.triangleFromIndex = function (index) {\\n            if (index == (0 | 0)) {\\n                return __.FM.float_2_1_1(__.negate((1 | 0)), __.int(1));\\n            }\\n            else if (index == (1 | 0)) {\\n                return __.FM.float_2_1_1(__.int(1), __.int(1));\\n            }\\n            else if (index == (2 | 0)) {\\n                return __.FM.float_2_1_1(__.int(0), __.negate((1 | 0)));\\n            }\\n            else {\\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\\n            }\\n        };\\n        mesh.circleFromIndex = function (vertexIndex, vertices) {\\n            vertexIndex = vertices - vertexIndex;\\n            var numSlices = vertices / (3 | 0);\\n            var sliceIndex = Math.floor(vertexIndex / vertices * numSlices);\\n            var incAngle = common_1.PI * 2.0 / numSlices;\\n            var baseAngle = incAngle * sliceIndex;\\n            if (vertexIndex % (3 | 0) == (0 | 0)) {\\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\\n            }\\n            else if (vertexIndex % (3 | 0) == (1 | 0)) {\\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle), (0, std_math_1.sin)(baseAngle));\\n            }\\n            else {\\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle + incAngle), (0, std_math_1.sin)(baseAngle + incAngle));\\n            }\\n        };\\n        mesh.rectFromIndex = function (index, vertices) {\\n            var _a, _b, _c, _d, _e, _f;\\n            var x = index % vertices;\\n            var y = index / vertices;\\n            return _a = (_c = (_e = __.FM.float_2_1_1(x, y), _f = vertices, [_e[0] / _f, _e[1] / _f]), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = 1.0, [_a[0] - _b, _a[1] - _b];\\n        };\\n        mesh.empty = function (numVerts) {\\n            var _a, _b, _c, _d, _e, _f;\\n            if (numVerts === void 0) { numVerts = (0 | 0); }\\n            var g = Mesh.new();\\n            if (numVerts > (0 | 0)) {\\n                g.setVertices((0, std___std_all_1.array)(numVerts, (_a = (0 | 0), [_a, _a, _a])));\\n                g.setNormals((0, std___std_all_1.array)(numVerts, (_b = (0 | 0), [_b, _b, _b])));\\n                g.setTangents((0, std___std_all_1.array)(numVerts, (_c = (0 | 0), [_c, _c, _c])));\\n                g.setBitangents((0, std___std_all_1.array)(numVerts, (_d = (0 | 0), [_d, _d, _d])));\\n                g.setUVs((0, std___std_all_1.array)(numVerts, (_e = (0 | 0), [_e, _e])));\\n                g.setColors((0, std___std_all_1.array)(numVerts, (_f = (0 | 0), [_f, _f, _f, _f])));\\n                var tris = (0, std___std_all_1.array)(numVerts, (0 | 0));\\n                for (var i = (0 | 0); i < numVerts; i++) {\\n                    tris.__index_assign(i, i);\\n                }\\n                g.setTriangles(tris);\\n            }\\n            return g;\\n        };\\n        mesh.join = function (mesh1, mesh2) {\\n            var g = Mesh.new();\\n            g.append(mesh1);\\n            g.append(mesh2);\\n            return g;\\n        };\\n        // pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\n        // \\tlet g = Mesh::new();\\n        // \\tg.cylinder(pos, radius, height, vertices);\\n        // \\treturn g;\\n        // }\\n        // pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\n        // \\tlet g = Mesh::new();\\n        // \\tg.capsule(pos, radius, height, vertices);\\n        // \\treturn g;\\n        // }\\n        // pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\\n        // \\tlet g = Mesh::new();\\n        // \\tg.cone(pos, radius, height, vertices);\\n        // \\treturn g;\\n        // }\\n        mesh.prototype.clone = function () {\\n            return new mesh({});\\n        };\\n        mesh.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_19639_mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return mesh;\\n    }());\\n    exports.mesh = mesh;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_19639_mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), mesh)\\n    ; /* impl mesh */\\n    var Material = /** @class */ (function () {\\n        function Material(data) {\\n            var _a, _b, _c, _d, _e, _f, _g;\\n            this.baseColor = (_a = data.baseColor) !== null && _a !== void 0 ? _a : __.FM.float_4_1_1_1_1(0.0, 0.0, 0.0, 0.0);\\n            this.color = (_b = data.color) !== null && _b !== void 0 ? _b : null;\\n            this.normal = (_c = data.normal) !== null && _c !== void 0 ? _c : null;\\n            this.normalScale = (_d = data.normalScale) !== null && _d !== void 0 ? _d : __.FM.float_2_1_1(0.0, 0.0);\\n            this.roughness = (_e = data.roughness) !== null && _e !== void 0 ? _e : null;\\n            this.emissive = (_f = data.emissive) !== null && _f !== void 0 ? _f : null;\\n            this.metallic = (_g = data.metallic) !== null && _g !== void 0 ? _g : null;\\n        }\\n        Material.prototype.clone = function () {\\n            return new Material({\\n                baseColor: (0, std___std_all_1.__deepClone)(this.baseColor),\\n                color: (0, std___std_all_1.__deepClone)(this.color),\\n                normal: (0, std___std_all_1.__deepClone)(this.normal),\\n                normalScale: (0, std___std_all_1.__deepClone)(this.normalScale),\\n                roughness: (0, std___std_all_1.__deepClone)(this.roughness),\\n                emissive: (0, std___std_all_1.__deepClone)(this.emissive),\\n                metallic: (0, std___std_all_1.__deepClone)(this.metallic),\\n            });\\n        };\\n        Material.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_23155_Material\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"baseColor\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normalScale\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"roughness\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"emissive\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"metallic\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}]]}\\\");\\n        };\\n        return Material;\\n    }());\\n    exports.Material = Material;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_23155_Material\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"baseColor\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normalScale\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"roughness\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"emissive\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"metallic\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}]]}\\\"), Material)\\n    ;\\n    var ModelPart = /** @class */ (function () {\\n        function ModelPart(data) {\\n            var _a, _b, _c;\\n            this.mesh = (_a = data.mesh) !== null && _a !== void 0 ? _a : new Mesh({});\\n            this.material = (_b = data.material) !== null && _b !== void 0 ? _b : new Material({});\\n            this.transform = (_c = data.transform) !== null && _c !== void 0 ? _c : __.float4x4(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\\n        }\\n        ModelPart.prototype.clone = function () {\\n            return new ModelPart({\\n                mesh: (0, std___std_all_1.__deepClone)(this.mesh),\\n                material: (0, std___std_all_1.__deepClone)(this.material),\\n                transform: (0, std___std_all_1.__deepClone)(this.transform),\\n            });\\n        };\\n        ModelPart.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_24321_ModelPart\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"mesh\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_1603_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",null]]}],[\\\\\\\"material\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_23155_Material\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"baseColor\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normalScale\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"roughness\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"emissive\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"metallic\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}]]}],[\\\\\\\"transform\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4x4\\\\\\\"}]]}\\\");\\n        };\\n        return ModelPart;\\n    }());\\n    exports.ModelPart = ModelPart;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_24321_ModelPart\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"mesh\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_1603_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",null]]}],[\\\\\\\"material\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_23155_Material\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"baseColor\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normalScale\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"roughness\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"emissive\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"metallic\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}]]}],[\\\\\\\"transform\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4x4\\\\\\\"}]]}\\\"), ModelPart)\\n    ;\\n    var Model = /** @class */ (function () {\\n        function Model(data) {\\n            var _a;\\n            this.parts = (_a = data.parts) !== null && _a !== void 0 ? _a : [];\\n        }\\n        Model.prototype.clone = function () {\\n            return new Model({\\n                parts: (0, std___std_all_1.__deepClone)(this.parts),\\n            });\\n        };\\n        Model.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_24894_Model\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"parts\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_24321_ModelPart\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"mesh\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_1603_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",null]]}],[\\\\\\\"material\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_23155_Material\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"baseColor\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normalScale\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"roughness\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"emissive\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"metallic\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}]]}],[\\\\\\\"transform\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4x4\\\\\\\"}]]},\\\\\\\"staticSize\\\\\\\":1}]]}\\\");\\n        };\\n        return Model;\\n    }());\\n    exports.Model = Model;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_24894_Model\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"parts\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_24321_ModelPart\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"mesh\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_1603_Mesh\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"vertices\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"triangles\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"normals\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"tangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"bitangents\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"uvs\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"colors\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"},\\\\\\\"staticSize\\\\\\\":1}],[\\\\\\\"symbol\\\\\\\",null]]}],[\\\\\\\"material\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_mesh_ts_23155_Material\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"baseColor\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"color\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normal\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"normalScale\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"roughness\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"emissive\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}],[\\\\\\\"metallic\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"texture2d\\\\\\\"}]]}],[\\\\\\\"transform\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4x4\\\\\\\"}]]},\\\\\\\"staticSize\\\\\\\":1}]]}\\\"), Model)\\n    ;\\n    window.SHD_Mesh = Mesh;\\n    window.SHD_Model = Model;\\n    window.SHD_ModelPart = ModelPart;\\n    window.SHD_Material = Material;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/textures.ts\":{\"outputFiles\":[{\"name\":\"/_std/textures.js\",\"writeByteOrderMark\":false,\"text\":\"define([\\\"require\\\", \\\"exports\\\", \\\"/std___std_all\\\"], function (require, exports, std___std_all_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/common.ts\":{\"outputFiles\":[{\"name\":\"/_std/common.js\",\"writeByteOrderMark\":false,\"text\":\"var __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\\\"get\\\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\\n    Object.defineProperty(o, \\\"default\\\", { enumerable: true, value: v });\\n}) : function(o, v) {\\n    o[\\\"default\\\"] = v;\\n});\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n    if (mod && mod.__esModule) return mod;\\n    var result = {};\\n    if (mod != null) for (var k in mod) if (k !== \\\"default\\\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\\n    __setModuleDefault(result, mod);\\n    return result;\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"/std_math\\\", \\\"/std_math\\\", \\\"/std___std_all\\\", \\\"/_std/buffer\\\", \\\"/_std/ui\\\", \\\"/_std/texture\\\"], function (require, exports, __, std_math_1, std___std_all_1, buffer_1, ui_1, texture_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.wrap4 = exports.wrap3 = exports.wrap2 = exports.color = exports.remap1 = exports.remap = exports.tan1 = exports.cos1 = exports.sin1 = exports.hexFromColor = exports.hex = exports.cmykFromColor = exports.cmyk = exports.rgbaFromColor = exports.rgbFromColor = exports.rgba = exports.rgb = exports.hsvaFromColor = exports.hsvFromColor = exports.hsva = exports.hsv = exports.hslaFromColor = exports.hslFromColor = exports.hsla = exports.hsl = exports.screenAA = exports.matrix = exports.noise = exports.reverseMortonCode2 = exports.randColor2 = exports.randColor = exports.mortonCode2 = exports.spatial = exports.bezier = exports.Camera = exports.Camera2d = exports.quat = exports.ui = exports.texture3d = exports.texture2d = exports.buffer = exports.PI = exports.pixelToClip = void 0;\\n    __ = __importStar(__);\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n    Object.defineProperty(exports, \\\"buffer\\\", { enumerable: true, get: function () { return buffer_1.buffer; } });\\n    Object.defineProperty(exports, \\\"ui\\\", { enumerable: true, get: function () { return ui_1.ui; } });\\n    Object.defineProperty(exports, \\\"texture2d\\\", { enumerable: true, get: function () { return texture_1.texture2d; } });\\n    Object.defineProperty(exports, \\\"texture3d\\\", { enumerable: true, get: function () { return texture_1.texture3d; } });\\n    function pixelToClip(pixelPosition) {\\n        var _a, _b, _c, _d, _e, _f, _g;\\n        var zeroToOne = (_a = pixelPosition, _b = env.screenSize, [_a[0] / _b[0], _a[1] / _b[1]]);\\n        var zeroToTwo = (_c = zeroToOne, _d = 2.0, [_c[0] * _d, _c[1] * _d]);\\n        var clipSpace = (_e = zeroToTwo, _f = (_g = 1.0, [_g, _g]), [_e[0] - _f[0], _e[1] - _f[1]]);\\n        return __.makeVector(clipSpace[0], clipSpace[1] * (__.FM.negate_1(1.0)));\\n    }\\n    exports.pixelToClip = pixelToClip;\\n    ; /**\\n    * Value of PI to 35 decimal places.\\n    */\\n    var PI = (0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"PI\\\", function () { return 3.14159265358979323846264338327950288; }, function () { return PI; });\\n    exports.PI = PI;\\n    var quat = /** @class */ (function () {\\n        function quat(data) {\\n        }\\n        /**\\n            * Creates a quaternion from an angle and axis.\\n            */\\n        quat.fromAngleAxis = function (angle, axis) { return __.FM.float_4_3_1(__.mul(axis, Math.sin(angle * 0.5)), (0, std_math_1.cos)(angle * 0.5)); };\\n        /**\\n            * Multiplies two quaternions and returns the result.\\n            */\\n        quat.mul = function (a, b) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; return __.FM.float_4_3_1(__.add((_a = (_c = (_e = b, [_e[0], _e[1], _e[2]]), _d = a[3], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = (_f = (_h = a, [_h[0], _h[1], _h[2]]), _g = b[3], [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]), (0, std_math_1.cross)((_j = a, [_j[0], _j[1], _j[2]]), (_k = b, [_k[0], _k[1], _k[2]]))), __.sub(a[3] * b[3], (0, std_math_1.dot)((_l = a, [_l[0], _l[1], _l[2]]), (_m = b, [_m[0], _m[1], _m[2]])))); };\\n        /**\\n            * Rotates a vector by a quaternion and returns the rotated vector.\\n            */\\n        quat.rotate = function (quaternion, vector) {\\n            var _a;\\n            var q = quat.mul(quat.mul(quaternion, __.FM.float_4_3_1(vector, __.int(0))), quat.conjugate(quaternion));\\n            return _a = q, [_a[0], _a[1], _a[2]];\\n        };\\n        /**\\n            * Returns the conjugate of the input quaternion.\\n            *\\n            * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\\n            */\\n        quat.conjugate = function (quaternion) { var _a; return __.FM.float_4_3_1(__.negate((_a = quaternion, [_a[0], _a[1], _a[2]])), __.swizzle(quaternion, 'w')); };\\n        /**\\n            * Returns the inverse of the input quaternion.\\n            */\\n        quat.inverse = function (quaternion) { var _a, _b; return _a = quat.conjugate(quaternion), _b = (0, std_math_1.dot)(quaternion, quaternion), [_a[0] / _b, _a[1] / _b, _a[2] / _b, _a[3] / _b]; };\\n        /**\\n            * Generates a quaternion that rotates from one direction to another via the shortest path.\\n            */\\n        quat.fromToRotation = function (from, to) {\\n            var _a;\\n            var q = (_a = 0.0, [_a, _a, _a, _a]);\\n            var d = (0, std_math_1.dot)(from, to);\\n            if (d < (__.FM.negate_1(0.999999))) {\\n                var right = __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0));\\n                var up = __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0));\\n                var tmp = (0, std_math_1.cross)(right, from);\\n                if ((0, std_math_1.length)(tmp) < 0.000001) {\\n                    tmp = (0, std_math_1.cross)(up, from);\\n                }\\n                tmp = (0, std_math_1.normalize)(tmp);\\n                q = quat.fromAngleAxis(PI, tmp);\\n            }\\n            else if (d > 0.999999) {\\n                q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\\n            }\\n            else {\\n                q = __.FM.float_4_3_1((0, std_math_1.cross)(from, to), __.add((1 | 0), d));\\n                q = (0, std_math_1.normalize)(q);\\n            }\\n            return q;\\n        };\\n        quat.diff = function (a, b) { var _a, _b; return _a = a, _b = quat.inverse(b), [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]]; };\\n        /**\\n            * Generates lookAt quaternion.\\n            */\\n        quat.lookAt = function (forward, up) {\\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, up));\\n            up = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, right));\\n            var m00 = right[0];\\n            var m01 = right[1];\\n            var m02 = right[2];\\n            var m10 = up[0];\\n            var m11 = up[1];\\n            var m12 = up[2];\\n            var m20 = forward[0];\\n            var m21 = forward[1];\\n            var m22 = forward[2];\\n            var num8 = (m00 + m11) + m22;\\n            var q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\\n            if (num8 > 0.0) {\\n                var num = Math.sqrt(num8 + 1.0);\\n                var w_1 = num * 0.5;\\n                num = 0.5 / num;\\n                var x_1 = (m12 - m21) * num;\\n                var y_1 = (m20 - m02) * num;\\n                var z_1 = (m01 - m10) * num;\\n                return __.FM.float_4_1_1_1_1(x_1, y_1, z_1, w_1);\\n            }\\n            if (__.and((m00 >= m11), (m00 >= m22))) {\\n                var num7 = Math.sqrt(((1.0 + m00) - m11) - m22);\\n                var num4 = 0.5 / num7;\\n                var x_2 = 0.5 * num7;\\n                var y_2 = (m01 + m10) * num4;\\n                var z_2 = (m02 + m20) * num4;\\n                var w_2 = (m12 - m21) * num4;\\n                return __.FM.float_4_1_1_1_1(x_2, y_2, z_2, w_2);\\n            }\\n            if (m11 > m22) {\\n                var num6 = Math.sqrt(((1.0 + m11) - m00) - m22);\\n                var num3 = 0.5 / num6;\\n                var x_3 = (m10 + m01) * num3;\\n                var y_3 = 0.5 * num6;\\n                var z_3 = (m21 + m12) * num3;\\n                var w_3 = (m20 - m02) * num3;\\n                return __.FM.float_4_1_1_1_1(x_3, y_3, z_3, w_3);\\n            }\\n            var num5 = Math.sqrt(((1.0 + m22) - m00) - m11);\\n            var num2 = 0.5 / num5;\\n            var x = (m20 + m02) * num2;\\n            var y = (m21 + m12) * num2;\\n            var z = 0.5 * num5;\\n            var w = (m01 - m10) * num2;\\n            return __.FM.float_4_1_1_1_1(x, y, z, w);\\n        };\\n        /**\\n            * Smooth interpolation between two quaternions.\\n            */\\n        quat.slerp = function (a, b, t) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\\n            if ((0, std_math_1.length)(a) == 0.0) {\\n                if ((0, std_math_1.length)(b) == 0.0) {\\n                    return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\\n                }\\n                return b;\\n            }\\n            else if ((0, std_math_1.length)(b) == 0.0) {\\n                return a;\\n            }\\n            var cosHalfAngle = a[3] * b[3] + (0, std_math_1.dot)((_a = a, [_a[0], _a[1], _a[2]]), (_b = b, [_b[0], _b[1], _b[2]]));\\n            if (__.or(cosHalfAngle >= 1.0, cosHalfAngle <= (__.FM.negate_1(1.0)))) {\\n                return a;\\n            }\\n            else if (cosHalfAngle < 0.0) {\\n                b = (_c = b, _d = (__.FM.negate_1(1.0)), [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]);\\n                cosHalfAngle = (__.FM.negate_1(cosHalfAngle));\\n            }\\n            var blendA = 0.0;\\n            var blendB = 0.0;\\n            if (cosHalfAngle < 0.99) {\\n                var halfAngle = Math.acos(cosHalfAngle);\\n                var sinHalfAngle = Math.sin(halfAngle);\\n                var oneOverSinHalfAngle = 1.0 / sinHalfAngle;\\n                blendA = Math.sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\\n                blendB = Math.sin(halfAngle * t) * oneOverSinHalfAngle;\\n            }\\n            else {\\n                blendA = 1.0 - t;\\n                blendB = t;\\n            }\\n            var result = __.FM.float_4_3_1(__.add((_e = blendA, _f = (_g = a, [_g[0], _g[1], _g[2]]), [_e * _f[0], _e * _f[1], _e * _f[2]]), (_h = blendB, _j = (_k = b, [_k[0], _k[1], _k[2]]), [_h * _j[0], _h * _j[1], _h * _j[2]])), __.add(blendA * a[3], blendB * b[3]));\\n            if ((0, std_math_1.length)(result) > 0.0) {\\n                return (0, std_math_1.normalize)(result);\\n            }\\n            return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\\n        };\\n        /**\\n            * Converts quaternion to matrix.\\n            */\\n        quat.toMatrix = function (quaternion) {\\n            var x = quaternion[0];\\n            var y = quaternion[1];\\n            var z = quaternion[2];\\n            var w = quaternion[3];\\n            var x2 = x + x;\\n            var y2 = y + y;\\n            var z2 = z + z;\\n            var xx = x * x2;\\n            var xy = x * y2;\\n            var xz = x * z2;\\n            var yy = y * y2;\\n            var yz = y * z2;\\n            var zz = z * z2;\\n            var wx = w * x2;\\n            var wy = w * y2;\\n            var wz = w * z2;\\n            var m = __.float4x4(1.0 - (yy + zz), xy + wz, xz - wy, (0 | 0), xy - wz, 1.0 - (xx + zz), yz + wx, (0 | 0), xz + wy, yz - wx, 1.0 - (xx + yy), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0);\\n            return m;\\n        };\\n        quat.fromEulerAngles = function (angles) {\\n            var cr = Math.cos(angles[0] * 0.5);\\n            var sr = Math.sin(angles[0] * 0.5);\\n            var cp = Math.cos(angles[1] * 0.5);\\n            var sp = Math.sin(angles[1] * 0.5);\\n            var cy = Math.cos(angles[2] * 0.5);\\n            var sy = Math.sin(angles[2] * 0.5);\\n            return __.FM.float_4_1_1_1_1(__.sub(sr * cp * cy, cr * sp * sy), __.add(cr * sp * cy, sr * cp * sy), __.sub(cr * cp * sy, sr * sp * cy), __.add(cr * cp * cy, sr * sp * sy));\\n        };\\n        quat.prototype.clone = function () {\\n            return new quat({});\\n        };\\n        quat.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_2148_quat\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return quat;\\n    }());\\n    exports.quat = quat;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_2148_quat\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), quat)\\n    ; /* impl quat */\\n    window.shadeupQuat = quat;\\n    var Camera2d = /** @class */ (function () {\\n        function Camera2d(data) {\\n            var _a, _b;\\n            this.position = (_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(__.int(0), __.int(0));\\n            this.zoom = (_b = data.zoom) !== null && _b !== void 0 ? _b : (1 | 0);\\n        }\\n        Camera2d.prototype.transform = function (position) { var _a, _b, _c, _d; var shader_self_temp = this; return _a = (_c = position, _d = this.position, [_c[0] - _d[0], _c[1] - _d[1]]), _b = this.zoom, [_a[0] * _b, _a[1] * _b]; };\\n        /**\\n            * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\\n            */\\n        Camera2d.prototype.fit = function (size) {\\n            var _a, _b, _c, _d, _e, _f;\\n            var shader_self_temp = this;\\n            var zoom = (1 | 0) / (0, std_math_1.min)(env.screenSize[0] / size[0], env.screenSize[1] / size[1]);\\n            var position = (_a = (_c = env.screenSize, _d = (_e = size, _f = ((1 | 0) / zoom), [_e[0] * _f, _e[1] * _f]), [_c[0] - _d[0], _c[1] - _d[1]]), _b = (2 | 0), [_a[0] / _b, _a[1] / _b]);\\n            this.position = position;\\n            this.zoom = zoom;\\n        };\\n        Camera2d.prototype.clone = function () {\\n            return new Camera2d({\\n                position: (0, std___std_all_1.__deepClone)(this.position),\\n                zoom: (0, std___std_all_1.__deepClone)(this.zoom),\\n            });\\n        };\\n        Camera2d.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_9656_Camera2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"zoom\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}\\\");\\n        };\\n        return Camera2d;\\n    }());\\n    exports.Camera2d = Camera2d;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_9656_Camera2d\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"zoom\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}\\\"), Camera2d)\\n    ; /* impl Camera2d */\\n    var Camera = /** @class */ (function () {\\n        function Camera(data) {\\n            var _a, _b, _c, _d, _e, _f, _g;\\n            this.position = (_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0));\\n            this.rotation = (_b = data.rotation) !== null && _b !== void 0 ? _b : __.FM.float_4_1_1_1_1(__.int(1), __.int(0), __.int(0), __.int(0));\\n            this.width = (_c = data.width) !== null && _c !== void 0 ? _c : (1920 | 0);\\n            this.height = (_d = data.height) !== null && _d !== void 0 ? _d : (1080 | 0);\\n            this.fov = (_e = data.fov) !== null && _e !== void 0 ? _e : (90 | 0);\\n            this.near = (_f = data.near) !== null && _f !== void 0 ? _f : (1 | 0);\\n            this.far = (_g = data.far) !== null && _g !== void 0 ? _g : (100000 | 0);\\n        }\\n        Camera.prototype.getRay = function (screen) {\\n            var shader_self_temp = this;\\n            var aspect = this.width / this.height;\\n            var x = screen[0];\\n            var y = screen[1];\\n            var Px = ((2 | 0) * ((x + 0.5) / this.width) - (1 | 0)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0)) * aspect;\\n            var Py = ((1 | 0) - (2 | 0) * ((y + 0.5) / this.height)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0));\\n            return quat.rotate(this.rotation, (0, std_math_1.normalize)(__.makeVector(Px, Py, (__.FM.negate_1((1 | 0))))));\\n        };\\n        Camera.prototype.getTransformToViewMatrix = function (position, scale, rotation) {\\n            var shader_self_temp = this;\\n            var rotationMatrix = quat.toMatrix(rotation);\\n            var translationMatrix = __.float4x4(scale[0], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[1], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[2], (0 | 0), position[0], position[1], position[2], (1 | 0));\\n            return __.mul(__.mul(__.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()), translationMatrix), rotationMatrix);\\n        };\\n        Camera.prototype.getCombinedMatrix = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()); };\\n        Camera.prototype.getCombinedMatrixReverseZ = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrixReverseZ(), this.getWorldToViewMatrix()); };\\n        Camera.prototype.getWorldToViewMatrix = function () {\\n            var shader_self_temp = this;\\n            var rotationMatrix = quat.toMatrix(this.rotation);\\n            var translationMatrix = __.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), this.position[0], this.position[1], this.position[2], (1 | 0));\\n            return (0, std_math_1.inverse)(__.mul(translationMatrix, rotationMatrix));\\n        };\\n        Camera.prototype.getPerspectiveMatrixReverseZ = function () { var shader_self_temp = this; return matrix.perspectiveReverseZ(this.fov, this.width / this.height, this.near); };\\n        Camera.prototype.getPerspectiveMatrix = function () {\\n            var shader_self_temp = this;\\n            return matrix.perspective(this.fov, this.width / this.height, this.near, this.far); // // let matrix = float4x4();\\n            // let far = self.far;\\n            // let near = self.near;\\n            // let aspect = self.width / self.height;\\n            // let fovRad = radians(self.fov);\\n            // let tanFov = tan( fovRad * 0.5 );\\n            // // matrix[0][0] = ;\\n            // // matrix[1][1] = 1.0 / tanFov;\\n            // // matrix[2][2] = -((far + near)/(far - near));\\n            // // matrix[3][2] = -((2*(near*far))/(far - near));\\n            // // matrix[2][3] = -1;\\n            // // matrix[3][3] = 0;\\n            // let matrix = float4x4(\\n            //     1.0 / (tanFov * aspect), 0, 0, 0,\\n            //     0, 1.0 / tanFov, 0, 0,\\n            //     0, 0, -((far + near)/(far - near)), -1,\\n            //     0, 0, -((2*(near*far))/(far - near)), 0\\n            // );\\n            // return matrix;\\n        };\\n        Camera.prototype.getOrthographicMatrix = function () {\\n            var shader_self_temp = this;\\n            var matrix = __.float4x4();\\n            var far = this.far;\\n            var near = this.near;\\n            var w = 1.0 / this.width;\\n            var h = 1.0 / this.height;\\n            matrix.__index((0 | 0)).__index_assign((0 | 0), w);\\n            matrix.__index((1 | 0)).__index_assign((1 | 0), h);\\n            matrix.__index((2 | 0)).__index_assign((2 | 0), (__.FM.negate_1((2.0 / (far - near)))));\\n            matrix.__index((2 | 0)).__index_assign((3 | 0), ((far + near) / (far - near)));\\n            //matrix[2][2] = -((far + near)/(far - near));\\n            //matrix[3][2] = -((2*(near*far))/(far - near));\\n            matrix.__index((3 | 0)).__index_assign((3 | 0), 1.0);\\n            return matrix;\\n        };\\n        Camera.prototype.clone = function () {\\n            return new Camera({\\n                position: (0, std___std_all_1.__deepClone)(this.position),\\n                rotation: (0, std___std_all_1.__deepClone)(this.rotation),\\n                width: (0, std___std_all_1.__deepClone)(this.width),\\n                height: (0, std___std_all_1.__deepClone)(this.height),\\n                fov: (0, std___std_all_1.__deepClone)(this.fov),\\n                near: (0, std___std_all_1.__deepClone)(this.near),\\n                far: (0, std___std_all_1.__deepClone)(this.far),\\n            });\\n        };\\n        Camera.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_10663_Camera\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"rotation\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"width\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"height\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"fov\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"near\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"far\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}\\\");\\n        };\\n        return Camera;\\n    }());\\n    exports.Camera = Camera;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_10663_Camera\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"position\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float3\\\\\\\"}],[\\\\\\\"rotation\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"width\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"height\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"fov\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"near\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"far\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}\\\"), Camera)\\n    ; /* impl Camera */\\n    window._makeCamera = Camera;\\n    window._makeCamera2d = Camera2d;\\n    function easeA(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\\n    function easeB(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\\n    function easeC(aA1) { return 3.0 * aA1; }\\n    function calcBezier(aT, aA1, aA2) { return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT; }\\n    function getSlope(aT, aA1, aA2) { return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1); }\\n    // fn getTForX(aX: float, aA1: float, aA2: float) -> float {\\n    //     let aGuessT = aX;\\n    //     for (let i = 0; i <= 10; i++) {\\n    //         let currentSlope = bezSlope(aGuessT, aA1, aA2);\\n    //         if (currentSlope == 0.0) {\\n    //             return aGuessT;\\n    //         }\\n    //         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\\n    //         aGuessT -= currentX / currentSlope;\\n    //     }\\n    //     return aGuessT;\\n    // }\\n    var NEWTON_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"NEWTON_ITERATIONS\\\", function () { return (4 | 0); }, function () { return NEWTON_ITERATIONS; }) | 0);\\n    var NEWTON_MIN_SLOPE = (0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"NEWTON_MIN_SLOPE\\\", function () { return 0.02; }, function () { return NEWTON_MIN_SLOPE; });\\n    var SUBDIVISION_PRECISION = (0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"SUBDIVISION_PRECISION\\\", function () { return 0.0000001; }, function () { return SUBDIVISION_PRECISION; });\\n    var SUBDIVISION_MAX_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"SUBDIVISION_MAX_ITERATIONS\\\", function () { return (10 | 0); }, function () { return SUBDIVISION_MAX_ITERATIONS; }) | 0);\\n    var kSplineTableSize = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"kSplineTableSize\\\", function () { return (11 | 0); }, function () { return kSplineTableSize; }) | 0);\\n    var kSampleStepSize = (0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"kSampleStepSize\\\", function () { return 1.0 / __.sub(kSplineTableSize, (1 | 0)); }, function () { return kSampleStepSize; });\\n    function getTForX(aX, mX1, mX2) {\\n        var mSampleValues = (0, std___std_all_1.array)((11 | 0), (0 | 0));\\n        for (var i = (0 | 0); i < kSplineTableSize; i++) {\\n            mSampleValues.__index_assign(i, calcBezier(i * kSampleStepSize, mX1, mX2));\\n        } // Find interval where t lies\\n        var intervalStart = 0.0;\\n        var currentSample = (1 | 0);\\n        var lastSample = kSplineTableSize - (1 | 0);\\n        for (var dummy = (0 | 0); __.and(currentSample != lastSample, mSampleValues[currentSample] <= aX); currentSample++) {\\n            intervalStart = intervalStart + kSampleStepSize;\\n        }\\n        currentSample--;\\n        // t now lies between *currentSample and *currentSample+1\\n        // Interpolate to provide an initial guess for t\\n        var csamp = mSampleValues[currentSample];\\n        var dst = (aX - csamp) / (mSampleValues[currentSample + (1 | 0)] - csamp);\\n        var guessForT = intervalStart + dst * kSampleStepSize;\\n        // Check the slope to see what strategy to use. If the slope is too small\\n        // Newton-Raphson iteration won't converge on a root so we use bisection\\n        // instead.\\n        var initialSlope = getSlope(guessForT, mX1, mX2);\\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\\n            return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\\n        }\\n        else if (initialSlope == 0.0) {\\n            return guessForT;\\n        }\\n        else {\\n            return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\\n        }\\n    }\\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\\n        for (var i = (0 | 0); i < NEWTON_ITERATIONS; i++) { // We're trying to find where f(t) = aX,\\n            // so we're actually looking for a root for: CalcBezier(t) - aX\\n            var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\\n            var currentSlope = getSlope(aGuessT, mX1, mX2);\\n            if (currentSlope == 0.0)\\n                return aGuessT;\\n            aGuessT = aGuessT - currentX / currentSlope;\\n        }\\n        return aGuessT;\\n    }\\n    function binarySubdivide(aX, aA, aB) {\\n        var currentX = 0.0;\\n        var currentT = 0.0;\\n        var i = (0 | 0);\\n        while ((true)) {\\n            i++;\\n            if (__.and(Math.abs(currentX) > SUBDIVISION_PRECISION, i < SUBDIVISION_MAX_ITERATIONS)) {\\n                currentT = aA + (aB - aA) / 2.0;\\n                currentX = __.sub(CalcBezier(currentT, mX1, mX2), aX);\\n                if (currentX > 0.0) {\\n                    aB = currentT;\\n                }\\n                else {\\n                    aA = currentT;\\n                }\\n            }\\n            else {\\n                break;\\n            }\\n        }\\n        return currentT;\\n    }\\n    var bezier = /** @class */ (function () {\\n        function bezier(data) {\\n        }\\n        bezier.cubic2 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1]]), [_e[0] + _f[0], _e[1] + _f[1]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\\n        bezier.cubic3 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1], _g * _h[2]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1], _l * _m[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1], _o * _p[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\\n        bezier.quadratic2 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\\n        bezier.quadratic3 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1], _e * _f[2]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1], _g * _h[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\\n        /**\\n            * 3d triangle patch evaulation with barycentric coordinates.\\n            */\\n        bezier.patch = function (a, ab, b, bc, c, ca, barycentricT) { return (__.mul(__.f(1., c), ((__.mul(s, s) | 0))) | 0) + (__.mul((__.mul(__.f(2., bc), s) | 0), t) | 0) + (__.mul((__.mul(__.f(2., ca), s) | 0), u) | 0) + (__.mul(__.f(1., b), ((__.mul(t, t) | 0))) | 0) + (__.mul((__.mul(__.f(2., ab), t) | 0), u) | 0) + (__.mul(__.f(1., a), ((__.mul(u, u) | 0))) | 0); };\\n        bezier.easing = function (controlA, controlB, t) { return calcBezier(getTForX(t, controlA[0], controlB[0]), controlA[1], controlB[1]); };\\n        bezier.prototype.clone = function () {\\n            return new bezier({});\\n        };\\n        bezier.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_20330_bezier\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return bezier;\\n    }());\\n    exports.bezier = bezier;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_20330_bezier\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), bezier)\\n    ; /* impl bezier */\\n    /**\\n    * Provides space related utilities like z-order curves and quadtrees.\\n    */\\n    var spatial = /** @class */ (function () {\\n        function spatial(data) {\\n        }\\n        spatial.cantorPair = function (v) { return ((v[0] + v[1]) * (v[0] + v[1] + (1 | 0))) / (2 | 0) + v[1]; };\\n        spatial.cantorUnpair = function (v) {\\n            var w = Math.floor((Math.sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\\n            var t = (w * w + w) / 2.0;\\n            var y = v - t;\\n            var x = w - y;\\n            return __.FM.int_2_1_1(x, y);\\n        };\\n        spatial.hilbertRotate = function (n, b, r) {\\n            var x = b[0];\\n            var y = b[1];\\n            if (r[1] == (0 | 0)) {\\n                if (r[0] == (1 | 0)) {\\n                    x = n - (1 | 0) - x;\\n                    y = n - (1 | 0) - y;\\n                }\\n                var t = x;\\n                x = y;\\n                y = t;\\n            }\\n            return __.FM.int_2_1_1(x, y);\\n        };\\n        spatial.hilbertUncurve = function (n, v) {\\n            var x = v[0];\\n            var y = v[1];\\n            var rx = (0 | 0);\\n            var ry = (0 | 0);\\n            var s = (0 | 0);\\n            var d = (0 | 0);\\n            for (s = n / (2 | 0); s > (0 | 0); s = s / (2 | 0)) {\\n                rx = ((x & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\\n                ry = ((y & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\\n                d = d + s * s * (((3 | 0) * rx) ^ ry);\\n                var o = __.intifyVector(spatial.hilbertRotate(n, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\\n                x = o[0];\\n                y = o[1];\\n            }\\n            return d;\\n        };\\n        spatial.hilbertCurve = function (n, v) {\\n            var rx = (0 | 0);\\n            var ry = (0 | 0);\\n            var t = v;\\n            var x = (0 | 0);\\n            var y = (0 | 0);\\n            for (var s = (1 | 0); s < n; s = s * (2 | 0)) {\\n                rx = (1 | 0) & (t / (2 | 0));\\n                ry = (1 | 0) & (t ^ rx);\\n                var o = __.intifyVector(spatial.hilbertRotate(s, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\\n                x = o[0];\\n                y = o[1];\\n                x = x + s * rx;\\n                y = y + s * ry;\\n                t = t / (4 | 0);\\n            }\\n            return __.FM.int_2_1_1(x, y);\\n        };\\n        spatial.mortonDecode = function (p) { return __.FM.uint_2_1_1(reverseMortonCode2(p), reverseMortonCode2(p >> (1 >>> 0))); };\\n        spatial.mortonEncode = function (p) { return (__.bitor(mortonCode2(p[0]), (mortonCode2(p[1]) << (1 >>> 0))) >>> 0); };\\n        spatial.prototype.clone = function () {\\n            return new spatial({});\\n        };\\n        spatial.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_22749_spatial\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return spatial;\\n    }());\\n    exports.spatial = spatial;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_22749_spatial\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), spatial)\\n    ; /* impl spatial */\\n    function mortonCode2(x) {\\n        x = x & (0x0000ffff >>> 0);\\n        x = (__.bitxor(x, (x << (8 | 0)))) & (0x00ff00ff >>> 0);\\n        x = (__.bitxor(x, (x << (4 | 0)))) & (0x0f0f0f0f >>> 0);\\n        x = (__.bitxor(x, (x << (2 | 0)))) & (0x33333333 >>> 0);\\n        x = (__.bitxor(x, (x << (1 | 0)))) & (0x55555555 >>> 0);\\n        return x;\\n    }\\n    exports.mortonCode2 = mortonCode2;\\n    ;\\n    function randColor(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand2)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (4 | 0))), __.int(1)); }\\n    exports.randColor = randColor;\\n    ;\\n    function randColor2(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand3)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (4 | 0))), __.int(1)); }\\n    exports.randColor2 = randColor2;\\n    ;\\n    function reverseMortonCode2(x) {\\n        x = x & (0x55555555 >>> 0);\\n        x = (__.bitxor(x, (x >> (1 | 0)))) & (0x33333333 >>> 0);\\n        x = (__.bitxor(x, (x >> (2 | 0)))) & (0x0f0f0f0f >>> 0);\\n        x = (__.bitxor(x, (x >> (4 | 0)))) & (0x00ff00ff >>> 0);\\n        x = (__.bitxor(x, (x >> (8 | 0)))) & (0x0000ffff >>> 0);\\n        return x;\\n    }\\n    exports.reverseMortonCode2 = reverseMortonCode2;\\n    ;\\n    var noise = /** @class */ (function () {\\n        function noise(data) {\\n        }\\n        noise.gaussian3 = function (v) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;\\n            var p = v;\\n            var a = (_a = p, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\\n            var d = (_b = p, _c = a, [_b[0] - _c[0], _b[1] - _c[1], _b[2] - _c[2]]);\\n            d = (_d = (_f = d, _g = d, [_f[0] * _g[0], _f[1] * _g[1], _f[2] * _g[2]]), _e = (_h = 3.0, _j = (_k = 2.0, _l = d, [_k * _l[0], _k * _l[1], _k * _l[2]]), [_h - _j[0], _h - _j[1], _h - _j[2]]), [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]);\\n            var b = (_m = (_p = a, [_p[0], _p[0], _p[1], _p[1]]), _o = __.FM.float_4_1_1_1_1(__.float(0.0), __.float(1.0), __.float(0.0), __.float(1.0)), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2], _m[3] + _o[3]]);\\n            var k1 = perm((_q = b, [_q[0], _q[1], _q[0], _q[1]]));\\n            var k2 = perm((_r = (_t = k1, [_t[0], _t[1], _t[0], _t[1]]), _s = (_u = b, [_u[2], _u[2], _u[3], _u[3]]), [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2], _r[3] + _s[3]]));\\n            var c = (_v = k2, _w = (_x = a, [_x[2], _x[2], _x[2], _x[2]]), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2], _v[3] + _w[3]]);\\n            var k3 = perm(c);\\n            var k4 = perm((_y = c, _z = 1.0, [_y[0] + _z, _y[1] + _z, _y[2] + _z, _y[3] + _z]));\\n            var o1 = (0, std_math_1.frac)((_0 = k3, _1 = (1.0 / 41.0), [_0[0] * _1, _0[1] * _1, _0[2] * _1, _0[3] * _1]));\\n            var o2 = (0, std_math_1.frac)((_2 = k4, _3 = (1.0 / 41.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3, _2[3] * _3]));\\n            var o3 = (_4 = (_6 = o2, _7 = d[2], [_6[0] * _7, _6[1] * _7, _6[2] * _7, _6[3] * _7]), _5 = (_8 = o1, _9 = (1.0 - d[2]), [_8[0] * _9, _8[1] * _9, _8[2] * _9, _8[3] * _9]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2], _4[3] + _5[3]]);\\n            var o4 = (_10 = (_12 = (_14 = o3, [_14[1], _14[3]]), _13 = d[0], [_12[0] * _13, _12[1] * _13]), _11 = (_15 = (_17 = o3, [_17[0], _17[2]]), _16 = (1.0 - d[0]), [_15[0] * _16, _15[1] * _16]), [_10[0] + _11[0], _10[1] + _11[1]]);\\n            return o4[1] * d[1] + o4[0] * (1.0 - d[1]);\\n        };\\n        noise.gaussian2 = function (v) { return noise.gaussian3(__.makeVector(v, (0 | 0))); };\\n        noise.noise1 = function (x) {\\n            var i = Math.floor(x);\\n            var f = (0, std_math_1.frac)(x);\\n            var u = f * f * (3.0 - 2.0 * f);\\n            return (0, std_math_1.lerp)(hash(i), hash(i + 1.0), u);\\n        };\\n        noise.noise2 = function (x) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1])]);\\n            var f = (0, std_math_1.frac)(x);\\n            // Four corners in 2D of a tile\\n            var a = hash2(i);\\n            var b = hash2((_b = i, _c = __.FM.float_2_1_1(__.float(1.0), __.float(0.0)), [_b[0] + _c[0], _b[1] + _c[1]]));\\n            var c = hash2((_d = i, _e = __.FM.float_2_1_1(__.float(0.0), __.float(1.0)), [_d[0] + _e[0], _d[1] + _e[1]]));\\n            var d = hash2((_f = i, _g = __.FM.float_2_1_1(__.float(1.0), __.float(1.0)), [_f[0] + _g[0], _f[1] + _g[1]]));\\n            // Simple 2D lerp using smoothstep envelope between the values.\\n            // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\\n            //\\t\\t\\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\\n            //\\t\\t\\tsmoothstep(0.0, 1.0, f.y)));\\n            // Same code, with the clamps in smoothstep and common subexpressions\\n            // optimized away.\\n            var u = (_h = (_k = f, _l = f, [_k[0] * _l[0], _k[1] * _l[1]]), _j = (_m = 3.0, _o = (_p = 2.0, _q = f, [_p * _q[0], _p * _q[1]]), [_m - _o[0], _m - _o[1]]), [_h[0] * _j[0], _h[1] * _j[1]]);\\n            return (0, std_math_1.lerp)(a, b, u[0]) + (c - a) * u[1] * (1.0 - u[0]) + (d - b) * u[0] * u[1];\\n        };\\n        noise.fmb1 = function (x) {\\n            var v = 0.0;\\n            var a = 0.5;\\n            var shift = __.int(100);\\n            for (var i = (0 | 0); i < (5 | 0); i++) {\\n                v = v + a * noise.noise1(x);\\n                x = x * 2.0 + shift;\\n                a = a * 0.5;\\n            }\\n            return v;\\n        };\\n        noise.fbm2 = function (x) {\\n            var _a, _b, _c, _d;\\n            var v = 0.0;\\n            var a = 0.5;\\n            var shift = __.FM.float_2_2(__.swizzle((100 | 0), \\\"xy\\\"));\\n            // Rotate to reduce axial bias\\n            var rot = __.float2x2(Math.cos(0.5), Math.sin(0.5), (__.FM.negate_1(Math.sin(0.5))), Math.cos(0.50));\\n            for (var i = (0 | 0); i < (5 | 0); i++) {\\n                v = v + a * noise.noise2(x);\\n                x = (_a = (_c = __.mul(rot, x), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1]]);\\n                a = a * 0.5;\\n            }\\n            return v;\\n        };\\n        noise.fbm3 = function (x) {\\n            var _a, _b, _c, _d;\\n            var v = 0.0;\\n            var a = 0.5;\\n            var shift = __.FM.float_3_3(__.swizzle((100 | 0), \\\"xyz\\\"));\\n            for (var i = (0 | 0); i < (5 | 0); i++) {\\n                v = v + a * noise.noise3(x);\\n                x = (_a = (_c = x, _d = 2.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]);\\n                a = a * 0.5;\\n            }\\n            return v;\\n        };\\n        noise.noise3 = function (x) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\\n            var step = __.FM.float_3_1_1_1(__.int(110), __.int(241), __.int(171));\\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\\n            var f = (0, std_math_1.frac)(x);\\n            // For performance, compute the base input to a 1D hash from the integer part of the argument and the \\n            // incremental change to the 1D based on the 3D -> 1D wrapping\\n            var n = (0, std_math_1.dot)(i, step);\\n            var u = (_b = (_d = f, _e = f, [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]), _c = (_f = 3.0, _g = (_h = 2.0, _j = f, [_h * _j[0], _h * _j[1], _h * _j[2]]), [_f - _g[0], _f - _g[1], _f - _g[2]]), [_b[0] * _c[0], _b[1] * _c[1], _b[2] * _c[2]]);\\n            return (0, std_math_1.lerp)((0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(0)))), u[0]), u[1]), (0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(1)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(1)))), u[0]), u[1]), u[2]);\\n        };\\n        noise.simplex2 = function (v) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;\\n            var C = __.FM.float_4_1_1_1_1(__.float(0.211324865405187), __.float(0.366025403784439), __.negate(0.577350269189626), __.float(0.024390243902439));\\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1]])), [_b[0] + _c, _b[1] + _c]), [Math.floor(_a[0]), Math.floor(_a[1])]);\\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0]])), [_e[0] + _f, _e[1] + _f]);\\n            var xv = (0, std_math_1.step)(x0[1], x0[0]);\\n            var i1 = __.FM.float_2_1_1(xv, __.sub(1.0, xv));\\n            var x1 = (_k = (_m = x0, _o = (_p = C, [_p[0], _p[0]]), [_m[0] + _o[0], _m[1] + _o[1]]), _l = i1, [_k[0] - _l[0], _k[1] - _l[1]]);\\n            var x2 = (_q = x0, _r = (_s = C, [_s[2], _s[2]]), [_q[0] + _r[0], _q[1] + _r[1]]);\\n            i = mod289_2(i);\\n            var p = permute((_t = (_v = permute((_x = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.float(1.0)), _y = i[1], [_x[0] + _y, _x[1] + _y, _x[2] + _y])), _w = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.float(1.0)), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2]]), _u = i[0], [_t[0] + _u, _t[1] + _u, _t[2] + _u]));\\n            var m = (0, std_math_1.max)((_z = (_1 = 0.5, [_1, _1, _1]), _0 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_z[0] - _0[0], _z[1] - _0[1], _z[2] - _0[2]]), 0.0);\\n            m = (_2 = m, _3 = m, [_2[0] * _3[0], _2[1] * _3[1], _2[2] * _3[2]]);\\n            m = (_4 = m, _5 = m, [_4[0] * _5[0], _4[1] * _5[1], _4[2] * _5[2]]);\\n            var x = (_6 = (_8 = 2.0, _9 = (0, std_math_1.frac)((_10 = p, _11 = (_12 = C, [_12[3], _12[3], _12[3]]), [_10[0] * _11[0], _10[1] * _11[1], _10[2] * _11[2]])), [_8 * _9[0], _8 * _9[1], _8 * _9[2]]), _7 = 1.0, [_6[0] - _7, _6[1] - _7, _6[2] - _7]);\\n            var h = (_13 = (_15 = x, [Math.abs(_15[0]), Math.abs(_15[1]), Math.abs(_15[2])]), _14 = 0.5, [_13[0] - _14, _13[1] - _14, _13[2] - _14]);\\n            var ox = (_16 = (_17 = x, _18 = 0.5, [_17[0] + _18, _17[1] + _18, _17[2] + _18]), [Math.floor(_16[0]), Math.floor(_16[1]), Math.floor(_16[2])]);\\n            var a0 = (_19 = x, _20 = ox, [_19[0] - _20[0], _19[1] - _20[1], _19[2] - _20[2]]);\\n            // Normalise gradients implicitly by scaling m\\n            m = (_21 = m, _22 = taylorInvSqrt((_23 = (_25 = a0, _26 = a0, [_25[0] * _26[0], _25[1] * _26[1], _25[2] * _26[2]]), _24 = (_27 = h, _28 = h, [_27[0] * _28[0], _27[1] * _28[1], _27[2] * _28[2]]), [_23[0] + _24[0], _23[1] + _24[1], _23[2] + _24[2]])), [_21[0] * _22[0], _21[1] * _22[1], _21[2] * _22[2]]);\\n            // Compute final noise value at P\\n            var g = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\\n            return 130.0 * (0, std_math_1.dot)(m, g);\\n        };\\n        noise.perlin2 = function (v) {\\n            var x = v[0];\\n            var y = v[1];\\n            var z = 0.0;\\n            if (x < (0 | 0)) {\\n                x = (__.FM.negate_1(x));\\n            }\\n            if (y < (0 | 0)) {\\n                y = (__.FM.negate_1(y));\\n            }\\n            if (z < (0 | 0)) {\\n                z = (__.FM.negate_1(z));\\n            }\\n            var xi = ((0, std_math_1.floor)(x) | 0);\\n            var yi = ((0, std_math_1.floor)(y) | 0);\\n            var zi = ((0, std_math_1.floor)(z) | 0);\\n            var xf = x - xi;\\n            var yf = y - yi;\\n            var zf = z - zi;\\n            var rxf = 0.0;\\n            var ryf = 0.0;\\n            var r = 0.0;\\n            var ampl = 0.5;\\n            var n1 = 0.0;\\n            var n2 = 0.0;\\n            var n3 = 0.0;\\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\\n                rxf = scaled_cosine(xf);\\n                ryf = scaled_cosine(yf);\\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\\n                n1 = n1 + ryf * (n2 - n1);\\n                of1 = of1 + PERLIN_ZWRAP;\\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\\n                n2 = n2 + ryf * (n3 - n2);\\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\\n                r = r + n1 * ampl;\\n                ampl = ampl * perlin_amp_falloff;\\n                xi = xi << (1 | 0);\\n                xf = xf * 2.0;\\n                yi = yi << (1 | 0);\\n                yf = yf * 2.0;\\n                zi = zi << (1 | 0);\\n                zf = zf * 2.0;\\n                if (xf >= 1.0) {\\n                    xi++;\\n                    xf = xf - 1.0;\\n                }\\n                if (yf >= 1.0) {\\n                    yi++;\\n                    yf = yf - 1.0;\\n                }\\n                if (zf >= 1.0) {\\n                    zi++;\\n                    zf = zf - 1.0;\\n                }\\n            }\\n            return r;\\n        };\\n        noise.perlin3 = function (v) {\\n            var x = v[0];\\n            var y = v[1];\\n            var z = v[2];\\n            if (x < (0 | 0)) {\\n                x = (__.FM.negate_1(x));\\n            }\\n            if (y < (0 | 0)) {\\n                y = (__.FM.negate_1(y));\\n            }\\n            if (z < (0 | 0)) {\\n                z = (__.FM.negate_1(z));\\n            }\\n            var xi = ((0, std_math_1.floor)(x) | 0);\\n            var yi = ((0, std_math_1.floor)(y) | 0);\\n            var zi = ((0, std_math_1.floor)(z) | 0);\\n            var xf = x - xi;\\n            var yf = y - yi;\\n            var zf = z - zi;\\n            var rxf = 0.0;\\n            var ryf = 0.0;\\n            var r = 0.0;\\n            var ampl = 0.5;\\n            var n1 = 0.0;\\n            var n2 = 0.0;\\n            var n3 = 0.0;\\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\\n                rxf = scaled_cosine(xf);\\n                ryf = scaled_cosine(yf);\\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\\n                n1 = n1 + ryf * (n2 - n1);\\n                of1 = of1 + PERLIN_ZWRAP;\\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\\n                n2 = n2 + ryf * (n3 - n2);\\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\\n                r = r + n1 * ampl;\\n                ampl = ampl * perlin_amp_falloff;\\n                xi = xi << (1 | 0);\\n                xf = xf * 2.0;\\n                yi = yi << (1 | 0);\\n                yf = yf * 2.0;\\n                zi = zi << (1 | 0);\\n                zf = zf * 2.0;\\n                if (xf >= 1.0) {\\n                    xi++;\\n                    xf = xf - 1.0;\\n                }\\n                if (yf >= 1.0) {\\n                    yi++;\\n                    yf = yf - 1.0;\\n                }\\n                if (zf >= 1.0) {\\n                    zi++;\\n                    zf = zf - 1.0;\\n                }\\n            }\\n            return r;\\n        };\\n        /**\\n            * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\\n            */\\n        noise.voronoi2 = function (v) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\\n            var n = (_a = v, [Math.floor(_a[0]), Math.floor(_a[1])]);\\n            var minDist = 10.0;\\n            var toClose = (_b = 0.0, [_b, _b]);\\n            var closestCell = (_c = 0.0, [_c, _c]);\\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\\n                    var cell = (_d = n, _e = __.FM.float_2_1_1(i, j), [_d[0] + _e[0], _d[1] + _e[1]]);\\n                    var cellPos = (_f = cell, _g = hash2(cell), [_f[0] + _g, _f[1] + _g]);\\n                    var toCell = (_h = cellPos, _j = v, [_h[0] - _j[0], _h[1] - _j[1]]);\\n                    var dst = (0, std_math_1.length)(toCell);\\n                    if (dst < minDist) {\\n                        minDist = dst;\\n                        toClose = toCell;\\n                        closestCell = cell;\\n                    }\\n                }\\n            }\\n            var minEdge = 10.0;\\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\\n                    var cell = (_k = n, _l = __.FM.float_2_1_1(i, j), [_k[0] + _l[0], _k[1] + _l[1]]);\\n                    var cellPos = (_m = cell, _o = hash2(cell), [_m[0] + _o, _m[1] + _o]);\\n                    var toCell = (_p = cellPos, _q = v, [_p[0] - _q[0], _p[1] - _q[1]]);\\n                    var diff = (_r = (_s = closestCell, _t = cell, [_s[0] - _t[0], _s[1] - _t[1]]), [Math.abs(_r[0]), Math.abs(_r[1])]);\\n                    var isClosest = diff[0] + diff[1] < 0.1;\\n                    if (__.not(isClosest)) {\\n                        var toCenter = (_u = (_w = toClose, _x = toCell, [_w[0] + _x[0], _w[1] + _x[1]]), _v = 0.5, [_u[0] * _v, _u[1] * _v]);\\n                        var cellDiff = (0, std_math_1.normalize)((_y = toCell, _z = toClose, [_y[0] - _z[0], _y[1] - _z[1]]));\\n                        var edge = (0, std_math_1.dot)(toCenter, cellDiff);\\n                        minEdge = (0, std_math_1.min)(minEdge, edge);\\n                    }\\n                }\\n            }\\n            var random = hash2(closestCell);\\n            return __.FM.float_3_1_1_1(minDist, random, minEdge);\\n        };\\n        noise.simplex3 = function (v) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56;\\n            var C = __.FM.float_4_1_1_1_1(__.float(0.138196601125011), __.float(0.276393202250021), __.float(0.414589803375032), __.negate(0.447213595499958));\\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1], _d[1]])), [_b[0] + _c, _b[1] + _c, _b[2] + _c]), [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0], _j[0]])), [_e[0] + _f, _e[1] + _f, _e[2] + _f]);\\n            var g = (0, std_math_1.step)((_k = x0, [_k[1], _k[2], _k[0]]), (_l = x0, [_l[0], _l[1], _l[2]]));\\n            var l = (_m = 1.0, _o = g, [_m - _o[0], _m - _o[1], _m - _o[2]]);\\n            var i1 = (0, std_math_1.min)((_p = g, [_p[0], _p[1], _p[2]]), (_q = l, [_q[2], _q[0], _q[1]]));\\n            var i2 = (0, std_math_1.max)((_r = g, [_r[0], _r[1], _r[2]]), (_s = l, [_s[2], _s[0], _s[1]]));\\n            var x1 = (_t = (_v = x0, _w = i1, [_v[0] - _w[0], _v[1] - _w[1], _v[2] - _w[2]]), _u = (_x = 1.0, _y = (_z = C, [_z[0], _z[0], _z[0]]), [_x * _y[0], _x * _y[1], _x * _y[2]]), [_t[0] + _u[0], _t[1] + _u[1], _t[2] + _u[2]]);\\n            var x2 = (_0 = (_2 = x0, _3 = i2, [_2[0] - _3[0], _2[1] - _3[1], _2[2] - _3[2]]), _1 = (_4 = 2.0, _5 = (_6 = C, [_6[0], _6[0], _6[0]]), [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), [_0[0] + _1[0], _0[1] + _1[1], _0[2] + _1[2]]);\\n            var x3 = (_7 = (_9 = x0, _10 = 1., [_9[0] - _10, _9[1] - _10, _9[2] - _10]), _8 = (_11 = 3.0, _12 = (_13 = C, [_13[0], _13[0], _13[0]]), [_11 * _12[0], _11 * _12[1], _11 * _12[2]]), [_7[0] + _8[0], _7[1] + _8[1], _7[2] + _8[2]]);\\n            i = mod289_3(i);\\n            var p = permute((_14 = (_16 = permute((_18 = (_20 = permute((_22 = i[2], _23 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'z'), __.swizzle(i2, 'z')), [_22 + _23[0], _22 + _23[1], _22 + _23[2]])), _21 = i[1], [_20[0] + _21, _20[1] + _21, _20[2] + _21]), _19 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.swizzle(i2, 'y')), [_18[0] + _19[0], _18[1] + _19[1], _18[2] + _19[2]])), _17 = i[0], [_16[0] + _17, _16[1] + _17, _16[2] + _17]), _15 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.swizzle(i2, 'x')), [_14[0] + _15[0], _14[1] + _15[1], _14[2] + _15[2]]));\\n            var m = (0, std_math_1.max)((_24 = 0.5, _25 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_24 - _25[0], _24 - _25[1], _24 - _25[2]]), 0.0);\\n            m = (_26 = m, _27 = m, [_26[0] * _27[0], _26[1] * _27[1], _26[2] * _27[2]]);\\n            m = (_28 = m, _29 = m, [_28[0] * _29[0], _28[1] * _29[1], _28[2] * _29[2]]);\\n            var x = (_30 = (_32 = 2.0, _33 = (0, std_math_1.frac)((_34 = p, _35 = (_36 = C, [_36[3], _36[3], _36[3]]), [_34[0] * _35[0], _34[1] * _35[1], _34[2] * _35[2]])), [_32 * _33[0], _32 * _33[1], _32 * _33[2]]), _31 = 1.0, [_30[0] - _31, _30[1] - _31, _30[2] - _31]);\\n            var h = (_37 = (_39 = x, [Math.abs(_39[0]), Math.abs(_39[1]), Math.abs(_39[2])]), _38 = 0.5, [_37[0] - _38, _37[1] - _38, _37[2] - _38]);\\n            var ox = (_40 = (_41 = x, _42 = 0.5, [_41[0] + _42, _41[1] + _42, _41[2] + _42]), [Math.floor(_40[0]), Math.floor(_40[1]), Math.floor(_40[2])]);\\n            var a0 = (_43 = x, _44 = ox, [_43[0] - _44[0], _43[1] - _44[1], _43[2] - _44[2]]);\\n            // Normalise gradients implicitly by scaling m\\n            // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\\n            m = (_45 = m, _46 = (_47 = 1.79284291400159, _48 = (_49 = 0.85373472095314, _50 = (_51 = (_53 = a0, _54 = a0, [_53[0] * _54[0], _53[1] * _54[1], _53[2] * _54[2]]), _52 = (_55 = h, _56 = h, [_55[0] * _56[0], _55[1] * _56[1], _55[2] * _56[2]]), [_51[0] + _52[0], _51[1] + _52[1], _51[2] + _52[2]]), [_49 * _50[0], _49 * _50[1], _49 * _50[2]]), [_47 - _48[0], _47 - _48[1], _47 - _48[2]]), [_45[0] * _46[0], _45[1] * _46[1], _45[2] * _46[2]]);\\n            // Compute final noise value at P\\n            var g2 = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\\n            return 130.0 * (0, std_math_1.dot)(m, g2);\\n        };\\n        noise.prototype.clone = function () {\\n            return new noise({});\\n        };\\n        noise.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_26548_noise\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return noise;\\n    }());\\n    exports.noise = noise;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_26548_noise\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), noise)\\n    ;\\n    var PERLIN_YWRAPB = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"PERLIN_YWRAPB\\\", function () { return (4 | 0); }, function () { return PERLIN_YWRAPB; }) | 0);\\n    var PERLIN_YWRAP = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"PERLIN_YWRAP\\\", function () { return (1 | 0) << PERLIN_YWRAPB; }, function () { return PERLIN_YWRAP; }) | 0);\\n    var PERLIN_ZWRAPB = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"PERLIN_ZWRAPB\\\", function () { return (8 | 0); }, function () { return PERLIN_ZWRAPB; }) | 0);\\n    var PERLIN_ZWRAP = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"PERLIN_ZWRAP\\\", function () { return (1 | 0) << PERLIN_ZWRAPB; }, function () { return PERLIN_ZWRAP; }) | 0);\\n    var PERLIN_SIZE = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"PERLIN_SIZE\\\", function () { return (4095 | 0); }, function () { return PERLIN_SIZE; }) | 0);\\n    var perlin_octaves = ((0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"perlin_octaves\\\", function () { return (4 | 0); }, function () { return perlin_octaves; }) | 0);\\n    // default to medium smooth\\n    var perlin_amp_falloff = (0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"perlin_amp_falloff\\\", function () { return 0.5; }, function () { return perlin_amp_falloff; });\\n    // 50% reduction/octave\\n    function scaled_cosine(i) { return 0.5 * (1.0 - Math.cos(i * PI)); }\\n    var perlin = (0, std___std_all_1.globalVarInit)(\\\"_slash__std_slash_common_dot_ts\\\", \\\"perlin\\\", function () { return (0, buffer_1.buffer)(PERLIN_SIZE + (1 | 0), \\\"float\\\", __assign({}, JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}\\\"))); }, function () { return perlin; });\\n    for (var i = (0 | 0); i < PERLIN_SIZE + (1 | 0); i++) {\\n        perlin.__index_assign(i, (0, std_math_1.rand)(i));\\n    } //\\t<https://www.shadertoy.com/view/4dS3Wd>\\n    //\\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\\n    //\\n    function hash(n) { return (0, std_math_1.frac)(Math.sin(n) * (1e4 | 0)); }\\n    function hash2(p) { return (0, std_math_1.frac)((1e4 | 0) * Math.sin(17.0 * p[0] + p[1] * 0.1) * (0.1 + Math.abs(Math.sin(p[1] * 13.0 + p[0])))); }\\n    function hash3(p) {\\n        var h = (0, std_math_1.dot)(p, __.FM.float_3_1_1_1(__.float(127.1), __.float(311.7), __.float(74.7)));\\n        return (0, std_math_1.frac)(Math.sin(h) * 43758.5453123);\\n    }\\n    /* impl noise */\\n    function mod289_1(x) { return x - Math.floor(x * (1.0 / 289.0)) * 289.0; }\\n    function mod289_4(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g, _f[3] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2]), Math.floor(_e[3])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2], _a[3] - _b[3]]; }\\n    function perm(x) { var _a, _b, _c, _d, _e, _f; return mod289_4((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f, _e[3] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d, _c[3] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]])); }\\n    function mod289_3(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]; }\\n    function mod289_2(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g]), [Math.floor(_e[0]), Math.floor(_e[1])]), _d = 289.0, [_c[0] * _d, _c[1] * _d]), [_a[0] - _b[0], _a[1] - _b[1]]; }\\n    function permute(x) { var _a, _b, _c, _d, _e, _f; return mod289_3((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2]])); }\\n    function taylorInvSqrt(r) { var _a, _b, _c, _d; return _a = 1.79284291400159, _b = (_c = 0.85373472095314, _d = r, [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]; }\\n    var matrix = /** @class */ (function () {\\n        function matrix(data) {\\n        }\\n        matrix.lookAt = function (from, to, up) {\\n            var _a, _b, _c, _d;\\n            var zAxis = (0, std_math_1.normalize)((_a = from, _b = to, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]));\\n            var xAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(up, zAxis));\\n            var yAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(zAxis, xAxis));\\n            var dst = __.float4x4();\\n            dst.__index((0 | 0)).__index_assign((0 | 0), xAxis[0]);\\n            dst.__index((0 | 0)).__index_assign((1 | 0), yAxis[0]);\\n            dst.__index((0 | 0)).__index_assign((2 | 0), zAxis[0]);\\n            dst.__index((0 | 0)).__index_assign((3 | 0), (0 | 0));\\n            dst.__index((1 | 0)).__index_assign((0 | 0), xAxis[1]);\\n            dst.__index((1 | 0)).__index_assign((1 | 0), yAxis[1]);\\n            dst.__index((1 | 0)).__index_assign((2 | 0), zAxis[1]);\\n            dst.__index((1 | 0)).__index_assign((3 | 0), (0 | 0));\\n            dst.__index((2 | 0)).__index_assign((0 | 0), xAxis[2]);\\n            dst.__index((2 | 0)).__index_assign((1 | 0), yAxis[2]);\\n            dst.__index((2 | 0)).__index_assign((2 | 0), zAxis[2]);\\n            dst.__index((2 | 0)).__index_assign((3 | 0), (0 | 0));\\n            dst.__index((3 | 0)).__index_assign((0 | 0), (__.FM.negate_1((xAxis[0] * from[0] + xAxis[1] * from[1] + xAxis[2] * from[2]))));\\n            dst.__index((3 | 0)).__index_assign((1 | 0), (__.FM.negate_1((yAxis[0] * from[0] + yAxis[1] * from[1] + yAxis[2] * from[2]))));\\n            dst.__index((3 | 0)).__index_assign((2 | 0), (__.FM.negate_1((zAxis[0] * from[0] + zAxis[1] * from[1] + zAxis[2] * from[2]))));\\n            dst.__index((3 | 0)).__index_assign((3 | 0), (1 | 0));\\n            return dst;\\n            var forward = (0, std_math_1.normalize)((_c = from, _d = to, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]));\\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(up, forward));\\n            var newup = (0, std_math_1.cross)(forward, right);\\n            var m = __.float4x4();\\n            m.__index((0 | 0)).__index_assign((0 | 0), right[0]), m.__index((0 | 0)).__index_assign((1 | 0), right[1]), m.__index((0 | 0)).__index_assign((2 | 0), right[2]);\\n            m.__index((1 | 0)).__index_assign((0 | 0), newup[0]), m.__index((1 | 0)).__index_assign((1 | 0), newup[1]), m.__index((1 | 0)).__index_assign((2 | 0), newup[2]);\\n            m.__index((2 | 0)).__index_assign((0 | 0), forward[0]), m.__index((2 | 0)).__index_assign((1 | 0), forward[1]), m.__index((2 | 0)).__index_assign((2 | 0), forward[2]);\\n            m.__index((3 | 0)).__index_assign((0 | 0), from[0]), m.__index((3 | 0)).__index_assign((1 | 0), from[1]), m.__index((3 | 0)).__index_assign((2 | 0), from[2]);\\n            return m;\\n        };\\n        matrix.perspective = function (fov, aspect, near, far) {\\n            // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \\n            // let M = float4x4();\\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \\n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \\n            // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \\n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \\n            // M[2][3] = -1;  //set w = -z \\n            // M[3][3] = 0; \\n            //return M;\\n            var fovRad = (0, std_math_1.radians)(fov);\\n            var tanFov = Math.tan(fovRad * 0.5);\\n            var matrx = __.float4x4(1.0 / (tanFov * aspect), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0 / tanFov, (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1(((far + near) / (far - near)))), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (__.FM.negate_1((((2 | 0) * (near * far)) / (far - near)))), (0 | 0));\\n            return matrx;\\n        };\\n        matrix.perspectiveReverseZ = function (fov, aspect, near) {\\n            // let far = 10000000.0;\\n            // let M = float4x4();\\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \\n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \\n            // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \\n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \\n            // M[2][3] = 0;  //set w = -z \\n            // M[3][3] = 0; \\n            // return M;\\n            var matrx = __.mul(__.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (1 | 0)), matrix.perspective(fov, aspect, near, 10000000.0));\\n            return matrx;\\n        };\\n        matrix.prototype.clone = function () {\\n            return new matrix({});\\n        };\\n        matrix.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_44319_matrix\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return matrix;\\n    }());\\n    exports.matrix = matrix;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_44319_matrix\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), matrix)\\n    ; /* impl matrix */\\n    /**\\n    * Uses Super Sampling Anti Aliasing to smooth out the image.\\n    */\\n    function screenAA(inScreenPos, gridSize, func) {\\n        var _a, _b, _c, _d, _e, _f, _g, _h;\\n        var weightSum = 0.0;\\n        var accumulatedColor = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(0));\\n        for (var y = (0 | 0); y < gridSize; y++) {\\n            for (var x = (0 | 0); x < gridSize; x++) {\\n                var offset = __.FM.float_2_1_1(__.div((x + 0.5 - gridSize * 0.5), gridSize), __.div((y + 0.5 - gridSize * 0.5), gridSize));\\n                var weight = Math.exp((__.FM.negate_1((0, std_math_1.dot)(offset, offset))) * (5 | 0));\\n                // Gaussian weight\\n                accumulatedColor = (_a = accumulatedColor, _b = (_c = func((_e = inScreenPos, _f = offset, [_e[0] + _f[0], _e[1] + _f[1]])), _d = weight, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2], _a[3] + _b[3]]);\\n                weightSum = weightSum + weight;\\n            }\\n        }\\n        return _g = accumulatedColor, _h = weightSum, [_g[0] / _h, _g[1] / _h, _g[2] / _h, _g[3] / _h];\\n    }\\n    exports.screenAA = screenAA;\\n    ; // Color conversion helpers\\n    // A color = float4 containing rgba values in the range [0, 1]\\n    // All functions have an extra alpha functon and a reverse\\n    // i.e. hsl, hsla, hslFromColor, hslaFromColor\\n    // fn hsl(v: float3) -> float4\\n    function hsl(v) { return hsla(__.makeVector(v, (1 | 0))); }\\n    exports.hsl = hsl;\\n    ;\\n    function hsla(v) {\\n        var h = v[0];\\n        var s = v[1];\\n        var l = v[2];\\n        var a = v[3];\\n        var c = ((1 | 0) - Math.abs((2 | 0) * l - (1 | 0))) * s;\\n        var x = c * ((1 | 0) - Math.abs(((h / (60 | 0)) % (2 | 0)) - (1 | 0)));\\n        var m = l - c / (2 | 0);\\n        var r = 0.0;\\n        var g = 0.0;\\n        var b = 0.0;\\n        if (h < (60 | 0)) {\\n            r = c;\\n            g = x;\\n            b = (0 | 0);\\n        }\\n        else if (h < (120 | 0)) {\\n            r = x;\\n            g = c;\\n            b = (0 | 0);\\n        }\\n        else if (h < (180 | 0)) {\\n            r = (0 | 0);\\n            g = c;\\n            b = x;\\n        }\\n        else if (h < (240 | 0)) {\\n            r = (0 | 0);\\n            g = x;\\n            b = c;\\n        }\\n        else if (h < (300 | 0)) {\\n            r = x;\\n            g = (0 | 0);\\n            b = c;\\n        }\\n        else {\\n            r = c;\\n            g = (0 | 0);\\n            b = x;\\n        }\\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\\n    }\\n    exports.hsla = hsla;\\n    ;\\n    function hslFromColor(c) {\\n        var r = c[0];\\n        var g = c[1];\\n        var b = c[2];\\n        var a = c[3];\\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\\n        var h = 0.0;\\n        var s = 0.0;\\n        var l = (mx + mn) / (2 | 0);\\n        if (mx == mn) {\\n            h = (0 | 0);\\n            s = (0 | 0);\\n        }\\n        else {\\n            var d = mx - mn;\\n            s = (l > 0.5) ? d / ((2 | 0) - mx - mn) : d / (mx + mn);\\n            if (mx == r) {\\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\\n            }\\n            else if (mx == g) {\\n                h = (b - r) / d + (2 | 0);\\n            }\\n            else if (mx == b) {\\n                h = (r - g) / d + (4 | 0);\\n            }\\n            h = h / (6 | 0);\\n        }\\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, l);\\n    }\\n    exports.hslFromColor = hslFromColor;\\n    ;\\n    function hslaFromColor(c) {\\n        var hsl = hslFromColor(c);\\n        return __.FM.float_4_3_1(hsl, __.swizzle(c, 'a'));\\n    }\\n    exports.hslaFromColor = hslaFromColor;\\n    ;\\n    function hsv(v) { return hsva(__.makeVector(v, (1 | 0))); }\\n    exports.hsv = hsv;\\n    ;\\n    function hsva(val) {\\n        var h = val[0];\\n        var s = val[1];\\n        var v = val[2];\\n        var a = val[3];\\n        var c = v * s;\\n        var x = c * ((1 | 0) - Math.abs(h / (60 | 0) % (2 | 0) - (1 | 0)));\\n        var m = v - c;\\n        var r = 0.0;\\n        var g = 0.0;\\n        var b = 0.0;\\n        if (h < (60 | 0)) {\\n            r = c;\\n            g = x;\\n            b = (0 | 0);\\n        }\\n        else if (h < (120 | 0)) {\\n            r = x;\\n            g = c;\\n            b = (0 | 0);\\n        }\\n        else if (h < (180 | 0)) {\\n            r = (0 | 0);\\n            g = c;\\n            b = x;\\n        }\\n        else if (h < (240 | 0)) {\\n            r = (0 | 0);\\n            g = x;\\n            b = c;\\n        }\\n        else if (h < (300 | 0)) {\\n            r = x;\\n            g = (0 | 0);\\n            b = c;\\n        }\\n        else {\\n            r = c;\\n            g = (0 | 0);\\n            b = x;\\n        }\\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\\n    }\\n    exports.hsva = hsva;\\n    ;\\n    function hsvFromColor(c) {\\n        var r = c[0];\\n        var g = c[1];\\n        var b = c[2];\\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\\n        var h = 0.0;\\n        var s = 0.0;\\n        var v = mx;\\n        var d = mx - mn;\\n        s = (mx == (0 | 0)) ? (0 | 0) : d / mx;\\n        if (mx == mn) {\\n            h = (0 | 0);\\n        }\\n        else {\\n            if (mx == r) {\\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\\n            }\\n            else if (mx == g) {\\n                h = (b - r) / d + (2 | 0);\\n            }\\n            else if (mx == b) {\\n                h = (r - g) / d + (4 | 0);\\n            }\\n            h = h / (6 | 0);\\n        }\\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, v);\\n    }\\n    exports.hsvFromColor = hsvFromColor;\\n    ;\\n    function hsvaFromColor(c) {\\n        var hsv = hsvFromColor(c);\\n        return __.FM.float_4_3_1(hsv, __.swizzle(c, 'a'));\\n    }\\n    exports.hsvaFromColor = hsvaFromColor;\\n    ;\\n    function rgb(v) { return __.FM.float_4_3_1(__.div(v, 255.0), __.int(1)); }\\n    exports.rgb = rgb;\\n    ;\\n    function rgba(v) { return __.FM.float_4_4(__.div(v, 255.0)); }\\n    exports.rgba = rgba;\\n    ;\\n    function rgbFromColor(c) { var _a, _b, _c; return _a = (_c = c, [_c[0], _c[1], _c[2]]), _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b]; }\\n    exports.rgbFromColor = rgbFromColor;\\n    ;\\n    function rgbaFromColor(c) { var _a, _b; return _a = c, _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b, _a[3] * _b]; }\\n    exports.rgbaFromColor = rgbaFromColor;\\n    ;\\n    function cmyk(v) {\\n        var c = v[0];\\n        var m = v[1];\\n        var y = v[2];\\n        var k = v[3];\\n        var r = (1 | 0) - (0, std_math_1.min)((1 | 0), c * ((1 | 0) - k) + k);\\n        var g = (1 | 0) - (0, std_math_1.min)((1 | 0), m * ((1 | 0) - k) + k);\\n        var b = (1 | 0) - (0, std_math_1.min)((1 | 0), y * ((1 | 0) - k) + k);\\n        return __.FM.float_4_1_1_1_1(r, g, b, __.int(1));\\n    }\\n    exports.cmyk = cmyk;\\n    ;\\n    function cmykFromColor(c) {\\n        var r = c[0];\\n        var g = c[1];\\n        var b = c[2];\\n        var k = (1 | 0) - (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\\n        var c1 = ((1 | 0) - r - k) / ((1 | 0) - k);\\n        var m = ((1 | 0) - g - k) / ((1 | 0) - k);\\n        var y = ((1 | 0) - b - k) / ((1 | 0) - k);\\n        return __.FM.float_4_1_1_1_1(c1, m, y, k);\\n    }\\n    exports.cmykFromColor = cmykFromColor;\\n    ;\\n    function hex(v) {\\n        var r = (v >> (16 | 0)) & (0xFF | 0);\\n        var g = (v >> (8 | 0)) & (0xFF | 0);\\n        var b = v & (0xFF | 0);\\n        return __.FM.float_4_1_1_1_1(__.div(r, 255.0), __.div(g, 255.0), __.div(b, 255.0), __.float(1.0));\\n    }\\n    exports.hex = hex;\\n    ;\\n    function hexFromColor(c) {\\n        var r = (__.mul(c[0], 255.0) | 0);\\n        var g = (__.mul(c[1], 255.0) | 0);\\n        var b = (__.mul(c[2], 255.0) | 0);\\n        return (r << (16 | 0)) | (g << (8 | 0)) | b;\\n    }\\n    exports.hexFromColor = hexFromColor;\\n    ; /**\\n    * Returns sin remapped to [0, 1]\\n    */\\n    function sin1(v) { return (Math.sin(v) + (1 | 0)) * 0.5; }\\n    exports.sin1 = sin1;\\n    ; /**\\n    * Returns cos remapped to [0, 1]\\n    */\\n    function cos1(v) { return (Math.cos(v) + (1 | 0)) * 0.5; }\\n    exports.cos1 = cos1;\\n    ; /**\\n    * Returns tan remapped to [0, 1]\\n    */\\n    function tan1(v) { return (Math.tan(v) + (1 | 0)) * 0.5; }\\n    exports.tan1 = tan1;\\n    ;\\n    function remap(v, low1, high1, low2, high2) { return low2 + (v - low1) * (high2 - low2) / (high1 - low1); }\\n    exports.remap = remap;\\n    ;\\n    function remap1(v, low, high) { return remap(v, low, high, (0 | 0), (1 | 0)); }\\n    exports.remap1 = remap1;\\n    ;\\n    var color = /** @class */ (function () {\\n        function color(data) {\\n        }\\n        color.prototype.clone = function () {\\n            return new color({});\\n        };\\n        color.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_57071_color\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"slate50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}]]}\\\");\\n        };\\n        color.slate50 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.9803921568627451), __.float(0.9882352941176471), __.int(1));\\n        color.slate100 = __.FM.float_4_1_1_1_1(__.float(0.9450980392156862), __.float(0.9607843137254902), __.float(0.9764705882352941), __.int(1));\\n        color.slate200 = __.FM.float_4_1_1_1_1(__.float(0.8862745098039215), __.float(0.9098039215686274), __.float(0.9411764705882353), __.int(1));\\n        color.slate300 = __.FM.float_4_1_1_1_1(__.float(0.796078431372549), __.float(0.8352941176470589), __.float(0.8823529411764706), __.int(1));\\n        color.slate400 = __.FM.float_4_1_1_1_1(__.float(0.5803921568627451), __.float(0.6392156862745098), __.float(0.7215686274509804), __.int(1));\\n        color.slate500 = __.FM.float_4_1_1_1_1(__.float(0.39215686274509803), __.float(0.4549019607843137), __.float(0.5450980392156862), __.int(1));\\n        color.slate600 = __.FM.float_4_1_1_1_1(__.float(0.2784313725490196), __.float(0.3333333333333333), __.float(0.4117647058823529), __.int(1));\\n        color.slate700 = __.FM.float_4_1_1_1_1(__.float(0.2), __.float(0.2549019607843137), __.float(0.3333333333333333), __.int(1));\\n        color.slate800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.1607843137254902), __.float(0.23137254901960785), __.int(1));\\n        color.slate900 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.09019607843137255), __.float(0.16470588235294117), __.int(1));\\n        color.slate950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.023529411764705882), __.float(0.09019607843137255), __.int(1));\\n        color.gray50 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.9803921568627451), __.float(0.984313725490196), __.int(1));\\n        color.gray100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9568627450980393), __.float(0.9647058823529412), __.int(1));\\n        color.gray200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.9058823529411765), __.float(0.9215686274509803), __.int(1));\\n        color.gray300 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.8352941176470589), __.float(0.8588235294117647), __.int(1));\\n        color.gray400 = __.FM.float_4_1_1_1_1(__.float(0.611764705882353), __.float(0.6392156862745098), __.float(0.6862745098039216), __.int(1));\\n        color.gray500 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.4470588235294118), __.float(0.5019607843137255), __.int(1));\\n        color.gray600 = __.FM.float_4_1_1_1_1(__.float(0.29411764705882354), __.float(0.3333333333333333), __.float(0.38823529411764707), __.int(1));\\n        color.gray700 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.2549019607843137), __.float(0.3176470588235294), __.int(1));\\n        color.gray800 = __.FM.float_4_1_1_1_1(__.float(0.12156862745098039), __.float(0.1607843137254902), __.float(0.21568627450980393), __.int(1));\\n        color.gray900 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.09411764705882353), __.float(0.15294117647058825), __.int(1));\\n        color.gray950 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.027450980392156862), __.float(0.07058823529411765), __.int(1));\\n        color.zinc50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\\n        color.zinc100 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.9568627450980393), __.float(0.9607843137254902), __.int(1));\\n        color.zinc200 = __.FM.float_4_1_1_1_1(__.float(0.8941176470588236), __.float(0.8941176470588236), __.float(0.9058823529411765), __.int(1));\\n        color.zinc300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8470588235294118), __.int(1));\\n        color.zinc400 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.6313725490196078), __.float(0.6666666666666666), __.int(1));\\n        color.zinc500 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.44313725490196076), __.float(0.47843137254901963), __.int(1));\\n        color.zinc600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3568627450980392), __.int(1));\\n        color.zinc700 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.24705882352941178), __.float(0.27450980392156865), __.int(1));\\n        color.zinc800 = __.FM.float_4_1_1_1_1(__.float(0.15294117647058825), __.float(0.15294117647058825), __.float(0.16470588235294117), __.int(1));\\n        color.zinc900 = __.FM.float_4_1_1_1_1(__.float(0.09411764705882353), __.float(0.09411764705882353), __.float(0.10588235294117647), __.int(1));\\n        color.zinc950 = __.FM.float_4_1_1_1_1(__.float(0.03529411764705882), __.float(0.03529411764705882), __.float(0.043137254901960784), __.int(1));\\n        color.neutral50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\\n        color.neutral100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9607843137254902), __.int(1));\\n        color.neutral200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.8980392156862745), __.float(0.8980392156862745), __.int(1));\\n        color.neutral300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8313725490196079), __.int(1));\\n        color.neutral400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.6392156862745098), __.float(0.6392156862745098), __.int(1));\\n        color.neutral500 = __.FM.float_4_1_1_1_1(__.float(0.45098039215686275), __.float(0.45098039215686275), __.float(0.45098039215686275), __.int(1));\\n        color.neutral600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3215686274509804), __.int(1));\\n        color.neutral700 = __.FM.float_4_1_1_1_1(__.float(0.25098039215686274), __.float(0.25098039215686274), __.float(0.25098039215686274), __.int(1));\\n        color.neutral800 = __.FM.float_4_1_1_1_1(__.float(0.14901960784313725), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\\n        color.neutral900 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.09019607843137255), __.float(0.09019607843137255), __.int(1));\\n        color.neutral950 = __.FM.float_4_1_1_1_1(__.float(0.0392156862745098), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\\n        color.stone50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9764705882352941), __.int(1));\\n        color.stone100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9568627450980393), __.int(1));\\n        color.stone200 = __.FM.float_4_1_1_1_1(__.float(0.9058823529411765), __.float(0.8980392156862745), __.float(0.8941176470588236), __.int(1));\\n        color.stone300 = __.FM.float_4_1_1_1_1(__.float(0.8392156862745098), __.float(0.8274509803921568), __.float(0.8196078431372549), __.int(1));\\n        color.stone400 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.6352941176470588), __.float(0.6196078431372549), __.int(1));\\n        color.stone500 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.44313725490196076), __.float(0.4235294117647059), __.int(1));\\n        color.stone600 = __.FM.float_4_1_1_1_1(__.float(0.3411764705882353), __.float(0.3254901960784314), __.float(0.3058823529411765), __.int(1));\\n        color.stone700 = __.FM.float_4_1_1_1_1(__.float(0.26666666666666666), __.float(0.25098039215686274), __.float(0.23529411764705882), __.int(1));\\n        color.stone800 = __.FM.float_4_1_1_1_1(__.float(0.1607843137254902), __.float(0.1450980392156863), __.float(0.1411764705882353), __.int(1));\\n        color.stone900 = __.FM.float_4_1_1_1_1(__.float(0.10980392156862745), __.float(0.09803921568627451), __.float(0.09019607843137255), __.int(1));\\n        color.stone950 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.0392156862745098), __.float(0.03529411764705882), __.int(1));\\n        color.red50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9490196078431372), __.float(0.9490196078431372), __.int(1));\\n        color.red100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8862745098039215), __.float(0.8862745098039215), __.int(1));\\n        color.red200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.792156862745098), __.float(0.792156862745098), __.int(1));\\n        color.red300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.6470588235294118), __.float(0.6470588235294118), __.int(1));\\n        color.red400 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.44313725490196076), __.float(0.44313725490196076), __.int(1));\\n        color.red500 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.26666666666666666), __.float(0.26666666666666666), __.int(1));\\n        color.red600 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\\n        color.red700 = __.FM.float_4_1_1_1_1(__.float(0.7254901960784313), __.float(0.10980392156862745), __.float(0.10980392156862745), __.int(1));\\n        color.red800 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.10588235294117647), __.float(0.10588235294117647), __.int(1));\\n        color.red900 = __.FM.float_4_1_1_1_1(__.float(0.4980392156862745), __.float(0.11372549019607843), __.float(0.11372549019607843), __.int(1));\\n        color.red950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\\n        color.orange50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9686274509803922), __.float(0.9294117647058824), __.int(1));\\n        color.orange100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9294117647058824), __.float(0.8352941176470589), __.int(1));\\n        color.orange200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8431372549019608), __.float(0.6666666666666666), __.int(1));\\n        color.orange300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.7294117647058823), __.float(0.4549019607843137), __.int(1));\\n        color.orange400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.5725490196078431), __.float(0.23529411764705882), __.int(1));\\n        color.orange500 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.45098039215686275), __.float(0.08627450980392157), __.int(1));\\n        color.orange600 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.34509803921568627), __.float(0.047058823529411764), __.int(1));\\n        color.orange700 = __.FM.float_4_1_1_1_1(__.float(0.7607843137254902), __.float(0.2549019607843137), __.float(0.047058823529411764), __.int(1));\\n        color.orange800 = __.FM.float_4_1_1_1_1(__.float(0.6039215686274509), __.float(0.20392156862745098), __.float(0.07058823529411765), __.int(1));\\n        color.orange900 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.17647058823529413), __.float(0.07058823529411765), __.int(1));\\n        color.orange950 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.0784313725490196), __.float(0.027450980392156862), __.int(1));\\n        color.amber50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.984313725490196), __.float(0.9215686274509803), __.int(1));\\n        color.amber100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9529411764705882), __.float(0.7803921568627451), __.int(1));\\n        color.amber200 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9019607843137255), __.float(0.5411764705882353), __.int(1));\\n        color.amber300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.8274509803921568), __.float(0.30196078431372547), __.int(1));\\n        color.amber400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.7490196078431373), __.float(0.1411764705882353), __.int(1));\\n        color.amber500 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.6196078431372549), __.float(0.043137254901960784), __.int(1));\\n        color.amber600 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.4666666666666667), __.float(0.023529411764705882), __.int(1));\\n        color.amber700 = __.FM.float_4_1_1_1_1(__.float(0.7058823529411765), __.float(0.3254901960784314), __.float(0.03529411764705882), __.int(1));\\n        color.amber800 = __.FM.float_4_1_1_1_1(__.float(0.5725490196078431), __.float(0.25098039215686274), __.float(0.054901960784313725), __.int(1));\\n        color.amber900 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.20784313725490197), __.float(0.058823529411764705), __.int(1));\\n        color.amber950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.10196078431372549), __.float(0.011764705882352941), __.int(1));\\n        color.yellow50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9882352941176471), __.float(0.9098039215686274), __.int(1));\\n        color.yellow100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9764705882352941), __.float(0.7647058823529411), __.int(1));\\n        color.yellow200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9411764705882353), __.float(0.5411764705882353), __.int(1));\\n        color.yellow300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.8784313725490196), __.float(0.2784313725490196), __.int(1));\\n        color.yellow400 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.8), __.float(0.08235294117647059), __.int(1));\\n        color.yellow500 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.7019607843137254), __.float(0.03137254901960784), __.int(1));\\n        color.yellow600 = __.FM.float_4_1_1_1_1(__.float(0.792156862745098), __.float(0.5411764705882353), __.float(0.01568627450980392), __.int(1));\\n        color.yellow700 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.3843137254901961), __.float(0.027450980392156862), __.int(1));\\n        color.yellow800 = __.FM.float_4_1_1_1_1(__.float(0.5215686274509804), __.float(0.30196078431372547), __.float(0.054901960784313725), __.int(1));\\n        color.yellow900 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.24705882352941178), __.float(0.07058823529411765), __.int(1));\\n        color.yellow950 = __.FM.float_4_1_1_1_1(__.float(0.25882352941176473), __.float(0.12549019607843137), __.float(0.023529411764705882), __.int(1));\\n        color.lime50 = __.FM.float_4_1_1_1_1(__.float(0.9686274509803922), __.float(0.996078431372549), __.float(0.9058823529411765), __.int(1));\\n        color.lime100 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9882352941176471), __.float(0.796078431372549), __.int(1));\\n        color.lime200 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.9764705882352941), __.float(0.615686274509804), __.int(1));\\n        color.lime300 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.9490196078431372), __.float(0.39215686274509803), __.int(1));\\n        color.lime400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.9019607843137255), __.float(0.20784313725490197), __.int(1));\\n        color.lime500 = __.FM.float_4_1_1_1_1(__.float(0.5176470588235295), __.float(0.8), __.float(0.08627450980392157), __.int(1));\\n        color.lime600 = __.FM.float_4_1_1_1_1(__.float(0.396078431372549), __.float(0.6392156862745098), __.float(0.050980392156862744), __.int(1));\\n        color.lime700 = __.FM.float_4_1_1_1_1(__.float(0.30196078431372547), __.float(0.48627450980392156), __.float(0.058823529411764705), __.int(1));\\n        color.lime800 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.3843137254901961), __.float(0.07058823529411765), __.int(1));\\n        color.lime900 = __.FM.float_4_1_1_1_1(__.float(0.21176470588235294), __.float(0.3254901960784314), __.float(0.0784313725490196), __.int(1));\\n        color.lime950 = __.FM.float_4_1_1_1_1(__.float(0.10196078431372549), __.float(0.1803921568627451), __.float(0.0196078431372549), __.int(1));\\n        color.green50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1));\\n        color.green100 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.9882352941176471), __.float(0.9058823529411765), __.int(1));\\n        color.green200 = __.FM.float_4_1_1_1_1(__.float(0.7333333333333333), __.float(0.9686274509803922), __.float(0.8156862745098039), __.int(1));\\n        color.green300 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.9372549019607843), __.float(0.6745098039215687), __.int(1));\\n        color.green400 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.8705882352941177), __.float(0.5019607843137255), __.int(1));\\n        color.green500 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.7725490196078432), __.float(0.3686274509803922), __.int(1));\\n        color.green600 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.6392156862745098), __.float(0.2901960784313726), __.int(1));\\n        color.green700 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.5019607843137255), __.float(0.23921568627450981), __.int(1));\\n        color.green800 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.396078431372549), __.float(0.20392156862745098), __.int(1));\\n        color.green900 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.3254901960784314), __.float(0.17647058823529413), __.int(1));\\n        color.green950 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.1803921568627451), __.float(0.08627450980392157), __.int(1));\\n        color.emerald50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9921568627450981), __.float(0.9607843137254902), __.int(1));\\n        color.emerald100 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.9803921568627451), __.float(0.8980392156862745), __.int(1));\\n        color.emerald200 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.9529411764705882), __.float(0.8156862745098039), __.int(1));\\n        color.emerald300 = __.FM.float_4_1_1_1_1(__.float(0.43137254901960786), __.float(0.9058823529411765), __.float(0.7176470588235294), __.int(1));\\n        color.emerald400 = __.FM.float_4_1_1_1_1(__.float(0.20392156862745098), __.float(0.8274509803921568), __.float(0.6), __.int(1));\\n        color.emerald500 = __.FM.float_4_1_1_1_1(__.float(0.06274509803921569), __.float(0.7254901960784313), __.float(0.5058823529411764), __.int(1));\\n        color.emerald600 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.5882352941176471), __.float(0.4117647058823529), __.int(1));\\n        color.emerald700 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.47058823529411764), __.float(0.3411764705882353), __.int(1));\\n        color.emerald800 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.37254901960784315), __.float(0.27450980392156865), __.int(1));\\n        color.emerald900 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.3058823529411765), __.float(0.23137254901960785), __.int(1));\\n        color.emerald950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.17254901960784313), __.float(0.13333333333333333), __.int(1));\\n        color.teal50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9803921568627451), __.int(1));\\n        color.teal100 = __.FM.float_4_1_1_1_1(__.float(0.8), __.float(0.984313725490196), __.float(0.9450980392156862), __.int(1));\\n        color.teal200 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.9647058823529412), __.float(0.8941176470588236), __.int(1));\\n        color.teal300 = __.FM.float_4_1_1_1_1(__.float(0.3686274509803922), __.float(0.9176470588235294), __.float(0.8313725490196079), __.int(1));\\n        color.teal400 = __.FM.float_4_1_1_1_1(__.float(0.17647058823529413), __.float(0.8313725490196079), __.float(0.7490196078431373), __.int(1));\\n        color.teal500 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.7215686274509804), __.float(0.6509803921568628), __.int(1));\\n        color.teal600 = __.FM.float_4_1_1_1_1(__.float(0.050980392156862744), __.float(0.5803921568627451), __.float(0.5333333333333333), __.int(1));\\n        color.teal700 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.4627450980392157), __.float(0.43137254901960786), __.int(1));\\n        color.teal800 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.3686274509803922), __.float(0.34901960784313724), __.int(1));\\n        color.teal900 = __.FM.float_4_1_1_1_1(__.float(0.07450980392156863), __.float(0.3058823529411765), __.float(0.2901960784313726), __.int(1));\\n        color.teal950 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.1843137254901961), __.float(0.1803921568627451), __.int(1));\\n        color.cyan50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.996078431372549), __.int(1), __.int(1));\\n        color.cyan100 = __.FM.float_4_1_1_1_1(__.float(0.8117647058823529), __.float(0.9803921568627451), __.float(0.996078431372549), __.int(1));\\n        color.cyan200 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.9529411764705882), __.float(0.9882352941176471), __.int(1));\\n        color.cyan300 = __.FM.float_4_1_1_1_1(__.float(0.403921568627451), __.float(0.9098039215686274), __.float(0.9764705882352941), __.int(1));\\n        color.cyan400 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.8274509803921568), __.float(0.9333333333333333), __.int(1));\\n        color.cyan500 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.7137254901960784), __.float(0.8313725490196079), __.int(1));\\n        color.cyan600 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.5686274509803921), __.float(0.6980392156862745), __.int(1));\\n        color.cyan700 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.4549019607843137), __.float(0.5647058823529412), __.int(1));\\n        color.cyan800 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.3686274509803922), __.float(0.4588235294117647), __.int(1));\\n        color.cyan900 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.3058823529411765), __.float(0.38823529411764707), __.int(1));\\n        color.cyan950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.2), __.float(0.26666666666666666), __.int(1));\\n        color.sky50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9764705882352941), __.int(1), __.int(1));\\n        color.sky100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9490196078431372), __.float(0.996078431372549), __.int(1));\\n        color.sky200 = __.FM.float_4_1_1_1_1(__.float(0.7294117647058823), __.float(0.9019607843137255), __.float(0.9921568627450981), __.int(1));\\n        color.sky300 = __.FM.float_4_1_1_1_1(__.float(0.49019607843137253), __.float(0.8274509803921568), __.float(0.9882352941176471), __.int(1));\\n        color.sky400 = __.FM.float_4_1_1_1_1(__.float(0.2196078431372549), __.float(0.7411764705882353), __.float(0.9725490196078431), __.int(1));\\n        color.sky500 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.6470588235294118), __.float(0.9137254901960784), __.int(1));\\n        color.sky600 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.5176470588235295), __.float(0.7803921568627451), __.int(1));\\n        color.sky700 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.4117647058823529), __.float(0.6313725490196078), __.int(1));\\n        color.sky800 = __.FM.float_4_1_1_1_1(__.float(0.027450980392156862), __.float(0.34901960784313724), __.float(0.5215686274509804), __.int(1));\\n        color.sky900 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.2901960784313726), __.float(0.43137254901960786), __.int(1));\\n        color.sky950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.1843137254901961), __.float(0.28627450980392155), __.int(1));\\n        color.blue50 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.9647058823529412), __.int(1), __.int(1));\\n        color.blue100 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.9176470588235294), __.float(0.996078431372549), __.int(1));\\n        color.blue200 = __.FM.float_4_1_1_1_1(__.float(0.7490196078431373), __.float(0.8588235294117647), __.float(0.996078431372549), __.int(1));\\n        color.blue300 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.7725490196078432), __.float(0.9921568627450981), __.int(1));\\n        color.blue400 = __.FM.float_4_1_1_1_1(__.float(0.3764705882352941), __.float(0.6470588235294118), __.float(0.9803921568627451), __.int(1));\\n        color.blue500 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.5098039215686274), __.float(0.9647058823529412), __.int(1));\\n        color.blue600 = __.FM.float_4_1_1_1_1(__.float(0.1450980392156863), __.float(0.38823529411764707), __.float(0.9215686274509803), __.int(1));\\n        color.blue700 = __.FM.float_4_1_1_1_1(__.float(0.11372549019607843), __.float(0.3058823529411765), __.float(0.8470588235294118), __.int(1));\\n        color.blue800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.25098039215686274), __.float(0.6862745098039216), __.int(1));\\n        color.blue900 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.22745098039215686), __.float(0.5411764705882353), __.int(1));\\n        color.blue950 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.1450980392156863), __.float(0.32941176470588235), __.int(1));\\n        color.indigo50 = __.FM.float_4_1_1_1_1(__.float(0.9333333333333333), __.float(0.9490196078431372), __.int(1), __.int(1));\\n        color.indigo100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9058823529411765), __.int(1), __.int(1));\\n        color.indigo200 = __.FM.float_4_1_1_1_1(__.float(0.7803921568627451), __.float(0.8235294117647058), __.float(0.996078431372549), __.int(1));\\n        color.indigo300 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.7058823529411765), __.float(0.9882352941176471), __.int(1));\\n        color.indigo400 = __.FM.float_4_1_1_1_1(__.float(0.5058823529411764), __.float(0.5490196078431373), __.float(0.9725490196078431), __.int(1));\\n        color.indigo500 = __.FM.float_4_1_1_1_1(__.float(0.38823529411764707), __.float(0.4), __.float(0.9450980392156862), __.int(1));\\n        color.indigo600 = __.FM.float_4_1_1_1_1(__.float(0.30980392156862746), __.float(0.27450980392156865), __.float(0.8980392156862745), __.int(1));\\n        color.indigo700 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.2196078431372549), __.float(0.792156862745098), __.int(1));\\n        color.indigo800 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.18823529411764706), __.float(0.6392156862745098), __.int(1));\\n        color.indigo900 = __.FM.float_4_1_1_1_1(__.float(0.19215686274509805), __.float(0.1803921568627451), __.float(0.5058823529411764), __.int(1));\\n        color.indigo950 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.10588235294117647), __.float(0.29411764705882354), __.int(1));\\n        color.violet50 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9529411764705882), __.int(1), __.int(1));\\n        color.violet100 = __.FM.float_4_1_1_1_1(__.float(0.9294117647058824), __.float(0.9137254901960784), __.float(0.996078431372549), __.int(1));\\n        color.violet200 = __.FM.float_4_1_1_1_1(__.float(0.8666666666666667), __.float(0.8392156862745098), __.float(0.996078431372549), __.int(1));\\n        color.violet300 = __.FM.float_4_1_1_1_1(__.float(0.7686274509803922), __.float(0.7098039215686275), __.float(0.9921568627450981), __.int(1));\\n        color.violet400 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.5450980392156862), __.float(0.9803921568627451), __.int(1));\\n        color.violet500 = __.FM.float_4_1_1_1_1(__.float(0.5450980392156862), __.float(0.3607843137254902), __.float(0.9647058823529412), __.int(1));\\n        color.violet600 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.22745098039215686), __.float(0.9294117647058824), __.int(1));\\n        color.violet700 = __.FM.float_4_1_1_1_1(__.float(0.42745098039215684), __.float(0.1568627450980392), __.float(0.8509803921568627), __.int(1));\\n        color.violet800 = __.FM.float_4_1_1_1_1(__.float(0.3568627450980392), __.float(0.12941176470588237), __.float(0.7137254901960784), __.int(1));\\n        color.violet900 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.11372549019607843), __.float(0.5843137254901961), __.int(1));\\n        color.violet950 = __.FM.float_4_1_1_1_1(__.float(0.1803921568627451), __.float(0.06274509803921569), __.float(0.396078431372549), __.int(1));\\n        color.purple50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9607843137254902), __.int(1), __.int(1));\\n        color.purple100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9098039215686274), __.int(1), __.int(1));\\n        color.purple200 = __.FM.float_4_1_1_1_1(__.float(0.9137254901960784), __.float(0.8352941176470589), __.int(1), __.int(1));\\n        color.purple300 = __.FM.float_4_1_1_1_1(__.float(0.8470588235294118), __.float(0.7058823529411765), __.float(0.996078431372549), __.int(1));\\n        color.purple400 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.5176470588235295), __.float(0.9882352941176471), __.int(1));\\n        color.purple500 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.3333333333333333), __.float(0.9686274509803922), __.int(1));\\n        color.purple600 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.2), __.float(0.9176470588235294), __.int(1));\\n        color.purple700 = __.FM.float_4_1_1_1_1(__.float(0.49411764705882355), __.float(0.13333333333333333), __.float(0.807843137254902), __.int(1));\\n        color.purple800 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.12941176470588237), __.float(0.6588235294117647), __.int(1));\\n        color.purple900 = __.FM.float_4_1_1_1_1(__.float(0.34509803921568627), __.float(0.10980392156862745), __.float(0.5294117647058824), __.int(1));\\n        color.purple950 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.027450980392156862), __.float(0.39215686274509803), __.int(1));\\n        color.fuchsia50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1), __.int(1));\\n        color.fuchsia100 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9098039215686274), __.int(1), __.int(1));\\n        color.fuchsia200 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.8156862745098039), __.float(0.996078431372549), __.int(1));\\n        color.fuchsia300 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.6705882352941176), __.float(0.9882352941176471), __.int(1));\\n        color.fuchsia400 = __.FM.float_4_1_1_1_1(__.float(0.9098039215686274), __.float(0.4745098039215686), __.float(0.9764705882352941), __.int(1));\\n        color.fuchsia500 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.27450980392156865), __.float(0.9372549019607843), __.int(1));\\n        color.fuchsia600 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.14901960784313725), __.float(0.8274509803921568), __.int(1));\\n        color.fuchsia700 = __.FM.float_4_1_1_1_1(__.float(0.6352941176470588), __.float(0.10980392156862745), __.float(0.6862745098039216), __.int(1));\\n        color.fuchsia800 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.09803921568627451), __.float(0.5607843137254902), __.int(1));\\n        color.fuchsia900 = __.FM.float_4_1_1_1_1(__.float(0.4392156862745098), __.float(0.10196078431372549), __.float(0.4588235294117647), __.int(1));\\n        color.fuchsia950 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.01568627450980392), __.float(0.3058823529411765), __.int(1));\\n        color.pink50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9490196078431372), __.float(0.9725490196078431), __.int(1));\\n        color.pink100 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.9058823529411765), __.float(0.9529411764705882), __.int(1));\\n        color.pink200 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.8117647058823529), __.float(0.9098039215686274), __.int(1));\\n        color.pink300 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.6588235294117647), __.float(0.8313725490196079), __.int(1));\\n        color.pink400 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.4470588235294118), __.float(0.7137254901960784), __.int(1));\\n        color.pink500 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.2823529411764706), __.float(0.6), __.int(1));\\n        color.pink600 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.15294117647058825), __.float(0.4666666666666667), __.int(1));\\n        color.pink700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.09411764705882353), __.float(0.36470588235294116), __.int(1));\\n        color.pink800 = __.FM.float_4_1_1_1_1(__.float(0.615686274509804), __.float(0.09019607843137255), __.float(0.30196078431372547), __.int(1));\\n        color.pink900 = __.FM.float_4_1_1_1_1(__.float(0.5137254901960784), __.float(0.09411764705882353), __.float(0.2627450980392157), __.int(1));\\n        color.pink950 = __.FM.float_4_1_1_1_1(__.float(0.3137254901960784), __.float(0.027450980392156862), __.float(0.1411764705882353), __.int(1));\\n        color.rose50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9450980392156862), __.float(0.9490196078431372), __.int(1));\\n        color.rose100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.8941176470588236), __.float(0.9019607843137255), __.int(1));\\n        color.rose200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.803921568627451), __.float(0.8274509803921568), __.int(1));\\n        color.rose300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.6431372549019608), __.float(0.6862745098039216), __.int(1));\\n        color.rose400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.44313725490196076), __.float(0.5215686274509804), __.int(1));\\n        color.rose500 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.24705882352941178), __.float(0.3686274509803922), __.int(1));\\n        color.rose600 = __.FM.float_4_1_1_1_1(__.float(0.8823529411764706), __.float(0.11372549019607843), __.float(0.2823529411764706), __.int(1));\\n        color.rose700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.07058823529411765), __.float(0.23529411764705882), __.int(1));\\n        color.rose800 = __.FM.float_4_1_1_1_1(__.float(0.6235294117647059), __.float(0.07058823529411765), __.float(0.2235294117647059), __.int(1));\\n        color.rose900 = __.FM.float_4_1_1_1_1(__.float(0.5333333333333333), __.float(0.07450980392156863), __.float(0.21568627450980393), __.int(1));\\n        color.rose950 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.0196078431372549), __.float(0.09803921568627451), __.int(1));\\n        return color;\\n    }());\\n    exports.color = color;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_common_ts_57071_color\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"slate50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"slate950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"gray950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"zinc950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"neutral950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"stone950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"red950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"orange950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"amber950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"yellow950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"lime950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"green950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"emerald950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"teal950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"cyan950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"sky950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"blue950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"indigo950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"violet950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"purple950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"fuchsia950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"pink950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose50\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose100\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose200\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose300\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose400\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose500\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose600\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose700\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose800\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose900\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}],[\\\\\\\"rose950\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float4\\\\\\\"}]]}\\\"), color)\\n    ;\\n    function wrap2(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high)); }\\n    exports.wrap2 = wrap2;\\n    ;\\n    function wrap3(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high)); }\\n    exports.wrap3 = wrap3;\\n    ;\\n    function wrap4(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high), (0, std_math_1.wrap)(value[3], low, high)); }\\n    exports.wrap4 = wrap4;\\n    ;\\n});\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/sdf.ts\":{\"outputFiles\":[{\"name\":\"/_std/sdf.js\",\"writeByteOrderMark\":false,\"text\":\"var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\\\"get\\\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\\n    Object.defineProperty(o, \\\"default\\\", { enumerable: true, value: v });\\n}) : function(o, v) {\\n    o[\\\"default\\\"] = v;\\n});\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n    if (mod && mod.__esModule) return mod;\\n    var result = {};\\n    if (mod != null) for (var k in mod) if (k !== \\\"default\\\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\\n    __setModuleDefault(result, mod);\\n    return result;\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"/std_math\\\", \\\"/std_math\\\", \\\"/std___std_all\\\"], function (require, exports, __, std_math_1, std___std_all_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    exports.sdf = void 0;\\n    __ = __importStar(__);\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n    var sdf = /** @class */ (function () {\\n        function sdf(data) {\\n        }\\n        sdf.sphere = function (samplePosition, sphereCenter, radius) {\\n            var _a, _b;\\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var r = radius;\\n            return (0, std_math_1.length)(p) - r;\\n        };\\n        sdf.box = function (samplePosition, boxCenter, boxSize) {\\n            var _a, _b, _c, _d, _e;\\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var s = boxSize;\\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0);\\n        };\\n        sdf.roundBox = function (samplePosition, boxCenter, boxSize, cornerRadius) {\\n            var _a, _b, _c, _d, _e;\\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var s = boxSize;\\n            var r = cornerRadius;\\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0) - r;\\n        };\\n        sdf.boxFrame = function (samplePosition, boxCenter, boxSize, frameThickness) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var b = boxSize;\\n            var e = frameThickness;\\n            p = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = b, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            var q = (_f = (_h = (_j = p, _k = e, [_j[0] + _k, _j[1] + _k, _j[2] + _k]), [Math.abs(_h[0]), Math.abs(_h[1]), Math.abs(_h[2])]), _g = e, [_f[0] - _g, _f[1] - _g, _f[2] - _g]);\\n            return (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(p, 'x'), __.swizzle(q, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(p[0], (0, std_math_1.max)(q[1], q[2])), 0.0), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(p, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(p[1], q[2])), 0.0)), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(q, 'y'), __.swizzle(p, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], p[2])), 0.0));\\n        };\\n        sdf.torus = function (samplePosition, torusCenter, torusSize) {\\n            var _a, _b, _c;\\n            var p = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var t = torusSize;\\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), t[0]), __.swizzle(p, 'y'));\\n            return (0, std_math_1.length)(q) - t[1];\\n        };\\n        sdf.cappedTorus = function (samplePosition, torusCenter, torusSize, ra, rb) {\\n            var _a, _b, _c, _d, _e;\\n            var p1 = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var p = __.makeVector(Math.abs(p1[0]), (_c = p1, [_c[1], _c[2]]));\\n            var sc = torusSize;\\n            var k = (sc[1] * p[0] > sc[0] * p[1]) ? (0, std_math_1.dot)((_d = p, [_d[0], _d[1]]), sc) : (0, std_math_1.length)((_e = p, [_e[0], _e[1]]));\\n            return Math.sqrt((0, std_math_1.dot)(p, p) + ra * ra - 2.0 * ra * k) - rb;\\n        };\\n        sdf.link = function (samplePosition, linkCenter, linkLength, r1, r2) {\\n            var _a, _b, _c;\\n            var p = (_a = samplePosition, _b = linkCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var le = linkLength;\\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'x'), (0, std_math_1.max)(Math.abs(p[1]) - le, 0.0), __.swizzle(p, 'z'));\\n            return (0, std_math_1.length)(__.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = q, [_c[0], _c[1]])), r1), __.swizzle(q, 'z'))) - r2;\\n        };\\n        sdf.infinteCylinder = function (samplePosition, cylinderCenter, cylinderSize) {\\n            var _a, _b, _c, _d, _e, _f;\\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var c = cylinderSize;\\n            return (0, std_math_1.length)((_c = (_e = p, [_e[0], _e[2]]), _d = (_f = c, [_f[0], _f[1]]), [_c[0] - _d[0], _c[1] - _d[1]])) - c[2];\\n        };\\n        sdf.cone = function (samplePosition, coneCenter, c, coneHeight) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = coneHeight;\\n            // c is the sin/cos of the angle, h is height\\n            // Alternatively pass q instead of (c,h),\\n            // which is the point at the base in 2D\\n            var q = (_c = h, _d = __.FM.float_2_1_1(__.div(c[0], c[1]), __.negate(1.0)), [_c * _d[0], _c * _d[1]]);\\n            var w = __.FM.float_2_1_1((0, std_math_1.length)((_e = p, [_e[0], _e[2]])), __.swizzle(p, 'y'));\\n            var a = (_f = w, _g = (_h = q, _j = (0, std_math_1.clamp)((0, std_math_1.dot)(w, q) / (0, std_math_1.dot)(q, q), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_f[0] - _g[0], _f[1] - _g[1]]);\\n            var b = (_k = w, _l = (_m = q, _o = __.FM.float_2_1_1((0, std_math_1.clamp)(w[0] / q[0], 0.0, 1.0), __.float(1.0)), [_m[0] * _o[0], _m[1] * _o[1]]), [_k[0] - _l[0], _k[1] - _l[1]]);\\n            var k = Math.sign(q[1]);\\n            var d = (0, std_math_1.min)((0, std_math_1.dot)(a, a), (0, std_math_1.dot)(b, b));\\n            var s = (0, std_math_1.max)(k * (w[0] * q[1] - w[1] * q[0]), k * (w[1] - q[1]));\\n            return Math.sqrt(d) * Math.sign(s);\\n        };\\n        sdf.plane = function (samplePosition, planeCenter, planeNormal, planeHeight) {\\n            var _a, _b;\\n            var p = (_a = samplePosition, _b = planeCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var n = planeNormal;\\n            var h = planeHeight;\\n            // n must be normalized\\n            return (0, std_math_1.dot)(p, n) + h;\\n        };\\n        sdf.hexPrism = function (samplePosition, hexCenter, hexSize) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\\n            var p = (_a = samplePosition, _b = hexCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = hexSize;\\n            var k = __.FM.float_3_1_1_1(__.negate(0.8660254), __.float(0.5), __.float(0.57735));\\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\\n            var dddd = (0, std_math_1.min)((0, std_math_1.dot)((_d = k, [_d[0], _d[1]]), (_e = p, [_e[0], _e[1]])), 0.0) * 2.0;\\n            p = (_f = p, _g = __.FM.float_3_2_1(__.mul(dddd, (_h = k, [_h[0], _h[1]])), __.float(0.0)), [_f[0] - _g[0], _f[1] - _g[1], _f[2] - _g[2]]);\\n            var d = __.FM.float_2_1_1(__.mul((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[1]]), _k = __.FM.float_2_1_1((0, std_math_1.clamp)(p[0], (__.FM.negate_1(k[2])) * h[0], k[2] * h[0]), __.swizzle(h, 'x')), [_j[0] - _k[0], _j[1] - _k[1]])), Math.sign(p[1] - h[0])), __.sub(p[2], h[1]));\\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\\n        };\\n        sdf.triPrism = function (samplePosition, triCenter, triSize) {\\n            var _a, _b, _c;\\n            var p = (_a = samplePosition, _b = triCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = triSize;\\n            var q = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\\n            return (0, std_math_1.max)(q[2] - h[1], (0, std_math_1.max)(q[0] * 0.866025 + p[1] * 0.5, (__.FM.negate_1(p[1]))) - h[0] * 0.5);\\n        };\\n        sdf.capsuleLine = function (samplePosition, lineStart, lineEnd, capsuleRadius) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h;\\n            var p = samplePosition;\\n            var a = lineStart;\\n            var b = lineEnd;\\n            var r = capsuleRadius;\\n            var pa = (_a = p, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var ba = (_c = b, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            var h = (0, std_math_1.clamp)((0, std_math_1.dot)(pa, ba) / (0, std_math_1.dot)(ba, ba), 0.0, 1.0);\\n            return (0, std_math_1.length)((_e = pa, _f = (_g = ba, _h = h, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r;\\n        };\\n        sdf.capsule = function (samplePosition, capsuleCenter, height, radius) {\\n            var _a, _b;\\n            var p1 = (_a = samplePosition, _b = capsuleCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            var r = radius;\\n            var p = __.makeVector(p1[0], p1[1] - (0, std_math_1.clamp)(p1[1], 0.0, h), p1[2]);\\n            return (0, std_math_1.length)(p) - r;\\n        };\\n        sdf.cylinder = function (samplePosition, cylinderCenter, height, radius) {\\n            var _a, _b, _c, _d, _e, _f;\\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            var r = radius;\\n            var d = (_c = (_e = __.FM.float_2_1_1((0, std_math_1.length)((_f = p, [_f[0], _f[2]])), __.swizzle(p, 'y')), [Math.abs(_e[0]), Math.abs(_e[1])]), _d = __.FM.float_2_1_1(r, h), [_c[0] - _d[0], _c[1] - _d[1]]);\\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\\n        };\\n        sdf.cylinderLine = function (samplePosition, lineStart, lineEnd, radius) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\\n            var p = samplePosition;\\n            var a = lineStart;\\n            var b = lineEnd;\\n            var r = radius;\\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            var baba = (0, std_math_1.dot)(ba, ba);\\n            var paba = (0, std_math_1.dot)(pa, ba);\\n            var x = (0, std_math_1.length)((_e = (_g = pa, _h = baba, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), _f = (_j = ba, _k = paba, [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r * baba;\\n            var y = Math.abs(paba - baba * 0.5) - baba * 0.5;\\n            var x2 = x * x;\\n            var y2 = y * y * baba;\\n            var mxxy = (0, std_math_1.max)(x, y);\\n            var d = (mxxy < 0.0) ? (__.FM.negate_1((0, std_math_1.min)(x2, y2))) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0));\\n            return Math.sign(d) * Math.sqrt(Math.abs(d)) / baba;\\n        };\\n        sdf.roundedCylinder = function (samplePosition, cylinderCenter, cylinderRadius, cornerRadius, height) {\\n            var _a, _b, _c;\\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b, _a[1] - _b, _a[2] - _b]);\\n            var h = height;\\n            var ra = cylinderRadius;\\n            var rb = cornerRadius;\\n            var d = __.FM.float_2_1_1(__.add((0, std_math_1.length)((_c = p, [_c[0], _c[2]])) - 2.0 * ra, rb), __.sub(Math.abs(p[1]), h));\\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0)) - rb;\\n        };\\n        sdf.cappedCone = function (samplePosition, coneCenter, height, r1, r2) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\\n            var k1 = __.FM.float_2_1_1(r2, h);\\n            var k2 = __.FM.float_2_1_1(__.sub(r2, r1), __.mul(2.0, h));\\n            var ca = __.FM.float_2_1_1(__.sub(q[0], (0, std_math_1.min)(q[0], (q[1] < 0.0) ? r1 : r2)), __.sub(Math.abs(q[1]), h));\\n            var cb = (_d = (_f = q, _g = k1, [_f[0] - _g[0], _f[1] - _g[1]]), _e = (_h = k2, _j = (0, std_math_1.clamp)((0, std_math_1.dot)((_k = k1, _l = q, [_k[0] - _l[0], _k[1] - _l[1]]), k2) / dot2(k2), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_d[0] + _e[0], _d[1] + _e[1]]);\\n            var s = (__.and(cb[0] < 0.0, ca[1] < 0.0)) ? (__.FM.negate_1(1.0)) : 1.0;\\n            return s * Math.sqrt((0, std_math_1.min)(dot2(ca), dot2(cb)));\\n        };\\n        sdf.solidAngle = function (samplePosition, solidCenter, size, radius) {\\n            var _a, _b, _c, _d, _e, _f, _g;\\n            var p = (_a = samplePosition, _b = solidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var c = size;\\n            var ra = radius;\\n            // c is the sin/cos of the angle\\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\\n            var l = (0, std_math_1.length)(q) - ra;\\n            var m = (0, std_math_1.length)((_d = q, _e = (_f = c, _g = (0, std_math_1.clamp)((0, std_math_1.dot)(q, c), 0.0, ra), [_f[0] * _g, _f[1] * _g]), [_d[0] - _e[0], _d[1] - _e[1]]));\\n            return (0, std_math_1.max)(l, m * Math.sign(c[1] * q[0] - c[0] * q[1]));\\n        };\\n        sdf.cutSphere = function (samplePosition, sphereCenter, radius, height) {\\n            var _a, _b, _c, _d, _e;\\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            var r = radius;\\n            // sampling independent computations (only depend on shape)\\n            var w = Math.sqrt(r * r - h * h);\\n            // sampling dependant computations\\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\\n            var s = (0, std_math_1.max)((h - r) * q[0] * q[0] + w * w * (h + r - 2.0 * q[1]), h * q[0] - w * q[1]);\\n            return (s < 0.0) ? (0, std_math_1.length)(q) - r : (q[0] < w) ? h - q[1] : (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]]));\\n        };\\n        sdf.cutHollowSphere = function (samplePosition, sphereCenter, radius, height, thickness) {\\n            var _a, _b, _c, _d, _e;\\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var r = radius;\\n            var h = height;\\n            var t = thickness;\\n            // sampling independent computations (only depend on shape)\\n            var w = Math.sqrt(r * r - h * h);\\n            // sampling dependant computations\\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\\n            return ((h * q[0] < w * q[1]) ? (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]])) : Math.abs((0, std_math_1.length)(q) - r)) - t;\\n        };\\n        sdf.roundCone = function (samplePosition, coneCenter, coneRadius, cornerRadius, height) {\\n            var _a, _b, _c, _d, _e;\\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            var r1 = coneRadius;\\n            var r2 = cornerRadius;\\n            // sampling independent computations (only depend on shape)\\n            var b = (r1 - r2) / h;\\n            var a = Math.sqrt(1.0 - b * b);\\n            // sampling dependant computations\\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\\n            var k = (0, std_math_1.dot)(q, __.FM.float_2_1_1(__.negate(b), a));\\n            if (k < 0.0)\\n                return (0, std_math_1.length)(q) - r1;\\n            if (k > a * h)\\n                return (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(__.float(0.0), h), [_d[0] - _e[0], _d[1] - _e[1]])) - r2;\\n            return (0, std_math_1.dot)(q, __.FM.float_2_1_1(a, b)) - r1;\\n        };\\n        sdf.ellipsoid = function (samplePosition, center, radius) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h;\\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var r = radius;\\n            var k0 = (0, std_math_1.length)((_c = p, _d = r, [_c[0] / _d[0], _c[1] / _d[1], _c[2] / _d[2]]));\\n            var k1 = (0, std_math_1.length)((_e = p, _f = (_g = r, _h = r, [_g[0] * _h[0], _g[1] * _h[1], _g[2] * _h[2]]), [_e[0] / _f[0], _e[1] / _f[1], _e[2] / _f[2]]));\\n            return k0 * (k0 - 1.0) / k1;\\n        };\\n        sdf.rhombus = function (samplePosition, rhombusCenter, la, lb, height, ra) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\\n            var p = (_a = samplePosition, _b = rhombusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\\n            var b = __.FM.float_2_1_1(la, lb);\\n            var f = (0, std_math_1.clamp)((ndot(b, (_d = b, _e = (_f = 2.0, _g = (_h = p, [_h[0], _h[2]]), [_f * _g[0], _f * _g[1]]), [_d[0] - _e[0], _d[1] - _e[1]]))) / (0, std_math_1.dot)(b, b), (__.FM.negate_1(1.0)), 1.0);\\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[2]]), _k = (_m = (_p = 0.5, _q = b, [_p * _q[0], _p * _q[1]]), _o = __.FM.float_2_1_1(__.sub(1.0, f), __.add(1.0, f)), [_m[0] * _o[0], _m[1] * _o[1]]), [_j[0] - _k[0], _j[1] - _k[1]])) * Math.sign(p[0] * b[1] + p[2] * b[0] - b[0] * b[1]), ra), __.sub(p[1], h));\\n            return (0, std_math_1.min)((0, std_math_1.max)(q[0], q[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(q, 0.0));\\n        };\\n        sdf.octahedron = function (samplePosition, center, size) {\\n            var _a, _b, _c, _d, _e, _f, _g;\\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var s = size;\\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\\n            var m = p[0] + p[1] + p[2] - s;\\n            var q = (_d = 0.0, [_d, _d, _d]);\\n            if (3.0 * p[0] < m)\\n                q = (_e = p, [_e[0], _e[1], _e[2]]);\\n            else if (3.0 * p[1] < m)\\n                q = (_f = p, [_f[1], _f[2], _f[0]]);\\n            else if (3.0 * p[2] < m)\\n                q = (_g = p, [_g[2], _g[0], _g[1]]);\\n            else\\n                return m * 0.57735027;\\n            var k = (0, std_math_1.clamp)(0.5 * (q[2] - q[1] + s), 0.0, s);\\n            return (0, std_math_1.length)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.add(q[1] - s, k), __.sub(q[2], k)));\\n        };\\n        sdf.pyramid = function (samplePosition, pyramidCenter, height) {\\n            var _a, _b;\\n            var p1 = (_a = samplePosition, _b = pyramidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var h = height;\\n            var m2 = h * h + 0.25;\\n            var p2 = __.makeVector(Math.abs(p1[0]), p1[1], Math.abs(p1[2]));\\n            if (p1[2] > p1[0]) {\\n                p2 = __.makeVector(p2[2], p2[1], p2[0]);\\n            }\\n            p2 = __.makeVector(p2[0] - 0.5, p2[1], p2[2] - 0.5);\\n            var p = p2;\\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'z'), __.sub(h * p[1], 0.5 * p[0]), __.add(h * p[0], 0.5 * p[1]));\\n            var s = (0, std_math_1.max)((__.FM.negate_1(q[0])), 0.0);\\n            var t = (0, std_math_1.clamp)((q[1] - 0.5 * p[2]) / (m2 + 0.25), 0.0, 1.0);\\n            var a = m2 * (q[0] + s) * (q[0] + s) + q[1] * q[1];\\n            var b = m2 * (q[0] + 0.5 * t) * (q[0] + 0.5 * t) + (q[1] - m2 * t) * (q[1] - m2 * t);\\n            var d2 = (0, std_math_1.min)(q[1], (__.FM.negate_1(q[0])) * m2 - q[1] * 0.5) > 0.0 ? 0.0 : (0, std_math_1.min)(a, b);\\n            return Math.sqrt((d2 + q[2] * q[2]) / m2) * Math.sign((0, std_math_1.max)(q[2], (__.FM.negate_1(p[1]))));\\n        };\\n        sdf.udTriangle = function (samplePosition, a, b, c) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\\n            var p = samplePosition;\\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\\n            var ac = (_j = a, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\\n            var nor = (0, std_math_1.cross)(ba, ac);\\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ac, nor), pc)) < 2.0) ? (0, std_math_1.min)((0, std_math_1.min)(dot3((_o = (_q = ba, _r = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_q[0] * _r, _q[1] * _r, _q[2] * _r]), _p = pa, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])), dot3((_s = (_u = cb, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pb, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]]))), dot3((_w = (_y = ac, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(ac, pc) / dot3(ac), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pc, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\\n        };\\n        sdf.udQuad = function (samplePosition, a, b, c, d) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;\\n            var p = samplePosition;\\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\\n            var dc = (_j = d, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\\n            var ad = (_o = a, _p = d, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]]);\\n            var pd = (_q = p, _r = d, [_q[0] - _r[0], _q[1] - _r[1], _q[2] - _r[2]]);\\n            var nor = (0, std_math_1.cross)(ba, ad);\\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(dc, nor), pc)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ad, nor), pd)) < 3.0) ? (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.min)(dot3((_s = (_u = ba, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pa, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]])), dot3((_w = (_y = cb, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pb, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))), dot3((_0 = (_2 = dc, _3 = (0, std_math_1.clamp)((0, std_math_1.dot)(dc, pc) / dot3(dc), 0.0, 1.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), _1 = pc, [_0[0] - _1[0], _0[1] - _1[1], _0[2] - _1[2]]))), dot3((_4 = (_6 = ad, _7 = (0, std_math_1.clamp)((0, std_math_1.dot)(ad, pd) / dot3(ad), 0.0, 1.0), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), _5 = pd, [_4[0] - _5[0], _4[1] - _5[1], _4[2] - _5[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\\n        };\\n        /**\\n            * Returns the intersection of two SDFs\\n            * = max(a, b)\\n            */\\n        sdf.intersect = function (a, b) { return (0, std_math_1.max)(a, b); };\\n        /**\\n            * Returns the union of two SDFs\\n            * = min(a, b)\\n            */\\n        sdf.union = function (a, b) { return (0, std_math_1.min)(a, b); };\\n        sdf.subtract = function (a, b) { return (0, std_math_1.max)((__.FM.negate_1(a)), b); };\\n        sdf.smoothIntersect = function (a, b, k) {\\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\\n            return (0, std_math_1.lerp)(b, a, h) - k * h * (1.0 - h);\\n        };\\n        /**\\n            * Smoothly joins two SDFs using blending distance k\\n            */\\n        sdf.smoothUnion = function (a, b, k) {\\n            var d1 = a;\\n            var d2 = b;\\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0);\\n            return (0, std_math_1.lerp)(d2, d1, h) - k * h * (1.0 - h);\\n        };\\n        sdf.smoothSubtract = function (a, b, k) {\\n            var d1 = a;\\n            var d2 = b;\\n            var h = (0, std_math_1.clamp)(0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0);\\n            return (0, std_math_1.lerp)(d2, (__.FM.negate_1(d1)), h) + k * h * (1.0 - h);\\n        };\\n        /**\\n            * Blends between two SDFs using interpolation\\n            */\\n        sdf.blend = function (a, b, t) { return t * a + ((1 | 0) - t) * b; };\\n        sdf.round = function (a, r) { return a - r; };\\n        /**\\n            * Carve out the interior of an SDF\\n            */\\n        sdf.onion = function (a, thickness) { return Math.abs(a) - thickness; };\\n        sdf.grad = function (p, sampler) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\\n            var DELTA = 0.0001;\\n            return _a = __.FM.float_3_1_1_1(__.sub(sampler((_c = p, _d = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]])), sampler((_e = p, _f = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]))), __.sub(sampler((_g = p, _h = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]])), sampler((_j = p, _k = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]))), __.sub(sampler((_l = p, _m = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]])), sampler((_o = p, _p = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])))), _b = (2.0 * DELTA), [_a[0] / _b, _a[1] / _b, _a[2] / _b];\\n        };\\n        /**\\n            * Poorly returns the closest point on the surface of an SDF\\n            * This is an inaccurate method\\n            */\\n        sdf.closest = function (position, sampler) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\\n            var sep = 0.0001;\\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\\n            var closest = position;\\n            var initialDist = sampler(position);\\n            var seed = (0 | 0);\\n            for (var j = (0 | 0); j < (200 | 0); j++) {\\n                var n = (_a = 0.0, [_a, _a, _a]);\\n                var distSum = 0.0;\\n                for (var i = zero; i < (4 | 0); i++) {\\n                    var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\\n                    var d = sampler((_h = closest, _j = (_k = e, _l = sep, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\\n                    distSum = distSum + d;\\n                    n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\\n                }\\n                closest = (_r = (_t = (_v = (_x = (0, std_math_1.normalize)(n), _y = distSum, [_x[0] * _y, _x[1] * _y, _x[2] * _y]), _w = (__.FM.negate_1((1 | 0))), [_v[0] * _w, _v[1] * _w, _v[2] * _w]), _u = 4.0, [_t[0] / _u, _t[1] / _u, _t[2] / _u]), _s = closest, [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2]]);\\n                if (distSum < 0.0001) {\\n                    break;\\n                }\\n            }\\n            return closest;\\n        };\\n        sdf.normal = function (position, sampler) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\\n            var h = 0.1;\\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\\n            var n = (_a = 0.0, [_a, _a, _a]);\\n            var distSum = 0.0;\\n            for (var i = zero; i < (4 | 0); i++) {\\n                var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\\n                var d = sampler((_h = position, _j = (_k = e, _l = h, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\\n                distSum = distSum + d;\\n                n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\\n            }\\n            return (0, std_math_1.normalize)(n);\\n        };\\n        sdf.vizRings = function (d) {\\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\\n            if (false) {\\n                var color_1 = (_a = 1.0, _b = (_c = Math.sign(d), _d = __.FM.float_3_1_1_1(__.float(0.1), __.float(0.4), __.float(0.7)), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]);\\n                color_1 = (_e = color_1, _f = 1.0 - Math.exp((__.FM.negate_1(4.0)) * Math.abs(d)), [_e[0] * _f, _e[1] * _f, _e[2] * _f]);\\n                color_1 = (_g = color_1, _h = 0.8 + 0.2 * Math.cos(140.0 * d), [_g[0] * _h, _g[1] * _h, _g[2] * _h]);\\n                color_1 = (0, std_math_1.lerp)(color_1, (_j = 1.0, [_j, _j, _j]), 1.0 - (0, std_math_1.smoothstep)(0.0, 0.015, Math.abs(d)));\\n                return __.makeVector(color_1, 1.0);\\n            }\\n            else {\\n                var size = (2 | 0);\\n                var fadeDist = (100 | 0);\\n                var v = (1 | 0) - (0, std_math_1.clamp)(d / fadeDist, (0 | 0), (1 | 0));\\n                var color_2 = __.makeVector(0.4 * v, 0.6 * v, (1 | 0), (1 | 0));\\n                var s = Math.sin(d / size);\\n                if (Math.abs(d) < (1 | 0)) {\\n                    return __.FM.float_4_4(__.swizzle((1 | 0), \\\"xyzw\\\"));\\n                }\\n                else {\\n                    return d > (0 | 0) ? (_k = color_2, _l = Math.ceil((1 | 0) - s), [_k[0] * _l, _k[1] * _l, _k[2] * _l, _k[3] * _l]) : (_m = color_2, _o = Math.ceil(s), [_m[0] * _o, _m[1] * _o, _m[2] * _o, _m[3] * _o]);\\n                }\\n            }\\n        };\\n        sdf.march = function (position, direction, sampler) {\\n            var _a, _b, _c, _d;\\n            var maxDist = 100000.0;\\n            var minDist = 1.0;\\n            var dist = minDist;\\n            for (var i = (0 | 0); __.and(i < (256 | 0), dist < maxDist); i++) {\\n                var samp = sampler((_a = position, _b = (_c = direction, _d = dist, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]));\\n                dist = dist + samp;\\n                if (Math.abs(samp) < (0.00005 * dist)) {\\n                    break;\\n                }\\n            }\\n            if (dist > maxDist) {\\n                dist = (__.FM.negate_1(1.0));\\n            }\\n            return dist;\\n        };\\n        /**\\n            * See: https://iquilezles.org/articles/distfunctions/\\n            * Infinitely repeats an SDF with space in between. This returns an updated position\\n            *\\n            * Example:\\n            * ```shadeup\\n            *\\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\\n            * ```\\n            */\\n        sdf.repeat = function (position, space) {\\n            var _a, _b, _c, _d, _e, _f, _g;\\n            var p = position;\\n            var s = space;\\n            return _a = p, _b = (_c = s, _d = (_e = (_f = p, _g = s, [_f[0] / _g[0], _f[1] / _g[1], _f[2] / _g[2]]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), [_c[0] * _d[0], _c[1] * _d[1], _c[2] * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\\n        };\\n        /**\\n            * See: https://iquilezles.org/articles/distfunctions/\\n            * Repeats an SDF with space in between upto the limit. This returns an updated position\\n            *\\n            * Example:\\n            * ```shadeup\\n            *\\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\\n            * ```\\n            */\\n        sdf.repeatLimited = function (position, space, limit) {\\n            var _a, _b, _c, _d, _e, _f, _g;\\n            var p = position;\\n            var s = space;\\n            return _a = p, _b = (_c = s, _d = (0, std_math_1.clamp)((_e = (_f = p, _g = s, [_f[0] / _g, _f[1] / _g, _f[2] / _g]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), (__.FM.negate_3(limit)), limit), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\\n        };\\n        sdf.prototype.clone = function () {\\n            return new sdf({});\\n        };\\n        sdf.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_sdf_ts_1797_sdf\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\");\\n        };\\n        return sdf;\\n    }());\\n    exports.sdf = sdf;\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_sdf_ts_1797_sdf\\\\\\\",\\\\\\\"fields\\\\\\\":[]}\\\"), sdf)\\n    ;\\n    function dot2(v) { return (0, std_math_1.dot)(v, v); }\\n    function dot3(v) { return (0, std_math_1.dot)(v, v); }\\n    function ndot(a, b) { return a[0] * b[0] - a[1] * b[1]; }\\n});\\n/* impl sdf */\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]},\"/_std/geo.ts\":{\"outputFiles\":[{\"name\":\"/_std/geo.js\",\"writeByteOrderMark\":false,\"text\":\"var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    var desc = Object.getOwnPropertyDescriptor(m, k);\\n    if (!desc || (\\\"get\\\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\\n      desc = { enumerable: true, get: function() { return m[k]; } };\\n    }\\n    Object.defineProperty(o, k2, desc);\\n}) : (function(o, m, k, k2) {\\n    if (k2 === undefined) k2 = k;\\n    o[k2] = m[k];\\n}));\\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\\n    Object.defineProperty(o, \\\"default\\\", { enumerable: true, value: v });\\n}) : function(o, v) {\\n    o[\\\"default\\\"] = v;\\n});\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n    if (mod && mod.__esModule) return mod;\\n    var result = {};\\n    if (mod != null) for (var k in mod) if (k !== \\\"default\\\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\\n    __setModuleDefault(result, mod);\\n    return result;\\n};\\ndefine([\\\"require\\\", \\\"exports\\\", \\\"/std_math\\\", \\\"/std___std_all\\\"], function (require, exports, __, std___std_all_1) {\\n    \\\"use strict\\\";\\n    Object.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n    __ = __importStar(__);\\n    var globalVarGet = std___std_all_1.globalVarGet;\\n    var GeoSegment = /** @class */ (function () {\\n        function GeoSegment(data) {\\n            var _a, _b, _c, _d, _e, _f;\\n            this.start = (_a = data.start) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(0.0, 0.0);\\n            this.end = (_b = data.end) !== null && _b !== void 0 ? _b : __.FM.float_2_1_1(0.0, 0.0);\\n            this.kind = (_c = data.kind) !== null && _c !== void 0 ? _c : (0 | 0);\\n            this.arcRadius = (_d = data.arcRadius) !== null && _d !== void 0 ? _d : 0.0;\\n            this.arcStart = (_e = data.arcStart) !== null && _e !== void 0 ? _e : 0.0;\\n            this.arcEnd = (_f = data.arcEnd) !== null && _f !== void 0 ? _f : 0.0;\\n        }\\n        GeoSegment.prototype.clone = function () {\\n            return new GeoSegment({\\n                start: (0, std___std_all_1.__deepClone)(this.start),\\n                end: (0, std___std_all_1.__deepClone)(this.end),\\n                kind: (0, std___std_all_1.__deepClone)(this.kind),\\n                arcRadius: (0, std___std_all_1.__deepClone)(this.arcRadius),\\n                arcStart: (0, std___std_all_1.__deepClone)(this.arcStart),\\n                arcEnd: (0, std___std_all_1.__deepClone)(this.arcEnd),\\n            });\\n        };\\n        GeoSegment.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_geo_ts_1689_GeoSegment\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"start\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"kind\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"arcRadius\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcStart\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}\\\");\\n        };\\n        return GeoSegment;\\n    }());\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_geo_ts_1689_GeoSegment\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"start\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"kind\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"arcRadius\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcStart\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]}\\\"), GeoSegment)\\n    /**@shadeup=struct*/ var GeoPoly = /** @class */ (function () {\\n        function GeoPoly(data) {\\n            var _a;\\n            this.segments = (_a = data.segments) !== null && _a !== void 0 ? _a : [];\\n        }\\n        GeoPoly.prototype.area = function () { return 0.0; };\\n        GeoPoly.prototype.perimeter = function () { return 0.0; };\\n        GeoPoly.prototype.discretize = function () { var shader_self_temp = this; return this.clone(); };\\n        GeoPoly.prototype.clone = function () {\\n            return new GeoPoly({\\n                segments: (0, std___std_all_1.__deepClone)(this.segments),\\n            });\\n        };\\n        GeoPoly.prototype._getStructure = function () {\\n            return JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_geo_ts_2553_GeoPoly\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"segments\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_geo_ts_1689_GeoSegment\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"start\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"kind\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"arcRadius\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcStart\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]},\\\\\\\"staticSize\\\\\\\":1}]]}\\\");\\n        };\\n        return GeoPoly;\\n    }());\\n    __shadeup_register_struct(JSON.parse(\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_geo_ts_2553_GeoPoly\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"segments\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"array\\\\\\\",\\\\\\\"element\\\\\\\":{\\\\\\\"type\\\\\\\":\\\\\\\"struct\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"str_i_iistd_geo_ts_1689_GeoSegment\\\\\\\",\\\\\\\"fields\\\\\\\":[[\\\\\\\"start\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"end\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float2\\\\\\\"}],[\\\\\\\"kind\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"int\\\\\\\"}],[\\\\\\\"arcRadius\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcStart\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}],[\\\\\\\"arcEnd\\\\\\\",{\\\\\\\"type\\\\\\\":\\\\\\\"primitive\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"float\\\\\\\"}]]},\\\\\\\"staticSize\\\\\\\":1}]]}\\\"), GeoPoly)\\n});\\n/* impl GeoPoly */\\n\"}],\"emitSkipped\":false,\"diagnostics\":[]}}"
  },
  {
    "path": "lang/shadeup-frontend/lib/environment/tagGraph.ts",
    "content": "import ts from 'typescript';\n\nclass TagNode {\n\tname: string;\n\ttsNode?: ts.Node;\n\ttags: string[];\n\tedges: TagNode[];\n\tedgesOther: TagNode[];\n\n\tconstructor(name: string, tsNode?: ts.Node) {\n\t\tthis.tsNode = tsNode;\n\t\tthis.name = name;\n\t\tthis.tags = [];\n\t\tthis.edges = [];\n\t\tthis.edgesOther = [];\n\t}\n}\n\nexport class TagGraph {\n\tnodes: TagNode[];\n\tconstructor() {\n\t\tthis.nodes = [];\n\t}\n\n\taddNode(name: string, tsNode?: ts.Node) {\n\t\tlet node = this.nodes.find((node) => node.name === name);\n\t\tif (!node) {\n\t\t\tnode = new TagNode(name, tsNode);\n\t\t\tthis.nodes.push(node);\n\t\t}\n\t}\n\n\taddEdge(from: string, to: string) {\n\t\tlet fromNode = this.nodes.find((node) => node.name === from);\n\t\tif (!fromNode) {\n\t\t\tfromNode = new TagNode(from);\n\t\t\tthis.nodes.push(fromNode);\n\t\t}\n\n\t\tlet toNode = this.nodes.find((node) => node.name === to);\n\t\tif (!toNode) {\n\t\t\ttoNode = new TagNode(to);\n\t\t\tthis.nodes.push(toNode);\n\t\t}\n\n\t\tfromNode.edges.push(toNode);\n\t\ttoNode.edgesOther.push(fromNode);\n\t}\n\n\taddTag(name: string, tag: string) {\n\t\tlet node = this.nodes.find((node) => node.name === name);\n\t\tif (!node) {\n\t\t\tnode = new TagNode(name);\n\t\t\tthis.nodes.push(node);\n\t\t}\n\n\t\tnode.tags.push(tag);\n\t}\n\n\tgetNode(name: string) {\n\t\treturn this.nodes.find((node) => node.name === name);\n\t}\n\n\tresolveTagSourceChain(name: string, tag: string): string[] {\n\t\tconst node = this.getNode(name);\n\t\tif (!node) return [];\n\n\t\tconst chain = [name];\n\t\tconst visited = new Set<string>();\n\t\tconst queue = [node];\n\n\t\twhile (queue.length > 0) {\n\t\t\tconst node = queue.shift()!;\n\t\t\tif (visited.has(node.name)) continue;\n\t\t\tvisited.add(node.name);\n\n\t\t\tlet nodeWithTag = null;\n\t\t\tfor (const edge of node.edgesOther) {\n\t\t\t\tif (edge.tags.includes(tag)) {\n\t\t\t\t\tnodeWithTag = edge;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (nodeWithTag) {\n\t\t\t\tchain.push(nodeWithTag.name);\n\t\t\t\tqueue.push(nodeWithTag);\n\t\t\t} else {\n\t\t\t\treturn chain;\n\t\t\t}\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tpropagateTags() {\n\t\tlet changed = true;\n\t\twhile (changed) {\n\t\t\tchanged = false;\n\t\t\tfor (const node of this.nodes) {\n\t\t\t\tfor (const edge of node.edges) {\n\t\t\t\t\tfor (const tag of node.tags) {\n\t\t\t\t\t\tif (!edge.tags.includes(tag)) {\n\t\t\t\t\t\t\tedge.tags.push(tag);\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/environment/validate.ts",
    "content": "/**\n * Validates the checked typescript ast\n */\n\nimport ts from 'typescript';\nimport { lookupIndexMappingRange } from '../generator/root';\nimport { getFunctionDeclarationFromCallExpression } from '../generator/util';\nimport {\n\tgetFunctionNodeName,\n\thasShadeupDocTag,\n\tShadeupEnvironment,\n\tShadeupFile\n} from './ShadeupEnvironment';\nimport { getArrayTypeInfo } from '../generator/wgsl';\n\ntype VisitorSignature = {\n\tfile: ShadeupFile;\n\tast: ts.SourceFile;\n\tchecker: ts.TypeChecker;\n\tnode: ts.Node;\n};\n\nfunction printNode(node: ts.Node) {\n\tconsole.log(ts.SyntaxKind[node.kind]);\n}\n\nfunction printFlagsSymbol(flags: number) {\n\tlet flag = [];\n\tfor (let f of Object.keys(ts.SymbolFlags)) {\n\t\tif (flags & ts.SymbolFlags[f]) {\n\t\t\tflag.push(f);\n\t\t}\n\t}\n\tconsole.log(flag);\n}\nfunction printFlagsType(flags: number) {\n\tlet flag = [];\n\tfor (let f of Object.keys(ts.TypeFlags)) {\n\t\tif (flags & ts.TypeFlags[f]) {\n\t\t\tflag.push(f);\n\t\t}\n\t}\n\tconsole.log(flag);\n}\n\nexport function validate(\n\tfile: ShadeupFile,\n\tast: ts.SourceFile,\n\tchecker: ts.TypeChecker\n): ts.Diagnostic[] {\n\tlet now = performance.now();\n\tlet nodes = 0;\n\tconst errors: ts.Diagnostic[] = [];\n\n\tfunction add(e: ts.Diagnostic | ts.Diagnostic[] | undefined) {\n\t\tif (e) {\n\t\t\tif (Array.isArray(e)) {\n\t\t\t\terrors.push(...e);\n\t\t\t} else {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\t\t}\n\t}\n\n\t// ast.\n\n\tfunction visit(ctx: VisitorSignature) {\n\t\tnodes++;\n\t\tctx.node.forEachChild((node) =>\n\t\t\tvisit({\n\t\t\t\t...ctx,\n\t\t\t\tnode\n\t\t\t})\n\t\t);\n\t\tif (ctx.node.kind == ts.SyntaxKind.PropertyAccessExpression) {\n\t\t\tif (ts.isPropertyAccessExpression(ctx.node)) {\n\t\t\t\tadd(validatePropertyAccessExpression(ctx, ctx.node));\n\t\t\t}\n\t\t} else if (ctx.node.kind == ts.SyntaxKind.ConditionalExpression) {\n\t\t\tif (ts.isConditionalExpression(ctx.node)) {\n\t\t\t\tadd(validateConditionalExpression(ctx, ctx.node));\n\t\t\t}\n\t\t} else if (ctx.node.kind == ts.SyntaxKind.CallExpression) {\n\t\t\tif (ts.isCallExpression(ctx.node)) {\n\t\t\t\tadd(validateCallExpression(ctx, ctx.node));\n\t\t\t}\n\t\t}\n\t}\n\n\tvisit({\n\t\tfile,\n\t\tast,\n\t\tchecker,\n\t\tnode: ast\n\t});\n\n\treturn errors;\n}\n\nexport function validateGraph(\n\tenv: ShadeupEnvironment,\n\tfile: ShadeupFile,\n\tast: ts.SourceFile,\n\tchecker: ts.TypeChecker\n): ts.Diagnostic[] {\n\tlet now = performance.now();\n\tlet nodes = 0;\n\tconst errors: ts.Diagnostic[] = [];\n\n\tfunction add(e: ts.Diagnostic | ts.Diagnostic[] | undefined) {\n\t\tif (e) {\n\t\t\tif (Array.isArray(e)) {\n\t\t\t\terrors.push(...e);\n\t\t\t} else {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction visit(ctx: VisitorSignature) {\n\t\tnodes++;\n\t\tctx.node.forEachChild((node) =>\n\t\t\tvisit({\n\t\t\t\t...ctx,\n\t\t\t\tnode\n\t\t\t})\n\t\t);\n\n\t\tif (ts.isCallExpression(ctx.node)) {\n\t\t\tlet lhsType = checker?.getTypeAtLocation(ctx.node.getChildAt(0));\n\t\t\tlet sig = lhsType?.getCallSignatures();\n\t\t\tif (sig && sig[0] && sig[0].getDeclaration()) {\n\t\t\t\tlet declaration = sig[0].getDeclaration();\n\n\t\t\t\tif (ts.isIdentifier(ctx.node.expression) && ctx.node.expression.text == 'makeShader') {\n\t\t\t\t\tlet n = checker?.getTypeAtLocation(declaration);\n\t\t\t\t\tif (ctx.node.arguments.length >= 2) {\n\t\t\t\t\t\tif (ts.isArrowFunction(ctx.node.arguments[1])) {\n\t\t\t\t\t\t\tadd(validateShaderCalls(env, ctx, ctx.node.arguments[1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (ts.isExpressionStatement(ctx.node)) {\n\t\t\tadd(validateStatement(ctx, ctx.node));\n\t\t}\n\n\t\tif (ts.isArrayLiteralExpression(ctx.node)) {\n\t\t\tadd(validateArrayLiteral(ctx, ctx.node));\n\t\t}\n\t}\n\n\tvisit({\n\t\tfile,\n\t\tast,\n\t\tchecker,\n\t\tnode: ast\n\t});\n\n\treturn errors;\n}\n\nfunction hasAnyFlag(flags: number, ...flag: number[]) {\n\treturn flag.some((f) => (flags & f) !== 0);\n}\n\nexport function isStaticPropertyAccessExpression(\n\tchecker: ts.TypeChecker,\n\tnode: ts.PropertyAccessExpression\n) {\n\tlet resultType = checker.getSymbolAtLocation(node);\n\tif (!resultType) return false;\n\n\tlet tos = checker.getTypeOfSymbolAtLocation(resultType, node);\n\n\tlet isStaticMember = false;\n\n\tif ((resultType as any).parent) {\n\t\tlet p = (resultType as any).parent as ts.Symbol;\n\t\tif (\n\t\t\tp.valueDeclaration &&\n\t\t\tp.name != '__' &&\n\t\t\t!ts.isSourceFile(p.valueDeclaration) &&\n\t\t\tp.flags & ts.SymbolFlags.Namespace\n\t\t) {\n\t\t\tisStaticMember = true;\n\t\t}\n\t}\n\n\ttos.getCallSignatures().forEach((s) => {\n\t\tif (s.declaration) {\n\t\t\ts.declaration.modifiers?.forEach((m) => {\n\t\t\t\tif (m.kind == ts.SyntaxKind.StaticKeyword) {\n\t\t\t\t\tisStaticMember = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\treturn isStaticMember;\n}\n\nfunction validateStatement({ checker, file }: VisitorSignature, node: ts.ExpressionStatement) {\n\tif (\n\t\tts.isLiteralExpression(node.expression) ||\n\t\tts.isPropertyAccessChain(node.expression) ||\n\t\tts.isPropertyAccessExpression(node.expression) ||\n\t\tts.isIdentifier(node.expression)\n\t) {\n\t\treturn {\n\t\t\tfile: node.getSourceFile(),\n\t\t\tcode: 0,\n\t\t\tmessageText: `This expression has no effect`,\n\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\tstart: node.getStart(),\n\t\t\tlength: node.getEnd() - node.getStart()\n\t\t} as ts.Diagnostic;\n\t}\n}\n\nfunction validateConditionalExpression(\n\t{ checker, file }: VisitorSignature,\n\tnode: ts.ConditionalExpression\n) {\n\t// Ensure both branches are of the same exact type (we don't auto cast this one)\n\tlet thenType = checker.getTypeAtLocation(node.whenTrue);\n\tlet elseType = checker.getTypeAtLocation(node.whenFalse);\n\n\tif (!isTypeCompatible(checker, thenType, elseType)) {\n\t\treturn undefined; // This is broken\n\t\treturn {\n\t\t\tfile: node.getSourceFile(),\n\t\t\tcode: 0,\n\t\t\tmessageText: `Conditional expression branches must be of the same type. Got ${checker.typeToString(\n\t\t\t\tthenType\n\t\t\t)} and ${checker.typeToString(elseType)}`,\n\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\tstart: node.getStart(),\n\t\t\tlength: node.getEnd() - node.getStart()\n\t\t} as ts.Diagnostic;\n\t}\n\n\treturn undefined;\n}\nfunction validateCallExpression({ checker, file }: VisitorSignature, node: ts.CallExpression) {\n\tif (ts.isPropertyAccessExpression(node.expression)) {\n\t\tlet left = node.expression.expression;\n\t\tif (!ts.isIdentifier(left)) return undefined;\n\t\tif (left.text != '__') return undefined;\n\t\tlet right = node.expression.name.text;\n\n\t\tif (\n\t\t\tright.startsWith('int') &&\n\t\t\t(right[right.length - 1] == '2' ||\n\t\t\t\tright[right.length - 1] == '3' ||\n\t\t\t\tright[right.length - 1] == '4')\n\t\t) {\n\t\t\tfor (let i = 0; i < node.arguments.length; i++) {\n\t\t\t\tlet arg = node.arguments[i];\n\n\t\t\t\tlet type = checker.getTypeAtLocation(arg);\n\n\t\t\t\tlet typeName = checker.typeToString(type);\n\t\t\t\tif (typeName.startsWith('uint')) {\n\t\t\t\t\tif (node.arguments.length != 1) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tfile: node.getSourceFile(),\n\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\tmessageText: `Cannot convert from uint to int during vector construction, use int() before`,\n\t\t\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\t\t\tstart: arg.getStart(),\n\t\t\t\t\t\t\tlength: arg.getEnd() - arg.getStart()\n\t\t\t\t\t\t} as ts.Diagnostic;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction validatePropertyAccessExpression(\n\t{ checker, file }: VisitorSignature,\n\tnode: ts.PropertyAccessExpression\n) {\n\tlet midNode = node.getChildren()[1];\n\n\tif (file.mapping && midNode) {\n\t\tlet range = lookupIndexMappingRange(file.mapping, midNode.getStart(), midNode.getEnd());\n\n\t\tlet s = file.content.substring(range.start, range.end);\n\n\t\tlet isStaticAccess = s == '::';\n\n\t\tlet resultType = checker.getSymbolAtLocation(node);\n\n\t\tif (resultType) {\n\t\t\tlet tos = checker.getTypeOfSymbolAtLocation(resultType, node);\n\n\t\t\tlet isStaticMember = false;\n\n\t\t\tif ((resultType as any).parent) {\n\t\t\t\tlet p = (resultType as any).parent as ts.Symbol;\n\t\t\t\tif (\n\t\t\t\t\tp.valueDeclaration &&\n\t\t\t\t\tp.name != '__' &&\n\t\t\t\t\t!ts.isSourceFile(p.valueDeclaration) &&\n\t\t\t\t\tp.flags & ts.SymbolFlags.Namespace\n\t\t\t\t) {\n\t\t\t\t\tisStaticMember = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttos.getCallSignatures().forEach((s) => {\n\t\t\t\tif (s.declaration) {\n\t\t\t\t\ts.declaration.modifiers?.forEach((m) => {\n\t\t\t\t\t\tif (m.kind == ts.SyntaxKind.StaticKeyword) {\n\t\t\t\t\t\t\tisStaticMember = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tresultType.getDeclarations()?.forEach((d) => {\n\t\t\t\tif (ts.canHaveModifiers(d) && d.modifiers) {\n\t\t\t\t\td.modifiers.forEach((m) => {\n\t\t\t\t\t\tif (m.kind == ts.SyntaxKind.StaticKeyword) {\n\t\t\t\t\t\t\tisStaticMember = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (isStaticMember && !isStaticAccess) {\n\t\t\t\treturn {\n\t\t\t\t\tfile: node.getSourceFile(),\n\t\t\t\t\tcode: 0,\n\t\t\t\t\tmessageText: `Cannot access static member with '${s}' use '::' instead`,\n\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\tstart: midNode.getStart(),\n\t\t\t\t\tlength: midNode.getEnd() - midNode.getStart()\n\t\t\t\t} as ts.Diagnostic;\n\t\t\t} else if (!isStaticMember && isStaticAccess) {\n\t\t\t\treturn {\n\t\t\t\t\tfile: node.getSourceFile(),\n\t\t\t\t\tcode: 0,\n\t\t\t\t\tmessageText: `Cannot access non-static member with '${s}' use '.' instead`,\n\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\tstart: midNode.getStart(),\n\t\t\t\t\tlength: midNode.getEnd() - midNode.getStart()\n\t\t\t\t} as ts.Diagnostic;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction isTypeCompatible(checker: ts.TypeChecker, type: ts.Type, typeOther: ts.Type): boolean {\n\treturn (checker as any).isTypeAssignableTo(type, typeOther);\n}\n\nfunction validateArrayLiteral(\n\t{ checker, file }: VisitorSignature,\n\tnode: ts.ArrayLiteralExpression\n) {\n\tif (node.elements.length == 3) {\n\t\tlet name1 = checker.typeToString(checker.getTypeAtLocation(node.elements[0]));\n\t\tlet name2 = checker.typeToString(checker.getTypeAtLocation(node.elements[1]));\n\t\tlet name3 = checker.typeToString(checker.getTypeAtLocation(node.elements[2]));\n\n\t\tif (name1 == '0' && name2 == 'shader' && name3 == '0') {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\t// let firstType: ts.Type | undefined = undefined;\n\t// for (let i = 0; i < node.elements.length; i++) {\n\t// \tlet e = node.elements[i];\n\t// \tlet type = checker.getTypeAtLocation(e);\n\n\t// \tif (firstType) {\n\t// \t\tif (!isTypeCompatible(checker, type, firstType)) {\n\t// \t\t\tif (\n\t// \t\t\t\tfirstType.getSymbol()?.getName() != 'texture2d_internal_empty' &&\n\t// \t\t\t\tfirstType.getSymbol()?.getName() != 'buffer_internal' &&\n\t// \t\t\t\tfirstType.getSymbol()?.getName() != 'texture3d_internal_empty'\n\t// \t\t\t) {\n\t// \t\t\t\treturn {\n\t// \t\t\t\t\tfile: node.getSourceFile(),\n\t// \t\t\t\t\tcode: 0,\n\t// \t\t\t\t\tmessageText: `Array elements are not compatible, mixing types '${checker.typeToString(\n\t// \t\t\t\t\t\tfirstType\n\t// \t\t\t\t\t)}' and '${checker.typeToString(type)}'`,\n\t// \t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t// \t\t\t\t\tstart: e.getStart(),\n\t// \t\t\t\t\tlength: e.getEnd() - e.getStart()\n\t// \t\t\t\t} as ts.Diagnostic;\n\t// \t\t\t}\n\t// \t\t}\n\t// \t} else {\n\t// \t\tfirstType = type;\n\t// \t}\n\t// }\n\n\treturn undefined;\n}\n\nconst SHADER_TYPE_BLACKLIST = ['string', 'null', 'map'];\nfunction validateShaderTypeUse(\n\tenv: ShadeupEnvironment,\n\t{ checker, file }: VisitorSignature,\n\tdiags: ts.Diagnostic[],\n\tnode: ts.Node,\n\ttypeNode: ts.Type\n) {\n\tlet type = checker.typeToString(typeNode);\n\n\tif (SHADER_TYPE_BLACKLIST.includes(type) || type.startsWith('map<')) {\n\t\tdiags.push({\n\t\t\tfile: node.getSourceFile(),\n\t\t\tcode: 0,\n\t\t\tmessageText: `Cannot use type '${type}' in shader`,\n\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\tstart: node.getStart(),\n\t\t\tlength: node.getEnd() - node.getStart()\n\t\t} as ts.Diagnostic);\n\t}\n\n\tif (typeNode.isUnion() && type != 'boolean') {\n\t\tdiags.push({\n\t\t\tfile: node.getSourceFile(),\n\t\t\tcode: 0,\n\t\t\tmessageText: `Cannot use union types in shaders ('${type}')`,\n\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\tstart: node.getStart(),\n\t\t\tlength: node.getEnd() - node.getStart()\n\t\t} as ts.Diagnostic);\n\t}\n\n\tif (typeNode.isLiteral()) {\n\t\tdiags.push({\n\t\t\tfile: node.getSourceFile(),\n\t\t\tcode: 0,\n\t\t\tmessageText: `Cannot use literal types in shaders ('${type}')`,\n\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\tstart: node.getStart(),\n\t\t\tlength: node.getEnd() - node.getStart()\n\t\t} as ts.Diagnostic);\n\t}\n}\n\nfunction validateShaderCalls(\n\tenv: ShadeupEnvironment,\n\tvs: VisitorSignature,\n\tnode: ts.ArrowFunction\n) {\n\tlet diags: ts.Diagnostic[] = [];\n\tconst { checker, file } = vs;\n\n\tlet visit = (node: ts.Node) => {\n\t\tif (ts.isCallExpression(node)) {\n\t\t\tlet declar = getFunctionDeclarationFromCallExpression(checker, node);\n\t\t\tif (declar) {\n\t\t\t\tlet graphNodeName = getFunctionNodeName(declar);\n\n\t\t\t\tlet graphNode = env.tagGraph.getNode(graphNodeName);\n\t\t\t\tif (graphNode) {\n\t\t\t\t\tif (graphNode.tags.includes('async')) {\n\t\t\t\t\t\tlet rawChain = env.tagGraph.resolveTagSourceChain(graphNodeName, 'async');\n\t\t\t\t\t\tlet chain = rawChain.map((m) => m.split(':')[1]).join(' <- ');\n\n\t\t\t\t\t\tif (rawChain[rawChain.length - 1].split(':')[1] == 'texture2d_internal_empty') {\n\t\t\t\t\t\t\t// This is a non  error\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdiags.push({\n\t\t\t\t\t\t\t\tfile: node.getSourceFile(),\n\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\tmessageText: `Cannot call cpu-only function from a shader. ${chain}`,\n\t\t\t\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\t\t\t\tstart: node.getStart(),\n\t\t\t\t\t\t\t\tlength: node.getEnd() - node.getStart()\n\t\t\t\t\t\t\t} as ts.Diagnostic);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalidateShaderTypeUse(env, vs, diags, node, checker.getTypeAtLocation(node));\n\t\t}\n\n\t\tif (ts.isPropertyAccessExpression(node)) {\n\t\t\tvalidateShaderTypeUse(env, vs, diags, node, checker.getTypeAtLocation(node));\n\t\t}\n\n\t\tif (ts.isIdentifier(node)) {\n\t\t\tvalidateShaderTypeUse(env, vs, diags, node, checker.getTypeAtLocation(node));\n\t\t}\n\n\t\tif (ts.isElementAccessExpression(node)) {\n\t\t\tvalidateShaderTypeUse(env, vs, diags, node, checker.getTypeAtLocation(node));\n\t\t}\n\n\t\tif (ts.isVariableDeclaration(node)) {\n\t\t\tlet arrType = checker.getTypeAtLocation(node);\n\t\t\tlet typeInfo = getArrayTypeInfo(checker, arrType);\n\t\t\tif (typeInfo.isArray) {\n\t\t\t\tif (typeInfo.staticSize <= 0) {\n\t\t\t\t\tdiags.push({\n\t\t\t\t\t\tfile: node.getSourceFile(),\n\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\tmessageText: `Please explicitly specify the size of the array (let a: T[10] = ...)`,\n\t\t\t\t\t\tcategory: ts.DiagnosticCategory.Error,\n\t\t\t\t\t\tstart: node.getStart(),\n\t\t\t\t\t\tlength: node.getEnd() - node.getStart()\n\t\t\t\t\t} as ts.Diagnostic);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tts.forEachChild(node, visit);\n\t};\n\tts.forEachChild(node, visit);\n\n\treturn diags;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/fast-diff/diff.js",
    "content": "/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, _fix_unicode) {\n\t// Check for equality\n\tif (text1 === text2) {\n\t\tif (text1) {\n\t\t\treturn [[DIFF_EQUAL, text1]];\n\t\t}\n\t\treturn [];\n\t}\n\n\tif (cursor_pos != null) {\n\t\tvar editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n\t\tif (editdiff) {\n\t\t\treturn editdiff;\n\t\t}\n\t}\n\n\t// Trim off common prefix (speedup).\n\tvar commonlength = diff_commonPrefix(text1, text2);\n\tvar commonprefix = text1.substring(0, commonlength);\n\ttext1 = text1.substring(commonlength);\n\ttext2 = text2.substring(commonlength);\n\n\t// Trim off common suffix (speedup).\n\tcommonlength = diff_commonSuffix(text1, text2);\n\tvar commonsuffix = text1.substring(text1.length - commonlength);\n\ttext1 = text1.substring(0, text1.length - commonlength);\n\ttext2 = text2.substring(0, text2.length - commonlength);\n\n\t// Compute the diff on the middle block.\n\tvar diffs = diff_compute_(text1, text2);\n\n\t// Restore the prefix and suffix.\n\tif (commonprefix) {\n\t\tdiffs.unshift([DIFF_EQUAL, commonprefix]);\n\t}\n\tif (commonsuffix) {\n\t\tdiffs.push([DIFF_EQUAL, commonsuffix]);\n\t}\n\tdiff_cleanupMerge(diffs, _fix_unicode);\n\treturn diffs;\n}\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n\tvar diffs;\n\n\tif (!text1) {\n\t\t// Just add some text (speedup).\n\t\treturn [[DIFF_INSERT, text2]];\n\t}\n\n\tif (!text2) {\n\t\t// Just delete some text (speedup).\n\t\treturn [[DIFF_DELETE, text1]];\n\t}\n\n\tvar longtext = text1.length > text2.length ? text1 : text2;\n\tvar shorttext = text1.length > text2.length ? text2 : text1;\n\tvar i = longtext.indexOf(shorttext);\n\tif (i !== -1) {\n\t\t// Shorter text is inside the longer text (speedup).\n\t\tdiffs = [\n\t\t\t[DIFF_INSERT, longtext.substring(0, i)],\n\t\t\t[DIFF_EQUAL, shorttext],\n\t\t\t[DIFF_INSERT, longtext.substring(i + shorttext.length)]\n\t\t];\n\t\t// Swap insertions for deletions if diff is reversed.\n\t\tif (text1.length > text2.length) {\n\t\t\tdiffs[0][0] = diffs[2][0] = DIFF_DELETE;\n\t\t}\n\t\treturn diffs;\n\t}\n\n\tif (shorttext.length === 1) {\n\t\t// Single character string.\n\t\t// After the previous speedup, the character can't be an equality.\n\t\treturn [\n\t\t\t[DIFF_DELETE, text1],\n\t\t\t[DIFF_INSERT, text2]\n\t\t];\n\t}\n\n\t// Check to see if the problem can be split in two.\n\tvar hm = diff_halfMatch_(text1, text2);\n\tif (hm) {\n\t\t// A half-match was found, sort out the return data.\n\t\tvar text1_a = hm[0];\n\t\tvar text1_b = hm[1];\n\t\tvar text2_a = hm[2];\n\t\tvar text2_b = hm[3];\n\t\tvar mid_common = hm[4];\n\t\t// Send both pairs off for separate processing.\n\t\tvar diffs_a = diff_main(text1_a, text2_a);\n\t\tvar diffs_b = diff_main(text1_b, text2_b);\n\t\t// Merge the results.\n\t\treturn diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n\t}\n\n\treturn diff_bisect_(text1, text2);\n}\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n\t// Cache the text lengths to prevent multiple calls.\n\tvar text1_length = text1.length;\n\tvar text2_length = text2.length;\n\tvar max_d = Math.ceil((text1_length + text2_length) / 2);\n\tvar v_offset = max_d;\n\tvar v_length = 2 * max_d;\n\tvar v1 = new Array(v_length);\n\tvar v2 = new Array(v_length);\n\t// Setting all elements to -1 is faster in Chrome & Firefox than mixing\n\t// integers and undefined.\n\tfor (var x = 0; x < v_length; x++) {\n\t\tv1[x] = -1;\n\t\tv2[x] = -1;\n\t}\n\tv1[v_offset + 1] = 0;\n\tv2[v_offset + 1] = 0;\n\tvar delta = text1_length - text2_length;\n\t// If the total number of characters is odd, then the front path will collide\n\t// with the reverse path.\n\tvar front = delta % 2 !== 0;\n\t// Offsets for start and end of k loop.\n\t// Prevents mapping of space beyond the grid.\n\tvar k1start = 0;\n\tvar k1end = 0;\n\tvar k2start = 0;\n\tvar k2end = 0;\n\tfor (var d = 0; d < max_d; d++) {\n\t\t// Walk the front path one step.\n\t\tfor (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n\t\t\tvar k1_offset = v_offset + k1;\n\t\t\tvar x1;\n\t\t\tif (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n\t\t\t\tx1 = v1[k1_offset + 1];\n\t\t\t} else {\n\t\t\t\tx1 = v1[k1_offset - 1] + 1;\n\t\t\t}\n\t\t\tvar y1 = x1 - k1;\n\t\t\twhile (x1 < text1_length && y1 < text2_length && text1.charAt(x1) === text2.charAt(y1)) {\n\t\t\t\tx1++;\n\t\t\t\ty1++;\n\t\t\t}\n\t\t\tv1[k1_offset] = x1;\n\t\t\tif (x1 > text1_length) {\n\t\t\t\t// Ran off the right of the graph.\n\t\t\t\tk1end += 2;\n\t\t\t} else if (y1 > text2_length) {\n\t\t\t\t// Ran off the bottom of the graph.\n\t\t\t\tk1start += 2;\n\t\t\t} else if (front) {\n\t\t\t\tvar k2_offset = v_offset + delta - k1;\n\t\t\t\tif (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n\t\t\t\t\t// Mirror x2 onto top-left coordinate system.\n\t\t\t\t\tvar x2 = text1_length - v2[k2_offset];\n\t\t\t\t\tif (x1 >= x2) {\n\t\t\t\t\t\t// Overlap detected.\n\t\t\t\t\t\treturn diff_bisectSplit_(text1, text2, x1, y1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Walk the reverse path one step.\n\t\tfor (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n\t\t\tvar k2_offset = v_offset + k2;\n\t\t\tvar x2;\n\t\t\tif (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n\t\t\t\tx2 = v2[k2_offset + 1];\n\t\t\t} else {\n\t\t\t\tx2 = v2[k2_offset - 1] + 1;\n\t\t\t}\n\t\t\tvar y2 = x2 - k2;\n\t\t\twhile (\n\t\t\t\tx2 < text1_length &&\n\t\t\t\ty2 < text2_length &&\n\t\t\t\ttext1.charAt(text1_length - x2 - 1) === text2.charAt(text2_length - y2 - 1)\n\t\t\t) {\n\t\t\t\tx2++;\n\t\t\t\ty2++;\n\t\t\t}\n\t\t\tv2[k2_offset] = x2;\n\t\t\tif (x2 > text1_length) {\n\t\t\t\t// Ran off the left of the graph.\n\t\t\t\tk2end += 2;\n\t\t\t} else if (y2 > text2_length) {\n\t\t\t\t// Ran off the top of the graph.\n\t\t\t\tk2start += 2;\n\t\t\t} else if (!front) {\n\t\t\t\tvar k1_offset = v_offset + delta - k2;\n\t\t\t\tif (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n\t\t\t\t\tvar x1 = v1[k1_offset];\n\t\t\t\t\tvar y1 = v_offset + x1 - k1_offset;\n\t\t\t\t\t// Mirror x2 onto top-left coordinate system.\n\t\t\t\t\tx2 = text1_length - x2;\n\t\t\t\t\tif (x1 >= x2) {\n\t\t\t\t\t\t// Overlap detected.\n\t\t\t\t\t\treturn diff_bisectSplit_(text1, text2, x1, y1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Diff took too long and hit the deadline or\n\t// number of diffs equals number of characters, no commonality at all.\n\treturn [\n\t\t[DIFF_DELETE, text1],\n\t\t[DIFF_INSERT, text2]\n\t];\n}\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n\tvar text1a = text1.substring(0, x);\n\tvar text2a = text2.substring(0, y);\n\tvar text1b = text1.substring(x);\n\tvar text2b = text2.substring(y);\n\n\t// Compute both diffs serially.\n\tvar diffs = diff_main(text1a, text2a);\n\tvar diffsb = diff_main(text1b, text2b);\n\n\treturn diffs.concat(diffsb);\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n\t// Quick check for common null cases.\n\tif (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n\t\treturn 0;\n\t}\n\t// Binary search.\n\t// Performance analysis: http://neil.fraser.name/news/2007/10/09/\n\tvar pointermin = 0;\n\tvar pointermax = Math.min(text1.length, text2.length);\n\tvar pointermid = pointermax;\n\tvar pointerstart = 0;\n\twhile (pointermin < pointermid) {\n\t\tif (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n\t\t\tpointermin = pointermid;\n\t\t\tpointerstart = pointermin;\n\t\t} else {\n\t\t\tpointermax = pointermid;\n\t\t}\n\t\tpointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n\t}\n\n\tif (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n\t\tpointermid--;\n\t}\n\n\treturn pointermid;\n}\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n\t// Quick check for common null cases.\n\tif (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n\t\treturn 0;\n\t}\n\t// Binary search.\n\t// Performance analysis: http://neil.fraser.name/news/2007/10/09/\n\tvar pointermin = 0;\n\tvar pointermax = Math.min(text1.length, text2.length);\n\tvar pointermid = pointermax;\n\tvar pointerend = 0;\n\twhile (pointermin < pointermid) {\n\t\tif (\n\t\t\ttext1.substring(text1.length - pointermid, text1.length - pointerend) ==\n\t\t\ttext2.substring(text2.length - pointermid, text2.length - pointerend)\n\t\t) {\n\t\t\tpointermin = pointermid;\n\t\t\tpointerend = pointermin;\n\t\t} else {\n\t\t\tpointermax = pointermid;\n\t\t}\n\t\tpointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n\t}\n\n\tif (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n\t\tpointermid--;\n\t}\n\n\treturn pointermid;\n}\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n\tvar longtext = text1.length > text2.length ? text1 : text2;\n\tvar shorttext = text1.length > text2.length ? text2 : text1;\n\tif (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n\t\treturn null; // Pointless.\n\t}\n\n\t/**\n\t * Does a substring of shorttext exist within longtext such that the substring\n\t * is at least half the length of longtext?\n\t * Closure, but does not reference any external variables.\n\t * @param {string} longtext Longer string.\n\t * @param {string} shorttext Shorter string.\n\t * @param {number} i Start index of quarter length substring within longtext.\n\t * @return {Array.<string>} Five element Array, containing the prefix of\n\t *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n\t *     of shorttext and the common middle.  Or null if there was no match.\n\t * @private\n\t */\n\tfunction diff_halfMatchI_(longtext, shorttext, i) {\n\t\t// Start with a 1/4 length substring at position i as a seed.\n\t\tvar seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n\t\tvar j = -1;\n\t\tvar best_common = '';\n\t\tvar best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n\t\twhile ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n\t\t\tvar prefixLength = diff_commonPrefix(longtext.substring(i), shorttext.substring(j));\n\t\t\tvar suffixLength = diff_commonSuffix(longtext.substring(0, i), shorttext.substring(0, j));\n\t\t\tif (best_common.length < suffixLength + prefixLength) {\n\t\t\t\tbest_common =\n\t\t\t\t\tshorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength);\n\t\t\t\tbest_longtext_a = longtext.substring(0, i - suffixLength);\n\t\t\t\tbest_longtext_b = longtext.substring(i + prefixLength);\n\t\t\t\tbest_shorttext_a = shorttext.substring(0, j - suffixLength);\n\t\t\t\tbest_shorttext_b = shorttext.substring(j + prefixLength);\n\t\t\t}\n\t\t}\n\t\tif (best_common.length * 2 >= longtext.length) {\n\t\t\treturn [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// First check if the second quarter is the seed for a half-match.\n\tvar hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));\n\t// Check again based on the third quarter.\n\tvar hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n\tvar hm;\n\tif (!hm1 && !hm2) {\n\t\treturn null;\n\t} else if (!hm2) {\n\t\thm = hm1;\n\t} else if (!hm1) {\n\t\thm = hm2;\n\t} else {\n\t\t// Both matched.  Select the longest.\n\t\thm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n\t}\n\n\t// A half-match was found, sort out the return data.\n\tvar text1_a, text1_b, text2_a, text2_b;\n\tif (text1.length > text2.length) {\n\t\ttext1_a = hm[0];\n\t\ttext1_b = hm[1];\n\t\ttext2_a = hm[2];\n\t\ttext2_b = hm[3];\n\t} else {\n\t\ttext2_a = hm[0];\n\t\ttext2_b = hm[1];\n\t\ttext1_a = hm[2];\n\t\ttext1_b = hm[3];\n\t}\n\tvar mid_common = hm[4];\n\treturn [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n\tdiffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n\tvar pointer = 0;\n\tvar count_delete = 0;\n\tvar count_insert = 0;\n\tvar text_delete = '';\n\tvar text_insert = '';\n\tvar commonlength;\n\twhile (pointer < diffs.length) {\n\t\tif (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n\t\t\tdiffs.splice(pointer, 1);\n\t\t\tcontinue;\n\t\t}\n\t\tswitch (diffs[pointer][0]) {\n\t\t\tcase DIFF_INSERT:\n\t\t\t\tcount_insert++;\n\t\t\t\ttext_insert += diffs[pointer][1];\n\t\t\t\tpointer++;\n\t\t\t\tbreak;\n\t\t\tcase DIFF_DELETE:\n\t\t\t\tcount_delete++;\n\t\t\t\ttext_delete += diffs[pointer][1];\n\t\t\t\tpointer++;\n\t\t\t\tbreak;\n\t\t\tcase DIFF_EQUAL:\n\t\t\t\tvar previous_equality = pointer - count_insert - count_delete - 1;\n\t\t\t\tif (fix_unicode) {\n\t\t\t\t\t// prevent splitting of unicode surrogate pairs.  when fix_unicode is true,\n\t\t\t\t\t// we assume that the old and new text in the diff are complete and correct\n\t\t\t\t\t// unicode-encoded JS strings, but the tuple boundaries may fall between\n\t\t\t\t\t// surrogate pairs.  we fix this by shaving off stray surrogates from the end\n\t\t\t\t\t// of the previous equality and the beginning of this equality.  this may create\n\t\t\t\t\t// empty equalities or a common prefix or suffix.  for example, if AB and AC are\n\t\t\t\t\t// emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n\t\t\t\t\t// inserting 'AC', and then the common suffix 'AC' will be eliminated.  in this\n\t\t\t\t\t// particular case, both equalities go away, we absorb any previous inequalities,\n\t\t\t\t\t// and we keep scanning for the next equality before rewriting the tuples.\n\t\t\t\t\tif (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) {\n\t\t\t\t\t\tvar stray = diffs[previous_equality][1].slice(-1);\n\t\t\t\t\t\tdiffs[previous_equality][1] = diffs[previous_equality][1].slice(0, -1);\n\t\t\t\t\t\ttext_delete = stray + text_delete;\n\t\t\t\t\t\ttext_insert = stray + text_insert;\n\t\t\t\t\t\tif (!diffs[previous_equality][1]) {\n\t\t\t\t\t\t\t// emptied out previous equality, so delete it and include previous delete/insert\n\t\t\t\t\t\t\tdiffs.splice(previous_equality, 1);\n\t\t\t\t\t\t\tpointer--;\n\t\t\t\t\t\t\tvar k = previous_equality - 1;\n\t\t\t\t\t\t\tif (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n\t\t\t\t\t\t\t\tcount_insert++;\n\t\t\t\t\t\t\t\ttext_insert = diffs[k][1] + text_insert;\n\t\t\t\t\t\t\t\tk--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n\t\t\t\t\t\t\t\tcount_delete++;\n\t\t\t\t\t\t\t\ttext_delete = diffs[k][1] + text_delete;\n\t\t\t\t\t\t\t\tk--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprevious_equality = k;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (starts_with_pair_end(diffs[pointer][1])) {\n\t\t\t\t\t\tvar stray = diffs[pointer][1].charAt(0);\n\t\t\t\t\t\tdiffs[pointer][1] = diffs[pointer][1].slice(1);\n\t\t\t\t\t\ttext_delete += stray;\n\t\t\t\t\t\ttext_insert += stray;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n\t\t\t\t\t// for empty equality not at end, wait for next equality\n\t\t\t\t\tdiffs.splice(pointer, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (text_delete.length > 0 || text_insert.length > 0) {\n\t\t\t\t\t// note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n\t\t\t\t\tif (text_delete.length > 0 && text_insert.length > 0) {\n\t\t\t\t\t\t// Factor out any common prefixes.\n\t\t\t\t\t\tcommonlength = diff_commonPrefix(text_insert, text_delete);\n\t\t\t\t\t\tif (commonlength !== 0) {\n\t\t\t\t\t\t\tif (previous_equality >= 0) {\n\t\t\t\t\t\t\t\tdiffs[previous_equality][1] += text_insert.substring(0, commonlength);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdiffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]);\n\t\t\t\t\t\t\t\tpointer++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext_insert = text_insert.substring(commonlength);\n\t\t\t\t\t\t\ttext_delete = text_delete.substring(commonlength);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Factor out any common suffixes.\n\t\t\t\t\t\tcommonlength = diff_commonSuffix(text_insert, text_delete);\n\t\t\t\t\t\tif (commonlength !== 0) {\n\t\t\t\t\t\t\tdiffs[pointer][1] =\n\t\t\t\t\t\t\t\ttext_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n\t\t\t\t\t\t\ttext_insert = text_insert.substring(0, text_insert.length - commonlength);\n\t\t\t\t\t\t\ttext_delete = text_delete.substring(0, text_delete.length - commonlength);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Delete the offending records and add the merged ones.\n\t\t\t\t\tvar n = count_insert + count_delete;\n\t\t\t\t\tif (text_delete.length === 0 && text_insert.length === 0) {\n\t\t\t\t\t\tdiffs.splice(pointer - n, n);\n\t\t\t\t\t\tpointer = pointer - n;\n\t\t\t\t\t} else if (text_delete.length === 0) {\n\t\t\t\t\t\tdiffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n\t\t\t\t\t\tpointer = pointer - n + 1;\n\t\t\t\t\t} else if (text_insert.length === 0) {\n\t\t\t\t\t\tdiffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n\t\t\t\t\t\tpointer = pointer - n + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiffs.splice(pointer - n, n, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]);\n\t\t\t\t\t\tpointer = pointer - n + 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n\t\t\t\t\t// Merge this equality with the previous one.\n\t\t\t\t\tdiffs[pointer - 1][1] += diffs[pointer][1];\n\t\t\t\t\tdiffs.splice(pointer, 1);\n\t\t\t\t} else {\n\t\t\t\t\tpointer++;\n\t\t\t\t}\n\t\t\t\tcount_insert = 0;\n\t\t\t\tcount_delete = 0;\n\t\t\t\ttext_delete = '';\n\t\t\t\ttext_insert = '';\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (diffs[diffs.length - 1][1] === '') {\n\t\tdiffs.pop(); // Remove the dummy entry at the end.\n\t}\n\n\t// Second pass: look for single edits surrounded on both sides by equalities\n\t// which can be shifted sideways to eliminate an equality.\n\t// e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n\tvar changes = false;\n\tpointer = 1;\n\t// Intentionally ignore the first and last element (don't need checking).\n\twhile (pointer < diffs.length - 1) {\n\t\tif (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n\t\t\t// This is a single edit surrounded by equalities.\n\t\t\tif (\n\t\t\t\tdiffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) ===\n\t\t\t\tdiffs[pointer - 1][1]\n\t\t\t) {\n\t\t\t\t// Shift the edit over the previous equality.\n\t\t\t\tdiffs[pointer][1] =\n\t\t\t\t\tdiffs[pointer - 1][1] +\n\t\t\t\t\tdiffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n\t\t\t\tdiffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n\t\t\t\tdiffs.splice(pointer - 1, 1);\n\t\t\t\tchanges = true;\n\t\t\t} else if (\n\t\t\t\tdiffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]\n\t\t\t) {\n\t\t\t\t// Shift the edit over the next equality.\n\t\t\t\tdiffs[pointer - 1][1] += diffs[pointer + 1][1];\n\t\t\t\tdiffs[pointer][1] =\n\t\t\t\t\tdiffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n\t\t\t\tdiffs.splice(pointer + 1, 1);\n\t\t\t\tchanges = true;\n\t\t\t}\n\t\t}\n\t\tpointer++;\n\t}\n\t// If shifts were made, the diff needs reordering and another shift sweep.\n\tif (changes) {\n\t\tdiff_cleanupMerge(diffs, fix_unicode);\n\t}\n}\n\nfunction is_surrogate_pair_start(charCode) {\n\treturn charCode >= 0xd800 && charCode <= 0xdbff;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n\treturn charCode >= 0xdc00 && charCode <= 0xdfff;\n}\n\nfunction starts_with_pair_end(str) {\n\treturn is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n\treturn is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n\tvar ret = [];\n\tfor (var i = 0; i < tuples.length; i++) {\n\t\tif (tuples[i][1].length > 0) {\n\t\t\tret.push(tuples[i]);\n\t\t}\n\t}\n\treturn ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n\tif (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n\t\treturn null;\n\t}\n\treturn remove_empty_tuples([\n\t\t[DIFF_EQUAL, before],\n\t\t[DIFF_DELETE, oldMiddle],\n\t\t[DIFF_INSERT, newMiddle],\n\t\t[DIFF_EQUAL, after]\n\t]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n\t// note: this runs after equality check has ruled out exact equality\n\tvar oldRange =\n\t\ttypeof cursor_pos === 'number' ? { index: cursor_pos, length: 0 } : cursor_pos.oldRange;\n\tvar newRange = typeof cursor_pos === 'number' ? null : cursor_pos.newRange;\n\t// take into account the old and new selection to generate the best diff\n\t// possible for a text edit.  for example, a text change from \"xxx\" to \"xx\"\n\t// could be a delete or forwards-delete of any one of the x's, or the\n\t// result of selecting two of the x's and typing \"x\".\n\tvar oldLength = oldText.length;\n\tvar newLength = newText.length;\n\tif (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n\t\t// see if we have an insert or delete before or after cursor\n\t\tvar oldCursor = oldRange.index;\n\t\tvar oldBefore = oldText.slice(0, oldCursor);\n\t\tvar oldAfter = oldText.slice(oldCursor);\n\t\tvar maybeNewCursor = newRange ? newRange.index : null;\n\t\teditBefore: {\n\t\t\t// is this an insert or delete right before oldCursor?\n\t\t\tvar newCursor = oldCursor + newLength - oldLength;\n\t\t\tif (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n\t\t\t\tbreak editBefore;\n\t\t\t}\n\t\t\tif (newCursor < 0 || newCursor > newLength) {\n\t\t\t\tbreak editBefore;\n\t\t\t}\n\t\t\tvar newBefore = newText.slice(0, newCursor);\n\t\t\tvar newAfter = newText.slice(newCursor);\n\t\t\tif (newAfter !== oldAfter) {\n\t\t\t\tbreak editBefore;\n\t\t\t}\n\t\t\tvar prefixLength = Math.min(oldCursor, newCursor);\n\t\t\tvar oldPrefix = oldBefore.slice(0, prefixLength);\n\t\t\tvar newPrefix = newBefore.slice(0, prefixLength);\n\t\t\tif (oldPrefix !== newPrefix) {\n\t\t\t\tbreak editBefore;\n\t\t\t}\n\t\t\tvar oldMiddle = oldBefore.slice(prefixLength);\n\t\t\tvar newMiddle = newBefore.slice(prefixLength);\n\t\t\treturn make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n\t\t}\n\t\teditAfter: {\n\t\t\t// is this an insert or delete right after oldCursor?\n\t\t\tif (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n\t\t\t\tbreak editAfter;\n\t\t\t}\n\t\t\tvar cursor = oldCursor;\n\t\t\tvar newBefore = newText.slice(0, cursor);\n\t\t\tvar newAfter = newText.slice(cursor);\n\t\t\tif (newBefore !== oldBefore) {\n\t\t\t\tbreak editAfter;\n\t\t\t}\n\t\t\tvar suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n\t\t\tvar oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n\t\t\tvar newSuffix = newAfter.slice(newAfter.length - suffixLength);\n\t\t\tif (oldSuffix !== newSuffix) {\n\t\t\t\tbreak editAfter;\n\t\t\t}\n\t\t\tvar oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n\t\t\tvar newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n\t\t\treturn make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n\t\t}\n\t}\n\tif (oldRange.length > 0 && newRange && newRange.length === 0) {\n\t\treplaceRange: {\n\t\t\t// see if diff could be a splice of the old selection range\n\t\t\tvar oldPrefix = oldText.slice(0, oldRange.index);\n\t\t\tvar oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n\t\t\tvar prefixLength = oldPrefix.length;\n\t\t\tvar suffixLength = oldSuffix.length;\n\t\t\tif (newLength < prefixLength + suffixLength) {\n\t\t\t\tbreak replaceRange;\n\t\t\t}\n\t\t\tvar newPrefix = newText.slice(0, prefixLength);\n\t\t\tvar newSuffix = newText.slice(newLength - suffixLength);\n\t\t\tif (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n\t\t\t\tbreak replaceRange;\n\t\t\t}\n\t\t\tvar oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n\t\t\tvar newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n\t\t\treturn make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport default function diff(text1, text2, cursor_pos) {\n\t// only pass fix_unicode=true at the top level, not when diff_main is\n\t// recursively invoked\n\treturn diff_main(text1, text2, cursor_pos, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/eval.js",
    "content": ""
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/glsl.ts",
    "content": "import ts from 'typescript';\nlet { factory, isIdentifier } = ts;\nimport { TSVisitMapper } from './tsWalk';\n\nimport toposort from './toposort';\nimport {\n\tIndexMapping,\n\tlookupIndexMappingRange,\n\treverseLookupIndexMapping,\n\treverseLookupIndexMappingRange,\n\tSourceNode\n} from './root';\n\nimport glslHeader from './header.glsl?raw';\nimport { hasShadeupDocTag, ShadeupEnvironment } from '../environment/ShadeupEnvironment';\nimport { closest, resolveNodeName } from './util';\nimport { isStaticPropertyAccessExpression } from '../environment/validate';\nimport { isTupleType } from 'tsutils';\n\nconst TYPE_BLACKLIST = [\n\t'never',\n\t'object',\n\t'symbol',\n\t'bigint',\n\t'undefined',\n\t'null',\n\t'map',\n\t'string'\n];\n\nconst RESERVED_WORDS = ['attribute', 'sample', 'varying', 'uniform', 'layout'];\n\nexport class GLSLCompilationError extends Error {\n\tcontext: ts.Node;\n\tconstructor(public message: string, public node: ts.Node) {\n\t\tsuper(message);\n\t\tthis.context = node;\n\t}\n}\n\nfunction generateDefaultForType(checker: ts.TypeChecker, _type_node: ts.TypeNode) {\n\tlet _type = checker.getTypeFromTypeNode(_type_node);\n\tlet name = (_type.aliasSymbol || _type.getSymbol())?.escapedName.toString();\n\tswitch (name) {\n\t\tcase 'int':\n\t\t\treturn 'int(0)';\n\t\tcase 'uint':\n\t\t\treturn 'uint(0)';\n\n\t\tcase 'uint8':\n\t\t\treturn 'uint(0)';\n\n\t\tcase 'float':\n\t\t\treturn 'float(0.0)';\n\t\tcase 'float2':\n\t\t\treturn 'vec2(0.0, 0.0)';\n\t\tcase 'float3':\n\t\t\treturn 'vec3(0.0, 0.0, 0.0)';\n\t\tcase 'float4':\n\t\t\treturn 'vec4(0.0, 0.0, 0.0, 0.0)';\n\t\tcase 'int2':\n\t\t\treturn 'ivec2(0, 0)';\n\t\tcase 'int3':\n\t\t\treturn 'ivec3(0, 0, 0)';\n\t\tcase 'int4':\n\t\t\treturn 'ivec4(0, 0, 0, 0)';\n\t\tcase 'uint2':\n\t\t\treturn 'uvec2(0u, 0u)';\n\t\tcase 'uint3':\n\t\t\treturn 'uvec3(0u, 0u, 0u)';\n\t\tcase 'uint4':\n\t\t\treturn 'uvec4(0u, 0u, 0u, 0u)';\n\t\tcase 'float2x2':\n\t\t\treturn 'mat2(0.0, 0.0, 0.0, 0.0)';\n\t\tcase 'float3x3':\n\t\t\treturn 'mat3(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)';\n\t\tcase 'float4x4':\n\t\t\treturn 'mat4(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)';\n\t\tcase 'bool':\n\t\t\treturn 'false';\n\t\tdefault:\n\t\t\tlet decl = _type.getSymbol()?.getDeclarations();\n\t\t\tif (ts.isTupleTypeNode(_type_node)) {\n\t\t\t\tlet len = _type_node.elements.length;\n\t\t\t\tlet args: string[] = [];\n\t\t\t\tlet rootNode = _type_node.elements[0];\n\t\t\t\tif (rootNode) {\n\t\t\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\t\t\targs.push(generateDefaultForType(checker, _type_node.elements[i]));\n\t\t\t\t\t}\n\t\t\t\t\tlet rootType = checker.getTypeFromTypeNode(rootNode);\n\t\t\t\t\treturn translateType(checker, rootType) + `[${len}] {` + args.join(', ') + '}';\n\t\t\t\t} else {\n\t\t\t\t\treturn '0';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decl && decl.length > 0) {\n\t\t\t\tlet d = decl[0];\n\t\t\t\tlet structProps: [string, ts.TypeNode][] = [];\n\n\t\t\t\tif (ts.isClassDeclaration(d)) {\n\t\t\t\t\tlet symd = _type.getSymbol();\n\t\t\t\t\tsymd?.members?.forEach((v, k) => {\n\t\t\t\t\t\tlet decl = v.valueDeclaration;\n\t\t\t\t\t\tif (decl && ts.isPropertyDeclaration(decl)) {\n\t\t\t\t\t\t\tstructProps.push([k?.toString() ?? '', decl.type!]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tlet sortedPropsByKey = structProps.sort((a, b) => {\n\t\t\t\t\t\treturn a[0].localeCompare(b[0]);\n\t\t\t\t\t});\n\n\t\t\t\t\tlet args: string[] = sortedPropsByKey.map((p) => {\n\t\t\t\t\t\treturn '/* ' + p[0] + ': */ ' + generateDefaultForType(checker, p[1]) + '\\n';\n\t\t\t\t\t});\n\n\t\t\t\t\treturn '_make_struct_' + resolveStructName(d) + '(\\n' + args.join(', ') + '\\n)';\n\t\t\t\t} else {\n\t\t\t\t\treturn '0';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn '0';\n\t\t\t}\n\t}\n}\n\nfunction getTypeFallback(checker: ts.TypeChecker, t: ts.Type) {\n\tlet n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n\tif (!n && (t as any).intrinsicName) n = (t as any).intrinsicName;\n\n\tif (typeof n !== 'string') {\n\t\tlet props = t.getApparentProperties();\n\t\tif (props.length > 0) {\n\t\t\tfor (let p of props) {\n\t\t\t\tif (p.escapedName.toString() === '_opaque_int') return 'int';\n\t\t\t\tif (p.escapedName.toString() === '_opaque_float') return 'float';\n\t\t\t\tif (p.escapedName.toString() === '_opaque_uint') return 'uint';\n\t\t\t}\n\t\t}\n\n\t\tlet btype = t.getBaseTypes();\n\t\tif (btype && btype.length > 0) {\n\t\t\tfor (let b of btype) {\n\t\t\t\tlet tn = getTypeFallback(checker, b);\n\t\t\t\tif (tn) return tn;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t} else {\n\t\treturn n;\n\t}\n}\n\nfunction followTypeReferences(t: ts.Type) {\n\tif (t.flags & ts.TypeFlags.Object && (t as any).objectFlags & ts.ObjectFlags.Reference) {\n\t\tif ((t as ts.TypeReference).target === t) {\n\t\t\treturn t;\n\t\t}\n\t\treturn followTypeReferences((t as ts.TypeReference).target);\n\t} else {\n\t\treturn t;\n\t}\n}\n\nfunction getTypeArgument(t: ts.Type, i: number) {\n\tif (t.flags & ts.TypeFlags.Object && (t as any).objectFlags & ts.ObjectFlags.Reference) {\n\t\treturn (t as ts.TypeReference).typeArguments[i];\n\t} else {\n\t\treturn t;\n\t}\n}\n\nfunction translateType(checker: ts.TypeChecker, t: ts.Type, templateFormat = false) {\n\tlet n = getTypeFallback(checker, t);\n\n\tlet originalType = t;\n\tif (n === undefined) {\n\t\tt = followTypeReferences(t);\n\t}\n\tif (templateFormat) {\n\t\tlet name = n?.toString() ?? 'unknown';\n\n\t\tif (\n\t\t\tname === 'Array' ||\n\t\t\tname === 'buffer' ||\n\t\t\t(t.flags & ts.TypeFlags.Object &&\n\t\t\t\t((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n\t\t) {\n\t\t\tlet typeRef = originalType as ts.TypeReference;\n\n\t\t\tlet args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n\t\t\treturn {\n\t\t\t\ttype: 'array',\n\t\t\t\telement: translateType(checker, args[0], true)\n\t\t\t};\n\t\t}\n\n\t\tif (name == 'boolean' || name == 'false' || name == 'true') name = 'bool';\n\n\t\tif (\n\t\t\tname.startsWith('float') ||\n\t\t\tname.startsWith('int') ||\n\t\t\tname.startsWith('uint') ||\n\t\t\tname == 'bool' ||\n\t\t\tname == 'texture2d' ||\n\t\t\tname == 'atomic'\n\t\t)\n\t\t\treturn { type: 'primitive', name };\n\n\t\tlet symbol = t.aliasSymbol || t.getSymbol();\n\t\tif (symbol && symbol.declarations && symbol.declarations.length > 0) {\n\t\t\tif (ts.isClassDeclaration(symbol.declarations[0])) {\n\t\t\t\tlet fields = {};\n\t\t\t\tlet decl = symbol.declarations[0] as ts.ClassDeclaration;\n\t\t\t\tfor (let member of decl.members) {\n\t\t\t\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\t\t\t\tlet name = member.name.getText();\n\t\t\t\t\t\tlet type = checker.getTypeFromTypeNode(member.type!);\n\t\t\t\t\t\tfields[name] = translateType(checker, type, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'struct',\n\t\t\t\t\tname: resolveStructName(decl),\n\t\t\t\t\tfields\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'unknown'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (\n\t\t\tn === 'Array' ||\n\t\t\tn === 'buffer' ||\n\t\t\t(t.flags & ts.TypeFlags.Object &&\n\t\t\t\t((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n\t\t) {\n\t\t\tlet typeRef = originalType as ts.TypeReference;\n\t\t\tlet toStringed = checker.typeToString(typeRef);\n\t\t\tlet args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n\t\t\tlet translated = translateType(checker, args[0]);\n\t\t\tif (toStringed.endsWith('[]')) {\n\t\t\t\treturn translated + '[]';\n\t\t\t} else {\n\t\t\t\tlet staticSize = 0;\n\t\t\t\tif (isTupleType(t)) {\n\t\t\t\t\tstaticSize = t.fixedLength;\n\t\t\t\t}\n\t\t\t\treturn translated + '[' + staticSize + ']';\n\t\t\t}\n\t\t}\n\n\t\tif (n === 'texture2d') return `sampler2D`;\n\t\tif (n == 'atomic') {\n\t\t\tlet args =\n\t\t\t\t(t as ts.TypeReference).typeArguments || checker.getTypeArguments(t as ts.TypeReference);\n\t\t\tlet translated = translateType(checker, args[0]);\n\t\t\treturn `atomic_${translated}`;\n\t\t}\n\n\t\tif (n === 'bool') return 'bool';\n\t\tif (n === 'boolean') return 'bool';\n\t\tif (n === 'float') return 'float';\n\t\tif (n === 'float2') return 'vec2';\n\t\tif (n === 'float3') return 'vec3';\n\t\tif (n === 'float4') return 'vec4';\n\n\t\tif (n === 'int') return 'int';\n\t\tif (n === 'int2') return 'ivec2';\n\t\tif (n === 'int3') return 'ivec3';\n\t\tif (n === 'int4') return 'ivec4';\n\n\t\tif (n === 'uint') return 'uint';\n\t\tif (n === 'uint8') return 'uint';\n\t\tif (n === 'uint2') return 'uvec2';\n\t\tif (n === 'uint3') return 'uvec3';\n\t\tif (n === 'uint4') return 'uvec4';\n\n\t\tif (n === 'float2x2') return 'mat2';\n\t\tif (n === 'float3x3') return 'mat3';\n\t\tif (n === 'float4x4') return 'mat4';\n\n\t\tif (n === 'void') return 'void';\n\t\tif (n === 'error') return 'void';\n\n\t\tif (t.isUnion()) {\n\t\t\tlet types = t.types.map((t) => translateType(checker, t));\n\t\t\tfor (let sub of types) {\n\t\t\t\tif (sub && sub !== 'void' && sub !== 'undefined') return sub;\n\t\t\t}\n\t\t}\n\n\t\tlet symbol = t.aliasSymbol || t.getSymbol();\n\t\tif (symbol && symbol.declarations && symbol.declarations.length > 0) {\n\t\t\tif (ts.isClassDeclaration(symbol.declarations[0])) {\n\t\t\t\treturn resolveStructName(symbol.declarations[0]);\n\t\t\t} else {\n\t\t\t\treturn n?.toString() ?? 'void';\n\t\t\t}\n\t\t} else {\n\t\t\treturn n?.toString() ?? 'void';\n\t\t}\n\t}\n}\n\nfunction isTypeNameVector(name: string) {\n\tif (name.startsWith('float') || name.startsWith('int')) {\n\t\tif (name.endsWith('2') || name.endsWith('3') || name.endsWith('4')) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction getTypeNameVectorElementType(name: string) {\n\tif (name == 'float') {\n\t\treturn ['float', 1];\n\t}\n\n\tif (name == 'int') {\n\t\treturn ['int', 1];\n\t}\n\n\tif (name == 'uint') {\n\t\treturn ['uint', 1];\n\t}\n\n\tif (name.startsWith('float')) {\n\t\treturn ['float', parseInt(name.substring(5))];\n\t}\n\n\tif (name.startsWith('int')) {\n\t\treturn ['int', parseInt(name.substring(3))];\n\t}\n\n\tif (name.startsWith('uint')) {\n\t\treturn ['uint', parseInt(name.substring(4))];\n\t}\n\n\tif (name.startsWith('vec')) {\n\t\treturn ['float', parseInt(name.substring(3))];\n\t}\n\n\tif (name.startsWith('ivec')) {\n\t\treturn ['int', parseInt(name.substring(4))];\n\t}\n\n\tif (name.startsWith('uvec')) {\n\t\treturn ['uint', parseInt(name.substring(4))];\n\t}\n\n\treturn ['', 0];\n}\n\nfunction isTranslatedTypeNameVectorOrScalar(name: string) {\n\tif (name == 'float' || name == 'int' || name == 'uint') return true;\n\tif (name.startsWith('vec') || name.startsWith('ivec') || name.startsWith('uvec')) {\n\t\tif (name.endsWith('2') || name.endsWith('3') || name.endsWith('4')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isVector(checker: ts.TypeChecker, t: ts.Type) {\n\tlet name = getTypeFallback(checker, t);\n\tif (name) {\n\t\treturn isTypeNameVector(name);\n\t}\n\treturn false;\n}\n\nfunction getVectorElementType(checker: ts.TypeChecker, t: ts.Type) {\n\tlet name = getTypeFallback(checker, t);\n\tif (name) {\n\t\treturn getTypeNameVectorElementType(name);\n\t}\n\treturn ['', 0];\n}\n\nfunction isNumeric(checker: ts.TypeChecker, t: ts.Type) {\n\tlet name = getTypeFallback(checker, t);\n\tif (name && (name.startsWith('float') || name.startsWith('int') || name.startsWith('uint'))) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction escapeIdentifier(id: string) {\n\tif (RESERVED_WORDS.includes(id)) {\n\t\treturn '_' + id;\n\t}\n\treturn id.replaceAll('___', '_ii_').replaceAll('__', '_i_');\n}\n\nexport function makeWalker() {\n\treturn {\n\t\tfunction: ({ ast, checker, c, s, getType, sWith }) =>\n\t\t\ts([\n\t\t\t\ttranslateType(\n\t\t\t\t\tchecker,\n\t\t\t\t\tchecker.getSignaturesOfType(getType(), ts.SignatureKind.Call)[0].getReturnType()\n\t\t\t\t)\n\t\t\t])\n\t} as TSVisitMapper;\n}\n\ntype TsAstContext = {\n\tchecker: ts.TypeChecker;\n\tcomposed?: ts.CallExpression;\n\tparentFunction?: ts.FunctionDeclaration | ts.MethodDeclaration | ts.ArrowFunction;\n};\n\nfunction getVectorMask(num: number) {\n\tlet outMask = '';\n\tlet comps = ['x', 'y', 'z', 'w'];\n\tfor (let i = 0; i < num; i++) {\n\t\toutMask += comps[i];\n\t}\n\treturn outMask;\n}\n\nfunction isGLSLType(name: string): boolean {\n\treturn (\n\t\tname.startsWith('vec') ||\n\t\tname.startsWith('mat') ||\n\t\tname.startsWith('sampler') ||\n\t\tname.startsWith('texture') ||\n\t\tname.startsWith('isampler') ||\n\t\tname.startsWith('usampler') ||\n\t\tname.startsWith('uvec') ||\n\t\tname.startsWith('ivec') ||\n\t\tname == 'bool' ||\n\t\tname == 'float' ||\n\t\tname == 'int' ||\n\t\tname == 'uint' ||\n\t\tname == 'uint8' ||\n\t\tname == 'void'\n\t);\n}\n\nfunction autoCastNumeric(value: SourceNode, input: string, expected: string): SourceNode {\n\tlet inputType = getTypeNameVectorElementType(input);\n\tlet expectedType = getTypeNameVectorElementType(expected);\n\tif (inputType[0] != expectedType[0]) {\n\t\tif (expectedType[1] == 1) {\n\t\t\treturn new SourceNode(value.startIndex, value.endIndex, [`${expectedType[0]}(`, value, `)`]);\n\t\t} else {\n\t\t\treturn new SourceNode(value.startIndex, value.endIndex, [`${expectedType[0]}(`, value, `)`]);\n\t\t}\n\t}\n\treturn value;\n}\n\nfunction convertConciseBodyToBlock(body: ts.ConciseBody) {\n\tif (ts.isBlock(body)) {\n\t\treturn body;\n\t} else {\n\t\treturn ts.factory.createBlock([ts.factory.createReturnStatement(body)]);\n\t}\n}\nexport function compile(\n\tctx: TsAstContext,\n\tast: ts.Node,\n\toriginalMapping?: IndexMapping\n): SourceNode {\n\tfunction c(ast: ts.Node) {\n\t\tif (!ast) {\n\t\t\treturn s([]);\n\t\t}\n\t\treturn compile(ctx, ast);\n\t}\n\tfunction cplain(ast: ts.Node) {\n\t\tif (!ast) {\n\t\t\treturn s([]);\n\t\t}\n\t\treturn compile(\n\t\t\t{\n\t\t\t\tchecker: ctx.checker,\n\t\t\t\tparentFunction: ctx.parentFunction\n\t\t\t},\n\t\t\tast\n\t\t);\n\t}\n\n\t/** Generates a SourceNode based on the current ast node */\n\tfunction s(c: (SourceNode | string)[]) {\n\t\tif (originalMapping) {\n\t\t\tlet reverseMapped = lookupIndexMappingRange(originalMapping, ast.getStart(), ast.getEnd());\n\t\t\treturn new SourceNode(reverseMapped.start, reverseMapped.end, c);\n\t\t} else {\n\t\t\treturn new SourceNode(0, 0, c);\n\t\t}\n\t}\n\n\t/** Gets a named child of the current ast node */\n\tfunction n(kind: ts.SyntaxKind) {\n\t\treturn ast.getChildren().find((child) => child.kind === kind);\n\t}\n\n\tfunction f(fn: (child: ts.Node) => boolean) {\n\t\treturn ast.getChildren().filter(fn);\n\t}\n\n\tfunction flat(...c: (SourceNode | string)[][]) {\n\t\treturn c.reduce((acc, cur) => {\n\t\t\treturn [...acc, ...cur];\n\t\t}, [] as (SourceNode | string)[]);\n\t}\n\n\tfunction join(c: (SourceNode | string)[], sep: string) {\n\t\treturn c.reduce((acc, cur) => {\n\t\t\tif (acc.length === 0) {\n\t\t\t\treturn [cur];\n\t\t\t}\n\t\t\treturn [...acc, sep, cur];\n\t\t}, [] as (SourceNode | string)[]);\n\t}\n\n\tfunction children() {\n\t\treturn ast.getChildren().map((child) => c(child));\n\t}\n\n\tfunction hasName(name: string) {}\n\n\tfunction autoCastParameter(callExpr: ts.CallExpression, argIndex: number) {\n\t\tlet signature = ctx.checker.getResolvedSignature(callExpr);\n\t\tlet params = signature.getParameters();\n\t\tlet param = params[argIndex];\n\t\tlet paramType = ctx.checker.getTypeOfSymbolAtLocation(param, callExpr);\n\t\tlet paramTypeString = translateType(ctx.checker, paramType);\n\t\tlet arg = callExpr.arguments[argIndex];\n\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\tlet argTypeString = translateType(ctx.checker, argType);\n\t\tif (paramTypeString !== argTypeString) {\n\t\t\treturn autoCastNumeric(c(arg), argTypeString, paramTypeString);\n\t\t}\n\t\treturn s([c(arg)]);\n\t}\n\n\tlet prefixFunctions: SourceNode[] = [];\n\tif (ctx.composed) {\n\t\tif (ts.isMethodDeclaration(ast) || ts.isFunctionDeclaration(ast)) {\n\t\t\tfor (let [i, arg] of ctx.composed.arguments.entries()) {\n\t\t\t\tif (ts.isArrowFunction(arg)) {\n\t\t\t\t\tlet paramFromIndex = ast.parameters[i];\n\t\t\t\t\tlet name = paramFromIndex.name.getText() + '_composed_' + arg.pos + '_arg_' + i;\n\t\t\t\t\tlet signature = ctx.checker.getSignatureFromDeclaration(arg);\n\t\t\t\t\tlet returnType = signature.getReturnType();\n\t\t\t\t\tlet vars = getClosureVars(ctx.checker, arg);\n\t\t\t\t\tlet vvv = vars.map((p) =>\n\t\t\t\t\t\ts([\n\t\t\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(p.declarations[0])),\n\t\t\t\t\t\t\t' ',\n\t\t\t\t\t\t\tp.escapedName\n\t\t\t\t\t\t])\n\t\t\t\t\t);\n\t\t\t\t\tlet joins = join([...arg.parameters.map((p) => cplain(p)), ...vvv], ', ');\n\t\t\t\t\tprefixFunctions.push(\n\t\t\t\t\t\ts([\n\t\t\t\t\t\t\ttranslateType(ctx.checker, returnType),\n\t\t\t\t\t\t\t' ',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...joins,\n\t\t\t\t\t\t\t')',\n\t\t\t\t\t\t\t' {\\n',\n\n\t\t\t\t\t\t\t...(convertConciseBodyToBlock(arg.body).statements.map((s) => c(s)) ?? []),\n\t\t\t\t\t\t\t'\\n}\\n\\n'\n\t\t\t\t\t\t])\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch (ast.kind) {\n\t\tcase ts.SyntaxKind.FirstPunctuation:\n\t\t\treturn s([ast.getText()]);\n\t\tcase ts.SyntaxKind.SyntaxList:\n\t\t\treturn s(children());\n\t\tcase ts.SyntaxKind.SourceFile:\n\t\t\treturn s(children());\n\t\tcase ts.SyntaxKind.BreakStatement:\n\t\t\treturn s(['break;']);\n\t\tcase ts.SyntaxKind.ContinueStatement:\n\t\t\treturn s(['continue;']);\n\t\tcase ts.SyntaxKind.MethodDeclaration:\n\t\t\tlet fnDeclar = ast as ts.FunctionDeclaration | ts.MethodDeclaration;\n\n\t\t\tlet fnName = resolveFunctionName(fnDeclar);\n\n\t\t\tif (ctx.composed) {\n\t\t\t\tfnName = fnName + '_composed_' + ctx.composed.pos;\n\t\t\t}\n\n\t\t\tlet isStatic = false;\n\n\t\t\tlet signature = ctx.checker.getSignatureFromDeclaration(fnDeclar);\n\t\t\tif (ts.canHaveModifiers(fnDeclar)) {\n\t\t\t\tlet mods = ts.getModifiers(fnDeclar);\n\t\t\t\tif (mods) {\n\t\t\t\t\tif (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n\t\t\t\t\t\tisStatic = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet returnType = signature.getReturnType();\n\n\t\t\treturn s([\n\t\t\t\t...prefixFunctions,\n\t\t\t\ttranslateType(ctx.checker, returnType),\n\t\t\t\t' ',\n\t\t\t\tfnName,\n\t\t\t\t'(',\n\t\t\t\t,\n\t\t\t\t...join(\n\t\t\t\t\t[\n\t\t\t\t\t\t...(isStatic\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(fnDeclar.parent)) +\n\t\t\t\t\t\t\t\t\t\t' _this'\n\t\t\t\t\t\t\t  ]),\n\t\t\t\t\t\t...fnDeclar.parameters\n\t\t\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p);\n\t\t\t\t\t\t\t\tif (type.getCallSignatures().length > 0) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((p) => c(p))\n\t\t\t\t\t],\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t')',\n\t\t\t\t' {\\n',\n\t\t\t\t...(fnDeclar.body?.statements.map((s) => c(s)) ?? []),\n\t\t\t\t'\\n}\\n\\n'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.FunctionDeclaration:\n\t\t\tlet mthdDeclar = ast as ts.FunctionDeclaration | ts.MethodDeclaration;\n\n\t\t\tlet mthdsignature = ctx.checker.getSignatureFromDeclaration(mthdDeclar);\n\t\t\tlet mthdreturnType = mthdsignature.getReturnType();\n\n\t\t\tlet mthdName = resolveFunctionName(mthdDeclar);\n\n\t\t\tif (ctx.composed) {\n\t\t\t\tmthdName = mthdName + '_composed_' + ctx.composed.pos;\n\t\t\t}\n\t\t\treturn s([\n\t\t\t\t...prefixFunctions,\n\t\t\t\ttranslateType(ctx.checker, mthdreturnType),\n\t\t\t\t' ',\n\t\t\t\tmthdName,\n\t\t\t\t'(',\n\t\t\t\t...join(\n\t\t\t\t\tmthdDeclar.parameters\n\t\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p);\n\t\t\t\t\t\t\tif (type.getCallSignatures().length > 0) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((p) => c(p)),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t')',\n\t\t\t\t' {\\n',\n\t\t\t\t...(mthdDeclar.body?.statements.map((s) => c(s)) ?? []),\n\t\t\t\t'\\n}\\n\\n'\n\t\t\t]);\n\n\t\tcase ts.SyntaxKind.ReturnStatement:\n\t\t\tlet ret = ast as ts.ReturnStatement;\n\t\t\tif (!ctx.parentFunction) {\n\t\t\t\tif (ret.expression) {\n\t\t\t\t\treturn s(['return ', c(ret.expression), ';\\n']);\n\t\t\t\t} else {\n\t\t\t\t\treturn s(['return;\\n']);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet expectedReturnType = ctx.checker\n\t\t\t\t\t.getSignatureFromDeclaration(ctx.parentFunction)\n\t\t\t\t\t.getReturnType();\n\t\t\t\tlet actualReturnType = ctx.checker.getTypeAtLocation(ret.expression);\n\n\t\t\t\tif (ret.expression) {\n\t\t\t\t\tlet sss = s([\n\t\t\t\t\t\t'return ',\n\t\t\t\t\t\tautoCastNumeric(\n\t\t\t\t\t\t\tc(ret.expression),\n\t\t\t\t\t\t\ttranslateType(ctx.checker, actualReturnType),\n\t\t\t\t\t\t\ttranslateType(ctx.checker, expectedReturnType)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t';\\n'\n\t\t\t\t\t]);\n\t\t\t\t\treturn sss;\n\t\t\t\t} else {\n\t\t\t\t\treturn s(['return;\\n']);\n\t\t\t\t}\n\t\t\t}\n\t\tcase ts.SyntaxKind.AsExpression:\n\t\t\tlet asExpr = ast as ts.AsExpression;\n\t\t\treturn c(asExpr.expression);\n\t\tcase ts.SyntaxKind.Parameter:\n\t\t\tlet param = ast as ts.ParameterDeclaration;\n\t\t\tif (ctx.composed) {\n\t\t\t\tlet indexOf = param.parent.parameters.indexOf(param);\n\t\t\t\tlet expr = ctx.composed.arguments[indexOf];\n\t\t\t\tif (expr) {\n\t\t\t\t\tif (ts.isArrowFunction(expr)) {\n\t\t\t\t\t\tlet vars = getClosureVars(ctx.checker, expr.body);\n\n\t\t\t\t\t\tlet closureVars = vars.map((v) => {\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(v.valueDeclaration)),\n\t\t\t\t\t\t\t\t' ',\n\t\t\t\t\t\t\t\tv.name\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn s(join(closureVars, ', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s([\n\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(param)),\n\t\t\t\t' ',\n\t\t\t\tescapeIdentifier(param.name.getText())\n\t\t\t]);\n\t\tcase ts.SyntaxKind.ArrowFunction:\n\t\t\t// This is the root of the shader\n\t\t\tlet arrow = ast as ts.ArrowFunction;\n\t\t\tlet body = convertConciseBodyToBlock(arrow.body);\n\t\t\treturn s([\n\t\t\t\t'\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\\nvoid main() {\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\\n',\n\t\t\t\t...body.statements.map((s) => c(s)),\n\t\t\t\t'\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\\n}\\n'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.VariableStatement:\n\t\t\tlet varStatement = ast as ts.VariableStatement;\n\t\t\treturn s([\n\t\t\t\t...join(\n\t\t\t\t\tvarStatement.declarationList.declarations.map((d) => c(d)),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t';\\n'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.VariableDeclaration:\n\t\t\tlet varDecl = ast as ts.VariableDeclaration;\n\t\t\tlet type = ctx.checker.getTypeAtLocation(varDecl);\n\n\t\t\treturn s([\n\t\t\t\ttranslateType(ctx.checker, type),\n\t\t\t\t' ',\n\t\t\t\tvarDecl.name.getText(),\n\t\t\t\t' = ',\n\t\t\t\tc(varDecl.initializer!)\n\t\t\t]);\n\t\tcase ts.SyntaxKind.CallExpression:\n\t\t\tlet call = ast as ts.CallExpression;\n\n\t\t\tlet exprSmybol = ctx.checker.getSymbolAtLocation(call.expression);\n\t\t\tif (call.expression.getText() == 'Math.random') {\n\t\t\t\treturn s(['0.0']);\n\t\t\t}\n\t\t\tif (!exprSmybol) {\n\t\t\t\treturn s(['/* TODO: Unknown symbol */']);\n\t\t\t}\n\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\texprSmybol = ctx.checker.getAliasedSymbol(exprSmybol);\n\t\t\t}\n\n\t\t\tlet symName = exprSmybol?.getName() ?? call.expression.getText();\n\t\t\tif (symName == '__index') {\n\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.expression.expression)\n\t\t\t\t\t);\n\n\t\t\t\t\tlet returnType = ctx.checker.getTypeAtLocation(call);\n\t\t\t\t\tlet vecOut = getVectorElementType(ctx.checker, returnType);\n\t\t\t\t\tlet outMask = getVectorMask(vecOut[1] as number);\n\n\t\t\t\t\tif (innerType == 'sampler2D') {\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t'texelFetch(',\n\t\t\t\t\t\t\tc(call.expression.expression),\n\t\t\t\t\t\t\t', ivec2(',\n\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t'), 0).' + outMask\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn s([c(call.expression), '[', c(call.arguments[0]), ']']);\n\t\t\t} else if (symName == 'len') {\n\t\t\t\tlet expr = call.expression;\n\t\t\t\tif (ts.isPropertyAccessExpression(expr)) {\n\t\t\t\t\tlet left = expr.expression;\n\n\t\t\t\t\treturn s([c(left), '_size']);\n\t\t\t\t}\n\t\t\t} else if (symName == 'min' || symName == 'max') {\n\t\t\t\t// Fold min/max to glsl functions\n\t\t\t\tif (call.arguments.length > 2) {\n\t\t\t\t\tlet args = call.arguments.map((a) => c(a));\n\t\t\t\t\twhile (args.length > 2) {\n\t\t\t\t\t\tlet left = args.shift();\n\t\t\t\t\t\tlet right = args.shift();\n\t\t\t\t\t\targs.unshift(s([symName, '(', left, ',', right, ')']));\n\t\t\t\t\t}\n\t\t\t\t\treturn s([symName, '(', ...join(args, ','), ')']);\n\t\t\t\t}\n\t\t\t} else if (symName == 'sample') {\n\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.expression.expression)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (innerType == 'sampler2D') {\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t'texture(',\n\t\t\t\t\t\t\tc(call.expression.expression),\n\t\t\t\t\t\t\t', vec2(',\n\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t'))'\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (symName == '__index_assign') {\n\t\t\t\treturn s([\n\t\t\t\t\tc((call.expression as ts.PropertyAccessExpression).expression),\n\t\t\t\t\t'[',\n\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t'] = ',\n\t\t\t\t\tautoCastParameter(call, 1)\n\t\t\t\t]);\n\t\t\t} else if (\n\t\t\t\tsymName == 'rand' &&\n\t\t\t\tcall.arguments.length == 0 &&\n\t\t\t\tcall.expression.getText() == 'rand'\n\t\t\t) {\n\t\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t\t'rand() in shaders needs to be seeded, use rand(seed) instead',\n\t\t\t\t\tcall\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (exprSmybol?.getName() == 'makeVector' && exprSmybol.valueDeclaration) {\n\t\t\t\tif (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n\t\t\t\t\tlet exprSig = ctx.checker.getResolvedSignature(call);\n\t\t\t\t\tif (exprSig) {\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getReturnTypeOfSignature(exprSig)),\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...join(\n\t\t\t\t\t\t\t\tcall.arguments.map((a) => c(a)),\n\t\t\t\t\t\t\t\t', '\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// TODO: Please fix this swizzle check to make sure we're not just checking the name\n\t\t\tif (exprSmybol?.getName() == 'swizzle' && exprSmybol.valueDeclaration) {\n\t\t\t\tif (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n\t\t\t\t\tlet exprSig = ctx.checker.getSignatureFromDeclaration(exprSmybol.valueDeclaration);\n\t\t\t\t\tlet arg = call.arguments[0];\n\t\t\t\t\tlet arg2 = call.arguments[1];\n\t\t\t\t\tlet propAccess = '';\n\t\t\t\t\tif (ts.isStringLiteral(arg2)) {\n\t\t\t\t\t\tpropAccess = arg2.text;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\tif (isVector(ctx.checker, argType)) {\n\t\t\t\t\t\treturn s([c(arg), '.', propAccess]);\n\t\t\t\t\t} else if (isNumeric(ctx.checker, argType)) {\n\t\t\t\t\t\tlet numericType = translateType(ctx.checker, argType);\n\n\t\t\t\t\t\treturn s([`shadeup_up_swizzle_${propAccess}_${numericType}(`, c(arg), ')']);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn s([c(arg), '.', propAccess]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isTypeNameVector(exprSmybol?.getName() ?? '')) {\n\t\t\t\treturn s([\n\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(call.expression)),\n\t\t\t\t\t'(',\n\t\t\t\t\t...join(call.arguments.length == 0 ? [s(['0'])] : call.arguments.map((a) => c(a)), ', '),\n\t\t\t\t\t')'\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\tlet funcName = c(call.expression);\n\n\t\t\tlet callArgs = [];\n\t\t\tlet preArgs = [];\n\t\t\tlet exprSig = ctx.checker.getResolvedSignature(call);\n\n\t\t\tlet exprDeclar = exprSig.getDeclaration();\n\t\t\tif (exprDeclar) {\n\t\t\t\tif (ts.isMethodDeclaration(exprDeclar)) {\n\t\t\t\t\tlet isStatic = false;\n\t\t\t\t\tif (ts.canHaveModifiers(exprDeclar)) {\n\t\t\t\t\t\tlet mods = ts.getModifiers(exprDeclar);\n\t\t\t\t\t\tif (mods) {\n\t\t\t\t\t\t\tif (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n\t\t\t\t\t\t\t\tisStatic = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!isStatic) {\n\t\t\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\t\t\tpreArgs.push(c(call.expression.expression));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet callStr = exprSmybol.getName() + '(';\n\t\t\tfor (let [i, arg] of call.arguments.entries()) {\n\t\t\t\tlet argStr = c(arg);\n\t\t\t\tif (exprSig) {\n\t\t\t\t\tlet p = exprSig.getTypeParameterAtPosition(i);\n\t\t\t\t\tif (p) {\n\t\t\t\t\t\tlet translatedBase = translateType(ctx.checker, p);\n\t\t\t\t\t\tlet translatedPass = translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n\n\t\t\t\t\t\tcallStr += translatedBase + ' == ' + translatedPass + ',';\n\n\t\t\t\t\t\tif (isTranslatedTypeNameVectorOrScalar(translatedPass)) {\n\t\t\t\t\t\t\tif (translatedBase != translatedPass && isGLSLType(translatedBase)) {\n\t\t\t\t\t\t\t\targStr = s([`${translatedBase}(`, argStr, `)`]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet translatedPass = translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n\n\t\t\t\t\t\tcallStr += 'any == ' + translatedPass + ',';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ts.isArrowFunction(arg)) {\n\t\t\t\t\tlet arrow = arg as ts.ArrowFunction;\n\t\t\t\t\tlet vars = getClosureVars(ctx.checker, arrow.body);\n\n\t\t\t\t\tif (vars.length > 0) callArgs.push(vars.map((v) => v.escapedName).join(', '));\n\t\t\t\t} else {\n\t\t\t\t\tcallArgs.push(argStr);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallStr += ')';\n\n\t\t\tif (exprSmybol) {\n\t\t\t\tlet signature = ctx.checker.getResolvedSignature(call);\n\t\t\t\tlet mapping =\n\t\t\t\t\tfindRealSignatureMappingToGLSL(ctx.checker, signature) ??\n\t\t\t\t\tfindSignatureMappingToGLSL(ctx.checker, exprSmybol);\n\t\t\t\tif (mapping !== null) {\n\t\t\t\t\tif (mapping.startsWith('!')) {\n\t\t\t\t\t\t// Ensure all args are the same type (float/int)\n\t\t\t\t\t\tlet minType = '';\n\t\t\t\t\t\tlet noOp = false;\n\t\t\t\t\t\tfor (let arg of call.arguments) {\n\t\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\t\tlet argTypeName = translateType(ctx.checker, argType);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\targTypeName == 'float' ||\n\t\t\t\t\t\t\t\t\targTypeName.startsWith('vec') ||\n\t\t\t\t\t\t\t\t\targTypeName == 'int' ||\n\t\t\t\t\t\t\t\t\targTypeName.startsWith('ivec') ||\n\t\t\t\t\t\t\t\t\targTypeName == 'uint' ||\n\t\t\t\t\t\t\t\t\targTypeName.startsWith('uvec')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnoOp = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (minType == '') {\n\t\t\t\t\t\t\t\tif (argTypeName == 'float' || argTypeName.startsWith('vec')) {\n\t\t\t\t\t\t\t\t\tminType = 'float';\n\t\t\t\t\t\t\t\t} else if (argTypeName == 'int' || argTypeName.startsWith('ivec')) {\n\t\t\t\t\t\t\t\t\tminType = 'int';\n\t\t\t\t\t\t\t\t} else if (argTypeName == 'uint' || minType.startsWith('uvec')) {\n\t\t\t\t\t\t\t\t\tminType = 'uint';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (argTypeName == 'float' || minType.startsWith('vec')) {\n\t\t\t\t\t\t\t\tminType = 'float';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!noOp) {\n\t\t\t\t\t\t\tfor (let i = 0; i < callArgs.length; i++) {\n\t\t\t\t\t\t\t\tlet arg = call.arguments[i];\n\t\t\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\t\t\tlet argTypeName = translateType(ctx.checker, argType);\n\t\t\t\t\t\t\t\tlet argTypeStripped = '';\n\t\t\t\t\t\t\t\tif (argTypeName == 'float' || argTypeName.startsWith('vec')) {\n\t\t\t\t\t\t\t\t\targTypeStripped = 'float';\n\t\t\t\t\t\t\t\t} else if (argTypeName == 'int' || argTypeName.startsWith('ivec')) {\n\t\t\t\t\t\t\t\t\targTypeStripped = 'int';\n\t\t\t\t\t\t\t\t} else if (argTypeName == 'uint' || argTypeName.startsWith('uvec')) {\n\t\t\t\t\t\t\t\t\targTypeStripped = 'uint';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (argTypeStripped != minType) {\n\t\t\t\t\t\t\t\t\tif (argTypeName.startsWith('float') || argTypeName.startsWith('int')) {\n\t\t\t\t\t\t\t\t\t\tcallArgs[i] = s([`${minType}(`, callArgs[i], `)`]);\n\t\t\t\t\t\t\t\t\t} else if (argTypeName.startsWith('vec') || argTypeName.startsWith('ivec')) {\n\t\t\t\t\t\t\t\t\t\tlet len = argTypeName.match(/\\d+/)?.[0];\n\t\t\t\t\t\t\t\t\t\tif (len === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error('Invalid type');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcallArgs[i] = s([\n\t\t\t\t\t\t\t\t\t\t\t`${minType == 'float' ? 'vec' : 'ivec'}${len}(`,\n\t\t\t\t\t\t\t\t\t\t\tcallArgs[i],\n\t\t\t\t\t\t\t\t\t\t\t`)`\n\t\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This is a raw template string\n\t\t\t\t\t\tlet template = mapping.slice(1);\n\n\t\t\t\t\t\tlet outs = [];\n\t\t\t\t\t\tlet argCounter = 0;\n\t\t\t\t\t\tlet sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n\t\t\t\t\t\tfor (let i = 0; i < callArgs.length; i++) {\n\t\t\t\t\t\t\tlet paramType = ctx.checker.getTypeAtLocation(\n\t\t\t\t\t\t\t\tsig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\ttemplate = template.replace(\n\t\t\t\t\t\t\t\t'`' + argCounter + '`',\n\t\t\t\t\t\t\t\tctx.checker.typeToString(paramType)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\targCounter++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet result = template.split('$');\n\t\t\t\t\t\tfor (let r of result) {\n\t\t\t\t\t\t\tif (/^\\d+$/.test(r)) {\n\t\t\t\t\t\t\t\touts.push(callArgs[parseInt(r)]);\n\t\t\t\t\t\t\t} else if (r == 'self') {\n\t\t\t\t\t\t\t\tif (call.expression.kind == ts.SyntaxKind.PropertyAccessExpression) {\n\t\t\t\t\t\t\t\t\tlet propAccess = call.expression as ts.PropertyAccessExpression;\n\t\t\t\t\t\t\t\t\touts.push(c(propAccess.getChildAt(0)));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\touts.push(c(call.expression));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\touts.push(r);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (outs.includes(' % ')) {\n\t\t\t\t\t\t\tif (call.arguments.length == 2) {\n\t\t\t\t\t\t\t\t// Balance the modulo operator\n\t\t\t\t\t\t\t\tlet first = getVectorElementType(\n\t\t\t\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.arguments[0])\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tlet last = getVectorElementType(\n\t\t\t\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.arguments[1])\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (first[1] != last[1] && last[1] == 1) {\n\t\t\t\t\t\t\t\t\tlet mask = getVectorMask(first[1] as number);\n\t\t\t\t\t\t\t\t\tif (first[0] == 'float' || last[0] == 'float') {\n\t\t\t\t\t\t\t\t\t\touts = [`mod(`, outs[1], ', ', outs[3], ')'];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s(outs);\n\t\t\t\t\t} else if (mapping.startsWith('#')) {\n\t\t\t\t\t\t// This is a function call remapping with overloads\n\t\t\t\t\t\tlet typeName = '';\n\t\t\t\t\t\tif (call.arguments.length > 0) {\n\t\t\t\t\t\t\tlet firstArg = call.arguments[0];\n\t\t\t\t\t\t\tlet firstArgType = ctx.checker.getTypeAtLocation(firstArg);\n\t\t\t\t\t\t\ttypeName = ctx.checker.typeToString(firstArgType);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tnew SourceNode(call.expression.getStart(), call.expression.getEnd(), [\n\t\t\t\t\t\t\t\tmapping.substring(1) + typeName\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t'(',\n\n\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is a simple function name remapping\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tnew SourceNode(call.expression.getStart(), call.expression.getEnd(), [mapping]),\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (exprSmybol.declarations[0].parent) {\n\t\t\t\t\tlet param = exprSmybol.declarations[0];\n\t\t\t\t\tif (ts.isParameter(param)) {\n\t\t\t\t\t\t// We're calling an anonymous function, which means this is a composed function\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet funcDeclar = exprSmybol.valueDeclaration;\n\n\t\t\t\tif (exprSmybol.declarations[0].parent) {\n\t\t\t\t\tlet param = exprSmybol.declarations[0];\n\t\t\t\t\tif (ts.isParameter(param)) {\n\t\t\t\t\t\t// We're calling an anonymous function, which means this is a composed function\n\n\t\t\t\t\t\tlet indexOf = param.parent.parameters.indexOf(param);\n\n\t\t\t\t\t\tlet additionalArgs = [];\n\t\t\t\t\t\tif (ctx.composed) {\n\t\t\t\t\t\t\tlet realAnonymousFunc = ctx.composed.arguments[indexOf];\n\t\t\t\t\t\t\tif (ts.isArrowFunction(realAnonymousFunc)) {\n\t\t\t\t\t\t\t\tlet vars = getClosureVars(ctx.checker, realAnonymousFunc.body);\n\t\t\t\t\t\t\t\tadditionalArgs = vars.map((v) => v.escapedName);\n\n\t\t\t\t\t\t\t\tcallArgs.push(...additionalArgs);\n\n\t\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t\tfuncName,\n\t\t\t\t\t\t\t\t\t'_composed_',\n\t\t\t\t\t\t\t\t\trealAnonymousFunc.pos.toString(),\n\t\t\t\t\t\t\t\t\t'_arg_',\n\t\t\t\t\t\t\t\t\tindexOf.toString(),\n\t\t\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t) {\n\t\t\t\t\tfuncName = new SourceNode(\n\t\t\t\t\t\tcall.expression.getStart(),\n\t\t\t\t\t\tcall.expression.getEnd(),\n\t\t\t\t\t\tresolveFunctionName(funcDeclar)\n\t\t\t\t\t);\n\n\t\t\t\t\tlet parentDeclar = closest(ast, (n) => ts.isFunctionDeclaration(n));\n\t\t\t\t\tif (parentDeclar && ts.isFunctionDeclaration(parentDeclar)) {\n\t\t\t\t\t\t// ctx.resolveFunction(parentDeclar, funcDeclar);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// ctx.resolveFunction(null, funcDeclar);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isComposedFunction(ctx.checker, funcDeclar)) {\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tfuncName,\n\t\t\t\t\t\t\t'_composed_',\n\t\t\t\t\t\t\tcall.pos.toString(),\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn s([funcName, '(', ...join([...preArgs, ...callArgs], ', '), ')']);\n\t\tcase ts.SyntaxKind.NewExpression:\n\t\t\tlet newExpr = ast as ts.NewExpression;\n\t\t\tlet newExprSymbol = ctx.checker.getSymbolAtLocation(newExpr.expression);\n\t\t\tlet args: SourceNode[] = [];\n\t\t\tif (newExpr.arguments?.length == 1 && ts.isObjectLiteralExpression(newExpr.arguments[0])) {\n\t\t\t\tlet object = newExpr.arguments[0];\n\t\t\t\tlet props = object.properties;\n\t\t\t\tlet sortedPropsByKey = [];\n\t\t\t\tlet structProps: [string, ts.TypeNode][] = [];\n\n\t\t\t\tnewExprSymbol?.members?.forEach((v, k) => {\n\t\t\t\t\tlet decl = v.valueDeclaration;\n\t\t\t\t\tif (decl && ts.isPropertyDeclaration(decl)) {\n\t\t\t\t\t\tstructProps.push([k?.toString() ?? '', decl.type!]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tsortedPropsByKey = structProps.sort((a, b) => {\n\t\t\t\t\treturn a[0].localeCompare(b[0]);\n\t\t\t\t});\n\n\t\t\t\targs = [\n\t\t\t\t\t...sortedPropsByKey.map((p) => {\n\t\t\t\t\t\tlet prop = props.find((p2) => {\n\t\t\t\t\t\t\tif (ts.isPropertyAssignment(p2)) {\n\t\t\t\t\t\t\t\treturn p2.name.getText() == p[0];\n\t\t\t\t\t\t\t} else if (ts.isShorthandPropertyAssignment(p2)) {\n\t\t\t\t\t\t\t\treturn p2.name.getText() == p[0];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (prop) {\n\t\t\t\t\t\t\tif (ts.isPropertyAssignment(prop)) {\n\t\t\t\t\t\t\t\treturn s(['/* ', p[0], ': */ ', c(prop.initializer), '\\n']);\n\t\t\t\t\t\t\t} else if (ts.isShorthandPropertyAssignment(prop)) {\n\t\t\t\t\t\t\t\treturn s(['/* ', p[0], ': */ ', c(prop.name), '\\n']);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn s(['/* ', c(prop), ': */ ', '\\n']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s(['/* ', p[0], ': */ ', generateDefaultForType(ctx.checker, p[1]), '\\n']);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tlet decl = ctx.checker.getTypeAtLocation(newExpr.expression).getSymbol()?.getDeclarations();\n\t\t\tif (decl && ts.isClassDeclaration(decl[0])) {\n\t\t\t\treturn s(['_make_struct_', resolveStructName(decl[0]), '(\\n', ...join(args, ', '), '\\n)']);\n\t\t\t} else {\n\t\t\t\treturn s(['/*', ...join(args, ', '), '*/']);\n\t\t\t}\n\t\tcase ts.SyntaxKind.ExpressionStatement:\n\t\t\tlet expr = ast as ts.ExpressionStatement;\n\t\t\treturn s([c(expr.expression), ';\\n']);\n\t\tcase ts.SyntaxKind.ObjectLiteralExpression:\n\t\t\tlet obj = ast as ts.ObjectLiteralExpression;\n\t\t\treturn s([\n\t\t\t\t'{',\n\t\t\t\t...join(\n\t\t\t\t\tobj.properties.map((p) => {\n\t\t\t\t\t\tif (ts.isPropertyAssignment(p)) {\n\t\t\t\t\t\t\treturn s([c(p.name), ': ', c(p.initializer)]);\n\t\t\t\t\t\t} else if (ts.isShorthandPropertyAssignment(p)) {\n\t\t\t\t\t\t\treturn s([c(p.name)]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s(['/*', c(p), '*/']);\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t]);\n\n\t\tcase ts.SyntaxKind.ConditionalExpression:\n\t\t\tlet cond = ast as ts.ConditionalExpression;\n\t\t\treturn s([c(cond.condition), ' ? ', c(cond.whenTrue), ' : ', c(cond.whenFalse)]);\n\n\t\tcase ts.SyntaxKind.Identifier:\n\t\t\tlet id = ast as ts.Identifier;\n\t\t\tif (ts.isIdentifier(id)) {\n\t\t\t\tlet sym = ctx.checker.getSymbolAtLocation(id);\n\t\t\t\tif (sym && sym.flags & ts.SymbolFlags.Alias) {\n\t\t\t\t\tsym = ctx.checker.getAliasedSymbol(sym);\n\t\t\t\t}\n\n\t\t\t\tif (sym?.declarations?.length == 1) {\n\t\t\t\t\tlet decl = sym.declarations[0];\n\t\t\t\t\tif (isUniformable(ctx.checker, decl)) {\n\t\t\t\t\t\tif (isVariableDeclarationValue(ctx.checker, decl)) {\n\t\t\t\t\t\t\tif (!isInSameScope(decl, ast)) {\n\t\t\t\t\t\t\t\tif (!isInShader(decl)) {\n\t\t\t\t\t\t\t\t\t// If the variable is on the left side of an assignment we need to error\n\t\t\t\t\t\t\t\t\tif (ts.isBinaryExpression(ast.parent)) {\n\t\t\t\t\t\t\t\t\t\tif (ast.parent.left == ast) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t\t\t\t\t\t\t\t\t`Cannot assign to variable '${id.text.toString()}' because it is not declared in the shader`,\n\t\t\t\t\t\t\t\t\t\t\t\tast\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlet isGlobalVar = isRootNode(decl);\n\t\t\t\t\t\t\t\t\tlet glslVarName = `_ext_uniform_${\n\t\t\t\t\t\t\t\t\t\tisGlobalVar ? 'global' : 'local'\n\t\t\t\t\t\t\t\t\t}_${id.text.toString()}`;\n\t\t\t\t\t\t\t\t\treturn s([glslVarName]);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn s([escapeIdentifier(id.text.toString())]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn s([escapeIdentifier(id.text.toString())]);\n\t\t\t} else {\n\t\t\t\treturn c((id as any).expression);\n\t\t\t}\n\t\tcase ts.SyntaxKind.PropertyAccessExpression:\n\t\t\tlet prop = ast as ts.PropertyAccessExpression;\n\t\t\tlet isStaticMember = isStaticPropertyAccessExpression(ctx.checker, prop);\n\n\t\t\tif (isStaticMember) {\n\t\t\t\treturn s([c(prop.expression), '_static_', c(prop.name)]);\n\t\t\t} else {\n\t\t\t\tlet propName = prop.name.getText();\n\t\t\t\tif (propName == '__index') {\n\t\t\t\t\treturn s([c(prop.expression)]);\n\t\t\t\t} else if (propName == 'size') {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(prop.expression)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (innerType == 'sampler2D') {\n\t\t\t\t\t\treturn s([c(prop.expression), '_', propName]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn s([c(prop.expression), '.', c(prop.name)]);\n\t\t\t\t}\n\t\t\t}\n\t\tcase ts.SyntaxKind.ThisKeyword:\n\t\t\treturn s(['_this']);\n\t\tcase ts.SyntaxKind.FirstLiteralToken:\n\t\t\tlet lit = ast as ts.LiteralExpression;\n\t\t\treturn s([lit.text]);\n\t\tcase ts.SyntaxKind.IfStatement:\n\t\t\tlet ifStmt = ast as ts.IfStatement;\n\t\t\tif (isIdentifier(ifStmt.expression)) {\n\t\t\t\tif (ifStmt.expression.escapedText == 'PLATFORM_WEBGL') {\n\t\t\t\t\treturn s([c(ifStmt.thenStatement)]);\n\t\t\t\t}\n\t\t\t\tif (ifStmt.expression.escapedText == 'PLATFORM_WEBGPU') {\n\t\t\t\t\tif (ifStmt.elseStatement) {\n\t\t\t\t\t\treturn s([c(ifStmt.elseStatement)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn s(['']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s([\n\t\t\t\t'if (',\n\t\t\t\tc(ifStmt.expression),\n\t\t\t\t')',\n\t\t\t\tc(ifStmt.thenStatement),\n\t\t\t\tifStmt.elseStatement ? s(['else \\n', c(ifStmt.elseStatement), '\\n']) : s([''])\n\t\t\t]);\n\t\tcase ts.SyntaxKind.TrueKeyword:\n\t\t\treturn s(['true']);\n\t\tcase ts.SyntaxKind.FalseKeyword:\n\t\t\treturn s(['false']);\n\t\tcase ts.SyntaxKind.PostfixUnaryExpression:\n\t\t\tlet post = ast as ts.PostfixUnaryExpression;\n\t\t\treturn s([c(post.operand), post.operator == ts.SyntaxKind.PlusPlusToken ? '++' : '--']);\n\t\tcase ts.SyntaxKind.PlusPlusToken:\n\t\t\treturn s(['++']);\n\t\tcase ts.SyntaxKind.MinusMinusToken:\n\t\t\treturn s(['--']);\n\t\tcase ts.SyntaxKind.ParenthesizedExpression:\n\t\t\tlet paren = ast as ts.ParenthesizedExpression;\n\t\t\treturn s(['(', c(paren.expression), ')']);\n\t\tcase ts.SyntaxKind.VariableDeclarationList:\n\t\t\tlet varDeclList = ast as ts.VariableDeclarationList;\n\t\t\tif (varDeclList.declarations.length > 0) {\n\t\t\t\tfor (let decl of varDeclList.declarations) {\n\t\t\t\t\tlet varDecl = decl as ts.VariableDeclaration;\n\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(varDecl);\n\n\t\t\t\t\treturn s([\n\t\t\t\t\t\ttranslateType(ctx.checker, type),\n\t\t\t\t\t\t' ',\n\t\t\t\t\t\tvarDecl.name.getText(),\n\t\t\t\t\t\t' = ',\n\t\t\t\t\t\tc(varDecl.initializer!)\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn s(['']);\n\t\t\t}\n\n\t\t// throw new GLSLCompilationError(\n\t\t// \t`Cannot define declaration list in shaders, ` + ast.getFullText(),\n\t\t// \tast\n\t\t// );\n\n\t\tcase ts.SyntaxKind.ForStatement:\n\t\t\tlet forStmt = ast as ts.ForStatement;\n\n\t\t\treturn s([\n\t\t\t\t'for (',\n\t\t\t\tc(forStmt.initializer),\n\t\t\t\t';',\n\t\t\t\tc(forStmt.condition),\n\t\t\t\t';',\n\t\t\t\tc(forStmt.incrementor),\n\t\t\t\t')',\n\t\t\t\tc(forStmt.statement)\n\t\t\t]);\n\t\tcase ts.SyntaxKind.BinaryExpression:\n\t\t\tlet bin = ast as ts.BinaryExpression;\n\t\t\tif (bin.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n\t\t\t\t// Check for float/int casting\n\t\t\t\tlet leftType = ctx.checker.getTypeAtLocation(bin.left);\n\t\t\t\tlet rightType = ctx.checker.getTypeAtLocation(bin.right);\n\t\t\t\tif (isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType)) {\n\t\t\t\t\t// debugger;\n\t\t\t\t\tlet [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType);\n\t\t\t\t\tlet [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType);\n\n\t\t\t\t\tif (leftElementType != rightElementType) {\n\t\t\t\t\t\tif (leftElementType == 'float' && rightElementType == 'int') {\n\t\t\t\t\t\t\treturn s([c(bin.left), ` = vec${leftElementSize}(`, c(bin.right), ')']);\n\t\t\t\t\t\t} else if (leftElementType == 'int' && rightElementType == 'float') {\n\t\t\t\t\t\t\treturn s([c(bin.left), ` = ivec${leftElementSize}(`, c(bin.right), ')']);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn s([c(bin.left), ' = ', c(bin.right)]);\n\t\t\t}\n\t\t\tlet binExprText = bin.operatorToken.getText();\n\t\t\tif (binExprText == '===') {\n\t\t\t\tbinExprText = '==';\n\t\t\t}\n\t\t\treturn s([c(bin.left), ' ', binExprText, ' ', c(bin.right)]);\n\t\tcase ts.SyntaxKind.StringLiteral:\n\t\t\treturn s(['0']);\n\t\tcase ts.SyntaxKind.ArrayLiteralExpression:\n\t\t\tlet arr = ast as ts.ArrayLiteralExpression;\n\t\t\treturn s([\n\t\t\t\t'[',\n\t\t\t\t...join(\n\t\t\t\t\tarr.elements.map((e) => c(e)),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t']'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.ElementAccessExpression:\n\t\t\tlet elem = ast as ts.ElementAccessExpression;\n\t\t\treturn s([c(elem.expression), '[', c(elem.argumentExpression), ']']);\n\n\t\tcase ts.SyntaxKind.Block:\n\t\t\tlet block = ast as ts.Block;\n\t\t\treturn s([\n\t\t\t\t'{\\n',\n\t\t\t\t...join(\n\t\t\t\t\tblock.statements.map((child) => c(child)),\n\t\t\t\t\t';'\n\t\t\t\t),\n\t\t\t\t'\\n}'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.TypeOfExpression:\n\t\t\tlet typeOf = ast as ts.TypeOfExpression;\n\t\t\treturn s(['0']);\n\t\tcase ts.SyntaxKind.WhileStatement:\n\t\t\tlet whileStmt = ast as ts.WhileStatement;\n\t\t\treturn s(['while (', c(whileStmt.expression), ') ', c(whileStmt.statement)]);\n\t\tdefault:\n\t\t\tthrow new GLSLCompilationError(`Invalid shader syntax '${ast.getText()}'`, ast);\n\t}\n}\n\nfunction getClosureVars(checker: ts.TypeChecker, func: ts.ConciseBody) {\n\tlet result: ts.Symbol[] = [];\n\tlet recur = (node: ts.Node) => {\n\t\tif (node.kind == ts.SyntaxKind.Identifier) {\n\t\t\tlet id = node as ts.Identifier;\n\t\t\tlet symbol = checker.getSymbolAtLocation(id);\n\t\t\tlet declar = symbol.valueDeclaration;\n\t\t\tif (isVariableDeclarationValue(checker, declar)) {\n\t\t\t\tif (declar) {\n\t\t\t\t\tif (!isInSameScope(declar, node) && isInShader(declar)) {\n\t\t\t\t\t\tresult.push(symbol);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tnode.forEachChild(recur);\n\t\t}\n\t};\n\trecur(func);\n\treturn result;\n}\n\nfunction getDeclarationType(\n\tchecker: ts.TypeChecker,\n\tnode: ts.VariableDeclaration | ts.ParameterDeclaration\n) {\n\treturn node.type\n\t\t? checker.getTypeAtLocation(node.type)\n\t\t: node.initializer\n\t\t? checker.getTypeAtLocation(node.initializer)\n\t\t: checker.getTypeAtLocation(node);\n}\n\nfunction tsIsStatement(node: ts.Node) {\n\treturn [\n\t\tts.SyntaxKind.DoStatement,\n\t\tts.SyntaxKind.IfStatement,\n\t\tts.SyntaxKind.TryStatement,\n\t\tts.SyntaxKind.ForStatement,\n\t\tts.SyntaxKind.LastStatement,\n\t\tts.SyntaxKind.ThrowStatement,\n\t\tts.SyntaxKind.FirstStatement,\n\t\tts.SyntaxKind.WhileStatement,\n\t\tts.SyntaxKind.WithStatement,\n\t\tts.SyntaxKind.ForInStatement,\n\t\tts.SyntaxKind.ForOfStatement,\n\t\tts.SyntaxKind.BreakStatement,\n\t\tts.SyntaxKind.ContinueStatement,\n\t\tts.SyntaxKind.ReturnStatement,\n\t\tts.SyntaxKind.SwitchStatement,\n\t\tts.SyntaxKind.VariableStatement,\n\t\tts.SyntaxKind.ExpressionStatement,\n\t\tts.SyntaxKind.DebuggerStatement,\n\t\tts.SyntaxKind.EmptyStatement,\n\t\tts.SyntaxKind.LabeledStatement,\n\t\tts.SyntaxKind.ExpressionStatement\n\t].includes(node.kind);\n}\n\nexport class GLSLShader {\n\tkey: string;\n\tsource: string;\n\tsourceMapping?: IndexMapping;\n\tglobals: { [key: string]: { fileName: string; structure: any } } = {};\n\tlocals: { [key: string]: any } = {};\n\n\tconstructor(key: string, source: string) {\n\t\tthis.key = key;\n\t\tthis.source = source;\n\t}\n}\n\nfunction resolveFunctionName(f: ts.FunctionDeclaration | ts.MethodDeclaration) {\n\tif (ts.isMethodDeclaration(f)) {\n\t\tlet parentName = 'anon';\n\t\tif (f.parent && ts.isClassDeclaration(f.parent)) {\n\t\t\tparentName = f.parent.name?.text ?? 'anon';\n\t\t}\n\t\treturn removeDoubleUnderscores(\n\t\t\t`fn_${\n\t\t\t\tf.getSourceFile()?.fileName.replaceAll('/', '_').replaceAll('.', '_') ?? 'anon'\n\t\t\t}_${f.getStart()}_${parentName}_static_${f.name.getText() ?? 'unknown'}`\n\t\t);\n\t} else {\n\t\treturn removeDoubleUnderscores(\n\t\t\t`fn_${f.getSourceFile().fileName.replaceAll('/', '_').replaceAll('.', '_')}_${f.getStart()}_${\n\t\t\t\tf.name?.text.replaceAll('.', '_dot_') ?? 'unknown'\n\t\t\t}`\n\t\t);\n\t}\n}\n\nfunction resolveStructName(c: ts.ClassDeclaration) {\n\t// These are special names that we need to preserve\n\tif (c.name?.text == 'ShaderInput') return 'ShaderInput';\n\tif (c.name?.text == 'ShaderOutput') return 'ShaderOutput';\n\n\treturn removeDoubleUnderscores(\n\t\t`str_${c.getSourceFile().fileName.replaceAll('/', '_').replaceAll('.', '_')}_${c.getStart()}_${\n\t\t\tc.name?.text ?? 'unknown'\n\t\t}`.replaceAll('__', '_i_')\n\t);\n}\n\nfunction isInSameScope(node: ts.Node, other: ts.Node) {\n\treturn (\n\t\tclosest(node, (node) => {\n\t\t\tif (\n\t\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\t\tts.isArrowFunction(node) ||\n\t\t\t\tts.isMethodDeclaration(node)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (ts.isSourceFile(node)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}) ==\n\t\tclosest(other, (node) => {\n\t\t\tif (\n\t\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\t\tts.isArrowFunction(node) ||\n\t\t\t\tts.isMethodDeclaration(node)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (ts.isSourceFile(node)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})\n\t);\n}\n\nfunction isInShader(node: ts.Node) {\n\treturn closest(node, (node) => {\n\t\tif (ts.isFunctionDeclaration(node) || ts.isArrowFunction(node)) {\n\t\t\tif (hasShadeupDocTag(node, 'shader')) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t});\n}\n\n/**\n * Returns true if this node is a root of the source file (i.e. has no function as its parent)\n */\nfunction isRootNode(node: ts.Node) {\n\tlet parentRoot = closest(node, (node) => {\n\t\tif (\n\t\t\tts.isMethodDeclaration(node) ||\n\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\tts.isArrowFunction(node)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ts.isSourceFile(node)) {\n\t\t\treturn true;\n\t\t}\n\t});\n\n\treturn parentRoot && ts.isSourceFile(parentRoot);\n}\n\ntype DepsTable = {\n\tgraph: Map<string, string[]>;\n\tfunctions: Map<string, ts.FunctionDeclaration | ts.MethodDeclaration>;\n\tstructs: Map<string, ts.ClassDeclaration>;\n\tstructsProps: Map<string, Set<string>>;\n\tglobals: Map<string, ts.VariableDeclaration>;\n\tcomposed: Map<string, ts.CallExpression>;\n};\n\nconst primitiveNames = [\n\t'int',\n\t'uint',\n\t'uint8',\n\t'float',\n\t'bool',\n\t'int2',\n\t'int3',\n\t'int4',\n\t'uint2',\n\t'uint3',\n\t'uint4',\n\t'float2',\n\t'float3',\n\t'float4',\n\t'float2x2',\n\t'float3x3',\n\t'float4x4',\n\t'string',\n\t'texture2d'\n];\n\nfunction isPrimitiveType(type: ts.Type) {\n\tlet name = type.getSymbol()?.getName();\n\treturn primitiveNames.includes(name);\n}\n\nfunction isComposedFunction(\n\tchecker: ts.TypeChecker,\n\tfunc: ts.FunctionDeclaration | ts.MethodDeclaration\n) {\n\t// A composed function is one that accepts one or more functions as arguments\n\tlet isComposed = false;\n\tfunc.parameters.forEach((param) => {\n\t\tlet type = checker.getTypeAtLocation(param);\n\t\tif (type.getCallSignatures().length > 0) {\n\t\t\tisComposed = true;\n\t\t}\n\t});\n\n\treturn isComposed;\n}\n\nfunction resolveDeps(\n\tchecker: ts.TypeChecker,\n\troot: ts.Node,\n\ttable: DepsTable = {\n\t\tgraph: new Map(),\n\t\tfunctions: new Map(),\n\t\tstructs: new Map(),\n\t\tstructsProps: new Map(),\n\t\tglobals: new Map(),\n\t\tcomposed: new Map()\n\t}\n): DepsTable {\n\tfunction resolveFunction(\n\t\tf1: ts.FunctionDeclaration | ts.MethodDeclaration | null,\n\t\tf2: ts.FunctionDeclaration | ts.MethodDeclaration,\n\t\tcall: ts.CallExpression\n\t) {\n\t\tlet n1 = f1 ? resolveFunctionName(f1) : 'main';\n\t\tlet n2 = resolveFunctionName(f2);\n\t\tif (\n\t\t\tf2.name?.getText() === '__index' ||\n\t\t\tf2.name?.getText() === '__index_assign' ||\n\t\t\tf2.name?.getText() === '__index_assign_op' ||\n\t\t\tf2.name?.getText() === 'len' ||\n\t\t\tf2.name?.getText() === 'sample' ||\n\t\t\thasShadeupDocTag(f2, 'noemit_gpu')\n\t\t)\n\t\t\treturn;\n\t\tif (isComposedFunction(checker, f2)) {\n\t\t\tn2 = n2 + '_composed_' + call.pos;\n\t\t\ttable.composed.set(n2, call);\n\t\t}\n\n\t\tlet deps = table.graph.get(n1) ?? [];\n\t\tif (!deps.includes(n2)) deps.push(n2);\n\t\ttable.graph.set(n1, deps);\n\n\t\ttable.functions.set(n2, f2);\n\t}\n\n\tfunction resolveStruct(decl: ts.ClassDeclaration) {\n\t\tlet name = resolveStructName(decl);\n\n\t\tif (table.structs.has(name)) return;\n\n\t\tfor (let member of decl.members) {\n\t\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\t\tlet type = checker.getTypeAtLocation(member);\n\t\t\t\tresolveTypeUse(type, member);\n\t\t\t}\n\t\t}\n\n\t\ttable.structs.set(name, decl);\n\t}\n\n\tfunction isValidShaderType(type: ts.Type, checker: ts.TypeChecker) {\n\t\tlet symbol = type.aliasSymbol || type.getSymbol();\n\t\tlet name = checker.typeToString(type);\n\n\t\tlet bases = type.getBaseTypes();\n\t\tif (bases && bases.length > 0) {\n\t\t\tfor (let base of bases) {\n\t\t\t\tif (!isValidShaderType(base, checker)) return false;\n\t\t\t}\n\t\t}\n\t\tif (TYPE_BLACKLIST.includes(symbol?.getName() ?? '')) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !TYPE_BLACKLIST.includes(name);\n\t}\n\n\tfunction resolveTypeUse(typeNode: ts.Type, context: ts.Node, fullStruct: boolean = false) {\n\t\tlet symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n\t\tlet name = checker.typeToString(typeNode);\n\n\t\tif (!isValidShaderType(typeNode, checker)) {\n\t\t\tthrow new GLSLCompilationError(`Type '${name}' is not supported in shaders`, context);\n\t\t\treturn;\n\t\t}\n\t\tlet decl = symbol?.getDeclarations()?.[0];\n\t\tif (decl && ts.isClassDeclaration(decl)) {\n\t\t\tresolveStruct(decl);\n\t\t}\n\t\tlet typestr = checker.typeToString(typeNode);\n\t\tif (typeNode.aliasTypeArguments)\n\t\t\tfor (let args of typeNode.aliasTypeArguments) {\n\t\t\t\tresolveTypeUse(args, context, typestr.startsWith('buffer<'));\n\t\t\t}\n\t}\n\n\tfunction resolvePropertyAccess(node: ts.PropertyAccessExpression) {\n\t\tlet typeNode = checker.getTypeAtLocation(node.expression);\n\t\tlet symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n\t\tlet name = checker.typeToString(typeNode);\n\t\t// if (!isPrimitiveType(typeNode)) {\n\t\tif (!isValidShaderType(typeNode, checker)) {\n\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t`Type '${symbol?.getName()}' is not supported in shaders`,\n\t\t\t\tnode\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tresolveTypeUse(typeNode, node);\n\t\tresolveTypeUse(checker.getTypeAtLocation(node), node);\n\n\t\tlet prop = node.name.getText();\n\n\t\tlet decl = symbol?.getDeclarations()?.[0];\n\t\tif (decl && ts.isClassDeclaration(decl)) {\n\t\t\tlet name = resolveStructName(decl);\n\t\t\tlet props = table.structsProps.get(name) ?? new Set();\n\t\t\tprops.add(prop);\n\t\t\ttable.structsProps.set(name, props);\n\t\t}\n\t\t// }\n\t}\n\n\twalkNodes(root, (node) => {\n\t\tif (ts.isCallExpression(node)) {\n\t\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t\t}\n\t\t\tif (exprSmybol) {\n\t\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\t\t\t\tlet funcDeclarVal = exprSmybol.valueDeclaration;\n\n\t\t\t\tif (\n\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t) {\n\t\t\t\t\tlet signature = checker.getResolvedSignature(node);\n\t\t\t\t\tlet mapping =\n\t\t\t\t\t\tfindRealSignatureMappingToGLSL(checker, signature) ??\n\t\t\t\t\t\tfindSignatureMappingToGLSL(checker, exprSmybol);\n\n\t\t\t\t\tif (mapping === null) {\n\t\t\t\t\t\tlet parentDeclar = closest(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t(n) =>\n\t\t\t\t\t\t\t\tts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n) || ts.isArrowFunction(n)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (parentDeclar && ts.isArrowFunction(parentDeclar)) {\n\t\t\t\t\t\t\t// Arrow functions need their parent caller to be resolved\n\n\t\t\t\t\t\t\tlet parentParentDeclar = closest(parentDeclar, (n) => ts.isCallExpression(n));\n\t\t\t\t\t\t\tif (parentParentDeclar && ts.isCallExpression(parentParentDeclar)) {\n\t\t\t\t\t\t\t\tlet parentParentSymbol = checker.getSymbolAtLocation(parentParentDeclar.expression);\n\t\t\t\t\t\t\t\tif (parentParentSymbol && parentParentSymbol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\t\t\t\t\t\tparentParentSymbol = checker.getAliasedSymbol(parentParentSymbol);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (parentParentSymbol) {\n\t\t\t\t\t\t\t\t\tlet parentParentFuncDeclar = parentParentSymbol.getDeclarations()?.[0];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tparentParentFuncDeclar &&\n\t\t\t\t\t\t\t\t\t\t(ts.isFunctionDeclaration(parentParentFuncDeclar) ||\n\t\t\t\t\t\t\t\t\t\t\tts.isMethodDeclaration(parentParentFuncDeclar))\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tresolveFunction(parentParentFuncDeclar, funcDeclar, node);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentDeclar &&\n\t\t\t\t\t\t\t(ts.isFunctionDeclaration(parentDeclar) || ts.isMethodDeclaration(parentDeclar))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tresolveFunction(parentDeclar, funcDeclar, node);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolveFunction(null, funcDeclar, node);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!table.graph.has(resolveFunctionName(funcDeclar))) {\n\t\t\t\t\t\t\ttable.graph.set(resolveFunctionName(funcDeclar), []);\n\t\t\t\t\t\t\tresolveDeps(checker, funcDeclar, table);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet sig = checker.getSignatureFromDeclaration(funcDeclar);\n\t\t\t\t\t\tlet returnType = checker.getReturnTypeOfSignature(sig);\n\n\t\t\t\t\t\tresolveTypeUse(returnType, node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (ts.isPropertyAccessExpression(node)) {\n\t\t\tresolvePropertyAccess(node);\n\t\t}\n\n\t\tif (ts.isIdentifier(node)) {\n\t\t\tif (checker.getSymbolAtLocation(node)) {\n\t\t\t\tlet decl = checker.getSymbolAtLocation(node)?.declarations;\n\n\t\t\t\tlet type = checker.getTypeAtLocation(node);\n\t\t\t\tresolveTypeUse(type, node);\n\n\t\t\t\tif (decl && ts.isVariableDeclaration(decl[0])) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!isInSameScope(decl[0], node) &&\n\t\t\t\t\t\tdecl[0].getSourceFile().fileName !== root.getSourceFile().fileName\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (isVariableDeclarationValue(checker, decl[0])) {\n\t\t\t\t\t\t\ttable.globals.set(node.text.toString(), decl[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (ts.isVariableDeclaration(node)) {\n\t\t\tlet type = checker.getTypeAtLocation(node);\n\t\t\tresolveTypeUse(type, node);\n\t\t}\n\t});\n\n\treturn table;\n}\n\nfunction resolveUniforms(checker: ts.TypeChecker, root: ts.Node) {\n\tlet uniforms: ts.Declaration[] = [];\n\n\twalkNodesWithCalls(checker, root, (node) => {\n\t\tif (ts.isIdentifier(node)) {\n\t\t\tlet decl = checker.getSymbolAtLocation(node);\n\t\t\tif (decl && decl.flags & ts.SymbolFlags.Alias) {\n\t\t\t\tdecl = checker.getAliasedSymbol(decl);\n\t\t\t}\n\n\t\t\tif (decl && decl.declarations && decl.declarations.length == 1) {\n\t\t\t\tlet declNode = decl.declarations[0];\n\t\t\t\tif (declNode) {\n\t\t\t\t\tif (isVariableDeclarationValue(checker, declNode)) {\n\t\t\t\t\t\tif (!isInSameScope(declNode, node) && !isInShader(declNode)) {\n\t\t\t\t\t\t\tif (uniforms.findIndex((d) => d === declNode) == -1) uniforms.push(declNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn uniforms;\n}\n\nfunction isVariableDeclarationValue(checker: ts.TypeChecker, node: ts.Node): boolean {\n\ttry {\n\t\tif (ts.isVariableDeclaration(node) || ts.isParameter(node)) {\n\t\t\tlet type = checker.getTypeAtLocation(node);\n\t\t\tlet calls = type.getCallSignatures();\n\n\t\t\treturn calls.length == 0;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\nfunction isUniformable(\n\tchecker: ts.TypeChecker,\n\tdecl: ts.Declaration\n): decl is ts.VariableDeclaration | ts.ParameterDeclaration {\n\tlet exprSmybol = checker.getSymbolAtLocation(decl);\n\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t}\n\n\tif (exprSmybol) {\n\t\tlet originalDecl = exprSmybol.getDeclarations()?.[0];\n\t}\n\treturn ts.isVariableDeclaration(decl) || ts.isParameter(decl);\n}\n\nexport function addGLSLShader(\n\tkey: string,\n\troot: ts.Node,\n\tchecker: ts.TypeChecker,\n\tenv: ShadeupEnvironment,\n\tisComputeShader: boolean = false,\n\tcomputeShaderSize: [number, number, number] = [1, 1, 1]\n): GLSLShader | null {\n\tlet deps = resolveDeps(checker, root);\n\tlet uniforms = resolveUniforms(checker, root);\n\n\tlet mapping = [...deps.graph.entries()]\n\t\t.map(([k, v]) => v.map((d) => [k, d] as [string, string]))\n\t\t.flat();\n\n\tlet sorted: string[] = [];\n\ttry {\n\t\tsorted = toposort(mapping).reverse();\n\t} catch (e) {\n\t\t// Cycle detected\n\n\t\tsorted = [];\n\t}\n\n\tlet preFuncs: SourceNode[] = [];\n\n\tfor (let s of deps.structs.values()) {\n\t\tlet name = resolveStructName(s);\n\t\tlet hasAnyProperty = false;\n\t\tlet sp = deps.structsProps.get(name);\n\n\t\tlet members = s.members.map((m) => {\n\t\t\tif (!ts.isPropertyDeclaration(m)) return '';\n\n\t\t\tlet type = checker.getTypeAtLocation(m);\n\t\t\tlet translated = translateType(checker, type);\n\t\t\tlet preComment = '';\n\n\t\t\tif (!sp || !sp.has(m.name.getText())) {\n\t\t\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t\t\tpreComment = `// `;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (preComment == '') {\n\t\t\t\thasAnyProperty = true;\n\t\t\t}\n\t\t\treturn new SourceNode(\n\t\t\t\tm.getStart(),\n\t\t\t\tm.getEnd(),\n\t\t\t\t`${preComment}  ${translated} ${m.name.getText()};\\n`\n\t\t\t);\n\t\t});\n\n\t\tlet memberNames = s.members\n\t\t\t.map((m) => {\n\t\t\t\tif (!ts.isPropertyDeclaration(m)) return '';\n\n\t\t\t\tlet type = checker.getTypeAtLocation(m);\n\n\t\t\t\tif (!sp || !sp.has(m.name.getText())) {\n\t\t\t\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn m.name.getText();\n\t\t\t})\n\t\t\t.filter((m) => m != '');\n\t\tlet memberParams = s.members\n\t\t\t.map((m) => {\n\t\t\t\tif (!ts.isPropertyDeclaration(m)) return '';\n\n\t\t\t\tlet type = checker.getTypeAtLocation(m);\n\t\t\t\tlet translated = translateType(checker, type);\n\n\t\t\t\tif (!sp || !sp.has(m.name.getText())) {\n\t\t\t\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn translated + ' ' + m.name.getText();\n\t\t\t})\n\t\t\t.filter((m) => m != '');\n\n\t\tif (!hasAnyProperty) continue; // Don't emit empty structs (glsl error)\n\n\t\tpreFuncs.push(\n\t\t\tnew SourceNode(s.getStart(), s.getEnd(), [`struct ${name} {\\n`, ...members, '\\n};\\n'])\n\t\t);\n\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\tpreFuncs.push(\n\t\t\t\tnew SourceNode(s.getStart(), s.getEnd(), [\n\t\t\t\t\tname + ' _make_struct_' + name + '(',\n\t\t\t\t\tmemberParams.join(', ') + ')',\n\t\t\t\t\t' {\\n',\n\t\t\t\t\tname,\n\t\t\t\t\t' _s;',\n\t\t\t\t\t'',\n\t\t\t\t\t...memberNames.map((m) => `  _s.${m} = ${m};\\n`),\n\t\t\t\t\t'  return _s;\\n',\n\t\t\t\t\t'}\\n'\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (let u of uniforms) {\n\t\tif (isUniformable(checker, u)) {\n\t\t\tlet _type = checker.getTypeAtLocation(u);\n\t\t\tlet translated = translateType(checker, _type);\n\t\t\tlet isGlobalVar = isRootNode(u);\n\t\t\tlet glslVarName = `_ext_uniform_${isGlobalVar ? 'global' : 'local'}_${u.name.getText()}`;\n\t\t\tif (translated.includes('[]')) {\n\t\t\t\ttranslated = translated.replace(/\\[\\]$/, ``);\n\t\t\t\tpreFuncs.push(\n\t\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), [\n\t\t\t\t\t\t'uniform ',\n\t\t\t\t\t\t'int',\n\t\t\t\t\t\t' ',\n\t\t\t\t\t\tglslVarName,\n\t\t\t\t\t\t'_size;\\n'\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t\tglslVarName += `[%${glslVarName}_size%]`;\n\t\t\t}\n\t\t\tpreFuncs.push(\n\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), ['uniform ', translated, ' ', glslVarName, ';\\n'])\n\t\t\t);\n\t\t\tif (translated == 'sampler2D') {\n\t\t\t\tpreFuncs.push(\n\t\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), ['uniform vec2 ', glslVarName, '_size;\\n'])\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (let k of sorted) {\n\t\tif (k == 'main') continue;\n\n\t\tlet v = deps.functions.get(k);\n\t\tif (v) {\n\t\t\tlet sourceFile = v.getSourceFile();\n\t\t\tlet originalFile = env.files.find((f) => f.path == sourceFile.fileName);\n\t\t\tpreFuncs.push(\n\t\t\t\tcompile(\n\t\t\t\t\t{ parentFunction: v, checker, composed: deps.composed.get(k) ?? null },\n\t\t\t\t\tv,\n\t\t\t\t\toriginalFile?.mapping\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tlet sourceFile = root.getSourceFile();\n\tlet originalFile = env.files.find((f) => f.path == sourceFile?.fileName);\n\tlet main = compile(\n\t\t{\n\t\t\tchecker\n\t\t},\n\t\troot,\n\t\toriginalFile.mapping\n\t);\n\n\tpreFuncs.push(main);\n\n\tlet source = new SourceNode(root.getStart(), root.getEnd(), preFuncs);\n\n\tlet ss = { indexMapping: [], str: '' };\n\n\tsource.toString(ss);\n\n\tlet matches = glslHeader.match(/^([a-zA-Z_][a-zA-Z0-9_]+ [^\\(]+)/gm);\n\n\tlet finalShaderOutput = ss.str;\n\n\tlet headerSplits = [];\n\n\tfor (let i = 0; i < matches.length; i++) {\n\t\tlet index = glslHeader.indexOf(matches[i]);\n\t\tlet toIndex = i == matches.length - 1 ? glslHeader.length : glslHeader.indexOf(matches[i + 1]);\n\t\theaderSplits.push(glslHeader.substring(index, toIndex));\n\t}\n\n\tlet realHeader = '';\n\tfor (let i = 0; i < headerSplits.length; i++) {\n\t\tlet headerText = headerSplits[i];\n\t\tlet fnName = headerText.match(/^[a-zA-Z_][a-zA-Z0-9_]+ ([^\\(]+)/)?.[1];\n\n\t\tif (fnName) {\n\t\t\tif (finalShaderOutput.includes(fnName)) {\n\t\t\t\trealHeader += headerText;\n\t\t\t}\n\t\t}\n\t}\n\n\tfinalShaderOutput = realHeader + finalShaderOutput;\n\n\tlet output = new GLSLShader(`shd_${key}`, finalShaderOutput);\n\toutput.sourceMapping = ss.indexMapping;\n\n\tfor (let u of uniforms) {\n\t\tif (isUniformable(checker, u)) {\n\t\t\tlet name = u.name.getText();\n\t\t\tlet isGlobalVar = isRootNode(u);\n\t\t\tif (name) {\n\t\t\t\tlet typeOut = getDeclarationType(checker, u);\n\t\t\t\tlet typeNode = checker.getTypeAtLocation(u);\n\t\t\t\tlet symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n\n\t\t\t\tlet decl = symbol?.getDeclarations()?.[0];\n\t\t\t\tlet realName = '';\n\t\t\t\tif (decl && ts.isClassDeclaration(decl)) {\n\t\t\t\t\trealName = resolveStructName(decl);\n\t\t\t\t}\n\n\t\t\t\tfunction filterProps(props: any) {\n\t\t\t\t\tif (props && props.name) {\n\t\t\t\t\t\tlet sp = deps.structsProps.get(props.name);\n\t\t\t\t\t\tlet realStruct = deps.structs.get(props.name);\n\t\t\t\t\t\tif (props.type == 'struct' && realStruct) {\n\t\t\t\t\t\t\tfor (let f of Object.keys(props.fields)) {\n\t\t\t\t\t\t\t\tif (!sp || !sp.has(f)) {\n\t\t\t\t\t\t\t\t\tdelete props.fields[f];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (props.fields[f].type == 'struct') {\n\t\t\t\t\t\t\t\t\t\tprops.fields[f] = filterProps(props.fields[f]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn props;\n\t\t\t\t}\n\n\t\t\t\tif (isGlobalVar) {\n\t\t\t\t\toutput.globals[name] = {\n\t\t\t\t\t\tfileName: getNodeSourceFileName(u),\n\t\t\t\t\t\tstructure: filterProps(translateType(checker, typeOut, true))\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\toutput.locals[name] = filterProps(translateType(checker, typeOut, true));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n}\n\nfunction getNodeSourceFileName(node: ts.Node) {\n\tlet found = closest(node, (n) => ts.isSourceFile(n));\n\n\tif (found && ts.isSourceFile(found)) {\n\t\treturn found.fileName;\n\t} else {\n\t\treturn '';\n\t}\n}\n\nfunction walkNodes(node: ts.Node, cb: (node: ts.Node) => void) {\n\tcb(node);\n\tnode.forEachChild((n) => walkNodes(n, cb));\n}\n\nfunction walkNodesWithCalls(checker: ts.TypeChecker, node: ts.Node, cb: (node: ts.Node) => void) {\n\tcb(node);\n\tnode.forEachChild((n) => {\n\t\tif (ts.isCallExpression(node)) {\n\t\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t\t}\n\t\t\tif (exprSmybol) {\n\t\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\n\t\t\t\tif (\n\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t) {\n\t\t\t\t\tlet signature = checker.getResolvedSignature(node);\n\t\t\t\t\tlet mapping =\n\t\t\t\t\t\tfindRealSignatureMappingToGLSL(checker, signature) ??\n\t\t\t\t\t\tfindSignatureMappingToGLSL(checker, exprSmybol);\n\t\t\t\t\tif (mapping === null) {\n\t\t\t\t\t\tif (funcDeclar.body) {\n\t\t\t\t\t\t\twalkNodesWithCalls(checker, funcDeclar.body, cb);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkNodesWithCalls(checker, n, cb);\n\t});\n}\n\n/**\n * Looks for any doc comments that instruct the translator to map a js function to a glsl function\n */\nfunction findSignatureMappingToGLSL(checker: ts.TypeChecker, sym: ts.Symbol) {\n\tlet matcher = /=(?:glsl|univ)\\((.+)\\)$/g;\n\n\tif (!sym.valueDeclaration) return null;\n\tlet doc = ts.getJSDocTags(sym.valueDeclaration);\n\n\tfor (let d of doc) {\n\t\tif (d.tagName.text !== 'shadeup') continue;\n\n\t\tif (typeof d.comment === 'string') {\n\t\t\tlet matches = matcher.exec(d.comment);\n\t\t\tif (matches) {\n\t\t\t\treturn matches[1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\nfunction findRealSignatureMappingToGLSL(checker: ts.TypeChecker, sig: ts.Signature) {\n\tlet matcher = /=(?:glsl|univ)\\((.+)\\)$/g;\n\n\tlet doc = ts.getJSDocTags(sig.getDeclaration());\n\n\tfor (let d of doc) {\n\t\tif (d.tagName.text !== 'shadeup') continue;\n\n\t\tif (typeof d.comment === 'string') {\n\t\t\tlet matches = matcher.exec(d.comment);\n\t\t\tif (matches) {\n\t\t\t\treturn matches[1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction removeDoubleUnderscores(str: string) {\n\treturn str.replace(/__/g, '_ii');\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/header.glsl",
    "content": "uint shadeup_up_swizzle_x_uint(uint n) {\n\treturn n;\n}\n\nuvec2 shadeup_up_swizzle_xx_uint(uint n) {\n\treturn uvec2(n, n);\n}\n\nuvec3 shadeup_up_swizzle_xxx_uint(uint n) {\n\treturn uvec3(n, n, n);\n}\n\nuvec4 shadeup_up_swizzle_xxxx_uint(uint n) {\n\treturn uvec4(n, n, n, n);\n}\n\nivec2 shadeup_up_swizzle_xy_uint(uint n) {\n\treturn uvec2(n, n);\n}\n\nuvec3 shadeup_up_swizzle_xyz_uint(uint n) {\n\treturn uvec3(n, n, n);\n}\n\nuvec4 shadeup_up_swizzle_xyzw_uint(uint n) {\n\treturn uvec4(n, n, n, n);\n}\n\nint shadeup_up_swizzle_x_int(int n) {\n\treturn n;\n}\n\nivec2 shadeup_up_swizzle_xx_int(int n) {\n\treturn ivec2(n, n);\n}\n\nivec3 shadeup_up_swizzle_xxx_int(int n) {\n\treturn ivec3(n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec2 shadeup_up_swizzle_xy_int(int n) {\n\treturn ivec2(n, n);\n}\n\nivec3 shadeup_up_swizzle_xyz_int(int n) {\n\treturn ivec3(n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xyzw_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nivec4 shadeup_up_swizzle_xxxx_int(int n) {\n\treturn ivec4(n, n, n, n);\n}\n\nfloat shadeup_up_swizzle_x_float(float n) {\n\treturn n;\n}\n\nvec2 shadeup_up_swizzle_xx_float(float n) {\n\treturn vec2(n, n);\n}\n\nvec3 shadeup_up_swizzle_xxx_float(float n) {\n\treturn vec3(n, n, n);\n}\n\nvec4 shadeup_up_swizzle_xxxx_float(float n) {\n\treturn vec4(n, n, n, n);\n}\n\nvec2 shadeup_up_swizzle_xy_float(float n) {\n\treturn vec2(n, n);\n}\n\nvec3 shadeup_up_swizzle_xyz_float(float n) {\n\treturn vec3(n, n, n);\n}\n\nvec4 shadeup_up_swizzle_xyzw_float(float n) {\n\treturn vec4(n, n, n, n);\n}\n\nmat4 matrix_inversefloat4x4(mat4 m) {\n\treturn inverse(m);\n}\n\nmat3 matrix_inversefloat3x3(mat3 m) {\n\treturn inverse(m);\n}\n\nmat2 matrix_inversefloat2x2(mat2 m) {\n\treturn inverse(m);\n}\n\nfloat bilerp_float(float a, float b, float c, float d, float u, float v) {\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\n}\n\nvec2 bilerp_float2(vec2 a, vec2 b, vec2 c, vec2 d, float u, float v) {\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\n}\n\nvec3 bilerp_float3(vec3 a, vec3 b, vec3 c, vec3 d, float u, float v) {\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\n}\n\nvec4 bilerp_float4(vec4 a, vec4 b, vec4 c, vec4 d, float u, float v) {\n\treturn mix(mix(a, b, u), mix(c, d, u), v);\n}\n\nmat2 bilerp_float2x2(mat2 a, mat2 b, mat2 c, mat2 d, float u, float v) {\n\treturn mat2(bilerp_float2(a[0], b[0], c[0], d[0], u, v), bilerp_float2(a[1], b[1], c[1], d[1], u, v));\n}\n\nmat3 bilerp_float3x3(mat3 a, mat3 b, mat3 c, mat3 d, float u, float v) {\n\treturn mat3(bilerp_float3(a[0], b[0], c[0], d[0], u, v), bilerp_float3(a[1], b[1], c[1], d[1], u, v), bilerp_float3(a[2], b[2], c[2], d[2], u, v));\n}\n\nmat4 bilerp_float4x4(mat4 a, mat4 b, mat4 c, mat4 d, float u, float v) {\n\treturn mat4(bilerp_float4(a[0], b[0], c[0], d[0], u, v), bilerp_float4(a[1], b[1], c[1], d[1], u, v), bilerp_float4(a[2], b[2], c[2], d[2], u, v), bilerp_float4(a[3], b[3], c[3], d[3], u, v));\n}"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/header.wgsl",
    "content": "fn shadeup_up_swizzle_x_u32(n: u32) -> u32{\n\treturn n;\n}\nfn shadeup_up_swizzle_xx_u32(n: u32) -> vec2<u32>{\n\treturn vec2<u32>(n, n);\n}\nfn shadeup_up_swizzle_xxx_u32(n: u32) -> vec3<u32>{\n\treturn vec3<u32>(n, n, n);\n}\nfn shadeup_up_swizzle_xxxx_u32(n: u32) -> vec4<u32>{\n\treturn vec4<u32>(n, n, n, n);\n}\n\nfn shadeup_up_swizzle_xy_u32(n: u32) -> vec2<u32>{\n\treturn vec2<u32>(n, n);\n}\n\nfn shadeup_up_swizzle_xyz_u32(n: u32) -> vec3<u32>{\n\treturn vec3<u32>(n, n, n);\n}\n\nfn shadeup_up_swizzle_xyzw_u32(n: u32) -> vec4<u32>{\n\treturn vec4<u32>(n, n, n, n);\n}\n\nfn shadeup_up_swizzle_x_i32(n: i32) -> i32{\n\treturn n;\n}\n\nfn shadeup_up_swizzle_xx_i32(n: i32) -> vec2<i32>{\n\treturn vec2<i32>(n, n);\n}\n\nfn shadeup_up_swizzle_xxx_i32(n: i32) -> vec3<i32>{\n\treturn vec3<i32>(n, n, n);\n}\n\nfn shadeup_up_swizzle_xxxx_i32(n: i32) -> vec4<i32>{\n\treturn vec4<i32>(n, n, n, n);\n}\n\nfn shadeup_up_swizzle_xy_i32(n: i32) -> vec2<i32>{\n\treturn vec2<i32>(n, n);\n}\n\nfn shadeup_up_swizzle_xyz_i32(n: i32) -> vec3<i32>{\n\treturn vec3<i32>(n, n, n);\n}\n\nfn shadeup_up_swizzle_xyzw_i32(n: i32) -> vec4<i32>{\n\treturn vec4<i32>(n, n, n, n);\n}\n\nfn shadeup_up_swizzle_x_f32(n: f32) -> f32{\n\treturn n;\n}\n\nfn shadeup_up_swizzle_xx_f32(n: f32) -> vec2<f32>{\n\treturn vec2<f32>(n, n);\n}\n\nfn shadeup_up_swizzle_xxx_f32(n: f32) -> vec3<f32>{\n\treturn vec3<f32>(n, n, n);\n}\n\nfn shadeup_up_swizzle_xxxx_f32(n: f32) -> vec4<f32>{\n\treturn vec4<f32>(n, n, n, n);\n}\n\nfn shadeup_up_swizzle_xy_f32(n: f32) -> vec2<f32>{\n\treturn vec2<f32>(n, n);\n}\n\nfn shadeup_up_swizzle_xyz_f32(n: f32) -> vec3<f32>{\n\treturn vec3<f32>(n, n, n);\n}\n\nfn shadeup_up_swizzle_xyzw_f32(n: f32) -> vec4<f32>{\n\treturn vec4<f32>(n, n, n, n);\n}\n\nfn squash_bool_vec2(n: vec2<bool>) -> bool {\n\treturn n.x && n.y;\n}\n\nfn squash_bool_vec3(n: vec3<bool>) -> bool {\n\treturn n.x && n.y && n.z;\n}\n\nfn squash_bool_vec4(n: vec4<bool>) -> bool {\n\treturn n.x && n.y && n.z && n.w;\n}\n\nfn matrix_inversefloat4x4(m: mat4x4<f32>) -> mat4x4<f32>{\n\tlet n11 = m[0][0];\n\tlet n12 = m[1][0];\n\tlet n13 = m[2][0];\n\tlet n14 = m[3][0];\n\tlet n21 = m[0][1];\n\tlet n22 = m[1][1];\n\tlet n23 = m[2][1];\n\tlet n24 = m[3][1];\n\tlet n31 = m[0][2];\n\tlet n32 = m[1][2];\n\tlet n33 = m[2][2];\n\tlet n34 = m[3][2];\n\tlet n41 = m[0][3];\n\tlet n42 = m[1][3];\n\tlet n43 = m[2][3];\n\tlet n44 = m[3][3];\n\n\tlet t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\n\tlet t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\n\tlet t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\n\tlet t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\tlet idet = 1.0 / det;\n\n\tvar ret: mat4x4<f32> = mat4x4<f32>();\n\n\tret[0][0] = t11 * idet;\n\tret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet;\n\tret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet;\n\tret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet;\n\n\tret[1][0] = t12 * idet;\n\tret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet;\n\tret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet;\n\tret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet;\n\n\tret[2][0] = t13 * idet;\n\tret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet;\n\tret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet;\n\tret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet;\n\n\tret[3][0] = t14 * idet;\n\tret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet;\n\tret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet;\n\tret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet;\n\n\treturn ret;\n}\n\nfn matrix_inversefloat3x3(m: mat3x3<f32>) -> mat3x3<f32>{\n\tlet n11 = m[0][0];\n\tlet n12 = m[1][0];\n\tlet n13 = m[2][0];\n\tlet n21 = m[0][1];\n\tlet n22 = m[1][1];\n\tlet n23 = m[2][1];\n\tlet n31 = m[0][2];\n\tlet n32 = m[1][2];\n\tlet n33 = m[2][2];\n\n\tlet t11 = n22 * n33 - n23 * n32;\n\tlet t12 = n13 * n32 - n12 * n33;\n\tlet t13 = n12 * n23 - n13 * n22;\n\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13;\n\tlet idet = 1.0 / det;\n\n\tvar ret: mat3x3<f32> = mat3x3<f32>();\n\n\tret[0][0] = t11 * idet;\n\tret[0][1] = (n23 * n31 - n21 * n33) * idet;\n\tret[0][2] = (n21 * n32 - n22 * n31) * idet;\n\n\tret[1][0] = t12 * idet;\n\tret[1][1] = (n11 * n33 - n13 * n31) * idet;\n\tret[1][2] = (n12 * n31 - n11 * n32) * idet;\n\n\tret[2][0] = t13 * idet;\n\tret[2][1] = (n13 * n21 - n11 * n23) * idet;\n\tret[2][2] = (n11 * n22 - n12 * n21) * idet;\n\n\treturn ret;\n}\n\nfn matrix_inversefloat2x2(m: mat2x2<f32>) -> mat2x2<f32> {\n\tlet n11 = m[0][0];\n\tlet n12 = m[1][0];\n\tlet n21 = m[0][1];\n\tlet n22 = m[1][1];\n\n\tlet det = n11 * n22 - n12 * n21;\n\tlet idet = 1.0 / det;\n\n\tvar ret: mat2x2<f32> = mat2x2<f32>();\n\n\tret[0][0] = n22 * idet;\n\tret[0][1] = -n12 * idet;\n\tret[1][0] = -n21 * idet;\n\tret[1][1] = n11 * idet;\n\n\treturn ret;\n}\n\nfn matrix_transposefloat2x2(m: mat2x2<f32>) -> mat2x2<f32> {\n\treturn mat2x2<f32>(m[0][0], m[1][0], m[0][1], m[1][1]);\n}\n\nfn matrix_transposefloat3x3(m: mat3x3<f32>) -> mat3x3<f32> {\n\treturn mat3x3<f32>\n\t(\n\t\tm[0][0], m[1][0], m[2][0],\n\t\tm[0][1], m[1][1], m[2][1],\n\t\tm[0][2], m[1][2], m[2][2]\n\t);\n}\n\nfn matrix_transposefloat4x4(m: mat4x4<f32>) -> mat4x4<f32> {\n\treturn mat4x4<f32>\n\t(\n\t\tm[0][0], m[1][0], m[2][0], m[3][0],\n\t\tm[0][1], m[1][1], m[2][1], m[3][1],\n\t\tm[0][2], m[1][2], m[2][2], m[3][2],\n\t\tm[0][3], m[1][3], m[2][3], m[3][3]\n\t);\n}\n\nfn bilerp_float(a: f32, b: f32, c: f32, d: f32, x: f32, y: f32) -> f32 {\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\n}\n\nfn bilerp_float2(a: vec2<f32>, b: vec2<f32>, c: vec2<f32>, d: vec2<f32>, x: f32, y: f32) -> vec2<f32> {\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\n}\n\nfn bilerp_float3(a: vec3<f32>, b: vec3<f32>, c: vec3<f32>, d: vec3<f32>, x: f32, y: f32) -> vec3<f32> {\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\n}\n\nfn bilerp_float4(a: vec4<f32>, b: vec4<f32>, c: vec4<f32>, d: vec4<f32>, x: f32, y: f32) -> vec4<f32> {\n\treturn mix(mix(a, b, x), mix(c, d, x), y);\n}\n\nfn bilerp_float2x2(a: mat2x2<f32>, b: mat2x2<f32>, c: mat2x2<f32>, d: mat2x2<f32>, x: f32, y: f32) -> mat2x2<f32> {\n\treturn mat2x2<f32>\n\t(\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y)\n\t);\n}\n\nfn bilerp_float3x3(a: mat3x3<f32>, b: mat3x3<f32>, c: mat3x3<f32>, d: mat3x3<f32>, x: f32, y: f32) -> mat3x3<f32> {\n\treturn mat3x3<f32>\n\t(\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\n\t\tbilerp_float(a[0][2], b[0][2], c[0][2], d[0][2], x, y),\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y),\n\t\tbilerp_float(a[1][2], b[1][2], c[1][2], d[1][2], x, y),\n\t\tbilerp_float(a[2][0], b[2][0], c[2][0], d[2][0], x, y),\n\t\tbilerp_float(a[2][1], b[2][1], c[2][1], d[2][1], x, y),\n\t\tbilerp_float(a[2][2], b[2][2], c[2][2], d[2][2], x, y)\n\t);\n}\n\nfn bilerp_float4x4(a: mat4x4<f32>, b: mat4x4<f32>, c: mat4x4<f32>, d: mat4x4<f32>, x: f32, y: f32) -> mat4x4<f32> {\n\treturn mat4x4<f32>\n\t(\n\t\tbilerp_float(a[0][0], b[0][0], c[0][0], d[0][0], x, y),\n\t\tbilerp_float(a[0][1], b[0][1], c[0][1], d[0][1], x, y),\n\t\tbilerp_float(a[0][2], b[0][2], c[0][2], d[0][2], x, y),\n\t\tbilerp_float(a[0][3], b[0][3], c[0][3], d[0][3], x, y),\n\t\tbilerp_float(a[1][0], b[1][0], c[1][0], d[1][0], x, y),\n\t\tbilerp_float(a[1][1], b[1][1], c[1][1], d[1][1], x, y),\n\t\tbilerp_float(a[1][2], b[1][2], c[1][2], d[1][2], x, y),\n\t\tbilerp_float(a[1][3], b[1][3], c[1][3], d[1][3], x, y),\n\t\tbilerp_float(a[2][0], b[2][0], c[2][0], d[2][0], x, y),\n\t\tbilerp_float(a[2][1], b[2][1], c[2][1], d[2][1], x, y),\n\t\tbilerp_float(a[2][2], b[2][2], c[2][2], d[2][2], x, y),\n\t\tbilerp_float(a[2][3], b[2][3], c[2][3], d[2][3], x, y),\n\t\tbilerp_float(a[3][0], b[3][0], c[3][0], d[3][0], x, y),\n\t\tbilerp_float(a[3][1], b[3][1], c[3][1], d[3][1], x, y),\n\t\tbilerp_float(a[3][2], b[3][2], c[3][2], d[3][2], x, y),\n\t\tbilerp_float(a[3][3], b[3][3], c[3][3], d[3][3], x, y)\n\t);\n}"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/root.ts",
    "content": "// import { SourceNode } from 'source-map';\nimport sha256 from \"fast-sha256\";\nimport { SyntaxNode } from \"web-tree-sitter\";\nimport { AstContext } from \"../parser/AstContext\";\nimport { cleanName, resolveNodeName } from \"./util\";\nimport ts from \"typescript\";\nimport { UniformKeyValuePair, getWGSLTypeInfo } from \"./wgsl\";\n\nlet rootSymbolsFromMath = [\n  \"abs\",\n  \"floor\",\n  \"ceil\",\n  \"round\",\n  \"sign\",\n  \"cos\",\n  \"sin\",\n  \"tan\",\n  \"acos\",\n  \"asin\",\n  \"atan\",\n  \"atan2\",\n  \"cosh\",\n  \"sinh\",\n  \"tanh\",\n  \"acosh\",\n  \"asinh\",\n  \"atanh\",\n  \"exp\",\n  \"log\",\n  \"pow\",\n  \"log2\",\n  \"log10\",\n  \"sqrt\",\n  \"inversesqrt\",\n  \"frac\",\n  \"min\",\n  \"max\",\n  \"step\",\n  \"clamp\",\n  \"saturate\",\n  \"smoothstep\",\n  \"lerp\",\n  \"bilerp\",\n  \"length\",\n  \"distance\",\n  \"dist\",\n  \"normalize\",\n  \"dot\",\n  \"reflect\",\n  \"refract\",\n  \"cross\",\n  \"degrees\",\n  \"radians\",\n  \"wrap\",\n  \"rand\",\n  \"rand2\",\n  \"rand3\",\n  \"float2x2\",\n  \"float3x3\",\n  \"float4x4\",\n  \"inverse\",\n  \"transpose\",\n  \"pingpong\",\n  \"atomic\",\n  \"mod\",\n  \"workgroupBarrier\",\n  \"storageBarrier\",\n  \"workgroupUniformLoad\",\n  \"discard\",\n  \"ddx\",\n  \"ddy\",\n  \"ddxFine\",\n  \"ddyFine\",\n  \"ddxCoarse\",\n  \"ddyCoarse\",\n  \"bitcast\",\n];\nlet rootSymbolsFromAll = [\n  \"print\",\n  \"stat\",\n  \"statGraph\",\n  \"time\",\n  \"compute\",\n  // 'type shader',\n  \"flush\",\n  // 'addressWorkgroup',\n  // 'drawAlt',\n  // 'shader_start_shd_',\n\n  \"globalVarInit\",\n  // 'type ShaderInput',\n  // 'type ShaderOutput',\n\n  \"sleep\",\n  \"__makeMap\",\n  \"__deepClone\",\n  \"map\",\n  \"array\",\n];\nlet rootSymbolsFromDraw = [\n  \"drawIndexed\",\n  \"drawInstanced\",\n  \"draw\",\n  \"makeShader\",\n  \"ShaderInput\",\n  \"ShaderOutput\",\n  \"shader\",\n  \"drawAlt2\",\n  // 'drawIndexedIndirect',\n  // 'drawInstancedIndexed',\n  // 'drawIndirect',\n  \"drawCount\",\n  \"drawAttributes\",\n  \"drawAdvanced\",\n  \"computeIndirect\",\n  \"drawFullscreen\",\n  \"shader_start_shd_\",\n];\nlet rootSymbolsFromCommon = [\n  \"pixelToClip\",\n  \"PI\",\n  \"quat\",\n  \"noise\",\n  \"spatial\",\n  // 'mat4',\n  \"Camera\",\n  \"Camera2d\",\n  \"buffer\",\n  \"matrix\",\n  \"texture2d\",\n  \"texture3d\",\n  \"ui\",\n  \"screenAA\",\n  \"randColor\",\n  \"randColor2\",\n\n  \"hsl\",\n  \"hsla\",\n  \"rgb\",\n  \"rgba\",\n  \"hslFromColor\",\n  \"hslaFromColor\",\n  \"rgbFromColor\",\n  \"rgbaFromColor\",\n  \"hsv\",\n  \"hsva\",\n  \"hsvFromColor\",\n  \"hsvaFromColor\",\n  \"cmyk\",\n  \"cmykFromColor\",\n  \"hex\",\n  \"hexFromColor\",\n\n  \"sin1\",\n  \"cos1\",\n  \"tan1\",\n\n  \"remap\",\n  \"remap1\",\n  \"color\",\n  \"wrap2\",\n  \"wrap3\",\n  \"wrap4\",\n\n  \"bezier\",\n];\nlet rootSymbolsFromMesh = [\"mesh\", \"Mesh\", \"Model\", \"ModelPart\", \"Material\"];\n\nconst header = `// This file was generated by Shadeup.\nimport * as __ from \"/std_math\";\nimport {${rootSymbolsFromMath.join(\", \")}} from \"/std_math\";\nimport {${rootSymbolsFromAll.join(\n  \", \"\n)}, globalVarGet as __globalVarGet} from \"/std___std_all\";\nimport {${rootSymbolsFromDraw.join(\", \")}} from \"/_std/drawIndexed\";\nimport { physics, PhysicsRigidBody2d, PhysicsCollider2d, PhysicsEngine2d } from \"/_std/physics\";\nlet globalVarGet = __globalVarGet;\n/**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n`;\n\nexport type IndexMapping = [number, number, number, number][];\nexport type SourceString = {\n  str: string;\n  indexMapping: IndexMapping;\n};\n\nexport class SourceNode {\n  public startIndex: number;\n  public endIndex: number;\n  public children: (SourceNode | string)[];\n\n  constructor(\n    startIndex: number,\n    endIndex: number,\n    children: (SourceNode | string)[] | SourceNode | string\n  ) {\n    this.startIndex = startIndex;\n    this.endIndex = endIndex;\n\n    if (Array.isArray(children)) {\n      this.children = children;\n    } else {\n      this.children = [children];\n    }\n  }\n\n  public toString(s: SourceString) {\n    let start = s.str.length;\n    for (const child of this.children) {\n      if (typeof child === \"string\") {\n        s.str += child;\n      } else if (child instanceof SourceNode) {\n        child.toString(s);\n      }\n    }\n    s.indexMapping.push([this.startIndex, this.endIndex, start, s.str.length]);\n  }\n\n  public print(): string {\n    const s: SourceString = { str: \"\", indexMapping: [] };\n    this.toString(s);\n    return s.str;\n  }\n}\n\nfunction getTypeFallback(checker: ts.TypeChecker, t: ts.Type) {\n  let n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n  if (!n && (t as any).intrinsicName) n = (t as any).intrinsicName;\n\n  if (typeof n !== \"string\") {\n    let props = t.getApparentProperties();\n    if (props.length > 0) {\n      for (let p of props) {\n        if (p.escapedName.toString() === \"_opaque_int\") return \"int\";\n        if (p.escapedName.toString() === \"_opaque_float\") return \"float\";\n      }\n    }\n\n    let btype = t.getBaseTypes();\n    if (btype && btype.length > 0) {\n      for (let b of btype) {\n        let tn = getTypeFallback(checker, b);\n        if (tn) return tn;\n      }\n\n      return null;\n    }\n  } else {\n    return n;\n  }\n}\n\nfunction followTypeReferences(t: ts.Type) {\n  if (\n    t.flags & ts.TypeFlags.Object &&\n    (t as any).objectFlags & ts.ObjectFlags.Reference\n  ) {\n    if ((t as ts.TypeReference).target === t) {\n      return t;\n    }\n    return followTypeReferences((t as ts.TypeReference).target);\n  } else {\n    return t;\n  }\n}\n\nfunction removeDoubleUnderscores(str: string) {\n  return str.replace(/__/g, \"_ii\");\n}\n\nfunction resolveStructName(c: ts.ClassDeclaration) {\n  // These are special names that we need to preserve\n  if (c.name?.text == \"ShaderInput\") return \"ShaderInput\";\n  if (c.name?.text == \"ShaderOutput\") return \"ShaderOutput\";\n\n  return removeDoubleUnderscores(\n    `str_${c\n      .getSourceFile()\n      .fileName.replaceAll(\"/\", \"_\")\n      .replaceAll(\".\", \"_\")}_${c.getStart()}_${\n      c.name?.text ?? \"unknown\"\n    }`.replaceAll(\"__\", \"_i_\")\n  );\n}\n\nfunction translateType(\n  checker: ts.TypeChecker,\n  t: ts.Type,\n  templateFormat = false\n) {\n  let n = getTypeFallback(checker, t);\n\n  let originalType = t;\n  if (n === undefined) {\n    t = followTypeReferences(t);\n  }\n  if (templateFormat) {\n    let name = n?.toString() ?? \"unknown\";\n\n    if (\n      name === \"Array\" ||\n      name === \"buffer\" ||\n      (t.flags & ts.TypeFlags.Object &&\n        ((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n          (t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n          (t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n    ) {\n      let typeRef = originalType as ts.TypeReference;\n\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      return {\n        type: \"array\",\n        element: translateType(checker, args[0], true),\n        staticSize: args.length,\n      };\n    }\n\n    if (name == \"boolean\" || name == \"false\" || name == \"true\") name = \"bool\";\n\n    if (\n      name.startsWith(\"float\") ||\n      name.startsWith(\"int\") ||\n      name == \"bool\" ||\n      name == \"texture2d\" ||\n      name == \"texture3d\"\n    )\n      return { type: \"primitive\", name };\n\n    let symbol = t.aliasSymbol || t.getSymbol();\n    if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n      if (ts.isClassDeclaration(symbol.declarations[0])) {\n        let fields: UniformKeyValuePair[] = [];\n        let decl = symbol.declarations[0] as ts.ClassDeclaration;\n        for (let member of decl.members) {\n          if (ts.isPropertyDeclaration(member)) {\n            let name = member.name.getText();\n            let type = checker.getTypeFromTypeNode(member.type!);\n            fields.push([name, translateType(checker, type, true)]);\n          }\n        }\n        return {\n          type: \"struct\",\n          name: resolveStructName(decl),\n          fields,\n        };\n      } else {\n        return {\n          type: \"unknown\",\n        };\n      }\n    }\n  } else {\n    if (\n      n === \"Array\" ||\n      n === \"buffer\" ||\n      (t.flags & ts.TypeFlags.Object &&\n        ((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n          (t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n          (t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n    ) {\n      let typeRef = originalType as ts.TypeReference;\n\n      let args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n      let translated = translateType(checker, args[0]);\n\n      let typeInfo = getWGSLTypeInfo(translated);\n      let arraySize = args.length;\n      let toStringed = checker.typeToString(typeRef);\n\n      if (typeInfo.needsAlignment) {\n        translated = `vec4<${typeInfo.elementType ?? \"f32\"}>`;\n      }\n\n      if (toStringed.endsWith(\"[]\")) {\n        return \"array<\" + translated + \">\";\n      } else {\n        return \"array<\" + translated + \", \" + arraySize + \">\";\n      }\n    }\n\n    if (n === \"texture2d\") return `sampler`;\n    if (n === \"texture3d\") return `sampler`;\n\n    if (n === \"bool\") return \"bool\";\n    if (n === \"boolean\") return \"bool\";\n    if (n === \"float\") return \"f32\";\n    if (n === \"float2\") return \"vec2<f32>\";\n    if (n === \"float3\") return \"vec3<f32>\";\n    if (n === \"float4\") return \"vec4<f32>\";\n\n    if (n === \"int\") return \"i32\";\n    if (n === \"int2\") return \"vec2<i32>\";\n    if (n === \"int3\") return \"vec3<i32>\";\n    if (n === \"int4\") return \"vec4<i32>\";\n\n    if (n === \"float2x2\") return \"mat2x2<f32>\";\n    if (n === \"float3x3\") return \"mat3x3<f32>\";\n    if (n === \"float4x4\") return \"mat4x4<f32>\";\n\n    if (n === \"void\") return \"void\";\n    if (n === \"error\") return \"void\";\n\n    let symbol = t.aliasSymbol || t.getSymbol();\n    if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n      if (ts.isClassDeclaration(symbol.declarations[0])) {\n        return resolveStructName(symbol.declarations[0]);\n      } else {\n        return n?.toString() ?? \"void\";\n      }\n    } else {\n      return n?.toString() ?? \"void\";\n    }\n  }\n}\n\n// Takes an index and returns the index in the original string\nexport function lookupIndexMapping(\n  indexMapping: IndexMapping,\n  index: number\n): number {\n  for (const [start, end, newStart, newEnd] of indexMapping) {\n    if (index >= newStart && index <= newEnd) {\n      return start + (index - newStart);\n    }\n  }\n  return -1;\n}\n\nexport function reverseLookupIndexMapping(\n  indexMapping: IndexMapping,\n  index: number\n): number {\n  for (const [start, end, newStart, newEnd] of indexMapping) {\n    if (index >= start && index <= end) {\n      return newStart + (index - start);\n    }\n  }\n  return -1;\n}\n\n// Finds the smallest range in the index mapping that contains the given range\nexport function lookupIndexMappingRange(\n  indexMapping: IndexMapping,\n  start: number,\n  end: number\n) {\n  let minStart = Infinity;\n  let maxEnd = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (start >= newStart && end <= newEnd) {\n      if (oldEnd - oldStart < size || size === 0) {\n        minStart = oldStart;\n        maxEnd = oldEnd;\n        size = oldEnd - oldStart;\n      }\n    }\n  }\n  return { start: minStart, end: maxEnd };\n}\n\nexport function reverseLookupIndexMappingRange(\n  indexMapping: IndexMapping,\n  start: number,\n  end: number\n) {\n  let minStart = Infinity;\n  let maxEnd = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (start >= oldStart && end <= oldEnd) {\n      if (newEnd - newStart < size || size === 0) {\n        minStart = newStart;\n        maxEnd = newEnd;\n        size = newEnd - newStart;\n      }\n    }\n  }\n  return { start: minStart, end: maxEnd };\n}\n\nexport function reverseLookupIndexMappingCursor(\n  indexMapping: IndexMapping,\n  cursor: number\n) {\n  let minStart = Infinity;\n  let maxEnd = -Infinity;\n  let exact = -Infinity;\n  let size = 0;\n  for (const [oldStart, oldEnd, newStart, newEnd] of indexMapping) {\n    if (cursor >= oldStart && cursor <= oldEnd) {\n      if (newEnd - newStart < size || size === 0) {\n        minStart = newStart;\n        maxEnd = newEnd;\n        exact = cursor - oldStart + newStart;\n        size = newEnd - newStart;\n      }\n    }\n  }\n  return exact;\n}\n\nfunction getNamedChild(node: SyntaxNode, name: string) {\n  return node.namedChildren.find((child) => child.type === name);\n}\n\nexport function prePass(ctx: AstContext, ast: SyntaxNode) {\n  for (const child of ast.namedChildren) {\n    if (child.type === \"impl_declaration\") {\n      let _for = child.childForFieldName(\"for\");\n      const name = child.childForFieldName(\"name\")!;\n      if (_for) {\n        ctx.addImplFor(name.text, child);\n      } else {\n        ctx.addImpl(name.text, child);\n      }\n    }\n\n    if (child.type == \"lexical_declaration\") {\n      let variable_declarator = child.firstNamedChild;\n      if (variable_declarator.type == \"variable_declarator\") {\n        ctx.globals.push(variable_declarator.firstNamedChild.text);\n      }\n    }\n  }\n}\n\nconst primitives = [\n  \"atomic\",\n  \"uint\",\n  \"uint2\",\n  \"uint3\",\n  \"uint4\",\n  \"uint8\",\n  \"int\",\n  \"float\",\n  \"float2\",\n  \"float3\",\n  \"float4\",\n  \"int2\",\n  \"int3\",\n  \"int4\",\n  \"float2x2\",\n  \"float3x3\",\n  \"float4x4\",\n  \"bool\",\n  \"string\",\n];\nconst math_primitives = [\n  \"atomic\",\n  \"uint\",\n  \"uint2\",\n  \"uint3\",\n  \"uint4\",\n  \"uint8\",\n  \"int\",\n  \"float\",\n  \"float2\",\n  \"float3\",\n  \"float4\",\n  \"int2\",\n  \"int3\",\n  \"int4\",\n  \"float2x2\",\n  \"float3x3\",\n  \"float4x4\",\n  \"bool\",\n];\n\nconst operators: { [key: string]: string } = {\n  \"+\": \"add\",\n  \"-\": \"sub\",\n  \"*\": \"mul\",\n  \"**\": \"pow\",\n  \"/\": \"div\",\n  \"%\": \"mod\",\n  \"==\": \"eq\",\n  \"!=\": \"neq\",\n  \"<\": \"lt\",\n  \"<=\": \"lte\",\n  \">\": \"gt\",\n  \">=\": \"gte\",\n  \"&&\": \"and\",\n  \"||\": \"or\",\n  \"!\": \"not\",\n  \"&\": \"bitand\",\n  \"|\": \"bitor\",\n  \"^\": \"bitxor\",\n  \"<<\": \"lshift\",\n  \">>\": \"rshift\",\n  \"~\": \"bitnot\",\n};\n\nconst keyFunctions: { [key: string]: string } = {\n  float: \"__.float\",\n  int: \"__.int\",\n  uint: \"__.uint\",\n  uint2: \"__.uint2\",\n  uint3: \"__.uint3\",\n  uint4: \"__.uint4\",\n  uint8: \"__.uint8\",\n  float2: \"__.float2\",\n  float3: \"__.float3\",\n  float4: \"__.float4\",\n  int2: \"__.int2\",\n  int3: \"__.int3\",\n  int4: \"__.int4\",\n  float2x2: \"__.float2x2\",\n  float3x3: \"__.float3x3\",\n  float4x4: \"__.float4x4\",\n};\n\nconst escapeWords: { [key: string]: boolean } = {\n  in: true,\n  out: true,\n};\n\nfunction generateDefaultForType(name: string) {\n  switch (name) {\n    case \"any\":\n      return \"null\";\n    case \"int\":\n      return \"__.int(0)\";\n    case \"uint\":\n      return \"__.uint(0)\";\n    case \"uint8\":\n      return \"__.uint8(0)\";\n    case \"float\":\n      return \"__.float(0.0)\";\n    case \"float2\":\n      return \"__.float2(0.0, 0.0)\";\n    case \"float3\":\n      return \"__.float3(0.0, 0.0, 0.0)\";\n    case \"float4\":\n      return \"__.float4(0.0, 0.0, 0.0, 0.0)\";\n    case \"int2\":\n      return \"__.int2(0, 0)\";\n    case \"int3\":\n      return \"__.int3(0, 0, 0)\";\n    case \"int4\":\n      return \"__.int4(0, 0, 0, 0)\";\n    case \"float2x2\":\n      return \"__.float2x2(0.0, 0.0, 0.0, 0.0)\";\n    case \"float3x3\":\n      return \"__.float3x3(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"float4x4\":\n      return \"__.float4x4(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)\";\n    case \"bool\":\n      return \"false\";\n    case \"string\":\n      return '\"\"';\n    case \"atomic<uint>\":\n      return \"atomic<__.uint>(__.uint(0))\";\n    case \"atomic<int>\":\n      return \"atomic<__.int>(__.int(0))\";\n    default:\n      if (name.endsWith(\"[]\")) {\n        return \"[]\";\n      } else if (name.endsWith(\"]\")) {\n        let matches = name.match(/(.+)\\[(\\d+)\\]$/);\n        if (matches && matches.length > 2) {\n          let type = matches[1];\n          let count = matches[2];\n          let args = [];\n          for (let i = 0; i < parseInt(count); i++) {\n            args.push(generateDefaultForType(type));\n          }\n          return \"[\" + args.join(\",\") + \"]\";\n        } else {\n          return \"[]\";\n        }\n      } else {\n        if (\n          name.startsWith(\"buffer\") ||\n          name.startsWith(\"texture2d\") ||\n          name.startsWith(\"texture3d\")\n        ) {\n          return \"null\";\n        } else {\n          return \"new \" + name + \"({})\";\n        }\n      }\n  }\n}\n\nfunction isValidInteger(str: string) {\n  let n = parseInt(str);\n  if (n > Math.pow(2, 31) - 1 || n < -Math.pow(2, 31)) {\n    return false;\n  }\n\n  return true;\n}\n\nexport function compile(ctx: AstContext, ast: SyntaxNode): SourceNode {\n  function c(\n    myAst: SyntaxNode | undefined,\n    errorMessage: string = \"Syntax error\"\n  ) {\n    if (!myAst) {\n      console.log(\"error\");\n      ctx.report(ast, errorMessage);\n      return s([\"/*\", errorMessage, \"*/\"]);\n    } else {\n      return compile(ctx, myAst);\n    }\n  }\n\n  /** Generates a SourceNode based on the current ast node */\n  function s(c: (SourceNode | string)[]) {\n    return new SourceNode(ast.startIndex, ast.endIndex, c);\n  }\n\n  /** Gets a named child of the current ast node */\n  function n(type: string) {\n    return ast.childForFieldName(type);\n  }\n\n  function flat(...c: (SourceNode | string)[][]) {\n    return c.reduce((acc, cur) => {\n      return [...acc, ...cur];\n    }, [] as (SourceNode | string)[]);\n  }\n\n  function join(c: (SourceNode | string)[], sep: string) {\n    return c\n      .filter((v) => {\n        if (\n          (typeof v == \"string\" && v.length == 0) ||\n          (v instanceof SourceNode && v.children.length == 0)\n        ) {\n          return false;\n        }\n        return true;\n      })\n      .reduce((acc, cur) => {\n        if (acc.length === 0) {\n          return [cur];\n        }\n\n        return [...acc, sep, cur];\n      }, [] as (SourceNode | string)[]);\n  }\n\n  function children() {\n    return ast.namedChildren.map((child) => c(child));\n  }\n\n  function hasName(name: string) {\n    return ast.childForFieldName(name) !== null;\n  }\n\n  if (!ast) {\n    return new SourceNode(0, 0, [\"/*\", \"Syntax error\", \"*/\"]);\n  }\n\n  switch (ast.type) {\n    case \"program\":\n      // let globalAccessors = ctx.globals.map((g) => {\n      // \treturn s([\n      // \t\t'(window as any)[\"global_var_',\n      // \t\tcleanName(ctx.fileName) + '_' + g,\n      // \t\t'\"]',\n      // \t\t' = () => { return ',\n      // \t\tg,\n      // \t\t'; };\\n'\n      // \t]);\n      // });\n\n      return s([\n        header,\n        ...(ctx.fileName != \"file:////_std/common.ts\"\n          ? [\n              `import {${rootSymbolsFromCommon.join(\n                \", \"\n              )}} from \"/_std/common\";`,\n            ]\n          : []),\n        ...(ctx.fileName != \"file:////_std/mesh.ts\"\n          ? [`import {${rootSymbolsFromMesh.join(\", \")}} from \"/_std/mesh\";`]\n          : []),\n        ...(ctx.fileName != \"file:////_std/sdf.ts\"\n          ? [`import { sdf } from \"/_std/sdf\";`]\n          : []),\n        ...ast.children.map((child) => c(child)),\n      ]);\n    case \"expression_statement\":\n      if (ast.firstChild) {\n        if (ast.lastNamedChild?.type === \"ERROR\") {\n          return s([c(ast.firstNamedChild), \".\"]);\n        }\n        if (ast.firstNamedChild.type == \"workgroup\") {\n          return s([c(ast.firstNamedChild), \"\\n\"]);\n        } else {\n          return s([c(ast.firstNamedChild), \";\\n\"]);\n        }\n      }\n    case \"binary_expression\":\n      if (ast.firstChild && ast.lastChild) {\n        if (\n          ast.lastChild.text == \"null\" &&\n          (ast.children[1].text == \"!=\" || ast.children[1].text == \"==\")\n        ) {\n          return s([c(ast.firstChild), ast.children[1].text + \"=\", \"null\"]);\n        }\n        return s([\n          \"__.\",\n          operators[ast.children[1].text.trim()] ?? ast.children[1].text.trim(),\n          \"( \",\n          c(ast.firstNamedChild!),\n          \", \",\n          c(ast.lastNamedChild!),\n          \" )\",\n        ]);\n      }\n    case \"identifier\":\n      if (keyFunctions[ast.text]) {\n        return s([String(keyFunctions[ast.text])]);\n      } else if (escapeWords[ast.text]) {\n        return s([String(\"__\" + ast.text)]);\n      }\n      return s([\n        String(\n          ast.text === \"self\"\n            ? isInShader(ast)\n              ? \"shader_self_temp\"\n              : \"this\"\n            : ast.text\n        ),\n      ]);\n    case \"number\":\n      if (ast.parent?.type == \"pair\" && ast.parent.firstNamedChild == ast) {\n        return s([String(ast.text)]);\n      }\n\n      if (ast.text.match(/.[xyzwrgba]+$/)) {\n        let swizzle = (ast.text.match(/.[xyzwrgba]+$/) ?? [\"\"])[0];\n        swizzle = swizzle.replace(\".\", \"\");\n        let raw = ast.text.replace(/.[xyzwrgba]+$/, \"\");\n        let isUint = raw.indexOf(\"u\") !== -1;\n        let isFloat = raw.indexOf(\".\") !== -1;\n        return s([\n          String(\n            \"__.swizzle(\" +\n              (isFloat ? \"__.float\" : isUint ? \"__.uint\" : \"__.int\") +\n              \"(\" +\n              raw.replace(\"u\", \"\") +\n              '), \"' +\n              swizzle +\n              '\")'\n          ),\n        ]);\n      }\n      let isFloat = ast.text.indexOf(\".\") !== -1;\n\n      let isUint = ast.text.indexOf(\"u\") !== -1;\n\n      if (!isFloat && !isValidInteger(ast.text) && !isUint) {\n        ctx.report(\n          ast,\n          \"Invalid integer, this overflows the 32 bit integer limit, add a .0 to the end to make it a float\"\n        );\n      }\n\n      return s([\n        (isFloat ? \"__.float\" : isUint ? \"__.uint\" : \"__.int\") + \"(\",\n        new SourceNode(ast.startIndex, ast.endIndex, ast.text.replace(\"u\", \"\")),\n        \")\",\n      ]);\n    case \"string\":\n      return s([String(ast.text)]);\n    case \"function_declaration\":\n      if (ast.firstChild && ast.lastChild) {\n        let funcName = n(\"name\").text;\n        let prefix = \"\";\n        if (funcName === \"main\") {\n          prefix += \"\";\n          prefix += \"export \";\n        }\n        return s([\n          prefix + \"function \",\n          c(n(\"name\")!),\n          c(n(\"parameters\")!),\n          ...(hasName(\"return_type\") ? [c(n(\"return_type\")!), \" \"] : []),\n          c(n(\"body\")!),\n          \"\\n\",\n        ]);\n      }\n    case \"block\" || \"statement_block\":\n      return s(children());\n    case \"formal_parameters\":\n      return s([\"(\", ...join(children(), \", \"), \")\"]);\n    case \"required_parameter\":\n      if (n(\"pattern\")?.text === \"self\") {\n        return s([]);\n      }\n      return s(\n        flat(\n          [c(n(\"pattern\")!)],\n          hasName(\"type\") ? [\": \", c(n(\"type\")!)] : [],\n          hasName(\"value\") ? [\" = \", c(n(\"value\")!)] : []\n        )\n      );\n    case \"type_annotation\":\n      return s([c(ast.firstNamedChild!)]);\n    case \"type_identifier\":\n      if (math_primitives.indexOf(ast.text) !== -1) {\n        return s([String(\"__.\" + ast.text)]);\n      }\n      return s([String(ast.text)]);\n    case \"predefined_type\":\n      if (math_primitives.indexOf(ast.text) !== -1) {\n        return s([String(\"__.\" + ast.text)]);\n      }\n      return s([String(ast.text)]);\n    case \"function_type\":\n      return s([c(n(\"parameters\")), \" => \", c(n(\"return_type\"))]);\n    case \"lookup_type\":\n      let len = parseInt(ast.lastNamedChild?.text ?? \"0\");\n      let repeats = [];\n      for (let i = 0; i < len; i++) {\n        repeats.push(c(ast.firstNamedChild!));\n      }\n      return s([\"[\", ...join(repeats, \", \"), \"]\"]);\n    case \"arrow_function\":\n      return s([\n        c(n(\"parameters\")!),\n        \" => \",\n        ...(hasName(\"return_type\") ? [c(n(\"return_type\")!), \" \"] : []),\n        c(n(\"body\")!),\n      ]);\n    case \"literal_type\":\n      return s([c(ast.firstNamedChild!)]);\n    case \"return_statement\":\n      if (ast.namedChildCount === 0) {\n        return s([\"return;\"]);\n      } else {\n        if (ast.lastNamedChild?.type === \"ERROR\") {\n          return s([\"return \", c(ast.firstNamedChild), \".\"]);\n        }\n        return s([\"return \", c(ast.firstNamedChild!), \";\"]);\n      }\n    case \"export_statement\":\n      return s([\"export \", c(ast.firstNamedChild), \";\"]);\n    case \"export_clause\":\n      return s([\"{\", ...join(children(), \", \"), \"}\"]);\n    case \"export_specifier\":\n      return s([c(ast.firstNamedChild!)]);\n    case \"array\":\n      return s([\"[\", ...join(children(), \", \"), \"]\"]);\n    case \"template_string\":\n      return s([\"`\", ...join(children(), \"\"), \"`\"]);\n    case \"template_substitution\":\n      return s([\"${\", c(n(\"expression\")!), \"}\"]);\n    case \"template_string_segment\":\n      return s([String(ast.text)]);\n    case \"type_alias_declaration\":\n      ctx.report(ast, \"Type aliases aren't supported yet\");\n      return s([\"/*error*/0\"]);\n    case \"import\":\n      return s([\"\"]);\n    case \"comment\":\n      return s([String(ast.text), \"\\n\"]);\n    case \"call_expression\":\n      if (n(\"type_arguments\")) {\n        if (\n          n(\"function\").text == \"buffer\" ||\n          n(\"function\").text == \"texture2d\" ||\n          n(\"function\").text == \"texture3d\"\n        ) {\n          let internalArgs = s([\n            \"(\",\n            ...join(\n              [\n                ...n(\"arguments\").namedChildren.map((chi) => c(chi)),\n                ...((n(\"arguments\").namedChildren.length == 1 &&\n                  n(\"function\").text == \"texture2d\") ||\n                n(\"function\").text == \"texture3d\"\n                  ? [s(['\"auto\"'])]\n                  : []),\n                s(['\"', n(\"type_arguments\").namedChild(0).text, '\"']),\n              ],\n              \", \"\n            ),\n            \")\",\n          ]);\n          return s([c(n(\"function\")!), c(n(\"type_arguments\")), internalArgs]);\n        }\n        return s([\n          c(n(\"function\")!),\n          c(n(\"type_arguments\")),\n          c(n(\"arguments\")!),\n        ]);\n      } else {\n        return s([c(n(\"function\")!), c(n(\"arguments\")!)]);\n      }\n    case \"construct_expression\":\n      return s([\"new \", c(n(\"identifier\")!), \"(\", c(n(\"body\")!), \")\"]);\n    case \"member_expression\":\n      let prop = n(\"property\")!;\n      let p = prop.text ?? \"\";\n      let isParentAssignment =\n        ast.parent?.type == \"assignment_expression\" ||\n        ast.parent?.type == \"augmented_assignment_expression\";\n      if (isParentAssignment) {\n        let left = ast.parent.childForFieldName(\"left\");\n        isParentAssignment =\n          left.startIndex == ast.startIndex && left.endIndex == ast.endIndex;\n      }\n      if (p.length > 0 && p.length < 5) {\n        // Could be a swizzle\n        let isSwizzle = true;\n\n        for (let i = 0; i < p.length; i++) {\n          let char = p[i];\n          if (\n            char !== \"x\" &&\n            char !== \"y\" &&\n            char !== \"z\" &&\n            char !== \"w\" &&\n            char !== \"r\" &&\n            char !== \"g\" &&\n            char !== \"b\" &&\n            char !== \"a\"\n          ) {\n            isSwizzle = false;\n            break;\n          }\n        }\n\n        if (isSwizzle) {\n          if (isParentAssignment) {\n            let r = ast.parent.childForFieldName(\"right\");\n          }\n          return s([\n            `__.swizzle(`,\n            c(n(\"object\")!),\n            `, '`,\n            new SourceNode(prop.startIndex, prop.endIndex, p),\n            `'`,\n            ...(isParentAssignment\n              ? [`, `, c(ast.parent.childForFieldName(\"right\")!)]\n              : []),\n            `)`,\n            // new SourceNode(ast.children[1].startIndex, ast.children[1].endIndex, '.'),\n            // c(n('property')!)\n          ]);\n        }\n      }\n      return s([\n        c(n(\"object\")!),\n        new SourceNode(\n          ast.children[1].startIndex,\n          ast.children[1].endIndex,\n          \".\"\n        ),\n        c(n(\"property\")!),\n      ]);\n\n    case \"pair\":\n      return s([c(n(\"key\")!), \": \", c(n(\"value\"), \"Expected value in pair\")!]);\n\n    case \"object\":\n      let childrens = ast.namedChildren\n        .filter((subc) => subc.type !== \"comment\")\n        .map((subc) => c(subc));\n      return s([\"{\", ...join(childrens, \", \"), \"}\"]);\n      if (ast.parent?.type === \"construct_expression\") {\n      } else {\n        return s([\"{\", ...join(children(), \", \"), \"}\"]);\n        return s([\"__makeMap({\", ...join(children(), \", \"), \"})\"]);\n      }\n\n    case \"property_identifier\":\n      return s([String(ast.text)]);\n\n    case \"arguments\":\n      return s([\"(\", ...join(children(), \", \"), \")\"]);\n\n    case \"parenthesized_expression\":\n      if (ast.lastNamedChild?.type === \"ERROR\") {\n        return s([\"(\", c(ast.firstNamedChild!), \".\", \")\"]);\n      }\n      return s([\"(\", c(ast.firstNamedChild!), \")\"]);\n    case \"function_signature\":\n      ctx.report(ast, \"Missing function body\");\n      return s([\"/*error*/0\"]);\n    case \"parenthesized_expression_vector\":\n      if (ast.firstNamedChild) {\n        if (ast.firstNamedChild.type === \"sequence_expression\") {\n          return s([\"__.makeVector(\", c(ast.firstNamedChild), \")\"]);\n        } else {\n          return s([\"(\", c(ast.firstNamedChild), \")\"]);\n        }\n      }\n    // console.log('Count', ast.childCount, ast.text, ast.firstNamedChild);\n    // if (ast.childCount == 1) {\n    // \treturn s(['(', c(ast.firstNamedChild!), ')']);\n    // } else {\n    // \treturn s(['__.makeVector(', c(ast.firstNamedChild!), ')']);\n    // }\n    case \"if_statement\":\n      return s([\n        \"if \",\n        c(n(\"condition\")!),\n        c(n(\"consequence\")!),\n        hasName(\"alternative\") ? c(n(\"alternative\")!) : \"\",\n      ]);\n\n    case \"else\":\n      return s([\" else \", c(ast.firstNamedChild!), \"\\n\"]);\n\n    case \"generic_type\":\n      return s([c(n(\"name\")!), c(n(\"type_arguments\")!)]);\n\n    case \"type_arguments\":\n      return s([\"<\", ...join(children(), \", \"), \">\"]);\n\n    case \"array_type\":\n      if (ast.namedChildCount == 2) {\n        return s([c(ast.firstNamedChild), \"[\", c(ast.lastNamedChild), \"]\"]);\n      } else {\n        return s([c(ast.firstNamedChild), \"[]\"]);\n      }\n\n    case \"ternary_expression\":\n      return s([\n        c(n(\"condition\")!),\n        \" ? \",\n        c(n(\"consequence\")!),\n        \" : \",\n        c(n(\"alternative\")!),\n      ]);\n\n    case \"update_expression\":\n      return s([c(n(\"argument\")!), n(\"operator\").text]);\n\n    case \"augmented_assignment_expression\":\n      let opMapping = {\n        \"+=\": \"add\",\n        \"-=\": \"sub\",\n        \"*=\": \"mul\",\n        \"/=\": \"div\",\n        \"%=\": \"mod\",\n      };\n\n      let leftAssignAug = n(\"left\");\n      if (leftAssignAug?.type === \"subscript_expression\") {\n        return s([\n          c(leftAssignAug.childForFieldName(\"object\")),\n          \".__index_assign_op(__.\",\n          opMapping[n(\"operator\").text],\n          \", \",\n          c(leftAssignAug.childForFieldName(\"index\")),\n          \", \",\n          c(n(\"right\")!),\n          \")\",\n        ]);\n      }\n\n      return s([\n        c(n(\"left\")!),\n        \" = __.\",\n        opMapping[n(\"operator\").text],\n        \"(\",\n        c(n(\"left\")!),\n        \", \",\n        c(n(\"right\")!),\n        \")\",\n      ]);\n\n    case \"for_statement\":\n      return s([\n        \"for (\",\n        c(n(\"initializer\")!),\n        \" \",\n        c(n(\"condition\")!),\n        \" \",\n        c(n(\"increment\")!),\n        \") \",\n        c(n(\"body\")!),\n      ]);\n\n    case \"for_in_statement\":\n      let leftFor = n(\"left\")!;\n      let rightFor = n(\"right\")!;\n      if (leftFor.type === \"parenthesized_expression\") {\n        let forComponents = [];\n        for (\n          let i = 0;\n          i < leftFor.namedChildren[0].namedChildren.length;\n          i++\n        ) {\n          let name = leftFor.namedChildren[0].namedChildren[i];\n          if (name.type != \"identifier\") {\n            ctx.report(\n              leftFor.namedChild(i),\n              \"Invalid for loop variable name, must be x, y, z or w\"\n            );\n          }\n          let key = name.text;\n          if (![\"x\", \"y\", \"z\", \"w\"].includes(key)) {\n            ctx.report(\n              leftFor.namedChild(i),\n              \"Invalid for loop variable name, must be x, y, z or w\"\n            );\n          }\n\n          if (forComponents.includes(key)) {\n            ctx.report(\n              leftFor.namedChild(i),\n              \"Duplicate for loop variable name\"\n            );\n          }\n          forComponents.push(key);\n        }\n\n        forComponents = forComponents.reverse();\n\n        let parts = [];\n\n        parts.push(s([\"let __for_iter = \", c(rightFor), \";\\n\"]));\n        let indexes = [\"x\", \"y\", \"z\", \"w\"];\n        for (let n of forComponents) {\n          parts.push(\n            s([\n              \"for (let \",\n              n,\n              \": __.int = __.int(0); \",\n              n,\n              \" < __for_iter[\",\n              indexes.indexOf(n).toString(),\n              \"]; \",\n              n,\n              \"++) {\\n\",\n            ])\n          );\n        }\n\n        parts.push(s([c(n(\"body\")!), \"\\n\"]));\n\n        for (let n of forComponents) {\n          parts.push(s([\"}\\n\"]));\n        }\n\n        return s(parts);\n      }\n\n      return s([\n        \"for (let \",\n        c(n(\"left\")!),\n        \" of \",\n        c(n(\"right\")!),\n        \") \",\n        c(n(\"body\")!),\n      ]);\n\n    case \"while_statement\":\n      return s([\"while (\", c(n(\"condition\")!), \") \", c(n(\"body\")!)]);\n\n    case \"break_statement\":\n      return s([\"break;\"]);\n\n    case \"continue_statement\":\n      return s([\"continue;\"]);\n\n    case \"new_expression\":\n      return s([\"new \", c(n(\"constructor\")!), c(n(\"arguments\")!)]);\n    case \"else_clause\":\n      return s([\" else \", c(ast.firstNamedChild!), \"\\n\"]);\n    case \"statement_block\":\n      if (ast.parent.type == \"method_definition\") {\n        let doesRefSelf = false;\n        function recur(a: SyntaxNode) {\n          if (a.type == \"identifier\") {\n            if (a.text == \"self\") {\n              doesRefSelf = true;\n            }\n          }\n          a.children.forEach(recur);\n        }\n        ast.children.forEach(recur);\n        if (doesRefSelf) {\n          return s([\"{let shader_self_temp = this;\", ...children(), \"}\"]);\n        }\n      }\n      return s([\"{\", ...children(), \"}\"]);\n    case \"import_statement\":\n      let sourceString = n(\"source\");\n      let fromString = sourceString.firstNamedChild?.text;\n      if (fromString) {\n        if (!fromString.startsWith(\"/\") && !fromString.startsWith(\"@\")) {\n          fromString = \"/\" + fromString;\n        }\n      }\n      return s([\n        \"import \",\n        ...(ast.namedChildCount == 2\n          ? [\" \", c(ast.firstNamedChild!), \"  from \"]\n          : []),\n        new SourceNode(sourceString.startIndex, sourceString.endIndex, [\n          JSON.stringify(fromString),\n        ]),\n        \";\",\n      ]);\n    case \"named_imports\":\n      return s([\"{\", ...join(children(), \", \"), \"}\"]);\n    case \"import_clause\":\n      return s([c(ast.firstChild!)]);\n    case \"import_specifier\":\n      return hasName(\"alias\")\n        ? s([c(n(\"name\")!), \" as \", c(n(\"alias\")!)])\n        : c(n(\"name\")!);\n    case \"predefined_type\":\n      return s([String(ast.text)]);\n    case \"interface_declaration\":\n      return s([\"interface \", c(n(\"name\")!), c(n(\"body\")!), \"\\n\"]);\n    case \"object_method_signature_type\":\n      return s([\"{\\n\", ...children(), \"\\n}\"]);\n    case \"method_signature\":\n      let isStaticSignature = n(\"parameters\")?.firstNamedChild?.text != \"self\";\n      let accessibilityMethod =\n        ast.firstNamedChild?.type === \"accessibility_modifier_member\"\n          ? \"public\"\n          : \"private\";\n\n      if (\n        ast.parent?.type === \"object_method_signature_type\" &&\n        ast.parent?.parent?.type === \"interface_declaration\"\n      ) {\n        accessibilityMethod = \"\";\n      }\n      return s([\n        accessibilityMethod,\n        \" \",\n        ...(isStaticSignature ? [\"static \"] : []),\n        c(n(\"name\")!),\n        c(n(\"parameters\")!),\n        c(n(\"return_type\")!),\n        \";\\n\",\n      ]);\n    case \"type_annotation_arrow\":\n      return s([\": \", c(ast.firstNamedChild!)]);\n    case \"struct_declaration\":\n      let impls = ctx.implsFor.get(n(\"name\")!.text) ?? [];\n\n      let properties = n(\"body\")?.namedChildren ?? [];\n\n      properties = properties.filter((i) => {\n        let isStatic = false;\n        for (let child of i.children) {\n          if (child.type === \"static\") {\n            isStatic = true;\n          }\n        }\n\n        return !isStatic;\n      });\n\n      let implBodies = [\n        ...(ctx.implsFor.get(n(\"name\")!.text) ?? []).map(\n          (i) => i.childForFieldName(\"body\")!\n        ),\n        ...(ctx.impls.get(n(\"name\")!.text) ?? []).map(\n          (i) => i.childForFieldName(\"body\")!\n        ),\n        ...properties,\n      ];\n\n      let staticProperties = n(\"body\")?.namedChildren ?? [];\n\n      staticProperties = staticProperties.filter((i) => {\n        let isStatic = false;\n        for (let child of i.children) {\n          if (child.type === \"static\") {\n            isStatic = true;\n          }\n        }\n\n        return isStatic;\n      });\n\n      let props = properties.map((i) => ({\n        name: i.childForFieldName(\"name\")?.text ?? \"_unknown\",\n        type: i.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\",\n        renderedType: compileToString(ctx, i.childForFieldName(\"type\")!),\n        default: i.childForFieldName(\"value\")\n          ? compileToString(ctx, i.childForFieldName(\"value\")!)\n          : generateDefaultForType(\n              i.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\"\n            ),\n      }));\n\n      let cls = s([\n        \"/**@shadeup=struct*/class \",\n        c(n(\"name\")!),\n        ...(impls.length > 0\n          ? [\n              \" implements \",\n              ...join(\n                impls.map((i) => c(i.childForFieldName(\"for\")!)),\n                \",\"\n              ),\n            ]\n          : []),\n        \" {\\n\",\n        ...join(\n          staticProperties.map((i) => {\n            return s([\n              \"public static \",\n              c(i.childForFieldName(\"name\")!),\n              \": \",\n              c(i.childForFieldName(\"type\")!),\n              \" = \",\n              c(i.childForFieldName(\"value\")!),\n              \";\\n\",\n            ]);\n          }),\n          \"\"\n        ),\n        `constructor(data: {`,\n        `${props\n          .map(\n            (i) =>\n              `${i.name}?: ${\n                math_primitives.includes(i.type ?? \"\")\n                  ? \"__.\" + i.type\n                  : i.renderedType\n              },`\n          )\n          .join(\"\\n\")}`,\n        `}) {\\n`,\n        `${props\n          .map(\n            (i) => `this.${i.name} = (data.${i.name} ?? ${i.default}) as any;`\n          )\n          .join(\"\\n\")}`,\n        `\\n}\\n`,\n        ...join(\n          implBodies.map((i) => c(i)),\n          \"\\n\"\n        ),\n        \"\\n\",\n        `clone(): `,\n        c(n(\"name\")!),\n        ` {\\n`,\n        `return new `,\n        c(n(\"name\")!),\n        `({\\n`,\n        `${props\n          .map((i) => {\n            return `${i.name}: __deepClone(this.${i.name}),`;\n          })\n          .join(\"\\n\")}`,\n        `});\\n`,\n        `}\\n`,\n        \"\\n}\",\n        \"\\n\",\n      ]);\n\n      // console.log('Class', cls.print());\n      return cls;\n    case \"object_method_type\":\n      return s([...children()]);\n    case \"method_definition\":\n      let isStatic = n(\"parameters\")?.firstNamedChild?.text != \"self\";\n      return s([\n        ...(isStatic ? [\"static \"] : []),\n        c(n(\"name\")!),\n        c(n(\"parameters\")!),\n        c(n(\"body\")!),\n        \"\\n\",\n      ]);\n    case \"impl_for_clause\":\n      return s([ast.firstNamedChild!.text]);\n    case \"unary_expression\":\n      let op = ast.firstChild?.text ?? \"\";\n      if (op == \"-\") {\n        return s([\"__.negate(\", c(n(\"argument\")!), \")\"]);\n      } else if (op == \"+\") {\n        return s([\"__.positive(\", c(n(\"argument\")!), \")\"]);\n      } else if (op == \"!\") {\n        return s([\"__.not(\", c(n(\"argument\")!), \")\"]);\n      } else {\n        return s([c(n(\"argument\")!)]);\n      }\n    case \"class_body\":\n      return s([\"{\\n\", ...children(), \"\\n}\"]);\n    case \"public_field_definition\":\n      let accessibility =\n        ast.firstNamedChild?.type === \"accessibility_modifier_member\"\n          ? \"public\"\n          : \"private\";\n      return s([accessibility, \" \", c(n(\"name\")!), \": \", c(n(\"type\")!), \";\\n\"]);\n    case \"impl_declaration\":\n      return s([`/* impl ${n(\"name\")?.text} */\\n`]);\n    case \"lexical_declaration\":\n      return s([...children().map((i) => s([\"let \", i, \";\\n\"]))]);\n    case \"variable_declarator\":\n      let isRoot = ast?.parent?.parent.type === \"program\";\n\n      return s([\n        c(n(\"name\")!),\n        n(\"type\") ? s([\": \", c(n(\"type\")!)]) : \"\",\n        ...(hasName(\"value\")\n          ? [\n              \" = \",\n              ...(isRoot\n                ? [\n                    'globalVarInit(\"' + cleanName(ctx.fileName) + '\", \"',\n                    c(n(\"name\")!),\n                    '\", () => { return ',\n                    c(n(\"value\")!),\n                    \"; }, () => { return \",\n                    c(n(\"name\")!),\n                    \"; })\",\n                  ]\n                : [c(n(\"value\")!)]),\n            ]\n          : [\n              \" = \",\n              generateDefaultForType(n(\"type\").text.replace(/^:/, \"\")).trim(),\n            ]),\n      ]);\n    case \"object_type\":\n      return s([\n        \"{\",\n        ...join(\n          ast.namedChildren.map((i) => {\n            return s([c(i), \",\"]);\n          }),\n          \"\"\n        ),\n        \"}\",\n      ]);\n    case \"property_signature\":\n      return s([c(n(\"name\")!), \": \", c(n(\"type\")!)]);\n    case \"workgroup_member\":\n      let typeName = ast.childForFieldName(\"type\")?.firstNamedChild?.text ?? \"\";\n      if (typeName === \"atomic<uint>\" || typeName === \"atomic<int>\") {\n        if (hasName(\"value\")) {\n          ctx.report(ast, \"Atomic variables cannot have a default value\");\n        }\n\n        return s([\n          \"\\n// @workgroup\\n let \",\n          c(n(\"name\")!),\n          \": \",\n          c(n(\"type\")!),\n          \" = \",\n          generateDefaultForType(typeName),\n          \";\\n\",\n        ]);\n      }\n      if (hasName(\"value\")) {\n        return s([\n          \"\\n// @workgroup\\n let \",\n          c(n(\"name\")!),\n          \": \",\n          c(n(\"type\")!),\n          \" = \",\n          c(n(\"value\")),\n          \";\\n\",\n        ]);\n      } else {\n        let t = c(n(\"type\")!);\n\n        return s([\n          \"\\n// @workgroup\\n let \",\n          c(n(\"name\")!),\n          \": \",\n          t,\n          \" = \",\n\n          generateDefaultForType(typeName),\n          \";\\n\",\n        ]);\n      }\n    case \"workgroup\":\n      return s([...children()]);\n    case \"async_block\":\n      return s([\n        \"/** Runs immediately but does not block when running async code inside (e.g. downloading textures from the gpu)*/(async () => \",\n        c(n(\"body\")!),\n        \")()\",\n      ]);\n    case \"shader\":\n      let encoder = new TextEncoder();\n      let u8a = encoder.encode(n(\"body\")!.text);\n      let key = sha256(u8a)\n        .map((x) => x.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n      if (hasName(\"type_arguments\")) {\n        let isComputeShader = n(\"type_arguments\")?.namedChildCount == 3;\n        if (isComputeShader) {\n          let templateArgsRaw = join(\n            n(`type_arguments`).namedChildren.map((nc) => {\n              let innerString = c(nc).print();\n              return innerString.replace(/__\\.int\\((\\d+)\\)/g, \"$1\");\n            }),\n            \", \"\n          );\n          let templateArgs = join(\n            n(`type_arguments`).namedChildren.map((nc) => {\n              return c(nc);\n            }),\n            \", \"\n          );\n          return new SourceNode(ast.startIndex, ast.endIndex, [\n            new SourceNode(\n              ast.startIndex,\n              ast.startIndex,\n              `shader_start_shd_(`\n            ),\n            new SourceNode(\n              ast.startIndex,\n              ast.startIndex + \"shader\".length,\n              `makeShader(`\n            ),\n            `\"${key}\", /**@shadeup=shader*/(__in: ShaderInput`,\n            `, __out: {}`,\n            `) => `,\n            c(n(\"body\")!),\n            `) as any, [`,\n            ...templateArgs,\n            `]) as shader<`,\n            ...templateArgsRaw,\n            \">\",\n          ]);\n        } else {\n          let arg1 = n(\"type_arguments\")?.firstNamedChild;\n          let arg2 = n(\"type_arguments\")?.lastNamedChild;\n          return new SourceNode(ast.startIndex, ast.endIndex, [\n            new SourceNode(\n              ast.startIndex,\n              ast.startIndex,\n              `shader_start_shd_(`\n            ),\n            new SourceNode(\n              ast.startIndex,\n              ast.startIndex + \"shader\".length,\n              `makeShader(`\n            ),\n            `\"${key}\", /**@shadeup=shader*/(__in:`,\n            c(arg1),\n            ` & {vertexIndex: __.int}, __out: `,\n            c(arg2),\n            `) => `,\n            c(n(\"body\")!),\n            `))`,\n          ]);\n        }\n      } else {\n        return new SourceNode(ast.startIndex, ast.endIndex, [\n          new SourceNode(ast.startIndex, ast.startIndex, `shader_start_shd_(`),\n          new SourceNode(\n            ast.startIndex,\n            ast.startIndex + \"shader\".length,\n            `makeShader(`\n          ),\n          `\"${key}\", /**@shadeup=shader*/(__in, __out) => `,\n          c(n(\"body\")!),\n          `))`,\n        ]);\n      }\n    case \"assignment_expression\":\n      let left = n(\"left\");\n      if (left?.type === \"subscript_expression\") {\n        return s([\n          c(left.childForFieldName(\"object\")!),\n          \".__index_assign(\",\n          c(left.childForFieldName(\"index\")!),\n          \", \",\n          c(n(\"right\")!),\n          \")\",\n        ]);\n      } else if (left?.type == \"member_expression\") {\n        let prop = left.childForFieldName(\"property\")!;\n        let p = prop.text ?? \"\";\n        if (p.length > 0 && p.length < 5) {\n          // Could be a swizzle\n          let isSwizzle = true;\n\n          for (let i = 0; i < p.length; i++) {\n            let char = p[i];\n            if (\n              char !== \"x\" &&\n              char !== \"y\" &&\n              char !== \"z\" &&\n              char !== \"w\" &&\n              char !== \"r\" &&\n              char !== \"g\" &&\n              char !== \"b\" &&\n              char !== \"a\"\n            ) {\n              isSwizzle = false;\n              break;\n            }\n          }\n\n          if (isSwizzle) {\n            return s([c(n(\"left\")!)]);\n          } else {\n            return s([c(n(\"left\")!), \" = \", c(n(\"right\")!)]);\n          }\n        } else {\n          return s([c(n(\"left\")!), \" = \", c(n(\"right\")!)]);\n        }\n      } else {\n        return s([c(n(\"left\")!), \" = \", c(n(\"right\")!)]);\n      }\n    case \"sequence_expression\":\n      return s([...join(children(), \", \")]);\n    case \"subscript_expression\":\n      return s([c(n(\"object\")!), \".__index(\", c(n(\"index\")!), \")\"]);\n    case \"empty_statement\":\n      return s([\"\"]);\n    case \"true\":\n      return s([\"true\"]);\n    case \"false\":\n      return s([\"false\"]);\n    case \"null\":\n      return s([\"null\"]);\n    case \"union_type\":\n      return s([...join(children(), \" | \")]);\n    case \"intersection_type\":\n      return s([...join(children(), \" & \")]);\n    case \"ERROR\":\n      ctx.report(ast, \"Syntax error\");\n      if (ast.firstNamedChild?.type == \"identifier\") {\n        return s([c(ast.firstNamedChild), \".\"]);\n      }\n      return s([\"/* ERROR */ 0\"]);\n    default:\n      ctx.report(ast, \"Unsupported syntax\");\n      console.error(new Error(\"Bad AST \" + ast.type));\n      return s([\"/* ERROR */ 0\"]);\n  }\n}\n\nexport function compileToString(ctx: AstContext, ast: SyntaxNode): string {\n  let sn = compile(ctx, ast);\n  let ss = {\n    str: \"\",\n    indexMapping: [],\n  } as SourceString;\n\n  sn.toString(ss);\n  return ss.str;\n}\n\nfunction isInShader(ast: SyntaxNode) {\n  if (ast.type === \"shader\") {\n    return true;\n  }\n\n  if (ast.parent) {\n    return isInShader(ast.parent);\n  }\n\n  return false;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/toposort.ts",
    "content": "/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nexport default function toposort(edges) {\n\treturn toposortinternal(uniqueNodes(edges), edges);\n}\n\nfunction toposortinternal(nodes, edges) {\n\tvar cursor = nodes.length,\n\t\tsorted = new Array(cursor),\n\t\tvisited = {},\n\t\ti = cursor,\n\t\t// Better data structures make algorithm much faster.\n\t\toutgoingEdges = makeOutgoingEdges(edges),\n\t\tnodesHash = makeNodesHash(nodes);\n\n\t// check for unknown nodes\n\tedges.forEach(function (edge) {\n\t\tif (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n\t\t\tthrow new Error('Unknown node. There is an unknown node in the supplied edges.');\n\t\t}\n\t});\n\n\twhile (i--) {\n\t\tif (!visited[i]) visit(nodes[i], i, new Set());\n\t}\n\n\treturn sorted;\n\n\tfunction visit(node, i, predecessors) {\n\t\tif (predecessors.has(node)) {\n\t\t\tvar nodeRep;\n\t\t\ttry {\n\t\t\t\tnodeRep = ', node was:' + JSON.stringify(node);\n\t\t\t} catch (e) {\n\t\t\t\tnodeRep = '';\n\t\t\t}\n\t\t\tthrow new Error('Cyclic dependency' + nodeRep);\n\t\t}\n\n\t\tif (!nodesHash.has(node)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Found unknown node. Make sure to provided all involved nodes. Unknown node: ' +\n\t\t\t\t\tJSON.stringify(node)\n\t\t\t);\n\t\t}\n\n\t\tif (visited[i]) return;\n\t\tvisited[i] = true;\n\n\t\tvar outgoing = outgoingEdges.get(node) || new Set();\n\t\toutgoing = Array.from(outgoing);\n\n\t\tif ((i = outgoing.length)) {\n\t\t\tpredecessors.add(node);\n\t\t\tdo {\n\t\t\t\tvar child = outgoing[--i];\n\t\t\t\tvisit(child, nodesHash.get(child), predecessors);\n\t\t\t} while (i);\n\t\t\tpredecessors.delete(node);\n\t\t}\n\n\t\tsorted[--cursor] = node;\n\t}\n}\n\nfunction uniqueNodes(arr) {\n\tvar res = new Set();\n\tfor (var i = 0, len = arr.length; i < len; i++) {\n\t\tvar edge = arr[i];\n\t\tres.add(edge[0]);\n\t\tres.add(edge[1]);\n\t}\n\treturn Array.from(res);\n}\n\nfunction makeOutgoingEdges(arr) {\n\tvar edges = new Map();\n\tfor (var i = 0, len = arr.length; i < len; i++) {\n\t\tvar edge = arr[i];\n\t\tif (!edges.has(edge[0])) edges.set(edge[0], new Set());\n\t\tif (!edges.has(edge[1])) edges.set(edge[1], new Set());\n\t\tedges.get(edge[0]).add(edge[1]);\n\t}\n\treturn edges;\n}\n\nfunction makeNodesHash(arr) {\n\tvar res = new Map();\n\tfor (var i = 0, len = arr.length; i < len; i++) {\n\t\tres.set(arr[i], i);\n\t}\n\treturn res;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/transform.ts",
    "content": "import ts from 'typescript';\nimport { getFunctionNodeName, ShadeupEnvironment } from '../environment/ShadeupEnvironment';\nimport { makeVectors, simpleFunctions, singleFunctions } from '../std/static-math-db';\nimport { cleanName, closest } from './util';\nimport { isInRoot, isInShader, translateType } from './wgsl';\n\nconst simpleFuncMap = new Map<string, any>(simpleFunctions as any);\nconst singleFuncMap = new Map(singleFunctions as any);\nconst makeVectorsMap = new Map(makeVectors as any);\n\nfunction getTypeFallback(checker: ts.TypeChecker, t: ts.Type) {\n\tlet n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n\tif (!n && (t as any).intrinsicName) n = (t as any).intrinsicName;\n\n\tif (typeof n !== 'string') {\n\t\tlet props = t.getApparentProperties();\n\t\tif (props.length > 0) {\n\t\t\tfor (let p of props) {\n\t\t\t\tif (p.escapedName.toString() === '_opaque_int') return 'int';\n\t\t\t\tif (p.escapedName.toString() === '_opaque_float') return 'float';\n\t\t\t\tif (p.escapedName.toString() === '_opaque_uint') return 'uint';\n\t\t\t}\n\t\t}\n\n\t\tlet btype = t.getBaseTypes();\n\t\tif (btype && btype.length > 0) {\n\t\t\tfor (let b of btype) {\n\t\t\t\tlet tn = getTypeFallback(checker, b);\n\t\t\t\tif (tn) return tn;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t} else {\n\t\treturn n;\n\t}\n}\nfunction isNumericType(checker: ts.TypeChecker, type: ts.Type) {\n\tlet typeFall = getTypeFallback(checker, type);\n\treturn (\n\t\ttype.flags & (ts.TypeFlags.NumberLike | ts.TypeFlags.BigIntLike | ts.TypeFlags.NumberLiteral) ||\n\t\ttypeFall == 'int' ||\n\t\ttypeFall == 'float' ||\n\t\ttypeFall == 'uint'\n\t);\n}\n\nfunction getVectorLen(checker: ts.TypeChecker, type: ts.Type) {\n\tlet typeFall = getTypeFallback(checker, type);\n\tif (\n\t\ttype.flags & (ts.TypeFlags.NumberLike | ts.TypeFlags.BigIntLike | ts.TypeFlags.NumberLiteral) ||\n\t\ttypeFall == 'int' ||\n\t\ttypeFall == 'float' ||\n\t\ttypeFall == 'uint'\n\t) {\n\t\treturn 1;\n\t} else if (typeFall == 'int2' || typeFall == 'float2' || typeFall == 'uint2') {\n\t\treturn 2;\n\t} else if (typeFall == 'int3' || typeFall == 'float3' || typeFall == 'uint3') {\n\t\treturn 3;\n\t} else if (typeFall == 'int4' || typeFall == 'float4' || typeFall == 'uint4') {\n\t\treturn 4;\n\t}\n\treturn 0;\n}\n\nfunction isArrayType(type: ts.Type, checker: ts.TypeChecker): boolean {\n\treturn (checker as any).isTupleType(type) || (checker as any).isArrayType(type);\n}\n\n/**\n * Find and force all integer math to result in integers (i.e. 1 / 2 = 0)\n */\nexport const updateIntegerMixing: (\n\tgetChecker: () => [ts.TypeChecker, ShadeupEnvironment, Map<string, string[]>]\n) => ts.TransformerFactory<ts.SourceFile> = (getChecker) => (context) => {\n\tlet [checker, env, loads] = getChecker();\n\tloads.clear();\n\tenv.libraries.clear();\n\n\treturn (rootNode) => {\n\t\tconst { factory } = context;\n\n\t\tfunction visit(node) {\n\t\t\tif (!node) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tif (ts.isCallExpression(node)) {\n\t\t\t\tlet sig = checker.getResolvedSignature(node);\n\t\t\t\tlet returnType = checker.getReturnTypeOfSignature(sig);\n\t\t\t\tlet symbol = returnType.aliasSymbol || returnType.getSymbol();\n\t\t\t\tlet expressionText = node.expression.getText();\n\n\t\t\t\tlet ops = {\n\t\t\t\t\tgte: ts.SyntaxKind.GreaterThanEqualsToken,\n\t\t\t\t\tlte: ts.SyntaxKind.LessThanEqualsToken,\n\t\t\t\t\tgt: ts.SyntaxKind.GreaterThanToken,\n\t\t\t\t\tlt: ts.SyntaxKind.LessThanToken,\n\t\t\t\t\teq: ts.SyntaxKind.EqualsEqualsToken,\n\t\t\t\t\tneq: ts.SyntaxKind.ExclamationEqualsToken,\n\t\t\t\t\tand: ts.SyntaxKind.AmpersandAmpersandToken,\n\t\t\t\t\tor: ts.SyntaxKind.BarBarToken\n\t\t\t\t};\n\n\t\t\t\tif (expressionText == 'physics.engine2d') {\n\t\t\t\t\tenv.libraries.add('rapier2d');\n\t\t\t\t}\n\n\t\t\t\tif (expressionText == 'physics.engine3d') {\n\t\t\t\t\tenv.libraries.add('rapier3d');\n\t\t\t\t}\n\n\t\t\t\tif (expressionText == 'load') {\n\t\t\t\t\tif (!loads.has(rootNode.fileName)) {\n\t\t\t\t\t\tloads.set(rootNode.fileName, []);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.arguments.length > 0 && ts.isStringLiteral(node.arguments[0])) {\n\t\t\t\t\t\tlet realId = env.assetMappings.get(node.arguments[0].text);\n\t\t\t\t\t\tloads.get(rootNode.fileName).push(node.arguments[0].text);\n\n\t\t\t\t\t\tif (realId)\n\t\t\t\t\t\t\treturn factory.createCallExpression(factory.createIdentifier('load'), undefined, [\n\t\t\t\t\t\t\t\tfactory.createStringLiteral(realId[0])\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\n\t\t\t\tif (expressionText.endsWith('__index')) {\n\t\t\t\t\tlet innerExpr = node.expression;\n\t\t\t\t\tif (ts.isPropertyAccessExpression(innerExpr)) {\n\t\t\t\t\t\tlet left = innerExpr.expression;\n\t\t\t\t\t\tlet leftType = checker.getTypeAtLocation(left);\n\t\t\t\t\t\tlet leftStr = checker.typeToString(leftType);\n\t\t\t\t\t\tif (isArrayType(leftType, checker)) {\n\t\t\t\t\t\t\treturn factory.createElementAccessExpression(visit(left), visit(node.arguments[0]));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (leftStr == 'buffer<float>') {\n\t\t\t\t\t\t\treturn factory.createElementAccessExpression(\n\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(visit(left), 'floatArray'),\n\t\t\t\t\t\t\t\tvisit(node.arguments[0])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (leftStr == 'buffer<int>') {\n\t\t\t\t\t\t\treturn factory.createElementAccessExpression(\n\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(visit(left), 'intArray'),\n\t\t\t\t\t\t\t\tvisit(node.arguments[0])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (leftStr == 'buffer<uint>') {\n\t\t\t\t\t\t\treturn factory.createElementAccessExpression(\n\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(visit(left), 'uintArray'),\n\t\t\t\t\t\t\t\tvisit(node.arguments[0])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (!leftType.getProperty('__index')) {\n\t\t\t\t\t\t\tconsole.log('Optim no __index', leftStr, leftType);\n\t\t\t\t\t\t\treturn factory.createElementAccessExpression(visit(left), visit(node.arguments[0]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (expressionText.startsWith('__.') && ops[expressionText.replace('__.', '')]) {\n\t\t\t\t\tif (node.arguments.length != 2) {\n\t\t\t\t\t\treturn visit(node.arguments[0]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet left = node.arguments[0];\n\t\t\t\t\t\tlet right = node.arguments[1];\n\t\t\t\t\t\tlet leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n\t\t\t\t\t\tlet rightLen = getVectorLen(checker, checker.getTypeAtLocation(right));\n\t\t\t\t\t\tif (leftLen == 1 && rightLen == 1) {\n\t\t\t\t\t\t\treturn factory.createBinaryExpression(\n\t\t\t\t\t\t\t\tvisit(node.arguments[0]),\n\t\t\t\t\t\t\t\tops[expressionText.replace('__.', '')],\n\t\t\t\t\t\t\t\tvisit(node.arguments[1])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (simpleFuncMap.has(expressionText.replace('__.', ''))) {\n\t\t\t\t\tlet left = node.arguments[0];\n\t\t\t\t\tlet right = node.arguments[1];\n\t\t\t\t\tlet leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n\t\t\t\t\tlet rightLen = getVectorLen(checker, checker.getTypeAtLocation(right));\n\n\t\t\t\t\tif (leftLen == 1 && rightLen == 1) {\n\t\t\t\t\t\tlet funcDef = simpleFuncMap.get(expressionText.replace('__.', ''));\n\t\t\t\t\t\tif (typeof funcDef == 'string') {\n\t\t\t\t\t\t\tlet tokenKinds = {\n\t\t\t\t\t\t\t\t'+': ts.SyntaxKind.PlusToken,\n\t\t\t\t\t\t\t\t'-': ts.SyntaxKind.MinusToken,\n\t\t\t\t\t\t\t\t'/': ts.SyntaxKind.SlashToken,\n\t\t\t\t\t\t\t\t'*': ts.SyntaxKind.AsteriskToken,\n\t\t\t\t\t\t\t\t'%': ts.SyntaxKind.PercentToken,\n\t\t\t\t\t\t\t\t'&': ts.SyntaxKind.AmpersandToken,\n\t\t\t\t\t\t\t\t'|': ts.SyntaxKind.BarToken,\n\t\t\t\t\t\t\t\t'^': ts.SyntaxKind.CaretToken,\n\t\t\t\t\t\t\t\t'<<': ts.SyntaxKind.LessThanLessThanToken,\n\t\t\t\t\t\t\t\t'>>': ts.SyntaxKind.GreaterThanGreaterThanToken\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn factory.createBinaryExpression(\n\t\t\t\t\t\t\t\tvisit(left),\n\t\t\t\t\t\t\t\tfactory.createToken(tokenKinds[funcDef]),\n\t\t\t\t\t\t\t\tvisit(right)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftLen > 0 && rightLen > 0) {\n\t\t\t\t\t\tlet leftHoist = factory.createTempVariable(context.hoistVariableDeclaration, true);\n\t\t\t\t\t\tlet rightHoist = factory.createTempVariable(context.hoistVariableDeclaration, true);\n\n\t\t\t\t\t\tlet leftAss = factory.createAssignment(leftHoist, visit(left));\n\t\t\t\t\t\tlet rightAss = factory.createAssignment(rightHoist, visit(right));\n\n\t\t\t\t\t\tlet tokenKinds = {\n\t\t\t\t\t\t\tmul: ts.SyntaxKind.AsteriskToken,\n\t\t\t\t\t\t\tdiv: ts.SyntaxKind.SlashToken,\n\t\t\t\t\t\t\tadd: ts.SyntaxKind.PlusToken,\n\t\t\t\t\t\t\tsub: ts.SyntaxKind.MinusToken,\n\t\t\t\t\t\t\tmod: ts.SyntaxKind.PercentToken,\n\t\t\t\t\t\t\tand: ts.SyntaxKind.AmpersandToken,\n\t\t\t\t\t\t\tor: ts.SyntaxKind.BarToken,\n\t\t\t\t\t\t\txor: ts.SyntaxKind.CaretToken,\n\t\t\t\t\t\t\tlshift: ts.SyntaxKind.LessThanLessThanToken,\n\t\t\t\t\t\t\trshift: ts.SyntaxKind.GreaterThanGreaterThanToken\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet innerElems = [];\n\t\t\t\t\t\tif (leftLen == rightLen) {\n\t\t\t\t\t\t\tfor (let i = 0; i < leftLen; i++) {\n\t\t\t\t\t\t\t\tinnerElems.push(\n\t\t\t\t\t\t\t\t\tfactory.createBinaryExpression(\n\t\t\t\t\t\t\t\t\t\tfactory.createElementAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\tleftHoist,\n\t\t\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral(i)\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tfactory.createToken(tokenKinds[expressionText.replace('__.', '')]),\n\t\t\t\t\t\t\t\t\t\tfactory.createElementAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\trightHoist,\n\t\t\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral(i)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (leftLen == 1) {\n\t\t\t\t\t\t\tfor (let i = 0; i < rightLen; i++) {\n\t\t\t\t\t\t\t\tinnerElems.push(\n\t\t\t\t\t\t\t\t\tfactory.createBinaryExpression(\n\t\t\t\t\t\t\t\t\t\tleftHoist,\n\t\t\t\t\t\t\t\t\t\tfactory.createToken(tokenKinds[expressionText.replace('__.', '')]),\n\t\t\t\t\t\t\t\t\t\tfactory.createElementAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\trightHoist,\n\t\t\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral(i)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (rightLen == 1) {\n\t\t\t\t\t\t\tfor (let i = 0; i < leftLen; i++) {\n\t\t\t\t\t\t\t\tinnerElems.push(\n\t\t\t\t\t\t\t\t\tfactory.createBinaryExpression(\n\t\t\t\t\t\t\t\t\t\tfactory.createElementAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\tleftHoist,\n\t\t\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral(i)\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tfactory.createToken(tokenKinds[expressionText.replace('__.', '')]),\n\t\t\t\t\t\t\t\t\t\trightHoist\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet expr = factory.createArrayLiteralExpression(innerElems);\n\t\t\t\t\t\treturn factory.createCommaListExpression([leftAss, rightAss, expr]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (singleFuncMap.has(expressionText.replace('__.', ''))) {\n\t\t\t\t\tlet left = node.arguments[0];\n\t\t\t\t\tlet leftLen = getVectorLen(checker, checker.getTypeAtLocation(left));\n\t\t\t\t\tlet funcDef = singleFuncMap.get(expressionText.replace('__.', ''));\n\n\t\t\t\t\tif (leftLen == 1) {\n\t\t\t\t\t\tif (typeof funcDef == 'string') {\n\t\t\t\t\t\t\treturn factory.createCallExpression(\n\t\t\t\t\t\t\t\tfactory.createIdentifier(funcDef),\n\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t[visit(left)]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftLen > 0) {\n\t\t\t\t\t\tif (typeof funcDef == 'string') {\n\t\t\t\t\t\t\tlet leftHoist = factory.createTempVariable(context.hoistVariableDeclaration, true);\n\t\t\t\t\t\t\tlet leftAss = factory.createAssignment(leftHoist, visit(left));\n\t\t\t\t\t\t\tlet innerElems = [];\n\n\t\t\t\t\t\t\tfor (let i = 0; i < leftLen; i++) {\n\t\t\t\t\t\t\t\tinnerElems.push(\n\t\t\t\t\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier(funcDef),\n\t\t\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\tfactory.createElementAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\t\tleftHoist,\n\t\t\t\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral(i)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet expr = factory.createArrayLiteralExpression(innerElems);\n\t\t\t\t\t\t\treturn factory.createCommaListExpression([leftAss, expr]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn factory.createParenthesizedExpression(\n\t\t\t\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(\n\t\t\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier('__'),\n\t\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier('FM')\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier(expressionText.replace('__.', '') + `_${leftLen}`)\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t\t[visit(left)]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (expressionText == '__.swizzle' && node.arguments.length == 2) {\n\t\t\t\t\tlet index = {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\tz: 2,\n\t\t\t\t\t\tw: 3,\n\t\t\t\t\t\tr: 0,\n\t\t\t\t\t\tg: 1,\n\t\t\t\t\t\tb: 2,\n\t\t\t\t\t\ta: 3\n\t\t\t\t\t};\n\n\t\t\t\t\tlet vecLen = getVectorLen(checker, checker.getTypeAtLocation(node.arguments[0]));\n\t\t\t\t\tif (vecLen != 0) {\n\t\t\t\t\t\tlet swizzleLiteral = node.arguments[1];\n\t\t\t\t\t\tlet swiz = '';\n\t\t\t\t\t\tif (ts.isStringLiteral(swizzleLiteral)) {\n\t\t\t\t\t\t\tswiz = swizzleLiteral.text;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (swiz.length == 1) {\n\t\t\t\t\t\t\treturn factory.createElementAccessExpression(\n\t\t\t\t\t\t\t\tvisit(node.arguments[0]),\n\t\t\t\t\t\t\t\tfactory.createNumericLiteral(index[swiz])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet temp = factory.createTempVariable(context.hoistVariableDeclaration, true);\n\t\t\t\t\t\tlet tempAss = factory.createAssignment(temp, visit(node.arguments[0]));\n\t\t\t\t\t\tlet elems = [];\n\t\t\t\t\t\tfor (let i = 0; i < swiz.length; i++) {\n\t\t\t\t\t\t\tif (vecLen == 1) {\n\t\t\t\t\t\t\t\telems.push(temp);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telems.push(\n\t\t\t\t\t\t\t\t\tfactory.createElementAccessExpression(\n\t\t\t\t\t\t\t\t\t\ttemp,\n\t\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral(index[swiz[i]])\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn factory.createCommaListExpression([\n\t\t\t\t\t\t\ttempAss,\n\t\t\t\t\t\t\tfactory.createArrayLiteralExpression(elems)\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\texpressionText.startsWith('__.') &&\n\t\t\t\t\tmakeVectorsMap.has(expressionText.replace('__.', '').replace(/\\d/g, ''))\n\t\t\t\t) {\n\t\t\t\t\tlet arg_lengths = node.arguments.map((x) =>\n\t\t\t\t\t\tgetVectorLen(checker, checker.getTypeAtLocation(x))\n\t\t\t\t\t);\n\t\t\t\t\tlet matches = expressionText.match(/\\d/g);\n\t\t\t\t\tif (matches) {\n\t\t\t\t\t\tlet targetLen = matches[0];\n\t\t\t\t\t\tlet targetName = expressionText.replace('__.', '').replace(/\\d/g, '');\n\t\t\t\t\t\treturn factory.createCallExpression(\n\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(\n\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(\n\t\t\t\t\t\t\t\t\tfactory.createIdentifier('__'),\n\t\t\t\t\t\t\t\t\tfactory.createIdentifier('FM')\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tfactory.createIdentifier(targetName + `_${targetLen}_${arg_lengths.join('_')}`)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\tnode.arguments.map((x) => ts.visitEachChild(x, visit, context))\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (expressionText == '__.float') {\n\t\t\t\t\t\t\treturn ts.visitEachChild(node.arguments[0], visit, context);\n\t\t\t\t\t\t} else if (expressionText == '__.int') {\n\t\t\t\t\t\t\treturn factory.createParenthesizedExpression(\n\t\t\t\t\t\t\t\tfactory.createBinaryExpression(\n\t\t\t\t\t\t\t\t\tts.visitEachChild(node.arguments[0], visit, context),\n\t\t\t\t\t\t\t\t\tfactory.createToken(ts.SyntaxKind.BarToken),\n\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral('0')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (expressionText == '__.uint') {\n\t\t\t\t\t\t\treturn factory.createParenthesizedExpression(\n\t\t\t\t\t\t\t\tfactory.createBinaryExpression(\n\t\t\t\t\t\t\t\t\tts.visitEachChild(node.arguments[0], visit, context),\n\t\t\t\t\t\t\t\t\tfactory.createToken(ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken),\n\t\t\t\t\t\t\t\t\tfactory.createNumericLiteral('0')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (symbol && symbol.name == 'int') {\n\t\t\t\t\treturn factory.createParenthesizedExpression(\n\t\t\t\t\t\tfactory.createBinaryExpression(\n\t\t\t\t\t\t\tts.visitEachChild(node, visit, context),\n\t\t\t\t\t\t\tfactory.createToken(ts.SyntaxKind.BarToken),\n\t\t\t\t\t\t\tfactory.createNumericLiteral('0')\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\tsymbol &&\n\t\t\t\t\t(symbol.name == 'int2' || symbol.name == 'int3' || symbol.name == 'int4')\n\t\t\t\t) {\n\t\t\t\t\treturn factory.createCallExpression(\n\t\t\t\t\t\tfactory.createPropertyAccessExpression(\n\t\t\t\t\t\t\tfactory.createIdentifier('__'),\n\t\t\t\t\t\t\tfactory.createIdentifier('intifyVector')\n\t\t\t\t\t\t),\n\t\t\t\t\t\t[],\n\t\t\t\t\t\t[ts.visitEachChild(node, visit, context)]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t}\n\n\t\trootNode = ts.visitNode(rootNode, visit);\n\n\t\treturn rootNode;\n\t};\n};\n\n/**\n * Find and force all integer math to result in integers (i.e. 1 / 2 = 0)\n */\nexport const updateClassStructure: (\n\tgetChecker: () => ts.TypeChecker\n) => ts.TransformerFactory<ts.SourceFile> = (getChecker) => (context) => {\n\tlet checker = getChecker();\n\treturn (rootNode) => {\n\t\tconst { factory } = context;\n\n\t\tfunction visit(node) {\n\t\t\tif (ts.isClassDeclaration(node)) {\n\t\t\t\treturn [\n\t\t\t\t\tfactory.updateClassDeclaration(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tnode.modifiers,\n\t\t\t\t\t\tnode.name,\n\t\t\t\t\t\tnode.typeParameters,\n\t\t\t\t\t\tnode.heritageClauses,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t...node.members.map((m) => ts.visitEachChild(m, visit, context)),\n\t\t\t\t\t\t\tfactory.createMethodDeclaration(\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tfactory.createIdentifier('_getStructure'),\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tfactory.createBlock(\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\tfactory.createReturnStatement(\n\t\t\t\t\t\t\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier('JSON'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t'parse'\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\tfactory.createStringLiteral(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttranslateType(checker, checker.getTypeAtLocation(node), true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t),\n\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\tfactory.createIdentifier('__shadeup_register_struct'),\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(factory.createIdentifier('JSON'), 'parse'),\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tfactory.createStringLiteral(\n\t\t\t\t\t\t\t\t\t\tJSON.stringify(translateType(checker, checker.getTypeAtLocation(node), true))\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tfactory.createIdentifier(node.name.text)\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t];\n\t\t\t} else if (ts.isCallExpression(node)) {\n\t\t\t\tlet symbol = checker.getSymbolAtLocation(node.expression);\n\t\t\t\tif (symbol && symbol.name == 'buffer') {\n\t\t\t\t\tlet isInScope = false;\n\t\t\t\t\tlet sym = checker.getTypeAtLocation(node.typeArguments[0]).getSymbol();\n\t\t\t\t\tif (sym) {\n\t\t\t\t\t\tlet syms = checker.getSymbolsInScope(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tts.SymbolFlags.Alias | ts.SymbolFlags.TypeAlias | ts.SymbolFlags.Type\n\t\t\t\t\t\t);\n\t\t\t\t\t\tfor (let s of syms) {\n\t\t\t\t\t\t\tif (s == sym) {\n\t\t\t\t\t\t\t\tisInScope = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn factory.updateCallExpression(node, node.expression, node.typeArguments, [\n\t\t\t\t\t\t...node.arguments,\n\t\t\t\t\t\tfactory.createObjectLiteralExpression([\n\t\t\t\t\t\t\tfactory.createSpreadAssignment(\n\t\t\t\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\t\t\t\tfactory.createPropertyAccessExpression(factory.createIdentifier('JSON'), 'parse'),\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\tfactory.createStringLiteral(\n\t\t\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\t\t\ttranslateType(\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecker,\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecker.getTypeAtLocation(node.typeArguments[0]),\n\t\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t...(isInScope\n\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\tfactory.createPropertyAssignment(\n\t\t\t\t\t\t\t\t\t\t\t'__type',\n\t\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier(\n\t\t\t\t\t\t\t\t\t\t\t\tchecker.getTypeAtLocation(node.typeArguments[0]).getSymbol().getName()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t  ]\n\t\t\t\t\t\t\t\t: [])\n\t\t\t\t\t\t])\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t}\n\n\t\treturn ts.visitNode(rootNode, visit);\n\t};\n};\n\n/**\n * Adds async and await to auto generated functions like sleep and their callers\n */\nexport const updateAsyncCalls: (\n\tgetChecker: () => [ts.TypeChecker, ShadeupEnvironment]\n) => ts.TransformerFactory<ts.SourceFile> = (getChecker) => (context) => {\n\tlet [checker, env] = getChecker();\n\n\treturn (rootNode) => {\n\t\tconst { factory } = context;\n\n\t\tfunction visit(node) {\n\t\t\tif (ts.isCallExpression(node)) {\n\t\t\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t\t\t}\n\t\t\t\tif (exprSmybol) {\n\t\t\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\t\t\t\t\tif (\n\t\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet graphNodeName = getFunctionNodeName(funcDeclar);\n\n\t\t\t\t\t\tlet graphNode = env.tagGraph.getNode(graphNodeName);\n\t\t\t\t\t\tif (graphNode) {\n\t\t\t\t\t\t\tif (!isInShader(node) && !isInRoot(node)) {\n\t\t\t\t\t\t\t\tif (graphNode.tags.includes('async')) {\n\t\t\t\t\t\t\t\t\treturn factory.createAwaitExpression(ts.visitEachChild(node, visit, context));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// // console.log(returnType.symbol?.name);\n\t\t\t\t// try {\n\t\t\t\t// \tif (node.expression.getText().includes('lake')) {\n\t\t\t\t// \t\tconsole.log('Found lake');\n\t\t\t\t// \t\tlet returnType = checker.getReturnTypeOfSignature(checker.getResolvedSignature(node));\n\t\t\t\t// \t\tif (returnType.aliasSymbol) {\n\t\t\t\t// \t\t\tlet alias = returnType.aliasSymbol;\n\t\t\t\t// \t\t\tif (alias.name == 'Promise') {\n\t\t\t\t// \t\t\t\tisPromise = true;\n\t\t\t\t// \t\t\t}\n\t\t\t\t// \t\t} else {\n\t\t\t\t// \t\t\tlet alias = returnType.getSymbol();\n\t\t\t\t// \t\t\tif (alias.name == 'Promise') {\n\t\t\t\t// \t\t\t\tisPromise = true;\n\t\t\t\t// \t\t\t}\n\t\t\t\t// \t\t}\n\t\t\t\t// \t}\n\t\t\t\t// } catch (e) {}\n\n\t\t\t\tif (\n\t\t\t\t\tnode.expression &&\n\t\t\t\t\tts.isIdentifier(node.expression) &&\n\t\t\t\t\tnode.expression.text.startsWith('shader_start_shd_')\n\t\t\t\t) {\n\t\t\t\t\tlet inner = node.arguments[0];\n\t\t\t\t\tif (ts.isAsExpression(inner)) {\n\t\t\t\t\t\tinner = inner.expression;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ts.isCallExpression(inner) && inner.arguments[0]) {\n\t\t\t\t\t\tlet shaderKey = inner.arguments[0];\n\t\t\t\t\t\tif (ts.isStringLiteral(shaderKey)) {\n\t\t\t\t\t\t\tlet key = shaderKey.text;\n\t\t\t\t\t\t\tlet file = env.files.find((x) => x.path == rootNode.fileName);\n\t\t\t\t\t\t\tlet shader = file.shaders.find((x) => x.glsl.key == 'shd_' + key);\n\t\t\t\t\t\t\tif (shader) {\n\t\t\t\t\t\t\t\tlet params: [string, ts.Expression][] = [];\n\n\t\t\t\t\t\t\t\tlet paramsTyped: [string, ts.Expression][] = [];\n\t\t\t\t\t\t\t\tlet serializeObject = (obj: any[] | Object | string | number | boolean) => {\n\t\t\t\t\t\t\t\t\tif (typeof obj == 'number') {\n\t\t\t\t\t\t\t\t\t\treturn factory.createNumericLiteral(obj.toString());\n\t\t\t\t\t\t\t\t\t} else if (typeof obj == 'string') {\n\t\t\t\t\t\t\t\t\t\treturn factory.createStringLiteral(obj);\n\t\t\t\t\t\t\t\t\t} else if (Array.isArray(obj)) {\n\t\t\t\t\t\t\t\t\t\treturn factory.createArrayLiteralExpression(obj.map(serializeObject));\n\t\t\t\t\t\t\t\t\t} else if (typeof obj == 'object') {\n\t\t\t\t\t\t\t\t\t\tlet props = [];\n\t\t\t\t\t\t\t\t\t\tfor (let prop of Object.keys(obj)) {\n\t\t\t\t\t\t\t\t\t\t\tprops.push(\n\t\t\t\t\t\t\t\t\t\t\t\tfactory.createPropertyAssignment(prop, serializeObject(obj[prop]))\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn factory.createObjectLiteralExpression(props);\n\t\t\t\t\t\t\t\t\t} else if (typeof obj == 'boolean') {\n\t\t\t\t\t\t\t\t\t\treturn obj ? factory.createTrue() : factory.createFalse();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tthrow new Error('Unknown type');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tfor (let param of Object.keys(shader.glsl.locals)) {\n\t\t\t\t\t\t\t\t\tlet u = shader.glsl.locals[param];\n\t\t\t\t\t\t\t\t\tlet symbols = checker.getSymbolsInScope(node, ts.SymbolFlags.Variable);\n\t\t\t\t\t\t\t\t\tlet symbol = symbols.find((x) => x.name == param);\n\n\t\t\t\t\t\t\t\t\t// We have to do this because the symbol might be renamed and it's not obvious how to detect that at our level, so we use a ident node inside the closure\n\t\t\t\t\t\t\t\t\tlet findInside = (node: ts.Node): ts.Node | undefined => {\n\t\t\t\t\t\t\t\t\t\tif (ts.isIdentifier(node) && checker.getSymbolAtLocation(node) == symbol) {\n\t\t\t\t\t\t\t\t\t\t\treturn node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn ts.forEachChild(node, findInside);\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tlet found = findInside(inner.arguments[1]);\n\n\t\t\t\t\t\t\t\t\tif (found) {\n\t\t\t\t\t\t\t\t\t\tparams.push([`_ext_uniform_local_${param}`, found as ts.Identifier]);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tparams.push([`_ext_uniform_local_${param}`, factory.createIdentifier(param)]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// paramsTyped.push([`_ext_uniform_local_${param}`, serializeObject(u.structure)]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfor (let param of Object.keys(shader.glsl.globals)) {\n\t\t\t\t\t\t\t\t\tlet u = shader.glsl.globals[param];\n\n\t\t\t\t\t\t\t\t\tparams.push([\n\t\t\t\t\t\t\t\t\t\t`_ext_uniform_global_${param}`,\n\t\t\t\t\t\t\t\t\t\tfactory.createCallExpression(\n\t\t\t\t\t\t\t\t\t\t\tfactory.createIdentifier('globalVarGet'),\n\t\t\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\tfactory.createStringLiteral(cleanName(u.fileName)),\n\t\t\t\t\t\t\t\t\t\t\t\tfactory.createStringLiteral(param)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\t// paramsTyped.push([`_ext_uniform_global_${param}`, serializeObject(u.structure)]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// return factory.createCallExpression(\n\t\t\t\t\t\t\t\t// \tfactory.createIdentifier('__shadeup_gen_shader'),\n\t\t\t\t\t\t\t\t// \t[],\n\t\t\t\t\t\t\t\t// \t[\n\t\t\t\t\t\t\t\t// \t\tfactory.createStringLiteral(shader.glsl.key),\n\t\t\t\t\t\t\t\t// \t\tfactory.createObjectLiteralExpression([\n\t\t\t\t\t\t\t\t// \t\t\tfactory.createPropertyAssignment(\n\t\t\t\t\t\t\t\t// \t\t\t\t'webgl',\n\t\t\t\t\t\t\t\t// \t\t\t\tfactory.createObjectLiteralExpression(\n\t\t\t\t\t\t\t\t// \t\t\t\t\tparamsTyped.map(([name, value]) =>\n\t\t\t\t\t\t\t\t// \t\t\t\t\t\tfactory.createPropertyAssignment(name, value)\n\t\t\t\t\t\t\t\t// \t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t// \t\t\t\t),\n\n\t\t\t\t\t\t\t\t// \t\t\t),\n\t\t\t\t\t\t\t\t// \t\t\tfactory.createPropertyAssignment(\n\t\t\t\t\t\t\t\t// \t\t\t\t'webgpu',\n\t\t\t\t\t\t\t\t// \t\t\t\tserializeObject({\n\t\t\t\t\t\t\t\t// \t\t\t\t\tlocals: shader.wgsl.locals, globals: shader.wgsl.globals\n\t\t\t\t\t\t\t\t// \t\t\t\t})\n\t\t\t\t\t\t\t\t// \t\t\t)\n\t\t\t\t\t\t\t\t// \t\t]),\n\t\t\t\t\t\t\t\t// \t\tfactory.createObjectLiteralExpression([\n\t\t\t\t\t\t\t\t// \t\t\tfactory.createPropertyAssignment(\n\t\t\t\t\t\t\t\t// \t\t\t\t'webgl',\n\t\t\t\t\t\t\t\t// \t\t\t\tfactory.createObjectLiteralExpression(\n\t\t\t\t\t\t\t\t// \t\t\t\t\tparamsTyped.map(([name, value]) =>\n\t\t\t\t\t\t\t\t// \t\t\t\t\t\tfactory.createPropertyAssignment(name, value)\n\t\t\t\t\t\t\t\t// \t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t// \t\t\t\t),\n\n\t\t\t\t\t\t\t\t// \t\t\t)\n\t\t\t\t\t\t\t\t// \t\t]),\n\n\t\t\t\t\t\t\t\t// \t]\n\t\t\t\t\t\t\t\t// );\n\t\t\t\t\t\t\t\tlet innerArg = inner.arguments[1];\n\t\t\t\t\t\t\t\tif (ts.isAsExpression(innerArg)) {\n\t\t\t\t\t\t\t\t\tinnerArg = innerArg.expression;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (ts.isParenthesizedExpression(innerArg)) {\n\t\t\t\t\t\t\t\t\tinnerArg = innerArg.expression;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!ts.isArrowFunction(innerArg)) {\n\t\t\t\t\t\t\t\t\tthrow new Error('Expected arrow function');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet arrow = innerArg;\n\t\t\t\t\t\t\t\tlet mods = ts.getModifiers(arrow) || [];\n\n\t\t\t\t\t\t\t\treturn factory.createCallExpression(\n\t\t\t\t\t\t\t\t\tfactory.createIdentifier('__shadeup_make_shader_inst'),\n\t\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t...[\n\t\t\t\t\t\t\t\t\t\t\tfactory.createStringLiteral(shader.glsl.key),\n\t\t\t\t\t\t\t\t\t\t\tfactory.createObjectLiteralExpression(\n\t\t\t\t\t\t\t\t\t\t\t\tparams.map(([name, value]) => factory.createPropertyAssignment(name, value))\n\t\t\t\t\t\t\t\t\t\t\t),\n\n\t\t\t\t\t\t\t\t\t\t\tfactory.updateArrowFunction(\n\t\t\t\t\t\t\t\t\t\t\t\tarrow,\n\t\t\t\t\t\t\t\t\t\t\t\t[...mods, factory.createModifier(ts.SyntaxKind.AsyncKeyword)],\n\t\t\t\t\t\t\t\t\t\t\t\tarrow.typeParameters,\n\t\t\t\t\t\t\t\t\t\t\t\tarrow.parameters,\n\t\t\t\t\t\t\t\t\t\t\t\tarrow.type,\n\t\t\t\t\t\t\t\t\t\t\t\tarrow.equalsGreaterThanToken,\n\t\t\t\t\t\t\t\t\t\t\t\tarrow.body\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t...(inner.arguments.length == 3 ? [inner.arguments[2]] : [])\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ts.isFunctionDeclaration(node)) {\n\t\t\t\tlet graphNodeName = getFunctionNodeName(node, rootNode);\n\n\t\t\t\tlet graphNode = env.tagGraph.getNode(graphNodeName);\n\n\t\t\t\tif (graphNode) {\n\t\t\t\t\tif (graphNode.tags.includes('async')) {\n\t\t\t\t\t\tlet mods = ts.getModifiers(node) || [];\n\t\t\t\t\t\treturn factory.updateFunctionDeclaration(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t[...mods, factory.createModifier(ts.SyntaxKind.AsyncKeyword)],\n\t\t\t\t\t\t\tnode.asteriskToken,\n\t\t\t\t\t\t\tnode.name,\n\t\t\t\t\t\t\tnode.typeParameters,\n\t\t\t\t\t\t\tnode.parameters,\n\t\t\t\t\t\t\tnode.type,\n\t\t\t\t\t\t\tts.visitEachChild(node.body, visit, context)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ts.isClassDeclaration(node)) {\n\t\t\t\tts.forEachChild(node, (n) => {\n\t\t\t\t\tif (ts.isMethodDeclaration(n)) {\n\t\t\t\t\t\tlet graphNodeName = getFunctionNodeName(n, rootNode);\n\n\t\t\t\t\t\tlet graphNode = env.tagGraph.getNode(graphNodeName);\n\n\t\t\t\t\t\tif (graphNode) {\n\t\t\t\t\t\t\tif (graphNode.tags.includes('async')) {\n\t\t\t\t\t\t\t\tlet mods = ts.getModifiers(node) || [];\n\t\t\t\t\t\t\t\treturn factory.updateMethodDeclaration(\n\t\t\t\t\t\t\t\t\tn,\n\t\t\t\t\t\t\t\t\t[...mods, factory.createModifier(ts.SyntaxKind.AsyncKeyword)],\n\t\t\t\t\t\t\t\t\tn.asteriskToken,\n\t\t\t\t\t\t\t\t\tn.name,\n\t\t\t\t\t\t\t\t\tn.questionToken,\n\t\t\t\t\t\t\t\t\tn.typeParameters,\n\t\t\t\t\t\t\t\t\tn.parameters,\n\t\t\t\t\t\t\t\t\tn.type,\n\t\t\t\t\t\t\t\t\tts.visitEachChild(n.body, visit, context)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t}\n\n\t\treturn ts.visitNode(rootNode, visit);\n\t};\n};\n\nexport const updateAsyncArrows: (\n\tgetChecker: () => [ts.TypeChecker, ShadeupEnvironment]\n) => ts.TransformerFactory<ts.SourceFile> = (getChecker) => (context) => {\n\tlet [checker, env] = getChecker();\n\n\treturn (rootNode) => {\n\t\tconst { factory } = context;\n\n\t\tfunction visit(node) {\n\t\t\tif (ts.isArrowFunction(node)) {\n\t\t\t\tlet doesAwait = false;\n\n\t\t\t\tlet visit = (node: ts.Node) => {\n\t\t\t\t\tif (ts.isArrowFunction(node) || ts.isFunctionDeclaration(node)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (ts.isAwaitExpression(node)) {\n\t\t\t\t\t\tdoesAwait = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t\t\t};\n\n\t\t\t\tts.visitEachChild(node.body, visit, context);\n\t\t\t\tif (doesAwait) {\n\t\t\t\t\tlet mods = ts.getModifiers(node) || [];\n\t\t\t\t\treturn factory.updateArrowFunction(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\t[...mods, factory.createModifier(ts.SyntaxKind.AsyncKeyword)],\n\t\t\t\t\t\tnode.typeParameters,\n\t\t\t\t\t\tnode.parameters,\n\t\t\t\t\t\tnode.type,\n\t\t\t\t\t\tnode.equalsGreaterThanToken,\n\t\t\t\t\t\tnode.body\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ts.visitEachChild(node, visit, context);\n\t\t}\n\n\t\treturn ts.visitNode(rootNode, visit);\n\t};\n};\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/tsWalk.ts",
    "content": "import ts from 'typescript';\nimport { SourceNode } from './root';\n\nexport type TSVisitData = {\n\tast: ts.Node;\n\tchecker: ts.TypeChecker;\n\tgetType: () => ts.Type;\n\n\t/** Visits the node and evaluates the handler */\n\tc: (ast: ts.Node) => SourceNode | string;\n\n\t/** Generates a SourceNode based on the current ast node */\n\ts: (c: (SourceNode | string)[]) => SourceNode;\n\n\t/** Generates a SourceNode based on the provided ast node*/\n\tsWith: (c: (SourceNode | string)[], n: ts.Node) => SourceNode;\n};\n\nexport type TSVisitHandler = (data: TSVisitData) => SourceNode | string;\n\nexport type TSVisitMapper = {\n\tfunction: TSVisitHandler;\n\tif: TSVisitHandler;\n\tidentifier: TSVisitHandler;\n\tnumber: TSVisitHandler;\n\tstring: TSVisitHandler;\n\tprogram: TSVisitHandler;\n\texpression_statement: TSVisitHandler;\n\tbinary_expression: TSVisitHandler;\n\tfunction_declaration: TSVisitHandler;\n};\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/util.ts",
    "content": "import ts from 'typescript';\n\nexport function resolveNodeName(c: ts.Node) {\n\treturn `${c.getSourceFile().fileName.replaceAll('/', '_').replaceAll('.', '_')}_${c.getStart()}`;\n}\n\nexport function cleanName(name: string) {\n\treturn name\n\t\t.replaceAll('file:///', '')\n\t\t.replaceAll('.', '_dot_')\n\t\t.replaceAll('/', '_slash_')\n\t\t.replaceAll('-', '_dash_');\n}\n\nexport function closest(node: ts.Node, cb: (node: ts.Node) => boolean) {\n\twhile (node) {\n\t\tif (cb(node)) return node;\n\t\tnode = node.parent!;\n\t}\n\treturn null;\n}\n\n/**\n * Finds any @shadeup=tag(xyz) tags on a function declaration\n */\nexport function findShadeupTags(declar: ts.FunctionDeclaration | ts.MethodDeclaration): string[] {\n\tlet matcher = /=tag\\((.+)\\)$/g;\n\tlet doc = ts.getJSDocTags(declar);\n\n\tfor (let d of doc) {\n\t\tif (d.tagName.text !== 'shadeup') continue;\n\n\t\tif (typeof d.comment === 'string') {\n\t\t\tlet matches = matcher.exec(d.comment);\n\t\t\tif (matches) {\n\t\t\t\treturn matches[1].split(',').map((s) => s.trim());\n\t\t\t}\n\t\t}\n\t}\n\treturn [];\n}\n\nexport function getFunctionDeclarationFromCallExpression(\n\tchecker: ts.TypeChecker,\n\tnode: ts.CallExpression\n): ts.FunctionDeclaration | undefined {\n\tif (ts.isCallExpression(node)) {\n\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t}\n\t\tif (exprSmybol) {\n\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\n\t\t\tif (funcDeclar && ts.isFunctionDeclaration(funcDeclar)) {\n\t\t\t\treturn funcDeclar;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/generator/wgsl.ts",
    "content": "import ts from 'typescript';\nlet {\n\tfactory,\n\tisArrayTypeNode,\n\tisCallExpression,\n\tisIdentifier,\n\tisPropertyAccessChain,\n\tisPropertyAccessExpression\n} = ts;\nimport { TSVisitMapper } from './tsWalk';\n\nimport toposort from './toposort';\nimport {\n\tIndexMapping,\n\tlookupIndexMappingRange,\n\treverseLookupIndexMapping,\n\treverseLookupIndexMappingRange,\n\tSourceNode\n} from './root';\n\nimport wgslHeader from './header.wgsl?raw';\nimport {\n\thasShadeupDocTag,\n\thasWorkgroupDocTag,\n\tShadeupEnvironment\n} from '../environment/ShadeupEnvironment';\nimport { closest, resolveNodeName } from './util';\nimport { isStaticPropertyAccessExpression } from '../environment/validate';\nimport { isTupleType, isBooleanLiteralType } from 'tsutils';\nimport { GLSLCompilationError } from './glsl';\n\nconst TYPE_BLACKLIST = [\n\t'never',\n\t'object',\n\t'symbol',\n\t'bigint',\n\t'undefined',\n\t'null',\n\t'map',\n\t'string'\n];\n\nconst RESERVED_WORDS = [\n\t'this',\n\t'target',\n\t'attribute',\n\t'sample',\n\t'varying',\n\t'uniform',\n\t'layout',\n\t'delete'\n];\n\nfunction generateDefaultForType(checker: ts.TypeChecker, _type_node: ts.TypeNode) {\n\tlet _type = checker.getTypeFromTypeNode(_type_node);\n\tlet name = (_type.aliasSymbol || _type.getSymbol())?.escapedName.toString();\n\tswitch (name) {\n\t\tcase 'int':\n\t\t\treturn 'i32(0)';\n\t\tcase 'float':\n\t\t\treturn 'f32(0.0)';\n\t\tcase 'float2':\n\t\t\treturn 'vec2<f32>(0.0, 0.0)';\n\t\tcase 'float3':\n\t\t\treturn 'vec3<f32>(0.0, 0.0, 0.0)';\n\t\tcase 'float4':\n\t\t\treturn 'vec4<f32>(0.0, 0.0, 0.0, 0.0)';\n\t\tcase 'int2':\n\t\t\treturn 'vec2<i32>(0, 0)';\n\t\tcase 'int3':\n\t\t\treturn 'vec3<i32>(0, 0, 0)';\n\t\tcase 'int4':\n\t\t\treturn 'vec4<i32>(0, 0, 0, 0)';\n\t\tcase 'uint':\n\t\t\treturn 'u32(0)';\n\t\tcase 'uint2':\n\t\t\treturn 'vec2<u32>(0, 0)';\n\t\tcase 'uint3':\n\t\t\treturn 'vec3<u32>(0, 0, 0)';\n\t\tcase 'uint4':\n\t\t\treturn 'vec4<u32>(0, 0, 0, 0)';\n\t\tcase 'float2x2':\n\t\t\treturn 'mat2x2<f32>(0.0, 0.0, 0.0, 0.0)';\n\t\tcase 'float3x3':\n\t\t\treturn 'mat3x3<f32>(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)';\n\t\tcase 'float4x4':\n\t\t\treturn 'mat4x4<f32>(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0)';\n\t\tcase 'bool':\n\t\t\treturn '0';\n\t\tdefault:\n\t\t\tlet decl = _type.getSymbol()?.getDeclarations();\n\t\t\tif (ts.isTupleTypeNode(_type_node)) {\n\t\t\t\tlet len = _type_node.elements.length;\n\t\t\t\tlet args: string[] = [];\n\t\t\t\tlet rootNode = _type_node.elements[0];\n\t\t\t\tif (rootNode) {\n\t\t\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\t\t\targs.push(generateDefaultForType(checker, _type_node.elements[i]));\n\t\t\t\t\t}\n\t\t\t\t\tlet rootType = checker.getTypeFromTypeNode(rootNode);\n\t\t\t\t\treturn translateType(checker, rootType) + `[${len}] {` + args.join(', ') + '}';\n\t\t\t\t} else {\n\t\t\t\t\treturn '0';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decl && decl.length > 0) {\n\t\t\t\tlet d = decl[0];\n\t\t\t\tlet structProps: [string, ts.TypeNode][] = [];\n\n\t\t\t\tif (ts.isClassDeclaration(d)) {\n\t\t\t\t\tlet symd = _type.getSymbol();\n\t\t\t\t\tsymd?.members?.forEach((v, k) => {\n\t\t\t\t\t\tlet decl = v.valueDeclaration;\n\t\t\t\t\t\tif (decl && ts.isPropertyDeclaration(decl)) {\n\t\t\t\t\t\t\tstructProps.push([k?.toString() ?? '', decl.type!]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tlet sortedPropsByKey = structProps.sort((a, b) => {\n\t\t\t\t\t\treturn a[0].localeCompare(b[0]);\n\t\t\t\t\t});\n\n\t\t\t\t\tlet args: string[] = sortedPropsByKey.map((p) => {\n\t\t\t\t\t\treturn '/* ' + p[0] + ': */ ' + generateDefaultForType(checker, p[1]) + '\\n';\n\t\t\t\t\t});\n\n\t\t\t\t\treturn '_make_struct_' + resolveStructName(d) + '(\\n' + args.join(', ') + '\\n)';\n\t\t\t\t} else {\n\t\t\t\t\treturn '0';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn '0';\n\t\t\t}\n\t}\n}\n\nfunction getTypeFallback(checker: ts.TypeChecker, t: ts.Type) {\n\tlet n = (t.aliasSymbol || t.getSymbol())?.escapedName;\n\tif (!n && (t as any).intrinsicName) n = (t as any).intrinsicName;\n\n\tif (typeof n !== 'string') {\n\t\tlet props = t.getApparentProperties();\n\t\tif (props.length > 0) {\n\t\t\tfor (let p of props) {\n\t\t\t\tif (p.escapedName.toString() === '_opaque_int') return 'int';\n\t\t\t\tif (p.escapedName.toString() === '_opaque_float') return 'float';\n\t\t\t\tif (p.escapedName.toString() === '_opaque_uint') return 'uint';\n\t\t\t}\n\t\t}\n\n\t\tlet btype = t.getBaseTypes();\n\t\tif (btype && btype.length > 0) {\n\t\t\tfor (let b of btype) {\n\t\t\t\tlet tn = getTypeFallback(checker, b);\n\t\t\t\tif (tn) return tn;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t} else {\n\t\treturn n;\n\t}\n}\n\nfunction followTypeReferences(t: ts.Type) {\n\tif (t.flags & ts.TypeFlags.Object && (t as any).objectFlags & ts.ObjectFlags.Reference) {\n\t\tif ((t as ts.TypeReference).target === t) {\n\t\t\treturn t;\n\t\t}\n\t\treturn followTypeReferences((t as ts.TypeReference).target);\n\t} else {\n\t\treturn t;\n\t}\n}\n\nfunction getTypeArgument(t: ts.Type, i: number) {\n\tif (t.flags & ts.TypeFlags.Object && (t as any).objectFlags & ts.ObjectFlags.Reference) {\n\t\treturn (t as ts.TypeReference).typeArguments[i];\n\t} else {\n\t\treturn t;\n\t}\n}\n\nexport function getArrayTypeInfo(checker: ts.TypeChecker, t: ts.Type) {\n\tlet n = getTypeFallback(checker, t);\n\n\tlet originalType = t;\n\tif (n === undefined) {\n\t\tt = followTypeReferences(t);\n\t}\n\n\tlet isArray = false;\n\tlet staticSize = -1;\n\tlet elementType = '';\n\n\tif (\n\t\tn === 'Array' ||\n\t\t(t.flags & ts.TypeFlags.Object &&\n\t\t\t((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n\t) {\n\t\tlet typeRef = originalType as ts.TypeReference;\n\n\t\tlet args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n\t\tlet translated = translateType(checker, args[0]);\n\n\t\tlet typeInfo = getWGSLTypeInfo(translated);\n\n\t\tif (isTupleType(t)) {\n\t\t\tstaticSize = t.fixedLength;\n\t\t}\n\n\t\tlet toStringed = checker.typeToString(typeRef);\n\n\t\tisArray = true;\n\n\t\telementType = translated;\n\t}\n\n\treturn {\n\t\tisArray,\n\t\tstaticSize,\n\t\telementType\n\t};\n}\n\nexport function translateType(\n\tchecker: ts.TypeChecker,\n\tt: ts.Type,\n\ttemplateFormat = false,\n\tusedInsidePotentiallyExternalType = false\n) {\n\tlet n = getTypeFallback(checker, t);\n\n\tlet originalType = t;\n\tif (n === undefined) {\n\t\tt = followTypeReferences(t);\n\t}\n\tif (templateFormat) {\n\t\tlet name = n?.toString() ?? 'unknown';\n\n\t\tif (\n\t\t\tname === 'Array' ||\n\t\t\tname === 'array' ||\n\t\t\tname === 'buffer' ||\n\t\t\t(t.flags & ts.TypeFlags.Object &&\n\t\t\t\t((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n\t\t) {\n\t\t\tlet typeRef = originalType as ts.TypeReference;\n\n\t\t\tlet args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n\t\t\treturn {\n\t\t\t\ttype: name == 'buffer' ? 'buffer' : 'array',\n\t\t\t\telement: translateType(checker, args[0], true),\n\t\t\t\tstaticSize: args.length\n\t\t\t};\n\t\t}\n\n\t\tif (name == 'boolean' || name == 'false' || name == 'true') name = 'bool';\n\n\t\tif (\n\t\t\tname.startsWith('float') ||\n\t\t\tname.startsWith('int') ||\n\t\t\tname.startsWith('uint') ||\n\t\t\tname == 'bool' ||\n\t\t\tname == 'texture2d' ||\n\t\t\tname == 'texture3d'\n\t\t)\n\t\t\treturn { type: 'primitive', name };\n\n\t\tif (name == 'atomic') {\n\t\t\tlet args =\n\t\t\t\t(t as ts.TypeReference).typeArguments || checker.getTypeArguments(t as ts.TypeReference);\n\t\t\tlet translated = translateType(checker, args[0]);\n\t\t\treturn { type: 'primitive', name, element: translated };\n\t\t}\n\n\t\tlet symbol = t.aliasSymbol || t.getSymbol();\n\t\tif (symbol && symbol.declarations && symbol.declarations.length > 0) {\n\t\t\tif (ts.isClassDeclaration(symbol.declarations[0])) {\n\t\t\t\tlet fields: UniformKeyValuePair[] = [];\n\t\t\t\tlet decl = symbol.declarations[0] as ts.ClassDeclaration;\n\t\t\t\tfor (let member of decl.members) {\n\t\t\t\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\t\t\t\tlet name = member.name.getText();\n\t\t\t\t\t\tlet type = checker.getTypeFromTypeNode(member.type!);\n\t\t\t\t\t\tfields.push([name, translateType(checker, type, true)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'struct',\n\t\t\t\t\tname: resolveStructName(decl),\n\t\t\t\t\tfields\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'unknown'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (\n\t\t\tn === 'Array' ||\n\t\t\tn === 'array' ||\n\t\t\tn === 'buffer' ||\n\t\t\t(t.flags & ts.TypeFlags.Object &&\n\t\t\t\t((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n\t\t) {\n\t\t\tlet typeRef = originalType as ts.TypeReference;\n\n\t\t\tlet args = typeRef.typeArguments || checker.getTypeArguments(typeRef);\n\t\t\tlet translated = translateType(checker, args[0]);\n\n\t\t\tlet typeInfo = getWGSLTypeInfo(translated);\n\n\t\t\tlet toStringed = checker.typeToString(typeRef);\n\n\t\t\tif (n == 'buffer') {\n\t\t\t\treturn `array<${translated}>`;\n\t\t\t}\n\n\t\t\tif (typeInfo.needsAlignment) {\n\t\t\t\ttranslated = `vec4<${typeInfo.elementType ?? 'f32'}>`;\n\t\t\t}\n\n\t\t\tif (toStringed.endsWith('[]')) {\n\t\t\t\treturn 'array<' + translated + '>';\n\t\t\t} else {\n\t\t\t\tlet arraySize = 0;\n\t\t\t\tif (isTupleType(t)) {\n\t\t\t\t\tarraySize = t.fixedLength;\n\t\t\t\t}\n\n\t\t\t\treturn 'array<' + translated + ', ' + arraySize + '>';\n\t\t\t}\n\t\t}\n\n\t\tif (n === 'texture2d') return `sampler`;\n\t\tif (n == 'atomic') {\n\t\t\tlet args =\n\t\t\t\t(t as ts.TypeReference).typeArguments || checker.getTypeArguments(t as ts.TypeReference);\n\t\t\tlet translated = translateType(checker, args[0]);\n\t\t\treturn `atomic<${translated}>`;\n\t\t}\n\n\t\tif (n === 'bool') return 'bool';\n\t\tif (n === 'boolean') return 'bool';\n\n\t\tif (n === 'uint8') return 'f32';\n\t\tif (n === 'float') return 'f32';\n\t\tif (n === 'float2') return 'vec2<f32>';\n\t\tif (n === 'float3') return 'vec3<f32>';\n\t\tif (n === 'float4') return 'vec4<f32>';\n\n\t\tif (n === 'int') return 'i32';\n\t\tif (n === 'int2') return 'vec2<i32>';\n\t\tif (n === 'int3') return 'vec3<i32>';\n\t\tif (n === 'int4') return 'vec4<i32>';\n\n\t\tif (n === 'uint') return 'u32';\n\t\tif (n === 'uint2') return 'vec2<u32>';\n\t\tif (n === 'uint3') return 'vec3<u32>';\n\t\tif (n === 'uint4') return 'vec4<u32>';\n\n\t\tif (n === 'float2x2') return 'mat2x2<f32>';\n\t\tif (n === 'float3x3') return 'mat3x3<f32>';\n\t\tif (n === 'float4x4') return 'mat4x4<f32>';\n\n\t\tif (n === 'void') return 'void';\n\t\tif (n === 'error') return 'void';\n\n\t\tif (t.isUnion()) {\n\t\t\tlet types = t.types.map((t) => translateType(checker, t));\n\t\t\tfor (let sub of types) {\n\t\t\t\tif (sub && sub !== 'void' && sub !== 'undefined') return sub;\n\t\t\t}\n\t\t}\n\n\t\tlet symbol = t.aliasSymbol || t.getSymbol();\n\t\tif (symbol && symbol.declarations && symbol.declarations.length > 0) {\n\t\t\tif (ts.isClassDeclaration(symbol.declarations[0])) {\n\t\t\t\treturn resolveStructName(symbol.declarations[0]);\n\t\t\t} else {\n\t\t\t\treturn n?.toString() ?? 'void';\n\t\t\t}\n\t\t} else {\n\t\t\treturn n?.toString() ?? 'void';\n\t\t}\n\t}\n}\n\nfunction isTypeNameVector(name: string) {\n\tif (\n\t\tname == 'float2' ||\n\t\tname == 'float3' ||\n\t\tname == 'float4' ||\n\t\tname == 'int2' ||\n\t\tname == 'int3' ||\n\t\tname == 'int4' ||\n\t\tname == 'uint2' ||\n\t\tname == 'uint3' ||\n\t\tname == 'uint4'\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction getTypeNameVectorElementType(name: string): [string, number] {\n\tif (name == 'float') {\n\t\treturn ['float', 1];\n\t}\n\n\tif (name == 'int') {\n\t\treturn ['int', 1];\n\t}\n\n\tif (name == 'uint') {\n\t\treturn ['uint', 1];\n\t}\n\n\tif (name.startsWith('float')) {\n\t\treturn ['float', parseInt(name.substring(5))];\n\t}\n\n\tif (name.startsWith('int')) {\n\t\treturn ['int', parseInt(name.substring(3))];\n\t}\n\n\tif (name.startsWith('uint')) {\n\t\treturn ['uint', parseInt(name.substring(4))];\n\t}\n\n\tif (name.startsWith('f32')) {\n\t\treturn ['f32', 1];\n\t}\n\n\tif (name.startsWith('i32')) {\n\t\treturn ['i32', 1];\n\t}\n\n\tif (name.startsWith('u32')) {\n\t\treturn ['u32', 1];\n\t}\n\n\tif (name.endsWith('<f32>')) {\n\t\treturn ['float', parseInt(name.substring(3, 4))];\n\t}\n\n\tif (name.endsWith('<i32>')) {\n\t\treturn ['int', parseInt(name.substring(3, 4))];\n\t}\n\n\tif (name.endsWith('<u32>')) {\n\t\treturn ['uint', parseInt(name.substring(3, 4))];\n\t}\n\n\treturn ['', 0];\n}\n\nfunction getTypeNameVectorElementTypeWGSL(name: string) {\n\tif (name == 'f32') {\n\t\treturn ['f32', 1];\n\t}\n\n\tif (name == 'i32') {\n\t\treturn ['i32', 1];\n\t}\n\n\tif (name == 'u32') {\n\t\treturn ['u32', 1];\n\t}\n\n\tif (name.endsWith('<f32>')) {\n\t\treturn ['f32', parseInt(name.substring(3, 4))];\n\t}\n\n\tif (name.endsWith('<i32>')) {\n\t\treturn ['i32', parseInt(name.substring(3, 4))];\n\t}\n\n\tif (name.endsWith('<u32>')) {\n\t\treturn ['u32', parseInt(name.substring(3, 4))];\n\t}\n\n\treturn ['', 0];\n}\n\nfunction isTranslatedTypeNameVectorOrScalar(name: string) {\n\tif (name == 'float' || name == 'int' || name == 'uint') return true;\n\tif (name.endsWith('<f32>') || name.endsWith('<i32>') || name.endsWith('<u32>')) {\n\t\tif (name.startsWith('vec2') || name.startsWith('vec3') || name.startsWith('vec4')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function getWGSLTypeInfo(name: string) {\n\tswitch (name) {\n\t\tcase 'bool':\n\t\t\treturn { type: 'bool', length: 1, size: 1, needsAlignment: true, elementType: 'i32' };\n\t\tcase 'u32':\n\t\t\treturn {\n\t\t\t\ttype: 'integer',\n\t\t\t\tlength: 1,\n\t\t\t\tsigned: false,\n\t\t\t\tsize: 4,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'u32'\n\t\t\t};\n\t\tcase 'i32':\n\t\t\treturn {\n\t\t\t\ttype: 'integer',\n\t\t\t\tlength: 1,\n\t\t\t\tsigned: true,\n\t\t\t\tsize: 4,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'i32'\n\t\t\t};\n\t\tcase 'f32':\n\t\t\treturn { type: 'float', length: 1, size: 4, needsAlignment: true, elementType: 'f32' };\n\t\tcase 'vec2<f32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 2,\n\t\t\t\telement: 'float',\n\t\t\t\tsize: 8,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'f32'\n\t\t\t};\n\t\tcase 'vec3<f32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 3,\n\t\t\t\telement: 'float',\n\t\t\t\tsize: 12,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'f32'\n\t\t\t};\n\t\tcase 'vec4<f32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 4,\n\t\t\t\telement: 'float',\n\t\t\t\tsize: 16,\n\t\t\t\tneedsAlignment: false,\n\t\t\t\telementType: 'f32'\n\t\t\t};\n\t\tcase 'vec2<i32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 2,\n\t\t\t\tsigned: true,\n\t\t\t\telement: 'integer',\n\t\t\t\tsize: 8,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'i32'\n\t\t\t};\n\t\tcase 'vec3<i32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 3,\n\t\t\t\tsigned: true,\n\t\t\t\telement: 'integer',\n\t\t\t\tsize: 12,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'i32'\n\t\t\t};\n\t\tcase 'vec4<i32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 4,\n\t\t\t\tsigned: true,\n\t\t\t\telement: 'integer',\n\t\t\t\tsize: 16,\n\t\t\t\tneedsAlignment: false,\n\t\t\t\telementType: 'i32'\n\t\t\t};\n\t\tcase 'vec2<u32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 2,\n\t\t\t\tsigned: false,\n\t\t\t\telement: 'integer',\n\t\t\t\tsize: 8,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'u32'\n\t\t\t};\n\t\tcase 'vec3<u32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 3,\n\t\t\t\tsigned: false,\n\t\t\t\telement: 'integer',\n\t\t\t\tsize: 12,\n\t\t\t\tneedsAlignment: true,\n\t\t\t\telementType: 'u32'\n\t\t\t};\n\t\tcase 'vec4<u32>':\n\t\t\treturn {\n\t\t\t\ttype: 'vector',\n\t\t\t\tlength: 4,\n\t\t\t\tsigned: false,\n\t\t\t\telement: 'integer',\n\t\t\t\tsize: 16,\n\t\t\t\tneedsAlignment: false,\n\t\t\t\telementType: 'u32'\n\t\t\t};\n\t\tcase 'mat2x2<f32>':\n\t\t\treturn { type: 'matrix', element: 'float', size: 16, needsAlignment: false };\n\t\tcase 'mat3x3<f32>':\n\t\t\treturn { type: 'matrix', element: 'float', size: 36, needsAlignment: false };\n\t\tcase 'mat4x4<f32>':\n\t\t\treturn { type: 'matrix', element: 'float', size: 64, needsAlignment: false };\n\t\tdefault:\n\t\t\treturn { type: 'unknown', size: 0, needsAlignment: false };\n\t}\n}\n\nfunction isVector(checker: ts.TypeChecker, t: ts.Type) {\n\tlet name = getTypeFallback(checker, t);\n\tif (name) {\n\t\treturn isTypeNameVector(name);\n\t}\n\treturn false;\n}\n\nfunction getVectorElementType(checker: ts.TypeChecker, t: ts.Type): [string, number] {\n\tlet name = getTypeFallback(checker, t);\n\tif (name) {\n\t\treturn getTypeNameVectorElementType(name);\n\t}\n\treturn ['', 0];\n}\n\nfunction isNumeric(checker: ts.TypeChecker, t: ts.Type) {\n\tlet name = getTypeFallback(checker, t);\n\tif (name && (name.startsWith('float') || name.startsWith('int') || name.startsWith('uint'))) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction escapeIdentifier(id: string) {\n\tif (RESERVED_WORDS.includes(id)) {\n\t\treturn '_' + id;\n\t}\n\treturn id.replaceAll('___', '_ii_').replaceAll('__', '_i_');\n}\n\nexport function makeWalker() {\n\treturn {\n\t\tfunction: ({ ast, checker, c, s, getType, sWith }) =>\n\t\t\ts([\n\t\t\t\ttranslateType(\n\t\t\t\t\tchecker,\n\t\t\t\t\tchecker.getSignaturesOfType(getType(), ts.SignatureKind.Call)[0].getReturnType()\n\t\t\t\t)\n\t\t\t])\n\t} as TSVisitMapper;\n}\n\ntype TsAstContext = {\n\tchecker: ts.TypeChecker;\n\tcomposed?: ts.CallExpression;\n\tparentFunction?: ts.FunctionDeclaration | ts.MethodDeclaration | ts.ArrowFunction;\n\tisComputeShader?: boolean;\n\tcomputeSize?: [number, number, number];\n\taddCustomAttribute?: (\n\t\ttype: 'in' | 'out',\n\t\tindex: number,\n\t\tvalType: string,\n\t\tinterp: 'flat' | 'linear' | 'perspective'\n\t) => void;\n};\n\nfunction isAssignableType(t: string) {\n\treturn !(t.startsWith('texture') || t.startsWith('sampler') || t.startsWith('buffer'));\n}\n\nfunction isGLSLType(name: string): boolean {\n\treturn (\n\t\tname.startsWith('vec') ||\n\t\tname.startsWith('mat') ||\n\t\tname.startsWith('sampler') ||\n\t\tname.startsWith('texture') ||\n\t\tname == 'bool' ||\n\t\tname == 'f32' ||\n\t\tname == 'i32' ||\n\t\tname == 'void'\n\t);\n}\n\nfunction autoCastNumeric(\n\tvalue: SourceNode,\n\tinput: string,\n\texpected: string,\n\tnode: ts.Node\n): SourceNode {\n\tlet inputType = getTypeNameVectorElementTypeWGSL(input);\n\tlet expectedType = getTypeNameVectorElementTypeWGSL(expected);\n\tif (inputType[0] !== '' && expectedType[0] !== '') {\n\t\tif (inputType[0] != expectedType[0]) {\n\t\t\tif (expectedType[1] == 1) {\n\t\t\t\tif (typeof expectedType[0] == 'string' && expectedType[0].startsWith('vector')) {\n\t\t\t\t\treturn new SourceNode(value.startIndex, value.endIndex, [value]);\n\t\t\t\t} else {\n\t\t\t\t\tif (inputType[0] == 'u32') {\n\t\t\t\t\t\tthrow new GLSLCompilationError(`Cannot cast uint to ${expectedType[0]}`, node);\n\t\t\t\t\t}\n\t\t\t\t\tif (expectedType[0] == 'i32') {\n\t\t\t\t\t\t// debugger;\n\t\t\t\t\t}\n\t\t\t\t\treturn new SourceNode(value.startIndex, value.endIndex, [\n\t\t\t\t\t\t`${expectedType[0]}(`,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t`)`\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (inputType[0] == 'u32') {\n\t\t\t\t\tthrow new GLSLCompilationError(`Cannot cast uint to ${expectedType[0]}`, node);\n\t\t\t\t}\n\t\t\t\treturn new SourceNode(value.startIndex, value.endIndex, [\n\t\t\t\t\t`vec${expectedType[1]}<${expectedType[0]}>(`,\n\t\t\t\t\tvalue,\n\t\t\t\t\t`)`\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n}\n\nfunction isUniformAccess(ctx: TsAstContext, expr: ts.Expression) {\n\tif (isCallExpression(expr)) {\n\t\texpr = expr.expression;\n\t}\n\n\tlet id: ts.Identifier | null = null;\n\tif (ts.isIdentifier(expr)) {\n\t\tid = expr;\n\t}\n\n\tif (isPropertyAccessExpression(expr)) {\n\t\tlet chain = expr as ts.PropertyAccessExpression;\n\t\twhile (chain.expression) {\n\t\t\tif (ts.isPropertyAccessExpression(chain.expression)) {\n\t\t\t\tchain = chain.expression;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tid = chain.expression as ts.Identifier;\n\t}\n\n\tif (id) {\n\t\tif (ts.isIdentifier(id)) {\n\t\t\tlet sym = ctx.checker.getSymbolAtLocation(id);\n\t\t\tif (sym && sym.flags & ts.SymbolFlags.Alias) {\n\t\t\t\tsym = ctx.checker.getAliasedSymbol(sym);\n\t\t\t}\n\n\t\t\tif (sym?.declarations?.length == 1) {\n\t\t\t\tlet decl = sym.declarations[0];\n\t\t\t\tif (isUniformable(ctx.checker, decl)) {\n\t\t\t\t\tif (isVariableDeclarationValue(ctx.checker, decl)) {\n\t\t\t\t\t\tif (!isInSameScope(decl, id)) {\n\t\t\t\t\t\t\tif (!isInShader(decl)) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * This will wrap an expression that accesses a uniform boolean with a == 1 to convert it to a boolean.\n */\nfunction accessWrap(ctx: TsAstContext, expr: ts.Expression, inner: SourceNode) {\n\tif (isPropertyAccessExpression(expr)) {\n\t\tlet chain = expr as ts.PropertyAccessExpression;\n\t\twhile (chain.expression) {\n\t\t\tif (ts.isPropertyAccessExpression(chain.expression)) {\n\t\t\t\tchain = chain.expression;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet id = chain.expression as ts.Identifier;\n\t\tif (ts.isIdentifier(id)) {\n\t\t\tlet sym = ctx.checker.getSymbolAtLocation(id);\n\t\t\tif (sym && sym.flags & ts.SymbolFlags.Alias) {\n\t\t\t\tsym = ctx.checker.getAliasedSymbol(sym);\n\t\t\t}\n\n\t\t\tif (sym?.declarations?.length == 1) {\n\t\t\t\tlet decl = sym.declarations[0];\n\t\t\t\tif (isUniformable(ctx.checker, decl)) {\n\t\t\t\t\tif (isVariableDeclarationValue(ctx.checker, decl)) {\n\t\t\t\t\t\tif (!isInSameScope(decl, chain.expression)) {\n\t\t\t\t\t\t\tif (!isInShader(decl)) {\n\t\t\t\t\t\t\t\tlet outputType = ctx.checker.getTypeAtLocation(expr);\n\n\t\t\t\t\t\t\t\tlet isBooleanAccess = false;\n\n\t\t\t\t\t\t\t\tif (isArrayType(outputType, ctx.checker)) {\n\t\t\t\t\t\t\t\t\tlet typeRef = outputType as ts.TypeReference;\n\n\t\t\t\t\t\t\t\t\tlet args = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n\n\t\t\t\t\t\t\t\t\tlet t = args[0];\n\n\t\t\t\t\t\t\t\t\tlet n = getTypeFallback(ctx.checker, t);\n\n\t\t\t\t\t\t\t\t\tif (n == 'boolean' || n == 'bool') {\n\t\t\t\t\t\t\t\t\t\tisBooleanAccess = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tlet n = getTypeFallback(ctx.checker, outputType);\n\n\t\t\t\t\t\t\t\t\tif (n == 'boolean' || n == 'bool') {\n\t\t\t\t\t\t\t\t\t\tisBooleanAccess = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (isBooleanAccess) {\n\t\t\t\t\t\t\t\t\treturn new SourceNode(inner.startIndex, inner.endIndex, [`((`, inner, `) == 1)`]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn inner;\n}\n\nfunction getVectorMask(num: number) {\n\tlet outMask = '';\n\tlet comps = ['x', 'y', 'z', 'w'];\n\tfor (let i = 0; i < num; i++) {\n\t\toutMask += comps[i];\n\t}\n\treturn outMask;\n}\n\nfunction convertConciseBodyToBlock(body: ts.ConciseBody) {\n\tif (ts.isBlock(body)) {\n\t\treturn body;\n\t} else {\n\t\treturn ts.factory.createBlock([ts.factory.createReturnStatement(body)]);\n\t}\n}\n\nfunction getRealReturnType(checker: ts.TypeChecker, call: ts.CallExpression) {\n\tlet fnCallSignature = checker.getResolvedSignature(call);\n\treturn fnCallSignature.getReturnType();\n}\n\nfunction augmentParameter(checker: ts.TypeChecker, p: ts.ParameterDeclaration): SourceNode[] {\n\tconst type = checker.getTypeAtLocation(p);\n\n\tconst tt = translateType(checker, type);\n\tif (tt == 'sampler') {\n\t\tconst args = checker.getTypeArguments(type as ts.TypeReference);\n\t\tlet innerType = 'f32';\n\t\tif (args && args.length > 0) {\n\t\t\tlet [et, _] = getVectorElementType(checker, args[0]);\n\t\t\tinnerType = {\n\t\t\t\tfloat: 'f32',\n\t\t\t\tint: 'i32',\n\t\t\t\tuint: 'u32'\n\t\t\t}[et];\n\t\t}\n\t\treturn [\n\t\t\tnew SourceNode(p.getStart(), p.getEnd(), [\n\t\t\t\tp.name.getText() + '_texture: texture_2d<' + innerType + '>'\n\t\t\t])\n\t\t];\n\t}\n\treturn [];\n}\nfunction augmentArgument(ctx: TsAstContext, arg: ts.Expression): SourceNode[] {\n\tlet type = ctx.checker.getTypeAtLocation(arg);\n\tlet tt = translateType(ctx.checker, type);\n\tif (tt == 'sampler') {\n\t\tlet args = ctx.checker.getTypeArguments(type as ts.TypeReference);\n\t\tlet innerType = 'f32';\n\t\tif (args && args.length > 0) {\n\t\t\tlet [et, _] = getVectorElementType(ctx.checker, args[0]);\n\t\t\tinnerType = {\n\t\t\t\tfloat: 'f32',\n\t\t\t\tint: 'i32',\n\t\t\t\tuint: 'u32'\n\t\t\t}[et];\n\t\t}\n\t\treturn [new SourceNode(arg.getStart(), arg.getEnd(), [compile(ctx, arg), '_texture'])];\n\t}\n\n\treturn [];\n}\n\nexport function compile(\n\tctx: TsAstContext,\n\tast: ts.Node,\n\toriginalMapping?: IndexMapping\n): SourceNode {\n\tfunction c(ast: ts.Node) {\n\t\tif (!ast) {\n\t\t\treturn s([]);\n\t\t}\n\t\treturn compile(ctx, ast);\n\t}\n\tfunction cplain(ast: ts.Node) {\n\t\tif (!ast) {\n\t\t\treturn s([]);\n\t\t}\n\t\treturn compile(\n\t\t\t{\n\t\t\t\tchecker: ctx.checker,\n\t\t\t\tparentFunction: ctx.parentFunction\n\t\t\t},\n\t\t\tast\n\t\t);\n\t}\n\n\t/** Generates a SourceNode based on the current ast node */\n\tfunction s(c: (SourceNode | string)[]) {\n\t\tif (originalMapping) {\n\t\t\tlet reverseMapped = lookupIndexMappingRange(originalMapping, ast.getStart(), ast.getEnd());\n\t\t\treturn new SourceNode(reverseMapped.start, reverseMapped.end, c);\n\t\t} else {\n\t\t\treturn new SourceNode(0, 0, c);\n\t\t}\n\t}\n\n\t/** Gets a named child of the current ast node */\n\tfunction n(kind: ts.SyntaxKind) {\n\t\treturn ast.getChildren().find((child) => child.kind === kind);\n\t}\n\n\tfunction f(fn: (child: ts.Node) => boolean) {\n\t\treturn ast.getChildren().filter(fn);\n\t}\n\n\tfunction flat(...c: (SourceNode | string)[][]) {\n\t\treturn c.reduce((acc, cur) => {\n\t\t\treturn [...acc, ...cur];\n\t\t}, [] as (SourceNode | string)[]);\n\t}\n\n\tfunction join(c: (SourceNode | string)[], sep: string) {\n\t\treturn c.reduce((acc, cur) => {\n\t\t\tif (acc.length === 0) {\n\t\t\t\treturn [cur];\n\t\t\t}\n\t\t\treturn [...acc, sep, cur];\n\t\t}, [] as (SourceNode | string)[]);\n\t}\n\n\tfunction children() {\n\t\treturn ast.getChildren().map((child) => c(child));\n\t}\n\n\tfunction hasName(name: string) {}\n\n\tlet prefixFunctions: SourceNode[] = [];\n\tif (ctx.composed) {\n\t\tif (ts.isMethodDeclaration(ast) || ts.isFunctionDeclaration(ast)) {\n\t\t\tfor (let [i, arg] of ctx.composed.arguments.entries()) {\n\t\t\t\tif (ts.isArrowFunction(arg)) {\n\t\t\t\t\tlet paramFromIndex = ast.parameters[i];\n\t\t\t\t\tlet name = paramFromIndex.name.getText() + '_composed_' + arg.pos + '_arg_' + i;\n\t\t\t\t\tlet signature = ctx.checker.getSignatureFromDeclaration(arg);\n\t\t\t\t\tlet returnType = signature.getReturnType();\n\t\t\t\t\tlet vars = getClosureVars(ctx.checker, arg);\n\t\t\t\t\tlet tt = translateType(ctx.checker, ctx.checker.getTypeAtLocation(p.declarations[0]));\n\t\t\t\t\tlet vvv = vars.map((p) =>\n\t\t\t\t\t\ts([p.escapedName, isAssignableType(tt) ? '_const' : '', ': ', tt])\n\t\t\t\t\t);\n\t\t\t\t\tlet joins = join(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t...arg.parameters\n\t\t\t\t\t\t\t\t.map((p) => {\n\t\t\t\t\t\t\t\t\tlet aug = augmentParameter(ctx.checker, p);\n\t\t\t\t\t\t\t\t\treturn [cplain(p), ...aug];\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.flat(),\n\t\t\t\t\t\t\t...vvv\n\t\t\t\t\t\t],\n\t\t\t\t\t\t', '\n\t\t\t\t\t);\n\t\t\t\t\tlet returnStr = ' -> ' + translateType(ctx.checker, returnType);\n\t\t\t\t\tif (returnStr == ' -> void') returnStr = '';\n\n\t\t\t\t\tprefixFunctions.push(\n\t\t\t\t\t\ts([\n\t\t\t\t\t\t\t'fn ',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...joins,\n\t\t\t\t\t\t\t')',\n\t\t\t\t\t\t\treturnStr,\n\t\t\t\t\t\t\t' {\\n',\n\t\t\t\t\t\t\t...vars\n\t\t\t\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p.declarations[0]);\n\n\t\t\t\t\t\t\t\t\tlet tt = translateType(ctx.checker, type);\n\t\t\t\t\t\t\t\t\treturn isAssignableType(tt);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.map((p) => {\n\t\t\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t\t\t'var ',\n\t\t\t\t\t\t\t\t\t\tp.escapedName.toString(),\n\t\t\t\t\t\t\t\t\t\t' = ',\n\t\t\t\t\t\t\t\t\t\tp.escapedName.toString(),\n\t\t\t\t\t\t\t\t\t\t'_const;\\n'\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t...arg.parameters\n\t\t\t\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p.type);\n\n\t\t\t\t\t\t\t\t\tlet tt = translateType(ctx.checker, type);\n\t\t\t\t\t\t\t\t\treturn isAssignableType(tt);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.map((p) => {\n\t\t\t\t\t\t\t\t\treturn s(['var ', p.name.getText(), ' = ', p.name.getText(), '_const;\\n']);\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t...(convertConciseBodyToBlock(arg.body).statements.map((s) => c(s)) ?? []),\n\t\t\t\t\t\t\t'\\n}\\n\\n'\n\t\t\t\t\t\t])\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction autoCastParameter(callExpr: ts.CallExpression, argIndex: number) {\n\t\tlet signature = ctx.checker.getResolvedSignature(callExpr);\n\t\tlet params = signature.getParameters();\n\t\tlet param = params[argIndex];\n\t\tlet paramType = ctx.checker.getTypeOfSymbolAtLocation(param, callExpr);\n\t\tlet paramTypeString = translateType(ctx.checker, paramType);\n\t\tlet arg = callExpr.arguments[argIndex];\n\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\tlet argTypeString = translateType(ctx.checker, argType);\n\t\tif (paramTypeString !== argTypeString) {\n\t\t\treturn autoCastNumeric(c(arg), argTypeString, paramTypeString, arg);\n\t\t}\n\t\treturn s([c(arg)]);\n\t}\n\n\tswitch (ast.kind) {\n\t\tcase ts.SyntaxKind.FirstPunctuation:\n\t\t\treturn s([ast.getText()]);\n\t\tcase ts.SyntaxKind.SyntaxList:\n\t\t\treturn s(children());\n\t\tcase ts.SyntaxKind.SourceFile:\n\t\t\treturn s(children());\n\t\tcase ts.SyntaxKind.BreakStatement:\n\t\t\treturn s(['break;']);\n\t\tcase ts.SyntaxKind.ContinueStatement:\n\t\t\treturn s(['continue;']);\n\t\tcase ts.SyntaxKind.MethodDeclaration:\n\t\t\tlet fnDeclar = ast as ts.FunctionDeclaration | ts.MethodDeclaration;\n\n\t\t\tlet fnName = resolveFunctionName(fnDeclar);\n\n\t\t\tif (ctx.composed) {\n\t\t\t\tfnName = fnName + '_composed_' + ctx.composed.pos;\n\t\t\t}\n\n\t\t\tlet isStatic = false;\n\n\t\t\tlet signature = ctx.checker.getSignatureFromDeclaration(fnDeclar);\n\t\t\tif (ts.canHaveModifiers(fnDeclar)) {\n\t\t\t\tlet mods = ts.getModifiers(fnDeclar);\n\t\t\t\tif (mods) {\n\t\t\t\t\tif (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n\t\t\t\t\t\tisStatic = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet returnType = signature.getReturnType();\n\t\t\tlet returnStr = ' -> ' + translateType(ctx.checker, returnType);\n\t\t\tif (returnStr == ' -> void') returnStr = '';\n\t\t\treturn s([\n\t\t\t\t...prefixFunctions,\n\t\t\t\t'fn ',\n\t\t\t\tfnName,\n\t\t\t\t'(',\n\n\t\t\t\t...join(\n\t\t\t\t\t[\n\t\t\t\t\t\t...(isStatic\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t'_this: ' +\n\t\t\t\t\t\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(fnDeclar.parent))\n\t\t\t\t\t\t\t  ]),\n\t\t\t\t\t\t...fnDeclar.parameters\n\t\t\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p);\n\t\t\t\t\t\t\t\tif (type.getCallSignatures().length > 0) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((p) => {\n\t\t\t\t\t\t\t\tconst o = c(p);\n\t\t\t\t\t\t\t\tconst aug = augmentParameter(ctx.checker, p);\n\t\t\t\t\t\t\t\treturn [o, ...aug];\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.flat()\n\t\t\t\t\t],\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t')',\n\t\t\t\treturnStr,\n\t\t\t\t' {\\n',\n\t\t\t\t...fnDeclar.parameters\n\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p);\n\t\t\t\t\t\tif (type.getCallSignatures().length > 0) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t})\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\ts([\n\t\t\t\t\t\t\t'var ',\n\t\t\t\t\t\t\tescapeIdentifier(p.name.getText()),\n\t\t\t\t\t\t\t' = ',\n\t\t\t\t\t\t\tescapeIdentifier(p.name.getText()),\n\t\t\t\t\t\t\t'_const;\\n'\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t...(fnDeclar.body?.statements.map((s) => c(s)) ?? []),\n\t\t\t\t'\\n}\\n\\n'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.FunctionDeclaration:\n\t\t\tlet mthdDeclar = ast as ts.FunctionDeclaration | ts.MethodDeclaration;\n\n\t\t\tlet mthdsignature = ctx.checker.getSignatureFromDeclaration(mthdDeclar);\n\t\t\tlet mthdreturnType = mthdsignature.getReturnType();\n\n\t\t\tlet mthdName = resolveFunctionName(mthdDeclar);\n\n\t\t\tif (ctx.composed) {\n\t\t\t\tmthdName = mthdName + '_composed_' + ctx.composed.pos;\n\t\t\t}\n\t\t\tlet returnStrMethod = ' -> ' + translateType(ctx.checker, mthdreturnType);\n\t\t\tif (returnStrMethod == ' -> void') returnStrMethod = '';\n\t\t\treturn s([\n\t\t\t\t...prefixFunctions,\n\t\t\t\t'fn ',\n\t\t\t\tmthdName,\n\t\t\t\t'(',\n\t\t\t\t...join(\n\t\t\t\t\tmthdDeclar.parameters\n\t\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p);\n\t\t\t\t\t\t\tif (type.getCallSignatures().length > 0) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((p) => {\n\t\t\t\t\t\t\tconst o = c(p);\n\t\t\t\t\t\t\tconst aug = augmentParameter(ctx.checker, p);\n\t\t\t\t\t\t\treturn [o, ...aug];\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.flat(),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t')',\n\t\t\t\treturnStrMethod,\n\t\t\t\t' {\\n',\n\t\t\t\t...mthdDeclar.parameters\n\t\t\t\t\t.filter((p) => {\n\t\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(p);\n\t\t\t\t\t\tif (type.getCallSignatures().length > 0) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet tt = translateType(ctx.checker, type);\n\t\t\t\t\t\treturn isAssignableType(tt);\n\t\t\t\t\t})\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\ts([\n\t\t\t\t\t\t\t'var ',\n\t\t\t\t\t\t\tescapeIdentifier(p.name.getText()),\n\t\t\t\t\t\t\t' = ',\n\t\t\t\t\t\t\tescapeIdentifier(p.name.getText()),\n\t\t\t\t\t\t\t'_const;\\n'\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t...(mthdDeclar.body?.statements.map((s) => c(s)) ?? []),\n\t\t\t\t'\\n}\\n\\n'\n\t\t\t]);\n\n\t\tcase ts.SyntaxKind.ReturnStatement:\n\t\t\tlet ret = ast as ts.ReturnStatement;\n\t\t\tif (!ctx.parentFunction) {\n\t\t\t\tif (ret.expression) {\n\t\t\t\t\treturn s(['return ', c(ret.expression), ';\\n']);\n\t\t\t\t} else {\n\t\t\t\t\treturn s(['return;\\n']);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet expectedReturnType = ctx.checker\n\t\t\t\t\t.getSignatureFromDeclaration(ctx.parentFunction)\n\t\t\t\t\t.getReturnType();\n\t\t\t\tlet actualReturnType = ctx.checker.getTypeAtLocation(ret.expression);\n\n\t\t\t\tif (ret.expression) {\n\t\t\t\t\tlet sss = s([\n\t\t\t\t\t\t'return ',\n\t\t\t\t\t\tautoCastNumeric(\n\t\t\t\t\t\t\tc(ret.expression),\n\t\t\t\t\t\t\ttranslateType(ctx.checker, actualReturnType),\n\t\t\t\t\t\t\ttranslateType(ctx.checker, expectedReturnType),\n\t\t\t\t\t\t\tret.expression\n\t\t\t\t\t\t),\n\t\t\t\t\t\t';\\n'\n\t\t\t\t\t]);\n\t\t\t\t\treturn sss;\n\t\t\t\t} else {\n\t\t\t\t\treturn s(['return;\\n']);\n\t\t\t\t}\n\t\t\t}\n\t\tcase ts.SyntaxKind.AsExpression:\n\t\t\tlet asExpr = ast as ts.AsExpression;\n\t\t\treturn c(asExpr.expression);\n\t\tcase ts.SyntaxKind.Parameter:\n\t\t\tlet param = ast as ts.ParameterDeclaration;\n\t\t\tif (ctx.composed) {\n\t\t\t\tlet indexOf = param.parent.parameters.indexOf(param);\n\t\t\t\tlet expr = ctx.composed.arguments[indexOf];\n\t\t\t\tif (expr) {\n\t\t\t\t\tif (ts.isArrowFunction(expr)) {\n\t\t\t\t\t\tlet vars = getClosureVars(ctx.checker, expr.body);\n\n\t\t\t\t\t\tlet closureVars = vars.map((v) => {\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\tv.name,\n\t\t\t\t\t\t\t\t': ',\n\t\t\t\t\t\t\t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(v.valueDeclaration))\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn s(join(closureVars, ', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst tt = translateType(ctx.checker, ctx.checker.getTypeAtLocation(param));\n\t\t\treturn s([\n\t\t\t\tescapeIdentifier(param.name.getText()),\n\t\t\t\tisAssignableType(tt) ? '_const' : '',\n\t\t\t\t': ',\n\t\t\t\ttt\n\t\t\t]);\n\t\tcase ts.SyntaxKind.ArrowFunction:\n\t\t\t// This is the root of the shader\n\t\t\tlet arrow = ast as ts.ArrowFunction;\n\t\t\tlet body = convertConciseBodyToBlock(arrow.body);\n\t\t\tlet preMain = '';\n\t\t\tif (ctx.isComputeShader) {\n\t\t\t\tpreMain = `\\n@compute @workgroup_size(${ctx.computeSize[0]}, ${ctx.computeSize[1]}, ${ctx.computeSize[2]})`;\n\t\t\t}\n\n\t\t\treturn s([\n\t\t\t\t'\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/' +\n\t\t\t\t\tpreMain +\n\t\t\t\t\t'\\nfn main(/*__SHADEUP_TEMPLATE_INPUT*/)' +\n\t\t\t\t\t(ctx.isComputeShader ? '' : '-> /*__SHADEUP_TEMPLATE_OUTPUT*/') +\n\t\t\t\t\t'{\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\\n',\n\t\t\t\t...body.statements.filter((s) => !ts.isFunctionDeclaration(s)).map((s) => c(s)),\n\t\t\t\t'\\n/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\\n}\\n'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.VariableStatement:\n\t\t\tlet varStatement = ast as ts.VariableStatement;\n\t\t\treturn s([\n\t\t\t\t...join(\n\t\t\t\t\tvarStatement.declarationList.declarations.map((d) => c(d)),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t';\\n'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.VariableDeclaration:\n\t\t\tlet varDecl = ast as ts.VariableDeclaration;\n\t\t\tlet type = ctx.checker.getTypeAtLocation(varDecl);\n\n\t\t\tlet fullText = varDecl.getSourceFile().getFullText();\n\t\t\tlet fullStart = varDecl.getFullStart();\n\t\t\tlet prefix = `// @workgroup\\n `;\n\n\t\t\tlet mySelf = fullText.slice(fullStart - prefix.length, fullStart);\n\n\t\t\tif (mySelf.includes('@workgroup')) {\n\t\t\t\treturn s([]);\n\t\t\t} else {\n\t\t\t\tlet translated = translateType(ctx.checker, type);\n\t\t\t\tif (translated.startsWith('array')) {\n\t\t\t\t\ttranslated = '';\n\t\t\t\t}\n\t\t\t\tif (isInShader(varDecl)) {\n\t\t\t\t\tlet arrType = ctx.checker.getTypeAtLocation(varDecl);\n\t\t\t\t\tlet typeInfo = getArrayTypeInfo(ctx.checker, arrType);\n\t\t\t\t\tif (typeInfo.isArray) {\n\t\t\t\t\t\tif (typeInfo.staticSize <= 0) {\n\t\t\t\t\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t\t\t\t\t'Cannot declare an array without a static size in a shader',\n\t\t\t\t\t\t\t\tvarDecl\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet initializerVal = c(varDecl.initializer!);\n\t\t\t\tif (translated) {\n\t\t\t\t\tlet leftType = type;\n\t\t\t\t\tlet rightType = ctx.checker.getTypeAtLocation(varDecl.initializer!);\n\t\t\t\t\tif (isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType)) {\n\t\t\t\t\t\t// debugger;\n\t\t\t\t\t\tlet [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType);\n\t\t\t\t\t\tlet [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType);\n\n\t\t\t\t\t\tif (leftElementType != rightElementType) {\n\t\t\t\t\t\t\tif (leftElementType == 'float' && rightElementType == 'int') {\n\t\t\t\t\t\t\t\tinitializerVal = s([`vec${leftElementSize}f(`, initializerVal, ')']);\n\t\t\t\t\t\t\t} else if (leftElementType == 'int' && rightElementType == 'float') {\n\t\t\t\t\t\t\t\tinitializerVal = s([`vec${leftElementSize}i(`, initializerVal, ')']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isNumeric(ctx.checker, leftType) && isNumeric(ctx.checker, rightType)) {\n\t\t\t\t\t\tlet leftTypeStr = translateType(ctx.checker, leftType);\n\t\t\t\t\t\tlet rightTypeStr = translateType(ctx.checker, rightType);\n\t\t\t\t\t\tif (leftTypeStr != rightTypeStr) {\n\t\t\t\t\t\t\tinitializerVal = s([\n\t\t\t\t\t\t\t\tautoCastNumeric(initializerVal, rightTypeStr, leftTypeStr, varDecl.initializer)\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (translated == '___atomic_compare_exchange_result') {\n\t\t\t\t\ttranslated = '';\n\t\t\t\t}\n\n\t\t\t\treturn s([\n\t\t\t\t\t'var ',\n\t\t\t\t\tescapeIdentifier(varDecl.name.getText()),\n\t\t\t\t\ttranslated ? ': ' : '',\n\t\t\t\t\ttranslated,\n\t\t\t\t\t' = ',\n\t\t\t\t\tinitializerVal\n\t\t\t\t]);\n\t\t\t}\n\t\tcase ts.SyntaxKind.CallExpression:\n\t\t\tlet call = ast as ts.CallExpression;\n\n\t\t\tlet exprSmybol = ctx.checker.getSymbolAtLocation(call.expression);\n\t\t\tif (call.expression.getText() == 'Math.random') {\n\t\t\t\treturn s(['0.0']);\n\t\t\t}\n\t\t\tif (!exprSmybol) {\n\t\t\t\treturn s(['/* TODO: Unknown symbol */']);\n\t\t\t}\n\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\texprSmybol = ctx.checker.getAliasedSymbol(exprSmybol);\n\t\t\t}\n\t\t\tlet symName = exprSmybol?.getName() ?? call.expression.getText();\n\n\t\t\tif (ts.isIdentifier(call.expression)) {\n\t\t\t\tif (isUniformAccess(ctx, call.expression)) {\n\t\t\t\t\tlet typ = ctx.checker.getTypeAtLocation(call.expression);\n\t\t\t\t\tif (\n\t\t\t\t\t\ttyp.getSymbol().getName().startsWith('shader') ||\n\t\t\t\t\t\t(typ.aliasSymbol && typ.aliasSymbol.getName() == 'shader')\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsole.log('Uniform access to shader', typ.getSymbol().getName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (symName == '__index') {\n\t\t\t\tlet postfix = '';\n\n\t\t\t\tlet t = ctx.checker.getTypeAtLocation(\n\t\t\t\t\t(call.expression as ts.PropertyAccessExpression).expression\n\t\t\t\t);\n\n\t\t\t\tlet uniAccess = isUniformAccess(\n\t\t\t\t\tctx,\n\t\t\t\t\t(call.expression as ts.PropertyAccessExpression).expression\n\t\t\t\t);\n\n\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.expression.expression)\n\t\t\t\t\t);\n\t\t\t\t\tlet returnType = getRealReturnType(ctx.checker, call);\n\t\t\t\t\tlet vecOut = getVectorElementType(ctx.checker, returnType);\n\t\t\t\t\tlet outMask = getVectorMask(vecOut[1] as number);\n\t\t\t\t\tif (innerType == 'sampler') {\n\t\t\t\t\t\tif (ts.isCallExpression(call.expression.expression)) {\n\t\t\t\t\t\t\t// Index 2d texture\n\t\t\t\t\t\t\tlet callIndex = call.expression.expression as ts.CallExpression;\n\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t'textureLoad(',\n\t\t\t\t\t\t\t\tc(callIndex.expression),\n\t\t\t\t\t\t\t\t'_texture, ',\n\t\t\t\t\t\t\t\t...join([...callIndex.arguments.map((a) => c(a))], ','),\n\t\t\t\t\t\t\t\t', vec2<u32>(',\n\t\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t\t'), 0).' + outMask\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t'textureLoad(',\n\t\t\t\t\t\t\t\tc(call.expression.expression),\n\t\t\t\t\t\t\t\t'_texture, vec2<u32>(',\n\t\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t\t'), 0).' + outMask\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet translatedOut = translateType(ctx.checker, ctx.checker.getTypeAtLocation(call));\n\t\t\t\tif (\n\t\t\t\t\tisArrayType(t, ctx.checker) &&\n\t\t\t\t\tisUniformAccess(ctx, (call.expression as ts.PropertyAccessExpression).expression) &&\n\t\t\t\t\t!translatedOut.startsWith('mat')\n\t\t\t\t) {\n\t\t\t\t\tlet typeRef = t as ts.TypeReference;\n\n\t\t\t\t\tlet args = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n\t\t\t\t\tlet translated = translateType(ctx.checker, args[0]);\n\n\t\t\t\t\tlet typeInfo = getWGSLTypeInfo(translated);\n\n\t\t\t\t\tif (typeInfo.needsAlignment) {\n\t\t\t\t\t\ttranslated = `vec4<${typeInfo.elementType ?? 'f32'}>`;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet lengths = {\n\t\t\t\t\t\t1: 'x',\n\t\t\t\t\t\t2: 'xy',\n\t\t\t\t\t\t3: 'xyz',\n\t\t\t\t\t\t4: 'xyzw'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (typeInfo.type != 'unknown') {\n\t\t\t\t\t\tpostfix = `.${lengths[typeInfo.length ?? 1]}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn accessWrap(\n\t\t\t\t\tctx,\n\t\t\t\t\t(call.expression as ts.PropertyAccessExpression).expression,\n\t\t\t\t\ts([c(call.expression), '[', c(call.arguments[0]), ']', postfix])\n\t\t\t\t);\n\t\t\t} else if (symName == 'attr') {\n\t\t\t\tlet expr = call.expression;\n\t\t\t\tif (ts.isPropertyAccessExpression(expr)) {\n\t\t\t\t\tlet left = expr.expression;\n\t\t\t\t\tlet leftName = ctx.checker.getTypeAtLocation(left).getSymbol()?.getName() ?? '';\n\t\t\t\t\tif (leftName == 'ShaderInput') {\n\t\t\t\t\t\tif (call.arguments.length >= 1) {\n\t\t\t\t\t\t\tlet arg1 = call.arguments[0];\n\t\t\t\t\t\t\tif (ts.isCallExpression(arg1)) {\n\t\t\t\t\t\t\t\targ1 = arg1.arguments[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!ts.isNumericLiteral(arg1)) {\n\t\t\t\t\t\t\t\tthrow new GLSLCompilationError('Attribute index must be a number literal', arg1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet index = parseInt(arg1.getText());\n\t\t\t\t\t\t\tlet interpMode = 'perspective';\n\n\t\t\t\t\t\t\tif (call.arguments.length >= 2) {\n\t\t\t\t\t\t\t\tlet arg2 = call.arguments[1];\n\t\t\t\t\t\t\t\tif (ts.isStringLiteral(arg2)) {\n\t\t\t\t\t\t\t\t\tinterpMode = arg2.text;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet valType = '';\n\t\t\t\t\t\t\tif (call.typeArguments.length == 1) {\n\t\t\t\t\t\t\t\tvalType = translateType(\n\t\t\t\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.typeArguments[0])\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctx.addCustomAttribute('in', index, valType, interpMode as any);\n\t\t\t\t\t\t\treturn s(['_i_in.custom', index.toString()]);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (leftName == 'ShaderOutput') {\n\t\t\t\t\t\tif (call.arguments.length >= 2) {\n\t\t\t\t\t\t\tlet arg1 = call.arguments[0];\n\t\t\t\t\t\t\tif (ts.isCallExpression(arg1)) {\n\t\t\t\t\t\t\t\targ1 = arg1.arguments[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!ts.isNumericLiteral(arg1)) {\n\t\t\t\t\t\t\t\tthrow new GLSLCompilationError('Attribute index must be a number literal', arg1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet index = parseInt(arg1.getText());\n\n\t\t\t\t\t\t\tlet interpMode = 'perspective';\n\n\t\t\t\t\t\t\tif (call.arguments.length >= 3) {\n\t\t\t\t\t\t\t\tlet arg2 = call.arguments[2];\n\t\t\t\t\t\t\t\tif (ts.isStringLiteral(arg2)) {\n\t\t\t\t\t\t\t\t\tinterpMode = arg2.text;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet valType = translateType(\n\t\t\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.arguments[1])\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tctx.addCustomAttribute('out', index, valType, interpMode as any);\n\t\t\t\t\t\t\treturn s(['_i_out.custom', index.toString(), ' = ', c(call.arguments[1])]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (symName == 'len') {\n\t\t\t\tlet expr = call.expression;\n\t\t\t\tif (ts.isPropertyAccessExpression(expr)) {\n\t\t\t\t\tlet left = expr.expression;\n\t\t\t\t\tif (isUniformAccess(ctx, left)) {\n\t\t\t\t\t\treturn s(['_in_uniforms.', c(left), '_size']);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet arrType = ctx.checker.getTypeAtLocation(left);\n\t\t\t\t\t\tlet typeInfo = getArrayTypeInfo(ctx.checker, arrType);\n\t\t\t\t\t\treturn s([typeInfo.staticSize.toString()]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (symName == 'min' || symName == 'max') {\n\t\t\t\t// Fold min/max to wgsl functions\n\t\t\t\tif (call.arguments.length > 2) {\n\t\t\t\t\tlet args = call.arguments.map((a) => c(a));\n\t\t\t\t\twhile (args.length > 2) {\n\t\t\t\t\t\tlet left = args.shift();\n\t\t\t\t\t\tlet right = args.shift();\n\t\t\t\t\t\targs.unshift(s([symName, '(', left, ',', right, ')']));\n\t\t\t\t\t}\n\t\t\t\t\treturn s([symName, '(', ...join(args, ','), ')']);\n\t\t\t\t}\n\t\t\t} else if (symName == 'clamp') {\n\t\t\t\t// Component wise clamp\n\t\t\t\tif (call.arguments.length == 3) {\n\t\t\t\t\tlet inType = ctx.checker.getTypeAtLocation(call.arguments[0]);\n\t\t\t\t\tlet vType = translateType(ctx.checker, inType);\n\t\t\t\t\tlet vTypeInfo = getWGSLTypeInfo(vType);\n\t\t\t\t\tif (vTypeInfo.type == 'vector') {\n\t\t\t\t\t\tlet minV = call.arguments[1];\n\t\t\t\t\t\tlet maxV = call.arguments[2];\n\t\t\t\t\t\tlet minType = ctx.checker.getTypeAtLocation(minV);\n\t\t\t\t\t\tlet maxType = ctx.checker.getTypeAtLocation(maxV);\n\t\t\t\t\t\tlet minTypeInfo = getWGSLTypeInfo(translateType(ctx.checker, minType));\n\t\t\t\t\t\tlet maxTypeInfo = getWGSLTypeInfo(translateType(ctx.checker, maxType));\n\t\t\t\t\t\tif (minTypeInfo.type == 'vector' && maxTypeInfo.type == 'vector') {\n\t\t\t\t\t\t\t// Continue as normal\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet minStr = c(minV);\n\t\t\t\t\t\t\tlet maxStr = c(maxV);\n\t\t\t\t\t\t\tif (minTypeInfo.type != 'vector') {\n\t\t\t\t\t\t\t\tminStr = s([`vec${vTypeInfo.length}<${vTypeInfo.elementType}>(`, minStr, ')']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (maxTypeInfo.type != 'vector') {\n\t\t\t\t\t\t\t\tmaxStr = s([`vec${vTypeInfo.length}<${vTypeInfo.elementType}>(`, maxStr, ')']);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn s(['clamp(', c(call.arguments[0]), ',', minStr, ',', maxStr, ')']);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (symName == 'atomic') {\n\t\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t\t'Atomics cannot be constructed in shaders, create them outside or in a workgroup',\n\t\t\t\t\tcall.expression\n\t\t\t\t);\n\t\t\t} else if (symName == 'sample') {\n\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.expression.expression)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (innerType == 'sampler') {\n\t\t\t\t\t\tif (ts.isCallExpression(call.expression.expression)) {\n\t\t\t\t\t\t\t// Index 2d texture\n\t\t\t\t\t\t\tlet callIndex = call.expression.expression as ts.CallExpression;\n\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t'textureSample(',\n\t\t\t\t\t\t\t\tc(callIndex.expression),\n\t\t\t\t\t\t\t\t'_texture, ',\n\t\t\t\t\t\t\t\tc(callIndex.expression),\n\t\t\t\t\t\t\t\t',',\n\t\t\t\t\t\t\t\t'vec2(',\n\t\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t\t'),',\n\t\t\t\t\t\t\t\t...join([...callIndex.arguments.map((a) => c(a))], ','),\n\t\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t'textureSample(',\n\t\t\t\t\t\t\t\tc(call.expression.expression),\n\t\t\t\t\t\t\t\t'_texture, ',\n\t\t\t\t\t\t\t\tc(call.expression.expression),\n\t\t\t\t\t\t\t\t', vec2(',\n\t\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t\t'))'\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (symName == '__index_assign') {\n\t\t\t\tlet postfix = '';\n\n\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.expression.expression)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (innerType == 'sampler') {\n\t\t\t\t\t\tif (ts.isCallExpression(call.expression.expression)) {\n\t\t\t\t\t\t\t// Index 2d texture\n\t\t\t\t\t\t\tlet callIndex = call.expression.expression as ts.CallExpression;\n\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t'textureStore(',\n\t\t\t\t\t\t\t\tc(callIndex.expression),\n\t\t\t\t\t\t\t\t'_texture_write, ',\n\t\t\t\t\t\t\t\t...join([...callIndex.arguments.map((a) => c(a))], ','),\n\t\t\t\t\t\t\t\t', vec2<i32>(',\n\t\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t\t'), vec4(',\n\t\t\t\t\t\t\t\tautoCastParameter(call, 1),\n\t\t\t\t\t\t\t\t'))'\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t'textureStore(',\n\t\t\t\t\t\t\t\tc(call.expression.expression),\n\t\t\t\t\t\t\t\t'_texture_write, vec2<i32>(',\n\t\t\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t\t\t'), vec4(',\n\t\t\t\t\t\t\t\tautoCastParameter(call, 1),\n\t\t\t\t\t\t\t\t'))'\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet t = ctx.checker.getTypeAtLocation(\n\t\t\t\t\t(call.expression as ts.PropertyAccessExpression).expression\n\t\t\t\t);\n\n\t\t\t\treturn accessWrap(\n\t\t\t\t\tctx,\n\t\t\t\t\t(call.expression as ts.PropertyAccessExpression).expression,\n\t\t\t\t\ts([\n\t\t\t\t\t\tc((call.expression as ts.PropertyAccessExpression).expression),\n\t\t\t\t\t\t'[',\n\t\t\t\t\t\tc(call.arguments[0]),\n\t\t\t\t\t\t']',\n\t\t\t\t\t\tpostfix,\n\t\t\t\t\t\t' = ',\n\t\t\t\t\t\tautoCastParameter(call, 1)\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t} else if (symName == 'eq' && call.expression.getText() == '__.eq') {\n\t\t\t\tlet leftArg = call.arguments[0];\n\t\t\t\tlet rightArg = call.arguments[1];\n\t\t\t\tlet leftType = ctx.checker.getTypeAtLocation(leftArg);\n\t\t\t\tlet rightType = ctx.checker.getTypeAtLocation(rightArg);\n\t\t\t\tlet [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType);\n\t\t\t\tif (isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType)) {\n\t\t\t\t\treturn s([\n\t\t\t\t\t\t'squash_bool_vec',\n\t\t\t\t\t\tleftElementSize.toString(),\n\t\t\t\t\t\t'(',\n\t\t\t\t\t\tc(leftArg),\n\t\t\t\t\t\t' == ',\n\t\t\t\t\t\tc(rightArg),\n\t\t\t\t\t\t')'\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tsymName == 'rand' &&\n\t\t\t\tcall.arguments.length == 0 &&\n\t\t\t\tcall.expression.getText() == 'rand'\n\t\t\t) {\n\t\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t\t'rand() in shaders needs to be seeded, use rand(seed) instead',\n\t\t\t\t\tcall\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (exprSmybol?.getName() == 'makeVector' && exprSmybol.valueDeclaration) {\n\t\t\t\tif (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n\t\t\t\t\tlet exprSig = ctx.checker.getResolvedSignature(call);\n\t\t\t\t\tif (exprSig) {\n\t\t\t\t\t\tlet returnType = ctx.checker.getReturnTypeOfSignature(exprSig);\n\t\t\t\t\t\tlet returnTypeStr = translateType(ctx.checker, returnType);\n\t\t\t\t\t\tlet returnTypeInfo = getWGSLTypeInfo(returnTypeStr);\n\t\t\t\t\t\tlet callType = translateType(ctx.checker, returnType);\n\t\t\t\t\t\tlet info = getWGSLTypeInfo(callType);\n\n\t\t\t\t\t\tlet argStrs = [];\n\n\t\t\t\t\t\tfor (let [i, arg] of call.arguments.entries()) {\n\t\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\t\tlet argTypeStr = translateType(ctx.checker, argType);\n\t\t\t\t\t\t\tlet argTypeInfo = getWGSLTypeInfo(argTypeStr);\n\t\t\t\t\t\t\tlet paramType = ctx.checker.getTypeAtLocation(\n\t\t\t\t\t\t\t\texprSig.parameters[i].getDeclarations()[0]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tlet paramTypeStr = translateType(ctx.checker, paramType);\n\t\t\t\t\t\t\tlet paramTypeInfo = getWGSLTypeInfo(paramTypeStr);\n\t\t\t\t\t\t\tif (argTypeInfo.elementType !== returnTypeInfo.elementType) {\n\t\t\t\t\t\t\t\tparamTypeStr = `vec${argTypeInfo.length}<${returnTypeInfo.elementType}>`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\targStrs.push(autoCastNumeric(c(arg), argTypeStr, paramTypeStr, arg));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s([callType, '(', ...join(argStrs, ', '), ')']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// TODO: Please fix this swizzle check to make sure we're not just checking the name\n\t\t\tif (exprSmybol?.getName() == 'swizzle' && exprSmybol.valueDeclaration) {\n\t\t\t\tif (ts.isFunctionDeclaration(exprSmybol.valueDeclaration)) {\n\t\t\t\t\tlet exprSig = ctx.checker.getSignatureFromDeclaration(exprSmybol.valueDeclaration);\n\t\t\t\t\tlet arg = call.arguments[0];\n\t\t\t\t\tlet arg2 = call.arguments[1];\n\t\t\t\t\tlet propAccess = '';\n\t\t\t\t\tif (ts.isStringLiteral(arg2)) {\n\t\t\t\t\t\tpropAccess = arg2.text;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\tif (isVector(ctx.checker, argType)) {\n\t\t\t\t\t\tif (call.arguments.length == 2) {\n\t\t\t\t\t\t\treturn s([c(arg), '.', propAccess]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet t = s([\n\t\t\t\t\t\t\t\t'var tempVal_',\n\t\t\t\t\t\t\t\tcall.getStart().toString(),\n\t\t\t\t\t\t\t\t' = ',\n\t\t\t\t\t\t\t\tc(call.arguments[2]),\n\t\t\t\t\t\t\t\t';\\n'\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tlet assigns = [];\n\t\t\t\t\t\t\tfor (let i = 0; i < propAccess.length; i++) {\n\t\t\t\t\t\t\t\tlet char = propAccess[i];\n\t\t\t\t\t\t\t\tassigns.push(\n\t\t\t\t\t\t\t\t\ts([\n\t\t\t\t\t\t\t\t\t\tc(arg),\n\t\t\t\t\t\t\t\t\t\t'.',\n\t\t\t\t\t\t\t\t\t\tchar,\n\t\t\t\t\t\t\t\t\t\t' = ',\n\t\t\t\t\t\t\t\t\t\t'tempVal_',\n\t\t\t\t\t\t\t\t\t\tcall.getStart().toString(),\n\t\t\t\t\t\t\t\t\t\t...(propAccess.length > 1 ? ['.', char] : []),\n\t\t\t\t\t\t\t\t\t\t';\\n'\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn s([t, ...assigns]);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isNumeric(ctx.checker, argType)) {\n\t\t\t\t\t\tlet numericType = translateType(ctx.checker, argType);\n\n\t\t\t\t\t\treturn s([`shadeup_up_swizzle_${propAccess}_${numericType}(`, c(arg), ')']);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn s([c(arg), '.', propAccess]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet mutations = {\n\t\t\t\targuments: new Array<null | SourceNode>(call.arguments.length)\n\t\t\t};\n\n\t\t\tfor (let [i, arg] of call.arguments.entries()) {\n\t\t\t\tmutations.arguments[i] = null;\n\t\t\t}\n\n\t\t\tif (exprSmybol?.getName() == 'max' || exprSmybol?.getName() == 'min') {\n\t\t\t\tlet exprSig = ctx.checker.getResolvedSignature(call);\n\t\t\t\tif (exprSig && exprSig.parameters.length == 2) {\n\t\t\t\t\tlet skip = false;\n\t\t\t\t\tlet unbalanced = false;\n\t\t\t\t\tlet singleArg = -1;\n\n\t\t\t\t\tlet targetLength = 0;\n\t\t\t\t\tlet targetType = '';\n\n\t\t\t\t\tfor (let [i, arg] of call.arguments.entries()) {\n\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\tlet argTypeStr = translateType(ctx.checker, argType);\n\t\t\t\t\t\tlet argTypeInfo = getWGSLTypeInfo(argTypeStr);\n\t\t\t\t\t\tif (argTypeInfo.length === 1) {\n\t\t\t\t\t\t\tif (unbalanced) {\n\t\t\t\t\t\t\t\tskip = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tunbalanced = true;\n\t\t\t\t\t\t\tsingleArg = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (let [i, arg] of call.arguments.entries()) {\n\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\tlet argTypeStr = translateType(ctx.checker, argType);\n\t\t\t\t\t\tlet argTypeInfo = getWGSLTypeInfo(argTypeStr);\n\t\t\t\t\t\tif (argTypeInfo.length !== 1) {\n\t\t\t\t\t\t\ttargetLength = argTypeInfo.length;\n\t\t\t\t\t\t\ttargetType = argTypeInfo.elementType;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!skip && unbalanced && singleArg !== -1) {\n\t\t\t\t\t\tmutations.arguments[singleArg] = s([\n\t\t\t\t\t\t\t`vec${targetLength}<${targetType}>(`,\n\t\t\t\t\t\t\tc(call.arguments[singleArg]),\n\t\t\t\t\t\t\t`)`\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if (isTypeNameVector(exprSmybol?.getName() ?? '')) {\n\t\t\t// \treturn s([\n\t\t\t// \t\ttranslateType(ctx.checker, ctx.checker.getTypeAtLocation(call.expression)),\n\t\t\t// \t\t'(',\n\t\t\t// \t\t...join(\n\t\t\t// \t\t\tcall.arguments.map((a) => c(a)),\n\t\t\t// \t\t\t', '\n\t\t\t// \t\t),\n\t\t\t// \t\t')'\n\t\t\t// \t]);\n\t\t\t// }\n\n\t\t\tlet funcName = c(call.expression);\n\n\t\t\tlet callArgs = [];\n\t\t\tlet preArgs = [];\n\t\t\tlet exprSig = ctx.checker.getResolvedSignature(call);\n\n\t\t\tlet exprDeclar = exprSig.getDeclaration();\n\t\t\tif (exprDeclar) {\n\t\t\t\tif (ts.isMethodDeclaration(exprDeclar)) {\n\t\t\t\t\tlet isStatic = false;\n\t\t\t\t\tif (ts.canHaveModifiers(exprDeclar)) {\n\t\t\t\t\t\tlet mods = ts.getModifiers(exprDeclar);\n\t\t\t\t\t\tif (mods) {\n\t\t\t\t\t\t\tif (mods.some((m) => m.kind == ts.SyntaxKind.StaticKeyword)) {\n\t\t\t\t\t\t\t\tisStatic = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!isStatic) {\n\t\t\t\t\t\tif (ts.isPropertyAccessExpression(call.expression)) {\n\t\t\t\t\t\t\tpreArgs.push(c(call.expression.expression));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet callStr = exprSmybol.getName() + '(';\n\t\t\tfor (let [i, arg] of call.arguments.entries()) {\n\t\t\t\tlet argStr = c(arg);\n\t\t\t\tif (exprSig) {\n\t\t\t\t\tlet p = exprSig.getTypeParameterAtPosition(i);\n\t\t\t\t\tif (p) {\n\t\t\t\t\t\tlet translatedBase = translateType(ctx.checker, p);\n\t\t\t\t\t\tlet translatedPass = translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n\n\t\t\t\t\t\tcallStr += translatedBase + ' == ' + translatedPass + ',';\n\n\t\t\t\t\t\tif (isTranslatedTypeNameVectorOrScalar(translatedPass)) {\n\t\t\t\t\t\t\tif (translatedBase != translatedPass && isGLSLType(translatedBase)) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\ttranslatedBase == 'vector2' ||\n\t\t\t\t\t\t\t\t\ttranslatedBase == 'vector3' ||\n\t\t\t\t\t\t\t\t\ttranslatedBase == 'vector4'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\targStr = argStr;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\targStr = s([`${translatedBase}(`, argStr, `)`]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet translatedPass = translateType(ctx.checker, ctx.checker.getTypeAtLocation(arg));\n\n\t\t\t\t\t\tcallStr += 'any == ' + translatedPass + ',';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ts.isArrowFunction(arg)) {\n\t\t\t\t\tlet arrow = arg as ts.ArrowFunction;\n\t\t\t\t\tlet vars = getClosureVars(ctx.checker, arrow.body);\n\n\t\t\t\t\tif (vars.length > 0) callArgs.push(vars.map((v) => v.escapedName).join(', '));\n\t\t\t\t} else {\n\t\t\t\t\tlet augs = augmentArgument(ctx, arg);\n\t\t\t\t\tif (augs.length > 0) {\n\t\t\t\t\t\targStr = s([argStr, ',', ...join(augs, ',')]);\n\t\t\t\t\t}\n\t\t\t\t\tcallArgs.push(argStr);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallStr += ')';\n\n\t\t\tconst levelCalls = {\n\t\t\t\tmix: true\n\t\t\t};\n\t\t\tconst constructs = {\n\t\t\t\t'vec2<f32>': true,\n\t\t\t\t'vec3<f32>': true,\n\t\t\t\t'vec4<f32>': true,\n\t\t\t\t'vec2<i32>': true,\n\t\t\t\t'vec3<i32>': true,\n\t\t\t\t'vec4<i32>': true,\n\t\t\t\t'vec2<u32>': true,\n\t\t\t\t'vec3<u32>': true,\n\t\t\t\t'vec4<u32>': true,\n\t\t\t\t'mat2x2<f32>': true,\n\t\t\t\t'mat3x3<f32>': true,\n\t\t\t\t'mat4x4<f32>': true,\n\t\t\t\t'mat2x2<i32>': true,\n\t\t\t\t'mat3x3<i32>': true,\n\t\t\t\t'mat4x4<i32>': true\n\t\t\t};\n\n\t\t\tif (exprSmybol) {\n\t\t\t\tlet mapping = findSignatureMappingToWGSL(ctx.checker, exprSmybol);\n\t\t\t\tif (mapping !== null) {\n\t\t\t\t\tlet levelCastArguments =\n\t\t\t\t\t\tmapping.startsWith('!') ||\n\t\t\t\t\t\t(levelCalls[mapping] ?? false) ||\n\t\t\t\t\t\t(constructs[mapping] ?? false);\n\n\t\t\t\t\tif (levelCastArguments) {\n\t\t\t\t\t\t// Ensure all args are the same type (float/int)\n\t\t\t\t\t\tlet minType = '';\n\t\t\t\t\t\tlet noOp = false;\n\n\t\t\t\t\t\tfor (let arg of call.arguments) {\n\t\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\t\tlet argTypeName = translateType(ctx.checker, argType);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\targTypeName == 'f32' ||\n\t\t\t\t\t\t\t\t\targTypeName.endsWith('<f32>') ||\n\t\t\t\t\t\t\t\t\targTypeName == 'i32' ||\n\t\t\t\t\t\t\t\t\targTypeName.endsWith('<i32>')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnoOp = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (minType == '') {\n\t\t\t\t\t\t\t\tif (argTypeName == 'f32' || argTypeName.endsWith('<f32>')) {\n\t\t\t\t\t\t\t\t\tminType = 'f32';\n\t\t\t\t\t\t\t\t} else if (argTypeName == 'i32' || argTypeName.endsWith('<i32>')) {\n\t\t\t\t\t\t\t\t\tminType = 'i32';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (argTypeName == 'f32' || minType.endsWith('<f32>')) {\n\t\t\t\t\t\t\t\tminType = 'f32';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (constructs[mapping]) {\n\t\t\t\t\t\t\tnoOp = false;\n\t\t\t\t\t\t\tif (mapping.endsWith('<f32>')) {\n\t\t\t\t\t\t\t\tminType = 'f32';\n\t\t\t\t\t\t\t} else if (mapping.endsWith('<i32>')) {\n\t\t\t\t\t\t\t\tminType = 'i32';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!noOp) {\n\t\t\t\t\t\t\tfor (let i = 0; i < callArgs.length; i++) {\n\t\t\t\t\t\t\t\tlet arg = call.arguments[i];\n\t\t\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\t\t\t\t\t\t\t\tlet argTypeName = translateType(ctx.checker, argType);\n\t\t\t\t\t\t\t\tlet argTypeStripped = '';\n\t\t\t\t\t\t\t\tif (argTypeName == 'f32' || argTypeName.endsWith('<f32>')) {\n\t\t\t\t\t\t\t\t\targTypeStripped = 'f32';\n\t\t\t\t\t\t\t\t} else if (argTypeName == 'i32' || argTypeName.endsWith('<i32>')) {\n\t\t\t\t\t\t\t\t\targTypeStripped = 'i32';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (argTypeStripped != minType) {\n\t\t\t\t\t\t\t\t\tif (argTypeName.startsWith('f32') || argTypeName.startsWith('i32')) {\n\t\t\t\t\t\t\t\t\t\tcallArgs[i] = s([`${minType}(`, callArgs[i], `)`]);\n\t\t\t\t\t\t\t\t\t} else if (argTypeName.endsWith('<f32>') || argTypeName.endsWith('<i32>')) {\n\t\t\t\t\t\t\t\t\t\tlet len = argTypeName.match(/\\d+/)?.[0];\n\t\t\t\t\t\t\t\t\t\tif (len === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error('Invalid type');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcallArgs[i] = s([`vec${len}<${minType}>(`, callArgs[i], `)`]);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n\t\t\t\t\t\t// sig = ctx.checker.getResolvedSignature(exprSig);\n\t\t\t\t\t\tsig = exprSig;\n\t\t\t\t\t\t// console.log('Signature', ctx.checker.signatureToString(sig));\n\t\t\t\t\t\t// console.log('Resolved Signature', ctx.checker.signatureToString(exprSig));\n\t\t\t\t\t\tfor (let i = 0; i < callArgs.length; i++) {\n\t\t\t\t\t\t\tlet arg = call.arguments[i];\n\t\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\n\t\t\t\t\t\t\tlet paramType = ctx.checker.getTypeAtLocation(\n\t\t\t\t\t\t\t\tsig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tparamType =\n\t\t\t\t\t\t\t\tsig.getTypeParameterAtPosition(Math.min(i, sig.parameters.length - 1)) ?? paramType;\n\t\t\t\t\t\t\t// sig.parameters[Math.min(i, sig.parameters.length - 1)]\n\t\t\t\t\t\t\tlet carg = c(arg);\n\t\t\t\t\t\t\tlet augs = augmentArgument(ctx, arg);\n\t\t\t\t\t\t\tif (augs.length > 0) {\n\t\t\t\t\t\t\t\tcarg = s([carg, ',', ...join(augs, ',')]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcallArgs[i] = autoCastNumeric(\n\t\t\t\t\t\t\t\tcarg,\n\t\t\t\t\t\t\t\ttranslateType(ctx.checker, argType),\n\t\t\t\t\t\t\t\ttranslateType(ctx.checker, paramType),\n\t\t\t\t\t\t\t\targ\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (mapping.startsWith('!')) {\n\t\t\t\t\t\t// This is a raw template string\n\t\t\t\t\t\tlet template = mapping.slice(1);\n\n\t\t\t\t\t\tlet outs = [];\n\t\t\t\t\t\tlet argCounter = 0;\n\t\t\t\t\t\tlet sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n\t\t\t\t\t\tfor (let i = 0; i < callArgs.length; i++) {\n\t\t\t\t\t\t\tlet paramType = ctx.checker.getTypeAtLocation(\n\t\t\t\t\t\t\t\tsig.parameters[Math.min(i, sig.parameters.length - 1)].getDeclarations()[0]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\ttemplate = template.replace(\n\t\t\t\t\t\t\t\t'`' + argCounter + '`',\n\t\t\t\t\t\t\t\tctx.checker.typeToString(paramType)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\targCounter++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet result = template.split('$');\n\t\t\t\t\t\tfor (let r of result) {\n\t\t\t\t\t\t\tif (/^\\d+$/.test(r)) {\n\t\t\t\t\t\t\t\touts.push(callArgs[parseInt(r)]);\n\t\t\t\t\t\t\t} else if (/^\\[\\d+\\]$/.test(r)) {\n\t\t\t\t\t\t\t\tlet templateType = translateType(\n\t\t\t\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\t\t\t\tctx.checker.getTypeAtLocation(call.typeArguments[parseInt(r.slice(1, -1))])\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\touts.push(templateType);\n\t\t\t\t\t\t\t} else if (r == 'self') {\n\t\t\t\t\t\t\t\tif (call.expression.kind == ts.SyntaxKind.PropertyAccessExpression) {\n\t\t\t\t\t\t\t\t\tlet propAccess = call.expression as ts.PropertyAccessExpression;\n\t\t\t\t\t\t\t\t\touts.push(c(propAccess.getChildAt(0)));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\touts.push(c(call.expression));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\touts.push(r);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s(outs);\n\t\t\t\t\t} else if (mapping.startsWith('#')) {\n\t\t\t\t\t\t// This is a function call remapping with overloads\n\t\t\t\t\t\tlet typeName = '';\n\t\t\t\t\t\tif (call.arguments.length > 0) {\n\t\t\t\t\t\t\tlet firstArg = call.arguments[0];\n\t\t\t\t\t\t\tlet firstArgType = ctx.checker.getTypeAtLocation(firstArg);\n\t\t\t\t\t\t\ttypeName = ctx.checker.typeToString(firstArgType);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tnew SourceNode(call.expression.getStart(), call.expression.getEnd(), [\n\t\t\t\t\t\t\t\tmapping.substring(1) + typeName\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is a simple function name remapping\n\t\t\t\t\t\tfor (let [i, mutation] of mutations.arguments.entries()) {\n\t\t\t\t\t\t\tif (mutation) {\n\t\t\t\t\t\t\t\tcallArgs[i] = mutation;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tnew SourceNode(call.expression.getStart(), call.expression.getEnd(), [mapping]),\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet sig = ctx.checker.getSignatureFromDeclaration(exprSig.getDeclaration());\n\t\t\t\t\tfor (let i = 0; i < callArgs.length; i++) {\n\t\t\t\t\t\tlet arg = call.arguments[i];\n\t\t\t\t\t\tlet argType = ctx.checker.getTypeAtLocation(arg);\n\n\t\t\t\t\t\tlet paramType = ctx.checker.getTypeAtLocation(sig.parameters[i].getDeclarations()[0]);\n\t\t\t\t\t\tlet carg = c(arg);\n\t\t\t\t\t\tlet augs = augmentArgument(ctx, arg);\n\t\t\t\t\t\tif (augs.length > 0) {\n\t\t\t\t\t\t\tcarg = s([carg, ',', ...join(augs, ',')]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallArgs[i] = autoCastNumeric(\n\t\t\t\t\t\t\tcarg,\n\t\t\t\t\t\t\ttranslateType(ctx.checker, argType),\n\t\t\t\t\t\t\ttranslateType(ctx.checker, paramType),\n\t\t\t\t\t\t\targ\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (exprSmybol.declarations[0].parent) {\n\t\t\t\t\tlet param = exprSmybol.declarations[0];\n\t\t\t\t\tif (ts.isParameter(param)) {\n\t\t\t\t\t\t// We're calling an anonymous function, which means this is a composed function\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet funcDeclar = exprSmybol.valueDeclaration;\n\n\t\t\t\tif (exprSmybol.declarations[0].parent) {\n\t\t\t\t\tlet param = exprSmybol.declarations[0];\n\t\t\t\t\tif (ts.isParameter(param)) {\n\t\t\t\t\t\t// We're calling an anonymous function, which means this is a composed function\n\n\t\t\t\t\t\tlet indexOf = param.parent.parameters.indexOf(param);\n\n\t\t\t\t\t\tlet additionalArgs = [];\n\t\t\t\t\t\tif (ctx.composed) {\n\t\t\t\t\t\t\tlet realAnonymousFunc = ctx.composed.arguments[indexOf];\n\t\t\t\t\t\t\tif (ts.isArrowFunction(realAnonymousFunc)) {\n\t\t\t\t\t\t\t\tlet vars = getClosureVars(ctx.checker, realAnonymousFunc.body);\n\t\t\t\t\t\t\t\tadditionalArgs = vars.map((v) => v.escapedName);\n\n\t\t\t\t\t\t\t\tcallArgs.push(...additionalArgs);\n\n\t\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t\tfuncName,\n\t\t\t\t\t\t\t\t\t'_composed_',\n\t\t\t\t\t\t\t\t\trealAnonymousFunc.pos.toString(),\n\t\t\t\t\t\t\t\t\t'_arg_',\n\t\t\t\t\t\t\t\t\tindexOf.toString(),\n\t\t\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t) {\n\t\t\t\t\tfuncName = new SourceNode(\n\t\t\t\t\t\tcall.expression.getStart(),\n\t\t\t\t\t\tcall.expression.getEnd(),\n\t\t\t\t\t\tresolveFunctionName(funcDeclar)\n\t\t\t\t\t);\n\t\t\t\t\tlet parentDeclar = closest(ast, (n) => ts.isFunctionDeclaration(n));\n\t\t\t\t\tif (parentDeclar && ts.isFunctionDeclaration(parentDeclar)) {\n\t\t\t\t\t\t// ctx.resolveFunction(parentDeclar, funcDeclar);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// ctx.resolveFunction(null, funcDeclar);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isComposedFunction(ctx.checker, funcDeclar)) {\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tfuncName,\n\t\t\t\t\t\t\t'_composed_',\n\t\t\t\t\t\t\tcall.pos.toString(),\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\t...join([...preArgs, ...callArgs], ', '),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let [i, mutation] of mutations.arguments.entries()) {\n\t\t\t\tif (mutation) {\n\t\t\t\t\tcallArgs[i] = mutation;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s([funcName, '(', ...join([...preArgs, ...callArgs], ', '), ')']);\n\t\tcase ts.SyntaxKind.NewExpression:\n\t\t\tlet newExpr = ast as ts.NewExpression;\n\t\t\tlet newExprSymbol = getSymbolAtLocationAndFollowAliases(ctx.checker, newExpr.expression);\n\n\t\t\tlet args: SourceNode[] = [];\n\t\t\tif (newExpr.arguments?.length == 1 && ts.isObjectLiteralExpression(newExpr.arguments[0])) {\n\t\t\t\tlet object = newExpr.arguments[0];\n\t\t\t\tlet props = object.properties;\n\t\t\t\tlet sortedPropsByKey = [];\n\t\t\t\tlet structProps: [string, ts.TypeNode][] = [];\n\n\t\t\t\tnewExprSymbol?.members?.forEach((v, k) => {\n\t\t\t\t\tlet decl = v.valueDeclaration;\n\t\t\t\t\tif (decl && ts.isPropertyDeclaration(decl)) {\n\t\t\t\t\t\tstructProps.push([k?.toString() ?? '', decl.type!]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tsortedPropsByKey = structProps.sort((a, b) => {\n\t\t\t\t\treturn a[0].localeCompare(b[0]);\n\t\t\t\t});\n\n\t\t\t\targs = [\n\t\t\t\t\t...sortedPropsByKey.map((p) => {\n\t\t\t\t\t\tlet prop = props.find((p2) => {\n\t\t\t\t\t\t\tif (ts.isPropertyAssignment(p2)) {\n\t\t\t\t\t\t\t\treturn p2.name.getText() == p[0];\n\t\t\t\t\t\t\t} else if (ts.isShorthandPropertyAssignment(p2)) {\n\t\t\t\t\t\t\t\treturn p2.name.getText() == p[0];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (prop) {\n\t\t\t\t\t\t\tif (ts.isPropertyAssignment(prop)) {\n\t\t\t\t\t\t\t\tlet propType = ctx.checker.getTypeAtLocation(p[1]);\n\n\t\t\t\t\t\t\t\tlet propValType = ctx.checker.getTypeAtLocation(prop.initializer);\n\t\t\t\t\t\t\t\tlet propTypeStr = translateType(ctx.checker, propType);\n\t\t\t\t\t\t\t\tlet propValTypeStr = translateType(ctx.checker, propValType);\n\t\t\t\t\t\t\t\tconsole.log('WRite prop', propTypeStr, propValTypeStr);\n\t\t\t\t\t\t\t\tif (propTypeStr != propValTypeStr) {\n\t\t\t\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\t\t\t\t'/* ',\n\t\t\t\t\t\t\t\t\t\tp[0],\n\t\t\t\t\t\t\t\t\t\t': */ ',\n\t\t\t\t\t\t\t\t\t\tautoCastNumeric(c(prop.initializer), propValTypeStr, propTypeStr, prop),\n\t\t\t\t\t\t\t\t\t\t'\\n'\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn s(['/* ', p[0], ': */ ', c(prop.initializer), '\\n']);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (ts.isShorthandPropertyAssignment(prop)) {\n\t\t\t\t\t\t\t\treturn s(['/* ', p[0], ': */ ', c(prop.name), '\\n']);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn s(['/* ', c(prop), ': */ ', '\\n']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s(['/* ', p[0], ': */ ', generateDefaultForType(ctx.checker, p[1]), '\\n']);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tlet decl = ctx.checker.getTypeAtLocation(newExpr.expression).getSymbol()?.getDeclarations();\n\t\t\tif (decl && ts.isClassDeclaration(decl[0])) {\n\t\t\t\treturn s(['_make_struct_', resolveStructName(decl[0]), '(\\n', ...join(args, ', '), '\\n)']);\n\t\t\t} else {\n\t\t\t\treturn s(['/*', ...join(args, ', '), '*/']);\n\t\t\t}\n\t\tcase ts.SyntaxKind.ExpressionStatement:\n\t\t\tlet expr = ast as ts.ExpressionStatement;\n\t\t\treturn s([c(expr.expression), ';\\n']);\n\t\tcase ts.SyntaxKind.ObjectLiteralExpression:\n\t\t\tlet obj = ast as ts.ObjectLiteralExpression;\n\t\t\treturn s([\n\t\t\t\t'{',\n\t\t\t\t...join(\n\t\t\t\t\tobj.properties.map((p) => {\n\t\t\t\t\t\tif (ts.isPropertyAssignment(p)) {\n\t\t\t\t\t\t\treturn s([c(p.name), ': ', c(p.initializer)]);\n\t\t\t\t\t\t} else if (ts.isShorthandPropertyAssignment(p)) {\n\t\t\t\t\t\t\treturn s([c(p.name)]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn s(['/*', c(p), '*/']);\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t]);\n\n\t\tcase ts.SyntaxKind.ConditionalExpression:\n\t\t\tlet cond = ast as ts.ConditionalExpression;\n\n\t\t\tlet left = c(cond.whenTrue);\n\t\t\tlet right = c(cond.whenFalse);\n\n\t\t\tlet leftType = ctx.checker.getTypeAtLocation(cond.whenTrue);\n\t\t\tlet rightType = ctx.checker.getTypeAtLocation(cond.whenFalse);\n\n\t\t\tif (\n\t\t\t\t(isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType)) ||\n\t\t\t\t(isNumeric(ctx.checker, leftType) && isNumeric(ctx.checker, rightType))\n\t\t\t) {\n\t\t\t\tlet leftTypeStr = translateType(ctx.checker, leftType);\n\t\t\t\tlet rightTypeStr = translateType(ctx.checker, rightType);\n\t\t\t\tlet leftTypeInfo = getWGSLTypeInfo(leftTypeStr);\n\t\t\t\tlet rightTypeInfo = getWGSLTypeInfo(rightTypeStr);\n\n\t\t\t\tif (leftTypeInfo.elementType == 'f32') {\n\t\t\t\t\tright = autoCastNumeric(\n\t\t\t\t\t\tright,\n\t\t\t\t\t\ttranslateType(ctx.checker, rightType),\n\t\t\t\t\t\ttranslateType(ctx.checker, leftType),\n\t\t\t\t\t\tcond\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (rightTypeInfo.elementType == 'f32') {\n\t\t\t\t\tleft = autoCastNumeric(\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\ttranslateType(ctx.checker, leftType),\n\t\t\t\t\t\ttranslateType(ctx.checker, rightType),\n\t\t\t\t\t\tcond\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn s(['select(', right, ', ', left, ', ', c(cond.condition), ')']);\n\n\t\tcase ts.SyntaxKind.Identifier:\n\t\t\tlet id = ast as ts.Identifier;\n\t\t\tif (ts.isIdentifier(id)) {\n\t\t\t\tlet sym = ctx.checker.getSymbolAtLocation(id);\n\t\t\t\tif (sym && sym.flags & ts.SymbolFlags.Alias) {\n\t\t\t\t\tsym = ctx.checker.getAliasedSymbol(sym);\n\t\t\t\t}\n\n\t\t\t\tif (sym?.declarations?.length == 1) {\n\t\t\t\t\tlet decl = sym.declarations[0];\n\t\t\t\t\tif (isUniformable(ctx.checker, decl)) {\n\t\t\t\t\t\tif (isVariableDeclarationValue(ctx.checker, decl)) {\n\t\t\t\t\t\t\tif (!isInSameScope(decl, ast)) {\n\t\t\t\t\t\t\t\tif (!isInShader(decl)) {\n\t\t\t\t\t\t\t\t\t// If the variable is on the left side of an assignment we need to error\n\t\t\t\t\t\t\t\t\tif (ts.isBinaryExpression(ast.parent)) {\n\t\t\t\t\t\t\t\t\t\tif (ast.parent.left == ast) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t\t\t\t\t\t\t\t\t`Cannot assign to variable '${id.text.toString()}' because it is not declared in the shader`,\n\t\t\t\t\t\t\t\t\t\t\t\tast\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlet _type = ctx.checker.getTypeAtLocation(decl);\n\t\t\t\t\t\t\t\t\tlet translated = translateType(ctx.checker, _type);\n\t\t\t\t\t\t\t\t\tlet isGlobalVar = isRootNode(decl);\n\n\t\t\t\t\t\t\t\t\tlet glslVarName = `${\n\t\t\t\t\t\t\t\t\t\t!isSpecialUniformType(translated) ? '_in_uniforms.' : ''\n\t\t\t\t\t\t\t\t\t}_ext_uniform_${isGlobalVar ? 'global' : 'local'}_${id.text.toString()}`;\n\t\t\t\t\t\t\t\t\treturn s([glslVarName]);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn s([escapeIdentifier(id.text.toString())]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn s([escapeIdentifier(id.text.toString())]);\n\t\t\t} else {\n\t\t\t\treturn c((id as any).expression);\n\t\t\t}\n\t\tcase ts.SyntaxKind.PropertyAccessExpression:\n\t\t\tlet prop = ast as ts.PropertyAccessExpression;\n\t\t\tlet isStaticMember = isStaticPropertyAccessExpression(ctx.checker, prop);\n\n\t\t\tif (isStaticMember) {\n\t\t\t\treturn s([c(prop.expression), '_static_', c(prop.name)]);\n\t\t\t} else {\n\t\t\t\tlet propName = prop.name.getText();\n\t\t\t\tif (propName == '__index') {\n\t\t\t\t\treturn s([c(prop.expression)]);\n\t\t\t\t} else if (propName == 'size') {\n\t\t\t\t\tlet innerType = translateType(\n\t\t\t\t\t\tctx.checker,\n\t\t\t\t\t\tctx.checker.getTypeAtLocation(prop.expression)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (innerType == 'sampler') {\n\t\t\t\t\t\treturn s(['vec2<f32>(textureDimensions(', c(prop.expression), '_texture))']);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn s([c(prop.expression), '.', c(prop.name)]);\n\t\t\t\t}\n\t\t\t}\n\t\tcase ts.SyntaxKind.ThisKeyword:\n\t\t\treturn s(['_this']);\n\t\tcase ts.SyntaxKind.FirstLiteralToken:\n\t\t\tlet lit = ast as ts.LiteralExpression;\n\t\t\treturn s([lit.text]);\n\t\tcase ts.SyntaxKind.IfStatement:\n\t\t\tlet ifStmt = ast as ts.IfStatement;\n\t\t\tif (isIdentifier(ifStmt.expression)) {\n\t\t\t\tif (ifStmt.expression.escapedText == 'PLATFORM_WEBGPU') {\n\t\t\t\t\treturn s([c(ifStmt.thenStatement)]);\n\t\t\t\t}\n\t\t\t\tif (ifStmt.expression.escapedText == 'PLATFORM_WEBGL') {\n\t\t\t\t\tif (ifStmt.elseStatement) {\n\t\t\t\t\t\treturn s([c(ifStmt.elseStatement)]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn s(['']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet addBraces = false;\n\t\t\tif (!ts.isBlock(ifStmt.thenStatement)) {\n\t\t\t\taddBraces = true;\n\t\t\t}\n\n\t\t\treturn s([\n\t\t\t\t'if (',\n\t\t\t\tc(ifStmt.expression),\n\t\t\t\t`) ${addBraces ? '{' : ''}\\n`,\n\t\t\t\tc(ifStmt.thenStatement),\n\t\t\t\t`${addBraces ? '}' : ''}\\n`,\n\t\t\t\tifStmt.elseStatement ? s(['else \\n', c(ifStmt.elseStatement), '\\n']) : s([''])\n\t\t\t]);\n\t\tcase ts.SyntaxKind.TrueKeyword:\n\t\t\treturn s(['true']);\n\t\tcase ts.SyntaxKind.FalseKeyword:\n\t\t\treturn s(['false']);\n\t\tcase ts.SyntaxKind.PostfixUnaryExpression:\n\t\t\tlet post = ast as ts.PostfixUnaryExpression;\n\t\t\treturn s([c(post.operand), post.operator == ts.SyntaxKind.PlusPlusToken ? '++' : '--']);\n\t\tcase ts.SyntaxKind.PlusPlusToken:\n\t\t\treturn s(['++']);\n\t\tcase ts.SyntaxKind.MinusMinusToken:\n\t\t\treturn s(['--']);\n\t\tcase ts.SyntaxKind.ParenthesizedExpression:\n\t\t\tlet paren = ast as ts.ParenthesizedExpression;\n\t\t\treturn s(['(', c(paren.expression), ')']);\n\t\tcase ts.SyntaxKind.VariableDeclarationList:\n\t\t\tlet varDeclList = ast as ts.VariableDeclarationList;\n\t\t\tif (varDeclList.declarations.length > 0) {\n\t\t\t\tfor (let decl of varDeclList.declarations) {\n\t\t\t\t\tlet varDecl = decl as ts.VariableDeclaration;\n\t\t\t\t\tlet type = ctx.checker.getTypeAtLocation(varDecl);\n\t\t\t\t\tlet translated = translateType(ctx.checker, type);\n\t\t\t\t\tlet postType = ': ' + translated;\n\t\t\t\t\tif (translated == '___atomic_compare_exchange_result') {\n\t\t\t\t\t\tpostType = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn s(['var ', varDecl.name.getText(), postType, ' = ', c(varDecl.initializer!)]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn s(['']);\n\t\t\t}\n\n\t\t// throw new GLSLCompilationError(\n\t\t// \t`Cannot define declaration list in shaders, ` + ast.getFullText(),\n\t\t// \tast\n\t\t// );\n\n\t\tcase ts.SyntaxKind.ForStatement:\n\t\t\tlet forStmt = ast as ts.ForStatement;\n\n\t\t\treturn s([\n\t\t\t\t'for (',\n\t\t\t\tc(forStmt.initializer),\n\t\t\t\t';',\n\t\t\t\tc(forStmt.condition),\n\t\t\t\t';',\n\t\t\t\tc(forStmt.incrementor),\n\t\t\t\t')',\n\t\t\t\tc(forStmt.statement)\n\t\t\t]);\n\t\tcase ts.SyntaxKind.BinaryExpression:\n\t\t\tlet bin = ast as ts.BinaryExpression;\n\t\t\tlet binExprText = bin.operatorToken.getText();\n\t\t\tif (binExprText == '===') {\n\t\t\t\tbinExprText = '==';\n\t\t\t}\n\t\t\tif (bin.operatorToken.kind == ts.SyntaxKind.EqualsToken) {\n\t\t\t\t// Check for float/int casting\n\t\t\t\tlet leftType = ctx.checker.getTypeAtLocation(bin.left);\n\t\t\t\tlet rightType = ctx.checker.getTypeAtLocation(bin.right);\n\t\t\t\tif (isVector(ctx.checker, leftType) && isVector(ctx.checker, rightType)) {\n\t\t\t\t\t// debugger;\n\t\t\t\t\tlet [leftElementType, leftElementSize] = getVectorElementType(ctx.checker, leftType);\n\t\t\t\t\tlet [rightElementType, rightElementSize] = getVectorElementType(ctx.checker, rightType);\n\n\t\t\t\t\tif (leftElementType != rightElementType) {\n\t\t\t\t\t\tif (leftElementType == 'float' && rightElementType == 'int') {\n\t\t\t\t\t\t\treturn s([c(bin.left), ` = vec${leftElementSize}f(`, c(bin.right), ')']);\n\t\t\t\t\t\t} else if (leftElementType == 'int' && rightElementType == 'float') {\n\t\t\t\t\t\t\treturn s([c(bin.left), ` = vec${leftElementSize}i(`, c(bin.right), ')']);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isNumeric(ctx.checker, leftType) && isNumeric(ctx.checker, rightType)) {\n\t\t\t\t\tlet leftTypeStr = translateType(ctx.checker, leftType);\n\t\t\t\t\tlet rightTypeStr = translateType(ctx.checker, rightType);\n\t\t\t\t\tif (leftTypeStr != rightTypeStr) {\n\t\t\t\t\t\treturn s([\n\t\t\t\t\t\t\tc(bin.left),\n\t\t\t\t\t\t\t` = `,\n\t\t\t\t\t\t\tautoCastNumeric(c(bin.right), rightTypeStr, leftTypeStr, bin)\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isUniformAccess(ctx, bin.left)) {\n\t\t\t\t\tif (translateType(ctx.checker, ctx.checker.getTypeAtLocation(bin.left)) == 'bool') {\n\t\t\t\t\t\treturn s([c(bin.left), ' = select(0, 1, ', c(bin.right), ')']);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn s([c(bin.left), ' ', binExprText, ' ', c(bin.right)]);\n\t\t\t}\n\n\t\t\treturn s([c(bin.left), ' ', binExprText, ' ', c(bin.right)]);\n\t\tcase ts.SyntaxKind.StringLiteral:\n\t\t\treturn s(['0']);\n\t\tcase ts.SyntaxKind.ArrayLiteralExpression:\n\t\t\tlet arr = ast as ts.ArrayLiteralExpression;\n\t\t\treturn s([\n\t\t\t\t'array(',\n\t\t\t\t...join(\n\t\t\t\t\tarr.elements.map((e) => c(e)),\n\t\t\t\t\t', '\n\t\t\t\t),\n\t\t\t\t')'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.ElementAccessExpression:\n\t\t\tlet elem = ast as ts.ElementAccessExpression;\n\t\t\tlet t = ctx.checker.getTypeAtLocation(elem.expression);\n\t\t\tlet n = getTypeFallback(ctx.checker, t);\n\t\t\tlet postfix = '';\n\t\t\tif (\n\t\t\t\tn === 'Array' ||\n\t\t\t\t(t.flags & ts.TypeFlags.Object &&\n\t\t\t\t\t((t as any).objectFlags & ts.ObjectFlags.Tuple ||\n\t\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.ArrayLiteral ||\n\t\t\t\t\t\t(t as any).objectFlags & ts.ObjectFlags.EvolvingArray))\n\t\t\t) {\n\t\t\t\tlet typeRef = t as ts.TypeReference;\n\n\t\t\t\tlet args = typeRef.typeArguments || ctx.checker.getTypeArguments(typeRef);\n\t\t\t\tlet translated = translateType(ctx.checker, args[0]);\n\n\t\t\t\tlet typeInfo = getWGSLTypeInfo(translated);\n\t\t\t\tlet arraySize = args.length;\n\t\t\t\tif (typeInfo.needsAlignment) {\n\t\t\t\t\ttranslated = `vec4<${typeInfo.elementType ?? 'f32'}>`;\n\t\t\t\t}\n\n\t\t\t\tlet lengths = {\n\t\t\t\t\t1: 'x',\n\t\t\t\t\t2: 'xy',\n\t\t\t\t\t3: 'xyz',\n\t\t\t\t\t4: 'xyzw'\n\t\t\t\t};\n\n\t\t\t\tpostfix = `.${lengths[typeInfo.length ?? 1]}`;\n\t\t\t}\n\n\t\t\treturn s([c(elem.expression), '[', c(elem.argumentExpression), ']', postfix]);\n\n\t\tcase ts.SyntaxKind.Block:\n\t\t\tlet block = ast as ts.Block;\n\t\t\treturn s([\n\t\t\t\t'{\\n',\n\t\t\t\t...join(\n\t\t\t\t\tblock.statements.map((child) => c(child)),\n\t\t\t\t\t';'\n\t\t\t\t),\n\t\t\t\t'\\n}'\n\t\t\t]);\n\t\tcase ts.SyntaxKind.TypeOfExpression:\n\t\t\tlet typeOf = ast as ts.TypeOfExpression;\n\t\t\treturn s(['0']);\n\t\tcase ts.SyntaxKind.WhileStatement:\n\t\t\tlet whileStmt = ast as ts.WhileStatement;\n\t\t\treturn s(['while (', c(whileStmt.expression), ') ', c(whileStmt.statement)]);\n\t\tdefault:\n\t\t\tthrow new GLSLCompilationError(`Invalid shader syntax '${ast.getText()}'`, ast);\n\t}\n}\n\nfunction getClosureVars(checker: ts.TypeChecker, func: ts.ConciseBody) {\n\tlet result: ts.Symbol[] = [];\n\tlet recur = (node: ts.Node) => {\n\t\tif (node.kind == ts.SyntaxKind.Identifier) {\n\t\t\tlet id = node as ts.Identifier;\n\t\t\tlet symbol = checker.getSymbolAtLocation(id);\n\t\t\tlet declar = symbol.valueDeclaration;\n\t\t\tif (isVariableDeclarationValue(checker, declar)) {\n\t\t\t\tif (declar) {\n\t\t\t\t\tif (!isInSameScope(declar, node) && isInShader(declar)) {\n\t\t\t\t\t\tresult.push(symbol);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tnode.forEachChild(recur);\n\t\t}\n\t};\n\trecur(func);\n\treturn result;\n}\n\nfunction getDeclarationType(\n\tchecker: ts.TypeChecker,\n\tnode: ts.VariableDeclaration | ts.ParameterDeclaration\n) {\n\treturn node.type\n\t\t? checker.getTypeAtLocation(node.type)\n\t\t: node.initializer\n\t\t? checker.getTypeAtLocation(node.initializer)\n\t\t: checker.getTypeAtLocation(node);\n}\n\nfunction isArrayType(type: ts.Type, checker: ts.TypeChecker): boolean {\n\treturn (checker as any).isTupleType(type) || (checker as any).isArrayType(type);\n}\n\nfunction tsIsStatement(node: ts.Node) {\n\treturn [\n\t\tts.SyntaxKind.DoStatement,\n\t\tts.SyntaxKind.IfStatement,\n\t\tts.SyntaxKind.TryStatement,\n\t\tts.SyntaxKind.ForStatement,\n\t\tts.SyntaxKind.LastStatement,\n\t\tts.SyntaxKind.ThrowStatement,\n\t\tts.SyntaxKind.FirstStatement,\n\t\tts.SyntaxKind.WhileStatement,\n\t\tts.SyntaxKind.WithStatement,\n\t\tts.SyntaxKind.ForInStatement,\n\t\tts.SyntaxKind.ForOfStatement,\n\t\tts.SyntaxKind.BreakStatement,\n\t\tts.SyntaxKind.ContinueStatement,\n\t\tts.SyntaxKind.ReturnStatement,\n\t\tts.SyntaxKind.SwitchStatement,\n\t\tts.SyntaxKind.VariableStatement,\n\t\tts.SyntaxKind.ExpressionStatement,\n\t\tts.SyntaxKind.DebuggerStatement,\n\t\tts.SyntaxKind.EmptyStatement,\n\t\tts.SyntaxKind.LabeledStatement,\n\t\tts.SyntaxKind.ExpressionStatement\n\t].includes(node.kind);\n}\n\nexport type UniformKeyValuePair = [string, UniformValueType];\n\nexport type PrimitiveVectorSizes = '' | '2' | '3' | '4';\nexport type PrimitiveUniformType =\n\t| `float${PrimitiveVectorSizes}`\n\t| `int${PrimitiveVectorSizes}`\n\t| `uint${PrimitiveVectorSizes}`\n\t| 'bool';\n\nexport class UniformValue {\n\tvalueType: UniformValueType;\n\tvalue: any;\n\torder: number;\n\n\tconstructor(valueType: UniformValueType, value: any, order: number = 0) {\n\t\tthis.valueType = valueType;\n\t\tthis.value = value;\n\t\tthis.order = order;\n\t}\n}\n\nexport type UniformValueType =\n\t| {\n\t\t\ttype: 'array';\n\t\t\telement: UniformValueType;\n\t\t\tstaticSize?: number;\n\t  }\n\t| {\n\t\t\ttype: 'struct';\n\t\t\tfields: [string, UniformValueType];\n\t  }\n\t| {\n\t\t\ttype: 'primitive';\n\t\t\tname: PrimitiveUniformType;\n\t  }\n\t| {\n\t\t\ttype: 'primitive';\n\t\t\tname: 'texture2d' | 'rwtexture2d';\n\t\t\telement: UniformValueType;\n\t  }\n\t| {\n\t\t\ttype: 'primitive';\n\t\t\tname: 'atomic';\n\t\t\telement: UniformValueType;\n\t  };\n\nexport class WGSLShader {\n\tkey: string;\n\tsource: string;\n\tsourceMapping?: IndexMapping;\n\tglobals: [string, { fileName: string; structure: UniformValueType[] }][] = [];\n\tlocals: UniformKeyValuePair[] = [];\n\tattributeInput: string = '';\n\tattributeOutput: string = '';\n\n\tconstructor(key: string, source: string) {\n\t\tthis.key = key;\n\t\tthis.source = source;\n\t}\n}\n\nfunction resolveFunctionName(f: ts.FunctionDeclaration | ts.MethodDeclaration) {\n\tif (ts.isMethodDeclaration(f)) {\n\t\tlet parentName = 'anon';\n\t\tif (f.parent && ts.isClassDeclaration(f.parent)) {\n\t\t\tparentName = f.parent.name?.text ?? 'anon';\n\t\t}\n\t\treturn removeDoubleUnderscores(\n\t\t\t`fn_${\n\t\t\t\tf.getSourceFile()?.fileName.replaceAll('/', '_').replaceAll('.', '_') ?? 'anon'\n\t\t\t}_${f.getStart()}_${parentName}_static_${f.name.getText() ?? 'unknown'}`\n\t\t);\n\t} else {\n\t\treturn removeDoubleUnderscores(\n\t\t\t`fn_${f.getSourceFile().fileName.replaceAll('/', '_').replaceAll('.', '_')}_${f.getStart()}_${\n\t\t\t\tf.name?.text.replaceAll('.', '_dot_') ?? 'unknown'\n\t\t\t}`\n\t\t);\n\t}\n}\n\nfunction resolveStructName(c: ts.ClassDeclaration) {\n\t// These are special names that we need to preserve\n\tif (c.name?.text == 'ShaderInput') return 'ShaderInput';\n\tif (c.name?.text == 'ShaderOutput') return 'ShaderOutput';\n\n\treturn removeDoubleUnderscores(\n\t\t`str_${c.getSourceFile().fileName.replaceAll('/', '_').replaceAll('.', '_')}_${c.getStart()}_${\n\t\t\tc.name?.text ?? 'unknown'\n\t\t}`.replaceAll('__', '_i_')\n\t);\n}\n\nfunction isInSameScope(node: ts.Node, other: ts.Node) {\n\treturn (\n\t\tclosest(node, (node) => {\n\t\t\tif (\n\t\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\t\tts.isArrowFunction(node) ||\n\t\t\t\tts.isMethodDeclaration(node)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (ts.isSourceFile(node)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}) ==\n\t\tclosest(other, (node) => {\n\t\t\tif (\n\t\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\t\tts.isArrowFunction(node) ||\n\t\t\t\tts.isMethodDeclaration(node)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (ts.isSourceFile(node)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})\n\t);\n}\n\nexport function isInShader(node: ts.Node) {\n\treturn closest(node, (node) => {\n\t\tif (\n\t\t\tts.isMethodDeclaration(node) ||\n\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\tts.isArrowFunction(node)\n\t\t) {\n\t\t\tif (hasShadeupDocTag(node, 'shader')) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t});\n}\nexport function isInRoot(node: ts.Node) {\n\tlet c = closest(node, (node) => {\n\t\tif (\n\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\tts.isArrowFunction(node) ||\n\t\t\tts.isMethodDeclaration(node) ||\n\t\t\tts.isSourceFile(node)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t});\n\treturn c ? ts.isSourceFile(c) : false;\n}\n\n/**\n * Returns true if this node is a root of the source file (i.e. has no function as its parent)\n */\nfunction isRootNode(node: ts.Node) {\n\tlet parentRoot = closest(node, (node) => {\n\t\tif (\n\t\t\tts.isMethodDeclaration(node) ||\n\t\t\tts.isFunctionDeclaration(node) ||\n\t\t\tts.isArrowFunction(node)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ts.isSourceFile(node)) {\n\t\t\treturn true;\n\t\t}\n\t});\n\n\treturn parentRoot && ts.isSourceFile(parentRoot);\n}\n\ntype DepsTable = {\n\tgraph: Map<string, string[]>;\n\tfunctions: Map<string, ts.FunctionDeclaration | ts.MethodDeclaration>;\n\tstructs: Map<string, ts.ClassDeclaration>;\n\tstructsProps: Map<string, Set<string>>;\n\tglobals: Map<string, ts.VariableDeclaration>;\n\tcomposed: Map<string, ts.CallExpression>;\n};\n\nconst primitiveNames = [\n\t'int',\n\t'uint',\n\t'float',\n\t'bool',\n\t'int2',\n\t'int3',\n\t'int4',\n\t'uint2',\n\t'uint3',\n\t'uint4',\n\t'float2',\n\t'float3',\n\t'float4',\n\t'float2x2',\n\t'float3x3',\n\t'float4x4',\n\t'string',\n\t'texture2d',\n\t'atomic'\n];\n\nfunction isPrimitiveType(type: ts.Type) {\n\tlet name = type.getSymbol()?.getName();\n\treturn primitiveNames.includes(name);\n}\n\nfunction isComposedFunction(\n\tchecker: ts.TypeChecker,\n\tfunc: ts.FunctionDeclaration | ts.MethodDeclaration\n) {\n\t// A composed function is one that accepts one or more functions as arguments\n\tlet isComposed = false;\n\tfunc.parameters.forEach((param) => {\n\t\tlet type = checker.getTypeAtLocation(param);\n\t\tif (type.getCallSignatures().length > 0) {\n\t\t\tisComposed = true;\n\t\t}\n\t});\n\n\treturn isComposed;\n}\n\nfunction resolveDeps(\n\tchecker: ts.TypeChecker,\n\troot: ts.Node,\n\ttable: DepsTable = {\n\t\tgraph: new Map(),\n\t\tfunctions: new Map(),\n\t\tstructs: new Map(),\n\t\tstructsProps: new Map(),\n\t\tglobals: new Map(),\n\t\tcomposed: new Map()\n\t}\n): DepsTable {\n\tfunction resolveFunction(\n\t\tf1: ts.FunctionDeclaration | ts.MethodDeclaration | null,\n\t\tf2: ts.FunctionDeclaration | ts.MethodDeclaration,\n\t\tcall: ts.CallExpression\n\t) {\n\t\tlet n1 = f1 ? resolveFunctionName(f1) : 'main';\n\t\tlet n2 = resolveFunctionName(f2);\n\t\tif (\n\t\t\tf2.name?.getText() === '__index' ||\n\t\t\tf2.name?.getText() === '__index_assign' ||\n\t\t\tf2.name?.getText() === '__index_assign_op' ||\n\t\t\tf2.name?.getText() === 'len' ||\n\t\t\tf2.name?.getText() === 'sample' ||\n\t\t\tf2.name?.getText() === 'atomic' ||\n\t\t\thasShadeupDocTag(f2, 'noemit_gpu')\n\t\t)\n\t\t\treturn;\n\t\tif (isComposedFunction(checker, f2)) {\n\t\t\tn2 = n2 + '_composed_' + call.pos;\n\t\t\ttable.composed.set(n2, call);\n\t\t}\n\n\t\tlet deps = table.graph.get(n1) ?? [];\n\t\tif (!deps.includes(n2)) deps.push(n2);\n\t\ttable.graph.set(n1, deps);\n\n\t\ttable.functions.set(n2, f2);\n\t}\n\n\tfunction resolveStruct(decl: ts.ClassDeclaration, fullStruct: boolean = false) {\n\t\tlet name = resolveStructName(decl);\n\n\t\tif (decl.name?.text == 'atomic_internal') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (table.structs.has(name)) {\n\t\t\tif (!fullStruct) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tlet props = table.structsProps.get(name) ?? new Set();\n\n\t\tfor (let member of decl.members) {\n\t\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\t\tlet type = checker.getTypeAtLocation(member);\n\t\t\t\tresolveTypeUse(type, member);\n\n\t\t\t\tif (fullStruct) {\n\t\t\t\t\tprops.add(member.name.getText());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (fullStruct) {\n\t\t\ttable.structsProps.set(name, props);\n\t\t}\n\n\t\ttable.structs.set(name, decl);\n\t}\n\n\tfunction isValidShaderType(type: ts.Type, checker: ts.TypeChecker) {\n\t\tlet symbol = type.aliasSymbol || type.getSymbol();\n\t\tlet name = checker.typeToString(type);\n\n\t\tlet bases = type.getBaseTypes();\n\t\tif (bases && bases.length > 0) {\n\t\t\tfor (let base of bases) {\n\t\t\t\tif (!isValidShaderType(base, checker)) return false;\n\t\t\t}\n\t\t}\n\t\tif (TYPE_BLACKLIST.includes(symbol?.getName() ?? '')) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !TYPE_BLACKLIST.includes(name);\n\t}\n\n\tfunction resolveTypeUse(typeNode: ts.Type, context: ts.Node, fullStruct: boolean = false) {\n\t\tlet symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n\t\t// if (!isPrimitiveType(typeNode)) {\n\t\tif (TYPE_BLACKLIST.includes(symbol?.getName() ?? '')) {\n\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t`Type '${symbol?.getName()}' is not supported in shaders`,\n\t\t\t\tcontext\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tlet decl = symbol?.getDeclarations()?.[0];\n\t\tif (decl && ts.isClassDeclaration(decl)) {\n\t\t\tresolveStruct(decl, fullStruct);\n\t\t}\n\t\tlet typestr = checker.typeToString(typeNode);\n\t\tif (typeNode.aliasTypeArguments)\n\t\t\tfor (let args of typeNode.aliasTypeArguments) {\n\t\t\t\tresolveTypeUse(\n\t\t\t\t\targs,\n\t\t\t\t\tcontext,\n\t\t\t\t\ttypestr.startsWith('buffer<') || typestr.startsWith('buffer_internal<')\n\t\t\t\t);\n\t\t\t}\n\t\t// }\n\t}\n\n\tfunction resolvePropertyAccess(node: ts.PropertyAccessExpression) {\n\t\tlet typeNode = checker.getTypeAtLocation(node.expression);\n\t\tlet symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n\t\tlet name = checker.typeToString(typeNode);\n\t\t// if (!isPrimitiveType(typeNode)) {\n\t\tif (!isValidShaderType(typeNode, checker)) {\n\t\t\tthrow new GLSLCompilationError(\n\t\t\t\t`Type '${symbol?.getName()}' is not supported in shaders`,\n\t\t\t\tnode\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tlet full = checker.getTypeAtLocation(node).getCallSignatures().length > 0;\n\t\tresolveTypeUse(typeNode, node, full);\n\t\tresolveTypeUse(checker.getTypeAtLocation(node), node);\n\n\t\tlet prop = node.name.getText();\n\n\t\tlet decl = symbol?.getDeclarations()?.[0];\n\t\tif (decl && ts.isClassDeclaration(decl)) {\n\t\t\tlet name = resolveStructName(decl);\n\t\t\tlet props = table.structsProps.get(name) ?? new Set();\n\t\t\tprops.add(prop);\n\t\t\ttable.structsProps.set(name, props);\n\t\t}\n\t\t// }\n\t}\n\n\twalkNodes(root, (node) => {\n\t\tif (ts.isCallExpression(node)) {\n\t\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t\t}\n\t\t\tif (exprSmybol) {\n\t\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\t\t\t\tlet funcDeclarVal = exprSmybol.valueDeclaration;\n\n\t\t\t\tif (ts.isPropertyAccessExpression(node.expression)) {\n\t\t\t\t\t// if (\n\t\t\t\t\t// \tchecker.typeToString(checker.getTypeAtLocation(node.expression.expression)) ==\n\t\t\t\t\t// \t'buffer<Ball>'\n\t\t\t\t\t// ) {\n\t\t\t\t\t// \tdebugger;\n\t\t\t\t\t// }\n\t\t\t\t\tresolveTypeUse(\n\t\t\t\t\t\tchecker.getTypeAtLocation(node.expression.expression),\n\t\t\t\t\t\tnode.expression.expression\n\t\t\t\t\t);\n\t\t\t\t\t// console.log(\n\t\t\t\t\t// \t'Call to ',\n\t\t\t\t\t// \tnode.expression.expression.getText(),\n\t\t\t\t\t// \tchecker.typeToString(checker.getTypeAtLocation(node.expression.expression))\n\t\t\t\t\t// );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t) {\n\t\t\t\t\tlet mapping = findSignatureMappingToWGSL(checker, exprSmybol);\n\n\t\t\t\t\tif (mapping === null) {\n\t\t\t\t\t\tlet parentDeclar = closest(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t(n) =>\n\t\t\t\t\t\t\t\tts.isFunctionDeclaration(n) || ts.isMethodDeclaration(n) || ts.isArrowFunction(n)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (parentDeclar && ts.isArrowFunction(parentDeclar)) {\n\t\t\t\t\t\t\t// Arrow functions need their parent caller to be resolved\n\n\t\t\t\t\t\t\tlet parentParentDeclar = closest(parentDeclar, (n) => ts.isCallExpression(n));\n\t\t\t\t\t\t\tif (parentParentDeclar && ts.isCallExpression(parentParentDeclar)) {\n\t\t\t\t\t\t\t\tlet parentParentSymbol = checker.getSymbolAtLocation(parentParentDeclar.expression);\n\t\t\t\t\t\t\t\tif (parentParentSymbol && parentParentSymbol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\t\t\t\t\t\tparentParentSymbol = checker.getAliasedSymbol(parentParentSymbol);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (parentParentSymbol) {\n\t\t\t\t\t\t\t\t\tlet parentParentFuncDeclar = parentParentSymbol.getDeclarations()?.[0];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tparentParentFuncDeclar &&\n\t\t\t\t\t\t\t\t\t\t(ts.isFunctionDeclaration(parentParentFuncDeclar) ||\n\t\t\t\t\t\t\t\t\t\t\tts.isMethodDeclaration(parentParentFuncDeclar))\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tresolveFunction(parentParentFuncDeclar, funcDeclar, node);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentDeclar &&\n\t\t\t\t\t\t\t(ts.isFunctionDeclaration(parentDeclar) || ts.isMethodDeclaration(parentDeclar))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tresolveFunction(parentDeclar, funcDeclar, node);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolveFunction(null, funcDeclar, node);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!table.graph.has(resolveFunctionName(funcDeclar))) {\n\t\t\t\t\t\t\ttable.graph.set(resolveFunctionName(funcDeclar), []);\n\t\t\t\t\t\t\tresolveDeps(checker, funcDeclar, table);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet sig = checker.getSignatureFromDeclaration(funcDeclar);\n\t\t\t\t\t\tlet returnType = checker.getReturnTypeOfSignature(sig);\n\n\t\t\t\t\t\tresolveTypeUse(returnType, node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (ts.isNewExpression(node)) {\n\t\t\tresolveTypeUse(checker.getTypeAtLocation(node), node.expression, true);\n\t\t}\n\n\t\tif (ts.isPropertyAccessExpression(node)) {\n\t\t\tresolvePropertyAccess(node);\n\t\t}\n\n\t\tif (ts.isIdentifier(node)) {\n\t\t\tlet type = checker.getTypeAtLocation(node);\n\t\t\tresolveTypeUse(type, node);\n\t\t\tif (checker.getSymbolAtLocation(node)) {\n\t\t\t\tlet decl = checker.getSymbolAtLocation(node)?.declarations;\n\n\t\t\t\tif (decl && ts.isVariableDeclaration(decl[0])) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!isInSameScope(decl[0], node) &&\n\t\t\t\t\t\tdecl[0].getSourceFile().fileName !== root.getSourceFile().fileName\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (isVariableDeclarationValue(checker, decl[0])) {\n\t\t\t\t\t\t\ttable.globals.set(node.text.toString(), decl[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (ts.isVariableDeclaration(node)) {\n\t\t\tlet type = checker.getTypeAtLocation(node);\n\t\t\tresolveTypeUse(type, node);\n\t\t}\n\t});\n\n\treturn table;\n}\n\nfunction resolveUniforms(checker: ts.TypeChecker, root: ts.Node) {\n\tlet uniforms: {\n\t\tdeclaration: ts.Declaration;\n\t\tusesIndexAssign: boolean;\n\t\tusesSampler: boolean;\n\t\tusesIndexRead: boolean;\n\t}[] = [];\n\n\twalkNodesWithCalls(checker, root, (node) => {\n\t\tif (ts.isIdentifier(node)) {\n\t\t\tlet decl = checker.getSymbolAtLocation(node);\n\t\t\tif (decl && decl.flags & ts.SymbolFlags.Alias) {\n\t\t\t\tdecl = checker.getAliasedSymbol(decl);\n\t\t\t}\n\n\t\t\tif (decl && decl.declarations && decl.declarations.length == 1) {\n\t\t\t\tlet declNode = decl.declarations[0];\n\t\t\t\tif (declNode) {\n\t\t\t\t\tif (isVariableDeclarationValue(checker, declNode)) {\n\t\t\t\t\t\tif (!isInSameScope(declNode, node) && !isInShader(declNode)) {\n\t\t\t\t\t\t\tlet indexAssign = false;\n\t\t\t\t\t\t\tlet indexRead = false;\n\t\t\t\t\t\t\tlet sampler = false;\n\t\t\t\t\t\t\tlet parent = node.parent;\n\t\t\t\t\t\t\tif (parent && ts.isPropertyAccessExpression(parent)) {\n\t\t\t\t\t\t\t\tif (parent.expression == node) {\n\t\t\t\t\t\t\t\t\tif (parent.name.getText() == '__index_assign') {\n\t\t\t\t\t\t\t\t\t\tindexAssign = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (parent.name.getText() == '__index') {\n\t\t\t\t\t\t\t\t\t\tindexRead = true;\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tparent.parent &&\n\t\t\t\t\t\t\t\t\t\t\tparent.parent.parent &&\n\t\t\t\t\t\t\t\t\t\t\tts.isPropertyAccessExpression(parent.parent.parent)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\tparent.parent.parent.parent &&\n\t\t\t\t\t\t\t\t\t\t\t\tts.isBinaryExpression(parent.parent.parent.parent) &&\n\t\t\t\t\t\t\t\t\t\t\t\tparent.parent.parent.parent.left == parent.parent.parent\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\tparent.parent.parent.parent.operatorToken.kind ==\n\t\t\t\t\t\t\t\t\t\t\t\t\tts.SyntaxKind.EqualsToken\n\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tindexAssign = true;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\tparent.parent.parent.parent &&\n\t\t\t\t\t\t\t\t\t\t\t\tts.isPropertyAccessExpression(parent.parent.parent.parent)\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet propType = checker.getTypeAtLocation(parent.parent.parent);\n\t\t\t\t\t\t\t\t\t\t\t\tlet translatedPropType = translateType(checker, propType);\n\t\t\t\t\t\t\t\t\t\t\t\tif (translatedPropType.startsWith('atomic<')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (parent.parent.parent.parent.name.getText() != 'read') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tindexAssign = true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tindexRead = true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (parent.name.getText() == 'sample') {\n\t\t\t\t\t\t\t\t\t\tsampler = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet idx = uniforms.findIndex((d) => d.declaration === declNode);\n\t\t\t\t\t\t\tif (idx == -1) {\n\t\t\t\t\t\t\t\tlet translated = translateType(checker, checker.getTypeAtLocation(declNode));\n\t\t\t\t\t\t\t\tif (translated.includes('atomic<')) {\n\t\t\t\t\t\t\t\t\t// Force read_write on the buffer\n\t\t\t\t\t\t\t\t\tindexAssign = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tuniforms.push({\n\t\t\t\t\t\t\t\t\tdeclaration: declNode,\n\t\t\t\t\t\t\t\t\tusesIndexAssign: indexAssign,\n\t\t\t\t\t\t\t\t\tusesIndexRead: indexRead,\n\t\t\t\t\t\t\t\t\tusesSampler: sampler\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tuniforms[idx].usesIndexAssign = uniforms[idx].usesIndexAssign || indexAssign;\n\t\t\t\t\t\t\t\tuniforms[idx].usesIndexRead = uniforms[idx].usesIndexRead || indexRead;\n\t\t\t\t\t\t\t\tuniforms[idx].usesSampler = uniforms[idx].usesSampler || sampler;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn uniforms;\n}\n\nfunction isVariableDeclarationValue(checker: ts.TypeChecker, node: ts.Node): boolean {\n\ttry {\n\t\tif (ts.isVariableDeclaration(node) || ts.isParameter(node)) {\n\t\t\tlet type = checker.getTypeAtLocation(node);\n\t\t\tlet calls = type.getCallSignatures();\n\t\t\tif (calls.length != 0) {\n\t\t\t\tif (type.aliasSymbol) {\n\t\t\t\t\tif (type.aliasSymbol.getName() == 'shader') {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn calls.length == 0;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\nfunction isUniformable(\n\tchecker: ts.TypeChecker,\n\tdecl: ts.Declaration\n): decl is ts.VariableDeclaration | ts.ParameterDeclaration {\n\tlet exprSmybol = checker.getSymbolAtLocation(decl);\n\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t}\n\n\tif (exprSmybol) {\n\t\tlet originalDecl = exprSmybol.getDeclarations()?.[0];\n\t}\n\treturn ts.isVariableDeclaration(decl) || ts.isParameter(decl);\n}\n\nfunction isValidStructType(checker: ts.TypeChecker, type: ts.Type): boolean {\n\tlet t = translateType(checker, type);\n\treturn t != 'sampler';\n}\nexport function addWGSLShader(\n\tkey: string,\n\troot: ts.Node,\n\tchecker: ts.TypeChecker,\n\tenv: ShadeupEnvironment,\n\tisComputeShader: boolean = false,\n\tcomputeShaderSize: [number, number, number] = [1, 1, 1]\n): WGSLShader | null {\n\tlet deps = resolveDeps(checker, root);\n\tlet uniforms = resolveUniforms(checker, root);\n\n\tlet mapping = [...deps.graph.entries()]\n\t\t.map(([k, v]) => v.map((d) => [k, d] as [string, string]))\n\t\t.flat();\n\n\tlet sorted: string[] = [];\n\ttry {\n\t\tsorted = toposort(mapping).reverse();\n\t} catch (e) {\n\t\t// Cycle detected\n\n\t\tsorted = [];\n\t}\n\n\tlet preFuncs: SourceNode[] = [];\n\n\tfor (let s of deps.structs.values()) {\n\t\tlet name = resolveStructName(s);\n\t\tlet hasAnyProperty = false;\n\t\tlet sp = deps.structsProps.get(name);\n\n\t\tlet members = s.members.map((m) => {\n\t\t\tif (!ts.isPropertyDeclaration(m)) return '';\n\n\t\t\tlet type = checker.getTypeAtLocation(m);\n\t\t\tlet translated = translateType(checker, type);\n\t\t\tif (translated == 'bool') {\n\t\t\t\ttranslated = 'i32';\n\t\t\t}\n\t\t\tlet preComment = '';\n\n\t\t\tif (!sp || !sp.has(m.name.getText())) {\n\t\t\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t\t\tpreComment = `// `;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!isValidStructType(checker, type)) {\n\t\t\t\tpreComment = `// `;\n\t\t\t}\n\t\t\tif (preComment == '') {\n\t\t\t\thasAnyProperty = true;\n\t\t\t}\n\t\t\treturn new SourceNode(\n\t\t\t\tm.getStart(),\n\t\t\t\tm.getEnd(),\n\t\t\t\t`${preComment} ${isAlignable(translated) ? '@align(16) ' : ''} ${escapeIdentifier(\n\t\t\t\t\tm.name.getText()\n\t\t\t\t)}: ${translated},\\n`\n\t\t\t);\n\t\t});\n\n\t\tlet membersWithoutAlign = s.members.map((m) => {\n\t\t\tif (!ts.isPropertyDeclaration(m)) return '';\n\n\t\t\tlet type = checker.getTypeAtLocation(m);\n\t\t\tlet translated = translateType(checker, type);\n\t\t\tif (translated == 'bool') {\n\t\t\t\ttranslated = 'i32';\n\t\t\t}\n\t\t\tlet preComment = '';\n\n\t\t\tif (!sp || !sp.has(m.name.getText())) {\n\t\t\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t\t\tpreComment = `// `;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (preComment == '') {\n\t\t\t\thasAnyProperty = true;\n\t\t\t}\n\t\t\treturn new SourceNode(\n\t\t\t\tm.getStart(),\n\t\t\t\tm.getEnd(),\n\t\t\t\t`${preComment} ${escapeIdentifier(m.name.getText())}: ${translated},\\n`\n\t\t\t);\n\t\t});\n\t\tlet hasAtomic = false;\n\t\tlet memberNames = s.members\n\t\t\t.map((m) => {\n\t\t\t\tif (!ts.isPropertyDeclaration(m)) return ['', ''];\n\n\t\t\t\tlet type = checker.getTypeAtLocation(m);\n\t\t\t\tlet translated = translateType(checker, type);\n\t\t\t\tlet preComment = '';\n\n\t\t\t\tif (!sp || !sp.has(m.name.getText())) {\n\t\t\t\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t\t\t\treturn ['', ''];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (translated.startsWith('atomic<')) {\n\t\t\t\t\thasAtomic = true;\n\t\t\t\t}\n\t\t\t\treturn [escapeIdentifier(m.name.getText()), translated, m];\n\t\t\t})\n\t\t\t.filter((m) => m[0] != '')\n\t\t\t.filter((m) => {\n\t\t\t\treturn isValidStructType(checker, checker.getTypeAtLocation(m[2]));\n\t\t\t})\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn a[0].localeCompare(b[0]);\n\t\t\t});\n\n\t\tif (!hasAnyProperty) continue; // Don't emit empty structs (glsl error)\n\n\t\tif (name == 'ShaderInput' || name == 'ShaderOutput') {\n\t\t\tmembers.push(new SourceNode(s.getStart(), s.getEnd(), ['// %SHADER_' + name + '%']));\n\t\t}\n\n\t\tpreFuncs.push(\n\t\t\tnew SourceNode(s.getStart(), s.getEnd(), [`struct ${name} {\\n`, ...members, '\\n};\\n'])\n\t\t);\n\t\tif (name != 'ShaderInput' && name != 'ShaderOutput') {\n\t\t\t// We can't construct atomics in WGSL\n\t\t\tif (!hasAtomic) {\n\t\t\t\tpreFuncs.push(\n\t\t\t\t\tnew SourceNode(s.getStart(), s.getEnd(), [\n\t\t\t\t\t\t'fn _make_struct_' + name + '(',\n\t\t\t\t\t\t...memberNames.map((m) => {\n\t\t\t\t\t\t\treturn `  ${m[0]}: ${m[1]},`;\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t') -> ',\n\t\t\t\t\t\tname,\n\t\t\t\t\t\t' {\\n',\n\t\t\t\t\t\t'var _s: ',\n\t\t\t\t\t\tname,\n\t\t\t\t\t\t';\\n',\n\t\t\t\t\t\t...memberNames.map((m) => {\n\t\t\t\t\t\t\tif (m[1] == 'bool') {\n\t\t\t\t\t\t\t\treturn `  _s.${m[0]} = select(0, 1, ${m[0]});\\n`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn `  _s.${m[0]} = ${m[0]};\\n`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t'\\nreturn _s; \\n}\\n'\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet specialUniforms: ReturnType<typeof resolveUniforms> = [];\n\n\tpreFuncs.push(\n\t\tnew SourceNode(0, 0, ['struct _InUniformsStruct {\\n/*SHADEUP_UNIFORM_STRUCT_START*/\\n'])\n\t);\n\n\tlet localStrs = [];\n\tlet globalStrs = [];\n\n\tlet workgroupVars: ts.VariableDeclaration[] = [];\n\n\tlet checkDecl = (node: ts.VariableDeclaration) => {\n\t\tlet fullText = node.getSourceFile().getFullText();\n\t\tlet fullStart = node.getFullStart();\n\t\tlet prefix = `// @workgroup\\n `;\n\n\t\tlet mySelf = fullText.slice(fullStart - prefix.length, fullStart);\n\n\t\tif (mySelf.includes('@workgroup')) {\n\t\t\tworkgroupVars.push(node);\n\t\t}\n\t};\n\n\tif (ts.isArrowFunction(root)) {\n\t\tts.forEachChild(root.body, (node) => {\n\t\t\tif (\n\t\t\t\tts.isVariableDeclaration(node) ||\n\t\t\t\tts.isVariableStatement(node) ||\n\t\t\t\tts.isVariableDeclarationList\n\t\t\t) {\n\t\t\t\tif (ts.isVariableDeclaration(node)) {\n\t\t\t\t\tcheckDecl(node);\n\t\t\t\t} else if (ts.isVariableStatement(node)) {\n\t\t\t\t\tnode.declarationList.declarations.forEach((d) => {\n\t\t\t\t\t\tcheckDecl(d);\n\t\t\t\t\t});\n\t\t\t\t} else if (ts.isVariableDeclarationList(node)) {\n\t\t\t\t\tfor (let d of node.declarations) {\n\t\t\t\t\t\tcheckDecl(d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tlet globalUnis = [];\n\tlet localUnis = [];\n\tfor (let uniformData of uniforms) {\n\t\tlet u = uniformData.declaration;\n\t\tif (isUniformable(checker, u)) {\n\t\t\tlet _type = checker.getTypeAtLocation(u);\n\t\t\tlet translated = translateType(checker, _type);\n\n\t\t\tlet isGlobalVar = isRootNode(u);\n\t\t\tlet glslVarName = `_ext_uniform_${isGlobalVar ? 'global' : 'local'}_${u.name.getText()}`;\n\t\t\tlet isSpecial = isSpecialUniformType(translated);\n\n\t\t\tlet pushTo = isGlobalVar ? globalStrs : localStrs;\n\n\t\t\tif (translated.startsWith('array')) {\n\t\t\t\t// translated = translated.replace('[]', `[%${glslVarName}_size%]`);\n\t\t\t\tpushTo.push(\n\t\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), ['@align(16) ', glslVarName, '_size: i32,\\n'])\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (translated.startsWith('atomic')) {\n\t\t\t\tpushTo.push(\n\t\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), ['@align(16) ', glslVarName, '_dummy: u32,\\n'])\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (translated == 'sampler') {\n\t\t\t\tpushTo.push(\n\t\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), [\n\t\t\t\t\t\t'@align(16) ',\n\t\t\t\t\t\tglslVarName,\n\t\t\t\t\t\t'_size: vec2<f32>,\\n'\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (isSpecial) {\n\t\t\t\tif (isGlobalVar) {\n\t\t\t\t\tglobalUnis.push(uniformData);\n\t\t\t\t} else {\n\t\t\t\t\tlocalUnis.push(uniformData);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpushTo.push(\n\t\t\t\t\tnew SourceNode(u.getStart(), u.getEnd(), [\n\t\t\t\t\t\t(isAlignable(translated) ? '@align(16) ' : '') + glslVarName,\n\t\t\t\t\t\t': ',\n\t\t\t\t\t\ttranslated,\n\t\t\t\t\t\t',\\n'\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tspecialUniforms.push(...localUnis, ...globalUnis);\n\tif (localStrs.length == 0 && globalStrs.length == 0) {\n\t\tpreFuncs.push(new SourceNode(0, 0, ['', 'dummy', ': vec4<f32>,\\n']));\n\t} else {\n\t\tpreFuncs = [...preFuncs, ...localStrs, ...globalStrs];\n\t}\n\tpreFuncs.push(new SourceNode(0, 0, ['};\\n']));\n\tpreFuncs.push(\n\t\tnew SourceNode(0, 0, [\n\t\t\t'@group(%GROUP_INDEX%) @binding(1) var<uniform> _in_uniforms: _InUniformsStruct;\\n'\n\t\t])\n\t);\n\n\tlet specialUniformsCounter = 2;\n\tfor (let uniformData of specialUniforms) {\n\t\tlet u = uniformData.declaration;\n\t\tif (isUniformable(checker, u)) {\n\t\t\tlet _type = checker.getTypeAtLocation(u);\n\t\t\tlet translated = translateType(checker, _type, false, true);\n\t\t\tlet isGlobalVar = isRootNode(u);\n\t\t\tlet glslVarName = `_ext_uniform_${isGlobalVar ? 'global' : 'local'}_${u.name.getText()}`;\n\n\t\t\tlet storageType = 'storage, ';\n\t\t\tif (translated == 'sampler' || translated.startsWith('array<sampler')) {\n\t\t\t\tlet typeArgs = checker.getTypeArguments(_type as ts.TypeReference);\n\t\t\t\tif (translated.startsWith('array<sampler')) {\n\t\t\t\t\ttypeArgs = checker.getTypeArguments(typeArgs[0] as ts.TypeReference);\n\t\t\t\t}\n\t\t\t\tlet innerTranslated = translateType(checker, typeArgs[0]);\n\t\t\t\tlet innerWithVec = innerTranslated;\n\t\t\t\tlet vecRegex = /vec\\d<([^>]+)>/g;\n\t\t\t\tinnerTranslated = innerTranslated.replace(vecRegex, '$1');\n\n\t\t\t\tlet writeType = '';\n\t\t\t\tif (innerWithVec == 'vec4<f32>') {\n\t\t\t\t\twriteType = 'rgba32float';\n\t\t\t\t} else if (innerWithVec == 'vec4<i32>') {\n\t\t\t\t\twriteType = 'rgba32sint';\n\t\t\t\t} else if (innerWithVec == 'vec4<u32>') {\n\t\t\t\t\twriteType = 'rgba32uint';\n\t\t\t\t} else if (innerWithVec == 'vec3<f32>') {\n\t\t\t\t\twriteType = 'rgb32float';\n\t\t\t\t} else if (innerWithVec == 'vec3<i32>') {\n\t\t\t\t\twriteType = 'rgb32sint';\n\t\t\t\t} else if (innerWithVec == 'vec3<u32>') {\n\t\t\t\t\twriteType = 'rgb32uint';\n\t\t\t\t} else if (innerWithVec == 'vec2<f32>') {\n\t\t\t\t\twriteType = 'rg32float';\n\t\t\t\t} else if (innerWithVec == 'vec2<i32>') {\n\t\t\t\t\twriteType = 'rg32sint';\n\t\t\t\t} else if (innerWithVec == 'vec2<u32>') {\n\t\t\t\t\twriteType = 'rg32uint';\n\t\t\t\t} else if (innerWithVec == 'f32') {\n\t\t\t\t\twriteType = 'r32float';\n\t\t\t\t} else if (innerWithVec == 'i32') {\n\t\t\t\t\twriteType = 'r32sint';\n\t\t\t\t} else if (innerWithVec == 'u32') {\n\t\t\t\t\twriteType = 'r32uint';\n\t\t\t\t}\n\n\t\t\t\tlet textureKind = 'texture_2d';\n\t\t\t\tlet textureKindStorage = 'texture_storage_2d';\n\n\t\t\t\tif (isArrayType(_type, checker)) {\n\t\t\t\t\ttextureKind = 'texture_2d_array';\n\t\t\t\t\ttextureKindStorage = 'texture_storage_2d_array';\n\t\t\t\t}\n\n\t\t\t\tif (translated.startsWith('array<sampler')) {\n\t\t\t\t\ttranslated = 'sampler';\n\t\t\t\t}\n\n\t\t\t\tif (uniformData.usesSampler && uniformData.usesIndexAssign) {\n\t\t\t\t\tpreFuncs.push(\n\t\t\t\t\t\tnew SourceNode(0, 0, [\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\\n`,\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${\n\t\t\t\t\t\t\t\tspecialUniformsCounter + 1\n\t\t\t\t\t\t\t}) var ${glslVarName}: ${translated};\\n`,\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${\n\t\t\t\t\t\t\t\tspecialUniformsCounter + 2\n\t\t\t\t\t\t\t}) var ${glslVarName}_texture_write: ${textureKindStorage}<%WRITE_TYPE_${glslVarName}%, write>;\\n`\n\t\t\t\t\t\t])\n\t\t\t\t\t);\n\n\t\t\t\t\tspecialUniformsCounter += 2;\n\t\t\t\t} else if (uniformData.usesIndexAssign) {\n\t\t\t\t\tpreFuncs.push(\n\t\t\t\t\t\tnew SourceNode(0, 0, [\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\\n`,\n\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${\n\t\t\t\t\t\t\t\tspecialUniformsCounter + 1\n\t\t\t\t\t\t\t}) var ${glslVarName}_texture_write: ${textureKindStorage}<%WRITE_TYPE_${glslVarName}%, write>;\\n`\n\t\t\t\t\t\t])\n\t\t\t\t\t);\n\n\t\t\t\t\tspecialUniformsCounter += 1;\n\t\t\t\t} else if (uniformData.usesSampler || uniformData.usesIndexRead) {\n\t\t\t\t\tpreFuncs.push(\n\t\t\t\t\t\tnew SourceNode(0, 0, [\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var ${glslVarName}_texture: ${textureKind}<${innerTranslated}>;\\n`,\n\t\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${\n\t\t\t\t\t\t\t\tspecialUniformsCounter + 1\n\t\t\t\t\t\t\t}) var ${glslVarName}: ${translated};\\n`\n\t\t\t\t\t\t])\n\t\t\t\t\t);\n\n\t\t\t\t\tspecialUniformsCounter += 1;\n\t\t\t\t}\n\t\t\t} else if (translated.startsWith('atomic')) {\n\t\t\t\tpreFuncs.push(\n\t\t\t\t\tnew SourceNode(0, 0, [\n\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var<storage, read_write> ${glslVarName}: ${translated};\\n`\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t} else if (translated.startsWith('array') || translated.startsWith('buffer')) {\n\t\t\t\tlet usageType = 'read';\n\t\t\t\tif (uniformData.usesIndexAssign) {\n\t\t\t\t\tusageType = 'read_write';\n\t\t\t\t}\n\t\t\t\tpreFuncs.push(\n\t\t\t\t\tnew SourceNode(0, 0, [\n\t\t\t\t\t\t`@group(%GROUP_INDEX%) @binding(${specialUniformsCounter}) var<storage, ${usageType}> ${glslVarName}: ${translated};\\n`\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tspecialUniformsCounter++;\n\t\t}\n\t}\n\n\tfor (let workgroupVar of workgroupVars) {\n\t\t// return s([\n\t\t// \t'var ',\n\t\t// \tescapeIdentifier(varDecl.name.getText()),\n\t\t// \t': ',\n\t\t// \ttranslateType(ctx.checker, type),\n\t\t// \t' = ',\n\t\t// \tc(varDecl.initializer!)\n\t\t// ]);\n\t\tpreFuncs.push(\n\t\t\tnew SourceNode(0, 0, [\n\t\t\t\t`var<workgroup> ${escapeIdentifier(workgroupVar.name.getText())}: ${translateType(\n\t\t\t\t\tchecker,\n\t\t\t\t\tchecker.getTypeAtLocation(workgroupVar.type)\n\t\t\t\t)};\\n`\n\t\t\t])\n\t\t);\n\t}\n\n\tfor (let k of sorted) {\n\t\tif (k == 'main') continue;\n\n\t\tlet v = deps.functions.get(k);\n\t\tif (v) {\n\t\t\tlet sourceFile = v.getSourceFile();\n\t\t\tlet originalFile = env.files.find((f) => f.path == sourceFile.fileName);\n\t\t\tpreFuncs.push(\n\t\t\t\tcompile(\n\t\t\t\t\t{ parentFunction: v, checker, composed: deps.composed.get(k) ?? null },\n\t\t\t\t\tv,\n\t\t\t\t\toriginalFile?.mapping\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tlet sourceFile = root.getSourceFile();\n\tlet originalFile = env.files.find((f) => f.path == sourceFile?.fileName);\n\tlet customAttributesIn = new Map<number, [string, string]>();\n\tlet customAttributesOut = new Map<number, [string, string]>();\n\tlet main = compile(\n\t\t{\n\t\t\tchecker,\n\t\t\tisComputeShader,\n\t\t\tcomputeSize: computeShaderSize,\n\t\t\taddCustomAttribute(\n\t\t\t\ttype: 'in' | 'out',\n\t\t\t\tidx: number,\n\t\t\t\tvalType: string,\n\t\t\t\tinterp: 'flat' | 'linear' | 'perspective'\n\t\t\t) {\n\t\t\t\tif (type == 'in') {\n\t\t\t\t\tcustomAttributesIn.set(idx, [valType, interp]);\n\t\t\t\t} else if (type == 'out') {\n\t\t\t\t\tcustomAttributesOut.set(idx, [valType, interp]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\troot,\n\t\toriginalFile.mapping\n\t);\n\n\tpreFuncs.push(main);\n\n\tlet source = new SourceNode(root.getStart(), root.getEnd(), preFuncs);\n\n\tlet ss = { indexMapping: [], str: '' };\n\n\tsource.toString(ss);\n\tlet finalShaderOutput = ss.str;\n\n\tlet customIns = [];\n\tfor (let [idx, [valType, interp]] of customAttributesIn.entries()) {\n\t\tcustomIns.push(`@location(${7 + idx}) @interpolate(${interp}) custom${idx}: ${valType},\\n`);\n\t}\n\n\tfinalShaderOutput = finalShaderOutput.replace('// %SHADER_ShaderInput%\\n', customIns.join(''));\n\n\tlet customOuts = [];\n\tfor (let [idx, [valType, interp]] of customAttributesOut.entries()) {\n\t\tcustomOuts.push(`@location(${7 + idx}) @interpolate(${interp}) custom${idx}: ${valType},\\n`);\n\t}\n\n\tlet matches = wgslHeader.match(/fn ([^\\(]+)/gm);\n\n\tlet headerSplits = [];\n\n\tfor (let i = 0; i < matches.length; i++) {\n\t\tlet index = wgslHeader.indexOf(matches[i]);\n\t\tlet toIndex = i == matches.length - 1 ? wgslHeader.length : wgslHeader.indexOf(matches[i + 1]);\n\t\theaderSplits.push(wgslHeader.substring(index, toIndex));\n\t}\n\n\tlet realHeader = '';\n\tfor (let i = 0; i < headerSplits.length; i++) {\n\t\tlet headerText = headerSplits[i];\n\t\tlet fnName = headerText.match(/fn ([^\\(]+)/)?.[1];\n\n\t\tif (fnName) {\n\t\t\tif (finalShaderOutput.includes(fnName)) {\n\t\t\t\trealHeader += headerText;\n\t\t\t}\n\t\t}\n\t}\n\n\tfinalShaderOutput = realHeader + finalShaderOutput;\n\n\tlet output = new WGSLShader(`shd_${key}`, finalShaderOutput);\n\toutput.sourceMapping = ss.indexMapping;\n\toutput.attributeInput = customIns.join('');\n\toutput.attributeOutput = customOuts.join('');\n\n\tfor (let uniformData of uniforms) {\n\t\tlet u = uniformData.declaration;\n\t\tif (isUniformable(checker, u)) {\n\t\t\tlet name = u.name.getText();\n\t\t\tlet isGlobalVar = isRootNode(u);\n\t\t\tif (name) {\n\t\t\t\tlet typeOut = getDeclarationType(checker, u);\n\t\t\t\tlet typeNode = checker.getTypeAtLocation(u);\n\t\t\t\tlet symbol = typeNode.aliasSymbol || typeNode.getSymbol();\n\n\t\t\t\tlet decl = symbol?.getDeclarations()?.[0];\n\t\t\t\tlet realName = '';\n\t\t\t\tif (decl && ts.isClassDeclaration(decl)) {\n\t\t\t\t\trealName = resolveStructName(decl);\n\t\t\t\t}\n\n\t\t\t\tfunction filterProps(props: any) {\n\t\t\t\t\tif (props && props.name) {\n\t\t\t\t\t\tlet sp = deps.structsProps.get(props.name);\n\t\t\t\t\t\tlet realStruct = deps.structs.get(props.name);\n\t\t\t\t\t\tif (props.type == 'struct' && realStruct) {\n\t\t\t\t\t\t\tfor (let fi = props.fields.length - 1; fi >= 0; fi--) {\n\t\t\t\t\t\t\t\tlet f = props.fields[fi];\n\t\t\t\t\t\t\t\tif (!sp || !sp.has(f[0])) {\n\t\t\t\t\t\t\t\t\tprops.fields.splice(fi, 1);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (f[1].type == 'struct') {\n\t\t\t\t\t\t\t\t\t\tf[1] = filterProps(f[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tprops &&\n\t\t\t\t\t\t(props.type == 'buffer' || (props.type == 'primitive' && props.name == 'texture2d'))\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (uniformData.usesSampler && uniformData.usesIndexAssign) {\n\t\t\t\t\t\t\tprops.access = 'sample_write';\n\t\t\t\t\t\t} else if (uniformData.usesIndexAssign) {\n\t\t\t\t\t\t\tprops.access = 'write';\n\t\t\t\t\t\t} else if (uniformData.usesSampler) {\n\t\t\t\t\t\t\tprops.access = 'sample';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprops.access = 'read';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tprops &&\n\t\t\t\t\t\tprops.type == 'array' &&\n\t\t\t\t\t\tprops.element.type == 'primitive' &&\n\t\t\t\t\t\tprops.element.name == 'texture2d'\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (uniformData.usesSampler && uniformData.usesIndexAssign) {\n\t\t\t\t\t\t\tprops.element.access = 'sample_write';\n\t\t\t\t\t\t} else if (uniformData.usesIndexAssign) {\n\t\t\t\t\t\t\tprops.element.access = 'write';\n\t\t\t\t\t\t} else if (uniformData.usesSampler) {\n\t\t\t\t\t\t\tprops.element.access = 'sample';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprops.element.access = 'read';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn props;\n\t\t\t\t}\n\t\t\t\tif (isGlobalVar) {\n\t\t\t\t\tlet typeOut = getDeclarationType(checker, u);\n\t\t\t\t\toutput.globals.push([\n\t\t\t\t\t\tname,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfileName: getNodeSourceFileName(u),\n\t\t\t\t\t\t\tstructure: filterProps(translateType(checker, typeOut, true))\n\t\t\t\t\t\t}\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\toutput.locals.push([\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tfilterProps(translateType(checker, getDeclarationType(checker, u), true))\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n}\n\nfunction isAlignable(t: string) {\n\treturn t.startsWith('vec') || t == 'f32' || t == 'i32' || t == 'u32';\n}\n\nfunction isSpecialUniformType(t: string) {\n\treturn (\n\t\tt == 'sampler' || t.startsWith('array') || t.startsWith('buffer') || t.startsWith('atomic')\n\t);\n}\n\nfunction getNodeSourceFileName(node: ts.Node) {\n\tlet found = closest(node, (n) => ts.isSourceFile(n));\n\n\tif (found && ts.isSourceFile(found)) {\n\t\treturn found.fileName;\n\t} else {\n\t\treturn '';\n\t}\n}\n\nfunction walkNodes(node: ts.Node, cb: (node: ts.Node) => void) {\n\tcb(node);\n\tnode.forEachChild((n) => walkNodes(n, cb));\n}\n\nfunction walkNodesWithCalls(checker: ts.TypeChecker, node: ts.Node, cb: (node: ts.Node) => void) {\n\tcb(node);\n\tnode.forEachChild((n) => {\n\t\tif (ts.isCallExpression(node)) {\n\t\t\tlet exprSmybol = checker.getSymbolAtLocation(node.expression);\n\t\t\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\t\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t\t\t}\n\t\t\tif (exprSmybol) {\n\t\t\t\tlet funcDeclar = exprSmybol.getDeclarations()?.[0];\n\n\t\t\t\tif (\n\t\t\t\t\tfuncDeclar &&\n\t\t\t\t\t(ts.isFunctionDeclaration(funcDeclar) || ts.isMethodDeclaration(funcDeclar))\n\t\t\t\t) {\n\t\t\t\t\tlet mapping = findSignatureMappingToWGSL(checker, exprSmybol);\n\t\t\t\t\tif (mapping === null) {\n\t\t\t\t\t\tif (funcDeclar.body) {\n\t\t\t\t\t\t\twalkNodesWithCalls(checker, funcDeclar.body, cb);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkNodesWithCalls(checker, n, cb);\n\t});\n}\n\nfunction getTypeFlags(flags: ts.TypeFlags) {\n\tlet out = [];\n\tfor (let k in ts.TypeFlags) {\n\t\tif (flags & (ts.TypeFlags[k] as any)) {\n\t\t\tout.push(k);\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction getObjectFlags(flags: ts.ObjectFlags) {\n\tlet out = [];\n\tfor (let k in ts.ObjectFlags) {\n\t\tif (flags & (ts.ObjectFlags[k] as any)) {\n\t\t\tout.push(k);\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction getSymbolAtLocationAndFollowAliases(\n\tchecker: ts.TypeChecker,\n\tnode: ts.Node\n): ts.Symbol | undefined {\n\tlet exprSmybol = checker.getSymbolAtLocation(node);\n\tif (exprSmybol && exprSmybol.flags & ts.SymbolFlags.Alias) {\n\t\texprSmybol = checker.getAliasedSymbol(exprSmybol);\n\t}\n\treturn exprSmybol;\n}\n\n/**\n * Looks for any doc comments that instruct the translator to map a js function to a glsl function\n */\nfunction findSignatureMappingToWGSL(checker: ts.TypeChecker, sym: ts.Symbol) {\n\tlet matcher = /=(?:wgsl|univ)\\((.+)\\)$/g;\n\tif (!sym.valueDeclaration) return null;\n\tlet doc = ts.getJSDocTags(sym.valueDeclaration);\n\n\tfor (let d of doc) {\n\t\tif (d.tagName.text !== 'shadeup') continue;\n\n\t\tif (typeof d.comment === 'string') {\n\t\t\tlet matches = matcher.exec(d.comment);\n\t\t\tif (matches) {\n\t\t\t\treturn matches[1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction removeDoubleUnderscores(str: string) {\n\treturn str.replace(/__/g, '_ii');\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/main.ts",
    "content": "import { SourceMapConsumer } from 'source-map';\nimport { compile } from './generator/root';\nimport { getShadeupParser } from './parser';\nimport { AstContext } from './parser/AstContext';\n\nimport sourceMappingURL from 'source-map/lib/mappings.wasm?url';\nimport { ShadeupEnvironment } from './environment/ShadeupEnvironment';\n\nexport async function initTest() {\n\tlet env = new ShadeupEnvironment();\n\tawait env.init();\n\tawait env.writeFile(\n\t\t'/file.ts',\n\t\t`\n\timport \"./other\";\n\t`\n\t);\n\n\tlet s = '';\n\n\tawait env.writeFile(\n\t\t'/other.ts',\n\t\t`\nstruct Reference {\n\tid: int;\n}\n\nstruct BoundingBox {\n\tmin: float3;\n\tmax: float3;\n\n\treferences: Reference[3];\n}\n\nstruct Player {\n\thealth: float;\n\tpos: float2;\n\tbb: BoundingBox;\n}\n\nlet outsideRef = 1;\n\nlet x = shader {\n\tlet p = Player {\n\t\thealth: float(outsideRef),\n\t};\n};\n`\n\t);\n\tawait env.regenerate();\n\tlet errors = await env.errors();\n\tfor (let e of errors) {\n\t\tdocument.write(`<pre style=\"background: black; color: white;\">${e.message}</pre>`);\n\t\tdocument.body.style.backgroundColor = 'black';\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/parser/AstContext.ts",
    "content": "import { SyntaxNode } from 'web-tree-sitter';\nimport { GLSLShader } from '../generator/glsl';\n\ntype AstDiagnostic = {\n\tmessage: string;\n\tnode: SyntaxNode;\n};\n\nexport class AstContext {\n\tfileName: string;\n\timpls: Map<string, SyntaxNode[]> = new Map();\n\timplsFor: Map<string, SyntaxNode[]> = new Map();\n\tshaders: GLSLShader[] = [];\n\tdiagnostics: AstDiagnostic[] = [];\n\tglobals: string[] = [];\n\n\tconstructor(fileName: string) {\n\t\tthis.fileName = fileName;\n\t}\n\n\treport(node: SyntaxNode, message: string) {\n\t\tthis.diagnostics.push({ message, node });\n\t}\n\n\taddImpl(name: string, node: SyntaxNode) {\n\t\tif (this.impls.has(name)) {\n\t\t\tthis.impls.get(name)!.push(node);\n\t\t} else {\n\t\t\tthis.impls.set(name, [node]);\n\t\t}\n\t}\n\n\taddImplFor(name: string, node: SyntaxNode) {\n\t\tif (this.implsFor.has(name)) {\n\t\t\tthis.implsFor.get(name)!.push(node);\n\t\t} else {\n\t\t\tthis.implsFor.set(name, [node]);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/parser/index.ts",
    "content": "import Parser from 'web-tree-sitter';\nimport treeSitterShadeupURL from './tree-sitter-shadeup.wasm?url';\nimport treeSitterURL from 'web-tree-sitter/tree-sitter.wasm?url';\n\nlet wasm: Promise<Parser.Language> | null = null;\n\nfunction isBrowser() {\n\tif (typeof window !== 'undefined') {\n\t\treturn true;\n\t}\n\tif (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport async function getShadeupParser() {\n\t// if (typeof process === 'object') {\n\t// \t// let nodeParser = (await import('./node.cjs')).default;\n\t// \treturn nodeParser();\n\t// } else {\n\t// if (isBrowser()) {\n\n\tlet url = treeSitterURL;\n\tlet shadeUrl = treeSitterShadeupURL;\n\t// if (typeof window === 'undefined') {\n\t// \turl = './tree-sitter.wasm';\n\t// \tshadeUrl = './tree-sitter-shadeup.wasm';\n\t// }\n\t// if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n\t// \turl = treeSitterURL;\n\t// \tshadeUrl = treeSitterShadeupURL;\n\t// }\n\t// console.log('Loading parser', url, Parser);\n\tawait Parser.init({\n\t\tlocateFile(scriptName: string, scriptDirectory: string) {\n\t\t\treturn url;\n\t\t}\n\t});\n\n\tconst parser = new Parser();\n\n\tparser.setLanguage(await Parser.Language.load(shadeUrl));\n\n\treturn parser;\n\t// } else {\n\t// \t// let nodeParser = (await import('./node.cjs')).default;\n\t// \t// return nodeParser();\n\t// \treturn global.shadeupParser();\n\t// }\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/parser/node.cjs",
    "content": "const ParserNode = require('tree-sitter');\nconst ShadeupParser = require('../../../tree-sitter/bindings/node/index');\n\nmodule.exports = function () {\n\tconst parser = new ParserNode();\n\tparser.setLanguage(ShadeupParser);\n\treturn parser;\n};\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/parser/wasm.ts",
    "content": ""
  },
  {
    "path": "lang/shadeup-frontend/lib/parser/web-tree-sitter/tree-sitter.js",
    "content": "var TreeSitter = function() {\n  var initPromise;\n  var document = typeof window == 'object'\n    ? {currentScript: window.document.currentScript}\n    : null;\n\n  class Parser {\n    constructor() {\n      this.initialize();\n    }\n\n    initialize() {\n      throw new Error(\"cannot construct a Parser before calling `init()`\");\n    }\n\n    static init(moduleOptions) {\n      if (initPromise) return initPromise;\n      Module = Object.assign({}, Module, moduleOptions);\n      return initPromise = new Promise((resolveInitPromise) => {\nconst C = Module;\nconst INTERNAL = {};\nconst SIZE_OF_INT = 4;\nconst SIZE_OF_NODE = 5 * SIZE_OF_INT;\nconst SIZE_OF_POINT = 2 * SIZE_OF_INT;\nconst SIZE_OF_RANGE = 2 * SIZE_OF_INT + 2 * SIZE_OF_POINT;\nconst ZERO_POINT = {row: 0, column: 0};\nconst QUERY_WORD_REGEX = /[\\w-.]*/g;\n\nconst PREDICATE_STEP_TYPE_CAPTURE = 1;\nconst PREDICATE_STEP_TYPE_STRING = 2;\n\nconst LANGUAGE_FUNCTION_REGEX = /^_?tree_sitter_\\w+/;\n\nvar VERSION;\nvar MIN_COMPATIBLE_VERSION;\nvar TRANSFER_BUFFER;\nvar currentParseCallback;\nvar currentLogCallback;\n\nclass ParserImpl {\n  static init() {\n    TRANSFER_BUFFER = C._ts_init();\n    VERSION = getValue(TRANSFER_BUFFER, 'i32');\n    MIN_COMPATIBLE_VERSION = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n  }\n\n  initialize() {\n    C._ts_parser_new_wasm();\n    this[0] = getValue(TRANSFER_BUFFER, 'i32');\n    this[1] = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n  }\n\n  delete() {\n    C._ts_parser_delete(this[0]);\n    C._free(this[1]);\n    this[0] = 0;\n    this[1] = 0;\n  }\n\n  setLanguage(language) {\n    let address;\n    if (!language) {\n      address = 0;\n      language = null;\n    } else if (language.constructor === Language) {\n      address = language[0];\n      const version = C._ts_language_version(address);\n      if (version < MIN_COMPATIBLE_VERSION || VERSION < version) {\n        throw new Error(\n          `Incompatible language version ${version}. ` +\n          `Compatibility range ${MIN_COMPATIBLE_VERSION} through ${VERSION}.`\n        );\n      }\n    } else {\n      throw new Error('Argument must be a Language');\n    }\n    this.language = language;\n    C._ts_parser_set_language(this[0], address);\n    return this;\n  }\n\n  getLanguage() {\n    return this.language\n  }\n\n  parse(callback, oldTree, options) {\n    if (typeof callback === 'string') {\n      currentParseCallback = (index, _, endIndex) => callback.slice(index, endIndex);\n    } else if (typeof callback === 'function') {\n      currentParseCallback = callback;\n    } else {\n      throw new Error(\"Argument must be a string or a function\");\n    }\n\n    if (this.logCallback) {\n      currentLogCallback = this.logCallback;\n      C._ts_parser_enable_logger_wasm(this[0], 1);\n    } else {\n      currentLogCallback = null;\n      C._ts_parser_enable_logger_wasm(this[0], 0);\n    }\n\n    let rangeCount = 0;\n    let rangeAddress = 0;\n    if (options && options.includedRanges) {\n      rangeCount = options.includedRanges.length;\n      rangeAddress = C._calloc(rangeCount, SIZE_OF_RANGE);\n      let address = rangeAddress;\n      for (let i = 0; i < rangeCount; i++) {\n        marshalRange(address, options.includedRanges[i]);\n        address += SIZE_OF_RANGE;\n      }\n    }\n\n    const treeAddress = C._ts_parser_parse_wasm(\n      this[0],\n      this[1],\n      oldTree ? oldTree[0] : 0,\n      rangeAddress,\n      rangeCount\n    );\n\n    if (!treeAddress) {\n      currentParseCallback = null;\n      currentLogCallback = null;\n      throw new Error('Parsing failed');\n    }\n\n    const result = new Tree(INTERNAL, treeAddress, this.language, currentParseCallback);\n    currentParseCallback = null;\n    currentLogCallback = null;\n    return result;\n  }\n\n  reset() {\n    C._ts_parser_reset(this[0]);\n  }\n\n  setTimeoutMicros(timeout) {\n    C._ts_parser_set_timeout_micros(this[0], timeout);\n  }\n\n  getTimeoutMicros() {\n    return C._ts_parser_timeout_micros(this[0]);\n  }\n\n  setLogger(callback) {\n    if (!callback) {\n      callback = null;\n    } else if (typeof callback !== \"function\") {\n      throw new Error(\"Logger callback must be a function\");\n    }\n    this.logCallback = callback;\n    return this;\n  }\n\n  getLogger() {\n    return this.logCallback;\n  }\n}\n\nclass Tree {\n  constructor(internal, address, language, textCallback) {\n    assertInternal(internal);\n    this[0] = address;\n    this.language = language;\n    this.textCallback = textCallback;\n  }\n\n  copy() {\n    const address = C._ts_tree_copy(this[0]);\n    return new Tree(INTERNAL, address, this.language, this.textCallback);\n  }\n\n  delete() {\n    C._ts_tree_delete(this[0]);\n    this[0] = 0;\n  }\n\n  edit(edit) {\n    marshalEdit(edit);\n    C._ts_tree_edit_wasm(this[0]);\n  }\n\n  get rootNode() {\n    C._ts_tree_root_node_wasm(this[0]);\n    return unmarshalNode(this);\n  }\n\n  getLanguage() {\n    return this.language;\n  }\n\n  walk() {\n    return this.rootNode.walk();\n  }\n\n  getChangedRanges(other) {\n    if (other.constructor !== Tree) {\n      throw new TypeError('Argument must be a Tree');\n    }\n\n    C._ts_tree_get_changed_ranges_wasm(this[0], other[0]);\n    const count = getValue(TRANSFER_BUFFER, 'i32');\n    const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n    const result = new Array(count);\n    if (count > 0) {\n      let address = buffer;\n      for (let i = 0; i < count; i++) {\n        result[i] = unmarshalRange(address);\n        address += SIZE_OF_RANGE;\n      }\n      C._free(buffer);\n    }\n    return result;\n  }\n}\n\nclass Node {\n  constructor(internal, tree) {\n    assertInternal(internal);\n    this.tree = tree;\n  }\n\n  get typeId() {\n    marshalNode(this);\n    return C._ts_node_symbol_wasm(this.tree[0]);\n  }\n\n  get type() {\n    return this.tree.language.types[this.typeId] || 'ERROR';\n  }\n\n  get endPosition() {\n    marshalNode(this);\n    C._ts_node_end_point_wasm(this.tree[0]);\n    return unmarshalPoint(TRANSFER_BUFFER);\n  }\n\n  get endIndex() {\n    marshalNode(this);\n    return C._ts_node_end_index_wasm(this.tree[0]);\n  }\n\n  get text() {\n    return getText(this.tree, this.startIndex, this.endIndex);\n  }\n\n  isNamed() {\n    marshalNode(this);\n    return C._ts_node_is_named_wasm(this.tree[0]) === 1;\n  }\n\n  hasError() {\n    marshalNode(this);\n    return C._ts_node_has_error_wasm(this.tree[0]) === 1;\n  }\n\n  hasChanges() {\n    marshalNode(this);\n    return C._ts_node_has_changes_wasm(this.tree[0]) === 1;\n  }\n\n  isMissing() {\n    marshalNode(this);\n    return C._ts_node_is_missing_wasm(this.tree[0]) === 1;\n  }\n\n  equals(other) {\n    return this.id === other.id;\n  }\n\n  child(index) {\n    marshalNode(this);\n    C._ts_node_child_wasm(this.tree[0], index);\n    return unmarshalNode(this.tree);\n  }\n\n  namedChild(index) {\n    marshalNode(this);\n    C._ts_node_named_child_wasm(this.tree[0], index);\n    return unmarshalNode(this.tree);\n  }\n\n  childForFieldId(fieldId) {\n    marshalNode(this);\n    C._ts_node_child_by_field_id_wasm(this.tree[0], fieldId);\n    return unmarshalNode(this.tree);\n  }\n\n  childForFieldName(fieldName) {\n    const fieldId = this.tree.language.fields.indexOf(fieldName);\n    if (fieldId !== -1) return this.childForFieldId(fieldId);\n  }\n\n  get childCount() {\n    marshalNode(this);\n    return C._ts_node_child_count_wasm(this.tree[0]);\n  }\n\n  get namedChildCount() {\n    marshalNode(this);\n    return C._ts_node_named_child_count_wasm(this.tree[0]);\n  }\n\n  get firstChild() {\n    return this.child(0);\n  }\n\n  get firstNamedChild() {\n    return this.namedChild(0);\n  }\n\n  get lastChild() {\n    return this.child(this.childCount - 1);\n  }\n\n  get lastNamedChild() {\n    return this.namedChild(this.namedChildCount - 1);\n  }\n\n  get children() {\n    if (!this._children) {\n      marshalNode(this);\n      C._ts_node_children_wasm(this.tree[0]);\n      const count = getValue(TRANSFER_BUFFER, 'i32');\n      const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n      this._children = new Array(count);\n      if (count > 0) {\n        let address = buffer;\n        for (let i = 0; i < count; i++) {\n          this._children[i] = unmarshalNode(this.tree, address);\n          address += SIZE_OF_NODE;\n        }\n        C._free(buffer);\n      }\n    }\n    return this._children;\n  }\n\n  get namedChildren() {\n    if (!this._namedChildren) {\n      marshalNode(this);\n      C._ts_node_named_children_wasm(this.tree[0]);\n      const count = getValue(TRANSFER_BUFFER, 'i32');\n      const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n      this._namedChildren = new Array(count);\n      if (count > 0) {\n        let address = buffer;\n        for (let i = 0; i < count; i++) {\n          this._namedChildren[i] = unmarshalNode(this.tree, address);\n          address += SIZE_OF_NODE;\n        }\n        C._free(buffer);\n      }\n    }\n    return this._namedChildren;\n  }\n\n  descendantsOfType(types, startPosition, endPosition) {\n    if (!Array.isArray(types)) types = [types];\n    if (!startPosition) startPosition = ZERO_POINT;\n    if (!endPosition) endPosition = ZERO_POINT;\n\n    // Convert the type strings to numeric type symbols.\n    const symbols = [];\n    const typesBySymbol = this.tree.language.types;\n    for (let i = 0, n = typesBySymbol.length; i < n; i++) {\n      if (types.includes(typesBySymbol[i])) {\n        symbols.push(i);\n      }\n    }\n\n    // Copy the array of symbols to the WASM heap.\n    const symbolsAddress = C._malloc(SIZE_OF_INT * symbols.length);\n    for (let i = 0, n = symbols.length; i < n; i++) {\n      setValue(symbolsAddress + i * SIZE_OF_INT, symbols[i], 'i32');\n    }\n\n    // Call the C API to compute the descendants.\n    marshalNode(this);\n    C._ts_node_descendants_of_type_wasm(\n      this.tree[0],\n      symbolsAddress,\n      symbols.length,\n      startPosition.row,\n      startPosition.column,\n      endPosition.row,\n      endPosition.column\n    );\n\n    // Instantiate the nodes based on the data returned.\n    const descendantCount = getValue(TRANSFER_BUFFER, 'i32');\n    const descendantAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n    const result = new Array(descendantCount);\n    if (descendantCount > 0) {\n      let address = descendantAddress;\n      for (let i = 0; i < descendantCount; i++) {\n        result[i] = unmarshalNode(this.tree, address);\n        address += SIZE_OF_NODE;\n      }\n    }\n\n    // Free the intermediate buffers\n    C._free(descendantAddress);\n    C._free(symbolsAddress);\n    return result;\n  }\n\n  get nextSibling() {\n    marshalNode(this);\n    C._ts_node_next_sibling_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  get previousSibling() {\n    marshalNode(this);\n    C._ts_node_prev_sibling_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  get nextNamedSibling() {\n    marshalNode(this);\n    C._ts_node_next_named_sibling_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  get previousNamedSibling() {\n    marshalNode(this);\n    C._ts_node_prev_named_sibling_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  get parent() {\n    marshalNode(this);\n    C._ts_node_parent_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  descendantForIndex(start, end = start) {\n    if (typeof start !== 'number' || typeof end !== 'number') {\n      throw new Error('Arguments must be numbers');\n    }\n\n    marshalNode(this);\n    let address = TRANSFER_BUFFER + SIZE_OF_NODE;\n    setValue(address, start, 'i32');\n    setValue(address + SIZE_OF_INT, end, 'i32');\n    C._ts_node_descendant_for_index_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  namedDescendantForIndex(start, end = start) {\n    if (typeof start !== 'number' || typeof end !== 'number') {\n      throw new Error('Arguments must be numbers');\n    }\n\n    marshalNode(this);\n    let address = TRANSFER_BUFFER + SIZE_OF_NODE;\n    setValue(address, start, 'i32');\n    setValue(address + SIZE_OF_INT, end, 'i32');\n    C._ts_node_named_descendant_for_index_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  descendantForPosition(start, end = start) {\n    if (!isPoint(start) || !isPoint(end)) {\n      throw new Error('Arguments must be {row, column} objects');\n    }\n\n    marshalNode(this);\n    let address = TRANSFER_BUFFER + SIZE_OF_NODE;\n    marshalPoint(address, start);\n    marshalPoint(address + SIZE_OF_POINT, end);\n    C._ts_node_descendant_for_position_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  namedDescendantForPosition(start, end = start) {\n    if (!isPoint(start) || !isPoint(end)) {\n      throw new Error('Arguments must be {row, column} objects');\n    }\n\n    marshalNode(this);\n    let address = TRANSFER_BUFFER + SIZE_OF_NODE;\n    marshalPoint(address, start);\n    marshalPoint(address + SIZE_OF_POINT, end);\n    C._ts_node_named_descendant_for_position_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  walk() {\n    marshalNode(this);\n    C._ts_tree_cursor_new_wasm(this.tree[0]);\n    return new TreeCursor(INTERNAL, this.tree);\n  }\n\n  toString() {\n    marshalNode(this);\n    const address = C._ts_node_to_string_wasm(this.tree[0]);\n    const result = AsciiToString(address);\n    C._free(address);\n    return result;\n  }\n}\n\nclass TreeCursor {\n  constructor(internal, tree) {\n    assertInternal(internal);\n    this.tree = tree;\n    unmarshalTreeCursor(this);\n  }\n\n  delete() {\n    marshalTreeCursor(this);\n    C._ts_tree_cursor_delete_wasm(this.tree[0]);\n    this[0] = this[1] = this[2] = 0;\n  }\n\n  reset(node) {\n    marshalNode(node);\n    marshalTreeCursor(this, TRANSFER_BUFFER + SIZE_OF_NODE);\n    C._ts_tree_cursor_reset_wasm(this.tree[0]);\n    unmarshalTreeCursor(this);\n  }\n\n  get nodeType() {\n    return this.tree.language.types[this.nodeTypeId] || 'ERROR';\n  }\n\n  get nodeTypeId() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]);\n  }\n\n  get nodeId() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_current_node_id_wasm(this.tree[0]);\n  }\n\n  get nodeIsNamed() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]) === 1;\n  }\n\n  get nodeIsMissing() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]) === 1;\n  }\n\n  get nodeText() {\n    marshalTreeCursor(this);\n    const startIndex = C._ts_tree_cursor_start_index_wasm(this.tree[0]);\n    const endIndex = C._ts_tree_cursor_end_index_wasm(this.tree[0]);\n    return getText(this.tree, startIndex, endIndex);\n  }\n\n  get startPosition() {\n    marshalTreeCursor(this);\n    C._ts_tree_cursor_start_position_wasm(this.tree[0]);\n    return unmarshalPoint(TRANSFER_BUFFER);\n  }\n\n  get endPosition() {\n    marshalTreeCursor(this);\n    C._ts_tree_cursor_end_position_wasm(this.tree[0]);\n    return unmarshalPoint(TRANSFER_BUFFER);\n  }\n\n  get startIndex() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_start_index_wasm(this.tree[0]);\n  }\n\n  get endIndex() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_end_index_wasm(this.tree[0]);\n  }\n\n  currentNode() {\n    marshalTreeCursor(this);\n    C._ts_tree_cursor_current_node_wasm(this.tree[0]);\n    return unmarshalNode(this.tree);\n  }\n\n  currentFieldId() {\n    marshalTreeCursor(this);\n    return C._ts_tree_cursor_current_field_id_wasm(this.tree[0]);\n  }\n\n  currentFieldName() {\n    return this.tree.language.fields[this.currentFieldId()];\n  }\n\n  gotoFirstChild() {\n    marshalTreeCursor(this);\n    const result = C._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);\n    unmarshalTreeCursor(this);\n    return result === 1;\n  }\n\n  gotoNextSibling() {\n    marshalTreeCursor(this);\n    const result = C._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);\n    unmarshalTreeCursor(this);\n    return result === 1;\n  }\n\n  gotoParent() {\n    marshalTreeCursor(this);\n    const result = C._ts_tree_cursor_goto_parent_wasm(this.tree[0]);\n    unmarshalTreeCursor(this);\n    return result === 1;\n  }\n}\n\nclass Language {\n  constructor(internal, address) {\n    assertInternal(internal);\n    this[0] = address;\n    this.types = new Array(C._ts_language_symbol_count(this[0]));\n    for (let i = 0, n = this.types.length; i < n; i++) {\n      if (C._ts_language_symbol_type(this[0], i) < 2) {\n        this.types[i] = UTF8ToString(C._ts_language_symbol_name(this[0], i));\n      }\n    }\n    this.fields = new Array(C._ts_language_field_count(this[0]) + 1);\n    for (let i = 0, n = this.fields.length; i < n; i++) {\n      const fieldName = C._ts_language_field_name_for_id(this[0], i);\n      if (fieldName !== 0) {\n        this.fields[i] = UTF8ToString(fieldName);\n      } else {\n        this.fields[i] = null;\n      }\n    }\n  }\n\n  get version() {\n    return C._ts_language_version(this[0]);\n  }\n\n  get fieldCount() {\n    return this.fields.length - 1;\n  }\n\n  fieldIdForName(fieldName) {\n    const result = this.fields.indexOf(fieldName);\n    if (result !== -1) {\n      return result;\n    } else {\n      return null;\n    }\n  }\n\n  fieldNameForId(fieldId) {\n    return this.fields[fieldId] || null;\n  }\n\n  idForNodeType(type, named) {\n    const typeLength = lengthBytesUTF8(type);\n    const typeAddress = C._malloc(typeLength + 1);\n    stringToUTF8(type, typeAddress, typeLength + 1);\n    const result = C._ts_language_symbol_for_name(this[0], typeAddress, typeLength, named);\n    C._free(typeAddress);\n    return result || null;\n  }\n\n  get nodeTypeCount() {\n    return C._ts_language_symbol_count(this[0]);\n  }\n\n  nodeTypeForId(typeId) {\n    const name = C._ts_language_symbol_name(this[0], typeId);\n    return name ? UTF8ToString(name) : null;\n  }\n\n  nodeTypeIsNamed(typeId) {\n    return C._ts_language_type_is_named_wasm(this[0], typeId) ? true : false;\n  }\n\n  nodeTypeIsVisible(typeId) {\n    return C._ts_language_type_is_visible_wasm(this[0], typeId) ? true : false;\n  }\n\n  query(source) {\n    const sourceLength = lengthBytesUTF8(source);\n    const sourceAddress = C._malloc(sourceLength + 1);\n    stringToUTF8(source, sourceAddress, sourceLength + 1);\n    const address = C._ts_query_new(\n      this[0],\n      sourceAddress,\n      sourceLength,\n      TRANSFER_BUFFER,\n      TRANSFER_BUFFER + SIZE_OF_INT\n    );\n\n    if (!address) {\n      const errorId = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n      const errorByte = getValue(TRANSFER_BUFFER, 'i32');\n      const errorIndex = UTF8ToString(sourceAddress, errorByte).length;\n      const suffix = source.substr(errorIndex, 100).split('\\n')[0];\n      let word = suffix.match(QUERY_WORD_REGEX)[0];\n      let error;\n      switch (errorId) {\n        case 2:\n          error = new RangeError(`Bad node name '${word}'`);\n          break;\n        case 3:\n          error = new RangeError(`Bad field name '${word}'`);\n          break;\n        case 4:\n          error = new RangeError(`Bad capture name @${word}`);\n          break;\n        case 5:\n          error = new TypeError(`Bad pattern structure at offset ${errorIndex}: '${suffix}'...`);\n          word = \"\";\n          break;\n        default:\n          error = new SyntaxError(`Bad syntax at offset ${errorIndex}: '${suffix}'...`);\n          word = \"\";\n          break;\n      }\n      error.index = errorIndex;\n      error.length = word.length;\n      C._free(sourceAddress);\n      throw error;\n    }\n\n    const stringCount = C._ts_query_string_count(address);\n    const captureCount = C._ts_query_capture_count(address);\n    const patternCount = C._ts_query_pattern_count(address);\n    const captureNames = new Array(captureCount);\n    const stringValues = new Array(stringCount);\n\n    for (let i = 0; i < captureCount; i++) {\n      const nameAddress = C._ts_query_capture_name_for_id(\n        address,\n        i,\n        TRANSFER_BUFFER\n      );\n      const nameLength = getValue(TRANSFER_BUFFER, 'i32');\n      captureNames[i] = UTF8ToString(nameAddress, nameLength);\n    }\n\n    for (let i = 0; i < stringCount; i++) {\n      const valueAddress = C._ts_query_string_value_for_id(\n        address,\n        i,\n        TRANSFER_BUFFER\n      );\n      const nameLength = getValue(TRANSFER_BUFFER, 'i32');\n      stringValues[i] = UTF8ToString(valueAddress, nameLength);\n    }\n\n    const setProperties = new Array(patternCount);\n    const assertedProperties = new Array(patternCount);\n    const refutedProperties = new Array(patternCount);\n    const predicates = new Array(patternCount);\n    const textPredicates = new Array(patternCount);\n    for (let i = 0; i < patternCount; i++) {\n      const predicatesAddress = C._ts_query_predicates_for_pattern(\n        address,\n        i,\n        TRANSFER_BUFFER\n      );\n      const stepCount = getValue(TRANSFER_BUFFER, 'i32');\n\n      predicates[i] = [];\n      textPredicates[i] = [];\n\n      const steps = [];\n      let stepAddress = predicatesAddress;\n      for (let j = 0; j < stepCount; j++) {\n        const stepType = getValue(stepAddress, 'i32');\n        stepAddress += SIZE_OF_INT;\n        const stepValueId = getValue(stepAddress, 'i32');\n        stepAddress += SIZE_OF_INT;\n        if (stepType === PREDICATE_STEP_TYPE_CAPTURE) {\n          steps.push({type: 'capture', name: captureNames[stepValueId]});\n        } else if (stepType === PREDICATE_STEP_TYPE_STRING) {\n          steps.push({type: 'string', value: stringValues[stepValueId]});\n        } else if (steps.length > 0) {\n          if (steps[0].type !== 'string') {\n            throw new Error('Predicates must begin with a literal value');\n          }\n          const operator = steps[0].value;\n          let isPositive = true;\n          switch (operator) {\n            case 'not-eq?':\n              isPositive = false;\n            case 'eq?':\n              if (steps.length !== 3) throw new Error(\n                `Wrong number of arguments to \\`#eq?\\` predicate. Expected 2, got ${steps.length - 1}`\n              );\n              if (steps[1].type !== 'capture') throw new Error(\n                `First argument of \\`#eq?\\` predicate must be a capture. Got \"${steps[1].value}\"`\n              );\n              if (steps[2].type === 'capture') {\n                const captureName1 = steps[1].name;\n                const captureName2 = steps[2].name;\n                textPredicates[i].push(function(captures) {\n                  let node1, node2\n                  for (const c of captures) {\n                    if (c.name === captureName1) node1 = c.node;\n                    if (c.name === captureName2) node2 = c.node;\n                  }\n                  if(node1 === undefined || node2 === undefined) return true;\n                  return (node1.text === node2.text) === isPositive;\n                });\n              } else {\n                const captureName = steps[1].name;\n                const stringValue = steps[2].value;\n                textPredicates[i].push(function(captures) {\n                  for (const c of captures) {\n                    if (c.name === captureName) {\n                      return (c.node.text === stringValue) === isPositive;\n                    };\n                  }\n                  return true;\n                });\n              }\n              break;\n\n            case 'not-match?':\n              isPositive = false;\n            case 'match?':\n              if (steps.length !== 3) throw new Error(\n                `Wrong number of arguments to \\`#match?\\` predicate. Expected 2, got ${steps.length - 1}.`\n              );\n              if (steps[1].type !== 'capture') throw new Error(\n                `First argument of \\`#match?\\` predicate must be a capture. Got \"${steps[1].value}\".`\n              );\n              if (steps[2].type !== 'string') throw new Error(\n                `Second argument of \\`#match?\\` predicate must be a string. Got @${steps[2].value}.`\n              );\n              const captureName = steps[1].name;\n              const regex = new RegExp(steps[2].value);\n              textPredicates[i].push(function(captures) {\n                for (const c of captures) {\n                  if (c.name === captureName) return regex.test(c.node.text) === isPositive;\n                }\n                return true;\n              });\n              break;\n\n            case 'set!':\n              if (steps.length < 2 || steps.length > 3) throw new Error(\n                `Wrong number of arguments to \\`#set!\\` predicate. Expected 1 or 2. Got ${steps.length - 1}.`\n              );\n              if (steps.some(s => s.type !== 'string')) throw new Error(\n                `Arguments to \\`#set!\\` predicate must be a strings.\".`\n              );\n              if (!setProperties[i]) setProperties[i] = {};\n              setProperties[i][steps[1].value] = steps[2] ? steps[2].value : null;\n              break;\n\n            case 'is?':\n            case 'is-not?':\n              if (steps.length < 2 || steps.length > 3) throw new Error(\n                `Wrong number of arguments to \\`#${operator}\\` predicate. Expected 1 or 2. Got ${steps.length - 1}.`\n              );\n              if (steps.some(s => s.type !== 'string')) throw new Error(\n                `Arguments to \\`#${operator}\\` predicate must be a strings.\".`\n              );\n              const properties = operator === 'is?' ? assertedProperties : refutedProperties;\n              if (!properties[i]) properties[i] = {};\n              properties[i][steps[1].value] = steps[2] ? steps[2].value : null;\n              break;\n\n            default:\n              predicates[i].push({operator, operands: steps.slice(1)});\n          }\n\n          steps.length = 0;\n        }\n      }\n\n      Object.freeze(setProperties[i]);\n      Object.freeze(assertedProperties[i]);\n      Object.freeze(refutedProperties[i]);\n    }\n\n    C._free(sourceAddress);\n    return new Query(\n      INTERNAL,\n      address,\n      captureNames,\n      textPredicates,\n      predicates,\n      Object.freeze(setProperties),\n      Object.freeze(assertedProperties),\n      Object.freeze(refutedProperties)\n    );\n  }\n\n  static load(input) {\n    let bytes;\n    if (input instanceof Uint8Array) {\n      bytes = Promise.resolve(input);\n    } else {\n      const url = input;\n      if (\n        typeof process !== 'undefined' &&\n        process.versions &&\n        process.versions.node\n      ) {\n        const fs = require('fs');\n        bytes = Promise.resolve(fs.readFileSync(url));\n      } else {\n        bytes = fetch(url)\n          .then(response => response.arrayBuffer()\n            .then(buffer => {\n              if (response.ok) {\n                return new Uint8Array(buffer);\n              } else {\n                const body = new TextDecoder('utf-8').decode(buffer);\n                throw new Error(`Language.load failed with status ${response.status}.\\n\\n${body}`)\n              }\n            }));\n      }\n    }\n\n    // emscripten-core/emscripten#12969\n    const loadModule =\n      typeof loadSideModule === 'function'\n      ? loadSideModule\n      : loadWebAssemblyModule;\n\n    return bytes\n      .then(bytes => loadModule(bytes, {loadAsync: true}))\n      .then(mod => {\n        const symbolNames = Object.keys(mod)\n        const functionName = symbolNames.find(key =>\n          LANGUAGE_FUNCTION_REGEX.test(key) &&\n          !key.includes(\"external_scanner_\")\n        );\n        if (!functionName) {\n          console.log(`Couldn't find language function in WASM file. Symbols:\\n${JSON.stringify(symbolNames, null, 2)}`)\n        }\n        const languageAddress = mod[functionName]();\n        return new Language(INTERNAL, languageAddress);\n      });\n  }\n}\n\nclass Query {\n  constructor(\n    internal, address, captureNames, textPredicates, predicates,\n    setProperties, assertedProperties, refutedProperties\n  ) {\n    assertInternal(internal);\n    this[0] = address;\n    this.captureNames = captureNames;\n    this.textPredicates = textPredicates;\n    this.predicates = predicates;\n    this.setProperties = setProperties;\n    this.assertedProperties = assertedProperties;\n    this.refutedProperties = refutedProperties;\n    this.exceededMatchLimit = false;\n  }\n\n  delete() {\n    C._ts_query_delete(this[0]);\n    this[0] = 0;\n  }\n\n  matches(node, startPosition, endPosition, options) {\n    if (!startPosition) startPosition = ZERO_POINT;\n    if (!endPosition) endPosition = ZERO_POINT;\n    if (!options) options = {};\n\n    let matchLimit = options.matchLimit;\n    if (typeof matchLimit === 'undefined') {\n      matchLimit = 0;\n    } else if (typeof matchLimit !== 'number') {\n      throw new Error('Arguments must be numbers');\n    }\n\n    marshalNode(node);\n\n    C._ts_query_matches_wasm(\n      this[0],\n      node.tree[0],\n      startPosition.row,\n      startPosition.column,\n      endPosition.row,\n      endPosition.column,\n      matchLimit\n    );\n\n    const rawCount = getValue(TRANSFER_BUFFER, 'i32');\n    const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n    const didExceedMatchLimit = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, 'i32');\n    const result = new Array(rawCount);\n    this.exceededMatchLimit = !!didExceedMatchLimit;\n\n    let filteredCount = 0;\n    let address = startAddress;\n    for (let i = 0; i < rawCount; i++) {\n      const pattern = getValue(address, 'i32');\n      address += SIZE_OF_INT;\n      const captureCount = getValue(address, 'i32');\n      address += SIZE_OF_INT;\n\n      const captures = new Array(captureCount);\n      address = unmarshalCaptures(this, node.tree, address, captures);\n      if (this.textPredicates[pattern].every(p => p(captures))) {\n        result[filteredCount++] = {pattern, captures};\n        const setProperties = this.setProperties[pattern];\n        if (setProperties) result[i].setProperties = setProperties;\n        const assertedProperties = this.assertedProperties[pattern];\n        if (assertedProperties) result[i].assertedProperties = assertedProperties;\n        const refutedProperties = this.refutedProperties[pattern];\n        if (refutedProperties) result[i].refutedProperties = refutedProperties;\n      }\n    }\n    result.length = filteredCount;\n\n    C._free(startAddress);\n    return result;\n  }\n\n  captures(node, startPosition, endPosition, options) {\n    if (!startPosition) startPosition = ZERO_POINT;\n    if (!endPosition) endPosition = ZERO_POINT;\n    if (!options) options = {};\n\n    let matchLimit = options.matchLimit;\n    if (typeof matchLimit === 'undefined') {\n      matchLimit = 0;\n    } else if (typeof matchLimit !== 'number') {\n      throw new Error('Arguments must be numbers');\n    }\n\n    marshalNode(node);\n\n    C._ts_query_captures_wasm(\n      this[0],\n      node.tree[0],\n      startPosition.row,\n      startPosition.column,\n      endPosition.row,\n      endPosition.column,\n      matchLimit\n    );\n\n    const count = getValue(TRANSFER_BUFFER, 'i32');\n    const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, 'i32');\n    const didExceedMatchLimit = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, 'i32');\n    const result = [];\n    this.exceededMatchLimit = !!didExceedMatchLimit;\n\n    const captures = [];\n    let address = startAddress;\n    for (let i = 0; i < count; i++) {\n      const pattern = getValue(address, 'i32');\n      address += SIZE_OF_INT;\n      const captureCount = getValue(address, 'i32');\n      address += SIZE_OF_INT;\n      const captureIndex = getValue(address, 'i32');\n      address += SIZE_OF_INT;\n\n      captures.length = captureCount\n      address = unmarshalCaptures(this, node.tree, address, captures);\n\n      if (this.textPredicates[pattern].every(p => p(captures))) {\n        const capture = captures[captureIndex];\n        const setProperties = this.setProperties[pattern];\n        if (setProperties) capture.setProperties = setProperties;\n        const assertedProperties = this.assertedProperties[pattern];\n        if (assertedProperties) capture.assertedProperties = assertedProperties;\n        const refutedProperties = this.refutedProperties[pattern];\n        if (refutedProperties) capture.refutedProperties = refutedProperties;\n        result.push(capture);\n      }\n    }\n\n    C._free(startAddress);\n    return result;\n  }\n\n  predicatesForPattern(patternIndex) {\n    return this.predicates[patternIndex]\n  }\n\n  didExceedMatchLimit() {\n    return this.exceededMatchLimit;\n  }\n}\n\nfunction getText(tree, startIndex, endIndex) {\n  const length = endIndex - startIndex;\n  let result = tree.textCallback(startIndex, null, endIndex);\n  startIndex += result.length;\n  while (startIndex < endIndex) {\n    const string = tree.textCallback(startIndex, null, endIndex);\n    if (string && string.length > 0) {\n      startIndex += string.length;\n      result += string;\n    } else {\n      break;\n    }\n  }\n  if (startIndex > endIndex) {\n    result = result.slice(0, length);\n  }\n  return result;\n}\n\nfunction unmarshalCaptures(query, tree, address, result) {\n  for (let i = 0, n = result.length; i < n; i++) {\n    const captureIndex = getValue(address, 'i32');\n    address += SIZE_OF_INT;\n    const node = unmarshalNode(tree, address);\n    address += SIZE_OF_NODE;\n    result[i] = {name: query.captureNames[captureIndex], node};\n  }\n  return address;\n}\n\nfunction assertInternal(x) {\n  if (x !== INTERNAL) throw new Error('Illegal constructor')\n}\n\nfunction isPoint(point) {\n  return (\n    point &&\n    typeof point.row === 'number' &&\n    typeof point.column === 'number'\n  );\n}\n\nfunction marshalNode(node) {\n  let address = TRANSFER_BUFFER;\n  setValue(address, node.id, 'i32');\n  address += SIZE_OF_INT;\n  setValue(address, node.startIndex, 'i32');\n  address += SIZE_OF_INT;\n  setValue(address, node.startPosition.row, 'i32');\n  address += SIZE_OF_INT;\n  setValue(address, node.startPosition.column, 'i32');\n  address += SIZE_OF_INT;\n  setValue(address, node[0], 'i32');\n}\n\nfunction unmarshalNode(tree, address = TRANSFER_BUFFER) {\n  const id = getValue(address, 'i32');\n  address += SIZE_OF_INT;\n  if (id === 0) return null;\n\n  const index = getValue(address, 'i32');\n  address += SIZE_OF_INT;\n  const row = getValue(address, 'i32');\n  address += SIZE_OF_INT;\n  const column = getValue(address, 'i32');\n  address += SIZE_OF_INT;\n  const other = getValue(address, 'i32');\n\n  const result = new Node(INTERNAL, tree);\n  result.id = id;\n  result.startIndex = index;\n  result.startPosition = {row, column};\n  result[0] = other;\n\n  return result;\n}\n\nfunction marshalTreeCursor(cursor, address = TRANSFER_BUFFER) {\n  setValue(address + 0 * SIZE_OF_INT, cursor[0], 'i32'),\n  setValue(address + 1 * SIZE_OF_INT, cursor[1], 'i32'),\n  setValue(address + 2 * SIZE_OF_INT, cursor[2], 'i32')\n}\n\nfunction unmarshalTreeCursor(cursor) {\n  cursor[0] = getValue(TRANSFER_BUFFER + 0 * SIZE_OF_INT, 'i32'),\n  cursor[1] = getValue(TRANSFER_BUFFER + 1 * SIZE_OF_INT, 'i32'),\n  cursor[2] = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, 'i32')\n}\n\nfunction marshalPoint(address, point) {\n  setValue(address, point.row, 'i32')\n  setValue(address + SIZE_OF_INT, point.column, 'i32')\n}\n\nfunction unmarshalPoint(address) {\n  return {\n    row: getValue(address, 'i32'),\n    column: getValue(address + SIZE_OF_INT, 'i32')\n  }\n}\n\nfunction marshalRange(address, range) {\n  marshalPoint(address, range.startPosition); address += SIZE_OF_POINT;\n  marshalPoint(address, range.endPosition); address += SIZE_OF_POINT;\n  setValue(address, range.startIndex, 'i32'); address += SIZE_OF_INT;\n  setValue(address, range.endIndex, 'i32'); address += SIZE_OF_INT;\n}\n\nfunction unmarshalRange(address) {\n  const result = {};\n  result.startPosition = unmarshalPoint(address); address += SIZE_OF_POINT;\n  result.endPosition = unmarshalPoint(address); address += SIZE_OF_POINT;\n  result.startIndex = getValue(address, 'i32'); address += SIZE_OF_INT;\n  result.endIndex = getValue(address, 'i32');\n  return result;\n}\n\nfunction marshalEdit(edit) {\n  let address = TRANSFER_BUFFER;\n  marshalPoint(address, edit.startPosition); address += SIZE_OF_POINT;\n  marshalPoint(address, edit.oldEndPosition); address += SIZE_OF_POINT;\n  marshalPoint(address, edit.newEndPosition); address += SIZE_OF_POINT;\n  setValue(address, edit.startIndex, 'i32'); address += SIZE_OF_INT;\n  setValue(address, edit.oldEndIndex, 'i32'); address += SIZE_OF_INT;\n  setValue(address, edit.newEndIndex, 'i32'); address += SIZE_OF_INT;\n}\nfor (const name of Object.getOwnPropertyNames(ParserImpl.prototype)) {\n\tObject.defineProperty(Parser.prototype, name, {\n\t\tvalue: ParserImpl.prototype[name],\n\t\tenumerable: false,\n\t\twritable: false,\n\t})\n}\n\nParser.Language = Language;\nModule.onRuntimeInitialized = () => {\n\tParserImpl.init();\n\tresolveInitPromise();\n};\n});\n}\n}\n\nreturn Parser;\n}();\n\nif (typeof exports === 'object') {\nmodule.exports = TreeSitter;\n}"
  },
  {
    "path": "lang/shadeup-frontend/lib/std/all.ts",
    "content": "/**__SHADEUP_STRUCT_INJECTION_HOOK__*/\nexport const __dummy = 1;\n\nimport {\n\tbool,\n\tfloat,\n\tfloat2,\n\tfloat3,\n\tfloat4,\n\tint,\n\tint2,\n\tint3,\n\tint4,\n\tuint,\n\tuint3,\n\tatomic\n} from '/std_math';\n// import { Mesh } from '/_std/mesh';\n\nexport class Mesh {\n\tprivate vertices: float3[] = [];\n\tprivate triangles: int[] = [];\n\tprivate normals: float3[] = [];\n\tprivate tangents: float3[] = [];\n\tprivate bitangents: float3[] = [];\n\tprivate uvs: float2[] = [];\n\tprivate colors: float4[] = [];\n\tsymbol: Symbol;\n\n\tconstructor(prefils: {\n\t\tvertices?: float3[];\n\t\ttriangles?: int[];\n\t\tnormals?: float3[];\n\t\ttangents?: float3[];\n\t\tbitangents?: float3[];\n\t\tuvs?: float2[];\n\t\tcolors?: float4[];\n\t}) {\n\t\tthis.symbol = Symbol();\n\t\tif (prefils.vertices) this.vertices = prefils.vertices;\n\t\tif (prefils.triangles) this.triangles = prefils.triangles;\n\t\tif (prefils.normals) this.normals = prefils.normals;\n\t\tif (prefils.tangents) this.tangents = prefils.tangents;\n\t\tif (prefils.bitangents) this.bitangents = prefils.bitangents;\n\t\tif (prefils.uvs) this.uvs = prefils.uvs;\n\t\tif (prefils.colors) this.colors = prefils.colors;\n\t}\n\n\tgetVertices() {\n\t\treturn this.vertices;\n\t}\n\n\tgetTriangles() {\n\t\treturn this.triangles;\n\t}\n\n\tgetNormals() {\n\t\treturn this.normals;\n\t}\n\n\tgetTangents() {\n\t\treturn this.tangents;\n\t}\n\n\tgetBitangents() {\n\t\treturn this.bitangents;\n\t}\n\n\tgetUVs() {\n\t\treturn this.uvs;\n\t}\n\n\tgetColors() {\n\t\treturn this.colors;\n\t}\n}\n\n/**\n * Prints a set of value(s) to the console. Values will be converted to strings before printing.\n *\n * @param args Any number of values to print to the console\n */\nexport function print(...args: any[]) {\n\tconsole.log(...args);\n\tif (typeof window['__shadeup_print'] === 'function') {\n\t\twindow['__shadeup_print'](...args);\n\t}\n}\n\n/**\n * Flushes (executes) all queued compute or draw calls\n * @shadeup=tag(async) @shadeup=noemit_gpu\n */\nexport async function flush() {\n\tif (typeof window['flushAdapter'] === 'function') {\n\t\treturn await window['flushAdapter']();\n\t}\n}\n\n/**\n * Displays a single value in the stats panel at the top right\n *\n * @param name key for this stat (e.g. \"fps\")\n * @param value any value\n */\nexport function stat(name: string, value: any) {\n\tif (typeof window['__shadeup_stat'] === 'function') {\n\t\twindow['__shadeup_stat'](name, value);\n\t}\n}\n\n/**\n * Display a graph of a numeric value over time\n *\n * @param name key for this stat (e.g. \"fps\")\n * @param value any numeric value\n * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\n */\nexport function statGraph(name: string, value: float, sampleRate: int = 1) {\n\tif (typeof window['__shadeup_statGraph'] === 'function') {\n\t\twindow['__shadeup_statGraph'](name, value);\n\t}\n}\n\n// type InferPayload1<T> = {\n// \tdata: [T];\n// \tcallback: (a: { attachment0: T }) => void;\n// };\n\n// type InferPayload2<T, I> = {\n// \tdata: [T, I];\n// \tcallback: (a: { attachment0: T; attachment1: I }) => void;\n// };\n\n// function infer(payload: InferPayload1 | InferPayload2);\n// function infer(a: any) {}\n\n// infer({\n// \tdata: [67],\n// \tcallback: (a) => {\n// \t\ta[0];\n// \t}\n// });\n\ntype FnPass<T> = (a: T) => void;\n\nfunction infer<I, O, C>(fn: (a: I, b: O) => void): shader<I, O, C> {\n\treturn fn as shader<I, O, C>;\n}\n\n// export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\n// export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\n// export function draw(\n// \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\n// \tsecond?: shader<ShaderInput, ShaderOutput>,\n// \tthird?: shader<ShaderInput, ShaderOutput>\n// ) {\n// \tif ('vertices' in first && second && third) {\n// \t\t__shadeup_dispatch_draw_geometry(first, second, third);\n// \t} else if (first && !second && !third) {\n// \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n// \t}\n// }\n\n// draw(makeShader('', (a, b) => {}));\n// drawAlt(\n// \tmakeShader(\n// \t\t'000004808000091289258019303699031390005438610',\n// \t\t/**@shadeup=shader*/ (__in, __out) => {\n// \t\t\t__out.color;\n// \t\t}\n// \t)\n// );\n// /**\n//  *\n//  */\nexport function compute(workgroups: int3, computeShader: shader<any, any, any>) {\n\t(window as any).__shadeup_dispatch_compute(workgroups, computeShader);\n}\n\n// function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\n\n// type x<T> = { x: T };\n\n// function makeTex<T>(a: T): x<T> {\n// \treturn { x: a };\n// }\n// draw({\n// \tvertex: shader('abc', (__in, __out) => {}),\n// \tattachments: [\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 }),\n// \t\tmakeTex({ abc: 123 })\n// \t],\n// \tmesh: new Mesh(),\n// \tfragment: shader('abc', (__in, __out) => {\n// \t\t//__out.attachment0\n// \t})\n// });\n\nexport function globalVarInit<T>(\n\tfileName: string,\n\tvarName: string,\n\tinitFn: () => T,\n\tgetterFn: any\n): T {\n\tif (!window['shadeup_globals']) {\n\t\twindow['shadeup_globals'] = {};\n\t}\n\n\tif (!window['shadeup_globals'][fileName]) {\n\t\twindow['shadeup_globals'][fileName] = {};\n\t}\n\n\t// Disable caching for now\n\tconst cache = false;\n\tif (!window['shadeup_globals'][fileName][varName] || !cache) {\n\t\twindow['shadeup_globals'][fileName][varName] = initFn();\n\t}\n\n\twindow['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\n\treturn window['shadeup_globals'][fileName][varName] as T;\n}\n\nexport function globalVarGet(fileName, varName) {\n\tif (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\n\t\treturn window[varName];\n\t}\n\n\treturn window['shadeup_globals'][fileName]['$getter_' + varName]();\n}\n\ninterface ToString {\n\ttoString(): string;\n}\n\ntype HashableType =\n\t| string\n\t| float\n\t| int\n\t| bool\n\t| float2\n\t| float3\n\t| float4\n\t| int2\n\t| int3\n\t| int4\n\t| ToString;\n\nexport function hashableTypeToString(k: HashableType) {\n\tif (typeof k == 'number') {\n\t\treturn k.toString();\n\t} else if (typeof k == 'object') {\n\t\tif (Array.isArray(k)) {\n\t\t\treturn k.map(hashableTypeToString).join(',');\n\t\t} else {\n\t\t\treturn k.toString();\n\t\t}\n\t} else {\n\t\treturn k.toString();\n\t}\n}\n\ndeclare global {\n\tconst PLATFORM_WEBGPU: boolean;\n\tconst PLATFORM_WEBGL: boolean;\n\n\tinterface Array<T> {\n\t\tlen(): int;\n\t\tpush(...items: T[]): void;\n\t\tpop(): T;\n\n\t\tlast(): T;\n\t\tfirst(): T;\n\n\t\tappend(items: T[]): void;\n\t\tremove(index: int): void;\n\n\t\tindexOf(item: T): int;\n\n\t\t__index(index: int | uint): T;\n\n\t\t__index_assign(index: int | uint, value: T): void;\n\t\t__index_assign_op(op_fn: (a: T, b: T) => T, index: int | uint, value: T): void;\n\n\t\t[index: number]: T;\n\t}\n}\n\nArray.prototype.len = function () {\n\treturn this.length;\n};\n\nArray.prototype.last = function () {\n\treturn this[this.length - 1];\n};\n\nArray.prototype.first = function () {\n\treturn this[0];\n};\n\nArray.prototype.append = function (items: any[]) {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tthis.push(items[i]);\n\t}\n};\n\nArray.prototype.remove = function (index: int) {\n\tthis.splice(index, 1);\n};\n\nArray.prototype.__index = function (index: int) {\n\treturn this[index];\n};\n\nArray.prototype.__index_assign = function (index: int, value: any) {\n\tthis[index] = value;\n};\n\nArray.prototype.__index_assign_op = function (\n\top_fn: (a: any, b: any) => any,\n\tindex: int,\n\tvalue: any\n) {\n\tthis[index] = op_fn(this[index], value);\n};\n\n/** @shadeup=tag(async) */\nexport function sleep(seconds: float) {\n\treturn new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n}\n\nexport type array<T> = Array<T>;\nexport function array<T>(count: number, initializer: any = null): array<T> {\n\tlet arr = new Array<T>(count);\n\tif (initializer) {\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tarr[i] = initializer;\n\t\t}\n\t}\n\treturn arr;\n}\n\nexport class map<K extends HashableType, V> {\n\tpairs: Map<string, [K, V]> = new Map<string, [K, V]>();\n\n\tconstructor(entries?: [K, V][]) {\n\t\tif (entries)\n\t\t\tfor (let e of entries) {\n\t\t\t\tthis.__index_assign(e[0], e[1]);\n\t\t\t}\n\t}\n\n\t__index(key: K): V {\n\t\tif (!this.pairs.has(hashableTypeToString(key))) {\n\t\t\tthrow new Error('Key not found: ' + hashableTypeToString(key));\n\t\t}\n\n\t\treturn this.pairs.get(hashableTypeToString(key))[1];\n\t}\n\n\t__index_assign(key: K, value: V) {\n\t\tthis.pairs.set(hashableTypeToString(key), [key, value]);\n\t}\n\n\t__index_assign_op(op_fn: (a: V, b: V) => V, key: K, value: V) {\n\t\tthis.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\n\t}\n\n\tdelete(key: K) {\n\t\tthis.pairs.delete(hashableTypeToString(key));\n\t}\n\n\thas(key: K): bool {\n\t\treturn this.pairs.has(hashableTypeToString(key));\n\t}\n\n\tkeys(): K[] {\n\t\treturn Array.from(this.pairs.values()).map((k) => k[0]);\n\t}\n\n\tvalues(): V[] {\n\t\treturn Array.from(this.pairs.values()).map((k) => k[1]);\n\t}\n\n\tstatic new<K extends HashableType, V>(entries?: [K, V][]): map<K, V> {\n\t\treturn new map<K, V>(entries);\n\t}\n}\n\nexport function __makeMap<V>(initial: { [key: number]: V }): map<number, V>;\nexport function __makeMap<V>(initial: { [key: string]: V }): map<string, V>;\nexport function __makeMap<V>(initial: { [key: string | number]: V }): map<string | number, V> {\n\treturn new map<string | number, V>(Object.entries(initial));\n}\n\nexport function __deepClone(value: any) {\n\tif (typeof value == 'object') {\n\t\tif (Array.isArray(value)) {\n\t\t\tlet res = new Array(value.length);\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\tres[i] = __deepClone(value[i]);\n\t\t\t}\n\t\t\treturn res;\n\t\t} else {\n\t\t\tif (value && typeof value.clone == 'function') {\n\t\t\t\treturn value.clone();\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn value;\n\t}\n}\n\nexport interface Spatial2d {\n\tgetPosition(): float2;\n\tgetBoundsMin(): float2;\n\tgetBoundsMax(): float2;\n\tgetRadius(): float;\n\n\tsetPosition(pos: float2): void;\n}\n\nexport interface Spatial3d {\n\tgetPosition(): float3;\n\tgetBoundsMin(): float3;\n\tgetBoundsMax(): float3;\n\tgetRadius(): float;\n\n\tsetPosition(pos: float3): void;\n}\n\nexport class time {\n\t/** Saves the current time with a key of name */\n\tstatic start(name?: string) {\n\t\tperformance.mark((name ?? '_default') + '_start');\n\t}\n\n\t/** Returns the difference in milliseconds between a start with the same key */\n\tstatic stop(name?: string): float {\n\t\tperformance.mark((name ?? '_default') + '_end');\n\n\t\tlet res = performance.measure(\n\t\t\t(name ?? '_default') + '_diff',\n\t\t\t(name ?? '_default') + '_start',\n\t\t\t(name ?? '_default') + '_end'\n\t\t);\n\n\t\treturn res.duration;\n\t}\n\n\t/**\n\t * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\n\t *\n\t * This uses performance.now() under the hood:\n\t * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\n\t */\n\tstatic now(): float {\n\t\treturn performance.now();\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/std/generate-static-math.ts",
    "content": "import { makeVectors, simpleFunctions, singleFunctions } from './static-math-db';\n\nlet out = `\n///\n/// GENERATED\n/// DO NOT EDIT THIS FILE\n/// see generate-static-math.ts\n///\nexport const FM = {\\n`;\n\nfor (let [name, op] of simpleFunctions) {\n\tlet f = typeof op === 'string' ? (a, b) => `${a} ${op} ${b}` : op;\n\tout += `\\t${name}_1_1(a: number, b: number): number { return ${f('a', 'b')}; },\\n`;\n\tout += `\\t${name}_2_1(a: [number, number], b: number): [number, number] { return [${f(\n\t\t'a[0]',\n\t\t'b'\n\t)}, ${f('a[1]', 'b')}]; },\\n`;\n\tout += `\\t${name}_1_2(a: number, b: [number, number]): [number, number] { return [${f(\n\t\t'a',\n\t\t'b[0]'\n\t)}, ${f('a', 'b[1]')}]; },\\n`;\n\tout += `\\t${name}_2_2(a: [number, number], b: [number, number]): [number, number] { return [${f(\n\t\t'a[0]',\n\t\t'b[0]'\n\t)}, ${f('a[1]', 'b[1]')}]; },\\n`;\n\tout += `\\t${name}_3_1(a: [number, number, number], b: number): [number, number, number] { return [${f(\n\t\t'a[0]',\n\t\t'b'\n\t)}, ${f('a[1]', 'b')}, ${f('a[2]', 'b')}]; },\\n`;\n\tout += `\\t${name}_1_3(a: number, b: [number, number, number]): [number, number, number] { return [${f(\n\t\t'a',\n\t\t'b[0]'\n\t)}, ${f('a', 'b[1]')}, ${f('a', 'b[2]')}]; },\\n`;\n\tout += `\\t${name}_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [${f(\n\t\t'a[0]',\n\t\t'b[0]'\n\t)}, ${f('a[1]', 'b[1]')}, ${f('a[2]', 'b[2]')}]; },\\n`;\n\tout += `\\t${name}_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [${f(\n\t\t'a[0]',\n\t\t'b'\n\t)}, ${f('a[1]', 'b')}, ${f('a[2]', 'b')}, ${f('a[3]', 'b')}]; },\\n`;\n\tout += `\\t${name}_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [${f(\n\t\t'a',\n\t\t'b[0]'\n\t)}, ${f('a', 'b[1]')}, ${f('a', 'b[2]')}, ${f('a', 'b[3]')}]; },\\n`;\n\tout += `\\t${name}_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [${f(\n\t\t'a[0]',\n\t\t'b[0]'\n\t)}, ${f('a[1]', 'b[1]')}, ${f('a[2]', 'b[2]')}, ${f('a[3]', 'b[3]')}]; },\\n`;\n}\n\nfor (let [name, op] of singleFunctions) {\n\tlet f = typeof op === 'string' ? (a) => `${op}(${a})` : op;\n\tout += `\\t${name}_1(a: number): number { return ${f('a')}; },\\n`;\n\tout += `\\t${name}_2(a: [number, number]): [number, number] { return [${f('a[0]')}, ${f(\n\t\t'a[1]'\n\t)}]; },\\n`;\n\tout += `\\t${name}_3(a: [number, number, number]): [number, number, number] { return [${f(\n\t\t'a[0]'\n\t)}, ${f('a[1]')}, ${f('a[2]')}]; },\\n`;\n\tout += `\\t${name}_4(a: [number, number, number, number]): [number, number, number, number] { return [${f(\n\t\t'a[0]'\n\t)}, ${f('a[1]')}, ${f('a[2]')}, ${f('a[3]')}]; },\\n`;\n}\n\nfor (let [name, op] of makeVectors) {\n\tout += `\\t${name}_2_1_1(a: number, b: number): [number, number] { return [a${op}, b${op}]; },\\n`;\n\tout += `\\t${name}_2_2(a: [number, number]): [number, number] { return [a[0]${op}, a[1]${op}]; },\\n`;\n\n\tout += `\\t${name}_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a${op}, b${op}, c${op}]; },\\n`;\n\tout += `\\t${name}_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]${op}, a[1]${op}, b${op}]; },\\n`;\n\tout += `\\t${name}_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a${op}, b[0]${op}, b[1]${op}]; },\\n`;\n\tout += `\\t${name}_3_3(a: [number, number, number]): [number, number, number] { return [a[0]${op}, a[1]${op}, a[2]${op}]; },\\n`;\n\n\tout += `\\t${name}_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a${op}, b${op}, c${op}, d${op}]; },\\n`;\n\tout += `\\t${name}_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]${op}, a[1]${op}, b${op}, c${op}]; },\\n`;\n\tout += `\\t${name}_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a${op}, b[0]${op}, b[1]${op}, c${op}]; },\\n`;\n\tout += `\\t${name}_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a${op}, b${op}, c[0]${op}, c[1]${op}]; },\\n`;\n\tout += `\\t${name}_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]${op}, a[1]${op}, a[2]${op}, b${op}]; },\\n`;\n\tout += `\\t${name}_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a${op}, b[0]${op}, b[1]${op}, b[2]${op}]; },\\n`;\n\tout += `\\t${name}_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]${op}, a[1]${op}, b[0]${op}, b[1]${op}]; },\\n`;\n\tout += `\\t${name}_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]${op}, a[1]${op}, a[2]${op}, a[3]${op}]; },\\n`;\n}\n\nout += `}`;\n\nconsole.log(out);\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/std/global.d.ts",
    "content": "/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"decorators\" />\n/// <reference lib=\"decorators.legacy\" />\n\n/////////////////////////////\n/// ECMAScript APIs\n/////////////////////////////\n\ntype float = number & { _opaque_float: 2 };\ntype int = number & { _opaque_int: 1 } & float;\n\ndeclare var NaN: number;\ndeclare var Infinity: number;\n\n/**\n * Converts a string to an integer.\n * @param string A string to convert into a number.\n * @param radix A value between 2 and 36 that specifies the base of the number in `string`.\n * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\n * All other strings are considered decimal.\n */\ndeclare function parseInt(string: string, radix?: number): number;\n\n/**\n * Converts a string to a floating-point number.\n * @param string A string that contains a floating-point number.\n */\ndeclare function parseFloat(string: string): number;\n\n/**\n * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number).\n * @param number A numeric value.\n */\ndeclare function isNaN(number: number): boolean;\n\n/**\n * Determines whether a supplied number is finite.\n * @param number Any numeric value.\n */\ndeclare function isFinite(number: number): boolean;\n\n/**\n * Gets the unencoded version of an encoded Uniform Resource Identifier (URI).\n * @param encodedURI A value representing an encoded URI.\n */\ndeclare function decodeURI(encodedURI: string): string;\n\n/**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n * @param encodedURIComponent A value representing an encoded URI component.\n */\ndeclare function decodeURIComponent(encodedURIComponent: string): string;\n\n/**\n * Encodes a text string as a valid Uniform Resource Identifier (URI)\n * @param uri A value representing an unencoded URI.\n */\ndeclare function encodeURI(uri: string): string;\n\n/**\n * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).\n * @param uriComponent A value representing an unencoded URI component.\n */\ndeclare function encodeURIComponent(uriComponent: string | number | boolean): string;\n\n/**\n * Computes a new string in which certain characters have been replaced by a hexadecimal escape sequence.\n * @deprecated A legacy feature for browser compatibility\n * @param string A string value\n */\ndeclare function escape(string: string): string;\n\n/**\n * Computes a new string in which hexadecimal escape sequences are replaced with the character that it represents.\n * @deprecated A legacy feature for browser compatibility\n * @param string A string value\n */\ndeclare function unescape(string: string): string;\n\ninterface Symbol {\n\t/** Returns a string representation of an object. */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): symbol;\n}\n\ndeclare type PropertyKey = string | number | symbol;\n\ninterface PropertyDescriptor {\n\tconfigurable?: boolean;\n\tenumerable?: boolean;\n\tvalue?: any;\n\twritable?: boolean;\n\tget?(): any;\n\tset?(v: any): void;\n}\n\ninterface PropertyDescriptorMap {\n\t[key: PropertyKey]: PropertyDescriptor;\n}\n\ninterface Object {\n\t/** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */\n\tconstructor: Function;\n\n\t/** Returns a string representation of an object. */\n\ttoString(): string;\n\n\t/** Returns a date converted to a string using the current locale. */\n\ttoLocaleString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Object;\n\n\t/**\n\t * Determines whether an object has a property with the specified name.\n\t * @param v A property name.\n\t */\n\thasOwnProperty(v: PropertyKey): boolean;\n\n\t/**\n\t * Determines whether an object exists in another object's prototype chain.\n\t * @param v Another object whose prototype chain is to be checked.\n\t */\n\tisPrototypeOf(v: Object): boolean;\n\n\t/**\n\t * Determines whether a specified property is enumerable.\n\t * @param v A property name.\n\t */\n\tpropertyIsEnumerable(v: PropertyKey): boolean;\n}\n\ninterface ObjectConstructor {\n\tnew (value?: any): Object;\n\t(): any;\n\t(value: any): any;\n\n\t/** A reference to the prototype for a class of objects. */\n\treadonly prototype: Object;\n\n\t/**\n\t * Returns the prototype of an object.\n\t * @param o The object that references the prototype.\n\t */\n\tgetPrototypeOf(o: any): any;\n\n\t/**\n\t * Gets the own property descriptor of the specified object.\n\t * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype.\n\t * @param o Object that contains the property.\n\t * @param p Name of the property.\n\t */\n\tgetOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined;\n\n\t/**\n\t * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n\t * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n\t * @param o Object that contains the own properties.\n\t */\n\tgetOwnPropertyNames(o: any): string[];\n\n\t/**\n\t * Creates an object that has the specified prototype or that has null prototype.\n\t * @param o Object to use as a prototype. May be null.\n\t */\n\tcreate(o: object | null): any;\n\n\t/**\n\t * Creates an object that has the specified prototype, and that optionally contains specified properties.\n\t * @param o Object to use as a prototype. May be null\n\t * @param properties JavaScript object that contains one or more property descriptors.\n\t */\n\tcreate(o: object | null, properties: PropertyDescriptorMap & ThisType<any>): any;\n\n\t/**\n\t * Adds a property to an object, or modifies attributes of an existing property.\n\t * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.\n\t * @param p The property name.\n\t * @param attributes Descriptor for the property. It can be for a data property or an accessor property.\n\t */\n\tdefineProperty<T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>): T;\n\n\t/**\n\t * Adds one or more properties to an object, and/or modifies attributes of existing properties.\n\t * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.\n\t * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.\n\t */\n\tdefineProperties<T>(o: T, properties: PropertyDescriptorMap & ThisType<any>): T;\n\n\t/**\n\t * Prevents the modification of attributes of existing properties, and prevents the addition of new properties.\n\t * @param o Object on which to lock the attributes.\n\t */\n\tseal<T>(o: T): T;\n\n\t/**\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\n\t * @param f Object on which to lock the attributes.\n\t */\n\tfreeze<T extends Function>(f: T): T;\n\n\t/**\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\n\t * @param o Object on which to lock the attributes.\n\t */\n\tfreeze<\n\t\tT extends { [idx: string]: U | null | undefined | object },\n\t\tU extends string | bigint | number | boolean | symbol\n\t>(\n\t\to: T\n\t): Readonly<T>;\n\n\t/**\n\t * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\n\t * @param o Object on which to lock the attributes.\n\t */\n\tfreeze<T>(o: T): Readonly<T>;\n\n\t/**\n\t * Prevents the addition of new properties to an object.\n\t * @param o Object to make non-extensible.\n\t */\n\tpreventExtensions<T>(o: T): T;\n\n\t/**\n\t * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.\n\t * @param o Object to test.\n\t */\n\tisSealed(o: any): boolean;\n\n\t/**\n\t * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.\n\t * @param o Object to test.\n\t */\n\tisFrozen(o: any): boolean;\n\n\t/**\n\t * Returns a value that indicates whether new properties can be added to an object.\n\t * @param o Object to test.\n\t */\n\tisExtensible(o: any): boolean;\n\n\t/**\n\t * Returns the names of the enumerable string properties and methods of an object.\n\t * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n\t */\n\tkeys(o: object): string[];\n}\n\n/**\n * Provides functionality common to all JavaScript objects.\n */\ndeclare var Object: ObjectConstructor;\n\n/**\n * Creates a new function.\n */\ninterface Function {\n\t/**\n\t * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.\n\t * @param thisArg The object to be used as the this object.\n\t * @param argArray A set of arguments to be passed to the function.\n\t */\n\tapply(this: Function, thisArg: any, argArray?: any): any;\n\n\t/**\n\t * Calls a method of an object, substituting another object for the current object.\n\t * @param thisArg The object to be used as the current object.\n\t * @param argArray A list of arguments to be passed to the method.\n\t */\n\tcall(this: Function, thisArg: any, ...argArray: any[]): any;\n\n\t/**\n\t * For a given function, creates a bound function that has the same body as the original function.\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n\t * @param thisArg An object to which the this keyword can refer inside the new function.\n\t * @param argArray A list of arguments to be passed to the new function.\n\t */\n\tbind(this: Function, thisArg: any, ...argArray: any[]): any;\n\n\t/** Returns a string representation of a function. */\n\ttoString(): string;\n\n\tprototype: any;\n\treadonly length: int;\n\n\t// Non-standard extensions\n\targuments: any;\n\tcaller: Function;\n}\n\ninterface FunctionConstructor {\n\t/**\n\t * Creates a new function.\n\t * @param args A list of arguments the function accepts.\n\t */\n\tnew (...args: string[]): Function;\n\t(...args: string[]): Function;\n\treadonly prototype: Function;\n}\n\ndeclare var Function: FunctionConstructor;\n\n/**\n * Extracts the type of the 'this' parameter of a function type, or 'unknown' if the function type has no 'this' parameter.\n */\ntype ThisParameterType<T> = T extends (this: infer U, ...args: never) => any ? U : unknown;\n\n/**\n * Removes the 'this' parameter from a function type.\n */\ntype OmitThisParameter<T> = unknown extends ThisParameterType<T>\n\t? T\n\t: T extends (...args: infer A) => infer R\n\t? (...args: A) => R\n\t: T;\n\ninterface CallableFunction extends Function {\n\t/**\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\n\t * @param thisArg The object to be used as the this object.\n\t */\n\tapply<T, R>(this: (this: T) => R, thisArg: T): R;\n\n\t/**\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\n\t * @param thisArg The object to be used as the this object.\n\t * @param args An array of argument values to be passed to the function.\n\t */\n\tapply<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, args: A): R;\n\n\t/**\n\t * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\n\t * @param thisArg The object to be used as the this object.\n\t * @param args Argument values to be passed to the function.\n\t */\n\tcall<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R;\n\n\t/**\n\t * For a given function, creates a bound function that has the same body as the original function.\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n\t * @param thisArg The object to be used as the this object.\n\t */\n\tbind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;\n\n\t/**\n\t * For a given function, creates a bound function that has the same body as the original function.\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n\t * @param thisArg The object to be used as the this object.\n\t * @param args Arguments to bind to the parameters of the function.\n\t */\n\tbind<T, A extends any[], B extends any[], R>(\n\t\tthis: (this: T, ...args: [...A, ...B]) => R,\n\t\tthisArg: T,\n\t\t...args: A\n\t): (...args: B) => R;\n}\n\ninterface NewableFunction extends Function {\n\t/**\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\n\t * @param thisArg The object to be used as the this object.\n\t */\n\tapply<T>(this: new () => T, thisArg: T): void;\n\t/**\n\t * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\n\t * @param thisArg The object to be used as the this object.\n\t * @param args An array of argument values to be passed to the function.\n\t */\n\tapply<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, args: A): void;\n\n\t/**\n\t * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\n\t * @param thisArg The object to be used as the this object.\n\t * @param args Argument values to be passed to the function.\n\t */\n\tcall<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, ...args: A): void;\n\n\t/**\n\t * For a given function, creates a bound function that has the same body as the original function.\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n\t * @param thisArg The object to be used as the this object.\n\t */\n\tbind<T>(this: T, thisArg: any): T;\n\n\t/**\n\t * For a given function, creates a bound function that has the same body as the original function.\n\t * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n\t * @param thisArg The object to be used as the this object.\n\t * @param args Arguments to bind to the parameters of the function.\n\t */\n\tbind<A extends any[], B extends any[], R>(\n\t\tthis: new (...args: [...A, ...B]) => R,\n\t\tthisArg: any,\n\t\t...args: A\n\t): new (...args: B) => R;\n}\n\ninterface IArguments {\n\t[index: number]: any;\n\tlength: int;\n\tcallee: Function;\n}\n\ninterface String {\n\t/** Returns a string representation of a string. */\n\ttoString(): string;\n\n\t/**\n\t * Returns the character at the specified index.\n\t * @param pos The zero-based index of the desired character.\n\t */\n\tcharAt(pos: number): string;\n\n\t/**\n\t * Returns the Unicode value of the character at the specified location.\n\t * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n\t */\n\tcharCodeAt(index: number): number;\n\n\t/**\n\t * Returns a string that contains the concatenation of two or more strings.\n\t * @param strings The strings to append to the end of the string.\n\t */\n\tconcat(...strings: string[]): string;\n\n\t/**\n\t * Returns the position of the first occurrence of a substring.\n\t * @param searchString The substring to search for in the string\n\t * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\n\t */\n\tindexOf(searchString: string, position?: number): number;\n\n\t/**\n\t * Returns the last occurrence of a substring in the string.\n\t * @param searchString The substring to search for.\n\t * @param position The index at which to begin searching. If omitted, the search begins at the end of the string.\n\t */\n\tlastIndexOf(searchString: string, position?: number): number;\n\n\t/**\n\t * Determines whether two strings are equivalent in the current locale.\n\t * @param that String to compare to target string\n\t */\n\tlocaleCompare(that: string): number;\n\n\t/**\n\t * Matches a string with a regular expression, and returns an array containing the results of that search.\n\t * @param regexp A variable name or string literal containing the regular expression pattern and flags.\n\t */\n\tmatch(regexp: string | RegExp): RegExpMatchArray | null;\n\n\t/**\n\t * Replaces text in a string, using a regular expression or search string.\n\t * @param searchValue A string or regular expression to search for.\n\t * @param replaceValue A string containing the text to replace. When the {@linkcode searchValue} is a `RegExp`, all matches are replaced if the `g` flag is set (or only those matches at the beginning, if the `y` flag is also present). Otherwise, only the first match of {@linkcode searchValue} is replaced.\n\t */\n\treplace(searchValue: string | RegExp, replaceValue: string): string;\n\n\t/**\n\t * Replaces text in a string, using a regular expression or search string.\n\t * @param searchValue A string to search for.\n\t * @param replacer A function that returns the replacement text.\n\t */\n\treplace(\n\t\tsearchValue: string | RegExp,\n\t\treplacer: (substring: string, ...args: any[]) => string\n\t): string;\n\n\t/**\n\t * Finds the first substring match in a regular expression search.\n\t * @param regexp The regular expression pattern and applicable flags.\n\t */\n\tsearch(regexp: string | RegExp): number;\n\n\t/**\n\t * Returns a section of a string.\n\t * @param start The index to the beginning of the specified portion of stringObj.\n\t * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end.\n\t * If this value is not specified, the substring continues to the end of stringObj.\n\t */\n\tslice(start?: number, end?: number): string;\n\n\t/**\n\t * Split a string into substrings using the specified separator and return them as an array.\n\t * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.\n\t * @param limit A value used to limit the number of elements returned in the array.\n\t */\n\tsplit(separator: string | RegExp, limit?: number): string[];\n\n\t/**\n\t * Returns the substring at the specified location within a String object.\n\t * @param start The zero-based index number indicating the beginning of the substring.\n\t * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\n\t * If end is omitted, the characters from start through the end of the original string are returned.\n\t */\n\tsubstring(start: number, end?: number): string;\n\n\t/** Converts all the alphabetic characters in a string to lowercase. */\n\ttoLowerCase(): string;\n\n\t/** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */\n\ttoLocaleLowerCase(locales?: string | string[]): string;\n\n\t/** Converts all the alphabetic characters in a string to uppercase. */\n\ttoUpperCase(): string;\n\n\t/** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */\n\ttoLocaleUpperCase(locales?: string | string[]): string;\n\n\t/** Removes the leading and trailing white space and line terminator characters from a string. */\n\ttrim(): string;\n\n\t/** Returns the length of a String object. */\n\treadonly length: int;\n\n\t// IE extensions\n\t/**\n\t * Gets a substring beginning at the specified location and having the specified length.\n\t * @deprecated A legacy feature for browser compatibility\n\t * @param from The starting position of the desired substring. The index of the first character in the string is zero.\n\t * @param length The number of characters to include in the returned substring.\n\t */\n\tsubstr(from: number, length?: number): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): string;\n\n\treadonly [index: number]: string;\n}\n\ninterface StringConstructor {\n\tnew (value?: any): String;\n\t(value?: any): string;\n\treadonly prototype: String;\n\tfromCharCode(...codes: number[]): string;\n}\n\n/**\n * Allows manipulation and formatting of text strings and determination and location of substrings within strings.\n */\ndeclare var String: StringConstructor;\n\ninterface Boolean {\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): boolean;\n}\n\ninterface BooleanConstructor {\n\tnew (value?: any): Boolean;\n\t<T>(value?: T): boolean;\n\treadonly prototype: Boolean;\n}\n\ndeclare var Boolean: BooleanConstructor;\n\ninterface Number {\n\t/**\n\t * Returns a string representation of an object.\n\t * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.\n\t */\n\ttoString(radix?: number): string;\n\n\t/**\n\t * Returns a string representing a number in fixed-point notation.\n\t * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\n\t */\n\ttoFixed(fractionDigits?: number): string;\n\n\t/**\n\t * Returns a string containing a number represented in exponential notation.\n\t * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\n\t */\n\ttoExponential(fractionDigits?: number): string;\n\n\t/**\n\t * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.\n\t * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.\n\t */\n\ttoPrecision(precision?: number): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): number;\n}\n\ninterface NumberConstructor {\n\tnew (value?: any): Number;\n\t(value?: any): number;\n\treadonly prototype: Number;\n\n\t/** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */\n\treadonly MAX_VALUE: number;\n\n\t/** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */\n\treadonly MIN_VALUE: number;\n\n\t/**\n\t * A value that is not a number.\n\t * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.\n\t */\n\treadonly NaN: number;\n\n\t/**\n\t * A value that is less than the largest negative number that can be represented in JavaScript.\n\t * JavaScript displays NEGATIVE_INFINITY values as -infinity.\n\t */\n\treadonly NEGATIVE_INFINITY: number;\n\n\t/**\n\t * A value greater than the largest number that can be represented in JavaScript.\n\t * JavaScript displays POSITIVE_INFINITY values as infinity.\n\t */\n\treadonly POSITIVE_INFINITY: number;\n}\n\n/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */\ndeclare var Number: NumberConstructor;\n\ninterface TemplateStringsArray extends ReadonlyArray<string> {\n\treadonly raw: readonly string[];\n}\n\n/**\n * The type of `import.meta`.\n *\n * If you need to declare that a given property exists on `import.meta`,\n * this type may be augmented via interface merging.\n */\ninterface ImportMeta {}\n\n/**\n * The type for the optional second argument to `import()`.\n *\n * If your host environment supports additional options, this type may be\n * augmented via interface merging.\n */\ninterface ImportCallOptions {\n\tassert?: ImportAssertions;\n}\n\n/**\n * The type for the `assert` property of the optional second argument to `import()`.\n */\ninterface ImportAssertions {\n\t[key: string]: string;\n}\n\ninterface Math {\n\t/** The mathematical constant e. This is Euler's number, the base of natural logarithms. */\n\treadonly E: number;\n\t/** The natural logarithm of 10. */\n\treadonly LN10: number;\n\t/** The natural logarithm of 2. */\n\treadonly LN2: number;\n\t/** The base-2 logarithm of e. */\n\treadonly LOG2E: number;\n\t/** The base-10 logarithm of e. */\n\treadonly LOG10E: number;\n\t/** Pi. This is the ratio of the circumference of a circle to its diameter. */\n\treadonly PI: number;\n\t/** The square root of 0.5, or, equivalently, one divided by the square root of 2. */\n\treadonly SQRT1_2: number;\n\t/** The square root of 2. */\n\treadonly SQRT2: number;\n\t/**\n\t * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n\t * For example, the absolute value of -5 is the same as the absolute value of 5.\n\t * @param x A numeric expression for which the absolute value is needed.\n\t */\n\tabs(x: number): number;\n\t/**\n\t * Returns the arc cosine (or inverse cosine) of a number.\n\t * @param x A numeric expression.\n\t */\n\tacos(x: number): number;\n\t/**\n\t * Returns the arcsine of a number.\n\t * @param x A numeric expression.\n\t */\n\tasin(x: number): number;\n\t/**\n\t * Returns the arctangent of a number.\n\t * @param x A numeric expression for which the arctangent is needed.\n\t */\n\tatan(x: number): number;\n\t/**\n\t * Returns the angle (in radians) from the X axis to a point.\n\t * @param y A numeric expression representing the cartesian y-coordinate.\n\t * @param x A numeric expression representing the cartesian x-coordinate.\n\t */\n\tatan2(y: number, x: number): number;\n\t/**\n\t * Returns the smallest integer greater than or equal to its numeric argument.\n\t * @param x A numeric expression.\n\t */\n\tceil(x: number): number;\n\t/**\n\t * Returns the cosine of a number.\n\t * @param x A numeric expression that contains an angle measured in radians.\n\t */\n\tcos(x: number): number;\n\t/**\n\t * Returns e (the base of natural logarithms) raised to a power.\n\t * @param x A numeric expression representing the power of e.\n\t */\n\texp(x: number): number;\n\t/**\n\t * Returns the greatest integer less than or equal to its numeric argument.\n\t * @param x A numeric expression.\n\t */\n\tfloor(x: number): number;\n\t/**\n\t * Returns the natural logarithm (base e) of a number.\n\t * @param x A numeric expression.\n\t */\n\tlog(x: number): number;\n\t/**\n\t * Returns the larger of a set of supplied numeric expressions.\n\t * @param values Numeric expressions to be evaluated.\n\t */\n\tmax(...values: number[]): number;\n\t/**\n\t * Returns the smaller of a set of supplied numeric expressions.\n\t * @param values Numeric expressions to be evaluated.\n\t */\n\tmin(...values: number[]): number;\n\t/**\n\t * Returns the value of a base expression taken to a specified power.\n\t * @param x The base value of the expression.\n\t * @param y The exponent value of the expression.\n\t */\n\tpow(x: number, y: number): number;\n\t/** Returns a pseudorandom number between 0 and 1. */\n\trandom(): number;\n\t/**\n\t * Returns a supplied numeric expression rounded to the nearest integer.\n\t * @param x The value to be rounded to the nearest integer.\n\t */\n\tround(x: number): number;\n\t/**\n\t * Returns the sine of a number.\n\t * @param x A numeric expression that contains an angle measured in radians.\n\t */\n\tsin(x: number): number;\n\t/**\n\t * Returns the square root of a number.\n\t * @param x A numeric expression.\n\t */\n\tsqrt(x: number): number;\n\t/**\n\t * Returns the tangent of a number.\n\t * @param x A numeric expression that contains an angle measured in radians.\n\t */\n\ttan(x: number): number;\n}\n/** An intrinsic object that provides basic mathematics functionality and constants. */\ndeclare var Math: Math;\n\n/** Enables basic storage and retrieval of dates and times. */\ninterface Date {\n\t/** Returns a string representation of a date. The format of the string depends on the locale. */\n\ttoString(): string;\n\t/** Returns a date as a string value. */\n\ttoDateString(): string;\n\t/** Returns a time as a string value. */\n\ttoTimeString(): string;\n\t/** Returns a value as a string value appropriate to the host environment's current locale. */\n\ttoLocaleString(): string;\n\t/** Returns a date as a string value appropriate to the host environment's current locale. */\n\ttoLocaleDateString(): string;\n\t/** Returns a time as a string value appropriate to the host environment's current locale. */\n\ttoLocaleTimeString(): string;\n\t/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\n\tvalueOf(): number;\n\t/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\n\tgetTime(): number;\n\t/** Gets the year, using local time. */\n\tgetFullYear(): number;\n\t/** Gets the year using Universal Coordinated Time (UTC). */\n\tgetUTCFullYear(): number;\n\t/** Gets the month, using local time. */\n\tgetMonth(): number;\n\t/** Gets the month of a Date object using Universal Coordinated Time (UTC). */\n\tgetUTCMonth(): number;\n\t/** Gets the day-of-the-month, using local time. */\n\tgetDate(): number;\n\t/** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */\n\tgetUTCDate(): number;\n\t/** Gets the day of the week, using local time. */\n\tgetDay(): number;\n\t/** Gets the day of the week using Universal Coordinated Time (UTC). */\n\tgetUTCDay(): number;\n\t/** Gets the hours in a date, using local time. */\n\tgetHours(): number;\n\t/** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */\n\tgetUTCHours(): number;\n\t/** Gets the minutes of a Date object, using local time. */\n\tgetMinutes(): number;\n\t/** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */\n\tgetUTCMinutes(): number;\n\t/** Gets the seconds of a Date object, using local time. */\n\tgetSeconds(): number;\n\t/** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */\n\tgetUTCSeconds(): number;\n\t/** Gets the milliseconds of a Date, using local time. */\n\tgetMilliseconds(): number;\n\t/** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */\n\tgetUTCMilliseconds(): number;\n\t/** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */\n\tgetTimezoneOffset(): number;\n\t/**\n\t * Sets the date and time value in the Date object.\n\t * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT.\n\t */\n\tsetTime(time: number): number;\n\t/**\n\t * Sets the milliseconds value in the Date object using local time.\n\t * @param ms A numeric value equal to the millisecond value.\n\t */\n\tsetMilliseconds(ms: number): number;\n\t/**\n\t * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).\n\t * @param ms A numeric value equal to the millisecond value.\n\t */\n\tsetUTCMilliseconds(ms: number): number;\n\n\t/**\n\t * Sets the seconds value in the Date object using local time.\n\t * @param sec A numeric value equal to the seconds value.\n\t * @param ms A numeric value equal to the milliseconds value.\n\t */\n\tsetSeconds(sec: number, ms?: number): number;\n\t/**\n\t * Sets the seconds value in the Date object using Universal Coordinated Time (UTC).\n\t * @param sec A numeric value equal to the seconds value.\n\t * @param ms A numeric value equal to the milliseconds value.\n\t */\n\tsetUTCSeconds(sec: number, ms?: number): number;\n\t/**\n\t * Sets the minutes value in the Date object using local time.\n\t * @param min A numeric value equal to the minutes value.\n\t * @param sec A numeric value equal to the seconds value.\n\t * @param ms A numeric value equal to the milliseconds value.\n\t */\n\tsetMinutes(min: number, sec?: number, ms?: number): number;\n\t/**\n\t * Sets the minutes value in the Date object using Universal Coordinated Time (UTC).\n\t * @param min A numeric value equal to the minutes value.\n\t * @param sec A numeric value equal to the seconds value.\n\t * @param ms A numeric value equal to the milliseconds value.\n\t */\n\tsetUTCMinutes(min: number, sec?: number, ms?: number): number;\n\t/**\n\t * Sets the hour value in the Date object using local time.\n\t * @param hours A numeric value equal to the hours value.\n\t * @param min A numeric value equal to the minutes value.\n\t * @param sec A numeric value equal to the seconds value.\n\t * @param ms A numeric value equal to the milliseconds value.\n\t */\n\tsetHours(hours: number, min?: number, sec?: number, ms?: number): number;\n\t/**\n\t * Sets the hours value in the Date object using Universal Coordinated Time (UTC).\n\t * @param hours A numeric value equal to the hours value.\n\t * @param min A numeric value equal to the minutes value.\n\t * @param sec A numeric value equal to the seconds value.\n\t * @param ms A numeric value equal to the milliseconds value.\n\t */\n\tsetUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;\n\t/**\n\t * Sets the numeric day-of-the-month value of the Date object using local time.\n\t * @param date A numeric value equal to the day of the month.\n\t */\n\tsetDate(date: number): number;\n\t/**\n\t * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).\n\t * @param date A numeric value equal to the day of the month.\n\t */\n\tsetUTCDate(date: number): number;\n\t/**\n\t * Sets the month value in the Date object using local time.\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\n\t * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.\n\t */\n\tsetMonth(month: number, date?: number): number;\n\t/**\n\t * Sets the month value in the Date object using Universal Coordinated Time (UTC).\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\n\t * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.\n\t */\n\tsetUTCMonth(month: number, date?: number): number;\n\t/**\n\t * Sets the year of the Date object using local time.\n\t * @param year A numeric value for the year.\n\t * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.\n\t * @param date A numeric value equal for the day of the month.\n\t */\n\tsetFullYear(year: number, month?: number, date?: number): number;\n\t/**\n\t * Sets the year value in the Date object using Universal Coordinated Time (UTC).\n\t * @param year A numeric value equal to the year.\n\t * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.\n\t * @param date A numeric value equal to the day of the month.\n\t */\n\tsetUTCFullYear(year: number, month?: number, date?: number): number;\n\t/** Returns a date converted to a string using Universal Coordinated Time (UTC). */\n\ttoUTCString(): string;\n\t/** Returns a date as a string value in ISO format. */\n\ttoISOString(): string;\n\t/** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */\n\ttoJSON(key?: any): string;\n}\n\ninterface DateConstructor {\n\tnew (): Date;\n\tnew (value: number | string): Date;\n\t/**\n\t * Creates a new Date.\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n\t * @param monthIndex The month as a number between 0 and 11 (January to December).\n\t * @param date The date as a number between 1 and 31.\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\n\t */\n\tnew (\n\t\tyear: number,\n\t\tmonthIndex: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number\n\t): Date;\n\t(): string;\n\treadonly prototype: Date;\n\t/**\n\t * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.\n\t * @param s A date string\n\t */\n\tparse(s: string): number;\n\t/**\n\t * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date.\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n\t * @param monthIndex The month as a number between 0 and 11 (January to December).\n\t * @param date The date as a number between 1 and 31.\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\n\t */\n\tUTC(\n\t\tyear: number,\n\t\tmonthIndex: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number\n\t): number;\n\t/** Returns the number of milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC). */\n\tnow(): number;\n}\n\ndeclare var Date: DateConstructor;\n\ninterface RegExpMatchArray extends Array<string> {\n\t/**\n\t * The index of the search at which the result was found.\n\t */\n\tindex?: number;\n\t/**\n\t * A copy of the search string.\n\t */\n\tinput?: string;\n\t/**\n\t * The first match. This will always be present because `null` will be returned if there are no matches.\n\t */\n\t0: string;\n}\n\ninterface RegExpExecArray extends Array<string> {\n\t/**\n\t * The index of the search at which the result was found.\n\t */\n\tindex: number;\n\t/**\n\t * A copy of the search string.\n\t */\n\tinput: string;\n\t/**\n\t * The first match. This will always be present because `null` will be returned if there are no matches.\n\t */\n\t0: string;\n}\n\ninterface RegExp {\n\t/**\n\t * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.\n\t * @param string The String object or string literal on which to perform the search.\n\t */\n\texec(string: string): RegExpExecArray | null;\n\n\t/**\n\t * Returns a Boolean value that indicates whether or not a pattern exists in a searched string.\n\t * @param string String on which to perform the search.\n\t */\n\ttest(string: string): boolean;\n\n\t/** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */\n\treadonly source: string;\n\n\t/** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */\n\treadonly global: boolean;\n\n\t/** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */\n\treadonly ignoreCase: boolean;\n\n\t/** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */\n\treadonly multiline: boolean;\n\n\tlastIndex: number;\n\n\t// Non-standard extensions\n\t/** @deprecated A legacy feature for browser compatibility */\n\tcompile(pattern: string, flags?: string): this;\n}\n\ninterface RegExpConstructor {\n\tnew (pattern: RegExp | string): RegExp;\n\tnew (pattern: string, flags?: string): RegExp;\n\t(pattern: RegExp | string): RegExp;\n\t(pattern: string, flags?: string): RegExp;\n\treadonly prototype: RegExp;\n\n\t// Non-standard extensions\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$1: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$2: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$3: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$4: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$5: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$6: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$7: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$8: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$9: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\tinput: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t$_: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\tlastMatch: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t'$&': string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\tlastParen: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t'$+': string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\tleftContext: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t'$`': string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\trightContext: string;\n\t/** @deprecated A legacy feature for browser compatibility */\n\t\"$'\": string;\n}\n\ndeclare var RegExp: RegExpConstructor;\n\ninterface Error {\n\tname: string;\n\tmessage: string;\n\tstack?: string;\n}\n\ninterface ErrorConstructor {\n\tnew (message?: string): Error;\n\t(message?: string): Error;\n\treadonly prototype: Error;\n}\n\ndeclare var Error: ErrorConstructor;\n\ninterface EvalError extends Error {}\n\ninterface EvalErrorConstructor extends ErrorConstructor {\n\tnew (message?: string): EvalError;\n\t(message?: string): EvalError;\n\treadonly prototype: EvalError;\n}\n\ndeclare var EvalError: EvalErrorConstructor;\n\ninterface RangeError extends Error {}\n\ninterface RangeErrorConstructor extends ErrorConstructor {\n\tnew (message?: string): RangeError;\n\t(message?: string): RangeError;\n\treadonly prototype: RangeError;\n}\n\ndeclare var RangeError: RangeErrorConstructor;\n\ninterface ReferenceError extends Error {}\n\ninterface ReferenceErrorConstructor extends ErrorConstructor {\n\tnew (message?: string): ReferenceError;\n\t(message?: string): ReferenceError;\n\treadonly prototype: ReferenceError;\n}\n\ndeclare var ReferenceError: ReferenceErrorConstructor;\n\ninterface SyntaxError extends Error {}\n\ninterface SyntaxErrorConstructor extends ErrorConstructor {\n\tnew (message?: string): SyntaxError;\n\t(message?: string): SyntaxError;\n\treadonly prototype: SyntaxError;\n}\n\ndeclare var SyntaxError: SyntaxErrorConstructor;\n\ninterface TypeError extends Error {}\n\ninterface TypeErrorConstructor extends ErrorConstructor {\n\tnew (message?: string): TypeError;\n\t(message?: string): TypeError;\n\treadonly prototype: TypeError;\n}\n\ndeclare var TypeError: TypeErrorConstructor;\n\ninterface URIError extends Error {}\n\ninterface URIErrorConstructor extends ErrorConstructor {\n\tnew (message?: string): URIError;\n\t(message?: string): URIError;\n\treadonly prototype: URIError;\n}\n\ndeclare var URIError: URIErrorConstructor;\n\ninterface JSON {\n\t/**\n\t * Converts a JavaScript Object Notation (JSON) string into an object.\n\t * @param text A valid JSON string.\n\t * @param reviver A function that transforms the results. This function is called for each member of the object.\n\t * If a member contains nested objects, the nested objects are transformed before the parent object is.\n\t */\n\tparse(text: string, reviver?: (this: any, key: string, value: any) => any): any;\n\t/**\n\t * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\n\t * @param value A JavaScript value, usually an object or array, to be converted.\n\t * @param replacer A function that transforms the results.\n\t * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n\t */\n\tstringify(\n\t\tvalue: any,\n\t\treplacer?: (this: any, key: string, value: any) => any,\n\t\tspace?: string | number\n\t): string;\n\t/**\n\t * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\n\t * @param value A JavaScript value, usually an object or array, to be converted.\n\t * @param replacer An array of strings and numbers that acts as an approved list for selecting the object properties that will be stringified.\n\t * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n\t */\n\tstringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string;\n}\n\n/**\n * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.\n */\ndeclare var JSON: JSON;\n\n/////////////////////////////\n/// ECMAScript Array API (specially handled by compiler)\n/////////////////////////////\n\ninterface ReadonlyArray<T> {\n\t/**\n\t * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n\t */\n\treadonly length: int;\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\t/**\n\t * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\n\t */\n\ttoLocaleString(): string;\n\t/**\n\t * Combines two or more arrays.\n\t * @param items Additional items to add to the end of array1.\n\t */\n\tconcat(...items: ConcatArray<T>[]): T[];\n\t/**\n\t * Combines two or more arrays.\n\t * @param items Additional items to add to the end of array1.\n\t */\n\tconcat(...items: (T | ConcatArray<T>)[]): T[];\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): T[];\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n\t */\n\tindexOf(searchElement: T, fromIndex?: number): number;\n\t/**\n\t * Returns the index of the last occurrence of a specified value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n\t */\n\tlastIndexOf(searchElement: T, fromIndex?: number): number;\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery<S extends T>(\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => value is S,\n\t\tthisArg?: any\n\t): this is readonly S[];\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter<S extends T>(\n\t\tpredicate: (value: T, index: number, array: readonly T[]) => value is S,\n\t\tthisArg?: any\n\t): S[];\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T\n\t): T;\n\treduce(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,\n\t\tinitialValue: T\n\t): T;\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,\n\t\tinitialValue: U\n\t): U;\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T\n\t): T;\n\treduceRight(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,\n\t\tinitialValue: T\n\t): T;\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,\n\t\tinitialValue: U\n\t): U;\n\n\treadonly [n: number]: T;\n}\n\ninterface ConcatArray<T> {\n\treadonly length: int;\n\treadonly [n: number]: T;\n\tjoin(separator?: string): string;\n\tslice(start?: number, end?: number): T[];\n}\n\ninterface Array<T> {\n\t/**\n\t * Gets or sets the length of the array. This is a number one higher than the highest index in the array.\n\t */\n\tlength: int;\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\t/**\n\t * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\n\t */\n\ttoLocaleString(): string;\n\t/**\n\t * Removes the last element from an array and returns it.\n\t * If the array is empty, undefined is returned and the array is not modified.\n\t */\n\tpop(): T | undefined;\n\t/**\n\t * Appends new elements to the end of an array, and returns the new length of the array.\n\t * @param items New elements to add to the array.\n\t */\n\tpush(...items: T[]): number;\n\t/**\n\t * Combines two or more arrays.\n\t * This method returns a new array without modifying any existing arrays.\n\t * @param items Additional arrays and/or items to add to the end of the array.\n\t */\n\tconcat(...items: ConcatArray<T>[]): T[];\n\t/**\n\t * Combines two or more arrays.\n\t * This method returns a new array without modifying any existing arrays.\n\t * @param items Additional arrays and/or items to add to the end of the array.\n\t */\n\tconcat(...items: (T | ConcatArray<T>)[]): T[];\n\t/**\n\t * Adds all the elements of an array into a string, separated by the specified separator string.\n\t * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\t/**\n\t * Reverses the elements in an array in place.\n\t * This method mutates the array and returns a reference to the same array.\n\t */\n\treverse(): T[];\n\t/**\n\t * Removes the first element from an array and returns it.\n\t * If the array is empty, undefined is returned and the array is not modified.\n\t */\n\tshift(): T | undefined;\n\t/**\n\t * Returns a copy of a section of an array.\n\t * For both start and end, a negative index can be used to indicate an offset from the end of the array.\n\t * For example, -2 refers to the second to last element of the array.\n\t * @param start The beginning index of the specified portion of the array.\n\t * If start is undefined, then the slice begins at index 0.\n\t * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t * If end is undefined, then the slice extends to the end of the array.\n\t */\n\tslice(start?: number, end?: number): T[];\n\t/**\n\t * Sorts an array in place.\n\t * This method mutates the array and returns a reference to the same array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: T, b: T) => number): this;\n\t/**\n\t * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n\t * @param start The zero-based location in the array from which to start removing elements.\n\t * @param deleteCount The number of elements to remove.\n\t * @returns An array containing the elements that were deleted.\n\t */\n\tsplice(start: number, deleteCount?: number): T[];\n\t/**\n\t * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n\t * @param start The zero-based location in the array from which to start removing elements.\n\t * @param deleteCount The number of elements to remove.\n\t * @param items Elements to insert into the array in place of the deleted elements.\n\t * @returns An array containing the elements that were deleted.\n\t */\n\tsplice(start: number, deleteCount: number, ...items: T[]): T[];\n\t/**\n\t * Inserts new elements at the start of an array, and returns the new length of the array.\n\t * @param items Elements to insert at the start of the array.\n\t */\n\tunshift(...items: T[]): number;\n\t/**\n\t * Returns the index of the first occurrence of a value in an array, or -1 if it is not present.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n\t */\n\tindexOf(searchElement: T, fromIndex?: number): number;\n\t/**\n\t * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array.\n\t */\n\tlastIndexOf(searchElement: T, fromIndex?: number): number;\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery<S extends T>(\n\t\tpredicate: (value: T, index: number, array: T[]) => value is S,\n\t\tthisArg?: any\n\t): this is S[];\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter<S extends T>(\n\t\tpredicate: (value: T, index: number, array: T[]) => value is S,\n\t\tthisArg?: any\n\t): S[];\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n\treduce(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\n\t\tinitialValue: T\n\t): T;\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\n\t\tinitialValue: U\n\t): U;\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T\n\t): T;\n\treduceRight(\n\t\tcallbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\n\t\tinitialValue: T\n\t): T;\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t[n: number]: T;\n}\n\ninterface ArrayConstructor {\n\tnew (arrayLength?: number): any[];\n\tnew <T>(arraylength: int): T[];\n\tnew <T>(...items: T[]): T[];\n\t(arrayLength?: number): any[];\n\t<T>(arraylength: int): T[];\n\t<T>(...items: T[]): T[];\n\tisArray(arg: any): arg is any[];\n\treadonly prototype: any[];\n}\n\ndeclare var Array: ArrayConstructor;\n\ninterface TypedPropertyDescriptor<T> {\n\tenumerable?: boolean;\n\tconfigurable?: boolean;\n\twritable?: boolean;\n\tvalue?: T;\n\tget?: () => T;\n\tset?: (value: T) => void;\n}\n\ndeclare type PromiseConstructorLike = new <T>(\n\texecutor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void\n) => PromiseLike<T>;\n\ninterface PromiseLike<T> {\n\t/**\n\t * Attaches callbacks for the resolution and/or rejection of the Promise.\n\t * @param onfulfilled The callback to execute when the Promise is resolved.\n\t * @param onrejected The callback to execute when the Promise is rejected.\n\t * @returns A Promise for the completion of which ever callback is executed.\n\t */\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\n\t): PromiseLike<TResult1 | TResult2>;\n}\n\n/**\n * Represents the completion of an asynchronous operation\n */\ninterface Promise<T> {\n\t/**\n\t * Attaches callbacks for the resolution and/or rejection of the Promise.\n\t * @param onfulfilled The callback to execute when the Promise is resolved.\n\t * @param onrejected The callback to execute when the Promise is rejected.\n\t * @returns A Promise for the completion of which ever callback is executed.\n\t */\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\n\t): Promise<TResult1 | TResult2>;\n\n\t/**\n\t * Attaches a callback for only the rejection of the Promise.\n\t * @param onrejected The callback to execute when the Promise is rejected.\n\t * @returns A Promise for the completion of the callback.\n\t */\n\tcatch<TResult = never>(\n\t\tonrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null\n\t): Promise<T | TResult>;\n}\n\n/**\n * Recursively unwraps the \"awaited type\" of a type. Non-promise \"thenables\" should resolve to `never`. This emulates the behavior of `await`.\n */\ntype Awaited<T> = T extends null | undefined\n\t? T // special case for `null | undefined` when not in `--strictNullChecks` mode\n\t: T extends object & { then(onfulfilled: infer F, ...args: infer _): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped\n\t? F extends (value: infer V, ...args: infer _) => any // if the argument to `then` is callable, extracts the first argument\n\t\t? Awaited<V> // recursively unwrap the value\n\t\t: never // the argument to `then` was not callable\n\t: T; // non-object or non-thenable\n\ninterface ArrayLike<T> {\n\treadonly length: int;\n\treadonly [n: number]: T;\n}\n\n/**\n * Make all properties in T optional\n */\ntype Partial<T> = {\n\t[P in keyof T]?: T[P];\n};\n\n/**\n * Make all properties in T required\n */\ntype Required<T> = {\n\t[P in keyof T]-?: T[P];\n};\n\n/**\n * Make all properties in T readonly\n */\ntype Readonly<T> = {\n\treadonly [P in keyof T]: T[P];\n};\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\ntype Pick<T, K extends keyof T> = {\n\t[P in K]: T[P];\n};\n\n/**\n * Construct a type with a set of properties K of type T\n */\ntype Record<K extends keyof any, T> = {\n\t[P in K]: T;\n};\n\n/**\n * Exclude from T those types that are assignable to U\n */\ntype Exclude<T, U> = T extends U ? never : T;\n\n/**\n * Extract from T those types that are assignable to U\n */\ntype Extract<T, U> = T extends U ? T : never;\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\ntype Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;\n\n/**\n * Exclude null and undefined from T\n */\ntype NonNullable<T> = T & {};\n\n/**\n * Obtain the parameters of a function type in a tuple\n */\ntype Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;\n\n/**\n * Obtain the parameters of a constructor function type in a tuple\n */\ntype ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (\n\t...args: infer P\n) => any\n\t? P\n\t: never;\n\n/**\n * Obtain the return type of a function type\n */\ntype ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;\n\n/**\n * Obtain the return type of a constructor function type\n */\ntype InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (\n\t...args: any\n) => infer R\n\t? R\n\t: any;\n\n/**\n * Convert string literal type to uppercase\n */\ntype Uppercase<S extends string> = intrinsic;\n\n/**\n * Convert string literal type to lowercase\n */\ntype Lowercase<S extends string> = intrinsic;\n\n/**\n * Convert first character of string literal type to uppercase\n */\ntype Capitalize<S extends string> = intrinsic;\n\n/**\n * Convert first character of string literal type to lowercase\n */\ntype Uncapitalize<S extends string> = intrinsic;\n\n/**\n * Marker for contextual 'this' type\n */\ninterface ThisType<T> {}\n\n/**\n * Represents a raw buffer of binary data, which is used to store data for the\n * different typed arrays. ArrayBuffers cannot be read from or written to directly,\n * but can be passed to a typed array or DataView Object to interpret the raw\n * buffer as needed.\n */\ninterface ArrayBuffer {\n\t/**\n\t * Read-only. The length of the ArrayBuffer (in bytes).\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * Returns a section of an ArrayBuffer.\n\t */\n\tslice(begin: number, end?: number): ArrayBuffer;\n}\n\n/**\n * Allowed ArrayBuffer types for the buffer of an ArrayBufferView and related Typed Arrays.\n */\ninterface ArrayBufferTypes {\n\tArrayBuffer: ArrayBuffer;\n}\ntype ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];\n\ninterface ArrayBufferConstructor {\n\treadonly prototype: ArrayBuffer;\n\tnew (bytelength: int): ArrayBuffer;\n\tisView(arg: any): arg is ArrayBufferView;\n}\ndeclare var ArrayBuffer: ArrayBufferConstructor;\n\ninterface ArrayBufferView {\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\tbuffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\tbytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\tbyteOffset: number;\n}\n\ninterface DataView {\n\treadonly buffer: ArrayBuffer;\n\treadonly bytelength: int;\n\treadonly byteOffset: number;\n\t/**\n\t * Gets the Float32 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\n\t */\n\tgetFloat32(byteOffset: number, littleEndian?: boolean): number;\n\n\t/**\n\t * Gets the Float64 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\n\t */\n\tgetFloat64(byteOffset: number, littleEndian?: boolean): number;\n\n\t/**\n\t * Gets the Int8 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t */\n\tgetInt8(byteOffset: number): number;\n\n\t/**\n\t * Gets the Int16 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\n\t */\n\tgetInt16(byteOffset: number, littleEndian?: boolean): number;\n\t/**\n\t * Gets the Int32 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\n\t */\n\tgetInt32(byteOffset: number, littleEndian?: boolean): number;\n\n\t/**\n\t * Gets the Uint8 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t */\n\tgetUint8(byteOffset: number): number;\n\n\t/**\n\t * Gets the Uint16 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\n\t */\n\tgetUint16(byteOffset: number, littleEndian?: boolean): number;\n\n\t/**\n\t * Gets the Uint32 value at the specified byte offset from the start of the view. There is\n\t * no alignment constraint; multi-byte values may be fetched from any offset.\n\t * @param byteOffset The place in the buffer at which the value should be retrieved.\n\t * @param littleEndian If false or undefined, a big-endian value should be read.\n\t */\n\tgetUint32(byteOffset: number, littleEndian?: boolean): number;\n\n\t/**\n\t * Stores an Float32 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\n\t */\n\tsetFloat32(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n\t/**\n\t * Stores an Float64 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\n\t */\n\tsetFloat64(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n\t/**\n\t * Stores an Int8 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t */\n\tsetInt8(byteOffset: number, value: number): void;\n\n\t/**\n\t * Stores an Int16 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\n\t */\n\tsetInt16(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n\t/**\n\t * Stores an Int32 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\n\t */\n\tsetInt32(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n\t/**\n\t * Stores an Uint8 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t */\n\tsetUint8(byteOffset: number, value: number): void;\n\n\t/**\n\t * Stores an Uint16 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\n\t */\n\tsetUint16(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n\t/**\n\t * Stores an Uint32 value at the specified byte offset from the start of the view.\n\t * @param byteOffset The place in the buffer at which the value should be set.\n\t * @param value The value to set.\n\t * @param littleEndian If false or undefined, a big-endian value should be written.\n\t */\n\tsetUint32(byteOffset: number, value: number, littleEndian?: boolean): void;\n}\n\ninterface DataViewConstructor {\n\treadonly prototype: DataView;\n\tnew (\n\t\tbuffer: ArrayBufferLike & { BYTES_PER_ELEMENT?: never },\n\t\tbyteOffset?: number,\n\t\tbyteLength?: number\n\t): DataView;\n}\ndeclare var DataView: DataViewConstructor;\n\n/**\n * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested\n * number of bytes could not be allocated an exception is raised.\n */\ninterface Int8Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Int8Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Int8Array) => any,\n\t\tthisArg?: any\n\t): Int8Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Int8Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Int8Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Int8Array) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Int8Array) => number,\n\t\tthisArg?: any\n\t): Int8Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int8Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int8Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int8Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int8Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int8Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int8Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Int8Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Int8Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Int8Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Int8Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Int8Array;\n\n\t[index: number]: number;\n}\ninterface Int8ArrayConstructor {\n\treadonly prototype: Int8Array;\n\tnew (length: int): Int8Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int8Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int8Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Int8Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Int8Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array;\n}\ndeclare var Int8Array: Int8ArrayConstructor;\n\n/**\n * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint8Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => any,\n\t\tthisArg?: any\n\t): Uint8Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Uint8Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Uint8Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Uint8Array) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Uint8Array) => number,\n\t\tthisArg?: any\n\t): Uint8Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Uint8Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Uint8Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Uint8Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Uint8Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Uint8Array;\n\n\t[index: number]: number;\n}\n\ninterface Uint8ArrayConstructor {\n\treadonly prototype: Uint8Array;\n\tnew (length: int): Uint8Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint8Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Uint8Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Uint8Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array;\n}\ndeclare var Uint8Array: Uint8ArrayConstructor;\n\n/**\n * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0.\n * If the requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint8ClampedArray {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => any,\n\t\tthisArg?: any\n\t): Uint8ClampedArray;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Uint8ClampedArray) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Uint8ClampedArray) => number,\n\t\tthisArg?: any\n\t): Uint8ClampedArray;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8ClampedArray\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8ClampedArray\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8ClampedArray\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8ClampedArray\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8ClampedArray\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint8ClampedArray\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Uint8ClampedArray;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Uint8ClampedArray;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Uint8ClampedArray) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Uint8ClampedArray;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Uint8ClampedArray;\n\n\t[index: number]: number;\n}\n\ninterface Uint8ClampedArrayConstructor {\n\treadonly prototype: Uint8ClampedArray;\n\tnew (length: int): Uint8ClampedArray;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint8ClampedArray;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8ClampedArray;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Uint8ClampedArray;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Uint8ClampedArray;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(\n\t\tarrayLike: ArrayLike<T>,\n\t\tmapfn: (v: T, k: number) => number,\n\t\tthisArg?: any\n\t): Uint8ClampedArray;\n}\ndeclare var Uint8ClampedArray: Uint8ClampedArrayConstructor;\n\n/**\n * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Int16Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Int16Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Int16Array) => any,\n\t\tthisArg?: any\n\t): Int16Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Int16Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Int16Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Int16Array) => void,\n\t\tthisArg?: any\n\t): void;\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Int16Array) => number,\n\t\tthisArg?: any\n\t): Int16Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int16Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int16Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int16Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int16Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int16Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int16Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Int16Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Int16Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Int16Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Int16Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Int16Array;\n\n\t[index: number]: number;\n}\n\ninterface Int16ArrayConstructor {\n\treadonly prototype: Int16Array;\n\tnew (length: int): Int16Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int16Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int16Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Int16Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Int16Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array;\n}\ndeclare var Int16Array: Int16ArrayConstructor;\n\n/**\n * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint16Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => any,\n\t\tthisArg?: any\n\t): Uint16Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Uint16Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Uint16Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Uint16Array) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Uint16Array) => number,\n\t\tthisArg?: any\n\t): Uint16Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint16Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint16Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint16Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint16Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint16Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint16Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Uint16Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Uint16Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Uint16Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Uint16Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Uint16Array;\n\n\t[index: number]: number;\n}\n\ninterface Uint16ArrayConstructor {\n\treadonly prototype: Uint16Array;\n\tnew (length: int): Uint16Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint16Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint16Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Uint16Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Uint16Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array;\n}\ndeclare var Uint16Array: Uint16ArrayConstructor;\n/**\n * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Int32Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Int32Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Int32Array) => any,\n\t\tthisArg?: any\n\t): Int32Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Int32Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Int32Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Int32Array) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Int32Array) => number,\n\t\tthisArg?: any\n\t): Int32Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int32Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int32Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int32Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int32Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int32Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Int32Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Int32Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Int32Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Int32Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Int32Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Int32Array;\n\n\t[index: number]: number;\n}\n\ninterface Int32ArrayConstructor {\n\treadonly prototype: Int32Array;\n\tnew (length: int): Int32Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Int32Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int32Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Int32Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Int32Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array;\n}\ndeclare var Int32Array: Int32ArrayConstructor;\n\n/**\n * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint32Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => any,\n\t\tthisArg?: any\n\t): Uint32Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Uint32Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Uint32Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Uint32Array) => void,\n\t\tthisArg?: any\n\t): void;\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Uint32Array) => number,\n\t\tthisArg?: any\n\t): Uint32Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint32Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint32Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint32Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint32Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint32Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Uint32Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Uint32Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Uint32Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Uint32Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Uint32Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Uint32Array;\n\n\t[index: number]: number;\n}\n\ninterface Uint32ArrayConstructor {\n\treadonly prototype: Uint32Array;\n\tnew (length: int): Uint32Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Uint32Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint32Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Uint32Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Uint32Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array;\n}\ndeclare var Uint32Array: Uint32ArrayConstructor;\n\n/**\n * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number\n * of bytes could not be allocated an exception is raised.\n */\ninterface Float32Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Float32Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Float32Array) => any,\n\t\tthisArg?: any\n\t): Float32Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Float32Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Float32Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Float32Array) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Float32Array) => number,\n\t\tthisArg?: any\n\t): Float32Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float32Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float32Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float32Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float32Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float32Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float32Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Float32Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Float32Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Float32Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Float32Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Float32Array;\n\n\t[index: number]: number;\n}\n\ninterface Float32ArrayConstructor {\n\treadonly prototype: Float32Array;\n\tnew (length: int): Float32Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Float32Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float32Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Float32Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Float32Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array;\n}\ndeclare var Float32Array: Float32ArrayConstructor;\n\n/**\n * A typed array of 64-bit float values. The contents are initialized to 0. If the requested\n * number of bytes could not be allocated an exception is raised.\n */\ninterface Float64Array {\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * The ArrayBuffer instance referenced by the array.\n\t */\n\treadonly buffer: ArrayBufferLike;\n\n\t/**\n\t * The length in bytes of the array.\n\t */\n\treadonly bytelength: int;\n\n\t/**\n\t * The offset in bytes of the array.\n\t */\n\treadonly byteOffset: number;\n\n\t/**\n\t * Returns the this object after copying a section of the array identified by start and end\n\t * to the same array starting at position target\n\t * @param target If target is negative, it is treated as length+target where length is the\n\t * length of the array.\n\t * @param start If start is negative, it is treated as length+start. If end is negative, it\n\t * is treated as length+end. If start is omitted, `0` is used.\n\t * @param end If not specified, length of the this object is used as its default value.\n\t */\n\tcopyWithin(target: number, start?: number, end?: number): this;\n\n\t/**\n\t * Determines whether all the members of an array satisfy the specified test.\n\t * @param predicate A function that accepts up to three arguments. The every method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value false, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tevery(\n\t\tpredicate: (value: number, index: number, array: Float64Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array\n\t * @param value value to fill array section with\n\t * @param start index to start filling the array at. If start is negative, it is treated as\n\t * length+start where length is the length of the array.\n\t * @param end index to stop filling the array at. If end is negative, it is treated as\n\t * length+end.\n\t */\n\tfill(value: number, start?: number, end?: number): this;\n\n\t/**\n\t * Returns the elements of an array that meet the condition specified in a callback function.\n\t * @param predicate A function that accepts up to three arguments. The filter method calls\n\t * the predicate function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tfilter(\n\t\tpredicate: (value: number, index: number, array: Float64Array) => any,\n\t\tthisArg?: any\n\t): Float64Array;\n\n\t/**\n\t * Returns the value of the first element in the array where predicate is true, and undefined\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found, find\n\t * immediately returns that element value. Otherwise, find returns undefined.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfind(\n\t\tpredicate: (value: number, index: number, obj: Float64Array) => boolean,\n\t\tthisArg?: any\n\t): number | undefined;\n\n\t/**\n\t * Returns the index of the first element in the array where predicate is true, and -1\n\t * otherwise.\n\t * @param predicate find calls predicate once for each element of the array, in ascending\n\t * order, until it finds one where predicate returns true. If such an element is found,\n\t * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n\t * @param thisArg If provided, it will be used as the this value for each invocation of\n\t * predicate. If it is not provided, undefined is used instead.\n\t */\n\tfindIndex(\n\t\tpredicate: (value: number, index: number, obj: Float64Array) => boolean,\n\t\tthisArg?: any\n\t): number;\n\n\t/**\n\t * Performs the specified action for each element in an array.\n\t * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tforEach(\n\t\tcallbackfn: (value: number, index: number, array: Float64Array) => void,\n\t\tthisArg?: any\n\t): void;\n\n\t/**\n\t * Returns the index of the first occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t *  search starts at index 0.\n\t */\n\tindexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * Adds all the elements of an array separated by the specified separator string.\n\t * @param separator A string used to separate one element of an array from the next in the\n\t * resulting String. If omitted, the array elements are separated with a comma.\n\t */\n\tjoin(separator?: string): string;\n\n\t/**\n\t * Returns the index of the last occurrence of a value in an array.\n\t * @param searchElement The value to locate in the array.\n\t * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n\t * search starts at index 0.\n\t */\n\tlastIndexOf(searchElement: number, fromIndex?: number): number;\n\n\t/**\n\t * The length of the array.\n\t */\n\treadonly length: int;\n\n\t/**\n\t * Calls a defined callback function on each element of an array, and returns an array that\n\t * contains the results.\n\t * @param callbackfn A function that accepts up to three arguments. The map method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tmap(\n\t\tcallbackfn: (value: number, index: number, array: Float64Array) => number,\n\t\tthisArg?: any\n\t): Float64Array;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float64Array\n\t\t) => number\n\t): number;\n\treduce(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float64Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array. The return value of\n\t * the callback function is the accumulated result, and is provided as an argument in the next\n\t * call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n\t * callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduce<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float64Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an\n\t * argument instead of an array value.\n\t */\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float64Array\n\t\t) => number\n\t): number;\n\treduceRight(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: number,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float64Array\n\t\t) => number,\n\t\tinitialValue: number\n\t): number;\n\n\t/**\n\t * Calls the specified callback function for all the elements in an array, in descending order.\n\t * The return value of the callback function is the accumulated result, and is provided as an\n\t * argument in the next call to the callback function.\n\t * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n\t * the callbackfn function one time for each element in the array.\n\t * @param initialValue If initialValue is specified, it is used as the initial value to start\n\t * the accumulation. The first call to the callbackfn function provides this value as an argument\n\t * instead of an array value.\n\t */\n\treduceRight<U>(\n\t\tcallbackfn: (\n\t\t\tpreviousValue: U,\n\t\t\tcurrentValue: number,\n\t\t\tcurrentIndex: number,\n\t\t\tarray: Float64Array\n\t\t) => U,\n\t\tinitialValue: U\n\t): U;\n\n\t/**\n\t * Reverses the elements in an Array.\n\t */\n\treverse(): Float64Array;\n\n\t/**\n\t * Sets a value or an array of values.\n\t * @param array A typed or untyped array of values to set.\n\t * @param offset The index in the current array at which the values are to be written.\n\t */\n\tset(array: ArrayLike<number>, offset?: number): void;\n\n\t/**\n\t * Returns a section of an array.\n\t * @param start The beginning of the specified portion of the array.\n\t * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n\t */\n\tslice(start?: number, end?: number): Float64Array;\n\n\t/**\n\t * Determines whether the specified callback function returns true for any element of an array.\n\t * @param predicate A function that accepts up to three arguments. The some method calls\n\t * the predicate function for each element in the array until the predicate returns a value\n\t * which is coercible to the Boolean value true, or until the end of the array.\n\t * @param thisArg An object to which the this keyword can refer in the predicate function.\n\t * If thisArg is omitted, undefined is used as the this value.\n\t */\n\tsome(\n\t\tpredicate: (value: number, index: number, array: Float64Array) => unknown,\n\t\tthisArg?: any\n\t): boolean;\n\n\t/**\n\t * Sorts an array.\n\t * @param compareFn Function used to determine the order of the elements. It is expected to return\n\t * a negative value if first argument is less than second argument, zero if they're equal and a positive\n\t * value otherwise. If omitted, the elements are sorted in ascending order.\n\t * ```ts\n\t * [11,2,22,1].sort((a, b) => a - b)\n\t * ```\n\t */\n\tsort(compareFn?: (a: number, b: number) => number): this;\n\n\t/**\n\t * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements\n\t * at begin, inclusive, up to end, exclusive.\n\t * @param begin The index of the beginning of the array.\n\t * @param end The index of the end of the array.\n\t */\n\tsubarray(begin?: number, end?: number): Float64Array;\n\n\t/**\n\t * Converts a number to a string by using the current locale.\n\t */\n\ttoLocaleString(): string;\n\n\t/**\n\t * Returns a string representation of an array.\n\t */\n\ttoString(): string;\n\n\t/** Returns the primitive value of the specified object. */\n\tvalueOf(): Float64Array;\n\n\t[index: number]: number;\n}\n\ninterface Float64ArrayConstructor {\n\treadonly prototype: Float64Array;\n\tnew (length: int): Float64Array;\n\tnew (array: ArrayLike<number> | ArrayBufferLike): Float64Array;\n\tnew (buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float64Array;\n\n\t/**\n\t * The size in bytes of each element in the array.\n\t */\n\treadonly BYTES_PER_ELEMENT: number;\n\n\t/**\n\t * Returns a new array from a set of elements.\n\t * @param items A set of elements to include in the new array object.\n\t */\n\tof(...items: number[]): Float64Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t */\n\tfrom(arrayLike: ArrayLike<number>): Float64Array;\n\n\t/**\n\t * Creates an array from an array-like or iterable object.\n\t * @param arrayLike An array-like or iterable object to convert to an array.\n\t * @param mapfn A mapping function to call on every element of the array.\n\t * @param thisArg Value of 'this' used to invoke the mapfn.\n\t */\n\tfrom<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array;\n}\ndeclare var Float64Array: Float64ArrayConstructor;\n\n/////////////////////////////\n/// ECMAScript Internationalization API\n/////////////////////////////\n\ndeclare namespace Intl {\n\tinterface CollatorOptions {\n\t\tusage?: 'sort' | 'search' | undefined;\n\t\tlocaleMatcher?: 'lookup' | 'best fit' | undefined;\n\t\tnumeric?: boolean | undefined;\n\t\tcaseFirst?: 'upper' | 'lower' | 'false' | undefined;\n\t\tsensitivity?: 'base' | 'accent' | 'case' | 'variant' | undefined;\n\t\tcollation?:\n\t\t\t| 'big5han'\n\t\t\t| 'compat'\n\t\t\t| 'dict'\n\t\t\t| 'direct'\n\t\t\t| 'ducet'\n\t\t\t| 'emoji'\n\t\t\t| 'eor'\n\t\t\t| 'gb2312'\n\t\t\t| 'phonebk'\n\t\t\t| 'phonetic'\n\t\t\t| 'pinyin'\n\t\t\t| 'reformed'\n\t\t\t| 'searchjl'\n\t\t\t| 'stroke'\n\t\t\t| 'trad'\n\t\t\t| 'unihan'\n\t\t\t| 'zhuyin'\n\t\t\t| undefined;\n\t\tignorePunctuation?: boolean | undefined;\n\t}\n\n\tinterface ResolvedCollatorOptions {\n\t\tlocale: string;\n\t\tusage: string;\n\t\tsensitivity: string;\n\t\tignorePunctuation: boolean;\n\t\tcollation: string;\n\t\tcaseFirst: string;\n\t\tnumeric: boolean;\n\t}\n\n\tinterface Collator {\n\t\tcompare(x: string, y: string): number;\n\t\tresolvedOptions(): ResolvedCollatorOptions;\n\t}\n\tvar Collator: {\n\t\tnew (locales?: string | string[], options?: CollatorOptions): Collator;\n\t\t(locales?: string | string[], options?: CollatorOptions): Collator;\n\t\tsupportedLocalesOf(locales: string | string[], options?: CollatorOptions): string[];\n\t};\n\n\tinterface NumberFormatOptions {\n\t\tlocaleMatcher?: string | undefined;\n\t\tstyle?: string | undefined;\n\t\tcurrency?: string | undefined;\n\t\tcurrencySign?: string | undefined;\n\t\tuseGrouping?: boolean | undefined;\n\t\tminimumIntegerDigits?: number | undefined;\n\t\tminimumFractionDigits?: number | undefined;\n\t\tmaximumFractionDigits?: number | undefined;\n\t\tminimumSignificantDigits?: number | undefined;\n\t\tmaximumSignificantDigits?: number | undefined;\n\t}\n\n\tinterface ResolvedNumberFormatOptions {\n\t\tlocale: string;\n\t\tnumberingSystem: string;\n\t\tstyle: string;\n\t\tcurrency?: string;\n\t\tminimumIntegerDigits: number;\n\t\tminimumFractionDigits: number;\n\t\tmaximumFractionDigits: number;\n\t\tminimumSignificantDigits?: number;\n\t\tmaximumSignificantDigits?: number;\n\t\tuseGrouping: boolean;\n\t}\n\n\tinterface NumberFormat {\n\t\tformat(value: number): string;\n\t\tresolvedOptions(): ResolvedNumberFormatOptions;\n\t}\n\tvar NumberFormat: {\n\t\tnew (locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\n\t\t(locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\n\t\tsupportedLocalesOf(locales: string | string[], options?: NumberFormatOptions): string[];\n\t\treadonly prototype: NumberFormat;\n\t};\n\n\tinterface DateTimeFormatOptions {\n\t\tlocaleMatcher?: 'best fit' | 'lookup' | undefined;\n\t\tweekday?: 'long' | 'short' | 'narrow' | undefined;\n\t\tera?: 'long' | 'short' | 'narrow' | undefined;\n\t\tyear?: 'numeric' | '2-digit' | undefined;\n\t\tmonth?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow' | undefined;\n\t\tday?: 'numeric' | '2-digit' | undefined;\n\t\thour?: 'numeric' | '2-digit' | undefined;\n\t\tminute?: 'numeric' | '2-digit' | undefined;\n\t\tsecond?: 'numeric' | '2-digit' | undefined;\n\t\ttimeZoneName?:\n\t\t\t| 'short'\n\t\t\t| 'long'\n\t\t\t| 'shortOffset'\n\t\t\t| 'longOffset'\n\t\t\t| 'shortGeneric'\n\t\t\t| 'longGeneric'\n\t\t\t| undefined;\n\t\tformatMatcher?: 'best fit' | 'basic' | undefined;\n\t\thour12?: boolean | undefined;\n\t\ttimeZone?: string | undefined;\n\t}\n\n\tinterface ResolvedDateTimeFormatOptions {\n\t\tlocale: string;\n\t\tcalendar: string;\n\t\tnumberingSystem: string;\n\t\ttimeZone: string;\n\t\thour12?: boolean;\n\t\tweekday?: string;\n\t\tera?: string;\n\t\tyear?: string;\n\t\tmonth?: string;\n\t\tday?: string;\n\t\thour?: string;\n\t\tminute?: string;\n\t\tsecond?: string;\n\t\ttimeZoneName?: string;\n\t}\n\n\tinterface DateTimeFormat {\n\t\tformat(date?: Date | number): string;\n\t\tresolvedOptions(): ResolvedDateTimeFormatOptions;\n\t}\n\tvar DateTimeFormat: {\n\t\tnew (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\n\t\t(locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\n\t\tsupportedLocalesOf(locales: string | string[], options?: DateTimeFormatOptions): string[];\n\t\treadonly prototype: DateTimeFormat;\n\t};\n}\n\ninterface String {\n\t/**\n\t * Determines whether two strings are equivalent in the current or specified locale.\n\t * @param that String to compare to target string\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.\n\t * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.\n\t */\n\tlocaleCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): number;\n}\n\ninterface Number {\n\t/**\n\t * Converts a number to a string by using the current or specified locale.\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n\t * @param options An object that contains one or more properties that specify comparison options.\n\t */\n\ttoLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string;\n}\n\ninterface Date {\n\t/**\n\t * Converts a date and time to a string by using the current or specified locale.\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n\t * @param options An object that contains one or more properties that specify comparison options.\n\t */\n\ttoLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\n\t/**\n\t * Converts a date to a string by using the current or specified locale.\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n\t * @param options An object that contains one or more properties that specify comparison options.\n\t */\n\ttoLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\n\n\t/**\n\t * Converts a time to a string by using the current or specified locale.\n\t * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n\t * @param options An object that contains one or more properties that specify comparison options.\n\t */\n\ttoLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/std/math.ts",
    "content": "export type bool = boolean;\nexport type float = number & { _opaque_float: 2 };\nexport type int = number & { _opaque_int: 1 } & float;\nexport type uint = number & { _opaque_uint: 1 };\ntype scalar = float | int | uint;\n\nexport type float2 = [float, float] & { _opaque_vector_float_2: 2; length: 2 };\nexport type float3 = [float, float, float] & { _opaque_vector_float_3: 3; length: 3 };\nexport type float4 = [float, float, float, float] & { _opaque_vector_float_4: 4; length: 4 };\nexport type int2 = [int, int] & { _opaque_vector_int_2: 2 } & float2;\nexport type int3 = [int, int, int] & { _opaque_vector_int_3: 3 } & float3;\nexport type int4 = [int, int, int, int] & { _opaque_vector_int_4: 4 } & float4;\n\nexport type uint2 = [uint, uint] & { _opaque_vector_uint_2: 2 } & float2;\nexport type uint3 = [uint, uint, uint] & { _opaque_vector_uint_3: 3 } & float3;\nexport type uint4 = [uint, uint, uint, uint] & { _opaque_vector_uint_4: 4 } & float4;\n\nexport type uint8 = number & { _opaque_uint8: 1 };\n\ntype anyFloat = float2 | float3 | float4;\ntype anyInt = int2 | int3 | int4;\ntype anyUint = uint2 | uint3 | uint4;\n\ntype vector2 = float2 | int2 | uint2;\ntype vector3 = float3 | int3 | uint3;\ntype vector4 = float4 | int4 | uint4;\n\ntype vector = vector2 | vector3 | vector4;\n\ntype vectorOrScalar = vector | scalar;\n\nexport interface float2x2 extends Omit<[float, float, float, float], '__index'> {\n\t__matrix: 2;\n\t[index: int]: float;\n\t__index(index: number): [float, float];\n}\n\nexport interface float3x3\n\textends Omit<[float, float, float, float, float, float, float, float, float], '__index'> {\n\t__matrix: 3;\n\t[index: int]: float;\n\t__index(index: number): [float, float, float];\n}\n\nexport interface float4x4\n\textends Omit<\n\t\t[\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat,\n\t\t\tfloat\n\t\t],\n\t\t'__index'\n\t> {\n\t__matrix: 4;\n\t[index: int]: float;\n\t__index(index: number): [float, float, float, float];\n}\n\nfunction isVector(v: vectorOrScalar): v is vector {\n\treturn Array.isArray(v);\n}\n\nfunction isScalar(v: vectorOrScalar): v is scalar {\n\treturn typeof v === 'number';\n}\n\nfunction isMatrix(v: number[]): v is float2x2 | float3x3 | float4x4 {\n\treturn !!(v as any).__matrix;\n}\n\n/** @shadeup=glsl(!mat2(0)) @shadeup=wgsl(mat2x2<f32>) */\nexport function float2x2(): float2x2;\n/** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\nexport function float2x2(m00: number, m01: number, m10: number, m11: number): float2x2;\n/** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\nexport function float2x2(...args: float[]): float2x2 {\n\tlet arr = [0, 0, 0, 0] as any as float2x2;\n\tif (args.length === 4) {\n\t\tarr = [...args] as any as float2x2;\n\t}\n\n\tapplyMatrix2x2Methods(arr);\n\n\treturn arr;\n}\n\n/** @shadeup=glsl(!mat3(0)) @shadeup=wgsl(mat3x3<f32>) */\nexport function float3x3(): float3x3;\n/** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\nexport function float3x3(\n\tm00: number,\n\tm01: number,\n\tm02: number,\n\tm10: number,\n\tm11: number,\n\tm12: number,\n\tm20: number,\n\tm21: number,\n\tm22: number\n): float3x3;\n/** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\nexport function float3x3(...args: float[]): float3x3 {\n\tlet arr = [0, 0, 0, 0, 0, 0, 0, 0, 0] as any as float3x3;\n\tif (args.length === 9) {\n\t\tarr = [...args] as any as float3x3;\n\t}\n\n\tapplyMatrix3x3Methods(arr);\n\n\treturn arr;\n}\n\nfunction applyMatrix4x4Methods(arr: float4x4): void {\n\t(arr as any).__matrix = 4;\n\n\t(arr as any).__index = function (index: number) {\n\t\tlet out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\n\t\tout_arr.__index = (index_inner: int) => {\n\t\t\treturn out_arr[index_inner];\n\t\t};\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\n\t\t\tarr[index * 4 + index_inner] = value;\n\t\t};\n\n\t\tout_arr.__index_assign_op = function (\n\t\t\top_fn: (a: any, b: any) => any,\n\t\t\tindex_inner: int,\n\t\t\tvalue: any\n\t\t) {\n\t\t\tarr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\n\t\t};\n\n\t\treturn out_arr;\n\t};\n\n\t(arr as any).__index_assign = function (index: int, value: float4) {\n\t\tarr[index * 4] = value[0];\n\t\tarr[index * 4 + 1] = value[1];\n\t\tarr[index * 4 + 2] = value[2];\n\t\tarr[index * 4 + 3] = value[3];\n\t};\n\n\t(arr as any).__index_assign_op = function (\n\t\top_fn: (a: any, b: any) => any,\n\t\tindex: int,\n\t\tvalue: any\n\t) {\n\t\tarr[index * 4] = op_fn(arr[index * 4], value[0]);\n\t\tarr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\n\t\tarr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\n\t\tarr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\n\t};\n}\n(window as any).applyMatrix4x4Methods = applyMatrix4x4Methods;\n\nfunction applyMatrix3x3Methods(arr: float3x3): void {\n\t(arr as any).__matrix = 3;\n\n\t(arr as any).__index = function (index: number) {\n\t\tlet out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\n\t\tout_arr.__index = (index_inner: int) => {\n\t\t\treturn out_arr[index_inner];\n\t\t};\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\n\t\t\tarr[index * 3 + index_inner] = value;\n\t\t};\n\n\t\tout_arr.__index_assign_op = function (\n\t\t\top_fn: (a: any, b: any) => any,\n\t\t\tindex_inner: int,\n\t\t\tvalue: any\n\t\t) {\n\t\t\tarr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\n\t\t};\n\n\t\treturn out_arr;\n\t};\n\n\t(arr as any).__index_assign = function (index: int, value: float3) {\n\t\tarr[index * 3] = value[0];\n\t\tarr[index * 3 + 1] = value[1];\n\t\tarr[index * 3 + 2] = value[2];\n\t};\n\n\t(arr as any).__index_assign_op = function (\n\t\top_fn: (a: any, b: any) => any,\n\t\tindex: int,\n\t\tvalue: any\n\t) {\n\t\tarr[index * 3] = op_fn(arr[index * 3], value[0]);\n\t\tarr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\n\t\tarr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\n\t};\n}\n\n(window as any).applyMatrix3x3Methods = applyMatrix3x3Methods;\n\nfunction applyMatrix2x2Methods(arr: float2x2): void {\n\t(arr as any).__matrix = 2;\n\n\t(arr as any).__index = function (index: number) {\n\t\tlet out_arr = [arr[index * 2], arr[index * 2 + 1]];\n\t\tout_arr.__index = (index_inner: int) => {\n\t\t\treturn out_arr[index_inner];\n\t\t};\n\t\tout_arr.__index_assign = (index_inner: int, value: float) => {\n\t\t\tarr[index * 2 + index_inner] = value;\n\t\t};\n\n\t\tout_arr.__index_assign_op = function (\n\t\t\top_fn: (a: any, b: any) => any,\n\t\t\tindex_inner: int,\n\t\t\tvalue: any\n\t\t) {\n\t\t\tarr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\n\t\t};\n\n\t\treturn out_arr;\n\t};\n\n\t(arr as any).__index_assign = function (index: int, value: float3) {\n\t\tarr[index * 2] = value[0];\n\t\tarr[index * 2 + 1] = value[1];\n\t};\n\n\t(arr as any).__index_assign_op = function (\n\t\top_fn: (a: any, b: any) => any,\n\t\tindex: int,\n\t\tvalue: any\n\t) {\n\t\tarr[index * 2] = op_fn(arr[index * 2], value[0]);\n\t\tarr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\n\t};\n}\n\n(window as any).applyMatrix2x2Methods = applyMatrix2x2Methods;\n\n/** @shadeup=glsl(!mat4(0)) @shadeup=wgsl(mat4x4<f32>) */\nexport function float4x4(): float4x4;\n/** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\nexport function float4x4(\n\tm00: number,\n\tm01: number,\n\tm02: number,\n\tm03: number,\n\tm10: number,\n\tm11: number,\n\tm12: number,\n\tm13: number,\n\tm20: number,\n\tm21: number,\n\tm22: number,\n\tm23: number,\n\tm30: number,\n\tm31: number,\n\tm32: number,\n\tm33: number\n): float4x4;\n/** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\nexport function float4x4(...args: float[]): float4x4 {\n\tlet arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as any as float4x4;\n\tif (args.length === 16) {\n\t\tarr = [...args] as any as float4x4;\n\t}\n\n\tapplyMatrix4x4Methods(arr);\n\n\treturn arr;\n}\n\n/** @shadeup=glsl(float) @shadeup=wgsl(f32) */\nexport function float(x: number): float {\n\treturn x as float;\n}\n\n/** @shadeup=glsl(int) @shadeup=wgsl(i32) */\nexport function int(x: number): int {\n\treturn (x | 0) as int;\n}\n\n/** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\nexport function uint(x: number): uint {\n\treturn (x >>> 0) as uint;\n}\n\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\nexport function float2(x: number, y: number): float2;\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\nexport function float2(xy: vector2): float2;\n\n/** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\nexport function float2(...args: (vectorOrScalar | number)[]): float2 {\n\treturn args.flat() as float2;\n}\n\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\nexport function float3(x: number, y: number, z: number): float3;\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\nexport function float3(xy: vector2, z: number): float3;\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\nexport function float3(x: number, yz: vector2): float3;\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\nexport function float3(xyz: vector3): float3;\n/** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\nexport function float3(...args: (vectorOrScalar | number)[]): float3 {\n\treturn args.flat() as float3;\n}\n\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(x: number, y: number, z: number, w: number): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(x: number, yz: vector2, w: number): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(xy: vector2, z: number, w: number): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(x: number, y: number, zw: vector2): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(xy: vector2, zw: vector2): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(xyz: vector3, w: number): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(x: number, yzw: vector3): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(xyzw: int4): float4;\nexport function float4(xyzw: float4): float4;\n/** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\nexport function float4(...args: (vectorOrScalar | number)[]): float4 {\n\treturn args.flat() as float4;\n}\n\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\nexport function int2(x: number, y: number): int2;\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\nexport function int2(xy: vector2): int2;\n\n/** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\nexport function int2(...args: (vectorOrScalar | number)[]): int2 {\n\treturn args.flat().map((x) => x | 0) as int2;\n}\n\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\nexport function int3(x: number, y: number, z: number): int3;\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\nexport function int3(xy: vector2, z: number): int3;\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\nexport function int3(x: number, yz: vector2): int3;\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\nexport function int3(xyz: vector3): int3;\n/** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\nexport function int3(...args: (vectorOrScalar | number)[]): int3 {\n\treturn args.flat().map((x) => x | 0) as int3;\n}\n\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(x: number, y: number, z: number, w: number): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(x: number, yz: vector2, w: number): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(xy: vector2, z: number, w: number): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(x: number, y: number, zw: vector2): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(xy: vector2, zw: vector2): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(xyz: vector3, w: number): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(x: number, yzw: vector3): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(xyzw: float4): int4;\nexport function int4(xyzw: int4): int4;\n/** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\nexport function int4(...args: (vectorOrScalar | number)[]): int4 {\n\treturn args.flat().map((x) => x | 0) as int4;\n}\n\n/** @shadeup=glsl(uint2) @shadeup=wgsl(vec2<u32>) */\nexport function uint2(x: number, y: number): uint2;\n/** @shadeup=glsl(uint2) @shadeup=wgsl(vec2<u32>) */\nexport function uint2(xy: vector2): uint2;\nexport function uint2(...args: (vectorOrScalar | number)[]): uint2 {\n\treturn args.flat().map((x) => x >>> 0) as uint2;\n}\n\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\nexport function uint3(x: number, y: number, z: number): uint3;\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\nexport function uint3(xy: vector2, z: number): uint3;\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\nexport function uint3(x: number, yz: vector2): uint3;\n/** @shadeup=glsl(uint3) @shadeup=wgsl(vec3<u32>) */\nexport function uint3(xyz: vector3): uint3;\nexport function uint3(...args: (vectorOrScalar | number)[]): uint3 {\n\treturn args.flat().map((x) => x >>> 0) as uint3;\n}\n\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\nexport function uint4(x: number, y: number, z: number, w: number): uint4;\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\nexport function uint4(x: number, yz: vector2, w: number): uint4;\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\nexport function uint4(xy: vector2, z: number, w: number): uint4;\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\nexport function uint4(x: number, y: number, zw: vector2): uint4;\n/** @shadeup=glsl(uint4) @shadeup=wgsl(vec4<u32>) */\nexport function uint4(xy: vector2, zw: vector2): uint4;\nexport function uint4(xyz: vector3, w: number): uint4;\nexport function uint4(x: number, yzw: vector3): uint4;\nexport function uint4(xyzw: float4): uint4;\nexport function uint4(xyzw: uint4): uint4;\nexport function uint4(...args: (vectorOrScalar | number)[]): uint4 {\n\treturn args.flat().map((x) => x >>> 0) as uint4;\n}\n\nexport function uint8(x: number): uint8 {\n\treturn ((x >>> 0) & 0xff) as uint8;\n}\n\nfunction componentMath(a: any, b: any, f: (a: number, b: number) => number): vectorOrScalar {\n\tlet aIsScalar = isScalar(a);\n\tlet bIsScalar = isScalar(b);\n\tif (aIsScalar && bIsScalar) {\n\t\treturn f(a, b) as scalar;\n\t}\n\tif (!aIsScalar && !bIsScalar) {\n\t\tif (a.length !== b.length) {\n\t\t\tthrow new Error('Cannot perform component-wise math on vectors of different lengths');\n\t\t}\n\t\t// return a.map((a, i) => f(a, b[i])) as vector;\n\t\tif (a.length == 2) {\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1])] as vector;\n\t\t} else if (a.length == 3) {\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])] as vector;\n\t\t} else if (a.length == 4) {\n\t\t\treturn [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])] as vector;\n\t\t}\n\t} else if (!aIsScalar && bIsScalar) {\n\t\tif (a.length == 2) {\n\t\t\treturn [f(a[0], b), f(a[1], b)] as vector;\n\t\t} else if (a.length == 3) {\n\t\t\treturn [f(a[0], b), f(a[1], b), f(a[2], b)] as vector;\n\t\t} else if (a.length == 4) {\n\t\t\treturn [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)] as vector;\n\t\t}\n\t} else if (!bIsScalar && aIsScalar) {\n\t\tif (b.length == 2) {\n\t\t\treturn [f(a, b[0]), f(a, b[1])] as vector;\n\t\t} else if (b.length == 3) {\n\t\t\treturn [f(a, b[0]), f(a, b[1]), f(a, b[2])] as vector;\n\t\t} else if (b.length == 4) {\n\t\t\treturn [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])] as vector;\n\t\t}\n\t}\n\n\tthrow new Error('Cannot perform component-wise math on a scalar and a vector');\n}\n\nfunction componentMathSingular(a: vectorOrScalar, f: (a: number) => number): vectorOrScalar {\n\tif (isScalar(a)) {\n\t\treturn f(a) as scalar;\n\t}\n\tif (isVector(a)) {\n\t\treturn a.map((a, i) => f(a)) as vector;\n\t}\n\n\tthrow new Error('Cannot perform component-wise math on a scalar and a vector');\n}\n\ntype cCallCb = (a: number, b: number) => number;\ntype cCallCbSingle = (a: number) => number;\n\nfunction cCall(cb: cCallCb, a: scalar, b: scalar): scalar;\nfunction cCall(cb: cCallCb, a: vector, b: scalar): vector;\nfunction cCall(cb: cCallCb, a: vector2, b: vector2): vector2;\nfunction cCall(cb: cCallCb, a: vector3, b: vector3): vector3;\nfunction cCall(cb: cCallCb, a: vector4, b: vector4): vector4;\nfunction cCall(cb: cCallCb, a: vectorOrScalar, b: vectorOrScalar): vectorOrScalar {\n\treturn componentMath(a, b, (a, b) => a + b);\n}\n\nexport type vectorOverload_2to1_3to3 = {\n\t(a: float2, b: float2): float;\n\t(a: float3, b: float3): float3;\n\n\t(a: int2, b: int2): int;\n\t(a: int3, b: int3): int3;\n\n\t(a: float2, b: int2): float;\n\t(a: float3, b: int3): float3;\n\n\t(a: int2, b: float2): float;\n\t(a: int3, b: float3): float3;\n};\nexport type vectorOverload_2to1_3to3_4to4 = {\n\t(a: float2, b: float2): float;\n\t(a: float3, b: float3): float3;\n\t(a: float4, b: float4): float4;\n\n\t(a: int2, b: int2): int;\n\t(a: int3, b: int3): int3;\n\t(a: int4, b: int4): int4;\n\n\t(a: float2, b: int2): float;\n\t(a: float3, b: int3): float3;\n\t(a: float4, b: int4): float4;\n\n\t(a: int2, b: float2): float;\n\t(a: int3, b: float3): float3;\n\t(a: int4, b: float4): float4;\n};\nexport type vectorOverload_2to1_3to1_4to1 = {\n\t(a: float2, b: float2): float;\n\t(a: float3, b: float3): float;\n\t(a: float4, b: float4): float;\n\n\t(a: int2, b: int2): int;\n\t(a: int3, b: int3): int;\n\t(a: int4, b: int4): int;\n\n\t(a: float2, b: int2): float;\n\t(a: float3, b: int3): float;\n\t(a: float4, b: int4): float;\n\n\t(a: int2, b: float2): float;\n\t(a: int3, b: float3): float;\n\t(a: int4, b: float4): float;\n};\n\nexport type componentOverload = {\n\t(a: int, b: int): int;\n\t(a: int2, b: int2): int2;\n\t(a: int3, b: int3): int3;\n\t(a: int4, b: int4): int4;\n\n\t(a: int, b: float): float;\n\t(a: float, b: int): float;\n\n\t(a: float, b: float): float;\n\n\t(a: float2, b: float): float2;\n\t(a: float3, b: float): float3;\n\t(a: float4, b: float): float4;\n\n\t(a: int2, b: int): int2;\n\t(a: int3, b: int): int3;\n\t(a: int4, b: int): int4;\n\n\t(a: int2, b: float): float2;\n\t(a: int3, b: float): float3;\n\t(a: int4, b: float): float4;\n\n\t(a: float2, b: int): float2;\n\t(a: float3, b: int): float3;\n\t(a: float4, b: int): float4;\n\t(a: float2, b: float): float2;\n\n\t(a: float, b: float2): float2;\n\t(a: float, b: float3): float3;\n\t(a: float, b: float4): float4;\n\n\t(a: int, b: int2): int2;\n\t(a: int, b: int3): int3;\n\t(a: int, b: int4): int4;\n\n\t(a: float, b: int2): float2;\n\t(a: float, b: int3): float3;\n\t(a: float, b: int4): float4;\n\n\t(a: int, b: float2): float2;\n\t(a: int, b: float3): float3;\n\t(a: int, b: float4): float4;\n\n\t(a: float2, b: float2): float2;\n\t(a: float3, b: float3): float3;\n\t(a: float4, b: float4): float4;\n\n\t(a: float2, b: int2): float2;\n\t(a: float3, b: int3): float3;\n\t(a: float4, b: int4): float4;\n\n\t(a: int2, b: float2): float2;\n\t(a: int3, b: float3): float3;\n\t(a: int4, b: float4): float4;\n\n\t(a: uint, b: uint): uint;\n\t(a: uint2, b: uint2): uint2;\n\t(a: uint3, b: uint3): uint3;\n\t(a: uint4, b: uint4): uint4;\n};\n\nexport type componentOverloadMatch = {\n\t(a: uint, b: uint): uint;\n\t(a: uint2, b: uint2): uint2;\n\t(a: uint3, b: uint3): uint3;\n\t(a: uint4, b: uint4): uint4;\n\t(a: uint2, b: uint): uint2;\n\t(a: uint3, b: uint): uint3;\n\t(a: uint4, b: uint): uint4;\n\n\t(a: int, b: int): int;\n\t(a: int2, b: int2): int2;\n\t(a: int3, b: int3): int3;\n\t(a: int4, b: int4): int4;\n\t(a: int2, b: int): int2;\n\t(a: int3, b: int): int3;\n\t(a: int4, b: int): int4;\n\n\t(a: float, b: float): float;\n\t(a: float2, b: float2): float2;\n\t(a: float3, b: float3): float3;\n\t(a: float4, b: float4): float4;\n\t(a: float2, b: float): float2;\n\t(a: float3, b: float): float3;\n\t(a: float4, b: float): float4;\n};\n\nexport type componentOverloadSingular = {\n\t(a: int): int;\n\t(a: float): float;\n\n\t(a: float2): float2;\n\t(a: float3): float3;\n\t(a: float4): float4;\n\n\t(a: int2): int2;\n\t(a: int3): int3;\n\t(a: int4): int4;\n\n\t(a: uint): uint;\n\t(a: uint2): uint2;\n\t(a: uint3): uint3;\n\t(a: uint4): uint4;\n};\n\nexport type componentOverloadSingularFloat = {\n\t// (a: int): int;\n\t(a: float): float;\n\n\t(a: float2): float2;\n\t(a: float3): float3;\n\t(a: float4): float4;\n\n\t// (a: int2): int2;\n\t// (a: int3): int3;\n\t// (a: int4): int4;\n};\n\nexport type componentOverloadMatrix = {\n\t(a: float2x2, b: float2): float2;\n\t(a: float3x3, b: float3): float3;\n\t(a: float4x4, b: float4): float4;\n\n\t(a: float2, b: float2x2): float2;\n\t(a: float3, b: float3x3): float3;\n\t(a: float4, b: float4x4): float4;\n\n\t(a: float2x2, b: float2x2): float2x2;\n\t(a: float3x3, b: float3x3): float3x3;\n\t(a: float4x4, b: float4x4): float4x4;\n\n\t(a: float2x2, b: float): float2x2;\n\t(a: float3x3, b: float): float3x3;\n\t(a: float4x4, b: float): float4x4;\n\n\t(a: float, b: float2x2): float2x2;\n\t(a: float, b: float3x3): float3x3;\n\t(a: float, b: float4x4): float4x4;\n};\n\nfunction componentOp(cb: cCallCb): componentOverload;\n\nfunction componentOp(cb: cCallCb) {\n\treturn (a: any, b: any) => componentMath(a, b, cb);\n}\n\nfunction componentOpMatch(cb: cCallCb): componentOverloadMatch;\nfunction componentOpMatch(cb: cCallCb) {\n\treturn (a: any, b: any) => componentMath(a, b, cb);\n}\n\nfunction componentOpSingular(cb: cCallCbSingle): componentOverloadSingular;\n\nfunction componentOpSingular(cb: cCallCbSingle) {\n\treturn (a: any) => componentMathSingular(a, cb);\n}\n\nfunction componentOpSingularFloat(cb: cCallCbSingle): componentOverloadSingularFloat;\n\nfunction componentOpSingularFloat(cb: cCallCbSingle) {\n\treturn (a: any) => componentMathSingular(a, cb);\n}\n\n/** @shadeup=univ(!$0$ + $1$)*/\nexport const add: componentOverload & ((a: string, b: string) => string) = (\n\ta: any,\n\tb: any\n): any => {\n\tif (typeof a === 'string' && typeof b === 'string') {\n\t\treturn `${a}${b}`;\n\t} else {\n\t\tlet addOp: (a: any, b: any) => any = componentOp((a, b) => a + b);\n\t\tlet v: any = addOp(a, b);\n\t\treturn v;\n\t}\n};\n\n/** @shadeup=univ(!$0$ - $1$)*/\nexport const sub = componentOp((a, b) => a - b);\n\ntype matrix = float2x2 | float3x3 | float4x4;\n\nfunction matrixMul(a: matrix, b: matrix): matrix {\n\t// Multiply two square matrices of the same dimension row-major\n\n\tlet dimension = a.__matrix;\n\n\tlet out: float2x2 | float3x3 | float4x4;\n\tif (dimension === 2) {\n\t\tout = float2x2();\n\t} else if (dimension === 3) {\n\t\tout = float3x3();\n\t} else if (dimension === 4) {\n\t\tvar a00 = a[0 * 4 + 0];\n\t\tvar a01 = a[0 * 4 + 1];\n\t\tvar a02 = a[0 * 4 + 2];\n\t\tvar a03 = a[0 * 4 + 3];\n\t\tvar a10 = a[1 * 4 + 0];\n\t\tvar a11 = a[1 * 4 + 1];\n\t\tvar a12 = a[1 * 4 + 2];\n\t\tvar a13 = a[1 * 4 + 3];\n\t\tvar a20 = a[2 * 4 + 0];\n\t\tvar a21 = a[2 * 4 + 1];\n\t\tvar a22 = a[2 * 4 + 2];\n\t\tvar a23 = a[2 * 4 + 3];\n\t\tvar a30 = a[3 * 4 + 0];\n\t\tvar a31 = a[3 * 4 + 1];\n\t\tvar a32 = a[3 * 4 + 2];\n\t\tvar a33 = a[3 * 4 + 3];\n\t\tvar b00 = b[0 * 4 + 0];\n\t\tvar b01 = b[0 * 4 + 1];\n\t\tvar b02 = b[0 * 4 + 2];\n\t\tvar b03 = b[0 * 4 + 3];\n\t\tvar b10 = b[1 * 4 + 0];\n\t\tvar b11 = b[1 * 4 + 1];\n\t\tvar b12 = b[1 * 4 + 2];\n\t\tvar b13 = b[1 * 4 + 3];\n\t\tvar b20 = b[2 * 4 + 0];\n\t\tvar b21 = b[2 * 4 + 1];\n\t\tvar b22 = b[2 * 4 + 2];\n\t\tvar b23 = b[2 * 4 + 3];\n\t\tvar b30 = b[3 * 4 + 0];\n\t\tvar b31 = b[3 * 4 + 1];\n\t\tvar b32 = b[3 * 4 + 2];\n\t\tvar b33 = b[3 * 4 + 3];\n\t\treturn float4x4(\n\t\t\tb00 * a00 + b01 * a10 + b02 * a20 + b03 * a30,\n\t\t\tb00 * a01 + b01 * a11 + b02 * a21 + b03 * a31,\n\t\t\tb00 * a02 + b01 * a12 + b02 * a22 + b03 * a32,\n\t\t\tb00 * a03 + b01 * a13 + b02 * a23 + b03 * a33,\n\t\t\tb10 * a00 + b11 * a10 + b12 * a20 + b13 * a30,\n\t\t\tb10 * a01 + b11 * a11 + b12 * a21 + b13 * a31,\n\t\t\tb10 * a02 + b11 * a12 + b12 * a22 + b13 * a32,\n\t\t\tb10 * a03 + b11 * a13 + b12 * a23 + b13 * a33,\n\t\t\tb20 * a00 + b21 * a10 + b22 * a20 + b23 * a30,\n\t\t\tb20 * a01 + b21 * a11 + b22 * a21 + b23 * a31,\n\t\t\tb20 * a02 + b21 * a12 + b22 * a22 + b23 * a32,\n\t\t\tb20 * a03 + b21 * a13 + b22 * a23 + b23 * a33,\n\t\t\tb30 * a00 + b31 * a10 + b32 * a20 + b33 * a30,\n\t\t\tb30 * a01 + b31 * a11 + b32 * a21 + b33 * a31,\n\t\t\tb30 * a02 + b31 * a12 + b32 * a22 + b33 * a32,\n\t\t\tb30 * a03 + b31 * a13 + b32 * a23 + b33 * a33\n\t\t);\n\t\tout = float4x4();\n\t}\n\n\tfor (let i = 0; i < dimension; i++) {\n\t\tfor (let j = 0; j < dimension; j++) {\n\t\t\tlet sum: float = float(0);\n\t\t\tfor (let k = 0; k < dimension; k++) {\n\t\t\t\tsum += float(a[i * dimension + k] * b[k * dimension + j]);\n\t\t\t}\n\t\t\tout[i * dimension + j] = sum;\n\t\t}\n\t}\n\n\treturn out;\n\n\tif (a.__matrix === 2 && b.__matrix === 2) {\n\t\tlet a00 = a[0];\n\t\tlet a01 = a[1];\n\t\tlet a10 = a[2];\n\t\tlet a11 = a[3];\n\n\t\tlet b00 = b[0];\n\t\tlet b01 = b[1];\n\t\tlet b10 = b[2];\n\t\tlet b11 = b[3];\n\n\t\tlet v = float2x2(\n\t\t\ta00 * b00 + a01 * b10,\n\t\t\ta00 * b01 + a01 * b11,\n\t\t\ta10 * b00 + a11 * b10,\n\t\t\ta10 * b01 + a11 * b11\n\t\t);\n\n\t\treturn v;\n\t} else if (a.__matrix === 3 && b.__matrix === 3) {\n\t\tlet a00 = a[0];\n\t\tlet a01 = a[1];\n\t\tlet a02 = a[2];\n\t\tlet a10 = a[3];\n\t\tlet a11 = a[4];\n\t\tlet a12 = a[5];\n\t\tlet a20 = a[6];\n\t\tlet a21 = a[7];\n\t\tlet a22 = a[8];\n\n\t\tlet b00 = b[0];\n\t\tlet b01 = b[1];\n\t\tlet b02 = b[2];\n\t\tlet b10 = b[3];\n\t\tlet b11 = b[4];\n\t\tlet b12 = b[5];\n\t\tlet b20 = b[6];\n\t\tlet b21 = b[7];\n\t\tlet b22 = b[8];\n\n\t\tlet v = float3x3(\n\t\t\ta00 * b00 + a01 * b10 + a02 * b20,\n\t\t\ta00 * b01 + a01 * b11 + a02 * b21,\n\t\t\ta00 * b02 + a01 * b12 + a02 * b22,\n\t\t\ta10 * b00 + a11 * b10 + a12 * b20,\n\t\t\ta10 * b01 + a11 * b11 + a12 * b21,\n\t\t\ta10 * b02 + a11 * b12 + a12 * b22,\n\t\t\ta20 * b00 + a21 * b10 + a22 * b20,\n\t\t\ta20 * b01 + a21 * b11 + a22 * b21,\n\t\t\ta20 * b02 + a21 * b12 + a22 * b22\n\t\t);\n\t\treturn v;\n\t} else if (a.__matrix === 4 && b.__matrix === 4) {\n\t\tlet a00 = a[0];\n\t\tlet a01 = a[1];\n\t\tlet a02 = a[2];\n\t\tlet a03 = a[3];\n\t\tlet a10 = a[4];\n\t\tlet a11 = a[5];\n\t\tlet a12 = a[6];\n\t\tlet a13 = a[7];\n\t\tlet a20 = a[8];\n\t\tlet a21 = a[9];\n\t\tlet a22 = a[10];\n\t\tlet a23 = a[11];\n\t\tlet a30 = a[12];\n\t\tlet a31 = a[13];\n\t\tlet a32 = a[14];\n\t\tlet a33 = a[15];\n\n\t\tlet b00 = b[0];\n\t\tlet b01 = b[1];\n\t\tlet b02 = b[2];\n\t\tlet b03 = b[3];\n\t\tlet b10 = b[4];\n\t\tlet b11 = b[5];\n\t\tlet b12 = b[6];\n\t\tlet b13 = b[7];\n\t\tlet b20 = b[8];\n\t\tlet b21 = b[9];\n\t\tlet b22 = b[10];\n\t\tlet b23 = b[11];\n\t\tlet b30 = b[12];\n\t\tlet b31 = b[13];\n\t\tlet b32 = b[14];\n\t\tlet b33 = b[15];\n\n\t\tlet v = float4x4(\n\t\t\ta00 * b00 + a01 * b10 + a02 * b20 + a03 * b30,\n\t\t\ta00 * b01 + a01 * b11 + a02 * b21 + a03 * b31,\n\t\t\ta00 * b02 + a01 * b12 + a02 * b22 + a03 * b32,\n\t\t\ta00 * b03 + a01 * b13 + a02 * b23 + a03 * b33,\n\t\t\ta10 * b00 + a11 * b10 + a12 * b20 + a13 * b30,\n\t\t\ta10 * b01 + a11 * b11 + a12 * b21 + a13 * b31,\n\t\t\ta10 * b02 + a11 * b12 + a12 * b22 + a13 * b32,\n\t\t\ta10 * b03 + a11 * b13 + a12 * b23 + a13 * b33,\n\t\t\ta20 * b00 + a21 * b10 + a22 * b20 + a23 * b30,\n\t\t\ta20 * b01 + a21 * b11 + a22 * b21 + a23 * b31,\n\t\t\ta20 * b02 + a21 * b12 + a22 * b22 + a23 * b32,\n\t\t\ta20 * b03 + a21 * b13 + a22 * b23 + a23 * b33,\n\t\t\ta30 * b00 + a31 * b10 + a32 * b20 + a33 * b30,\n\t\t\ta30 * b01 + a31 * b11 + a32 * b21 + a33 * b31,\n\t\t\ta30 * b02 + a31 * b12 + a32 * b22 + a33 * b32,\n\t\t\ta30 * b03 + a31 * b13 + a32 * b23 + a33 * b33\n\t\t);\n\n\t\treturn v;\n\t} else {\n\t\tthrow new Error('Invalid matrix multiplication');\n\t}\n}\n\nfunction matrixInversefloat2x2(m: float2x2): float2x2 {\n\tlet a = m.__index(0).__index(0),\n\t\tb = m.__index(1).__index(0),\n\t\tc = m.__index(0).__index(1),\n\t\td = m.__index(1).__index(1);\n\tlet det = a * d - b * c;\n\tif (det === 0) {\n\t\tthrow new Error('Matrix determinant is zero');\n\t}\n\tlet detInv = 1.0 / det;\n\treturn float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\n}\nfunction matrixInversefloat3x3(m: float3x3): float3x3 {\n\tlet n11 = m.__index(0).__index(0),\n\t\tn12 = m.__index(1).__index(0),\n\t\tn13 = m.__index(2).__index(0);\n\tlet n21 = m.__index(0).__index(1),\n\t\tn22 = m.__index(1).__index(1),\n\t\tn23 = m.__index(2).__index(1);\n\tlet n31 = m.__index(0).__index(2),\n\t\tn32 = m.__index(1).__index(2),\n\t\tn33 = m.__index(2).__index(2);\n\tlet t11 = n33 * n22 - n32 * n23,\n\t\tt12 = n32 * n13 - n33 * n12,\n\t\tt13 = n23 * n12 - n22 * n13;\n\tlet det = n11 * t11 + n21 * t12 + n31 * t13;\n\tif (det === 0) {\n\t\tthrow new Error('Invalid matrix inverse');\n\t}\n\tlet detInv = 1 / det;\n\tlet v = float3x3(\n\t\tt11 * detInv,\n\t\t(n31 * n23 - n33 * n21) * detInv,\n\t\t(n32 * n21 - n31 * n22) * detInv,\n\t\tt12 * detInv,\n\t\t(n33 * n11 - n31 * n13) * detInv,\n\t\t(n31 * n12 - n32 * n11) * detInv,\n\t\tt13 * detInv,\n\t\t(n21 * n13 - n23 * n11) * detInv,\n\t\t(n22 * n11 - n21 * n12) * detInv\n\t);\n\treturn v;\n}\nfunction matrixInversefloat4x4(m: float4x4): float4x4 {\n\tvar m00 = m[0 * 4 + 0];\n\tvar m01 = m[0 * 4 + 1];\n\tvar m02 = m[0 * 4 + 2];\n\tvar m03 = m[0 * 4 + 3];\n\tvar m10 = m[1 * 4 + 0];\n\tvar m11 = m[1 * 4 + 1];\n\tvar m12 = m[1 * 4 + 2];\n\tvar m13 = m[1 * 4 + 3];\n\tvar m20 = m[2 * 4 + 0];\n\tvar m21 = m[2 * 4 + 1];\n\tvar m22 = m[2 * 4 + 2];\n\tvar m23 = m[2 * 4 + 3];\n\tvar m30 = m[3 * 4 + 0];\n\tvar m31 = m[3 * 4 + 1];\n\tvar m32 = m[3 * 4 + 2];\n\tvar m33 = m[3 * 4 + 3];\n\tvar tmp_0 = m22 * m33;\n\tvar tmp_1 = m32 * m23;\n\tvar tmp_2 = m12 * m33;\n\tvar tmp_3 = m32 * m13;\n\tvar tmp_4 = m12 * m23;\n\tvar tmp_5 = m22 * m13;\n\tvar tmp_6 = m02 * m33;\n\tvar tmp_7 = m32 * m03;\n\tvar tmp_8 = m02 * m23;\n\tvar tmp_9 = m22 * m03;\n\tvar tmp_10 = m02 * m13;\n\tvar tmp_11 = m12 * m03;\n\tvar tmp_12 = m20 * m31;\n\tvar tmp_13 = m30 * m21;\n\tvar tmp_14 = m10 * m31;\n\tvar tmp_15 = m30 * m11;\n\tvar tmp_16 = m10 * m21;\n\tvar tmp_17 = m20 * m11;\n\tvar tmp_18 = m00 * m31;\n\tvar tmp_19 = m30 * m01;\n\tvar tmp_20 = m00 * m21;\n\tvar tmp_21 = m20 * m01;\n\tvar tmp_22 = m00 * m11;\n\tvar tmp_23 = m10 * m01;\n\n\tvar t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\n\tvar t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\n\tvar t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\n\tvar t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\n\n\tvar d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n\tif (d === 0) {\n\t\tthrow new Error('Invalid matrix inverse');\n\t}\n\treturn float4x4(\n\t\td * t0,\n\t\td * t1,\n\t\td * t2,\n\t\td * t3,\n\t\td * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)),\n\t\td * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)),\n\t\td * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)),\n\t\td * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)),\n\t\td * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)),\n\t\td * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)),\n\t\td * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)),\n\t\td * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)),\n\t\td * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)),\n\t\td * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)),\n\t\td * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)),\n\t\td * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02))\n\t);\n}\n\nfunction matrixTransposefloat2x2(m: float2x2): float2x2 {\n\treturn float2x2(\n\t\tm.__index(0).__index(0),\n\t\tm.__index(1).__index(0),\n\t\tm.__index(0).__index(1),\n\t\tm.__index(1).__index(1)\n\t);\n}\n\nfunction matrixTransposefloat3x3(m: float3x3): float3x3 {\n\treturn float3x3(\n\t\tm.__index(0).__index(0),\n\t\tm.__index(1).__index(0),\n\t\tm.__index(2).__index(0),\n\t\tm.__index(0).__index(1),\n\t\tm.__index(1).__index(1),\n\t\tm.__index(2).__index(1),\n\t\tm.__index(0).__index(2),\n\t\tm.__index(1).__index(2),\n\t\tm.__index(2).__index(2)\n\t);\n}\n\nfunction matrixTransposefloat4x4(m: float4x4): float4x4 {\n\treturn float4x4(\n\t\tm.__index(0).__index(0),\n\t\tm.__index(1).__index(0),\n\t\tm.__index(2).__index(0),\n\t\tm.__index(3).__index(0),\n\t\tm.__index(0).__index(1),\n\t\tm.__index(1).__index(1),\n\t\tm.__index(2).__index(1),\n\t\tm.__index(3).__index(1),\n\t\tm.__index(0).__index(2),\n\t\tm.__index(1).__index(2),\n\t\tm.__index(2).__index(2),\n\t\tm.__index(3).__index(2),\n\t\tm.__index(0).__index(3),\n\t\tm.__index(1).__index(3),\n\t\tm.__index(2).__index(3),\n\t\tm.__index(3).__index(3)\n\t);\n}\n\nfunction matrixMul2x2float2(a: float2x2, b: float2): float2 {\n\tlet c: number[] = [0 as scalar, 0 as scalar];\n\n\tfor (let j = 0; j < 2; j++) {\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tc[i] += a[j * 2 + i] * b[j];\n\t\t}\n\t}\n\n\treturn c as float2;\n}\n\nfunction matrixMul3x3float3(a: float3x3, b: float3): float3 {\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar];\n\n\tfor (let i = 0; i < 3; i++) {\n\t\tfor (let j = 0; j < 3; j++) {\n\t\t\tc[i] += a[j * 3 + i] * b[j];\n\t\t}\n\t}\n\n\treturn c as float3;\n}\n\nfunction matrixMul4x4float4(a: float4x4, b: float4): float4 {\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar, 0 as scalar];\n\n\tfor (let j = 0; j < 4; j++) {\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tc[i] += a[j * 4 + i] * b[j];\n\t\t}\n\t}\n\n\treturn c as float4;\n}\n\nfunction matrixMulfloat22x2(a: float2, b: float2x2): float2 {\n\tlet c: number[] = [0 as scalar, 0 as scalar];\n\n\tfor (let j = 0; j < 2; j++) {\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tc[i] += a[j] * b[i * 2 + j];\n\t\t}\n\t}\n\n\treturn c as float2;\n}\n\nfunction matrixMulfloat33x3(a: float3, b: float3x3): float3 {\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar];\n\n\tfor (let i = 0; i < 3; i++) {\n\t\tfor (let j = 0; j < 3; j++) {\n\t\t\tc[i] += a[j] * b[i * 3 + j];\n\t\t}\n\t}\n\n\treturn c as float3;\n}\n\nfunction matrixMulfloat44x4(a: float4, b: float4x4): float4 {\n\tlet c: number[] = [0 as scalar, 0 as scalar, 0 as scalar, 0 as scalar];\n\n\tfor (let i = 0; i < 4; i++) {\n\t\tfor (let j = 0; j < 4; j++) {\n\t\t\tc[i] += a[j] * b[i * 4 + j];\n\t\t}\n\t}\n\n\treturn c as float4;\n}\n\nlet mulFunc: (a: any, b: any) => any = componentOp((a, b) => a * b);\n\n/** @shadeup=univ(#matrix_inverse)*/\nexport function inverse(a: float2x2): float2x2;\nexport function inverse(a: float3x3): float3x3;\nexport function inverse(a: float4x4): float4x4;\nexport function inverse(a: float2x2 | float3x3 | float4x4): float2x2 | float3x3 | float4x4 {\n\tif (a.__matrix == 2) {\n\t\treturn matrixInversefloat2x2(a as float2x2);\n\t} else if (a.__matrix == 3) {\n\t\treturn matrixInversefloat3x3(a as float3x3);\n\t} else if (a.__matrix == 4) {\n\t\treturn matrixInversefloat4x4(a as float4x4);\n\t}\n}\n\n/** @shadeup=univ(#matrix_transpose)*/\nexport function transpose(a: float2x2): float2x2;\nexport function transpose(a: float3x3): float3x3;\nexport function transpose(a: float4x4): float4x4;\nexport function transpose(a: float2x2 | float3x3 | float4x4): float2x2 | float3x3 | float4x4 {\n\tif (a.__matrix == 2) {\n\t\treturn matrixTransposefloat2x2(a as float2x2);\n\t} else if (a.__matrix == 3) {\n\t\treturn matrixTransposefloat3x3(a as float3x3);\n\t} else if (a.__matrix == 4) {\n\t\treturn matrixTransposefloat4x4(a as float4x4);\n\t}\n}\n\n/** @shadeup=univ(!$0$ * $1$)*/\nexport const mul: componentOverload & componentOverloadMatrix = (a: any, b: any): any => {\n\tif (isMatrix(a) || isMatrix(b)) {\n\t\tif (isMatrix(a) && isMatrix(b)) {\n\t\t\treturn matrixMul(a, b);\n\t\t} else {\n\t\t\tif (isMatrix(a) && typeof b == 'number') {\n\t\t\t\treturn componentMath(b as scalar, a as any, (a, b) => a * b);\n\t\t\t} else if (isMatrix(b) && typeof a == 'number') {\n\t\t\t\treturn componentMath(a as scalar, b as any, (a, b) => a * b);\n\t\t\t} else {\n\t\t\t\tif (isMatrix(a)) {\n\t\t\t\t\tif (a.length == 4) {\n\t\t\t\t\t\treturn matrixMul2x2float2(a as float2x2, b as float2);\n\t\t\t\t\t} else if (a.length == 9) {\n\t\t\t\t\t\treturn matrixMul3x3float3(a as float3x3, b as float3);\n\t\t\t\t\t} else if (a.length == 16) {\n\t\t\t\t\t\treturn matrixMul4x4float4(a as float4x4, b as float4);\n\t\t\t\t\t}\n\t\t\t\t} else if (isMatrix(b)) {\n\t\t\t\t\tif (b.length == 4) {\n\t\t\t\t\t\treturn matrixMulfloat22x2(a as float2, b as float2x2);\n\t\t\t\t\t} else if (b.length == 9) {\n\t\t\t\t\t\treturn matrixMulfloat33x3(a as float3, b as float3x3);\n\t\t\t\t\t} else if (b.length == 16) {\n\t\t\t\t\t\treturn matrixMulfloat44x4(a as float4, b as float4x4);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn mulFunc(a, b);\n\t}\n};\n\n/** @shadeup=univ(!$0$ / $1$)*/\nexport const div = componentOp((a, b) => a / b);\n\n/** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\nexport const pow = componentOp((a, b) => Math.pow(a, b));\n\n/** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\nexport const mod = componentOpMatch((a, b) => a - b * Math.floor(a / b));\n\n/** @shadeup=univ(!$0$ & $1$)*/\nexport const bitand = componentOp((a, b) => a & b);\n\n/** @shadeup=univ(!$0$ | $1$)*/\nexport const bitor = componentOp((a, b) => a | b);\n\n/** @shadeup=univ(!$0$ ^ $1$)*/\nexport const bitxor = componentOp((a, b) => a ^ b);\n\n/** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\nexport const lshift = componentOp((a, b) => a << b);\n\n/** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\nexport const rshift = componentOp((a, b) => a >> b);\n\n/** @shadeup=univ(!~$0$)*/\nexport const bitnot = componentOpSingular((a) => ~a);\n\n/** @shadeup=univ(!-($0$))*/\nexport const negate = componentOpSingular((a) => -a);\n\n/** @shadeup=univ(!+($0$))*/\nexport const positive = componentOpSingular((a) => Math.abs(a));\n\n/** @shadeup=univ(abs)*/\nexport const abs = componentOpSingular((a) => Math.abs(a));\n\n/**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\nexport const floor = componentOpSingular(Math.floor);\n\n/** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\nexport const ceil = componentOpSingular(Math.ceil);\n\n/** @shadeup=univ(round)*/\nexport const round = componentOpSingular(Math.round);\n\n/** @shadeup=univ(sign)*/\nexport const sign = componentOpSingular(Math.sign);\n\n/** @shadeup=univ(cos) */\nexport const cos = componentOpSingular(Math.cos);\n\n/** @shadeup=univ(sin) */\nexport const sin = componentOpSingularFloat(Math.sin);\n\n/** @shadeup=univ(tan) */\nexport const tan = componentOpSingular(Math.tan);\n\n/** @shadeup=univ(acos) */\nexport const acos = componentOpSingular(Math.acos);\n\n/** @shadeup=univ(asin) */\nexport const asin = componentOpSingular(Math.asin);\n\n/** @shadeup=univ(atan) */\nexport const atan = componentOpSingular(Math.atan);\n\n/** @shadeup=univ(atan2) */\nexport const atan2: (dy: float, dx: float) => float = Math.atan2 as any;\n\n/** @shadeup=univ(cosh) */\nexport const cosh = componentOpSingular(Math.cosh);\n\n/** @shadeup=univ(sinh) */\nexport const sinh = componentOpSingular(Math.sinh);\n\n/** @shadeup=univ(tanh) */\nexport const tanh = componentOpSingular(Math.tanh);\n\n/** @shadeup=univ(acosh) */\nexport const acosh = componentOpSingular(Math.acosh);\n\n/** @shadeup=univ(asinh) */\nexport const asinh = componentOpSingular(Math.asinh);\n\n/** @shadeup=univ(atanh) */\nexport const atanh = componentOpSingular(Math.atanh);\n\n/** @shadeup=univ(exp) */\nexport const exp = componentOpSingular(Math.exp);\n\n/** @shadeup=univ(log) */\nexport const log = componentOpSingular(Math.log);\n\n/** @shadeup=univ(log2) */\nexport const log2 = componentOpSingular(Math.log2);\n\n/** @shadeup=univ(log10) */\nexport const log10 = componentOpSingular(Math.log10);\n\n/** @shadeup=univ(sqrt) */\nexport const sqrt = componentOpSingular(Math.sqrt);\n\n/** @shadeup=univ(inversesqrt) */\nexport const inversesqrt = componentOpSingular((a) => 1 / Math.sqrt(a));\n\n/** @shadeup=univ(fract)*/\nexport const frac = componentOpSingular((a) => a - Math.floor(a));\n\nexport function wrap(x: float, low: float, high: float): float {\n\tif (lt(x, low)) {\n\t\tlet rng = sub(high, low);\n\t\tlet s1 = sub(low, x);\n\t\tlet ms = mod(s1, rng);\n\t\treturn sub(high, ms);\n\t} else if (gte(x, high)) {\n\t\tlet rng = sub(high, low);\n\t\tlet s1 = sub(x, high);\n\t\tlet ms = mod(s1, rng);\n\t\treturn add(low, ms);\n\t} else {\n\t\treturn x;\n\t}\n\t// return add(mod(sub(x, low), sub(high, low)), low) as T;\n}\n\n/**\n * Returns a deterministic (same seed = same output) random float between 0-1\n *\n * **Note:** See the noise package for more advanced random functions\n */\n\nexport function rand(seed?: float): float {\n\tif (typeof seed === 'number') {\n\t\treturn frac(mul(sin(mul(seed, float(91.3458))), float(47453.5453))) as float;\n\t} else {\n\t\treturn Math.random() as float;\n\t}\n}\n\n/**\n * Returns a deterministic (same seed = same output) random float between 0-1\n *\n * **Note:** See the noise package for more advanced random functions\n */\nexport function rand2(seed: float2): float {\n\treturn frac(mul(sin(dot(seed, float2(12.9898, 4.1414))), float(43758.5453)));\n}\n\n/**\n * Returns a deterministic (same seed = same output) random float between 0-1\n *\n * **Note:** See the noise package for more advanced random functions\n */\nexport function rand3(seed: float3): float {\n\treturn rand2(add(swizzle(seed, 'xy'), rand(swizzle(seed, 'z'))));\n}\n\n// export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\n// \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\n// }\n\nexport function pingpong(x: float, length: float): float {\n\tconst t = mod(x, mul(length, float(2)));\n\treturn sub(length, abs(sub(t, length)));\n}\n\nfunction vectorMath_2to1_3to3(\n\tcb2: (a: vector2, b: vector2) => scalar,\n\tcb3: (a: vector3, b: vector3) => vector3\n): vectorOverload_2to1_3to3 {\n\treturn (a: any, b: any): any => {\n\t\tif (a.length === 2 && b.length === 2) {\n\t\t\treturn cb2(a, b);\n\t\t} else if (a.length === 3 && b.length === 3) {\n\t\t\treturn cb3(a, b);\n\t\t} else {\n\t\t\tthrow new Error('Invalid vector length');\n\t\t}\n\t};\n}\n\nfunction vectorMath_2to1_3to3_4to4(\n\tcb2: (a: vector2, b: vector2) => scalar,\n\tcb3: (a: vector3, b: vector3) => vector3,\n\tcb4: (a: vector4, b: vector4) => vector4\n): vectorOverload_2to1_3to3_4to4 {\n\treturn (a: any, b: any): any => {\n\t\tif (a.length === 2 && b.length === 2) {\n\t\t\treturn cb2(a, b);\n\t\t} else if (a.length === 3 && b.length === 3) {\n\t\t\treturn cb3(a, b);\n\t\t} else if (a.length === 4 && b.length === 4) {\n\t\t\treturn cb4(a, b);\n\t\t} else {\n\t\t\tthrow new Error('Invalid vector length');\n\t\t}\n\t};\n}\nfunction vectorMath_2to1_3to1_4to1(\n\tcb2: (a: vector2, b: vector2) => scalar,\n\tcb3: (a: vector3, b: vector3) => scalar,\n\tcb4: (a: vector4, b: vector4) => scalar\n): vectorOverload_2to1_3to1_4to1 {\n\treturn (a: any, b: any): any => {\n\t\tif (a.length === 2 && b.length === 2) {\n\t\t\treturn cb2(a, b);\n\t\t} else if (a.length === 3 && b.length === 3) {\n\t\t\treturn cb3(a, b);\n\t\t} else if (a.length === 4 && b.length === 4) {\n\t\t\treturn cb4(a, b);\n\t\t} else {\n\t\t\tthrow new Error('Invalid vector length');\n\t\t}\n\t};\n}\n\nfunction cross2(a: float2, b: float2): any {\n\treturn a[0] * b[1] - a[1] * b[0];\n}\n\nfunction cross3(a: float3, b: float3): any {\n\treturn [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nexport const cross = vectorMath_2to1_3to3(cross2, cross3);\n\nfunction dot2(a: float2, b: float2): any {\n\treturn a[0] * b[0] + a[1] * b[1];\n}\n\nfunction dot3(a: float3, b: float3): any {\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction dot4(a: float4, b: float4): any {\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n\n/** @shadeup=univ(dot)*/\nexport const dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\n\nfunction lerp1(a: float, b: float, t: float): float {\n\treturn (a + (b - a) * t) as float;\n}\n\nfunction lerp2(a: float2, b: float2, t: float): float2 {\n\treturn [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)] as float2;\n}\n\nfunction lerp3(a: float3, b: float3, t: float): float3 {\n\treturn [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)] as float3;\n}\n\nfunction lerp4(a: float4, b: float4, t: float): float4 {\n\treturn [\n\t\tlerp1(a[0], b[0], t),\n\t\tlerp1(a[1], b[1], t),\n\t\tlerp1(a[2], b[2], t),\n\t\tlerp1(a[3], b[3], t)\n\t] as float4;\n}\n\nfunction lerp2x2(a: float2x2, b: float2x2, t: float): float2x2 {\n\treturn float2x2(\n\t\tlerp1(a[0], b[0], t),\n\t\tlerp1(a[1], b[1], t),\n\t\tlerp1(a[2], b[2], t),\n\t\tlerp1(a[3], b[3], t)\n\t);\n}\n\nfunction lerp3x3(a: float3x3, b: float3x3, t: float): float3x3 {\n\treturn float3x3(\n\t\tlerp1(a[0], b[0], t),\n\t\tlerp1(a[1], b[1], t),\n\t\tlerp1(a[2], b[2], t),\n\t\tlerp1(a[3], b[3], t),\n\t\tlerp1(a[4], b[4], t),\n\t\tlerp1(a[5], b[5], t),\n\t\tlerp1(a[6], b[6], t),\n\t\tlerp1(a[7], b[7], t),\n\t\tlerp1(a[8], b[8], t)\n\t);\n}\n\nfunction lerp4x4(a: float4x4, b: float4x4, t: float): float4x4 {\n\treturn float4x4(\n\t\tlerp1(a[0], b[0], t),\n\t\tlerp1(a[1], b[1], t),\n\t\tlerp1(a[2], b[2], t),\n\t\tlerp1(a[3], b[3], t),\n\t\tlerp1(a[4], b[4], t),\n\t\tlerp1(a[5], b[5], t),\n\t\tlerp1(a[6], b[6], t),\n\t\tlerp1(a[7], b[7], t),\n\t\tlerp1(a[8], b[8], t),\n\t\tlerp1(a[9], b[9], t),\n\t\tlerp1(a[10], b[10], t),\n\t\tlerp1(a[11], b[11], t),\n\t\tlerp1(a[12], b[12], t),\n\t\tlerp1(a[13], b[13], t),\n\t\tlerp1(a[14], b[14], t),\n\t\tlerp1(a[15], b[15], t)\n\t);\n}\n\n/** @shadeup=univ(mix)*/\nexport function lerp(a: float, b: float, t: float): float;\nexport function lerp(a: float2, b: float2, t: float): float2;\nexport function lerp(a: float3, b: float3, t: float): float3;\nexport function lerp(a: float4, b: float4, t: float): float4;\nexport function lerp(a: float2x2, b: float2x2, t: float): float2x2;\nexport function lerp(a: float3x3, b: float3x3, t: float): float3x3;\nexport function lerp(a: float4x4, b: float4x4, t: float): float4x4;\n/** @shadeup=univ(mix)*/\nexport function lerp(a: any, b: any, t: float): any {\n\tif (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\n\t\treturn lerp1(a as float, b as float, t);\n\t} else if (isMatrix(a) && isMatrix(b)) {\n\t\tif (a.length === 4 && b.length === 4) {\n\t\t\treturn lerp2x2(a as float2x2, b as float2x2, t);\n\t\t} else if (a.length === 9 && b.length === 9) {\n\t\t\treturn lerp3x3(a as float3x3, b as float3x3, t);\n\t\t} else if (a.length === 16 && b.length === 16) {\n\t\t\treturn lerp4x4(a as float4x4, b as float4x4, t);\n\t\t} else {\n\t\t\tthrow new Error('Invalid matrix length');\n\t\t}\n\t} else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\n\t\treturn lerp2(a, b, t as float);\n\t} else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\n\t\treturn lerp3(a, b, t);\n\t} else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\n\t\treturn lerp4(a, b, t);\n\t} else {\n\t\tthrow new Error('Invalid vector length');\n\t}\n}\n\n/** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\nexport function bilerp(a: float, b: float, c: float, d: float, u: float, v: float): float;\nexport function bilerp(a: float2, b: float2, c: float2, d: float2, u: float, v: float): float2;\nexport function bilerp(a: float3, b: float3, c: float3, d: float3, u: float, v: float): float3;\nexport function bilerp(a: float4, b: float4, c: float4, d: float4, u: float, v: float): float4;\nexport function bilerp(\n\ta: float2x2,\n\tb: float2x2,\n\tc: float2x2,\n\td: float2x2,\n\tu: float,\n\tv: float\n): float2x2;\nexport function bilerp(\n\ta: float3x3,\n\tb: float3x3,\n\tc: float3x3,\n\td: float3x3,\n\tu: float,\n\tv: float\n): float3x3;\nexport function bilerp(\n\ta: float4x4,\n\tb: float4x4,\n\tc: float4x4,\n\td: float4x4,\n\tu: float,\n\tv: float\n): float4x4;\n/** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\nexport function bilerp(a: any, b: any, c: any, d: any, u: float, v: float): any {\n\treturn lerp(lerp(a, b, u), lerp(c, d, u), v);\n}\n\n/** @shadeup=univ(length)*/\nexport function length(a: float): float;\nexport function length(a: float2): float;\nexport function length(a: float3): float;\nexport function length(a: float4): float;\n/** @shadeup=univ(length)*/\nexport function length(a: any): any {\n\tif (typeof a === 'number') {\n\t\treturn Math.abs(a);\n\t} else if (a.length === 2) {\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\n\t} else if (a.length === 3) {\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\n\t} else if (a.length === 4) {\n\t\treturn Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\n\t} else {\n\t\tthrow new Error('Invalid vector length');\n\t}\n}\n\n/** @shadeup=univ(distance)*/\nexport function dist(a: float, b: float): float;\nexport function dist(a: float2, b: float2): float;\nexport function dist(a: float3, b: float3): float;\nexport function dist(a: float4, b: float4): float;\nexport function dist<T extends vectorOrScalar>(a: T, b: T): float {\n\treturn length(sub(a, b));\n}\n\n/** @shadeup=univ(distance)*/\nexport const distance = dist;\n\n/** @shadeup=univ(normalize)*/\nexport function normalize(a: float2): float2;\nexport function normalize(a: float3): float3;\nexport function normalize(a: float4): float4;\n/** @shadeup=univ(normalize)*/\nexport function normalize(a: any): any {\n\tif (a.length === 2) {\n\t\tlet l = length(a);\n\t\treturn [a[0] / l, a[1] / l];\n\t} else if (a.length === 3) {\n\t\tlet l = length(a);\n\t\treturn [a[0] / l, a[1] / l, a[2] / l];\n\t} else if (a.length === 4) {\n\t\tlet l = length(a);\n\t\treturn [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\n\t} else {\n\t\tthrow new Error('Invalid vector length');\n\t}\n}\n\n/** @shadeup=univ(reflect)*/\nexport function reflect(a: float2, b: float2): float2;\nexport function reflect(a: float3, b: float3): float3;\nexport function reflect(a: float4, b: float4): float4;\n/** @shadeup=univ(reflect)*/\nexport function reflect(a: any, b: any): any {\n\tif (a.length === 2 && b.length === 2) {\n\t\treturn reflect2(a, b);\n\t} else if (a.length === 3 && b.length === 3) {\n\t\treturn reflect3(a, b);\n\t} else if (a.length === 4 && b.length === 4) {\n\t\treturn reflect4(a, b);\n\t} else {\n\t\tthrow new Error('Invalid vector length');\n\t}\n}\n\nfunction reflect2(b, a) {\n\tlet dot = dot2(a, b);\n\treturn [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\n}\n\nfunction reflect3(b, a) {\n\tlet dot = dot3(a, b);\n\treturn [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\n}\n\nfunction reflect4(b, a) {\n\tlet dot = dot4(a, b);\n\treturn [\n\t\tb[0] - 2 * dot * a[0],\n\t\tb[1] - 2 * dot * a[1],\n\t\tb[2] - 2 * dot * a[2],\n\t\tb[3] - 2 * dot * a[3]\n\t];\n}\n\n/** @shadeup=univ(refract)*/\nexport function refract(a: float2, b: float2, eta: float): float2;\nexport function refract(a: float3, b: float3, eta: float): float3;\nexport function refract(a: float4, b: float4, eta: float): float4;\n/** @shadeup=univ(refract)*/\nexport function refract(a: any, b: any, eta: number): any {\n\tif (a.length === 2 && b.length === 2) {\n\t\treturn refract2(a, b, eta);\n\t} else if (a.length === 3 && b.length === 3) {\n\t\treturn refract3(a, b, eta);\n\t} else if (a.length === 4 && b.length === 4) {\n\t\treturn refract4(a, b, eta);\n\t} else {\n\t\tthrow new Error('Invalid vector length');\n\t}\n}\n\nfunction refract2(b, a, eta) {\n\tlet dot = dot2(a, b);\n\tlet k = 1 - eta * eta * (1 - dot * dot);\n\treturn k < 0\n\t\t? [0, 0]\n\t\t: [\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\n\t\t  ];\n}\n\nfunction refract3(b, a, eta) {\n\tlet dot = dot3(a, b);\n\tlet k = 1 - eta * eta * (1 - dot * dot);\n\treturn k < 0\n\t\t? [0, 0, 0]\n\t\t: [\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n\t\t\t\teta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\n\t\t  ];\n}\n\nfunction refract4(b, a, eta) {\n\tlet dot = dot4(a, b);\n\tlet k = 1 - eta * eta * (1 - dot * dot);\n\treturn k < 0\n\t\t? [0, 0, 0, 0]\n\t\t: [\n\t\t\t\teta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n\t\t\t\teta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n\t\t\t\teta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\n\t\t\t\teta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\n\t\t  ];\n}\n\n/** @shadeup=univ(degrees)*/\nexport function degrees(a: float): float {\n\treturn float((a * 180) / Math.PI);\n}\n\n/** @shadeup=univ(radians)*/\nexport function radians(a: float): float {\n\treturn float((a * Math.PI) / 180);\n}\n\n/** @shadeup=univ(step)*/\nexport function step(edge: float, x: float): float;\nexport function step(edge: int, x: float): float;\nexport function step<T extends vector>(edge: T, x: T): T;\nexport function step<T extends vector>(edge: float, x: T): T;\nexport function step<T extends vector>(edge: int, x: T): T;\n/** @shadeup=univ(step)*/\nexport function step(edge: any, x: any): any {\n\tif (typeof edge === 'number') {\n\t\tif (typeof x === 'number') {\n\t\t\treturn x < edge ? 0 : 1;\n\t\t} else {\n\t\t\treturn x.map((v) => (v < edge ? 0 : 1));\n\t\t}\n\t} else {\n\t\tif (typeof x === 'number') {\n\t\t\treturn edge.map((v) => (x < v ? 0 : 1));\n\t\t} else {\n\t\t\treturn edge.map((v, i) => (x[i] < v ? 0 : 1));\n\t\t}\n\t}\n}\n\nfunction _smoothstep(a, b, x) {\n\tlet t = clamp((x - a) / (b - a), 0, 1);\n\treturn t * t * (3 - 2 * t);\n}\n\n/** @shadeup=univ(smoothstep)*/\nexport function smoothstep(a: float, b: float, x: float): float;\nexport function smoothstep(a: float2, b: float2, x: float2): float2;\nexport function smoothstep(a: float3, b: float3, x: float3): float3;\nexport function smoothstep(a: float4, b: float4, x: float4): float4;\n/** @shadeup=univ(smoothstep)*/\nexport function smoothstep(a: any, b: any, x: any): any {\n\tif (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\n\t\treturn _smoothstep(a, b, x);\n\t} else if (typeof a === 'number' && typeof b === 'number') {\n\t\treturn x.map((v) => _smoothstep(a, b, v));\n\t} else {\n\t\treturn a.map((v, i) => _smoothstep(v, b[i], x[i]));\n\t}\n}\n\nfunction componentReduce(vectors: vector[], cb: (a: scalar[]) => scalar) {\n\tlet result: scalar[] = [];\n\tfor (let i = 0; i < vectors[0].length; i++) {\n\t\tresult.push(cb(vectors.map((v) => v[i])));\n\t}\n\treturn result;\n}\n\n/** @shadeup=univ(min)*/\n\nexport function min(a: int, ...b: int[]): int;\nexport function min(a: int2, ...b: int2[]): int2;\nexport function min(a: int3, ...b: int3[]): int3;\nexport function min(a: int4, ...b: int4[]): int4;\nexport function min(a: float, ...b: float[]): float;\nexport function min(a: float2, ...b: float2[]): float2;\nexport function min(a: float3, ...b: float3[]): float3;\nexport function min(a: float4, ...b: float4[]): float4;\n\nexport function min<T extends float2 | float3 | float4>(a: float, b: T): T;\nexport function min<T extends float2 | float3 | float4>(a: T, b: float): T;\nexport function min<T extends int2 | int3 | int4>(a: int, b: T): T;\nexport function min<T extends int2 | int3 | int4>(a: T, b: int): T;\n\n/** @shadeup=univ(min)*/\nexport function min<T extends vectorOrScalar>(...args: T[]): T {\n\tif (args.length == 1) {\n\t\tif (Array.isArray(args[0])) {\n\t\t\treturn Math.min(...args[0]) as T;\n\t\t} else {\n\t\t\treturn args[0];\n\t\t}\n\t} else {\n\t\tif (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n\t\t\tlet minTo = args[1] as float;\n\t\t\treturn args[0].map((v) => Math.min(v, minTo)) as T;\n\t\t} else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n\t\t\tlet minFrom = args[0] as float;\n\t\t\treturn args[1].map((v) => Math.min(minFrom, v)) as T;\n\t\t} else if (Array.isArray(args[0])) {\n\t\t\treturn componentReduce(args as vector[], (a) => Math.min(...a) as scalar) as T;\n\t\t} else {\n\t\t\treturn Math.min(...(args as number[])) as T;\n\t\t}\n\t}\n}\n\n/** @shadeup=univ(max)*/\n\nexport function max(a: int, ...b: int[]): int;\nexport function max(a: float, ...b: int[]): float;\nexport function max(a: int, ...b: float[]): float;\nexport function max(a: int2, ...b: int2[]): int2;\nexport function max(a: int3, ...b: int3[]): int3;\nexport function max(a: int4, ...b: int4[]): int4;\nexport function max(a: float, ...b: float[]): float;\nexport function max(a: float2, ...b: float2[]): float2;\nexport function max(a: float3, ...b: float3[]): float3;\nexport function max(a: float4, ...b: float4[]): float4;\n\nexport function max<T extends float2 | float3 | float4>(a: float, b: T): T;\nexport function max<T extends float2 | float3 | float4>(a: T, b: float): T;\nexport function max<T extends int2 | int3 | int4>(a: int, b: T): T;\nexport function max<T extends int2 | int3 | int4>(a: T, b: int): T;\n/** @shadeup=univ(max)*/\nexport function max<T extends vectorOrScalar>(...args: T[]): T {\n\tif (args.length == 1) {\n\t\tif (Array.isArray(args[0])) {\n\t\t\treturn Math.max(...args[0]) as T;\n\t\t} else {\n\t\t\treturn args[0];\n\t\t}\n\t} else {\n\t\tif (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n\t\t\tlet maxTo = args[1] as float;\n\t\t\treturn args[0].map((v) => Math.max(v, maxTo)) as T;\n\t\t} else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n\t\t\tlet maxFrom = args[0] as float;\n\t\t\treturn args[1].map((v) => Math.max(maxFrom, v)) as T;\n\t\t} else if (Array.isArray(args[0])) {\n\t\t\treturn componentReduce(args as vector[], (a) => Math.max(...a) as scalar) as T;\n\t\t} else {\n\t\t\treturn Math.max(...(args as number[])) as T;\n\t\t}\n\t}\n}\n\n/** @shadeup=univ(clamp)*/\nexport function clamp(arg: int, min: int, max: int): int;\nexport function clamp(arg: int2, min: int, max: int): int2;\nexport function clamp(arg: int3, min: int, max: int): int3;\nexport function clamp(arg: int4, min: int, max: int): int4;\n\nexport function clamp(arg: int2, min: int2, max: int2): int2;\nexport function clamp(arg: int3, min: int3, max: int3): int3;\nexport function clamp(arg: int4, min: int3, max: int3): int4;\n\nexport function clamp(arg: float, min: float, max: float): float;\nexport function clamp(arg: float2, min: float, max: float): float2;\nexport function clamp(arg: float3, min: float, max: float): float3;\nexport function clamp(arg: float4, min: float, max: float): float4;\n\nexport function clamp(arg: float2, min: float2, max: float2): float2;\nexport function clamp(arg: float3, min: float3, max: float3): float3;\nexport function clamp(arg: float4, min: float4, max: float4): float4;\n/** @shadeup=univ(clamp)*/\nexport function clamp(arg: any, min: any, max: any): any {\n\tif (Array.isArray(arg)) {\n\t\tif (Array.isArray(min) && Array.isArray(max)) {\n\t\t\treturn arg.map((a, i) => Math.min(Math.max(a, min[i]), max[i]));\n\t\t} else {\n\t\t\treturn arg.map((a) => Math.min(Math.max(a, min), max));\n\t\t}\n\t} else {\n\t\treturn Math.min(Math.max(arg, min), max);\n\t}\n}\n\n/** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate)*/\nexport function saturate(arg: float): float;\nexport function saturate(arg: float2): float2;\nexport function saturate(arg: float3): float3;\nexport function saturate(arg: float4): float4;\n/** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\nexport function saturate(arg: any): any {\n\treturn clamp(arg, float(0), float(1));\n}\n\n/** @shadeup=univ(!($0$ == $1$))*/\nexport function eq<T extends vectorOrScalar | string>(a: T, b: T): bool;\nexport function eq(a: any, b: any): bool {\n\tlet ta = typeof a;\n\tlet tb = typeof b;\n\tif (ta != tb) {\n\t\treturn false;\n\t} else if (\n\t\t(ta == 'number' && tb == 'number') ||\n\t\t(ta == 'string' && tb == 'string') ||\n\t\t(ta == 'boolean' && tb == 'boolean') ||\n\t\t(ta == 'undefined' && tb == 'undefined')\n\t) {\n\t\treturn a == b;\n\t} else if (ta == 'object' && tb == 'object') {\n\t\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\t\tif (a.length != b.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = 0; i < a.length; i++) {\n\t\t\t\tif (!eq(a[i], b[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn a == b;\n\t\t}\n\t}\n}\n\n/** @shadeup=univ(!($0$ != $1$))*/\nexport const neq = (a, b) => !eq(a, b);\n\n/** @shadeup=univ(!($0$ < $1$))*/\nexport const lt = (a: scalar, b: scalar) => a < b;\n\n/** @shadeup=univ(!($0$ <= $1$))*/\nexport const lte = (a: scalar, b: scalar) => a <= b;\n\n/** @shadeup=univ(!($0$ > $1$))*/\nexport const gt = (a: scalar, b: scalar) => a > b;\n\n/** @shadeup=univ(!($0$ >= $1$))*/\nexport const gte = (a: scalar, b: scalar) => a >= b;\n\n/** @shadeup=univ(!($0$ && $1$))*/\nexport const and = (a: boolean, b: boolean) => a && b;\n\n/** @shadeup=univ(!($0$ || $1$))*/\nexport const or = (a: boolean, b: boolean) => a || b;\n\n/** @shadeup=univ(!(!$0$))*/\nexport const not = (a: boolean) => !a;\n\n/** @shadeup=univ(~)*/\nexport function makeVector(x: int, y: int): int2;\nexport function makeVector(x: float, y: int): float2;\nexport function makeVector(x: int, y: float): float2;\nexport function makeVector(x: float, y: float): float2;\n\nexport function makeVector(x: int, y: int, z: int): int3;\nexport function makeVector(xy: int2, z: int): int3;\nexport function makeVector(x: int, yz: int2): int3;\n\nexport function makeVector(x: float, y: int, z: int): float3;\nexport function makeVector(x: int, y: float, z: int): float3;\nexport function makeVector(x: int, y: int, z: float): float3;\nexport function makeVector(x: float, y: float, z: int): float3;\nexport function makeVector(x: float, y: int, z: float): float3;\nexport function makeVector(x: int, y: float, z: float): float3;\nexport function makeVector(x: float, y: float, z: float): float3;\nexport function makeVector(xy: float2, z: float): float3;\nexport function makeVector(x: float, yz: float2): float3;\nexport function makeVector(xy: int2, z: float): float3;\nexport function makeVector(x: int, yz: float2): float3;\nexport function makeVector(xy: float2, z: int): float3;\nexport function makeVector(x: float, yz: int2): float3;\n\nexport function makeVector(x: int, y: int, z: int, w: int): int4;\nexport function makeVector(xyz: int3, w: int): int4;\nexport function makeVector(x: int, yzw: int3): int4;\n\nexport function makeVector(x: int, y: int, zw: int2): int4;\nexport function makeVector(xy: int2, z: int, w: int): int4;\nexport function makeVector(x: int, yz: int2, w: int): int4;\n\nexport function makeVector(xy: int2, zw: int2): int4;\n\nexport function makeVector(x: float, y: int, z: int, w: int): float4;\nexport function makeVector(x: int, y: float, z: int, w: int): float4;\nexport function makeVector(x: int, y: int, z: float, w: int): float4;\nexport function makeVector(x: int, y: int, z: int, w: float): float4;\nexport function makeVector(x: float, y: float, z: int, w: int): float4;\nexport function makeVector(x: float, y: int, z: float, w: int): float4;\nexport function makeVector(x: float, y: int, z: int, w: float): float4;\nexport function makeVector(x: int, y: float, z: float, w: int): float4;\nexport function makeVector(x: int, y: float, z: int, w: float): float4;\nexport function makeVector(x: int, y: int, z: float, w: float): float4;\nexport function makeVector(x: float, y: float, z: float, w: int): float4;\nexport function makeVector(x: float, y: float, z: int, w: float): float4;\nexport function makeVector(x: float, y: int, z: float, w: float): float4;\nexport function makeVector(x: int, y: float, z: float, w: float): float4;\nexport function makeVector(xyz: float3, w: float): float4;\nexport function makeVector(x: float, yzw: float3): float4;\nexport function makeVector(xyz: int3, w: float): float4;\nexport function makeVector(x: int, yzw: float3): float4;\nexport function makeVector(xyz: float3, w: int): float4;\nexport function makeVector(x: float, yzw: int3): float4;\nexport function makeVector(x: float, yz: float2, w: int): float4;\nexport function makeVector(x: float, yz: int2, w: float): float4;\nexport function makeVector(x: int, yz: float2, w: float): float4;\nexport function makeVector(x: float, y: float, zw: float2): float4;\nexport function makeVector(x: float, y: int, zw: float2): float4;\nexport function makeVector(x: float, y: int, zw: int2): float4;\nexport function makeVector(x: int, y: float, zw: float2): float4;\nexport function makeVector(x: int, y: float, zw: int2): float4;\nexport function makeVector(x: int, y: int, zw: float2): float4;\nexport function makeVector(x: float, y: float, z: float, w: float): float4;\nexport function makeVector(xy: float2, z: float, w: float): float4;\nexport function makeVector(x: float, yz: float2, w: float): float4;\nexport function makeVector(x: float, y: float, zw: float2): float4;\nexport function makeVector(xy: int2, z: float, w: float): float4;\nexport function makeVector(x: int, yz: float2, w: float): float4;\nexport function makeVector(x: int, y: float, zw: float2): float4;\nexport function makeVector(xy: float2, z: int, w: float): float4;\nexport function makeVector(x: float, yz: int2, w: float): float4;\nexport function makeVector(x: float, y: int, zw: float2): float4;\nexport function makeVector(xy: int2, z: float, w: int): float4;\nexport function makeVector(x: int, yz: float2, w: int): float4;\nexport function makeVector(x: int, y: float, zw: int2): float4;\nexport function makeVector(xy: float2, z: int, w: int): float4;\nexport function makeVector(x: float, yz: int2, w: int): float4;\nexport function makeVector(x: float, y: int, zw: int2): float4;\nexport function makeVector(xy: int2, z: int, w: float): float4;\nexport function makeVector(x: int, yz: int2, w: float): float4;\nexport function makeVector(x: int, y: int, zw: float2): float4;\nexport function makeVector(xy: int2, z: int, w: int): int4;\n/** @shadeup=univ()*/\nexport function makeVector() {\n\tlet out = [];\n\tfor (let i = 0; i < arguments.length; i++) {\n\t\tlet a = arguments[i];\n\t\tif (typeof a === 'number') {\n\t\t\tout.push(a);\n\t\t} else {\n\t\t\tfor (let j = 0; j < a.length; j++) {\n\t\t\t\tout.push(a[j]);\n\t\t\t}\n\t\t}\n\t}\n\treturn out;\n\n\tthrow new Error('Invalid vector length');\n}\n\n// add('test', int(1));\n\ntype swizChar = 'x' | 'y' | 'z' | 'w' | 'r' | 'g' | 'b' | 'a';\ntype swizStr4 = `${swizChar}${swizChar}${swizChar}${swizChar}`;\ntype swizStr3 = `${swizChar}${swizChar}${swizChar}`;\ntype swizStr2 = `${swizChar}${swizChar}`;\ntype swizStr1 = `${swizChar}`;\ntype swizStr4Ord = `xyzw` | `rgba` | `xxxx` | `rrrr`;\ntype swizStr3Ord = `xyz` | `rgb` | `xxx` | `rrr`;\ntype swizStr2Ord = `xy` | `rg` | `xx` | `rr`;\ntype swizStr1Ord = `x` | `r`;\n\nconst swizIndex: { [key: string]: number } = {\n\tx: 0,\n\ty: 1,\n\tz: 2,\n\tw: 3,\n\tr: 0,\n\tg: 1,\n\tb: 2,\n\ta: 3\n};\n\nconst getSwizIndexFast = (swiz: string) => {\n\tswitch (swiz) {\n\t\tcase 'x':\n\t\t\treturn 0;\n\t\tcase 'y':\n\t\t\treturn 1;\n\t\tcase 'z':\n\t\t\treturn 2;\n\t\tcase 'w':\n\t\t\treturn 3;\n\t\tcase 'r':\n\t\t\treturn 0;\n\t\tcase 'g':\n\t\t\treturn 1;\n\t\tcase 'b':\n\t\t\treturn 2;\n\t\tcase 'a':\n\t\t\treturn 3;\n\t}\n};\n\n/** @shadeup=shader */\nexport function testDocComment() {\n\treturn 1;\n}\n\n/** @shadeup=univ(~)*/\nexport function swizzle<S extends swizStr4Ord, T extends int>(v: T, swiz: S, assign?: T): int4;\n\nexport function swizzle<S extends swizStr4Ord, T extends uint>(v: T, swiz: S, assign?: T): uint4;\n\nexport function swizzle<S extends swizStr4Ord, T extends float>(v: T, swiz: S, assign?: T): float4;\n\nexport function swizzle<S extends swizStr3Ord, T extends int>(v: T, swiz: S, assign?: T): int3;\n\nexport function swizzle<S extends swizStr3Ord, T extends uint>(v: T, swiz: S, assign?: T): uint3;\n\nexport function swizzle<S extends swizStr3Ord, T extends float>(v: T, swiz: S, assign?: T): float3;\n\nexport function swizzle<S extends swizStr2Ord, T extends int>(v: T, swiz: S, assign?: T): int2;\n\nexport function swizzle<S extends swizStr2Ord, T extends uint>(v: T, swiz: S, assign?: T): uint2;\n\nexport function swizzle<S extends swizStr2Ord, T extends float>(v: T, swiz: S, assign?: T): float2;\n\nexport function swizzle<S extends swizStr1Ord, T extends int>(v: T, swiz: S, assign?: T): int;\n\nexport function swizzle<S extends swizStr1Ord, T extends uint>(v: T, swiz: S, assign?: T): uint;\n\nexport function swizzle<S extends swizStr1Ord, T extends float>(v: T, swiz: S, assign?: T): float;\n\nexport function swizzle<S extends swizStr4, T extends anyInt>(v: T, swiz: S, assign?: int4): int4;\n\nexport function swizzle<S extends swizStr4, T extends anyUint>(\n\tv: T,\n\tswiz: S,\n\tassign?: uint4\n): uint4;\n\nexport function swizzle<S extends swizStr4, T extends anyFloat>(\n\tv: T,\n\tswiz: S,\n\tassign?: float4\n): float4;\n\nexport function swizzle<S extends swizStr3, T extends anyInt>(v: T, swiz: S, assign?: int3): int3;\n\nexport function swizzle<S extends swizStr3, T extends anyUint>(\n\tv: T,\n\tswiz: S,\n\tassign?: uint3\n): uint3;\n\nexport function swizzle<S extends swizStr3, T extends anyFloat>(\n\tv: T,\n\tswiz: S,\n\tassign?: float3\n): float3;\n\nexport function swizzle<S extends swizStr2, T extends anyInt>(v: T, swiz: S, assign?: int2): int2;\n\nexport function swizzle<S extends swizStr2, T extends anyUint>(\n\tv: T,\n\tswiz: S,\n\tassign?: uint2\n): uint2;\n\nexport function swizzle<S extends swizStr2, T extends anyFloat>(\n\tv: T,\n\tswiz: S,\n\tassign?: float2\n): float2;\n\nexport function swizzle<S extends swizStr1, T extends anyInt>(v: T, swiz: S, assign?: int): int;\n\nexport function swizzle<S extends swizStr1, T extends anyUint>(v: T, swiz: S, assign?: uint): uint;\n\nexport function swizzle<S extends swizStr1, T extends anyFloat>(\n\tv: T,\n\tswiz: S,\n\tassign?: float\n): float;\n\nexport function swizzle<S extends string, T, A extends keyof T>(v: T, swiz: A, assign?: T): T[A];\n\nexport function swizzle(v: any, swiz: string, assign?: any) {\n\tif (typeof v === 'number') {\n\t\tif (swiz.length === 1) {\n\t\t\treturn v;\n\t\t} else if (swiz.length === 2) {\n\t\t\treturn [v, v];\n\t\t} else if (swiz.length === 3) {\n\t\t\treturn [v, v, v];\n\t\t} else if (swiz.length === 4) {\n\t\t\treturn [v, v, v, v];\n\t\t}\n\t} else if (Array.isArray(v)) {\n\t\tif (typeof assign !== 'undefined') {\n\t\t\tfor (let i = 0; i < swiz.length; i++) {\n\t\t\t\tv[getSwizIndexFast(swiz[i])] = assign[i] ?? assign;\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\t\tif (swiz.length === 1) {\n\t\t\treturn v[getSwizIndexFast(swiz)];\n\t\t} else if (swiz.length === 2) {\n\t\t\treturn [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\n\t\t} else if (swiz.length === 3) {\n\t\t\treturn [\n\t\t\t\tv[getSwizIndexFast(swiz[0])],\n\t\t\t\tv[getSwizIndexFast(swiz[1])],\n\t\t\t\tv[getSwizIndexFast(swiz[2])]\n\t\t\t];\n\t\t} else if (swiz.length === 4) {\n\t\t\treturn [\n\t\t\t\tv[getSwizIndexFast(swiz[0])],\n\t\t\t\tv[getSwizIndexFast(swiz[1])],\n\t\t\t\tv[getSwizIndexFast(swiz[2])],\n\t\t\t\tv[getSwizIndexFast(swiz[3])]\n\t\t\t];\n\t\t}\n\t} else {\n\t\treturn (v as any)[swiz];\n\t}\n}\n\nexport function intifyVector(v: vector) {\n\tif (typeof v === 'number') {\n\t\treturn v;\n\t} else if (Array.isArray(v)) {\n\t\treturn v.map((v) => v | 0);\n\t} else {\n\t\treturn v;\n\t}\n}\n\nimport { FM as FastMath } from './static-math';\nexport const FM = FastMath;\n\n// type f32 = number & { __float: never };\n// type i32 = number & { __int: never };\n// type num = f32 | i32;\n\n// function f32(a: number): f32 {\n// \treturn a as f32;\n// }\n\n// function i32(a: number): i32 {\n// \treturn a as i32;\n// }\n\n// type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\n// type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\n\n// export const abc: numeric2 = (a, b, c) => a + b + c;\n\n// abc(f32(1), i32(2));\n\nexport class atomic_internal<T extends uint | int> {\n\tprivate __type: T;\n\tprivate __value: number;\n\tconstructor(value: T) {\n\t\tthis.__value = value;\n\t}\n\n\tprivate $mutate?: (to: value) => void;\n\n\t/** @shadeup=univ(!atomicLoad(&$self$))*/\n\tload(): T {\n\t\treturn this.__value as T;\n\t}\n\t/** @shadeup=univ(!atomicStore(&$self$, $0$))*/\n\tstore(value: T): void {\n\t\tthis.__value = value as any;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t}\n\n\t/** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\n\tadd(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value += value;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicSub(&$self$, $0$))*/\n\tsub(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value -= value;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicMax(&$self$, $0$))*/\n\tmax(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value = Math.max(value, this.__value);\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicMin(&$self$, $0$))*/\n\tmin(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value = Math.min(value, this.__value);\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\n\tand(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value = value & this.__value;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicOr(&$self$, $0$))*/\n\tor(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value = value | this.__value;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicXor(&$self$, $0$))*/\n\txor(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value = value ^ this.__value;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\n\texchange(value: T): T {\n\t\tlet old = this.__value;\n\t\tthis.__value = value;\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn old as T;\n\t}\n\t/** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\n\tcompareExchangeWeak(compare: T, value: T): __atomic_compare_exchange_result<T> {\n\t\tlet old = this.__value;\n\t\tif (old == compare) {\n\t\t\tthis.__value = value;\n\t\t}\n\t\tif (this.$mutate) this.$mutate(this.__value);\n\t\treturn {\n\t\t\told_value: old as T,\n\t\t\texchanged: old == compare\n\t\t};\n\t}\n}\n\nexport type __atomic_compare_exchange_result<T extends uint | int> = {\n\told_value: T;\n\texchanged: boolean;\n};\n\nexport type atomic<T extends uint | int> = atomic_internal<T>;\n\nexport function atomic<T extends uint | int>(value: T): atomic<T> {\n\treturn new atomic_internal(value);\n}\n\n(window as any).makeAtomic = atomic;\n\n/**\n * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n *\n * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\n *\n * @shadeup=univ(!workgroupBarrier())\n */\nexport function workgroupBarrier() {}\n\n/**\n * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n *\n * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\n *\n * @shadeup=univ(!storageBarrier())\n */\nexport function storageBarrier() {}\n\n/**\n * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\n *\n * @shadeup=univ(!workgroupUniformLoad(&$0$))\n */\nexport function workgroupUniformLoad<T>(p: T): T {\n\treturn p;\n}\n\n/**\n * Discards the current fragment.\n *\n * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\n *\n * See: https://www.w3.org/TR/WGSL/#discard-statement\n *\n * @shadeup=univ(!discard;)\n */\nexport function discard() {}\n\n/**\n * Returns the derivative of the input value with respect to the window-space x coordinate.\n * @param value - The input value.\n * @returns The derivative of the input value with respect to the window-space x coordinate.\n * @shadeup=glsl(!dFdx($0$))\n * @shadeup=wgsl(!dpdx($0$))\n */\nexport function ddx<T extends scalar | vector>(value: T): T {\n\treturn 0 as T;\n}\n\n/**\n * Returns the derivative of the input value with respect to the window-space y coordinate.\n * @param value - The input value.\n *\n * @returns The derivative of the input value with respect to the window-space y coordinate.\n * @shadeup=glsl(!dFdy($0$))\n * @shadeup=wgsl(!dpdy($0$))\n */\nexport function ddy<T extends scalar | vector>(value: T): T {\n\treturn 0 as T;\n}\n\n/**\n * @shadeup=glsl(!dFdxFine($0$))\n * @shadeup=wgsl(!dpdxFine($0$))\n */\nexport function ddxFine<T extends scalar | vector>(value: T): T {\n\treturn 0 as T;\n}\n\n/**\n * @shadeup=glsl(!dFdyFine($0$))\n * @shadeup=wgsl(!dpdyFine($0$))\n */\nexport function ddyFine<T extends scalar | vector>(value: T): T {\n\treturn 0 as T;\n}\n\n/**\n * @shadeup=glsl(!dFdxCoarse($0$))\n * @shadeup=wgsl(!dpdxCoarse($0$))\n */\nexport function ddxCoarse<T extends scalar | vector>(value: T): T {\n\treturn 0 as T;\n}\n\n/**\n * @shadeup=glsl(!dFdyCoarse($0$))\n * @shadeup=wgsl(!dpdyCoarse($0$))\n */\nexport function ddyCoarse<T extends scalar | vector>(value: T): T {\n\treturn 0 as T;\n}\n\n/**\n * @shadeup=glsl(!$0$)\n * @shadeup=wgsl(!bitcast<$[0]$>($0$))\n */\nexport function bitcast<T extends scalar>(value: scalar): T {\n\treturn 0 as T;\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/std/static-math-db.ts",
    "content": "export const simpleFunctions = [\n\t['add', '+'],\n\t['sub', '-'],\n\t['div', '/'],\n\t['mul', '*'],\n\t['mod', '%'],\n\t['bitand', '&'],\n\t['bitor', '|'],\n\t['bitxor', '^'],\n\t['lshift', '<<'],\n\t['rshift', '>>']\n];\n\nexport const singleFunctions = [\n\t['bitnot', (a) => `~${a}`],\n\t['negate', (a) => `-${a}`],\n\t['positive', 'Math.abs'],\n\t['abs', 'Math.abs'],\n\t['floor', 'Math.floor'],\n\t['ceil', 'Math.ceil'],\n\t['round', 'Math.round'],\n\t['sign', 'Math.sign'],\n\t['cos', 'Math.cos'],\n\t['sin', 'Math.sin'],\n\t['tan', 'Math.tan'],\n\t['acos', 'Math.acos'],\n\t['asin', 'Math.asin'],\n\t['atan', 'Math.atan'],\n\t['cosh', 'Math.cosh'],\n\t['sinh', 'Math.sinh'],\n\t['tanh', 'Math.tanh'],\n\t['acosh', 'Math.acosh'],\n\t['asinh', 'Math.asinh'],\n\t['atanh', 'Math.atanh'],\n\t['exp', 'Math.exp'],\n\t['log', 'Math.log'],\n\t['log2', 'Math.log2'],\n\t['log10', 'Math.log10'],\n\t['sqrt', 'Math.sqrt']\n];\n\nexport const makeVectors = [\n\t['int', '|0'],\n\t['float', ''],\n\t['uint', '>>>0']\n];\n"
  },
  {
    "path": "lang/shadeup-frontend/lib/std/static-math.ts",
    "content": "\n///\n/// GENERATED\n/// DO NOT EDIT THIS FILE\n/// see generate-static-math.ts\n///\nexport const FM = {\n\tadd_1_1(a: number, b: number): number { return a + b; },\n\tadd_2_1(a: [number, number], b: number): [number, number] { return [a[0] + b, a[1] + b]; },\n\tadd_1_2(a: number, b: [number, number]): [number, number] { return [a + b[0], a + b[1]]; },\n\tadd_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] + b[0], a[1] + b[1]]; },\n\tadd_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] + b, a[1] + b, a[2] + b]; },\n\tadd_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a + b[0], a + b[1], a + b[2]]; },\n\tadd_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\n\tadd_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\n\tadd_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\n\tadd_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\n\tsub_1_1(a: number, b: number): number { return a - b; },\n\tsub_2_1(a: [number, number], b: number): [number, number] { return [a[0] - b, a[1] - b]; },\n\tsub_1_2(a: number, b: [number, number]): [number, number] { return [a - b[0], a - b[1]]; },\n\tsub_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] - b[0], a[1] - b[1]]; },\n\tsub_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] - b, a[1] - b, a[2] - b]; },\n\tsub_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a - b[0], a - b[1], a - b[2]]; },\n\tsub_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\n\tsub_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\n\tsub_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\n\tsub_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\n\tdiv_1_1(a: number, b: number): number { return a / b; },\n\tdiv_2_1(a: [number, number], b: number): [number, number] { return [a[0] / b, a[1] / b]; },\n\tdiv_1_2(a: number, b: [number, number]): [number, number] { return [a / b[0], a / b[1]]; },\n\tdiv_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] / b[0], a[1] / b[1]]; },\n\tdiv_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] / b, a[1] / b, a[2] / b]; },\n\tdiv_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a / b[0], a / b[1], a / b[2]]; },\n\tdiv_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\n\tdiv_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\n\tdiv_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\n\tdiv_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\n\tmul_1_1(a: number, b: number): number { return a * b; },\n\tmul_2_1(a: [number, number], b: number): [number, number] { return [a[0] * b, a[1] * b]; },\n\tmul_1_2(a: number, b: [number, number]): [number, number] { return [a * b[0], a * b[1]]; },\n\tmul_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] * b[0], a[1] * b[1]]; },\n\tmul_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] * b, a[1] * b, a[2] * b]; },\n\tmul_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a * b[0], a * b[1], a * b[2]]; },\n\tmul_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\n\tmul_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\n\tmul_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\n\tmul_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\n\tmod_1_1(a: number, b: number): number { return a % b; },\n\tmod_2_1(a: [number, number], b: number): [number, number] { return [a[0] % b, a[1] % b]; },\n\tmod_1_2(a: number, b: [number, number]): [number, number] { return [a % b[0], a % b[1]]; },\n\tmod_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] % b[0], a[1] % b[1]]; },\n\tmod_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] % b, a[1] % b, a[2] % b]; },\n\tmod_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a % b[0], a % b[1], a % b[2]]; },\n\tmod_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\n\tmod_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\n\tmod_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\n\tmod_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\n\tbitand_1_1(a: number, b: number): number { return a & b; },\n\tbitand_2_1(a: [number, number], b: number): [number, number] { return [a[0] & b, a[1] & b]; },\n\tbitand_1_2(a: number, b: [number, number]): [number, number] { return [a & b[0], a & b[1]]; },\n\tbitand_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] & b[0], a[1] & b[1]]; },\n\tbitand_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] & b, a[1] & b, a[2] & b]; },\n\tbitand_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a & b[0], a & b[1], a & b[2]]; },\n\tbitand_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\n\tbitand_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\n\tbitand_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\n\tbitand_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\n\tbitor_1_1(a: number, b: number): number { return a | b; },\n\tbitor_2_1(a: [number, number], b: number): [number, number] { return [a[0] | b, a[1] | b]; },\n\tbitor_1_2(a: number, b: [number, number]): [number, number] { return [a | b[0], a | b[1]]; },\n\tbitor_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] | b[0], a[1] | b[1]]; },\n\tbitor_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] | b, a[1] | b, a[2] | b]; },\n\tbitor_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a | b[0], a | b[1], a | b[2]]; },\n\tbitor_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\n\tbitor_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\n\tbitor_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\n\tbitor_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\n\tbitxor_1_1(a: number, b: number): number { return a ^ b; },\n\tbitxor_2_1(a: [number, number], b: number): [number, number] { return [a[0] ^ b, a[1] ^ b]; },\n\tbitxor_1_2(a: number, b: [number, number]): [number, number] { return [a ^ b[0], a ^ b[1]]; },\n\tbitxor_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] ^ b[0], a[1] ^ b[1]]; },\n\tbitxor_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\n\tbitxor_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\n\tbitxor_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\n\tbitxor_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\n\tbitxor_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\n\tbitxor_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\n\tlshift_1_1(a: number, b: number): number { return a << b; },\n\tlshift_2_1(a: [number, number], b: number): [number, number] { return [a[0] << b, a[1] << b]; },\n\tlshift_1_2(a: number, b: [number, number]): [number, number] { return [a << b[0], a << b[1]]; },\n\tlshift_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] << b[0], a[1] << b[1]]; },\n\tlshift_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] << b, a[1] << b, a[2] << b]; },\n\tlshift_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a << b[0], a << b[1], a << b[2]]; },\n\tlshift_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\n\tlshift_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\n\tlshift_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\n\tlshift_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\n\trshift_1_1(a: number, b: number): number { return a >> b; },\n\trshift_2_1(a: [number, number], b: number): [number, number] { return [a[0] >> b, a[1] >> b]; },\n\trshift_1_2(a: number, b: [number, number]): [number, number] { return [a >> b[0], a >> b[1]]; },\n\trshift_2_2(a: [number, number], b: [number, number]): [number, number] { return [a[0] >> b[0], a[1] >> b[1]]; },\n\trshift_3_1(a: [number, number, number], b: number): [number, number, number] { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\n\trshift_1_3(a: number, b: [number, number, number]): [number, number, number] { return [a >> b[0], a >> b[1], a >> b[2]]; },\n\trshift_3_3(a: [number, number, number], b: [number, number, number]): [number, number, number] { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\n\trshift_4_1(a: [number, number, number, number], b: number): [number, number, number, number] { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\n\trshift_1_4(a: number, b: [number, number, number, number]): [number, number, number, number] { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\n\trshift_4_4(a: [number, number, number, number], b: [number, number, number, number]): [number, number, number, number] { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\n\tbitnot_1(a: number): number { return ~a; },\n\tbitnot_2(a: [number, number]): [number, number] { return [~a[0], ~a[1]]; },\n\tbitnot_3(a: [number, number, number]): [number, number, number] { return [~a[0], ~a[1], ~a[2]]; },\n\tbitnot_4(a: [number, number, number, number]): [number, number, number, number] { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\n\tnegate_1(a: number): number { return -a; },\n\tnegate_2(a: [number, number]): [number, number] { return [-a[0], -a[1]]; },\n\tnegate_3(a: [number, number, number]): [number, number, number] { return [-a[0], -a[1], -a[2]]; },\n\tnegate_4(a: [number, number, number, number]): [number, number, number, number] { return [-a[0], -a[1], -a[2], -a[3]]; },\n\tpositive_1(a: number): number { return Math.abs(a); },\n\tpositive_2(a: [number, number]): [number, number] { return [Math.abs(a[0]), Math.abs(a[1])]; },\n\tpositive_3(a: [number, number, number]): [number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\n\tpositive_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\n\tabs_1(a: number): number { return Math.abs(a); },\n\tabs_2(a: [number, number]): [number, number] { return [Math.abs(a[0]), Math.abs(a[1])]; },\n\tabs_3(a: [number, number, number]): [number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\n\tabs_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\n\tfloor_1(a: number): number { return Math.floor(a); },\n\tfloor_2(a: [number, number]): [number, number] { return [Math.floor(a[0]), Math.floor(a[1])]; },\n\tfloor_3(a: [number, number, number]): [number, number, number] { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\n\tfloor_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\n\tceil_1(a: number): number { return Math.ceil(a); },\n\tceil_2(a: [number, number]): [number, number] { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\n\tceil_3(a: [number, number, number]): [number, number, number] { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\n\tceil_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\n\tround_1(a: number): number { return Math.round(a); },\n\tround_2(a: [number, number]): [number, number] { return [Math.round(a[0]), Math.round(a[1])]; },\n\tround_3(a: [number, number, number]): [number, number, number] { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\n\tround_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\n\tsign_1(a: number): number { return Math.sign(a); },\n\tsign_2(a: [number, number]): [number, number] { return [Math.sign(a[0]), Math.sign(a[1])]; },\n\tsign_3(a: [number, number, number]): [number, number, number] { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\n\tsign_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\n\tcos_1(a: number): number { return Math.cos(a); },\n\tcos_2(a: [number, number]): [number, number] { return [Math.cos(a[0]), Math.cos(a[1])]; },\n\tcos_3(a: [number, number, number]): [number, number, number] { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\n\tcos_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\n\tsin_1(a: number): number { return Math.sin(a); },\n\tsin_2(a: [number, number]): [number, number] { return [Math.sin(a[0]), Math.sin(a[1])]; },\n\tsin_3(a: [number, number, number]): [number, number, number] { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\n\tsin_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\n\ttan_1(a: number): number { return Math.tan(a); },\n\ttan_2(a: [number, number]): [number, number] { return [Math.tan(a[0]), Math.tan(a[1])]; },\n\ttan_3(a: [number, number, number]): [number, number, number] { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\n\ttan_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\n\tacos_1(a: number): number { return Math.acos(a); },\n\tacos_2(a: [number, number]): [number, number] { return [Math.acos(a[0]), Math.acos(a[1])]; },\n\tacos_3(a: [number, number, number]): [number, number, number] { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\n\tacos_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\n\tasin_1(a: number): number { return Math.asin(a); },\n\tasin_2(a: [number, number]): [number, number] { return [Math.asin(a[0]), Math.asin(a[1])]; },\n\tasin_3(a: [number, number, number]): [number, number, number] { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\n\tasin_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\n\tatan_1(a: number): number { return Math.atan(a); },\n\tatan_2(a: [number, number]): [number, number] { return [Math.atan(a[0]), Math.atan(a[1])]; },\n\tatan_3(a: [number, number, number]): [number, number, number] { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\n\tatan_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\n\tcosh_1(a: number): number { return Math.cosh(a); },\n\tcosh_2(a: [number, number]): [number, number] { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\n\tcosh_3(a: [number, number, number]): [number, number, number] { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\n\tcosh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\n\tsinh_1(a: number): number { return Math.sinh(a); },\n\tsinh_2(a: [number, number]): [number, number] { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\n\tsinh_3(a: [number, number, number]): [number, number, number] { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\n\tsinh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\n\ttanh_1(a: number): number { return Math.tanh(a); },\n\ttanh_2(a: [number, number]): [number, number] { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\n\ttanh_3(a: [number, number, number]): [number, number, number] { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\n\ttanh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\n\tacosh_1(a: number): number { return Math.acosh(a); },\n\tacosh_2(a: [number, number]): [number, number] { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\n\tacosh_3(a: [number, number, number]): [number, number, number] { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\n\tacosh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\n\tasinh_1(a: number): number { return Math.asinh(a); },\n\tasinh_2(a: [number, number]): [number, number] { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\n\tasinh_3(a: [number, number, number]): [number, number, number] { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\n\tasinh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\n\tatanh_1(a: number): number { return Math.atanh(a); },\n\tatanh_2(a: [number, number]): [number, number] { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\n\tatanh_3(a: [number, number, number]): [number, number, number] { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\n\tatanh_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\n\texp_1(a: number): number { return Math.exp(a); },\n\texp_2(a: [number, number]): [number, number] { return [Math.exp(a[0]), Math.exp(a[1])]; },\n\texp_3(a: [number, number, number]): [number, number, number] { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\n\texp_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\n\tlog_1(a: number): number { return Math.log(a); },\n\tlog_2(a: [number, number]): [number, number] { return [Math.log(a[0]), Math.log(a[1])]; },\n\tlog_3(a: [number, number, number]): [number, number, number] { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\n\tlog_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\n\tlog2_1(a: number): number { return Math.log2(a); },\n\tlog2_2(a: [number, number]): [number, number] { return [Math.log2(a[0]), Math.log2(a[1])]; },\n\tlog2_3(a: [number, number, number]): [number, number, number] { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\n\tlog2_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\n\tlog10_1(a: number): number { return Math.log10(a); },\n\tlog10_2(a: [number, number]): [number, number] { return [Math.log10(a[0]), Math.log10(a[1])]; },\n\tlog10_3(a: [number, number, number]): [number, number, number] { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\n\tlog10_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\n\tsqrt_1(a: number): number { return Math.sqrt(a); },\n\tsqrt_2(a: [number, number]): [number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\n\tsqrt_3(a: [number, number, number]): [number, number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\n\tsqrt_4(a: [number, number, number, number]): [number, number, number, number] { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\n\tint_2_1_1(a: number, b: number): [number, number] { return [a|0, b|0]; },\n\tint_2_2(a: [number, number]): [number, number] { return [a[0]|0, a[1]|0]; },\n\tint_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a|0, b|0, c|0]; },\n\tint_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]|0, a[1]|0, b|0]; },\n\tint_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a|0, b[0]|0, b[1]|0]; },\n\tint_3_3(a: [number, number, number]): [number, number, number] { return [a[0]|0, a[1]|0, a[2]|0]; },\n\tint_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a|0, b|0, c|0, d|0]; },\n\tint_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]|0, a[1]|0, b|0, c|0]; },\n\tint_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a|0, b[0]|0, b[1]|0, c|0]; },\n\tint_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a|0, b|0, c[0]|0, c[1]|0]; },\n\tint_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]|0, a[1]|0, a[2]|0, b|0]; },\n\tint_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a|0, b[0]|0, b[1]|0, b[2]|0]; },\n\tint_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]|0, a[1]|0, b[0]|0, b[1]|0]; },\n\tint_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]|0, a[1]|0, a[2]|0, a[3]|0]; },\n\tfloat_2_1_1(a: number, b: number): [number, number] { return [a, b]; },\n\tfloat_2_2(a: [number, number]): [number, number] { return [a[0], a[1]]; },\n\tfloat_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a, b, c]; },\n\tfloat_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0], a[1], b]; },\n\tfloat_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a, b[0], b[1]]; },\n\tfloat_3_3(a: [number, number, number]): [number, number, number] { return [a[0], a[1], a[2]]; },\n\tfloat_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a, b, c, d]; },\n\tfloat_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0], a[1], b, c]; },\n\tfloat_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a, b[0], b[1], c]; },\n\tfloat_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a, b, c[0], c[1]]; },\n\tfloat_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0], a[1], a[2], b]; },\n\tfloat_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a, b[0], b[1], b[2]]; },\n\tfloat_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0], a[1], b[0], b[1]]; },\n\tfloat_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0], a[1], a[2], a[3]]; },\n\tuint_2_1_1(a: number, b: number): [number, number] { return [a>>>0, b>>>0]; },\n\tuint_2_2(a: [number, number]): [number, number] { return [a[0]>>>0, a[1]>>>0]; },\n\tuint_3_1_1_1(a: number, b: number, c: number): [number, number, number] { return [a>>>0, b>>>0, c>>>0]; },\n\tuint_3_2_1(a: [number, number], b: number): [number, number, number] { return [a[0]>>>0, a[1]>>>0, b>>>0]; },\n\tuint_3_1_2(a: number, b: [number, number]): [number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0]; },\n\tuint_3_3(a: [number, number, number]): [number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0]; },\n\tuint_4_1_1_1_1(a: number, b: number, c: number, d: number): [number, number, number, number] { return [a>>>0, b>>>0, c>>>0, d>>>0]; },\n\tuint_4_2_1_1(a: [number, number], b: number, c: number): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, b>>>0, c>>>0]; },\n\tuint_4_1_2_1(a: number, b: [number, number], c: number): [number, number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0, c>>>0]; },\n\tuint_4_1_1_2(a: number, b: number, c: [number, number]): [number, number, number, number] { return [a>>>0, b>>>0, c[0]>>>0, c[1]>>>0]; },\n\tuint_4_3_1(a: [number, number, number], b: number): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0, b>>>0]; },\n\tuint_4_1_3(a: number, b: [number, number, number]): [number, number, number, number] { return [a>>>0, b[0]>>>0, b[1]>>>0, b[2]>>>0]; },\n\tuint_4_2_2(a: [number, number], b: [number, number]): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, b[0]>>>0, b[1]>>>0]; },\n\tuint_4_4(a: [number, number, number, number]): [number, number, number, number] { return [a[0]>>>0, a[1]>>>0, a[2]>>>0, a[3]>>>0]; },\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/package.json",
    "content": "{\n\t\"name\": \"shadeup-frontend\",\n\t\"private\": true,\n\t\"version\": \"0.0.0\",\n\t\"type\": \"module\",\n\t\"files\": [\n\t\t\"src\"\n\t],\n\t\"main\": \"./dist/shadeup-frontend.umd.cjs\",\n\t\"module\": \"./dist/shadeup-frontend.js\",\n\t\"types\": \"./dist/src/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"import\": \"./dist/shadeup-frontend.js\",\n\t\t\t\"require\": \"./dist/shadeup-frontend.umd.cjs\"\n\t\t}\n\t},\n\t\"scripts\": {\n\t\t\"dev\": \"vite\",\n\t\t\"build\": \"tsc && vite build\",\n\t\t\"build:math\": \"tsx lib/std/generate-static-math.ts > lib/std/static-math.ts\"\n\t},\n\t\"dependencies\": {\n\t\t\"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n\t\t\"@rollup/plugin-node-resolve\": \"^15.0.1\",\n\t\t\"@typescript/vfs\": \"^1.4.0\",\n\t\t\"ansi_up\": \"^5.1.0\",\n\t\t\"ariadne-ts\": \"^0.1.5-alpha.10\",\n\t\t\"assert\": \"^2.0.0\",\n\t\t\"chalk\": \"^5.3.0\",\n\t\t\"fast-diff\": \"^1.2.0\",\n\t\t\"fast-sha256\": \"^1.3.0\",\n\t\t\"js-sha256\": \"^0.9.0\",\n\t\t\"lz-string\": \"^1.4.4\",\n\t\t\"punycode\": \"^2.3.0\",\n\t\t\"source-map\": \"^0.8.0-beta.0\",\n\t\t\"string-format\": \"^2.0.0\",\n\t\t\"toposort\": \"^2.0.2\",\n\t\t\"tree-sitter\": \"^0.20.5\",\n\t\t\"tsutils\": \"^3.21.0\",\n\t\t\"typescript\": \"^4.9.5\",\n\t\t\"web-tree-sitter\": \"^0.20.7\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^18.14.2\",\n\t\t\"@types/string-format\": \"^2.0.0\",\n\t\t\"@types/toposort\": \"^2.0.3\",\n\t\t\"rollup-plugin-polyfill-node\": \"^0.12.0\",\n\t\t\"tsx\": \"^3.12.7\",\n\t\t\"typescript\": \"^4.9.4\",\n\t\t\"vite\": \"^4.4.7\",\n\t\t\"vite-plugin-dts\": \"^2.0.2\"\n\t}\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/src/index.ts",
    "content": "if (typeof process === 'undefined') {\n\t(global as any).process = { env: {} };\n}\n\nexport { ShadeupEnvironment } from '../lib/environment/ShadeupEnvironment';\n"
  },
  {
    "path": "lang/shadeup-frontend/src/main.ts",
    "content": "import { initTest } from '../lib/main';\n\ninitTest();\n"
  },
  {
    "path": "lang/shadeup-frontend/src/vite-env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "lang/shadeup-frontend/test.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ts = require(\"typescript\");\nfunction watch(options) {\n    const files = {};\n    files[\"index.ts\"] = { version: 0 };\n    let fileContents = {\n        \"index.ts\": \"function main() { return 1; }\"\n    };\n    // Create the language service host to allow the LS to communicate with the host\n    const servicesHost = {\n        getScriptFileNames: () => Object.keys(files),\n        getScriptVersion: fileName => files[fileName] && files[fileName].version.toString(),\n        getScriptSnapshot: fileName => {\n            return ts.ScriptSnapshot.fromString(fileContents[fileName]);\n        },\n        getCurrentDirectory: () => \"\",\n        getCompilationSettings: () => options,\n        getDefaultLibFileName: options => ts.getDefaultLibFilePath(options),\n        fileExists: (path) => {\n            return path in files;\n        },\n        readFile: (path) => {\n            return fileContents[path];\n        },\n        readDirectory: (path, extensions, exclude, include, depth) => {\n            return Object.keys(files);\n        },\n        directoryExists: (path) => {\n            return false;\n        },\n        getDirectories: (path) => {\n            return [];\n        },\n    };\n    // Create the language service files\n    const services = ts.createLanguageService(servicesHost, ts.createDocumentRegistry());\n    // Now let's watch the files\n    // rootFileNames.forEach(fileName => {\n    //   // First time around, emit all files\n    //   emitFile(fileName);\n    //   // Add a watch on the file to handle next change\n    //   fs.watchFile(fileName, { persistent: true, interval: 250 }, (curr, prev) => {\n    //     // Check timestamp\n    //     if (+curr.mtime <= +prev.mtime) {\n    //       return;\n    //     }\n    //     // Update the version to signal a change in the file\n    //     files[fileName].version++;\n    //     // write the changes to disk\n    //     emitFile(fileName);\n    //   });\n    // });\n    emitFile(\"index.ts\");\n    function emitFile(fileName) {\n        let output = services.getEmitOutput(fileName);\n        if (!output.emitSkipped) {\n            console.log(`Emitting ${fileName}`);\n        }\n        else {\n            console.log(`Emitting ${fileName} failed`);\n            logErrors(fileName);\n        }\n        output.outputFiles.forEach(o => {\n            // fs.writeFileSync(o.name, o.text, \"utf8\");\n            console.log(o.name, o.text);\n        });\n    }\n    function logErrors(fileName) {\n        let allDiagnostics = services\n            .getCompilerOptionsDiagnostics()\n            .concat(services.getSyntacticDiagnostics(fileName))\n            .concat(services.getSemanticDiagnostics(fileName));\n        allDiagnostics.forEach(diagnostic => {\n            let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\");\n            if (diagnostic.file) {\n                let { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);\n                console.log(`  Error ${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);\n            }\n            else {\n                console.log(`  Error: ${message}`);\n            }\n        });\n    }\n}\n// Start the watcher\nwatch({ module: ts.ModuleKind.CommonJS });\n"
  },
  {
    "path": "lang/shadeup-frontend/test.ts",
    "content": "import * as ts from 'typescript';\n\nfunction watch(options: ts.CompilerOptions) {\n\tconst files: ts.MapLike<{ version: number }> = {};\n\n\tfiles['index.ts'] = { version: 0 };\n\n\tlet fileContents = {\n\t\t'index.ts': 'function main() { return 1; }'\n\t};\n\n\t// Create the language service host to allow the LS to communicate with the host\n\tconst servicesHost: ts.LanguageServiceHost = {\n\t\tgetScriptFileNames: () => Object.keys(files),\n\t\tgetScriptVersion: (fileName) => files[fileName] && files[fileName].version.toString(),\n\t\tgetScriptSnapshot: (fileName) => {\n\t\t\treturn ts.ScriptSnapshot.fromString(fileContents[fileName]);\n\t\t},\n\t\tgetCurrentDirectory: () => '',\n\t\tgetCompilationSettings: () => options,\n\t\tgetDefaultLibFileName: (options) => ts.getDefaultLibFilePath(options),\n\t\tfileExists: (path) => {\n\t\t\treturn path in files;\n\t\t},\n\t\treadFile: (path) => {\n\t\t\treturn fileContents[path];\n\t\t},\n\t\treadDirectory: (\n\t\t\tpath: string,\n\t\t\textensions?: readonly string[],\n\t\t\texclude?: readonly string[],\n\t\t\tinclude?: readonly string[],\n\t\t\tdepth?: number\n\t\t) => {\n\t\t\treturn Object.keys(files);\n\t\t},\n\t\tdirectoryExists: (path: string) => {\n\t\t\treturn false;\n\t\t},\n\t\tgetDirectories: (path: string) => {\n\t\t\treturn [];\n\t\t}\n\t};\n\n\t// Create the language service files\n\tconst services = ts.createLanguageService(servicesHost, ts.createDocumentRegistry());\n\n\t// Now let's watch the files\n\t// rootFileNames.forEach(fileName => {\n\t//   // First time around, emit all files\n\t//   emitFile(fileName);\n\n\t//   // Add a watch on the file to handle next change\n\t//   fs.watchFile(fileName, { persistent: true, interval: 250 }, (curr, prev) => {\n\t//     // Check timestamp\n\t//     if (+curr.mtime <= +prev.mtime) {\n\t//       return;\n\t//     }\n\n\t//     // Update the version to signal a change in the file\n\t//     files[fileName].version++;\n\n\t//     // write the changes to disk\n\t//     emitFile(fileName);\n\t//   });\n\t// });\n\temitFile('index.ts');\n\n\tfunction emitFile(fileName: string) {\n\t\tlet output = services.getEmitOutput(fileName);\n\n\t\tif (!output.emitSkipped) {\n\t\t\tconsole.log(`Emitting ${fileName}`);\n\t\t} else {\n\t\t\tconsole.log(`Emitting ${fileName} failed`);\n\t\t\tlogErrors(fileName);\n\t\t}\n\n\t\toutput.outputFiles.forEach((o) => {\n\t\t\t// fs.writeFileSync(o.name, o.text, \"utf8\");\n\t\t\tconsole.log(o.name, o.text);\n\t\t});\n\t}\n\n\tfunction logErrors(fileName: string) {\n\t\tlet allDiagnostics = services\n\t\t\t.getCompilerOptionsDiagnostics()\n\t\t\t.concat(services.getSyntacticDiagnostics(fileName))\n\t\t\t.concat(services.getSemanticDiagnostics(fileName));\n\n\t\tallDiagnostics.forEach((diagnostic) => {\n\t\t\tlet message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n');\n\t\t\tif (diagnostic.file) {\n\t\t\t\tlet { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start!);\n\t\t\t\tconsole.log(\n\t\t\t\t\t`  Error ${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconsole.log(`  Error: ${message}`);\n\t\t\t}\n\t\t});\n\t}\n}\n\n// Start the watcher\nwatch({ module: ts.ModuleKind.CommonJS });\n"
  },
  {
    "path": "lang/shadeup-frontend/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ESNext\",\n\t\t\"useDefineForClassFields\": true,\n\t\t\"module\": \"ESNext\",\n\t\t\"lib\": [\"ESNext\", \"DOM\"],\n\t\t\"moduleResolution\": \"Node\",\n\t\t\"sourceMap\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"noEmit\": true,\n\t\t\"skipLibCheck\": true\n\t},\n\t\"include\": [\"src\", \"lib\"]\n}\n"
  },
  {
    "path": "lang/shadeup-frontend/vfs.js",
    "content": "import {\n\tcreateDefaultMapFromCDN,\n\tcreateVirtualTypeScriptEnvironment,\n\tcreateSystem\n} from '@typescript/vfs';\nimport ts from 'typescript';\nimport lzstring from 'lz-string';\n// import fs from 'fs';\nimport diff from './lib/fast-diff/diff';\n\nconst start = async () => {\n\tconst shouldCache = false;\n\t// This caches the lib files in the site's localStorage\n\tconst fsMap = await createDefaultMapFromCDN(\n\t\t{ target: ts.ScriptTarget.ES2015 },\n\t\t'3.7.3',\n\t\tshouldCache,\n\t\tts\n\t);\n\n\t// This stores the lib files as a zipped string to save space in the cache\n\tconst otherMap = await createDefaultMapFromCDN(\n\t\t{ target: ts.ScriptTarget.ES2015 },\n\t\t'3.7.3',\n\t\tshouldCache,\n\t\tts,\n\t\tlzstring\n\t);\n\n\tfsMap.set('index.ts', \"console.log('hello world!')\");\n\n\tconst system = createSystem(fsMap);\n\n\tconst compilerOpts = {};\n\tconst env = createVirtualTypeScriptEnvironment(system, ['index.ts'], ts, compilerOpts);\n\t// let f = fs.readFileSync('f.ts', 'utf8');\n\tlet f = '';\n\tlet now = performance.now();\n\tlet diffs = diff(f, 'a' + f + \"console.log('hello world!')\");\n\tconsole.log('took', performance.now() - now, 'ms for diff');\n\t// let f = \"console.log('hello world!')\"\n\t// You can then interact with the languageService to introspect the code\n\tnow = performance.now();\n\tlet h = env.languageService.getEmitOutput('index.ts');\n\tconsole.log(h.outputFiles[0].text);\n\tconsole.log('took', performance.now() - now, 'ms');\n\tenv.updateFile('index.ts', f);\n\tnow = performance.now();\n\th = env.languageService.getEmitOutput('index.ts');\n\tconsole.log('took', performance.now() - now, 'ms');\n\n\tnow = performance.now();\n\t// env.getSourceFile(\"index.ts\").update(f + \"console.log()\", {\n\t// \tspan: {\n\t// \t\tstart: f.length,\n\t// \t\tlength: 0\n\t// \t},\n\t// \tnewLength: 13\n\t// \t}\n\t// )\n\tenv.updateFile('index.ts', 'console.log();', {\n\t\tstart: 0,\n\t\tlength: 0\n\t});\n\n\t// env.updateFile(\"index.ts\", f + \"console.log()\");\n\t// h = env.languageService.getEmitOutput(\"index.ts\")\n\tlet s = env.languageService.getCompletionsAtPosition('index.ts', f.length + 1, undefined);\n\t// console.log(s)\n\tconsole.log('took', performance.now() - now, 'ms');\n\n\tnow = performance.now();\n\tenv.updateFile('index.ts', f + 'console.l');\n\t// h = env.languageService.getEmitOutput(\"index.ts\")\n\ts = env.languageService.getCompletionsAtPosition('index.ts', f.length + 1, undefined);\n\t// console.log(s)\n\tconsole.log('took', performance.now() - now, 'ms');\n\n\t// ...\n};\n\nstart();\n"
  },
  {
    "path": "lang/shadeup-frontend/vite.config.ts",
    "content": "import { defineConfig } from 'vite';\n// import nodePolyfills from 'rollup-plugin-polyfill-node';\nimport dts from 'vite-plugin-dts';\n// import nodeResolve from '@rollup/plugin-node-resolve';\n\nexport default defineConfig({\n\tesbuild: {\n\t\tkeepNames: true\n\t},\n\n\tbuild: {\n\t\tlib: {\n\t\t\tentry: './src/index.ts',\n\t\t\tname: 'shadeup-frontend',\n\t\t\tfileName: 'shadeup-frontend'\n\t\t},\n\t\ttarget: 'esnext',\n\t\tsourcemap: false\n\t},\n\tresolve: {\n\t\talias: {\n\t\t\tpunycode: 'punycode/punycode.js'\n\t\t\t// '#ansi-styles': 'chalk/source/vendor/ansi-styles/index.js',\n\t\t\t// '#supports-color': 'chalk/source/vendor/supports-color/index.js'\n\t\t}\n\t},\n\toptimizeDeps: {\n\t\tesbuildOptions: {\n\t\t\tdefine: {\n\t\t\t\tglobal: 'globalThis'\n\t\t\t}\n\t\t}\n\t},\n\tplugins: [dts()]\n});\n"
  },
  {
    "path": "lang/tree-sitter/.gitignore",
    "content": "target"
  },
  {
    "path": "lang/tree-sitter/.prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"singleQuote\": true,\n\t\"trailingComma\": \"none\",\n\t\"printWidth\": 100,\n\t\n\t\"pluginSearchDirs\": [\".\"],\n\t\"overrides\": [\n\t]\n}\n"
  },
  {
    "path": "lang/tree-sitter/Cargo.toml",
    "content": "[package]\nname = \"tree-sitter-shadeup\"\ndescription = \"shadeup grammar for the tree-sitter parsing library\"\nversion = \"0.0.1\"\nkeywords = [\"incremental\", \"parsing\", \"shadeup\"]\ncategories = [\"parsing\", \"text-editors\"]\nrepository = \"https://github.com/tree-sitter/tree-sitter-shadeup\"\nedition = \"2021\"\nlicense = \"MIT\"\n\nbuild = \"bindings/rust/build.rs\"\ninclude = [\n  \"bindings/rust/*\",\n  \"grammar.js\",\n  \"queries/*\",\n  \"src/*\",\n]\n\n[lib]\npath = \"bindings/rust/lib.rs\"\n\n[dependencies]\ntree-sitter = \"~0.20.3\"\n\n[build-dependencies]\ncc = \"1.0\"\n"
  },
  {
    "path": "lang/tree-sitter/binding.gyp",
    "content": "{\n  \"targets\": [\n    {\n      \"target_name\": \"tree_sitter_shadeup_binding\",\n      \"include_dirs\": [\n        \"<!(node -e \\\"require('nan')\\\")\",\n        \"src\"\n      ],\n      \"sources\": [\n        \"bindings/node/binding.cc\",\n        \"src/parser.c\",\n        \"src/scanner.c\",\n        # If your language uses an external scanner, add it here.\n      ],\n      \"cflags_c\": [\n        \"-std=c99\",\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "lang/tree-sitter/bindings/node/binding.cc",
    "content": "#include \"tree_sitter/parser.h\"\n#include <node.h>\n#include \"nan.h\"\n\nusing namespace v8;\n\nextern \"C\" TSLanguage * tree_sitter_shadeup();\n\nnamespace {\n\nNAN_METHOD(New) {}\n\nvoid Init(Local<Object> exports, Local<Object> module) {\n  Local<FunctionTemplate> tpl = Nan::New<FunctionTemplate>(New);\n  tpl->SetClassName(Nan::New(\"Language\").ToLocalChecked());\n  tpl->InstanceTemplate()->SetInternalFieldCount(1);\n\n  Local<Function> constructor = Nan::GetFunction(tpl).ToLocalChecked();\n  Local<Object> instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked();\n  Nan::SetInternalFieldPointer(instance, 0, tree_sitter_shadeup());\n\n  Nan::Set(instance, Nan::New(\"name\").ToLocalChecked(), Nan::New(\"shadeup\").ToLocalChecked());\n  Nan::Set(module, Nan::New(\"exports\").ToLocalChecked(), instance);\n}\n\nNODE_MODULE(tree_sitter_shadeup_binding, Init)\n\n}  // namespace\n"
  },
  {
    "path": "lang/tree-sitter/bindings/node/index.js",
    "content": "try {\n\tmodule.exports = require('../../build/Release/tree_sitter_shadeup_binding');\n} catch (error1) {\n\tif (error1.code !== 'MODULE_NOT_FOUND') {\n\t\tthrow error1;\n\t}\n\ttry {\n\t\tmodule.exports = require('../../build/Debug/tree_sitter_shadeup_binding');\n\t} catch (error2) {\n\t\tif (error2.code !== 'MODULE_NOT_FOUND') {\n\t\t\tthrow error2;\n\t\t}\n\t\tthrow error1;\n\t}\n}\n\ntry {\n\tmodule.exports.nodeTypeInfo = require('../../src/node-types.json');\n} catch (_) {}\n"
  },
  {
    "path": "lang/tree-sitter/bindings/rust/build.rs",
    "content": "fn main() {\n    let src_dir = std::path::Path::new(\"src\");\n\n    let mut c_config = cc::Build::new();\n    c_config.include(&src_dir);\n    c_config\n        .flag_if_supported(\"-Wno-unused-parameter\")\n        .flag_if_supported(\"-Wno-unused-but-set-variable\")\n        .flag_if_supported(\"-Wno-trigraphs\");\n    let parser_path = src_dir.join(\"parser.c\");\n    c_config.file(&parser_path);\n\n    // If your language uses an external scanner written in C,\n    // then include this block of code:\n\n    let scanner_path = src_dir.join(\"scanner.c\");\n    c_config.file(&scanner_path);\n    println!(\"cargo:rerun-if-changed={}\", scanner_path.to_str().unwrap());\n\n    c_config.compile(\"parser\");\n    println!(\"cargo:rerun-if-changed={}\", parser_path.to_str().unwrap());\n\n    // If your language uses an external scanner written in C++,\n    // then include this block of code:\n\n    /*\n    let mut cpp_config = cc::Build::new();\n    cpp_config.cpp(true);\n    cpp_config.include(&src_dir);\n    cpp_config\n        .flag_if_supported(\"-Wno-unused-parameter\")\n        .flag_if_supported(\"-Wno-unused-but-set-variable\");\n    let scanner_path = src_dir.join(\"scanner.cc\");\n    cpp_config.file(&scanner_path);\n    cpp_config.compile(\"scanner\");\n    println!(\"cargo:rerun-if-changed={}\", scanner_path.to_str().unwrap());\n    */\n}\n"
  },
  {
    "path": "lang/tree-sitter/bindings/rust/lib.rs",
    "content": "//! This crate provides shadeup language support for the [tree-sitter][] parsing library.\n//!\n//! Typically, you will use the [language][language func] function to add this language to a\n//! tree-sitter [Parser][], and then use the parser to parse some code:\n//!\n//! ```\n//! let code = \"\";\n//! let mut parser = tree_sitter::Parser::new();\n//! parser.set_language(tree_sitter_shadeup::language()).expect(\"Error loading shadeup grammar\");\n//! let tree = parser.parse(code, None).unwrap();\n//! ```\n//!\n//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html\n//! [language func]: fn.language.html\n//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html\n//! [tree-sitter]: https://tree-sitter.github.io/\n\nuse tree_sitter::Language;\n\nextern \"C\" {\n    fn tree_sitter_shadeup() -> Language;\n}\n\n/// Get the tree-sitter [Language][] for this grammar.\n///\n/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html\npub fn language() -> Language {\n    unsafe { tree_sitter_shadeup() }\n}\n\n/// The content of the [`node-types.json`][] file for this grammar.\n///\n/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types\npub const NODE_TYPES: &'static str = include_str!(\"../../src/node-types.json\");\n\n// Uncomment these to include any queries that this grammar contains\n\n// pub const HIGHLIGHTS_QUERY: &'static str = include_str!(\"../../queries/highlights.scm\");\n// pub const INJECTIONS_QUERY: &'static str = include_str!(\"../../queries/injections.scm\");\n// pub const LOCALS_QUERY: &'static str = include_str!(\"../../queries/locals.scm\");\n// pub const TAGS_QUERY: &'static str = include_str!(\"../../queries/tags.scm\");\n\n#[cfg(test)]\nmod tests {\n    #[test]\n    fn test_can_load_grammar() {\n        let mut parser = tree_sitter::Parser::new();\n        parser\n            .set_language(super::language())\n            .expect(\"Error loading shadeup language\");\n    }\n}\n"
  },
  {
    "path": "lang/tree-sitter/build/Release/obj/tree_sitter_shadeup_binding/tree_sit.A95203FA.tlog/tree_sitter_shadeup_binding.lastbuildstate",
    "content": "PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.31.31103:TargetPlatformVersion=10.0.19041.0:VcpkgTriplet=x64-windows:\nRelease|x64|C:\\Users\\Jeremy\\Documents\\Programing\\shadeup-lang\\tree-sitter\\build\\|\n"
  },
  {
    "path": "lang/tree-sitter/build/Release/obj/tree_sitter_shadeup_binding/tree_sitter_shadeup_binding.node.recipe",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project>\n  <ProjectOutputs>\n    <ProjectOutput>\n      <FullPath>C:\\Users\\Jeremy\\Documents\\Programing\\shadeup-lang\\tree-sitter\\build\\Release\\tree_sitter_shadeup_binding.node</FullPath>\n    </ProjectOutput>\n  </ProjectOutputs>\n  <ContentFiles />\n  <SatelliteDlls />\n  <NonRecipeFileRefs />\n</Project>"
  },
  {
    "path": "lang/tree-sitter/build/binding.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2015\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"tree_sitter_shadeup_binding\", \"tree_sitter_shadeup_binding.vcxproj\", \"{A95203FA-3C2D-17B0-C550-33B4BBC444B3}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tRelease|x64 = Release|x64\n\t\tDebug|x64 = Debug|x64\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{A95203FA-3C2D-17B0-C550-33B4BBC444B3}.Release|x64.ActiveCfg = Release|x64\n\t\t{A95203FA-3C2D-17B0-C550-33B4BBC444B3}.Release|x64.Build.0 = Release|x64\n\t\t{A95203FA-3C2D-17B0-C550-33B4BBC444B3}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{A95203FA-3C2D-17B0-C550-33B4BBC444B3}.Debug|x64.Build.0 = Debug|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "lang/tree-sitter/build/config.gypi",
    "content": "# Do not edit. File was generated by node-gyp's \"configure\" step\n{\n  \"target_defaults\": {\n    \"cflags\": [],\n    \"default_configuration\": \"Release\",\n    \"defines\": [],\n    \"include_dirs\": [],\n    \"libraries\": [],\n    \"msbuild_toolset\": \"v143\",\n    \"msvs_windows_target_platform_version\": \"10.0.19041.0\"\n  },\n  \"variables\": {\n    \"asan\": 0,\n    \"coverage\": \"false\",\n    \"dcheck_always_on\": 0,\n    \"debug_nghttp2\": \"false\",\n    \"debug_node\": \"false\",\n    \"enable_lto\": \"false\",\n    \"enable_pgo_generate\": \"false\",\n    \"enable_pgo_use\": \"false\",\n    \"error_on_warn\": \"false\",\n    \"force_dynamic_crt\": 0,\n    \"host_arch\": \"x64\",\n    \"icu_data_in\": \"..\\\\..\\\\deps\\\\icu-tmp\\\\icudt71l.dat\",\n    \"icu_endianness\": \"l\",\n    \"icu_gyp_path\": \"tools/icu/icu-generic.gyp\",\n    \"icu_path\": \"deps/icu-small\",\n    \"icu_small\": \"false\",\n    \"icu_ver_major\": \"71\",\n    \"is_debug\": 0,\n    \"llvm_version\": \"0.0\",\n    \"napi_build_version\": \"8\",\n    \"nasm_version\": \"2.15\",\n    \"node_byteorder\": \"little\",\n    \"node_debug_lib\": \"false\",\n    \"node_enable_d8\": \"false\",\n    \"node_fipsinstall\": \"false\",\n    \"node_install_corepack\": \"true\",\n    \"node_install_npm\": \"true\",\n    \"node_library_files\": [\n      \"lib/assert.js\",\n      \"lib/async_hooks.js\",\n      \"lib/buffer.js\",\n      \"lib/child_process.js\",\n      \"lib/cluster.js\",\n      \"lib/console.js\",\n      \"lib/constants.js\",\n      \"lib/crypto.js\",\n      \"lib/dgram.js\",\n      \"lib/diagnostics_channel.js\",\n      \"lib/dns.js\",\n      \"lib/domain.js\",\n      \"lib/events.js\",\n      \"lib/fs.js\",\n      \"lib/http.js\",\n      \"lib/http2.js\",\n      \"lib/https.js\",\n      \"lib/inspector.js\",\n      \"lib/module.js\",\n      \"lib/net.js\",\n      \"lib/os.js\",\n      \"lib/path.js\",\n      \"lib/perf_hooks.js\",\n      \"lib/process.js\",\n      \"lib/punycode.js\",\n      \"lib/querystring.js\",\n      \"lib/readline.js\",\n      \"lib/repl.js\",\n      \"lib/stream.js\",\n      \"lib/string_decoder.js\",\n      \"lib/sys.js\",\n      \"lib/test.js\",\n      \"lib/timers.js\",\n      \"lib/tls.js\",\n      \"lib/trace_events.js\",\n      \"lib/tty.js\",\n      \"lib/url.js\",\n      \"lib/util.js\",\n      \"lib/v8.js\",\n      \"lib/vm.js\",\n      \"lib/wasi.js\",\n      \"lib/worker_threads.js\",\n      \"lib/zlib.js\",\n      \"lib/_http_agent.js\",\n      \"lib/_http_client.js\",\n      \"lib/_http_common.js\",\n      \"lib/_http_incoming.js\",\n      \"lib/_http_outgoing.js\",\n      \"lib/_http_server.js\",\n      \"lib/_stream_duplex.js\",\n      \"lib/_stream_passthrough.js\",\n      \"lib/_stream_readable.js\",\n      \"lib/_stream_transform.js\",\n      \"lib/_stream_wrap.js\",\n      \"lib/_stream_writable.js\",\n      \"lib/_tls_common.js\",\n      \"lib/_tls_wrap.js\",\n      \"lib/assert/strict.js\",\n      \"lib/dns/promises.js\",\n      \"lib/fs/promises.js\",\n      \"lib/internal/abort_controller.js\",\n      \"lib/internal/assert.js\",\n      \"lib/internal/async_hooks.js\",\n      \"lib/internal/blob.js\",\n      \"lib/internal/blocklist.js\",\n      \"lib/internal/buffer.js\",\n      \"lib/internal/child_process.js\",\n      \"lib/internal/cli_table.js\",\n      \"lib/internal/constants.js\",\n      \"lib/internal/dgram.js\",\n      \"lib/internal/dtrace.js\",\n      \"lib/internal/encoding.js\",\n      \"lib/internal/errors.js\",\n      \"lib/internal/error_serdes.js\",\n      \"lib/internal/event_target.js\",\n      \"lib/internal/fixed_queue.js\",\n      \"lib/internal/freelist.js\",\n      \"lib/internal/freeze_intrinsics.js\",\n      \"lib/internal/heap_utils.js\",\n      \"lib/internal/histogram.js\",\n      \"lib/internal/http.js\",\n      \"lib/internal/idna.js\",\n      \"lib/internal/inspector_async_hook.js\",\n      \"lib/internal/js_stream_socket.js\",\n      \"lib/internal/linkedlist.js\",\n      \"lib/internal/net.js\",\n      \"lib/internal/options.js\",\n      \"lib/internal/priority_queue.js\",\n      \"lib/internal/promise_hooks.js\",\n      \"lib/internal/querystring.js\",\n      \"lib/internal/repl.js\",\n      \"lib/internal/socketaddress.js\",\n      \"lib/internal/socket_list.js\",\n      \"lib/internal/stream_base_commons.js\",\n      \"lib/internal/structured_clone.js\",\n      \"lib/internal/timers.js\",\n      \"lib/internal/trace_events_async_hooks.js\",\n      \"lib/internal/tty.js\",\n      \"lib/internal/url.js\",\n      \"lib/internal/util.js\",\n      \"lib/internal/v8_prof_polyfill.js\",\n      \"lib/internal/v8_prof_processor.js\",\n      \"lib/internal/validators.js\",\n      \"lib/internal/wasm_web_api.js\",\n      \"lib/internal/watchdog.js\",\n      \"lib/internal/worker.js\",\n      \"lib/internal/assert/assertion_error.js\",\n      \"lib/internal/assert/calltracker.js\",\n      \"lib/internal/bootstrap/browser.js\",\n      \"lib/internal/bootstrap/environment.js\",\n      \"lib/internal/bootstrap/loaders.js\",\n      \"lib/internal/bootstrap/node.js\",\n      \"lib/internal/bootstrap/pre_execution.js\",\n      \"lib/internal/bootstrap/switches/does_not_own_process_state.js\",\n      \"lib/internal/bootstrap/switches/does_own_process_state.js\",\n      \"lib/internal/bootstrap/switches/is_main_thread.js\",\n      \"lib/internal/bootstrap/switches/is_not_main_thread.js\",\n      \"lib/internal/child_process/serialization.js\",\n      \"lib/internal/cluster/child.js\",\n      \"lib/internal/cluster/primary.js\",\n      \"lib/internal/cluster/round_robin_handle.js\",\n      \"lib/internal/cluster/shared_handle.js\",\n      \"lib/internal/cluster/utils.js\",\n      \"lib/internal/cluster/worker.js\",\n      \"lib/internal/console/constructor.js\",\n      \"lib/internal/console/global.js\",\n      \"lib/internal/crypto/aes.js\",\n      \"lib/internal/crypto/certificate.js\",\n      \"lib/internal/crypto/cfrg.js\",\n      \"lib/internal/crypto/cipher.js\",\n      \"lib/internal/crypto/diffiehellman.js\",\n      \"lib/internal/crypto/ec.js\",\n      \"lib/internal/crypto/hash.js\",\n      \"lib/internal/crypto/hashnames.js\",\n      \"lib/internal/crypto/hkdf.js\",\n      \"lib/internal/crypto/keygen.js\",\n      \"lib/internal/crypto/keys.js\",\n      \"lib/internal/crypto/mac.js\",\n      \"lib/internal/crypto/pbkdf2.js\",\n      \"lib/internal/crypto/random.js\",\n      \"lib/internal/crypto/rsa.js\",\n      \"lib/internal/crypto/scrypt.js\",\n      \"lib/internal/crypto/sig.js\",\n      \"lib/internal/crypto/util.js\",\n      \"lib/internal/crypto/webcrypto.js\",\n      \"lib/internal/crypto/x509.js\",\n      \"lib/internal/debugger/inspect.js\",\n      \"lib/internal/debugger/inspect_client.js\",\n      \"lib/internal/debugger/inspect_repl.js\",\n      \"lib/internal/dns/promises.js\",\n      \"lib/internal/dns/utils.js\",\n      \"lib/internal/fs/dir.js\",\n      \"lib/internal/fs/promises.js\",\n      \"lib/internal/fs/read_file_context.js\",\n      \"lib/internal/fs/rimraf.js\",\n      \"lib/internal/fs/streams.js\",\n      \"lib/internal/fs/sync_write_stream.js\",\n      \"lib/internal/fs/utils.js\",\n      \"lib/internal/fs/watchers.js\",\n      \"lib/internal/fs/cp/cp-sync.js\",\n      \"lib/internal/fs/cp/cp.js\",\n      \"lib/internal/http2/compat.js\",\n      \"lib/internal/http2/core.js\",\n      \"lib/internal/http2/util.js\",\n      \"lib/internal/legacy/processbinding.js\",\n      \"lib/internal/main/check_syntax.js\",\n      \"lib/internal/main/eval_stdin.js\",\n      \"lib/internal/main/eval_string.js\",\n      \"lib/internal/main/inspect.js\",\n      \"lib/internal/main/mksnapshot.js\",\n      \"lib/internal/main/print_help.js\",\n      \"lib/internal/main/prof_process.js\",\n      \"lib/internal/main/repl.js\",\n      \"lib/internal/main/run_main_module.js\",\n      \"lib/internal/main/test_runner.js\",\n      \"lib/internal/main/worker_thread.js\",\n      \"lib/internal/modules/package_json_reader.js\",\n      \"lib/internal/modules/run_main.js\",\n      \"lib/internal/modules/cjs/helpers.js\",\n      \"lib/internal/modules/cjs/loader.js\",\n      \"lib/internal/modules/esm/assert.js\",\n      \"lib/internal/modules/esm/create_dynamic_module.js\",\n      \"lib/internal/modules/esm/fetch_module.js\",\n      \"lib/internal/modules/esm/formats.js\",\n      \"lib/internal/modules/esm/get_format.js\",\n      \"lib/internal/modules/esm/handle_process_exit.js\",\n      \"lib/internal/modules/esm/initialize_import_meta.js\",\n      \"lib/internal/modules/esm/load.js\",\n      \"lib/internal/modules/esm/loader.js\",\n      \"lib/internal/modules/esm/module_job.js\",\n      \"lib/internal/modules/esm/module_map.js\",\n      \"lib/internal/modules/esm/resolve.js\",\n      \"lib/internal/modules/esm/translators.js\",\n      \"lib/internal/perf/event_loop_delay.js\",\n      \"lib/internal/perf/event_loop_utilization.js\",\n      \"lib/internal/perf/nodetiming.js\",\n      \"lib/internal/perf/observe.js\",\n      \"lib/internal/perf/performance.js\",\n      \"lib/internal/perf/performance_entry.js\",\n      \"lib/internal/perf/resource_timing.js\",\n      \"lib/internal/perf/timerify.js\",\n      \"lib/internal/perf/usertiming.js\",\n      \"lib/internal/perf/utils.js\",\n      \"lib/internal/per_context/domexception.js\",\n      \"lib/internal/per_context/messageport.js\",\n      \"lib/internal/per_context/primordials.js\",\n      \"lib/internal/policy/manifest.js\",\n      \"lib/internal/policy/sri.js\",\n      \"lib/internal/process/esm_loader.js\",\n      \"lib/internal/process/execution.js\",\n      \"lib/internal/process/per_thread.js\",\n      \"lib/internal/process/policy.js\",\n      \"lib/internal/process/promises.js\",\n      \"lib/internal/process/report.js\",\n      \"lib/internal/process/signal.js\",\n      \"lib/internal/process/task_queues.js\",\n      \"lib/internal/process/warning.js\",\n      \"lib/internal/process/worker_thread_only.js\",\n      \"lib/internal/readline/callbacks.js\",\n      \"lib/internal/readline/emitKeypressEvents.js\",\n      \"lib/internal/readline/interface.js\",\n      \"lib/internal/readline/promises.js\",\n      \"lib/internal/readline/utils.js\",\n      \"lib/internal/repl/await.js\",\n      \"lib/internal/repl/history.js\",\n      \"lib/internal/repl/utils.js\",\n      \"lib/internal/source_map/prepare_stack_trace.js\",\n      \"lib/internal/source_map/source_map.js\",\n      \"lib/internal/source_map/source_map_cache.js\",\n      \"lib/internal/streams/add-abort-signal.js\",\n      \"lib/internal/streams/buffer_list.js\",\n      \"lib/internal/streams/compose.js\",\n      \"lib/internal/streams/destroy.js\",\n      \"lib/internal/streams/duplex.js\",\n      \"lib/internal/streams/duplexify.js\",\n      \"lib/internal/streams/end-of-stream.js\",\n      \"lib/internal/streams/from.js\",\n      \"lib/internal/streams/lazy_transform.js\",\n      \"lib/internal/streams/legacy.js\",\n      \"lib/internal/streams/operators.js\",\n      \"lib/internal/streams/passthrough.js\",\n      \"lib/internal/streams/pipeline.js\",\n      \"lib/internal/streams/readable.js\",\n      \"lib/internal/streams/state.js\",\n      \"lib/internal/streams/transform.js\",\n      \"lib/internal/streams/utils.js\",\n      \"lib/internal/streams/writable.js\",\n      \"lib/internal/test/binding.js\",\n      \"lib/internal/test/transfer.js\",\n      \"lib/internal/test_runner/harness.js\",\n      \"lib/internal/test_runner/tap_stream.js\",\n      \"lib/internal/test_runner/test.js\",\n      \"lib/internal/test_runner/utils.js\",\n      \"lib/internal/tls/secure-context.js\",\n      \"lib/internal/tls/secure-pair.js\",\n      \"lib/internal/util/comparisons.js\",\n      \"lib/internal/util/debuglog.js\",\n      \"lib/internal/util/inspect.js\",\n      \"lib/internal/util/inspector.js\",\n      \"lib/internal/util/iterable_weak_map.js\",\n      \"lib/internal/util/types.js\",\n      \"lib/internal/util/parse_args/parse_args.js\",\n      \"lib/internal/util/parse_args/utils.js\",\n      \"lib/internal/v8/startup_snapshot.js\",\n      \"lib/internal/vm/module.js\",\n      \"lib/internal/webstreams/adapters.js\",\n      \"lib/internal/webstreams/compression.js\",\n      \"lib/internal/webstreams/encoding.js\",\n      \"lib/internal/webstreams/queuingstrategies.js\",\n      \"lib/internal/webstreams/readablestream.js\",\n      \"lib/internal/webstreams/transfer.js\",\n      \"lib/internal/webstreams/transformstream.js\",\n      \"lib/internal/webstreams/util.js\",\n      \"lib/internal/webstreams/writablestream.js\",\n      \"lib/internal/worker/io.js\",\n      \"lib/internal/worker/js_transferable.js\",\n      \"lib/path/posix.js\",\n      \"lib/path/win32.js\",\n      \"lib/readline/promises.js\",\n      \"lib/stream/consumers.js\",\n      \"lib/stream/promises.js\",\n      \"lib/stream/web.js\",\n      \"lib/timers/promises.js\",\n      \"lib/util/types.js\"\n    ],\n    \"node_module_version\": 108,\n    \"node_no_browser_globals\": \"false\",\n    \"node_prefix\": \"/usr/local\",\n    \"node_release_urlbase\": \"https://nodejs.org/download/release/\",\n    \"node_shared\": \"false\",\n    \"node_shared_brotli\": \"false\",\n    \"node_shared_cares\": \"false\",\n    \"node_shared_http_parser\": \"false\",\n    \"node_shared_libuv\": \"false\",\n    \"node_shared_nghttp2\": \"false\",\n    \"node_shared_nghttp3\": \"false\",\n    \"node_shared_ngtcp2\": \"false\",\n    \"node_shared_openssl\": \"false\",\n    \"node_shared_zlib\": \"false\",\n    \"node_tag\": \"\",\n    \"node_target_type\": \"executable\",\n    \"node_use_bundled_v8\": \"true\",\n    \"node_use_dtrace\": \"false\",\n    \"node_use_etw\": \"true\",\n    \"node_use_node_code_cache\": \"true\",\n    \"node_use_node_snapshot\": \"true\",\n    \"node_use_openssl\": \"true\",\n    \"node_use_v8_platform\": \"true\",\n    \"node_with_ltcg\": \"true\",\n    \"node_without_node_options\": \"false\",\n    \"openssl_is_fips\": \"false\",\n    \"openssl_quic\": \"true\",\n    \"ossfuzz\": \"false\",\n    \"shlib_suffix\": \"so.108\",\n    \"target_arch\": \"x64\",\n    \"v8_enable_31bit_smis_on_64bit_arch\": 0,\n    \"v8_enable_gdbjit\": 0,\n    \"v8_enable_hugepage\": 0,\n    \"v8_enable_i18n_support\": 1,\n    \"v8_enable_inspector\": 1,\n    \"v8_enable_javascript_promise_hooks\": 1,\n    \"v8_enable_lite_mode\": 0,\n    \"v8_enable_object_print\": 1,\n    \"v8_enable_pointer_compression\": 0,\n    \"v8_enable_shared_ro_heap\": 1,\n    \"v8_enable_short_builtin_calls\": 1,\n    \"v8_enable_webassembly\": 1,\n    \"v8_no_strict_aliasing\": 1,\n    \"v8_optimized_debug\": 1,\n    \"v8_promise_internal_field_count\": 1,\n    \"v8_random_seed\": 0,\n    \"v8_trace_maps\": 0,\n    \"v8_use_siphash\": 1,\n    \"want_separate_host_toolset\": 0,\n    \"nodedir\": \"C:\\\\Users\\\\Jeremy\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\18.7.0\",\n    \"standalone_static_library\": 1,\n    \"msbuild_path\": \"A:\\\\Visual Studio 2022\\\\MSBuild\\\\Current\\\\Bin\\\\MSBuild.exe\",\n    \"cache\": \"C:\\\\Users\\\\Jeremy\\\\AppData\\\\Local\\\\npm-cache\",\n    \"globalconfig\": \"C:\\\\Users\\\\Jeremy\\\\AppData\\\\Roaming\\\\npm\\\\etc\\\\npmrc\",\n    \"global_prefix\": \"C:\\\\Users\\\\Jeremy\\\\AppData\\\\Roaming\\\\npm\",\n    \"init_module\": \"C:\\\\Users\\\\Jeremy\\\\.npm-init.js\",\n    \"local_prefix\": \"C:\\\\Users\\\\Jeremy\\\\Documents\\\\Programing\\\\shadeup-lang\\\\tree-sitter\",\n    \"metrics_registry\": \"https://registry.npmjs.org/\",\n    \"node_gyp\": \"C:\\\\Program Files\\\\nodejs\\\\node_modules\\\\npm\\\\node_modules\\\\@npmcli\\\\run-script\\\\node_modules\\\\node-gyp\\\\bin\\\\node-gyp.js\",\n    \"prefix\": \"C:\\\\Users\\\\Jeremy\\\\AppData\\\\Roaming\\\\npm\",\n    \"userconfig\": \"C:\\\\Users\\\\Jeremy\\\\.npmrc\",\n    \"user_agent\": \"npm/8.15.0 node/v18.7.0 win32 x64 workspaces/false\"\n  }\n}\n"
  },
  {
    "path": "lang/tree-sitter/build/tree_sitter_shadeup_binding.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{A95203FA-3C2D-17B0-C550-33B4BBC444B3}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>tree_sitter_shadeup_binding</RootNamespace>\n    <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>\n    <PreferredToolArchitecture>x64</PreferredToolArchitecture>\n    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\"/>\n  <PropertyGroup Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Locals\">\n    <PlatformToolset>v143</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\"/>\n  <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.props\"/>\n  <ImportGroup Label=\"ExtensionSettings\"/>\n  <ImportGroup Label=\"PropertySheets\">\n    <Import Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\"/>\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\"/>\n  <PropertyGroup>\n    <ExecutablePath>$(ExecutablePath);$(MSBuildProjectDirectory)\\..\\bin\\;$(MSBuildProjectDirectory)\\..\\bin\\</ExecutablePath>\n    <IgnoreImportLibrary>true</IgnoreImportLibrary>\n    <IntDir>$(Configuration)\\obj\\$(ProjectName)\\</IntDir>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</LinkIncremental>\n    <LinkIncremental Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">true</LinkIncremental>\n    <OutDir>$(SolutionDir)$(Configuration)\\</OutDir>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">.node</TargetExt>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">.node</TargetExt>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">.node</TargetExt>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">.node</TargetExt>\n    <TargetName>$(ProjectName)</TargetName>\n    <TargetPath>$(OutDir)\\$(ProjectName).node</TargetPath>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\include\\node;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\src;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\config;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\openssl\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\uv\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\zlib;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\v8\\include;..\\node_modules\\nan;..\\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <AdditionalOptions>/Zc:__cplusplus -std:c++17 %(AdditionalOptions)</AdditionalOptions>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <BufferSecurityCheck>true</BufferSecurityCheck>\n      <DebugInformationFormat>OldStyle</DebugInformationFormat>\n      <DisableSpecificWarnings>4351;4355;4800;4251;4275;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <ExceptionHandling>false</ExceptionHandling>\n      <MinimalRebuild>false</MinimalRebuild>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n      <OmitFramePointers>false</OmitFramePointers>\n      <Optimization>Disabled</Optimization>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=tree_sitter_shadeup_binding;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;DEBUG;_DEBUG;V8_ENABLE_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <StringPooling>true</StringPooling>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TreatWarningAsError>false</TreatWarningAsError>\n      <WarningLevel>Level3</WarningLevel>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/LTCG:INCREMENTAL %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n    <Link>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;&quot;C:\\\\Users\\\\Jeremy\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\18.7.0\\\\x64\\\\node.lib&quot;</AdditionalDependencies>\n      <AdditionalOptions>/LTCG:INCREMENTAL /ignore:4199 %(AdditionalOptions)</AdditionalOptions>\n      <DelayLoadDLLs>node.exe;%(DelayLoadDLLs)</DelayLoadDLLs>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <OptimizeReferences>true</OptimizeReferences>\n      <OutputFile>$(OutDir)$(ProjectName).node</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetExt>.node</TargetExt>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\include\\node;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\src;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\config;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\openssl\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\uv\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\zlib;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\v8\\include;..\\node_modules\\nan;..\\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=tree_sitter_shadeup_binding;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;DEBUG;_DEBUG;V8_ENABLE_CHECKS;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\include\\node;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\src;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\config;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\openssl\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\uv\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\zlib;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\v8\\include;..\\node_modules\\nan;..\\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <AdditionalOptions>/Zc:__cplusplus -std:c++17 %(AdditionalOptions)</AdditionalOptions>\n      <BufferSecurityCheck>true</BufferSecurityCheck>\n      <DebugInformationFormat>OldStyle</DebugInformationFormat>\n      <DisableSpecificWarnings>4351;4355;4800;4251;4275;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <ExceptionHandling>false</ExceptionHandling>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n      <OmitFramePointers>true</OmitFramePointers>\n      <Optimization>Full</Optimization>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=tree_sitter_shadeup_binding;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <RuntimeTypeInfo>false</RuntimeTypeInfo>\n      <StringPooling>true</StringPooling>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TreatWarningAsError>false</TreatWarningAsError>\n      <WarningLevel>Level3</WarningLevel>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n    </ClCompile>\n    <Lib>\n      <AdditionalOptions>/LTCG:INCREMENTAL %(AdditionalOptions)</AdditionalOptions>\n    </Lib>\n    <Link>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;&quot;C:\\\\Users\\\\Jeremy\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\18.7.0\\\\x64\\\\node.lib&quot;</AdditionalDependencies>\n      <AdditionalOptions>/LTCG:INCREMENTAL /ignore:4199 %(AdditionalOptions)</AdditionalOptions>\n      <DelayLoadDLLs>node.exe;%(DelayLoadDLLs)</DelayLoadDLLs>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <OptimizeReferences>true</OptimizeReferences>\n      <OutputFile>$(OutDir)$(ProjectName).node</OutputFile>\n      <SuppressStartupBanner>true</SuppressStartupBanner>\n      <TargetExt>.node</TargetExt>\n      <TargetMachine>MachineX64</TargetMachine>\n    </Link>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\include\\node;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\src;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\config;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\openssl\\openssl\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\uv\\include;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\zlib;C:\\Users\\Jeremy\\AppData\\Local\\node-gyp\\Cache\\18.7.0\\deps\\v8\\include;..\\node_modules\\nan;..\\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=tree_sitter_shadeup_binding;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <None Include=\"..\\binding.gyp\"/>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\bindings\\node\\binding.cc\">\n      <ObjectFileName>$(IntDir)\\bindings\\node\\binding.obj</ObjectFileName>\n    </ClCompile>\n    <ClCompile Include=\"..\\src\\parser.c\">\n      <ObjectFileName>$(IntDir)\\src\\parser.obj</ObjectFileName>\n    </ClCompile>\n    <ClCompile Include=\"..\\src\\scanner.c\">\n      <ObjectFileName>$(IntDir)\\src\\scanner.obj</ObjectFileName>\n    </ClCompile>\n    <ClCompile Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\\node_modules\\node-gyp\\src\\win_delay_load_hook.cc\"/>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\"/>\n  <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.targets\"/>\n  <ImportGroup Label=\"ExtensionTargets\"/>\n</Project>\n"
  },
  {
    "path": "lang/tree-sitter/build/tree_sitter_shadeup_binding.vcxproj.filters",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"..\">\n      <UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\\bindings\">\n      <UniqueIdentifier>{BDD847E6-3B5D-27DC-A93A-863DCFC98735}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\\bindings\\node\">\n      <UniqueIdentifier>{A49AD564-6B22-6A46-08E5-B5A7F4427839}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\">\n      <UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\\src\">\n      <UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\">\n      <UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\\src\">\n      <UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\">\n      <UniqueIdentifier>{7B735499-E5DD-1C2B-6C26-70023832A1CF}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\">\n      <UniqueIdentifier>{92EF4BA8-6BC2-65D1-451F-28EBD4AE726A}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\">\n      <UniqueIdentifier>{A3C8E949-BCF6-0C67-6656-340A2A097708}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\">\n      <UniqueIdentifier>{56DF7A98-063D-FB9D-485C-089023B4C16A}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\">\n      <UniqueIdentifier>{741E0E76-39B2-B1AB-9FA1-F1A20B16F295}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\">\n      <UniqueIdentifier>{56DF7A98-063D-FB9D-485C-089023B4C16A}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\">\n      <UniqueIdentifier>{6D724DD5-E0AE-B5CF-DCFC-37DBDA790824}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\">\n      <UniqueIdentifier>{02DDD09D-7478-77A9-B79C-8BA4FA8C8C22}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\\node_modules\">\n      <UniqueIdentifier>{56DF7A98-063D-FB9D-485C-089023B4C16A}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\\node_modules\\node-gyp\">\n      <UniqueIdentifier>{77348C0E-2034-7791-74D5-63C077DF5A3B}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\\node_modules\\node-gyp\\src\">\n      <UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"..\">\n      <UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"..\\bindings\\node\\binding.cc\">\n      <Filter>..\\bindings\\node</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\src\\parser.c\">\n      <Filter>..\\src</Filter>\n    </ClCompile>\n    <ClCompile Include=\"..\\src\\scanner.c\">\n      <Filter>..\\src</Filter>\n    </ClCompile>\n    <ClCompile Include=\"C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\\node_modules\\node-gyp\\src\\win_delay_load_hook.cc\">\n      <Filter>C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\@npmcli\\run-script\\node_modules\\node-gyp\\src</Filter>\n    </ClCompile>\n    <None Include=\"..\\binding.gyp\">\n      <Filter>..</Filter>\n    </None>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "lang/tree-sitter/grammar.js",
    "content": "module.exports = grammar(\n\tgrammar({\n\t\tname: 'javascript',\n\n\t\texternals: ($) => [$._automatic_semicolon, $._template_chars, $._ternary_qmark],\n\n\t\textras: ($) => [$.comment, /[\\s\\p{Zs}\\uFEFF\\u2060\\u200B]/],\n\n\t\tsupertypes: ($) => [$.statement, $.declaration, $.expression, $.primary_expression, $.pattern],\n\n\t\tinline: ($) => [\n\t\t\t$._call_signature,\n\t\t\t$._formal_parameter,\n\t\t\t$.statement,\n\t\t\t$._expressions,\n\t\t\t$._semicolon,\n\t\t\t$._identifier,\n\t\t\t$._reserved_identifier,\n\t\t\t$._jsx_attribute,\n\t\t\t$._jsx_element_name,\n\t\t\t$._jsx_child,\n\t\t\t$._jsx_element,\n\t\t\t$._jsx_attribute_name,\n\t\t\t$._jsx_attribute_value,\n\t\t\t$._jsx_identifier,\n\t\t\t$._lhs_expression\n\t\t],\n\n\t\tprecedences: ($) => [\n\t\t\t[\n\t\t\t\t'member',\n\t\t\t\t'call',\n\t\t\t\t$.update_expression,\n\t\t\t\t'unary_void',\n\t\t\t\t'binary_exp',\n\t\t\t\t'binary_times',\n\t\t\t\t'binary_plus',\n\t\t\t\t'binary_shift',\n\t\t\t\t'binary_compare',\n\t\t\t\t'binary_relation',\n\t\t\t\t'binary_equality',\n\t\t\t\t'bitwise_and',\n\t\t\t\t'bitwise_xor',\n\t\t\t\t'bitwise_or',\n\t\t\t\t'logical_and',\n\t\t\t\t'logical_or',\n\t\t\t\t'ternary',\n\t\t\t\t$.sequence_expression,\n\t\t\t\t$.arrow_function\n\t\t\t],\n\t\t\t['assign', $.primary_expression],\n\t\t\t['member', 'new', 'call', $.expression],\n\t\t\t['declaration', 'literal'],\n\t\t\t[$.primary_expression, $.statement_block, 'object'],\n\t\t\t[$.import_statement, $.import],\n\t\t\t[$.export_statement, $.primary_expression]\n\t\t],\n\n\t\tconflicts: ($) => [\n\t\t\t[$.primary_expression, $._property_name],\n\t\t\t[$.primary_expression, $._property_name, $.arrow_function],\n\t\t\t[$.primary_expression, $.arrow_function],\n\t\t\t[$.primary_expression, $.method_definition],\n\n\t\t\t[$.primary_expression, $.rest_pattern],\n\t\t\t[$.primary_expression, $.pattern],\n\t\t\t[$.primary_expression, $._for_header],\n\t\t\t[$.array, $.array_pattern],\n\t\t\t[$.object, $.object_pattern],\n\t\t\t[$.assignment_expression, $.pattern],\n\t\t\t[$.assignment_expression, $.object_assignment_pattern],\n\t\t\t[$.labeled_statement, $._property_name],\n\t\t\t[$.computed_property_name, $.array],\n\t\t\t[$.binary_expression, $._initializer]\n\t\t],\n\n\t\tword: ($) => $.identifier,\n\n\t\trules: {\n\t\t\tprogram: ($) => seq(optional($.hash_bang_line), repeat($.statement)),\n\n\t\t\thash_bang_line: ($) => /#!.*/,\n\n\t\t\t//\n\t\t\t// Export declarations\n\t\t\t//\n\n\t\t\texport_statement: ($) => choice(seq('pub', choice(field('declaration', $.declaration)))),\n\n\t\t\tnamespace_export: ($) => seq('*', 'as', $._module_export_name),\n\n\t\t\texport_clause: ($) => seq('{', commaSep($.export_specifier), optional(','), '}'),\n\n\t\t\texport_specifier: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', $._module_export_name),\n\t\t\t\t\toptional(seq('as', field('alias', $._module_export_name)))\n\t\t\t\t),\n\n\t\t\t_module_export_name: ($) => choice($.identifier, $.string),\n\n\t\t\tdeclaration: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.function_declaration,\n\t\t\t\t\t$.generator_function_declaration,\n\t\t\t\t\t// $.class_declaration,\n\t\t\t\t\t$.struct_declaration,\n\t\t\t\t\t$.lexical_declaration,\n\t\t\t\t\t$.variable_declaration\n\t\t\t\t),\n\n\t\t\t//\n\t\t\t// Import declarations\n\t\t\t//\n\n\t\t\timport: ($) => token('import'),\n\n\t\t\timport_statement: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'import',\n\t\t\t\t\tchoice(seq($.import_clause, $._from_clause), field('source', $.string)),\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\n\t\t\timport_clause: ($) => choice($.named_imports),\n\n\t\t\t_from_clause: ($) => seq('from', field('source', $.string)),\n\n\t\t\tnamespace_import: ($) => seq('*', 'as', $.identifier),\n\n\t\t\tnamed_imports: ($) => seq(commaSep1($.import_specifier), optional(',')),\n\n\t\t\timport_specifier: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\tseq(field('name', $._module_export_name), 'as', field('alias', $.identifier))\n\t\t\t\t),\n\n\t\t\t//\n\t\t\t// Statements\n\t\t\t//\n\n\t\t\tstatement: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.export_statement,\n\t\t\t\t\t$.import_statement,\n\t\t\t\t\t$.debugger_statement,\n\t\t\t\t\t$.expression_statement,\n\t\t\t\t\t$.declaration,\n\t\t\t\t\t$.statement_block,\n\n\t\t\t\t\t$.if_statement,\n\t\t\t\t\t$.switch_statement,\n\t\t\t\t\t$.for_statement,\n\t\t\t\t\t$.for_in_statement,\n\t\t\t\t\t$.while_statement,\n\t\t\t\t\t$.do_statement,\n\t\t\t\t\t$.try_statement,\n\t\t\t\t\t$.with_statement,\n\n\t\t\t\t\t$.break_statement,\n\t\t\t\t\t$.continue_statement,\n\t\t\t\t\t$.return_statement,\n\t\t\t\t\t$.throw_statement,\n\t\t\t\t\t$.empty_statement,\n\t\t\t\t\t$.labeled_statement\n\t\t\t\t),\n\n\t\t\texpression_statement: ($) => seq($._expressions, $._semicolon),\n\n\t\t\tvariable_declaration: ($) => seq('var', commaSep1($.variable_declarator), $._semicolon),\n\n\t\t\tlexical_declaration: ($) =>\n\t\t\t\tseq(field('kind', choice('let', 'const')), commaSep1($.variable_declarator), $._semicolon),\n\n\t\t\tvariable_declarator: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\n\t\t\tstatement_block: ($) =>\n\t\t\t\tprec.right(seq('{', repeat($.statement), '}', optional($._automatic_semicolon))),\n\n\t\t\telse_clause: ($) => seq('else', $.statement),\n\n\t\t\tif_statement: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'if',\n\t\t\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\t\t\tfield('consequence', $.statement),\n\t\t\t\t\t\toptional(field('alternative', $.else_clause))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tswitch_statement: ($) =>\n\t\t\t\tseq('switch', field('value', $.parenthesized_expression), field('body', $.switch_body)),\n\n\t\t\tfor_statement: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'for',\n\t\t\t\t\t'(',\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'initializer',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.lexical_declaration,\n\t\t\t\t\t\t\t$.variable_declaration,\n\t\t\t\t\t\t\t$.expression_statement,\n\t\t\t\t\t\t\t$.empty_statement\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tfield('condition', choice($.expression_statement, $.empty_statement)),\n\t\t\t\t\tfield('increment', optional($._expressions)),\n\t\t\t\t\t')',\n\t\t\t\t\tfield('body', $.statement)\n\t\t\t\t),\n\n\t\t\tfor_in_statement: ($) =>\n\t\t\t\tseq('for', optional('await'), $._for_header, field('body', $.statement)),\n\n\t\t\t_for_header: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'(',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tfield('left', choice($._lhs_expression, $.parenthesized_expression)),\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('kind', 'var'),\n\t\t\t\t\t\t\tfield('left', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\t\toptional($._initializer)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('kind', choice('let', 'const')),\n\t\t\t\t\t\t\tfield('left', choice($.identifier, $._destructuring_pattern))\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tfield('operator', choice('in', 'of')),\n\t\t\t\t\tfield('right', $._expressions),\n\t\t\t\t\t')'\n\t\t\t\t),\n\n\t\t\twhile_statement: ($) =>\n\t\t\t\tseq('while', field('condition', $.parenthesized_expression), field('body', $.statement)),\n\n\t\t\tdo_statement: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'do',\n\t\t\t\t\tfield('body', $.statement),\n\t\t\t\t\t'while',\n\t\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\n\t\t\ttry_statement: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'try',\n\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\toptional(field('handler', $.catch_clause)),\n\t\t\t\t\toptional(field('finalizer', $.finally_clause))\n\t\t\t\t),\n\n\t\t\twith_statement: ($) =>\n\t\t\t\tseq('with', field('object', $.parenthesized_expression), field('body', $.statement)),\n\n\t\t\tbreak_statement: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'break',\n\t\t\t\t\tfield('label', optional(alias($.identifier, $.statement_identifier))),\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\n\t\t\tcontinue_statement: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'continue',\n\t\t\t\t\tfield('label', optional(alias($.identifier, $.statement_identifier))),\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\n\t\t\tdebugger_statement: ($) => seq('debugger', $._semicolon),\n\n\t\t\treturn_statement: ($) => seq('return', optional($._expressions), $._semicolon),\n\n\t\t\tthrow_statement: ($) => seq('throw', $._expressions, $._semicolon),\n\n\t\t\tempty_statement: ($) => ';',\n\n\t\t\tlabeled_statement: ($) =>\n\t\t\t\tprec.dynamic(\n\t\t\t\t\t-1,\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield(\n\t\t\t\t\t\t\t'label',\n\t\t\t\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.statement_identifier)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t':',\n\t\t\t\t\t\tfield('body', $.statement)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t//\n\t\t\t// Statement components\n\t\t\t//\n\n\t\t\tswitch_body: ($) => seq('{', repeat(choice($.switch_case, $.switch_default)), '}'),\n\n\t\t\tswitch_case: ($) =>\n\t\t\t\tseq('case', field('value', $._expressions), ':', field('body', repeat($.statement))),\n\n\t\t\tswitch_default: ($) => seq('default', ':', field('body', repeat($.statement))),\n\n\t\t\tcatch_clause: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'catch',\n\t\t\t\t\toptional(\n\t\t\t\t\t\tseq('(', field('parameter', choice($.identifier, $._destructuring_pattern)), ')')\n\t\t\t\t\t),\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t),\n\n\t\t\tfinally_clause: ($) => seq('finally', field('body', $.statement_block)),\n\n\t\t\tparenthesized_expression: ($) => seq('(', $._expressions, ')'),\n\t\t\tparenthesized_expression_vector: ($) => seq('(', $._expressions, ')'),\n\n\t\t\tconstruct_expression: ($) => seq(field('identifier', $.identifier), field('body', $.object)),\n\n\t\t\t//\n\t\t\t// Expressions\n\t\t\t//\n\t\t\t_expressions: ($) => choice($.expression, $.sequence_expression),\n\n\t\t\texpression: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.primary_expression,\n\t\t\t\t\t$.glimmer_template,\n\t\t\t\t\t$._jsx_element,\n\t\t\t\t\t$.jsx_fragment,\n\t\t\t\t\t$.assignment_expression,\n\t\t\t\t\t$.augmented_assignment_expression,\n\t\t\t\t\t$.await_expression,\n\t\t\t\t\t$.unary_expression,\n\t\t\t\t\t$.binary_expression,\n\t\t\t\t\t$.ternary_expression,\n\t\t\t\t\t$.update_expression,\n\t\t\t\t\t$.new_expression,\n\t\t\t\t\t$.yield_expression\n\t\t\t\t),\n\n\t\t\tprimary_expression: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.construct_expression,\n\t\t\t\t\t$.subscript_expression,\n\t\t\t\t\t$.member_expression,\n\t\t\t\t\t$.parenthesized_expression_vector,\n\t\t\t\t\t$._identifier,\n\t\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t\t$.this,\n\t\t\t\t\t$.super,\n\t\t\t\t\t$.number,\n\t\t\t\t\t$.string,\n\t\t\t\t\t$.template_string,\n\t\t\t\t\t$.regex,\n\t\t\t\t\t$.true,\n\t\t\t\t\t$.false,\n\t\t\t\t\t$.null,\n\t\t\t\t\t$.import,\n\t\t\t\t\t$.object,\n\t\t\t\t\t$.array,\n\n\t\t\t\t\t$.arrow_function,\n\t\t\t\t\t$.generator_function,\n\t\t\t\t\t$.meta_property,\n\t\t\t\t\t$.call_expression\n\t\t\t\t),\n\n\t\t\tyield_expression: ($) =>\n\t\t\t\tprec.right(seq('yield', choice(seq('*', $.expression), optional($.expression)))),\n\n\t\t\tobject: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'object',\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'{',\n\t\t\t\t\t\tcommaSep(\n\t\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t$.pair,\n\t\t\t\t\t\t\t\t\t$.spread_element,\n\t\t\t\t\t\t\t\t\t$.method_definition,\n\t\t\t\t\t\t\t\t\talias(\n\t\t\t\t\t\t\t\t\t\tchoice($.identifier, $._reserved_identifier),\n\t\t\t\t\t\t\t\t\t\t$.shorthand_property_identifier\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'}'\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tobject_pattern: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'object',\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'{',\n\t\t\t\t\t\tcommaSep(\n\t\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t$.pair_pattern,\n\t\t\t\t\t\t\t\t\t$.rest_pattern,\n\t\t\t\t\t\t\t\t\t$.object_assignment_pattern,\n\t\t\t\t\t\t\t\t\talias(\n\t\t\t\t\t\t\t\t\t\tchoice($.identifier, $._reserved_identifier),\n\t\t\t\t\t\t\t\t\t\t$.shorthand_property_identifier_pattern\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'}'\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tassignment_pattern: ($) => seq(field('left', $.pattern), '=', field('right', $.expression)),\n\n\t\t\tobject_assignment_pattern: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'left',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\talias(\n\t\t\t\t\t\t\t\tchoice($._reserved_identifier, $.identifier),\n\t\t\t\t\t\t\t\t$.shorthand_property_identifier_pattern\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t$._destructuring_pattern\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'=',\n\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t),\n\n\t\t\tarray: ($) => seq('[', commaSep(optional(choice($.expression, $.spread_element))), ']'),\n\n\t\t\tarray_pattern: ($) =>\n\t\t\t\tseq('[', commaSep(optional(choice($.pattern, $.assignment_pattern))), ']'),\n\n\t\t\tglimmer_template: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('open_tag', $.glimmer_opening_tag),\n\t\t\t\t\t\tfield('content', repeat($._glimmer_template_content)),\n\t\t\t\t\t\tfield('close_tag', $.glimmer_closing_tag)\n\t\t\t\t\t),\n\t\t\t\t\t// empty template has no content\n\t\t\t\t\t// <template></template>\n\t\t\t\t\tseq(field('open_tag', $.glimmer_opening_tag), field('close_tag', $.glimmer_closing_tag))\n\t\t\t\t),\n\n\t\t\t_glimmer_template_content: ($) => /.{1,}/,\n\t\t\tglimmer_opening_tag: ($) => seq('<template>'),\n\t\t\tglimmer_closing_tag: ($) => seq('</template>'),\n\n\t\t\t_jsx_element: ($) => choice($.jsx_element, $.jsx_self_closing_element),\n\n\t\t\tjsx_element: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('open_tag', $.jsx_opening_element),\n\t\t\t\t\trepeat($._jsx_child),\n\t\t\t\t\tfield('close_tag', $.jsx_closing_element)\n\t\t\t\t),\n\n\t\t\tjsx_fragment: ($) => seq('<', '>', repeat($._jsx_child), '<', '/', '>'),\n\n\t\t\tjsx_text: ($) => /[^{}<>]+/,\n\n\t\t\tjsx_expression: ($) =>\n\t\t\t\tseq('{', optional(choice($.expression, $.sequence_expression, $.spread_element)), '}'),\n\n\t\t\t_jsx_child: ($) => choice($.jsx_text, $._jsx_element, $.jsx_fragment, $.jsx_expression),\n\n\t\t\tjsx_opening_element: ($) =>\n\t\t\t\tprec.dynamic(\n\t\t\t\t\t-1,\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'<',\n\t\t\t\t\t\tfield('name', $._jsx_element_name),\n\t\t\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t\t\t'>'\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tjsx_identifier: ($) => /[a-zA-Z_$][a-zA-Z\\d_$]*-[a-zA-Z\\d_$\\-]*/,\n\n\t\t\t_jsx_identifier: ($) => choice(alias($.jsx_identifier, $.identifier), $.identifier),\n\n\t\t\tnested_identifier: ($) =>\n\t\t\t\tprec('member', seq(choice($.identifier, $.nested_identifier), '.', $.identifier)),\n\n\t\t\tjsx_namespace_name: ($) => seq($._jsx_identifier, ':', $._jsx_identifier),\n\n\t\t\t_jsx_element_name: ($) =>\n\t\t\t\tchoice($._jsx_identifier, $.nested_identifier, $.jsx_namespace_name),\n\n\t\t\tjsx_closing_element: ($) => seq('<', '/', field('name', $._jsx_element_name), '>'),\n\n\t\t\tjsx_self_closing_element: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'<',\n\t\t\t\t\tfield('name', $._jsx_element_name),\n\t\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t\t'/',\n\t\t\t\t\t'>'\n\t\t\t\t),\n\n\t\t\t_jsx_attribute: ($) => choice($.jsx_attribute, $.jsx_expression),\n\n\t\t\t_jsx_attribute_name: ($) =>\n\t\t\t\tchoice(alias($._jsx_identifier, $.property_identifier), $.jsx_namespace_name),\n\n\t\t\tjsx_attribute: ($) => seq($._jsx_attribute_name, optional(seq('=', $._jsx_attribute_value))),\n\n\t\t\t_jsx_attribute_value: ($) =>\n\t\t\t\tchoice($.string, $.jsx_expression, $._jsx_element, $.jsx_fragment),\n\n\t\t\tclass: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'literal',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tclass_declaration: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tstruct_declaration: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'struct',\n\t\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t\t// optional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tclass_heritage: ($) => seq('extends', $.expression),\n\n\t\t\t// We don't allow anonymous functions via fn\n\t\t\t// function: ($) =>\n\t\t\t// \tprec(\n\t\t\t// \t\t'literal',\n\t\t\t// \t\tseq(\n\t\t\t// \t\t\toptional('async'),\n\t\t\t// \t\t\t'function',\n\t\t\t// \t\t\tfield('name', optional($.identifier)),\n\t\t\t// \t\t\t$._call_signature,\n\t\t\t// \t\t\tfield('body', $.statement_block)\n\t\t\t// \t\t)\n\t\t\t// \t),\n\n\t\t\tfunction_declaration: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional('async'),\n\t\t\t\t\t\t'fn',\n\t\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t\t$._call_signature,\n\t\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tgenerator_function: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'literal',\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional('async'),\n\t\t\t\t\t\t'fn *',\n\t\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\t\t$._call_signature,\n\t\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tgenerator_function_declaration: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional('async'),\n\t\t\t\t\t\t'fn *',\n\t\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t\t$._call_signature,\n\t\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tarrow_function: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tfield('parameter', choice(alias($._reserved_identifier, $.identifier), $.identifier)),\n\t\t\t\t\t\t$._call_signature\n\t\t\t\t\t),\n\t\t\t\t\t'=>',\n\t\t\t\t\tfield('body', choice($.expression, $.statement_block))\n\t\t\t\t),\n\n\t\t\t// Override\n\t\t\t_call_signature: ($) => field('parameters', $.formal_parameters),\n\t\t\t_formal_parameter: ($) => choice($.pattern, $.assignment_pattern),\n\n\t\t\toptional_chain: ($) => '?.',\n\n\t\t\tcall_expression: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\tprec(\n\t\t\t\t\t\t'call',\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('function', $.expression),\n\t\t\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string))\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tprec(\n\t\t\t\t\t\t'member',\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('function', $.primary_expression),\n\t\t\t\t\t\t\tfield('optional_chain', $.optional_chain),\n\t\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tnew_expression: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'new',\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'new',\n\t\t\t\t\t\tfield('constructor', choice($.primary_expression, $.new_expression)),\n\t\t\t\t\t\tfield('arguments', optional(prec.dynamic(1, $.arguments)))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tawait_expression: ($) => prec('unary_void', seq('await', $.expression)),\n\n\t\t\tmember_expression: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\t\tchoice('.', '::', field('optional_chain', $.optional_chain)),\n\t\t\t\t\t\tfield(\n\t\t\t\t\t\t\t'property',\n\t\t\t\t\t\t\tchoice($.private_property_identifier, alias($.identifier, $.property_identifier))\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tsubscript_expression: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\t\toptional(field('optional_chain', $.optional_chain)),\n\t\t\t\t\t\t'[',\n\t\t\t\t\t\tfield('index', $._expressions),\n\t\t\t\t\t\t']'\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t_lhs_expression: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.member_expression,\n\t\t\t\t\t$.subscript_expression,\n\t\t\t\t\t$._identifier,\n\t\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t\t$._destructuring_pattern\n\t\t\t\t),\n\n\t\t\tassignment_expression: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'assign',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('left', choice($.parenthesized_expression, $._lhs_expression)),\n\t\t\t\t\t\t'=',\n\t\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t_augmented_assignment_lhs: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.member_expression,\n\t\t\t\t\t$.subscript_expression,\n\t\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t\t$.identifier,\n\t\t\t\t\t$.parenthesized_expression\n\t\t\t\t),\n\n\t\t\taugmented_assignment_expression: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'assign',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('left', $._augmented_assignment_lhs),\n\t\t\t\t\t\tfield(\n\t\t\t\t\t\t\t'operator',\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t'+=',\n\t\t\t\t\t\t\t\t'-=',\n\t\t\t\t\t\t\t\t'*=',\n\t\t\t\t\t\t\t\t'/=',\n\t\t\t\t\t\t\t\t'%=',\n\t\t\t\t\t\t\t\t'^=',\n\t\t\t\t\t\t\t\t'&=',\n\t\t\t\t\t\t\t\t'|=',\n\t\t\t\t\t\t\t\t'>>=',\n\t\t\t\t\t\t\t\t'>>>=',\n\t\t\t\t\t\t\t\t'<<=',\n\t\t\t\t\t\t\t\t'**=',\n\t\t\t\t\t\t\t\t'&&=',\n\t\t\t\t\t\t\t\t'||=',\n\t\t\t\t\t\t\t\t'??='\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t_initializer: ($) => seq('=', field('value', $.expression)),\n\n\t\t\t_destructuring_pattern: ($) => choice($.object_pattern, $.array_pattern),\n\n\t\t\tspread_element: ($) => seq('...', $.expression),\n\n\t\t\tternary_expression: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'ternary',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('condition', $.expression),\n\t\t\t\t\t\talias($._ternary_qmark, '?'),\n\t\t\t\t\t\tfield('consequence', $.expression),\n\t\t\t\t\t\t':',\n\t\t\t\t\t\tfield('alternative', $.expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tbinary_expression: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t...[\n\t\t\t\t\t\t['&&', 'logical_and'],\n\t\t\t\t\t\t['||', 'logical_or'],\n\t\t\t\t\t\t['>>', 'binary_shift'],\n\t\t\t\t\t\t['>>>', 'binary_shift'],\n\t\t\t\t\t\t['<<', 'binary_shift'],\n\t\t\t\t\t\t['&', 'bitwise_and'],\n\t\t\t\t\t\t['^', 'bitwise_xor'],\n\t\t\t\t\t\t['|', 'bitwise_or'],\n\t\t\t\t\t\t['+', 'binary_plus'],\n\t\t\t\t\t\t['-', 'binary_plus'],\n\t\t\t\t\t\t['*', 'binary_times'],\n\t\t\t\t\t\t['/', 'binary_times'],\n\t\t\t\t\t\t['%', 'binary_times'],\n\t\t\t\t\t\t['**', 'binary_exp', 'right'],\n\t\t\t\t\t\t['<', 'binary_relation'],\n\t\t\t\t\t\t['<=', 'binary_relation'],\n\t\t\t\t\t\t['==', 'binary_equality'],\n\t\t\t\t\t\t['===', 'binary_equality'],\n\t\t\t\t\t\t['!=', 'binary_equality'],\n\t\t\t\t\t\t['!==', 'binary_equality'],\n\t\t\t\t\t\t['>=', 'binary_relation'],\n\t\t\t\t\t\t['>', 'binary_relation'],\n\t\t\t\t\t\t['??', 'ternary'],\n\t\t\t\t\t\t['instanceof', 'binary_relation'],\n\t\t\t\t\t\t['in', 'binary_relation']\n\t\t\t\t\t].map(([operator, precedence, associativity]) =>\n\t\t\t\t\t\t(associativity === 'right' ? prec.right : prec.left)(\n\t\t\t\t\t\t\tprecedence,\n\t\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t\tfield('left', $.expression),\n\t\t\t\t\t\t\t\tfield('operator', operator),\n\t\t\t\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tunary_expression: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\t'unary_void',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('operator', choice('!', '~', '-', '+', 'typeof', 'void', 'delete')),\n\t\t\t\t\t\tfield('argument', $.expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tupdate_expression: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq(field('argument', $.expression), field('operator', choice('++', '--'))),\n\t\t\t\t\t\tseq(field('operator', choice('++', '--')), field('argument', $.expression))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tsequence_expression: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', $.expression),\n\t\t\t\t\t',',\n\t\t\t\t\tfield('right', choice($.sequence_expression, $.expression))\n\t\t\t\t),\n\n\t\t\t//\n\t\t\t// Primitives\n\t\t\t//\n\n\t\t\t// Here we tolerate unescaped newlines in double-quoted and\n\t\t\t// single-quoted string literals.\n\t\t\t// This is legal in typescript as jsx/tsx attribute values (as of\n\t\t\t// 2020), and perhaps will be valid in javascript as well in the\n\t\t\t// future.\n\t\t\t//\n\t\t\tstring: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'\"',\n\t\t\t\t\t\trepeat(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\talias($.unescaped_double_string_fragment, $.string_fragment),\n\t\t\t\t\t\t\t\t$.escape_sequence\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'\"'\n\t\t\t\t\t),\n\t\t\t\t\tseq(\n\t\t\t\t\t\t\"'\",\n\t\t\t\t\t\trepeat(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\talias($.unescaped_single_string_fragment, $.string_fragment),\n\t\t\t\t\t\t\t\t$.escape_sequence\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"'\"\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t// Workaround to https://github.com/tree-sitter/tree-sitter/issues/1156\n\t\t\t// We give names to the token() constructs containing a regexp\n\t\t\t// so as to obtain a node in the CST.\n\t\t\t//\n\t\t\tunescaped_double_string_fragment: ($) => token.immediate(prec(1, /[^\"\\\\]+/)),\n\n\t\t\t// same here\n\t\t\tunescaped_single_string_fragment: ($) => token.immediate(prec(1, /[^'\\\\]+/)),\n\n\t\t\tescape_sequence: ($) =>\n\t\t\t\ttoken.immediate(\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'\\\\',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t/[^xu0-7]/,\n\t\t\t\t\t\t\t/[0-7]{1,3}/,\n\t\t\t\t\t\t\t/x[0-9a-fA-F]{2}/,\n\t\t\t\t\t\t\t/u[0-9a-fA-F]{4}/,\n\t\t\t\t\t\t\t/u{[0-9a-fA-F]+}/\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t// http://stackoverflow.com/questions/13014947/regex-to-match-a-c-style-multiline-comment/36328890#36328890\n\t\t\tcomment: ($) => token(choice(seq('//', /.*/), seq('/*', /[^*]*\\*+([^/*][^*]*\\*+)*/, '/'))),\n\n\t\t\ttemplate_string: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'`',\n\t\t\t\t\trepeat(choice($._template_chars, $.escape_sequence, $.template_substitution)),\n\t\t\t\t\t'`'\n\t\t\t\t),\n\n\t\t\ttemplate_substitution: ($) => seq('${', $._expressions, '}'),\n\n\t\t\tregex: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'/',\n\t\t\t\t\tfield('pattern', $.regex_pattern),\n\t\t\t\t\ttoken.immediate('/'),\n\t\t\t\t\toptional(field('flags', $.regex_flags))\n\t\t\t\t),\n\n\t\t\tregex_pattern: ($) =>\n\t\t\t\ttoken.immediate(\n\t\t\t\t\tprec(\n\t\t\t\t\t\t-1,\n\t\t\t\t\t\trepeat1(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t\t\t'[',\n\t\t\t\t\t\t\t\t\trepeat(\n\t\t\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t\t\tseq('\\\\', /./), // escaped character\n\t\t\t\t\t\t\t\t\t\t\t/[^\\]\\n\\\\]/ // any character besides ']' or '\\n'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t']'\n\t\t\t\t\t\t\t\t), // square-bracket-delimited character class\n\t\t\t\t\t\t\t\tseq('\\\\', /./), // escaped character\n\t\t\t\t\t\t\t\t/[^/\\\\\\[\\n]/ // any character besides '[', '\\', '/', '\\n'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tregex_flags: ($) => token.immediate(/[a-z]+/),\n\n\t\t\tnumber: ($) => {\n\t\t\t\tconst hex_literal = seq(choice('0x', '0X'), /[\\da-fA-F](_?[\\da-fA-F])*/);\n\n\t\t\t\tconst decimal_digits = /\\d(_?\\d)*/;\n\t\t\t\tconst signed_integer = seq(optional(choice('-', '+')), decimal_digits);\n\t\t\t\tconst exponent_part = seq(choice('e', 'E'), signed_integer);\n\n\t\t\t\tconst binary_literal = seq(choice('0b', '0B'), /[0-1](_?[0-1])*/);\n\n\t\t\t\tconst octal_literal = seq(choice('0o', '0O'), /[0-7](_?[0-7])*/);\n\n\t\t\t\tconst bigint_literal = seq(\n\t\t\t\t\tchoice(hex_literal, binary_literal, octal_literal, decimal_digits),\n\t\t\t\t\t'n'\n\t\t\t\t);\n\t\t\t\tconst uint_literal = seq(\n\t\t\t\t\tchoice(hex_literal, binary_literal, octal_literal, decimal_digits),\n\t\t\t\t\t'u'\n\t\t\t\t);\n\n\t\t\t\tconst decimal_integer_literal = choice(\n\t\t\t\t\t'0',\n\t\t\t\t\tseq(optional('0'), /[1-9]/, optional(seq(optional('_'), decimal_digits)))\n\t\t\t\t);\n\n\t\t\t\tconst swizzle_vals = choice('x', 'y', 'z', 'w', 'r', 'g', 'b', 'a');\n\n\t\t\t\tconst decimal_literal = choice(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tdecimal_integer_literal,\n\t\t\t\t\t\t'.',\n\t\t\t\t\t\toptional(decimal_digits),\n\t\t\t\t\t\toptional(exponent_part),\n\t\t\t\t\t\toptional(repeat1(swizzle_vals))\n\t\t\t\t\t),\n\t\t\t\t\tseq('.', decimal_digits, optional(exponent_part)),\n\t\t\t\t\tseq(decimal_integer_literal, exponent_part),\n\t\t\t\t\tseq(decimal_digits)\n\t\t\t\t);\n\n\t\t\t\treturn token(\n\t\t\t\t\tchoice(hex_literal, decimal_literal, binary_literal, octal_literal, uint_literal)\n\t\t\t\t);\n\t\t\t},\n\n\t\t\t// 'undefined' is syntactically a regular identifier in JavaScript.\n\t\t\t// However, its main use is as the read-only global variable whose\n\t\t\t// value is [undefined], for which there's no literal representation\n\t\t\t// unlike 'null'. We gave it its own rule so it's easy to\n\t\t\t// highlight in text editors and other applications.\n\t\t\t_identifier: ($) => choice($.undefined, $.identifier),\n\n\t\t\tidentifier: ($) => {\n\t\t\t\tconst alpha =\n\t\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\t\tconst alphanumeric =\n\t\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\t\treturn token(seq(alpha, repeat(alphanumeric)));\n\t\t\t},\n\n\t\t\tprivate_property_identifier: ($) => {\n\t\t\t\tconst alpha =\n\t\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\t\tconst alphanumeric =\n\t\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\t\treturn token(seq('#', alpha, repeat(alphanumeric)));\n\t\t\t},\n\n\t\t\tmeta_property: ($) => seq('new', '.', 'target'),\n\n\t\t\tthis: ($) => 'this',\n\t\t\tsuper: ($) => 'super',\n\t\t\ttrue: ($) => 'true',\n\t\t\tfalse: ($) => 'false',\n\t\t\tnull: ($) => 'null',\n\t\t\tundefined: ($) => 'undefined',\n\n\t\t\t//\n\t\t\t// Expression components\n\t\t\t//\n\n\t\t\targuments: ($) => seq('(', commaSep(optional(choice($.expression, $.spread_element))), ')'),\n\n\t\t\tdecorator: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'@',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($.decorator_member_expression, $.member_expression),\n\t\t\t\t\t\talias($.decorator_call_expression, $.call_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tdecorator_member_expression: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield(\n\t\t\t\t\t\t\t'object',\n\t\t\t\t\t\t\tchoice($.identifier, alias($.decorator_member_expression, $.member_expression))\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'.',\n\t\t\t\t\t\tfield('property', alias($.identifier, $.property_identifier))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tdecorator_call_expression: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'call',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield(\n\t\t\t\t\t\t\t'function',\n\t\t\t\t\t\t\tchoice($.identifier, alias($.decorator_member_expression, $.member_expression))\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tclass_body: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\trepeat(\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t// seq(field('member', $.method_definition), optional(';')),\n\t\t\t\t\t\t\tseq(field('member', $.field_definition), $._semicolon),\n\t\t\t\t\t\t\tfield('member', $.class_static_block),\n\t\t\t\t\t\t\tfield('template', $.glimmer_template)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t),\n\n\t\t\tfield_definition: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\toptional('static'),\n\t\t\t\t\tfield('property', $._property_name),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\n\t\t\tformal_parameters: ($) =>\n\t\t\t\tseq('(', optional(seq(commaSep1($._formal_parameter), optional(','))), ')'),\n\n\t\t\tclass_static_block: ($) => seq('static', field('body', $.statement_block)),\n\n\t\t\t// This negative dynamic precedence ensures that during error recovery,\n\t\t\t// unfinished constructs are generally treated as literal expressions,\n\t\t\t// not patterns.\n\t\t\tpattern: ($) => prec.dynamic(-1, choice($._lhs_expression, $.rest_pattern)),\n\n\t\t\trest_pattern: ($) => prec.right(seq('...', $._lhs_expression)),\n\n\t\t\tmethod_definition: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t// repeat(field('decorator', $.decorator)),\n\t\t\t\t\toptional('pub'),\n\t\t\t\t\toptional('static'),\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'fn',\n\t\t\t\t\t// optional(choice('get', 'set', '*')),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t),\n\n\t\t\tpair: ($) => seq(field('key', $._property_name), ':', field('value', $.expression)),\n\n\t\t\tpair_pattern: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('key', $._property_name),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('value', choice($.pattern, $.assignment_pattern))\n\t\t\t\t),\n\n\t\t\t_property_name: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.property_identifier),\n\t\t\t\t\t$.private_property_identifier,\n\t\t\t\t\t$.string,\n\t\t\t\t\t$.number,\n\t\t\t\t\t$.computed_property_name\n\t\t\t\t),\n\n\t\t\tcomputed_property_name: ($) => seq('[', $.expression, ']'),\n\n\t\t\t_reserved_identifier: ($) => choice('fn', 'get', 'set', 'async', 'static', 'export', 'pub'),\n\n\t\t\t_semicolon: ($) => choice($._automatic_semicolon, ';')\n\t\t}\n\t}),\n\t{\n\t\tname: 'shadeup',\n\n\t\texternals: ($, previous) =>\n\t\t\tprevious.concat([\n\t\t\t\t// Allow the external scanner to tell whether it is parsing an expression\n\t\t\t\t// or a type by checking the validity of this binary operator. This is\n\t\t\t\t// needed because the rules for automatic semicolon insertion are\n\t\t\t\t// slightly different when parsing types. Any binary-only operator would\n\t\t\t\t// work.\n\t\t\t\t'||',\n\t\t\t\t$._function_signature_automatic_semicolon\n\t\t\t]),\n\n\t\tsupertypes: ($, previous) => previous.concat([$._primary_type]),\n\n\t\tprecedences: ($, previous) =>\n\t\t\tprevious.concat([\n\t\t\t\t['call', 'unary', 'binary', $.await_expression, $.arrow_function],\n\t\t\t\t[\n\t\t\t\t\t$.intersection_type,\n\t\t\t\t\t$.union_type,\n\t\t\t\t\t$.conditional_type,\n\t\t\t\t\t$.function_type,\n\t\t\t\t\t'binary',\n\t\t\t\t\t$.type_predicate,\n\t\t\t\t\t$.readonly_type\n\t\t\t\t],\n\t\t\t\t[$.mapped_type_clause, $.primary_expression],\n\t\t\t\t[$.accessibility_modifier, $.primary_expression],\n\t\t\t\t['unary_void', $.expression],\n\t\t\t\t[$.extends_clause, $.primary_expression],\n\t\t\t\t['unary', 'assign'],\n\t\t\t\t['declaration', $.expression],\n\t\t\t\t[$.predefined_type, $.unary_expression],\n\t\t\t\t[$._type, $.flow_maybe_type],\n\t\t\t\t[$.tuple_type, $.array_type, $.pattern, $._type],\n\t\t\t\t[$.readonly_type, $.pattern],\n\t\t\t\t[$.readonly_type, $.primary_expression],\n\t\t\t\t[$.type_query, $.subscript_expression, $.expression],\n\t\t\t\t[$.type_query, $._type_query_subscript_expression],\n\t\t\t\t[\n\t\t\t\t\t$.nested_type_identifier,\n\t\t\t\t\t$.generic_type,\n\t\t\t\t\t$._primary_type,\n\t\t\t\t\t$.lookup_type,\n\t\t\t\t\t$.index_type_query,\n\t\t\t\t\t$._type\n\t\t\t\t],\n\t\t\t\t[$.as_expression, $.satisfies_expression, $._primary_type],\n\t\t\t\t[$._type_query_member_expression, $.member_expression],\n\t\t\t\t[$._type_query_member_expression, $.primary_expression],\n\t\t\t\t[$._type_query_subscript_expression, $.subscript_expression],\n\t\t\t\t[$._type_query_subscript_expression, $.primary_expression],\n\t\t\t\t[$._type_query_call_expression, $.primary_expression],\n\t\t\t\t[$.type_query, $.primary_expression],\n\t\t\t\t[$.override_modifier, $.primary_expression],\n\t\t\t\t[$.decorator_call_expression, $.decorator],\n\t\t\t\t[$.literal_type, $.pattern],\n\t\t\t\t[$.predefined_type, $.pattern]\n\t\t\t]),\n\n\t\tconflicts: ($, previous) =>\n\t\t\tprevious.concat([\n\t\t\t\t[$.labeled_statement, $.workgroup],\n\t\t\t\t[$.call_expression, $.binary_expression],\n\t\t\t\t[$.call_expression, $.binary_expression, $.unary_expression],\n\t\t\t\t[$.call_expression, $.binary_expression, $.update_expression],\n\t\t\t\t[$.call_expression, $.binary_expression, $.type_assertion],\n\t\t\t\t[$.call_expression, $.binary_expression, $.await_expression],\n\n\t\t\t\t// This appears to be necessary to parse a parenthesized class expression\n\t\t\t\t[$.class],\n\n\t\t\t\t[$.nested_identifier, $.nested_type_identifier, $.primary_expression],\n\t\t\t\t[$.nested_identifier, $.nested_type_identifier],\n\t\t\t\t[$.nested_identifier, $.member_expression],\n\n\t\t\t\t[$.primary_expression, $.array_type],\n\t\t\t\t[$.primary_expression, $.array_type, $.tuple_type],\n\n\t\t\t\t[$._call_signature, $.function_type],\n\t\t\t\t[$._call_signature, $.constructor_type],\n\n\t\t\t\t[$._primary_type, $.type_parameter],\n\t\t\t\t[$.jsx_opening_element, $.type_parameter],\n\t\t\t\t[$.jsx_opening_element, $.type_parameter, $._primary_type],\n\t\t\t\t[$.jsx_opening_element, $.generic_type],\n\t\t\t\t[$.jsx_namespace_name, $._primary_type],\n\t\t\t\t[$.export_statement, $.accessibility_modifier_member],\n\t\t\t\t[$.export_statement, $.accessibility_modifier],\n\t\t\t\t[$.accessibility_modifier_member, $.accessibility_modifier],\n\n\t\t\t\t[$.parenthesized_expression_vector, $.parenthesized_expression],\n\n\t\t\t\t[$.primary_expression, $._parameter_name],\n\t\t\t\t[$.primary_expression, $._parameter_name, $.predefined_type],\n\t\t\t\t[$.primary_expression, $._parameter_name, $._primary_type],\n\t\t\t\t[$.primary_expression, $._parameter_name, $.array_type, $.tuple_type],\n\t\t\t\t[$.primary_expression, $.literal_type],\n\t\t\t\t[$.primary_expression, $.literal_type, $.pattern],\n\t\t\t\t[$.primary_expression, $.literal_type, $.rest_pattern],\n\t\t\t\t[$.primary_expression, $.predefined_type, $.rest_pattern],\n\t\t\t\t[$.primary_expression, $._primary_type],\n\t\t\t\t[$.primary_expression, $.generic_type],\n\t\t\t\t[$.primary_expression, $.predefined_type],\n\t\t\t\t[$.primary_expression, $.pattern, $._primary_type],\n\t\t\t\t[$.primary_expression, $.pattern, $.predefined_type],\n\t\t\t\t[$._parameter_name, $.predefined_type],\n\t\t\t\t[$._parameter_name, $._primary_type],\n\t\t\t\t[$._parameter_name, $.assignment_expression],\n\t\t\t\t[$._parameter_name, $.pattern],\n\t\t\t\t[$.pattern, $._primary_type],\n\t\t\t\t[$.pattern, $.predefined_type],\n\n\t\t\t\t[$.optional_tuple_parameter, $._primary_type],\n\t\t\t\t[$.optional_tuple_parameter, $._primary_type, $.primary_expression],\n\t\t\t\t[$.rest_pattern, $._primary_type, $.primary_expression],\n\t\t\t\t[$.rest_pattern, $._primary_type],\n\n\t\t\t\t[$.object, $.object_type],\n\t\t\t\t[$.object, $._property_name],\n\t\t\t\t[$.object, $.object_pattern, $.object_type],\n\t\t\t\t[$.object, $.object_pattern, $._property_name],\n\t\t\t\t[$.object_pattern, $.object_type],\n\t\t\t\t[$.object_pattern, $.object_type],\n\t\t\t\t[$.object_pattern, $._property_name],\n\t\t\t\t[$.function_declaration, $._property_name, $.function_signature],\n\n\t\t\t\t[$.array, $.tuple_type],\n\t\t\t\t[$.array, $.array_pattern, $.tuple_type],\n\t\t\t\t[$.array_pattern, $.tuple_type],\n\n\t\t\t\t[$.template_literal_type, $.template_string]\n\t\t\t]),\n\n\t\tinline: ($, previous) =>\n\t\t\tprevious\n\t\t\t\t.filter((rule) => !['_formal_parameter', '_call_signature'].includes(rule.name))\n\t\t\t\t.concat([$._type_identifier, $._enum_member, $._jsx_start_opening_element]),\n\n\t\trules: {\n\t\t\tpublic_field_definition: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional('declare'),\n\t\t\t\t\toptional($.accessibility_modifier_member),\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq(optional('static'), optional($.override_modifier), optional('readonly')),\n\t\t\t\t\t\tseq(optional('abstract'), optional('readonly')),\n\t\t\t\t\t\tseq(optional('readonly'), optional('abstract'))\n\t\t\t\t\t),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional(choice('?', '!')),\n\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\n\t\t\t// override original catch_clause, add optional type annotation\n\t\t\tcatch_clause: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'catch',\n\t\t\t\t\toptional(\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t'(',\n\t\t\t\t\t\t\tfield('parameter', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\t\t// only types that resolve to 'any' or 'unknown' are supported\n\t\t\t\t\t\t\t\t// by the language but it's simpler to accept any type here.\n\t\t\t\t\t\t\t\tfield('type', $.type_annotation)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t),\n\n\t\t\tcall_expression: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\tprec(\n\t\t\t\t\t\t'call',\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('function', $.expression),\n\t\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string))\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tprec(\n\t\t\t\t\t\t'member',\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('function', $.primary_expression),\n\t\t\t\t\t\t\t'?.',\n\t\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tnew_expression: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\t'new',\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'new',\n\t\t\t\t\t\tfield('constructor', $.primary_expression),\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\tfield('arguments', optional($.arguments))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t_augmented_assignment_lhs: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\t\t_lhs_expression: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\t\tprimary_expression: ($, previous) =>\n\t\t\t\tchoice(previous, $.non_null_expression, $.async_block, $.shader, $.workgroup),\n\n\t\t\t// If the dialect is regular typescript, we exclude JSX expressions and\n\t\t\t// include type assertions. If the dialect is TSX, we do the opposite.\n\t\t\texpression: ($, previous) => {\n\t\t\t\tconst choices = [$.as_expression, $.satisfies_expression, $.internal_module];\n\n\t\t\t\tchoices.push($.type_assertion);\n\t\t\t\tchoices.push(\n\t\t\t\t\t...previous.members.filter(\n\t\t\t\t\t\t(member) => member.name !== '_jsx_element' && member.name !== 'jsx_fragment'\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\treturn choice(...choices);\n\t\t\t},\n\n\t\t\t_jsx_start_opening_element: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'<',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tfield('name', choice($._jsx_identifier, $.jsx_namespace_name)),\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('name', choice($.identifier, $.nested_identifier)),\n\t\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments))\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\trepeat(field('attribute', $._jsx_attribute))\n\t\t\t\t),\n\n\t\t\t// This rule is only referenced by expression when the dialect is 'tsx'\n\t\t\tjsx_opening_element: ($) => prec.dynamic(-1, seq($._jsx_start_opening_element, '>')),\n\n\t\t\t// tsx only. See jsx_opening_element.\n\t\t\tjsx_self_closing_element: ($) =>\n\t\t\t\tprec.dynamic(-1, seq($._jsx_start_opening_element, '/', '>')),\n\n\t\t\texport_specifier: ($, previous) => seq(optional(choice('type', 'typeof')), previous),\n\n\t\t\timport_specifier: ($, previous) => seq(optional(choice('type', 'typeof')), previous),\n\n\t\t\timport_statement: ($) => seq('import', seq($.import_clause, $._from_clause), $._semicolon),\n\n\t\t\texport_statement: ($, previous) =>\n\t\t\t\tchoice(\n\t\t\t\t\tprevious,\n\t\t\t\t\tseq('export', $.export_clause, $._semicolon),\n\t\t\t\t\tseq('export', 'type', $.export_clause, optional($._from_clause), $._semicolon),\n\t\t\t\t\tseq('export', '=', $.expression, $._semicolon),\n\t\t\t\t\tseq('export', 'as', 'namespace', $.identifier, $._semicolon)\n\t\t\t\t),\n\n\t\t\tnon_null_expression: ($) => prec.left('unary', seq($.expression, '!')),\n\n\t\t\tvariable_declarator: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\t\toptional($._initializer)\n\t\t\t\t\t),\n\t\t\t\t\tprec(\n\t\t\t\t\t\t'declaration',\n\t\t\t\t\t\tseq(field('name', $.identifier), '!', field('type', $.type_annotation))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tmethod_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional($.accessibility_modifier_member),\n\t\t\t\t\t// optional('static'),\n\t\t\t\t\toptional($.override_modifier),\n\t\t\t\t\t// optional('readonly'),\n\t\t\t\t\t// optional('async'),\n\t\t\t\t\t'fn',\n\t\t\t\t\t// optional(choice('get', 'set', '*')),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional('?'),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\n\t\t\tabstract_method_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t\t'abstract',\n\t\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional('?'),\n\t\t\t\t\t$._call_signature\n\t\t\t\t),\n\n\t\t\tparenthesized_expression: ($, previous) =>\n\t\t\t\tseq(\n\t\t\t\t\t'(',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq($.expression, field('type', optional($.type_annotation))),\n\t\t\t\t\t\t$.sequence_expression\n\t\t\t\t\t),\n\t\t\t\t\t')'\n\t\t\t\t),\n\n\t\t\t_formal_parameter: ($) => choice($.required_parameter, $.optional_parameter),\n\n\t\t\tfunction_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'fn',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tchoice($._semicolon, $._function_signature_automatic_semicolon)\n\t\t\t\t),\n\n\t\t\tclass_body: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\trepeat(\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.decorator,\n\t\t\t\t\t\t\tseq($.method_definition, optional($._semicolon)),\n\t\t\t\t\t\t\t// As it happens for functions, the semicolon insertion should not\n\t\t\t\t\t\t\t// happen if a block follows the closing paren, because then it's a\n\t\t\t\t\t\t\t// *definition*, not a declaration. Example:\n\t\t\t\t\t\t\t//     public foo()\n\t\t\t\t\t\t\t//     { <--- this brace made the method signature become a definition\n\t\t\t\t\t\t\t//     }\n\t\t\t\t\t\t\t// The same rule applies for functions and that's why we use\n\t\t\t\t\t\t\t// \"_function_signature_automatic_semicolon\".\n\t\t\t\t\t\t\tseq($.method_signature, choice($._function_signature_automatic_semicolon, ',')),\n\t\t\t\t\t\t\t$.class_static_block,\n\t\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t$.abstract_method_signature,\n\t\t\t\t\t\t\t\t\t$.index_signature,\n\t\t\t\t\t\t\t\t\t$.method_signature,\n\t\t\t\t\t\t\t\t\t$.public_field_definition\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tchoice($._semicolon, ',')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t),\n\n\t\t\tmethod_definition: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional($.accessibility_modifier_member),\n\t\t\t\t\t\toptional('static'),\n\t\t\t\t\t\toptional($.override_modifier),\n\t\t\t\t\t\t'fn',\n\t\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\t\toptional('?'),\n\t\t\t\t\t\t$._call_signature,\n\t\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tdeclaration: ($, previous) =>\n\t\t\t\tchoice(\n\t\t\t\t\tprevious,\n\t\t\t\t\t$.function_signature,\n\t\t\t\t\t// $.abstract_class_declaration,\n\t\t\t\t\t$.module,\n\t\t\t\t\tprec('declaration', $.internal_module),\n\t\t\t\t\t$.type_alias_declaration,\n\t\t\t\t\t$.enum_declaration,\n\t\t\t\t\t$.interface_declaration,\n\t\t\t\t\t$.impl_declaration,\n\t\t\t\t\t$.import_alias,\n\t\t\t\t\t$.ambient_declaration\n\t\t\t\t),\n\n\t\t\ttype_assertion: ($) => prec.left('unary', seq($.type_arguments, $.expression)),\n\n\t\t\tas_expression: ($) => prec.left('binary', seq($.expression, 'as', $._type)),\n\n\t\t\tsatisfies_expression: ($) => prec.left('binary', seq($.expression, 'satisfies', $._type)),\n\n\t\t\tclass_heritage: ($) =>\n\t\t\t\tchoice(seq($.extends_clause, optional($.implements_clause)), $.implements_clause),\n\n\t\t\timport_require_clause: ($) =>\n\t\t\t\tseq($.identifier, '=', 'require', '(', field('source', $.string), ')'),\n\n\t\t\textends_clause: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'extends',\n\t\t\t\t\tcommaSep1(\n\t\t\t\t\t\tseq(field('value', $.expression), field('type_arguments', optional($.type_arguments)))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\timplements_clause: ($) => seq('implements', commaSep1($._type)),\n\n\t\t\tambient_declaration: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'declare',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.declaration,\n\t\t\t\t\t\tseq('global', $.statement_block),\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t'module',\n\t\t\t\t\t\t\t'.',\n\t\t\t\t\t\t\talias($.identifier, $.property_identifier),\n\t\t\t\t\t\t\t':',\n\t\t\t\t\t\t\t$._type,\n\t\t\t\t\t\t\t$._semicolon\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tclass: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'literal',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tfield('name', optional($._type_identifier)),\n\t\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tabstract_class_declaration: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'abstract',\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tclass_declaration: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tstruct_declaration: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\t'declaration',\n\t\t\t\t\tseq(\n\t\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t\t'struct',\n\t\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t\t// optional($.class_heritage),\n\t\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tmodule: ($) => seq('module', $._module),\n\n\t\t\tinternal_module: ($) => seq('namespace', $._module),\n\n\t\t\t_module: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($.string, $.identifier, $.nested_identifier)),\n\t\t\t\t\t\t// On .d.ts files \"declare module foo\" desugars to \"declare module foo {}\",\n\t\t\t\t\t\t// hence why it is optional here\n\t\t\t\t\t\tfield('body', optional($.statement_block))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\timport_alias: ($) =>\n\t\t\t\tseq('import', $.identifier, '=', choice($.identifier, $.nested_identifier), $._semicolon),\n\n\t\t\tnested_type_identifier: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('module', choice($.identifier, $.nested_identifier)),\n\t\t\t\t\t\t'.',\n\t\t\t\t\t\tfield('name', $._type_identifier)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tinterface_declaration: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'trait',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.extends_type_clause),\n\t\t\t\t\tfield('body', $.object_method_signature_type)\n\t\t\t\t),\n\n\t\t\timpl_for_clause: ($) =>\n\t\t\t\tseq(choice($._type_identifier, $.nested_type_identifier, $.generic_type), 'for'),\n\n\t\t\timpl_declaration: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'impl',\n\t\t\t\t\tfield('for', optional($.impl_for_clause)),\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('body', $.object_method_type)\n\t\t\t\t),\n\n\t\t\textends_type_clause: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'extends',\n\t\t\t\t\tcommaSep1(\n\t\t\t\t\t\tfield('type', choice($._type_identifier, $.nested_type_identifier, $.generic_type))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tenum_declaration: ($) =>\n\t\t\t\tseq(optional('const'), 'enum', field('name', $.identifier), field('body', $.enum_body)),\n\n\t\t\tenum_body: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\toptional(\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tsepBy1(',', choice(field('name', $._property_name), $.enum_assignment)),\n\t\t\t\t\t\t\toptional(',')\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t),\n\n\t\t\tenum_assignment: ($) => seq(field('name', $._property_name), $._initializer),\n\n\t\t\ttype_alias_declaration: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'type',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t'=',\n\t\t\t\t\tfield('value', $._type),\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\n\t\t\taccessibility_modifier: ($) => choice('pub'),\n\t\t\taccessibility_modifier_member: ($) => choice('pub'),\n\n\t\t\toverride_modifier: (_) => 'override',\n\n\t\t\tshader: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'literal',\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'shader',\n\t\t\t\t\t\toptional(field('type_arguments', $.type_arguments)),\n\t\t\t\t\t\toptional(field('compute_size', $.compute_size)),\n\t\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tasync_block: ($) => prec('literal', seq('async', field('body', $.statement_block))),\n\n\t\t\tworkgroup_member: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional(choice('?', '!')),\n\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\n\t\t\tworkgroup: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t'workgroup',\n\t\t\t\t\tseq('{', repeat(choice(seq(field('member', $.workgroup_member), $._semicolon))), '}')\n\t\t\t\t),\n\n\t\t\tcompute_size: ($) =>\n\t\t\t\tseq('(', field('x', $.number), ',', field('y', $.number), ',', field('z', $.number), ')'),\n\n\t\t\trequired_parameter: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t$._parameter_name,\n\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\n\t\t\toptional_parameter: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\t$._parameter_name,\n\t\t\t\t\t'?',\n\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\n\t\t\t_parameter_name: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t\toptional($.override_modifier),\n\t\t\t\t\toptional('readonly'),\n\t\t\t\t\tfield('pattern', choice($.pattern, $.this))\n\t\t\t\t),\n\n\t\t\tomitting_type_annotation: ($) => seq('-?:', $._type),\n\t\t\topting_type_annotation: ($) => seq('?:', $._type),\n\t\t\ttype_annotation: ($) => seq(':', $._type),\n\t\t\ttype_annotation_arrow: ($) => seq('->', $._type),\n\n\t\t\tasserts: ($) => seq(':', 'asserts', choice($.type_predicate, $.identifier, $.this)),\n\n\t\t\t_type: ($) =>\n\t\t\t\tchoice($._primary_type, $.function_type, $.readonly_type, $.constructor_type, $.infer_type),\n\n\t\t\ttuple_parameter: ($) =>\n\t\t\t\tseq(field('name', choice($.identifier, $.rest_pattern)), field('type', $.type_annotation)),\n\n\t\t\toptional_tuple_parameter: ($) =>\n\t\t\t\tseq(field('name', $.identifier), '?', field('type', $.type_annotation)),\n\n\t\t\toptional_type: ($) => seq($._type, '?'),\n\t\t\trest_type: ($) => seq('...', $._type),\n\n\t\t\t_tuple_type_member: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\talias($.tuple_parameter, $.required_parameter),\n\t\t\t\t\talias($.optional_tuple_parameter, $.optional_parameter),\n\t\t\t\t\t$.optional_type,\n\t\t\t\t\t$.rest_type,\n\t\t\t\t\t$._type\n\t\t\t\t),\n\n\t\t\tconstructor_type: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional('abstract'),\n\t\t\t\t\t\t'new',\n\t\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\t\t'=>',\n\t\t\t\t\t\tfield('type', $._type)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t_primary_type: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t$.parenthesized_type,\n\t\t\t\t\t$.predefined_type,\n\t\t\t\t\t$._type_identifier,\n\t\t\t\t\t$.nested_type_identifier,\n\t\t\t\t\t$.generic_type,\n\t\t\t\t\t$.object_type,\n\t\t\t\t\t$.array_type,\n\t\t\t\t\t$.tuple_type,\n\t\t\t\t\t$.flow_maybe_type,\n\t\t\t\t\t$.type_query,\n\t\t\t\t\t$.index_type_query,\n\t\t\t\t\talias($.this, $.this_type),\n\t\t\t\t\t$.existential_type,\n\t\t\t\t\t$.literal_type,\n\t\t\t\t\t$.lookup_type,\n\t\t\t\t\t$.conditional_type,\n\t\t\t\t\t$.template_literal_type,\n\t\t\t\t\t$.intersection_type,\n\t\t\t\t\t$.union_type\n\t\t\t\t),\n\n\t\t\ttemplate_type: ($) => seq('${', choice($._primary_type, $.infer_type), '}'),\n\n\t\t\ttemplate_literal_type: ($) =>\n\t\t\t\tseq('`', repeat(choice($._template_chars, $.template_type)), '`'),\n\n\t\t\tinfer_type: ($) => seq('infer', $._type_identifier),\n\n\t\t\tconditional_type: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('left', $._type),\n\t\t\t\t\t\t'extends',\n\t\t\t\t\t\tfield('right', $._type),\n\t\t\t\t\t\t'?',\n\t\t\t\t\t\tfield('consequence', $._type),\n\t\t\t\t\t\t':',\n\t\t\t\t\t\tfield('alternative', $._type)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tgeneric_type: ($) =>\n\t\t\t\tprec(\n\t\t\t\t\t'call',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($._type_identifier, $.nested_type_identifier)),\n\t\t\t\t\t\tfield('type_arguments', $.type_arguments)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\ttype_predicate: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'name',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t\t$.this,\n\t\t\t\t\t\t\t// Sometimes tree-sitter contextual lexing is not good enough to know\n\t\t\t\t\t\t\t// that 'object' in ':object is foo' is really an identifier and not\n\t\t\t\t\t\t\t// a predefined_type, so we must explicitely list all possibilities.\n\t\t\t\t\t\t\t// TODO: should we use '_reserved_identifier'? Should all the element in\n\t\t\t\t\t\t\t// 'predefined_type' be added to '_reserved_identifier'?\n\t\t\t\t\t\t\talias($.predefined_type, $.identifier)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'is',\n\t\t\t\t\tfield('type', $._type)\n\t\t\t\t),\n\n\t\t\ttype_predicate_annotation: ($) => seq(seq(':', $.type_predicate)),\n\n\t\t\t// Type query expressions are more restrictive than regular expressions\n\t\t\t_type_query_member_expression: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tchoice('.', '?.', '::'),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'property',\n\t\t\t\t\t\tchoice($.private_property_identifier, alias($.identifier, $.property_identifier))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t_type_query_subscript_expression: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\toptional('?.'),\n\t\t\t\t\t'[',\n\t\t\t\t\tfield('index', choice($.predefined_type, $.string, $.number)),\n\t\t\t\t\t']'\n\t\t\t\t),\n\t\t\t_type_query_call_expression: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'function',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.import,\n\t\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t),\n\t\t\ttype_query: ($) =>\n\t\t\t\tprec.right(\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'typeof',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression),\n\t\t\t\t\t\t\t$.identifier\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tindex_type_query: ($) => seq('keyof', $._primary_type),\n\n\t\t\tlookup_type: ($) => seq($._primary_type, '[', $._type, ']'),\n\n\t\t\tmapped_type_clause: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\t'in',\n\t\t\t\t\tfield('type', $._type),\n\t\t\t\t\toptional(seq('as', field('alias', $._type)))\n\t\t\t\t),\n\n\t\t\tliteral_type: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\talias($._number, $.unary_expression),\n\t\t\t\t\t$.number,\n\t\t\t\t\t$.string,\n\t\t\t\t\t$.true,\n\t\t\t\t\t$.false,\n\t\t\t\t\t$.null,\n\t\t\t\t\t$.undefined\n\t\t\t\t),\n\n\t\t\t_number: ($) =>\n\t\t\t\tprec.left(1, seq(field('operator', choice('-', '+')), field('argument', $.number))),\n\n\t\t\texistential_type: ($) => '*',\n\n\t\t\tflow_maybe_type: ($) => prec.right(seq('?', $._primary_type)),\n\n\t\t\tparenthesized_type: ($) => seq('(', $._type, ')'),\n\n\t\t\tpredefined_type: ($) =>\n\t\t\t\tchoice(\n\t\t\t\t\t'any',\n\t\t\t\t\t'number',\n\t\t\t\t\t'boolean',\n\t\t\t\t\t'string',\n\t\t\t\t\t'symbol',\n\t\t\t\t\t'void',\n\t\t\t\t\t'unknown',\n\t\t\t\t\t'string',\n\t\t\t\t\t'int',\n\t\t\t\t\t'float',\n\t\t\t\t\t'float2',\n\t\t\t\t\t'float3',\n\t\t\t\t\t'float4',\n\t\t\t\t\t'float3x3',\n\t\t\t\t\t'float2x2',\n\t\t\t\t\t'float4x4',\n\t\t\t\t\t'int2',\n\t\t\t\t\t'int3',\n\t\t\t\t\t'int4',\n\t\t\t\t\t'int3x3',\n\t\t\t\t\t'int2x2',\n\t\t\t\t\t'int4x4',\n\t\t\t\t\t// 'buffer',\n\t\t\t\t\t'never',\n\t\t\t\t\t'object'\n\t\t\t\t),\n\n\t\t\ttype_arguments: ($) => seq('<', commaSep1($._type), optional(','), '>'),\n\n\t\t\tobject_type: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tchoice('{', '{|'),\n\t\t\t\t\toptional(\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\toptional(choice(',', ';')),\n\t\t\t\t\t\t\tsepBy1(\n\t\t\t\t\t\t\t\tchoice(',', $._semicolon),\n\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t// $.export_statement,\n\t\t\t\t\t\t\t\t\t$.property_signature,\n\t\t\t\t\t\t\t\t\t$.call_signature,\n\t\t\t\t\t\t\t\t\t$.construct_signature,\n\t\t\t\t\t\t\t\t\t$.index_signature,\n\t\t\t\t\t\t\t\t\t$.method_signature\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptional(choice(',', $._semicolon))\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tchoice('}', '|}')\n\t\t\t\t),\n\n\t\t\tobject_field_type: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tchoice('{', '{|'),\n\t\t\t\t\toptional(\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\toptional(choice(',', ';')),\n\t\t\t\t\t\t\tsepBy1(\n\t\t\t\t\t\t\t\tchoice(',', $._semicolon),\n\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t// $.export_statement,\n\t\t\t\t\t\t\t\t\t$.property_signature\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptional(choice(',', $._semicolon))\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tchoice('}', '|}')\n\t\t\t\t),\n\n\t\t\tobject_method_type: ($) =>\n\t\t\t\tseq(choice('{', '{|'), repeat($.method_definition), choice('}', '|}')),\n\n\t\t\tobject_method_signature_type: ($) =>\n\t\t\t\tseq(choice('{', '{|'), repeat($.method_signature), choice('}', '|}')),\n\n\t\t\tcall_signature: ($) => $._call_signature,\n\n\t\t\tproperty_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t\toptional('static'),\n\t\t\t\t\toptional($.override_modifier),\n\t\t\t\t\toptional('readonly'),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional('?'),\n\t\t\t\t\tfield('type', optional($.type_annotation))\n\t\t\t\t),\n\n\t\t\t_call_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'return_type',\n\t\t\t\t\t\toptional(choice($.type_annotation_arrow, $.asserts, $.type_predicate_annotation))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\ttype_parameters: ($) => seq('<', commaSep1($.type_parameter), optional(','), '>'),\n\n\t\t\ttype_parameter: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('constraint', optional($.constraint)),\n\t\t\t\t\tfield('value', optional($.default_type))\n\t\t\t\t),\n\n\t\t\tdefault_type: ($) => seq('=', $._type),\n\n\t\t\tconstraint: ($) => seq(choice('extends', ':'), $._type),\n\n\t\t\tconstruct_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional('abstract'),\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\tfield('type', optional($.type_annotation))\n\t\t\t\t),\n\n\t\t\tindex_signature: ($) =>\n\t\t\t\tseq(\n\t\t\t\t\toptional(seq(field('sign', optional('-')), 'readonly')),\n\t\t\t\t\t'[',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('name', choice($.identifier, alias($._reserved_identifier, $.identifier))),\n\t\t\t\t\t\t\t':',\n\t\t\t\t\t\t\tfield('index_type', $._type)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t$.mapped_type_clause\n\t\t\t\t\t),\n\t\t\t\t\t']',\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'type',\n\t\t\t\t\t\tchoice($.type_annotation, $.omitting_type_annotation, $.opting_type_annotation)\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\tarray_type: ($) => seq($._primary_type, '[', ']'),\n\t\t\ttuple_type: ($) => seq('[', commaSep($._tuple_type_member), optional(','), ']'),\n\t\t\treadonly_type: ($) => seq('readonly', $._type),\n\n\t\t\tunion_type: ($) => prec.left(seq(optional($._type), '|', $._type)),\n\t\t\tintersection_type: ($) => prec.left(seq(optional($._type), '&', $._type)),\n\n\t\t\tfunction_type: ($) =>\n\t\t\t\tprec.left(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\t\t'->',\n\t\t\t\t\t\tfield('return_type', choice($._type, $.type_predicate))\n\t\t\t\t\t)\n\t\t\t\t),\n\n\t\t\t_type_identifier: ($) => alias($.identifier, $.type_identifier),\n\n\t\t\t_reserved_identifier: ($, previous) =>\n\t\t\t\tchoice(\n\t\t\t\t\t'declare',\n\t\t\t\t\t'namespace',\n\t\t\t\t\t'pub',\n\t\t\t\t\t'type',\n\t\t\t\t\t'public',\n\t\t\t\t\t'private',\n\t\t\t\t\t'protected',\n\t\t\t\t\t'override',\n\t\t\t\t\t'readonly',\n\t\t\t\t\t'module',\n\t\t\t\t\t'any',\n\t\t\t\t\t'number',\n\t\t\t\t\t'fn',\n\t\t\t\t\t'struct',\n\t\t\t\t\t'int',\n\t\t\t\t\t'float',\n\t\t\t\t\t'float2',\n\t\t\t\t\t'float3',\n\t\t\t\t\t'float4',\n\t\t\t\t\t'float3x3',\n\t\t\t\t\t'float2x2',\n\t\t\t\t\t'float4x4',\n\t\t\t\t\t'int2',\n\t\t\t\t\t'int3',\n\t\t\t\t\t'int4',\n\t\t\t\t\t'int3x3',\n\t\t\t\t\t'int2x2',\n\t\t\t\t\t'int4x4',\n\t\t\t\t\t// 'buffer',\n\t\t\t\t\t'boolean',\n\t\t\t\t\t'string',\n\t\t\t\t\t'symbol',\n\n\t\t\t\t\t'workgroup',\n\t\t\t\t\t'export',\n\t\t\t\t\tprevious\n\t\t\t\t)\n\t\t}\n\t}\n);\n\nfunction sepBy(sep, rule) {\n\treturn optional(sepBy1(sep, rule));\n}\n\nfunction sepBy1(sep, rule) {\n\treturn seq(rule, repeat(seq(sep, rule)));\n}\n\nfunction commaSep1(rule) {\n\treturn seq(rule, repeat(seq(',', rule)));\n}\n\nfunction commaSep(rule) {\n\treturn optional(commaSep1(rule));\n}\n"
  },
  {
    "path": "lang/tree-sitter/grammer-fixed.js",
    "content": "module.exports = grammar(require('./shadeup-javascript'), {\n\tname: 'shadeup',\n\n\texternals: ($, previous) =>\n\t\tprevious.concat([\n\t\t\t// Allow the external scanner to tell whether it is parsing an expression\n\t\t\t// or a type by checking the validity of this binary operator. This is\n\t\t\t// needed because the rules for automatic semicolon insertion are\n\t\t\t// slightly different when parsing types. Any binary-only operator would\n\t\t\t// work.\n\t\t\t'||',\n\t\t\t$._function_signature_automatic_semicolon\n\t\t]),\n\n\tsupertypes: ($, previous) => previous.concat([$._primary_type]),\n\n\tprecedences: ($, previous) =>\n\t\tprevious.concat([\n\t\t\t['call', 'unary', 'binary', $.await_expression, $.arrow_function],\n\t\t\t[\n\t\t\t\t$.intersection_type,\n\t\t\t\t$.union_type,\n\t\t\t\t$.conditional_type,\n\t\t\t\t$.function_type,\n\t\t\t\t'binary',\n\t\t\t\t$.type_predicate,\n\t\t\t\t$.readonly_type\n\t\t\t],\n\t\t\t[$.mapped_type_clause, $.primary_expression],\n\t\t\t[$.accessibility_modifier, $.primary_expression],\n\t\t\t['unary_void', $.expression],\n\t\t\t[$.extends_clause, $.primary_expression],\n\t\t\t['unary', 'assign'],\n\t\t\t['declaration', $.expression],\n\t\t\t[$.predefined_type, $.unary_expression],\n\t\t\t[$._type, $.flow_maybe_type],\n\t\t\t[$.tuple_type, $.array_type, $.pattern, $._type],\n\t\t\t[$.readonly_type, $.pattern],\n\t\t\t[$.readonly_type, $.primary_expression],\n\t\t\t[$.type_query, $.subscript_expression, $.expression],\n\t\t\t[$.type_query, $._type_query_subscript_expression],\n\t\t\t[\n\t\t\t\t$.nested_type_identifier,\n\t\t\t\t$.generic_type,\n\t\t\t\t$._primary_type,\n\t\t\t\t$.lookup_type,\n\t\t\t\t$.index_type_query,\n\t\t\t\t$._type\n\t\t\t],\n\t\t\t[$.as_expression, $.satisfies_expression, $._primary_type],\n\t\t\t[$._type_query_member_expression, $.member_expression],\n\t\t\t[$._type_query_member_expression, $.primary_expression],\n\t\t\t[$._type_query_subscript_expression, $.subscript_expression],\n\t\t\t[$._type_query_subscript_expression, $.primary_expression],\n\t\t\t[$._type_query_call_expression, $.primary_expression],\n\t\t\t[$.type_query, $.primary_expression],\n\t\t\t[$.override_modifier, $.primary_expression],\n\t\t\t[$.decorator_call_expression, $.decorator],\n\t\t\t[$.literal_type, $.pattern],\n\t\t\t[$.predefined_type, $.pattern]\n\t\t]),\n\n\tconflicts: ($, previous) =>\n\t\tprevious.concat([\n\t\t\t[$.call_expression, $.binary_expression],\n\t\t\t[$.call_expression, $.binary_expression, $.unary_expression],\n\t\t\t[$.call_expression, $.binary_expression, $.update_expression],\n\t\t\t[$.call_expression, $.binary_expression, $.type_assertion],\n\t\t\t[$.call_expression, $.binary_expression, $.await_expression],\n\n\t\t\t// This appears to be necessary to parse a parenthesized class expression\n\t\t\t[$.class],\n\n\t\t\t[$.nested_identifier, $.nested_type_identifier, $.primary_expression],\n\t\t\t[$.nested_identifier, $.nested_type_identifier],\n\t\t\t[$.nested_identifier, $.member_expression],\n\n\t\t\t[$.primary_expression, $.array_type],\n\t\t\t[$.primary_expression, $.array_type, $.tuple_type],\n\n\t\t\t[$._call_signature, $.function_type],\n\t\t\t[$._call_signature, $.constructor_type],\n\n\t\t\t[$._primary_type, $.type_parameter],\n\t\t\t[$.jsx_opening_element, $.type_parameter],\n\t\t\t[$.jsx_opening_element, $.type_parameter, $._primary_type],\n\t\t\t[$.jsx_opening_element, $.generic_type],\n\t\t\t[$.jsx_namespace_name, $._primary_type],\n\t\t\t[$.export_statement, $.accessibility_modifier_member],\n\t\t\t[$.export_statement, $.accessibility_modifier],\n\t\t\t[$.accessibility_modifier_member, $.accessibility_modifier],\n\n\t\t\t// [$.parenthesized_expression_vector, $.parenthesized_expression],\n\n\t\t\t[$.primary_expression, $._parameter_name],\n\t\t\t[$.primary_expression, $._parameter_name, $.predefined_type],\n\t\t\t[$.primary_expression, $._parameter_name, $._primary_type],\n\t\t\t[$.primary_expression, $._parameter_name, $.array_type, $.tuple_type],\n\t\t\t[$.primary_expression, $.literal_type],\n\t\t\t[$.primary_expression, $.literal_type, $.pattern],\n\t\t\t[$.primary_expression, $.literal_type, $.rest_pattern],\n\t\t\t[$.primary_expression, $.predefined_type, $.rest_pattern],\n\t\t\t[$.primary_expression, $._primary_type],\n\t\t\t[$.primary_expression, $.generic_type],\n\t\t\t[$.primary_expression, $.predefined_type],\n\t\t\t[$.primary_expression, $.pattern, $._primary_type],\n\t\t\t[$.primary_expression, $.pattern, $.predefined_type],\n\t\t\t[$._parameter_name, $.predefined_type],\n\t\t\t[$._parameter_name, $._primary_type],\n\t\t\t[$._parameter_name, $.assignment_expression],\n\t\t\t[$._parameter_name, $.pattern],\n\t\t\t[$.pattern, $._primary_type],\n\t\t\t[$.pattern, $.predefined_type],\n\n\t\t\t[$.optional_tuple_parameter, $._primary_type],\n\t\t\t[$.optional_tuple_parameter, $._primary_type, $.primary_expression],\n\t\t\t[$.rest_pattern, $._primary_type, $.primary_expression],\n\t\t\t[$.rest_pattern, $._primary_type],\n\n\t\t\t[$.object, $.object_type],\n\t\t\t[$.object, $._property_name],\n\t\t\t[$.object, $.object_pattern, $.object_type],\n\t\t\t[$.object, $.object_pattern, $._property_name],\n\t\t\t[$.object_pattern, $.object_type],\n\t\t\t[$.object_pattern, $.object_type],\n\t\t\t[$.object_pattern, $._property_name],\n\t\t\t[$.function_declaration, $._property_name, $.function_signature],\n\n\t\t\t[$.array, $.tuple_type],\n\t\t\t[$.array, $.array_pattern, $.tuple_type],\n\t\t\t[$.array_pattern, $.tuple_type],\n\n\t\t\t[$.template_literal_type, $.template_string]\n\t\t]),\n\n\tinline: ($, previous) =>\n\t\tprevious\n\t\t\t.filter((rule) => !['_formal_parameter', '_call_signature'].includes(rule.name))\n\t\t\t.concat([$._type_identifier, $._enum_member, $._jsx_start_opening_element]),\n\t// .concat([$._type_identifier, $._jsx_start_opening_element]),\n\n\trules: {\n\t\tpublic_field_definition: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('declare'),\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\tchoice(\n\t\t\t\t\tseq(optional('static'), optional($.override_modifier), optional('readonly')),\n\t\t\t\t\tseq(optional('abstract'), optional('readonly')),\n\t\t\t\t\tseq(optional('readonly'), optional('abstract'))\n\t\t\t\t),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional(choice('?', '!')),\n\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\toptional($._initializer)\n\t\t\t),\n\n\t\t// override original catch_clause, add optional type annotation\n\t\tcatch_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'catch',\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'(',\n\t\t\t\t\t\tfield('parameter', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\t// only types that resolve to 'any' or 'unknown' are supported\n\t\t\t\t\t\t\t// by the language but it's simpler to accept any type here.\n\t\t\t\t\t\t\tfield('type', $.type_annotation)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t')'\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('body', $.statement_block)\n\t\t\t),\n\n\t\tcall_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\tprec(\n\t\t\t\t\t'call',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.expression),\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.primary_expression),\n\t\t\t\t\t\t'?.',\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tnew_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'new',\n\t\t\t\tseq(\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('constructor', $.primary_expression),\n\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\tfield('arguments', optional($.arguments))\n\t\t\t\t)\n\t\t\t),\n\n\t\t_augmented_assignment_lhs: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\t_lhs_expression: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\tprimary_expression: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\t// If the dialect is regular typescript, we exclude JSX expressions and\n\t\t// include type assertions. If the dialect is TSX, we do the opposite.\n\t\texpression: ($, previous) => {\n\t\t\tconst choices = [$.as_expression, $.satisfies_expression, $.internal_module];\n\n\t\t\tchoices.push($.type_assertion);\n\t\t\tchoices.push(\n\t\t\t\t...previous.members.filter(\n\t\t\t\t\t(member) => member.name !== '_jsx_element' && member.name !== 'jsx_fragment'\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn choice(...choices);\n\t\t},\n\n\t\t_jsx_start_opening_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<',\n\t\t\t\tchoice(\n\t\t\t\t\tfield('name', choice($._jsx_identifier, $.jsx_namespace_name)),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($.identifier, $.nested_identifier)),\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\trepeat(field('attribute', $._jsx_attribute))\n\t\t\t),\n\n\t\t// This rule is only referenced by expression when the dialect is 'tsx'\n\t\tjsx_opening_element: ($) => prec.dynamic(-1, seq($._jsx_start_opening_element, '>')),\n\n\t\t// tsx only. See jsx_opening_element.\n\t\tjsx_self_closing_element: ($) => prec.dynamic(-1, seq($._jsx_start_opening_element, '/', '>')),\n\n\t\texport_specifier: ($, previous) => seq(optional(choice('type', 'typeof')), previous),\n\n\t\timport_specifier: ($, previous) => seq(optional(choice('type', 'typeof')), previous),\n\n\t\timport_statement: ($) => seq('import', seq($.import_clause, $._from_clause), $._semicolon),\n\n\t\texport_statement: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\tprevious,\n\t\t\t\tseq('export', $.export_clause, $._semicolon),\n\t\t\t\tseq('export', 'type', $.export_clause, optional($._from_clause), $._semicolon),\n\t\t\t\tseq('export', '=', $.expression, $._semicolon),\n\t\t\t\tseq('export', 'as', 'namespace', $.identifier, $._semicolon)\n\t\t\t),\n\n\t\tnon_null_expression: ($) => prec.left('unary', seq($.expression, '!')),\n\n\t\tvariable_declarator: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\t\t\t\tprec('declaration', seq(field('name', $.identifier), '!', field('type', $.type_annotation)))\n\t\t\t),\n\n\t\tmethod_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\toptional('static'),\n\t\t\t\toptional($.override_modifier),\n\t\t\t\toptional('readonly'),\n\t\t\t\toptional('async'),\n\t\t\t\t'fn',\n\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional('?'),\n\t\t\t\t$._call_signature\n\t\t\t\t// $._semicolon\n\t\t\t),\n\n\t\tabstract_method_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t'abstract',\n\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional('?'),\n\t\t\t\t$._call_signature\n\t\t\t),\n\n\t\tparenthesized_expression: ($, previous) =>\n\t\t\tseq(\n\t\t\t\t'(',\n\t\t\t\tchoice(\n\t\t\t\t\tseq($.expression, field('type', optional($.type_annotation))),\n\t\t\t\t\t$.sequence_expression\n\t\t\t\t),\n\t\t\t\t')'\n\t\t\t),\n\n\t\t_formal_parameter: ($) => choice($.required_parameter, $.optional_parameter),\n\n\t\tfunction_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\t'fn',\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\t$._call_signature,\n\t\t\t\tchoice($._semicolon, $._function_signature_automatic_semicolon)\n\t\t\t),\n\n\t\tclass_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\trepeat(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.decorator,\n\t\t\t\t\t\tseq($.method_definition, optional($._semicolon)),\n\t\t\t\t\t\t// As it happens for functions, the semicolon insertion should not\n\t\t\t\t\t\t// happen if a block follows the closing paren, because then it's a\n\t\t\t\t\t\t// *definition*, not a declaration. Example:\n\t\t\t\t\t\t//     public foo()\n\t\t\t\t\t\t//     { <--- this brace made the method signature become a definition\n\t\t\t\t\t\t//     }\n\t\t\t\t\t\t// The same rule applies for functions and that's why we use\n\t\t\t\t\t\t// \"_function_signature_automatic_semicolon\".\n\t\t\t\t\t\tseq($.method_signature, choice($._function_signature_automatic_semicolon, ',')),\n\t\t\t\t\t\t$.class_static_block,\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t$.abstract_method_signature,\n\t\t\t\t\t\t\t\t$.index_signature,\n\t\t\t\t\t\t\t\t$.method_signature,\n\t\t\t\t\t\t\t\t$.public_field_definition\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tchoice($._semicolon, ',')\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t),\n\n\t\tmethod_definition: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t\toptional('static'),\n\t\t\t\t\toptional($.override_modifier),\n\t\t\t\t\t'fn',\n\t\t\t\t\toptional('readonly'),\n\t\t\t\t\toptional('async'),\n\t\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional('?'),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t)\n\t\t\t),\n\n\t\tdeclaration: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\tprevious,\n\t\t\t\t$.function_signature,\n\t\t\t\t// $.abstract_class_declaration,\n\t\t\t\t$.module,\n\t\t\t\tprec('declaration', $.internal_module),\n\t\t\t\t$.type_alias_declaration,\n\t\t\t\t$.enum_declaration,\n\t\t\t\t$.interface_declaration,\n\t\t\t\t$.impl_declaration,\n\t\t\t\t$.import_alias,\n\t\t\t\t$.ambient_declaration\n\t\t\t),\n\n\t\ttype_assertion: ($) => prec.left('unary', seq($.type_arguments, $.expression)),\n\n\t\tas_expression: ($) => prec.left('binary', seq($.expression, 'as', $._type)),\n\n\t\tsatisfies_expression: ($) => prec.left('binary', seq($.expression, 'satisfies', $._type)),\n\n\t\tclass_heritage: ($) =>\n\t\t\tchoice(seq($.extends_clause, optional($.implements_clause)), $.implements_clause),\n\n\t\timport_require_clause: ($) =>\n\t\t\tseq($.identifier, '=', 'require', '(', field('source', $.string), ')'),\n\n\t\textends_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'extends',\n\t\t\t\tcommaSep1(\n\t\t\t\t\tseq(field('value', $.expression), field('type_arguments', optional($.type_arguments)))\n\t\t\t\t)\n\t\t\t),\n\n\t\timplements_clause: ($) => seq('implements', commaSep1($._type)),\n\n\t\tambient_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'declare',\n\t\t\t\tchoice(\n\t\t\t\t\t$.declaration,\n\t\t\t\t\tseq('global', $.statement_block),\n\t\t\t\t\tseq('module', '.', alias($.identifier, $.property_identifier), ':', $._type, $._semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', optional($._type_identifier)),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t)\n\t\t\t),\n\n\t\tabstract_class_declaration: ($) =>\n\t\t\tprec(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'abstract',\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_declaration: ($) =>\n\t\t\tprec.left(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tstruct_declaration: ($) =>\n\t\t\tprec.left(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'struct',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\t// optional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tmodule: ($) => seq('module', $._module),\n\n\t\tinternal_module: ($) => seq('namespace', $._module),\n\n\t\t_module: ($) =>\n\t\t\tprec.right(\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($.string, $.identifier, $.nested_identifier)),\n\t\t\t\t\t// On .d.ts files \"declare module foo\" desugars to \"declare module foo {}\",\n\t\t\t\t\t// hence why it is optional here\n\t\t\t\t\tfield('body', optional($.statement_block))\n\t\t\t\t)\n\t\t\t),\n\n\t\timport_alias: ($) =>\n\t\t\tseq('import', $.identifier, '=', choice($.identifier, $.nested_identifier), $._semicolon),\n\n\t\tnested_type_identifier: ($) =>\n\t\t\tprec(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield('module', choice($.identifier, $.nested_identifier)),\n\t\t\t\t\t'.',\n\t\t\t\t\tfield('name', $._type_identifier)\n\t\t\t\t)\n\t\t\t),\n\n\t\tinterface_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'trait',\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\toptional($.extends_type_clause),\n\t\t\t\tfield('body', $.object_method_signature_type)\n\t\t\t),\n\n\t\timpl_for_clause: ($) =>\n\t\t\tseq(choice($._type_identifier, $.nested_type_identifier, $.generic_type), 'for'),\n\n\t\timpl_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'impl',\n\t\t\t\tfield('for', optional($.impl_for_clause)),\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('body', $.object_method_type)\n\t\t\t),\n\n\t\textends_type_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'extends',\n\t\t\t\tcommaSep1(\n\t\t\t\t\tfield('type', choice($._type_identifier, $.nested_type_identifier, $.generic_type))\n\t\t\t\t)\n\t\t\t),\n\n\t\tenum_declaration: ($) =>\n\t\t\tseq(optional('const'), 'enum', field('name', $.identifier), field('body', $.enum_body)),\n\n\t\tenum_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tsepBy1(',', choice(field('name', $._property_name), $.enum_assignment)),\n\t\t\t\t\t\toptional(',')\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t),\n\n\t\tenum_assignment: ($) => seq(field('name', $._property_name), $._initializer),\n\n\t\ttype_alias_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'type',\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t'=',\n\t\t\t\tfield('value', $._type),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\taccessibility_modifier: ($) => choice('pub'),\n\t\taccessibility_modifier_member: ($) => choice('pub'),\n\n\t\toverride_modifier: (_) => 'override',\n\n\t\trequired_parameter: ($) =>\n\t\t\tseq($._parameter_name, field('type', optional($.type_annotation)), optional($._initializer)),\n\n\t\toptional_parameter: ($) =>\n\t\t\tseq(\n\t\t\t\t$._parameter_name,\n\t\t\t\t'?',\n\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\toptional($._initializer)\n\t\t\t),\n\n\t\t_parameter_name: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\toptional($.override_modifier),\n\t\t\t\toptional('readonly'),\n\t\t\t\tfield('pattern', choice($.pattern, $.this))\n\t\t\t),\n\n\t\tomitting_type_annotation: ($) => seq('-?:', $._type),\n\t\topting_type_annotation: ($) => seq('?:', $._type),\n\t\ttype_annotation: ($) => seq(':', $._type),\n\t\ttype_annotation_arrow: ($) => seq('->', $._type),\n\n\t\tasserts: ($) => seq(':', 'asserts', choice($.type_predicate, $.identifier, $.this)),\n\n\t\t_type: ($) =>\n\t\t\tchoice($._primary_type, $.function_type, $.readonly_type, $.constructor_type, $.infer_type),\n\n\t\ttuple_parameter: ($) =>\n\t\t\tseq(field('name', choice($.identifier, $.rest_pattern)), field('type', $.type_annotation)),\n\n\t\toptional_tuple_parameter: ($) =>\n\t\t\tseq(field('name', $.identifier), '?', field('type', $.type_annotation)),\n\n\t\toptional_type: ($) => seq($._type, '?'),\n\t\trest_type: ($) => seq('...', $._type),\n\n\t\t_tuple_type_member: ($) =>\n\t\t\tchoice(\n\t\t\t\talias($.tuple_parameter, $.required_parameter),\n\t\t\t\talias($.optional_tuple_parameter, $.optional_parameter),\n\t\t\t\t$.optional_type,\n\t\t\t\t$.rest_type,\n\t\t\t\t$._type\n\t\t\t),\n\n\t\tconstructor_type: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\toptional('abstract'),\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\t'=>',\n\t\t\t\t\tfield('type', $._type)\n\t\t\t\t)\n\t\t\t),\n\n\t\t_primary_type: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.parenthesized_type,\n\t\t\t\t$.predefined_type,\n\t\t\t\t$._type_identifier,\n\t\t\t\t$.nested_type_identifier,\n\t\t\t\t$.generic_type,\n\t\t\t\t$.object_type,\n\t\t\t\t$.array_type,\n\t\t\t\t$.tuple_type,\n\t\t\t\t$.flow_maybe_type,\n\t\t\t\t$.type_query,\n\t\t\t\t$.index_type_query,\n\t\t\t\talias($.this, $.this_type),\n\t\t\t\t$.existential_type,\n\t\t\t\t$.literal_type,\n\t\t\t\t$.lookup_type,\n\t\t\t\t$.conditional_type,\n\t\t\t\t$.template_literal_type,\n\t\t\t\t$.intersection_type,\n\t\t\t\t$.union_type\n\t\t\t),\n\n\t\ttemplate_type: ($) => seq('${', choice($._primary_type, $.infer_type), '}'),\n\n\t\ttemplate_literal_type: ($) => seq('`', repeat(choice($._template_chars, $.template_type)), '`'),\n\n\t\tinfer_type: ($) => seq('infer', $._type_identifier),\n\n\t\tconditional_type: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', $._type),\n\t\t\t\t\t'extends',\n\t\t\t\t\tfield('right', $._type),\n\t\t\t\t\t'?',\n\t\t\t\t\tfield('consequence', $._type),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('alternative', $._type)\n\t\t\t\t)\n\t\t\t),\n\n\t\tgeneric_type: ($) =>\n\t\t\tprec(\n\t\t\t\t'call',\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($._type_identifier, $.nested_type_identifier)),\n\t\t\t\t\tfield('type_arguments', $.type_arguments)\n\t\t\t\t)\n\t\t\t),\n\n\t\ttype_predicate: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'name',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t$.this,\n\t\t\t\t\t\t// Sometimes tree-sitter contextual lexing is not good enough to know\n\t\t\t\t\t\t// that 'object' in ':object is foo' is really an identifier and not\n\t\t\t\t\t\t// a predefined_type, so we must explicitely list all possibilities.\n\t\t\t\t\t\t// TODO: should we use '_reserved_identifier'? Should all the element in\n\t\t\t\t\t\t// 'predefined_type' be added to '_reserved_identifier'?\n\t\t\t\t\t\talias($.predefined_type, $.identifier)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'is',\n\t\t\t\tfield('type', $._type)\n\t\t\t),\n\n\t\ttype_predicate_annotation: ($) => seq(seq(':', $.type_predicate)),\n\n\t\t// Type query expressions are more restrictive than regular expressions\n\t\t_type_query_member_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'object',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tchoice('.', '?.', '::'),\n\t\t\t\tfield(\n\t\t\t\t\t'property',\n\t\t\t\t\tchoice($.private_property_identifier, alias($.identifier, $.property_identifier))\n\t\t\t\t)\n\t\t\t),\n\t\t_type_query_subscript_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'object',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\toptional('?.'),\n\t\t\t\t'[',\n\t\t\t\tfield('index', choice($.predefined_type, $.string, $.number)),\n\t\t\t\t']'\n\t\t\t),\n\t\t_type_query_call_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'function',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.import,\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('arguments', $.arguments)\n\t\t\t),\n\t\ttype_query: ($) =>\n\t\t\tprec.right(\n\t\t\t\tseq(\n\t\t\t\t\t'typeof',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression),\n\t\t\t\t\t\t$.identifier\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tindex_type_query: ($) => seq('keyof', $._primary_type),\n\n\t\tlookup_type: ($) => seq($._primary_type, '[', $._type, ']'),\n\n\t\tmapped_type_clause: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t'in',\n\t\t\t\tfield('type', $._type),\n\t\t\t\toptional(seq('as', field('alias', $._type)))\n\t\t\t),\n\n\t\tliteral_type: ($) =>\n\t\t\tchoice(\n\t\t\t\talias($._number, $.unary_expression),\n\t\t\t\t$.number,\n\t\t\t\t$.string,\n\t\t\t\t$.true,\n\t\t\t\t$.false,\n\t\t\t\t$.null,\n\t\t\t\t$.undefined\n\t\t\t),\n\n\t\t_number: ($) =>\n\t\t\tprec.left(1, seq(field('operator', choice('-', '+')), field('argument', $.number))),\n\n\t\texistential_type: ($) => '*',\n\n\t\tflow_maybe_type: ($) => prec.right(seq('?', $._primary_type)),\n\n\t\tparenthesized_type: ($) => seq('(', $._type, ')'),\n\n\t\tpredefined_type: ($) =>\n\t\t\tchoice(\n\t\t\t\t'any',\n\n\t\t\t\t'int',\n\t\t\t\t'float',\n\t\t\t\t'float2',\n\t\t\t\t'float3',\n\t\t\t\t'float4',\n\t\t\t\t'float3x3',\n\t\t\t\t'float2x2',\n\t\t\t\t'float4x4',\n\t\t\t\t'int2',\n\t\t\t\t'int3',\n\t\t\t\t'int4',\n\t\t\t\t'int3x3',\n\t\t\t\t'int2x2',\n\t\t\t\t'int4x4',\n\t\t\t\t'buffer',\n\n\t\t\t\t'number',\n\t\t\t\t'boolean',\n\t\t\t\t'string',\n\t\t\t\t'symbol',\n\t\t\t\t'void',\n\t\t\t\t'unknown',\n\t\t\t\t'string',\n\t\t\t\t'never',\n\t\t\t\t'object'\n\t\t\t),\n\n\t\ttype_arguments: ($) => seq('<', commaSep1($._type), optional(','), '>'),\n\n\t\tobject_type: ($) =>\n\t\t\tseq(\n\t\t\t\tchoice('{', '{|'),\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional(choice(',', ';')),\n\t\t\t\t\t\tsepBy1(\n\t\t\t\t\t\t\tchoice(',', $._semicolon),\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t// $.export_statement,\n\t\t\t\t\t\t\t\t$.property_signature,\n\t\t\t\t\t\t\t\t$.call_signature,\n\t\t\t\t\t\t\t\t$.construct_signature,\n\t\t\t\t\t\t\t\t$.index_signature,\n\t\t\t\t\t\t\t\t$.method_signature\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptional(choice(',', $._semicolon))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tchoice('}', '|}')\n\t\t\t),\n\n\t\tobject_field_type: ($) =>\n\t\t\tseq(\n\t\t\t\tchoice('{', '{|'),\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional(choice(',', ';')),\n\t\t\t\t\t\tsepBy1(\n\t\t\t\t\t\t\tchoice(',', $._semicolon),\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t// $.export_statement,\n\t\t\t\t\t\t\t\t$.property_signature\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptional(choice(',', $._semicolon))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tchoice('}', '|}')\n\t\t\t),\n\n\t\tobject_method_type: ($) =>\n\t\t\tseq(choice('{', '{|'), repeat($.method_definition), choice('}', '|}')),\n\n\t\tobject_method_signature_type: ($) =>\n\t\t\tseq(choice('{', '{|'), repeat($.method_signature), choice('}', '|}')),\n\n\t\tcall_signature: ($) => $._call_signature,\n\n\t\tproperty_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\toptional('static'),\n\t\t\t\toptional($.override_modifier),\n\t\t\t\toptional('readonly'),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional('?'),\n\t\t\t\tfield('type', optional($.type_annotation))\n\t\t\t),\n\n\t\t_call_signature: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\tfield(\n\t\t\t\t\t'return_type',\n\t\t\t\t\toptional(choice($.type_annotation_arrow, $.asserts, $.type_predicate_annotation))\n\t\t\t\t)\n\t\t\t),\n\n\t\ttype_parameters: ($) => seq('<', commaSep1($.type_parameter), optional(','), '>'),\n\n\t\ttype_parameter: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('constraint', optional($.constraint)),\n\t\t\t\tfield('value', optional($.default_type))\n\t\t\t),\n\n\t\tdefault_type: ($) => seq('=', $._type),\n\n\t\tconstraint: ($) => seq(choice('extends', ':'), $._type),\n\n\t\tconstruct_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('abstract'),\n\t\t\t\t'new',\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\tfield('type', optional($.type_annotation))\n\t\t\t),\n\n\t\tindex_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional(seq(field('sign', optional('-')), 'readonly')),\n\t\t\t\t'[',\n\t\t\t\tchoice(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($.identifier, alias($._reserved_identifier, $.identifier))),\n\t\t\t\t\t\t':',\n\t\t\t\t\t\tfield('index_type', $._type)\n\t\t\t\t\t),\n\t\t\t\t\t$.mapped_type_clause\n\t\t\t\t),\n\t\t\t\t']',\n\t\t\t\tfield(\n\t\t\t\t\t'type',\n\t\t\t\t\tchoice($.type_annotation, $.omitting_type_annotation, $.opting_type_annotation)\n\t\t\t\t)\n\t\t\t),\n\n\t\tarray_type: ($) => seq($._primary_type, '[', ']'),\n\t\ttuple_type: ($) => seq('[', commaSep($._tuple_type_member), optional(','), ']'),\n\t\treadonly_type: ($) => seq('readonly', $._type),\n\n\t\tunion_type: ($) => prec.left(seq(optional($._type), '|', $._type)),\n\t\tintersection_type: ($) => prec.left(seq(optional($._type), '&', $._type)),\n\n\t\tfunction_type: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\t'->',\n\t\t\t\t\tfield('return_type', choice($._type, $.type_predicate))\n\t\t\t\t)\n\t\t\t),\n\n\t\t_type_identifier: ($) => alias($.identifier, $.type_identifier),\n\n\t\t_reserved_identifier: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\t'declare',\n\t\t\t\t'namespace',\n\t\t\t\t'pub',\n\t\t\t\t'type',\n\t\t\t\t'public',\n\t\t\t\t'private',\n\t\t\t\t'protected',\n\t\t\t\t'override',\n\t\t\t\t'readonly',\n\t\t\t\t'module',\n\t\t\t\t'any',\n\t\t\t\t'number',\n\t\t\t\t'fn',\n\t\t\t\t'struct',\n\t\t\t\t'int',\n\t\t\t\t'float',\n\t\t\t\t'float2',\n\t\t\t\t'float3',\n\t\t\t\t'float4',\n\t\t\t\t'float3x3',\n\t\t\t\t'float2x2',\n\t\t\t\t'float4x4',\n\t\t\t\t'int2',\n\t\t\t\t'int3',\n\t\t\t\t'int4',\n\t\t\t\t'int3x3',\n\t\t\t\t'int2x2',\n\t\t\t\t'int4x4',\n\t\t\t\t'buffer',\n\t\t\t\t'boolean',\n\t\t\t\t'string',\n\t\t\t\t'symbol',\n\t\t\t\t'export',\n\t\t\t\tprevious\n\t\t\t)\n\t}\n});\n\nfunction sepBy(sep, rule) {\n\treturn optional(sepBy1(sep, rule));\n}\n\nfunction sepBy1(sep, rule) {\n\treturn seq(rule, repeat(seq(sep, rule)));\n}\n\nfunction commaSep1(rule) {\n\treturn seq(rule, repeat(seq(',', rule)));\n}\n\nfunction commaSep(rule) {\n\treturn optional(commaSep1(rule));\n}\n"
  },
  {
    "path": "lang/tree-sitter/javascript.js",
    "content": "module.exports = grammar({\n\tname: 'javascript',\n\n\texternals: ($) => [$._automatic_semicolon, $._template_chars, $._ternary_qmark],\n\n\textras: ($) => [$.comment, /[\\s\\p{Zs}\\uFEFF\\u2060\\u200B]/],\n\n\tsupertypes: ($) => [$.statement, $.declaration, $.expression, $.primary_expression, $.pattern],\n\n\tinline: ($) => [\n\t\t$._call_signature,\n\t\t$._formal_parameter,\n\t\t$.statement,\n\t\t$._expressions,\n\t\t$._semicolon,\n\t\t$._identifier,\n\t\t$._reserved_identifier,\n\t\t$._jsx_attribute,\n\t\t$._jsx_element_name,\n\t\t$._jsx_child,\n\t\t$._jsx_element,\n\t\t$._jsx_attribute_name,\n\t\t$._jsx_attribute_value,\n\t\t$._jsx_identifier,\n\t\t$._lhs_expression\n\t],\n\n\tprecedences: ($) => [\n\t\t[\n\t\t\t'member',\n\t\t\t'call',\n\t\t\t$.update_expression,\n\t\t\t'unary_void',\n\t\t\t'binary_exp',\n\t\t\t'binary_times',\n\t\t\t'binary_plus',\n\t\t\t'binary_shift',\n\t\t\t'binary_compare',\n\t\t\t'binary_relation',\n\t\t\t'binary_equality',\n\t\t\t'bitwise_and',\n\t\t\t'bitwise_xor',\n\t\t\t'bitwise_or',\n\t\t\t'logical_and',\n\t\t\t'logical_or',\n\t\t\t'ternary',\n\t\t\t$.sequence_expression,\n\t\t\t$.arrow_function\n\t\t],\n\t\t['assign', $.primary_expression],\n\t\t['member', 'new', 'call', $.expression],\n\t\t['declaration', 'literal'],\n\t\t[$.primary_expression, $.statement_block, 'object'],\n\t\t[$.import_statement, $.import],\n\t\t[$.export_statement, $.primary_expression]\n\t],\n\n\tconflicts: ($) => [\n\t\t[$.primary_expression, $._property_name],\n\t\t[$.primary_expression, $._property_name, $.arrow_function],\n\t\t[$.primary_expression, $.arrow_function],\n\t\t[$.primary_expression, $.method_definition],\n\t\t[$.primary_expression, $.rest_pattern],\n\t\t[$.primary_expression, $.pattern],\n\t\t[$.primary_expression, $._for_header],\n\t\t[$.array, $.array_pattern],\n\t\t[$.object, $.object_pattern],\n\t\t[$.assignment_expression, $.pattern],\n\t\t[$.assignment_expression, $.object_assignment_pattern],\n\t\t[$.labeled_statement, $._property_name],\n\t\t[$.computed_property_name, $.array],\n\t\t[$.binary_expression, $._initializer]\n\t],\n\n\tword: ($) => $.identifier,\n\n\trules: {\n\t\tprogram: ($) => seq(optional($.hash_bang_line), repeat($.statement)),\n\n\t\thash_bang_line: ($) => /#!.*/,\n\n\t\t//\n\t\t// Export declarations\n\t\t//\n\n\t\texport_statement: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\t'export',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq('*', $._from_clause),\n\t\t\t\t\t\tseq($.namespace_export, $._from_clause),\n\t\t\t\t\t\tseq($.export_clause, $._from_clause),\n\t\t\t\t\t\t$.export_clause\n\t\t\t\t\t),\n\t\t\t\t\t$._semicolon\n\t\t\t\t),\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'export',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tfield('declaration', $.declaration),\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t'default',\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\tfield('declaration', $.declaration),\n\t\t\t\t\t\t\t\tseq(field('value', $.expression), $._semicolon)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tnamespace_export: ($) => seq('*', 'as', $._module_export_name),\n\n\t\texport_clause: ($) => seq('{', commaSep($.export_specifier), optional(','), '}'),\n\n\t\texport_specifier: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', $._module_export_name),\n\t\t\t\toptional(seq('as', field('alias', $._module_export_name)))\n\t\t\t),\n\n\t\t_module_export_name: ($) => choice($.identifier, $.string),\n\n\t\tdeclaration: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.function_declaration,\n\t\t\t\t$.generator_function_declaration,\n\t\t\t\t$.class_declaration,\n\t\t\t\t$.lexical_declaration,\n\t\t\t\t$.variable_declaration\n\t\t\t),\n\n\t\t//\n\t\t// Import declarations\n\t\t//\n\n\t\timport: ($) => token('import'),\n\n\t\timport_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'import',\n\t\t\t\tchoice(seq($.import_clause, $._from_clause), field('source', $.string)),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\timport_clause: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.namespace_import,\n\t\t\t\t$.named_imports,\n\t\t\t\tseq($.identifier, optional(seq(',', choice($.namespace_import, $.named_imports))))\n\t\t\t),\n\n\t\t_from_clause: ($) => seq('from', field('source', $.string)),\n\n\t\tnamespace_import: ($) => seq('*', 'as', $.identifier),\n\n\t\tnamed_imports: ($) => seq('{', commaSep($.import_specifier), optional(','), '}'),\n\n\t\timport_specifier: ($) =>\n\t\t\tchoice(\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\tseq(field('name', $._module_export_name), 'as', field('alias', $.identifier))\n\t\t\t),\n\n\t\t//\n\t\t// Statements\n\t\t//\n\n\t\tstatement: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.export_statement,\n\t\t\t\t$.import_statement,\n\t\t\t\t$.debugger_statement,\n\t\t\t\t$.expression_statement,\n\t\t\t\t$.declaration,\n\t\t\t\t$.statement_block,\n\n\t\t\t\t$.if_statement,\n\t\t\t\t$.switch_statement,\n\t\t\t\t$.for_statement,\n\t\t\t\t$.for_in_statement,\n\t\t\t\t$.while_statement,\n\t\t\t\t$.do_statement,\n\t\t\t\t$.try_statement,\n\t\t\t\t$.with_statement,\n\n\t\t\t\t$.break_statement,\n\t\t\t\t$.continue_statement,\n\t\t\t\t$.return_statement,\n\t\t\t\t$.throw_statement,\n\t\t\t\t$.empty_statement,\n\t\t\t\t$.labeled_statement\n\t\t\t),\n\n\t\texpression_statement: ($) => seq($._expressions, $._semicolon),\n\n\t\tvariable_declaration: ($) => seq('var', commaSep1($.variable_declarator), $._semicolon),\n\n\t\tlexical_declaration: ($) =>\n\t\t\tseq(field('kind', choice('let', 'const')), commaSep1($.variable_declarator), $._semicolon),\n\n\t\tvariable_declarator: ($) =>\n\t\t\tseq(field('name', choice($.identifier, $._destructuring_pattern)), optional($._initializer)),\n\n\t\tstatement_block: ($) =>\n\t\t\tprec.right(seq('{', repeat($.statement), '}', optional($._automatic_semicolon))),\n\n\t\telse_clause: ($) => seq('else', $.statement),\n\n\t\tif_statement: ($) =>\n\t\t\tprec.right(\n\t\t\t\tseq(\n\t\t\t\t\t'if',\n\t\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\t\tfield('consequence', $.statement),\n\t\t\t\t\toptional(field('alternative', $.else_clause))\n\t\t\t\t)\n\t\t\t),\n\n\t\tswitch_statement: ($) =>\n\t\t\tseq('switch', field('value', $.parenthesized_expression), field('body', $.switch_body)),\n\n\t\tfor_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'for',\n\t\t\t\t'(',\n\t\t\t\tfield(\n\t\t\t\t\t'initializer',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.lexical_declaration,\n\t\t\t\t\t\t$.variable_declaration,\n\t\t\t\t\t\t$.expression_statement,\n\t\t\t\t\t\t$.empty_statement\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('condition', choice($.expression_statement, $.empty_statement)),\n\t\t\t\tfield('increment', optional($._expressions)),\n\t\t\t\t')',\n\t\t\t\tfield('body', $.statement)\n\t\t\t),\n\n\t\tfor_in_statement: ($) =>\n\t\t\tseq('for', optional('await'), $._for_header, field('body', $.statement)),\n\n\t\t_for_header: ($) =>\n\t\t\tseq(\n\t\t\t\t'(',\n\t\t\t\tchoice(\n\t\t\t\t\tfield('left', choice($._lhs_expression, $.parenthesized_expression)),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('kind', 'var'),\n\t\t\t\t\t\tfield('left', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\toptional($._initializer)\n\t\t\t\t\t),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('kind', choice('let', 'const')),\n\t\t\t\t\t\tfield('left', choice($.identifier, $._destructuring_pattern))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('operator', choice('in', 'of')),\n\t\t\t\tfield('right', $._expressions),\n\t\t\t\t')'\n\t\t\t),\n\n\t\twhile_statement: ($) =>\n\t\t\tseq('while', field('condition', $.parenthesized_expression), field('body', $.statement)),\n\n\t\tdo_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'do',\n\t\t\t\tfield('body', $.statement),\n\t\t\t\t'while',\n\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\ttry_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'try',\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t\toptional(field('handler', $.catch_clause)),\n\t\t\t\toptional(field('finalizer', $.finally_clause))\n\t\t\t),\n\n\t\twith_statement: ($) =>\n\t\t\tseq('with', field('object', $.parenthesized_expression), field('body', $.statement)),\n\n\t\tbreak_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'break',\n\t\t\t\tfield('label', optional(alias($.identifier, $.statement_identifier))),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\tcontinue_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'continue',\n\t\t\t\tfield('label', optional(alias($.identifier, $.statement_identifier))),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\tdebugger_statement: ($) => seq('debugger', $._semicolon),\n\n\t\treturn_statement: ($) => seq('return', optional($._expressions), $._semicolon),\n\n\t\tthrow_statement: ($) => seq('throw', $._expressions, $._semicolon),\n\n\t\tempty_statement: ($) => ';',\n\n\t\tlabeled_statement: ($) =>\n\t\t\tprec.dynamic(\n\t\t\t\t-1,\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'label',\n\t\t\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.statement_identifier)\n\t\t\t\t\t),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('body', $.statement)\n\t\t\t\t)\n\t\t\t),\n\n\t\t//\n\t\t// Statement components\n\t\t//\n\n\t\tswitch_body: ($) => seq('{', repeat(choice($.switch_case, $.switch_default)), '}'),\n\n\t\tswitch_case: ($) =>\n\t\t\tseq('case', field('value', $._expressions), ':', field('body', repeat($.statement))),\n\n\t\tswitch_default: ($) => seq('default', ':', field('body', repeat($.statement))),\n\n\t\tcatch_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'catch',\n\t\t\t\toptional(seq('(', field('parameter', choice($.identifier, $._destructuring_pattern)), ')')),\n\t\t\t\tfield('body', $.statement_block)\n\t\t\t),\n\n\t\tfinally_clause: ($) => seq('finally', field('body', $.statement_block)),\n\n\t\tparenthesized_expression: ($) => seq('(', $._expressions, ')'),\n\n\t\t//\n\t\t// Expressions\n\t\t//\n\t\t_expressions: ($) => choice($.expression, $.sequence_expression),\n\n\t\texpression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.primary_expression,\n\t\t\t\t$.glimmer_template,\n\t\t\t\t$._jsx_element,\n\t\t\t\t$.jsx_fragment,\n\t\t\t\t$.assignment_expression,\n\t\t\t\t$.augmented_assignment_expression,\n\t\t\t\t$.await_expression,\n\t\t\t\t$.unary_expression,\n\t\t\t\t$.binary_expression,\n\t\t\t\t$.ternary_expression,\n\t\t\t\t$.update_expression,\n\t\t\t\t$.new_expression,\n\t\t\t\t$.yield_expression\n\t\t\t),\n\n\t\tprimary_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.subscript_expression,\n\t\t\t\t$.member_expression,\n\t\t\t\t$.parenthesized_expression,\n\t\t\t\t$._identifier,\n\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t$.this,\n\t\t\t\t$.super,\n\t\t\t\t$.number,\n\t\t\t\t$.string,\n\t\t\t\t$.template_string,\n\t\t\t\t$.regex,\n\t\t\t\t$.true,\n\t\t\t\t$.false,\n\t\t\t\t$.null,\n\t\t\t\t$.import,\n\t\t\t\t$.object,\n\t\t\t\t$.array,\n\t\t\t\t$.function,\n\t\t\t\t$.arrow_function,\n\t\t\t\t$.generator_function,\n\t\t\t\t$.class,\n\t\t\t\t$.meta_property,\n\t\t\t\t$.call_expression\n\t\t\t),\n\n\t\tyield_expression: ($) =>\n\t\t\tprec.right(seq('yield', choice(seq('*', $.expression), optional($.expression)))),\n\n\t\tobject: ($) =>\n\t\t\tprec(\n\t\t\t\t'object',\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\tcommaSep(\n\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t$.pair,\n\t\t\t\t\t\t\t\t$.spread_element,\n\t\t\t\t\t\t\t\t$.method_definition,\n\t\t\t\t\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.shorthand_property_identifier)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t)\n\t\t\t),\n\n\t\tobject_pattern: ($) =>\n\t\t\tprec(\n\t\t\t\t'object',\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\tcommaSep(\n\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t$.pair_pattern,\n\t\t\t\t\t\t\t\t$.rest_pattern,\n\t\t\t\t\t\t\t\t$.object_assignment_pattern,\n\t\t\t\t\t\t\t\talias(\n\t\t\t\t\t\t\t\t\tchoice($.identifier, $._reserved_identifier),\n\t\t\t\t\t\t\t\t\t$.shorthand_property_identifier_pattern\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t)\n\t\t\t),\n\n\t\tassignment_pattern: ($) => seq(field('left', $.pattern), '=', field('right', $.expression)),\n\n\t\tobject_assignment_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'left',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\talias(\n\t\t\t\t\t\t\tchoice($._reserved_identifier, $.identifier),\n\t\t\t\t\t\t\t$.shorthand_property_identifier_pattern\n\t\t\t\t\t\t),\n\t\t\t\t\t\t$._destructuring_pattern\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'=',\n\t\t\t\tfield('right', $.expression)\n\t\t\t),\n\n\t\tarray: ($) => seq('[', commaSep(optional(choice($.expression, $.spread_element))), ']'),\n\n\t\tarray_pattern: ($) =>\n\t\t\tseq('[', commaSep(optional(choice($.pattern, $.assignment_pattern))), ']'),\n\n\t\tglimmer_template: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\tfield('open_tag', $.glimmer_opening_tag),\n\t\t\t\t\tfield('content', repeat($._glimmer_template_content)),\n\t\t\t\t\tfield('close_tag', $.glimmer_closing_tag)\n\t\t\t\t),\n\t\t\t\t// empty template has no content\n\t\t\t\t// <template></template>\n\t\t\t\tseq(field('open_tag', $.glimmer_opening_tag), field('close_tag', $.glimmer_closing_tag))\n\t\t\t),\n\n\t\t_glimmer_template_content: ($) => /.{1,}/,\n\t\tglimmer_opening_tag: ($) => seq('<template>'),\n\t\tglimmer_closing_tag: ($) => seq('</template>'),\n\n\t\t_jsx_element: ($) => choice($.jsx_element, $.jsx_self_closing_element),\n\n\t\tjsx_element: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('open_tag', $.jsx_opening_element),\n\t\t\t\trepeat($._jsx_child),\n\t\t\t\tfield('close_tag', $.jsx_closing_element)\n\t\t\t),\n\n\t\tjsx_fragment: ($) => seq('<', '>', repeat($._jsx_child), '<', '/', '>'),\n\n\t\tjsx_text: ($) => /[^{}<>]+/,\n\n\t\tjsx_expression: ($) =>\n\t\t\tseq('{', optional(choice($.expression, $.sequence_expression, $.spread_element)), '}'),\n\n\t\t_jsx_child: ($) => choice($.jsx_text, $._jsx_element, $.jsx_fragment, $.jsx_expression),\n\n\t\tjsx_opening_element: ($) =>\n\t\t\tprec.dynamic(\n\t\t\t\t-1,\n\t\t\t\tseq(\n\t\t\t\t\t'<',\n\t\t\t\t\tfield('name', $._jsx_element_name),\n\t\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t\t'>'\n\t\t\t\t)\n\t\t\t),\n\n\t\tjsx_identifier: ($) => /[a-zA-Z_$][a-zA-Z\\d_$]*-[a-zA-Z\\d_$\\-]*/,\n\n\t\t_jsx_identifier: ($) => choice(alias($.jsx_identifier, $.identifier), $.identifier),\n\n\t\tnested_identifier: ($) =>\n\t\t\tprec('member', seq(choice($.identifier, $.nested_identifier), '.', $.identifier)),\n\n\t\tjsx_namespace_name: ($) => seq($._jsx_identifier, ':', $._jsx_identifier),\n\n\t\t_jsx_element_name: ($) => choice($._jsx_identifier, $.nested_identifier, $.jsx_namespace_name),\n\n\t\tjsx_closing_element: ($) => seq('<', '/', field('name', $._jsx_element_name), '>'),\n\n\t\tjsx_self_closing_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<',\n\t\t\t\tfield('name', $._jsx_element_name),\n\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t'/',\n\t\t\t\t'>'\n\t\t\t),\n\n\t\t_jsx_attribute: ($) => choice($.jsx_attribute, $.jsx_expression),\n\n\t\t_jsx_attribute_name: ($) =>\n\t\t\tchoice(alias($._jsx_identifier, $.property_identifier), $.jsx_namespace_name),\n\n\t\tjsx_attribute: ($) => seq($._jsx_attribute_name, optional(seq('=', $._jsx_attribute_value))),\n\n\t\t_jsx_attribute_value: ($) => choice($.string, $.jsx_expression, $._jsx_element, $.jsx_fragment),\n\n\t\tclass: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_declaration: ($) =>\n\t\t\tprec(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_heritage: ($) => seq('extends', $.expression),\n\n\t\tfunction: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'function',\n\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t)\n\t\t\t),\n\n\t\tfunction_declaration: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'function',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tgenerator_function: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'function',\n\t\t\t\t\t'*',\n\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t)\n\t\t\t),\n\n\t\tgenerator_function_declaration: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'function',\n\t\t\t\t\t'*',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tarrow_function: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\tchoice(\n\t\t\t\t\tfield('parameter', choice(alias($._reserved_identifier, $.identifier), $.identifier)),\n\t\t\t\t\t$._call_signature\n\t\t\t\t),\n\t\t\t\t'=>',\n\t\t\t\tfield('body', choice($.expression, $.statement_block))\n\t\t\t),\n\n\t\t// Override\n\t\t_call_signature: ($) => field('parameters', $.formal_parameters),\n\t\t_formal_parameter: ($) => choice($.pattern, $.assignment_pattern),\n\n\t\toptional_chain: ($) => '?.',\n\n\t\tcall_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\tprec(\n\t\t\t\t\t'call',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.expression),\n\t\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.primary_expression),\n\t\t\t\t\t\tfield('optional_chain', $.optional_chain),\n\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tnew_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'new',\n\t\t\t\tseq(\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('constructor', choice($.primary_expression, $.new_expression)),\n\t\t\t\t\tfield('arguments', optional(prec.dynamic(1, $.arguments)))\n\t\t\t\t)\n\t\t\t),\n\n\t\tawait_expression: ($) => prec('unary_void', seq('await', $.expression)),\n\n\t\tmember_expression: ($) =>\n\t\t\tprec(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\tchoice('.', field('optional_chain', $.optional_chain)),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'property',\n\t\t\t\t\t\tchoice($.private_property_identifier, alias($.identifier, $.property_identifier))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tsubscript_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\toptional(field('optional_chain', $.optional_chain)),\n\t\t\t\t\t'[',\n\t\t\t\t\tfield('index', $._expressions),\n\t\t\t\t\t']'\n\t\t\t\t)\n\t\t\t),\n\n\t\t_lhs_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.member_expression,\n\t\t\t\t$.subscript_expression,\n\t\t\t\t$._identifier,\n\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t$._destructuring_pattern\n\t\t\t),\n\n\t\tassignment_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'assign',\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', choice($.parenthesized_expression, $._lhs_expression)),\n\t\t\t\t\t'=',\n\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\t_augmented_assignment_lhs: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.member_expression,\n\t\t\t\t$.subscript_expression,\n\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t$.identifier,\n\t\t\t\t$.parenthesized_expression\n\t\t\t),\n\n\t\taugmented_assignment_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'assign',\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', $._augmented_assignment_lhs),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'operator',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t'+=',\n\t\t\t\t\t\t\t'-=',\n\t\t\t\t\t\t\t'*=',\n\t\t\t\t\t\t\t'/=',\n\t\t\t\t\t\t\t'%=',\n\t\t\t\t\t\t\t'^=',\n\t\t\t\t\t\t\t'&=',\n\t\t\t\t\t\t\t'|=',\n\t\t\t\t\t\t\t'>>=',\n\t\t\t\t\t\t\t'>>>=',\n\t\t\t\t\t\t\t'<<=',\n\t\t\t\t\t\t\t'**=',\n\t\t\t\t\t\t\t'&&=',\n\t\t\t\t\t\t\t'||=',\n\t\t\t\t\t\t\t'??='\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\t_initializer: ($) => seq('=', field('value', $.expression)),\n\n\t\t_destructuring_pattern: ($) => choice($.object_pattern, $.array_pattern),\n\n\t\tspread_element: ($) => seq('...', $.expression),\n\n\t\tternary_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'ternary',\n\t\t\t\tseq(\n\t\t\t\t\tfield('condition', $.expression),\n\t\t\t\t\talias($._ternary_qmark, '?'),\n\t\t\t\t\tfield('consequence', $.expression),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('alternative', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\tbinary_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t...[\n\t\t\t\t\t['&&', 'logical_and'],\n\t\t\t\t\t['||', 'logical_or'],\n\t\t\t\t\t['>>', 'binary_shift'],\n\t\t\t\t\t['>>>', 'binary_shift'],\n\t\t\t\t\t['<<', 'binary_shift'],\n\t\t\t\t\t['&', 'bitwise_and'],\n\t\t\t\t\t['^', 'bitwise_xor'],\n\t\t\t\t\t['|', 'bitwise_or'],\n\t\t\t\t\t['+', 'binary_plus'],\n\t\t\t\t\t['-', 'binary_plus'],\n\t\t\t\t\t['*', 'binary_times'],\n\t\t\t\t\t['/', 'binary_times'],\n\t\t\t\t\t['%', 'binary_times'],\n\t\t\t\t\t['**', 'binary_exp', 'right'],\n\t\t\t\t\t['<', 'binary_relation'],\n\t\t\t\t\t['<=', 'binary_relation'],\n\t\t\t\t\t['==', 'binary_equality'],\n\t\t\t\t\t['===', 'binary_equality'],\n\t\t\t\t\t['!=', 'binary_equality'],\n\t\t\t\t\t['!==', 'binary_equality'],\n\t\t\t\t\t['>=', 'binary_relation'],\n\t\t\t\t\t['>', 'binary_relation'],\n\t\t\t\t\t['??', 'ternary'],\n\t\t\t\t\t['instanceof', 'binary_relation'],\n\t\t\t\t\t['in', 'binary_relation']\n\t\t\t\t].map(([operator, precedence, associativity]) =>\n\t\t\t\t\t(associativity === 'right' ? prec.right : prec.left)(\n\t\t\t\t\t\tprecedence,\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('left', $.expression),\n\t\t\t\t\t\t\tfield('operator', operator),\n\t\t\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tunary_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\t'unary_void',\n\t\t\t\tseq(\n\t\t\t\t\tfield('operator', choice('!', '~', '-', '+', 'typeof', 'void', 'delete')),\n\t\t\t\t\tfield('argument', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\tupdate_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\tchoice(\n\t\t\t\t\tseq(field('argument', $.expression), field('operator', choice('++', '--'))),\n\t\t\t\t\tseq(field('operator', choice('++', '--')), field('argument', $.expression))\n\t\t\t\t)\n\t\t\t),\n\n\t\tsequence_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('left', $.expression),\n\t\t\t\t',',\n\t\t\t\tfield('right', choice($.sequence_expression, $.expression))\n\t\t\t),\n\n\t\t//\n\t\t// Primitives\n\t\t//\n\n\t\t// Here we tolerate unescaped newlines in double-quoted and\n\t\t// single-quoted string literals.\n\t\t// This is legal in typescript as jsx/tsx attribute values (as of\n\t\t// 2020), and perhaps will be valid in javascript as well in the\n\t\t// future.\n\t\t//\n\t\tstring: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\t'\"',\n\t\t\t\t\trepeat(\n\t\t\t\t\t\tchoice(alias($.unescaped_double_string_fragment, $.string_fragment), $.escape_sequence)\n\t\t\t\t\t),\n\t\t\t\t\t'\"'\n\t\t\t\t),\n\t\t\t\tseq(\n\t\t\t\t\t\"'\",\n\t\t\t\t\trepeat(\n\t\t\t\t\t\tchoice(alias($.unescaped_single_string_fragment, $.string_fragment), $.escape_sequence)\n\t\t\t\t\t),\n\t\t\t\t\t\"'\"\n\t\t\t\t)\n\t\t\t),\n\n\t\t// Workaround to https://github.com/tree-sitter/tree-sitter/issues/1156\n\t\t// We give names to the token() constructs containing a regexp\n\t\t// so as to obtain a node in the CST.\n\t\t//\n\t\tunescaped_double_string_fragment: ($) => token.immediate(prec(1, /[^\"\\\\]+/)),\n\n\t\t// same here\n\t\tunescaped_single_string_fragment: ($) => token.immediate(prec(1, /[^'\\\\]+/)),\n\n\t\tescape_sequence: ($) =>\n\t\t\ttoken.immediate(\n\t\t\t\tseq(\n\t\t\t\t\t'\\\\',\n\t\t\t\t\tchoice(/[^xu0-7]/, /[0-7]{1,3}/, /x[0-9a-fA-F]{2}/, /u[0-9a-fA-F]{4}/, /u{[0-9a-fA-F]+}/)\n\t\t\t\t)\n\t\t\t),\n\n\t\t// http://stackoverflow.com/questions/13014947/regex-to-match-a-c-style-multiline-comment/36328890#36328890\n\t\tcomment: ($) =>\n\t\t\ttoken(\n\t\t\t\tchoice(\n\t\t\t\t\tseq('//', /.*/),\n\t\t\t\t\tseq('/*', /[^*]*\\*+([^/*][^*]*\\*+)*/, '/'),\n\t\t\t\t\t// https://tc39.es/ecma262/#sec-html-like-comments\n\t\t\t\t\tseq('<!--', /.*/),\n\t\t\t\t\t// This allows code to exist before this token on the same line.\n\t\t\t\t\t//\n\t\t\t\t\t// Technically, --> is supposed to have nothing before it on the same line\n\t\t\t\t\t// except for comments and whitespace, but that is difficult to express,\n\t\t\t\t\t// and in general tree sitter grammars tend to prefer to be overly\n\t\t\t\t\t// permissive anyway.\n\t\t\t\t\t//\n\t\t\t\t\t// This approach does not appear to cause problems in practice.\n\t\t\t\t\tseq('-->', /.*/)\n\t\t\t\t)\n\t\t\t),\n\n\t\ttemplate_string: ($) =>\n\t\t\tseq('`', repeat(choice($._template_chars, $.escape_sequence, $.template_substitution)), '`'),\n\n\t\ttemplate_substitution: ($) => seq('${', $._expressions, '}'),\n\n\t\tregex: ($) =>\n\t\t\tseq(\n\t\t\t\t'/',\n\t\t\t\tfield('pattern', $.regex_pattern),\n\t\t\t\ttoken.immediate('/'),\n\t\t\t\toptional(field('flags', $.regex_flags))\n\t\t\t),\n\n\t\tregex_pattern: ($) =>\n\t\t\ttoken.immediate(\n\t\t\t\tprec(\n\t\t\t\t\t-1,\n\t\t\t\t\trepeat1(\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t\t'[',\n\t\t\t\t\t\t\t\trepeat(\n\t\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t\tseq('\\\\', /./), // escaped character\n\t\t\t\t\t\t\t\t\t\t/[^\\]\\n\\\\]/ // any character besides ']' or '\\n'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t']'\n\t\t\t\t\t\t\t), // square-bracket-delimited character class\n\t\t\t\t\t\t\tseq('\\\\', /./), // escaped character\n\t\t\t\t\t\t\t/[^/\\\\\\[\\n]/ // any character besides '[', '\\', '/', '\\n'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tregex_flags: ($) => token.immediate(/[a-z]+/),\n\n\t\tnumber: ($) => {\n\t\t\tconst hex_literal = seq(choice('0x', '0X'), /[\\da-fA-F](_?[\\da-fA-F])*/);\n\n\t\t\tconst decimal_digits = /\\d(_?\\d)*/;\n\t\t\tconst signed_integer = seq(optional(choice('-', '+')), decimal_digits);\n\t\t\tconst exponent_part = seq(choice('e', 'E'), signed_integer);\n\n\t\t\tconst binary_literal = seq(choice('0b', '0B'), /[0-1](_?[0-1])*/);\n\n\t\t\tconst octal_literal = seq(choice('0o', '0O'), /[0-7](_?[0-7])*/);\n\n\t\t\tconst bigint_literal = seq(\n\t\t\t\tchoice(hex_literal, binary_literal, octal_literal, decimal_digits),\n\t\t\t\t'n'\n\t\t\t);\n\n\t\t\tconst decimal_integer_literal = choice(\n\t\t\t\t'0',\n\t\t\t\tseq(optional('0'), /[1-9]/, optional(seq(optional('_'), decimal_digits)))\n\t\t\t);\n\n\t\t\tconst decimal_literal = choice(\n\t\t\t\tseq(decimal_integer_literal, '.', optional(decimal_digits), optional(exponent_part)),\n\t\t\t\tseq('.', decimal_digits, optional(exponent_part)),\n\t\t\t\tseq(decimal_integer_literal, exponent_part),\n\t\t\t\tseq(decimal_digits)\n\t\t\t);\n\n\t\t\treturn token(\n\t\t\t\tchoice(hex_literal, decimal_literal, binary_literal, octal_literal, bigint_literal)\n\t\t\t);\n\t\t},\n\n\t\t// 'undefined' is syntactically a regular identifier in JavaScript.\n\t\t// However, its main use is as the read-only global variable whose\n\t\t// value is [undefined], for which there's no literal representation\n\t\t// unlike 'null'. We gave it its own rule so it's easy to\n\t\t// highlight in text editors and other applications.\n\t\t_identifier: ($) => choice($.undefined, $.identifier),\n\n\t\tidentifier: ($) => {\n\t\t\tconst alpha =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\tconst alphanumeric =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\treturn token(seq(alpha, repeat(alphanumeric)));\n\t\t},\n\n\t\tprivate_property_identifier: ($) => {\n\t\t\tconst alpha =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\tconst alphanumeric =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\treturn token(seq('#', alpha, repeat(alphanumeric)));\n\t\t},\n\n\t\tmeta_property: ($) => seq('new', '.', 'target'),\n\n\t\tthis: ($) => 'this',\n\t\tsuper: ($) => 'super',\n\t\ttrue: ($) => 'true',\n\t\tfalse: ($) => 'false',\n\t\tnull: ($) => 'null',\n\t\tundefined: ($) => 'undefined',\n\n\t\t//\n\t\t// Expression components\n\t\t//\n\n\t\targuments: ($) => seq('(', commaSep(optional(choice($.expression, $.spread_element))), ')'),\n\n\t\tdecorator: ($) =>\n\t\t\tseq(\n\t\t\t\t'@',\n\t\t\t\tchoice(\n\t\t\t\t\t$.identifier,\n\t\t\t\t\talias($.decorator_member_expression, $.member_expression),\n\t\t\t\t\talias($.decorator_call_expression, $.call_expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\tdecorator_member_expression: ($) =>\n\t\t\tprec(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\tchoice($.identifier, alias($.decorator_member_expression, $.member_expression))\n\t\t\t\t\t),\n\t\t\t\t\t'.',\n\t\t\t\t\tfield('property', alias($.identifier, $.property_identifier))\n\t\t\t\t)\n\t\t\t),\n\n\t\tdecorator_call_expression: ($) =>\n\t\t\tprec(\n\t\t\t\t'call',\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'function',\n\t\t\t\t\t\tchoice($.identifier, alias($.decorator_member_expression, $.member_expression))\n\t\t\t\t\t),\n\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\trepeat(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq(field('member', $.method_definition), optional(';')),\n\t\t\t\t\t\tseq(field('member', $.field_definition), $._semicolon),\n\t\t\t\t\t\tfield('member', $.class_static_block),\n\t\t\t\t\t\tfield('template', $.glimmer_template)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t),\n\n\t\tfield_definition: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\toptional('static'),\n\t\t\t\tfield('property', $._property_name),\n\t\t\t\toptional($._initializer)\n\t\t\t),\n\n\t\tformal_parameters: ($) =>\n\t\t\tseq('(', optional(seq(commaSep1($._formal_parameter), optional(','))), ')'),\n\n\t\tclass_static_block: ($) => seq('static', field('body', $.statement_block)),\n\n\t\t// This negative dynamic precedence ensures that during error recovery,\n\t\t// unfinished constructs are generally treated as literal expressions,\n\t\t// not patterns.\n\t\tpattern: ($) => prec.dynamic(-1, choice($._lhs_expression, $.rest_pattern)),\n\n\t\trest_pattern: ($) => prec.right(seq('...', $._lhs_expression)),\n\n\t\tmethod_definition: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\toptional('static'),\n\t\t\t\toptional('async'),\n\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\tfield('body', $.statement_block)\n\t\t\t),\n\n\t\tpair: ($) => seq(field('key', $._property_name), ':', field('value', $.expression)),\n\n\t\tpair_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('key', $._property_name),\n\t\t\t\t':',\n\t\t\t\tfield('value', choice($.pattern, $.assignment_pattern))\n\t\t\t),\n\n\t\t_property_name: ($) =>\n\t\t\tchoice(\n\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.property_identifier),\n\t\t\t\t$.private_property_identifier,\n\t\t\t\t$.string,\n\t\t\t\t$.number,\n\t\t\t\t$.computed_property_name\n\t\t\t),\n\n\t\tcomputed_property_name: ($) => seq('[', $.expression, ']'),\n\n\t\t_reserved_identifier: ($) => choice('get', 'set', 'async', 'static', 'export'),\n\n\t\t_semicolon: ($) => choice($._automatic_semicolon, ';')\n\t}\n});\n\nfunction commaSep1(rule) {\n\treturn seq(rule, repeat(seq(',', rule)));\n}\n\nfunction commaSep(rule) {\n\treturn optional(commaSep1(rule));\n}\n"
  },
  {
    "path": "lang/tree-sitter/package.json",
    "content": "{\n\t\"name\": \"tree-sitter-shadeup\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"\",\n\t\"main\": \"bindings/node\",\n\t\"scripts\": {\n\t\t\"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n\t},\n\t\"dependencies\": {\n\t\t\"nan\": \"^2.17.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"tree-sitter-cli\": \"^0.20.8\",\n\t\t\"tree-sitter-javascript\": \"^0.19.0\"\n\t},\n\t\"author\": \"\",\n\t\"license\": \"ISC\"\n}\n"
  },
  {
    "path": "lang/tree-sitter/readme.md",
    "content": "To build (when docker is running):\n\n```bash\nwsl\ntree-sitter build-wasm ./ --docker\n```\n"
  },
  {
    "path": "lang/tree-sitter/shadeup-javascript.js",
    "content": "module.exports = grammar({\n\tname: 'javascript',\n\n\texternals: ($) => [$._automatic_semicolon, $._template_chars, $._ternary_qmark],\n\n\textras: ($) => [$.comment, /[\\s\\p{Zs}\\uFEFF\\u2060\\u200B]/],\n\n\tsupertypes: ($) => [$.statement, $.declaration, $.expression, $.primary_expression, $.pattern],\n\n\tinline: ($) => [\n\t\t$._call_signature,\n\t\t$._formal_parameter,\n\t\t$.statement,\n\t\t$._expressions,\n\t\t$._semicolon,\n\t\t$._identifier,\n\t\t$._reserved_identifier,\n\t\t$._jsx_attribute,\n\t\t$._jsx_element_name,\n\t\t$._jsx_child,\n\t\t$._jsx_element,\n\t\t$._jsx_attribute_name,\n\t\t$._jsx_attribute_value,\n\t\t$._jsx_identifier,\n\t\t$._lhs_expression\n\t],\n\n\tprecedences: ($) => [\n\t\t[\n\t\t\t'member',\n\t\t\t'call',\n\t\t\t$.update_expression,\n\t\t\t'unary_void',\n\t\t\t'binary_exp',\n\t\t\t'binary_times',\n\t\t\t'binary_plus',\n\t\t\t'binary_shift',\n\t\t\t'binary_compare',\n\t\t\t'binary_relation',\n\t\t\t'binary_equality',\n\t\t\t'bitwise_and',\n\t\t\t'bitwise_xor',\n\t\t\t'bitwise_or',\n\t\t\t'logical_and',\n\t\t\t'logical_or',\n\t\t\t'ternary',\n\t\t\t$.sequence_expression,\n\t\t\t$.arrow_function\n\t\t],\n\t\t['assign', $.primary_expression],\n\t\t['member', 'new', 'call', $.expression],\n\t\t['declaration', 'literal'],\n\t\t[$.primary_expression, $.statement_block, 'object'],\n\t\t[$.import_statement, $.import],\n\t\t[$.export_statement, $.primary_expression]\n\t],\n\n\tconflicts: ($) => [\n\t\t[$.primary_expression, $._property_name],\n\t\t[$.primary_expression, $._property_name, $.arrow_function],\n\t\t[$.primary_expression, $.arrow_function],\n\t\t[$.primary_expression, $.method_definition],\n\n\t\t[$.primary_expression, $.rest_pattern],\n\t\t[$.primary_expression, $.pattern],\n\t\t[$.primary_expression, $._for_header],\n\t\t[$.array, $.array_pattern],\n\t\t[$.object, $.object_pattern],\n\t\t[$.assignment_expression, $.pattern],\n\t\t[$.assignment_expression, $.object_assignment_pattern],\n\t\t[$.labeled_statement, $._property_name],\n\t\t[$.computed_property_name, $.array],\n\t\t[$.binary_expression, $._initializer]\n\t],\n\n\tword: ($) => $.identifier,\n\n\trules: {\n\t\tprogram: ($) => seq(optional($.hash_bang_line), repeat($.statement)),\n\n\t\thash_bang_line: ($) => /#!.*/,\n\n\t\t//\n\t\t// Export declarations\n\t\t//\n\n\t\texport_statement: ($) => choice(seq('pub', choice(field('declaration', $.declaration)))),\n\n\t\tnamespace_export: ($) => seq('*', 'as', $._module_export_name),\n\n\t\texport_clause: ($) => seq('{', commaSep($.export_specifier), optional(','), '}'),\n\n\t\texport_specifier: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', $._module_export_name),\n\t\t\t\toptional(seq('as', field('alias', $._module_export_name)))\n\t\t\t),\n\n\t\t_module_export_name: ($) => choice($.identifier, $.string),\n\n\t\tdeclaration: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.function_declaration,\n\t\t\t\t$.generator_function_declaration,\n\t\t\t\t// $.class_declaration,\n\t\t\t\t$.struct_declaration,\n\t\t\t\t$.lexical_declaration,\n\t\t\t\t$.variable_declaration\n\t\t\t),\n\n\t\t//\n\t\t// Import declarations\n\t\t//\n\n\t\timport: ($) => token('import'),\n\n\t\timport_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'import',\n\t\t\t\tchoice(seq($.import_clause, $._from_clause), field('source', $.string)),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\timport_clause: ($) => choice($.named_imports),\n\n\t\t_from_clause: ($) => seq('from', field('source', $.string)),\n\n\t\tnamespace_import: ($) => seq('*', 'as', $.identifier),\n\n\t\tnamed_imports: ($) => seq(commaSep1($.import_specifier), optional(',')),\n\n\t\timport_specifier: ($) =>\n\t\t\tchoice(\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\tseq(field('name', $._module_export_name), 'as', field('alias', $.identifier))\n\t\t\t),\n\n\t\t//\n\t\t// Statements\n\t\t//\n\n\t\tstatement: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.export_statement,\n\t\t\t\t$.import_statement,\n\t\t\t\t$.debugger_statement,\n\t\t\t\t$.expression_statement,\n\t\t\t\t$.declaration,\n\t\t\t\t$.statement_block,\n\n\t\t\t\t$.if_statement,\n\t\t\t\t$.switch_statement,\n\t\t\t\t$.for_statement,\n\t\t\t\t$.for_in_statement,\n\t\t\t\t$.while_statement,\n\t\t\t\t$.do_statement,\n\t\t\t\t$.try_statement,\n\t\t\t\t$.with_statement,\n\n\t\t\t\t$.break_statement,\n\t\t\t\t$.continue_statement,\n\t\t\t\t$.return_statement,\n\t\t\t\t$.throw_statement,\n\t\t\t\t$.empty_statement,\n\t\t\t\t$.labeled_statement\n\t\t\t),\n\n\t\texpression_statement: ($) => seq($._expressions, $._semicolon),\n\n\t\tvariable_declaration: ($) => seq('var', commaSep1($.variable_declarator), $._semicolon),\n\n\t\tlexical_declaration: ($) =>\n\t\t\tseq(field('kind', choice('let', 'const')), commaSep1($.variable_declarator), $._semicolon),\n\n\t\tvariable_declarator: ($) =>\n\t\t\tseq(field('name', choice($.identifier, $._destructuring_pattern)), optional($._initializer)),\n\n\t\tstatement_block: ($) =>\n\t\t\tprec.right(seq('{', repeat($.statement), '}', optional($._automatic_semicolon))),\n\n\t\telse_clause: ($) => seq('else', $.statement),\n\n\t\tif_statement: ($) =>\n\t\t\tprec.right(\n\t\t\t\tseq(\n\t\t\t\t\t'if',\n\t\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\t\tfield('consequence', $.statement),\n\t\t\t\t\toptional(field('alternative', $.else_clause))\n\t\t\t\t)\n\t\t\t),\n\n\t\tswitch_statement: ($) =>\n\t\t\tseq('switch', field('value', $.parenthesized_expression), field('body', $.switch_body)),\n\n\t\tfor_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'for',\n\t\t\t\t'(',\n\t\t\t\tfield(\n\t\t\t\t\t'initializer',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.lexical_declaration,\n\t\t\t\t\t\t$.variable_declaration,\n\t\t\t\t\t\t$.expression_statement,\n\t\t\t\t\t\t$.empty_statement\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('condition', choice($.expression_statement, $.empty_statement)),\n\t\t\t\tfield('increment', optional($._expressions)),\n\t\t\t\t')',\n\t\t\t\tfield('body', $.statement)\n\t\t\t),\n\n\t\tfor_in_statement: ($) =>\n\t\t\tseq('for', optional('await'), $._for_header, field('body', $.statement)),\n\n\t\t_for_header: ($) =>\n\t\t\tseq(\n\t\t\t\t'(',\n\t\t\t\tchoice(\n\t\t\t\t\tfield('left', choice($._lhs_expression, $.parenthesized_expression)),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('kind', 'var'),\n\t\t\t\t\t\tfield('left', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\toptional($._initializer)\n\t\t\t\t\t),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('kind', choice('let', 'const')),\n\t\t\t\t\t\tfield('left', choice($.identifier, $._destructuring_pattern))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('operator', choice('in', 'of')),\n\t\t\t\tfield('right', $._expressions),\n\t\t\t\t')'\n\t\t\t),\n\n\t\twhile_statement: ($) =>\n\t\t\tseq('while', field('condition', $.parenthesized_expression), field('body', $.statement)),\n\n\t\tdo_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'do',\n\t\t\t\tfield('body', $.statement),\n\t\t\t\t'while',\n\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\ttry_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'try',\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t\toptional(field('handler', $.catch_clause)),\n\t\t\t\toptional(field('finalizer', $.finally_clause))\n\t\t\t),\n\n\t\twith_statement: ($) =>\n\t\t\tseq('with', field('object', $.parenthesized_expression), field('body', $.statement)),\n\n\t\tbreak_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'break',\n\t\t\t\tfield('label', optional(alias($.identifier, $.statement_identifier))),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\tcontinue_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'continue',\n\t\t\t\tfield('label', optional(alias($.identifier, $.statement_identifier))),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\tdebugger_statement: ($) => seq('debugger', $._semicolon),\n\n\t\treturn_statement: ($) => seq('return', optional($._expressions), $._semicolon),\n\n\t\tthrow_statement: ($) => seq('throw', $._expressions, $._semicolon),\n\n\t\tempty_statement: ($) => ';',\n\n\t\tlabeled_statement: ($) =>\n\t\t\tprec.dynamic(\n\t\t\t\t-1,\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'label',\n\t\t\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.statement_identifier)\n\t\t\t\t\t),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('body', $.statement)\n\t\t\t\t)\n\t\t\t),\n\n\t\t//\n\t\t// Statement components\n\t\t//\n\n\t\tswitch_body: ($) => seq('{', repeat(choice($.switch_case, $.switch_default)), '}'),\n\n\t\tswitch_case: ($) =>\n\t\t\tseq('case', field('value', $._expressions), ':', field('body', repeat($.statement))),\n\n\t\tswitch_default: ($) => seq('default', ':', field('body', repeat($.statement))),\n\n\t\tcatch_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'catch',\n\t\t\t\toptional(seq('(', field('parameter', choice($.identifier, $._destructuring_pattern)), ')')),\n\t\t\t\tfield('body', $.statement_block)\n\t\t\t),\n\n\t\tfinally_clause: ($) => seq('finally', field('body', $.statement_block)),\n\n\t\tparenthesized_expression: ($) => seq('(', $._expressions, ')'),\n\t\t// parenthesized_expression_vector: ($) => seq('(', $._expressions, ')'),\n\n\t\tconstruct_expression: ($) => seq(field('identifier', $.identifier), field('body', $.object)),\n\n\t\t//\n\t\t// Expressions\n\t\t//\n\t\t_expressions: ($) => choice($.expression, $.sequence_expression),\n\n\t\texpression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.primary_expression,\n\t\t\t\t$.glimmer_template,\n\t\t\t\t$._jsx_element,\n\t\t\t\t$.jsx_fragment,\n\t\t\t\t$.assignment_expression,\n\t\t\t\t$.augmented_assignment_expression,\n\t\t\t\t$.await_expression,\n\t\t\t\t$.unary_expression,\n\t\t\t\t$.binary_expression,\n\t\t\t\t$.ternary_expression,\n\t\t\t\t$.update_expression,\n\t\t\t\t$.new_expression,\n\t\t\t\t$.yield_expression\n\t\t\t),\n\n\t\tprimary_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t// $.construct_expression,\n\t\t\t\t$.subscript_expression,\n\t\t\t\t$.member_expression,\n\t\t\t\t$.parenthesized_expression,\n\t\t\t\t$._identifier,\n\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t$.this,\n\t\t\t\t$.super,\n\t\t\t\t$.number,\n\t\t\t\t$.string,\n\t\t\t\t$.template_string,\n\t\t\t\t$.regex,\n\t\t\t\t$.true,\n\t\t\t\t$.false,\n\t\t\t\t$.null,\n\t\t\t\t$.import,\n\t\t\t\t$.object,\n\t\t\t\t$.array,\n\t\t\t\t$.shader,\n\t\t\t\t$.arrow_function,\n\t\t\t\t$.generator_function,\n\t\t\t\t$.meta_property,\n\t\t\t\t$.call_expression\n\t\t\t),\n\n\t\tyield_expression: ($) =>\n\t\t\tprec.right(seq('yield', choice(seq('*', $.expression), optional($.expression)))),\n\n\t\tobject: ($) =>\n\t\t\tprec(\n\t\t\t\t'object',\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\tcommaSep(\n\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t$.pair,\n\t\t\t\t\t\t\t\t$.spread_element,\n\t\t\t\t\t\t\t\t$.method_definition,\n\t\t\t\t\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.shorthand_property_identifier)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t)\n\t\t\t),\n\n\t\tobject_pattern: ($) =>\n\t\t\tprec(\n\t\t\t\t'object',\n\t\t\t\tseq(\n\t\t\t\t\t'{',\n\t\t\t\t\tcommaSep(\n\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t$.pair_pattern,\n\t\t\t\t\t\t\t\t$.rest_pattern,\n\t\t\t\t\t\t\t\t$.object_assignment_pattern,\n\t\t\t\t\t\t\t\talias(\n\t\t\t\t\t\t\t\t\tchoice($.identifier, $._reserved_identifier),\n\t\t\t\t\t\t\t\t\t$.shorthand_property_identifier_pattern\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t'}'\n\t\t\t\t)\n\t\t\t),\n\n\t\tassignment_pattern: ($) => seq(field('left', $.pattern), '=', field('right', $.expression)),\n\n\t\tobject_assignment_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'left',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\talias(\n\t\t\t\t\t\t\tchoice($._reserved_identifier, $.identifier),\n\t\t\t\t\t\t\t$.shorthand_property_identifier_pattern\n\t\t\t\t\t\t),\n\t\t\t\t\t\t$._destructuring_pattern\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'=',\n\t\t\t\tfield('right', $.expression)\n\t\t\t),\n\n\t\tarray: ($) => seq('[', commaSep(optional(choice($.expression, $.spread_element))), ']'),\n\n\t\tarray_pattern: ($) =>\n\t\t\tseq('[', commaSep(optional(choice($.pattern, $.assignment_pattern))), ']'),\n\n\t\tglimmer_template: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\tfield('open_tag', $.glimmer_opening_tag),\n\t\t\t\t\tfield('content', repeat($._glimmer_template_content)),\n\t\t\t\t\tfield('close_tag', $.glimmer_closing_tag)\n\t\t\t\t),\n\t\t\t\t// empty template has no content\n\t\t\t\t// <template></template>\n\t\t\t\tseq(field('open_tag', $.glimmer_opening_tag), field('close_tag', $.glimmer_closing_tag))\n\t\t\t),\n\n\t\t_glimmer_template_content: ($) => /.{1,}/,\n\t\tglimmer_opening_tag: ($) => seq('<template>'),\n\t\tglimmer_closing_tag: ($) => seq('</template>'),\n\n\t\t_jsx_element: ($) => choice($.jsx_element, $.jsx_self_closing_element),\n\n\t\tjsx_element: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('open_tag', $.jsx_opening_element),\n\t\t\t\trepeat($._jsx_child),\n\t\t\t\tfield('close_tag', $.jsx_closing_element)\n\t\t\t),\n\n\t\tjsx_fragment: ($) => seq('<', '>', repeat($._jsx_child), '<', '/', '>'),\n\n\t\tjsx_text: ($) => /[^{}<>]+/,\n\n\t\tjsx_expression: ($) =>\n\t\t\tseq('{', optional(choice($.expression, $.sequence_expression, $.spread_element)), '}'),\n\n\t\t_jsx_child: ($) => choice($.jsx_text, $._jsx_element, $.jsx_fragment, $.jsx_expression),\n\n\t\tjsx_opening_element: ($) =>\n\t\t\tprec.dynamic(\n\t\t\t\t-1,\n\t\t\t\tseq(\n\t\t\t\t\t'<',\n\t\t\t\t\tfield('name', $._jsx_element_name),\n\t\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t\t'>'\n\t\t\t\t)\n\t\t\t),\n\n\t\tjsx_identifier: ($) => /[a-zA-Z_$][a-zA-Z\\d_$]*-[a-zA-Z\\d_$\\-]*/,\n\n\t\t_jsx_identifier: ($) => choice(alias($.jsx_identifier, $.identifier), $.identifier),\n\n\t\tnested_identifier: ($) =>\n\t\t\tprec('member', seq(choice($.identifier, $.nested_identifier), '.', $.identifier)),\n\n\t\tjsx_namespace_name: ($) => seq($._jsx_identifier, ':', $._jsx_identifier),\n\n\t\t_jsx_element_name: ($) => choice($._jsx_identifier, $.nested_identifier, $.jsx_namespace_name),\n\n\t\tjsx_closing_element: ($) => seq('<', '/', field('name', $._jsx_element_name), '>'),\n\n\t\tjsx_self_closing_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<',\n\t\t\t\tfield('name', $._jsx_element_name),\n\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t'/',\n\t\t\t\t'>'\n\t\t\t),\n\n\t\t_jsx_attribute: ($) => choice($.jsx_attribute, $.jsx_expression),\n\n\t\t_jsx_attribute_name: ($) =>\n\t\t\tchoice(alias($._jsx_identifier, $.property_identifier), $.jsx_namespace_name),\n\n\t\tjsx_attribute: ($) => seq($._jsx_attribute_name, optional(seq('=', $._jsx_attribute_value))),\n\n\t\t_jsx_attribute_value: ($) => choice($.string, $.jsx_expression, $._jsx_element, $.jsx_fragment),\n\n\t\tclass: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_declaration: ($) =>\n\t\t\tprec(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tstruct_declaration: ($) =>\n\t\t\tprec(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'struct',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t// optional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_heritage: ($) => seq('extends', $.expression),\n\n\t\tshader: ($) => prec('literal', seq('shader', field('body', $.statement_block))),\n\n\t\t// We don't allow anonymous functions via fn\n\t\t// function: ($) =>\n\t\t// \tprec(\n\t\t// \t\t'literal',\n\t\t// \t\tseq(\n\t\t// \t\t\toptional('async'),\n\t\t// \t\t\t'function',\n\t\t// \t\t\tfield('name', optional($.identifier)),\n\t\t// \t\t\t$._call_signature,\n\t\t// \t\t\tfield('body', $.statement_block)\n\t\t// \t\t)\n\t\t// \t),\n\n\t\tfunction_declaration: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'fn',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tgenerator_function: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'fn *',\n\t\t\t\t\tfield('name', optional($.identifier)),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t)\n\t\t\t),\n\n\t\tgenerator_function_declaration: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\toptional('async'),\n\t\t\t\t\t'fn *',\n\t\t\t\t\tfield('name', $.identifier),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tarrow_function: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\tchoice(\n\t\t\t\t\tfield('parameter', choice(alias($._reserved_identifier, $.identifier), $.identifier)),\n\t\t\t\t\t$._call_signature\n\t\t\t\t),\n\t\t\t\t'=>',\n\t\t\t\tfield('body', choice($.expression, $.statement_block))\n\t\t\t),\n\n\t\t// Override\n\t\t_call_signature: ($) => field('parameters', $.formal_parameters),\n\t\t_formal_parameter: ($) => choice($.pattern, $.assignment_pattern),\n\n\t\toptional_chain: ($) => '?.',\n\n\t\tcall_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\tprec(\n\t\t\t\t\t'call',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.expression),\n\t\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.primary_expression),\n\t\t\t\t\t\tfield('optional_chain', $.optional_chain),\n\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tnew_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'new',\n\t\t\t\tseq(\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('constructor', choice($.primary_expression, $.new_expression)),\n\t\t\t\t\tfield('arguments', optional(prec.dynamic(1, $.arguments)))\n\t\t\t\t)\n\t\t\t),\n\n\t\tawait_expression: ($) => prec('unary_void', seq('await', $.expression)),\n\n\t\tmember_expression: ($) =>\n\t\t\tprec(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\tchoice('.', '::', field('optional_chain', $.optional_chain)),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'property',\n\t\t\t\t\t\tchoice($.private_property_identifier, alias($.identifier, $.property_identifier))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tsubscript_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\toptional(field('optional_chain', $.optional_chain)),\n\t\t\t\t\t'[',\n\t\t\t\t\tfield('index', $._expressions),\n\t\t\t\t\t']'\n\t\t\t\t)\n\t\t\t),\n\n\t\t_lhs_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.member_expression,\n\t\t\t\t$.subscript_expression,\n\t\t\t\t$._identifier,\n\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t$._destructuring_pattern\n\t\t\t),\n\n\t\tassignment_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'assign',\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', choice($.parenthesized_expression, $._lhs_expression)),\n\t\t\t\t\t'=',\n\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\t_augmented_assignment_lhs: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.member_expression,\n\t\t\t\t$.subscript_expression,\n\t\t\t\talias($._reserved_identifier, $.identifier),\n\t\t\t\t$.identifier,\n\t\t\t\t$.parenthesized_expression\n\t\t\t),\n\n\t\taugmented_assignment_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'assign',\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', $._augmented_assignment_lhs),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'operator',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t'+=',\n\t\t\t\t\t\t\t'-=',\n\t\t\t\t\t\t\t'*=',\n\t\t\t\t\t\t\t'/=',\n\t\t\t\t\t\t\t'%=',\n\t\t\t\t\t\t\t'^=',\n\t\t\t\t\t\t\t'&=',\n\t\t\t\t\t\t\t'|=',\n\t\t\t\t\t\t\t'>>=',\n\t\t\t\t\t\t\t'>>>=',\n\t\t\t\t\t\t\t'<<=',\n\t\t\t\t\t\t\t'**=',\n\t\t\t\t\t\t\t'&&=',\n\t\t\t\t\t\t\t'||=',\n\t\t\t\t\t\t\t'??='\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\t_initializer: ($) => seq('=', field('value', $.expression)),\n\n\t\t_destructuring_pattern: ($) => choice($.object_pattern, $.array_pattern),\n\n\t\tspread_element: ($) => seq('...', $.expression),\n\n\t\tternary_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'ternary',\n\t\t\t\tseq(\n\t\t\t\t\tfield('condition', $.expression),\n\t\t\t\t\talias($._ternary_qmark, '?'),\n\t\t\t\t\tfield('consequence', $.expression),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('alternative', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\tbinary_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t...[\n\t\t\t\t\t['&&', 'logical_and'],\n\t\t\t\t\t['||', 'logical_or'],\n\t\t\t\t\t['>>', 'binary_shift'],\n\t\t\t\t\t['>>>', 'binary_shift'],\n\t\t\t\t\t['<<', 'binary_shift'],\n\t\t\t\t\t['&', 'bitwise_and'],\n\t\t\t\t\t['^', 'bitwise_xor'],\n\t\t\t\t\t['|', 'bitwise_or'],\n\t\t\t\t\t['+', 'binary_plus'],\n\t\t\t\t\t['-', 'binary_plus'],\n\t\t\t\t\t['*', 'binary_times'],\n\t\t\t\t\t['/', 'binary_times'],\n\t\t\t\t\t['%', 'binary_times'],\n\t\t\t\t\t['**', 'binary_exp', 'right'],\n\t\t\t\t\t['<', 'binary_relation'],\n\t\t\t\t\t['<=', 'binary_relation'],\n\t\t\t\t\t['==', 'binary_equality'],\n\t\t\t\t\t['===', 'binary_equality'],\n\t\t\t\t\t['!=', 'binary_equality'],\n\t\t\t\t\t['!==', 'binary_equality'],\n\t\t\t\t\t['>=', 'binary_relation'],\n\t\t\t\t\t['>', 'binary_relation'],\n\t\t\t\t\t['??', 'ternary'],\n\t\t\t\t\t['instanceof', 'binary_relation'],\n\t\t\t\t\t['in', 'binary_relation']\n\t\t\t\t].map(([operator, precedence, associativity]) =>\n\t\t\t\t\t(associativity === 'right' ? prec.right : prec.left)(\n\t\t\t\t\t\tprecedence,\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('left', $.expression),\n\t\t\t\t\t\t\tfield('operator', operator),\n\t\t\t\t\t\t\tfield('right', $.expression)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tunary_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\t'unary_void',\n\t\t\t\tseq(\n\t\t\t\t\tfield('operator', choice('!', '~', '-', '+', 'typeof', 'void', 'delete')),\n\t\t\t\t\tfield('argument', $.expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\tupdate_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\tchoice(\n\t\t\t\t\tseq(field('argument', $.expression), field('operator', choice('++', '--'))),\n\t\t\t\t\tseq(field('operator', choice('++', '--')), field('argument', $.expression))\n\t\t\t\t)\n\t\t\t),\n\n\t\tsequence_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('left', $.expression),\n\t\t\t\t',',\n\t\t\t\tfield('right', choice($.sequence_expression, $.expression))\n\t\t\t),\n\n\t\t//\n\t\t// Primitives\n\t\t//\n\n\t\t// Here we tolerate unescaped newlines in double-quoted and\n\t\t// single-quoted string literals.\n\t\t// This is legal in typescript as jsx/tsx attribute values (as of\n\t\t// 2020), and perhaps will be valid in javascript as well in the\n\t\t// future.\n\t\t//\n\t\tstring: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\t'\"',\n\t\t\t\t\trepeat(\n\t\t\t\t\t\tchoice(alias($.unescaped_double_string_fragment, $.string_fragment), $.escape_sequence)\n\t\t\t\t\t),\n\t\t\t\t\t'\"'\n\t\t\t\t),\n\t\t\t\tseq(\n\t\t\t\t\t\"'\",\n\t\t\t\t\trepeat(\n\t\t\t\t\t\tchoice(alias($.unescaped_single_string_fragment, $.string_fragment), $.escape_sequence)\n\t\t\t\t\t),\n\t\t\t\t\t\"'\"\n\t\t\t\t)\n\t\t\t),\n\n\t\t// Workaround to https://github.com/tree-sitter/tree-sitter/issues/1156\n\t\t// We give names to the token() constructs containing a regexp\n\t\t// so as to obtain a node in the CST.\n\t\t//\n\t\tunescaped_double_string_fragment: ($) => token.immediate(prec(1, /[^\"\\\\]+/)),\n\n\t\t// same here\n\t\tunescaped_single_string_fragment: ($) => token.immediate(prec(1, /[^'\\\\]+/)),\n\n\t\tescape_sequence: ($) =>\n\t\t\ttoken.immediate(\n\t\t\t\tseq(\n\t\t\t\t\t'\\\\',\n\t\t\t\t\tchoice(/[^xu0-7]/, /[0-7]{1,3}/, /x[0-9a-fA-F]{2}/, /u[0-9a-fA-F]{4}/, /u{[0-9a-fA-F]+}/)\n\t\t\t\t)\n\t\t\t),\n\n\t\t// http://stackoverflow.com/questions/13014947/regex-to-match-a-c-style-multiline-comment/36328890#36328890\n\t\tcomment: ($) => token(choice(seq('//', /.*/), seq('/*', /[^*]*\\*+([^/*][^*]*\\*+)*/, '/'))),\n\n\t\ttemplate_string: ($) =>\n\t\t\tseq('`', repeat(choice($._template_chars, $.escape_sequence, $.template_substitution)), '`'),\n\n\t\ttemplate_substitution: ($) => seq('${', $._expressions, '}'),\n\n\t\tregex: ($) =>\n\t\t\tseq(\n\t\t\t\t'/',\n\t\t\t\tfield('pattern', $.regex_pattern),\n\t\t\t\ttoken.immediate('/'),\n\t\t\t\toptional(field('flags', $.regex_flags))\n\t\t\t),\n\n\t\tregex_pattern: ($) =>\n\t\t\ttoken.immediate(\n\t\t\t\tprec(\n\t\t\t\t\t-1,\n\t\t\t\t\trepeat1(\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\t\t'[',\n\t\t\t\t\t\t\t\trepeat(\n\t\t\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t\t\tseq('\\\\', /./), // escaped character\n\t\t\t\t\t\t\t\t\t\t/[^\\]\\n\\\\]/ // any character besides ']' or '\\n'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t']'\n\t\t\t\t\t\t\t), // square-bracket-delimited character class\n\t\t\t\t\t\t\tseq('\\\\', /./), // escaped character\n\t\t\t\t\t\t\t/[^/\\\\\\[\\n]/ // any character besides '[', '\\', '/', '\\n'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tregex_flags: ($) => token.immediate(/[a-z]+/),\n\n\t\tnumber: ($) => {\n\t\t\tconst hex_literal = seq(choice('0x', '0X'), /[\\da-fA-F](_?[\\da-fA-F])*/);\n\n\t\t\tconst decimal_digits = /\\d(_?\\d)*/;\n\t\t\tconst signed_integer = seq(optional(choice('-', '+')), decimal_digits);\n\t\t\tconst exponent_part = seq(choice('e', 'E'), signed_integer);\n\n\t\t\tconst binary_literal = seq(choice('0b', '0B'), /[0-1](_?[0-1])*/);\n\n\t\t\tconst octal_literal = seq(choice('0o', '0O'), /[0-7](_?[0-7])*/);\n\n\t\t\tconst bigint_literal = seq(\n\t\t\t\tchoice(hex_literal, binary_literal, octal_literal, decimal_digits),\n\t\t\t\t'n'\n\t\t\t);\n\n\t\t\tconst decimal_integer_literal = choice(\n\t\t\t\t'0',\n\t\t\t\tseq(optional('0'), /[1-9]/, optional(seq(optional('_'), decimal_digits)))\n\t\t\t);\n\n\t\t\tconst swizzle_vals = choice('x', 'y', 'z', 'w', 'r', 'g', 'b', 'a');\n\n\t\t\tconst decimal_literal = choice(\n\t\t\t\tseq(\n\t\t\t\t\tdecimal_integer_literal,\n\t\t\t\t\t'.',\n\t\t\t\t\toptional(decimal_digits),\n\t\t\t\t\toptional(exponent_part),\n\t\t\t\t\toptional(repeat1(swizzle_vals))\n\t\t\t\t),\n\t\t\t\tseq('.', decimal_digits, optional(exponent_part)),\n\t\t\t\tseq(decimal_integer_literal, exponent_part),\n\t\t\t\tseq(decimal_digits)\n\t\t\t);\n\n\t\t\treturn token(\n\t\t\t\tchoice(hex_literal, decimal_literal, binary_literal, octal_literal, bigint_literal)\n\t\t\t);\n\t\t},\n\n\t\t// 'undefined' is syntactically a regular identifier in JavaScript.\n\t\t// However, its main use is as the read-only global variable whose\n\t\t// value is [undefined], for which there's no literal representation\n\t\t// unlike 'null'. We gave it its own rule so it's easy to\n\t\t// highlight in text editors and other applications.\n\t\t_identifier: ($) => choice($.undefined, $.identifier),\n\n\t\tidentifier: ($) => {\n\t\t\tconst alpha =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\tconst alphanumeric =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\treturn token(seq(alpha, repeat(alphanumeric)));\n\t\t},\n\n\t\tprivate_property_identifier: ($) => {\n\t\t\tconst alpha =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\tconst alphanumeric =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]|\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}/;\n\t\t\treturn token(seq('#', alpha, repeat(alphanumeric)));\n\t\t},\n\n\t\tmeta_property: ($) => seq('new', '.', 'target'),\n\n\t\tthis: ($) => 'this',\n\t\tsuper: ($) => 'super',\n\t\ttrue: ($) => 'true',\n\t\tfalse: ($) => 'false',\n\t\tnull: ($) => 'null',\n\t\tundefined: ($) => 'undefined',\n\n\t\t//\n\t\t// Expression components\n\t\t//\n\n\t\targuments: ($) => seq('(', commaSep(optional(choice($.expression, $.spread_element))), ')'),\n\n\t\tdecorator: ($) =>\n\t\t\tseq(\n\t\t\t\t'@',\n\t\t\t\tchoice(\n\t\t\t\t\t$.identifier,\n\t\t\t\t\talias($.decorator_member_expression, $.member_expression),\n\t\t\t\t\talias($.decorator_call_expression, $.call_expression)\n\t\t\t\t)\n\t\t\t),\n\n\t\tdecorator_member_expression: ($) =>\n\t\t\tprec(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\tchoice($.identifier, alias($.decorator_member_expression, $.member_expression))\n\t\t\t\t\t),\n\t\t\t\t\t'.',\n\t\t\t\t\tfield('property', alias($.identifier, $.property_identifier))\n\t\t\t\t)\n\t\t\t),\n\n\t\tdecorator_call_expression: ($) =>\n\t\t\tprec(\n\t\t\t\t'call',\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'function',\n\t\t\t\t\t\tchoice($.identifier, alias($.decorator_member_expression, $.member_expression))\n\t\t\t\t\t),\n\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\trepeat(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t// seq(field('member', $.method_definition), optional(';')),\n\t\t\t\t\t\tseq(field('member', $.field_definition), $._semicolon),\n\t\t\t\t\t\tfield('member', $.class_static_block),\n\t\t\t\t\t\tfield('template', $.glimmer_template)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t),\n\n\t\tfield_definition: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\toptional('static'),\n\t\t\t\tfield('property', $._property_name),\n\t\t\t\toptional($._initializer)\n\t\t\t),\n\n\t\tformal_parameters: ($) =>\n\t\t\tseq('(', optional(seq(commaSep1($._formal_parameter), optional(','))), ')'),\n\n\t\tclass_static_block: ($) => seq('static', field('body', $.statement_block)),\n\n\t\t// This negative dynamic precedence ensures that during error recovery,\n\t\t// unfinished constructs are generally treated as literal expressions,\n\t\t// not patterns.\n\t\tpattern: ($) => prec.dynamic(-1, choice($._lhs_expression, $.rest_pattern)),\n\n\t\trest_pattern: ($) => prec.right(seq('...', $._lhs_expression)),\n\n\t\tmethod_definition: ($) =>\n\t\t\tseq(\n\t\t\t\t// repeat(field('decorator', $.decorator)),\n\t\t\t\toptional('pub'),\n\t\t\t\toptional('static'),\n\t\t\t\toptional('async'),\n\t\t\t\t'fn',\n\t\t\t\t// optional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\tfield('body', $.statement_block)\n\t\t\t),\n\n\t\tpair: ($) => seq(field('key', $._property_name), ':', field('value', $.expression)),\n\n\t\tpair_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('key', $._property_name),\n\t\t\t\t':',\n\t\t\t\tfield('value', choice($.pattern, $.assignment_pattern))\n\t\t\t),\n\n\t\t_property_name: ($) =>\n\t\t\tchoice(\n\t\t\t\talias(choice($.identifier, $._reserved_identifier), $.property_identifier),\n\t\t\t\t$.private_property_identifier,\n\t\t\t\t$.string,\n\t\t\t\t$.number,\n\t\t\t\t$.computed_property_name\n\t\t\t),\n\n\t\tcomputed_property_name: ($) => seq('[', $.expression, ']'),\n\n\t\t_reserved_identifier: ($) => choice('get', 'set', 'async', 'static', 'export', 'pub'),\n\n\t\t_semicolon: ($) => choice($._automatic_semicolon, ';')\n\t}\n});\n\nfunction commaSep1(rule) {\n\treturn seq(rule, repeat(seq(',', rule)));\n}\n\nfunction commaSep(rule) {\n\treturn optional(commaSep1(rule));\n}\n"
  },
  {
    "path": "lang/tree-sitter/src/grammar.json",
    "content": "{\n  \"name\": \"shadeup\",\n  \"word\": \"identifier\",\n  \"rules\": {\n    \"program\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"hash_bang_line\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"hash_bang_line\": {\n      \"type\": \"PATTERN\",\n      \"value\": \"#!.*\"\n    },\n    \"export_statement\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"pub\"\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"FIELD\",\n                      \"name\": \"declaration\",\n                      \"content\": {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"declaration\"\n                      }\n                    }\n                  ]\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"export_clause\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"type\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"export_clause\"\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_from_clause\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"=\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"as\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            }\n          ]\n        }\n      ]\n    },\n    \"namespace_export\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"*\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"as\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_module_export_name\"\n        }\n      ]\n    },\n    \"export_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"export_specifier\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"export_specifier\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"export_specifier\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"type\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"typeof\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"name\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_module_export_name\"\n              }\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"as\"\n                    },\n                    {\n                      \"type\": \"FIELD\",\n                      \"name\": \"alias\",\n                      \"content\": {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_module_export_name\"\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"_module_export_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        }\n      ]\n    },\n    \"declaration\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"function_declaration\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"generator_function_declaration\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"struct_declaration\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"lexical_declaration\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"variable_declaration\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"function_signature\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"module\"\n        },\n        {\n          \"type\": \"PREC\",\n          \"value\": \"declaration\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"internal_module\"\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type_alias_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"enum_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"interface_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"impl_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"import_alias\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"ambient_declaration\"\n        }\n      ]\n    },\n    \"import\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"STRING\",\n        \"value\": \"import\"\n      }\n    },\n    \"import_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"import\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"import_clause\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_from_clause\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"import_clause\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"named_imports\"\n        }\n      ]\n    },\n    \"_from_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"from\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"source\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"string\"\n          }\n        }\n      ]\n    },\n    \"namespace_import\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"*\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"as\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"named_imports\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"import_specifier\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"import_specifier\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import_specifier\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"type\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"typeof\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"name\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              }\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"name\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_module_export_name\"\n                  }\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"as\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"alias\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  }\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"statement\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"export_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"import_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"debugger_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"statement_block\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"if_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"switch_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_in_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"while_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"do_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"try_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"with_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"break_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"continue_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"return_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"throw_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"empty_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"labeled_statement\"\n        }\n      ]\n    },\n    \"expression_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_expressions\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"variable_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"var\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"variable_declarator\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"variable_declarator\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"lexical_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"kind\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"let\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"const\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"variable_declarator\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"variable_declarator\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"variable_declarator\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"name\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_destructuring_pattern\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type_annotation\"\n                  },\n                  {\n                    \"type\": \"BLANK\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_initializer\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"PREC\",\n          \"value\": \"declaration\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"name\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                }\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"!\"\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"type\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_annotation\"\n                }\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"statement_block\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"{\"\n          },\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"}\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_automatic_semicolon\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"else_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"else\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"statement\"\n        }\n      ]\n    },\n    \"if_statement\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"if\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"condition\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"parenthesized_expression\"\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"consequence\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"alternative\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"else_clause\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"switch_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"switch\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"switch_body\"\n          }\n        }\n      ]\n    },\n    \"for_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"for\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"initializer\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"lexical_declaration\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"variable_declaration\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression_statement\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"empty_statement\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression_statement\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"empty_statement\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"increment\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_expressions\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"for_in_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"for\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"await\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_for_header\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"_for_header\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"left\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_lhs_expression\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"parenthesized_expression\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"kind\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"var\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"left\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_destructuring_pattern\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_initializer\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"kind\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"let\"\n                      },\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"const\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"left\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_destructuring_pattern\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"operator\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"in\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"of\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_expressions\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"while_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"while\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"do_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"do\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"while\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"try_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"try\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"handler\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"catch_clause\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"finalizer\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"finally_clause\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"with_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"with\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"object\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"break_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"break\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"label\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                \"named\": true,\n                \"value\": \"statement_identifier\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"continue_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"continue\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"label\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                \"named\": true,\n                \"value\": \"statement_identifier\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"debugger_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"debugger\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"return_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"return\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_expressions\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"throw_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"throw\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_expressions\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"empty_statement\": {\n      \"type\": \"STRING\",\n      \"value\": \";\"\n    },\n    \"labeled_statement\": {\n      \"type\": \"PREC_DYNAMIC\",\n      \"value\": -1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"label\",\n            \"content\": {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_reserved_identifier\"\n                  }\n                ]\n              },\n              \"named\": true,\n              \"value\": \"statement_identifier\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \":\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement\"\n            }\n          }\n        ]\n      }\n    },\n    \"switch_body\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"switch_case\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"switch_default\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"switch_case\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"case\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_expressions\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement\"\n            }\n          }\n        }\n      ]\n    },\n    \"switch_default\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"default\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement\"\n            }\n          }\n        }\n      ]\n    },\n    \"catch_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"catch\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"(\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"parameter\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_destructuring_pattern\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"FIELD\",\n                      \"name\": \"type\",\n                      \"content\": {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"type_annotation\"\n                      }\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \")\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"finally_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"finally\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"parenthesized_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"type\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"type_annotation\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"sequence_expression\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"parenthesized_expression_vector\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_expressions\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"construct_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"identifier\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"object\"\n          }\n        }\n      ]\n    },\n    \"_expressions\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"sequence_expression\"\n        }\n      ]\n    },\n    \"expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"as_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"satisfies_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"internal_module\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type_assertion\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"primary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"glimmer_template\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"assignment_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"augmented_assignment_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"await_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"unary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"binary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"ternary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"update_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"new_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"yield_expression\"\n        }\n      ]\n    },\n    \"primary_expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"construct_expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"subscript_expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"member_expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"parenthesized_expression_vector\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_identifier\"\n            },\n            {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_reserved_identifier\"\n              },\n              \"named\": true,\n              \"value\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"this\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"super\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"number\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"string\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"template_string\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"regex\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"true\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"false\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"null\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"import\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"object\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"array\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"arrow_function\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"generator_function\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"meta_property\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"call_expression\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"non_null_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"async_block\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"shader\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"workgroup\"\n        }\n      ]\n    },\n    \"yield_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"yield\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"*\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  },\n                  {\n                    \"type\": \"BLANK\"\n                  }\n                ]\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"object\": {\n      \"type\": \"PREC\",\n      \"value\": \"object\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"{\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"pair\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"spread_element\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"method_definition\"\n                          },\n                          {\n                            \"type\": \"ALIAS\",\n                            \"content\": {\n                              \"type\": \"CHOICE\",\n                              \"members\": [\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"identifier\"\n                                },\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"_reserved_identifier\"\n                                }\n                              ]\n                            },\n                            \"named\": true,\n                            \"value\": \"shorthand_property_identifier\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"REPEAT\",\n                    \"content\": {\n                      \"type\": \"SEQ\",\n                      \"members\": [\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \",\"\n                        },\n                        {\n                          \"type\": \"CHOICE\",\n                          \"members\": [\n                            {\n                              \"type\": \"CHOICE\",\n                              \"members\": [\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"pair\"\n                                },\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"spread_element\"\n                                },\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"method_definition\"\n                                },\n                                {\n                                  \"type\": \"ALIAS\",\n                                  \"content\": {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"SYMBOL\",\n                                        \"name\": \"identifier\"\n                                      },\n                                      {\n                                        \"type\": \"SYMBOL\",\n                                        \"name\": \"_reserved_identifier\"\n                                      }\n                                    ]\n                                  },\n                                  \"named\": true,\n                                  \"value\": \"shorthand_property_identifier\"\n                                }\n                              ]\n                            },\n                            {\n                              \"type\": \"BLANK\"\n                            }\n                          ]\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"}\"\n          }\n        ]\n      }\n    },\n    \"object_pattern\": {\n      \"type\": \"PREC\",\n      \"value\": \"object\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"{\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"pair_pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"rest_pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"object_assignment_pattern\"\n                          },\n                          {\n                            \"type\": \"ALIAS\",\n                            \"content\": {\n                              \"type\": \"CHOICE\",\n                              \"members\": [\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"identifier\"\n                                },\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"_reserved_identifier\"\n                                }\n                              ]\n                            },\n                            \"named\": true,\n                            \"value\": \"shorthand_property_identifier_pattern\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"REPEAT\",\n                    \"content\": {\n                      \"type\": \"SEQ\",\n                      \"members\": [\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \",\"\n                        },\n                        {\n                          \"type\": \"CHOICE\",\n                          \"members\": [\n                            {\n                              \"type\": \"CHOICE\",\n                              \"members\": [\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"pair_pattern\"\n                                },\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"rest_pattern\"\n                                },\n                                {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"object_assignment_pattern\"\n                                },\n                                {\n                                  \"type\": \"ALIAS\",\n                                  \"content\": {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"SYMBOL\",\n                                        \"name\": \"identifier\"\n                                      },\n                                      {\n                                        \"type\": \"SYMBOL\",\n                                        \"name\": \"_reserved_identifier\"\n                                      }\n                                    ]\n                                  },\n                                  \"named\": true,\n                                  \"value\": \"shorthand_property_identifier_pattern\"\n                                }\n                              ]\n                            },\n                            {\n                              \"type\": \"BLANK\"\n                            }\n                          ]\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"}\"\n          }\n        ]\n      }\n    },\n    \"assignment_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"left\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"pattern\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        }\n      ]\n    },\n    \"object_assignment_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"left\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_reserved_identifier\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"identifier\"\n                    }\n                  ]\n                },\n                \"named\": true,\n                \"value\": \"shorthand_property_identifier_pattern\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_destructuring_pattern\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        }\n      ]\n    },\n    \"array\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"expression\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"spread_element\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"expression\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"spread_element\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"BLANK\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"array_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"pattern\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"assignment_pattern\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"pattern\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"assignment_pattern\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"BLANK\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"glimmer_template\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"open_tag\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"glimmer_opening_tag\"\n              }\n            },\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"content\",\n              \"content\": {\n                \"type\": \"REPEAT\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_glimmer_template_content\"\n                }\n              }\n            },\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"close_tag\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"glimmer_closing_tag\"\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"open_tag\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"glimmer_opening_tag\"\n              }\n            },\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"close_tag\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"glimmer_closing_tag\"\n              }\n            }\n          ]\n        }\n      ]\n    },\n    \"_glimmer_template_content\": {\n      \"type\": \"PATTERN\",\n      \"value\": \".{1,}\"\n    },\n    \"glimmer_opening_tag\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<template>\"\n        }\n      ]\n    },\n    \"glimmer_closing_tag\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"</template>\"\n        }\n      ]\n    },\n    \"_jsx_element\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_self_closing_element\"\n        }\n      ]\n    },\n    \"jsx_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"open_tag\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_opening_element\"\n          }\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_child\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"close_tag\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_closing_element\"\n          }\n        }\n      ]\n    },\n    \"jsx_fragment\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_child\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"/\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"jsx_text\": {\n      \"type\": \"PATTERN\",\n      \"value\": \"[^{}<>]+\"\n    },\n    \"jsx_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"sequence_expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"spread_element\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"_jsx_child\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_text\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_fragment\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_expression\"\n        }\n      ]\n    },\n    \"jsx_opening_element\": {\n      \"type\": \"PREC_DYNAMIC\",\n      \"value\": -1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_start_opening_element\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \">\"\n          }\n        ]\n      }\n    },\n    \"jsx_identifier\": {\n      \"type\": \"PATTERN\",\n      \"value\": \"[a-zA-Z_$][a-zA-Z\\\\d_$]*-[a-zA-Z\\\\d_$\\\\-]*\"\n    },\n    \"_jsx_identifier\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_identifier\"\n          },\n          \"named\": true,\n          \"value\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"nested_identifier\": {\n      \"type\": \"PREC\",\n      \"value\": \"member\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"nested_identifier\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \".\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        ]\n      }\n    },\n    \"jsx_namespace_name\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_jsx_identifier\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_jsx_identifier\"\n        }\n      ]\n    },\n    \"_jsx_element_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_jsx_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"nested_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_namespace_name\"\n        }\n      ]\n    },\n    \"jsx_closing_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"/\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_element_name\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"jsx_self_closing_element\": {\n      \"type\": \"PREC_DYNAMIC\",\n      \"value\": -1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_start_opening_element\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"/\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \">\"\n          }\n        ]\n      }\n    },\n    \"_jsx_attribute\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_attribute\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_expression\"\n        }\n      ]\n    },\n    \"_jsx_attribute_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_identifier\"\n          },\n          \"named\": true,\n          \"value\": \"property_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_namespace_name\"\n        }\n      ]\n    },\n    \"jsx_attribute\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_jsx_attribute_name\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"=\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_jsx_attribute_value\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_jsx_attribute_value\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_fragment\"\n        }\n      ]\n    },\n    \"class\": {\n      \"type\": \"PREC\",\n      \"value\": \"literal\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"FIELD\",\n              \"name\": \"decorator\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator\"\n              }\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"class\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_identifier\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_parameters\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"class_heritage\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"class_body\"\n            }\n          }\n        ]\n      }\n    },\n    \"class_declaration\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"declaration\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"FIELD\",\n              \"name\": \"decorator\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator\"\n              }\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"class\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_identifier\"\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_parameters\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"class_heritage\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"class_body\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_automatic_semicolon\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"struct_declaration\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"declaration\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"FIELD\",\n              \"name\": \"decorator\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator\"\n              }\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"struct\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_identifier\"\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_parameters\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"class_body\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_automatic_semicolon\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"class_heritage\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"extends_clause\"\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"implements_clause\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"implements_clause\"\n        }\n      ]\n    },\n    \"function_declaration\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"declaration\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"async\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"fn\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            }\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_call_signature\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement_block\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_automatic_semicolon\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"generator_function\": {\n      \"type\": \"PREC\",\n      \"value\": \"literal\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"async\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"fn *\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_call_signature\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement_block\"\n            }\n          }\n        ]\n      }\n    },\n    \"generator_function_declaration\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"declaration\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"async\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"fn *\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            }\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_call_signature\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement_block\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_automatic_semicolon\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"arrow_function\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"async\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"parameter\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"ALIAS\",\n                    \"content\": {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_reserved_identifier\"\n                    },\n                    \"named\": true,\n                    \"value\": \"identifier\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_call_signature\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=>\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"statement_block\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"_call_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type_parameters\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"parameters\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"formal_parameters\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"return_type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type_annotation_arrow\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"asserts\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type_predicate_annotation\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"_formal_parameter\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"required_parameter\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"optional_parameter\"\n        }\n      ]\n    },\n    \"optional_chain\": {\n      \"type\": \"STRING\",\n      \"value\": \"?.\"\n    },\n    \"call_expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"PREC\",\n          \"value\": \"call\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"function\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"type_arguments\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"type_arguments\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"arguments\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"arguments\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"template_string\"\n                    }\n                  ]\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC\",\n          \"value\": \"member\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"function\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"primary_expression\"\n                }\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"?.\"\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"type_arguments\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"type_arguments\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"arguments\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"arguments\"\n                }\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"new_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"new\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"new\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"constructor\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"primary_expression\"\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_arguments\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_arguments\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"arguments\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"arguments\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"await_expression\": {\n      \"type\": \"PREC\",\n      \"value\": \"unary_void\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"await\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        ]\n      }\n    },\n    \"member_expression\": {\n      \"type\": \"PREC\",\n      \"value\": \"member\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"object\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"primary_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \".\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"::\"\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"optional_chain\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"optional_chain\"\n                }\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"property\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"private_property_identifier\"\n                },\n                {\n                  \"type\": \"ALIAS\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  },\n                  \"named\": true,\n                  \"value\": \"property_identifier\"\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"subscript_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"member\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"object\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"primary_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"optional_chain\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"optional_chain\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"[\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"index\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_expressions\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"]\"\n          }\n        ]\n      }\n    },\n    \"_lhs_expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"member_expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"subscript_expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_identifier\"\n            },\n            {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_reserved_identifier\"\n              },\n              \"named\": true,\n              \"value\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_destructuring_pattern\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"non_null_expression\"\n        }\n      ]\n    },\n    \"assignment_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"assign\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"left\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"parenthesized_expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_lhs_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"=\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"right\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"_augmented_assignment_lhs\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"member_expression\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"subscript_expression\"\n            },\n            {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_reserved_identifier\"\n              },\n              \"named\": true,\n              \"value\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"parenthesized_expression\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"non_null_expression\"\n        }\n      ]\n    },\n    \"augmented_assignment_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"assign\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"left\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_augmented_assignment_lhs\"\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"operator\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"+=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"-=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"*=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"/=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"%=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"^=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"&=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"|=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \">>=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \">>>=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"<<=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"**=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"&&=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"||=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"??=\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"right\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"_initializer\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        }\n      ]\n    },\n    \"_destructuring_pattern\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"object_pattern\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"array_pattern\"\n        }\n      ]\n    },\n    \"spread_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"...\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        }\n      ]\n    },\n    \"ternary_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": \"ternary\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"condition\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          },\n          {\n            \"type\": \"ALIAS\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_ternary_qmark\"\n            },\n            \"named\": false,\n            \"value\": \"?\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"consequence\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \":\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"alternative\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"binary_expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"logical_and\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"&&\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"logical_or\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"||\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_shift\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">>\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_shift\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">>>\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_shift\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"<<\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"bitwise_and\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"&\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"bitwise_xor\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"^\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"bitwise_or\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"|\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_plus\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"+\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_plus\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"-\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_times\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"*\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_times\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"/\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_times\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"%\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_RIGHT\",\n          \"value\": \"binary_exp\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"**\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_relation\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"<\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_relation\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"<=\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_equality\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"==\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_equality\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"===\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_equality\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"!=\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_equality\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"!==\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_relation\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">=\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_relation\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"ternary\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"??\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_relation\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"instanceof\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": \"binary_relation\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"in\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"unary_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"unary_void\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"operator\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"!\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"~\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"-\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"+\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"typeof\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"void\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"delete\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"argument\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"update_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"argument\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"++\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"--\"\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"++\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"--\"\n                    }\n                  ]\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"argument\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"sequence_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"left\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \",\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"sequence_expression\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"string\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"\\\"\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"ALIAS\",\n                    \"content\": {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"unescaped_double_string_fragment\"\n                    },\n                    \"named\": true,\n                    \"value\": \"string_fragment\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"escape_sequence\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"\\\"\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"'\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"ALIAS\",\n                    \"content\": {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"unescaped_single_string_fragment\"\n                    },\n                    \"named\": true,\n                    \"value\": \"string_fragment\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"escape_sequence\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"'\"\n            }\n          ]\n        }\n      ]\n    },\n    \"unescaped_double_string_fragment\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"PREC\",\n        \"value\": 1,\n        \"content\": {\n          \"type\": \"PATTERN\",\n          \"value\": \"[^\\\"\\\\\\\\]+\"\n        }\n      }\n    },\n    \"unescaped_single_string_fragment\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"PREC\",\n        \"value\": 1,\n        \"content\": {\n          \"type\": \"PATTERN\",\n          \"value\": \"[^'\\\\\\\\]+\"\n        }\n      }\n    },\n    \"escape_sequence\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"\\\\\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[^xu0-7]\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[0-7]{1,3}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"x[0-9a-fA-F]{2}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"u[0-9a-fA-F]{4}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"u{[0-9a-fA-F]+}\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"comment\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"//\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \".*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"/*\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[^*]*\\\\*+([^/*][^*]*\\\\*+)*\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"/\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"template_string\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"`\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_template_chars\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"escape_sequence\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"template_substitution\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"`\"\n        }\n      ]\n    },\n    \"template_substitution\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"${\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_expressions\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"regex\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"/\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"pattern\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"regex_pattern\"\n          }\n        },\n        {\n          \"type\": \"IMMEDIATE_TOKEN\",\n          \"content\": {\n            \"type\": \"STRING\",\n            \"value\": \"/\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"flags\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"regex_flags\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"regex_pattern\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"PREC\",\n        \"value\": -1,\n        \"content\": {\n          \"type\": \"REPEAT1\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"[\"\n                  },\n                  {\n                    \"type\": \"REPEAT\",\n                    \"content\": {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SEQ\",\n                          \"members\": [\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"\\\\\"\n                            },\n                            {\n                              \"type\": \"PATTERN\",\n                              \"value\": \".\"\n                            }\n                          ]\n                        },\n                        {\n                          \"type\": \"PATTERN\",\n                          \"value\": \"[^\\\\]\\\\n\\\\\\\\]\"\n                        }\n                      ]\n                    }\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"]\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"\\\\\"\n                  },\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \".\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[^/\\\\\\\\\\\\[\\\\n]\"\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"regex_flags\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"PATTERN\",\n        \"value\": \"[a-z]+\"\n      }\n    },\n    \"number\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0x\"\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0X\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[\\\\da-fA-F](_?[\\\\da-fA-F])*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"0\"\n                      },\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"0\"\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"PATTERN\",\n                            \"value\": \"[1-9]\"\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SEQ\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"_\"\n                                      },\n                                      {\n                                        \"type\": \"BLANK\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"PATTERN\",\n                                    \"value\": \"\\\\d(_?\\\\d)*\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \".\"\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"\\\\d(_?\\\\d)*\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"e\"\n                              },\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"E\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"SEQ\",\n                            \"members\": [\n                              {\n                                \"type\": \"CHOICE\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"-\"\n                                      },\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"+\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"BLANK\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"PATTERN\",\n                                \"value\": \"\\\\d(_?\\\\d)*\"\n                              }\n                            ]\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"REPEAT1\",\n                        \"content\": {\n                          \"type\": \"CHOICE\",\n                          \"members\": [\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"x\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"y\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"z\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"w\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"r\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"g\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"b\"\n                            },\n                            {\n                              \"type\": \"STRING\",\n                              \"value\": \"a\"\n                            }\n                          ]\n                        }\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \".\"\n                  },\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \"\\\\d(_?\\\\d)*\"\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"e\"\n                              },\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"E\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"SEQ\",\n                            \"members\": [\n                              {\n                                \"type\": \"CHOICE\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"-\"\n                                      },\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"+\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"BLANK\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"PATTERN\",\n                                \"value\": \"\\\\d(_?\\\\d)*\"\n                              }\n                            ]\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"0\"\n                      },\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"0\"\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"PATTERN\",\n                            \"value\": \"[1-9]\"\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SEQ\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"_\"\n                                      },\n                                      {\n                                        \"type\": \"BLANK\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"PATTERN\",\n                                    \"value\": \"\\\\d(_?\\\\d)*\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"e\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"E\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"CHOICE\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"STRING\",\n                                    \"value\": \"-\"\n                                  },\n                                  {\n                                    \"type\": \"STRING\",\n                                    \"value\": \"+\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"PATTERN\",\n                            \"value\": \"\\\\d(_?\\\\d)*\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \"\\\\d(_?\\\\d)*\"\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0b\"\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0B\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[0-1](_?[0-1])*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0o\"\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0O\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[0-7](_?[0-7])*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0x\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0X\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[\\\\da-fA-F](_?[\\\\da-fA-F])*\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0b\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0B\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[0-1](_?[0-1])*\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0o\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0O\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[0-7](_?[0-7])*\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \"\\\\d(_?\\\\d)*\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"u\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"_identifier\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"undefined\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"identifier\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"PATTERN\",\n            \"value\": \"[^\\\\x00-\\\\x1F\\\\s\\\\p{Zs}0-9:;`\\\"'@#.,|^&<=>+\\\\-*/\\\\\\\\%?!~()\\\\[\\\\]{}\\\\uFEFF\\\\u2060\\\\u200B]|\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\u\\\\{[0-9a-fA-F]+\\\\}\"\n          },\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"PATTERN\",\n              \"value\": \"[^\\\\x00-\\\\x1F\\\\s\\\\p{Zs}:;`\\\"'@#.,|^&<=>+\\\\-*/\\\\\\\\%?!~()\\\\[\\\\]{}\\\\uFEFF\\\\u2060\\\\u200B]|\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\u\\\\{[0-9a-fA-F]+\\\\}\"\n            }\n          }\n        ]\n      }\n    },\n    \"private_property_identifier\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"#\"\n          },\n          {\n            \"type\": \"PATTERN\",\n            \"value\": \"[^\\\\x00-\\\\x1F\\\\s\\\\p{Zs}0-9:;`\\\"'@#.,|^&<=>+\\\\-*/\\\\\\\\%?!~()\\\\[\\\\]{}\\\\uFEFF\\\\u2060\\\\u200B]|\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\u\\\\{[0-9a-fA-F]+\\\\}\"\n          },\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"PATTERN\",\n              \"value\": \"[^\\\\x00-\\\\x1F\\\\s\\\\p{Zs}:;`\\\"'@#.,|^&<=>+\\\\-*/\\\\\\\\%?!~()\\\\[\\\\]{}\\\\uFEFF\\\\u2060\\\\u200B]|\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\u\\\\{[0-9a-fA-F]+\\\\}\"\n            }\n          }\n        ]\n      }\n    },\n    \"meta_property\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"new\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \".\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"target\"\n        }\n      ]\n    },\n    \"this\": {\n      \"type\": \"STRING\",\n      \"value\": \"this\"\n    },\n    \"super\": {\n      \"type\": \"STRING\",\n      \"value\": \"super\"\n    },\n    \"true\": {\n      \"type\": \"STRING\",\n      \"value\": \"true\"\n    },\n    \"false\": {\n      \"type\": \"STRING\",\n      \"value\": \"false\"\n    },\n    \"null\": {\n      \"type\": \"STRING\",\n      \"value\": \"null\"\n    },\n    \"undefined\": {\n      \"type\": \"STRING\",\n      \"value\": \"undefined\"\n    },\n    \"arguments\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"expression\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"spread_element\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"expression\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"spread_element\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"BLANK\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"decorator\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"@\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator_member_expression\"\n              },\n              \"named\": true,\n              \"value\": \"member_expression\"\n            },\n            {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator_call_expression\"\n              },\n              \"named\": true,\n              \"value\": \"call_expression\"\n            }\n          ]\n        }\n      ]\n    },\n    \"decorator_member_expression\": {\n      \"type\": \"PREC\",\n      \"value\": \"member\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"object\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"ALIAS\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"decorator_member_expression\"\n                  },\n                  \"named\": true,\n                  \"value\": \"member_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \".\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"property\",\n            \"content\": {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              \"named\": true,\n              \"value\": \"property_identifier\"\n            }\n          }\n        ]\n      }\n    },\n    \"decorator_call_expression\": {\n      \"type\": \"PREC\",\n      \"value\": \"call\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"function\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"ALIAS\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"decorator_member_expression\"\n                  },\n                  \"named\": true,\n                  \"value\": \"member_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"arguments\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"arguments\"\n            }\n          }\n        ]\n      }\n    },\n    \"class_body\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator\"\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"method_definition\"\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_semicolon\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"method_signature\"\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_function_signature_automatic_semicolon\"\n                      },\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"class_static_block\"\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"abstract_method_signature\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"index_signature\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"method_signature\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"public_field_definition\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_semicolon\"\n                      },\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"field_definition\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"FIELD\",\n            \"name\": \"decorator\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"decorator\"\n            }\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"static\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"property\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"formal_parameters\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_formal_parameter\"\n                    },\n                    {\n                      \"type\": \"REPEAT\",\n                      \"content\": {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \",\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"_formal_parameter\"\n                          }\n                        ]\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \",\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"class_static_block\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"static\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"pattern\": {\n      \"type\": \"PREC_DYNAMIC\",\n      \"value\": -1,\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_lhs_expression\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"rest_pattern\"\n          }\n        ]\n      }\n    },\n    \"rest_pattern\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"...\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_lhs_expression\"\n          }\n        ]\n      }\n    },\n    \"method_definition\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"accessibility_modifier_member\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"static\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"override_modifier\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"fn\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_property_name\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"?\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_call_signature\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement_block\"\n            }\n          }\n        ]\n      }\n    },\n    \"pair\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"key\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        }\n      ]\n    },\n    \"pair_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"key\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"pattern\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"assignment_pattern\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"_property_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_reserved_identifier\"\n              }\n            ]\n          },\n          \"named\": true,\n          \"value\": \"property_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"private_property_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"number\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"computed_property_name\"\n        }\n      ]\n    },\n    \"computed_property_name\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"_reserved_identifier\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"declare\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"namespace\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"pub\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"public\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"private\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"protected\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"override\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"readonly\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"module\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"any\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"number\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"fn\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"struct\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float3x3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float2x2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float4x4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int3x3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int2x2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int4x4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"boolean\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"string\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"symbol\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"workgroup\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"export\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"fn\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"get\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"set\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"async\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"static\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"pub\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_semicolon\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_automatic_semicolon\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \";\"\n        }\n      ]\n    },\n    \"public_field_definition\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"declare\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"accessibility_modifier_member\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"static\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"override_modifier\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"readonly\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"abstract\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"readonly\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"readonly\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"abstract\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"?\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"!\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_jsx_start_opening_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"name\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_jsx_identifier\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"jsx_namespace_name\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"name\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"nested_identifier\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"type_arguments\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"type_arguments\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"FIELD\",\n            \"name\": \"attribute\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_jsx_attribute\"\n            }\n          }\n        }\n      ]\n    },\n    \"non_null_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"unary\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"!\"\n          }\n        ]\n      }\n    },\n    \"method_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"accessibility_modifier_member\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"override_modifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"fn\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_call_signature\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"abstract_method_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"accessibility_modifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"abstract\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"get\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"set\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"*\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_call_signature\"\n        }\n      ]\n    },\n    \"function_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"async\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"fn\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_call_signature\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_function_signature_automatic_semicolon\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type_assertion\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"unary\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type_arguments\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        ]\n      }\n    },\n    \"as_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"binary\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"as\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        ]\n      }\n    },\n    \"satisfies_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": \"binary\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"satisfies\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        ]\n      }\n    },\n    \"import_require_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"require\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"source\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"string\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"extends_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"extends\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"value\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"type_arguments\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"type_arguments\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"FIELD\",\n                        \"name\": \"value\",\n                        \"content\": {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"expression\"\n                        }\n                      },\n                      {\n                        \"type\": \"FIELD\",\n                        \"name\": \"type_arguments\",\n                        \"content\": {\n                          \"type\": \"CHOICE\",\n                          \"members\": [\n                            {\n                              \"type\": \"SYMBOL\",\n                              \"name\": \"type_arguments\"\n                            },\n                            {\n                              \"type\": \"BLANK\"\n                            }\n                          ]\n                        }\n                      }\n                    ]\n                  }\n                ]\n              }\n            }\n          ]\n        }\n      ]\n    },\n    \"implements_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"implements\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_type\"\n                  }\n                ]\n              }\n            }\n          ]\n        }\n      ]\n    },\n    \"ambient_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"declare\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"declaration\"\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"global\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"statement_block\"\n                }\n              ]\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"module\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \".\"\n                },\n                {\n                  \"type\": \"ALIAS\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  },\n                  \"named\": true,\n                  \"value\": \"property_identifier\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \":\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_semicolon\"\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"abstract_class_declaration\": {\n      \"type\": \"PREC\",\n      \"value\": \"declaration\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"FIELD\",\n              \"name\": \"decorator\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"decorator\"\n              }\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"abstract\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"class\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_identifier\"\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_parameters\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"class_heritage\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"class_body\"\n            }\n          }\n        ]\n      }\n    },\n    \"module\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"module\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_module\"\n        }\n      ]\n    },\n    \"internal_module\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"namespace\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_module\"\n        }\n      ]\n    },\n    \"_module\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"string\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"nested_identifier\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"statement_block\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"import_alias\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"import\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"nested_identifier\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"nested_type_identifier\": {\n      \"type\": \"PREC\",\n      \"value\": \"member\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"module\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"nested_identifier\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \".\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_identifier\"\n            }\n          }\n        ]\n      }\n    },\n    \"interface_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"trait\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type_identifier\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type_parameters\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"extends_type_clause\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"object_method_signature_type\"\n          }\n        }\n      ]\n    },\n    \"impl_for_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"nested_type_identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"generic_type\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"for\"\n        }\n      ]\n    },\n    \"impl_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"impl\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"for\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"impl_for_clause\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type_identifier\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"object_method_type\"\n          }\n        }\n      ]\n    },\n    \"extends_type_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"extends\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_type_identifier\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"nested_type_identifier\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"generic_type\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"FIELD\",\n                    \"name\": \"type\",\n                    \"content\": {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"_type_identifier\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"nested_type_identifier\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"generic_type\"\n                        }\n                      ]\n                    }\n                  }\n                ]\n              }\n            }\n          ]\n        }\n      ]\n    },\n    \"enum_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"const\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"enum\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"enum_body\"\n          }\n        }\n      ]\n    },\n    \"enum_body\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"FIELD\",\n                          \"name\": \"name\",\n                          \"content\": {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"_property_name\"\n                          }\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"enum_assignment\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"REPEAT\",\n                      \"content\": {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \",\"\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"FIELD\",\n                                \"name\": \"name\",\n                                \"content\": {\n                                  \"type\": \"SYMBOL\",\n                                  \"name\": \"_property_name\"\n                                }\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"enum_assignment\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \",\"\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"enum_assignment\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_initializer\"\n        }\n      ]\n    },\n    \"type_alias_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"type\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type_identifier\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type_parameters\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"accessibility_modifier\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"pub\"\n        }\n      ]\n    },\n    \"accessibility_modifier_member\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"pub\"\n        }\n      ]\n    },\n    \"override_modifier\": {\n      \"type\": \"STRING\",\n      \"value\": \"override\"\n    },\n    \"shader\": {\n      \"type\": \"PREC\",\n      \"value\": \"literal\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"shader\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"type_arguments\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_arguments\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"compute_size\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"compute_size\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement_block\"\n            }\n          }\n        ]\n      }\n    },\n    \"async_block\": {\n      \"type\": \"PREC\",\n      \"value\": \"literal\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"async\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement_block\"\n            }\n          }\n        ]\n      }\n    },\n    \"workgroup_member\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"?\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"!\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"workgroup\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"workgroup\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"FIELD\",\n                        \"name\": \"member\",\n                        \"content\": {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"workgroup_member\"\n                        }\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_semicolon\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"}\"\n            }\n          ]\n        }\n      ]\n    },\n    \"compute_size\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"x\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"number\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \",\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"y\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"number\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \",\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"z\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"number\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"required_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_parameter_name\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"optional_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_parameter_name\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"?\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_parameter_name\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"FIELD\",\n            \"name\": \"decorator\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"decorator\"\n            }\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"accessibility_modifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"override_modifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"readonly\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"pattern\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"pattern\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"this\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"omitting_type_annotation\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"-?:\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"opting_type_annotation\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"?:\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"type_annotation\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"type_annotation_arrow\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"->\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"asserts\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"asserts\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_predicate\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"this\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_primary_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"function_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"readonly_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"constructor_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"infer_type\"\n        }\n      ]\n    },\n    \"tuple_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"rest_pattern\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type_annotation\"\n          }\n        }\n      ]\n    },\n    \"optional_tuple_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"?\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type_annotation\"\n          }\n        }\n      ]\n    },\n    \"optional_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"?\"\n        }\n      ]\n    },\n    \"rest_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"...\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"_tuple_type_member\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"tuple_parameter\"\n          },\n          \"named\": true,\n          \"value\": \"required_parameter\"\n        },\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"optional_tuple_parameter\"\n          },\n          \"named\": true,\n          \"value\": \"optional_parameter\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"optional_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"rest_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"constructor_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"abstract\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"new\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_parameters\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"parameters\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"formal_parameters\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"=>\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            }\n          }\n        ]\n      }\n    },\n    \"_primary_type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"parenthesized_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"predefined_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"nested_type_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"generic_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"object_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"array_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"tuple_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"flow_maybe_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type_query\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"index_type_query\"\n        },\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"this\"\n          },\n          \"named\": true,\n          \"value\": \"this_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"existential_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"literal_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"lookup_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"conditional_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"template_literal_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"intersection_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"union_type\"\n        }\n      ]\n    },\n    \"template_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"${\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_primary_type\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"infer_type\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"template_literal_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"`\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_template_chars\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"template_type\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"`\"\n        }\n      ]\n    },\n    \"infer_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"infer\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type_identifier\"\n        }\n      ]\n    },\n    \"conditional_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"left\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"extends\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"right\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"?\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"consequence\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \":\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"alternative\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            }\n          }\n        ]\n      }\n    },\n    \"generic_type\": {\n      \"type\": \"PREC\",\n      \"value\": \"call\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"name\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_identifier\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"nested_type_identifier\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_arguments\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_arguments\"\n            }\n          }\n        ]\n      }\n    },\n    \"type_predicate\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"this\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"predefined_type\"\n                },\n                \"named\": true,\n                \"value\": \"identifier\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"is\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        }\n      ]\n    },\n    \"type_predicate_annotation\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \":\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_predicate\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_type_query_member_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"object\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_subscript_expression\"\n                },\n                \"named\": true,\n                \"value\": \"subscript_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_member_expression\"\n                },\n                \"named\": true,\n                \"value\": \"member_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_call_expression\"\n                },\n                \"named\": true,\n                \"value\": \"call_expression\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \".\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?.\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"::\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"property\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"private_property_identifier\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                \"named\": true,\n                \"value\": \"property_identifier\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"_type_query_subscript_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"object\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_subscript_expression\"\n                },\n                \"named\": true,\n                \"value\": \"subscript_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_member_expression\"\n                },\n                \"named\": true,\n                \"value\": \"member_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_call_expression\"\n                },\n                \"named\": true,\n                \"value\": \"call_expression\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?.\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"index\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"predefined_type\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"string\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"number\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"_type_query_call_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"function\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"import\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_member_expression\"\n                },\n                \"named\": true,\n                \"value\": \"member_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_subscript_expression\"\n                },\n                \"named\": true,\n                \"value\": \"subscript_expression\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"arguments\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"arguments\"\n          }\n        }\n      ]\n    },\n    \"type_query\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"typeof\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_subscript_expression\"\n                },\n                \"named\": true,\n                \"value\": \"subscript_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_member_expression\"\n                },\n                \"named\": true,\n                \"value\": \"member_expression\"\n              },\n              {\n                \"type\": \"ALIAS\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type_query_call_expression\"\n                },\n                \"named\": true,\n                \"value\": \"call_expression\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"index_type_query\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"keyof\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_primary_type\"\n        }\n      ]\n    },\n    \"lookup_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_primary_type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"mapped_type_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type_identifier\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"in\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"as\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"alias\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_type\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"literal_type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"ALIAS\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_number\"\n          },\n          \"named\": true,\n          \"value\": \"unary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"number\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"true\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"false\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"null\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"undefined\"\n        }\n      ]\n    },\n    \"_number\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"operator\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"-\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"+\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"argument\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"number\"\n            }\n          }\n        ]\n      }\n    },\n    \"existential_type\": {\n      \"type\": \"STRING\",\n      \"value\": \"*\"\n    },\n    \"flow_maybe_type\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"?\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_primary_type\"\n          }\n        ]\n      }\n    },\n    \"parenthesized_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"predefined_type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"any\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"number\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"boolean\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"string\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"symbol\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"void\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"unknown\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"string\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float3x3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float2x2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"float4x4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int3x3\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int2x2\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"int4x4\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"never\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"object\"\n        }\n      ]\n    },\n    \"type_arguments\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_type\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"object_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{|\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \",\"\n                        },\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \";\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"property_signature\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"call_signature\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"construct_signature\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"index_signature\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"method_signature\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"REPEAT\",\n                      \"content\": {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \",\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"_semicolon\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"property_signature\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"call_signature\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"construct_signature\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"index_signature\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"method_signature\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \",\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"_semicolon\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"}\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"|}\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object_field_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{|\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \",\"\n                        },\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \";\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"property_signature\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"REPEAT\",\n                      \"content\": {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \",\"\n                              },\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"_semicolon\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SYMBOL\",\n                                \"name\": \"property_signature\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"STRING\",\n                          \"value\": \",\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"_semicolon\"\n                        }\n                      ]\n                    },\n                    {\n                      \"type\": \"BLANK\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"}\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"|}\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object_method_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{|\"\n            }\n          ]\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"method_definition\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"}\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"|}\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object_method_signature_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"{|\"\n            }\n          ]\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"method_signature\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"}\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"|}\"\n            }\n          ]\n        }\n      ]\n    },\n    \"call_signature\": {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_call_signature\"\n    },\n    \"property_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"accessibility_modifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"static\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"override_modifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"readonly\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"type_parameters\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_parameter\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type_parameter\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"type_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type_identifier\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"constraint\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"constraint\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"default_type\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"default_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"constraint\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"extends\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \":\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"construct_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"abstract\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"new\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type_parameters\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"parameters\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"formal_parameters\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"index_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"sign\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"-\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"readonly\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"name\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      },\n                      {\n                        \"type\": \"ALIAS\",\n                        \"content\": {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"_reserved_identifier\"\n                        },\n                        \"named\": true,\n                        \"value\": \"identifier\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \":\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"index_type\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_type\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"mapped_type_clause\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"type\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_annotation\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"omitting_type_annotation\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"opting_type_annotation\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"array_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_primary_type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"tuple_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_tuple_type_member\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_tuple_type_member\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"readonly_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"readonly\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type\"\n        }\n      ]\n    },\n    \"union_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_type\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"|\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        ]\n      }\n    },\n    \"intersection_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_type\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"&\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_type\"\n          }\n        ]\n      }\n    },\n    \"function_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"type_parameters\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"parameters\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"formal_parameters\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"->\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"return_type\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_type\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_predicate\"\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"_type_identifier\": {\n      \"type\": \"ALIAS\",\n      \"content\": {\n        \"type\": \"SYMBOL\",\n        \"name\": \"identifier\"\n      },\n      \"named\": true,\n      \"value\": \"type_identifier\"\n    }\n  },\n  \"extras\": [\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"comment\"\n    },\n    {\n      \"type\": \"PATTERN\",\n      \"value\": \"[\\\\s\\\\p{Zs}\\\\uFEFF\\\\u2060\\\\u200B]\"\n    }\n  ],\n  \"conflicts\": [\n    [\n      \"primary_expression\",\n      \"_property_name\"\n    ],\n    [\n      \"primary_expression\",\n      \"_property_name\",\n      \"arrow_function\"\n    ],\n    [\n      \"primary_expression\",\n      \"arrow_function\"\n    ],\n    [\n      \"primary_expression\",\n      \"method_definition\"\n    ],\n    [\n      \"primary_expression\",\n      \"rest_pattern\"\n    ],\n    [\n      \"primary_expression\",\n      \"pattern\"\n    ],\n    [\n      \"primary_expression\",\n      \"_for_header\"\n    ],\n    [\n      \"array\",\n      \"array_pattern\"\n    ],\n    [\n      \"object\",\n      \"object_pattern\"\n    ],\n    [\n      \"assignment_expression\",\n      \"pattern\"\n    ],\n    [\n      \"assignment_expression\",\n      \"object_assignment_pattern\"\n    ],\n    [\n      \"labeled_statement\",\n      \"_property_name\"\n    ],\n    [\n      \"computed_property_name\",\n      \"array\"\n    ],\n    [\n      \"binary_expression\",\n      \"_initializer\"\n    ],\n    [\n      \"labeled_statement\",\n      \"workgroup\"\n    ],\n    [\n      \"call_expression\",\n      \"binary_expression\"\n    ],\n    [\n      \"call_expression\",\n      \"binary_expression\",\n      \"unary_expression\"\n    ],\n    [\n      \"call_expression\",\n      \"binary_expression\",\n      \"update_expression\"\n    ],\n    [\n      \"call_expression\",\n      \"binary_expression\",\n      \"type_assertion\"\n    ],\n    [\n      \"call_expression\",\n      \"binary_expression\",\n      \"await_expression\"\n    ],\n    [\n      \"class\"\n    ],\n    [\n      \"nested_identifier\",\n      \"nested_type_identifier\",\n      \"primary_expression\"\n    ],\n    [\n      \"nested_identifier\",\n      \"nested_type_identifier\"\n    ],\n    [\n      \"nested_identifier\",\n      \"member_expression\"\n    ],\n    [\n      \"primary_expression\",\n      \"array_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"array_type\",\n      \"tuple_type\"\n    ],\n    [\n      \"_call_signature\",\n      \"function_type\"\n    ],\n    [\n      \"_call_signature\",\n      \"constructor_type\"\n    ],\n    [\n      \"_primary_type\",\n      \"type_parameter\"\n    ],\n    [\n      \"jsx_opening_element\",\n      \"type_parameter\"\n    ],\n    [\n      \"jsx_opening_element\",\n      \"type_parameter\",\n      \"_primary_type\"\n    ],\n    [\n      \"jsx_opening_element\",\n      \"generic_type\"\n    ],\n    [\n      \"jsx_namespace_name\",\n      \"_primary_type\"\n    ],\n    [\n      \"export_statement\",\n      \"accessibility_modifier_member\"\n    ],\n    [\n      \"export_statement\",\n      \"accessibility_modifier\"\n    ],\n    [\n      \"accessibility_modifier_member\",\n      \"accessibility_modifier\"\n    ],\n    [\n      \"parenthesized_expression_vector\",\n      \"parenthesized_expression\"\n    ],\n    [\n      \"primary_expression\",\n      \"_parameter_name\"\n    ],\n    [\n      \"primary_expression\",\n      \"_parameter_name\",\n      \"predefined_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"_parameter_name\",\n      \"_primary_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"_parameter_name\",\n      \"array_type\",\n      \"tuple_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"literal_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"literal_type\",\n      \"pattern\"\n    ],\n    [\n      \"primary_expression\",\n      \"literal_type\",\n      \"rest_pattern\"\n    ],\n    [\n      \"primary_expression\",\n      \"predefined_type\",\n      \"rest_pattern\"\n    ],\n    [\n      \"primary_expression\",\n      \"_primary_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"generic_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"predefined_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"pattern\",\n      \"_primary_type\"\n    ],\n    [\n      \"primary_expression\",\n      \"pattern\",\n      \"predefined_type\"\n    ],\n    [\n      \"_parameter_name\",\n      \"predefined_type\"\n    ],\n    [\n      \"_parameter_name\",\n      \"_primary_type\"\n    ],\n    [\n      \"_parameter_name\",\n      \"assignment_expression\"\n    ],\n    [\n      \"_parameter_name\",\n      \"pattern\"\n    ],\n    [\n      \"pattern\",\n      \"_primary_type\"\n    ],\n    [\n      \"pattern\",\n      \"predefined_type\"\n    ],\n    [\n      \"optional_tuple_parameter\",\n      \"_primary_type\"\n    ],\n    [\n      \"optional_tuple_parameter\",\n      \"_primary_type\",\n      \"primary_expression\"\n    ],\n    [\n      \"rest_pattern\",\n      \"_primary_type\",\n      \"primary_expression\"\n    ],\n    [\n      \"rest_pattern\",\n      \"_primary_type\"\n    ],\n    [\n      \"object\",\n      \"object_type\"\n    ],\n    [\n      \"object\",\n      \"_property_name\"\n    ],\n    [\n      \"object\",\n      \"object_pattern\",\n      \"object_type\"\n    ],\n    [\n      \"object\",\n      \"object_pattern\",\n      \"_property_name\"\n    ],\n    [\n      \"object_pattern\",\n      \"object_type\"\n    ],\n    [\n      \"object_pattern\",\n      \"object_type\"\n    ],\n    [\n      \"object_pattern\",\n      \"_property_name\"\n    ],\n    [\n      \"function_declaration\",\n      \"_property_name\",\n      \"function_signature\"\n    ],\n    [\n      \"array\",\n      \"tuple_type\"\n    ],\n    [\n      \"array\",\n      \"array_pattern\",\n      \"tuple_type\"\n    ],\n    [\n      \"array_pattern\",\n      \"tuple_type\"\n    ],\n    [\n      \"template_literal_type\",\n      \"template_string\"\n    ]\n  ],\n  \"precedences\": [\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"member\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"call\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"update_expression\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"unary_void\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_exp\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_times\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_plus\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_shift\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_compare\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_relation\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary_equality\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"bitwise_and\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"bitwise_xor\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"bitwise_or\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"logical_and\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"logical_or\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"ternary\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"sequence_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"arrow_function\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"assign\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"member\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"new\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"call\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"declaration\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"literal\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"statement_block\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"object\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"import_statement\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"import\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"export_statement\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"call\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"unary\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"await_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"arrow_function\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"intersection_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"union_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"conditional_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"function_type\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"binary\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"type_predicate\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"readonly_type\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"mapped_type_clause\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"accessibility_modifier\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"unary_void\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"extends_clause\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"unary\"\n      },\n      {\n        \"type\": \"STRING\",\n        \"value\": \"assign\"\n      }\n    ],\n    [\n      {\n        \"type\": \"STRING\",\n        \"value\": \"declaration\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"predefined_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"unary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"flow_maybe_type\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"tuple_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"array_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"pattern\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"readonly_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"pattern\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"readonly_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"type_query\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"subscript_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"type_query\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type_query_subscript_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"nested_type_identifier\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"generic_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_primary_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"lookup_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"index_type_query\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"as_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"satisfies_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_primary_type\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type_query_member_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"member_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type_query_member_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type_query_subscript_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"subscript_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type_query_subscript_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"_type_query_call_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"type_query\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"override_modifier\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"primary_expression\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"decorator_call_expression\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"decorator\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"literal_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"pattern\"\n      }\n    ],\n    [\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"predefined_type\"\n      },\n      {\n        \"type\": \"SYMBOL\",\n        \"name\": \"pattern\"\n      }\n    ]\n  ],\n  \"externals\": [\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_automatic_semicolon\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_template_chars\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_ternary_qmark\"\n    },\n    {\n      \"type\": \"STRING\",\n      \"value\": \"||\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_function_signature_automatic_semicolon\"\n    }\n  ],\n  \"inline\": [\n    \"statement\",\n    \"_expressions\",\n    \"_semicolon\",\n    \"_identifier\",\n    \"_reserved_identifier\",\n    \"_jsx_attribute\",\n    \"_jsx_element_name\",\n    \"_jsx_child\",\n    \"_jsx_element\",\n    \"_jsx_attribute_name\",\n    \"_jsx_attribute_value\",\n    \"_jsx_identifier\",\n    \"_lhs_expression\",\n    \"_type_identifier\",\n    \"ReferenceError\",\n    \"_jsx_start_opening_element\"\n  ],\n  \"supertypes\": [\n    \"statement\",\n    \"declaration\",\n    \"expression\",\n    \"primary_expression\",\n    \"pattern\",\n    \"_primary_type\"\n  ]\n}\n\n"
  },
  {
    "path": "lang/tree-sitter/src/node-types.json",
    "content": "[\n  {\n    \"type\": \"_primary_type\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"array_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"conditional_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"existential_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"flow_maybe_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"generic_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"index_type_query\",\n        \"named\": true\n      },\n      {\n        \"type\": \"intersection_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"literal_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"lookup_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"nested_type_identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"object_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"parenthesized_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"predefined_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"template_literal_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"this_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"tuple_type\",\n        \"named\": true\n      },\n      {\n        \"type\": \"type_identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"type_query\",\n        \"named\": true\n      },\n      {\n        \"type\": \"union_type\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"declaration\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"ambient_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"enum_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"function_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"function_signature\",\n        \"named\": true\n      },\n      {\n        \"type\": \"generator_function_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"impl_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"import_alias\",\n        \"named\": true\n      },\n      {\n        \"type\": \"interface_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"internal_module\",\n        \"named\": true\n      },\n      {\n        \"type\": \"lexical_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"module\",\n        \"named\": true\n      },\n      {\n        \"type\": \"struct_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"type_alias_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"variable_declaration\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"expression\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"as_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"assignment_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"augmented_assignment_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"await_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"binary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"glimmer_template\",\n        \"named\": true\n      },\n      {\n        \"type\": \"internal_module\",\n        \"named\": true\n      },\n      {\n        \"type\": \"new_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"primary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"satisfies_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"ternary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"type_assertion\",\n        \"named\": true\n      },\n      {\n        \"type\": \"unary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"update_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"yield_expression\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"pattern\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"array_pattern\",\n        \"named\": true\n      },\n      {\n        \"type\": \"identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"member_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"non_null_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"object_pattern\",\n        \"named\": true\n      },\n      {\n        \"type\": \"rest_pattern\",\n        \"named\": true\n      },\n      {\n        \"type\": \"subscript_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"undefined\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"primary_expression\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"array\",\n        \"named\": true\n      },\n      {\n        \"type\": \"arrow_function\",\n        \"named\": true\n      },\n      {\n        \"type\": \"async_block\",\n        \"named\": true\n      },\n      {\n        \"type\": \"call_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"construct_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"false\",\n        \"named\": true\n      },\n      {\n        \"type\": \"generator_function\",\n        \"named\": true\n      },\n      {\n        \"type\": \"identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"import\",\n        \"named\": true\n      },\n      {\n        \"type\": \"member_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"meta_property\",\n        \"named\": true\n      },\n      {\n        \"type\": \"non_null_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"null\",\n        \"named\": true\n      },\n      {\n        \"type\": \"number\",\n        \"named\": true\n      },\n      {\n        \"type\": \"object\",\n        \"named\": true\n      },\n      {\n        \"type\": \"parenthesized_expression_vector\",\n        \"named\": true\n      },\n      {\n        \"type\": \"regex\",\n        \"named\": true\n      },\n      {\n        \"type\": \"shader\",\n        \"named\": true\n      },\n      {\n        \"type\": \"string\",\n        \"named\": true\n      },\n      {\n        \"type\": \"subscript_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"super\",\n        \"named\": true\n      },\n      {\n        \"type\": \"template_string\",\n        \"named\": true\n      },\n      {\n        \"type\": \"this\",\n        \"named\": true\n      },\n      {\n        \"type\": \"true\",\n        \"named\": true\n      },\n      {\n        \"type\": \"undefined\",\n        \"named\": true\n      },\n      {\n        \"type\": \"workgroup\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"statement\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"break_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"continue_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"debugger_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"do_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"empty_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"export_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"expression_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"for_in_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"for_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"if_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"import_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"labeled_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"return_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"statement_block\",\n        \"named\": true\n      },\n      {\n        \"type\": \"switch_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"throw_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"try_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"while_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"with_statement\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"abstract_method_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"accessibility_modifier\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"accessibility_modifier_member\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"ambient_declaration\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"declaration\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"property_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"statement_block\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"arguments\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"array\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"array_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"assignment_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"array_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"arrow_function\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameter\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"as_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"asserts\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"this\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_predicate\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"assignment_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"member_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"non_null_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"subscript_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"undefined\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"assignment_pattern\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"pattern\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"async_block\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"augmented_assignment_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"member_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"non_null_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"subscript_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"%=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&&=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"**=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"*=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"+=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"-=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"/=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<<=\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>=\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>>=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"??=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"^=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"|=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"||=\",\n            \"named\": false\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"await_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"binary_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"!=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"!==\",\n            \"named\": false\n          },\n          {\n            \"type\": \"%\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&&\",\n            \"named\": false\n          },\n          {\n            \"type\": \"*\",\n            \"named\": false\n          },\n          {\n            \"type\": \"**\",\n            \"named\": false\n          },\n          {\n            \"type\": \"+\",\n            \"named\": false\n          },\n          {\n            \"type\": \"-\",\n            \"named\": false\n          },\n          {\n            \"type\": \"/\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<<\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"==\",\n            \"named\": false\n          },\n          {\n            \"type\": \"===\",\n            \"named\": false\n          },\n          {\n            \"type\": \">\",\n            \"named\": false\n          },\n          {\n            \"type\": \">=\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>>\",\n            \"named\": false\n          },\n          {\n            \"type\": \"??\",\n            \"named\": false\n          },\n          {\n            \"type\": \"^\",\n            \"named\": false\n          },\n          {\n            \"type\": \"in\",\n            \"named\": false\n          },\n          {\n            \"type\": \"instanceof\",\n            \"named\": false\n          },\n          {\n            \"type\": \"|\",\n            \"named\": false\n          },\n          {\n            \"type\": \"||\",\n            \"named\": false\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"break_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"label\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"call_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"arguments\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"arguments\",\n            \"named\": true\n          },\n          {\n            \"type\": \"template_string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"function\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"call_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"catch_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameter\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"class_body\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"abstract_method_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"class_static_block\",\n          \"named\": true\n        },\n        {\n          \"type\": \"decorator\",\n          \"named\": true\n        },\n        {\n          \"type\": \"index_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"method_definition\",\n          \"named\": true\n        },\n        {\n          \"type\": \"method_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"public_field_definition\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"class_heritage\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"extends_clause\",\n          \"named\": true\n        },\n        {\n          \"type\": \"implements_clause\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"class_static_block\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"compute_size\",\n    \"named\": true,\n    \"fields\": {\n      \"x\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"number\",\n            \"named\": true\n          }\n        ]\n      },\n      \"y\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"number\",\n            \"named\": true\n          }\n        ]\n      },\n      \"z\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"number\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"computed_property_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"conditional_type\",\n    \"named\": true,\n    \"fields\": {\n      \"alternative\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"consequence\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"constraint\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"construct_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"object\",\n            \"named\": true\n          }\n        ]\n      },\n      \"identifier\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"construct_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"constructor_type\",\n    \"named\": true,\n    \"fields\": {\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"continue_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"label\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"debugger_statement\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"decorator\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"call_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"member_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"default_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"do_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"else_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"empty_statement\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"enum_assignment\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"enum_body\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"enum_assignment\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"enum_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"enum_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"existential_type\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"export_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"export_specifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"export_specifier\",\n    \"named\": true,\n    \"fields\": {\n      \"alias\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"export_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"declaration\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"declaration\",\n            \"named\": true\n          }\n        ]\n      },\n      \"source\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"export_clause\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"expression_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"extends_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"type_arguments\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": true,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"extends_type_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"type\": {\n        \"multiple\": true,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"generic_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_type_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"finally_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"flow_maybe_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"for_in_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"kind\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"const\",\n            \"named\": false\n          },\n          {\n            \"type\": \"let\",\n            \"named\": false\n          },\n          {\n            \"type\": \"var\",\n            \"named\": false\n          }\n        ]\n      },\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"member_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"non_null_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"subscript_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"undefined\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"in\",\n            \"named\": false\n          },\n          {\n            \"type\": \"of\",\n            \"named\": false\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"sequence_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"for_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"empty_statement\",\n            \"named\": true\n          },\n          {\n            \"type\": \"expression_statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"increment\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"sequence_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"initializer\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"empty_statement\",\n            \"named\": true\n          },\n          {\n            \"type\": \"expression_statement\",\n            \"named\": true\n          },\n          {\n            \"type\": \"lexical_declaration\",\n            \"named\": true\n          },\n          {\n            \"type\": \"variable_declaration\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"formal_parameters\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"optional_parameter\",\n          \"named\": true\n        },\n        {\n          \"type\": \"required_parameter\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"function_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"function_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"function_type\",\n    \"named\": true,\n    \"fields\": {\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"generator_function\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"generator_function_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"generic_type\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"nested_type_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_arguments\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"glimmer_closing_tag\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"glimmer_opening_tag\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"glimmer_template\",\n    \"named\": true,\n    \"fields\": {\n      \"close_tag\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"glimmer_closing_tag\",\n            \"named\": true\n          }\n        ]\n      },\n      \"open_tag\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"glimmer_opening_tag\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"identifier\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"if_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"alternative\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"else_clause\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"consequence\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"impl_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"object_method_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"for\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"impl_for_clause\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"impl_for_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"generic_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"nested_type_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"implements_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"import\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"import_alias\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"nested_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"import_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"named_imports\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"import_specifier\",\n    \"named\": true,\n    \"fields\": {\n      \"alias\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"import_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"source\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"import_clause\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"index_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"index_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"sign\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"-\",\n            \"named\": false\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"omitting_type_annotation\",\n            \"named\": true\n          },\n          {\n            \"type\": \"opting_type_annotation\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"mapped_type_clause\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"index_type_query\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"infer_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"interface_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"object_method_signature_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"extends_type_clause\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"internal_module\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"intersection_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_attribute\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"jsx_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_fragment\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_namespace_name\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_self_closing_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"property_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"string\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_closing_element\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_namespace_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"jsx_element\",\n    \"named\": true,\n    \"fields\": {\n      \"close_tag\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_closing_element\",\n            \"named\": true\n          }\n        ]\n      },\n      \"open_tag\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_opening_element\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"jsx_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_fragment\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_self_closing_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_text\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_fragment\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"jsx_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_fragment\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_self_closing_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_text\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_namespace_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_opening_element\",\n    \"named\": true,\n    \"fields\": {\n      \"attribute\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"jsx_attribute\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_namespace_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"jsx_self_closing_element\",\n    \"named\": true,\n    \"fields\": {\n      \"attribute\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"jsx_attribute\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_namespace_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"labeled_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"label\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"lexical_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"kind\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"const\",\n            \"named\": false\n          },\n          {\n            \"type\": \"let\",\n            \"named\": false\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"variable_declarator\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"literal_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"false\",\n          \"named\": true\n        },\n        {\n          \"type\": \"null\",\n          \"named\": true\n        },\n        {\n          \"type\": \"number\",\n          \"named\": true\n        },\n        {\n          \"type\": \"string\",\n          \"named\": true\n        },\n        {\n          \"type\": \"true\",\n          \"named\": true\n        },\n        {\n          \"type\": \"unary_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"undefined\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"lookup_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"mapped_type_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"alias\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"member_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"object\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"optional_chain\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"optional_chain\",\n            \"named\": true\n          }\n        ]\n      },\n      \"property\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"meta_property\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"method_definition\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier_member\",\n          \"named\": true\n        },\n        {\n          \"type\": \"override_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"method_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"return_type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"asserts\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_annotation_arrow\",\n            \"named\": true\n          },\n          {\n            \"type\": \"type_predicate_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier_member\",\n          \"named\": true\n        },\n        {\n          \"type\": \"override_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"module\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"named_imports\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"import_specifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"nested_identifier\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"nested_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"nested_type_identifier\",\n    \"named\": true,\n    \"fields\": {\n      \"module\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"nested_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"new_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"arguments\",\n            \"named\": true\n          }\n        ]\n      },\n      \"constructor\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"primary_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"non_null_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"method_definition\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pair\",\n          \"named\": true\n        },\n        {\n          \"type\": \"shorthand_property_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object_assignment_pattern\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"shorthand_property_identifier_pattern\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"object_method_signature_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"method_signature\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object_method_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"method_definition\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"object_assignment_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pair_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"rest_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"shorthand_property_identifier_pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"call_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"construct_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"index_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"method_signature\",\n          \"named\": true\n        },\n        {\n          \"type\": \"property_signature\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"omitting_type_annotation\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"opting_type_annotation\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"optional_chain\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"optional_parameter\",\n    \"named\": true,\n    \"fields\": {\n      \"decorator\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"decorator\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"pattern\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"this\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"override_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"optional_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"override_modifier\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"pair\",\n    \"named\": true,\n    \"fields\": {\n      \"key\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"pair_pattern\",\n    \"named\": true,\n    \"fields\": {\n      \"key\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"assignment_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"parenthesized_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"parenthesized_expression_vector\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"parenthesized_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"predefined_type\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"program\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"hash_bang_line\",\n          \"named\": true\n        },\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"property_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"override_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"public_field_definition\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier_member\",\n          \"named\": true\n        },\n        {\n          \"type\": \"override_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"readonly_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"regex\",\n    \"named\": true,\n    \"fields\": {\n      \"flags\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"regex_flags\",\n            \"named\": true\n          }\n        ]\n      },\n      \"pattern\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"regex_pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"required_parameter\",\n    \"named\": true,\n    \"fields\": {\n      \"decorator\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"decorator\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"rest_pattern\",\n            \"named\": true\n          }\n        ]\n      },\n      \"pattern\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"this\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"accessibility_modifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"override_modifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"rest_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"array_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"member_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"non_null_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"object_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"subscript_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"undefined\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"rest_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"return_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"satisfies_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"sequence_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"sequence_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"shader\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"compute_size\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"compute_size\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_arguments\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"spread_element\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"statement_block\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"string\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"escape_sequence\",\n          \"named\": true\n        },\n        {\n          \"type\": \"string_fragment\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"struct_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"class_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"decorator\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"decorator\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"subscript_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"index\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"predefined_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"sequence_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"object\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"optional_chain\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"optional_chain\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"switch_body\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"switch_case\",\n          \"named\": true\n        },\n        {\n          \"type\": \"switch_default\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"switch_case\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"sequence_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"switch_default\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"switch_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"switch_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"template_literal_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"template_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"template_string\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"escape_sequence\",\n          \"named\": true\n        },\n        {\n          \"type\": \"template_substitution\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"template_substitution\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"template_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"ternary_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"alternative\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"consequence\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"throw_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"sequence_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"try_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"finalizer\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"finally_clause\",\n            \"named\": true\n          }\n        ]\n      },\n      \"handler\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"catch_clause\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"tuple_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"optional_parameter\",\n          \"named\": true\n        },\n        {\n          \"type\": \"optional_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"required_parameter\",\n          \"named\": true\n        },\n        {\n          \"type\": \"rest_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_alias_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"type_annotation\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_annotation_arrow\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_arguments\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_assertion\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_arguments\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_parameter\",\n    \"named\": true,\n    \"fields\": {\n      \"constraint\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"constraint\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"type_identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"default_type\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"type_parameters\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type_parameter\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_predicate\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"this\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"_primary_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"constructor_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"function_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"infer_type\",\n            \"named\": true\n          },\n          {\n            \"type\": \"readonly_type\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"type_predicate_annotation\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type_predicate\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_query\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"call_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"member_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"subscript_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"unary_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"argument\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"!\",\n            \"named\": false\n          },\n          {\n            \"type\": \"+\",\n            \"named\": false\n          },\n          {\n            \"type\": \"-\",\n            \"named\": false\n          },\n          {\n            \"type\": \"delete\",\n            \"named\": false\n          },\n          {\n            \"type\": \"typeof\",\n            \"named\": false\n          },\n          {\n            \"type\": \"void\",\n            \"named\": false\n          },\n          {\n            \"type\": \"~\",\n            \"named\": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"union_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"_primary_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"constructor_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"infer_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"readonly_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"update_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"argument\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"++\",\n            \"named\": false\n          },\n          {\n            \"type\": \"--\",\n            \"named\": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"variable_declaration\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"variable_declarator\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"variable_declarator\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"while_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"with_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"object\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"workgroup\",\n    \"named\": true,\n    \"fields\": {\n      \"member\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"workgroup_member\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"workgroup_member\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"computed_property_name\",\n            \"named\": true\n          },\n          {\n            \"type\": \"number\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"property_identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_annotation\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"yield_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"!\",\n    \"named\": false\n  },\n  {\n    \"type\": \"!=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"!==\",\n    \"named\": false\n  },\n  {\n    \"type\": \"\\\"\",\n    \"named\": false\n  },\n  {\n    \"type\": \"${\",\n    \"named\": false\n  },\n  {\n    \"type\": \"%\",\n    \"named\": false\n  },\n  {\n    \"type\": \"%=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&&\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&&=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"'\",\n    \"named\": false\n  },\n  {\n    \"type\": \"(\",\n    \"named\": false\n  },\n  {\n    \"type\": \")\",\n    \"named\": false\n  },\n  {\n    \"type\": \"*\",\n    \"named\": false\n  },\n  {\n    \"type\": \"**\",\n    \"named\": false\n  },\n  {\n    \"type\": \"**=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"*=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"+\",\n    \"named\": false\n  },\n  {\n    \"type\": \"++\",\n    \"named\": false\n  },\n  {\n    \"type\": \"+=\",\n    \"named\": false\n  },\n  {\n    \"type\": \",\",\n    \"named\": false\n  },\n  {\n    \"type\": \"-\",\n    \"named\": false\n  },\n  {\n    \"type\": \"--\",\n    \"named\": false\n  },\n  {\n    \"type\": \"-=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"->\",\n    \"named\": false\n  },\n  {\n    \"type\": \"-?:\",\n    \"named\": false\n  },\n  {\n    \"type\": \".\",\n    \"named\": false\n  },\n  {\n    \"type\": \"...\",\n    \"named\": false\n  },\n  {\n    \"type\": \"/\",\n    \"named\": false\n  },\n  {\n    \"type\": \"/=\",\n    \"named\": false\n  },\n  {\n    \"type\": \":\",\n    \"named\": false\n  },\n  {\n    \"type\": \"::\",\n    \"named\": false\n  },\n  {\n    \"type\": \";\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<\",\n    \"named\": false\n  },\n  {\n    \"type\": \"</template>\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<<\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<<=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<template>\",\n    \"named\": false\n  },\n  {\n    \"type\": \"=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"==\",\n    \"named\": false\n  },\n  {\n    \"type\": \"===\",\n    \"named\": false\n  },\n  {\n    \"type\": \"=>\",\n    \"named\": false\n  },\n  {\n    \"type\": \">\",\n    \"named\": false\n  },\n  {\n    \"type\": \">=\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>=\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>>\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>>=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"?\",\n    \"named\": false\n  },\n  {\n    \"type\": \"?.\",\n    \"named\": false\n  },\n  {\n    \"type\": \"?:\",\n    \"named\": false\n  },\n  {\n    \"type\": \"??\",\n    \"named\": false\n  },\n  {\n    \"type\": \"??=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"@\",\n    \"named\": false\n  },\n  {\n    \"type\": \"[\",\n    \"named\": false\n  },\n  {\n    \"type\": \"]\",\n    \"named\": false\n  },\n  {\n    \"type\": \"^\",\n    \"named\": false\n  },\n  {\n    \"type\": \"^=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"`\",\n    \"named\": false\n  },\n  {\n    \"type\": \"abstract\",\n    \"named\": false\n  },\n  {\n    \"type\": \"any\",\n    \"named\": false\n  },\n  {\n    \"type\": \"as\",\n    \"named\": false\n  },\n  {\n    \"type\": \"asserts\",\n    \"named\": false\n  },\n  {\n    \"type\": \"async\",\n    \"named\": false\n  },\n  {\n    \"type\": \"await\",\n    \"named\": false\n  },\n  {\n    \"type\": \"boolean\",\n    \"named\": false\n  },\n  {\n    \"type\": \"break\",\n    \"named\": false\n  },\n  {\n    \"type\": \"case\",\n    \"named\": false\n  },\n  {\n    \"type\": \"catch\",\n    \"named\": false\n  },\n  {\n    \"type\": \"class\",\n    \"named\": false\n  },\n  {\n    \"type\": \"comment\",\n    \"named\": true\n  },\n  {\n    \"type\": \"const\",\n    \"named\": false\n  },\n  {\n    \"type\": \"continue\",\n    \"named\": false\n  },\n  {\n    \"type\": \"debugger\",\n    \"named\": false\n  },\n  {\n    \"type\": \"declare\",\n    \"named\": false\n  },\n  {\n    \"type\": \"default\",\n    \"named\": false\n  },\n  {\n    \"type\": \"delete\",\n    \"named\": false\n  },\n  {\n    \"type\": \"do\",\n    \"named\": false\n  },\n  {\n    \"type\": \"else\",\n    \"named\": false\n  },\n  {\n    \"type\": \"enum\",\n    \"named\": false\n  },\n  {\n    \"type\": \"escape_sequence\",\n    \"named\": true\n  },\n  {\n    \"type\": \"export\",\n    \"named\": false\n  },\n  {\n    \"type\": \"extends\",\n    \"named\": false\n  },\n  {\n    \"type\": \"false\",\n    \"named\": true\n  },\n  {\n    \"type\": \"finally\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float2\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float2x2\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float3\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float3x3\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float4\",\n    \"named\": false\n  },\n  {\n    \"type\": \"float4x4\",\n    \"named\": false\n  },\n  {\n    \"type\": \"fn\",\n    \"named\": false\n  },\n  {\n    \"type\": \"fn *\",\n    \"named\": false\n  },\n  {\n    \"type\": \"for\",\n    \"named\": false\n  },\n  {\n    \"type\": \"from\",\n    \"named\": false\n  },\n  {\n    \"type\": \"get\",\n    \"named\": false\n  },\n  {\n    \"type\": \"global\",\n    \"named\": false\n  },\n  {\n    \"type\": \"hash_bang_line\",\n    \"named\": true\n  },\n  {\n    \"type\": \"if\",\n    \"named\": false\n  },\n  {\n    \"type\": \"impl\",\n    \"named\": false\n  },\n  {\n    \"type\": \"implements\",\n    \"named\": false\n  },\n  {\n    \"type\": \"import\",\n    \"named\": false\n  },\n  {\n    \"type\": \"in\",\n    \"named\": false\n  },\n  {\n    \"type\": \"infer\",\n    \"named\": false\n  },\n  {\n    \"type\": \"instanceof\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int2\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int2x2\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int3\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int3x3\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int4\",\n    \"named\": false\n  },\n  {\n    \"type\": \"int4x4\",\n    \"named\": false\n  },\n  {\n    \"type\": \"is\",\n    \"named\": false\n  },\n  {\n    \"type\": \"jsx_text\",\n    \"named\": true\n  },\n  {\n    \"type\": \"keyof\",\n    \"named\": false\n  },\n  {\n    \"type\": \"let\",\n    \"named\": false\n  },\n  {\n    \"type\": \"module\",\n    \"named\": false\n  },\n  {\n    \"type\": \"namespace\",\n    \"named\": false\n  },\n  {\n    \"type\": \"never\",\n    \"named\": false\n  },\n  {\n    \"type\": \"new\",\n    \"named\": false\n  },\n  {\n    \"type\": \"null\",\n    \"named\": true\n  },\n  {\n    \"type\": \"number\",\n    \"named\": true\n  },\n  {\n    \"type\": \"number\",\n    \"named\": false\n  },\n  {\n    \"type\": \"object\",\n    \"named\": false\n  },\n  {\n    \"type\": \"of\",\n    \"named\": false\n  },\n  {\n    \"type\": \"override\",\n    \"named\": false\n  },\n  {\n    \"type\": \"private\",\n    \"named\": false\n  },\n  {\n    \"type\": \"private_property_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"property_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"protected\",\n    \"named\": false\n  },\n  {\n    \"type\": \"pub\",\n    \"named\": false\n  },\n  {\n    \"type\": \"public\",\n    \"named\": false\n  },\n  {\n    \"type\": \"readonly\",\n    \"named\": false\n  },\n  {\n    \"type\": \"regex_flags\",\n    \"named\": true\n  },\n  {\n    \"type\": \"regex_pattern\",\n    \"named\": true\n  },\n  {\n    \"type\": \"require\",\n    \"named\": false\n  },\n  {\n    \"type\": \"return\",\n    \"named\": false\n  },\n  {\n    \"type\": \"satisfies\",\n    \"named\": false\n  },\n  {\n    \"type\": \"set\",\n    \"named\": false\n  },\n  {\n    \"type\": \"shader\",\n    \"named\": false\n  },\n  {\n    \"type\": \"shorthand_property_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"shorthand_property_identifier_pattern\",\n    \"named\": true\n  },\n  {\n    \"type\": \"statement_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"static\",\n    \"named\": false\n  },\n  {\n    \"type\": \"string\",\n    \"named\": false\n  },\n  {\n    \"type\": \"string_fragment\",\n    \"named\": true\n  },\n  {\n    \"type\": \"struct\",\n    \"named\": false\n  },\n  {\n    \"type\": \"super\",\n    \"named\": true\n  },\n  {\n    \"type\": \"switch\",\n    \"named\": false\n  },\n  {\n    \"type\": \"symbol\",\n    \"named\": false\n  },\n  {\n    \"type\": \"target\",\n    \"named\": false\n  },\n  {\n    \"type\": \"this\",\n    \"named\": true\n  },\n  {\n    \"type\": \"this_type\",\n    \"named\": true\n  },\n  {\n    \"type\": \"throw\",\n    \"named\": false\n  },\n  {\n    \"type\": \"trait\",\n    \"named\": false\n  },\n  {\n    \"type\": \"true\",\n    \"named\": true\n  },\n  {\n    \"type\": \"try\",\n    \"named\": false\n  },\n  {\n    \"type\": \"type\",\n    \"named\": false\n  },\n  {\n    \"type\": \"type_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"typeof\",\n    \"named\": false\n  },\n  {\n    \"type\": \"undefined\",\n    \"named\": true\n  },\n  {\n    \"type\": \"unknown\",\n    \"named\": false\n  },\n  {\n    \"type\": \"var\",\n    \"named\": false\n  },\n  {\n    \"type\": \"void\",\n    \"named\": false\n  },\n  {\n    \"type\": \"while\",\n    \"named\": false\n  },\n  {\n    \"type\": \"with\",\n    \"named\": false\n  },\n  {\n    \"type\": \"workgroup\",\n    \"named\": false\n  },\n  {\n    \"type\": \"yield\",\n    \"named\": false\n  },\n  {\n    \"type\": \"{\",\n    \"named\": false\n  },\n  {\n    \"type\": \"{|\",\n    \"named\": false\n  },\n  {\n    \"type\": \"|\",\n    \"named\": false\n  },\n  {\n    \"type\": \"|=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"||\",\n    \"named\": false\n  },\n  {\n    \"type\": \"||=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"|}\",\n    \"named\": false\n  },\n  {\n    \"type\": \"}\",\n    \"named\": false\n  },\n  {\n    \"type\": \"~\",\n    \"named\": false\n  }\n]"
  },
  {
    "path": "lang/tree-sitter/src/parser.c",
    "content": "#include <tree_sitter/parser.h>\n\n#if defined(__GNUC__) || defined(__clang__)\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wmissing-field-initializers\"\n#endif\n\n#define LANGUAGE_VERSION 14\n#define STATE_COUNT 3699\n#define LARGE_STATE_COUNT 923\n#define SYMBOL_COUNT 390\n#define ALIAS_COUNT 6\n#define TOKEN_COUNT 182\n#define EXTERNAL_TOKEN_COUNT 5\n#define FIELD_COUNT 50\n#define MAX_ALIAS_SEQUENCE_LENGTH 9\n#define PRODUCTION_ID_COUNT 236\n\nenum {\n  sym_identifier = 1,\n  sym_hash_bang_line = 2,\n  anon_sym_pub = 3,\n  anon_sym_export = 4,\n  anon_sym_type = 5,\n  anon_sym_EQ = 6,\n  anon_sym_as = 7,\n  anon_sym_namespace = 8,\n  anon_sym_STAR = 9,\n  anon_sym_LBRACE = 10,\n  anon_sym_COMMA = 11,\n  anon_sym_RBRACE = 12,\n  anon_sym_typeof = 13,\n  anon_sym_import = 14,\n  anon_sym_from = 15,\n  anon_sym_var = 16,\n  anon_sym_let = 17,\n  anon_sym_const = 18,\n  anon_sym_BANG = 19,\n  anon_sym_else = 20,\n  anon_sym_if = 21,\n  anon_sym_switch = 22,\n  anon_sym_for = 23,\n  anon_sym_LPAREN = 24,\n  anon_sym_RPAREN = 25,\n  anon_sym_await = 26,\n  anon_sym_in = 27,\n  anon_sym_of = 28,\n  anon_sym_while = 29,\n  anon_sym_do = 30,\n  anon_sym_try = 31,\n  anon_sym_with = 32,\n  anon_sym_break = 33,\n  anon_sym_continue = 34,\n  anon_sym_debugger = 35,\n  anon_sym_return = 36,\n  anon_sym_throw = 37,\n  anon_sym_SEMI = 38,\n  anon_sym_COLON = 39,\n  anon_sym_case = 40,\n  anon_sym_default = 41,\n  anon_sym_catch = 42,\n  anon_sym_finally = 43,\n  anon_sym_yield = 44,\n  anon_sym_LBRACK = 45,\n  anon_sym_RBRACK = 46,\n  sym__glimmer_template_content = 47,\n  anon_sym_LTtemplate_GT = 48,\n  anon_sym_LT_SLASHtemplate_GT = 49,\n  anon_sym_LT = 50,\n  anon_sym_GT = 51,\n  anon_sym_SLASH = 52,\n  anon_sym_DOT = 53,\n  anon_sym_class = 54,\n  anon_sym_struct = 55,\n  anon_sym_async = 56,\n  anon_sym_fn = 57,\n  anon_sym_fn_STAR = 58,\n  anon_sym_EQ_GT = 59,\n  anon_sym_QMARK_DOT = 60,\n  anon_sym_new = 61,\n  anon_sym_COLON_COLON = 62,\n  anon_sym_PLUS_EQ = 63,\n  anon_sym_DASH_EQ = 64,\n  anon_sym_STAR_EQ = 65,\n  anon_sym_SLASH_EQ = 66,\n  anon_sym_PERCENT_EQ = 67,\n  anon_sym_CARET_EQ = 68,\n  anon_sym_AMP_EQ = 69,\n  anon_sym_PIPE_EQ = 70,\n  anon_sym_GT_GT_EQ = 71,\n  anon_sym_GT_GT_GT_EQ = 72,\n  anon_sym_LT_LT_EQ = 73,\n  anon_sym_STAR_STAR_EQ = 74,\n  anon_sym_AMP_AMP_EQ = 75,\n  anon_sym_PIPE_PIPE_EQ = 76,\n  anon_sym_QMARK_QMARK_EQ = 77,\n  anon_sym_DOT_DOT_DOT = 78,\n  anon_sym_AMP_AMP = 79,\n  anon_sym_PIPE_PIPE = 80,\n  anon_sym_GT_GT = 81,\n  anon_sym_GT_GT_GT = 82,\n  anon_sym_LT_LT = 83,\n  anon_sym_AMP = 84,\n  anon_sym_CARET = 85,\n  anon_sym_PIPE = 86,\n  anon_sym_PLUS = 87,\n  anon_sym_DASH = 88,\n  anon_sym_PERCENT = 89,\n  anon_sym_STAR_STAR = 90,\n  anon_sym_LT_EQ = 91,\n  anon_sym_EQ_EQ = 92,\n  anon_sym_EQ_EQ_EQ = 93,\n  anon_sym_BANG_EQ = 94,\n  anon_sym_BANG_EQ_EQ = 95,\n  anon_sym_GT_EQ = 96,\n  anon_sym_QMARK_QMARK = 97,\n  anon_sym_instanceof = 98,\n  anon_sym_TILDE = 99,\n  anon_sym_void = 100,\n  anon_sym_delete = 101,\n  anon_sym_PLUS_PLUS = 102,\n  anon_sym_DASH_DASH = 103,\n  anon_sym_DQUOTE = 104,\n  anon_sym_SQUOTE = 105,\n  sym_unescaped_double_string_fragment = 106,\n  sym_unescaped_single_string_fragment = 107,\n  sym_escape_sequence = 108,\n  sym_comment = 109,\n  anon_sym_BQUOTE = 110,\n  anon_sym_DOLLAR_LBRACE = 111,\n  anon_sym_SLASH2 = 112,\n  sym_regex_pattern = 113,\n  sym_regex_flags = 114,\n  sym_number = 115,\n  sym_private_property_identifier = 116,\n  anon_sym_target = 117,\n  sym_this = 118,\n  sym_super = 119,\n  sym_true = 120,\n  sym_false = 121,\n  sym_null = 122,\n  sym_undefined = 123,\n  anon_sym_AT = 124,\n  anon_sym_static = 125,\n  anon_sym_QMARK = 126,\n  anon_sym_declare = 127,\n  anon_sym_public = 128,\n  anon_sym_private = 129,\n  anon_sym_protected = 130,\n  anon_sym_override = 131,\n  anon_sym_readonly = 132,\n  anon_sym_module = 133,\n  anon_sym_any = 134,\n  anon_sym_number = 135,\n  anon_sym_int = 136,\n  anon_sym_float = 137,\n  anon_sym_float2 = 138,\n  anon_sym_float3 = 139,\n  anon_sym_float4 = 140,\n  anon_sym_float3x3 = 141,\n  anon_sym_float2x2 = 142,\n  anon_sym_float4x4 = 143,\n  anon_sym_int2 = 144,\n  anon_sym_int3 = 145,\n  anon_sym_int4 = 146,\n  anon_sym_int3x3 = 147,\n  anon_sym_int2x2 = 148,\n  anon_sym_int4x4 = 149,\n  anon_sym_boolean = 150,\n  anon_sym_string = 151,\n  anon_sym_symbol = 152,\n  anon_sym_workgroup = 153,\n  anon_sym_get = 154,\n  anon_sym_set = 155,\n  anon_sym_abstract = 156,\n  anon_sym_satisfies = 157,\n  anon_sym_require = 158,\n  anon_sym_extends = 159,\n  anon_sym_implements = 160,\n  anon_sym_global = 161,\n  anon_sym_trait = 162,\n  anon_sym_impl = 163,\n  anon_sym_enum = 164,\n  anon_sym_shader = 165,\n  anon_sym_DASH_QMARK_COLON = 166,\n  anon_sym_QMARK_COLON = 167,\n  anon_sym_DASH_GT = 168,\n  anon_sym_asserts = 169,\n  anon_sym_infer = 170,\n  anon_sym_is = 171,\n  anon_sym_keyof = 172,\n  anon_sym_unknown = 173,\n  anon_sym_never = 174,\n  anon_sym_object = 175,\n  anon_sym_LBRACE_PIPE = 176,\n  anon_sym_PIPE_RBRACE = 177,\n  sym__automatic_semicolon = 178,\n  sym__template_chars = 179,\n  sym__ternary_qmark = 180,\n  sym__function_signature_automatic_semicolon = 181,\n  sym_program = 182,\n  sym_export_statement = 183,\n  sym_export_clause = 184,\n  sym_export_specifier = 185,\n  sym__module_export_name = 186,\n  sym_declaration = 187,\n  sym_import = 188,\n  sym_import_statement = 189,\n  sym_import_clause = 190,\n  sym__from_clause = 191,\n  sym_named_imports = 192,\n  sym_import_specifier = 193,\n  sym_expression_statement = 194,\n  sym_variable_declaration = 195,\n  sym_lexical_declaration = 196,\n  sym_variable_declarator = 197,\n  sym_statement_block = 198,\n  sym_else_clause = 199,\n  sym_if_statement = 200,\n  sym_switch_statement = 201,\n  sym_for_statement = 202,\n  sym_for_in_statement = 203,\n  sym__for_header = 204,\n  sym_while_statement = 205,\n  sym_do_statement = 206,\n  sym_try_statement = 207,\n  sym_with_statement = 208,\n  sym_break_statement = 209,\n  sym_continue_statement = 210,\n  sym_debugger_statement = 211,\n  sym_return_statement = 212,\n  sym_throw_statement = 213,\n  sym_empty_statement = 214,\n  sym_labeled_statement = 215,\n  sym_switch_body = 216,\n  sym_switch_case = 217,\n  sym_switch_default = 218,\n  sym_catch_clause = 219,\n  sym_finally_clause = 220,\n  sym_parenthesized_expression = 221,\n  sym_parenthesized_expression_vector = 222,\n  sym_construct_expression = 223,\n  sym_expression = 224,\n  sym_primary_expression = 225,\n  sym_yield_expression = 226,\n  sym_object = 227,\n  sym_object_pattern = 228,\n  sym_assignment_pattern = 229,\n  sym_object_assignment_pattern = 230,\n  sym_array = 231,\n  sym_array_pattern = 232,\n  sym_glimmer_template = 233,\n  sym_glimmer_opening_tag = 234,\n  sym_glimmer_closing_tag = 235,\n  sym_nested_identifier = 236,\n  sym_struct_declaration = 237,\n  sym_function_declaration = 238,\n  sym_generator_function = 239,\n  sym_generator_function_declaration = 240,\n  sym_arrow_function = 241,\n  sym__call_signature = 242,\n  sym__formal_parameter = 243,\n  sym_optional_chain = 244,\n  sym_call_expression = 245,\n  sym_new_expression = 246,\n  sym_await_expression = 247,\n  sym_member_expression = 248,\n  sym_subscript_expression = 249,\n  sym_assignment_expression = 250,\n  sym__augmented_assignment_lhs = 251,\n  sym_augmented_assignment_expression = 252,\n  sym__initializer = 253,\n  sym__destructuring_pattern = 254,\n  sym_spread_element = 255,\n  sym_ternary_expression = 256,\n  sym_binary_expression = 257,\n  sym_unary_expression = 258,\n  sym_update_expression = 259,\n  sym_sequence_expression = 260,\n  sym_string = 261,\n  sym_template_string = 262,\n  sym_template_substitution = 263,\n  sym_regex = 264,\n  sym_meta_property = 265,\n  sym_arguments = 266,\n  sym_decorator = 267,\n  sym_decorator_member_expression = 268,\n  sym_decorator_call_expression = 269,\n  sym_class_body = 270,\n  sym_formal_parameters = 271,\n  sym_class_static_block = 272,\n  sym_pattern = 273,\n  sym_rest_pattern = 274,\n  sym_method_definition = 275,\n  sym_pair = 276,\n  sym_pair_pattern = 277,\n  sym__property_name = 278,\n  sym_computed_property_name = 279,\n  sym_public_field_definition = 280,\n  sym_non_null_expression = 281,\n  sym_method_signature = 282,\n  sym_abstract_method_signature = 283,\n  sym_function_signature = 284,\n  sym_type_assertion = 285,\n  sym_as_expression = 286,\n  sym_satisfies_expression = 287,\n  sym_ambient_declaration = 288,\n  sym_module = 289,\n  sym_internal_module = 290,\n  sym__module = 291,\n  sym_import_alias = 292,\n  sym_nested_type_identifier = 293,\n  sym_interface_declaration = 294,\n  sym_impl_for_clause = 295,\n  sym_impl_declaration = 296,\n  sym_extends_type_clause = 297,\n  sym_enum_declaration = 298,\n  sym_enum_body = 299,\n  sym_enum_assignment = 300,\n  sym_type_alias_declaration = 301,\n  sym_accessibility_modifier = 302,\n  sym_accessibility_modifier_member = 303,\n  sym_override_modifier = 304,\n  sym_shader = 305,\n  sym_async_block = 306,\n  sym_workgroup_member = 307,\n  sym_workgroup = 308,\n  sym_compute_size = 309,\n  sym_required_parameter = 310,\n  sym_optional_parameter = 311,\n  sym__parameter_name = 312,\n  sym_omitting_type_annotation = 313,\n  sym_opting_type_annotation = 314,\n  sym_type_annotation = 315,\n  sym_type_annotation_arrow = 316,\n  sym_asserts = 317,\n  sym__type = 318,\n  sym_tuple_parameter = 319,\n  sym_optional_tuple_parameter = 320,\n  sym_optional_type = 321,\n  sym_rest_type = 322,\n  sym__tuple_type_member = 323,\n  sym_constructor_type = 324,\n  sym__primary_type = 325,\n  sym_template_type = 326,\n  sym_template_literal_type = 327,\n  sym_infer_type = 328,\n  sym_conditional_type = 329,\n  sym_generic_type = 330,\n  sym_type_predicate = 331,\n  sym_type_predicate_annotation = 332,\n  sym__type_query_member_expression = 333,\n  sym__type_query_subscript_expression = 334,\n  sym__type_query_call_expression = 335,\n  sym_type_query = 336,\n  sym_index_type_query = 337,\n  sym_lookup_type = 338,\n  sym_mapped_type_clause = 339,\n  sym_literal_type = 340,\n  sym__number = 341,\n  sym_existential_type = 342,\n  sym_flow_maybe_type = 343,\n  sym_parenthesized_type = 344,\n  sym_predefined_type = 345,\n  sym_type_arguments = 346,\n  sym_object_type = 347,\n  sym_object_method_type = 348,\n  sym_object_method_signature_type = 349,\n  sym_call_signature = 350,\n  sym_property_signature = 351,\n  sym_type_parameters = 352,\n  sym_type_parameter = 353,\n  sym_default_type = 354,\n  sym_constraint = 355,\n  sym_construct_signature = 356,\n  sym_index_signature = 357,\n  sym_array_type = 358,\n  sym_tuple_type = 359,\n  sym_readonly_type = 360,\n  sym_union_type = 361,\n  sym_intersection_type = 362,\n  sym_function_type = 363,\n  aux_sym_program_repeat1 = 364,\n  aux_sym_export_clause_repeat1 = 365,\n  aux_sym_named_imports_repeat1 = 366,\n  aux_sym_variable_declaration_repeat1 = 367,\n  aux_sym_switch_body_repeat1 = 368,\n  aux_sym_object_repeat1 = 369,\n  aux_sym_object_pattern_repeat1 = 370,\n  aux_sym_array_repeat1 = 371,\n  aux_sym_array_pattern_repeat1 = 372,\n  aux_sym_glimmer_template_repeat1 = 373,\n  aux_sym_class_repeat1 = 374,\n  aux_sym_string_repeat1 = 375,\n  aux_sym_string_repeat2 = 376,\n  aux_sym_template_string_repeat1 = 377,\n  aux_sym_class_body_repeat1 = 378,\n  aux_sym_formal_parameters_repeat1 = 379,\n  aux_sym_implements_clause_repeat1 = 380,\n  aux_sym_extends_type_clause_repeat1 = 381,\n  aux_sym_enum_body_repeat1 = 382,\n  aux_sym_workgroup_repeat1 = 383,\n  aux_sym_template_literal_type_repeat1 = 384,\n  aux_sym_object_type_repeat1 = 385,\n  aux_sym_object_method_type_repeat1 = 386,\n  aux_sym_object_method_signature_type_repeat1 = 387,\n  aux_sym_type_parameters_repeat1 = 388,\n  aux_sym_tuple_type_repeat1 = 389,\n  alias_sym_property_identifier = 390,\n  alias_sym_shorthand_property_identifier = 391,\n  alias_sym_shorthand_property_identifier_pattern = 392,\n  alias_sym_statement_identifier = 393,\n  alias_sym_this_type = 394,\n  alias_sym_type_identifier = 395,\n};\n\nstatic const char * const ts_symbol_names[] = {\n  [ts_builtin_sym_end] = \"end\",\n  [sym_identifier] = \"identifier\",\n  [sym_hash_bang_line] = \"hash_bang_line\",\n  [anon_sym_pub] = \"pub\",\n  [anon_sym_export] = \"export\",\n  [anon_sym_type] = \"type\",\n  [anon_sym_EQ] = \"=\",\n  [anon_sym_as] = \"as\",\n  [anon_sym_namespace] = \"namespace\",\n  [anon_sym_STAR] = \"*\",\n  [anon_sym_LBRACE] = \"{\",\n  [anon_sym_COMMA] = \",\",\n  [anon_sym_RBRACE] = \"}\",\n  [anon_sym_typeof] = \"typeof\",\n  [anon_sym_import] = \"import\",\n  [anon_sym_from] = \"from\",\n  [anon_sym_var] = \"var\",\n  [anon_sym_let] = \"let\",\n  [anon_sym_const] = \"const\",\n  [anon_sym_BANG] = \"!\",\n  [anon_sym_else] = \"else\",\n  [anon_sym_if] = \"if\",\n  [anon_sym_switch] = \"switch\",\n  [anon_sym_for] = \"for\",\n  [anon_sym_LPAREN] = \"(\",\n  [anon_sym_RPAREN] = \")\",\n  [anon_sym_await] = \"await\",\n  [anon_sym_in] = \"in\",\n  [anon_sym_of] = \"of\",\n  [anon_sym_while] = \"while\",\n  [anon_sym_do] = \"do\",\n  [anon_sym_try] = \"try\",\n  [anon_sym_with] = \"with\",\n  [anon_sym_break] = \"break\",\n  [anon_sym_continue] = \"continue\",\n  [anon_sym_debugger] = \"debugger\",\n  [anon_sym_return] = \"return\",\n  [anon_sym_throw] = \"throw\",\n  [anon_sym_SEMI] = \";\",\n  [anon_sym_COLON] = \":\",\n  [anon_sym_case] = \"case\",\n  [anon_sym_default] = \"default\",\n  [anon_sym_catch] = \"catch\",\n  [anon_sym_finally] = \"finally\",\n  [anon_sym_yield] = \"yield\",\n  [anon_sym_LBRACK] = \"[\",\n  [anon_sym_RBRACK] = \"]\",\n  [sym__glimmer_template_content] = \"_glimmer_template_content\",\n  [anon_sym_LTtemplate_GT] = \"<template>\",\n  [anon_sym_LT_SLASHtemplate_GT] = \"</template>\",\n  [anon_sym_LT] = \"<\",\n  [anon_sym_GT] = \">\",\n  [anon_sym_SLASH] = \"/\",\n  [anon_sym_DOT] = \".\",\n  [anon_sym_class] = \"class\",\n  [anon_sym_struct] = \"struct\",\n  [anon_sym_async] = \"async\",\n  [anon_sym_fn] = \"fn\",\n  [anon_sym_fn_STAR] = \"fn *\",\n  [anon_sym_EQ_GT] = \"=>\",\n  [anon_sym_QMARK_DOT] = \"\\?.\",\n  [anon_sym_new] = \"new\",\n  [anon_sym_COLON_COLON] = \"::\",\n  [anon_sym_PLUS_EQ] = \"+=\",\n  [anon_sym_DASH_EQ] = \"-=\",\n  [anon_sym_STAR_EQ] = \"*=\",\n  [anon_sym_SLASH_EQ] = \"/=\",\n  [anon_sym_PERCENT_EQ] = \"%=\",\n  [anon_sym_CARET_EQ] = \"^=\",\n  [anon_sym_AMP_EQ] = \"&=\",\n  [anon_sym_PIPE_EQ] = \"|=\",\n  [anon_sym_GT_GT_EQ] = \">>=\",\n  [anon_sym_GT_GT_GT_EQ] = \">>>=\",\n  [anon_sym_LT_LT_EQ] = \"<<=\",\n  [anon_sym_STAR_STAR_EQ] = \"**=\",\n  [anon_sym_AMP_AMP_EQ] = \"&&=\",\n  [anon_sym_PIPE_PIPE_EQ] = \"||=\",\n  [anon_sym_QMARK_QMARK_EQ] = \"\\?\\?=\",\n  [anon_sym_DOT_DOT_DOT] = \"...\",\n  [anon_sym_AMP_AMP] = \"&&\",\n  [anon_sym_PIPE_PIPE] = \"||\",\n  [anon_sym_GT_GT] = \">>\",\n  [anon_sym_GT_GT_GT] = \">>>\",\n  [anon_sym_LT_LT] = \"<<\",\n  [anon_sym_AMP] = \"&\",\n  [anon_sym_CARET] = \"^\",\n  [anon_sym_PIPE] = \"|\",\n  [anon_sym_PLUS] = \"+\",\n  [anon_sym_DASH] = \"-\",\n  [anon_sym_PERCENT] = \"%\",\n  [anon_sym_STAR_STAR] = \"**\",\n  [anon_sym_LT_EQ] = \"<=\",\n  [anon_sym_EQ_EQ] = \"==\",\n  [anon_sym_EQ_EQ_EQ] = \"===\",\n  [anon_sym_BANG_EQ] = \"!=\",\n  [anon_sym_BANG_EQ_EQ] = \"!==\",\n  [anon_sym_GT_EQ] = \">=\",\n  [anon_sym_QMARK_QMARK] = \"\\?\\?\",\n  [anon_sym_instanceof] = \"instanceof\",\n  [anon_sym_TILDE] = \"~\",\n  [anon_sym_void] = \"void\",\n  [anon_sym_delete] = \"delete\",\n  [anon_sym_PLUS_PLUS] = \"++\",\n  [anon_sym_DASH_DASH] = \"--\",\n  [anon_sym_DQUOTE] = \"\\\"\",\n  [anon_sym_SQUOTE] = \"'\",\n  [sym_unescaped_double_string_fragment] = \"string_fragment\",\n  [sym_unescaped_single_string_fragment] = \"string_fragment\",\n  [sym_escape_sequence] = \"escape_sequence\",\n  [sym_comment] = \"comment\",\n  [anon_sym_BQUOTE] = \"`\",\n  [anon_sym_DOLLAR_LBRACE] = \"${\",\n  [anon_sym_SLASH2] = \"/\",\n  [sym_regex_pattern] = \"regex_pattern\",\n  [sym_regex_flags] = \"regex_flags\",\n  [sym_number] = \"number\",\n  [sym_private_property_identifier] = \"private_property_identifier\",\n  [anon_sym_target] = \"target\",\n  [sym_this] = \"this\",\n  [sym_super] = \"super\",\n  [sym_true] = \"true\",\n  [sym_false] = \"false\",\n  [sym_null] = \"null\",\n  [sym_undefined] = \"undefined\",\n  [anon_sym_AT] = \"@\",\n  [anon_sym_static] = \"static\",\n  [anon_sym_QMARK] = \"\\?\",\n  [anon_sym_declare] = \"declare\",\n  [anon_sym_public] = \"public\",\n  [anon_sym_private] = \"private\",\n  [anon_sym_protected] = \"protected\",\n  [anon_sym_override] = \"override\",\n  [anon_sym_readonly] = \"readonly\",\n  [anon_sym_module] = \"module\",\n  [anon_sym_any] = \"any\",\n  [anon_sym_number] = \"number\",\n  [anon_sym_int] = \"int\",\n  [anon_sym_float] = \"float\",\n  [anon_sym_float2] = \"float2\",\n  [anon_sym_float3] = \"float3\",\n  [anon_sym_float4] = \"float4\",\n  [anon_sym_float3x3] = \"float3x3\",\n  [anon_sym_float2x2] = \"float2x2\",\n  [anon_sym_float4x4] = \"float4x4\",\n  [anon_sym_int2] = \"int2\",\n  [anon_sym_int3] = \"int3\",\n  [anon_sym_int4] = \"int4\",\n  [anon_sym_int3x3] = \"int3x3\",\n  [anon_sym_int2x2] = \"int2x2\",\n  [anon_sym_int4x4] = \"int4x4\",\n  [anon_sym_boolean] = \"boolean\",\n  [anon_sym_string] = \"string\",\n  [anon_sym_symbol] = \"symbol\",\n  [anon_sym_workgroup] = \"workgroup\",\n  [anon_sym_get] = \"get\",\n  [anon_sym_set] = \"set\",\n  [anon_sym_abstract] = \"abstract\",\n  [anon_sym_satisfies] = \"satisfies\",\n  [anon_sym_require] = \"require\",\n  [anon_sym_extends] = \"extends\",\n  [anon_sym_implements] = \"implements\",\n  [anon_sym_global] = \"global\",\n  [anon_sym_trait] = \"trait\",\n  [anon_sym_impl] = \"impl\",\n  [anon_sym_enum] = \"enum\",\n  [anon_sym_shader] = \"shader\",\n  [anon_sym_DASH_QMARK_COLON] = \"-\\?:\",\n  [anon_sym_QMARK_COLON] = \"\\?:\",\n  [anon_sym_DASH_GT] = \"->\",\n  [anon_sym_asserts] = \"asserts\",\n  [anon_sym_infer] = \"infer\",\n  [anon_sym_is] = \"is\",\n  [anon_sym_keyof] = \"keyof\",\n  [anon_sym_unknown] = \"unknown\",\n  [anon_sym_never] = \"never\",\n  [anon_sym_object] = \"object\",\n  [anon_sym_LBRACE_PIPE] = \"{|\",\n  [anon_sym_PIPE_RBRACE] = \"|}\",\n  [sym__automatic_semicolon] = \"_automatic_semicolon\",\n  [sym__template_chars] = \"_template_chars\",\n  [sym__ternary_qmark] = \"\\?\",\n  [sym__function_signature_automatic_semicolon] = \"_function_signature_automatic_semicolon\",\n  [sym_program] = \"program\",\n  [sym_export_statement] = \"export_statement\",\n  [sym_export_clause] = \"export_clause\",\n  [sym_export_specifier] = \"export_specifier\",\n  [sym__module_export_name] = \"_module_export_name\",\n  [sym_declaration] = \"declaration\",\n  [sym_import] = \"import\",\n  [sym_import_statement] = \"import_statement\",\n  [sym_import_clause] = \"import_clause\",\n  [sym__from_clause] = \"_from_clause\",\n  [sym_named_imports] = \"named_imports\",\n  [sym_import_specifier] = \"import_specifier\",\n  [sym_expression_statement] = \"expression_statement\",\n  [sym_variable_declaration] = \"variable_declaration\",\n  [sym_lexical_declaration] = \"lexical_declaration\",\n  [sym_variable_declarator] = \"variable_declarator\",\n  [sym_statement_block] = \"statement_block\",\n  [sym_else_clause] = \"else_clause\",\n  [sym_if_statement] = \"if_statement\",\n  [sym_switch_statement] = \"switch_statement\",\n  [sym_for_statement] = \"for_statement\",\n  [sym_for_in_statement] = \"for_in_statement\",\n  [sym__for_header] = \"_for_header\",\n  [sym_while_statement] = \"while_statement\",\n  [sym_do_statement] = \"do_statement\",\n  [sym_try_statement] = \"try_statement\",\n  [sym_with_statement] = \"with_statement\",\n  [sym_break_statement] = \"break_statement\",\n  [sym_continue_statement] = \"continue_statement\",\n  [sym_debugger_statement] = \"debugger_statement\",\n  [sym_return_statement] = \"return_statement\",\n  [sym_throw_statement] = \"throw_statement\",\n  [sym_empty_statement] = \"empty_statement\",\n  [sym_labeled_statement] = \"labeled_statement\",\n  [sym_switch_body] = \"switch_body\",\n  [sym_switch_case] = \"switch_case\",\n  [sym_switch_default] = \"switch_default\",\n  [sym_catch_clause] = \"catch_clause\",\n  [sym_finally_clause] = \"finally_clause\",\n  [sym_parenthesized_expression] = \"parenthesized_expression\",\n  [sym_parenthesized_expression_vector] = \"parenthesized_expression_vector\",\n  [sym_construct_expression] = \"construct_expression\",\n  [sym_expression] = \"expression\",\n  [sym_primary_expression] = \"primary_expression\",\n  [sym_yield_expression] = \"yield_expression\",\n  [sym_object] = \"object\",\n  [sym_object_pattern] = \"object_pattern\",\n  [sym_assignment_pattern] = \"assignment_pattern\",\n  [sym_object_assignment_pattern] = \"object_assignment_pattern\",\n  [sym_array] = \"array\",\n  [sym_array_pattern] = \"array_pattern\",\n  [sym_glimmer_template] = \"glimmer_template\",\n  [sym_glimmer_opening_tag] = \"glimmer_opening_tag\",\n  [sym_glimmer_closing_tag] = \"glimmer_closing_tag\",\n  [sym_nested_identifier] = \"nested_identifier\",\n  [sym_struct_declaration] = \"struct_declaration\",\n  [sym_function_declaration] = \"function_declaration\",\n  [sym_generator_function] = \"generator_function\",\n  [sym_generator_function_declaration] = \"generator_function_declaration\",\n  [sym_arrow_function] = \"arrow_function\",\n  [sym__call_signature] = \"_call_signature\",\n  [sym__formal_parameter] = \"_formal_parameter\",\n  [sym_optional_chain] = \"optional_chain\",\n  [sym_call_expression] = \"call_expression\",\n  [sym_new_expression] = \"new_expression\",\n  [sym_await_expression] = \"await_expression\",\n  [sym_member_expression] = \"member_expression\",\n  [sym_subscript_expression] = \"subscript_expression\",\n  [sym_assignment_expression] = \"assignment_expression\",\n  [sym__augmented_assignment_lhs] = \"_augmented_assignment_lhs\",\n  [sym_augmented_assignment_expression] = \"augmented_assignment_expression\",\n  [sym__initializer] = \"_initializer\",\n  [sym__destructuring_pattern] = \"_destructuring_pattern\",\n  [sym_spread_element] = \"spread_element\",\n  [sym_ternary_expression] = \"ternary_expression\",\n  [sym_binary_expression] = \"binary_expression\",\n  [sym_unary_expression] = \"unary_expression\",\n  [sym_update_expression] = \"update_expression\",\n  [sym_sequence_expression] = \"sequence_expression\",\n  [sym_string] = \"string\",\n  [sym_template_string] = \"template_string\",\n  [sym_template_substitution] = \"template_substitution\",\n  [sym_regex] = \"regex\",\n  [sym_meta_property] = \"meta_property\",\n  [sym_arguments] = \"arguments\",\n  [sym_decorator] = \"decorator\",\n  [sym_decorator_member_expression] = \"member_expression\",\n  [sym_decorator_call_expression] = \"call_expression\",\n  [sym_class_body] = \"class_body\",\n  [sym_formal_parameters] = \"formal_parameters\",\n  [sym_class_static_block] = \"class_static_block\",\n  [sym_pattern] = \"pattern\",\n  [sym_rest_pattern] = \"rest_pattern\",\n  [sym_method_definition] = \"method_definition\",\n  [sym_pair] = \"pair\",\n  [sym_pair_pattern] = \"pair_pattern\",\n  [sym__property_name] = \"_property_name\",\n  [sym_computed_property_name] = \"computed_property_name\",\n  [sym_public_field_definition] = \"public_field_definition\",\n  [sym_non_null_expression] = \"non_null_expression\",\n  [sym_method_signature] = \"method_signature\",\n  [sym_abstract_method_signature] = \"abstract_method_signature\",\n  [sym_function_signature] = \"function_signature\",\n  [sym_type_assertion] = \"type_assertion\",\n  [sym_as_expression] = \"as_expression\",\n  [sym_satisfies_expression] = \"satisfies_expression\",\n  [sym_ambient_declaration] = \"ambient_declaration\",\n  [sym_module] = \"module\",\n  [sym_internal_module] = \"internal_module\",\n  [sym__module] = \"_module\",\n  [sym_import_alias] = \"import_alias\",\n  [sym_nested_type_identifier] = \"nested_type_identifier\",\n  [sym_interface_declaration] = \"interface_declaration\",\n  [sym_impl_for_clause] = \"impl_for_clause\",\n  [sym_impl_declaration] = \"impl_declaration\",\n  [sym_extends_type_clause] = \"extends_type_clause\",\n  [sym_enum_declaration] = \"enum_declaration\",\n  [sym_enum_body] = \"enum_body\",\n  [sym_enum_assignment] = \"enum_assignment\",\n  [sym_type_alias_declaration] = \"type_alias_declaration\",\n  [sym_accessibility_modifier] = \"accessibility_modifier\",\n  [sym_accessibility_modifier_member] = \"accessibility_modifier_member\",\n  [sym_override_modifier] = \"override_modifier\",\n  [sym_shader] = \"shader\",\n  [sym_async_block] = \"async_block\",\n  [sym_workgroup_member] = \"workgroup_member\",\n  [sym_workgroup] = \"workgroup\",\n  [sym_compute_size] = \"compute_size\",\n  [sym_required_parameter] = \"required_parameter\",\n  [sym_optional_parameter] = \"optional_parameter\",\n  [sym__parameter_name] = \"_parameter_name\",\n  [sym_omitting_type_annotation] = \"omitting_type_annotation\",\n  [sym_opting_type_annotation] = \"opting_type_annotation\",\n  [sym_type_annotation] = \"type_annotation\",\n  [sym_type_annotation_arrow] = \"type_annotation_arrow\",\n  [sym_asserts] = \"asserts\",\n  [sym__type] = \"_type\",\n  [sym_tuple_parameter] = \"required_parameter\",\n  [sym_optional_tuple_parameter] = \"optional_parameter\",\n  [sym_optional_type] = \"optional_type\",\n  [sym_rest_type] = \"rest_type\",\n  [sym__tuple_type_member] = \"_tuple_type_member\",\n  [sym_constructor_type] = \"constructor_type\",\n  [sym__primary_type] = \"_primary_type\",\n  [sym_template_type] = \"template_type\",\n  [sym_template_literal_type] = \"template_literal_type\",\n  [sym_infer_type] = \"infer_type\",\n  [sym_conditional_type] = \"conditional_type\",\n  [sym_generic_type] = \"generic_type\",\n  [sym_type_predicate] = \"type_predicate\",\n  [sym_type_predicate_annotation] = \"type_predicate_annotation\",\n  [sym__type_query_member_expression] = \"member_expression\",\n  [sym__type_query_subscript_expression] = \"subscript_expression\",\n  [sym__type_query_call_expression] = \"call_expression\",\n  [sym_type_query] = \"type_query\",\n  [sym_index_type_query] = \"index_type_query\",\n  [sym_lookup_type] = \"lookup_type\",\n  [sym_mapped_type_clause] = \"mapped_type_clause\",\n  [sym_literal_type] = \"literal_type\",\n  [sym__number] = \"unary_expression\",\n  [sym_existential_type] = \"existential_type\",\n  [sym_flow_maybe_type] = \"flow_maybe_type\",\n  [sym_parenthesized_type] = \"parenthesized_type\",\n  [sym_predefined_type] = \"predefined_type\",\n  [sym_type_arguments] = \"type_arguments\",\n  [sym_object_type] = \"object_type\",\n  [sym_object_method_type] = \"object_method_type\",\n  [sym_object_method_signature_type] = \"object_method_signature_type\",\n  [sym_call_signature] = \"call_signature\",\n  [sym_property_signature] = \"property_signature\",\n  [sym_type_parameters] = \"type_parameters\",\n  [sym_type_parameter] = \"type_parameter\",\n  [sym_default_type] = \"default_type\",\n  [sym_constraint] = \"constraint\",\n  [sym_construct_signature] = \"construct_signature\",\n  [sym_index_signature] = \"index_signature\",\n  [sym_array_type] = \"array_type\",\n  [sym_tuple_type] = \"tuple_type\",\n  [sym_readonly_type] = \"readonly_type\",\n  [sym_union_type] = \"union_type\",\n  [sym_intersection_type] = \"intersection_type\",\n  [sym_function_type] = \"function_type\",\n  [aux_sym_program_repeat1] = \"program_repeat1\",\n  [aux_sym_export_clause_repeat1] = \"export_clause_repeat1\",\n  [aux_sym_named_imports_repeat1] = \"named_imports_repeat1\",\n  [aux_sym_variable_declaration_repeat1] = \"variable_declaration_repeat1\",\n  [aux_sym_switch_body_repeat1] = \"switch_body_repeat1\",\n  [aux_sym_object_repeat1] = \"object_repeat1\",\n  [aux_sym_object_pattern_repeat1] = \"object_pattern_repeat1\",\n  [aux_sym_array_repeat1] = \"array_repeat1\",\n  [aux_sym_array_pattern_repeat1] = \"array_pattern_repeat1\",\n  [aux_sym_glimmer_template_repeat1] = \"glimmer_template_repeat1\",\n  [aux_sym_class_repeat1] = \"class_repeat1\",\n  [aux_sym_string_repeat1] = \"string_repeat1\",\n  [aux_sym_string_repeat2] = \"string_repeat2\",\n  [aux_sym_template_string_repeat1] = \"template_string_repeat1\",\n  [aux_sym_class_body_repeat1] = \"class_body_repeat1\",\n  [aux_sym_formal_parameters_repeat1] = \"formal_parameters_repeat1\",\n  [aux_sym_implements_clause_repeat1] = \"implements_clause_repeat1\",\n  [aux_sym_extends_type_clause_repeat1] = \"extends_type_clause_repeat1\",\n  [aux_sym_enum_body_repeat1] = \"enum_body_repeat1\",\n  [aux_sym_workgroup_repeat1] = \"workgroup_repeat1\",\n  [aux_sym_template_literal_type_repeat1] = \"template_literal_type_repeat1\",\n  [aux_sym_object_type_repeat1] = \"object_type_repeat1\",\n  [aux_sym_object_method_type_repeat1] = \"object_method_type_repeat1\",\n  [aux_sym_object_method_signature_type_repeat1] = \"object_method_signature_type_repeat1\",\n  [aux_sym_type_parameters_repeat1] = \"type_parameters_repeat1\",\n  [aux_sym_tuple_type_repeat1] = \"tuple_type_repeat1\",\n  [alias_sym_property_identifier] = \"property_identifier\",\n  [alias_sym_shorthand_property_identifier] = \"shorthand_property_identifier\",\n  [alias_sym_shorthand_property_identifier_pattern] = \"shorthand_property_identifier_pattern\",\n  [alias_sym_statement_identifier] = \"statement_identifier\",\n  [alias_sym_this_type] = \"this_type\",\n  [alias_sym_type_identifier] = \"type_identifier\",\n};\n\nstatic const TSSymbol ts_symbol_map[] = {\n  [ts_builtin_sym_end] = ts_builtin_sym_end,\n  [sym_identifier] = sym_identifier,\n  [sym_hash_bang_line] = sym_hash_bang_line,\n  [anon_sym_pub] = anon_sym_pub,\n  [anon_sym_export] = anon_sym_export,\n  [anon_sym_type] = anon_sym_type,\n  [anon_sym_EQ] = anon_sym_EQ,\n  [anon_sym_as] = anon_sym_as,\n  [anon_sym_namespace] = anon_sym_namespace,\n  [anon_sym_STAR] = anon_sym_STAR,\n  [anon_sym_LBRACE] = anon_sym_LBRACE,\n  [anon_sym_COMMA] = anon_sym_COMMA,\n  [anon_sym_RBRACE] = anon_sym_RBRACE,\n  [anon_sym_typeof] = anon_sym_typeof,\n  [anon_sym_import] = anon_sym_import,\n  [anon_sym_from] = anon_sym_from,\n  [anon_sym_var] = anon_sym_var,\n  [anon_sym_let] = anon_sym_let,\n  [anon_sym_const] = anon_sym_const,\n  [anon_sym_BANG] = anon_sym_BANG,\n  [anon_sym_else] = anon_sym_else,\n  [anon_sym_if] = anon_sym_if,\n  [anon_sym_switch] = anon_sym_switch,\n  [anon_sym_for] = anon_sym_for,\n  [anon_sym_LPAREN] = anon_sym_LPAREN,\n  [anon_sym_RPAREN] = anon_sym_RPAREN,\n  [anon_sym_await] = anon_sym_await,\n  [anon_sym_in] = anon_sym_in,\n  [anon_sym_of] = anon_sym_of,\n  [anon_sym_while] = anon_sym_while,\n  [anon_sym_do] = anon_sym_do,\n  [anon_sym_try] = anon_sym_try,\n  [anon_sym_with] = anon_sym_with,\n  [anon_sym_break] = anon_sym_break,\n  [anon_sym_continue] = anon_sym_continue,\n  [anon_sym_debugger] = anon_sym_debugger,\n  [anon_sym_return] = anon_sym_return,\n  [anon_sym_throw] = anon_sym_throw,\n  [anon_sym_SEMI] = anon_sym_SEMI,\n  [anon_sym_COLON] = anon_sym_COLON,\n  [anon_sym_case] = anon_sym_case,\n  [anon_sym_default] = anon_sym_default,\n  [anon_sym_catch] = anon_sym_catch,\n  [anon_sym_finally] = anon_sym_finally,\n  [anon_sym_yield] = anon_sym_yield,\n  [anon_sym_LBRACK] = anon_sym_LBRACK,\n  [anon_sym_RBRACK] = anon_sym_RBRACK,\n  [sym__glimmer_template_content] = sym__glimmer_template_content,\n  [anon_sym_LTtemplate_GT] = anon_sym_LTtemplate_GT,\n  [anon_sym_LT_SLASHtemplate_GT] = anon_sym_LT_SLASHtemplate_GT,\n  [anon_sym_LT] = anon_sym_LT,\n  [anon_sym_GT] = anon_sym_GT,\n  [anon_sym_SLASH] = anon_sym_SLASH,\n  [anon_sym_DOT] = anon_sym_DOT,\n  [anon_sym_class] = anon_sym_class,\n  [anon_sym_struct] = anon_sym_struct,\n  [anon_sym_async] = anon_sym_async,\n  [anon_sym_fn] = anon_sym_fn,\n  [anon_sym_fn_STAR] = anon_sym_fn_STAR,\n  [anon_sym_EQ_GT] = anon_sym_EQ_GT,\n  [anon_sym_QMARK_DOT] = anon_sym_QMARK_DOT,\n  [anon_sym_new] = anon_sym_new,\n  [anon_sym_COLON_COLON] = anon_sym_COLON_COLON,\n  [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ,\n  [anon_sym_DASH_EQ] = anon_sym_DASH_EQ,\n  [anon_sym_STAR_EQ] = anon_sym_STAR_EQ,\n  [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ,\n  [anon_sym_PERCENT_EQ] = anon_sym_PERCENT_EQ,\n  [anon_sym_CARET_EQ] = anon_sym_CARET_EQ,\n  [anon_sym_AMP_EQ] = anon_sym_AMP_EQ,\n  [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ,\n  [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ,\n  [anon_sym_GT_GT_GT_EQ] = anon_sym_GT_GT_GT_EQ,\n  [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ,\n  [anon_sym_STAR_STAR_EQ] = anon_sym_STAR_STAR_EQ,\n  [anon_sym_AMP_AMP_EQ] = anon_sym_AMP_AMP_EQ,\n  [anon_sym_PIPE_PIPE_EQ] = anon_sym_PIPE_PIPE_EQ,\n  [anon_sym_QMARK_QMARK_EQ] = anon_sym_QMARK_QMARK_EQ,\n  [anon_sym_DOT_DOT_DOT] = anon_sym_DOT_DOT_DOT,\n  [anon_sym_AMP_AMP] = anon_sym_AMP_AMP,\n  [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE,\n  [anon_sym_GT_GT] = anon_sym_GT_GT,\n  [anon_sym_GT_GT_GT] = anon_sym_GT_GT_GT,\n  [anon_sym_LT_LT] = anon_sym_LT_LT,\n  [anon_sym_AMP] = anon_sym_AMP,\n  [anon_sym_CARET] = anon_sym_CARET,\n  [anon_sym_PIPE] = anon_sym_PIPE,\n  [anon_sym_PLUS] = anon_sym_PLUS,\n  [anon_sym_DASH] = anon_sym_DASH,\n  [anon_sym_PERCENT] = anon_sym_PERCENT,\n  [anon_sym_STAR_STAR] = anon_sym_STAR_STAR,\n  [anon_sym_LT_EQ] = anon_sym_LT_EQ,\n  [anon_sym_EQ_EQ] = anon_sym_EQ_EQ,\n  [anon_sym_EQ_EQ_EQ] = anon_sym_EQ_EQ_EQ,\n  [anon_sym_BANG_EQ] = anon_sym_BANG_EQ,\n  [anon_sym_BANG_EQ_EQ] = anon_sym_BANG_EQ_EQ,\n  [anon_sym_GT_EQ] = anon_sym_GT_EQ,\n  [anon_sym_QMARK_QMARK] = anon_sym_QMARK_QMARK,\n  [anon_sym_instanceof] = anon_sym_instanceof,\n  [anon_sym_TILDE] = anon_sym_TILDE,\n  [anon_sym_void] = anon_sym_void,\n  [anon_sym_delete] = anon_sym_delete,\n  [anon_sym_PLUS_PLUS] = anon_sym_PLUS_PLUS,\n  [anon_sym_DASH_DASH] = anon_sym_DASH_DASH,\n  [anon_sym_DQUOTE] = anon_sym_DQUOTE,\n  [anon_sym_SQUOTE] = anon_sym_SQUOTE,\n  [sym_unescaped_double_string_fragment] = sym_unescaped_double_string_fragment,\n  [sym_unescaped_single_string_fragment] = sym_unescaped_double_string_fragment,\n  [sym_escape_sequence] = sym_escape_sequence,\n  [sym_comment] = sym_comment,\n  [anon_sym_BQUOTE] = anon_sym_BQUOTE,\n  [anon_sym_DOLLAR_LBRACE] = anon_sym_DOLLAR_LBRACE,\n  [anon_sym_SLASH2] = anon_sym_SLASH,\n  [sym_regex_pattern] = sym_regex_pattern,\n  [sym_regex_flags] = sym_regex_flags,\n  [sym_number] = sym_number,\n  [sym_private_property_identifier] = sym_private_property_identifier,\n  [anon_sym_target] = anon_sym_target,\n  [sym_this] = sym_this,\n  [sym_super] = sym_super,\n  [sym_true] = sym_true,\n  [sym_false] = sym_false,\n  [sym_null] = sym_null,\n  [sym_undefined] = sym_undefined,\n  [anon_sym_AT] = anon_sym_AT,\n  [anon_sym_static] = anon_sym_static,\n  [anon_sym_QMARK] = anon_sym_QMARK,\n  [anon_sym_declare] = anon_sym_declare,\n  [anon_sym_public] = anon_sym_public,\n  [anon_sym_private] = anon_sym_private,\n  [anon_sym_protected] = anon_sym_protected,\n  [anon_sym_override] = anon_sym_override,\n  [anon_sym_readonly] = anon_sym_readonly,\n  [anon_sym_module] = anon_sym_module,\n  [anon_sym_any] = anon_sym_any,\n  [anon_sym_number] = anon_sym_number,\n  [anon_sym_int] = anon_sym_int,\n  [anon_sym_float] = anon_sym_float,\n  [anon_sym_float2] = anon_sym_float2,\n  [anon_sym_float3] = anon_sym_float3,\n  [anon_sym_float4] = anon_sym_float4,\n  [anon_sym_float3x3] = anon_sym_float3x3,\n  [anon_sym_float2x2] = anon_sym_float2x2,\n  [anon_sym_float4x4] = anon_sym_float4x4,\n  [anon_sym_int2] = anon_sym_int2,\n  [anon_sym_int3] = anon_sym_int3,\n  [anon_sym_int4] = anon_sym_int4,\n  [anon_sym_int3x3] = anon_sym_int3x3,\n  [anon_sym_int2x2] = anon_sym_int2x2,\n  [anon_sym_int4x4] = anon_sym_int4x4,\n  [anon_sym_boolean] = anon_sym_boolean,\n  [anon_sym_string] = anon_sym_string,\n  [anon_sym_symbol] = anon_sym_symbol,\n  [anon_sym_workgroup] = anon_sym_workgroup,\n  [anon_sym_get] = anon_sym_get,\n  [anon_sym_set] = anon_sym_set,\n  [anon_sym_abstract] = anon_sym_abstract,\n  [anon_sym_satisfies] = anon_sym_satisfies,\n  [anon_sym_require] = anon_sym_require,\n  [anon_sym_extends] = anon_sym_extends,\n  [anon_sym_implements] = anon_sym_implements,\n  [anon_sym_global] = anon_sym_global,\n  [anon_sym_trait] = anon_sym_trait,\n  [anon_sym_impl] = anon_sym_impl,\n  [anon_sym_enum] = anon_sym_enum,\n  [anon_sym_shader] = anon_sym_shader,\n  [anon_sym_DASH_QMARK_COLON] = anon_sym_DASH_QMARK_COLON,\n  [anon_sym_QMARK_COLON] = anon_sym_QMARK_COLON,\n  [anon_sym_DASH_GT] = anon_sym_DASH_GT,\n  [anon_sym_asserts] = anon_sym_asserts,\n  [anon_sym_infer] = anon_sym_infer,\n  [anon_sym_is] = anon_sym_is,\n  [anon_sym_keyof] = anon_sym_keyof,\n  [anon_sym_unknown] = anon_sym_unknown,\n  [anon_sym_never] = anon_sym_never,\n  [anon_sym_object] = anon_sym_object,\n  [anon_sym_LBRACE_PIPE] = anon_sym_LBRACE_PIPE,\n  [anon_sym_PIPE_RBRACE] = anon_sym_PIPE_RBRACE,\n  [sym__automatic_semicolon] = sym__automatic_semicolon,\n  [sym__template_chars] = sym__template_chars,\n  [sym__ternary_qmark] = anon_sym_QMARK,\n  [sym__function_signature_automatic_semicolon] = sym__function_signature_automatic_semicolon,\n  [sym_program] = sym_program,\n  [sym_export_statement] = sym_export_statement,\n  [sym_export_clause] = sym_export_clause,\n  [sym_export_specifier] = sym_export_specifier,\n  [sym__module_export_name] = sym__module_export_name,\n  [sym_declaration] = sym_declaration,\n  [sym_import] = sym_import,\n  [sym_import_statement] = sym_import_statement,\n  [sym_import_clause] = sym_import_clause,\n  [sym__from_clause] = sym__from_clause,\n  [sym_named_imports] = sym_named_imports,\n  [sym_import_specifier] = sym_import_specifier,\n  [sym_expression_statement] = sym_expression_statement,\n  [sym_variable_declaration] = sym_variable_declaration,\n  [sym_lexical_declaration] = sym_lexical_declaration,\n  [sym_variable_declarator] = sym_variable_declarator,\n  [sym_statement_block] = sym_statement_block,\n  [sym_else_clause] = sym_else_clause,\n  [sym_if_statement] = sym_if_statement,\n  [sym_switch_statement] = sym_switch_statement,\n  [sym_for_statement] = sym_for_statement,\n  [sym_for_in_statement] = sym_for_in_statement,\n  [sym__for_header] = sym__for_header,\n  [sym_while_statement] = sym_while_statement,\n  [sym_do_statement] = sym_do_statement,\n  [sym_try_statement] = sym_try_statement,\n  [sym_with_statement] = sym_with_statement,\n  [sym_break_statement] = sym_break_statement,\n  [sym_continue_statement] = sym_continue_statement,\n  [sym_debugger_statement] = sym_debugger_statement,\n  [sym_return_statement] = sym_return_statement,\n  [sym_throw_statement] = sym_throw_statement,\n  [sym_empty_statement] = sym_empty_statement,\n  [sym_labeled_statement] = sym_labeled_statement,\n  [sym_switch_body] = sym_switch_body,\n  [sym_switch_case] = sym_switch_case,\n  [sym_switch_default] = sym_switch_default,\n  [sym_catch_clause] = sym_catch_clause,\n  [sym_finally_clause] = sym_finally_clause,\n  [sym_parenthesized_expression] = sym_parenthesized_expression,\n  [sym_parenthesized_expression_vector] = sym_parenthesized_expression_vector,\n  [sym_construct_expression] = sym_construct_expression,\n  [sym_expression] = sym_expression,\n  [sym_primary_expression] = sym_primary_expression,\n  [sym_yield_expression] = sym_yield_expression,\n  [sym_object] = sym_object,\n  [sym_object_pattern] = sym_object_pattern,\n  [sym_assignment_pattern] = sym_assignment_pattern,\n  [sym_object_assignment_pattern] = sym_object_assignment_pattern,\n  [sym_array] = sym_array,\n  [sym_array_pattern] = sym_array_pattern,\n  [sym_glimmer_template] = sym_glimmer_template,\n  [sym_glimmer_opening_tag] = sym_glimmer_opening_tag,\n  [sym_glimmer_closing_tag] = sym_glimmer_closing_tag,\n  [sym_nested_identifier] = sym_nested_identifier,\n  [sym_struct_declaration] = sym_struct_declaration,\n  [sym_function_declaration] = sym_function_declaration,\n  [sym_generator_function] = sym_generator_function,\n  [sym_generator_function_declaration] = sym_generator_function_declaration,\n  [sym_arrow_function] = sym_arrow_function,\n  [sym__call_signature] = sym__call_signature,\n  [sym__formal_parameter] = sym__formal_parameter,\n  [sym_optional_chain] = sym_optional_chain,\n  [sym_call_expression] = sym_call_expression,\n  [sym_new_expression] = sym_new_expression,\n  [sym_await_expression] = sym_await_expression,\n  [sym_member_expression] = sym_member_expression,\n  [sym_subscript_expression] = sym_subscript_expression,\n  [sym_assignment_expression] = sym_assignment_expression,\n  [sym__augmented_assignment_lhs] = sym__augmented_assignment_lhs,\n  [sym_augmented_assignment_expression] = sym_augmented_assignment_expression,\n  [sym__initializer] = sym__initializer,\n  [sym__destructuring_pattern] = sym__destructuring_pattern,\n  [sym_spread_element] = sym_spread_element,\n  [sym_ternary_expression] = sym_ternary_expression,\n  [sym_binary_expression] = sym_binary_expression,\n  [sym_unary_expression] = sym_unary_expression,\n  [sym_update_expression] = sym_update_expression,\n  [sym_sequence_expression] = sym_sequence_expression,\n  [sym_string] = sym_string,\n  [sym_template_string] = sym_template_string,\n  [sym_template_substitution] = sym_template_substitution,\n  [sym_regex] = sym_regex,\n  [sym_meta_property] = sym_meta_property,\n  [sym_arguments] = sym_arguments,\n  [sym_decorator] = sym_decorator,\n  [sym_decorator_member_expression] = sym_member_expression,\n  [sym_decorator_call_expression] = sym_call_expression,\n  [sym_class_body] = sym_class_body,\n  [sym_formal_parameters] = sym_formal_parameters,\n  [sym_class_static_block] = sym_class_static_block,\n  [sym_pattern] = sym_pattern,\n  [sym_rest_pattern] = sym_rest_pattern,\n  [sym_method_definition] = sym_method_definition,\n  [sym_pair] = sym_pair,\n  [sym_pair_pattern] = sym_pair_pattern,\n  [sym__property_name] = sym__property_name,\n  [sym_computed_property_name] = sym_computed_property_name,\n  [sym_public_field_definition] = sym_public_field_definition,\n  [sym_non_null_expression] = sym_non_null_expression,\n  [sym_method_signature] = sym_method_signature,\n  [sym_abstract_method_signature] = sym_abstract_method_signature,\n  [sym_function_signature] = sym_function_signature,\n  [sym_type_assertion] = sym_type_assertion,\n  [sym_as_expression] = sym_as_expression,\n  [sym_satisfies_expression] = sym_satisfies_expression,\n  [sym_ambient_declaration] = sym_ambient_declaration,\n  [sym_module] = sym_module,\n  [sym_internal_module] = sym_internal_module,\n  [sym__module] = sym__module,\n  [sym_import_alias] = sym_import_alias,\n  [sym_nested_type_identifier] = sym_nested_type_identifier,\n  [sym_interface_declaration] = sym_interface_declaration,\n  [sym_impl_for_clause] = sym_impl_for_clause,\n  [sym_impl_declaration] = sym_impl_declaration,\n  [sym_extends_type_clause] = sym_extends_type_clause,\n  [sym_enum_declaration] = sym_enum_declaration,\n  [sym_enum_body] = sym_enum_body,\n  [sym_enum_assignment] = sym_enum_assignment,\n  [sym_type_alias_declaration] = sym_type_alias_declaration,\n  [sym_accessibility_modifier] = sym_accessibility_modifier,\n  [sym_accessibility_modifier_member] = sym_accessibility_modifier_member,\n  [sym_override_modifier] = sym_override_modifier,\n  [sym_shader] = sym_shader,\n  [sym_async_block] = sym_async_block,\n  [sym_workgroup_member] = sym_workgroup_member,\n  [sym_workgroup] = sym_workgroup,\n  [sym_compute_size] = sym_compute_size,\n  [sym_required_parameter] = sym_required_parameter,\n  [sym_optional_parameter] = sym_optional_parameter,\n  [sym__parameter_name] = sym__parameter_name,\n  [sym_omitting_type_annotation] = sym_omitting_type_annotation,\n  [sym_opting_type_annotation] = sym_opting_type_annotation,\n  [sym_type_annotation] = sym_type_annotation,\n  [sym_type_annotation_arrow] = sym_type_annotation_arrow,\n  [sym_asserts] = sym_asserts,\n  [sym__type] = sym__type,\n  [sym_tuple_parameter] = sym_required_parameter,\n  [sym_optional_tuple_parameter] = sym_optional_parameter,\n  [sym_optional_type] = sym_optional_type,\n  [sym_rest_type] = sym_rest_type,\n  [sym__tuple_type_member] = sym__tuple_type_member,\n  [sym_constructor_type] = sym_constructor_type,\n  [sym__primary_type] = sym__primary_type,\n  [sym_template_type] = sym_template_type,\n  [sym_template_literal_type] = sym_template_literal_type,\n  [sym_infer_type] = sym_infer_type,\n  [sym_conditional_type] = sym_conditional_type,\n  [sym_generic_type] = sym_generic_type,\n  [sym_type_predicate] = sym_type_predicate,\n  [sym_type_predicate_annotation] = sym_type_predicate_annotation,\n  [sym__type_query_member_expression] = sym_member_expression,\n  [sym__type_query_subscript_expression] = sym_subscript_expression,\n  [sym__type_query_call_expression] = sym_call_expression,\n  [sym_type_query] = sym_type_query,\n  [sym_index_type_query] = sym_index_type_query,\n  [sym_lookup_type] = sym_lookup_type,\n  [sym_mapped_type_clause] = sym_mapped_type_clause,\n  [sym_literal_type] = sym_literal_type,\n  [sym__number] = sym_unary_expression,\n  [sym_existential_type] = sym_existential_type,\n  [sym_flow_maybe_type] = sym_flow_maybe_type,\n  [sym_parenthesized_type] = sym_parenthesized_type,\n  [sym_predefined_type] = sym_predefined_type,\n  [sym_type_arguments] = sym_type_arguments,\n  [sym_object_type] = sym_object_type,\n  [sym_object_method_type] = sym_object_method_type,\n  [sym_object_method_signature_type] = sym_object_method_signature_type,\n  [sym_call_signature] = sym_call_signature,\n  [sym_property_signature] = sym_property_signature,\n  [sym_type_parameters] = sym_type_parameters,\n  [sym_type_parameter] = sym_type_parameter,\n  [sym_default_type] = sym_default_type,\n  [sym_constraint] = sym_constraint,\n  [sym_construct_signature] = sym_construct_signature,\n  [sym_index_signature] = sym_index_signature,\n  [sym_array_type] = sym_array_type,\n  [sym_tuple_type] = sym_tuple_type,\n  [sym_readonly_type] = sym_readonly_type,\n  [sym_union_type] = sym_union_type,\n  [sym_intersection_type] = sym_intersection_type,\n  [sym_function_type] = sym_function_type,\n  [aux_sym_program_repeat1] = aux_sym_program_repeat1,\n  [aux_sym_export_clause_repeat1] = aux_sym_export_clause_repeat1,\n  [aux_sym_named_imports_repeat1] = aux_sym_named_imports_repeat1,\n  [aux_sym_variable_declaration_repeat1] = aux_sym_variable_declaration_repeat1,\n  [aux_sym_switch_body_repeat1] = aux_sym_switch_body_repeat1,\n  [aux_sym_object_repeat1] = aux_sym_object_repeat1,\n  [aux_sym_object_pattern_repeat1] = aux_sym_object_pattern_repeat1,\n  [aux_sym_array_repeat1] = aux_sym_array_repeat1,\n  [aux_sym_array_pattern_repeat1] = aux_sym_array_pattern_repeat1,\n  [aux_sym_glimmer_template_repeat1] = aux_sym_glimmer_template_repeat1,\n  [aux_sym_class_repeat1] = aux_sym_class_repeat1,\n  [aux_sym_string_repeat1] = aux_sym_string_repeat1,\n  [aux_sym_string_repeat2] = aux_sym_string_repeat2,\n  [aux_sym_template_string_repeat1] = aux_sym_template_string_repeat1,\n  [aux_sym_class_body_repeat1] = aux_sym_class_body_repeat1,\n  [aux_sym_formal_parameters_repeat1] = aux_sym_formal_parameters_repeat1,\n  [aux_sym_implements_clause_repeat1] = aux_sym_implements_clause_repeat1,\n  [aux_sym_extends_type_clause_repeat1] = aux_sym_extends_type_clause_repeat1,\n  [aux_sym_enum_body_repeat1] = aux_sym_enum_body_repeat1,\n  [aux_sym_workgroup_repeat1] = aux_sym_workgroup_repeat1,\n  [aux_sym_template_literal_type_repeat1] = aux_sym_template_literal_type_repeat1,\n  [aux_sym_object_type_repeat1] = aux_sym_object_type_repeat1,\n  [aux_sym_object_method_type_repeat1] = aux_sym_object_method_type_repeat1,\n  [aux_sym_object_method_signature_type_repeat1] = aux_sym_object_method_signature_type_repeat1,\n  [aux_sym_type_parameters_repeat1] = aux_sym_type_parameters_repeat1,\n  [aux_sym_tuple_type_repeat1] = aux_sym_tuple_type_repeat1,\n  [alias_sym_property_identifier] = alias_sym_property_identifier,\n  [alias_sym_shorthand_property_identifier] = alias_sym_shorthand_property_identifier,\n  [alias_sym_shorthand_property_identifier_pattern] = alias_sym_shorthand_property_identifier_pattern,\n  [alias_sym_statement_identifier] = alias_sym_statement_identifier,\n  [alias_sym_this_type] = alias_sym_this_type,\n  [alias_sym_type_identifier] = alias_sym_type_identifier,\n};\n\nstatic const TSSymbolMetadata ts_symbol_metadata[] = {\n  [ts_builtin_sym_end] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_hash_bang_line] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_pub] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_export] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_type] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_as] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_namespace] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_COMMA] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_RBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_typeof] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_import] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_from] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_var] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_let] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_const] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BANG] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_else] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_if] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_switch] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_for] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LPAREN] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_RPAREN] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_await] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_in] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_of] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_while] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_do] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_try] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_with] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_break] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_continue] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_debugger] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_return] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_throw] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SEMI] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_COLON] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_case] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_default] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_catch] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_finally] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_yield] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LBRACK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_RBRACK] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym__glimmer_template_content] = {\n    .visible = false,\n    .named = true,\n  },\n  [anon_sym_LTtemplate_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_SLASHtemplate_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SLASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DOT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_class] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_struct] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_async] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_fn] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_fn_STAR] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_DOT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_new] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_COLON_COLON] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PLUS_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SLASH_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PERCENT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_CARET_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT_GT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_LT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR_STAR_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP_AMP_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_PIPE_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_QMARK_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DOT_DOT_DOT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP_AMP] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_PIPE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_LT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_CARET] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PLUS] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PERCENT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR_STAR] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ_EQ_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BANG_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BANG_EQ_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_QMARK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_instanceof] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_TILDE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_void] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_delete] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PLUS_PLUS] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH_DASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DQUOTE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SQUOTE] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym_unescaped_double_string_fragment] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_unescaped_single_string_fragment] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_escape_sequence] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_comment] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_BQUOTE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DOLLAR_LBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SLASH2] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym_regex_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_regex_flags] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_number] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_private_property_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_target] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym_this] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_super] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_true] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_false] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_null] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_undefined] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_AT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_static] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_declare] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_public] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_private] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_protected] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_override] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_readonly] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_module] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_any] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_number] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float2] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float3] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float4] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float3x3] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float2x2] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_float4x4] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int2] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int3] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int4] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int3x3] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int2x2] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_int4x4] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_boolean] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_string] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_symbol] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_workgroup] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_get] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_set] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_abstract] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_satisfies] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_require] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_extends] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_implements] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_global] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_trait] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_impl] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_enum] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_shader] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH_QMARK_COLON] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_COLON] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_asserts] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_infer] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_is] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_keyof] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_unknown] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_never] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_object] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LBRACE_PIPE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_RBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym__automatic_semicolon] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym__template_chars] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym__ternary_qmark] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym__function_signature_automatic_semicolon] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_program] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_export_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_export_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_export_specifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__module_export_name] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_declaration] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_import] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__from_clause] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_named_imports] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import_specifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_expression_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_variable_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_lexical_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_variable_declarator] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_statement_block] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_else_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_if_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_for_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_for_in_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__for_header] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_while_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_do_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_try_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_with_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_break_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_continue_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_debugger_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_return_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_throw_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_empty_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_labeled_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_body] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_case] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_default] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_catch_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_finally_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_parenthesized_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_parenthesized_expression_vector] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_construct_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_expression] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_primary_expression] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_yield_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_assignment_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_assignment_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_array] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_array_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_glimmer_template] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_glimmer_opening_tag] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_glimmer_closing_tag] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_nested_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_struct_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_function_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_generator_function] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_generator_function_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_arrow_function] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__call_signature] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym__formal_parameter] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_optional_chain] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_call_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_new_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_await_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_member_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_subscript_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_assignment_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__augmented_assignment_lhs] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_augmented_assignment_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__initializer] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym__destructuring_pattern] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_spread_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_ternary_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_binary_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_unary_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_update_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_sequence_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_string] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_template_string] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_template_substitution] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_regex] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_meta_property] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_arguments] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_decorator] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_decorator_member_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_decorator_call_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_body] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_formal_parameters] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_static_block] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pattern] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_rest_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_method_definition] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pair] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pair_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__property_name] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_computed_property_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_public_field_definition] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_non_null_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_method_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_abstract_method_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_function_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_assertion] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_as_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_satisfies_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_ambient_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_module] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_internal_module] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__module] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_import_alias] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_nested_type_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_interface_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_impl_for_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_impl_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_extends_type_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_enum_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_enum_body] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_enum_assignment] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_alias_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_accessibility_modifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_accessibility_modifier_member] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_override_modifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_shader] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_async_block] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_workgroup_member] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_workgroup] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_compute_size] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_required_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_optional_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__parameter_name] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_omitting_type_annotation] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_opting_type_annotation] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_annotation] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_annotation_arrow] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_asserts] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__type] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_tuple_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_optional_tuple_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_optional_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_rest_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__tuple_type_member] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_constructor_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__primary_type] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_template_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_template_literal_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_infer_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_conditional_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_generic_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_predicate] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_predicate_annotation] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__type_query_member_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__type_query_subscript_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__type_query_call_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_query] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_index_type_query] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_lookup_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_mapped_type_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_literal_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__number] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_existential_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_flow_maybe_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_parenthesized_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_predefined_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_arguments] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_method_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_method_signature_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_call_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_property_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_parameters] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_default_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_constraint] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_construct_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_index_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_array_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_tuple_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_readonly_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_union_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_intersection_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_function_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [aux_sym_program_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_export_clause_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_named_imports_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_variable_declaration_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_switch_body_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_pattern_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_array_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_array_pattern_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_glimmer_template_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_class_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_string_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_string_repeat2] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_template_string_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_class_body_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_formal_parameters_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_implements_clause_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_extends_type_clause_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_enum_body_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_workgroup_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_template_literal_type_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_type_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_method_type_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_method_signature_type_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_type_parameters_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_tuple_type_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [alias_sym_property_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [alias_sym_shorthand_property_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [alias_sym_shorthand_property_identifier_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [alias_sym_statement_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [alias_sym_this_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [alias_sym_type_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n};\n\nenum {\n  field_alias = 1,\n  field_alternative = 2,\n  field_argument = 3,\n  field_arguments = 4,\n  field_body = 5,\n  field_close_tag = 6,\n  field_compute_size = 7,\n  field_condition = 8,\n  field_consequence = 9,\n  field_constraint = 10,\n  field_constructor = 11,\n  field_content = 12,\n  field_declaration = 13,\n  field_decorator = 14,\n  field_finalizer = 15,\n  field_flags = 16,\n  field_for = 17,\n  field_function = 18,\n  field_handler = 19,\n  field_identifier = 20,\n  field_increment = 21,\n  field_index = 22,\n  field_index_type = 23,\n  field_initializer = 24,\n  field_key = 25,\n  field_kind = 26,\n  field_label = 27,\n  field_left = 28,\n  field_member = 29,\n  field_module = 30,\n  field_name = 31,\n  field_object = 32,\n  field_open_tag = 33,\n  field_operator = 34,\n  field_optional_chain = 35,\n  field_parameter = 36,\n  field_parameters = 37,\n  field_pattern = 38,\n  field_property = 39,\n  field_return_type = 40,\n  field_right = 41,\n  field_sign = 42,\n  field_source = 43,\n  field_type = 44,\n  field_type_arguments = 45,\n  field_type_parameters = 46,\n  field_value = 47,\n  field_x = 48,\n  field_y = 49,\n  field_z = 50,\n};\n\nstatic const char * const ts_field_names[] = {\n  [0] = NULL,\n  [field_alias] = \"alias\",\n  [field_alternative] = \"alternative\",\n  [field_argument] = \"argument\",\n  [field_arguments] = \"arguments\",\n  [field_body] = \"body\",\n  [field_close_tag] = \"close_tag\",\n  [field_compute_size] = \"compute_size\",\n  [field_condition] = \"condition\",\n  [field_consequence] = \"consequence\",\n  [field_constraint] = \"constraint\",\n  [field_constructor] = \"constructor\",\n  [field_content] = \"content\",\n  [field_declaration] = \"declaration\",\n  [field_decorator] = \"decorator\",\n  [field_finalizer] = \"finalizer\",\n  [field_flags] = \"flags\",\n  [field_for] = \"for\",\n  [field_function] = \"function\",\n  [field_handler] = \"handler\",\n  [field_identifier] = \"identifier\",\n  [field_increment] = \"increment\",\n  [field_index] = \"index\",\n  [field_index_type] = \"index_type\",\n  [field_initializer] = \"initializer\",\n  [field_key] = \"key\",\n  [field_kind] = \"kind\",\n  [field_label] = \"label\",\n  [field_left] = \"left\",\n  [field_member] = \"member\",\n  [field_module] = \"module\",\n  [field_name] = \"name\",\n  [field_object] = \"object\",\n  [field_open_tag] = \"open_tag\",\n  [field_operator] = \"operator\",\n  [field_optional_chain] = \"optional_chain\",\n  [field_parameter] = \"parameter\",\n  [field_parameters] = \"parameters\",\n  [field_pattern] = \"pattern\",\n  [field_property] = \"property\",\n  [field_return_type] = \"return_type\",\n  [field_right] = \"right\",\n  [field_sign] = \"sign\",\n  [field_source] = \"source\",\n  [field_type] = \"type\",\n  [field_type_arguments] = \"type_arguments\",\n  [field_type_parameters] = \"type_parameters\",\n  [field_value] = \"value\",\n  [field_x] = \"x\",\n  [field_y] = \"y\",\n  [field_z] = \"z\",\n};\n\nstatic const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = {\n  [2] = {.index = 0, .length = 1},\n  [3] = {.index = 1, .length = 1},\n  [4] = {.index = 2, .length = 1},\n  [5] = {.index = 3, .length = 1},\n  [6] = {.index = 4, .length = 2},\n  [8] = {.index = 6, .length = 2},\n  [9] = {.index = 8, .length = 1},\n  [10] = {.index = 9, .length = 2},\n  [11] = {.index = 11, .length = 1},\n  [13] = {.index = 3, .length = 1},\n  [15] = {.index = 12, .length = 2},\n  [16] = {.index = 14, .length = 1},\n  [17] = {.index = 15, .length = 2},\n  [18] = {.index = 17, .length = 2},\n  [19] = {.index = 19, .length = 2},\n  [20] = {.index = 21, .length = 2},\n  [21] = {.index = 23, .length = 2},\n  [22] = {.index = 25, .length = 2},\n  [23] = {.index = 27, .length = 2},\n  [24] = {.index = 29, .length = 2},\n  [25] = {.index = 31, .length = 2},\n  [26] = {.index = 33, .length = 2},\n  [27] = {.index = 35, .length = 2},\n  [31] = {.index = 37, .length = 1},\n  [32] = {.index = 38, .length = 2},\n  [33] = {.index = 40, .length = 2},\n  [34] = {.index = 42, .length = 1},\n  [35] = {.index = 43, .length = 2},\n  [36] = {.index = 45, .length = 2},\n  [37] = {.index = 47, .length = 6},\n  [38] = {.index = 53, .length = 1},\n  [39] = {.index = 54, .length = 3},\n  [40] = {.index = 57, .length = 3},\n  [41] = {.index = 60, .length = 2},\n  [42] = {.index = 62, .length = 2},\n  [43] = {.index = 64, .length = 2},\n  [44] = {.index = 66, .length = 2},\n  [45] = {.index = 68, .length = 2},\n  [46] = {.index = 70, .length = 1},\n  [47] = {.index = 71, .length = 3},\n  [48] = {.index = 74, .length = 2},\n  [49] = {.index = 76, .length = 2},\n  [50] = {.index = 78, .length = 2},\n  [51] = {.index = 80, .length = 2},\n  [52] = {.index = 82, .length = 2},\n  [53] = {.index = 84, .length = 2},\n  [55] = {.index = 80, .length = 2},\n  [56] = {.index = 86, .length = 2},\n  [57] = {.index = 88, .length = 4},\n  [58] = {.index = 92, .length = 2},\n  [59] = {.index = 94, .length = 2},\n  [60] = {.index = 29, .length = 2},\n  [61] = {.index = 33, .length = 2},\n  [62] = {.index = 86, .length = 2},\n  [63] = {.index = 96, .length = 2},\n  [64] = {.index = 98, .length = 2},\n  [65] = {.index = 100, .length = 3},\n  [66] = {.index = 103, .length = 2},\n  [67] = {.index = 103, .length = 2},\n  [68] = {.index = 105, .length = 3},\n  [69] = {.index = 105, .length = 3},\n  [70] = {.index = 108, .length = 3},\n  [71] = {.index = 111, .length = 2},\n  [72] = {.index = 113, .length = 3},\n  [73] = {.index = 116, .length = 4},\n  [74] = {.index = 120, .length = 3},\n  [75] = {.index = 29, .length = 2},\n  [76] = {.index = 123, .length = 2},\n  [77] = {.index = 125, .length = 2},\n  [78] = {.index = 127, .length = 1},\n  [79] = {.index = 128, .length = 1},\n  [80] = {.index = 129, .length = 1},\n  [81] = {.index = 130, .length = 2},\n  [82] = {.index = 132, .length = 3},\n  [83] = {.index = 135, .length = 2},\n  [84] = {.index = 137, .length = 3},\n  [85] = {.index = 140, .length = 6},\n  [86] = {.index = 146, .length = 1},\n  [87] = {.index = 147, .length = 1},\n  [88] = {.index = 148, .length = 3},\n  [89] = {.index = 151, .length = 3},\n  [90] = {.index = 154, .length = 4},\n  [91] = {.index = 158, .length = 2},\n  [92] = {.index = 160, .length = 3},\n  [93] = {.index = 163, .length = 1},\n  [94] = {.index = 164, .length = 4},\n  [95] = {.index = 168, .length = 4},\n  [96] = {.index = 172, .length = 2},\n  [97] = {.index = 174, .length = 3},\n  [98] = {.index = 177, .length = 2},\n  [99] = {.index = 179, .length = 2},\n  [100] = {.index = 181, .length = 3},\n  [101] = {.index = 184, .length = 2},\n  [102] = {.index = 186, .length = 4},\n  [103] = {.index = 184, .length = 2},\n  [104] = {.index = 190, .length = 4},\n  [105] = {.index = 194, .length = 4},\n  [106] = {.index = 198, .length = 5},\n  [107] = {.index = 203, .length = 3},\n  [108] = {.index = 206, .length = 1},\n  [109] = {.index = 207, .length = 1},\n  [110] = {.index = 208, .length = 2},\n  [111] = {.index = 210, .length = 1},\n  [112] = {.index = 210, .length = 1},\n  [113] = {.index = 211, .length = 2},\n  [114] = {.index = 213, .length = 3},\n  [115] = {.index = 216, .length = 3},\n  [116] = {.index = 219, .length = 2},\n  [117] = {.index = 221, .length = 3},\n  [118] = {.index = 224, .length = 3},\n  [119] = {.index = 227, .length = 1},\n  [120] = {.index = 228, .length = 2},\n  [121] = {.index = 230, .length = 2},\n  [122] = {.index = 232, .length = 1},\n  [123] = {.index = 233, .length = 4},\n  [124] = {.index = 237, .length = 2},\n  [125] = {.index = 239, .length = 2},\n  [126] = {.index = 241, .length = 2},\n  [127] = {.index = 243, .length = 2},\n  [128] = {.index = 245, .length = 1},\n  [129] = {.index = 246, .length = 2},\n  [130] = {.index = 248, .length = 1},\n  [131] = {.index = 249, .length = 4},\n  [132] = {.index = 249, .length = 4},\n  [133] = {.index = 253, .length = 4},\n  [134] = {.index = 253, .length = 4},\n  [135] = {.index = 257, .length = 4},\n  [136] = {.index = 257, .length = 4},\n  [137] = {.index = 261, .length = 2},\n  [138] = {.index = 263, .length = 3},\n  [139] = {.index = 266, .length = 4},\n  [140] = {.index = 270, .length = 5},\n  [141] = {.index = 275, .length = 2},\n  [142] = {.index = 277, .length = 2},\n  [143] = {.index = 277, .length = 2},\n  [144] = {.index = 279, .length = 3},\n  [145] = {.index = 282, .length = 3},\n  [146] = {.index = 285, .length = 3},\n  [147] = {.index = 130, .length = 2},\n  [148] = {.index = 288, .length = 4},\n  [149] = {.index = 292, .length = 3},\n  [150] = {.index = 295, .length = 5},\n  [151] = {.index = 300, .length = 1},\n  [152] = {.index = 301, .length = 3},\n  [153] = {.index = 301, .length = 3},\n  [154] = {.index = 304, .length = 3},\n  [155] = {.index = 307, .length = 2},\n  [156] = {.index = 130, .length = 2},\n  [157] = {.index = 309, .length = 1},\n  [158] = {.index = 310, .length = 3},\n  [159] = {.index = 313, .length = 2},\n  [160] = {.index = 315, .length = 2},\n  [161] = {.index = 317, .length = 1},\n  [162] = {.index = 318, .length = 2},\n  [163] = {.index = 320, .length = 2},\n  [164] = {.index = 322, .length = 4},\n  [165] = {.index = 326, .length = 4},\n  [166] = {.index = 330, .length = 4},\n  [167] = {.index = 334, .length = 3},\n  [168] = {.index = 337, .length = 2},\n  [169] = {.index = 339, .length = 2},\n  [170] = {.index = 341, .length = 3},\n  [171] = {.index = 344, .length = 2},\n  [172] = {.index = 346, .length = 2},\n  [173] = {.index = 348, .length = 2},\n  [174] = {.index = 350, .length = 1},\n  [175] = {.index = 351, .length = 5},\n  [176] = {.index = 356, .length = 5},\n  [177] = {.index = 361, .length = 2},\n  [178] = {.index = 363, .length = 4},\n  [179] = {.index = 367, .length = 4},\n  [180] = {.index = 371, .length = 2},\n  [181] = {.index = 373, .length = 4},\n  [182] = {.index = 377, .length = 2},\n  [183] = {.index = 379, .length = 2},\n  [184] = {.index = 381, .length = 1},\n  [185] = {.index = 382, .length = 3},\n  [186] = {.index = 385, .length = 1},\n  [187] = {.index = 386, .length = 2},\n  [188] = {.index = 388, .length = 4},\n  [189] = {.index = 392, .length = 4},\n  [190] = {.index = 396, .length = 4},\n  [191] = {.index = 400, .length = 3},\n  [192] = {.index = 403, .length = 2},\n  [193] = {.index = 405, .length = 2},\n  [194] = {.index = 407, .length = 3},\n  [196] = {.index = 410, .length = 5},\n  [197] = {.index = 415, .length = 5},\n  [198] = {.index = 420, .length = 5},\n  [199] = {.index = 425, .length = 3},\n  [200] = {.index = 428, .length = 3},\n  [201] = {.index = 431, .length = 3},\n  [202] = {.index = 428, .length = 3},\n  [203] = {.index = 434, .length = 2},\n  [204] = {.index = 436, .length = 2},\n  [205] = {.index = 438, .length = 2},\n  [206] = {.index = 440, .length = 4},\n  [207] = {.index = 444, .length = 4},\n  [208] = {.index = 448, .length = 4},\n  [209] = {.index = 452, .length = 2},\n  [210] = {.index = 454, .length = 3},\n  [211] = {.index = 457, .length = 3},\n  [212] = {.index = 460, .length = 2},\n  [213] = {.index = 462, .length = 3},\n  [214] = {.index = 465, .length = 5},\n  [215] = {.index = 470, .length = 3},\n  [216] = {.index = 470, .length = 3},\n  [217] = {.index = 473, .length = 2},\n  [218] = {.index = 475, .length = 4},\n  [219] = {.index = 479, .length = 3},\n  [220] = {.index = 482, .length = 2},\n  [221] = {.index = 484, .length = 3},\n  [222] = {.index = 487, .length = 2},\n  [223] = {.index = 489, .length = 1},\n  [224] = {.index = 490, .length = 4},\n  [225] = {.index = 490, .length = 4},\n  [226] = {.index = 494, .length = 3},\n  [227] = {.index = 497, .length = 2},\n  [228] = {.index = 499, .length = 3},\n  [229] = {.index = 502, .length = 2},\n  [230] = {.index = 504, .length = 2},\n  [231] = {.index = 506, .length = 3},\n  [232] = {.index = 509, .length = 2},\n  [233] = {.index = 511, .length = 2},\n  [234] = {.index = 513, .length = 3},\n  [235] = {.index = 516, .length = 3},\n};\n\nstatic const TSFieldMapEntry ts_field_map_entries[] = {\n  [0] =\n    {field_decorator, 0},\n  [1] =\n    {field_parameters, 0},\n  [2] =\n    {field_declaration, 1},\n  [3] =\n    {field_name, 0},\n  [4] =\n    {field_body, 1, .inherited = true},\n    {field_name, 1, .inherited = true},\n  [6] =\n    {field_argument, 1},\n    {field_operator, 0},\n  [8] =\n    {field_pattern, 0},\n  [9] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n  [11] =\n    {field_body, 1},\n  [12] =\n    {field_argument, 0, .inherited = true},\n    {field_operator, 0, .inherited = true},\n  [14] =\n    {field_constructor, 1},\n  [15] =\n    {field_body, 1},\n    {field_identifier, 0},\n  [17] =\n    {field_argument, 0},\n    {field_operator, 1},\n  [19] =\n    {field_arguments, 1},\n    {field_function, 0},\n  [21] =\n    {field_close_tag, 1},\n    {field_open_tag, 0},\n  [23] =\n    {field_parameters, 0},\n    {field_return_type, 1},\n  [25] =\n    {field_parameters, 1},\n    {field_type_parameters, 0},\n  [27] =\n    {field_decorator, 0, .inherited = true},\n    {field_decorator, 1, .inherited = true},\n  [29] =\n    {field_left, 0},\n    {field_right, 2},\n  [31] =\n    {field_body, 2},\n    {field_label, 0},\n  [33] =\n    {field_body, 2},\n    {field_parameter, 0},\n  [35] =\n    {field_body, 1},\n    {field_name, 0},\n  [37] =\n    {field_name, 1},\n  [38] =\n    {field_name, 0},\n    {field_value, 1, .inherited = true},\n  [40] =\n    {field_name, 0},\n    {field_type, 1},\n  [42] =\n    {field_kind, 0},\n  [43] =\n    {field_condition, 1},\n    {field_consequence, 2},\n  [45] =\n    {field_body, 2},\n    {field_value, 1},\n  [47] =\n    {field_body, 2},\n    {field_kind, 1, .inherited = true},\n    {field_left, 1, .inherited = true},\n    {field_operator, 1, .inherited = true},\n    {field_right, 1, .inherited = true},\n    {field_value, 1, .inherited = true},\n  [53] =\n    {field_pattern, 1},\n  [54] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n    {field_value, 1, .inherited = true},\n  [57] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n    {field_type, 1},\n  [60] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 1},\n  [62] =\n    {field_body, 2},\n    {field_condition, 1},\n  [64] =\n    {field_body, 1},\n    {field_handler, 2},\n  [66] =\n    {field_body, 1},\n    {field_finalizer, 2},\n  [68] =\n    {field_body, 2},\n    {field_object, 1},\n  [70] =\n    {field_label, 1},\n  [71] =\n    {field_parameters, 0, .inherited = true},\n    {field_return_type, 0, .inherited = true},\n    {field_type_parameters, 0, .inherited = true},\n  [74] =\n    {field_object, 1, .inherited = true},\n    {field_property, 1, .inherited = true},\n  [76] =\n    {field_index, 1, .inherited = true},\n    {field_object, 1, .inherited = true},\n  [78] =\n    {field_arguments, 1, .inherited = true},\n    {field_function, 1, .inherited = true},\n  [80] =\n    {field_name, 0},\n    {field_type_arguments, 1},\n  [82] =\n    {field_name, 0},\n    {field_value, 1},\n  [84] =\n    {field_constraint, 1},\n    {field_name, 0},\n  [86] =\n    {field_body, 2},\n    {field_name, 1},\n  [88] =\n    {field_body, 2},\n    {field_parameters, 1, .inherited = true},\n    {field_return_type, 1, .inherited = true},\n    {field_type_parameters, 1, .inherited = true},\n  [92] =\n    {field_arguments, 2},\n    {field_constructor, 1},\n  [94] =\n    {field_constructor, 1},\n    {field_type_arguments, 2},\n  [96] =\n    {field_body, 2},\n    {field_compute_size, 1},\n  [98] =\n    {field_body, 2},\n    {field_type_arguments, 1},\n  [100] =\n    {field_left, 0},\n    {field_operator, 1},\n    {field_right, 2},\n  [103] =\n    {field_object, 0},\n    {field_property, 2},\n  [105] =\n    {field_object, 0},\n    {field_optional_chain, 1},\n    {field_property, 2},\n  [108] =\n    {field_arguments, 2},\n    {field_function, 0},\n    {field_type_arguments, 1},\n  [111] =\n    {field_arguments, 2},\n    {field_function, 0},\n  [113] =\n    {field_close_tag, 2},\n    {field_content, 1},\n    {field_open_tag, 0},\n  [116] =\n    {field_body, 2},\n    {field_parameters, 0, .inherited = true},\n    {field_return_type, 0, .inherited = true},\n    {field_type_parameters, 0, .inherited = true},\n  [120] =\n    {field_parameters, 1},\n    {field_return_type, 2},\n    {field_type_parameters, 0},\n  [123] =\n    {field_key, 0},\n    {field_value, 2},\n  [125] =\n    {field_alias, 2},\n    {field_name, 0},\n  [127] =\n    {field_source, 1},\n  [128] =\n    {field_source, 2, .inherited = true},\n  [129] =\n    {field_value, 1},\n  [130] =\n    {field_name, 0},\n    {field_type, 2},\n  [132] =\n    {field_name, 0},\n    {field_type, 1},\n    {field_value, 2, .inherited = true},\n  [135] =\n    {field_body, 3},\n    {field_name, 2},\n  [137] =\n    {field_alternative, 3},\n    {field_condition, 1},\n    {field_consequence, 2},\n  [140] =\n    {field_body, 3},\n    {field_kind, 2, .inherited = true},\n    {field_left, 2, .inherited = true},\n    {field_operator, 2, .inherited = true},\n    {field_right, 2, .inherited = true},\n    {field_value, 2, .inherited = true},\n  [146] =\n    {field_type, 2},\n  [147] =\n    {field_pattern, 2},\n  [148] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n    {field_value, 2, .inherited = true},\n  [151] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n    {field_type, 2},\n  [154] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n    {field_type, 1},\n    {field_value, 2, .inherited = true},\n  [158] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 2},\n  [160] =\n    {field_body, 1},\n    {field_finalizer, 3},\n    {field_handler, 2},\n  [163] =\n    {field_parameters, 1},\n  [164] =\n    {field_arguments, 1},\n    {field_function, 0},\n    {field_object, 0, .inherited = true},\n    {field_property, 0, .inherited = true},\n  [168] =\n    {field_arguments, 1},\n    {field_function, 0},\n    {field_index, 0, .inherited = true},\n    {field_object, 0, .inherited = true},\n  [172] =\n    {field_module, 0},\n    {field_name, 2},\n  [174] =\n    {field_constraint, 1},\n    {field_name, 0},\n    {field_value, 2},\n  [177] =\n    {field_parameters, 0},\n    {field_return_type, 2},\n  [179] =\n    {field_flags, 3},\n    {field_pattern, 1},\n  [181] =\n    {field_body, 3},\n    {field_name, 1},\n    {field_type_parameters, 2},\n  [184] =\n    {field_body, 3},\n    {field_parameter, 1},\n  [186] =\n    {field_body, 3},\n    {field_parameters, 2, .inherited = true},\n    {field_return_type, 2, .inherited = true},\n    {field_type_parameters, 2, .inherited = true},\n  [190] =\n    {field_body, 3},\n    {field_parameters, 1, .inherited = true},\n    {field_return_type, 1, .inherited = true},\n    {field_type_parameters, 1, .inherited = true},\n  [194] =\n    {field_name, 1},\n    {field_parameters, 2, .inherited = true},\n    {field_return_type, 2, .inherited = true},\n    {field_type_parameters, 2, .inherited = true},\n  [198] =\n    {field_body, 3},\n    {field_name, 1},\n    {field_parameters, 2, .inherited = true},\n    {field_return_type, 2, .inherited = true},\n    {field_type_parameters, 2, .inherited = true},\n  [203] =\n    {field_arguments, 3},\n    {field_constructor, 1},\n    {field_type_arguments, 2},\n  [206] =\n    {field_member, 0},\n  [207] =\n    {field_member, 2, .inherited = true},\n  [208] =\n    {field_member, 0, .inherited = true},\n    {field_member, 1, .inherited = true},\n  [210] =\n    {field_type, 1},\n  [211] =\n    {field_body, 3},\n    {field_name, 1},\n  [213] =\n    {field_body, 3},\n    {field_for, 1},\n    {field_name, 2},\n  [216] =\n    {field_body, 3},\n    {field_compute_size, 2},\n    {field_type_arguments, 1},\n  [219] =\n    {field_index, 2},\n    {field_object, 0},\n  [221] =\n    {field_arguments, 3},\n    {field_function, 0},\n    {field_type_arguments, 2},\n  [224] =\n    {field_body, 3},\n    {field_decorator, 0, .inherited = true},\n    {field_name, 2},\n  [227] =\n    {field_source, 3, .inherited = true},\n  [228] =\n    {field_name, 1},\n    {field_value, 3},\n  [230] =\n    {field_alias, 3},\n    {field_name, 1},\n  [232] =\n    {field_pattern, 3},\n  [233] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 0, .inherited = true},\n    {field_type, 2},\n    {field_value, 3, .inherited = true},\n  [237] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 3},\n  [239] =\n    {field_body, 1},\n    {field_condition, 3},\n  [241] =\n    {field_parameters, 1},\n    {field_type, 2},\n  [243] =\n    {field_parameters, 2},\n    {field_type_parameters, 1},\n  [245] =\n    {field_name, 2},\n  [246] =\n    {field_name, 1},\n    {field_type, 2},\n  [248] =\n    {field_parameters, 2},\n  [249] =\n    {field_object, 0},\n    {field_object, 0, .inherited = true},\n    {field_property, 0, .inherited = true},\n    {field_property, 2},\n  [253] =\n    {field_index, 0, .inherited = true},\n    {field_object, 0},\n    {field_object, 0, .inherited = true},\n    {field_property, 2},\n  [257] =\n    {field_arguments, 0, .inherited = true},\n    {field_function, 0, .inherited = true},\n    {field_object, 0},\n    {field_property, 2},\n  [261] =\n    {field_parameters, 1},\n    {field_type, 3},\n  [263] =\n    {field_parameters, 1},\n    {field_return_type, 3},\n    {field_type_parameters, 0},\n  [266] =\n    {field_name, 2},\n    {field_parameters, 3, .inherited = true},\n    {field_return_type, 3, .inherited = true},\n    {field_type_parameters, 3, .inherited = true},\n  [270] =\n    {field_body, 4},\n    {field_name, 2},\n    {field_parameters, 3, .inherited = true},\n    {field_return_type, 3, .inherited = true},\n    {field_type_parameters, 3, .inherited = true},\n  [275] =\n    {field_name, 0},\n    {field_value, 2, .inherited = true},\n  [277] =\n    {field_type, 1},\n    {field_type, 2, .inherited = true},\n  [279] =\n    {field_body, 4},\n    {field_name, 1},\n    {field_type_parameters, 2},\n  [282] =\n    {field_alternative, 4},\n    {field_condition, 0},\n    {field_consequence, 2},\n  [285] =\n    {field_index, 3},\n    {field_object, 0},\n    {field_optional_chain, 1},\n  [288] =\n    {field_body, 4},\n    {field_decorator, 0, .inherited = true},\n    {field_name, 2},\n    {field_type_parameters, 3},\n  [292] =\n    {field_name, 1},\n    {field_type_parameters, 2},\n    {field_value, 4},\n  [295] =\n    {field_body, 4},\n    {field_name, 1},\n    {field_parameters, 3, .inherited = true},\n    {field_return_type, 3, .inherited = true},\n    {field_type_parameters, 3, .inherited = true},\n  [300] =\n    {field_body, 2},\n  [301] =\n    {field_left, 1},\n    {field_operator, 2},\n    {field_right, 3},\n  [304] =\n    {field_body, 5},\n    {field_condition, 3},\n    {field_initializer, 2},\n  [307] =\n    {field_decorator, 0, .inherited = true},\n    {field_pattern, 4},\n  [309] =\n    {field_type, 3},\n  [310] =\n    {field_parameters, 2},\n    {field_type, 3},\n    {field_type_parameters, 1},\n  [313] =\n    {field_name, 2},\n    {field_type, 3},\n  [315] =\n    {field_name, 1},\n    {field_type, 3},\n  [317] =\n    {field_name, 3},\n  [318] =\n    {field_parameters, 2},\n    {field_type, 3},\n  [320] =\n    {field_parameters, 3},\n    {field_type_parameters, 2},\n  [322] =\n    {field_index, 2},\n    {field_object, 0},\n    {field_object, 0, .inherited = true},\n    {field_property, 0, .inherited = true},\n  [326] =\n    {field_index, 0, .inherited = true},\n    {field_index, 2},\n    {field_object, 0},\n    {field_object, 0, .inherited = true},\n  [330] =\n    {field_arguments, 0, .inherited = true},\n    {field_function, 0, .inherited = true},\n    {field_index, 2},\n    {field_object, 0},\n  [334] =\n    {field_parameters, 2},\n    {field_type, 4},\n    {field_type_parameters, 1},\n  [337] =\n    {field_parameters, 2},\n    {field_type, 4},\n  [339] =\n    {field_name, 1},\n    {field_value, 2, .inherited = true},\n  [341] =\n    {field_name, 0},\n    {field_type, 2},\n    {field_value, 3, .inherited = true},\n  [344] =\n    {field_type, 0, .inherited = true},\n    {field_type, 1, .inherited = true},\n  [346] =\n    {field_name, 1},\n    {field_name, 2, .inherited = true},\n  [348] =\n    {field_name, 0, .inherited = true},\n    {field_name, 1, .inherited = true},\n  [350] =\n    {field_name, 2, .inherited = true},\n  [351] =\n    {field_body, 5},\n    {field_name, 2},\n    {field_parameters, 4, .inherited = true},\n    {field_return_type, 4, .inherited = true},\n    {field_type_parameters, 4, .inherited = true},\n  [356] =\n    {field_body, 5},\n    {field_name, 3},\n    {field_parameters, 4, .inherited = true},\n    {field_return_type, 4, .inherited = true},\n    {field_type_parameters, 4, .inherited = true},\n  [361] =\n    {field_body, 3},\n    {field_value, 1},\n  [363] =\n    {field_kind, 1},\n    {field_left, 2},\n    {field_operator, 3},\n    {field_right, 4},\n  [367] =\n    {field_body, 6},\n    {field_condition, 3},\n    {field_increment, 4},\n    {field_initializer, 2},\n  [371] =\n    {field_body, 4},\n    {field_parameter, 2},\n  [373] =\n    {field_name, 1},\n    {field_parameters, 3, .inherited = true},\n    {field_return_type, 3, .inherited = true},\n    {field_type_parameters, 3, .inherited = true},\n  [377] =\n    {field_name, 2},\n    {field_type, 4},\n  [379] =\n    {field_name, 3},\n    {field_type, 4},\n  [381] =\n    {field_type, 4},\n  [382] =\n    {field_parameters, 3},\n    {field_type, 4},\n    {field_type_parameters, 2},\n  [385] =\n    {field_name, 4},\n  [386] =\n    {field_index, 3},\n    {field_object, 0},\n  [388] =\n    {field_index, 3},\n    {field_object, 0},\n    {field_object, 0, .inherited = true},\n    {field_property, 0, .inherited = true},\n  [392] =\n    {field_index, 0, .inherited = true},\n    {field_index, 3},\n    {field_object, 0},\n    {field_object, 0, .inherited = true},\n  [396] =\n    {field_arguments, 0, .inherited = true},\n    {field_function, 0, .inherited = true},\n    {field_index, 3},\n    {field_object, 0},\n  [400] =\n    {field_parameters, 3},\n    {field_type, 5},\n    {field_type_parameters, 2},\n  [403] =\n    {field_name, 2},\n    {field_value, 3, .inherited = true},\n  [405] =\n    {field_name, 1},\n    {field_value, 3, .inherited = true},\n  [407] =\n    {field_name, 1},\n    {field_type, 2},\n    {field_value, 3, .inherited = true},\n  [410] =\n    {field_body, 6},\n    {field_name, 3},\n    {field_parameters, 5, .inherited = true},\n    {field_return_type, 5, .inherited = true},\n    {field_type_parameters, 5, .inherited = true},\n  [415] =\n    {field_body, 6},\n    {field_name, 4},\n    {field_parameters, 5, .inherited = true},\n    {field_return_type, 5, .inherited = true},\n    {field_type_parameters, 5, .inherited = true},\n  [420] =\n    {field_kind, 1},\n    {field_left, 2},\n    {field_operator, 4},\n    {field_right, 5},\n    {field_value, 3, .inherited = true},\n  [425] =\n    {field_body, 5},\n    {field_parameter, 2},\n    {field_type, 3},\n  [428] =\n    {field_index_type, 3},\n    {field_name, 1},\n    {field_type, 5},\n  [431] =\n    {field_alias, 4},\n    {field_name, 0},\n    {field_type, 2},\n  [434] =\n    {field_sign, 0},\n    {field_type, 5},\n  [436] =\n    {field_name, 3},\n    {field_type, 5},\n  [438] =\n    {field_name, 4},\n    {field_type, 5},\n  [440] =\n    {field_name, 2},\n    {field_parameters, 4, .inherited = true},\n    {field_return_type, 4, .inherited = true},\n    {field_type_parameters, 4, .inherited = true},\n  [444] =\n    {field_name, 3},\n    {field_parameters, 4, .inherited = true},\n    {field_return_type, 4, .inherited = true},\n    {field_type_parameters, 4, .inherited = true},\n  [448] =\n    {field_alternative, 6},\n    {field_consequence, 4},\n    {field_left, 0},\n    {field_right, 2},\n  [452] =\n    {field_name, 2},\n    {field_value, 4, .inherited = true},\n  [454] =\n    {field_name, 2},\n    {field_type, 3},\n    {field_value, 4, .inherited = true},\n  [457] =\n    {field_name, 1},\n    {field_type, 3},\n    {field_value, 4, .inherited = true},\n  [460] =\n    {field_name, 3},\n    {field_value, 4, .inherited = true},\n  [462] =\n    {field_x, 1},\n    {field_y, 3},\n    {field_z, 5},\n  [465] =\n    {field_body, 7},\n    {field_name, 4},\n    {field_parameters, 6, .inherited = true},\n    {field_return_type, 6, .inherited = true},\n    {field_type_parameters, 6, .inherited = true},\n  [470] =\n    {field_index_type, 4},\n    {field_name, 2},\n    {field_type, 6},\n  [473] =\n    {field_name, 4},\n    {field_type, 6},\n  [475] =\n    {field_name, 3},\n    {field_parameters, 5, .inherited = true},\n    {field_return_type, 5, .inherited = true},\n    {field_type_parameters, 5, .inherited = true},\n  [479] =\n    {field_name, 2},\n    {field_type, 4},\n    {field_value, 5, .inherited = true},\n  [482] =\n    {field_name, 3},\n    {field_value, 5, .inherited = true},\n  [484] =\n    {field_name, 3},\n    {field_type, 4},\n    {field_value, 5, .inherited = true},\n  [487] =\n    {field_name, 4},\n    {field_value, 5, .inherited = true},\n  [489] =\n    {field_name, 5},\n  [490] =\n    {field_index_type, 5},\n    {field_name, 3},\n    {field_sign, 0},\n    {field_type, 7},\n  [494] =\n    {field_name, 3},\n    {field_type, 5},\n    {field_value, 6, .inherited = true},\n  [497] =\n    {field_name, 4},\n    {field_value, 6, .inherited = true},\n  [499] =\n    {field_name, 4},\n    {field_type, 5},\n    {field_value, 6, .inherited = true},\n  [502] =\n    {field_name, 5},\n    {field_value, 6, .inherited = true},\n  [504] =\n    {field_name, 5},\n    {field_type, 6},\n  [506] =\n    {field_name, 4},\n    {field_type, 6},\n    {field_value, 7, .inherited = true},\n  [509] =\n    {field_name, 5},\n    {field_value, 7, .inherited = true},\n  [511] =\n    {field_name, 5},\n    {field_type, 7},\n  [513] =\n    {field_name, 5},\n    {field_type, 6},\n    {field_value, 7, .inherited = true},\n  [516] =\n    {field_name, 5},\n    {field_type, 7},\n    {field_value, 8, .inherited = true},\n};\n\nstatic const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {\n  [0] = {0},\n  [1] = {\n    [0] = sym_identifier,\n  },\n  [7] = {\n    [0] = alias_sym_property_identifier,\n  },\n  [12] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [13] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [14] = {\n    [0] = alias_sym_this_type,\n  },\n  [24] = {\n    [0] = sym_identifier,\n  },\n  [25] = {\n    [0] = alias_sym_statement_identifier,\n  },\n  [26] = {\n    [0] = sym_identifier,\n  },\n  [28] = {\n    [1] = alias_sym_shorthand_property_identifier,\n  },\n  [29] = {\n    [1] = alias_sym_shorthand_property_identifier_pattern,\n  },\n  [30] = {\n    [1] = sym_identifier,\n  },\n  [46] = {\n    [1] = alias_sym_statement_identifier,\n  },\n  [51] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [52] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [53] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [54] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [56] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [66] = {\n    [2] = alias_sym_property_identifier,\n  },\n  [68] = {\n    [2] = alias_sym_property_identifier,\n  },\n  [75] = {\n    [0] = alias_sym_shorthand_property_identifier_pattern,\n  },\n  [96] = {\n    [2] = alias_sym_type_identifier,\n  },\n  [97] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [100] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [101] = {\n    [1] = sym_identifier,\n  },\n  [111] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [113] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [114] = {\n    [2] = alias_sym_type_identifier,\n  },\n  [118] = {\n    [2] = alias_sym_type_identifier,\n  },\n  [120] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [131] = {\n    [2] = alias_sym_property_identifier,\n  },\n  [133] = {\n    [2] = alias_sym_property_identifier,\n  },\n  [135] = {\n    [2] = alias_sym_property_identifier,\n  },\n  [142] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [144] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [147] = {\n    [0] = sym_identifier,\n  },\n  [148] = {\n    [2] = alias_sym_type_identifier,\n  },\n  [149] = {\n    [1] = alias_sym_type_identifier,\n  },\n  [152] = {\n    [1] = sym_identifier,\n  },\n  [156] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [195] = {\n    [3] = alias_sym_property_identifier,\n  },\n  [200] = {\n    [1] = sym_identifier,\n  },\n  [201] = {\n    [0] = alias_sym_type_identifier,\n  },\n  [215] = {\n    [2] = sym_identifier,\n  },\n  [224] = {\n    [3] = sym_identifier,\n  },\n};\n\nstatic const uint16_t ts_non_terminal_alias_map[] = {\n  sym_predefined_type, 2,\n    sym_predefined_type,\n    sym_identifier,\n  0,\n};\n\nstatic const TSStateId ts_primary_state_ids[STATE_COUNT] = {\n  [0] = 0,\n  [1] = 1,\n  [2] = 2,\n  [3] = 2,\n  [4] = 4,\n  [5] = 4,\n  [6] = 4,\n  [7] = 4,\n  [8] = 4,\n  [9] = 9,\n  [10] = 10,\n  [11] = 11,\n  [12] = 12,\n  [13] = 13,\n  [14] = 14,\n  [15] = 15,\n  [16] = 14,\n  [17] = 15,\n  [18] = 14,\n  [19] = 14,\n  [20] = 15,\n  [21] = 21,\n  [22] = 15,\n  [23] = 15,\n  [24] = 15,\n  [25] = 14,\n  [26] = 14,\n  [27] = 15,\n  [28] = 14,\n  [29] = 14,\n  [30] = 30,\n  [31] = 15,\n  [32] = 32,\n  [33] = 33,\n  [34] = 34,\n  [35] = 35,\n  [36] = 36,\n  [37] = 34,\n  [38] = 33,\n  [39] = 39,\n  [40] = 40,\n  [41] = 36,\n  [42] = 42,\n  [43] = 43,\n  [44] = 44,\n  [45] = 42,\n  [46] = 46,\n  [47] = 44,\n  [48] = 35,\n  [49] = 39,\n  [50] = 43,\n  [51] = 40,\n  [52] = 52,\n  [53] = 53,\n  [54] = 54,\n  [55] = 55,\n  [56] = 56,\n  [57] = 57,\n  [58] = 54,\n  [59] = 59,\n  [60] = 60,\n  [61] = 60,\n  [62] = 60,\n  [63] = 60,\n  [64] = 60,\n  [65] = 65,\n  [66] = 60,\n  [67] = 60,\n  [68] = 65,\n  [69] = 60,\n  [70] = 60,\n  [71] = 65,\n  [72] = 60,\n  [73] = 73,\n  [74] = 73,\n  [75] = 73,\n  [76] = 73,\n  [77] = 73,\n  [78] = 78,\n  [79] = 79,\n  [80] = 80,\n  [81] = 80,\n  [82] = 80,\n  [83] = 83,\n  [84] = 80,\n  [85] = 80,\n  [86] = 86,\n  [87] = 80,\n  [88] = 80,\n  [89] = 89,\n  [90] = 89,\n  [91] = 89,\n  [92] = 89,\n  [93] = 89,\n  [94] = 89,\n  [95] = 89,\n  [96] = 96,\n  [97] = 97,\n  [98] = 96,\n  [99] = 97,\n  [100] = 96,\n  [101] = 97,\n  [102] = 97,\n  [103] = 103,\n  [104] = 104,\n  [105] = 103,\n  [106] = 104,\n  [107] = 107,\n  [108] = 104,\n  [109] = 109,\n  [110] = 107,\n  [111] = 107,\n  [112] = 103,\n  [113] = 113,\n  [114] = 96,\n  [115] = 109,\n  [116] = 96,\n  [117] = 117,\n  [118] = 109,\n  [119] = 96,\n  [120] = 120,\n  [121] = 121,\n  [122] = 113,\n  [123] = 123,\n  [124] = 124,\n  [125] = 125,\n  [126] = 126,\n  [127] = 127,\n  [128] = 128,\n  [129] = 129,\n  [130] = 130,\n  [131] = 131,\n  [132] = 132,\n  [133] = 96,\n  [134] = 134,\n  [135] = 135,\n  [136] = 136,\n  [137] = 137,\n  [138] = 138,\n  [139] = 138,\n  [140] = 140,\n  [141] = 138,\n  [142] = 138,\n  [143] = 138,\n  [144] = 138,\n  [145] = 138,\n  [146] = 146,\n  [147] = 140,\n  [148] = 148,\n  [149] = 137,\n  [150] = 150,\n  [151] = 151,\n  [152] = 152,\n  [153] = 153,\n  [154] = 154,\n  [155] = 137,\n  [156] = 151,\n  [157] = 152,\n  [158] = 158,\n  [159] = 137,\n  [160] = 137,\n  [161] = 137,\n  [162] = 162,\n  [163] = 163,\n  [164] = 164,\n  [165] = 137,\n  [166] = 166,\n  [167] = 164,\n  [168] = 164,\n  [169] = 137,\n  [170] = 164,\n  [171] = 164,\n  [172] = 163,\n  [173] = 164,\n  [174] = 166,\n  [175] = 164,\n  [176] = 176,\n  [177] = 176,\n  [178] = 178,\n  [179] = 179,\n  [180] = 180,\n  [181] = 181,\n  [182] = 182,\n  [183] = 182,\n  [184] = 184,\n  [185] = 182,\n  [186] = 182,\n  [187] = 182,\n  [188] = 188,\n  [189] = 182,\n  [190] = 190,\n  [191] = 191,\n  [192] = 182,\n  [193] = 182,\n  [194] = 182,\n  [195] = 195,\n  [196] = 196,\n  [197] = 182,\n  [198] = 182,\n  [199] = 182,\n  [200] = 200,\n  [201] = 200,\n  [202] = 202,\n  [203] = 203,\n  [204] = 204,\n  [205] = 205,\n  [206] = 206,\n  [207] = 205,\n  [208] = 208,\n  [209] = 208,\n  [210] = 210,\n  [211] = 211,\n  [212] = 208,\n  [213] = 204,\n  [214] = 214,\n  [215] = 203,\n  [216] = 216,\n  [217] = 217,\n  [218] = 216,\n  [219] = 203,\n  [220] = 202,\n  [221] = 208,\n  [222] = 216,\n  [223] = 211,\n  [224] = 211,\n  [225] = 205,\n  [226] = 208,\n  [227] = 205,\n  [228] = 228,\n  [229] = 214,\n  [230] = 208,\n  [231] = 231,\n  [232] = 228,\n  [233] = 233,\n  [234] = 208,\n  [235] = 228,\n  [236] = 205,\n  [237] = 237,\n  [238] = 216,\n  [239] = 239,\n  [240] = 202,\n  [241] = 205,\n  [242] = 214,\n  [243] = 214,\n  [244] = 244,\n  [245] = 208,\n  [246] = 246,\n  [247] = 211,\n  [248] = 214,\n  [249] = 211,\n  [250] = 244,\n  [251] = 251,\n  [252] = 228,\n  [253] = 253,\n  [254] = 205,\n  [255] = 214,\n  [256] = 216,\n  [257] = 216,\n  [258] = 202,\n  [259] = 259,\n  [260] = 203,\n  [261] = 203,\n  [262] = 202,\n  [263] = 216,\n  [264] = 202,\n  [265] = 205,\n  [266] = 228,\n  [267] = 237,\n  [268] = 228,\n  [269] = 217,\n  [270] = 203,\n  [271] = 228,\n  [272] = 214,\n  [273] = 203,\n  [274] = 211,\n  [275] = 211,\n  [276] = 276,\n  [277] = 204,\n  [278] = 278,\n  [279] = 202,\n  [280] = 280,\n  [281] = 281,\n  [282] = 282,\n  [283] = 283,\n  [284] = 284,\n  [285] = 285,\n  [286] = 286,\n  [287] = 287,\n  [288] = 282,\n  [289] = 289,\n  [290] = 290,\n  [291] = 291,\n  [292] = 292,\n  [293] = 293,\n  [294] = 286,\n  [295] = 285,\n  [296] = 296,\n  [297] = 293,\n  [298] = 283,\n  [299] = 292,\n  [300] = 291,\n  [301] = 290,\n  [302] = 289,\n  [303] = 282,\n  [304] = 281,\n  [305] = 305,\n  [306] = 306,\n  [307] = 307,\n  [308] = 308,\n  [309] = 308,\n  [310] = 310,\n  [311] = 307,\n  [312] = 312,\n  [313] = 305,\n  [314] = 296,\n  [315] = 315,\n  [316] = 315,\n  [317] = 317,\n  [318] = 315,\n  [319] = 283,\n  [320] = 320,\n  [321] = 281,\n  [322] = 322,\n  [323] = 320,\n  [324] = 322,\n  [325] = 310,\n  [326] = 283,\n  [327] = 283,\n  [328] = 328,\n  [329] = 284,\n  [330] = 287,\n  [331] = 282,\n  [332] = 332,\n  [333] = 317,\n  [334] = 289,\n  [335] = 322,\n  [336] = 308,\n  [337] = 337,\n  [338] = 310,\n  [339] = 290,\n  [340] = 320,\n  [341] = 341,\n  [342] = 317,\n  [343] = 291,\n  [344] = 317,\n  [345] = 307,\n  [346] = 283,\n  [347] = 322,\n  [348] = 328,\n  [349] = 292,\n  [350] = 283,\n  [351] = 293,\n  [352] = 328,\n  [353] = 286,\n  [354] = 354,\n  [355] = 307,\n  [356] = 312,\n  [357] = 284,\n  [358] = 296,\n  [359] = 285,\n  [360] = 285,\n  [361] = 296,\n  [362] = 286,\n  [363] = 285,\n  [364] = 296,\n  [365] = 286,\n  [366] = 366,\n  [367] = 293,\n  [368] = 292,\n  [369] = 291,\n  [370] = 293,\n  [371] = 290,\n  [372] = 289,\n  [373] = 373,\n  [374] = 282,\n  [375] = 281,\n  [376] = 305,\n  [377] = 292,\n  [378] = 308,\n  [379] = 379,\n  [380] = 320,\n  [381] = 312,\n  [382] = 315,\n  [383] = 328,\n  [384] = 283,\n  [385] = 307,\n  [386] = 291,\n  [387] = 387,\n  [388] = 320,\n  [389] = 322,\n  [390] = 328,\n  [391] = 290,\n  [392] = 289,\n  [393] = 317,\n  [394] = 322,\n  [395] = 328,\n  [396] = 287,\n  [397] = 315,\n  [398] = 284,\n  [399] = 312,\n  [400] = 308,\n  [401] = 305,\n  [402] = 281,\n  [403] = 332,\n  [404] = 284,\n  [405] = 405,\n  [406] = 312,\n  [407] = 283,\n  [408] = 282,\n  [409] = 289,\n  [410] = 290,\n  [411] = 291,\n  [412] = 287,\n  [413] = 320,\n  [414] = 332,\n  [415] = 354,\n  [416] = 307,\n  [417] = 287,\n  [418] = 292,\n  [419] = 317,\n  [420] = 310,\n  [421] = 281,\n  [422] = 296,\n  [423] = 285,\n  [424] = 283,\n  [425] = 305,\n  [426] = 286,\n  [427] = 427,\n  [428] = 293,\n  [429] = 293,\n  [430] = 287,\n  [431] = 292,\n  [432] = 286,\n  [433] = 285,\n  [434] = 287,\n  [435] = 308,\n  [436] = 284,\n  [437] = 315,\n  [438] = 310,\n  [439] = 312,\n  [440] = 310,\n  [441] = 328,\n  [442] = 442,\n  [443] = 322,\n  [444] = 320,\n  [445] = 312,\n  [446] = 332,\n  [447] = 315,\n  [448] = 305,\n  [449] = 332,\n  [450] = 284,\n  [451] = 283,\n  [452] = 317,\n  [453] = 453,\n  [454] = 291,\n  [455] = 290,\n  [456] = 456,\n  [457] = 289,\n  [458] = 296,\n  [459] = 282,\n  [460] = 281,\n  [461] = 307,\n  [462] = 283,\n  [463] = 310,\n  [464] = 308,\n  [465] = 305,\n  [466] = 466,\n  [467] = 466,\n  [468] = 466,\n  [469] = 469,\n  [470] = 469,\n  [471] = 469,\n  [472] = 472,\n  [473] = 472,\n  [474] = 474,\n  [475] = 475,\n  [476] = 475,\n  [477] = 477,\n  [478] = 475,\n  [479] = 475,\n  [480] = 475,\n  [481] = 477,\n  [482] = 482,\n  [483] = 474,\n  [484] = 475,\n  [485] = 485,\n  [486] = 472,\n  [487] = 475,\n  [488] = 475,\n  [489] = 489,\n  [490] = 490,\n  [491] = 475,\n  [492] = 475,\n  [493] = 474,\n  [494] = 475,\n  [495] = 482,\n  [496] = 475,\n  [497] = 475,\n  [498] = 130,\n  [499] = 499,\n  [500] = 126,\n  [501] = 125,\n  [502] = 134,\n  [503] = 503,\n  [504] = 120,\n  [505] = 503,\n  [506] = 506,\n  [507] = 503,\n  [508] = 508,\n  [509] = 509,\n  [510] = 510,\n  [511] = 511,\n  [512] = 512,\n  [513] = 130,\n  [514] = 514,\n  [515] = 509,\n  [516] = 125,\n  [517] = 517,\n  [518] = 518,\n  [519] = 519,\n  [520] = 520,\n  [521] = 521,\n  [522] = 522,\n  [523] = 509,\n  [524] = 524,\n  [525] = 134,\n  [526] = 123,\n  [527] = 126,\n  [528] = 528,\n  [529] = 529,\n  [530] = 530,\n  [531] = 132,\n  [532] = 532,\n  [533] = 533,\n  [534] = 534,\n  [535] = 535,\n  [536] = 536,\n  [537] = 537,\n  [538] = 538,\n  [539] = 539,\n  [540] = 540,\n  [541] = 541,\n  [542] = 542,\n  [543] = 543,\n  [544] = 544,\n  [545] = 545,\n  [546] = 546,\n  [547] = 547,\n  [548] = 548,\n  [549] = 549,\n  [550] = 550,\n  [551] = 551,\n  [552] = 552,\n  [553] = 553,\n  [554] = 554,\n  [555] = 555,\n  [556] = 556,\n  [557] = 557,\n  [558] = 558,\n  [559] = 559,\n  [560] = 560,\n  [561] = 561,\n  [562] = 562,\n  [563] = 136,\n  [564] = 564,\n  [565] = 565,\n  [566] = 566,\n  [567] = 567,\n  [568] = 568,\n  [569] = 127,\n  [570] = 570,\n  [571] = 571,\n  [572] = 572,\n  [573] = 573,\n  [574] = 574,\n  [575] = 575,\n  [576] = 576,\n  [577] = 129,\n  [578] = 578,\n  [579] = 579,\n  [580] = 580,\n  [581] = 581,\n  [582] = 128,\n  [583] = 583,\n  [584] = 584,\n  [585] = 585,\n  [586] = 586,\n  [587] = 587,\n  [588] = 588,\n  [589] = 589,\n  [590] = 590,\n  [591] = 591,\n  [592] = 592,\n  [593] = 593,\n  [594] = 594,\n  [595] = 595,\n  [596] = 596,\n  [597] = 597,\n  [598] = 598,\n  [599] = 599,\n  [600] = 600,\n  [601] = 601,\n  [602] = 602,\n  [603] = 603,\n  [604] = 604,\n  [605] = 605,\n  [606] = 606,\n  [607] = 607,\n  [608] = 608,\n  [609] = 609,\n  [610] = 610,\n  [611] = 611,\n  [612] = 612,\n  [613] = 613,\n  [614] = 614,\n  [615] = 615,\n  [616] = 616,\n  [617] = 617,\n  [618] = 618,\n  [619] = 619,\n  [620] = 620,\n  [621] = 621,\n  [622] = 622,\n  [623] = 623,\n  [624] = 624,\n  [625] = 625,\n  [626] = 626,\n  [627] = 627,\n  [628] = 628,\n  [629] = 629,\n  [630] = 630,\n  [631] = 631,\n  [632] = 632,\n  [633] = 633,\n  [634] = 634,\n  [635] = 635,\n  [636] = 636,\n  [637] = 637,\n  [638] = 638,\n  [639] = 639,\n  [640] = 640,\n  [641] = 641,\n  [642] = 642,\n  [643] = 643,\n  [644] = 644,\n  [645] = 645,\n  [646] = 646,\n  [647] = 647,\n  [648] = 648,\n  [649] = 649,\n  [650] = 650,\n  [651] = 651,\n  [652] = 652,\n  [653] = 653,\n  [654] = 654,\n  [655] = 655,\n  [656] = 655,\n  [657] = 657,\n  [658] = 657,\n  [659] = 659,\n  [660] = 660,\n  [661] = 661,\n  [662] = 662,\n  [663] = 663,\n  [664] = 664,\n  [665] = 665,\n  [666] = 666,\n  [667] = 667,\n  [668] = 668,\n  [669] = 669,\n  [670] = 670,\n  [671] = 671,\n  [672] = 672,\n  [673] = 672,\n  [674] = 672,\n  [675] = 672,\n  [676] = 672,\n  [677] = 677,\n  [678] = 678,\n  [679] = 679,\n  [680] = 680,\n  [681] = 681,\n  [682] = 677,\n  [683] = 680,\n  [684] = 680,\n  [685] = 677,\n  [686] = 677,\n  [687] = 680,\n  [688] = 680,\n  [689] = 677,\n  [690] = 690,\n  [691] = 691,\n  [692] = 692,\n  [693] = 693,\n  [694] = 694,\n  [695] = 695,\n  [696] = 696,\n  [697] = 695,\n  [698] = 698,\n  [699] = 699,\n  [700] = 696,\n  [701] = 696,\n  [702] = 696,\n  [703] = 703,\n  [704] = 704,\n  [705] = 705,\n  [706] = 706,\n  [707] = 704,\n  [708] = 695,\n  [709] = 699,\n  [710] = 695,\n  [711] = 704,\n  [712] = 695,\n  [713] = 706,\n  [714] = 696,\n  [715] = 698,\n  [716] = 698,\n  [717] = 699,\n  [718] = 699,\n  [719] = 703,\n  [720] = 704,\n  [721] = 696,\n  [722] = 706,\n  [723] = 705,\n  [724] = 696,\n  [725] = 698,\n  [726] = 696,\n  [727] = 704,\n  [728] = 698,\n  [729] = 704,\n  [730] = 699,\n  [731] = 696,\n  [732] = 696,\n  [733] = 696,\n  [734] = 698,\n  [735] = 699,\n  [736] = 706,\n  [737] = 696,\n  [738] = 706,\n  [739] = 695,\n  [740] = 740,\n  [741] = 741,\n  [742] = 742,\n  [743] = 743,\n  [744] = 744,\n  [745] = 745,\n  [746] = 746,\n  [747] = 747,\n  [748] = 748,\n  [749] = 749,\n  [750] = 749,\n  [751] = 751,\n  [752] = 744,\n  [753] = 740,\n  [754] = 754,\n  [755] = 755,\n  [756] = 756,\n  [757] = 757,\n  [758] = 758,\n  [759] = 742,\n  [760] = 760,\n  [761] = 744,\n  [762] = 762,\n  [763] = 741,\n  [764] = 764,\n  [765] = 749,\n  [766] = 755,\n  [767] = 767,\n  [768] = 768,\n  [769] = 747,\n  [770] = 743,\n  [771] = 771,\n  [772] = 757,\n  [773] = 757,\n  [774] = 774,\n  [775] = 775,\n  [776] = 755,\n  [777] = 743,\n  [778] = 774,\n  [779] = 746,\n  [780] = 780,\n  [781] = 781,\n  [782] = 745,\n  [783] = 745,\n  [784] = 746,\n  [785] = 785,\n  [786] = 786,\n  [787] = 751,\n  [788] = 746,\n  [789] = 774,\n  [790] = 790,\n  [791] = 740,\n  [792] = 792,\n  [793] = 751,\n  [794] = 755,\n  [795] = 795,\n  [796] = 741,\n  [797] = 762,\n  [798] = 798,\n  [799] = 799,\n  [800] = 745,\n  [801] = 786,\n  [802] = 798,\n  [803] = 757,\n  [804] = 741,\n  [805] = 792,\n  [806] = 786,\n  [807] = 792,\n  [808] = 808,\n  [809] = 775,\n  [810] = 810,\n  [811] = 811,\n  [812] = 771,\n  [813] = 771,\n  [814] = 814,\n  [815] = 743,\n  [816] = 798,\n  [817] = 747,\n  [818] = 740,\n  [819] = 751,\n  [820] = 747,\n  [821] = 749,\n  [822] = 744,\n  [823] = 774,\n  [824] = 824,\n  [825] = 744,\n  [826] = 749,\n  [827] = 747,\n  [828] = 792,\n  [829] = 743,\n  [830] = 771,\n  [831] = 786,\n  [832] = 798,\n  [833] = 741,\n  [834] = 792,\n  [835] = 775,\n  [836] = 775,\n  [837] = 775,\n  [838] = 755,\n  [839] = 757,\n  [840] = 740,\n  [841] = 751,\n  [842] = 786,\n  [843] = 771,\n  [844] = 744,\n  [845] = 749,\n  [846] = 747,\n  [847] = 743,\n  [848] = 771,\n  [849] = 786,\n  [850] = 774,\n  [851] = 798,\n  [852] = 754,\n  [853] = 757,\n  [854] = 742,\n  [855] = 755,\n  [856] = 741,\n  [857] = 792,\n  [858] = 746,\n  [859] = 746,\n  [860] = 811,\n  [861] = 745,\n  [862] = 798,\n  [863] = 774,\n  [864] = 740,\n  [865] = 775,\n  [866] = 751,\n  [867] = 745,\n  [868] = 868,\n  [869] = 868,\n  [870] = 870,\n  [871] = 871,\n  [872] = 872,\n  [873] = 873,\n  [874] = 874,\n  [875] = 875,\n  [876] = 876,\n  [877] = 876,\n  [878] = 878,\n  [879] = 876,\n  [880] = 878,\n  [881] = 878,\n  [882] = 882,\n  [883] = 883,\n  [884] = 883,\n  [885] = 883,\n  [886] = 886,\n  [887] = 883,\n  [888] = 886,\n  [889] = 883,\n  [890] = 890,\n  [891] = 890,\n  [892] = 892,\n  [893] = 893,\n  [894] = 894,\n  [895] = 895,\n  [896] = 893,\n  [897] = 882,\n  [898] = 894,\n  [899] = 895,\n  [900] = 894,\n  [901] = 890,\n  [902] = 902,\n  [903] = 893,\n  [904] = 890,\n  [905] = 905,\n  [906] = 890,\n  [907] = 907,\n  [908] = 895,\n  [909] = 909,\n  [910] = 909,\n  [911] = 890,\n  [912] = 895,\n  [913] = 894,\n  [914] = 895,\n  [915] = 909,\n  [916] = 892,\n  [917] = 893,\n  [918] = 902,\n  [919] = 905,\n  [920] = 894,\n  [921] = 902,\n  [922] = 893,\n  [923] = 923,\n  [924] = 924,\n  [925] = 925,\n  [926] = 926,\n  [927] = 923,\n  [928] = 923,\n  [929] = 929,\n  [930] = 924,\n  [931] = 924,\n  [932] = 932,\n  [933] = 925,\n  [934] = 934,\n  [935] = 924,\n  [936] = 924,\n  [937] = 924,\n  [938] = 924,\n  [939] = 939,\n  [940] = 940,\n  [941] = 941,\n  [942] = 940,\n  [943] = 943,\n  [944] = 944,\n  [945] = 941,\n  [946] = 944,\n  [947] = 939,\n  [948] = 948,\n  [949] = 890,\n  [950] = 941,\n  [951] = 890,\n  [952] = 926,\n  [953] = 944,\n  [954] = 954,\n  [955] = 939,\n  [956] = 925,\n  [957] = 925,\n  [958] = 940,\n  [959] = 954,\n  [960] = 886,\n  [961] = 890,\n  [962] = 925,\n  [963] = 926,\n  [964] = 929,\n  [965] = 954,\n  [966] = 966,\n  [967] = 967,\n  [968] = 890,\n  [969] = 954,\n  [970] = 943,\n  [971] = 971,\n  [972] = 929,\n  [973] = 954,\n  [974] = 974,\n  [975] = 975,\n  [976] = 976,\n  [977] = 977,\n  [978] = 926,\n  [979] = 974,\n  [980] = 980,\n  [981] = 907,\n  [982] = 982,\n  [983] = 976,\n  [984] = 890,\n  [985] = 985,\n  [986] = 986,\n  [987] = 987,\n  [988] = 975,\n  [989] = 925,\n  [990] = 925,\n  [991] = 925,\n  [992] = 980,\n  [993] = 890,\n  [994] = 994,\n  [995] = 926,\n  [996] = 976,\n  [997] = 977,\n  [998] = 882,\n  [999] = 980,\n  [1000] = 980,\n  [1001] = 1001,\n  [1002] = 1002,\n  [1003] = 1003,\n  [1004] = 890,\n  [1005] = 1005,\n  [1006] = 925,\n  [1007] = 980,\n  [1008] = 1008,\n  [1009] = 1009,\n  [1010] = 1005,\n  [1011] = 1001,\n  [1012] = 926,\n  [1013] = 1013,\n  [1014] = 925,\n  [1015] = 1015,\n  [1016] = 926,\n  [1017] = 1017,\n  [1018] = 1018,\n  [1019] = 1019,\n  [1020] = 1020,\n  [1021] = 1021,\n  [1022] = 1013,\n  [1023] = 980,\n  [1024] = 1024,\n  [1025] = 1001,\n  [1026] = 1019,\n  [1027] = 1001,\n  [1028] = 925,\n  [1029] = 1029,\n  [1030] = 1030,\n  [1031] = 1031,\n  [1032] = 967,\n  [1033] = 1033,\n  [1034] = 985,\n  [1035] = 1035,\n  [1036] = 1036,\n  [1037] = 1001,\n  [1038] = 1019,\n  [1039] = 1039,\n  [1040] = 1030,\n  [1041] = 1041,\n  [1042] = 1002,\n  [1043] = 1029,\n  [1044] = 1044,\n  [1045] = 1031,\n  [1046] = 1033,\n  [1047] = 1035,\n  [1048] = 1048,\n  [1049] = 1002,\n  [1050] = 1039,\n  [1051] = 926,\n  [1052] = 925,\n  [1053] = 1053,\n  [1054] = 1001,\n  [1055] = 1008,\n  [1056] = 1056,\n  [1057] = 980,\n  [1058] = 1030,\n  [1059] = 980,\n  [1060] = 1048,\n  [1061] = 943,\n  [1062] = 1015,\n  [1063] = 1021,\n  [1064] = 1009,\n  [1065] = 1030,\n  [1066] = 1048,\n  [1067] = 1067,\n  [1068] = 1068,\n  [1069] = 1024,\n  [1070] = 1020,\n  [1071] = 1030,\n  [1072] = 980,\n  [1073] = 1017,\n  [1074] = 1056,\n  [1075] = 1075,\n  [1076] = 1076,\n  [1077] = 1019,\n  [1078] = 1044,\n  [1079] = 980,\n  [1080] = 1030,\n  [1081] = 1067,\n  [1082] = 1018,\n  [1083] = 1002,\n  [1084] = 1084,\n  [1085] = 1019,\n  [1086] = 980,\n  [1087] = 1053,\n  [1088] = 1088,\n  [1089] = 1001,\n  [1090] = 1090,\n  [1091] = 1091,\n  [1092] = 974,\n  [1093] = 1048,\n  [1094] = 1019,\n  [1095] = 1044,\n  [1096] = 980,\n  [1097] = 1003,\n  [1098] = 1001,\n  [1099] = 1088,\n  [1100] = 1001,\n  [1101] = 1091,\n  [1102] = 1091,\n  [1103] = 1048,\n  [1104] = 1104,\n  [1105] = 1091,\n  [1106] = 1019,\n  [1107] = 1107,\n  [1108] = 1001,\n  [1109] = 1091,\n  [1110] = 1110,\n  [1111] = 1111,\n  [1112] = 1112,\n  [1113] = 1112,\n  [1114] = 1001,\n  [1115] = 1030,\n  [1116] = 1111,\n  [1117] = 1013,\n  [1118] = 1019,\n  [1119] = 1119,\n  [1120] = 1030,\n  [1121] = 1111,\n  [1122] = 1122,\n  [1123] = 1112,\n  [1124] = 1112,\n  [1125] = 1001,\n  [1126] = 1030,\n  [1127] = 985,\n  [1128] = 1128,\n  [1129] = 1112,\n  [1130] = 1130,\n  [1131] = 1111,\n  [1132] = 1041,\n  [1133] = 1111,\n  [1134] = 980,\n  [1135] = 1135,\n  [1136] = 1030,\n  [1137] = 1048,\n  [1138] = 1009,\n  [1139] = 1039,\n  [1140] = 1048,\n  [1141] = 1076,\n  [1142] = 1142,\n  [1143] = 1001,\n  [1144] = 1030,\n  [1145] = 1145,\n  [1146] = 1142,\n  [1147] = 1147,\n  [1148] = 1148,\n  [1149] = 1030,\n  [1150] = 1150,\n  [1151] = 1053,\n  [1152] = 1048,\n  [1153] = 1153,\n  [1154] = 1154,\n  [1155] = 1155,\n  [1156] = 1156,\n  [1157] = 1157,\n  [1158] = 1158,\n  [1159] = 1030,\n  [1160] = 1110,\n  [1161] = 1161,\n  [1162] = 1162,\n  [1163] = 1044,\n  [1164] = 1164,\n  [1165] = 1165,\n  [1166] = 1166,\n  [1167] = 1166,\n  [1168] = 1166,\n  [1169] = 1166,\n  [1170] = 1170,\n  [1171] = 1171,\n  [1172] = 1170,\n  [1173] = 1173,\n  [1174] = 1174,\n  [1175] = 1175,\n  [1176] = 1176,\n  [1177] = 1177,\n  [1178] = 1178,\n  [1179] = 1179,\n  [1180] = 1180,\n  [1181] = 1175,\n  [1182] = 1166,\n  [1183] = 1183,\n  [1184] = 1179,\n  [1185] = 1175,\n  [1186] = 1186,\n  [1187] = 1187,\n  [1188] = 1174,\n  [1189] = 1189,\n  [1190] = 1190,\n  [1191] = 1191,\n  [1192] = 1175,\n  [1193] = 1175,\n  [1194] = 1194,\n  [1195] = 1195,\n  [1196] = 1194,\n  [1197] = 1194,\n  [1198] = 1194,\n  [1199] = 1194,\n  [1200] = 1194,\n  [1201] = 1194,\n  [1202] = 1202,\n  [1203] = 1203,\n  [1204] = 1204,\n  [1205] = 1205,\n  [1206] = 1206,\n  [1207] = 1203,\n  [1208] = 1208,\n  [1209] = 870,\n  [1210] = 1206,\n  [1211] = 1211,\n  [1212] = 1212,\n  [1213] = 1213,\n  [1214] = 1214,\n  [1215] = 1215,\n  [1216] = 125,\n  [1217] = 130,\n  [1218] = 134,\n  [1219] = 1219,\n  [1220] = 1220,\n  [1221] = 1221,\n  [1222] = 1222,\n  [1223] = 1219,\n  [1224] = 1224,\n  [1225] = 126,\n  [1226] = 1226,\n  [1227] = 1227,\n  [1228] = 1228,\n  [1229] = 1221,\n  [1230] = 1230,\n  [1231] = 1231,\n  [1232] = 872,\n  [1233] = 1233,\n  [1234] = 1234,\n  [1235] = 1235,\n  [1236] = 1236,\n  [1237] = 1237,\n  [1238] = 128,\n  [1239] = 129,\n  [1240] = 126,\n  [1241] = 1241,\n  [1242] = 1242,\n  [1243] = 1243,\n  [1244] = 1244,\n  [1245] = 1245,\n  [1246] = 130,\n  [1247] = 1247,\n  [1248] = 1248,\n  [1249] = 1249,\n  [1250] = 681,\n  [1251] = 134,\n  [1252] = 679,\n  [1253] = 678,\n  [1254] = 1254,\n  [1255] = 125,\n  [1256] = 875,\n  [1257] = 1257,\n  [1258] = 874,\n  [1259] = 1259,\n  [1260] = 1260,\n  [1261] = 1261,\n  [1262] = 1262,\n  [1263] = 1263,\n  [1264] = 1264,\n  [1265] = 1265,\n  [1266] = 120,\n  [1267] = 123,\n  [1268] = 1268,\n  [1269] = 1269,\n  [1270] = 1270,\n  [1271] = 1271,\n  [1272] = 1272,\n  [1273] = 1273,\n  [1274] = 1274,\n  [1275] = 129,\n  [1276] = 1276,\n  [1277] = 1277,\n  [1278] = 1278,\n  [1279] = 1279,\n  [1280] = 128,\n  [1281] = 1281,\n  [1282] = 1282,\n  [1283] = 1283,\n  [1284] = 1284,\n  [1285] = 1285,\n  [1286] = 1286,\n  [1287] = 1287,\n  [1288] = 1288,\n  [1289] = 1289,\n  [1290] = 1290,\n  [1291] = 1291,\n  [1292] = 1292,\n  [1293] = 1293,\n  [1294] = 1294,\n  [1295] = 1295,\n  [1296] = 1296,\n  [1297] = 1297,\n  [1298] = 1298,\n  [1299] = 1299,\n  [1300] = 1300,\n  [1301] = 1301,\n  [1302] = 1292,\n  [1303] = 1303,\n  [1304] = 1304,\n  [1305] = 1305,\n  [1306] = 1306,\n  [1307] = 1307,\n  [1308] = 1308,\n  [1309] = 1309,\n  [1310] = 1310,\n  [1311] = 1311,\n  [1312] = 1293,\n  [1313] = 1313,\n  [1314] = 1314,\n  [1315] = 1279,\n  [1316] = 1316,\n  [1317] = 1317,\n  [1318] = 1318,\n  [1319] = 1319,\n  [1320] = 1320,\n  [1321] = 1301,\n  [1322] = 1322,\n  [1323] = 1288,\n  [1324] = 1324,\n  [1325] = 1325,\n  [1326] = 1326,\n  [1327] = 132,\n  [1328] = 1328,\n  [1329] = 1262,\n  [1330] = 1330,\n  [1331] = 1272,\n  [1332] = 1268,\n  [1333] = 1276,\n  [1334] = 1276,\n  [1335] = 1335,\n  [1336] = 1336,\n  [1337] = 1335,\n  [1338] = 1338,\n  [1339] = 1339,\n  [1340] = 1268,\n  [1341] = 1272,\n  [1342] = 1342,\n  [1343] = 1286,\n  [1344] = 1262,\n  [1345] = 1284,\n  [1346] = 1326,\n  [1347] = 1294,\n  [1348] = 1348,\n  [1349] = 1297,\n  [1350] = 1297,\n  [1351] = 1306,\n  [1352] = 1314,\n  [1353] = 1306,\n  [1354] = 1317,\n  [1355] = 1319,\n  [1356] = 1324,\n  [1357] = 1291,\n  [1358] = 1287,\n  [1359] = 1281,\n  [1360] = 1289,\n  [1361] = 1290,\n  [1362] = 1295,\n  [1363] = 1298,\n  [1364] = 1314,\n  [1365] = 1299,\n  [1366] = 1305,\n  [1367] = 1307,\n  [1368] = 1317,\n  [1369] = 1313,\n  [1370] = 1370,\n  [1371] = 1325,\n  [1372] = 1285,\n  [1373] = 1263,\n  [1374] = 1264,\n  [1375] = 1277,\n  [1376] = 1338,\n  [1377] = 1338,\n  [1378] = 1294,\n  [1379] = 1326,\n  [1380] = 1284,\n  [1381] = 1277,\n  [1382] = 1264,\n  [1383] = 1263,\n  [1384] = 1335,\n  [1385] = 1325,\n  [1386] = 1313,\n  [1387] = 1324,\n  [1388] = 1335,\n  [1389] = 1307,\n  [1390] = 1390,\n  [1391] = 1305,\n  [1392] = 120,\n  [1393] = 123,\n  [1394] = 121,\n  [1395] = 1299,\n  [1396] = 1396,\n  [1397] = 1397,\n  [1398] = 1289,\n  [1399] = 1295,\n  [1400] = 1400,\n  [1401] = 1401,\n  [1402] = 1402,\n  [1403] = 1291,\n  [1404] = 1298,\n  [1405] = 1281,\n  [1406] = 1287,\n  [1407] = 1407,\n  [1408] = 1408,\n  [1409] = 1290,\n  [1410] = 1319,\n  [1411] = 1411,\n  [1412] = 1412,\n  [1413] = 1413,\n  [1414] = 1414,\n  [1415] = 1415,\n  [1416] = 1416,\n  [1417] = 1417,\n  [1418] = 1418,\n  [1419] = 1419,\n  [1420] = 1420,\n  [1421] = 1421,\n  [1422] = 126,\n  [1423] = 1423,\n  [1424] = 1424,\n  [1425] = 132,\n  [1426] = 1426,\n  [1427] = 1427,\n  [1428] = 1428,\n  [1429] = 1429,\n  [1430] = 1430,\n  [1431] = 1431,\n  [1432] = 1432,\n  [1433] = 1433,\n  [1434] = 1434,\n  [1435] = 1435,\n  [1436] = 1436,\n  [1437] = 1437,\n  [1438] = 1438,\n  [1439] = 1439,\n  [1440] = 130,\n  [1441] = 1441,\n  [1442] = 1442,\n  [1443] = 1443,\n  [1444] = 1444,\n  [1445] = 1445,\n  [1446] = 1446,\n  [1447] = 1447,\n  [1448] = 1448,\n  [1449] = 1449,\n  [1450] = 1450,\n  [1451] = 1451,\n  [1452] = 1452,\n  [1453] = 693,\n  [1454] = 1454,\n  [1455] = 692,\n  [1456] = 1456,\n  [1457] = 1457,\n  [1458] = 1458,\n  [1459] = 1459,\n  [1460] = 1460,\n  [1461] = 691,\n  [1462] = 1462,\n  [1463] = 1330,\n  [1464] = 1464,\n  [1465] = 1336,\n  [1466] = 127,\n  [1467] = 1342,\n  [1468] = 1468,\n  [1469] = 136,\n  [1470] = 1470,\n  [1471] = 1316,\n  [1472] = 1472,\n  [1473] = 1462,\n  [1474] = 1474,\n  [1475] = 1475,\n  [1476] = 1476,\n  [1477] = 1462,\n  [1478] = 1462,\n  [1479] = 1462,\n  [1480] = 1462,\n  [1481] = 1481,\n  [1482] = 1482,\n  [1483] = 678,\n  [1484] = 1484,\n  [1485] = 1485,\n  [1486] = 1486,\n  [1487] = 679,\n  [1488] = 1488,\n  [1489] = 1489,\n  [1490] = 1490,\n  [1491] = 1491,\n  [1492] = 1492,\n  [1493] = 1397,\n  [1494] = 1400,\n  [1495] = 1495,\n  [1496] = 1496,\n  [1497] = 1457,\n  [1498] = 1498,\n  [1499] = 1462,\n  [1500] = 1458,\n  [1501] = 1501,\n  [1502] = 1390,\n  [1503] = 134,\n  [1504] = 1504,\n  [1505] = 1505,\n  [1506] = 1506,\n  [1507] = 1507,\n  [1508] = 1508,\n  [1509] = 1509,\n  [1510] = 1510,\n  [1511] = 1511,\n  [1512] = 1512,\n  [1513] = 1513,\n  [1514] = 1514,\n  [1515] = 1515,\n  [1516] = 1516,\n  [1517] = 1517,\n  [1518] = 1518,\n  [1519] = 1519,\n  [1520] = 1520,\n  [1521] = 1521,\n  [1522] = 681,\n  [1523] = 1523,\n  [1524] = 1524,\n  [1525] = 1525,\n  [1526] = 1526,\n  [1527] = 1527,\n  [1528] = 1528,\n  [1529] = 1529,\n  [1530] = 1530,\n  [1531] = 1531,\n  [1532] = 1532,\n  [1533] = 1402,\n  [1534] = 1534,\n  [1535] = 1535,\n  [1536] = 1411,\n  [1537] = 1412,\n  [1538] = 1328,\n  [1539] = 1539,\n  [1540] = 1540,\n  [1541] = 1541,\n  [1542] = 1542,\n  [1543] = 1543,\n  [1544] = 1544,\n  [1545] = 130,\n  [1546] = 1396,\n  [1547] = 1547,\n  [1548] = 1548,\n  [1549] = 1549,\n  [1550] = 1550,\n  [1551] = 1551,\n  [1552] = 1407,\n  [1553] = 126,\n  [1554] = 1534,\n  [1555] = 1543,\n  [1556] = 125,\n  [1557] = 1390,\n  [1558] = 1457,\n  [1559] = 1458,\n  [1560] = 1560,\n  [1561] = 1561,\n  [1562] = 1562,\n  [1563] = 1563,\n  [1564] = 1564,\n  [1565] = 1276,\n  [1566] = 136,\n  [1567] = 1342,\n  [1568] = 1444,\n  [1569] = 1443,\n  [1570] = 1442,\n  [1571] = 1571,\n  [1572] = 1572,\n  [1573] = 1262,\n  [1574] = 1574,\n  [1575] = 1525,\n  [1576] = 1272,\n  [1577] = 1577,\n  [1578] = 1578,\n  [1579] = 681,\n  [1580] = 127,\n  [1581] = 1284,\n  [1582] = 1326,\n  [1583] = 1294,\n  [1584] = 1336,\n  [1585] = 1585,\n  [1586] = 1277,\n  [1587] = 1587,\n  [1588] = 1264,\n  [1589] = 125,\n  [1590] = 1263,\n  [1591] = 1325,\n  [1592] = 1330,\n  [1593] = 1593,\n  [1594] = 1594,\n  [1595] = 1595,\n  [1596] = 1596,\n  [1597] = 1268,\n  [1598] = 1598,\n  [1599] = 1313,\n  [1600] = 1307,\n  [1601] = 1305,\n  [1602] = 1299,\n  [1603] = 1603,\n  [1604] = 1564,\n  [1605] = 1298,\n  [1606] = 1295,\n  [1607] = 1276,\n  [1608] = 1457,\n  [1609] = 134,\n  [1610] = 1458,\n  [1611] = 1611,\n  [1612] = 1457,\n  [1613] = 1290,\n  [1614] = 1614,\n  [1615] = 1289,\n  [1616] = 1507,\n  [1617] = 1456,\n  [1618] = 1618,\n  [1619] = 1281,\n  [1620] = 1287,\n  [1621] = 679,\n  [1622] = 1561,\n  [1623] = 1447,\n  [1624] = 1624,\n  [1625] = 1291,\n  [1626] = 1324,\n  [1627] = 1627,\n  [1628] = 1628,\n  [1629] = 1336,\n  [1630] = 1630,\n  [1631] = 1319,\n  [1632] = 1445,\n  [1633] = 1633,\n  [1634] = 1446,\n  [1635] = 1635,\n  [1636] = 1636,\n  [1637] = 678,\n  [1638] = 1317,\n  [1639] = 1439,\n  [1640] = 1449,\n  [1641] = 1641,\n  [1642] = 1458,\n  [1643] = 1438,\n  [1644] = 1457,\n  [1645] = 1645,\n  [1646] = 1314,\n  [1647] = 1645,\n  [1648] = 1330,\n  [1649] = 1645,\n  [1650] = 1618,\n  [1651] = 1651,\n  [1652] = 1437,\n  [1653] = 1458,\n  [1654] = 1457,\n  [1655] = 1436,\n  [1656] = 1563,\n  [1657] = 1435,\n  [1658] = 1434,\n  [1659] = 1433,\n  [1660] = 1432,\n  [1661] = 1431,\n  [1662] = 1430,\n  [1663] = 1429,\n  [1664] = 1428,\n  [1665] = 1427,\n  [1666] = 1342,\n  [1667] = 1426,\n  [1668] = 691,\n  [1669] = 1630,\n  [1670] = 1670,\n  [1671] = 1520,\n  [1672] = 1672,\n  [1673] = 1284,\n  [1674] = 1326,\n  [1675] = 1294,\n  [1676] = 1676,\n  [1677] = 1677,\n  [1678] = 1678,\n  [1679] = 121,\n  [1680] = 1680,\n  [1681] = 1681,\n  [1682] = 1262,\n  [1683] = 1683,\n  [1684] = 1684,\n  [1685] = 1277,\n  [1686] = 1272,\n  [1687] = 1687,\n  [1688] = 1688,\n  [1689] = 1689,\n  [1690] = 1268,\n  [1691] = 1324,\n  [1692] = 1551,\n  [1693] = 1693,\n  [1694] = 1264,\n  [1695] = 1695,\n  [1696] = 1263,\n  [1697] = 1564,\n  [1698] = 1325,\n  [1699] = 1550,\n  [1700] = 1549,\n  [1701] = 1544,\n  [1702] = 1542,\n  [1703] = 121,\n  [1704] = 1541,\n  [1705] = 1540,\n  [1706] = 1539,\n  [1707] = 1535,\n  [1708] = 1532,\n  [1709] = 1527,\n  [1710] = 1526,\n  [1711] = 1651,\n  [1712] = 1313,\n  [1713] = 1713,\n  [1714] = 1563,\n  [1715] = 1524,\n  [1716] = 1716,\n  [1717] = 1717,\n  [1718] = 1718,\n  [1719] = 1719,\n  [1720] = 1720,\n  [1721] = 1598,\n  [1722] = 1437,\n  [1723] = 1523,\n  [1724] = 1521,\n  [1725] = 1519,\n  [1726] = 1726,\n  [1727] = 1307,\n  [1728] = 1518,\n  [1729] = 1729,\n  [1730] = 1517,\n  [1731] = 1306,\n  [1732] = 1516,\n  [1733] = 1515,\n  [1734] = 1514,\n  [1735] = 1513,\n  [1736] = 1512,\n  [1737] = 1737,\n  [1738] = 1511,\n  [1739] = 1424,\n  [1740] = 1423,\n  [1741] = 1421,\n  [1742] = 1420,\n  [1743] = 1510,\n  [1744] = 1509,\n  [1745] = 1297,\n  [1746] = 1305,\n  [1747] = 1299,\n  [1748] = 1506,\n  [1749] = 1468,\n  [1750] = 1750,\n  [1751] = 1298,\n  [1752] = 1456,\n  [1753] = 1618,\n  [1754] = 1295,\n  [1755] = 1419,\n  [1756] = 1418,\n  [1757] = 1290,\n  [1758] = 1289,\n  [1759] = 1508,\n  [1760] = 1760,\n  [1761] = 1417,\n  [1762] = 1416,\n  [1763] = 1281,\n  [1764] = 1297,\n  [1765] = 1415,\n  [1766] = 1488,\n  [1767] = 1530,\n  [1768] = 692,\n  [1769] = 1448,\n  [1770] = 1450,\n  [1771] = 1451,\n  [1772] = 1287,\n  [1773] = 1291,\n  [1774] = 1774,\n  [1775] = 1775,\n  [1776] = 1776,\n  [1777] = 1777,\n  [1778] = 1778,\n  [1779] = 1779,\n  [1780] = 1780,\n  [1781] = 1520,\n  [1782] = 1782,\n  [1783] = 1783,\n  [1784] = 1611,\n  [1785] = 1306,\n  [1786] = 1786,\n  [1787] = 1314,\n  [1788] = 1317,\n  [1789] = 1458,\n  [1790] = 1790,\n  [1791] = 1452,\n  [1792] = 1454,\n  [1793] = 1459,\n  [1794] = 1460,\n  [1795] = 1464,\n  [1796] = 1470,\n  [1797] = 1413,\n  [1798] = 1472,\n  [1799] = 1474,\n  [1800] = 1475,\n  [1801] = 1476,\n  [1802] = 1481,\n  [1803] = 1484,\n  [1804] = 1485,\n  [1805] = 1486,\n  [1806] = 1414,\n  [1807] = 1489,\n  [1808] = 1490,\n  [1809] = 1491,\n  [1810] = 1492,\n  [1811] = 1495,\n  [1812] = 1390,\n  [1813] = 1496,\n  [1814] = 1498,\n  [1815] = 1319,\n  [1816] = 693,\n  [1817] = 1501,\n  [1818] = 1504,\n  [1819] = 1505,\n  [1820] = 1820,\n  [1821] = 1457,\n  [1822] = 1820,\n  [1823] = 1726,\n  [1824] = 1572,\n  [1825] = 1825,\n  [1826] = 1825,\n  [1827] = 1672,\n  [1828] = 1790,\n  [1829] = 124,\n  [1830] = 1774,\n  [1831] = 1676,\n  [1832] = 135,\n  [1833] = 1825,\n  [1834] = 1677,\n  [1835] = 1678,\n  [1836] = 1713,\n  [1837] = 1837,\n  [1838] = 1681,\n  [1839] = 1520,\n  [1840] = 1683,\n  [1841] = 1684,\n  [1842] = 1687,\n  [1843] = 1775,\n  [1844] = 1284,\n  [1845] = 1563,\n  [1846] = 1326,\n  [1847] = 1720,\n  [1848] = 1574,\n  [1849] = 1294,\n  [1850] = 1277,\n  [1851] = 1786,\n  [1852] = 1264,\n  [1853] = 1645,\n  [1854] = 1577,\n  [1855] = 1563,\n  [1856] = 1390,\n  [1857] = 1776,\n  [1858] = 1262,\n  [1859] = 1578,\n  [1860] = 1716,\n  [1861] = 1717,\n  [1862] = 1263,\n  [1863] = 1777,\n  [1864] = 1456,\n  [1865] = 1618,\n  [1866] = 1695,\n  [1867] = 1593,\n  [1868] = 131,\n  [1869] = 1783,\n  [1870] = 1594,\n  [1871] = 1595,\n  [1872] = 1325,\n  [1873] = 1596,\n  [1874] = 1874,\n  [1875] = 1778,\n  [1876] = 1618,\n  [1877] = 1645,\n  [1878] = 1688,\n  [1879] = 1779,\n  [1880] = 1603,\n  [1881] = 1272,\n  [1882] = 1268,\n  [1883] = 1313,\n  [1884] = 1825,\n  [1885] = 1825,\n  [1886] = 1886,\n  [1887] = 1780,\n  [1888] = 1298,\n  [1889] = 1825,\n  [1890] = 1307,\n  [1891] = 1891,\n  [1892] = 1305,\n  [1893] = 1893,\n  [1894] = 1276,\n  [1895] = 1636,\n  [1896] = 1896,\n  [1897] = 1299,\n  [1898] = 1729,\n  [1899] = 1718,\n  [1900] = 1900,\n  [1901] = 1901,\n  [1902] = 1689,\n  [1903] = 1295,\n  [1904] = 1719,\n  [1905] = 1290,\n  [1906] = 1297,\n  [1907] = 1907,\n  [1908] = 1908,\n  [1909] = 1306,\n  [1910] = 1289,\n  [1911] = 1281,\n  [1912] = 1342,\n  [1913] = 1336,\n  [1914] = 1750,\n  [1915] = 1287,\n  [1916] = 1916,\n  [1917] = 1672,\n  [1918] = 1837,\n  [1919] = 1782,\n  [1920] = 1330,\n  [1921] = 1645,\n  [1922] = 1893,\n  [1923] = 1923,\n  [1924] = 1924,\n  [1925] = 1614,\n  [1926] = 1458,\n  [1927] = 1564,\n  [1928] = 1520,\n  [1929] = 1314,\n  [1930] = 1317,\n  [1931] = 1618,\n  [1932] = 1737,\n  [1933] = 1933,\n  [1934] = 1437,\n  [1935] = 1825,\n  [1936] = 1291,\n  [1937] = 1319,\n  [1938] = 1324,\n  [1939] = 1458,\n  [1940] = 1457,\n  [1941] = 1291,\n  [1942] = 1324,\n  [1943] = 1943,\n  [1944] = 1317,\n  [1945] = 1945,\n  [1946] = 1645,\n  [1947] = 1520,\n  [1948] = 1287,\n  [1949] = 1314,\n  [1950] = 1276,\n  [1951] = 1284,\n  [1952] = 1618,\n  [1953] = 1306,\n  [1954] = 1326,\n  [1955] = 1294,\n  [1956] = 1277,\n  [1957] = 1336,\n  [1958] = 1268,\n  [1959] = 1272,\n  [1960] = 1520,\n  [1961] = 1264,\n  [1962] = 1456,\n  [1963] = 1564,\n  [1964] = 1263,\n  [1965] = 1458,\n  [1966] = 1262,\n  [1967] = 1457,\n  [1968] = 1325,\n  [1969] = 1313,\n  [1970] = 1307,\n  [1971] = 1305,\n  [1972] = 1972,\n  [1973] = 1299,\n  [1974] = 1298,\n  [1975] = 1295,\n  [1976] = 1943,\n  [1977] = 1564,\n  [1978] = 1290,\n  [1979] = 1562,\n  [1980] = 1289,\n  [1981] = 1297,\n  [1982] = 1281,\n  [1983] = 1319,\n  [1984] = 1564,\n  [1985] = 1618,\n  [1986] = 1468,\n  [1987] = 1564,\n  [1988] = 1563,\n  [1989] = 1330,\n  [1990] = 1336,\n  [1991] = 1342,\n  [1992] = 1520,\n  [1993] = 1563,\n  [1994] = 1534,\n  [1995] = 1645,\n  [1996] = 1563,\n  [1997] = 1342,\n  [1998] = 1998,\n  [1999] = 1907,\n  [2000] = 1672,\n  [2001] = 1336,\n  [2002] = 1330,\n  [2003] = 2003,\n  [2004] = 2003,\n  [2005] = 2005,\n  [2006] = 2006,\n  [2007] = 2007,\n  [2008] = 2005,\n  [2009] = 2006,\n  [2010] = 2007,\n  [2011] = 2006,\n  [2012] = 2007,\n  [2013] = 2013,\n  [2014] = 2005,\n  [2015] = 2013,\n  [2016] = 2013,\n  [2017] = 2017,\n  [2018] = 2006,\n  [2019] = 2017,\n  [2020] = 2013,\n  [2021] = 2013,\n  [2022] = 2006,\n  [2023] = 2007,\n  [2024] = 2007,\n  [2025] = 2017,\n  [2026] = 2005,\n  [2027] = 2005,\n  [2028] = 2028,\n  [2029] = 2028,\n  [2030] = 2028,\n  [2031] = 1532,\n  [2032] = 1484,\n  [2033] = 1515,\n  [2034] = 1472,\n  [2035] = 1489,\n  [2036] = 1411,\n  [2037] = 1412,\n  [2038] = 1518,\n  [2039] = 1328,\n  [2040] = 1474,\n  [2041] = 1460,\n  [2042] = 1514,\n  [2043] = 1495,\n  [2044] = 1509,\n  [2045] = 1490,\n  [2046] = 1413,\n  [2047] = 1414,\n  [2048] = 1486,\n  [2049] = 1517,\n  [2050] = 1470,\n  [2051] = 129,\n  [2052] = 1492,\n  [2053] = 1549,\n  [2054] = 1516,\n  [2055] = 1544,\n  [2056] = 1542,\n  [2057] = 1541,\n  [2058] = 1540,\n  [2059] = 1539,\n  [2060] = 1535,\n  [2061] = 1527,\n  [2062] = 1526,\n  [2063] = 1475,\n  [2064] = 669,\n  [2065] = 128,\n  [2066] = 1513,\n  [2067] = 1491,\n  [2068] = 1464,\n  [2069] = 1510,\n  [2070] = 1511,\n  [2071] = 1512,\n  [2072] = 1476,\n  [2073] = 1485,\n  [2074] = 1481,\n  [2075] = 1459,\n  [2076] = 1454,\n  [2077] = 1285,\n  [2078] = 1420,\n  [2079] = 2079,\n  [2080] = 1416,\n  [2081] = 1423,\n  [2082] = 1438,\n  [2083] = 2079,\n  [2084] = 1421,\n  [2085] = 1411,\n  [2086] = 1328,\n  [2087] = 129,\n  [2088] = 1412,\n  [2089] = 128,\n  [2090] = 1402,\n  [2091] = 1514,\n  [2092] = 1486,\n  [2093] = 1484,\n  [2094] = 1481,\n  [2095] = 1396,\n  [2096] = 1476,\n  [2097] = 1549,\n  [2098] = 1544,\n  [2099] = 2099,\n  [2100] = 1475,\n  [2101] = 2099,\n  [2102] = 1542,\n  [2103] = 1474,\n  [2104] = 1472,\n  [2105] = 1541,\n  [2106] = 1540,\n  [2107] = 1539,\n  [2108] = 1535,\n  [2109] = 1532,\n  [2110] = 1527,\n  [2111] = 1413,\n  [2112] = 1470,\n  [2113] = 1464,\n  [2114] = 1426,\n  [2115] = 1526,\n  [2116] = 2099,\n  [2117] = 1460,\n  [2118] = 1459,\n  [2119] = 1518,\n  [2120] = 1517,\n  [2121] = 1454,\n  [2122] = 1516,\n  [2123] = 1515,\n  [2124] = 1485,\n  [2125] = 1513,\n  [2126] = 1512,\n  [2127] = 1431,\n  [2128] = 1511,\n  [2129] = 1510,\n  [2130] = 1509,\n  [2131] = 1407,\n  [2132] = 2099,\n  [2133] = 2099,\n  [2134] = 1495,\n  [2135] = 2099,\n  [2136] = 1492,\n  [2137] = 1491,\n  [2138] = 1490,\n  [2139] = 1489,\n  [2140] = 2099,\n  [2141] = 1285,\n  [2142] = 1414,\n  [2143] = 1519,\n  [2144] = 1496,\n  [2145] = 1436,\n  [2146] = 1498,\n  [2147] = 2147,\n  [2148] = 1402,\n  [2149] = 1397,\n  [2150] = 1444,\n  [2151] = 681,\n  [2152] = 2147,\n  [2153] = 1417,\n  [2154] = 1448,\n  [2155] = 1501,\n  [2156] = 2147,\n  [2157] = 1524,\n  [2158] = 1420,\n  [2159] = 2147,\n  [2160] = 1451,\n  [2161] = 1428,\n  [2162] = 2147,\n  [2163] = 1505,\n  [2164] = 1442,\n  [2165] = 1449,\n  [2166] = 1438,\n  [2167] = 1418,\n  [2168] = 1421,\n  [2169] = 1506,\n  [2170] = 2147,\n  [2171] = 2147,\n  [2172] = 1435,\n  [2173] = 1439,\n  [2174] = 1550,\n  [2175] = 1433,\n  [2176] = 1423,\n  [2177] = 1424,\n  [2178] = 1432,\n  [2179] = 1419,\n  [2180] = 1445,\n  [2181] = 679,\n  [2182] = 1523,\n  [2183] = 1521,\n  [2184] = 1443,\n  [2185] = 1452,\n  [2186] = 1430,\n  [2187] = 1400,\n  [2188] = 1446,\n  [2189] = 1427,\n  [2190] = 1488,\n  [2191] = 678,\n  [2192] = 1551,\n  [2193] = 1415,\n  [2194] = 1429,\n  [2195] = 1504,\n  [2196] = 1434,\n  [2197] = 1561,\n  [2198] = 2198,\n  [2199] = 1416,\n  [2200] = 1450,\n  [2201] = 1407,\n  [2202] = 1447,\n  [2203] = 2203,\n  [2204] = 1396,\n  [2205] = 1400,\n  [2206] = 1328,\n  [2207] = 1412,\n  [2208] = 1411,\n  [2209] = 1397,\n  [2210] = 1452,\n  [2211] = 1415,\n  [2212] = 1498,\n  [2213] = 1492,\n  [2214] = 1491,\n  [2215] = 2215,\n  [2216] = 1501,\n  [2217] = 1544,\n  [2218] = 1518,\n  [2219] = 693,\n  [2220] = 1517,\n  [2221] = 1490,\n  [2222] = 1424,\n  [2223] = 1489,\n  [2224] = 1414,\n  [2225] = 1516,\n  [2226] = 1515,\n  [2227] = 1514,\n  [2228] = 691,\n  [2229] = 1527,\n  [2230] = 1532,\n  [2231] = 1513,\n  [2232] = 1486,\n  [2233] = 1495,\n  [2234] = 1485,\n  [2235] = 1512,\n  [2236] = 1511,\n  [2237] = 1484,\n  [2238] = 1510,\n  [2239] = 1509,\n  [2240] = 1551,\n  [2241] = 1535,\n  [2242] = 1481,\n  [2243] = 1496,\n  [2244] = 1476,\n  [2245] = 1435,\n  [2246] = 1475,\n  [2247] = 1474,\n  [2248] = 1472,\n  [2249] = 1449,\n  [2250] = 1539,\n  [2251] = 1429,\n  [2252] = 692,\n  [2253] = 1413,\n  [2254] = 1446,\n  [2255] = 1445,\n  [2256] = 1550,\n  [2257] = 1540,\n  [2258] = 1419,\n  [2259] = 1470,\n  [2260] = 1524,\n  [2261] = 1434,\n  [2262] = 1464,\n  [2263] = 1523,\n  [2264] = 1418,\n  [2265] = 1460,\n  [2266] = 1521,\n  [2267] = 1519,\n  [2268] = 1459,\n  [2269] = 1417,\n  [2270] = 1526,\n  [2271] = 1541,\n  [2272] = 1454,\n  [2273] = 1439,\n  [2274] = 1433,\n  [2275] = 1542,\n  [2276] = 1444,\n  [2277] = 1561,\n  [2278] = 1443,\n  [2279] = 1442,\n  [2280] = 1504,\n  [2281] = 1506,\n  [2282] = 1488,\n  [2283] = 1448,\n  [2284] = 1436,\n  [2285] = 1426,\n  [2286] = 1450,\n  [2287] = 1427,\n  [2288] = 2288,\n  [2289] = 1505,\n  [2290] = 1447,\n  [2291] = 1285,\n  [2292] = 1428,\n  [2293] = 1430,\n  [2294] = 1431,\n  [2295] = 1432,\n  [2296] = 1549,\n  [2297] = 1451,\n  [2298] = 2298,\n  [2299] = 2299,\n  [2300] = 1421,\n  [2301] = 1423,\n  [2302] = 1328,\n  [2303] = 2303,\n  [2304] = 1412,\n  [2305] = 1402,\n  [2306] = 679,\n  [2307] = 1411,\n  [2308] = 1438,\n  [2309] = 2309,\n  [2310] = 678,\n  [2311] = 1420,\n  [2312] = 681,\n  [2313] = 1407,\n  [2314] = 2314,\n  [2315] = 2314,\n  [2316] = 2316,\n  [2317] = 2317,\n  [2318] = 2318,\n  [2319] = 1416,\n  [2320] = 1285,\n  [2321] = 2314,\n  [2322] = 2314,\n  [2323] = 2314,\n  [2324] = 2324,\n  [2325] = 2325,\n  [2326] = 2326,\n  [2327] = 2327,\n  [2328] = 2309,\n  [2329] = 1400,\n  [2330] = 2330,\n  [2331] = 678,\n  [2332] = 1397,\n  [2333] = 692,\n  [2334] = 681,\n  [2335] = 2335,\n  [2336] = 2336,\n  [2337] = 679,\n  [2338] = 2330,\n  [2339] = 2339,\n  [2340] = 691,\n  [2341] = 2341,\n  [2342] = 2342,\n  [2343] = 2303,\n  [2344] = 2330,\n  [2345] = 2327,\n  [2346] = 2339,\n  [2347] = 2347,\n  [2348] = 693,\n  [2349] = 2330,\n  [2350] = 2339,\n  [2351] = 2330,\n  [2352] = 2330,\n  [2353] = 2353,\n  [2354] = 1396,\n  [2355] = 2339,\n  [2356] = 2356,\n  [2357] = 2357,\n  [2358] = 2358,\n  [2359] = 2359,\n  [2360] = 2360,\n  [2361] = 2361,\n  [2362] = 2362,\n  [2363] = 2363,\n  [2364] = 2364,\n  [2365] = 2365,\n  [2366] = 2330,\n  [2367] = 2367,\n  [2368] = 2339,\n  [2369] = 2369,\n  [2370] = 1402,\n  [2371] = 2371,\n  [2372] = 2372,\n  [2373] = 2339,\n  [2374] = 2374,\n  [2375] = 2375,\n  [2376] = 2367,\n  [2377] = 2339,\n  [2378] = 2378,\n  [2379] = 2379,\n  [2380] = 1442,\n  [2381] = 1417,\n  [2382] = 1415,\n  [2383] = 1488,\n  [2384] = 1448,\n  [2385] = 1450,\n  [2386] = 1451,\n  [2387] = 1452,\n  [2388] = 1496,\n  [2389] = 1498,\n  [2390] = 2390,\n  [2391] = 1501,\n  [2392] = 1504,\n  [2393] = 1505,\n  [2394] = 2394,\n  [2395] = 1506,\n  [2396] = 1519,\n  [2397] = 1521,\n  [2398] = 1523,\n  [2399] = 2379,\n  [2400] = 1524,\n  [2401] = 1550,\n  [2402] = 1551,\n  [2403] = 1561,\n  [2404] = 1447,\n  [2405] = 2405,\n  [2406] = 2406,\n  [2407] = 2407,\n  [2408] = 691,\n  [2409] = 2409,\n  [2410] = 2410,\n  [2411] = 692,\n  [2412] = 693,\n  [2413] = 2413,\n  [2414] = 2414,\n  [2415] = 129,\n  [2416] = 1418,\n  [2417] = 2379,\n  [2418] = 2379,\n  [2419] = 1419,\n  [2420] = 2379,\n  [2421] = 2421,\n  [2422] = 1424,\n  [2423] = 128,\n  [2424] = 2424,\n  [2425] = 2379,\n  [2426] = 2379,\n  [2427] = 2427,\n  [2428] = 2428,\n  [2429] = 2429,\n  [2430] = 2379,\n  [2431] = 1426,\n  [2432] = 1427,\n  [2433] = 1407,\n  [2434] = 2434,\n  [2435] = 2435,\n  [2436] = 1439,\n  [2437] = 1428,\n  [2438] = 1429,\n  [2439] = 2439,\n  [2440] = 1443,\n  [2441] = 1430,\n  [2442] = 1431,\n  [2443] = 1444,\n  [2444] = 2444,\n  [2445] = 1449,\n  [2446] = 1445,\n  [2447] = 1432,\n  [2448] = 1446,\n  [2449] = 1433,\n  [2450] = 1434,\n  [2451] = 1435,\n  [2452] = 1436,\n  [2453] = 2453,\n  [2454] = 2454,\n  [2455] = 2455,\n  [2456] = 2456,\n  [2457] = 2457,\n  [2458] = 1166,\n  [2459] = 2459,\n  [2460] = 1231,\n  [2461] = 2461,\n  [2462] = 2298,\n  [2463] = 2347,\n  [2464] = 1166,\n  [2465] = 2369,\n  [2466] = 2466,\n  [2467] = 2467,\n  [2468] = 2375,\n  [2469] = 2371,\n  [2470] = 2357,\n  [2471] = 1166,\n  [2472] = 2341,\n  [2473] = 1166,\n  [2474] = 126,\n  [2475] = 130,\n  [2476] = 2476,\n  [2477] = 2477,\n  [2478] = 2478,\n  [2479] = 1166,\n  [2480] = 2480,\n  [2481] = 2481,\n  [2482] = 2482,\n  [2483] = 1166,\n  [2484] = 2484,\n  [2485] = 2485,\n  [2486] = 2486,\n  [2487] = 2487,\n  [2488] = 2488,\n  [2489] = 2489,\n  [2490] = 1212,\n  [2491] = 1397,\n  [2492] = 1400,\n  [2493] = 1230,\n  [2494] = 1213,\n  [2495] = 2495,\n  [2496] = 2309,\n  [2497] = 2497,\n  [2498] = 2498,\n  [2499] = 2499,\n  [2500] = 1227,\n  [2501] = 1224,\n  [2502] = 2502,\n  [2503] = 1228,\n  [2504] = 2504,\n  [2505] = 2477,\n  [2506] = 2480,\n  [2507] = 2507,\n  [2508] = 2508,\n  [2509] = 2489,\n  [2510] = 2361,\n  [2511] = 2499,\n  [2512] = 2512,\n  [2513] = 2513,\n  [2514] = 2514,\n  [2515] = 2515,\n  [2516] = 2516,\n  [2517] = 2517,\n  [2518] = 2518,\n  [2519] = 2454,\n  [2520] = 2520,\n  [2521] = 1236,\n  [2522] = 2303,\n  [2523] = 2523,\n  [2524] = 1166,\n  [2525] = 2525,\n  [2526] = 2526,\n  [2527] = 2527,\n  [2528] = 2527,\n  [2529] = 2529,\n  [2530] = 2530,\n  [2531] = 2314,\n  [2532] = 2532,\n  [2533] = 2533,\n  [2534] = 1429,\n  [2535] = 1434,\n  [2536] = 2536,\n  [2537] = 2413,\n  [2538] = 2410,\n  [2539] = 2539,\n  [2540] = 2540,\n  [2541] = 2541,\n  [2542] = 2542,\n  [2543] = 2314,\n  [2544] = 2544,\n  [2545] = 2545,\n  [2546] = 2546,\n  [2547] = 2547,\n  [2548] = 2530,\n  [2549] = 2549,\n  [2550] = 2532,\n  [2551] = 2551,\n  [2552] = 2552,\n  [2553] = 2553,\n  [2554] = 2530,\n  [2555] = 2555,\n  [2556] = 2556,\n  [2557] = 2557,\n  [2558] = 2558,\n  [2559] = 2559,\n  [2560] = 2560,\n  [2561] = 2409,\n  [2562] = 2562,\n  [2563] = 2314,\n  [2564] = 2545,\n  [2565] = 2565,\n  [2566] = 2560,\n  [2567] = 2539,\n  [2568] = 2568,\n  [2569] = 2569,\n  [2570] = 2570,\n  [2571] = 2571,\n  [2572] = 2572,\n  [2573] = 2573,\n  [2574] = 125,\n  [2575] = 2575,\n  [2576] = 2576,\n  [2577] = 2577,\n  [2578] = 2544,\n  [2579] = 2579,\n  [2580] = 2580,\n  [2581] = 2581,\n  [2582] = 2582,\n  [2583] = 2562,\n  [2584] = 2557,\n  [2585] = 2314,\n  [2586] = 2586,\n  [2587] = 2587,\n  [2588] = 1551,\n  [2589] = 2539,\n  [2590] = 2587,\n  [2591] = 2314,\n  [2592] = 2592,\n  [2593] = 2299,\n  [2594] = 2594,\n  [2595] = 2530,\n  [2596] = 2573,\n  [2597] = 2532,\n  [2598] = 2539,\n  [2599] = 2526,\n  [2600] = 2600,\n  [2601] = 2570,\n  [2602] = 2602,\n  [2603] = 134,\n  [2604] = 2529,\n  [2605] = 2605,\n  [2606] = 2576,\n  [2607] = 2607,\n  [2608] = 2551,\n  [2609] = 2581,\n  [2610] = 2527,\n  [2611] = 2586,\n  [2612] = 2612,\n  [2613] = 2613,\n  [2614] = 1447,\n  [2615] = 2536,\n  [2616] = 2532,\n  [2617] = 2617,\n  [2618] = 2618,\n  [2619] = 1561,\n  [2620] = 1504,\n  [2621] = 2621,\n  [2622] = 2530,\n  [2623] = 2575,\n  [2624] = 2547,\n  [2625] = 2314,\n  [2626] = 2544,\n  [2627] = 2592,\n  [2628] = 2628,\n  [2629] = 2546,\n  [2630] = 2630,\n  [2631] = 2586,\n  [2632] = 2529,\n  [2633] = 2594,\n  [2634] = 2527,\n  [2635] = 2530,\n  [2636] = 2636,\n  [2637] = 2532,\n  [2638] = 2539,\n  [2639] = 2570,\n  [2640] = 2640,\n  [2641] = 2544,\n  [2642] = 2314,\n  [2643] = 2607,\n  [2644] = 2536,\n  [2645] = 2529,\n  [2646] = 2646,\n  [2647] = 2527,\n  [2648] = 2648,\n  [2649] = 2617,\n  [2650] = 2640,\n  [2651] = 2541,\n  [2652] = 2652,\n  [2653] = 2600,\n  [2654] = 2532,\n  [2655] = 2655,\n  [2656] = 2529,\n  [2657] = 1415,\n  [2658] = 1450,\n  [2659] = 2424,\n  [2660] = 2544,\n  [2661] = 2661,\n  [2662] = 2662,\n  [2663] = 2663,\n  [2664] = 2664,\n  [2665] = 2665,\n  [2666] = 2666,\n  [2667] = 2667,\n  [2668] = 2668,\n  [2669] = 2669,\n  [2670] = 2670,\n  [2671] = 2484,\n  [2672] = 2672,\n  [2673] = 2673,\n  [2674] = 2666,\n  [2675] = 2675,\n  [2676] = 2676,\n  [2677] = 2677,\n  [2678] = 2678,\n  [2679] = 2679,\n  [2680] = 2680,\n  [2681] = 2681,\n  [2682] = 2682,\n  [2683] = 2683,\n  [2684] = 2684,\n  [2685] = 2685,\n  [2686] = 2686,\n  [2687] = 2687,\n  [2688] = 2688,\n  [2689] = 2681,\n  [2690] = 2690,\n  [2691] = 2691,\n  [2692] = 2692,\n  [2693] = 2693,\n  [2694] = 2694,\n  [2695] = 2695,\n  [2696] = 2696,\n  [2697] = 2697,\n  [2698] = 2690,\n  [2699] = 2699,\n  [2700] = 2672,\n  [2701] = 2692,\n  [2702] = 2702,\n  [2703] = 2703,\n  [2704] = 2704,\n  [2705] = 2666,\n  [2706] = 2706,\n  [2707] = 2707,\n  [2708] = 2708,\n  [2709] = 2709,\n  [2710] = 2710,\n  [2711] = 2711,\n  [2712] = 2712,\n  [2713] = 1204,\n  [2714] = 2681,\n  [2715] = 2715,\n  [2716] = 2711,\n  [2717] = 2361,\n  [2718] = 2718,\n  [2719] = 2678,\n  [2720] = 2720,\n  [2721] = 2721,\n  [2722] = 2722,\n  [2723] = 2661,\n  [2724] = 2715,\n  [2725] = 2673,\n  [2726] = 2726,\n  [2727] = 2727,\n  [2728] = 2728,\n  [2729] = 2729,\n  [2730] = 2730,\n  [2731] = 2731,\n  [2732] = 2732,\n  [2733] = 2733,\n  [2734] = 2734,\n  [2735] = 2735,\n  [2736] = 2736,\n  [2737] = 2498,\n  [2738] = 2485,\n  [2739] = 2739,\n  [2740] = 2692,\n  [2741] = 2741,\n  [2742] = 2742,\n  [2743] = 2743,\n  [2744] = 2741,\n  [2745] = 2745,\n  [2746] = 2666,\n  [2747] = 2747,\n  [2748] = 2748,\n  [2749] = 2749,\n  [2750] = 2750,\n  [2751] = 2751,\n  [2752] = 2752,\n  [2753] = 2753,\n  [2754] = 2754,\n  [2755] = 2755,\n  [2756] = 2728,\n  [2757] = 2757,\n  [2758] = 2758,\n  [2759] = 2759,\n  [2760] = 2743,\n  [2761] = 2761,\n  [2762] = 1416,\n  [2763] = 2763,\n  [2764] = 2761,\n  [2765] = 2745,\n  [2766] = 2766,\n  [2767] = 2520,\n  [2768] = 2515,\n  [2769] = 2769,\n  [2770] = 2742,\n  [2771] = 2730,\n  [2772] = 2718,\n  [2773] = 2773,\n  [2774] = 2774,\n  [2775] = 2775,\n  [2776] = 2727,\n  [2777] = 2729,\n  [2778] = 2778,\n  [2779] = 2779,\n  [2780] = 2735,\n  [2781] = 2781,\n  [2782] = 2782,\n  [2783] = 2783,\n  [2784] = 2726,\n  [2785] = 2785,\n  [2786] = 2786,\n  [2787] = 2787,\n  [2788] = 2788,\n  [2789] = 2757,\n  [2790] = 2664,\n  [2791] = 2681,\n  [2792] = 2792,\n  [2793] = 2793,\n  [2794] = 2778,\n  [2795] = 2795,\n  [2796] = 2796,\n  [2797] = 2797,\n  [2798] = 2672,\n  [2799] = 2799,\n  [2800] = 2779,\n  [2801] = 2801,\n  [2802] = 2677,\n  [2803] = 2676,\n  [2804] = 2804,\n  [2805] = 2678,\n  [2806] = 2806,\n  [2807] = 2807,\n  [2808] = 2666,\n  [2809] = 2809,\n  [2810] = 2810,\n  [2811] = 2811,\n  [2812] = 2684,\n  [2813] = 2681,\n  [2814] = 2814,\n  [2815] = 2786,\n  [2816] = 2816,\n  [2817] = 2817,\n  [2818] = 2818,\n  [2819] = 2819,\n  [2820] = 2820,\n  [2821] = 2821,\n  [2822] = 2822,\n  [2823] = 2823,\n  [2824] = 2824,\n  [2825] = 2825,\n  [2826] = 2826,\n  [2827] = 2822,\n  [2828] = 2828,\n  [2829] = 2829,\n  [2830] = 2830,\n  [2831] = 2409,\n  [2832] = 2819,\n  [2833] = 2819,\n  [2834] = 2822,\n  [2835] = 2835,\n  [2836] = 2836,\n  [2837] = 2837,\n  [2838] = 2838,\n  [2839] = 2839,\n  [2840] = 2819,\n  [2841] = 2841,\n  [2842] = 2839,\n  [2843] = 2841,\n  [2844] = 2844,\n  [2845] = 2844,\n  [2846] = 2837,\n  [2847] = 2847,\n  [2848] = 2848,\n  [2849] = 2849,\n  [2850] = 2850,\n  [2851] = 2839,\n  [2852] = 2841,\n  [2853] = 2853,\n  [2854] = 2853,\n  [2855] = 2844,\n  [2856] = 2856,\n  [2857] = 2837,\n  [2858] = 2858,\n  [2859] = 2859,\n  [2860] = 2860,\n  [2861] = 2424,\n  [2862] = 2862,\n  [2863] = 2863,\n  [2864] = 2864,\n  [2865] = 2413,\n  [2866] = 2866,\n  [2867] = 2867,\n  [2868] = 2844,\n  [2869] = 2869,\n  [2870] = 2837,\n  [2871] = 2871,\n  [2872] = 2863,\n  [2873] = 2867,\n  [2874] = 2863,\n  [2875] = 2853,\n  [2876] = 2819,\n  [2877] = 2849,\n  [2878] = 2849,\n  [2879] = 2879,\n  [2880] = 2880,\n  [2881] = 2881,\n  [2882] = 2406,\n  [2883] = 2863,\n  [2884] = 2822,\n  [2885] = 2885,\n  [2886] = 2886,\n  [2887] = 2887,\n  [2888] = 2839,\n  [2889] = 2841,\n  [2890] = 2839,\n  [2891] = 2841,\n  [2892] = 2824,\n  [2893] = 2893,\n  [2894] = 2824,\n  [2895] = 2838,\n  [2896] = 2853,\n  [2897] = 2897,\n  [2898] = 2898,\n  [2899] = 2664,\n  [2900] = 2726,\n  [2901] = 2821,\n  [2902] = 2835,\n  [2903] = 2844,\n  [2904] = 2779,\n  [2905] = 2778,\n  [2906] = 2844,\n  [2907] = 2837,\n  [2908] = 2837,\n  [2909] = 2729,\n  [2910] = 2836,\n  [2911] = 2911,\n  [2912] = 2727,\n  [2913] = 2863,\n  [2914] = 2849,\n  [2915] = 2828,\n  [2916] = 2916,\n  [2917] = 2837,\n  [2918] = 2844,\n  [2919] = 2919,\n  [2920] = 2897,\n  [2921] = 2898,\n  [2922] = 2922,\n  [2923] = 2923,\n  [2924] = 2718,\n  [2925] = 2849,\n  [2926] = 2730,\n  [2927] = 2742,\n  [2928] = 2863,\n  [2929] = 2824,\n  [2930] = 2930,\n  [2931] = 2839,\n  [2932] = 2745,\n  [2933] = 2841,\n  [2934] = 2839,\n  [2935] = 2935,\n  [2936] = 2936,\n  [2937] = 2841,\n  [2938] = 2761,\n  [2939] = 2939,\n  [2940] = 2743,\n  [2941] = 2941,\n  [2942] = 2410,\n  [2943] = 2826,\n  [2944] = 2923,\n  [2945] = 2822,\n  [2946] = 2819,\n  [2947] = 2947,\n  [2948] = 2558,\n  [2949] = 2949,\n  [2950] = 2849,\n  [2951] = 2850,\n  [2952] = 2824,\n  [2953] = 2580,\n  [2954] = 2824,\n  [2955] = 2582,\n  [2956] = 2956,\n  [2957] = 2957,\n  [2958] = 2958,\n  [2959] = 2959,\n  [2960] = 2853,\n  [2961] = 2652,\n  [2962] = 2936,\n  [2963] = 2963,\n  [2964] = 2935,\n  [2965] = 2965,\n  [2966] = 2966,\n  [2967] = 2967,\n  [2968] = 2968,\n  [2969] = 2969,\n  [2970] = 2970,\n  [2971] = 2971,\n  [2972] = 2972,\n  [2973] = 2973,\n  [2974] = 2974,\n  [2975] = 2975,\n  [2976] = 2976,\n  [2977] = 2977,\n  [2978] = 2978,\n  [2979] = 2979,\n  [2980] = 2980,\n  [2981] = 2981,\n  [2982] = 2974,\n  [2983] = 2983,\n  [2984] = 2984,\n  [2985] = 2985,\n  [2986] = 2986,\n  [2987] = 2987,\n  [2988] = 2988,\n  [2989] = 2989,\n  [2990] = 2990,\n  [2991] = 2991,\n  [2992] = 2992,\n  [2993] = 2993,\n  [2994] = 2994,\n  [2995] = 2979,\n  [2996] = 2996,\n  [2997] = 2997,\n  [2998] = 2998,\n  [2999] = 2999,\n  [3000] = 3000,\n  [3001] = 3001,\n  [3002] = 3002,\n  [3003] = 3003,\n  [3004] = 3004,\n  [3005] = 3005,\n  [3006] = 3006,\n  [3007] = 3007,\n  [3008] = 3008,\n  [3009] = 3009,\n  [3010] = 3010,\n  [3011] = 3011,\n  [3012] = 3012,\n  [3013] = 3013,\n  [3014] = 3014,\n  [3015] = 3015,\n  [3016] = 2977,\n  [3017] = 3017,\n  [3018] = 3018,\n  [3019] = 3019,\n  [3020] = 2970,\n  [3021] = 3021,\n  [3022] = 2975,\n  [3023] = 2973,\n  [3024] = 3024,\n  [3025] = 3025,\n  [3026] = 3026,\n  [3027] = 3027,\n  [3028] = 3028,\n  [3029] = 3029,\n  [3030] = 3030,\n  [3031] = 3031,\n  [3032] = 3032,\n  [3033] = 3033,\n  [3034] = 3034,\n  [3035] = 2990,\n  [3036] = 3036,\n  [3037] = 3037,\n  [3038] = 3038,\n  [3039] = 2980,\n  [3040] = 2988,\n  [3041] = 2988,\n  [3042] = 3042,\n  [3043] = 3043,\n  [3044] = 3044,\n  [3045] = 2973,\n  [3046] = 2975,\n  [3047] = 3047,\n  [3048] = 3048,\n  [3049] = 3049,\n  [3050] = 3050,\n  [3051] = 3017,\n  [3052] = 132,\n  [3053] = 2997,\n  [3054] = 2980,\n  [3055] = 3055,\n  [3056] = 2969,\n  [3057] = 1426,\n  [3058] = 3058,\n  [3059] = 2986,\n  [3060] = 3060,\n  [3061] = 3061,\n  [3062] = 2974,\n  [3063] = 3063,\n  [3064] = 3064,\n  [3065] = 3065,\n  [3066] = 3066,\n  [3067] = 2979,\n  [3068] = 3068,\n  [3069] = 3042,\n  [3070] = 3033,\n  [3071] = 3071,\n  [3072] = 3072,\n  [3073] = 3073,\n  [3074] = 3074,\n  [3075] = 1431,\n  [3076] = 3076,\n  [3077] = 3077,\n  [3078] = 3078,\n  [3079] = 3079,\n  [3080] = 3080,\n  [3081] = 3081,\n  [3082] = 2980,\n  [3083] = 3083,\n  [3084] = 3007,\n  [3085] = 3005,\n  [3086] = 3086,\n  [3087] = 3004,\n  [3088] = 3002,\n  [3089] = 3089,\n  [3090] = 3090,\n  [3091] = 3091,\n  [3092] = 2977,\n  [3093] = 3093,\n  [3094] = 3094,\n  [3095] = 3029,\n  [3096] = 3096,\n  [3097] = 3097,\n  [3098] = 3098,\n  [3099] = 2984,\n  [3100] = 2978,\n  [3101] = 2979,\n  [3102] = 3102,\n  [3103] = 3103,\n  [3104] = 2974,\n  [3105] = 2981,\n  [3106] = 2985,\n  [3107] = 3107,\n  [3108] = 2983,\n  [3109] = 3109,\n  [3110] = 3110,\n  [3111] = 2980,\n  [3112] = 2988,\n  [3113] = 2974,\n  [3114] = 2973,\n  [3115] = 2975,\n  [3116] = 3116,\n  [3117] = 2979,\n  [3118] = 3118,\n  [3119] = 3119,\n  [3120] = 2979,\n  [3121] = 2990,\n  [3122] = 2484,\n  [3123] = 2499,\n  [3124] = 2986,\n  [3125] = 3125,\n  [3126] = 3126,\n  [3127] = 510,\n  [3128] = 2969,\n  [3129] = 3129,\n  [3130] = 3012,\n  [3131] = 2973,\n  [3132] = 2975,\n  [3133] = 2979,\n  [3134] = 2997,\n  [3135] = 3135,\n  [3136] = 3032,\n  [3137] = 3102,\n  [3138] = 3034,\n  [3139] = 3043,\n  [3140] = 2975,\n  [3141] = 2973,\n  [3142] = 3017,\n  [3143] = 3143,\n  [3144] = 3044,\n  [3145] = 2990,\n  [3146] = 3146,\n  [3147] = 3147,\n  [3148] = 3148,\n  [3149] = 3149,\n  [3150] = 3143,\n  [3151] = 3119,\n  [3152] = 3152,\n  [3153] = 3153,\n  [3154] = 2994,\n  [3155] = 3155,\n  [3156] = 3028,\n  [3157] = 3030,\n  [3158] = 3158,\n  [3159] = 3047,\n  [3160] = 2975,\n  [3161] = 2973,\n  [3162] = 3143,\n  [3163] = 2988,\n  [3164] = 3153,\n  [3165] = 3165,\n  [3166] = 3147,\n  [3167] = 2980,\n  [3168] = 3168,\n  [3169] = 3169,\n  [3170] = 3170,\n  [3171] = 2988,\n  [3172] = 2990,\n  [3173] = 3168,\n  [3174] = 3174,\n  [3175] = 3175,\n  [3176] = 3176,\n  [3177] = 3177,\n  [3178] = 3178,\n  [3179] = 3179,\n  [3180] = 3180,\n  [3181] = 3181,\n  [3182] = 3182,\n  [3183] = 3183,\n  [3184] = 3180,\n  [3185] = 3185,\n  [3186] = 3186,\n  [3187] = 3187,\n  [3188] = 3188,\n  [3189] = 3189,\n  [3190] = 3174,\n  [3191] = 3191,\n  [3192] = 3191,\n  [3193] = 3193,\n  [3194] = 3186,\n  [3195] = 3195,\n  [3196] = 3196,\n  [3197] = 3197,\n  [3198] = 3198,\n  [3199] = 3182,\n  [3200] = 3200,\n  [3201] = 3180,\n  [3202] = 3202,\n  [3203] = 3188,\n  [3204] = 3204,\n  [3205] = 3205,\n  [3206] = 3206,\n  [3207] = 3207,\n  [3208] = 3208,\n  [3209] = 3175,\n  [3210] = 3210,\n  [3211] = 3211,\n  [3212] = 3212,\n  [3213] = 3213,\n  [3214] = 3214,\n  [3215] = 3215,\n  [3216] = 3216,\n  [3217] = 3217,\n  [3218] = 3218,\n  [3219] = 3219,\n  [3220] = 3220,\n  [3221] = 2862,\n  [3222] = 3222,\n  [3223] = 3223,\n  [3224] = 3224,\n  [3225] = 3217,\n  [3226] = 3180,\n  [3227] = 2652,\n  [3228] = 3228,\n  [3229] = 3218,\n  [3230] = 3195,\n  [3231] = 3178,\n  [3232] = 3232,\n  [3233] = 3233,\n  [3234] = 3211,\n  [3235] = 3235,\n  [3236] = 3236,\n  [3237] = 3237,\n  [3238] = 3204,\n  [3239] = 3239,\n  [3240] = 3236,\n  [3241] = 3241,\n  [3242] = 667,\n  [3243] = 3243,\n  [3244] = 3244,\n  [3245] = 3245,\n  [3246] = 3246,\n  [3247] = 3206,\n  [3248] = 1226,\n  [3249] = 3249,\n  [3250] = 3250,\n  [3251] = 3251,\n  [3252] = 1234,\n  [3253] = 3253,\n  [3254] = 3175,\n  [3255] = 3236,\n  [3256] = 3256,\n  [3257] = 3257,\n  [3258] = 3210,\n  [3259] = 3215,\n  [3260] = 3216,\n  [3261] = 3232,\n  [3262] = 3262,\n  [3263] = 3246,\n  [3264] = 3264,\n  [3265] = 3265,\n  [3266] = 3174,\n  [3267] = 3245,\n  [3268] = 3268,\n  [3269] = 3269,\n  [3270] = 3270,\n  [3271] = 3271,\n  [3272] = 3272,\n  [3273] = 3273,\n  [3274] = 3207,\n  [3275] = 3256,\n  [3276] = 3250,\n  [3277] = 3277,\n  [3278] = 3278,\n  [3279] = 2580,\n  [3280] = 3280,\n  [3281] = 3281,\n  [3282] = 3264,\n  [3283] = 3283,\n  [3284] = 1220,\n  [3285] = 3285,\n  [3286] = 3286,\n  [3287] = 3262,\n  [3288] = 3288,\n  [3289] = 3250,\n  [3290] = 3256,\n  [3291] = 3236,\n  [3292] = 3292,\n  [3293] = 3174,\n  [3294] = 3294,\n  [3295] = 3180,\n  [3296] = 3296,\n  [3297] = 3179,\n  [3298] = 3298,\n  [3299] = 3250,\n  [3300] = 3300,\n  [3301] = 3301,\n  [3302] = 3302,\n  [3303] = 3303,\n  [3304] = 3304,\n  [3305] = 3305,\n  [3306] = 3306,\n  [3307] = 3307,\n  [3308] = 3244,\n  [3309] = 3309,\n  [3310] = 3310,\n  [3311] = 3269,\n  [3312] = 3312,\n  [3313] = 3216,\n  [3314] = 3215,\n  [3315] = 3315,\n  [3316] = 3316,\n  [3317] = 3210,\n  [3318] = 3175,\n  [3319] = 3250,\n  [3320] = 3206,\n  [3321] = 3204,\n  [3322] = 3195,\n  [3323] = 3212,\n  [3324] = 3198,\n  [3325] = 3236,\n  [3326] = 3326,\n  [3327] = 3178,\n  [3328] = 2582,\n  [3329] = 3195,\n  [3330] = 3204,\n  [3331] = 3331,\n  [3332] = 3206,\n  [3333] = 3177,\n  [3334] = 3175,\n  [3335] = 3210,\n  [3336] = 3336,\n  [3337] = 3232,\n  [3338] = 3338,\n  [3339] = 3339,\n  [3340] = 3340,\n  [3341] = 3341,\n  [3342] = 3262,\n  [3343] = 3215,\n  [3344] = 3181,\n  [3345] = 3345,\n  [3346] = 3216,\n  [3347] = 669,\n  [3348] = 3246,\n  [3349] = 3245,\n  [3350] = 3273,\n  [3351] = 3174,\n  [3352] = 3241,\n  [3353] = 3353,\n  [3354] = 3354,\n  [3355] = 3216,\n  [3356] = 3280,\n  [3357] = 3233,\n  [3358] = 3180,\n  [3359] = 3215,\n  [3360] = 3204,\n  [3361] = 3250,\n  [3362] = 3362,\n  [3363] = 3363,\n  [3364] = 3364,\n  [3365] = 3189,\n  [3366] = 3264,\n  [3367] = 3214,\n  [3368] = 3312,\n  [3369] = 3369,\n  [3370] = 1235,\n  [3371] = 3195,\n  [3372] = 3219,\n  [3373] = 3373,\n  [3374] = 3374,\n  [3375] = 3375,\n  [3376] = 3376,\n  [3377] = 3236,\n  [3378] = 3174,\n  [3379] = 3206,\n  [3380] = 3210,\n  [3381] = 3286,\n  [3382] = 2558,\n  [3383] = 3283,\n  [3384] = 3384,\n  [3385] = 3385,\n  [3386] = 3386,\n  [3387] = 3387,\n  [3388] = 3385,\n  [3389] = 3389,\n  [3390] = 3390,\n  [3391] = 3391,\n  [3392] = 3392,\n  [3393] = 3393,\n  [3394] = 3394,\n  [3395] = 3395,\n  [3396] = 3396,\n  [3397] = 3397,\n  [3398] = 3398,\n  [3399] = 3399,\n  [3400] = 3400,\n  [3401] = 3401,\n  [3402] = 3402,\n  [3403] = 3403,\n  [3404] = 3404,\n  [3405] = 3405,\n  [3406] = 3406,\n  [3407] = 3407,\n  [3408] = 3408,\n  [3409] = 3409,\n  [3410] = 3410,\n  [3411] = 3411,\n  [3412] = 3412,\n  [3413] = 3413,\n  [3414] = 3414,\n  [3415] = 3415,\n  [3416] = 3416,\n  [3417] = 3417,\n  [3418] = 3418,\n  [3419] = 3419,\n  [3420] = 3420,\n  [3421] = 3421,\n  [3422] = 3422,\n  [3423] = 3423,\n  [3424] = 3424,\n  [3425] = 3425,\n  [3426] = 3426,\n  [3427] = 3427,\n  [3428] = 3412,\n  [3429] = 3410,\n  [3430] = 3409,\n  [3431] = 3408,\n  [3432] = 3407,\n  [3433] = 3433,\n  [3434] = 3434,\n  [3435] = 3435,\n  [3436] = 3436,\n  [3437] = 3437,\n  [3438] = 3438,\n  [3439] = 3387,\n  [3440] = 3404,\n  [3441] = 3441,\n  [3442] = 3442,\n  [3443] = 3398,\n  [3444] = 3444,\n  [3445] = 3401,\n  [3446] = 3446,\n  [3447] = 3398,\n  [3448] = 3393,\n  [3449] = 3427,\n  [3450] = 3450,\n  [3451] = 3394,\n  [3452] = 3402,\n  [3453] = 3399,\n  [3454] = 3403,\n  [3455] = 3455,\n  [3456] = 3456,\n  [3457] = 3457,\n  [3458] = 3458,\n  [3459] = 3459,\n  [3460] = 3460,\n  [3461] = 3461,\n  [3462] = 3405,\n  [3463] = 3438,\n  [3464] = 3464,\n  [3465] = 3465,\n  [3466] = 3441,\n  [3467] = 3398,\n  [3468] = 3468,\n  [3469] = 3442,\n  [3470] = 3387,\n  [3471] = 3385,\n  [3472] = 3472,\n  [3473] = 3401,\n  [3474] = 3392,\n  [3475] = 3475,\n  [3476] = 3404,\n  [3477] = 3399,\n  [3478] = 3465,\n  [3479] = 3446,\n  [3480] = 3480,\n  [3481] = 3481,\n  [3482] = 3482,\n  [3483] = 3483,\n  [3484] = 3484,\n  [3485] = 3457,\n  [3486] = 3393,\n  [3487] = 3457,\n  [3488] = 3446,\n  [3489] = 3489,\n  [3490] = 3406,\n  [3491] = 3424,\n  [3492] = 3465,\n  [3493] = 3427,\n  [3494] = 3494,\n  [3495] = 3393,\n  [3496] = 3496,\n  [3497] = 3417,\n  [3498] = 3401,\n  [3499] = 3499,\n  [3500] = 3404,\n  [3501] = 3456,\n  [3502] = 3502,\n  [3503] = 3406,\n  [3504] = 3386,\n  [3505] = 1695,\n  [3506] = 3423,\n  [3507] = 3423,\n  [3508] = 3456,\n  [3509] = 3459,\n  [3510] = 3422,\n  [3511] = 3408,\n  [3512] = 3409,\n  [3513] = 3513,\n  [3514] = 3421,\n  [3515] = 3420,\n  [3516] = 3419,\n  [3517] = 3441,\n  [3518] = 3418,\n  [3519] = 3519,\n  [3520] = 3520,\n  [3521] = 3521,\n  [3522] = 3394,\n  [3523] = 3441,\n  [3524] = 3417,\n  [3525] = 3442,\n  [3526] = 3387,\n  [3527] = 3385,\n  [3528] = 3416,\n  [3529] = 3444,\n  [3530] = 3402,\n  [3531] = 3399,\n  [3532] = 3427,\n  [3533] = 3403,\n  [3534] = 3405,\n  [3535] = 3410,\n  [3536] = 3415,\n  [3537] = 3435,\n  [3538] = 3412,\n  [3539] = 3427,\n  [3540] = 3540,\n  [3541] = 3541,\n  [3542] = 3442,\n  [3543] = 3543,\n  [3544] = 3544,\n  [3545] = 3545,\n  [3546] = 3546,\n  [3547] = 3399,\n  [3548] = 3424,\n  [3549] = 3549,\n  [3550] = 3423,\n  [3551] = 3551,\n  [3552] = 3422,\n  [3553] = 3421,\n  [3554] = 3554,\n  [3555] = 3420,\n  [3556] = 3419,\n  [3557] = 3557,\n  [3558] = 3419,\n  [3559] = 3420,\n  [3560] = 3418,\n  [3561] = 3456,\n  [3562] = 3421,\n  [3563] = 3422,\n  [3564] = 3441,\n  [3565] = 3565,\n  [3566] = 3566,\n  [3567] = 3435,\n  [3568] = 3568,\n  [3569] = 3424,\n  [3570] = 3457,\n  [3571] = 3465,\n  [3572] = 3416,\n  [3573] = 3386,\n  [3574] = 3574,\n  [3575] = 3405,\n  [3576] = 3455,\n  [3577] = 3402,\n  [3578] = 3415,\n  [3579] = 3442,\n  [3580] = 3403,\n  [3581] = 3387,\n  [3582] = 3385,\n  [3583] = 3402,\n  [3584] = 3444,\n  [3585] = 3585,\n  [3586] = 3386,\n  [3587] = 3587,\n  [3588] = 3465,\n  [3589] = 3456,\n  [3590] = 3415,\n  [3591] = 3416,\n  [3592] = 3457,\n  [3593] = 3417,\n  [3594] = 3594,\n  [3595] = 3418,\n  [3596] = 3412,\n  [3597] = 3419,\n  [3598] = 3406,\n  [3599] = 3405,\n  [3600] = 3435,\n  [3601] = 3403,\n  [3602] = 3420,\n  [3603] = 3421,\n  [3604] = 3410,\n  [3605] = 3422,\n  [3606] = 3441,\n  [3607] = 3423,\n  [3608] = 3424,\n  [3609] = 3394,\n  [3610] = 3409,\n  [3611] = 3402,\n  [3612] = 3612,\n  [3613] = 3613,\n  [3614] = 3614,\n  [3615] = 3435,\n  [3616] = 3427,\n  [3617] = 3617,\n  [3618] = 3412,\n  [3619] = 3410,\n  [3620] = 3444,\n  [3621] = 3442,\n  [3622] = 3409,\n  [3623] = 3446,\n  [3624] = 3408,\n  [3625] = 3625,\n  [3626] = 3407,\n  [3627] = 3465,\n  [3628] = 3406,\n  [3629] = 3629,\n  [3630] = 3387,\n  [3631] = 3385,\n  [3632] = 3404,\n  [3633] = 3401,\n  [3634] = 3398,\n  [3635] = 3540,\n  [3636] = 3393,\n  [3637] = 3637,\n  [3638] = 3438,\n  [3639] = 3639,\n  [3640] = 3640,\n  [3641] = 3641,\n  [3642] = 3642,\n  [3643] = 3643,\n  [3644] = 3433,\n  [3645] = 3645,\n  [3646] = 3456,\n  [3647] = 3647,\n  [3648] = 3457,\n  [3649] = 3408,\n  [3650] = 3484,\n  [3651] = 3651,\n  [3652] = 3438,\n  [3653] = 3441,\n  [3654] = 3417,\n  [3655] = 3418,\n  [3656] = 3435,\n  [3657] = 3459,\n  [3658] = 3407,\n  [3659] = 3455,\n  [3660] = 3442,\n  [3661] = 3387,\n  [3662] = 3385,\n  [3663] = 3663,\n  [3664] = 3664,\n  [3665] = 3665,\n  [3666] = 3545,\n  [3667] = 3394,\n  [3668] = 3392,\n  [3669] = 3554,\n  [3670] = 3574,\n  [3671] = 3435,\n  [3672] = 3455,\n  [3673] = 3416,\n  [3674] = 3617,\n  [3675] = 3415,\n  [3676] = 3541,\n  [3677] = 3455,\n  [3678] = 3664,\n  [3679] = 3438,\n  [3680] = 3459,\n  [3681] = 3617,\n  [3682] = 3392,\n  [3683] = 3546,\n  [3684] = 3399,\n  [3685] = 3455,\n  [3686] = 3686,\n  [3687] = 3481,\n  [3688] = 3545,\n  [3689] = 3554,\n  [3690] = 3446,\n  [3691] = 3665,\n  [3692] = 3458,\n  [3693] = 3693,\n  [3694] = 3694,\n  [3695] = 3446,\n  [3696] = 3407,\n  [3697] = 3459,\n  [3698] = 3438,\n};\n\nstatic inline bool anon_sym_BANG_character_set_1(int32_t c) {\n  return (c < 8192\n    ? (c < ' '\n      ? (c < '\\r'\n        ? (c >= '\\t' && c <= '\\n')\n        : c <= '\\r')\n      : (c <= ' ' || (c < 5760\n        ? c == 160\n        : c <= 5760)))\n    : (c <= 8203 || (c < 12288\n      ? (c < 8287\n        ? c == 8239\n        : c <= 8288)\n      : (c <= 12288 || c == 65279))));\n}\n\nstatic inline bool sym__glimmer_template_content_character_set_1(int32_t c) {\n  return (c < 8192\n    ? (c < ' '\n      ? (c < '\\r'\n        ? c == '\\t'\n        : c <= '\\r')\n      : (c <= ' ' || (c < 5760\n        ? c == 160\n        : c <= 5760)))\n    : (c <= 8203 || (c < 12288\n      ? (c < 8287\n        ? c == 8239\n        : c <= 8288)\n      : (c <= 12288 || c == 65279))));\n}\n\nstatic inline bool sym_identifier_character_set_1(int32_t c) {\n  return (c < 160\n    ? (c < ':'\n      ? (c < 0\n        ? c == 0\n        : (c <= '#' || (c >= '%' && c <= '/')))\n      : (c <= '@' || (c < '`'\n        ? (c >= '[' && c <= '^')\n        : (c <= '`' || (c >= '{' && c <= '~')))))\n    : (c <= 160 || (c < 8287\n      ? (c < 8192\n        ? c == 5760\n        : (c <= 8203 || c == 8239))\n      : (c <= 8288 || (c < 65279\n        ? c == 12288\n        : c <= 65279)))));\n}\n\nstatic inline bool sym_identifier_character_set_2(int32_t c) {\n  return (c < 160\n    ? (c < ':'\n      ? (c < 0\n        ? c == 0\n        : (c <= '#' || (c >= '%' && c <= '/')))\n      : (c <= '@' || (c < '`'\n        ? (c >= '[' && c <= '^')\n        : c <= '~')))\n    : (c <= 160 || (c < 8287\n      ? (c < 8192\n        ? c == 5760\n        : (c <= 8203 || c == 8239))\n      : (c <= 8288 || (c < 65279\n        ? c == 12288\n        : c <= 65279)))));\n}\n\nstatic inline bool sym_identifier_character_set_3(int32_t c) {\n  return (c < 160\n    ? (c < ':'\n      ? (c < 0\n        ? c == 0\n        : (c <= '#' || (c >= '%' && c <= '/')))\n      : (c <= '@' || (c < '`'\n        ? (c >= '[' && c <= '^')\n        : (c <= '`' || (c >= '|' && c <= '~')))))\n    : (c <= 160 || (c < 8287\n      ? (c < 8192\n        ? c == 5760\n        : (c <= 8203 || c == 8239))\n      : (c <= 8288 || (c < 65279\n        ? c == 12288\n        : c <= 65279)))));\n}\n\nstatic inline bool sym_private_property_identifier_character_set_1(int32_t c) {\n  return (c < 160\n    ? (c < '['\n      ? (c < 0\n        ? c == 0\n        : (c <= '#' || (c >= '%' && c <= '@')))\n      : (c <= '^' || (c < '{'\n        ? c == '`'\n        : c <= '~')))\n    : (c <= 160 || (c < 8287\n      ? (c < 8192\n        ? c == 5760\n        : (c <= 8203 || c == 8239))\n      : (c <= 8288 || (c < 65279\n        ? c == 12288\n        : c <= 65279)))));\n}\n\nstatic bool ts_lex(TSLexer *lexer, TSStateId state) {\n  START_LEXER();\n  eof = lexer->eof(lexer);\n  switch (state) {\n    case 0:\n      if (eof) ADVANCE(106);\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(12);\n      if (lookahead == '$') ADVANCE(256);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(199);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(237);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(136);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(60);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(189);\n      if (lookahead == '}') ADVANCE(118);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(103)\n      if (lookahead != 0 &&\n          lookahead > 31) ADVANCE(257);\n      END_STATE();\n    case 1:\n      if (lookahead == '\\n') SKIP(1)\n      if (lookahead == '/') ADVANCE(129);\n      if (lookahead == '<') ADVANCE(131);\n      if (sym__glimmer_template_content_character_set_1(lookahead)) ADVANCE(130);\n      if (lookahead != 0) ADVANCE(128);\n      END_STATE();\n    case 2:\n      if (lookahead == '\\n') SKIP(33)\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == '[') ADVANCE(42);\n      if (lookahead == '\\\\') ADVANCE(102);\n      if (sym__glimmer_template_content_character_set_1(lookahead)) ADVANCE(238);\n      if (lookahead != 0) ADVANCE(239);\n      END_STATE();\n    case 3:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(41);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(198);\n      if (lookahead == '.') ADVANCE(147);\n      if (lookahead == '/') ADVANCE(144);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(135);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(189);\n      if (lookahead == '}') ADVANCE(118);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(3)\n      if (lookahead != 0 &&\n          lookahead > 31 &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 4:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(41);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(198);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(144);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(135);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(29);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(255);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(189);\n      if (lookahead == '}') ADVANCE(118);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(4)\n      if (lookahead != 0 &&\n          lookahead > 31 &&\n          (lookahead < ')' || '@' < lookahead) &&\n          lookahead != ']' &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 5:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(198);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(144);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == '<') ADVANCE(136);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(188);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(5)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < ';' || '@' < lookahead) &&\n          lookahead != ']' &&\n          lookahead != '}') ADVANCE(257);\n      END_STATE();\n    case 6:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(198);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(144);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == '<') ADVANCE(136);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(188);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(6)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < ';' || '@' < lookahead) &&\n          lookahead != ']' &&\n          lookahead != '}') ADVANCE(257);\n      END_STATE();\n    case 7:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '%') ADVANCE(200);\n      if (lookahead == '&') ADVANCE(184);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(114);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(137);\n      if (lookahead == '=') ADVANCE(109);\n      if (lookahead == '>') ADVANCE(142);\n      if (lookahead == '?') ADVANCE(263);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(185);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(191);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(7)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '0' || '@' < lookahead) &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 8:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(198);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(144);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(135);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(188);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(8)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '\\'' || '9' < lookahead) &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 9:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(198);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(144);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(135);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(189);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(9)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '\\'' || '@' < lookahead) &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 10:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '%') ADVANCE(200);\n      if (lookahead == '&') ADVANCE(184);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(114);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(137);\n      if (lookahead == '=') ADVANCE(36);\n      if (lookahead == '>') ADVANCE(142);\n      if (lookahead == '?') ADVANCE(30);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(185);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '|') ADVANCE(190);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(11)\n      if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(240);\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '\\'' || '@' < lookahead) &&\n          (lookahead < '{' || '~' < lookahead)) ADVANCE(257);\n      END_STATE();\n    case 11:\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '%') ADVANCE(200);\n      if (lookahead == '&') ADVANCE(184);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(114);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(137);\n      if (lookahead == '=') ADVANCE(36);\n      if (lookahead == '>') ADVANCE(142);\n      if (lookahead == '?') ADVANCE(30);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(185);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '|') ADVANCE(190);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(11)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '\\'' || '@' < lookahead) &&\n          (lookahead < '{' || '~' < lookahead)) ADVANCE(257);\n      END_STATE();\n    case 12:\n      if (lookahead == '!') ADVANCE(107);\n      if (lookahead == '\\\\') ADVANCE(61);\n      if (!sym_private_property_identifier_character_set_1(lookahead)) ADVANCE(258);\n      END_STATE();\n    case 13:\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(41);\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(112);\n      if (lookahead == '+') ADVANCE(193);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(196);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(237);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(134);\n      if (lookahead == '=') ADVANCE(111);\n      if (lookahead == '>') ADVANCE(140);\n      if (lookahead == '?') ADVANCE(260);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(192);\n      if (lookahead == '}') ADVANCE(118);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(14)\n      if (lookahead != 0 &&\n          lookahead > 31 &&\n          (lookahead < '%' || '@' < lookahead) &&\n          lookahead != '^' &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 14:\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(41);\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(112);\n      if (lookahead == '+') ADVANCE(193);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(196);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(134);\n      if (lookahead == '=') ADVANCE(111);\n      if (lookahead == '>') ADVANCE(140);\n      if (lookahead == '?') ADVANCE(260);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(192);\n      if (lookahead == '}') ADVANCE(118);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(14)\n      if (lookahead != 0 &&\n          lookahead > 31 &&\n          (lookahead < '%' || '@' < lookahead) &&\n          lookahead != '^' &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 15:\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(41);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == '*') ADVANCE(112);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(196);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(134);\n      if (lookahead == '=') ADVANCE(108);\n      if (lookahead == '?') ADVANCE(260);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == 'f') ADVANCE(255);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(72);\n      if (lookahead == '}') ADVANCE(118);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(15)\n      if (lookahead != 0 &&\n          lookahead > 31 &&\n          (lookahead < '%' || '>' < lookahead) &&\n          lookahead != ']' &&\n          lookahead != '^' &&\n          lookahead != '`' &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 16:\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(112);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(28);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == '<') ADVANCE(139);\n      if (lookahead == '?') ADVANCE(260);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(187);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(16)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '%' || '>' < lookahead) &&\n          lookahead != '^' &&\n          lookahead != '}') ADVANCE(257);\n      END_STATE();\n    case 17:\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == '<') ADVANCE(139);\n      if (lookahead == '=') ADVANCE(111);\n      if (lookahead == '>') ADVANCE(140);\n      if (lookahead == '?') ADVANCE(261);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(187);\n      if (lookahead == '}') ADVANCE(118);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(17)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '%' || ';' < lookahead) &&\n          lookahead != '^') ADVANCE(257);\n      END_STATE();\n    case 18:\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(134);\n      if (lookahead == '=') ADVANCE(111);\n      if (lookahead == '>') ADVANCE(140);\n      if (lookahead == '?') ADVANCE(260);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(192);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(18)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '%' || '@' < lookahead) &&\n          lookahead != '^' &&\n          lookahead != '`' &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 19:\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '/') ADVANCE(218);\n      if (lookahead == '\\\\') ADVANCE(63);\n      if (anon_sym_BANG_character_set_1(lookahead)) ADVANCE(221);\n      if (lookahead != 0) ADVANCE(222);\n      END_STATE();\n    case 20:\n      if (lookahead == '$') ADVANCE(64);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(40);\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == '=') ADVANCE(108);\n      if (lookahead == '?') ADVANCE(35);\n      if (lookahead == '\\\\') ADVANCE(63);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(53);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(21)\n      END_STATE();\n    case 21:\n      if (lookahead == '$') ADVANCE(64);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(40);\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == '=') ADVANCE(108);\n      if (lookahead == '?') ADVANCE(35);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(53);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(21)\n      END_STATE();\n    case 22:\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(37);\n      if (lookahead == '.') ADVANCE(145);\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(134);\n      if (lookahead == '=') ADVANCE(111);\n      if (lookahead == '>') ADVANCE(140);\n      if (lookahead == '?') ADVANCE(261);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(192);\n      if (lookahead == '}') ADVANCE(118);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(22)\n      if (lookahead != 0 &&\n          lookahead > '#' &&\n          (lookahead < '%' || '@' < lookahead) &&\n          lookahead != '^' &&\n          lookahead != '`' &&\n          lookahead != '~') ADVANCE(257);\n      END_STATE();\n    case 23:\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '/') ADVANCE(224);\n      if (lookahead == '\\\\') ADVANCE(63);\n      if (anon_sym_BANG_character_set_1(lookahead)) ADVANCE(227);\n      if (lookahead != 0) ADVANCE(228);\n      END_STATE();\n    case 24:\n      if (lookahead == '*') ADVANCE(26);\n      if (lookahead == '/') ADVANCE(234);\n      END_STATE();\n    case 25:\n      if (lookahead == '*') ADVANCE(25);\n      if (lookahead == '/') ADVANCE(233);\n      if (lookahead != 0) ADVANCE(26);\n      END_STATE();\n    case 26:\n      if (lookahead == '*') ADVANCE(25);\n      if (lookahead != 0) ADVANCE(26);\n      END_STATE();\n    case 27:\n      if (lookahead == '*') ADVANCE(152);\n      END_STATE();\n    case 28:\n      if (lookahead == '.') ADVANCE(31);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(250);\n      END_STATE();\n    case 29:\n      if (lookahead == '.') ADVANCE(154);\n      if (lookahead == '?') ADVANCE(211);\n      END_STATE();\n    case 30:\n      if (lookahead == '.') ADVANCE(154);\n      if (lookahead == '?') ADVANCE(210);\n      END_STATE();\n    case 31:\n      if (lookahead == '.') ADVANCE(171);\n      END_STATE();\n    case 32:\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == 'f') ADVANCE(54);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(32)\n      END_STATE();\n    case 33:\n      if (lookahead == '/') ADVANCE(24);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(33)\n      END_STATE();\n    case 34:\n      if (lookahead == ':') ADVANCE(264);\n      END_STATE();\n    case 35:\n      if (lookahead == ':') ADVANCE(265);\n      END_STATE();\n    case 36:\n      if (lookahead == '=') ADVANCE(205);\n      END_STATE();\n    case 37:\n      if (lookahead == '>') ADVANCE(266);\n      END_STATE();\n    case 38:\n      if (lookahead == '>') ADVANCE(132);\n      END_STATE();\n    case 39:\n      if (lookahead == '>') ADVANCE(133);\n      END_STATE();\n    case 40:\n      if (lookahead == '?') ADVANCE(34);\n      END_STATE();\n    case 41:\n      if (lookahead == '\\\\') ADVANCE(61);\n      if (!sym_private_property_identifier_character_set_1(lookahead)) ADVANCE(258);\n      END_STATE();\n    case 42:\n      if (lookahead == '\\\\') ADVANCE(101);\n      if (lookahead == ']') ADVANCE(239);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(42);\n      END_STATE();\n    case 43:\n      if (lookahead == 'a') ADVANCE(57);\n      END_STATE();\n    case 44:\n      if (lookahead == 'a') ADVANCE(58);\n      END_STATE();\n    case 45:\n      if (lookahead == 'e') ADVANCE(51);\n      END_STATE();\n    case 46:\n      if (lookahead == 'e') ADVANCE(38);\n      END_STATE();\n    case 47:\n      if (lookahead == 'e') ADVANCE(39);\n      END_STATE();\n    case 48:\n      if (lookahead == 'e') ADVANCE(52);\n      END_STATE();\n    case 49:\n      if (lookahead == 'l') ADVANCE(43);\n      END_STATE();\n    case 50:\n      if (lookahead == 'l') ADVANCE(44);\n      END_STATE();\n    case 51:\n      if (lookahead == 'm') ADVANCE(55);\n      END_STATE();\n    case 52:\n      if (lookahead == 'm') ADVANCE(56);\n      END_STATE();\n    case 53:\n      if (lookahead == 'n') ADVANCE(148);\n      END_STATE();\n    case 54:\n      if (lookahead == 'n') ADVANCE(149);\n      END_STATE();\n    case 55:\n      if (lookahead == 'p') ADVANCE(49);\n      END_STATE();\n    case 56:\n      if (lookahead == 'p') ADVANCE(50);\n      END_STATE();\n    case 57:\n      if (lookahead == 't') ADVANCE(46);\n      END_STATE();\n    case 58:\n      if (lookahead == 't') ADVANCE(47);\n      END_STATE();\n    case 59:\n      if (lookahead == 't') ADVANCE(48);\n      END_STATE();\n    case 60:\n      if (lookahead == 'u') ADVANCE(65);\n      if (lookahead == 'x') ADVANCE(93);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(232);\n      if (lookahead != 0) ADVANCE(229);\n      END_STATE();\n    case 61:\n      if (lookahead == 'u') ADVANCE(66);\n      END_STATE();\n    case 62:\n      if (lookahead == 'u') ADVANCE(67);\n      END_STATE();\n    case 63:\n      if (lookahead == 'u') ADVANCE(68);\n      if (lookahead == 'x') ADVANCE(93);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(232);\n      if (lookahead != 0) ADVANCE(229);\n      END_STATE();\n    case 64:\n      if (lookahead == '{') ADVANCE(236);\n      END_STATE();\n    case 65:\n      if (lookahead == '{') ADVANCE(88);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(98);\n      END_STATE();\n    case 66:\n      if (lookahead == '{') ADVANCE(91);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(99);\n      END_STATE();\n    case 67:\n      if (lookahead == '{') ADVANCE(92);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(100);\n      END_STATE();\n    case 68:\n      if (lookahead == '{') ADVANCE(94);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(90);\n      END_STATE();\n    case 69:\n      if (lookahead == '}') ADVANCE(257);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(69);\n      END_STATE();\n    case 70:\n      if (lookahead == '}') ADVANCE(258);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(70);\n      END_STATE();\n    case 71:\n      if (lookahead == '}') ADVANCE(229);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(71);\n      END_STATE();\n    case 72:\n      if (lookahead == '}') ADVANCE(268);\n      END_STATE();\n    case 73:\n      if (lookahead == '}') ADVANCE(230);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(73);\n      END_STATE();\n    case 74:\n      if (lookahead == '+' ||\n          lookahead == '-') ADVANCE(82);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(248);\n      END_STATE();\n    case 75:\n      if (lookahead == '+' ||\n          lookahead == '-') ADVANCE(83);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(249);\n      END_STATE();\n    case 76:\n      if (lookahead == '0' ||\n          lookahead == '1') ADVANCE(244);\n      END_STATE();\n    case 77:\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(245);\n      END_STATE();\n    case 78:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      END_STATE();\n    case 79:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(250);\n      END_STATE();\n    case 80:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(247);\n      END_STATE();\n    case 81:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(251);\n      END_STATE();\n    case 82:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(248);\n      END_STATE();\n    case 83:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(249);\n      END_STATE();\n    case 84:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(257);\n      END_STATE();\n    case 85:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(258);\n      END_STATE();\n    case 86:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(229);\n      END_STATE();\n    case 87:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(246);\n      END_STATE();\n    case 88:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(73);\n      END_STATE();\n    case 89:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(230);\n      END_STATE();\n    case 90:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(93);\n      END_STATE();\n    case 91:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(70);\n      END_STATE();\n    case 92:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(69);\n      END_STATE();\n    case 93:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(86);\n      END_STATE();\n    case 94:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(71);\n      END_STATE();\n    case 95:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(89);\n      END_STATE();\n    case 96:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(85);\n      END_STATE();\n    case 97:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(84);\n      END_STATE();\n    case 98:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(95);\n      END_STATE();\n    case 99:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(96);\n      END_STATE();\n    case 100:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(97);\n      END_STATE();\n    case 101:\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(42);\n      END_STATE();\n    case 102:\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(239);\n      END_STATE();\n    case 103:\n      if (eof) ADVANCE(106);\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(12);\n      if (lookahead == '$') ADVANCE(256);\n      if (lookahead == '%') ADVANCE(201);\n      if (lookahead == '&') ADVANCE(183);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(113);\n      if (lookahead == '+') ADVANCE(195);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(199);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(136);\n      if (lookahead == '=') ADVANCE(110);\n      if (lookahead == '>') ADVANCE(141);\n      if (lookahead == '?') ADVANCE(262);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(186);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(116);\n      if (lookahead == '|') ADVANCE(189);\n      if (lookahead == '}') ADVANCE(118);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(103)\n      if (lookahead != 0 &&\n          lookahead > 31) ADVANCE(257);\n      END_STATE();\n    case 104:\n      if (eof) ADVANCE(106);\n      if (lookahead == '!') ADVANCE(120);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '%') ADVANCE(200);\n      if (lookahead == '&') ADVANCE(184);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '*') ADVANCE(114);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(147);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(125);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(138);\n      if (lookahead == '=') ADVANCE(109);\n      if (lookahead == '>') ADVANCE(142);\n      if (lookahead == '?') ADVANCE(30);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '^') ADVANCE(185);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(190);\n      if (lookahead == '}') ADVANCE(118);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(104)\n      if (lookahead != 0 &&\n          lookahead > '#') ADVANCE(257);\n      END_STATE();\n    case 105:\n      if (eof) ADVANCE(106);\n      if (lookahead == '!') ADVANCE(119);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '#') ADVANCE(12);\n      if (lookahead == '&') ADVANCE(182);\n      if (lookahead == '\\'') ADVANCE(216);\n      if (lookahead == '(') ADVANCE(121);\n      if (lookahead == ')') ADVANCE(122);\n      if (lookahead == '+') ADVANCE(194);\n      if (lookahead == ',') ADVANCE(117);\n      if (lookahead == '-') ADVANCE(197);\n      if (lookahead == '.') ADVANCE(146);\n      if (lookahead == '/') ADVANCE(143);\n      if (lookahead == '0') ADVANCE(242);\n      if (lookahead == ':') ADVANCE(124);\n      if (lookahead == ';') ADVANCE(123);\n      if (lookahead == '<') ADVANCE(139);\n      if (lookahead == '=') ADVANCE(111);\n      if (lookahead == '>') ADVANCE(140);\n      if (lookahead == '?') ADVANCE(260);\n      if (lookahead == '@') ADVANCE(259);\n      if (lookahead == '[') ADVANCE(126);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == ']') ADVANCE(127);\n      if (lookahead == '`') ADVANCE(235);\n      if (lookahead == 'f') ADVANCE(254);\n      if (lookahead == '{') ADVANCE(115);\n      if (lookahead == '|') ADVANCE(192);\n      if (lookahead == '}') ADVANCE(118);\n      if (lookahead == '~') ADVANCE(212);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      if (anon_sym_BANG_character_set_1(lookahead)) SKIP(105)\n      if (lookahead != 0 &&\n          lookahead > 31 &&\n          (lookahead < '%' || '*' < lookahead) &&\n          lookahead != '^') ADVANCE(257);\n      END_STATE();\n    case 106:\n      ACCEPT_TOKEN(ts_builtin_sym_end);\n      END_STATE();\n    case 107:\n      ACCEPT_TOKEN(sym_hash_bang_line);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(107);\n      END_STATE();\n    case 108:\n      ACCEPT_TOKEN(anon_sym_EQ);\n      END_STATE();\n    case 109:\n      ACCEPT_TOKEN(anon_sym_EQ);\n      if (lookahead == '=') ADVANCE(205);\n      END_STATE();\n    case 110:\n      ACCEPT_TOKEN(anon_sym_EQ);\n      if (lookahead == '=') ADVANCE(205);\n      if (lookahead == '>') ADVANCE(153);\n      END_STATE();\n    case 111:\n      ACCEPT_TOKEN(anon_sym_EQ);\n      if (lookahead == '>') ADVANCE(153);\n      END_STATE();\n    case 112:\n      ACCEPT_TOKEN(anon_sym_STAR);\n      END_STATE();\n    case 113:\n      ACCEPT_TOKEN(anon_sym_STAR);\n      if (lookahead == '*') ADVANCE(203);\n      if (lookahead == '=') ADVANCE(158);\n      END_STATE();\n    case 114:\n      ACCEPT_TOKEN(anon_sym_STAR);\n      if (lookahead == '*') ADVANCE(202);\n      END_STATE();\n    case 115:\n      ACCEPT_TOKEN(anon_sym_LBRACE);\n      END_STATE();\n    case 116:\n      ACCEPT_TOKEN(anon_sym_LBRACE);\n      if (lookahead == '|') ADVANCE(267);\n      END_STATE();\n    case 117:\n      ACCEPT_TOKEN(anon_sym_COMMA);\n      END_STATE();\n    case 118:\n      ACCEPT_TOKEN(anon_sym_RBRACE);\n      END_STATE();\n    case 119:\n      ACCEPT_TOKEN(anon_sym_BANG);\n      END_STATE();\n    case 120:\n      ACCEPT_TOKEN(anon_sym_BANG);\n      if (lookahead == '=') ADVANCE(207);\n      END_STATE();\n    case 121:\n      ACCEPT_TOKEN(anon_sym_LPAREN);\n      END_STATE();\n    case 122:\n      ACCEPT_TOKEN(anon_sym_RPAREN);\n      END_STATE();\n    case 123:\n      ACCEPT_TOKEN(anon_sym_SEMI);\n      END_STATE();\n    case 124:\n      ACCEPT_TOKEN(anon_sym_COLON);\n      END_STATE();\n    case 125:\n      ACCEPT_TOKEN(anon_sym_COLON);\n      if (lookahead == ':') ADVANCE(155);\n      END_STATE();\n    case 126:\n      ACCEPT_TOKEN(anon_sym_LBRACK);\n      END_STATE();\n    case 127:\n      ACCEPT_TOKEN(anon_sym_RBRACK);\n      END_STATE();\n    case 128:\n      ACCEPT_TOKEN(sym__glimmer_template_content);\n      END_STATE();\n    case 129:\n      ACCEPT_TOKEN(sym__glimmer_template_content);\n      if (lookahead == '*') ADVANCE(26);\n      if (lookahead == '/') ADVANCE(234);\n      END_STATE();\n    case 130:\n      ACCEPT_TOKEN(sym__glimmer_template_content);\n      if (lookahead == '/') ADVANCE(129);\n      if (lookahead == '<') ADVANCE(131);\n      if (sym__glimmer_template_content_character_set_1(lookahead)) ADVANCE(130);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(128);\n      END_STATE();\n    case 131:\n      ACCEPT_TOKEN(sym__glimmer_template_content);\n      if (lookahead == '/') ADVANCE(59);\n      END_STATE();\n    case 132:\n      ACCEPT_TOKEN(anon_sym_LTtemplate_GT);\n      END_STATE();\n    case 133:\n      ACCEPT_TOKEN(anon_sym_LT_SLASHtemplate_GT);\n      END_STATE();\n    case 134:\n      ACCEPT_TOKEN(anon_sym_LT);\n      END_STATE();\n    case 135:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(181);\n      if (lookahead == '=') ADVANCE(204);\n      END_STATE();\n    case 136:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(181);\n      if (lookahead == '=') ADVANCE(204);\n      if (lookahead == 't') ADVANCE(45);\n      END_STATE();\n    case 137:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(180);\n      if (lookahead == '=') ADVANCE(204);\n      END_STATE();\n    case 138:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(180);\n      if (lookahead == '=') ADVANCE(204);\n      if (lookahead == 't') ADVANCE(45);\n      END_STATE();\n    case 139:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == 't') ADVANCE(45);\n      END_STATE();\n    case 140:\n      ACCEPT_TOKEN(anon_sym_GT);\n      END_STATE();\n    case 141:\n      ACCEPT_TOKEN(anon_sym_GT);\n      if (lookahead == '=') ADVANCE(209);\n      if (lookahead == '>') ADVANCE(176);\n      END_STATE();\n    case 142:\n      ACCEPT_TOKEN(anon_sym_GT);\n      if (lookahead == '=') ADVANCE(209);\n      if (lookahead == '>') ADVANCE(177);\n      END_STATE();\n    case 143:\n      ACCEPT_TOKEN(anon_sym_SLASH);\n      if (lookahead == '*') ADVANCE(26);\n      if (lookahead == '/') ADVANCE(234);\n      END_STATE();\n    case 144:\n      ACCEPT_TOKEN(anon_sym_SLASH);\n      if (lookahead == '*') ADVANCE(26);\n      if (lookahead == '/') ADVANCE(234);\n      if (lookahead == '=') ADVANCE(159);\n      END_STATE();\n    case 145:\n      ACCEPT_TOKEN(anon_sym_DOT);\n      END_STATE();\n    case 146:\n      ACCEPT_TOKEN(anon_sym_DOT);\n      if (lookahead == '.') ADVANCE(31);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(250);\n      END_STATE();\n    case 147:\n      ACCEPT_TOKEN(anon_sym_DOT);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(250);\n      END_STATE();\n    case 148:\n      ACCEPT_TOKEN(anon_sym_fn);\n      END_STATE();\n    case 149:\n      ACCEPT_TOKEN(anon_sym_fn);\n      if (lookahead == ' ') ADVANCE(27);\n      END_STATE();\n    case 150:\n      ACCEPT_TOKEN(anon_sym_fn);\n      if (lookahead == ' ') ADVANCE(27);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 151:\n      ACCEPT_TOKEN(anon_sym_fn);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 152:\n      ACCEPT_TOKEN(anon_sym_fn_STAR);\n      END_STATE();\n    case 153:\n      ACCEPT_TOKEN(anon_sym_EQ_GT);\n      END_STATE();\n    case 154:\n      ACCEPT_TOKEN(anon_sym_QMARK_DOT);\n      END_STATE();\n    case 155:\n      ACCEPT_TOKEN(anon_sym_COLON_COLON);\n      END_STATE();\n    case 156:\n      ACCEPT_TOKEN(anon_sym_PLUS_EQ);\n      END_STATE();\n    case 157:\n      ACCEPT_TOKEN(anon_sym_DASH_EQ);\n      END_STATE();\n    case 158:\n      ACCEPT_TOKEN(anon_sym_STAR_EQ);\n      END_STATE();\n    case 159:\n      ACCEPT_TOKEN(anon_sym_SLASH_EQ);\n      END_STATE();\n    case 160:\n      ACCEPT_TOKEN(anon_sym_PERCENT_EQ);\n      END_STATE();\n    case 161:\n      ACCEPT_TOKEN(anon_sym_CARET_EQ);\n      END_STATE();\n    case 162:\n      ACCEPT_TOKEN(anon_sym_AMP_EQ);\n      END_STATE();\n    case 163:\n      ACCEPT_TOKEN(anon_sym_PIPE_EQ);\n      END_STATE();\n    case 164:\n      ACCEPT_TOKEN(anon_sym_GT_GT_EQ);\n      END_STATE();\n    case 165:\n      ACCEPT_TOKEN(anon_sym_GT_GT_GT_EQ);\n      END_STATE();\n    case 166:\n      ACCEPT_TOKEN(anon_sym_LT_LT_EQ);\n      END_STATE();\n    case 167:\n      ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ);\n      END_STATE();\n    case 168:\n      ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ);\n      END_STATE();\n    case 169:\n      ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ);\n      END_STATE();\n    case 170:\n      ACCEPT_TOKEN(anon_sym_QMARK_QMARK_EQ);\n      END_STATE();\n    case 171:\n      ACCEPT_TOKEN(anon_sym_DOT_DOT_DOT);\n      END_STATE();\n    case 172:\n      ACCEPT_TOKEN(anon_sym_AMP_AMP);\n      END_STATE();\n    case 173:\n      ACCEPT_TOKEN(anon_sym_AMP_AMP);\n      if (lookahead == '=') ADVANCE(168);\n      END_STATE();\n    case 174:\n      ACCEPT_TOKEN(anon_sym_PIPE_PIPE);\n      END_STATE();\n    case 175:\n      ACCEPT_TOKEN(anon_sym_PIPE_PIPE);\n      if (lookahead == '=') ADVANCE(169);\n      END_STATE();\n    case 176:\n      ACCEPT_TOKEN(anon_sym_GT_GT);\n      if (lookahead == '=') ADVANCE(164);\n      if (lookahead == '>') ADVANCE(179);\n      END_STATE();\n    case 177:\n      ACCEPT_TOKEN(anon_sym_GT_GT);\n      if (lookahead == '>') ADVANCE(178);\n      END_STATE();\n    case 178:\n      ACCEPT_TOKEN(anon_sym_GT_GT_GT);\n      END_STATE();\n    case 179:\n      ACCEPT_TOKEN(anon_sym_GT_GT_GT);\n      if (lookahead == '=') ADVANCE(165);\n      END_STATE();\n    case 180:\n      ACCEPT_TOKEN(anon_sym_LT_LT);\n      END_STATE();\n    case 181:\n      ACCEPT_TOKEN(anon_sym_LT_LT);\n      if (lookahead == '=') ADVANCE(166);\n      END_STATE();\n    case 182:\n      ACCEPT_TOKEN(anon_sym_AMP);\n      END_STATE();\n    case 183:\n      ACCEPT_TOKEN(anon_sym_AMP);\n      if (lookahead == '&') ADVANCE(173);\n      if (lookahead == '=') ADVANCE(162);\n      END_STATE();\n    case 184:\n      ACCEPT_TOKEN(anon_sym_AMP);\n      if (lookahead == '&') ADVANCE(172);\n      END_STATE();\n    case 185:\n      ACCEPT_TOKEN(anon_sym_CARET);\n      END_STATE();\n    case 186:\n      ACCEPT_TOKEN(anon_sym_CARET);\n      if (lookahead == '=') ADVANCE(161);\n      END_STATE();\n    case 187:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      END_STATE();\n    case 188:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '=') ADVANCE(163);\n      if (lookahead == '|') ADVANCE(175);\n      END_STATE();\n    case 189:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '=') ADVANCE(163);\n      if (lookahead == '|') ADVANCE(175);\n      if (lookahead == '}') ADVANCE(268);\n      END_STATE();\n    case 190:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '|') ADVANCE(174);\n      END_STATE();\n    case 191:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '|') ADVANCE(174);\n      if (lookahead == '}') ADVANCE(268);\n      END_STATE();\n    case 192:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '}') ADVANCE(268);\n      END_STATE();\n    case 193:\n      ACCEPT_TOKEN(anon_sym_PLUS);\n      END_STATE();\n    case 194:\n      ACCEPT_TOKEN(anon_sym_PLUS);\n      if (lookahead == '+') ADVANCE(213);\n      END_STATE();\n    case 195:\n      ACCEPT_TOKEN(anon_sym_PLUS);\n      if (lookahead == '+') ADVANCE(213);\n      if (lookahead == '=') ADVANCE(156);\n      END_STATE();\n    case 196:\n      ACCEPT_TOKEN(anon_sym_DASH);\n      END_STATE();\n    case 197:\n      ACCEPT_TOKEN(anon_sym_DASH);\n      if (lookahead == '-') ADVANCE(214);\n      END_STATE();\n    case 198:\n      ACCEPT_TOKEN(anon_sym_DASH);\n      if (lookahead == '-') ADVANCE(214);\n      if (lookahead == '=') ADVANCE(157);\n      END_STATE();\n    case 199:\n      ACCEPT_TOKEN(anon_sym_DASH);\n      if (lookahead == '-') ADVANCE(214);\n      if (lookahead == '=') ADVANCE(157);\n      if (lookahead == '>') ADVANCE(266);\n      if (lookahead == '?') ADVANCE(34);\n      END_STATE();\n    case 200:\n      ACCEPT_TOKEN(anon_sym_PERCENT);\n      END_STATE();\n    case 201:\n      ACCEPT_TOKEN(anon_sym_PERCENT);\n      if (lookahead == '=') ADVANCE(160);\n      END_STATE();\n    case 202:\n      ACCEPT_TOKEN(anon_sym_STAR_STAR);\n      END_STATE();\n    case 203:\n      ACCEPT_TOKEN(anon_sym_STAR_STAR);\n      if (lookahead == '=') ADVANCE(167);\n      END_STATE();\n    case 204:\n      ACCEPT_TOKEN(anon_sym_LT_EQ);\n      END_STATE();\n    case 205:\n      ACCEPT_TOKEN(anon_sym_EQ_EQ);\n      if (lookahead == '=') ADVANCE(206);\n      END_STATE();\n    case 206:\n      ACCEPT_TOKEN(anon_sym_EQ_EQ_EQ);\n      END_STATE();\n    case 207:\n      ACCEPT_TOKEN(anon_sym_BANG_EQ);\n      if (lookahead == '=') ADVANCE(208);\n      END_STATE();\n    case 208:\n      ACCEPT_TOKEN(anon_sym_BANG_EQ_EQ);\n      END_STATE();\n    case 209:\n      ACCEPT_TOKEN(anon_sym_GT_EQ);\n      END_STATE();\n    case 210:\n      ACCEPT_TOKEN(anon_sym_QMARK_QMARK);\n      END_STATE();\n    case 211:\n      ACCEPT_TOKEN(anon_sym_QMARK_QMARK);\n      if (lookahead == '=') ADVANCE(170);\n      END_STATE();\n    case 212:\n      ACCEPT_TOKEN(anon_sym_TILDE);\n      END_STATE();\n    case 213:\n      ACCEPT_TOKEN(anon_sym_PLUS_PLUS);\n      END_STATE();\n    case 214:\n      ACCEPT_TOKEN(anon_sym_DASH_DASH);\n      END_STATE();\n    case 215:\n      ACCEPT_TOKEN(anon_sym_DQUOTE);\n      END_STATE();\n    case 216:\n      ACCEPT_TOKEN(anon_sym_SQUOTE);\n      END_STATE();\n    case 217:\n      ACCEPT_TOKEN(sym_unescaped_double_string_fragment);\n      if (lookahead == '\\n') ADVANCE(222);\n      if (lookahead != 0 &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(217);\n      END_STATE();\n    case 218:\n      ACCEPT_TOKEN(sym_unescaped_double_string_fragment);\n      if (lookahead == '*') ADVANCE(220);\n      if (lookahead == '/') ADVANCE(217);\n      if (lookahead != 0 &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(222);\n      END_STATE();\n    case 219:\n      ACCEPT_TOKEN(sym_unescaped_double_string_fragment);\n      if (lookahead == '*') ADVANCE(219);\n      if (lookahead == '/') ADVANCE(222);\n      if (lookahead != 0 &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(220);\n      END_STATE();\n    case 220:\n      ACCEPT_TOKEN(sym_unescaped_double_string_fragment);\n      if (lookahead == '*') ADVANCE(219);\n      if (lookahead != 0 &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(220);\n      END_STATE();\n    case 221:\n      ACCEPT_TOKEN(sym_unescaped_double_string_fragment);\n      if (lookahead == '/') ADVANCE(218);\n      if (anon_sym_BANG_character_set_1(lookahead)) ADVANCE(221);\n      if (lookahead != 0 &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(222);\n      END_STATE();\n    case 222:\n      ACCEPT_TOKEN(sym_unescaped_double_string_fragment);\n      if (lookahead != 0 &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(222);\n      END_STATE();\n    case 223:\n      ACCEPT_TOKEN(sym_unescaped_single_string_fragment);\n      if (lookahead == '\\n') ADVANCE(228);\n      if (lookahead != 0 &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(223);\n      END_STATE();\n    case 224:\n      ACCEPT_TOKEN(sym_unescaped_single_string_fragment);\n      if (lookahead == '*') ADVANCE(226);\n      if (lookahead == '/') ADVANCE(223);\n      if (lookahead != 0 &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(228);\n      END_STATE();\n    case 225:\n      ACCEPT_TOKEN(sym_unescaped_single_string_fragment);\n      if (lookahead == '*') ADVANCE(225);\n      if (lookahead == '/') ADVANCE(228);\n      if (lookahead != 0 &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(226);\n      END_STATE();\n    case 226:\n      ACCEPT_TOKEN(sym_unescaped_single_string_fragment);\n      if (lookahead == '*') ADVANCE(225);\n      if (lookahead != 0 &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(226);\n      END_STATE();\n    case 227:\n      ACCEPT_TOKEN(sym_unescaped_single_string_fragment);\n      if (lookahead == '/') ADVANCE(224);\n      if (anon_sym_BANG_character_set_1(lookahead)) ADVANCE(227);\n      if (lookahead != 0 &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(228);\n      END_STATE();\n    case 228:\n      ACCEPT_TOKEN(sym_unescaped_single_string_fragment);\n      if (lookahead != 0 &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(228);\n      END_STATE();\n    case 229:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      END_STATE();\n    case 230:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 231:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(229);\n      END_STATE();\n    case 232:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(231);\n      END_STATE();\n    case 233:\n      ACCEPT_TOKEN(sym_comment);\n      END_STATE();\n    case 234:\n      ACCEPT_TOKEN(sym_comment);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(234);\n      END_STATE();\n    case 235:\n      ACCEPT_TOKEN(anon_sym_BQUOTE);\n      END_STATE();\n    case 236:\n      ACCEPT_TOKEN(anon_sym_DOLLAR_LBRACE);\n      END_STATE();\n    case 237:\n      ACCEPT_TOKEN(anon_sym_SLASH2);\n      if (lookahead == '*') ADVANCE(26);\n      if (lookahead == '/') ADVANCE(234);\n      END_STATE();\n    case 238:\n      ACCEPT_TOKEN(sym_regex_pattern);\n      if (lookahead == '\\n') SKIP(33)\n      if (lookahead == '/') ADVANCE(24);\n      if (lookahead == '[') ADVANCE(42);\n      if (lookahead == '\\\\') ADVANCE(102);\n      if (sym__glimmer_template_content_character_set_1(lookahead)) ADVANCE(238);\n      if (lookahead != 0) ADVANCE(239);\n      END_STATE();\n    case 239:\n      ACCEPT_TOKEN(sym_regex_pattern);\n      if (lookahead == '[') ADVANCE(42);\n      if (lookahead == '\\\\') ADVANCE(102);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '/') ADVANCE(239);\n      END_STATE();\n    case 240:\n      ACCEPT_TOKEN(sym_regex_flags);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(240);\n      if (!sym_identifier_character_set_2(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 241:\n      ACCEPT_TOKEN(sym_number);\n      END_STATE();\n    case 242:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '.') ADVANCE(252);\n      if (lookahead == '0') ADVANCE(247);\n      if (lookahead == 'B' ||\n          lookahead == 'b') ADVANCE(76);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(74);\n      if (lookahead == 'O' ||\n          lookahead == 'o') ADVANCE(77);\n      if (lookahead == 'X' ||\n          lookahead == 'x') ADVANCE(87);\n      if (lookahead == '_') ADVANCE(80);\n      if (lookahead == 'u') ADVANCE(241);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      END_STATE();\n    case 243:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '.') ADVANCE(252);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(74);\n      if (lookahead == '_') ADVANCE(78);\n      if (lookahead == 'u') ADVANCE(241);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(243);\n      END_STATE();\n    case 244:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(76);\n      if (lookahead == 'u') ADVANCE(241);\n      if (lookahead == '0' ||\n          lookahead == '1') ADVANCE(244);\n      END_STATE();\n    case 245:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(77);\n      if (lookahead == 'u') ADVANCE(241);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(245);\n      END_STATE();\n    case 246:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(87);\n      if (lookahead == 'u') ADVANCE(241);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(246);\n      END_STATE();\n    case 247:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(80);\n      if (lookahead == 'u') ADVANCE(241);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(247);\n      END_STATE();\n    case 248:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(82);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(248);\n      END_STATE();\n    case 249:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(83);\n      if (lookahead == 'a' ||\n          lookahead == 'b' ||\n          lookahead == 'g' ||\n          lookahead == 'r' ||\n          ('w' <= lookahead && lookahead <= 'z')) ADVANCE(253);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(249);\n      END_STATE();\n    case 250:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(74);\n      if (lookahead == '_') ADVANCE(79);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(250);\n      END_STATE();\n    case 251:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(75);\n      if (lookahead == '_') ADVANCE(81);\n      if (lookahead == 'a' ||\n          lookahead == 'b' ||\n          lookahead == 'g' ||\n          lookahead == 'r' ||\n          ('w' <= lookahead && lookahead <= 'z')) ADVANCE(253);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(251);\n      END_STATE();\n    case 252:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(75);\n      if (lookahead == 'a' ||\n          lookahead == 'b' ||\n          lookahead == 'g' ||\n          lookahead == 'r' ||\n          ('w' <= lookahead && lookahead <= 'z')) ADVANCE(253);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(251);\n      END_STATE();\n    case 253:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == 'a' ||\n          lookahead == 'b' ||\n          lookahead == 'g' ||\n          lookahead == 'r' ||\n          ('w' <= lookahead && lookahead <= 'z')) ADVANCE(253);\n      END_STATE();\n    case 254:\n      ACCEPT_TOKEN(sym_identifier);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == 'n') ADVANCE(150);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 255:\n      ACCEPT_TOKEN(sym_identifier);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == 'n') ADVANCE(151);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 256:\n      ACCEPT_TOKEN(sym_identifier);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (lookahead == '{') ADVANCE(236);\n      if (!sym_identifier_character_set_3(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 257:\n      ACCEPT_TOKEN(sym_identifier);\n      if (lookahead == '\\\\') ADVANCE(62);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(257);\n      END_STATE();\n    case 258:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == '\\\\') ADVANCE(61);\n      if (!sym_identifier_character_set_1(lookahead)) ADVANCE(258);\n      END_STATE();\n    case 259:\n      ACCEPT_TOKEN(anon_sym_AT);\n      END_STATE();\n    case 260:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      END_STATE();\n    case 261:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      if (lookahead == '.') ADVANCE(154);\n      END_STATE();\n    case 262:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      if (lookahead == '.') ADVANCE(154);\n      if (lookahead == '?') ADVANCE(211);\n      END_STATE();\n    case 263:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      if (lookahead == '.') ADVANCE(154);\n      if (lookahead == '?') ADVANCE(210);\n      END_STATE();\n    case 264:\n      ACCEPT_TOKEN(anon_sym_DASH_QMARK_COLON);\n      END_STATE();\n    case 265:\n      ACCEPT_TOKEN(anon_sym_QMARK_COLON);\n      END_STATE();\n    case 266:\n      ACCEPT_TOKEN(anon_sym_DASH_GT);\n      END_STATE();\n    case 267:\n      ACCEPT_TOKEN(anon_sym_LBRACE_PIPE);\n      END_STATE();\n    case 268:\n      ACCEPT_TOKEN(anon_sym_PIPE_RBRACE);\n      END_STATE();\n    default:\n      return false;\n  }\n}\n\nstatic bool ts_lex_keywords(TSLexer *lexer, TSStateId state) {\n  START_LEXER();\n  eof = lexer->eof(lexer);\n  switch (state) {\n    case 0:\n      if (lookahead == 'a') ADVANCE(1);\n      if (lookahead == 'b') ADVANCE(2);\n      if (lookahead == 'c') ADVANCE(3);\n      if (lookahead == 'd') ADVANCE(4);\n      if (lookahead == 'e') ADVANCE(5);\n      if (lookahead == 'f') ADVANCE(6);\n      if (lookahead == 'g') ADVANCE(7);\n      if (lookahead == 'i') ADVANCE(8);\n      if (lookahead == 'k') ADVANCE(9);\n      if (lookahead == 'l') ADVANCE(10);\n      if (lookahead == 'm') ADVANCE(11);\n      if (lookahead == 'n') ADVANCE(12);\n      if (lookahead == 'o') ADVANCE(13);\n      if (lookahead == 'p') ADVANCE(14);\n      if (lookahead == 'r') ADVANCE(15);\n      if (lookahead == 's') ADVANCE(16);\n      if (lookahead == 't') ADVANCE(17);\n      if (lookahead == 'u') ADVANCE(18);\n      if (lookahead == 'v') ADVANCE(19);\n      if (lookahead == 'w') ADVANCE(20);\n      if (lookahead == 'y') ADVANCE(21);\n      if (lookahead == '\\t' ||\n          lookahead == '\\n' ||\n          lookahead == '\\r' ||\n          lookahead == ' ' ||\n          lookahead == 160 ||\n          lookahead == 5760 ||\n          (8192 <= lookahead && lookahead <= 8203) ||\n          lookahead == 8239 ||\n          lookahead == 8287 ||\n          lookahead == 8288 ||\n          lookahead == 12288 ||\n          lookahead == 65279) SKIP(0)\n      END_STATE();\n    case 1:\n      if (lookahead == 'b') ADVANCE(22);\n      if (lookahead == 'n') ADVANCE(23);\n      if (lookahead == 's') ADVANCE(24);\n      if (lookahead == 'w') ADVANCE(25);\n      END_STATE();\n    case 2:\n      if (lookahead == 'o') ADVANCE(26);\n      if (lookahead == 'r') ADVANCE(27);\n      END_STATE();\n    case 3:\n      if (lookahead == 'a') ADVANCE(28);\n      if (lookahead == 'l') ADVANCE(29);\n      if (lookahead == 'o') ADVANCE(30);\n      END_STATE();\n    case 4:\n      if (lookahead == 'e') ADVANCE(31);\n      if (lookahead == 'o') ADVANCE(32);\n      END_STATE();\n    case 5:\n      if (lookahead == 'l') ADVANCE(33);\n      if (lookahead == 'n') ADVANCE(34);\n      if (lookahead == 'x') ADVANCE(35);\n      END_STATE();\n    case 6:\n      if (lookahead == 'a') ADVANCE(36);\n      if (lookahead == 'i') ADVANCE(37);\n      if (lookahead == 'l') ADVANCE(38);\n      if (lookahead == 'o') ADVANCE(39);\n      if (lookahead == 'r') ADVANCE(40);\n      END_STATE();\n    case 7:\n      if (lookahead == 'e') ADVANCE(41);\n      if (lookahead == 'l') ADVANCE(42);\n      END_STATE();\n    case 8:\n      if (lookahead == 'f') ADVANCE(43);\n      if (lookahead == 'm') ADVANCE(44);\n      if (lookahead == 'n') ADVANCE(45);\n      if (lookahead == 's') ADVANCE(46);\n      END_STATE();\n    case 9:\n      if (lookahead == 'e') ADVANCE(47);\n      END_STATE();\n    case 10:\n      if (lookahead == 'e') ADVANCE(48);\n      END_STATE();\n    case 11:\n      if (lookahead == 'o') ADVANCE(49);\n      END_STATE();\n    case 12:\n      if (lookahead == 'a') ADVANCE(50);\n      if (lookahead == 'e') ADVANCE(51);\n      if (lookahead == 'u') ADVANCE(52);\n      END_STATE();\n    case 13:\n      if (lookahead == 'b') ADVANCE(53);\n      if (lookahead == 'f') ADVANCE(54);\n      if (lookahead == 'v') ADVANCE(55);\n      END_STATE();\n    case 14:\n      if (lookahead == 'r') ADVANCE(56);\n      if (lookahead == 'u') ADVANCE(57);\n      END_STATE();\n    case 15:\n      if (lookahead == 'e') ADVANCE(58);\n      END_STATE();\n    case 16:\n      if (lookahead == 'a') ADVANCE(59);\n      if (lookahead == 'e') ADVANCE(60);\n      if (lookahead == 'h') ADVANCE(61);\n      if (lookahead == 't') ADVANCE(62);\n      if (lookahead == 'u') ADVANCE(63);\n      if (lookahead == 'w') ADVANCE(64);\n      if (lookahead == 'y') ADVANCE(65);\n      END_STATE();\n    case 17:\n      if (lookahead == 'a') ADVANCE(66);\n      if (lookahead == 'h') ADVANCE(67);\n      if (lookahead == 'r') ADVANCE(68);\n      if (lookahead == 'y') ADVANCE(69);\n      END_STATE();\n    case 18:\n      if (lookahead == 'n') ADVANCE(70);\n      END_STATE();\n    case 19:\n      if (lookahead == 'a') ADVANCE(71);\n      if (lookahead == 'o') ADVANCE(72);\n      END_STATE();\n    case 20:\n      if (lookahead == 'h') ADVANCE(73);\n      if (lookahead == 'i') ADVANCE(74);\n      if (lookahead == 'o') ADVANCE(75);\n      END_STATE();\n    case 21:\n      if (lookahead == 'i') ADVANCE(76);\n      END_STATE();\n    case 22:\n      if (lookahead == 's') ADVANCE(77);\n      END_STATE();\n    case 23:\n      if (lookahead == 'y') ADVANCE(78);\n      END_STATE();\n    case 24:\n      ACCEPT_TOKEN(anon_sym_as);\n      if (lookahead == 's') ADVANCE(79);\n      if (lookahead == 'y') ADVANCE(80);\n      END_STATE();\n    case 25:\n      if (lookahead == 'a') ADVANCE(81);\n      END_STATE();\n    case 26:\n      if (lookahead == 'o') ADVANCE(82);\n      END_STATE();\n    case 27:\n      if (lookahead == 'e') ADVANCE(83);\n      END_STATE();\n    case 28:\n      if (lookahead == 's') ADVANCE(84);\n      if (lookahead == 't') ADVANCE(85);\n      END_STATE();\n    case 29:\n      if (lookahead == 'a') ADVANCE(86);\n      END_STATE();\n    case 30:\n      if (lookahead == 'n') ADVANCE(87);\n      END_STATE();\n    case 31:\n      if (lookahead == 'b') ADVANCE(88);\n      if (lookahead == 'c') ADVANCE(89);\n      if (lookahead == 'f') ADVANCE(90);\n      if (lookahead == 'l') ADVANCE(91);\n      END_STATE();\n    case 32:\n      ACCEPT_TOKEN(anon_sym_do);\n      END_STATE();\n    case 33:\n      if (lookahead == 's') ADVANCE(92);\n      END_STATE();\n    case 34:\n      if (lookahead == 'u') ADVANCE(93);\n      END_STATE();\n    case 35:\n      if (lookahead == 'p') ADVANCE(94);\n      if (lookahead == 't') ADVANCE(95);\n      END_STATE();\n    case 36:\n      if (lookahead == 'l') ADVANCE(96);\n      END_STATE();\n    case 37:\n      if (lookahead == 'n') ADVANCE(97);\n      END_STATE();\n    case 38:\n      if (lookahead == 'o') ADVANCE(98);\n      END_STATE();\n    case 39:\n      if (lookahead == 'r') ADVANCE(99);\n      END_STATE();\n    case 40:\n      if (lookahead == 'o') ADVANCE(100);\n      END_STATE();\n    case 41:\n      if (lookahead == 't') ADVANCE(101);\n      END_STATE();\n    case 42:\n      if (lookahead == 'o') ADVANCE(102);\n      END_STATE();\n    case 43:\n      ACCEPT_TOKEN(anon_sym_if);\n      END_STATE();\n    case 44:\n      if (lookahead == 'p') ADVANCE(103);\n      END_STATE();\n    case 45:\n      ACCEPT_TOKEN(anon_sym_in);\n      if (lookahead == 'f') ADVANCE(104);\n      if (lookahead == 's') ADVANCE(105);\n      if (lookahead == 't') ADVANCE(106);\n      END_STATE();\n    case 46:\n      ACCEPT_TOKEN(anon_sym_is);\n      END_STATE();\n    case 47:\n      if (lookahead == 'y') ADVANCE(107);\n      END_STATE();\n    case 48:\n      if (lookahead == 't') ADVANCE(108);\n      END_STATE();\n    case 49:\n      if (lookahead == 'd') ADVANCE(109);\n      END_STATE();\n    case 50:\n      if (lookahead == 'm') ADVANCE(110);\n      END_STATE();\n    case 51:\n      if (lookahead == 'v') ADVANCE(111);\n      if (lookahead == 'w') ADVANCE(112);\n      END_STATE();\n    case 52:\n      if (lookahead == 'l') ADVANCE(113);\n      if (lookahead == 'm') ADVANCE(114);\n      END_STATE();\n    case 53:\n      if (lookahead == 'j') ADVANCE(115);\n      END_STATE();\n    case 54:\n      ACCEPT_TOKEN(anon_sym_of);\n      END_STATE();\n    case 55:\n      if (lookahead == 'e') ADVANCE(116);\n      END_STATE();\n    case 56:\n      if (lookahead == 'i') ADVANCE(117);\n      if (lookahead == 'o') ADVANCE(118);\n      END_STATE();\n    case 57:\n      if (lookahead == 'b') ADVANCE(119);\n      END_STATE();\n    case 58:\n      if (lookahead == 'a') ADVANCE(120);\n      if (lookahead == 'q') ADVANCE(121);\n      if (lookahead == 't') ADVANCE(122);\n      END_STATE();\n    case 59:\n      if (lookahead == 't') ADVANCE(123);\n      END_STATE();\n    case 60:\n      if (lookahead == 't') ADVANCE(124);\n      END_STATE();\n    case 61:\n      if (lookahead == 'a') ADVANCE(125);\n      END_STATE();\n    case 62:\n      if (lookahead == 'a') ADVANCE(126);\n      if (lookahead == 'r') ADVANCE(127);\n      END_STATE();\n    case 63:\n      if (lookahead == 'p') ADVANCE(128);\n      END_STATE();\n    case 64:\n      if (lookahead == 'i') ADVANCE(129);\n      END_STATE();\n    case 65:\n      if (lookahead == 'm') ADVANCE(130);\n      END_STATE();\n    case 66:\n      if (lookahead == 'r') ADVANCE(131);\n      END_STATE();\n    case 67:\n      if (lookahead == 'i') ADVANCE(132);\n      if (lookahead == 'r') ADVANCE(133);\n      END_STATE();\n    case 68:\n      if (lookahead == 'a') ADVANCE(134);\n      if (lookahead == 'u') ADVANCE(135);\n      if (lookahead == 'y') ADVANCE(136);\n      END_STATE();\n    case 69:\n      if (lookahead == 'p') ADVANCE(137);\n      END_STATE();\n    case 70:\n      if (lookahead == 'd') ADVANCE(138);\n      if (lookahead == 'k') ADVANCE(139);\n      END_STATE();\n    case 71:\n      if (lookahead == 'r') ADVANCE(140);\n      END_STATE();\n    case 72:\n      if (lookahead == 'i') ADVANCE(141);\n      END_STATE();\n    case 73:\n      if (lookahead == 'i') ADVANCE(142);\n      END_STATE();\n    case 74:\n      if (lookahead == 't') ADVANCE(143);\n      END_STATE();\n    case 75:\n      if (lookahead == 'r') ADVANCE(144);\n      END_STATE();\n    case 76:\n      if (lookahead == 'e') ADVANCE(145);\n      END_STATE();\n    case 77:\n      if (lookahead == 't') ADVANCE(146);\n      END_STATE();\n    case 78:\n      ACCEPT_TOKEN(anon_sym_any);\n      END_STATE();\n    case 79:\n      if (lookahead == 'e') ADVANCE(147);\n      END_STATE();\n    case 80:\n      if (lookahead == 'n') ADVANCE(148);\n      END_STATE();\n    case 81:\n      if (lookahead == 'i') ADVANCE(149);\n      END_STATE();\n    case 82:\n      if (lookahead == 'l') ADVANCE(150);\n      END_STATE();\n    case 83:\n      if (lookahead == 'a') ADVANCE(151);\n      END_STATE();\n    case 84:\n      if (lookahead == 'e') ADVANCE(152);\n      END_STATE();\n    case 85:\n      if (lookahead == 'c') ADVANCE(153);\n      END_STATE();\n    case 86:\n      if (lookahead == 's') ADVANCE(154);\n      END_STATE();\n    case 87:\n      if (lookahead == 's') ADVANCE(155);\n      if (lookahead == 't') ADVANCE(156);\n      END_STATE();\n    case 88:\n      if (lookahead == 'u') ADVANCE(157);\n      END_STATE();\n    case 89:\n      if (lookahead == 'l') ADVANCE(158);\n      END_STATE();\n    case 90:\n      if (lookahead == 'a') ADVANCE(159);\n      END_STATE();\n    case 91:\n      if (lookahead == 'e') ADVANCE(160);\n      END_STATE();\n    case 92:\n      if (lookahead == 'e') ADVANCE(161);\n      END_STATE();\n    case 93:\n      if (lookahead == 'm') ADVANCE(162);\n      END_STATE();\n    case 94:\n      if (lookahead == 'o') ADVANCE(163);\n      END_STATE();\n    case 95:\n      if (lookahead == 'e') ADVANCE(164);\n      END_STATE();\n    case 96:\n      if (lookahead == 's') ADVANCE(165);\n      END_STATE();\n    case 97:\n      if (lookahead == 'a') ADVANCE(166);\n      END_STATE();\n    case 98:\n      if (lookahead == 'a') ADVANCE(167);\n      END_STATE();\n    case 99:\n      ACCEPT_TOKEN(anon_sym_for);\n      END_STATE();\n    case 100:\n      if (lookahead == 'm') ADVANCE(168);\n      END_STATE();\n    case 101:\n      ACCEPT_TOKEN(anon_sym_get);\n      END_STATE();\n    case 102:\n      if (lookahead == 'b') ADVANCE(169);\n      END_STATE();\n    case 103:\n      if (lookahead == 'l') ADVANCE(170);\n      if (lookahead == 'o') ADVANCE(171);\n      END_STATE();\n    case 104:\n      if (lookahead == 'e') ADVANCE(172);\n      END_STATE();\n    case 105:\n      if (lookahead == 't') ADVANCE(173);\n      END_STATE();\n    case 106:\n      ACCEPT_TOKEN(anon_sym_int);\n      if (lookahead == '2') ADVANCE(174);\n      if (lookahead == '3') ADVANCE(175);\n      if (lookahead == '4') ADVANCE(176);\n      END_STATE();\n    case 107:\n      if (lookahead == 'o') ADVANCE(177);\n      END_STATE();\n    case 108:\n      ACCEPT_TOKEN(anon_sym_let);\n      END_STATE();\n    case 109:\n      if (lookahead == 'u') ADVANCE(178);\n      END_STATE();\n    case 110:\n      if (lookahead == 'e') ADVANCE(179);\n      END_STATE();\n    case 111:\n      if (lookahead == 'e') ADVANCE(180);\n      END_STATE();\n    case 112:\n      ACCEPT_TOKEN(anon_sym_new);\n      END_STATE();\n    case 113:\n      if (lookahead == 'l') ADVANCE(181);\n      END_STATE();\n    case 114:\n      if (lookahead == 'b') ADVANCE(182);\n      END_STATE();\n    case 115:\n      if (lookahead == 'e') ADVANCE(183);\n      END_STATE();\n    case 116:\n      if (lookahead == 'r') ADVANCE(184);\n      END_STATE();\n    case 117:\n      if (lookahead == 'v') ADVANCE(185);\n      END_STATE();\n    case 118:\n      if (lookahead == 't') ADVANCE(186);\n      END_STATE();\n    case 119:\n      ACCEPT_TOKEN(anon_sym_pub);\n      if (lookahead == 'l') ADVANCE(187);\n      END_STATE();\n    case 120:\n      if (lookahead == 'd') ADVANCE(188);\n      END_STATE();\n    case 121:\n      if (lookahead == 'u') ADVANCE(189);\n      END_STATE();\n    case 122:\n      if (lookahead == 'u') ADVANCE(190);\n      END_STATE();\n    case 123:\n      if (lookahead == 'i') ADVANCE(191);\n      END_STATE();\n    case 124:\n      ACCEPT_TOKEN(anon_sym_set);\n      END_STATE();\n    case 125:\n      if (lookahead == 'd') ADVANCE(192);\n      END_STATE();\n    case 126:\n      if (lookahead == 't') ADVANCE(193);\n      END_STATE();\n    case 127:\n      if (lookahead == 'i') ADVANCE(194);\n      if (lookahead == 'u') ADVANCE(195);\n      END_STATE();\n    case 128:\n      if (lookahead == 'e') ADVANCE(196);\n      END_STATE();\n    case 129:\n      if (lookahead == 't') ADVANCE(197);\n      END_STATE();\n    case 130:\n      if (lookahead == 'b') ADVANCE(198);\n      END_STATE();\n    case 131:\n      if (lookahead == 'g') ADVANCE(199);\n      END_STATE();\n    case 132:\n      if (lookahead == 's') ADVANCE(200);\n      END_STATE();\n    case 133:\n      if (lookahead == 'o') ADVANCE(201);\n      END_STATE();\n    case 134:\n      if (lookahead == 'i') ADVANCE(202);\n      END_STATE();\n    case 135:\n      if (lookahead == 'e') ADVANCE(203);\n      END_STATE();\n    case 136:\n      ACCEPT_TOKEN(anon_sym_try);\n      END_STATE();\n    case 137:\n      if (lookahead == 'e') ADVANCE(204);\n      END_STATE();\n    case 138:\n      if (lookahead == 'e') ADVANCE(205);\n      END_STATE();\n    case 139:\n      if (lookahead == 'n') ADVANCE(206);\n      END_STATE();\n    case 140:\n      ACCEPT_TOKEN(anon_sym_var);\n      END_STATE();\n    case 141:\n      if (lookahead == 'd') ADVANCE(207);\n      END_STATE();\n    case 142:\n      if (lookahead == 'l') ADVANCE(208);\n      END_STATE();\n    case 143:\n      if (lookahead == 'h') ADVANCE(209);\n      END_STATE();\n    case 144:\n      if (lookahead == 'k') ADVANCE(210);\n      END_STATE();\n    case 145:\n      if (lookahead == 'l') ADVANCE(211);\n      END_STATE();\n    case 146:\n      if (lookahead == 'r') ADVANCE(212);\n      END_STATE();\n    case 147:\n      if (lookahead == 'r') ADVANCE(213);\n      END_STATE();\n    case 148:\n      if (lookahead == 'c') ADVANCE(214);\n      END_STATE();\n    case 149:\n      if (lookahead == 't') ADVANCE(215);\n      END_STATE();\n    case 150:\n      if (lookahead == 'e') ADVANCE(216);\n      END_STATE();\n    case 151:\n      if (lookahead == 'k') ADVANCE(217);\n      END_STATE();\n    case 152:\n      ACCEPT_TOKEN(anon_sym_case);\n      END_STATE();\n    case 153:\n      if (lookahead == 'h') ADVANCE(218);\n      END_STATE();\n    case 154:\n      if (lookahead == 's') ADVANCE(219);\n      END_STATE();\n    case 155:\n      if (lookahead == 't') ADVANCE(220);\n      END_STATE();\n    case 156:\n      if (lookahead == 'i') ADVANCE(221);\n      END_STATE();\n    case 157:\n      if (lookahead == 'g') ADVANCE(222);\n      END_STATE();\n    case 158:\n      if (lookahead == 'a') ADVANCE(223);\n      END_STATE();\n    case 159:\n      if (lookahead == 'u') ADVANCE(224);\n      END_STATE();\n    case 160:\n      if (lookahead == 't') ADVANCE(225);\n      END_STATE();\n    case 161:\n      ACCEPT_TOKEN(anon_sym_else);\n      END_STATE();\n    case 162:\n      ACCEPT_TOKEN(anon_sym_enum);\n      END_STATE();\n    case 163:\n      if (lookahead == 'r') ADVANCE(226);\n      END_STATE();\n    case 164:\n      if (lookahead == 'n') ADVANCE(227);\n      END_STATE();\n    case 165:\n      if (lookahead == 'e') ADVANCE(228);\n      END_STATE();\n    case 166:\n      if (lookahead == 'l') ADVANCE(229);\n      END_STATE();\n    case 167:\n      if (lookahead == 't') ADVANCE(230);\n      END_STATE();\n    case 168:\n      ACCEPT_TOKEN(anon_sym_from);\n      END_STATE();\n    case 169:\n      if (lookahead == 'a') ADVANCE(231);\n      END_STATE();\n    case 170:\n      ACCEPT_TOKEN(anon_sym_impl);\n      if (lookahead == 'e') ADVANCE(232);\n      END_STATE();\n    case 171:\n      if (lookahead == 'r') ADVANCE(233);\n      END_STATE();\n    case 172:\n      if (lookahead == 'r') ADVANCE(234);\n      END_STATE();\n    case 173:\n      if (lookahead == 'a') ADVANCE(235);\n      END_STATE();\n    case 174:\n      ACCEPT_TOKEN(anon_sym_int2);\n      if (lookahead == 'x') ADVANCE(236);\n      END_STATE();\n    case 175:\n      ACCEPT_TOKEN(anon_sym_int3);\n      if (lookahead == 'x') ADVANCE(237);\n      END_STATE();\n    case 176:\n      ACCEPT_TOKEN(anon_sym_int4);\n      if (lookahead == 'x') ADVANCE(238);\n      END_STATE();\n    case 177:\n      if (lookahead == 'f') ADVANCE(239);\n      END_STATE();\n    case 178:\n      if (lookahead == 'l') ADVANCE(240);\n      END_STATE();\n    case 179:\n      if (lookahead == 's') ADVANCE(241);\n      END_STATE();\n    case 180:\n      if (lookahead == 'r') ADVANCE(242);\n      END_STATE();\n    case 181:\n      ACCEPT_TOKEN(sym_null);\n      END_STATE();\n    case 182:\n      if (lookahead == 'e') ADVANCE(243);\n      END_STATE();\n    case 183:\n      if (lookahead == 'c') ADVANCE(244);\n      END_STATE();\n    case 184:\n      if (lookahead == 'r') ADVANCE(245);\n      END_STATE();\n    case 185:\n      if (lookahead == 'a') ADVANCE(246);\n      END_STATE();\n    case 186:\n      if (lookahead == 'e') ADVANCE(247);\n      END_STATE();\n    case 187:\n      if (lookahead == 'i') ADVANCE(248);\n      END_STATE();\n    case 188:\n      if (lookahead == 'o') ADVANCE(249);\n      END_STATE();\n    case 189:\n      if (lookahead == 'i') ADVANCE(250);\n      END_STATE();\n    case 190:\n      if (lookahead == 'r') ADVANCE(251);\n      END_STATE();\n    case 191:\n      if (lookahead == 's') ADVANCE(252);\n      END_STATE();\n    case 192:\n      if (lookahead == 'e') ADVANCE(253);\n      END_STATE();\n    case 193:\n      if (lookahead == 'i') ADVANCE(254);\n      END_STATE();\n    case 194:\n      if (lookahead == 'n') ADVANCE(255);\n      END_STATE();\n    case 195:\n      if (lookahead == 'c') ADVANCE(256);\n      END_STATE();\n    case 196:\n      if (lookahead == 'r') ADVANCE(257);\n      END_STATE();\n    case 197:\n      if (lookahead == 'c') ADVANCE(258);\n      END_STATE();\n    case 198:\n      if (lookahead == 'o') ADVANCE(259);\n      END_STATE();\n    case 199:\n      if (lookahead == 'e') ADVANCE(260);\n      END_STATE();\n    case 200:\n      ACCEPT_TOKEN(sym_this);\n      END_STATE();\n    case 201:\n      if (lookahead == 'w') ADVANCE(261);\n      END_STATE();\n    case 202:\n      if (lookahead == 't') ADVANCE(262);\n      END_STATE();\n    case 203:\n      ACCEPT_TOKEN(sym_true);\n      END_STATE();\n    case 204:\n      ACCEPT_TOKEN(anon_sym_type);\n      if (lookahead == 'o') ADVANCE(263);\n      END_STATE();\n    case 205:\n      if (lookahead == 'f') ADVANCE(264);\n      END_STATE();\n    case 206:\n      if (lookahead == 'o') ADVANCE(265);\n      END_STATE();\n    case 207:\n      ACCEPT_TOKEN(anon_sym_void);\n      END_STATE();\n    case 208:\n      if (lookahead == 'e') ADVANCE(266);\n      END_STATE();\n    case 209:\n      ACCEPT_TOKEN(anon_sym_with);\n      END_STATE();\n    case 210:\n      if (lookahead == 'g') ADVANCE(267);\n      END_STATE();\n    case 211:\n      if (lookahead == 'd') ADVANCE(268);\n      END_STATE();\n    case 212:\n      if (lookahead == 'a') ADVANCE(269);\n      END_STATE();\n    case 213:\n      if (lookahead == 't') ADVANCE(270);\n      END_STATE();\n    case 214:\n      ACCEPT_TOKEN(anon_sym_async);\n      END_STATE();\n    case 215:\n      ACCEPT_TOKEN(anon_sym_await);\n      END_STATE();\n    case 216:\n      if (lookahead == 'a') ADVANCE(271);\n      END_STATE();\n    case 217:\n      ACCEPT_TOKEN(anon_sym_break);\n      END_STATE();\n    case 218:\n      ACCEPT_TOKEN(anon_sym_catch);\n      END_STATE();\n    case 219:\n      ACCEPT_TOKEN(anon_sym_class);\n      END_STATE();\n    case 220:\n      ACCEPT_TOKEN(anon_sym_const);\n      END_STATE();\n    case 221:\n      if (lookahead == 'n') ADVANCE(272);\n      END_STATE();\n    case 222:\n      if (lookahead == 'g') ADVANCE(273);\n      END_STATE();\n    case 223:\n      if (lookahead == 'r') ADVANCE(274);\n      END_STATE();\n    case 224:\n      if (lookahead == 'l') ADVANCE(275);\n      END_STATE();\n    case 225:\n      if (lookahead == 'e') ADVANCE(276);\n      END_STATE();\n    case 226:\n      if (lookahead == 't') ADVANCE(277);\n      END_STATE();\n    case 227:\n      if (lookahead == 'd') ADVANCE(278);\n      END_STATE();\n    case 228:\n      ACCEPT_TOKEN(sym_false);\n      END_STATE();\n    case 229:\n      if (lookahead == 'l') ADVANCE(279);\n      END_STATE();\n    case 230:\n      ACCEPT_TOKEN(anon_sym_float);\n      if (lookahead == '2') ADVANCE(280);\n      if (lookahead == '3') ADVANCE(281);\n      if (lookahead == '4') ADVANCE(282);\n      END_STATE();\n    case 231:\n      if (lookahead == 'l') ADVANCE(283);\n      END_STATE();\n    case 232:\n      if (lookahead == 'm') ADVANCE(284);\n      END_STATE();\n    case 233:\n      if (lookahead == 't') ADVANCE(285);\n      END_STATE();\n    case 234:\n      ACCEPT_TOKEN(anon_sym_infer);\n      END_STATE();\n    case 235:\n      if (lookahead == 'n') ADVANCE(286);\n      END_STATE();\n    case 236:\n      if (lookahead == '2') ADVANCE(287);\n      END_STATE();\n    case 237:\n      if (lookahead == '3') ADVANCE(288);\n      END_STATE();\n    case 238:\n      if (lookahead == '4') ADVANCE(289);\n      END_STATE();\n    case 239:\n      ACCEPT_TOKEN(anon_sym_keyof);\n      END_STATE();\n    case 240:\n      if (lookahead == 'e') ADVANCE(290);\n      END_STATE();\n    case 241:\n      if (lookahead == 'p') ADVANCE(291);\n      END_STATE();\n    case 242:\n      ACCEPT_TOKEN(anon_sym_never);\n      END_STATE();\n    case 243:\n      if (lookahead == 'r') ADVANCE(292);\n      END_STATE();\n    case 244:\n      if (lookahead == 't') ADVANCE(293);\n      END_STATE();\n    case 245:\n      if (lookahead == 'i') ADVANCE(294);\n      END_STATE();\n    case 246:\n      if (lookahead == 't') ADVANCE(295);\n      END_STATE();\n    case 247:\n      if (lookahead == 'c') ADVANCE(296);\n      END_STATE();\n    case 248:\n      if (lookahead == 'c') ADVANCE(297);\n      END_STATE();\n    case 249:\n      if (lookahead == 'n') ADVANCE(298);\n      END_STATE();\n    case 250:\n      if (lookahead == 'r') ADVANCE(299);\n      END_STATE();\n    case 251:\n      if (lookahead == 'n') ADVANCE(300);\n      END_STATE();\n    case 252:\n      if (lookahead == 'f') ADVANCE(301);\n      END_STATE();\n    case 253:\n      if (lookahead == 'r') ADVANCE(302);\n      END_STATE();\n    case 254:\n      if (lookahead == 'c') ADVANCE(303);\n      END_STATE();\n    case 255:\n      if (lookahead == 'g') ADVANCE(304);\n      END_STATE();\n    case 256:\n      if (lookahead == 't') ADVANCE(305);\n      END_STATE();\n    case 257:\n      ACCEPT_TOKEN(sym_super);\n      END_STATE();\n    case 258:\n      if (lookahead == 'h') ADVANCE(306);\n      END_STATE();\n    case 259:\n      if (lookahead == 'l') ADVANCE(307);\n      END_STATE();\n    case 260:\n      if (lookahead == 't') ADVANCE(308);\n      END_STATE();\n    case 261:\n      ACCEPT_TOKEN(anon_sym_throw);\n      END_STATE();\n    case 262:\n      ACCEPT_TOKEN(anon_sym_trait);\n      END_STATE();\n    case 263:\n      if (lookahead == 'f') ADVANCE(309);\n      END_STATE();\n    case 264:\n      if (lookahead == 'i') ADVANCE(310);\n      END_STATE();\n    case 265:\n      if (lookahead == 'w') ADVANCE(311);\n      END_STATE();\n    case 266:\n      ACCEPT_TOKEN(anon_sym_while);\n      END_STATE();\n    case 267:\n      if (lookahead == 'r') ADVANCE(312);\n      END_STATE();\n    case 268:\n      ACCEPT_TOKEN(anon_sym_yield);\n      END_STATE();\n    case 269:\n      if (lookahead == 'c') ADVANCE(313);\n      END_STATE();\n    case 270:\n      if (lookahead == 's') ADVANCE(314);\n      END_STATE();\n    case 271:\n      if (lookahead == 'n') ADVANCE(315);\n      END_STATE();\n    case 272:\n      if (lookahead == 'u') ADVANCE(316);\n      END_STATE();\n    case 273:\n      if (lookahead == 'e') ADVANCE(317);\n      END_STATE();\n    case 274:\n      if (lookahead == 'e') ADVANCE(318);\n      END_STATE();\n    case 275:\n      if (lookahead == 't') ADVANCE(319);\n      END_STATE();\n    case 276:\n      ACCEPT_TOKEN(anon_sym_delete);\n      END_STATE();\n    case 277:\n      ACCEPT_TOKEN(anon_sym_export);\n      END_STATE();\n    case 278:\n      if (lookahead == 's') ADVANCE(320);\n      END_STATE();\n    case 279:\n      if (lookahead == 'y') ADVANCE(321);\n      END_STATE();\n    case 280:\n      ACCEPT_TOKEN(anon_sym_float2);\n      if (lookahead == 'x') ADVANCE(322);\n      END_STATE();\n    case 281:\n      ACCEPT_TOKEN(anon_sym_float3);\n      if (lookahead == 'x') ADVANCE(323);\n      END_STATE();\n    case 282:\n      ACCEPT_TOKEN(anon_sym_float4);\n      if (lookahead == 'x') ADVANCE(324);\n      END_STATE();\n    case 283:\n      ACCEPT_TOKEN(anon_sym_global);\n      END_STATE();\n    case 284:\n      if (lookahead == 'e') ADVANCE(325);\n      END_STATE();\n    case 285:\n      ACCEPT_TOKEN(anon_sym_import);\n      END_STATE();\n    case 286:\n      if (lookahead == 'c') ADVANCE(326);\n      END_STATE();\n    case 287:\n      ACCEPT_TOKEN(anon_sym_int2x2);\n      END_STATE();\n    case 288:\n      ACCEPT_TOKEN(anon_sym_int3x3);\n      END_STATE();\n    case 289:\n      ACCEPT_TOKEN(anon_sym_int4x4);\n      END_STATE();\n    case 290:\n      ACCEPT_TOKEN(anon_sym_module);\n      END_STATE();\n    case 291:\n      if (lookahead == 'a') ADVANCE(327);\n      END_STATE();\n    case 292:\n      ACCEPT_TOKEN(anon_sym_number);\n      END_STATE();\n    case 293:\n      ACCEPT_TOKEN(anon_sym_object);\n      END_STATE();\n    case 294:\n      if (lookahead == 'd') ADVANCE(328);\n      END_STATE();\n    case 295:\n      if (lookahead == 'e') ADVANCE(329);\n      END_STATE();\n    case 296:\n      if (lookahead == 't') ADVANCE(330);\n      END_STATE();\n    case 297:\n      ACCEPT_TOKEN(anon_sym_public);\n      END_STATE();\n    case 298:\n      if (lookahead == 'l') ADVANCE(331);\n      END_STATE();\n    case 299:\n      if (lookahead == 'e') ADVANCE(332);\n      END_STATE();\n    case 300:\n      ACCEPT_TOKEN(anon_sym_return);\n      END_STATE();\n    case 301:\n      if (lookahead == 'i') ADVANCE(333);\n      END_STATE();\n    case 302:\n      ACCEPT_TOKEN(anon_sym_shader);\n      END_STATE();\n    case 303:\n      ACCEPT_TOKEN(anon_sym_static);\n      END_STATE();\n    case 304:\n      ACCEPT_TOKEN(anon_sym_string);\n      END_STATE();\n    case 305:\n      ACCEPT_TOKEN(anon_sym_struct);\n      END_STATE();\n    case 306:\n      ACCEPT_TOKEN(anon_sym_switch);\n      END_STATE();\n    case 307:\n      ACCEPT_TOKEN(anon_sym_symbol);\n      END_STATE();\n    case 308:\n      ACCEPT_TOKEN(anon_sym_target);\n      END_STATE();\n    case 309:\n      ACCEPT_TOKEN(anon_sym_typeof);\n      END_STATE();\n    case 310:\n      if (lookahead == 'n') ADVANCE(334);\n      END_STATE();\n    case 311:\n      if (lookahead == 'n') ADVANCE(335);\n      END_STATE();\n    case 312:\n      if (lookahead == 'o') ADVANCE(336);\n      END_STATE();\n    case 313:\n      if (lookahead == 't') ADVANCE(337);\n      END_STATE();\n    case 314:\n      ACCEPT_TOKEN(anon_sym_asserts);\n      END_STATE();\n    case 315:\n      ACCEPT_TOKEN(anon_sym_boolean);\n      END_STATE();\n    case 316:\n      if (lookahead == 'e') ADVANCE(338);\n      END_STATE();\n    case 317:\n      if (lookahead == 'r') ADVANCE(339);\n      END_STATE();\n    case 318:\n      ACCEPT_TOKEN(anon_sym_declare);\n      END_STATE();\n    case 319:\n      ACCEPT_TOKEN(anon_sym_default);\n      END_STATE();\n    case 320:\n      ACCEPT_TOKEN(anon_sym_extends);\n      END_STATE();\n    case 321:\n      ACCEPT_TOKEN(anon_sym_finally);\n      END_STATE();\n    case 322:\n      if (lookahead == '2') ADVANCE(340);\n      END_STATE();\n    case 323:\n      if (lookahead == '3') ADVANCE(341);\n      END_STATE();\n    case 324:\n      if (lookahead == '4') ADVANCE(342);\n      END_STATE();\n    case 325:\n      if (lookahead == 'n') ADVANCE(343);\n      END_STATE();\n    case 326:\n      if (lookahead == 'e') ADVANCE(344);\n      END_STATE();\n    case 327:\n      if (lookahead == 'c') ADVANCE(345);\n      END_STATE();\n    case 328:\n      if (lookahead == 'e') ADVANCE(346);\n      END_STATE();\n    case 329:\n      ACCEPT_TOKEN(anon_sym_private);\n      END_STATE();\n    case 330:\n      if (lookahead == 'e') ADVANCE(347);\n      END_STATE();\n    case 331:\n      if (lookahead == 'y') ADVANCE(348);\n      END_STATE();\n    case 332:\n      ACCEPT_TOKEN(anon_sym_require);\n      END_STATE();\n    case 333:\n      if (lookahead == 'e') ADVANCE(349);\n      END_STATE();\n    case 334:\n      if (lookahead == 'e') ADVANCE(350);\n      END_STATE();\n    case 335:\n      ACCEPT_TOKEN(anon_sym_unknown);\n      END_STATE();\n    case 336:\n      if (lookahead == 'u') ADVANCE(351);\n      END_STATE();\n    case 337:\n      ACCEPT_TOKEN(anon_sym_abstract);\n      END_STATE();\n    case 338:\n      ACCEPT_TOKEN(anon_sym_continue);\n      END_STATE();\n    case 339:\n      ACCEPT_TOKEN(anon_sym_debugger);\n      END_STATE();\n    case 340:\n      ACCEPT_TOKEN(anon_sym_float2x2);\n      END_STATE();\n    case 341:\n      ACCEPT_TOKEN(anon_sym_float3x3);\n      END_STATE();\n    case 342:\n      ACCEPT_TOKEN(anon_sym_float4x4);\n      END_STATE();\n    case 343:\n      if (lookahead == 't') ADVANCE(352);\n      END_STATE();\n    case 344:\n      if (lookahead == 'o') ADVANCE(353);\n      END_STATE();\n    case 345:\n      if (lookahead == 'e') ADVANCE(354);\n      END_STATE();\n    case 346:\n      ACCEPT_TOKEN(anon_sym_override);\n      END_STATE();\n    case 347:\n      if (lookahead == 'd') ADVANCE(355);\n      END_STATE();\n    case 348:\n      ACCEPT_TOKEN(anon_sym_readonly);\n      END_STATE();\n    case 349:\n      if (lookahead == 's') ADVANCE(356);\n      END_STATE();\n    case 350:\n      if (lookahead == 'd') ADVANCE(357);\n      END_STATE();\n    case 351:\n      if (lookahead == 'p') ADVANCE(358);\n      END_STATE();\n    case 352:\n      if (lookahead == 's') ADVANCE(359);\n      END_STATE();\n    case 353:\n      if (lookahead == 'f') ADVANCE(360);\n      END_STATE();\n    case 354:\n      ACCEPT_TOKEN(anon_sym_namespace);\n      END_STATE();\n    case 355:\n      ACCEPT_TOKEN(anon_sym_protected);\n      END_STATE();\n    case 356:\n      ACCEPT_TOKEN(anon_sym_satisfies);\n      END_STATE();\n    case 357:\n      ACCEPT_TOKEN(sym_undefined);\n      END_STATE();\n    case 358:\n      ACCEPT_TOKEN(anon_sym_workgroup);\n      END_STATE();\n    case 359:\n      ACCEPT_TOKEN(anon_sym_implements);\n      END_STATE();\n    case 360:\n      ACCEPT_TOKEN(anon_sym_instanceof);\n      END_STATE();\n    default:\n      return false;\n  }\n}\n\nstatic const TSLexMode ts_lex_modes[STATE_COUNT] = {\n  [0] = {.lex_state = 0, .external_lex_state = 1},\n  [1] = {.lex_state = 105},\n  [2] = {.lex_state = 5, .external_lex_state = 2},\n  [3] = {.lex_state = 5, .external_lex_state = 2},\n  [4] = {.lex_state = 105},\n  [5] = {.lex_state = 105},\n  [6] = {.lex_state = 105},\n  [7] = {.lex_state = 105},\n  [8] = {.lex_state = 105},\n  [9] = {.lex_state = 105},\n  [10] = {.lex_state = 105},\n  [11] = {.lex_state = 105},\n  [12] = {.lex_state = 105},\n  [13] = {.lex_state = 105},\n  [14] = {.lex_state = 105},\n  [15] = {.lex_state = 105},\n  [16] = {.lex_state = 105},\n  [17] = {.lex_state = 105},\n  [18] = {.lex_state = 105},\n  [19] = {.lex_state = 105},\n  [20] = {.lex_state = 105},\n  [21] = {.lex_state = 105},\n  [22] = {.lex_state = 105},\n  [23] = {.lex_state = 105},\n  [24] = {.lex_state = 105},\n  [25] = {.lex_state = 105},\n  [26] = {.lex_state = 105},\n  [27] = {.lex_state = 105},\n  [28] = {.lex_state = 105},\n  [29] = {.lex_state = 105},\n  [30] = {.lex_state = 105},\n  [31] = {.lex_state = 105},\n  [32] = {.lex_state = 105},\n  [33] = {.lex_state = 105},\n  [34] = {.lex_state = 105},\n  [35] = {.lex_state = 105},\n  [36] = {.lex_state = 105},\n  [37] = {.lex_state = 105},\n  [38] = {.lex_state = 105},\n  [39] = {.lex_state = 105},\n  [40] = {.lex_state = 105},\n  [41] = {.lex_state = 105},\n  [42] = {.lex_state = 105},\n  [43] = {.lex_state = 105},\n  [44] = {.lex_state = 105},\n  [45] = {.lex_state = 105},\n  [46] = {.lex_state = 105},\n  [47] = {.lex_state = 105},\n  [48] = {.lex_state = 105},\n  [49] = {.lex_state = 105},\n  [50] = {.lex_state = 105},\n  [51] = {.lex_state = 105},\n  [52] = {.lex_state = 6, .external_lex_state = 2},\n  [53] = {.lex_state = 6, .external_lex_state = 2},\n  [54] = {.lex_state = 6, .external_lex_state = 2},\n  [55] = {.lex_state = 6, .external_lex_state = 2},\n  [56] = {.lex_state = 6, .external_lex_state = 2},\n  [57] = {.lex_state = 6, .external_lex_state = 2},\n  [58] = {.lex_state = 6, .external_lex_state = 2},\n  [59] = {.lex_state = 6, .external_lex_state = 2},\n  [60] = {.lex_state = 16},\n  [61] = {.lex_state = 16},\n  [62] = {.lex_state = 16},\n  [63] = {.lex_state = 16},\n  [64] = {.lex_state = 16},\n  [65] = {.lex_state = 16},\n  [66] = {.lex_state = 16},\n  [67] = {.lex_state = 16},\n  [68] = {.lex_state = 16},\n  [69] = {.lex_state = 16},\n  [70] = {.lex_state = 16},\n  [71] = {.lex_state = 16},\n  [72] = {.lex_state = 16},\n  [73] = {.lex_state = 16},\n  [74] = {.lex_state = 16},\n  [75] = {.lex_state = 16},\n  [76] = {.lex_state = 16},\n  [77] = {.lex_state = 16},\n  [78] = {.lex_state = 16},\n  [79] = {.lex_state = 16},\n  [80] = {.lex_state = 16},\n  [81] = {.lex_state = 16},\n  [82] = {.lex_state = 16},\n  [83] = {.lex_state = 16},\n  [84] = {.lex_state = 16},\n  [85] = {.lex_state = 16},\n  [86] = {.lex_state = 16},\n  [87] = {.lex_state = 16},\n  [88] = {.lex_state = 16},\n  [89] = {.lex_state = 104, .external_lex_state = 2},\n  [90] = {.lex_state = 104, .external_lex_state = 3},\n  [91] = {.lex_state = 104, .external_lex_state = 3},\n  [92] = {.lex_state = 104, .external_lex_state = 3},\n  [93] = {.lex_state = 104, .external_lex_state = 2},\n  [94] = {.lex_state = 104, .external_lex_state = 2},\n  [95] = {.lex_state = 104, .external_lex_state = 2},\n  [96] = {.lex_state = 3, .external_lex_state = 2},\n  [97] = {.lex_state = 105},\n  [98] = {.lex_state = 3, .external_lex_state = 3},\n  [99] = {.lex_state = 105},\n  [100] = {.lex_state = 3, .external_lex_state = 3},\n  [101] = {.lex_state = 105},\n  [102] = {.lex_state = 105},\n  [103] = {.lex_state = 105},\n  [104] = {.lex_state = 105},\n  [105] = {.lex_state = 105},\n  [106] = {.lex_state = 105},\n  [107] = {.lex_state = 105},\n  [108] = {.lex_state = 105},\n  [109] = {.lex_state = 3, .external_lex_state = 2},\n  [110] = {.lex_state = 105},\n  [111] = {.lex_state = 105},\n  [112] = {.lex_state = 105},\n  [113] = {.lex_state = 3, .external_lex_state = 2},\n  [114] = {.lex_state = 3, .external_lex_state = 3},\n  [115] = {.lex_state = 3, .external_lex_state = 2},\n  [116] = {.lex_state = 3, .external_lex_state = 2},\n  [117] = {.lex_state = 105},\n  [118] = {.lex_state = 3, .external_lex_state = 2},\n  [119] = {.lex_state = 3, .external_lex_state = 2},\n  [120] = {.lex_state = 104, .external_lex_state = 3},\n  [121] = {.lex_state = 104, .external_lex_state = 3},\n  [122] = {.lex_state = 3, .external_lex_state = 2},\n  [123] = {.lex_state = 104, .external_lex_state = 3},\n  [124] = {.lex_state = 104, .external_lex_state = 3},\n  [125] = {.lex_state = 104, .external_lex_state = 3},\n  [126] = {.lex_state = 104, .external_lex_state = 3},\n  [127] = {.lex_state = 104, .external_lex_state = 3},\n  [128] = {.lex_state = 104, .external_lex_state = 3},\n  [129] = {.lex_state = 104, .external_lex_state = 3},\n  [130] = {.lex_state = 104, .external_lex_state = 3},\n  [131] = {.lex_state = 104, .external_lex_state = 3},\n  [132] = {.lex_state = 104, .external_lex_state = 3},\n  [133] = {.lex_state = 3, .external_lex_state = 2},\n  [134] = {.lex_state = 104, .external_lex_state = 3},\n  [135] = {.lex_state = 104, .external_lex_state = 3},\n  [136] = {.lex_state = 104, .external_lex_state = 3},\n  [137] = {.lex_state = 105},\n  [138] = {.lex_state = 105},\n  [139] = {.lex_state = 105},\n  [140] = {.lex_state = 105},\n  [141] = {.lex_state = 105},\n  [142] = {.lex_state = 105},\n  [143] = {.lex_state = 105},\n  [144] = {.lex_state = 105},\n  [145] = {.lex_state = 105},\n  [146] = {.lex_state = 105},\n  [147] = {.lex_state = 105},\n  [148] = {.lex_state = 105},\n  [149] = {.lex_state = 105, .external_lex_state = 4},\n  [150] = {.lex_state = 105},\n  [151] = {.lex_state = 105},\n  [152] = {.lex_state = 105},\n  [153] = {.lex_state = 105},\n  [154] = {.lex_state = 105},\n  [155] = {.lex_state = 105},\n  [156] = {.lex_state = 105},\n  [157] = {.lex_state = 105},\n  [158] = {.lex_state = 105},\n  [159] = {.lex_state = 105},\n  [160] = {.lex_state = 105},\n  [161] = {.lex_state = 105},\n  [162] = {.lex_state = 105},\n  [163] = {.lex_state = 6, .external_lex_state = 2},\n  [164] = {.lex_state = 105},\n  [165] = {.lex_state = 105},\n  [166] = {.lex_state = 6, .external_lex_state = 2},\n  [167] = {.lex_state = 105},\n  [168] = {.lex_state = 105},\n  [169] = {.lex_state = 105},\n  [170] = {.lex_state = 105},\n  [171] = {.lex_state = 105},\n  [172] = {.lex_state = 6, .external_lex_state = 2},\n  [173] = {.lex_state = 105},\n  [174] = {.lex_state = 6, .external_lex_state = 2},\n  [175] = {.lex_state = 105},\n  [176] = {.lex_state = 105},\n  [177] = {.lex_state = 105},\n  [178] = {.lex_state = 105},\n  [179] = {.lex_state = 105},\n  [180] = {.lex_state = 105},\n  [181] = {.lex_state = 105},\n  [182] = {.lex_state = 105},\n  [183] = {.lex_state = 105},\n  [184] = {.lex_state = 105},\n  [185] = {.lex_state = 105},\n  [186] = {.lex_state = 105},\n  [187] = {.lex_state = 105},\n  [188] = {.lex_state = 105},\n  [189] = {.lex_state = 105},\n  [190] = {.lex_state = 105},\n  [191] = {.lex_state = 105},\n  [192] = {.lex_state = 105},\n  [193] = {.lex_state = 105},\n  [194] = {.lex_state = 105},\n  [195] = {.lex_state = 105},\n  [196] = {.lex_state = 105, .external_lex_state = 4},\n  [197] = {.lex_state = 105},\n  [198] = {.lex_state = 105},\n  [199] = {.lex_state = 105},\n  [200] = {.lex_state = 105},\n  [201] = {.lex_state = 105},\n  [202] = {.lex_state = 105},\n  [203] = {.lex_state = 105},\n  [204] = {.lex_state = 105},\n  [205] = {.lex_state = 105},\n  [206] = {.lex_state = 105},\n  [207] = {.lex_state = 105},\n  [208] = {.lex_state = 105},\n  [209] = {.lex_state = 105},\n  [210] = {.lex_state = 105},\n  [211] = {.lex_state = 105},\n  [212] = {.lex_state = 105},\n  [213] = {.lex_state = 105},\n  [214] = {.lex_state = 105},\n  [215] = {.lex_state = 105},\n  [216] = {.lex_state = 105},\n  [217] = {.lex_state = 105},\n  [218] = {.lex_state = 105},\n  [219] = {.lex_state = 105},\n  [220] = {.lex_state = 105},\n  [221] = {.lex_state = 105},\n  [222] = {.lex_state = 105},\n  [223] = {.lex_state = 105},\n  [224] = {.lex_state = 105},\n  [225] = {.lex_state = 105},\n  [226] = {.lex_state = 105},\n  [227] = {.lex_state = 105},\n  [228] = {.lex_state = 105},\n  [229] = {.lex_state = 105},\n  [230] = {.lex_state = 105},\n  [231] = {.lex_state = 105},\n  [232] = {.lex_state = 105},\n  [233] = {.lex_state = 105},\n  [234] = {.lex_state = 105},\n  [235] = {.lex_state = 105},\n  [236] = {.lex_state = 105},\n  [237] = {.lex_state = 105},\n  [238] = {.lex_state = 105},\n  [239] = {.lex_state = 105},\n  [240] = {.lex_state = 105},\n  [241] = {.lex_state = 105},\n  [242] = {.lex_state = 105},\n  [243] = {.lex_state = 105},\n  [244] = {.lex_state = 105},\n  [245] = {.lex_state = 105},\n  [246] = {.lex_state = 105},\n  [247] = {.lex_state = 105},\n  [248] = {.lex_state = 105},\n  [249] = {.lex_state = 105},\n  [250] = {.lex_state = 105},\n  [251] = {.lex_state = 105},\n  [252] = {.lex_state = 105},\n  [253] = {.lex_state = 105},\n  [254] = {.lex_state = 105},\n  [255] = {.lex_state = 105},\n  [256] = {.lex_state = 105},\n  [257] = {.lex_state = 105},\n  [258] = {.lex_state = 105},\n  [259] = {.lex_state = 105},\n  [260] = {.lex_state = 105},\n  [261] = {.lex_state = 105},\n  [262] = {.lex_state = 105},\n  [263] = {.lex_state = 105},\n  [264] = {.lex_state = 105},\n  [265] = {.lex_state = 105},\n  [266] = {.lex_state = 105},\n  [267] = {.lex_state = 105},\n  [268] = {.lex_state = 105},\n  [269] = {.lex_state = 105},\n  [270] = {.lex_state = 105},\n  [271] = {.lex_state = 105},\n  [272] = {.lex_state = 105},\n  [273] = {.lex_state = 105},\n  [274] = {.lex_state = 105},\n  [275] = {.lex_state = 105},\n  [276] = {.lex_state = 105},\n  [277] = {.lex_state = 105},\n  [278] = {.lex_state = 105},\n  [279] = {.lex_state = 105},\n  [280] = {.lex_state = 105},\n  [281] = {.lex_state = 105},\n  [282] = {.lex_state = 105},\n  [283] = {.lex_state = 105},\n  [284] = {.lex_state = 105},\n  [285] = {.lex_state = 105},\n  [286] = {.lex_state = 105},\n  [287] = {.lex_state = 105},\n  [288] = {.lex_state = 105},\n  [289] = {.lex_state = 105},\n  [290] = {.lex_state = 105},\n  [291] = {.lex_state = 105},\n  [292] = {.lex_state = 105},\n  [293] = {.lex_state = 105},\n  [294] = {.lex_state = 105},\n  [295] = {.lex_state = 105},\n  [296] = {.lex_state = 105},\n  [297] = {.lex_state = 105},\n  [298] = {.lex_state = 105},\n  [299] = {.lex_state = 105},\n  [300] = {.lex_state = 105},\n  [301] = {.lex_state = 105},\n  [302] = {.lex_state = 105},\n  [303] = {.lex_state = 105},\n  [304] = {.lex_state = 105},\n  [305] = {.lex_state = 105},\n  [306] = {.lex_state = 105},\n  [307] = {.lex_state = 105},\n  [308] = {.lex_state = 105},\n  [309] = {.lex_state = 105},\n  [310] = {.lex_state = 105},\n  [311] = {.lex_state = 105},\n  [312] = {.lex_state = 105},\n  [313] = {.lex_state = 105},\n  [314] = {.lex_state = 105},\n  [315] = {.lex_state = 105},\n  [316] = {.lex_state = 105},\n  [317] = {.lex_state = 105},\n  [318] = {.lex_state = 105},\n  [319] = {.lex_state = 105},\n  [320] = {.lex_state = 105},\n  [321] = {.lex_state = 105},\n  [322] = {.lex_state = 105},\n  [323] = {.lex_state = 105},\n  [324] = {.lex_state = 105},\n  [325] = {.lex_state = 105},\n  [326] = {.lex_state = 105},\n  [327] = {.lex_state = 105},\n  [328] = {.lex_state = 105},\n  [329] = {.lex_state = 105},\n  [330] = {.lex_state = 105},\n  [331] = {.lex_state = 105},\n  [332] = {.lex_state = 105},\n  [333] = {.lex_state = 105},\n  [334] = {.lex_state = 105},\n  [335] = {.lex_state = 105},\n  [336] = {.lex_state = 105},\n  [337] = {.lex_state = 105},\n  [338] = {.lex_state = 105},\n  [339] = {.lex_state = 105},\n  [340] = {.lex_state = 105},\n  [341] = {.lex_state = 105},\n  [342] = {.lex_state = 105},\n  [343] = {.lex_state = 105},\n  [344] = {.lex_state = 105},\n  [345] = {.lex_state = 105},\n  [346] = {.lex_state = 105},\n  [347] = {.lex_state = 105},\n  [348] = {.lex_state = 105},\n  [349] = {.lex_state = 105},\n  [350] = {.lex_state = 105},\n  [351] = {.lex_state = 105},\n  [352] = {.lex_state = 105},\n  [353] = {.lex_state = 105},\n  [354] = {.lex_state = 105},\n  [355] = {.lex_state = 105},\n  [356] = {.lex_state = 105},\n  [357] = {.lex_state = 105},\n  [358] = {.lex_state = 105},\n  [359] = {.lex_state = 105},\n  [360] = {.lex_state = 105},\n  [361] = {.lex_state = 105},\n  [362] = {.lex_state = 105},\n  [363] = {.lex_state = 105},\n  [364] = {.lex_state = 105},\n  [365] = {.lex_state = 105},\n  [366] = {.lex_state = 105},\n  [367] = {.lex_state = 105},\n  [368] = {.lex_state = 105},\n  [369] = {.lex_state = 105},\n  [370] = {.lex_state = 105},\n  [371] = {.lex_state = 105},\n  [372] = {.lex_state = 105},\n  [373] = {.lex_state = 105},\n  [374] = {.lex_state = 105},\n  [375] = {.lex_state = 105},\n  [376] = {.lex_state = 105},\n  [377] = {.lex_state = 105},\n  [378] = {.lex_state = 105},\n  [379] = {.lex_state = 105},\n  [380] = {.lex_state = 105},\n  [381] = {.lex_state = 105},\n  [382] = {.lex_state = 105},\n  [383] = {.lex_state = 105},\n  [384] = {.lex_state = 105},\n  [385] = {.lex_state = 105},\n  [386] = {.lex_state = 105},\n  [387] = {.lex_state = 105},\n  [388] = {.lex_state = 105},\n  [389] = {.lex_state = 105},\n  [390] = {.lex_state = 105},\n  [391] = {.lex_state = 105},\n  [392] = {.lex_state = 105},\n  [393] = {.lex_state = 105},\n  [394] = {.lex_state = 105},\n  [395] = {.lex_state = 105},\n  [396] = {.lex_state = 105},\n  [397] = {.lex_state = 105},\n  [398] = {.lex_state = 105},\n  [399] = {.lex_state = 105},\n  [400] = {.lex_state = 105},\n  [401] = {.lex_state = 105},\n  [402] = {.lex_state = 105},\n  [403] = {.lex_state = 105},\n  [404] = {.lex_state = 105},\n  [405] = {.lex_state = 105},\n  [406] = {.lex_state = 105},\n  [407] = {.lex_state = 105},\n  [408] = {.lex_state = 105},\n  [409] = {.lex_state = 105},\n  [410] = {.lex_state = 105},\n  [411] = {.lex_state = 105},\n  [412] = {.lex_state = 105},\n  [413] = {.lex_state = 105},\n  [414] = {.lex_state = 105},\n  [415] = {.lex_state = 105},\n  [416] = {.lex_state = 105},\n  [417] = {.lex_state = 105},\n  [418] = {.lex_state = 105},\n  [419] = {.lex_state = 105},\n  [420] = {.lex_state = 105},\n  [421] = {.lex_state = 105},\n  [422] = {.lex_state = 105},\n  [423] = {.lex_state = 105},\n  [424] = {.lex_state = 105},\n  [425] = {.lex_state = 105},\n  [426] = {.lex_state = 105},\n  [427] = {.lex_state = 105},\n  [428] = {.lex_state = 105},\n  [429] = {.lex_state = 105},\n  [430] = {.lex_state = 105},\n  [431] = {.lex_state = 105},\n  [432] = {.lex_state = 105},\n  [433] = {.lex_state = 105},\n  [434] = {.lex_state = 105},\n  [435] = {.lex_state = 105},\n  [436] = {.lex_state = 105},\n  [437] = {.lex_state = 105},\n  [438] = {.lex_state = 105},\n  [439] = {.lex_state = 105},\n  [440] = {.lex_state = 105},\n  [441] = {.lex_state = 105},\n  [442] = {.lex_state = 105},\n  [443] = {.lex_state = 105},\n  [444] = {.lex_state = 105},\n  [445] = {.lex_state = 105},\n  [446] = {.lex_state = 105},\n  [447] = {.lex_state = 105},\n  [448] = {.lex_state = 105},\n  [449] = {.lex_state = 105},\n  [450] = {.lex_state = 105},\n  [451] = {.lex_state = 105},\n  [452] = {.lex_state = 105},\n  [453] = {.lex_state = 105},\n  [454] = {.lex_state = 105},\n  [455] = {.lex_state = 105},\n  [456] = {.lex_state = 105},\n  [457] = {.lex_state = 105},\n  [458] = {.lex_state = 105},\n  [459] = {.lex_state = 105},\n  [460] = {.lex_state = 105},\n  [461] = {.lex_state = 105},\n  [462] = {.lex_state = 105},\n  [463] = {.lex_state = 105},\n  [464] = {.lex_state = 105},\n  [465] = {.lex_state = 105},\n  [466] = {.lex_state = 4, .external_lex_state = 3},\n  [467] = {.lex_state = 4, .external_lex_state = 3},\n  [468] = {.lex_state = 4, .external_lex_state = 3},\n  [469] = {.lex_state = 8, .external_lex_state = 3},\n  [470] = {.lex_state = 8, .external_lex_state = 3},\n  [471] = {.lex_state = 8, .external_lex_state = 3},\n  [472] = {.lex_state = 8, .external_lex_state = 2},\n  [473] = {.lex_state = 8, .external_lex_state = 2},\n  [474] = {.lex_state = 8, .external_lex_state = 2},\n  [475] = {.lex_state = 8, .external_lex_state = 2},\n  [476] = {.lex_state = 8, .external_lex_state = 2},\n  [477] = {.lex_state = 8, .external_lex_state = 3},\n  [478] = {.lex_state = 8, .external_lex_state = 3},\n  [479] = {.lex_state = 8, .external_lex_state = 3},\n  [480] = {.lex_state = 8, .external_lex_state = 3},\n  [481] = {.lex_state = 8, .external_lex_state = 3},\n  [482] = {.lex_state = 8, .external_lex_state = 3},\n  [483] = {.lex_state = 8, .external_lex_state = 2},\n  [484] = {.lex_state = 8, .external_lex_state = 3},\n  [485] = {.lex_state = 8, .external_lex_state = 2},\n  [486] = {.lex_state = 8, .external_lex_state = 2},\n  [487] = {.lex_state = 8, .external_lex_state = 2},\n  [488] = {.lex_state = 8, .external_lex_state = 3},\n  [489] = {.lex_state = 8, .external_lex_state = 2},\n  [490] = {.lex_state = 8, .external_lex_state = 2},\n  [491] = {.lex_state = 8, .external_lex_state = 2},\n  [492] = {.lex_state = 8, .external_lex_state = 3},\n  [493] = {.lex_state = 8, .external_lex_state = 2},\n  [494] = {.lex_state = 8, .external_lex_state = 2},\n  [495] = {.lex_state = 8, .external_lex_state = 2},\n  [496] = {.lex_state = 8, .external_lex_state = 2},\n  [497] = {.lex_state = 8, .external_lex_state = 2},\n  [498] = {.lex_state = 105, .external_lex_state = 4},\n  [499] = {.lex_state = 105},\n  [500] = {.lex_state = 105, .external_lex_state = 4},\n  [501] = {.lex_state = 105},\n  [502] = {.lex_state = 105},\n  [503] = {.lex_state = 8, .external_lex_state = 3},\n  [504] = {.lex_state = 105},\n  [505] = {.lex_state = 8, .external_lex_state = 3},\n  [506] = {.lex_state = 105},\n  [507] = {.lex_state = 8, .external_lex_state = 3},\n  [508] = {.lex_state = 105, .external_lex_state = 4},\n  [509] = {.lex_state = 8, .external_lex_state = 3},\n  [510] = {.lex_state = 105},\n  [511] = {.lex_state = 105, .external_lex_state = 4},\n  [512] = {.lex_state = 105, .external_lex_state = 4},\n  [513] = {.lex_state = 105, .external_lex_state = 4},\n  [514] = {.lex_state = 105, .external_lex_state = 4},\n  [515] = {.lex_state = 8, .external_lex_state = 3},\n  [516] = {.lex_state = 105, .external_lex_state = 4},\n  [517] = {.lex_state = 105, .external_lex_state = 4},\n  [518] = {.lex_state = 105, .external_lex_state = 4},\n  [519] = {.lex_state = 105},\n  [520] = {.lex_state = 105},\n  [521] = {.lex_state = 105},\n  [522] = {.lex_state = 105, .external_lex_state = 4},\n  [523] = {.lex_state = 8, .external_lex_state = 3},\n  [524] = {.lex_state = 105},\n  [525] = {.lex_state = 105, .external_lex_state = 4},\n  [526] = {.lex_state = 105},\n  [527] = {.lex_state = 105, .external_lex_state = 4},\n  [528] = {.lex_state = 105},\n  [529] = {.lex_state = 105, .external_lex_state = 4},\n  [530] = {.lex_state = 105, .external_lex_state = 4},\n  [531] = {.lex_state = 105},\n  [532] = {.lex_state = 105, .external_lex_state = 4},\n  [533] = {.lex_state = 105},\n  [534] = {.lex_state = 105},\n  [535] = {.lex_state = 105},\n  [536] = {.lex_state = 105},\n  [537] = {.lex_state = 105},\n  [538] = {.lex_state = 105},\n  [539] = {.lex_state = 105},\n  [540] = {.lex_state = 105},\n  [541] = {.lex_state = 105},\n  [542] = {.lex_state = 105},\n  [543] = {.lex_state = 105},\n  [544] = {.lex_state = 105},\n  [545] = {.lex_state = 105},\n  [546] = {.lex_state = 105},\n  [547] = {.lex_state = 105},\n  [548] = {.lex_state = 105},\n  [549] = {.lex_state = 105},\n  [550] = {.lex_state = 105},\n  [551] = {.lex_state = 105},\n  [552] = {.lex_state = 105},\n  [553] = {.lex_state = 105},\n  [554] = {.lex_state = 105},\n  [555] = {.lex_state = 105},\n  [556] = {.lex_state = 105},\n  [557] = {.lex_state = 105},\n  [558] = {.lex_state = 105},\n  [559] = {.lex_state = 105},\n  [560] = {.lex_state = 105},\n  [561] = {.lex_state = 105},\n  [562] = {.lex_state = 105},\n  [563] = {.lex_state = 105},\n  [564] = {.lex_state = 105},\n  [565] = {.lex_state = 105},\n  [566] = {.lex_state = 105},\n  [567] = {.lex_state = 105},\n  [568] = {.lex_state = 105},\n  [569] = {.lex_state = 105},\n  [570] = {.lex_state = 105},\n  [571] = {.lex_state = 105},\n  [572] = {.lex_state = 105},\n  [573] = {.lex_state = 105},\n  [574] = {.lex_state = 105},\n  [575] = {.lex_state = 105},\n  [576] = {.lex_state = 105},\n  [577] = {.lex_state = 105},\n  [578] = {.lex_state = 105},\n  [579] = {.lex_state = 105},\n  [580] = {.lex_state = 105},\n  [581] = {.lex_state = 105},\n  [582] = {.lex_state = 105},\n  [583] = {.lex_state = 105},\n  [584] = {.lex_state = 105},\n  [585] = {.lex_state = 105},\n  [586] = {.lex_state = 105},\n  [587] = {.lex_state = 105},\n  [588] = {.lex_state = 105},\n  [589] = {.lex_state = 105},\n  [590] = {.lex_state = 105},\n  [591] = {.lex_state = 105},\n  [592] = {.lex_state = 105},\n  [593] = {.lex_state = 105},\n  [594] = {.lex_state = 105},\n  [595] = {.lex_state = 105},\n  [596] = {.lex_state = 105},\n  [597] = {.lex_state = 105},\n  [598] = {.lex_state = 105},\n  [599] = {.lex_state = 105},\n  [600] = {.lex_state = 105},\n  [601] = {.lex_state = 105},\n  [602] = {.lex_state = 105},\n  [603] = {.lex_state = 105},\n  [604] = {.lex_state = 105},\n  [605] = {.lex_state = 105},\n  [606] = {.lex_state = 105},\n  [607] = {.lex_state = 105},\n  [608] = {.lex_state = 105},\n  [609] = {.lex_state = 105},\n  [610] = {.lex_state = 105},\n  [611] = {.lex_state = 105},\n  [612] = {.lex_state = 105},\n  [613] = {.lex_state = 105},\n  [614] = {.lex_state = 105},\n  [615] = {.lex_state = 105},\n  [616] = {.lex_state = 105},\n  [617] = {.lex_state = 105},\n  [618] = {.lex_state = 105},\n  [619] = {.lex_state = 105},\n  [620] = {.lex_state = 105},\n  [621] = {.lex_state = 105},\n  [622] = {.lex_state = 105},\n  [623] = {.lex_state = 105},\n  [624] = {.lex_state = 105},\n  [625] = {.lex_state = 105},\n  [626] = {.lex_state = 105},\n  [627] = {.lex_state = 105},\n  [628] = {.lex_state = 105},\n  [629] = {.lex_state = 105},\n  [630] = {.lex_state = 105},\n  [631] = {.lex_state = 105},\n  [632] = {.lex_state = 105},\n  [633] = {.lex_state = 105},\n  [634] = {.lex_state = 105},\n  [635] = {.lex_state = 105},\n  [636] = {.lex_state = 105},\n  [637] = {.lex_state = 105},\n  [638] = {.lex_state = 105},\n  [639] = {.lex_state = 105},\n  [640] = {.lex_state = 105},\n  [641] = {.lex_state = 105},\n  [642] = {.lex_state = 105},\n  [643] = {.lex_state = 105},\n  [644] = {.lex_state = 105},\n  [645] = {.lex_state = 105},\n  [646] = {.lex_state = 105},\n  [647] = {.lex_state = 105},\n  [648] = {.lex_state = 105},\n  [649] = {.lex_state = 105},\n  [650] = {.lex_state = 105},\n  [651] = {.lex_state = 105},\n  [652] = {.lex_state = 105},\n  [653] = {.lex_state = 105},\n  [654] = {.lex_state = 105},\n  [655] = {.lex_state = 8, .external_lex_state = 3},\n  [656] = {.lex_state = 8, .external_lex_state = 3},\n  [657] = {.lex_state = 8, .external_lex_state = 3},\n  [658] = {.lex_state = 8, .external_lex_state = 3},\n  [659] = {.lex_state = 105},\n  [660] = {.lex_state = 105},\n  [661] = {.lex_state = 105},\n  [662] = {.lex_state = 105},\n  [663] = {.lex_state = 105},\n  [664] = {.lex_state = 105},\n  [665] = {.lex_state = 105},\n  [666] = {.lex_state = 105},\n  [667] = {.lex_state = 105},\n  [668] = {.lex_state = 105},\n  [669] = {.lex_state = 105},\n  [670] = {.lex_state = 105},\n  [671] = {.lex_state = 105},\n  [672] = {.lex_state = 13},\n  [673] = {.lex_state = 13},\n  [674] = {.lex_state = 13},\n  [675] = {.lex_state = 13},\n  [676] = {.lex_state = 13},\n  [677] = {.lex_state = 13},\n  [678] = {.lex_state = 17},\n  [679] = {.lex_state = 17},\n  [680] = {.lex_state = 13},\n  [681] = {.lex_state = 17},\n  [682] = {.lex_state = 13},\n  [683] = {.lex_state = 13},\n  [684] = {.lex_state = 13},\n  [685] = {.lex_state = 13},\n  [686] = {.lex_state = 13},\n  [687] = {.lex_state = 13},\n  [688] = {.lex_state = 13},\n  [689] = {.lex_state = 13},\n  [690] = {.lex_state = 13},\n  [691] = {.lex_state = 105},\n  [692] = {.lex_state = 105},\n  [693] = {.lex_state = 105},\n  [694] = {.lex_state = 13},\n  [695] = {.lex_state = 13},\n  [696] = {.lex_state = 15},\n  [697] = {.lex_state = 13},\n  [698] = {.lex_state = 13},\n  [699] = {.lex_state = 13},\n  [700] = {.lex_state = 15},\n  [701] = {.lex_state = 15},\n  [702] = {.lex_state = 15},\n  [703] = {.lex_state = 13},\n  [704] = {.lex_state = 13},\n  [705] = {.lex_state = 13},\n  [706] = {.lex_state = 13},\n  [707] = {.lex_state = 13},\n  [708] = {.lex_state = 13},\n  [709] = {.lex_state = 13},\n  [710] = {.lex_state = 13},\n  [711] = {.lex_state = 13},\n  [712] = {.lex_state = 13},\n  [713] = {.lex_state = 13},\n  [714] = {.lex_state = 15},\n  [715] = {.lex_state = 13},\n  [716] = {.lex_state = 13},\n  [717] = {.lex_state = 13},\n  [718] = {.lex_state = 13},\n  [719] = {.lex_state = 13},\n  [720] = {.lex_state = 13},\n  [721] = {.lex_state = 15},\n  [722] = {.lex_state = 13},\n  [723] = {.lex_state = 13},\n  [724] = {.lex_state = 15},\n  [725] = {.lex_state = 13},\n  [726] = {.lex_state = 15},\n  [727] = {.lex_state = 13},\n  [728] = {.lex_state = 13},\n  [729] = {.lex_state = 13},\n  [730] = {.lex_state = 13},\n  [731] = {.lex_state = 15},\n  [732] = {.lex_state = 15},\n  [733] = {.lex_state = 15},\n  [734] = {.lex_state = 13},\n  [735] = {.lex_state = 13},\n  [736] = {.lex_state = 13},\n  [737] = {.lex_state = 15},\n  [738] = {.lex_state = 13},\n  [739] = {.lex_state = 13},\n  [740] = {.lex_state = 13},\n  [741] = {.lex_state = 13},\n  [742] = {.lex_state = 13},\n  [743] = {.lex_state = 13},\n  [744] = {.lex_state = 13},\n  [745] = {.lex_state = 13},\n  [746] = {.lex_state = 13},\n  [747] = {.lex_state = 13},\n  [748] = {.lex_state = 13},\n  [749] = {.lex_state = 13},\n  [750] = {.lex_state = 13},\n  [751] = {.lex_state = 13},\n  [752] = {.lex_state = 13},\n  [753] = {.lex_state = 13},\n  [754] = {.lex_state = 13},\n  [755] = {.lex_state = 13},\n  [756] = {.lex_state = 13},\n  [757] = {.lex_state = 13},\n  [758] = {.lex_state = 13},\n  [759] = {.lex_state = 13},\n  [760] = {.lex_state = 13},\n  [761] = {.lex_state = 13},\n  [762] = {.lex_state = 13},\n  [763] = {.lex_state = 13},\n  [764] = {.lex_state = 13},\n  [765] = {.lex_state = 13},\n  [766] = {.lex_state = 13},\n  [767] = {.lex_state = 13},\n  [768] = {.lex_state = 13},\n  [769] = {.lex_state = 13},\n  [770] = {.lex_state = 13},\n  [771] = {.lex_state = 13},\n  [772] = {.lex_state = 13},\n  [773] = {.lex_state = 13},\n  [774] = {.lex_state = 13},\n  [775] = {.lex_state = 13},\n  [776] = {.lex_state = 13},\n  [777] = {.lex_state = 13},\n  [778] = {.lex_state = 13},\n  [779] = {.lex_state = 13},\n  [780] = {.lex_state = 13},\n  [781] = {.lex_state = 13},\n  [782] = {.lex_state = 13},\n  [783] = {.lex_state = 13},\n  [784] = {.lex_state = 13},\n  [785] = {.lex_state = 13},\n  [786] = {.lex_state = 13},\n  [787] = {.lex_state = 13},\n  [788] = {.lex_state = 13},\n  [789] = {.lex_state = 13},\n  [790] = {.lex_state = 13},\n  [791] = {.lex_state = 13},\n  [792] = {.lex_state = 13},\n  [793] = {.lex_state = 13},\n  [794] = {.lex_state = 13},\n  [795] = {.lex_state = 13},\n  [796] = {.lex_state = 13},\n  [797] = {.lex_state = 13},\n  [798] = {.lex_state = 13},\n  [799] = {.lex_state = 13},\n  [800] = {.lex_state = 13},\n  [801] = {.lex_state = 13},\n  [802] = {.lex_state = 13},\n  [803] = {.lex_state = 13},\n  [804] = {.lex_state = 13},\n  [805] = {.lex_state = 13},\n  [806] = {.lex_state = 13},\n  [807] = {.lex_state = 13},\n  [808] = {.lex_state = 13},\n  [809] = {.lex_state = 13},\n  [810] = {.lex_state = 13},\n  [811] = {.lex_state = 13},\n  [812] = {.lex_state = 13},\n  [813] = {.lex_state = 13},\n  [814] = {.lex_state = 13},\n  [815] = {.lex_state = 13},\n  [816] = {.lex_state = 13},\n  [817] = {.lex_state = 13},\n  [818] = {.lex_state = 13},\n  [819] = {.lex_state = 13},\n  [820] = {.lex_state = 13},\n  [821] = {.lex_state = 13},\n  [822] = {.lex_state = 13},\n  [823] = {.lex_state = 13},\n  [824] = {.lex_state = 13},\n  [825] = {.lex_state = 13},\n  [826] = {.lex_state = 13},\n  [827] = {.lex_state = 13},\n  [828] = {.lex_state = 13},\n  [829] = {.lex_state = 13},\n  [830] = {.lex_state = 13},\n  [831] = {.lex_state = 13},\n  [832] = {.lex_state = 13},\n  [833] = {.lex_state = 13},\n  [834] = {.lex_state = 13},\n  [835] = {.lex_state = 13},\n  [836] = {.lex_state = 13},\n  [837] = {.lex_state = 13},\n  [838] = {.lex_state = 13},\n  [839] = {.lex_state = 13},\n  [840] = {.lex_state = 13},\n  [841] = {.lex_state = 13},\n  [842] = {.lex_state = 13},\n  [843] = {.lex_state = 13},\n  [844] = {.lex_state = 13},\n  [845] = {.lex_state = 13},\n  [846] = {.lex_state = 13},\n  [847] = {.lex_state = 13},\n  [848] = {.lex_state = 13},\n  [849] = {.lex_state = 13},\n  [850] = {.lex_state = 13},\n  [851] = {.lex_state = 13},\n  [852] = {.lex_state = 13},\n  [853] = {.lex_state = 13},\n  [854] = {.lex_state = 13},\n  [855] = {.lex_state = 13},\n  [856] = {.lex_state = 13},\n  [857] = {.lex_state = 13},\n  [858] = {.lex_state = 13},\n  [859] = {.lex_state = 13},\n  [860] = {.lex_state = 13},\n  [861] = {.lex_state = 13},\n  [862] = {.lex_state = 13},\n  [863] = {.lex_state = 13},\n  [864] = {.lex_state = 13},\n  [865] = {.lex_state = 13},\n  [866] = {.lex_state = 13},\n  [867] = {.lex_state = 13},\n  [868] = {.lex_state = 15},\n  [869] = {.lex_state = 15},\n  [870] = {.lex_state = 105},\n  [871] = {.lex_state = 105},\n  [872] = {.lex_state = 105},\n  [873] = {.lex_state = 105},\n  [874] = {.lex_state = 105},\n  [875] = {.lex_state = 105},\n  [876] = {.lex_state = 3, .external_lex_state = 3},\n  [877] = {.lex_state = 3, .external_lex_state = 3},\n  [878] = {.lex_state = 3, .external_lex_state = 3},\n  [879] = {.lex_state = 3, .external_lex_state = 3},\n  [880] = {.lex_state = 3, .external_lex_state = 3},\n  [881] = {.lex_state = 3, .external_lex_state = 3},\n  [882] = {.lex_state = 3, .external_lex_state = 2},\n  [883] = {.lex_state = 15},\n  [884] = {.lex_state = 15},\n  [885] = {.lex_state = 15},\n  [886] = {.lex_state = 3, .external_lex_state = 2},\n  [887] = {.lex_state = 15},\n  [888] = {.lex_state = 3, .external_lex_state = 2},\n  [889] = {.lex_state = 15},\n  [890] = {.lex_state = 3, .external_lex_state = 2},\n  [891] = {.lex_state = 3, .external_lex_state = 2},\n  [892] = {.lex_state = 3, .external_lex_state = 3},\n  [893] = {.lex_state = 15},\n  [894] = {.lex_state = 15},\n  [895] = {.lex_state = 15},\n  [896] = {.lex_state = 15},\n  [897] = {.lex_state = 3, .external_lex_state = 2},\n  [898] = {.lex_state = 15},\n  [899] = {.lex_state = 15},\n  [900] = {.lex_state = 15},\n  [901] = {.lex_state = 3, .external_lex_state = 3},\n  [902] = {.lex_state = 4, .external_lex_state = 3},\n  [903] = {.lex_state = 15},\n  [904] = {.lex_state = 3, .external_lex_state = 3},\n  [905] = {.lex_state = 3, .external_lex_state = 3},\n  [906] = {.lex_state = 3, .external_lex_state = 3},\n  [907] = {.lex_state = 3, .external_lex_state = 3},\n  [908] = {.lex_state = 15},\n  [909] = {.lex_state = 9, .external_lex_state = 3},\n  [910] = {.lex_state = 9, .external_lex_state = 3},\n  [911] = {.lex_state = 3, .external_lex_state = 3},\n  [912] = {.lex_state = 15},\n  [913] = {.lex_state = 15},\n  [914] = {.lex_state = 15},\n  [915] = {.lex_state = 9, .external_lex_state = 3},\n  [916] = {.lex_state = 3, .external_lex_state = 3},\n  [917] = {.lex_state = 15},\n  [918] = {.lex_state = 4, .external_lex_state = 3},\n  [919] = {.lex_state = 3, .external_lex_state = 3},\n  [920] = {.lex_state = 15},\n  [921] = {.lex_state = 4, .external_lex_state = 3},\n  [922] = {.lex_state = 15},\n  [923] = {.lex_state = 9, .external_lex_state = 3},\n  [924] = {.lex_state = 4},\n  [925] = {.lex_state = 9, .external_lex_state = 3},\n  [926] = {.lex_state = 9, .external_lex_state = 2},\n  [927] = {.lex_state = 9, .external_lex_state = 3},\n  [928] = {.lex_state = 9, .external_lex_state = 3},\n  [929] = {.lex_state = 9, .external_lex_state = 3},\n  [930] = {.lex_state = 4},\n  [931] = {.lex_state = 4},\n  [932] = {.lex_state = 9, .external_lex_state = 2},\n  [933] = {.lex_state = 9, .external_lex_state = 2},\n  [934] = {.lex_state = 3, .external_lex_state = 2},\n  [935] = {.lex_state = 4},\n  [936] = {.lex_state = 4},\n  [937] = {.lex_state = 4},\n  [938] = {.lex_state = 4},\n  [939] = {.lex_state = 4, .external_lex_state = 3},\n  [940] = {.lex_state = 9, .external_lex_state = 3},\n  [941] = {.lex_state = 3, .external_lex_state = 3},\n  [942] = {.lex_state = 9, .external_lex_state = 3},\n  [943] = {.lex_state = 9, .external_lex_state = 2},\n  [944] = {.lex_state = 3, .external_lex_state = 3},\n  [945] = {.lex_state = 3, .external_lex_state = 3},\n  [946] = {.lex_state = 3, .external_lex_state = 3},\n  [947] = {.lex_state = 4, .external_lex_state = 3},\n  [948] = {.lex_state = 3, .external_lex_state = 2},\n  [949] = {.lex_state = 3, .external_lex_state = 2},\n  [950] = {.lex_state = 3, .external_lex_state = 3},\n  [951] = {.lex_state = 3, .external_lex_state = 3},\n  [952] = {.lex_state = 9, .external_lex_state = 3},\n  [953] = {.lex_state = 3, .external_lex_state = 3},\n  [954] = {.lex_state = 15},\n  [955] = {.lex_state = 4, .external_lex_state = 3},\n  [956] = {.lex_state = 9, .external_lex_state = 3},\n  [957] = {.lex_state = 9, .external_lex_state = 3},\n  [958] = {.lex_state = 9, .external_lex_state = 3},\n  [959] = {.lex_state = 15},\n  [960] = {.lex_state = 3, .external_lex_state = 2},\n  [961] = {.lex_state = 3, .external_lex_state = 3},\n  [962] = {.lex_state = 9, .external_lex_state = 2},\n  [963] = {.lex_state = 9, .external_lex_state = 3},\n  [964] = {.lex_state = 9, .external_lex_state = 2},\n  [965] = {.lex_state = 15},\n  [966] = {.lex_state = 3, .external_lex_state = 2},\n  [967] = {.lex_state = 9, .external_lex_state = 2},\n  [968] = {.lex_state = 3, .external_lex_state = 2},\n  [969] = {.lex_state = 15},\n  [970] = {.lex_state = 9, .external_lex_state = 2},\n  [971] = {.lex_state = 15},\n  [972] = {.lex_state = 9, .external_lex_state = 2},\n  [973] = {.lex_state = 15},\n  [974] = {.lex_state = 9, .external_lex_state = 2},\n  [975] = {.lex_state = 9, .external_lex_state = 2},\n  [976] = {.lex_state = 3, .external_lex_state = 3},\n  [977] = {.lex_state = 9, .external_lex_state = 3},\n  [978] = {.lex_state = 9, .external_lex_state = 2},\n  [979] = {.lex_state = 9, .external_lex_state = 2},\n  [980] = {.lex_state = 9, .external_lex_state = 2},\n  [981] = {.lex_state = 3, .external_lex_state = 2},\n  [982] = {.lex_state = 15},\n  [983] = {.lex_state = 3, .external_lex_state = 3},\n  [984] = {.lex_state = 3, .external_lex_state = 2},\n  [985] = {.lex_state = 9, .external_lex_state = 2},\n  [986] = {.lex_state = 15},\n  [987] = {.lex_state = 4},\n  [988] = {.lex_state = 9, .external_lex_state = 2},\n  [989] = {.lex_state = 9, .external_lex_state = 2},\n  [990] = {.lex_state = 9, .external_lex_state = 2},\n  [991] = {.lex_state = 9, .external_lex_state = 3},\n  [992] = {.lex_state = 9, .external_lex_state = 2},\n  [993] = {.lex_state = 3, .external_lex_state = 2},\n  [994] = {.lex_state = 15},\n  [995] = {.lex_state = 9, .external_lex_state = 3},\n  [996] = {.lex_state = 3, .external_lex_state = 3},\n  [997] = {.lex_state = 9, .external_lex_state = 3},\n  [998] = {.lex_state = 3, .external_lex_state = 2},\n  [999] = {.lex_state = 9, .external_lex_state = 3},\n  [1000] = {.lex_state = 9, .external_lex_state = 3},\n  [1001] = {.lex_state = 9, .external_lex_state = 2},\n  [1002] = {.lex_state = 3, .external_lex_state = 3},\n  [1003] = {.lex_state = 9, .external_lex_state = 3},\n  [1004] = {.lex_state = 3, .external_lex_state = 2},\n  [1005] = {.lex_state = 9, .external_lex_state = 3},\n  [1006] = {.lex_state = 9, .external_lex_state = 2},\n  [1007] = {.lex_state = 9, .external_lex_state = 3},\n  [1008] = {.lex_state = 3, .external_lex_state = 2},\n  [1009] = {.lex_state = 3, .external_lex_state = 2},\n  [1010] = {.lex_state = 9, .external_lex_state = 3},\n  [1011] = {.lex_state = 9, .external_lex_state = 2},\n  [1012] = {.lex_state = 9, .external_lex_state = 2},\n  [1013] = {.lex_state = 3, .external_lex_state = 2},\n  [1014] = {.lex_state = 9, .external_lex_state = 2},\n  [1015] = {.lex_state = 3, .external_lex_state = 2},\n  [1016] = {.lex_state = 9, .external_lex_state = 2},\n  [1017] = {.lex_state = 3, .external_lex_state = 2},\n  [1018] = {.lex_state = 3, .external_lex_state = 2},\n  [1019] = {.lex_state = 3, .external_lex_state = 2},\n  [1020] = {.lex_state = 3, .external_lex_state = 2},\n  [1021] = {.lex_state = 3, .external_lex_state = 2},\n  [1022] = {.lex_state = 3, .external_lex_state = 2},\n  [1023] = {.lex_state = 9, .external_lex_state = 3},\n  [1024] = {.lex_state = 3, .external_lex_state = 2},\n  [1025] = {.lex_state = 9, .external_lex_state = 3},\n  [1026] = {.lex_state = 3, .external_lex_state = 3},\n  [1027] = {.lex_state = 9, .external_lex_state = 3},\n  [1028] = {.lex_state = 9, .external_lex_state = 2},\n  [1029] = {.lex_state = 9, .external_lex_state = 3},\n  [1030] = {.lex_state = 3, .external_lex_state = 2},\n  [1031] = {.lex_state = 3, .external_lex_state = 3},\n  [1032] = {.lex_state = 9, .external_lex_state = 2},\n  [1033] = {.lex_state = 3, .external_lex_state = 3},\n  [1034] = {.lex_state = 9, .external_lex_state = 2},\n  [1035] = {.lex_state = 3, .external_lex_state = 3},\n  [1036] = {.lex_state = 9, .external_lex_state = 2},\n  [1037] = {.lex_state = 9, .external_lex_state = 3},\n  [1038] = {.lex_state = 3, .external_lex_state = 3},\n  [1039] = {.lex_state = 3, .external_lex_state = 2},\n  [1040] = {.lex_state = 3, .external_lex_state = 2},\n  [1041] = {.lex_state = 9, .external_lex_state = 3},\n  [1042] = {.lex_state = 3, .external_lex_state = 2},\n  [1043] = {.lex_state = 9, .external_lex_state = 3},\n  [1044] = {.lex_state = 3, .external_lex_state = 2},\n  [1045] = {.lex_state = 3, .external_lex_state = 3},\n  [1046] = {.lex_state = 3, .external_lex_state = 3},\n  [1047] = {.lex_state = 3, .external_lex_state = 3},\n  [1048] = {.lex_state = 3, .external_lex_state = 2},\n  [1049] = {.lex_state = 3, .external_lex_state = 2},\n  [1050] = {.lex_state = 3, .external_lex_state = 2},\n  [1051] = {.lex_state = 9, .external_lex_state = 2},\n  [1052] = {.lex_state = 9, .external_lex_state = 2},\n  [1053] = {.lex_state = 3, .external_lex_state = 2},\n  [1054] = {.lex_state = 9, .external_lex_state = 3},\n  [1055] = {.lex_state = 3, .external_lex_state = 3},\n  [1056] = {.lex_state = 3, .external_lex_state = 3},\n  [1057] = {.lex_state = 9, .external_lex_state = 3},\n  [1058] = {.lex_state = 3, .external_lex_state = 3},\n  [1059] = {.lex_state = 9, .external_lex_state = 3},\n  [1060] = {.lex_state = 3, .external_lex_state = 3},\n  [1061] = {.lex_state = 9, .external_lex_state = 2},\n  [1062] = {.lex_state = 3, .external_lex_state = 3},\n  [1063] = {.lex_state = 3, .external_lex_state = 3},\n  [1064] = {.lex_state = 3, .external_lex_state = 2},\n  [1065] = {.lex_state = 3, .external_lex_state = 3},\n  [1066] = {.lex_state = 3, .external_lex_state = 2},\n  [1067] = {.lex_state = 3, .external_lex_state = 2},\n  [1068] = {.lex_state = 9, .external_lex_state = 2},\n  [1069] = {.lex_state = 3, .external_lex_state = 3},\n  [1070] = {.lex_state = 3, .external_lex_state = 3},\n  [1071] = {.lex_state = 3, .external_lex_state = 3},\n  [1072] = {.lex_state = 9, .external_lex_state = 2},\n  [1073] = {.lex_state = 3, .external_lex_state = 3},\n  [1074] = {.lex_state = 3, .external_lex_state = 3},\n  [1075] = {.lex_state = 9, .external_lex_state = 2},\n  [1076] = {.lex_state = 3, .external_lex_state = 3},\n  [1077] = {.lex_state = 3, .external_lex_state = 2},\n  [1078] = {.lex_state = 3, .external_lex_state = 3},\n  [1079] = {.lex_state = 9, .external_lex_state = 2},\n  [1080] = {.lex_state = 3, .external_lex_state = 3},\n  [1081] = {.lex_state = 3, .external_lex_state = 2},\n  [1082] = {.lex_state = 3, .external_lex_state = 3},\n  [1083] = {.lex_state = 3, .external_lex_state = 2},\n  [1084] = {.lex_state = 9, .external_lex_state = 2},\n  [1085] = {.lex_state = 3, .external_lex_state = 3},\n  [1086] = {.lex_state = 9, .external_lex_state = 2},\n  [1087] = {.lex_state = 3, .external_lex_state = 2},\n  [1088] = {.lex_state = 4},\n  [1089] = {.lex_state = 9, .external_lex_state = 2},\n  [1090] = {.lex_state = 9, .external_lex_state = 2},\n  [1091] = {.lex_state = 15, .external_lex_state = 4},\n  [1092] = {.lex_state = 9, .external_lex_state = 2},\n  [1093] = {.lex_state = 3, .external_lex_state = 3},\n  [1094] = {.lex_state = 3, .external_lex_state = 2},\n  [1095] = {.lex_state = 3, .external_lex_state = 3},\n  [1096] = {.lex_state = 9, .external_lex_state = 2},\n  [1097] = {.lex_state = 9, .external_lex_state = 2},\n  [1098] = {.lex_state = 9, .external_lex_state = 2},\n  [1099] = {.lex_state = 4},\n  [1100] = {.lex_state = 9, .external_lex_state = 3},\n  [1101] = {.lex_state = 15, .external_lex_state = 4},\n  [1102] = {.lex_state = 15, .external_lex_state = 4},\n  [1103] = {.lex_state = 3, .external_lex_state = 3},\n  [1104] = {.lex_state = 3, .external_lex_state = 2},\n  [1105] = {.lex_state = 15, .external_lex_state = 4},\n  [1106] = {.lex_state = 3, .external_lex_state = 2},\n  [1107] = {.lex_state = 9, .external_lex_state = 2},\n  [1108] = {.lex_state = 9, .external_lex_state = 3},\n  [1109] = {.lex_state = 15, .external_lex_state = 4},\n  [1110] = {.lex_state = 3, .external_lex_state = 3},\n  [1111] = {.lex_state = 15, .external_lex_state = 4},\n  [1112] = {.lex_state = 15, .external_lex_state = 4},\n  [1113] = {.lex_state = 15, .external_lex_state = 4},\n  [1114] = {.lex_state = 9, .external_lex_state = 2},\n  [1115] = {.lex_state = 3, .external_lex_state = 2},\n  [1116] = {.lex_state = 15, .external_lex_state = 4},\n  [1117] = {.lex_state = 3, .external_lex_state = 2},\n  [1118] = {.lex_state = 3, .external_lex_state = 2},\n  [1119] = {.lex_state = 3, .external_lex_state = 2},\n  [1120] = {.lex_state = 3, .external_lex_state = 3},\n  [1121] = {.lex_state = 15, .external_lex_state = 4},\n  [1122] = {.lex_state = 15, .external_lex_state = 4},\n  [1123] = {.lex_state = 15, .external_lex_state = 4},\n  [1124] = {.lex_state = 15, .external_lex_state = 4},\n  [1125] = {.lex_state = 9, .external_lex_state = 2},\n  [1126] = {.lex_state = 3, .external_lex_state = 2},\n  [1127] = {.lex_state = 9, .external_lex_state = 2},\n  [1128] = {.lex_state = 15, .external_lex_state = 4},\n  [1129] = {.lex_state = 15, .external_lex_state = 4},\n  [1130] = {.lex_state = 4},\n  [1131] = {.lex_state = 15, .external_lex_state = 4},\n  [1132] = {.lex_state = 9, .external_lex_state = 2},\n  [1133] = {.lex_state = 15, .external_lex_state = 4},\n  [1134] = {.lex_state = 9, .external_lex_state = 2},\n  [1135] = {.lex_state = 3, .external_lex_state = 2},\n  [1136] = {.lex_state = 3, .external_lex_state = 3},\n  [1137] = {.lex_state = 3, .external_lex_state = 3},\n  [1138] = {.lex_state = 3, .external_lex_state = 2},\n  [1139] = {.lex_state = 3, .external_lex_state = 2},\n  [1140] = {.lex_state = 3, .external_lex_state = 2},\n  [1141] = {.lex_state = 3, .external_lex_state = 2},\n  [1142] = {.lex_state = 4},\n  [1143] = {.lex_state = 9, .external_lex_state = 2},\n  [1144] = {.lex_state = 3, .external_lex_state = 2},\n  [1145] = {.lex_state = 15, .external_lex_state = 4},\n  [1146] = {.lex_state = 4},\n  [1147] = {.lex_state = 15, .external_lex_state = 4},\n  [1148] = {.lex_state = 15, .external_lex_state = 4},\n  [1149] = {.lex_state = 3, .external_lex_state = 2},\n  [1150] = {.lex_state = 15, .external_lex_state = 4},\n  [1151] = {.lex_state = 3, .external_lex_state = 2},\n  [1152] = {.lex_state = 3, .external_lex_state = 2},\n  [1153] = {.lex_state = 4},\n  [1154] = {.lex_state = 15, .external_lex_state = 4},\n  [1155] = {.lex_state = 15, .external_lex_state = 4},\n  [1156] = {.lex_state = 15, .external_lex_state = 4},\n  [1157] = {.lex_state = 15, .external_lex_state = 4},\n  [1158] = {.lex_state = 15, .external_lex_state = 4},\n  [1159] = {.lex_state = 3, .external_lex_state = 2},\n  [1160] = {.lex_state = 3, .external_lex_state = 2},\n  [1161] = {.lex_state = 15, .external_lex_state = 4},\n  [1162] = {.lex_state = 15, .external_lex_state = 4},\n  [1163] = {.lex_state = 3, .external_lex_state = 2},\n  [1164] = {.lex_state = 15, .external_lex_state = 4},\n  [1165] = {.lex_state = 15, .external_lex_state = 4},\n  [1166] = {.lex_state = 15, .external_lex_state = 4},\n  [1167] = {.lex_state = 15, .external_lex_state = 4},\n  [1168] = {.lex_state = 15, .external_lex_state = 4},\n  [1169] = {.lex_state = 15, .external_lex_state = 4},\n  [1170] = {.lex_state = 15, .external_lex_state = 4},\n  [1171] = {.lex_state = 15, .external_lex_state = 4},\n  [1172] = {.lex_state = 15, .external_lex_state = 4},\n  [1173] = {.lex_state = 15, .external_lex_state = 4},\n  [1174] = {.lex_state = 15, .external_lex_state = 4},\n  [1175] = {.lex_state = 15, .external_lex_state = 4},\n  [1176] = {.lex_state = 15, .external_lex_state = 4},\n  [1177] = {.lex_state = 15, .external_lex_state = 4},\n  [1178] = {.lex_state = 15, .external_lex_state = 4},\n  [1179] = {.lex_state = 15, .external_lex_state = 4},\n  [1180] = {.lex_state = 15, .external_lex_state = 4},\n  [1181] = {.lex_state = 15, .external_lex_state = 4},\n  [1182] = {.lex_state = 15, .external_lex_state = 4},\n  [1183] = {.lex_state = 15, .external_lex_state = 4},\n  [1184] = {.lex_state = 15, .external_lex_state = 4},\n  [1185] = {.lex_state = 15, .external_lex_state = 4},\n  [1186] = {.lex_state = 15, .external_lex_state = 4},\n  [1187] = {.lex_state = 15, .external_lex_state = 4},\n  [1188] = {.lex_state = 15, .external_lex_state = 4},\n  [1189] = {.lex_state = 15, .external_lex_state = 4},\n  [1190] = {.lex_state = 15, .external_lex_state = 4},\n  [1191] = {.lex_state = 15, .external_lex_state = 4},\n  [1192] = {.lex_state = 15, .external_lex_state = 4},\n  [1193] = {.lex_state = 15, .external_lex_state = 4},\n  [1194] = {.lex_state = 4},\n  [1195] = {.lex_state = 15, .external_lex_state = 4},\n  [1196] = {.lex_state = 4},\n  [1197] = {.lex_state = 4},\n  [1198] = {.lex_state = 4},\n  [1199] = {.lex_state = 4},\n  [1200] = {.lex_state = 4},\n  [1201] = {.lex_state = 4},\n  [1202] = {.lex_state = 15, .external_lex_state = 4},\n  [1203] = {.lex_state = 15, .external_lex_state = 4},\n  [1204] = {.lex_state = 15, .external_lex_state = 4},\n  [1205] = {.lex_state = 15, .external_lex_state = 4},\n  [1206] = {.lex_state = 4},\n  [1207] = {.lex_state = 15, .external_lex_state = 4},\n  [1208] = {.lex_state = 4},\n  [1209] = {.lex_state = 15},\n  [1210] = {.lex_state = 4},\n  [1211] = {.lex_state = 7, .external_lex_state = 3},\n  [1212] = {.lex_state = 15, .external_lex_state = 4},\n  [1213] = {.lex_state = 15, .external_lex_state = 4},\n  [1214] = {.lex_state = 4},\n  [1215] = {.lex_state = 15},\n  [1216] = {.lex_state = 15, .external_lex_state = 4},\n  [1217] = {.lex_state = 15, .external_lex_state = 4},\n  [1218] = {.lex_state = 15, .external_lex_state = 4},\n  [1219] = {.lex_state = 4},\n  [1220] = {.lex_state = 15, .external_lex_state = 4},\n  [1221] = {.lex_state = 4},\n  [1222] = {.lex_state = 4},\n  [1223] = {.lex_state = 4},\n  [1224] = {.lex_state = 15, .external_lex_state = 4},\n  [1225] = {.lex_state = 15, .external_lex_state = 4},\n  [1226] = {.lex_state = 15, .external_lex_state = 4},\n  [1227] = {.lex_state = 15, .external_lex_state = 4},\n  [1228] = {.lex_state = 15, .external_lex_state = 4},\n  [1229] = {.lex_state = 4},\n  [1230] = {.lex_state = 15, .external_lex_state = 4},\n  [1231] = {.lex_state = 15, .external_lex_state = 4},\n  [1232] = {.lex_state = 15},\n  [1233] = {.lex_state = 15, .external_lex_state = 4},\n  [1234] = {.lex_state = 15, .external_lex_state = 4},\n  [1235] = {.lex_state = 15, .external_lex_state = 4},\n  [1236] = {.lex_state = 15, .external_lex_state = 4},\n  [1237] = {.lex_state = 4},\n  [1238] = {.lex_state = 7, .external_lex_state = 3},\n  [1239] = {.lex_state = 7, .external_lex_state = 3},\n  [1240] = {.lex_state = 15, .external_lex_state = 4},\n  [1241] = {.lex_state = 4},\n  [1242] = {.lex_state = 4},\n  [1243] = {.lex_state = 4},\n  [1244] = {.lex_state = 4},\n  [1245] = {.lex_state = 4},\n  [1246] = {.lex_state = 15, .external_lex_state = 4},\n  [1247] = {.lex_state = 4},\n  [1248] = {.lex_state = 15},\n  [1249] = {.lex_state = 4},\n  [1250] = {.lex_state = 15},\n  [1251] = {.lex_state = 15},\n  [1252] = {.lex_state = 15},\n  [1253] = {.lex_state = 15},\n  [1254] = {.lex_state = 15},\n  [1255] = {.lex_state = 15},\n  [1256] = {.lex_state = 15},\n  [1257] = {.lex_state = 15},\n  [1258] = {.lex_state = 15},\n  [1259] = {.lex_state = 15},\n  [1260] = {.lex_state = 4},\n  [1261] = {.lex_state = 4},\n  [1262] = {.lex_state = 7, .external_lex_state = 2},\n  [1263] = {.lex_state = 7, .external_lex_state = 2},\n  [1264] = {.lex_state = 7, .external_lex_state = 2},\n  [1265] = {.lex_state = 4},\n  [1266] = {.lex_state = 7, .external_lex_state = 3},\n  [1267] = {.lex_state = 7, .external_lex_state = 3},\n  [1268] = {.lex_state = 7, .external_lex_state = 2},\n  [1269] = {.lex_state = 4},\n  [1270] = {.lex_state = 4},\n  [1271] = {.lex_state = 4},\n  [1272] = {.lex_state = 7, .external_lex_state = 2},\n  [1273] = {.lex_state = 4},\n  [1274] = {.lex_state = 4},\n  [1275] = {.lex_state = 7, .external_lex_state = 2},\n  [1276] = {.lex_state = 7, .external_lex_state = 2},\n  [1277] = {.lex_state = 7, .external_lex_state = 2},\n  [1278] = {.lex_state = 4},\n  [1279] = {.lex_state = 4},\n  [1280] = {.lex_state = 7, .external_lex_state = 2},\n  [1281] = {.lex_state = 7, .external_lex_state = 2},\n  [1282] = {.lex_state = 4},\n  [1283] = {.lex_state = 4},\n  [1284] = {.lex_state = 7, .external_lex_state = 2},\n  [1285] = {.lex_state = 7, .external_lex_state = 2},\n  [1286] = {.lex_state = 7, .external_lex_state = 2},\n  [1287] = {.lex_state = 7, .external_lex_state = 2},\n  [1288] = {.lex_state = 4},\n  [1289] = {.lex_state = 7, .external_lex_state = 2},\n  [1290] = {.lex_state = 7, .external_lex_state = 2},\n  [1291] = {.lex_state = 7, .external_lex_state = 2},\n  [1292] = {.lex_state = 4},\n  [1293] = {.lex_state = 4},\n  [1294] = {.lex_state = 7, .external_lex_state = 2},\n  [1295] = {.lex_state = 7, .external_lex_state = 2},\n  [1296] = {.lex_state = 4},\n  [1297] = {.lex_state = 7, .external_lex_state = 2},\n  [1298] = {.lex_state = 7, .external_lex_state = 2},\n  [1299] = {.lex_state = 7, .external_lex_state = 2},\n  [1300] = {.lex_state = 4},\n  [1301] = {.lex_state = 4},\n  [1302] = {.lex_state = 4},\n  [1303] = {.lex_state = 4},\n  [1304] = {.lex_state = 4},\n  [1305] = {.lex_state = 7, .external_lex_state = 2},\n  [1306] = {.lex_state = 7, .external_lex_state = 2},\n  [1307] = {.lex_state = 7, .external_lex_state = 2},\n  [1308] = {.lex_state = 4},\n  [1309] = {.lex_state = 4},\n  [1310] = {.lex_state = 4},\n  [1311] = {.lex_state = 4},\n  [1312] = {.lex_state = 4},\n  [1313] = {.lex_state = 7, .external_lex_state = 2},\n  [1314] = {.lex_state = 7, .external_lex_state = 2},\n  [1315] = {.lex_state = 4},\n  [1316] = {.lex_state = 7, .external_lex_state = 2},\n  [1317] = {.lex_state = 7, .external_lex_state = 2},\n  [1318] = {.lex_state = 4},\n  [1319] = {.lex_state = 7, .external_lex_state = 2},\n  [1320] = {.lex_state = 4},\n  [1321] = {.lex_state = 4},\n  [1322] = {.lex_state = 4},\n  [1323] = {.lex_state = 4},\n  [1324] = {.lex_state = 7, .external_lex_state = 2},\n  [1325] = {.lex_state = 7, .external_lex_state = 2},\n  [1326] = {.lex_state = 7, .external_lex_state = 2},\n  [1327] = {.lex_state = 7, .external_lex_state = 3},\n  [1328] = {.lex_state = 7, .external_lex_state = 2},\n  [1329] = {.lex_state = 7, .external_lex_state = 3},\n  [1330] = {.lex_state = 7, .external_lex_state = 2},\n  [1331] = {.lex_state = 7, .external_lex_state = 3},\n  [1332] = {.lex_state = 7, .external_lex_state = 3},\n  [1333] = {.lex_state = 7, .external_lex_state = 3},\n  [1334] = {.lex_state = 7, .external_lex_state = 3},\n  [1335] = {.lex_state = 7, .external_lex_state = 2},\n  [1336] = {.lex_state = 7, .external_lex_state = 2},\n  [1337] = {.lex_state = 7, .external_lex_state = 2},\n  [1338] = {.lex_state = 7, .external_lex_state = 2},\n  [1339] = {.lex_state = 7, .external_lex_state = 3},\n  [1340] = {.lex_state = 7, .external_lex_state = 3},\n  [1341] = {.lex_state = 7, .external_lex_state = 3},\n  [1342] = {.lex_state = 7, .external_lex_state = 2},\n  [1343] = {.lex_state = 7, .external_lex_state = 3},\n  [1344] = {.lex_state = 7, .external_lex_state = 3},\n  [1345] = {.lex_state = 7, .external_lex_state = 3},\n  [1346] = {.lex_state = 7, .external_lex_state = 3},\n  [1347] = {.lex_state = 7, .external_lex_state = 3},\n  [1348] = {.lex_state = 7, .external_lex_state = 2},\n  [1349] = {.lex_state = 7, .external_lex_state = 3},\n  [1350] = {.lex_state = 7, .external_lex_state = 3},\n  [1351] = {.lex_state = 7, .external_lex_state = 3},\n  [1352] = {.lex_state = 7, .external_lex_state = 3},\n  [1353] = {.lex_state = 7, .external_lex_state = 3},\n  [1354] = {.lex_state = 7, .external_lex_state = 3},\n  [1355] = {.lex_state = 7, .external_lex_state = 3},\n  [1356] = {.lex_state = 7, .external_lex_state = 3},\n  [1357] = {.lex_state = 7, .external_lex_state = 3},\n  [1358] = {.lex_state = 7, .external_lex_state = 3},\n  [1359] = {.lex_state = 7, .external_lex_state = 3},\n  [1360] = {.lex_state = 7, .external_lex_state = 3},\n  [1361] = {.lex_state = 7, .external_lex_state = 3},\n  [1362] = {.lex_state = 7, .external_lex_state = 3},\n  [1363] = {.lex_state = 7, .external_lex_state = 3},\n  [1364] = {.lex_state = 7, .external_lex_state = 3},\n  [1365] = {.lex_state = 7, .external_lex_state = 3},\n  [1366] = {.lex_state = 7, .external_lex_state = 3},\n  [1367] = {.lex_state = 7, .external_lex_state = 3},\n  [1368] = {.lex_state = 7, .external_lex_state = 3},\n  [1369] = {.lex_state = 7, .external_lex_state = 3},\n  [1370] = {.lex_state = 7, .external_lex_state = 3},\n  [1371] = {.lex_state = 7, .external_lex_state = 3},\n  [1372] = {.lex_state = 7, .external_lex_state = 3},\n  [1373] = {.lex_state = 7, .external_lex_state = 3},\n  [1374] = {.lex_state = 7, .external_lex_state = 3},\n  [1375] = {.lex_state = 7, .external_lex_state = 3},\n  [1376] = {.lex_state = 7, .external_lex_state = 2},\n  [1377] = {.lex_state = 7, .external_lex_state = 2},\n  [1378] = {.lex_state = 7, .external_lex_state = 3},\n  [1379] = {.lex_state = 7, .external_lex_state = 3},\n  [1380] = {.lex_state = 7, .external_lex_state = 3},\n  [1381] = {.lex_state = 7, .external_lex_state = 3},\n  [1382] = {.lex_state = 7, .external_lex_state = 3},\n  [1383] = {.lex_state = 7, .external_lex_state = 3},\n  [1384] = {.lex_state = 7, .external_lex_state = 2},\n  [1385] = {.lex_state = 7, .external_lex_state = 3},\n  [1386] = {.lex_state = 7, .external_lex_state = 3},\n  [1387] = {.lex_state = 7, .external_lex_state = 3},\n  [1388] = {.lex_state = 7, .external_lex_state = 2},\n  [1389] = {.lex_state = 7, .external_lex_state = 3},\n  [1390] = {.lex_state = 7, .external_lex_state = 3},\n  [1391] = {.lex_state = 7, .external_lex_state = 3},\n  [1392] = {.lex_state = 7, .external_lex_state = 2},\n  [1393] = {.lex_state = 7, .external_lex_state = 2},\n  [1394] = {.lex_state = 7, .external_lex_state = 3},\n  [1395] = {.lex_state = 7, .external_lex_state = 3},\n  [1396] = {.lex_state = 7, .external_lex_state = 2},\n  [1397] = {.lex_state = 7, .external_lex_state = 2},\n  [1398] = {.lex_state = 7, .external_lex_state = 3},\n  [1399] = {.lex_state = 7, .external_lex_state = 3},\n  [1400] = {.lex_state = 7, .external_lex_state = 2},\n  [1401] = {.lex_state = 7, .external_lex_state = 3},\n  [1402] = {.lex_state = 7, .external_lex_state = 2},\n  [1403] = {.lex_state = 7, .external_lex_state = 3},\n  [1404] = {.lex_state = 7, .external_lex_state = 3},\n  [1405] = {.lex_state = 7, .external_lex_state = 3},\n  [1406] = {.lex_state = 7, .external_lex_state = 3},\n  [1407] = {.lex_state = 7, .external_lex_state = 2},\n  [1408] = {.lex_state = 7, .external_lex_state = 3},\n  [1409] = {.lex_state = 7, .external_lex_state = 3},\n  [1410] = {.lex_state = 7, .external_lex_state = 3},\n  [1411] = {.lex_state = 7, .external_lex_state = 2},\n  [1412] = {.lex_state = 7, .external_lex_state = 2},\n  [1413] = {.lex_state = 7, .external_lex_state = 2},\n  [1414] = {.lex_state = 7, .external_lex_state = 2},\n  [1415] = {.lex_state = 7, .external_lex_state = 2},\n  [1416] = {.lex_state = 7, .external_lex_state = 2},\n  [1417] = {.lex_state = 7, .external_lex_state = 2},\n  [1418] = {.lex_state = 7, .external_lex_state = 2},\n  [1419] = {.lex_state = 7, .external_lex_state = 2},\n  [1420] = {.lex_state = 7, .external_lex_state = 2},\n  [1421] = {.lex_state = 7, .external_lex_state = 2},\n  [1422] = {.lex_state = 7, .external_lex_state = 3},\n  [1423] = {.lex_state = 7, .external_lex_state = 2},\n  [1424] = {.lex_state = 7, .external_lex_state = 2},\n  [1425] = {.lex_state = 7, .external_lex_state = 2},\n  [1426] = {.lex_state = 7, .external_lex_state = 2},\n  [1427] = {.lex_state = 7, .external_lex_state = 2},\n  [1428] = {.lex_state = 7, .external_lex_state = 2},\n  [1429] = {.lex_state = 7, .external_lex_state = 2},\n  [1430] = {.lex_state = 7, .external_lex_state = 2},\n  [1431] = {.lex_state = 7, .external_lex_state = 2},\n  [1432] = {.lex_state = 7, .external_lex_state = 2},\n  [1433] = {.lex_state = 7, .external_lex_state = 2},\n  [1434] = {.lex_state = 7, .external_lex_state = 2},\n  [1435] = {.lex_state = 7, .external_lex_state = 2},\n  [1436] = {.lex_state = 7, .external_lex_state = 2},\n  [1437] = {.lex_state = 7, .external_lex_state = 3},\n  [1438] = {.lex_state = 7, .external_lex_state = 2},\n  [1439] = {.lex_state = 7, .external_lex_state = 2},\n  [1440] = {.lex_state = 7, .external_lex_state = 3},\n  [1441] = {.lex_state = 7, .external_lex_state = 3},\n  [1442] = {.lex_state = 7, .external_lex_state = 2},\n  [1443] = {.lex_state = 7, .external_lex_state = 2},\n  [1444] = {.lex_state = 7, .external_lex_state = 2},\n  [1445] = {.lex_state = 7, .external_lex_state = 2},\n  [1446] = {.lex_state = 7, .external_lex_state = 2},\n  [1447] = {.lex_state = 7, .external_lex_state = 2},\n  [1448] = {.lex_state = 7, .external_lex_state = 2},\n  [1449] = {.lex_state = 7, .external_lex_state = 2},\n  [1450] = {.lex_state = 7, .external_lex_state = 2},\n  [1451] = {.lex_state = 7, .external_lex_state = 2},\n  [1452] = {.lex_state = 7, .external_lex_state = 2},\n  [1453] = {.lex_state = 7, .external_lex_state = 2},\n  [1454] = {.lex_state = 7, .external_lex_state = 2},\n  [1455] = {.lex_state = 7, .external_lex_state = 2},\n  [1456] = {.lex_state = 7, .external_lex_state = 2},\n  [1457] = {.lex_state = 7, .external_lex_state = 2},\n  [1458] = {.lex_state = 7, .external_lex_state = 2},\n  [1459] = {.lex_state = 7, .external_lex_state = 2},\n  [1460] = {.lex_state = 7, .external_lex_state = 2},\n  [1461] = {.lex_state = 7, .external_lex_state = 2},\n  [1462] = {.lex_state = 7, .external_lex_state = 2},\n  [1463] = {.lex_state = 7, .external_lex_state = 2},\n  [1464] = {.lex_state = 7, .external_lex_state = 2},\n  [1465] = {.lex_state = 7, .external_lex_state = 2},\n  [1466] = {.lex_state = 7, .external_lex_state = 3},\n  [1467] = {.lex_state = 7, .external_lex_state = 2},\n  [1468] = {.lex_state = 7, .external_lex_state = 2},\n  [1469] = {.lex_state = 7, .external_lex_state = 3},\n  [1470] = {.lex_state = 7, .external_lex_state = 2},\n  [1471] = {.lex_state = 7, .external_lex_state = 3},\n  [1472] = {.lex_state = 7, .external_lex_state = 2},\n  [1473] = {.lex_state = 7, .external_lex_state = 2},\n  [1474] = {.lex_state = 7, .external_lex_state = 2},\n  [1475] = {.lex_state = 7, .external_lex_state = 2},\n  [1476] = {.lex_state = 7, .external_lex_state = 2},\n  [1477] = {.lex_state = 7, .external_lex_state = 2},\n  [1478] = {.lex_state = 7, .external_lex_state = 2},\n  [1479] = {.lex_state = 7, .external_lex_state = 2},\n  [1480] = {.lex_state = 7, .external_lex_state = 2},\n  [1481] = {.lex_state = 7, .external_lex_state = 2},\n  [1482] = {.lex_state = 7, .external_lex_state = 2},\n  [1483] = {.lex_state = 7, .external_lex_state = 2},\n  [1484] = {.lex_state = 7, .external_lex_state = 2},\n  [1485] = {.lex_state = 7, .external_lex_state = 2},\n  [1486] = {.lex_state = 7, .external_lex_state = 2},\n  [1487] = {.lex_state = 7, .external_lex_state = 2},\n  [1488] = {.lex_state = 7, .external_lex_state = 2},\n  [1489] = {.lex_state = 7, .external_lex_state = 2},\n  [1490] = {.lex_state = 7, .external_lex_state = 2},\n  [1491] = {.lex_state = 7, .external_lex_state = 2},\n  [1492] = {.lex_state = 7, .external_lex_state = 2},\n  [1493] = {.lex_state = 7, .external_lex_state = 3},\n  [1494] = {.lex_state = 7, .external_lex_state = 3},\n  [1495] = {.lex_state = 7, .external_lex_state = 2},\n  [1496] = {.lex_state = 7, .external_lex_state = 2},\n  [1497] = {.lex_state = 7, .external_lex_state = 3},\n  [1498] = {.lex_state = 7, .external_lex_state = 2},\n  [1499] = {.lex_state = 7, .external_lex_state = 2},\n  [1500] = {.lex_state = 7, .external_lex_state = 3},\n  [1501] = {.lex_state = 7, .external_lex_state = 2},\n  [1502] = {.lex_state = 7, .external_lex_state = 2},\n  [1503] = {.lex_state = 7, .external_lex_state = 3},\n  [1504] = {.lex_state = 7, .external_lex_state = 2},\n  [1505] = {.lex_state = 7, .external_lex_state = 2},\n  [1506] = {.lex_state = 7, .external_lex_state = 2},\n  [1507] = {.lex_state = 7, .external_lex_state = 2},\n  [1508] = {.lex_state = 7, .external_lex_state = 2},\n  [1509] = {.lex_state = 7, .external_lex_state = 2},\n  [1510] = {.lex_state = 7, .external_lex_state = 2},\n  [1511] = {.lex_state = 7, .external_lex_state = 2},\n  [1512] = {.lex_state = 7, .external_lex_state = 2},\n  [1513] = {.lex_state = 7, .external_lex_state = 2},\n  [1514] = {.lex_state = 7, .external_lex_state = 2},\n  [1515] = {.lex_state = 7, .external_lex_state = 2},\n  [1516] = {.lex_state = 7, .external_lex_state = 2},\n  [1517] = {.lex_state = 7, .external_lex_state = 2},\n  [1518] = {.lex_state = 7, .external_lex_state = 2},\n  [1519] = {.lex_state = 7, .external_lex_state = 2},\n  [1520] = {.lex_state = 7, .external_lex_state = 2},\n  [1521] = {.lex_state = 7, .external_lex_state = 2},\n  [1522] = {.lex_state = 7, .external_lex_state = 2},\n  [1523] = {.lex_state = 7, .external_lex_state = 2},\n  [1524] = {.lex_state = 7, .external_lex_state = 2},\n  [1525] = {.lex_state = 7, .external_lex_state = 2},\n  [1526] = {.lex_state = 7, .external_lex_state = 2},\n  [1527] = {.lex_state = 7, .external_lex_state = 2},\n  [1528] = {.lex_state = 7, .external_lex_state = 2},\n  [1529] = {.lex_state = 7, .external_lex_state = 3},\n  [1530] = {.lex_state = 7, .external_lex_state = 2},\n  [1531] = {.lex_state = 4},\n  [1532] = {.lex_state = 7, .external_lex_state = 2},\n  [1533] = {.lex_state = 7, .external_lex_state = 3},\n  [1534] = {.lex_state = 7, .external_lex_state = 2},\n  [1535] = {.lex_state = 7, .external_lex_state = 2},\n  [1536] = {.lex_state = 7, .external_lex_state = 3},\n  [1537] = {.lex_state = 7, .external_lex_state = 3},\n  [1538] = {.lex_state = 7, .external_lex_state = 3},\n  [1539] = {.lex_state = 7, .external_lex_state = 2},\n  [1540] = {.lex_state = 7, .external_lex_state = 2},\n  [1541] = {.lex_state = 7, .external_lex_state = 2},\n  [1542] = {.lex_state = 7, .external_lex_state = 2},\n  [1543] = {.lex_state = 7, .external_lex_state = 2},\n  [1544] = {.lex_state = 7, .external_lex_state = 2},\n  [1545] = {.lex_state = 7, .external_lex_state = 3},\n  [1546] = {.lex_state = 7, .external_lex_state = 3},\n  [1547] = {.lex_state = 7, .external_lex_state = 3},\n  [1548] = {.lex_state = 7, .external_lex_state = 3},\n  [1549] = {.lex_state = 7, .external_lex_state = 2},\n  [1550] = {.lex_state = 7, .external_lex_state = 2},\n  [1551] = {.lex_state = 7, .external_lex_state = 2},\n  [1552] = {.lex_state = 7, .external_lex_state = 3},\n  [1553] = {.lex_state = 7, .external_lex_state = 3},\n  [1554] = {.lex_state = 7, .external_lex_state = 2},\n  [1555] = {.lex_state = 7, .external_lex_state = 2},\n  [1556] = {.lex_state = 7, .external_lex_state = 3},\n  [1557] = {.lex_state = 7, .external_lex_state = 3},\n  [1558] = {.lex_state = 7, .external_lex_state = 3},\n  [1559] = {.lex_state = 7, .external_lex_state = 3},\n  [1560] = {.lex_state = 7, .external_lex_state = 2},\n  [1561] = {.lex_state = 7, .external_lex_state = 2},\n  [1562] = {.lex_state = 7, .external_lex_state = 2},\n  [1563] = {.lex_state = 7, .external_lex_state = 2},\n  [1564] = {.lex_state = 7, .external_lex_state = 3},\n  [1565] = {.lex_state = 7, .external_lex_state = 3},\n  [1566] = {.lex_state = 7, .external_lex_state = 2},\n  [1567] = {.lex_state = 7, .external_lex_state = 2},\n  [1568] = {.lex_state = 7, .external_lex_state = 3},\n  [1569] = {.lex_state = 7, .external_lex_state = 3},\n  [1570] = {.lex_state = 7, .external_lex_state = 3},\n  [1571] = {.lex_state = 7, .external_lex_state = 2},\n  [1572] = {.lex_state = 7, .external_lex_state = 2},\n  [1573] = {.lex_state = 7, .external_lex_state = 2},\n  [1574] = {.lex_state = 7, .external_lex_state = 2},\n  [1575] = {.lex_state = 7, .external_lex_state = 3},\n  [1576] = {.lex_state = 7, .external_lex_state = 2},\n  [1577] = {.lex_state = 7, .external_lex_state = 2},\n  [1578] = {.lex_state = 7, .external_lex_state = 2},\n  [1579] = {.lex_state = 7, .external_lex_state = 3},\n  [1580] = {.lex_state = 7, .external_lex_state = 2},\n  [1581] = {.lex_state = 7, .external_lex_state = 2},\n  [1582] = {.lex_state = 7, .external_lex_state = 2},\n  [1583] = {.lex_state = 7, .external_lex_state = 2},\n  [1584] = {.lex_state = 7, .external_lex_state = 2},\n  [1585] = {.lex_state = 7, .external_lex_state = 2},\n  [1586] = {.lex_state = 7, .external_lex_state = 2},\n  [1587] = {.lex_state = 7, .external_lex_state = 2},\n  [1588] = {.lex_state = 7, .external_lex_state = 2},\n  [1589] = {.lex_state = 7, .external_lex_state = 2},\n  [1590] = {.lex_state = 7, .external_lex_state = 2},\n  [1591] = {.lex_state = 7, .external_lex_state = 2},\n  [1592] = {.lex_state = 7, .external_lex_state = 2},\n  [1593] = {.lex_state = 7, .external_lex_state = 2},\n  [1594] = {.lex_state = 7, .external_lex_state = 2},\n  [1595] = {.lex_state = 7, .external_lex_state = 2},\n  [1596] = {.lex_state = 7, .external_lex_state = 2},\n  [1597] = {.lex_state = 7, .external_lex_state = 2},\n  [1598] = {.lex_state = 7, .external_lex_state = 2},\n  [1599] = {.lex_state = 7, .external_lex_state = 2},\n  [1600] = {.lex_state = 7, .external_lex_state = 2},\n  [1601] = {.lex_state = 7, .external_lex_state = 2},\n  [1602] = {.lex_state = 7, .external_lex_state = 2},\n  [1603] = {.lex_state = 7, .external_lex_state = 2},\n  [1604] = {.lex_state = 7, .external_lex_state = 3},\n  [1605] = {.lex_state = 7, .external_lex_state = 2},\n  [1606] = {.lex_state = 7, .external_lex_state = 2},\n  [1607] = {.lex_state = 7, .external_lex_state = 2},\n  [1608] = {.lex_state = 7, .external_lex_state = 2},\n  [1609] = {.lex_state = 7, .external_lex_state = 2},\n  [1610] = {.lex_state = 7, .external_lex_state = 2},\n  [1611] = {.lex_state = 7, .external_lex_state = 2},\n  [1612] = {.lex_state = 7, .external_lex_state = 2},\n  [1613] = {.lex_state = 7, .external_lex_state = 2},\n  [1614] = {.lex_state = 7, .external_lex_state = 2},\n  [1615] = {.lex_state = 7, .external_lex_state = 2},\n  [1616] = {.lex_state = 7, .external_lex_state = 3},\n  [1617] = {.lex_state = 7, .external_lex_state = 3},\n  [1618] = {.lex_state = 7, .external_lex_state = 2},\n  [1619] = {.lex_state = 7, .external_lex_state = 2},\n  [1620] = {.lex_state = 7, .external_lex_state = 2},\n  [1621] = {.lex_state = 7, .external_lex_state = 3},\n  [1622] = {.lex_state = 7, .external_lex_state = 3},\n  [1623] = {.lex_state = 7, .external_lex_state = 3},\n  [1624] = {.lex_state = 7, .external_lex_state = 2},\n  [1625] = {.lex_state = 7, .external_lex_state = 2},\n  [1626] = {.lex_state = 7, .external_lex_state = 2},\n  [1627] = {.lex_state = 7, .external_lex_state = 2},\n  [1628] = {.lex_state = 7, .external_lex_state = 2},\n  [1629] = {.lex_state = 7, .external_lex_state = 3},\n  [1630] = {.lex_state = 7, .external_lex_state = 2},\n  [1631] = {.lex_state = 7, .external_lex_state = 2},\n  [1632] = {.lex_state = 7, .external_lex_state = 3},\n  [1633] = {.lex_state = 7, .external_lex_state = 2},\n  [1634] = {.lex_state = 7, .external_lex_state = 3},\n  [1635] = {.lex_state = 7, .external_lex_state = 2},\n  [1636] = {.lex_state = 7, .external_lex_state = 2},\n  [1637] = {.lex_state = 7, .external_lex_state = 3},\n  [1638] = {.lex_state = 7, .external_lex_state = 2},\n  [1639] = {.lex_state = 7, .external_lex_state = 3},\n  [1640] = {.lex_state = 7, .external_lex_state = 3},\n  [1641] = {.lex_state = 7, .external_lex_state = 2},\n  [1642] = {.lex_state = 7, .external_lex_state = 2},\n  [1643] = {.lex_state = 7, .external_lex_state = 3},\n  [1644] = {.lex_state = 7, .external_lex_state = 2},\n  [1645] = {.lex_state = 7, .external_lex_state = 2},\n  [1646] = {.lex_state = 7, .external_lex_state = 2},\n  [1647] = {.lex_state = 7, .external_lex_state = 3},\n  [1648] = {.lex_state = 7, .external_lex_state = 3},\n  [1649] = {.lex_state = 7, .external_lex_state = 3},\n  [1650] = {.lex_state = 7, .external_lex_state = 3},\n  [1651] = {.lex_state = 7, .external_lex_state = 2},\n  [1652] = {.lex_state = 7, .external_lex_state = 2},\n  [1653] = {.lex_state = 7, .external_lex_state = 2},\n  [1654] = {.lex_state = 7, .external_lex_state = 2},\n  [1655] = {.lex_state = 7, .external_lex_state = 3},\n  [1656] = {.lex_state = 7, .external_lex_state = 3},\n  [1657] = {.lex_state = 7, .external_lex_state = 3},\n  [1658] = {.lex_state = 7, .external_lex_state = 3},\n  [1659] = {.lex_state = 7, .external_lex_state = 3},\n  [1660] = {.lex_state = 7, .external_lex_state = 3},\n  [1661] = {.lex_state = 7, .external_lex_state = 3},\n  [1662] = {.lex_state = 7, .external_lex_state = 3},\n  [1663] = {.lex_state = 7, .external_lex_state = 3},\n  [1664] = {.lex_state = 7, .external_lex_state = 3},\n  [1665] = {.lex_state = 7, .external_lex_state = 3},\n  [1666] = {.lex_state = 7, .external_lex_state = 3},\n  [1667] = {.lex_state = 7, .external_lex_state = 3},\n  [1668] = {.lex_state = 7, .external_lex_state = 3},\n  [1669] = {.lex_state = 7, .external_lex_state = 2},\n  [1670] = {.lex_state = 7, .external_lex_state = 2},\n  [1671] = {.lex_state = 7, .external_lex_state = 3},\n  [1672] = {.lex_state = 10, .external_lex_state = 2},\n  [1673] = {.lex_state = 7, .external_lex_state = 3},\n  [1674] = {.lex_state = 7, .external_lex_state = 3},\n  [1675] = {.lex_state = 7, .external_lex_state = 3},\n  [1676] = {.lex_state = 7, .external_lex_state = 2},\n  [1677] = {.lex_state = 7, .external_lex_state = 2},\n  [1678] = {.lex_state = 7, .external_lex_state = 2},\n  [1679] = {.lex_state = 7, .external_lex_state = 3},\n  [1680] = {.lex_state = 7, .external_lex_state = 2},\n  [1681] = {.lex_state = 7, .external_lex_state = 2},\n  [1682] = {.lex_state = 7, .external_lex_state = 3},\n  [1683] = {.lex_state = 7, .external_lex_state = 2},\n  [1684] = {.lex_state = 7, .external_lex_state = 2},\n  [1685] = {.lex_state = 7, .external_lex_state = 3},\n  [1686] = {.lex_state = 7, .external_lex_state = 3},\n  [1687] = {.lex_state = 7, .external_lex_state = 2},\n  [1688] = {.lex_state = 7, .external_lex_state = 2},\n  [1689] = {.lex_state = 7, .external_lex_state = 2},\n  [1690] = {.lex_state = 7, .external_lex_state = 3},\n  [1691] = {.lex_state = 7, .external_lex_state = 3},\n  [1692] = {.lex_state = 7, .external_lex_state = 3},\n  [1693] = {.lex_state = 7, .external_lex_state = 2},\n  [1694] = {.lex_state = 7, .external_lex_state = 3},\n  [1695] = {.lex_state = 7, .external_lex_state = 2},\n  [1696] = {.lex_state = 7, .external_lex_state = 3},\n  [1697] = {.lex_state = 7, .external_lex_state = 2},\n  [1698] = {.lex_state = 7, .external_lex_state = 3},\n  [1699] = {.lex_state = 7, .external_lex_state = 3},\n  [1700] = {.lex_state = 7, .external_lex_state = 3},\n  [1701] = {.lex_state = 7, .external_lex_state = 3},\n  [1702] = {.lex_state = 7, .external_lex_state = 3},\n  [1703] = {.lex_state = 7, .external_lex_state = 3},\n  [1704] = {.lex_state = 7, .external_lex_state = 3},\n  [1705] = {.lex_state = 7, .external_lex_state = 3},\n  [1706] = {.lex_state = 7, .external_lex_state = 3},\n  [1707] = {.lex_state = 7, .external_lex_state = 3},\n  [1708] = {.lex_state = 7, .external_lex_state = 3},\n  [1709] = {.lex_state = 7, .external_lex_state = 3},\n  [1710] = {.lex_state = 7, .external_lex_state = 3},\n  [1711] = {.lex_state = 7, .external_lex_state = 2},\n  [1712] = {.lex_state = 7, .external_lex_state = 3},\n  [1713] = {.lex_state = 7, .external_lex_state = 2},\n  [1714] = {.lex_state = 7, .external_lex_state = 2},\n  [1715] = {.lex_state = 7, .external_lex_state = 3},\n  [1716] = {.lex_state = 7, .external_lex_state = 2},\n  [1717] = {.lex_state = 7, .external_lex_state = 2},\n  [1718] = {.lex_state = 7, .external_lex_state = 2},\n  [1719] = {.lex_state = 7, .external_lex_state = 2},\n  [1720] = {.lex_state = 7, .external_lex_state = 2},\n  [1721] = {.lex_state = 7, .external_lex_state = 2},\n  [1722] = {.lex_state = 7, .external_lex_state = 2},\n  [1723] = {.lex_state = 7, .external_lex_state = 3},\n  [1724] = {.lex_state = 7, .external_lex_state = 3},\n  [1725] = {.lex_state = 7, .external_lex_state = 3},\n  [1726] = {.lex_state = 7, .external_lex_state = 2},\n  [1727] = {.lex_state = 7, .external_lex_state = 3},\n  [1728] = {.lex_state = 7, .external_lex_state = 3},\n  [1729] = {.lex_state = 7, .external_lex_state = 2},\n  [1730] = {.lex_state = 7, .external_lex_state = 3},\n  [1731] = {.lex_state = 7, .external_lex_state = 2},\n  [1732] = {.lex_state = 7, .external_lex_state = 3},\n  [1733] = {.lex_state = 7, .external_lex_state = 3},\n  [1734] = {.lex_state = 7, .external_lex_state = 3},\n  [1735] = {.lex_state = 7, .external_lex_state = 3},\n  [1736] = {.lex_state = 7, .external_lex_state = 3},\n  [1737] = {.lex_state = 7, .external_lex_state = 2},\n  [1738] = {.lex_state = 7, .external_lex_state = 3},\n  [1739] = {.lex_state = 7, .external_lex_state = 3},\n  [1740] = {.lex_state = 7, .external_lex_state = 3},\n  [1741] = {.lex_state = 7, .external_lex_state = 3},\n  [1742] = {.lex_state = 7, .external_lex_state = 3},\n  [1743] = {.lex_state = 7, .external_lex_state = 3},\n  [1744] = {.lex_state = 7, .external_lex_state = 3},\n  [1745] = {.lex_state = 7, .external_lex_state = 2},\n  [1746] = {.lex_state = 7, .external_lex_state = 3},\n  [1747] = {.lex_state = 7, .external_lex_state = 3},\n  [1748] = {.lex_state = 7, .external_lex_state = 3},\n  [1749] = {.lex_state = 7, .external_lex_state = 3},\n  [1750] = {.lex_state = 7, .external_lex_state = 2},\n  [1751] = {.lex_state = 7, .external_lex_state = 3},\n  [1752] = {.lex_state = 7, .external_lex_state = 3},\n  [1753] = {.lex_state = 7, .external_lex_state = 3},\n  [1754] = {.lex_state = 7, .external_lex_state = 3},\n  [1755] = {.lex_state = 7, .external_lex_state = 3},\n  [1756] = {.lex_state = 7, .external_lex_state = 3},\n  [1757] = {.lex_state = 7, .external_lex_state = 3},\n  [1758] = {.lex_state = 7, .external_lex_state = 3},\n  [1759] = {.lex_state = 7, .external_lex_state = 3},\n  [1760] = {.lex_state = 7, .external_lex_state = 2},\n  [1761] = {.lex_state = 7, .external_lex_state = 3},\n  [1762] = {.lex_state = 7, .external_lex_state = 3},\n  [1763] = {.lex_state = 7, .external_lex_state = 3},\n  [1764] = {.lex_state = 7, .external_lex_state = 3},\n  [1765] = {.lex_state = 7, .external_lex_state = 3},\n  [1766] = {.lex_state = 7, .external_lex_state = 3},\n  [1767] = {.lex_state = 7, .external_lex_state = 3},\n  [1768] = {.lex_state = 7, .external_lex_state = 3},\n  [1769] = {.lex_state = 7, .external_lex_state = 3},\n  [1770] = {.lex_state = 7, .external_lex_state = 3},\n  [1771] = {.lex_state = 7, .external_lex_state = 3},\n  [1772] = {.lex_state = 7, .external_lex_state = 3},\n  [1773] = {.lex_state = 7, .external_lex_state = 3},\n  [1774] = {.lex_state = 7, .external_lex_state = 2},\n  [1775] = {.lex_state = 7, .external_lex_state = 2},\n  [1776] = {.lex_state = 7, .external_lex_state = 2},\n  [1777] = {.lex_state = 7, .external_lex_state = 2},\n  [1778] = {.lex_state = 7, .external_lex_state = 2},\n  [1779] = {.lex_state = 7, .external_lex_state = 2},\n  [1780] = {.lex_state = 7, .external_lex_state = 2},\n  [1781] = {.lex_state = 7, .external_lex_state = 3},\n  [1782] = {.lex_state = 7, .external_lex_state = 2},\n  [1783] = {.lex_state = 7, .external_lex_state = 2},\n  [1784] = {.lex_state = 7, .external_lex_state = 2},\n  [1785] = {.lex_state = 7, .external_lex_state = 3},\n  [1786] = {.lex_state = 7, .external_lex_state = 2},\n  [1787] = {.lex_state = 7, .external_lex_state = 3},\n  [1788] = {.lex_state = 7, .external_lex_state = 3},\n  [1789] = {.lex_state = 7, .external_lex_state = 2},\n  [1790] = {.lex_state = 7, .external_lex_state = 2},\n  [1791] = {.lex_state = 7, .external_lex_state = 3},\n  [1792] = {.lex_state = 7, .external_lex_state = 3},\n  [1793] = {.lex_state = 7, .external_lex_state = 3},\n  [1794] = {.lex_state = 7, .external_lex_state = 3},\n  [1795] = {.lex_state = 7, .external_lex_state = 3},\n  [1796] = {.lex_state = 7, .external_lex_state = 3},\n  [1797] = {.lex_state = 7, .external_lex_state = 3},\n  [1798] = {.lex_state = 7, .external_lex_state = 3},\n  [1799] = {.lex_state = 7, .external_lex_state = 3},\n  [1800] = {.lex_state = 7, .external_lex_state = 3},\n  [1801] = {.lex_state = 7, .external_lex_state = 3},\n  [1802] = {.lex_state = 7, .external_lex_state = 3},\n  [1803] = {.lex_state = 7, .external_lex_state = 3},\n  [1804] = {.lex_state = 7, .external_lex_state = 3},\n  [1805] = {.lex_state = 7, .external_lex_state = 3},\n  [1806] = {.lex_state = 7, .external_lex_state = 3},\n  [1807] = {.lex_state = 7, .external_lex_state = 3},\n  [1808] = {.lex_state = 7, .external_lex_state = 3},\n  [1809] = {.lex_state = 7, .external_lex_state = 3},\n  [1810] = {.lex_state = 7, .external_lex_state = 3},\n  [1811] = {.lex_state = 7, .external_lex_state = 3},\n  [1812] = {.lex_state = 7, .external_lex_state = 3},\n  [1813] = {.lex_state = 7, .external_lex_state = 3},\n  [1814] = {.lex_state = 7, .external_lex_state = 3},\n  [1815] = {.lex_state = 7, .external_lex_state = 3},\n  [1816] = {.lex_state = 7, .external_lex_state = 3},\n  [1817] = {.lex_state = 7, .external_lex_state = 3},\n  [1818] = {.lex_state = 7, .external_lex_state = 3},\n  [1819] = {.lex_state = 7, .external_lex_state = 3},\n  [1820] = {.lex_state = 7, .external_lex_state = 2},\n  [1821] = {.lex_state = 7, .external_lex_state = 3},\n  [1822] = {.lex_state = 7, .external_lex_state = 2},\n  [1823] = {.lex_state = 7, .external_lex_state = 3},\n  [1824] = {.lex_state = 7, .external_lex_state = 3},\n  [1825] = {.lex_state = 7, .external_lex_state = 2},\n  [1826] = {.lex_state = 7, .external_lex_state = 2},\n  [1827] = {.lex_state = 10, .external_lex_state = 3},\n  [1828] = {.lex_state = 7, .external_lex_state = 3},\n  [1829] = {.lex_state = 7, .external_lex_state = 3},\n  [1830] = {.lex_state = 7, .external_lex_state = 3},\n  [1831] = {.lex_state = 7, .external_lex_state = 3},\n  [1832] = {.lex_state = 7, .external_lex_state = 3},\n  [1833] = {.lex_state = 7, .external_lex_state = 2},\n  [1834] = {.lex_state = 7, .external_lex_state = 3},\n  [1835] = {.lex_state = 7, .external_lex_state = 3},\n  [1836] = {.lex_state = 7, .external_lex_state = 3},\n  [1837] = {.lex_state = 7, .external_lex_state = 2},\n  [1838] = {.lex_state = 7, .external_lex_state = 3},\n  [1839] = {.lex_state = 7, .external_lex_state = 2},\n  [1840] = {.lex_state = 7, .external_lex_state = 3},\n  [1841] = {.lex_state = 7, .external_lex_state = 3},\n  [1842] = {.lex_state = 7, .external_lex_state = 3},\n  [1843] = {.lex_state = 7, .external_lex_state = 3},\n  [1844] = {.lex_state = 7, .external_lex_state = 2},\n  [1845] = {.lex_state = 7, .external_lex_state = 3},\n  [1846] = {.lex_state = 7, .external_lex_state = 2},\n  [1847] = {.lex_state = 7, .external_lex_state = 3},\n  [1848] = {.lex_state = 7, .external_lex_state = 3},\n  [1849] = {.lex_state = 7, .external_lex_state = 2},\n  [1850] = {.lex_state = 7, .external_lex_state = 2},\n  [1851] = {.lex_state = 7, .external_lex_state = 3},\n  [1852] = {.lex_state = 7, .external_lex_state = 2},\n  [1853] = {.lex_state = 7, .external_lex_state = 2},\n  [1854] = {.lex_state = 7, .external_lex_state = 3},\n  [1855] = {.lex_state = 7, .external_lex_state = 3},\n  [1856] = {.lex_state = 7, .external_lex_state = 2},\n  [1857] = {.lex_state = 7, .external_lex_state = 3},\n  [1858] = {.lex_state = 7, .external_lex_state = 2},\n  [1859] = {.lex_state = 7, .external_lex_state = 3},\n  [1860] = {.lex_state = 7, .external_lex_state = 3},\n  [1861] = {.lex_state = 7, .external_lex_state = 3},\n  [1862] = {.lex_state = 7, .external_lex_state = 2},\n  [1863] = {.lex_state = 7, .external_lex_state = 3},\n  [1864] = {.lex_state = 7, .external_lex_state = 2},\n  [1865] = {.lex_state = 7, .external_lex_state = 2},\n  [1866] = {.lex_state = 7, .external_lex_state = 3},\n  [1867] = {.lex_state = 7, .external_lex_state = 3},\n  [1868] = {.lex_state = 7, .external_lex_state = 3},\n  [1869] = {.lex_state = 7, .external_lex_state = 3},\n  [1870] = {.lex_state = 7, .external_lex_state = 3},\n  [1871] = {.lex_state = 7, .external_lex_state = 3},\n  [1872] = {.lex_state = 7, .external_lex_state = 2},\n  [1873] = {.lex_state = 7, .external_lex_state = 3},\n  [1874] = {.lex_state = 7, .external_lex_state = 2},\n  [1875] = {.lex_state = 7, .external_lex_state = 3},\n  [1876] = {.lex_state = 7, .external_lex_state = 2},\n  [1877] = {.lex_state = 7, .external_lex_state = 2},\n  [1878] = {.lex_state = 7, .external_lex_state = 3},\n  [1879] = {.lex_state = 7, .external_lex_state = 3},\n  [1880] = {.lex_state = 7, .external_lex_state = 3},\n  [1881] = {.lex_state = 7, .external_lex_state = 2},\n  [1882] = {.lex_state = 7, .external_lex_state = 2},\n  [1883] = {.lex_state = 7, .external_lex_state = 2},\n  [1884] = {.lex_state = 7, .external_lex_state = 2},\n  [1885] = {.lex_state = 7, .external_lex_state = 2},\n  [1886] = {.lex_state = 7, .external_lex_state = 2},\n  [1887] = {.lex_state = 7, .external_lex_state = 3},\n  [1888] = {.lex_state = 7, .external_lex_state = 2},\n  [1889] = {.lex_state = 7, .external_lex_state = 2},\n  [1890] = {.lex_state = 7, .external_lex_state = 2},\n  [1891] = {.lex_state = 7, .external_lex_state = 2},\n  [1892] = {.lex_state = 7, .external_lex_state = 2},\n  [1893] = {.lex_state = 7, .external_lex_state = 2},\n  [1894] = {.lex_state = 7, .external_lex_state = 2},\n  [1895] = {.lex_state = 7, .external_lex_state = 3},\n  [1896] = {.lex_state = 7, .external_lex_state = 2},\n  [1897] = {.lex_state = 7, .external_lex_state = 2},\n  [1898] = {.lex_state = 7, .external_lex_state = 3},\n  [1899] = {.lex_state = 7, .external_lex_state = 3},\n  [1900] = {.lex_state = 7, .external_lex_state = 2},\n  [1901] = {.lex_state = 7, .external_lex_state = 2},\n  [1902] = {.lex_state = 7, .external_lex_state = 3},\n  [1903] = {.lex_state = 7, .external_lex_state = 2},\n  [1904] = {.lex_state = 7, .external_lex_state = 3},\n  [1905] = {.lex_state = 7, .external_lex_state = 2},\n  [1906] = {.lex_state = 7, .external_lex_state = 2},\n  [1907] = {.lex_state = 7, .external_lex_state = 3},\n  [1908] = {.lex_state = 7, .external_lex_state = 2},\n  [1909] = {.lex_state = 7, .external_lex_state = 2},\n  [1910] = {.lex_state = 7, .external_lex_state = 2},\n  [1911] = {.lex_state = 7, .external_lex_state = 2},\n  [1912] = {.lex_state = 7, .external_lex_state = 3},\n  [1913] = {.lex_state = 7, .external_lex_state = 3},\n  [1914] = {.lex_state = 7, .external_lex_state = 3},\n  [1915] = {.lex_state = 7, .external_lex_state = 2},\n  [1916] = {.lex_state = 7, .external_lex_state = 2},\n  [1917] = {.lex_state = 10, .external_lex_state = 3},\n  [1918] = {.lex_state = 7, .external_lex_state = 2},\n  [1919] = {.lex_state = 7, .external_lex_state = 3},\n  [1920] = {.lex_state = 7, .external_lex_state = 3},\n  [1921] = {.lex_state = 7, .external_lex_state = 2},\n  [1922] = {.lex_state = 7, .external_lex_state = 2},\n  [1923] = {.lex_state = 7, .external_lex_state = 2},\n  [1924] = {.lex_state = 7, .external_lex_state = 2},\n  [1925] = {.lex_state = 7, .external_lex_state = 3},\n  [1926] = {.lex_state = 7, .external_lex_state = 3},\n  [1927] = {.lex_state = 7, .external_lex_state = 2},\n  [1928] = {.lex_state = 7, .external_lex_state = 3},\n  [1929] = {.lex_state = 7, .external_lex_state = 2},\n  [1930] = {.lex_state = 7, .external_lex_state = 2},\n  [1931] = {.lex_state = 7, .external_lex_state = 2},\n  [1932] = {.lex_state = 7, .external_lex_state = 3},\n  [1933] = {.lex_state = 7, .external_lex_state = 2},\n  [1934] = {.lex_state = 7, .external_lex_state = 2},\n  [1935] = {.lex_state = 7, .external_lex_state = 2},\n  [1936] = {.lex_state = 7, .external_lex_state = 2},\n  [1937] = {.lex_state = 7, .external_lex_state = 2},\n  [1938] = {.lex_state = 7, .external_lex_state = 2},\n  [1939] = {.lex_state = 7, .external_lex_state = 2},\n  [1940] = {.lex_state = 7, .external_lex_state = 2},\n  [1941] = {.lex_state = 7, .external_lex_state = 2},\n  [1942] = {.lex_state = 7, .external_lex_state = 2},\n  [1943] = {.lex_state = 7, .external_lex_state = 2},\n  [1944] = {.lex_state = 7, .external_lex_state = 2},\n  [1945] = {.lex_state = 7, .external_lex_state = 3},\n  [1946] = {.lex_state = 7, .external_lex_state = 3},\n  [1947] = {.lex_state = 7, .external_lex_state = 2},\n  [1948] = {.lex_state = 7, .external_lex_state = 2},\n  [1949] = {.lex_state = 7, .external_lex_state = 2},\n  [1950] = {.lex_state = 7, .external_lex_state = 2},\n  [1951] = {.lex_state = 7, .external_lex_state = 2},\n  [1952] = {.lex_state = 7, .external_lex_state = 3},\n  [1953] = {.lex_state = 7, .external_lex_state = 2},\n  [1954] = {.lex_state = 7, .external_lex_state = 2},\n  [1955] = {.lex_state = 7, .external_lex_state = 2},\n  [1956] = {.lex_state = 7, .external_lex_state = 2},\n  [1957] = {.lex_state = 7, .external_lex_state = 2},\n  [1958] = {.lex_state = 7, .external_lex_state = 2},\n  [1959] = {.lex_state = 7, .external_lex_state = 2},\n  [1960] = {.lex_state = 7, .external_lex_state = 2},\n  [1961] = {.lex_state = 7, .external_lex_state = 2},\n  [1962] = {.lex_state = 7, .external_lex_state = 2},\n  [1963] = {.lex_state = 7, .external_lex_state = 3},\n  [1964] = {.lex_state = 7, .external_lex_state = 2},\n  [1965] = {.lex_state = 7, .external_lex_state = 2},\n  [1966] = {.lex_state = 7, .external_lex_state = 2},\n  [1967] = {.lex_state = 7, .external_lex_state = 2},\n  [1968] = {.lex_state = 7, .external_lex_state = 2},\n  [1969] = {.lex_state = 7, .external_lex_state = 2},\n  [1970] = {.lex_state = 7, .external_lex_state = 2},\n  [1971] = {.lex_state = 7, .external_lex_state = 2},\n  [1972] = {.lex_state = 7, .external_lex_state = 3},\n  [1973] = {.lex_state = 7, .external_lex_state = 2},\n  [1974] = {.lex_state = 7, .external_lex_state = 2},\n  [1975] = {.lex_state = 7, .external_lex_state = 2},\n  [1976] = {.lex_state = 7, .external_lex_state = 2},\n  [1977] = {.lex_state = 7, .external_lex_state = 2},\n  [1978] = {.lex_state = 7, .external_lex_state = 2},\n  [1979] = {.lex_state = 7, .external_lex_state = 2},\n  [1980] = {.lex_state = 7, .external_lex_state = 2},\n  [1981] = {.lex_state = 7, .external_lex_state = 2},\n  [1982] = {.lex_state = 7, .external_lex_state = 2},\n  [1983] = {.lex_state = 7, .external_lex_state = 2},\n  [1984] = {.lex_state = 7, .external_lex_state = 2},\n  [1985] = {.lex_state = 7, .external_lex_state = 2},\n  [1986] = {.lex_state = 7, .external_lex_state = 2},\n  [1987] = {.lex_state = 7, .external_lex_state = 2},\n  [1988] = {.lex_state = 7, .external_lex_state = 2},\n  [1989] = {.lex_state = 7, .external_lex_state = 2},\n  [1990] = {.lex_state = 7, .external_lex_state = 2},\n  [1991] = {.lex_state = 7, .external_lex_state = 2},\n  [1992] = {.lex_state = 7, .external_lex_state = 2},\n  [1993] = {.lex_state = 7, .external_lex_state = 3},\n  [1994] = {.lex_state = 7, .external_lex_state = 2},\n  [1995] = {.lex_state = 7, .external_lex_state = 2},\n  [1996] = {.lex_state = 7, .external_lex_state = 2},\n  [1997] = {.lex_state = 7, .external_lex_state = 2},\n  [1998] = {.lex_state = 4},\n  [1999] = {.lex_state = 7, .external_lex_state = 2},\n  [2000] = {.lex_state = 10, .external_lex_state = 2},\n  [2001] = {.lex_state = 7, .external_lex_state = 2},\n  [2002] = {.lex_state = 7, .external_lex_state = 2},\n  [2003] = {.lex_state = 105},\n  [2004] = {.lex_state = 105},\n  [2005] = {.lex_state = 3},\n  [2006] = {.lex_state = 3},\n  [2007] = {.lex_state = 3},\n  [2008] = {.lex_state = 3},\n  [2009] = {.lex_state = 3},\n  [2010] = {.lex_state = 3},\n  [2011] = {.lex_state = 3},\n  [2012] = {.lex_state = 3},\n  [2013] = {.lex_state = 3},\n  [2014] = {.lex_state = 3},\n  [2015] = {.lex_state = 3},\n  [2016] = {.lex_state = 3},\n  [2017] = {.lex_state = 3},\n  [2018] = {.lex_state = 3},\n  [2019] = {.lex_state = 3},\n  [2020] = {.lex_state = 3},\n  [2021] = {.lex_state = 3},\n  [2022] = {.lex_state = 3},\n  [2023] = {.lex_state = 3},\n  [2024] = {.lex_state = 3},\n  [2025] = {.lex_state = 3},\n  [2026] = {.lex_state = 3},\n  [2027] = {.lex_state = 3},\n  [2028] = {.lex_state = 3},\n  [2029] = {.lex_state = 3},\n  [2030] = {.lex_state = 3},\n  [2031] = {.lex_state = 22},\n  [2032] = {.lex_state = 22},\n  [2033] = {.lex_state = 22},\n  [2034] = {.lex_state = 22},\n  [2035] = {.lex_state = 22},\n  [2036] = {.lex_state = 22},\n  [2037] = {.lex_state = 22},\n  [2038] = {.lex_state = 22},\n  [2039] = {.lex_state = 22},\n  [2040] = {.lex_state = 22},\n  [2041] = {.lex_state = 22},\n  [2042] = {.lex_state = 22},\n  [2043] = {.lex_state = 22},\n  [2044] = {.lex_state = 22},\n  [2045] = {.lex_state = 22},\n  [2046] = {.lex_state = 22},\n  [2047] = {.lex_state = 22},\n  [2048] = {.lex_state = 22},\n  [2049] = {.lex_state = 22},\n  [2050] = {.lex_state = 22},\n  [2051] = {.lex_state = 18},\n  [2052] = {.lex_state = 22},\n  [2053] = {.lex_state = 22},\n  [2054] = {.lex_state = 22},\n  [2055] = {.lex_state = 22},\n  [2056] = {.lex_state = 22},\n  [2057] = {.lex_state = 22},\n  [2058] = {.lex_state = 22},\n  [2059] = {.lex_state = 22},\n  [2060] = {.lex_state = 22},\n  [2061] = {.lex_state = 22},\n  [2062] = {.lex_state = 22},\n  [2063] = {.lex_state = 22},\n  [2064] = {.lex_state = 9},\n  [2065] = {.lex_state = 18},\n  [2066] = {.lex_state = 22},\n  [2067] = {.lex_state = 22},\n  [2068] = {.lex_state = 22},\n  [2069] = {.lex_state = 22},\n  [2070] = {.lex_state = 22},\n  [2071] = {.lex_state = 22},\n  [2072] = {.lex_state = 22},\n  [2073] = {.lex_state = 22},\n  [2074] = {.lex_state = 22},\n  [2075] = {.lex_state = 22},\n  [2076] = {.lex_state = 22},\n  [2077] = {.lex_state = 18},\n  [2078] = {.lex_state = 22},\n  [2079] = {.lex_state = 3},\n  [2080] = {.lex_state = 18},\n  [2081] = {.lex_state = 22},\n  [2082] = {.lex_state = 22},\n  [2083] = {.lex_state = 3},\n  [2084] = {.lex_state = 22},\n  [2085] = {.lex_state = 22, .external_lex_state = 4},\n  [2086] = {.lex_state = 22, .external_lex_state = 4},\n  [2087] = {.lex_state = 18, .external_lex_state = 4},\n  [2088] = {.lex_state = 22, .external_lex_state = 4},\n  [2089] = {.lex_state = 18, .external_lex_state = 4},\n  [2090] = {.lex_state = 18},\n  [2091] = {.lex_state = 22, .external_lex_state = 4},\n  [2092] = {.lex_state = 22, .external_lex_state = 4},\n  [2093] = {.lex_state = 22, .external_lex_state = 4},\n  [2094] = {.lex_state = 22, .external_lex_state = 4},\n  [2095] = {.lex_state = 18},\n  [2096] = {.lex_state = 22, .external_lex_state = 4},\n  [2097] = {.lex_state = 22, .external_lex_state = 4},\n  [2098] = {.lex_state = 22, .external_lex_state = 4},\n  [2099] = {.lex_state = 5},\n  [2100] = {.lex_state = 22, .external_lex_state = 4},\n  [2101] = {.lex_state = 5},\n  [2102] = {.lex_state = 22, .external_lex_state = 4},\n  [2103] = {.lex_state = 22, .external_lex_state = 4},\n  [2104] = {.lex_state = 22, .external_lex_state = 4},\n  [2105] = {.lex_state = 22, .external_lex_state = 4},\n  [2106] = {.lex_state = 22, .external_lex_state = 4},\n  [2107] = {.lex_state = 22, .external_lex_state = 4},\n  [2108] = {.lex_state = 22, .external_lex_state = 4},\n  [2109] = {.lex_state = 22, .external_lex_state = 4},\n  [2110] = {.lex_state = 22, .external_lex_state = 4},\n  [2111] = {.lex_state = 22, .external_lex_state = 4},\n  [2112] = {.lex_state = 22, .external_lex_state = 4},\n  [2113] = {.lex_state = 22, .external_lex_state = 4},\n  [2114] = {.lex_state = 18},\n  [2115] = {.lex_state = 22, .external_lex_state = 4},\n  [2116] = {.lex_state = 5},\n  [2117] = {.lex_state = 22, .external_lex_state = 4},\n  [2118] = {.lex_state = 22, .external_lex_state = 4},\n  [2119] = {.lex_state = 22, .external_lex_state = 4},\n  [2120] = {.lex_state = 22, .external_lex_state = 4},\n  [2121] = {.lex_state = 22, .external_lex_state = 4},\n  [2122] = {.lex_state = 22, .external_lex_state = 4},\n  [2123] = {.lex_state = 22, .external_lex_state = 4},\n  [2124] = {.lex_state = 22, .external_lex_state = 4},\n  [2125] = {.lex_state = 22, .external_lex_state = 4},\n  [2126] = {.lex_state = 22, .external_lex_state = 4},\n  [2127] = {.lex_state = 18},\n  [2128] = {.lex_state = 22, .external_lex_state = 4},\n  [2129] = {.lex_state = 22, .external_lex_state = 4},\n  [2130] = {.lex_state = 22, .external_lex_state = 4},\n  [2131] = {.lex_state = 18},\n  [2132] = {.lex_state = 5},\n  [2133] = {.lex_state = 5},\n  [2134] = {.lex_state = 22, .external_lex_state = 4},\n  [2135] = {.lex_state = 5},\n  [2136] = {.lex_state = 22, .external_lex_state = 4},\n  [2137] = {.lex_state = 22, .external_lex_state = 4},\n  [2138] = {.lex_state = 22, .external_lex_state = 4},\n  [2139] = {.lex_state = 22, .external_lex_state = 4},\n  [2140] = {.lex_state = 5},\n  [2141] = {.lex_state = 22, .external_lex_state = 4},\n  [2142] = {.lex_state = 22, .external_lex_state = 4},\n  [2143] = {.lex_state = 18},\n  [2144] = {.lex_state = 18},\n  [2145] = {.lex_state = 18},\n  [2146] = {.lex_state = 18},\n  [2147] = {.lex_state = 5},\n  [2148] = {.lex_state = 22, .external_lex_state = 4},\n  [2149] = {.lex_state = 18},\n  [2150] = {.lex_state = 18},\n  [2151] = {.lex_state = 22, .external_lex_state = 4},\n  [2152] = {.lex_state = 5},\n  [2153] = {.lex_state = 18},\n  [2154] = {.lex_state = 18},\n  [2155] = {.lex_state = 18},\n  [2156] = {.lex_state = 5},\n  [2157] = {.lex_state = 18},\n  [2158] = {.lex_state = 22, .external_lex_state = 4},\n  [2159] = {.lex_state = 5},\n  [2160] = {.lex_state = 18},\n  [2161] = {.lex_state = 18},\n  [2162] = {.lex_state = 5},\n  [2163] = {.lex_state = 18},\n  [2164] = {.lex_state = 18},\n  [2165] = {.lex_state = 18},\n  [2166] = {.lex_state = 22, .external_lex_state = 4},\n  [2167] = {.lex_state = 18},\n  [2168] = {.lex_state = 22, .external_lex_state = 4},\n  [2169] = {.lex_state = 18},\n  [2170] = {.lex_state = 5},\n  [2171] = {.lex_state = 5},\n  [2172] = {.lex_state = 18},\n  [2173] = {.lex_state = 18},\n  [2174] = {.lex_state = 18},\n  [2175] = {.lex_state = 18},\n  [2176] = {.lex_state = 22, .external_lex_state = 4},\n  [2177] = {.lex_state = 18},\n  [2178] = {.lex_state = 18},\n  [2179] = {.lex_state = 18},\n  [2180] = {.lex_state = 18},\n  [2181] = {.lex_state = 22, .external_lex_state = 4},\n  [2182] = {.lex_state = 18},\n  [2183] = {.lex_state = 18},\n  [2184] = {.lex_state = 18},\n  [2185] = {.lex_state = 18},\n  [2186] = {.lex_state = 18},\n  [2187] = {.lex_state = 18},\n  [2188] = {.lex_state = 18},\n  [2189] = {.lex_state = 18},\n  [2190] = {.lex_state = 18},\n  [2191] = {.lex_state = 22, .external_lex_state = 4},\n  [2192] = {.lex_state = 18},\n  [2193] = {.lex_state = 18},\n  [2194] = {.lex_state = 18},\n  [2195] = {.lex_state = 18},\n  [2196] = {.lex_state = 18},\n  [2197] = {.lex_state = 18},\n  [2198] = {.lex_state = 13, .external_lex_state = 4},\n  [2199] = {.lex_state = 22, .external_lex_state = 4},\n  [2200] = {.lex_state = 18},\n  [2201] = {.lex_state = 22, .external_lex_state = 4},\n  [2202] = {.lex_state = 18},\n  [2203] = {.lex_state = 13},\n  [2204] = {.lex_state = 22, .external_lex_state = 4},\n  [2205] = {.lex_state = 22, .external_lex_state = 4},\n  [2206] = {.lex_state = 22, .external_lex_state = 5},\n  [2207] = {.lex_state = 22, .external_lex_state = 5},\n  [2208] = {.lex_state = 22, .external_lex_state = 5},\n  [2209] = {.lex_state = 22, .external_lex_state = 4},\n  [2210] = {.lex_state = 22, .external_lex_state = 4},\n  [2211] = {.lex_state = 22, .external_lex_state = 4},\n  [2212] = {.lex_state = 22, .external_lex_state = 4},\n  [2213] = {.lex_state = 22, .external_lex_state = 5},\n  [2214] = {.lex_state = 22, .external_lex_state = 5},\n  [2215] = {.lex_state = 13},\n  [2216] = {.lex_state = 22, .external_lex_state = 4},\n  [2217] = {.lex_state = 22, .external_lex_state = 5},\n  [2218] = {.lex_state = 22, .external_lex_state = 5},\n  [2219] = {.lex_state = 22, .external_lex_state = 4},\n  [2220] = {.lex_state = 22, .external_lex_state = 5},\n  [2221] = {.lex_state = 22, .external_lex_state = 5},\n  [2222] = {.lex_state = 22, .external_lex_state = 4},\n  [2223] = {.lex_state = 22, .external_lex_state = 5},\n  [2224] = {.lex_state = 22, .external_lex_state = 5},\n  [2225] = {.lex_state = 22, .external_lex_state = 5},\n  [2226] = {.lex_state = 22, .external_lex_state = 5},\n  [2227] = {.lex_state = 22, .external_lex_state = 5},\n  [2228] = {.lex_state = 22, .external_lex_state = 4},\n  [2229] = {.lex_state = 22, .external_lex_state = 5},\n  [2230] = {.lex_state = 22, .external_lex_state = 5},\n  [2231] = {.lex_state = 22, .external_lex_state = 5},\n  [2232] = {.lex_state = 22, .external_lex_state = 5},\n  [2233] = {.lex_state = 22, .external_lex_state = 5},\n  [2234] = {.lex_state = 22, .external_lex_state = 5},\n  [2235] = {.lex_state = 22, .external_lex_state = 5},\n  [2236] = {.lex_state = 22, .external_lex_state = 5},\n  [2237] = {.lex_state = 22, .external_lex_state = 5},\n  [2238] = {.lex_state = 22, .external_lex_state = 5},\n  [2239] = {.lex_state = 22, .external_lex_state = 5},\n  [2240] = {.lex_state = 22, .external_lex_state = 4},\n  [2241] = {.lex_state = 22, .external_lex_state = 5},\n  [2242] = {.lex_state = 22, .external_lex_state = 5},\n  [2243] = {.lex_state = 22, .external_lex_state = 4},\n  [2244] = {.lex_state = 22, .external_lex_state = 5},\n  [2245] = {.lex_state = 22, .external_lex_state = 4},\n  [2246] = {.lex_state = 22, .external_lex_state = 5},\n  [2247] = {.lex_state = 22, .external_lex_state = 5},\n  [2248] = {.lex_state = 22, .external_lex_state = 5},\n  [2249] = {.lex_state = 22, .external_lex_state = 4},\n  [2250] = {.lex_state = 22, .external_lex_state = 5},\n  [2251] = {.lex_state = 22, .external_lex_state = 4},\n  [2252] = {.lex_state = 22, .external_lex_state = 4},\n  [2253] = {.lex_state = 22, .external_lex_state = 5},\n  [2254] = {.lex_state = 22, .external_lex_state = 4},\n  [2255] = {.lex_state = 22, .external_lex_state = 4},\n  [2256] = {.lex_state = 22, .external_lex_state = 4},\n  [2257] = {.lex_state = 22, .external_lex_state = 5},\n  [2258] = {.lex_state = 22, .external_lex_state = 4},\n  [2259] = {.lex_state = 22, .external_lex_state = 5},\n  [2260] = {.lex_state = 22, .external_lex_state = 4},\n  [2261] = {.lex_state = 22, .external_lex_state = 4},\n  [2262] = {.lex_state = 22, .external_lex_state = 5},\n  [2263] = {.lex_state = 22, .external_lex_state = 4},\n  [2264] = {.lex_state = 22, .external_lex_state = 4},\n  [2265] = {.lex_state = 22, .external_lex_state = 5},\n  [2266] = {.lex_state = 22, .external_lex_state = 4},\n  [2267] = {.lex_state = 22, .external_lex_state = 4},\n  [2268] = {.lex_state = 22, .external_lex_state = 5},\n  [2269] = {.lex_state = 22, .external_lex_state = 4},\n  [2270] = {.lex_state = 22, .external_lex_state = 5},\n  [2271] = {.lex_state = 22, .external_lex_state = 5},\n  [2272] = {.lex_state = 22, .external_lex_state = 5},\n  [2273] = {.lex_state = 22, .external_lex_state = 4},\n  [2274] = {.lex_state = 22, .external_lex_state = 4},\n  [2275] = {.lex_state = 22, .external_lex_state = 5},\n  [2276] = {.lex_state = 22, .external_lex_state = 4},\n  [2277] = {.lex_state = 22, .external_lex_state = 4},\n  [2278] = {.lex_state = 22, .external_lex_state = 4},\n  [2279] = {.lex_state = 22, .external_lex_state = 4},\n  [2280] = {.lex_state = 22, .external_lex_state = 4},\n  [2281] = {.lex_state = 22, .external_lex_state = 4},\n  [2282] = {.lex_state = 22, .external_lex_state = 4},\n  [2283] = {.lex_state = 22, .external_lex_state = 4},\n  [2284] = {.lex_state = 22, .external_lex_state = 4},\n  [2285] = {.lex_state = 22, .external_lex_state = 4},\n  [2286] = {.lex_state = 22, .external_lex_state = 4},\n  [2287] = {.lex_state = 22, .external_lex_state = 4},\n  [2288] = {.lex_state = 13, .external_lex_state = 4},\n  [2289] = {.lex_state = 22, .external_lex_state = 4},\n  [2290] = {.lex_state = 22, .external_lex_state = 4},\n  [2291] = {.lex_state = 22, .external_lex_state = 5},\n  [2292] = {.lex_state = 22, .external_lex_state = 4},\n  [2293] = {.lex_state = 22, .external_lex_state = 4},\n  [2294] = {.lex_state = 22, .external_lex_state = 4},\n  [2295] = {.lex_state = 22, .external_lex_state = 4},\n  [2296] = {.lex_state = 22, .external_lex_state = 5},\n  [2297] = {.lex_state = 22, .external_lex_state = 4},\n  [2298] = {.lex_state = 13, .external_lex_state = 4},\n  [2299] = {.lex_state = 13, .external_lex_state = 4},\n  [2300] = {.lex_state = 22, .external_lex_state = 5},\n  [2301] = {.lex_state = 22, .external_lex_state = 5},\n  [2302] = {.lex_state = 22},\n  [2303] = {.lex_state = 22, .external_lex_state = 4},\n  [2304] = {.lex_state = 22},\n  [2305] = {.lex_state = 22, .external_lex_state = 5},\n  [2306] = {.lex_state = 22, .external_lex_state = 5},\n  [2307] = {.lex_state = 22},\n  [2308] = {.lex_state = 22, .external_lex_state = 5},\n  [2309] = {.lex_state = 22, .external_lex_state = 4},\n  [2310] = {.lex_state = 22, .external_lex_state = 5},\n  [2311] = {.lex_state = 22, .external_lex_state = 5},\n  [2312] = {.lex_state = 22, .external_lex_state = 5},\n  [2313] = {.lex_state = 22, .external_lex_state = 5},\n  [2314] = {.lex_state = 105, .external_lex_state = 4},\n  [2315] = {.lex_state = 105, .external_lex_state = 4},\n  [2316] = {.lex_state = 13, .external_lex_state = 4},\n  [2317] = {.lex_state = 13, .external_lex_state = 4},\n  [2318] = {.lex_state = 4},\n  [2319] = {.lex_state = 22, .external_lex_state = 5},\n  [2320] = {.lex_state = 13},\n  [2321] = {.lex_state = 105, .external_lex_state = 4},\n  [2322] = {.lex_state = 105, .external_lex_state = 4},\n  [2323] = {.lex_state = 105, .external_lex_state = 4},\n  [2324] = {.lex_state = 3},\n  [2325] = {.lex_state = 4},\n  [2326] = {.lex_state = 4},\n  [2327] = {.lex_state = 13},\n  [2328] = {.lex_state = 22, .external_lex_state = 5},\n  [2329] = {.lex_state = 22, .external_lex_state = 5},\n  [2330] = {.lex_state = 4},\n  [2331] = {.lex_state = 22},\n  [2332] = {.lex_state = 22, .external_lex_state = 5},\n  [2333] = {.lex_state = 13},\n  [2334] = {.lex_state = 22},\n  [2335] = {.lex_state = 3},\n  [2336] = {.lex_state = 105, .external_lex_state = 4},\n  [2337] = {.lex_state = 22},\n  [2338] = {.lex_state = 4},\n  [2339] = {.lex_state = 4},\n  [2340] = {.lex_state = 13},\n  [2341] = {.lex_state = 13},\n  [2342] = {.lex_state = 105, .external_lex_state = 4},\n  [2343] = {.lex_state = 22, .external_lex_state = 5},\n  [2344] = {.lex_state = 4},\n  [2345] = {.lex_state = 13, .external_lex_state = 4},\n  [2346] = {.lex_state = 4},\n  [2347] = {.lex_state = 13},\n  [2348] = {.lex_state = 13},\n  [2349] = {.lex_state = 4},\n  [2350] = {.lex_state = 4},\n  [2351] = {.lex_state = 4},\n  [2352] = {.lex_state = 4},\n  [2353] = {.lex_state = 3, .external_lex_state = 4},\n  [2354] = {.lex_state = 22, .external_lex_state = 5},\n  [2355] = {.lex_state = 4},\n  [2356] = {.lex_state = 3, .external_lex_state = 4},\n  [2357] = {.lex_state = 13, .external_lex_state = 4},\n  [2358] = {.lex_state = 4},\n  [2359] = {.lex_state = 3},\n  [2360] = {.lex_state = 3},\n  [2361] = {.lex_state = 22, .external_lex_state = 4},\n  [2362] = {.lex_state = 4},\n  [2363] = {.lex_state = 4},\n  [2364] = {.lex_state = 105, .external_lex_state = 4},\n  [2365] = {.lex_state = 105, .external_lex_state = 4},\n  [2366] = {.lex_state = 4},\n  [2367] = {.lex_state = 13},\n  [2368] = {.lex_state = 4},\n  [2369] = {.lex_state = 13},\n  [2370] = {.lex_state = 13},\n  [2371] = {.lex_state = 13},\n  [2372] = {.lex_state = 3},\n  [2373] = {.lex_state = 4},\n  [2374] = {.lex_state = 105, .external_lex_state = 4},\n  [2375] = {.lex_state = 13},\n  [2376] = {.lex_state = 13, .external_lex_state = 4},\n  [2377] = {.lex_state = 4},\n  [2378] = {.lex_state = 105, .external_lex_state = 4},\n  [2379] = {.lex_state = 20, .external_lex_state = 6},\n  [2380] = {.lex_state = 22, .external_lex_state = 5},\n  [2381] = {.lex_state = 22, .external_lex_state = 5},\n  [2382] = {.lex_state = 22, .external_lex_state = 5},\n  [2383] = {.lex_state = 22, .external_lex_state = 5},\n  [2384] = {.lex_state = 22, .external_lex_state = 5},\n  [2385] = {.lex_state = 22, .external_lex_state = 5},\n  [2386] = {.lex_state = 22, .external_lex_state = 5},\n  [2387] = {.lex_state = 22, .external_lex_state = 5},\n  [2388] = {.lex_state = 22, .external_lex_state = 5},\n  [2389] = {.lex_state = 22, .external_lex_state = 5},\n  [2390] = {.lex_state = 3},\n  [2391] = {.lex_state = 22, .external_lex_state = 5},\n  [2392] = {.lex_state = 22, .external_lex_state = 5},\n  [2393] = {.lex_state = 22, .external_lex_state = 5},\n  [2394] = {.lex_state = 9},\n  [2395] = {.lex_state = 22, .external_lex_state = 5},\n  [2396] = {.lex_state = 22, .external_lex_state = 5},\n  [2397] = {.lex_state = 22, .external_lex_state = 5},\n  [2398] = {.lex_state = 22, .external_lex_state = 5},\n  [2399] = {.lex_state = 20, .external_lex_state = 6},\n  [2400] = {.lex_state = 22, .external_lex_state = 5},\n  [2401] = {.lex_state = 22, .external_lex_state = 5},\n  [2402] = {.lex_state = 22, .external_lex_state = 5},\n  [2403] = {.lex_state = 22, .external_lex_state = 5},\n  [2404] = {.lex_state = 22, .external_lex_state = 5},\n  [2405] = {.lex_state = 105, .external_lex_state = 4},\n  [2406] = {.lex_state = 105, .external_lex_state = 4},\n  [2407] = {.lex_state = 105, .external_lex_state = 4},\n  [2408] = {.lex_state = 22, .external_lex_state = 5},\n  [2409] = {.lex_state = 22, .external_lex_state = 4},\n  [2410] = {.lex_state = 22, .external_lex_state = 4},\n  [2411] = {.lex_state = 22, .external_lex_state = 5},\n  [2412] = {.lex_state = 22, .external_lex_state = 5},\n  [2413] = {.lex_state = 22, .external_lex_state = 4},\n  [2414] = {.lex_state = 105, .external_lex_state = 4},\n  [2415] = {.lex_state = 22, .external_lex_state = 5},\n  [2416] = {.lex_state = 22, .external_lex_state = 5},\n  [2417] = {.lex_state = 20, .external_lex_state = 6},\n  [2418] = {.lex_state = 20, .external_lex_state = 6},\n  [2419] = {.lex_state = 22, .external_lex_state = 5},\n  [2420] = {.lex_state = 20, .external_lex_state = 6},\n  [2421] = {.lex_state = 105, .external_lex_state = 4},\n  [2422] = {.lex_state = 22, .external_lex_state = 5},\n  [2423] = {.lex_state = 22, .external_lex_state = 5},\n  [2424] = {.lex_state = 22, .external_lex_state = 4},\n  [2425] = {.lex_state = 20, .external_lex_state = 6},\n  [2426] = {.lex_state = 20, .external_lex_state = 6},\n  [2427] = {.lex_state = 105, .external_lex_state = 4},\n  [2428] = {.lex_state = 105, .external_lex_state = 4},\n  [2429] = {.lex_state = 105, .external_lex_state = 4},\n  [2430] = {.lex_state = 20, .external_lex_state = 6},\n  [2431] = {.lex_state = 22, .external_lex_state = 5},\n  [2432] = {.lex_state = 22, .external_lex_state = 5},\n  [2433] = {.lex_state = 13},\n  [2434] = {.lex_state = 13, .external_lex_state = 4},\n  [2435] = {.lex_state = 13, .external_lex_state = 4},\n  [2436] = {.lex_state = 22, .external_lex_state = 5},\n  [2437] = {.lex_state = 22, .external_lex_state = 5},\n  [2438] = {.lex_state = 22, .external_lex_state = 5},\n  [2439] = {.lex_state = 105, .external_lex_state = 4},\n  [2440] = {.lex_state = 22, .external_lex_state = 5},\n  [2441] = {.lex_state = 22, .external_lex_state = 5},\n  [2442] = {.lex_state = 22, .external_lex_state = 5},\n  [2443] = {.lex_state = 22, .external_lex_state = 5},\n  [2444] = {.lex_state = 3},\n  [2445] = {.lex_state = 22, .external_lex_state = 5},\n  [2446] = {.lex_state = 22, .external_lex_state = 5},\n  [2447] = {.lex_state = 22, .external_lex_state = 5},\n  [2448] = {.lex_state = 22, .external_lex_state = 5},\n  [2449] = {.lex_state = 22, .external_lex_state = 5},\n  [2450] = {.lex_state = 22, .external_lex_state = 5},\n  [2451] = {.lex_state = 22, .external_lex_state = 5},\n  [2452] = {.lex_state = 22, .external_lex_state = 5},\n  [2453] = {.lex_state = 0, .external_lex_state = 4},\n  [2454] = {.lex_state = 13},\n  [2455] = {.lex_state = 9},\n  [2456] = {.lex_state = 13},\n  [2457] = {.lex_state = 9},\n  [2458] = {.lex_state = 20},\n  [2459] = {.lex_state = 0, .external_lex_state = 4},\n  [2460] = {.lex_state = 4},\n  [2461] = {.lex_state = 0, .external_lex_state = 4},\n  [2462] = {.lex_state = 13},\n  [2463] = {.lex_state = 3, .external_lex_state = 4},\n  [2464] = {.lex_state = 20},\n  [2465] = {.lex_state = 3, .external_lex_state = 4},\n  [2466] = {.lex_state = 13},\n  [2467] = {.lex_state = 0, .external_lex_state = 4},\n  [2468] = {.lex_state = 3, .external_lex_state = 4},\n  [2469] = {.lex_state = 3, .external_lex_state = 4},\n  [2470] = {.lex_state = 13},\n  [2471] = {.lex_state = 20},\n  [2472] = {.lex_state = 3, .external_lex_state = 4},\n  [2473] = {.lex_state = 20},\n  [2474] = {.lex_state = 4, .external_lex_state = 4},\n  [2475] = {.lex_state = 4, .external_lex_state = 4},\n  [2476] = {.lex_state = 0, .external_lex_state = 4},\n  [2477] = {.lex_state = 4},\n  [2478] = {.lex_state = 0, .external_lex_state = 4},\n  [2479] = {.lex_state = 20},\n  [2480] = {.lex_state = 4},\n  [2481] = {.lex_state = 0, .external_lex_state = 4},\n  [2482] = {.lex_state = 105},\n  [2483] = {.lex_state = 20},\n  [2484] = {.lex_state = 9, .external_lex_state = 4},\n  [2485] = {.lex_state = 105},\n  [2486] = {.lex_state = 0, .external_lex_state = 4},\n  [2487] = {.lex_state = 0, .external_lex_state = 4},\n  [2488] = {.lex_state = 0, .external_lex_state = 4},\n  [2489] = {.lex_state = 3},\n  [2490] = {.lex_state = 4},\n  [2491] = {.lex_state = 13},\n  [2492] = {.lex_state = 13},\n  [2493] = {.lex_state = 4},\n  [2494] = {.lex_state = 4},\n  [2495] = {.lex_state = 13},\n  [2496] = {.lex_state = 22},\n  [2497] = {.lex_state = 0, .external_lex_state = 4},\n  [2498] = {.lex_state = 3, .external_lex_state = 4},\n  [2499] = {.lex_state = 105},\n  [2500] = {.lex_state = 4},\n  [2501] = {.lex_state = 4},\n  [2502] = {.lex_state = 13},\n  [2503] = {.lex_state = 4},\n  [2504] = {.lex_state = 0, .external_lex_state = 4},\n  [2505] = {.lex_state = 4},\n  [2506] = {.lex_state = 4},\n  [2507] = {.lex_state = 105},\n  [2508] = {.lex_state = 0, .external_lex_state = 4},\n  [2509] = {.lex_state = 3},\n  [2510] = {.lex_state = 22, .external_lex_state = 5},\n  [2511] = {.lex_state = 105},\n  [2512] = {.lex_state = 9},\n  [2513] = {.lex_state = 9},\n  [2514] = {.lex_state = 4},\n  [2515] = {.lex_state = 3, .external_lex_state = 4},\n  [2516] = {.lex_state = 0, .external_lex_state = 4},\n  [2517] = {.lex_state = 4},\n  [2518] = {.lex_state = 0, .external_lex_state = 4},\n  [2519] = {.lex_state = 13},\n  [2520] = {.lex_state = 3, .external_lex_state = 4},\n  [2521] = {.lex_state = 4},\n  [2522] = {.lex_state = 22},\n  [2523] = {.lex_state = 0, .external_lex_state = 4},\n  [2524] = {.lex_state = 20},\n  [2525] = {.lex_state = 9},\n  [2526] = {.lex_state = 13},\n  [2527] = {.lex_state = 0, .external_lex_state = 4},\n  [2528] = {.lex_state = 0, .external_lex_state = 4},\n  [2529] = {.lex_state = 0, .external_lex_state = 4},\n  [2530] = {.lex_state = 3},\n  [2531] = {.lex_state = 0},\n  [2532] = {.lex_state = 13},\n  [2533] = {.lex_state = 20},\n  [2534] = {.lex_state = 13},\n  [2535] = {.lex_state = 13},\n  [2536] = {.lex_state = 13},\n  [2537] = {.lex_state = 22, .external_lex_state = 5},\n  [2538] = {.lex_state = 22, .external_lex_state = 5},\n  [2539] = {.lex_state = 0, .external_lex_state = 4},\n  [2540] = {.lex_state = 20},\n  [2541] = {.lex_state = 20, .external_lex_state = 6},\n  [2542] = {.lex_state = 20},\n  [2543] = {.lex_state = 0},\n  [2544] = {.lex_state = 0, .external_lex_state = 4},\n  [2545] = {.lex_state = 13},\n  [2546] = {.lex_state = 13},\n  [2547] = {.lex_state = 13},\n  [2548] = {.lex_state = 3},\n  [2549] = {.lex_state = 3},\n  [2550] = {.lex_state = 13},\n  [2551] = {.lex_state = 13},\n  [2552] = {.lex_state = 13},\n  [2553] = {.lex_state = 20},\n  [2554] = {.lex_state = 3},\n  [2555] = {.lex_state = 0},\n  [2556] = {.lex_state = 20},\n  [2557] = {.lex_state = 20, .external_lex_state = 6},\n  [2558] = {.lex_state = 105, .external_lex_state = 4},\n  [2559] = {.lex_state = 20},\n  [2560] = {.lex_state = 13},\n  [2561] = {.lex_state = 22, .external_lex_state = 5},\n  [2562] = {.lex_state = 3},\n  [2563] = {.lex_state = 0},\n  [2564] = {.lex_state = 13},\n  [2565] = {.lex_state = 13},\n  [2566] = {.lex_state = 13},\n  [2567] = {.lex_state = 0, .external_lex_state = 4},\n  [2568] = {.lex_state = 13},\n  [2569] = {.lex_state = 4},\n  [2570] = {.lex_state = 13},\n  [2571] = {.lex_state = 0, .external_lex_state = 4},\n  [2572] = {.lex_state = 4},\n  [2573] = {.lex_state = 13},\n  [2574] = {.lex_state = 4},\n  [2575] = {.lex_state = 22},\n  [2576] = {.lex_state = 13},\n  [2577] = {.lex_state = 3},\n  [2578] = {.lex_state = 0, .external_lex_state = 4},\n  [2579] = {.lex_state = 20},\n  [2580] = {.lex_state = 105, .external_lex_state = 4},\n  [2581] = {.lex_state = 3},\n  [2582] = {.lex_state = 105, .external_lex_state = 4},\n  [2583] = {.lex_state = 3},\n  [2584] = {.lex_state = 20, .external_lex_state = 6},\n  [2585] = {.lex_state = 0},\n  [2586] = {.lex_state = 13},\n  [2587] = {.lex_state = 15},\n  [2588] = {.lex_state = 13},\n  [2589] = {.lex_state = 0, .external_lex_state = 4},\n  [2590] = {.lex_state = 15},\n  [2591] = {.lex_state = 0},\n  [2592] = {.lex_state = 22},\n  [2593] = {.lex_state = 13},\n  [2594] = {.lex_state = 13},\n  [2595] = {.lex_state = 3},\n  [2596] = {.lex_state = 13},\n  [2597] = {.lex_state = 13},\n  [2598] = {.lex_state = 0, .external_lex_state = 4},\n  [2599] = {.lex_state = 13},\n  [2600] = {.lex_state = 13},\n  [2601] = {.lex_state = 13},\n  [2602] = {.lex_state = 9},\n  [2603] = {.lex_state = 4},\n  [2604] = {.lex_state = 0, .external_lex_state = 4},\n  [2605] = {.lex_state = 20, .external_lex_state = 6},\n  [2606] = {.lex_state = 13},\n  [2607] = {.lex_state = 13},\n  [2608] = {.lex_state = 13},\n  [2609] = {.lex_state = 3},\n  [2610] = {.lex_state = 0, .external_lex_state = 4},\n  [2611] = {.lex_state = 13},\n  [2612] = {.lex_state = 20},\n  [2613] = {.lex_state = 20},\n  [2614] = {.lex_state = 13},\n  [2615] = {.lex_state = 13},\n  [2616] = {.lex_state = 13},\n  [2617] = {.lex_state = 22},\n  [2618] = {.lex_state = 13},\n  [2619] = {.lex_state = 13},\n  [2620] = {.lex_state = 13},\n  [2621] = {.lex_state = 13},\n  [2622] = {.lex_state = 3},\n  [2623] = {.lex_state = 22},\n  [2624] = {.lex_state = 13},\n  [2625] = {.lex_state = 0},\n  [2626] = {.lex_state = 0, .external_lex_state = 4},\n  [2627] = {.lex_state = 22},\n  [2628] = {.lex_state = 0, .external_lex_state = 4},\n  [2629] = {.lex_state = 13},\n  [2630] = {.lex_state = 13},\n  [2631] = {.lex_state = 13},\n  [2632] = {.lex_state = 0, .external_lex_state = 4},\n  [2633] = {.lex_state = 13},\n  [2634] = {.lex_state = 0, .external_lex_state = 4},\n  [2635] = {.lex_state = 3},\n  [2636] = {.lex_state = 13},\n  [2637] = {.lex_state = 13},\n  [2638] = {.lex_state = 0, .external_lex_state = 4},\n  [2639] = {.lex_state = 13},\n  [2640] = {.lex_state = 22},\n  [2641] = {.lex_state = 0, .external_lex_state = 4},\n  [2642] = {.lex_state = 0},\n  [2643] = {.lex_state = 13},\n  [2644] = {.lex_state = 13},\n  [2645] = {.lex_state = 0, .external_lex_state = 4},\n  [2646] = {.lex_state = 9},\n  [2647] = {.lex_state = 0, .external_lex_state = 4},\n  [2648] = {.lex_state = 9},\n  [2649] = {.lex_state = 22},\n  [2650] = {.lex_state = 22},\n  [2651] = {.lex_state = 20, .external_lex_state = 6},\n  [2652] = {.lex_state = 105, .external_lex_state = 4},\n  [2653] = {.lex_state = 13},\n  [2654] = {.lex_state = 13},\n  [2655] = {.lex_state = 3},\n  [2656] = {.lex_state = 0, .external_lex_state = 4},\n  [2657] = {.lex_state = 13},\n  [2658] = {.lex_state = 13},\n  [2659] = {.lex_state = 22, .external_lex_state = 5},\n  [2660] = {.lex_state = 0, .external_lex_state = 4},\n  [2661] = {.lex_state = 13},\n  [2662] = {.lex_state = 0, .external_lex_state = 4},\n  [2663] = {.lex_state = 3},\n  [2664] = {.lex_state = 0, .external_lex_state = 4},\n  [2665] = {.lex_state = 13, .external_lex_state = 4},\n  [2666] = {.lex_state = 20, .external_lex_state = 6},\n  [2667] = {.lex_state = 0, .external_lex_state = 4},\n  [2668] = {.lex_state = 0, .external_lex_state = 4},\n  [2669] = {.lex_state = 0, .external_lex_state = 4},\n  [2670] = {.lex_state = 0, .external_lex_state = 4},\n  [2671] = {.lex_state = 9, .external_lex_state = 5},\n  [2672] = {.lex_state = 13},\n  [2673] = {.lex_state = 13},\n  [2674] = {.lex_state = 20, .external_lex_state = 6},\n  [2675] = {.lex_state = 13},\n  [2676] = {.lex_state = 13},\n  [2677] = {.lex_state = 13},\n  [2678] = {.lex_state = 13},\n  [2679] = {.lex_state = 0, .external_lex_state = 4},\n  [2680] = {.lex_state = 0, .external_lex_state = 4},\n  [2681] = {.lex_state = 20, .external_lex_state = 6},\n  [2682] = {.lex_state = 13},\n  [2683] = {.lex_state = 13},\n  [2684] = {.lex_state = 13},\n  [2685] = {.lex_state = 105, .external_lex_state = 5},\n  [2686] = {.lex_state = 0, .external_lex_state = 4},\n  [2687] = {.lex_state = 3, .external_lex_state = 4},\n  [2688] = {.lex_state = 0, .external_lex_state = 4},\n  [2689] = {.lex_state = 20, .external_lex_state = 6},\n  [2690] = {.lex_state = 13},\n  [2691] = {.lex_state = 0, .external_lex_state = 4},\n  [2692] = {.lex_state = 13},\n  [2693] = {.lex_state = 13},\n  [2694] = {.lex_state = 0, .external_lex_state = 4},\n  [2695] = {.lex_state = 0, .external_lex_state = 4},\n  [2696] = {.lex_state = 0, .external_lex_state = 4},\n  [2697] = {.lex_state = 0},\n  [2698] = {.lex_state = 13},\n  [2699] = {.lex_state = 0, .external_lex_state = 4},\n  [2700] = {.lex_state = 13},\n  [2701] = {.lex_state = 13},\n  [2702] = {.lex_state = 0, .external_lex_state = 4},\n  [2703] = {.lex_state = 0, .external_lex_state = 4},\n  [2704] = {.lex_state = 0, .external_lex_state = 4},\n  [2705] = {.lex_state = 20, .external_lex_state = 6},\n  [2706] = {.lex_state = 3},\n  [2707] = {.lex_state = 0, .external_lex_state = 4},\n  [2708] = {.lex_state = 0, .external_lex_state = 4},\n  [2709] = {.lex_state = 105},\n  [2710] = {.lex_state = 105},\n  [2711] = {.lex_state = 20},\n  [2712] = {.lex_state = 0, .external_lex_state = 4},\n  [2713] = {.lex_state = 20},\n  [2714] = {.lex_state = 20, .external_lex_state = 6},\n  [2715] = {.lex_state = 13},\n  [2716] = {.lex_state = 20},\n  [2717] = {.lex_state = 22},\n  [2718] = {.lex_state = 0, .external_lex_state = 4},\n  [2719] = {.lex_state = 13},\n  [2720] = {.lex_state = 0, .external_lex_state = 4},\n  [2721] = {.lex_state = 0, .external_lex_state = 4},\n  [2722] = {.lex_state = 0, .external_lex_state = 4},\n  [2723] = {.lex_state = 13},\n  [2724] = {.lex_state = 13},\n  [2725] = {.lex_state = 13},\n  [2726] = {.lex_state = 0, .external_lex_state = 4},\n  [2727] = {.lex_state = 0, .external_lex_state = 4},\n  [2728] = {.lex_state = 13},\n  [2729] = {.lex_state = 0, .external_lex_state = 4},\n  [2730] = {.lex_state = 0, .external_lex_state = 4},\n  [2731] = {.lex_state = 105, .external_lex_state = 5},\n  [2732] = {.lex_state = 0, .external_lex_state = 4},\n  [2733] = {.lex_state = 105},\n  [2734] = {.lex_state = 13},\n  [2735] = {.lex_state = 13},\n  [2736] = {.lex_state = 0, .external_lex_state = 4},\n  [2737] = {.lex_state = 3},\n  [2738] = {.lex_state = 0},\n  [2739] = {.lex_state = 13},\n  [2740] = {.lex_state = 13},\n  [2741] = {.lex_state = 13},\n  [2742] = {.lex_state = 0, .external_lex_state = 4},\n  [2743] = {.lex_state = 0, .external_lex_state = 4},\n  [2744] = {.lex_state = 13},\n  [2745] = {.lex_state = 0, .external_lex_state = 4},\n  [2746] = {.lex_state = 20, .external_lex_state = 6},\n  [2747] = {.lex_state = 0, .external_lex_state = 4},\n  [2748] = {.lex_state = 13},\n  [2749] = {.lex_state = 105},\n  [2750] = {.lex_state = 105},\n  [2751] = {.lex_state = 0, .external_lex_state = 4},\n  [2752] = {.lex_state = 105},\n  [2753] = {.lex_state = 0, .external_lex_state = 4},\n  [2754] = {.lex_state = 0, .external_lex_state = 4},\n  [2755] = {.lex_state = 13},\n  [2756] = {.lex_state = 13},\n  [2757] = {.lex_state = 13},\n  [2758] = {.lex_state = 0, .external_lex_state = 4},\n  [2759] = {.lex_state = 3, .external_lex_state = 4},\n  [2760] = {.lex_state = 4},\n  [2761] = {.lex_state = 0, .external_lex_state = 4},\n  [2762] = {.lex_state = 13},\n  [2763] = {.lex_state = 3},\n  [2764] = {.lex_state = 4},\n  [2765] = {.lex_state = 4},\n  [2766] = {.lex_state = 0},\n  [2767] = {.lex_state = 3},\n  [2768] = {.lex_state = 3},\n  [2769] = {.lex_state = 0, .external_lex_state = 4},\n  [2770] = {.lex_state = 4},\n  [2771] = {.lex_state = 4},\n  [2772] = {.lex_state = 4},\n  [2773] = {.lex_state = 0, .external_lex_state = 4},\n  [2774] = {.lex_state = 0, .external_lex_state = 4},\n  [2775] = {.lex_state = 105},\n  [2776] = {.lex_state = 4},\n  [2777] = {.lex_state = 4},\n  [2778] = {.lex_state = 4},\n  [2779] = {.lex_state = 4},\n  [2780] = {.lex_state = 13},\n  [2781] = {.lex_state = 0, .external_lex_state = 4},\n  [2782] = {.lex_state = 13},\n  [2783] = {.lex_state = 13, .external_lex_state = 4},\n  [2784] = {.lex_state = 4},\n  [2785] = {.lex_state = 0, .external_lex_state = 4},\n  [2786] = {.lex_state = 0},\n  [2787] = {.lex_state = 3},\n  [2788] = {.lex_state = 105},\n  [2789] = {.lex_state = 13},\n  [2790] = {.lex_state = 4},\n  [2791] = {.lex_state = 20, .external_lex_state = 6},\n  [2792] = {.lex_state = 105},\n  [2793] = {.lex_state = 105},\n  [2794] = {.lex_state = 0, .external_lex_state = 4},\n  [2795] = {.lex_state = 13, .external_lex_state = 4},\n  [2796] = {.lex_state = 13},\n  [2797] = {.lex_state = 13},\n  [2798] = {.lex_state = 13},\n  [2799] = {.lex_state = 3},\n  [2800] = {.lex_state = 0, .external_lex_state = 4},\n  [2801] = {.lex_state = 105},\n  [2802] = {.lex_state = 13},\n  [2803] = {.lex_state = 13},\n  [2804] = {.lex_state = 3},\n  [2805] = {.lex_state = 13},\n  [2806] = {.lex_state = 0, .external_lex_state = 4},\n  [2807] = {.lex_state = 13},\n  [2808] = {.lex_state = 20, .external_lex_state = 6},\n  [2809] = {.lex_state = 105},\n  [2810] = {.lex_state = 0, .external_lex_state = 4},\n  [2811] = {.lex_state = 0, .external_lex_state = 4},\n  [2812] = {.lex_state = 13},\n  [2813] = {.lex_state = 20, .external_lex_state = 6},\n  [2814] = {.lex_state = 20, .external_lex_state = 6},\n  [2815] = {.lex_state = 0},\n  [2816] = {.lex_state = 13},\n  [2817] = {.lex_state = 0},\n  [2818] = {.lex_state = 0},\n  [2819] = {.lex_state = 13},\n  [2820] = {.lex_state = 0},\n  [2821] = {.lex_state = 105, .external_lex_state = 4},\n  [2822] = {.lex_state = 13},\n  [2823] = {.lex_state = 13},\n  [2824] = {.lex_state = 13},\n  [2825] = {.lex_state = 13},\n  [2826] = {.lex_state = 0},\n  [2827] = {.lex_state = 13},\n  [2828] = {.lex_state = 4},\n  [2829] = {.lex_state = 20},\n  [2830] = {.lex_state = 0},\n  [2831] = {.lex_state = 22},\n  [2832] = {.lex_state = 13},\n  [2833] = {.lex_state = 13},\n  [2834] = {.lex_state = 13},\n  [2835] = {.lex_state = 0},\n  [2836] = {.lex_state = 105},\n  [2837] = {.lex_state = 19},\n  [2838] = {.lex_state = 1},\n  [2839] = {.lex_state = 23},\n  [2840] = {.lex_state = 13},\n  [2841] = {.lex_state = 19},\n  [2842] = {.lex_state = 23},\n  [2843] = {.lex_state = 19},\n  [2844] = {.lex_state = 23},\n  [2845] = {.lex_state = 23},\n  [2846] = {.lex_state = 19},\n  [2847] = {.lex_state = 0, .external_lex_state = 4},\n  [2848] = {.lex_state = 0, .external_lex_state = 4},\n  [2849] = {.lex_state = 13},\n  [2850] = {.lex_state = 0},\n  [2851] = {.lex_state = 23},\n  [2852] = {.lex_state = 19},\n  [2853] = {.lex_state = 13},\n  [2854] = {.lex_state = 13},\n  [2855] = {.lex_state = 23},\n  [2856] = {.lex_state = 0},\n  [2857] = {.lex_state = 19},\n  [2858] = {.lex_state = 3},\n  [2859] = {.lex_state = 105},\n  [2860] = {.lex_state = 0, .external_lex_state = 4},\n  [2861] = {.lex_state = 22},\n  [2862] = {.lex_state = 0},\n  [2863] = {.lex_state = 13},\n  [2864] = {.lex_state = 0, .external_lex_state = 4},\n  [2865] = {.lex_state = 22},\n  [2866] = {.lex_state = 0},\n  [2867] = {.lex_state = 1},\n  [2868] = {.lex_state = 23},\n  [2869] = {.lex_state = 0, .external_lex_state = 5},\n  [2870] = {.lex_state = 19},\n  [2871] = {.lex_state = 0},\n  [2872] = {.lex_state = 13},\n  [2873] = {.lex_state = 1},\n  [2874] = {.lex_state = 13},\n  [2875] = {.lex_state = 13},\n  [2876] = {.lex_state = 13},\n  [2877] = {.lex_state = 13},\n  [2878] = {.lex_state = 13},\n  [2879] = {.lex_state = 0},\n  [2880] = {.lex_state = 3},\n  [2881] = {.lex_state = 13},\n  [2882] = {.lex_state = 0},\n  [2883] = {.lex_state = 13},\n  [2884] = {.lex_state = 13},\n  [2885] = {.lex_state = 20, .external_lex_state = 6},\n  [2886] = {.lex_state = 3, .external_lex_state = 4},\n  [2887] = {.lex_state = 13},\n  [2888] = {.lex_state = 23},\n  [2889] = {.lex_state = 19},\n  [2890] = {.lex_state = 23},\n  [2891] = {.lex_state = 19},\n  [2892] = {.lex_state = 13},\n  [2893] = {.lex_state = 13},\n  [2894] = {.lex_state = 13},\n  [2895] = {.lex_state = 1},\n  [2896] = {.lex_state = 13},\n  [2897] = {.lex_state = 105, .external_lex_state = 4},\n  [2898] = {.lex_state = 105, .external_lex_state = 4},\n  [2899] = {.lex_state = 0, .external_lex_state = 5},\n  [2900] = {.lex_state = 0, .external_lex_state = 5},\n  [2901] = {.lex_state = 105, .external_lex_state = 4},\n  [2902] = {.lex_state = 0},\n  [2903] = {.lex_state = 23},\n  [2904] = {.lex_state = 0, .external_lex_state = 5},\n  [2905] = {.lex_state = 0, .external_lex_state = 5},\n  [2906] = {.lex_state = 23},\n  [2907] = {.lex_state = 19},\n  [2908] = {.lex_state = 19},\n  [2909] = {.lex_state = 0, .external_lex_state = 5},\n  [2910] = {.lex_state = 105},\n  [2911] = {.lex_state = 3},\n  [2912] = {.lex_state = 0, .external_lex_state = 5},\n  [2913] = {.lex_state = 13},\n  [2914] = {.lex_state = 13},\n  [2915] = {.lex_state = 4},\n  [2916] = {.lex_state = 15},\n  [2917] = {.lex_state = 19},\n  [2918] = {.lex_state = 23},\n  [2919] = {.lex_state = 0},\n  [2920] = {.lex_state = 105, .external_lex_state = 4},\n  [2921] = {.lex_state = 105, .external_lex_state = 4},\n  [2922] = {.lex_state = 0},\n  [2923] = {.lex_state = 105, .external_lex_state = 4},\n  [2924] = {.lex_state = 0, .external_lex_state = 5},\n  [2925] = {.lex_state = 13},\n  [2926] = {.lex_state = 0, .external_lex_state = 5},\n  [2927] = {.lex_state = 0, .external_lex_state = 5},\n  [2928] = {.lex_state = 13},\n  [2929] = {.lex_state = 13},\n  [2930] = {.lex_state = 3},\n  [2931] = {.lex_state = 23},\n  [2932] = {.lex_state = 0, .external_lex_state = 5},\n  [2933] = {.lex_state = 19},\n  [2934] = {.lex_state = 23},\n  [2935] = {.lex_state = 105, .external_lex_state = 4},\n  [2936] = {.lex_state = 105, .external_lex_state = 4},\n  [2937] = {.lex_state = 19},\n  [2938] = {.lex_state = 0, .external_lex_state = 5},\n  [2939] = {.lex_state = 0, .external_lex_state = 4},\n  [2940] = {.lex_state = 0, .external_lex_state = 5},\n  [2941] = {.lex_state = 0, .external_lex_state = 4},\n  [2942] = {.lex_state = 22},\n  [2943] = {.lex_state = 0},\n  [2944] = {.lex_state = 105, .external_lex_state = 4},\n  [2945] = {.lex_state = 13},\n  [2946] = {.lex_state = 13},\n  [2947] = {.lex_state = 0, .external_lex_state = 4},\n  [2948] = {.lex_state = 105, .external_lex_state = 5},\n  [2949] = {.lex_state = 13},\n  [2950] = {.lex_state = 13},\n  [2951] = {.lex_state = 0},\n  [2952] = {.lex_state = 13},\n  [2953] = {.lex_state = 105, .external_lex_state = 5},\n  [2954] = {.lex_state = 13},\n  [2955] = {.lex_state = 105, .external_lex_state = 5},\n  [2956] = {.lex_state = 15},\n  [2957] = {.lex_state = 23},\n  [2958] = {.lex_state = 20, .external_lex_state = 6},\n  [2959] = {.lex_state = 19},\n  [2960] = {.lex_state = 13},\n  [2961] = {.lex_state = 105, .external_lex_state = 5},\n  [2962] = {.lex_state = 105, .external_lex_state = 4},\n  [2963] = {.lex_state = 4},\n  [2964] = {.lex_state = 105, .external_lex_state = 4},\n  [2965] = {.lex_state = 13},\n  [2966] = {.lex_state = 3},\n  [2967] = {.lex_state = 13},\n  [2968] = {.lex_state = 13},\n  [2969] = {.lex_state = 3},\n  [2970] = {.lex_state = 105},\n  [2971] = {.lex_state = 0, .external_lex_state = 4},\n  [2972] = {.lex_state = 0, .external_lex_state = 4},\n  [2973] = {.lex_state = 0},\n  [2974] = {.lex_state = 0},\n  [2975] = {.lex_state = 0},\n  [2976] = {.lex_state = 0, .external_lex_state = 4},\n  [2977] = {.lex_state = 0},\n  [2978] = {.lex_state = 0},\n  [2979] = {.lex_state = 0},\n  [2980] = {.lex_state = 13},\n  [2981] = {.lex_state = 0},\n  [2982] = {.lex_state = 0},\n  [2983] = {.lex_state = 105},\n  [2984] = {.lex_state = 0},\n  [2985] = {.lex_state = 0},\n  [2986] = {.lex_state = 3},\n  [2987] = {.lex_state = 0, .external_lex_state = 4},\n  [2988] = {.lex_state = 105},\n  [2989] = {.lex_state = 0, .external_lex_state = 4},\n  [2990] = {.lex_state = 0},\n  [2991] = {.lex_state = 0, .external_lex_state = 4},\n  [2992] = {.lex_state = 105},\n  [2993] = {.lex_state = 3},\n  [2994] = {.lex_state = 0},\n  [2995] = {.lex_state = 0},\n  [2996] = {.lex_state = 0, .external_lex_state = 4},\n  [2997] = {.lex_state = 3},\n  [2998] = {.lex_state = 0, .external_lex_state = 4},\n  [2999] = {.lex_state = 0, .external_lex_state = 4},\n  [3000] = {.lex_state = 0, .external_lex_state = 4},\n  [3001] = {.lex_state = 105},\n  [3002] = {.lex_state = 0},\n  [3003] = {.lex_state = 13},\n  [3004] = {.lex_state = 0},\n  [3005] = {.lex_state = 0},\n  [3006] = {.lex_state = 0, .external_lex_state = 4},\n  [3007] = {.lex_state = 0},\n  [3008] = {.lex_state = 13},\n  [3009] = {.lex_state = 1},\n  [3010] = {.lex_state = 3},\n  [3011] = {.lex_state = 0, .external_lex_state = 4},\n  [3012] = {.lex_state = 3},\n  [3013] = {.lex_state = 0, .external_lex_state = 4},\n  [3014] = {.lex_state = 0, .external_lex_state = 4},\n  [3015] = {.lex_state = 0, .external_lex_state = 4},\n  [3016] = {.lex_state = 0},\n  [3017] = {.lex_state = 3},\n  [3018] = {.lex_state = 0},\n  [3019] = {.lex_state = 0, .external_lex_state = 4},\n  [3020] = {.lex_state = 3},\n  [3021] = {.lex_state = 20, .external_lex_state = 6},\n  [3022] = {.lex_state = 0},\n  [3023] = {.lex_state = 0},\n  [3024] = {.lex_state = 0},\n  [3025] = {.lex_state = 0},\n  [3026] = {.lex_state = 3, .external_lex_state = 4},\n  [3027] = {.lex_state = 0},\n  [3028] = {.lex_state = 105},\n  [3029] = {.lex_state = 105},\n  [3030] = {.lex_state = 13},\n  [3031] = {.lex_state = 3},\n  [3032] = {.lex_state = 0},\n  [3033] = {.lex_state = 105},\n  [3034] = {.lex_state = 0},\n  [3035] = {.lex_state = 0},\n  [3036] = {.lex_state = 0, .external_lex_state = 4},\n  [3037] = {.lex_state = 0},\n  [3038] = {.lex_state = 0},\n  [3039] = {.lex_state = 13},\n  [3040] = {.lex_state = 105},\n  [3041] = {.lex_state = 105},\n  [3042] = {.lex_state = 13},\n  [3043] = {.lex_state = 0},\n  [3044] = {.lex_state = 0},\n  [3045] = {.lex_state = 0},\n  [3046] = {.lex_state = 0},\n  [3047] = {.lex_state = 4},\n  [3048] = {.lex_state = 3, .external_lex_state = 4},\n  [3049] = {.lex_state = 0},\n  [3050] = {.lex_state = 0},\n  [3051] = {.lex_state = 3},\n  [3052] = {.lex_state = 0, .external_lex_state = 4},\n  [3053] = {.lex_state = 3},\n  [3054] = {.lex_state = 13},\n  [3055] = {.lex_state = 0},\n  [3056] = {.lex_state = 3},\n  [3057] = {.lex_state = 0},\n  [3058] = {.lex_state = 0, .external_lex_state = 4},\n  [3059] = {.lex_state = 3},\n  [3060] = {.lex_state = 0, .external_lex_state = 4},\n  [3061] = {.lex_state = 0, .external_lex_state = 4},\n  [3062] = {.lex_state = 0},\n  [3063] = {.lex_state = 0, .external_lex_state = 4},\n  [3064] = {.lex_state = 3},\n  [3065] = {.lex_state = 0, .external_lex_state = 4},\n  [3066] = {.lex_state = 0, .external_lex_state = 4},\n  [3067] = {.lex_state = 0},\n  [3068] = {.lex_state = 0, .external_lex_state = 4},\n  [3069] = {.lex_state = 13},\n  [3070] = {.lex_state = 3},\n  [3071] = {.lex_state = 0, .external_lex_state = 4},\n  [3072] = {.lex_state = 0, .external_lex_state = 4},\n  [3073] = {.lex_state = 0, .external_lex_state = 4},\n  [3074] = {.lex_state = 0, .external_lex_state = 4},\n  [3075] = {.lex_state = 0},\n  [3076] = {.lex_state = 0, .external_lex_state = 4},\n  [3077] = {.lex_state = 0, .external_lex_state = 4},\n  [3078] = {.lex_state = 0},\n  [3079] = {.lex_state = 0, .external_lex_state = 4},\n  [3080] = {.lex_state = 0},\n  [3081] = {.lex_state = 0, .external_lex_state = 4},\n  [3082] = {.lex_state = 13},\n  [3083] = {.lex_state = 0},\n  [3084] = {.lex_state = 0},\n  [3085] = {.lex_state = 0},\n  [3086] = {.lex_state = 0, .external_lex_state = 4},\n  [3087] = {.lex_state = 0},\n  [3088] = {.lex_state = 0},\n  [3089] = {.lex_state = 0, .external_lex_state = 4},\n  [3090] = {.lex_state = 0, .external_lex_state = 4},\n  [3091] = {.lex_state = 3},\n  [3092] = {.lex_state = 0},\n  [3093] = {.lex_state = 0, .external_lex_state = 4},\n  [3094] = {.lex_state = 0},\n  [3095] = {.lex_state = 3},\n  [3096] = {.lex_state = 4},\n  [3097] = {.lex_state = 3},\n  [3098] = {.lex_state = 0},\n  [3099] = {.lex_state = 0},\n  [3100] = {.lex_state = 0},\n  [3101] = {.lex_state = 0},\n  [3102] = {.lex_state = 3},\n  [3103] = {.lex_state = 4},\n  [3104] = {.lex_state = 0},\n  [3105] = {.lex_state = 0},\n  [3106] = {.lex_state = 0},\n  [3107] = {.lex_state = 3},\n  [3108] = {.lex_state = 105},\n  [3109] = {.lex_state = 0, .external_lex_state = 4},\n  [3110] = {.lex_state = 0},\n  [3111] = {.lex_state = 13},\n  [3112] = {.lex_state = 105},\n  [3113] = {.lex_state = 0},\n  [3114] = {.lex_state = 0},\n  [3115] = {.lex_state = 0},\n  [3116] = {.lex_state = 0, .external_lex_state = 4},\n  [3117] = {.lex_state = 0},\n  [3118] = {.lex_state = 0},\n  [3119] = {.lex_state = 3},\n  [3120] = {.lex_state = 0},\n  [3121] = {.lex_state = 0},\n  [3122] = {.lex_state = 9},\n  [3123] = {.lex_state = 0},\n  [3124] = {.lex_state = 3},\n  [3125] = {.lex_state = 3, .external_lex_state = 4},\n  [3126] = {.lex_state = 0, .external_lex_state = 4},\n  [3127] = {.lex_state = 3},\n  [3128] = {.lex_state = 3},\n  [3129] = {.lex_state = 0},\n  [3130] = {.lex_state = 3},\n  [3131] = {.lex_state = 0},\n  [3132] = {.lex_state = 0},\n  [3133] = {.lex_state = 0},\n  [3134] = {.lex_state = 3},\n  [3135] = {.lex_state = 0},\n  [3136] = {.lex_state = 0},\n  [3137] = {.lex_state = 3},\n  [3138] = {.lex_state = 0},\n  [3139] = {.lex_state = 0},\n  [3140] = {.lex_state = 0},\n  [3141] = {.lex_state = 0},\n  [3142] = {.lex_state = 3},\n  [3143] = {.lex_state = 0},\n  [3144] = {.lex_state = 0},\n  [3145] = {.lex_state = 0},\n  [3146] = {.lex_state = 3},\n  [3147] = {.lex_state = 3},\n  [3148] = {.lex_state = 105},\n  [3149] = {.lex_state = 3, .external_lex_state = 4},\n  [3150] = {.lex_state = 0},\n  [3151] = {.lex_state = 3},\n  [3152] = {.lex_state = 3, .external_lex_state = 4},\n  [3153] = {.lex_state = 4},\n  [3154] = {.lex_state = 0},\n  [3155] = {.lex_state = 0},\n  [3156] = {.lex_state = 105},\n  [3157] = {.lex_state = 13},\n  [3158] = {.lex_state = 0},\n  [3159] = {.lex_state = 4},\n  [3160] = {.lex_state = 0},\n  [3161] = {.lex_state = 0},\n  [3162] = {.lex_state = 0},\n  [3163] = {.lex_state = 105},\n  [3164] = {.lex_state = 4},\n  [3165] = {.lex_state = 3, .external_lex_state = 4},\n  [3166] = {.lex_state = 3},\n  [3167] = {.lex_state = 13},\n  [3168] = {.lex_state = 0},\n  [3169] = {.lex_state = 0},\n  [3170] = {.lex_state = 0},\n  [3171] = {.lex_state = 105},\n  [3172] = {.lex_state = 0},\n  [3173] = {.lex_state = 0},\n  [3174] = {.lex_state = 0},\n  [3175] = {.lex_state = 3},\n  [3176] = {.lex_state = 3},\n  [3177] = {.lex_state = 105},\n  [3178] = {.lex_state = 105},\n  [3179] = {.lex_state = 0},\n  [3180] = {.lex_state = 0},\n  [3181] = {.lex_state = 3},\n  [3182] = {.lex_state = 0},\n  [3183] = {.lex_state = 0},\n  [3184] = {.lex_state = 0},\n  [3185] = {.lex_state = 0},\n  [3186] = {.lex_state = 0},\n  [3187] = {.lex_state = 105},\n  [3188] = {.lex_state = 105},\n  [3189] = {.lex_state = 105},\n  [3190] = {.lex_state = 0},\n  [3191] = {.lex_state = 0},\n  [3192] = {.lex_state = 0},\n  [3193] = {.lex_state = 105},\n  [3194] = {.lex_state = 0},\n  [3195] = {.lex_state = 3},\n  [3196] = {.lex_state = 0},\n  [3197] = {.lex_state = 0, .external_lex_state = 4},\n  [3198] = {.lex_state = 105},\n  [3199] = {.lex_state = 0},\n  [3200] = {.lex_state = 0},\n  [3201] = {.lex_state = 0},\n  [3202] = {.lex_state = 0},\n  [3203] = {.lex_state = 105},\n  [3204] = {.lex_state = 3},\n  [3205] = {.lex_state = 1},\n  [3206] = {.lex_state = 3},\n  [3207] = {.lex_state = 0},\n  [3208] = {.lex_state = 0},\n  [3209] = {.lex_state = 3},\n  [3210] = {.lex_state = 3},\n  [3211] = {.lex_state = 0},\n  [3212] = {.lex_state = 0, .external_lex_state = 4},\n  [3213] = {.lex_state = 105},\n  [3214] = {.lex_state = 3},\n  [3215] = {.lex_state = 3},\n  [3216] = {.lex_state = 3},\n  [3217] = {.lex_state = 105},\n  [3218] = {.lex_state = 105},\n  [3219] = {.lex_state = 105},\n  [3220] = {.lex_state = 3},\n  [3221] = {.lex_state = 0, .external_lex_state = 4},\n  [3222] = {.lex_state = 105},\n  [3223] = {.lex_state = 105},\n  [3224] = {.lex_state = 105},\n  [3225] = {.lex_state = 105},\n  [3226] = {.lex_state = 0},\n  [3227] = {.lex_state = 105},\n  [3228] = {.lex_state = 0},\n  [3229] = {.lex_state = 105},\n  [3230] = {.lex_state = 3},\n  [3231] = {.lex_state = 105},\n  [3232] = {.lex_state = 105},\n  [3233] = {.lex_state = 105},\n  [3234] = {.lex_state = 0},\n  [3235] = {.lex_state = 0, .external_lex_state = 4},\n  [3236] = {.lex_state = 0},\n  [3237] = {.lex_state = 3},\n  [3238] = {.lex_state = 3},\n  [3239] = {.lex_state = 0},\n  [3240] = {.lex_state = 0},\n  [3241] = {.lex_state = 0, .external_lex_state = 4},\n  [3242] = {.lex_state = 0, .external_lex_state = 4},\n  [3243] = {.lex_state = 0},\n  [3244] = {.lex_state = 105},\n  [3245] = {.lex_state = 105},\n  [3246] = {.lex_state = 105},\n  [3247] = {.lex_state = 3},\n  [3248] = {.lex_state = 0},\n  [3249] = {.lex_state = 3},\n  [3250] = {.lex_state = 0},\n  [3251] = {.lex_state = 0, .external_lex_state = 4},\n  [3252] = {.lex_state = 0},\n  [3253] = {.lex_state = 3},\n  [3254] = {.lex_state = 3},\n  [3255] = {.lex_state = 0},\n  [3256] = {.lex_state = 0},\n  [3257] = {.lex_state = 0, .external_lex_state = 4},\n  [3258] = {.lex_state = 3},\n  [3259] = {.lex_state = 3},\n  [3260] = {.lex_state = 3},\n  [3261] = {.lex_state = 105},\n  [3262] = {.lex_state = 105},\n  [3263] = {.lex_state = 105},\n  [3264] = {.lex_state = 105},\n  [3265] = {.lex_state = 3},\n  [3266] = {.lex_state = 0},\n  [3267] = {.lex_state = 105},\n  [3268] = {.lex_state = 105},\n  [3269] = {.lex_state = 0, .external_lex_state = 4},\n  [3270] = {.lex_state = 105},\n  [3271] = {.lex_state = 0, .external_lex_state = 4},\n  [3272] = {.lex_state = 32},\n  [3273] = {.lex_state = 0},\n  [3274] = {.lex_state = 0},\n  [3275] = {.lex_state = 0},\n  [3276] = {.lex_state = 0},\n  [3277] = {.lex_state = 105},\n  [3278] = {.lex_state = 0, .external_lex_state = 4},\n  [3279] = {.lex_state = 105},\n  [3280] = {.lex_state = 0, .external_lex_state = 4},\n  [3281] = {.lex_state = 0, .external_lex_state = 4},\n  [3282] = {.lex_state = 105},\n  [3283] = {.lex_state = 0, .external_lex_state = 4},\n  [3284] = {.lex_state = 0},\n  [3285] = {.lex_state = 0},\n  [3286] = {.lex_state = 0, .external_lex_state = 4},\n  [3287] = {.lex_state = 105},\n  [3288] = {.lex_state = 0},\n  [3289] = {.lex_state = 0},\n  [3290] = {.lex_state = 0},\n  [3291] = {.lex_state = 0},\n  [3292] = {.lex_state = 0},\n  [3293] = {.lex_state = 0},\n  [3294] = {.lex_state = 0},\n  [3295] = {.lex_state = 0},\n  [3296] = {.lex_state = 105},\n  [3297] = {.lex_state = 0},\n  [3298] = {.lex_state = 0},\n  [3299] = {.lex_state = 0},\n  [3300] = {.lex_state = 105},\n  [3301] = {.lex_state = 0, .external_lex_state = 4},\n  [3302] = {.lex_state = 0},\n  [3303] = {.lex_state = 0, .external_lex_state = 4},\n  [3304] = {.lex_state = 0, .external_lex_state = 4},\n  [3305] = {.lex_state = 0, .external_lex_state = 4},\n  [3306] = {.lex_state = 3},\n  [3307] = {.lex_state = 0, .external_lex_state = 4},\n  [3308] = {.lex_state = 105},\n  [3309] = {.lex_state = 0, .external_lex_state = 4},\n  [3310] = {.lex_state = 3},\n  [3311] = {.lex_state = 0, .external_lex_state = 4},\n  [3312] = {.lex_state = 105},\n  [3313] = {.lex_state = 3},\n  [3314] = {.lex_state = 3},\n  [3315] = {.lex_state = 0, .external_lex_state = 4},\n  [3316] = {.lex_state = 0, .external_lex_state = 4},\n  [3317] = {.lex_state = 3},\n  [3318] = {.lex_state = 3},\n  [3319] = {.lex_state = 0},\n  [3320] = {.lex_state = 3},\n  [3321] = {.lex_state = 3},\n  [3322] = {.lex_state = 3},\n  [3323] = {.lex_state = 0, .external_lex_state = 4},\n  [3324] = {.lex_state = 105},\n  [3325] = {.lex_state = 0},\n  [3326] = {.lex_state = 0},\n  [3327] = {.lex_state = 105},\n  [3328] = {.lex_state = 105},\n  [3329] = {.lex_state = 3},\n  [3330] = {.lex_state = 3},\n  [3331] = {.lex_state = 0},\n  [3332] = {.lex_state = 3},\n  [3333] = {.lex_state = 105},\n  [3334] = {.lex_state = 3},\n  [3335] = {.lex_state = 3},\n  [3336] = {.lex_state = 0},\n  [3337] = {.lex_state = 105},\n  [3338] = {.lex_state = 0},\n  [3339] = {.lex_state = 0},\n  [3340] = {.lex_state = 0},\n  [3341] = {.lex_state = 0},\n  [3342] = {.lex_state = 105},\n  [3343] = {.lex_state = 3},\n  [3344] = {.lex_state = 3},\n  [3345] = {.lex_state = 0, .external_lex_state = 4},\n  [3346] = {.lex_state = 3},\n  [3347] = {.lex_state = 0, .external_lex_state = 4},\n  [3348] = {.lex_state = 105},\n  [3349] = {.lex_state = 105},\n  [3350] = {.lex_state = 0},\n  [3351] = {.lex_state = 0},\n  [3352] = {.lex_state = 0, .external_lex_state = 4},\n  [3353] = {.lex_state = 3},\n  [3354] = {.lex_state = 3},\n  [3355] = {.lex_state = 3},\n  [3356] = {.lex_state = 0, .external_lex_state = 4},\n  [3357] = {.lex_state = 105},\n  [3358] = {.lex_state = 0},\n  [3359] = {.lex_state = 3},\n  [3360] = {.lex_state = 3},\n  [3361] = {.lex_state = 0},\n  [3362] = {.lex_state = 0},\n  [3363] = {.lex_state = 105},\n  [3364] = {.lex_state = 105},\n  [3365] = {.lex_state = 105},\n  [3366] = {.lex_state = 105},\n  [3367] = {.lex_state = 3},\n  [3368] = {.lex_state = 105},\n  [3369] = {.lex_state = 0},\n  [3370] = {.lex_state = 0},\n  [3371] = {.lex_state = 3},\n  [3372] = {.lex_state = 105},\n  [3373] = {.lex_state = 0},\n  [3374] = {.lex_state = 105},\n  [3375] = {.lex_state = 105},\n  [3376] = {.lex_state = 105},\n  [3377] = {.lex_state = 0},\n  [3378] = {.lex_state = 0},\n  [3379] = {.lex_state = 3},\n  [3380] = {.lex_state = 3},\n  [3381] = {.lex_state = 0, .external_lex_state = 4},\n  [3382] = {.lex_state = 105},\n  [3383] = {.lex_state = 0, .external_lex_state = 4},\n  [3384] = {.lex_state = 0, .external_lex_state = 4},\n  [3385] = {.lex_state = 0},\n  [3386] = {.lex_state = 0},\n  [3387] = {.lex_state = 0},\n  [3388] = {.lex_state = 0},\n  [3389] = {.lex_state = 0},\n  [3390] = {.lex_state = 0},\n  [3391] = {.lex_state = 3},\n  [3392] = {.lex_state = 2},\n  [3393] = {.lex_state = 0},\n  [3394] = {.lex_state = 3},\n  [3395] = {.lex_state = 3},\n  [3396] = {.lex_state = 3},\n  [3397] = {.lex_state = 0},\n  [3398] = {.lex_state = 0},\n  [3399] = {.lex_state = 0},\n  [3400] = {.lex_state = 3},\n  [3401] = {.lex_state = 0},\n  [3402] = {.lex_state = 22},\n  [3403] = {.lex_state = 3},\n  [3404] = {.lex_state = 0},\n  [3405] = {.lex_state = 0},\n  [3406] = {.lex_state = 0},\n  [3407] = {.lex_state = 0},\n  [3408] = {.lex_state = 0},\n  [3409] = {.lex_state = 0},\n  [3410] = {.lex_state = 0},\n  [3411] = {.lex_state = 0},\n  [3412] = {.lex_state = 0},\n  [3413] = {.lex_state = 3},\n  [3414] = {.lex_state = 3},\n  [3415] = {.lex_state = 0},\n  [3416] = {.lex_state = 0},\n  [3417] = {.lex_state = 0},\n  [3418] = {.lex_state = 0},\n  [3419] = {.lex_state = 0},\n  [3420] = {.lex_state = 0},\n  [3421] = {.lex_state = 0},\n  [3422] = {.lex_state = 0},\n  [3423] = {.lex_state = 0},\n  [3424] = {.lex_state = 0},\n  [3425] = {.lex_state = 0},\n  [3426] = {.lex_state = 0},\n  [3427] = {.lex_state = 0},\n  [3428] = {.lex_state = 0},\n  [3429] = {.lex_state = 0},\n  [3430] = {.lex_state = 0},\n  [3431] = {.lex_state = 0},\n  [3432] = {.lex_state = 0},\n  [3433] = {.lex_state = 3},\n  [3434] = {.lex_state = 0},\n  [3435] = {.lex_state = 0},\n  [3436] = {.lex_state = 0},\n  [3437] = {.lex_state = 3},\n  [3438] = {.lex_state = 0},\n  [3439] = {.lex_state = 0},\n  [3440] = {.lex_state = 0},\n  [3441] = {.lex_state = 0},\n  [3442] = {.lex_state = 0},\n  [3443] = {.lex_state = 0},\n  [3444] = {.lex_state = 13},\n  [3445] = {.lex_state = 0},\n  [3446] = {.lex_state = 22},\n  [3447] = {.lex_state = 0},\n  [3448] = {.lex_state = 0},\n  [3449] = {.lex_state = 0},\n  [3450] = {.lex_state = 0},\n  [3451] = {.lex_state = 3},\n  [3452] = {.lex_state = 22},\n  [3453] = {.lex_state = 0},\n  [3454] = {.lex_state = 3},\n  [3455] = {.lex_state = 3},\n  [3456] = {.lex_state = 0},\n  [3457] = {.lex_state = 0},\n  [3458] = {.lex_state = 20},\n  [3459] = {.lex_state = 0},\n  [3460] = {.lex_state = 0},\n  [3461] = {.lex_state = 0},\n  [3462] = {.lex_state = 0},\n  [3463] = {.lex_state = 0},\n  [3464] = {.lex_state = 0},\n  [3465] = {.lex_state = 3},\n  [3466] = {.lex_state = 0},\n  [3467] = {.lex_state = 0},\n  [3468] = {.lex_state = 0},\n  [3469] = {.lex_state = 0},\n  [3470] = {.lex_state = 0},\n  [3471] = {.lex_state = 0},\n  [3472] = {.lex_state = 0},\n  [3473] = {.lex_state = 0},\n  [3474] = {.lex_state = 2},\n  [3475] = {.lex_state = 0},\n  [3476] = {.lex_state = 0},\n  [3477] = {.lex_state = 0},\n  [3478] = {.lex_state = 3},\n  [3479] = {.lex_state = 22},\n  [3480] = {.lex_state = 20},\n  [3481] = {.lex_state = 20},\n  [3482] = {.lex_state = 0},\n  [3483] = {.lex_state = 0},\n  [3484] = {.lex_state = 0},\n  [3485] = {.lex_state = 0},\n  [3486] = {.lex_state = 0},\n  [3487] = {.lex_state = 0},\n  [3488] = {.lex_state = 22},\n  [3489] = {.lex_state = 0},\n  [3490] = {.lex_state = 0},\n  [3491] = {.lex_state = 0},\n  [3492] = {.lex_state = 3},\n  [3493] = {.lex_state = 0},\n  [3494] = {.lex_state = 3},\n  [3495] = {.lex_state = 0},\n  [3496] = {.lex_state = 20},\n  [3497] = {.lex_state = 0},\n  [3498] = {.lex_state = 0},\n  [3499] = {.lex_state = 3},\n  [3500] = {.lex_state = 0},\n  [3501] = {.lex_state = 0},\n  [3502] = {.lex_state = 105},\n  [3503] = {.lex_state = 0},\n  [3504] = {.lex_state = 0},\n  [3505] = {.lex_state = 0},\n  [3506] = {.lex_state = 0},\n  [3507] = {.lex_state = 0},\n  [3508] = {.lex_state = 0},\n  [3509] = {.lex_state = 0},\n  [3510] = {.lex_state = 0},\n  [3511] = {.lex_state = 0},\n  [3512] = {.lex_state = 0},\n  [3513] = {.lex_state = 3},\n  [3514] = {.lex_state = 0},\n  [3515] = {.lex_state = 0},\n  [3516] = {.lex_state = 0},\n  [3517] = {.lex_state = 0},\n  [3518] = {.lex_state = 0},\n  [3519] = {.lex_state = 3},\n  [3520] = {.lex_state = 3},\n  [3521] = {.lex_state = 3},\n  [3522] = {.lex_state = 3},\n  [3523] = {.lex_state = 0},\n  [3524] = {.lex_state = 0},\n  [3525] = {.lex_state = 0},\n  [3526] = {.lex_state = 0},\n  [3527] = {.lex_state = 0},\n  [3528] = {.lex_state = 0},\n  [3529] = {.lex_state = 13},\n  [3530] = {.lex_state = 22},\n  [3531] = {.lex_state = 0},\n  [3532] = {.lex_state = 0},\n  [3533] = {.lex_state = 3},\n  [3534] = {.lex_state = 0},\n  [3535] = {.lex_state = 0},\n  [3536] = {.lex_state = 0},\n  [3537] = {.lex_state = 0},\n  [3538] = {.lex_state = 0},\n  [3539] = {.lex_state = 0},\n  [3540] = {.lex_state = 0},\n  [3541] = {.lex_state = 3},\n  [3542] = {.lex_state = 0},\n  [3543] = {.lex_state = 0},\n  [3544] = {.lex_state = 3},\n  [3545] = {.lex_state = 3},\n  [3546] = {.lex_state = 20},\n  [3547] = {.lex_state = 0},\n  [3548] = {.lex_state = 0},\n  [3549] = {.lex_state = 0},\n  [3550] = {.lex_state = 0},\n  [3551] = {.lex_state = 0},\n  [3552] = {.lex_state = 0},\n  [3553] = {.lex_state = 0},\n  [3554] = {.lex_state = 3},\n  [3555] = {.lex_state = 0},\n  [3556] = {.lex_state = 0},\n  [3557] = {.lex_state = 3},\n  [3558] = {.lex_state = 0},\n  [3559] = {.lex_state = 0},\n  [3560] = {.lex_state = 0},\n  [3561] = {.lex_state = 0},\n  [3562] = {.lex_state = 0},\n  [3563] = {.lex_state = 0},\n  [3564] = {.lex_state = 0},\n  [3565] = {.lex_state = 3},\n  [3566] = {.lex_state = 0},\n  [3567] = {.lex_state = 0},\n  [3568] = {.lex_state = 3},\n  [3569] = {.lex_state = 0},\n  [3570] = {.lex_state = 0},\n  [3571] = {.lex_state = 3},\n  [3572] = {.lex_state = 0},\n  [3573] = {.lex_state = 0},\n  [3574] = {.lex_state = 0},\n  [3575] = {.lex_state = 0},\n  [3576] = {.lex_state = 3},\n  [3577] = {.lex_state = 22},\n  [3578] = {.lex_state = 0},\n  [3579] = {.lex_state = 0},\n  [3580] = {.lex_state = 3},\n  [3581] = {.lex_state = 0},\n  [3582] = {.lex_state = 0},\n  [3583] = {.lex_state = 22},\n  [3584] = {.lex_state = 13},\n  [3585] = {.lex_state = 3},\n  [3586] = {.lex_state = 0},\n  [3587] = {.lex_state = 3},\n  [3588] = {.lex_state = 3},\n  [3589] = {.lex_state = 0},\n  [3590] = {.lex_state = 0},\n  [3591] = {.lex_state = 0},\n  [3592] = {.lex_state = 0},\n  [3593] = {.lex_state = 0},\n  [3594] = {.lex_state = 0},\n  [3595] = {.lex_state = 0},\n  [3596] = {.lex_state = 0},\n  [3597] = {.lex_state = 0},\n  [3598] = {.lex_state = 0},\n  [3599] = {.lex_state = 0},\n  [3600] = {.lex_state = 0},\n  [3601] = {.lex_state = 3},\n  [3602] = {.lex_state = 0},\n  [3603] = {.lex_state = 0},\n  [3604] = {.lex_state = 0},\n  [3605] = {.lex_state = 0},\n  [3606] = {.lex_state = 0},\n  [3607] = {.lex_state = 0},\n  [3608] = {.lex_state = 0},\n  [3609] = {.lex_state = 3},\n  [3610] = {.lex_state = 0},\n  [3611] = {.lex_state = 22},\n  [3612] = {.lex_state = 0},\n  [3613] = {.lex_state = 3},\n  [3614] = {.lex_state = 0},\n  [3615] = {.lex_state = 0},\n  [3616] = {.lex_state = 0},\n  [3617] = {.lex_state = 0},\n  [3618] = {.lex_state = 0},\n  [3619] = {.lex_state = 0},\n  [3620] = {.lex_state = 13},\n  [3621] = {.lex_state = 0},\n  [3622] = {.lex_state = 0},\n  [3623] = {.lex_state = 22},\n  [3624] = {.lex_state = 0},\n  [3625] = {.lex_state = 0},\n  [3626] = {.lex_state = 0},\n  [3627] = {.lex_state = 3},\n  [3628] = {.lex_state = 0},\n  [3629] = {.lex_state = 0},\n  [3630] = {.lex_state = 0},\n  [3631] = {.lex_state = 0},\n  [3632] = {.lex_state = 0},\n  [3633] = {.lex_state = 0},\n  [3634] = {.lex_state = 0},\n  [3635] = {.lex_state = 0},\n  [3636] = {.lex_state = 0},\n  [3637] = {.lex_state = 20},\n  [3638] = {.lex_state = 0},\n  [3639] = {.lex_state = 3},\n  [3640] = {.lex_state = 0},\n  [3641] = {.lex_state = 3},\n  [3642] = {.lex_state = 0},\n  [3643] = {.lex_state = 3},\n  [3644] = {.lex_state = 3},\n  [3645] = {.lex_state = 3},\n  [3646] = {.lex_state = 0},\n  [3647] = {.lex_state = 0},\n  [3648] = {.lex_state = 0},\n  [3649] = {.lex_state = 0},\n  [3650] = {.lex_state = 0},\n  [3651] = {.lex_state = 0},\n  [3652] = {.lex_state = 0},\n  [3653] = {.lex_state = 0},\n  [3654] = {.lex_state = 0},\n  [3655] = {.lex_state = 0},\n  [3656] = {.lex_state = 0},\n  [3657] = {.lex_state = 0},\n  [3658] = {.lex_state = 0},\n  [3659] = {.lex_state = 3},\n  [3660] = {.lex_state = 0},\n  [3661] = {.lex_state = 0},\n  [3662] = {.lex_state = 0},\n  [3663] = {.lex_state = 3},\n  [3664] = {.lex_state = 0},\n  [3665] = {.lex_state = 20},\n  [3666] = {.lex_state = 3},\n  [3667] = {.lex_state = 3},\n  [3668] = {.lex_state = 2},\n  [3669] = {.lex_state = 3},\n  [3670] = {.lex_state = 0},\n  [3671] = {.lex_state = 0},\n  [3672] = {.lex_state = 3},\n  [3673] = {.lex_state = 0},\n  [3674] = {.lex_state = 0},\n  [3675] = {.lex_state = 0},\n  [3676] = {.lex_state = 3},\n  [3677] = {.lex_state = 3},\n  [3678] = {.lex_state = 0},\n  [3679] = {.lex_state = 0},\n  [3680] = {.lex_state = 0},\n  [3681] = {.lex_state = 0},\n  [3682] = {.lex_state = 2},\n  [3683] = {.lex_state = 20},\n  [3684] = {.lex_state = 0},\n  [3685] = {.lex_state = 3},\n  [3686] = {.lex_state = 3},\n  [3687] = {.lex_state = 20},\n  [3688] = {.lex_state = 3},\n  [3689] = {.lex_state = 3},\n  [3690] = {.lex_state = 22},\n  [3691] = {.lex_state = 20},\n  [3692] = {.lex_state = 20},\n  [3693] = {.lex_state = 0},\n  [3694] = {.lex_state = 3},\n  [3695] = {.lex_state = 22},\n  [3696] = {.lex_state = 0},\n  [3697] = {.lex_state = 0},\n  [3698] = {.lex_state = 0},\n};\n\nenum {\n  ts_external_token__automatic_semicolon = 0,\n  ts_external_token__template_chars = 1,\n  ts_external_token__ternary_qmark = 2,\n  ts_external_token_PIPE_PIPE = 3,\n  ts_external_token__function_signature_automatic_semicolon = 4,\n};\n\nstatic const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = {\n  [ts_external_token__automatic_semicolon] = sym__automatic_semicolon,\n  [ts_external_token__template_chars] = sym__template_chars,\n  [ts_external_token__ternary_qmark] = sym__ternary_qmark,\n  [ts_external_token_PIPE_PIPE] = anon_sym_PIPE_PIPE,\n  [ts_external_token__function_signature_automatic_semicolon] = sym__function_signature_automatic_semicolon,\n};\n\nstatic const bool ts_external_scanner_states[7][EXTERNAL_TOKEN_COUNT] = {\n  [1] = {\n    [ts_external_token__automatic_semicolon] = true,\n    [ts_external_token__template_chars] = true,\n    [ts_external_token__ternary_qmark] = true,\n    [ts_external_token_PIPE_PIPE] = true,\n    [ts_external_token__function_signature_automatic_semicolon] = true,\n  },\n  [2] = {\n    [ts_external_token__ternary_qmark] = true,\n    [ts_external_token_PIPE_PIPE] = true,\n  },\n  [3] = {\n    [ts_external_token__automatic_semicolon] = true,\n    [ts_external_token__ternary_qmark] = true,\n    [ts_external_token_PIPE_PIPE] = true,\n  },\n  [4] = {\n    [ts_external_token__automatic_semicolon] = true,\n  },\n  [5] = {\n    [ts_external_token__automatic_semicolon] = true,\n    [ts_external_token__function_signature_automatic_semicolon] = true,\n  },\n  [6] = {\n    [ts_external_token__template_chars] = true,\n  },\n};\n\nstatic const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {\n  [0] = {\n    [ts_builtin_sym_end] = ACTIONS(1),\n    [sym_identifier] = ACTIONS(1),\n    [sym_hash_bang_line] = ACTIONS(1),\n    [anon_sym_pub] = ACTIONS(1),\n    [anon_sym_export] = ACTIONS(1),\n    [anon_sym_type] = ACTIONS(1),\n    [anon_sym_EQ] = ACTIONS(1),\n    [anon_sym_as] = ACTIONS(1),\n    [anon_sym_namespace] = ACTIONS(1),\n    [anon_sym_STAR] = ACTIONS(1),\n    [anon_sym_LBRACE] = ACTIONS(1),\n    [anon_sym_COMMA] = ACTIONS(1),\n    [anon_sym_RBRACE] = ACTIONS(1),\n    [anon_sym_typeof] = ACTIONS(1),\n    [anon_sym_import] = ACTIONS(1),\n    [anon_sym_from] = ACTIONS(1),\n    [anon_sym_var] = ACTIONS(1),\n    [anon_sym_let] = ACTIONS(1),\n    [anon_sym_const] = ACTIONS(1),\n    [anon_sym_BANG] = ACTIONS(1),\n    [anon_sym_else] = ACTIONS(1),\n    [anon_sym_if] = ACTIONS(1),\n    [anon_sym_switch] = ACTIONS(1),\n    [anon_sym_for] = ACTIONS(1),\n    [anon_sym_LPAREN] = ACTIONS(1),\n    [anon_sym_RPAREN] = ACTIONS(1),\n    [anon_sym_await] = ACTIONS(1),\n    [anon_sym_in] = ACTIONS(1),\n    [anon_sym_of] = ACTIONS(1),\n    [anon_sym_while] = ACTIONS(1),\n    [anon_sym_do] = ACTIONS(1),\n    [anon_sym_try] = ACTIONS(1),\n    [anon_sym_with] = ACTIONS(1),\n    [anon_sym_break] = ACTIONS(1),\n    [anon_sym_continue] = ACTIONS(1),\n    [anon_sym_debugger] = ACTIONS(1),\n    [anon_sym_return] = ACTIONS(1),\n    [anon_sym_throw] = ACTIONS(1),\n    [anon_sym_SEMI] = ACTIONS(1),\n    [anon_sym_COLON] = ACTIONS(1),\n    [anon_sym_case] = ACTIONS(1),\n    [anon_sym_default] = ACTIONS(1),\n    [anon_sym_catch] = ACTIONS(1),\n    [anon_sym_finally] = ACTIONS(1),\n    [anon_sym_yield] = ACTIONS(1),\n    [anon_sym_LBRACK] = ACTIONS(1),\n    [anon_sym_RBRACK] = ACTIONS(1),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1),\n    [anon_sym_LT] = ACTIONS(1),\n    [anon_sym_GT] = ACTIONS(1),\n    [anon_sym_SLASH] = ACTIONS(1),\n    [anon_sym_DOT] = ACTIONS(1),\n    [anon_sym_class] = ACTIONS(1),\n    [anon_sym_struct] = ACTIONS(1),\n    [anon_sym_async] = ACTIONS(1),\n    [anon_sym_fn] = ACTIONS(1),\n    [anon_sym_fn_STAR] = ACTIONS(1),\n    [anon_sym_EQ_GT] = ACTIONS(1),\n    [anon_sym_QMARK_DOT] = ACTIONS(1),\n    [anon_sym_new] = ACTIONS(1),\n    [anon_sym_COLON_COLON] = ACTIONS(1),\n    [anon_sym_PLUS_EQ] = ACTIONS(1),\n    [anon_sym_DASH_EQ] = ACTIONS(1),\n    [anon_sym_STAR_EQ] = ACTIONS(1),\n    [anon_sym_PERCENT_EQ] = ACTIONS(1),\n    [anon_sym_CARET_EQ] = ACTIONS(1),\n    [anon_sym_AMP_EQ] = ACTIONS(1),\n    [anon_sym_PIPE_EQ] = ACTIONS(1),\n    [anon_sym_GT_GT_EQ] = ACTIONS(1),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(1),\n    [anon_sym_LT_LT_EQ] = ACTIONS(1),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(1),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(1),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(1),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(1),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1),\n    [anon_sym_AMP_AMP] = ACTIONS(1),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1),\n    [anon_sym_GT_GT] = ACTIONS(1),\n    [anon_sym_GT_GT_GT] = ACTIONS(1),\n    [anon_sym_LT_LT] = ACTIONS(1),\n    [anon_sym_AMP] = ACTIONS(1),\n    [anon_sym_CARET] = ACTIONS(1),\n    [anon_sym_PIPE] = ACTIONS(1),\n    [anon_sym_PLUS] = ACTIONS(1),\n    [anon_sym_DASH] = ACTIONS(1),\n    [anon_sym_PERCENT] = ACTIONS(1),\n    [anon_sym_STAR_STAR] = ACTIONS(1),\n    [anon_sym_LT_EQ] = ACTIONS(1),\n    [anon_sym_EQ_EQ] = ACTIONS(1),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1),\n    [anon_sym_BANG_EQ] = ACTIONS(1),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1),\n    [anon_sym_GT_EQ] = ACTIONS(1),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1),\n    [anon_sym_instanceof] = ACTIONS(1),\n    [anon_sym_TILDE] = ACTIONS(1),\n    [anon_sym_void] = ACTIONS(1),\n    [anon_sym_delete] = ACTIONS(1),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1),\n    [anon_sym_DASH_DASH] = ACTIONS(1),\n    [anon_sym_DQUOTE] = ACTIONS(1),\n    [anon_sym_SQUOTE] = ACTIONS(1),\n    [sym_escape_sequence] = ACTIONS(1),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1),\n    [anon_sym_DOLLAR_LBRACE] = ACTIONS(1),\n    [anon_sym_SLASH2] = ACTIONS(1),\n    [sym_number] = ACTIONS(1),\n    [sym_private_property_identifier] = ACTIONS(1),\n    [anon_sym_target] = ACTIONS(1),\n    [sym_this] = ACTIONS(1),\n    [sym_super] = ACTIONS(1),\n    [sym_true] = ACTIONS(1),\n    [sym_false] = ACTIONS(1),\n    [sym_null] = ACTIONS(1),\n    [sym_undefined] = ACTIONS(1),\n    [anon_sym_AT] = ACTIONS(1),\n    [anon_sym_static] = ACTIONS(1),\n    [anon_sym_QMARK] = ACTIONS(1),\n    [anon_sym_declare] = ACTIONS(1),\n    [anon_sym_public] = ACTIONS(1),\n    [anon_sym_private] = ACTIONS(1),\n    [anon_sym_protected] = ACTIONS(1),\n    [anon_sym_override] = ACTIONS(1),\n    [anon_sym_readonly] = ACTIONS(1),\n    [anon_sym_module] = ACTIONS(1),\n    [anon_sym_any] = ACTIONS(1),\n    [anon_sym_number] = ACTIONS(1),\n    [anon_sym_int] = ACTIONS(1),\n    [anon_sym_float] = ACTIONS(1),\n    [anon_sym_float2] = ACTIONS(1),\n    [anon_sym_float3] = ACTIONS(1),\n    [anon_sym_float4] = ACTIONS(1),\n    [anon_sym_float3x3] = ACTIONS(1),\n    [anon_sym_float2x2] = ACTIONS(1),\n    [anon_sym_float4x4] = ACTIONS(1),\n    [anon_sym_int2] = ACTIONS(1),\n    [anon_sym_int3] = ACTIONS(1),\n    [anon_sym_int4] = ACTIONS(1),\n    [anon_sym_int3x3] = ACTIONS(1),\n    [anon_sym_int2x2] = ACTIONS(1),\n    [anon_sym_int4x4] = ACTIONS(1),\n    [anon_sym_boolean] = ACTIONS(1),\n    [anon_sym_string] = ACTIONS(1),\n    [anon_sym_symbol] = ACTIONS(1),\n    [anon_sym_workgroup] = ACTIONS(1),\n    [anon_sym_get] = ACTIONS(1),\n    [anon_sym_set] = ACTIONS(1),\n    [anon_sym_abstract] = ACTIONS(1),\n    [anon_sym_satisfies] = ACTIONS(1),\n    [anon_sym_require] = ACTIONS(1),\n    [anon_sym_extends] = ACTIONS(1),\n    [anon_sym_implements] = ACTIONS(1),\n    [anon_sym_global] = ACTIONS(1),\n    [anon_sym_trait] = ACTIONS(1),\n    [anon_sym_impl] = ACTIONS(1),\n    [anon_sym_enum] = ACTIONS(1),\n    [anon_sym_shader] = ACTIONS(1),\n    [anon_sym_DASH_QMARK_COLON] = ACTIONS(1),\n    [anon_sym_DASH_GT] = ACTIONS(1),\n    [anon_sym_asserts] = ACTIONS(1),\n    [anon_sym_infer] = ACTIONS(1),\n    [anon_sym_is] = ACTIONS(1),\n    [anon_sym_keyof] = ACTIONS(1),\n    [anon_sym_unknown] = ACTIONS(1),\n    [anon_sym_never] = ACTIONS(1),\n    [anon_sym_object] = ACTIONS(1),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(1),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(1),\n    [sym__automatic_semicolon] = ACTIONS(1),\n    [sym__template_chars] = ACTIONS(1),\n    [sym__ternary_qmark] = ACTIONS(1),\n    [sym__function_signature_automatic_semicolon] = ACTIONS(1),\n  },\n  [1] = {\n    [sym_program] = STATE(3614),\n    [sym_export_statement] = STATE(30),\n    [sym_declaration] = STATE(30),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(30),\n    [sym_expression_statement] = STATE(30),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(30),\n    [sym_if_statement] = STATE(30),\n    [sym_switch_statement] = STATE(30),\n    [sym_for_statement] = STATE(30),\n    [sym_for_in_statement] = STATE(30),\n    [sym_while_statement] = STATE(30),\n    [sym_do_statement] = STATE(30),\n    [sym_try_statement] = STATE(30),\n    [sym_with_statement] = STATE(30),\n    [sym_break_statement] = STATE(30),\n    [sym_continue_statement] = STATE(30),\n    [sym_debugger_statement] = STATE(30),\n    [sym_return_statement] = STATE(30),\n    [sym_throw_statement] = STATE(30),\n    [sym_empty_statement] = STATE(30),\n    [sym_labeled_statement] = STATE(30),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(30),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [ts_builtin_sym_end] = ACTIONS(5),\n    [sym_identifier] = ACTIONS(7),\n    [sym_hash_bang_line] = ACTIONS(9),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [2] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2792),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(130),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(144),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(191),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(201),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [3] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2792),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(191),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(201),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [4] = {\n    [sym_export_statement] = STATE(19),\n    [sym_declaration] = STATE(19),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(19),\n    [sym_expression_statement] = STATE(19),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(19),\n    [sym_if_statement] = STATE(19),\n    [sym_switch_statement] = STATE(19),\n    [sym_for_statement] = STATE(19),\n    [sym_for_in_statement] = STATE(19),\n    [sym_while_statement] = STATE(19),\n    [sym_do_statement] = STATE(19),\n    [sym_try_statement] = STATE(19),\n    [sym_with_statement] = STATE(19),\n    [sym_break_statement] = STATE(19),\n    [sym_continue_statement] = STATE(19),\n    [sym_debugger_statement] = STATE(19),\n    [sym_return_statement] = STATE(19),\n    [sym_throw_statement] = STATE(19),\n    [sym_empty_statement] = STATE(19),\n    [sym_labeled_statement] = STATE(19),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3551),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3551),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3551),\n    [sym_spread_element] = STATE(3005),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1972),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3005),\n    [sym_pair] = STATE(3005),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(3549),\n    [sym_computed_property_name] = STATE(3549),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_accessibility_modifier_member] = STATE(2915),\n    [sym_override_modifier] = STATE(3546),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(19),\n    [aux_sym_object_repeat1] = STATE(3004),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(228),\n    [anon_sym_pub] = ACTIONS(230),\n    [anon_sym_export] = ACTIONS(232),\n    [anon_sym_type] = ACTIONS(234),\n    [anon_sym_namespace] = ACTIONS(236),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_COMMA] = ACTIONS(238),\n    [anon_sym_RBRACE] = ACTIONS(240),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(242),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(244),\n    [anon_sym_async] = ACTIONS(246),\n    [anon_sym_fn] = ACTIONS(248),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(252),\n    [sym_private_property_identifier] = ACTIONS(254),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(256),\n    [anon_sym_declare] = ACTIONS(258),\n    [anon_sym_public] = ACTIONS(260),\n    [anon_sym_private] = ACTIONS(260),\n    [anon_sym_protected] = ACTIONS(260),\n    [anon_sym_override] = ACTIONS(262),\n    [anon_sym_readonly] = ACTIONS(260),\n    [anon_sym_module] = ACTIONS(264),\n    [anon_sym_any] = ACTIONS(260),\n    [anon_sym_number] = ACTIONS(260),\n    [anon_sym_int] = ACTIONS(260),\n    [anon_sym_float] = ACTIONS(260),\n    [anon_sym_float2] = ACTIONS(260),\n    [anon_sym_float3] = ACTIONS(260),\n    [anon_sym_float4] = ACTIONS(260),\n    [anon_sym_float3x3] = ACTIONS(260),\n    [anon_sym_float2x2] = ACTIONS(260),\n    [anon_sym_float4x4] = ACTIONS(260),\n    [anon_sym_int2] = ACTIONS(260),\n    [anon_sym_int3] = ACTIONS(260),\n    [anon_sym_int4] = ACTIONS(260),\n    [anon_sym_int3x3] = ACTIONS(260),\n    [anon_sym_int2x2] = ACTIONS(260),\n    [anon_sym_int4x4] = ACTIONS(260),\n    [anon_sym_boolean] = ACTIONS(260),\n    [anon_sym_string] = ACTIONS(260),\n    [anon_sym_symbol] = ACTIONS(260),\n    [anon_sym_workgroup] = ACTIONS(266),\n    [anon_sym_get] = ACTIONS(260),\n    [anon_sym_set] = ACTIONS(260),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [5] = {\n    [sym_export_statement] = STATE(16),\n    [sym_declaration] = STATE(16),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(16),\n    [sym_expression_statement] = STATE(16),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(16),\n    [sym_if_statement] = STATE(16),\n    [sym_switch_statement] = STATE(16),\n    [sym_for_statement] = STATE(16),\n    [sym_for_in_statement] = STATE(16),\n    [sym_while_statement] = STATE(16),\n    [sym_do_statement] = STATE(16),\n    [sym_try_statement] = STATE(16),\n    [sym_with_statement] = STATE(16),\n    [sym_break_statement] = STATE(16),\n    [sym_continue_statement] = STATE(16),\n    [sym_debugger_statement] = STATE(16),\n    [sym_return_statement] = STATE(16),\n    [sym_throw_statement] = STATE(16),\n    [sym_empty_statement] = STATE(16),\n    [sym_labeled_statement] = STATE(16),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3551),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3551),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3551),\n    [sym_spread_element] = STATE(3005),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1972),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3005),\n    [sym_pair] = STATE(3005),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(3549),\n    [sym_computed_property_name] = STATE(3549),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_accessibility_modifier_member] = STATE(2915),\n    [sym_override_modifier] = STATE(3546),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(16),\n    [aux_sym_object_repeat1] = STATE(3004),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(228),\n    [anon_sym_pub] = ACTIONS(230),\n    [anon_sym_export] = ACTIONS(232),\n    [anon_sym_type] = ACTIONS(234),\n    [anon_sym_namespace] = ACTIONS(236),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_COMMA] = ACTIONS(238),\n    [anon_sym_RBRACE] = ACTIONS(268),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(242),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(244),\n    [anon_sym_async] = ACTIONS(246),\n    [anon_sym_fn] = ACTIONS(248),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(252),\n    [sym_private_property_identifier] = ACTIONS(254),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(256),\n    [anon_sym_declare] = ACTIONS(258),\n    [anon_sym_public] = ACTIONS(260),\n    [anon_sym_private] = ACTIONS(260),\n    [anon_sym_protected] = ACTIONS(260),\n    [anon_sym_override] = ACTIONS(262),\n    [anon_sym_readonly] = ACTIONS(260),\n    [anon_sym_module] = ACTIONS(264),\n    [anon_sym_any] = ACTIONS(260),\n    [anon_sym_number] = ACTIONS(260),\n    [anon_sym_int] = ACTIONS(260),\n    [anon_sym_float] = ACTIONS(260),\n    [anon_sym_float2] = ACTIONS(260),\n    [anon_sym_float3] = ACTIONS(260),\n    [anon_sym_float4] = ACTIONS(260),\n    [anon_sym_float3x3] = ACTIONS(260),\n    [anon_sym_float2x2] = ACTIONS(260),\n    [anon_sym_float4x4] = ACTIONS(260),\n    [anon_sym_int2] = ACTIONS(260),\n    [anon_sym_int3] = ACTIONS(260),\n    [anon_sym_int4] = ACTIONS(260),\n    [anon_sym_int3x3] = ACTIONS(260),\n    [anon_sym_int2x2] = ACTIONS(260),\n    [anon_sym_int4x4] = ACTIONS(260),\n    [anon_sym_boolean] = ACTIONS(260),\n    [anon_sym_string] = ACTIONS(260),\n    [anon_sym_symbol] = ACTIONS(260),\n    [anon_sym_workgroup] = ACTIONS(266),\n    [anon_sym_get] = ACTIONS(260),\n    [anon_sym_set] = ACTIONS(260),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [6] = {\n    [sym_export_statement] = STATE(16),\n    [sym_declaration] = STATE(16),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(16),\n    [sym_expression_statement] = STATE(16),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(16),\n    [sym_if_statement] = STATE(16),\n    [sym_switch_statement] = STATE(16),\n    [sym_for_statement] = STATE(16),\n    [sym_for_in_statement] = STATE(16),\n    [sym_while_statement] = STATE(16),\n    [sym_do_statement] = STATE(16),\n    [sym_try_statement] = STATE(16),\n    [sym_with_statement] = STATE(16),\n    [sym_break_statement] = STATE(16),\n    [sym_continue_statement] = STATE(16),\n    [sym_debugger_statement] = STATE(16),\n    [sym_return_statement] = STATE(16),\n    [sym_throw_statement] = STATE(16),\n    [sym_empty_statement] = STATE(16),\n    [sym_labeled_statement] = STATE(16),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3551),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3551),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3551),\n    [sym_spread_element] = STATE(3005),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1972),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3005),\n    [sym_pair] = STATE(3005),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(3549),\n    [sym_computed_property_name] = STATE(3549),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_accessibility_modifier_member] = STATE(2915),\n    [sym_override_modifier] = STATE(3546),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(16),\n    [aux_sym_object_repeat1] = STATE(3004),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(228),\n    [anon_sym_pub] = ACTIONS(230),\n    [anon_sym_export] = ACTIONS(232),\n    [anon_sym_type] = ACTIONS(234),\n    [anon_sym_namespace] = ACTIONS(236),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_COMMA] = ACTIONS(238),\n    [anon_sym_RBRACE] = ACTIONS(270),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(242),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(244),\n    [anon_sym_async] = ACTIONS(246),\n    [anon_sym_fn] = ACTIONS(248),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(252),\n    [sym_private_property_identifier] = ACTIONS(254),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(256),\n    [anon_sym_declare] = ACTIONS(258),\n    [anon_sym_public] = ACTIONS(260),\n    [anon_sym_private] = ACTIONS(260),\n    [anon_sym_protected] = ACTIONS(260),\n    [anon_sym_override] = ACTIONS(262),\n    [anon_sym_readonly] = ACTIONS(260),\n    [anon_sym_module] = ACTIONS(264),\n    [anon_sym_any] = ACTIONS(260),\n    [anon_sym_number] = ACTIONS(260),\n    [anon_sym_int] = ACTIONS(260),\n    [anon_sym_float] = ACTIONS(260),\n    [anon_sym_float2] = ACTIONS(260),\n    [anon_sym_float3] = ACTIONS(260),\n    [anon_sym_float4] = ACTIONS(260),\n    [anon_sym_float3x3] = ACTIONS(260),\n    [anon_sym_float2x2] = ACTIONS(260),\n    [anon_sym_float4x4] = ACTIONS(260),\n    [anon_sym_int2] = ACTIONS(260),\n    [anon_sym_int3] = ACTIONS(260),\n    [anon_sym_int4] = ACTIONS(260),\n    [anon_sym_int3x3] = ACTIONS(260),\n    [anon_sym_int2x2] = ACTIONS(260),\n    [anon_sym_int4x4] = ACTIONS(260),\n    [anon_sym_boolean] = ACTIONS(260),\n    [anon_sym_string] = ACTIONS(260),\n    [anon_sym_symbol] = ACTIONS(260),\n    [anon_sym_workgroup] = ACTIONS(266),\n    [anon_sym_get] = ACTIONS(260),\n    [anon_sym_set] = ACTIONS(260),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [7] = {\n    [sym_export_statement] = STATE(14),\n    [sym_declaration] = STATE(14),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(14),\n    [sym_expression_statement] = STATE(14),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(14),\n    [sym_if_statement] = STATE(14),\n    [sym_switch_statement] = STATE(14),\n    [sym_for_statement] = STATE(14),\n    [sym_for_in_statement] = STATE(14),\n    [sym_while_statement] = STATE(14),\n    [sym_do_statement] = STATE(14),\n    [sym_try_statement] = STATE(14),\n    [sym_with_statement] = STATE(14),\n    [sym_break_statement] = STATE(14),\n    [sym_continue_statement] = STATE(14),\n    [sym_debugger_statement] = STATE(14),\n    [sym_return_statement] = STATE(14),\n    [sym_throw_statement] = STATE(14),\n    [sym_empty_statement] = STATE(14),\n    [sym_labeled_statement] = STATE(14),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3551),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3551),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3551),\n    [sym_spread_element] = STATE(3085),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1972),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(3549),\n    [sym_computed_property_name] = STATE(3549),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_accessibility_modifier_member] = STATE(2915),\n    [sym_override_modifier] = STATE(3546),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(14),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(272),\n    [anon_sym_pub] = ACTIONS(274),\n    [anon_sym_export] = ACTIONS(276),\n    [anon_sym_type] = ACTIONS(278),\n    [anon_sym_namespace] = ACTIONS(280),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_COMMA] = ACTIONS(238),\n    [anon_sym_RBRACE] = ACTIONS(282),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(242),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(284),\n    [anon_sym_async] = ACTIONS(286),\n    [anon_sym_fn] = ACTIONS(288),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(252),\n    [sym_private_property_identifier] = ACTIONS(254),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(290),\n    [anon_sym_declare] = ACTIONS(292),\n    [anon_sym_public] = ACTIONS(294),\n    [anon_sym_private] = ACTIONS(294),\n    [anon_sym_protected] = ACTIONS(294),\n    [anon_sym_override] = ACTIONS(296),\n    [anon_sym_readonly] = ACTIONS(294),\n    [anon_sym_module] = ACTIONS(298),\n    [anon_sym_any] = ACTIONS(294),\n    [anon_sym_number] = ACTIONS(294),\n    [anon_sym_int] = ACTIONS(294),\n    [anon_sym_float] = ACTIONS(294),\n    [anon_sym_float2] = ACTIONS(294),\n    [anon_sym_float3] = ACTIONS(294),\n    [anon_sym_float4] = ACTIONS(294),\n    [anon_sym_float3x3] = ACTIONS(294),\n    [anon_sym_float2x2] = ACTIONS(294),\n    [anon_sym_float4x4] = ACTIONS(294),\n    [anon_sym_int2] = ACTIONS(294),\n    [anon_sym_int3] = ACTIONS(294),\n    [anon_sym_int4] = ACTIONS(294),\n    [anon_sym_int3x3] = ACTIONS(294),\n    [anon_sym_int2x2] = ACTIONS(294),\n    [anon_sym_int4x4] = ACTIONS(294),\n    [anon_sym_boolean] = ACTIONS(294),\n    [anon_sym_string] = ACTIONS(294),\n    [anon_sym_symbol] = ACTIONS(294),\n    [anon_sym_workgroup] = ACTIONS(300),\n    [anon_sym_get] = ACTIONS(294),\n    [anon_sym_set] = ACTIONS(294),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [8] = {\n    [sym_export_statement] = STATE(14),\n    [sym_declaration] = STATE(14),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(14),\n    [sym_expression_statement] = STATE(14),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(14),\n    [sym_if_statement] = STATE(14),\n    [sym_switch_statement] = STATE(14),\n    [sym_for_statement] = STATE(14),\n    [sym_for_in_statement] = STATE(14),\n    [sym_while_statement] = STATE(14),\n    [sym_do_statement] = STATE(14),\n    [sym_try_statement] = STATE(14),\n    [sym_with_statement] = STATE(14),\n    [sym_break_statement] = STATE(14),\n    [sym_continue_statement] = STATE(14),\n    [sym_debugger_statement] = STATE(14),\n    [sym_return_statement] = STATE(14),\n    [sym_throw_statement] = STATE(14),\n    [sym_empty_statement] = STATE(14),\n    [sym_labeled_statement] = STATE(14),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3551),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3551),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3551),\n    [sym_spread_element] = STATE(3085),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1972),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(3549),\n    [sym_computed_property_name] = STATE(3549),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_accessibility_modifier_member] = STATE(2915),\n    [sym_override_modifier] = STATE(3546),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(14),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(302),\n    [anon_sym_pub] = ACTIONS(304),\n    [anon_sym_export] = ACTIONS(306),\n    [anon_sym_type] = ACTIONS(308),\n    [anon_sym_namespace] = ACTIONS(310),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_COMMA] = ACTIONS(238),\n    [anon_sym_RBRACE] = ACTIONS(282),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(242),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(312),\n    [anon_sym_async] = ACTIONS(314),\n    [anon_sym_fn] = ACTIONS(316),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(252),\n    [sym_private_property_identifier] = ACTIONS(254),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(318),\n    [anon_sym_declare] = ACTIONS(320),\n    [anon_sym_public] = ACTIONS(322),\n    [anon_sym_private] = ACTIONS(322),\n    [anon_sym_protected] = ACTIONS(322),\n    [anon_sym_override] = ACTIONS(324),\n    [anon_sym_readonly] = ACTIONS(322),\n    [anon_sym_module] = ACTIONS(326),\n    [anon_sym_any] = ACTIONS(322),\n    [anon_sym_number] = ACTIONS(322),\n    [anon_sym_int] = ACTIONS(322),\n    [anon_sym_float] = ACTIONS(322),\n    [anon_sym_float2] = ACTIONS(322),\n    [anon_sym_float3] = ACTIONS(322),\n    [anon_sym_float4] = ACTIONS(322),\n    [anon_sym_float3x3] = ACTIONS(322),\n    [anon_sym_float2x2] = ACTIONS(322),\n    [anon_sym_float4x4] = ACTIONS(322),\n    [anon_sym_int2] = ACTIONS(322),\n    [anon_sym_int3] = ACTIONS(322),\n    [anon_sym_int4] = ACTIONS(322),\n    [anon_sym_int3x3] = ACTIONS(322),\n    [anon_sym_int2x2] = ACTIONS(322),\n    [anon_sym_int4x4] = ACTIONS(322),\n    [anon_sym_boolean] = ACTIONS(322),\n    [anon_sym_string] = ACTIONS(322),\n    [anon_sym_symbol] = ACTIONS(322),\n    [anon_sym_workgroup] = ACTIONS(328),\n    [anon_sym_get] = ACTIONS(322),\n    [anon_sym_set] = ACTIONS(322),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [9] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [ts_builtin_sym_end] = ACTIONS(330),\n    [sym_identifier] = ACTIONS(332),\n    [anon_sym_pub] = ACTIONS(335),\n    [anon_sym_export] = ACTIONS(338),\n    [anon_sym_type] = ACTIONS(341),\n    [anon_sym_namespace] = ACTIONS(344),\n    [anon_sym_LBRACE] = ACTIONS(347),\n    [anon_sym_RBRACE] = ACTIONS(330),\n    [anon_sym_typeof] = ACTIONS(350),\n    [anon_sym_import] = ACTIONS(353),\n    [anon_sym_var] = ACTIONS(356),\n    [anon_sym_let] = ACTIONS(359),\n    [anon_sym_const] = ACTIONS(362),\n    [anon_sym_BANG] = ACTIONS(365),\n    [anon_sym_if] = ACTIONS(368),\n    [anon_sym_switch] = ACTIONS(371),\n    [anon_sym_for] = ACTIONS(374),\n    [anon_sym_LPAREN] = ACTIONS(377),\n    [anon_sym_await] = ACTIONS(380),\n    [anon_sym_while] = ACTIONS(383),\n    [anon_sym_do] = ACTIONS(386),\n    [anon_sym_try] = ACTIONS(389),\n    [anon_sym_with] = ACTIONS(392),\n    [anon_sym_break] = ACTIONS(395),\n    [anon_sym_continue] = ACTIONS(398),\n    [anon_sym_debugger] = ACTIONS(401),\n    [anon_sym_return] = ACTIONS(404),\n    [anon_sym_throw] = ACTIONS(407),\n    [anon_sym_SEMI] = ACTIONS(410),\n    [anon_sym_case] = ACTIONS(413),\n    [anon_sym_default] = ACTIONS(413),\n    [anon_sym_yield] = ACTIONS(415),\n    [anon_sym_LBRACK] = ACTIONS(418),\n    [anon_sym_LTtemplate_GT] = ACTIONS(421),\n    [anon_sym_LT] = ACTIONS(424),\n    [anon_sym_SLASH] = ACTIONS(427),\n    [anon_sym_struct] = ACTIONS(430),\n    [anon_sym_async] = ACTIONS(433),\n    [anon_sym_fn] = ACTIONS(436),\n    [anon_sym_fn_STAR] = ACTIONS(439),\n    [anon_sym_new] = ACTIONS(442),\n    [anon_sym_PLUS] = ACTIONS(350),\n    [anon_sym_DASH] = ACTIONS(350),\n    [anon_sym_TILDE] = ACTIONS(365),\n    [anon_sym_void] = ACTIONS(350),\n    [anon_sym_delete] = ACTIONS(350),\n    [anon_sym_PLUS_PLUS] = ACTIONS(445),\n    [anon_sym_DASH_DASH] = ACTIONS(445),\n    [anon_sym_DQUOTE] = ACTIONS(448),\n    [anon_sym_SQUOTE] = ACTIONS(451),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(454),\n    [sym_number] = ACTIONS(457),\n    [sym_this] = ACTIONS(460),\n    [sym_super] = ACTIONS(460),\n    [sym_true] = ACTIONS(460),\n    [sym_false] = ACTIONS(460),\n    [sym_null] = ACTIONS(460),\n    [sym_undefined] = ACTIONS(463),\n    [anon_sym_AT] = ACTIONS(466),\n    [anon_sym_static] = ACTIONS(469),\n    [anon_sym_declare] = ACTIONS(472),\n    [anon_sym_public] = ACTIONS(469),\n    [anon_sym_private] = ACTIONS(469),\n    [anon_sym_protected] = ACTIONS(469),\n    [anon_sym_override] = ACTIONS(469),\n    [anon_sym_readonly] = ACTIONS(469),\n    [anon_sym_module] = ACTIONS(475),\n    [anon_sym_any] = ACTIONS(469),\n    [anon_sym_number] = ACTIONS(469),\n    [anon_sym_int] = ACTIONS(469),\n    [anon_sym_float] = ACTIONS(469),\n    [anon_sym_float2] = ACTIONS(469),\n    [anon_sym_float3] = ACTIONS(469),\n    [anon_sym_float4] = ACTIONS(469),\n    [anon_sym_float3x3] = ACTIONS(469),\n    [anon_sym_float2x2] = ACTIONS(469),\n    [anon_sym_float4x4] = ACTIONS(469),\n    [anon_sym_int2] = ACTIONS(469),\n    [anon_sym_int3] = ACTIONS(469),\n    [anon_sym_int4] = ACTIONS(469),\n    [anon_sym_int3x3] = ACTIONS(469),\n    [anon_sym_int2x2] = ACTIONS(469),\n    [anon_sym_int4x4] = ACTIONS(469),\n    [anon_sym_boolean] = ACTIONS(469),\n    [anon_sym_string] = ACTIONS(469),\n    [anon_sym_symbol] = ACTIONS(469),\n    [anon_sym_workgroup] = ACTIONS(478),\n    [anon_sym_get] = ACTIONS(469),\n    [anon_sym_set] = ACTIONS(469),\n    [anon_sym_trait] = ACTIONS(481),\n    [anon_sym_impl] = ACTIONS(484),\n    [anon_sym_enum] = ACTIONS(487),\n    [anon_sym_shader] = ACTIONS(490),\n  },\n  [10] = {\n    [sym_export_statement] = STATE(12),\n    [sym_declaration] = STATE(12),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(12),\n    [sym_expression_statement] = STATE(12),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(12),\n    [sym_if_statement] = STATE(12),\n    [sym_switch_statement] = STATE(12),\n    [sym_for_statement] = STATE(12),\n    [sym_for_in_statement] = STATE(12),\n    [sym_while_statement] = STATE(12),\n    [sym_do_statement] = STATE(12),\n    [sym_try_statement] = STATE(12),\n    [sym_with_statement] = STATE(12),\n    [sym_break_statement] = STATE(12),\n    [sym_continue_statement] = STATE(12),\n    [sym_debugger_statement] = STATE(12),\n    [sym_return_statement] = STATE(12),\n    [sym_throw_statement] = STATE(12),\n    [sym_empty_statement] = STATE(12),\n    [sym_labeled_statement] = STATE(12),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(12),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(493),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_case] = ACTIONS(495),\n    [anon_sym_default] = ACTIONS(495),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [11] = {\n    [sym_export_statement] = STATE(13),\n    [sym_declaration] = STATE(13),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(13),\n    [sym_expression_statement] = STATE(13),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(13),\n    [sym_if_statement] = STATE(13),\n    [sym_switch_statement] = STATE(13),\n    [sym_for_statement] = STATE(13),\n    [sym_for_in_statement] = STATE(13),\n    [sym_while_statement] = STATE(13),\n    [sym_do_statement] = STATE(13),\n    [sym_try_statement] = STATE(13),\n    [sym_with_statement] = STATE(13),\n    [sym_break_statement] = STATE(13),\n    [sym_continue_statement] = STATE(13),\n    [sym_debugger_statement] = STATE(13),\n    [sym_return_statement] = STATE(13),\n    [sym_throw_statement] = STATE(13),\n    [sym_empty_statement] = STATE(13),\n    [sym_labeled_statement] = STATE(13),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(13),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(497),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_case] = ACTIONS(499),\n    [anon_sym_default] = ACTIONS(499),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [12] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(501),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_case] = ACTIONS(503),\n    [anon_sym_default] = ACTIONS(503),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [13] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(505),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_case] = ACTIONS(507),\n    [anon_sym_default] = ACTIONS(507),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [14] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(509),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [15] = {\n    [sym_export_statement] = STATE(14),\n    [sym_declaration] = STATE(14),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(14),\n    [sym_expression_statement] = STATE(14),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(14),\n    [sym_if_statement] = STATE(14),\n    [sym_switch_statement] = STATE(14),\n    [sym_for_statement] = STATE(14),\n    [sym_for_in_statement] = STATE(14),\n    [sym_while_statement] = STATE(14),\n    [sym_do_statement] = STATE(14),\n    [sym_try_statement] = STATE(14),\n    [sym_with_statement] = STATE(14),\n    [sym_break_statement] = STATE(14),\n    [sym_continue_statement] = STATE(14),\n    [sym_debugger_statement] = STATE(14),\n    [sym_return_statement] = STATE(14),\n    [sym_throw_statement] = STATE(14),\n    [sym_empty_statement] = STATE(14),\n    [sym_labeled_statement] = STATE(14),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(14),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(511),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [16] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(513),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [17] = {\n    [sym_export_statement] = STATE(29),\n    [sym_declaration] = STATE(29),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(29),\n    [sym_expression_statement] = STATE(29),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(29),\n    [sym_if_statement] = STATE(29),\n    [sym_switch_statement] = STATE(29),\n    [sym_for_statement] = STATE(29),\n    [sym_for_in_statement] = STATE(29),\n    [sym_while_statement] = STATE(29),\n    [sym_do_statement] = STATE(29),\n    [sym_try_statement] = STATE(29),\n    [sym_with_statement] = STATE(29),\n    [sym_break_statement] = STATE(29),\n    [sym_continue_statement] = STATE(29),\n    [sym_debugger_statement] = STATE(29),\n    [sym_return_statement] = STATE(29),\n    [sym_throw_statement] = STATE(29),\n    [sym_empty_statement] = STATE(29),\n    [sym_labeled_statement] = STATE(29),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(29),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(515),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [18] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(517),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [19] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(519),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [20] = {\n    [sym_export_statement] = STATE(25),\n    [sym_declaration] = STATE(25),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(25),\n    [sym_expression_statement] = STATE(25),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(25),\n    [sym_if_statement] = STATE(25),\n    [sym_switch_statement] = STATE(25),\n    [sym_for_statement] = STATE(25),\n    [sym_for_in_statement] = STATE(25),\n    [sym_while_statement] = STATE(25),\n    [sym_do_statement] = STATE(25),\n    [sym_try_statement] = STATE(25),\n    [sym_with_statement] = STATE(25),\n    [sym_break_statement] = STATE(25),\n    [sym_continue_statement] = STATE(25),\n    [sym_debugger_statement] = STATE(25),\n    [sym_return_statement] = STATE(25),\n    [sym_throw_statement] = STATE(25),\n    [sym_empty_statement] = STATE(25),\n    [sym_labeled_statement] = STATE(25),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(25),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(521),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [21] = {\n    [sym_export_statement] = STATE(32),\n    [sym_declaration] = STATE(32),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(32),\n    [sym_expression_statement] = STATE(32),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(32),\n    [sym_if_statement] = STATE(32),\n    [sym_switch_statement] = STATE(32),\n    [sym_for_statement] = STATE(32),\n    [sym_for_in_statement] = STATE(32),\n    [sym_while_statement] = STATE(32),\n    [sym_do_statement] = STATE(32),\n    [sym_try_statement] = STATE(32),\n    [sym_with_statement] = STATE(32),\n    [sym_break_statement] = STATE(32),\n    [sym_continue_statement] = STATE(32),\n    [sym_debugger_statement] = STATE(32),\n    [sym_return_statement] = STATE(32),\n    [sym_throw_statement] = STATE(32),\n    [sym_empty_statement] = STATE(32),\n    [sym_labeled_statement] = STATE(32),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(32),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [ts_builtin_sym_end] = ACTIONS(523),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [22] = {\n    [sym_export_statement] = STATE(16),\n    [sym_declaration] = STATE(16),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(16),\n    [sym_expression_statement] = STATE(16),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(16),\n    [sym_if_statement] = STATE(16),\n    [sym_switch_statement] = STATE(16),\n    [sym_for_statement] = STATE(16),\n    [sym_for_in_statement] = STATE(16),\n    [sym_while_statement] = STATE(16),\n    [sym_do_statement] = STATE(16),\n    [sym_try_statement] = STATE(16),\n    [sym_with_statement] = STATE(16),\n    [sym_break_statement] = STATE(16),\n    [sym_continue_statement] = STATE(16),\n    [sym_debugger_statement] = STATE(16),\n    [sym_return_statement] = STATE(16),\n    [sym_throw_statement] = STATE(16),\n    [sym_empty_statement] = STATE(16),\n    [sym_labeled_statement] = STATE(16),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(16),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(525),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [23] = {\n    [sym_export_statement] = STATE(18),\n    [sym_declaration] = STATE(18),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(18),\n    [sym_expression_statement] = STATE(18),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(18),\n    [sym_if_statement] = STATE(18),\n    [sym_switch_statement] = STATE(18),\n    [sym_for_statement] = STATE(18),\n    [sym_for_in_statement] = STATE(18),\n    [sym_while_statement] = STATE(18),\n    [sym_do_statement] = STATE(18),\n    [sym_try_statement] = STATE(18),\n    [sym_with_statement] = STATE(18),\n    [sym_break_statement] = STATE(18),\n    [sym_continue_statement] = STATE(18),\n    [sym_debugger_statement] = STATE(18),\n    [sym_return_statement] = STATE(18),\n    [sym_throw_statement] = STATE(18),\n    [sym_empty_statement] = STATE(18),\n    [sym_labeled_statement] = STATE(18),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(18),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(527),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [24] = {\n    [sym_export_statement] = STATE(19),\n    [sym_declaration] = STATE(19),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(19),\n    [sym_expression_statement] = STATE(19),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(19),\n    [sym_if_statement] = STATE(19),\n    [sym_switch_statement] = STATE(19),\n    [sym_for_statement] = STATE(19),\n    [sym_for_in_statement] = STATE(19),\n    [sym_while_statement] = STATE(19),\n    [sym_do_statement] = STATE(19),\n    [sym_try_statement] = STATE(19),\n    [sym_with_statement] = STATE(19),\n    [sym_break_statement] = STATE(19),\n    [sym_continue_statement] = STATE(19),\n    [sym_debugger_statement] = STATE(19),\n    [sym_return_statement] = STATE(19),\n    [sym_throw_statement] = STATE(19),\n    [sym_empty_statement] = STATE(19),\n    [sym_labeled_statement] = STATE(19),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(19),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(529),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [25] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(531),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [26] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(533),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [27] = {\n    [sym_export_statement] = STATE(28),\n    [sym_declaration] = STATE(28),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(28),\n    [sym_expression_statement] = STATE(28),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(28),\n    [sym_if_statement] = STATE(28),\n    [sym_switch_statement] = STATE(28),\n    [sym_for_statement] = STATE(28),\n    [sym_for_in_statement] = STATE(28),\n    [sym_while_statement] = STATE(28),\n    [sym_do_statement] = STATE(28),\n    [sym_try_statement] = STATE(28),\n    [sym_with_statement] = STATE(28),\n    [sym_break_statement] = STATE(28),\n    [sym_continue_statement] = STATE(28),\n    [sym_debugger_statement] = STATE(28),\n    [sym_return_statement] = STATE(28),\n    [sym_throw_statement] = STATE(28),\n    [sym_empty_statement] = STATE(28),\n    [sym_labeled_statement] = STATE(28),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(28),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(535),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [28] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(537),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [29] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(539),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [30] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [ts_builtin_sym_end] = ACTIONS(523),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [31] = {\n    [sym_export_statement] = STATE(26),\n    [sym_declaration] = STATE(26),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(26),\n    [sym_expression_statement] = STATE(26),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(26),\n    [sym_if_statement] = STATE(26),\n    [sym_switch_statement] = STATE(26),\n    [sym_for_statement] = STATE(26),\n    [sym_for_in_statement] = STATE(26),\n    [sym_while_statement] = STATE(26),\n    [sym_do_statement] = STATE(26),\n    [sym_try_statement] = STATE(26),\n    [sym_with_statement] = STATE(26),\n    [sym_break_statement] = STATE(26),\n    [sym_continue_statement] = STATE(26),\n    [sym_debugger_statement] = STATE(26),\n    [sym_return_statement] = STATE(26),\n    [sym_throw_statement] = STATE(26),\n    [sym_empty_statement] = STATE(26),\n    [sym_labeled_statement] = STATE(26),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(26),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_RBRACE] = ACTIONS(541),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [32] = {\n    [sym_export_statement] = STATE(9),\n    [sym_declaration] = STATE(9),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(9),\n    [sym_expression_statement] = STATE(9),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(9),\n    [sym_if_statement] = STATE(9),\n    [sym_switch_statement] = STATE(9),\n    [sym_for_statement] = STATE(9),\n    [sym_for_in_statement] = STATE(9),\n    [sym_while_statement] = STATE(9),\n    [sym_do_statement] = STATE(9),\n    [sym_try_statement] = STATE(9),\n    [sym_with_statement] = STATE(9),\n    [sym_break_statement] = STATE(9),\n    [sym_continue_statement] = STATE(9),\n    [sym_debugger_statement] = STATE(9),\n    [sym_return_statement] = STATE(9),\n    [sym_throw_statement] = STATE(9),\n    [sym_empty_statement] = STATE(9),\n    [sym_labeled_statement] = STATE(9),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_program_repeat1] = STATE(9),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [ts_builtin_sym_end] = ACTIONS(543),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [33] = {\n    [sym_export_statement] = STATE(629),\n    [sym_declaration] = STATE(629),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(629),\n    [sym_expression_statement] = STATE(629),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(629),\n    [sym_if_statement] = STATE(629),\n    [sym_switch_statement] = STATE(629),\n    [sym_for_statement] = STATE(629),\n    [sym_for_in_statement] = STATE(629),\n    [sym_while_statement] = STATE(629),\n    [sym_do_statement] = STATE(629),\n    [sym_try_statement] = STATE(629),\n    [sym_with_statement] = STATE(629),\n    [sym_break_statement] = STATE(629),\n    [sym_continue_statement] = STATE(629),\n    [sym_debugger_statement] = STATE(629),\n    [sym_return_statement] = STATE(629),\n    [sym_throw_statement] = STATE(629),\n    [sym_empty_statement] = STATE(629),\n    [sym_labeled_statement] = STATE(629),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [34] = {\n    [sym_export_statement] = STATE(645),\n    [sym_declaration] = STATE(644),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(642),\n    [sym_expression_statement] = STATE(640),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(639),\n    [sym_if_statement] = STATE(638),\n    [sym_switch_statement] = STATE(635),\n    [sym_for_statement] = STATE(634),\n    [sym_for_in_statement] = STATE(632),\n    [sym_while_statement] = STATE(631),\n    [sym_do_statement] = STATE(625),\n    [sym_try_statement] = STATE(624),\n    [sym_with_statement] = STATE(533),\n    [sym_break_statement] = STATE(619),\n    [sym_continue_statement] = STATE(618),\n    [sym_debugger_statement] = STATE(617),\n    [sym_return_statement] = STATE(613),\n    [sym_throw_statement] = STATE(612),\n    [sym_empty_statement] = STATE(611),\n    [sym_labeled_statement] = STATE(610),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [35] = {\n    [sym_export_statement] = STATE(587),\n    [sym_declaration] = STATE(587),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(587),\n    [sym_expression_statement] = STATE(587),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(587),\n    [sym_if_statement] = STATE(587),\n    [sym_switch_statement] = STATE(587),\n    [sym_for_statement] = STATE(587),\n    [sym_for_in_statement] = STATE(587),\n    [sym_while_statement] = STATE(587),\n    [sym_do_statement] = STATE(587),\n    [sym_try_statement] = STATE(587),\n    [sym_with_statement] = STATE(587),\n    [sym_break_statement] = STATE(587),\n    [sym_continue_statement] = STATE(587),\n    [sym_debugger_statement] = STATE(587),\n    [sym_return_statement] = STATE(587),\n    [sym_throw_statement] = STATE(587),\n    [sym_empty_statement] = STATE(587),\n    [sym_labeled_statement] = STATE(587),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [36] = {\n    [sym_export_statement] = STATE(636),\n    [sym_declaration] = STATE(636),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(636),\n    [sym_expression_statement] = STATE(636),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(636),\n    [sym_if_statement] = STATE(636),\n    [sym_switch_statement] = STATE(636),\n    [sym_for_statement] = STATE(636),\n    [sym_for_in_statement] = STATE(636),\n    [sym_while_statement] = STATE(636),\n    [sym_do_statement] = STATE(636),\n    [sym_try_statement] = STATE(636),\n    [sym_with_statement] = STATE(636),\n    [sym_break_statement] = STATE(636),\n    [sym_continue_statement] = STATE(636),\n    [sym_debugger_statement] = STATE(636),\n    [sym_return_statement] = STATE(636),\n    [sym_throw_statement] = STATE(636),\n    [sym_empty_statement] = STATE(636),\n    [sym_labeled_statement] = STATE(636),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [37] = {\n    [sym_export_statement] = STATE(645),\n    [sym_declaration] = STATE(644),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(642),\n    [sym_expression_statement] = STATE(640),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(639),\n    [sym_if_statement] = STATE(638),\n    [sym_switch_statement] = STATE(635),\n    [sym_for_statement] = STATE(634),\n    [sym_for_in_statement] = STATE(632),\n    [sym_while_statement] = STATE(631),\n    [sym_do_statement] = STATE(625),\n    [sym_try_statement] = STATE(624),\n    [sym_with_statement] = STATE(533),\n    [sym_break_statement] = STATE(619),\n    [sym_continue_statement] = STATE(618),\n    [sym_debugger_statement] = STATE(617),\n    [sym_return_statement] = STATE(613),\n    [sym_throw_statement] = STATE(612),\n    [sym_empty_statement] = STATE(611),\n    [sym_labeled_statement] = STATE(610),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [38] = {\n    [sym_export_statement] = STATE(629),\n    [sym_declaration] = STATE(629),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(629),\n    [sym_expression_statement] = STATE(629),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(629),\n    [sym_if_statement] = STATE(629),\n    [sym_switch_statement] = STATE(629),\n    [sym_for_statement] = STATE(629),\n    [sym_for_in_statement] = STATE(629),\n    [sym_while_statement] = STATE(629),\n    [sym_do_statement] = STATE(629),\n    [sym_try_statement] = STATE(629),\n    [sym_with_statement] = STATE(629),\n    [sym_break_statement] = STATE(629),\n    [sym_continue_statement] = STATE(629),\n    [sym_debugger_statement] = STATE(629),\n    [sym_return_statement] = STATE(629),\n    [sym_throw_statement] = STATE(629),\n    [sym_empty_statement] = STATE(629),\n    [sym_labeled_statement] = STATE(629),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [39] = {\n    [sym_export_statement] = STATE(623),\n    [sym_declaration] = STATE(623),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(623),\n    [sym_expression_statement] = STATE(623),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(623),\n    [sym_if_statement] = STATE(623),\n    [sym_switch_statement] = STATE(623),\n    [sym_for_statement] = STATE(623),\n    [sym_for_in_statement] = STATE(623),\n    [sym_while_statement] = STATE(623),\n    [sym_do_statement] = STATE(623),\n    [sym_try_statement] = STATE(623),\n    [sym_with_statement] = STATE(623),\n    [sym_break_statement] = STATE(623),\n    [sym_continue_statement] = STATE(623),\n    [sym_debugger_statement] = STATE(623),\n    [sym_return_statement] = STATE(623),\n    [sym_throw_statement] = STATE(623),\n    [sym_empty_statement] = STATE(623),\n    [sym_labeled_statement] = STATE(623),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [40] = {\n    [sym_export_statement] = STATE(549),\n    [sym_declaration] = STATE(549),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(549),\n    [sym_expression_statement] = STATE(549),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(549),\n    [sym_if_statement] = STATE(549),\n    [sym_switch_statement] = STATE(549),\n    [sym_for_statement] = STATE(549),\n    [sym_for_in_statement] = STATE(549),\n    [sym_while_statement] = STATE(549),\n    [sym_do_statement] = STATE(549),\n    [sym_try_statement] = STATE(549),\n    [sym_with_statement] = STATE(549),\n    [sym_break_statement] = STATE(549),\n    [sym_continue_statement] = STATE(549),\n    [sym_debugger_statement] = STATE(549),\n    [sym_return_statement] = STATE(549),\n    [sym_throw_statement] = STATE(549),\n    [sym_empty_statement] = STATE(549),\n    [sym_labeled_statement] = STATE(549),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [41] = {\n    [sym_export_statement] = STATE(636),\n    [sym_declaration] = STATE(636),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(636),\n    [sym_expression_statement] = STATE(636),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(636),\n    [sym_if_statement] = STATE(636),\n    [sym_switch_statement] = STATE(636),\n    [sym_for_statement] = STATE(636),\n    [sym_for_in_statement] = STATE(636),\n    [sym_while_statement] = STATE(636),\n    [sym_do_statement] = STATE(636),\n    [sym_try_statement] = STATE(636),\n    [sym_with_statement] = STATE(636),\n    [sym_break_statement] = STATE(636),\n    [sym_continue_statement] = STATE(636),\n    [sym_debugger_statement] = STATE(636),\n    [sym_return_statement] = STATE(636),\n    [sym_throw_statement] = STATE(636),\n    [sym_empty_statement] = STATE(636),\n    [sym_labeled_statement] = STATE(636),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [42] = {\n    [sym_export_statement] = STATE(3127),\n    [sym_declaration] = STATE(3127),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(3127),\n    [sym_expression_statement] = STATE(3127),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(3127),\n    [sym_if_statement] = STATE(3127),\n    [sym_switch_statement] = STATE(3127),\n    [sym_for_statement] = STATE(3127),\n    [sym_for_in_statement] = STATE(3127),\n    [sym_while_statement] = STATE(3127),\n    [sym_do_statement] = STATE(3127),\n    [sym_try_statement] = STATE(3127),\n    [sym_with_statement] = STATE(3127),\n    [sym_break_statement] = STATE(3127),\n    [sym_continue_statement] = STATE(3127),\n    [sym_debugger_statement] = STATE(3127),\n    [sym_return_statement] = STATE(3127),\n    [sym_throw_statement] = STATE(3127),\n    [sym_empty_statement] = STATE(3127),\n    [sym_labeled_statement] = STATE(3127),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [43] = {\n    [sym_export_statement] = STATE(554),\n    [sym_declaration] = STATE(554),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(554),\n    [sym_expression_statement] = STATE(554),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(554),\n    [sym_if_statement] = STATE(554),\n    [sym_switch_statement] = STATE(554),\n    [sym_for_statement] = STATE(554),\n    [sym_for_in_statement] = STATE(554),\n    [sym_while_statement] = STATE(554),\n    [sym_do_statement] = STATE(554),\n    [sym_try_statement] = STATE(554),\n    [sym_with_statement] = STATE(554),\n    [sym_break_statement] = STATE(554),\n    [sym_continue_statement] = STATE(554),\n    [sym_debugger_statement] = STATE(554),\n    [sym_return_statement] = STATE(554),\n    [sym_throw_statement] = STATE(554),\n    [sym_empty_statement] = STATE(554),\n    [sym_labeled_statement] = STATE(554),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [44] = {\n    [sym_export_statement] = STATE(646),\n    [sym_declaration] = STATE(650),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(652),\n    [sym_expression_statement] = STATE(653),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(654),\n    [sym_if_statement] = STATE(651),\n    [sym_switch_statement] = STATE(649),\n    [sym_for_statement] = STATE(591),\n    [sym_for_in_statement] = STATE(589),\n    [sym_while_statement] = STATE(588),\n    [sym_do_statement] = STATE(579),\n    [sym_try_statement] = STATE(572),\n    [sym_with_statement] = STATE(568),\n    [sym_break_statement] = STATE(614),\n    [sym_continue_statement] = STATE(551),\n    [sym_debugger_statement] = STATE(552),\n    [sym_return_statement] = STATE(553),\n    [sym_throw_statement] = STATE(557),\n    [sym_empty_statement] = STATE(560),\n    [sym_labeled_statement] = STATE(561),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [45] = {\n    [sym_export_statement] = STATE(510),\n    [sym_declaration] = STATE(510),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(510),\n    [sym_expression_statement] = STATE(510),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(510),\n    [sym_if_statement] = STATE(510),\n    [sym_switch_statement] = STATE(510),\n    [sym_for_statement] = STATE(510),\n    [sym_for_in_statement] = STATE(510),\n    [sym_while_statement] = STATE(510),\n    [sym_do_statement] = STATE(510),\n    [sym_try_statement] = STATE(510),\n    [sym_with_statement] = STATE(510),\n    [sym_break_statement] = STATE(510),\n    [sym_continue_statement] = STATE(510),\n    [sym_debugger_statement] = STATE(510),\n    [sym_return_statement] = STATE(510),\n    [sym_throw_statement] = STATE(510),\n    [sym_empty_statement] = STATE(510),\n    [sym_labeled_statement] = STATE(510),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [46] = {\n    [sym_export_statement] = STATE(3499),\n    [sym_declaration] = STATE(3499),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(3499),\n    [sym_expression_statement] = STATE(3499),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(3499),\n    [sym_if_statement] = STATE(3499),\n    [sym_switch_statement] = STATE(3499),\n    [sym_for_statement] = STATE(3499),\n    [sym_for_in_statement] = STATE(3499),\n    [sym_while_statement] = STATE(3499),\n    [sym_do_statement] = STATE(3499),\n    [sym_try_statement] = STATE(3499),\n    [sym_with_statement] = STATE(3499),\n    [sym_break_statement] = STATE(3499),\n    [sym_continue_statement] = STATE(3499),\n    [sym_debugger_statement] = STATE(3499),\n    [sym_return_statement] = STATE(3499),\n    [sym_throw_statement] = STATE(3499),\n    [sym_empty_statement] = STATE(3499),\n    [sym_labeled_statement] = STATE(3499),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [47] = {\n    [sym_export_statement] = STATE(646),\n    [sym_declaration] = STATE(650),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(652),\n    [sym_expression_statement] = STATE(653),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(654),\n    [sym_if_statement] = STATE(651),\n    [sym_switch_statement] = STATE(649),\n    [sym_for_statement] = STATE(591),\n    [sym_for_in_statement] = STATE(589),\n    [sym_while_statement] = STATE(588),\n    [sym_do_statement] = STATE(579),\n    [sym_try_statement] = STATE(572),\n    [sym_with_statement] = STATE(568),\n    [sym_break_statement] = STATE(614),\n    [sym_continue_statement] = STATE(551),\n    [sym_debugger_statement] = STATE(552),\n    [sym_return_statement] = STATE(553),\n    [sym_throw_statement] = STATE(557),\n    [sym_empty_statement] = STATE(560),\n    [sym_labeled_statement] = STATE(561),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [48] = {\n    [sym_export_statement] = STATE(587),\n    [sym_declaration] = STATE(587),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(587),\n    [sym_expression_statement] = STATE(587),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(587),\n    [sym_if_statement] = STATE(587),\n    [sym_switch_statement] = STATE(587),\n    [sym_for_statement] = STATE(587),\n    [sym_for_in_statement] = STATE(587),\n    [sym_while_statement] = STATE(587),\n    [sym_do_statement] = STATE(587),\n    [sym_try_statement] = STATE(587),\n    [sym_with_statement] = STATE(587),\n    [sym_break_statement] = STATE(587),\n    [sym_continue_statement] = STATE(587),\n    [sym_debugger_statement] = STATE(587),\n    [sym_return_statement] = STATE(587),\n    [sym_throw_statement] = STATE(587),\n    [sym_empty_statement] = STATE(587),\n    [sym_labeled_statement] = STATE(587),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(131),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_pub] = ACTIONS(11),\n    [anon_sym_export] = ACTIONS(13),\n    [anon_sym_type] = ACTIONS(15),\n    [anon_sym_namespace] = ACTIONS(17),\n    [anon_sym_LBRACE] = ACTIONS(19),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(33),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(37),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(43),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(49),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(73),\n    [anon_sym_async] = ACTIONS(75),\n    [anon_sym_fn] = ACTIONS(77),\n    [anon_sym_fn_STAR] = ACTIONS(79),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(99),\n    [anon_sym_declare] = ACTIONS(101),\n    [anon_sym_public] = ACTIONS(99),\n    [anon_sym_private] = ACTIONS(99),\n    [anon_sym_protected] = ACTIONS(99),\n    [anon_sym_override] = ACTIONS(99),\n    [anon_sym_readonly] = ACTIONS(99),\n    [anon_sym_module] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(99),\n    [anon_sym_number] = ACTIONS(99),\n    [anon_sym_int] = ACTIONS(99),\n    [anon_sym_float] = ACTIONS(99),\n    [anon_sym_float2] = ACTIONS(99),\n    [anon_sym_float3] = ACTIONS(99),\n    [anon_sym_float4] = ACTIONS(99),\n    [anon_sym_float3x3] = ACTIONS(99),\n    [anon_sym_float2x2] = ACTIONS(99),\n    [anon_sym_float4x4] = ACTIONS(99),\n    [anon_sym_int2] = ACTIONS(99),\n    [anon_sym_int3] = ACTIONS(99),\n    [anon_sym_int4] = ACTIONS(99),\n    [anon_sym_int3x3] = ACTIONS(99),\n    [anon_sym_int2x2] = ACTIONS(99),\n    [anon_sym_int4x4] = ACTIONS(99),\n    [anon_sym_boolean] = ACTIONS(99),\n    [anon_sym_string] = ACTIONS(99),\n    [anon_sym_symbol] = ACTIONS(99),\n    [anon_sym_workgroup] = ACTIONS(105),\n    [anon_sym_get] = ACTIONS(99),\n    [anon_sym_set] = ACTIONS(99),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [49] = {\n    [sym_export_statement] = STATE(623),\n    [sym_declaration] = STATE(623),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(623),\n    [sym_expression_statement] = STATE(623),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(623),\n    [sym_if_statement] = STATE(623),\n    [sym_switch_statement] = STATE(623),\n    [sym_for_statement] = STATE(623),\n    [sym_for_in_statement] = STATE(623),\n    [sym_while_statement] = STATE(623),\n    [sym_do_statement] = STATE(623),\n    [sym_try_statement] = STATE(623),\n    [sym_with_statement] = STATE(623),\n    [sym_break_statement] = STATE(623),\n    [sym_continue_statement] = STATE(623),\n    [sym_debugger_statement] = STATE(623),\n    [sym_return_statement] = STATE(623),\n    [sym_throw_statement] = STATE(623),\n    [sym_empty_statement] = STATE(623),\n    [sym_labeled_statement] = STATE(623),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [50] = {\n    [sym_export_statement] = STATE(554),\n    [sym_declaration] = STATE(554),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(554),\n    [sym_expression_statement] = STATE(554),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(554),\n    [sym_if_statement] = STATE(554),\n    [sym_switch_statement] = STATE(554),\n    [sym_for_statement] = STATE(554),\n    [sym_for_in_statement] = STATE(554),\n    [sym_while_statement] = STATE(554),\n    [sym_do_statement] = STATE(554),\n    [sym_try_statement] = STATE(554),\n    [sym_with_statement] = STATE(554),\n    [sym_break_statement] = STATE(554),\n    [sym_continue_statement] = STATE(554),\n    [sym_debugger_statement] = STATE(554),\n    [sym_return_statement] = STATE(554),\n    [sym_throw_statement] = STATE(554),\n    [sym_empty_statement] = STATE(554),\n    [sym_labeled_statement] = STATE(554),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [51] = {\n    [sym_export_statement] = STATE(549),\n    [sym_declaration] = STATE(549),\n    [sym_import] = STATE(1847),\n    [sym_import_statement] = STATE(549),\n    [sym_expression_statement] = STATE(549),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_statement_block] = STATE(549),\n    [sym_if_statement] = STATE(549),\n    [sym_switch_statement] = STATE(549),\n    [sym_for_statement] = STATE(549),\n    [sym_for_in_statement] = STATE(549),\n    [sym_while_statement] = STATE(549),\n    [sym_do_statement] = STATE(549),\n    [sym_try_statement] = STATE(549),\n    [sym_with_statement] = STATE(549),\n    [sym_break_statement] = STATE(549),\n    [sym_continue_statement] = STATE(549),\n    [sym_debugger_statement] = STATE(549),\n    [sym_return_statement] = STATE(549),\n    [sym_throw_statement] = STATE(549),\n    [sym_empty_statement] = STATE(549),\n    [sym_labeled_statement] = STATE(549),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function] = STATE(1847),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_function_signature] = STATE(548),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(1868),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [sym_identifier] = ACTIONS(545),\n    [anon_sym_pub] = ACTIONS(547),\n    [anon_sym_export] = ACTIONS(549),\n    [anon_sym_type] = ACTIONS(551),\n    [anon_sym_namespace] = ACTIONS(553),\n    [anon_sym_LBRACE] = ACTIONS(555),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(23),\n    [anon_sym_var] = ACTIONS(25),\n    [anon_sym_let] = ACTIONS(27),\n    [anon_sym_const] = ACTIONS(29),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_if] = ACTIONS(557),\n    [anon_sym_switch] = ACTIONS(35),\n    [anon_sym_for] = ACTIONS(559),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_while] = ACTIONS(561),\n    [anon_sym_do] = ACTIONS(45),\n    [anon_sym_try] = ACTIONS(47),\n    [anon_sym_with] = ACTIONS(563),\n    [anon_sym_break] = ACTIONS(51),\n    [anon_sym_continue] = ACTIONS(53),\n    [anon_sym_debugger] = ACTIONS(55),\n    [anon_sym_return] = ACTIONS(57),\n    [anon_sym_throw] = ACTIONS(59),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(565),\n    [anon_sym_async] = ACTIONS(567),\n    [anon_sym_fn] = ACTIONS(569),\n    [anon_sym_fn_STAR] = ACTIONS(571),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(573),\n    [anon_sym_declare] = ACTIONS(575),\n    [anon_sym_public] = ACTIONS(573),\n    [anon_sym_private] = ACTIONS(573),\n    [anon_sym_protected] = ACTIONS(573),\n    [anon_sym_override] = ACTIONS(573),\n    [anon_sym_readonly] = ACTIONS(573),\n    [anon_sym_module] = ACTIONS(577),\n    [anon_sym_any] = ACTIONS(573),\n    [anon_sym_number] = ACTIONS(573),\n    [anon_sym_int] = ACTIONS(573),\n    [anon_sym_float] = ACTIONS(573),\n    [anon_sym_float2] = ACTIONS(573),\n    [anon_sym_float3] = ACTIONS(573),\n    [anon_sym_float4] = ACTIONS(573),\n    [anon_sym_float3x3] = ACTIONS(573),\n    [anon_sym_float2x2] = ACTIONS(573),\n    [anon_sym_float4x4] = ACTIONS(573),\n    [anon_sym_int2] = ACTIONS(573),\n    [anon_sym_int3] = ACTIONS(573),\n    [anon_sym_int4] = ACTIONS(573),\n    [anon_sym_int3x3] = ACTIONS(573),\n    [anon_sym_int2x2] = ACTIONS(573),\n    [anon_sym_int4x4] = ACTIONS(573),\n    [anon_sym_boolean] = ACTIONS(573),\n    [anon_sym_string] = ACTIONS(573),\n    [anon_sym_symbol] = ACTIONS(573),\n    [anon_sym_workgroup] = ACTIONS(579),\n    [anon_sym_get] = ACTIONS(573),\n    [anon_sym_set] = ACTIONS(573),\n    [anon_sym_trait] = ACTIONS(107),\n    [anon_sym_impl] = ACTIONS(109),\n    [anon_sym_enum] = ACTIONS(111),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [52] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2752),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(601),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [53] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2801),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(605),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [54] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2792),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(607),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [55] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2775),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(609),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [56] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2710),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(611),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [57] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2749),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(613),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [58] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2792),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(130),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(144),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(607),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [59] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2709),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(137),\n    [anon_sym_LPAREN] = ACTIONS(585),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(588),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(591),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(151),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(137),\n    [anon_sym_DASH] = ACTIONS(137),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(180),\n    [anon_sym_DASH_DASH] = ACTIONS(180),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(596),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(615),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [60] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(639),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [61] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(673),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [62] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1543),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(2978),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(2981),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(675),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [63] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(677),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [64] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1543),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(2978),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(2981),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(679),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [65] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1335),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3586),\n    [sym_string] = STATE(1853),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2827),\n    [sym_constructor_type] = STATE(2827),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2827),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2827),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2827),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(681),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(685),\n    [anon_sym_typeof] = ACTIONS(687),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(691),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(693),\n    [anon_sym_DASH] = ACTIONS(693),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(695),\n    [sym_number] = ACTIONS(697),\n    [sym_this] = ACTIONS(699),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(701),\n    [sym_false] = ACTIONS(701),\n    [sym_null] = ACTIONS(701),\n    [sym_undefined] = ACTIONS(703),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(707),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(709),\n    [anon_sym_number] = ACTIONS(709),\n    [anon_sym_int] = ACTIONS(709),\n    [anon_sym_float] = ACTIONS(709),\n    [anon_sym_float2] = ACTIONS(709),\n    [anon_sym_float3] = ACTIONS(709),\n    [anon_sym_float4] = ACTIONS(709),\n    [anon_sym_float3x3] = ACTIONS(709),\n    [anon_sym_float2x2] = ACTIONS(709),\n    [anon_sym_float4x4] = ACTIONS(709),\n    [anon_sym_int2] = ACTIONS(709),\n    [anon_sym_int3] = ACTIONS(709),\n    [anon_sym_int4] = ACTIONS(709),\n    [anon_sym_int3x3] = ACTIONS(709),\n    [anon_sym_int2x2] = ACTIONS(709),\n    [anon_sym_int4x4] = ACTIONS(709),\n    [anon_sym_boolean] = ACTIONS(709),\n    [anon_sym_string] = ACTIONS(709),\n    [anon_sym_symbol] = ACTIONS(709),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [66] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(711),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [67] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(713),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [68] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1335),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3586),\n    [sym_string] = STATE(1853),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2834),\n    [sym_constructor_type] = STATE(2834),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2834),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2834),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2834),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(681),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(685),\n    [anon_sym_typeof] = ACTIONS(687),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(691),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(693),\n    [anon_sym_DASH] = ACTIONS(693),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(695),\n    [sym_number] = ACTIONS(697),\n    [sym_this] = ACTIONS(699),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(701),\n    [sym_false] = ACTIONS(701),\n    [sym_null] = ACTIONS(701),\n    [sym_undefined] = ACTIONS(703),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(707),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(709),\n    [anon_sym_number] = ACTIONS(709),\n    [anon_sym_int] = ACTIONS(709),\n    [anon_sym_float] = ACTIONS(709),\n    [anon_sym_float2] = ACTIONS(709),\n    [anon_sym_float3] = ACTIONS(709),\n    [anon_sym_float4] = ACTIONS(709),\n    [anon_sym_float3x3] = ACTIONS(709),\n    [anon_sym_float2x2] = ACTIONS(709),\n    [anon_sym_float4x4] = ACTIONS(709),\n    [anon_sym_int2] = ACTIONS(709),\n    [anon_sym_int3] = ACTIONS(709),\n    [anon_sym_int4] = ACTIONS(709),\n    [anon_sym_int3x3] = ACTIONS(709),\n    [anon_sym_int2x2] = ACTIONS(709),\n    [anon_sym_int4x4] = ACTIONS(709),\n    [anon_sym_boolean] = ACTIONS(709),\n    [anon_sym_string] = ACTIONS(709),\n    [anon_sym_symbol] = ACTIONS(709),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [69] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(715),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [70] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(627),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(717),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [71] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1337),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3504),\n    [sym_string] = STATE(1853),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2834),\n    [sym_constructor_type] = STATE(2834),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2834),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2834),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2834),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(681),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(685),\n    [anon_sym_typeof] = ACTIONS(687),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(691),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(693),\n    [anon_sym_DASH] = ACTIONS(693),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(695),\n    [sym_number] = ACTIONS(697),\n    [sym_this] = ACTIONS(699),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(701),\n    [sym_false] = ACTIONS(701),\n    [sym_null] = ACTIONS(701),\n    [sym_undefined] = ACTIONS(703),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(707),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(709),\n    [anon_sym_number] = ACTIONS(709),\n    [anon_sym_int] = ACTIONS(709),\n    [anon_sym_float] = ACTIONS(709),\n    [anon_sym_float2] = ACTIONS(709),\n    [anon_sym_float3] = ACTIONS(709),\n    [anon_sym_float4] = ACTIONS(709),\n    [anon_sym_float3x3] = ACTIONS(709),\n    [anon_sym_float2x2] = ACTIONS(709),\n    [anon_sym_float4x4] = ACTIONS(709),\n    [anon_sym_int2] = ACTIONS(709),\n    [anon_sym_int3] = ACTIONS(709),\n    [anon_sym_int4] = ACTIONS(709),\n    [anon_sym_int3x3] = ACTIONS(709),\n    [anon_sym_int2x2] = ACTIONS(709),\n    [anon_sym_int4x4] = ACTIONS(709),\n    [anon_sym_boolean] = ACTIONS(709),\n    [anon_sym_string] = ACTIONS(709),\n    [anon_sym_symbol] = ACTIONS(709),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [72] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2697),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3145),\n    [sym_optional_tuple_parameter] = STATE(3145),\n    [sym_optional_type] = STATE(3145),\n    [sym_rest_type] = STATE(3145),\n    [sym__tuple_type_member] = STATE(3145),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(617),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(625),\n    [anon_sym_COMMA] = ACTIONS(719),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_RBRACK] = ACTIONS(721),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(647),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(663),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(667),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(669),\n    [anon_sym_number] = ACTIONS(669),\n    [anon_sym_int] = ACTIONS(669),\n    [anon_sym_float] = ACTIONS(669),\n    [anon_sym_float2] = ACTIONS(669),\n    [anon_sym_float3] = ACTIONS(669),\n    [anon_sym_float4] = ACTIONS(669),\n    [anon_sym_float3x3] = ACTIONS(669),\n    [anon_sym_float2x2] = ACTIONS(669),\n    [anon_sym_float4x4] = ACTIONS(669),\n    [anon_sym_int2] = ACTIONS(669),\n    [anon_sym_int3] = ACTIONS(669),\n    [anon_sym_int4] = ACTIONS(669),\n    [anon_sym_int3x3] = ACTIONS(669),\n    [anon_sym_int2x2] = ACTIONS(669),\n    [anon_sym_int4x4] = ACTIONS(669),\n    [anon_sym_boolean] = ACTIONS(669),\n    [anon_sym_string] = ACTIONS(669),\n    [anon_sym_symbol] = ACTIONS(669),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [73] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2884),\n    [sym_constructor_type] = STATE(2884),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2884),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2884),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2884),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(727),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(731),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [74] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2834),\n    [sym_constructor_type] = STATE(2834),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2834),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2834),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2834),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(727),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(731),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [75] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2945),\n    [sym_constructor_type] = STATE(2945),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2945),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2945),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2945),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(727),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(731),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [76] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2827),\n    [sym_constructor_type] = STATE(2827),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2827),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2827),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2827),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(727),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(731),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [77] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym__type] = STATE(2822),\n    [sym_constructor_type] = STATE(2822),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2822),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2822),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2822),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(115),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(128),\n    [anon_sym_typeof] = ACTIONS(133),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(149),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(172),\n    [anon_sym_DASH] = ACTIONS(172),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(727),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(197),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(731),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(203),\n    [anon_sym_number] = ACTIONS(203),\n    [anon_sym_int] = ACTIONS(203),\n    [anon_sym_float] = ACTIONS(203),\n    [anon_sym_float2] = ACTIONS(203),\n    [anon_sym_float3] = ACTIONS(203),\n    [anon_sym_float4] = ACTIONS(203),\n    [anon_sym_float3x3] = ACTIONS(203),\n    [anon_sym_float2x2] = ACTIONS(203),\n    [anon_sym_float4x4] = ACTIONS(203),\n    [anon_sym_int2] = ACTIONS(203),\n    [anon_sym_int3] = ACTIONS(203),\n    [anon_sym_int4] = ACTIONS(203),\n    [anon_sym_int3x3] = ACTIONS(203),\n    [anon_sym_int2x2] = ACTIONS(203),\n    [anon_sym_int4x4] = ACTIONS(203),\n    [anon_sym_boolean] = ACTIONS(203),\n    [anon_sym_string] = ACTIONS(203),\n    [anon_sym_symbol] = ACTIONS(203),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [78] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1680),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(3285),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3399),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1647),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2575),\n    [sym_pattern] = STATE(3129),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2357),\n    [sym_constructor_type] = STATE(2357),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2357),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3234),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2357),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2357),\n    [sym_identifier] = ACTIONS(733),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(737),\n    [anon_sym_typeof] = ACTIONS(739),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(741),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(743),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(745),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(751),\n    [anon_sym_DASH] = ACTIONS(751),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(753),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(755),\n    [sym_number] = ACTIONS(757),\n    [sym_this] = ACTIONS(759),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(761),\n    [sym_false] = ACTIONS(761),\n    [sym_null] = ACTIONS(761),\n    [sym_undefined] = ACTIONS(763),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(767),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(769),\n    [anon_sym_number] = ACTIONS(769),\n    [anon_sym_int] = ACTIONS(769),\n    [anon_sym_float] = ACTIONS(769),\n    [anon_sym_float2] = ACTIONS(769),\n    [anon_sym_float3] = ACTIONS(769),\n    [anon_sym_float4] = ACTIONS(769),\n    [anon_sym_float3x3] = ACTIONS(769),\n    [anon_sym_float2x2] = ACTIONS(769),\n    [anon_sym_float4x4] = ACTIONS(769),\n    [anon_sym_int2] = ACTIONS(769),\n    [anon_sym_int3] = ACTIONS(769),\n    [anon_sym_int4] = ACTIONS(769),\n    [anon_sym_int3x3] = ACTIONS(769),\n    [anon_sym_int2x2] = ACTIONS(769),\n    [anon_sym_int4x4] = ACTIONS(769),\n    [anon_sym_boolean] = ACTIONS(769),\n    [anon_sym_string] = ACTIONS(769),\n    [anon_sym_symbol] = ACTIONS(769),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [79] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1760),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3460),\n    [sym_string] = STATE(1853),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(3082),\n    [sym_constructor_type] = STATE(3082),\n    [sym__primary_type] = STATE(2734),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2949),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(3082),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(3082),\n    [sym_identifier] = ACTIONS(781),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(787),\n    [anon_sym_typeof] = ACTIONS(687),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(789),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(693),\n    [anon_sym_DASH] = ACTIONS(693),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(695),\n    [sym_number] = ACTIONS(697),\n    [sym_this] = ACTIONS(793),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(701),\n    [sym_false] = ACTIONS(701),\n    [sym_null] = ACTIONS(701),\n    [sym_undefined] = ACTIONS(795),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(797),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(799),\n    [anon_sym_number] = ACTIONS(799),\n    [anon_sym_int] = ACTIONS(799),\n    [anon_sym_float] = ACTIONS(799),\n    [anon_sym_float2] = ACTIONS(799),\n    [anon_sym_float3] = ACTIONS(799),\n    [anon_sym_float4] = ACTIONS(799),\n    [anon_sym_float3x3] = ACTIONS(799),\n    [anon_sym_float2x2] = ACTIONS(799),\n    [anon_sym_float4x4] = ACTIONS(799),\n    [anon_sym_int2] = ACTIONS(799),\n    [anon_sym_int3] = ACTIONS(799),\n    [anon_sym_int4] = ACTIONS(799),\n    [anon_sym_int3x3] = ACTIONS(799),\n    [anon_sym_int2x2] = ACTIONS(799),\n    [anon_sym_int4x4] = ACTIONS(799),\n    [anon_sym_boolean] = ACTIONS(799),\n    [anon_sym_string] = ACTIONS(799),\n    [anon_sym_symbol] = ACTIONS(799),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [80] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1712),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1946),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(394),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(803),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(809),\n    [anon_sym_typeof] = ACTIONS(811),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(817),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(823),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(829),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(831),\n    [anon_sym_DASH] = ACTIONS(831),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(833),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(839),\n    [sym_number] = ACTIONS(841),\n    [sym_this] = ACTIONS(843),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(845),\n    [sym_false] = ACTIONS(845),\n    [sym_null] = ACTIONS(845),\n    [sym_undefined] = ACTIONS(847),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(849),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(851),\n    [anon_sym_number] = ACTIONS(851),\n    [anon_sym_int] = ACTIONS(851),\n    [anon_sym_float] = ACTIONS(851),\n    [anon_sym_float2] = ACTIONS(851),\n    [anon_sym_float3] = ACTIONS(851),\n    [anon_sym_float4] = ACTIONS(851),\n    [anon_sym_float3x3] = ACTIONS(851),\n    [anon_sym_float2x2] = ACTIONS(851),\n    [anon_sym_float4x4] = ACTIONS(851),\n    [anon_sym_int2] = ACTIONS(851),\n    [anon_sym_int3] = ACTIONS(851),\n    [anon_sym_int4] = ACTIONS(851),\n    [anon_sym_int3x3] = ACTIONS(851),\n    [anon_sym_int2x2] = ACTIONS(851),\n    [anon_sym_int4x4] = ACTIONS(851),\n    [anon_sym_boolean] = ACTIONS(851),\n    [anon_sym_string] = ACTIONS(851),\n    [anon_sym_symbol] = ACTIONS(851),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(113),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [81] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1313),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1645),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(855),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(857),\n    [anon_sym_typeof] = ACTIONS(859),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(861),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(863),\n    [anon_sym_DASH] = ACTIONS(863),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(865),\n    [sym_number] = ACTIONS(867),\n    [sym_this] = ACTIONS(869),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(871),\n    [sym_false] = ACTIONS(871),\n    [sym_null] = ACTIONS(871),\n    [sym_undefined] = ACTIONS(873),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(797),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(875),\n    [anon_sym_number] = ACTIONS(875),\n    [anon_sym_int] = ACTIONS(875),\n    [anon_sym_float] = ACTIONS(875),\n    [anon_sym_float2] = ACTIONS(875),\n    [anon_sym_float3] = ACTIONS(875),\n    [anon_sym_float4] = ACTIONS(875),\n    [anon_sym_float3x3] = ACTIONS(875),\n    [anon_sym_float2x2] = ACTIONS(875),\n    [anon_sym_float4x4] = ACTIONS(875),\n    [anon_sym_int2] = ACTIONS(875),\n    [anon_sym_int3] = ACTIONS(875),\n    [anon_sym_int4] = ACTIONS(875),\n    [anon_sym_int3x3] = ACTIONS(875),\n    [anon_sym_int2x2] = ACTIONS(875),\n    [anon_sym_int4x4] = ACTIONS(875),\n    [anon_sym_boolean] = ACTIONS(875),\n    [anon_sym_string] = ACTIONS(875),\n    [anon_sym_symbol] = ACTIONS(875),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [82] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1969),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1921),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(877),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(883),\n    [anon_sym_typeof] = ACTIONS(885),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(887),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(891),\n    [anon_sym_DASH] = ACTIONS(891),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(893),\n    [sym_number] = ACTIONS(895),\n    [sym_this] = ACTIONS(897),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(899),\n    [sym_false] = ACTIONS(899),\n    [sym_null] = ACTIONS(899),\n    [sym_undefined] = ACTIONS(901),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(903),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(905),\n    [anon_sym_number] = ACTIONS(905),\n    [anon_sym_int] = ACTIONS(905),\n    [anon_sym_float] = ACTIONS(905),\n    [anon_sym_float2] = ACTIONS(905),\n    [anon_sym_float3] = ACTIONS(905),\n    [anon_sym_float4] = ACTIONS(905),\n    [anon_sym_float3x3] = ACTIONS(905),\n    [anon_sym_float2x2] = ACTIONS(905),\n    [anon_sym_float4x4] = ACTIONS(905),\n    [anon_sym_int2] = ACTIONS(905),\n    [anon_sym_int3] = ACTIONS(905),\n    [anon_sym_int4] = ACTIONS(905),\n    [anon_sym_int3x3] = ACTIONS(905),\n    [anon_sym_int2x2] = ACTIONS(905),\n    [anon_sym_int4x4] = ACTIONS(905),\n    [anon_sym_boolean] = ACTIONS(905),\n    [anon_sym_string] = ACTIONS(905),\n    [anon_sym_symbol] = ACTIONS(905),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [83] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1348),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2738),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2738),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1087),\n    [sym_subscript_expression] = STATE(1087),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2738),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1877),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1087),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2797),\n    [sym_constructor_type] = STATE(2797),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2797),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(443),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2797),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2797),\n    [sym_identifier] = ACTIONS(909),\n    [anon_sym_pub] = ACTIONS(911),\n    [anon_sym_export] = ACTIONS(911),\n    [anon_sym_type] = ACTIONS(911),\n    [anon_sym_namespace] = ACTIONS(913),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(915),\n    [anon_sym_typeof] = ACTIONS(629),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(637),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(911),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_fn] = ACTIONS(911),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(645),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(653),\n    [anon_sym_DASH] = ACTIONS(653),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(655),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(187),\n    [sym_number] = ACTIONS(189),\n    [sym_this] = ACTIONS(661),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(195),\n    [sym_false] = ACTIONS(195),\n    [sym_null] = ACTIONS(195),\n    [sym_undefined] = ACTIONS(919),\n    [anon_sym_static] = ACTIONS(911),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(911),\n    [anon_sym_public] = ACTIONS(911),\n    [anon_sym_private] = ACTIONS(911),\n    [anon_sym_protected] = ACTIONS(911),\n    [anon_sym_override] = ACTIONS(911),\n    [anon_sym_readonly] = ACTIONS(921),\n    [anon_sym_module] = ACTIONS(911),\n    [anon_sym_any] = ACTIONS(923),\n    [anon_sym_number] = ACTIONS(923),\n    [anon_sym_int] = ACTIONS(923),\n    [anon_sym_float] = ACTIONS(923),\n    [anon_sym_float2] = ACTIONS(923),\n    [anon_sym_float3] = ACTIONS(923),\n    [anon_sym_float4] = ACTIONS(923),\n    [anon_sym_float3x3] = ACTIONS(923),\n    [anon_sym_float2x2] = ACTIONS(923),\n    [anon_sym_float4x4] = ACTIONS(923),\n    [anon_sym_int2] = ACTIONS(923),\n    [anon_sym_int3] = ACTIONS(923),\n    [anon_sym_int4] = ACTIONS(923),\n    [anon_sym_int3x3] = ACTIONS(923),\n    [anon_sym_int2x2] = ACTIONS(923),\n    [anon_sym_int4x4] = ACTIONS(923),\n    [anon_sym_boolean] = ACTIONS(923),\n    [anon_sym_string] = ACTIONS(923),\n    [anon_sym_symbol] = ACTIONS(923),\n    [anon_sym_workgroup] = ACTIONS(925),\n    [anon_sym_get] = ACTIONS(911),\n    [anon_sym_set] = ACTIONS(911),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [84] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1386),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1649),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(335),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(927),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(933),\n    [anon_sym_typeof] = ACTIONS(935),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(817),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(937),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(941),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(945),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(947),\n    [sym_number] = ACTIONS(949),\n    [sym_this] = ACTIONS(951),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(953),\n    [sym_false] = ACTIONS(953),\n    [sym_null] = ACTIONS(953),\n    [sym_undefined] = ACTIONS(955),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(957),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(959),\n    [anon_sym_number] = ACTIONS(959),\n    [anon_sym_int] = ACTIONS(959),\n    [anon_sym_float] = ACTIONS(959),\n    [anon_sym_float2] = ACTIONS(959),\n    [anon_sym_float3] = ACTIONS(959),\n    [anon_sym_float4] = ACTIONS(959),\n    [anon_sym_float3x3] = ACTIONS(959),\n    [anon_sym_float2x2] = ACTIONS(959),\n    [anon_sym_float4x4] = ACTIONS(959),\n    [anon_sym_int2] = ACTIONS(959),\n    [anon_sym_int3] = ACTIONS(959),\n    [anon_sym_int4] = ACTIONS(959),\n    [anon_sym_int3x3] = ACTIONS(959),\n    [anon_sym_int2x2] = ACTIONS(959),\n    [anon_sym_int4x4] = ACTIONS(959),\n    [anon_sym_boolean] = ACTIONS(959),\n    [anon_sym_string] = ACTIONS(959),\n    [anon_sym_symbol] = ACTIONS(959),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(113),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [85] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1369),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1649),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(324),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(963),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(933),\n    [anon_sym_typeof] = ACTIONS(969),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(817),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(937),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(981),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(983),\n    [anon_sym_DASH] = ACTIONS(983),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(985),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(947),\n    [sym_number] = ACTIONS(949),\n    [sym_this] = ACTIONS(951),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(953),\n    [sym_false] = ACTIONS(953),\n    [sym_null] = ACTIONS(953),\n    [sym_undefined] = ACTIONS(991),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(993),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(995),\n    [anon_sym_number] = ACTIONS(995),\n    [anon_sym_int] = ACTIONS(995),\n    [anon_sym_float] = ACTIONS(995),\n    [anon_sym_float2] = ACTIONS(995),\n    [anon_sym_float3] = ACTIONS(995),\n    [anon_sym_float4] = ACTIONS(995),\n    [anon_sym_float3x3] = ACTIONS(995),\n    [anon_sym_float2x2] = ACTIONS(995),\n    [anon_sym_float4x4] = ACTIONS(995),\n    [anon_sym_int2] = ACTIONS(995),\n    [anon_sym_int3] = ACTIONS(995),\n    [anon_sym_int4] = ACTIONS(995),\n    [anon_sym_int3x3] = ACTIONS(995),\n    [anon_sym_int2x2] = ACTIONS(995),\n    [anon_sym_int4x4] = ACTIONS(995),\n    [anon_sym_boolean] = ACTIONS(995),\n    [anon_sym_string] = ACTIONS(995),\n    [anon_sym_symbol] = ACTIONS(995),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(113),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [86] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2485),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2485),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1151),\n    [sym_subscript_expression] = STATE(1151),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2485),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1995),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1151),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2797),\n    [sym_constructor_type] = STATE(2797),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2797),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(389),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2797),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2797),\n    [sym_identifier] = ACTIONS(999),\n    [anon_sym_pub] = ACTIONS(1001),\n    [anon_sym_export] = ACTIONS(1001),\n    [anon_sym_type] = ACTIONS(1001),\n    [anon_sym_namespace] = ACTIONS(1003),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1005),\n    [anon_sym_typeof] = ACTIONS(1007),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1009),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1001),\n    [anon_sym_async] = ACTIONS(1011),\n    [anon_sym_fn] = ACTIONS(1001),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(162),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(1013),\n    [anon_sym_DASH] = ACTIONS(1013),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(176),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1015),\n    [sym_number] = ACTIONS(1017),\n    [sym_this] = ACTIONS(1019),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(1021),\n    [sym_false] = ACTIONS(1021),\n    [sym_null] = ACTIONS(1021),\n    [sym_undefined] = ACTIONS(1023),\n    [anon_sym_static] = ACTIONS(1001),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(1001),\n    [anon_sym_public] = ACTIONS(1001),\n    [anon_sym_private] = ACTIONS(1001),\n    [anon_sym_protected] = ACTIONS(1001),\n    [anon_sym_override] = ACTIONS(1001),\n    [anon_sym_readonly] = ACTIONS(1025),\n    [anon_sym_module] = ACTIONS(1001),\n    [anon_sym_any] = ACTIONS(1027),\n    [anon_sym_number] = ACTIONS(1027),\n    [anon_sym_int] = ACTIONS(1027),\n    [anon_sym_float] = ACTIONS(1027),\n    [anon_sym_float2] = ACTIONS(1027),\n    [anon_sym_float3] = ACTIONS(1027),\n    [anon_sym_float4] = ACTIONS(1027),\n    [anon_sym_float3x3] = ACTIONS(1027),\n    [anon_sym_float2x2] = ACTIONS(1027),\n    [anon_sym_float4x4] = ACTIONS(1027),\n    [anon_sym_int2] = ACTIONS(1027),\n    [anon_sym_int3] = ACTIONS(1027),\n    [anon_sym_int4] = ACTIONS(1027),\n    [anon_sym_int3x3] = ACTIONS(1027),\n    [anon_sym_int2x2] = ACTIONS(1027),\n    [anon_sym_int4x4] = ACTIONS(1027),\n    [anon_sym_boolean] = ACTIONS(1027),\n    [anon_sym_string] = ACTIONS(1027),\n    [anon_sym_symbol] = ACTIONS(1027),\n    [anon_sym_workgroup] = ACTIONS(1029),\n    [anon_sym_get] = ACTIONS(1001),\n    [anon_sym_set] = ACTIONS(1001),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [87] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1599),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1921),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(347),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(1031),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1037),\n    [anon_sym_typeof] = ACTIONS(1039),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(887),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1049),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(1051),\n    [anon_sym_DASH] = ACTIONS(1051),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1053),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(893),\n    [sym_number] = ACTIONS(895),\n    [sym_this] = ACTIONS(897),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(899),\n    [sym_false] = ACTIONS(899),\n    [sym_null] = ACTIONS(899),\n    [sym_undefined] = ACTIONS(1059),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1061),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1063),\n    [anon_sym_number] = ACTIONS(1063),\n    [anon_sym_int] = ACTIONS(1063),\n    [anon_sym_float] = ACTIONS(1063),\n    [anon_sym_float2] = ACTIONS(1063),\n    [anon_sym_float3] = ACTIONS(1063),\n    [anon_sym_float4] = ACTIONS(1063),\n    [anon_sym_float3x3] = ACTIONS(1063),\n    [anon_sym_float2x2] = ACTIONS(1063),\n    [anon_sym_float4x4] = ACTIONS(1063),\n    [anon_sym_int2] = ACTIONS(1063),\n    [anon_sym_int3] = ACTIONS(1063),\n    [anon_sym_int4] = ACTIONS(1063),\n    [anon_sym_int3x3] = ACTIONS(1063),\n    [anon_sym_int2x2] = ACTIONS(1063),\n    [anon_sym_int4x4] = ACTIONS(1063),\n    [anon_sym_boolean] = ACTIONS(1063),\n    [anon_sym_string] = ACTIONS(1063),\n    [anon_sym_symbol] = ACTIONS(1063),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [88] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1883),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_nested_identifier] = STATE(3453),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1921),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2623),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_type_arguments] = STATE(322),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3211),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(1067),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(883),\n    [anon_sym_typeof] = ACTIONS(1073),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(140),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(887),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1085),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(1087),\n    [anon_sym_DASH] = ACTIONS(1087),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1089),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(893),\n    [sym_number] = ACTIONS(895),\n    [sym_this] = ACTIONS(897),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(899),\n    [sym_false] = ACTIONS(899),\n    [sym_null] = ACTIONS(899),\n    [sym_undefined] = ACTIONS(1095),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1097),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1099),\n    [anon_sym_number] = ACTIONS(1099),\n    [anon_sym_int] = ACTIONS(1099),\n    [anon_sym_float] = ACTIONS(1099),\n    [anon_sym_float2] = ACTIONS(1099),\n    [anon_sym_float3] = ACTIONS(1099),\n    [anon_sym_float4] = ACTIONS(1099),\n    [anon_sym_float3x3] = ACTIONS(1099),\n    [anon_sym_float2x2] = ACTIONS(1099),\n    [anon_sym_float4x4] = ACTIONS(1099),\n    [anon_sym_int2] = ACTIONS(1099),\n    [anon_sym_int3] = ACTIONS(1099),\n    [anon_sym_int4] = ACTIONS(1099),\n    [anon_sym_int3x3] = ACTIONS(1099),\n    [anon_sym_int2x2] = ACTIONS(1099),\n    [anon_sym_int4x4] = ACTIONS(1099),\n    [anon_sym_boolean] = ACTIONS(1099),\n    [anon_sym_string] = ACTIONS(1099),\n    [anon_sym_symbol] = ACTIONS(1099),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [89] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1272),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_STAR] = ACTIONS(1107),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1111),\n    [anon_sym_RBRACE] = ACTIONS(1111),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(657),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1111),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_COLON] = ACTIONS(1105),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_RBRACK] = ACTIONS(1111),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [90] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1341),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_STAR] = ACTIONS(1125),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_COMMA] = ACTIONS(1111),\n    [anon_sym_RBRACE] = ACTIONS(1111),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(21),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_SEMI] = ACTIONS(1111),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(113),\n    [sym__automatic_semicolon] = ACTIONS(1111),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [91] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1331),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_STAR] = ACTIONS(1131),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_COMMA] = ACTIONS(1111),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(987),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_of] = ACTIONS(1105),\n    [anon_sym_SEMI] = ACTIONS(1111),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(113),\n    [sym__automatic_semicolon] = ACTIONS(1111),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [92] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1686),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_STAR] = ACTIONS(1139),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(835),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_SEMI] = ACTIONS(1111),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(113),\n    [sym__automatic_semicolon] = ACTIONS(1111),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [93] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1576),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_STAR] = ACTIONS(1147),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1055),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_COLON] = ACTIONS(1105),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_RBRACK] = ACTIONS(1111),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [94] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1881),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_STAR] = ACTIONS(1155),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1091),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_of] = ACTIONS(1105),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [95] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1959),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_as] = ACTIONS(1105),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_STAR] = ACTIONS(1167),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(178),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_in] = ACTIONS(1105),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1105),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1105),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_QMARK_DOT] = ACTIONS(1111),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_COLON_COLON] = ACTIONS(1111),\n    [anon_sym_AMP_AMP] = ACTIONS(1111),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1111),\n    [anon_sym_GT_GT] = ACTIONS(1105),\n    [anon_sym_GT_GT_GT] = ACTIONS(1111),\n    [anon_sym_LT_LT] = ACTIONS(1111),\n    [anon_sym_AMP] = ACTIONS(1105),\n    [anon_sym_CARET] = ACTIONS(1111),\n    [anon_sym_PIPE] = ACTIONS(1105),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_PERCENT] = ACTIONS(1111),\n    [anon_sym_STAR_STAR] = ACTIONS(1111),\n    [anon_sym_LT_EQ] = ACTIONS(1111),\n    [anon_sym_EQ_EQ] = ACTIONS(1105),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_BANG_EQ] = ACTIONS(1105),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1111),\n    [anon_sym_GT_EQ] = ACTIONS(1111),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1111),\n    [anon_sym_instanceof] = ACTIONS(1105),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_satisfies] = ACTIONS(1105),\n    [anon_sym_shader] = ACTIONS(209),\n    [sym__ternary_qmark] = ACTIONS(1111),\n  },\n  [96] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1173),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_RPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [97] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1388),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3573),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1205),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(1209),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [98] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1211),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(1213),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [99] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1384),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3386),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1205),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(1209),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [100] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [101] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1335),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3586),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1205),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(1209),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [102] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1337),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3504),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(683),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1205),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(705),\n    [anon_sym_readonly] = ACTIONS(1209),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [103] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1219),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [104] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(2977),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(2977),\n    [sym_optional_parameter] = STATE(2977),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(689),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [105] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1227),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [106] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3016),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3016),\n    [sym_optional_parameter] = STATE(3016),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1229),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [107] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1231),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [108] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3092),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3092),\n    [sym_optional_parameter] = STATE(3092),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1233),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [109] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [110] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1235),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [111] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1237),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [112] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1239),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [113] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1173),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(1241),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(1241),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [114] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1246),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(1248),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [115] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(130),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [116] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1250),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [117] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym__formal_parameter] = STATE(3288),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2793),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(179),\n    [sym_override_modifier] = STATE(188),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_required_parameter] = STATE(3288),\n    [sym_optional_parameter] = STATE(3288),\n    [sym__parameter_name] = STATE(2482),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(148),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1223),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1225),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [118] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2251),\n    [sym_constructor_type] = STATE(2251),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2251),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2251),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2251),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(1256),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_RBRACE] = ACTIONS(130),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(1268),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(1270),\n    [anon_sym_PLUS] = ACTIONS(1272),\n    [anon_sym_DASH] = ACTIONS(1272),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(1286),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [119] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1290),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(1292),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [120] = {\n    [sym_statement_block] = STATE(127),\n    [ts_builtin_sym_end] = ACTIONS(1294),\n    [sym_identifier] = ACTIONS(1296),\n    [anon_sym_pub] = ACTIONS(1296),\n    [anon_sym_export] = ACTIONS(1296),\n    [anon_sym_type] = ACTIONS(1296),\n    [anon_sym_as] = ACTIONS(1296),\n    [anon_sym_namespace] = ACTIONS(1296),\n    [anon_sym_STAR] = ACTIONS(1296),\n    [anon_sym_LBRACE] = ACTIONS(1298),\n    [anon_sym_COMMA] = ACTIONS(1294),\n    [anon_sym_RBRACE] = ACTIONS(1294),\n    [anon_sym_typeof] = ACTIONS(1296),\n    [anon_sym_import] = ACTIONS(1296),\n    [anon_sym_var] = ACTIONS(1296),\n    [anon_sym_let] = ACTIONS(1296),\n    [anon_sym_const] = ACTIONS(1296),\n    [anon_sym_BANG] = ACTIONS(1296),\n    [anon_sym_else] = ACTIONS(1296),\n    [anon_sym_if] = ACTIONS(1296),\n    [anon_sym_switch] = ACTIONS(1296),\n    [anon_sym_for] = ACTIONS(1296),\n    [anon_sym_LPAREN] = ACTIONS(1294),\n    [anon_sym_await] = ACTIONS(1296),\n    [anon_sym_in] = ACTIONS(1296),\n    [anon_sym_while] = ACTIONS(1296),\n    [anon_sym_do] = ACTIONS(1296),\n    [anon_sym_try] = ACTIONS(1296),\n    [anon_sym_with] = ACTIONS(1296),\n    [anon_sym_break] = ACTIONS(1296),\n    [anon_sym_continue] = ACTIONS(1296),\n    [anon_sym_debugger] = ACTIONS(1296),\n    [anon_sym_return] = ACTIONS(1296),\n    [anon_sym_throw] = ACTIONS(1296),\n    [anon_sym_SEMI] = ACTIONS(1294),\n    [anon_sym_case] = ACTIONS(1296),\n    [anon_sym_default] = ACTIONS(1296),\n    [anon_sym_yield] = ACTIONS(1296),\n    [anon_sym_LBRACK] = ACTIONS(1294),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1294),\n    [anon_sym_LT] = ACTIONS(1296),\n    [anon_sym_GT] = ACTIONS(1296),\n    [anon_sym_SLASH] = ACTIONS(1296),\n    [anon_sym_DOT] = ACTIONS(1300),\n    [anon_sym_struct] = ACTIONS(1296),\n    [anon_sym_async] = ACTIONS(1296),\n    [anon_sym_fn] = ACTIONS(1296),\n    [anon_sym_fn_STAR] = ACTIONS(1294),\n    [anon_sym_QMARK_DOT] = ACTIONS(1294),\n    [anon_sym_new] = ACTIONS(1296),\n    [anon_sym_COLON_COLON] = ACTIONS(1294),\n    [anon_sym_AMP_AMP] = ACTIONS(1294),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1294),\n    [anon_sym_GT_GT] = ACTIONS(1296),\n    [anon_sym_GT_GT_GT] = ACTIONS(1294),\n    [anon_sym_LT_LT] = ACTIONS(1294),\n    [anon_sym_AMP] = ACTIONS(1296),\n    [anon_sym_CARET] = ACTIONS(1294),\n    [anon_sym_PIPE] = ACTIONS(1296),\n    [anon_sym_PLUS] = ACTIONS(1296),\n    [anon_sym_DASH] = ACTIONS(1296),\n    [anon_sym_PERCENT] = ACTIONS(1294),\n    [anon_sym_STAR_STAR] = ACTIONS(1294),\n    [anon_sym_LT_EQ] = ACTIONS(1294),\n    [anon_sym_EQ_EQ] = ACTIONS(1296),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1294),\n    [anon_sym_BANG_EQ] = ACTIONS(1296),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1294),\n    [anon_sym_GT_EQ] = ACTIONS(1294),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1294),\n    [anon_sym_instanceof] = ACTIONS(1296),\n    [anon_sym_TILDE] = ACTIONS(1294),\n    [anon_sym_void] = ACTIONS(1296),\n    [anon_sym_delete] = ACTIONS(1296),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1294),\n    [anon_sym_DASH_DASH] = ACTIONS(1294),\n    [anon_sym_DQUOTE] = ACTIONS(1294),\n    [anon_sym_SQUOTE] = ACTIONS(1294),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1294),\n    [sym_number] = ACTIONS(1294),\n    [sym_this] = ACTIONS(1296),\n    [sym_super] = ACTIONS(1296),\n    [sym_true] = ACTIONS(1296),\n    [sym_false] = ACTIONS(1296),\n    [sym_null] = ACTIONS(1296),\n    [sym_undefined] = ACTIONS(1296),\n    [anon_sym_AT] = ACTIONS(1294),\n    [anon_sym_static] = ACTIONS(1296),\n    [anon_sym_declare] = ACTIONS(1296),\n    [anon_sym_public] = ACTIONS(1296),\n    [anon_sym_private] = ACTIONS(1296),\n    [anon_sym_protected] = ACTIONS(1296),\n    [anon_sym_override] = ACTIONS(1296),\n    [anon_sym_readonly] = ACTIONS(1296),\n    [anon_sym_module] = ACTIONS(1296),\n    [anon_sym_any] = ACTIONS(1296),\n    [anon_sym_number] = ACTIONS(1296),\n    [anon_sym_int] = ACTIONS(1296),\n    [anon_sym_float] = ACTIONS(1296),\n    [anon_sym_float2] = ACTIONS(1296),\n    [anon_sym_float3] = ACTIONS(1296),\n    [anon_sym_float4] = ACTIONS(1296),\n    [anon_sym_float3x3] = ACTIONS(1296),\n    [anon_sym_float2x2] = ACTIONS(1296),\n    [anon_sym_float4x4] = ACTIONS(1296),\n    [anon_sym_int2] = ACTIONS(1296),\n    [anon_sym_int3] = ACTIONS(1296),\n    [anon_sym_int4] = ACTIONS(1296),\n    [anon_sym_int3x3] = ACTIONS(1296),\n    [anon_sym_int2x2] = ACTIONS(1296),\n    [anon_sym_int4x4] = ACTIONS(1296),\n    [anon_sym_boolean] = ACTIONS(1296),\n    [anon_sym_string] = ACTIONS(1296),\n    [anon_sym_symbol] = ACTIONS(1296),\n    [anon_sym_workgroup] = ACTIONS(1296),\n    [anon_sym_get] = ACTIONS(1296),\n    [anon_sym_set] = ACTIONS(1296),\n    [anon_sym_satisfies] = ACTIONS(1296),\n    [anon_sym_trait] = ACTIONS(1296),\n    [anon_sym_impl] = ACTIONS(1296),\n    [anon_sym_enum] = ACTIONS(1296),\n    [anon_sym_shader] = ACTIONS(1296),\n    [sym__automatic_semicolon] = ACTIONS(1294),\n    [sym__ternary_qmark] = ACTIONS(1294),\n  },\n  [121] = {\n    [ts_builtin_sym_end] = ACTIONS(1302),\n    [sym_identifier] = ACTIONS(1304),\n    [anon_sym_pub] = ACTIONS(1304),\n    [anon_sym_export] = ACTIONS(1304),\n    [anon_sym_type] = ACTIONS(1304),\n    [anon_sym_EQ] = ACTIONS(1306),\n    [anon_sym_as] = ACTIONS(1308),\n    [anon_sym_namespace] = ACTIONS(1304),\n    [anon_sym_STAR] = ACTIONS(1308),\n    [anon_sym_LBRACE] = ACTIONS(1302),\n    [anon_sym_COMMA] = ACTIONS(1310),\n    [anon_sym_RBRACE] = ACTIONS(1302),\n    [anon_sym_typeof] = ACTIONS(1304),\n    [anon_sym_import] = ACTIONS(1304),\n    [anon_sym_var] = ACTIONS(1304),\n    [anon_sym_let] = ACTIONS(1304),\n    [anon_sym_const] = ACTIONS(1304),\n    [anon_sym_BANG] = ACTIONS(1304),\n    [anon_sym_else] = ACTIONS(1304),\n    [anon_sym_if] = ACTIONS(1304),\n    [anon_sym_switch] = ACTIONS(1304),\n    [anon_sym_for] = ACTIONS(1304),\n    [anon_sym_LPAREN] = ACTIONS(1302),\n    [anon_sym_await] = ACTIONS(1304),\n    [anon_sym_in] = ACTIONS(1308),\n    [anon_sym_while] = ACTIONS(1304),\n    [anon_sym_do] = ACTIONS(1304),\n    [anon_sym_try] = ACTIONS(1304),\n    [anon_sym_with] = ACTIONS(1304),\n    [anon_sym_break] = ACTIONS(1304),\n    [anon_sym_continue] = ACTIONS(1304),\n    [anon_sym_debugger] = ACTIONS(1304),\n    [anon_sym_return] = ACTIONS(1304),\n    [anon_sym_throw] = ACTIONS(1304),\n    [anon_sym_SEMI] = ACTIONS(1302),\n    [anon_sym_case] = ACTIONS(1304),\n    [anon_sym_default] = ACTIONS(1304),\n    [anon_sym_yield] = ACTIONS(1304),\n    [anon_sym_LBRACK] = ACTIONS(1302),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1302),\n    [anon_sym_LT] = ACTIONS(1304),\n    [anon_sym_GT] = ACTIONS(1308),\n    [anon_sym_SLASH] = ACTIONS(1304),\n    [anon_sym_DOT] = ACTIONS(1308),\n    [anon_sym_struct] = ACTIONS(1304),\n    [anon_sym_async] = ACTIONS(1304),\n    [anon_sym_fn] = ACTIONS(1304),\n    [anon_sym_fn_STAR] = ACTIONS(1302),\n    [anon_sym_QMARK_DOT] = ACTIONS(1310),\n    [anon_sym_new] = ACTIONS(1304),\n    [anon_sym_COLON_COLON] = ACTIONS(1310),\n    [anon_sym_AMP_AMP] = ACTIONS(1310),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1310),\n    [anon_sym_GT_GT] = ACTIONS(1308),\n    [anon_sym_GT_GT_GT] = ACTIONS(1310),\n    [anon_sym_LT_LT] = ACTIONS(1310),\n    [anon_sym_AMP] = ACTIONS(1308),\n    [anon_sym_CARET] = ACTIONS(1310),\n    [anon_sym_PIPE] = ACTIONS(1308),\n    [anon_sym_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH] = ACTIONS(1304),\n    [anon_sym_PERCENT] = ACTIONS(1310),\n    [anon_sym_STAR_STAR] = ACTIONS(1310),\n    [anon_sym_LT_EQ] = ACTIONS(1310),\n    [anon_sym_EQ_EQ] = ACTIONS(1308),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1310),\n    [anon_sym_BANG_EQ] = ACTIONS(1308),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1310),\n    [anon_sym_GT_EQ] = ACTIONS(1310),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1310),\n    [anon_sym_instanceof] = ACTIONS(1308),\n    [anon_sym_TILDE] = ACTIONS(1302),\n    [anon_sym_void] = ACTIONS(1304),\n    [anon_sym_delete] = ACTIONS(1304),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1302),\n    [anon_sym_DASH_DASH] = ACTIONS(1302),\n    [anon_sym_DQUOTE] = ACTIONS(1302),\n    [anon_sym_SQUOTE] = ACTIONS(1302),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1302),\n    [sym_number] = ACTIONS(1302),\n    [sym_this] = ACTIONS(1304),\n    [sym_super] = ACTIONS(1304),\n    [sym_true] = ACTIONS(1304),\n    [sym_false] = ACTIONS(1304),\n    [sym_null] = ACTIONS(1304),\n    [sym_undefined] = ACTIONS(1304),\n    [anon_sym_AT] = ACTIONS(1302),\n    [anon_sym_static] = ACTIONS(1304),\n    [anon_sym_declare] = ACTIONS(1304),\n    [anon_sym_public] = ACTIONS(1304),\n    [anon_sym_private] = ACTIONS(1304),\n    [anon_sym_protected] = ACTIONS(1304),\n    [anon_sym_override] = ACTIONS(1304),\n    [anon_sym_readonly] = ACTIONS(1304),\n    [anon_sym_module] = ACTIONS(1304),\n    [anon_sym_any] = ACTIONS(1304),\n    [anon_sym_number] = ACTIONS(1304),\n    [anon_sym_int] = ACTIONS(1304),\n    [anon_sym_float] = ACTIONS(1304),\n    [anon_sym_float2] = ACTIONS(1304),\n    [anon_sym_float3] = ACTIONS(1304),\n    [anon_sym_float4] = ACTIONS(1304),\n    [anon_sym_float3x3] = ACTIONS(1304),\n    [anon_sym_float2x2] = ACTIONS(1304),\n    [anon_sym_float4x4] = ACTIONS(1304),\n    [anon_sym_int2] = ACTIONS(1304),\n    [anon_sym_int3] = ACTIONS(1304),\n    [anon_sym_int4] = ACTIONS(1304),\n    [anon_sym_int3x3] = ACTIONS(1304),\n    [anon_sym_int2x2] = ACTIONS(1304),\n    [anon_sym_int4x4] = ACTIONS(1304),\n    [anon_sym_boolean] = ACTIONS(1304),\n    [anon_sym_string] = ACTIONS(1304),\n    [anon_sym_symbol] = ACTIONS(1304),\n    [anon_sym_workgroup] = ACTIONS(1304),\n    [anon_sym_get] = ACTIONS(1304),\n    [anon_sym_set] = ACTIONS(1304),\n    [anon_sym_satisfies] = ACTIONS(1308),\n    [anon_sym_trait] = ACTIONS(1304),\n    [anon_sym_impl] = ACTIONS(1304),\n    [anon_sym_enum] = ACTIONS(1304),\n    [anon_sym_shader] = ACTIONS(1304),\n    [sym__automatic_semicolon] = ACTIONS(1312),\n    [sym__ternary_qmark] = ACTIONS(1310),\n  },\n  [122] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [123] = {\n    [sym_statement_block] = STATE(127),\n    [ts_builtin_sym_end] = ACTIONS(1294),\n    [sym_identifier] = ACTIONS(1296),\n    [anon_sym_pub] = ACTIONS(1296),\n    [anon_sym_export] = ACTIONS(1296),\n    [anon_sym_type] = ACTIONS(1296),\n    [anon_sym_as] = ACTIONS(1296),\n    [anon_sym_namespace] = ACTIONS(1296),\n    [anon_sym_STAR] = ACTIONS(1296),\n    [anon_sym_LBRACE] = ACTIONS(1298),\n    [anon_sym_COMMA] = ACTIONS(1294),\n    [anon_sym_RBRACE] = ACTIONS(1294),\n    [anon_sym_typeof] = ACTIONS(1296),\n    [anon_sym_import] = ACTIONS(1296),\n    [anon_sym_var] = ACTIONS(1296),\n    [anon_sym_let] = ACTIONS(1296),\n    [anon_sym_const] = ACTIONS(1296),\n    [anon_sym_BANG] = ACTIONS(1296),\n    [anon_sym_else] = ACTIONS(1296),\n    [anon_sym_if] = ACTIONS(1296),\n    [anon_sym_switch] = ACTIONS(1296),\n    [anon_sym_for] = ACTIONS(1296),\n    [anon_sym_LPAREN] = ACTIONS(1294),\n    [anon_sym_await] = ACTIONS(1296),\n    [anon_sym_in] = ACTIONS(1296),\n    [anon_sym_while] = ACTIONS(1296),\n    [anon_sym_do] = ACTIONS(1296),\n    [anon_sym_try] = ACTIONS(1296),\n    [anon_sym_with] = ACTIONS(1296),\n    [anon_sym_break] = ACTIONS(1296),\n    [anon_sym_continue] = ACTIONS(1296),\n    [anon_sym_debugger] = ACTIONS(1296),\n    [anon_sym_return] = ACTIONS(1296),\n    [anon_sym_throw] = ACTIONS(1296),\n    [anon_sym_SEMI] = ACTIONS(1294),\n    [anon_sym_case] = ACTIONS(1296),\n    [anon_sym_default] = ACTIONS(1296),\n    [anon_sym_yield] = ACTIONS(1296),\n    [anon_sym_LBRACK] = ACTIONS(1294),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1294),\n    [anon_sym_LT] = ACTIONS(1296),\n    [anon_sym_GT] = ACTIONS(1296),\n    [anon_sym_SLASH] = ACTIONS(1296),\n    [anon_sym_DOT] = ACTIONS(1296),\n    [anon_sym_struct] = ACTIONS(1296),\n    [anon_sym_async] = ACTIONS(1296),\n    [anon_sym_fn] = ACTIONS(1296),\n    [anon_sym_fn_STAR] = ACTIONS(1294),\n    [anon_sym_QMARK_DOT] = ACTIONS(1294),\n    [anon_sym_new] = ACTIONS(1296),\n    [anon_sym_COLON_COLON] = ACTIONS(1294),\n    [anon_sym_AMP_AMP] = ACTIONS(1294),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1294),\n    [anon_sym_GT_GT] = ACTIONS(1296),\n    [anon_sym_GT_GT_GT] = ACTIONS(1294),\n    [anon_sym_LT_LT] = ACTIONS(1294),\n    [anon_sym_AMP] = ACTIONS(1296),\n    [anon_sym_CARET] = ACTIONS(1294),\n    [anon_sym_PIPE] = ACTIONS(1296),\n    [anon_sym_PLUS] = ACTIONS(1296),\n    [anon_sym_DASH] = ACTIONS(1296),\n    [anon_sym_PERCENT] = ACTIONS(1294),\n    [anon_sym_STAR_STAR] = ACTIONS(1294),\n    [anon_sym_LT_EQ] = ACTIONS(1294),\n    [anon_sym_EQ_EQ] = ACTIONS(1296),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1294),\n    [anon_sym_BANG_EQ] = ACTIONS(1296),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1294),\n    [anon_sym_GT_EQ] = ACTIONS(1294),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1294),\n    [anon_sym_instanceof] = ACTIONS(1296),\n    [anon_sym_TILDE] = ACTIONS(1294),\n    [anon_sym_void] = ACTIONS(1296),\n    [anon_sym_delete] = ACTIONS(1296),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1294),\n    [anon_sym_DASH_DASH] = ACTIONS(1294),\n    [anon_sym_DQUOTE] = ACTIONS(1294),\n    [anon_sym_SQUOTE] = ACTIONS(1294),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1294),\n    [sym_number] = ACTIONS(1294),\n    [sym_this] = ACTIONS(1296),\n    [sym_super] = ACTIONS(1296),\n    [sym_true] = ACTIONS(1296),\n    [sym_false] = ACTIONS(1296),\n    [sym_null] = ACTIONS(1296),\n    [sym_undefined] = ACTIONS(1296),\n    [anon_sym_AT] = ACTIONS(1294),\n    [anon_sym_static] = ACTIONS(1296),\n    [anon_sym_declare] = ACTIONS(1296),\n    [anon_sym_public] = ACTIONS(1296),\n    [anon_sym_private] = ACTIONS(1296),\n    [anon_sym_protected] = ACTIONS(1296),\n    [anon_sym_override] = ACTIONS(1296),\n    [anon_sym_readonly] = ACTIONS(1296),\n    [anon_sym_module] = ACTIONS(1296),\n    [anon_sym_any] = ACTIONS(1296),\n    [anon_sym_number] = ACTIONS(1296),\n    [anon_sym_int] = ACTIONS(1296),\n    [anon_sym_float] = ACTIONS(1296),\n    [anon_sym_float2] = ACTIONS(1296),\n    [anon_sym_float3] = ACTIONS(1296),\n    [anon_sym_float4] = ACTIONS(1296),\n    [anon_sym_float3x3] = ACTIONS(1296),\n    [anon_sym_float2x2] = ACTIONS(1296),\n    [anon_sym_float4x4] = ACTIONS(1296),\n    [anon_sym_int2] = ACTIONS(1296),\n    [anon_sym_int3] = ACTIONS(1296),\n    [anon_sym_int4] = ACTIONS(1296),\n    [anon_sym_int3x3] = ACTIONS(1296),\n    [anon_sym_int2x2] = ACTIONS(1296),\n    [anon_sym_int4x4] = ACTIONS(1296),\n    [anon_sym_boolean] = ACTIONS(1296),\n    [anon_sym_string] = ACTIONS(1296),\n    [anon_sym_symbol] = ACTIONS(1296),\n    [anon_sym_workgroup] = ACTIONS(1296),\n    [anon_sym_get] = ACTIONS(1296),\n    [anon_sym_set] = ACTIONS(1296),\n    [anon_sym_satisfies] = ACTIONS(1296),\n    [anon_sym_trait] = ACTIONS(1296),\n    [anon_sym_impl] = ACTIONS(1296),\n    [anon_sym_enum] = ACTIONS(1296),\n    [anon_sym_shader] = ACTIONS(1296),\n    [sym__automatic_semicolon] = ACTIONS(1294),\n    [sym__ternary_qmark] = ACTIONS(1294),\n  },\n  [124] = {\n    [ts_builtin_sym_end] = ACTIONS(1316),\n    [sym_identifier] = ACTIONS(1318),\n    [anon_sym_pub] = ACTIONS(1318),\n    [anon_sym_export] = ACTIONS(1318),\n    [anon_sym_type] = ACTIONS(1318),\n    [anon_sym_as] = ACTIONS(1320),\n    [anon_sym_namespace] = ACTIONS(1318),\n    [anon_sym_STAR] = ACTIONS(1320),\n    [anon_sym_LBRACE] = ACTIONS(1316),\n    [anon_sym_COMMA] = ACTIONS(1322),\n    [anon_sym_RBRACE] = ACTIONS(1316),\n    [anon_sym_typeof] = ACTIONS(1318),\n    [anon_sym_import] = ACTIONS(1318),\n    [anon_sym_var] = ACTIONS(1318),\n    [anon_sym_let] = ACTIONS(1318),\n    [anon_sym_const] = ACTIONS(1318),\n    [anon_sym_BANG] = ACTIONS(1318),\n    [anon_sym_else] = ACTIONS(1318),\n    [anon_sym_if] = ACTIONS(1318),\n    [anon_sym_switch] = ACTIONS(1318),\n    [anon_sym_for] = ACTIONS(1318),\n    [anon_sym_LPAREN] = ACTIONS(1316),\n    [anon_sym_await] = ACTIONS(1318),\n    [anon_sym_in] = ACTIONS(1320),\n    [anon_sym_while] = ACTIONS(1318),\n    [anon_sym_do] = ACTIONS(1318),\n    [anon_sym_try] = ACTIONS(1318),\n    [anon_sym_with] = ACTIONS(1318),\n    [anon_sym_break] = ACTIONS(1318),\n    [anon_sym_continue] = ACTIONS(1318),\n    [anon_sym_debugger] = ACTIONS(1318),\n    [anon_sym_return] = ACTIONS(1318),\n    [anon_sym_throw] = ACTIONS(1318),\n    [anon_sym_SEMI] = ACTIONS(1316),\n    [anon_sym_case] = ACTIONS(1318),\n    [anon_sym_default] = ACTIONS(1318),\n    [anon_sym_yield] = ACTIONS(1318),\n    [anon_sym_LBRACK] = ACTIONS(1316),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1316),\n    [anon_sym_LT] = ACTIONS(1318),\n    [anon_sym_GT] = ACTIONS(1320),\n    [anon_sym_SLASH] = ACTIONS(1318),\n    [anon_sym_DOT] = ACTIONS(1320),\n    [anon_sym_struct] = ACTIONS(1318),\n    [anon_sym_async] = ACTIONS(1318),\n    [anon_sym_fn] = ACTIONS(1318),\n    [anon_sym_fn_STAR] = ACTIONS(1316),\n    [anon_sym_QMARK_DOT] = ACTIONS(1322),\n    [anon_sym_new] = ACTIONS(1318),\n    [anon_sym_COLON_COLON] = ACTIONS(1322),\n    [anon_sym_AMP_AMP] = ACTIONS(1322),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1322),\n    [anon_sym_GT_GT] = ACTIONS(1320),\n    [anon_sym_GT_GT_GT] = ACTIONS(1322),\n    [anon_sym_LT_LT] = ACTIONS(1322),\n    [anon_sym_AMP] = ACTIONS(1320),\n    [anon_sym_CARET] = ACTIONS(1322),\n    [anon_sym_PIPE] = ACTIONS(1320),\n    [anon_sym_PLUS] = ACTIONS(1318),\n    [anon_sym_DASH] = ACTIONS(1318),\n    [anon_sym_PERCENT] = ACTIONS(1322),\n    [anon_sym_STAR_STAR] = ACTIONS(1322),\n    [anon_sym_LT_EQ] = ACTIONS(1322),\n    [anon_sym_EQ_EQ] = ACTIONS(1320),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1322),\n    [anon_sym_BANG_EQ] = ACTIONS(1320),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1322),\n    [anon_sym_GT_EQ] = ACTIONS(1322),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1322),\n    [anon_sym_instanceof] = ACTIONS(1320),\n    [anon_sym_TILDE] = ACTIONS(1316),\n    [anon_sym_void] = ACTIONS(1318),\n    [anon_sym_delete] = ACTIONS(1318),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1316),\n    [anon_sym_DASH_DASH] = ACTIONS(1316),\n    [anon_sym_DQUOTE] = ACTIONS(1316),\n    [anon_sym_SQUOTE] = ACTIONS(1316),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1316),\n    [sym_number] = ACTIONS(1316),\n    [sym_this] = ACTIONS(1318),\n    [sym_super] = ACTIONS(1318),\n    [sym_true] = ACTIONS(1318),\n    [sym_false] = ACTIONS(1318),\n    [sym_null] = ACTIONS(1318),\n    [sym_undefined] = ACTIONS(1318),\n    [anon_sym_AT] = ACTIONS(1316),\n    [anon_sym_static] = ACTIONS(1318),\n    [anon_sym_declare] = ACTIONS(1318),\n    [anon_sym_public] = ACTIONS(1318),\n    [anon_sym_private] = ACTIONS(1318),\n    [anon_sym_protected] = ACTIONS(1318),\n    [anon_sym_override] = ACTIONS(1318),\n    [anon_sym_readonly] = ACTIONS(1318),\n    [anon_sym_module] = ACTIONS(1318),\n    [anon_sym_any] = ACTIONS(1318),\n    [anon_sym_number] = ACTIONS(1318),\n    [anon_sym_int] = ACTIONS(1318),\n    [anon_sym_float] = ACTIONS(1318),\n    [anon_sym_float2] = ACTIONS(1318),\n    [anon_sym_float3] = ACTIONS(1318),\n    [anon_sym_float4] = ACTIONS(1318),\n    [anon_sym_float3x3] = ACTIONS(1318),\n    [anon_sym_float2x2] = ACTIONS(1318),\n    [anon_sym_float4x4] = ACTIONS(1318),\n    [anon_sym_int2] = ACTIONS(1318),\n    [anon_sym_int3] = ACTIONS(1318),\n    [anon_sym_int4] = ACTIONS(1318),\n    [anon_sym_int3x3] = ACTIONS(1318),\n    [anon_sym_int2x2] = ACTIONS(1318),\n    [anon_sym_int4x4] = ACTIONS(1318),\n    [anon_sym_boolean] = ACTIONS(1318),\n    [anon_sym_string] = ACTIONS(1318),\n    [anon_sym_symbol] = ACTIONS(1318),\n    [anon_sym_workgroup] = ACTIONS(1318),\n    [anon_sym_get] = ACTIONS(1318),\n    [anon_sym_set] = ACTIONS(1318),\n    [anon_sym_satisfies] = ACTIONS(1320),\n    [anon_sym_trait] = ACTIONS(1318),\n    [anon_sym_impl] = ACTIONS(1318),\n    [anon_sym_enum] = ACTIONS(1318),\n    [anon_sym_shader] = ACTIONS(1318),\n    [sym__automatic_semicolon] = ACTIONS(1324),\n    [sym__ternary_qmark] = ACTIONS(1322),\n  },\n  [125] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_pub] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_type] = ACTIONS(1328),\n    [anon_sym_as] = ACTIONS(1328),\n    [anon_sym_namespace] = ACTIONS(1328),\n    [anon_sym_STAR] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_COMMA] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_BANG] = ACTIONS(1328),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1326),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_in] = ACTIONS(1328),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_with] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_SEMI] = ACTIONS(1326),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_LBRACK] = ACTIONS(1326),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1326),\n    [anon_sym_LT] = ACTIONS(1328),\n    [anon_sym_GT] = ACTIONS(1328),\n    [anon_sym_SLASH] = ACTIONS(1328),\n    [anon_sym_DOT] = ACTIONS(1328),\n    [anon_sym_struct] = ACTIONS(1328),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_fn] = ACTIONS(1328),\n    [anon_sym_fn_STAR] = ACTIONS(1326),\n    [anon_sym_QMARK_DOT] = ACTIONS(1326),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_COLON_COLON] = ACTIONS(1326),\n    [anon_sym_AMP_AMP] = ACTIONS(1326),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1326),\n    [anon_sym_GT_GT] = ACTIONS(1328),\n    [anon_sym_GT_GT_GT] = ACTIONS(1326),\n    [anon_sym_LT_LT] = ACTIONS(1326),\n    [anon_sym_AMP] = ACTIONS(1328),\n    [anon_sym_CARET] = ACTIONS(1326),\n    [anon_sym_PIPE] = ACTIONS(1328),\n    [anon_sym_PLUS] = ACTIONS(1328),\n    [anon_sym_DASH] = ACTIONS(1328),\n    [anon_sym_PERCENT] = ACTIONS(1326),\n    [anon_sym_STAR_STAR] = ACTIONS(1326),\n    [anon_sym_LT_EQ] = ACTIONS(1326),\n    [anon_sym_EQ_EQ] = ACTIONS(1328),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1326),\n    [anon_sym_BANG_EQ] = ACTIONS(1328),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1326),\n    [anon_sym_GT_EQ] = ACTIONS(1326),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1326),\n    [anon_sym_instanceof] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1326),\n    [anon_sym_DASH_DASH] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1326),\n    [sym_number] = ACTIONS(1326),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_static] = ACTIONS(1328),\n    [anon_sym_declare] = ACTIONS(1328),\n    [anon_sym_public] = ACTIONS(1328),\n    [anon_sym_private] = ACTIONS(1328),\n    [anon_sym_protected] = ACTIONS(1328),\n    [anon_sym_override] = ACTIONS(1328),\n    [anon_sym_readonly] = ACTIONS(1328),\n    [anon_sym_module] = ACTIONS(1328),\n    [anon_sym_any] = ACTIONS(1328),\n    [anon_sym_number] = ACTIONS(1328),\n    [anon_sym_int] = ACTIONS(1328),\n    [anon_sym_float] = ACTIONS(1328),\n    [anon_sym_float2] = ACTIONS(1328),\n    [anon_sym_float3] = ACTIONS(1328),\n    [anon_sym_float4] = ACTIONS(1328),\n    [anon_sym_float3x3] = ACTIONS(1328),\n    [anon_sym_float2x2] = ACTIONS(1328),\n    [anon_sym_float4x4] = ACTIONS(1328),\n    [anon_sym_int2] = ACTIONS(1328),\n    [anon_sym_int3] = ACTIONS(1328),\n    [anon_sym_int4] = ACTIONS(1328),\n    [anon_sym_int3x3] = ACTIONS(1328),\n    [anon_sym_int2x2] = ACTIONS(1328),\n    [anon_sym_int4x4] = ACTIONS(1328),\n    [anon_sym_boolean] = ACTIONS(1328),\n    [anon_sym_string] = ACTIONS(1328),\n    [anon_sym_symbol] = ACTIONS(1328),\n    [anon_sym_workgroup] = ACTIONS(1328),\n    [anon_sym_get] = ACTIONS(1328),\n    [anon_sym_set] = ACTIONS(1328),\n    [anon_sym_satisfies] = ACTIONS(1328),\n    [anon_sym_trait] = ACTIONS(1328),\n    [anon_sym_impl] = ACTIONS(1328),\n    [anon_sym_enum] = ACTIONS(1328),\n    [anon_sym_shader] = ACTIONS(1328),\n    [sym__automatic_semicolon] = ACTIONS(1326),\n    [sym__ternary_qmark] = ACTIONS(1326),\n  },\n  [126] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_pub] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_type] = ACTIONS(1328),\n    [anon_sym_as] = ACTIONS(1328),\n    [anon_sym_namespace] = ACTIONS(1328),\n    [anon_sym_STAR] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_COMMA] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_BANG] = ACTIONS(1328),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1326),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_in] = ACTIONS(1328),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_with] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_SEMI] = ACTIONS(1326),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_LBRACK] = ACTIONS(1326),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1326),\n    [anon_sym_LT] = ACTIONS(1328),\n    [anon_sym_GT] = ACTIONS(1328),\n    [anon_sym_SLASH] = ACTIONS(1328),\n    [anon_sym_DOT] = ACTIONS(1328),\n    [anon_sym_struct] = ACTIONS(1328),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_fn] = ACTIONS(1328),\n    [anon_sym_fn_STAR] = ACTIONS(1326),\n    [anon_sym_QMARK_DOT] = ACTIONS(1326),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_COLON_COLON] = ACTIONS(1326),\n    [anon_sym_AMP_AMP] = ACTIONS(1326),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1326),\n    [anon_sym_GT_GT] = ACTIONS(1328),\n    [anon_sym_GT_GT_GT] = ACTIONS(1326),\n    [anon_sym_LT_LT] = ACTIONS(1326),\n    [anon_sym_AMP] = ACTIONS(1328),\n    [anon_sym_CARET] = ACTIONS(1326),\n    [anon_sym_PIPE] = ACTIONS(1328),\n    [anon_sym_PLUS] = ACTIONS(1328),\n    [anon_sym_DASH] = ACTIONS(1328),\n    [anon_sym_PERCENT] = ACTIONS(1326),\n    [anon_sym_STAR_STAR] = ACTIONS(1326),\n    [anon_sym_LT_EQ] = ACTIONS(1326),\n    [anon_sym_EQ_EQ] = ACTIONS(1328),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1326),\n    [anon_sym_BANG_EQ] = ACTIONS(1328),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1326),\n    [anon_sym_GT_EQ] = ACTIONS(1326),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1326),\n    [anon_sym_instanceof] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1326),\n    [anon_sym_DASH_DASH] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1326),\n    [sym_number] = ACTIONS(1326),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_static] = ACTIONS(1328),\n    [anon_sym_declare] = ACTIONS(1328),\n    [anon_sym_public] = ACTIONS(1328),\n    [anon_sym_private] = ACTIONS(1328),\n    [anon_sym_protected] = ACTIONS(1328),\n    [anon_sym_override] = ACTIONS(1328),\n    [anon_sym_readonly] = ACTIONS(1328),\n    [anon_sym_module] = ACTIONS(1328),\n    [anon_sym_any] = ACTIONS(1328),\n    [anon_sym_number] = ACTIONS(1328),\n    [anon_sym_int] = ACTIONS(1328),\n    [anon_sym_float] = ACTIONS(1328),\n    [anon_sym_float2] = ACTIONS(1328),\n    [anon_sym_float3] = ACTIONS(1328),\n    [anon_sym_float4] = ACTIONS(1328),\n    [anon_sym_float3x3] = ACTIONS(1328),\n    [anon_sym_float2x2] = ACTIONS(1328),\n    [anon_sym_float4x4] = ACTIONS(1328),\n    [anon_sym_int2] = ACTIONS(1328),\n    [anon_sym_int3] = ACTIONS(1328),\n    [anon_sym_int4] = ACTIONS(1328),\n    [anon_sym_int3x3] = ACTIONS(1328),\n    [anon_sym_int2x2] = ACTIONS(1328),\n    [anon_sym_int4x4] = ACTIONS(1328),\n    [anon_sym_boolean] = ACTIONS(1328),\n    [anon_sym_string] = ACTIONS(1328),\n    [anon_sym_symbol] = ACTIONS(1328),\n    [anon_sym_workgroup] = ACTIONS(1328),\n    [anon_sym_get] = ACTIONS(1328),\n    [anon_sym_set] = ACTIONS(1328),\n    [anon_sym_satisfies] = ACTIONS(1328),\n    [anon_sym_trait] = ACTIONS(1328),\n    [anon_sym_impl] = ACTIONS(1328),\n    [anon_sym_enum] = ACTIONS(1328),\n    [anon_sym_shader] = ACTIONS(1328),\n    [sym__automatic_semicolon] = ACTIONS(1330),\n    [sym__ternary_qmark] = ACTIONS(1326),\n  },\n  [127] = {\n    [ts_builtin_sym_end] = ACTIONS(1332),\n    [sym_identifier] = ACTIONS(1334),\n    [anon_sym_pub] = ACTIONS(1334),\n    [anon_sym_export] = ACTIONS(1334),\n    [anon_sym_type] = ACTIONS(1334),\n    [anon_sym_as] = ACTIONS(1334),\n    [anon_sym_namespace] = ACTIONS(1334),\n    [anon_sym_STAR] = ACTIONS(1334),\n    [anon_sym_LBRACE] = ACTIONS(1332),\n    [anon_sym_COMMA] = ACTIONS(1332),\n    [anon_sym_RBRACE] = ACTIONS(1332),\n    [anon_sym_typeof] = ACTIONS(1334),\n    [anon_sym_import] = ACTIONS(1334),\n    [anon_sym_var] = ACTIONS(1334),\n    [anon_sym_let] = ACTIONS(1334),\n    [anon_sym_const] = ACTIONS(1334),\n    [anon_sym_BANG] = ACTIONS(1334),\n    [anon_sym_else] = ACTIONS(1334),\n    [anon_sym_if] = ACTIONS(1334),\n    [anon_sym_switch] = ACTIONS(1334),\n    [anon_sym_for] = ACTIONS(1334),\n    [anon_sym_LPAREN] = ACTIONS(1332),\n    [anon_sym_await] = ACTIONS(1334),\n    [anon_sym_in] = ACTIONS(1334),\n    [anon_sym_while] = ACTIONS(1334),\n    [anon_sym_do] = ACTIONS(1334),\n    [anon_sym_try] = ACTIONS(1334),\n    [anon_sym_with] = ACTIONS(1334),\n    [anon_sym_break] = ACTIONS(1334),\n    [anon_sym_continue] = ACTIONS(1334),\n    [anon_sym_debugger] = ACTIONS(1334),\n    [anon_sym_return] = ACTIONS(1334),\n    [anon_sym_throw] = ACTIONS(1334),\n    [anon_sym_SEMI] = ACTIONS(1332),\n    [anon_sym_case] = ACTIONS(1334),\n    [anon_sym_default] = ACTIONS(1334),\n    [anon_sym_yield] = ACTIONS(1334),\n    [anon_sym_LBRACK] = ACTIONS(1332),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1332),\n    [anon_sym_LT] = ACTIONS(1334),\n    [anon_sym_GT] = ACTIONS(1334),\n    [anon_sym_SLASH] = ACTIONS(1334),\n    [anon_sym_DOT] = ACTIONS(1334),\n    [anon_sym_struct] = ACTIONS(1334),\n    [anon_sym_async] = ACTIONS(1334),\n    [anon_sym_fn] = ACTIONS(1334),\n    [anon_sym_fn_STAR] = ACTIONS(1332),\n    [anon_sym_QMARK_DOT] = ACTIONS(1332),\n    [anon_sym_new] = ACTIONS(1334),\n    [anon_sym_COLON_COLON] = ACTIONS(1332),\n    [anon_sym_AMP_AMP] = ACTIONS(1332),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1332),\n    [anon_sym_GT_GT] = ACTIONS(1334),\n    [anon_sym_GT_GT_GT] = ACTIONS(1332),\n    [anon_sym_LT_LT] = ACTIONS(1332),\n    [anon_sym_AMP] = ACTIONS(1334),\n    [anon_sym_CARET] = ACTIONS(1332),\n    [anon_sym_PIPE] = ACTIONS(1334),\n    [anon_sym_PLUS] = ACTIONS(1334),\n    [anon_sym_DASH] = ACTIONS(1334),\n    [anon_sym_PERCENT] = ACTIONS(1332),\n    [anon_sym_STAR_STAR] = ACTIONS(1332),\n    [anon_sym_LT_EQ] = ACTIONS(1332),\n    [anon_sym_EQ_EQ] = ACTIONS(1334),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1332),\n    [anon_sym_BANG_EQ] = ACTIONS(1334),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1332),\n    [anon_sym_GT_EQ] = ACTIONS(1332),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1332),\n    [anon_sym_instanceof] = ACTIONS(1334),\n    [anon_sym_TILDE] = ACTIONS(1332),\n    [anon_sym_void] = ACTIONS(1334),\n    [anon_sym_delete] = ACTIONS(1334),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1332),\n    [anon_sym_DASH_DASH] = ACTIONS(1332),\n    [anon_sym_DQUOTE] = ACTIONS(1332),\n    [anon_sym_SQUOTE] = ACTIONS(1332),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1332),\n    [sym_number] = ACTIONS(1332),\n    [sym_this] = ACTIONS(1334),\n    [sym_super] = ACTIONS(1334),\n    [sym_true] = ACTIONS(1334),\n    [sym_false] = ACTIONS(1334),\n    [sym_null] = ACTIONS(1334),\n    [sym_undefined] = ACTIONS(1334),\n    [anon_sym_AT] = ACTIONS(1332),\n    [anon_sym_static] = ACTIONS(1334),\n    [anon_sym_declare] = ACTIONS(1334),\n    [anon_sym_public] = ACTIONS(1334),\n    [anon_sym_private] = ACTIONS(1334),\n    [anon_sym_protected] = ACTIONS(1334),\n    [anon_sym_override] = ACTIONS(1334),\n    [anon_sym_readonly] = ACTIONS(1334),\n    [anon_sym_module] = ACTIONS(1334),\n    [anon_sym_any] = ACTIONS(1334),\n    [anon_sym_number] = ACTIONS(1334),\n    [anon_sym_int] = ACTIONS(1334),\n    [anon_sym_float] = ACTIONS(1334),\n    [anon_sym_float2] = ACTIONS(1334),\n    [anon_sym_float3] = ACTIONS(1334),\n    [anon_sym_float4] = ACTIONS(1334),\n    [anon_sym_float3x3] = ACTIONS(1334),\n    [anon_sym_float2x2] = ACTIONS(1334),\n    [anon_sym_float4x4] = ACTIONS(1334),\n    [anon_sym_int2] = ACTIONS(1334),\n    [anon_sym_int3] = ACTIONS(1334),\n    [anon_sym_int4] = ACTIONS(1334),\n    [anon_sym_int3x3] = ACTIONS(1334),\n    [anon_sym_int2x2] = ACTIONS(1334),\n    [anon_sym_int4x4] = ACTIONS(1334),\n    [anon_sym_boolean] = ACTIONS(1334),\n    [anon_sym_string] = ACTIONS(1334),\n    [anon_sym_symbol] = ACTIONS(1334),\n    [anon_sym_workgroup] = ACTIONS(1334),\n    [anon_sym_get] = ACTIONS(1334),\n    [anon_sym_set] = ACTIONS(1334),\n    [anon_sym_satisfies] = ACTIONS(1334),\n    [anon_sym_trait] = ACTIONS(1334),\n    [anon_sym_impl] = ACTIONS(1334),\n    [anon_sym_enum] = ACTIONS(1334),\n    [anon_sym_shader] = ACTIONS(1334),\n    [sym__automatic_semicolon] = ACTIONS(1332),\n    [sym__ternary_qmark] = ACTIONS(1332),\n  },\n  [128] = {\n    [ts_builtin_sym_end] = ACTIONS(1336),\n    [sym_identifier] = ACTIONS(1338),\n    [anon_sym_pub] = ACTIONS(1338),\n    [anon_sym_export] = ACTIONS(1338),\n    [anon_sym_type] = ACTIONS(1338),\n    [anon_sym_as] = ACTIONS(1338),\n    [anon_sym_namespace] = ACTIONS(1338),\n    [anon_sym_STAR] = ACTIONS(1338),\n    [anon_sym_LBRACE] = ACTIONS(1336),\n    [anon_sym_COMMA] = ACTIONS(1336),\n    [anon_sym_RBRACE] = ACTIONS(1336),\n    [anon_sym_typeof] = ACTIONS(1338),\n    [anon_sym_import] = ACTIONS(1338),\n    [anon_sym_var] = ACTIONS(1338),\n    [anon_sym_let] = ACTIONS(1338),\n    [anon_sym_const] = ACTIONS(1338),\n    [anon_sym_BANG] = ACTIONS(1338),\n    [anon_sym_else] = ACTIONS(1338),\n    [anon_sym_if] = ACTIONS(1338),\n    [anon_sym_switch] = ACTIONS(1338),\n    [anon_sym_for] = ACTIONS(1338),\n    [anon_sym_LPAREN] = ACTIONS(1336),\n    [anon_sym_await] = ACTIONS(1338),\n    [anon_sym_in] = ACTIONS(1338),\n    [anon_sym_while] = ACTIONS(1338),\n    [anon_sym_do] = ACTIONS(1338),\n    [anon_sym_try] = ACTIONS(1338),\n    [anon_sym_with] = ACTIONS(1338),\n    [anon_sym_break] = ACTIONS(1338),\n    [anon_sym_continue] = ACTIONS(1338),\n    [anon_sym_debugger] = ACTIONS(1338),\n    [anon_sym_return] = ACTIONS(1338),\n    [anon_sym_throw] = ACTIONS(1338),\n    [anon_sym_SEMI] = ACTIONS(1336),\n    [anon_sym_case] = ACTIONS(1338),\n    [anon_sym_default] = ACTIONS(1338),\n    [anon_sym_yield] = ACTIONS(1338),\n    [anon_sym_LBRACK] = ACTIONS(1336),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1336),\n    [anon_sym_LT] = ACTIONS(1338),\n    [anon_sym_GT] = ACTIONS(1338),\n    [anon_sym_SLASH] = ACTIONS(1338),\n    [anon_sym_DOT] = ACTIONS(1338),\n    [anon_sym_struct] = ACTIONS(1338),\n    [anon_sym_async] = ACTIONS(1338),\n    [anon_sym_fn] = ACTIONS(1338),\n    [anon_sym_fn_STAR] = ACTIONS(1336),\n    [anon_sym_QMARK_DOT] = ACTIONS(1336),\n    [anon_sym_new] = ACTIONS(1338),\n    [anon_sym_COLON_COLON] = ACTIONS(1336),\n    [anon_sym_AMP_AMP] = ACTIONS(1336),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1336),\n    [anon_sym_GT_GT] = ACTIONS(1338),\n    [anon_sym_GT_GT_GT] = ACTIONS(1336),\n    [anon_sym_LT_LT] = ACTIONS(1336),\n    [anon_sym_AMP] = ACTIONS(1338),\n    [anon_sym_CARET] = ACTIONS(1336),\n    [anon_sym_PIPE] = ACTIONS(1338),\n    [anon_sym_PLUS] = ACTIONS(1338),\n    [anon_sym_DASH] = ACTIONS(1338),\n    [anon_sym_PERCENT] = ACTIONS(1336),\n    [anon_sym_STAR_STAR] = ACTIONS(1336),\n    [anon_sym_LT_EQ] = ACTIONS(1336),\n    [anon_sym_EQ_EQ] = ACTIONS(1338),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1336),\n    [anon_sym_BANG_EQ] = ACTIONS(1338),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1336),\n    [anon_sym_GT_EQ] = ACTIONS(1336),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1336),\n    [anon_sym_instanceof] = ACTIONS(1338),\n    [anon_sym_TILDE] = ACTIONS(1336),\n    [anon_sym_void] = ACTIONS(1338),\n    [anon_sym_delete] = ACTIONS(1338),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1336),\n    [anon_sym_DASH_DASH] = ACTIONS(1336),\n    [anon_sym_DQUOTE] = ACTIONS(1336),\n    [anon_sym_SQUOTE] = ACTIONS(1336),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1336),\n    [sym_number] = ACTIONS(1336),\n    [sym_this] = ACTIONS(1338),\n    [sym_super] = ACTIONS(1338),\n    [sym_true] = ACTIONS(1338),\n    [sym_false] = ACTIONS(1338),\n    [sym_null] = ACTIONS(1338),\n    [sym_undefined] = ACTIONS(1338),\n    [anon_sym_AT] = ACTIONS(1336),\n    [anon_sym_static] = ACTIONS(1338),\n    [anon_sym_declare] = ACTIONS(1338),\n    [anon_sym_public] = ACTIONS(1338),\n    [anon_sym_private] = ACTIONS(1338),\n    [anon_sym_protected] = ACTIONS(1338),\n    [anon_sym_override] = ACTIONS(1338),\n    [anon_sym_readonly] = ACTIONS(1338),\n    [anon_sym_module] = ACTIONS(1338),\n    [anon_sym_any] = ACTIONS(1338),\n    [anon_sym_number] = ACTIONS(1338),\n    [anon_sym_int] = ACTIONS(1338),\n    [anon_sym_float] = ACTIONS(1338),\n    [anon_sym_float2] = ACTIONS(1338),\n    [anon_sym_float3] = ACTIONS(1338),\n    [anon_sym_float4] = ACTIONS(1338),\n    [anon_sym_float3x3] = ACTIONS(1338),\n    [anon_sym_float2x2] = ACTIONS(1338),\n    [anon_sym_float4x4] = ACTIONS(1338),\n    [anon_sym_int2] = ACTIONS(1338),\n    [anon_sym_int3] = ACTIONS(1338),\n    [anon_sym_int4] = ACTIONS(1338),\n    [anon_sym_int3x3] = ACTIONS(1338),\n    [anon_sym_int2x2] = ACTIONS(1338),\n    [anon_sym_int4x4] = ACTIONS(1338),\n    [anon_sym_boolean] = ACTIONS(1338),\n    [anon_sym_string] = ACTIONS(1338),\n    [anon_sym_symbol] = ACTIONS(1338),\n    [anon_sym_workgroup] = ACTIONS(1338),\n    [anon_sym_get] = ACTIONS(1338),\n    [anon_sym_set] = ACTIONS(1338),\n    [anon_sym_satisfies] = ACTIONS(1338),\n    [anon_sym_trait] = ACTIONS(1338),\n    [anon_sym_impl] = ACTIONS(1338),\n    [anon_sym_enum] = ACTIONS(1338),\n    [anon_sym_shader] = ACTIONS(1338),\n    [sym__automatic_semicolon] = ACTIONS(1336),\n    [sym__ternary_qmark] = ACTIONS(1336),\n  },\n  [129] = {\n    [ts_builtin_sym_end] = ACTIONS(1340),\n    [sym_identifier] = ACTIONS(1342),\n    [anon_sym_pub] = ACTIONS(1342),\n    [anon_sym_export] = ACTIONS(1342),\n    [anon_sym_type] = ACTIONS(1342),\n    [anon_sym_as] = ACTIONS(1342),\n    [anon_sym_namespace] = ACTIONS(1342),\n    [anon_sym_STAR] = ACTIONS(1342),\n    [anon_sym_LBRACE] = ACTIONS(1340),\n    [anon_sym_COMMA] = ACTIONS(1340),\n    [anon_sym_RBRACE] = ACTIONS(1340),\n    [anon_sym_typeof] = ACTIONS(1342),\n    [anon_sym_import] = ACTIONS(1342),\n    [anon_sym_var] = ACTIONS(1342),\n    [anon_sym_let] = ACTIONS(1342),\n    [anon_sym_const] = ACTIONS(1342),\n    [anon_sym_BANG] = ACTIONS(1342),\n    [anon_sym_else] = ACTIONS(1342),\n    [anon_sym_if] = ACTIONS(1342),\n    [anon_sym_switch] = ACTIONS(1342),\n    [anon_sym_for] = ACTIONS(1342),\n    [anon_sym_LPAREN] = ACTIONS(1340),\n    [anon_sym_await] = ACTIONS(1342),\n    [anon_sym_in] = ACTIONS(1342),\n    [anon_sym_while] = ACTIONS(1342),\n    [anon_sym_do] = ACTIONS(1342),\n    [anon_sym_try] = ACTIONS(1342),\n    [anon_sym_with] = ACTIONS(1342),\n    [anon_sym_break] = ACTIONS(1342),\n    [anon_sym_continue] = ACTIONS(1342),\n    [anon_sym_debugger] = ACTIONS(1342),\n    [anon_sym_return] = ACTIONS(1342),\n    [anon_sym_throw] = ACTIONS(1342),\n    [anon_sym_SEMI] = ACTIONS(1340),\n    [anon_sym_case] = ACTIONS(1342),\n    [anon_sym_default] = ACTIONS(1342),\n    [anon_sym_yield] = ACTIONS(1342),\n    [anon_sym_LBRACK] = ACTIONS(1340),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1340),\n    [anon_sym_LT] = ACTIONS(1342),\n    [anon_sym_GT] = ACTIONS(1342),\n    [anon_sym_SLASH] = ACTIONS(1342),\n    [anon_sym_DOT] = ACTIONS(1342),\n    [anon_sym_struct] = ACTIONS(1342),\n    [anon_sym_async] = ACTIONS(1342),\n    [anon_sym_fn] = ACTIONS(1342),\n    [anon_sym_fn_STAR] = ACTIONS(1340),\n    [anon_sym_QMARK_DOT] = ACTIONS(1340),\n    [anon_sym_new] = ACTIONS(1342),\n    [anon_sym_COLON_COLON] = ACTIONS(1340),\n    [anon_sym_AMP_AMP] = ACTIONS(1340),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1340),\n    [anon_sym_GT_GT] = ACTIONS(1342),\n    [anon_sym_GT_GT_GT] = ACTIONS(1340),\n    [anon_sym_LT_LT] = ACTIONS(1340),\n    [anon_sym_AMP] = ACTIONS(1342),\n    [anon_sym_CARET] = ACTIONS(1340),\n    [anon_sym_PIPE] = ACTIONS(1342),\n    [anon_sym_PLUS] = ACTIONS(1342),\n    [anon_sym_DASH] = ACTIONS(1342),\n    [anon_sym_PERCENT] = ACTIONS(1340),\n    [anon_sym_STAR_STAR] = ACTIONS(1340),\n    [anon_sym_LT_EQ] = ACTIONS(1340),\n    [anon_sym_EQ_EQ] = ACTIONS(1342),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1340),\n    [anon_sym_BANG_EQ] = ACTIONS(1342),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1340),\n    [anon_sym_GT_EQ] = ACTIONS(1340),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1340),\n    [anon_sym_instanceof] = ACTIONS(1342),\n    [anon_sym_TILDE] = ACTIONS(1340),\n    [anon_sym_void] = ACTIONS(1342),\n    [anon_sym_delete] = ACTIONS(1342),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1340),\n    [anon_sym_DASH_DASH] = ACTIONS(1340),\n    [anon_sym_DQUOTE] = ACTIONS(1340),\n    [anon_sym_SQUOTE] = ACTIONS(1340),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1340),\n    [sym_number] = ACTIONS(1340),\n    [sym_this] = ACTIONS(1342),\n    [sym_super] = ACTIONS(1342),\n    [sym_true] = ACTIONS(1342),\n    [sym_false] = ACTIONS(1342),\n    [sym_null] = ACTIONS(1342),\n    [sym_undefined] = ACTIONS(1342),\n    [anon_sym_AT] = ACTIONS(1340),\n    [anon_sym_static] = ACTIONS(1342),\n    [anon_sym_declare] = ACTIONS(1342),\n    [anon_sym_public] = ACTIONS(1342),\n    [anon_sym_private] = ACTIONS(1342),\n    [anon_sym_protected] = ACTIONS(1342),\n    [anon_sym_override] = ACTIONS(1342),\n    [anon_sym_readonly] = ACTIONS(1342),\n    [anon_sym_module] = ACTIONS(1342),\n    [anon_sym_any] = ACTIONS(1342),\n    [anon_sym_number] = ACTIONS(1342),\n    [anon_sym_int] = ACTIONS(1342),\n    [anon_sym_float] = ACTIONS(1342),\n    [anon_sym_float2] = ACTIONS(1342),\n    [anon_sym_float3] = ACTIONS(1342),\n    [anon_sym_float4] = ACTIONS(1342),\n    [anon_sym_float3x3] = ACTIONS(1342),\n    [anon_sym_float2x2] = ACTIONS(1342),\n    [anon_sym_float4x4] = ACTIONS(1342),\n    [anon_sym_int2] = ACTIONS(1342),\n    [anon_sym_int3] = ACTIONS(1342),\n    [anon_sym_int4] = ACTIONS(1342),\n    [anon_sym_int3x3] = ACTIONS(1342),\n    [anon_sym_int2x2] = ACTIONS(1342),\n    [anon_sym_int4x4] = ACTIONS(1342),\n    [anon_sym_boolean] = ACTIONS(1342),\n    [anon_sym_string] = ACTIONS(1342),\n    [anon_sym_symbol] = ACTIONS(1342),\n    [anon_sym_workgroup] = ACTIONS(1342),\n    [anon_sym_get] = ACTIONS(1342),\n    [anon_sym_set] = ACTIONS(1342),\n    [anon_sym_satisfies] = ACTIONS(1342),\n    [anon_sym_trait] = ACTIONS(1342),\n    [anon_sym_impl] = ACTIONS(1342),\n    [anon_sym_enum] = ACTIONS(1342),\n    [anon_sym_shader] = ACTIONS(1342),\n    [sym__automatic_semicolon] = ACTIONS(1340),\n    [sym__ternary_qmark] = ACTIONS(1340),\n  },\n  [130] = {\n    [ts_builtin_sym_end] = ACTIONS(1302),\n    [sym_identifier] = ACTIONS(1304),\n    [anon_sym_pub] = ACTIONS(1304),\n    [anon_sym_export] = ACTIONS(1304),\n    [anon_sym_type] = ACTIONS(1304),\n    [anon_sym_as] = ACTIONS(1304),\n    [anon_sym_namespace] = ACTIONS(1304),\n    [anon_sym_STAR] = ACTIONS(1304),\n    [anon_sym_LBRACE] = ACTIONS(1302),\n    [anon_sym_COMMA] = ACTIONS(1302),\n    [anon_sym_RBRACE] = ACTIONS(1302),\n    [anon_sym_typeof] = ACTIONS(1304),\n    [anon_sym_import] = ACTIONS(1304),\n    [anon_sym_var] = ACTIONS(1304),\n    [anon_sym_let] = ACTIONS(1304),\n    [anon_sym_const] = ACTIONS(1304),\n    [anon_sym_BANG] = ACTIONS(1304),\n    [anon_sym_else] = ACTIONS(1304),\n    [anon_sym_if] = ACTIONS(1304),\n    [anon_sym_switch] = ACTIONS(1304),\n    [anon_sym_for] = ACTIONS(1304),\n    [anon_sym_LPAREN] = ACTIONS(1302),\n    [anon_sym_await] = ACTIONS(1304),\n    [anon_sym_in] = ACTIONS(1304),\n    [anon_sym_while] = ACTIONS(1304),\n    [anon_sym_do] = ACTIONS(1304),\n    [anon_sym_try] = ACTIONS(1304),\n    [anon_sym_with] = ACTIONS(1304),\n    [anon_sym_break] = ACTIONS(1304),\n    [anon_sym_continue] = ACTIONS(1304),\n    [anon_sym_debugger] = ACTIONS(1304),\n    [anon_sym_return] = ACTIONS(1304),\n    [anon_sym_throw] = ACTIONS(1304),\n    [anon_sym_SEMI] = ACTIONS(1302),\n    [anon_sym_case] = ACTIONS(1304),\n    [anon_sym_default] = ACTIONS(1304),\n    [anon_sym_yield] = ACTIONS(1304),\n    [anon_sym_LBRACK] = ACTIONS(1302),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1302),\n    [anon_sym_LT] = ACTIONS(1304),\n    [anon_sym_GT] = ACTIONS(1304),\n    [anon_sym_SLASH] = ACTIONS(1304),\n    [anon_sym_DOT] = ACTIONS(1304),\n    [anon_sym_struct] = ACTIONS(1304),\n    [anon_sym_async] = ACTIONS(1304),\n    [anon_sym_fn] = ACTIONS(1304),\n    [anon_sym_fn_STAR] = ACTIONS(1302),\n    [anon_sym_QMARK_DOT] = ACTIONS(1302),\n    [anon_sym_new] = ACTIONS(1304),\n    [anon_sym_COLON_COLON] = ACTIONS(1302),\n    [anon_sym_AMP_AMP] = ACTIONS(1302),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1302),\n    [anon_sym_GT_GT] = ACTIONS(1304),\n    [anon_sym_GT_GT_GT] = ACTIONS(1302),\n    [anon_sym_LT_LT] = ACTIONS(1302),\n    [anon_sym_AMP] = ACTIONS(1304),\n    [anon_sym_CARET] = ACTIONS(1302),\n    [anon_sym_PIPE] = ACTIONS(1304),\n    [anon_sym_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH] = ACTIONS(1304),\n    [anon_sym_PERCENT] = ACTIONS(1302),\n    [anon_sym_STAR_STAR] = ACTIONS(1302),\n    [anon_sym_LT_EQ] = ACTIONS(1302),\n    [anon_sym_EQ_EQ] = ACTIONS(1304),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1302),\n    [anon_sym_BANG_EQ] = ACTIONS(1304),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1302),\n    [anon_sym_GT_EQ] = ACTIONS(1302),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1302),\n    [anon_sym_instanceof] = ACTIONS(1304),\n    [anon_sym_TILDE] = ACTIONS(1302),\n    [anon_sym_void] = ACTIONS(1304),\n    [anon_sym_delete] = ACTIONS(1304),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1302),\n    [anon_sym_DASH_DASH] = ACTIONS(1302),\n    [anon_sym_DQUOTE] = ACTIONS(1302),\n    [anon_sym_SQUOTE] = ACTIONS(1302),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1302),\n    [sym_number] = ACTIONS(1302),\n    [sym_this] = ACTIONS(1304),\n    [sym_super] = ACTIONS(1304),\n    [sym_true] = ACTIONS(1304),\n    [sym_false] = ACTIONS(1304),\n    [sym_null] = ACTIONS(1304),\n    [sym_undefined] = ACTIONS(1304),\n    [anon_sym_AT] = ACTIONS(1302),\n    [anon_sym_static] = ACTIONS(1304),\n    [anon_sym_declare] = ACTIONS(1304),\n    [anon_sym_public] = ACTIONS(1304),\n    [anon_sym_private] = ACTIONS(1304),\n    [anon_sym_protected] = ACTIONS(1304),\n    [anon_sym_override] = ACTIONS(1304),\n    [anon_sym_readonly] = ACTIONS(1304),\n    [anon_sym_module] = ACTIONS(1304),\n    [anon_sym_any] = ACTIONS(1304),\n    [anon_sym_number] = ACTIONS(1304),\n    [anon_sym_int] = ACTIONS(1304),\n    [anon_sym_float] = ACTIONS(1304),\n    [anon_sym_float2] = ACTIONS(1304),\n    [anon_sym_float3] = ACTIONS(1304),\n    [anon_sym_float4] = ACTIONS(1304),\n    [anon_sym_float3x3] = ACTIONS(1304),\n    [anon_sym_float2x2] = ACTIONS(1304),\n    [anon_sym_float4x4] = ACTIONS(1304),\n    [anon_sym_int2] = ACTIONS(1304),\n    [anon_sym_int3] = ACTIONS(1304),\n    [anon_sym_int4] = ACTIONS(1304),\n    [anon_sym_int3x3] = ACTIONS(1304),\n    [anon_sym_int2x2] = ACTIONS(1304),\n    [anon_sym_int4x4] = ACTIONS(1304),\n    [anon_sym_boolean] = ACTIONS(1304),\n    [anon_sym_string] = ACTIONS(1304),\n    [anon_sym_symbol] = ACTIONS(1304),\n    [anon_sym_workgroup] = ACTIONS(1304),\n    [anon_sym_get] = ACTIONS(1304),\n    [anon_sym_set] = ACTIONS(1304),\n    [anon_sym_satisfies] = ACTIONS(1304),\n    [anon_sym_trait] = ACTIONS(1304),\n    [anon_sym_impl] = ACTIONS(1304),\n    [anon_sym_enum] = ACTIONS(1304),\n    [anon_sym_shader] = ACTIONS(1304),\n    [sym__automatic_semicolon] = ACTIONS(1344),\n    [sym__ternary_qmark] = ACTIONS(1302),\n  },\n  [131] = {\n    [ts_builtin_sym_end] = ACTIONS(1346),\n    [sym_identifier] = ACTIONS(1348),\n    [anon_sym_pub] = ACTIONS(1348),\n    [anon_sym_export] = ACTIONS(1348),\n    [anon_sym_type] = ACTIONS(1348),\n    [anon_sym_as] = ACTIONS(1350),\n    [anon_sym_namespace] = ACTIONS(1348),\n    [anon_sym_STAR] = ACTIONS(1350),\n    [anon_sym_LBRACE] = ACTIONS(1346),\n    [anon_sym_COMMA] = ACTIONS(1352),\n    [anon_sym_RBRACE] = ACTIONS(1346),\n    [anon_sym_typeof] = ACTIONS(1348),\n    [anon_sym_import] = ACTIONS(1348),\n    [anon_sym_var] = ACTIONS(1348),\n    [anon_sym_let] = ACTIONS(1348),\n    [anon_sym_const] = ACTIONS(1348),\n    [anon_sym_BANG] = ACTIONS(1348),\n    [anon_sym_else] = ACTIONS(1348),\n    [anon_sym_if] = ACTIONS(1348),\n    [anon_sym_switch] = ACTIONS(1348),\n    [anon_sym_for] = ACTIONS(1348),\n    [anon_sym_LPAREN] = ACTIONS(1346),\n    [anon_sym_await] = ACTIONS(1348),\n    [anon_sym_in] = ACTIONS(1350),\n    [anon_sym_while] = ACTIONS(1348),\n    [anon_sym_do] = ACTIONS(1348),\n    [anon_sym_try] = ACTIONS(1348),\n    [anon_sym_with] = ACTIONS(1348),\n    [anon_sym_break] = ACTIONS(1348),\n    [anon_sym_continue] = ACTIONS(1348),\n    [anon_sym_debugger] = ACTIONS(1348),\n    [anon_sym_return] = ACTIONS(1348),\n    [anon_sym_throw] = ACTIONS(1348),\n    [anon_sym_SEMI] = ACTIONS(1346),\n    [anon_sym_case] = ACTIONS(1348),\n    [anon_sym_default] = ACTIONS(1348),\n    [anon_sym_yield] = ACTIONS(1348),\n    [anon_sym_LBRACK] = ACTIONS(1346),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1346),\n    [anon_sym_LT] = ACTIONS(1348),\n    [anon_sym_GT] = ACTIONS(1350),\n    [anon_sym_SLASH] = ACTIONS(1348),\n    [anon_sym_DOT] = ACTIONS(1350),\n    [anon_sym_struct] = ACTIONS(1348),\n    [anon_sym_async] = ACTIONS(1348),\n    [anon_sym_fn] = ACTIONS(1348),\n    [anon_sym_fn_STAR] = ACTIONS(1346),\n    [anon_sym_QMARK_DOT] = ACTIONS(1352),\n    [anon_sym_new] = ACTIONS(1348),\n    [anon_sym_COLON_COLON] = ACTIONS(1352),\n    [anon_sym_AMP_AMP] = ACTIONS(1352),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1352),\n    [anon_sym_GT_GT] = ACTIONS(1350),\n    [anon_sym_GT_GT_GT] = ACTIONS(1352),\n    [anon_sym_LT_LT] = ACTIONS(1352),\n    [anon_sym_AMP] = ACTIONS(1350),\n    [anon_sym_CARET] = ACTIONS(1352),\n    [anon_sym_PIPE] = ACTIONS(1350),\n    [anon_sym_PLUS] = ACTIONS(1348),\n    [anon_sym_DASH] = ACTIONS(1348),\n    [anon_sym_PERCENT] = ACTIONS(1352),\n    [anon_sym_STAR_STAR] = ACTIONS(1352),\n    [anon_sym_LT_EQ] = ACTIONS(1352),\n    [anon_sym_EQ_EQ] = ACTIONS(1350),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1352),\n    [anon_sym_BANG_EQ] = ACTIONS(1350),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1352),\n    [anon_sym_GT_EQ] = ACTIONS(1352),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1352),\n    [anon_sym_instanceof] = ACTIONS(1350),\n    [anon_sym_TILDE] = ACTIONS(1346),\n    [anon_sym_void] = ACTIONS(1348),\n    [anon_sym_delete] = ACTIONS(1348),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1346),\n    [anon_sym_DASH_DASH] = ACTIONS(1346),\n    [anon_sym_DQUOTE] = ACTIONS(1346),\n    [anon_sym_SQUOTE] = ACTIONS(1346),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1346),\n    [sym_number] = ACTIONS(1346),\n    [sym_this] = ACTIONS(1348),\n    [sym_super] = ACTIONS(1348),\n    [sym_true] = ACTIONS(1348),\n    [sym_false] = ACTIONS(1348),\n    [sym_null] = ACTIONS(1348),\n    [sym_undefined] = ACTIONS(1348),\n    [anon_sym_AT] = ACTIONS(1346),\n    [anon_sym_static] = ACTIONS(1348),\n    [anon_sym_declare] = ACTIONS(1348),\n    [anon_sym_public] = ACTIONS(1348),\n    [anon_sym_private] = ACTIONS(1348),\n    [anon_sym_protected] = ACTIONS(1348),\n    [anon_sym_override] = ACTIONS(1348),\n    [anon_sym_readonly] = ACTIONS(1348),\n    [anon_sym_module] = ACTIONS(1348),\n    [anon_sym_any] = ACTIONS(1348),\n    [anon_sym_number] = ACTIONS(1348),\n    [anon_sym_int] = ACTIONS(1348),\n    [anon_sym_float] = ACTIONS(1348),\n    [anon_sym_float2] = ACTIONS(1348),\n    [anon_sym_float3] = ACTIONS(1348),\n    [anon_sym_float4] = ACTIONS(1348),\n    [anon_sym_float3x3] = ACTIONS(1348),\n    [anon_sym_float2x2] = ACTIONS(1348),\n    [anon_sym_float4x4] = ACTIONS(1348),\n    [anon_sym_int2] = ACTIONS(1348),\n    [anon_sym_int3] = ACTIONS(1348),\n    [anon_sym_int4] = ACTIONS(1348),\n    [anon_sym_int3x3] = ACTIONS(1348),\n    [anon_sym_int2x2] = ACTIONS(1348),\n    [anon_sym_int4x4] = ACTIONS(1348),\n    [anon_sym_boolean] = ACTIONS(1348),\n    [anon_sym_string] = ACTIONS(1348),\n    [anon_sym_symbol] = ACTIONS(1348),\n    [anon_sym_workgroup] = ACTIONS(1348),\n    [anon_sym_get] = ACTIONS(1348),\n    [anon_sym_set] = ACTIONS(1348),\n    [anon_sym_satisfies] = ACTIONS(1350),\n    [anon_sym_trait] = ACTIONS(1348),\n    [anon_sym_impl] = ACTIONS(1348),\n    [anon_sym_enum] = ACTIONS(1348),\n    [anon_sym_shader] = ACTIONS(1348),\n    [sym__automatic_semicolon] = ACTIONS(1352),\n    [sym__ternary_qmark] = ACTIONS(1352),\n  },\n  [132] = {\n    [ts_builtin_sym_end] = ACTIONS(1354),\n    [sym_identifier] = ACTIONS(1356),\n    [anon_sym_pub] = ACTIONS(1356),\n    [anon_sym_export] = ACTIONS(1356),\n    [anon_sym_type] = ACTIONS(1356),\n    [anon_sym_as] = ACTIONS(1356),\n    [anon_sym_namespace] = ACTIONS(1356),\n    [anon_sym_STAR] = ACTIONS(1356),\n    [anon_sym_LBRACE] = ACTIONS(1354),\n    [anon_sym_COMMA] = ACTIONS(1354),\n    [anon_sym_RBRACE] = ACTIONS(1354),\n    [anon_sym_typeof] = ACTIONS(1356),\n    [anon_sym_import] = ACTIONS(1356),\n    [anon_sym_var] = ACTIONS(1356),\n    [anon_sym_let] = ACTIONS(1356),\n    [anon_sym_const] = ACTIONS(1356),\n    [anon_sym_BANG] = ACTIONS(1356),\n    [anon_sym_else] = ACTIONS(1356),\n    [anon_sym_if] = ACTIONS(1356),\n    [anon_sym_switch] = ACTIONS(1356),\n    [anon_sym_for] = ACTIONS(1356),\n    [anon_sym_LPAREN] = ACTIONS(1354),\n    [anon_sym_await] = ACTIONS(1356),\n    [anon_sym_in] = ACTIONS(1356),\n    [anon_sym_while] = ACTIONS(1356),\n    [anon_sym_do] = ACTIONS(1356),\n    [anon_sym_try] = ACTIONS(1356),\n    [anon_sym_with] = ACTIONS(1356),\n    [anon_sym_break] = ACTIONS(1356),\n    [anon_sym_continue] = ACTIONS(1356),\n    [anon_sym_debugger] = ACTIONS(1356),\n    [anon_sym_return] = ACTIONS(1356),\n    [anon_sym_throw] = ACTIONS(1356),\n    [anon_sym_SEMI] = ACTIONS(1354),\n    [anon_sym_case] = ACTIONS(1356),\n    [anon_sym_default] = ACTIONS(1356),\n    [anon_sym_yield] = ACTIONS(1356),\n    [anon_sym_LBRACK] = ACTIONS(1354),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1354),\n    [anon_sym_LT] = ACTIONS(1356),\n    [anon_sym_GT] = ACTIONS(1356),\n    [anon_sym_SLASH] = ACTIONS(1356),\n    [anon_sym_DOT] = ACTIONS(1356),\n    [anon_sym_struct] = ACTIONS(1356),\n    [anon_sym_async] = ACTIONS(1356),\n    [anon_sym_fn] = ACTIONS(1356),\n    [anon_sym_fn_STAR] = ACTIONS(1354),\n    [anon_sym_QMARK_DOT] = ACTIONS(1354),\n    [anon_sym_new] = ACTIONS(1356),\n    [anon_sym_COLON_COLON] = ACTIONS(1354),\n    [anon_sym_AMP_AMP] = ACTIONS(1354),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1354),\n    [anon_sym_GT_GT] = ACTIONS(1356),\n    [anon_sym_GT_GT_GT] = ACTIONS(1354),\n    [anon_sym_LT_LT] = ACTIONS(1354),\n    [anon_sym_AMP] = ACTIONS(1356),\n    [anon_sym_CARET] = ACTIONS(1354),\n    [anon_sym_PIPE] = ACTIONS(1356),\n    [anon_sym_PLUS] = ACTIONS(1356),\n    [anon_sym_DASH] = ACTIONS(1356),\n    [anon_sym_PERCENT] = ACTIONS(1354),\n    [anon_sym_STAR_STAR] = ACTIONS(1354),\n    [anon_sym_LT_EQ] = ACTIONS(1354),\n    [anon_sym_EQ_EQ] = ACTIONS(1356),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1354),\n    [anon_sym_BANG_EQ] = ACTIONS(1356),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1354),\n    [anon_sym_GT_EQ] = ACTIONS(1354),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1354),\n    [anon_sym_instanceof] = ACTIONS(1356),\n    [anon_sym_TILDE] = ACTIONS(1354),\n    [anon_sym_void] = ACTIONS(1356),\n    [anon_sym_delete] = ACTIONS(1356),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1354),\n    [anon_sym_DASH_DASH] = ACTIONS(1354),\n    [anon_sym_DQUOTE] = ACTIONS(1354),\n    [anon_sym_SQUOTE] = ACTIONS(1354),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1354),\n    [sym_number] = ACTIONS(1354),\n    [sym_this] = ACTIONS(1356),\n    [sym_super] = ACTIONS(1356),\n    [sym_true] = ACTIONS(1356),\n    [sym_false] = ACTIONS(1356),\n    [sym_null] = ACTIONS(1356),\n    [sym_undefined] = ACTIONS(1356),\n    [anon_sym_AT] = ACTIONS(1354),\n    [anon_sym_static] = ACTIONS(1356),\n    [anon_sym_declare] = ACTIONS(1356),\n    [anon_sym_public] = ACTIONS(1356),\n    [anon_sym_private] = ACTIONS(1356),\n    [anon_sym_protected] = ACTIONS(1356),\n    [anon_sym_override] = ACTIONS(1356),\n    [anon_sym_readonly] = ACTIONS(1356),\n    [anon_sym_module] = ACTIONS(1356),\n    [anon_sym_any] = ACTIONS(1356),\n    [anon_sym_number] = ACTIONS(1356),\n    [anon_sym_int] = ACTIONS(1356),\n    [anon_sym_float] = ACTIONS(1356),\n    [anon_sym_float2] = ACTIONS(1356),\n    [anon_sym_float3] = ACTIONS(1356),\n    [anon_sym_float4] = ACTIONS(1356),\n    [anon_sym_float3x3] = ACTIONS(1356),\n    [anon_sym_float2x2] = ACTIONS(1356),\n    [anon_sym_float4x4] = ACTIONS(1356),\n    [anon_sym_int2] = ACTIONS(1356),\n    [anon_sym_int3] = ACTIONS(1356),\n    [anon_sym_int4] = ACTIONS(1356),\n    [anon_sym_int3x3] = ACTIONS(1356),\n    [anon_sym_int2x2] = ACTIONS(1356),\n    [anon_sym_int4x4] = ACTIONS(1356),\n    [anon_sym_boolean] = ACTIONS(1356),\n    [anon_sym_string] = ACTIONS(1356),\n    [anon_sym_symbol] = ACTIONS(1356),\n    [anon_sym_workgroup] = ACTIONS(1356),\n    [anon_sym_get] = ACTIONS(1356),\n    [anon_sym_set] = ACTIONS(1356),\n    [anon_sym_satisfies] = ACTIONS(1356),\n    [anon_sym_trait] = ACTIONS(1356),\n    [anon_sym_impl] = ACTIONS(1356),\n    [anon_sym_enum] = ACTIONS(1356),\n    [anon_sym_shader] = ACTIONS(1356),\n    [sym__automatic_semicolon] = ACTIONS(1354),\n    [sym__ternary_qmark] = ACTIONS(1354),\n  },\n  [133] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(126),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(1183),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(168),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(170),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(199),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [134] = {\n    [ts_builtin_sym_end] = ACTIONS(1358),\n    [sym_identifier] = ACTIONS(1360),\n    [anon_sym_pub] = ACTIONS(1360),\n    [anon_sym_export] = ACTIONS(1360),\n    [anon_sym_type] = ACTIONS(1360),\n    [anon_sym_as] = ACTIONS(1360),\n    [anon_sym_namespace] = ACTIONS(1360),\n    [anon_sym_STAR] = ACTIONS(1360),\n    [anon_sym_LBRACE] = ACTIONS(1358),\n    [anon_sym_COMMA] = ACTIONS(1358),\n    [anon_sym_RBRACE] = ACTIONS(1358),\n    [anon_sym_typeof] = ACTIONS(1360),\n    [anon_sym_import] = ACTIONS(1360),\n    [anon_sym_var] = ACTIONS(1360),\n    [anon_sym_let] = ACTIONS(1360),\n    [anon_sym_const] = ACTIONS(1360),\n    [anon_sym_BANG] = ACTIONS(1360),\n    [anon_sym_else] = ACTIONS(1360),\n    [anon_sym_if] = ACTIONS(1360),\n    [anon_sym_switch] = ACTIONS(1360),\n    [anon_sym_for] = ACTIONS(1360),\n    [anon_sym_LPAREN] = ACTIONS(1358),\n    [anon_sym_await] = ACTIONS(1360),\n    [anon_sym_in] = ACTIONS(1360),\n    [anon_sym_while] = ACTIONS(1360),\n    [anon_sym_do] = ACTIONS(1360),\n    [anon_sym_try] = ACTIONS(1360),\n    [anon_sym_with] = ACTIONS(1360),\n    [anon_sym_break] = ACTIONS(1360),\n    [anon_sym_continue] = ACTIONS(1360),\n    [anon_sym_debugger] = ACTIONS(1360),\n    [anon_sym_return] = ACTIONS(1360),\n    [anon_sym_throw] = ACTIONS(1360),\n    [anon_sym_SEMI] = ACTIONS(1358),\n    [anon_sym_case] = ACTIONS(1360),\n    [anon_sym_default] = ACTIONS(1360),\n    [anon_sym_yield] = ACTIONS(1360),\n    [anon_sym_LBRACK] = ACTIONS(1358),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1358),\n    [anon_sym_LT] = ACTIONS(1360),\n    [anon_sym_GT] = ACTIONS(1360),\n    [anon_sym_SLASH] = ACTIONS(1360),\n    [anon_sym_DOT] = ACTIONS(1360),\n    [anon_sym_struct] = ACTIONS(1360),\n    [anon_sym_async] = ACTIONS(1360),\n    [anon_sym_fn] = ACTIONS(1360),\n    [anon_sym_fn_STAR] = ACTIONS(1358),\n    [anon_sym_QMARK_DOT] = ACTIONS(1358),\n    [anon_sym_new] = ACTIONS(1360),\n    [anon_sym_COLON_COLON] = ACTIONS(1358),\n    [anon_sym_AMP_AMP] = ACTIONS(1358),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1358),\n    [anon_sym_GT_GT] = ACTIONS(1360),\n    [anon_sym_GT_GT_GT] = ACTIONS(1358),\n    [anon_sym_LT_LT] = ACTIONS(1358),\n    [anon_sym_AMP] = ACTIONS(1360),\n    [anon_sym_CARET] = ACTIONS(1358),\n    [anon_sym_PIPE] = ACTIONS(1360),\n    [anon_sym_PLUS] = ACTIONS(1360),\n    [anon_sym_DASH] = ACTIONS(1360),\n    [anon_sym_PERCENT] = ACTIONS(1358),\n    [anon_sym_STAR_STAR] = ACTIONS(1358),\n    [anon_sym_LT_EQ] = ACTIONS(1358),\n    [anon_sym_EQ_EQ] = ACTIONS(1360),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1358),\n    [anon_sym_BANG_EQ] = ACTIONS(1360),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1358),\n    [anon_sym_GT_EQ] = ACTIONS(1358),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1358),\n    [anon_sym_instanceof] = ACTIONS(1360),\n    [anon_sym_TILDE] = ACTIONS(1358),\n    [anon_sym_void] = ACTIONS(1360),\n    [anon_sym_delete] = ACTIONS(1360),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1358),\n    [anon_sym_DASH_DASH] = ACTIONS(1358),\n    [anon_sym_DQUOTE] = ACTIONS(1358),\n    [anon_sym_SQUOTE] = ACTIONS(1358),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1358),\n    [sym_number] = ACTIONS(1358),\n    [sym_this] = ACTIONS(1360),\n    [sym_super] = ACTIONS(1360),\n    [sym_true] = ACTIONS(1360),\n    [sym_false] = ACTIONS(1360),\n    [sym_null] = ACTIONS(1360),\n    [sym_undefined] = ACTIONS(1360),\n    [anon_sym_AT] = ACTIONS(1358),\n    [anon_sym_static] = ACTIONS(1360),\n    [anon_sym_declare] = ACTIONS(1360),\n    [anon_sym_public] = ACTIONS(1360),\n    [anon_sym_private] = ACTIONS(1360),\n    [anon_sym_protected] = ACTIONS(1360),\n    [anon_sym_override] = ACTIONS(1360),\n    [anon_sym_readonly] = ACTIONS(1360),\n    [anon_sym_module] = ACTIONS(1360),\n    [anon_sym_any] = ACTIONS(1360),\n    [anon_sym_number] = ACTIONS(1360),\n    [anon_sym_int] = ACTIONS(1360),\n    [anon_sym_float] = ACTIONS(1360),\n    [anon_sym_float2] = ACTIONS(1360),\n    [anon_sym_float3] = ACTIONS(1360),\n    [anon_sym_float4] = ACTIONS(1360),\n    [anon_sym_float3x3] = ACTIONS(1360),\n    [anon_sym_float2x2] = ACTIONS(1360),\n    [anon_sym_float4x4] = ACTIONS(1360),\n    [anon_sym_int2] = ACTIONS(1360),\n    [anon_sym_int3] = ACTIONS(1360),\n    [anon_sym_int4] = ACTIONS(1360),\n    [anon_sym_int3x3] = ACTIONS(1360),\n    [anon_sym_int2x2] = ACTIONS(1360),\n    [anon_sym_int4x4] = ACTIONS(1360),\n    [anon_sym_boolean] = ACTIONS(1360),\n    [anon_sym_string] = ACTIONS(1360),\n    [anon_sym_symbol] = ACTIONS(1360),\n    [anon_sym_workgroup] = ACTIONS(1360),\n    [anon_sym_get] = ACTIONS(1360),\n    [anon_sym_set] = ACTIONS(1360),\n    [anon_sym_satisfies] = ACTIONS(1360),\n    [anon_sym_trait] = ACTIONS(1360),\n    [anon_sym_impl] = ACTIONS(1360),\n    [anon_sym_enum] = ACTIONS(1360),\n    [anon_sym_shader] = ACTIONS(1360),\n    [sym__automatic_semicolon] = ACTIONS(1358),\n    [sym__ternary_qmark] = ACTIONS(1358),\n  },\n  [135] = {\n    [ts_builtin_sym_end] = ACTIONS(1362),\n    [sym_identifier] = ACTIONS(1364),\n    [anon_sym_pub] = ACTIONS(1364),\n    [anon_sym_export] = ACTIONS(1364),\n    [anon_sym_type] = ACTIONS(1364),\n    [anon_sym_as] = ACTIONS(1366),\n    [anon_sym_namespace] = ACTIONS(1364),\n    [anon_sym_STAR] = ACTIONS(1366),\n    [anon_sym_LBRACE] = ACTIONS(1362),\n    [anon_sym_COMMA] = ACTIONS(1368),\n    [anon_sym_RBRACE] = ACTIONS(1362),\n    [anon_sym_typeof] = ACTIONS(1364),\n    [anon_sym_import] = ACTIONS(1364),\n    [anon_sym_var] = ACTIONS(1364),\n    [anon_sym_let] = ACTIONS(1364),\n    [anon_sym_const] = ACTIONS(1364),\n    [anon_sym_BANG] = ACTIONS(1364),\n    [anon_sym_else] = ACTIONS(1364),\n    [anon_sym_if] = ACTIONS(1364),\n    [anon_sym_switch] = ACTIONS(1364),\n    [anon_sym_for] = ACTIONS(1364),\n    [anon_sym_LPAREN] = ACTIONS(1362),\n    [anon_sym_await] = ACTIONS(1364),\n    [anon_sym_in] = ACTIONS(1366),\n    [anon_sym_while] = ACTIONS(1364),\n    [anon_sym_do] = ACTIONS(1364),\n    [anon_sym_try] = ACTIONS(1364),\n    [anon_sym_with] = ACTIONS(1364),\n    [anon_sym_break] = ACTIONS(1364),\n    [anon_sym_continue] = ACTIONS(1364),\n    [anon_sym_debugger] = ACTIONS(1364),\n    [anon_sym_return] = ACTIONS(1364),\n    [anon_sym_throw] = ACTIONS(1364),\n    [anon_sym_SEMI] = ACTIONS(1362),\n    [anon_sym_case] = ACTIONS(1364),\n    [anon_sym_default] = ACTIONS(1364),\n    [anon_sym_yield] = ACTIONS(1364),\n    [anon_sym_LBRACK] = ACTIONS(1362),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1362),\n    [anon_sym_LT] = ACTIONS(1364),\n    [anon_sym_GT] = ACTIONS(1366),\n    [anon_sym_SLASH] = ACTIONS(1364),\n    [anon_sym_DOT] = ACTIONS(1366),\n    [anon_sym_struct] = ACTIONS(1364),\n    [anon_sym_async] = ACTIONS(1364),\n    [anon_sym_fn] = ACTIONS(1364),\n    [anon_sym_fn_STAR] = ACTIONS(1362),\n    [anon_sym_QMARK_DOT] = ACTIONS(1368),\n    [anon_sym_new] = ACTIONS(1364),\n    [anon_sym_COLON_COLON] = ACTIONS(1368),\n    [anon_sym_AMP_AMP] = ACTIONS(1368),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1368),\n    [anon_sym_GT_GT] = ACTIONS(1366),\n    [anon_sym_GT_GT_GT] = ACTIONS(1368),\n    [anon_sym_LT_LT] = ACTIONS(1368),\n    [anon_sym_AMP] = ACTIONS(1366),\n    [anon_sym_CARET] = ACTIONS(1368),\n    [anon_sym_PIPE] = ACTIONS(1366),\n    [anon_sym_PLUS] = ACTIONS(1364),\n    [anon_sym_DASH] = ACTIONS(1364),\n    [anon_sym_PERCENT] = ACTIONS(1368),\n    [anon_sym_STAR_STAR] = ACTIONS(1368),\n    [anon_sym_LT_EQ] = ACTIONS(1368),\n    [anon_sym_EQ_EQ] = ACTIONS(1366),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1368),\n    [anon_sym_BANG_EQ] = ACTIONS(1366),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1368),\n    [anon_sym_GT_EQ] = ACTIONS(1368),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1368),\n    [anon_sym_instanceof] = ACTIONS(1366),\n    [anon_sym_TILDE] = ACTIONS(1362),\n    [anon_sym_void] = ACTIONS(1364),\n    [anon_sym_delete] = ACTIONS(1364),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1362),\n    [anon_sym_DASH_DASH] = ACTIONS(1362),\n    [anon_sym_DQUOTE] = ACTIONS(1362),\n    [anon_sym_SQUOTE] = ACTIONS(1362),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1362),\n    [sym_number] = ACTIONS(1362),\n    [sym_this] = ACTIONS(1364),\n    [sym_super] = ACTIONS(1364),\n    [sym_true] = ACTIONS(1364),\n    [sym_false] = ACTIONS(1364),\n    [sym_null] = ACTIONS(1364),\n    [sym_undefined] = ACTIONS(1364),\n    [anon_sym_AT] = ACTIONS(1362),\n    [anon_sym_static] = ACTIONS(1364),\n    [anon_sym_declare] = ACTIONS(1364),\n    [anon_sym_public] = ACTIONS(1364),\n    [anon_sym_private] = ACTIONS(1364),\n    [anon_sym_protected] = ACTIONS(1364),\n    [anon_sym_override] = ACTIONS(1364),\n    [anon_sym_readonly] = ACTIONS(1364),\n    [anon_sym_module] = ACTIONS(1364),\n    [anon_sym_any] = ACTIONS(1364),\n    [anon_sym_number] = ACTIONS(1364),\n    [anon_sym_int] = ACTIONS(1364),\n    [anon_sym_float] = ACTIONS(1364),\n    [anon_sym_float2] = ACTIONS(1364),\n    [anon_sym_float3] = ACTIONS(1364),\n    [anon_sym_float4] = ACTIONS(1364),\n    [anon_sym_float3x3] = ACTIONS(1364),\n    [anon_sym_float2x2] = ACTIONS(1364),\n    [anon_sym_float4x4] = ACTIONS(1364),\n    [anon_sym_int2] = ACTIONS(1364),\n    [anon_sym_int3] = ACTIONS(1364),\n    [anon_sym_int4] = ACTIONS(1364),\n    [anon_sym_int3x3] = ACTIONS(1364),\n    [anon_sym_int2x2] = ACTIONS(1364),\n    [anon_sym_int4x4] = ACTIONS(1364),\n    [anon_sym_boolean] = ACTIONS(1364),\n    [anon_sym_string] = ACTIONS(1364),\n    [anon_sym_symbol] = ACTIONS(1364),\n    [anon_sym_workgroup] = ACTIONS(1364),\n    [anon_sym_get] = ACTIONS(1364),\n    [anon_sym_set] = ACTIONS(1364),\n    [anon_sym_satisfies] = ACTIONS(1366),\n    [anon_sym_trait] = ACTIONS(1364),\n    [anon_sym_impl] = ACTIONS(1364),\n    [anon_sym_enum] = ACTIONS(1364),\n    [anon_sym_shader] = ACTIONS(1364),\n    [sym__automatic_semicolon] = ACTIONS(1370),\n    [sym__ternary_qmark] = ACTIONS(1368),\n  },\n  [136] = {\n    [ts_builtin_sym_end] = ACTIONS(1372),\n    [sym_identifier] = ACTIONS(1374),\n    [anon_sym_pub] = ACTIONS(1374),\n    [anon_sym_export] = ACTIONS(1374),\n    [anon_sym_type] = ACTIONS(1374),\n    [anon_sym_as] = ACTIONS(1374),\n    [anon_sym_namespace] = ACTIONS(1374),\n    [anon_sym_STAR] = ACTIONS(1374),\n    [anon_sym_LBRACE] = ACTIONS(1372),\n    [anon_sym_COMMA] = ACTIONS(1372),\n    [anon_sym_RBRACE] = ACTIONS(1372),\n    [anon_sym_typeof] = ACTIONS(1374),\n    [anon_sym_import] = ACTIONS(1374),\n    [anon_sym_var] = ACTIONS(1374),\n    [anon_sym_let] = ACTIONS(1374),\n    [anon_sym_const] = ACTIONS(1374),\n    [anon_sym_BANG] = ACTIONS(1374),\n    [anon_sym_else] = ACTIONS(1374),\n    [anon_sym_if] = ACTIONS(1374),\n    [anon_sym_switch] = ACTIONS(1374),\n    [anon_sym_for] = ACTIONS(1374),\n    [anon_sym_LPAREN] = ACTIONS(1372),\n    [anon_sym_await] = ACTIONS(1374),\n    [anon_sym_in] = ACTIONS(1374),\n    [anon_sym_while] = ACTIONS(1374),\n    [anon_sym_do] = ACTIONS(1374),\n    [anon_sym_try] = ACTIONS(1374),\n    [anon_sym_with] = ACTIONS(1374),\n    [anon_sym_break] = ACTIONS(1374),\n    [anon_sym_continue] = ACTIONS(1374),\n    [anon_sym_debugger] = ACTIONS(1374),\n    [anon_sym_return] = ACTIONS(1374),\n    [anon_sym_throw] = ACTIONS(1374),\n    [anon_sym_SEMI] = ACTIONS(1372),\n    [anon_sym_case] = ACTIONS(1374),\n    [anon_sym_default] = ACTIONS(1374),\n    [anon_sym_yield] = ACTIONS(1374),\n    [anon_sym_LBRACK] = ACTIONS(1372),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1372),\n    [anon_sym_LT] = ACTIONS(1374),\n    [anon_sym_GT] = ACTIONS(1374),\n    [anon_sym_SLASH] = ACTIONS(1374),\n    [anon_sym_DOT] = ACTIONS(1374),\n    [anon_sym_struct] = ACTIONS(1374),\n    [anon_sym_async] = ACTIONS(1374),\n    [anon_sym_fn] = ACTIONS(1374),\n    [anon_sym_fn_STAR] = ACTIONS(1372),\n    [anon_sym_QMARK_DOT] = ACTIONS(1372),\n    [anon_sym_new] = ACTIONS(1374),\n    [anon_sym_COLON_COLON] = ACTIONS(1372),\n    [anon_sym_AMP_AMP] = ACTIONS(1372),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1372),\n    [anon_sym_GT_GT] = ACTIONS(1374),\n    [anon_sym_GT_GT_GT] = ACTIONS(1372),\n    [anon_sym_LT_LT] = ACTIONS(1372),\n    [anon_sym_AMP] = ACTIONS(1374),\n    [anon_sym_CARET] = ACTIONS(1372),\n    [anon_sym_PIPE] = ACTIONS(1374),\n    [anon_sym_PLUS] = ACTIONS(1374),\n    [anon_sym_DASH] = ACTIONS(1374),\n    [anon_sym_PERCENT] = ACTIONS(1372),\n    [anon_sym_STAR_STAR] = ACTIONS(1372),\n    [anon_sym_LT_EQ] = ACTIONS(1372),\n    [anon_sym_EQ_EQ] = ACTIONS(1374),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1372),\n    [anon_sym_BANG_EQ] = ACTIONS(1374),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1372),\n    [anon_sym_GT_EQ] = ACTIONS(1372),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1372),\n    [anon_sym_instanceof] = ACTIONS(1374),\n    [anon_sym_TILDE] = ACTIONS(1372),\n    [anon_sym_void] = ACTIONS(1374),\n    [anon_sym_delete] = ACTIONS(1374),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1372),\n    [anon_sym_DASH_DASH] = ACTIONS(1372),\n    [anon_sym_DQUOTE] = ACTIONS(1372),\n    [anon_sym_SQUOTE] = ACTIONS(1372),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1372),\n    [sym_number] = ACTIONS(1372),\n    [sym_this] = ACTIONS(1374),\n    [sym_super] = ACTIONS(1374),\n    [sym_true] = ACTIONS(1374),\n    [sym_false] = ACTIONS(1374),\n    [sym_null] = ACTIONS(1374),\n    [sym_undefined] = ACTIONS(1374),\n    [anon_sym_AT] = ACTIONS(1372),\n    [anon_sym_static] = ACTIONS(1374),\n    [anon_sym_declare] = ACTIONS(1374),\n    [anon_sym_public] = ACTIONS(1374),\n    [anon_sym_private] = ACTIONS(1374),\n    [anon_sym_protected] = ACTIONS(1374),\n    [anon_sym_override] = ACTIONS(1374),\n    [anon_sym_readonly] = ACTIONS(1374),\n    [anon_sym_module] = ACTIONS(1374),\n    [anon_sym_any] = ACTIONS(1374),\n    [anon_sym_number] = ACTIONS(1374),\n    [anon_sym_int] = ACTIONS(1374),\n    [anon_sym_float] = ACTIONS(1374),\n    [anon_sym_float2] = ACTIONS(1374),\n    [anon_sym_float3] = ACTIONS(1374),\n    [anon_sym_float4] = ACTIONS(1374),\n    [anon_sym_float3x3] = ACTIONS(1374),\n    [anon_sym_float2x2] = ACTIONS(1374),\n    [anon_sym_float4x4] = ACTIONS(1374),\n    [anon_sym_int2] = ACTIONS(1374),\n    [anon_sym_int3] = ACTIONS(1374),\n    [anon_sym_int4] = ACTIONS(1374),\n    [anon_sym_int3x3] = ACTIONS(1374),\n    [anon_sym_int2x2] = ACTIONS(1374),\n    [anon_sym_int4x4] = ACTIONS(1374),\n    [anon_sym_boolean] = ACTIONS(1374),\n    [anon_sym_string] = ACTIONS(1374),\n    [anon_sym_symbol] = ACTIONS(1374),\n    [anon_sym_workgroup] = ACTIONS(1374),\n    [anon_sym_get] = ACTIONS(1374),\n    [anon_sym_set] = ACTIONS(1374),\n    [anon_sym_satisfies] = ACTIONS(1374),\n    [anon_sym_trait] = ACTIONS(1374),\n    [anon_sym_impl] = ACTIONS(1374),\n    [anon_sym_enum] = ACTIONS(1374),\n    [anon_sym_shader] = ACTIONS(1374),\n    [sym__automatic_semicolon] = ACTIONS(1372),\n    [sym__ternary_qmark] = ACTIONS(1372),\n  },\n  [137] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_RBRACE] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1376),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_RBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_QMARK] = ACTIONS(1376),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [138] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1382),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [139] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1384),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [140] = {\n    [sym_import] = STATE(1847),\n    [sym_expression_statement] = STATE(177),\n    [sym_variable_declaration] = STATE(177),\n    [sym_lexical_declaration] = STATE(177),\n    [sym_empty_statement] = STATE(177),\n    [sym_parenthesized_expression] = STATE(2079),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3137),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3137),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1110),\n    [sym_subscript_expression] = STATE(1110),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3137),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1110),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1386),\n    [anon_sym_pub] = ACTIONS(1388),\n    [anon_sym_export] = ACTIONS(1388),\n    [anon_sym_type] = ACTIONS(1388),\n    [anon_sym_namespace] = ACTIONS(1390),\n    [anon_sym_LBRACE] = ACTIONS(1392),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_var] = ACTIONS(1394),\n    [anon_sym_let] = ACTIONS(1396),\n    [anon_sym_const] = ACTIONS(1396),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(1398),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(1400),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(1388),\n    [anon_sym_async] = ACTIONS(1402),\n    [anon_sym_fn] = ACTIONS(1388),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1404),\n    [anon_sym_static] = ACTIONS(1388),\n    [anon_sym_declare] = ACTIONS(1388),\n    [anon_sym_public] = ACTIONS(1388),\n    [anon_sym_private] = ACTIONS(1388),\n    [anon_sym_protected] = ACTIONS(1388),\n    [anon_sym_override] = ACTIONS(1388),\n    [anon_sym_readonly] = ACTIONS(1388),\n    [anon_sym_module] = ACTIONS(1388),\n    [anon_sym_any] = ACTIONS(1388),\n    [anon_sym_number] = ACTIONS(1388),\n    [anon_sym_int] = ACTIONS(1388),\n    [anon_sym_float] = ACTIONS(1388),\n    [anon_sym_float2] = ACTIONS(1388),\n    [anon_sym_float3] = ACTIONS(1388),\n    [anon_sym_float4] = ACTIONS(1388),\n    [anon_sym_float3x3] = ACTIONS(1388),\n    [anon_sym_float2x2] = ACTIONS(1388),\n    [anon_sym_float4x4] = ACTIONS(1388),\n    [anon_sym_int2] = ACTIONS(1388),\n    [anon_sym_int3] = ACTIONS(1388),\n    [anon_sym_int4] = ACTIONS(1388),\n    [anon_sym_int3x3] = ACTIONS(1388),\n    [anon_sym_int2x2] = ACTIONS(1388),\n    [anon_sym_int4x4] = ACTIONS(1388),\n    [anon_sym_boolean] = ACTIONS(1388),\n    [anon_sym_string] = ACTIONS(1388),\n    [anon_sym_symbol] = ACTIONS(1388),\n    [anon_sym_workgroup] = ACTIONS(1406),\n    [anon_sym_get] = ACTIONS(1388),\n    [anon_sym_set] = ACTIONS(1388),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [141] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1408),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [142] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1410),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [143] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1543),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(2978),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(2981),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1412),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [144] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1543),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(2978),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(2981),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1414),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [145] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1555),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3100),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3105),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1416),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [146] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1528),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(2978),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(2981),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1380),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1412),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [147] = {\n    [sym_import] = STATE(1847),\n    [sym_expression_statement] = STATE(176),\n    [sym_variable_declaration] = STATE(176),\n    [sym_lexical_declaration] = STATE(176),\n    [sym_empty_statement] = STATE(176),\n    [sym_parenthesized_expression] = STATE(2079),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3137),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3137),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1110),\n    [sym_subscript_expression] = STATE(1110),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3137),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1110),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1386),\n    [anon_sym_pub] = ACTIONS(1388),\n    [anon_sym_export] = ACTIONS(1388),\n    [anon_sym_type] = ACTIONS(1388),\n    [anon_sym_namespace] = ACTIONS(1390),\n    [anon_sym_LBRACE] = ACTIONS(1392),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_var] = ACTIONS(1394),\n    [anon_sym_let] = ACTIONS(1396),\n    [anon_sym_const] = ACTIONS(1396),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(1398),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(1400),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(1388),\n    [anon_sym_async] = ACTIONS(1402),\n    [anon_sym_fn] = ACTIONS(1388),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1404),\n    [anon_sym_static] = ACTIONS(1388),\n    [anon_sym_declare] = ACTIONS(1388),\n    [anon_sym_public] = ACTIONS(1388),\n    [anon_sym_private] = ACTIONS(1388),\n    [anon_sym_protected] = ACTIONS(1388),\n    [anon_sym_override] = ACTIONS(1388),\n    [anon_sym_readonly] = ACTIONS(1388),\n    [anon_sym_module] = ACTIONS(1388),\n    [anon_sym_any] = ACTIONS(1388),\n    [anon_sym_number] = ACTIONS(1388),\n    [anon_sym_int] = ACTIONS(1388),\n    [anon_sym_float] = ACTIONS(1388),\n    [anon_sym_float2] = ACTIONS(1388),\n    [anon_sym_float3] = ACTIONS(1388),\n    [anon_sym_float4] = ACTIONS(1388),\n    [anon_sym_float3x3] = ACTIONS(1388),\n    [anon_sym_float2x2] = ACTIONS(1388),\n    [anon_sym_float4x4] = ACTIONS(1388),\n    [anon_sym_int2] = ACTIONS(1388),\n    [anon_sym_int3] = ACTIONS(1388),\n    [anon_sym_int4] = ACTIONS(1388),\n    [anon_sym_int3x3] = ACTIONS(1388),\n    [anon_sym_int2x2] = ACTIONS(1388),\n    [anon_sym_int4x4] = ACTIONS(1388),\n    [anon_sym_boolean] = ACTIONS(1388),\n    [anon_sym_string] = ACTIONS(1388),\n    [anon_sym_symbol] = ACTIONS(1388),\n    [anon_sym_workgroup] = ACTIONS(1406),\n    [anon_sym_get] = ACTIONS(1388),\n    [anon_sym_set] = ACTIONS(1388),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [148] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_decorator] = STATE(873),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2788),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_accessibility_modifier] = STATE(178),\n    [sym_override_modifier] = STATE(195),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_class_repeat1] = STATE(871),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(723),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1418),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1420),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [149] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_RBRACE] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_SEMI] = ACTIONS(1376),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1378),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(209),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(1376),\n    [sym__automatic_semicolon] = ACTIONS(1376),\n  },\n  [150] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1822),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3123),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3123),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1139),\n    [sym_subscript_expression] = STATE(1139),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3123),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1139),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_mapped_type_clause] = STATE(3483),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1422),\n    [anon_sym_pub] = ACTIONS(1424),\n    [anon_sym_export] = ACTIONS(1424),\n    [anon_sym_type] = ACTIONS(1424),\n    [anon_sym_namespace] = ACTIONS(1426),\n    [anon_sym_LBRACE] = ACTIONS(1428),\n    [anon_sym_COMMA] = ACTIONS(1430),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1432),\n    [anon_sym_RBRACK] = ACTIONS(1434),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1424),\n    [anon_sym_async] = ACTIONS(1436),\n    [anon_sym_fn] = ACTIONS(1424),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1438),\n    [anon_sym_static] = ACTIONS(1424),\n    [anon_sym_declare] = ACTIONS(1424),\n    [anon_sym_public] = ACTIONS(1424),\n    [anon_sym_private] = ACTIONS(1424),\n    [anon_sym_protected] = ACTIONS(1424),\n    [anon_sym_override] = ACTIONS(1424),\n    [anon_sym_readonly] = ACTIONS(1424),\n    [anon_sym_module] = ACTIONS(1424),\n    [anon_sym_any] = ACTIONS(1424),\n    [anon_sym_number] = ACTIONS(1424),\n    [anon_sym_int] = ACTIONS(1424),\n    [anon_sym_float] = ACTIONS(1424),\n    [anon_sym_float2] = ACTIONS(1424),\n    [anon_sym_float3] = ACTIONS(1424),\n    [anon_sym_float4] = ACTIONS(1424),\n    [anon_sym_float3x3] = ACTIONS(1424),\n    [anon_sym_float2x2] = ACTIONS(1424),\n    [anon_sym_float4x4] = ACTIONS(1424),\n    [anon_sym_int2] = ACTIONS(1424),\n    [anon_sym_int3] = ACTIONS(1424),\n    [anon_sym_int4] = ACTIONS(1424),\n    [anon_sym_int3x3] = ACTIONS(1424),\n    [anon_sym_int2x2] = ACTIONS(1424),\n    [anon_sym_int4x4] = ACTIONS(1424),\n    [anon_sym_boolean] = ACTIONS(1424),\n    [anon_sym_string] = ACTIONS(1424),\n    [anon_sym_symbol] = ACTIONS(1424),\n    [anon_sym_workgroup] = ACTIONS(1440),\n    [anon_sym_get] = ACTIONS(1424),\n    [anon_sym_set] = ACTIONS(1424),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [151] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_assignment_pattern] = STATE(3099),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2850),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_pattern_repeat1] = STATE(3106),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(1430),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_RBRACK] = ACTIONS(1442),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [152] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1482),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(3185),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3155),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(3158),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1444),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1447),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [153] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1482),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(3185),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3155),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(3158),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1444),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1444),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [154] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1820),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3123),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3123),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1139),\n    [sym_subscript_expression] = STATE(1139),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3123),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1139),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(1451),\n    [anon_sym_pub] = ACTIONS(1453),\n    [anon_sym_export] = ACTIONS(1453),\n    [anon_sym_type] = ACTIONS(1453),\n    [anon_sym_namespace] = ACTIONS(1455),\n    [anon_sym_LBRACE] = ACTIONS(1428),\n    [anon_sym_COMMA] = ACTIONS(1430),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1432),\n    [anon_sym_RBRACK] = ACTIONS(1434),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1453),\n    [anon_sym_async] = ACTIONS(1457),\n    [anon_sym_fn] = ACTIONS(1453),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1438),\n    [anon_sym_static] = ACTIONS(1453),\n    [anon_sym_declare] = ACTIONS(1453),\n    [anon_sym_public] = ACTIONS(1453),\n    [anon_sym_private] = ACTIONS(1453),\n    [anon_sym_protected] = ACTIONS(1453),\n    [anon_sym_override] = ACTIONS(1453),\n    [anon_sym_readonly] = ACTIONS(1453),\n    [anon_sym_module] = ACTIONS(1453),\n    [anon_sym_any] = ACTIONS(1453),\n    [anon_sym_number] = ACTIONS(1453),\n    [anon_sym_int] = ACTIONS(1453),\n    [anon_sym_float] = ACTIONS(1453),\n    [anon_sym_float2] = ACTIONS(1453),\n    [anon_sym_float3] = ACTIONS(1453),\n    [anon_sym_float4] = ACTIONS(1453),\n    [anon_sym_float3x3] = ACTIONS(1453),\n    [anon_sym_float2x2] = ACTIONS(1453),\n    [anon_sym_float4x4] = ACTIONS(1453),\n    [anon_sym_int2] = ACTIONS(1453),\n    [anon_sym_int3] = ACTIONS(1453),\n    [anon_sym_int4] = ACTIONS(1453),\n    [anon_sym_int3x3] = ACTIONS(1453),\n    [anon_sym_int2x2] = ACTIONS(1453),\n    [anon_sym_int4x4] = ACTIONS(1453),\n    [anon_sym_boolean] = ACTIONS(1453),\n    [anon_sym_string] = ACTIONS(1453),\n    [anon_sym_symbol] = ACTIONS(1453),\n    [anon_sym_workgroup] = ACTIONS(1459),\n    [anon_sym_get] = ACTIONS(1453),\n    [anon_sym_set] = ACTIONS(1453),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [155] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1376),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_RBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [156] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_assignment_pattern] = STATE(2984),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2951),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_pattern_repeat1] = STATE(2985),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(1430),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_RBRACK] = ACTIONS(1434),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [157] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1482),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(3185),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_spread_element] = STATE(3155),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(3158),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1444),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_RBRACK] = ACTIONS(1461),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [158] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_assignment_pattern] = STATE(3185),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(3158),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_COMMA] = ACTIONS(1465),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_RBRACK] = ACTIONS(1465),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [159] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1565),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [160] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1333),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [161] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1607),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [162] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1482),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3155),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1467),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1467),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_RBRACK] = ACTIONS(1467),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [163] = {\n    [sym_identifier] = ACTIONS(1471),\n    [anon_sym_pub] = ACTIONS(1471),\n    [anon_sym_export] = ACTIONS(1471),\n    [anon_sym_type] = ACTIONS(1471),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1471),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1473),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_typeof] = ACTIONS(1471),\n    [anon_sym_import] = ACTIONS(1471),\n    [anon_sym_BANG] = ACTIONS(1471),\n    [anon_sym_LPAREN] = ACTIONS(1473),\n    [anon_sym_RPAREN] = ACTIONS(130),\n    [anon_sym_await] = ACTIONS(1471),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(144),\n    [anon_sym_yield] = ACTIONS(1471),\n    [anon_sym_LBRACK] = ACTIONS(1473),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1473),\n    [anon_sym_LT] = ACTIONS(1471),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(1471),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1471),\n    [anon_sym_async] = ACTIONS(1471),\n    [anon_sym_fn] = ACTIONS(1471),\n    [anon_sym_fn_STAR] = ACTIONS(1473),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1471),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1473),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(1471),\n    [anon_sym_DASH] = ACTIONS(1471),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(1473),\n    [anon_sym_void] = ACTIONS(1471),\n    [anon_sym_delete] = ACTIONS(1471),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1473),\n    [anon_sym_DASH_DASH] = ACTIONS(1473),\n    [anon_sym_DQUOTE] = ACTIONS(1473),\n    [anon_sym_SQUOTE] = ACTIONS(1473),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1473),\n    [sym_number] = ACTIONS(1473),\n    [sym_this] = ACTIONS(1471),\n    [sym_super] = ACTIONS(1471),\n    [sym_true] = ACTIONS(1471),\n    [sym_false] = ACTIONS(1471),\n    [sym_null] = ACTIONS(1471),\n    [sym_undefined] = ACTIONS(1471),\n    [anon_sym_static] = ACTIONS(1471),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(1471),\n    [anon_sym_public] = ACTIONS(1471),\n    [anon_sym_private] = ACTIONS(1471),\n    [anon_sym_protected] = ACTIONS(1471),\n    [anon_sym_override] = ACTIONS(1471),\n    [anon_sym_readonly] = ACTIONS(1471),\n    [anon_sym_module] = ACTIONS(1471),\n    [anon_sym_any] = ACTIONS(1471),\n    [anon_sym_number] = ACTIONS(1471),\n    [anon_sym_int] = ACTIONS(1471),\n    [anon_sym_float] = ACTIONS(1471),\n    [anon_sym_float2] = ACTIONS(1471),\n    [anon_sym_float3] = ACTIONS(1471),\n    [anon_sym_float4] = ACTIONS(1471),\n    [anon_sym_float3x3] = ACTIONS(1471),\n    [anon_sym_float2x2] = ACTIONS(1471),\n    [anon_sym_float4x4] = ACTIONS(1471),\n    [anon_sym_int2] = ACTIONS(1471),\n    [anon_sym_int3] = ACTIONS(1471),\n    [anon_sym_int4] = ACTIONS(1471),\n    [anon_sym_int3x3] = ACTIONS(1471),\n    [anon_sym_int2x2] = ACTIONS(1471),\n    [anon_sym_int4x4] = ACTIONS(1471),\n    [anon_sym_boolean] = ACTIONS(1471),\n    [anon_sym_string] = ACTIONS(1471),\n    [anon_sym_symbol] = ACTIONS(1471),\n    [anon_sym_workgroup] = ACTIONS(1471),\n    [anon_sym_get] = ACTIONS(1471),\n    [anon_sym_set] = ACTIONS(1471),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(1471),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [164] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1477),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(2973),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(2975),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1477),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [165] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1894),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [166] = {\n    [sym_identifier] = ACTIONS(1479),\n    [anon_sym_pub] = ACTIONS(1479),\n    [anon_sym_export] = ACTIONS(1479),\n    [anon_sym_type] = ACTIONS(1479),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1479),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1481),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(1479),\n    [anon_sym_import] = ACTIONS(1479),\n    [anon_sym_BANG] = ACTIONS(1479),\n    [anon_sym_LPAREN] = ACTIONS(1481),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(1479),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(1479),\n    [anon_sym_LBRACK] = ACTIONS(1481),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1481),\n    [anon_sym_LT] = ACTIONS(1479),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(1479),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1479),\n    [anon_sym_async] = ACTIONS(1479),\n    [anon_sym_fn] = ACTIONS(1479),\n    [anon_sym_fn_STAR] = ACTIONS(1481),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1479),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1481),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(1479),\n    [anon_sym_DASH] = ACTIONS(1479),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(1481),\n    [anon_sym_void] = ACTIONS(1479),\n    [anon_sym_delete] = ACTIONS(1479),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1481),\n    [anon_sym_DASH_DASH] = ACTIONS(1481),\n    [anon_sym_DQUOTE] = ACTIONS(1481),\n    [anon_sym_SQUOTE] = ACTIONS(1481),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1481),\n    [sym_number] = ACTIONS(1481),\n    [sym_this] = ACTIONS(1479),\n    [sym_super] = ACTIONS(1479),\n    [sym_true] = ACTIONS(1479),\n    [sym_false] = ACTIONS(1479),\n    [sym_null] = ACTIONS(1479),\n    [sym_undefined] = ACTIONS(1479),\n    [anon_sym_static] = ACTIONS(1479),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(1479),\n    [anon_sym_public] = ACTIONS(1479),\n    [anon_sym_private] = ACTIONS(1479),\n    [anon_sym_protected] = ACTIONS(1479),\n    [anon_sym_override] = ACTIONS(1479),\n    [anon_sym_readonly] = ACTIONS(1479),\n    [anon_sym_module] = ACTIONS(1479),\n    [anon_sym_any] = ACTIONS(1479),\n    [anon_sym_number] = ACTIONS(1479),\n    [anon_sym_int] = ACTIONS(1479),\n    [anon_sym_float] = ACTIONS(1479),\n    [anon_sym_float2] = ACTIONS(1479),\n    [anon_sym_float3] = ACTIONS(1479),\n    [anon_sym_float4] = ACTIONS(1479),\n    [anon_sym_float3x3] = ACTIONS(1479),\n    [anon_sym_float2x2] = ACTIONS(1479),\n    [anon_sym_float4x4] = ACTIONS(1479),\n    [anon_sym_int2] = ACTIONS(1479),\n    [anon_sym_int3] = ACTIONS(1479),\n    [anon_sym_int4] = ACTIONS(1479),\n    [anon_sym_int3x3] = ACTIONS(1479),\n    [anon_sym_int2x2] = ACTIONS(1479),\n    [anon_sym_int4x4] = ACTIONS(1479),\n    [anon_sym_boolean] = ACTIONS(1479),\n    [anon_sym_string] = ACTIONS(1479),\n    [anon_sym_symbol] = ACTIONS(1479),\n    [anon_sym_workgroup] = ACTIONS(1479),\n    [anon_sym_get] = ACTIONS(1479),\n    [anon_sym_set] = ACTIONS(1479),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(1479),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [167] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1478),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3045),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3046),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1483),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [168] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1462),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3023),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3022),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1485),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [169] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1334),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_COMMA] = ACTIONS(1376),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(1376),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_GT] = ACTIONS(1376),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_AMP] = ACTIONS(1376),\n    [anon_sym_PIPE] = ACTIONS(1376),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_extends] = ACTIONS(1378),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [170] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1480),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3131),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3132),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1487),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [171] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1473),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3161),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3160),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1489),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [172] = {\n    [sym_identifier] = ACTIONS(1471),\n    [anon_sym_pub] = ACTIONS(1471),\n    [anon_sym_export] = ACTIONS(1471),\n    [anon_sym_type] = ACTIONS(1471),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1471),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1473),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_typeof] = ACTIONS(1471),\n    [anon_sym_import] = ACTIONS(1471),\n    [anon_sym_BANG] = ACTIONS(1471),\n    [anon_sym_LPAREN] = ACTIONS(1473),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_await] = ACTIONS(1471),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_yield] = ACTIONS(1471),\n    [anon_sym_LBRACK] = ACTIONS(1473),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1473),\n    [anon_sym_LT] = ACTIONS(1471),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(1471),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1471),\n    [anon_sym_async] = ACTIONS(1471),\n    [anon_sym_fn] = ACTIONS(1471),\n    [anon_sym_fn_STAR] = ACTIONS(1473),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1471),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1473),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(1471),\n    [anon_sym_DASH] = ACTIONS(1471),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(1473),\n    [anon_sym_void] = ACTIONS(1471),\n    [anon_sym_delete] = ACTIONS(1471),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1473),\n    [anon_sym_DASH_DASH] = ACTIONS(1473),\n    [anon_sym_DQUOTE] = ACTIONS(1473),\n    [anon_sym_SQUOTE] = ACTIONS(1473),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1473),\n    [sym_number] = ACTIONS(1473),\n    [sym_this] = ACTIONS(1471),\n    [sym_super] = ACTIONS(1471),\n    [sym_true] = ACTIONS(1471),\n    [sym_false] = ACTIONS(1471),\n    [sym_null] = ACTIONS(1471),\n    [sym_undefined] = ACTIONS(1471),\n    [anon_sym_static] = ACTIONS(1471),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(1471),\n    [anon_sym_public] = ACTIONS(1471),\n    [anon_sym_private] = ACTIONS(1471),\n    [anon_sym_protected] = ACTIONS(1471),\n    [anon_sym_override] = ACTIONS(1471),\n    [anon_sym_readonly] = ACTIONS(1471),\n    [anon_sym_module] = ACTIONS(1471),\n    [anon_sym_any] = ACTIONS(1471),\n    [anon_sym_number] = ACTIONS(1471),\n    [anon_sym_int] = ACTIONS(1471),\n    [anon_sym_float] = ACTIONS(1471),\n    [anon_sym_float2] = ACTIONS(1471),\n    [anon_sym_float3] = ACTIONS(1471),\n    [anon_sym_float4] = ACTIONS(1471),\n    [anon_sym_float3x3] = ACTIONS(1471),\n    [anon_sym_float2x2] = ACTIONS(1471),\n    [anon_sym_float4x4] = ACTIONS(1471),\n    [anon_sym_int2] = ACTIONS(1471),\n    [anon_sym_int3] = ACTIONS(1471),\n    [anon_sym_int4] = ACTIONS(1471),\n    [anon_sym_int3x3] = ACTIONS(1471),\n    [anon_sym_int2x2] = ACTIONS(1471),\n    [anon_sym_int4x4] = ACTIONS(1471),\n    [anon_sym_boolean] = ACTIONS(1471),\n    [anon_sym_string] = ACTIONS(1471),\n    [anon_sym_symbol] = ACTIONS(1471),\n    [anon_sym_workgroup] = ACTIONS(1471),\n    [anon_sym_get] = ACTIONS(1471),\n    [anon_sym_set] = ACTIONS(1471),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(1471),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [173] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1499),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3141),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3140),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1491),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [174] = {\n    [sym_identifier] = ACTIONS(1479),\n    [anon_sym_pub] = ACTIONS(1479),\n    [anon_sym_export] = ACTIONS(1479),\n    [anon_sym_type] = ACTIONS(1479),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1479),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1481),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_typeof] = ACTIONS(1479),\n    [anon_sym_import] = ACTIONS(1479),\n    [anon_sym_BANG] = ACTIONS(1479),\n    [anon_sym_LPAREN] = ACTIONS(1481),\n    [anon_sym_RPAREN] = ACTIONS(130),\n    [anon_sym_await] = ACTIONS(1479),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(144),\n    [anon_sym_yield] = ACTIONS(1479),\n    [anon_sym_LBRACK] = ACTIONS(1481),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1481),\n    [anon_sym_LT] = ACTIONS(1479),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(1479),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1479),\n    [anon_sym_async] = ACTIONS(1479),\n    [anon_sym_fn] = ACTIONS(1479),\n    [anon_sym_fn_STAR] = ACTIONS(1481),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_new] = ACTIONS(1479),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1481),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(1479),\n    [anon_sym_DASH] = ACTIONS(1479),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_TILDE] = ACTIONS(1481),\n    [anon_sym_void] = ACTIONS(1479),\n    [anon_sym_delete] = ACTIONS(1479),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1481),\n    [anon_sym_DASH_DASH] = ACTIONS(1481),\n    [anon_sym_DQUOTE] = ACTIONS(1481),\n    [anon_sym_SQUOTE] = ACTIONS(1481),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1481),\n    [sym_number] = ACTIONS(1481),\n    [sym_this] = ACTIONS(1479),\n    [sym_super] = ACTIONS(1479),\n    [sym_true] = ACTIONS(1479),\n    [sym_false] = ACTIONS(1479),\n    [sym_null] = ACTIONS(1479),\n    [sym_undefined] = ACTIONS(1479),\n    [anon_sym_static] = ACTIONS(1479),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(1479),\n    [anon_sym_public] = ACTIONS(1479),\n    [anon_sym_private] = ACTIONS(1479),\n    [anon_sym_protected] = ACTIONS(1479),\n    [anon_sym_override] = ACTIONS(1479),\n    [anon_sym_readonly] = ACTIONS(1479),\n    [anon_sym_module] = ACTIONS(1479),\n    [anon_sym_any] = ACTIONS(1479),\n    [anon_sym_number] = ACTIONS(1479),\n    [anon_sym_int] = ACTIONS(1479),\n    [anon_sym_float] = ACTIONS(1479),\n    [anon_sym_float2] = ACTIONS(1479),\n    [anon_sym_float3] = ACTIONS(1479),\n    [anon_sym_float4] = ACTIONS(1479),\n    [anon_sym_float3x3] = ACTIONS(1479),\n    [anon_sym_float2x2] = ACTIONS(1479),\n    [anon_sym_float4x4] = ACTIONS(1479),\n    [anon_sym_int2] = ACTIONS(1479),\n    [anon_sym_int3] = ACTIONS(1479),\n    [anon_sym_int4] = ACTIONS(1479),\n    [anon_sym_int3x3] = ACTIONS(1479),\n    [anon_sym_int2x2] = ACTIONS(1479),\n    [anon_sym_int4x4] = ACTIONS(1479),\n    [anon_sym_boolean] = ACTIONS(1479),\n    [anon_sym_string] = ACTIONS(1479),\n    [anon_sym_symbol] = ACTIONS(1479),\n    [anon_sym_workgroup] = ACTIONS(1479),\n    [anon_sym_get] = ACTIONS(1479),\n    [anon_sym_set] = ACTIONS(1479),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [anon_sym_shader] = ACTIONS(1479),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [175] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1479),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_spread_element] = STATE(3114),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_array_repeat1] = STATE(3115),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_COMMA] = ACTIONS(1475),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1493),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1469),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [176] = {\n    [sym_import] = STATE(1847),\n    [sym_expression_statement] = STATE(200),\n    [sym_empty_statement] = STATE(200),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [177] = {\n    [sym_import] = STATE(1847),\n    [sym_expression_statement] = STATE(201),\n    [sym_empty_statement] = STATE(201),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3251),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_SEMI] = ACTIONS(61),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [178] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2733),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_override_modifier] = STATE(191),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1495),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1497),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [179] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2792),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_override_modifier] = STATE(190),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(607),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(729),\n    [anon_sym_readonly] = ACTIONS(1499),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [180] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1680),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2511),\n    [sym_assignment_pattern] = STATE(3285),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2511),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1050),\n    [sym_subscript_expression] = STATE(1050),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2511),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(3129),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1050),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1203),\n    [anon_sym_pub] = ACTIONS(619),\n    [anon_sym_export] = ACTIONS(619),\n    [anon_sym_type] = ACTIONS(619),\n    [anon_sym_namespace] = ACTIONS(621),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(619),\n    [anon_sym_async] = ACTIONS(643),\n    [anon_sym_fn] = ACTIONS(619),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1207),\n    [anon_sym_static] = ACTIONS(619),\n    [anon_sym_declare] = ACTIONS(619),\n    [anon_sym_public] = ACTIONS(619),\n    [anon_sym_private] = ACTIONS(619),\n    [anon_sym_protected] = ACTIONS(619),\n    [anon_sym_override] = ACTIONS(619),\n    [anon_sym_readonly] = ACTIONS(619),\n    [anon_sym_module] = ACTIONS(619),\n    [anon_sym_any] = ACTIONS(619),\n    [anon_sym_number] = ACTIONS(619),\n    [anon_sym_int] = ACTIONS(619),\n    [anon_sym_float] = ACTIONS(619),\n    [anon_sym_float2] = ACTIONS(619),\n    [anon_sym_float3] = ACTIONS(619),\n    [anon_sym_float4] = ACTIONS(619),\n    [anon_sym_float3x3] = ACTIONS(619),\n    [anon_sym_float2x2] = ACTIONS(619),\n    [anon_sym_float4x4] = ACTIONS(619),\n    [anon_sym_int2] = ACTIONS(619),\n    [anon_sym_int3] = ACTIONS(619),\n    [anon_sym_int4] = ACTIONS(619),\n    [anon_sym_int3x3] = ACTIONS(619),\n    [anon_sym_int2x2] = ACTIONS(619),\n    [anon_sym_int4x4] = ACTIONS(619),\n    [anon_sym_boolean] = ACTIONS(619),\n    [anon_sym_string] = ACTIONS(619),\n    [anon_sym_symbol] = ACTIONS(619),\n    [anon_sym_workgroup] = ACTIONS(671),\n    [anon_sym_get] = ACTIONS(619),\n    [anon_sym_set] = ACTIONS(619),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [181] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_assignment_pattern] = STATE(3285),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(3129),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(117),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [182] = {\n    [sym_import] = STATE(1749),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1333),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1501),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [183] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1503),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [184] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2083),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3102),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3102),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1160),\n    [sym_subscript_expression] = STATE(1160),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3102),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1160),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1505),\n    [anon_sym_pub] = ACTIONS(1507),\n    [anon_sym_export] = ACTIONS(1507),\n    [anon_sym_type] = ACTIONS(1507),\n    [anon_sym_namespace] = ACTIONS(1509),\n    [anon_sym_LBRACE] = ACTIONS(1511),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_var] = ACTIONS(1513),\n    [anon_sym_let] = ACTIONS(1515),\n    [anon_sym_const] = ACTIONS(1515),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1517),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1519),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1507),\n    [anon_sym_async] = ACTIONS(1521),\n    [anon_sym_fn] = ACTIONS(1507),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1523),\n    [anon_sym_static] = ACTIONS(1507),\n    [anon_sym_declare] = ACTIONS(1507),\n    [anon_sym_public] = ACTIONS(1507),\n    [anon_sym_private] = ACTIONS(1507),\n    [anon_sym_protected] = ACTIONS(1507),\n    [anon_sym_override] = ACTIONS(1507),\n    [anon_sym_readonly] = ACTIONS(1507),\n    [anon_sym_module] = ACTIONS(1507),\n    [anon_sym_any] = ACTIONS(1507),\n    [anon_sym_number] = ACTIONS(1507),\n    [anon_sym_int] = ACTIONS(1507),\n    [anon_sym_float] = ACTIONS(1507),\n    [anon_sym_float2] = ACTIONS(1507),\n    [anon_sym_float3] = ACTIONS(1507),\n    [anon_sym_float4] = ACTIONS(1507),\n    [anon_sym_float3x3] = ACTIONS(1507),\n    [anon_sym_float2x2] = ACTIONS(1507),\n    [anon_sym_float4x4] = ACTIONS(1507),\n    [anon_sym_int2] = ACTIONS(1507),\n    [anon_sym_int3] = ACTIONS(1507),\n    [anon_sym_int4] = ACTIONS(1507),\n    [anon_sym_int3x3] = ACTIONS(1507),\n    [anon_sym_int2x2] = ACTIONS(1507),\n    [anon_sym_int4x4] = ACTIONS(1507),\n    [anon_sym_boolean] = ACTIONS(1507),\n    [anon_sym_string] = ACTIONS(1507),\n    [anon_sym_symbol] = ACTIONS(1507),\n    [anon_sym_workgroup] = ACTIONS(1525),\n    [anon_sym_get] = ACTIONS(1507),\n    [anon_sym_set] = ACTIONS(1507),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [185] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1527),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [186] = {\n    [sym_import] = STATE(1749),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1334),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1529),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [187] = {\n    [sym_import] = STATE(1986),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2088),\n    [sym__type_query_subscript_expression] = STATE(2085),\n    [sym__type_query_call_expression] = STATE(2166),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1531),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [188] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2792),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(607),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(1499),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [189] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1533),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [190] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2709),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(615),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(1535),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [191] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2750),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1537),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(1539),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [192] = {\n    [sym_import] = STATE(1749),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1565),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1541),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [193] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1607),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1543),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [194] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1894),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1545),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [195] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2499),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2499),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1039),\n    [sym_subscript_expression] = STATE(1039),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2499),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_pattern] = STATE(2809),\n    [sym_rest_pattern] = STATE(2507),\n    [sym_non_null_expression] = STATE(1039),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(581),\n    [anon_sym_pub] = ACTIONS(117),\n    [anon_sym_export] = ACTIONS(117),\n    [anon_sym_type] = ACTIONS(117),\n    [anon_sym_namespace] = ACTIONS(124),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(154),\n    [anon_sym_fn] = ACTIONS(117),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(166),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(1547),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(603),\n    [anon_sym_static] = ACTIONS(117),\n    [anon_sym_declare] = ACTIONS(117),\n    [anon_sym_public] = ACTIONS(117),\n    [anon_sym_private] = ACTIONS(117),\n    [anon_sym_protected] = ACTIONS(117),\n    [anon_sym_override] = ACTIONS(117),\n    [anon_sym_readonly] = ACTIONS(1549),\n    [anon_sym_module] = ACTIONS(117),\n    [anon_sym_any] = ACTIONS(117),\n    [anon_sym_number] = ACTIONS(117),\n    [anon_sym_int] = ACTIONS(117),\n    [anon_sym_float] = ACTIONS(117),\n    [anon_sym_float2] = ACTIONS(117),\n    [anon_sym_float3] = ACTIONS(117),\n    [anon_sym_float4] = ACTIONS(117),\n    [anon_sym_float3x3] = ACTIONS(117),\n    [anon_sym_float2x2] = ACTIONS(117),\n    [anon_sym_float4x4] = ACTIONS(117),\n    [anon_sym_int2] = ACTIONS(117),\n    [anon_sym_int3] = ACTIONS(117),\n    [anon_sym_int4] = ACTIONS(117),\n    [anon_sym_int3x3] = ACTIONS(117),\n    [anon_sym_int2x2] = ACTIONS(117),\n    [anon_sym_int4x4] = ACTIONS(117),\n    [anon_sym_boolean] = ACTIONS(117),\n    [anon_sym_string] = ACTIONS(117),\n    [anon_sym_symbol] = ACTIONS(117),\n    [anon_sym_workgroup] = ACTIONS(205),\n    [anon_sym_get] = ACTIONS(117),\n    [anon_sym_set] = ACTIONS(117),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [196] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1548),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3304),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_SEMI] = ACTIONS(1551),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n    [sym__automatic_semicolon] = ACTIONS(1551),\n  },\n  [197] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1553),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [198] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1555),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [199] = {\n    [sym_import] = STATE(1468),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym__type_query_member_expression] = STATE(2037),\n    [sym__type_query_subscript_expression] = STATE(2036),\n    [sym__type_query_call_expression] = STATE(2082),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1557),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [200] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1630),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3635),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1559),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [201] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1669),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3540),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_RPAREN] = ACTIONS(1561),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [202] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1777),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1314),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [203] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1875),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1785),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [204] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1376),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3664),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [205] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2649),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3273),\n    [sym_identifier] = ACTIONS(1567),\n    [anon_sym_pub] = ACTIONS(1569),\n    [anon_sym_export] = ACTIONS(1569),\n    [anon_sym_type] = ACTIONS(1569),\n    [anon_sym_namespace] = ACTIONS(1571),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1569),\n    [anon_sym_async] = ACTIONS(1575),\n    [anon_sym_fn] = ACTIONS(1569),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1569),\n    [anon_sym_declare] = ACTIONS(1569),\n    [anon_sym_public] = ACTIONS(1569),\n    [anon_sym_private] = ACTIONS(1569),\n    [anon_sym_protected] = ACTIONS(1569),\n    [anon_sym_override] = ACTIONS(1569),\n    [anon_sym_readonly] = ACTIONS(1569),\n    [anon_sym_module] = ACTIONS(1569),\n    [anon_sym_any] = ACTIONS(1569),\n    [anon_sym_number] = ACTIONS(1569),\n    [anon_sym_int] = ACTIONS(1569),\n    [anon_sym_float] = ACTIONS(1569),\n    [anon_sym_float2] = ACTIONS(1569),\n    [anon_sym_float3] = ACTIONS(1569),\n    [anon_sym_float4] = ACTIONS(1569),\n    [anon_sym_float3x3] = ACTIONS(1569),\n    [anon_sym_float2x2] = ACTIONS(1569),\n    [anon_sym_float4x4] = ACTIONS(1569),\n    [anon_sym_int2] = ACTIONS(1569),\n    [anon_sym_int3] = ACTIONS(1569),\n    [anon_sym_int4] = ACTIONS(1569),\n    [anon_sym_int3x3] = ACTIONS(1569),\n    [anon_sym_int2x2] = ACTIONS(1569),\n    [anon_sym_int4x4] = ACTIONS(1569),\n    [anon_sym_boolean] = ACTIONS(1569),\n    [anon_sym_string] = ACTIONS(1569),\n    [anon_sym_symbol] = ACTIONS(1569),\n    [anon_sym_workgroup] = ACTIONS(1577),\n    [anon_sym_get] = ACTIONS(1569),\n    [anon_sym_set] = ACTIONS(1569),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [206] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1822),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_mapped_type_clause] = STATE(3426),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1579),\n    [anon_sym_pub] = ACTIONS(1581),\n    [anon_sym_export] = ACTIONS(1581),\n    [anon_sym_type] = ACTIONS(1581),\n    [anon_sym_namespace] = ACTIONS(1583),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1581),\n    [anon_sym_async] = ACTIONS(1585),\n    [anon_sym_fn] = ACTIONS(1581),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1581),\n    [anon_sym_declare] = ACTIONS(1581),\n    [anon_sym_public] = ACTIONS(1581),\n    [anon_sym_private] = ACTIONS(1581),\n    [anon_sym_protected] = ACTIONS(1581),\n    [anon_sym_override] = ACTIONS(1581),\n    [anon_sym_readonly] = ACTIONS(1581),\n    [anon_sym_module] = ACTIONS(1581),\n    [anon_sym_any] = ACTIONS(1581),\n    [anon_sym_number] = ACTIONS(1581),\n    [anon_sym_int] = ACTIONS(1581),\n    [anon_sym_float] = ACTIONS(1581),\n    [anon_sym_float2] = ACTIONS(1581),\n    [anon_sym_float3] = ACTIONS(1581),\n    [anon_sym_float4] = ACTIONS(1581),\n    [anon_sym_float3x3] = ACTIONS(1581),\n    [anon_sym_float2x2] = ACTIONS(1581),\n    [anon_sym_float4x4] = ACTIONS(1581),\n    [anon_sym_int2] = ACTIONS(1581),\n    [anon_sym_int3] = ACTIONS(1581),\n    [anon_sym_int4] = ACTIONS(1581),\n    [anon_sym_int3x3] = ACTIONS(1581),\n    [anon_sym_int2x2] = ACTIONS(1581),\n    [anon_sym_int4x4] = ACTIONS(1581),\n    [anon_sym_boolean] = ACTIONS(1581),\n    [anon_sym_string] = ACTIONS(1581),\n    [anon_sym_symbol] = ACTIONS(1581),\n    [anon_sym_workgroup] = ACTIONS(1587),\n    [anon_sym_get] = ACTIONS(1581),\n    [anon_sym_set] = ACTIONS(1581),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [207] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1589),\n    [anon_sym_pub] = ACTIONS(1591),\n    [anon_sym_export] = ACTIONS(1591),\n    [anon_sym_type] = ACTIONS(1591),\n    [anon_sym_namespace] = ACTIONS(1593),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1591),\n    [anon_sym_async] = ACTIONS(1595),\n    [anon_sym_fn] = ACTIONS(1591),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1591),\n    [anon_sym_declare] = ACTIONS(1591),\n    [anon_sym_public] = ACTIONS(1591),\n    [anon_sym_private] = ACTIONS(1591),\n    [anon_sym_protected] = ACTIONS(1591),\n    [anon_sym_override] = ACTIONS(1591),\n    [anon_sym_readonly] = ACTIONS(1591),\n    [anon_sym_module] = ACTIONS(1591),\n    [anon_sym_any] = ACTIONS(1591),\n    [anon_sym_number] = ACTIONS(1591),\n    [anon_sym_int] = ACTIONS(1591),\n    [anon_sym_float] = ACTIONS(1591),\n    [anon_sym_float2] = ACTIONS(1591),\n    [anon_sym_float3] = ACTIONS(1591),\n    [anon_sym_float4] = ACTIONS(1591),\n    [anon_sym_float3x3] = ACTIONS(1591),\n    [anon_sym_float2x2] = ACTIONS(1591),\n    [anon_sym_float4x4] = ACTIONS(1591),\n    [anon_sym_int2] = ACTIONS(1591),\n    [anon_sym_int3] = ACTIONS(1591),\n    [anon_sym_int4] = ACTIONS(1591),\n    [anon_sym_int3x3] = ACTIONS(1591),\n    [anon_sym_int2x2] = ACTIONS(1591),\n    [anon_sym_int4x4] = ACTIONS(1591),\n    [anon_sym_boolean] = ACTIONS(1591),\n    [anon_sym_string] = ACTIONS(1591),\n    [anon_sym_symbol] = ACTIONS(1591),\n    [anon_sym_workgroup] = ACTIONS(1597),\n    [anon_sym_get] = ACTIONS(1591),\n    [anon_sym_set] = ACTIONS(1591),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [208] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1943),\n    [sym_primary_expression] = STATE(1343),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1060),\n    [sym_subscript_expression] = STATE(1060),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1060),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1599),\n    [anon_sym_pub] = ACTIONS(1601),\n    [anon_sym_export] = ACTIONS(1601),\n    [anon_sym_type] = ACTIONS(1601),\n    [anon_sym_namespace] = ACTIONS(1603),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(1601),\n    [anon_sym_async] = ACTIONS(1607),\n    [anon_sym_fn] = ACTIONS(1601),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1609),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1611),\n    [anon_sym_static] = ACTIONS(1601),\n    [anon_sym_declare] = ACTIONS(1601),\n    [anon_sym_public] = ACTIONS(1601),\n    [anon_sym_private] = ACTIONS(1601),\n    [anon_sym_protected] = ACTIONS(1601),\n    [anon_sym_override] = ACTIONS(1601),\n    [anon_sym_readonly] = ACTIONS(1601),\n    [anon_sym_module] = ACTIONS(1601),\n    [anon_sym_any] = ACTIONS(1601),\n    [anon_sym_number] = ACTIONS(1601),\n    [anon_sym_int] = ACTIONS(1601),\n    [anon_sym_float] = ACTIONS(1601),\n    [anon_sym_float2] = ACTIONS(1601),\n    [anon_sym_float3] = ACTIONS(1601),\n    [anon_sym_float4] = ACTIONS(1601),\n    [anon_sym_float3x3] = ACTIONS(1601),\n    [anon_sym_float2x2] = ACTIONS(1601),\n    [anon_sym_float4x4] = ACTIONS(1601),\n    [anon_sym_int2] = ACTIONS(1601),\n    [anon_sym_int3] = ACTIONS(1601),\n    [anon_sym_int4] = ACTIONS(1601),\n    [anon_sym_int3x3] = ACTIONS(1601),\n    [anon_sym_int2x2] = ACTIONS(1601),\n    [anon_sym_int4x4] = ACTIONS(1601),\n    [anon_sym_boolean] = ACTIONS(1601),\n    [anon_sym_string] = ACTIONS(1601),\n    [anon_sym_symbol] = ACTIONS(1601),\n    [anon_sym_workgroup] = ACTIONS(1613),\n    [anon_sym_get] = ACTIONS(1601),\n    [anon_sym_set] = ACTIONS(1601),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [209] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1615),\n    [anon_sym_pub] = ACTIONS(1617),\n    [anon_sym_export] = ACTIONS(1617),\n    [anon_sym_type] = ACTIONS(1617),\n    [anon_sym_namespace] = ACTIONS(1619),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1617),\n    [anon_sym_async] = ACTIONS(1621),\n    [anon_sym_fn] = ACTIONS(1617),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1617),\n    [anon_sym_declare] = ACTIONS(1617),\n    [anon_sym_public] = ACTIONS(1617),\n    [anon_sym_private] = ACTIONS(1617),\n    [anon_sym_protected] = ACTIONS(1617),\n    [anon_sym_override] = ACTIONS(1617),\n    [anon_sym_readonly] = ACTIONS(1617),\n    [anon_sym_module] = ACTIONS(1617),\n    [anon_sym_any] = ACTIONS(1617),\n    [anon_sym_number] = ACTIONS(1617),\n    [anon_sym_int] = ACTIONS(1617),\n    [anon_sym_float] = ACTIONS(1617),\n    [anon_sym_float2] = ACTIONS(1617),\n    [anon_sym_float3] = ACTIONS(1617),\n    [anon_sym_float4] = ACTIONS(1617),\n    [anon_sym_float3x3] = ACTIONS(1617),\n    [anon_sym_float2x2] = ACTIONS(1617),\n    [anon_sym_float4x4] = ACTIONS(1617),\n    [anon_sym_int2] = ACTIONS(1617),\n    [anon_sym_int3] = ACTIONS(1617),\n    [anon_sym_int4] = ACTIONS(1617),\n    [anon_sym_int3x3] = ACTIONS(1617),\n    [anon_sym_int2x2] = ACTIONS(1617),\n    [anon_sym_int4x4] = ACTIONS(1617),\n    [anon_sym_boolean] = ACTIONS(1617),\n    [anon_sym_string] = ACTIONS(1617),\n    [anon_sym_symbol] = ACTIONS(1617),\n    [anon_sym_workgroup] = ACTIONS(1623),\n    [anon_sym_get] = ACTIONS(1617),\n    [anon_sym_set] = ACTIONS(1617),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [210] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1822),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_mapped_type_clause] = STATE(3483),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1625),\n    [anon_sym_pub] = ACTIONS(1627),\n    [anon_sym_export] = ACTIONS(1627),\n    [anon_sym_type] = ACTIONS(1627),\n    [anon_sym_namespace] = ACTIONS(1629),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1627),\n    [anon_sym_async] = ACTIONS(1631),\n    [anon_sym_fn] = ACTIONS(1627),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1627),\n    [anon_sym_declare] = ACTIONS(1627),\n    [anon_sym_public] = ACTIONS(1627),\n    [anon_sym_private] = ACTIONS(1627),\n    [anon_sym_protected] = ACTIONS(1627),\n    [anon_sym_override] = ACTIONS(1627),\n    [anon_sym_readonly] = ACTIONS(1627),\n    [anon_sym_module] = ACTIONS(1627),\n    [anon_sym_any] = ACTIONS(1627),\n    [anon_sym_number] = ACTIONS(1627),\n    [anon_sym_int] = ACTIONS(1627),\n    [anon_sym_float] = ACTIONS(1627),\n    [anon_sym_float2] = ACTIONS(1627),\n    [anon_sym_float3] = ACTIONS(1627),\n    [anon_sym_float4] = ACTIONS(1627),\n    [anon_sym_float3x3] = ACTIONS(1627),\n    [anon_sym_float2x2] = ACTIONS(1627),\n    [anon_sym_float4x4] = ACTIONS(1627),\n    [anon_sym_int2] = ACTIONS(1627),\n    [anon_sym_int3] = ACTIONS(1627),\n    [anon_sym_int4] = ACTIONS(1627),\n    [anon_sym_int3x3] = ACTIONS(1627),\n    [anon_sym_int2x2] = ACTIONS(1627),\n    [anon_sym_int4x4] = ACTIONS(1627),\n    [anon_sym_boolean] = ACTIONS(1627),\n    [anon_sym_string] = ACTIONS(1627),\n    [anon_sym_symbol] = ACTIONS(1627),\n    [anon_sym_workgroup] = ACTIONS(1633),\n    [anon_sym_get] = ACTIONS(1627),\n    [anon_sym_set] = ACTIONS(1627),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [211] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1880),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1675),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [212] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1589),\n    [anon_sym_pub] = ACTIONS(1591),\n    [anon_sym_export] = ACTIONS(1591),\n    [anon_sym_type] = ACTIONS(1591),\n    [anon_sym_namespace] = ACTIONS(1593),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1591),\n    [anon_sym_async] = ACTIONS(1595),\n    [anon_sym_fn] = ACTIONS(1591),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1591),\n    [anon_sym_declare] = ACTIONS(1591),\n    [anon_sym_public] = ACTIONS(1591),\n    [anon_sym_private] = ACTIONS(1591),\n    [anon_sym_protected] = ACTIONS(1591),\n    [anon_sym_override] = ACTIONS(1591),\n    [anon_sym_readonly] = ACTIONS(1591),\n    [anon_sym_module] = ACTIONS(1591),\n    [anon_sym_any] = ACTIONS(1591),\n    [anon_sym_number] = ACTIONS(1591),\n    [anon_sym_int] = ACTIONS(1591),\n    [anon_sym_float] = ACTIONS(1591),\n    [anon_sym_float2] = ACTIONS(1591),\n    [anon_sym_float3] = ACTIONS(1591),\n    [anon_sym_float4] = ACTIONS(1591),\n    [anon_sym_float3x3] = ACTIONS(1591),\n    [anon_sym_float2x2] = ACTIONS(1591),\n    [anon_sym_float4x4] = ACTIONS(1591),\n    [anon_sym_int2] = ACTIONS(1591),\n    [anon_sym_int3] = ACTIONS(1591),\n    [anon_sym_int4] = ACTIONS(1591),\n    [anon_sym_int3x3] = ACTIONS(1591),\n    [anon_sym_int2x2] = ACTIONS(1591),\n    [anon_sym_int4x4] = ACTIONS(1591),\n    [anon_sym_boolean] = ACTIONS(1591),\n    [anon_sym_string] = ACTIONS(1591),\n    [anon_sym_symbol] = ACTIONS(1591),\n    [anon_sym_workgroup] = ACTIONS(1597),\n    [anon_sym_get] = ACTIONS(1591),\n    [anon_sym_set] = ACTIONS(1591),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [213] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1338),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3678),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [214] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1841),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1696),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [215] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1778),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1306),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [216] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1775),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1930),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [217] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1721),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3670),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [218] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1775),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1317),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [219] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1778),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1731),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [220] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1777),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1646),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [221] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [222] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1775),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1638),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [223] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1603),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1849),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [224] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1880),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1347),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [225] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1943),\n    [sym_primary_expression] = STATE(1343),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1060),\n    [sym_subscript_expression] = STATE(1060),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1060),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1599),\n    [anon_sym_pub] = ACTIONS(1601),\n    [anon_sym_export] = ACTIONS(1601),\n    [anon_sym_type] = ACTIONS(1601),\n    [anon_sym_namespace] = ACTIONS(1603),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(1601),\n    [anon_sym_async] = ACTIONS(1607),\n    [anon_sym_fn] = ACTIONS(1601),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1609),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1611),\n    [anon_sym_static] = ACTIONS(1601),\n    [anon_sym_declare] = ACTIONS(1601),\n    [anon_sym_public] = ACTIONS(1601),\n    [anon_sym_private] = ACTIONS(1601),\n    [anon_sym_protected] = ACTIONS(1601),\n    [anon_sym_override] = ACTIONS(1601),\n    [anon_sym_readonly] = ACTIONS(1601),\n    [anon_sym_module] = ACTIONS(1601),\n    [anon_sym_any] = ACTIONS(1601),\n    [anon_sym_number] = ACTIONS(1601),\n    [anon_sym_int] = ACTIONS(1601),\n    [anon_sym_float] = ACTIONS(1601),\n    [anon_sym_float2] = ACTIONS(1601),\n    [anon_sym_float3] = ACTIONS(1601),\n    [anon_sym_float4] = ACTIONS(1601),\n    [anon_sym_float3x3] = ACTIONS(1601),\n    [anon_sym_float2x2] = ACTIONS(1601),\n    [anon_sym_float4x4] = ACTIONS(1601),\n    [anon_sym_int2] = ACTIONS(1601),\n    [anon_sym_int3] = ACTIONS(1601),\n    [anon_sym_int4] = ACTIONS(1601),\n    [anon_sym_int3x3] = ACTIONS(1601),\n    [anon_sym_int2x2] = ACTIONS(1601),\n    [anon_sym_int4x4] = ACTIONS(1601),\n    [anon_sym_boolean] = ACTIONS(1601),\n    [anon_sym_string] = ACTIONS(1601),\n    [anon_sym_symbol] = ACTIONS(1601),\n    [anon_sym_workgroup] = ACTIONS(1613),\n    [anon_sym_get] = ACTIONS(1601),\n    [anon_sym_set] = ACTIONS(1601),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [226] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1943),\n    [sym_primary_expression] = STATE(1343),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1060),\n    [sym_subscript_expression] = STATE(1060),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1060),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1637),\n    [anon_sym_pub] = ACTIONS(1639),\n    [anon_sym_export] = ACTIONS(1639),\n    [anon_sym_type] = ACTIONS(1639),\n    [anon_sym_namespace] = ACTIONS(1641),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(1639),\n    [anon_sym_async] = ACTIONS(1643),\n    [anon_sym_fn] = ACTIONS(1639),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1609),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1611),\n    [anon_sym_static] = ACTIONS(1639),\n    [anon_sym_declare] = ACTIONS(1639),\n    [anon_sym_public] = ACTIONS(1639),\n    [anon_sym_private] = ACTIONS(1639),\n    [anon_sym_protected] = ACTIONS(1639),\n    [anon_sym_override] = ACTIONS(1639),\n    [anon_sym_readonly] = ACTIONS(1639),\n    [anon_sym_module] = ACTIONS(1639),\n    [anon_sym_any] = ACTIONS(1639),\n    [anon_sym_number] = ACTIONS(1639),\n    [anon_sym_int] = ACTIONS(1639),\n    [anon_sym_float] = ACTIONS(1639),\n    [anon_sym_float2] = ACTIONS(1639),\n    [anon_sym_float3] = ACTIONS(1639),\n    [anon_sym_float4] = ACTIONS(1639),\n    [anon_sym_float3x3] = ACTIONS(1639),\n    [anon_sym_float2x2] = ACTIONS(1639),\n    [anon_sym_float4x4] = ACTIONS(1639),\n    [anon_sym_int2] = ACTIONS(1639),\n    [anon_sym_int3] = ACTIONS(1639),\n    [anon_sym_int4] = ACTIONS(1639),\n    [anon_sym_int3x3] = ACTIONS(1639),\n    [anon_sym_int2x2] = ACTIONS(1639),\n    [anon_sym_int4x4] = ACTIONS(1639),\n    [anon_sym_boolean] = ACTIONS(1639),\n    [anon_sym_string] = ACTIONS(1639),\n    [anon_sym_symbol] = ACTIONS(1639),\n    [anon_sym_workgroup] = ACTIONS(1645),\n    [anon_sym_get] = ACTIONS(1639),\n    [anon_sym_set] = ACTIONS(1639),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [227] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1943),\n    [sym_primary_expression] = STATE(1343),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1060),\n    [sym_subscript_expression] = STATE(1060),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1060),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1647),\n    [anon_sym_pub] = ACTIONS(1649),\n    [anon_sym_export] = ACTIONS(1649),\n    [anon_sym_type] = ACTIONS(1649),\n    [anon_sym_namespace] = ACTIONS(1651),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(1649),\n    [anon_sym_async] = ACTIONS(1653),\n    [anon_sym_fn] = ACTIONS(1649),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1609),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1611),\n    [anon_sym_static] = ACTIONS(1649),\n    [anon_sym_declare] = ACTIONS(1649),\n    [anon_sym_public] = ACTIONS(1649),\n    [anon_sym_private] = ACTIONS(1649),\n    [anon_sym_protected] = ACTIONS(1649),\n    [anon_sym_override] = ACTIONS(1649),\n    [anon_sym_readonly] = ACTIONS(1649),\n    [anon_sym_module] = ACTIONS(1649),\n    [anon_sym_any] = ACTIONS(1649),\n    [anon_sym_number] = ACTIONS(1649),\n    [anon_sym_int] = ACTIONS(1649),\n    [anon_sym_float] = ACTIONS(1649),\n    [anon_sym_float2] = ACTIONS(1649),\n    [anon_sym_float3] = ACTIONS(1649),\n    [anon_sym_float4] = ACTIONS(1649),\n    [anon_sym_float3x3] = ACTIONS(1649),\n    [anon_sym_float2x2] = ACTIONS(1649),\n    [anon_sym_float4x4] = ACTIONS(1649),\n    [anon_sym_int2] = ACTIONS(1649),\n    [anon_sym_int3] = ACTIONS(1649),\n    [anon_sym_int4] = ACTIONS(1649),\n    [anon_sym_int3x3] = ACTIONS(1649),\n    [anon_sym_int2x2] = ACTIONS(1649),\n    [anon_sym_int4x4] = ACTIONS(1649),\n    [anon_sym_boolean] = ACTIONS(1649),\n    [anon_sym_string] = ACTIONS(1649),\n    [anon_sym_symbol] = ACTIONS(1649),\n    [anon_sym_workgroup] = ACTIONS(1655),\n    [anon_sym_get] = ACTIONS(1649),\n    [anon_sym_set] = ACTIONS(1649),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [228] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1719),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1626),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [229] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1684),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1862),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [230] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1567),\n    [anon_sym_pub] = ACTIONS(1569),\n    [anon_sym_export] = ACTIONS(1569),\n    [anon_sym_type] = ACTIONS(1569),\n    [anon_sym_namespace] = ACTIONS(1571),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1569),\n    [anon_sym_async] = ACTIONS(1575),\n    [anon_sym_fn] = ACTIONS(1569),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1569),\n    [anon_sym_declare] = ACTIONS(1569),\n    [anon_sym_public] = ACTIONS(1569),\n    [anon_sym_private] = ACTIONS(1569),\n    [anon_sym_protected] = ACTIONS(1569),\n    [anon_sym_override] = ACTIONS(1569),\n    [anon_sym_readonly] = ACTIONS(1569),\n    [anon_sym_module] = ACTIONS(1569),\n    [anon_sym_any] = ACTIONS(1569),\n    [anon_sym_number] = ACTIONS(1569),\n    [anon_sym_int] = ACTIONS(1569),\n    [anon_sym_float] = ACTIONS(1569),\n    [anon_sym_float2] = ACTIONS(1569),\n    [anon_sym_float3] = ACTIONS(1569),\n    [anon_sym_float4] = ACTIONS(1569),\n    [anon_sym_float3x3] = ACTIONS(1569),\n    [anon_sym_float2x2] = ACTIONS(1569),\n    [anon_sym_float4x4] = ACTIONS(1569),\n    [anon_sym_int2] = ACTIONS(1569),\n    [anon_sym_int3] = ACTIONS(1569),\n    [anon_sym_int4] = ACTIONS(1569),\n    [anon_sym_int3x3] = ACTIONS(1569),\n    [anon_sym_int2x2] = ACTIONS(1569),\n    [anon_sym_int4x4] = ACTIONS(1569),\n    [anon_sym_boolean] = ACTIONS(1569),\n    [anon_sym_string] = ACTIONS(1569),\n    [anon_sym_symbol] = ACTIONS(1569),\n    [anon_sym_workgroup] = ACTIONS(1577),\n    [anon_sym_get] = ACTIONS(1569),\n    [anon_sym_set] = ACTIONS(1569),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [231] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1641),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3640),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [232] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1904),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1691),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [233] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1693),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3642),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [234] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1943),\n    [sym_primary_expression] = STATE(1343),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1060),\n    [sym_subscript_expression] = STATE(1060),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1060),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1647),\n    [anon_sym_pub] = ACTIONS(1649),\n    [anon_sym_export] = ACTIONS(1649),\n    [anon_sym_type] = ACTIONS(1649),\n    [anon_sym_namespace] = ACTIONS(1651),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(1649),\n    [anon_sym_async] = ACTIONS(1653),\n    [anon_sym_fn] = ACTIONS(1649),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1609),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1611),\n    [anon_sym_static] = ACTIONS(1649),\n    [anon_sym_declare] = ACTIONS(1649),\n    [anon_sym_public] = ACTIONS(1649),\n    [anon_sym_private] = ACTIONS(1649),\n    [anon_sym_protected] = ACTIONS(1649),\n    [anon_sym_override] = ACTIONS(1649),\n    [anon_sym_readonly] = ACTIONS(1649),\n    [anon_sym_module] = ACTIONS(1649),\n    [anon_sym_any] = ACTIONS(1649),\n    [anon_sym_number] = ACTIONS(1649),\n    [anon_sym_int] = ACTIONS(1649),\n    [anon_sym_float] = ACTIONS(1649),\n    [anon_sym_float2] = ACTIONS(1649),\n    [anon_sym_float3] = ACTIONS(1649),\n    [anon_sym_float4] = ACTIONS(1649),\n    [anon_sym_float3x3] = ACTIONS(1649),\n    [anon_sym_float2x2] = ACTIONS(1649),\n    [anon_sym_float4x4] = ACTIONS(1649),\n    [anon_sym_int2] = ACTIONS(1649),\n    [anon_sym_int3] = ACTIONS(1649),\n    [anon_sym_int4] = ACTIONS(1649),\n    [anon_sym_int3x3] = ACTIONS(1649),\n    [anon_sym_int2x2] = ACTIONS(1649),\n    [anon_sym_int4x4] = ACTIONS(1649),\n    [anon_sym_boolean] = ACTIONS(1649),\n    [anon_sym_string] = ACTIONS(1649),\n    [anon_sym_symbol] = ACTIONS(1649),\n    [anon_sym_workgroup] = ACTIONS(1655),\n    [anon_sym_get] = ACTIONS(1649),\n    [anon_sym_set] = ACTIONS(1649),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [235] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1719),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1324),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [236] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1567),\n    [anon_sym_pub] = ACTIONS(1569),\n    [anon_sym_export] = ACTIONS(1569),\n    [anon_sym_type] = ACTIONS(1569),\n    [anon_sym_namespace] = ACTIONS(1571),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1569),\n    [anon_sym_async] = ACTIONS(1575),\n    [anon_sym_fn] = ACTIONS(1569),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1569),\n    [anon_sym_declare] = ACTIONS(1569),\n    [anon_sym_public] = ACTIONS(1569),\n    [anon_sym_private] = ACTIONS(1569),\n    [anon_sym_protected] = ACTIONS(1569),\n    [anon_sym_override] = ACTIONS(1569),\n    [anon_sym_readonly] = ACTIONS(1569),\n    [anon_sym_module] = ACTIONS(1569),\n    [anon_sym_any] = ACTIONS(1569),\n    [anon_sym_number] = ACTIONS(1569),\n    [anon_sym_int] = ACTIONS(1569),\n    [anon_sym_float] = ACTIONS(1569),\n    [anon_sym_float2] = ACTIONS(1569),\n    [anon_sym_float3] = ACTIONS(1569),\n    [anon_sym_float4] = ACTIONS(1569),\n    [anon_sym_float3x3] = ACTIONS(1569),\n    [anon_sym_float2x2] = ACTIONS(1569),\n    [anon_sym_float4x4] = ACTIONS(1569),\n    [anon_sym_int2] = ACTIONS(1569),\n    [anon_sym_int3] = ACTIONS(1569),\n    [anon_sym_int4] = ACTIONS(1569),\n    [anon_sym_int3x3] = ACTIONS(1569),\n    [anon_sym_int2x2] = ACTIONS(1569),\n    [anon_sym_int4x4] = ACTIONS(1569),\n    [anon_sym_boolean] = ACTIONS(1569),\n    [anon_sym_string] = ACTIONS(1569),\n    [anon_sym_symbol] = ACTIONS(1569),\n    [anon_sym_workgroup] = ACTIONS(1577),\n    [anon_sym_get] = ACTIONS(1569),\n    [anon_sym_set] = ACTIONS(1569),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [237] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1316),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(2862),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [238] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1843),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1788),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [239] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1571),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3625),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [240] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1863),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1787),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [241] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [242] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1684),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1590),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [243] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1684),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1263),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [244] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1784),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3484),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [245] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [246] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1670),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3594),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [247] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1603),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1955),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [248] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1684),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1964),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [249] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1603),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1583),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [250] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1611),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3650),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [251] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1760),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3460),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [252] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1719),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1942),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [253] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1635),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3464),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [254] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1943),\n    [sym_primary_expression] = STATE(1343),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1060),\n    [sym_subscript_expression] = STATE(1060),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1060),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1637),\n    [anon_sym_pub] = ACTIONS(1639),\n    [anon_sym_export] = ACTIONS(1639),\n    [anon_sym_type] = ACTIONS(1639),\n    [anon_sym_namespace] = ACTIONS(1641),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_DOT] = ACTIONS(1605),\n    [anon_sym_struct] = ACTIONS(1639),\n    [anon_sym_async] = ACTIONS(1643),\n    [anon_sym_fn] = ACTIONS(1639),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1609),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1611),\n    [anon_sym_static] = ACTIONS(1639),\n    [anon_sym_declare] = ACTIONS(1639),\n    [anon_sym_public] = ACTIONS(1639),\n    [anon_sym_private] = ACTIONS(1639),\n    [anon_sym_protected] = ACTIONS(1639),\n    [anon_sym_override] = ACTIONS(1639),\n    [anon_sym_readonly] = ACTIONS(1639),\n    [anon_sym_module] = ACTIONS(1639),\n    [anon_sym_any] = ACTIONS(1639),\n    [anon_sym_number] = ACTIONS(1639),\n    [anon_sym_int] = ACTIONS(1639),\n    [anon_sym_float] = ACTIONS(1639),\n    [anon_sym_float2] = ACTIONS(1639),\n    [anon_sym_float3] = ACTIONS(1639),\n    [anon_sym_float4] = ACTIONS(1639),\n    [anon_sym_float3x3] = ACTIONS(1639),\n    [anon_sym_float2x2] = ACTIONS(1639),\n    [anon_sym_float4x4] = ACTIONS(1639),\n    [anon_sym_int2] = ACTIONS(1639),\n    [anon_sym_int3] = ACTIONS(1639),\n    [anon_sym_int4] = ACTIONS(1639),\n    [anon_sym_int3x3] = ACTIONS(1639),\n    [anon_sym_int2x2] = ACTIONS(1639),\n    [anon_sym_int4x4] = ACTIONS(1639),\n    [anon_sym_boolean] = ACTIONS(1639),\n    [anon_sym_string] = ACTIONS(1639),\n    [anon_sym_symbol] = ACTIONS(1639),\n    [anon_sym_workgroup] = ACTIONS(1645),\n    [anon_sym_get] = ACTIONS(1639),\n    [anon_sym_set] = ACTIONS(1639),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [255] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1841),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1383),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [256] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1843),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1368),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [257] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1775),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1944),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [258] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1777),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1949),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [259] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1547),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3307),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [260] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1778),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1953),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [261] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1875),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1351),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [262] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1863),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1352),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [263] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1843),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1354),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [264] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1863),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1364),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [265] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1286),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2617),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3350),\n    [sym_identifier] = ACTIONS(1615),\n    [anon_sym_pub] = ACTIONS(1617),\n    [anon_sym_export] = ACTIONS(1617),\n    [anon_sym_type] = ACTIONS(1617),\n    [anon_sym_namespace] = ACTIONS(1619),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_DOT] = ACTIONS(1573),\n    [anon_sym_struct] = ACTIONS(1617),\n    [anon_sym_async] = ACTIONS(1621),\n    [anon_sym_fn] = ACTIONS(1617),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(1617),\n    [anon_sym_declare] = ACTIONS(1617),\n    [anon_sym_public] = ACTIONS(1617),\n    [anon_sym_private] = ACTIONS(1617),\n    [anon_sym_protected] = ACTIONS(1617),\n    [anon_sym_override] = ACTIONS(1617),\n    [anon_sym_readonly] = ACTIONS(1617),\n    [anon_sym_module] = ACTIONS(1617),\n    [anon_sym_any] = ACTIONS(1617),\n    [anon_sym_number] = ACTIONS(1617),\n    [anon_sym_int] = ACTIONS(1617),\n    [anon_sym_float] = ACTIONS(1617),\n    [anon_sym_float2] = ACTIONS(1617),\n    [anon_sym_float3] = ACTIONS(1617),\n    [anon_sym_float4] = ACTIONS(1617),\n    [anon_sym_float3x3] = ACTIONS(1617),\n    [anon_sym_float2x2] = ACTIONS(1617),\n    [anon_sym_float4x4] = ACTIONS(1617),\n    [anon_sym_int2] = ACTIONS(1617),\n    [anon_sym_int3] = ACTIONS(1617),\n    [anon_sym_int4] = ACTIONS(1617),\n    [anon_sym_int3x3] = ACTIONS(1617),\n    [anon_sym_int2x2] = ACTIONS(1617),\n    [anon_sym_int4x4] = ACTIONS(1617),\n    [anon_sym_boolean] = ACTIONS(1617),\n    [anon_sym_string] = ACTIONS(1617),\n    [anon_sym_symbol] = ACTIONS(1617),\n    [anon_sym_workgroup] = ACTIONS(1623),\n    [anon_sym_get] = ACTIONS(1617),\n    [anon_sym_set] = ACTIONS(1617),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [266] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1904),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1356),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [267] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1471),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_sequence_expression] = STATE(3221),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [268] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1719),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1938),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [269] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1598),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3574),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [270] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1875),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1353),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [271] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1904),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1387),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [272] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1841),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1373),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [273] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1778),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1909),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [274] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1603),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1294),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1563),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [275] = {\n    [sym_import] = STATE(1847),\n    [sym_statement_block] = STATE(1880),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1378),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1565),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [276] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1624),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3390),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [277] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1377),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3664),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [278] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1627),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3436),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [279] = {\n    [sym_import] = STATE(1720),\n    [sym_statement_block] = STATE(1777),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1929),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1635),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [280] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1633),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_sequence_expression] = STATE(3434),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [281] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1389),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [282] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1601),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [283] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1334),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(1657),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [284] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1332),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [285] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1358),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [286] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1359),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [287] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1333),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [288] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1391),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [289] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1395),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [290] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1404),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [291] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1399),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [292] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1409),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [293] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1398),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [294] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1405),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [295] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1406),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [296] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1403),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [297] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1360),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [298] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1894),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1659),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [299] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1361),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [300] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1362),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [301] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1363),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [302] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1365),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [303] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1366),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [304] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1367),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [305] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1369),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [306] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1680),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [307] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1410),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [308] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1371),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [309] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1872),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [310] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1889),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [311] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1355),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [312] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1374),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [313] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1883),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [314] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1357),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [315] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1850),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [316] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1375),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [317] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1297),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [318] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1381),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [319] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1661),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [320] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1846),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [321] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1890),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [322] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1844),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [323] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1379),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [324] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1380),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [325] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1825),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [326] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1607),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1659),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [327] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1663),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [328] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1573),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [329] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1958),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [330] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [331] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1892),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [332] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1502),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [333] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1349),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [334] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1897),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [335] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1345),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [336] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1385),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [337] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1408),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [338] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1935),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [339] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1888),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [340] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1346),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [341] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1401),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [342] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1981),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [343] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1903),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [344] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1350),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [345] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1319),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [346] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1659),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [347] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1581),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [348] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1344),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [349] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1905),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [350] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1565),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(1657),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [351] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1910),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [352] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1858),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [353] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1911),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [354] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1820),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [355] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1983),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [356] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1382),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [357] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1597),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [358] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1291),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [359] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1915),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [360] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1287),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [361] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1941),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [362] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1281),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [363] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1948),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [364] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1936),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [365] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1982),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [366] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1370),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [367] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1980),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [368] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1978),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [369] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1975),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [370] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1289),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [371] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1974),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [372] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1973),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [373] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1339),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [374] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1971),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [375] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1970),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [376] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1969),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [377] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1290),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [378] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1968),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [379] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1976),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2485),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2485),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1053),\n    [sym_subscript_expression] = STATE(1053),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2485),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1053),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1665),\n    [anon_sym_pub] = ACTIONS(1667),\n    [anon_sym_export] = ACTIONS(1667),\n    [anon_sym_type] = ACTIONS(1667),\n    [anon_sym_namespace] = ACTIONS(1669),\n    [anon_sym_LBRACE] = ACTIONS(583),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1221),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1667),\n    [anon_sym_async] = ACTIONS(1671),\n    [anon_sym_fn] = ACTIONS(1667),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1673),\n    [anon_sym_static] = ACTIONS(1667),\n    [anon_sym_declare] = ACTIONS(1667),\n    [anon_sym_public] = ACTIONS(1667),\n    [anon_sym_private] = ACTIONS(1667),\n    [anon_sym_protected] = ACTIONS(1667),\n    [anon_sym_override] = ACTIONS(1667),\n    [anon_sym_readonly] = ACTIONS(1667),\n    [anon_sym_module] = ACTIONS(1667),\n    [anon_sym_any] = ACTIONS(1667),\n    [anon_sym_number] = ACTIONS(1667),\n    [anon_sym_int] = ACTIONS(1667),\n    [anon_sym_float] = ACTIONS(1667),\n    [anon_sym_float2] = ACTIONS(1667),\n    [anon_sym_float3] = ACTIONS(1667),\n    [anon_sym_float4] = ACTIONS(1667),\n    [anon_sym_float3x3] = ACTIONS(1667),\n    [anon_sym_float2x2] = ACTIONS(1667),\n    [anon_sym_float4x4] = ACTIONS(1667),\n    [anon_sym_int2] = ACTIONS(1667),\n    [anon_sym_int3] = ACTIONS(1667),\n    [anon_sym_int4] = ACTIONS(1667),\n    [anon_sym_int3x3] = ACTIONS(1667),\n    [anon_sym_int2x2] = ACTIONS(1667),\n    [anon_sym_int4x4] = ACTIONS(1667),\n    [anon_sym_boolean] = ACTIONS(1667),\n    [anon_sym_string] = ACTIONS(1667),\n    [anon_sym_symbol] = ACTIONS(1667),\n    [anon_sym_workgroup] = ACTIONS(1675),\n    [anon_sym_get] = ACTIONS(1667),\n    [anon_sym_set] = ACTIONS(1667),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [380] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1582),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [381] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1961),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [382] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1956),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [383] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1329),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [384] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1950),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1677),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [385] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1937),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [386] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1295),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [387] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1348),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [388] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1954),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [389] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1951),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [390] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2099),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1966),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3537),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3537),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3441),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1048),\n    [sym_subscript_expression] = STATE(1048),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2159),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3537),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1048),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(389),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1165),\n    [anon_sym_pub] = ACTIONS(879),\n    [anon_sym_export] = ACTIONS(879),\n    [anon_sym_type] = ACTIONS(879),\n    [anon_sym_namespace] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(178),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(174),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(142),\n    [anon_sym_yield] = ACTIONS(147),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(879),\n    [anon_sym_async] = ACTIONS(889),\n    [anon_sym_fn] = ACTIONS(879),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(594),\n    [anon_sym_PLUS] = ACTIONS(178),\n    [anon_sym_DASH] = ACTIONS(178),\n    [anon_sym_TILDE] = ACTIONS(174),\n    [anon_sym_void] = ACTIONS(178),\n    [anon_sym_delete] = ACTIONS(178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(725),\n    [anon_sym_DASH_DASH] = ACTIONS(725),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1169),\n    [anon_sym_static] = ACTIONS(879),\n    [anon_sym_declare] = ACTIONS(879),\n    [anon_sym_public] = ACTIONS(879),\n    [anon_sym_private] = ACTIONS(879),\n    [anon_sym_protected] = ACTIONS(879),\n    [anon_sym_override] = ACTIONS(879),\n    [anon_sym_readonly] = ACTIONS(879),\n    [anon_sym_module] = ACTIONS(879),\n    [anon_sym_any] = ACTIONS(879),\n    [anon_sym_number] = ACTIONS(879),\n    [anon_sym_int] = ACTIONS(879),\n    [anon_sym_float] = ACTIONS(879),\n    [anon_sym_float2] = ACTIONS(879),\n    [anon_sym_float3] = ACTIONS(879),\n    [anon_sym_float4] = ACTIONS(879),\n    [anon_sym_float3x3] = ACTIONS(879),\n    [anon_sym_float2x2] = ACTIONS(879),\n    [anon_sym_float4x4] = ACTIONS(879),\n    [anon_sym_int2] = ACTIONS(879),\n    [anon_sym_int3] = ACTIONS(879),\n    [anon_sym_int4] = ACTIONS(879),\n    [anon_sym_int3x3] = ACTIONS(879),\n    [anon_sym_int2x2] = ACTIONS(879),\n    [anon_sym_int4x4] = ACTIONS(879),\n    [anon_sym_boolean] = ACTIONS(879),\n    [anon_sym_string] = ACTIONS(879),\n    [anon_sym_symbol] = ACTIONS(879),\n    [anon_sym_workgroup] = ACTIONS(907),\n    [anon_sym_get] = ACTIONS(879),\n    [anon_sym_set] = ACTIONS(879),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [391] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1298),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [392] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1299),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [393] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1764),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [394] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1673),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [395] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1682),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [396] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [397] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1586),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [398] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1268),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [399] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1588),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [400] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1591),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [401] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1599),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [402] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1600),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [403] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1557),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [404] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1690),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [405] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [406] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1852),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [407] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1663),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [408] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1305),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [409] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1602),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [410] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1605),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [411] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1606),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [412] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1565),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [413] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1674),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [414] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1812),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [415] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1822),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [416] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1815),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [417] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1607),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [418] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1613),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [419] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1906),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [420] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1833),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [421] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1307),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [422] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1773),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [423] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1772),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [424] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1677),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [425] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1313),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [426] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1763),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [427] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1560),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [428] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1615),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [429] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1758),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [430] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1334),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [431] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1757),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [432] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1619),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [433] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1620),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [434] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1894),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [435] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1325),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [436] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1882),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [437] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1685),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [438] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1885),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [439] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1264),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [440] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1826),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [441] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1262),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [442] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1348),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(2738),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(2738),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1087),\n    [sym_subscript_expression] = STATE(1087),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(2738),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1087),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1679),\n    [anon_sym_pub] = ACTIONS(911),\n    [anon_sym_export] = ACTIONS(911),\n    [anon_sym_type] = ACTIONS(911),\n    [anon_sym_namespace] = ACTIONS(913),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(911),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_fn] = ACTIONS(911),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1681),\n    [anon_sym_static] = ACTIONS(911),\n    [anon_sym_declare] = ACTIONS(911),\n    [anon_sym_public] = ACTIONS(911),\n    [anon_sym_private] = ACTIONS(911),\n    [anon_sym_protected] = ACTIONS(911),\n    [anon_sym_override] = ACTIONS(911),\n    [anon_sym_readonly] = ACTIONS(911),\n    [anon_sym_module] = ACTIONS(911),\n    [anon_sym_any] = ACTIONS(911),\n    [anon_sym_number] = ACTIONS(911),\n    [anon_sym_int] = ACTIONS(911),\n    [anon_sym_float] = ACTIONS(911),\n    [anon_sym_float2] = ACTIONS(911),\n    [anon_sym_float3] = ACTIONS(911),\n    [anon_sym_float4] = ACTIONS(911),\n    [anon_sym_float3x3] = ACTIONS(911),\n    [anon_sym_float2x2] = ACTIONS(911),\n    [anon_sym_float4x4] = ACTIONS(911),\n    [anon_sym_int2] = ACTIONS(911),\n    [anon_sym_int3] = ACTIONS(911),\n    [anon_sym_int4] = ACTIONS(911),\n    [anon_sym_int3x3] = ACTIONS(911),\n    [anon_sym_int2x2] = ACTIONS(911),\n    [anon_sym_int4x4] = ACTIONS(911),\n    [anon_sym_boolean] = ACTIONS(911),\n    [anon_sym_string] = ACTIONS(911),\n    [anon_sym_symbol] = ACTIONS(911),\n    [anon_sym_workgroup] = ACTIONS(925),\n    [anon_sym_get] = ACTIONS(911),\n    [anon_sym_set] = ACTIONS(911),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [443] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1284),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [444] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1326),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [445] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1694),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [446] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1390),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [447] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1277),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [448] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1386),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [449] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2135),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1856),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3671),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3671),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3523),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1152),\n    [sym_subscript_expression] = STATE(1152),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2170),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3671),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1152),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(322),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1153),\n    [anon_sym_pub] = ACTIONS(1069),\n    [anon_sym_export] = ACTIONS(1069),\n    [anon_sym_type] = ACTIONS(1069),\n    [anon_sym_namespace] = ACTIONS(1071),\n    [anon_sym_LBRACE] = ACTIONS(1157),\n    [anon_sym_typeof] = ACTIONS(1091),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1075),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1077),\n    [anon_sym_yield] = ACTIONS(1079),\n    [anon_sym_LBRACK] = ACTIONS(1159),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(1081),\n    [anon_sym_struct] = ACTIONS(1069),\n    [anon_sym_async] = ACTIONS(1083),\n    [anon_sym_fn] = ACTIONS(1069),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1161),\n    [anon_sym_PLUS] = ACTIONS(1091),\n    [anon_sym_DASH] = ACTIONS(1091),\n    [anon_sym_TILDE] = ACTIONS(1075),\n    [anon_sym_void] = ACTIONS(1091),\n    [anon_sym_delete] = ACTIONS(1091),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1093),\n    [anon_sym_DASH_DASH] = ACTIONS(1093),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1163),\n    [anon_sym_static] = ACTIONS(1069),\n    [anon_sym_declare] = ACTIONS(1069),\n    [anon_sym_public] = ACTIONS(1069),\n    [anon_sym_private] = ACTIONS(1069),\n    [anon_sym_protected] = ACTIONS(1069),\n    [anon_sym_override] = ACTIONS(1069),\n    [anon_sym_readonly] = ACTIONS(1069),\n    [anon_sym_module] = ACTIONS(1069),\n    [anon_sym_any] = ACTIONS(1069),\n    [anon_sym_number] = ACTIONS(1069),\n    [anon_sym_int] = ACTIONS(1069),\n    [anon_sym_float] = ACTIONS(1069),\n    [anon_sym_float2] = ACTIONS(1069),\n    [anon_sym_float3] = ACTIONS(1069),\n    [anon_sym_float4] = ACTIONS(1069),\n    [anon_sym_float3x3] = ACTIONS(1069),\n    [anon_sym_float2x2] = ACTIONS(1069),\n    [anon_sym_float4x4] = ACTIONS(1069),\n    [anon_sym_int2] = ACTIONS(1069),\n    [anon_sym_int3] = ACTIONS(1069),\n    [anon_sym_int4] = ACTIONS(1069),\n    [anon_sym_int3x3] = ACTIONS(1069),\n    [anon_sym_int2x2] = ACTIONS(1069),\n    [anon_sym_int4x4] = ACTIONS(1069),\n    [anon_sym_boolean] = ACTIONS(1069),\n    [anon_sym_string] = ACTIONS(1069),\n    [anon_sym_symbol] = ACTIONS(1069),\n    [anon_sym_workgroup] = ACTIONS(1101),\n    [anon_sym_get] = ACTIONS(1069),\n    [anon_sym_set] = ACTIONS(1069),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [450] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2101),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1340),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3600),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3600),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3606),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1093),\n    [sym_subscript_expression] = STATE(1093),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2162),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3600),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1093),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(335),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1123),\n    [anon_sym_pub] = ACTIONS(929),\n    [anon_sym_export] = ACTIONS(929),\n    [anon_sym_type] = ACTIONS(929),\n    [anon_sym_namespace] = ACTIONS(931),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(21),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(31),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(41),\n    [anon_sym_yield] = ACTIONS(63),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(929),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_fn] = ACTIONS(929),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(81),\n    [anon_sym_PLUS] = ACTIONS(21),\n    [anon_sym_DASH] = ACTIONS(21),\n    [anon_sym_TILDE] = ACTIONS(31),\n    [anon_sym_void] = ACTIONS(21),\n    [anon_sym_delete] = ACTIONS(21),\n    [anon_sym_PLUS_PLUS] = ACTIONS(83),\n    [anon_sym_DASH_DASH] = ACTIONS(83),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(95),\n    [anon_sym_static] = ACTIONS(929),\n    [anon_sym_declare] = ACTIONS(929),\n    [anon_sym_public] = ACTIONS(929),\n    [anon_sym_private] = ACTIONS(929),\n    [anon_sym_protected] = ACTIONS(929),\n    [anon_sym_override] = ACTIONS(929),\n    [anon_sym_readonly] = ACTIONS(929),\n    [anon_sym_module] = ACTIONS(929),\n    [anon_sym_any] = ACTIONS(929),\n    [anon_sym_number] = ACTIONS(929),\n    [anon_sym_int] = ACTIONS(929),\n    [anon_sym_float] = ACTIONS(929),\n    [anon_sym_float2] = ACTIONS(929),\n    [anon_sym_float3] = ACTIONS(929),\n    [anon_sym_float4] = ACTIONS(929),\n    [anon_sym_float3x3] = ACTIONS(929),\n    [anon_sym_float2x2] = ACTIONS(929),\n    [anon_sym_float4x4] = ACTIONS(929),\n    [anon_sym_int2] = ACTIONS(929),\n    [anon_sym_int3] = ACTIONS(929),\n    [anon_sym_int4] = ACTIONS(929),\n    [anon_sym_int3x3] = ACTIONS(929),\n    [anon_sym_int2x2] = ACTIONS(929),\n    [anon_sym_int4x4] = ACTIONS(929),\n    [anon_sym_boolean] = ACTIONS(929),\n    [anon_sym_string] = ACTIONS(929),\n    [anon_sym_symbol] = ACTIONS(929),\n    [anon_sym_workgroup] = ACTIONS(961),\n    [anon_sym_get] = ACTIONS(929),\n    [anon_sym_set] = ACTIONS(929),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [451] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(1659),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [452] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1745),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [453] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1585),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [454] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1754),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [455] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1751),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [456] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2116),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1587),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3435),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3435),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3517),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1066),\n    [sym_subscript_expression] = STATE(1066),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2171),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3435),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1066),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(443),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1103),\n    [anon_sym_pub] = ACTIONS(783),\n    [anon_sym_export] = ACTIONS(783),\n    [anon_sym_type] = ACTIONS(783),\n    [anon_sym_namespace] = ACTIONS(785),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(657),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(631),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(633),\n    [anon_sym_yield] = ACTIONS(635),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(783),\n    [anon_sym_async] = ACTIONS(791),\n    [anon_sym_fn] = ACTIONS(783),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1117),\n    [anon_sym_PLUS] = ACTIONS(657),\n    [anon_sym_DASH] = ACTIONS(657),\n    [anon_sym_TILDE] = ACTIONS(631),\n    [anon_sym_void] = ACTIONS(657),\n    [anon_sym_delete] = ACTIONS(657),\n    [anon_sym_PLUS_PLUS] = ACTIONS(659),\n    [anon_sym_DASH_DASH] = ACTIONS(659),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1121),\n    [anon_sym_static] = ACTIONS(783),\n    [anon_sym_declare] = ACTIONS(783),\n    [anon_sym_public] = ACTIONS(783),\n    [anon_sym_private] = ACTIONS(783),\n    [anon_sym_protected] = ACTIONS(783),\n    [anon_sym_override] = ACTIONS(783),\n    [anon_sym_readonly] = ACTIONS(783),\n    [anon_sym_module] = ACTIONS(783),\n    [anon_sym_any] = ACTIONS(783),\n    [anon_sym_number] = ACTIONS(783),\n    [anon_sym_int] = ACTIONS(783),\n    [anon_sym_float] = ACTIONS(783),\n    [anon_sym_float2] = ACTIONS(783),\n    [anon_sym_float3] = ACTIONS(783),\n    [anon_sym_float4] = ACTIONS(783),\n    [anon_sym_float3x3] = ACTIONS(783),\n    [anon_sym_float2x2] = ACTIONS(783),\n    [anon_sym_float4x4] = ACTIONS(783),\n    [anon_sym_int2] = ACTIONS(783),\n    [anon_sym_int3] = ACTIONS(783),\n    [anon_sym_int4] = ACTIONS(783),\n    [anon_sym_int3x3] = ACTIONS(783),\n    [anon_sym_int2x2] = ACTIONS(783),\n    [anon_sym_int4x4] = ACTIONS(783),\n    [anon_sym_boolean] = ACTIONS(783),\n    [anon_sym_string] = ACTIONS(783),\n    [anon_sym_symbol] = ACTIONS(783),\n    [anon_sym_workgroup] = ACTIONS(801),\n    [anon_sym_get] = ACTIONS(783),\n    [anon_sym_set] = ACTIONS(783),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [457] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1747),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [458] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1625),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [459] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1746),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [460] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1727),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [461] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1631),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [462] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2132),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1333),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3656),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3656),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3653),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1103),\n    [sym_subscript_expression] = STATE(1103),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2152),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3656),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1103),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(324),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1129),\n    [anon_sym_pub] = ACTIONS(965),\n    [anon_sym_export] = ACTIONS(965),\n    [anon_sym_type] = ACTIONS(965),\n    [anon_sym_namespace] = ACTIONS(967),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(987),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(971),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(973),\n    [anon_sym_yield] = ACTIONS(975),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(977),\n    [anon_sym_struct] = ACTIONS(965),\n    [anon_sym_async] = ACTIONS(979),\n    [anon_sym_fn] = ACTIONS(965),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1133),\n    [anon_sym_PLUS] = ACTIONS(987),\n    [anon_sym_DASH] = ACTIONS(987),\n    [anon_sym_TILDE] = ACTIONS(971),\n    [anon_sym_void] = ACTIONS(987),\n    [anon_sym_delete] = ACTIONS(987),\n    [anon_sym_PLUS_PLUS] = ACTIONS(989),\n    [anon_sym_DASH_DASH] = ACTIONS(989),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(1657),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1135),\n    [anon_sym_static] = ACTIONS(965),\n    [anon_sym_declare] = ACTIONS(965),\n    [anon_sym_public] = ACTIONS(965),\n    [anon_sym_private] = ACTIONS(965),\n    [anon_sym_protected] = ACTIONS(965),\n    [anon_sym_override] = ACTIONS(965),\n    [anon_sym_readonly] = ACTIONS(965),\n    [anon_sym_module] = ACTIONS(965),\n    [anon_sym_any] = ACTIONS(965),\n    [anon_sym_number] = ACTIONS(965),\n    [anon_sym_int] = ACTIONS(965),\n    [anon_sym_float] = ACTIONS(965),\n    [anon_sym_float2] = ACTIONS(965),\n    [anon_sym_float3] = ACTIONS(965),\n    [anon_sym_float4] = ACTIONS(965),\n    [anon_sym_float3x3] = ACTIONS(965),\n    [anon_sym_float2x2] = ACTIONS(965),\n    [anon_sym_float4x4] = ACTIONS(965),\n    [anon_sym_int2] = ACTIONS(965),\n    [anon_sym_int3] = ACTIONS(965),\n    [anon_sym_int4] = ACTIONS(965),\n    [anon_sym_int3x3] = ACTIONS(965),\n    [anon_sym_int2x2] = ACTIONS(965),\n    [anon_sym_int4x4] = ACTIONS(965),\n    [anon_sym_boolean] = ACTIONS(965),\n    [anon_sym_string] = ACTIONS(965),\n    [anon_sym_symbol] = ACTIONS(965),\n    [anon_sym_workgroup] = ACTIONS(997),\n    [anon_sym_get] = ACTIONS(965),\n    [anon_sym_set] = ACTIONS(965),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [463] = {\n    [sym_import] = STATE(1720),\n    [sym_parenthesized_expression] = STATE(2133),\n    [sym_parenthesized_expression_vector] = STATE(1720),\n    [sym_construct_expression] = STATE(1720),\n    [sym_expression] = STATE(1884),\n    [sym_primary_expression] = STATE(1508),\n    [sym_yield_expression] = STATE(1713),\n    [sym_object] = STATE(1720),\n    [sym_object_pattern] = STATE(3615),\n    [sym_array] = STATE(1720),\n    [sym_array_pattern] = STATE(3615),\n    [sym_glimmer_template] = STATE(1713),\n    [sym_glimmer_opening_tag] = STATE(2867),\n    [sym_generator_function] = STATE(1720),\n    [sym_arrow_function] = STATE(1720),\n    [sym__call_signature] = STATE(3466),\n    [sym_call_expression] = STATE(1720),\n    [sym_new_expression] = STATE(1713),\n    [sym_await_expression] = STATE(1713),\n    [sym_member_expression] = STATE(1140),\n    [sym_subscript_expression] = STATE(1140),\n    [sym_assignment_expression] = STATE(1713),\n    [sym__augmented_assignment_lhs] = STATE(2147),\n    [sym_augmented_assignment_expression] = STATE(1713),\n    [sym__destructuring_pattern] = STATE(3615),\n    [sym_ternary_expression] = STATE(1713),\n    [sym_binary_expression] = STATE(1713),\n    [sym_unary_expression] = STATE(1713),\n    [sym_update_expression] = STATE(1713),\n    [sym_string] = STATE(1720),\n    [sym_template_string] = STATE(1720),\n    [sym_regex] = STATE(1720),\n    [sym_meta_property] = STATE(1720),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1140),\n    [sym_type_assertion] = STATE(1713),\n    [sym_as_expression] = STATE(1713),\n    [sym_satisfies_expression] = STATE(1713),\n    [sym_internal_module] = STATE(1713),\n    [sym_shader] = STATE(1720),\n    [sym_async_block] = STATE(1720),\n    [sym_workgroup] = STATE(1720),\n    [sym_type_arguments] = STATE(347),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1145),\n    [anon_sym_pub] = ACTIONS(1033),\n    [anon_sym_export] = ACTIONS(1033),\n    [anon_sym_type] = ACTIONS(1033),\n    [anon_sym_namespace] = ACTIONS(1035),\n    [anon_sym_LBRACE] = ACTIONS(1109),\n    [anon_sym_typeof] = ACTIONS(1055),\n    [anon_sym_import] = ACTIONS(135),\n    [anon_sym_BANG] = ACTIONS(1041),\n    [anon_sym_LPAREN] = ACTIONS(1113),\n    [anon_sym_await] = ACTIONS(1043),\n    [anon_sym_yield] = ACTIONS(1045),\n    [anon_sym_LBRACK] = ACTIONS(1115),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(641),\n    [anon_sym_struct] = ACTIONS(1033),\n    [anon_sym_async] = ACTIONS(1047),\n    [anon_sym_fn] = ACTIONS(1033),\n    [anon_sym_fn_STAR] = ACTIONS(156),\n    [anon_sym_new] = ACTIONS(1149),\n    [anon_sym_PLUS] = ACTIONS(1055),\n    [anon_sym_DASH] = ACTIONS(1055),\n    [anon_sym_TILDE] = ACTIONS(1041),\n    [anon_sym_void] = ACTIONS(1055),\n    [anon_sym_delete] = ACTIONS(1055),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1057),\n    [anon_sym_DASH_DASH] = ACTIONS(1057),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1119),\n    [sym_number] = ACTIONS(599),\n    [sym_this] = ACTIONS(193),\n    [sym_super] = ACTIONS(193),\n    [sym_true] = ACTIONS(193),\n    [sym_false] = ACTIONS(193),\n    [sym_null] = ACTIONS(193),\n    [sym_undefined] = ACTIONS(1151),\n    [anon_sym_static] = ACTIONS(1033),\n    [anon_sym_declare] = ACTIONS(1033),\n    [anon_sym_public] = ACTIONS(1033),\n    [anon_sym_private] = ACTIONS(1033),\n    [anon_sym_protected] = ACTIONS(1033),\n    [anon_sym_override] = ACTIONS(1033),\n    [anon_sym_readonly] = ACTIONS(1033),\n    [anon_sym_module] = ACTIONS(1033),\n    [anon_sym_any] = ACTIONS(1033),\n    [anon_sym_number] = ACTIONS(1033),\n    [anon_sym_int] = ACTIONS(1033),\n    [anon_sym_float] = ACTIONS(1033),\n    [anon_sym_float2] = ACTIONS(1033),\n    [anon_sym_float3] = ACTIONS(1033),\n    [anon_sym_float4] = ACTIONS(1033),\n    [anon_sym_float3x3] = ACTIONS(1033),\n    [anon_sym_float2x2] = ACTIONS(1033),\n    [anon_sym_float4x4] = ACTIONS(1033),\n    [anon_sym_int2] = ACTIONS(1033),\n    [anon_sym_int3] = ACTIONS(1033),\n    [anon_sym_int4] = ACTIONS(1033),\n    [anon_sym_int3x3] = ACTIONS(1033),\n    [anon_sym_int2x2] = ACTIONS(1033),\n    [anon_sym_int4x4] = ACTIONS(1033),\n    [anon_sym_boolean] = ACTIONS(1033),\n    [anon_sym_string] = ACTIONS(1033),\n    [anon_sym_symbol] = ACTIONS(1033),\n    [anon_sym_workgroup] = ACTIONS(1065),\n    [anon_sym_get] = ACTIONS(1033),\n    [anon_sym_set] = ACTIONS(1033),\n    [anon_sym_shader] = ACTIONS(209),\n  },\n  [464] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1698),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [465] = {\n    [sym_import] = STATE(1847),\n    [sym_parenthesized_expression] = STATE(2140),\n    [sym_parenthesized_expression_vector] = STATE(1847),\n    [sym_construct_expression] = STATE(1847),\n    [sym_expression] = STATE(1712),\n    [sym_primary_expression] = STATE(1759),\n    [sym_yield_expression] = STATE(1836),\n    [sym_object] = STATE(1847),\n    [sym_object_pattern] = STATE(3567),\n    [sym_array] = STATE(1847),\n    [sym_array_pattern] = STATE(3567),\n    [sym_glimmer_template] = STATE(1836),\n    [sym_glimmer_opening_tag] = STATE(2873),\n    [sym_generator_function] = STATE(1847),\n    [sym_arrow_function] = STATE(1847),\n    [sym__call_signature] = STATE(3564),\n    [sym_call_expression] = STATE(1847),\n    [sym_new_expression] = STATE(1836),\n    [sym_await_expression] = STATE(1836),\n    [sym_member_expression] = STATE(1137),\n    [sym_subscript_expression] = STATE(1137),\n    [sym_assignment_expression] = STATE(1836),\n    [sym__augmented_assignment_lhs] = STATE(2156),\n    [sym_augmented_assignment_expression] = STATE(1836),\n    [sym__destructuring_pattern] = STATE(3567),\n    [sym_ternary_expression] = STATE(1836),\n    [sym_binary_expression] = STATE(1836),\n    [sym_unary_expression] = STATE(1836),\n    [sym_update_expression] = STATE(1836),\n    [sym_string] = STATE(1847),\n    [sym_template_string] = STATE(1847),\n    [sym_regex] = STATE(1847),\n    [sym_meta_property] = STATE(1847),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_non_null_expression] = STATE(1137),\n    [sym_type_assertion] = STATE(1836),\n    [sym_as_expression] = STATE(1836),\n    [sym_satisfies_expression] = STATE(1836),\n    [sym_internal_module] = STATE(1836),\n    [sym_shader] = STATE(1847),\n    [sym_async_block] = STATE(1847),\n    [sym_workgroup] = STATE(1847),\n    [sym_type_arguments] = STATE(394),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1137),\n    [anon_sym_pub] = ACTIONS(805),\n    [anon_sym_export] = ACTIONS(805),\n    [anon_sym_type] = ACTIONS(805),\n    [anon_sym_namespace] = ACTIONS(807),\n    [anon_sym_LBRACE] = ACTIONS(1127),\n    [anon_sym_typeof] = ACTIONS(835),\n    [anon_sym_import] = ACTIONS(813),\n    [anon_sym_BANG] = ACTIONS(815),\n    [anon_sym_LPAREN] = ACTIONS(39),\n    [anon_sym_await] = ACTIONS(819),\n    [anon_sym_yield] = ACTIONS(821),\n    [anon_sym_LBRACK] = ACTIONS(65),\n    [anon_sym_LTtemplate_GT] = ACTIONS(67),\n    [anon_sym_LT] = ACTIONS(69),\n    [anon_sym_SLASH] = ACTIONS(71),\n    [anon_sym_struct] = ACTIONS(805),\n    [anon_sym_async] = ACTIONS(825),\n    [anon_sym_fn] = ACTIONS(805),\n    [anon_sym_fn_STAR] = ACTIONS(827),\n    [anon_sym_new] = ACTIONS(1141),\n    [anon_sym_PLUS] = ACTIONS(835),\n    [anon_sym_DASH] = ACTIONS(835),\n    [anon_sym_TILDE] = ACTIONS(815),\n    [anon_sym_void] = ACTIONS(835),\n    [anon_sym_delete] = ACTIONS(835),\n    [anon_sym_PLUS_PLUS] = ACTIONS(837),\n    [anon_sym_DASH_DASH] = ACTIONS(837),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(89),\n    [sym_number] = ACTIONS(91),\n    [sym_this] = ACTIONS(93),\n    [sym_super] = ACTIONS(93),\n    [sym_true] = ACTIONS(93),\n    [sym_false] = ACTIONS(93),\n    [sym_null] = ACTIONS(93),\n    [sym_undefined] = ACTIONS(1143),\n    [anon_sym_static] = ACTIONS(805),\n    [anon_sym_declare] = ACTIONS(805),\n    [anon_sym_public] = ACTIONS(805),\n    [anon_sym_private] = ACTIONS(805),\n    [anon_sym_protected] = ACTIONS(805),\n    [anon_sym_override] = ACTIONS(805),\n    [anon_sym_readonly] = ACTIONS(805),\n    [anon_sym_module] = ACTIONS(805),\n    [anon_sym_any] = ACTIONS(805),\n    [anon_sym_number] = ACTIONS(805),\n    [anon_sym_int] = ACTIONS(805),\n    [anon_sym_float] = ACTIONS(805),\n    [anon_sym_float2] = ACTIONS(805),\n    [anon_sym_float3] = ACTIONS(805),\n    [anon_sym_float4] = ACTIONS(805),\n    [anon_sym_float3x3] = ACTIONS(805),\n    [anon_sym_float2x2] = ACTIONS(805),\n    [anon_sym_float4x4] = ACTIONS(805),\n    [anon_sym_int2] = ACTIONS(805),\n    [anon_sym_int3] = ACTIONS(805),\n    [anon_sym_int4] = ACTIONS(805),\n    [anon_sym_int3x3] = ACTIONS(805),\n    [anon_sym_int2x2] = ACTIONS(805),\n    [anon_sym_int4x4] = ACTIONS(805),\n    [anon_sym_boolean] = ACTIONS(805),\n    [anon_sym_string] = ACTIONS(805),\n    [anon_sym_symbol] = ACTIONS(805),\n    [anon_sym_workgroup] = ACTIONS(853),\n    [anon_sym_get] = ACTIONS(805),\n    [anon_sym_set] = ACTIONS(805),\n    [anon_sym_shader] = ACTIONS(113),\n  },\n  [466] = {\n    [sym_string] = STATE(2629),\n    [sym__property_name] = STATE(2629),\n    [sym_computed_property_name] = STATE(2629),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(1683),\n    [anon_sym_pub] = ACTIONS(1685),\n    [anon_sym_export] = ACTIONS(1685),\n    [anon_sym_type] = ACTIONS(1685),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1685),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(1694),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1685),\n    [anon_sym_async] = ACTIONS(1685),\n    [anon_sym_fn] = ACTIONS(1685),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [sym_number] = ACTIONS(1697),\n    [sym_private_property_identifier] = ACTIONS(1697),\n    [anon_sym_static] = ACTIONS(1685),\n    [anon_sym_declare] = ACTIONS(1685),\n    [anon_sym_public] = ACTIONS(1685),\n    [anon_sym_private] = ACTIONS(1685),\n    [anon_sym_protected] = ACTIONS(1685),\n    [anon_sym_override] = ACTIONS(1685),\n    [anon_sym_readonly] = ACTIONS(1685),\n    [anon_sym_module] = ACTIONS(1685),\n    [anon_sym_any] = ACTIONS(1685),\n    [anon_sym_number] = ACTIONS(1685),\n    [anon_sym_int] = ACTIONS(1685),\n    [anon_sym_float] = ACTIONS(1685),\n    [anon_sym_float2] = ACTIONS(1685),\n    [anon_sym_float3] = ACTIONS(1685),\n    [anon_sym_float4] = ACTIONS(1685),\n    [anon_sym_float3x3] = ACTIONS(1685),\n    [anon_sym_float2x2] = ACTIONS(1685),\n    [anon_sym_float4x4] = ACTIONS(1685),\n    [anon_sym_int2] = ACTIONS(1685),\n    [anon_sym_int3] = ACTIONS(1685),\n    [anon_sym_int4] = ACTIONS(1685),\n    [anon_sym_int3x3] = ACTIONS(1685),\n    [anon_sym_int2x2] = ACTIONS(1685),\n    [anon_sym_int4x4] = ACTIONS(1685),\n    [anon_sym_boolean] = ACTIONS(1685),\n    [anon_sym_string] = ACTIONS(1685),\n    [anon_sym_symbol] = ACTIONS(1685),\n    [anon_sym_workgroup] = ACTIONS(1685),\n    [anon_sym_get] = ACTIONS(1685),\n    [anon_sym_set] = ACTIONS(1685),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [467] = {\n    [sym_string] = STATE(2629),\n    [sym__property_name] = STATE(2629),\n    [sym_computed_property_name] = STATE(2629),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(1683),\n    [anon_sym_pub] = ACTIONS(1685),\n    [anon_sym_export] = ACTIONS(1685),\n    [anon_sym_type] = ACTIONS(1685),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1685),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(1694),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1685),\n    [anon_sym_async] = ACTIONS(1685),\n    [anon_sym_fn] = ACTIONS(1685),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [sym_number] = ACTIONS(1697),\n    [sym_private_property_identifier] = ACTIONS(1697),\n    [anon_sym_static] = ACTIONS(1685),\n    [anon_sym_declare] = ACTIONS(1685),\n    [anon_sym_public] = ACTIONS(1685),\n    [anon_sym_private] = ACTIONS(1685),\n    [anon_sym_protected] = ACTIONS(1685),\n    [anon_sym_override] = ACTIONS(1685),\n    [anon_sym_readonly] = ACTIONS(1685),\n    [anon_sym_module] = ACTIONS(1685),\n    [anon_sym_any] = ACTIONS(1685),\n    [anon_sym_number] = ACTIONS(1685),\n    [anon_sym_int] = ACTIONS(1685),\n    [anon_sym_float] = ACTIONS(1685),\n    [anon_sym_float2] = ACTIONS(1685),\n    [anon_sym_float3] = ACTIONS(1685),\n    [anon_sym_float4] = ACTIONS(1685),\n    [anon_sym_float3x3] = ACTIONS(1685),\n    [anon_sym_float2x2] = ACTIONS(1685),\n    [anon_sym_float4x4] = ACTIONS(1685),\n    [anon_sym_int2] = ACTIONS(1685),\n    [anon_sym_int3] = ACTIONS(1685),\n    [anon_sym_int4] = ACTIONS(1685),\n    [anon_sym_int3x3] = ACTIONS(1685),\n    [anon_sym_int2x2] = ACTIONS(1685),\n    [anon_sym_int4x4] = ACTIONS(1685),\n    [anon_sym_boolean] = ACTIONS(1685),\n    [anon_sym_string] = ACTIONS(1685),\n    [anon_sym_symbol] = ACTIONS(1685),\n    [anon_sym_workgroup] = ACTIONS(1685),\n    [anon_sym_get] = ACTIONS(1685),\n    [anon_sym_set] = ACTIONS(1685),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [468] = {\n    [sym_string] = STATE(2629),\n    [sym__property_name] = STATE(2629),\n    [sym_computed_property_name] = STATE(2629),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(1683),\n    [anon_sym_pub] = ACTIONS(1685),\n    [anon_sym_export] = ACTIONS(1685),\n    [anon_sym_type] = ACTIONS(1685),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1685),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(1694),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(122),\n    [anon_sym_struct] = ACTIONS(1685),\n    [anon_sym_async] = ACTIONS(1685),\n    [anon_sym_fn] = ACTIONS(1685),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [sym_number] = ACTIONS(1697),\n    [sym_private_property_identifier] = ACTIONS(1697),\n    [anon_sym_static] = ACTIONS(1685),\n    [anon_sym_declare] = ACTIONS(1685),\n    [anon_sym_public] = ACTIONS(1685),\n    [anon_sym_private] = ACTIONS(1685),\n    [anon_sym_protected] = ACTIONS(1685),\n    [anon_sym_override] = ACTIONS(1685),\n    [anon_sym_readonly] = ACTIONS(1685),\n    [anon_sym_module] = ACTIONS(1685),\n    [anon_sym_any] = ACTIONS(1685),\n    [anon_sym_number] = ACTIONS(1685),\n    [anon_sym_int] = ACTIONS(1685),\n    [anon_sym_float] = ACTIONS(1685),\n    [anon_sym_float2] = ACTIONS(1685),\n    [anon_sym_float3] = ACTIONS(1685),\n    [anon_sym_float4] = ACTIONS(1685),\n    [anon_sym_float3x3] = ACTIONS(1685),\n    [anon_sym_float2x2] = ACTIONS(1685),\n    [anon_sym_float4x4] = ACTIONS(1685),\n    [anon_sym_int2] = ACTIONS(1685),\n    [anon_sym_int3] = ACTIONS(1685),\n    [anon_sym_int4] = ACTIONS(1685),\n    [anon_sym_int3x3] = ACTIONS(1685),\n    [anon_sym_int2x2] = ACTIONS(1685),\n    [anon_sym_int4x4] = ACTIONS(1685),\n    [anon_sym_boolean] = ACTIONS(1685),\n    [anon_sym_string] = ACTIONS(1685),\n    [anon_sym_symbol] = ACTIONS(1685),\n    [anon_sym_workgroup] = ACTIONS(1685),\n    [anon_sym_get] = ACTIONS(1685),\n    [anon_sym_set] = ACTIONS(1685),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [469] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1715),\n    [anon_sym_fn_STAR] = ACTIONS(1717),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [470] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1715),\n    [anon_sym_fn_STAR] = ACTIONS(1717),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [471] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1715),\n    [anon_sym_fn_STAR] = ACTIONS(1717),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [472] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3631),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1719),\n    [anon_sym_pub] = ACTIONS(1721),\n    [anon_sym_export] = ACTIONS(1721),\n    [anon_sym_type] = ACTIONS(1721),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1721),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_RBRACE] = ACTIONS(130),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_RPAREN] = ACTIONS(130),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(144),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(130),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1721),\n    [anon_sym_async] = ACTIONS(1721),\n    [anon_sym_fn] = ACTIONS(1721),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1721),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(1721),\n    [anon_sym_public] = ACTIONS(1721),\n    [anon_sym_private] = ACTIONS(1721),\n    [anon_sym_protected] = ACTIONS(1721),\n    [anon_sym_override] = ACTIONS(1721),\n    [anon_sym_readonly] = ACTIONS(1721),\n    [anon_sym_module] = ACTIONS(1721),\n    [anon_sym_any] = ACTIONS(1721),\n    [anon_sym_number] = ACTIONS(1721),\n    [anon_sym_int] = ACTIONS(1721),\n    [anon_sym_float] = ACTIONS(1721),\n    [anon_sym_float2] = ACTIONS(1721),\n    [anon_sym_float3] = ACTIONS(1721),\n    [anon_sym_float4] = ACTIONS(1721),\n    [anon_sym_float3x3] = ACTIONS(1721),\n    [anon_sym_float2x2] = ACTIONS(1721),\n    [anon_sym_float4x4] = ACTIONS(1721),\n    [anon_sym_int2] = ACTIONS(1721),\n    [anon_sym_int3] = ACTIONS(1721),\n    [anon_sym_int4] = ACTIONS(1721),\n    [anon_sym_int3x3] = ACTIONS(1721),\n    [anon_sym_int2x2] = ACTIONS(1721),\n    [anon_sym_int4x4] = ACTIONS(1721),\n    [anon_sym_boolean] = ACTIONS(1721),\n    [anon_sym_string] = ACTIONS(1721),\n    [anon_sym_symbol] = ACTIONS(1721),\n    [anon_sym_workgroup] = ACTIONS(1721),\n    [anon_sym_get] = ACTIONS(1721),\n    [anon_sym_set] = ACTIONS(1721),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [473] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3388),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1727),\n    [anon_sym_pub] = ACTIONS(1729),\n    [anon_sym_export] = ACTIONS(1729),\n    [anon_sym_type] = ACTIONS(1729),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1729),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_RBRACE] = ACTIONS(222),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(222),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1729),\n    [anon_sym_async] = ACTIONS(1729),\n    [anon_sym_fn] = ACTIONS(1729),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1729),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_declare] = ACTIONS(1729),\n    [anon_sym_public] = ACTIONS(1729),\n    [anon_sym_private] = ACTIONS(1729),\n    [anon_sym_protected] = ACTIONS(1729),\n    [anon_sym_override] = ACTIONS(1729),\n    [anon_sym_readonly] = ACTIONS(1729),\n    [anon_sym_module] = ACTIONS(1729),\n    [anon_sym_any] = ACTIONS(1729),\n    [anon_sym_number] = ACTIONS(1729),\n    [anon_sym_int] = ACTIONS(1729),\n    [anon_sym_float] = ACTIONS(1729),\n    [anon_sym_float2] = ACTIONS(1729),\n    [anon_sym_float3] = ACTIONS(1729),\n    [anon_sym_float4] = ACTIONS(1729),\n    [anon_sym_float3x3] = ACTIONS(1729),\n    [anon_sym_float2x2] = ACTIONS(1729),\n    [anon_sym_float4x4] = ACTIONS(1729),\n    [anon_sym_int2] = ACTIONS(1729),\n    [anon_sym_int3] = ACTIONS(1729),\n    [anon_sym_int4] = ACTIONS(1729),\n    [anon_sym_int3x3] = ACTIONS(1729),\n    [anon_sym_int2x2] = ACTIONS(1729),\n    [anon_sym_int4x4] = ACTIONS(1729),\n    [anon_sym_boolean] = ACTIONS(1729),\n    [anon_sym_string] = ACTIONS(1729),\n    [anon_sym_symbol] = ACTIONS(1729),\n    [anon_sym_workgroup] = ACTIONS(1729),\n    [anon_sym_get] = ACTIONS(1729),\n    [anon_sym_set] = ACTIONS(1729),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [474] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3388),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1727),\n    [anon_sym_pub] = ACTIONS(1729),\n    [anon_sym_export] = ACTIONS(1729),\n    [anon_sym_type] = ACTIONS(1729),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1729),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(1731),\n    [anon_sym_RBRACE] = ACTIONS(1731),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_RPAREN] = ACTIONS(1731),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(1731),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1729),\n    [anon_sym_async] = ACTIONS(1729),\n    [anon_sym_fn] = ACTIONS(1729),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1729),\n    [anon_sym_QMARK] = ACTIONS(1244),\n    [anon_sym_declare] = ACTIONS(1729),\n    [anon_sym_public] = ACTIONS(1729),\n    [anon_sym_private] = ACTIONS(1729),\n    [anon_sym_protected] = ACTIONS(1729),\n    [anon_sym_override] = ACTIONS(1729),\n    [anon_sym_readonly] = ACTIONS(1729),\n    [anon_sym_module] = ACTIONS(1729),\n    [anon_sym_any] = ACTIONS(1729),\n    [anon_sym_number] = ACTIONS(1729),\n    [anon_sym_int] = ACTIONS(1729),\n    [anon_sym_float] = ACTIONS(1729),\n    [anon_sym_float2] = ACTIONS(1729),\n    [anon_sym_float3] = ACTIONS(1729),\n    [anon_sym_float4] = ACTIONS(1729),\n    [anon_sym_float3x3] = ACTIONS(1729),\n    [anon_sym_float2x2] = ACTIONS(1729),\n    [anon_sym_float4x4] = ACTIONS(1729),\n    [anon_sym_int2] = ACTIONS(1729),\n    [anon_sym_int3] = ACTIONS(1729),\n    [anon_sym_int4] = ACTIONS(1729),\n    [anon_sym_int3x3] = ACTIONS(1729),\n    [anon_sym_int2x2] = ACTIONS(1729),\n    [anon_sym_int4x4] = ACTIONS(1729),\n    [anon_sym_boolean] = ACTIONS(1729),\n    [anon_sym_string] = ACTIONS(1729),\n    [anon_sym_symbol] = ACTIONS(1729),\n    [anon_sym_workgroup] = ACTIONS(1729),\n    [anon_sym_get] = ACTIONS(1729),\n    [anon_sym_set] = ACTIONS(1729),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [475] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3631),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1719),\n    [anon_sym_pub] = ACTIONS(1721),\n    [anon_sym_export] = ACTIONS(1721),\n    [anon_sym_type] = ACTIONS(1721),\n    [anon_sym_EQ] = ACTIONS(1173),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1721),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_RPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1721),\n    [anon_sym_async] = ACTIONS(1721),\n    [anon_sym_fn] = ACTIONS(1721),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1721),\n    [anon_sym_declare] = ACTIONS(1721),\n    [anon_sym_public] = ACTIONS(1721),\n    [anon_sym_private] = ACTIONS(1721),\n    [anon_sym_protected] = ACTIONS(1721),\n    [anon_sym_override] = ACTIONS(1721),\n    [anon_sym_readonly] = ACTIONS(1721),\n    [anon_sym_module] = ACTIONS(1721),\n    [anon_sym_any] = ACTIONS(1721),\n    [anon_sym_number] = ACTIONS(1721),\n    [anon_sym_int] = ACTIONS(1721),\n    [anon_sym_float] = ACTIONS(1721),\n    [anon_sym_float2] = ACTIONS(1721),\n    [anon_sym_float3] = ACTIONS(1721),\n    [anon_sym_float4] = ACTIONS(1721),\n    [anon_sym_float3x3] = ACTIONS(1721),\n    [anon_sym_float2x2] = ACTIONS(1721),\n    [anon_sym_float4x4] = ACTIONS(1721),\n    [anon_sym_int2] = ACTIONS(1721),\n    [anon_sym_int3] = ACTIONS(1721),\n    [anon_sym_int4] = ACTIONS(1721),\n    [anon_sym_int3x3] = ACTIONS(1721),\n    [anon_sym_int2x2] = ACTIONS(1721),\n    [anon_sym_int4x4] = ACTIONS(1721),\n    [anon_sym_boolean] = ACTIONS(1721),\n    [anon_sym_string] = ACTIONS(1721),\n    [anon_sym_symbol] = ACTIONS(1721),\n    [anon_sym_workgroup] = ACTIONS(1721),\n    [anon_sym_get] = ACTIONS(1721),\n    [anon_sym_set] = ACTIONS(1721),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [476] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3631),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1719),\n    [anon_sym_pub] = ACTIONS(1721),\n    [anon_sym_export] = ACTIONS(1721),\n    [anon_sym_type] = ACTIONS(1721),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1721),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_RPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1721),\n    [anon_sym_async] = ACTIONS(1721),\n    [anon_sym_fn] = ACTIONS(1721),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1721),\n    [anon_sym_declare] = ACTIONS(1721),\n    [anon_sym_public] = ACTIONS(1721),\n    [anon_sym_private] = ACTIONS(1721),\n    [anon_sym_protected] = ACTIONS(1721),\n    [anon_sym_override] = ACTIONS(1721),\n    [anon_sym_readonly] = ACTIONS(1721),\n    [anon_sym_module] = ACTIONS(1721),\n    [anon_sym_any] = ACTIONS(1721),\n    [anon_sym_number] = ACTIONS(1721),\n    [anon_sym_int] = ACTIONS(1721),\n    [anon_sym_float] = ACTIONS(1721),\n    [anon_sym_float2] = ACTIONS(1721),\n    [anon_sym_float3] = ACTIONS(1721),\n    [anon_sym_float4] = ACTIONS(1721),\n    [anon_sym_float3x3] = ACTIONS(1721),\n    [anon_sym_float2x2] = ACTIONS(1721),\n    [anon_sym_float4x4] = ACTIONS(1721),\n    [anon_sym_int2] = ACTIONS(1721),\n    [anon_sym_int3] = ACTIONS(1721),\n    [anon_sym_int4] = ACTIONS(1721),\n    [anon_sym_int3x3] = ACTIONS(1721),\n    [anon_sym_int2x2] = ACTIONS(1721),\n    [anon_sym_int4x4] = ACTIONS(1721),\n    [anon_sym_boolean] = ACTIONS(1721),\n    [anon_sym_string] = ACTIONS(1721),\n    [anon_sym_symbol] = ACTIONS(1721),\n    [anon_sym_workgroup] = ACTIONS(1721),\n    [anon_sym_get] = ACTIONS(1721),\n    [anon_sym_set] = ACTIONS(1721),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [477] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1733),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1715),\n    [anon_sym_fn_STAR] = ACTIONS(1717),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [478] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3662),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1735),\n    [anon_sym_pub] = ACTIONS(1737),\n    [anon_sym_export] = ACTIONS(1737),\n    [anon_sym_type] = ACTIONS(1737),\n    [anon_sym_EQ] = ACTIONS(1211),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1737),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1737),\n    [anon_sym_async] = ACTIONS(1737),\n    [anon_sym_fn] = ACTIONS(1737),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1213),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1737),\n    [anon_sym_declare] = ACTIONS(1737),\n    [anon_sym_public] = ACTIONS(1737),\n    [anon_sym_private] = ACTIONS(1737),\n    [anon_sym_protected] = ACTIONS(1737),\n    [anon_sym_override] = ACTIONS(1737),\n    [anon_sym_readonly] = ACTIONS(1737),\n    [anon_sym_module] = ACTIONS(1737),\n    [anon_sym_any] = ACTIONS(1737),\n    [anon_sym_number] = ACTIONS(1737),\n    [anon_sym_int] = ACTIONS(1737),\n    [anon_sym_float] = ACTIONS(1737),\n    [anon_sym_float2] = ACTIONS(1737),\n    [anon_sym_float3] = ACTIONS(1737),\n    [anon_sym_float4] = ACTIONS(1737),\n    [anon_sym_float3x3] = ACTIONS(1737),\n    [anon_sym_float2x2] = ACTIONS(1737),\n    [anon_sym_float4x4] = ACTIONS(1737),\n    [anon_sym_int2] = ACTIONS(1737),\n    [anon_sym_int3] = ACTIONS(1737),\n    [anon_sym_int4] = ACTIONS(1737),\n    [anon_sym_int3x3] = ACTIONS(1737),\n    [anon_sym_int2x2] = ACTIONS(1737),\n    [anon_sym_int4x4] = ACTIONS(1737),\n    [anon_sym_boolean] = ACTIONS(1737),\n    [anon_sym_string] = ACTIONS(1737),\n    [anon_sym_symbol] = ACTIONS(1737),\n    [anon_sym_workgroup] = ACTIONS(1737),\n    [anon_sym_get] = ACTIONS(1737),\n    [anon_sym_set] = ACTIONS(1737),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [479] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1705),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [480] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3662),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1735),\n    [anon_sym_pub] = ACTIONS(1737),\n    [anon_sym_export] = ACTIONS(1737),\n    [anon_sym_type] = ACTIONS(1737),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1737),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1737),\n    [anon_sym_async] = ACTIONS(1737),\n    [anon_sym_fn] = ACTIONS(1737),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1213),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1737),\n    [anon_sym_declare] = ACTIONS(1737),\n    [anon_sym_public] = ACTIONS(1737),\n    [anon_sym_private] = ACTIONS(1737),\n    [anon_sym_protected] = ACTIONS(1737),\n    [anon_sym_override] = ACTIONS(1737),\n    [anon_sym_readonly] = ACTIONS(1737),\n    [anon_sym_module] = ACTIONS(1737),\n    [anon_sym_any] = ACTIONS(1737),\n    [anon_sym_number] = ACTIONS(1737),\n    [anon_sym_int] = ACTIONS(1737),\n    [anon_sym_float] = ACTIONS(1737),\n    [anon_sym_float2] = ACTIONS(1737),\n    [anon_sym_float3] = ACTIONS(1737),\n    [anon_sym_float4] = ACTIONS(1737),\n    [anon_sym_float3x3] = ACTIONS(1737),\n    [anon_sym_float2x2] = ACTIONS(1737),\n    [anon_sym_float4x4] = ACTIONS(1737),\n    [anon_sym_int2] = ACTIONS(1737),\n    [anon_sym_int3] = ACTIONS(1737),\n    [anon_sym_int4] = ACTIONS(1737),\n    [anon_sym_int3x3] = ACTIONS(1737),\n    [anon_sym_int2x2] = ACTIONS(1737),\n    [anon_sym_int4x4] = ACTIONS(1737),\n    [anon_sym_boolean] = ACTIONS(1737),\n    [anon_sym_string] = ACTIONS(1737),\n    [anon_sym_symbol] = ACTIONS(1737),\n    [anon_sym_workgroup] = ACTIONS(1737),\n    [anon_sym_get] = ACTIONS(1737),\n    [anon_sym_set] = ACTIONS(1737),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [481] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1741),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1715),\n    [anon_sym_fn_STAR] = ACTIONS(1743),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [482] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(1745),\n    [anon_sym_of] = ACTIONS(1748),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1705),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [483] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3631),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1719),\n    [anon_sym_pub] = ACTIONS(1721),\n    [anon_sym_export] = ACTIONS(1721),\n    [anon_sym_type] = ACTIONS(1721),\n    [anon_sym_EQ] = ACTIONS(1173),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1721),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(1241),\n    [anon_sym_RBRACE] = ACTIONS(1241),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(1241),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1721),\n    [anon_sym_async] = ACTIONS(1721),\n    [anon_sym_fn] = ACTIONS(1721),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1721),\n    [anon_sym_declare] = ACTIONS(1721),\n    [anon_sym_public] = ACTIONS(1721),\n    [anon_sym_private] = ACTIONS(1721),\n    [anon_sym_protected] = ACTIONS(1721),\n    [anon_sym_override] = ACTIONS(1721),\n    [anon_sym_readonly] = ACTIONS(1721),\n    [anon_sym_module] = ACTIONS(1721),\n    [anon_sym_any] = ACTIONS(1721),\n    [anon_sym_number] = ACTIONS(1721),\n    [anon_sym_int] = ACTIONS(1721),\n    [anon_sym_float] = ACTIONS(1721),\n    [anon_sym_float2] = ACTIONS(1721),\n    [anon_sym_float3] = ACTIONS(1721),\n    [anon_sym_float4] = ACTIONS(1721),\n    [anon_sym_float3x3] = ACTIONS(1721),\n    [anon_sym_float2x2] = ACTIONS(1721),\n    [anon_sym_float4x4] = ACTIONS(1721),\n    [anon_sym_int2] = ACTIONS(1721),\n    [anon_sym_int3] = ACTIONS(1721),\n    [anon_sym_int4] = ACTIONS(1721),\n    [anon_sym_int3x3] = ACTIONS(1721),\n    [anon_sym_int2x2] = ACTIONS(1721),\n    [anon_sym_int4x4] = ACTIONS(1721),\n    [anon_sym_boolean] = ACTIONS(1721),\n    [anon_sym_string] = ACTIONS(1721),\n    [anon_sym_symbol] = ACTIONS(1721),\n    [anon_sym_workgroup] = ACTIONS(1721),\n    [anon_sym_get] = ACTIONS(1721),\n    [anon_sym_set] = ACTIONS(1721),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [484] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3385),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1703),\n    [anon_sym_pub] = ACTIONS(1705),\n    [anon_sym_export] = ACTIONS(1705),\n    [anon_sym_type] = ACTIONS(1705),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1705),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1705),\n    [anon_sym_async] = ACTIONS(1705),\n    [anon_sym_fn] = ACTIONS(1705),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1705),\n    [anon_sym_declare] = ACTIONS(1705),\n    [anon_sym_public] = ACTIONS(1705),\n    [anon_sym_private] = ACTIONS(1705),\n    [anon_sym_protected] = ACTIONS(1705),\n    [anon_sym_override] = ACTIONS(1705),\n    [anon_sym_readonly] = ACTIONS(1705),\n    [anon_sym_module] = ACTIONS(1705),\n    [anon_sym_any] = ACTIONS(1705),\n    [anon_sym_number] = ACTIONS(1705),\n    [anon_sym_int] = ACTIONS(1705),\n    [anon_sym_float] = ACTIONS(1705),\n    [anon_sym_float2] = ACTIONS(1705),\n    [anon_sym_float3] = ACTIONS(1705),\n    [anon_sym_float4] = ACTIONS(1705),\n    [anon_sym_float3x3] = ACTIONS(1705),\n    [anon_sym_float2x2] = ACTIONS(1705),\n    [anon_sym_float4x4] = ACTIONS(1705),\n    [anon_sym_int2] = ACTIONS(1705),\n    [anon_sym_int3] = ACTIONS(1705),\n    [anon_sym_int4] = ACTIONS(1705),\n    [anon_sym_int3x3] = ACTIONS(1705),\n    [anon_sym_int2x2] = ACTIONS(1705),\n    [anon_sym_int4x4] = ACTIONS(1705),\n    [anon_sym_boolean] = ACTIONS(1705),\n    [anon_sym_string] = ACTIONS(1705),\n    [anon_sym_symbol] = ACTIONS(1705),\n    [anon_sym_workgroup] = ACTIONS(1705),\n    [anon_sym_get] = ACTIONS(1705),\n    [anon_sym_set] = ACTIONS(1705),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [485] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3471),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1750),\n    [anon_sym_pub] = ACTIONS(1752),\n    [anon_sym_export] = ACTIONS(1752),\n    [anon_sym_type] = ACTIONS(1752),\n    [anon_sym_EQ] = ACTIONS(1754),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1752),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1757),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(130),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1752),\n    [anon_sym_async] = ACTIONS(1752),\n    [anon_sym_fn] = ACTIONS(1752),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1752),\n    [anon_sym_declare] = ACTIONS(1752),\n    [anon_sym_public] = ACTIONS(1752),\n    [anon_sym_private] = ACTIONS(1752),\n    [anon_sym_protected] = ACTIONS(1752),\n    [anon_sym_override] = ACTIONS(1752),\n    [anon_sym_readonly] = ACTIONS(1752),\n    [anon_sym_module] = ACTIONS(1752),\n    [anon_sym_any] = ACTIONS(1752),\n    [anon_sym_number] = ACTIONS(1752),\n    [anon_sym_int] = ACTIONS(1752),\n    [anon_sym_float] = ACTIONS(1752),\n    [anon_sym_float2] = ACTIONS(1752),\n    [anon_sym_float3] = ACTIONS(1752),\n    [anon_sym_float4] = ACTIONS(1752),\n    [anon_sym_float3x3] = ACTIONS(1752),\n    [anon_sym_float2x2] = ACTIONS(1752),\n    [anon_sym_float4x4] = ACTIONS(1752),\n    [anon_sym_int2] = ACTIONS(1752),\n    [anon_sym_int3] = ACTIONS(1752),\n    [anon_sym_int4] = ACTIONS(1752),\n    [anon_sym_int3x3] = ACTIONS(1752),\n    [anon_sym_int2x2] = ACTIONS(1752),\n    [anon_sym_int4x4] = ACTIONS(1752),\n    [anon_sym_boolean] = ACTIONS(1752),\n    [anon_sym_string] = ACTIONS(1752),\n    [anon_sym_symbol] = ACTIONS(1752),\n    [anon_sym_workgroup] = ACTIONS(1752),\n    [anon_sym_get] = ACTIONS(1752),\n    [anon_sym_set] = ACTIONS(1752),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [486] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3471),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1750),\n    [anon_sym_pub] = ACTIONS(1752),\n    [anon_sym_export] = ACTIONS(1752),\n    [anon_sym_type] = ACTIONS(1752),\n    [anon_sym_EQ] = ACTIONS(1754),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1752),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(130),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1752),\n    [anon_sym_async] = ACTIONS(1752),\n    [anon_sym_fn] = ACTIONS(1752),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1752),\n    [anon_sym_declare] = ACTIONS(1752),\n    [anon_sym_public] = ACTIONS(1752),\n    [anon_sym_private] = ACTIONS(1752),\n    [anon_sym_protected] = ACTIONS(1752),\n    [anon_sym_override] = ACTIONS(1752),\n    [anon_sym_readonly] = ACTIONS(1752),\n    [anon_sym_module] = ACTIONS(1752),\n    [anon_sym_any] = ACTIONS(1752),\n    [anon_sym_number] = ACTIONS(1752),\n    [anon_sym_int] = ACTIONS(1752),\n    [anon_sym_float] = ACTIONS(1752),\n    [anon_sym_float2] = ACTIONS(1752),\n    [anon_sym_float3] = ACTIONS(1752),\n    [anon_sym_float4] = ACTIONS(1752),\n    [anon_sym_float3x3] = ACTIONS(1752),\n    [anon_sym_float2x2] = ACTIONS(1752),\n    [anon_sym_float4x4] = ACTIONS(1752),\n    [anon_sym_int2] = ACTIONS(1752),\n    [anon_sym_int3] = ACTIONS(1752),\n    [anon_sym_int4] = ACTIONS(1752),\n    [anon_sym_int3x3] = ACTIONS(1752),\n    [anon_sym_int2x2] = ACTIONS(1752),\n    [anon_sym_int4x4] = ACTIONS(1752),\n    [anon_sym_boolean] = ACTIONS(1752),\n    [anon_sym_string] = ACTIONS(1752),\n    [anon_sym_symbol] = ACTIONS(1752),\n    [anon_sym_workgroup] = ACTIONS(1752),\n    [anon_sym_get] = ACTIONS(1752),\n    [anon_sym_set] = ACTIONS(1752),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [487] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3471),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1750),\n    [anon_sym_pub] = ACTIONS(1752),\n    [anon_sym_export] = ACTIONS(1752),\n    [anon_sym_type] = ACTIONS(1752),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1752),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1752),\n    [anon_sym_async] = ACTIONS(1752),\n    [anon_sym_fn] = ACTIONS(1752),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1752),\n    [anon_sym_declare] = ACTIONS(1752),\n    [anon_sym_public] = ACTIONS(1752),\n    [anon_sym_private] = ACTIONS(1752),\n    [anon_sym_protected] = ACTIONS(1752),\n    [anon_sym_override] = ACTIONS(1752),\n    [anon_sym_readonly] = ACTIONS(1752),\n    [anon_sym_module] = ACTIONS(1752),\n    [anon_sym_any] = ACTIONS(1752),\n    [anon_sym_number] = ACTIONS(1752),\n    [anon_sym_int] = ACTIONS(1752),\n    [anon_sym_float] = ACTIONS(1752),\n    [anon_sym_float2] = ACTIONS(1752),\n    [anon_sym_float3] = ACTIONS(1752),\n    [anon_sym_float4] = ACTIONS(1752),\n    [anon_sym_float3x3] = ACTIONS(1752),\n    [anon_sym_float2x2] = ACTIONS(1752),\n    [anon_sym_float4x4] = ACTIONS(1752),\n    [anon_sym_int2] = ACTIONS(1752),\n    [anon_sym_int3] = ACTIONS(1752),\n    [anon_sym_int4] = ACTIONS(1752),\n    [anon_sym_int3x3] = ACTIONS(1752),\n    [anon_sym_int2x2] = ACTIONS(1752),\n    [anon_sym_int4x4] = ACTIONS(1752),\n    [anon_sym_boolean] = ACTIONS(1752),\n    [anon_sym_string] = ACTIONS(1752),\n    [anon_sym_symbol] = ACTIONS(1752),\n    [anon_sym_workgroup] = ACTIONS(1752),\n    [anon_sym_get] = ACTIONS(1752),\n    [anon_sym_set] = ACTIONS(1752),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [488] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3582),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1759),\n    [anon_sym_pub] = ACTIONS(1761),\n    [anon_sym_export] = ACTIONS(1761),\n    [anon_sym_type] = ACTIONS(1761),\n    [anon_sym_EQ] = ACTIONS(1246),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1761),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1761),\n    [anon_sym_async] = ACTIONS(1761),\n    [anon_sym_fn] = ACTIONS(1761),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1248),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1761),\n    [anon_sym_declare] = ACTIONS(1761),\n    [anon_sym_public] = ACTIONS(1761),\n    [anon_sym_private] = ACTIONS(1761),\n    [anon_sym_protected] = ACTIONS(1761),\n    [anon_sym_override] = ACTIONS(1761),\n    [anon_sym_readonly] = ACTIONS(1761),\n    [anon_sym_module] = ACTIONS(1761),\n    [anon_sym_any] = ACTIONS(1761),\n    [anon_sym_number] = ACTIONS(1761),\n    [anon_sym_int] = ACTIONS(1761),\n    [anon_sym_float] = ACTIONS(1761),\n    [anon_sym_float2] = ACTIONS(1761),\n    [anon_sym_float3] = ACTIONS(1761),\n    [anon_sym_float4] = ACTIONS(1761),\n    [anon_sym_float3x3] = ACTIONS(1761),\n    [anon_sym_float2x2] = ACTIONS(1761),\n    [anon_sym_float4x4] = ACTIONS(1761),\n    [anon_sym_int2] = ACTIONS(1761),\n    [anon_sym_int3] = ACTIONS(1761),\n    [anon_sym_int4] = ACTIONS(1761),\n    [anon_sym_int3x3] = ACTIONS(1761),\n    [anon_sym_int2x2] = ACTIONS(1761),\n    [anon_sym_int4x4] = ACTIONS(1761),\n    [anon_sym_boolean] = ACTIONS(1761),\n    [anon_sym_string] = ACTIONS(1761),\n    [anon_sym_symbol] = ACTIONS(1761),\n    [anon_sym_workgroup] = ACTIONS(1761),\n    [anon_sym_get] = ACTIONS(1761),\n    [anon_sym_set] = ACTIONS(1761),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [489] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3471),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1750),\n    [anon_sym_pub] = ACTIONS(1752),\n    [anon_sym_export] = ACTIONS(1752),\n    [anon_sym_type] = ACTIONS(1752),\n    [anon_sym_EQ] = ACTIONS(1250),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1752),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1763),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1752),\n    [anon_sym_async] = ACTIONS(1752),\n    [anon_sym_fn] = ACTIONS(1752),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1752),\n    [anon_sym_declare] = ACTIONS(1752),\n    [anon_sym_public] = ACTIONS(1752),\n    [anon_sym_private] = ACTIONS(1752),\n    [anon_sym_protected] = ACTIONS(1752),\n    [anon_sym_override] = ACTIONS(1752),\n    [anon_sym_readonly] = ACTIONS(1752),\n    [anon_sym_module] = ACTIONS(1752),\n    [anon_sym_any] = ACTIONS(1752),\n    [anon_sym_number] = ACTIONS(1752),\n    [anon_sym_int] = ACTIONS(1752),\n    [anon_sym_float] = ACTIONS(1752),\n    [anon_sym_float2] = ACTIONS(1752),\n    [anon_sym_float3] = ACTIONS(1752),\n    [anon_sym_float4] = ACTIONS(1752),\n    [anon_sym_float3x3] = ACTIONS(1752),\n    [anon_sym_float2x2] = ACTIONS(1752),\n    [anon_sym_float4x4] = ACTIONS(1752),\n    [anon_sym_int2] = ACTIONS(1752),\n    [anon_sym_int3] = ACTIONS(1752),\n    [anon_sym_int4] = ACTIONS(1752),\n    [anon_sym_int3x3] = ACTIONS(1752),\n    [anon_sym_int2x2] = ACTIONS(1752),\n    [anon_sym_int4x4] = ACTIONS(1752),\n    [anon_sym_boolean] = ACTIONS(1752),\n    [anon_sym_string] = ACTIONS(1752),\n    [anon_sym_symbol] = ACTIONS(1752),\n    [anon_sym_workgroup] = ACTIONS(1752),\n    [anon_sym_get] = ACTIONS(1752),\n    [anon_sym_set] = ACTIONS(1752),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [490] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3471),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1750),\n    [anon_sym_pub] = ACTIONS(1752),\n    [anon_sym_export] = ACTIONS(1752),\n    [anon_sym_type] = ACTIONS(1752),\n    [anon_sym_EQ] = ACTIONS(1250),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1752),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1757),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1752),\n    [anon_sym_async] = ACTIONS(1752),\n    [anon_sym_fn] = ACTIONS(1752),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1752),\n    [anon_sym_declare] = ACTIONS(1752),\n    [anon_sym_public] = ACTIONS(1752),\n    [anon_sym_private] = ACTIONS(1752),\n    [anon_sym_protected] = ACTIONS(1752),\n    [anon_sym_override] = ACTIONS(1752),\n    [anon_sym_readonly] = ACTIONS(1752),\n    [anon_sym_module] = ACTIONS(1752),\n    [anon_sym_any] = ACTIONS(1752),\n    [anon_sym_number] = ACTIONS(1752),\n    [anon_sym_int] = ACTIONS(1752),\n    [anon_sym_float] = ACTIONS(1752),\n    [anon_sym_float2] = ACTIONS(1752),\n    [anon_sym_float3] = ACTIONS(1752),\n    [anon_sym_float4] = ACTIONS(1752),\n    [anon_sym_float3x3] = ACTIONS(1752),\n    [anon_sym_float2x2] = ACTIONS(1752),\n    [anon_sym_float4x4] = ACTIONS(1752),\n    [anon_sym_int2] = ACTIONS(1752),\n    [anon_sym_int3] = ACTIONS(1752),\n    [anon_sym_int4] = ACTIONS(1752),\n    [anon_sym_int3x3] = ACTIONS(1752),\n    [anon_sym_int2x2] = ACTIONS(1752),\n    [anon_sym_int4x4] = ACTIONS(1752),\n    [anon_sym_boolean] = ACTIONS(1752),\n    [anon_sym_string] = ACTIONS(1752),\n    [anon_sym_symbol] = ACTIONS(1752),\n    [anon_sym_workgroup] = ACTIONS(1752),\n    [anon_sym_get] = ACTIONS(1752),\n    [anon_sym_set] = ACTIONS(1752),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [491] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3471),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1750),\n    [anon_sym_pub] = ACTIONS(1752),\n    [anon_sym_export] = ACTIONS(1752),\n    [anon_sym_type] = ACTIONS(1752),\n    [anon_sym_EQ] = ACTIONS(1250),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1752),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1752),\n    [anon_sym_async] = ACTIONS(1752),\n    [anon_sym_fn] = ACTIONS(1752),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1252),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1752),\n    [anon_sym_declare] = ACTIONS(1752),\n    [anon_sym_public] = ACTIONS(1752),\n    [anon_sym_private] = ACTIONS(1752),\n    [anon_sym_protected] = ACTIONS(1752),\n    [anon_sym_override] = ACTIONS(1752),\n    [anon_sym_readonly] = ACTIONS(1752),\n    [anon_sym_module] = ACTIONS(1752),\n    [anon_sym_any] = ACTIONS(1752),\n    [anon_sym_number] = ACTIONS(1752),\n    [anon_sym_int] = ACTIONS(1752),\n    [anon_sym_float] = ACTIONS(1752),\n    [anon_sym_float2] = ACTIONS(1752),\n    [anon_sym_float3] = ACTIONS(1752),\n    [anon_sym_float4] = ACTIONS(1752),\n    [anon_sym_float3x3] = ACTIONS(1752),\n    [anon_sym_float2x2] = ACTIONS(1752),\n    [anon_sym_float4x4] = ACTIONS(1752),\n    [anon_sym_int2] = ACTIONS(1752),\n    [anon_sym_int3] = ACTIONS(1752),\n    [anon_sym_int4] = ACTIONS(1752),\n    [anon_sym_int3x3] = ACTIONS(1752),\n    [anon_sym_int2x2] = ACTIONS(1752),\n    [anon_sym_int4x4] = ACTIONS(1752),\n    [anon_sym_boolean] = ACTIONS(1752),\n    [anon_sym_string] = ACTIONS(1752),\n    [anon_sym_symbol] = ACTIONS(1752),\n    [anon_sym_workgroup] = ACTIONS(1752),\n    [anon_sym_get] = ACTIONS(1752),\n    [anon_sym_set] = ACTIONS(1752),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [492] = {\n    [sym_statement_block] = STATE(1824),\n    [sym__call_signature] = STATE(3582),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1759),\n    [anon_sym_pub] = ACTIONS(1761),\n    [anon_sym_export] = ACTIONS(1761),\n    [anon_sym_type] = ACTIONS(1761),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1761),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1761),\n    [anon_sym_async] = ACTIONS(1761),\n    [anon_sym_fn] = ACTIONS(1761),\n    [anon_sym_fn_STAR] = ACTIONS(1739),\n    [anon_sym_EQ_GT] = ACTIONS(1248),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1761),\n    [anon_sym_declare] = ACTIONS(1761),\n    [anon_sym_public] = ACTIONS(1761),\n    [anon_sym_private] = ACTIONS(1761),\n    [anon_sym_protected] = ACTIONS(1761),\n    [anon_sym_override] = ACTIONS(1761),\n    [anon_sym_readonly] = ACTIONS(1761),\n    [anon_sym_module] = ACTIONS(1761),\n    [anon_sym_any] = ACTIONS(1761),\n    [anon_sym_number] = ACTIONS(1761),\n    [anon_sym_int] = ACTIONS(1761),\n    [anon_sym_float] = ACTIONS(1761),\n    [anon_sym_float2] = ACTIONS(1761),\n    [anon_sym_float3] = ACTIONS(1761),\n    [anon_sym_float4] = ACTIONS(1761),\n    [anon_sym_float3x3] = ACTIONS(1761),\n    [anon_sym_float2x2] = ACTIONS(1761),\n    [anon_sym_float4x4] = ACTIONS(1761),\n    [anon_sym_int2] = ACTIONS(1761),\n    [anon_sym_int3] = ACTIONS(1761),\n    [anon_sym_int4] = ACTIONS(1761),\n    [anon_sym_int3x3] = ACTIONS(1761),\n    [anon_sym_int2x2] = ACTIONS(1761),\n    [anon_sym_int4x4] = ACTIONS(1761),\n    [anon_sym_boolean] = ACTIONS(1761),\n    [anon_sym_string] = ACTIONS(1761),\n    [anon_sym_symbol] = ACTIONS(1761),\n    [anon_sym_workgroup] = ACTIONS(1761),\n    [anon_sym_get] = ACTIONS(1761),\n    [anon_sym_set] = ACTIONS(1761),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [493] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3388),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1727),\n    [anon_sym_pub] = ACTIONS(1729),\n    [anon_sym_export] = ACTIONS(1729),\n    [anon_sym_type] = ACTIONS(1729),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1729),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1729),\n    [anon_sym_async] = ACTIONS(1729),\n    [anon_sym_fn] = ACTIONS(1729),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1729),\n    [anon_sym_declare] = ACTIONS(1729),\n    [anon_sym_public] = ACTIONS(1729),\n    [anon_sym_private] = ACTIONS(1729),\n    [anon_sym_protected] = ACTIONS(1729),\n    [anon_sym_override] = ACTIONS(1729),\n    [anon_sym_readonly] = ACTIONS(1729),\n    [anon_sym_module] = ACTIONS(1729),\n    [anon_sym_any] = ACTIONS(1729),\n    [anon_sym_number] = ACTIONS(1729),\n    [anon_sym_int] = ACTIONS(1729),\n    [anon_sym_float] = ACTIONS(1729),\n    [anon_sym_float2] = ACTIONS(1729),\n    [anon_sym_float3] = ACTIONS(1729),\n    [anon_sym_float4] = ACTIONS(1729),\n    [anon_sym_float3x3] = ACTIONS(1729),\n    [anon_sym_float2x2] = ACTIONS(1729),\n    [anon_sym_float4x4] = ACTIONS(1729),\n    [anon_sym_int2] = ACTIONS(1729),\n    [anon_sym_int3] = ACTIONS(1729),\n    [anon_sym_int4] = ACTIONS(1729),\n    [anon_sym_int3x3] = ACTIONS(1729),\n    [anon_sym_int2x2] = ACTIONS(1729),\n    [anon_sym_int4x4] = ACTIONS(1729),\n    [anon_sym_boolean] = ACTIONS(1729),\n    [anon_sym_string] = ACTIONS(1729),\n    [anon_sym_symbol] = ACTIONS(1729),\n    [anon_sym_workgroup] = ACTIONS(1729),\n    [anon_sym_get] = ACTIONS(1729),\n    [anon_sym_set] = ACTIONS(1729),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [494] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3527),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1765),\n    [anon_sym_pub] = ACTIONS(1767),\n    [anon_sym_export] = ACTIONS(1767),\n    [anon_sym_type] = ACTIONS(1767),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1767),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1767),\n    [anon_sym_async] = ACTIONS(1767),\n    [anon_sym_fn] = ACTIONS(1767),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1292),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1767),\n    [anon_sym_declare] = ACTIONS(1767),\n    [anon_sym_public] = ACTIONS(1767),\n    [anon_sym_private] = ACTIONS(1767),\n    [anon_sym_protected] = ACTIONS(1767),\n    [anon_sym_override] = ACTIONS(1767),\n    [anon_sym_readonly] = ACTIONS(1767),\n    [anon_sym_module] = ACTIONS(1767),\n    [anon_sym_any] = ACTIONS(1767),\n    [anon_sym_number] = ACTIONS(1767),\n    [anon_sym_int] = ACTIONS(1767),\n    [anon_sym_float] = ACTIONS(1767),\n    [anon_sym_float2] = ACTIONS(1767),\n    [anon_sym_float3] = ACTIONS(1767),\n    [anon_sym_float4] = ACTIONS(1767),\n    [anon_sym_float3x3] = ACTIONS(1767),\n    [anon_sym_float2x2] = ACTIONS(1767),\n    [anon_sym_float4x4] = ACTIONS(1767),\n    [anon_sym_int2] = ACTIONS(1767),\n    [anon_sym_int3] = ACTIONS(1767),\n    [anon_sym_int4] = ACTIONS(1767),\n    [anon_sym_int3x3] = ACTIONS(1767),\n    [anon_sym_int2x2] = ACTIONS(1767),\n    [anon_sym_int4x4] = ACTIONS(1767),\n    [anon_sym_boolean] = ACTIONS(1767),\n    [anon_sym_string] = ACTIONS(1767),\n    [anon_sym_symbol] = ACTIONS(1767),\n    [anon_sym_workgroup] = ACTIONS(1767),\n    [anon_sym_get] = ACTIONS(1767),\n    [anon_sym_set] = ACTIONS(1767),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [495] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3388),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1727),\n    [anon_sym_pub] = ACTIONS(1729),\n    [anon_sym_export] = ACTIONS(1729),\n    [anon_sym_type] = ACTIONS(1729),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1729),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(1745),\n    [anon_sym_of] = ACTIONS(1748),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1729),\n    [anon_sym_async] = ACTIONS(1729),\n    [anon_sym_fn] = ACTIONS(1729),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1729),\n    [anon_sym_declare] = ACTIONS(1729),\n    [anon_sym_public] = ACTIONS(1729),\n    [anon_sym_private] = ACTIONS(1729),\n    [anon_sym_protected] = ACTIONS(1729),\n    [anon_sym_override] = ACTIONS(1729),\n    [anon_sym_readonly] = ACTIONS(1729),\n    [anon_sym_module] = ACTIONS(1729),\n    [anon_sym_any] = ACTIONS(1729),\n    [anon_sym_number] = ACTIONS(1729),\n    [anon_sym_int] = ACTIONS(1729),\n    [anon_sym_float] = ACTIONS(1729),\n    [anon_sym_float2] = ACTIONS(1729),\n    [anon_sym_float3] = ACTIONS(1729),\n    [anon_sym_float4] = ACTIONS(1729),\n    [anon_sym_float3x3] = ACTIONS(1729),\n    [anon_sym_float2x2] = ACTIONS(1729),\n    [anon_sym_float4x4] = ACTIONS(1729),\n    [anon_sym_int2] = ACTIONS(1729),\n    [anon_sym_int3] = ACTIONS(1729),\n    [anon_sym_int4] = ACTIONS(1729),\n    [anon_sym_int3x3] = ACTIONS(1729),\n    [anon_sym_int2x2] = ACTIONS(1729),\n    [anon_sym_int4x4] = ACTIONS(1729),\n    [anon_sym_boolean] = ACTIONS(1729),\n    [anon_sym_string] = ACTIONS(1729),\n    [anon_sym_symbol] = ACTIONS(1729),\n    [anon_sym_workgroup] = ACTIONS(1729),\n    [anon_sym_get] = ACTIONS(1729),\n    [anon_sym_set] = ACTIONS(1729),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [496] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3527),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1765),\n    [anon_sym_pub] = ACTIONS(1767),\n    [anon_sym_export] = ACTIONS(1767),\n    [anon_sym_type] = ACTIONS(1767),\n    [anon_sym_EQ] = ACTIONS(1290),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1767),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1767),\n    [anon_sym_async] = ACTIONS(1767),\n    [anon_sym_fn] = ACTIONS(1767),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(1292),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1767),\n    [anon_sym_declare] = ACTIONS(1767),\n    [anon_sym_public] = ACTIONS(1767),\n    [anon_sym_private] = ACTIONS(1767),\n    [anon_sym_protected] = ACTIONS(1767),\n    [anon_sym_override] = ACTIONS(1767),\n    [anon_sym_readonly] = ACTIONS(1767),\n    [anon_sym_module] = ACTIONS(1767),\n    [anon_sym_any] = ACTIONS(1767),\n    [anon_sym_number] = ACTIONS(1767),\n    [anon_sym_int] = ACTIONS(1767),\n    [anon_sym_float] = ACTIONS(1767),\n    [anon_sym_float2] = ACTIONS(1767),\n    [anon_sym_float3] = ACTIONS(1767),\n    [anon_sym_float4] = ACTIONS(1767),\n    [anon_sym_float3x3] = ACTIONS(1767),\n    [anon_sym_float2x2] = ACTIONS(1767),\n    [anon_sym_float4x4] = ACTIONS(1767),\n    [anon_sym_int2] = ACTIONS(1767),\n    [anon_sym_int3] = ACTIONS(1767),\n    [anon_sym_int4] = ACTIONS(1767),\n    [anon_sym_int3x3] = ACTIONS(1767),\n    [anon_sym_int2x2] = ACTIONS(1767),\n    [anon_sym_int4x4] = ACTIONS(1767),\n    [anon_sym_boolean] = ACTIONS(1767),\n    [anon_sym_string] = ACTIONS(1767),\n    [anon_sym_symbol] = ACTIONS(1767),\n    [anon_sym_workgroup] = ACTIONS(1767),\n    [anon_sym_get] = ACTIONS(1767),\n    [anon_sym_set] = ACTIONS(1767),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [497] = {\n    [sym_statement_block] = STATE(1572),\n    [sym__call_signature] = STATE(3388),\n    [sym_formal_parameters] = STATE(2496),\n    [sym_type_parameters] = STATE(3256),\n    [sym_identifier] = ACTIONS(1727),\n    [anon_sym_pub] = ACTIONS(1729),\n    [anon_sym_export] = ACTIONS(1729),\n    [anon_sym_type] = ACTIONS(1729),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1729),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(1723),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(1712),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1729),\n    [anon_sym_async] = ACTIONS(1729),\n    [anon_sym_fn] = ACTIONS(1729),\n    [anon_sym_fn_STAR] = ACTIONS(1725),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_static] = ACTIONS(1729),\n    [anon_sym_declare] = ACTIONS(1729),\n    [anon_sym_public] = ACTIONS(1729),\n    [anon_sym_private] = ACTIONS(1729),\n    [anon_sym_protected] = ACTIONS(1729),\n    [anon_sym_override] = ACTIONS(1729),\n    [anon_sym_readonly] = ACTIONS(1729),\n    [anon_sym_module] = ACTIONS(1729),\n    [anon_sym_any] = ACTIONS(1729),\n    [anon_sym_number] = ACTIONS(1729),\n    [anon_sym_int] = ACTIONS(1729),\n    [anon_sym_float] = ACTIONS(1729),\n    [anon_sym_float2] = ACTIONS(1729),\n    [anon_sym_float3] = ACTIONS(1729),\n    [anon_sym_float4] = ACTIONS(1729),\n    [anon_sym_float3x3] = ACTIONS(1729),\n    [anon_sym_float2x2] = ACTIONS(1729),\n    [anon_sym_float4x4] = ACTIONS(1729),\n    [anon_sym_int2] = ACTIONS(1729),\n    [anon_sym_int3] = ACTIONS(1729),\n    [anon_sym_int4] = ACTIONS(1729),\n    [anon_sym_int3x3] = ACTIONS(1729),\n    [anon_sym_int2x2] = ACTIONS(1729),\n    [anon_sym_int4x4] = ACTIONS(1729),\n    [anon_sym_boolean] = ACTIONS(1729),\n    [anon_sym_string] = ACTIONS(1729),\n    [anon_sym_symbol] = ACTIONS(1729),\n    [anon_sym_workgroup] = ACTIONS(1729),\n    [anon_sym_get] = ACTIONS(1729),\n    [anon_sym_set] = ACTIONS(1729),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [498] = {\n    [ts_builtin_sym_end] = ACTIONS(1302),\n    [sym_identifier] = ACTIONS(1304),\n    [anon_sym_pub] = ACTIONS(1304),\n    [anon_sym_export] = ACTIONS(1304),\n    [anon_sym_type] = ACTIONS(1304),\n    [anon_sym_namespace] = ACTIONS(1304),\n    [anon_sym_LBRACE] = ACTIONS(1302),\n    [anon_sym_COMMA] = ACTIONS(1302),\n    [anon_sym_RBRACE] = ACTIONS(1302),\n    [anon_sym_typeof] = ACTIONS(1304),\n    [anon_sym_import] = ACTIONS(1304),\n    [anon_sym_var] = ACTIONS(1304),\n    [anon_sym_let] = ACTIONS(1304),\n    [anon_sym_const] = ACTIONS(1304),\n    [anon_sym_BANG] = ACTIONS(1302),\n    [anon_sym_else] = ACTIONS(1304),\n    [anon_sym_if] = ACTIONS(1304),\n    [anon_sym_switch] = ACTIONS(1304),\n    [anon_sym_for] = ACTIONS(1304),\n    [anon_sym_LPAREN] = ACTIONS(1302),\n    [anon_sym_await] = ACTIONS(1304),\n    [anon_sym_while] = ACTIONS(1304),\n    [anon_sym_do] = ACTIONS(1304),\n    [anon_sym_try] = ACTIONS(1304),\n    [anon_sym_with] = ACTIONS(1304),\n    [anon_sym_break] = ACTIONS(1304),\n    [anon_sym_continue] = ACTIONS(1304),\n    [anon_sym_debugger] = ACTIONS(1304),\n    [anon_sym_return] = ACTIONS(1304),\n    [anon_sym_throw] = ACTIONS(1304),\n    [anon_sym_SEMI] = ACTIONS(1302),\n    [anon_sym_case] = ACTIONS(1304),\n    [anon_sym_default] = ACTIONS(1304),\n    [anon_sym_catch] = ACTIONS(1304),\n    [anon_sym_finally] = ACTIONS(1304),\n    [anon_sym_yield] = ACTIONS(1304),\n    [anon_sym_LBRACK] = ACTIONS(1302),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1302),\n    [anon_sym_LT] = ACTIONS(1304),\n    [anon_sym_SLASH] = ACTIONS(1304),\n    [anon_sym_struct] = ACTIONS(1304),\n    [anon_sym_async] = ACTIONS(1304),\n    [anon_sym_fn] = ACTIONS(1304),\n    [anon_sym_fn_STAR] = ACTIONS(1302),\n    [anon_sym_new] = ACTIONS(1304),\n    [anon_sym_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH] = ACTIONS(1304),\n    [anon_sym_TILDE] = ACTIONS(1302),\n    [anon_sym_void] = ACTIONS(1304),\n    [anon_sym_delete] = ACTIONS(1304),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1302),\n    [anon_sym_DASH_DASH] = ACTIONS(1302),\n    [anon_sym_DQUOTE] = ACTIONS(1302),\n    [anon_sym_SQUOTE] = ACTIONS(1302),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1302),\n    [sym_number] = ACTIONS(1302),\n    [sym_this] = ACTIONS(1304),\n    [sym_super] = ACTIONS(1304),\n    [sym_true] = ACTIONS(1304),\n    [sym_false] = ACTIONS(1304),\n    [sym_null] = ACTIONS(1304),\n    [sym_undefined] = ACTIONS(1304),\n    [anon_sym_AT] = ACTIONS(1302),\n    [anon_sym_static] = ACTIONS(1304),\n    [anon_sym_declare] = ACTIONS(1304),\n    [anon_sym_public] = ACTIONS(1304),\n    [anon_sym_private] = ACTIONS(1304),\n    [anon_sym_protected] = ACTIONS(1304),\n    [anon_sym_override] = ACTIONS(1304),\n    [anon_sym_readonly] = ACTIONS(1304),\n    [anon_sym_module] = ACTIONS(1304),\n    [anon_sym_any] = ACTIONS(1304),\n    [anon_sym_number] = ACTIONS(1304),\n    [anon_sym_int] = ACTIONS(1304),\n    [anon_sym_float] = ACTIONS(1304),\n    [anon_sym_float2] = ACTIONS(1304),\n    [anon_sym_float3] = ACTIONS(1304),\n    [anon_sym_float4] = ACTIONS(1304),\n    [anon_sym_float3x3] = ACTIONS(1304),\n    [anon_sym_float2x2] = ACTIONS(1304),\n    [anon_sym_float4x4] = ACTIONS(1304),\n    [anon_sym_int2] = ACTIONS(1304),\n    [anon_sym_int3] = ACTIONS(1304),\n    [anon_sym_int4] = ACTIONS(1304),\n    [anon_sym_int3x3] = ACTIONS(1304),\n    [anon_sym_int2x2] = ACTIONS(1304),\n    [anon_sym_int4x4] = ACTIONS(1304),\n    [anon_sym_boolean] = ACTIONS(1304),\n    [anon_sym_string] = ACTIONS(1304),\n    [anon_sym_symbol] = ACTIONS(1304),\n    [anon_sym_workgroup] = ACTIONS(1304),\n    [anon_sym_get] = ACTIONS(1304),\n    [anon_sym_set] = ACTIONS(1304),\n    [anon_sym_trait] = ACTIONS(1304),\n    [anon_sym_impl] = ACTIONS(1304),\n    [anon_sym_enum] = ACTIONS(1304),\n    [anon_sym_shader] = ACTIONS(1304),\n    [sym__automatic_semicolon] = ACTIONS(1312),\n  },\n  [499] = {\n    [sym_catch_clause] = STATE(506),\n    [sym_finally_clause] = STATE(608),\n    [ts_builtin_sym_end] = ACTIONS(1769),\n    [sym_identifier] = ACTIONS(1771),\n    [anon_sym_pub] = ACTIONS(1771),\n    [anon_sym_export] = ACTIONS(1771),\n    [anon_sym_type] = ACTIONS(1771),\n    [anon_sym_namespace] = ACTIONS(1771),\n    [anon_sym_LBRACE] = ACTIONS(1769),\n    [anon_sym_RBRACE] = ACTIONS(1769),\n    [anon_sym_typeof] = ACTIONS(1771),\n    [anon_sym_import] = ACTIONS(1771),\n    [anon_sym_var] = ACTIONS(1771),\n    [anon_sym_let] = ACTIONS(1771),\n    [anon_sym_const] = ACTIONS(1771),\n    [anon_sym_BANG] = ACTIONS(1769),\n    [anon_sym_else] = ACTIONS(1771),\n    [anon_sym_if] = ACTIONS(1771),\n    [anon_sym_switch] = ACTIONS(1771),\n    [anon_sym_for] = ACTIONS(1771),\n    [anon_sym_LPAREN] = ACTIONS(1769),\n    [anon_sym_await] = ACTIONS(1771),\n    [anon_sym_while] = ACTIONS(1771),\n    [anon_sym_do] = ACTIONS(1771),\n    [anon_sym_try] = ACTIONS(1771),\n    [anon_sym_with] = ACTIONS(1771),\n    [anon_sym_break] = ACTIONS(1771),\n    [anon_sym_continue] = ACTIONS(1771),\n    [anon_sym_debugger] = ACTIONS(1771),\n    [anon_sym_return] = ACTIONS(1771),\n    [anon_sym_throw] = ACTIONS(1771),\n    [anon_sym_SEMI] = ACTIONS(1769),\n    [anon_sym_case] = ACTIONS(1771),\n    [anon_sym_default] = ACTIONS(1771),\n    [anon_sym_catch] = ACTIONS(1773),\n    [anon_sym_finally] = ACTIONS(1775),\n    [anon_sym_yield] = ACTIONS(1771),\n    [anon_sym_LBRACK] = ACTIONS(1769),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1769),\n    [anon_sym_LT] = ACTIONS(1771),\n    [anon_sym_SLASH] = ACTIONS(1771),\n    [anon_sym_struct] = ACTIONS(1771),\n    [anon_sym_async] = ACTIONS(1771),\n    [anon_sym_fn] = ACTIONS(1771),\n    [anon_sym_fn_STAR] = ACTIONS(1769),\n    [anon_sym_new] = ACTIONS(1771),\n    [anon_sym_PLUS] = ACTIONS(1771),\n    [anon_sym_DASH] = ACTIONS(1771),\n    [anon_sym_TILDE] = ACTIONS(1769),\n    [anon_sym_void] = ACTIONS(1771),\n    [anon_sym_delete] = ACTIONS(1771),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1769),\n    [anon_sym_DASH_DASH] = ACTIONS(1769),\n    [anon_sym_DQUOTE] = ACTIONS(1769),\n    [anon_sym_SQUOTE] = ACTIONS(1769),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1769),\n    [sym_number] = ACTIONS(1769),\n    [sym_this] = ACTIONS(1771),\n    [sym_super] = ACTIONS(1771),\n    [sym_true] = ACTIONS(1771),\n    [sym_false] = ACTIONS(1771),\n    [sym_null] = ACTIONS(1771),\n    [sym_undefined] = ACTIONS(1771),\n    [anon_sym_AT] = ACTIONS(1769),\n    [anon_sym_static] = ACTIONS(1771),\n    [anon_sym_declare] = ACTIONS(1771),\n    [anon_sym_public] = ACTIONS(1771),\n    [anon_sym_private] = ACTIONS(1771),\n    [anon_sym_protected] = ACTIONS(1771),\n    [anon_sym_override] = ACTIONS(1771),\n    [anon_sym_readonly] = ACTIONS(1771),\n    [anon_sym_module] = ACTIONS(1771),\n    [anon_sym_any] = ACTIONS(1771),\n    [anon_sym_number] = ACTIONS(1771),\n    [anon_sym_int] = ACTIONS(1771),\n    [anon_sym_float] = ACTIONS(1771),\n    [anon_sym_float2] = ACTIONS(1771),\n    [anon_sym_float3] = ACTIONS(1771),\n    [anon_sym_float4] = ACTIONS(1771),\n    [anon_sym_float3x3] = ACTIONS(1771),\n    [anon_sym_float2x2] = ACTIONS(1771),\n    [anon_sym_float4x4] = ACTIONS(1771),\n    [anon_sym_int2] = ACTIONS(1771),\n    [anon_sym_int3] = ACTIONS(1771),\n    [anon_sym_int4] = ACTIONS(1771),\n    [anon_sym_int3x3] = ACTIONS(1771),\n    [anon_sym_int2x2] = ACTIONS(1771),\n    [anon_sym_int4x4] = ACTIONS(1771),\n    [anon_sym_boolean] = ACTIONS(1771),\n    [anon_sym_string] = ACTIONS(1771),\n    [anon_sym_symbol] = ACTIONS(1771),\n    [anon_sym_workgroup] = ACTIONS(1771),\n    [anon_sym_get] = ACTIONS(1771),\n    [anon_sym_set] = ACTIONS(1771),\n    [anon_sym_trait] = ACTIONS(1771),\n    [anon_sym_impl] = ACTIONS(1771),\n    [anon_sym_enum] = ACTIONS(1771),\n    [anon_sym_shader] = ACTIONS(1771),\n  },\n  [500] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_pub] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_type] = ACTIONS(1328),\n    [anon_sym_namespace] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_COMMA] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_BANG] = ACTIONS(1326),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1326),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_with] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_SEMI] = ACTIONS(1326),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_catch] = ACTIONS(1328),\n    [anon_sym_finally] = ACTIONS(1328),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_LBRACK] = ACTIONS(1326),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1326),\n    [anon_sym_LT] = ACTIONS(1328),\n    [anon_sym_SLASH] = ACTIONS(1328),\n    [anon_sym_struct] = ACTIONS(1328),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_fn] = ACTIONS(1328),\n    [anon_sym_fn_STAR] = ACTIONS(1326),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_PLUS] = ACTIONS(1328),\n    [anon_sym_DASH] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1326),\n    [anon_sym_DASH_DASH] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1326),\n    [sym_number] = ACTIONS(1326),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_static] = ACTIONS(1328),\n    [anon_sym_declare] = ACTIONS(1328),\n    [anon_sym_public] = ACTIONS(1328),\n    [anon_sym_private] = ACTIONS(1328),\n    [anon_sym_protected] = ACTIONS(1328),\n    [anon_sym_override] = ACTIONS(1328),\n    [anon_sym_readonly] = ACTIONS(1328),\n    [anon_sym_module] = ACTIONS(1328),\n    [anon_sym_any] = ACTIONS(1328),\n    [anon_sym_number] = ACTIONS(1328),\n    [anon_sym_int] = ACTIONS(1328),\n    [anon_sym_float] = ACTIONS(1328),\n    [anon_sym_float2] = ACTIONS(1328),\n    [anon_sym_float3] = ACTIONS(1328),\n    [anon_sym_float4] = ACTIONS(1328),\n    [anon_sym_float3x3] = ACTIONS(1328),\n    [anon_sym_float2x2] = ACTIONS(1328),\n    [anon_sym_float4x4] = ACTIONS(1328),\n    [anon_sym_int2] = ACTIONS(1328),\n    [anon_sym_int3] = ACTIONS(1328),\n    [anon_sym_int4] = ACTIONS(1328),\n    [anon_sym_int3x3] = ACTIONS(1328),\n    [anon_sym_int2x2] = ACTIONS(1328),\n    [anon_sym_int4x4] = ACTIONS(1328),\n    [anon_sym_boolean] = ACTIONS(1328),\n    [anon_sym_string] = ACTIONS(1328),\n    [anon_sym_symbol] = ACTIONS(1328),\n    [anon_sym_workgroup] = ACTIONS(1328),\n    [anon_sym_get] = ACTIONS(1328),\n    [anon_sym_set] = ACTIONS(1328),\n    [anon_sym_trait] = ACTIONS(1328),\n    [anon_sym_impl] = ACTIONS(1328),\n    [anon_sym_enum] = ACTIONS(1328),\n    [anon_sym_shader] = ACTIONS(1328),\n    [sym__automatic_semicolon] = ACTIONS(1777),\n  },\n  [501] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_pub] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_type] = ACTIONS(1328),\n    [anon_sym_namespace] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_COMMA] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_BANG] = ACTIONS(1326),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1326),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_with] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_SEMI] = ACTIONS(1326),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_catch] = ACTIONS(1328),\n    [anon_sym_finally] = ACTIONS(1328),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_LBRACK] = ACTIONS(1326),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1326),\n    [anon_sym_LT] = ACTIONS(1328),\n    [anon_sym_SLASH] = ACTIONS(1328),\n    [anon_sym_struct] = ACTIONS(1328),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_fn] = ACTIONS(1328),\n    [anon_sym_fn_STAR] = ACTIONS(1326),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_PLUS] = ACTIONS(1328),\n    [anon_sym_DASH] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1326),\n    [anon_sym_DASH_DASH] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1326),\n    [sym_number] = ACTIONS(1326),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_static] = ACTIONS(1328),\n    [anon_sym_declare] = ACTIONS(1328),\n    [anon_sym_public] = ACTIONS(1328),\n    [anon_sym_private] = ACTIONS(1328),\n    [anon_sym_protected] = ACTIONS(1328),\n    [anon_sym_override] = ACTIONS(1328),\n    [anon_sym_readonly] = ACTIONS(1328),\n    [anon_sym_module] = ACTIONS(1328),\n    [anon_sym_any] = ACTIONS(1328),\n    [anon_sym_number] = ACTIONS(1328),\n    [anon_sym_int] = ACTIONS(1328),\n    [anon_sym_float] = ACTIONS(1328),\n    [anon_sym_float2] = ACTIONS(1328),\n    [anon_sym_float3] = ACTIONS(1328),\n    [anon_sym_float4] = ACTIONS(1328),\n    [anon_sym_float3x3] = ACTIONS(1328),\n    [anon_sym_float2x2] = ACTIONS(1328),\n    [anon_sym_float4x4] = ACTIONS(1328),\n    [anon_sym_int2] = ACTIONS(1328),\n    [anon_sym_int3] = ACTIONS(1328),\n    [anon_sym_int4] = ACTIONS(1328),\n    [anon_sym_int3x3] = ACTIONS(1328),\n    [anon_sym_int2x2] = ACTIONS(1328),\n    [anon_sym_int4x4] = ACTIONS(1328),\n    [anon_sym_boolean] = ACTIONS(1328),\n    [anon_sym_string] = ACTIONS(1328),\n    [anon_sym_symbol] = ACTIONS(1328),\n    [anon_sym_workgroup] = ACTIONS(1328),\n    [anon_sym_get] = ACTIONS(1328),\n    [anon_sym_set] = ACTIONS(1328),\n    [anon_sym_trait] = ACTIONS(1328),\n    [anon_sym_impl] = ACTIONS(1328),\n    [anon_sym_enum] = ACTIONS(1328),\n    [anon_sym_shader] = ACTIONS(1328),\n  },\n  [502] = {\n    [ts_builtin_sym_end] = ACTIONS(1358),\n    [sym_identifier] = ACTIONS(1360),\n    [anon_sym_pub] = ACTIONS(1360),\n    [anon_sym_export] = ACTIONS(1360),\n    [anon_sym_type] = ACTIONS(1360),\n    [anon_sym_namespace] = ACTIONS(1360),\n    [anon_sym_LBRACE] = ACTIONS(1358),\n    [anon_sym_COMMA] = ACTIONS(1358),\n    [anon_sym_RBRACE] = ACTIONS(1358),\n    [anon_sym_typeof] = ACTIONS(1360),\n    [anon_sym_import] = ACTIONS(1360),\n    [anon_sym_var] = ACTIONS(1360),\n    [anon_sym_let] = ACTIONS(1360),\n    [anon_sym_const] = ACTIONS(1360),\n    [anon_sym_BANG] = ACTIONS(1358),\n    [anon_sym_else] = ACTIONS(1360),\n    [anon_sym_if] = ACTIONS(1360),\n    [anon_sym_switch] = ACTIONS(1360),\n    [anon_sym_for] = ACTIONS(1360),\n    [anon_sym_LPAREN] = ACTIONS(1358),\n    [anon_sym_await] = ACTIONS(1360),\n    [anon_sym_while] = ACTIONS(1360),\n    [anon_sym_do] = ACTIONS(1360),\n    [anon_sym_try] = ACTIONS(1360),\n    [anon_sym_with] = ACTIONS(1360),\n    [anon_sym_break] = ACTIONS(1360),\n    [anon_sym_continue] = ACTIONS(1360),\n    [anon_sym_debugger] = ACTIONS(1360),\n    [anon_sym_return] = ACTIONS(1360),\n    [anon_sym_throw] = ACTIONS(1360),\n    [anon_sym_SEMI] = ACTIONS(1358),\n    [anon_sym_case] = ACTIONS(1360),\n    [anon_sym_default] = ACTIONS(1360),\n    [anon_sym_catch] = ACTIONS(1360),\n    [anon_sym_finally] = ACTIONS(1360),\n    [anon_sym_yield] = ACTIONS(1360),\n    [anon_sym_LBRACK] = ACTIONS(1358),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1358),\n    [anon_sym_LT] = ACTIONS(1360),\n    [anon_sym_SLASH] = ACTIONS(1360),\n    [anon_sym_struct] = ACTIONS(1360),\n    [anon_sym_async] = ACTIONS(1360),\n    [anon_sym_fn] = ACTIONS(1360),\n    [anon_sym_fn_STAR] = ACTIONS(1358),\n    [anon_sym_new] = ACTIONS(1360),\n    [anon_sym_PLUS] = ACTIONS(1360),\n    [anon_sym_DASH] = ACTIONS(1360),\n    [anon_sym_TILDE] = ACTIONS(1358),\n    [anon_sym_void] = ACTIONS(1360),\n    [anon_sym_delete] = ACTIONS(1360),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1358),\n    [anon_sym_DASH_DASH] = ACTIONS(1358),\n    [anon_sym_DQUOTE] = ACTIONS(1358),\n    [anon_sym_SQUOTE] = ACTIONS(1358),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1358),\n    [sym_number] = ACTIONS(1358),\n    [sym_this] = ACTIONS(1360),\n    [sym_super] = ACTIONS(1360),\n    [sym_true] = ACTIONS(1360),\n    [sym_false] = ACTIONS(1360),\n    [sym_null] = ACTIONS(1360),\n    [sym_undefined] = ACTIONS(1360),\n    [anon_sym_AT] = ACTIONS(1358),\n    [anon_sym_static] = ACTIONS(1360),\n    [anon_sym_declare] = ACTIONS(1360),\n    [anon_sym_public] = ACTIONS(1360),\n    [anon_sym_private] = ACTIONS(1360),\n    [anon_sym_protected] = ACTIONS(1360),\n    [anon_sym_override] = ACTIONS(1360),\n    [anon_sym_readonly] = ACTIONS(1360),\n    [anon_sym_module] = ACTIONS(1360),\n    [anon_sym_any] = ACTIONS(1360),\n    [anon_sym_number] = ACTIONS(1360),\n    [anon_sym_int] = ACTIONS(1360),\n    [anon_sym_float] = ACTIONS(1360),\n    [anon_sym_float2] = ACTIONS(1360),\n    [anon_sym_float3] = ACTIONS(1360),\n    [anon_sym_float4] = ACTIONS(1360),\n    [anon_sym_float3x3] = ACTIONS(1360),\n    [anon_sym_float2x2] = ACTIONS(1360),\n    [anon_sym_float4x4] = ACTIONS(1360),\n    [anon_sym_int2] = ACTIONS(1360),\n    [anon_sym_int3] = ACTIONS(1360),\n    [anon_sym_int4] = ACTIONS(1360),\n    [anon_sym_int3x3] = ACTIONS(1360),\n    [anon_sym_int2x2] = ACTIONS(1360),\n    [anon_sym_int4x4] = ACTIONS(1360),\n    [anon_sym_boolean] = ACTIONS(1360),\n    [anon_sym_string] = ACTIONS(1360),\n    [anon_sym_symbol] = ACTIONS(1360),\n    [anon_sym_workgroup] = ACTIONS(1360),\n    [anon_sym_get] = ACTIONS(1360),\n    [anon_sym_set] = ACTIONS(1360),\n    [anon_sym_trait] = ACTIONS(1360),\n    [anon_sym_impl] = ACTIONS(1360),\n    [anon_sym_enum] = ACTIONS(1360),\n    [anon_sym_shader] = ACTIONS(1360),\n  },\n  [503] = {\n    [sym_declaration] = STATE(600),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1795),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(1800),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_override] = ACTIONS(1800),\n    [anon_sym_module] = ACTIONS(1804),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [504] = {\n    [sym_statement_block] = STATE(569),\n    [ts_builtin_sym_end] = ACTIONS(1294),\n    [sym_identifier] = ACTIONS(1296),\n    [anon_sym_pub] = ACTIONS(1296),\n    [anon_sym_export] = ACTIONS(1296),\n    [anon_sym_type] = ACTIONS(1296),\n    [anon_sym_namespace] = ACTIONS(1296),\n    [anon_sym_LBRACE] = ACTIONS(1812),\n    [anon_sym_RBRACE] = ACTIONS(1294),\n    [anon_sym_typeof] = ACTIONS(1296),\n    [anon_sym_import] = ACTIONS(1296),\n    [anon_sym_var] = ACTIONS(1296),\n    [anon_sym_let] = ACTIONS(1296),\n    [anon_sym_const] = ACTIONS(1296),\n    [anon_sym_BANG] = ACTIONS(1294),\n    [anon_sym_else] = ACTIONS(1296),\n    [anon_sym_if] = ACTIONS(1296),\n    [anon_sym_switch] = ACTIONS(1296),\n    [anon_sym_for] = ACTIONS(1296),\n    [anon_sym_LPAREN] = ACTIONS(1294),\n    [anon_sym_await] = ACTIONS(1296),\n    [anon_sym_while] = ACTIONS(1296),\n    [anon_sym_do] = ACTIONS(1296),\n    [anon_sym_try] = ACTIONS(1296),\n    [anon_sym_with] = ACTIONS(1296),\n    [anon_sym_break] = ACTIONS(1296),\n    [anon_sym_continue] = ACTIONS(1296),\n    [anon_sym_debugger] = ACTIONS(1296),\n    [anon_sym_return] = ACTIONS(1296),\n    [anon_sym_throw] = ACTIONS(1296),\n    [anon_sym_SEMI] = ACTIONS(1294),\n    [anon_sym_case] = ACTIONS(1296),\n    [anon_sym_default] = ACTIONS(1296),\n    [anon_sym_yield] = ACTIONS(1296),\n    [anon_sym_LBRACK] = ACTIONS(1294),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1294),\n    [anon_sym_LT] = ACTIONS(1296),\n    [anon_sym_SLASH] = ACTIONS(1296),\n    [anon_sym_DOT] = ACTIONS(1814),\n    [anon_sym_struct] = ACTIONS(1296),\n    [anon_sym_async] = ACTIONS(1296),\n    [anon_sym_fn] = ACTIONS(1296),\n    [anon_sym_fn_STAR] = ACTIONS(1294),\n    [anon_sym_new] = ACTIONS(1296),\n    [anon_sym_PLUS] = ACTIONS(1296),\n    [anon_sym_DASH] = ACTIONS(1296),\n    [anon_sym_TILDE] = ACTIONS(1294),\n    [anon_sym_void] = ACTIONS(1296),\n    [anon_sym_delete] = ACTIONS(1296),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1294),\n    [anon_sym_DASH_DASH] = ACTIONS(1294),\n    [anon_sym_DQUOTE] = ACTIONS(1294),\n    [anon_sym_SQUOTE] = ACTIONS(1294),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1294),\n    [sym_number] = ACTIONS(1294),\n    [sym_this] = ACTIONS(1296),\n    [sym_super] = ACTIONS(1296),\n    [sym_true] = ACTIONS(1296),\n    [sym_false] = ACTIONS(1296),\n    [sym_null] = ACTIONS(1296),\n    [sym_undefined] = ACTIONS(1296),\n    [anon_sym_AT] = ACTIONS(1294),\n    [anon_sym_static] = ACTIONS(1296),\n    [anon_sym_declare] = ACTIONS(1296),\n    [anon_sym_public] = ACTIONS(1296),\n    [anon_sym_private] = ACTIONS(1296),\n    [anon_sym_protected] = ACTIONS(1296),\n    [anon_sym_override] = ACTIONS(1296),\n    [anon_sym_readonly] = ACTIONS(1296),\n    [anon_sym_module] = ACTIONS(1296),\n    [anon_sym_any] = ACTIONS(1296),\n    [anon_sym_number] = ACTIONS(1296),\n    [anon_sym_int] = ACTIONS(1296),\n    [anon_sym_float] = ACTIONS(1296),\n    [anon_sym_float2] = ACTIONS(1296),\n    [anon_sym_float3] = ACTIONS(1296),\n    [anon_sym_float4] = ACTIONS(1296),\n    [anon_sym_float3x3] = ACTIONS(1296),\n    [anon_sym_float2x2] = ACTIONS(1296),\n    [anon_sym_float4x4] = ACTIONS(1296),\n    [anon_sym_int2] = ACTIONS(1296),\n    [anon_sym_int3] = ACTIONS(1296),\n    [anon_sym_int4] = ACTIONS(1296),\n    [anon_sym_int3x3] = ACTIONS(1296),\n    [anon_sym_int2x2] = ACTIONS(1296),\n    [anon_sym_int4x4] = ACTIONS(1296),\n    [anon_sym_boolean] = ACTIONS(1296),\n    [anon_sym_string] = ACTIONS(1296),\n    [anon_sym_symbol] = ACTIONS(1296),\n    [anon_sym_workgroup] = ACTIONS(1296),\n    [anon_sym_get] = ACTIONS(1296),\n    [anon_sym_set] = ACTIONS(1296),\n    [anon_sym_trait] = ACTIONS(1296),\n    [anon_sym_impl] = ACTIONS(1296),\n    [anon_sym_enum] = ACTIONS(1296),\n    [anon_sym_shader] = ACTIONS(1296),\n  },\n  [505] = {\n    [sym_declaration] = STATE(600),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1795),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(1800),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_override] = ACTIONS(1800),\n    [anon_sym_module] = ACTIONS(1804),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [506] = {\n    [sym_finally_clause] = STATE(596),\n    [ts_builtin_sym_end] = ACTIONS(1816),\n    [sym_identifier] = ACTIONS(1818),\n    [anon_sym_pub] = ACTIONS(1818),\n    [anon_sym_export] = ACTIONS(1818),\n    [anon_sym_type] = ACTIONS(1818),\n    [anon_sym_namespace] = ACTIONS(1818),\n    [anon_sym_LBRACE] = ACTIONS(1816),\n    [anon_sym_RBRACE] = ACTIONS(1816),\n    [anon_sym_typeof] = ACTIONS(1818),\n    [anon_sym_import] = ACTIONS(1818),\n    [anon_sym_var] = ACTIONS(1818),\n    [anon_sym_let] = ACTIONS(1818),\n    [anon_sym_const] = ACTIONS(1818),\n    [anon_sym_BANG] = ACTIONS(1816),\n    [anon_sym_else] = ACTIONS(1818),\n    [anon_sym_if] = ACTIONS(1818),\n    [anon_sym_switch] = ACTIONS(1818),\n    [anon_sym_for] = ACTIONS(1818),\n    [anon_sym_LPAREN] = ACTIONS(1816),\n    [anon_sym_await] = ACTIONS(1818),\n    [anon_sym_while] = ACTIONS(1818),\n    [anon_sym_do] = ACTIONS(1818),\n    [anon_sym_try] = ACTIONS(1818),\n    [anon_sym_with] = ACTIONS(1818),\n    [anon_sym_break] = ACTIONS(1818),\n    [anon_sym_continue] = ACTIONS(1818),\n    [anon_sym_debugger] = ACTIONS(1818),\n    [anon_sym_return] = ACTIONS(1818),\n    [anon_sym_throw] = ACTIONS(1818),\n    [anon_sym_SEMI] = ACTIONS(1816),\n    [anon_sym_case] = ACTIONS(1818),\n    [anon_sym_default] = ACTIONS(1818),\n    [anon_sym_finally] = ACTIONS(1775),\n    [anon_sym_yield] = ACTIONS(1818),\n    [anon_sym_LBRACK] = ACTIONS(1816),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1816),\n    [anon_sym_LT] = ACTIONS(1818),\n    [anon_sym_SLASH] = ACTIONS(1818),\n    [anon_sym_struct] = ACTIONS(1818),\n    [anon_sym_async] = ACTIONS(1818),\n    [anon_sym_fn] = ACTIONS(1818),\n    [anon_sym_fn_STAR] = ACTIONS(1816),\n    [anon_sym_new] = ACTIONS(1818),\n    [anon_sym_PLUS] = ACTIONS(1818),\n    [anon_sym_DASH] = ACTIONS(1818),\n    [anon_sym_TILDE] = ACTIONS(1816),\n    [anon_sym_void] = ACTIONS(1818),\n    [anon_sym_delete] = ACTIONS(1818),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1816),\n    [anon_sym_DASH_DASH] = ACTIONS(1816),\n    [anon_sym_DQUOTE] = ACTIONS(1816),\n    [anon_sym_SQUOTE] = ACTIONS(1816),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1816),\n    [sym_number] = ACTIONS(1816),\n    [sym_this] = ACTIONS(1818),\n    [sym_super] = ACTIONS(1818),\n    [sym_true] = ACTIONS(1818),\n    [sym_false] = ACTIONS(1818),\n    [sym_null] = ACTIONS(1818),\n    [sym_undefined] = ACTIONS(1818),\n    [anon_sym_AT] = ACTIONS(1816),\n    [anon_sym_static] = ACTIONS(1818),\n    [anon_sym_declare] = ACTIONS(1818),\n    [anon_sym_public] = ACTIONS(1818),\n    [anon_sym_private] = ACTIONS(1818),\n    [anon_sym_protected] = ACTIONS(1818),\n    [anon_sym_override] = ACTIONS(1818),\n    [anon_sym_readonly] = ACTIONS(1818),\n    [anon_sym_module] = ACTIONS(1818),\n    [anon_sym_any] = ACTIONS(1818),\n    [anon_sym_number] = ACTIONS(1818),\n    [anon_sym_int] = ACTIONS(1818),\n    [anon_sym_float] = ACTIONS(1818),\n    [anon_sym_float2] = ACTIONS(1818),\n    [anon_sym_float3] = ACTIONS(1818),\n    [anon_sym_float4] = ACTIONS(1818),\n    [anon_sym_float3x3] = ACTIONS(1818),\n    [anon_sym_float2x2] = ACTIONS(1818),\n    [anon_sym_float4x4] = ACTIONS(1818),\n    [anon_sym_int2] = ACTIONS(1818),\n    [anon_sym_int3] = ACTIONS(1818),\n    [anon_sym_int4] = ACTIONS(1818),\n    [anon_sym_int3x3] = ACTIONS(1818),\n    [anon_sym_int2x2] = ACTIONS(1818),\n    [anon_sym_int4x4] = ACTIONS(1818),\n    [anon_sym_boolean] = ACTIONS(1818),\n    [anon_sym_string] = ACTIONS(1818),\n    [anon_sym_symbol] = ACTIONS(1818),\n    [anon_sym_workgroup] = ACTIONS(1818),\n    [anon_sym_get] = ACTIONS(1818),\n    [anon_sym_set] = ACTIONS(1818),\n    [anon_sym_trait] = ACTIONS(1818),\n    [anon_sym_impl] = ACTIONS(1818),\n    [anon_sym_enum] = ACTIONS(1818),\n    [anon_sym_shader] = ACTIONS(1818),\n  },\n  [507] = {\n    [sym_declaration] = STATE(600),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1795),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_static] = ACTIONS(1800),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_override] = ACTIONS(1800),\n    [anon_sym_module] = ACTIONS(1804),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [508] = {\n    [ts_builtin_sym_end] = ACTIONS(1362),\n    [sym_identifier] = ACTIONS(1364),\n    [anon_sym_pub] = ACTIONS(1364),\n    [anon_sym_export] = ACTIONS(1364),\n    [anon_sym_type] = ACTIONS(1364),\n    [anon_sym_namespace] = ACTIONS(1364),\n    [anon_sym_LBRACE] = ACTIONS(1362),\n    [anon_sym_RBRACE] = ACTIONS(1362),\n    [anon_sym_typeof] = ACTIONS(1364),\n    [anon_sym_import] = ACTIONS(1364),\n    [anon_sym_var] = ACTIONS(1364),\n    [anon_sym_let] = ACTIONS(1364),\n    [anon_sym_const] = ACTIONS(1364),\n    [anon_sym_BANG] = ACTIONS(1362),\n    [anon_sym_else] = ACTIONS(1364),\n    [anon_sym_if] = ACTIONS(1364),\n    [anon_sym_switch] = ACTIONS(1364),\n    [anon_sym_for] = ACTIONS(1364),\n    [anon_sym_LPAREN] = ACTIONS(1362),\n    [anon_sym_await] = ACTIONS(1364),\n    [anon_sym_while] = ACTIONS(1364),\n    [anon_sym_do] = ACTIONS(1364),\n    [anon_sym_try] = ACTIONS(1364),\n    [anon_sym_with] = ACTIONS(1364),\n    [anon_sym_break] = ACTIONS(1364),\n    [anon_sym_continue] = ACTIONS(1364),\n    [anon_sym_debugger] = ACTIONS(1364),\n    [anon_sym_return] = ACTIONS(1364),\n    [anon_sym_throw] = ACTIONS(1364),\n    [anon_sym_SEMI] = ACTIONS(1362),\n    [anon_sym_case] = ACTIONS(1364),\n    [anon_sym_default] = ACTIONS(1364),\n    [anon_sym_yield] = ACTIONS(1364),\n    [anon_sym_LBRACK] = ACTIONS(1362),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1362),\n    [anon_sym_LT] = ACTIONS(1364),\n    [anon_sym_SLASH] = ACTIONS(1364),\n    [anon_sym_struct] = ACTIONS(1364),\n    [anon_sym_async] = ACTIONS(1364),\n    [anon_sym_fn] = ACTIONS(1364),\n    [anon_sym_fn_STAR] = ACTIONS(1362),\n    [anon_sym_new] = ACTIONS(1364),\n    [anon_sym_PLUS] = ACTIONS(1364),\n    [anon_sym_DASH] = ACTIONS(1364),\n    [anon_sym_TILDE] = ACTIONS(1362),\n    [anon_sym_void] = ACTIONS(1364),\n    [anon_sym_delete] = ACTIONS(1364),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1362),\n    [anon_sym_DASH_DASH] = ACTIONS(1362),\n    [anon_sym_DQUOTE] = ACTIONS(1362),\n    [anon_sym_SQUOTE] = ACTIONS(1362),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1362),\n    [sym_number] = ACTIONS(1362),\n    [sym_this] = ACTIONS(1364),\n    [sym_super] = ACTIONS(1364),\n    [sym_true] = ACTIONS(1364),\n    [sym_false] = ACTIONS(1364),\n    [sym_null] = ACTIONS(1364),\n    [sym_undefined] = ACTIONS(1364),\n    [anon_sym_AT] = ACTIONS(1362),\n    [anon_sym_static] = ACTIONS(1364),\n    [anon_sym_declare] = ACTIONS(1364),\n    [anon_sym_public] = ACTIONS(1364),\n    [anon_sym_private] = ACTIONS(1364),\n    [anon_sym_protected] = ACTIONS(1364),\n    [anon_sym_override] = ACTIONS(1364),\n    [anon_sym_readonly] = ACTIONS(1364),\n    [anon_sym_module] = ACTIONS(1364),\n    [anon_sym_any] = ACTIONS(1364),\n    [anon_sym_number] = ACTIONS(1364),\n    [anon_sym_int] = ACTIONS(1364),\n    [anon_sym_float] = ACTIONS(1364),\n    [anon_sym_float2] = ACTIONS(1364),\n    [anon_sym_float3] = ACTIONS(1364),\n    [anon_sym_float4] = ACTIONS(1364),\n    [anon_sym_float3x3] = ACTIONS(1364),\n    [anon_sym_float2x2] = ACTIONS(1364),\n    [anon_sym_float4x4] = ACTIONS(1364),\n    [anon_sym_int2] = ACTIONS(1364),\n    [anon_sym_int3] = ACTIONS(1364),\n    [anon_sym_int4] = ACTIONS(1364),\n    [anon_sym_int3x3] = ACTIONS(1364),\n    [anon_sym_int2x2] = ACTIONS(1364),\n    [anon_sym_int4x4] = ACTIONS(1364),\n    [anon_sym_boolean] = ACTIONS(1364),\n    [anon_sym_string] = ACTIONS(1364),\n    [anon_sym_symbol] = ACTIONS(1364),\n    [anon_sym_workgroup] = ACTIONS(1364),\n    [anon_sym_get] = ACTIONS(1364),\n    [anon_sym_set] = ACTIONS(1364),\n    [anon_sym_trait] = ACTIONS(1364),\n    [anon_sym_impl] = ACTIONS(1364),\n    [anon_sym_enum] = ACTIONS(1364),\n    [anon_sym_shader] = ACTIONS(1364),\n    [sym__automatic_semicolon] = ACTIONS(1370),\n  },\n  [509] = {\n    [sym_declaration] = STATE(592),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_module] = ACTIONS(1822),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_global] = ACTIONS(1824),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [510] = {\n    [sym_else_clause] = STATE(633),\n    [ts_builtin_sym_end] = ACTIONS(1826),\n    [sym_identifier] = ACTIONS(1828),\n    [anon_sym_pub] = ACTIONS(1828),\n    [anon_sym_export] = ACTIONS(1828),\n    [anon_sym_type] = ACTIONS(1828),\n    [anon_sym_namespace] = ACTIONS(1828),\n    [anon_sym_LBRACE] = ACTIONS(1826),\n    [anon_sym_RBRACE] = ACTIONS(1826),\n    [anon_sym_typeof] = ACTIONS(1828),\n    [anon_sym_import] = ACTIONS(1828),\n    [anon_sym_var] = ACTIONS(1828),\n    [anon_sym_let] = ACTIONS(1828),\n    [anon_sym_const] = ACTIONS(1828),\n    [anon_sym_BANG] = ACTIONS(1826),\n    [anon_sym_else] = ACTIONS(1830),\n    [anon_sym_if] = ACTIONS(1828),\n    [anon_sym_switch] = ACTIONS(1828),\n    [anon_sym_for] = ACTIONS(1828),\n    [anon_sym_LPAREN] = ACTIONS(1826),\n    [anon_sym_await] = ACTIONS(1828),\n    [anon_sym_while] = ACTIONS(1828),\n    [anon_sym_do] = ACTIONS(1828),\n    [anon_sym_try] = ACTIONS(1828),\n    [anon_sym_with] = ACTIONS(1828),\n    [anon_sym_break] = ACTIONS(1828),\n    [anon_sym_continue] = ACTIONS(1828),\n    [anon_sym_debugger] = ACTIONS(1828),\n    [anon_sym_return] = ACTIONS(1828),\n    [anon_sym_throw] = ACTIONS(1828),\n    [anon_sym_SEMI] = ACTIONS(1826),\n    [anon_sym_case] = ACTIONS(1828),\n    [anon_sym_default] = ACTIONS(1828),\n    [anon_sym_yield] = ACTIONS(1828),\n    [anon_sym_LBRACK] = ACTIONS(1826),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1826),\n    [anon_sym_LT] = ACTIONS(1828),\n    [anon_sym_SLASH] = ACTIONS(1828),\n    [anon_sym_struct] = ACTIONS(1828),\n    [anon_sym_async] = ACTIONS(1828),\n    [anon_sym_fn] = ACTIONS(1828),\n    [anon_sym_fn_STAR] = ACTIONS(1826),\n    [anon_sym_new] = ACTIONS(1828),\n    [anon_sym_PLUS] = ACTIONS(1828),\n    [anon_sym_DASH] = ACTIONS(1828),\n    [anon_sym_TILDE] = ACTIONS(1826),\n    [anon_sym_void] = ACTIONS(1828),\n    [anon_sym_delete] = ACTIONS(1828),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1826),\n    [anon_sym_DASH_DASH] = ACTIONS(1826),\n    [anon_sym_DQUOTE] = ACTIONS(1826),\n    [anon_sym_SQUOTE] = ACTIONS(1826),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1826),\n    [sym_number] = ACTIONS(1826),\n    [sym_this] = ACTIONS(1828),\n    [sym_super] = ACTIONS(1828),\n    [sym_true] = ACTIONS(1828),\n    [sym_false] = ACTIONS(1828),\n    [sym_null] = ACTIONS(1828),\n    [sym_undefined] = ACTIONS(1828),\n    [anon_sym_AT] = ACTIONS(1826),\n    [anon_sym_static] = ACTIONS(1828),\n    [anon_sym_declare] = ACTIONS(1828),\n    [anon_sym_public] = ACTIONS(1828),\n    [anon_sym_private] = ACTIONS(1828),\n    [anon_sym_protected] = ACTIONS(1828),\n    [anon_sym_override] = ACTIONS(1828),\n    [anon_sym_readonly] = ACTIONS(1828),\n    [anon_sym_module] = ACTIONS(1828),\n    [anon_sym_any] = ACTIONS(1828),\n    [anon_sym_number] = ACTIONS(1828),\n    [anon_sym_int] = ACTIONS(1828),\n    [anon_sym_float] = ACTIONS(1828),\n    [anon_sym_float2] = ACTIONS(1828),\n    [anon_sym_float3] = ACTIONS(1828),\n    [anon_sym_float4] = ACTIONS(1828),\n    [anon_sym_float3x3] = ACTIONS(1828),\n    [anon_sym_float2x2] = ACTIONS(1828),\n    [anon_sym_float4x4] = ACTIONS(1828),\n    [anon_sym_int2] = ACTIONS(1828),\n    [anon_sym_int3] = ACTIONS(1828),\n    [anon_sym_int4] = ACTIONS(1828),\n    [anon_sym_int3x3] = ACTIONS(1828),\n    [anon_sym_int2x2] = ACTIONS(1828),\n    [anon_sym_int4x4] = ACTIONS(1828),\n    [anon_sym_boolean] = ACTIONS(1828),\n    [anon_sym_string] = ACTIONS(1828),\n    [anon_sym_symbol] = ACTIONS(1828),\n    [anon_sym_workgroup] = ACTIONS(1828),\n    [anon_sym_get] = ACTIONS(1828),\n    [anon_sym_set] = ACTIONS(1828),\n    [anon_sym_trait] = ACTIONS(1828),\n    [anon_sym_impl] = ACTIONS(1828),\n    [anon_sym_enum] = ACTIONS(1828),\n    [anon_sym_shader] = ACTIONS(1828),\n  },\n  [511] = {\n    [ts_builtin_sym_end] = ACTIONS(1832),\n    [sym_identifier] = ACTIONS(1834),\n    [anon_sym_pub] = ACTIONS(1834),\n    [anon_sym_export] = ACTIONS(1834),\n    [anon_sym_type] = ACTIONS(1834),\n    [anon_sym_namespace] = ACTIONS(1834),\n    [anon_sym_LBRACE] = ACTIONS(1832),\n    [anon_sym_RBRACE] = ACTIONS(1832),\n    [anon_sym_typeof] = ACTIONS(1834),\n    [anon_sym_import] = ACTIONS(1834),\n    [anon_sym_var] = ACTIONS(1834),\n    [anon_sym_let] = ACTIONS(1834),\n    [anon_sym_const] = ACTIONS(1834),\n    [anon_sym_BANG] = ACTIONS(1832),\n    [anon_sym_else] = ACTIONS(1834),\n    [anon_sym_if] = ACTIONS(1834),\n    [anon_sym_switch] = ACTIONS(1834),\n    [anon_sym_for] = ACTIONS(1834),\n    [anon_sym_LPAREN] = ACTIONS(1832),\n    [anon_sym_await] = ACTIONS(1834),\n    [anon_sym_while] = ACTIONS(1834),\n    [anon_sym_do] = ACTIONS(1834),\n    [anon_sym_try] = ACTIONS(1834),\n    [anon_sym_with] = ACTIONS(1834),\n    [anon_sym_break] = ACTIONS(1834),\n    [anon_sym_continue] = ACTIONS(1834),\n    [anon_sym_debugger] = ACTIONS(1834),\n    [anon_sym_return] = ACTIONS(1834),\n    [anon_sym_throw] = ACTIONS(1834),\n    [anon_sym_SEMI] = ACTIONS(1832),\n    [anon_sym_case] = ACTIONS(1834),\n    [anon_sym_default] = ACTIONS(1834),\n    [anon_sym_yield] = ACTIONS(1834),\n    [anon_sym_LBRACK] = ACTIONS(1832),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1832),\n    [anon_sym_LT] = ACTIONS(1834),\n    [anon_sym_SLASH] = ACTIONS(1834),\n    [anon_sym_struct] = ACTIONS(1834),\n    [anon_sym_async] = ACTIONS(1834),\n    [anon_sym_fn] = ACTIONS(1834),\n    [anon_sym_fn_STAR] = ACTIONS(1832),\n    [anon_sym_new] = ACTIONS(1834),\n    [anon_sym_PLUS] = ACTIONS(1834),\n    [anon_sym_DASH] = ACTIONS(1834),\n    [anon_sym_TILDE] = ACTIONS(1832),\n    [anon_sym_void] = ACTIONS(1834),\n    [anon_sym_delete] = ACTIONS(1834),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1832),\n    [anon_sym_DASH_DASH] = ACTIONS(1832),\n    [anon_sym_DQUOTE] = ACTIONS(1832),\n    [anon_sym_SQUOTE] = ACTIONS(1832),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1832),\n    [sym_number] = ACTIONS(1832),\n    [sym_this] = ACTIONS(1834),\n    [sym_super] = ACTIONS(1834),\n    [sym_true] = ACTIONS(1834),\n    [sym_false] = ACTIONS(1834),\n    [sym_null] = ACTIONS(1834),\n    [sym_undefined] = ACTIONS(1834),\n    [anon_sym_AT] = ACTIONS(1832),\n    [anon_sym_static] = ACTIONS(1834),\n    [anon_sym_declare] = ACTIONS(1834),\n    [anon_sym_public] = ACTIONS(1834),\n    [anon_sym_private] = ACTIONS(1834),\n    [anon_sym_protected] = ACTIONS(1834),\n    [anon_sym_override] = ACTIONS(1834),\n    [anon_sym_readonly] = ACTIONS(1834),\n    [anon_sym_module] = ACTIONS(1834),\n    [anon_sym_any] = ACTIONS(1834),\n    [anon_sym_number] = ACTIONS(1834),\n    [anon_sym_int] = ACTIONS(1834),\n    [anon_sym_float] = ACTIONS(1834),\n    [anon_sym_float2] = ACTIONS(1834),\n    [anon_sym_float3] = ACTIONS(1834),\n    [anon_sym_float4] = ACTIONS(1834),\n    [anon_sym_float3x3] = ACTIONS(1834),\n    [anon_sym_float2x2] = ACTIONS(1834),\n    [anon_sym_float4x4] = ACTIONS(1834),\n    [anon_sym_int2] = ACTIONS(1834),\n    [anon_sym_int3] = ACTIONS(1834),\n    [anon_sym_int4] = ACTIONS(1834),\n    [anon_sym_int3x3] = ACTIONS(1834),\n    [anon_sym_int2x2] = ACTIONS(1834),\n    [anon_sym_int4x4] = ACTIONS(1834),\n    [anon_sym_boolean] = ACTIONS(1834),\n    [anon_sym_string] = ACTIONS(1834),\n    [anon_sym_symbol] = ACTIONS(1834),\n    [anon_sym_workgroup] = ACTIONS(1834),\n    [anon_sym_get] = ACTIONS(1834),\n    [anon_sym_set] = ACTIONS(1834),\n    [anon_sym_trait] = ACTIONS(1834),\n    [anon_sym_impl] = ACTIONS(1834),\n    [anon_sym_enum] = ACTIONS(1834),\n    [anon_sym_shader] = ACTIONS(1834),\n    [sym__automatic_semicolon] = ACTIONS(1836),\n  },\n  [512] = {\n    [ts_builtin_sym_end] = ACTIONS(1838),\n    [sym_identifier] = ACTIONS(1840),\n    [anon_sym_pub] = ACTIONS(1840),\n    [anon_sym_export] = ACTIONS(1840),\n    [anon_sym_type] = ACTIONS(1840),\n    [anon_sym_namespace] = ACTIONS(1840),\n    [anon_sym_LBRACE] = ACTIONS(1838),\n    [anon_sym_RBRACE] = ACTIONS(1838),\n    [anon_sym_typeof] = ACTIONS(1840),\n    [anon_sym_import] = ACTIONS(1840),\n    [anon_sym_var] = ACTIONS(1840),\n    [anon_sym_let] = ACTIONS(1840),\n    [anon_sym_const] = ACTIONS(1840),\n    [anon_sym_BANG] = ACTIONS(1838),\n    [anon_sym_else] = ACTIONS(1840),\n    [anon_sym_if] = ACTIONS(1840),\n    [anon_sym_switch] = ACTIONS(1840),\n    [anon_sym_for] = ACTIONS(1840),\n    [anon_sym_LPAREN] = ACTIONS(1838),\n    [anon_sym_await] = ACTIONS(1840),\n    [anon_sym_while] = ACTIONS(1840),\n    [anon_sym_do] = ACTIONS(1840),\n    [anon_sym_try] = ACTIONS(1840),\n    [anon_sym_with] = ACTIONS(1840),\n    [anon_sym_break] = ACTIONS(1840),\n    [anon_sym_continue] = ACTIONS(1840),\n    [anon_sym_debugger] = ACTIONS(1840),\n    [anon_sym_return] = ACTIONS(1840),\n    [anon_sym_throw] = ACTIONS(1840),\n    [anon_sym_SEMI] = ACTIONS(1838),\n    [anon_sym_case] = ACTIONS(1840),\n    [anon_sym_default] = ACTIONS(1840),\n    [anon_sym_yield] = ACTIONS(1840),\n    [anon_sym_LBRACK] = ACTIONS(1838),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1838),\n    [anon_sym_LT] = ACTIONS(1840),\n    [anon_sym_SLASH] = ACTIONS(1840),\n    [anon_sym_struct] = ACTIONS(1840),\n    [anon_sym_async] = ACTIONS(1840),\n    [anon_sym_fn] = ACTIONS(1840),\n    [anon_sym_fn_STAR] = ACTIONS(1838),\n    [anon_sym_new] = ACTIONS(1840),\n    [anon_sym_PLUS] = ACTIONS(1840),\n    [anon_sym_DASH] = ACTIONS(1840),\n    [anon_sym_TILDE] = ACTIONS(1838),\n    [anon_sym_void] = ACTIONS(1840),\n    [anon_sym_delete] = ACTIONS(1840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1838),\n    [anon_sym_DASH_DASH] = ACTIONS(1838),\n    [anon_sym_DQUOTE] = ACTIONS(1838),\n    [anon_sym_SQUOTE] = ACTIONS(1838),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1838),\n    [sym_number] = ACTIONS(1838),\n    [sym_this] = ACTIONS(1840),\n    [sym_super] = ACTIONS(1840),\n    [sym_true] = ACTIONS(1840),\n    [sym_false] = ACTIONS(1840),\n    [sym_null] = ACTIONS(1840),\n    [sym_undefined] = ACTIONS(1840),\n    [anon_sym_AT] = ACTIONS(1838),\n    [anon_sym_static] = ACTIONS(1840),\n    [anon_sym_declare] = ACTIONS(1840),\n    [anon_sym_public] = ACTIONS(1840),\n    [anon_sym_private] = ACTIONS(1840),\n    [anon_sym_protected] = ACTIONS(1840),\n    [anon_sym_override] = ACTIONS(1840),\n    [anon_sym_readonly] = ACTIONS(1840),\n    [anon_sym_module] = ACTIONS(1840),\n    [anon_sym_any] = ACTIONS(1840),\n    [anon_sym_number] = ACTIONS(1840),\n    [anon_sym_int] = ACTIONS(1840),\n    [anon_sym_float] = ACTIONS(1840),\n    [anon_sym_float2] = ACTIONS(1840),\n    [anon_sym_float3] = ACTIONS(1840),\n    [anon_sym_float4] = ACTIONS(1840),\n    [anon_sym_float3x3] = ACTIONS(1840),\n    [anon_sym_float2x2] = ACTIONS(1840),\n    [anon_sym_float4x4] = ACTIONS(1840),\n    [anon_sym_int2] = ACTIONS(1840),\n    [anon_sym_int3] = ACTIONS(1840),\n    [anon_sym_int4] = ACTIONS(1840),\n    [anon_sym_int3x3] = ACTIONS(1840),\n    [anon_sym_int2x2] = ACTIONS(1840),\n    [anon_sym_int4x4] = ACTIONS(1840),\n    [anon_sym_boolean] = ACTIONS(1840),\n    [anon_sym_string] = ACTIONS(1840),\n    [anon_sym_symbol] = ACTIONS(1840),\n    [anon_sym_workgroup] = ACTIONS(1840),\n    [anon_sym_get] = ACTIONS(1840),\n    [anon_sym_set] = ACTIONS(1840),\n    [anon_sym_trait] = ACTIONS(1840),\n    [anon_sym_impl] = ACTIONS(1840),\n    [anon_sym_enum] = ACTIONS(1840),\n    [anon_sym_shader] = ACTIONS(1840),\n    [sym__automatic_semicolon] = ACTIONS(1842),\n  },\n  [513] = {\n    [ts_builtin_sym_end] = ACTIONS(1302),\n    [sym_identifier] = ACTIONS(1304),\n    [anon_sym_pub] = ACTIONS(1304),\n    [anon_sym_export] = ACTIONS(1304),\n    [anon_sym_type] = ACTIONS(1304),\n    [anon_sym_namespace] = ACTIONS(1304),\n    [anon_sym_LBRACE] = ACTIONS(1302),\n    [anon_sym_RBRACE] = ACTIONS(1302),\n    [anon_sym_typeof] = ACTIONS(1304),\n    [anon_sym_import] = ACTIONS(1304),\n    [anon_sym_var] = ACTIONS(1304),\n    [anon_sym_let] = ACTIONS(1304),\n    [anon_sym_const] = ACTIONS(1304),\n    [anon_sym_BANG] = ACTIONS(1302),\n    [anon_sym_else] = ACTIONS(1304),\n    [anon_sym_if] = ACTIONS(1304),\n    [anon_sym_switch] = ACTIONS(1304),\n    [anon_sym_for] = ACTIONS(1304),\n    [anon_sym_LPAREN] = ACTIONS(1302),\n    [anon_sym_await] = ACTIONS(1304),\n    [anon_sym_while] = ACTIONS(1304),\n    [anon_sym_do] = ACTIONS(1304),\n    [anon_sym_try] = ACTIONS(1304),\n    [anon_sym_with] = ACTIONS(1304),\n    [anon_sym_break] = ACTIONS(1304),\n    [anon_sym_continue] = ACTIONS(1304),\n    [anon_sym_debugger] = ACTIONS(1304),\n    [anon_sym_return] = ACTIONS(1304),\n    [anon_sym_throw] = ACTIONS(1304),\n    [anon_sym_SEMI] = ACTIONS(1302),\n    [anon_sym_case] = ACTIONS(1304),\n    [anon_sym_default] = ACTIONS(1304),\n    [anon_sym_yield] = ACTIONS(1304),\n    [anon_sym_LBRACK] = ACTIONS(1302),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1302),\n    [anon_sym_LT] = ACTIONS(1304),\n    [anon_sym_SLASH] = ACTIONS(1304),\n    [anon_sym_struct] = ACTIONS(1304),\n    [anon_sym_async] = ACTIONS(1304),\n    [anon_sym_fn] = ACTIONS(1304),\n    [anon_sym_fn_STAR] = ACTIONS(1302),\n    [anon_sym_new] = ACTIONS(1304),\n    [anon_sym_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH] = ACTIONS(1304),\n    [anon_sym_TILDE] = ACTIONS(1302),\n    [anon_sym_void] = ACTIONS(1304),\n    [anon_sym_delete] = ACTIONS(1304),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1302),\n    [anon_sym_DASH_DASH] = ACTIONS(1302),\n    [anon_sym_DQUOTE] = ACTIONS(1302),\n    [anon_sym_SQUOTE] = ACTIONS(1302),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1302),\n    [sym_number] = ACTIONS(1302),\n    [sym_this] = ACTIONS(1304),\n    [sym_super] = ACTIONS(1304),\n    [sym_true] = ACTIONS(1304),\n    [sym_false] = ACTIONS(1304),\n    [sym_null] = ACTIONS(1304),\n    [sym_undefined] = ACTIONS(1304),\n    [anon_sym_AT] = ACTIONS(1302),\n    [anon_sym_static] = ACTIONS(1304),\n    [anon_sym_declare] = ACTIONS(1304),\n    [anon_sym_public] = ACTIONS(1304),\n    [anon_sym_private] = ACTIONS(1304),\n    [anon_sym_protected] = ACTIONS(1304),\n    [anon_sym_override] = ACTIONS(1304),\n    [anon_sym_readonly] = ACTIONS(1304),\n    [anon_sym_module] = ACTIONS(1304),\n    [anon_sym_any] = ACTIONS(1304),\n    [anon_sym_number] = ACTIONS(1304),\n    [anon_sym_int] = ACTIONS(1304),\n    [anon_sym_float] = ACTIONS(1304),\n    [anon_sym_float2] = ACTIONS(1304),\n    [anon_sym_float3] = ACTIONS(1304),\n    [anon_sym_float4] = ACTIONS(1304),\n    [anon_sym_float3x3] = ACTIONS(1304),\n    [anon_sym_float2x2] = ACTIONS(1304),\n    [anon_sym_float4x4] = ACTIONS(1304),\n    [anon_sym_int2] = ACTIONS(1304),\n    [anon_sym_int3] = ACTIONS(1304),\n    [anon_sym_int4] = ACTIONS(1304),\n    [anon_sym_int3x3] = ACTIONS(1304),\n    [anon_sym_int2x2] = ACTIONS(1304),\n    [anon_sym_int4x4] = ACTIONS(1304),\n    [anon_sym_boolean] = ACTIONS(1304),\n    [anon_sym_string] = ACTIONS(1304),\n    [anon_sym_symbol] = ACTIONS(1304),\n    [anon_sym_workgroup] = ACTIONS(1304),\n    [anon_sym_get] = ACTIONS(1304),\n    [anon_sym_set] = ACTIONS(1304),\n    [anon_sym_trait] = ACTIONS(1304),\n    [anon_sym_impl] = ACTIONS(1304),\n    [anon_sym_enum] = ACTIONS(1304),\n    [anon_sym_shader] = ACTIONS(1304),\n    [sym__automatic_semicolon] = ACTIONS(1844),\n  },\n  [514] = {\n    [ts_builtin_sym_end] = ACTIONS(1846),\n    [sym_identifier] = ACTIONS(1848),\n    [anon_sym_pub] = ACTIONS(1848),\n    [anon_sym_export] = ACTIONS(1848),\n    [anon_sym_type] = ACTIONS(1848),\n    [anon_sym_namespace] = ACTIONS(1848),\n    [anon_sym_LBRACE] = ACTIONS(1846),\n    [anon_sym_RBRACE] = ACTIONS(1846),\n    [anon_sym_typeof] = ACTIONS(1848),\n    [anon_sym_import] = ACTIONS(1848),\n    [anon_sym_var] = ACTIONS(1848),\n    [anon_sym_let] = ACTIONS(1848),\n    [anon_sym_const] = ACTIONS(1848),\n    [anon_sym_BANG] = ACTIONS(1846),\n    [anon_sym_else] = ACTIONS(1848),\n    [anon_sym_if] = ACTIONS(1848),\n    [anon_sym_switch] = ACTIONS(1848),\n    [anon_sym_for] = ACTIONS(1848),\n    [anon_sym_LPAREN] = ACTIONS(1846),\n    [anon_sym_await] = ACTIONS(1848),\n    [anon_sym_while] = ACTIONS(1848),\n    [anon_sym_do] = ACTIONS(1848),\n    [anon_sym_try] = ACTIONS(1848),\n    [anon_sym_with] = ACTIONS(1848),\n    [anon_sym_break] = ACTIONS(1848),\n    [anon_sym_continue] = ACTIONS(1848),\n    [anon_sym_debugger] = ACTIONS(1848),\n    [anon_sym_return] = ACTIONS(1848),\n    [anon_sym_throw] = ACTIONS(1848),\n    [anon_sym_SEMI] = ACTIONS(1846),\n    [anon_sym_case] = ACTIONS(1848),\n    [anon_sym_default] = ACTIONS(1848),\n    [anon_sym_yield] = ACTIONS(1848),\n    [anon_sym_LBRACK] = ACTIONS(1846),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1846),\n    [anon_sym_LT] = ACTIONS(1848),\n    [anon_sym_SLASH] = ACTIONS(1848),\n    [anon_sym_struct] = ACTIONS(1848),\n    [anon_sym_async] = ACTIONS(1848),\n    [anon_sym_fn] = ACTIONS(1848),\n    [anon_sym_fn_STAR] = ACTIONS(1846),\n    [anon_sym_new] = ACTIONS(1848),\n    [anon_sym_PLUS] = ACTIONS(1848),\n    [anon_sym_DASH] = ACTIONS(1848),\n    [anon_sym_TILDE] = ACTIONS(1846),\n    [anon_sym_void] = ACTIONS(1848),\n    [anon_sym_delete] = ACTIONS(1848),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1846),\n    [anon_sym_DASH_DASH] = ACTIONS(1846),\n    [anon_sym_DQUOTE] = ACTIONS(1846),\n    [anon_sym_SQUOTE] = ACTIONS(1846),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1846),\n    [sym_number] = ACTIONS(1846),\n    [sym_this] = ACTIONS(1848),\n    [sym_super] = ACTIONS(1848),\n    [sym_true] = ACTIONS(1848),\n    [sym_false] = ACTIONS(1848),\n    [sym_null] = ACTIONS(1848),\n    [sym_undefined] = ACTIONS(1848),\n    [anon_sym_AT] = ACTIONS(1846),\n    [anon_sym_static] = ACTIONS(1848),\n    [anon_sym_declare] = ACTIONS(1848),\n    [anon_sym_public] = ACTIONS(1848),\n    [anon_sym_private] = ACTIONS(1848),\n    [anon_sym_protected] = ACTIONS(1848),\n    [anon_sym_override] = ACTIONS(1848),\n    [anon_sym_readonly] = ACTIONS(1848),\n    [anon_sym_module] = ACTIONS(1848),\n    [anon_sym_any] = ACTIONS(1848),\n    [anon_sym_number] = ACTIONS(1848),\n    [anon_sym_int] = ACTIONS(1848),\n    [anon_sym_float] = ACTIONS(1848),\n    [anon_sym_float2] = ACTIONS(1848),\n    [anon_sym_float3] = ACTIONS(1848),\n    [anon_sym_float4] = ACTIONS(1848),\n    [anon_sym_float3x3] = ACTIONS(1848),\n    [anon_sym_float2x2] = ACTIONS(1848),\n    [anon_sym_float4x4] = ACTIONS(1848),\n    [anon_sym_int2] = ACTIONS(1848),\n    [anon_sym_int3] = ACTIONS(1848),\n    [anon_sym_int4] = ACTIONS(1848),\n    [anon_sym_int3x3] = ACTIONS(1848),\n    [anon_sym_int2x2] = ACTIONS(1848),\n    [anon_sym_int4x4] = ACTIONS(1848),\n    [anon_sym_boolean] = ACTIONS(1848),\n    [anon_sym_string] = ACTIONS(1848),\n    [anon_sym_symbol] = ACTIONS(1848),\n    [anon_sym_workgroup] = ACTIONS(1848),\n    [anon_sym_get] = ACTIONS(1848),\n    [anon_sym_set] = ACTIONS(1848),\n    [anon_sym_trait] = ACTIONS(1848),\n    [anon_sym_impl] = ACTIONS(1848),\n    [anon_sym_enum] = ACTIONS(1848),\n    [anon_sym_shader] = ACTIONS(1848),\n    [sym__automatic_semicolon] = ACTIONS(1850),\n  },\n  [515] = {\n    [sym_declaration] = STATE(592),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_module] = ACTIONS(1822),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_global] = ACTIONS(1824),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [516] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_pub] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_type] = ACTIONS(1328),\n    [anon_sym_namespace] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_BANG] = ACTIONS(1326),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1326),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_with] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_SEMI] = ACTIONS(1326),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_LBRACK] = ACTIONS(1326),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1326),\n    [anon_sym_LT] = ACTIONS(1328),\n    [anon_sym_SLASH] = ACTIONS(1328),\n    [anon_sym_struct] = ACTIONS(1328),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_fn] = ACTIONS(1328),\n    [anon_sym_fn_STAR] = ACTIONS(1326),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_PLUS] = ACTIONS(1328),\n    [anon_sym_DASH] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1326),\n    [anon_sym_DASH_DASH] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1326),\n    [sym_number] = ACTIONS(1326),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_static] = ACTIONS(1328),\n    [anon_sym_declare] = ACTIONS(1328),\n    [anon_sym_public] = ACTIONS(1328),\n    [anon_sym_private] = ACTIONS(1328),\n    [anon_sym_protected] = ACTIONS(1328),\n    [anon_sym_override] = ACTIONS(1328),\n    [anon_sym_readonly] = ACTIONS(1328),\n    [anon_sym_module] = ACTIONS(1328),\n    [anon_sym_any] = ACTIONS(1328),\n    [anon_sym_number] = ACTIONS(1328),\n    [anon_sym_int] = ACTIONS(1328),\n    [anon_sym_float] = ACTIONS(1328),\n    [anon_sym_float2] = ACTIONS(1328),\n    [anon_sym_float3] = ACTIONS(1328),\n    [anon_sym_float4] = ACTIONS(1328),\n    [anon_sym_float3x3] = ACTIONS(1328),\n    [anon_sym_float2x2] = ACTIONS(1328),\n    [anon_sym_float4x4] = ACTIONS(1328),\n    [anon_sym_int2] = ACTIONS(1328),\n    [anon_sym_int3] = ACTIONS(1328),\n    [anon_sym_int4] = ACTIONS(1328),\n    [anon_sym_int3x3] = ACTIONS(1328),\n    [anon_sym_int2x2] = ACTIONS(1328),\n    [anon_sym_int4x4] = ACTIONS(1328),\n    [anon_sym_boolean] = ACTIONS(1328),\n    [anon_sym_string] = ACTIONS(1328),\n    [anon_sym_symbol] = ACTIONS(1328),\n    [anon_sym_workgroup] = ACTIONS(1328),\n    [anon_sym_get] = ACTIONS(1328),\n    [anon_sym_set] = ACTIONS(1328),\n    [anon_sym_trait] = ACTIONS(1328),\n    [anon_sym_impl] = ACTIONS(1328),\n    [anon_sym_enum] = ACTIONS(1328),\n    [anon_sym_shader] = ACTIONS(1328),\n    [sym__automatic_semicolon] = ACTIONS(1326),\n  },\n  [517] = {\n    [ts_builtin_sym_end] = ACTIONS(1316),\n    [sym_identifier] = ACTIONS(1318),\n    [anon_sym_pub] = ACTIONS(1318),\n    [anon_sym_export] = ACTIONS(1318),\n    [anon_sym_type] = ACTIONS(1318),\n    [anon_sym_namespace] = ACTIONS(1318),\n    [anon_sym_LBRACE] = ACTIONS(1316),\n    [anon_sym_RBRACE] = ACTIONS(1316),\n    [anon_sym_typeof] = ACTIONS(1318),\n    [anon_sym_import] = ACTIONS(1318),\n    [anon_sym_var] = ACTIONS(1318),\n    [anon_sym_let] = ACTIONS(1318),\n    [anon_sym_const] = ACTIONS(1318),\n    [anon_sym_BANG] = ACTIONS(1316),\n    [anon_sym_else] = ACTIONS(1318),\n    [anon_sym_if] = ACTIONS(1318),\n    [anon_sym_switch] = ACTIONS(1318),\n    [anon_sym_for] = ACTIONS(1318),\n    [anon_sym_LPAREN] = ACTIONS(1316),\n    [anon_sym_await] = ACTIONS(1318),\n    [anon_sym_while] = ACTIONS(1318),\n    [anon_sym_do] = ACTIONS(1318),\n    [anon_sym_try] = ACTIONS(1318),\n    [anon_sym_with] = ACTIONS(1318),\n    [anon_sym_break] = ACTIONS(1318),\n    [anon_sym_continue] = ACTIONS(1318),\n    [anon_sym_debugger] = ACTIONS(1318),\n    [anon_sym_return] = ACTIONS(1318),\n    [anon_sym_throw] = ACTIONS(1318),\n    [anon_sym_SEMI] = ACTIONS(1316),\n    [anon_sym_case] = ACTIONS(1318),\n    [anon_sym_default] = ACTIONS(1318),\n    [anon_sym_yield] = ACTIONS(1318),\n    [anon_sym_LBRACK] = ACTIONS(1316),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1316),\n    [anon_sym_LT] = ACTIONS(1318),\n    [anon_sym_SLASH] = ACTIONS(1318),\n    [anon_sym_struct] = ACTIONS(1318),\n    [anon_sym_async] = ACTIONS(1318),\n    [anon_sym_fn] = ACTIONS(1318),\n    [anon_sym_fn_STAR] = ACTIONS(1316),\n    [anon_sym_new] = ACTIONS(1318),\n    [anon_sym_PLUS] = ACTIONS(1318),\n    [anon_sym_DASH] = ACTIONS(1318),\n    [anon_sym_TILDE] = ACTIONS(1316),\n    [anon_sym_void] = ACTIONS(1318),\n    [anon_sym_delete] = ACTIONS(1318),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1316),\n    [anon_sym_DASH_DASH] = ACTIONS(1316),\n    [anon_sym_DQUOTE] = ACTIONS(1316),\n    [anon_sym_SQUOTE] = ACTIONS(1316),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1316),\n    [sym_number] = ACTIONS(1316),\n    [sym_this] = ACTIONS(1318),\n    [sym_super] = ACTIONS(1318),\n    [sym_true] = ACTIONS(1318),\n    [sym_false] = ACTIONS(1318),\n    [sym_null] = ACTIONS(1318),\n    [sym_undefined] = ACTIONS(1318),\n    [anon_sym_AT] = ACTIONS(1316),\n    [anon_sym_static] = ACTIONS(1318),\n    [anon_sym_declare] = ACTIONS(1318),\n    [anon_sym_public] = ACTIONS(1318),\n    [anon_sym_private] = ACTIONS(1318),\n    [anon_sym_protected] = ACTIONS(1318),\n    [anon_sym_override] = ACTIONS(1318),\n    [anon_sym_readonly] = ACTIONS(1318),\n    [anon_sym_module] = ACTIONS(1318),\n    [anon_sym_any] = ACTIONS(1318),\n    [anon_sym_number] = ACTIONS(1318),\n    [anon_sym_int] = ACTIONS(1318),\n    [anon_sym_float] = ACTIONS(1318),\n    [anon_sym_float2] = ACTIONS(1318),\n    [anon_sym_float3] = ACTIONS(1318),\n    [anon_sym_float4] = ACTIONS(1318),\n    [anon_sym_float3x3] = ACTIONS(1318),\n    [anon_sym_float2x2] = ACTIONS(1318),\n    [anon_sym_float4x4] = ACTIONS(1318),\n    [anon_sym_int2] = ACTIONS(1318),\n    [anon_sym_int3] = ACTIONS(1318),\n    [anon_sym_int4] = ACTIONS(1318),\n    [anon_sym_int3x3] = ACTIONS(1318),\n    [anon_sym_int2x2] = ACTIONS(1318),\n    [anon_sym_int4x4] = ACTIONS(1318),\n    [anon_sym_boolean] = ACTIONS(1318),\n    [anon_sym_string] = ACTIONS(1318),\n    [anon_sym_symbol] = ACTIONS(1318),\n    [anon_sym_workgroup] = ACTIONS(1318),\n    [anon_sym_get] = ACTIONS(1318),\n    [anon_sym_set] = ACTIONS(1318),\n    [anon_sym_trait] = ACTIONS(1318),\n    [anon_sym_impl] = ACTIONS(1318),\n    [anon_sym_enum] = ACTIONS(1318),\n    [anon_sym_shader] = ACTIONS(1318),\n    [sym__automatic_semicolon] = ACTIONS(1324),\n  },\n  [518] = {\n    [ts_builtin_sym_end] = ACTIONS(1852),\n    [sym_identifier] = ACTIONS(1854),\n    [anon_sym_pub] = ACTIONS(1854),\n    [anon_sym_export] = ACTIONS(1854),\n    [anon_sym_type] = ACTIONS(1854),\n    [anon_sym_namespace] = ACTIONS(1854),\n    [anon_sym_LBRACE] = ACTIONS(1852),\n    [anon_sym_RBRACE] = ACTIONS(1852),\n    [anon_sym_typeof] = ACTIONS(1854),\n    [anon_sym_import] = ACTIONS(1854),\n    [anon_sym_var] = ACTIONS(1854),\n    [anon_sym_let] = ACTIONS(1854),\n    [anon_sym_const] = ACTIONS(1854),\n    [anon_sym_BANG] = ACTIONS(1852),\n    [anon_sym_else] = ACTIONS(1854),\n    [anon_sym_if] = ACTIONS(1854),\n    [anon_sym_switch] = ACTIONS(1854),\n    [anon_sym_for] = ACTIONS(1854),\n    [anon_sym_LPAREN] = ACTIONS(1852),\n    [anon_sym_await] = ACTIONS(1854),\n    [anon_sym_while] = ACTIONS(1854),\n    [anon_sym_do] = ACTIONS(1854),\n    [anon_sym_try] = ACTIONS(1854),\n    [anon_sym_with] = ACTIONS(1854),\n    [anon_sym_break] = ACTIONS(1854),\n    [anon_sym_continue] = ACTIONS(1854),\n    [anon_sym_debugger] = ACTIONS(1854),\n    [anon_sym_return] = ACTIONS(1854),\n    [anon_sym_throw] = ACTIONS(1854),\n    [anon_sym_SEMI] = ACTIONS(1852),\n    [anon_sym_case] = ACTIONS(1854),\n    [anon_sym_default] = ACTIONS(1854),\n    [anon_sym_yield] = ACTIONS(1854),\n    [anon_sym_LBRACK] = ACTIONS(1852),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1852),\n    [anon_sym_LT] = ACTIONS(1854),\n    [anon_sym_SLASH] = ACTIONS(1854),\n    [anon_sym_struct] = ACTIONS(1854),\n    [anon_sym_async] = ACTIONS(1854),\n    [anon_sym_fn] = ACTIONS(1854),\n    [anon_sym_fn_STAR] = ACTIONS(1852),\n    [anon_sym_new] = ACTIONS(1854),\n    [anon_sym_PLUS] = ACTIONS(1854),\n    [anon_sym_DASH] = ACTIONS(1854),\n    [anon_sym_TILDE] = ACTIONS(1852),\n    [anon_sym_void] = ACTIONS(1854),\n    [anon_sym_delete] = ACTIONS(1854),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1852),\n    [anon_sym_DASH_DASH] = ACTIONS(1852),\n    [anon_sym_DQUOTE] = ACTIONS(1852),\n    [anon_sym_SQUOTE] = ACTIONS(1852),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1852),\n    [sym_number] = ACTIONS(1852),\n    [sym_this] = ACTIONS(1854),\n    [sym_super] = ACTIONS(1854),\n    [sym_true] = ACTIONS(1854),\n    [sym_false] = ACTIONS(1854),\n    [sym_null] = ACTIONS(1854),\n    [sym_undefined] = ACTIONS(1854),\n    [anon_sym_AT] = ACTIONS(1852),\n    [anon_sym_static] = ACTIONS(1854),\n    [anon_sym_declare] = ACTIONS(1854),\n    [anon_sym_public] = ACTIONS(1854),\n    [anon_sym_private] = ACTIONS(1854),\n    [anon_sym_protected] = ACTIONS(1854),\n    [anon_sym_override] = ACTIONS(1854),\n    [anon_sym_readonly] = ACTIONS(1854),\n    [anon_sym_module] = ACTIONS(1854),\n    [anon_sym_any] = ACTIONS(1854),\n    [anon_sym_number] = ACTIONS(1854),\n    [anon_sym_int] = ACTIONS(1854),\n    [anon_sym_float] = ACTIONS(1854),\n    [anon_sym_float2] = ACTIONS(1854),\n    [anon_sym_float3] = ACTIONS(1854),\n    [anon_sym_float4] = ACTIONS(1854),\n    [anon_sym_float3x3] = ACTIONS(1854),\n    [anon_sym_float2x2] = ACTIONS(1854),\n    [anon_sym_float4x4] = ACTIONS(1854),\n    [anon_sym_int2] = ACTIONS(1854),\n    [anon_sym_int3] = ACTIONS(1854),\n    [anon_sym_int4] = ACTIONS(1854),\n    [anon_sym_int3x3] = ACTIONS(1854),\n    [anon_sym_int2x2] = ACTIONS(1854),\n    [anon_sym_int4x4] = ACTIONS(1854),\n    [anon_sym_boolean] = ACTIONS(1854),\n    [anon_sym_string] = ACTIONS(1854),\n    [anon_sym_symbol] = ACTIONS(1854),\n    [anon_sym_workgroup] = ACTIONS(1854),\n    [anon_sym_get] = ACTIONS(1854),\n    [anon_sym_set] = ACTIONS(1854),\n    [anon_sym_trait] = ACTIONS(1854),\n    [anon_sym_impl] = ACTIONS(1854),\n    [anon_sym_enum] = ACTIONS(1854),\n    [anon_sym_shader] = ACTIONS(1854),\n    [sym__automatic_semicolon] = ACTIONS(1856),\n  },\n  [519] = {\n    [ts_builtin_sym_end] = ACTIONS(1858),\n    [sym_identifier] = ACTIONS(1860),\n    [anon_sym_pub] = ACTIONS(1860),\n    [anon_sym_export] = ACTIONS(1860),\n    [anon_sym_type] = ACTIONS(1860),\n    [anon_sym_namespace] = ACTIONS(1860),\n    [anon_sym_LBRACE] = ACTIONS(1858),\n    [anon_sym_RBRACE] = ACTIONS(1858),\n    [anon_sym_typeof] = ACTIONS(1860),\n    [anon_sym_import] = ACTIONS(1860),\n    [anon_sym_var] = ACTIONS(1860),\n    [anon_sym_let] = ACTIONS(1860),\n    [anon_sym_const] = ACTIONS(1860),\n    [anon_sym_BANG] = ACTIONS(1858),\n    [anon_sym_else] = ACTIONS(1860),\n    [anon_sym_if] = ACTIONS(1860),\n    [anon_sym_switch] = ACTIONS(1860),\n    [anon_sym_for] = ACTIONS(1860),\n    [anon_sym_LPAREN] = ACTIONS(1858),\n    [anon_sym_await] = ACTIONS(1860),\n    [anon_sym_while] = ACTIONS(1860),\n    [anon_sym_do] = ACTIONS(1860),\n    [anon_sym_try] = ACTIONS(1860),\n    [anon_sym_with] = ACTIONS(1860),\n    [anon_sym_break] = ACTIONS(1860),\n    [anon_sym_continue] = ACTIONS(1860),\n    [anon_sym_debugger] = ACTIONS(1860),\n    [anon_sym_return] = ACTIONS(1860),\n    [anon_sym_throw] = ACTIONS(1860),\n    [anon_sym_SEMI] = ACTIONS(1858),\n    [anon_sym_case] = ACTIONS(1860),\n    [anon_sym_default] = ACTIONS(1860),\n    [anon_sym_finally] = ACTIONS(1860),\n    [anon_sym_yield] = ACTIONS(1860),\n    [anon_sym_LBRACK] = ACTIONS(1858),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1858),\n    [anon_sym_LT] = ACTIONS(1860),\n    [anon_sym_SLASH] = ACTIONS(1860),\n    [anon_sym_struct] = ACTIONS(1860),\n    [anon_sym_async] = ACTIONS(1860),\n    [anon_sym_fn] = ACTIONS(1860),\n    [anon_sym_fn_STAR] = ACTIONS(1858),\n    [anon_sym_new] = ACTIONS(1860),\n    [anon_sym_PLUS] = ACTIONS(1860),\n    [anon_sym_DASH] = ACTIONS(1860),\n    [anon_sym_TILDE] = ACTIONS(1858),\n    [anon_sym_void] = ACTIONS(1860),\n    [anon_sym_delete] = ACTIONS(1860),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1858),\n    [anon_sym_DASH_DASH] = ACTIONS(1858),\n    [anon_sym_DQUOTE] = ACTIONS(1858),\n    [anon_sym_SQUOTE] = ACTIONS(1858),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1858),\n    [sym_number] = ACTIONS(1858),\n    [sym_this] = ACTIONS(1860),\n    [sym_super] = ACTIONS(1860),\n    [sym_true] = ACTIONS(1860),\n    [sym_false] = ACTIONS(1860),\n    [sym_null] = ACTIONS(1860),\n    [sym_undefined] = ACTIONS(1860),\n    [anon_sym_AT] = ACTIONS(1858),\n    [anon_sym_static] = ACTIONS(1860),\n    [anon_sym_declare] = ACTIONS(1860),\n    [anon_sym_public] = ACTIONS(1860),\n    [anon_sym_private] = ACTIONS(1860),\n    [anon_sym_protected] = ACTIONS(1860),\n    [anon_sym_override] = ACTIONS(1860),\n    [anon_sym_readonly] = ACTIONS(1860),\n    [anon_sym_module] = ACTIONS(1860),\n    [anon_sym_any] = ACTIONS(1860),\n    [anon_sym_number] = ACTIONS(1860),\n    [anon_sym_int] = ACTIONS(1860),\n    [anon_sym_float] = ACTIONS(1860),\n    [anon_sym_float2] = ACTIONS(1860),\n    [anon_sym_float3] = ACTIONS(1860),\n    [anon_sym_float4] = ACTIONS(1860),\n    [anon_sym_float3x3] = ACTIONS(1860),\n    [anon_sym_float2x2] = ACTIONS(1860),\n    [anon_sym_float4x4] = ACTIONS(1860),\n    [anon_sym_int2] = ACTIONS(1860),\n    [anon_sym_int3] = ACTIONS(1860),\n    [anon_sym_int4] = ACTIONS(1860),\n    [anon_sym_int3x3] = ACTIONS(1860),\n    [anon_sym_int2x2] = ACTIONS(1860),\n    [anon_sym_int4x4] = ACTIONS(1860),\n    [anon_sym_boolean] = ACTIONS(1860),\n    [anon_sym_string] = ACTIONS(1860),\n    [anon_sym_symbol] = ACTIONS(1860),\n    [anon_sym_workgroup] = ACTIONS(1860),\n    [anon_sym_get] = ACTIONS(1860),\n    [anon_sym_set] = ACTIONS(1860),\n    [anon_sym_trait] = ACTIONS(1860),\n    [anon_sym_impl] = ACTIONS(1860),\n    [anon_sym_enum] = ACTIONS(1860),\n    [anon_sym_shader] = ACTIONS(1860),\n  },\n  [520] = {\n    [ts_builtin_sym_end] = ACTIONS(1862),\n    [sym_identifier] = ACTIONS(1864),\n    [anon_sym_pub] = ACTIONS(1864),\n    [anon_sym_export] = ACTIONS(1864),\n    [anon_sym_type] = ACTIONS(1864),\n    [anon_sym_namespace] = ACTIONS(1864),\n    [anon_sym_LBRACE] = ACTIONS(1862),\n    [anon_sym_RBRACE] = ACTIONS(1862),\n    [anon_sym_typeof] = ACTIONS(1864),\n    [anon_sym_import] = ACTIONS(1864),\n    [anon_sym_var] = ACTIONS(1864),\n    [anon_sym_let] = ACTIONS(1864),\n    [anon_sym_const] = ACTIONS(1864),\n    [anon_sym_BANG] = ACTIONS(1862),\n    [anon_sym_else] = ACTIONS(1864),\n    [anon_sym_if] = ACTIONS(1864),\n    [anon_sym_switch] = ACTIONS(1864),\n    [anon_sym_for] = ACTIONS(1864),\n    [anon_sym_LPAREN] = ACTIONS(1862),\n    [anon_sym_await] = ACTIONS(1864),\n    [anon_sym_while] = ACTIONS(1864),\n    [anon_sym_do] = ACTIONS(1864),\n    [anon_sym_try] = ACTIONS(1864),\n    [anon_sym_with] = ACTIONS(1864),\n    [anon_sym_break] = ACTIONS(1864),\n    [anon_sym_continue] = ACTIONS(1864),\n    [anon_sym_debugger] = ACTIONS(1864),\n    [anon_sym_return] = ACTIONS(1864),\n    [anon_sym_throw] = ACTIONS(1864),\n    [anon_sym_SEMI] = ACTIONS(1862),\n    [anon_sym_case] = ACTIONS(1864),\n    [anon_sym_default] = ACTIONS(1864),\n    [anon_sym_finally] = ACTIONS(1864),\n    [anon_sym_yield] = ACTIONS(1864),\n    [anon_sym_LBRACK] = ACTIONS(1862),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1862),\n    [anon_sym_LT] = ACTIONS(1864),\n    [anon_sym_SLASH] = ACTIONS(1864),\n    [anon_sym_struct] = ACTIONS(1864),\n    [anon_sym_async] = ACTIONS(1864),\n    [anon_sym_fn] = ACTIONS(1864),\n    [anon_sym_fn_STAR] = ACTIONS(1862),\n    [anon_sym_new] = ACTIONS(1864),\n    [anon_sym_PLUS] = ACTIONS(1864),\n    [anon_sym_DASH] = ACTIONS(1864),\n    [anon_sym_TILDE] = ACTIONS(1862),\n    [anon_sym_void] = ACTIONS(1864),\n    [anon_sym_delete] = ACTIONS(1864),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1862),\n    [anon_sym_DASH_DASH] = ACTIONS(1862),\n    [anon_sym_DQUOTE] = ACTIONS(1862),\n    [anon_sym_SQUOTE] = ACTIONS(1862),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1862),\n    [sym_number] = ACTIONS(1862),\n    [sym_this] = ACTIONS(1864),\n    [sym_super] = ACTIONS(1864),\n    [sym_true] = ACTIONS(1864),\n    [sym_false] = ACTIONS(1864),\n    [sym_null] = ACTIONS(1864),\n    [sym_undefined] = ACTIONS(1864),\n    [anon_sym_AT] = ACTIONS(1862),\n    [anon_sym_static] = ACTIONS(1864),\n    [anon_sym_declare] = ACTIONS(1864),\n    [anon_sym_public] = ACTIONS(1864),\n    [anon_sym_private] = ACTIONS(1864),\n    [anon_sym_protected] = ACTIONS(1864),\n    [anon_sym_override] = ACTIONS(1864),\n    [anon_sym_readonly] = ACTIONS(1864),\n    [anon_sym_module] = ACTIONS(1864),\n    [anon_sym_any] = ACTIONS(1864),\n    [anon_sym_number] = ACTIONS(1864),\n    [anon_sym_int] = ACTIONS(1864),\n    [anon_sym_float] = ACTIONS(1864),\n    [anon_sym_float2] = ACTIONS(1864),\n    [anon_sym_float3] = ACTIONS(1864),\n    [anon_sym_float4] = ACTIONS(1864),\n    [anon_sym_float3x3] = ACTIONS(1864),\n    [anon_sym_float2x2] = ACTIONS(1864),\n    [anon_sym_float4x4] = ACTIONS(1864),\n    [anon_sym_int2] = ACTIONS(1864),\n    [anon_sym_int3] = ACTIONS(1864),\n    [anon_sym_int4] = ACTIONS(1864),\n    [anon_sym_int3x3] = ACTIONS(1864),\n    [anon_sym_int2x2] = ACTIONS(1864),\n    [anon_sym_int4x4] = ACTIONS(1864),\n    [anon_sym_boolean] = ACTIONS(1864),\n    [anon_sym_string] = ACTIONS(1864),\n    [anon_sym_symbol] = ACTIONS(1864),\n    [anon_sym_workgroup] = ACTIONS(1864),\n    [anon_sym_get] = ACTIONS(1864),\n    [anon_sym_set] = ACTIONS(1864),\n    [anon_sym_trait] = ACTIONS(1864),\n    [anon_sym_impl] = ACTIONS(1864),\n    [anon_sym_enum] = ACTIONS(1864),\n    [anon_sym_shader] = ACTIONS(1864),\n  },\n  [521] = {\n    [ts_builtin_sym_end] = ACTIONS(1866),\n    [sym_identifier] = ACTIONS(1868),\n    [anon_sym_pub] = ACTIONS(1868),\n    [anon_sym_export] = ACTIONS(1868),\n    [anon_sym_type] = ACTIONS(1868),\n    [anon_sym_namespace] = ACTIONS(1868),\n    [anon_sym_LBRACE] = ACTIONS(1866),\n    [anon_sym_RBRACE] = ACTIONS(1866),\n    [anon_sym_typeof] = ACTIONS(1868),\n    [anon_sym_import] = ACTIONS(1868),\n    [anon_sym_var] = ACTIONS(1868),\n    [anon_sym_let] = ACTIONS(1868),\n    [anon_sym_const] = ACTIONS(1868),\n    [anon_sym_BANG] = ACTIONS(1866),\n    [anon_sym_else] = ACTIONS(1868),\n    [anon_sym_if] = ACTIONS(1868),\n    [anon_sym_switch] = ACTIONS(1868),\n    [anon_sym_for] = ACTIONS(1868),\n    [anon_sym_LPAREN] = ACTIONS(1866),\n    [anon_sym_await] = ACTIONS(1868),\n    [anon_sym_while] = ACTIONS(1868),\n    [anon_sym_do] = ACTIONS(1868),\n    [anon_sym_try] = ACTIONS(1868),\n    [anon_sym_with] = ACTIONS(1868),\n    [anon_sym_break] = ACTIONS(1868),\n    [anon_sym_continue] = ACTIONS(1868),\n    [anon_sym_debugger] = ACTIONS(1868),\n    [anon_sym_return] = ACTIONS(1868),\n    [anon_sym_throw] = ACTIONS(1868),\n    [anon_sym_SEMI] = ACTIONS(1866),\n    [anon_sym_case] = ACTIONS(1868),\n    [anon_sym_default] = ACTIONS(1868),\n    [anon_sym_finally] = ACTIONS(1868),\n    [anon_sym_yield] = ACTIONS(1868),\n    [anon_sym_LBRACK] = ACTIONS(1866),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1866),\n    [anon_sym_LT] = ACTIONS(1868),\n    [anon_sym_SLASH] = ACTIONS(1868),\n    [anon_sym_struct] = ACTIONS(1868),\n    [anon_sym_async] = ACTIONS(1868),\n    [anon_sym_fn] = ACTIONS(1868),\n    [anon_sym_fn_STAR] = ACTIONS(1866),\n    [anon_sym_new] = ACTIONS(1868),\n    [anon_sym_PLUS] = ACTIONS(1868),\n    [anon_sym_DASH] = ACTIONS(1868),\n    [anon_sym_TILDE] = ACTIONS(1866),\n    [anon_sym_void] = ACTIONS(1868),\n    [anon_sym_delete] = ACTIONS(1868),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1866),\n    [anon_sym_DASH_DASH] = ACTIONS(1866),\n    [anon_sym_DQUOTE] = ACTIONS(1866),\n    [anon_sym_SQUOTE] = ACTIONS(1866),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1866),\n    [sym_number] = ACTIONS(1866),\n    [sym_this] = ACTIONS(1868),\n    [sym_super] = ACTIONS(1868),\n    [sym_true] = ACTIONS(1868),\n    [sym_false] = ACTIONS(1868),\n    [sym_null] = ACTIONS(1868),\n    [sym_undefined] = ACTIONS(1868),\n    [anon_sym_AT] = ACTIONS(1866),\n    [anon_sym_static] = ACTIONS(1868),\n    [anon_sym_declare] = ACTIONS(1868),\n    [anon_sym_public] = ACTIONS(1868),\n    [anon_sym_private] = ACTIONS(1868),\n    [anon_sym_protected] = ACTIONS(1868),\n    [anon_sym_override] = ACTIONS(1868),\n    [anon_sym_readonly] = ACTIONS(1868),\n    [anon_sym_module] = ACTIONS(1868),\n    [anon_sym_any] = ACTIONS(1868),\n    [anon_sym_number] = ACTIONS(1868),\n    [anon_sym_int] = ACTIONS(1868),\n    [anon_sym_float] = ACTIONS(1868),\n    [anon_sym_float2] = ACTIONS(1868),\n    [anon_sym_float3] = ACTIONS(1868),\n    [anon_sym_float4] = ACTIONS(1868),\n    [anon_sym_float3x3] = ACTIONS(1868),\n    [anon_sym_float2x2] = ACTIONS(1868),\n    [anon_sym_float4x4] = ACTIONS(1868),\n    [anon_sym_int2] = ACTIONS(1868),\n    [anon_sym_int3] = ACTIONS(1868),\n    [anon_sym_int4] = ACTIONS(1868),\n    [anon_sym_int3x3] = ACTIONS(1868),\n    [anon_sym_int2x2] = ACTIONS(1868),\n    [anon_sym_int4x4] = ACTIONS(1868),\n    [anon_sym_boolean] = ACTIONS(1868),\n    [anon_sym_string] = ACTIONS(1868),\n    [anon_sym_symbol] = ACTIONS(1868),\n    [anon_sym_workgroup] = ACTIONS(1868),\n    [anon_sym_get] = ACTIONS(1868),\n    [anon_sym_set] = ACTIONS(1868),\n    [anon_sym_trait] = ACTIONS(1868),\n    [anon_sym_impl] = ACTIONS(1868),\n    [anon_sym_enum] = ACTIONS(1868),\n    [anon_sym_shader] = ACTIONS(1868),\n  },\n  [522] = {\n    [ts_builtin_sym_end] = ACTIONS(1870),\n    [sym_identifier] = ACTIONS(1872),\n    [anon_sym_pub] = ACTIONS(1872),\n    [anon_sym_export] = ACTIONS(1872),\n    [anon_sym_type] = ACTIONS(1872),\n    [anon_sym_namespace] = ACTIONS(1872),\n    [anon_sym_LBRACE] = ACTIONS(1870),\n    [anon_sym_RBRACE] = ACTIONS(1870),\n    [anon_sym_typeof] = ACTIONS(1872),\n    [anon_sym_import] = ACTIONS(1872),\n    [anon_sym_var] = ACTIONS(1872),\n    [anon_sym_let] = ACTIONS(1872),\n    [anon_sym_const] = ACTIONS(1872),\n    [anon_sym_BANG] = ACTIONS(1870),\n    [anon_sym_else] = ACTIONS(1872),\n    [anon_sym_if] = ACTIONS(1872),\n    [anon_sym_switch] = ACTIONS(1872),\n    [anon_sym_for] = ACTIONS(1872),\n    [anon_sym_LPAREN] = ACTIONS(1870),\n    [anon_sym_await] = ACTIONS(1872),\n    [anon_sym_while] = ACTIONS(1872),\n    [anon_sym_do] = ACTIONS(1872),\n    [anon_sym_try] = ACTIONS(1872),\n    [anon_sym_with] = ACTIONS(1872),\n    [anon_sym_break] = ACTIONS(1872),\n    [anon_sym_continue] = ACTIONS(1872),\n    [anon_sym_debugger] = ACTIONS(1872),\n    [anon_sym_return] = ACTIONS(1872),\n    [anon_sym_throw] = ACTIONS(1872),\n    [anon_sym_SEMI] = ACTIONS(1870),\n    [anon_sym_case] = ACTIONS(1872),\n    [anon_sym_default] = ACTIONS(1872),\n    [anon_sym_yield] = ACTIONS(1872),\n    [anon_sym_LBRACK] = ACTIONS(1870),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1870),\n    [anon_sym_LT] = ACTIONS(1872),\n    [anon_sym_SLASH] = ACTIONS(1872),\n    [anon_sym_struct] = ACTIONS(1872),\n    [anon_sym_async] = ACTIONS(1872),\n    [anon_sym_fn] = ACTIONS(1872),\n    [anon_sym_fn_STAR] = ACTIONS(1870),\n    [anon_sym_new] = ACTIONS(1872),\n    [anon_sym_PLUS] = ACTIONS(1872),\n    [anon_sym_DASH] = ACTIONS(1872),\n    [anon_sym_TILDE] = ACTIONS(1870),\n    [anon_sym_void] = ACTIONS(1872),\n    [anon_sym_delete] = ACTIONS(1872),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1870),\n    [anon_sym_DASH_DASH] = ACTIONS(1870),\n    [anon_sym_DQUOTE] = ACTIONS(1870),\n    [anon_sym_SQUOTE] = ACTIONS(1870),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1870),\n    [sym_number] = ACTIONS(1870),\n    [sym_this] = ACTIONS(1872),\n    [sym_super] = ACTIONS(1872),\n    [sym_true] = ACTIONS(1872),\n    [sym_false] = ACTIONS(1872),\n    [sym_null] = ACTIONS(1872),\n    [sym_undefined] = ACTIONS(1872),\n    [anon_sym_AT] = ACTIONS(1870),\n    [anon_sym_static] = ACTIONS(1872),\n    [anon_sym_declare] = ACTIONS(1872),\n    [anon_sym_public] = ACTIONS(1872),\n    [anon_sym_private] = ACTIONS(1872),\n    [anon_sym_protected] = ACTIONS(1872),\n    [anon_sym_override] = ACTIONS(1872),\n    [anon_sym_readonly] = ACTIONS(1872),\n    [anon_sym_module] = ACTIONS(1872),\n    [anon_sym_any] = ACTIONS(1872),\n    [anon_sym_number] = ACTIONS(1872),\n    [anon_sym_int] = ACTIONS(1872),\n    [anon_sym_float] = ACTIONS(1872),\n    [anon_sym_float2] = ACTIONS(1872),\n    [anon_sym_float3] = ACTIONS(1872),\n    [anon_sym_float4] = ACTIONS(1872),\n    [anon_sym_float3x3] = ACTIONS(1872),\n    [anon_sym_float2x2] = ACTIONS(1872),\n    [anon_sym_float4x4] = ACTIONS(1872),\n    [anon_sym_int2] = ACTIONS(1872),\n    [anon_sym_int3] = ACTIONS(1872),\n    [anon_sym_int4] = ACTIONS(1872),\n    [anon_sym_int3x3] = ACTIONS(1872),\n    [anon_sym_int2x2] = ACTIONS(1872),\n    [anon_sym_int4x4] = ACTIONS(1872),\n    [anon_sym_boolean] = ACTIONS(1872),\n    [anon_sym_string] = ACTIONS(1872),\n    [anon_sym_symbol] = ACTIONS(1872),\n    [anon_sym_workgroup] = ACTIONS(1872),\n    [anon_sym_get] = ACTIONS(1872),\n    [anon_sym_set] = ACTIONS(1872),\n    [anon_sym_trait] = ACTIONS(1872),\n    [anon_sym_impl] = ACTIONS(1872),\n    [anon_sym_enum] = ACTIONS(1872),\n    [anon_sym_shader] = ACTIONS(1872),\n    [sym__automatic_semicolon] = ACTIONS(1870),\n  },\n  [523] = {\n    [sym_declaration] = STATE(592),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_module] = ACTIONS(1822),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_global] = ACTIONS(1824),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [524] = {\n    [ts_builtin_sym_end] = ACTIONS(1874),\n    [sym_identifier] = ACTIONS(1876),\n    [anon_sym_pub] = ACTIONS(1876),\n    [anon_sym_export] = ACTIONS(1876),\n    [anon_sym_type] = ACTIONS(1876),\n    [anon_sym_namespace] = ACTIONS(1876),\n    [anon_sym_LBRACE] = ACTIONS(1874),\n    [anon_sym_RBRACE] = ACTIONS(1874),\n    [anon_sym_typeof] = ACTIONS(1876),\n    [anon_sym_import] = ACTIONS(1876),\n    [anon_sym_var] = ACTIONS(1876),\n    [anon_sym_let] = ACTIONS(1876),\n    [anon_sym_const] = ACTIONS(1876),\n    [anon_sym_BANG] = ACTIONS(1874),\n    [anon_sym_else] = ACTIONS(1876),\n    [anon_sym_if] = ACTIONS(1876),\n    [anon_sym_switch] = ACTIONS(1876),\n    [anon_sym_for] = ACTIONS(1876),\n    [anon_sym_LPAREN] = ACTIONS(1874),\n    [anon_sym_RPAREN] = ACTIONS(1874),\n    [anon_sym_await] = ACTIONS(1876),\n    [anon_sym_while] = ACTIONS(1876),\n    [anon_sym_do] = ACTIONS(1876),\n    [anon_sym_try] = ACTIONS(1876),\n    [anon_sym_with] = ACTIONS(1876),\n    [anon_sym_break] = ACTIONS(1876),\n    [anon_sym_continue] = ACTIONS(1876),\n    [anon_sym_debugger] = ACTIONS(1876),\n    [anon_sym_return] = ACTIONS(1876),\n    [anon_sym_throw] = ACTIONS(1876),\n    [anon_sym_SEMI] = ACTIONS(1874),\n    [anon_sym_case] = ACTIONS(1876),\n    [anon_sym_default] = ACTIONS(1876),\n    [anon_sym_yield] = ACTIONS(1876),\n    [anon_sym_LBRACK] = ACTIONS(1874),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1874),\n    [anon_sym_LT] = ACTIONS(1876),\n    [anon_sym_SLASH] = ACTIONS(1876),\n    [anon_sym_struct] = ACTIONS(1876),\n    [anon_sym_async] = ACTIONS(1876),\n    [anon_sym_fn] = ACTIONS(1876),\n    [anon_sym_fn_STAR] = ACTIONS(1874),\n    [anon_sym_new] = ACTIONS(1876),\n    [anon_sym_PLUS] = ACTIONS(1876),\n    [anon_sym_DASH] = ACTIONS(1876),\n    [anon_sym_TILDE] = ACTIONS(1874),\n    [anon_sym_void] = ACTIONS(1876),\n    [anon_sym_delete] = ACTIONS(1876),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1874),\n    [anon_sym_DASH_DASH] = ACTIONS(1874),\n    [anon_sym_DQUOTE] = ACTIONS(1874),\n    [anon_sym_SQUOTE] = ACTIONS(1874),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1874),\n    [sym_number] = ACTIONS(1874),\n    [sym_this] = ACTIONS(1876),\n    [sym_super] = ACTIONS(1876),\n    [sym_true] = ACTIONS(1876),\n    [sym_false] = ACTIONS(1876),\n    [sym_null] = ACTIONS(1876),\n    [sym_undefined] = ACTIONS(1876),\n    [anon_sym_AT] = ACTIONS(1874),\n    [anon_sym_static] = ACTIONS(1876),\n    [anon_sym_declare] = ACTIONS(1876),\n    [anon_sym_public] = ACTIONS(1876),\n    [anon_sym_private] = ACTIONS(1876),\n    [anon_sym_protected] = ACTIONS(1876),\n    [anon_sym_override] = ACTIONS(1876),\n    [anon_sym_readonly] = ACTIONS(1876),\n    [anon_sym_module] = ACTIONS(1876),\n    [anon_sym_any] = ACTIONS(1876),\n    [anon_sym_number] = ACTIONS(1876),\n    [anon_sym_int] = ACTIONS(1876),\n    [anon_sym_float] = ACTIONS(1876),\n    [anon_sym_float2] = ACTIONS(1876),\n    [anon_sym_float3] = ACTIONS(1876),\n    [anon_sym_float4] = ACTIONS(1876),\n    [anon_sym_float3x3] = ACTIONS(1876),\n    [anon_sym_float2x2] = ACTIONS(1876),\n    [anon_sym_float4x4] = ACTIONS(1876),\n    [anon_sym_int2] = ACTIONS(1876),\n    [anon_sym_int3] = ACTIONS(1876),\n    [anon_sym_int4] = ACTIONS(1876),\n    [anon_sym_int3x3] = ACTIONS(1876),\n    [anon_sym_int2x2] = ACTIONS(1876),\n    [anon_sym_int4x4] = ACTIONS(1876),\n    [anon_sym_boolean] = ACTIONS(1876),\n    [anon_sym_string] = ACTIONS(1876),\n    [anon_sym_symbol] = ACTIONS(1876),\n    [anon_sym_workgroup] = ACTIONS(1876),\n    [anon_sym_get] = ACTIONS(1876),\n    [anon_sym_set] = ACTIONS(1876),\n    [anon_sym_trait] = ACTIONS(1876),\n    [anon_sym_impl] = ACTIONS(1876),\n    [anon_sym_enum] = ACTIONS(1876),\n    [anon_sym_shader] = ACTIONS(1876),\n  },\n  [525] = {\n    [ts_builtin_sym_end] = ACTIONS(1358),\n    [sym_identifier] = ACTIONS(1360),\n    [anon_sym_pub] = ACTIONS(1360),\n    [anon_sym_export] = ACTIONS(1360),\n    [anon_sym_type] = ACTIONS(1360),\n    [anon_sym_namespace] = ACTIONS(1360),\n    [anon_sym_LBRACE] = ACTIONS(1358),\n    [anon_sym_RBRACE] = ACTIONS(1358),\n    [anon_sym_typeof] = ACTIONS(1360),\n    [anon_sym_import] = ACTIONS(1360),\n    [anon_sym_var] = ACTIONS(1360),\n    [anon_sym_let] = ACTIONS(1360),\n    [anon_sym_const] = ACTIONS(1360),\n    [anon_sym_BANG] = ACTIONS(1358),\n    [anon_sym_else] = ACTIONS(1360),\n    [anon_sym_if] = ACTIONS(1360),\n    [anon_sym_switch] = ACTIONS(1360),\n    [anon_sym_for] = ACTIONS(1360),\n    [anon_sym_LPAREN] = ACTIONS(1358),\n    [anon_sym_await] = ACTIONS(1360),\n    [anon_sym_while] = ACTIONS(1360),\n    [anon_sym_do] = ACTIONS(1360),\n    [anon_sym_try] = ACTIONS(1360),\n    [anon_sym_with] = ACTIONS(1360),\n    [anon_sym_break] = ACTIONS(1360),\n    [anon_sym_continue] = ACTIONS(1360),\n    [anon_sym_debugger] = ACTIONS(1360),\n    [anon_sym_return] = ACTIONS(1360),\n    [anon_sym_throw] = ACTIONS(1360),\n    [anon_sym_SEMI] = ACTIONS(1358),\n    [anon_sym_case] = ACTIONS(1360),\n    [anon_sym_default] = ACTIONS(1360),\n    [anon_sym_yield] = ACTIONS(1360),\n    [anon_sym_LBRACK] = ACTIONS(1358),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1358),\n    [anon_sym_LT] = ACTIONS(1360),\n    [anon_sym_SLASH] = ACTIONS(1360),\n    [anon_sym_struct] = ACTIONS(1360),\n    [anon_sym_async] = ACTIONS(1360),\n    [anon_sym_fn] = ACTIONS(1360),\n    [anon_sym_fn_STAR] = ACTIONS(1358),\n    [anon_sym_new] = ACTIONS(1360),\n    [anon_sym_PLUS] = ACTIONS(1360),\n    [anon_sym_DASH] = ACTIONS(1360),\n    [anon_sym_TILDE] = ACTIONS(1358),\n    [anon_sym_void] = ACTIONS(1360),\n    [anon_sym_delete] = ACTIONS(1360),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1358),\n    [anon_sym_DASH_DASH] = ACTIONS(1358),\n    [anon_sym_DQUOTE] = ACTIONS(1358),\n    [anon_sym_SQUOTE] = ACTIONS(1358),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1358),\n    [sym_number] = ACTIONS(1358),\n    [sym_this] = ACTIONS(1360),\n    [sym_super] = ACTIONS(1360),\n    [sym_true] = ACTIONS(1360),\n    [sym_false] = ACTIONS(1360),\n    [sym_null] = ACTIONS(1360),\n    [sym_undefined] = ACTIONS(1360),\n    [anon_sym_AT] = ACTIONS(1358),\n    [anon_sym_static] = ACTIONS(1360),\n    [anon_sym_declare] = ACTIONS(1360),\n    [anon_sym_public] = ACTIONS(1360),\n    [anon_sym_private] = ACTIONS(1360),\n    [anon_sym_protected] = ACTIONS(1360),\n    [anon_sym_override] = ACTIONS(1360),\n    [anon_sym_readonly] = ACTIONS(1360),\n    [anon_sym_module] = ACTIONS(1360),\n    [anon_sym_any] = ACTIONS(1360),\n    [anon_sym_number] = ACTIONS(1360),\n    [anon_sym_int] = ACTIONS(1360),\n    [anon_sym_float] = ACTIONS(1360),\n    [anon_sym_float2] = ACTIONS(1360),\n    [anon_sym_float3] = ACTIONS(1360),\n    [anon_sym_float4] = ACTIONS(1360),\n    [anon_sym_float3x3] = ACTIONS(1360),\n    [anon_sym_float2x2] = ACTIONS(1360),\n    [anon_sym_float4x4] = ACTIONS(1360),\n    [anon_sym_int2] = ACTIONS(1360),\n    [anon_sym_int3] = ACTIONS(1360),\n    [anon_sym_int4] = ACTIONS(1360),\n    [anon_sym_int3x3] = ACTIONS(1360),\n    [anon_sym_int2x2] = ACTIONS(1360),\n    [anon_sym_int4x4] = ACTIONS(1360),\n    [anon_sym_boolean] = ACTIONS(1360),\n    [anon_sym_string] = ACTIONS(1360),\n    [anon_sym_symbol] = ACTIONS(1360),\n    [anon_sym_workgroup] = ACTIONS(1360),\n    [anon_sym_get] = ACTIONS(1360),\n    [anon_sym_set] = ACTIONS(1360),\n    [anon_sym_trait] = ACTIONS(1360),\n    [anon_sym_impl] = ACTIONS(1360),\n    [anon_sym_enum] = ACTIONS(1360),\n    [anon_sym_shader] = ACTIONS(1360),\n    [sym__automatic_semicolon] = ACTIONS(1358),\n  },\n  [526] = {\n    [sym_statement_block] = STATE(569),\n    [ts_builtin_sym_end] = ACTIONS(1294),\n    [sym_identifier] = ACTIONS(1296),\n    [anon_sym_pub] = ACTIONS(1296),\n    [anon_sym_export] = ACTIONS(1296),\n    [anon_sym_type] = ACTIONS(1296),\n    [anon_sym_namespace] = ACTIONS(1296),\n    [anon_sym_LBRACE] = ACTIONS(1812),\n    [anon_sym_RBRACE] = ACTIONS(1294),\n    [anon_sym_typeof] = ACTIONS(1296),\n    [anon_sym_import] = ACTIONS(1296),\n    [anon_sym_var] = ACTIONS(1296),\n    [anon_sym_let] = ACTIONS(1296),\n    [anon_sym_const] = ACTIONS(1296),\n    [anon_sym_BANG] = ACTIONS(1294),\n    [anon_sym_else] = ACTIONS(1296),\n    [anon_sym_if] = ACTIONS(1296),\n    [anon_sym_switch] = ACTIONS(1296),\n    [anon_sym_for] = ACTIONS(1296),\n    [anon_sym_LPAREN] = ACTIONS(1294),\n    [anon_sym_await] = ACTIONS(1296),\n    [anon_sym_while] = ACTIONS(1296),\n    [anon_sym_do] = ACTIONS(1296),\n    [anon_sym_try] = ACTIONS(1296),\n    [anon_sym_with] = ACTIONS(1296),\n    [anon_sym_break] = ACTIONS(1296),\n    [anon_sym_continue] = ACTIONS(1296),\n    [anon_sym_debugger] = ACTIONS(1296),\n    [anon_sym_return] = ACTIONS(1296),\n    [anon_sym_throw] = ACTIONS(1296),\n    [anon_sym_SEMI] = ACTIONS(1294),\n    [anon_sym_case] = ACTIONS(1296),\n    [anon_sym_default] = ACTIONS(1296),\n    [anon_sym_yield] = ACTIONS(1296),\n    [anon_sym_LBRACK] = ACTIONS(1294),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1294),\n    [anon_sym_LT] = ACTIONS(1296),\n    [anon_sym_SLASH] = ACTIONS(1296),\n    [anon_sym_struct] = ACTIONS(1296),\n    [anon_sym_async] = ACTIONS(1296),\n    [anon_sym_fn] = ACTIONS(1296),\n    [anon_sym_fn_STAR] = ACTIONS(1294),\n    [anon_sym_new] = ACTIONS(1296),\n    [anon_sym_PLUS] = ACTIONS(1296),\n    [anon_sym_DASH] = ACTIONS(1296),\n    [anon_sym_TILDE] = ACTIONS(1294),\n    [anon_sym_void] = ACTIONS(1296),\n    [anon_sym_delete] = ACTIONS(1296),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1294),\n    [anon_sym_DASH_DASH] = ACTIONS(1294),\n    [anon_sym_DQUOTE] = ACTIONS(1294),\n    [anon_sym_SQUOTE] = ACTIONS(1294),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1294),\n    [sym_number] = ACTIONS(1294),\n    [sym_this] = ACTIONS(1296),\n    [sym_super] = ACTIONS(1296),\n    [sym_true] = ACTIONS(1296),\n    [sym_false] = ACTIONS(1296),\n    [sym_null] = ACTIONS(1296),\n    [sym_undefined] = ACTIONS(1296),\n    [anon_sym_AT] = ACTIONS(1294),\n    [anon_sym_static] = ACTIONS(1296),\n    [anon_sym_declare] = ACTIONS(1296),\n    [anon_sym_public] = ACTIONS(1296),\n    [anon_sym_private] = ACTIONS(1296),\n    [anon_sym_protected] = ACTIONS(1296),\n    [anon_sym_override] = ACTIONS(1296),\n    [anon_sym_readonly] = ACTIONS(1296),\n    [anon_sym_module] = ACTIONS(1296),\n    [anon_sym_any] = ACTIONS(1296),\n    [anon_sym_number] = ACTIONS(1296),\n    [anon_sym_int] = ACTIONS(1296),\n    [anon_sym_float] = ACTIONS(1296),\n    [anon_sym_float2] = ACTIONS(1296),\n    [anon_sym_float3] = ACTIONS(1296),\n    [anon_sym_float4] = ACTIONS(1296),\n    [anon_sym_float3x3] = ACTIONS(1296),\n    [anon_sym_float2x2] = ACTIONS(1296),\n    [anon_sym_float4x4] = ACTIONS(1296),\n    [anon_sym_int2] = ACTIONS(1296),\n    [anon_sym_int3] = ACTIONS(1296),\n    [anon_sym_int4] = ACTIONS(1296),\n    [anon_sym_int3x3] = ACTIONS(1296),\n    [anon_sym_int2x2] = ACTIONS(1296),\n    [anon_sym_int4x4] = ACTIONS(1296),\n    [anon_sym_boolean] = ACTIONS(1296),\n    [anon_sym_string] = ACTIONS(1296),\n    [anon_sym_symbol] = ACTIONS(1296),\n    [anon_sym_workgroup] = ACTIONS(1296),\n    [anon_sym_get] = ACTIONS(1296),\n    [anon_sym_set] = ACTIONS(1296),\n    [anon_sym_trait] = ACTIONS(1296),\n    [anon_sym_impl] = ACTIONS(1296),\n    [anon_sym_enum] = ACTIONS(1296),\n    [anon_sym_shader] = ACTIONS(1296),\n  },\n  [527] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_pub] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_type] = ACTIONS(1328),\n    [anon_sym_namespace] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_BANG] = ACTIONS(1326),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1326),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_with] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_SEMI] = ACTIONS(1326),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_LBRACK] = ACTIONS(1326),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1326),\n    [anon_sym_LT] = ACTIONS(1328),\n    [anon_sym_SLASH] = ACTIONS(1328),\n    [anon_sym_struct] = ACTIONS(1328),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_fn] = ACTIONS(1328),\n    [anon_sym_fn_STAR] = ACTIONS(1326),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_PLUS] = ACTIONS(1328),\n    [anon_sym_DASH] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1326),\n    [anon_sym_DASH_DASH] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1326),\n    [sym_number] = ACTIONS(1326),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_static] = ACTIONS(1328),\n    [anon_sym_declare] = ACTIONS(1328),\n    [anon_sym_public] = ACTIONS(1328),\n    [anon_sym_private] = ACTIONS(1328),\n    [anon_sym_protected] = ACTIONS(1328),\n    [anon_sym_override] = ACTIONS(1328),\n    [anon_sym_readonly] = ACTIONS(1328),\n    [anon_sym_module] = ACTIONS(1328),\n    [anon_sym_any] = ACTIONS(1328),\n    [anon_sym_number] = ACTIONS(1328),\n    [anon_sym_int] = ACTIONS(1328),\n    [anon_sym_float] = ACTIONS(1328),\n    [anon_sym_float2] = ACTIONS(1328),\n    [anon_sym_float3] = ACTIONS(1328),\n    [anon_sym_float4] = ACTIONS(1328),\n    [anon_sym_float3x3] = ACTIONS(1328),\n    [anon_sym_float2x2] = ACTIONS(1328),\n    [anon_sym_float4x4] = ACTIONS(1328),\n    [anon_sym_int2] = ACTIONS(1328),\n    [anon_sym_int3] = ACTIONS(1328),\n    [anon_sym_int4] = ACTIONS(1328),\n    [anon_sym_int3x3] = ACTIONS(1328),\n    [anon_sym_int2x2] = ACTIONS(1328),\n    [anon_sym_int4x4] = ACTIONS(1328),\n    [anon_sym_boolean] = ACTIONS(1328),\n    [anon_sym_string] = ACTIONS(1328),\n    [anon_sym_symbol] = ACTIONS(1328),\n    [anon_sym_workgroup] = ACTIONS(1328),\n    [anon_sym_get] = ACTIONS(1328),\n    [anon_sym_set] = ACTIONS(1328),\n    [anon_sym_trait] = ACTIONS(1328),\n    [anon_sym_impl] = ACTIONS(1328),\n    [anon_sym_enum] = ACTIONS(1328),\n    [anon_sym_shader] = ACTIONS(1328),\n    [sym__automatic_semicolon] = ACTIONS(1878),\n  },\n  [528] = {\n    [ts_builtin_sym_end] = ACTIONS(1880),\n    [sym_identifier] = ACTIONS(1882),\n    [anon_sym_pub] = ACTIONS(1882),\n    [anon_sym_export] = ACTIONS(1882),\n    [anon_sym_type] = ACTIONS(1882),\n    [anon_sym_namespace] = ACTIONS(1882),\n    [anon_sym_LBRACE] = ACTIONS(1880),\n    [anon_sym_RBRACE] = ACTIONS(1880),\n    [anon_sym_typeof] = ACTIONS(1882),\n    [anon_sym_import] = ACTIONS(1882),\n    [anon_sym_var] = ACTIONS(1882),\n    [anon_sym_let] = ACTIONS(1882),\n    [anon_sym_const] = ACTIONS(1882),\n    [anon_sym_BANG] = ACTIONS(1880),\n    [anon_sym_else] = ACTIONS(1882),\n    [anon_sym_if] = ACTIONS(1882),\n    [anon_sym_switch] = ACTIONS(1882),\n    [anon_sym_for] = ACTIONS(1882),\n    [anon_sym_LPAREN] = ACTIONS(1880),\n    [anon_sym_RPAREN] = ACTIONS(1880),\n    [anon_sym_await] = ACTIONS(1882),\n    [anon_sym_while] = ACTIONS(1882),\n    [anon_sym_do] = ACTIONS(1882),\n    [anon_sym_try] = ACTIONS(1882),\n    [anon_sym_with] = ACTIONS(1882),\n    [anon_sym_break] = ACTIONS(1882),\n    [anon_sym_continue] = ACTIONS(1882),\n    [anon_sym_debugger] = ACTIONS(1882),\n    [anon_sym_return] = ACTIONS(1882),\n    [anon_sym_throw] = ACTIONS(1882),\n    [anon_sym_SEMI] = ACTIONS(1880),\n    [anon_sym_case] = ACTIONS(1882),\n    [anon_sym_default] = ACTIONS(1882),\n    [anon_sym_yield] = ACTIONS(1882),\n    [anon_sym_LBRACK] = ACTIONS(1880),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1880),\n    [anon_sym_LT] = ACTIONS(1882),\n    [anon_sym_SLASH] = ACTIONS(1882),\n    [anon_sym_struct] = ACTIONS(1882),\n    [anon_sym_async] = ACTIONS(1882),\n    [anon_sym_fn] = ACTIONS(1882),\n    [anon_sym_fn_STAR] = ACTIONS(1880),\n    [anon_sym_new] = ACTIONS(1882),\n    [anon_sym_PLUS] = ACTIONS(1882),\n    [anon_sym_DASH] = ACTIONS(1882),\n    [anon_sym_TILDE] = ACTIONS(1880),\n    [anon_sym_void] = ACTIONS(1882),\n    [anon_sym_delete] = ACTIONS(1882),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1880),\n    [anon_sym_DASH_DASH] = ACTIONS(1880),\n    [anon_sym_DQUOTE] = ACTIONS(1880),\n    [anon_sym_SQUOTE] = ACTIONS(1880),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1880),\n    [sym_number] = ACTIONS(1880),\n    [sym_this] = ACTIONS(1882),\n    [sym_super] = ACTIONS(1882),\n    [sym_true] = ACTIONS(1882),\n    [sym_false] = ACTIONS(1882),\n    [sym_null] = ACTIONS(1882),\n    [sym_undefined] = ACTIONS(1882),\n    [anon_sym_AT] = ACTIONS(1880),\n    [anon_sym_static] = ACTIONS(1882),\n    [anon_sym_declare] = ACTIONS(1882),\n    [anon_sym_public] = ACTIONS(1882),\n    [anon_sym_private] = ACTIONS(1882),\n    [anon_sym_protected] = ACTIONS(1882),\n    [anon_sym_override] = ACTIONS(1882),\n    [anon_sym_readonly] = ACTIONS(1882),\n    [anon_sym_module] = ACTIONS(1882),\n    [anon_sym_any] = ACTIONS(1882),\n    [anon_sym_number] = ACTIONS(1882),\n    [anon_sym_int] = ACTIONS(1882),\n    [anon_sym_float] = ACTIONS(1882),\n    [anon_sym_float2] = ACTIONS(1882),\n    [anon_sym_float3] = ACTIONS(1882),\n    [anon_sym_float4] = ACTIONS(1882),\n    [anon_sym_float3x3] = ACTIONS(1882),\n    [anon_sym_float2x2] = ACTIONS(1882),\n    [anon_sym_float4x4] = ACTIONS(1882),\n    [anon_sym_int2] = ACTIONS(1882),\n    [anon_sym_int3] = ACTIONS(1882),\n    [anon_sym_int4] = ACTIONS(1882),\n    [anon_sym_int3x3] = ACTIONS(1882),\n    [anon_sym_int2x2] = ACTIONS(1882),\n    [anon_sym_int4x4] = ACTIONS(1882),\n    [anon_sym_boolean] = ACTIONS(1882),\n    [anon_sym_string] = ACTIONS(1882),\n    [anon_sym_symbol] = ACTIONS(1882),\n    [anon_sym_workgroup] = ACTIONS(1882),\n    [anon_sym_get] = ACTIONS(1882),\n    [anon_sym_set] = ACTIONS(1882),\n    [anon_sym_trait] = ACTIONS(1882),\n    [anon_sym_impl] = ACTIONS(1882),\n    [anon_sym_enum] = ACTIONS(1882),\n    [anon_sym_shader] = ACTIONS(1882),\n  },\n  [529] = {\n    [ts_builtin_sym_end] = ACTIONS(1884),\n    [sym_identifier] = ACTIONS(1886),\n    [anon_sym_pub] = ACTIONS(1886),\n    [anon_sym_export] = ACTIONS(1886),\n    [anon_sym_type] = ACTIONS(1886),\n    [anon_sym_namespace] = ACTIONS(1886),\n    [anon_sym_LBRACE] = ACTIONS(1884),\n    [anon_sym_RBRACE] = ACTIONS(1884),\n    [anon_sym_typeof] = ACTIONS(1886),\n    [anon_sym_import] = ACTIONS(1886),\n    [anon_sym_var] = ACTIONS(1886),\n    [anon_sym_let] = ACTIONS(1886),\n    [anon_sym_const] = ACTIONS(1886),\n    [anon_sym_BANG] = ACTIONS(1884),\n    [anon_sym_else] = ACTIONS(1886),\n    [anon_sym_if] = ACTIONS(1886),\n    [anon_sym_switch] = ACTIONS(1886),\n    [anon_sym_for] = ACTIONS(1886),\n    [anon_sym_LPAREN] = ACTIONS(1884),\n    [anon_sym_await] = ACTIONS(1886),\n    [anon_sym_while] = ACTIONS(1886),\n    [anon_sym_do] = ACTIONS(1886),\n    [anon_sym_try] = ACTIONS(1886),\n    [anon_sym_with] = ACTIONS(1886),\n    [anon_sym_break] = ACTIONS(1886),\n    [anon_sym_continue] = ACTIONS(1886),\n    [anon_sym_debugger] = ACTIONS(1886),\n    [anon_sym_return] = ACTIONS(1886),\n    [anon_sym_throw] = ACTIONS(1886),\n    [anon_sym_SEMI] = ACTIONS(1884),\n    [anon_sym_case] = ACTIONS(1886),\n    [anon_sym_default] = ACTIONS(1886),\n    [anon_sym_yield] = ACTIONS(1886),\n    [anon_sym_LBRACK] = ACTIONS(1884),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1884),\n    [anon_sym_LT] = ACTIONS(1886),\n    [anon_sym_SLASH] = ACTIONS(1886),\n    [anon_sym_struct] = ACTIONS(1886),\n    [anon_sym_async] = ACTIONS(1886),\n    [anon_sym_fn] = ACTIONS(1886),\n    [anon_sym_fn_STAR] = ACTIONS(1884),\n    [anon_sym_new] = ACTIONS(1886),\n    [anon_sym_PLUS] = ACTIONS(1886),\n    [anon_sym_DASH] = ACTIONS(1886),\n    [anon_sym_TILDE] = ACTIONS(1884),\n    [anon_sym_void] = ACTIONS(1886),\n    [anon_sym_delete] = ACTIONS(1886),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1884),\n    [anon_sym_DASH_DASH] = ACTIONS(1884),\n    [anon_sym_DQUOTE] = ACTIONS(1884),\n    [anon_sym_SQUOTE] = ACTIONS(1884),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1884),\n    [sym_number] = ACTIONS(1884),\n    [sym_this] = ACTIONS(1886),\n    [sym_super] = ACTIONS(1886),\n    [sym_true] = ACTIONS(1886),\n    [sym_false] = ACTIONS(1886),\n    [sym_null] = ACTIONS(1886),\n    [sym_undefined] = ACTIONS(1886),\n    [anon_sym_AT] = ACTIONS(1884),\n    [anon_sym_static] = ACTIONS(1886),\n    [anon_sym_declare] = ACTIONS(1886),\n    [anon_sym_public] = ACTIONS(1886),\n    [anon_sym_private] = ACTIONS(1886),\n    [anon_sym_protected] = ACTIONS(1886),\n    [anon_sym_override] = ACTIONS(1886),\n    [anon_sym_readonly] = ACTIONS(1886),\n    [anon_sym_module] = ACTIONS(1886),\n    [anon_sym_any] = ACTIONS(1886),\n    [anon_sym_number] = ACTIONS(1886),\n    [anon_sym_int] = ACTIONS(1886),\n    [anon_sym_float] = ACTIONS(1886),\n    [anon_sym_float2] = ACTIONS(1886),\n    [anon_sym_float3] = ACTIONS(1886),\n    [anon_sym_float4] = ACTIONS(1886),\n    [anon_sym_float3x3] = ACTIONS(1886),\n    [anon_sym_float2x2] = ACTIONS(1886),\n    [anon_sym_float4x4] = ACTIONS(1886),\n    [anon_sym_int2] = ACTIONS(1886),\n    [anon_sym_int3] = ACTIONS(1886),\n    [anon_sym_int4] = ACTIONS(1886),\n    [anon_sym_int3x3] = ACTIONS(1886),\n    [anon_sym_int2x2] = ACTIONS(1886),\n    [anon_sym_int4x4] = ACTIONS(1886),\n    [anon_sym_boolean] = ACTIONS(1886),\n    [anon_sym_string] = ACTIONS(1886),\n    [anon_sym_symbol] = ACTIONS(1886),\n    [anon_sym_workgroup] = ACTIONS(1886),\n    [anon_sym_get] = ACTIONS(1886),\n    [anon_sym_set] = ACTIONS(1886),\n    [anon_sym_trait] = ACTIONS(1886),\n    [anon_sym_impl] = ACTIONS(1886),\n    [anon_sym_enum] = ACTIONS(1886),\n    [anon_sym_shader] = ACTIONS(1886),\n    [sym__automatic_semicolon] = ACTIONS(1884),\n  },\n  [530] = {\n    [ts_builtin_sym_end] = ACTIONS(1888),\n    [sym_identifier] = ACTIONS(1890),\n    [anon_sym_pub] = ACTIONS(1890),\n    [anon_sym_export] = ACTIONS(1890),\n    [anon_sym_type] = ACTIONS(1890),\n    [anon_sym_namespace] = ACTIONS(1890),\n    [anon_sym_LBRACE] = ACTIONS(1888),\n    [anon_sym_RBRACE] = ACTIONS(1888),\n    [anon_sym_typeof] = ACTIONS(1890),\n    [anon_sym_import] = ACTIONS(1890),\n    [anon_sym_var] = ACTIONS(1890),\n    [anon_sym_let] = ACTIONS(1890),\n    [anon_sym_const] = ACTIONS(1890),\n    [anon_sym_BANG] = ACTIONS(1888),\n    [anon_sym_else] = ACTIONS(1890),\n    [anon_sym_if] = ACTIONS(1890),\n    [anon_sym_switch] = ACTIONS(1890),\n    [anon_sym_for] = ACTIONS(1890),\n    [anon_sym_LPAREN] = ACTIONS(1888),\n    [anon_sym_await] = ACTIONS(1890),\n    [anon_sym_while] = ACTIONS(1890),\n    [anon_sym_do] = ACTIONS(1890),\n    [anon_sym_try] = ACTIONS(1890),\n    [anon_sym_with] = ACTIONS(1890),\n    [anon_sym_break] = ACTIONS(1890),\n    [anon_sym_continue] = ACTIONS(1890),\n    [anon_sym_debugger] = ACTIONS(1890),\n    [anon_sym_return] = ACTIONS(1890),\n    [anon_sym_throw] = ACTIONS(1890),\n    [anon_sym_SEMI] = ACTIONS(1888),\n    [anon_sym_case] = ACTIONS(1890),\n    [anon_sym_default] = ACTIONS(1890),\n    [anon_sym_yield] = ACTIONS(1890),\n    [anon_sym_LBRACK] = ACTIONS(1888),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1888),\n    [anon_sym_LT] = ACTIONS(1890),\n    [anon_sym_SLASH] = ACTIONS(1890),\n    [anon_sym_struct] = ACTIONS(1890),\n    [anon_sym_async] = ACTIONS(1890),\n    [anon_sym_fn] = ACTIONS(1890),\n    [anon_sym_fn_STAR] = ACTIONS(1888),\n    [anon_sym_new] = ACTIONS(1890),\n    [anon_sym_PLUS] = ACTIONS(1890),\n    [anon_sym_DASH] = ACTIONS(1890),\n    [anon_sym_TILDE] = ACTIONS(1888),\n    [anon_sym_void] = ACTIONS(1890),\n    [anon_sym_delete] = ACTIONS(1890),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1888),\n    [anon_sym_DASH_DASH] = ACTIONS(1888),\n    [anon_sym_DQUOTE] = ACTIONS(1888),\n    [anon_sym_SQUOTE] = ACTIONS(1888),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1888),\n    [sym_number] = ACTIONS(1888),\n    [sym_this] = ACTIONS(1890),\n    [sym_super] = ACTIONS(1890),\n    [sym_true] = ACTIONS(1890),\n    [sym_false] = ACTIONS(1890),\n    [sym_null] = ACTIONS(1890),\n    [sym_undefined] = ACTIONS(1890),\n    [anon_sym_AT] = ACTIONS(1888),\n    [anon_sym_static] = ACTIONS(1890),\n    [anon_sym_declare] = ACTIONS(1890),\n    [anon_sym_public] = ACTIONS(1890),\n    [anon_sym_private] = ACTIONS(1890),\n    [anon_sym_protected] = ACTIONS(1890),\n    [anon_sym_override] = ACTIONS(1890),\n    [anon_sym_readonly] = ACTIONS(1890),\n    [anon_sym_module] = ACTIONS(1890),\n    [anon_sym_any] = ACTIONS(1890),\n    [anon_sym_number] = ACTIONS(1890),\n    [anon_sym_int] = ACTIONS(1890),\n    [anon_sym_float] = ACTIONS(1890),\n    [anon_sym_float2] = ACTIONS(1890),\n    [anon_sym_float3] = ACTIONS(1890),\n    [anon_sym_float4] = ACTIONS(1890),\n    [anon_sym_float3x3] = ACTIONS(1890),\n    [anon_sym_float2x2] = ACTIONS(1890),\n    [anon_sym_float4x4] = ACTIONS(1890),\n    [anon_sym_int2] = ACTIONS(1890),\n    [anon_sym_int3] = ACTIONS(1890),\n    [anon_sym_int4] = ACTIONS(1890),\n    [anon_sym_int3x3] = ACTIONS(1890),\n    [anon_sym_int2x2] = ACTIONS(1890),\n    [anon_sym_int4x4] = ACTIONS(1890),\n    [anon_sym_boolean] = ACTIONS(1890),\n    [anon_sym_string] = ACTIONS(1890),\n    [anon_sym_symbol] = ACTIONS(1890),\n    [anon_sym_workgroup] = ACTIONS(1890),\n    [anon_sym_get] = ACTIONS(1890),\n    [anon_sym_set] = ACTIONS(1890),\n    [anon_sym_trait] = ACTIONS(1890),\n    [anon_sym_impl] = ACTIONS(1890),\n    [anon_sym_enum] = ACTIONS(1890),\n    [anon_sym_shader] = ACTIONS(1890),\n    [sym__automatic_semicolon] = ACTIONS(1892),\n  },\n  [531] = {\n    [ts_builtin_sym_end] = ACTIONS(1354),\n    [sym_identifier] = ACTIONS(1356),\n    [anon_sym_pub] = ACTIONS(1356),\n    [anon_sym_export] = ACTIONS(1356),\n    [anon_sym_type] = ACTIONS(1356),\n    [anon_sym_namespace] = ACTIONS(1356),\n    [anon_sym_LBRACE] = ACTIONS(1354),\n    [anon_sym_RBRACE] = ACTIONS(1354),\n    [anon_sym_typeof] = ACTIONS(1356),\n    [anon_sym_import] = ACTIONS(1356),\n    [anon_sym_var] = ACTIONS(1356),\n    [anon_sym_let] = ACTIONS(1356),\n    [anon_sym_const] = ACTIONS(1356),\n    [anon_sym_BANG] = ACTIONS(1354),\n    [anon_sym_else] = ACTIONS(1356),\n    [anon_sym_if] = ACTIONS(1356),\n    [anon_sym_switch] = ACTIONS(1356),\n    [anon_sym_for] = ACTIONS(1356),\n    [anon_sym_LPAREN] = ACTIONS(1354),\n    [anon_sym_await] = ACTIONS(1356),\n    [anon_sym_while] = ACTIONS(1356),\n    [anon_sym_do] = ACTIONS(1356),\n    [anon_sym_try] = ACTIONS(1356),\n    [anon_sym_with] = ACTIONS(1356),\n    [anon_sym_break] = ACTIONS(1356),\n    [anon_sym_continue] = ACTIONS(1356),\n    [anon_sym_debugger] = ACTIONS(1356),\n    [anon_sym_return] = ACTIONS(1356),\n    [anon_sym_throw] = ACTIONS(1356),\n    [anon_sym_SEMI] = ACTIONS(1354),\n    [anon_sym_case] = ACTIONS(1356),\n    [anon_sym_default] = ACTIONS(1356),\n    [anon_sym_yield] = ACTIONS(1356),\n    [anon_sym_LBRACK] = ACTIONS(1354),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1354),\n    [anon_sym_LT] = ACTIONS(1356),\n    [anon_sym_SLASH] = ACTIONS(1356),\n    [anon_sym_DOT] = ACTIONS(1356),\n    [anon_sym_struct] = ACTIONS(1356),\n    [anon_sym_async] = ACTIONS(1356),\n    [anon_sym_fn] = ACTIONS(1356),\n    [anon_sym_fn_STAR] = ACTIONS(1354),\n    [anon_sym_new] = ACTIONS(1356),\n    [anon_sym_PLUS] = ACTIONS(1356),\n    [anon_sym_DASH] = ACTIONS(1356),\n    [anon_sym_TILDE] = ACTIONS(1354),\n    [anon_sym_void] = ACTIONS(1356),\n    [anon_sym_delete] = ACTIONS(1356),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1354),\n    [anon_sym_DASH_DASH] = ACTIONS(1354),\n    [anon_sym_DQUOTE] = ACTIONS(1354),\n    [anon_sym_SQUOTE] = ACTIONS(1354),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1354),\n    [sym_number] = ACTIONS(1354),\n    [sym_this] = ACTIONS(1356),\n    [sym_super] = ACTIONS(1356),\n    [sym_true] = ACTIONS(1356),\n    [sym_false] = ACTIONS(1356),\n    [sym_null] = ACTIONS(1356),\n    [sym_undefined] = ACTIONS(1356),\n    [anon_sym_AT] = ACTIONS(1354),\n    [anon_sym_static] = ACTIONS(1356),\n    [anon_sym_declare] = ACTIONS(1356),\n    [anon_sym_public] = ACTIONS(1356),\n    [anon_sym_private] = ACTIONS(1356),\n    [anon_sym_protected] = ACTIONS(1356),\n    [anon_sym_override] = ACTIONS(1356),\n    [anon_sym_readonly] = ACTIONS(1356),\n    [anon_sym_module] = ACTIONS(1356),\n    [anon_sym_any] = ACTIONS(1356),\n    [anon_sym_number] = ACTIONS(1356),\n    [anon_sym_int] = ACTIONS(1356),\n    [anon_sym_float] = ACTIONS(1356),\n    [anon_sym_float2] = ACTIONS(1356),\n    [anon_sym_float3] = ACTIONS(1356),\n    [anon_sym_float4] = ACTIONS(1356),\n    [anon_sym_float3x3] = ACTIONS(1356),\n    [anon_sym_float2x2] = ACTIONS(1356),\n    [anon_sym_float4x4] = ACTIONS(1356),\n    [anon_sym_int2] = ACTIONS(1356),\n    [anon_sym_int3] = ACTIONS(1356),\n    [anon_sym_int4] = ACTIONS(1356),\n    [anon_sym_int3x3] = ACTIONS(1356),\n    [anon_sym_int2x2] = ACTIONS(1356),\n    [anon_sym_int4x4] = ACTIONS(1356),\n    [anon_sym_boolean] = ACTIONS(1356),\n    [anon_sym_string] = ACTIONS(1356),\n    [anon_sym_symbol] = ACTIONS(1356),\n    [anon_sym_workgroup] = ACTIONS(1356),\n    [anon_sym_get] = ACTIONS(1356),\n    [anon_sym_set] = ACTIONS(1356),\n    [anon_sym_trait] = ACTIONS(1356),\n    [anon_sym_impl] = ACTIONS(1356),\n    [anon_sym_enum] = ACTIONS(1356),\n    [anon_sym_shader] = ACTIONS(1356),\n  },\n  [532] = {\n    [ts_builtin_sym_end] = ACTIONS(1894),\n    [sym_identifier] = ACTIONS(1896),\n    [anon_sym_pub] = ACTIONS(1896),\n    [anon_sym_export] = ACTIONS(1896),\n    [anon_sym_type] = ACTIONS(1896),\n    [anon_sym_namespace] = ACTIONS(1896),\n    [anon_sym_LBRACE] = ACTIONS(1894),\n    [anon_sym_RBRACE] = ACTIONS(1894),\n    [anon_sym_typeof] = ACTIONS(1896),\n    [anon_sym_import] = ACTIONS(1896),\n    [anon_sym_var] = ACTIONS(1896),\n    [anon_sym_let] = ACTIONS(1896),\n    [anon_sym_const] = ACTIONS(1896),\n    [anon_sym_BANG] = ACTIONS(1894),\n    [anon_sym_else] = ACTIONS(1896),\n    [anon_sym_if] = ACTIONS(1896),\n    [anon_sym_switch] = ACTIONS(1896),\n    [anon_sym_for] = ACTIONS(1896),\n    [anon_sym_LPAREN] = ACTIONS(1894),\n    [anon_sym_await] = ACTIONS(1896),\n    [anon_sym_while] = ACTIONS(1896),\n    [anon_sym_do] = ACTIONS(1896),\n    [anon_sym_try] = ACTIONS(1896),\n    [anon_sym_with] = ACTIONS(1896),\n    [anon_sym_break] = ACTIONS(1896),\n    [anon_sym_continue] = ACTIONS(1896),\n    [anon_sym_debugger] = ACTIONS(1896),\n    [anon_sym_return] = ACTIONS(1896),\n    [anon_sym_throw] = ACTIONS(1896),\n    [anon_sym_SEMI] = ACTIONS(1894),\n    [anon_sym_case] = ACTIONS(1896),\n    [anon_sym_default] = ACTIONS(1896),\n    [anon_sym_yield] = ACTIONS(1896),\n    [anon_sym_LBRACK] = ACTIONS(1894),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1894),\n    [anon_sym_LT] = ACTIONS(1896),\n    [anon_sym_SLASH] = ACTIONS(1896),\n    [anon_sym_struct] = ACTIONS(1896),\n    [anon_sym_async] = ACTIONS(1896),\n    [anon_sym_fn] = ACTIONS(1896),\n    [anon_sym_fn_STAR] = ACTIONS(1894),\n    [anon_sym_new] = ACTIONS(1896),\n    [anon_sym_PLUS] = ACTIONS(1896),\n    [anon_sym_DASH] = ACTIONS(1896),\n    [anon_sym_TILDE] = ACTIONS(1894),\n    [anon_sym_void] = ACTIONS(1896),\n    [anon_sym_delete] = ACTIONS(1896),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1894),\n    [anon_sym_DASH_DASH] = ACTIONS(1894),\n    [anon_sym_DQUOTE] = ACTIONS(1894),\n    [anon_sym_SQUOTE] = ACTIONS(1894),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1894),\n    [sym_number] = ACTIONS(1894),\n    [sym_this] = ACTIONS(1896),\n    [sym_super] = ACTIONS(1896),\n    [sym_true] = ACTIONS(1896),\n    [sym_false] = ACTIONS(1896),\n    [sym_null] = ACTIONS(1896),\n    [sym_undefined] = ACTIONS(1896),\n    [anon_sym_AT] = ACTIONS(1894),\n    [anon_sym_static] = ACTIONS(1896),\n    [anon_sym_declare] = ACTIONS(1896),\n    [anon_sym_public] = ACTIONS(1896),\n    [anon_sym_private] = ACTIONS(1896),\n    [anon_sym_protected] = ACTIONS(1896),\n    [anon_sym_override] = ACTIONS(1896),\n    [anon_sym_readonly] = ACTIONS(1896),\n    [anon_sym_module] = ACTIONS(1896),\n    [anon_sym_any] = ACTIONS(1896),\n    [anon_sym_number] = ACTIONS(1896),\n    [anon_sym_int] = ACTIONS(1896),\n    [anon_sym_float] = ACTIONS(1896),\n    [anon_sym_float2] = ACTIONS(1896),\n    [anon_sym_float3] = ACTIONS(1896),\n    [anon_sym_float4] = ACTIONS(1896),\n    [anon_sym_float3x3] = ACTIONS(1896),\n    [anon_sym_float2x2] = ACTIONS(1896),\n    [anon_sym_float4x4] = ACTIONS(1896),\n    [anon_sym_int2] = ACTIONS(1896),\n    [anon_sym_int3] = ACTIONS(1896),\n    [anon_sym_int4] = ACTIONS(1896),\n    [anon_sym_int3x3] = ACTIONS(1896),\n    [anon_sym_int2x2] = ACTIONS(1896),\n    [anon_sym_int4x4] = ACTIONS(1896),\n    [anon_sym_boolean] = ACTIONS(1896),\n    [anon_sym_string] = ACTIONS(1896),\n    [anon_sym_symbol] = ACTIONS(1896),\n    [anon_sym_workgroup] = ACTIONS(1896),\n    [anon_sym_get] = ACTIONS(1896),\n    [anon_sym_set] = ACTIONS(1896),\n    [anon_sym_trait] = ACTIONS(1896),\n    [anon_sym_impl] = ACTIONS(1896),\n    [anon_sym_enum] = ACTIONS(1896),\n    [anon_sym_shader] = ACTIONS(1896),\n    [sym__automatic_semicolon] = ACTIONS(1898),\n  },\n  [533] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [534] = {\n    [ts_builtin_sym_end] = ACTIONS(1904),\n    [sym_identifier] = ACTIONS(1906),\n    [anon_sym_pub] = ACTIONS(1906),\n    [anon_sym_export] = ACTIONS(1906),\n    [anon_sym_type] = ACTIONS(1906),\n    [anon_sym_namespace] = ACTIONS(1906),\n    [anon_sym_LBRACE] = ACTIONS(1904),\n    [anon_sym_RBRACE] = ACTIONS(1904),\n    [anon_sym_typeof] = ACTIONS(1906),\n    [anon_sym_import] = ACTIONS(1906),\n    [anon_sym_var] = ACTIONS(1906),\n    [anon_sym_let] = ACTIONS(1906),\n    [anon_sym_const] = ACTIONS(1906),\n    [anon_sym_BANG] = ACTIONS(1904),\n    [anon_sym_else] = ACTIONS(1906),\n    [anon_sym_if] = ACTIONS(1906),\n    [anon_sym_switch] = ACTIONS(1906),\n    [anon_sym_for] = ACTIONS(1906),\n    [anon_sym_LPAREN] = ACTIONS(1904),\n    [anon_sym_await] = ACTIONS(1906),\n    [anon_sym_while] = ACTIONS(1906),\n    [anon_sym_do] = ACTIONS(1906),\n    [anon_sym_try] = ACTIONS(1906),\n    [anon_sym_with] = ACTIONS(1906),\n    [anon_sym_break] = ACTIONS(1906),\n    [anon_sym_continue] = ACTIONS(1906),\n    [anon_sym_debugger] = ACTIONS(1906),\n    [anon_sym_return] = ACTIONS(1906),\n    [anon_sym_throw] = ACTIONS(1906),\n    [anon_sym_SEMI] = ACTIONS(1904),\n    [anon_sym_case] = ACTIONS(1906),\n    [anon_sym_default] = ACTIONS(1906),\n    [anon_sym_yield] = ACTIONS(1906),\n    [anon_sym_LBRACK] = ACTIONS(1904),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1904),\n    [anon_sym_LT] = ACTIONS(1906),\n    [anon_sym_SLASH] = ACTIONS(1906),\n    [anon_sym_struct] = ACTIONS(1906),\n    [anon_sym_async] = ACTIONS(1906),\n    [anon_sym_fn] = ACTIONS(1906),\n    [anon_sym_fn_STAR] = ACTIONS(1904),\n    [anon_sym_new] = ACTIONS(1906),\n    [anon_sym_PLUS] = ACTIONS(1906),\n    [anon_sym_DASH] = ACTIONS(1906),\n    [anon_sym_TILDE] = ACTIONS(1904),\n    [anon_sym_void] = ACTIONS(1906),\n    [anon_sym_delete] = ACTIONS(1906),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1904),\n    [anon_sym_DASH_DASH] = ACTIONS(1904),\n    [anon_sym_DQUOTE] = ACTIONS(1904),\n    [anon_sym_SQUOTE] = ACTIONS(1904),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1904),\n    [sym_number] = ACTIONS(1904),\n    [sym_this] = ACTIONS(1906),\n    [sym_super] = ACTIONS(1906),\n    [sym_true] = ACTIONS(1906),\n    [sym_false] = ACTIONS(1906),\n    [sym_null] = ACTIONS(1906),\n    [sym_undefined] = ACTIONS(1906),\n    [anon_sym_AT] = ACTIONS(1904),\n    [anon_sym_static] = ACTIONS(1906),\n    [anon_sym_declare] = ACTIONS(1906),\n    [anon_sym_public] = ACTIONS(1906),\n    [anon_sym_private] = ACTIONS(1906),\n    [anon_sym_protected] = ACTIONS(1906),\n    [anon_sym_override] = ACTIONS(1906),\n    [anon_sym_readonly] = ACTIONS(1906),\n    [anon_sym_module] = ACTIONS(1906),\n    [anon_sym_any] = ACTIONS(1906),\n    [anon_sym_number] = ACTIONS(1906),\n    [anon_sym_int] = ACTIONS(1906),\n    [anon_sym_float] = ACTIONS(1906),\n    [anon_sym_float2] = ACTIONS(1906),\n    [anon_sym_float3] = ACTIONS(1906),\n    [anon_sym_float4] = ACTIONS(1906),\n    [anon_sym_float3x3] = ACTIONS(1906),\n    [anon_sym_float2x2] = ACTIONS(1906),\n    [anon_sym_float4x4] = ACTIONS(1906),\n    [anon_sym_int2] = ACTIONS(1906),\n    [anon_sym_int3] = ACTIONS(1906),\n    [anon_sym_int4] = ACTIONS(1906),\n    [anon_sym_int3x3] = ACTIONS(1906),\n    [anon_sym_int2x2] = ACTIONS(1906),\n    [anon_sym_int4x4] = ACTIONS(1906),\n    [anon_sym_boolean] = ACTIONS(1906),\n    [anon_sym_string] = ACTIONS(1906),\n    [anon_sym_symbol] = ACTIONS(1906),\n    [anon_sym_workgroup] = ACTIONS(1906),\n    [anon_sym_get] = ACTIONS(1906),\n    [anon_sym_set] = ACTIONS(1906),\n    [anon_sym_trait] = ACTIONS(1906),\n    [anon_sym_impl] = ACTIONS(1906),\n    [anon_sym_enum] = ACTIONS(1906),\n    [anon_sym_shader] = ACTIONS(1906),\n  },\n  [535] = {\n    [ts_builtin_sym_end] = ACTIONS(1908),\n    [sym_identifier] = ACTIONS(1910),\n    [anon_sym_pub] = ACTIONS(1910),\n    [anon_sym_export] = ACTIONS(1910),\n    [anon_sym_type] = ACTIONS(1910),\n    [anon_sym_namespace] = ACTIONS(1910),\n    [anon_sym_LBRACE] = ACTIONS(1908),\n    [anon_sym_RBRACE] = ACTIONS(1908),\n    [anon_sym_typeof] = ACTIONS(1910),\n    [anon_sym_import] = ACTIONS(1910),\n    [anon_sym_var] = ACTIONS(1910),\n    [anon_sym_let] = ACTIONS(1910),\n    [anon_sym_const] = ACTIONS(1910),\n    [anon_sym_BANG] = ACTIONS(1908),\n    [anon_sym_else] = ACTIONS(1910),\n    [anon_sym_if] = ACTIONS(1910),\n    [anon_sym_switch] = ACTIONS(1910),\n    [anon_sym_for] = ACTIONS(1910),\n    [anon_sym_LPAREN] = ACTIONS(1908),\n    [anon_sym_await] = ACTIONS(1910),\n    [anon_sym_while] = ACTIONS(1910),\n    [anon_sym_do] = ACTIONS(1910),\n    [anon_sym_try] = ACTIONS(1910),\n    [anon_sym_with] = ACTIONS(1910),\n    [anon_sym_break] = ACTIONS(1910),\n    [anon_sym_continue] = ACTIONS(1910),\n    [anon_sym_debugger] = ACTIONS(1910),\n    [anon_sym_return] = ACTIONS(1910),\n    [anon_sym_throw] = ACTIONS(1910),\n    [anon_sym_SEMI] = ACTIONS(1908),\n    [anon_sym_case] = ACTIONS(1910),\n    [anon_sym_default] = ACTIONS(1910),\n    [anon_sym_yield] = ACTIONS(1910),\n    [anon_sym_LBRACK] = ACTIONS(1908),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1908),\n    [anon_sym_LT] = ACTIONS(1910),\n    [anon_sym_SLASH] = ACTIONS(1910),\n    [anon_sym_struct] = ACTIONS(1910),\n    [anon_sym_async] = ACTIONS(1910),\n    [anon_sym_fn] = ACTIONS(1910),\n    [anon_sym_fn_STAR] = ACTIONS(1908),\n    [anon_sym_new] = ACTIONS(1910),\n    [anon_sym_PLUS] = ACTIONS(1910),\n    [anon_sym_DASH] = ACTIONS(1910),\n    [anon_sym_TILDE] = ACTIONS(1908),\n    [anon_sym_void] = ACTIONS(1910),\n    [anon_sym_delete] = ACTIONS(1910),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1908),\n    [anon_sym_DASH_DASH] = ACTIONS(1908),\n    [anon_sym_DQUOTE] = ACTIONS(1908),\n    [anon_sym_SQUOTE] = ACTIONS(1908),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1908),\n    [sym_number] = ACTIONS(1908),\n    [sym_this] = ACTIONS(1910),\n    [sym_super] = ACTIONS(1910),\n    [sym_true] = ACTIONS(1910),\n    [sym_false] = ACTIONS(1910),\n    [sym_null] = ACTIONS(1910),\n    [sym_undefined] = ACTIONS(1910),\n    [anon_sym_AT] = ACTIONS(1908),\n    [anon_sym_static] = ACTIONS(1910),\n    [anon_sym_declare] = ACTIONS(1910),\n    [anon_sym_public] = ACTIONS(1910),\n    [anon_sym_private] = ACTIONS(1910),\n    [anon_sym_protected] = ACTIONS(1910),\n    [anon_sym_override] = ACTIONS(1910),\n    [anon_sym_readonly] = ACTIONS(1910),\n    [anon_sym_module] = ACTIONS(1910),\n    [anon_sym_any] = ACTIONS(1910),\n    [anon_sym_number] = ACTIONS(1910),\n    [anon_sym_int] = ACTIONS(1910),\n    [anon_sym_float] = ACTIONS(1910),\n    [anon_sym_float2] = ACTIONS(1910),\n    [anon_sym_float3] = ACTIONS(1910),\n    [anon_sym_float4] = ACTIONS(1910),\n    [anon_sym_float3x3] = ACTIONS(1910),\n    [anon_sym_float2x2] = ACTIONS(1910),\n    [anon_sym_float4x4] = ACTIONS(1910),\n    [anon_sym_int2] = ACTIONS(1910),\n    [anon_sym_int3] = ACTIONS(1910),\n    [anon_sym_int4] = ACTIONS(1910),\n    [anon_sym_int3x3] = ACTIONS(1910),\n    [anon_sym_int2x2] = ACTIONS(1910),\n    [anon_sym_int4x4] = ACTIONS(1910),\n    [anon_sym_boolean] = ACTIONS(1910),\n    [anon_sym_string] = ACTIONS(1910),\n    [anon_sym_symbol] = ACTIONS(1910),\n    [anon_sym_workgroup] = ACTIONS(1910),\n    [anon_sym_get] = ACTIONS(1910),\n    [anon_sym_set] = ACTIONS(1910),\n    [anon_sym_trait] = ACTIONS(1910),\n    [anon_sym_impl] = ACTIONS(1910),\n    [anon_sym_enum] = ACTIONS(1910),\n    [anon_sym_shader] = ACTIONS(1910),\n  },\n  [536] = {\n    [ts_builtin_sym_end] = ACTIONS(1912),\n    [sym_identifier] = ACTIONS(1914),\n    [anon_sym_pub] = ACTIONS(1914),\n    [anon_sym_export] = ACTIONS(1914),\n    [anon_sym_type] = ACTIONS(1914),\n    [anon_sym_namespace] = ACTIONS(1914),\n    [anon_sym_LBRACE] = ACTIONS(1912),\n    [anon_sym_RBRACE] = ACTIONS(1912),\n    [anon_sym_typeof] = ACTIONS(1914),\n    [anon_sym_import] = ACTIONS(1914),\n    [anon_sym_var] = ACTIONS(1914),\n    [anon_sym_let] = ACTIONS(1914),\n    [anon_sym_const] = ACTIONS(1914),\n    [anon_sym_BANG] = ACTIONS(1912),\n    [anon_sym_else] = ACTIONS(1914),\n    [anon_sym_if] = ACTIONS(1914),\n    [anon_sym_switch] = ACTIONS(1914),\n    [anon_sym_for] = ACTIONS(1914),\n    [anon_sym_LPAREN] = ACTIONS(1912),\n    [anon_sym_await] = ACTIONS(1914),\n    [anon_sym_while] = ACTIONS(1914),\n    [anon_sym_do] = ACTIONS(1914),\n    [anon_sym_try] = ACTIONS(1914),\n    [anon_sym_with] = ACTIONS(1914),\n    [anon_sym_break] = ACTIONS(1914),\n    [anon_sym_continue] = ACTIONS(1914),\n    [anon_sym_debugger] = ACTIONS(1914),\n    [anon_sym_return] = ACTIONS(1914),\n    [anon_sym_throw] = ACTIONS(1914),\n    [anon_sym_SEMI] = ACTIONS(1912),\n    [anon_sym_case] = ACTIONS(1914),\n    [anon_sym_default] = ACTIONS(1914),\n    [anon_sym_yield] = ACTIONS(1914),\n    [anon_sym_LBRACK] = ACTIONS(1912),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1912),\n    [anon_sym_LT] = ACTIONS(1914),\n    [anon_sym_SLASH] = ACTIONS(1914),\n    [anon_sym_struct] = ACTIONS(1914),\n    [anon_sym_async] = ACTIONS(1914),\n    [anon_sym_fn] = ACTIONS(1914),\n    [anon_sym_fn_STAR] = ACTIONS(1912),\n    [anon_sym_new] = ACTIONS(1914),\n    [anon_sym_PLUS] = ACTIONS(1914),\n    [anon_sym_DASH] = ACTIONS(1914),\n    [anon_sym_TILDE] = ACTIONS(1912),\n    [anon_sym_void] = ACTIONS(1914),\n    [anon_sym_delete] = ACTIONS(1914),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1912),\n    [anon_sym_DASH_DASH] = ACTIONS(1912),\n    [anon_sym_DQUOTE] = ACTIONS(1912),\n    [anon_sym_SQUOTE] = ACTIONS(1912),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1912),\n    [sym_number] = ACTIONS(1912),\n    [sym_this] = ACTIONS(1914),\n    [sym_super] = ACTIONS(1914),\n    [sym_true] = ACTIONS(1914),\n    [sym_false] = ACTIONS(1914),\n    [sym_null] = ACTIONS(1914),\n    [sym_undefined] = ACTIONS(1914),\n    [anon_sym_AT] = ACTIONS(1912),\n    [anon_sym_static] = ACTIONS(1914),\n    [anon_sym_declare] = ACTIONS(1914),\n    [anon_sym_public] = ACTIONS(1914),\n    [anon_sym_private] = ACTIONS(1914),\n    [anon_sym_protected] = ACTIONS(1914),\n    [anon_sym_override] = ACTIONS(1914),\n    [anon_sym_readonly] = ACTIONS(1914),\n    [anon_sym_module] = ACTIONS(1914),\n    [anon_sym_any] = ACTIONS(1914),\n    [anon_sym_number] = ACTIONS(1914),\n    [anon_sym_int] = ACTIONS(1914),\n    [anon_sym_float] = ACTIONS(1914),\n    [anon_sym_float2] = ACTIONS(1914),\n    [anon_sym_float3] = ACTIONS(1914),\n    [anon_sym_float4] = ACTIONS(1914),\n    [anon_sym_float3x3] = ACTIONS(1914),\n    [anon_sym_float2x2] = ACTIONS(1914),\n    [anon_sym_float4x4] = ACTIONS(1914),\n    [anon_sym_int2] = ACTIONS(1914),\n    [anon_sym_int3] = ACTIONS(1914),\n    [anon_sym_int4] = ACTIONS(1914),\n    [anon_sym_int3x3] = ACTIONS(1914),\n    [anon_sym_int2x2] = ACTIONS(1914),\n    [anon_sym_int4x4] = ACTIONS(1914),\n    [anon_sym_boolean] = ACTIONS(1914),\n    [anon_sym_string] = ACTIONS(1914),\n    [anon_sym_symbol] = ACTIONS(1914),\n    [anon_sym_workgroup] = ACTIONS(1914),\n    [anon_sym_get] = ACTIONS(1914),\n    [anon_sym_set] = ACTIONS(1914),\n    [anon_sym_trait] = ACTIONS(1914),\n    [anon_sym_impl] = ACTIONS(1914),\n    [anon_sym_enum] = ACTIONS(1914),\n    [anon_sym_shader] = ACTIONS(1914),\n  },\n  [537] = {\n    [ts_builtin_sym_end] = ACTIONS(1916),\n    [sym_identifier] = ACTIONS(1918),\n    [anon_sym_pub] = ACTIONS(1918),\n    [anon_sym_export] = ACTIONS(1918),\n    [anon_sym_type] = ACTIONS(1918),\n    [anon_sym_namespace] = ACTIONS(1918),\n    [anon_sym_LBRACE] = ACTIONS(1916),\n    [anon_sym_RBRACE] = ACTIONS(1916),\n    [anon_sym_typeof] = ACTIONS(1918),\n    [anon_sym_import] = ACTIONS(1918),\n    [anon_sym_var] = ACTIONS(1918),\n    [anon_sym_let] = ACTIONS(1918),\n    [anon_sym_const] = ACTIONS(1918),\n    [anon_sym_BANG] = ACTIONS(1916),\n    [anon_sym_else] = ACTIONS(1918),\n    [anon_sym_if] = ACTIONS(1918),\n    [anon_sym_switch] = ACTIONS(1918),\n    [anon_sym_for] = ACTIONS(1918),\n    [anon_sym_LPAREN] = ACTIONS(1916),\n    [anon_sym_await] = ACTIONS(1918),\n    [anon_sym_while] = ACTIONS(1918),\n    [anon_sym_do] = ACTIONS(1918),\n    [anon_sym_try] = ACTIONS(1918),\n    [anon_sym_with] = ACTIONS(1918),\n    [anon_sym_break] = ACTIONS(1918),\n    [anon_sym_continue] = ACTIONS(1918),\n    [anon_sym_debugger] = ACTIONS(1918),\n    [anon_sym_return] = ACTIONS(1918),\n    [anon_sym_throw] = ACTIONS(1918),\n    [anon_sym_SEMI] = ACTIONS(1916),\n    [anon_sym_case] = ACTIONS(1918),\n    [anon_sym_default] = ACTIONS(1918),\n    [anon_sym_yield] = ACTIONS(1918),\n    [anon_sym_LBRACK] = ACTIONS(1916),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1916),\n    [anon_sym_LT] = ACTIONS(1918),\n    [anon_sym_SLASH] = ACTIONS(1918),\n    [anon_sym_struct] = ACTIONS(1918),\n    [anon_sym_async] = ACTIONS(1918),\n    [anon_sym_fn] = ACTIONS(1918),\n    [anon_sym_fn_STAR] = ACTIONS(1916),\n    [anon_sym_new] = ACTIONS(1918),\n    [anon_sym_PLUS] = ACTIONS(1918),\n    [anon_sym_DASH] = ACTIONS(1918),\n    [anon_sym_TILDE] = ACTIONS(1916),\n    [anon_sym_void] = ACTIONS(1918),\n    [anon_sym_delete] = ACTIONS(1918),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1916),\n    [anon_sym_DASH_DASH] = ACTIONS(1916),\n    [anon_sym_DQUOTE] = ACTIONS(1916),\n    [anon_sym_SQUOTE] = ACTIONS(1916),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1916),\n    [sym_number] = ACTIONS(1916),\n    [sym_this] = ACTIONS(1918),\n    [sym_super] = ACTIONS(1918),\n    [sym_true] = ACTIONS(1918),\n    [sym_false] = ACTIONS(1918),\n    [sym_null] = ACTIONS(1918),\n    [sym_undefined] = ACTIONS(1918),\n    [anon_sym_AT] = ACTIONS(1916),\n    [anon_sym_static] = ACTIONS(1918),\n    [anon_sym_declare] = ACTIONS(1918),\n    [anon_sym_public] = ACTIONS(1918),\n    [anon_sym_private] = ACTIONS(1918),\n    [anon_sym_protected] = ACTIONS(1918),\n    [anon_sym_override] = ACTIONS(1918),\n    [anon_sym_readonly] = ACTIONS(1918),\n    [anon_sym_module] = ACTIONS(1918),\n    [anon_sym_any] = ACTIONS(1918),\n    [anon_sym_number] = ACTIONS(1918),\n    [anon_sym_int] = ACTIONS(1918),\n    [anon_sym_float] = ACTIONS(1918),\n    [anon_sym_float2] = ACTIONS(1918),\n    [anon_sym_float3] = ACTIONS(1918),\n    [anon_sym_float4] = ACTIONS(1918),\n    [anon_sym_float3x3] = ACTIONS(1918),\n    [anon_sym_float2x2] = ACTIONS(1918),\n    [anon_sym_float4x4] = ACTIONS(1918),\n    [anon_sym_int2] = ACTIONS(1918),\n    [anon_sym_int3] = ACTIONS(1918),\n    [anon_sym_int4] = ACTIONS(1918),\n    [anon_sym_int3x3] = ACTIONS(1918),\n    [anon_sym_int2x2] = ACTIONS(1918),\n    [anon_sym_int4x4] = ACTIONS(1918),\n    [anon_sym_boolean] = ACTIONS(1918),\n    [anon_sym_string] = ACTIONS(1918),\n    [anon_sym_symbol] = ACTIONS(1918),\n    [anon_sym_workgroup] = ACTIONS(1918),\n    [anon_sym_get] = ACTIONS(1918),\n    [anon_sym_set] = ACTIONS(1918),\n    [anon_sym_trait] = ACTIONS(1918),\n    [anon_sym_impl] = ACTIONS(1918),\n    [anon_sym_enum] = ACTIONS(1918),\n    [anon_sym_shader] = ACTIONS(1918),\n  },\n  [538] = {\n    [ts_builtin_sym_end] = ACTIONS(1920),\n    [sym_identifier] = ACTIONS(1922),\n    [anon_sym_pub] = ACTIONS(1922),\n    [anon_sym_export] = ACTIONS(1922),\n    [anon_sym_type] = ACTIONS(1922),\n    [anon_sym_namespace] = ACTIONS(1922),\n    [anon_sym_LBRACE] = ACTIONS(1920),\n    [anon_sym_RBRACE] = ACTIONS(1920),\n    [anon_sym_typeof] = ACTIONS(1922),\n    [anon_sym_import] = ACTIONS(1922),\n    [anon_sym_var] = ACTIONS(1922),\n    [anon_sym_let] = ACTIONS(1922),\n    [anon_sym_const] = ACTIONS(1922),\n    [anon_sym_BANG] = ACTIONS(1920),\n    [anon_sym_else] = ACTIONS(1922),\n    [anon_sym_if] = ACTIONS(1922),\n    [anon_sym_switch] = ACTIONS(1922),\n    [anon_sym_for] = ACTIONS(1922),\n    [anon_sym_LPAREN] = ACTIONS(1920),\n    [anon_sym_await] = ACTIONS(1922),\n    [anon_sym_while] = ACTIONS(1922),\n    [anon_sym_do] = ACTIONS(1922),\n    [anon_sym_try] = ACTIONS(1922),\n    [anon_sym_with] = ACTIONS(1922),\n    [anon_sym_break] = ACTIONS(1922),\n    [anon_sym_continue] = ACTIONS(1922),\n    [anon_sym_debugger] = ACTIONS(1922),\n    [anon_sym_return] = ACTIONS(1922),\n    [anon_sym_throw] = ACTIONS(1922),\n    [anon_sym_SEMI] = ACTIONS(1920),\n    [anon_sym_case] = ACTIONS(1922),\n    [anon_sym_default] = ACTIONS(1922),\n    [anon_sym_yield] = ACTIONS(1922),\n    [anon_sym_LBRACK] = ACTIONS(1920),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1920),\n    [anon_sym_LT] = ACTIONS(1922),\n    [anon_sym_SLASH] = ACTIONS(1922),\n    [anon_sym_struct] = ACTIONS(1922),\n    [anon_sym_async] = ACTIONS(1922),\n    [anon_sym_fn] = ACTIONS(1922),\n    [anon_sym_fn_STAR] = ACTIONS(1920),\n    [anon_sym_new] = ACTIONS(1922),\n    [anon_sym_PLUS] = ACTIONS(1922),\n    [anon_sym_DASH] = ACTIONS(1922),\n    [anon_sym_TILDE] = ACTIONS(1920),\n    [anon_sym_void] = ACTIONS(1922),\n    [anon_sym_delete] = ACTIONS(1922),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1920),\n    [anon_sym_DASH_DASH] = ACTIONS(1920),\n    [anon_sym_DQUOTE] = ACTIONS(1920),\n    [anon_sym_SQUOTE] = ACTIONS(1920),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1920),\n    [sym_number] = ACTIONS(1920),\n    [sym_this] = ACTIONS(1922),\n    [sym_super] = ACTIONS(1922),\n    [sym_true] = ACTIONS(1922),\n    [sym_false] = ACTIONS(1922),\n    [sym_null] = ACTIONS(1922),\n    [sym_undefined] = ACTIONS(1922),\n    [anon_sym_AT] = ACTIONS(1920),\n    [anon_sym_static] = ACTIONS(1922),\n    [anon_sym_declare] = ACTIONS(1922),\n    [anon_sym_public] = ACTIONS(1922),\n    [anon_sym_private] = ACTIONS(1922),\n    [anon_sym_protected] = ACTIONS(1922),\n    [anon_sym_override] = ACTIONS(1922),\n    [anon_sym_readonly] = ACTIONS(1922),\n    [anon_sym_module] = ACTIONS(1922),\n    [anon_sym_any] = ACTIONS(1922),\n    [anon_sym_number] = ACTIONS(1922),\n    [anon_sym_int] = ACTIONS(1922),\n    [anon_sym_float] = ACTIONS(1922),\n    [anon_sym_float2] = ACTIONS(1922),\n    [anon_sym_float3] = ACTIONS(1922),\n    [anon_sym_float4] = ACTIONS(1922),\n    [anon_sym_float3x3] = ACTIONS(1922),\n    [anon_sym_float2x2] = ACTIONS(1922),\n    [anon_sym_float4x4] = ACTIONS(1922),\n    [anon_sym_int2] = ACTIONS(1922),\n    [anon_sym_int3] = ACTIONS(1922),\n    [anon_sym_int4] = ACTIONS(1922),\n    [anon_sym_int3x3] = ACTIONS(1922),\n    [anon_sym_int2x2] = ACTIONS(1922),\n    [anon_sym_int4x4] = ACTIONS(1922),\n    [anon_sym_boolean] = ACTIONS(1922),\n    [anon_sym_string] = ACTIONS(1922),\n    [anon_sym_symbol] = ACTIONS(1922),\n    [anon_sym_workgroup] = ACTIONS(1922),\n    [anon_sym_get] = ACTIONS(1922),\n    [anon_sym_set] = ACTIONS(1922),\n    [anon_sym_trait] = ACTIONS(1922),\n    [anon_sym_impl] = ACTIONS(1922),\n    [anon_sym_enum] = ACTIONS(1922),\n    [anon_sym_shader] = ACTIONS(1922),\n  },\n  [539] = {\n    [ts_builtin_sym_end] = ACTIONS(1924),\n    [sym_identifier] = ACTIONS(1926),\n    [anon_sym_pub] = ACTIONS(1926),\n    [anon_sym_export] = ACTIONS(1926),\n    [anon_sym_type] = ACTIONS(1926),\n    [anon_sym_namespace] = ACTIONS(1926),\n    [anon_sym_LBRACE] = ACTIONS(1924),\n    [anon_sym_RBRACE] = ACTIONS(1924),\n    [anon_sym_typeof] = ACTIONS(1926),\n    [anon_sym_import] = ACTIONS(1926),\n    [anon_sym_var] = ACTIONS(1926),\n    [anon_sym_let] = ACTIONS(1926),\n    [anon_sym_const] = ACTIONS(1926),\n    [anon_sym_BANG] = ACTIONS(1924),\n    [anon_sym_else] = ACTIONS(1926),\n    [anon_sym_if] = ACTIONS(1926),\n    [anon_sym_switch] = ACTIONS(1926),\n    [anon_sym_for] = ACTIONS(1926),\n    [anon_sym_LPAREN] = ACTIONS(1924),\n    [anon_sym_await] = ACTIONS(1926),\n    [anon_sym_while] = ACTIONS(1926),\n    [anon_sym_do] = ACTIONS(1926),\n    [anon_sym_try] = ACTIONS(1926),\n    [anon_sym_with] = ACTIONS(1926),\n    [anon_sym_break] = ACTIONS(1926),\n    [anon_sym_continue] = ACTIONS(1926),\n    [anon_sym_debugger] = ACTIONS(1926),\n    [anon_sym_return] = ACTIONS(1926),\n    [anon_sym_throw] = ACTIONS(1926),\n    [anon_sym_SEMI] = ACTIONS(1924),\n    [anon_sym_case] = ACTIONS(1926),\n    [anon_sym_default] = ACTIONS(1926),\n    [anon_sym_yield] = ACTIONS(1926),\n    [anon_sym_LBRACK] = ACTIONS(1924),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1924),\n    [anon_sym_LT] = ACTIONS(1926),\n    [anon_sym_SLASH] = ACTIONS(1926),\n    [anon_sym_struct] = ACTIONS(1926),\n    [anon_sym_async] = ACTIONS(1926),\n    [anon_sym_fn] = ACTIONS(1926),\n    [anon_sym_fn_STAR] = ACTIONS(1924),\n    [anon_sym_new] = ACTIONS(1926),\n    [anon_sym_PLUS] = ACTIONS(1926),\n    [anon_sym_DASH] = ACTIONS(1926),\n    [anon_sym_TILDE] = ACTIONS(1924),\n    [anon_sym_void] = ACTIONS(1926),\n    [anon_sym_delete] = ACTIONS(1926),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1924),\n    [anon_sym_DASH_DASH] = ACTIONS(1924),\n    [anon_sym_DQUOTE] = ACTIONS(1924),\n    [anon_sym_SQUOTE] = ACTIONS(1924),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1924),\n    [sym_number] = ACTIONS(1924),\n    [sym_this] = ACTIONS(1926),\n    [sym_super] = ACTIONS(1926),\n    [sym_true] = ACTIONS(1926),\n    [sym_false] = ACTIONS(1926),\n    [sym_null] = ACTIONS(1926),\n    [sym_undefined] = ACTIONS(1926),\n    [anon_sym_AT] = ACTIONS(1924),\n    [anon_sym_static] = ACTIONS(1926),\n    [anon_sym_declare] = ACTIONS(1926),\n    [anon_sym_public] = ACTIONS(1926),\n    [anon_sym_private] = ACTIONS(1926),\n    [anon_sym_protected] = ACTIONS(1926),\n    [anon_sym_override] = ACTIONS(1926),\n    [anon_sym_readonly] = ACTIONS(1926),\n    [anon_sym_module] = ACTIONS(1926),\n    [anon_sym_any] = ACTIONS(1926),\n    [anon_sym_number] = ACTIONS(1926),\n    [anon_sym_int] = ACTIONS(1926),\n    [anon_sym_float] = ACTIONS(1926),\n    [anon_sym_float2] = ACTIONS(1926),\n    [anon_sym_float3] = ACTIONS(1926),\n    [anon_sym_float4] = ACTIONS(1926),\n    [anon_sym_float3x3] = ACTIONS(1926),\n    [anon_sym_float2x2] = ACTIONS(1926),\n    [anon_sym_float4x4] = ACTIONS(1926),\n    [anon_sym_int2] = ACTIONS(1926),\n    [anon_sym_int3] = ACTIONS(1926),\n    [anon_sym_int4] = ACTIONS(1926),\n    [anon_sym_int3x3] = ACTIONS(1926),\n    [anon_sym_int2x2] = ACTIONS(1926),\n    [anon_sym_int4x4] = ACTIONS(1926),\n    [anon_sym_boolean] = ACTIONS(1926),\n    [anon_sym_string] = ACTIONS(1926),\n    [anon_sym_symbol] = ACTIONS(1926),\n    [anon_sym_workgroup] = ACTIONS(1926),\n    [anon_sym_get] = ACTIONS(1926),\n    [anon_sym_set] = ACTIONS(1926),\n    [anon_sym_trait] = ACTIONS(1926),\n    [anon_sym_impl] = ACTIONS(1926),\n    [anon_sym_enum] = ACTIONS(1926),\n    [anon_sym_shader] = ACTIONS(1926),\n  },\n  [540] = {\n    [ts_builtin_sym_end] = ACTIONS(1928),\n    [sym_identifier] = ACTIONS(1930),\n    [anon_sym_pub] = ACTIONS(1930),\n    [anon_sym_export] = ACTIONS(1930),\n    [anon_sym_type] = ACTIONS(1930),\n    [anon_sym_namespace] = ACTIONS(1930),\n    [anon_sym_LBRACE] = ACTIONS(1928),\n    [anon_sym_RBRACE] = ACTIONS(1928),\n    [anon_sym_typeof] = ACTIONS(1930),\n    [anon_sym_import] = ACTIONS(1930),\n    [anon_sym_var] = ACTIONS(1930),\n    [anon_sym_let] = ACTIONS(1930),\n    [anon_sym_const] = ACTIONS(1930),\n    [anon_sym_BANG] = ACTIONS(1928),\n    [anon_sym_else] = ACTIONS(1930),\n    [anon_sym_if] = ACTIONS(1930),\n    [anon_sym_switch] = ACTIONS(1930),\n    [anon_sym_for] = ACTIONS(1930),\n    [anon_sym_LPAREN] = ACTIONS(1928),\n    [anon_sym_await] = ACTIONS(1930),\n    [anon_sym_while] = ACTIONS(1930),\n    [anon_sym_do] = ACTIONS(1930),\n    [anon_sym_try] = ACTIONS(1930),\n    [anon_sym_with] = ACTIONS(1930),\n    [anon_sym_break] = ACTIONS(1930),\n    [anon_sym_continue] = ACTIONS(1930),\n    [anon_sym_debugger] = ACTIONS(1930),\n    [anon_sym_return] = ACTIONS(1930),\n    [anon_sym_throw] = ACTIONS(1930),\n    [anon_sym_SEMI] = ACTIONS(1928),\n    [anon_sym_case] = ACTIONS(1930),\n    [anon_sym_default] = ACTIONS(1930),\n    [anon_sym_yield] = ACTIONS(1930),\n    [anon_sym_LBRACK] = ACTIONS(1928),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1928),\n    [anon_sym_LT] = ACTIONS(1930),\n    [anon_sym_SLASH] = ACTIONS(1930),\n    [anon_sym_struct] = ACTIONS(1930),\n    [anon_sym_async] = ACTIONS(1930),\n    [anon_sym_fn] = ACTIONS(1930),\n    [anon_sym_fn_STAR] = ACTIONS(1928),\n    [anon_sym_new] = ACTIONS(1930),\n    [anon_sym_PLUS] = ACTIONS(1930),\n    [anon_sym_DASH] = ACTIONS(1930),\n    [anon_sym_TILDE] = ACTIONS(1928),\n    [anon_sym_void] = ACTIONS(1930),\n    [anon_sym_delete] = ACTIONS(1930),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1928),\n    [anon_sym_DASH_DASH] = ACTIONS(1928),\n    [anon_sym_DQUOTE] = ACTIONS(1928),\n    [anon_sym_SQUOTE] = ACTIONS(1928),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1928),\n    [sym_number] = ACTIONS(1928),\n    [sym_this] = ACTIONS(1930),\n    [sym_super] = ACTIONS(1930),\n    [sym_true] = ACTIONS(1930),\n    [sym_false] = ACTIONS(1930),\n    [sym_null] = ACTIONS(1930),\n    [sym_undefined] = ACTIONS(1930),\n    [anon_sym_AT] = ACTIONS(1928),\n    [anon_sym_static] = ACTIONS(1930),\n    [anon_sym_declare] = ACTIONS(1930),\n    [anon_sym_public] = ACTIONS(1930),\n    [anon_sym_private] = ACTIONS(1930),\n    [anon_sym_protected] = ACTIONS(1930),\n    [anon_sym_override] = ACTIONS(1930),\n    [anon_sym_readonly] = ACTIONS(1930),\n    [anon_sym_module] = ACTIONS(1930),\n    [anon_sym_any] = ACTIONS(1930),\n    [anon_sym_number] = ACTIONS(1930),\n    [anon_sym_int] = ACTIONS(1930),\n    [anon_sym_float] = ACTIONS(1930),\n    [anon_sym_float2] = ACTIONS(1930),\n    [anon_sym_float3] = ACTIONS(1930),\n    [anon_sym_float4] = ACTIONS(1930),\n    [anon_sym_float3x3] = ACTIONS(1930),\n    [anon_sym_float2x2] = ACTIONS(1930),\n    [anon_sym_float4x4] = ACTIONS(1930),\n    [anon_sym_int2] = ACTIONS(1930),\n    [anon_sym_int3] = ACTIONS(1930),\n    [anon_sym_int4] = ACTIONS(1930),\n    [anon_sym_int3x3] = ACTIONS(1930),\n    [anon_sym_int2x2] = ACTIONS(1930),\n    [anon_sym_int4x4] = ACTIONS(1930),\n    [anon_sym_boolean] = ACTIONS(1930),\n    [anon_sym_string] = ACTIONS(1930),\n    [anon_sym_symbol] = ACTIONS(1930),\n    [anon_sym_workgroup] = ACTIONS(1930),\n    [anon_sym_get] = ACTIONS(1930),\n    [anon_sym_set] = ACTIONS(1930),\n    [anon_sym_trait] = ACTIONS(1930),\n    [anon_sym_impl] = ACTIONS(1930),\n    [anon_sym_enum] = ACTIONS(1930),\n    [anon_sym_shader] = ACTIONS(1930),\n  },\n  [541] = {\n    [ts_builtin_sym_end] = ACTIONS(1932),\n    [sym_identifier] = ACTIONS(1934),\n    [anon_sym_pub] = ACTIONS(1934),\n    [anon_sym_export] = ACTIONS(1934),\n    [anon_sym_type] = ACTIONS(1934),\n    [anon_sym_namespace] = ACTIONS(1934),\n    [anon_sym_LBRACE] = ACTIONS(1932),\n    [anon_sym_RBRACE] = ACTIONS(1932),\n    [anon_sym_typeof] = ACTIONS(1934),\n    [anon_sym_import] = ACTIONS(1934),\n    [anon_sym_var] = ACTIONS(1934),\n    [anon_sym_let] = ACTIONS(1934),\n    [anon_sym_const] = ACTIONS(1934),\n    [anon_sym_BANG] = ACTIONS(1932),\n    [anon_sym_else] = ACTIONS(1934),\n    [anon_sym_if] = ACTIONS(1934),\n    [anon_sym_switch] = ACTIONS(1934),\n    [anon_sym_for] = ACTIONS(1934),\n    [anon_sym_LPAREN] = ACTIONS(1932),\n    [anon_sym_await] = ACTIONS(1934),\n    [anon_sym_while] = ACTIONS(1934),\n    [anon_sym_do] = ACTIONS(1934),\n    [anon_sym_try] = ACTIONS(1934),\n    [anon_sym_with] = ACTIONS(1934),\n    [anon_sym_break] = ACTIONS(1934),\n    [anon_sym_continue] = ACTIONS(1934),\n    [anon_sym_debugger] = ACTIONS(1934),\n    [anon_sym_return] = ACTIONS(1934),\n    [anon_sym_throw] = ACTIONS(1934),\n    [anon_sym_SEMI] = ACTIONS(1932),\n    [anon_sym_case] = ACTIONS(1934),\n    [anon_sym_default] = ACTIONS(1934),\n    [anon_sym_yield] = ACTIONS(1934),\n    [anon_sym_LBRACK] = ACTIONS(1932),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1932),\n    [anon_sym_LT] = ACTIONS(1934),\n    [anon_sym_SLASH] = ACTIONS(1934),\n    [anon_sym_struct] = ACTIONS(1934),\n    [anon_sym_async] = ACTIONS(1934),\n    [anon_sym_fn] = ACTIONS(1934),\n    [anon_sym_fn_STAR] = ACTIONS(1932),\n    [anon_sym_new] = ACTIONS(1934),\n    [anon_sym_PLUS] = ACTIONS(1934),\n    [anon_sym_DASH] = ACTIONS(1934),\n    [anon_sym_TILDE] = ACTIONS(1932),\n    [anon_sym_void] = ACTIONS(1934),\n    [anon_sym_delete] = ACTIONS(1934),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1932),\n    [anon_sym_DASH_DASH] = ACTIONS(1932),\n    [anon_sym_DQUOTE] = ACTIONS(1932),\n    [anon_sym_SQUOTE] = ACTIONS(1932),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1932),\n    [sym_number] = ACTIONS(1932),\n    [sym_this] = ACTIONS(1934),\n    [sym_super] = ACTIONS(1934),\n    [sym_true] = ACTIONS(1934),\n    [sym_false] = ACTIONS(1934),\n    [sym_null] = ACTIONS(1934),\n    [sym_undefined] = ACTIONS(1934),\n    [anon_sym_AT] = ACTIONS(1932),\n    [anon_sym_static] = ACTIONS(1934),\n    [anon_sym_declare] = ACTIONS(1934),\n    [anon_sym_public] = ACTIONS(1934),\n    [anon_sym_private] = ACTIONS(1934),\n    [anon_sym_protected] = ACTIONS(1934),\n    [anon_sym_override] = ACTIONS(1934),\n    [anon_sym_readonly] = ACTIONS(1934),\n    [anon_sym_module] = ACTIONS(1934),\n    [anon_sym_any] = ACTIONS(1934),\n    [anon_sym_number] = ACTIONS(1934),\n    [anon_sym_int] = ACTIONS(1934),\n    [anon_sym_float] = ACTIONS(1934),\n    [anon_sym_float2] = ACTIONS(1934),\n    [anon_sym_float3] = ACTIONS(1934),\n    [anon_sym_float4] = ACTIONS(1934),\n    [anon_sym_float3x3] = ACTIONS(1934),\n    [anon_sym_float2x2] = ACTIONS(1934),\n    [anon_sym_float4x4] = ACTIONS(1934),\n    [anon_sym_int2] = ACTIONS(1934),\n    [anon_sym_int3] = ACTIONS(1934),\n    [anon_sym_int4] = ACTIONS(1934),\n    [anon_sym_int3x3] = ACTIONS(1934),\n    [anon_sym_int2x2] = ACTIONS(1934),\n    [anon_sym_int4x4] = ACTIONS(1934),\n    [anon_sym_boolean] = ACTIONS(1934),\n    [anon_sym_string] = ACTIONS(1934),\n    [anon_sym_symbol] = ACTIONS(1934),\n    [anon_sym_workgroup] = ACTIONS(1934),\n    [anon_sym_get] = ACTIONS(1934),\n    [anon_sym_set] = ACTIONS(1934),\n    [anon_sym_trait] = ACTIONS(1934),\n    [anon_sym_impl] = ACTIONS(1934),\n    [anon_sym_enum] = ACTIONS(1934),\n    [anon_sym_shader] = ACTIONS(1934),\n  },\n  [542] = {\n    [ts_builtin_sym_end] = ACTIONS(1936),\n    [sym_identifier] = ACTIONS(1938),\n    [anon_sym_pub] = ACTIONS(1938),\n    [anon_sym_export] = ACTIONS(1938),\n    [anon_sym_type] = ACTIONS(1938),\n    [anon_sym_namespace] = ACTIONS(1938),\n    [anon_sym_LBRACE] = ACTIONS(1936),\n    [anon_sym_RBRACE] = ACTIONS(1936),\n    [anon_sym_typeof] = ACTIONS(1938),\n    [anon_sym_import] = ACTIONS(1938),\n    [anon_sym_var] = ACTIONS(1938),\n    [anon_sym_let] = ACTIONS(1938),\n    [anon_sym_const] = ACTIONS(1938),\n    [anon_sym_BANG] = ACTIONS(1936),\n    [anon_sym_else] = ACTIONS(1938),\n    [anon_sym_if] = ACTIONS(1938),\n    [anon_sym_switch] = ACTIONS(1938),\n    [anon_sym_for] = ACTIONS(1938),\n    [anon_sym_LPAREN] = ACTIONS(1936),\n    [anon_sym_await] = ACTIONS(1938),\n    [anon_sym_while] = ACTIONS(1938),\n    [anon_sym_do] = ACTIONS(1938),\n    [anon_sym_try] = ACTIONS(1938),\n    [anon_sym_with] = ACTIONS(1938),\n    [anon_sym_break] = ACTIONS(1938),\n    [anon_sym_continue] = ACTIONS(1938),\n    [anon_sym_debugger] = ACTIONS(1938),\n    [anon_sym_return] = ACTIONS(1938),\n    [anon_sym_throw] = ACTIONS(1938),\n    [anon_sym_SEMI] = ACTIONS(1936),\n    [anon_sym_case] = ACTIONS(1938),\n    [anon_sym_default] = ACTIONS(1938),\n    [anon_sym_yield] = ACTIONS(1938),\n    [anon_sym_LBRACK] = ACTIONS(1936),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1936),\n    [anon_sym_LT] = ACTIONS(1938),\n    [anon_sym_SLASH] = ACTIONS(1938),\n    [anon_sym_struct] = ACTIONS(1938),\n    [anon_sym_async] = ACTIONS(1938),\n    [anon_sym_fn] = ACTIONS(1938),\n    [anon_sym_fn_STAR] = ACTIONS(1936),\n    [anon_sym_new] = ACTIONS(1938),\n    [anon_sym_PLUS] = ACTIONS(1938),\n    [anon_sym_DASH] = ACTIONS(1938),\n    [anon_sym_TILDE] = ACTIONS(1936),\n    [anon_sym_void] = ACTIONS(1938),\n    [anon_sym_delete] = ACTIONS(1938),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1936),\n    [anon_sym_DASH_DASH] = ACTIONS(1936),\n    [anon_sym_DQUOTE] = ACTIONS(1936),\n    [anon_sym_SQUOTE] = ACTIONS(1936),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1936),\n    [sym_number] = ACTIONS(1936),\n    [sym_this] = ACTIONS(1938),\n    [sym_super] = ACTIONS(1938),\n    [sym_true] = ACTIONS(1938),\n    [sym_false] = ACTIONS(1938),\n    [sym_null] = ACTIONS(1938),\n    [sym_undefined] = ACTIONS(1938),\n    [anon_sym_AT] = ACTIONS(1936),\n    [anon_sym_static] = ACTIONS(1938),\n    [anon_sym_declare] = ACTIONS(1938),\n    [anon_sym_public] = ACTIONS(1938),\n    [anon_sym_private] = ACTIONS(1938),\n    [anon_sym_protected] = ACTIONS(1938),\n    [anon_sym_override] = ACTIONS(1938),\n    [anon_sym_readonly] = ACTIONS(1938),\n    [anon_sym_module] = ACTIONS(1938),\n    [anon_sym_any] = ACTIONS(1938),\n    [anon_sym_number] = ACTIONS(1938),\n    [anon_sym_int] = ACTIONS(1938),\n    [anon_sym_float] = ACTIONS(1938),\n    [anon_sym_float2] = ACTIONS(1938),\n    [anon_sym_float3] = ACTIONS(1938),\n    [anon_sym_float4] = ACTIONS(1938),\n    [anon_sym_float3x3] = ACTIONS(1938),\n    [anon_sym_float2x2] = ACTIONS(1938),\n    [anon_sym_float4x4] = ACTIONS(1938),\n    [anon_sym_int2] = ACTIONS(1938),\n    [anon_sym_int3] = ACTIONS(1938),\n    [anon_sym_int4] = ACTIONS(1938),\n    [anon_sym_int3x3] = ACTIONS(1938),\n    [anon_sym_int2x2] = ACTIONS(1938),\n    [anon_sym_int4x4] = ACTIONS(1938),\n    [anon_sym_boolean] = ACTIONS(1938),\n    [anon_sym_string] = ACTIONS(1938),\n    [anon_sym_symbol] = ACTIONS(1938),\n    [anon_sym_workgroup] = ACTIONS(1938),\n    [anon_sym_get] = ACTIONS(1938),\n    [anon_sym_set] = ACTIONS(1938),\n    [anon_sym_trait] = ACTIONS(1938),\n    [anon_sym_impl] = ACTIONS(1938),\n    [anon_sym_enum] = ACTIONS(1938),\n    [anon_sym_shader] = ACTIONS(1938),\n  },\n  [543] = {\n    [ts_builtin_sym_end] = ACTIONS(1940),\n    [sym_identifier] = ACTIONS(1942),\n    [anon_sym_pub] = ACTIONS(1942),\n    [anon_sym_export] = ACTIONS(1942),\n    [anon_sym_type] = ACTIONS(1942),\n    [anon_sym_namespace] = ACTIONS(1942),\n    [anon_sym_LBRACE] = ACTIONS(1940),\n    [anon_sym_RBRACE] = ACTIONS(1940),\n    [anon_sym_typeof] = ACTIONS(1942),\n    [anon_sym_import] = ACTIONS(1942),\n    [anon_sym_var] = ACTIONS(1942),\n    [anon_sym_let] = ACTIONS(1942),\n    [anon_sym_const] = ACTIONS(1942),\n    [anon_sym_BANG] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1942),\n    [anon_sym_if] = ACTIONS(1942),\n    [anon_sym_switch] = ACTIONS(1942),\n    [anon_sym_for] = ACTIONS(1942),\n    [anon_sym_LPAREN] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1942),\n    [anon_sym_while] = ACTIONS(1942),\n    [anon_sym_do] = ACTIONS(1942),\n    [anon_sym_try] = ACTIONS(1942),\n    [anon_sym_with] = ACTIONS(1942),\n    [anon_sym_break] = ACTIONS(1942),\n    [anon_sym_continue] = ACTIONS(1942),\n    [anon_sym_debugger] = ACTIONS(1942),\n    [anon_sym_return] = ACTIONS(1942),\n    [anon_sym_throw] = ACTIONS(1942),\n    [anon_sym_SEMI] = ACTIONS(1940),\n    [anon_sym_case] = ACTIONS(1942),\n    [anon_sym_default] = ACTIONS(1942),\n    [anon_sym_yield] = ACTIONS(1942),\n    [anon_sym_LBRACK] = ACTIONS(1940),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1942),\n    [anon_sym_SLASH] = ACTIONS(1942),\n    [anon_sym_struct] = ACTIONS(1942),\n    [anon_sym_async] = ACTIONS(1942),\n    [anon_sym_fn] = ACTIONS(1942),\n    [anon_sym_fn_STAR] = ACTIONS(1940),\n    [anon_sym_new] = ACTIONS(1942),\n    [anon_sym_PLUS] = ACTIONS(1942),\n    [anon_sym_DASH] = ACTIONS(1942),\n    [anon_sym_TILDE] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1942),\n    [anon_sym_delete] = ACTIONS(1942),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH_DASH] = ACTIONS(1940),\n    [anon_sym_DQUOTE] = ACTIONS(1940),\n    [anon_sym_SQUOTE] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1940),\n    [sym_number] = ACTIONS(1940),\n    [sym_this] = ACTIONS(1942),\n    [sym_super] = ACTIONS(1942),\n    [sym_true] = ACTIONS(1942),\n    [sym_false] = ACTIONS(1942),\n    [sym_null] = ACTIONS(1942),\n    [sym_undefined] = ACTIONS(1942),\n    [anon_sym_AT] = ACTIONS(1940),\n    [anon_sym_static] = ACTIONS(1942),\n    [anon_sym_declare] = ACTIONS(1942),\n    [anon_sym_public] = ACTIONS(1942),\n    [anon_sym_private] = ACTIONS(1942),\n    [anon_sym_protected] = ACTIONS(1942),\n    [anon_sym_override] = ACTIONS(1942),\n    [anon_sym_readonly] = ACTIONS(1942),\n    [anon_sym_module] = ACTIONS(1942),\n    [anon_sym_any] = ACTIONS(1942),\n    [anon_sym_number] = ACTIONS(1942),\n    [anon_sym_int] = ACTIONS(1942),\n    [anon_sym_float] = ACTIONS(1942),\n    [anon_sym_float2] = ACTIONS(1942),\n    [anon_sym_float3] = ACTIONS(1942),\n    [anon_sym_float4] = ACTIONS(1942),\n    [anon_sym_float3x3] = ACTIONS(1942),\n    [anon_sym_float2x2] = ACTIONS(1942),\n    [anon_sym_float4x4] = ACTIONS(1942),\n    [anon_sym_int2] = ACTIONS(1942),\n    [anon_sym_int3] = ACTIONS(1942),\n    [anon_sym_int4] = ACTIONS(1942),\n    [anon_sym_int3x3] = ACTIONS(1942),\n    [anon_sym_int2x2] = ACTIONS(1942),\n    [anon_sym_int4x4] = ACTIONS(1942),\n    [anon_sym_boolean] = ACTIONS(1942),\n    [anon_sym_string] = ACTIONS(1942),\n    [anon_sym_symbol] = ACTIONS(1942),\n    [anon_sym_workgroup] = ACTIONS(1942),\n    [anon_sym_get] = ACTIONS(1942),\n    [anon_sym_set] = ACTIONS(1942),\n    [anon_sym_trait] = ACTIONS(1942),\n    [anon_sym_impl] = ACTIONS(1942),\n    [anon_sym_enum] = ACTIONS(1942),\n    [anon_sym_shader] = ACTIONS(1942),\n  },\n  [544] = {\n    [ts_builtin_sym_end] = ACTIONS(1944),\n    [sym_identifier] = ACTIONS(1946),\n    [anon_sym_pub] = ACTIONS(1946),\n    [anon_sym_export] = ACTIONS(1946),\n    [anon_sym_type] = ACTIONS(1946),\n    [anon_sym_namespace] = ACTIONS(1946),\n    [anon_sym_LBRACE] = ACTIONS(1944),\n    [anon_sym_RBRACE] = ACTIONS(1944),\n    [anon_sym_typeof] = ACTIONS(1946),\n    [anon_sym_import] = ACTIONS(1946),\n    [anon_sym_var] = ACTIONS(1946),\n    [anon_sym_let] = ACTIONS(1946),\n    [anon_sym_const] = ACTIONS(1946),\n    [anon_sym_BANG] = ACTIONS(1944),\n    [anon_sym_else] = ACTIONS(1946),\n    [anon_sym_if] = ACTIONS(1946),\n    [anon_sym_switch] = ACTIONS(1946),\n    [anon_sym_for] = ACTIONS(1946),\n    [anon_sym_LPAREN] = ACTIONS(1944),\n    [anon_sym_await] = ACTIONS(1946),\n    [anon_sym_while] = ACTIONS(1946),\n    [anon_sym_do] = ACTIONS(1946),\n    [anon_sym_try] = ACTIONS(1946),\n    [anon_sym_with] = ACTIONS(1946),\n    [anon_sym_break] = ACTIONS(1946),\n    [anon_sym_continue] = ACTIONS(1946),\n    [anon_sym_debugger] = ACTIONS(1946),\n    [anon_sym_return] = ACTIONS(1946),\n    [anon_sym_throw] = ACTIONS(1946),\n    [anon_sym_SEMI] = ACTIONS(1944),\n    [anon_sym_case] = ACTIONS(1946),\n    [anon_sym_default] = ACTIONS(1946),\n    [anon_sym_yield] = ACTIONS(1946),\n    [anon_sym_LBRACK] = ACTIONS(1944),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1944),\n    [anon_sym_LT] = ACTIONS(1946),\n    [anon_sym_SLASH] = ACTIONS(1946),\n    [anon_sym_struct] = ACTIONS(1946),\n    [anon_sym_async] = ACTIONS(1946),\n    [anon_sym_fn] = ACTIONS(1946),\n    [anon_sym_fn_STAR] = ACTIONS(1944),\n    [anon_sym_new] = ACTIONS(1946),\n    [anon_sym_PLUS] = ACTIONS(1946),\n    [anon_sym_DASH] = ACTIONS(1946),\n    [anon_sym_TILDE] = ACTIONS(1944),\n    [anon_sym_void] = ACTIONS(1946),\n    [anon_sym_delete] = ACTIONS(1946),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1944),\n    [anon_sym_DASH_DASH] = ACTIONS(1944),\n    [anon_sym_DQUOTE] = ACTIONS(1944),\n    [anon_sym_SQUOTE] = ACTIONS(1944),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1944),\n    [sym_number] = ACTIONS(1944),\n    [sym_this] = ACTIONS(1946),\n    [sym_super] = ACTIONS(1946),\n    [sym_true] = ACTIONS(1946),\n    [sym_false] = ACTIONS(1946),\n    [sym_null] = ACTIONS(1946),\n    [sym_undefined] = ACTIONS(1946),\n    [anon_sym_AT] = ACTIONS(1944),\n    [anon_sym_static] = ACTIONS(1946),\n    [anon_sym_declare] = ACTIONS(1946),\n    [anon_sym_public] = ACTIONS(1946),\n    [anon_sym_private] = ACTIONS(1946),\n    [anon_sym_protected] = ACTIONS(1946),\n    [anon_sym_override] = ACTIONS(1946),\n    [anon_sym_readonly] = ACTIONS(1946),\n    [anon_sym_module] = ACTIONS(1946),\n    [anon_sym_any] = ACTIONS(1946),\n    [anon_sym_number] = ACTIONS(1946),\n    [anon_sym_int] = ACTIONS(1946),\n    [anon_sym_float] = ACTIONS(1946),\n    [anon_sym_float2] = ACTIONS(1946),\n    [anon_sym_float3] = ACTIONS(1946),\n    [anon_sym_float4] = ACTIONS(1946),\n    [anon_sym_float3x3] = ACTIONS(1946),\n    [anon_sym_float2x2] = ACTIONS(1946),\n    [anon_sym_float4x4] = ACTIONS(1946),\n    [anon_sym_int2] = ACTIONS(1946),\n    [anon_sym_int3] = ACTIONS(1946),\n    [anon_sym_int4] = ACTIONS(1946),\n    [anon_sym_int3x3] = ACTIONS(1946),\n    [anon_sym_int2x2] = ACTIONS(1946),\n    [anon_sym_int4x4] = ACTIONS(1946),\n    [anon_sym_boolean] = ACTIONS(1946),\n    [anon_sym_string] = ACTIONS(1946),\n    [anon_sym_symbol] = ACTIONS(1946),\n    [anon_sym_workgroup] = ACTIONS(1946),\n    [anon_sym_get] = ACTIONS(1946),\n    [anon_sym_set] = ACTIONS(1946),\n    [anon_sym_trait] = ACTIONS(1946),\n    [anon_sym_impl] = ACTIONS(1946),\n    [anon_sym_enum] = ACTIONS(1946),\n    [anon_sym_shader] = ACTIONS(1946),\n  },\n  [545] = {\n    [ts_builtin_sym_end] = ACTIONS(1940),\n    [sym_identifier] = ACTIONS(1942),\n    [anon_sym_pub] = ACTIONS(1942),\n    [anon_sym_export] = ACTIONS(1942),\n    [anon_sym_type] = ACTIONS(1942),\n    [anon_sym_namespace] = ACTIONS(1942),\n    [anon_sym_LBRACE] = ACTIONS(1940),\n    [anon_sym_RBRACE] = ACTIONS(1940),\n    [anon_sym_typeof] = ACTIONS(1942),\n    [anon_sym_import] = ACTIONS(1942),\n    [anon_sym_var] = ACTIONS(1942),\n    [anon_sym_let] = ACTIONS(1942),\n    [anon_sym_const] = ACTIONS(1942),\n    [anon_sym_BANG] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1942),\n    [anon_sym_if] = ACTIONS(1942),\n    [anon_sym_switch] = ACTIONS(1942),\n    [anon_sym_for] = ACTIONS(1942),\n    [anon_sym_LPAREN] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1942),\n    [anon_sym_while] = ACTIONS(1942),\n    [anon_sym_do] = ACTIONS(1942),\n    [anon_sym_try] = ACTIONS(1942),\n    [anon_sym_with] = ACTIONS(1942),\n    [anon_sym_break] = ACTIONS(1942),\n    [anon_sym_continue] = ACTIONS(1942),\n    [anon_sym_debugger] = ACTIONS(1942),\n    [anon_sym_return] = ACTIONS(1942),\n    [anon_sym_throw] = ACTIONS(1942),\n    [anon_sym_SEMI] = ACTIONS(1940),\n    [anon_sym_case] = ACTIONS(1942),\n    [anon_sym_default] = ACTIONS(1942),\n    [anon_sym_yield] = ACTIONS(1942),\n    [anon_sym_LBRACK] = ACTIONS(1940),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1942),\n    [anon_sym_SLASH] = ACTIONS(1942),\n    [anon_sym_struct] = ACTIONS(1942),\n    [anon_sym_async] = ACTIONS(1942),\n    [anon_sym_fn] = ACTIONS(1942),\n    [anon_sym_fn_STAR] = ACTIONS(1940),\n    [anon_sym_new] = ACTIONS(1942),\n    [anon_sym_PLUS] = ACTIONS(1942),\n    [anon_sym_DASH] = ACTIONS(1942),\n    [anon_sym_TILDE] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1942),\n    [anon_sym_delete] = ACTIONS(1942),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH_DASH] = ACTIONS(1940),\n    [anon_sym_DQUOTE] = ACTIONS(1940),\n    [anon_sym_SQUOTE] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1940),\n    [sym_number] = ACTIONS(1940),\n    [sym_this] = ACTIONS(1942),\n    [sym_super] = ACTIONS(1942),\n    [sym_true] = ACTIONS(1942),\n    [sym_false] = ACTIONS(1942),\n    [sym_null] = ACTIONS(1942),\n    [sym_undefined] = ACTIONS(1942),\n    [anon_sym_AT] = ACTIONS(1940),\n    [anon_sym_static] = ACTIONS(1942),\n    [anon_sym_declare] = ACTIONS(1942),\n    [anon_sym_public] = ACTIONS(1942),\n    [anon_sym_private] = ACTIONS(1942),\n    [anon_sym_protected] = ACTIONS(1942),\n    [anon_sym_override] = ACTIONS(1942),\n    [anon_sym_readonly] = ACTIONS(1942),\n    [anon_sym_module] = ACTIONS(1942),\n    [anon_sym_any] = ACTIONS(1942),\n    [anon_sym_number] = ACTIONS(1942),\n    [anon_sym_int] = ACTIONS(1942),\n    [anon_sym_float] = ACTIONS(1942),\n    [anon_sym_float2] = ACTIONS(1942),\n    [anon_sym_float3] = ACTIONS(1942),\n    [anon_sym_float4] = ACTIONS(1942),\n    [anon_sym_float3x3] = ACTIONS(1942),\n    [anon_sym_float2x2] = ACTIONS(1942),\n    [anon_sym_float4x4] = ACTIONS(1942),\n    [anon_sym_int2] = ACTIONS(1942),\n    [anon_sym_int3] = ACTIONS(1942),\n    [anon_sym_int4] = ACTIONS(1942),\n    [anon_sym_int3x3] = ACTIONS(1942),\n    [anon_sym_int2x2] = ACTIONS(1942),\n    [anon_sym_int4x4] = ACTIONS(1942),\n    [anon_sym_boolean] = ACTIONS(1942),\n    [anon_sym_string] = ACTIONS(1942),\n    [anon_sym_symbol] = ACTIONS(1942),\n    [anon_sym_workgroup] = ACTIONS(1942),\n    [anon_sym_get] = ACTIONS(1942),\n    [anon_sym_set] = ACTIONS(1942),\n    [anon_sym_trait] = ACTIONS(1942),\n    [anon_sym_impl] = ACTIONS(1942),\n    [anon_sym_enum] = ACTIONS(1942),\n    [anon_sym_shader] = ACTIONS(1942),\n  },\n  [546] = {\n    [ts_builtin_sym_end] = ACTIONS(1940),\n    [sym_identifier] = ACTIONS(1942),\n    [anon_sym_pub] = ACTIONS(1942),\n    [anon_sym_export] = ACTIONS(1942),\n    [anon_sym_type] = ACTIONS(1942),\n    [anon_sym_namespace] = ACTIONS(1942),\n    [anon_sym_LBRACE] = ACTIONS(1940),\n    [anon_sym_RBRACE] = ACTIONS(1940),\n    [anon_sym_typeof] = ACTIONS(1942),\n    [anon_sym_import] = ACTIONS(1942),\n    [anon_sym_var] = ACTIONS(1942),\n    [anon_sym_let] = ACTIONS(1942),\n    [anon_sym_const] = ACTIONS(1942),\n    [anon_sym_BANG] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1942),\n    [anon_sym_if] = ACTIONS(1942),\n    [anon_sym_switch] = ACTIONS(1942),\n    [anon_sym_for] = ACTIONS(1942),\n    [anon_sym_LPAREN] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1942),\n    [anon_sym_while] = ACTIONS(1942),\n    [anon_sym_do] = ACTIONS(1942),\n    [anon_sym_try] = ACTIONS(1942),\n    [anon_sym_with] = ACTIONS(1942),\n    [anon_sym_break] = ACTIONS(1942),\n    [anon_sym_continue] = ACTIONS(1942),\n    [anon_sym_debugger] = ACTIONS(1942),\n    [anon_sym_return] = ACTIONS(1942),\n    [anon_sym_throw] = ACTIONS(1942),\n    [anon_sym_SEMI] = ACTIONS(1940),\n    [anon_sym_case] = ACTIONS(1942),\n    [anon_sym_default] = ACTIONS(1942),\n    [anon_sym_yield] = ACTIONS(1942),\n    [anon_sym_LBRACK] = ACTIONS(1940),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1942),\n    [anon_sym_SLASH] = ACTIONS(1942),\n    [anon_sym_struct] = ACTIONS(1942),\n    [anon_sym_async] = ACTIONS(1942),\n    [anon_sym_fn] = ACTIONS(1942),\n    [anon_sym_fn_STAR] = ACTIONS(1940),\n    [anon_sym_new] = ACTIONS(1942),\n    [anon_sym_PLUS] = ACTIONS(1942),\n    [anon_sym_DASH] = ACTIONS(1942),\n    [anon_sym_TILDE] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1942),\n    [anon_sym_delete] = ACTIONS(1942),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH_DASH] = ACTIONS(1940),\n    [anon_sym_DQUOTE] = ACTIONS(1940),\n    [anon_sym_SQUOTE] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1940),\n    [sym_number] = ACTIONS(1940),\n    [sym_this] = ACTIONS(1942),\n    [sym_super] = ACTIONS(1942),\n    [sym_true] = ACTIONS(1942),\n    [sym_false] = ACTIONS(1942),\n    [sym_null] = ACTIONS(1942),\n    [sym_undefined] = ACTIONS(1942),\n    [anon_sym_AT] = ACTIONS(1940),\n    [anon_sym_static] = ACTIONS(1942),\n    [anon_sym_declare] = ACTIONS(1942),\n    [anon_sym_public] = ACTIONS(1942),\n    [anon_sym_private] = ACTIONS(1942),\n    [anon_sym_protected] = ACTIONS(1942),\n    [anon_sym_override] = ACTIONS(1942),\n    [anon_sym_readonly] = ACTIONS(1942),\n    [anon_sym_module] = ACTIONS(1942),\n    [anon_sym_any] = ACTIONS(1942),\n    [anon_sym_number] = ACTIONS(1942),\n    [anon_sym_int] = ACTIONS(1942),\n    [anon_sym_float] = ACTIONS(1942),\n    [anon_sym_float2] = ACTIONS(1942),\n    [anon_sym_float3] = ACTIONS(1942),\n    [anon_sym_float4] = ACTIONS(1942),\n    [anon_sym_float3x3] = ACTIONS(1942),\n    [anon_sym_float2x2] = ACTIONS(1942),\n    [anon_sym_float4x4] = ACTIONS(1942),\n    [anon_sym_int2] = ACTIONS(1942),\n    [anon_sym_int3] = ACTIONS(1942),\n    [anon_sym_int4] = ACTIONS(1942),\n    [anon_sym_int3x3] = ACTIONS(1942),\n    [anon_sym_int2x2] = ACTIONS(1942),\n    [anon_sym_int4x4] = ACTIONS(1942),\n    [anon_sym_boolean] = ACTIONS(1942),\n    [anon_sym_string] = ACTIONS(1942),\n    [anon_sym_symbol] = ACTIONS(1942),\n    [anon_sym_workgroup] = ACTIONS(1942),\n    [anon_sym_get] = ACTIONS(1942),\n    [anon_sym_set] = ACTIONS(1942),\n    [anon_sym_trait] = ACTIONS(1942),\n    [anon_sym_impl] = ACTIONS(1942),\n    [anon_sym_enum] = ACTIONS(1942),\n    [anon_sym_shader] = ACTIONS(1942),\n  },\n  [547] = {\n    [ts_builtin_sym_end] = ACTIONS(1948),\n    [sym_identifier] = ACTIONS(1950),\n    [anon_sym_pub] = ACTIONS(1950),\n    [anon_sym_export] = ACTIONS(1950),\n    [anon_sym_type] = ACTIONS(1950),\n    [anon_sym_namespace] = ACTIONS(1950),\n    [anon_sym_LBRACE] = ACTIONS(1948),\n    [anon_sym_RBRACE] = ACTIONS(1948),\n    [anon_sym_typeof] = ACTIONS(1950),\n    [anon_sym_import] = ACTIONS(1950),\n    [anon_sym_var] = ACTIONS(1950),\n    [anon_sym_let] = ACTIONS(1950),\n    [anon_sym_const] = ACTIONS(1950),\n    [anon_sym_BANG] = ACTIONS(1948),\n    [anon_sym_else] = ACTIONS(1950),\n    [anon_sym_if] = ACTIONS(1950),\n    [anon_sym_switch] = ACTIONS(1950),\n    [anon_sym_for] = ACTIONS(1950),\n    [anon_sym_LPAREN] = ACTIONS(1948),\n    [anon_sym_await] = ACTIONS(1950),\n    [anon_sym_while] = ACTIONS(1950),\n    [anon_sym_do] = ACTIONS(1950),\n    [anon_sym_try] = ACTIONS(1950),\n    [anon_sym_with] = ACTIONS(1950),\n    [anon_sym_break] = ACTIONS(1950),\n    [anon_sym_continue] = ACTIONS(1950),\n    [anon_sym_debugger] = ACTIONS(1950),\n    [anon_sym_return] = ACTIONS(1950),\n    [anon_sym_throw] = ACTIONS(1950),\n    [anon_sym_SEMI] = ACTIONS(1948),\n    [anon_sym_case] = ACTIONS(1950),\n    [anon_sym_default] = ACTIONS(1950),\n    [anon_sym_yield] = ACTIONS(1950),\n    [anon_sym_LBRACK] = ACTIONS(1948),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1948),\n    [anon_sym_LT] = ACTIONS(1950),\n    [anon_sym_SLASH] = ACTIONS(1950),\n    [anon_sym_struct] = ACTIONS(1950),\n    [anon_sym_async] = ACTIONS(1950),\n    [anon_sym_fn] = ACTIONS(1950),\n    [anon_sym_fn_STAR] = ACTIONS(1948),\n    [anon_sym_new] = ACTIONS(1950),\n    [anon_sym_PLUS] = ACTIONS(1950),\n    [anon_sym_DASH] = ACTIONS(1950),\n    [anon_sym_TILDE] = ACTIONS(1948),\n    [anon_sym_void] = ACTIONS(1950),\n    [anon_sym_delete] = ACTIONS(1950),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1948),\n    [anon_sym_DASH_DASH] = ACTIONS(1948),\n    [anon_sym_DQUOTE] = ACTIONS(1948),\n    [anon_sym_SQUOTE] = ACTIONS(1948),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1948),\n    [sym_number] = ACTIONS(1948),\n    [sym_this] = ACTIONS(1950),\n    [sym_super] = ACTIONS(1950),\n    [sym_true] = ACTIONS(1950),\n    [sym_false] = ACTIONS(1950),\n    [sym_null] = ACTIONS(1950),\n    [sym_undefined] = ACTIONS(1950),\n    [anon_sym_AT] = ACTIONS(1948),\n    [anon_sym_static] = ACTIONS(1950),\n    [anon_sym_declare] = ACTIONS(1950),\n    [anon_sym_public] = ACTIONS(1950),\n    [anon_sym_private] = ACTIONS(1950),\n    [anon_sym_protected] = ACTIONS(1950),\n    [anon_sym_override] = ACTIONS(1950),\n    [anon_sym_readonly] = ACTIONS(1950),\n    [anon_sym_module] = ACTIONS(1950),\n    [anon_sym_any] = ACTIONS(1950),\n    [anon_sym_number] = ACTIONS(1950),\n    [anon_sym_int] = ACTIONS(1950),\n    [anon_sym_float] = ACTIONS(1950),\n    [anon_sym_float2] = ACTIONS(1950),\n    [anon_sym_float3] = ACTIONS(1950),\n    [anon_sym_float4] = ACTIONS(1950),\n    [anon_sym_float3x3] = ACTIONS(1950),\n    [anon_sym_float2x2] = ACTIONS(1950),\n    [anon_sym_float4x4] = ACTIONS(1950),\n    [anon_sym_int2] = ACTIONS(1950),\n    [anon_sym_int3] = ACTIONS(1950),\n    [anon_sym_int4] = ACTIONS(1950),\n    [anon_sym_int3x3] = ACTIONS(1950),\n    [anon_sym_int2x2] = ACTIONS(1950),\n    [anon_sym_int4x4] = ACTIONS(1950),\n    [anon_sym_boolean] = ACTIONS(1950),\n    [anon_sym_string] = ACTIONS(1950),\n    [anon_sym_symbol] = ACTIONS(1950),\n    [anon_sym_workgroup] = ACTIONS(1950),\n    [anon_sym_get] = ACTIONS(1950),\n    [anon_sym_set] = ACTIONS(1950),\n    [anon_sym_trait] = ACTIONS(1950),\n    [anon_sym_impl] = ACTIONS(1950),\n    [anon_sym_enum] = ACTIONS(1950),\n    [anon_sym_shader] = ACTIONS(1950),\n  },\n  [548] = {\n    [ts_builtin_sym_end] = ACTIONS(1346),\n    [sym_identifier] = ACTIONS(1348),\n    [anon_sym_pub] = ACTIONS(1348),\n    [anon_sym_export] = ACTIONS(1348),\n    [anon_sym_type] = ACTIONS(1348),\n    [anon_sym_namespace] = ACTIONS(1348),\n    [anon_sym_LBRACE] = ACTIONS(1346),\n    [anon_sym_RBRACE] = ACTIONS(1346),\n    [anon_sym_typeof] = ACTIONS(1348),\n    [anon_sym_import] = ACTIONS(1348),\n    [anon_sym_var] = ACTIONS(1348),\n    [anon_sym_let] = ACTIONS(1348),\n    [anon_sym_const] = ACTIONS(1348),\n    [anon_sym_BANG] = ACTIONS(1346),\n    [anon_sym_else] = ACTIONS(1348),\n    [anon_sym_if] = ACTIONS(1348),\n    [anon_sym_switch] = ACTIONS(1348),\n    [anon_sym_for] = ACTIONS(1348),\n    [anon_sym_LPAREN] = ACTIONS(1346),\n    [anon_sym_await] = ACTIONS(1348),\n    [anon_sym_while] = ACTIONS(1348),\n    [anon_sym_do] = ACTIONS(1348),\n    [anon_sym_try] = ACTIONS(1348),\n    [anon_sym_with] = ACTIONS(1348),\n    [anon_sym_break] = ACTIONS(1348),\n    [anon_sym_continue] = ACTIONS(1348),\n    [anon_sym_debugger] = ACTIONS(1348),\n    [anon_sym_return] = ACTIONS(1348),\n    [anon_sym_throw] = ACTIONS(1348),\n    [anon_sym_SEMI] = ACTIONS(1346),\n    [anon_sym_case] = ACTIONS(1348),\n    [anon_sym_default] = ACTIONS(1348),\n    [anon_sym_yield] = ACTIONS(1348),\n    [anon_sym_LBRACK] = ACTIONS(1346),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1346),\n    [anon_sym_LT] = ACTIONS(1348),\n    [anon_sym_SLASH] = ACTIONS(1348),\n    [anon_sym_struct] = ACTIONS(1348),\n    [anon_sym_async] = ACTIONS(1348),\n    [anon_sym_fn] = ACTIONS(1348),\n    [anon_sym_fn_STAR] = ACTIONS(1346),\n    [anon_sym_new] = ACTIONS(1348),\n    [anon_sym_PLUS] = ACTIONS(1348),\n    [anon_sym_DASH] = ACTIONS(1348),\n    [anon_sym_TILDE] = ACTIONS(1346),\n    [anon_sym_void] = ACTIONS(1348),\n    [anon_sym_delete] = ACTIONS(1348),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1346),\n    [anon_sym_DASH_DASH] = ACTIONS(1346),\n    [anon_sym_DQUOTE] = ACTIONS(1346),\n    [anon_sym_SQUOTE] = ACTIONS(1346),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1346),\n    [sym_number] = ACTIONS(1346),\n    [sym_this] = ACTIONS(1348),\n    [sym_super] = ACTIONS(1348),\n    [sym_true] = ACTIONS(1348),\n    [sym_false] = ACTIONS(1348),\n    [sym_null] = ACTIONS(1348),\n    [sym_undefined] = ACTIONS(1348),\n    [anon_sym_AT] = ACTIONS(1346),\n    [anon_sym_static] = ACTIONS(1348),\n    [anon_sym_declare] = ACTIONS(1348),\n    [anon_sym_public] = ACTIONS(1348),\n    [anon_sym_private] = ACTIONS(1348),\n    [anon_sym_protected] = ACTIONS(1348),\n    [anon_sym_override] = ACTIONS(1348),\n    [anon_sym_readonly] = ACTIONS(1348),\n    [anon_sym_module] = ACTIONS(1348),\n    [anon_sym_any] = ACTIONS(1348),\n    [anon_sym_number] = ACTIONS(1348),\n    [anon_sym_int] = ACTIONS(1348),\n    [anon_sym_float] = ACTIONS(1348),\n    [anon_sym_float2] = ACTIONS(1348),\n    [anon_sym_float3] = ACTIONS(1348),\n    [anon_sym_float4] = ACTIONS(1348),\n    [anon_sym_float3x3] = ACTIONS(1348),\n    [anon_sym_float2x2] = ACTIONS(1348),\n    [anon_sym_float4x4] = ACTIONS(1348),\n    [anon_sym_int2] = ACTIONS(1348),\n    [anon_sym_int3] = ACTIONS(1348),\n    [anon_sym_int4] = ACTIONS(1348),\n    [anon_sym_int3x3] = ACTIONS(1348),\n    [anon_sym_int2x2] = ACTIONS(1348),\n    [anon_sym_int4x4] = ACTIONS(1348),\n    [anon_sym_boolean] = ACTIONS(1348),\n    [anon_sym_string] = ACTIONS(1348),\n    [anon_sym_symbol] = ACTIONS(1348),\n    [anon_sym_workgroup] = ACTIONS(1348),\n    [anon_sym_get] = ACTIONS(1348),\n    [anon_sym_set] = ACTIONS(1348),\n    [anon_sym_trait] = ACTIONS(1348),\n    [anon_sym_impl] = ACTIONS(1348),\n    [anon_sym_enum] = ACTIONS(1348),\n    [anon_sym_shader] = ACTIONS(1348),\n  },\n  [549] = {\n    [ts_builtin_sym_end] = ACTIONS(1952),\n    [sym_identifier] = ACTIONS(1954),\n    [anon_sym_pub] = ACTIONS(1954),\n    [anon_sym_export] = ACTIONS(1954),\n    [anon_sym_type] = ACTIONS(1954),\n    [anon_sym_namespace] = ACTIONS(1954),\n    [anon_sym_LBRACE] = ACTIONS(1952),\n    [anon_sym_RBRACE] = ACTIONS(1952),\n    [anon_sym_typeof] = ACTIONS(1954),\n    [anon_sym_import] = ACTIONS(1954),\n    [anon_sym_var] = ACTIONS(1954),\n    [anon_sym_let] = ACTIONS(1954),\n    [anon_sym_const] = ACTIONS(1954),\n    [anon_sym_BANG] = ACTIONS(1952),\n    [anon_sym_else] = ACTIONS(1954),\n    [anon_sym_if] = ACTIONS(1954),\n    [anon_sym_switch] = ACTIONS(1954),\n    [anon_sym_for] = ACTIONS(1954),\n    [anon_sym_LPAREN] = ACTIONS(1952),\n    [anon_sym_await] = ACTIONS(1954),\n    [anon_sym_while] = ACTIONS(1954),\n    [anon_sym_do] = ACTIONS(1954),\n    [anon_sym_try] = ACTIONS(1954),\n    [anon_sym_with] = ACTIONS(1954),\n    [anon_sym_break] = ACTIONS(1954),\n    [anon_sym_continue] = ACTIONS(1954),\n    [anon_sym_debugger] = ACTIONS(1954),\n    [anon_sym_return] = ACTIONS(1954),\n    [anon_sym_throw] = ACTIONS(1954),\n    [anon_sym_SEMI] = ACTIONS(1952),\n    [anon_sym_case] = ACTIONS(1954),\n    [anon_sym_default] = ACTIONS(1954),\n    [anon_sym_yield] = ACTIONS(1954),\n    [anon_sym_LBRACK] = ACTIONS(1952),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1952),\n    [anon_sym_LT] = ACTIONS(1954),\n    [anon_sym_SLASH] = ACTIONS(1954),\n    [anon_sym_struct] = ACTIONS(1954),\n    [anon_sym_async] = ACTIONS(1954),\n    [anon_sym_fn] = ACTIONS(1954),\n    [anon_sym_fn_STAR] = ACTIONS(1952),\n    [anon_sym_new] = ACTIONS(1954),\n    [anon_sym_PLUS] = ACTIONS(1954),\n    [anon_sym_DASH] = ACTIONS(1954),\n    [anon_sym_TILDE] = ACTIONS(1952),\n    [anon_sym_void] = ACTIONS(1954),\n    [anon_sym_delete] = ACTIONS(1954),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1952),\n    [anon_sym_DASH_DASH] = ACTIONS(1952),\n    [anon_sym_DQUOTE] = ACTIONS(1952),\n    [anon_sym_SQUOTE] = ACTIONS(1952),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1952),\n    [sym_number] = ACTIONS(1952),\n    [sym_this] = ACTIONS(1954),\n    [sym_super] = ACTIONS(1954),\n    [sym_true] = ACTIONS(1954),\n    [sym_false] = ACTIONS(1954),\n    [sym_null] = ACTIONS(1954),\n    [sym_undefined] = ACTIONS(1954),\n    [anon_sym_AT] = ACTIONS(1952),\n    [anon_sym_static] = ACTIONS(1954),\n    [anon_sym_declare] = ACTIONS(1954),\n    [anon_sym_public] = ACTIONS(1954),\n    [anon_sym_private] = ACTIONS(1954),\n    [anon_sym_protected] = ACTIONS(1954),\n    [anon_sym_override] = ACTIONS(1954),\n    [anon_sym_readonly] = ACTIONS(1954),\n    [anon_sym_module] = ACTIONS(1954),\n    [anon_sym_any] = ACTIONS(1954),\n    [anon_sym_number] = ACTIONS(1954),\n    [anon_sym_int] = ACTIONS(1954),\n    [anon_sym_float] = ACTIONS(1954),\n    [anon_sym_float2] = ACTIONS(1954),\n    [anon_sym_float3] = ACTIONS(1954),\n    [anon_sym_float4] = ACTIONS(1954),\n    [anon_sym_float3x3] = ACTIONS(1954),\n    [anon_sym_float2x2] = ACTIONS(1954),\n    [anon_sym_float4x4] = ACTIONS(1954),\n    [anon_sym_int2] = ACTIONS(1954),\n    [anon_sym_int3] = ACTIONS(1954),\n    [anon_sym_int4] = ACTIONS(1954),\n    [anon_sym_int3x3] = ACTIONS(1954),\n    [anon_sym_int2x2] = ACTIONS(1954),\n    [anon_sym_int4x4] = ACTIONS(1954),\n    [anon_sym_boolean] = ACTIONS(1954),\n    [anon_sym_string] = ACTIONS(1954),\n    [anon_sym_symbol] = ACTIONS(1954),\n    [anon_sym_workgroup] = ACTIONS(1954),\n    [anon_sym_get] = ACTIONS(1954),\n    [anon_sym_set] = ACTIONS(1954),\n    [anon_sym_trait] = ACTIONS(1954),\n    [anon_sym_impl] = ACTIONS(1954),\n    [anon_sym_enum] = ACTIONS(1954),\n    [anon_sym_shader] = ACTIONS(1954),\n  },\n  [550] = {\n    [ts_builtin_sym_end] = ACTIONS(1956),\n    [sym_identifier] = ACTIONS(1958),\n    [anon_sym_pub] = ACTIONS(1958),\n    [anon_sym_export] = ACTIONS(1958),\n    [anon_sym_type] = ACTIONS(1958),\n    [anon_sym_namespace] = ACTIONS(1958),\n    [anon_sym_LBRACE] = ACTIONS(1956),\n    [anon_sym_RBRACE] = ACTIONS(1956),\n    [anon_sym_typeof] = ACTIONS(1958),\n    [anon_sym_import] = ACTIONS(1958),\n    [anon_sym_var] = ACTIONS(1958),\n    [anon_sym_let] = ACTIONS(1958),\n    [anon_sym_const] = ACTIONS(1958),\n    [anon_sym_BANG] = ACTIONS(1956),\n    [anon_sym_else] = ACTIONS(1958),\n    [anon_sym_if] = ACTIONS(1958),\n    [anon_sym_switch] = ACTIONS(1958),\n    [anon_sym_for] = ACTIONS(1958),\n    [anon_sym_LPAREN] = ACTIONS(1956),\n    [anon_sym_await] = ACTIONS(1958),\n    [anon_sym_while] = ACTIONS(1958),\n    [anon_sym_do] = ACTIONS(1958),\n    [anon_sym_try] = ACTIONS(1958),\n    [anon_sym_with] = ACTIONS(1958),\n    [anon_sym_break] = ACTIONS(1958),\n    [anon_sym_continue] = ACTIONS(1958),\n    [anon_sym_debugger] = ACTIONS(1958),\n    [anon_sym_return] = ACTIONS(1958),\n    [anon_sym_throw] = ACTIONS(1958),\n    [anon_sym_SEMI] = ACTIONS(1956),\n    [anon_sym_case] = ACTIONS(1958),\n    [anon_sym_default] = ACTIONS(1958),\n    [anon_sym_yield] = ACTIONS(1958),\n    [anon_sym_LBRACK] = ACTIONS(1956),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1956),\n    [anon_sym_LT] = ACTIONS(1958),\n    [anon_sym_SLASH] = ACTIONS(1958),\n    [anon_sym_struct] = ACTIONS(1958),\n    [anon_sym_async] = ACTIONS(1958),\n    [anon_sym_fn] = ACTIONS(1958),\n    [anon_sym_fn_STAR] = ACTIONS(1956),\n    [anon_sym_new] = ACTIONS(1958),\n    [anon_sym_PLUS] = ACTIONS(1958),\n    [anon_sym_DASH] = ACTIONS(1958),\n    [anon_sym_TILDE] = ACTIONS(1956),\n    [anon_sym_void] = ACTIONS(1958),\n    [anon_sym_delete] = ACTIONS(1958),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1956),\n    [anon_sym_DASH_DASH] = ACTIONS(1956),\n    [anon_sym_DQUOTE] = ACTIONS(1956),\n    [anon_sym_SQUOTE] = ACTIONS(1956),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1956),\n    [sym_number] = ACTIONS(1956),\n    [sym_this] = ACTIONS(1958),\n    [sym_super] = ACTIONS(1958),\n    [sym_true] = ACTIONS(1958),\n    [sym_false] = ACTIONS(1958),\n    [sym_null] = ACTIONS(1958),\n    [sym_undefined] = ACTIONS(1958),\n    [anon_sym_AT] = ACTIONS(1956),\n    [anon_sym_static] = ACTIONS(1958),\n    [anon_sym_declare] = ACTIONS(1958),\n    [anon_sym_public] = ACTIONS(1958),\n    [anon_sym_private] = ACTIONS(1958),\n    [anon_sym_protected] = ACTIONS(1958),\n    [anon_sym_override] = ACTIONS(1958),\n    [anon_sym_readonly] = ACTIONS(1958),\n    [anon_sym_module] = ACTIONS(1958),\n    [anon_sym_any] = ACTIONS(1958),\n    [anon_sym_number] = ACTIONS(1958),\n    [anon_sym_int] = ACTIONS(1958),\n    [anon_sym_float] = ACTIONS(1958),\n    [anon_sym_float2] = ACTIONS(1958),\n    [anon_sym_float3] = ACTIONS(1958),\n    [anon_sym_float4] = ACTIONS(1958),\n    [anon_sym_float3x3] = ACTIONS(1958),\n    [anon_sym_float2x2] = ACTIONS(1958),\n    [anon_sym_float4x4] = ACTIONS(1958),\n    [anon_sym_int2] = ACTIONS(1958),\n    [anon_sym_int3] = ACTIONS(1958),\n    [anon_sym_int4] = ACTIONS(1958),\n    [anon_sym_int3x3] = ACTIONS(1958),\n    [anon_sym_int2x2] = ACTIONS(1958),\n    [anon_sym_int4x4] = ACTIONS(1958),\n    [anon_sym_boolean] = ACTIONS(1958),\n    [anon_sym_string] = ACTIONS(1958),\n    [anon_sym_symbol] = ACTIONS(1958),\n    [anon_sym_workgroup] = ACTIONS(1958),\n    [anon_sym_get] = ACTIONS(1958),\n    [anon_sym_set] = ACTIONS(1958),\n    [anon_sym_trait] = ACTIONS(1958),\n    [anon_sym_impl] = ACTIONS(1958),\n    [anon_sym_enum] = ACTIONS(1958),\n    [anon_sym_shader] = ACTIONS(1958),\n  },\n  [551] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [552] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [553] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [554] = {\n    [ts_builtin_sym_end] = ACTIONS(1964),\n    [sym_identifier] = ACTIONS(1966),\n    [anon_sym_pub] = ACTIONS(1966),\n    [anon_sym_export] = ACTIONS(1966),\n    [anon_sym_type] = ACTIONS(1966),\n    [anon_sym_namespace] = ACTIONS(1966),\n    [anon_sym_LBRACE] = ACTIONS(1964),\n    [anon_sym_RBRACE] = ACTIONS(1964),\n    [anon_sym_typeof] = ACTIONS(1966),\n    [anon_sym_import] = ACTIONS(1966),\n    [anon_sym_var] = ACTIONS(1966),\n    [anon_sym_let] = ACTIONS(1966),\n    [anon_sym_const] = ACTIONS(1966),\n    [anon_sym_BANG] = ACTIONS(1964),\n    [anon_sym_else] = ACTIONS(1966),\n    [anon_sym_if] = ACTIONS(1966),\n    [anon_sym_switch] = ACTIONS(1966),\n    [anon_sym_for] = ACTIONS(1966),\n    [anon_sym_LPAREN] = ACTIONS(1964),\n    [anon_sym_await] = ACTIONS(1966),\n    [anon_sym_while] = ACTIONS(1966),\n    [anon_sym_do] = ACTIONS(1966),\n    [anon_sym_try] = ACTIONS(1966),\n    [anon_sym_with] = ACTIONS(1966),\n    [anon_sym_break] = ACTIONS(1966),\n    [anon_sym_continue] = ACTIONS(1966),\n    [anon_sym_debugger] = ACTIONS(1966),\n    [anon_sym_return] = ACTIONS(1966),\n    [anon_sym_throw] = ACTIONS(1966),\n    [anon_sym_SEMI] = ACTIONS(1964),\n    [anon_sym_case] = ACTIONS(1966),\n    [anon_sym_default] = ACTIONS(1966),\n    [anon_sym_yield] = ACTIONS(1966),\n    [anon_sym_LBRACK] = ACTIONS(1964),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1964),\n    [anon_sym_LT] = ACTIONS(1966),\n    [anon_sym_SLASH] = ACTIONS(1966),\n    [anon_sym_struct] = ACTIONS(1966),\n    [anon_sym_async] = ACTIONS(1966),\n    [anon_sym_fn] = ACTIONS(1966),\n    [anon_sym_fn_STAR] = ACTIONS(1964),\n    [anon_sym_new] = ACTIONS(1966),\n    [anon_sym_PLUS] = ACTIONS(1966),\n    [anon_sym_DASH] = ACTIONS(1966),\n    [anon_sym_TILDE] = ACTIONS(1964),\n    [anon_sym_void] = ACTIONS(1966),\n    [anon_sym_delete] = ACTIONS(1966),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1964),\n    [anon_sym_DASH_DASH] = ACTIONS(1964),\n    [anon_sym_DQUOTE] = ACTIONS(1964),\n    [anon_sym_SQUOTE] = ACTIONS(1964),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1964),\n    [sym_number] = ACTIONS(1964),\n    [sym_this] = ACTIONS(1966),\n    [sym_super] = ACTIONS(1966),\n    [sym_true] = ACTIONS(1966),\n    [sym_false] = ACTIONS(1966),\n    [sym_null] = ACTIONS(1966),\n    [sym_undefined] = ACTIONS(1966),\n    [anon_sym_AT] = ACTIONS(1964),\n    [anon_sym_static] = ACTIONS(1966),\n    [anon_sym_declare] = ACTIONS(1966),\n    [anon_sym_public] = ACTIONS(1966),\n    [anon_sym_private] = ACTIONS(1966),\n    [anon_sym_protected] = ACTIONS(1966),\n    [anon_sym_override] = ACTIONS(1966),\n    [anon_sym_readonly] = ACTIONS(1966),\n    [anon_sym_module] = ACTIONS(1966),\n    [anon_sym_any] = ACTIONS(1966),\n    [anon_sym_number] = ACTIONS(1966),\n    [anon_sym_int] = ACTIONS(1966),\n    [anon_sym_float] = ACTIONS(1966),\n    [anon_sym_float2] = ACTIONS(1966),\n    [anon_sym_float3] = ACTIONS(1966),\n    [anon_sym_float4] = ACTIONS(1966),\n    [anon_sym_float3x3] = ACTIONS(1966),\n    [anon_sym_float2x2] = ACTIONS(1966),\n    [anon_sym_float4x4] = ACTIONS(1966),\n    [anon_sym_int2] = ACTIONS(1966),\n    [anon_sym_int3] = ACTIONS(1966),\n    [anon_sym_int4] = ACTIONS(1966),\n    [anon_sym_int3x3] = ACTIONS(1966),\n    [anon_sym_int2x2] = ACTIONS(1966),\n    [anon_sym_int4x4] = ACTIONS(1966),\n    [anon_sym_boolean] = ACTIONS(1966),\n    [anon_sym_string] = ACTIONS(1966),\n    [anon_sym_symbol] = ACTIONS(1966),\n    [anon_sym_workgroup] = ACTIONS(1966),\n    [anon_sym_get] = ACTIONS(1966),\n    [anon_sym_set] = ACTIONS(1966),\n    [anon_sym_trait] = ACTIONS(1966),\n    [anon_sym_impl] = ACTIONS(1966),\n    [anon_sym_enum] = ACTIONS(1966),\n    [anon_sym_shader] = ACTIONS(1966),\n  },\n  [555] = {\n    [ts_builtin_sym_end] = ACTIONS(1968),\n    [sym_identifier] = ACTIONS(1970),\n    [anon_sym_pub] = ACTIONS(1970),\n    [anon_sym_export] = ACTIONS(1970),\n    [anon_sym_type] = ACTIONS(1970),\n    [anon_sym_namespace] = ACTIONS(1970),\n    [anon_sym_LBRACE] = ACTIONS(1968),\n    [anon_sym_RBRACE] = ACTIONS(1968),\n    [anon_sym_typeof] = ACTIONS(1970),\n    [anon_sym_import] = ACTIONS(1970),\n    [anon_sym_var] = ACTIONS(1970),\n    [anon_sym_let] = ACTIONS(1970),\n    [anon_sym_const] = ACTIONS(1970),\n    [anon_sym_BANG] = ACTIONS(1968),\n    [anon_sym_else] = ACTIONS(1970),\n    [anon_sym_if] = ACTIONS(1970),\n    [anon_sym_switch] = ACTIONS(1970),\n    [anon_sym_for] = ACTIONS(1970),\n    [anon_sym_LPAREN] = ACTIONS(1968),\n    [anon_sym_await] = ACTIONS(1970),\n    [anon_sym_while] = ACTIONS(1970),\n    [anon_sym_do] = ACTIONS(1970),\n    [anon_sym_try] = ACTIONS(1970),\n    [anon_sym_with] = ACTIONS(1970),\n    [anon_sym_break] = ACTIONS(1970),\n    [anon_sym_continue] = ACTIONS(1970),\n    [anon_sym_debugger] = ACTIONS(1970),\n    [anon_sym_return] = ACTIONS(1970),\n    [anon_sym_throw] = ACTIONS(1970),\n    [anon_sym_SEMI] = ACTIONS(1968),\n    [anon_sym_case] = ACTIONS(1970),\n    [anon_sym_default] = ACTIONS(1970),\n    [anon_sym_yield] = ACTIONS(1970),\n    [anon_sym_LBRACK] = ACTIONS(1968),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1968),\n    [anon_sym_LT] = ACTIONS(1970),\n    [anon_sym_SLASH] = ACTIONS(1970),\n    [anon_sym_struct] = ACTIONS(1970),\n    [anon_sym_async] = ACTIONS(1970),\n    [anon_sym_fn] = ACTIONS(1970),\n    [anon_sym_fn_STAR] = ACTIONS(1968),\n    [anon_sym_new] = ACTIONS(1970),\n    [anon_sym_PLUS] = ACTIONS(1970),\n    [anon_sym_DASH] = ACTIONS(1970),\n    [anon_sym_TILDE] = ACTIONS(1968),\n    [anon_sym_void] = ACTIONS(1970),\n    [anon_sym_delete] = ACTIONS(1970),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1968),\n    [anon_sym_DASH_DASH] = ACTIONS(1968),\n    [anon_sym_DQUOTE] = ACTIONS(1968),\n    [anon_sym_SQUOTE] = ACTIONS(1968),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1968),\n    [sym_number] = ACTIONS(1968),\n    [sym_this] = ACTIONS(1970),\n    [sym_super] = ACTIONS(1970),\n    [sym_true] = ACTIONS(1970),\n    [sym_false] = ACTIONS(1970),\n    [sym_null] = ACTIONS(1970),\n    [sym_undefined] = ACTIONS(1970),\n    [anon_sym_AT] = ACTIONS(1968),\n    [anon_sym_static] = ACTIONS(1970),\n    [anon_sym_declare] = ACTIONS(1970),\n    [anon_sym_public] = ACTIONS(1970),\n    [anon_sym_private] = ACTIONS(1970),\n    [anon_sym_protected] = ACTIONS(1970),\n    [anon_sym_override] = ACTIONS(1970),\n    [anon_sym_readonly] = ACTIONS(1970),\n    [anon_sym_module] = ACTIONS(1970),\n    [anon_sym_any] = ACTIONS(1970),\n    [anon_sym_number] = ACTIONS(1970),\n    [anon_sym_int] = ACTIONS(1970),\n    [anon_sym_float] = ACTIONS(1970),\n    [anon_sym_float2] = ACTIONS(1970),\n    [anon_sym_float3] = ACTIONS(1970),\n    [anon_sym_float4] = ACTIONS(1970),\n    [anon_sym_float3x3] = ACTIONS(1970),\n    [anon_sym_float2x2] = ACTIONS(1970),\n    [anon_sym_float4x4] = ACTIONS(1970),\n    [anon_sym_int2] = ACTIONS(1970),\n    [anon_sym_int3] = ACTIONS(1970),\n    [anon_sym_int4] = ACTIONS(1970),\n    [anon_sym_int3x3] = ACTIONS(1970),\n    [anon_sym_int2x2] = ACTIONS(1970),\n    [anon_sym_int4x4] = ACTIONS(1970),\n    [anon_sym_boolean] = ACTIONS(1970),\n    [anon_sym_string] = ACTIONS(1970),\n    [anon_sym_symbol] = ACTIONS(1970),\n    [anon_sym_workgroup] = ACTIONS(1970),\n    [anon_sym_get] = ACTIONS(1970),\n    [anon_sym_set] = ACTIONS(1970),\n    [anon_sym_trait] = ACTIONS(1970),\n    [anon_sym_impl] = ACTIONS(1970),\n    [anon_sym_enum] = ACTIONS(1970),\n    [anon_sym_shader] = ACTIONS(1970),\n  },\n  [556] = {\n    [ts_builtin_sym_end] = ACTIONS(1972),\n    [sym_identifier] = ACTIONS(1974),\n    [anon_sym_pub] = ACTIONS(1974),\n    [anon_sym_export] = ACTIONS(1974),\n    [anon_sym_type] = ACTIONS(1974),\n    [anon_sym_namespace] = ACTIONS(1974),\n    [anon_sym_LBRACE] = ACTIONS(1972),\n    [anon_sym_RBRACE] = ACTIONS(1972),\n    [anon_sym_typeof] = ACTIONS(1974),\n    [anon_sym_import] = ACTIONS(1974),\n    [anon_sym_var] = ACTIONS(1974),\n    [anon_sym_let] = ACTIONS(1974),\n    [anon_sym_const] = ACTIONS(1974),\n    [anon_sym_BANG] = ACTIONS(1972),\n    [anon_sym_else] = ACTIONS(1974),\n    [anon_sym_if] = ACTIONS(1974),\n    [anon_sym_switch] = ACTIONS(1974),\n    [anon_sym_for] = ACTIONS(1974),\n    [anon_sym_LPAREN] = ACTIONS(1972),\n    [anon_sym_await] = ACTIONS(1974),\n    [anon_sym_while] = ACTIONS(1974),\n    [anon_sym_do] = ACTIONS(1974),\n    [anon_sym_try] = ACTIONS(1974),\n    [anon_sym_with] = ACTIONS(1974),\n    [anon_sym_break] = ACTIONS(1974),\n    [anon_sym_continue] = ACTIONS(1974),\n    [anon_sym_debugger] = ACTIONS(1974),\n    [anon_sym_return] = ACTIONS(1974),\n    [anon_sym_throw] = ACTIONS(1974),\n    [anon_sym_SEMI] = ACTIONS(1972),\n    [anon_sym_case] = ACTIONS(1974),\n    [anon_sym_default] = ACTIONS(1974),\n    [anon_sym_yield] = ACTIONS(1974),\n    [anon_sym_LBRACK] = ACTIONS(1972),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1972),\n    [anon_sym_LT] = ACTIONS(1974),\n    [anon_sym_SLASH] = ACTIONS(1974),\n    [anon_sym_struct] = ACTIONS(1974),\n    [anon_sym_async] = ACTIONS(1974),\n    [anon_sym_fn] = ACTIONS(1974),\n    [anon_sym_fn_STAR] = ACTIONS(1972),\n    [anon_sym_new] = ACTIONS(1974),\n    [anon_sym_PLUS] = ACTIONS(1974),\n    [anon_sym_DASH] = ACTIONS(1974),\n    [anon_sym_TILDE] = ACTIONS(1972),\n    [anon_sym_void] = ACTIONS(1974),\n    [anon_sym_delete] = ACTIONS(1974),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1972),\n    [anon_sym_DASH_DASH] = ACTIONS(1972),\n    [anon_sym_DQUOTE] = ACTIONS(1972),\n    [anon_sym_SQUOTE] = ACTIONS(1972),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1972),\n    [sym_number] = ACTIONS(1972),\n    [sym_this] = ACTIONS(1974),\n    [sym_super] = ACTIONS(1974),\n    [sym_true] = ACTIONS(1974),\n    [sym_false] = ACTIONS(1974),\n    [sym_null] = ACTIONS(1974),\n    [sym_undefined] = ACTIONS(1974),\n    [anon_sym_AT] = ACTIONS(1972),\n    [anon_sym_static] = ACTIONS(1974),\n    [anon_sym_declare] = ACTIONS(1974),\n    [anon_sym_public] = ACTIONS(1974),\n    [anon_sym_private] = ACTIONS(1974),\n    [anon_sym_protected] = ACTIONS(1974),\n    [anon_sym_override] = ACTIONS(1974),\n    [anon_sym_readonly] = ACTIONS(1974),\n    [anon_sym_module] = ACTIONS(1974),\n    [anon_sym_any] = ACTIONS(1974),\n    [anon_sym_number] = ACTIONS(1974),\n    [anon_sym_int] = ACTIONS(1974),\n    [anon_sym_float] = ACTIONS(1974),\n    [anon_sym_float2] = ACTIONS(1974),\n    [anon_sym_float3] = ACTIONS(1974),\n    [anon_sym_float4] = ACTIONS(1974),\n    [anon_sym_float3x3] = ACTIONS(1974),\n    [anon_sym_float2x2] = ACTIONS(1974),\n    [anon_sym_float4x4] = ACTIONS(1974),\n    [anon_sym_int2] = ACTIONS(1974),\n    [anon_sym_int3] = ACTIONS(1974),\n    [anon_sym_int4] = ACTIONS(1974),\n    [anon_sym_int3x3] = ACTIONS(1974),\n    [anon_sym_int2x2] = ACTIONS(1974),\n    [anon_sym_int4x4] = ACTIONS(1974),\n    [anon_sym_boolean] = ACTIONS(1974),\n    [anon_sym_string] = ACTIONS(1974),\n    [anon_sym_symbol] = ACTIONS(1974),\n    [anon_sym_workgroup] = ACTIONS(1974),\n    [anon_sym_get] = ACTIONS(1974),\n    [anon_sym_set] = ACTIONS(1974),\n    [anon_sym_trait] = ACTIONS(1974),\n    [anon_sym_impl] = ACTIONS(1974),\n    [anon_sym_enum] = ACTIONS(1974),\n    [anon_sym_shader] = ACTIONS(1974),\n  },\n  [557] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [558] = {\n    [ts_builtin_sym_end] = ACTIONS(1976),\n    [sym_identifier] = ACTIONS(1978),\n    [anon_sym_pub] = ACTIONS(1978),\n    [anon_sym_export] = ACTIONS(1978),\n    [anon_sym_type] = ACTIONS(1978),\n    [anon_sym_namespace] = ACTIONS(1978),\n    [anon_sym_LBRACE] = ACTIONS(1976),\n    [anon_sym_RBRACE] = ACTIONS(1976),\n    [anon_sym_typeof] = ACTIONS(1978),\n    [anon_sym_import] = ACTIONS(1978),\n    [anon_sym_var] = ACTIONS(1978),\n    [anon_sym_let] = ACTIONS(1978),\n    [anon_sym_const] = ACTIONS(1978),\n    [anon_sym_BANG] = ACTIONS(1976),\n    [anon_sym_else] = ACTIONS(1978),\n    [anon_sym_if] = ACTIONS(1978),\n    [anon_sym_switch] = ACTIONS(1978),\n    [anon_sym_for] = ACTIONS(1978),\n    [anon_sym_LPAREN] = ACTIONS(1976),\n    [anon_sym_await] = ACTIONS(1978),\n    [anon_sym_while] = ACTIONS(1978),\n    [anon_sym_do] = ACTIONS(1978),\n    [anon_sym_try] = ACTIONS(1978),\n    [anon_sym_with] = ACTIONS(1978),\n    [anon_sym_break] = ACTIONS(1978),\n    [anon_sym_continue] = ACTIONS(1978),\n    [anon_sym_debugger] = ACTIONS(1978),\n    [anon_sym_return] = ACTIONS(1978),\n    [anon_sym_throw] = ACTIONS(1978),\n    [anon_sym_SEMI] = ACTIONS(1976),\n    [anon_sym_case] = ACTIONS(1978),\n    [anon_sym_default] = ACTIONS(1978),\n    [anon_sym_yield] = ACTIONS(1978),\n    [anon_sym_LBRACK] = ACTIONS(1976),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1976),\n    [anon_sym_LT] = ACTIONS(1978),\n    [anon_sym_SLASH] = ACTIONS(1978),\n    [anon_sym_struct] = ACTIONS(1978),\n    [anon_sym_async] = ACTIONS(1978),\n    [anon_sym_fn] = ACTIONS(1978),\n    [anon_sym_fn_STAR] = ACTIONS(1976),\n    [anon_sym_new] = ACTIONS(1978),\n    [anon_sym_PLUS] = ACTIONS(1978),\n    [anon_sym_DASH] = ACTIONS(1978),\n    [anon_sym_TILDE] = ACTIONS(1976),\n    [anon_sym_void] = ACTIONS(1978),\n    [anon_sym_delete] = ACTIONS(1978),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1976),\n    [anon_sym_DASH_DASH] = ACTIONS(1976),\n    [anon_sym_DQUOTE] = ACTIONS(1976),\n    [anon_sym_SQUOTE] = ACTIONS(1976),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1976),\n    [sym_number] = ACTIONS(1976),\n    [sym_this] = ACTIONS(1978),\n    [sym_super] = ACTIONS(1978),\n    [sym_true] = ACTIONS(1978),\n    [sym_false] = ACTIONS(1978),\n    [sym_null] = ACTIONS(1978),\n    [sym_undefined] = ACTIONS(1978),\n    [anon_sym_AT] = ACTIONS(1976),\n    [anon_sym_static] = ACTIONS(1978),\n    [anon_sym_declare] = ACTIONS(1978),\n    [anon_sym_public] = ACTIONS(1978),\n    [anon_sym_private] = ACTIONS(1978),\n    [anon_sym_protected] = ACTIONS(1978),\n    [anon_sym_override] = ACTIONS(1978),\n    [anon_sym_readonly] = ACTIONS(1978),\n    [anon_sym_module] = ACTIONS(1978),\n    [anon_sym_any] = ACTIONS(1978),\n    [anon_sym_number] = ACTIONS(1978),\n    [anon_sym_int] = ACTIONS(1978),\n    [anon_sym_float] = ACTIONS(1978),\n    [anon_sym_float2] = ACTIONS(1978),\n    [anon_sym_float3] = ACTIONS(1978),\n    [anon_sym_float4] = ACTIONS(1978),\n    [anon_sym_float3x3] = ACTIONS(1978),\n    [anon_sym_float2x2] = ACTIONS(1978),\n    [anon_sym_float4x4] = ACTIONS(1978),\n    [anon_sym_int2] = ACTIONS(1978),\n    [anon_sym_int3] = ACTIONS(1978),\n    [anon_sym_int4] = ACTIONS(1978),\n    [anon_sym_int3x3] = ACTIONS(1978),\n    [anon_sym_int2x2] = ACTIONS(1978),\n    [anon_sym_int4x4] = ACTIONS(1978),\n    [anon_sym_boolean] = ACTIONS(1978),\n    [anon_sym_string] = ACTIONS(1978),\n    [anon_sym_symbol] = ACTIONS(1978),\n    [anon_sym_workgroup] = ACTIONS(1978),\n    [anon_sym_get] = ACTIONS(1978),\n    [anon_sym_set] = ACTIONS(1978),\n    [anon_sym_trait] = ACTIONS(1978),\n    [anon_sym_impl] = ACTIONS(1978),\n    [anon_sym_enum] = ACTIONS(1978),\n    [anon_sym_shader] = ACTIONS(1978),\n  },\n  [559] = {\n    [ts_builtin_sym_end] = ACTIONS(1980),\n    [sym_identifier] = ACTIONS(1982),\n    [anon_sym_pub] = ACTIONS(1982),\n    [anon_sym_export] = ACTIONS(1982),\n    [anon_sym_type] = ACTIONS(1982),\n    [anon_sym_namespace] = ACTIONS(1982),\n    [anon_sym_LBRACE] = ACTIONS(1980),\n    [anon_sym_RBRACE] = ACTIONS(1980),\n    [anon_sym_typeof] = ACTIONS(1982),\n    [anon_sym_import] = ACTIONS(1982),\n    [anon_sym_var] = ACTIONS(1982),\n    [anon_sym_let] = ACTIONS(1982),\n    [anon_sym_const] = ACTIONS(1982),\n    [anon_sym_BANG] = ACTIONS(1980),\n    [anon_sym_else] = ACTIONS(1982),\n    [anon_sym_if] = ACTIONS(1982),\n    [anon_sym_switch] = ACTIONS(1982),\n    [anon_sym_for] = ACTIONS(1982),\n    [anon_sym_LPAREN] = ACTIONS(1980),\n    [anon_sym_await] = ACTIONS(1982),\n    [anon_sym_while] = ACTIONS(1982),\n    [anon_sym_do] = ACTIONS(1982),\n    [anon_sym_try] = ACTIONS(1982),\n    [anon_sym_with] = ACTIONS(1982),\n    [anon_sym_break] = ACTIONS(1982),\n    [anon_sym_continue] = ACTIONS(1982),\n    [anon_sym_debugger] = ACTIONS(1982),\n    [anon_sym_return] = ACTIONS(1982),\n    [anon_sym_throw] = ACTIONS(1982),\n    [anon_sym_SEMI] = ACTIONS(1980),\n    [anon_sym_case] = ACTIONS(1982),\n    [anon_sym_default] = ACTIONS(1982),\n    [anon_sym_yield] = ACTIONS(1982),\n    [anon_sym_LBRACK] = ACTIONS(1980),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1980),\n    [anon_sym_LT] = ACTIONS(1982),\n    [anon_sym_SLASH] = ACTIONS(1982),\n    [anon_sym_struct] = ACTIONS(1982),\n    [anon_sym_async] = ACTIONS(1982),\n    [anon_sym_fn] = ACTIONS(1982),\n    [anon_sym_fn_STAR] = ACTIONS(1980),\n    [anon_sym_new] = ACTIONS(1982),\n    [anon_sym_PLUS] = ACTIONS(1982),\n    [anon_sym_DASH] = ACTIONS(1982),\n    [anon_sym_TILDE] = ACTIONS(1980),\n    [anon_sym_void] = ACTIONS(1982),\n    [anon_sym_delete] = ACTIONS(1982),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1980),\n    [anon_sym_DASH_DASH] = ACTIONS(1980),\n    [anon_sym_DQUOTE] = ACTIONS(1980),\n    [anon_sym_SQUOTE] = ACTIONS(1980),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1980),\n    [sym_number] = ACTIONS(1980),\n    [sym_this] = ACTIONS(1982),\n    [sym_super] = ACTIONS(1982),\n    [sym_true] = ACTIONS(1982),\n    [sym_false] = ACTIONS(1982),\n    [sym_null] = ACTIONS(1982),\n    [sym_undefined] = ACTIONS(1982),\n    [anon_sym_AT] = ACTIONS(1980),\n    [anon_sym_static] = ACTIONS(1982),\n    [anon_sym_declare] = ACTIONS(1982),\n    [anon_sym_public] = ACTIONS(1982),\n    [anon_sym_private] = ACTIONS(1982),\n    [anon_sym_protected] = ACTIONS(1982),\n    [anon_sym_override] = ACTIONS(1982),\n    [anon_sym_readonly] = ACTIONS(1982),\n    [anon_sym_module] = ACTIONS(1982),\n    [anon_sym_any] = ACTIONS(1982),\n    [anon_sym_number] = ACTIONS(1982),\n    [anon_sym_int] = ACTIONS(1982),\n    [anon_sym_float] = ACTIONS(1982),\n    [anon_sym_float2] = ACTIONS(1982),\n    [anon_sym_float3] = ACTIONS(1982),\n    [anon_sym_float4] = ACTIONS(1982),\n    [anon_sym_float3x3] = ACTIONS(1982),\n    [anon_sym_float2x2] = ACTIONS(1982),\n    [anon_sym_float4x4] = ACTIONS(1982),\n    [anon_sym_int2] = ACTIONS(1982),\n    [anon_sym_int3] = ACTIONS(1982),\n    [anon_sym_int4] = ACTIONS(1982),\n    [anon_sym_int3x3] = ACTIONS(1982),\n    [anon_sym_int2x2] = ACTIONS(1982),\n    [anon_sym_int4x4] = ACTIONS(1982),\n    [anon_sym_boolean] = ACTIONS(1982),\n    [anon_sym_string] = ACTIONS(1982),\n    [anon_sym_symbol] = ACTIONS(1982),\n    [anon_sym_workgroup] = ACTIONS(1982),\n    [anon_sym_get] = ACTIONS(1982),\n    [anon_sym_set] = ACTIONS(1982),\n    [anon_sym_trait] = ACTIONS(1982),\n    [anon_sym_impl] = ACTIONS(1982),\n    [anon_sym_enum] = ACTIONS(1982),\n    [anon_sym_shader] = ACTIONS(1982),\n  },\n  [560] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [561] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [562] = {\n    [ts_builtin_sym_end] = ACTIONS(1984),\n    [sym_identifier] = ACTIONS(1986),\n    [anon_sym_pub] = ACTIONS(1986),\n    [anon_sym_export] = ACTIONS(1986),\n    [anon_sym_type] = ACTIONS(1986),\n    [anon_sym_namespace] = ACTIONS(1986),\n    [anon_sym_LBRACE] = ACTIONS(1984),\n    [anon_sym_RBRACE] = ACTIONS(1984),\n    [anon_sym_typeof] = ACTIONS(1986),\n    [anon_sym_import] = ACTIONS(1986),\n    [anon_sym_var] = ACTIONS(1986),\n    [anon_sym_let] = ACTIONS(1986),\n    [anon_sym_const] = ACTIONS(1986),\n    [anon_sym_BANG] = ACTIONS(1984),\n    [anon_sym_else] = ACTIONS(1986),\n    [anon_sym_if] = ACTIONS(1986),\n    [anon_sym_switch] = ACTIONS(1986),\n    [anon_sym_for] = ACTIONS(1986),\n    [anon_sym_LPAREN] = ACTIONS(1984),\n    [anon_sym_await] = ACTIONS(1986),\n    [anon_sym_while] = ACTIONS(1986),\n    [anon_sym_do] = ACTIONS(1986),\n    [anon_sym_try] = ACTIONS(1986),\n    [anon_sym_with] = ACTIONS(1986),\n    [anon_sym_break] = ACTIONS(1986),\n    [anon_sym_continue] = ACTIONS(1986),\n    [anon_sym_debugger] = ACTIONS(1986),\n    [anon_sym_return] = ACTIONS(1986),\n    [anon_sym_throw] = ACTIONS(1986),\n    [anon_sym_SEMI] = ACTIONS(1984),\n    [anon_sym_case] = ACTIONS(1986),\n    [anon_sym_default] = ACTIONS(1986),\n    [anon_sym_yield] = ACTIONS(1986),\n    [anon_sym_LBRACK] = ACTIONS(1984),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1984),\n    [anon_sym_LT] = ACTIONS(1986),\n    [anon_sym_SLASH] = ACTIONS(1986),\n    [anon_sym_struct] = ACTIONS(1986),\n    [anon_sym_async] = ACTIONS(1986),\n    [anon_sym_fn] = ACTIONS(1986),\n    [anon_sym_fn_STAR] = ACTIONS(1984),\n    [anon_sym_new] = ACTIONS(1986),\n    [anon_sym_PLUS] = ACTIONS(1986),\n    [anon_sym_DASH] = ACTIONS(1986),\n    [anon_sym_TILDE] = ACTIONS(1984),\n    [anon_sym_void] = ACTIONS(1986),\n    [anon_sym_delete] = ACTIONS(1986),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1984),\n    [anon_sym_DASH_DASH] = ACTIONS(1984),\n    [anon_sym_DQUOTE] = ACTIONS(1984),\n    [anon_sym_SQUOTE] = ACTIONS(1984),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1984),\n    [sym_number] = ACTIONS(1984),\n    [sym_this] = ACTIONS(1986),\n    [sym_super] = ACTIONS(1986),\n    [sym_true] = ACTIONS(1986),\n    [sym_false] = ACTIONS(1986),\n    [sym_null] = ACTIONS(1986),\n    [sym_undefined] = ACTIONS(1986),\n    [anon_sym_AT] = ACTIONS(1984),\n    [anon_sym_static] = ACTIONS(1986),\n    [anon_sym_declare] = ACTIONS(1986),\n    [anon_sym_public] = ACTIONS(1986),\n    [anon_sym_private] = ACTIONS(1986),\n    [anon_sym_protected] = ACTIONS(1986),\n    [anon_sym_override] = ACTIONS(1986),\n    [anon_sym_readonly] = ACTIONS(1986),\n    [anon_sym_module] = ACTIONS(1986),\n    [anon_sym_any] = ACTIONS(1986),\n    [anon_sym_number] = ACTIONS(1986),\n    [anon_sym_int] = ACTIONS(1986),\n    [anon_sym_float] = ACTIONS(1986),\n    [anon_sym_float2] = ACTIONS(1986),\n    [anon_sym_float3] = ACTIONS(1986),\n    [anon_sym_float4] = ACTIONS(1986),\n    [anon_sym_float3x3] = ACTIONS(1986),\n    [anon_sym_float2x2] = ACTIONS(1986),\n    [anon_sym_float4x4] = ACTIONS(1986),\n    [anon_sym_int2] = ACTIONS(1986),\n    [anon_sym_int3] = ACTIONS(1986),\n    [anon_sym_int4] = ACTIONS(1986),\n    [anon_sym_int3x3] = ACTIONS(1986),\n    [anon_sym_int2x2] = ACTIONS(1986),\n    [anon_sym_int4x4] = ACTIONS(1986),\n    [anon_sym_boolean] = ACTIONS(1986),\n    [anon_sym_string] = ACTIONS(1986),\n    [anon_sym_symbol] = ACTIONS(1986),\n    [anon_sym_workgroup] = ACTIONS(1986),\n    [anon_sym_get] = ACTIONS(1986),\n    [anon_sym_set] = ACTIONS(1986),\n    [anon_sym_trait] = ACTIONS(1986),\n    [anon_sym_impl] = ACTIONS(1986),\n    [anon_sym_enum] = ACTIONS(1986),\n    [anon_sym_shader] = ACTIONS(1986),\n  },\n  [563] = {\n    [ts_builtin_sym_end] = ACTIONS(1372),\n    [sym_identifier] = ACTIONS(1374),\n    [anon_sym_pub] = ACTIONS(1374),\n    [anon_sym_export] = ACTIONS(1374),\n    [anon_sym_type] = ACTIONS(1374),\n    [anon_sym_namespace] = ACTIONS(1374),\n    [anon_sym_LBRACE] = ACTIONS(1372),\n    [anon_sym_RBRACE] = ACTIONS(1372),\n    [anon_sym_typeof] = ACTIONS(1374),\n    [anon_sym_import] = ACTIONS(1374),\n    [anon_sym_var] = ACTIONS(1374),\n    [anon_sym_let] = ACTIONS(1374),\n    [anon_sym_const] = ACTIONS(1374),\n    [anon_sym_BANG] = ACTIONS(1372),\n    [anon_sym_else] = ACTIONS(1374),\n    [anon_sym_if] = ACTIONS(1374),\n    [anon_sym_switch] = ACTIONS(1374),\n    [anon_sym_for] = ACTIONS(1374),\n    [anon_sym_LPAREN] = ACTIONS(1372),\n    [anon_sym_await] = ACTIONS(1374),\n    [anon_sym_while] = ACTIONS(1374),\n    [anon_sym_do] = ACTIONS(1374),\n    [anon_sym_try] = ACTIONS(1374),\n    [anon_sym_with] = ACTIONS(1374),\n    [anon_sym_break] = ACTIONS(1374),\n    [anon_sym_continue] = ACTIONS(1374),\n    [anon_sym_debugger] = ACTIONS(1374),\n    [anon_sym_return] = ACTIONS(1374),\n    [anon_sym_throw] = ACTIONS(1374),\n    [anon_sym_SEMI] = ACTIONS(1372),\n    [anon_sym_case] = ACTIONS(1374),\n    [anon_sym_default] = ACTIONS(1374),\n    [anon_sym_yield] = ACTIONS(1374),\n    [anon_sym_LBRACK] = ACTIONS(1372),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1372),\n    [anon_sym_LT] = ACTIONS(1374),\n    [anon_sym_SLASH] = ACTIONS(1374),\n    [anon_sym_struct] = ACTIONS(1374),\n    [anon_sym_async] = ACTIONS(1374),\n    [anon_sym_fn] = ACTIONS(1374),\n    [anon_sym_fn_STAR] = ACTIONS(1372),\n    [anon_sym_new] = ACTIONS(1374),\n    [anon_sym_PLUS] = ACTIONS(1374),\n    [anon_sym_DASH] = ACTIONS(1374),\n    [anon_sym_TILDE] = ACTIONS(1372),\n    [anon_sym_void] = ACTIONS(1374),\n    [anon_sym_delete] = ACTIONS(1374),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1372),\n    [anon_sym_DASH_DASH] = ACTIONS(1372),\n    [anon_sym_DQUOTE] = ACTIONS(1372),\n    [anon_sym_SQUOTE] = ACTIONS(1372),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1372),\n    [sym_number] = ACTIONS(1372),\n    [sym_this] = ACTIONS(1374),\n    [sym_super] = ACTIONS(1374),\n    [sym_true] = ACTIONS(1374),\n    [sym_false] = ACTIONS(1374),\n    [sym_null] = ACTIONS(1374),\n    [sym_undefined] = ACTIONS(1374),\n    [anon_sym_AT] = ACTIONS(1372),\n    [anon_sym_static] = ACTIONS(1374),\n    [anon_sym_declare] = ACTIONS(1374),\n    [anon_sym_public] = ACTIONS(1374),\n    [anon_sym_private] = ACTIONS(1374),\n    [anon_sym_protected] = ACTIONS(1374),\n    [anon_sym_override] = ACTIONS(1374),\n    [anon_sym_readonly] = ACTIONS(1374),\n    [anon_sym_module] = ACTIONS(1374),\n    [anon_sym_any] = ACTIONS(1374),\n    [anon_sym_number] = ACTIONS(1374),\n    [anon_sym_int] = ACTIONS(1374),\n    [anon_sym_float] = ACTIONS(1374),\n    [anon_sym_float2] = ACTIONS(1374),\n    [anon_sym_float3] = ACTIONS(1374),\n    [anon_sym_float4] = ACTIONS(1374),\n    [anon_sym_float3x3] = ACTIONS(1374),\n    [anon_sym_float2x2] = ACTIONS(1374),\n    [anon_sym_float4x4] = ACTIONS(1374),\n    [anon_sym_int2] = ACTIONS(1374),\n    [anon_sym_int3] = ACTIONS(1374),\n    [anon_sym_int4] = ACTIONS(1374),\n    [anon_sym_int3x3] = ACTIONS(1374),\n    [anon_sym_int2x2] = ACTIONS(1374),\n    [anon_sym_int4x4] = ACTIONS(1374),\n    [anon_sym_boolean] = ACTIONS(1374),\n    [anon_sym_string] = ACTIONS(1374),\n    [anon_sym_symbol] = ACTIONS(1374),\n    [anon_sym_workgroup] = ACTIONS(1374),\n    [anon_sym_get] = ACTIONS(1374),\n    [anon_sym_set] = ACTIONS(1374),\n    [anon_sym_trait] = ACTIONS(1374),\n    [anon_sym_impl] = ACTIONS(1374),\n    [anon_sym_enum] = ACTIONS(1374),\n    [anon_sym_shader] = ACTIONS(1374),\n  },\n  [564] = {\n    [ts_builtin_sym_end] = ACTIONS(1988),\n    [sym_identifier] = ACTIONS(1990),\n    [anon_sym_pub] = ACTIONS(1990),\n    [anon_sym_export] = ACTIONS(1990),\n    [anon_sym_type] = ACTIONS(1990),\n    [anon_sym_namespace] = ACTIONS(1990),\n    [anon_sym_LBRACE] = ACTIONS(1988),\n    [anon_sym_RBRACE] = ACTIONS(1988),\n    [anon_sym_typeof] = ACTIONS(1990),\n    [anon_sym_import] = ACTIONS(1990),\n    [anon_sym_var] = ACTIONS(1990),\n    [anon_sym_let] = ACTIONS(1990),\n    [anon_sym_const] = ACTIONS(1990),\n    [anon_sym_BANG] = ACTIONS(1988),\n    [anon_sym_else] = ACTIONS(1990),\n    [anon_sym_if] = ACTIONS(1990),\n    [anon_sym_switch] = ACTIONS(1990),\n    [anon_sym_for] = ACTIONS(1990),\n    [anon_sym_LPAREN] = ACTIONS(1988),\n    [anon_sym_await] = ACTIONS(1990),\n    [anon_sym_while] = ACTIONS(1990),\n    [anon_sym_do] = ACTIONS(1990),\n    [anon_sym_try] = ACTIONS(1990),\n    [anon_sym_with] = ACTIONS(1990),\n    [anon_sym_break] = ACTIONS(1990),\n    [anon_sym_continue] = ACTIONS(1990),\n    [anon_sym_debugger] = ACTIONS(1990),\n    [anon_sym_return] = ACTIONS(1990),\n    [anon_sym_throw] = ACTIONS(1990),\n    [anon_sym_SEMI] = ACTIONS(1988),\n    [anon_sym_case] = ACTIONS(1990),\n    [anon_sym_default] = ACTIONS(1990),\n    [anon_sym_yield] = ACTIONS(1990),\n    [anon_sym_LBRACK] = ACTIONS(1988),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1988),\n    [anon_sym_LT] = ACTIONS(1990),\n    [anon_sym_SLASH] = ACTIONS(1990),\n    [anon_sym_struct] = ACTIONS(1990),\n    [anon_sym_async] = ACTIONS(1990),\n    [anon_sym_fn] = ACTIONS(1990),\n    [anon_sym_fn_STAR] = ACTIONS(1988),\n    [anon_sym_new] = ACTIONS(1990),\n    [anon_sym_PLUS] = ACTIONS(1990),\n    [anon_sym_DASH] = ACTIONS(1990),\n    [anon_sym_TILDE] = ACTIONS(1988),\n    [anon_sym_void] = ACTIONS(1990),\n    [anon_sym_delete] = ACTIONS(1990),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1988),\n    [anon_sym_DASH_DASH] = ACTIONS(1988),\n    [anon_sym_DQUOTE] = ACTIONS(1988),\n    [anon_sym_SQUOTE] = ACTIONS(1988),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1988),\n    [sym_number] = ACTIONS(1988),\n    [sym_this] = ACTIONS(1990),\n    [sym_super] = ACTIONS(1990),\n    [sym_true] = ACTIONS(1990),\n    [sym_false] = ACTIONS(1990),\n    [sym_null] = ACTIONS(1990),\n    [sym_undefined] = ACTIONS(1990),\n    [anon_sym_AT] = ACTIONS(1988),\n    [anon_sym_static] = ACTIONS(1990),\n    [anon_sym_declare] = ACTIONS(1990),\n    [anon_sym_public] = ACTIONS(1990),\n    [anon_sym_private] = ACTIONS(1990),\n    [anon_sym_protected] = ACTIONS(1990),\n    [anon_sym_override] = ACTIONS(1990),\n    [anon_sym_readonly] = ACTIONS(1990),\n    [anon_sym_module] = ACTIONS(1990),\n    [anon_sym_any] = ACTIONS(1990),\n    [anon_sym_number] = ACTIONS(1990),\n    [anon_sym_int] = ACTIONS(1990),\n    [anon_sym_float] = ACTIONS(1990),\n    [anon_sym_float2] = ACTIONS(1990),\n    [anon_sym_float3] = ACTIONS(1990),\n    [anon_sym_float4] = ACTIONS(1990),\n    [anon_sym_float3x3] = ACTIONS(1990),\n    [anon_sym_float2x2] = ACTIONS(1990),\n    [anon_sym_float4x4] = ACTIONS(1990),\n    [anon_sym_int2] = ACTIONS(1990),\n    [anon_sym_int3] = ACTIONS(1990),\n    [anon_sym_int4] = ACTIONS(1990),\n    [anon_sym_int3x3] = ACTIONS(1990),\n    [anon_sym_int2x2] = ACTIONS(1990),\n    [anon_sym_int4x4] = ACTIONS(1990),\n    [anon_sym_boolean] = ACTIONS(1990),\n    [anon_sym_string] = ACTIONS(1990),\n    [anon_sym_symbol] = ACTIONS(1990),\n    [anon_sym_workgroup] = ACTIONS(1990),\n    [anon_sym_get] = ACTIONS(1990),\n    [anon_sym_set] = ACTIONS(1990),\n    [anon_sym_trait] = ACTIONS(1990),\n    [anon_sym_impl] = ACTIONS(1990),\n    [anon_sym_enum] = ACTIONS(1990),\n    [anon_sym_shader] = ACTIONS(1990),\n  },\n  [565] = {\n    [ts_builtin_sym_end] = ACTIONS(1992),\n    [sym_identifier] = ACTIONS(1994),\n    [anon_sym_pub] = ACTIONS(1994),\n    [anon_sym_export] = ACTIONS(1994),\n    [anon_sym_type] = ACTIONS(1994),\n    [anon_sym_namespace] = ACTIONS(1994),\n    [anon_sym_LBRACE] = ACTIONS(1992),\n    [anon_sym_RBRACE] = ACTIONS(1992),\n    [anon_sym_typeof] = ACTIONS(1994),\n    [anon_sym_import] = ACTIONS(1994),\n    [anon_sym_var] = ACTIONS(1994),\n    [anon_sym_let] = ACTIONS(1994),\n    [anon_sym_const] = ACTIONS(1994),\n    [anon_sym_BANG] = ACTIONS(1992),\n    [anon_sym_else] = ACTIONS(1994),\n    [anon_sym_if] = ACTIONS(1994),\n    [anon_sym_switch] = ACTIONS(1994),\n    [anon_sym_for] = ACTIONS(1994),\n    [anon_sym_LPAREN] = ACTIONS(1992),\n    [anon_sym_await] = ACTIONS(1994),\n    [anon_sym_while] = ACTIONS(1994),\n    [anon_sym_do] = ACTIONS(1994),\n    [anon_sym_try] = ACTIONS(1994),\n    [anon_sym_with] = ACTIONS(1994),\n    [anon_sym_break] = ACTIONS(1994),\n    [anon_sym_continue] = ACTIONS(1994),\n    [anon_sym_debugger] = ACTIONS(1994),\n    [anon_sym_return] = ACTIONS(1994),\n    [anon_sym_throw] = ACTIONS(1994),\n    [anon_sym_SEMI] = ACTIONS(1992),\n    [anon_sym_case] = ACTIONS(1994),\n    [anon_sym_default] = ACTIONS(1994),\n    [anon_sym_yield] = ACTIONS(1994),\n    [anon_sym_LBRACK] = ACTIONS(1992),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1992),\n    [anon_sym_LT] = ACTIONS(1994),\n    [anon_sym_SLASH] = ACTIONS(1994),\n    [anon_sym_struct] = ACTIONS(1994),\n    [anon_sym_async] = ACTIONS(1994),\n    [anon_sym_fn] = ACTIONS(1994),\n    [anon_sym_fn_STAR] = ACTIONS(1992),\n    [anon_sym_new] = ACTIONS(1994),\n    [anon_sym_PLUS] = ACTIONS(1994),\n    [anon_sym_DASH] = ACTIONS(1994),\n    [anon_sym_TILDE] = ACTIONS(1992),\n    [anon_sym_void] = ACTIONS(1994),\n    [anon_sym_delete] = ACTIONS(1994),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1992),\n    [anon_sym_DASH_DASH] = ACTIONS(1992),\n    [anon_sym_DQUOTE] = ACTIONS(1992),\n    [anon_sym_SQUOTE] = ACTIONS(1992),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1992),\n    [sym_number] = ACTIONS(1992),\n    [sym_this] = ACTIONS(1994),\n    [sym_super] = ACTIONS(1994),\n    [sym_true] = ACTIONS(1994),\n    [sym_false] = ACTIONS(1994),\n    [sym_null] = ACTIONS(1994),\n    [sym_undefined] = ACTIONS(1994),\n    [anon_sym_AT] = ACTIONS(1992),\n    [anon_sym_static] = ACTIONS(1994),\n    [anon_sym_declare] = ACTIONS(1994),\n    [anon_sym_public] = ACTIONS(1994),\n    [anon_sym_private] = ACTIONS(1994),\n    [anon_sym_protected] = ACTIONS(1994),\n    [anon_sym_override] = ACTIONS(1994),\n    [anon_sym_readonly] = ACTIONS(1994),\n    [anon_sym_module] = ACTIONS(1994),\n    [anon_sym_any] = ACTIONS(1994),\n    [anon_sym_number] = ACTIONS(1994),\n    [anon_sym_int] = ACTIONS(1994),\n    [anon_sym_float] = ACTIONS(1994),\n    [anon_sym_float2] = ACTIONS(1994),\n    [anon_sym_float3] = ACTIONS(1994),\n    [anon_sym_float4] = ACTIONS(1994),\n    [anon_sym_float3x3] = ACTIONS(1994),\n    [anon_sym_float2x2] = ACTIONS(1994),\n    [anon_sym_float4x4] = ACTIONS(1994),\n    [anon_sym_int2] = ACTIONS(1994),\n    [anon_sym_int3] = ACTIONS(1994),\n    [anon_sym_int4] = ACTIONS(1994),\n    [anon_sym_int3x3] = ACTIONS(1994),\n    [anon_sym_int2x2] = ACTIONS(1994),\n    [anon_sym_int4x4] = ACTIONS(1994),\n    [anon_sym_boolean] = ACTIONS(1994),\n    [anon_sym_string] = ACTIONS(1994),\n    [anon_sym_symbol] = ACTIONS(1994),\n    [anon_sym_workgroup] = ACTIONS(1994),\n    [anon_sym_get] = ACTIONS(1994),\n    [anon_sym_set] = ACTIONS(1994),\n    [anon_sym_trait] = ACTIONS(1994),\n    [anon_sym_impl] = ACTIONS(1994),\n    [anon_sym_enum] = ACTIONS(1994),\n    [anon_sym_shader] = ACTIONS(1994),\n  },\n  [566] = {\n    [ts_builtin_sym_end] = ACTIONS(1996),\n    [sym_identifier] = ACTIONS(1998),\n    [anon_sym_pub] = ACTIONS(1998),\n    [anon_sym_export] = ACTIONS(1998),\n    [anon_sym_type] = ACTIONS(1998),\n    [anon_sym_namespace] = ACTIONS(1998),\n    [anon_sym_LBRACE] = ACTIONS(1996),\n    [anon_sym_RBRACE] = ACTIONS(1996),\n    [anon_sym_typeof] = ACTIONS(1998),\n    [anon_sym_import] = ACTIONS(1998),\n    [anon_sym_var] = ACTIONS(1998),\n    [anon_sym_let] = ACTIONS(1998),\n    [anon_sym_const] = ACTIONS(1998),\n    [anon_sym_BANG] = ACTIONS(1996),\n    [anon_sym_else] = ACTIONS(1998),\n    [anon_sym_if] = ACTIONS(1998),\n    [anon_sym_switch] = ACTIONS(1998),\n    [anon_sym_for] = ACTIONS(1998),\n    [anon_sym_LPAREN] = ACTIONS(1996),\n    [anon_sym_await] = ACTIONS(1998),\n    [anon_sym_while] = ACTIONS(1998),\n    [anon_sym_do] = ACTIONS(1998),\n    [anon_sym_try] = ACTIONS(1998),\n    [anon_sym_with] = ACTIONS(1998),\n    [anon_sym_break] = ACTIONS(1998),\n    [anon_sym_continue] = ACTIONS(1998),\n    [anon_sym_debugger] = ACTIONS(1998),\n    [anon_sym_return] = ACTIONS(1998),\n    [anon_sym_throw] = ACTIONS(1998),\n    [anon_sym_SEMI] = ACTIONS(1996),\n    [anon_sym_case] = ACTIONS(1998),\n    [anon_sym_default] = ACTIONS(1998),\n    [anon_sym_yield] = ACTIONS(1998),\n    [anon_sym_LBRACK] = ACTIONS(1996),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1996),\n    [anon_sym_LT] = ACTIONS(1998),\n    [anon_sym_SLASH] = ACTIONS(1998),\n    [anon_sym_struct] = ACTIONS(1998),\n    [anon_sym_async] = ACTIONS(1998),\n    [anon_sym_fn] = ACTIONS(1998),\n    [anon_sym_fn_STAR] = ACTIONS(1996),\n    [anon_sym_new] = ACTIONS(1998),\n    [anon_sym_PLUS] = ACTIONS(1998),\n    [anon_sym_DASH] = ACTIONS(1998),\n    [anon_sym_TILDE] = ACTIONS(1996),\n    [anon_sym_void] = ACTIONS(1998),\n    [anon_sym_delete] = ACTIONS(1998),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1996),\n    [anon_sym_DASH_DASH] = ACTIONS(1996),\n    [anon_sym_DQUOTE] = ACTIONS(1996),\n    [anon_sym_SQUOTE] = ACTIONS(1996),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1996),\n    [sym_number] = ACTIONS(1996),\n    [sym_this] = ACTIONS(1998),\n    [sym_super] = ACTIONS(1998),\n    [sym_true] = ACTIONS(1998),\n    [sym_false] = ACTIONS(1998),\n    [sym_null] = ACTIONS(1998),\n    [sym_undefined] = ACTIONS(1998),\n    [anon_sym_AT] = ACTIONS(1996),\n    [anon_sym_static] = ACTIONS(1998),\n    [anon_sym_declare] = ACTIONS(1998),\n    [anon_sym_public] = ACTIONS(1998),\n    [anon_sym_private] = ACTIONS(1998),\n    [anon_sym_protected] = ACTIONS(1998),\n    [anon_sym_override] = ACTIONS(1998),\n    [anon_sym_readonly] = ACTIONS(1998),\n    [anon_sym_module] = ACTIONS(1998),\n    [anon_sym_any] = ACTIONS(1998),\n    [anon_sym_number] = ACTIONS(1998),\n    [anon_sym_int] = ACTIONS(1998),\n    [anon_sym_float] = ACTIONS(1998),\n    [anon_sym_float2] = ACTIONS(1998),\n    [anon_sym_float3] = ACTIONS(1998),\n    [anon_sym_float4] = ACTIONS(1998),\n    [anon_sym_float3x3] = ACTIONS(1998),\n    [anon_sym_float2x2] = ACTIONS(1998),\n    [anon_sym_float4x4] = ACTIONS(1998),\n    [anon_sym_int2] = ACTIONS(1998),\n    [anon_sym_int3] = ACTIONS(1998),\n    [anon_sym_int4] = ACTIONS(1998),\n    [anon_sym_int3x3] = ACTIONS(1998),\n    [anon_sym_int2x2] = ACTIONS(1998),\n    [anon_sym_int4x4] = ACTIONS(1998),\n    [anon_sym_boolean] = ACTIONS(1998),\n    [anon_sym_string] = ACTIONS(1998),\n    [anon_sym_symbol] = ACTIONS(1998),\n    [anon_sym_workgroup] = ACTIONS(1998),\n    [anon_sym_get] = ACTIONS(1998),\n    [anon_sym_set] = ACTIONS(1998),\n    [anon_sym_trait] = ACTIONS(1998),\n    [anon_sym_impl] = ACTIONS(1998),\n    [anon_sym_enum] = ACTIONS(1998),\n    [anon_sym_shader] = ACTIONS(1998),\n  },\n  [567] = {\n    [ts_builtin_sym_end] = ACTIONS(2000),\n    [sym_identifier] = ACTIONS(2002),\n    [anon_sym_pub] = ACTIONS(2002),\n    [anon_sym_export] = ACTIONS(2002),\n    [anon_sym_type] = ACTIONS(2002),\n    [anon_sym_namespace] = ACTIONS(2002),\n    [anon_sym_LBRACE] = ACTIONS(2000),\n    [anon_sym_RBRACE] = ACTIONS(2000),\n    [anon_sym_typeof] = ACTIONS(2002),\n    [anon_sym_import] = ACTIONS(2002),\n    [anon_sym_var] = ACTIONS(2002),\n    [anon_sym_let] = ACTIONS(2002),\n    [anon_sym_const] = ACTIONS(2002),\n    [anon_sym_BANG] = ACTIONS(2000),\n    [anon_sym_else] = ACTIONS(2002),\n    [anon_sym_if] = ACTIONS(2002),\n    [anon_sym_switch] = ACTIONS(2002),\n    [anon_sym_for] = ACTIONS(2002),\n    [anon_sym_LPAREN] = ACTIONS(2000),\n    [anon_sym_await] = ACTIONS(2002),\n    [anon_sym_while] = ACTIONS(2002),\n    [anon_sym_do] = ACTIONS(2002),\n    [anon_sym_try] = ACTIONS(2002),\n    [anon_sym_with] = ACTIONS(2002),\n    [anon_sym_break] = ACTIONS(2002),\n    [anon_sym_continue] = ACTIONS(2002),\n    [anon_sym_debugger] = ACTIONS(2002),\n    [anon_sym_return] = ACTIONS(2002),\n    [anon_sym_throw] = ACTIONS(2002),\n    [anon_sym_SEMI] = ACTIONS(2000),\n    [anon_sym_case] = ACTIONS(2002),\n    [anon_sym_default] = ACTIONS(2002),\n    [anon_sym_yield] = ACTIONS(2002),\n    [anon_sym_LBRACK] = ACTIONS(2000),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2000),\n    [anon_sym_LT] = ACTIONS(2002),\n    [anon_sym_SLASH] = ACTIONS(2002),\n    [anon_sym_struct] = ACTIONS(2002),\n    [anon_sym_async] = ACTIONS(2002),\n    [anon_sym_fn] = ACTIONS(2002),\n    [anon_sym_fn_STAR] = ACTIONS(2000),\n    [anon_sym_new] = ACTIONS(2002),\n    [anon_sym_PLUS] = ACTIONS(2002),\n    [anon_sym_DASH] = ACTIONS(2002),\n    [anon_sym_TILDE] = ACTIONS(2000),\n    [anon_sym_void] = ACTIONS(2002),\n    [anon_sym_delete] = ACTIONS(2002),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2000),\n    [anon_sym_DASH_DASH] = ACTIONS(2000),\n    [anon_sym_DQUOTE] = ACTIONS(2000),\n    [anon_sym_SQUOTE] = ACTIONS(2000),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2000),\n    [sym_number] = ACTIONS(2000),\n    [sym_this] = ACTIONS(2002),\n    [sym_super] = ACTIONS(2002),\n    [sym_true] = ACTIONS(2002),\n    [sym_false] = ACTIONS(2002),\n    [sym_null] = ACTIONS(2002),\n    [sym_undefined] = ACTIONS(2002),\n    [anon_sym_AT] = ACTIONS(2000),\n    [anon_sym_static] = ACTIONS(2002),\n    [anon_sym_declare] = ACTIONS(2002),\n    [anon_sym_public] = ACTIONS(2002),\n    [anon_sym_private] = ACTIONS(2002),\n    [anon_sym_protected] = ACTIONS(2002),\n    [anon_sym_override] = ACTIONS(2002),\n    [anon_sym_readonly] = ACTIONS(2002),\n    [anon_sym_module] = ACTIONS(2002),\n    [anon_sym_any] = ACTIONS(2002),\n    [anon_sym_number] = ACTIONS(2002),\n    [anon_sym_int] = ACTIONS(2002),\n    [anon_sym_float] = ACTIONS(2002),\n    [anon_sym_float2] = ACTIONS(2002),\n    [anon_sym_float3] = ACTIONS(2002),\n    [anon_sym_float4] = ACTIONS(2002),\n    [anon_sym_float3x3] = ACTIONS(2002),\n    [anon_sym_float2x2] = ACTIONS(2002),\n    [anon_sym_float4x4] = ACTIONS(2002),\n    [anon_sym_int2] = ACTIONS(2002),\n    [anon_sym_int3] = ACTIONS(2002),\n    [anon_sym_int4] = ACTIONS(2002),\n    [anon_sym_int3x3] = ACTIONS(2002),\n    [anon_sym_int2x2] = ACTIONS(2002),\n    [anon_sym_int4x4] = ACTIONS(2002),\n    [anon_sym_boolean] = ACTIONS(2002),\n    [anon_sym_string] = ACTIONS(2002),\n    [anon_sym_symbol] = ACTIONS(2002),\n    [anon_sym_workgroup] = ACTIONS(2002),\n    [anon_sym_get] = ACTIONS(2002),\n    [anon_sym_set] = ACTIONS(2002),\n    [anon_sym_trait] = ACTIONS(2002),\n    [anon_sym_impl] = ACTIONS(2002),\n    [anon_sym_enum] = ACTIONS(2002),\n    [anon_sym_shader] = ACTIONS(2002),\n  },\n  [568] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [569] = {\n    [ts_builtin_sym_end] = ACTIONS(1332),\n    [sym_identifier] = ACTIONS(1334),\n    [anon_sym_pub] = ACTIONS(1334),\n    [anon_sym_export] = ACTIONS(1334),\n    [anon_sym_type] = ACTIONS(1334),\n    [anon_sym_namespace] = ACTIONS(1334),\n    [anon_sym_LBRACE] = ACTIONS(1332),\n    [anon_sym_RBRACE] = ACTIONS(1332),\n    [anon_sym_typeof] = ACTIONS(1334),\n    [anon_sym_import] = ACTIONS(1334),\n    [anon_sym_var] = ACTIONS(1334),\n    [anon_sym_let] = ACTIONS(1334),\n    [anon_sym_const] = ACTIONS(1334),\n    [anon_sym_BANG] = ACTIONS(1332),\n    [anon_sym_else] = ACTIONS(1334),\n    [anon_sym_if] = ACTIONS(1334),\n    [anon_sym_switch] = ACTIONS(1334),\n    [anon_sym_for] = ACTIONS(1334),\n    [anon_sym_LPAREN] = ACTIONS(1332),\n    [anon_sym_await] = ACTIONS(1334),\n    [anon_sym_while] = ACTIONS(1334),\n    [anon_sym_do] = ACTIONS(1334),\n    [anon_sym_try] = ACTIONS(1334),\n    [anon_sym_with] = ACTIONS(1334),\n    [anon_sym_break] = ACTIONS(1334),\n    [anon_sym_continue] = ACTIONS(1334),\n    [anon_sym_debugger] = ACTIONS(1334),\n    [anon_sym_return] = ACTIONS(1334),\n    [anon_sym_throw] = ACTIONS(1334),\n    [anon_sym_SEMI] = ACTIONS(1332),\n    [anon_sym_case] = ACTIONS(1334),\n    [anon_sym_default] = ACTIONS(1334),\n    [anon_sym_yield] = ACTIONS(1334),\n    [anon_sym_LBRACK] = ACTIONS(1332),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1332),\n    [anon_sym_LT] = ACTIONS(1334),\n    [anon_sym_SLASH] = ACTIONS(1334),\n    [anon_sym_struct] = ACTIONS(1334),\n    [anon_sym_async] = ACTIONS(1334),\n    [anon_sym_fn] = ACTIONS(1334),\n    [anon_sym_fn_STAR] = ACTIONS(1332),\n    [anon_sym_new] = ACTIONS(1334),\n    [anon_sym_PLUS] = ACTIONS(1334),\n    [anon_sym_DASH] = ACTIONS(1334),\n    [anon_sym_TILDE] = ACTIONS(1332),\n    [anon_sym_void] = ACTIONS(1334),\n    [anon_sym_delete] = ACTIONS(1334),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1332),\n    [anon_sym_DASH_DASH] = ACTIONS(1332),\n    [anon_sym_DQUOTE] = ACTIONS(1332),\n    [anon_sym_SQUOTE] = ACTIONS(1332),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1332),\n    [sym_number] = ACTIONS(1332),\n    [sym_this] = ACTIONS(1334),\n    [sym_super] = ACTIONS(1334),\n    [sym_true] = ACTIONS(1334),\n    [sym_false] = ACTIONS(1334),\n    [sym_null] = ACTIONS(1334),\n    [sym_undefined] = ACTIONS(1334),\n    [anon_sym_AT] = ACTIONS(1332),\n    [anon_sym_static] = ACTIONS(1334),\n    [anon_sym_declare] = ACTIONS(1334),\n    [anon_sym_public] = ACTIONS(1334),\n    [anon_sym_private] = ACTIONS(1334),\n    [anon_sym_protected] = ACTIONS(1334),\n    [anon_sym_override] = ACTIONS(1334),\n    [anon_sym_readonly] = ACTIONS(1334),\n    [anon_sym_module] = ACTIONS(1334),\n    [anon_sym_any] = ACTIONS(1334),\n    [anon_sym_number] = ACTIONS(1334),\n    [anon_sym_int] = ACTIONS(1334),\n    [anon_sym_float] = ACTIONS(1334),\n    [anon_sym_float2] = ACTIONS(1334),\n    [anon_sym_float3] = ACTIONS(1334),\n    [anon_sym_float4] = ACTIONS(1334),\n    [anon_sym_float3x3] = ACTIONS(1334),\n    [anon_sym_float2x2] = ACTIONS(1334),\n    [anon_sym_float4x4] = ACTIONS(1334),\n    [anon_sym_int2] = ACTIONS(1334),\n    [anon_sym_int3] = ACTIONS(1334),\n    [anon_sym_int4] = ACTIONS(1334),\n    [anon_sym_int3x3] = ACTIONS(1334),\n    [anon_sym_int2x2] = ACTIONS(1334),\n    [anon_sym_int4x4] = ACTIONS(1334),\n    [anon_sym_boolean] = ACTIONS(1334),\n    [anon_sym_string] = ACTIONS(1334),\n    [anon_sym_symbol] = ACTIONS(1334),\n    [anon_sym_workgroup] = ACTIONS(1334),\n    [anon_sym_get] = ACTIONS(1334),\n    [anon_sym_set] = ACTIONS(1334),\n    [anon_sym_trait] = ACTIONS(1334),\n    [anon_sym_impl] = ACTIONS(1334),\n    [anon_sym_enum] = ACTIONS(1334),\n    [anon_sym_shader] = ACTIONS(1334),\n  },\n  [570] = {\n    [ts_builtin_sym_end] = ACTIONS(2004),\n    [sym_identifier] = ACTIONS(2006),\n    [anon_sym_pub] = ACTIONS(2006),\n    [anon_sym_export] = ACTIONS(2006),\n    [anon_sym_type] = ACTIONS(2006),\n    [anon_sym_namespace] = ACTIONS(2006),\n    [anon_sym_LBRACE] = ACTIONS(2004),\n    [anon_sym_RBRACE] = ACTIONS(2004),\n    [anon_sym_typeof] = ACTIONS(2006),\n    [anon_sym_import] = ACTIONS(2006),\n    [anon_sym_var] = ACTIONS(2006),\n    [anon_sym_let] = ACTIONS(2006),\n    [anon_sym_const] = ACTIONS(2006),\n    [anon_sym_BANG] = ACTIONS(2004),\n    [anon_sym_else] = ACTIONS(2006),\n    [anon_sym_if] = ACTIONS(2006),\n    [anon_sym_switch] = ACTIONS(2006),\n    [anon_sym_for] = ACTIONS(2006),\n    [anon_sym_LPAREN] = ACTIONS(2004),\n    [anon_sym_await] = ACTIONS(2006),\n    [anon_sym_while] = ACTIONS(2006),\n    [anon_sym_do] = ACTIONS(2006),\n    [anon_sym_try] = ACTIONS(2006),\n    [anon_sym_with] = ACTIONS(2006),\n    [anon_sym_break] = ACTIONS(2006),\n    [anon_sym_continue] = ACTIONS(2006),\n    [anon_sym_debugger] = ACTIONS(2006),\n    [anon_sym_return] = ACTIONS(2006),\n    [anon_sym_throw] = ACTIONS(2006),\n    [anon_sym_SEMI] = ACTIONS(2004),\n    [anon_sym_case] = ACTIONS(2006),\n    [anon_sym_default] = ACTIONS(2006),\n    [anon_sym_yield] = ACTIONS(2006),\n    [anon_sym_LBRACK] = ACTIONS(2004),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2004),\n    [anon_sym_LT] = ACTIONS(2006),\n    [anon_sym_SLASH] = ACTIONS(2006),\n    [anon_sym_struct] = ACTIONS(2006),\n    [anon_sym_async] = ACTIONS(2006),\n    [anon_sym_fn] = ACTIONS(2006),\n    [anon_sym_fn_STAR] = ACTIONS(2004),\n    [anon_sym_new] = ACTIONS(2006),\n    [anon_sym_PLUS] = ACTIONS(2006),\n    [anon_sym_DASH] = ACTIONS(2006),\n    [anon_sym_TILDE] = ACTIONS(2004),\n    [anon_sym_void] = ACTIONS(2006),\n    [anon_sym_delete] = ACTIONS(2006),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2004),\n    [anon_sym_DASH_DASH] = ACTIONS(2004),\n    [anon_sym_DQUOTE] = ACTIONS(2004),\n    [anon_sym_SQUOTE] = ACTIONS(2004),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2004),\n    [sym_number] = ACTIONS(2004),\n    [sym_this] = ACTIONS(2006),\n    [sym_super] = ACTIONS(2006),\n    [sym_true] = ACTIONS(2006),\n    [sym_false] = ACTIONS(2006),\n    [sym_null] = ACTIONS(2006),\n    [sym_undefined] = ACTIONS(2006),\n    [anon_sym_AT] = ACTIONS(2004),\n    [anon_sym_static] = ACTIONS(2006),\n    [anon_sym_declare] = ACTIONS(2006),\n    [anon_sym_public] = ACTIONS(2006),\n    [anon_sym_private] = ACTIONS(2006),\n    [anon_sym_protected] = ACTIONS(2006),\n    [anon_sym_override] = ACTIONS(2006),\n    [anon_sym_readonly] = ACTIONS(2006),\n    [anon_sym_module] = ACTIONS(2006),\n    [anon_sym_any] = ACTIONS(2006),\n    [anon_sym_number] = ACTIONS(2006),\n    [anon_sym_int] = ACTIONS(2006),\n    [anon_sym_float] = ACTIONS(2006),\n    [anon_sym_float2] = ACTIONS(2006),\n    [anon_sym_float3] = ACTIONS(2006),\n    [anon_sym_float4] = ACTIONS(2006),\n    [anon_sym_float3x3] = ACTIONS(2006),\n    [anon_sym_float2x2] = ACTIONS(2006),\n    [anon_sym_float4x4] = ACTIONS(2006),\n    [anon_sym_int2] = ACTIONS(2006),\n    [anon_sym_int3] = ACTIONS(2006),\n    [anon_sym_int4] = ACTIONS(2006),\n    [anon_sym_int3x3] = ACTIONS(2006),\n    [anon_sym_int2x2] = ACTIONS(2006),\n    [anon_sym_int4x4] = ACTIONS(2006),\n    [anon_sym_boolean] = ACTIONS(2006),\n    [anon_sym_string] = ACTIONS(2006),\n    [anon_sym_symbol] = ACTIONS(2006),\n    [anon_sym_workgroup] = ACTIONS(2006),\n    [anon_sym_get] = ACTIONS(2006),\n    [anon_sym_set] = ACTIONS(2006),\n    [anon_sym_trait] = ACTIONS(2006),\n    [anon_sym_impl] = ACTIONS(2006),\n    [anon_sym_enum] = ACTIONS(2006),\n    [anon_sym_shader] = ACTIONS(2006),\n  },\n  [571] = {\n    [ts_builtin_sym_end] = ACTIONS(2004),\n    [sym_identifier] = ACTIONS(2006),\n    [anon_sym_pub] = ACTIONS(2006),\n    [anon_sym_export] = ACTIONS(2006),\n    [anon_sym_type] = ACTIONS(2006),\n    [anon_sym_namespace] = ACTIONS(2006),\n    [anon_sym_LBRACE] = ACTIONS(2004),\n    [anon_sym_RBRACE] = ACTIONS(2004),\n    [anon_sym_typeof] = ACTIONS(2006),\n    [anon_sym_import] = ACTIONS(2006),\n    [anon_sym_var] = ACTIONS(2006),\n    [anon_sym_let] = ACTIONS(2006),\n    [anon_sym_const] = ACTIONS(2006),\n    [anon_sym_BANG] = ACTIONS(2004),\n    [anon_sym_else] = ACTIONS(2006),\n    [anon_sym_if] = ACTIONS(2006),\n    [anon_sym_switch] = ACTIONS(2006),\n    [anon_sym_for] = ACTIONS(2006),\n    [anon_sym_LPAREN] = ACTIONS(2004),\n    [anon_sym_await] = ACTIONS(2006),\n    [anon_sym_while] = ACTIONS(2006),\n    [anon_sym_do] = ACTIONS(2006),\n    [anon_sym_try] = ACTIONS(2006),\n    [anon_sym_with] = ACTIONS(2006),\n    [anon_sym_break] = ACTIONS(2006),\n    [anon_sym_continue] = ACTIONS(2006),\n    [anon_sym_debugger] = ACTIONS(2006),\n    [anon_sym_return] = ACTIONS(2006),\n    [anon_sym_throw] = ACTIONS(2006),\n    [anon_sym_SEMI] = ACTIONS(2004),\n    [anon_sym_case] = ACTIONS(2006),\n    [anon_sym_default] = ACTIONS(2006),\n    [anon_sym_yield] = ACTIONS(2006),\n    [anon_sym_LBRACK] = ACTIONS(2004),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2004),\n    [anon_sym_LT] = ACTIONS(2006),\n    [anon_sym_SLASH] = ACTIONS(2006),\n    [anon_sym_struct] = ACTIONS(2006),\n    [anon_sym_async] = ACTIONS(2006),\n    [anon_sym_fn] = ACTIONS(2006),\n    [anon_sym_fn_STAR] = ACTIONS(2004),\n    [anon_sym_new] = ACTIONS(2006),\n    [anon_sym_PLUS] = ACTIONS(2006),\n    [anon_sym_DASH] = ACTIONS(2006),\n    [anon_sym_TILDE] = ACTIONS(2004),\n    [anon_sym_void] = ACTIONS(2006),\n    [anon_sym_delete] = ACTIONS(2006),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2004),\n    [anon_sym_DASH_DASH] = ACTIONS(2004),\n    [anon_sym_DQUOTE] = ACTIONS(2004),\n    [anon_sym_SQUOTE] = ACTIONS(2004),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2004),\n    [sym_number] = ACTIONS(2004),\n    [sym_this] = ACTIONS(2006),\n    [sym_super] = ACTIONS(2006),\n    [sym_true] = ACTIONS(2006),\n    [sym_false] = ACTIONS(2006),\n    [sym_null] = ACTIONS(2006),\n    [sym_undefined] = ACTIONS(2006),\n    [anon_sym_AT] = ACTIONS(2004),\n    [anon_sym_static] = ACTIONS(2006),\n    [anon_sym_declare] = ACTIONS(2006),\n    [anon_sym_public] = ACTIONS(2006),\n    [anon_sym_private] = ACTIONS(2006),\n    [anon_sym_protected] = ACTIONS(2006),\n    [anon_sym_override] = ACTIONS(2006),\n    [anon_sym_readonly] = ACTIONS(2006),\n    [anon_sym_module] = ACTIONS(2006),\n    [anon_sym_any] = ACTIONS(2006),\n    [anon_sym_number] = ACTIONS(2006),\n    [anon_sym_int] = ACTIONS(2006),\n    [anon_sym_float] = ACTIONS(2006),\n    [anon_sym_float2] = ACTIONS(2006),\n    [anon_sym_float3] = ACTIONS(2006),\n    [anon_sym_float4] = ACTIONS(2006),\n    [anon_sym_float3x3] = ACTIONS(2006),\n    [anon_sym_float2x2] = ACTIONS(2006),\n    [anon_sym_float4x4] = ACTIONS(2006),\n    [anon_sym_int2] = ACTIONS(2006),\n    [anon_sym_int3] = ACTIONS(2006),\n    [anon_sym_int4] = ACTIONS(2006),\n    [anon_sym_int3x3] = ACTIONS(2006),\n    [anon_sym_int2x2] = ACTIONS(2006),\n    [anon_sym_int4x4] = ACTIONS(2006),\n    [anon_sym_boolean] = ACTIONS(2006),\n    [anon_sym_string] = ACTIONS(2006),\n    [anon_sym_symbol] = ACTIONS(2006),\n    [anon_sym_workgroup] = ACTIONS(2006),\n    [anon_sym_get] = ACTIONS(2006),\n    [anon_sym_set] = ACTIONS(2006),\n    [anon_sym_trait] = ACTIONS(2006),\n    [anon_sym_impl] = ACTIONS(2006),\n    [anon_sym_enum] = ACTIONS(2006),\n    [anon_sym_shader] = ACTIONS(2006),\n  },\n  [572] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [573] = {\n    [ts_builtin_sym_end] = ACTIONS(2008),\n    [sym_identifier] = ACTIONS(2010),\n    [anon_sym_pub] = ACTIONS(2010),\n    [anon_sym_export] = ACTIONS(2010),\n    [anon_sym_type] = ACTIONS(2010),\n    [anon_sym_namespace] = ACTIONS(2010),\n    [anon_sym_LBRACE] = ACTIONS(2008),\n    [anon_sym_RBRACE] = ACTIONS(2008),\n    [anon_sym_typeof] = ACTIONS(2010),\n    [anon_sym_import] = ACTIONS(2010),\n    [anon_sym_var] = ACTIONS(2010),\n    [anon_sym_let] = ACTIONS(2010),\n    [anon_sym_const] = ACTIONS(2010),\n    [anon_sym_BANG] = ACTIONS(2008),\n    [anon_sym_else] = ACTIONS(2010),\n    [anon_sym_if] = ACTIONS(2010),\n    [anon_sym_switch] = ACTIONS(2010),\n    [anon_sym_for] = ACTIONS(2010),\n    [anon_sym_LPAREN] = ACTIONS(2008),\n    [anon_sym_await] = ACTIONS(2010),\n    [anon_sym_while] = ACTIONS(2010),\n    [anon_sym_do] = ACTIONS(2010),\n    [anon_sym_try] = ACTIONS(2010),\n    [anon_sym_with] = ACTIONS(2010),\n    [anon_sym_break] = ACTIONS(2010),\n    [anon_sym_continue] = ACTIONS(2010),\n    [anon_sym_debugger] = ACTIONS(2010),\n    [anon_sym_return] = ACTIONS(2010),\n    [anon_sym_throw] = ACTIONS(2010),\n    [anon_sym_SEMI] = ACTIONS(2008),\n    [anon_sym_case] = ACTIONS(2010),\n    [anon_sym_default] = ACTIONS(2010),\n    [anon_sym_yield] = ACTIONS(2010),\n    [anon_sym_LBRACK] = ACTIONS(2008),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2008),\n    [anon_sym_LT] = ACTIONS(2010),\n    [anon_sym_SLASH] = ACTIONS(2010),\n    [anon_sym_struct] = ACTIONS(2010),\n    [anon_sym_async] = ACTIONS(2010),\n    [anon_sym_fn] = ACTIONS(2010),\n    [anon_sym_fn_STAR] = ACTIONS(2008),\n    [anon_sym_new] = ACTIONS(2010),\n    [anon_sym_PLUS] = ACTIONS(2010),\n    [anon_sym_DASH] = ACTIONS(2010),\n    [anon_sym_TILDE] = ACTIONS(2008),\n    [anon_sym_void] = ACTIONS(2010),\n    [anon_sym_delete] = ACTIONS(2010),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2008),\n    [anon_sym_DASH_DASH] = ACTIONS(2008),\n    [anon_sym_DQUOTE] = ACTIONS(2008),\n    [anon_sym_SQUOTE] = ACTIONS(2008),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2008),\n    [sym_number] = ACTIONS(2008),\n    [sym_this] = ACTIONS(2010),\n    [sym_super] = ACTIONS(2010),\n    [sym_true] = ACTIONS(2010),\n    [sym_false] = ACTIONS(2010),\n    [sym_null] = ACTIONS(2010),\n    [sym_undefined] = ACTIONS(2010),\n    [anon_sym_AT] = ACTIONS(2008),\n    [anon_sym_static] = ACTIONS(2010),\n    [anon_sym_declare] = ACTIONS(2010),\n    [anon_sym_public] = ACTIONS(2010),\n    [anon_sym_private] = ACTIONS(2010),\n    [anon_sym_protected] = ACTIONS(2010),\n    [anon_sym_override] = ACTIONS(2010),\n    [anon_sym_readonly] = ACTIONS(2010),\n    [anon_sym_module] = ACTIONS(2010),\n    [anon_sym_any] = ACTIONS(2010),\n    [anon_sym_number] = ACTIONS(2010),\n    [anon_sym_int] = ACTIONS(2010),\n    [anon_sym_float] = ACTIONS(2010),\n    [anon_sym_float2] = ACTIONS(2010),\n    [anon_sym_float3] = ACTIONS(2010),\n    [anon_sym_float4] = ACTIONS(2010),\n    [anon_sym_float3x3] = ACTIONS(2010),\n    [anon_sym_float2x2] = ACTIONS(2010),\n    [anon_sym_float4x4] = ACTIONS(2010),\n    [anon_sym_int2] = ACTIONS(2010),\n    [anon_sym_int3] = ACTIONS(2010),\n    [anon_sym_int4] = ACTIONS(2010),\n    [anon_sym_int3x3] = ACTIONS(2010),\n    [anon_sym_int2x2] = ACTIONS(2010),\n    [anon_sym_int4x4] = ACTIONS(2010),\n    [anon_sym_boolean] = ACTIONS(2010),\n    [anon_sym_string] = ACTIONS(2010),\n    [anon_sym_symbol] = ACTIONS(2010),\n    [anon_sym_workgroup] = ACTIONS(2010),\n    [anon_sym_get] = ACTIONS(2010),\n    [anon_sym_set] = ACTIONS(2010),\n    [anon_sym_trait] = ACTIONS(2010),\n    [anon_sym_impl] = ACTIONS(2010),\n    [anon_sym_enum] = ACTIONS(2010),\n    [anon_sym_shader] = ACTIONS(2010),\n  },\n  [574] = {\n    [ts_builtin_sym_end] = ACTIONS(2008),\n    [sym_identifier] = ACTIONS(2010),\n    [anon_sym_pub] = ACTIONS(2010),\n    [anon_sym_export] = ACTIONS(2010),\n    [anon_sym_type] = ACTIONS(2010),\n    [anon_sym_namespace] = ACTIONS(2010),\n    [anon_sym_LBRACE] = ACTIONS(2008),\n    [anon_sym_RBRACE] = ACTIONS(2008),\n    [anon_sym_typeof] = ACTIONS(2010),\n    [anon_sym_import] = ACTIONS(2010),\n    [anon_sym_var] = ACTIONS(2010),\n    [anon_sym_let] = ACTIONS(2010),\n    [anon_sym_const] = ACTIONS(2010),\n    [anon_sym_BANG] = ACTIONS(2008),\n    [anon_sym_else] = ACTIONS(2010),\n    [anon_sym_if] = ACTIONS(2010),\n    [anon_sym_switch] = ACTIONS(2010),\n    [anon_sym_for] = ACTIONS(2010),\n    [anon_sym_LPAREN] = ACTIONS(2008),\n    [anon_sym_await] = ACTIONS(2010),\n    [anon_sym_while] = ACTIONS(2010),\n    [anon_sym_do] = ACTIONS(2010),\n    [anon_sym_try] = ACTIONS(2010),\n    [anon_sym_with] = ACTIONS(2010),\n    [anon_sym_break] = ACTIONS(2010),\n    [anon_sym_continue] = ACTIONS(2010),\n    [anon_sym_debugger] = ACTIONS(2010),\n    [anon_sym_return] = ACTIONS(2010),\n    [anon_sym_throw] = ACTIONS(2010),\n    [anon_sym_SEMI] = ACTIONS(2008),\n    [anon_sym_case] = ACTIONS(2010),\n    [anon_sym_default] = ACTIONS(2010),\n    [anon_sym_yield] = ACTIONS(2010),\n    [anon_sym_LBRACK] = ACTIONS(2008),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2008),\n    [anon_sym_LT] = ACTIONS(2010),\n    [anon_sym_SLASH] = ACTIONS(2010),\n    [anon_sym_struct] = ACTIONS(2010),\n    [anon_sym_async] = ACTIONS(2010),\n    [anon_sym_fn] = ACTIONS(2010),\n    [anon_sym_fn_STAR] = ACTIONS(2008),\n    [anon_sym_new] = ACTIONS(2010),\n    [anon_sym_PLUS] = ACTIONS(2010),\n    [anon_sym_DASH] = ACTIONS(2010),\n    [anon_sym_TILDE] = ACTIONS(2008),\n    [anon_sym_void] = ACTIONS(2010),\n    [anon_sym_delete] = ACTIONS(2010),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2008),\n    [anon_sym_DASH_DASH] = ACTIONS(2008),\n    [anon_sym_DQUOTE] = ACTIONS(2008),\n    [anon_sym_SQUOTE] = ACTIONS(2008),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2008),\n    [sym_number] = ACTIONS(2008),\n    [sym_this] = ACTIONS(2010),\n    [sym_super] = ACTIONS(2010),\n    [sym_true] = ACTIONS(2010),\n    [sym_false] = ACTIONS(2010),\n    [sym_null] = ACTIONS(2010),\n    [sym_undefined] = ACTIONS(2010),\n    [anon_sym_AT] = ACTIONS(2008),\n    [anon_sym_static] = ACTIONS(2010),\n    [anon_sym_declare] = ACTIONS(2010),\n    [anon_sym_public] = ACTIONS(2010),\n    [anon_sym_private] = ACTIONS(2010),\n    [anon_sym_protected] = ACTIONS(2010),\n    [anon_sym_override] = ACTIONS(2010),\n    [anon_sym_readonly] = ACTIONS(2010),\n    [anon_sym_module] = ACTIONS(2010),\n    [anon_sym_any] = ACTIONS(2010),\n    [anon_sym_number] = ACTIONS(2010),\n    [anon_sym_int] = ACTIONS(2010),\n    [anon_sym_float] = ACTIONS(2010),\n    [anon_sym_float2] = ACTIONS(2010),\n    [anon_sym_float3] = ACTIONS(2010),\n    [anon_sym_float4] = ACTIONS(2010),\n    [anon_sym_float3x3] = ACTIONS(2010),\n    [anon_sym_float2x2] = ACTIONS(2010),\n    [anon_sym_float4x4] = ACTIONS(2010),\n    [anon_sym_int2] = ACTIONS(2010),\n    [anon_sym_int3] = ACTIONS(2010),\n    [anon_sym_int4] = ACTIONS(2010),\n    [anon_sym_int3x3] = ACTIONS(2010),\n    [anon_sym_int2x2] = ACTIONS(2010),\n    [anon_sym_int4x4] = ACTIONS(2010),\n    [anon_sym_boolean] = ACTIONS(2010),\n    [anon_sym_string] = ACTIONS(2010),\n    [anon_sym_symbol] = ACTIONS(2010),\n    [anon_sym_workgroup] = ACTIONS(2010),\n    [anon_sym_get] = ACTIONS(2010),\n    [anon_sym_set] = ACTIONS(2010),\n    [anon_sym_trait] = ACTIONS(2010),\n    [anon_sym_impl] = ACTIONS(2010),\n    [anon_sym_enum] = ACTIONS(2010),\n    [anon_sym_shader] = ACTIONS(2010),\n  },\n  [575] = {\n    [ts_builtin_sym_end] = ACTIONS(2012),\n    [sym_identifier] = ACTIONS(2014),\n    [anon_sym_pub] = ACTIONS(2014),\n    [anon_sym_export] = ACTIONS(2014),\n    [anon_sym_type] = ACTIONS(2014),\n    [anon_sym_namespace] = ACTIONS(2014),\n    [anon_sym_LBRACE] = ACTIONS(2012),\n    [anon_sym_RBRACE] = ACTIONS(2012),\n    [anon_sym_typeof] = ACTIONS(2014),\n    [anon_sym_import] = ACTIONS(2014),\n    [anon_sym_var] = ACTIONS(2014),\n    [anon_sym_let] = ACTIONS(2014),\n    [anon_sym_const] = ACTIONS(2014),\n    [anon_sym_BANG] = ACTIONS(2012),\n    [anon_sym_else] = ACTIONS(2014),\n    [anon_sym_if] = ACTIONS(2014),\n    [anon_sym_switch] = ACTIONS(2014),\n    [anon_sym_for] = ACTIONS(2014),\n    [anon_sym_LPAREN] = ACTIONS(2012),\n    [anon_sym_await] = ACTIONS(2014),\n    [anon_sym_while] = ACTIONS(2014),\n    [anon_sym_do] = ACTIONS(2014),\n    [anon_sym_try] = ACTIONS(2014),\n    [anon_sym_with] = ACTIONS(2014),\n    [anon_sym_break] = ACTIONS(2014),\n    [anon_sym_continue] = ACTIONS(2014),\n    [anon_sym_debugger] = ACTIONS(2014),\n    [anon_sym_return] = ACTIONS(2014),\n    [anon_sym_throw] = ACTIONS(2014),\n    [anon_sym_SEMI] = ACTIONS(2012),\n    [anon_sym_case] = ACTIONS(2014),\n    [anon_sym_default] = ACTIONS(2014),\n    [anon_sym_yield] = ACTIONS(2014),\n    [anon_sym_LBRACK] = ACTIONS(2012),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2012),\n    [anon_sym_LT] = ACTIONS(2014),\n    [anon_sym_SLASH] = ACTIONS(2014),\n    [anon_sym_struct] = ACTIONS(2014),\n    [anon_sym_async] = ACTIONS(2014),\n    [anon_sym_fn] = ACTIONS(2014),\n    [anon_sym_fn_STAR] = ACTIONS(2012),\n    [anon_sym_new] = ACTIONS(2014),\n    [anon_sym_PLUS] = ACTIONS(2014),\n    [anon_sym_DASH] = ACTIONS(2014),\n    [anon_sym_TILDE] = ACTIONS(2012),\n    [anon_sym_void] = ACTIONS(2014),\n    [anon_sym_delete] = ACTIONS(2014),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2012),\n    [anon_sym_DASH_DASH] = ACTIONS(2012),\n    [anon_sym_DQUOTE] = ACTIONS(2012),\n    [anon_sym_SQUOTE] = ACTIONS(2012),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2012),\n    [sym_number] = ACTIONS(2012),\n    [sym_this] = ACTIONS(2014),\n    [sym_super] = ACTIONS(2014),\n    [sym_true] = ACTIONS(2014),\n    [sym_false] = ACTIONS(2014),\n    [sym_null] = ACTIONS(2014),\n    [sym_undefined] = ACTIONS(2014),\n    [anon_sym_AT] = ACTIONS(2012),\n    [anon_sym_static] = ACTIONS(2014),\n    [anon_sym_declare] = ACTIONS(2014),\n    [anon_sym_public] = ACTIONS(2014),\n    [anon_sym_private] = ACTIONS(2014),\n    [anon_sym_protected] = ACTIONS(2014),\n    [anon_sym_override] = ACTIONS(2014),\n    [anon_sym_readonly] = ACTIONS(2014),\n    [anon_sym_module] = ACTIONS(2014),\n    [anon_sym_any] = ACTIONS(2014),\n    [anon_sym_number] = ACTIONS(2014),\n    [anon_sym_int] = ACTIONS(2014),\n    [anon_sym_float] = ACTIONS(2014),\n    [anon_sym_float2] = ACTIONS(2014),\n    [anon_sym_float3] = ACTIONS(2014),\n    [anon_sym_float4] = ACTIONS(2014),\n    [anon_sym_float3x3] = ACTIONS(2014),\n    [anon_sym_float2x2] = ACTIONS(2014),\n    [anon_sym_float4x4] = ACTIONS(2014),\n    [anon_sym_int2] = ACTIONS(2014),\n    [anon_sym_int3] = ACTIONS(2014),\n    [anon_sym_int4] = ACTIONS(2014),\n    [anon_sym_int3x3] = ACTIONS(2014),\n    [anon_sym_int2x2] = ACTIONS(2014),\n    [anon_sym_int4x4] = ACTIONS(2014),\n    [anon_sym_boolean] = ACTIONS(2014),\n    [anon_sym_string] = ACTIONS(2014),\n    [anon_sym_symbol] = ACTIONS(2014),\n    [anon_sym_workgroup] = ACTIONS(2014),\n    [anon_sym_get] = ACTIONS(2014),\n    [anon_sym_set] = ACTIONS(2014),\n    [anon_sym_trait] = ACTIONS(2014),\n    [anon_sym_impl] = ACTIONS(2014),\n    [anon_sym_enum] = ACTIONS(2014),\n    [anon_sym_shader] = ACTIONS(2014),\n  },\n  [576] = {\n    [ts_builtin_sym_end] = ACTIONS(2016),\n    [sym_identifier] = ACTIONS(2018),\n    [anon_sym_pub] = ACTIONS(2018),\n    [anon_sym_export] = ACTIONS(2018),\n    [anon_sym_type] = ACTIONS(2018),\n    [anon_sym_namespace] = ACTIONS(2018),\n    [anon_sym_LBRACE] = ACTIONS(2016),\n    [anon_sym_RBRACE] = ACTIONS(2016),\n    [anon_sym_typeof] = ACTIONS(2018),\n    [anon_sym_import] = ACTIONS(2018),\n    [anon_sym_var] = ACTIONS(2018),\n    [anon_sym_let] = ACTIONS(2018),\n    [anon_sym_const] = ACTIONS(2018),\n    [anon_sym_BANG] = ACTIONS(2016),\n    [anon_sym_else] = ACTIONS(2018),\n    [anon_sym_if] = ACTIONS(2018),\n    [anon_sym_switch] = ACTIONS(2018),\n    [anon_sym_for] = ACTIONS(2018),\n    [anon_sym_LPAREN] = ACTIONS(2016),\n    [anon_sym_await] = ACTIONS(2018),\n    [anon_sym_while] = ACTIONS(2018),\n    [anon_sym_do] = ACTIONS(2018),\n    [anon_sym_try] = ACTIONS(2018),\n    [anon_sym_with] = ACTIONS(2018),\n    [anon_sym_break] = ACTIONS(2018),\n    [anon_sym_continue] = ACTIONS(2018),\n    [anon_sym_debugger] = ACTIONS(2018),\n    [anon_sym_return] = ACTIONS(2018),\n    [anon_sym_throw] = ACTIONS(2018),\n    [anon_sym_SEMI] = ACTIONS(2016),\n    [anon_sym_case] = ACTIONS(2018),\n    [anon_sym_default] = ACTIONS(2018),\n    [anon_sym_yield] = ACTIONS(2018),\n    [anon_sym_LBRACK] = ACTIONS(2016),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2016),\n    [anon_sym_LT] = ACTIONS(2018),\n    [anon_sym_SLASH] = ACTIONS(2018),\n    [anon_sym_struct] = ACTIONS(2018),\n    [anon_sym_async] = ACTIONS(2018),\n    [anon_sym_fn] = ACTIONS(2018),\n    [anon_sym_fn_STAR] = ACTIONS(2016),\n    [anon_sym_new] = ACTIONS(2018),\n    [anon_sym_PLUS] = ACTIONS(2018),\n    [anon_sym_DASH] = ACTIONS(2018),\n    [anon_sym_TILDE] = ACTIONS(2016),\n    [anon_sym_void] = ACTIONS(2018),\n    [anon_sym_delete] = ACTIONS(2018),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2016),\n    [anon_sym_DASH_DASH] = ACTIONS(2016),\n    [anon_sym_DQUOTE] = ACTIONS(2016),\n    [anon_sym_SQUOTE] = ACTIONS(2016),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2016),\n    [sym_number] = ACTIONS(2016),\n    [sym_this] = ACTIONS(2018),\n    [sym_super] = ACTIONS(2018),\n    [sym_true] = ACTIONS(2018),\n    [sym_false] = ACTIONS(2018),\n    [sym_null] = ACTIONS(2018),\n    [sym_undefined] = ACTIONS(2018),\n    [anon_sym_AT] = ACTIONS(2016),\n    [anon_sym_static] = ACTIONS(2018),\n    [anon_sym_declare] = ACTIONS(2018),\n    [anon_sym_public] = ACTIONS(2018),\n    [anon_sym_private] = ACTIONS(2018),\n    [anon_sym_protected] = ACTIONS(2018),\n    [anon_sym_override] = ACTIONS(2018),\n    [anon_sym_readonly] = ACTIONS(2018),\n    [anon_sym_module] = ACTIONS(2018),\n    [anon_sym_any] = ACTIONS(2018),\n    [anon_sym_number] = ACTIONS(2018),\n    [anon_sym_int] = ACTIONS(2018),\n    [anon_sym_float] = ACTIONS(2018),\n    [anon_sym_float2] = ACTIONS(2018),\n    [anon_sym_float3] = ACTIONS(2018),\n    [anon_sym_float4] = ACTIONS(2018),\n    [anon_sym_float3x3] = ACTIONS(2018),\n    [anon_sym_float2x2] = ACTIONS(2018),\n    [anon_sym_float4x4] = ACTIONS(2018),\n    [anon_sym_int2] = ACTIONS(2018),\n    [anon_sym_int3] = ACTIONS(2018),\n    [anon_sym_int4] = ACTIONS(2018),\n    [anon_sym_int3x3] = ACTIONS(2018),\n    [anon_sym_int2x2] = ACTIONS(2018),\n    [anon_sym_int4x4] = ACTIONS(2018),\n    [anon_sym_boolean] = ACTIONS(2018),\n    [anon_sym_string] = ACTIONS(2018),\n    [anon_sym_symbol] = ACTIONS(2018),\n    [anon_sym_workgroup] = ACTIONS(2018),\n    [anon_sym_get] = ACTIONS(2018),\n    [anon_sym_set] = ACTIONS(2018),\n    [anon_sym_trait] = ACTIONS(2018),\n    [anon_sym_impl] = ACTIONS(2018),\n    [anon_sym_enum] = ACTIONS(2018),\n    [anon_sym_shader] = ACTIONS(2018),\n  },\n  [577] = {\n    [ts_builtin_sym_end] = ACTIONS(1340),\n    [sym_identifier] = ACTIONS(1342),\n    [anon_sym_pub] = ACTIONS(1342),\n    [anon_sym_export] = ACTIONS(1342),\n    [anon_sym_type] = ACTIONS(1342),\n    [anon_sym_namespace] = ACTIONS(1342),\n    [anon_sym_LBRACE] = ACTIONS(1340),\n    [anon_sym_RBRACE] = ACTIONS(1340),\n    [anon_sym_typeof] = ACTIONS(1342),\n    [anon_sym_import] = ACTIONS(1342),\n    [anon_sym_var] = ACTIONS(1342),\n    [anon_sym_let] = ACTIONS(1342),\n    [anon_sym_const] = ACTIONS(1342),\n    [anon_sym_BANG] = ACTIONS(1340),\n    [anon_sym_else] = ACTIONS(1342),\n    [anon_sym_if] = ACTIONS(1342),\n    [anon_sym_switch] = ACTIONS(1342),\n    [anon_sym_for] = ACTIONS(1342),\n    [anon_sym_LPAREN] = ACTIONS(1340),\n    [anon_sym_await] = ACTIONS(1342),\n    [anon_sym_while] = ACTIONS(1342),\n    [anon_sym_do] = ACTIONS(1342),\n    [anon_sym_try] = ACTIONS(1342),\n    [anon_sym_with] = ACTIONS(1342),\n    [anon_sym_break] = ACTIONS(1342),\n    [anon_sym_continue] = ACTIONS(1342),\n    [anon_sym_debugger] = ACTIONS(1342),\n    [anon_sym_return] = ACTIONS(1342),\n    [anon_sym_throw] = ACTIONS(1342),\n    [anon_sym_SEMI] = ACTIONS(1340),\n    [anon_sym_case] = ACTIONS(1342),\n    [anon_sym_default] = ACTIONS(1342),\n    [anon_sym_yield] = ACTIONS(1342),\n    [anon_sym_LBRACK] = ACTIONS(1340),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1340),\n    [anon_sym_LT] = ACTIONS(1342),\n    [anon_sym_SLASH] = ACTIONS(1342),\n    [anon_sym_struct] = ACTIONS(1342),\n    [anon_sym_async] = ACTIONS(1342),\n    [anon_sym_fn] = ACTIONS(1342),\n    [anon_sym_fn_STAR] = ACTIONS(1340),\n    [anon_sym_new] = ACTIONS(1342),\n    [anon_sym_PLUS] = ACTIONS(1342),\n    [anon_sym_DASH] = ACTIONS(1342),\n    [anon_sym_TILDE] = ACTIONS(1340),\n    [anon_sym_void] = ACTIONS(1342),\n    [anon_sym_delete] = ACTIONS(1342),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1340),\n    [anon_sym_DASH_DASH] = ACTIONS(1340),\n    [anon_sym_DQUOTE] = ACTIONS(1340),\n    [anon_sym_SQUOTE] = ACTIONS(1340),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1340),\n    [sym_number] = ACTIONS(1340),\n    [sym_this] = ACTIONS(1342),\n    [sym_super] = ACTIONS(1342),\n    [sym_true] = ACTIONS(1342),\n    [sym_false] = ACTIONS(1342),\n    [sym_null] = ACTIONS(1342),\n    [sym_undefined] = ACTIONS(1342),\n    [anon_sym_AT] = ACTIONS(1340),\n    [anon_sym_static] = ACTIONS(1342),\n    [anon_sym_declare] = ACTIONS(1342),\n    [anon_sym_public] = ACTIONS(1342),\n    [anon_sym_private] = ACTIONS(1342),\n    [anon_sym_protected] = ACTIONS(1342),\n    [anon_sym_override] = ACTIONS(1342),\n    [anon_sym_readonly] = ACTIONS(1342),\n    [anon_sym_module] = ACTIONS(1342),\n    [anon_sym_any] = ACTIONS(1342),\n    [anon_sym_number] = ACTIONS(1342),\n    [anon_sym_int] = ACTIONS(1342),\n    [anon_sym_float] = ACTIONS(1342),\n    [anon_sym_float2] = ACTIONS(1342),\n    [anon_sym_float3] = ACTIONS(1342),\n    [anon_sym_float4] = ACTIONS(1342),\n    [anon_sym_float3x3] = ACTIONS(1342),\n    [anon_sym_float2x2] = ACTIONS(1342),\n    [anon_sym_float4x4] = ACTIONS(1342),\n    [anon_sym_int2] = ACTIONS(1342),\n    [anon_sym_int3] = ACTIONS(1342),\n    [anon_sym_int4] = ACTIONS(1342),\n    [anon_sym_int3x3] = ACTIONS(1342),\n    [anon_sym_int2x2] = ACTIONS(1342),\n    [anon_sym_int4x4] = ACTIONS(1342),\n    [anon_sym_boolean] = ACTIONS(1342),\n    [anon_sym_string] = ACTIONS(1342),\n    [anon_sym_symbol] = ACTIONS(1342),\n    [anon_sym_workgroup] = ACTIONS(1342),\n    [anon_sym_get] = ACTIONS(1342),\n    [anon_sym_set] = ACTIONS(1342),\n    [anon_sym_trait] = ACTIONS(1342),\n    [anon_sym_impl] = ACTIONS(1342),\n    [anon_sym_enum] = ACTIONS(1342),\n    [anon_sym_shader] = ACTIONS(1342),\n  },\n  [578] = {\n    [ts_builtin_sym_end] = ACTIONS(2004),\n    [sym_identifier] = ACTIONS(2006),\n    [anon_sym_pub] = ACTIONS(2006),\n    [anon_sym_export] = ACTIONS(2006),\n    [anon_sym_type] = ACTIONS(2006),\n    [anon_sym_namespace] = ACTIONS(2006),\n    [anon_sym_LBRACE] = ACTIONS(2004),\n    [anon_sym_RBRACE] = ACTIONS(2004),\n    [anon_sym_typeof] = ACTIONS(2006),\n    [anon_sym_import] = ACTIONS(2006),\n    [anon_sym_var] = ACTIONS(2006),\n    [anon_sym_let] = ACTIONS(2006),\n    [anon_sym_const] = ACTIONS(2006),\n    [anon_sym_BANG] = ACTIONS(2004),\n    [anon_sym_else] = ACTIONS(2006),\n    [anon_sym_if] = ACTIONS(2006),\n    [anon_sym_switch] = ACTIONS(2006),\n    [anon_sym_for] = ACTIONS(2006),\n    [anon_sym_LPAREN] = ACTIONS(2004),\n    [anon_sym_await] = ACTIONS(2006),\n    [anon_sym_while] = ACTIONS(2006),\n    [anon_sym_do] = ACTIONS(2006),\n    [anon_sym_try] = ACTIONS(2006),\n    [anon_sym_with] = ACTIONS(2006),\n    [anon_sym_break] = ACTIONS(2006),\n    [anon_sym_continue] = ACTIONS(2006),\n    [anon_sym_debugger] = ACTIONS(2006),\n    [anon_sym_return] = ACTIONS(2006),\n    [anon_sym_throw] = ACTIONS(2006),\n    [anon_sym_SEMI] = ACTIONS(2004),\n    [anon_sym_case] = ACTIONS(2006),\n    [anon_sym_default] = ACTIONS(2006),\n    [anon_sym_yield] = ACTIONS(2006),\n    [anon_sym_LBRACK] = ACTIONS(2004),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2004),\n    [anon_sym_LT] = ACTIONS(2006),\n    [anon_sym_SLASH] = ACTIONS(2006),\n    [anon_sym_struct] = ACTIONS(2006),\n    [anon_sym_async] = ACTIONS(2006),\n    [anon_sym_fn] = ACTIONS(2006),\n    [anon_sym_fn_STAR] = ACTIONS(2004),\n    [anon_sym_new] = ACTIONS(2006),\n    [anon_sym_PLUS] = ACTIONS(2006),\n    [anon_sym_DASH] = ACTIONS(2006),\n    [anon_sym_TILDE] = ACTIONS(2004),\n    [anon_sym_void] = ACTIONS(2006),\n    [anon_sym_delete] = ACTIONS(2006),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2004),\n    [anon_sym_DASH_DASH] = ACTIONS(2004),\n    [anon_sym_DQUOTE] = ACTIONS(2004),\n    [anon_sym_SQUOTE] = ACTIONS(2004),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2004),\n    [sym_number] = ACTIONS(2004),\n    [sym_this] = ACTIONS(2006),\n    [sym_super] = ACTIONS(2006),\n    [sym_true] = ACTIONS(2006),\n    [sym_false] = ACTIONS(2006),\n    [sym_null] = ACTIONS(2006),\n    [sym_undefined] = ACTIONS(2006),\n    [anon_sym_AT] = ACTIONS(2004),\n    [anon_sym_static] = ACTIONS(2006),\n    [anon_sym_declare] = ACTIONS(2006),\n    [anon_sym_public] = ACTIONS(2006),\n    [anon_sym_private] = ACTIONS(2006),\n    [anon_sym_protected] = ACTIONS(2006),\n    [anon_sym_override] = ACTIONS(2006),\n    [anon_sym_readonly] = ACTIONS(2006),\n    [anon_sym_module] = ACTIONS(2006),\n    [anon_sym_any] = ACTIONS(2006),\n    [anon_sym_number] = ACTIONS(2006),\n    [anon_sym_int] = ACTIONS(2006),\n    [anon_sym_float] = ACTIONS(2006),\n    [anon_sym_float2] = ACTIONS(2006),\n    [anon_sym_float3] = ACTIONS(2006),\n    [anon_sym_float4] = ACTIONS(2006),\n    [anon_sym_float3x3] = ACTIONS(2006),\n    [anon_sym_float2x2] = ACTIONS(2006),\n    [anon_sym_float4x4] = ACTIONS(2006),\n    [anon_sym_int2] = ACTIONS(2006),\n    [anon_sym_int3] = ACTIONS(2006),\n    [anon_sym_int4] = ACTIONS(2006),\n    [anon_sym_int3x3] = ACTIONS(2006),\n    [anon_sym_int2x2] = ACTIONS(2006),\n    [anon_sym_int4x4] = ACTIONS(2006),\n    [anon_sym_boolean] = ACTIONS(2006),\n    [anon_sym_string] = ACTIONS(2006),\n    [anon_sym_symbol] = ACTIONS(2006),\n    [anon_sym_workgroup] = ACTIONS(2006),\n    [anon_sym_get] = ACTIONS(2006),\n    [anon_sym_set] = ACTIONS(2006),\n    [anon_sym_trait] = ACTIONS(2006),\n    [anon_sym_impl] = ACTIONS(2006),\n    [anon_sym_enum] = ACTIONS(2006),\n    [anon_sym_shader] = ACTIONS(2006),\n  },\n  [579] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [580] = {\n    [ts_builtin_sym_end] = ACTIONS(2020),\n    [sym_identifier] = ACTIONS(2022),\n    [anon_sym_pub] = ACTIONS(2022),\n    [anon_sym_export] = ACTIONS(2022),\n    [anon_sym_type] = ACTIONS(2022),\n    [anon_sym_namespace] = ACTIONS(2022),\n    [anon_sym_LBRACE] = ACTIONS(2020),\n    [anon_sym_RBRACE] = ACTIONS(2020),\n    [anon_sym_typeof] = ACTIONS(2022),\n    [anon_sym_import] = ACTIONS(2022),\n    [anon_sym_var] = ACTIONS(2022),\n    [anon_sym_let] = ACTIONS(2022),\n    [anon_sym_const] = ACTIONS(2022),\n    [anon_sym_BANG] = ACTIONS(2020),\n    [anon_sym_else] = ACTIONS(2022),\n    [anon_sym_if] = ACTIONS(2022),\n    [anon_sym_switch] = ACTIONS(2022),\n    [anon_sym_for] = ACTIONS(2022),\n    [anon_sym_LPAREN] = ACTIONS(2020),\n    [anon_sym_await] = ACTIONS(2022),\n    [anon_sym_while] = ACTIONS(2022),\n    [anon_sym_do] = ACTIONS(2022),\n    [anon_sym_try] = ACTIONS(2022),\n    [anon_sym_with] = ACTIONS(2022),\n    [anon_sym_break] = ACTIONS(2022),\n    [anon_sym_continue] = ACTIONS(2022),\n    [anon_sym_debugger] = ACTIONS(2022),\n    [anon_sym_return] = ACTIONS(2022),\n    [anon_sym_throw] = ACTIONS(2022),\n    [anon_sym_SEMI] = ACTIONS(2020),\n    [anon_sym_case] = ACTIONS(2022),\n    [anon_sym_default] = ACTIONS(2022),\n    [anon_sym_yield] = ACTIONS(2022),\n    [anon_sym_LBRACK] = ACTIONS(2020),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2020),\n    [anon_sym_LT] = ACTIONS(2022),\n    [anon_sym_SLASH] = ACTIONS(2022),\n    [anon_sym_struct] = ACTIONS(2022),\n    [anon_sym_async] = ACTIONS(2022),\n    [anon_sym_fn] = ACTIONS(2022),\n    [anon_sym_fn_STAR] = ACTIONS(2020),\n    [anon_sym_new] = ACTIONS(2022),\n    [anon_sym_PLUS] = ACTIONS(2022),\n    [anon_sym_DASH] = ACTIONS(2022),\n    [anon_sym_TILDE] = ACTIONS(2020),\n    [anon_sym_void] = ACTIONS(2022),\n    [anon_sym_delete] = ACTIONS(2022),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2020),\n    [anon_sym_DASH_DASH] = ACTIONS(2020),\n    [anon_sym_DQUOTE] = ACTIONS(2020),\n    [anon_sym_SQUOTE] = ACTIONS(2020),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2020),\n    [sym_number] = ACTIONS(2020),\n    [sym_this] = ACTIONS(2022),\n    [sym_super] = ACTIONS(2022),\n    [sym_true] = ACTIONS(2022),\n    [sym_false] = ACTIONS(2022),\n    [sym_null] = ACTIONS(2022),\n    [sym_undefined] = ACTIONS(2022),\n    [anon_sym_AT] = ACTIONS(2020),\n    [anon_sym_static] = ACTIONS(2022),\n    [anon_sym_declare] = ACTIONS(2022),\n    [anon_sym_public] = ACTIONS(2022),\n    [anon_sym_private] = ACTIONS(2022),\n    [anon_sym_protected] = ACTIONS(2022),\n    [anon_sym_override] = ACTIONS(2022),\n    [anon_sym_readonly] = ACTIONS(2022),\n    [anon_sym_module] = ACTIONS(2022),\n    [anon_sym_any] = ACTIONS(2022),\n    [anon_sym_number] = ACTIONS(2022),\n    [anon_sym_int] = ACTIONS(2022),\n    [anon_sym_float] = ACTIONS(2022),\n    [anon_sym_float2] = ACTIONS(2022),\n    [anon_sym_float3] = ACTIONS(2022),\n    [anon_sym_float4] = ACTIONS(2022),\n    [anon_sym_float3x3] = ACTIONS(2022),\n    [anon_sym_float2x2] = ACTIONS(2022),\n    [anon_sym_float4x4] = ACTIONS(2022),\n    [anon_sym_int2] = ACTIONS(2022),\n    [anon_sym_int3] = ACTIONS(2022),\n    [anon_sym_int4] = ACTIONS(2022),\n    [anon_sym_int3x3] = ACTIONS(2022),\n    [anon_sym_int2x2] = ACTIONS(2022),\n    [anon_sym_int4x4] = ACTIONS(2022),\n    [anon_sym_boolean] = ACTIONS(2022),\n    [anon_sym_string] = ACTIONS(2022),\n    [anon_sym_symbol] = ACTIONS(2022),\n    [anon_sym_workgroup] = ACTIONS(2022),\n    [anon_sym_get] = ACTIONS(2022),\n    [anon_sym_set] = ACTIONS(2022),\n    [anon_sym_trait] = ACTIONS(2022),\n    [anon_sym_impl] = ACTIONS(2022),\n    [anon_sym_enum] = ACTIONS(2022),\n    [anon_sym_shader] = ACTIONS(2022),\n  },\n  [581] = {\n    [ts_builtin_sym_end] = ACTIONS(2024),\n    [sym_identifier] = ACTIONS(2026),\n    [anon_sym_pub] = ACTIONS(2026),\n    [anon_sym_export] = ACTIONS(2026),\n    [anon_sym_type] = ACTIONS(2026),\n    [anon_sym_namespace] = ACTIONS(2026),\n    [anon_sym_LBRACE] = ACTIONS(2024),\n    [anon_sym_RBRACE] = ACTIONS(2024),\n    [anon_sym_typeof] = ACTIONS(2026),\n    [anon_sym_import] = ACTIONS(2026),\n    [anon_sym_var] = ACTIONS(2026),\n    [anon_sym_let] = ACTIONS(2026),\n    [anon_sym_const] = ACTIONS(2026),\n    [anon_sym_BANG] = ACTIONS(2024),\n    [anon_sym_else] = ACTIONS(2026),\n    [anon_sym_if] = ACTIONS(2026),\n    [anon_sym_switch] = ACTIONS(2026),\n    [anon_sym_for] = ACTIONS(2026),\n    [anon_sym_LPAREN] = ACTIONS(2024),\n    [anon_sym_await] = ACTIONS(2026),\n    [anon_sym_while] = ACTIONS(2026),\n    [anon_sym_do] = ACTIONS(2026),\n    [anon_sym_try] = ACTIONS(2026),\n    [anon_sym_with] = ACTIONS(2026),\n    [anon_sym_break] = ACTIONS(2026),\n    [anon_sym_continue] = ACTIONS(2026),\n    [anon_sym_debugger] = ACTIONS(2026),\n    [anon_sym_return] = ACTIONS(2026),\n    [anon_sym_throw] = ACTIONS(2026),\n    [anon_sym_SEMI] = ACTIONS(2024),\n    [anon_sym_case] = ACTIONS(2026),\n    [anon_sym_default] = ACTIONS(2026),\n    [anon_sym_yield] = ACTIONS(2026),\n    [anon_sym_LBRACK] = ACTIONS(2024),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2024),\n    [anon_sym_LT] = ACTIONS(2026),\n    [anon_sym_SLASH] = ACTIONS(2026),\n    [anon_sym_struct] = ACTIONS(2026),\n    [anon_sym_async] = ACTIONS(2026),\n    [anon_sym_fn] = ACTIONS(2026),\n    [anon_sym_fn_STAR] = ACTIONS(2024),\n    [anon_sym_new] = ACTIONS(2026),\n    [anon_sym_PLUS] = ACTIONS(2026),\n    [anon_sym_DASH] = ACTIONS(2026),\n    [anon_sym_TILDE] = ACTIONS(2024),\n    [anon_sym_void] = ACTIONS(2026),\n    [anon_sym_delete] = ACTIONS(2026),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2024),\n    [anon_sym_DASH_DASH] = ACTIONS(2024),\n    [anon_sym_DQUOTE] = ACTIONS(2024),\n    [anon_sym_SQUOTE] = ACTIONS(2024),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2024),\n    [sym_number] = ACTIONS(2024),\n    [sym_this] = ACTIONS(2026),\n    [sym_super] = ACTIONS(2026),\n    [sym_true] = ACTIONS(2026),\n    [sym_false] = ACTIONS(2026),\n    [sym_null] = ACTIONS(2026),\n    [sym_undefined] = ACTIONS(2026),\n    [anon_sym_AT] = ACTIONS(2024),\n    [anon_sym_static] = ACTIONS(2026),\n    [anon_sym_declare] = ACTIONS(2026),\n    [anon_sym_public] = ACTIONS(2026),\n    [anon_sym_private] = ACTIONS(2026),\n    [anon_sym_protected] = ACTIONS(2026),\n    [anon_sym_override] = ACTIONS(2026),\n    [anon_sym_readonly] = ACTIONS(2026),\n    [anon_sym_module] = ACTIONS(2026),\n    [anon_sym_any] = ACTIONS(2026),\n    [anon_sym_number] = ACTIONS(2026),\n    [anon_sym_int] = ACTIONS(2026),\n    [anon_sym_float] = ACTIONS(2026),\n    [anon_sym_float2] = ACTIONS(2026),\n    [anon_sym_float3] = ACTIONS(2026),\n    [anon_sym_float4] = ACTIONS(2026),\n    [anon_sym_float3x3] = ACTIONS(2026),\n    [anon_sym_float2x2] = ACTIONS(2026),\n    [anon_sym_float4x4] = ACTIONS(2026),\n    [anon_sym_int2] = ACTIONS(2026),\n    [anon_sym_int3] = ACTIONS(2026),\n    [anon_sym_int4] = ACTIONS(2026),\n    [anon_sym_int3x3] = ACTIONS(2026),\n    [anon_sym_int2x2] = ACTIONS(2026),\n    [anon_sym_int4x4] = ACTIONS(2026),\n    [anon_sym_boolean] = ACTIONS(2026),\n    [anon_sym_string] = ACTIONS(2026),\n    [anon_sym_symbol] = ACTIONS(2026),\n    [anon_sym_workgroup] = ACTIONS(2026),\n    [anon_sym_get] = ACTIONS(2026),\n    [anon_sym_set] = ACTIONS(2026),\n    [anon_sym_trait] = ACTIONS(2026),\n    [anon_sym_impl] = ACTIONS(2026),\n    [anon_sym_enum] = ACTIONS(2026),\n    [anon_sym_shader] = ACTIONS(2026),\n  },\n  [582] = {\n    [ts_builtin_sym_end] = ACTIONS(1336),\n    [sym_identifier] = ACTIONS(1338),\n    [anon_sym_pub] = ACTIONS(1338),\n    [anon_sym_export] = ACTIONS(1338),\n    [anon_sym_type] = ACTIONS(1338),\n    [anon_sym_namespace] = ACTIONS(1338),\n    [anon_sym_LBRACE] = ACTIONS(1336),\n    [anon_sym_RBRACE] = ACTIONS(1336),\n    [anon_sym_typeof] = ACTIONS(1338),\n    [anon_sym_import] = ACTIONS(1338),\n    [anon_sym_var] = ACTIONS(1338),\n    [anon_sym_let] = ACTIONS(1338),\n    [anon_sym_const] = ACTIONS(1338),\n    [anon_sym_BANG] = ACTIONS(1336),\n    [anon_sym_else] = ACTIONS(1338),\n    [anon_sym_if] = ACTIONS(1338),\n    [anon_sym_switch] = ACTIONS(1338),\n    [anon_sym_for] = ACTIONS(1338),\n    [anon_sym_LPAREN] = ACTIONS(1336),\n    [anon_sym_await] = ACTIONS(1338),\n    [anon_sym_while] = ACTIONS(1338),\n    [anon_sym_do] = ACTIONS(1338),\n    [anon_sym_try] = ACTIONS(1338),\n    [anon_sym_with] = ACTIONS(1338),\n    [anon_sym_break] = ACTIONS(1338),\n    [anon_sym_continue] = ACTIONS(1338),\n    [anon_sym_debugger] = ACTIONS(1338),\n    [anon_sym_return] = ACTIONS(1338),\n    [anon_sym_throw] = ACTIONS(1338),\n    [anon_sym_SEMI] = ACTIONS(1336),\n    [anon_sym_case] = ACTIONS(1338),\n    [anon_sym_default] = ACTIONS(1338),\n    [anon_sym_yield] = ACTIONS(1338),\n    [anon_sym_LBRACK] = ACTIONS(1336),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1336),\n    [anon_sym_LT] = ACTIONS(1338),\n    [anon_sym_SLASH] = ACTIONS(1338),\n    [anon_sym_struct] = ACTIONS(1338),\n    [anon_sym_async] = ACTIONS(1338),\n    [anon_sym_fn] = ACTIONS(1338),\n    [anon_sym_fn_STAR] = ACTIONS(1336),\n    [anon_sym_new] = ACTIONS(1338),\n    [anon_sym_PLUS] = ACTIONS(1338),\n    [anon_sym_DASH] = ACTIONS(1338),\n    [anon_sym_TILDE] = ACTIONS(1336),\n    [anon_sym_void] = ACTIONS(1338),\n    [anon_sym_delete] = ACTIONS(1338),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1336),\n    [anon_sym_DASH_DASH] = ACTIONS(1336),\n    [anon_sym_DQUOTE] = ACTIONS(1336),\n    [anon_sym_SQUOTE] = ACTIONS(1336),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1336),\n    [sym_number] = ACTIONS(1336),\n    [sym_this] = ACTIONS(1338),\n    [sym_super] = ACTIONS(1338),\n    [sym_true] = ACTIONS(1338),\n    [sym_false] = ACTIONS(1338),\n    [sym_null] = ACTIONS(1338),\n    [sym_undefined] = ACTIONS(1338),\n    [anon_sym_AT] = ACTIONS(1336),\n    [anon_sym_static] = ACTIONS(1338),\n    [anon_sym_declare] = ACTIONS(1338),\n    [anon_sym_public] = ACTIONS(1338),\n    [anon_sym_private] = ACTIONS(1338),\n    [anon_sym_protected] = ACTIONS(1338),\n    [anon_sym_override] = ACTIONS(1338),\n    [anon_sym_readonly] = ACTIONS(1338),\n    [anon_sym_module] = ACTIONS(1338),\n    [anon_sym_any] = ACTIONS(1338),\n    [anon_sym_number] = ACTIONS(1338),\n    [anon_sym_int] = ACTIONS(1338),\n    [anon_sym_float] = ACTIONS(1338),\n    [anon_sym_float2] = ACTIONS(1338),\n    [anon_sym_float3] = ACTIONS(1338),\n    [anon_sym_float4] = ACTIONS(1338),\n    [anon_sym_float3x3] = ACTIONS(1338),\n    [anon_sym_float2x2] = ACTIONS(1338),\n    [anon_sym_float4x4] = ACTIONS(1338),\n    [anon_sym_int2] = ACTIONS(1338),\n    [anon_sym_int3] = ACTIONS(1338),\n    [anon_sym_int4] = ACTIONS(1338),\n    [anon_sym_int3x3] = ACTIONS(1338),\n    [anon_sym_int2x2] = ACTIONS(1338),\n    [anon_sym_int4x4] = ACTIONS(1338),\n    [anon_sym_boolean] = ACTIONS(1338),\n    [anon_sym_string] = ACTIONS(1338),\n    [anon_sym_symbol] = ACTIONS(1338),\n    [anon_sym_workgroup] = ACTIONS(1338),\n    [anon_sym_get] = ACTIONS(1338),\n    [anon_sym_set] = ACTIONS(1338),\n    [anon_sym_trait] = ACTIONS(1338),\n    [anon_sym_impl] = ACTIONS(1338),\n    [anon_sym_enum] = ACTIONS(1338),\n    [anon_sym_shader] = ACTIONS(1338),\n  },\n  [583] = {\n    [ts_builtin_sym_end] = ACTIONS(2028),\n    [sym_identifier] = ACTIONS(2030),\n    [anon_sym_pub] = ACTIONS(2030),\n    [anon_sym_export] = ACTIONS(2030),\n    [anon_sym_type] = ACTIONS(2030),\n    [anon_sym_namespace] = ACTIONS(2030),\n    [anon_sym_LBRACE] = ACTIONS(2028),\n    [anon_sym_RBRACE] = ACTIONS(2028),\n    [anon_sym_typeof] = ACTIONS(2030),\n    [anon_sym_import] = ACTIONS(2030),\n    [anon_sym_var] = ACTIONS(2030),\n    [anon_sym_let] = ACTIONS(2030),\n    [anon_sym_const] = ACTIONS(2030),\n    [anon_sym_BANG] = ACTIONS(2028),\n    [anon_sym_else] = ACTIONS(2030),\n    [anon_sym_if] = ACTIONS(2030),\n    [anon_sym_switch] = ACTIONS(2030),\n    [anon_sym_for] = ACTIONS(2030),\n    [anon_sym_LPAREN] = ACTIONS(2028),\n    [anon_sym_await] = ACTIONS(2030),\n    [anon_sym_while] = ACTIONS(2030),\n    [anon_sym_do] = ACTIONS(2030),\n    [anon_sym_try] = ACTIONS(2030),\n    [anon_sym_with] = ACTIONS(2030),\n    [anon_sym_break] = ACTIONS(2030),\n    [anon_sym_continue] = ACTIONS(2030),\n    [anon_sym_debugger] = ACTIONS(2030),\n    [anon_sym_return] = ACTIONS(2030),\n    [anon_sym_throw] = ACTIONS(2030),\n    [anon_sym_SEMI] = ACTIONS(2028),\n    [anon_sym_case] = ACTIONS(2030),\n    [anon_sym_default] = ACTIONS(2030),\n    [anon_sym_yield] = ACTIONS(2030),\n    [anon_sym_LBRACK] = ACTIONS(2028),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2028),\n    [anon_sym_LT] = ACTIONS(2030),\n    [anon_sym_SLASH] = ACTIONS(2030),\n    [anon_sym_struct] = ACTIONS(2030),\n    [anon_sym_async] = ACTIONS(2030),\n    [anon_sym_fn] = ACTIONS(2030),\n    [anon_sym_fn_STAR] = ACTIONS(2028),\n    [anon_sym_new] = ACTIONS(2030),\n    [anon_sym_PLUS] = ACTIONS(2030),\n    [anon_sym_DASH] = ACTIONS(2030),\n    [anon_sym_TILDE] = ACTIONS(2028),\n    [anon_sym_void] = ACTIONS(2030),\n    [anon_sym_delete] = ACTIONS(2030),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2028),\n    [anon_sym_DASH_DASH] = ACTIONS(2028),\n    [anon_sym_DQUOTE] = ACTIONS(2028),\n    [anon_sym_SQUOTE] = ACTIONS(2028),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2028),\n    [sym_number] = ACTIONS(2028),\n    [sym_this] = ACTIONS(2030),\n    [sym_super] = ACTIONS(2030),\n    [sym_true] = ACTIONS(2030),\n    [sym_false] = ACTIONS(2030),\n    [sym_null] = ACTIONS(2030),\n    [sym_undefined] = ACTIONS(2030),\n    [anon_sym_AT] = ACTIONS(2028),\n    [anon_sym_static] = ACTIONS(2030),\n    [anon_sym_declare] = ACTIONS(2030),\n    [anon_sym_public] = ACTIONS(2030),\n    [anon_sym_private] = ACTIONS(2030),\n    [anon_sym_protected] = ACTIONS(2030),\n    [anon_sym_override] = ACTIONS(2030),\n    [anon_sym_readonly] = ACTIONS(2030),\n    [anon_sym_module] = ACTIONS(2030),\n    [anon_sym_any] = ACTIONS(2030),\n    [anon_sym_number] = ACTIONS(2030),\n    [anon_sym_int] = ACTIONS(2030),\n    [anon_sym_float] = ACTIONS(2030),\n    [anon_sym_float2] = ACTIONS(2030),\n    [anon_sym_float3] = ACTIONS(2030),\n    [anon_sym_float4] = ACTIONS(2030),\n    [anon_sym_float3x3] = ACTIONS(2030),\n    [anon_sym_float2x2] = ACTIONS(2030),\n    [anon_sym_float4x4] = ACTIONS(2030),\n    [anon_sym_int2] = ACTIONS(2030),\n    [anon_sym_int3] = ACTIONS(2030),\n    [anon_sym_int4] = ACTIONS(2030),\n    [anon_sym_int3x3] = ACTIONS(2030),\n    [anon_sym_int2x2] = ACTIONS(2030),\n    [anon_sym_int4x4] = ACTIONS(2030),\n    [anon_sym_boolean] = ACTIONS(2030),\n    [anon_sym_string] = ACTIONS(2030),\n    [anon_sym_symbol] = ACTIONS(2030),\n    [anon_sym_workgroup] = ACTIONS(2030),\n    [anon_sym_get] = ACTIONS(2030),\n    [anon_sym_set] = ACTIONS(2030),\n    [anon_sym_trait] = ACTIONS(2030),\n    [anon_sym_impl] = ACTIONS(2030),\n    [anon_sym_enum] = ACTIONS(2030),\n    [anon_sym_shader] = ACTIONS(2030),\n  },\n  [584] = {\n    [ts_builtin_sym_end] = ACTIONS(2032),\n    [sym_identifier] = ACTIONS(2034),\n    [anon_sym_pub] = ACTIONS(2034),\n    [anon_sym_export] = ACTIONS(2034),\n    [anon_sym_type] = ACTIONS(2034),\n    [anon_sym_namespace] = ACTIONS(2034),\n    [anon_sym_LBRACE] = ACTIONS(2032),\n    [anon_sym_RBRACE] = ACTIONS(2032),\n    [anon_sym_typeof] = ACTIONS(2034),\n    [anon_sym_import] = ACTIONS(2034),\n    [anon_sym_var] = ACTIONS(2034),\n    [anon_sym_let] = ACTIONS(2034),\n    [anon_sym_const] = ACTIONS(2034),\n    [anon_sym_BANG] = ACTIONS(2032),\n    [anon_sym_else] = ACTIONS(2034),\n    [anon_sym_if] = ACTIONS(2034),\n    [anon_sym_switch] = ACTIONS(2034),\n    [anon_sym_for] = ACTIONS(2034),\n    [anon_sym_LPAREN] = ACTIONS(2032),\n    [anon_sym_await] = ACTIONS(2034),\n    [anon_sym_while] = ACTIONS(2034),\n    [anon_sym_do] = ACTIONS(2034),\n    [anon_sym_try] = ACTIONS(2034),\n    [anon_sym_with] = ACTIONS(2034),\n    [anon_sym_break] = ACTIONS(2034),\n    [anon_sym_continue] = ACTIONS(2034),\n    [anon_sym_debugger] = ACTIONS(2034),\n    [anon_sym_return] = ACTIONS(2034),\n    [anon_sym_throw] = ACTIONS(2034),\n    [anon_sym_SEMI] = ACTIONS(2032),\n    [anon_sym_case] = ACTIONS(2034),\n    [anon_sym_default] = ACTIONS(2034),\n    [anon_sym_yield] = ACTIONS(2034),\n    [anon_sym_LBRACK] = ACTIONS(2032),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2032),\n    [anon_sym_LT] = ACTIONS(2034),\n    [anon_sym_SLASH] = ACTIONS(2034),\n    [anon_sym_struct] = ACTIONS(2034),\n    [anon_sym_async] = ACTIONS(2034),\n    [anon_sym_fn] = ACTIONS(2034),\n    [anon_sym_fn_STAR] = ACTIONS(2032),\n    [anon_sym_new] = ACTIONS(2034),\n    [anon_sym_PLUS] = ACTIONS(2034),\n    [anon_sym_DASH] = ACTIONS(2034),\n    [anon_sym_TILDE] = ACTIONS(2032),\n    [anon_sym_void] = ACTIONS(2034),\n    [anon_sym_delete] = ACTIONS(2034),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2032),\n    [anon_sym_DASH_DASH] = ACTIONS(2032),\n    [anon_sym_DQUOTE] = ACTIONS(2032),\n    [anon_sym_SQUOTE] = ACTIONS(2032),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2032),\n    [sym_number] = ACTIONS(2032),\n    [sym_this] = ACTIONS(2034),\n    [sym_super] = ACTIONS(2034),\n    [sym_true] = ACTIONS(2034),\n    [sym_false] = ACTIONS(2034),\n    [sym_null] = ACTIONS(2034),\n    [sym_undefined] = ACTIONS(2034),\n    [anon_sym_AT] = ACTIONS(2032),\n    [anon_sym_static] = ACTIONS(2034),\n    [anon_sym_declare] = ACTIONS(2034),\n    [anon_sym_public] = ACTIONS(2034),\n    [anon_sym_private] = ACTIONS(2034),\n    [anon_sym_protected] = ACTIONS(2034),\n    [anon_sym_override] = ACTIONS(2034),\n    [anon_sym_readonly] = ACTIONS(2034),\n    [anon_sym_module] = ACTIONS(2034),\n    [anon_sym_any] = ACTIONS(2034),\n    [anon_sym_number] = ACTIONS(2034),\n    [anon_sym_int] = ACTIONS(2034),\n    [anon_sym_float] = ACTIONS(2034),\n    [anon_sym_float2] = ACTIONS(2034),\n    [anon_sym_float3] = ACTIONS(2034),\n    [anon_sym_float4] = ACTIONS(2034),\n    [anon_sym_float3x3] = ACTIONS(2034),\n    [anon_sym_float2x2] = ACTIONS(2034),\n    [anon_sym_float4x4] = ACTIONS(2034),\n    [anon_sym_int2] = ACTIONS(2034),\n    [anon_sym_int3] = ACTIONS(2034),\n    [anon_sym_int4] = ACTIONS(2034),\n    [anon_sym_int3x3] = ACTIONS(2034),\n    [anon_sym_int2x2] = ACTIONS(2034),\n    [anon_sym_int4x4] = ACTIONS(2034),\n    [anon_sym_boolean] = ACTIONS(2034),\n    [anon_sym_string] = ACTIONS(2034),\n    [anon_sym_symbol] = ACTIONS(2034),\n    [anon_sym_workgroup] = ACTIONS(2034),\n    [anon_sym_get] = ACTIONS(2034),\n    [anon_sym_set] = ACTIONS(2034),\n    [anon_sym_trait] = ACTIONS(2034),\n    [anon_sym_impl] = ACTIONS(2034),\n    [anon_sym_enum] = ACTIONS(2034),\n    [anon_sym_shader] = ACTIONS(2034),\n  },\n  [585] = {\n    [ts_builtin_sym_end] = ACTIONS(2020),\n    [sym_identifier] = ACTIONS(2022),\n    [anon_sym_pub] = ACTIONS(2022),\n    [anon_sym_export] = ACTIONS(2022),\n    [anon_sym_type] = ACTIONS(2022),\n    [anon_sym_namespace] = ACTIONS(2022),\n    [anon_sym_LBRACE] = ACTIONS(2020),\n    [anon_sym_RBRACE] = ACTIONS(2020),\n    [anon_sym_typeof] = ACTIONS(2022),\n    [anon_sym_import] = ACTIONS(2022),\n    [anon_sym_var] = ACTIONS(2022),\n    [anon_sym_let] = ACTIONS(2022),\n    [anon_sym_const] = ACTIONS(2022),\n    [anon_sym_BANG] = ACTIONS(2020),\n    [anon_sym_else] = ACTIONS(2022),\n    [anon_sym_if] = ACTIONS(2022),\n    [anon_sym_switch] = ACTIONS(2022),\n    [anon_sym_for] = ACTIONS(2022),\n    [anon_sym_LPAREN] = ACTIONS(2020),\n    [anon_sym_await] = ACTIONS(2022),\n    [anon_sym_while] = ACTIONS(2022),\n    [anon_sym_do] = ACTIONS(2022),\n    [anon_sym_try] = ACTIONS(2022),\n    [anon_sym_with] = ACTIONS(2022),\n    [anon_sym_break] = ACTIONS(2022),\n    [anon_sym_continue] = ACTIONS(2022),\n    [anon_sym_debugger] = ACTIONS(2022),\n    [anon_sym_return] = ACTIONS(2022),\n    [anon_sym_throw] = ACTIONS(2022),\n    [anon_sym_SEMI] = ACTIONS(2020),\n    [anon_sym_case] = ACTIONS(2022),\n    [anon_sym_default] = ACTIONS(2022),\n    [anon_sym_yield] = ACTIONS(2022),\n    [anon_sym_LBRACK] = ACTIONS(2020),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2020),\n    [anon_sym_LT] = ACTIONS(2022),\n    [anon_sym_SLASH] = ACTIONS(2022),\n    [anon_sym_struct] = ACTIONS(2022),\n    [anon_sym_async] = ACTIONS(2022),\n    [anon_sym_fn] = ACTIONS(2022),\n    [anon_sym_fn_STAR] = ACTIONS(2020),\n    [anon_sym_new] = ACTIONS(2022),\n    [anon_sym_PLUS] = ACTIONS(2022),\n    [anon_sym_DASH] = ACTIONS(2022),\n    [anon_sym_TILDE] = ACTIONS(2020),\n    [anon_sym_void] = ACTIONS(2022),\n    [anon_sym_delete] = ACTIONS(2022),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2020),\n    [anon_sym_DASH_DASH] = ACTIONS(2020),\n    [anon_sym_DQUOTE] = ACTIONS(2020),\n    [anon_sym_SQUOTE] = ACTIONS(2020),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2020),\n    [sym_number] = ACTIONS(2020),\n    [sym_this] = ACTIONS(2022),\n    [sym_super] = ACTIONS(2022),\n    [sym_true] = ACTIONS(2022),\n    [sym_false] = ACTIONS(2022),\n    [sym_null] = ACTIONS(2022),\n    [sym_undefined] = ACTIONS(2022),\n    [anon_sym_AT] = ACTIONS(2020),\n    [anon_sym_static] = ACTIONS(2022),\n    [anon_sym_declare] = ACTIONS(2022),\n    [anon_sym_public] = ACTIONS(2022),\n    [anon_sym_private] = ACTIONS(2022),\n    [anon_sym_protected] = ACTIONS(2022),\n    [anon_sym_override] = ACTIONS(2022),\n    [anon_sym_readonly] = ACTIONS(2022),\n    [anon_sym_module] = ACTIONS(2022),\n    [anon_sym_any] = ACTIONS(2022),\n    [anon_sym_number] = ACTIONS(2022),\n    [anon_sym_int] = ACTIONS(2022),\n    [anon_sym_float] = ACTIONS(2022),\n    [anon_sym_float2] = ACTIONS(2022),\n    [anon_sym_float3] = ACTIONS(2022),\n    [anon_sym_float4] = ACTIONS(2022),\n    [anon_sym_float3x3] = ACTIONS(2022),\n    [anon_sym_float2x2] = ACTIONS(2022),\n    [anon_sym_float4x4] = ACTIONS(2022),\n    [anon_sym_int2] = ACTIONS(2022),\n    [anon_sym_int3] = ACTIONS(2022),\n    [anon_sym_int4] = ACTIONS(2022),\n    [anon_sym_int3x3] = ACTIONS(2022),\n    [anon_sym_int2x2] = ACTIONS(2022),\n    [anon_sym_int4x4] = ACTIONS(2022),\n    [anon_sym_boolean] = ACTIONS(2022),\n    [anon_sym_string] = ACTIONS(2022),\n    [anon_sym_symbol] = ACTIONS(2022),\n    [anon_sym_workgroup] = ACTIONS(2022),\n    [anon_sym_get] = ACTIONS(2022),\n    [anon_sym_set] = ACTIONS(2022),\n    [anon_sym_trait] = ACTIONS(2022),\n    [anon_sym_impl] = ACTIONS(2022),\n    [anon_sym_enum] = ACTIONS(2022),\n    [anon_sym_shader] = ACTIONS(2022),\n  },\n  [586] = {\n    [ts_builtin_sym_end] = ACTIONS(2036),\n    [sym_identifier] = ACTIONS(2038),\n    [anon_sym_pub] = ACTIONS(2038),\n    [anon_sym_export] = ACTIONS(2038),\n    [anon_sym_type] = ACTIONS(2038),\n    [anon_sym_namespace] = ACTIONS(2038),\n    [anon_sym_LBRACE] = ACTIONS(2036),\n    [anon_sym_RBRACE] = ACTIONS(2036),\n    [anon_sym_typeof] = ACTIONS(2038),\n    [anon_sym_import] = ACTIONS(2038),\n    [anon_sym_var] = ACTIONS(2038),\n    [anon_sym_let] = ACTIONS(2038),\n    [anon_sym_const] = ACTIONS(2038),\n    [anon_sym_BANG] = ACTIONS(2036),\n    [anon_sym_else] = ACTIONS(2038),\n    [anon_sym_if] = ACTIONS(2038),\n    [anon_sym_switch] = ACTIONS(2038),\n    [anon_sym_for] = ACTIONS(2038),\n    [anon_sym_LPAREN] = ACTIONS(2036),\n    [anon_sym_await] = ACTIONS(2038),\n    [anon_sym_while] = ACTIONS(2038),\n    [anon_sym_do] = ACTIONS(2038),\n    [anon_sym_try] = ACTIONS(2038),\n    [anon_sym_with] = ACTIONS(2038),\n    [anon_sym_break] = ACTIONS(2038),\n    [anon_sym_continue] = ACTIONS(2038),\n    [anon_sym_debugger] = ACTIONS(2038),\n    [anon_sym_return] = ACTIONS(2038),\n    [anon_sym_throw] = ACTIONS(2038),\n    [anon_sym_SEMI] = ACTIONS(2036),\n    [anon_sym_case] = ACTIONS(2038),\n    [anon_sym_default] = ACTIONS(2038),\n    [anon_sym_yield] = ACTIONS(2038),\n    [anon_sym_LBRACK] = ACTIONS(2036),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2036),\n    [anon_sym_LT] = ACTIONS(2038),\n    [anon_sym_SLASH] = ACTIONS(2038),\n    [anon_sym_struct] = ACTIONS(2038),\n    [anon_sym_async] = ACTIONS(2038),\n    [anon_sym_fn] = ACTIONS(2038),\n    [anon_sym_fn_STAR] = ACTIONS(2036),\n    [anon_sym_new] = ACTIONS(2038),\n    [anon_sym_PLUS] = ACTIONS(2038),\n    [anon_sym_DASH] = ACTIONS(2038),\n    [anon_sym_TILDE] = ACTIONS(2036),\n    [anon_sym_void] = ACTIONS(2038),\n    [anon_sym_delete] = ACTIONS(2038),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2036),\n    [anon_sym_DASH_DASH] = ACTIONS(2036),\n    [anon_sym_DQUOTE] = ACTIONS(2036),\n    [anon_sym_SQUOTE] = ACTIONS(2036),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2036),\n    [sym_number] = ACTIONS(2036),\n    [sym_this] = ACTIONS(2038),\n    [sym_super] = ACTIONS(2038),\n    [sym_true] = ACTIONS(2038),\n    [sym_false] = ACTIONS(2038),\n    [sym_null] = ACTIONS(2038),\n    [sym_undefined] = ACTIONS(2038),\n    [anon_sym_AT] = ACTIONS(2036),\n    [anon_sym_static] = ACTIONS(2038),\n    [anon_sym_declare] = ACTIONS(2038),\n    [anon_sym_public] = ACTIONS(2038),\n    [anon_sym_private] = ACTIONS(2038),\n    [anon_sym_protected] = ACTIONS(2038),\n    [anon_sym_override] = ACTIONS(2038),\n    [anon_sym_readonly] = ACTIONS(2038),\n    [anon_sym_module] = ACTIONS(2038),\n    [anon_sym_any] = ACTIONS(2038),\n    [anon_sym_number] = ACTIONS(2038),\n    [anon_sym_int] = ACTIONS(2038),\n    [anon_sym_float] = ACTIONS(2038),\n    [anon_sym_float2] = ACTIONS(2038),\n    [anon_sym_float3] = ACTIONS(2038),\n    [anon_sym_float4] = ACTIONS(2038),\n    [anon_sym_float3x3] = ACTIONS(2038),\n    [anon_sym_float2x2] = ACTIONS(2038),\n    [anon_sym_float4x4] = ACTIONS(2038),\n    [anon_sym_int2] = ACTIONS(2038),\n    [anon_sym_int3] = ACTIONS(2038),\n    [anon_sym_int4] = ACTIONS(2038),\n    [anon_sym_int3x3] = ACTIONS(2038),\n    [anon_sym_int2x2] = ACTIONS(2038),\n    [anon_sym_int4x4] = ACTIONS(2038),\n    [anon_sym_boolean] = ACTIONS(2038),\n    [anon_sym_string] = ACTIONS(2038),\n    [anon_sym_symbol] = ACTIONS(2038),\n    [anon_sym_workgroup] = ACTIONS(2038),\n    [anon_sym_get] = ACTIONS(2038),\n    [anon_sym_set] = ACTIONS(2038),\n    [anon_sym_trait] = ACTIONS(2038),\n    [anon_sym_impl] = ACTIONS(2038),\n    [anon_sym_enum] = ACTIONS(2038),\n    [anon_sym_shader] = ACTIONS(2038),\n  },\n  [587] = {\n    [ts_builtin_sym_end] = ACTIONS(2040),\n    [sym_identifier] = ACTIONS(2042),\n    [anon_sym_pub] = ACTIONS(2042),\n    [anon_sym_export] = ACTIONS(2042),\n    [anon_sym_type] = ACTIONS(2042),\n    [anon_sym_namespace] = ACTIONS(2042),\n    [anon_sym_LBRACE] = ACTIONS(2040),\n    [anon_sym_RBRACE] = ACTIONS(2040),\n    [anon_sym_typeof] = ACTIONS(2042),\n    [anon_sym_import] = ACTIONS(2042),\n    [anon_sym_var] = ACTIONS(2042),\n    [anon_sym_let] = ACTIONS(2042),\n    [anon_sym_const] = ACTIONS(2042),\n    [anon_sym_BANG] = ACTIONS(2040),\n    [anon_sym_else] = ACTIONS(2042),\n    [anon_sym_if] = ACTIONS(2042),\n    [anon_sym_switch] = ACTIONS(2042),\n    [anon_sym_for] = ACTIONS(2042),\n    [anon_sym_LPAREN] = ACTIONS(2040),\n    [anon_sym_await] = ACTIONS(2042),\n    [anon_sym_while] = ACTIONS(2042),\n    [anon_sym_do] = ACTIONS(2042),\n    [anon_sym_try] = ACTIONS(2042),\n    [anon_sym_with] = ACTIONS(2042),\n    [anon_sym_break] = ACTIONS(2042),\n    [anon_sym_continue] = ACTIONS(2042),\n    [anon_sym_debugger] = ACTIONS(2042),\n    [anon_sym_return] = ACTIONS(2042),\n    [anon_sym_throw] = ACTIONS(2042),\n    [anon_sym_SEMI] = ACTIONS(2040),\n    [anon_sym_case] = ACTIONS(2042),\n    [anon_sym_default] = ACTIONS(2042),\n    [anon_sym_yield] = ACTIONS(2042),\n    [anon_sym_LBRACK] = ACTIONS(2040),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2040),\n    [anon_sym_LT] = ACTIONS(2042),\n    [anon_sym_SLASH] = ACTIONS(2042),\n    [anon_sym_struct] = ACTIONS(2042),\n    [anon_sym_async] = ACTIONS(2042),\n    [anon_sym_fn] = ACTIONS(2042),\n    [anon_sym_fn_STAR] = ACTIONS(2040),\n    [anon_sym_new] = ACTIONS(2042),\n    [anon_sym_PLUS] = ACTIONS(2042),\n    [anon_sym_DASH] = ACTIONS(2042),\n    [anon_sym_TILDE] = ACTIONS(2040),\n    [anon_sym_void] = ACTIONS(2042),\n    [anon_sym_delete] = ACTIONS(2042),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2040),\n    [anon_sym_DASH_DASH] = ACTIONS(2040),\n    [anon_sym_DQUOTE] = ACTIONS(2040),\n    [anon_sym_SQUOTE] = ACTIONS(2040),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2040),\n    [sym_number] = ACTIONS(2040),\n    [sym_this] = ACTIONS(2042),\n    [sym_super] = ACTIONS(2042),\n    [sym_true] = ACTIONS(2042),\n    [sym_false] = ACTIONS(2042),\n    [sym_null] = ACTIONS(2042),\n    [sym_undefined] = ACTIONS(2042),\n    [anon_sym_AT] = ACTIONS(2040),\n    [anon_sym_static] = ACTIONS(2042),\n    [anon_sym_declare] = ACTIONS(2042),\n    [anon_sym_public] = ACTIONS(2042),\n    [anon_sym_private] = ACTIONS(2042),\n    [anon_sym_protected] = ACTIONS(2042),\n    [anon_sym_override] = ACTIONS(2042),\n    [anon_sym_readonly] = ACTIONS(2042),\n    [anon_sym_module] = ACTIONS(2042),\n    [anon_sym_any] = ACTIONS(2042),\n    [anon_sym_number] = ACTIONS(2042),\n    [anon_sym_int] = ACTIONS(2042),\n    [anon_sym_float] = ACTIONS(2042),\n    [anon_sym_float2] = ACTIONS(2042),\n    [anon_sym_float3] = ACTIONS(2042),\n    [anon_sym_float4] = ACTIONS(2042),\n    [anon_sym_float3x3] = ACTIONS(2042),\n    [anon_sym_float2x2] = ACTIONS(2042),\n    [anon_sym_float4x4] = ACTIONS(2042),\n    [anon_sym_int2] = ACTIONS(2042),\n    [anon_sym_int3] = ACTIONS(2042),\n    [anon_sym_int4] = ACTIONS(2042),\n    [anon_sym_int3x3] = ACTIONS(2042),\n    [anon_sym_int2x2] = ACTIONS(2042),\n    [anon_sym_int4x4] = ACTIONS(2042),\n    [anon_sym_boolean] = ACTIONS(2042),\n    [anon_sym_string] = ACTIONS(2042),\n    [anon_sym_symbol] = ACTIONS(2042),\n    [anon_sym_workgroup] = ACTIONS(2042),\n    [anon_sym_get] = ACTIONS(2042),\n    [anon_sym_set] = ACTIONS(2042),\n    [anon_sym_trait] = ACTIONS(2042),\n    [anon_sym_impl] = ACTIONS(2042),\n    [anon_sym_enum] = ACTIONS(2042),\n    [anon_sym_shader] = ACTIONS(2042),\n  },\n  [588] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [589] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [590] = {\n    [ts_builtin_sym_end] = ACTIONS(2044),\n    [sym_identifier] = ACTIONS(2046),\n    [anon_sym_pub] = ACTIONS(2046),\n    [anon_sym_export] = ACTIONS(2046),\n    [anon_sym_type] = ACTIONS(2046),\n    [anon_sym_namespace] = ACTIONS(2046),\n    [anon_sym_LBRACE] = ACTIONS(2044),\n    [anon_sym_RBRACE] = ACTIONS(2044),\n    [anon_sym_typeof] = ACTIONS(2046),\n    [anon_sym_import] = ACTIONS(2046),\n    [anon_sym_var] = ACTIONS(2046),\n    [anon_sym_let] = ACTIONS(2046),\n    [anon_sym_const] = ACTIONS(2046),\n    [anon_sym_BANG] = ACTIONS(2044),\n    [anon_sym_else] = ACTIONS(2046),\n    [anon_sym_if] = ACTIONS(2046),\n    [anon_sym_switch] = ACTIONS(2046),\n    [anon_sym_for] = ACTIONS(2046),\n    [anon_sym_LPAREN] = ACTIONS(2044),\n    [anon_sym_await] = ACTIONS(2046),\n    [anon_sym_while] = ACTIONS(2046),\n    [anon_sym_do] = ACTIONS(2046),\n    [anon_sym_try] = ACTIONS(2046),\n    [anon_sym_with] = ACTIONS(2046),\n    [anon_sym_break] = ACTIONS(2046),\n    [anon_sym_continue] = ACTIONS(2046),\n    [anon_sym_debugger] = ACTIONS(2046),\n    [anon_sym_return] = ACTIONS(2046),\n    [anon_sym_throw] = ACTIONS(2046),\n    [anon_sym_SEMI] = ACTIONS(2044),\n    [anon_sym_case] = ACTIONS(2046),\n    [anon_sym_default] = ACTIONS(2046),\n    [anon_sym_yield] = ACTIONS(2046),\n    [anon_sym_LBRACK] = ACTIONS(2044),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2044),\n    [anon_sym_LT] = ACTIONS(2046),\n    [anon_sym_SLASH] = ACTIONS(2046),\n    [anon_sym_struct] = ACTIONS(2046),\n    [anon_sym_async] = ACTIONS(2046),\n    [anon_sym_fn] = ACTIONS(2046),\n    [anon_sym_fn_STAR] = ACTIONS(2044),\n    [anon_sym_new] = ACTIONS(2046),\n    [anon_sym_PLUS] = ACTIONS(2046),\n    [anon_sym_DASH] = ACTIONS(2046),\n    [anon_sym_TILDE] = ACTIONS(2044),\n    [anon_sym_void] = ACTIONS(2046),\n    [anon_sym_delete] = ACTIONS(2046),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2044),\n    [anon_sym_DASH_DASH] = ACTIONS(2044),\n    [anon_sym_DQUOTE] = ACTIONS(2044),\n    [anon_sym_SQUOTE] = ACTIONS(2044),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2044),\n    [sym_number] = ACTIONS(2044),\n    [sym_this] = ACTIONS(2046),\n    [sym_super] = ACTIONS(2046),\n    [sym_true] = ACTIONS(2046),\n    [sym_false] = ACTIONS(2046),\n    [sym_null] = ACTIONS(2046),\n    [sym_undefined] = ACTIONS(2046),\n    [anon_sym_AT] = ACTIONS(2044),\n    [anon_sym_static] = ACTIONS(2046),\n    [anon_sym_declare] = ACTIONS(2046),\n    [anon_sym_public] = ACTIONS(2046),\n    [anon_sym_private] = ACTIONS(2046),\n    [anon_sym_protected] = ACTIONS(2046),\n    [anon_sym_override] = ACTIONS(2046),\n    [anon_sym_readonly] = ACTIONS(2046),\n    [anon_sym_module] = ACTIONS(2046),\n    [anon_sym_any] = ACTIONS(2046),\n    [anon_sym_number] = ACTIONS(2046),\n    [anon_sym_int] = ACTIONS(2046),\n    [anon_sym_float] = ACTIONS(2046),\n    [anon_sym_float2] = ACTIONS(2046),\n    [anon_sym_float3] = ACTIONS(2046),\n    [anon_sym_float4] = ACTIONS(2046),\n    [anon_sym_float3x3] = ACTIONS(2046),\n    [anon_sym_float2x2] = ACTIONS(2046),\n    [anon_sym_float4x4] = ACTIONS(2046),\n    [anon_sym_int2] = ACTIONS(2046),\n    [anon_sym_int3] = ACTIONS(2046),\n    [anon_sym_int4] = ACTIONS(2046),\n    [anon_sym_int3x3] = ACTIONS(2046),\n    [anon_sym_int2x2] = ACTIONS(2046),\n    [anon_sym_int4x4] = ACTIONS(2046),\n    [anon_sym_boolean] = ACTIONS(2046),\n    [anon_sym_string] = ACTIONS(2046),\n    [anon_sym_symbol] = ACTIONS(2046),\n    [anon_sym_workgroup] = ACTIONS(2046),\n    [anon_sym_get] = ACTIONS(2046),\n    [anon_sym_set] = ACTIONS(2046),\n    [anon_sym_trait] = ACTIONS(2046),\n    [anon_sym_impl] = ACTIONS(2046),\n    [anon_sym_enum] = ACTIONS(2046),\n    [anon_sym_shader] = ACTIONS(2046),\n  },\n  [591] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [592] = {\n    [ts_builtin_sym_end] = ACTIONS(2048),\n    [sym_identifier] = ACTIONS(2050),\n    [anon_sym_pub] = ACTIONS(2050),\n    [anon_sym_export] = ACTIONS(2050),\n    [anon_sym_type] = ACTIONS(2050),\n    [anon_sym_namespace] = ACTIONS(2050),\n    [anon_sym_LBRACE] = ACTIONS(2048),\n    [anon_sym_RBRACE] = ACTIONS(2048),\n    [anon_sym_typeof] = ACTIONS(2050),\n    [anon_sym_import] = ACTIONS(2050),\n    [anon_sym_var] = ACTIONS(2050),\n    [anon_sym_let] = ACTIONS(2050),\n    [anon_sym_const] = ACTIONS(2050),\n    [anon_sym_BANG] = ACTIONS(2048),\n    [anon_sym_else] = ACTIONS(2050),\n    [anon_sym_if] = ACTIONS(2050),\n    [anon_sym_switch] = ACTIONS(2050),\n    [anon_sym_for] = ACTIONS(2050),\n    [anon_sym_LPAREN] = ACTIONS(2048),\n    [anon_sym_await] = ACTIONS(2050),\n    [anon_sym_while] = ACTIONS(2050),\n    [anon_sym_do] = ACTIONS(2050),\n    [anon_sym_try] = ACTIONS(2050),\n    [anon_sym_with] = ACTIONS(2050),\n    [anon_sym_break] = ACTIONS(2050),\n    [anon_sym_continue] = ACTIONS(2050),\n    [anon_sym_debugger] = ACTIONS(2050),\n    [anon_sym_return] = ACTIONS(2050),\n    [anon_sym_throw] = ACTIONS(2050),\n    [anon_sym_SEMI] = ACTIONS(2048),\n    [anon_sym_case] = ACTIONS(2050),\n    [anon_sym_default] = ACTIONS(2050),\n    [anon_sym_yield] = ACTIONS(2050),\n    [anon_sym_LBRACK] = ACTIONS(2048),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2048),\n    [anon_sym_LT] = ACTIONS(2050),\n    [anon_sym_SLASH] = ACTIONS(2050),\n    [anon_sym_struct] = ACTIONS(2050),\n    [anon_sym_async] = ACTIONS(2050),\n    [anon_sym_fn] = ACTIONS(2050),\n    [anon_sym_fn_STAR] = ACTIONS(2048),\n    [anon_sym_new] = ACTIONS(2050),\n    [anon_sym_PLUS] = ACTIONS(2050),\n    [anon_sym_DASH] = ACTIONS(2050),\n    [anon_sym_TILDE] = ACTIONS(2048),\n    [anon_sym_void] = ACTIONS(2050),\n    [anon_sym_delete] = ACTIONS(2050),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2048),\n    [anon_sym_DASH_DASH] = ACTIONS(2048),\n    [anon_sym_DQUOTE] = ACTIONS(2048),\n    [anon_sym_SQUOTE] = ACTIONS(2048),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2048),\n    [sym_number] = ACTIONS(2048),\n    [sym_this] = ACTIONS(2050),\n    [sym_super] = ACTIONS(2050),\n    [sym_true] = ACTIONS(2050),\n    [sym_false] = ACTIONS(2050),\n    [sym_null] = ACTIONS(2050),\n    [sym_undefined] = ACTIONS(2050),\n    [anon_sym_AT] = ACTIONS(2048),\n    [anon_sym_static] = ACTIONS(2050),\n    [anon_sym_declare] = ACTIONS(2050),\n    [anon_sym_public] = ACTIONS(2050),\n    [anon_sym_private] = ACTIONS(2050),\n    [anon_sym_protected] = ACTIONS(2050),\n    [anon_sym_override] = ACTIONS(2050),\n    [anon_sym_readonly] = ACTIONS(2050),\n    [anon_sym_module] = ACTIONS(2050),\n    [anon_sym_any] = ACTIONS(2050),\n    [anon_sym_number] = ACTIONS(2050),\n    [anon_sym_int] = ACTIONS(2050),\n    [anon_sym_float] = ACTIONS(2050),\n    [anon_sym_float2] = ACTIONS(2050),\n    [anon_sym_float3] = ACTIONS(2050),\n    [anon_sym_float4] = ACTIONS(2050),\n    [anon_sym_float3x3] = ACTIONS(2050),\n    [anon_sym_float2x2] = ACTIONS(2050),\n    [anon_sym_float4x4] = ACTIONS(2050),\n    [anon_sym_int2] = ACTIONS(2050),\n    [anon_sym_int3] = ACTIONS(2050),\n    [anon_sym_int4] = ACTIONS(2050),\n    [anon_sym_int3x3] = ACTIONS(2050),\n    [anon_sym_int2x2] = ACTIONS(2050),\n    [anon_sym_int4x4] = ACTIONS(2050),\n    [anon_sym_boolean] = ACTIONS(2050),\n    [anon_sym_string] = ACTIONS(2050),\n    [anon_sym_symbol] = ACTIONS(2050),\n    [anon_sym_workgroup] = ACTIONS(2050),\n    [anon_sym_get] = ACTIONS(2050),\n    [anon_sym_set] = ACTIONS(2050),\n    [anon_sym_trait] = ACTIONS(2050),\n    [anon_sym_impl] = ACTIONS(2050),\n    [anon_sym_enum] = ACTIONS(2050),\n    [anon_sym_shader] = ACTIONS(2050),\n  },\n  [593] = {\n    [ts_builtin_sym_end] = ACTIONS(2052),\n    [sym_identifier] = ACTIONS(2054),\n    [anon_sym_pub] = ACTIONS(2054),\n    [anon_sym_export] = ACTIONS(2054),\n    [anon_sym_type] = ACTIONS(2054),\n    [anon_sym_namespace] = ACTIONS(2054),\n    [anon_sym_LBRACE] = ACTIONS(2052),\n    [anon_sym_RBRACE] = ACTIONS(2052),\n    [anon_sym_typeof] = ACTIONS(2054),\n    [anon_sym_import] = ACTIONS(2054),\n    [anon_sym_var] = ACTIONS(2054),\n    [anon_sym_let] = ACTIONS(2054),\n    [anon_sym_const] = ACTIONS(2054),\n    [anon_sym_BANG] = ACTIONS(2052),\n    [anon_sym_else] = ACTIONS(2054),\n    [anon_sym_if] = ACTIONS(2054),\n    [anon_sym_switch] = ACTIONS(2054),\n    [anon_sym_for] = ACTIONS(2054),\n    [anon_sym_LPAREN] = ACTIONS(2052),\n    [anon_sym_await] = ACTIONS(2054),\n    [anon_sym_while] = ACTIONS(2054),\n    [anon_sym_do] = ACTIONS(2054),\n    [anon_sym_try] = ACTIONS(2054),\n    [anon_sym_with] = ACTIONS(2054),\n    [anon_sym_break] = ACTIONS(2054),\n    [anon_sym_continue] = ACTIONS(2054),\n    [anon_sym_debugger] = ACTIONS(2054),\n    [anon_sym_return] = ACTIONS(2054),\n    [anon_sym_throw] = ACTIONS(2054),\n    [anon_sym_SEMI] = ACTIONS(2052),\n    [anon_sym_case] = ACTIONS(2054),\n    [anon_sym_default] = ACTIONS(2054),\n    [anon_sym_yield] = ACTIONS(2054),\n    [anon_sym_LBRACK] = ACTIONS(2052),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2052),\n    [anon_sym_LT] = ACTIONS(2054),\n    [anon_sym_SLASH] = ACTIONS(2054),\n    [anon_sym_struct] = ACTIONS(2054),\n    [anon_sym_async] = ACTIONS(2054),\n    [anon_sym_fn] = ACTIONS(2054),\n    [anon_sym_fn_STAR] = ACTIONS(2052),\n    [anon_sym_new] = ACTIONS(2054),\n    [anon_sym_PLUS] = ACTIONS(2054),\n    [anon_sym_DASH] = ACTIONS(2054),\n    [anon_sym_TILDE] = ACTIONS(2052),\n    [anon_sym_void] = ACTIONS(2054),\n    [anon_sym_delete] = ACTIONS(2054),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2052),\n    [anon_sym_DASH_DASH] = ACTIONS(2052),\n    [anon_sym_DQUOTE] = ACTIONS(2052),\n    [anon_sym_SQUOTE] = ACTIONS(2052),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2052),\n    [sym_number] = ACTIONS(2052),\n    [sym_this] = ACTIONS(2054),\n    [sym_super] = ACTIONS(2054),\n    [sym_true] = ACTIONS(2054),\n    [sym_false] = ACTIONS(2054),\n    [sym_null] = ACTIONS(2054),\n    [sym_undefined] = ACTIONS(2054),\n    [anon_sym_AT] = ACTIONS(2052),\n    [anon_sym_static] = ACTIONS(2054),\n    [anon_sym_declare] = ACTIONS(2054),\n    [anon_sym_public] = ACTIONS(2054),\n    [anon_sym_private] = ACTIONS(2054),\n    [anon_sym_protected] = ACTIONS(2054),\n    [anon_sym_override] = ACTIONS(2054),\n    [anon_sym_readonly] = ACTIONS(2054),\n    [anon_sym_module] = ACTIONS(2054),\n    [anon_sym_any] = ACTIONS(2054),\n    [anon_sym_number] = ACTIONS(2054),\n    [anon_sym_int] = ACTIONS(2054),\n    [anon_sym_float] = ACTIONS(2054),\n    [anon_sym_float2] = ACTIONS(2054),\n    [anon_sym_float3] = ACTIONS(2054),\n    [anon_sym_float4] = ACTIONS(2054),\n    [anon_sym_float3x3] = ACTIONS(2054),\n    [anon_sym_float2x2] = ACTIONS(2054),\n    [anon_sym_float4x4] = ACTIONS(2054),\n    [anon_sym_int2] = ACTIONS(2054),\n    [anon_sym_int3] = ACTIONS(2054),\n    [anon_sym_int4] = ACTIONS(2054),\n    [anon_sym_int3x3] = ACTIONS(2054),\n    [anon_sym_int2x2] = ACTIONS(2054),\n    [anon_sym_int4x4] = ACTIONS(2054),\n    [anon_sym_boolean] = ACTIONS(2054),\n    [anon_sym_string] = ACTIONS(2054),\n    [anon_sym_symbol] = ACTIONS(2054),\n    [anon_sym_workgroup] = ACTIONS(2054),\n    [anon_sym_get] = ACTIONS(2054),\n    [anon_sym_set] = ACTIONS(2054),\n    [anon_sym_trait] = ACTIONS(2054),\n    [anon_sym_impl] = ACTIONS(2054),\n    [anon_sym_enum] = ACTIONS(2054),\n    [anon_sym_shader] = ACTIONS(2054),\n  },\n  [594] = {\n    [ts_builtin_sym_end] = ACTIONS(2056),\n    [sym_identifier] = ACTIONS(2058),\n    [anon_sym_pub] = ACTIONS(2058),\n    [anon_sym_export] = ACTIONS(2058),\n    [anon_sym_type] = ACTIONS(2058),\n    [anon_sym_namespace] = ACTIONS(2058),\n    [anon_sym_LBRACE] = ACTIONS(2056),\n    [anon_sym_RBRACE] = ACTIONS(2056),\n    [anon_sym_typeof] = ACTIONS(2058),\n    [anon_sym_import] = ACTIONS(2058),\n    [anon_sym_var] = ACTIONS(2058),\n    [anon_sym_let] = ACTIONS(2058),\n    [anon_sym_const] = ACTIONS(2058),\n    [anon_sym_BANG] = ACTIONS(2056),\n    [anon_sym_else] = ACTIONS(2058),\n    [anon_sym_if] = ACTIONS(2058),\n    [anon_sym_switch] = ACTIONS(2058),\n    [anon_sym_for] = ACTIONS(2058),\n    [anon_sym_LPAREN] = ACTIONS(2056),\n    [anon_sym_await] = ACTIONS(2058),\n    [anon_sym_while] = ACTIONS(2058),\n    [anon_sym_do] = ACTIONS(2058),\n    [anon_sym_try] = ACTIONS(2058),\n    [anon_sym_with] = ACTIONS(2058),\n    [anon_sym_break] = ACTIONS(2058),\n    [anon_sym_continue] = ACTIONS(2058),\n    [anon_sym_debugger] = ACTIONS(2058),\n    [anon_sym_return] = ACTIONS(2058),\n    [anon_sym_throw] = ACTIONS(2058),\n    [anon_sym_SEMI] = ACTIONS(2056),\n    [anon_sym_case] = ACTIONS(2058),\n    [anon_sym_default] = ACTIONS(2058),\n    [anon_sym_yield] = ACTIONS(2058),\n    [anon_sym_LBRACK] = ACTIONS(2056),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2056),\n    [anon_sym_LT] = ACTIONS(2058),\n    [anon_sym_SLASH] = ACTIONS(2058),\n    [anon_sym_struct] = ACTIONS(2058),\n    [anon_sym_async] = ACTIONS(2058),\n    [anon_sym_fn] = ACTIONS(2058),\n    [anon_sym_fn_STAR] = ACTIONS(2056),\n    [anon_sym_new] = ACTIONS(2058),\n    [anon_sym_PLUS] = ACTIONS(2058),\n    [anon_sym_DASH] = ACTIONS(2058),\n    [anon_sym_TILDE] = ACTIONS(2056),\n    [anon_sym_void] = ACTIONS(2058),\n    [anon_sym_delete] = ACTIONS(2058),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2056),\n    [anon_sym_DASH_DASH] = ACTIONS(2056),\n    [anon_sym_DQUOTE] = ACTIONS(2056),\n    [anon_sym_SQUOTE] = ACTIONS(2056),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2056),\n    [sym_number] = ACTIONS(2056),\n    [sym_this] = ACTIONS(2058),\n    [sym_super] = ACTIONS(2058),\n    [sym_true] = ACTIONS(2058),\n    [sym_false] = ACTIONS(2058),\n    [sym_null] = ACTIONS(2058),\n    [sym_undefined] = ACTIONS(2058),\n    [anon_sym_AT] = ACTIONS(2056),\n    [anon_sym_static] = ACTIONS(2058),\n    [anon_sym_declare] = ACTIONS(2058),\n    [anon_sym_public] = ACTIONS(2058),\n    [anon_sym_private] = ACTIONS(2058),\n    [anon_sym_protected] = ACTIONS(2058),\n    [anon_sym_override] = ACTIONS(2058),\n    [anon_sym_readonly] = ACTIONS(2058),\n    [anon_sym_module] = ACTIONS(2058),\n    [anon_sym_any] = ACTIONS(2058),\n    [anon_sym_number] = ACTIONS(2058),\n    [anon_sym_int] = ACTIONS(2058),\n    [anon_sym_float] = ACTIONS(2058),\n    [anon_sym_float2] = ACTIONS(2058),\n    [anon_sym_float3] = ACTIONS(2058),\n    [anon_sym_float4] = ACTIONS(2058),\n    [anon_sym_float3x3] = ACTIONS(2058),\n    [anon_sym_float2x2] = ACTIONS(2058),\n    [anon_sym_float4x4] = ACTIONS(2058),\n    [anon_sym_int2] = ACTIONS(2058),\n    [anon_sym_int3] = ACTIONS(2058),\n    [anon_sym_int4] = ACTIONS(2058),\n    [anon_sym_int3x3] = ACTIONS(2058),\n    [anon_sym_int2x2] = ACTIONS(2058),\n    [anon_sym_int4x4] = ACTIONS(2058),\n    [anon_sym_boolean] = ACTIONS(2058),\n    [anon_sym_string] = ACTIONS(2058),\n    [anon_sym_symbol] = ACTIONS(2058),\n    [anon_sym_workgroup] = ACTIONS(2058),\n    [anon_sym_get] = ACTIONS(2058),\n    [anon_sym_set] = ACTIONS(2058),\n    [anon_sym_trait] = ACTIONS(2058),\n    [anon_sym_impl] = ACTIONS(2058),\n    [anon_sym_enum] = ACTIONS(2058),\n    [anon_sym_shader] = ACTIONS(2058),\n  },\n  [595] = {\n    [ts_builtin_sym_end] = ACTIONS(2060),\n    [sym_identifier] = ACTIONS(2062),\n    [anon_sym_pub] = ACTIONS(2062),\n    [anon_sym_export] = ACTIONS(2062),\n    [anon_sym_type] = ACTIONS(2062),\n    [anon_sym_namespace] = ACTIONS(2062),\n    [anon_sym_LBRACE] = ACTIONS(2060),\n    [anon_sym_RBRACE] = ACTIONS(2060),\n    [anon_sym_typeof] = ACTIONS(2062),\n    [anon_sym_import] = ACTIONS(2062),\n    [anon_sym_var] = ACTIONS(2062),\n    [anon_sym_let] = ACTIONS(2062),\n    [anon_sym_const] = ACTIONS(2062),\n    [anon_sym_BANG] = ACTIONS(2060),\n    [anon_sym_else] = ACTIONS(2062),\n    [anon_sym_if] = ACTIONS(2062),\n    [anon_sym_switch] = ACTIONS(2062),\n    [anon_sym_for] = ACTIONS(2062),\n    [anon_sym_LPAREN] = ACTIONS(2060),\n    [anon_sym_await] = ACTIONS(2062),\n    [anon_sym_while] = ACTIONS(2062),\n    [anon_sym_do] = ACTIONS(2062),\n    [anon_sym_try] = ACTIONS(2062),\n    [anon_sym_with] = ACTIONS(2062),\n    [anon_sym_break] = ACTIONS(2062),\n    [anon_sym_continue] = ACTIONS(2062),\n    [anon_sym_debugger] = ACTIONS(2062),\n    [anon_sym_return] = ACTIONS(2062),\n    [anon_sym_throw] = ACTIONS(2062),\n    [anon_sym_SEMI] = ACTIONS(2060),\n    [anon_sym_case] = ACTIONS(2062),\n    [anon_sym_default] = ACTIONS(2062),\n    [anon_sym_yield] = ACTIONS(2062),\n    [anon_sym_LBRACK] = ACTIONS(2060),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2060),\n    [anon_sym_LT] = ACTIONS(2062),\n    [anon_sym_SLASH] = ACTIONS(2062),\n    [anon_sym_struct] = ACTIONS(2062),\n    [anon_sym_async] = ACTIONS(2062),\n    [anon_sym_fn] = ACTIONS(2062),\n    [anon_sym_fn_STAR] = ACTIONS(2060),\n    [anon_sym_new] = ACTIONS(2062),\n    [anon_sym_PLUS] = ACTIONS(2062),\n    [anon_sym_DASH] = ACTIONS(2062),\n    [anon_sym_TILDE] = ACTIONS(2060),\n    [anon_sym_void] = ACTIONS(2062),\n    [anon_sym_delete] = ACTIONS(2062),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2060),\n    [anon_sym_DASH_DASH] = ACTIONS(2060),\n    [anon_sym_DQUOTE] = ACTIONS(2060),\n    [anon_sym_SQUOTE] = ACTIONS(2060),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2060),\n    [sym_number] = ACTIONS(2060),\n    [sym_this] = ACTIONS(2062),\n    [sym_super] = ACTIONS(2062),\n    [sym_true] = ACTIONS(2062),\n    [sym_false] = ACTIONS(2062),\n    [sym_null] = ACTIONS(2062),\n    [sym_undefined] = ACTIONS(2062),\n    [anon_sym_AT] = ACTIONS(2060),\n    [anon_sym_static] = ACTIONS(2062),\n    [anon_sym_declare] = ACTIONS(2062),\n    [anon_sym_public] = ACTIONS(2062),\n    [anon_sym_private] = ACTIONS(2062),\n    [anon_sym_protected] = ACTIONS(2062),\n    [anon_sym_override] = ACTIONS(2062),\n    [anon_sym_readonly] = ACTIONS(2062),\n    [anon_sym_module] = ACTIONS(2062),\n    [anon_sym_any] = ACTIONS(2062),\n    [anon_sym_number] = ACTIONS(2062),\n    [anon_sym_int] = ACTIONS(2062),\n    [anon_sym_float] = ACTIONS(2062),\n    [anon_sym_float2] = ACTIONS(2062),\n    [anon_sym_float3] = ACTIONS(2062),\n    [anon_sym_float4] = ACTIONS(2062),\n    [anon_sym_float3x3] = ACTIONS(2062),\n    [anon_sym_float2x2] = ACTIONS(2062),\n    [anon_sym_float4x4] = ACTIONS(2062),\n    [anon_sym_int2] = ACTIONS(2062),\n    [anon_sym_int3] = ACTIONS(2062),\n    [anon_sym_int4] = ACTIONS(2062),\n    [anon_sym_int3x3] = ACTIONS(2062),\n    [anon_sym_int2x2] = ACTIONS(2062),\n    [anon_sym_int4x4] = ACTIONS(2062),\n    [anon_sym_boolean] = ACTIONS(2062),\n    [anon_sym_string] = ACTIONS(2062),\n    [anon_sym_symbol] = ACTIONS(2062),\n    [anon_sym_workgroup] = ACTIONS(2062),\n    [anon_sym_get] = ACTIONS(2062),\n    [anon_sym_set] = ACTIONS(2062),\n    [anon_sym_trait] = ACTIONS(2062),\n    [anon_sym_impl] = ACTIONS(2062),\n    [anon_sym_enum] = ACTIONS(2062),\n    [anon_sym_shader] = ACTIONS(2062),\n  },\n  [596] = {\n    [ts_builtin_sym_end] = ACTIONS(2064),\n    [sym_identifier] = ACTIONS(2066),\n    [anon_sym_pub] = ACTIONS(2066),\n    [anon_sym_export] = ACTIONS(2066),\n    [anon_sym_type] = ACTIONS(2066),\n    [anon_sym_namespace] = ACTIONS(2066),\n    [anon_sym_LBRACE] = ACTIONS(2064),\n    [anon_sym_RBRACE] = ACTIONS(2064),\n    [anon_sym_typeof] = ACTIONS(2066),\n    [anon_sym_import] = ACTIONS(2066),\n    [anon_sym_var] = ACTIONS(2066),\n    [anon_sym_let] = ACTIONS(2066),\n    [anon_sym_const] = ACTIONS(2066),\n    [anon_sym_BANG] = ACTIONS(2064),\n    [anon_sym_else] = ACTIONS(2066),\n    [anon_sym_if] = ACTIONS(2066),\n    [anon_sym_switch] = ACTIONS(2066),\n    [anon_sym_for] = ACTIONS(2066),\n    [anon_sym_LPAREN] = ACTIONS(2064),\n    [anon_sym_await] = ACTIONS(2066),\n    [anon_sym_while] = ACTIONS(2066),\n    [anon_sym_do] = ACTIONS(2066),\n    [anon_sym_try] = ACTIONS(2066),\n    [anon_sym_with] = ACTIONS(2066),\n    [anon_sym_break] = ACTIONS(2066),\n    [anon_sym_continue] = ACTIONS(2066),\n    [anon_sym_debugger] = ACTIONS(2066),\n    [anon_sym_return] = ACTIONS(2066),\n    [anon_sym_throw] = ACTIONS(2066),\n    [anon_sym_SEMI] = ACTIONS(2064),\n    [anon_sym_case] = ACTIONS(2066),\n    [anon_sym_default] = ACTIONS(2066),\n    [anon_sym_yield] = ACTIONS(2066),\n    [anon_sym_LBRACK] = ACTIONS(2064),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2064),\n    [anon_sym_LT] = ACTIONS(2066),\n    [anon_sym_SLASH] = ACTIONS(2066),\n    [anon_sym_struct] = ACTIONS(2066),\n    [anon_sym_async] = ACTIONS(2066),\n    [anon_sym_fn] = ACTIONS(2066),\n    [anon_sym_fn_STAR] = ACTIONS(2064),\n    [anon_sym_new] = ACTIONS(2066),\n    [anon_sym_PLUS] = ACTIONS(2066),\n    [anon_sym_DASH] = ACTIONS(2066),\n    [anon_sym_TILDE] = ACTIONS(2064),\n    [anon_sym_void] = ACTIONS(2066),\n    [anon_sym_delete] = ACTIONS(2066),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2064),\n    [anon_sym_DASH_DASH] = ACTIONS(2064),\n    [anon_sym_DQUOTE] = ACTIONS(2064),\n    [anon_sym_SQUOTE] = ACTIONS(2064),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2064),\n    [sym_number] = ACTIONS(2064),\n    [sym_this] = ACTIONS(2066),\n    [sym_super] = ACTIONS(2066),\n    [sym_true] = ACTIONS(2066),\n    [sym_false] = ACTIONS(2066),\n    [sym_null] = ACTIONS(2066),\n    [sym_undefined] = ACTIONS(2066),\n    [anon_sym_AT] = ACTIONS(2064),\n    [anon_sym_static] = ACTIONS(2066),\n    [anon_sym_declare] = ACTIONS(2066),\n    [anon_sym_public] = ACTIONS(2066),\n    [anon_sym_private] = ACTIONS(2066),\n    [anon_sym_protected] = ACTIONS(2066),\n    [anon_sym_override] = ACTIONS(2066),\n    [anon_sym_readonly] = ACTIONS(2066),\n    [anon_sym_module] = ACTIONS(2066),\n    [anon_sym_any] = ACTIONS(2066),\n    [anon_sym_number] = ACTIONS(2066),\n    [anon_sym_int] = ACTIONS(2066),\n    [anon_sym_float] = ACTIONS(2066),\n    [anon_sym_float2] = ACTIONS(2066),\n    [anon_sym_float3] = ACTIONS(2066),\n    [anon_sym_float4] = ACTIONS(2066),\n    [anon_sym_float3x3] = ACTIONS(2066),\n    [anon_sym_float2x2] = ACTIONS(2066),\n    [anon_sym_float4x4] = ACTIONS(2066),\n    [anon_sym_int2] = ACTIONS(2066),\n    [anon_sym_int3] = ACTIONS(2066),\n    [anon_sym_int4] = ACTIONS(2066),\n    [anon_sym_int3x3] = ACTIONS(2066),\n    [anon_sym_int2x2] = ACTIONS(2066),\n    [anon_sym_int4x4] = ACTIONS(2066),\n    [anon_sym_boolean] = ACTIONS(2066),\n    [anon_sym_string] = ACTIONS(2066),\n    [anon_sym_symbol] = ACTIONS(2066),\n    [anon_sym_workgroup] = ACTIONS(2066),\n    [anon_sym_get] = ACTIONS(2066),\n    [anon_sym_set] = ACTIONS(2066),\n    [anon_sym_trait] = ACTIONS(2066),\n    [anon_sym_impl] = ACTIONS(2066),\n    [anon_sym_enum] = ACTIONS(2066),\n    [anon_sym_shader] = ACTIONS(2066),\n  },\n  [597] = {\n    [ts_builtin_sym_end] = ACTIONS(2068),\n    [sym_identifier] = ACTIONS(2070),\n    [anon_sym_pub] = ACTIONS(2070),\n    [anon_sym_export] = ACTIONS(2070),\n    [anon_sym_type] = ACTIONS(2070),\n    [anon_sym_namespace] = ACTIONS(2070),\n    [anon_sym_LBRACE] = ACTIONS(2068),\n    [anon_sym_RBRACE] = ACTIONS(2068),\n    [anon_sym_typeof] = ACTIONS(2070),\n    [anon_sym_import] = ACTIONS(2070),\n    [anon_sym_var] = ACTIONS(2070),\n    [anon_sym_let] = ACTIONS(2070),\n    [anon_sym_const] = ACTIONS(2070),\n    [anon_sym_BANG] = ACTIONS(2068),\n    [anon_sym_else] = ACTIONS(2070),\n    [anon_sym_if] = ACTIONS(2070),\n    [anon_sym_switch] = ACTIONS(2070),\n    [anon_sym_for] = ACTIONS(2070),\n    [anon_sym_LPAREN] = ACTIONS(2068),\n    [anon_sym_await] = ACTIONS(2070),\n    [anon_sym_while] = ACTIONS(2070),\n    [anon_sym_do] = ACTIONS(2070),\n    [anon_sym_try] = ACTIONS(2070),\n    [anon_sym_with] = ACTIONS(2070),\n    [anon_sym_break] = ACTIONS(2070),\n    [anon_sym_continue] = ACTIONS(2070),\n    [anon_sym_debugger] = ACTIONS(2070),\n    [anon_sym_return] = ACTIONS(2070),\n    [anon_sym_throw] = ACTIONS(2070),\n    [anon_sym_SEMI] = ACTIONS(2068),\n    [anon_sym_case] = ACTIONS(2070),\n    [anon_sym_default] = ACTIONS(2070),\n    [anon_sym_yield] = ACTIONS(2070),\n    [anon_sym_LBRACK] = ACTIONS(2068),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2068),\n    [anon_sym_LT] = ACTIONS(2070),\n    [anon_sym_SLASH] = ACTIONS(2070),\n    [anon_sym_struct] = ACTIONS(2070),\n    [anon_sym_async] = ACTIONS(2070),\n    [anon_sym_fn] = ACTIONS(2070),\n    [anon_sym_fn_STAR] = ACTIONS(2068),\n    [anon_sym_new] = ACTIONS(2070),\n    [anon_sym_PLUS] = ACTIONS(2070),\n    [anon_sym_DASH] = ACTIONS(2070),\n    [anon_sym_TILDE] = ACTIONS(2068),\n    [anon_sym_void] = ACTIONS(2070),\n    [anon_sym_delete] = ACTIONS(2070),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2068),\n    [anon_sym_DASH_DASH] = ACTIONS(2068),\n    [anon_sym_DQUOTE] = ACTIONS(2068),\n    [anon_sym_SQUOTE] = ACTIONS(2068),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2068),\n    [sym_number] = ACTIONS(2068),\n    [sym_this] = ACTIONS(2070),\n    [sym_super] = ACTIONS(2070),\n    [sym_true] = ACTIONS(2070),\n    [sym_false] = ACTIONS(2070),\n    [sym_null] = ACTIONS(2070),\n    [sym_undefined] = ACTIONS(2070),\n    [anon_sym_AT] = ACTIONS(2068),\n    [anon_sym_static] = ACTIONS(2070),\n    [anon_sym_declare] = ACTIONS(2070),\n    [anon_sym_public] = ACTIONS(2070),\n    [anon_sym_private] = ACTIONS(2070),\n    [anon_sym_protected] = ACTIONS(2070),\n    [anon_sym_override] = ACTIONS(2070),\n    [anon_sym_readonly] = ACTIONS(2070),\n    [anon_sym_module] = ACTIONS(2070),\n    [anon_sym_any] = ACTIONS(2070),\n    [anon_sym_number] = ACTIONS(2070),\n    [anon_sym_int] = ACTIONS(2070),\n    [anon_sym_float] = ACTIONS(2070),\n    [anon_sym_float2] = ACTIONS(2070),\n    [anon_sym_float3] = ACTIONS(2070),\n    [anon_sym_float4] = ACTIONS(2070),\n    [anon_sym_float3x3] = ACTIONS(2070),\n    [anon_sym_float2x2] = ACTIONS(2070),\n    [anon_sym_float4x4] = ACTIONS(2070),\n    [anon_sym_int2] = ACTIONS(2070),\n    [anon_sym_int3] = ACTIONS(2070),\n    [anon_sym_int4] = ACTIONS(2070),\n    [anon_sym_int3x3] = ACTIONS(2070),\n    [anon_sym_int2x2] = ACTIONS(2070),\n    [anon_sym_int4x4] = ACTIONS(2070),\n    [anon_sym_boolean] = ACTIONS(2070),\n    [anon_sym_string] = ACTIONS(2070),\n    [anon_sym_symbol] = ACTIONS(2070),\n    [anon_sym_workgroup] = ACTIONS(2070),\n    [anon_sym_get] = ACTIONS(2070),\n    [anon_sym_set] = ACTIONS(2070),\n    [anon_sym_trait] = ACTIONS(2070),\n    [anon_sym_impl] = ACTIONS(2070),\n    [anon_sym_enum] = ACTIONS(2070),\n    [anon_sym_shader] = ACTIONS(2070),\n  },\n  [598] = {\n    [ts_builtin_sym_end] = ACTIONS(2072),\n    [sym_identifier] = ACTIONS(2074),\n    [anon_sym_pub] = ACTIONS(2074),\n    [anon_sym_export] = ACTIONS(2074),\n    [anon_sym_type] = ACTIONS(2074),\n    [anon_sym_namespace] = ACTIONS(2074),\n    [anon_sym_LBRACE] = ACTIONS(2072),\n    [anon_sym_RBRACE] = ACTIONS(2072),\n    [anon_sym_typeof] = ACTIONS(2074),\n    [anon_sym_import] = ACTIONS(2074),\n    [anon_sym_var] = ACTIONS(2074),\n    [anon_sym_let] = ACTIONS(2074),\n    [anon_sym_const] = ACTIONS(2074),\n    [anon_sym_BANG] = ACTIONS(2072),\n    [anon_sym_else] = ACTIONS(2074),\n    [anon_sym_if] = ACTIONS(2074),\n    [anon_sym_switch] = ACTIONS(2074),\n    [anon_sym_for] = ACTIONS(2074),\n    [anon_sym_LPAREN] = ACTIONS(2072),\n    [anon_sym_await] = ACTIONS(2074),\n    [anon_sym_while] = ACTIONS(2074),\n    [anon_sym_do] = ACTIONS(2074),\n    [anon_sym_try] = ACTIONS(2074),\n    [anon_sym_with] = ACTIONS(2074),\n    [anon_sym_break] = ACTIONS(2074),\n    [anon_sym_continue] = ACTIONS(2074),\n    [anon_sym_debugger] = ACTIONS(2074),\n    [anon_sym_return] = ACTIONS(2074),\n    [anon_sym_throw] = ACTIONS(2074),\n    [anon_sym_SEMI] = ACTIONS(2072),\n    [anon_sym_case] = ACTIONS(2074),\n    [anon_sym_default] = ACTIONS(2074),\n    [anon_sym_yield] = ACTIONS(2074),\n    [anon_sym_LBRACK] = ACTIONS(2072),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2072),\n    [anon_sym_LT] = ACTIONS(2074),\n    [anon_sym_SLASH] = ACTIONS(2074),\n    [anon_sym_struct] = ACTIONS(2074),\n    [anon_sym_async] = ACTIONS(2074),\n    [anon_sym_fn] = ACTIONS(2074),\n    [anon_sym_fn_STAR] = ACTIONS(2072),\n    [anon_sym_new] = ACTIONS(2074),\n    [anon_sym_PLUS] = ACTIONS(2074),\n    [anon_sym_DASH] = ACTIONS(2074),\n    [anon_sym_TILDE] = ACTIONS(2072),\n    [anon_sym_void] = ACTIONS(2074),\n    [anon_sym_delete] = ACTIONS(2074),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2072),\n    [anon_sym_DASH_DASH] = ACTIONS(2072),\n    [anon_sym_DQUOTE] = ACTIONS(2072),\n    [anon_sym_SQUOTE] = ACTIONS(2072),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2072),\n    [sym_number] = ACTIONS(2072),\n    [sym_this] = ACTIONS(2074),\n    [sym_super] = ACTIONS(2074),\n    [sym_true] = ACTIONS(2074),\n    [sym_false] = ACTIONS(2074),\n    [sym_null] = ACTIONS(2074),\n    [sym_undefined] = ACTIONS(2074),\n    [anon_sym_AT] = ACTIONS(2072),\n    [anon_sym_static] = ACTIONS(2074),\n    [anon_sym_declare] = ACTIONS(2074),\n    [anon_sym_public] = ACTIONS(2074),\n    [anon_sym_private] = ACTIONS(2074),\n    [anon_sym_protected] = ACTIONS(2074),\n    [anon_sym_override] = ACTIONS(2074),\n    [anon_sym_readonly] = ACTIONS(2074),\n    [anon_sym_module] = ACTIONS(2074),\n    [anon_sym_any] = ACTIONS(2074),\n    [anon_sym_number] = ACTIONS(2074),\n    [anon_sym_int] = ACTIONS(2074),\n    [anon_sym_float] = ACTIONS(2074),\n    [anon_sym_float2] = ACTIONS(2074),\n    [anon_sym_float3] = ACTIONS(2074),\n    [anon_sym_float4] = ACTIONS(2074),\n    [anon_sym_float3x3] = ACTIONS(2074),\n    [anon_sym_float2x2] = ACTIONS(2074),\n    [anon_sym_float4x4] = ACTIONS(2074),\n    [anon_sym_int2] = ACTIONS(2074),\n    [anon_sym_int3] = ACTIONS(2074),\n    [anon_sym_int4] = ACTIONS(2074),\n    [anon_sym_int3x3] = ACTIONS(2074),\n    [anon_sym_int2x2] = ACTIONS(2074),\n    [anon_sym_int4x4] = ACTIONS(2074),\n    [anon_sym_boolean] = ACTIONS(2074),\n    [anon_sym_string] = ACTIONS(2074),\n    [anon_sym_symbol] = ACTIONS(2074),\n    [anon_sym_workgroup] = ACTIONS(2074),\n    [anon_sym_get] = ACTIONS(2074),\n    [anon_sym_set] = ACTIONS(2074),\n    [anon_sym_trait] = ACTIONS(2074),\n    [anon_sym_impl] = ACTIONS(2074),\n    [anon_sym_enum] = ACTIONS(2074),\n    [anon_sym_shader] = ACTIONS(2074),\n  },\n  [599] = {\n    [ts_builtin_sym_end] = ACTIONS(2076),\n    [sym_identifier] = ACTIONS(2078),\n    [anon_sym_pub] = ACTIONS(2078),\n    [anon_sym_export] = ACTIONS(2078),\n    [anon_sym_type] = ACTIONS(2078),\n    [anon_sym_namespace] = ACTIONS(2078),\n    [anon_sym_LBRACE] = ACTIONS(2076),\n    [anon_sym_RBRACE] = ACTIONS(2076),\n    [anon_sym_typeof] = ACTIONS(2078),\n    [anon_sym_import] = ACTIONS(2078),\n    [anon_sym_var] = ACTIONS(2078),\n    [anon_sym_let] = ACTIONS(2078),\n    [anon_sym_const] = ACTIONS(2078),\n    [anon_sym_BANG] = ACTIONS(2076),\n    [anon_sym_else] = ACTIONS(2078),\n    [anon_sym_if] = ACTIONS(2078),\n    [anon_sym_switch] = ACTIONS(2078),\n    [anon_sym_for] = ACTIONS(2078),\n    [anon_sym_LPAREN] = ACTIONS(2076),\n    [anon_sym_await] = ACTIONS(2078),\n    [anon_sym_while] = ACTIONS(2078),\n    [anon_sym_do] = ACTIONS(2078),\n    [anon_sym_try] = ACTIONS(2078),\n    [anon_sym_with] = ACTIONS(2078),\n    [anon_sym_break] = ACTIONS(2078),\n    [anon_sym_continue] = ACTIONS(2078),\n    [anon_sym_debugger] = ACTIONS(2078),\n    [anon_sym_return] = ACTIONS(2078),\n    [anon_sym_throw] = ACTIONS(2078),\n    [anon_sym_SEMI] = ACTIONS(2076),\n    [anon_sym_case] = ACTIONS(2078),\n    [anon_sym_default] = ACTIONS(2078),\n    [anon_sym_yield] = ACTIONS(2078),\n    [anon_sym_LBRACK] = ACTIONS(2076),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2076),\n    [anon_sym_LT] = ACTIONS(2078),\n    [anon_sym_SLASH] = ACTIONS(2078),\n    [anon_sym_struct] = ACTIONS(2078),\n    [anon_sym_async] = ACTIONS(2078),\n    [anon_sym_fn] = ACTIONS(2078),\n    [anon_sym_fn_STAR] = ACTIONS(2076),\n    [anon_sym_new] = ACTIONS(2078),\n    [anon_sym_PLUS] = ACTIONS(2078),\n    [anon_sym_DASH] = ACTIONS(2078),\n    [anon_sym_TILDE] = ACTIONS(2076),\n    [anon_sym_void] = ACTIONS(2078),\n    [anon_sym_delete] = ACTIONS(2078),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2076),\n    [anon_sym_DASH_DASH] = ACTIONS(2076),\n    [anon_sym_DQUOTE] = ACTIONS(2076),\n    [anon_sym_SQUOTE] = ACTIONS(2076),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2076),\n    [sym_number] = ACTIONS(2076),\n    [sym_this] = ACTIONS(2078),\n    [sym_super] = ACTIONS(2078),\n    [sym_true] = ACTIONS(2078),\n    [sym_false] = ACTIONS(2078),\n    [sym_null] = ACTIONS(2078),\n    [sym_undefined] = ACTIONS(2078),\n    [anon_sym_AT] = ACTIONS(2076),\n    [anon_sym_static] = ACTIONS(2078),\n    [anon_sym_declare] = ACTIONS(2078),\n    [anon_sym_public] = ACTIONS(2078),\n    [anon_sym_private] = ACTIONS(2078),\n    [anon_sym_protected] = ACTIONS(2078),\n    [anon_sym_override] = ACTIONS(2078),\n    [anon_sym_readonly] = ACTIONS(2078),\n    [anon_sym_module] = ACTIONS(2078),\n    [anon_sym_any] = ACTIONS(2078),\n    [anon_sym_number] = ACTIONS(2078),\n    [anon_sym_int] = ACTIONS(2078),\n    [anon_sym_float] = ACTIONS(2078),\n    [anon_sym_float2] = ACTIONS(2078),\n    [anon_sym_float3] = ACTIONS(2078),\n    [anon_sym_float4] = ACTIONS(2078),\n    [anon_sym_float3x3] = ACTIONS(2078),\n    [anon_sym_float2x2] = ACTIONS(2078),\n    [anon_sym_float4x4] = ACTIONS(2078),\n    [anon_sym_int2] = ACTIONS(2078),\n    [anon_sym_int3] = ACTIONS(2078),\n    [anon_sym_int4] = ACTIONS(2078),\n    [anon_sym_int3x3] = ACTIONS(2078),\n    [anon_sym_int2x2] = ACTIONS(2078),\n    [anon_sym_int4x4] = ACTIONS(2078),\n    [anon_sym_boolean] = ACTIONS(2078),\n    [anon_sym_string] = ACTIONS(2078),\n    [anon_sym_symbol] = ACTIONS(2078),\n    [anon_sym_workgroup] = ACTIONS(2078),\n    [anon_sym_get] = ACTIONS(2078),\n    [anon_sym_set] = ACTIONS(2078),\n    [anon_sym_trait] = ACTIONS(2078),\n    [anon_sym_impl] = ACTIONS(2078),\n    [anon_sym_enum] = ACTIONS(2078),\n    [anon_sym_shader] = ACTIONS(2078),\n  },\n  [600] = {\n    [ts_builtin_sym_end] = ACTIONS(2080),\n    [sym_identifier] = ACTIONS(2082),\n    [anon_sym_pub] = ACTIONS(2082),\n    [anon_sym_export] = ACTIONS(2082),\n    [anon_sym_type] = ACTIONS(2082),\n    [anon_sym_namespace] = ACTIONS(2082),\n    [anon_sym_LBRACE] = ACTIONS(2080),\n    [anon_sym_RBRACE] = ACTIONS(2080),\n    [anon_sym_typeof] = ACTIONS(2082),\n    [anon_sym_import] = ACTIONS(2082),\n    [anon_sym_var] = ACTIONS(2082),\n    [anon_sym_let] = ACTIONS(2082),\n    [anon_sym_const] = ACTIONS(2082),\n    [anon_sym_BANG] = ACTIONS(2080),\n    [anon_sym_else] = ACTIONS(2082),\n    [anon_sym_if] = ACTIONS(2082),\n    [anon_sym_switch] = ACTIONS(2082),\n    [anon_sym_for] = ACTIONS(2082),\n    [anon_sym_LPAREN] = ACTIONS(2080),\n    [anon_sym_await] = ACTIONS(2082),\n    [anon_sym_while] = ACTIONS(2082),\n    [anon_sym_do] = ACTIONS(2082),\n    [anon_sym_try] = ACTIONS(2082),\n    [anon_sym_with] = ACTIONS(2082),\n    [anon_sym_break] = ACTIONS(2082),\n    [anon_sym_continue] = ACTIONS(2082),\n    [anon_sym_debugger] = ACTIONS(2082),\n    [anon_sym_return] = ACTIONS(2082),\n    [anon_sym_throw] = ACTIONS(2082),\n    [anon_sym_SEMI] = ACTIONS(2080),\n    [anon_sym_case] = ACTIONS(2082),\n    [anon_sym_default] = ACTIONS(2082),\n    [anon_sym_yield] = ACTIONS(2082),\n    [anon_sym_LBRACK] = ACTIONS(2080),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2080),\n    [anon_sym_LT] = ACTIONS(2082),\n    [anon_sym_SLASH] = ACTIONS(2082),\n    [anon_sym_struct] = ACTIONS(2082),\n    [anon_sym_async] = ACTIONS(2082),\n    [anon_sym_fn] = ACTIONS(2082),\n    [anon_sym_fn_STAR] = ACTIONS(2080),\n    [anon_sym_new] = ACTIONS(2082),\n    [anon_sym_PLUS] = ACTIONS(2082),\n    [anon_sym_DASH] = ACTIONS(2082),\n    [anon_sym_TILDE] = ACTIONS(2080),\n    [anon_sym_void] = ACTIONS(2082),\n    [anon_sym_delete] = ACTIONS(2082),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2080),\n    [anon_sym_DASH_DASH] = ACTIONS(2080),\n    [anon_sym_DQUOTE] = ACTIONS(2080),\n    [anon_sym_SQUOTE] = ACTIONS(2080),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2080),\n    [sym_number] = ACTIONS(2080),\n    [sym_this] = ACTIONS(2082),\n    [sym_super] = ACTIONS(2082),\n    [sym_true] = ACTIONS(2082),\n    [sym_false] = ACTIONS(2082),\n    [sym_null] = ACTIONS(2082),\n    [sym_undefined] = ACTIONS(2082),\n    [anon_sym_AT] = ACTIONS(2080),\n    [anon_sym_static] = ACTIONS(2082),\n    [anon_sym_declare] = ACTIONS(2082),\n    [anon_sym_public] = ACTIONS(2082),\n    [anon_sym_private] = ACTIONS(2082),\n    [anon_sym_protected] = ACTIONS(2082),\n    [anon_sym_override] = ACTIONS(2082),\n    [anon_sym_readonly] = ACTIONS(2082),\n    [anon_sym_module] = ACTIONS(2082),\n    [anon_sym_any] = ACTIONS(2082),\n    [anon_sym_number] = ACTIONS(2082),\n    [anon_sym_int] = ACTIONS(2082),\n    [anon_sym_float] = ACTIONS(2082),\n    [anon_sym_float2] = ACTIONS(2082),\n    [anon_sym_float3] = ACTIONS(2082),\n    [anon_sym_float4] = ACTIONS(2082),\n    [anon_sym_float3x3] = ACTIONS(2082),\n    [anon_sym_float2x2] = ACTIONS(2082),\n    [anon_sym_float4x4] = ACTIONS(2082),\n    [anon_sym_int2] = ACTIONS(2082),\n    [anon_sym_int3] = ACTIONS(2082),\n    [anon_sym_int4] = ACTIONS(2082),\n    [anon_sym_int3x3] = ACTIONS(2082),\n    [anon_sym_int2x2] = ACTIONS(2082),\n    [anon_sym_int4x4] = ACTIONS(2082),\n    [anon_sym_boolean] = ACTIONS(2082),\n    [anon_sym_string] = ACTIONS(2082),\n    [anon_sym_symbol] = ACTIONS(2082),\n    [anon_sym_workgroup] = ACTIONS(2082),\n    [anon_sym_get] = ACTIONS(2082),\n    [anon_sym_set] = ACTIONS(2082),\n    [anon_sym_trait] = ACTIONS(2082),\n    [anon_sym_impl] = ACTIONS(2082),\n    [anon_sym_enum] = ACTIONS(2082),\n    [anon_sym_shader] = ACTIONS(2082),\n  },\n  [601] = {\n    [ts_builtin_sym_end] = ACTIONS(2084),\n    [sym_identifier] = ACTIONS(2086),\n    [anon_sym_pub] = ACTIONS(2086),\n    [anon_sym_export] = ACTIONS(2086),\n    [anon_sym_type] = ACTIONS(2086),\n    [anon_sym_namespace] = ACTIONS(2086),\n    [anon_sym_LBRACE] = ACTIONS(2084),\n    [anon_sym_RBRACE] = ACTIONS(2084),\n    [anon_sym_typeof] = ACTIONS(2086),\n    [anon_sym_import] = ACTIONS(2086),\n    [anon_sym_var] = ACTIONS(2086),\n    [anon_sym_let] = ACTIONS(2086),\n    [anon_sym_const] = ACTIONS(2086),\n    [anon_sym_BANG] = ACTIONS(2084),\n    [anon_sym_else] = ACTIONS(2086),\n    [anon_sym_if] = ACTIONS(2086),\n    [anon_sym_switch] = ACTIONS(2086),\n    [anon_sym_for] = ACTIONS(2086),\n    [anon_sym_LPAREN] = ACTIONS(2084),\n    [anon_sym_await] = ACTIONS(2086),\n    [anon_sym_while] = ACTIONS(2086),\n    [anon_sym_do] = ACTIONS(2086),\n    [anon_sym_try] = ACTIONS(2086),\n    [anon_sym_with] = ACTIONS(2086),\n    [anon_sym_break] = ACTIONS(2086),\n    [anon_sym_continue] = ACTIONS(2086),\n    [anon_sym_debugger] = ACTIONS(2086),\n    [anon_sym_return] = ACTIONS(2086),\n    [anon_sym_throw] = ACTIONS(2086),\n    [anon_sym_SEMI] = ACTIONS(2084),\n    [anon_sym_case] = ACTIONS(2086),\n    [anon_sym_default] = ACTIONS(2086),\n    [anon_sym_yield] = ACTIONS(2086),\n    [anon_sym_LBRACK] = ACTIONS(2084),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2084),\n    [anon_sym_LT] = ACTIONS(2086),\n    [anon_sym_SLASH] = ACTIONS(2086),\n    [anon_sym_struct] = ACTIONS(2086),\n    [anon_sym_async] = ACTIONS(2086),\n    [anon_sym_fn] = ACTIONS(2086),\n    [anon_sym_fn_STAR] = ACTIONS(2084),\n    [anon_sym_new] = ACTIONS(2086),\n    [anon_sym_PLUS] = ACTIONS(2086),\n    [anon_sym_DASH] = ACTIONS(2086),\n    [anon_sym_TILDE] = ACTIONS(2084),\n    [anon_sym_void] = ACTIONS(2086),\n    [anon_sym_delete] = ACTIONS(2086),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2084),\n    [anon_sym_DASH_DASH] = ACTIONS(2084),\n    [anon_sym_DQUOTE] = ACTIONS(2084),\n    [anon_sym_SQUOTE] = ACTIONS(2084),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2084),\n    [sym_number] = ACTIONS(2084),\n    [sym_this] = ACTIONS(2086),\n    [sym_super] = ACTIONS(2086),\n    [sym_true] = ACTIONS(2086),\n    [sym_false] = ACTIONS(2086),\n    [sym_null] = ACTIONS(2086),\n    [sym_undefined] = ACTIONS(2086),\n    [anon_sym_AT] = ACTIONS(2084),\n    [anon_sym_static] = ACTIONS(2086),\n    [anon_sym_declare] = ACTIONS(2086),\n    [anon_sym_public] = ACTIONS(2086),\n    [anon_sym_private] = ACTIONS(2086),\n    [anon_sym_protected] = ACTIONS(2086),\n    [anon_sym_override] = ACTIONS(2086),\n    [anon_sym_readonly] = ACTIONS(2086),\n    [anon_sym_module] = ACTIONS(2086),\n    [anon_sym_any] = ACTIONS(2086),\n    [anon_sym_number] = ACTIONS(2086),\n    [anon_sym_int] = ACTIONS(2086),\n    [anon_sym_float] = ACTIONS(2086),\n    [anon_sym_float2] = ACTIONS(2086),\n    [anon_sym_float3] = ACTIONS(2086),\n    [anon_sym_float4] = ACTIONS(2086),\n    [anon_sym_float3x3] = ACTIONS(2086),\n    [anon_sym_float2x2] = ACTIONS(2086),\n    [anon_sym_float4x4] = ACTIONS(2086),\n    [anon_sym_int2] = ACTIONS(2086),\n    [anon_sym_int3] = ACTIONS(2086),\n    [anon_sym_int4] = ACTIONS(2086),\n    [anon_sym_int3x3] = ACTIONS(2086),\n    [anon_sym_int2x2] = ACTIONS(2086),\n    [anon_sym_int4x4] = ACTIONS(2086),\n    [anon_sym_boolean] = ACTIONS(2086),\n    [anon_sym_string] = ACTIONS(2086),\n    [anon_sym_symbol] = ACTIONS(2086),\n    [anon_sym_workgroup] = ACTIONS(2086),\n    [anon_sym_get] = ACTIONS(2086),\n    [anon_sym_set] = ACTIONS(2086),\n    [anon_sym_trait] = ACTIONS(2086),\n    [anon_sym_impl] = ACTIONS(2086),\n    [anon_sym_enum] = ACTIONS(2086),\n    [anon_sym_shader] = ACTIONS(2086),\n  },\n  [602] = {\n    [ts_builtin_sym_end] = ACTIONS(2088),\n    [sym_identifier] = ACTIONS(2090),\n    [anon_sym_pub] = ACTIONS(2090),\n    [anon_sym_export] = ACTIONS(2090),\n    [anon_sym_type] = ACTIONS(2090),\n    [anon_sym_namespace] = ACTIONS(2090),\n    [anon_sym_LBRACE] = ACTIONS(2088),\n    [anon_sym_RBRACE] = ACTIONS(2088),\n    [anon_sym_typeof] = ACTIONS(2090),\n    [anon_sym_import] = ACTIONS(2090),\n    [anon_sym_var] = ACTIONS(2090),\n    [anon_sym_let] = ACTIONS(2090),\n    [anon_sym_const] = ACTIONS(2090),\n    [anon_sym_BANG] = ACTIONS(2088),\n    [anon_sym_else] = ACTIONS(2090),\n    [anon_sym_if] = ACTIONS(2090),\n    [anon_sym_switch] = ACTIONS(2090),\n    [anon_sym_for] = ACTIONS(2090),\n    [anon_sym_LPAREN] = ACTIONS(2088),\n    [anon_sym_await] = ACTIONS(2090),\n    [anon_sym_while] = ACTIONS(2090),\n    [anon_sym_do] = ACTIONS(2090),\n    [anon_sym_try] = ACTIONS(2090),\n    [anon_sym_with] = ACTIONS(2090),\n    [anon_sym_break] = ACTIONS(2090),\n    [anon_sym_continue] = ACTIONS(2090),\n    [anon_sym_debugger] = ACTIONS(2090),\n    [anon_sym_return] = ACTIONS(2090),\n    [anon_sym_throw] = ACTIONS(2090),\n    [anon_sym_SEMI] = ACTIONS(2088),\n    [anon_sym_case] = ACTIONS(2090),\n    [anon_sym_default] = ACTIONS(2090),\n    [anon_sym_yield] = ACTIONS(2090),\n    [anon_sym_LBRACK] = ACTIONS(2088),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2088),\n    [anon_sym_LT] = ACTIONS(2090),\n    [anon_sym_SLASH] = ACTIONS(2090),\n    [anon_sym_struct] = ACTIONS(2090),\n    [anon_sym_async] = ACTIONS(2090),\n    [anon_sym_fn] = ACTIONS(2090),\n    [anon_sym_fn_STAR] = ACTIONS(2088),\n    [anon_sym_new] = ACTIONS(2090),\n    [anon_sym_PLUS] = ACTIONS(2090),\n    [anon_sym_DASH] = ACTIONS(2090),\n    [anon_sym_TILDE] = ACTIONS(2088),\n    [anon_sym_void] = ACTIONS(2090),\n    [anon_sym_delete] = ACTIONS(2090),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2088),\n    [anon_sym_DASH_DASH] = ACTIONS(2088),\n    [anon_sym_DQUOTE] = ACTIONS(2088),\n    [anon_sym_SQUOTE] = ACTIONS(2088),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2088),\n    [sym_number] = ACTIONS(2088),\n    [sym_this] = ACTIONS(2090),\n    [sym_super] = ACTIONS(2090),\n    [sym_true] = ACTIONS(2090),\n    [sym_false] = ACTIONS(2090),\n    [sym_null] = ACTIONS(2090),\n    [sym_undefined] = ACTIONS(2090),\n    [anon_sym_AT] = ACTIONS(2088),\n    [anon_sym_static] = ACTIONS(2090),\n    [anon_sym_declare] = ACTIONS(2090),\n    [anon_sym_public] = ACTIONS(2090),\n    [anon_sym_private] = ACTIONS(2090),\n    [anon_sym_protected] = ACTIONS(2090),\n    [anon_sym_override] = ACTIONS(2090),\n    [anon_sym_readonly] = ACTIONS(2090),\n    [anon_sym_module] = ACTIONS(2090),\n    [anon_sym_any] = ACTIONS(2090),\n    [anon_sym_number] = ACTIONS(2090),\n    [anon_sym_int] = ACTIONS(2090),\n    [anon_sym_float] = ACTIONS(2090),\n    [anon_sym_float2] = ACTIONS(2090),\n    [anon_sym_float3] = ACTIONS(2090),\n    [anon_sym_float4] = ACTIONS(2090),\n    [anon_sym_float3x3] = ACTIONS(2090),\n    [anon_sym_float2x2] = ACTIONS(2090),\n    [anon_sym_float4x4] = ACTIONS(2090),\n    [anon_sym_int2] = ACTIONS(2090),\n    [anon_sym_int3] = ACTIONS(2090),\n    [anon_sym_int4] = ACTIONS(2090),\n    [anon_sym_int3x3] = ACTIONS(2090),\n    [anon_sym_int2x2] = ACTIONS(2090),\n    [anon_sym_int4x4] = ACTIONS(2090),\n    [anon_sym_boolean] = ACTIONS(2090),\n    [anon_sym_string] = ACTIONS(2090),\n    [anon_sym_symbol] = ACTIONS(2090),\n    [anon_sym_workgroup] = ACTIONS(2090),\n    [anon_sym_get] = ACTIONS(2090),\n    [anon_sym_set] = ACTIONS(2090),\n    [anon_sym_trait] = ACTIONS(2090),\n    [anon_sym_impl] = ACTIONS(2090),\n    [anon_sym_enum] = ACTIONS(2090),\n    [anon_sym_shader] = ACTIONS(2090),\n  },\n  [603] = {\n    [ts_builtin_sym_end] = ACTIONS(1346),\n    [sym_identifier] = ACTIONS(1348),\n    [anon_sym_pub] = ACTIONS(1348),\n    [anon_sym_export] = ACTIONS(1348),\n    [anon_sym_type] = ACTIONS(1348),\n    [anon_sym_namespace] = ACTIONS(1348),\n    [anon_sym_LBRACE] = ACTIONS(1346),\n    [anon_sym_RBRACE] = ACTIONS(1346),\n    [anon_sym_typeof] = ACTIONS(1348),\n    [anon_sym_import] = ACTIONS(1348),\n    [anon_sym_var] = ACTIONS(1348),\n    [anon_sym_let] = ACTIONS(1348),\n    [anon_sym_const] = ACTIONS(1348),\n    [anon_sym_BANG] = ACTIONS(1346),\n    [anon_sym_else] = ACTIONS(1348),\n    [anon_sym_if] = ACTIONS(1348),\n    [anon_sym_switch] = ACTIONS(1348),\n    [anon_sym_for] = ACTIONS(1348),\n    [anon_sym_LPAREN] = ACTIONS(1346),\n    [anon_sym_await] = ACTIONS(1348),\n    [anon_sym_while] = ACTIONS(1348),\n    [anon_sym_do] = ACTIONS(1348),\n    [anon_sym_try] = ACTIONS(1348),\n    [anon_sym_with] = ACTIONS(1348),\n    [anon_sym_break] = ACTIONS(1348),\n    [anon_sym_continue] = ACTIONS(1348),\n    [anon_sym_debugger] = ACTIONS(1348),\n    [anon_sym_return] = ACTIONS(1348),\n    [anon_sym_throw] = ACTIONS(1348),\n    [anon_sym_SEMI] = ACTIONS(1346),\n    [anon_sym_case] = ACTIONS(1348),\n    [anon_sym_default] = ACTIONS(1348),\n    [anon_sym_yield] = ACTIONS(1348),\n    [anon_sym_LBRACK] = ACTIONS(1346),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1346),\n    [anon_sym_LT] = ACTIONS(1348),\n    [anon_sym_SLASH] = ACTIONS(1348),\n    [anon_sym_struct] = ACTIONS(1348),\n    [anon_sym_async] = ACTIONS(1348),\n    [anon_sym_fn] = ACTIONS(1348),\n    [anon_sym_fn_STAR] = ACTIONS(1346),\n    [anon_sym_new] = ACTIONS(1348),\n    [anon_sym_PLUS] = ACTIONS(1348),\n    [anon_sym_DASH] = ACTIONS(1348),\n    [anon_sym_TILDE] = ACTIONS(1346),\n    [anon_sym_void] = ACTIONS(1348),\n    [anon_sym_delete] = ACTIONS(1348),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1346),\n    [anon_sym_DASH_DASH] = ACTIONS(1346),\n    [anon_sym_DQUOTE] = ACTIONS(1346),\n    [anon_sym_SQUOTE] = ACTIONS(1346),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1346),\n    [sym_number] = ACTIONS(1346),\n    [sym_this] = ACTIONS(1348),\n    [sym_super] = ACTIONS(1348),\n    [sym_true] = ACTIONS(1348),\n    [sym_false] = ACTIONS(1348),\n    [sym_null] = ACTIONS(1348),\n    [sym_undefined] = ACTIONS(1348),\n    [anon_sym_AT] = ACTIONS(1346),\n    [anon_sym_static] = ACTIONS(1348),\n    [anon_sym_declare] = ACTIONS(1348),\n    [anon_sym_public] = ACTIONS(1348),\n    [anon_sym_private] = ACTIONS(1348),\n    [anon_sym_protected] = ACTIONS(1348),\n    [anon_sym_override] = ACTIONS(1348),\n    [anon_sym_readonly] = ACTIONS(1348),\n    [anon_sym_module] = ACTIONS(1348),\n    [anon_sym_any] = ACTIONS(1348),\n    [anon_sym_number] = ACTIONS(1348),\n    [anon_sym_int] = ACTIONS(1348),\n    [anon_sym_float] = ACTIONS(1348),\n    [anon_sym_float2] = ACTIONS(1348),\n    [anon_sym_float3] = ACTIONS(1348),\n    [anon_sym_float4] = ACTIONS(1348),\n    [anon_sym_float3x3] = ACTIONS(1348),\n    [anon_sym_float2x2] = ACTIONS(1348),\n    [anon_sym_float4x4] = ACTIONS(1348),\n    [anon_sym_int2] = ACTIONS(1348),\n    [anon_sym_int3] = ACTIONS(1348),\n    [anon_sym_int4] = ACTIONS(1348),\n    [anon_sym_int3x3] = ACTIONS(1348),\n    [anon_sym_int2x2] = ACTIONS(1348),\n    [anon_sym_int4x4] = ACTIONS(1348),\n    [anon_sym_boolean] = ACTIONS(1348),\n    [anon_sym_string] = ACTIONS(1348),\n    [anon_sym_symbol] = ACTIONS(1348),\n    [anon_sym_workgroup] = ACTIONS(1348),\n    [anon_sym_get] = ACTIONS(1348),\n    [anon_sym_set] = ACTIONS(1348),\n    [anon_sym_trait] = ACTIONS(1348),\n    [anon_sym_impl] = ACTIONS(1348),\n    [anon_sym_enum] = ACTIONS(1348),\n    [anon_sym_shader] = ACTIONS(1348),\n  },\n  [604] = {\n    [ts_builtin_sym_end] = ACTIONS(2092),\n    [sym_identifier] = ACTIONS(2094),\n    [anon_sym_pub] = ACTIONS(2094),\n    [anon_sym_export] = ACTIONS(2094),\n    [anon_sym_type] = ACTIONS(2094),\n    [anon_sym_namespace] = ACTIONS(2094),\n    [anon_sym_LBRACE] = ACTIONS(2092),\n    [anon_sym_RBRACE] = ACTIONS(2092),\n    [anon_sym_typeof] = ACTIONS(2094),\n    [anon_sym_import] = ACTIONS(2094),\n    [anon_sym_var] = ACTIONS(2094),\n    [anon_sym_let] = ACTIONS(2094),\n    [anon_sym_const] = ACTIONS(2094),\n    [anon_sym_BANG] = ACTIONS(2092),\n    [anon_sym_else] = ACTIONS(2094),\n    [anon_sym_if] = ACTIONS(2094),\n    [anon_sym_switch] = ACTIONS(2094),\n    [anon_sym_for] = ACTIONS(2094),\n    [anon_sym_LPAREN] = ACTIONS(2092),\n    [anon_sym_await] = ACTIONS(2094),\n    [anon_sym_while] = ACTIONS(2094),\n    [anon_sym_do] = ACTIONS(2094),\n    [anon_sym_try] = ACTIONS(2094),\n    [anon_sym_with] = ACTIONS(2094),\n    [anon_sym_break] = ACTIONS(2094),\n    [anon_sym_continue] = ACTIONS(2094),\n    [anon_sym_debugger] = ACTIONS(2094),\n    [anon_sym_return] = ACTIONS(2094),\n    [anon_sym_throw] = ACTIONS(2094),\n    [anon_sym_SEMI] = ACTIONS(2092),\n    [anon_sym_case] = ACTIONS(2094),\n    [anon_sym_default] = ACTIONS(2094),\n    [anon_sym_yield] = ACTIONS(2094),\n    [anon_sym_LBRACK] = ACTIONS(2092),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2092),\n    [anon_sym_LT] = ACTIONS(2094),\n    [anon_sym_SLASH] = ACTIONS(2094),\n    [anon_sym_struct] = ACTIONS(2094),\n    [anon_sym_async] = ACTIONS(2094),\n    [anon_sym_fn] = ACTIONS(2094),\n    [anon_sym_fn_STAR] = ACTIONS(2092),\n    [anon_sym_new] = ACTIONS(2094),\n    [anon_sym_PLUS] = ACTIONS(2094),\n    [anon_sym_DASH] = ACTIONS(2094),\n    [anon_sym_TILDE] = ACTIONS(2092),\n    [anon_sym_void] = ACTIONS(2094),\n    [anon_sym_delete] = ACTIONS(2094),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2092),\n    [anon_sym_DASH_DASH] = ACTIONS(2092),\n    [anon_sym_DQUOTE] = ACTIONS(2092),\n    [anon_sym_SQUOTE] = ACTIONS(2092),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2092),\n    [sym_number] = ACTIONS(2092),\n    [sym_this] = ACTIONS(2094),\n    [sym_super] = ACTIONS(2094),\n    [sym_true] = ACTIONS(2094),\n    [sym_false] = ACTIONS(2094),\n    [sym_null] = ACTIONS(2094),\n    [sym_undefined] = ACTIONS(2094),\n    [anon_sym_AT] = ACTIONS(2092),\n    [anon_sym_static] = ACTIONS(2094),\n    [anon_sym_declare] = ACTIONS(2094),\n    [anon_sym_public] = ACTIONS(2094),\n    [anon_sym_private] = ACTIONS(2094),\n    [anon_sym_protected] = ACTIONS(2094),\n    [anon_sym_override] = ACTIONS(2094),\n    [anon_sym_readonly] = ACTIONS(2094),\n    [anon_sym_module] = ACTIONS(2094),\n    [anon_sym_any] = ACTIONS(2094),\n    [anon_sym_number] = ACTIONS(2094),\n    [anon_sym_int] = ACTIONS(2094),\n    [anon_sym_float] = ACTIONS(2094),\n    [anon_sym_float2] = ACTIONS(2094),\n    [anon_sym_float3] = ACTIONS(2094),\n    [anon_sym_float4] = ACTIONS(2094),\n    [anon_sym_float3x3] = ACTIONS(2094),\n    [anon_sym_float2x2] = ACTIONS(2094),\n    [anon_sym_float4x4] = ACTIONS(2094),\n    [anon_sym_int2] = ACTIONS(2094),\n    [anon_sym_int3] = ACTIONS(2094),\n    [anon_sym_int4] = ACTIONS(2094),\n    [anon_sym_int3x3] = ACTIONS(2094),\n    [anon_sym_int2x2] = ACTIONS(2094),\n    [anon_sym_int4x4] = ACTIONS(2094),\n    [anon_sym_boolean] = ACTIONS(2094),\n    [anon_sym_string] = ACTIONS(2094),\n    [anon_sym_symbol] = ACTIONS(2094),\n    [anon_sym_workgroup] = ACTIONS(2094),\n    [anon_sym_get] = ACTIONS(2094),\n    [anon_sym_set] = ACTIONS(2094),\n    [anon_sym_trait] = ACTIONS(2094),\n    [anon_sym_impl] = ACTIONS(2094),\n    [anon_sym_enum] = ACTIONS(2094),\n    [anon_sym_shader] = ACTIONS(2094),\n  },\n  [605] = {\n    [ts_builtin_sym_end] = ACTIONS(2096),\n    [sym_identifier] = ACTIONS(2098),\n    [anon_sym_pub] = ACTIONS(2098),\n    [anon_sym_export] = ACTIONS(2098),\n    [anon_sym_type] = ACTIONS(2098),\n    [anon_sym_namespace] = ACTIONS(2098),\n    [anon_sym_LBRACE] = ACTIONS(2096),\n    [anon_sym_RBRACE] = ACTIONS(2096),\n    [anon_sym_typeof] = ACTIONS(2098),\n    [anon_sym_import] = ACTIONS(2098),\n    [anon_sym_var] = ACTIONS(2098),\n    [anon_sym_let] = ACTIONS(2098),\n    [anon_sym_const] = ACTIONS(2098),\n    [anon_sym_BANG] = ACTIONS(2096),\n    [anon_sym_else] = ACTIONS(2098),\n    [anon_sym_if] = ACTIONS(2098),\n    [anon_sym_switch] = ACTIONS(2098),\n    [anon_sym_for] = ACTIONS(2098),\n    [anon_sym_LPAREN] = ACTIONS(2096),\n    [anon_sym_await] = ACTIONS(2098),\n    [anon_sym_while] = ACTIONS(2098),\n    [anon_sym_do] = ACTIONS(2098),\n    [anon_sym_try] = ACTIONS(2098),\n    [anon_sym_with] = ACTIONS(2098),\n    [anon_sym_break] = ACTIONS(2098),\n    [anon_sym_continue] = ACTIONS(2098),\n    [anon_sym_debugger] = ACTIONS(2098),\n    [anon_sym_return] = ACTIONS(2098),\n    [anon_sym_throw] = ACTIONS(2098),\n    [anon_sym_SEMI] = ACTIONS(2096),\n    [anon_sym_case] = ACTIONS(2098),\n    [anon_sym_default] = ACTIONS(2098),\n    [anon_sym_yield] = ACTIONS(2098),\n    [anon_sym_LBRACK] = ACTIONS(2096),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2096),\n    [anon_sym_LT] = ACTIONS(2098),\n    [anon_sym_SLASH] = ACTIONS(2098),\n    [anon_sym_struct] = ACTIONS(2098),\n    [anon_sym_async] = ACTIONS(2098),\n    [anon_sym_fn] = ACTIONS(2098),\n    [anon_sym_fn_STAR] = ACTIONS(2096),\n    [anon_sym_new] = ACTIONS(2098),\n    [anon_sym_PLUS] = ACTIONS(2098),\n    [anon_sym_DASH] = ACTIONS(2098),\n    [anon_sym_TILDE] = ACTIONS(2096),\n    [anon_sym_void] = ACTIONS(2098),\n    [anon_sym_delete] = ACTIONS(2098),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2096),\n    [anon_sym_DASH_DASH] = ACTIONS(2096),\n    [anon_sym_DQUOTE] = ACTIONS(2096),\n    [anon_sym_SQUOTE] = ACTIONS(2096),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2096),\n    [sym_number] = ACTIONS(2096),\n    [sym_this] = ACTIONS(2098),\n    [sym_super] = ACTIONS(2098),\n    [sym_true] = ACTIONS(2098),\n    [sym_false] = ACTIONS(2098),\n    [sym_null] = ACTIONS(2098),\n    [sym_undefined] = ACTIONS(2098),\n    [anon_sym_AT] = ACTIONS(2096),\n    [anon_sym_static] = ACTIONS(2098),\n    [anon_sym_declare] = ACTIONS(2098),\n    [anon_sym_public] = ACTIONS(2098),\n    [anon_sym_private] = ACTIONS(2098),\n    [anon_sym_protected] = ACTIONS(2098),\n    [anon_sym_override] = ACTIONS(2098),\n    [anon_sym_readonly] = ACTIONS(2098),\n    [anon_sym_module] = ACTIONS(2098),\n    [anon_sym_any] = ACTIONS(2098),\n    [anon_sym_number] = ACTIONS(2098),\n    [anon_sym_int] = ACTIONS(2098),\n    [anon_sym_float] = ACTIONS(2098),\n    [anon_sym_float2] = ACTIONS(2098),\n    [anon_sym_float3] = ACTIONS(2098),\n    [anon_sym_float4] = ACTIONS(2098),\n    [anon_sym_float3x3] = ACTIONS(2098),\n    [anon_sym_float2x2] = ACTIONS(2098),\n    [anon_sym_float4x4] = ACTIONS(2098),\n    [anon_sym_int2] = ACTIONS(2098),\n    [anon_sym_int3] = ACTIONS(2098),\n    [anon_sym_int4] = ACTIONS(2098),\n    [anon_sym_int3x3] = ACTIONS(2098),\n    [anon_sym_int2x2] = ACTIONS(2098),\n    [anon_sym_int4x4] = ACTIONS(2098),\n    [anon_sym_boolean] = ACTIONS(2098),\n    [anon_sym_string] = ACTIONS(2098),\n    [anon_sym_symbol] = ACTIONS(2098),\n    [anon_sym_workgroup] = ACTIONS(2098),\n    [anon_sym_get] = ACTIONS(2098),\n    [anon_sym_set] = ACTIONS(2098),\n    [anon_sym_trait] = ACTIONS(2098),\n    [anon_sym_impl] = ACTIONS(2098),\n    [anon_sym_enum] = ACTIONS(2098),\n    [anon_sym_shader] = ACTIONS(2098),\n  },\n  [606] = {\n    [ts_builtin_sym_end] = ACTIONS(2100),\n    [sym_identifier] = ACTIONS(2102),\n    [anon_sym_pub] = ACTIONS(2102),\n    [anon_sym_export] = ACTIONS(2102),\n    [anon_sym_type] = ACTIONS(2102),\n    [anon_sym_namespace] = ACTIONS(2102),\n    [anon_sym_LBRACE] = ACTIONS(2100),\n    [anon_sym_RBRACE] = ACTIONS(2100),\n    [anon_sym_typeof] = ACTIONS(2102),\n    [anon_sym_import] = ACTIONS(2102),\n    [anon_sym_var] = ACTIONS(2102),\n    [anon_sym_let] = ACTIONS(2102),\n    [anon_sym_const] = ACTIONS(2102),\n    [anon_sym_BANG] = ACTIONS(2100),\n    [anon_sym_else] = ACTIONS(2102),\n    [anon_sym_if] = ACTIONS(2102),\n    [anon_sym_switch] = ACTIONS(2102),\n    [anon_sym_for] = ACTIONS(2102),\n    [anon_sym_LPAREN] = ACTIONS(2100),\n    [anon_sym_await] = ACTIONS(2102),\n    [anon_sym_while] = ACTIONS(2102),\n    [anon_sym_do] = ACTIONS(2102),\n    [anon_sym_try] = ACTIONS(2102),\n    [anon_sym_with] = ACTIONS(2102),\n    [anon_sym_break] = ACTIONS(2102),\n    [anon_sym_continue] = ACTIONS(2102),\n    [anon_sym_debugger] = ACTIONS(2102),\n    [anon_sym_return] = ACTIONS(2102),\n    [anon_sym_throw] = ACTIONS(2102),\n    [anon_sym_SEMI] = ACTIONS(2100),\n    [anon_sym_case] = ACTIONS(2102),\n    [anon_sym_default] = ACTIONS(2102),\n    [anon_sym_yield] = ACTIONS(2102),\n    [anon_sym_LBRACK] = ACTIONS(2100),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2100),\n    [anon_sym_LT] = ACTIONS(2102),\n    [anon_sym_SLASH] = ACTIONS(2102),\n    [anon_sym_struct] = ACTIONS(2102),\n    [anon_sym_async] = ACTIONS(2102),\n    [anon_sym_fn] = ACTIONS(2102),\n    [anon_sym_fn_STAR] = ACTIONS(2100),\n    [anon_sym_new] = ACTIONS(2102),\n    [anon_sym_PLUS] = ACTIONS(2102),\n    [anon_sym_DASH] = ACTIONS(2102),\n    [anon_sym_TILDE] = ACTIONS(2100),\n    [anon_sym_void] = ACTIONS(2102),\n    [anon_sym_delete] = ACTIONS(2102),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2100),\n    [anon_sym_DASH_DASH] = ACTIONS(2100),\n    [anon_sym_DQUOTE] = ACTIONS(2100),\n    [anon_sym_SQUOTE] = ACTIONS(2100),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2100),\n    [sym_number] = ACTIONS(2100),\n    [sym_this] = ACTIONS(2102),\n    [sym_super] = ACTIONS(2102),\n    [sym_true] = ACTIONS(2102),\n    [sym_false] = ACTIONS(2102),\n    [sym_null] = ACTIONS(2102),\n    [sym_undefined] = ACTIONS(2102),\n    [anon_sym_AT] = ACTIONS(2100),\n    [anon_sym_static] = ACTIONS(2102),\n    [anon_sym_declare] = ACTIONS(2102),\n    [anon_sym_public] = ACTIONS(2102),\n    [anon_sym_private] = ACTIONS(2102),\n    [anon_sym_protected] = ACTIONS(2102),\n    [anon_sym_override] = ACTIONS(2102),\n    [anon_sym_readonly] = ACTIONS(2102),\n    [anon_sym_module] = ACTIONS(2102),\n    [anon_sym_any] = ACTIONS(2102),\n    [anon_sym_number] = ACTIONS(2102),\n    [anon_sym_int] = ACTIONS(2102),\n    [anon_sym_float] = ACTIONS(2102),\n    [anon_sym_float2] = ACTIONS(2102),\n    [anon_sym_float3] = ACTIONS(2102),\n    [anon_sym_float4] = ACTIONS(2102),\n    [anon_sym_float3x3] = ACTIONS(2102),\n    [anon_sym_float2x2] = ACTIONS(2102),\n    [anon_sym_float4x4] = ACTIONS(2102),\n    [anon_sym_int2] = ACTIONS(2102),\n    [anon_sym_int3] = ACTIONS(2102),\n    [anon_sym_int4] = ACTIONS(2102),\n    [anon_sym_int3x3] = ACTIONS(2102),\n    [anon_sym_int2x2] = ACTIONS(2102),\n    [anon_sym_int4x4] = ACTIONS(2102),\n    [anon_sym_boolean] = ACTIONS(2102),\n    [anon_sym_string] = ACTIONS(2102),\n    [anon_sym_symbol] = ACTIONS(2102),\n    [anon_sym_workgroup] = ACTIONS(2102),\n    [anon_sym_get] = ACTIONS(2102),\n    [anon_sym_set] = ACTIONS(2102),\n    [anon_sym_trait] = ACTIONS(2102),\n    [anon_sym_impl] = ACTIONS(2102),\n    [anon_sym_enum] = ACTIONS(2102),\n    [anon_sym_shader] = ACTIONS(2102),\n  },\n  [607] = {\n    [ts_builtin_sym_end] = ACTIONS(2104),\n    [sym_identifier] = ACTIONS(2106),\n    [anon_sym_pub] = ACTIONS(2106),\n    [anon_sym_export] = ACTIONS(2106),\n    [anon_sym_type] = ACTIONS(2106),\n    [anon_sym_namespace] = ACTIONS(2106),\n    [anon_sym_LBRACE] = ACTIONS(2104),\n    [anon_sym_RBRACE] = ACTIONS(2104),\n    [anon_sym_typeof] = ACTIONS(2106),\n    [anon_sym_import] = ACTIONS(2106),\n    [anon_sym_var] = ACTIONS(2106),\n    [anon_sym_let] = ACTIONS(2106),\n    [anon_sym_const] = ACTIONS(2106),\n    [anon_sym_BANG] = ACTIONS(2104),\n    [anon_sym_else] = ACTIONS(2106),\n    [anon_sym_if] = ACTIONS(2106),\n    [anon_sym_switch] = ACTIONS(2106),\n    [anon_sym_for] = ACTIONS(2106),\n    [anon_sym_LPAREN] = ACTIONS(2104),\n    [anon_sym_await] = ACTIONS(2106),\n    [anon_sym_while] = ACTIONS(2106),\n    [anon_sym_do] = ACTIONS(2106),\n    [anon_sym_try] = ACTIONS(2106),\n    [anon_sym_with] = ACTIONS(2106),\n    [anon_sym_break] = ACTIONS(2106),\n    [anon_sym_continue] = ACTIONS(2106),\n    [anon_sym_debugger] = ACTIONS(2106),\n    [anon_sym_return] = ACTIONS(2106),\n    [anon_sym_throw] = ACTIONS(2106),\n    [anon_sym_SEMI] = ACTIONS(2104),\n    [anon_sym_case] = ACTIONS(2106),\n    [anon_sym_default] = ACTIONS(2106),\n    [anon_sym_yield] = ACTIONS(2106),\n    [anon_sym_LBRACK] = ACTIONS(2104),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2104),\n    [anon_sym_LT] = ACTIONS(2106),\n    [anon_sym_SLASH] = ACTIONS(2106),\n    [anon_sym_struct] = ACTIONS(2106),\n    [anon_sym_async] = ACTIONS(2106),\n    [anon_sym_fn] = ACTIONS(2106),\n    [anon_sym_fn_STAR] = ACTIONS(2104),\n    [anon_sym_new] = ACTIONS(2106),\n    [anon_sym_PLUS] = ACTIONS(2106),\n    [anon_sym_DASH] = ACTIONS(2106),\n    [anon_sym_TILDE] = ACTIONS(2104),\n    [anon_sym_void] = ACTIONS(2106),\n    [anon_sym_delete] = ACTIONS(2106),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2104),\n    [anon_sym_DASH_DASH] = ACTIONS(2104),\n    [anon_sym_DQUOTE] = ACTIONS(2104),\n    [anon_sym_SQUOTE] = ACTIONS(2104),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2104),\n    [sym_number] = ACTIONS(2104),\n    [sym_this] = ACTIONS(2106),\n    [sym_super] = ACTIONS(2106),\n    [sym_true] = ACTIONS(2106),\n    [sym_false] = ACTIONS(2106),\n    [sym_null] = ACTIONS(2106),\n    [sym_undefined] = ACTIONS(2106),\n    [anon_sym_AT] = ACTIONS(2104),\n    [anon_sym_static] = ACTIONS(2106),\n    [anon_sym_declare] = ACTIONS(2106),\n    [anon_sym_public] = ACTIONS(2106),\n    [anon_sym_private] = ACTIONS(2106),\n    [anon_sym_protected] = ACTIONS(2106),\n    [anon_sym_override] = ACTIONS(2106),\n    [anon_sym_readonly] = ACTIONS(2106),\n    [anon_sym_module] = ACTIONS(2106),\n    [anon_sym_any] = ACTIONS(2106),\n    [anon_sym_number] = ACTIONS(2106),\n    [anon_sym_int] = ACTIONS(2106),\n    [anon_sym_float] = ACTIONS(2106),\n    [anon_sym_float2] = ACTIONS(2106),\n    [anon_sym_float3] = ACTIONS(2106),\n    [anon_sym_float4] = ACTIONS(2106),\n    [anon_sym_float3x3] = ACTIONS(2106),\n    [anon_sym_float2x2] = ACTIONS(2106),\n    [anon_sym_float4x4] = ACTIONS(2106),\n    [anon_sym_int2] = ACTIONS(2106),\n    [anon_sym_int3] = ACTIONS(2106),\n    [anon_sym_int4] = ACTIONS(2106),\n    [anon_sym_int3x3] = ACTIONS(2106),\n    [anon_sym_int2x2] = ACTIONS(2106),\n    [anon_sym_int4x4] = ACTIONS(2106),\n    [anon_sym_boolean] = ACTIONS(2106),\n    [anon_sym_string] = ACTIONS(2106),\n    [anon_sym_symbol] = ACTIONS(2106),\n    [anon_sym_workgroup] = ACTIONS(2106),\n    [anon_sym_get] = ACTIONS(2106),\n    [anon_sym_set] = ACTIONS(2106),\n    [anon_sym_trait] = ACTIONS(2106),\n    [anon_sym_impl] = ACTIONS(2106),\n    [anon_sym_enum] = ACTIONS(2106),\n    [anon_sym_shader] = ACTIONS(2106),\n  },\n  [608] = {\n    [ts_builtin_sym_end] = ACTIONS(2108),\n    [sym_identifier] = ACTIONS(2110),\n    [anon_sym_pub] = ACTIONS(2110),\n    [anon_sym_export] = ACTIONS(2110),\n    [anon_sym_type] = ACTIONS(2110),\n    [anon_sym_namespace] = ACTIONS(2110),\n    [anon_sym_LBRACE] = ACTIONS(2108),\n    [anon_sym_RBRACE] = ACTIONS(2108),\n    [anon_sym_typeof] = ACTIONS(2110),\n    [anon_sym_import] = ACTIONS(2110),\n    [anon_sym_var] = ACTIONS(2110),\n    [anon_sym_let] = ACTIONS(2110),\n    [anon_sym_const] = ACTIONS(2110),\n    [anon_sym_BANG] = ACTIONS(2108),\n    [anon_sym_else] = ACTIONS(2110),\n    [anon_sym_if] = ACTIONS(2110),\n    [anon_sym_switch] = ACTIONS(2110),\n    [anon_sym_for] = ACTIONS(2110),\n    [anon_sym_LPAREN] = ACTIONS(2108),\n    [anon_sym_await] = ACTIONS(2110),\n    [anon_sym_while] = ACTIONS(2110),\n    [anon_sym_do] = ACTIONS(2110),\n    [anon_sym_try] = ACTIONS(2110),\n    [anon_sym_with] = ACTIONS(2110),\n    [anon_sym_break] = ACTIONS(2110),\n    [anon_sym_continue] = ACTIONS(2110),\n    [anon_sym_debugger] = ACTIONS(2110),\n    [anon_sym_return] = ACTIONS(2110),\n    [anon_sym_throw] = ACTIONS(2110),\n    [anon_sym_SEMI] = ACTIONS(2108),\n    [anon_sym_case] = ACTIONS(2110),\n    [anon_sym_default] = ACTIONS(2110),\n    [anon_sym_yield] = ACTIONS(2110),\n    [anon_sym_LBRACK] = ACTIONS(2108),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2108),\n    [anon_sym_LT] = ACTIONS(2110),\n    [anon_sym_SLASH] = ACTIONS(2110),\n    [anon_sym_struct] = ACTIONS(2110),\n    [anon_sym_async] = ACTIONS(2110),\n    [anon_sym_fn] = ACTIONS(2110),\n    [anon_sym_fn_STAR] = ACTIONS(2108),\n    [anon_sym_new] = ACTIONS(2110),\n    [anon_sym_PLUS] = ACTIONS(2110),\n    [anon_sym_DASH] = ACTIONS(2110),\n    [anon_sym_TILDE] = ACTIONS(2108),\n    [anon_sym_void] = ACTIONS(2110),\n    [anon_sym_delete] = ACTIONS(2110),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2108),\n    [anon_sym_DASH_DASH] = ACTIONS(2108),\n    [anon_sym_DQUOTE] = ACTIONS(2108),\n    [anon_sym_SQUOTE] = ACTIONS(2108),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2108),\n    [sym_number] = ACTIONS(2108),\n    [sym_this] = ACTIONS(2110),\n    [sym_super] = ACTIONS(2110),\n    [sym_true] = ACTIONS(2110),\n    [sym_false] = ACTIONS(2110),\n    [sym_null] = ACTIONS(2110),\n    [sym_undefined] = ACTIONS(2110),\n    [anon_sym_AT] = ACTIONS(2108),\n    [anon_sym_static] = ACTIONS(2110),\n    [anon_sym_declare] = ACTIONS(2110),\n    [anon_sym_public] = ACTIONS(2110),\n    [anon_sym_private] = ACTIONS(2110),\n    [anon_sym_protected] = ACTIONS(2110),\n    [anon_sym_override] = ACTIONS(2110),\n    [anon_sym_readonly] = ACTIONS(2110),\n    [anon_sym_module] = ACTIONS(2110),\n    [anon_sym_any] = ACTIONS(2110),\n    [anon_sym_number] = ACTIONS(2110),\n    [anon_sym_int] = ACTIONS(2110),\n    [anon_sym_float] = ACTIONS(2110),\n    [anon_sym_float2] = ACTIONS(2110),\n    [anon_sym_float3] = ACTIONS(2110),\n    [anon_sym_float4] = ACTIONS(2110),\n    [anon_sym_float3x3] = ACTIONS(2110),\n    [anon_sym_float2x2] = ACTIONS(2110),\n    [anon_sym_float4x4] = ACTIONS(2110),\n    [anon_sym_int2] = ACTIONS(2110),\n    [anon_sym_int3] = ACTIONS(2110),\n    [anon_sym_int4] = ACTIONS(2110),\n    [anon_sym_int3x3] = ACTIONS(2110),\n    [anon_sym_int2x2] = ACTIONS(2110),\n    [anon_sym_int4x4] = ACTIONS(2110),\n    [anon_sym_boolean] = ACTIONS(2110),\n    [anon_sym_string] = ACTIONS(2110),\n    [anon_sym_symbol] = ACTIONS(2110),\n    [anon_sym_workgroup] = ACTIONS(2110),\n    [anon_sym_get] = ACTIONS(2110),\n    [anon_sym_set] = ACTIONS(2110),\n    [anon_sym_trait] = ACTIONS(2110),\n    [anon_sym_impl] = ACTIONS(2110),\n    [anon_sym_enum] = ACTIONS(2110),\n    [anon_sym_shader] = ACTIONS(2110),\n  },\n  [609] = {\n    [ts_builtin_sym_end] = ACTIONS(2112),\n    [sym_identifier] = ACTIONS(2114),\n    [anon_sym_pub] = ACTIONS(2114),\n    [anon_sym_export] = ACTIONS(2114),\n    [anon_sym_type] = ACTIONS(2114),\n    [anon_sym_namespace] = ACTIONS(2114),\n    [anon_sym_LBRACE] = ACTIONS(2112),\n    [anon_sym_RBRACE] = ACTIONS(2112),\n    [anon_sym_typeof] = ACTIONS(2114),\n    [anon_sym_import] = ACTIONS(2114),\n    [anon_sym_var] = ACTIONS(2114),\n    [anon_sym_let] = ACTIONS(2114),\n    [anon_sym_const] = ACTIONS(2114),\n    [anon_sym_BANG] = ACTIONS(2112),\n    [anon_sym_else] = ACTIONS(2114),\n    [anon_sym_if] = ACTIONS(2114),\n    [anon_sym_switch] = ACTIONS(2114),\n    [anon_sym_for] = ACTIONS(2114),\n    [anon_sym_LPAREN] = ACTIONS(2112),\n    [anon_sym_await] = ACTIONS(2114),\n    [anon_sym_while] = ACTIONS(2114),\n    [anon_sym_do] = ACTIONS(2114),\n    [anon_sym_try] = ACTIONS(2114),\n    [anon_sym_with] = ACTIONS(2114),\n    [anon_sym_break] = ACTIONS(2114),\n    [anon_sym_continue] = ACTIONS(2114),\n    [anon_sym_debugger] = ACTIONS(2114),\n    [anon_sym_return] = ACTIONS(2114),\n    [anon_sym_throw] = ACTIONS(2114),\n    [anon_sym_SEMI] = ACTIONS(2112),\n    [anon_sym_case] = ACTIONS(2114),\n    [anon_sym_default] = ACTIONS(2114),\n    [anon_sym_yield] = ACTIONS(2114),\n    [anon_sym_LBRACK] = ACTIONS(2112),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2112),\n    [anon_sym_LT] = ACTIONS(2114),\n    [anon_sym_SLASH] = ACTIONS(2114),\n    [anon_sym_struct] = ACTIONS(2114),\n    [anon_sym_async] = ACTIONS(2114),\n    [anon_sym_fn] = ACTIONS(2114),\n    [anon_sym_fn_STAR] = ACTIONS(2112),\n    [anon_sym_new] = ACTIONS(2114),\n    [anon_sym_PLUS] = ACTIONS(2114),\n    [anon_sym_DASH] = ACTIONS(2114),\n    [anon_sym_TILDE] = ACTIONS(2112),\n    [anon_sym_void] = ACTIONS(2114),\n    [anon_sym_delete] = ACTIONS(2114),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2112),\n    [anon_sym_DASH_DASH] = ACTIONS(2112),\n    [anon_sym_DQUOTE] = ACTIONS(2112),\n    [anon_sym_SQUOTE] = ACTIONS(2112),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2112),\n    [sym_number] = ACTIONS(2112),\n    [sym_this] = ACTIONS(2114),\n    [sym_super] = ACTIONS(2114),\n    [sym_true] = ACTIONS(2114),\n    [sym_false] = ACTIONS(2114),\n    [sym_null] = ACTIONS(2114),\n    [sym_undefined] = ACTIONS(2114),\n    [anon_sym_AT] = ACTIONS(2112),\n    [anon_sym_static] = ACTIONS(2114),\n    [anon_sym_declare] = ACTIONS(2114),\n    [anon_sym_public] = ACTIONS(2114),\n    [anon_sym_private] = ACTIONS(2114),\n    [anon_sym_protected] = ACTIONS(2114),\n    [anon_sym_override] = ACTIONS(2114),\n    [anon_sym_readonly] = ACTIONS(2114),\n    [anon_sym_module] = ACTIONS(2114),\n    [anon_sym_any] = ACTIONS(2114),\n    [anon_sym_number] = ACTIONS(2114),\n    [anon_sym_int] = ACTIONS(2114),\n    [anon_sym_float] = ACTIONS(2114),\n    [anon_sym_float2] = ACTIONS(2114),\n    [anon_sym_float3] = ACTIONS(2114),\n    [anon_sym_float4] = ACTIONS(2114),\n    [anon_sym_float3x3] = ACTIONS(2114),\n    [anon_sym_float2x2] = ACTIONS(2114),\n    [anon_sym_float4x4] = ACTIONS(2114),\n    [anon_sym_int2] = ACTIONS(2114),\n    [anon_sym_int3] = ACTIONS(2114),\n    [anon_sym_int4] = ACTIONS(2114),\n    [anon_sym_int3x3] = ACTIONS(2114),\n    [anon_sym_int2x2] = ACTIONS(2114),\n    [anon_sym_int4x4] = ACTIONS(2114),\n    [anon_sym_boolean] = ACTIONS(2114),\n    [anon_sym_string] = ACTIONS(2114),\n    [anon_sym_symbol] = ACTIONS(2114),\n    [anon_sym_workgroup] = ACTIONS(2114),\n    [anon_sym_get] = ACTIONS(2114),\n    [anon_sym_set] = ACTIONS(2114),\n    [anon_sym_trait] = ACTIONS(2114),\n    [anon_sym_impl] = ACTIONS(2114),\n    [anon_sym_enum] = ACTIONS(2114),\n    [anon_sym_shader] = ACTIONS(2114),\n  },\n  [610] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [611] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [612] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [613] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [614] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [615] = {\n    [ts_builtin_sym_end] = ACTIONS(2116),\n    [sym_identifier] = ACTIONS(2118),\n    [anon_sym_pub] = ACTIONS(2118),\n    [anon_sym_export] = ACTIONS(2118),\n    [anon_sym_type] = ACTIONS(2118),\n    [anon_sym_namespace] = ACTIONS(2118),\n    [anon_sym_LBRACE] = ACTIONS(2116),\n    [anon_sym_RBRACE] = ACTIONS(2116),\n    [anon_sym_typeof] = ACTIONS(2118),\n    [anon_sym_import] = ACTIONS(2118),\n    [anon_sym_var] = ACTIONS(2118),\n    [anon_sym_let] = ACTIONS(2118),\n    [anon_sym_const] = ACTIONS(2118),\n    [anon_sym_BANG] = ACTIONS(2116),\n    [anon_sym_else] = ACTIONS(2118),\n    [anon_sym_if] = ACTIONS(2118),\n    [anon_sym_switch] = ACTIONS(2118),\n    [anon_sym_for] = ACTIONS(2118),\n    [anon_sym_LPAREN] = ACTIONS(2116),\n    [anon_sym_await] = ACTIONS(2118),\n    [anon_sym_while] = ACTIONS(2118),\n    [anon_sym_do] = ACTIONS(2118),\n    [anon_sym_try] = ACTIONS(2118),\n    [anon_sym_with] = ACTIONS(2118),\n    [anon_sym_break] = ACTIONS(2118),\n    [anon_sym_continue] = ACTIONS(2118),\n    [anon_sym_debugger] = ACTIONS(2118),\n    [anon_sym_return] = ACTIONS(2118),\n    [anon_sym_throw] = ACTIONS(2118),\n    [anon_sym_SEMI] = ACTIONS(2116),\n    [anon_sym_case] = ACTIONS(2118),\n    [anon_sym_default] = ACTIONS(2118),\n    [anon_sym_yield] = ACTIONS(2118),\n    [anon_sym_LBRACK] = ACTIONS(2116),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2116),\n    [anon_sym_LT] = ACTIONS(2118),\n    [anon_sym_SLASH] = ACTIONS(2118),\n    [anon_sym_struct] = ACTIONS(2118),\n    [anon_sym_async] = ACTIONS(2118),\n    [anon_sym_fn] = ACTIONS(2118),\n    [anon_sym_fn_STAR] = ACTIONS(2116),\n    [anon_sym_new] = ACTIONS(2118),\n    [anon_sym_PLUS] = ACTIONS(2118),\n    [anon_sym_DASH] = ACTIONS(2118),\n    [anon_sym_TILDE] = ACTIONS(2116),\n    [anon_sym_void] = ACTIONS(2118),\n    [anon_sym_delete] = ACTIONS(2118),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2116),\n    [anon_sym_DASH_DASH] = ACTIONS(2116),\n    [anon_sym_DQUOTE] = ACTIONS(2116),\n    [anon_sym_SQUOTE] = ACTIONS(2116),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2116),\n    [sym_number] = ACTIONS(2116),\n    [sym_this] = ACTIONS(2118),\n    [sym_super] = ACTIONS(2118),\n    [sym_true] = ACTIONS(2118),\n    [sym_false] = ACTIONS(2118),\n    [sym_null] = ACTIONS(2118),\n    [sym_undefined] = ACTIONS(2118),\n    [anon_sym_AT] = ACTIONS(2116),\n    [anon_sym_static] = ACTIONS(2118),\n    [anon_sym_declare] = ACTIONS(2118),\n    [anon_sym_public] = ACTIONS(2118),\n    [anon_sym_private] = ACTIONS(2118),\n    [anon_sym_protected] = ACTIONS(2118),\n    [anon_sym_override] = ACTIONS(2118),\n    [anon_sym_readonly] = ACTIONS(2118),\n    [anon_sym_module] = ACTIONS(2118),\n    [anon_sym_any] = ACTIONS(2118),\n    [anon_sym_number] = ACTIONS(2118),\n    [anon_sym_int] = ACTIONS(2118),\n    [anon_sym_float] = ACTIONS(2118),\n    [anon_sym_float2] = ACTIONS(2118),\n    [anon_sym_float3] = ACTIONS(2118),\n    [anon_sym_float4] = ACTIONS(2118),\n    [anon_sym_float3x3] = ACTIONS(2118),\n    [anon_sym_float2x2] = ACTIONS(2118),\n    [anon_sym_float4x4] = ACTIONS(2118),\n    [anon_sym_int2] = ACTIONS(2118),\n    [anon_sym_int3] = ACTIONS(2118),\n    [anon_sym_int4] = ACTIONS(2118),\n    [anon_sym_int3x3] = ACTIONS(2118),\n    [anon_sym_int2x2] = ACTIONS(2118),\n    [anon_sym_int4x4] = ACTIONS(2118),\n    [anon_sym_boolean] = ACTIONS(2118),\n    [anon_sym_string] = ACTIONS(2118),\n    [anon_sym_symbol] = ACTIONS(2118),\n    [anon_sym_workgroup] = ACTIONS(2118),\n    [anon_sym_get] = ACTIONS(2118),\n    [anon_sym_set] = ACTIONS(2118),\n    [anon_sym_trait] = ACTIONS(2118),\n    [anon_sym_impl] = ACTIONS(2118),\n    [anon_sym_enum] = ACTIONS(2118),\n    [anon_sym_shader] = ACTIONS(2118),\n  },\n  [616] = {\n    [ts_builtin_sym_end] = ACTIONS(2120),\n    [sym_identifier] = ACTIONS(2122),\n    [anon_sym_pub] = ACTIONS(2122),\n    [anon_sym_export] = ACTIONS(2122),\n    [anon_sym_type] = ACTIONS(2122),\n    [anon_sym_namespace] = ACTIONS(2122),\n    [anon_sym_LBRACE] = ACTIONS(2120),\n    [anon_sym_RBRACE] = ACTIONS(2120),\n    [anon_sym_typeof] = ACTIONS(2122),\n    [anon_sym_import] = ACTIONS(2122),\n    [anon_sym_var] = ACTIONS(2122),\n    [anon_sym_let] = ACTIONS(2122),\n    [anon_sym_const] = ACTIONS(2122),\n    [anon_sym_BANG] = ACTIONS(2120),\n    [anon_sym_else] = ACTIONS(2122),\n    [anon_sym_if] = ACTIONS(2122),\n    [anon_sym_switch] = ACTIONS(2122),\n    [anon_sym_for] = ACTIONS(2122),\n    [anon_sym_LPAREN] = ACTIONS(2120),\n    [anon_sym_await] = ACTIONS(2122),\n    [anon_sym_while] = ACTIONS(2122),\n    [anon_sym_do] = ACTIONS(2122),\n    [anon_sym_try] = ACTIONS(2122),\n    [anon_sym_with] = ACTIONS(2122),\n    [anon_sym_break] = ACTIONS(2122),\n    [anon_sym_continue] = ACTIONS(2122),\n    [anon_sym_debugger] = ACTIONS(2122),\n    [anon_sym_return] = ACTIONS(2122),\n    [anon_sym_throw] = ACTIONS(2122),\n    [anon_sym_SEMI] = ACTIONS(2120),\n    [anon_sym_case] = ACTIONS(2122),\n    [anon_sym_default] = ACTIONS(2122),\n    [anon_sym_yield] = ACTIONS(2122),\n    [anon_sym_LBRACK] = ACTIONS(2120),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2120),\n    [anon_sym_LT] = ACTIONS(2122),\n    [anon_sym_SLASH] = ACTIONS(2122),\n    [anon_sym_struct] = ACTIONS(2122),\n    [anon_sym_async] = ACTIONS(2122),\n    [anon_sym_fn] = ACTIONS(2122),\n    [anon_sym_fn_STAR] = ACTIONS(2120),\n    [anon_sym_new] = ACTIONS(2122),\n    [anon_sym_PLUS] = ACTIONS(2122),\n    [anon_sym_DASH] = ACTIONS(2122),\n    [anon_sym_TILDE] = ACTIONS(2120),\n    [anon_sym_void] = ACTIONS(2122),\n    [anon_sym_delete] = ACTIONS(2122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2120),\n    [anon_sym_DASH_DASH] = ACTIONS(2120),\n    [anon_sym_DQUOTE] = ACTIONS(2120),\n    [anon_sym_SQUOTE] = ACTIONS(2120),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2120),\n    [sym_number] = ACTIONS(2120),\n    [sym_this] = ACTIONS(2122),\n    [sym_super] = ACTIONS(2122),\n    [sym_true] = ACTIONS(2122),\n    [sym_false] = ACTIONS(2122),\n    [sym_null] = ACTIONS(2122),\n    [sym_undefined] = ACTIONS(2122),\n    [anon_sym_AT] = ACTIONS(2120),\n    [anon_sym_static] = ACTIONS(2122),\n    [anon_sym_declare] = ACTIONS(2122),\n    [anon_sym_public] = ACTIONS(2122),\n    [anon_sym_private] = ACTIONS(2122),\n    [anon_sym_protected] = ACTIONS(2122),\n    [anon_sym_override] = ACTIONS(2122),\n    [anon_sym_readonly] = ACTIONS(2122),\n    [anon_sym_module] = ACTIONS(2122),\n    [anon_sym_any] = ACTIONS(2122),\n    [anon_sym_number] = ACTIONS(2122),\n    [anon_sym_int] = ACTIONS(2122),\n    [anon_sym_float] = ACTIONS(2122),\n    [anon_sym_float2] = ACTIONS(2122),\n    [anon_sym_float3] = ACTIONS(2122),\n    [anon_sym_float4] = ACTIONS(2122),\n    [anon_sym_float3x3] = ACTIONS(2122),\n    [anon_sym_float2x2] = ACTIONS(2122),\n    [anon_sym_float4x4] = ACTIONS(2122),\n    [anon_sym_int2] = ACTIONS(2122),\n    [anon_sym_int3] = ACTIONS(2122),\n    [anon_sym_int4] = ACTIONS(2122),\n    [anon_sym_int3x3] = ACTIONS(2122),\n    [anon_sym_int2x2] = ACTIONS(2122),\n    [anon_sym_int4x4] = ACTIONS(2122),\n    [anon_sym_boolean] = ACTIONS(2122),\n    [anon_sym_string] = ACTIONS(2122),\n    [anon_sym_symbol] = ACTIONS(2122),\n    [anon_sym_workgroup] = ACTIONS(2122),\n    [anon_sym_get] = ACTIONS(2122),\n    [anon_sym_set] = ACTIONS(2122),\n    [anon_sym_trait] = ACTIONS(2122),\n    [anon_sym_impl] = ACTIONS(2122),\n    [anon_sym_enum] = ACTIONS(2122),\n    [anon_sym_shader] = ACTIONS(2122),\n  },\n  [617] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [618] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [619] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [620] = {\n    [ts_builtin_sym_end] = ACTIONS(2124),\n    [sym_identifier] = ACTIONS(2126),\n    [anon_sym_pub] = ACTIONS(2126),\n    [anon_sym_export] = ACTIONS(2126),\n    [anon_sym_type] = ACTIONS(2126),\n    [anon_sym_namespace] = ACTIONS(2126),\n    [anon_sym_LBRACE] = ACTIONS(2124),\n    [anon_sym_RBRACE] = ACTIONS(2124),\n    [anon_sym_typeof] = ACTIONS(2126),\n    [anon_sym_import] = ACTIONS(2126),\n    [anon_sym_var] = ACTIONS(2126),\n    [anon_sym_let] = ACTIONS(2126),\n    [anon_sym_const] = ACTIONS(2126),\n    [anon_sym_BANG] = ACTIONS(2124),\n    [anon_sym_else] = ACTIONS(2126),\n    [anon_sym_if] = ACTIONS(2126),\n    [anon_sym_switch] = ACTIONS(2126),\n    [anon_sym_for] = ACTIONS(2126),\n    [anon_sym_LPAREN] = ACTIONS(2124),\n    [anon_sym_await] = ACTIONS(2126),\n    [anon_sym_while] = ACTIONS(2126),\n    [anon_sym_do] = ACTIONS(2126),\n    [anon_sym_try] = ACTIONS(2126),\n    [anon_sym_with] = ACTIONS(2126),\n    [anon_sym_break] = ACTIONS(2126),\n    [anon_sym_continue] = ACTIONS(2126),\n    [anon_sym_debugger] = ACTIONS(2126),\n    [anon_sym_return] = ACTIONS(2126),\n    [anon_sym_throw] = ACTIONS(2126),\n    [anon_sym_SEMI] = ACTIONS(2124),\n    [anon_sym_case] = ACTIONS(2126),\n    [anon_sym_default] = ACTIONS(2126),\n    [anon_sym_yield] = ACTIONS(2126),\n    [anon_sym_LBRACK] = ACTIONS(2124),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2124),\n    [anon_sym_LT] = ACTIONS(2126),\n    [anon_sym_SLASH] = ACTIONS(2126),\n    [anon_sym_struct] = ACTIONS(2126),\n    [anon_sym_async] = ACTIONS(2126),\n    [anon_sym_fn] = ACTIONS(2126),\n    [anon_sym_fn_STAR] = ACTIONS(2124),\n    [anon_sym_new] = ACTIONS(2126),\n    [anon_sym_PLUS] = ACTIONS(2126),\n    [anon_sym_DASH] = ACTIONS(2126),\n    [anon_sym_TILDE] = ACTIONS(2124),\n    [anon_sym_void] = ACTIONS(2126),\n    [anon_sym_delete] = ACTIONS(2126),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2124),\n    [anon_sym_DASH_DASH] = ACTIONS(2124),\n    [anon_sym_DQUOTE] = ACTIONS(2124),\n    [anon_sym_SQUOTE] = ACTIONS(2124),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2124),\n    [sym_number] = ACTIONS(2124),\n    [sym_this] = ACTIONS(2126),\n    [sym_super] = ACTIONS(2126),\n    [sym_true] = ACTIONS(2126),\n    [sym_false] = ACTIONS(2126),\n    [sym_null] = ACTIONS(2126),\n    [sym_undefined] = ACTIONS(2126),\n    [anon_sym_AT] = ACTIONS(2124),\n    [anon_sym_static] = ACTIONS(2126),\n    [anon_sym_declare] = ACTIONS(2126),\n    [anon_sym_public] = ACTIONS(2126),\n    [anon_sym_private] = ACTIONS(2126),\n    [anon_sym_protected] = ACTIONS(2126),\n    [anon_sym_override] = ACTIONS(2126),\n    [anon_sym_readonly] = ACTIONS(2126),\n    [anon_sym_module] = ACTIONS(2126),\n    [anon_sym_any] = ACTIONS(2126),\n    [anon_sym_number] = ACTIONS(2126),\n    [anon_sym_int] = ACTIONS(2126),\n    [anon_sym_float] = ACTIONS(2126),\n    [anon_sym_float2] = ACTIONS(2126),\n    [anon_sym_float3] = ACTIONS(2126),\n    [anon_sym_float4] = ACTIONS(2126),\n    [anon_sym_float3x3] = ACTIONS(2126),\n    [anon_sym_float2x2] = ACTIONS(2126),\n    [anon_sym_float4x4] = ACTIONS(2126),\n    [anon_sym_int2] = ACTIONS(2126),\n    [anon_sym_int3] = ACTIONS(2126),\n    [anon_sym_int4] = ACTIONS(2126),\n    [anon_sym_int3x3] = ACTIONS(2126),\n    [anon_sym_int2x2] = ACTIONS(2126),\n    [anon_sym_int4x4] = ACTIONS(2126),\n    [anon_sym_boolean] = ACTIONS(2126),\n    [anon_sym_string] = ACTIONS(2126),\n    [anon_sym_symbol] = ACTIONS(2126),\n    [anon_sym_workgroup] = ACTIONS(2126),\n    [anon_sym_get] = ACTIONS(2126),\n    [anon_sym_set] = ACTIONS(2126),\n    [anon_sym_trait] = ACTIONS(2126),\n    [anon_sym_impl] = ACTIONS(2126),\n    [anon_sym_enum] = ACTIONS(2126),\n    [anon_sym_shader] = ACTIONS(2126),\n  },\n  [621] = {\n    [ts_builtin_sym_end] = ACTIONS(2128),\n    [sym_identifier] = ACTIONS(2130),\n    [anon_sym_pub] = ACTIONS(2130),\n    [anon_sym_export] = ACTIONS(2130),\n    [anon_sym_type] = ACTIONS(2130),\n    [anon_sym_namespace] = ACTIONS(2130),\n    [anon_sym_LBRACE] = ACTIONS(2128),\n    [anon_sym_RBRACE] = ACTIONS(2128),\n    [anon_sym_typeof] = ACTIONS(2130),\n    [anon_sym_import] = ACTIONS(2130),\n    [anon_sym_var] = ACTIONS(2130),\n    [anon_sym_let] = ACTIONS(2130),\n    [anon_sym_const] = ACTIONS(2130),\n    [anon_sym_BANG] = ACTIONS(2128),\n    [anon_sym_else] = ACTIONS(2130),\n    [anon_sym_if] = ACTIONS(2130),\n    [anon_sym_switch] = ACTIONS(2130),\n    [anon_sym_for] = ACTIONS(2130),\n    [anon_sym_LPAREN] = ACTIONS(2128),\n    [anon_sym_await] = ACTIONS(2130),\n    [anon_sym_while] = ACTIONS(2130),\n    [anon_sym_do] = ACTIONS(2130),\n    [anon_sym_try] = ACTIONS(2130),\n    [anon_sym_with] = ACTIONS(2130),\n    [anon_sym_break] = ACTIONS(2130),\n    [anon_sym_continue] = ACTIONS(2130),\n    [anon_sym_debugger] = ACTIONS(2130),\n    [anon_sym_return] = ACTIONS(2130),\n    [anon_sym_throw] = ACTIONS(2130),\n    [anon_sym_SEMI] = ACTIONS(2128),\n    [anon_sym_case] = ACTIONS(2130),\n    [anon_sym_default] = ACTIONS(2130),\n    [anon_sym_yield] = ACTIONS(2130),\n    [anon_sym_LBRACK] = ACTIONS(2128),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2128),\n    [anon_sym_LT] = ACTIONS(2130),\n    [anon_sym_SLASH] = ACTIONS(2130),\n    [anon_sym_struct] = ACTIONS(2130),\n    [anon_sym_async] = ACTIONS(2130),\n    [anon_sym_fn] = ACTIONS(2130),\n    [anon_sym_fn_STAR] = ACTIONS(2128),\n    [anon_sym_new] = ACTIONS(2130),\n    [anon_sym_PLUS] = ACTIONS(2130),\n    [anon_sym_DASH] = ACTIONS(2130),\n    [anon_sym_TILDE] = ACTIONS(2128),\n    [anon_sym_void] = ACTIONS(2130),\n    [anon_sym_delete] = ACTIONS(2130),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2128),\n    [anon_sym_DASH_DASH] = ACTIONS(2128),\n    [anon_sym_DQUOTE] = ACTIONS(2128),\n    [anon_sym_SQUOTE] = ACTIONS(2128),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2128),\n    [sym_number] = ACTIONS(2128),\n    [sym_this] = ACTIONS(2130),\n    [sym_super] = ACTIONS(2130),\n    [sym_true] = ACTIONS(2130),\n    [sym_false] = ACTIONS(2130),\n    [sym_null] = ACTIONS(2130),\n    [sym_undefined] = ACTIONS(2130),\n    [anon_sym_AT] = ACTIONS(2128),\n    [anon_sym_static] = ACTIONS(2130),\n    [anon_sym_declare] = ACTIONS(2130),\n    [anon_sym_public] = ACTIONS(2130),\n    [anon_sym_private] = ACTIONS(2130),\n    [anon_sym_protected] = ACTIONS(2130),\n    [anon_sym_override] = ACTIONS(2130),\n    [anon_sym_readonly] = ACTIONS(2130),\n    [anon_sym_module] = ACTIONS(2130),\n    [anon_sym_any] = ACTIONS(2130),\n    [anon_sym_number] = ACTIONS(2130),\n    [anon_sym_int] = ACTIONS(2130),\n    [anon_sym_float] = ACTIONS(2130),\n    [anon_sym_float2] = ACTIONS(2130),\n    [anon_sym_float3] = ACTIONS(2130),\n    [anon_sym_float4] = ACTIONS(2130),\n    [anon_sym_float3x3] = ACTIONS(2130),\n    [anon_sym_float2x2] = ACTIONS(2130),\n    [anon_sym_float4x4] = ACTIONS(2130),\n    [anon_sym_int2] = ACTIONS(2130),\n    [anon_sym_int3] = ACTIONS(2130),\n    [anon_sym_int4] = ACTIONS(2130),\n    [anon_sym_int3x3] = ACTIONS(2130),\n    [anon_sym_int2x2] = ACTIONS(2130),\n    [anon_sym_int4x4] = ACTIONS(2130),\n    [anon_sym_boolean] = ACTIONS(2130),\n    [anon_sym_string] = ACTIONS(2130),\n    [anon_sym_symbol] = ACTIONS(2130),\n    [anon_sym_workgroup] = ACTIONS(2130),\n    [anon_sym_get] = ACTIONS(2130),\n    [anon_sym_set] = ACTIONS(2130),\n    [anon_sym_trait] = ACTIONS(2130),\n    [anon_sym_impl] = ACTIONS(2130),\n    [anon_sym_enum] = ACTIONS(2130),\n    [anon_sym_shader] = ACTIONS(2130),\n  },\n  [622] = {\n    [ts_builtin_sym_end] = ACTIONS(2132),\n    [sym_identifier] = ACTIONS(2134),\n    [anon_sym_pub] = ACTIONS(2134),\n    [anon_sym_export] = ACTIONS(2134),\n    [anon_sym_type] = ACTIONS(2134),\n    [anon_sym_namespace] = ACTIONS(2134),\n    [anon_sym_LBRACE] = ACTIONS(2132),\n    [anon_sym_RBRACE] = ACTIONS(2132),\n    [anon_sym_typeof] = ACTIONS(2134),\n    [anon_sym_import] = ACTIONS(2134),\n    [anon_sym_var] = ACTIONS(2134),\n    [anon_sym_let] = ACTIONS(2134),\n    [anon_sym_const] = ACTIONS(2134),\n    [anon_sym_BANG] = ACTIONS(2132),\n    [anon_sym_else] = ACTIONS(2134),\n    [anon_sym_if] = ACTIONS(2134),\n    [anon_sym_switch] = ACTIONS(2134),\n    [anon_sym_for] = ACTIONS(2134),\n    [anon_sym_LPAREN] = ACTIONS(2132),\n    [anon_sym_await] = ACTIONS(2134),\n    [anon_sym_while] = ACTIONS(2134),\n    [anon_sym_do] = ACTIONS(2134),\n    [anon_sym_try] = ACTIONS(2134),\n    [anon_sym_with] = ACTIONS(2134),\n    [anon_sym_break] = ACTIONS(2134),\n    [anon_sym_continue] = ACTIONS(2134),\n    [anon_sym_debugger] = ACTIONS(2134),\n    [anon_sym_return] = ACTIONS(2134),\n    [anon_sym_throw] = ACTIONS(2134),\n    [anon_sym_SEMI] = ACTIONS(2132),\n    [anon_sym_case] = ACTIONS(2134),\n    [anon_sym_default] = ACTIONS(2134),\n    [anon_sym_yield] = ACTIONS(2134),\n    [anon_sym_LBRACK] = ACTIONS(2132),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2132),\n    [anon_sym_LT] = ACTIONS(2134),\n    [anon_sym_SLASH] = ACTIONS(2134),\n    [anon_sym_struct] = ACTIONS(2134),\n    [anon_sym_async] = ACTIONS(2134),\n    [anon_sym_fn] = ACTIONS(2134),\n    [anon_sym_fn_STAR] = ACTIONS(2132),\n    [anon_sym_new] = ACTIONS(2134),\n    [anon_sym_PLUS] = ACTIONS(2134),\n    [anon_sym_DASH] = ACTIONS(2134),\n    [anon_sym_TILDE] = ACTIONS(2132),\n    [anon_sym_void] = ACTIONS(2134),\n    [anon_sym_delete] = ACTIONS(2134),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2132),\n    [anon_sym_DASH_DASH] = ACTIONS(2132),\n    [anon_sym_DQUOTE] = ACTIONS(2132),\n    [anon_sym_SQUOTE] = ACTIONS(2132),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2132),\n    [sym_number] = ACTIONS(2132),\n    [sym_this] = ACTIONS(2134),\n    [sym_super] = ACTIONS(2134),\n    [sym_true] = ACTIONS(2134),\n    [sym_false] = ACTIONS(2134),\n    [sym_null] = ACTIONS(2134),\n    [sym_undefined] = ACTIONS(2134),\n    [anon_sym_AT] = ACTIONS(2132),\n    [anon_sym_static] = ACTIONS(2134),\n    [anon_sym_declare] = ACTIONS(2134),\n    [anon_sym_public] = ACTIONS(2134),\n    [anon_sym_private] = ACTIONS(2134),\n    [anon_sym_protected] = ACTIONS(2134),\n    [anon_sym_override] = ACTIONS(2134),\n    [anon_sym_readonly] = ACTIONS(2134),\n    [anon_sym_module] = ACTIONS(2134),\n    [anon_sym_any] = ACTIONS(2134),\n    [anon_sym_number] = ACTIONS(2134),\n    [anon_sym_int] = ACTIONS(2134),\n    [anon_sym_float] = ACTIONS(2134),\n    [anon_sym_float2] = ACTIONS(2134),\n    [anon_sym_float3] = ACTIONS(2134),\n    [anon_sym_float4] = ACTIONS(2134),\n    [anon_sym_float3x3] = ACTIONS(2134),\n    [anon_sym_float2x2] = ACTIONS(2134),\n    [anon_sym_float4x4] = ACTIONS(2134),\n    [anon_sym_int2] = ACTIONS(2134),\n    [anon_sym_int3] = ACTIONS(2134),\n    [anon_sym_int4] = ACTIONS(2134),\n    [anon_sym_int3x3] = ACTIONS(2134),\n    [anon_sym_int2x2] = ACTIONS(2134),\n    [anon_sym_int4x4] = ACTIONS(2134),\n    [anon_sym_boolean] = ACTIONS(2134),\n    [anon_sym_string] = ACTIONS(2134),\n    [anon_sym_symbol] = ACTIONS(2134),\n    [anon_sym_workgroup] = ACTIONS(2134),\n    [anon_sym_get] = ACTIONS(2134),\n    [anon_sym_set] = ACTIONS(2134),\n    [anon_sym_trait] = ACTIONS(2134),\n    [anon_sym_impl] = ACTIONS(2134),\n    [anon_sym_enum] = ACTIONS(2134),\n    [anon_sym_shader] = ACTIONS(2134),\n  },\n  [623] = {\n    [ts_builtin_sym_end] = ACTIONS(2136),\n    [sym_identifier] = ACTIONS(2138),\n    [anon_sym_pub] = ACTIONS(2138),\n    [anon_sym_export] = ACTIONS(2138),\n    [anon_sym_type] = ACTIONS(2138),\n    [anon_sym_namespace] = ACTIONS(2138),\n    [anon_sym_LBRACE] = ACTIONS(2136),\n    [anon_sym_RBRACE] = ACTIONS(2136),\n    [anon_sym_typeof] = ACTIONS(2138),\n    [anon_sym_import] = ACTIONS(2138),\n    [anon_sym_var] = ACTIONS(2138),\n    [anon_sym_let] = ACTIONS(2138),\n    [anon_sym_const] = ACTIONS(2138),\n    [anon_sym_BANG] = ACTIONS(2136),\n    [anon_sym_else] = ACTIONS(2138),\n    [anon_sym_if] = ACTIONS(2138),\n    [anon_sym_switch] = ACTIONS(2138),\n    [anon_sym_for] = ACTIONS(2138),\n    [anon_sym_LPAREN] = ACTIONS(2136),\n    [anon_sym_await] = ACTIONS(2138),\n    [anon_sym_while] = ACTIONS(2138),\n    [anon_sym_do] = ACTIONS(2138),\n    [anon_sym_try] = ACTIONS(2138),\n    [anon_sym_with] = ACTIONS(2138),\n    [anon_sym_break] = ACTIONS(2138),\n    [anon_sym_continue] = ACTIONS(2138),\n    [anon_sym_debugger] = ACTIONS(2138),\n    [anon_sym_return] = ACTIONS(2138),\n    [anon_sym_throw] = ACTIONS(2138),\n    [anon_sym_SEMI] = ACTIONS(2136),\n    [anon_sym_case] = ACTIONS(2138),\n    [anon_sym_default] = ACTIONS(2138),\n    [anon_sym_yield] = ACTIONS(2138),\n    [anon_sym_LBRACK] = ACTIONS(2136),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2136),\n    [anon_sym_LT] = ACTIONS(2138),\n    [anon_sym_SLASH] = ACTIONS(2138),\n    [anon_sym_struct] = ACTIONS(2138),\n    [anon_sym_async] = ACTIONS(2138),\n    [anon_sym_fn] = ACTIONS(2138),\n    [anon_sym_fn_STAR] = ACTIONS(2136),\n    [anon_sym_new] = ACTIONS(2138),\n    [anon_sym_PLUS] = ACTIONS(2138),\n    [anon_sym_DASH] = ACTIONS(2138),\n    [anon_sym_TILDE] = ACTIONS(2136),\n    [anon_sym_void] = ACTIONS(2138),\n    [anon_sym_delete] = ACTIONS(2138),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2136),\n    [anon_sym_DASH_DASH] = ACTIONS(2136),\n    [anon_sym_DQUOTE] = ACTIONS(2136),\n    [anon_sym_SQUOTE] = ACTIONS(2136),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2136),\n    [sym_number] = ACTIONS(2136),\n    [sym_this] = ACTIONS(2138),\n    [sym_super] = ACTIONS(2138),\n    [sym_true] = ACTIONS(2138),\n    [sym_false] = ACTIONS(2138),\n    [sym_null] = ACTIONS(2138),\n    [sym_undefined] = ACTIONS(2138),\n    [anon_sym_AT] = ACTIONS(2136),\n    [anon_sym_static] = ACTIONS(2138),\n    [anon_sym_declare] = ACTIONS(2138),\n    [anon_sym_public] = ACTIONS(2138),\n    [anon_sym_private] = ACTIONS(2138),\n    [anon_sym_protected] = ACTIONS(2138),\n    [anon_sym_override] = ACTIONS(2138),\n    [anon_sym_readonly] = ACTIONS(2138),\n    [anon_sym_module] = ACTIONS(2138),\n    [anon_sym_any] = ACTIONS(2138),\n    [anon_sym_number] = ACTIONS(2138),\n    [anon_sym_int] = ACTIONS(2138),\n    [anon_sym_float] = ACTIONS(2138),\n    [anon_sym_float2] = ACTIONS(2138),\n    [anon_sym_float3] = ACTIONS(2138),\n    [anon_sym_float4] = ACTIONS(2138),\n    [anon_sym_float3x3] = ACTIONS(2138),\n    [anon_sym_float2x2] = ACTIONS(2138),\n    [anon_sym_float4x4] = ACTIONS(2138),\n    [anon_sym_int2] = ACTIONS(2138),\n    [anon_sym_int3] = ACTIONS(2138),\n    [anon_sym_int4] = ACTIONS(2138),\n    [anon_sym_int3x3] = ACTIONS(2138),\n    [anon_sym_int2x2] = ACTIONS(2138),\n    [anon_sym_int4x4] = ACTIONS(2138),\n    [anon_sym_boolean] = ACTIONS(2138),\n    [anon_sym_string] = ACTIONS(2138),\n    [anon_sym_symbol] = ACTIONS(2138),\n    [anon_sym_workgroup] = ACTIONS(2138),\n    [anon_sym_get] = ACTIONS(2138),\n    [anon_sym_set] = ACTIONS(2138),\n    [anon_sym_trait] = ACTIONS(2138),\n    [anon_sym_impl] = ACTIONS(2138),\n    [anon_sym_enum] = ACTIONS(2138),\n    [anon_sym_shader] = ACTIONS(2138),\n  },\n  [624] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [625] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [626] = {\n    [ts_builtin_sym_end] = ACTIONS(2140),\n    [sym_identifier] = ACTIONS(2142),\n    [anon_sym_pub] = ACTIONS(2142),\n    [anon_sym_export] = ACTIONS(2142),\n    [anon_sym_type] = ACTIONS(2142),\n    [anon_sym_namespace] = ACTIONS(2142),\n    [anon_sym_LBRACE] = ACTIONS(2140),\n    [anon_sym_RBRACE] = ACTIONS(2140),\n    [anon_sym_typeof] = ACTIONS(2142),\n    [anon_sym_import] = ACTIONS(2142),\n    [anon_sym_var] = ACTIONS(2142),\n    [anon_sym_let] = ACTIONS(2142),\n    [anon_sym_const] = ACTIONS(2142),\n    [anon_sym_BANG] = ACTIONS(2140),\n    [anon_sym_else] = ACTIONS(2142),\n    [anon_sym_if] = ACTIONS(2142),\n    [anon_sym_switch] = ACTIONS(2142),\n    [anon_sym_for] = ACTIONS(2142),\n    [anon_sym_LPAREN] = ACTIONS(2140),\n    [anon_sym_await] = ACTIONS(2142),\n    [anon_sym_while] = ACTIONS(2142),\n    [anon_sym_do] = ACTIONS(2142),\n    [anon_sym_try] = ACTIONS(2142),\n    [anon_sym_with] = ACTIONS(2142),\n    [anon_sym_break] = ACTIONS(2142),\n    [anon_sym_continue] = ACTIONS(2142),\n    [anon_sym_debugger] = ACTIONS(2142),\n    [anon_sym_return] = ACTIONS(2142),\n    [anon_sym_throw] = ACTIONS(2142),\n    [anon_sym_SEMI] = ACTIONS(2140),\n    [anon_sym_case] = ACTIONS(2142),\n    [anon_sym_default] = ACTIONS(2142),\n    [anon_sym_yield] = ACTIONS(2142),\n    [anon_sym_LBRACK] = ACTIONS(2140),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2140),\n    [anon_sym_LT] = ACTIONS(2142),\n    [anon_sym_SLASH] = ACTIONS(2142),\n    [anon_sym_struct] = ACTIONS(2142),\n    [anon_sym_async] = ACTIONS(2142),\n    [anon_sym_fn] = ACTIONS(2142),\n    [anon_sym_fn_STAR] = ACTIONS(2140),\n    [anon_sym_new] = ACTIONS(2142),\n    [anon_sym_PLUS] = ACTIONS(2142),\n    [anon_sym_DASH] = ACTIONS(2142),\n    [anon_sym_TILDE] = ACTIONS(2140),\n    [anon_sym_void] = ACTIONS(2142),\n    [anon_sym_delete] = ACTIONS(2142),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2140),\n    [anon_sym_DASH_DASH] = ACTIONS(2140),\n    [anon_sym_DQUOTE] = ACTIONS(2140),\n    [anon_sym_SQUOTE] = ACTIONS(2140),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2140),\n    [sym_number] = ACTIONS(2140),\n    [sym_this] = ACTIONS(2142),\n    [sym_super] = ACTIONS(2142),\n    [sym_true] = ACTIONS(2142),\n    [sym_false] = ACTIONS(2142),\n    [sym_null] = ACTIONS(2142),\n    [sym_undefined] = ACTIONS(2142),\n    [anon_sym_AT] = ACTIONS(2140),\n    [anon_sym_static] = ACTIONS(2142),\n    [anon_sym_declare] = ACTIONS(2142),\n    [anon_sym_public] = ACTIONS(2142),\n    [anon_sym_private] = ACTIONS(2142),\n    [anon_sym_protected] = ACTIONS(2142),\n    [anon_sym_override] = ACTIONS(2142),\n    [anon_sym_readonly] = ACTIONS(2142),\n    [anon_sym_module] = ACTIONS(2142),\n    [anon_sym_any] = ACTIONS(2142),\n    [anon_sym_number] = ACTIONS(2142),\n    [anon_sym_int] = ACTIONS(2142),\n    [anon_sym_float] = ACTIONS(2142),\n    [anon_sym_float2] = ACTIONS(2142),\n    [anon_sym_float3] = ACTIONS(2142),\n    [anon_sym_float4] = ACTIONS(2142),\n    [anon_sym_float3x3] = ACTIONS(2142),\n    [anon_sym_float2x2] = ACTIONS(2142),\n    [anon_sym_float4x4] = ACTIONS(2142),\n    [anon_sym_int2] = ACTIONS(2142),\n    [anon_sym_int3] = ACTIONS(2142),\n    [anon_sym_int4] = ACTIONS(2142),\n    [anon_sym_int3x3] = ACTIONS(2142),\n    [anon_sym_int2x2] = ACTIONS(2142),\n    [anon_sym_int4x4] = ACTIONS(2142),\n    [anon_sym_boolean] = ACTIONS(2142),\n    [anon_sym_string] = ACTIONS(2142),\n    [anon_sym_symbol] = ACTIONS(2142),\n    [anon_sym_workgroup] = ACTIONS(2142),\n    [anon_sym_get] = ACTIONS(2142),\n    [anon_sym_set] = ACTIONS(2142),\n    [anon_sym_trait] = ACTIONS(2142),\n    [anon_sym_impl] = ACTIONS(2142),\n    [anon_sym_enum] = ACTIONS(2142),\n    [anon_sym_shader] = ACTIONS(2142),\n  },\n  [627] = {\n    [ts_builtin_sym_end] = ACTIONS(2144),\n    [sym_identifier] = ACTIONS(2146),\n    [anon_sym_pub] = ACTIONS(2146),\n    [anon_sym_export] = ACTIONS(2146),\n    [anon_sym_type] = ACTIONS(2146),\n    [anon_sym_namespace] = ACTIONS(2146),\n    [anon_sym_LBRACE] = ACTIONS(2144),\n    [anon_sym_RBRACE] = ACTIONS(2144),\n    [anon_sym_typeof] = ACTIONS(2146),\n    [anon_sym_import] = ACTIONS(2146),\n    [anon_sym_var] = ACTIONS(2146),\n    [anon_sym_let] = ACTIONS(2146),\n    [anon_sym_const] = ACTIONS(2146),\n    [anon_sym_BANG] = ACTIONS(2144),\n    [anon_sym_else] = ACTIONS(2146),\n    [anon_sym_if] = ACTIONS(2146),\n    [anon_sym_switch] = ACTIONS(2146),\n    [anon_sym_for] = ACTIONS(2146),\n    [anon_sym_LPAREN] = ACTIONS(2144),\n    [anon_sym_await] = ACTIONS(2146),\n    [anon_sym_while] = ACTIONS(2146),\n    [anon_sym_do] = ACTIONS(2146),\n    [anon_sym_try] = ACTIONS(2146),\n    [anon_sym_with] = ACTIONS(2146),\n    [anon_sym_break] = ACTIONS(2146),\n    [anon_sym_continue] = ACTIONS(2146),\n    [anon_sym_debugger] = ACTIONS(2146),\n    [anon_sym_return] = ACTIONS(2146),\n    [anon_sym_throw] = ACTIONS(2146),\n    [anon_sym_SEMI] = ACTIONS(2144),\n    [anon_sym_case] = ACTIONS(2146),\n    [anon_sym_default] = ACTIONS(2146),\n    [anon_sym_yield] = ACTIONS(2146),\n    [anon_sym_LBRACK] = ACTIONS(2144),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2144),\n    [anon_sym_LT] = ACTIONS(2146),\n    [anon_sym_SLASH] = ACTIONS(2146),\n    [anon_sym_struct] = ACTIONS(2146),\n    [anon_sym_async] = ACTIONS(2146),\n    [anon_sym_fn] = ACTIONS(2146),\n    [anon_sym_fn_STAR] = ACTIONS(2144),\n    [anon_sym_new] = ACTIONS(2146),\n    [anon_sym_PLUS] = ACTIONS(2146),\n    [anon_sym_DASH] = ACTIONS(2146),\n    [anon_sym_TILDE] = ACTIONS(2144),\n    [anon_sym_void] = ACTIONS(2146),\n    [anon_sym_delete] = ACTIONS(2146),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2144),\n    [anon_sym_DASH_DASH] = ACTIONS(2144),\n    [anon_sym_DQUOTE] = ACTIONS(2144),\n    [anon_sym_SQUOTE] = ACTIONS(2144),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2144),\n    [sym_number] = ACTIONS(2144),\n    [sym_this] = ACTIONS(2146),\n    [sym_super] = ACTIONS(2146),\n    [sym_true] = ACTIONS(2146),\n    [sym_false] = ACTIONS(2146),\n    [sym_null] = ACTIONS(2146),\n    [sym_undefined] = ACTIONS(2146),\n    [anon_sym_AT] = ACTIONS(2144),\n    [anon_sym_static] = ACTIONS(2146),\n    [anon_sym_declare] = ACTIONS(2146),\n    [anon_sym_public] = ACTIONS(2146),\n    [anon_sym_private] = ACTIONS(2146),\n    [anon_sym_protected] = ACTIONS(2146),\n    [anon_sym_override] = ACTIONS(2146),\n    [anon_sym_readonly] = ACTIONS(2146),\n    [anon_sym_module] = ACTIONS(2146),\n    [anon_sym_any] = ACTIONS(2146),\n    [anon_sym_number] = ACTIONS(2146),\n    [anon_sym_int] = ACTIONS(2146),\n    [anon_sym_float] = ACTIONS(2146),\n    [anon_sym_float2] = ACTIONS(2146),\n    [anon_sym_float3] = ACTIONS(2146),\n    [anon_sym_float4] = ACTIONS(2146),\n    [anon_sym_float3x3] = ACTIONS(2146),\n    [anon_sym_float2x2] = ACTIONS(2146),\n    [anon_sym_float4x4] = ACTIONS(2146),\n    [anon_sym_int2] = ACTIONS(2146),\n    [anon_sym_int3] = ACTIONS(2146),\n    [anon_sym_int4] = ACTIONS(2146),\n    [anon_sym_int3x3] = ACTIONS(2146),\n    [anon_sym_int2x2] = ACTIONS(2146),\n    [anon_sym_int4x4] = ACTIONS(2146),\n    [anon_sym_boolean] = ACTIONS(2146),\n    [anon_sym_string] = ACTIONS(2146),\n    [anon_sym_symbol] = ACTIONS(2146),\n    [anon_sym_workgroup] = ACTIONS(2146),\n    [anon_sym_get] = ACTIONS(2146),\n    [anon_sym_set] = ACTIONS(2146),\n    [anon_sym_trait] = ACTIONS(2146),\n    [anon_sym_impl] = ACTIONS(2146),\n    [anon_sym_enum] = ACTIONS(2146),\n    [anon_sym_shader] = ACTIONS(2146),\n  },\n  [628] = {\n    [ts_builtin_sym_end] = ACTIONS(2148),\n    [sym_identifier] = ACTIONS(2150),\n    [anon_sym_pub] = ACTIONS(2150),\n    [anon_sym_export] = ACTIONS(2150),\n    [anon_sym_type] = ACTIONS(2150),\n    [anon_sym_namespace] = ACTIONS(2150),\n    [anon_sym_LBRACE] = ACTIONS(2148),\n    [anon_sym_RBRACE] = ACTIONS(2148),\n    [anon_sym_typeof] = ACTIONS(2150),\n    [anon_sym_import] = ACTIONS(2150),\n    [anon_sym_var] = ACTIONS(2150),\n    [anon_sym_let] = ACTIONS(2150),\n    [anon_sym_const] = ACTIONS(2150),\n    [anon_sym_BANG] = ACTIONS(2148),\n    [anon_sym_else] = ACTIONS(2150),\n    [anon_sym_if] = ACTIONS(2150),\n    [anon_sym_switch] = ACTIONS(2150),\n    [anon_sym_for] = ACTIONS(2150),\n    [anon_sym_LPAREN] = ACTIONS(2148),\n    [anon_sym_await] = ACTIONS(2150),\n    [anon_sym_while] = ACTIONS(2150),\n    [anon_sym_do] = ACTIONS(2150),\n    [anon_sym_try] = ACTIONS(2150),\n    [anon_sym_with] = ACTIONS(2150),\n    [anon_sym_break] = ACTIONS(2150),\n    [anon_sym_continue] = ACTIONS(2150),\n    [anon_sym_debugger] = ACTIONS(2150),\n    [anon_sym_return] = ACTIONS(2150),\n    [anon_sym_throw] = ACTIONS(2150),\n    [anon_sym_SEMI] = ACTIONS(2148),\n    [anon_sym_case] = ACTIONS(2150),\n    [anon_sym_default] = ACTIONS(2150),\n    [anon_sym_yield] = ACTIONS(2150),\n    [anon_sym_LBRACK] = ACTIONS(2148),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2148),\n    [anon_sym_LT] = ACTIONS(2150),\n    [anon_sym_SLASH] = ACTIONS(2150),\n    [anon_sym_struct] = ACTIONS(2150),\n    [anon_sym_async] = ACTIONS(2150),\n    [anon_sym_fn] = ACTIONS(2150),\n    [anon_sym_fn_STAR] = ACTIONS(2148),\n    [anon_sym_new] = ACTIONS(2150),\n    [anon_sym_PLUS] = ACTIONS(2150),\n    [anon_sym_DASH] = ACTIONS(2150),\n    [anon_sym_TILDE] = ACTIONS(2148),\n    [anon_sym_void] = ACTIONS(2150),\n    [anon_sym_delete] = ACTIONS(2150),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2148),\n    [anon_sym_DASH_DASH] = ACTIONS(2148),\n    [anon_sym_DQUOTE] = ACTIONS(2148),\n    [anon_sym_SQUOTE] = ACTIONS(2148),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2148),\n    [sym_number] = ACTIONS(2148),\n    [sym_this] = ACTIONS(2150),\n    [sym_super] = ACTIONS(2150),\n    [sym_true] = ACTIONS(2150),\n    [sym_false] = ACTIONS(2150),\n    [sym_null] = ACTIONS(2150),\n    [sym_undefined] = ACTIONS(2150),\n    [anon_sym_AT] = ACTIONS(2148),\n    [anon_sym_static] = ACTIONS(2150),\n    [anon_sym_declare] = ACTIONS(2150),\n    [anon_sym_public] = ACTIONS(2150),\n    [anon_sym_private] = ACTIONS(2150),\n    [anon_sym_protected] = ACTIONS(2150),\n    [anon_sym_override] = ACTIONS(2150),\n    [anon_sym_readonly] = ACTIONS(2150),\n    [anon_sym_module] = ACTIONS(2150),\n    [anon_sym_any] = ACTIONS(2150),\n    [anon_sym_number] = ACTIONS(2150),\n    [anon_sym_int] = ACTIONS(2150),\n    [anon_sym_float] = ACTIONS(2150),\n    [anon_sym_float2] = ACTIONS(2150),\n    [anon_sym_float3] = ACTIONS(2150),\n    [anon_sym_float4] = ACTIONS(2150),\n    [anon_sym_float3x3] = ACTIONS(2150),\n    [anon_sym_float2x2] = ACTIONS(2150),\n    [anon_sym_float4x4] = ACTIONS(2150),\n    [anon_sym_int2] = ACTIONS(2150),\n    [anon_sym_int3] = ACTIONS(2150),\n    [anon_sym_int4] = ACTIONS(2150),\n    [anon_sym_int3x3] = ACTIONS(2150),\n    [anon_sym_int2x2] = ACTIONS(2150),\n    [anon_sym_int4x4] = ACTIONS(2150),\n    [anon_sym_boolean] = ACTIONS(2150),\n    [anon_sym_string] = ACTIONS(2150),\n    [anon_sym_symbol] = ACTIONS(2150),\n    [anon_sym_workgroup] = ACTIONS(2150),\n    [anon_sym_get] = ACTIONS(2150),\n    [anon_sym_set] = ACTIONS(2150),\n    [anon_sym_trait] = ACTIONS(2150),\n    [anon_sym_impl] = ACTIONS(2150),\n    [anon_sym_enum] = ACTIONS(2150),\n    [anon_sym_shader] = ACTIONS(2150),\n  },\n  [629] = {\n    [ts_builtin_sym_end] = ACTIONS(2152),\n    [sym_identifier] = ACTIONS(2154),\n    [anon_sym_pub] = ACTIONS(2154),\n    [anon_sym_export] = ACTIONS(2154),\n    [anon_sym_type] = ACTIONS(2154),\n    [anon_sym_namespace] = ACTIONS(2154),\n    [anon_sym_LBRACE] = ACTIONS(2152),\n    [anon_sym_RBRACE] = ACTIONS(2152),\n    [anon_sym_typeof] = ACTIONS(2154),\n    [anon_sym_import] = ACTIONS(2154),\n    [anon_sym_var] = ACTIONS(2154),\n    [anon_sym_let] = ACTIONS(2154),\n    [anon_sym_const] = ACTIONS(2154),\n    [anon_sym_BANG] = ACTIONS(2152),\n    [anon_sym_else] = ACTIONS(2154),\n    [anon_sym_if] = ACTIONS(2154),\n    [anon_sym_switch] = ACTIONS(2154),\n    [anon_sym_for] = ACTIONS(2154),\n    [anon_sym_LPAREN] = ACTIONS(2152),\n    [anon_sym_await] = ACTIONS(2154),\n    [anon_sym_while] = ACTIONS(2154),\n    [anon_sym_do] = ACTIONS(2154),\n    [anon_sym_try] = ACTIONS(2154),\n    [anon_sym_with] = ACTIONS(2154),\n    [anon_sym_break] = ACTIONS(2154),\n    [anon_sym_continue] = ACTIONS(2154),\n    [anon_sym_debugger] = ACTIONS(2154),\n    [anon_sym_return] = ACTIONS(2154),\n    [anon_sym_throw] = ACTIONS(2154),\n    [anon_sym_SEMI] = ACTIONS(2152),\n    [anon_sym_case] = ACTIONS(2154),\n    [anon_sym_default] = ACTIONS(2154),\n    [anon_sym_yield] = ACTIONS(2154),\n    [anon_sym_LBRACK] = ACTIONS(2152),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2152),\n    [anon_sym_LT] = ACTIONS(2154),\n    [anon_sym_SLASH] = ACTIONS(2154),\n    [anon_sym_struct] = ACTIONS(2154),\n    [anon_sym_async] = ACTIONS(2154),\n    [anon_sym_fn] = ACTIONS(2154),\n    [anon_sym_fn_STAR] = ACTIONS(2152),\n    [anon_sym_new] = ACTIONS(2154),\n    [anon_sym_PLUS] = ACTIONS(2154),\n    [anon_sym_DASH] = ACTIONS(2154),\n    [anon_sym_TILDE] = ACTIONS(2152),\n    [anon_sym_void] = ACTIONS(2154),\n    [anon_sym_delete] = ACTIONS(2154),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2152),\n    [anon_sym_DASH_DASH] = ACTIONS(2152),\n    [anon_sym_DQUOTE] = ACTIONS(2152),\n    [anon_sym_SQUOTE] = ACTIONS(2152),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2152),\n    [sym_number] = ACTIONS(2152),\n    [sym_this] = ACTIONS(2154),\n    [sym_super] = ACTIONS(2154),\n    [sym_true] = ACTIONS(2154),\n    [sym_false] = ACTIONS(2154),\n    [sym_null] = ACTIONS(2154),\n    [sym_undefined] = ACTIONS(2154),\n    [anon_sym_AT] = ACTIONS(2152),\n    [anon_sym_static] = ACTIONS(2154),\n    [anon_sym_declare] = ACTIONS(2154),\n    [anon_sym_public] = ACTIONS(2154),\n    [anon_sym_private] = ACTIONS(2154),\n    [anon_sym_protected] = ACTIONS(2154),\n    [anon_sym_override] = ACTIONS(2154),\n    [anon_sym_readonly] = ACTIONS(2154),\n    [anon_sym_module] = ACTIONS(2154),\n    [anon_sym_any] = ACTIONS(2154),\n    [anon_sym_number] = ACTIONS(2154),\n    [anon_sym_int] = ACTIONS(2154),\n    [anon_sym_float] = ACTIONS(2154),\n    [anon_sym_float2] = ACTIONS(2154),\n    [anon_sym_float3] = ACTIONS(2154),\n    [anon_sym_float4] = ACTIONS(2154),\n    [anon_sym_float3x3] = ACTIONS(2154),\n    [anon_sym_float2x2] = ACTIONS(2154),\n    [anon_sym_float4x4] = ACTIONS(2154),\n    [anon_sym_int2] = ACTIONS(2154),\n    [anon_sym_int3] = ACTIONS(2154),\n    [anon_sym_int4] = ACTIONS(2154),\n    [anon_sym_int3x3] = ACTIONS(2154),\n    [anon_sym_int2x2] = ACTIONS(2154),\n    [anon_sym_int4x4] = ACTIONS(2154),\n    [anon_sym_boolean] = ACTIONS(2154),\n    [anon_sym_string] = ACTIONS(2154),\n    [anon_sym_symbol] = ACTIONS(2154),\n    [anon_sym_workgroup] = ACTIONS(2154),\n    [anon_sym_get] = ACTIONS(2154),\n    [anon_sym_set] = ACTIONS(2154),\n    [anon_sym_trait] = ACTIONS(2154),\n    [anon_sym_impl] = ACTIONS(2154),\n    [anon_sym_enum] = ACTIONS(2154),\n    [anon_sym_shader] = ACTIONS(2154),\n  },\n  [630] = {\n    [ts_builtin_sym_end] = ACTIONS(2156),\n    [sym_identifier] = ACTIONS(2158),\n    [anon_sym_pub] = ACTIONS(2158),\n    [anon_sym_export] = ACTIONS(2158),\n    [anon_sym_type] = ACTIONS(2158),\n    [anon_sym_namespace] = ACTIONS(2158),\n    [anon_sym_LBRACE] = ACTIONS(2156),\n    [anon_sym_RBRACE] = ACTIONS(2156),\n    [anon_sym_typeof] = ACTIONS(2158),\n    [anon_sym_import] = ACTIONS(2158),\n    [anon_sym_var] = ACTIONS(2158),\n    [anon_sym_let] = ACTIONS(2158),\n    [anon_sym_const] = ACTIONS(2158),\n    [anon_sym_BANG] = ACTIONS(2156),\n    [anon_sym_else] = ACTIONS(2158),\n    [anon_sym_if] = ACTIONS(2158),\n    [anon_sym_switch] = ACTIONS(2158),\n    [anon_sym_for] = ACTIONS(2158),\n    [anon_sym_LPAREN] = ACTIONS(2156),\n    [anon_sym_await] = ACTIONS(2158),\n    [anon_sym_while] = ACTIONS(2158),\n    [anon_sym_do] = ACTIONS(2158),\n    [anon_sym_try] = ACTIONS(2158),\n    [anon_sym_with] = ACTIONS(2158),\n    [anon_sym_break] = ACTIONS(2158),\n    [anon_sym_continue] = ACTIONS(2158),\n    [anon_sym_debugger] = ACTIONS(2158),\n    [anon_sym_return] = ACTIONS(2158),\n    [anon_sym_throw] = ACTIONS(2158),\n    [anon_sym_SEMI] = ACTIONS(2156),\n    [anon_sym_case] = ACTIONS(2158),\n    [anon_sym_default] = ACTIONS(2158),\n    [anon_sym_yield] = ACTIONS(2158),\n    [anon_sym_LBRACK] = ACTIONS(2156),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2156),\n    [anon_sym_LT] = ACTIONS(2158),\n    [anon_sym_SLASH] = ACTIONS(2158),\n    [anon_sym_struct] = ACTIONS(2158),\n    [anon_sym_async] = ACTIONS(2158),\n    [anon_sym_fn] = ACTIONS(2158),\n    [anon_sym_fn_STAR] = ACTIONS(2156),\n    [anon_sym_new] = ACTIONS(2158),\n    [anon_sym_PLUS] = ACTIONS(2158),\n    [anon_sym_DASH] = ACTIONS(2158),\n    [anon_sym_TILDE] = ACTIONS(2156),\n    [anon_sym_void] = ACTIONS(2158),\n    [anon_sym_delete] = ACTIONS(2158),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2156),\n    [anon_sym_DASH_DASH] = ACTIONS(2156),\n    [anon_sym_DQUOTE] = ACTIONS(2156),\n    [anon_sym_SQUOTE] = ACTIONS(2156),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2156),\n    [sym_number] = ACTIONS(2156),\n    [sym_this] = ACTIONS(2158),\n    [sym_super] = ACTIONS(2158),\n    [sym_true] = ACTIONS(2158),\n    [sym_false] = ACTIONS(2158),\n    [sym_null] = ACTIONS(2158),\n    [sym_undefined] = ACTIONS(2158),\n    [anon_sym_AT] = ACTIONS(2156),\n    [anon_sym_static] = ACTIONS(2158),\n    [anon_sym_declare] = ACTIONS(2158),\n    [anon_sym_public] = ACTIONS(2158),\n    [anon_sym_private] = ACTIONS(2158),\n    [anon_sym_protected] = ACTIONS(2158),\n    [anon_sym_override] = ACTIONS(2158),\n    [anon_sym_readonly] = ACTIONS(2158),\n    [anon_sym_module] = ACTIONS(2158),\n    [anon_sym_any] = ACTIONS(2158),\n    [anon_sym_number] = ACTIONS(2158),\n    [anon_sym_int] = ACTIONS(2158),\n    [anon_sym_float] = ACTIONS(2158),\n    [anon_sym_float2] = ACTIONS(2158),\n    [anon_sym_float3] = ACTIONS(2158),\n    [anon_sym_float4] = ACTIONS(2158),\n    [anon_sym_float3x3] = ACTIONS(2158),\n    [anon_sym_float2x2] = ACTIONS(2158),\n    [anon_sym_float4x4] = ACTIONS(2158),\n    [anon_sym_int2] = ACTIONS(2158),\n    [anon_sym_int3] = ACTIONS(2158),\n    [anon_sym_int4] = ACTIONS(2158),\n    [anon_sym_int3x3] = ACTIONS(2158),\n    [anon_sym_int2x2] = ACTIONS(2158),\n    [anon_sym_int4x4] = ACTIONS(2158),\n    [anon_sym_boolean] = ACTIONS(2158),\n    [anon_sym_string] = ACTIONS(2158),\n    [anon_sym_symbol] = ACTIONS(2158),\n    [anon_sym_workgroup] = ACTIONS(2158),\n    [anon_sym_get] = ACTIONS(2158),\n    [anon_sym_set] = ACTIONS(2158),\n    [anon_sym_trait] = ACTIONS(2158),\n    [anon_sym_impl] = ACTIONS(2158),\n    [anon_sym_enum] = ACTIONS(2158),\n    [anon_sym_shader] = ACTIONS(2158),\n  },\n  [631] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [632] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [633] = {\n    [ts_builtin_sym_end] = ACTIONS(2160),\n    [sym_identifier] = ACTIONS(2162),\n    [anon_sym_pub] = ACTIONS(2162),\n    [anon_sym_export] = ACTIONS(2162),\n    [anon_sym_type] = ACTIONS(2162),\n    [anon_sym_namespace] = ACTIONS(2162),\n    [anon_sym_LBRACE] = ACTIONS(2160),\n    [anon_sym_RBRACE] = ACTIONS(2160),\n    [anon_sym_typeof] = ACTIONS(2162),\n    [anon_sym_import] = ACTIONS(2162),\n    [anon_sym_var] = ACTIONS(2162),\n    [anon_sym_let] = ACTIONS(2162),\n    [anon_sym_const] = ACTIONS(2162),\n    [anon_sym_BANG] = ACTIONS(2160),\n    [anon_sym_else] = ACTIONS(2162),\n    [anon_sym_if] = ACTIONS(2162),\n    [anon_sym_switch] = ACTIONS(2162),\n    [anon_sym_for] = ACTIONS(2162),\n    [anon_sym_LPAREN] = ACTIONS(2160),\n    [anon_sym_await] = ACTIONS(2162),\n    [anon_sym_while] = ACTIONS(2162),\n    [anon_sym_do] = ACTIONS(2162),\n    [anon_sym_try] = ACTIONS(2162),\n    [anon_sym_with] = ACTIONS(2162),\n    [anon_sym_break] = ACTIONS(2162),\n    [anon_sym_continue] = ACTIONS(2162),\n    [anon_sym_debugger] = ACTIONS(2162),\n    [anon_sym_return] = ACTIONS(2162),\n    [anon_sym_throw] = ACTIONS(2162),\n    [anon_sym_SEMI] = ACTIONS(2160),\n    [anon_sym_case] = ACTIONS(2162),\n    [anon_sym_default] = ACTIONS(2162),\n    [anon_sym_yield] = ACTIONS(2162),\n    [anon_sym_LBRACK] = ACTIONS(2160),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2160),\n    [anon_sym_LT] = ACTIONS(2162),\n    [anon_sym_SLASH] = ACTIONS(2162),\n    [anon_sym_struct] = ACTIONS(2162),\n    [anon_sym_async] = ACTIONS(2162),\n    [anon_sym_fn] = ACTIONS(2162),\n    [anon_sym_fn_STAR] = ACTIONS(2160),\n    [anon_sym_new] = ACTIONS(2162),\n    [anon_sym_PLUS] = ACTIONS(2162),\n    [anon_sym_DASH] = ACTIONS(2162),\n    [anon_sym_TILDE] = ACTIONS(2160),\n    [anon_sym_void] = ACTIONS(2162),\n    [anon_sym_delete] = ACTIONS(2162),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2160),\n    [anon_sym_DASH_DASH] = ACTIONS(2160),\n    [anon_sym_DQUOTE] = ACTIONS(2160),\n    [anon_sym_SQUOTE] = ACTIONS(2160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2160),\n    [sym_number] = ACTIONS(2160),\n    [sym_this] = ACTIONS(2162),\n    [sym_super] = ACTIONS(2162),\n    [sym_true] = ACTIONS(2162),\n    [sym_false] = ACTIONS(2162),\n    [sym_null] = ACTIONS(2162),\n    [sym_undefined] = ACTIONS(2162),\n    [anon_sym_AT] = ACTIONS(2160),\n    [anon_sym_static] = ACTIONS(2162),\n    [anon_sym_declare] = ACTIONS(2162),\n    [anon_sym_public] = ACTIONS(2162),\n    [anon_sym_private] = ACTIONS(2162),\n    [anon_sym_protected] = ACTIONS(2162),\n    [anon_sym_override] = ACTIONS(2162),\n    [anon_sym_readonly] = ACTIONS(2162),\n    [anon_sym_module] = ACTIONS(2162),\n    [anon_sym_any] = ACTIONS(2162),\n    [anon_sym_number] = ACTIONS(2162),\n    [anon_sym_int] = ACTIONS(2162),\n    [anon_sym_float] = ACTIONS(2162),\n    [anon_sym_float2] = ACTIONS(2162),\n    [anon_sym_float3] = ACTIONS(2162),\n    [anon_sym_float4] = ACTIONS(2162),\n    [anon_sym_float3x3] = ACTIONS(2162),\n    [anon_sym_float2x2] = ACTIONS(2162),\n    [anon_sym_float4x4] = ACTIONS(2162),\n    [anon_sym_int2] = ACTIONS(2162),\n    [anon_sym_int3] = ACTIONS(2162),\n    [anon_sym_int4] = ACTIONS(2162),\n    [anon_sym_int3x3] = ACTIONS(2162),\n    [anon_sym_int2x2] = ACTIONS(2162),\n    [anon_sym_int4x4] = ACTIONS(2162),\n    [anon_sym_boolean] = ACTIONS(2162),\n    [anon_sym_string] = ACTIONS(2162),\n    [anon_sym_symbol] = ACTIONS(2162),\n    [anon_sym_workgroup] = ACTIONS(2162),\n    [anon_sym_get] = ACTIONS(2162),\n    [anon_sym_set] = ACTIONS(2162),\n    [anon_sym_trait] = ACTIONS(2162),\n    [anon_sym_impl] = ACTIONS(2162),\n    [anon_sym_enum] = ACTIONS(2162),\n    [anon_sym_shader] = ACTIONS(2162),\n  },\n  [634] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [635] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [636] = {\n    [ts_builtin_sym_end] = ACTIONS(2164),\n    [sym_identifier] = ACTIONS(2166),\n    [anon_sym_pub] = ACTIONS(2166),\n    [anon_sym_export] = ACTIONS(2166),\n    [anon_sym_type] = ACTIONS(2166),\n    [anon_sym_namespace] = ACTIONS(2166),\n    [anon_sym_LBRACE] = ACTIONS(2164),\n    [anon_sym_RBRACE] = ACTIONS(2164),\n    [anon_sym_typeof] = ACTIONS(2166),\n    [anon_sym_import] = ACTIONS(2166),\n    [anon_sym_var] = ACTIONS(2166),\n    [anon_sym_let] = ACTIONS(2166),\n    [anon_sym_const] = ACTIONS(2166),\n    [anon_sym_BANG] = ACTIONS(2164),\n    [anon_sym_else] = ACTIONS(2166),\n    [anon_sym_if] = ACTIONS(2166),\n    [anon_sym_switch] = ACTIONS(2166),\n    [anon_sym_for] = ACTIONS(2166),\n    [anon_sym_LPAREN] = ACTIONS(2164),\n    [anon_sym_await] = ACTIONS(2166),\n    [anon_sym_while] = ACTIONS(2166),\n    [anon_sym_do] = ACTIONS(2166),\n    [anon_sym_try] = ACTIONS(2166),\n    [anon_sym_with] = ACTIONS(2166),\n    [anon_sym_break] = ACTIONS(2166),\n    [anon_sym_continue] = ACTIONS(2166),\n    [anon_sym_debugger] = ACTIONS(2166),\n    [anon_sym_return] = ACTIONS(2166),\n    [anon_sym_throw] = ACTIONS(2166),\n    [anon_sym_SEMI] = ACTIONS(2164),\n    [anon_sym_case] = ACTIONS(2166),\n    [anon_sym_default] = ACTIONS(2166),\n    [anon_sym_yield] = ACTIONS(2166),\n    [anon_sym_LBRACK] = ACTIONS(2164),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2164),\n    [anon_sym_LT] = ACTIONS(2166),\n    [anon_sym_SLASH] = ACTIONS(2166),\n    [anon_sym_struct] = ACTIONS(2166),\n    [anon_sym_async] = ACTIONS(2166),\n    [anon_sym_fn] = ACTIONS(2166),\n    [anon_sym_fn_STAR] = ACTIONS(2164),\n    [anon_sym_new] = ACTIONS(2166),\n    [anon_sym_PLUS] = ACTIONS(2166),\n    [anon_sym_DASH] = ACTIONS(2166),\n    [anon_sym_TILDE] = ACTIONS(2164),\n    [anon_sym_void] = ACTIONS(2166),\n    [anon_sym_delete] = ACTIONS(2166),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2164),\n    [anon_sym_DASH_DASH] = ACTIONS(2164),\n    [anon_sym_DQUOTE] = ACTIONS(2164),\n    [anon_sym_SQUOTE] = ACTIONS(2164),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2164),\n    [sym_number] = ACTIONS(2164),\n    [sym_this] = ACTIONS(2166),\n    [sym_super] = ACTIONS(2166),\n    [sym_true] = ACTIONS(2166),\n    [sym_false] = ACTIONS(2166),\n    [sym_null] = ACTIONS(2166),\n    [sym_undefined] = ACTIONS(2166),\n    [anon_sym_AT] = ACTIONS(2164),\n    [anon_sym_static] = ACTIONS(2166),\n    [anon_sym_declare] = ACTIONS(2166),\n    [anon_sym_public] = ACTIONS(2166),\n    [anon_sym_private] = ACTIONS(2166),\n    [anon_sym_protected] = ACTIONS(2166),\n    [anon_sym_override] = ACTIONS(2166),\n    [anon_sym_readonly] = ACTIONS(2166),\n    [anon_sym_module] = ACTIONS(2166),\n    [anon_sym_any] = ACTIONS(2166),\n    [anon_sym_number] = ACTIONS(2166),\n    [anon_sym_int] = ACTIONS(2166),\n    [anon_sym_float] = ACTIONS(2166),\n    [anon_sym_float2] = ACTIONS(2166),\n    [anon_sym_float3] = ACTIONS(2166),\n    [anon_sym_float4] = ACTIONS(2166),\n    [anon_sym_float3x3] = ACTIONS(2166),\n    [anon_sym_float2x2] = ACTIONS(2166),\n    [anon_sym_float4x4] = ACTIONS(2166),\n    [anon_sym_int2] = ACTIONS(2166),\n    [anon_sym_int3] = ACTIONS(2166),\n    [anon_sym_int4] = ACTIONS(2166),\n    [anon_sym_int3x3] = ACTIONS(2166),\n    [anon_sym_int2x2] = ACTIONS(2166),\n    [anon_sym_int4x4] = ACTIONS(2166),\n    [anon_sym_boolean] = ACTIONS(2166),\n    [anon_sym_string] = ACTIONS(2166),\n    [anon_sym_symbol] = ACTIONS(2166),\n    [anon_sym_workgroup] = ACTIONS(2166),\n    [anon_sym_get] = ACTIONS(2166),\n    [anon_sym_set] = ACTIONS(2166),\n    [anon_sym_trait] = ACTIONS(2166),\n    [anon_sym_impl] = ACTIONS(2166),\n    [anon_sym_enum] = ACTIONS(2166),\n    [anon_sym_shader] = ACTIONS(2166),\n  },\n  [637] = {\n    [ts_builtin_sym_end] = ACTIONS(2168),\n    [sym_identifier] = ACTIONS(2170),\n    [anon_sym_pub] = ACTIONS(2170),\n    [anon_sym_export] = ACTIONS(2170),\n    [anon_sym_type] = ACTIONS(2170),\n    [anon_sym_namespace] = ACTIONS(2170),\n    [anon_sym_LBRACE] = ACTIONS(2168),\n    [anon_sym_RBRACE] = ACTIONS(2168),\n    [anon_sym_typeof] = ACTIONS(2170),\n    [anon_sym_import] = ACTIONS(2170),\n    [anon_sym_var] = ACTIONS(2170),\n    [anon_sym_let] = ACTIONS(2170),\n    [anon_sym_const] = ACTIONS(2170),\n    [anon_sym_BANG] = ACTIONS(2168),\n    [anon_sym_else] = ACTIONS(2170),\n    [anon_sym_if] = ACTIONS(2170),\n    [anon_sym_switch] = ACTIONS(2170),\n    [anon_sym_for] = ACTIONS(2170),\n    [anon_sym_LPAREN] = ACTIONS(2168),\n    [anon_sym_await] = ACTIONS(2170),\n    [anon_sym_while] = ACTIONS(2170),\n    [anon_sym_do] = ACTIONS(2170),\n    [anon_sym_try] = ACTIONS(2170),\n    [anon_sym_with] = ACTIONS(2170),\n    [anon_sym_break] = ACTIONS(2170),\n    [anon_sym_continue] = ACTIONS(2170),\n    [anon_sym_debugger] = ACTIONS(2170),\n    [anon_sym_return] = ACTIONS(2170),\n    [anon_sym_throw] = ACTIONS(2170),\n    [anon_sym_SEMI] = ACTIONS(2168),\n    [anon_sym_case] = ACTIONS(2170),\n    [anon_sym_default] = ACTIONS(2170),\n    [anon_sym_yield] = ACTIONS(2170),\n    [anon_sym_LBRACK] = ACTIONS(2168),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2168),\n    [anon_sym_LT] = ACTIONS(2170),\n    [anon_sym_SLASH] = ACTIONS(2170),\n    [anon_sym_struct] = ACTIONS(2170),\n    [anon_sym_async] = ACTIONS(2170),\n    [anon_sym_fn] = ACTIONS(2170),\n    [anon_sym_fn_STAR] = ACTIONS(2168),\n    [anon_sym_new] = ACTIONS(2170),\n    [anon_sym_PLUS] = ACTIONS(2170),\n    [anon_sym_DASH] = ACTIONS(2170),\n    [anon_sym_TILDE] = ACTIONS(2168),\n    [anon_sym_void] = ACTIONS(2170),\n    [anon_sym_delete] = ACTIONS(2170),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2168),\n    [anon_sym_DASH_DASH] = ACTIONS(2168),\n    [anon_sym_DQUOTE] = ACTIONS(2168),\n    [anon_sym_SQUOTE] = ACTIONS(2168),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2168),\n    [sym_number] = ACTIONS(2168),\n    [sym_this] = ACTIONS(2170),\n    [sym_super] = ACTIONS(2170),\n    [sym_true] = ACTIONS(2170),\n    [sym_false] = ACTIONS(2170),\n    [sym_null] = ACTIONS(2170),\n    [sym_undefined] = ACTIONS(2170),\n    [anon_sym_AT] = ACTIONS(2168),\n    [anon_sym_static] = ACTIONS(2170),\n    [anon_sym_declare] = ACTIONS(2170),\n    [anon_sym_public] = ACTIONS(2170),\n    [anon_sym_private] = ACTIONS(2170),\n    [anon_sym_protected] = ACTIONS(2170),\n    [anon_sym_override] = ACTIONS(2170),\n    [anon_sym_readonly] = ACTIONS(2170),\n    [anon_sym_module] = ACTIONS(2170),\n    [anon_sym_any] = ACTIONS(2170),\n    [anon_sym_number] = ACTIONS(2170),\n    [anon_sym_int] = ACTIONS(2170),\n    [anon_sym_float] = ACTIONS(2170),\n    [anon_sym_float2] = ACTIONS(2170),\n    [anon_sym_float3] = ACTIONS(2170),\n    [anon_sym_float4] = ACTIONS(2170),\n    [anon_sym_float3x3] = ACTIONS(2170),\n    [anon_sym_float2x2] = ACTIONS(2170),\n    [anon_sym_float4x4] = ACTIONS(2170),\n    [anon_sym_int2] = ACTIONS(2170),\n    [anon_sym_int3] = ACTIONS(2170),\n    [anon_sym_int4] = ACTIONS(2170),\n    [anon_sym_int3x3] = ACTIONS(2170),\n    [anon_sym_int2x2] = ACTIONS(2170),\n    [anon_sym_int4x4] = ACTIONS(2170),\n    [anon_sym_boolean] = ACTIONS(2170),\n    [anon_sym_string] = ACTIONS(2170),\n    [anon_sym_symbol] = ACTIONS(2170),\n    [anon_sym_workgroup] = ACTIONS(2170),\n    [anon_sym_get] = ACTIONS(2170),\n    [anon_sym_set] = ACTIONS(2170),\n    [anon_sym_trait] = ACTIONS(2170),\n    [anon_sym_impl] = ACTIONS(2170),\n    [anon_sym_enum] = ACTIONS(2170),\n    [anon_sym_shader] = ACTIONS(2170),\n  },\n  [638] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [639] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [640] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [641] = {\n    [ts_builtin_sym_end] = ACTIONS(2172),\n    [sym_identifier] = ACTIONS(2174),\n    [anon_sym_pub] = ACTIONS(2174),\n    [anon_sym_export] = ACTIONS(2174),\n    [anon_sym_type] = ACTIONS(2174),\n    [anon_sym_namespace] = ACTIONS(2174),\n    [anon_sym_LBRACE] = ACTIONS(2172),\n    [anon_sym_RBRACE] = ACTIONS(2172),\n    [anon_sym_typeof] = ACTIONS(2174),\n    [anon_sym_import] = ACTIONS(2174),\n    [anon_sym_var] = ACTIONS(2174),\n    [anon_sym_let] = ACTIONS(2174),\n    [anon_sym_const] = ACTIONS(2174),\n    [anon_sym_BANG] = ACTIONS(2172),\n    [anon_sym_else] = ACTIONS(2174),\n    [anon_sym_if] = ACTIONS(2174),\n    [anon_sym_switch] = ACTIONS(2174),\n    [anon_sym_for] = ACTIONS(2174),\n    [anon_sym_LPAREN] = ACTIONS(2172),\n    [anon_sym_await] = ACTIONS(2174),\n    [anon_sym_while] = ACTIONS(2174),\n    [anon_sym_do] = ACTIONS(2174),\n    [anon_sym_try] = ACTIONS(2174),\n    [anon_sym_with] = ACTIONS(2174),\n    [anon_sym_break] = ACTIONS(2174),\n    [anon_sym_continue] = ACTIONS(2174),\n    [anon_sym_debugger] = ACTIONS(2174),\n    [anon_sym_return] = ACTIONS(2174),\n    [anon_sym_throw] = ACTIONS(2174),\n    [anon_sym_SEMI] = ACTIONS(2172),\n    [anon_sym_case] = ACTIONS(2174),\n    [anon_sym_default] = ACTIONS(2174),\n    [anon_sym_yield] = ACTIONS(2174),\n    [anon_sym_LBRACK] = ACTIONS(2172),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2172),\n    [anon_sym_LT] = ACTIONS(2174),\n    [anon_sym_SLASH] = ACTIONS(2174),\n    [anon_sym_struct] = ACTIONS(2174),\n    [anon_sym_async] = ACTIONS(2174),\n    [anon_sym_fn] = ACTIONS(2174),\n    [anon_sym_fn_STAR] = ACTIONS(2172),\n    [anon_sym_new] = ACTIONS(2174),\n    [anon_sym_PLUS] = ACTIONS(2174),\n    [anon_sym_DASH] = ACTIONS(2174),\n    [anon_sym_TILDE] = ACTIONS(2172),\n    [anon_sym_void] = ACTIONS(2174),\n    [anon_sym_delete] = ACTIONS(2174),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2172),\n    [anon_sym_DASH_DASH] = ACTIONS(2172),\n    [anon_sym_DQUOTE] = ACTIONS(2172),\n    [anon_sym_SQUOTE] = ACTIONS(2172),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2172),\n    [sym_number] = ACTIONS(2172),\n    [sym_this] = ACTIONS(2174),\n    [sym_super] = ACTIONS(2174),\n    [sym_true] = ACTIONS(2174),\n    [sym_false] = ACTIONS(2174),\n    [sym_null] = ACTIONS(2174),\n    [sym_undefined] = ACTIONS(2174),\n    [anon_sym_AT] = ACTIONS(2172),\n    [anon_sym_static] = ACTIONS(2174),\n    [anon_sym_declare] = ACTIONS(2174),\n    [anon_sym_public] = ACTIONS(2174),\n    [anon_sym_private] = ACTIONS(2174),\n    [anon_sym_protected] = ACTIONS(2174),\n    [anon_sym_override] = ACTIONS(2174),\n    [anon_sym_readonly] = ACTIONS(2174),\n    [anon_sym_module] = ACTIONS(2174),\n    [anon_sym_any] = ACTIONS(2174),\n    [anon_sym_number] = ACTIONS(2174),\n    [anon_sym_int] = ACTIONS(2174),\n    [anon_sym_float] = ACTIONS(2174),\n    [anon_sym_float2] = ACTIONS(2174),\n    [anon_sym_float3] = ACTIONS(2174),\n    [anon_sym_float4] = ACTIONS(2174),\n    [anon_sym_float3x3] = ACTIONS(2174),\n    [anon_sym_float2x2] = ACTIONS(2174),\n    [anon_sym_float4x4] = ACTIONS(2174),\n    [anon_sym_int2] = ACTIONS(2174),\n    [anon_sym_int3] = ACTIONS(2174),\n    [anon_sym_int4] = ACTIONS(2174),\n    [anon_sym_int3x3] = ACTIONS(2174),\n    [anon_sym_int2x2] = ACTIONS(2174),\n    [anon_sym_int4x4] = ACTIONS(2174),\n    [anon_sym_boolean] = ACTIONS(2174),\n    [anon_sym_string] = ACTIONS(2174),\n    [anon_sym_symbol] = ACTIONS(2174),\n    [anon_sym_workgroup] = ACTIONS(2174),\n    [anon_sym_get] = ACTIONS(2174),\n    [anon_sym_set] = ACTIONS(2174),\n    [anon_sym_trait] = ACTIONS(2174),\n    [anon_sym_impl] = ACTIONS(2174),\n    [anon_sym_enum] = ACTIONS(2174),\n    [anon_sym_shader] = ACTIONS(2174),\n  },\n  [642] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [643] = {\n    [ts_builtin_sym_end] = ACTIONS(2176),\n    [sym_identifier] = ACTIONS(2178),\n    [anon_sym_pub] = ACTIONS(2178),\n    [anon_sym_export] = ACTIONS(2178),\n    [anon_sym_type] = ACTIONS(2178),\n    [anon_sym_namespace] = ACTIONS(2178),\n    [anon_sym_LBRACE] = ACTIONS(2176),\n    [anon_sym_RBRACE] = ACTIONS(2176),\n    [anon_sym_typeof] = ACTIONS(2178),\n    [anon_sym_import] = ACTIONS(2178),\n    [anon_sym_var] = ACTIONS(2178),\n    [anon_sym_let] = ACTIONS(2178),\n    [anon_sym_const] = ACTIONS(2178),\n    [anon_sym_BANG] = ACTIONS(2176),\n    [anon_sym_else] = ACTIONS(2178),\n    [anon_sym_if] = ACTIONS(2178),\n    [anon_sym_switch] = ACTIONS(2178),\n    [anon_sym_for] = ACTIONS(2178),\n    [anon_sym_LPAREN] = ACTIONS(2176),\n    [anon_sym_await] = ACTIONS(2178),\n    [anon_sym_while] = ACTIONS(2178),\n    [anon_sym_do] = ACTIONS(2178),\n    [anon_sym_try] = ACTIONS(2178),\n    [anon_sym_with] = ACTIONS(2178),\n    [anon_sym_break] = ACTIONS(2178),\n    [anon_sym_continue] = ACTIONS(2178),\n    [anon_sym_debugger] = ACTIONS(2178),\n    [anon_sym_return] = ACTIONS(2178),\n    [anon_sym_throw] = ACTIONS(2178),\n    [anon_sym_SEMI] = ACTIONS(2176),\n    [anon_sym_case] = ACTIONS(2178),\n    [anon_sym_default] = ACTIONS(2178),\n    [anon_sym_yield] = ACTIONS(2178),\n    [anon_sym_LBRACK] = ACTIONS(2176),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2176),\n    [anon_sym_LT] = ACTIONS(2178),\n    [anon_sym_SLASH] = ACTIONS(2178),\n    [anon_sym_struct] = ACTIONS(2178),\n    [anon_sym_async] = ACTIONS(2178),\n    [anon_sym_fn] = ACTIONS(2178),\n    [anon_sym_fn_STAR] = ACTIONS(2176),\n    [anon_sym_new] = ACTIONS(2178),\n    [anon_sym_PLUS] = ACTIONS(2178),\n    [anon_sym_DASH] = ACTIONS(2178),\n    [anon_sym_TILDE] = ACTIONS(2176),\n    [anon_sym_void] = ACTIONS(2178),\n    [anon_sym_delete] = ACTIONS(2178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2176),\n    [anon_sym_DASH_DASH] = ACTIONS(2176),\n    [anon_sym_DQUOTE] = ACTIONS(2176),\n    [anon_sym_SQUOTE] = ACTIONS(2176),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2176),\n    [sym_number] = ACTIONS(2176),\n    [sym_this] = ACTIONS(2178),\n    [sym_super] = ACTIONS(2178),\n    [sym_true] = ACTIONS(2178),\n    [sym_false] = ACTIONS(2178),\n    [sym_null] = ACTIONS(2178),\n    [sym_undefined] = ACTIONS(2178),\n    [anon_sym_AT] = ACTIONS(2176),\n    [anon_sym_static] = ACTIONS(2178),\n    [anon_sym_declare] = ACTIONS(2178),\n    [anon_sym_public] = ACTIONS(2178),\n    [anon_sym_private] = ACTIONS(2178),\n    [anon_sym_protected] = ACTIONS(2178),\n    [anon_sym_override] = ACTIONS(2178),\n    [anon_sym_readonly] = ACTIONS(2178),\n    [anon_sym_module] = ACTIONS(2178),\n    [anon_sym_any] = ACTIONS(2178),\n    [anon_sym_number] = ACTIONS(2178),\n    [anon_sym_int] = ACTIONS(2178),\n    [anon_sym_float] = ACTIONS(2178),\n    [anon_sym_float2] = ACTIONS(2178),\n    [anon_sym_float3] = ACTIONS(2178),\n    [anon_sym_float4] = ACTIONS(2178),\n    [anon_sym_float3x3] = ACTIONS(2178),\n    [anon_sym_float2x2] = ACTIONS(2178),\n    [anon_sym_float4x4] = ACTIONS(2178),\n    [anon_sym_int2] = ACTIONS(2178),\n    [anon_sym_int3] = ACTIONS(2178),\n    [anon_sym_int4] = ACTIONS(2178),\n    [anon_sym_int3x3] = ACTIONS(2178),\n    [anon_sym_int2x2] = ACTIONS(2178),\n    [anon_sym_int4x4] = ACTIONS(2178),\n    [anon_sym_boolean] = ACTIONS(2178),\n    [anon_sym_string] = ACTIONS(2178),\n    [anon_sym_symbol] = ACTIONS(2178),\n    [anon_sym_workgroup] = ACTIONS(2178),\n    [anon_sym_get] = ACTIONS(2178),\n    [anon_sym_set] = ACTIONS(2178),\n    [anon_sym_trait] = ACTIONS(2178),\n    [anon_sym_impl] = ACTIONS(2178),\n    [anon_sym_enum] = ACTIONS(2178),\n    [anon_sym_shader] = ACTIONS(2178),\n  },\n  [644] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [645] = {\n    [ts_builtin_sym_end] = ACTIONS(1900),\n    [sym_identifier] = ACTIONS(1902),\n    [anon_sym_pub] = ACTIONS(1902),\n    [anon_sym_export] = ACTIONS(1902),\n    [anon_sym_type] = ACTIONS(1902),\n    [anon_sym_namespace] = ACTIONS(1902),\n    [anon_sym_LBRACE] = ACTIONS(1900),\n    [anon_sym_RBRACE] = ACTIONS(1900),\n    [anon_sym_typeof] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1902),\n    [anon_sym_var] = ACTIONS(1902),\n    [anon_sym_let] = ACTIONS(1902),\n    [anon_sym_const] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1900),\n    [anon_sym_else] = ACTIONS(1902),\n    [anon_sym_if] = ACTIONS(1902),\n    [anon_sym_switch] = ACTIONS(1902),\n    [anon_sym_for] = ACTIONS(1902),\n    [anon_sym_LPAREN] = ACTIONS(1900),\n    [anon_sym_await] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1902),\n    [anon_sym_do] = ACTIONS(1902),\n    [anon_sym_try] = ACTIONS(1902),\n    [anon_sym_with] = ACTIONS(1902),\n    [anon_sym_break] = ACTIONS(1902),\n    [anon_sym_continue] = ACTIONS(1902),\n    [anon_sym_debugger] = ACTIONS(1902),\n    [anon_sym_return] = ACTIONS(1902),\n    [anon_sym_throw] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1900),\n    [anon_sym_case] = ACTIONS(1902),\n    [anon_sym_default] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1902),\n    [anon_sym_LBRACK] = ACTIONS(1900),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1900),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_SLASH] = ACTIONS(1902),\n    [anon_sym_struct] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1902),\n    [anon_sym_fn] = ACTIONS(1902),\n    [anon_sym_fn_STAR] = ACTIONS(1900),\n    [anon_sym_new] = ACTIONS(1902),\n    [anon_sym_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1900),\n    [anon_sym_void] = ACTIONS(1902),\n    [anon_sym_delete] = ACTIONS(1902),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1900),\n    [anon_sym_DASH_DASH] = ACTIONS(1900),\n    [anon_sym_DQUOTE] = ACTIONS(1900),\n    [anon_sym_SQUOTE] = ACTIONS(1900),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1900),\n    [sym_number] = ACTIONS(1900),\n    [sym_this] = ACTIONS(1902),\n    [sym_super] = ACTIONS(1902),\n    [sym_true] = ACTIONS(1902),\n    [sym_false] = ACTIONS(1902),\n    [sym_null] = ACTIONS(1902),\n    [sym_undefined] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1900),\n    [anon_sym_static] = ACTIONS(1902),\n    [anon_sym_declare] = ACTIONS(1902),\n    [anon_sym_public] = ACTIONS(1902),\n    [anon_sym_private] = ACTIONS(1902),\n    [anon_sym_protected] = ACTIONS(1902),\n    [anon_sym_override] = ACTIONS(1902),\n    [anon_sym_readonly] = ACTIONS(1902),\n    [anon_sym_module] = ACTIONS(1902),\n    [anon_sym_any] = ACTIONS(1902),\n    [anon_sym_number] = ACTIONS(1902),\n    [anon_sym_int] = ACTIONS(1902),\n    [anon_sym_float] = ACTIONS(1902),\n    [anon_sym_float2] = ACTIONS(1902),\n    [anon_sym_float3] = ACTIONS(1902),\n    [anon_sym_float4] = ACTIONS(1902),\n    [anon_sym_float3x3] = ACTIONS(1902),\n    [anon_sym_float2x2] = ACTIONS(1902),\n    [anon_sym_float4x4] = ACTIONS(1902),\n    [anon_sym_int2] = ACTIONS(1902),\n    [anon_sym_int3] = ACTIONS(1902),\n    [anon_sym_int4] = ACTIONS(1902),\n    [anon_sym_int3x3] = ACTIONS(1902),\n    [anon_sym_int2x2] = ACTIONS(1902),\n    [anon_sym_int4x4] = ACTIONS(1902),\n    [anon_sym_boolean] = ACTIONS(1902),\n    [anon_sym_string] = ACTIONS(1902),\n    [anon_sym_symbol] = ACTIONS(1902),\n    [anon_sym_workgroup] = ACTIONS(1902),\n    [anon_sym_get] = ACTIONS(1902),\n    [anon_sym_set] = ACTIONS(1902),\n    [anon_sym_trait] = ACTIONS(1902),\n    [anon_sym_impl] = ACTIONS(1902),\n    [anon_sym_enum] = ACTIONS(1902),\n    [anon_sym_shader] = ACTIONS(1902),\n  },\n  [646] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [647] = {\n    [ts_builtin_sym_end] = ACTIONS(2180),\n    [sym_identifier] = ACTIONS(2182),\n    [anon_sym_pub] = ACTIONS(2182),\n    [anon_sym_export] = ACTIONS(2182),\n    [anon_sym_type] = ACTIONS(2182),\n    [anon_sym_namespace] = ACTIONS(2182),\n    [anon_sym_LBRACE] = ACTIONS(2180),\n    [anon_sym_RBRACE] = ACTIONS(2180),\n    [anon_sym_typeof] = ACTIONS(2182),\n    [anon_sym_import] = ACTIONS(2182),\n    [anon_sym_var] = ACTIONS(2182),\n    [anon_sym_let] = ACTIONS(2182),\n    [anon_sym_const] = ACTIONS(2182),\n    [anon_sym_BANG] = ACTIONS(2180),\n    [anon_sym_else] = ACTIONS(2182),\n    [anon_sym_if] = ACTIONS(2182),\n    [anon_sym_switch] = ACTIONS(2182),\n    [anon_sym_for] = ACTIONS(2182),\n    [anon_sym_LPAREN] = ACTIONS(2180),\n    [anon_sym_await] = ACTIONS(2182),\n    [anon_sym_while] = ACTIONS(2182),\n    [anon_sym_do] = ACTIONS(2182),\n    [anon_sym_try] = ACTIONS(2182),\n    [anon_sym_with] = ACTIONS(2182),\n    [anon_sym_break] = ACTIONS(2182),\n    [anon_sym_continue] = ACTIONS(2182),\n    [anon_sym_debugger] = ACTIONS(2182),\n    [anon_sym_return] = ACTIONS(2182),\n    [anon_sym_throw] = ACTIONS(2182),\n    [anon_sym_SEMI] = ACTIONS(2180),\n    [anon_sym_case] = ACTIONS(2182),\n    [anon_sym_default] = ACTIONS(2182),\n    [anon_sym_yield] = ACTIONS(2182),\n    [anon_sym_LBRACK] = ACTIONS(2180),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2180),\n    [anon_sym_LT] = ACTIONS(2182),\n    [anon_sym_SLASH] = ACTIONS(2182),\n    [anon_sym_struct] = ACTIONS(2182),\n    [anon_sym_async] = ACTIONS(2182),\n    [anon_sym_fn] = ACTIONS(2182),\n    [anon_sym_fn_STAR] = ACTIONS(2180),\n    [anon_sym_new] = ACTIONS(2182),\n    [anon_sym_PLUS] = ACTIONS(2182),\n    [anon_sym_DASH] = ACTIONS(2182),\n    [anon_sym_TILDE] = ACTIONS(2180),\n    [anon_sym_void] = ACTIONS(2182),\n    [anon_sym_delete] = ACTIONS(2182),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2180),\n    [anon_sym_DASH_DASH] = ACTIONS(2180),\n    [anon_sym_DQUOTE] = ACTIONS(2180),\n    [anon_sym_SQUOTE] = ACTIONS(2180),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2180),\n    [sym_number] = ACTIONS(2180),\n    [sym_this] = ACTIONS(2182),\n    [sym_super] = ACTIONS(2182),\n    [sym_true] = ACTIONS(2182),\n    [sym_false] = ACTIONS(2182),\n    [sym_null] = ACTIONS(2182),\n    [sym_undefined] = ACTIONS(2182),\n    [anon_sym_AT] = ACTIONS(2180),\n    [anon_sym_static] = ACTIONS(2182),\n    [anon_sym_declare] = ACTIONS(2182),\n    [anon_sym_public] = ACTIONS(2182),\n    [anon_sym_private] = ACTIONS(2182),\n    [anon_sym_protected] = ACTIONS(2182),\n    [anon_sym_override] = ACTIONS(2182),\n    [anon_sym_readonly] = ACTIONS(2182),\n    [anon_sym_module] = ACTIONS(2182),\n    [anon_sym_any] = ACTIONS(2182),\n    [anon_sym_number] = ACTIONS(2182),\n    [anon_sym_int] = ACTIONS(2182),\n    [anon_sym_float] = ACTIONS(2182),\n    [anon_sym_float2] = ACTIONS(2182),\n    [anon_sym_float3] = ACTIONS(2182),\n    [anon_sym_float4] = ACTIONS(2182),\n    [anon_sym_float3x3] = ACTIONS(2182),\n    [anon_sym_float2x2] = ACTIONS(2182),\n    [anon_sym_float4x4] = ACTIONS(2182),\n    [anon_sym_int2] = ACTIONS(2182),\n    [anon_sym_int3] = ACTIONS(2182),\n    [anon_sym_int4] = ACTIONS(2182),\n    [anon_sym_int3x3] = ACTIONS(2182),\n    [anon_sym_int2x2] = ACTIONS(2182),\n    [anon_sym_int4x4] = ACTIONS(2182),\n    [anon_sym_boolean] = ACTIONS(2182),\n    [anon_sym_string] = ACTIONS(2182),\n    [anon_sym_symbol] = ACTIONS(2182),\n    [anon_sym_workgroup] = ACTIONS(2182),\n    [anon_sym_get] = ACTIONS(2182),\n    [anon_sym_set] = ACTIONS(2182),\n    [anon_sym_trait] = ACTIONS(2182),\n    [anon_sym_impl] = ACTIONS(2182),\n    [anon_sym_enum] = ACTIONS(2182),\n    [anon_sym_shader] = ACTIONS(2182),\n  },\n  [648] = {\n    [ts_builtin_sym_end] = ACTIONS(2184),\n    [sym_identifier] = ACTIONS(2186),\n    [anon_sym_pub] = ACTIONS(2186),\n    [anon_sym_export] = ACTIONS(2186),\n    [anon_sym_type] = ACTIONS(2186),\n    [anon_sym_namespace] = ACTIONS(2186),\n    [anon_sym_LBRACE] = ACTIONS(2184),\n    [anon_sym_RBRACE] = ACTIONS(2184),\n    [anon_sym_typeof] = ACTIONS(2186),\n    [anon_sym_import] = ACTIONS(2186),\n    [anon_sym_var] = ACTIONS(2186),\n    [anon_sym_let] = ACTIONS(2186),\n    [anon_sym_const] = ACTIONS(2186),\n    [anon_sym_BANG] = ACTIONS(2184),\n    [anon_sym_else] = ACTIONS(2186),\n    [anon_sym_if] = ACTIONS(2186),\n    [anon_sym_switch] = ACTIONS(2186),\n    [anon_sym_for] = ACTIONS(2186),\n    [anon_sym_LPAREN] = ACTIONS(2184),\n    [anon_sym_await] = ACTIONS(2186),\n    [anon_sym_while] = ACTIONS(2186),\n    [anon_sym_do] = ACTIONS(2186),\n    [anon_sym_try] = ACTIONS(2186),\n    [anon_sym_with] = ACTIONS(2186),\n    [anon_sym_break] = ACTIONS(2186),\n    [anon_sym_continue] = ACTIONS(2186),\n    [anon_sym_debugger] = ACTIONS(2186),\n    [anon_sym_return] = ACTIONS(2186),\n    [anon_sym_throw] = ACTIONS(2186),\n    [anon_sym_SEMI] = ACTIONS(2184),\n    [anon_sym_case] = ACTIONS(2186),\n    [anon_sym_default] = ACTIONS(2186),\n    [anon_sym_yield] = ACTIONS(2186),\n    [anon_sym_LBRACK] = ACTIONS(2184),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2184),\n    [anon_sym_LT] = ACTIONS(2186),\n    [anon_sym_SLASH] = ACTIONS(2186),\n    [anon_sym_struct] = ACTIONS(2186),\n    [anon_sym_async] = ACTIONS(2186),\n    [anon_sym_fn] = ACTIONS(2186),\n    [anon_sym_fn_STAR] = ACTIONS(2184),\n    [anon_sym_new] = ACTIONS(2186),\n    [anon_sym_PLUS] = ACTIONS(2186),\n    [anon_sym_DASH] = ACTIONS(2186),\n    [anon_sym_TILDE] = ACTIONS(2184),\n    [anon_sym_void] = ACTIONS(2186),\n    [anon_sym_delete] = ACTIONS(2186),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2184),\n    [anon_sym_DASH_DASH] = ACTIONS(2184),\n    [anon_sym_DQUOTE] = ACTIONS(2184),\n    [anon_sym_SQUOTE] = ACTIONS(2184),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2184),\n    [sym_number] = ACTIONS(2184),\n    [sym_this] = ACTIONS(2186),\n    [sym_super] = ACTIONS(2186),\n    [sym_true] = ACTIONS(2186),\n    [sym_false] = ACTIONS(2186),\n    [sym_null] = ACTIONS(2186),\n    [sym_undefined] = ACTIONS(2186),\n    [anon_sym_AT] = ACTIONS(2184),\n    [anon_sym_static] = ACTIONS(2186),\n    [anon_sym_declare] = ACTIONS(2186),\n    [anon_sym_public] = ACTIONS(2186),\n    [anon_sym_private] = ACTIONS(2186),\n    [anon_sym_protected] = ACTIONS(2186),\n    [anon_sym_override] = ACTIONS(2186),\n    [anon_sym_readonly] = ACTIONS(2186),\n    [anon_sym_module] = ACTIONS(2186),\n    [anon_sym_any] = ACTIONS(2186),\n    [anon_sym_number] = ACTIONS(2186),\n    [anon_sym_int] = ACTIONS(2186),\n    [anon_sym_float] = ACTIONS(2186),\n    [anon_sym_float2] = ACTIONS(2186),\n    [anon_sym_float3] = ACTIONS(2186),\n    [anon_sym_float4] = ACTIONS(2186),\n    [anon_sym_float3x3] = ACTIONS(2186),\n    [anon_sym_float2x2] = ACTIONS(2186),\n    [anon_sym_float4x4] = ACTIONS(2186),\n    [anon_sym_int2] = ACTIONS(2186),\n    [anon_sym_int3] = ACTIONS(2186),\n    [anon_sym_int4] = ACTIONS(2186),\n    [anon_sym_int3x3] = ACTIONS(2186),\n    [anon_sym_int2x2] = ACTIONS(2186),\n    [anon_sym_int4x4] = ACTIONS(2186),\n    [anon_sym_boolean] = ACTIONS(2186),\n    [anon_sym_string] = ACTIONS(2186),\n    [anon_sym_symbol] = ACTIONS(2186),\n    [anon_sym_workgroup] = ACTIONS(2186),\n    [anon_sym_get] = ACTIONS(2186),\n    [anon_sym_set] = ACTIONS(2186),\n    [anon_sym_trait] = ACTIONS(2186),\n    [anon_sym_impl] = ACTIONS(2186),\n    [anon_sym_enum] = ACTIONS(2186),\n    [anon_sym_shader] = ACTIONS(2186),\n  },\n  [649] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [650] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [651] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [652] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [653] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [654] = {\n    [ts_builtin_sym_end] = ACTIONS(1960),\n    [sym_identifier] = ACTIONS(1962),\n    [anon_sym_pub] = ACTIONS(1962),\n    [anon_sym_export] = ACTIONS(1962),\n    [anon_sym_type] = ACTIONS(1962),\n    [anon_sym_namespace] = ACTIONS(1962),\n    [anon_sym_LBRACE] = ACTIONS(1960),\n    [anon_sym_RBRACE] = ACTIONS(1960),\n    [anon_sym_typeof] = ACTIONS(1962),\n    [anon_sym_import] = ACTIONS(1962),\n    [anon_sym_var] = ACTIONS(1962),\n    [anon_sym_let] = ACTIONS(1962),\n    [anon_sym_const] = ACTIONS(1962),\n    [anon_sym_BANG] = ACTIONS(1960),\n    [anon_sym_else] = ACTIONS(1962),\n    [anon_sym_if] = ACTIONS(1962),\n    [anon_sym_switch] = ACTIONS(1962),\n    [anon_sym_for] = ACTIONS(1962),\n    [anon_sym_LPAREN] = ACTIONS(1960),\n    [anon_sym_await] = ACTIONS(1962),\n    [anon_sym_while] = ACTIONS(1962),\n    [anon_sym_do] = ACTIONS(1962),\n    [anon_sym_try] = ACTIONS(1962),\n    [anon_sym_with] = ACTIONS(1962),\n    [anon_sym_break] = ACTIONS(1962),\n    [anon_sym_continue] = ACTIONS(1962),\n    [anon_sym_debugger] = ACTIONS(1962),\n    [anon_sym_return] = ACTIONS(1962),\n    [anon_sym_throw] = ACTIONS(1962),\n    [anon_sym_SEMI] = ACTIONS(1960),\n    [anon_sym_case] = ACTIONS(1962),\n    [anon_sym_default] = ACTIONS(1962),\n    [anon_sym_yield] = ACTIONS(1962),\n    [anon_sym_LBRACK] = ACTIONS(1960),\n    [anon_sym_LTtemplate_GT] = ACTIONS(1960),\n    [anon_sym_LT] = ACTIONS(1962),\n    [anon_sym_SLASH] = ACTIONS(1962),\n    [anon_sym_struct] = ACTIONS(1962),\n    [anon_sym_async] = ACTIONS(1962),\n    [anon_sym_fn] = ACTIONS(1962),\n    [anon_sym_fn_STAR] = ACTIONS(1960),\n    [anon_sym_new] = ACTIONS(1962),\n    [anon_sym_PLUS] = ACTIONS(1962),\n    [anon_sym_DASH] = ACTIONS(1962),\n    [anon_sym_TILDE] = ACTIONS(1960),\n    [anon_sym_void] = ACTIONS(1962),\n    [anon_sym_delete] = ACTIONS(1962),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1960),\n    [anon_sym_DASH_DASH] = ACTIONS(1960),\n    [anon_sym_DQUOTE] = ACTIONS(1960),\n    [anon_sym_SQUOTE] = ACTIONS(1960),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1960),\n    [sym_number] = ACTIONS(1960),\n    [sym_this] = ACTIONS(1962),\n    [sym_super] = ACTIONS(1962),\n    [sym_true] = ACTIONS(1962),\n    [sym_false] = ACTIONS(1962),\n    [sym_null] = ACTIONS(1962),\n    [sym_undefined] = ACTIONS(1962),\n    [anon_sym_AT] = ACTIONS(1960),\n    [anon_sym_static] = ACTIONS(1962),\n    [anon_sym_declare] = ACTIONS(1962),\n    [anon_sym_public] = ACTIONS(1962),\n    [anon_sym_private] = ACTIONS(1962),\n    [anon_sym_protected] = ACTIONS(1962),\n    [anon_sym_override] = ACTIONS(1962),\n    [anon_sym_readonly] = ACTIONS(1962),\n    [anon_sym_module] = ACTIONS(1962),\n    [anon_sym_any] = ACTIONS(1962),\n    [anon_sym_number] = ACTIONS(1962),\n    [anon_sym_int] = ACTIONS(1962),\n    [anon_sym_float] = ACTIONS(1962),\n    [anon_sym_float2] = ACTIONS(1962),\n    [anon_sym_float3] = ACTIONS(1962),\n    [anon_sym_float4] = ACTIONS(1962),\n    [anon_sym_float3x3] = ACTIONS(1962),\n    [anon_sym_float2x2] = ACTIONS(1962),\n    [anon_sym_float4x4] = ACTIONS(1962),\n    [anon_sym_int2] = ACTIONS(1962),\n    [anon_sym_int3] = ACTIONS(1962),\n    [anon_sym_int4] = ACTIONS(1962),\n    [anon_sym_int3x3] = ACTIONS(1962),\n    [anon_sym_int2x2] = ACTIONS(1962),\n    [anon_sym_int4x4] = ACTIONS(1962),\n    [anon_sym_boolean] = ACTIONS(1962),\n    [anon_sym_string] = ACTIONS(1962),\n    [anon_sym_symbol] = ACTIONS(1962),\n    [anon_sym_workgroup] = ACTIONS(1962),\n    [anon_sym_get] = ACTIONS(1962),\n    [anon_sym_set] = ACTIONS(1962),\n    [anon_sym_trait] = ACTIONS(1962),\n    [anon_sym_impl] = ACTIONS(1962),\n    [anon_sym_enum] = ACTIONS(1962),\n    [anon_sym_shader] = ACTIONS(1962),\n  },\n  [655] = {\n    [sym_declaration] = STATE(592),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1733),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_module] = ACTIONS(1822),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_global] = ACTIONS(1824),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [656] = {\n    [sym_declaration] = STATE(592),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(2188),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1741),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(2190),\n    [anon_sym_module] = ACTIONS(2192),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_global] = ACTIONS(1824),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [657] = {\n    [sym_declaration] = STATE(600),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(1781),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1733),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(1802),\n    [anon_sym_module] = ACTIONS(1804),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [658] = {\n    [sym_declaration] = STATE(600),\n    [sym_variable_declaration] = STATE(548),\n    [sym_lexical_declaration] = STATE(548),\n    [sym_struct_declaration] = STATE(548),\n    [sym_function_declaration] = STATE(548),\n    [sym_generator_function_declaration] = STATE(548),\n    [sym_decorator] = STATE(873),\n    [sym_function_signature] = STATE(548),\n    [sym_ambient_declaration] = STATE(548),\n    [sym_module] = STATE(548),\n    [sym_internal_module] = STATE(603),\n    [sym_import_alias] = STATE(548),\n    [sym_interface_declaration] = STATE(548),\n    [sym_impl_declaration] = STATE(548),\n    [sym_enum_declaration] = STATE(548),\n    [sym_type_alias_declaration] = STATE(548),\n    [aux_sym_class_repeat1] = STATE(2880),\n    [anon_sym_type] = ACTIONS(1779),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_namespace] = ACTIONS(2188),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_import] = ACTIONS(1783),\n    [anon_sym_var] = ACTIONS(1785),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1789),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1741),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_struct] = ACTIONS(1791),\n    [anon_sym_async] = ACTIONS(1793),\n    [anon_sym_fn] = ACTIONS(1820),\n    [anon_sym_fn_STAR] = ACTIONS(1798),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_AT] = ACTIONS(97),\n    [anon_sym_declare] = ACTIONS(2190),\n    [anon_sym_module] = ACTIONS(2194),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [anon_sym_trait] = ACTIONS(1806),\n    [anon_sym_impl] = ACTIONS(1808),\n    [anon_sym_enum] = ACTIONS(1810),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [659] = {\n    [sym_identifier] = ACTIONS(2196),\n    [anon_sym_pub] = ACTIONS(2196),\n    [anon_sym_export] = ACTIONS(2196),\n    [anon_sym_type] = ACTIONS(2196),\n    [anon_sym_namespace] = ACTIONS(2196),\n    [anon_sym_LBRACE] = ACTIONS(2198),\n    [anon_sym_typeof] = ACTIONS(2196),\n    [anon_sym_import] = ACTIONS(2196),\n    [anon_sym_var] = ACTIONS(2196),\n    [anon_sym_let] = ACTIONS(2196),\n    [anon_sym_const] = ACTIONS(2196),\n    [anon_sym_BANG] = ACTIONS(2198),\n    [anon_sym_if] = ACTIONS(2196),\n    [anon_sym_switch] = ACTIONS(2196),\n    [anon_sym_for] = ACTIONS(2196),\n    [anon_sym_LPAREN] = ACTIONS(2198),\n    [anon_sym_await] = ACTIONS(2196),\n    [anon_sym_while] = ACTIONS(2196),\n    [anon_sym_do] = ACTIONS(2196),\n    [anon_sym_try] = ACTIONS(2196),\n    [anon_sym_with] = ACTIONS(2196),\n    [anon_sym_break] = ACTIONS(2196),\n    [anon_sym_continue] = ACTIONS(2196),\n    [anon_sym_debugger] = ACTIONS(2196),\n    [anon_sym_return] = ACTIONS(2196),\n    [anon_sym_throw] = ACTIONS(2196),\n    [anon_sym_SEMI] = ACTIONS(2198),\n    [anon_sym_yield] = ACTIONS(2196),\n    [anon_sym_LBRACK] = ACTIONS(2198),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2198),\n    [anon_sym_LT] = ACTIONS(2196),\n    [anon_sym_SLASH] = ACTIONS(2196),\n    [anon_sym_struct] = ACTIONS(2196),\n    [anon_sym_async] = ACTIONS(2196),\n    [anon_sym_fn] = ACTIONS(2196),\n    [anon_sym_fn_STAR] = ACTIONS(2198),\n    [anon_sym_new] = ACTIONS(2196),\n    [anon_sym_PLUS] = ACTIONS(2196),\n    [anon_sym_DASH] = ACTIONS(2196),\n    [anon_sym_TILDE] = ACTIONS(2198),\n    [anon_sym_void] = ACTIONS(2196),\n    [anon_sym_delete] = ACTIONS(2196),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2198),\n    [anon_sym_DASH_DASH] = ACTIONS(2198),\n    [anon_sym_DQUOTE] = ACTIONS(2198),\n    [anon_sym_SQUOTE] = ACTIONS(2198),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2198),\n    [sym_number] = ACTIONS(2198),\n    [sym_this] = ACTIONS(2196),\n    [sym_super] = ACTIONS(2196),\n    [sym_true] = ACTIONS(2196),\n    [sym_false] = ACTIONS(2196),\n    [sym_null] = ACTIONS(2196),\n    [sym_undefined] = ACTIONS(2196),\n    [anon_sym_AT] = ACTIONS(2198),\n    [anon_sym_static] = ACTIONS(2196),\n    [anon_sym_declare] = ACTIONS(2196),\n    [anon_sym_public] = ACTIONS(2196),\n    [anon_sym_private] = ACTIONS(2196),\n    [anon_sym_protected] = ACTIONS(2196),\n    [anon_sym_override] = ACTIONS(2196),\n    [anon_sym_readonly] = ACTIONS(2196),\n    [anon_sym_module] = ACTIONS(2196),\n    [anon_sym_any] = ACTIONS(2196),\n    [anon_sym_number] = ACTIONS(2196),\n    [anon_sym_int] = ACTIONS(2196),\n    [anon_sym_float] = ACTIONS(2196),\n    [anon_sym_float2] = ACTIONS(2196),\n    [anon_sym_float3] = ACTIONS(2196),\n    [anon_sym_float4] = ACTIONS(2196),\n    [anon_sym_float3x3] = ACTIONS(2196),\n    [anon_sym_float2x2] = ACTIONS(2196),\n    [anon_sym_float4x4] = ACTIONS(2196),\n    [anon_sym_int2] = ACTIONS(2196),\n    [anon_sym_int3] = ACTIONS(2196),\n    [anon_sym_int4] = ACTIONS(2196),\n    [anon_sym_int3x3] = ACTIONS(2196),\n    [anon_sym_int2x2] = ACTIONS(2196),\n    [anon_sym_int4x4] = ACTIONS(2196),\n    [anon_sym_boolean] = ACTIONS(2196),\n    [anon_sym_string] = ACTIONS(2196),\n    [anon_sym_symbol] = ACTIONS(2196),\n    [anon_sym_workgroup] = ACTIONS(2196),\n    [anon_sym_get] = ACTIONS(2196),\n    [anon_sym_set] = ACTIONS(2196),\n    [anon_sym_trait] = ACTIONS(2196),\n    [anon_sym_impl] = ACTIONS(2196),\n    [anon_sym_enum] = ACTIONS(2196),\n    [anon_sym_shader] = ACTIONS(2196),\n  },\n  [660] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [661] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [662] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [663] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [664] = {\n    [sym_identifier] = ACTIONS(2204),\n    [anon_sym_pub] = ACTIONS(2204),\n    [anon_sym_export] = ACTIONS(2204),\n    [anon_sym_type] = ACTIONS(2204),\n    [anon_sym_namespace] = ACTIONS(2204),\n    [anon_sym_LBRACE] = ACTIONS(2206),\n    [anon_sym_typeof] = ACTIONS(2204),\n    [anon_sym_import] = ACTIONS(2204),\n    [anon_sym_var] = ACTIONS(2204),\n    [anon_sym_let] = ACTIONS(2204),\n    [anon_sym_const] = ACTIONS(2204),\n    [anon_sym_BANG] = ACTIONS(2206),\n    [anon_sym_if] = ACTIONS(2204),\n    [anon_sym_switch] = ACTIONS(2204),\n    [anon_sym_for] = ACTIONS(2204),\n    [anon_sym_LPAREN] = ACTIONS(2206),\n    [anon_sym_await] = ACTIONS(2204),\n    [anon_sym_while] = ACTIONS(2204),\n    [anon_sym_do] = ACTIONS(2204),\n    [anon_sym_try] = ACTIONS(2204),\n    [anon_sym_with] = ACTIONS(2204),\n    [anon_sym_break] = ACTIONS(2204),\n    [anon_sym_continue] = ACTIONS(2204),\n    [anon_sym_debugger] = ACTIONS(2204),\n    [anon_sym_return] = ACTIONS(2204),\n    [anon_sym_throw] = ACTIONS(2204),\n    [anon_sym_SEMI] = ACTIONS(2206),\n    [anon_sym_yield] = ACTIONS(2204),\n    [anon_sym_LBRACK] = ACTIONS(2206),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2206),\n    [anon_sym_LT] = ACTIONS(2204),\n    [anon_sym_SLASH] = ACTIONS(2204),\n    [anon_sym_struct] = ACTIONS(2204),\n    [anon_sym_async] = ACTIONS(2204),\n    [anon_sym_fn] = ACTIONS(2204),\n    [anon_sym_fn_STAR] = ACTIONS(2206),\n    [anon_sym_new] = ACTIONS(2204),\n    [anon_sym_PLUS] = ACTIONS(2204),\n    [anon_sym_DASH] = ACTIONS(2204),\n    [anon_sym_TILDE] = ACTIONS(2206),\n    [anon_sym_void] = ACTIONS(2204),\n    [anon_sym_delete] = ACTIONS(2204),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2206),\n    [anon_sym_DASH_DASH] = ACTIONS(2206),\n    [anon_sym_DQUOTE] = ACTIONS(2206),\n    [anon_sym_SQUOTE] = ACTIONS(2206),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2206),\n    [sym_number] = ACTIONS(2206),\n    [sym_this] = ACTIONS(2204),\n    [sym_super] = ACTIONS(2204),\n    [sym_true] = ACTIONS(2204),\n    [sym_false] = ACTIONS(2204),\n    [sym_null] = ACTIONS(2204),\n    [sym_undefined] = ACTIONS(2204),\n    [anon_sym_AT] = ACTIONS(2206),\n    [anon_sym_static] = ACTIONS(2204),\n    [anon_sym_declare] = ACTIONS(2204),\n    [anon_sym_public] = ACTIONS(2204),\n    [anon_sym_private] = ACTIONS(2204),\n    [anon_sym_protected] = ACTIONS(2204),\n    [anon_sym_override] = ACTIONS(2204),\n    [anon_sym_readonly] = ACTIONS(2204),\n    [anon_sym_module] = ACTIONS(2204),\n    [anon_sym_any] = ACTIONS(2204),\n    [anon_sym_number] = ACTIONS(2204),\n    [anon_sym_int] = ACTIONS(2204),\n    [anon_sym_float] = ACTIONS(2204),\n    [anon_sym_float2] = ACTIONS(2204),\n    [anon_sym_float3] = ACTIONS(2204),\n    [anon_sym_float4] = ACTIONS(2204),\n    [anon_sym_float3x3] = ACTIONS(2204),\n    [anon_sym_float2x2] = ACTIONS(2204),\n    [anon_sym_float4x4] = ACTIONS(2204),\n    [anon_sym_int2] = ACTIONS(2204),\n    [anon_sym_int3] = ACTIONS(2204),\n    [anon_sym_int4] = ACTIONS(2204),\n    [anon_sym_int3x3] = ACTIONS(2204),\n    [anon_sym_int2x2] = ACTIONS(2204),\n    [anon_sym_int4x4] = ACTIONS(2204),\n    [anon_sym_boolean] = ACTIONS(2204),\n    [anon_sym_string] = ACTIONS(2204),\n    [anon_sym_symbol] = ACTIONS(2204),\n    [anon_sym_workgroup] = ACTIONS(2204),\n    [anon_sym_get] = ACTIONS(2204),\n    [anon_sym_set] = ACTIONS(2204),\n    [anon_sym_trait] = ACTIONS(2204),\n    [anon_sym_impl] = ACTIONS(2204),\n    [anon_sym_enum] = ACTIONS(2204),\n    [anon_sym_shader] = ACTIONS(2204),\n  },\n  [665] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [666] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [667] = {\n    [sym_identifier] = ACTIONS(2208),\n    [anon_sym_pub] = ACTIONS(2208),\n    [anon_sym_export] = ACTIONS(2208),\n    [anon_sym_type] = ACTIONS(2208),\n    [anon_sym_namespace] = ACTIONS(2208),\n    [anon_sym_LBRACE] = ACTIONS(2210),\n    [anon_sym_typeof] = ACTIONS(2208),\n    [anon_sym_import] = ACTIONS(2208),\n    [anon_sym_var] = ACTIONS(2208),\n    [anon_sym_let] = ACTIONS(2208),\n    [anon_sym_const] = ACTIONS(2208),\n    [anon_sym_BANG] = ACTIONS(2210),\n    [anon_sym_if] = ACTIONS(2208),\n    [anon_sym_switch] = ACTIONS(2208),\n    [anon_sym_for] = ACTIONS(2208),\n    [anon_sym_LPAREN] = ACTIONS(2210),\n    [anon_sym_await] = ACTIONS(2208),\n    [anon_sym_while] = ACTIONS(2208),\n    [anon_sym_do] = ACTIONS(2208),\n    [anon_sym_try] = ACTIONS(2208),\n    [anon_sym_with] = ACTIONS(2208),\n    [anon_sym_break] = ACTIONS(2208),\n    [anon_sym_continue] = ACTIONS(2208),\n    [anon_sym_debugger] = ACTIONS(2208),\n    [anon_sym_return] = ACTIONS(2208),\n    [anon_sym_throw] = ACTIONS(2208),\n    [anon_sym_SEMI] = ACTIONS(2210),\n    [anon_sym_yield] = ACTIONS(2208),\n    [anon_sym_LBRACK] = ACTIONS(2210),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2210),\n    [anon_sym_LT] = ACTIONS(2208),\n    [anon_sym_SLASH] = ACTIONS(2208),\n    [anon_sym_struct] = ACTIONS(2208),\n    [anon_sym_async] = ACTIONS(2208),\n    [anon_sym_fn] = ACTIONS(2208),\n    [anon_sym_fn_STAR] = ACTIONS(2210),\n    [anon_sym_new] = ACTIONS(2208),\n    [anon_sym_PLUS] = ACTIONS(2208),\n    [anon_sym_DASH] = ACTIONS(2208),\n    [anon_sym_TILDE] = ACTIONS(2210),\n    [anon_sym_void] = ACTIONS(2208),\n    [anon_sym_delete] = ACTIONS(2208),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2210),\n    [anon_sym_DASH_DASH] = ACTIONS(2210),\n    [anon_sym_DQUOTE] = ACTIONS(2210),\n    [anon_sym_SQUOTE] = ACTIONS(2210),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2210),\n    [sym_number] = ACTIONS(2210),\n    [sym_this] = ACTIONS(2208),\n    [sym_super] = ACTIONS(2208),\n    [sym_true] = ACTIONS(2208),\n    [sym_false] = ACTIONS(2208),\n    [sym_null] = ACTIONS(2208),\n    [sym_undefined] = ACTIONS(2208),\n    [anon_sym_AT] = ACTIONS(2210),\n    [anon_sym_static] = ACTIONS(2208),\n    [anon_sym_declare] = ACTIONS(2208),\n    [anon_sym_public] = ACTIONS(2208),\n    [anon_sym_private] = ACTIONS(2208),\n    [anon_sym_protected] = ACTIONS(2208),\n    [anon_sym_override] = ACTIONS(2208),\n    [anon_sym_readonly] = ACTIONS(2208),\n    [anon_sym_module] = ACTIONS(2208),\n    [anon_sym_any] = ACTIONS(2208),\n    [anon_sym_number] = ACTIONS(2208),\n    [anon_sym_int] = ACTIONS(2208),\n    [anon_sym_float] = ACTIONS(2208),\n    [anon_sym_float2] = ACTIONS(2208),\n    [anon_sym_float3] = ACTIONS(2208),\n    [anon_sym_float4] = ACTIONS(2208),\n    [anon_sym_float3x3] = ACTIONS(2208),\n    [anon_sym_float2x2] = ACTIONS(2208),\n    [anon_sym_float4x4] = ACTIONS(2208),\n    [anon_sym_int2] = ACTIONS(2208),\n    [anon_sym_int3] = ACTIONS(2208),\n    [anon_sym_int4] = ACTIONS(2208),\n    [anon_sym_int3x3] = ACTIONS(2208),\n    [anon_sym_int2x2] = ACTIONS(2208),\n    [anon_sym_int4x4] = ACTIONS(2208),\n    [anon_sym_boolean] = ACTIONS(2208),\n    [anon_sym_string] = ACTIONS(2208),\n    [anon_sym_symbol] = ACTIONS(2208),\n    [anon_sym_workgroup] = ACTIONS(2208),\n    [anon_sym_get] = ACTIONS(2208),\n    [anon_sym_set] = ACTIONS(2208),\n    [anon_sym_trait] = ACTIONS(2208),\n    [anon_sym_impl] = ACTIONS(2208),\n    [anon_sym_enum] = ACTIONS(2208),\n    [anon_sym_shader] = ACTIONS(2208),\n  },\n  [668] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [669] = {\n    [sym_identifier] = ACTIONS(2212),\n    [anon_sym_pub] = ACTIONS(2212),\n    [anon_sym_export] = ACTIONS(2212),\n    [anon_sym_type] = ACTIONS(2212),\n    [anon_sym_namespace] = ACTIONS(2212),\n    [anon_sym_LBRACE] = ACTIONS(2214),\n    [anon_sym_typeof] = ACTIONS(2212),\n    [anon_sym_import] = ACTIONS(2212),\n    [anon_sym_var] = ACTIONS(2212),\n    [anon_sym_let] = ACTIONS(2212),\n    [anon_sym_const] = ACTIONS(2212),\n    [anon_sym_BANG] = ACTIONS(2214),\n    [anon_sym_if] = ACTIONS(2212),\n    [anon_sym_switch] = ACTIONS(2212),\n    [anon_sym_for] = ACTIONS(2212),\n    [anon_sym_LPAREN] = ACTIONS(2214),\n    [anon_sym_await] = ACTIONS(2212),\n    [anon_sym_while] = ACTIONS(2212),\n    [anon_sym_do] = ACTIONS(2212),\n    [anon_sym_try] = ACTIONS(2212),\n    [anon_sym_with] = ACTIONS(2212),\n    [anon_sym_break] = ACTIONS(2212),\n    [anon_sym_continue] = ACTIONS(2212),\n    [anon_sym_debugger] = ACTIONS(2212),\n    [anon_sym_return] = ACTIONS(2212),\n    [anon_sym_throw] = ACTIONS(2212),\n    [anon_sym_SEMI] = ACTIONS(2214),\n    [anon_sym_yield] = ACTIONS(2212),\n    [anon_sym_LBRACK] = ACTIONS(2214),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2214),\n    [anon_sym_LT] = ACTIONS(2212),\n    [anon_sym_SLASH] = ACTIONS(2212),\n    [anon_sym_struct] = ACTIONS(2212),\n    [anon_sym_async] = ACTIONS(2212),\n    [anon_sym_fn] = ACTIONS(2212),\n    [anon_sym_fn_STAR] = ACTIONS(2214),\n    [anon_sym_new] = ACTIONS(2212),\n    [anon_sym_PLUS] = ACTIONS(2212),\n    [anon_sym_DASH] = ACTIONS(2212),\n    [anon_sym_TILDE] = ACTIONS(2214),\n    [anon_sym_void] = ACTIONS(2212),\n    [anon_sym_delete] = ACTIONS(2212),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2214),\n    [anon_sym_DASH_DASH] = ACTIONS(2214),\n    [anon_sym_DQUOTE] = ACTIONS(2214),\n    [anon_sym_SQUOTE] = ACTIONS(2214),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2214),\n    [sym_number] = ACTIONS(2214),\n    [sym_this] = ACTIONS(2212),\n    [sym_super] = ACTIONS(2212),\n    [sym_true] = ACTIONS(2212),\n    [sym_false] = ACTIONS(2212),\n    [sym_null] = ACTIONS(2212),\n    [sym_undefined] = ACTIONS(2212),\n    [anon_sym_AT] = ACTIONS(2214),\n    [anon_sym_static] = ACTIONS(2212),\n    [anon_sym_declare] = ACTIONS(2212),\n    [anon_sym_public] = ACTIONS(2212),\n    [anon_sym_private] = ACTIONS(2212),\n    [anon_sym_protected] = ACTIONS(2212),\n    [anon_sym_override] = ACTIONS(2212),\n    [anon_sym_readonly] = ACTIONS(2212),\n    [anon_sym_module] = ACTIONS(2212),\n    [anon_sym_any] = ACTIONS(2212),\n    [anon_sym_number] = ACTIONS(2212),\n    [anon_sym_int] = ACTIONS(2212),\n    [anon_sym_float] = ACTIONS(2212),\n    [anon_sym_float2] = ACTIONS(2212),\n    [anon_sym_float3] = ACTIONS(2212),\n    [anon_sym_float4] = ACTIONS(2212),\n    [anon_sym_float3x3] = ACTIONS(2212),\n    [anon_sym_float2x2] = ACTIONS(2212),\n    [anon_sym_float4x4] = ACTIONS(2212),\n    [anon_sym_int2] = ACTIONS(2212),\n    [anon_sym_int3] = ACTIONS(2212),\n    [anon_sym_int4] = ACTIONS(2212),\n    [anon_sym_int3x3] = ACTIONS(2212),\n    [anon_sym_int2x2] = ACTIONS(2212),\n    [anon_sym_int4x4] = ACTIONS(2212),\n    [anon_sym_boolean] = ACTIONS(2212),\n    [anon_sym_string] = ACTIONS(2212),\n    [anon_sym_symbol] = ACTIONS(2212),\n    [anon_sym_workgroup] = ACTIONS(2212),\n    [anon_sym_get] = ACTIONS(2212),\n    [anon_sym_set] = ACTIONS(2212),\n    [anon_sym_trait] = ACTIONS(2212),\n    [anon_sym_impl] = ACTIONS(2212),\n    [anon_sym_enum] = ACTIONS(2212),\n    [anon_sym_shader] = ACTIONS(2212),\n  },\n  [670] = {\n    [sym_identifier] = ACTIONS(2216),\n    [anon_sym_pub] = ACTIONS(2216),\n    [anon_sym_export] = ACTIONS(2216),\n    [anon_sym_type] = ACTIONS(2216),\n    [anon_sym_namespace] = ACTIONS(2216),\n    [anon_sym_LBRACE] = ACTIONS(2218),\n    [anon_sym_typeof] = ACTIONS(2216),\n    [anon_sym_import] = ACTIONS(2216),\n    [anon_sym_var] = ACTIONS(2216),\n    [anon_sym_let] = ACTIONS(2216),\n    [anon_sym_const] = ACTIONS(2216),\n    [anon_sym_BANG] = ACTIONS(2218),\n    [anon_sym_if] = ACTIONS(2216),\n    [anon_sym_switch] = ACTIONS(2216),\n    [anon_sym_for] = ACTIONS(2216),\n    [anon_sym_LPAREN] = ACTIONS(2218),\n    [anon_sym_await] = ACTIONS(2216),\n    [anon_sym_while] = ACTIONS(2216),\n    [anon_sym_do] = ACTIONS(2216),\n    [anon_sym_try] = ACTIONS(2216),\n    [anon_sym_with] = ACTIONS(2216),\n    [anon_sym_break] = ACTIONS(2216),\n    [anon_sym_continue] = ACTIONS(2216),\n    [anon_sym_debugger] = ACTIONS(2216),\n    [anon_sym_return] = ACTIONS(2216),\n    [anon_sym_throw] = ACTIONS(2216),\n    [anon_sym_SEMI] = ACTIONS(2218),\n    [anon_sym_yield] = ACTIONS(2216),\n    [anon_sym_LBRACK] = ACTIONS(2218),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2218),\n    [anon_sym_LT] = ACTIONS(2216),\n    [anon_sym_SLASH] = ACTIONS(2216),\n    [anon_sym_struct] = ACTIONS(2216),\n    [anon_sym_async] = ACTIONS(2216),\n    [anon_sym_fn] = ACTIONS(2216),\n    [anon_sym_fn_STAR] = ACTIONS(2218),\n    [anon_sym_new] = ACTIONS(2216),\n    [anon_sym_PLUS] = ACTIONS(2216),\n    [anon_sym_DASH] = ACTIONS(2216),\n    [anon_sym_TILDE] = ACTIONS(2218),\n    [anon_sym_void] = ACTIONS(2216),\n    [anon_sym_delete] = ACTIONS(2216),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2218),\n    [anon_sym_DASH_DASH] = ACTIONS(2218),\n    [anon_sym_DQUOTE] = ACTIONS(2218),\n    [anon_sym_SQUOTE] = ACTIONS(2218),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2218),\n    [sym_number] = ACTIONS(2218),\n    [sym_this] = ACTIONS(2216),\n    [sym_super] = ACTIONS(2216),\n    [sym_true] = ACTIONS(2216),\n    [sym_false] = ACTIONS(2216),\n    [sym_null] = ACTIONS(2216),\n    [sym_undefined] = ACTIONS(2216),\n    [anon_sym_AT] = ACTIONS(2218),\n    [anon_sym_static] = ACTIONS(2216),\n    [anon_sym_declare] = ACTIONS(2216),\n    [anon_sym_public] = ACTIONS(2216),\n    [anon_sym_private] = ACTIONS(2216),\n    [anon_sym_protected] = ACTIONS(2216),\n    [anon_sym_override] = ACTIONS(2216),\n    [anon_sym_readonly] = ACTIONS(2216),\n    [anon_sym_module] = ACTIONS(2216),\n    [anon_sym_any] = ACTIONS(2216),\n    [anon_sym_number] = ACTIONS(2216),\n    [anon_sym_int] = ACTIONS(2216),\n    [anon_sym_float] = ACTIONS(2216),\n    [anon_sym_float2] = ACTIONS(2216),\n    [anon_sym_float3] = ACTIONS(2216),\n    [anon_sym_float4] = ACTIONS(2216),\n    [anon_sym_float3x3] = ACTIONS(2216),\n    [anon_sym_float2x2] = ACTIONS(2216),\n    [anon_sym_float4x4] = ACTIONS(2216),\n    [anon_sym_int2] = ACTIONS(2216),\n    [anon_sym_int3] = ACTIONS(2216),\n    [anon_sym_int4] = ACTIONS(2216),\n    [anon_sym_int3x3] = ACTIONS(2216),\n    [anon_sym_int2x2] = ACTIONS(2216),\n    [anon_sym_int4x4] = ACTIONS(2216),\n    [anon_sym_boolean] = ACTIONS(2216),\n    [anon_sym_string] = ACTIONS(2216),\n    [anon_sym_symbol] = ACTIONS(2216),\n    [anon_sym_workgroup] = ACTIONS(2216),\n    [anon_sym_get] = ACTIONS(2216),\n    [anon_sym_set] = ACTIONS(2216),\n    [anon_sym_trait] = ACTIONS(2216),\n    [anon_sym_impl] = ACTIONS(2216),\n    [anon_sym_enum] = ACTIONS(2216),\n    [anon_sym_shader] = ACTIONS(2216),\n  },\n  [671] = {\n    [sym_identifier] = ACTIONS(2200),\n    [anon_sym_pub] = ACTIONS(2200),\n    [anon_sym_export] = ACTIONS(2200),\n    [anon_sym_type] = ACTIONS(2200),\n    [anon_sym_namespace] = ACTIONS(2200),\n    [anon_sym_LBRACE] = ACTIONS(2202),\n    [anon_sym_typeof] = ACTIONS(2200),\n    [anon_sym_import] = ACTIONS(2200),\n    [anon_sym_var] = ACTIONS(2200),\n    [anon_sym_let] = ACTIONS(2200),\n    [anon_sym_const] = ACTIONS(2200),\n    [anon_sym_BANG] = ACTIONS(2202),\n    [anon_sym_if] = ACTIONS(2200),\n    [anon_sym_switch] = ACTIONS(2200),\n    [anon_sym_for] = ACTIONS(2200),\n    [anon_sym_LPAREN] = ACTIONS(2202),\n    [anon_sym_await] = ACTIONS(2200),\n    [anon_sym_while] = ACTIONS(2200),\n    [anon_sym_do] = ACTIONS(2200),\n    [anon_sym_try] = ACTIONS(2200),\n    [anon_sym_with] = ACTIONS(2200),\n    [anon_sym_break] = ACTIONS(2200),\n    [anon_sym_continue] = ACTIONS(2200),\n    [anon_sym_debugger] = ACTIONS(2200),\n    [anon_sym_return] = ACTIONS(2200),\n    [anon_sym_throw] = ACTIONS(2200),\n    [anon_sym_SEMI] = ACTIONS(2202),\n    [anon_sym_yield] = ACTIONS(2200),\n    [anon_sym_LBRACK] = ACTIONS(2202),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2202),\n    [anon_sym_LT] = ACTIONS(2200),\n    [anon_sym_SLASH] = ACTIONS(2200),\n    [anon_sym_struct] = ACTIONS(2200),\n    [anon_sym_async] = ACTIONS(2200),\n    [anon_sym_fn] = ACTIONS(2200),\n    [anon_sym_fn_STAR] = ACTIONS(2202),\n    [anon_sym_new] = ACTIONS(2200),\n    [anon_sym_PLUS] = ACTIONS(2200),\n    [anon_sym_DASH] = ACTIONS(2200),\n    [anon_sym_TILDE] = ACTIONS(2202),\n    [anon_sym_void] = ACTIONS(2200),\n    [anon_sym_delete] = ACTIONS(2200),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2202),\n    [anon_sym_DASH_DASH] = ACTIONS(2202),\n    [anon_sym_DQUOTE] = ACTIONS(2202),\n    [anon_sym_SQUOTE] = ACTIONS(2202),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2202),\n    [sym_number] = ACTIONS(2202),\n    [sym_this] = ACTIONS(2200),\n    [sym_super] = ACTIONS(2200),\n    [sym_true] = ACTIONS(2200),\n    [sym_false] = ACTIONS(2200),\n    [sym_null] = ACTIONS(2200),\n    [sym_undefined] = ACTIONS(2200),\n    [anon_sym_AT] = ACTIONS(2202),\n    [anon_sym_static] = ACTIONS(2200),\n    [anon_sym_declare] = ACTIONS(2200),\n    [anon_sym_public] = ACTIONS(2200),\n    [anon_sym_private] = ACTIONS(2200),\n    [anon_sym_protected] = ACTIONS(2200),\n    [anon_sym_override] = ACTIONS(2200),\n    [anon_sym_readonly] = ACTIONS(2200),\n    [anon_sym_module] = ACTIONS(2200),\n    [anon_sym_any] = ACTIONS(2200),\n    [anon_sym_number] = ACTIONS(2200),\n    [anon_sym_int] = ACTIONS(2200),\n    [anon_sym_float] = ACTIONS(2200),\n    [anon_sym_float2] = ACTIONS(2200),\n    [anon_sym_float3] = ACTIONS(2200),\n    [anon_sym_float4] = ACTIONS(2200),\n    [anon_sym_float3x3] = ACTIONS(2200),\n    [anon_sym_float2x2] = ACTIONS(2200),\n    [anon_sym_float4x4] = ACTIONS(2200),\n    [anon_sym_int2] = ACTIONS(2200),\n    [anon_sym_int3] = ACTIONS(2200),\n    [anon_sym_int4] = ACTIONS(2200),\n    [anon_sym_int3x3] = ACTIONS(2200),\n    [anon_sym_int2x2] = ACTIONS(2200),\n    [anon_sym_int4x4] = ACTIONS(2200),\n    [anon_sym_boolean] = ACTIONS(2200),\n    [anon_sym_string] = ACTIONS(2200),\n    [anon_sym_symbol] = ACTIONS(2200),\n    [anon_sym_workgroup] = ACTIONS(2200),\n    [anon_sym_get] = ACTIONS(2200),\n    [anon_sym_set] = ACTIONS(2200),\n    [anon_sym_trait] = ACTIONS(2200),\n    [anon_sym_impl] = ACTIONS(2200),\n    [anon_sym_enum] = ACTIONS(2200),\n    [anon_sym_shader] = ACTIONS(2200),\n  },\n  [672] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3121),\n    [sym_optional_tuple_parameter] = STATE(3121),\n    [sym_optional_type] = STATE(3121),\n    [sym_rest_type] = STATE(3121),\n    [sym__tuple_type_member] = STATE(3121),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(2222),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2224),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [673] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3172),\n    [sym_optional_tuple_parameter] = STATE(3172),\n    [sym_optional_type] = STATE(3172),\n    [sym_rest_type] = STATE(3172),\n    [sym__tuple_type_member] = STATE(3172),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(2232),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2234),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [674] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(2990),\n    [sym_optional_tuple_parameter] = STATE(2990),\n    [sym_optional_type] = STATE(2990),\n    [sym_rest_type] = STATE(2990),\n    [sym__tuple_type_member] = STATE(2990),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(2236),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2238),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [675] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3145),\n    [sym_optional_tuple_parameter] = STATE(3145),\n    [sym_optional_type] = STATE(3145),\n    [sym_rest_type] = STATE(3145),\n    [sym__tuple_type_member] = STATE(3145),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(2240),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2242),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [676] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3035),\n    [sym_optional_tuple_parameter] = STATE(3035),\n    [sym_optional_type] = STATE(3035),\n    [sym_rest_type] = STATE(3035),\n    [sym__tuple_type_member] = STATE(3035),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_COMMA] = ACTIONS(2244),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2246),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [677] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2248),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [678] = {\n    [sym_identifier] = ACTIONS(2250),\n    [anon_sym_pub] = ACTIONS(2250),\n    [anon_sym_export] = ACTIONS(2250),\n    [anon_sym_type] = ACTIONS(2250),\n    [anon_sym_EQ] = ACTIONS(2250),\n    [anon_sym_namespace] = ACTIONS(2250),\n    [anon_sym_LBRACE] = ACTIONS(2252),\n    [anon_sym_COMMA] = ACTIONS(2252),\n    [anon_sym_RBRACE] = ACTIONS(2252),\n    [anon_sym_typeof] = ACTIONS(2250),\n    [anon_sym_import] = ACTIONS(2250),\n    [anon_sym_BANG] = ACTIONS(2252),\n    [anon_sym_LPAREN] = ACTIONS(2252),\n    [anon_sym_RPAREN] = ACTIONS(2252),\n    [anon_sym_await] = ACTIONS(2250),\n    [anon_sym_COLON] = ACTIONS(2250),\n    [anon_sym_yield] = ACTIONS(2250),\n    [anon_sym_LBRACK] = ACTIONS(2252),\n    [anon_sym_RBRACK] = ACTIONS(2252),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2252),\n    [anon_sym_LT] = ACTIONS(2250),\n    [anon_sym_GT] = ACTIONS(2252),\n    [anon_sym_SLASH] = ACTIONS(2250),\n    [anon_sym_DOT] = ACTIONS(2250),\n    [anon_sym_struct] = ACTIONS(2250),\n    [anon_sym_async] = ACTIONS(2250),\n    [anon_sym_fn] = ACTIONS(2250),\n    [anon_sym_fn_STAR] = ACTIONS(2252),\n    [anon_sym_EQ_GT] = ACTIONS(2252),\n    [anon_sym_QMARK_DOT] = ACTIONS(2252),\n    [anon_sym_new] = ACTIONS(2250),\n    [anon_sym_COLON_COLON] = ACTIONS(2252),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2252),\n    [anon_sym_AMP] = ACTIONS(2252),\n    [anon_sym_PIPE] = ACTIONS(2252),\n    [anon_sym_PLUS] = ACTIONS(2250),\n    [anon_sym_DASH] = ACTIONS(2250),\n    [anon_sym_TILDE] = ACTIONS(2252),\n    [anon_sym_void] = ACTIONS(2250),\n    [anon_sym_delete] = ACTIONS(2250),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2252),\n    [anon_sym_DASH_DASH] = ACTIONS(2252),\n    [anon_sym_DQUOTE] = ACTIONS(2252),\n    [anon_sym_SQUOTE] = ACTIONS(2252),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2252),\n    [sym_number] = ACTIONS(2252),\n    [sym_this] = ACTIONS(2250),\n    [sym_super] = ACTIONS(2250),\n    [sym_true] = ACTIONS(2250),\n    [sym_false] = ACTIONS(2250),\n    [sym_null] = ACTIONS(2250),\n    [sym_undefined] = ACTIONS(2250),\n    [anon_sym_AT] = ACTIONS(2252),\n    [anon_sym_static] = ACTIONS(2250),\n    [anon_sym_QMARK] = ACTIONS(2250),\n    [anon_sym_declare] = ACTIONS(2250),\n    [anon_sym_public] = ACTIONS(2250),\n    [anon_sym_private] = ACTIONS(2250),\n    [anon_sym_protected] = ACTIONS(2250),\n    [anon_sym_override] = ACTIONS(2250),\n    [anon_sym_readonly] = ACTIONS(2250),\n    [anon_sym_module] = ACTIONS(2250),\n    [anon_sym_any] = ACTIONS(2250),\n    [anon_sym_number] = ACTIONS(2250),\n    [anon_sym_int] = ACTIONS(2250),\n    [anon_sym_float] = ACTIONS(2250),\n    [anon_sym_float2] = ACTIONS(2250),\n    [anon_sym_float3] = ACTIONS(2250),\n    [anon_sym_float4] = ACTIONS(2250),\n    [anon_sym_float3x3] = ACTIONS(2250),\n    [anon_sym_float2x2] = ACTIONS(2250),\n    [anon_sym_float4x4] = ACTIONS(2250),\n    [anon_sym_int2] = ACTIONS(2250),\n    [anon_sym_int3] = ACTIONS(2250),\n    [anon_sym_int4] = ACTIONS(2250),\n    [anon_sym_int3x3] = ACTIONS(2250),\n    [anon_sym_int2x2] = ACTIONS(2250),\n    [anon_sym_int4x4] = ACTIONS(2250),\n    [anon_sym_boolean] = ACTIONS(2250),\n    [anon_sym_string] = ACTIONS(2250),\n    [anon_sym_symbol] = ACTIONS(2250),\n    [anon_sym_workgroup] = ACTIONS(2250),\n    [anon_sym_get] = ACTIONS(2250),\n    [anon_sym_set] = ACTIONS(2250),\n    [anon_sym_extends] = ACTIONS(2250),\n    [anon_sym_shader] = ACTIONS(2250),\n  },\n  [679] = {\n    [sym_identifier] = ACTIONS(2254),\n    [anon_sym_pub] = ACTIONS(2254),\n    [anon_sym_export] = ACTIONS(2254),\n    [anon_sym_type] = ACTIONS(2254),\n    [anon_sym_EQ] = ACTIONS(2254),\n    [anon_sym_namespace] = ACTIONS(2254),\n    [anon_sym_LBRACE] = ACTIONS(2256),\n    [anon_sym_COMMA] = ACTIONS(2256),\n    [anon_sym_RBRACE] = ACTIONS(2256),\n    [anon_sym_typeof] = ACTIONS(2254),\n    [anon_sym_import] = ACTIONS(2254),\n    [anon_sym_BANG] = ACTIONS(2256),\n    [anon_sym_LPAREN] = ACTIONS(2256),\n    [anon_sym_RPAREN] = ACTIONS(2256),\n    [anon_sym_await] = ACTIONS(2254),\n    [anon_sym_COLON] = ACTIONS(2254),\n    [anon_sym_yield] = ACTIONS(2254),\n    [anon_sym_LBRACK] = ACTIONS(2256),\n    [anon_sym_RBRACK] = ACTIONS(2256),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2256),\n    [anon_sym_LT] = ACTIONS(2254),\n    [anon_sym_GT] = ACTIONS(2256),\n    [anon_sym_SLASH] = ACTIONS(2254),\n    [anon_sym_DOT] = ACTIONS(2254),\n    [anon_sym_struct] = ACTIONS(2254),\n    [anon_sym_async] = ACTIONS(2254),\n    [anon_sym_fn] = ACTIONS(2254),\n    [anon_sym_fn_STAR] = ACTIONS(2256),\n    [anon_sym_EQ_GT] = ACTIONS(2256),\n    [anon_sym_QMARK_DOT] = ACTIONS(2256),\n    [anon_sym_new] = ACTIONS(2254),\n    [anon_sym_COLON_COLON] = ACTIONS(2256),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2256),\n    [anon_sym_AMP] = ACTIONS(2256),\n    [anon_sym_PIPE] = ACTIONS(2256),\n    [anon_sym_PLUS] = ACTIONS(2254),\n    [anon_sym_DASH] = ACTIONS(2254),\n    [anon_sym_TILDE] = ACTIONS(2256),\n    [anon_sym_void] = ACTIONS(2254),\n    [anon_sym_delete] = ACTIONS(2254),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2256),\n    [anon_sym_DASH_DASH] = ACTIONS(2256),\n    [anon_sym_DQUOTE] = ACTIONS(2256),\n    [anon_sym_SQUOTE] = ACTIONS(2256),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2256),\n    [sym_number] = ACTIONS(2256),\n    [sym_this] = ACTIONS(2254),\n    [sym_super] = ACTIONS(2254),\n    [sym_true] = ACTIONS(2254),\n    [sym_false] = ACTIONS(2254),\n    [sym_null] = ACTIONS(2254),\n    [sym_undefined] = ACTIONS(2254),\n    [anon_sym_AT] = ACTIONS(2256),\n    [anon_sym_static] = ACTIONS(2254),\n    [anon_sym_QMARK] = ACTIONS(2254),\n    [anon_sym_declare] = ACTIONS(2254),\n    [anon_sym_public] = ACTIONS(2254),\n    [anon_sym_private] = ACTIONS(2254),\n    [anon_sym_protected] = ACTIONS(2254),\n    [anon_sym_override] = ACTIONS(2254),\n    [anon_sym_readonly] = ACTIONS(2254),\n    [anon_sym_module] = ACTIONS(2254),\n    [anon_sym_any] = ACTIONS(2254),\n    [anon_sym_number] = ACTIONS(2254),\n    [anon_sym_int] = ACTIONS(2254),\n    [anon_sym_float] = ACTIONS(2254),\n    [anon_sym_float2] = ACTIONS(2254),\n    [anon_sym_float3] = ACTIONS(2254),\n    [anon_sym_float4] = ACTIONS(2254),\n    [anon_sym_float3x3] = ACTIONS(2254),\n    [anon_sym_float2x2] = ACTIONS(2254),\n    [anon_sym_float4x4] = ACTIONS(2254),\n    [anon_sym_int2] = ACTIONS(2254),\n    [anon_sym_int3] = ACTIONS(2254),\n    [anon_sym_int4] = ACTIONS(2254),\n    [anon_sym_int3x3] = ACTIONS(2254),\n    [anon_sym_int2x2] = ACTIONS(2254),\n    [anon_sym_int4x4] = ACTIONS(2254),\n    [anon_sym_boolean] = ACTIONS(2254),\n    [anon_sym_string] = ACTIONS(2254),\n    [anon_sym_symbol] = ACTIONS(2254),\n    [anon_sym_workgroup] = ACTIONS(2254),\n    [anon_sym_get] = ACTIONS(2254),\n    [anon_sym_set] = ACTIONS(2254),\n    [anon_sym_extends] = ACTIONS(2254),\n    [anon_sym_shader] = ACTIONS(2254),\n  },\n  [680] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2258),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [681] = {\n    [sym_identifier] = ACTIONS(2260),\n    [anon_sym_pub] = ACTIONS(2260),\n    [anon_sym_export] = ACTIONS(2260),\n    [anon_sym_type] = ACTIONS(2260),\n    [anon_sym_EQ] = ACTIONS(2260),\n    [anon_sym_namespace] = ACTIONS(2260),\n    [anon_sym_LBRACE] = ACTIONS(2262),\n    [anon_sym_COMMA] = ACTIONS(2262),\n    [anon_sym_RBRACE] = ACTIONS(2262),\n    [anon_sym_typeof] = ACTIONS(2260),\n    [anon_sym_import] = ACTIONS(2260),\n    [anon_sym_BANG] = ACTIONS(2262),\n    [anon_sym_LPAREN] = ACTIONS(2262),\n    [anon_sym_RPAREN] = ACTIONS(2262),\n    [anon_sym_await] = ACTIONS(2260),\n    [anon_sym_COLON] = ACTIONS(2260),\n    [anon_sym_yield] = ACTIONS(2260),\n    [anon_sym_LBRACK] = ACTIONS(2262),\n    [anon_sym_RBRACK] = ACTIONS(2262),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2262),\n    [anon_sym_LT] = ACTIONS(2260),\n    [anon_sym_GT] = ACTIONS(2262),\n    [anon_sym_SLASH] = ACTIONS(2260),\n    [anon_sym_DOT] = ACTIONS(2260),\n    [anon_sym_struct] = ACTIONS(2260),\n    [anon_sym_async] = ACTIONS(2260),\n    [anon_sym_fn] = ACTIONS(2260),\n    [anon_sym_fn_STAR] = ACTIONS(2262),\n    [anon_sym_EQ_GT] = ACTIONS(2262),\n    [anon_sym_QMARK_DOT] = ACTIONS(2262),\n    [anon_sym_new] = ACTIONS(2260),\n    [anon_sym_COLON_COLON] = ACTIONS(2262),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2262),\n    [anon_sym_AMP] = ACTIONS(2262),\n    [anon_sym_PIPE] = ACTIONS(2262),\n    [anon_sym_PLUS] = ACTIONS(2260),\n    [anon_sym_DASH] = ACTIONS(2260),\n    [anon_sym_TILDE] = ACTIONS(2262),\n    [anon_sym_void] = ACTIONS(2260),\n    [anon_sym_delete] = ACTIONS(2260),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2262),\n    [anon_sym_DASH_DASH] = ACTIONS(2262),\n    [anon_sym_DQUOTE] = ACTIONS(2262),\n    [anon_sym_SQUOTE] = ACTIONS(2262),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2262),\n    [sym_number] = ACTIONS(2262),\n    [sym_this] = ACTIONS(2260),\n    [sym_super] = ACTIONS(2260),\n    [sym_true] = ACTIONS(2260),\n    [sym_false] = ACTIONS(2260),\n    [sym_null] = ACTIONS(2260),\n    [sym_undefined] = ACTIONS(2260),\n    [anon_sym_AT] = ACTIONS(2262),\n    [anon_sym_static] = ACTIONS(2260),\n    [anon_sym_QMARK] = ACTIONS(2260),\n    [anon_sym_declare] = ACTIONS(2260),\n    [anon_sym_public] = ACTIONS(2260),\n    [anon_sym_private] = ACTIONS(2260),\n    [anon_sym_protected] = ACTIONS(2260),\n    [anon_sym_override] = ACTIONS(2260),\n    [anon_sym_readonly] = ACTIONS(2260),\n    [anon_sym_module] = ACTIONS(2260),\n    [anon_sym_any] = ACTIONS(2260),\n    [anon_sym_number] = ACTIONS(2260),\n    [anon_sym_int] = ACTIONS(2260),\n    [anon_sym_float] = ACTIONS(2260),\n    [anon_sym_float2] = ACTIONS(2260),\n    [anon_sym_float3] = ACTIONS(2260),\n    [anon_sym_float4] = ACTIONS(2260),\n    [anon_sym_float3x3] = ACTIONS(2260),\n    [anon_sym_float2x2] = ACTIONS(2260),\n    [anon_sym_float4x4] = ACTIONS(2260),\n    [anon_sym_int2] = ACTIONS(2260),\n    [anon_sym_int3] = ACTIONS(2260),\n    [anon_sym_int4] = ACTIONS(2260),\n    [anon_sym_int3x3] = ACTIONS(2260),\n    [anon_sym_int2x2] = ACTIONS(2260),\n    [anon_sym_int4x4] = ACTIONS(2260),\n    [anon_sym_boolean] = ACTIONS(2260),\n    [anon_sym_string] = ACTIONS(2260),\n    [anon_sym_symbol] = ACTIONS(2260),\n    [anon_sym_workgroup] = ACTIONS(2260),\n    [anon_sym_get] = ACTIONS(2260),\n    [anon_sym_set] = ACTIONS(2260),\n    [anon_sym_extends] = ACTIONS(2260),\n    [anon_sym_shader] = ACTIONS(2260),\n  },\n  [682] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [683] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2266),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [684] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2268),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [685] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2270),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [686] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2272),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [687] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2274),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [688] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2276),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [689] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2278),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [690] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_rest_pattern] = STATE(3228),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2630),\n    [sym_tuple_parameter] = STATE(3362),\n    [sym_optional_tuple_parameter] = STATE(3362),\n    [sym_optional_type] = STATE(3362),\n    [sym_rest_type] = STATE(3362),\n    [sym__tuple_type_member] = STATE(3362),\n    [sym_constructor_type] = STATE(2630),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2630),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2630),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2630),\n    [sym_identifier] = ACTIONS(2220),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2228),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [691] = {\n    [sym_identifier] = ACTIONS(2280),\n    [anon_sym_pub] = ACTIONS(2280),\n    [anon_sym_export] = ACTIONS(2280),\n    [anon_sym_type] = ACTIONS(2280),\n    [anon_sym_EQ] = ACTIONS(2280),\n    [anon_sym_namespace] = ACTIONS(2280),\n    [anon_sym_LBRACE] = ACTIONS(2282),\n    [anon_sym_COMMA] = ACTIONS(2282),\n    [anon_sym_RBRACE] = ACTIONS(2282),\n    [anon_sym_typeof] = ACTIONS(2280),\n    [anon_sym_import] = ACTIONS(2280),\n    [anon_sym_BANG] = ACTIONS(2282),\n    [anon_sym_for] = ACTIONS(2280),\n    [anon_sym_LPAREN] = ACTIONS(2282),\n    [anon_sym_RPAREN] = ACTIONS(2282),\n    [anon_sym_await] = ACTIONS(2280),\n    [anon_sym_COLON] = ACTIONS(2282),\n    [anon_sym_yield] = ACTIONS(2280),\n    [anon_sym_LBRACK] = ACTIONS(2282),\n    [anon_sym_RBRACK] = ACTIONS(2282),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2282),\n    [anon_sym_LT] = ACTIONS(2280),\n    [anon_sym_GT] = ACTIONS(2282),\n    [anon_sym_SLASH] = ACTIONS(2280),\n    [anon_sym_struct] = ACTIONS(2280),\n    [anon_sym_async] = ACTIONS(2280),\n    [anon_sym_fn] = ACTIONS(2280),\n    [anon_sym_fn_STAR] = ACTIONS(2282),\n    [anon_sym_EQ_GT] = ACTIONS(2282),\n    [anon_sym_new] = ACTIONS(2280),\n    [anon_sym_AMP] = ACTIONS(2282),\n    [anon_sym_PIPE] = ACTIONS(2282),\n    [anon_sym_PLUS] = ACTIONS(2280),\n    [anon_sym_DASH] = ACTIONS(2280),\n    [anon_sym_TILDE] = ACTIONS(2282),\n    [anon_sym_void] = ACTIONS(2280),\n    [anon_sym_delete] = ACTIONS(2280),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2282),\n    [anon_sym_DASH_DASH] = ACTIONS(2282),\n    [anon_sym_DQUOTE] = ACTIONS(2282),\n    [anon_sym_SQUOTE] = ACTIONS(2282),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2282),\n    [sym_number] = ACTIONS(2282),\n    [sym_this] = ACTIONS(2280),\n    [sym_super] = ACTIONS(2280),\n    [sym_true] = ACTIONS(2280),\n    [sym_false] = ACTIONS(2280),\n    [sym_null] = ACTIONS(2280),\n    [sym_undefined] = ACTIONS(2280),\n    [anon_sym_static] = ACTIONS(2280),\n    [anon_sym_QMARK] = ACTIONS(2282),\n    [anon_sym_declare] = ACTIONS(2280),\n    [anon_sym_public] = ACTIONS(2280),\n    [anon_sym_private] = ACTIONS(2280),\n    [anon_sym_protected] = ACTIONS(2280),\n    [anon_sym_override] = ACTIONS(2280),\n    [anon_sym_readonly] = ACTIONS(2280),\n    [anon_sym_module] = ACTIONS(2280),\n    [anon_sym_any] = ACTIONS(2280),\n    [anon_sym_number] = ACTIONS(2280),\n    [anon_sym_int] = ACTIONS(2280),\n    [anon_sym_float] = ACTIONS(2280),\n    [anon_sym_float2] = ACTIONS(2280),\n    [anon_sym_float3] = ACTIONS(2280),\n    [anon_sym_float4] = ACTIONS(2280),\n    [anon_sym_float3x3] = ACTIONS(2280),\n    [anon_sym_float2x2] = ACTIONS(2280),\n    [anon_sym_float4x4] = ACTIONS(2280),\n    [anon_sym_int2] = ACTIONS(2280),\n    [anon_sym_int3] = ACTIONS(2280),\n    [anon_sym_int4] = ACTIONS(2280),\n    [anon_sym_int3x3] = ACTIONS(2280),\n    [anon_sym_int2x2] = ACTIONS(2280),\n    [anon_sym_int4x4] = ACTIONS(2280),\n    [anon_sym_boolean] = ACTIONS(2280),\n    [anon_sym_string] = ACTIONS(2280),\n    [anon_sym_symbol] = ACTIONS(2280),\n    [anon_sym_workgroup] = ACTIONS(2280),\n    [anon_sym_get] = ACTIONS(2280),\n    [anon_sym_set] = ACTIONS(2280),\n    [anon_sym_extends] = ACTIONS(2280),\n    [anon_sym_shader] = ACTIONS(2280),\n  },\n  [692] = {\n    [sym_identifier] = ACTIONS(2284),\n    [anon_sym_pub] = ACTIONS(2284),\n    [anon_sym_export] = ACTIONS(2284),\n    [anon_sym_type] = ACTIONS(2284),\n    [anon_sym_EQ] = ACTIONS(2284),\n    [anon_sym_namespace] = ACTIONS(2284),\n    [anon_sym_LBRACE] = ACTIONS(2286),\n    [anon_sym_COMMA] = ACTIONS(2286),\n    [anon_sym_RBRACE] = ACTIONS(2286),\n    [anon_sym_typeof] = ACTIONS(2284),\n    [anon_sym_import] = ACTIONS(2284),\n    [anon_sym_BANG] = ACTIONS(2286),\n    [anon_sym_for] = ACTIONS(2284),\n    [anon_sym_LPAREN] = ACTIONS(2286),\n    [anon_sym_RPAREN] = ACTIONS(2286),\n    [anon_sym_await] = ACTIONS(2284),\n    [anon_sym_COLON] = ACTIONS(2286),\n    [anon_sym_yield] = ACTIONS(2284),\n    [anon_sym_LBRACK] = ACTIONS(2286),\n    [anon_sym_RBRACK] = ACTIONS(2286),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2286),\n    [anon_sym_LT] = ACTIONS(2284),\n    [anon_sym_GT] = ACTIONS(2286),\n    [anon_sym_SLASH] = ACTIONS(2284),\n    [anon_sym_struct] = ACTIONS(2284),\n    [anon_sym_async] = ACTIONS(2284),\n    [anon_sym_fn] = ACTIONS(2284),\n    [anon_sym_fn_STAR] = ACTIONS(2286),\n    [anon_sym_EQ_GT] = ACTIONS(2286),\n    [anon_sym_new] = ACTIONS(2284),\n    [anon_sym_AMP] = ACTIONS(2286),\n    [anon_sym_PIPE] = ACTIONS(2286),\n    [anon_sym_PLUS] = ACTIONS(2284),\n    [anon_sym_DASH] = ACTIONS(2284),\n    [anon_sym_TILDE] = ACTIONS(2286),\n    [anon_sym_void] = ACTIONS(2284),\n    [anon_sym_delete] = ACTIONS(2284),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2286),\n    [anon_sym_DASH_DASH] = ACTIONS(2286),\n    [anon_sym_DQUOTE] = ACTIONS(2286),\n    [anon_sym_SQUOTE] = ACTIONS(2286),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2286),\n    [sym_number] = ACTIONS(2286),\n    [sym_this] = ACTIONS(2284),\n    [sym_super] = ACTIONS(2284),\n    [sym_true] = ACTIONS(2284),\n    [sym_false] = ACTIONS(2284),\n    [sym_null] = ACTIONS(2284),\n    [sym_undefined] = ACTIONS(2284),\n    [anon_sym_static] = ACTIONS(2284),\n    [anon_sym_QMARK] = ACTIONS(2286),\n    [anon_sym_declare] = ACTIONS(2284),\n    [anon_sym_public] = ACTIONS(2284),\n    [anon_sym_private] = ACTIONS(2284),\n    [anon_sym_protected] = ACTIONS(2284),\n    [anon_sym_override] = ACTIONS(2284),\n    [anon_sym_readonly] = ACTIONS(2284),\n    [anon_sym_module] = ACTIONS(2284),\n    [anon_sym_any] = ACTIONS(2284),\n    [anon_sym_number] = ACTIONS(2284),\n    [anon_sym_int] = ACTIONS(2284),\n    [anon_sym_float] = ACTIONS(2284),\n    [anon_sym_float2] = ACTIONS(2284),\n    [anon_sym_float3] = ACTIONS(2284),\n    [anon_sym_float4] = ACTIONS(2284),\n    [anon_sym_float3x3] = ACTIONS(2284),\n    [anon_sym_float2x2] = ACTIONS(2284),\n    [anon_sym_float4x4] = ACTIONS(2284),\n    [anon_sym_int2] = ACTIONS(2284),\n    [anon_sym_int3] = ACTIONS(2284),\n    [anon_sym_int4] = ACTIONS(2284),\n    [anon_sym_int3x3] = ACTIONS(2284),\n    [anon_sym_int2x2] = ACTIONS(2284),\n    [anon_sym_int4x4] = ACTIONS(2284),\n    [anon_sym_boolean] = ACTIONS(2284),\n    [anon_sym_string] = ACTIONS(2284),\n    [anon_sym_symbol] = ACTIONS(2284),\n    [anon_sym_workgroup] = ACTIONS(2284),\n    [anon_sym_get] = ACTIONS(2284),\n    [anon_sym_set] = ACTIONS(2284),\n    [anon_sym_extends] = ACTIONS(2284),\n    [anon_sym_shader] = ACTIONS(2284),\n  },\n  [693] = {\n    [sym_identifier] = ACTIONS(2288),\n    [anon_sym_pub] = ACTIONS(2288),\n    [anon_sym_export] = ACTIONS(2288),\n    [anon_sym_type] = ACTIONS(2288),\n    [anon_sym_EQ] = ACTIONS(2288),\n    [anon_sym_namespace] = ACTIONS(2288),\n    [anon_sym_LBRACE] = ACTIONS(2290),\n    [anon_sym_COMMA] = ACTIONS(2290),\n    [anon_sym_RBRACE] = ACTIONS(2290),\n    [anon_sym_typeof] = ACTIONS(2288),\n    [anon_sym_import] = ACTIONS(2288),\n    [anon_sym_BANG] = ACTIONS(2290),\n    [anon_sym_for] = ACTIONS(2288),\n    [anon_sym_LPAREN] = ACTIONS(2290),\n    [anon_sym_RPAREN] = ACTIONS(2290),\n    [anon_sym_await] = ACTIONS(2288),\n    [anon_sym_COLON] = ACTIONS(2290),\n    [anon_sym_yield] = ACTIONS(2288),\n    [anon_sym_LBRACK] = ACTIONS(2290),\n    [anon_sym_RBRACK] = ACTIONS(2290),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2290),\n    [anon_sym_LT] = ACTIONS(2288),\n    [anon_sym_GT] = ACTIONS(2290),\n    [anon_sym_SLASH] = ACTIONS(2288),\n    [anon_sym_struct] = ACTIONS(2288),\n    [anon_sym_async] = ACTIONS(2288),\n    [anon_sym_fn] = ACTIONS(2288),\n    [anon_sym_fn_STAR] = ACTIONS(2290),\n    [anon_sym_EQ_GT] = ACTIONS(2290),\n    [anon_sym_new] = ACTIONS(2288),\n    [anon_sym_AMP] = ACTIONS(2290),\n    [anon_sym_PIPE] = ACTIONS(2290),\n    [anon_sym_PLUS] = ACTIONS(2288),\n    [anon_sym_DASH] = ACTIONS(2288),\n    [anon_sym_TILDE] = ACTIONS(2290),\n    [anon_sym_void] = ACTIONS(2288),\n    [anon_sym_delete] = ACTIONS(2288),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2290),\n    [anon_sym_DASH_DASH] = ACTIONS(2290),\n    [anon_sym_DQUOTE] = ACTIONS(2290),\n    [anon_sym_SQUOTE] = ACTIONS(2290),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2290),\n    [sym_number] = ACTIONS(2290),\n    [sym_this] = ACTIONS(2288),\n    [sym_super] = ACTIONS(2288),\n    [sym_true] = ACTIONS(2288),\n    [sym_false] = ACTIONS(2288),\n    [sym_null] = ACTIONS(2288),\n    [sym_undefined] = ACTIONS(2288),\n    [anon_sym_static] = ACTIONS(2288),\n    [anon_sym_QMARK] = ACTIONS(2290),\n    [anon_sym_declare] = ACTIONS(2288),\n    [anon_sym_public] = ACTIONS(2288),\n    [anon_sym_private] = ACTIONS(2288),\n    [anon_sym_protected] = ACTIONS(2288),\n    [anon_sym_override] = ACTIONS(2288),\n    [anon_sym_readonly] = ACTIONS(2288),\n    [anon_sym_module] = ACTIONS(2288),\n    [anon_sym_any] = ACTIONS(2288),\n    [anon_sym_number] = ACTIONS(2288),\n    [anon_sym_int] = ACTIONS(2288),\n    [anon_sym_float] = ACTIONS(2288),\n    [anon_sym_float2] = ACTIONS(2288),\n    [anon_sym_float3] = ACTIONS(2288),\n    [anon_sym_float4] = ACTIONS(2288),\n    [anon_sym_float3x3] = ACTIONS(2288),\n    [anon_sym_float2x2] = ACTIONS(2288),\n    [anon_sym_float4x4] = ACTIONS(2288),\n    [anon_sym_int2] = ACTIONS(2288),\n    [anon_sym_int3] = ACTIONS(2288),\n    [anon_sym_int4] = ACTIONS(2288),\n    [anon_sym_int3x3] = ACTIONS(2288),\n    [anon_sym_int2x2] = ACTIONS(2288),\n    [anon_sym_int4x4] = ACTIONS(2288),\n    [anon_sym_boolean] = ACTIONS(2288),\n    [anon_sym_string] = ACTIONS(2288),\n    [anon_sym_symbol] = ACTIONS(2288),\n    [anon_sym_workgroup] = ACTIONS(2288),\n    [anon_sym_get] = ACTIONS(2288),\n    [anon_sym_set] = ACTIONS(2288),\n    [anon_sym_extends] = ACTIONS(2288),\n    [anon_sym_shader] = ACTIONS(2288),\n  },\n  [694] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_type_parameter] = STATE(2983),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(2292),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [695] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2294),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [696] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2539),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2539),\n    [sym_property_signature] = STATE(2539),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2539),\n    [sym_index_signature] = STATE(2539),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2296),\n    [anon_sym_pub] = ACTIONS(2298),\n    [anon_sym_export] = ACTIONS(2296),\n    [anon_sym_type] = ACTIONS(2296),\n    [anon_sym_namespace] = ACTIONS(2296),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2302),\n    [anon_sym_RBRACE] = ACTIONS(2304),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2308),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2296),\n    [anon_sym_async] = ACTIONS(2296),\n    [anon_sym_fn] = ACTIONS(2312),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2320),\n    [anon_sym_declare] = ACTIONS(2296),\n    [anon_sym_public] = ACTIONS(2296),\n    [anon_sym_private] = ACTIONS(2296),\n    [anon_sym_protected] = ACTIONS(2296),\n    [anon_sym_override] = ACTIONS(2322),\n    [anon_sym_readonly] = ACTIONS(2324),\n    [anon_sym_module] = ACTIONS(2296),\n    [anon_sym_any] = ACTIONS(2296),\n    [anon_sym_number] = ACTIONS(2296),\n    [anon_sym_int] = ACTIONS(2296),\n    [anon_sym_float] = ACTIONS(2296),\n    [anon_sym_float2] = ACTIONS(2296),\n    [anon_sym_float3] = ACTIONS(2296),\n    [anon_sym_float4] = ACTIONS(2296),\n    [anon_sym_float3x3] = ACTIONS(2296),\n    [anon_sym_float2x2] = ACTIONS(2296),\n    [anon_sym_float4x4] = ACTIONS(2296),\n    [anon_sym_int2] = ACTIONS(2296),\n    [anon_sym_int3] = ACTIONS(2296),\n    [anon_sym_int4] = ACTIONS(2296),\n    [anon_sym_int3x3] = ACTIONS(2296),\n    [anon_sym_int2x2] = ACTIONS(2296),\n    [anon_sym_int4x4] = ACTIONS(2296),\n    [anon_sym_boolean] = ACTIONS(2296),\n    [anon_sym_string] = ACTIONS(2296),\n    [anon_sym_symbol] = ACTIONS(2296),\n    [anon_sym_workgroup] = ACTIONS(2296),\n    [anon_sym_get] = ACTIONS(2296),\n    [anon_sym_set] = ACTIONS(2296),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2328),\n  },\n  [697] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2330),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [698] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1765),\n    [sym_constructor_type] = STATE(1765),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1765),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_predicate] = STATE(1766),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1493),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1765),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1765),\n    [sym_identifier] = ACTIONS(2332),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2358),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [699] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2374),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [700] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2376),\n    [anon_sym_pub] = ACTIONS(2378),\n    [anon_sym_export] = ACTIONS(2376),\n    [anon_sym_type] = ACTIONS(2376),\n    [anon_sym_namespace] = ACTIONS(2376),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2382),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2376),\n    [anon_sym_async] = ACTIONS(2376),\n    [anon_sym_fn] = ACTIONS(2386),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2388),\n    [anon_sym_declare] = ACTIONS(2376),\n    [anon_sym_public] = ACTIONS(2376),\n    [anon_sym_private] = ACTIONS(2376),\n    [anon_sym_protected] = ACTIONS(2376),\n    [anon_sym_override] = ACTIONS(2390),\n    [anon_sym_readonly] = ACTIONS(2392),\n    [anon_sym_module] = ACTIONS(2376),\n    [anon_sym_any] = ACTIONS(2376),\n    [anon_sym_number] = ACTIONS(2376),\n    [anon_sym_int] = ACTIONS(2376),\n    [anon_sym_float] = ACTIONS(2376),\n    [anon_sym_float2] = ACTIONS(2376),\n    [anon_sym_float3] = ACTIONS(2376),\n    [anon_sym_float4] = ACTIONS(2376),\n    [anon_sym_float3x3] = ACTIONS(2376),\n    [anon_sym_float2x2] = ACTIONS(2376),\n    [anon_sym_float4x4] = ACTIONS(2376),\n    [anon_sym_int2] = ACTIONS(2376),\n    [anon_sym_int3] = ACTIONS(2376),\n    [anon_sym_int4] = ACTIONS(2376),\n    [anon_sym_int3x3] = ACTIONS(2376),\n    [anon_sym_int2x2] = ACTIONS(2376),\n    [anon_sym_int4x4] = ACTIONS(2376),\n    [anon_sym_boolean] = ACTIONS(2376),\n    [anon_sym_string] = ACTIONS(2376),\n    [anon_sym_symbol] = ACTIONS(2376),\n    [anon_sym_workgroup] = ACTIONS(2376),\n    [anon_sym_get] = ACTIONS(2376),\n    [anon_sym_set] = ACTIONS(2376),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [701] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2396),\n    [anon_sym_pub] = ACTIONS(2398),\n    [anon_sym_export] = ACTIONS(2396),\n    [anon_sym_type] = ACTIONS(2396),\n    [anon_sym_namespace] = ACTIONS(2396),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2400),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2396),\n    [anon_sym_async] = ACTIONS(2396),\n    [anon_sym_fn] = ACTIONS(2402),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2404),\n    [anon_sym_declare] = ACTIONS(2396),\n    [anon_sym_public] = ACTIONS(2396),\n    [anon_sym_private] = ACTIONS(2396),\n    [anon_sym_protected] = ACTIONS(2396),\n    [anon_sym_override] = ACTIONS(2406),\n    [anon_sym_readonly] = ACTIONS(2408),\n    [anon_sym_module] = ACTIONS(2396),\n    [anon_sym_any] = ACTIONS(2396),\n    [anon_sym_number] = ACTIONS(2396),\n    [anon_sym_int] = ACTIONS(2396),\n    [anon_sym_float] = ACTIONS(2396),\n    [anon_sym_float2] = ACTIONS(2396),\n    [anon_sym_float3] = ACTIONS(2396),\n    [anon_sym_float4] = ACTIONS(2396),\n    [anon_sym_float3x3] = ACTIONS(2396),\n    [anon_sym_float2x2] = ACTIONS(2396),\n    [anon_sym_float4x4] = ACTIONS(2396),\n    [anon_sym_int2] = ACTIONS(2396),\n    [anon_sym_int3] = ACTIONS(2396),\n    [anon_sym_int4] = ACTIONS(2396),\n    [anon_sym_int3x3] = ACTIONS(2396),\n    [anon_sym_int2x2] = ACTIONS(2396),\n    [anon_sym_int4x4] = ACTIONS(2396),\n    [anon_sym_boolean] = ACTIONS(2396),\n    [anon_sym_string] = ACTIONS(2396),\n    [anon_sym_symbol] = ACTIONS(2396),\n    [anon_sym_workgroup] = ACTIONS(2396),\n    [anon_sym_get] = ACTIONS(2396),\n    [anon_sym_set] = ACTIONS(2396),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [702] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2376),\n    [anon_sym_pub] = ACTIONS(2378),\n    [anon_sym_export] = ACTIONS(2376),\n    [anon_sym_type] = ACTIONS(2376),\n    [anon_sym_namespace] = ACTIONS(2376),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2410),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2376),\n    [anon_sym_async] = ACTIONS(2376),\n    [anon_sym_fn] = ACTIONS(2386),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2388),\n    [anon_sym_declare] = ACTIONS(2376),\n    [anon_sym_public] = ACTIONS(2376),\n    [anon_sym_private] = ACTIONS(2376),\n    [anon_sym_protected] = ACTIONS(2376),\n    [anon_sym_override] = ACTIONS(2390),\n    [anon_sym_readonly] = ACTIONS(2392),\n    [anon_sym_module] = ACTIONS(2376),\n    [anon_sym_any] = ACTIONS(2376),\n    [anon_sym_number] = ACTIONS(2376),\n    [anon_sym_int] = ACTIONS(2376),\n    [anon_sym_float] = ACTIONS(2376),\n    [anon_sym_float2] = ACTIONS(2376),\n    [anon_sym_float3] = ACTIONS(2376),\n    [anon_sym_float4] = ACTIONS(2376),\n    [anon_sym_float3x3] = ACTIONS(2376),\n    [anon_sym_float2x2] = ACTIONS(2376),\n    [anon_sym_float4x4] = ACTIONS(2376),\n    [anon_sym_int2] = ACTIONS(2376),\n    [anon_sym_int3] = ACTIONS(2376),\n    [anon_sym_int4] = ACTIONS(2376),\n    [anon_sym_int3x3] = ACTIONS(2376),\n    [anon_sym_int2x2] = ACTIONS(2376),\n    [anon_sym_int4x4] = ACTIONS(2376),\n    [anon_sym_boolean] = ACTIONS(2376),\n    [anon_sym_string] = ACTIONS(2376),\n    [anon_sym_symbol] = ACTIONS(2376),\n    [anon_sym_workgroup] = ACTIONS(2376),\n    [anon_sym_get] = ACTIONS(2376),\n    [anon_sym_set] = ACTIONS(2376),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [703] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2376),\n    [sym_constructor_type] = STATE(2376),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2376),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_predicate] = STATE(2282),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2209),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2376),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2376),\n    [sym_identifier] = ACTIONS(2412),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(2416),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [704] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1818),\n    [sym_constructor_type] = STATE(1818),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1818),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_predicate] = STATE(1819),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1493),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1818),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1818),\n    [sym_identifier] = ACTIONS(2332),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2358),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [705] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2345),\n    [sym_constructor_type] = STATE(2345),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2345),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_predicate] = STATE(2289),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2209),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2345),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2345),\n    [sym_identifier] = ACTIONS(2412),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(2416),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [706] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2854),\n    [sym_constructor_type] = STATE(2854),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2854),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2854),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2854),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2418),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [707] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2195),\n    [sym_constructor_type] = STATE(2195),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2195),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_predicate] = STATE(2163),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2149),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2195),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2195),\n    [sym_identifier] = ACTIONS(2420),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(2422),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [708] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2424),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [709] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2426),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [710] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2428),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [711] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2620),\n    [sym_constructor_type] = STATE(2620),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2620),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_predicate] = STATE(2163),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2491),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2620),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2620),\n    [sym_identifier] = ACTIONS(2430),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(2440),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [712] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2450),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [713] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2875),\n    [sym_constructor_type] = STATE(2875),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2875),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2875),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2875),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2452),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [714] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3005),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3005),\n    [sym_pair] = STATE(3005),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3004),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2454),\n    [anon_sym_pub] = ACTIONS(2456),\n    [anon_sym_export] = ACTIONS(2454),\n    [anon_sym_type] = ACTIONS(2454),\n    [anon_sym_namespace] = ACTIONS(2454),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2458),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2454),\n    [anon_sym_async] = ACTIONS(2454),\n    [anon_sym_fn] = ACTIONS(2460),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2462),\n    [anon_sym_declare] = ACTIONS(2454),\n    [anon_sym_public] = ACTIONS(2454),\n    [anon_sym_private] = ACTIONS(2454),\n    [anon_sym_protected] = ACTIONS(2454),\n    [anon_sym_override] = ACTIONS(2464),\n    [anon_sym_readonly] = ACTIONS(2466),\n    [anon_sym_module] = ACTIONS(2454),\n    [anon_sym_any] = ACTIONS(2454),\n    [anon_sym_number] = ACTIONS(2454),\n    [anon_sym_int] = ACTIONS(2454),\n    [anon_sym_float] = ACTIONS(2454),\n    [anon_sym_float2] = ACTIONS(2454),\n    [anon_sym_float3] = ACTIONS(2454),\n    [anon_sym_float4] = ACTIONS(2454),\n    [anon_sym_float3x3] = ACTIONS(2454),\n    [anon_sym_float2x2] = ACTIONS(2454),\n    [anon_sym_float4x4] = ACTIONS(2454),\n    [anon_sym_int2] = ACTIONS(2454),\n    [anon_sym_int3] = ACTIONS(2454),\n    [anon_sym_int4] = ACTIONS(2454),\n    [anon_sym_int3x3] = ACTIONS(2454),\n    [anon_sym_int2x2] = ACTIONS(2454),\n    [anon_sym_int4x4] = ACTIONS(2454),\n    [anon_sym_boolean] = ACTIONS(2454),\n    [anon_sym_string] = ACTIONS(2454),\n    [anon_sym_symbol] = ACTIONS(2454),\n    [anon_sym_workgroup] = ACTIONS(2454),\n    [anon_sym_get] = ACTIONS(2454),\n    [anon_sym_set] = ACTIONS(2454),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [715] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2193),\n    [sym_constructor_type] = STATE(2193),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2193),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_predicate] = STATE(2190),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2149),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2193),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2193),\n    [sym_identifier] = ACTIONS(2420),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(2422),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [716] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2211),\n    [sym_constructor_type] = STATE(2211),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2211),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_predicate] = STATE(2282),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2209),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2211),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2211),\n    [sym_identifier] = ACTIONS(2412),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(2416),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [717] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2468),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [718] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2470),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [719] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2367),\n    [sym_constructor_type] = STATE(2367),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2367),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_predicate] = STATE(2190),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2149),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2367),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2367),\n    [sym_identifier] = ACTIONS(2420),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(2422),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [720] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2280),\n    [sym_constructor_type] = STATE(2280),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2280),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_predicate] = STATE(2289),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2209),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2280),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2280),\n    [sym_identifier] = ACTIONS(2412),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(2416),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [721] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2396),\n    [anon_sym_pub] = ACTIONS(2398),\n    [anon_sym_export] = ACTIONS(2396),\n    [anon_sym_type] = ACTIONS(2396),\n    [anon_sym_namespace] = ACTIONS(2396),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2472),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2396),\n    [anon_sym_async] = ACTIONS(2396),\n    [anon_sym_fn] = ACTIONS(2402),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2404),\n    [anon_sym_declare] = ACTIONS(2396),\n    [anon_sym_public] = ACTIONS(2396),\n    [anon_sym_private] = ACTIONS(2396),\n    [anon_sym_protected] = ACTIONS(2396),\n    [anon_sym_override] = ACTIONS(2406),\n    [anon_sym_readonly] = ACTIONS(2408),\n    [anon_sym_module] = ACTIONS(2396),\n    [anon_sym_any] = ACTIONS(2396),\n    [anon_sym_number] = ACTIONS(2396),\n    [anon_sym_int] = ACTIONS(2396),\n    [anon_sym_float] = ACTIONS(2396),\n    [anon_sym_float2] = ACTIONS(2396),\n    [anon_sym_float3] = ACTIONS(2396),\n    [anon_sym_float4] = ACTIONS(2396),\n    [anon_sym_float3x3] = ACTIONS(2396),\n    [anon_sym_float2x2] = ACTIONS(2396),\n    [anon_sym_float4x4] = ACTIONS(2396),\n    [anon_sym_int2] = ACTIONS(2396),\n    [anon_sym_int3] = ACTIONS(2396),\n    [anon_sym_int4] = ACTIONS(2396),\n    [anon_sym_int3x3] = ACTIONS(2396),\n    [anon_sym_int2x2] = ACTIONS(2396),\n    [anon_sym_int4x4] = ACTIONS(2396),\n    [anon_sym_boolean] = ACTIONS(2396),\n    [anon_sym_string] = ACTIONS(2396),\n    [anon_sym_symbol] = ACTIONS(2396),\n    [anon_sym_workgroup] = ACTIONS(2396),\n    [anon_sym_get] = ACTIONS(2396),\n    [anon_sym_set] = ACTIONS(2396),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [722] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2896),\n    [sym_constructor_type] = STATE(2896),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2896),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2896),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2896),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2474),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [723] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2327),\n    [sym_constructor_type] = STATE(2327),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2327),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_predicate] = STATE(2163),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2149),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2327),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2327),\n    [sym_identifier] = ACTIONS(2420),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(2422),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [724] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3005),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3005),\n    [sym_pair] = STATE(3005),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3004),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2454),\n    [anon_sym_pub] = ACTIONS(2456),\n    [anon_sym_export] = ACTIONS(2454),\n    [anon_sym_type] = ACTIONS(2454),\n    [anon_sym_namespace] = ACTIONS(2454),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2476),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2454),\n    [anon_sym_async] = ACTIONS(2454),\n    [anon_sym_fn] = ACTIONS(2460),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2462),\n    [anon_sym_declare] = ACTIONS(2454),\n    [anon_sym_public] = ACTIONS(2454),\n    [anon_sym_private] = ACTIONS(2454),\n    [anon_sym_protected] = ACTIONS(2454),\n    [anon_sym_override] = ACTIONS(2464),\n    [anon_sym_readonly] = ACTIONS(2466),\n    [anon_sym_module] = ACTIONS(2454),\n    [anon_sym_any] = ACTIONS(2454),\n    [anon_sym_number] = ACTIONS(2454),\n    [anon_sym_int] = ACTIONS(2454),\n    [anon_sym_float] = ACTIONS(2454),\n    [anon_sym_float2] = ACTIONS(2454),\n    [anon_sym_float3] = ACTIONS(2454),\n    [anon_sym_float4] = ACTIONS(2454),\n    [anon_sym_float3x3] = ACTIONS(2454),\n    [anon_sym_float2x2] = ACTIONS(2454),\n    [anon_sym_float4x4] = ACTIONS(2454),\n    [anon_sym_int2] = ACTIONS(2454),\n    [anon_sym_int3] = ACTIONS(2454),\n    [anon_sym_int4] = ACTIONS(2454),\n    [anon_sym_int3x3] = ACTIONS(2454),\n    [anon_sym_int2x2] = ACTIONS(2454),\n    [anon_sym_int4x4] = ACTIONS(2454),\n    [anon_sym_boolean] = ACTIONS(2454),\n    [anon_sym_string] = ACTIONS(2454),\n    [anon_sym_symbol] = ACTIONS(2454),\n    [anon_sym_workgroup] = ACTIONS(2454),\n    [anon_sym_get] = ACTIONS(2454),\n    [anon_sym_set] = ACTIONS(2454),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [725] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1415),\n    [sym_constructor_type] = STATE(1415),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1415),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_predicate] = STATE(1488),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1397),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1415),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1415),\n    [sym_identifier] = ACTIONS(2478),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2504),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [726] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2296),\n    [anon_sym_pub] = ACTIONS(2298),\n    [anon_sym_export] = ACTIONS(2296),\n    [anon_sym_type] = ACTIONS(2296),\n    [anon_sym_namespace] = ACTIONS(2296),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2520),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2296),\n    [anon_sym_async] = ACTIONS(2296),\n    [anon_sym_fn] = ACTIONS(2312),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2320),\n    [anon_sym_declare] = ACTIONS(2296),\n    [anon_sym_public] = ACTIONS(2296),\n    [anon_sym_private] = ACTIONS(2296),\n    [anon_sym_protected] = ACTIONS(2296),\n    [anon_sym_override] = ACTIONS(2322),\n    [anon_sym_readonly] = ACTIONS(2324),\n    [anon_sym_module] = ACTIONS(2296),\n    [anon_sym_any] = ACTIONS(2296),\n    [anon_sym_number] = ACTIONS(2296),\n    [anon_sym_int] = ACTIONS(2296),\n    [anon_sym_float] = ACTIONS(2296),\n    [anon_sym_float2] = ACTIONS(2296),\n    [anon_sym_float3] = ACTIONS(2296),\n    [anon_sym_float4] = ACTIONS(2296),\n    [anon_sym_float3x3] = ACTIONS(2296),\n    [anon_sym_float2x2] = ACTIONS(2296),\n    [anon_sym_float4x4] = ACTIONS(2296),\n    [anon_sym_int2] = ACTIONS(2296),\n    [anon_sym_int3] = ACTIONS(2296),\n    [anon_sym_int4] = ACTIONS(2296),\n    [anon_sym_int3x3] = ACTIONS(2296),\n    [anon_sym_int2x2] = ACTIONS(2296),\n    [anon_sym_int4x4] = ACTIONS(2296),\n    [anon_sym_boolean] = ACTIONS(2296),\n    [anon_sym_string] = ACTIONS(2296),\n    [anon_sym_symbol] = ACTIONS(2296),\n    [anon_sym_workgroup] = ACTIONS(2296),\n    [anon_sym_get] = ACTIONS(2296),\n    [anon_sym_set] = ACTIONS(2296),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [727] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1504),\n    [sym_constructor_type] = STATE(1504),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1504),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_predicate] = STATE(1505),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1397),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1504),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1504),\n    [sym_identifier] = ACTIONS(2478),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2504),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [728] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2382),\n    [sym_constructor_type] = STATE(2382),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2382),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_predicate] = STATE(2383),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2332),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2382),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2382),\n    [sym_identifier] = ACTIONS(2522),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2552),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [729] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2392),\n    [sym_constructor_type] = STATE(2392),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2392),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_predicate] = STATE(2393),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2332),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2392),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2392),\n    [sym_identifier] = ACTIONS(2522),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2552),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [730] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2568),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [731] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2296),\n    [anon_sym_pub] = ACTIONS(2298),\n    [anon_sym_export] = ACTIONS(2296),\n    [anon_sym_type] = ACTIONS(2296),\n    [anon_sym_namespace] = ACTIONS(2296),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2410),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2296),\n    [anon_sym_async] = ACTIONS(2296),\n    [anon_sym_fn] = ACTIONS(2312),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2320),\n    [anon_sym_declare] = ACTIONS(2296),\n    [anon_sym_public] = ACTIONS(2296),\n    [anon_sym_private] = ACTIONS(2296),\n    [anon_sym_protected] = ACTIONS(2296),\n    [anon_sym_override] = ACTIONS(2322),\n    [anon_sym_readonly] = ACTIONS(2324),\n    [anon_sym_module] = ACTIONS(2296),\n    [anon_sym_any] = ACTIONS(2296),\n    [anon_sym_number] = ACTIONS(2296),\n    [anon_sym_int] = ACTIONS(2296),\n    [anon_sym_float] = ACTIONS(2296),\n    [anon_sym_float2] = ACTIONS(2296),\n    [anon_sym_float3] = ACTIONS(2296),\n    [anon_sym_float4] = ACTIONS(2296),\n    [anon_sym_float3x3] = ACTIONS(2296),\n    [anon_sym_float2x2] = ACTIONS(2296),\n    [anon_sym_float4x4] = ACTIONS(2296),\n    [anon_sym_int2] = ACTIONS(2296),\n    [anon_sym_int3] = ACTIONS(2296),\n    [anon_sym_int4] = ACTIONS(2296),\n    [anon_sym_int3x3] = ACTIONS(2296),\n    [anon_sym_int2x2] = ACTIONS(2296),\n    [anon_sym_int4x4] = ACTIONS(2296),\n    [anon_sym_boolean] = ACTIONS(2296),\n    [anon_sym_string] = ACTIONS(2296),\n    [anon_sym_symbol] = ACTIONS(2296),\n    [anon_sym_workgroup] = ACTIONS(2296),\n    [anon_sym_get] = ACTIONS(2296),\n    [anon_sym_set] = ACTIONS(2296),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [732] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2296),\n    [anon_sym_pub] = ACTIONS(2298),\n    [anon_sym_export] = ACTIONS(2296),\n    [anon_sym_type] = ACTIONS(2296),\n    [anon_sym_namespace] = ACTIONS(2296),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2570),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2296),\n    [anon_sym_async] = ACTIONS(2296),\n    [anon_sym_fn] = ACTIONS(2312),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2320),\n    [anon_sym_declare] = ACTIONS(2296),\n    [anon_sym_public] = ACTIONS(2296),\n    [anon_sym_private] = ACTIONS(2296),\n    [anon_sym_protected] = ACTIONS(2296),\n    [anon_sym_override] = ACTIONS(2322),\n    [anon_sym_readonly] = ACTIONS(2324),\n    [anon_sym_module] = ACTIONS(2296),\n    [anon_sym_any] = ACTIONS(2296),\n    [anon_sym_number] = ACTIONS(2296),\n    [anon_sym_int] = ACTIONS(2296),\n    [anon_sym_float] = ACTIONS(2296),\n    [anon_sym_float2] = ACTIONS(2296),\n    [anon_sym_float3] = ACTIONS(2296),\n    [anon_sym_float4] = ACTIONS(2296),\n    [anon_sym_float3x3] = ACTIONS(2296),\n    [anon_sym_float2x2] = ACTIONS(2296),\n    [anon_sym_float4x4] = ACTIONS(2296),\n    [anon_sym_int2] = ACTIONS(2296),\n    [anon_sym_int3] = ACTIONS(2296),\n    [anon_sym_int4] = ACTIONS(2296),\n    [anon_sym_int3x3] = ACTIONS(2296),\n    [anon_sym_int2x2] = ACTIONS(2296),\n    [anon_sym_int4x4] = ACTIONS(2296),\n    [anon_sym_boolean] = ACTIONS(2296),\n    [anon_sym_string] = ACTIONS(2296),\n    [anon_sym_symbol] = ACTIONS(2296),\n    [anon_sym_workgroup] = ACTIONS(2296),\n    [anon_sym_get] = ACTIONS(2296),\n    [anon_sym_set] = ACTIONS(2296),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [733] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2376),\n    [anon_sym_pub] = ACTIONS(2378),\n    [anon_sym_export] = ACTIONS(2376),\n    [anon_sym_type] = ACTIONS(2376),\n    [anon_sym_namespace] = ACTIONS(2376),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2572),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2376),\n    [anon_sym_async] = ACTIONS(2376),\n    [anon_sym_fn] = ACTIONS(2386),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2388),\n    [anon_sym_declare] = ACTIONS(2376),\n    [anon_sym_public] = ACTIONS(2376),\n    [anon_sym_private] = ACTIONS(2376),\n    [anon_sym_protected] = ACTIONS(2376),\n    [anon_sym_override] = ACTIONS(2390),\n    [anon_sym_readonly] = ACTIONS(2392),\n    [anon_sym_module] = ACTIONS(2376),\n    [anon_sym_any] = ACTIONS(2376),\n    [anon_sym_number] = ACTIONS(2376),\n    [anon_sym_int] = ACTIONS(2376),\n    [anon_sym_float] = ACTIONS(2376),\n    [anon_sym_float2] = ACTIONS(2376),\n    [anon_sym_float3] = ACTIONS(2376),\n    [anon_sym_float4] = ACTIONS(2376),\n    [anon_sym_float3x3] = ACTIONS(2376),\n    [anon_sym_float2x2] = ACTIONS(2376),\n    [anon_sym_float4x4] = ACTIONS(2376),\n    [anon_sym_int2] = ACTIONS(2376),\n    [anon_sym_int3] = ACTIONS(2376),\n    [anon_sym_int4] = ACTIONS(2376),\n    [anon_sym_int3x3] = ACTIONS(2376),\n    [anon_sym_int2x2] = ACTIONS(2376),\n    [anon_sym_int4x4] = ACTIONS(2376),\n    [anon_sym_boolean] = ACTIONS(2376),\n    [anon_sym_string] = ACTIONS(2376),\n    [anon_sym_symbol] = ACTIONS(2376),\n    [anon_sym_workgroup] = ACTIONS(2376),\n    [anon_sym_get] = ACTIONS(2376),\n    [anon_sym_set] = ACTIONS(2376),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [734] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2657),\n    [sym_constructor_type] = STATE(2657),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2657),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_predicate] = STATE(2190),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2491),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2657),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2657),\n    [sym_identifier] = ACTIONS(2430),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(2440),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [735] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2574),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [736] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2853),\n    [sym_constructor_type] = STATE(2853),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2853),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2853),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2853),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2576),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [737] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3007),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3085),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3007),\n    [sym_method_definition] = STATE(3085),\n    [sym_pair] = STATE(3085),\n    [sym_pair_pattern] = STATE(3007),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [aux_sym_object_repeat1] = STATE(3087),\n    [aux_sym_object_pattern_repeat1] = STATE(3002),\n    [sym_identifier] = ACTIONS(2578),\n    [anon_sym_pub] = ACTIONS(2580),\n    [anon_sym_export] = ACTIONS(2578),\n    [anon_sym_type] = ACTIONS(2578),\n    [anon_sym_namespace] = ACTIONS(2578),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2380),\n    [anon_sym_RBRACE] = ACTIONS(2520),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2578),\n    [anon_sym_async] = ACTIONS(2578),\n    [anon_sym_fn] = ACTIONS(2582),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2584),\n    [anon_sym_declare] = ACTIONS(2578),\n    [anon_sym_public] = ACTIONS(2578),\n    [anon_sym_private] = ACTIONS(2578),\n    [anon_sym_protected] = ACTIONS(2578),\n    [anon_sym_override] = ACTIONS(2586),\n    [anon_sym_readonly] = ACTIONS(2588),\n    [anon_sym_module] = ACTIONS(2578),\n    [anon_sym_any] = ACTIONS(2578),\n    [anon_sym_number] = ACTIONS(2578),\n    [anon_sym_int] = ACTIONS(2578),\n    [anon_sym_float] = ACTIONS(2578),\n    [anon_sym_float2] = ACTIONS(2578),\n    [anon_sym_float3] = ACTIONS(2578),\n    [anon_sym_float4] = ACTIONS(2578),\n    [anon_sym_float3x3] = ACTIONS(2578),\n    [anon_sym_float2x2] = ACTIONS(2578),\n    [anon_sym_float4x4] = ACTIONS(2578),\n    [anon_sym_int2] = ACTIONS(2578),\n    [anon_sym_int3] = ACTIONS(2578),\n    [anon_sym_int4] = ACTIONS(2578),\n    [anon_sym_int3x3] = ACTIONS(2578),\n    [anon_sym_int2x2] = ACTIONS(2578),\n    [anon_sym_int4x4] = ACTIONS(2578),\n    [anon_sym_boolean] = ACTIONS(2578),\n    [anon_sym_string] = ACTIONS(2578),\n    [anon_sym_symbol] = ACTIONS(2578),\n    [anon_sym_workgroup] = ACTIONS(2578),\n    [anon_sym_get] = ACTIONS(2578),\n    [anon_sym_set] = ACTIONS(2578),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [738] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2960),\n    [sym_constructor_type] = STATE(2960),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2960),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2960),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2960),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_RBRACK] = ACTIONS(2590),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [739] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_GT] = ACTIONS(2592),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [740] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2286),\n    [sym_constructor_type] = STATE(2286),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2286),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2286),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2286),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [741] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2182),\n    [sym_constructor_type] = STATE(2182),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2182),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2182),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2182),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [742] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2510),\n    [sym_constructor_type] = STATE(2510),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2510),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2510),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2510),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [743] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1658),\n    [sym_constructor_type] = STATE(1658),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1658),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1658),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1658),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [744] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(3111),\n    [sym_constructor_type] = STATE(3111),\n    [sym__primary_type] = STATE(2189),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(3111),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(3111),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(3111),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [745] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2403),\n    [sym_constructor_type] = STATE(2403),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2403),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2403),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2403),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [746] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2404),\n    [sym_constructor_type] = STATE(2404),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2404),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2404),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2404),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [747] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(3167),\n    [sym_constructor_type] = STATE(3167),\n    [sym__primary_type] = STATE(1662),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(3167),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(3167),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(3167),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [748] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2675),\n    [sym_constructor_type] = STATE(2675),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2675),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2675),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2675),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [749] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1663),\n    [sym_constructor_type] = STATE(1663),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1663),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1663),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1663),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [750] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2194),\n    [sym_constructor_type] = STATE(2194),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2194),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2194),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2194),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [751] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1769),\n    [sym_constructor_type] = STATE(1769),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1769),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1769),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1769),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [752] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(3167),\n    [sym_constructor_type] = STATE(3167),\n    [sym__primary_type] = STATE(1665),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(3167),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(3167),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(3167),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [753] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1770),\n    [sym_constructor_type] = STATE(1770),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1770),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1770),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1770),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [754] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1616),\n    [sym_constructor_type] = STATE(1616),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1616),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1616),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1616),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [755] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2616),\n    [sym_constructor_type] = STATE(2616),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2616),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2616),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2616),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [756] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2795),\n    [sym_constructor_type] = STATE(2795),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2795),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2795),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2795),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [757] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2863),\n    [sym_constructor_type] = STATE(2863),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2863),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2863),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2863),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [758] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2893),\n    [sym_constructor_type] = STATE(2893),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2893),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2893),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2893),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [759] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2717),\n    [sym_constructor_type] = STATE(2717),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2717),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2717),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2717),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [760] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2739),\n    [sym_constructor_type] = STATE(2739),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2739),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2739),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2739),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [761] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(3082),\n    [sym_constructor_type] = STATE(3082),\n    [sym__primary_type] = STATE(2189),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(3082),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(3082),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(3082),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [762] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2470),\n    [sym_constructor_type] = STATE(2470),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2470),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2470),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2470),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [763] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2182),\n    [sym_constructor_type] = STATE(2182),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2182),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2182),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2182),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [764] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2825),\n    [sym_constructor_type] = STATE(2825),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2825),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2825),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2825),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [765] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2534),\n    [sym_constructor_type] = STATE(2534),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2534),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2534),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2534),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [766] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2654),\n    [sym_constructor_type] = STATE(2654),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2654),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2654),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2654),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [767] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2665),\n    [sym_constructor_type] = STATE(2665),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2665),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2665),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2665),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [768] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(3082),\n    [sym_constructor_type] = STATE(3082),\n    [sym__primary_type] = STATE(2734),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2949),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(3082),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(3082),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [769] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(3111),\n    [sym_constructor_type] = STATE(3111),\n    [sym__primary_type] = STATE(2186),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(3111),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(3111),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(3111),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [770] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2535),\n    [sym_constructor_type] = STATE(2535),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2535),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2535),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2535),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [771] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2172),\n    [sym_constructor_type] = STATE(2172),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2172),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2172),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2172),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [772] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2874),\n    [sym_constructor_type] = STATE(2874),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2874),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2874),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2874),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [773] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2913),\n    [sym_constructor_type] = STATE(2913),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2913),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2913),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2913),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [774] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2833),\n    [sym_constructor_type] = STATE(2833),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2833),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2833),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2833),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [775] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1814),\n    [sym_constructor_type] = STATE(1814),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1814),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1814),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1814),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [776] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2550),\n    [sym_constructor_type] = STATE(2550),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2550),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2550),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2550),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [777] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2196),\n    [sym_constructor_type] = STATE(2196),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2196),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2196),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2196),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [778] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2840),\n    [sym_constructor_type] = STATE(2840),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2840),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2840),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2840),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [779] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2614),\n    [sym_constructor_type] = STATE(2614),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2614),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2614),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2614),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [780] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2796),\n    [sym_constructor_type] = STATE(2796),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2796),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2796),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2796),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [781] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2565),\n    [sym_constructor_type] = STATE(2565),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2565),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2565),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2565),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [782] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2277),\n    [sym_constructor_type] = STATE(2277),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2277),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2277),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2277),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [783] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1561),\n    [sym_constructor_type] = STATE(1561),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1561),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1561),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1561),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [784] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1447),\n    [sym_constructor_type] = STATE(1447),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1447),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1447),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1447),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [785] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2435),\n    [sym_constructor_type] = STATE(2435),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2435),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2435),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2435),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [786] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2192),\n    [sym_constructor_type] = STATE(2192),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2192),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2192),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2192),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [787] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2283),\n    [sym_constructor_type] = STATE(2283),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2283),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2283),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2283),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [788] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2290),\n    [sym_constructor_type] = STATE(2290),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2290),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2290),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2290),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [789] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2832),\n    [sym_constructor_type] = STATE(2832),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2832),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2832),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2832),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [790] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2434),\n    [sym_constructor_type] = STATE(2434),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2434),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2434),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2434),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [791] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2658),\n    [sym_constructor_type] = STATE(2658),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2658),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2658),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2658),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [792] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1724),\n    [sym_constructor_type] = STATE(1724),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1724),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1724),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1724),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [793] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2154),\n    [sym_constructor_type] = STATE(2154),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2154),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2154),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2154),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [794] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2597),\n    [sym_constructor_type] = STATE(2597),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2597),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2597),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2597),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [795] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2965),\n    [sym_constructor_type] = STATE(2965),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2965),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2965),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2965),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [796] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1723),\n    [sym_constructor_type] = STATE(1723),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1723),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1723),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1723),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [797] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2357),\n    [sym_constructor_type] = STATE(2357),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2357),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2357),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2357),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [798] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1699),\n    [sym_constructor_type] = STATE(1699),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1699),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1699),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1699),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [799] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2887),\n    [sym_constructor_type] = STATE(2887),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2887),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2887),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2887),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [800] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2619),\n    [sym_constructor_type] = STATE(2619),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2619),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2619),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2619),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [801] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2402),\n    [sym_constructor_type] = STATE(2402),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2402),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2402),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2402),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [802] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2401),\n    [sym_constructor_type] = STATE(2401),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2401),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2401),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2401),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [803] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2928),\n    [sym_constructor_type] = STATE(2928),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2928),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2928),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2928),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [804] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2398),\n    [sym_constructor_type] = STATE(2398),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2398),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2398),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2398),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [805] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2397),\n    [sym_constructor_type] = STATE(2397),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2397),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2397),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2397),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [806] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1692),\n    [sym_constructor_type] = STATE(1692),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1692),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1692),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1692),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [807] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2183),\n    [sym_constructor_type] = STATE(2183),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2183),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2183),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2183),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [808] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2967),\n    [sym_constructor_type] = STATE(2967),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2967),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2967),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2967),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [809] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2389),\n    [sym_constructor_type] = STATE(2389),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2389),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2389),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2389),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [810] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2968),\n    [sym_constructor_type] = STATE(2968),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2968),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2968),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2968),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [811] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1575),\n    [sym_constructor_type] = STATE(1575),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1575),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1575),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1575),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [812] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2172),\n    [sym_constructor_type] = STATE(2172),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2172),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2172),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2172),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [813] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2245),\n    [sym_constructor_type] = STATE(2245),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2245),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2245),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2245),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [814] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2783),\n    [sym_constructor_type] = STATE(2783),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2783),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2783),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2783),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [815] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2261),\n    [sym_constructor_type] = STATE(2261),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2261),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2261),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2261),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [816] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2174),\n    [sym_constructor_type] = STATE(2174),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2174),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2174),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2174),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [817] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(3054),\n    [sym_constructor_type] = STATE(3054),\n    [sym__primary_type] = STATE(2293),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(3054),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(3054),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(3054),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [818] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2385),\n    [sym_constructor_type] = STATE(2385),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2385),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2385),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2385),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [819] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2384),\n    [sym_constructor_type] = STATE(2384),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2384),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2384),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2384),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [820] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(3082),\n    [sym_constructor_type] = STATE(3082),\n    [sym__primary_type] = STATE(2186),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(3082),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(3082),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(3082),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [821] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2251),\n    [sym_constructor_type] = STATE(2251),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2251),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2251),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2251),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [822] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(3054),\n    [sym_constructor_type] = STATE(3054),\n    [sym__primary_type] = STATE(2287),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(3054),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(3054),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(3054),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [823] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2876),\n    [sym_constructor_type] = STATE(2876),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2876),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2876),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2876),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [824] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2823),\n    [sym_constructor_type] = STATE(2823),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2823),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2823),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2823),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [825] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(3039),\n    [sym_constructor_type] = STATE(3039),\n    [sym__primary_type] = STATE(2432),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(3039),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(3039),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(3039),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [826] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2438),\n    [sym_constructor_type] = STATE(2438),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2438),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2438),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2438),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [827] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(3039),\n    [sym_constructor_type] = STATE(3039),\n    [sym__primary_type] = STATE(2441),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(3039),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(3039),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(3039),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [828] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2183),\n    [sym_constructor_type] = STATE(2183),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2183),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2183),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2183),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [829] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2450),\n    [sym_constructor_type] = STATE(2450),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2450),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2450),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2450),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [830] = {\n    [sym_nested_identifier] = STATE(3547),\n    [sym_string] = STATE(2448),\n    [sym_formal_parameters] = STATE(3402),\n    [sym_nested_type_identifier] = STATE(2313),\n    [sym__type] = STATE(2451),\n    [sym_constructor_type] = STATE(2451),\n    [sym__primary_type] = STATE(2443),\n    [sym_template_literal_type] = STATE(2440),\n    [sym_infer_type] = STATE(2451),\n    [sym_conditional_type] = STATE(2440),\n    [sym_generic_type] = STATE(2440),\n    [sym_type_query] = STATE(2440),\n    [sym_index_type_query] = STATE(2440),\n    [sym_lookup_type] = STATE(2440),\n    [sym_literal_type] = STATE(2440),\n    [sym__number] = STATE(2380),\n    [sym_existential_type] = STATE(2440),\n    [sym_flow_maybe_type] = STATE(2440),\n    [sym_parenthesized_type] = STATE(2440),\n    [sym_predefined_type] = STATE(2440),\n    [sym_object_type] = STATE(2440),\n    [sym_type_parameters] = STATE(3293),\n    [sym_array_type] = STATE(2440),\n    [sym_tuple_type] = STATE(2440),\n    [sym_readonly_type] = STATE(2451),\n    [sym_union_type] = STATE(2440),\n    [sym_intersection_type] = STATE(2440),\n    [sym_function_type] = STATE(2451),\n    [sym_identifier] = ACTIONS(2594),\n    [anon_sym_STAR] = ACTIONS(2524),\n    [anon_sym_LBRACE] = ACTIONS(2526),\n    [anon_sym_typeof] = ACTIONS(2528),\n    [anon_sym_LPAREN] = ACTIONS(2530),\n    [anon_sym_LBRACK] = ACTIONS(2532),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2534),\n    [anon_sym_AMP] = ACTIONS(2536),\n    [anon_sym_PIPE] = ACTIONS(2538),\n    [anon_sym_PLUS] = ACTIONS(2540),\n    [anon_sym_DASH] = ACTIONS(2540),\n    [anon_sym_void] = ACTIONS(2542),\n    [anon_sym_DQUOTE] = ACTIONS(2544),\n    [anon_sym_SQUOTE] = ACTIONS(2546),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2548),\n    [sym_number] = ACTIONS(2550),\n    [sym_this] = ACTIONS(2596),\n    [sym_true] = ACTIONS(2554),\n    [sym_false] = ACTIONS(2554),\n    [sym_null] = ACTIONS(2554),\n    [sym_undefined] = ACTIONS(2554),\n    [anon_sym_QMARK] = ACTIONS(2556),\n    [anon_sym_readonly] = ACTIONS(2558),\n    [anon_sym_any] = ACTIONS(2542),\n    [anon_sym_number] = ACTIONS(2542),\n    [anon_sym_int] = ACTIONS(2542),\n    [anon_sym_float] = ACTIONS(2542),\n    [anon_sym_float2] = ACTIONS(2542),\n    [anon_sym_float3] = ACTIONS(2542),\n    [anon_sym_float4] = ACTIONS(2542),\n    [anon_sym_float3x3] = ACTIONS(2542),\n    [anon_sym_float2x2] = ACTIONS(2542),\n    [anon_sym_float4x4] = ACTIONS(2542),\n    [anon_sym_int2] = ACTIONS(2542),\n    [anon_sym_int3] = ACTIONS(2542),\n    [anon_sym_int4] = ACTIONS(2542),\n    [anon_sym_int3x3] = ACTIONS(2542),\n    [anon_sym_int2x2] = ACTIONS(2542),\n    [anon_sym_int4x4] = ACTIONS(2542),\n    [anon_sym_boolean] = ACTIONS(2542),\n    [anon_sym_string] = ACTIONS(2542),\n    [anon_sym_symbol] = ACTIONS(2542),\n    [anon_sym_abstract] = ACTIONS(2560),\n    [anon_sym_infer] = ACTIONS(2562),\n    [anon_sym_keyof] = ACTIONS(2564),\n    [anon_sym_unknown] = ACTIONS(2542),\n    [anon_sym_never] = ACTIONS(2542),\n    [anon_sym_object] = ACTIONS(2542),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2566),\n  },\n  [831] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1551),\n    [sym_constructor_type] = STATE(1551),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1551),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1551),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1551),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [832] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1550),\n    [sym_constructor_type] = STATE(1550),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1550),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1550),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1550),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [833] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1523),\n    [sym_constructor_type] = STATE(1523),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1523),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1523),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1523),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [834] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1521),\n    [sym_constructor_type] = STATE(1521),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1521),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1521),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1521),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [835] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2146),\n    [sym_constructor_type] = STATE(2146),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2146),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2146),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2146),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [836] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1498),\n    [sym_constructor_type] = STATE(1498),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1498),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1498),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1498),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [837] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2146),\n    [sym_constructor_type] = STATE(2146),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2146),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2146),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2146),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [838] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2637),\n    [sym_constructor_type] = STATE(2637),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2637),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2637),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2637),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [839] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2872),\n    [sym_constructor_type] = STATE(2872),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2872),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2872),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2872),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [840] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1450),\n    [sym_constructor_type] = STATE(1450),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1450),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1450),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1450),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [841] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1448),\n    [sym_constructor_type] = STATE(1448),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1448),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1448),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1448),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [842] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2588),\n    [sym_constructor_type] = STATE(2588),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2588),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2588),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2588),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [843] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1657),\n    [sym_constructor_type] = STATE(1657),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1657),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1657),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1657),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [844] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(2980),\n    [sym_constructor_type] = STATE(2980),\n    [sym__primary_type] = STATE(1427),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(2980),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(2980),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(2980),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [845] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1429),\n    [sym_constructor_type] = STATE(1429),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1429),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1429),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1429),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [846] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(2980),\n    [sym_constructor_type] = STATE(2980),\n    [sym__primary_type] = STATE(1430),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(2980),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(2980),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(2980),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [847] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1434),\n    [sym_constructor_type] = STATE(1434),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1434),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1434),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1434),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [848] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1435),\n    [sym_constructor_type] = STATE(1435),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1435),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1435),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1435),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [849] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2240),\n    [sym_constructor_type] = STATE(2240),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2240),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2240),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2240),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [850] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2819),\n    [sym_constructor_type] = STATE(2819),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2819),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2819),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2819),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [851] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2256),\n    [sym_constructor_type] = STATE(2256),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2256),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2256),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2256),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [852] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1507),\n    [sym_constructor_type] = STATE(1507),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1507),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1507),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1507),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [853] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2883),\n    [sym_constructor_type] = STATE(2883),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2883),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2883),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2883),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [854] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2361),\n    [sym_constructor_type] = STATE(2361),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2361),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2361),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2361),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [855] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2532),\n    [sym_constructor_type] = STATE(2532),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2532),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2532),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2532),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [856] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2263),\n    [sym_constructor_type] = STATE(2263),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2263),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2263),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2263),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [857] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2266),\n    [sym_constructor_type] = STATE(2266),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2266),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2266),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2266),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [858] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2202),\n    [sym_constructor_type] = STATE(2202),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2202),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2202),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2202),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [859] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1623),\n    [sym_constructor_type] = STATE(1623),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1623),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1623),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1623),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [860] = {\n    [sym_nested_identifier] = STATE(3477),\n    [sym_string] = STATE(1446),\n    [sym_formal_parameters] = STATE(3530),\n    [sym_nested_type_identifier] = STATE(1407),\n    [sym__type] = STATE(1525),\n    [sym_constructor_type] = STATE(1525),\n    [sym__primary_type] = STATE(1444),\n    [sym_template_literal_type] = STATE(1443),\n    [sym_infer_type] = STATE(1525),\n    [sym_conditional_type] = STATE(1443),\n    [sym_generic_type] = STATE(1443),\n    [sym_type_query] = STATE(1443),\n    [sym_index_type_query] = STATE(1443),\n    [sym_lookup_type] = STATE(1443),\n    [sym_literal_type] = STATE(1443),\n    [sym__number] = STATE(1442),\n    [sym_existential_type] = STATE(1443),\n    [sym_flow_maybe_type] = STATE(1443),\n    [sym_parenthesized_type] = STATE(1443),\n    [sym_predefined_type] = STATE(1443),\n    [sym_object_type] = STATE(1443),\n    [sym_type_parameters] = STATE(3174),\n    [sym_array_type] = STATE(1443),\n    [sym_tuple_type] = STATE(1443),\n    [sym_readonly_type] = STATE(1525),\n    [sym_union_type] = STATE(1443),\n    [sym_intersection_type] = STATE(1443),\n    [sym_function_type] = STATE(1525),\n    [sym_identifier] = ACTIONS(2604),\n    [anon_sym_STAR] = ACTIONS(2480),\n    [anon_sym_LBRACE] = ACTIONS(2482),\n    [anon_sym_typeof] = ACTIONS(2484),\n    [anon_sym_LPAREN] = ACTIONS(2486),\n    [anon_sym_LBRACK] = ACTIONS(2488),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2490),\n    [anon_sym_AMP] = ACTIONS(2492),\n    [anon_sym_PIPE] = ACTIONS(2494),\n    [anon_sym_PLUS] = ACTIONS(2496),\n    [anon_sym_DASH] = ACTIONS(2496),\n    [anon_sym_void] = ACTIONS(2498),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2500),\n    [sym_number] = ACTIONS(2502),\n    [sym_this] = ACTIONS(2606),\n    [sym_true] = ACTIONS(2506),\n    [sym_false] = ACTIONS(2506),\n    [sym_null] = ACTIONS(2506),\n    [sym_undefined] = ACTIONS(2506),\n    [anon_sym_QMARK] = ACTIONS(2508),\n    [anon_sym_readonly] = ACTIONS(2510),\n    [anon_sym_any] = ACTIONS(2498),\n    [anon_sym_number] = ACTIONS(2498),\n    [anon_sym_int] = ACTIONS(2498),\n    [anon_sym_float] = ACTIONS(2498),\n    [anon_sym_float2] = ACTIONS(2498),\n    [anon_sym_float3] = ACTIONS(2498),\n    [anon_sym_float4] = ACTIONS(2498),\n    [anon_sym_float3x3] = ACTIONS(2498),\n    [anon_sym_float2x2] = ACTIONS(2498),\n    [anon_sym_float4x4] = ACTIONS(2498),\n    [anon_sym_int2] = ACTIONS(2498),\n    [anon_sym_int3] = ACTIONS(2498),\n    [anon_sym_int4] = ACTIONS(2498),\n    [anon_sym_int3x3] = ACTIONS(2498),\n    [anon_sym_int2x2] = ACTIONS(2498),\n    [anon_sym_int4x4] = ACTIONS(2498),\n    [anon_sym_boolean] = ACTIONS(2498),\n    [anon_sym_string] = ACTIONS(2498),\n    [anon_sym_symbol] = ACTIONS(2498),\n    [anon_sym_abstract] = ACTIONS(2512),\n    [anon_sym_infer] = ACTIONS(2514),\n    [anon_sym_keyof] = ACTIONS(2516),\n    [anon_sym_unknown] = ACTIONS(2498),\n    [anon_sym_never] = ACTIONS(2498),\n    [anon_sym_object] = ACTIONS(2498),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2518),\n  },\n  [861] = {\n    [sym_nested_identifier] = STATE(3684),\n    [sym_string] = STATE(1634),\n    [sym_formal_parameters] = STATE(3611),\n    [sym_nested_type_identifier] = STATE(1552),\n    [sym__type] = STATE(1622),\n    [sym_constructor_type] = STATE(1622),\n    [sym__primary_type] = STATE(1568),\n    [sym_template_literal_type] = STATE(1569),\n    [sym_infer_type] = STATE(1622),\n    [sym_conditional_type] = STATE(1569),\n    [sym_generic_type] = STATE(1569),\n    [sym_type_query] = STATE(1569),\n    [sym_index_type_query] = STATE(1569),\n    [sym_lookup_type] = STATE(1569),\n    [sym_literal_type] = STATE(1569),\n    [sym__number] = STATE(1570),\n    [sym_existential_type] = STATE(1569),\n    [sym_flow_maybe_type] = STATE(1569),\n    [sym_parenthesized_type] = STATE(1569),\n    [sym_predefined_type] = STATE(1569),\n    [sym_object_type] = STATE(1569),\n    [sym_type_parameters] = STATE(3190),\n    [sym_array_type] = STATE(1569),\n    [sym_tuple_type] = STATE(1569),\n    [sym_readonly_type] = STATE(1622),\n    [sym_union_type] = STATE(1569),\n    [sym_intersection_type] = STATE(1569),\n    [sym_function_type] = STATE(1622),\n    [sym_identifier] = ACTIONS(2598),\n    [anon_sym_STAR] = ACTIONS(2334),\n    [anon_sym_LBRACE] = ACTIONS(2336),\n    [anon_sym_typeof] = ACTIONS(2338),\n    [anon_sym_LPAREN] = ACTIONS(2340),\n    [anon_sym_LBRACK] = ACTIONS(2342),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2344),\n    [anon_sym_AMP] = ACTIONS(2346),\n    [anon_sym_PIPE] = ACTIONS(2348),\n    [anon_sym_PLUS] = ACTIONS(2350),\n    [anon_sym_DASH] = ACTIONS(2350),\n    [anon_sym_void] = ACTIONS(2352),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2354),\n    [sym_number] = ACTIONS(2356),\n    [sym_this] = ACTIONS(2600),\n    [sym_true] = ACTIONS(2360),\n    [sym_false] = ACTIONS(2360),\n    [sym_null] = ACTIONS(2360),\n    [sym_undefined] = ACTIONS(2360),\n    [anon_sym_QMARK] = ACTIONS(2362),\n    [anon_sym_readonly] = ACTIONS(2364),\n    [anon_sym_any] = ACTIONS(2352),\n    [anon_sym_number] = ACTIONS(2352),\n    [anon_sym_int] = ACTIONS(2352),\n    [anon_sym_float] = ACTIONS(2352),\n    [anon_sym_float2] = ACTIONS(2352),\n    [anon_sym_float3] = ACTIONS(2352),\n    [anon_sym_float4] = ACTIONS(2352),\n    [anon_sym_float3x3] = ACTIONS(2352),\n    [anon_sym_float2x2] = ACTIONS(2352),\n    [anon_sym_float4x4] = ACTIONS(2352),\n    [anon_sym_int2] = ACTIONS(2352),\n    [anon_sym_int3] = ACTIONS(2352),\n    [anon_sym_int4] = ACTIONS(2352),\n    [anon_sym_int3x3] = ACTIONS(2352),\n    [anon_sym_int2x2] = ACTIONS(2352),\n    [anon_sym_int4x4] = ACTIONS(2352),\n    [anon_sym_boolean] = ACTIONS(2352),\n    [anon_sym_string] = ACTIONS(2352),\n    [anon_sym_symbol] = ACTIONS(2352),\n    [anon_sym_abstract] = ACTIONS(2366),\n    [anon_sym_infer] = ACTIONS(2368),\n    [anon_sym_keyof] = ACTIONS(2370),\n    [anon_sym_unknown] = ACTIONS(2352),\n    [anon_sym_never] = ACTIONS(2352),\n    [anon_sym_object] = ACTIONS(2352),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(2372),\n  },\n  [862] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3577),\n    [sym_nested_type_identifier] = STATE(2433),\n    [sym__type] = STATE(2174),\n    [sym_constructor_type] = STATE(2174),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2174),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3266),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2174),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2174),\n    [sym_identifier] = ACTIONS(2602),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(2432),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(2434),\n    [anon_sym_AMP] = ACTIONS(2436),\n    [anon_sym_PIPE] = ACTIONS(2438),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(2442),\n    [anon_sym_readonly] = ACTIONS(2444),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(2446),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(2448),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [863] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2946),\n    [sym_constructor_type] = STATE(2946),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2946),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2946),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2946),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [864] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2200),\n    [sym_constructor_type] = STATE(2200),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2200),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2200),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2200),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [865] = {\n    [sym_nested_identifier] = STATE(3399),\n    [sym_string] = STATE(2254),\n    [sym_formal_parameters] = STATE(3583),\n    [sym_nested_type_identifier] = STATE(2201),\n    [sym__type] = STATE(2212),\n    [sym_constructor_type] = STATE(2212),\n    [sym__primary_type] = STATE(2276),\n    [sym_template_literal_type] = STATE(2278),\n    [sym_infer_type] = STATE(2212),\n    [sym_conditional_type] = STATE(2278),\n    [sym_generic_type] = STATE(2278),\n    [sym_type_query] = STATE(2278),\n    [sym_index_type_query] = STATE(2278),\n    [sym_lookup_type] = STATE(2278),\n    [sym_literal_type] = STATE(2278),\n    [sym__number] = STATE(2279),\n    [sym_existential_type] = STATE(2278),\n    [sym_flow_maybe_type] = STATE(2278),\n    [sym_parenthesized_type] = STATE(2278),\n    [sym_predefined_type] = STATE(2278),\n    [sym_object_type] = STATE(2278),\n    [sym_type_parameters] = STATE(3378),\n    [sym_array_type] = STATE(2278),\n    [sym_tuple_type] = STATE(2278),\n    [sym_readonly_type] = STATE(2212),\n    [sym_union_type] = STATE(2278),\n    [sym_intersection_type] = STATE(2278),\n    [sym_function_type] = STATE(2212),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(735),\n    [anon_sym_LBRACE] = ACTIONS(1258),\n    [anon_sym_typeof] = ACTIONS(1260),\n    [anon_sym_LPAREN] = ACTIONS(1262),\n    [anon_sym_LBRACK] = ACTIONS(1264),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1266),\n    [anon_sym_AMP] = ACTIONS(747),\n    [anon_sym_PIPE] = ACTIONS(749),\n    [anon_sym_PLUS] = ACTIONS(2414),\n    [anon_sym_DASH] = ACTIONS(2414),\n    [anon_sym_void] = ACTIONS(777),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_number] = ACTIONS(1280),\n    [sym_this] = ACTIONS(1282),\n    [sym_true] = ACTIONS(1284),\n    [sym_false] = ACTIONS(1284),\n    [sym_null] = ACTIONS(1284),\n    [sym_undefined] = ACTIONS(1284),\n    [anon_sym_QMARK] = ACTIONS(765),\n    [anon_sym_readonly] = ACTIONS(1288),\n    [anon_sym_any] = ACTIONS(777),\n    [anon_sym_number] = ACTIONS(777),\n    [anon_sym_int] = ACTIONS(777),\n    [anon_sym_float] = ACTIONS(777),\n    [anon_sym_float2] = ACTIONS(777),\n    [anon_sym_float3] = ACTIONS(777),\n    [anon_sym_float4] = ACTIONS(777),\n    [anon_sym_float3x3] = ACTIONS(777),\n    [anon_sym_float2x2] = ACTIONS(777),\n    [anon_sym_float4x4] = ACTIONS(777),\n    [anon_sym_int2] = ACTIONS(777),\n    [anon_sym_int3] = ACTIONS(777),\n    [anon_sym_int4] = ACTIONS(777),\n    [anon_sym_int3x3] = ACTIONS(777),\n    [anon_sym_int2x2] = ACTIONS(777),\n    [anon_sym_int4x4] = ACTIONS(777),\n    [anon_sym_boolean] = ACTIONS(777),\n    [anon_sym_string] = ACTIONS(777),\n    [anon_sym_symbol] = ACTIONS(777),\n    [anon_sym_abstract] = ACTIONS(771),\n    [anon_sym_infer] = ACTIONS(773),\n    [anon_sym_keyof] = ACTIONS(775),\n    [anon_sym_unknown] = ACTIONS(777),\n    [anon_sym_never] = ACTIONS(777),\n    [anon_sym_object] = ACTIONS(777),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(779),\n  },\n  [866] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2154),\n    [sym_constructor_type] = STATE(2154),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2154),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2154),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2154),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [867] = {\n    [sym_nested_identifier] = STATE(3453),\n    [sym_string] = STATE(2188),\n    [sym_formal_parameters] = STATE(3452),\n    [sym_nested_type_identifier] = STATE(2131),\n    [sym__type] = STATE(2197),\n    [sym_constructor_type] = STATE(2197),\n    [sym__primary_type] = STATE(2150),\n    [sym_template_literal_type] = STATE(2184),\n    [sym_infer_type] = STATE(2197),\n    [sym_conditional_type] = STATE(2184),\n    [sym_generic_type] = STATE(2184),\n    [sym_type_query] = STATE(2184),\n    [sym_index_type_query] = STATE(2184),\n    [sym_lookup_type] = STATE(2184),\n    [sym_literal_type] = STATE(2184),\n    [sym__number] = STATE(2164),\n    [sym_existential_type] = STATE(2184),\n    [sym_flow_maybe_type] = STATE(2184),\n    [sym_parenthesized_type] = STATE(2184),\n    [sym_predefined_type] = STATE(2184),\n    [sym_object_type] = STATE(2184),\n    [sym_type_parameters] = STATE(3351),\n    [sym_array_type] = STATE(2184),\n    [sym_tuple_type] = STATE(2184),\n    [sym_readonly_type] = STATE(2197),\n    [sym_union_type] = STATE(2184),\n    [sym_intersection_type] = STATE(2184),\n    [sym_function_type] = STATE(2197),\n    [sym_identifier] = ACTIONS(1171),\n    [anon_sym_STAR] = ACTIONS(623),\n    [anon_sym_LBRACE] = ACTIONS(1175),\n    [anon_sym_typeof] = ACTIONS(1177),\n    [anon_sym_LPAREN] = ACTIONS(1179),\n    [anon_sym_LBRACK] = ACTIONS(1181),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_new] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(649),\n    [anon_sym_PIPE] = ACTIONS(651),\n    [anon_sym_PLUS] = ACTIONS(2230),\n    [anon_sym_DASH] = ACTIONS(2230),\n    [anon_sym_void] = ACTIONS(215),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(1193),\n    [sym_number] = ACTIONS(1195),\n    [sym_this] = ACTIONS(1197),\n    [sym_true] = ACTIONS(1199),\n    [sym_false] = ACTIONS(1199),\n    [sym_null] = ACTIONS(1199),\n    [sym_undefined] = ACTIONS(1199),\n    [anon_sym_QMARK] = ACTIONS(665),\n    [anon_sym_readonly] = ACTIONS(1201),\n    [anon_sym_any] = ACTIONS(215),\n    [anon_sym_number] = ACTIONS(215),\n    [anon_sym_int] = ACTIONS(215),\n    [anon_sym_float] = ACTIONS(215),\n    [anon_sym_float2] = ACTIONS(215),\n    [anon_sym_float3] = ACTIONS(215),\n    [anon_sym_float4] = ACTIONS(215),\n    [anon_sym_float3x3] = ACTIONS(215),\n    [anon_sym_float2x2] = ACTIONS(215),\n    [anon_sym_float4x4] = ACTIONS(215),\n    [anon_sym_int2] = ACTIONS(215),\n    [anon_sym_int3] = ACTIONS(215),\n    [anon_sym_int4] = ACTIONS(215),\n    [anon_sym_int3x3] = ACTIONS(215),\n    [anon_sym_int2x2] = ACTIONS(215),\n    [anon_sym_int4x4] = ACTIONS(215),\n    [anon_sym_boolean] = ACTIONS(215),\n    [anon_sym_string] = ACTIONS(215),\n    [anon_sym_symbol] = ACTIONS(215),\n    [anon_sym_abstract] = ACTIONS(207),\n    [anon_sym_infer] = ACTIONS(211),\n    [anon_sym_keyof] = ACTIONS(213),\n    [anon_sym_unknown] = ACTIONS(215),\n    [anon_sym_never] = ACTIONS(215),\n    [anon_sym_object] = ACTIONS(215),\n    [anon_sym_LBRACE_PIPE] = ACTIONS(217),\n  },\n  [868] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3341),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3339),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3341),\n    [sym_method_definition] = STATE(3339),\n    [sym_pair] = STATE(3339),\n    [sym_pair_pattern] = STATE(3341),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2656),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2656),\n    [sym_property_signature] = STATE(2656),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2656),\n    [sym_index_signature] = STATE(2656),\n    [sym_identifier] = ACTIONS(2608),\n    [anon_sym_pub] = ACTIONS(2610),\n    [anon_sym_export] = ACTIONS(2608),\n    [anon_sym_type] = ACTIONS(2608),\n    [anon_sym_namespace] = ACTIONS(2608),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2612),\n    [anon_sym_RBRACE] = ACTIONS(2612),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2608),\n    [anon_sym_async] = ACTIONS(2608),\n    [anon_sym_fn] = ACTIONS(2615),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2617),\n    [anon_sym_declare] = ACTIONS(2608),\n    [anon_sym_public] = ACTIONS(2608),\n    [anon_sym_private] = ACTIONS(2608),\n    [anon_sym_protected] = ACTIONS(2608),\n    [anon_sym_override] = ACTIONS(2619),\n    [anon_sym_readonly] = ACTIONS(2621),\n    [anon_sym_module] = ACTIONS(2608),\n    [anon_sym_any] = ACTIONS(2608),\n    [anon_sym_number] = ACTIONS(2608),\n    [anon_sym_int] = ACTIONS(2608),\n    [anon_sym_float] = ACTIONS(2608),\n    [anon_sym_float2] = ACTIONS(2608),\n    [anon_sym_float3] = ACTIONS(2608),\n    [anon_sym_float4] = ACTIONS(2608),\n    [anon_sym_float3x3] = ACTIONS(2608),\n    [anon_sym_float2x2] = ACTIONS(2608),\n    [anon_sym_float4x4] = ACTIONS(2608),\n    [anon_sym_int2] = ACTIONS(2608),\n    [anon_sym_int3] = ACTIONS(2608),\n    [anon_sym_int4] = ACTIONS(2608),\n    [anon_sym_int3x3] = ACTIONS(2608),\n    [anon_sym_int2x2] = ACTIONS(2608),\n    [anon_sym_int4x4] = ACTIONS(2608),\n    [anon_sym_boolean] = ACTIONS(2608),\n    [anon_sym_string] = ACTIONS(2608),\n    [anon_sym_symbol] = ACTIONS(2608),\n    [anon_sym_workgroup] = ACTIONS(2608),\n    [anon_sym_get] = ACTIONS(2608),\n    [anon_sym_set] = ACTIONS(2608),\n    [anon_sym_abstract] = ACTIONS(2326),\n  },\n  [869] = {\n    [sym_object_pattern] = STATE(3468),\n    [sym_object_assignment_pattern] = STATE(3341),\n    [sym_array_pattern] = STATE(3468),\n    [sym__call_signature] = STATE(2736),\n    [sym__destructuring_pattern] = STATE(3468),\n    [sym_spread_element] = STATE(3339),\n    [sym_string] = STATE(2405),\n    [sym_formal_parameters] = STATE(2309),\n    [sym_rest_pattern] = STATE(3341),\n    [sym_method_definition] = STATE(3339),\n    [sym_pair] = STATE(3339),\n    [sym_pair_pattern] = STATE(3341),\n    [sym__property_name] = STATE(2405),\n    [sym_computed_property_name] = STATE(2405),\n    [sym_method_signature] = STATE(2529),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(2963),\n    [sym_override_modifier] = STATE(1273),\n    [sym_call_signature] = STATE(2529),\n    [sym_property_signature] = STATE(2529),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2529),\n    [sym_index_signature] = STATE(2529),\n    [sym_identifier] = ACTIONS(2608),\n    [anon_sym_pub] = ACTIONS(2610),\n    [anon_sym_export] = ACTIONS(2608),\n    [anon_sym_type] = ACTIONS(2608),\n    [anon_sym_namespace] = ACTIONS(2608),\n    [anon_sym_LBRACE] = ACTIONS(2300),\n    [anon_sym_COMMA] = ACTIONS(2612),\n    [anon_sym_RBRACE] = ACTIONS(2612),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2310),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2608),\n    [anon_sym_async] = ACTIONS(2608),\n    [anon_sym_fn] = ACTIONS(2615),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(250),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2318),\n    [sym_private_property_identifier] = ACTIONS(2318),\n    [anon_sym_static] = ACTIONS(2617),\n    [anon_sym_declare] = ACTIONS(2608),\n    [anon_sym_public] = ACTIONS(2608),\n    [anon_sym_private] = ACTIONS(2608),\n    [anon_sym_protected] = ACTIONS(2608),\n    [anon_sym_override] = ACTIONS(2619),\n    [anon_sym_readonly] = ACTIONS(2621),\n    [anon_sym_module] = ACTIONS(2608),\n    [anon_sym_any] = ACTIONS(2608),\n    [anon_sym_number] = ACTIONS(2608),\n    [anon_sym_int] = ACTIONS(2608),\n    [anon_sym_float] = ACTIONS(2608),\n    [anon_sym_float2] = ACTIONS(2608),\n    [anon_sym_float3] = ACTIONS(2608),\n    [anon_sym_float4] = ACTIONS(2608),\n    [anon_sym_float3x3] = ACTIONS(2608),\n    [anon_sym_float2x2] = ACTIONS(2608),\n    [anon_sym_float4x4] = ACTIONS(2608),\n    [anon_sym_int2] = ACTIONS(2608),\n    [anon_sym_int3] = ACTIONS(2608),\n    [anon_sym_int4] = ACTIONS(2608),\n    [anon_sym_int3x3] = ACTIONS(2608),\n    [anon_sym_int2x2] = ACTIONS(2608),\n    [anon_sym_int4x4] = ACTIONS(2608),\n    [anon_sym_boolean] = ACTIONS(2608),\n    [anon_sym_string] = ACTIONS(2608),\n    [anon_sym_symbol] = ACTIONS(2608),\n    [anon_sym_workgroup] = ACTIONS(2608),\n    [anon_sym_get] = ACTIONS(2608),\n    [anon_sym_set] = ACTIONS(2608),\n    [anon_sym_abstract] = ACTIONS(2326),\n  },\n  [870] = {\n    [sym_arguments] = STATE(875),\n    [sym_identifier] = ACTIONS(2623),\n    [anon_sym_pub] = ACTIONS(2623),\n    [anon_sym_export] = ACTIONS(2623),\n    [anon_sym_type] = ACTIONS(2623),\n    [anon_sym_namespace] = ACTIONS(2623),\n    [anon_sym_LBRACE] = ACTIONS(2625),\n    [anon_sym_typeof] = ACTIONS(2623),\n    [anon_sym_import] = ACTIONS(2623),\n    [anon_sym_BANG] = ACTIONS(2625),\n    [anon_sym_LPAREN] = ACTIONS(2627),\n    [anon_sym_await] = ACTIONS(2623),\n    [anon_sym_yield] = ACTIONS(2623),\n    [anon_sym_LBRACK] = ACTIONS(2625),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2625),\n    [anon_sym_LT] = ACTIONS(2623),\n    [anon_sym_SLASH] = ACTIONS(2623),\n    [anon_sym_DOT] = ACTIONS(2629),\n    [anon_sym_struct] = ACTIONS(2623),\n    [anon_sym_async] = ACTIONS(2623),\n    [anon_sym_fn] = ACTIONS(2623),\n    [anon_sym_fn_STAR] = ACTIONS(2625),\n    [anon_sym_new] = ACTIONS(2623),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2625),\n    [anon_sym_PLUS] = ACTIONS(2623),\n    [anon_sym_DASH] = ACTIONS(2623),\n    [anon_sym_TILDE] = ACTIONS(2625),\n    [anon_sym_void] = ACTIONS(2623),\n    [anon_sym_delete] = ACTIONS(2623),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2625),\n    [anon_sym_DASH_DASH] = ACTIONS(2625),\n    [anon_sym_DQUOTE] = ACTIONS(2625),\n    [anon_sym_SQUOTE] = ACTIONS(2625),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2625),\n    [sym_number] = ACTIONS(2625),\n    [sym_this] = ACTIONS(2623),\n    [sym_super] = ACTIONS(2623),\n    [sym_true] = ACTIONS(2623),\n    [sym_false] = ACTIONS(2623),\n    [sym_null] = ACTIONS(2623),\n    [sym_undefined] = ACTIONS(2623),\n    [anon_sym_AT] = ACTIONS(2625),\n    [anon_sym_static] = ACTIONS(2623),\n    [anon_sym_declare] = ACTIONS(2623),\n    [anon_sym_public] = ACTIONS(2623),\n    [anon_sym_private] = ACTIONS(2623),\n    [anon_sym_protected] = ACTIONS(2623),\n    [anon_sym_override] = ACTIONS(2623),\n    [anon_sym_readonly] = ACTIONS(2623),\n    [anon_sym_module] = ACTIONS(2623),\n    [anon_sym_any] = ACTIONS(2623),\n    [anon_sym_number] = ACTIONS(2623),\n    [anon_sym_int] = ACTIONS(2623),\n    [anon_sym_float] = ACTIONS(2623),\n    [anon_sym_float2] = ACTIONS(2623),\n    [anon_sym_float3] = ACTIONS(2623),\n    [anon_sym_float4] = ACTIONS(2623),\n    [anon_sym_float3x3] = ACTIONS(2623),\n    [anon_sym_float2x2] = ACTIONS(2623),\n    [anon_sym_float4x4] = ACTIONS(2623),\n    [anon_sym_int2] = ACTIONS(2623),\n    [anon_sym_int3] = ACTIONS(2623),\n    [anon_sym_int4] = ACTIONS(2623),\n    [anon_sym_int3x3] = ACTIONS(2623),\n    [anon_sym_int2x2] = ACTIONS(2623),\n    [anon_sym_int4x4] = ACTIONS(2623),\n    [anon_sym_boolean] = ACTIONS(2623),\n    [anon_sym_string] = ACTIONS(2623),\n    [anon_sym_symbol] = ACTIONS(2623),\n    [anon_sym_workgroup] = ACTIONS(2623),\n    [anon_sym_get] = ACTIONS(2623),\n    [anon_sym_set] = ACTIONS(2623),\n    [anon_sym_shader] = ACTIONS(2623),\n  },\n  [871] = {\n    [sym_decorator] = STATE(873),\n    [aux_sym_class_repeat1] = STATE(871),\n    [sym_identifier] = ACTIONS(2631),\n    [anon_sym_pub] = ACTIONS(2631),\n    [anon_sym_export] = ACTIONS(2631),\n    [anon_sym_type] = ACTIONS(2631),\n    [anon_sym_namespace] = ACTIONS(2631),\n    [anon_sym_LBRACE] = ACTIONS(2633),\n    [anon_sym_typeof] = ACTIONS(2631),\n    [anon_sym_import] = ACTIONS(2631),\n    [anon_sym_BANG] = ACTIONS(2633),\n    [anon_sym_LPAREN] = ACTIONS(2633),\n    [anon_sym_await] = ACTIONS(2631),\n    [anon_sym_yield] = ACTIONS(2631),\n    [anon_sym_LBRACK] = ACTIONS(2633),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2633),\n    [anon_sym_LT] = ACTIONS(2631),\n    [anon_sym_SLASH] = ACTIONS(2631),\n    [anon_sym_struct] = ACTIONS(2631),\n    [anon_sym_async] = ACTIONS(2631),\n    [anon_sym_fn] = ACTIONS(2631),\n    [anon_sym_fn_STAR] = ACTIONS(2633),\n    [anon_sym_new] = ACTIONS(2631),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2633),\n    [anon_sym_PLUS] = ACTIONS(2631),\n    [anon_sym_DASH] = ACTIONS(2631),\n    [anon_sym_TILDE] = ACTIONS(2633),\n    [anon_sym_void] = ACTIONS(2631),\n    [anon_sym_delete] = ACTIONS(2631),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2633),\n    [anon_sym_DASH_DASH] = ACTIONS(2633),\n    [anon_sym_DQUOTE] = ACTIONS(2633),\n    [anon_sym_SQUOTE] = ACTIONS(2633),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2633),\n    [sym_number] = ACTIONS(2633),\n    [sym_this] = ACTIONS(2631),\n    [sym_super] = ACTIONS(2631),\n    [sym_true] = ACTIONS(2631),\n    [sym_false] = ACTIONS(2631),\n    [sym_null] = ACTIONS(2631),\n    [sym_undefined] = ACTIONS(2631),\n    [anon_sym_AT] = ACTIONS(2635),\n    [anon_sym_static] = ACTIONS(2631),\n    [anon_sym_declare] = ACTIONS(2631),\n    [anon_sym_public] = ACTIONS(2631),\n    [anon_sym_private] = ACTIONS(2631),\n    [anon_sym_protected] = ACTIONS(2631),\n    [anon_sym_override] = ACTIONS(2631),\n    [anon_sym_readonly] = ACTIONS(2631),\n    [anon_sym_module] = ACTIONS(2631),\n    [anon_sym_any] = ACTIONS(2631),\n    [anon_sym_number] = ACTIONS(2631),\n    [anon_sym_int] = ACTIONS(2631),\n    [anon_sym_float] = ACTIONS(2631),\n    [anon_sym_float2] = ACTIONS(2631),\n    [anon_sym_float3] = ACTIONS(2631),\n    [anon_sym_float4] = ACTIONS(2631),\n    [anon_sym_float3x3] = ACTIONS(2631),\n    [anon_sym_float2x2] = ACTIONS(2631),\n    [anon_sym_float4x4] = ACTIONS(2631),\n    [anon_sym_int2] = ACTIONS(2631),\n    [anon_sym_int3] = ACTIONS(2631),\n    [anon_sym_int4] = ACTIONS(2631),\n    [anon_sym_int3x3] = ACTIONS(2631),\n    [anon_sym_int2x2] = ACTIONS(2631),\n    [anon_sym_int4x4] = ACTIONS(2631),\n    [anon_sym_boolean] = ACTIONS(2631),\n    [anon_sym_string] = ACTIONS(2631),\n    [anon_sym_symbol] = ACTIONS(2631),\n    [anon_sym_workgroup] = ACTIONS(2631),\n    [anon_sym_get] = ACTIONS(2631),\n    [anon_sym_set] = ACTIONS(2631),\n    [anon_sym_shader] = ACTIONS(2631),\n  },\n  [872] = {\n    [sym_identifier] = ACTIONS(2638),\n    [anon_sym_pub] = ACTIONS(2638),\n    [anon_sym_export] = ACTIONS(2638),\n    [anon_sym_type] = ACTIONS(2638),\n    [anon_sym_namespace] = ACTIONS(2638),\n    [anon_sym_LBRACE] = ACTIONS(2640),\n    [anon_sym_typeof] = ACTIONS(2638),\n    [anon_sym_import] = ACTIONS(2638),\n    [anon_sym_BANG] = ACTIONS(2640),\n    [anon_sym_LPAREN] = ACTIONS(2640),\n    [anon_sym_await] = ACTIONS(2638),\n    [anon_sym_yield] = ACTIONS(2638),\n    [anon_sym_LBRACK] = ACTIONS(2640),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2640),\n    [anon_sym_LT] = ACTIONS(2638),\n    [anon_sym_SLASH] = ACTIONS(2638),\n    [anon_sym_DOT] = ACTIONS(2638),\n    [anon_sym_struct] = ACTIONS(2638),\n    [anon_sym_async] = ACTIONS(2638),\n    [anon_sym_fn] = ACTIONS(2638),\n    [anon_sym_fn_STAR] = ACTIONS(2640),\n    [anon_sym_new] = ACTIONS(2638),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2640),\n    [anon_sym_PLUS] = ACTIONS(2638),\n    [anon_sym_DASH] = ACTIONS(2638),\n    [anon_sym_TILDE] = ACTIONS(2640),\n    [anon_sym_void] = ACTIONS(2638),\n    [anon_sym_delete] = ACTIONS(2638),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2640),\n    [anon_sym_DASH_DASH] = ACTIONS(2640),\n    [anon_sym_DQUOTE] = ACTIONS(2640),\n    [anon_sym_SQUOTE] = ACTIONS(2640),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2640),\n    [sym_number] = ACTIONS(2640),\n    [sym_this] = ACTIONS(2638),\n    [sym_super] = ACTIONS(2638),\n    [sym_true] = ACTIONS(2638),\n    [sym_false] = ACTIONS(2638),\n    [sym_null] = ACTIONS(2638),\n    [sym_undefined] = ACTIONS(2638),\n    [anon_sym_AT] = ACTIONS(2640),\n    [anon_sym_static] = ACTIONS(2638),\n    [anon_sym_declare] = ACTIONS(2638),\n    [anon_sym_public] = ACTIONS(2638),\n    [anon_sym_private] = ACTIONS(2638),\n    [anon_sym_protected] = ACTIONS(2638),\n    [anon_sym_override] = ACTIONS(2638),\n    [anon_sym_readonly] = ACTIONS(2638),\n    [anon_sym_module] = ACTIONS(2638),\n    [anon_sym_any] = ACTIONS(2638),\n    [anon_sym_number] = ACTIONS(2638),\n    [anon_sym_int] = ACTIONS(2638),\n    [anon_sym_float] = ACTIONS(2638),\n    [anon_sym_float2] = ACTIONS(2638),\n    [anon_sym_float3] = ACTIONS(2638),\n    [anon_sym_float4] = ACTIONS(2638),\n    [anon_sym_float3x3] = ACTIONS(2638),\n    [anon_sym_float2x2] = ACTIONS(2638),\n    [anon_sym_float4x4] = ACTIONS(2638),\n    [anon_sym_int2] = ACTIONS(2638),\n    [anon_sym_int3] = ACTIONS(2638),\n    [anon_sym_int4] = ACTIONS(2638),\n    [anon_sym_int3x3] = ACTIONS(2638),\n    [anon_sym_int2x2] = ACTIONS(2638),\n    [anon_sym_int4x4] = ACTIONS(2638),\n    [anon_sym_boolean] = ACTIONS(2638),\n    [anon_sym_string] = ACTIONS(2638),\n    [anon_sym_symbol] = ACTIONS(2638),\n    [anon_sym_workgroup] = ACTIONS(2638),\n    [anon_sym_get] = ACTIONS(2638),\n    [anon_sym_set] = ACTIONS(2638),\n    [anon_sym_shader] = ACTIONS(2638),\n  },\n  [873] = {\n    [sym_identifier] = ACTIONS(2642),\n    [anon_sym_pub] = ACTIONS(2642),\n    [anon_sym_export] = ACTIONS(2642),\n    [anon_sym_type] = ACTIONS(2642),\n    [anon_sym_namespace] = ACTIONS(2642),\n    [anon_sym_LBRACE] = ACTIONS(2644),\n    [anon_sym_typeof] = ACTIONS(2642),\n    [anon_sym_import] = ACTIONS(2642),\n    [anon_sym_BANG] = ACTIONS(2644),\n    [anon_sym_LPAREN] = ACTIONS(2644),\n    [anon_sym_await] = ACTIONS(2642),\n    [anon_sym_yield] = ACTIONS(2642),\n    [anon_sym_LBRACK] = ACTIONS(2644),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2644),\n    [anon_sym_LT] = ACTIONS(2642),\n    [anon_sym_SLASH] = ACTIONS(2642),\n    [anon_sym_struct] = ACTIONS(2642),\n    [anon_sym_async] = ACTIONS(2642),\n    [anon_sym_fn] = ACTIONS(2642),\n    [anon_sym_fn_STAR] = ACTIONS(2644),\n    [anon_sym_new] = ACTIONS(2642),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2644),\n    [anon_sym_PLUS] = ACTIONS(2642),\n    [anon_sym_DASH] = ACTIONS(2642),\n    [anon_sym_TILDE] = ACTIONS(2644),\n    [anon_sym_void] = ACTIONS(2642),\n    [anon_sym_delete] = ACTIONS(2642),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2644),\n    [anon_sym_DASH_DASH] = ACTIONS(2644),\n    [anon_sym_DQUOTE] = ACTIONS(2644),\n    [anon_sym_SQUOTE] = ACTIONS(2644),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2644),\n    [sym_number] = ACTIONS(2644),\n    [sym_this] = ACTIONS(2642),\n    [sym_super] = ACTIONS(2642),\n    [sym_true] = ACTIONS(2642),\n    [sym_false] = ACTIONS(2642),\n    [sym_null] = ACTIONS(2642),\n    [sym_undefined] = ACTIONS(2642),\n    [anon_sym_AT] = ACTIONS(2644),\n    [anon_sym_static] = ACTIONS(2642),\n    [anon_sym_declare] = ACTIONS(2642),\n    [anon_sym_public] = ACTIONS(2642),\n    [anon_sym_private] = ACTIONS(2642),\n    [anon_sym_protected] = ACTIONS(2642),\n    [anon_sym_override] = ACTIONS(2642),\n    [anon_sym_readonly] = ACTIONS(2642),\n    [anon_sym_module] = ACTIONS(2642),\n    [anon_sym_any] = ACTIONS(2642),\n    [anon_sym_number] = ACTIONS(2642),\n    [anon_sym_int] = ACTIONS(2642),\n    [anon_sym_float] = ACTIONS(2642),\n    [anon_sym_float2] = ACTIONS(2642),\n    [anon_sym_float3] = ACTIONS(2642),\n    [anon_sym_float4] = ACTIONS(2642),\n    [anon_sym_float3x3] = ACTIONS(2642),\n    [anon_sym_float2x2] = ACTIONS(2642),\n    [anon_sym_float4x4] = ACTIONS(2642),\n    [anon_sym_int2] = ACTIONS(2642),\n    [anon_sym_int3] = ACTIONS(2642),\n    [anon_sym_int4] = ACTIONS(2642),\n    [anon_sym_int3x3] = ACTIONS(2642),\n    [anon_sym_int2x2] = ACTIONS(2642),\n    [anon_sym_int4x4] = ACTIONS(2642),\n    [anon_sym_boolean] = ACTIONS(2642),\n    [anon_sym_string] = ACTIONS(2642),\n    [anon_sym_symbol] = ACTIONS(2642),\n    [anon_sym_workgroup] = ACTIONS(2642),\n    [anon_sym_get] = ACTIONS(2642),\n    [anon_sym_set] = ACTIONS(2642),\n    [anon_sym_shader] = ACTIONS(2642),\n  },\n  [874] = {\n    [sym_identifier] = ACTIONS(2623),\n    [anon_sym_pub] = ACTIONS(2623),\n    [anon_sym_export] = ACTIONS(2623),\n    [anon_sym_type] = ACTIONS(2623),\n    [anon_sym_namespace] = ACTIONS(2623),\n    [anon_sym_LBRACE] = ACTIONS(2625),\n    [anon_sym_typeof] = ACTIONS(2623),\n    [anon_sym_import] = ACTIONS(2623),\n    [anon_sym_BANG] = ACTIONS(2625),\n    [anon_sym_LPAREN] = ACTIONS(2625),\n    [anon_sym_await] = ACTIONS(2623),\n    [anon_sym_yield] = ACTIONS(2623),\n    [anon_sym_LBRACK] = ACTIONS(2625),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2625),\n    [anon_sym_LT] = ACTIONS(2623),\n    [anon_sym_SLASH] = ACTIONS(2623),\n    [anon_sym_struct] = ACTIONS(2623),\n    [anon_sym_async] = ACTIONS(2623),\n    [anon_sym_fn] = ACTIONS(2623),\n    [anon_sym_fn_STAR] = ACTIONS(2625),\n    [anon_sym_new] = ACTIONS(2623),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2625),\n    [anon_sym_PLUS] = ACTIONS(2623),\n    [anon_sym_DASH] = ACTIONS(2623),\n    [anon_sym_TILDE] = ACTIONS(2625),\n    [anon_sym_void] = ACTIONS(2623),\n    [anon_sym_delete] = ACTIONS(2623),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2625),\n    [anon_sym_DASH_DASH] = ACTIONS(2625),\n    [anon_sym_DQUOTE] = ACTIONS(2625),\n    [anon_sym_SQUOTE] = ACTIONS(2625),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2625),\n    [sym_number] = ACTIONS(2625),\n    [sym_this] = ACTIONS(2623),\n    [sym_super] = ACTIONS(2623),\n    [sym_true] = ACTIONS(2623),\n    [sym_false] = ACTIONS(2623),\n    [sym_null] = ACTIONS(2623),\n    [sym_undefined] = ACTIONS(2623),\n    [anon_sym_AT] = ACTIONS(2625),\n    [anon_sym_static] = ACTIONS(2623),\n    [anon_sym_declare] = ACTIONS(2623),\n    [anon_sym_public] = ACTIONS(2623),\n    [anon_sym_private] = ACTIONS(2623),\n    [anon_sym_protected] = ACTIONS(2623),\n    [anon_sym_override] = ACTIONS(2623),\n    [anon_sym_readonly] = ACTIONS(2623),\n    [anon_sym_module] = ACTIONS(2623),\n    [anon_sym_any] = ACTIONS(2623),\n    [anon_sym_number] = ACTIONS(2623),\n    [anon_sym_int] = ACTIONS(2623),\n    [anon_sym_float] = ACTIONS(2623),\n    [anon_sym_float2] = ACTIONS(2623),\n    [anon_sym_float3] = ACTIONS(2623),\n    [anon_sym_float4] = ACTIONS(2623),\n    [anon_sym_float3x3] = ACTIONS(2623),\n    [anon_sym_float2x2] = ACTIONS(2623),\n    [anon_sym_float4x4] = ACTIONS(2623),\n    [anon_sym_int2] = ACTIONS(2623),\n    [anon_sym_int3] = ACTIONS(2623),\n    [anon_sym_int4] = ACTIONS(2623),\n    [anon_sym_int3x3] = ACTIONS(2623),\n    [anon_sym_int2x2] = ACTIONS(2623),\n    [anon_sym_int4x4] = ACTIONS(2623),\n    [anon_sym_boolean] = ACTIONS(2623),\n    [anon_sym_string] = ACTIONS(2623),\n    [anon_sym_symbol] = ACTIONS(2623),\n    [anon_sym_workgroup] = ACTIONS(2623),\n    [anon_sym_get] = ACTIONS(2623),\n    [anon_sym_set] = ACTIONS(2623),\n    [anon_sym_shader] = ACTIONS(2623),\n  },\n  [875] = {\n    [sym_identifier] = ACTIONS(2646),\n    [anon_sym_pub] = ACTIONS(2646),\n    [anon_sym_export] = ACTIONS(2646),\n    [anon_sym_type] = ACTIONS(2646),\n    [anon_sym_namespace] = ACTIONS(2646),\n    [anon_sym_LBRACE] = ACTIONS(2648),\n    [anon_sym_typeof] = ACTIONS(2646),\n    [anon_sym_import] = ACTIONS(2646),\n    [anon_sym_BANG] = ACTIONS(2648),\n    [anon_sym_LPAREN] = ACTIONS(2648),\n    [anon_sym_await] = ACTIONS(2646),\n    [anon_sym_yield] = ACTIONS(2646),\n    [anon_sym_LBRACK] = ACTIONS(2648),\n    [anon_sym_LTtemplate_GT] = ACTIONS(2648),\n    [anon_sym_LT] = ACTIONS(2646),\n    [anon_sym_SLASH] = ACTIONS(2646),\n    [anon_sym_struct] = ACTIONS(2646),\n    [anon_sym_async] = ACTIONS(2646),\n    [anon_sym_fn] = ACTIONS(2646),\n    [anon_sym_fn_STAR] = ACTIONS(2648),\n    [anon_sym_new] = ACTIONS(2646),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(2648),\n    [anon_sym_PLUS] = ACTIONS(2646),\n    [anon_sym_DASH] = ACTIONS(2646),\n    [anon_sym_TILDE] = ACTIONS(2648),\n    [anon_sym_void] = ACTIONS(2646),\n    [anon_sym_delete] = ACTIONS(2646),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2648),\n    [anon_sym_DASH_DASH] = ACTIONS(2648),\n    [anon_sym_DQUOTE] = ACTIONS(2648),\n    [anon_sym_SQUOTE] = ACTIONS(2648),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(2648),\n    [sym_number] = ACTIONS(2648),\n    [sym_this] = ACTIONS(2646),\n    [sym_super] = ACTIONS(2646),\n    [sym_true] = ACTIONS(2646),\n    [sym_false] = ACTIONS(2646),\n    [sym_null] = ACTIONS(2646),\n    [sym_undefined] = ACTIONS(2646),\n    [anon_sym_AT] = ACTIONS(2648),\n    [anon_sym_static] = ACTIONS(2646),\n    [anon_sym_declare] = ACTIONS(2646),\n    [anon_sym_public] = ACTIONS(2646),\n    [anon_sym_private] = ACTIONS(2646),\n    [anon_sym_protected] = ACTIONS(2646),\n    [anon_sym_override] = ACTIONS(2646),\n    [anon_sym_readonly] = ACTIONS(2646),\n    [anon_sym_module] = ACTIONS(2646),\n    [anon_sym_any] = ACTIONS(2646),\n    [anon_sym_number] = ACTIONS(2646),\n    [anon_sym_int] = ACTIONS(2646),\n    [anon_sym_float] = ACTIONS(2646),\n    [anon_sym_float2] = ACTIONS(2646),\n    [anon_sym_float3] = ACTIONS(2646),\n    [anon_sym_float4] = ACTIONS(2646),\n    [anon_sym_float3x3] = ACTIONS(2646),\n    [anon_sym_float2x2] = ACTIONS(2646),\n    [anon_sym_float4x4] = ACTIONS(2646),\n    [anon_sym_int2] = ACTIONS(2646),\n    [anon_sym_int3] = ACTIONS(2646),\n    [anon_sym_int4] = ACTIONS(2646),\n    [anon_sym_int3x3] = ACTIONS(2646),\n    [anon_sym_int2x2] = ACTIONS(2646),\n    [anon_sym_int4x4] = ACTIONS(2646),\n    [anon_sym_boolean] = ACTIONS(2646),\n    [anon_sym_string] = ACTIONS(2646),\n    [anon_sym_symbol] = ACTIONS(2646),\n    [anon_sym_workgroup] = ACTIONS(2646),\n    [anon_sym_get] = ACTIONS(2646),\n    [anon_sym_set] = ACTIONS(2646),\n    [anon_sym_shader] = ACTIONS(2646),\n  },\n  [876] = {\n    [sym_nested_identifier] = STATE(120),\n    [sym_string] = STATE(123),\n    [sym__module] = STATE(136),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(2650),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2652),\n    [anon_sym_SQUOTE] = ACTIONS(2654),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [877] = {\n    [sym_nested_identifier] = STATE(120),\n    [sym_string] = STATE(123),\n    [sym__module] = STATE(136),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(2650),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2652),\n    [anon_sym_SQUOTE] = ACTIONS(2654),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [878] = {\n    [sym_nested_identifier] = STATE(504),\n    [sym_string] = STATE(526),\n    [sym__module] = STATE(541),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(2656),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2658),\n    [anon_sym_SQUOTE] = ACTIONS(2660),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [879] = {\n    [sym_nested_identifier] = STATE(120),\n    [sym_string] = STATE(123),\n    [sym__module] = STATE(136),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(2650),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2652),\n    [anon_sym_SQUOTE] = ACTIONS(2654),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [880] = {\n    [sym_nested_identifier] = STATE(504),\n    [sym_string] = STATE(526),\n    [sym__module] = STATE(541),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(2656),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2658),\n    [anon_sym_SQUOTE] = ACTIONS(2660),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [881] = {\n    [sym_nested_identifier] = STATE(504),\n    [sym_string] = STATE(526),\n    [sym__module] = STATE(541),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [sym_identifier] = ACTIONS(2656),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2658),\n    [anon_sym_SQUOTE] = ACTIONS(2660),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [882] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(1731),\n    [anon_sym_RBRACE] = ACTIONS(1731),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_RPAREN] = ACTIONS(1731),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(1731),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_QMARK] = ACTIONS(1244),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [883] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2589),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2589),\n    [sym_property_signature] = STATE(2589),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2589),\n    [sym_index_signature] = STATE(2589),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_COMMA] = ACTIONS(2384),\n    [anon_sym_RBRACE] = ACTIONS(2394),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2384),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2394),\n  },\n  [884] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2539),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2539),\n    [sym_property_signature] = STATE(2539),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2539),\n    [sym_index_signature] = STATE(2539),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_COMMA] = ACTIONS(2308),\n    [anon_sym_RBRACE] = ACTIONS(2328),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2308),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2328),\n  },\n  [885] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2567),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2567),\n    [sym_property_signature] = STATE(2567),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2567),\n    [sym_index_signature] = STATE(2567),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_COMMA] = ACTIONS(2680),\n    [anon_sym_RBRACE] = ACTIONS(2682),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2680),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2682),\n  },\n  [886] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(219),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(222),\n    [anon_sym_RBRACE] = ACTIONS(222),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_RPAREN] = ACTIONS(222),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(224),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(222),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(226),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [887] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2598),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2598),\n    [sym_property_signature] = STATE(2598),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2598),\n    [sym_index_signature] = STATE(2598),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_COMMA] = ACTIONS(2684),\n    [anon_sym_RBRACE] = ACTIONS(2686),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2684),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2686),\n  },\n  [888] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(119),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(130),\n    [anon_sym_RBRACE] = ACTIONS(130),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_RPAREN] = ACTIONS(130),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(144),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(130),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_QMARK] = ACTIONS(224),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [889] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2638),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2638),\n    [sym_property_signature] = STATE(2638),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2638),\n    [sym_index_signature] = STATE(2638),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_COMMA] = ACTIONS(2688),\n    [anon_sym_RBRACE] = ACTIONS(2690),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_SEMI] = ACTIONS(2688),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2690),\n  },\n  [890] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(1173),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_RPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [891] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_RPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(122),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [892] = {\n    [sym_nested_identifier] = STATE(504),\n    [sym_string] = STATE(526),\n    [sym__module] = STATE(541),\n    [sym_identifier] = ACTIONS(2656),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1741),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(1189),\n    [anon_sym_SQUOTE] = ACTIONS(1191),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [893] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2692),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2692),\n  },\n  [894] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2694),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2694),\n  },\n  [895] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2696),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2696),\n  },\n  [896] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2698),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2698),\n  },\n  [897] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(1173),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(1241),\n    [anon_sym_RBRACE] = ACTIONS(1241),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_COLON] = ACTIONS(1244),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_RBRACK] = ACTIONS(1241),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(158),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [898] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2700),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2700),\n  },\n  [899] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2702),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2702),\n  },\n  [900] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2704),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2704),\n  },\n  [901] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [902] = {\n    [sym_override_modifier] = STATE(3481),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(160),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_fn] = ACTIONS(2706),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_override] = ACTIONS(2708),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [903] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2710),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2710),\n  },\n  [904] = {\n    [sym_nested_identifier] = STATE(1392),\n    [sym_string] = STATE(1393),\n    [sym__module] = STATE(1566),\n    [sym_identifier] = ACTIONS(2662),\n    [anon_sym_EQ] = ACTIONS(1314),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1213),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(183),\n    [anon_sym_SQUOTE] = ACTIONS(185),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [905] = {\n    [sym_nested_identifier] = STATE(1266),\n    [sym_string] = STATE(1267),\n    [sym__module] = STATE(1469),\n    [sym_identifier] = ACTIONS(2712),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1741),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [906] = {\n    [sym_nested_identifier] = STATE(1266),\n    [sym_string] = STATE(1267),\n    [sym__module] = STATE(1469),\n    [sym_identifier] = ACTIONS(2712),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [907] = {\n    [sym_nested_identifier] = STATE(1266),\n    [sym_string] = STATE(1267),\n    [sym__module] = STATE(1469),\n    [sym_identifier] = ACTIONS(2712),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(1745),\n    [anon_sym_of] = ACTIONS(1748),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [908] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2714),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2714),\n  },\n  [909] = {\n    [sym_export_clause] = STATE(3278),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [anon_sym_type] = ACTIONS(2716),\n    [anon_sym_EQ] = ACTIONS(2718),\n    [anon_sym_as] = ACTIONS(2720),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(2722),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [910] = {\n    [sym_export_clause] = STATE(3278),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [anon_sym_type] = ACTIONS(2716),\n    [anon_sym_EQ] = ACTIONS(2718),\n    [anon_sym_as] = ACTIONS(2720),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(2722),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [911] = {\n    [sym_nested_identifier] = STATE(1266),\n    [sym_string] = STATE(1267),\n    [sym__module] = STATE(1469),\n    [sym_identifier] = ACTIONS(2712),\n    [anon_sym_EQ] = ACTIONS(1211),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_of] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1213),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(85),\n    [anon_sym_SQUOTE] = ACTIONS(87),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [912] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2724),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2724),\n  },\n  [913] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2726),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2726),\n  },\n  [914] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2728),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2728),\n  },\n  [915] = {\n    [sym_export_clause] = STATE(3278),\n    [aux_sym_object_repeat1] = STATE(3032),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [anon_sym_type] = ACTIONS(2716),\n    [anon_sym_EQ] = ACTIONS(2718),\n    [anon_sym_as] = ACTIONS(2720),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_LBRACE] = ACTIONS(2722),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1701),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [916] = {\n    [sym_nested_identifier] = STATE(504),\n    [sym_string] = STATE(526),\n    [sym__module] = STATE(541),\n    [sym_identifier] = ACTIONS(2656),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1733),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2658),\n    [anon_sym_SQUOTE] = ACTIONS(2660),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [917] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2730),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2730),\n  },\n  [918] = {\n    [sym_override_modifier] = STATE(3481),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(160),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1699),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_fn] = ACTIONS(2706),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_override] = ACTIONS(2708),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [919] = {\n    [sym_nested_identifier] = STATE(120),\n    [sym_string] = STATE(123),\n    [sym__module] = STATE(136),\n    [sym_identifier] = ACTIONS(2650),\n    [anon_sym_EQ] = ACTIONS(1215),\n    [anon_sym_as] = ACTIONS(122),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1733),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [anon_sym_DQUOTE] = ACTIONS(2652),\n    [anon_sym_SQUOTE] = ACTIONS(2654),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_satisfies] = ACTIONS(122),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [920] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2732),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2732),\n  },\n  [921] = {\n    [sym_override_modifier] = STATE(3481),\n    [aux_sym_object_repeat1] = STATE(3136),\n    [aux_sym_object_pattern_repeat1] = STATE(3034),\n    [anon_sym_EQ] = ACTIONS(1687),\n    [anon_sym_as] = ACTIONS(160),\n    [anon_sym_STAR] = ACTIONS(122),\n    [anon_sym_COMMA] = ACTIONS(160),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(122),\n    [anon_sym_LPAREN] = ACTIONS(160),\n    [anon_sym_in] = ACTIONS(122),\n    [anon_sym_SEMI] = ACTIONS(160),\n    [anon_sym_COLON] = ACTIONS(1691),\n    [anon_sym_LBRACK] = ACTIONS(160),\n    [anon_sym_LT] = ACTIONS(122),\n    [anon_sym_GT] = ACTIONS(122),\n    [anon_sym_SLASH] = ACTIONS(122),\n    [anon_sym_DOT] = ACTIONS(160),\n    [anon_sym_fn] = ACTIONS(2706),\n    [anon_sym_EQ_GT] = ACTIONS(1217),\n    [anon_sym_QMARK_DOT] = ACTIONS(160),\n    [anon_sym_COLON_COLON] = ACTIONS(160),\n    [anon_sym_PLUS_EQ] = ACTIONS(164),\n    [anon_sym_DASH_EQ] = ACTIONS(164),\n    [anon_sym_STAR_EQ] = ACTIONS(164),\n    [anon_sym_SLASH_EQ] = ACTIONS(164),\n    [anon_sym_PERCENT_EQ] = ACTIONS(164),\n    [anon_sym_CARET_EQ] = ACTIONS(164),\n    [anon_sym_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(164),\n    [anon_sym_LT_LT_EQ] = ACTIONS(164),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(164),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(164),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(164),\n    [anon_sym_AMP_AMP] = ACTIONS(122),\n    [anon_sym_PIPE_PIPE] = ACTIONS(122),\n    [anon_sym_GT_GT] = ACTIONS(122),\n    [anon_sym_GT_GT_GT] = ACTIONS(122),\n    [anon_sym_LT_LT] = ACTIONS(122),\n    [anon_sym_AMP] = ACTIONS(122),\n    [anon_sym_CARET] = ACTIONS(122),\n    [anon_sym_PIPE] = ACTIONS(122),\n    [anon_sym_PLUS] = ACTIONS(122),\n    [anon_sym_DASH] = ACTIONS(122),\n    [anon_sym_PERCENT] = ACTIONS(122),\n    [anon_sym_STAR_STAR] = ACTIONS(122),\n    [anon_sym_LT_EQ] = ACTIONS(160),\n    [anon_sym_EQ_EQ] = ACTIONS(122),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(160),\n    [anon_sym_BANG_EQ] = ACTIONS(122),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(160),\n    [anon_sym_GT_EQ] = ACTIONS(160),\n    [anon_sym_QMARK_QMARK] = ACTIONS(122),\n    [anon_sym_instanceof] = ACTIONS(160),\n    [anon_sym_PLUS_PLUS] = ACTIONS(160),\n    [anon_sym_DASH_DASH] = ACTIONS(160),\n    [sym_comment] = ACTIONS(3),\n    [anon_sym_BQUOTE] = ACTIONS(160),\n    [anon_sym_override] = ACTIONS(2708),\n    [anon_sym_satisfies] = ACTIONS(160),\n    [sym__automatic_semicolon] = ACTIONS(160),\n    [sym__ternary_qmark] = ACTIONS(160),\n  },\n  [922] = {\n    [sym__call_signature] = STATE(2736),\n    [sym_string] = STATE(2427),\n    [sym_formal_parameters] = STATE(2309),\n    [sym__property_name] = STATE(2427),\n    [sym_computed_property_name] = STATE(2427),\n    [sym_method_signature] = STATE(2688),\n    [sym_accessibility_modifier] = STATE(1249),\n    [sym_accessibility_modifier_member] = STATE(3153),\n    [sym_override_modifier] = STATE(1265),\n    [sym_call_signature] = STATE(2688),\n    [sym_property_signature] = STATE(2688),\n    [sym_type_parameters] = STATE(3290),\n    [sym_construct_signature] = STATE(2688),\n    [sym_index_signature] = STATE(2688),\n    [sym_identifier] = ACTIONS(2664),\n    [anon_sym_pub] = ACTIONS(2666),\n    [anon_sym_export] = ACTIONS(2664),\n    [anon_sym_type] = ACTIONS(2664),\n    [anon_sym_namespace] = ACTIONS(2664),\n    [anon_sym_RBRACE] = ACTIONS(2734),\n    [anon_sym_LPAREN] = ACTIONS(2306),\n    [anon_sym_LBRACK] = ACTIONS(2668),\n    [anon_sym_LT] = ACTIONS(2226),\n    [anon_sym_struct] = ACTIONS(2664),\n    [anon_sym_async] = ACTIONS(2664),\n    [anon_sym_fn] = ACTIONS(2670),\n    [anon_sym_new] = ACTIONS(2314),\n    [anon_sym_DASH] = ACTIONS(2316),\n    [anon_sym_DQUOTE] = ACTIONS(1274),\n    [anon_sym_SQUOTE] = ACTIONS(1276),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2672),\n    [sym_private_property_identifier] = ACTIONS(2672),\n    [anon_sym_static] = ACTIONS(2674),\n    [anon_sym_declare] = ACTIONS(2664),\n    [anon_sym_public] = ACTIONS(2664),\n    [anon_sym_private] = ACTIONS(2664),\n    [anon_sym_protected] = ACTIONS(2664),\n    [anon_sym_override] = ACTIONS(2676),\n    [anon_sym_readonly] = ACTIONS(2678),\n    [anon_sym_module] = ACTIONS(2664),\n    [anon_sym_any] = ACTIONS(2664),\n    [anon_sym_number] = ACTIONS(2664),\n    [anon_sym_int] = ACTIONS(2664),\n    [anon_sym_float] = ACTIONS(2664),\n    [anon_sym_float2] = ACTIONS(2664),\n    [anon_sym_float3] = ACTIONS(2664),\n    [anon_sym_float4] = ACTIONS(2664),\n    [anon_sym_float3x3] = ACTIONS(2664),\n    [anon_sym_float2x2] = ACTIONS(2664),\n    [anon_sym_float4x4] = ACTIONS(2664),\n    [anon_sym_int2] = ACTIONS(2664),\n    [anon_sym_int3] = ACTIONS(2664),\n    [anon_sym_int4] = ACTIONS(2664),\n    [anon_sym_int3x3] = ACTIONS(2664),\n    [anon_sym_int2x2] = ACTIONS(2664),\n    [anon_sym_int4x4] = ACTIONS(2664),\n    [anon_sym_boolean] = ACTIONS(2664),\n    [anon_sym_string] = ACTIONS(2664),\n    [anon_sym_symbol] = ACTIONS(2664),\n    [anon_sym_workgroup] = ACTIONS(2664),\n    [anon_sym_get] = ACTIONS(2664),\n    [anon_sym_set] = ACTIONS(2664),\n    [anon_sym_abstract] = ACTIONS(2326),\n    [anon_sym_PIPE_RBRACE] = ACTIONS(2734),\n  },\n};\n\nstatic const uint16_t ts_small_parse_table[] = {\n  [0] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(2736), 1,\n      anon_sym_EQ,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [89] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2750), 1,\n      anon_sym_pub,\n    ACTIONS(2752), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2756), 1,\n      anon_sym_fn,\n    ACTIONS(2758), 1,\n      anon_sym_static,\n    ACTIONS(2760), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3087), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3085), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2748), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [198] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2768), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2774), 1,\n      anon_sym_QMARK_DOT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2176), 1,\n      sym_arguments,\n    ACTIONS(2770), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2776), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2766), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2738), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [291] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2778), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [384] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2736), 1,\n      anon_sym_EQ,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [473] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2736), 1,\n      anon_sym_EQ,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [562] = 15,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2799), 1,\n      anon_sym_LT,\n    ACTIONS(2802), 1,\n      anon_sym_DOT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2294), 1,\n      sym_type_arguments,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2795), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(2790), 4,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [657] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2807), 1,\n      anon_sym_pub,\n    ACTIONS(2809), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2811), 1,\n      anon_sym_fn,\n    ACTIONS(2813), 1,\n      anon_sym_static,\n    ACTIONS(2815), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3087), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3085), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2805), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [766] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2819), 1,\n      anon_sym_pub,\n    ACTIONS(2821), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2823), 1,\n      anon_sym_fn,\n    ACTIONS(2825), 1,\n      anon_sym_static,\n    ACTIONS(2827), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3004), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3005), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2817), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [875] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(2831), 1,\n      anon_sym_QMARK,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    STATE(3338), 1,\n      sym_type_annotation,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2795), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [976] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [1069] = 15,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(130), 1,\n      anon_sym_RBRACK,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1754), 1,\n      anon_sym_EQ,\n    ACTIONS(1757), 1,\n      anon_sym_COLON,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [1164] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2840), 1,\n      anon_sym_pub,\n    ACTIONS(2842), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2844), 1,\n      anon_sym_fn,\n    ACTIONS(2846), 1,\n      anon_sym_static,\n    ACTIONS(2848), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3087), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3085), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2838), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [1273] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2852), 1,\n      anon_sym_pub,\n    ACTIONS(2854), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2856), 1,\n      anon_sym_fn,\n    ACTIONS(2858), 1,\n      anon_sym_static,\n    ACTIONS(2860), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3087), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3085), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2850), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [1382] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2864), 1,\n      anon_sym_pub,\n    ACTIONS(2866), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2868), 1,\n      anon_sym_fn,\n    ACTIONS(2870), 1,\n      anon_sym_static,\n    ACTIONS(2872), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3087), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3085), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2862), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [1491] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2876), 1,\n      anon_sym_pub,\n    ACTIONS(2878), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2880), 1,\n      anon_sym_fn,\n    ACTIONS(2882), 1,\n      anon_sym_static,\n    ACTIONS(2884), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3004), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3005), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2874), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [1600] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [1686] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [1772] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2888), 1,\n      sym_identifier,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [1858] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [1944] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2890), 1,\n      anon_sym_EQ,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2895), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2893), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [2028] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(2899), 1,\n      sym_identifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2114] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(2888), 1,\n      sym_identifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2200] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2899), 1,\n      sym_identifier,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2286] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [2372] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1757), 1,\n      anon_sym_COLON,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 14,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2462] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 14,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 25,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2550] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2888), 1,\n      sym_identifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2636] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2724] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    ACTIONS(2901), 1,\n      anon_sym_EQ,\n    ACTIONS(2903), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2778), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 17,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [2816] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2899), 1,\n      sym_identifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [2902] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2314), 1,\n      anon_sym_new,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2326), 1,\n      anon_sym_abstract,\n    ACTIONS(2666), 1,\n      anon_sym_pub,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2670), 1,\n      anon_sym_fn,\n    ACTIONS(2674), 1,\n      anon_sym_static,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2678), 1,\n      anon_sym_readonly,\n    STATE(1249), 1,\n      sym_accessibility_modifier,\n    STATE(1265), 1,\n      sym_override_modifier,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2736), 1,\n      sym__call_signature,\n    STATE(3153), 1,\n      sym_accessibility_modifier_member,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(2672), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2427), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(2529), 5,\n      sym_method_signature,\n      sym_call_signature,\n      sym_property_signature,\n      sym_construct_signature,\n      sym_index_signature,\n    ACTIONS(2664), 33,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [3014] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3100] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2901), 1,\n      anon_sym_EQ,\n    ACTIONS(2903), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3192] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3284] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3370] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2314), 1,\n      anon_sym_new,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2326), 1,\n      anon_sym_abstract,\n    ACTIONS(2666), 1,\n      anon_sym_pub,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2670), 1,\n      anon_sym_fn,\n    ACTIONS(2674), 1,\n      anon_sym_static,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2678), 1,\n      anon_sym_readonly,\n    STATE(1249), 1,\n      sym_accessibility_modifier,\n    STATE(1265), 1,\n      sym_override_modifier,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2736), 1,\n      sym__call_signature,\n    STATE(3153), 1,\n      sym_accessibility_modifier_member,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(2672), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2427), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(2645), 5,\n      sym_method_signature,\n      sym_call_signature,\n      sym_property_signature,\n      sym_construct_signature,\n      sym_index_signature,\n    ACTIONS(2664), 33,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [3482] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(130), 1,\n      anon_sym_RBRACK,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1754), 1,\n      anon_sym_EQ,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [3574] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(85), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(87), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1246), 1,\n      anon_sym_EQ,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2712), 1,\n      sym_identifier,\n    STATE(1266), 1,\n      sym_nested_identifier,\n    STATE(1267), 1,\n      sym_string,\n    STATE(1469), 1,\n      sym__module,\n    ACTIONS(160), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [3662] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2776), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 4,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2738), 12,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3754] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2778), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 17,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3846] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2795), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2895), 1,\n      anon_sym_QMARK,\n    ACTIONS(2907), 1,\n      anon_sym_COMMA,\n    ACTIONS(2910), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [3946] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2314), 1,\n      anon_sym_new,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2326), 1,\n      anon_sym_abstract,\n    ACTIONS(2666), 1,\n      anon_sym_pub,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2670), 1,\n      anon_sym_fn,\n    ACTIONS(2674), 1,\n      anon_sym_static,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2678), 1,\n      anon_sym_readonly,\n    STATE(1249), 1,\n      sym_accessibility_modifier,\n    STATE(1265), 1,\n      sym_override_modifier,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2736), 1,\n      sym__call_signature,\n    STATE(3153), 1,\n      sym_accessibility_modifier_member,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(2672), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2427), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(2656), 5,\n      sym_method_signature,\n      sym_call_signature,\n      sym_property_signature,\n      sym_construct_signature,\n      sym_index_signature,\n    ACTIONS(2664), 33,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [4058] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1763), 1,\n      anon_sym_COLON,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 14,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [4148] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2917), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2915), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [4232] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 14,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 25,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [4320] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2314), 1,\n      anon_sym_new,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2326), 1,\n      anon_sym_abstract,\n    ACTIONS(2666), 1,\n      anon_sym_pub,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2670), 1,\n      anon_sym_fn,\n    ACTIONS(2674), 1,\n      anon_sym_static,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2678), 1,\n      anon_sym_readonly,\n    STATE(1249), 1,\n      sym_accessibility_modifier,\n    STATE(1265), 1,\n      sym_override_modifier,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2736), 1,\n      sym__call_signature,\n    STATE(3153), 1,\n      sym_accessibility_modifier_member,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(2672), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2427), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(2604), 5,\n      sym_method_signature,\n      sym_call_signature,\n      sym_property_signature,\n      sym_construct_signature,\n      sym_index_signature,\n    ACTIONS(2664), 33,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [4432] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2895), 1,\n      anon_sym_QMARK,\n    ACTIONS(2910), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2907), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [4518] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2314), 1,\n      anon_sym_new,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2326), 1,\n      anon_sym_abstract,\n    ACTIONS(2666), 1,\n      anon_sym_pub,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2670), 1,\n      anon_sym_fn,\n    ACTIONS(2674), 1,\n      anon_sym_static,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2678), 1,\n      anon_sym_readonly,\n    STATE(1249), 1,\n      sym_accessibility_modifier,\n    STATE(1265), 1,\n      sym_override_modifier,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2736), 1,\n      sym__call_signature,\n    STATE(3153), 1,\n      sym_accessibility_modifier_member,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(2672), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2427), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(2688), 5,\n      sym_method_signature,\n      sym_call_signature,\n      sym_property_signature,\n      sym_construct_signature,\n      sym_index_signature,\n    ACTIONS(2664), 33,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [4630] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    ACTIONS(2890), 1,\n      anon_sym_EQ,\n    ACTIONS(2893), 1,\n      anon_sym_COMMA,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2919), 1,\n      anon_sym_RPAREN,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2895), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [4728] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2314), 1,\n      anon_sym_new,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2326), 1,\n      anon_sym_abstract,\n    ACTIONS(2666), 1,\n      anon_sym_pub,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2670), 1,\n      anon_sym_fn,\n    ACTIONS(2674), 1,\n      anon_sym_static,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2678), 1,\n      anon_sym_readonly,\n    STATE(1249), 1,\n      sym_accessibility_modifier,\n    STATE(1265), 1,\n      sym_override_modifier,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2736), 1,\n      sym__call_signature,\n    STATE(3153), 1,\n      sym_accessibility_modifier_member,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(2672), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2427), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(2632), 5,\n      sym_method_signature,\n      sym_call_signature,\n      sym_property_signature,\n      sym_construct_signature,\n      sym_index_signature,\n    ACTIONS(2664), 33,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [4840] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(119), 1,\n      anon_sym_EQ,\n    ACTIONS(144), 1,\n      anon_sym_COLON,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(224), 1,\n      anon_sym_QMARK,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(130), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [4923] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    ACTIONS(2917), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2924), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5018] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5101] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(2716), 1,\n      anon_sym_type,\n    ACTIONS(2720), 1,\n      anon_sym_as,\n    ACTIONS(2722), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2928), 1,\n      anon_sym_EQ,\n    STATE(3278), 1,\n      sym_export_clause,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5186] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5277] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(219), 1,\n      anon_sym_EQ,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(224), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(222), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5358] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5437] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(1745), 1,\n      anon_sym_in,\n    ACTIONS(1748), 1,\n      anon_sym_of,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 23,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [5528] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2934), 1,\n      anon_sym_pub,\n    ACTIONS(2936), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2938), 1,\n      anon_sym_fn,\n    ACTIONS(2942), 1,\n      anon_sym_AT,\n    ACTIONS(2944), 1,\n      anon_sym_static,\n    ACTIONS(2946), 1,\n      anon_sym_declare,\n    ACTIONS(2948), 1,\n      anon_sym_readonly,\n    ACTIONS(2950), 1,\n      anon_sym_abstract,\n    STATE(1233), 1,\n      sym_method_definition,\n    STATE(1237), 1,\n      sym_accessibility_modifier_member,\n    STATE(1318), 1,\n      sym_override_modifier,\n    STATE(2869), 1,\n      sym_method_signature,\n    STATE(3613), 1,\n      sym_accessibility_modifier,\n    ACTIONS(2940), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(994), 3,\n      sym_decorator,\n      sym_class_static_block,\n      aux_sym_class_body_repeat1,\n    STATE(2364), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(3074), 3,\n      sym_public_field_definition,\n      sym_abstract_method_signature,\n      sym_index_signature,\n    ACTIONS(2664), 32,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [5639] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5722] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 25,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [5809] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(1244), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1731), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [5890] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2955), 1,\n      anon_sym_pub,\n    ACTIONS(2958), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2960), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2963), 1,\n      anon_sym_fn,\n    ACTIONS(2966), 1,\n      anon_sym_DASH,\n    ACTIONS(2969), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2972), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2978), 1,\n      anon_sym_AT,\n    ACTIONS(2981), 1,\n      anon_sym_static,\n    ACTIONS(2984), 1,\n      anon_sym_declare,\n    ACTIONS(2987), 1,\n      anon_sym_override,\n    ACTIONS(2990), 1,\n      anon_sym_readonly,\n    ACTIONS(2993), 1,\n      anon_sym_abstract,\n    STATE(1233), 1,\n      sym_method_definition,\n    STATE(1237), 1,\n      sym_accessibility_modifier_member,\n    STATE(1318), 1,\n      sym_override_modifier,\n    STATE(2869), 1,\n      sym_method_signature,\n    STATE(3613), 1,\n      sym_accessibility_modifier,\n    ACTIONS(2975), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(986), 3,\n      sym_decorator,\n      sym_class_static_block,\n      aux_sym_class_body_repeat1,\n    STATE(2364), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(3074), 3,\n      sym_public_field_definition,\n      sym_abstract_method_signature,\n      sym_index_signature,\n    ACTIONS(2952), 32,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [6001] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(250), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2998), 1,\n      anon_sym_pub,\n    ACTIONS(3000), 1,\n      anon_sym_fn,\n    ACTIONS(3002), 1,\n      anon_sym_static,\n    ACTIONS(3004), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(254), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(2612), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(3339), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3341), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3549), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2996), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [6102] = 15,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2790), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6195] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2776), 3,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n    ACTIONS(2766), 4,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2738), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6286] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 12,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6377] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3006), 1,\n      anon_sym_EQ,\n    ACTIONS(3008), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6468] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6547] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1290), 1,\n      anon_sym_EQ,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 25,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [6634] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2316), 1,\n      anon_sym_DASH,\n    ACTIONS(2668), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(2934), 1,\n      anon_sym_pub,\n    ACTIONS(2938), 1,\n      anon_sym_fn,\n    ACTIONS(2942), 1,\n      anon_sym_AT,\n    ACTIONS(2944), 1,\n      anon_sym_static,\n    ACTIONS(2946), 1,\n      anon_sym_declare,\n    ACTIONS(2948), 1,\n      anon_sym_readonly,\n    ACTIONS(2950), 1,\n      anon_sym_abstract,\n    ACTIONS(3010), 1,\n      anon_sym_RBRACE,\n    STATE(1233), 1,\n      sym_method_definition,\n    STATE(1237), 1,\n      sym_accessibility_modifier_member,\n    STATE(1318), 1,\n      sym_override_modifier,\n    STATE(2869), 1,\n      sym_method_signature,\n    STATE(3613), 1,\n      sym_accessibility_modifier,\n    ACTIONS(2940), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(986), 3,\n      sym_decorator,\n      sym_class_static_block,\n      aux_sym_class_body_repeat1,\n    STATE(2364), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    STATE(3074), 3,\n      sym_public_field_definition,\n      sym_abstract_method_signature,\n      sym_index_signature,\n    ACTIONS(2664), 32,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [6745] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(3006), 1,\n      anon_sym_EQ,\n    ACTIONS(3008), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 17,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6836] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1687), 1,\n      anon_sym_EQ,\n    ACTIONS(1691), 1,\n      anon_sym_COLON,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [6919] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(2716), 1,\n      anon_sym_type,\n    ACTIONS(2720), 1,\n      anon_sym_as,\n    ACTIONS(2722), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2928), 1,\n      anon_sym_EQ,\n    STATE(3278), 1,\n      sym_export_clause,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7004] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [7093] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7171] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2901), 1,\n      anon_sym_EQ,\n    ACTIONS(2903), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7249] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7325] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(119), 1,\n      anon_sym_EQ,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1376), 6,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7405] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    ACTIONS(3018), 1,\n      anon_sym_in,\n    ACTIONS(3021), 1,\n      anon_sym_of,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7487] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(183), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(185), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2662), 1,\n      sym_identifier,\n    STATE(1392), 1,\n      sym_nested_identifier,\n    STATE(1393), 1,\n      sym_string,\n    STATE(1566), 1,\n      sym__module,\n    ACTIONS(160), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [7573] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7653] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3023), 1,\n      anon_sym_EQ,\n    ACTIONS(3025), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 12,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7743] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7821] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3027), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3029), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [7889] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(1244), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1731), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [7967] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2744), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8047] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8123] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2790), 1,\n      anon_sym_extends,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2778), 2,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(2784), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8213] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(219), 1,\n      anon_sym_EQ,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(224), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(222), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8291] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2776), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 4,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2738), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8381] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3031), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3033), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [8449] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(3023), 1,\n      anon_sym_EQ,\n    ACTIONS(3025), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 17,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8539] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3035), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3037), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [8607] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3039), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3041), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [8675] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(1376), 1,\n      anon_sym_extends,\n    ACTIONS(3012), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3043), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3045), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [8823] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3047), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3049), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [8891] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(119), 1,\n      anon_sym_EQ,\n    ACTIONS(144), 1,\n      anon_sym_COLON,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(224), 1,\n      anon_sym_QMARK,\n    ACTIONS(130), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [8971] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2903), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9049] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3051), 24,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_QMARK,\n    ACTIONS(3053), 36,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [9117] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9192] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1376), 1,\n      anon_sym_extends,\n    ACTIONS(3012), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [9271] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1211), 1,\n      anon_sym_EQ,\n    ACTIONS(1213), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9346] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2776), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9435] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9512] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9585] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(3055), 1,\n      sym_identifier,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [9662] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2772), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(3057), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9741] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(2899), 1,\n      sym_identifier,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [9818] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(1241), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [9897] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(2888), 1,\n      sym_identifier,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [9974] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2893), 1,\n      anon_sym_COMMA,\n    ACTIONS(2907), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3060), 1,\n      anon_sym_EQ,\n    ACTIONS(3063), 1,\n      anon_sym_in,\n    ACTIONS(3065), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10059] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1213), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10134] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1211), 1,\n      anon_sym_EQ,\n    ACTIONS(1213), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1376), 1,\n      anon_sym_extends,\n    ACTIONS(3012), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [10213] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2890), 1,\n      anon_sym_EQ,\n    ACTIONS(2895), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2893), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10288] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10361] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1745), 1,\n      anon_sym_in,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3067), 1,\n      anon_sym_of,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10440] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(119), 1,\n      anon_sym_EQ,\n    ACTIONS(130), 1,\n      anon_sym_COMMA,\n    ACTIONS(144), 1,\n      anon_sym_COLON,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(224), 1,\n      anon_sym_QMARK,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1376), 2,\n      anon_sym_RPAREN,\n      anon_sym_extends,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10525] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10602] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2208), 1,\n      anon_sym_EQ,\n    ACTIONS(2210), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(3069), 21,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(3071), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10673] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(3055), 1,\n      sym_identifier,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [10750] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(2899), 1,\n      sym_identifier,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [10827] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(2888), 1,\n      sym_identifier,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n    ACTIONS(122), 24,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [10904] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 21,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [10975] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(219), 1,\n      anon_sym_EQ,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(224), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1376), 2,\n      anon_sym_RPAREN,\n      anon_sym_extends,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11058] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2895), 1,\n      anon_sym_QMARK,\n    ACTIONS(2910), 1,\n      anon_sym_COLON,\n    ACTIONS(2907), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11135] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2778), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2781), 1,\n      anon_sym_LT,\n    ACTIONS(2787), 1,\n      anon_sym_DOT,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(2784), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2738), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 17,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11224] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2776), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 3,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2738), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2740), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11313] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2915), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11388] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11463] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3027), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3029), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [11529] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1741), 1,\n      anon_sym_COLON,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11603] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3006), 1,\n      anon_sym_EQ,\n    ACTIONS(3008), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11679] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1211), 1,\n      anon_sym_EQ,\n    ACTIONS(1213), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11751] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(3008), 1,\n      anon_sym_EQ_GT,\n    STATE(1854), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11827] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11897] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2893), 1,\n      anon_sym_COMMA,\n    ACTIONS(2907), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3060), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [11977] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3031), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3033), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [12043] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3047), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3049), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [12109] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(1241), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12185] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12257] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12327] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(1376), 1,\n      anon_sym_extends,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3073), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12409] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(130), 1,\n      anon_sym_RBRACK,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1754), 1,\n      anon_sym_EQ,\n    ACTIONS(1757), 1,\n      anon_sym_COLON,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12489] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3051), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3053), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [12555] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3043), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3045), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [12621] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1213), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12693] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12769] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3035), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3037), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [12835] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1733), 1,\n      anon_sym_COLON,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12909] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3063), 1,\n      anon_sym_in,\n    ACTIONS(3077), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [12989] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1215), 1,\n      anon_sym_EQ,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1745), 1,\n      anon_sym_in,\n    ACTIONS(3067), 1,\n      anon_sym_of,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13065] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1376), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13143] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2208), 1,\n      anon_sym_EQ,\n    ACTIONS(2210), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(3069), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(3071), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13213] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13289] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1217), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13361] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1376), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13441] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3039), 22,\n      anon_sym_EQ,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3041), 36,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [13507] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(119), 1,\n      anon_sym_EQ,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1378), 1,\n      anon_sym_QMARK,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1376), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13587] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2932), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3063), 1,\n      anon_sym_in,\n    ACTIONS(3065), 1,\n      anon_sym_COLON,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13667] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1246), 1,\n      anon_sym_EQ,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1376), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13745] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3023), 1,\n      anon_sym_EQ,\n    ACTIONS(3025), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13820] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 1,\n      anon_sym_COLON,\n    ACTIONS(3057), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [13893] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(166), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(3083), 1,\n      anon_sym_RBRACE,\n    STATE(3088), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3085), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3084), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3612), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3079), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [13980] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14053] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1757), 1,\n      anon_sym_COLON,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14128] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3092), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3099), 1,\n      anon_sym_fn,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    STATE(1271), 1,\n      sym_override_modifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [14221] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(130), 1,\n      anon_sym_RBRACK,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1754), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14298] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14367] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(158), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1173), 1,\n      anon_sym_EQ,\n    ACTIONS(1376), 1,\n      anon_sym_extends,\n    ACTIONS(3012), 2,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3015), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 19,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14444] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2208), 1,\n      anon_sym_EQ,\n    ACTIONS(3105), 1,\n      anon_sym_in,\n    ACTIONS(2210), 16,\n      anon_sym_of,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(3069), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(3071), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14515] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(3025), 1,\n      anon_sym_EQ_GT,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14590] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(3018), 1,\n      anon_sym_in,\n    ACTIONS(3021), 1,\n      anon_sym_of,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14669] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14742] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(166), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(3110), 1,\n      anon_sym_RBRACE,\n    STATE(3002), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3085), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3007), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3612), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3108), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [14829] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [14902] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3099), 1,\n      anon_sym_fn,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3112), 1,\n      anon_sym_RBRACE,\n    STATE(1271), 1,\n      sym_override_modifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [14995] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3099), 1,\n      anon_sym_fn,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3115), 1,\n      anon_sym_RBRACE,\n    STATE(1271), 1,\n      sym_override_modifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [15088] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2901), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [15157] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(130), 1,\n      anon_sym_RBRACK,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1754), 1,\n      anon_sym_EQ,\n    ACTIONS(1757), 1,\n      anon_sym_COLON,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [15234] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3099), 1,\n      anon_sym_fn,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3118), 1,\n      anon_sym_RBRACE,\n    STATE(1271), 1,\n      sym_override_modifier,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [15327] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1290), 1,\n      anon_sym_EQ,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1376), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [15404] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1763), 1,\n      anon_sym_COLON,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [15479] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1246), 1,\n      anon_sym_EQ,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2886), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [15552] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3099), 1,\n      anon_sym_fn,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3121), 1,\n      anon_sym_RBRACE,\n    STATE(1271), 1,\n      sym_override_modifier,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [15645] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    ACTIONS(3018), 1,\n      anon_sym_in,\n    ACTIONS(3021), 1,\n      anon_sym_of,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [15718] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3118), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3126), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2594), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [15802] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3112), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [15886] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3092), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [15970] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1290), 1,\n      anon_sym_EQ,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16042] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16112] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3121), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3126), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2594), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [16196] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(130), 1,\n      anon_sym_RBRACK,\n    ACTIONS(222), 1,\n      anon_sym_COMMA,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1754), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16270] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(3012), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1376), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3015), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(160), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(122), 18,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16346] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1763), 1,\n      anon_sym_COLON,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16418] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1246), 1,\n      anon_sym_EQ,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16488] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3092), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3126), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2594), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [16572] = 15,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3130), 1,\n      anon_sym_pub,\n    ACTIONS(3134), 1,\n      anon_sym_static,\n    ACTIONS(3136), 1,\n      anon_sym_readonly,\n    ACTIONS(3138), 1,\n      anon_sym_abstract,\n    STATE(1245), 1,\n      sym_accessibility_modifier_member,\n    STATE(1308), 1,\n      sym_override_modifier,\n    ACTIONS(3132), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2365), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [16660] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3115), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [16744] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3121), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [16828] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16900] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [16970] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17044] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3140), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3142), 1,\n      anon_sym_fn,\n    ACTIONS(3144), 1,\n      anon_sym_readonly,\n    STATE(1254), 1,\n      sym_statement_block,\n    STATE(1311), 1,\n      sym_override_modifier,\n    ACTIONS(3132), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2365), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [17130] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3118), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [17214] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(166), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2754), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3085), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3148), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(3341), 3,\n      sym_object_assignment_pattern,\n      sym_rest_pattern,\n      sym_pair_pattern,\n    STATE(3468), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n    STATE(3612), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3146), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [17296] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3115), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3126), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2594), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [17380] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(1745), 1,\n      anon_sym_in,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3067), 1,\n      anon_sym_of,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17456] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3112), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3126), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2594), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [17540] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2764), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2897), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    STATE(1577), 1,\n      sym_object,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17614] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1250), 1,\n      anon_sym_EQ,\n    ACTIONS(1252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1757), 1,\n      anon_sym_COLON,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17686] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1248), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17756] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3006), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17823] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1244), 1,\n      anon_sym_COLON,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17894] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2893), 1,\n      anon_sym_COMMA,\n    ACTIONS(2907), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3060), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [17965] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 22,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18032] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(1745), 1,\n      anon_sym_in,\n    ACTIONS(3067), 1,\n      anon_sym_of,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18105] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1469), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3152), 1,\n      anon_sym_pub,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3156), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3158), 1,\n      anon_sym_fn,\n    ACTIONS(3162), 1,\n      anon_sym_static,\n    ACTIONS(3164), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3004), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(3160), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3005), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3566), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3150), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [18198] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(2922), 1,\n      anon_sym_LBRACE,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18269] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18338] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3166), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2636), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 9,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [18411] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1469), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3170), 1,\n      anon_sym_pub,\n    ACTIONS(3172), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3174), 1,\n      anon_sym_fn,\n    ACTIONS(3176), 1,\n      anon_sym_static,\n    ACTIONS(3178), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3087), 1,\n      aux_sym_object_repeat1,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(3160), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(3085), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3566), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3168), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [18504] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 9,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [18577] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3099), 1,\n      anon_sym_fn,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    STATE(1271), 1,\n      sym_override_modifier,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3182), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [18662] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1290), 1,\n      anon_sym_EQ,\n    ACTIONS(1292), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18731] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3186), 1,\n      anon_sym_abstract,\n    ACTIONS(3132), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2365), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [18805] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 1,\n      anon_sym_COLON,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18873] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3023), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [18939] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1469), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3190), 1,\n      anon_sym_pub,\n    ACTIONS(3194), 1,\n      anon_sym_fn,\n    ACTIONS(3196), 1,\n      anon_sym_static,\n    ACTIONS(3198), 1,\n      anon_sym_override,\n    STATE(2915), 1,\n      sym_accessibility_modifier_member,\n    STATE(3546), 1,\n      sym_override_modifier,\n    ACTIONS(3160), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3192), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(3339), 3,\n      sym_spread_element,\n      sym_method_definition,\n      sym_pair,\n    STATE(3566), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3188), 34,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19027] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3126), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3182), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(2594), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19103] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3182), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19179] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    STATE(1300), 1,\n      sym_override_modifier,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19257] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3202), 1,\n      anon_sym_abstract,\n    ACTIONS(3200), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2378), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19331] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3204), 1,\n      anon_sym_readonly,\n    STATE(1283), 1,\n      sym_override_modifier,\n    ACTIONS(3200), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2378), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19409] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(226), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(1314), 1,\n      anon_sym_EQ,\n    ACTIONS(164), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(160), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(122), 21,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [19477] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(3018), 1,\n      anon_sym_in,\n    ACTIONS(3021), 1,\n      anon_sym_of,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2738), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(2740), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [19547] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3206), 1,\n      anon_sym_readonly,\n    STATE(1309), 1,\n      sym_override_modifier,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19625] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3208), 1,\n      anon_sym_abstract,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19699] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2208), 1,\n      anon_sym_EQ,\n    ACTIONS(3105), 1,\n      anon_sym_in,\n    ACTIONS(2210), 16,\n      anon_sym_of,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(3069), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n    ACTIONS(3071), 20,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK_QMARK,\n  [19767] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3212), 1,\n      anon_sym_readonly,\n    STATE(1269), 1,\n      sym_override_modifier,\n    ACTIONS(3210), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2421), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19845] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3206), 1,\n      anon_sym_readonly,\n    ACTIONS(3214), 1,\n      anon_sym_fn,\n    STATE(1322), 1,\n      sym_override_modifier,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19925] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3092), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [19998] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3118), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20071] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3115), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20144] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3121), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20217] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3216), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2644), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20288] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3218), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2526), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20359] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3220), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2536), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20430] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3222), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2633), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20501] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3224), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2631), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20572] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3115), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3226), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20647] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3229), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2653), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20718] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3231), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2342), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20789] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3233), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2570), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20860] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3235), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2596), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [20931] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3237), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2407), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21002] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3118), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3226), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21077] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3112), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21150] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3210), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2421), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21221] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3239), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2573), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21292] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3112), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3226), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21367] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3241), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2607), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21438] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3200), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2378), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21509] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3243), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2586), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21580] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21651] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3245), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2429), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21722] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3247), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2374), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21793] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3121), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3226), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21868] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3092), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3226), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [21943] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3249), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22023] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 9,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22085] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22165] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22245] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3251), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22325] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3253), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22405] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3255), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22485] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22565] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1800), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3257), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [22626] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3226), 1,\n      anon_sym_abstract,\n    ACTIONS(1800), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_BANG,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3257), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22689] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3182), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(1473), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1471), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22754] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3182), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(3226), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22821] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3259), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22895] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3226), 2,\n      anon_sym_fn,\n      anon_sym_override,\n    ACTIONS(1481), 5,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1479), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [22957] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3261), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23029] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3264), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3266), 1,\n      anon_sym_DOT,\n    STATE(1256), 1,\n      sym_arguments,\n    ACTIONS(2625), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2623), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23093] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3268), 1,\n      anon_sym_RBRACE,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23167] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3270), 1,\n      sym_identifier,\n    STATE(2993), 1,\n      sym_import_specifier,\n    STATE(3353), 1,\n      sym_import_clause,\n    STATE(3519), 1,\n      sym_named_imports,\n    ACTIONS(3272), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3521), 2,\n      sym__module_export_name,\n      sym_string,\n    ACTIONS(3274), 16,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n    ACTIONS(3276), 24,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [23241] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3280), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3278), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23298] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3284), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3282), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23355] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3289), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3291), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3294), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3297), 1,\n      anon_sym_SQUOTE,\n    STATE(1214), 1,\n      aux_sym_workgroup_repeat1,\n    STATE(3281), 1,\n      sym_workgroup_member,\n    ACTIONS(3300), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2414), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(3286), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23426] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3303), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3095), 3,\n      anon_sym_LPAREN,\n      anon_sym_LT,\n      anon_sym_QMARK,\n    STATE(2621), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23493] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1326), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1328), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23550] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3305), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1302), 9,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1304), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23609] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1358), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1360), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23666] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3307), 1,\n      anon_sym_RBRACE,\n    STATE(1214), 1,\n      aux_sym_workgroup_repeat1,\n    STATE(3281), 1,\n      sym_workgroup_member,\n    ACTIONS(3309), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2414), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23737] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3313), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3311), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [23794] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3315), 1,\n      anon_sym_RBRACE,\n    STATE(1223), 1,\n      aux_sym_workgroup_repeat1,\n    STATE(3281), 1,\n      sym_workgroup_member,\n    ACTIONS(3309), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2414), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23865] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1697), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3317), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(2629), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [23934] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3319), 1,\n      anon_sym_RBRACE,\n    STATE(1214), 1,\n      aux_sym_workgroup_repeat1,\n    STATE(3281), 1,\n      sym_workgroup_member,\n    ACTIONS(3309), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2414), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [24005] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3323), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3321), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24062] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3325), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1326), 9,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1328), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24121] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3329), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3327), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24178] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3329), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3327), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24235] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3313), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3311), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24292] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3331), 1,\n      anon_sym_RBRACE,\n    STATE(1219), 1,\n      aux_sym_workgroup_repeat1,\n    STATE(3281), 1,\n      sym_workgroup_member,\n    ACTIONS(3309), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2414), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [24363] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3335), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3333), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24420] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3339), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3337), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24477] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2640), 9,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2638), 40,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_DOT,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24534] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3345), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3343), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3341), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24593] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3284), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3282), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24650] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3323), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3321), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24707] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3349), 10,\n      sym__automatic_semicolon,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3347), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [24764] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3136), 1,\n      anon_sym_readonly,\n    ACTIONS(3138), 1,\n      anon_sym_abstract,\n    ACTIONS(3351), 1,\n      anon_sym_fn,\n    ACTIONS(3353), 1,\n      anon_sym_static,\n    STATE(1261), 1,\n      sym_override_modifier,\n    ACTIONS(3132), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2365), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 34,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [24840] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1338), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1336), 34,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [24896] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1342), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1340), 34,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [24952] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3355), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1326), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1328), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25010] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3357), 1,\n      anon_sym_RBRACE,\n    STATE(3331), 1,\n      sym_enum_assignment,\n    ACTIONS(3359), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2919), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25078] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3361), 1,\n      anon_sym_RBRACE,\n    STATE(3331), 1,\n      sym_enum_assignment,\n    ACTIONS(3359), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2919), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25146] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3363), 1,\n      anon_sym_RBRACE,\n    STATE(3331), 1,\n      sym_enum_assignment,\n    ACTIONS(3359), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2919), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25214] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3365), 1,\n      anon_sym_RBRACE,\n    STATE(3331), 1,\n      sym_enum_assignment,\n    ACTIONS(3359), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2919), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25282] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3367), 1,\n      anon_sym_static,\n    ACTIONS(3369), 1,\n      anon_sym_readonly,\n    ACTIONS(3371), 1,\n      anon_sym_abstract,\n    STATE(1309), 1,\n      sym_override_modifier,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25356] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3373), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1302), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1304), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25414] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3375), 1,\n      anon_sym_RBRACE,\n    STATE(3110), 1,\n      sym_enum_assignment,\n    ACTIONS(3377), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2766), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25482] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2958), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3379), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25537] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2676), 1,\n      anon_sym_override,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3381), 1,\n      anon_sym_static,\n    STATE(1300), 1,\n      sym_override_modifier,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [25608] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2262), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2260), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25663] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1358), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1360), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25718] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2256), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2254), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25773] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2250), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25828] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3385), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(3383), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25883] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1326), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(1328), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25938] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2648), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2646), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [25993] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3387), 1,\n      anon_sym_STAR,\n    ACTIONS(3166), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3389), 2,\n      anon_sym_get,\n      anon_sym_set,\n    STATE(2636), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n  [26060] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2625), 8,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DASH,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n      anon_sym_AT,\n    ACTIONS(2623), 39,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n      anon_sym_abstract,\n  [26115] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3144), 1,\n      anon_sym_readonly,\n    ACTIONS(3391), 1,\n      anon_sym_STAR,\n    ACTIONS(3393), 2,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(3395), 2,\n      anon_sym_get,\n      anon_sym_set,\n    STATE(2198), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 35,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n  [26184] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    STATE(3331), 1,\n      sym_enum_assignment,\n    ACTIONS(3359), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2919), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [26249] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3206), 1,\n      anon_sym_readonly,\n    ACTIONS(3397), 1,\n      anon_sym_fn,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [26315] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3407), 1,\n      anon_sym_LT,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 22,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [26387] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3424), 1,\n      anon_sym_COLON,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3418), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [26501] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3464), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3462), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [26615] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3466), 1,\n      anon_sym_fn,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [26681] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3468), 1,\n      anon_sym_DOT,\n    STATE(1466), 1,\n      sym_statement_block,\n    ACTIONS(1296), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1294), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [26741] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1466), 1,\n      sym_statement_block,\n    ACTIONS(1296), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1294), 31,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [26799] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3474), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 18,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [26879] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3477), 1,\n      anon_sym_readonly,\n    ACTIONS(3237), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2407), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 37,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [26943] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3479), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2643), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27005] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3212), 1,\n      anon_sym_readonly,\n    ACTIONS(3481), 1,\n      anon_sym_fn,\n    ACTIONS(3210), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2421), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27071] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3485), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3483), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [27185] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3103), 1,\n      anon_sym_readonly,\n    ACTIONS(3487), 1,\n      anon_sym_fn,\n    ACTIONS(3101), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2439), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27251] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3239), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2573), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27313] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1342), 15,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK,\n    ACTIONS(1340), 31,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [27367] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3493), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 20,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [27441] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3498), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3496), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [27555] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3500), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2546), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27617] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3502), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2601), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27679] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1338), 15,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_QMARK,\n    ACTIONS(1336), 31,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [27733] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3508), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 17,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [27815] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3231), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2342), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27877] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3511), 1,\n      anon_sym_readonly,\n    ACTIONS(3231), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2342), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 37,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [27941] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [28007] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3519), 1,\n      anon_sym_LT,\n    ACTIONS(3521), 1,\n      anon_sym_DOT,\n    ACTIONS(3523), 1,\n      anon_sym_is,\n    STATE(1431), 1,\n      sym_type_arguments,\n    ACTIONS(3517), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2790), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [28069] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3519), 1,\n      anon_sym_LT,\n    ACTIONS(3529), 1,\n      anon_sym_QMARK_DOT,\n    STATE(1530), 1,\n      sym_type_arguments,\n    STATE(1678), 1,\n      sym_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3527), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3525), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [28139] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 6,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 13,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [28229] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3531), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2560), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [28291] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3508), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 18,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [28371] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_PIPE,\n    ACTIONS(3506), 10,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [28469] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [28573] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3220), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2536), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [28635] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3229), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2653), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [28697] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3535), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3533), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [28811] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_PIPE,\n    ACTIONS(3506), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [28907] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3537), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2599), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [28969] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3541), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3539), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [29083] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 4,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3506), 11,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [29177] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3508), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 9,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 18,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [29259] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3212), 1,\n      anon_sym_readonly,\n    ACTIONS(3210), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2421), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 37,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [29323] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3543), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2611), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [29385] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3545), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2615), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [29447] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3166), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2636), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [29509] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [29571] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 9,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [29673] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3549), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3547), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [29787] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 10,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [29887] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3206), 1,\n      anon_sym_readonly,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 37,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [29951] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3204), 1,\n      anon_sym_readonly,\n    ACTIONS(3200), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2378), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 37,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30015] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3200), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2378), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30077] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3206), 1,\n      anon_sym_readonly,\n    ACTIONS(3214), 1,\n      anon_sym_fn,\n    ACTIONS(3180), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2336), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30143] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3551), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2600), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30205] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [30291] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3555), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3553), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [30405] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3557), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2639), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30467] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3563), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3561), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [30583] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3567), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3565), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [30697] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3144), 1,\n      anon_sym_readonly,\n    ACTIONS(3351), 1,\n      anon_sym_fn,\n    ACTIONS(3132), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2365), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30763] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3571), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3569), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [30877] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3303), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2621), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [30939] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3243), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2586), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [31001] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3097), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3204), 1,\n      anon_sym_readonly,\n    ACTIONS(3573), 1,\n      anon_sym_fn,\n    ACTIONS(3200), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2378), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(2664), 36,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [31067] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3124), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3575), 2,\n      sym_number,\n      sym_private_property_identifier,\n    STATE(2566), 3,\n      sym_string,\n      sym__property_name,\n      sym_computed_property_name,\n    ACTIONS(1685), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [31129] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3579), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3577), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [31243] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3508), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 19,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [31319] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3583), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3581), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [31433] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1356), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1354), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [31486] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    STATE(1423), 1,\n      sym_arguments,\n    ACTIONS(3585), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2776), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2766), 27,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [31545] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3591), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [31616] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3599), 1,\n      anon_sym_COLON,\n    ACTIONS(1306), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(3596), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(1308), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [31675] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3483), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [31786] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3646), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [31865] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3649), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [31938] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3652), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [32011] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3655), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3674), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32128] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3666), 1,\n      anon_sym_COLON,\n    ACTIONS(3657), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(3663), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(3661), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [32187] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3669), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3674), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32304] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3671), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3617), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32421] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3675), 1,\n      anon_sym_COMMA,\n    ACTIONS(3678), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3462), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32536] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3714), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [32615] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3483), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [32726] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3726), 1,\n      anon_sym_COLON,\n    ACTIONS(3717), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(3723), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(3721), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [32785] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3729), 1,\n      anon_sym_LT,\n    ACTIONS(3731), 1,\n      anon_sym_QMARK_DOT,\n    STATE(1767), 1,\n      sym_type_arguments,\n    STATE(1835), 1,\n      sym_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3527), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3525), 24,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [32854] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3733), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [32925] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 26,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [32990] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3581), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [33101] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3533), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [33212] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3736), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [33323] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3539), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [33434] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3539), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [33545] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3547), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [33656] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3553), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [33767] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3547), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [33878] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3565), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [33989] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3569), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [34100] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3577), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [34211] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [34314] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 5,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [34403] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3738), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [34484] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3738), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 10,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [34563] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 10,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [34660] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 11,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [34755] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 11,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [34848] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3553), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [34959] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3738), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [35040] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 9,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [35141] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 10,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [35240] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3565), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [35351] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 7,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [35436] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3741), 1,\n      anon_sym_COMMA,\n    ACTIONS(3744), 1,\n      anon_sym_RBRACE,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3462), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35551] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3738), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [35626] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3729), 1,\n      anon_sym_LT,\n    ACTIONS(3746), 1,\n      anon_sym_DOT,\n    ACTIONS(3748), 1,\n      anon_sym_is,\n    STATE(1661), 1,\n      sym_type_arguments,\n    ACTIONS(3517), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2790), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [35687] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3418), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [35798] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3462), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [35909] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3496), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [36020] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3750), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3674), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36137] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3750), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3681), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36254] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3533), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [36365] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3608), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3581), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [36476] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 26,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [36541] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3496), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [36652] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3462), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [36763] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3418), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [36874] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3752), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3674), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36991] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3754), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 19,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [37066] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 7,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [37151] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3577), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [37262] = 35,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2829), 1,\n      anon_sym_COLON,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(3757), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3674), 1,\n      sym_type_annotation,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37379] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 10,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [37478] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3608), 1,\n      anon_sym_GT,\n    ACTIONS(3610), 1,\n      anon_sym_LT,\n    ACTIONS(3612), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3614), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3616), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3620), 1,\n      anon_sym_AMP,\n    ACTIONS(3622), 1,\n      anon_sym_CARET,\n    ACTIONS(3624), 1,\n      anon_sym_PIPE,\n    ACTIONS(3628), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3630), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3638), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3644), 1,\n      sym__ternary_qmark,\n    ACTIONS(3761), 1,\n      anon_sym_in,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3604), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3618), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3626), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3634), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3636), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3632), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3759), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_of,\n      anon_sym_SEMI,\n  [37591] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 9,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [37692] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3764), 1,\n      anon_sym_DOT,\n    STATE(1580), 1,\n      sym_statement_block,\n    ACTIONS(1296), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1294), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [37751] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1580), 1,\n      sym_statement_block,\n    ACTIONS(1296), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1294), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [37808] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3766), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1304), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1302), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [37865] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3754), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [37946] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1378), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1376), 31,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n      anon_sym_is,\n  [37999] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3772), 1,\n      anon_sym_is,\n    ACTIONS(3770), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3768), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [38054] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3754), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 10,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [38133] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 11,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [38228] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3523), 1,\n      anon_sym_is,\n    ACTIONS(3776), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3774), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [38283] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3744), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3778), 1,\n      anon_sym_COMMA,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3781), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38398] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3519), 1,\n      anon_sym_LT,\n    ACTIONS(3521), 1,\n      anon_sym_DOT,\n    STATE(1431), 1,\n      sym_type_arguments,\n    ACTIONS(3517), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2790), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [38457] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [38560] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 11,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [38653] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3754), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [38734] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 5,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [38823] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3519), 1,\n      anon_sym_LT,\n    STATE(1426), 1,\n      sym_type_arguments,\n    ACTIONS(3770), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3768), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [38880] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3744), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3778), 1,\n      anon_sym_COMMA,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3581), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38995] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 10,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [39092] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3569), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n  [39203] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3787), 1,\n      anon_sym_DOT,\n    ACTIONS(3789), 1,\n      anon_sym_COLON_COLON,\n    STATE(1420), 1,\n      sym_arguments,\n    ACTIONS(3785), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3783), 27,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39264] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3795), 1,\n      anon_sym_DOT,\n    ACTIONS(3797), 1,\n      anon_sym_COLON_COLON,\n    STATE(1421), 1,\n      sym_arguments,\n    ACTIONS(3793), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3791), 27,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39325] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3799), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39377] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3803), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39429] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(3809), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3807), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [39487] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3821), 1,\n      anon_sym_DOT,\n    ACTIONS(3819), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3817), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39541] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3826), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3824), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39593] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3830), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3828), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39645] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3834), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3832), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39697] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3838), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3836), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39749] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3842), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3840), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39801] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3844), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1328), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1326), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [39855] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3848), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3846), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39907] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3852), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3850), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [39959] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1356), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1354), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [40011] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3856), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3854), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40063] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3862), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3860), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3858), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40117] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3866), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3864), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40169] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(3870), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3868), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [40227] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3862), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3878), 1,\n      anon_sym_extends,\n    ACTIONS(3876), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3874), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3872), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [40285] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3882), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3880), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40337] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3886), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3884), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40389] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3888), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40441] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3894), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3892), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40495] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3898), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3896), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40547] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3902), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3900), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40599] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3904), 6,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [40659] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3916), 1,\n      anon_sym_DOT,\n    ACTIONS(3918), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(3914), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3912), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40715] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3922), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3920), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40767] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3766), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1304), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1302), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [40821] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3924), 1,\n      anon_sym_COMMA,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3926), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [40933] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3930), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3928), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [40985] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3770), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3768), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41037] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3862), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3876), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3878), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41091] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3774), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41143] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3932), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3904), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41195] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(3936), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3934), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [41253] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3940), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3938), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41305] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3944), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3942), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41357] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3948), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3946), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41411] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3952), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3950), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41463] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3956), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3954), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41515] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2288), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2290), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41567] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3960), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3958), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41619] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2284), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2286), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41671] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3888), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(3890), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 27,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [41727] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3900), 1,\n      anon_sym_extends,\n    ACTIONS(3962), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3965), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [41787] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3920), 1,\n      anon_sym_extends,\n    ACTIONS(3968), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3971), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [41847] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3976), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3974), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41899] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3978), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [41951] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2280), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2282), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42003] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3982), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3120), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [42117] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3984), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(1308), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [42173] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3799), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42225] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3986), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(3661), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [42281] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1334), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1332), 31,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [42333] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3988), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(3721), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [42389] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2740), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [42445] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1374), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1372), 31,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [42497] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3978), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42549] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3924), 1,\n      anon_sym_COMMA,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3561), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [42661] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3978), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42713] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3990), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3101), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [42827] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3799), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42879] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3992), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42931] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3996), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [42983] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4000), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(2979), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [43097] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4002), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3067), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [43211] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4004), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3117), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [43325] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4006), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3133), 1,\n      aux_sym_array_repeat1,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [43439] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3992), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43491] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(4008), 3,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [43601] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2252), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43653] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3996), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43705] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3992), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43757] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3996), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43809] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2254), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2256), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43861] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3809), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3807), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43913] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4010), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [43965] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3803), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44017] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4010), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44069] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3803), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44121] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4014), 1,\n      anon_sym_is,\n    ACTIONS(3770), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3768), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44175] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3748), 1,\n      anon_sym_is,\n    ACTIONS(3776), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3774), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44229] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4010), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44281] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4016), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44333] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3900), 1,\n      anon_sym_extends,\n    ACTIONS(3962), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3965), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3721), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [44393] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4022), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4020), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44445] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4024), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(2995), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [44559] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3920), 1,\n      anon_sym_extends,\n    ACTIONS(3968), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3971), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1308), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [44619] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4028), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4026), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44671] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3759), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n  [44781] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1360), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1358), 31,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [44833] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(4032), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4030), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [44891] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4032), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4030), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44943] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4036), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4034), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [44995] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(4040), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4038), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [45053] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3529), 1,\n      anon_sym_QMARK_DOT,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(1350), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1352), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [45113] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4044), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4042), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45165] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4046), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45217] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4046), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45269] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4046), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45321] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4050), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45373] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4050), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45425] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4050), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45477] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4054), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45529] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4054), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45581] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4054), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45633] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4060), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4058), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45685] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [45745] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4064), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4062), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45797] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2260), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2262), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45849] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4066), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45901] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4072), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4070), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [45953] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(4076), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4074), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [46011] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4080), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4078), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46063] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4082), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46115] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4086), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(2994), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [46229] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3581), 1,\n      anon_sym_COMMA,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3781), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [46341] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    STATE(1779), 1,\n      sym_arguments,\n    ACTIONS(4090), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4088), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [46397] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4094), 6,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n      sym_number,\n      sym_private_property_identifier,\n    ACTIONS(4092), 38,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      sym_identifier,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [46449] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4082), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46501] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3729), 1,\n      anon_sym_LT,\n    ACTIONS(3746), 1,\n      anon_sym_DOT,\n    STATE(1661), 1,\n      sym_type_arguments,\n    ACTIONS(3517), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2790), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46559] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2890), 1,\n      anon_sym_EQ,\n    ACTIONS(2895), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2893), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [46617] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4082), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46669] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4096), 1,\n      anon_sym_DOT,\n    ACTIONS(4098), 1,\n      anon_sym_COLON_COLON,\n    STATE(1742), 1,\n      sym_arguments,\n    ACTIONS(3785), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3783), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46729] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4100), 1,\n      anon_sym_DOT,\n    ACTIONS(4102), 1,\n      anon_sym_COLON_COLON,\n    STATE(1741), 1,\n      sym_arguments,\n    ACTIONS(3793), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3791), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46789] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    STATE(1740), 1,\n      sym_arguments,\n    ACTIONS(4104), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2776), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2766), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46847] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4106), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46899] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4106), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [46951] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4106), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47003] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4110), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47055] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4114), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(2994), 1,\n      aux_sym_array_repeat1,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [47169] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4110), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47221] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4116), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1304), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1302), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [47275] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1378), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1376), 31,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n      anon_sym_is,\n  [47327] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3924), 1,\n      anon_sym_COMMA,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(4118), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [47439] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    ACTIONS(3924), 1,\n      anon_sym_COMMA,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(4120), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [47551] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4110), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47603] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4124), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4122), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47655] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(4128), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4126), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47711] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3729), 1,\n      anon_sym_LT,\n    STATE(1667), 1,\n      sym_type_arguments,\n    ACTIONS(3770), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3768), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [47767] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4130), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1328), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1326), 30,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [47821] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2895), 1,\n      anon_sym_QMARK,\n    ACTIONS(2910), 1,\n      anon_sym_COLON,\n    ACTIONS(2907), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [47881] = 34,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(4132), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(3154), 1,\n      aux_sym_array_repeat1,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [47995] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1328), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1326), 31,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_while,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48047] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(3682), 1,\n      anon_sym_LT,\n    ACTIONS(3684), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3686), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3688), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3692), 1,\n      anon_sym_AMP,\n    ACTIONS(3694), 1,\n      anon_sym_CARET,\n    ACTIONS(3696), 1,\n      anon_sym_PIPE,\n    ACTIONS(3700), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3702), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3710), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3712), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3673), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3680), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3690), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3698), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3706), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3708), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3704), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3759), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48157] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3965), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4134), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(3900), 4,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48219] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3971), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4138), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(3920), 4,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48281] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(4142), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n  [48391] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3811), 1,\n      anon_sym_AMP,\n    ACTIONS(3813), 1,\n      anon_sym_PIPE,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(4146), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4144), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48449] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2915), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48507] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48561] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4148), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3774), 4,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48618] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4154), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [48689] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1374), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1372), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48740] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3721), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [48793] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4157), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3876), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3878), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [48846] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3770), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3768), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [48897] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3930), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3928), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [48948] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4159), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [49059] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4163), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4161), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49110] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4165), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 19,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [49179] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4170), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49230] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(4076), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4074), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49287] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3483), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3485), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [49398] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4216), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4214), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49449] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4220), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4218), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49500] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2260), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2262), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [49551] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1334), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1332), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49602] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [49665] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3581), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3583), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [49776] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3533), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3535), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [49887] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 1,\n      anon_sym_EQ,\n    ACTIONS(3661), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [49940] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3678), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [50049] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3496), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3498), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [50160] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3744), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [50269] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3462), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3464), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [50380] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1328), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1326), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [50431] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3418), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3424), 1,\n      anon_sym_COLON,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [50542] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4222), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [50615] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(1308), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [50668] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4227), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4225), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [50719] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4231), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4229), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [50770] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4235), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4233), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [50821] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4239), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4237), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [50872] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4241), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 15,\n      sym__ternary_qmark,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [50949] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4244), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [51060] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 13,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [51143] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_COLON,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [51240] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_COLON,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 6,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [51339] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4222), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 9,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [51418] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3535), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3533), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [51469] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(4148), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(4151), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [51526] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 4,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3506), 8,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [51617] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_PIPE,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [51710] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4246), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [51781] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3900), 1,\n      anon_sym_extends,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3988), 1,\n      anon_sym_COMMA,\n    ACTIONS(4249), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3965), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3717), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [51844] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1360), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1358), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [51895] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3596), 1,\n      anon_sym_COMMA,\n    ACTIONS(3599), 1,\n      anon_sym_COLON,\n    ACTIONS(3920), 1,\n      anon_sym_extends,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4138), 1,\n      anon_sym_RPAREN,\n    ACTIONS(1306), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(3971), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [51960] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4252), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [52071] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3723), 1,\n      anon_sym_COMMA,\n    ACTIONS(3726), 1,\n      anon_sym_COLON,\n    ACTIONS(3900), 1,\n      anon_sym_extends,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4134), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3717), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(3965), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52136] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_PIPE,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [52231] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4256), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4254), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52282] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4222), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [52359] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(4040), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4038), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52416] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3888), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52471] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3884), 1,\n      anon_sym_extends,\n    ACTIONS(4258), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(4261), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4170), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52528] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4222), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 14,\n      sym__ternary_qmark,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [52607] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 6,\n      anon_sym_BANG,\n      anon_sym_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 10,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [52694] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2254), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2256), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [52745] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(4146), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4144), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52802] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(3936), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3934), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [52859] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4264), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [52970] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_COLON,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 5,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACK,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [53071] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3577), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3579), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [53182] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4266), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [53293] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(4148), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4270), 1,\n      anon_sym_COMMA,\n    ACTIONS(4272), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4268), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [53356] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 1,\n      anon_sym_EQ,\n    ACTIONS(3661), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [53409] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4275), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [53520] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3569), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3571), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [53631] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3774), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [53682] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4277), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [53793] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3932), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3904), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [53844] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4279), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [53955] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4283), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4281), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54006] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2252), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [54057] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3565), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3567), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [54168] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3922), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3920), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [54219] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3944), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3942), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [54270] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4285), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [54381] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3920), 1,\n      anon_sym_extends,\n    ACTIONS(3922), 1,\n      anon_sym_QMARK,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1306), 2,\n      anon_sym_EQ,\n      anon_sym_COLON,\n    ACTIONS(3971), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4138), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54444] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4287), 1,\n      anon_sym_DOT,\n    ACTIONS(4289), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(3914), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3912), 28,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [54499] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3900), 1,\n      anon_sym_extends,\n    ACTIONS(3902), 1,\n      anon_sym_QMARK,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3717), 2,\n      anon_sym_EQ,\n      anon_sym_COLON,\n    ACTIONS(3965), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4134), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54562] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54619] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3553), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3555), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [54730] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3906), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 4,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54787] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(1308), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54840] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54897] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4261), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4258), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3884), 4,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(4170), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [54954] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(4148), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4293), 1,\n      anon_sym_COMMA,\n    ACTIONS(4296), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4300), 1,\n      anon_sym_COLON,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4291), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55019] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(2895), 1,\n      anon_sym_QMARK,\n    ACTIONS(2907), 1,\n      anon_sym_COMMA,\n    ACTIONS(2910), 1,\n      anon_sym_COLON,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_RPAREN,\n      anon_sym_extends,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55084] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3920), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3971), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55143] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3900), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3965), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55202] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3902), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3900), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55253] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55306] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3898), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3896), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55357] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(3894), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3892), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55410] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3888), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55461] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3886), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3884), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55512] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3882), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3880), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55563] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3878), 1,\n      anon_sym_extends,\n    ACTIONS(4157), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3876), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3874), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3872), 28,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55620] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(3870), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3868), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55677] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3866), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3864), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55728] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4157), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3860), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3858), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55781] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3721), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [55834] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3856), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3854), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55885] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2280), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2282), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [55936] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4303), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [56047] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4305), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [56158] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2901), 1,\n      anon_sym_EQ,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 26,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [56217] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4311), 1,\n      sym_regex_flags,\n    ACTIONS(4307), 17,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n    ACTIONS(4309), 25,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [56270] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 24,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [56333] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3581), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [56442] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3533), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [56551] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4351), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4349), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [56602] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4355), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4353), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [56653] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4359), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4357), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [56704] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(4116), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1304), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1302), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [56759] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4361), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [56868] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4365), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4363), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [56919] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4367), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [56988] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1308), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [57039] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3424), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3418), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [57090] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3496), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [57199] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3483), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [57308] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4372), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4370), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [57359] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4376), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4374), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [57410] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4380), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4378), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [57461] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4382), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [57538] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3577), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [57647] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4128), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4126), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [57702] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4385), 1,\n      anon_sym_RPAREN,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [57813] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3462), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [57922] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3274), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3276), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [57973] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3418), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [58082] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(4148), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(4151), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [58139] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4387), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [58212] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4124), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4122), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58263] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4110), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58314] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4110), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58365] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4110), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58416] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(1312), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1302), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1308), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [58473] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4106), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58524] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4106), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58575] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4106), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58626] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4082), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58677] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4082), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58728] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4082), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58779] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4080), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4078), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [58830] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(4148), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4390), 1,\n      anon_sym_COMMA,\n    ACTIONS(4392), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4291), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [58893] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 7,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [58976] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1350), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1352), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59027] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 28,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59080] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4072), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4070), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [59131] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4397), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4395), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59182] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4401), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4399), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59233] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4405), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4403), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59284] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3579), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3577), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59335] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2740), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59386] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4407), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [59497] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2890), 1,\n      anon_sym_EQ,\n    ACTIONS(2893), 1,\n      anon_sym_COMMA,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2895), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3904), 2,\n      anon_sym_RPAREN,\n      anon_sym_extends,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59560] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4066), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [59611] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4064), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4062), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [59662] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4060), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4058), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [59713] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4411), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4409), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59764] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [59861] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4054), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [59912] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4415), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4413), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [59963] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4054), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60014] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3547), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3549), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [60125] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4054), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60176] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4050), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60227] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4050), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60278] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4050), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60329] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4046), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60380] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4419), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4417), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [60431] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4046), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60482] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3852), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3850), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60533] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3848), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3846), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60584] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3842), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3840), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60635] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3838), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3836), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60686] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4046), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60737] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4044), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4042), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [60788] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3539), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3541), 1,\n      anon_sym_COLON,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [60899] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [60998] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4387), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [61077] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4036), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4034), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [61128] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 28,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [61183] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1366), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1368), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [61234] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 9,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [61325] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3888), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(3890), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [61380] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3884), 1,\n      anon_sym_extends,\n    ACTIONS(4258), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(4261), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4170), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [61437] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 9,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [61530] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3834), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3832), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [61581] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3830), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3828), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [61632] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [61727] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4387), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 10,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [61804] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3731), 1,\n      anon_sym_QMARK_DOT,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(1350), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1352), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [61863] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4421), 1,\n      anon_sym_RBRACE,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [61974] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3826), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3824), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62025] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3821), 1,\n      anon_sym_DOT,\n    ACTIONS(3819), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3817), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62078] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4387), 1,\n      anon_sym_LT,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [62157] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3539), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [62266] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(3809), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3807), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [62323] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3809), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3807), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62374] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    STATE(1879), 1,\n      sym_arguments,\n    ACTIONS(4090), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4088), 28,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [62429] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2284), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2286), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62480] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3940), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3938), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62531] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(3948), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3946), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62584] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3952), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3950), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [62635] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 5,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 11,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [62722] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 6,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_SEMI,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [62823] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4425), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4423), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [62874] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3567), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3565), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [62925] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4429), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4427), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [62976] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3555), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3553), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63027] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3549), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3547), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63078] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4433), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4431), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63129] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3661), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63180] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 26,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63239] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4437), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4435), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63290] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4441), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4439), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63341] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3426), 1,\n      anon_sym_LT,\n    ACTIONS(3428), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3430), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(3432), 1,\n      anon_sym_GT_GT,\n    ACTIONS(3436), 1,\n      anon_sym_AMP,\n    ACTIONS(3438), 1,\n      anon_sym_CARET,\n    ACTIONS(3440), 1,\n      anon_sym_PIPE,\n    ACTIONS(3444), 1,\n      anon_sym_PERCENT,\n    ACTIONS(3446), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3454), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3460), 1,\n      sym__ternary_qmark,\n    ACTIONS(3559), 1,\n      anon_sym_COMMA,\n    ACTIONS(4443), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3416), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(3422), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(3434), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(3442), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3450), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3452), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3448), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [63452] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3547), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [63561] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4447), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4445), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63612] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3553), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [63721] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3565), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [63830] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3920), 1,\n      anon_sym_extends,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3984), 1,\n      anon_sym_COMMA,\n    ACTIONS(4449), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3971), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1306), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63893] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1320), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1322), 29,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [63944] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3956), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3954), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [63995] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3960), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3958), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64046] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3976), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3974), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64097] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3978), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64148] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3799), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64199] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3978), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64250] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3799), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64301] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3978), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64352] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3799), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64403] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3992), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64454] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3996), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3992), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64556] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3996), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64607] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3992), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64658] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3996), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64709] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3803), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64760] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4010), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64811] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3803), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64862] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4010), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64913] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3803), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [64964] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4010), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [65015] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3759), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [65124] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4016), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [65175] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4022), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4020), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [65226] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3602), 1,\n      anon_sym_as,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(3642), 1,\n      anon_sym_satisfies,\n    ACTIONS(4313), 1,\n      anon_sym_LT,\n    ACTIONS(4319), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4321), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4323), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4327), 1,\n      anon_sym_AMP,\n    ACTIONS(4329), 1,\n      anon_sym_CARET,\n    ACTIONS(4331), 1,\n      anon_sym_PIPE,\n    ACTIONS(4335), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4337), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4345), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4347), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3569), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3640), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4315), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4317), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4325), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4333), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4341), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4343), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4339), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [65335] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2288), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2290), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [65386] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4028), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4026), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [65437] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4172), 1,\n      anon_sym_AMP,\n    ACTIONS(4174), 1,\n      anon_sym_PIPE,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(4032), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4030), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [65494] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4032), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4030), 30,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n      anon_sym_extends,\n  [65545] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4452), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [65653] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3900), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3965), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3721), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [65711] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4454), 1,\n      anon_sym_RBRACK,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [65819] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4411), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4409), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [65869] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4163), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4161), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [65919] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4456), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [66027] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4458), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [66135] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      sym_regex_flags,\n    ACTIONS(4307), 16,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n    ACTIONS(4309), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [66187] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1320), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1322), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66237] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1324), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1316), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1320), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1322), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66291] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4425), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4423), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66341] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4351), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4349), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66391] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1370), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1362), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1366), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1368), 26,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66445] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4462), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [66553] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4355), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4353), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66603] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4359), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4357), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66653] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1350), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1352), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66703] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 1,\n      anon_sym_COLON,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4464), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66765] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4365), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4363), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66815] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66873] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1308), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66923] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3424), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3418), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [66973] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4372), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4370), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67023] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3567), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3565), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67073] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [67135] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2901), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 28,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67187] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3581), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [67295] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67345] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4170), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67395] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3533), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [67503] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3496), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [67611] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4447), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4445), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67661] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3462), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [67769] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3906), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n    ACTIONS(2740), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67825] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4216), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4214), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67875] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 28,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [67927] = 33,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3759), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4472), 1,\n      anon_sym_GT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    ACTIONS(4504), 1,\n      anon_sym_in,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [68037] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4429), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4427), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68087] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4507), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 19,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [68155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4220), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4218), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68205] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4397), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4395), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4401), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4399), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68305] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3418), 1,\n      anon_sym_of,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [68413] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3555), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3553), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68463] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3888), 4,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n    ACTIONS(2740), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68517] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3884), 1,\n      anon_sym_extends,\n    ACTIONS(4261), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4258), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n    ACTIONS(4170), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68573] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3274), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3276), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68623] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4227), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4225), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68673] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1346), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1350), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1352), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68725] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4441), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4439), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68775] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4231), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4229), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68825] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4235), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4233), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68875] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4510), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [68947] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4239), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4237), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [68997] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4515), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4513), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69051] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3549), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3547), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69101] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3886), 1,\n      anon_sym_QMARK,\n    ACTIONS(3884), 2,\n      anon_sym_RPAREN,\n      anon_sym_extends,\n    ACTIONS(4261), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4258), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(4170), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69159] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3932), 1,\n      anon_sym_QMARK,\n    ACTIONS(3904), 2,\n      anon_sym_RPAREN,\n      anon_sym_extends,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3906), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69217] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4376), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4374), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69267] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4433), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4431), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69317] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3535), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3533), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69367] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3483), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [69475] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4517), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 15,\n      sym__ternary_qmark,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [69551] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 7,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 13,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [69633] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4520), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [69741] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4522), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [69849] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4515), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4513), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69903] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3661), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [69953] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [70043] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4524), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [70151] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [70247] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4515), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4513), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70301] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 6,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [70399] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4300), 1,\n      anon_sym_COLON,\n    ACTIONS(4291), 2,\n      anon_sym_EQ,\n      anon_sym_QMARK,\n    ACTIONS(4293), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70455] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4526), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 17,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [70525] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4283), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4281), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70575] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4531), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4529), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70629] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4510), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [70707] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4415), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4413), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70757] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4405), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4403), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70807] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4535), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4533), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70861] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4270), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4268), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70915] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4380), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4378), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [70965] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 8,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [71057] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3579), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3577), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71107] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [71201] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3539), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [71309] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2905), 1,\n      anon_sym_EQ,\n    ACTIONS(3018), 1,\n      anon_sym_in,\n    ACTIONS(3021), 1,\n      anon_sym_of,\n    ACTIONS(2740), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71365] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4539), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4537), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71419] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3547), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [71527] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4510), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 10,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [71603] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4510), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 14,\n      sym__ternary_qmark,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [71681] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3726), 1,\n      anon_sym_in,\n    ACTIONS(3988), 1,\n      anon_sym_of,\n    ACTIONS(3721), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71737] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 1,\n      anon_sym_EQ,\n    ACTIONS(3666), 1,\n      anon_sym_in,\n    ACTIONS(3986), 1,\n      anon_sym_of,\n    ACTIONS(3661), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71793] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1366), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1368), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71843] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 5,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 10,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [71929] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4543), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4541), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [71983] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      sym_regex_flags,\n    ACTIONS(4307), 17,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n    ACTIONS(4309), 24,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [72035] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(2917), 1,\n      anon_sym_COLON,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3904), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72095] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4437), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4435), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72145] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3599), 1,\n      anon_sym_in,\n    ACTIONS(3984), 1,\n      anon_sym_of,\n    ACTIONS(1308), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72201] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72257] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4390), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4291), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72311] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4547), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4545), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72365] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4547), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4545), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72419] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4256), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4254), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72469] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3920), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3971), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1308), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72527] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4148), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3774), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(4151), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72583] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3006), 1,\n      anon_sym_EQ,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72641] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3553), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [72749] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3565), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [72857] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4258), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3884), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(4261), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4170), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72913] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4419), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4417), 29,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [72963] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4547), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    ACTIONS(4545), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [73017] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2792), 1,\n      anon_sym_EQ,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3932), 1,\n      anon_sym_QMARK,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3904), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [73077] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4182), 1,\n      anon_sym_LT,\n    ACTIONS(4184), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4186), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4188), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4192), 1,\n      anon_sym_AMP,\n    ACTIONS(4194), 1,\n      anon_sym_CARET,\n    ACTIONS(4196), 1,\n      anon_sym_PIPE,\n    ACTIONS(4200), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4202), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4210), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4212), 1,\n      sym__ternary_qmark,\n    ACTIONS(4549), 1,\n      anon_sym_COLON,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4178), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4180), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4190), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4198), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4206), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4208), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4204), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [73185] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 5,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_of,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [73285] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3569), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [73393] = 32,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3577), 1,\n      anon_sym_of,\n    ACTIONS(4468), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4476), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4482), 1,\n      anon_sym_AMP,\n    ACTIONS(4484), 1,\n      anon_sym_CARET,\n    ACTIONS(4486), 1,\n      anon_sym_PIPE,\n    ACTIONS(4490), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4492), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4500), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4502), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4470), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4472), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4480), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4488), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4496), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4498), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4494), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [73501] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3968), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1306), 2,\n      anon_sym_EQ,\n      anon_sym_COLON,\n    ACTIONS(3971), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3920), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [73559] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3962), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3717), 2,\n      anon_sym_EQ,\n      anon_sym_COLON,\n    ACTIONS(3965), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3900), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [73617] = 28,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 4,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [73716] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [73821] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3589), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3606), 1,\n      anon_sym_BANG,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2902), 1,\n      sym_type_arguments,\n    STATE(3012), 1,\n      sym_optional_chain,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3594), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1870), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [73926] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [74031] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4587), 1,\n      anon_sym_COLON,\n    ACTIONS(4283), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4281), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [74082] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [74137] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3023), 1,\n      anon_sym_EQ,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [74194] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3504), 5,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 9,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [74279] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [74384] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4589), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3491), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3489), 16,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [74453] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3515), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3513), 22,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [74514] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4258), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3884), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(4261), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4170), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [74569] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [74674] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [74779] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [74884] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [74989] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 2,\n      anon_sym_EQ,\n      anon_sym_COLON,\n    ACTIONS(3663), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(3661), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [75042] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4592), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3470), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3472), 14,\n      sym__ternary_qmark,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [75117] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [75222] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(3904), 1,\n      anon_sym_extends,\n    ACTIONS(3906), 2,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [75279] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [75384] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 3,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n    ACTIONS(3888), 4,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [75437] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4148), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3774), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(4151), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [75492] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [75597] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3920), 1,\n      anon_sym_extends,\n    ACTIONS(3968), 2,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3971), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1308), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [75654] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4595), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3401), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3399), 18,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_satisfies,\n  [75721] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3900), 1,\n      anon_sym_extends,\n    ACTIONS(3962), 2,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(3965), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3721), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [75778] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4598), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 15,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [75849] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 7,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 12,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [75930] = 26,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 6,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [76025] = 27,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3504), 1,\n      anon_sym_BANG,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 5,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [76122] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4601), 1,\n      anon_sym_COLON,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [76173] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4598), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 8,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [76250] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 3,\n      anon_sym_BANG,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [76339] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 7,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_CARET,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [76430] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [76535] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(3776), 1,\n      anon_sym_QMARK,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4148), 3,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [76592] = 25,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3504), 2,\n      anon_sym_BANG,\n      anon_sym_PIPE,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(3506), 6,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_satisfies,\n  [76685] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 1,\n      anon_sym_EQ,\n    ACTIONS(3057), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [76738] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4598), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 10,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 14,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n  [76813] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [76918] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4598), 1,\n      anon_sym_LT,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(3504), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3506), 13,\n      sym__ternary_qmark,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n  [76995] = 31,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3405), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3412), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(3414), 1,\n      anon_sym_as,\n    ACTIONS(3420), 1,\n      anon_sym_BANG,\n    ACTIONS(3458), 1,\n      anon_sym_satisfies,\n    ACTIONS(4555), 1,\n      anon_sym_LT,\n    ACTIONS(4557), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(4559), 1,\n      anon_sym_PIPE_PIPE,\n    ACTIONS(4561), 1,\n      anon_sym_GT_GT,\n    ACTIONS(4565), 1,\n      anon_sym_AMP,\n    ACTIONS(4567), 1,\n      anon_sym_CARET,\n    ACTIONS(4569), 1,\n      anon_sym_PIPE,\n    ACTIONS(4573), 1,\n      anon_sym_PERCENT,\n    ACTIONS(4575), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(4583), 1,\n      anon_sym_QMARK_QMARK,\n    ACTIONS(4585), 1,\n      sym__ternary_qmark,\n    STATE(2835), 1,\n      sym_type_arguments,\n    STATE(3130), 1,\n      sym_optional_chain,\n    ACTIONS(3410), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(3456), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(4551), 2,\n      anon_sym_STAR,\n      anon_sym_SLASH,\n    ACTIONS(4553), 2,\n      anon_sym_in,\n      anon_sym_GT,\n    ACTIONS(4563), 2,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n    ACTIONS(4571), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(4579), 2,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4581), 2,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n    STATE(1594), 2,\n      sym_template_string,\n      sym_arguments,\n    ACTIONS(4577), 3,\n      anon_sym_LT_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [77100] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4148), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3774), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77154] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4258), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4261), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3884), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(4170), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(4168), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77208] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2768), 1,\n      anon_sym_LPAREN,\n    STATE(2176), 1,\n      sym_arguments,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77260] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 1,\n      anon_sym_extends,\n    ACTIONS(4148), 2,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n    ACTIONS(4151), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77314] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2930), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 14,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77364] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3596), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3984), 1,\n      anon_sym_COMMA,\n    ACTIONS(1308), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77418] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 1,\n      anon_sym_EQ,\n    ACTIONS(3663), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3986), 1,\n      anon_sym_COMMA,\n    ACTIONS(3661), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77472] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3723), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3988), 1,\n      anon_sym_COMMA,\n    ACTIONS(3721), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77526] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3904), 2,\n      anon_sym_COMMA,\n      anon_sym_extends,\n    ACTIONS(3909), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2740), 10,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77582] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3006), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 26,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77632] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2893), 1,\n      anon_sym_COMMA,\n    ACTIONS(2907), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3060), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77686] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3906), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3909), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3904), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n    ACTIONS(2740), 11,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 23,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77740] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3023), 1,\n      anon_sym_EQ,\n    ACTIONS(2740), 13,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 25,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_of,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77789] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 1,\n      anon_sym_EQ,\n    ACTIONS(3726), 1,\n      anon_sym_in,\n    ACTIONS(3988), 1,\n      anon_sym_of,\n    ACTIONS(3721), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3719), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77842] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4603), 1,\n      sym_identifier,\n    STATE(3489), 1,\n      sym_mapped_type_clause,\n    ACTIONS(4605), 37,\n      anon_sym_pub,\n      anon_sym_export,\n      anon_sym_type,\n      anon_sym_namespace,\n      anon_sym_struct,\n      anon_sym_async,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_declare,\n      anon_sym_public,\n      anon_sym_private,\n      anon_sym_protected,\n      anon_sym_override,\n      anon_sym_readonly,\n      anon_sym_module,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_workgroup,\n      anon_sym_get,\n      anon_sym_set,\n  [77891] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2913), 1,\n      anon_sym_EQ,\n    ACTIONS(3018), 1,\n      anon_sym_in,\n    ACTIONS(3021), 1,\n      anon_sym_of,\n    ACTIONS(2740), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2738), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [77944] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4311), 1,\n      sym_regex_flags,\n    ACTIONS(4307), 17,\n      anon_sym_as,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      anon_sym_satisfies,\n    ACTIONS(4309), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [77993] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3657), 1,\n      anon_sym_EQ,\n    ACTIONS(3666), 1,\n      anon_sym_in,\n    ACTIONS(3986), 1,\n      anon_sym_of,\n    ACTIONS(3661), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3659), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [78046] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1306), 1,\n      anon_sym_EQ,\n    ACTIONS(3599), 1,\n      anon_sym_in,\n    ACTIONS(3984), 1,\n      anon_sym_of,\n    ACTIONS(1308), 12,\n      anon_sym_STAR,\n      anon_sym_BANG,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_SLASH,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1310), 24,\n      sym__ternary_qmark,\n      anon_sym_as,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_QMARK_QMARK,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      anon_sym_satisfies,\n  [78099] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(97), 1,\n      anon_sym_AT,\n    ACTIONS(1779), 1,\n      anon_sym_type,\n    ACTIONS(1781), 1,\n      anon_sym_namespace,\n    ACTIONS(1783), 1,\n      anon_sym_import,\n    ACTIONS(1785), 1,\n      anon_sym_var,\n    ACTIONS(1787), 1,\n      anon_sym_let,\n    ACTIONS(1789), 1,\n      anon_sym_const,\n    ACTIONS(1791), 1,\n      anon_sym_struct,\n    ACTIONS(1793), 1,\n      anon_sym_async,\n    ACTIONS(1798), 1,\n      anon_sym_fn_STAR,\n    ACTIONS(1802), 1,\n      anon_sym_declare,\n    ACTIONS(1806), 1,\n      anon_sym_trait,\n    ACTIONS(1808), 1,\n      anon_sym_impl,\n    ACTIONS(1810), 1,\n      anon_sym_enum,\n    ACTIONS(1820), 1,\n      anon_sym_fn,\n    ACTIONS(1822), 1,\n      anon_sym_module,\n    ACTIONS(1824), 1,\n      anon_sym_global,\n    STATE(592), 1,\n      sym_declaration,\n    STATE(603), 1,\n      sym_internal_module,\n    STATE(873), 1,\n      sym_decorator,\n    STATE(2880), 1,\n      aux_sym_class_repeat1,\n    STATE(548), 13,\n      sym_variable_declaration,\n      sym_lexical_declaration,\n      sym_struct_declaration,\n      sym_function_declaration,\n      sym_generator_function_declaration,\n      sym_function_signature,\n      sym_ambient_declaration,\n      sym_module,\n      sym_import_alias,\n      sym_interface_declaration,\n      sym_impl_declaration,\n      sym_enum_declaration,\n      sym_type_alias_declaration,\n  [78181] = 23,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(97), 1,\n      anon_sym_AT,\n    ACTIONS(1779), 1,\n      anon_sym_type,\n    ACTIONS(1783), 1,\n      anon_sym_import,\n    ACTIONS(1785), 1,\n      anon_sym_var,\n    ACTIONS(1787), 1,\n      anon_sym_let,\n    ACTIONS(1789), 1,\n      anon_sym_const,\n    ACTIONS(1791), 1,\n      anon_sym_struct,\n    ACTIONS(1793), 1,\n      anon_sym_async,\n    ACTIONS(1798), 1,\n      anon_sym_fn_STAR,\n    ACTIONS(1806), 1,\n      anon_sym_trait,\n    ACTIONS(1808), 1,\n      anon_sym_impl,\n    ACTIONS(1810), 1,\n      anon_sym_enum,\n    ACTIONS(1820), 1,\n      anon_sym_fn,\n    ACTIONS(1824), 1,\n      anon_sym_global,\n    ACTIONS(2188), 1,\n      anon_sym_namespace,\n    ACTIONS(2190), 1,\n      anon_sym_declare,\n    ACTIONS(2192), 1,\n      anon_sym_module,\n    STATE(592), 1,\n      sym_declaration,\n    STATE(603), 1,\n      sym_internal_module,\n    STATE(873), 1,\n      sym_decorator,\n    STATE(2880), 1,\n      aux_sym_class_repeat1,\n    STATE(548), 13,\n      sym_variable_declaration,\n      sym_lexical_declaration,\n      sym_struct_declaration,\n      sym_function_declaration,\n      sym_generator_function_declaration,\n      sym_function_signature,\n      sym_ambient_declaration,\n      sym_module,\n      sym_import_alias,\n      sym_interface_declaration,\n      sym_impl_declaration,\n      sym_enum_declaration,\n      sym_type_alias_declaration,\n  [78263] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4609), 1,\n      sym_number,\n    STATE(3608), 2,\n      sym_string,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78307] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4611), 1,\n      sym_number,\n    STATE(3418), 1,\n      sym_predefined_type,\n    STATE(3419), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78353] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4613), 1,\n      sym_number,\n    STATE(3562), 1,\n      sym_predefined_type,\n    STATE(3563), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78399] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4615), 1,\n      sym_number,\n    STATE(3569), 2,\n      sym_string,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78443] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4617), 1,\n      sym_number,\n    STATE(3516), 1,\n      sym_string,\n    STATE(3518), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78489] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4619), 1,\n      sym_number,\n    STATE(3603), 1,\n      sym_predefined_type,\n    STATE(3605), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78535] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4621), 1,\n      sym_number,\n    STATE(3595), 1,\n      sym_predefined_type,\n    STATE(3597), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78581] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4623), 1,\n      sym_number,\n    STATE(3510), 1,\n      sym_string,\n    STATE(3514), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78627] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4625), 1,\n      sym_number,\n    STATE(3590), 1,\n      sym_predefined_type,\n    STATE(3591), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78673] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4627), 1,\n      sym_number,\n    STATE(3491), 2,\n      sym_string,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78717] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4629), 1,\n      sym_number,\n    STATE(3415), 1,\n      sym_predefined_type,\n    STATE(3416), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78763] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4631), 1,\n      sym_number,\n    STATE(3673), 1,\n      sym_string,\n    STATE(3675), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78809] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4635), 1,\n      anon_sym_asserts,\n    STATE(2580), 1,\n      sym_type_predicate,\n    STATE(3666), 1,\n      sym_predefined_type,\n    ACTIONS(4633), 2,\n      sym_identifier,\n      sym_this,\n    ACTIONS(215), 23,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78851] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4637), 1,\n      sym_number,\n    STATE(3556), 1,\n      sym_string,\n    STATE(3655), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78897] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4641), 1,\n      anon_sym_asserts,\n    STATE(3279), 1,\n      sym_type_predicate,\n    STATE(3545), 1,\n      sym_predefined_type,\n    ACTIONS(4639), 2,\n      sym_identifier,\n      sym_this,\n    ACTIONS(215), 23,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78939] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4643), 1,\n      sym_number,\n    STATE(3528), 1,\n      sym_string,\n    STATE(3536), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [78985] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4645), 1,\n      sym_number,\n    STATE(3572), 1,\n      sym_string,\n    STATE(3578), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79031] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4647), 1,\n      sym_number,\n    STATE(3558), 1,\n      sym_string,\n    STATE(3560), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79077] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4649), 1,\n      sym_number,\n    STATE(3421), 1,\n      sym_predefined_type,\n    STATE(3422), 1,\n      sym_string,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79123] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4651), 1,\n      sym_number,\n    STATE(3552), 1,\n      sym_string,\n    STATE(3553), 1,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79169] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4655), 1,\n      anon_sym_asserts,\n    STATE(2953), 1,\n      sym_type_predicate,\n    STATE(3688), 1,\n      sym_predefined_type,\n    ACTIONS(4653), 2,\n      sym_identifier,\n      sym_this,\n    ACTIONS(215), 23,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79211] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4657), 1,\n      sym_number,\n    STATE(3548), 2,\n      sym_string,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79255] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4659), 1,\n      sym_number,\n    STATE(3424), 2,\n      sym_string,\n      sym_predefined_type,\n    ACTIONS(215), 8,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n    ACTIONS(4607), 15,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79299] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2652), 1,\n      sym_type_predicate,\n    STATE(3666), 1,\n      sym_predefined_type,\n    ACTIONS(4661), 2,\n      sym_identifier,\n      sym_this,\n    ACTIONS(215), 23,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79338] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2961), 1,\n      sym_type_predicate,\n    STATE(3688), 1,\n      sym_predefined_type,\n    ACTIONS(4663), 2,\n      sym_identifier,\n      sym_this,\n    ACTIONS(215), 23,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79377] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(3227), 1,\n      sym_type_predicate,\n    STATE(3545), 1,\n      sym_predefined_type,\n    ACTIONS(4665), 2,\n      sym_identifier,\n      sym_this,\n    ACTIONS(215), 23,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_int,\n      anon_sym_float,\n      anon_sym_float2,\n      anon_sym_float3,\n      anon_sym_float4,\n      anon_sym_float3x3,\n      anon_sym_float2x2,\n      anon_sym_float4x4,\n      anon_sym_int2,\n      anon_sym_int3,\n      anon_sym_int4,\n      anon_sym_int3x3,\n      anon_sym_int2x2,\n      anon_sym_int4x4,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n  [79416] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4082), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79443] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3996), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79470] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4050), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79497] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3978), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79524] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4010), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79551] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4667), 1,\n      anon_sym_DOT,\n    ACTIONS(4669), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4671), 1,\n      anon_sym_COLON_COLON,\n    STATE(2078), 1,\n      sym_arguments,\n    ACTIONS(3785), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3783), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79588] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4673), 1,\n      anon_sym_DOT,\n    ACTIONS(4675), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4677), 1,\n      anon_sym_COLON_COLON,\n    STATE(2084), 1,\n      sym_arguments,\n    ACTIONS(3793), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3791), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79625] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4054), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79652] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2776), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(2766), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79687] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3799), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79714] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3978), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79741] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4050), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79768] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4010), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79795] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4044), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4042), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79822] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3803), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79849] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3799), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79876] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3803), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79903] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3996), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79930] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4054), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79957] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3978), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [79984] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1342), 1,\n      anon_sym_EQ,\n    ACTIONS(1340), 18,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_while,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [80011] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3803), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80038] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4110), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80065] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4054), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80092] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4110), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80119] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4110), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80146] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4106), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80173] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4106), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80200] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4106), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80227] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4082), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80254] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4082), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80281] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4080), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4078), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80308] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3992), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80335] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2214), 19,\n      anon_sym_EQ,\n      anon_sym_LBRACE,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [80360] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1338), 1,\n      anon_sym_EQ,\n    ACTIONS(1336), 18,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_else,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_while,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [80387] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4050), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80414] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4010), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80441] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3799), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80468] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4046), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80495] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4046), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80522] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4046), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80549] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3996), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80576] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3992), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80603] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3992), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80630] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3976), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3974), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80657] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3960), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3958), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80684] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3517), 1,\n      anon_sym_EQ,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    ACTIONS(4683), 1,\n      anon_sym_is,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 13,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [80718] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3838), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3836), 15,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80744] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4685), 1,\n      anon_sym_EQ,\n    ACTIONS(3021), 2,\n      anon_sym_in,\n      anon_sym_of,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [80772] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1354), 1,\n      anon_sym_DOT,\n    ACTIONS(3819), 1,\n      anon_sym_EQ,\n    ACTIONS(3817), 16,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_for,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_LT,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [80800] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3848), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3846), 15,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80826] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4687), 1,\n      anon_sym_DOT,\n    ACTIONS(4689), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4691), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(3914), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3912), 12,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80858] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4693), 1,\n      anon_sym_EQ,\n    ACTIONS(3021), 2,\n      anon_sym_in,\n      anon_sym_of,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [80886] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3842), 3,\n      anon_sym_EQ,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(3840), 15,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [80912] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2768), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4695), 1,\n      anon_sym_DOT,\n    ACTIONS(4697), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4699), 1,\n      anon_sym_COLON_COLON,\n    STATE(2158), 1,\n      sym_arguments,\n    ACTIONS(3785), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3783), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [80947] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2768), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2774), 1,\n      anon_sym_QMARK_DOT,\n    STATE(2176), 1,\n      sym_arguments,\n    ACTIONS(2770), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2776), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2766), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [80980] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1342), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(1340), 15,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_BANG,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_QMARK,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81005] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2768), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4701), 1,\n      anon_sym_DOT,\n    ACTIONS(4703), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4705), 1,\n      anon_sym_COLON_COLON,\n    STATE(2168), 1,\n      sym_arguments,\n    ACTIONS(3793), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3791), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81040] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1338), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(1336), 15,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_BANG,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_QMARK,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81065] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3517), 1,\n      anon_sym_EQ,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 13,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [81096] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4050), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81120] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3996), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81144] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3996), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81168] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3992), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81192] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1378), 1,\n      anon_sym_EQ,\n    ACTIONS(1376), 15,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n      anon_sym_is,\n  [81216] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3998), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3996), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81240] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4110), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81264] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4110), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81288] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4693), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [81312] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3992), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81336] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4685), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [81360] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4112), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4110), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81384] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3799), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81408] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3978), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81432] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4106), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81456] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4106), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81480] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4108), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4106), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81504] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4082), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81528] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4082), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81552] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4084), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4082), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81576] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3799), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81600] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3978), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81624] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3801), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3799), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81648] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3856), 1,\n      anon_sym_EQ,\n    ACTIONS(3854), 15,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_for,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [81672] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4080), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4078), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81696] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4707), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [81720] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3980), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3978), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81744] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3976), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3974), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81768] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4054), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81792] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4054), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81816] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3960), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3958), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81840] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4056), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4054), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81864] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4050), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81888] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3994), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3992), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81912] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4052), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4050), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81936] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4046), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [81960] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3882), 1,\n      anon_sym_EQ,\n    ACTIONS(3880), 15,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_for,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [81984] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4046), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82008] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4048), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4046), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82032] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4044), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4042), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82056] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3770), 1,\n      anon_sym_EQ,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    STATE(2114), 1,\n      sym_type_arguments,\n    ACTIONS(3768), 13,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82084] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4709), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82108] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4711), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82132] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4010), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82156] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4713), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82180] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3803), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82204] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4010), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82228] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3803), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82252] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4012), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4010), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82276] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4715), 1,\n      anon_sym_EQ,\n    ACTIONS(2746), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82300] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4717), 1,\n      anon_sym_LT,\n    ACTIONS(4719), 1,\n      anon_sym_DOT,\n    ACTIONS(4721), 1,\n      anon_sym_is,\n    STATE(2294), 1,\n      sym_type_arguments,\n    ACTIONS(3517), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2790), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82332] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3805), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3803), 14,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82356] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4060), 1,\n      anon_sym_EQ,\n    ACTIONS(4058), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82379] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_EQ,\n    ACTIONS(4016), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82402] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3902), 1,\n      anon_sym_EQ,\n    ACTIONS(3900), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82425] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4022), 1,\n      anon_sym_EQ,\n    ACTIONS(4020), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82448] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4723), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82469] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4717), 1,\n      anon_sym_LT,\n    ACTIONS(4719), 1,\n      anon_sym_DOT,\n    STATE(2294), 1,\n      sym_type_arguments,\n    ACTIONS(3517), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2790), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82498] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3770), 1,\n      anon_sym_EQ,\n    ACTIONS(4725), 1,\n      anon_sym_is,\n    ACTIONS(3768), 13,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82523] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3876), 1,\n      anon_sym_EQ,\n    ACTIONS(4727), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3878), 13,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82548] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2260), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2262), 13,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82571] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4729), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82592] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3826), 1,\n      anon_sym_EQ,\n    ACTIONS(3824), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82615] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3940), 1,\n      anon_sym_EQ,\n    ACTIONS(3938), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82638] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4028), 1,\n      anon_sym_EQ,\n    ACTIONS(4026), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82661] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4731), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82682] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4072), 1,\n      anon_sym_EQ,\n    ACTIONS(4070), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82705] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3838), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3836), 13,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82728] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4733), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82749] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3952), 1,\n      anon_sym_EQ,\n    ACTIONS(3950), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82772] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3866), 1,\n      anon_sym_EQ,\n    ACTIONS(3864), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82795] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4735), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [82816] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4032), 1,\n      anon_sym_EQ,\n    ACTIONS(4030), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82839] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3930), 1,\n      anon_sym_EQ,\n    ACTIONS(3928), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82862] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3944), 1,\n      anon_sym_EQ,\n    ACTIONS(3942), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82885] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4737), 1,\n      anon_sym_DOT,\n    ACTIONS(4739), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4741), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(3914), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3912), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82914] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3830), 1,\n      anon_sym_EQ,\n    ACTIONS(3828), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82937] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3842), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3840), 13,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [82960] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4036), 1,\n      anon_sym_EQ,\n    ACTIONS(4034), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [82983] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4743), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [83004] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4745), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n  [83025] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3898), 1,\n      anon_sym_EQ,\n    ACTIONS(3896), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83048] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3922), 1,\n      anon_sym_EQ,\n    ACTIONS(3920), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83071] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4124), 1,\n      anon_sym_EQ,\n    ACTIONS(4122), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83094] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 1,\n      anon_sym_EQ,\n    ACTIONS(3888), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83117] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3848), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3846), 13,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83140] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3852), 1,\n      anon_sym_EQ,\n    ACTIONS(3850), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83163] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3886), 1,\n      anon_sym_EQ,\n    ACTIONS(3884), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83186] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3834), 1,\n      anon_sym_EQ,\n    ACTIONS(3832), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83209] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    ACTIONS(3774), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83232] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2254), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2256), 13,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_EQ,\n    ACTIONS(4066), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83278] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4064), 1,\n      anon_sym_EQ,\n    ACTIONS(4062), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83301] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3770), 1,\n      anon_sym_EQ,\n    ACTIONS(3768), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83324] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3956), 1,\n      anon_sym_EQ,\n    ACTIONS(3954), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83347] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3874), 1,\n      anon_sym_EQ,\n    ACTIONS(4727), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3878), 3,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n    ACTIONS(3872), 10,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n  [83374] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    ACTIONS(4683), 1,\n      anon_sym_is,\n    ACTIONS(3774), 13,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83399] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3932), 1,\n      anon_sym_EQ,\n    ACTIONS(3904), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83422] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3860), 1,\n      anon_sym_EQ,\n    ACTIONS(4727), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3858), 13,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83447] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3809), 1,\n      anon_sym_EQ,\n    ACTIONS(3807), 14,\n      anon_sym_as,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83470] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2252), 13,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83493] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4128), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4126), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83519] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3809), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(3807), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n  [83547] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3870), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(3868), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n  [83575] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4032), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(4030), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n  [83603] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3894), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(3892), 12,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83627] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4146), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(4144), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n  [83655] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4757), 1,\n      anon_sym_BANG,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4761), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2810), 1,\n      sym_type_annotation,\n    STATE(3061), 1,\n      sym__initializer,\n    STATE(3063), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(4755), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [83697] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1354), 1,\n      anon_sym_DOT,\n    ACTIONS(3819), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3817), 11,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83721] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3948), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(3946), 12,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE,\n      anon_sym_QMARK,\n      anon_sym_extends,\n  [83745] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4717), 1,\n      anon_sym_LT,\n    STATE(2285), 1,\n      sym_type_arguments,\n    ACTIONS(3770), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3768), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83771] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3936), 1,\n      anon_sym_EQ,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(3934), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_EQ_GT,\n      anon_sym_QMARK,\n  [83799] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    ACTIONS(4763), 1,\n      anon_sym_EQ,\n    ACTIONS(4768), 1,\n      anon_sym_COLON,\n    ACTIONS(4770), 1,\n      anon_sym_extends,\n    STATE(2127), 1,\n      sym_type_arguments,\n    STATE(2859), 1,\n      sym_constraint,\n    STATE(3268), 1,\n      sym_default_type,\n    ACTIONS(4765), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n    ACTIONS(2790), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [83836] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1378), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(1376), 11,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_is,\n      anon_sym_PIPE_RBRACE,\n  [83857] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      anon_sym_is,\n    ACTIONS(3776), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3774), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83880] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4773), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4777), 1,\n      anon_sym_QMARK_DOT,\n    STATE(2301), 1,\n      sym_arguments,\n    ACTIONS(4775), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [83907] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4773), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4779), 1,\n      anon_sym_DOT,\n    ACTIONS(4781), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4783), 1,\n      anon_sym_COLON_COLON,\n    STATE(2300), 1,\n      sym_arguments,\n    ACTIONS(3791), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [83936] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4773), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4785), 1,\n      anon_sym_DOT,\n    ACTIONS(4787), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4789), 1,\n      anon_sym_COLON_COLON,\n    STATE(2311), 1,\n      sym_arguments,\n    ACTIONS(3783), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [83965] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4791), 1,\n      anon_sym_is,\n    ACTIONS(3770), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3768), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [83988] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3956), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3954), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84008] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3809), 1,\n      anon_sym_EQ,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(3807), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE_RBRACE,\n  [84034] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4022), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4020), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84054] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3803), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84072] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4010), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84090] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    ACTIONS(4801), 1,\n      anon_sym_QMARK,\n    STATE(2127), 1,\n      sym_type_arguments,\n    STATE(3338), 1,\n      sym_type_annotation,\n    ACTIONS(2790), 6,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84120] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4028), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4026), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84140] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4110), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84158] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4054), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84176] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2288), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2290), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84196] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4054), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84214] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3803), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84232] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3852), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3850), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84252] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4010), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84270] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3803), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84288] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4054), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84306] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84324] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84342] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2280), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2282), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84362] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4082), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84380] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4082), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84398] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84416] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3996), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84434] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4010), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84452] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3992), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84470] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4046), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84488] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4046), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84506] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3996), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84524] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4046), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84542] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4042), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84560] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4128), 1,\n      anon_sym_EQ,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4126), 9,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84584] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4082), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84602] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3992), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84620] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4016), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84640] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3996), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84658] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3898), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3896), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84678] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3992), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84696] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3799), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84714] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3978), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84732] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3944), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3942), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84752] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4106), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84770] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3870), 1,\n      anon_sym_EQ,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(3868), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE_RBRACE,\n  [84796] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2284), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(2286), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84816] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3799), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84834] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3932), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3904), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84854] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3774), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84874] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4124), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4122), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84894] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4106), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84912] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3834), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3832), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84932] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3978), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [84950] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4072), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4070), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84970] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(3894), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3892), 9,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [84992] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3799), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85010] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4066), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85030] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3830), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3828), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85050] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3978), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85068] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4064), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4062), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85088] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4060), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4058), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85108] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3974), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85126] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3826), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3824), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85146] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4078), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85164] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4106), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85182] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3958), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85200] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3922), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3920), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85220] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3890), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3888), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85240] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4110), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85258] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4804), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3876), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3878), 9,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85280] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4146), 1,\n      anon_sym_EQ,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(4144), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE_RBRACE,\n  [85306] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3770), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3768), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85326] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3930), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3928), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85346] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4032), 1,\n      anon_sym_EQ,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(4030), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE_RBRACE,\n  [85372] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4036), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4034), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85392] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3809), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3807), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85412] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3940), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3938), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85432] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3902), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3900), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85452] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3856), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3854), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85472] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(3948), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3946), 9,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85494] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4804), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3860), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3858), 9,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85516] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2702), 1,\n      sym_type_annotation,\n    STATE(2998), 1,\n      sym__initializer,\n    STATE(2999), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n    ACTIONS(4806), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [85552] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4032), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(4030), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85572] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3936), 1,\n      anon_sym_EQ,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(3934), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE_RBRACE,\n  [85598] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4808), 1,\n      anon_sym_LT,\n    ACTIONS(4810), 1,\n      anon_sym_DOT,\n    ACTIONS(4812), 1,\n      anon_sym_is,\n    STATE(2442), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85624] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3866), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3864), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85644] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3874), 1,\n      anon_sym_EQ,\n    ACTIONS(3876), 1,\n      anon_sym_PIPE,\n    ACTIONS(4804), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3878), 2,\n      anon_sym_AMP,\n      anon_sym_extends,\n    ACTIONS(3872), 7,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_EQ_GT,\n      anon_sym_PIPE_RBRACE,\n  [85670] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3882), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3880), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85690] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3886), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3884), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85710] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4110), 12,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85728] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3952), 2,\n      anon_sym_EQ,\n      anon_sym_PIPE,\n    ACTIONS(3950), 10,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_EQ_GT,\n      anon_sym_AMP,\n      anon_sym_extends,\n      anon_sym_PIPE_RBRACE,\n  [85748] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4814), 11,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_BANG,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [85765] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 11,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_BANG,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [85782] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3840), 11,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85799] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3846), 11,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85816] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2836), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4816), 1,\n      anon_sym_LPAREN,\n    STATE(2081), 1,\n      sym_arguments,\n    ACTIONS(2834), 2,\n      anon_sym_DOT,\n      anon_sym_COLON_COLON,\n    ACTIONS(2766), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85841] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4820), 1,\n      anon_sym_COLON,\n    ACTIONS(4822), 1,\n      anon_sym_DASH_GT,\n    STATE(2582), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n    ACTIONS(4818), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [85864] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4673), 1,\n      anon_sym_DOT,\n    ACTIONS(4675), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4677), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(4816), 1,\n      anon_sym_LPAREN,\n    STATE(2084), 1,\n      sym_arguments,\n    ACTIONS(3791), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85891] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4808), 1,\n      anon_sym_LT,\n    ACTIONS(4810), 1,\n      anon_sym_DOT,\n    STATE(2442), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85914] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2256), 11,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85931] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4667), 1,\n      anon_sym_DOT,\n    ACTIONS(4669), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4671), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(4816), 1,\n      anon_sym_LPAREN,\n    STATE(2078), 1,\n      sym_arguments,\n    ACTIONS(3783), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85958] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4824), 1,\n      anon_sym_DOT,\n    ACTIONS(4826), 1,\n      anon_sym_QMARK_DOT,\n    ACTIONS(4828), 1,\n      anon_sym_COLON_COLON,\n    ACTIONS(3912), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [85981] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4820), 1,\n      anon_sym_COLON,\n    ACTIONS(4822), 1,\n      anon_sym_DASH_GT,\n    STATE(2558), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n    ACTIONS(4830), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [86004] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 11,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86021] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3836), 11,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86038] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2262), 11,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86055] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4808), 1,\n      anon_sym_LT,\n    STATE(2431), 1,\n      sym_type_arguments,\n    ACTIONS(3768), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86075] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3112), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [86101] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3118), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [86127] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4834), 1,\n      anon_sym_BANG,\n    STATE(2811), 1,\n      sym_type_annotation,\n    STATE(3109), 1,\n      sym__initializer,\n    ACTIONS(4836), 2,\n      anon_sym_in,\n      anon_sym_of,\n    ACTIONS(4832), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [86155] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4834), 1,\n      anon_sym_BANG,\n    ACTIONS(4838), 1,\n      anon_sym_EQ,\n    STATE(2759), 1,\n      sym__initializer,\n    STATE(2811), 1,\n      sym_type_annotation,\n    ACTIONS(4836), 2,\n      anon_sym_in,\n      anon_sym_of,\n    ACTIONS(4832), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [86183] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(4840), 1,\n      anon_sym_pub,\n    ACTIONS(4844), 1,\n      anon_sym_fn,\n    ACTIONS(4846), 1,\n      anon_sym_static,\n    STATE(2828), 1,\n      sym_accessibility_modifier_member,\n    STATE(3683), 1,\n      sym_override_modifier,\n    ACTIONS(4842), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    STATE(2325), 2,\n      sym_method_definition,\n      aux_sym_object_method_type_repeat1,\n  [86213] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1354), 1,\n      anon_sym_DOT,\n    ACTIONS(3817), 9,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_LT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86231] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    ACTIONS(4850), 1,\n      anon_sym_is,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86255] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3092), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [86281] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3121), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [86307] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3089), 1,\n      anon_sym_COMMA,\n    ACTIONS(3115), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [86333] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4852), 1,\n      sym_identifier,\n    ACTIONS(4856), 1,\n      anon_sym_COMMA,\n    ACTIONS(4858), 1,\n      anon_sym_RBRACE,\n    STATE(3027), 1,\n      sym_export_specifier,\n    ACTIONS(4854), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3031), 2,\n      sym__module_export_name,\n      sym_string,\n  [86363] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4860), 1,\n      anon_sym_pub,\n    ACTIONS(4865), 1,\n      anon_sym_fn,\n    ACTIONS(4868), 1,\n      anon_sym_static,\n    ACTIONS(4871), 1,\n      anon_sym_override,\n    STATE(2828), 1,\n      sym_accessibility_modifier_member,\n    STATE(3683), 1,\n      sym_override_modifier,\n    ACTIONS(4863), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    STATE(2325), 2,\n      sym_method_definition,\n      aux_sym_object_method_type_repeat1,\n  [86393] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(4840), 1,\n      anon_sym_pub,\n    ACTIONS(4844), 1,\n      anon_sym_fn,\n    ACTIONS(4846), 1,\n      anon_sym_static,\n    STATE(2828), 1,\n      sym_accessibility_modifier_member,\n    STATE(3683), 1,\n      sym_override_modifier,\n    ACTIONS(4874), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    STATE(2318), 2,\n      sym_method_definition,\n      aux_sym_object_method_type_repeat1,\n  [86423] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(4030), 5,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_QMARK,\n  [86446] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4878), 1,\n      anon_sym_COLON,\n    ACTIONS(4880), 1,\n      anon_sym_DASH_GT,\n    STATE(2948), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n    ACTIONS(4830), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [86467] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4812), 1,\n      anon_sym_is,\n    ACTIONS(3774), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86484] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3249), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [86511] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 9,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86526] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4882), 1,\n      anon_sym_is,\n    ACTIONS(3768), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86543] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2284), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2286), 8,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n      anon_sym_LBRACE_PIPE,\n  [86560] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2262), 9,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86575] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4852), 1,\n      sym_identifier,\n    ACTIONS(4884), 1,\n      anon_sym_RBRACE,\n    STATE(3208), 1,\n      sym_export_specifier,\n    ACTIONS(4854), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3031), 2,\n      sym__module_export_name,\n      sym_string,\n  [86602] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2703), 1,\n      sym_type_annotation,\n    STATE(3013), 1,\n      sym__initializer,\n    ACTIONS(4888), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4886), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [86627] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2256), 9,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n      anon_sym_COLON_COLON,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [86642] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [86669] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3253), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [86700] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2280), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2282), 8,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n      anon_sym_LBRACE_PIPE,\n  [86717] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4890), 9,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [86732] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2670), 1,\n      sym_type_annotation,\n    STATE(3019), 1,\n      sym__initializer,\n    ACTIONS(4894), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4892), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [86757] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4878), 1,\n      anon_sym_COLON,\n    ACTIONS(4880), 1,\n      anon_sym_DASH_GT,\n    STATE(2955), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n    ACTIONS(4818), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [86778] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3251), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [86805] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(4030), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [86828] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3255), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [86859] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 9,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [86874] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2288), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2290), 8,\n      anon_sym_as,\n      anon_sym_COMMA,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n      anon_sym_LBRACE_PIPE,\n  [86891] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3253), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [86918] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3251), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [86949] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3255), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [86976] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [87003] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2811), 1,\n      sym_type_annotation,\n    STATE(3116), 1,\n      sym__initializer,\n    ACTIONS(4836), 2,\n      anon_sym_in,\n      anon_sym_of,\n    ACTIONS(4832), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [87028] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1376), 9,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n      anon_sym_is,\n  [87043] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3249), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [87074] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4838), 1,\n      anon_sym_EQ,\n    STATE(2687), 1,\n      sym__initializer,\n    STATE(2811), 1,\n      sym_type_annotation,\n    ACTIONS(4836), 2,\n      anon_sym_in,\n      anon_sym_of,\n    ACTIONS(4832), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [87099] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(4898), 6,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [87120] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(4840), 1,\n      anon_sym_pub,\n    ACTIONS(4902), 1,\n      anon_sym_fn,\n    STATE(3164), 1,\n      sym_accessibility_modifier_member,\n    STATE(3637), 1,\n      sym_override_modifier,\n    ACTIONS(4900), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    STATE(2363), 2,\n      sym_method_signature,\n      aux_sym_object_method_signature_type_repeat1,\n  [87147] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4904), 1,\n      sym_identifier,\n    ACTIONS(4906), 1,\n      anon_sym_from,\n    STATE(3265), 1,\n      sym_import_specifier,\n    ACTIONS(3272), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3521), 2,\n      sym__module_export_name,\n      sym_string,\n  [87174] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4904), 1,\n      sym_identifier,\n    ACTIONS(4908), 1,\n      anon_sym_from,\n    STATE(3265), 1,\n      sym_import_specifier,\n    ACTIONS(3272), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3521), 2,\n      sym__module_export_name,\n      sym_string,\n  [87201] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [87222] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(4840), 1,\n      anon_sym_pub,\n    ACTIONS(4902), 1,\n      anon_sym_fn,\n    STATE(3164), 1,\n      sym_accessibility_modifier_member,\n    STATE(3637), 1,\n      sym_override_modifier,\n    ACTIONS(4910), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    STATE(2358), 2,\n      sym_method_signature,\n      aux_sym_object_method_signature_type_repeat1,\n  [87249] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4912), 1,\n      anon_sym_pub,\n    ACTIONS(4917), 1,\n      anon_sym_fn,\n    ACTIONS(4920), 1,\n      anon_sym_override,\n    STATE(3164), 1,\n      sym_accessibility_modifier_member,\n    STATE(3637), 1,\n      sym_override_modifier,\n    ACTIONS(4915), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    STATE(2363), 2,\n      sym_method_signature,\n      aux_sym_object_method_signature_type_repeat1,\n  [87276] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2695), 1,\n      sym_type_annotation,\n    STATE(3036), 1,\n      sym__initializer,\n    ACTIONS(4925), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4923), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [87301] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2810), 1,\n      sym_type_annotation,\n    STATE(3068), 1,\n      sym__initializer,\n    ACTIONS(4757), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4755), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [87326] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [87353] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3807), 5,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_GT,\n      anon_sym_QMARK,\n  [87376] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [87407] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4927), 9,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [87422] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    STATE(2127), 1,\n      sym_type_arguments,\n    ACTIONS(2790), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87443] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4929), 9,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [87458] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4852), 1,\n      sym_identifier,\n    ACTIONS(4931), 1,\n      anon_sym_RBRACE,\n    STATE(3208), 1,\n      sym_export_specifier,\n    ACTIONS(4854), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3031), 2,\n      sym__module_export_name,\n      sym_string,\n  [87485] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [87516] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2722), 1,\n      sym_type_annotation,\n    STATE(3076), 1,\n      sym__initializer,\n    ACTIONS(4935), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4933), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [87541] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4937), 9,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [87556] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(3807), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [87579] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [87610] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2747), 1,\n      sym_type_annotation,\n    STATE(2991), 1,\n      sym__initializer,\n    ACTIONS(4941), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4939), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [87635] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4943), 1,\n      sym_escape_sequence,\n    ACTIONS(4945), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    STATE(2651), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [87659] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3928), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87673] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3824), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87687] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n    ACTIONS(3807), 5,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n  [87707] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3807), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87721] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3938), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87735] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(3946), 7,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87751] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3950), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87765] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3954), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87779] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4016), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87793] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4020), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87807] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4904), 1,\n      sym_identifier,\n    STATE(3265), 1,\n      sym_import_specifier,\n    ACTIONS(3272), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3521), 2,\n      sym__module_export_name,\n      sym_string,\n  [87831] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4026), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87845] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n    ACTIONS(4030), 5,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n  [87865] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4030), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87879] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4957), 1,\n      sym_identifier,\n    ACTIONS(4959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4961), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4963), 1,\n      anon_sym_enum,\n    STATE(2941), 1,\n      sym_variable_declarator,\n    STATE(2523), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [87903] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4034), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87917] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4058), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87931] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4062), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87945] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4066), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87959] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(4965), 1,\n      sym_escape_sequence,\n    ACTIONS(4967), 1,\n      anon_sym_BQUOTE,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [87983] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4070), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [87997] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4122), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88011] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4126), 6,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_extends,\n  [88029] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n    ACTIONS(4144), 5,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n  [88049] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n    ACTIONS(3934), 5,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n  [88069] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4971), 1,\n      anon_sym_COLON,\n    ACTIONS(4973), 1,\n      anon_sym_QMARK,\n    STATE(2708), 1,\n      sym_type_annotation,\n    ACTIONS(4969), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88089] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3182), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(3095), 5,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_PIPE_RBRACE,\n  [88107] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4977), 1,\n      anon_sym_QMARK,\n    STATE(2758), 1,\n      sym_type_annotation,\n    ACTIONS(4975), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88127] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2282), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88141] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4979), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n      anon_sym_PIPE_RBRACE,\n  [88155] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4981), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n      anon_sym_PIPE_RBRACE,\n  [88169] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2286), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88183] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2290), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88197] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4983), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n      anon_sym_PIPE_RBRACE,\n  [88211] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4985), 1,\n      anon_sym_EQ,\n    STATE(2860), 1,\n      sym_type_annotation,\n    STATE(3235), 1,\n      sym__initializer,\n    ACTIONS(4987), 2,\n      anon_sym_BANG,\n      anon_sym_QMARK,\n    ACTIONS(4989), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [88235] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1340), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88249] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3828), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88263] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(4965), 1,\n      sym_escape_sequence,\n    ACTIONS(4991), 1,\n      anon_sym_BQUOTE,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [88287] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(4965), 1,\n      sym_escape_sequence,\n    ACTIONS(4993), 1,\n      anon_sym_BQUOTE,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [88311] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3832), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88325] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(4965), 1,\n      sym_escape_sequence,\n    ACTIONS(4995), 1,\n      anon_sym_BQUOTE,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [88349] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4999), 1,\n      anon_sym_QMARK,\n    STATE(2720), 1,\n      sym_type_annotation,\n    ACTIONS(4997), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88369] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3850), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88383] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1336), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88397] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5001), 8,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n      anon_sym_PIPE_RBRACE,\n  [88411] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(4965), 1,\n      sym_escape_sequence,\n    ACTIONS(5003), 1,\n      anon_sym_BQUOTE,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [88435] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(4965), 1,\n      sym_escape_sequence,\n    ACTIONS(5005), 1,\n      anon_sym_BQUOTE,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2808), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [88459] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4973), 1,\n      anon_sym_QMARK,\n    STATE(2708), 1,\n      sym_type_annotation,\n    ACTIONS(4969), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88479] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4834), 1,\n      anon_sym_BANG,\n    STATE(2811), 1,\n      sym_type_annotation,\n    STATE(3109), 1,\n      sym__initializer,\n    ACTIONS(4832), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [88503] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5009), 1,\n      anon_sym_QMARK,\n    STATE(2712), 1,\n      sym_type_annotation,\n    ACTIONS(5007), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88523] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4943), 1,\n      sym_escape_sequence,\n    ACTIONS(4947), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4949), 1,\n      sym__template_chars,\n    ACTIONS(5011), 1,\n      anon_sym_BQUOTE,\n    STATE(2651), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [88547] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3854), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88561] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5013), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3858), 7,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88577] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    STATE(2114), 1,\n      sym_type_arguments,\n    ACTIONS(3768), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88595] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(5015), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88615] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4795), 1,\n      anon_sym_PIPE,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(5017), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88635] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3920), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88649] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3864), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88663] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n    ACTIONS(3868), 5,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n  [88683] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5021), 1,\n      anon_sym_QMARK,\n    STATE(2667), 1,\n      sym_type_annotation,\n    ACTIONS(5019), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88703] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3768), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88717] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5013), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3878), 3,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n    ACTIONS(3872), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [88735] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3880), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88749] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5013), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3878), 7,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88765] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4852), 1,\n      sym_identifier,\n    STATE(3208), 1,\n      sym_export_specifier,\n    ACTIONS(4854), 2,\n      anon_sym_type,\n      anon_sym_typeof,\n    STATE(3031), 2,\n      sym__module_export_name,\n      sym_string,\n  [88789] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3942), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88803] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3774), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88817] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3884), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88831] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3904), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88845] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3888), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88859] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(3892), 7,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88875] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3896), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88889] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3900), 8,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [88903] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2769), 1,\n      sym_type_annotation,\n    ACTIONS(5023), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [88920] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    STATE(1861), 1,\n      sym_arguments,\n    STATE(3274), 1,\n      sym_type_arguments,\n    ACTIONS(5025), 3,\n      anon_sym_LBRACK,\n      sym_identifier,\n      sym_private_property_identifier,\n  [88941] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4961), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5027), 1,\n      sym_identifier,\n    STATE(2939), 1,\n      sym_variable_declarator,\n    STATE(2523), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [88962] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n    ACTIONS(5029), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5031), 1,\n      anon_sym_for,\n    ACTIONS(5033), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(626), 1,\n      sym_object_method_type,\n    STATE(2127), 1,\n      sym_type_arguments,\n  [88987] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4961), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5027), 1,\n      sym_identifier,\n    STATE(2941), 1,\n      sym_variable_declarator,\n    STATE(2523), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [89008] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3253), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [89033] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2751), 1,\n      sym_type_annotation,\n    ACTIONS(5035), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89050] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3339), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89063] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2702), 1,\n      sym_type_annotation,\n    STATE(3011), 1,\n      sym__initializer,\n    ACTIONS(4806), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [89084] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4814), 7,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_COLON,\n      anon_sym_LT,\n      anon_sym_QMARK,\n  [89097] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [89110] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [89135] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4927), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [89148] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    ACTIONS(5037), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5039), 1,\n      anon_sym_COMMA,\n    ACTIONS(5041), 1,\n      anon_sym_DOT,\n    ACTIONS(5043), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2817), 1,\n      aux_sym_extends_type_clause_repeat1,\n    STATE(3075), 1,\n      sym_type_arguments,\n  [89173] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2732), 1,\n      sym_type_annotation,\n    STATE(3079), 1,\n      sym__initializer,\n    ACTIONS(5045), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [89194] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4937), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [89207] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4929), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [89220] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(4898), 4,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [89239] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3255), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n  [89264] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4890), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [89277] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3249), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [89302] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5047), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1326), 6,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89317] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5049), 1,\n      sym__automatic_semicolon,\n    ACTIONS(1302), 6,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89332] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2680), 1,\n      sym_type_annotation,\n    ACTIONS(5051), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89349] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3259), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [89374] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2785), 1,\n      sym_type_annotation,\n    ACTIONS(5053), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89391] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n  [89416] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3259), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [89437] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2753), 1,\n      sym_type_annotation,\n    STATE(3060), 1,\n      sym__initializer,\n    ACTIONS(5055), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [89458] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    ACTIONS(5057), 1,\n      anon_sym_EQ,\n    ACTIONS(5061), 1,\n      anon_sym_QMARK,\n    STATE(2830), 1,\n      sym_type_annotation,\n    STATE(3200), 1,\n      sym__initializer,\n    ACTIONS(5059), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [89481] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [89506] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      anon_sym_is,\n    ACTIONS(5063), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89521] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4693), 1,\n      anon_sym_EQ,\n    ACTIONS(2915), 6,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [89536] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2694), 1,\n      sym_type_annotation,\n    ACTIONS(5065), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89553] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2721), 1,\n      sym_type_annotation,\n    ACTIONS(5067), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89570] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2806), 1,\n      sym_type_annotation,\n    ACTIONS(5069), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89587] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2658), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2660), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5071), 1,\n      sym_identifier,\n    ACTIONS(5073), 1,\n      anon_sym_DOT,\n    STATE(504), 1,\n      sym_nested_identifier,\n    STATE(526), 1,\n      sym_string,\n    STATE(541), 1,\n      sym__module,\n  [89612] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3280), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89625] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5075), 1,\n      anon_sym_is,\n    ACTIONS(3768), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [89640] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4850), 1,\n      anon_sym_is,\n    ACTIONS(3774), 6,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [89655] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3335), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89668] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3284), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89681] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4763), 1,\n      anon_sym_EQ,\n    STATE(2859), 1,\n      sym_constraint,\n    STATE(3268), 1,\n      sym_default_type,\n    ACTIONS(4768), 2,\n      anon_sym_COLON,\n      anon_sym_extends,\n    ACTIONS(5077), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [89702] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5081), 1,\n      anon_sym_DASH_GT,\n    ACTIONS(4830), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n    STATE(3382), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [89721] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2696), 1,\n      sym_type_annotation,\n    STATE(3071), 1,\n      sym__initializer,\n    ACTIONS(5083), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [89742] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3986), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [89755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5085), 1,\n      anon_sym_EQ,\n    ACTIONS(2893), 6,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [89770] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3329), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89783] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3323), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89796] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5088), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5090), 1,\n      anon_sym_LT,\n    ACTIONS(5092), 1,\n      anon_sym_extends,\n    ACTIONS(5094), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(622), 1,\n      sym_object_method_signature_type,\n    STATE(2799), 1,\n      sym_type_parameters,\n    STATE(3024), 1,\n      sym_extends_type_clause,\n  [89821] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3313), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [89834] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2774), 1,\n      sym_type_annotation,\n    STATE(2976), 1,\n      sym__initializer,\n    ACTIONS(5096), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [89855] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3268), 1,\n      anon_sym_RBRACE,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [89880] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3268), 1,\n      anon_sym_RBRACE,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [89901] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2893), 7,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [89914] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2662), 1,\n      sym_type_annotation,\n    ACTIONS(5098), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [89931] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5071), 1,\n      sym_identifier,\n    ACTIONS(5073), 1,\n      anon_sym_DOT,\n    STATE(504), 1,\n      sym_nested_identifier,\n    STATE(526), 1,\n      sym_string,\n    STATE(541), 1,\n      sym__module,\n  [89956] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [89975] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5100), 1,\n      anon_sym_EQ,\n    ACTIONS(2893), 6,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n      anon_sym_QMARK,\n  [89990] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4961), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5103), 1,\n      sym_identifier,\n    STATE(2939), 1,\n      sym_variable_declarator,\n    STATE(2356), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [90011] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4961), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5105), 1,\n      sym_identifier,\n    STATE(2941), 1,\n      sym_variable_declarator,\n    STATE(2353), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [90032] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3481), 1,\n      sym_override_modifier,\n    ACTIONS(3261), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [90055] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3984), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [90068] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2691), 1,\n      sym_type_annotation,\n    ACTIONS(5107), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [90085] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3261), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [90104] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2699), 1,\n      sym_type_annotation,\n    STATE(3015), 1,\n      sym__initializer,\n    ACTIONS(5109), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90125] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    STATE(1717), 1,\n      sym_arguments,\n    STATE(3207), 1,\n      sym_type_arguments,\n    ACTIONS(5025), 3,\n      anon_sym_LBRACK,\n      sym_identifier,\n      sym_private_property_identifier,\n  [90146] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3988), 7,\n      sym__automatic_semicolon,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n  [90159] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3349), 7,\n      anon_sym_pub,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [90172] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5081), 1,\n      anon_sym_DASH_GT,\n    ACTIONS(4818), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n    STATE(3328), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [90191] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(2811), 1,\n      sym_type_annotation,\n    STATE(3116), 1,\n      sym__initializer,\n    ACTIONS(4832), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90212] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3251), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [90237] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4961), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5027), 1,\n      sym_identifier,\n    STATE(3086), 1,\n      sym_variable_declarator,\n    STATE(2523), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [90258] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5111), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2936), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [90280] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2698), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5113), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90296] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2692), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5115), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90312] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2544), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2692), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5115), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90328] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5117), 1,\n      sym_identifier,\n    ACTIONS(5119), 1,\n      anon_sym_import,\n    STATE(1536), 1,\n      sym__type_query_subscript_expression,\n    STATE(1537), 1,\n      sym__type_query_member_expression,\n    STATE(1643), 1,\n      sym__type_query_call_expression,\n    STATE(3180), 1,\n      sym_import,\n  [90350] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3253), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [90372] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5121), 1,\n      anon_sym_COMMA,\n    ACTIONS(5123), 1,\n      anon_sym_GT,\n    STATE(3163), 1,\n      aux_sym_implements_clause_repeat1,\n  [90394] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2754), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [90412] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n    ACTIONS(3868), 3,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n  [90430] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(3892), 5,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [90444] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5137), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3263), 1,\n      sym__call_signature,\n  [90466] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4983), 6,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n  [90478] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4981), 6,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n  [90490] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2528), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(5141), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5139), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90506] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2668), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [90524] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5145), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5147), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5143), 2,\n      sym__template_chars,\n      sym_escape_sequence,\n    STATE(2605), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [90542] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2669), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [90560] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3251), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [90582] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2726), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5149), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [90598] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5151), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3189), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [90620] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5153), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3218), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [90642] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5155), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3365), 1,\n      sym__call_signature,\n  [90664] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5119), 1,\n      anon_sym_import,\n    ACTIONS(5157), 1,\n      sym_identifier,\n    STATE(2036), 1,\n      sym__type_query_subscript_expression,\n    STATE(2037), 1,\n      sym__type_query_member_expression,\n    STATE(2082), 1,\n      sym__type_query_call_expression,\n    STATE(3201), 1,\n      sym_import,\n  [90686] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5159), 1,\n      anon_sym_RBRACE,\n    ACTIONS(5161), 1,\n      anon_sym_case,\n    ACTIONS(5163), 1,\n      anon_sym_default,\n    STATE(2655), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [90704] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5165), 1,\n      anon_sym_COMMA,\n    ACTIONS(5167), 1,\n      anon_sym_GT,\n    STATE(3171), 1,\n      aux_sym_implements_clause_repeat1,\n  [90726] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5169), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3357), 1,\n      sym__call_signature,\n  [90748] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    ACTIONS(5041), 1,\n      anon_sym_DOT,\n    ACTIONS(5171), 1,\n      anon_sym_LBRACE,\n    STATE(3075), 1,\n      sym_type_arguments,\n    ACTIONS(5173), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACE_PIPE,\n  [90768] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2707), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [90786] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5119), 1,\n      anon_sym_import,\n    ACTIONS(5175), 1,\n      sym_identifier,\n    STATE(2085), 1,\n      sym__type_query_subscript_expression,\n    STATE(2088), 1,\n      sym__type_query_member_expression,\n    STATE(2166), 1,\n      sym__type_query_call_expression,\n    STATE(3184), 1,\n      sym_import,\n  [90808] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    ACTIONS(5057), 1,\n      anon_sym_EQ,\n    STATE(2871), 1,\n      sym_type_annotation,\n    STATE(3292), 1,\n      sym__initializer,\n    ACTIONS(5177), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [90828] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2679), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [90846] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5147), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5179), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4943), 2,\n      sym__template_chars,\n      sym_escape_sequence,\n    STATE(2651), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [90864] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5181), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [90876] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2686), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [90894] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5183), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3290), 1,\n      sym_type_parameters,\n    STATE(3383), 1,\n      sym__call_signature,\n  [90916] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4979), 6,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n  [90928] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2658), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2660), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5071), 1,\n      sym_identifier,\n    STATE(504), 1,\n      sym_nested_identifier,\n    STATE(526), 1,\n      sym_string,\n    STATE(563), 1,\n      sym__module,\n  [90950] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1699), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [90972] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5185), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3365), 1,\n      sym__call_signature,\n  [90994] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5187), 3,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [91012] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5189), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3283), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [91034] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2634), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(5193), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5191), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [91050] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    ACTIONS(5039), 1,\n      anon_sym_COMMA,\n    ACTIONS(5195), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5197), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2866), 1,\n      aux_sym_extends_type_clause_repeat1,\n    STATE(3057), 1,\n      sym_type_arguments,\n  [91072] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3481), 1,\n      sym_override_modifier,\n    ACTIONS(3317), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [91092] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5199), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3287), 1,\n      sym__call_signature,\n  [91114] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(4985), 1,\n      anon_sym_EQ,\n    STATE(2947), 1,\n      sym_type_annotation,\n    STATE(3305), 1,\n      sym__initializer,\n    ACTIONS(5201), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [91134] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3317), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [91150] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5203), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2898), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [91172] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1326), 6,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [91184] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4830), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5205), 1,\n      anon_sym_DASH_GT,\n    STATE(3382), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [91202] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5207), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3233), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [91224] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5209), 1,\n      anon_sym_RBRACE,\n    ACTIONS(5211), 1,\n      anon_sym_case,\n    ACTIONS(5214), 1,\n      anon_sym_default,\n    STATE(2577), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [91242] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2732), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5217), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [91258] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2704), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [91276] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5219), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [91288] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5071), 1,\n      sym_identifier,\n    STATE(504), 1,\n      sym_nested_identifier,\n    STATE(526), 1,\n      sym_string,\n    STATE(541), 1,\n      sym__module,\n  [91310] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5221), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [91322] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5071), 1,\n      sym_identifier,\n    STATE(504), 1,\n      sym_nested_identifier,\n    STATE(526), 1,\n      sym_string,\n    STATE(563), 1,\n      sym__module,\n  [91344] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5147), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5223), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4965), 2,\n      sym__template_chars,\n      sym_escape_sequence,\n    STATE(2541), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [91362] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3255), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n  [91384] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5225), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3178), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [91406] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(5227), 1,\n      anon_sym_LPAREN,\n    STATE(1578), 1,\n      sym_statement_block,\n    STATE(2836), 1,\n      sym_type_arguments,\n    STATE(3219), 1,\n      sym_compute_size,\n  [91428] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(4126), 4,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_extends,\n  [91444] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2527), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(5231), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5229), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [91460] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(5227), 1,\n      anon_sym_LPAREN,\n    STATE(1859), 1,\n      sym_statement_block,\n    STATE(2910), 1,\n      sym_type_arguments,\n    STATE(3372), 1,\n      sym_compute_size,\n  [91482] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1701), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n  [91504] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5081), 1,\n      anon_sym_DASH_GT,\n    ACTIONS(5233), 1,\n      anon_sym_EQ_GT,\n    STATE(3328), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [91522] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 6,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LT,\n      anon_sym_QMARK,\n  [91534] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5236), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2821), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [91556] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5119), 1,\n      anon_sym_import,\n    ACTIONS(5238), 1,\n      sym_identifier,\n    STATE(1411), 1,\n      sym__type_query_subscript_expression,\n    STATE(1412), 1,\n      sym__type_query_member_expression,\n    STATE(1438), 1,\n      sym__type_query_call_expression,\n    STATE(3295), 1,\n      sym_import,\n  [91578] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5240), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2921), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [91600] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5242), 1,\n      anon_sym_COMMA,\n    ACTIONS(5244), 1,\n      anon_sym_GT,\n    STATE(2988), 1,\n      aux_sym_implements_clause_repeat1,\n  [91622] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2610), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(5248), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5246), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [91638] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5250), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2962), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [91660] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5252), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3290), 1,\n      sym_type_parameters,\n    STATE(3311), 1,\n      sym__call_signature,\n  [91682] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5254), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3342), 1,\n      sym__call_signature,\n  [91704] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5256), 1,\n      sym_identifier,\n    ACTIONS(5258), 1,\n      anon_sym_LBRACK,\n    STATE(3094), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [91722] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1358), 6,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [91734] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2626), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2710), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5260), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [91750] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5265), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5267), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5262), 2,\n      sym__template_chars,\n      sym_escape_sequence,\n    STATE(2605), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [91768] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5270), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3357), 1,\n      sym__call_signature,\n  [91790] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5272), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3241), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [91812] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5274), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3357), 1,\n      sym__call_signature,\n  [91834] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2658), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2660), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5071), 1,\n      sym_identifier,\n    STATE(504), 1,\n      sym_nested_identifier,\n    STATE(526), 1,\n      sym_string,\n    STATE(541), 1,\n      sym__module,\n  [91856] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2710), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5260), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [91872] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5276), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3231), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [91894] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2773), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [91912] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    ACTIONS(5125), 1,\n      anon_sym_DASH_QMARK_COLON,\n    ACTIONS(5127), 1,\n      anon_sym_QMARK_COLON,\n    STATE(2781), 3,\n      sym_omitting_type_annotation,\n      sym_opting_type_annotation,\n      sym_type_annotation,\n  [91930] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n    ACTIONS(3934), 3,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n  [91948] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5278), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3246), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [91970] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5280), 1,\n      anon_sym_COMMA,\n    ACTIONS(5282), 1,\n      anon_sym_GT,\n    STATE(3040), 1,\n      aux_sym_implements_clause_repeat1,\n  [91992] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5081), 1,\n      anon_sym_DASH_GT,\n    ACTIONS(5284), 1,\n      anon_sym_EQ_GT,\n    STATE(3382), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [92010] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_QMARK,\n    ACTIONS(5287), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5290), 1,\n      anon_sym_LT,\n    STATE(2328), 1,\n      sym_formal_parameters,\n    STATE(2685), 1,\n      sym__call_signature,\n    STATE(3275), 1,\n      sym_type_parameters,\n  [92032] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n    ACTIONS(4144), 3,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n  [92050] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n    ACTIONS(4030), 3,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n  [92068] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5293), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2989), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [92090] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5119), 1,\n      anon_sym_import,\n    ACTIONS(5295), 1,\n      sym_identifier,\n    STATE(2082), 1,\n      sym__type_query_call_expression,\n    STATE(2304), 1,\n      sym__type_query_member_expression,\n    STATE(2307), 1,\n      sym__type_query_subscript_expression,\n    STATE(3226), 1,\n      sym_import,\n  [92112] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4830), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5297), 1,\n      anon_sym_DASH_GT,\n    STATE(3382), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [92130] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5299), 1,\n      sym_identifier,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3365), 1,\n      sym__call_signature,\n  [92152] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3249), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [92174] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2704), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5301), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92190] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5081), 1,\n      anon_sym_DASH_GT,\n    ACTIONS(5303), 1,\n      anon_sym_EQ_GT,\n    STATE(3328), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [92208] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(5309), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5306), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92224] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5311), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3229), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [92246] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5315), 1,\n      anon_sym_QMARK,\n    ACTIONS(5313), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [92266] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5317), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3327), 1,\n      sym__call_signature,\n  [92288] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2641), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2734), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5319), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92304] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5321), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2901), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [92326] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2734), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5319), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92342] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5119), 1,\n      anon_sym_import,\n    ACTIONS(5323), 1,\n      sym_identifier,\n    STATE(2207), 1,\n      sym__type_query_member_expression,\n    STATE(2208), 1,\n      sym__type_query_subscript_expression,\n    STATE(2308), 1,\n      sym__type_query_call_expression,\n    STATE(3358), 1,\n      sym_import,\n  [92364] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5325), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3000), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [92386] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5327), 1,\n      anon_sym_COMMA,\n    ACTIONS(5329), 1,\n      anon_sym_GT,\n    STATE(3041), 1,\n      aux_sym_implements_clause_repeat1,\n  [92408] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2647), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(5333), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5331), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92424] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5335), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3262), 1,\n      sym__call_signature,\n  [92446] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4818), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5337), 1,\n      anon_sym_DASH_GT,\n    STATE(3328), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [92464] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2700), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5339), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92480] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(238), 1,\n      anon_sym_COMMA,\n    ACTIONS(1689), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [92502] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5341), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3290), 1,\n      sym_type_parameters,\n    STATE(3352), 1,\n      sym__call_signature,\n  [92524] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5343), 1,\n      anon_sym_QMARK,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3348), 1,\n      sym__call_signature,\n  [92546] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2660), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2730), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5345), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92562] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5258), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5347), 1,\n      sym_identifier,\n    STATE(3237), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [92580] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2730), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5345), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92596] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2300), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5258), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5349), 1,\n      sym_identifier,\n    STATE(2858), 3,\n      sym_object_pattern,\n      sym_array_pattern,\n      sym__destructuring_pattern,\n  [92614] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5081), 1,\n      anon_sym_DASH_GT,\n    ACTIONS(5351), 1,\n      anon_sym_EQ_GT,\n    STATE(3382), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [92632] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4818), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(5079), 1,\n      anon_sym_COLON,\n    ACTIONS(5354), 1,\n      anon_sym_DASH_GT,\n    STATE(3328), 3,\n      sym_type_annotation_arrow,\n      sym_asserts,\n      sym_type_predicate_annotation,\n  [92650] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5147), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5356), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5143), 2,\n      sym__template_chars,\n      sym_escape_sequence,\n    STATE(2605), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [92668] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5063), 6,\n      sym__automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [92680] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    ACTIONS(5358), 1,\n      anon_sym_QMARK,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3269), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [92702] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5360), 1,\n      anon_sym_COMMA,\n    ACTIONS(5362), 1,\n      anon_sym_GT,\n    STATE(3112), 1,\n      aux_sym_implements_clause_repeat1,\n  [92724] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5161), 1,\n      anon_sym_case,\n    ACTIONS(5163), 1,\n      anon_sym_default,\n    ACTIONS(5364), 1,\n      anon_sym_RBRACE,\n    STATE(2577), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [92742] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2578), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2698), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5113), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92758] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n    ACTIONS(3807), 3,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n  [92776] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(3946), 5,\n      anon_sym_as,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [92790] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5001), 6,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n      anon_sym_COLON,\n      anon_sym_DASH_GT,\n  [92802] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(2628), 1,\n      aux_sym_object_type_repeat1,\n    ACTIONS(2694), 2,\n      anon_sym_RBRACE,\n      anon_sym_PIPE_RBRACE,\n    ACTIONS(5366), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92818] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2964), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [92837] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5368), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [92848] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5370), 1,\n      sym_identifier,\n    STATE(3202), 2,\n      sym__module_export_name,\n      sym_string,\n  [92865] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [92876] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(5376), 1,\n      anon_sym_PIPE,\n    ACTIONS(5374), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [92893] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5378), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5382), 1,\n      sym__template_chars,\n    STATE(2814), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [92910] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5384), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [92921] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5386), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [92932] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5388), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [92943] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3073), 1,\n      sym__initializer,\n    ACTIONS(5390), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [92958] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4812), 1,\n      anon_sym_is,\n    ACTIONS(5063), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [92971] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3349), 1,\n      sym__call_signature,\n  [92990] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3280), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [93009] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5382), 1,\n      sym__template_chars,\n    ACTIONS(5392), 1,\n      anon_sym_BQUOTE,\n    STATE(2814), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [93026] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5394), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [93043] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3217), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [93062] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3333), 1,\n      sym__call_signature,\n  [93081] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3264), 1,\n      sym__call_signature,\n  [93100] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5396), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93111] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5398), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93122] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5400), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5402), 1,\n      sym__template_chars,\n    STATE(2674), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [93139] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5404), 1,\n      anon_sym_LPAREN,\n    STATE(2328), 1,\n      sym_formal_parameters,\n    STATE(2731), 1,\n      sym__call_signature,\n    STATE(3275), 1,\n      sym_type_parameters,\n  [93158] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3072), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [93177] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3244), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [93196] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5406), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5408), 1,\n      anon_sym_SEMI,\n    ACTIONS(5410), 1,\n      sym__automatic_semicolon,\n    ACTIONS(5412), 1,\n      sym__function_signature_automatic_semicolon,\n    STATE(532), 1,\n      sym_statement_block,\n  [93215] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5414), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93226] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5418), 1,\n      anon_sym_in,\n    ACTIONS(5420), 1,\n      anon_sym_of,\n    ACTIONS(5416), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93241] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5309), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93252] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5422), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5424), 1,\n      sym__template_chars,\n    STATE(2666), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [93269] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3198), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [93288] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5426), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93299] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3261), 1,\n      sym__call_signature,\n  [93318] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3222), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [93337] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5428), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93348] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3058), 1,\n      sym__initializer,\n    ACTIONS(5430), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93363] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3077), 1,\n      sym__initializer,\n    ACTIONS(5432), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93378] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    STATE(3338), 1,\n      sym_type_annotation,\n    ACTIONS(2893), 3,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [93393] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3324), 1,\n      sym__call_signature,\n  [93412] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3066), 1,\n      sym__initializer,\n    ACTIONS(5434), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93427] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3245), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [93446] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3337), 1,\n      sym__call_signature,\n  [93465] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(2971), 1,\n      sym__initializer,\n    ACTIONS(5436), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93480] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(2972), 1,\n      sym__initializer,\n    ACTIONS(5438), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93495] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5440), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93506] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5382), 1,\n      sym__template_chars,\n    ACTIONS(5442), 1,\n      anon_sym_BQUOTE,\n    STATE(2814), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [93523] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5444), 1,\n      sym_identifier,\n    STATE(3494), 2,\n      sym__module_export_name,\n      sym_string,\n  [93540] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5446), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93551] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5448), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93562] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4543), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [93573] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4515), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [93584] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3259), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n  [93603] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5450), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93614] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3261), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [93631] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5452), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5454), 1,\n      sym__template_chars,\n    STATE(2705), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [93648] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2920), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [93667] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3268), 1,\n      anon_sym_RBRACE,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [93686] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(4876), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n  [93703] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93714] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3366), 1,\n      sym__call_signature,\n  [93733] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5458), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93744] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5460), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93755] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3081), 1,\n      sym__initializer,\n    ACTIONS(5462), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93770] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2935), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [93789] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2897), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [93808] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3290), 1,\n      sym_type_parameters,\n    STATE(3356), 1,\n      sym__call_signature,\n  [93827] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93838] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93849] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2944), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [93868] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93879] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93890] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5406), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5466), 1,\n      anon_sym_SEMI,\n    ACTIONS(5468), 1,\n      sym__automatic_semicolon,\n    ACTIONS(5470), 1,\n      sym__function_signature_automatic_semicolon,\n    STATE(512), 1,\n      sym_statement_block,\n  [93909] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3093), 1,\n      sym__initializer,\n    ACTIONS(5472), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [93924] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4547), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [93935] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4727), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5474), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3878), 3,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [93950] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3368), 1,\n      sym__call_signature,\n  [93969] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5476), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [93980] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3986), 5,\n      anon_sym_EQ,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n  [93991] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4707), 1,\n      anon_sym_EQ,\n    ACTIONS(2915), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n  [94004] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n    ACTIONS(5478), 1,\n      anon_sym_as,\n    ACTIONS(5480), 1,\n      anon_sym_RBRACK,\n  [94023] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3232), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [94042] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3290), 1,\n      sym_type_parameters,\n    STATE(3323), 1,\n      sym__call_signature,\n  [94061] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94072] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94083] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3212), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [94102] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94113] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5382), 1,\n      sym__template_chars,\n    ACTIONS(5486), 1,\n      anon_sym_BQUOTE,\n    STATE(2814), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [94130] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(2987), 1,\n      sym__initializer,\n    ACTIONS(5488), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [94145] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5404), 1,\n      anon_sym_LPAREN,\n    STATE(2328), 1,\n      sym_formal_parameters,\n    STATE(2685), 1,\n      sym__call_signature,\n    STATE(3275), 1,\n      sym_type_parameters,\n  [94164] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4515), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94175] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4515), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94186] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5490), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94197] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4531), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94208] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(2996), 1,\n      sym__initializer,\n    ACTIONS(5492), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [94223] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5494), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94234] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3374), 1,\n      sym__call_signature,\n  [94253] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(2923), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [94272] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3286), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [94291] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5496), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94302] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5498), 1,\n      anon_sym_in,\n    ACTIONS(5500), 1,\n      anon_sym_of,\n    ACTIONS(5416), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [94317] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94328] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94339] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1354), 1,\n      anon_sym_DOT,\n    ACTIONS(3819), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3817), 3,\n      anon_sym_COMMA,\n      anon_sym_LT,\n      anon_sym_LBRACE_PIPE,\n  [94354] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5502), 1,\n      sym_identifier,\n    STATE(3003), 1,\n      sym_nested_type_identifier,\n    STATE(3413), 1,\n      sym_generic_type,\n    STATE(3414), 1,\n      sym_impl_for_clause,\n    STATE(3453), 1,\n      sym_nested_identifier,\n  [94373] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94384] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94395] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5057), 1,\n      anon_sym_EQ,\n    ACTIONS(5504), 1,\n      anon_sym_COMMA,\n    ACTIONS(5506), 1,\n      anon_sym_RBRACE,\n    STATE(3025), 1,\n      aux_sym_enum_body_repeat1,\n    STATE(3369), 1,\n      sym__initializer,\n  [94414] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3988), 5,\n      anon_sym_EQ,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n  [94425] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3984), 5,\n      anon_sym_EQ,\n      anon_sym_RPAREN,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_COLON,\n  [94436] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5508), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94447] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94458] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94469] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94480] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5510), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94491] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3014), 1,\n      sym__initializer,\n    ACTIONS(5512), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [94506] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4547), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94517] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94528] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94539] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5514), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94550] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5514), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94561] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3312), 1,\n      sym__call_signature,\n  [94580] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5516), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94591] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3065), 1,\n      sym__call_signature,\n    STATE(3290), 1,\n      sym_type_parameters,\n  [94610] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(5376), 1,\n      anon_sym_PIPE,\n    ACTIONS(5518), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [94627] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94638] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5520), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94649] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(5522), 1,\n      anon_sym_RBRACE,\n    STATE(3034), 1,\n      aux_sym_object_pattern_repeat1,\n  [94668] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5524), 1,\n      sym_identifier,\n    STATE(3294), 2,\n      sym__module_export_name,\n      sym_string,\n  [94685] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4535), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94696] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2309), 1,\n      sym_formal_parameters,\n    STATE(3290), 1,\n      sym_type_parameters,\n    STATE(3381), 1,\n      sym__call_signature,\n  [94715] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 5,\n      anon_sym_pub,\n      anon_sym_RBRACE,\n      anon_sym_fn,\n      anon_sym_override,\n      anon_sym_PIPE_RBRACE,\n  [94726] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5526), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5528), 1,\n      sym__template_chars,\n    STATE(2808), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [94743] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4270), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94754] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4390), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94765] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5514), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94776] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(5376), 1,\n      anon_sym_PIPE,\n    ACTIONS(5530), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [94793] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5532), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [94810] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5534), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [94827] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3267), 1,\n      sym__call_signature,\n  [94846] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5088), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5092), 1,\n      anon_sym_extends,\n    ACTIONS(5094), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(550), 1,\n      sym_object_method_signature_type,\n    STATE(3098), 1,\n      sym_extends_type_clause,\n  [94865] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5514), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94876] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4539), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [94887] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3177), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [94906] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3225), 1,\n      sym__call_signature,\n    STATE(3256), 1,\n      sym_type_parameters,\n  [94925] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1189), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1191), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5536), 1,\n      sym_identifier,\n    STATE(3146), 2,\n      sym__module_export_name,\n      sym_string,\n  [94942] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3282), 1,\n      sym__call_signature,\n  [94961] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5538), 5,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_RBRACE,\n  [94972] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4848), 1,\n      anon_sym_LT,\n    ACTIONS(5540), 1,\n      anon_sym_LBRACE,\n    STATE(3057), 1,\n      sym_type_arguments,\n    ACTIONS(5542), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACE_PIPE,\n  [94989] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5382), 1,\n      sym__template_chars,\n    ACTIONS(5544), 1,\n      anon_sym_BQUOTE,\n    STATE(2814), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [95006] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4547), 5,\n      anon_sym_EQ,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n  [95017] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3006), 1,\n      sym__initializer,\n    ACTIONS(5546), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [95032] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4753), 1,\n      anon_sym_EQ,\n    STATE(3089), 1,\n      sym__initializer,\n    ACTIONS(5548), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [95047] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2496), 1,\n      sym_formal_parameters,\n    STATE(3256), 1,\n      sym_type_parameters,\n    STATE(3308), 1,\n      sym__call_signature,\n  [95066] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5550), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5552), 1,\n      sym__template_chars,\n    STATE(2746), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [95083] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5554), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(5556), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(5559), 1,\n      sym__template_chars,\n    STATE(2814), 2,\n      sym_template_type,\n      aux_sym_template_literal_type_repeat1,\n  [95100] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(5562), 1,\n      anon_sym_RBRACE,\n    STATE(3138), 1,\n      aux_sym_object_pattern_repeat1,\n  [95119] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2508), 1,\n      sym_formal_parameters,\n    STATE(3326), 1,\n      sym_type_parameters,\n  [95135] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5039), 1,\n      anon_sym_COMMA,\n    ACTIONS(5564), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5566), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2879), 1,\n      aux_sym_extends_type_clause_repeat1,\n  [95151] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5568), 1,\n      anon_sym_COMMA,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n    ACTIONS(4008), 2,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [95165] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5571), 1,\n      anon_sym_QMARK,\n  [95181] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(5573), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [95195] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5575), 1,\n      anon_sym_SEMI,\n    ACTIONS(5577), 1,\n      sym__automatic_semicolon,\n    STATE(2460), 1,\n      sym_statement_block,\n  [95211] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5579), 1,\n      anon_sym_RPAREN,\n  [95227] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5581), 1,\n      anon_sym_RBRACK,\n  [95243] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3236), 1,\n      sym_type_parameters,\n    STATE(3698), 1,\n      sym_formal_parameters,\n  [95259] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5583), 1,\n      anon_sym_RBRACK,\n  [95275] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3268), 1,\n      anon_sym_RBRACE,\n    STATE(3136), 1,\n      aux_sym_object_repeat1,\n  [95291] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5585), 1,\n      anon_sym_RPAREN,\n  [95307] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(5587), 1,\n      anon_sym_fn,\n    ACTIONS(5589), 1,\n      anon_sym_static,\n    STATE(3687), 1,\n      sym_override_modifier,\n  [95323] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3317), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [95337] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5057), 1,\n      anon_sym_EQ,\n    STATE(3302), 1,\n      sym__initializer,\n    ACTIONS(5591), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [95351] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4979), 4,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n      anon_sym_DASH_GT,\n  [95361] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5593), 1,\n      anon_sym_QMARK,\n  [95377] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5595), 1,\n      anon_sym_QMARK,\n  [95393] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5597), 1,\n      anon_sym_RPAREN,\n  [95409] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1119), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    STATE(1716), 2,\n      sym_template_string,\n      sym_arguments,\n  [95423] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5227), 1,\n      anon_sym_LPAREN,\n    STATE(1689), 1,\n      sym_statement_block,\n    STATE(3203), 1,\n      sym_compute_size,\n  [95439] = 4,\n    ACTIONS(5599), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(5603), 1,\n      sym_comment,\n    STATE(2937), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5601), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95453] = 5,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5605), 1,\n      sym__glimmer_template_content,\n    ACTIONS(5607), 1,\n      anon_sym_LT_SLASHtemplate_GT,\n    STATE(1718), 1,\n      sym_glimmer_closing_tag,\n    STATE(3009), 1,\n      aux_sym_glimmer_template_repeat1,\n  [95469] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5609), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95483] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5613), 1,\n      anon_sym_QMARK,\n  [95499] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5609), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95513] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5617), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95527] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5617), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95541] = 4,\n    ACTIONS(5599), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(5603), 1,\n      sym_comment,\n    STATE(2931), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5619), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95555] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5621), 1,\n      anon_sym_SQUOTE,\n    STATE(2839), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5623), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95569] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5621), 1,\n      anon_sym_DQUOTE,\n    STATE(2841), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5625), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95583] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5627), 1,\n      anon_sym_COMMA,\n    STATE(2864), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(5629), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [95597] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5627), 1,\n      anon_sym_COMMA,\n    STATE(2864), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(5631), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [95611] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3276), 1,\n      sym_type_parameters,\n    STATE(3589), 1,\n      sym_formal_parameters,\n  [95627] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(5633), 1,\n      anon_sym_EQ,\n    ACTIONS(5635), 1,\n      anon_sym_RBRACK,\n    STATE(3168), 1,\n      aux_sym_array_pattern_repeat1,\n  [95643] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5637), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95657] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5637), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95671] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5639), 1,\n      anon_sym_RBRACK,\n  [95687] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5641), 1,\n      anon_sym_RBRACK,\n  [95703] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5643), 1,\n      anon_sym_SQUOTE,\n    STATE(2851), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5645), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95717] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5039), 1,\n      anon_sym_COMMA,\n    ACTIONS(5195), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5197), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2922), 1,\n      aux_sym_extends_type_clause_repeat1,\n  [95733] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5643), 1,\n      anon_sym_DQUOTE,\n    STATE(2852), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5647), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95747] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5649), 1,\n      anon_sym_EQ,\n    STATE(3220), 1,\n      sym__initializer,\n    ACTIONS(4836), 2,\n      anon_sym_in,\n      anon_sym_of,\n  [95761] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4763), 1,\n      anon_sym_EQ,\n    STATE(3300), 1,\n      sym_default_type,\n    ACTIONS(5651), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [95775] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4985), 1,\n      anon_sym_EQ,\n    STATE(3309), 1,\n      sym__initializer,\n    ACTIONS(5653), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [95789] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5001), 4,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n      anon_sym_DASH_GT,\n  [95799] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3561), 4,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_COLON,\n      anon_sym_RBRACK,\n  [95809] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5655), 1,\n      anon_sym_COLON,\n  [95825] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5657), 1,\n      anon_sym_COMMA,\n    STATE(2864), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(5660), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [95839] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4983), 4,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n      anon_sym_DASH_GT,\n  [95849] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5039), 1,\n      anon_sym_COMMA,\n    ACTIONS(5662), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5664), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2879), 1,\n      aux_sym_extends_type_clause_repeat1,\n  [95865] = 5,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5607), 1,\n      anon_sym_LT_SLASHtemplate_GT,\n    ACTIONS(5666), 1,\n      sym__glimmer_template_content,\n    STATE(1596), 1,\n      sym_glimmer_closing_tag,\n    STATE(2838), 1,\n      aux_sym_glimmer_template_repeat1,\n  [95881] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5668), 1,\n      anon_sym_SQUOTE,\n    STATE(2842), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5670), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [95895] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3345), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [95905] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5668), 1,\n      anon_sym_DQUOTE,\n    STATE(2843), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5672), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [95919] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5057), 1,\n      anon_sym_EQ,\n    STATE(3239), 1,\n      sym__initializer,\n    ACTIONS(5674), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [95933] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5676), 1,\n      anon_sym_COLON,\n  [95949] = 5,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5678), 1,\n      sym__glimmer_template_content,\n    ACTIONS(5680), 1,\n      anon_sym_LT_SLASHtemplate_GT,\n    STATE(1873), 1,\n      sym_glimmer_closing_tag,\n    STATE(2895), 1,\n      aux_sym_glimmer_template_repeat1,\n  [95965] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5682), 1,\n      anon_sym_COLON,\n  [95981] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5684), 1,\n      anon_sym_RBRACK,\n  [95997] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5686), 1,\n      anon_sym_QMARK,\n  [96013] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3299), 1,\n      sym_type_parameters,\n    STATE(3501), 1,\n      sym_formal_parameters,\n  [96029] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3250), 1,\n      sym_type_parameters,\n    STATE(3561), 1,\n      sym_formal_parameters,\n  [96045] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5688), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5690), 1,\n      anon_sym_COMMA,\n    ACTIONS(5693), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2879), 1,\n      aux_sym_extends_type_clause_repeat1,\n  [96061] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(97), 1,\n      anon_sym_AT,\n    ACTIONS(5695), 1,\n      anon_sym_struct,\n    STATE(871), 1,\n      aux_sym_class_repeat1,\n    STATE(873), 1,\n      sym_decorator,\n  [96077] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2488), 1,\n      sym_formal_parameters,\n    STATE(3373), 1,\n      sym_type_parameters,\n  [96093] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3087), 1,\n      anon_sym_EQ,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3261), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [96107] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5697), 1,\n      anon_sym_COLON,\n  [96123] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5699), 1,\n      anon_sym_RPAREN,\n  [96139] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5701), 4,\n      sym__template_chars,\n      sym_escape_sequence,\n      anon_sym_BQUOTE,\n      anon_sym_DOLLAR_LBRACE,\n  [96149] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5703), 1,\n      anon_sym_from,\n    STATE(3384), 1,\n      sym__from_clause,\n    ACTIONS(3781), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [96163] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5705), 1,\n      anon_sym_RBRACK,\n  [96179] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5707), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96193] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5707), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96207] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5709), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96221] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5709), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96235] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3377), 1,\n      sym_type_parameters,\n    STATE(3679), 1,\n      sym_formal_parameters,\n  [96251] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5711), 1,\n      anon_sym_RBRACK,\n  [96267] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3255), 1,\n      sym_type_parameters,\n    STATE(3638), 1,\n      sym_formal_parameters,\n  [96283] = 5,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5605), 1,\n      sym__glimmer_template_content,\n    ACTIONS(5680), 1,\n      anon_sym_LT_SLASHtemplate_GT,\n    STATE(1899), 1,\n      sym_glimmer_closing_tag,\n    STATE(3009), 1,\n      aux_sym_glimmer_template_repeat1,\n  [96299] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5713), 1,\n      anon_sym_RBRACK,\n  [96315] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5715), 1,\n      anon_sym_SEMI,\n    ACTIONS(5717), 1,\n      sym__automatic_semicolon,\n    STATE(2490), 1,\n      sym_statement_block,\n  [96331] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5719), 1,\n      anon_sym_SEMI,\n    ACTIONS(5721), 1,\n      sym__automatic_semicolon,\n    STATE(3370), 1,\n      sym_statement_block,\n  [96347] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96357] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96367] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5725), 1,\n      anon_sym_SEMI,\n    ACTIONS(5727), 1,\n      sym__automatic_semicolon,\n    STATE(1231), 1,\n      sym_statement_block,\n  [96383] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(89), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    STATE(1860), 2,\n      sym_template_string,\n      sym_arguments,\n  [96397] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5729), 1,\n      anon_sym_SQUOTE,\n    STATE(2888), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5731), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96411] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5514), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96421] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5514), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96431] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5733), 1,\n      anon_sym_SQUOTE,\n    STATE(2890), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5735), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96445] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5733), 1,\n      anon_sym_DQUOTE,\n    STATE(2891), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5737), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96459] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5729), 1,\n      anon_sym_DQUOTE,\n    STATE(2889), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5739), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96473] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96483] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5227), 1,\n      anon_sym_LPAREN,\n    STATE(1902), 1,\n      sym_statement_block,\n    STATE(3188), 1,\n      sym_compute_size,\n  [96499] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5741), 1,\n      sym_identifier,\n    STATE(2568), 1,\n      sym_nested_type_identifier,\n    STATE(2856), 1,\n      sym_generic_type,\n    STATE(3531), 1,\n      sym_nested_identifier,\n  [96515] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96525] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5743), 1,\n      anon_sym_COLON,\n  [96541] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3361), 1,\n      sym_type_parameters,\n    STATE(3646), 1,\n      sym_formal_parameters,\n  [96557] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(5745), 1,\n      anon_sym_static,\n    STATE(3481), 1,\n      sym_override_modifier,\n  [96573] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5747), 1,\n      anon_sym_LBRACE,\n    STATE(514), 1,\n      sym_class_body,\n    STATE(3376), 1,\n      sym_type_parameters,\n  [96589] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5749), 1,\n      anon_sym_DQUOTE,\n    STATE(2933), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5751), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96603] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5749), 1,\n      anon_sym_SQUOTE,\n    STATE(2934), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5753), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96617] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5057), 1,\n      anon_sym_EQ,\n    STATE(3369), 1,\n      sym__initializer,\n    ACTIONS(5755), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [96631] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5757), 1,\n      anon_sym_SEMI,\n    ACTIONS(5759), 1,\n      sym__automatic_semicolon,\n    STATE(1212), 1,\n      sym_statement_block,\n  [96647] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5761), 1,\n      anon_sym_SEMI,\n    ACTIONS(5763), 1,\n      sym__automatic_semicolon,\n    STATE(1235), 1,\n      sym_statement_block,\n  [96663] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5039), 1,\n      anon_sym_COMMA,\n    ACTIONS(5662), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5664), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(2879), 1,\n      aux_sym_extends_type_clause_repeat1,\n  [96679] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5765), 1,\n      anon_sym_SEMI,\n    ACTIONS(5767), 1,\n      sym__automatic_semicolon,\n    STATE(3252), 1,\n      sym_statement_block,\n  [96695] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96705] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3289), 1,\n      sym_type_parameters,\n    STATE(3508), 1,\n      sym_formal_parameters,\n  [96721] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96731] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96741] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5769), 1,\n      anon_sym_COLON,\n  [96757] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3291), 1,\n      sym_type_parameters,\n    STATE(3463), 1,\n      sym_formal_parameters,\n  [96773] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5771), 1,\n      anon_sym_EQ,\n    ACTIONS(5773), 1,\n      anon_sym_as,\n    ACTIONS(5775), 2,\n      anon_sym_COMMA,\n      anon_sym_from,\n  [96787] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5777), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96801] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96811] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5779), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96825] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5779), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5611), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [96839] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5781), 1,\n      anon_sym_SEMI,\n    ACTIONS(5783), 1,\n      sym__automatic_semicolon,\n    STATE(1226), 1,\n      sym_statement_block,\n  [96855] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5785), 1,\n      anon_sym_SEMI,\n    ACTIONS(5787), 1,\n      sym__automatic_semicolon,\n    STATE(1220), 1,\n      sym_statement_block,\n  [96871] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5777), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5615), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [96885] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96895] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5627), 1,\n      anon_sym_COMMA,\n    STATE(2848), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(5789), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [96909] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [96919] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5627), 1,\n      anon_sym_COMMA,\n    STATE(2847), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(5791), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [96933] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4981), 4,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n      anon_sym_DASH_GT,\n  [96943] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(3259), 1,\n      anon_sym_RBRACE,\n    STATE(3032), 1,\n      aux_sym_object_repeat1,\n  [96959] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5793), 1,\n      anon_sym_SEMI,\n    ACTIONS(5795), 1,\n      sym__automatic_semicolon,\n    STATE(1234), 1,\n      sym_statement_block,\n  [96975] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5797), 1,\n      anon_sym_RPAREN,\n  [96991] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5799), 1,\n      anon_sym_QMARK,\n  [97007] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4985), 1,\n      anon_sym_EQ,\n    STATE(3316), 1,\n      sym__initializer,\n    ACTIONS(5801), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [97021] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5181), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [97031] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5474), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3878), 3,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_extends,\n  [97043] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3319), 1,\n      sym_type_parameters,\n    STATE(3456), 1,\n      sym_formal_parameters,\n  [97059] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(5633), 1,\n      anon_sym_EQ,\n    ACTIONS(5803), 1,\n      anon_sym_RBRACK,\n    STATE(3173), 1,\n      aux_sym_array_pattern_repeat1,\n  [97075] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3325), 1,\n      sym_type_parameters,\n    STATE(3438), 1,\n      sym_formal_parameters,\n  [97091] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5219), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [97101] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3240), 1,\n      sym_type_parameters,\n    STATE(3652), 1,\n      sym_formal_parameters,\n  [97117] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5221), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [97127] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5747), 1,\n      anon_sym_LBRACE,\n    STATE(518), 1,\n      sym_class_body,\n    STATE(3223), 1,\n      sym_type_parameters,\n  [97143] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5805), 1,\n      anon_sym_SQUOTE,\n    STATE(2957), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(5807), 2,\n      sym_unescaped_single_string_fragment,\n      sym_escape_sequence,\n  [97157] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5810), 1,\n      sym_escape_sequence,\n    ACTIONS(5812), 3,\n      sym__template_chars,\n      anon_sym_BQUOTE,\n      anon_sym_DOLLAR_LBRACE,\n  [97169] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5815), 1,\n      anon_sym_DQUOTE,\n    STATE(2959), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(5817), 2,\n      sym_unescaped_double_string_fragment,\n      sym_escape_sequence,\n  [97183] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5820), 1,\n      anon_sym_RBRACK,\n  [97199] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5063), 4,\n      sym__automatic_semicolon,\n      sym__function_signature_automatic_semicolon,\n      anon_sym_LBRACE,\n      anon_sym_SEMI,\n  [97209] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5822), 1,\n      anon_sym_SEMI,\n    ACTIONS(5824), 1,\n      sym__automatic_semicolon,\n    STATE(3284), 1,\n      sym_statement_block,\n  [97225] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(5745), 1,\n      anon_sym_static,\n    ACTIONS(5826), 1,\n      anon_sym_fn,\n    STATE(3496), 1,\n      sym_override_modifier,\n  [97241] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5828), 1,\n      anon_sym_SEMI,\n    ACTIONS(5830), 1,\n      sym__automatic_semicolon,\n    STATE(3248), 1,\n      sym_statement_block,\n  [97257] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5832), 1,\n      anon_sym_RBRACK,\n  [97273] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5834), 1,\n      sym_identifier,\n    STATE(2807), 1,\n      sym_nested_type_identifier,\n    STATE(3055), 1,\n      sym_generic_type,\n    STATE(3531), 1,\n      sym_nested_identifier,\n  [97289] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5836), 1,\n      anon_sym_RBRACK,\n  [97305] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n    ACTIONS(5838), 1,\n      anon_sym_RBRACK,\n  [97321] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5840), 1,\n      sym_identifier,\n    ACTIONS(5842), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5844), 1,\n      sym_private_property_identifier,\n  [97334] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5846), 3,\n      anon_sym_EQ,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n  [97343] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5848), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97352] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5850), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97361] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4000), 1,\n      anon_sym_RPAREN,\n    STATE(2979), 1,\n      aux_sym_array_repeat1,\n  [97374] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2270), 1,\n      anon_sym_RBRACK,\n    ACTIONS(5852), 1,\n      anon_sym_COMMA,\n    STATE(3018), 1,\n      aux_sym_tuple_type_repeat1,\n  [97387] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4000), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [97400] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5854), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97409] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5856), 1,\n      anon_sym_COMMA,\n    ACTIONS(5858), 1,\n      anon_sym_RPAREN,\n    STATE(3143), 1,\n      aux_sym_formal_parameters_repeat1,\n  [97422] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4114), 1,\n      anon_sym_RBRACK,\n    STATE(2994), 1,\n      aux_sym_array_repeat1,\n  [97435] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(5860), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [97448] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3815), 1,\n      anon_sym_extends,\n    ACTIONS(5862), 1,\n      anon_sym_AMP,\n    ACTIONS(5864), 1,\n      anon_sym_PIPE,\n  [97461] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4114), 1,\n      anon_sym_RBRACK,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [97474] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2248), 1,\n      anon_sym_RBRACK,\n    ACTIONS(5866), 1,\n      anon_sym_COMMA,\n    STATE(3018), 1,\n      aux_sym_tuple_type_repeat1,\n  [97487] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5868), 1,\n      anon_sym_COMMA,\n    ACTIONS(5870), 1,\n      anon_sym_GT,\n    STATE(3028), 1,\n      aux_sym_type_parameters_repeat1,\n  [97500] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(5803), 1,\n      anon_sym_RBRACK,\n    STATE(3173), 1,\n      aux_sym_array_pattern_repeat1,\n  [97513] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(5803), 1,\n      anon_sym_RBRACK,\n    STATE(3170), 1,\n      aux_sym_array_pattern_repeat1,\n  [97526] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5872), 1,\n      sym_identifier,\n    ACTIONS(5874), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5876), 1,\n      sym_private_property_identifier,\n  [97539] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5878), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97548] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2568), 1,\n      anon_sym_GT,\n    ACTIONS(5880), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [97561] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5882), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97570] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5884), 1,\n      anon_sym_COMMA,\n    ACTIONS(5886), 1,\n      anon_sym_RBRACK,\n    STATE(2974), 1,\n      aux_sym_tuple_type_repeat1,\n  [97583] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5888), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97592] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5890), 1,\n      anon_sym_COMMA,\n    ACTIONS(5893), 1,\n      anon_sym_GT,\n    STATE(2992), 1,\n      aux_sym_type_parameters_repeat1,\n  [97605] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5895), 1,\n      anon_sym_COMMA,\n    ACTIONS(5897), 1,\n      anon_sym_from,\n    STATE(3107), 1,\n      aux_sym_named_imports_repeat1,\n  [97618] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(5899), 1,\n      anon_sym_RBRACK,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [97631] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(5901), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [97644] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5903), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97653] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5905), 1,\n      sym_identifier,\n    ACTIONS(5907), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5909), 1,\n      sym_private_property_identifier,\n  [97666] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5911), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97675] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5913), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97684] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5915), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97693] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5394), 1,\n      anon_sym_GT,\n    ACTIONS(5917), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [97706] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(5920), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [97719] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4679), 1,\n      anon_sym_LT,\n    ACTIONS(5922), 1,\n      anon_sym_for,\n    STATE(2114), 1,\n      sym_type_arguments,\n  [97732] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(5924), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [97745] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(5924), 1,\n      anon_sym_RBRACE,\n    STATE(3044), 1,\n      aux_sym_object_repeat1,\n  [97758] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5926), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97767] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(5920), 1,\n      anon_sym_RBRACE,\n    STATE(3043), 1,\n      aux_sym_object_pattern_repeat1,\n  [97780] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2226), 1,\n      anon_sym_LT,\n    ACTIONS(5928), 1,\n      anon_sym_EQ,\n    STATE(3450), 1,\n      sym_type_parameters,\n  [97793] = 4,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(5930), 1,\n      sym__glimmer_template_content,\n    ACTIONS(5933), 1,\n      anon_sym_LT_SLASHtemplate_GT,\n    STATE(3009), 1,\n      aux_sym_glimmer_template_repeat1,\n  [97806] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5025), 3,\n      anon_sym_LBRACK,\n      sym_identifier,\n      sym_private_property_identifier,\n  [97815] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5911), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97824] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5935), 1,\n      sym_identifier,\n    ACTIONS(5937), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5939), 1,\n      sym_private_property_identifier,\n  [97837] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5941), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97846] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97855] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5945), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97864] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5947), 1,\n      anon_sym_COMMA,\n    ACTIONS(5949), 1,\n      anon_sym_RPAREN,\n    STATE(3162), 1,\n      aux_sym_formal_parameters_repeat1,\n  [97877] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5951), 1,\n      sym_identifier,\n    ACTIONS(5953), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5955), 1,\n      sym_private_property_identifier,\n  [97890] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5957), 1,\n      anon_sym_COMMA,\n    ACTIONS(5960), 1,\n      anon_sym_RBRACK,\n    STATE(3018), 1,\n      aux_sym_tuple_type_repeat1,\n  [97903] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5962), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [97912] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5964), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5846), 2,\n      anon_sym_extends,\n      anon_sym_LBRACE_PIPE,\n  [97923] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5966), 3,\n      sym__template_chars,\n      anon_sym_BQUOTE,\n      anon_sym_DOLLAR_LBRACE,\n  [97932] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3982), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [97945] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3982), 1,\n      anon_sym_RPAREN,\n    STATE(3120), 1,\n      aux_sym_array_repeat1,\n  [97958] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5088), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5094), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(621), 1,\n      sym_object_method_signature_type,\n  [97971] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5968), 1,\n      anon_sym_COMMA,\n    ACTIONS(5970), 1,\n      anon_sym_RBRACE,\n    STATE(3038), 1,\n      aux_sym_enum_body_repeat1,\n  [97984] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5972), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [97993] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5974), 1,\n      anon_sym_COMMA,\n    ACTIONS(5976), 1,\n      anon_sym_RBRACE,\n    STATE(3080), 1,\n      aux_sym_export_clause_repeat1,\n  [98006] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5978), 1,\n      anon_sym_COMMA,\n    ACTIONS(5980), 1,\n      anon_sym_GT,\n    STATE(2992), 1,\n      aux_sym_type_parameters_repeat1,\n  [98019] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5982), 3,\n      anon_sym_EQ,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n  [98028] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5980), 1,\n      anon_sym_GT,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    STATE(3270), 1,\n      sym_type_parameter,\n  [98041] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5986), 1,\n      anon_sym_as,\n    ACTIONS(5988), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [98052] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(5990), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [98065] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5992), 3,\n      anon_sym_EQ,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n  [98074] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(5994), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [98087] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5996), 1,\n      anon_sym_COMMA,\n    ACTIONS(5998), 1,\n      anon_sym_RBRACK,\n    STATE(3062), 1,\n      aux_sym_tuple_type_repeat1,\n  [98100] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6000), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98109] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6002), 1,\n      anon_sym_COMMA,\n    ACTIONS(6004), 1,\n      anon_sym_RBRACE,\n    STATE(3038), 1,\n      aux_sym_enum_body_repeat1,\n  [98122] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6006), 1,\n      anon_sym_COMMA,\n    ACTIONS(6009), 1,\n      anon_sym_RBRACE,\n    STATE(3038), 1,\n      aux_sym_enum_body_repeat1,\n  [98135] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_AMP,\n    ACTIONS(4953), 1,\n      anon_sym_PIPE,\n    ACTIONS(4955), 1,\n      anon_sym_extends,\n  [98148] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2470), 1,\n      anon_sym_GT,\n    ACTIONS(6011), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [98161] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2468), 1,\n      anon_sym_GT,\n    ACTIONS(6013), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [98174] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    ACTIONS(6015), 1,\n      anon_sym_GT,\n    STATE(3270), 1,\n      sym_type_parameter,\n  [98187] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(6017), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [98200] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(6019), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [98213] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4002), 1,\n      anon_sym_RPAREN,\n    STATE(3067), 1,\n      aux_sym_array_repeat1,\n  [98226] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4002), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [98239] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(6021), 1,\n      anon_sym_fn,\n    STATE(3665), 1,\n      sym_override_modifier,\n  [98252] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6023), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [98261] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6025), 1,\n      anon_sym_COMMA,\n    ACTIONS(6028), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [98274] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6030), 1,\n      anon_sym_COMMA,\n    ACTIONS(6033), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [98287] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6035), 1,\n      sym_identifier,\n    ACTIONS(6037), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6039), 1,\n      sym_private_property_identifier,\n  [98300] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1354), 3,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n  [98309] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6041), 1,\n      sym_identifier,\n    ACTIONS(6043), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6045), 1,\n      sym_private_property_identifier,\n  [98322] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4793), 1,\n      anon_sym_AMP,\n    ACTIONS(4797), 1,\n      anon_sym_extends,\n    ACTIONS(5376), 1,\n      anon_sym_PIPE,\n  [98335] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5540), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5542), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACE_PIPE,\n  [98346] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6047), 1,\n      sym_identifier,\n    ACTIONS(6049), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6051), 1,\n      sym_private_property_identifier,\n  [98359] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3856), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3854), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACE_PIPE,\n  [98370] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6053), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98379] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6055), 1,\n      sym_identifier,\n    ACTIONS(6057), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6059), 1,\n      sym_private_property_identifier,\n  [98392] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6061), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98401] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6063), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98410] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2272), 1,\n      anon_sym_RBRACK,\n    ACTIONS(6065), 1,\n      anon_sym_COMMA,\n    STATE(3018), 1,\n      aux_sym_tuple_type_repeat1,\n  [98423] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6067), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98432] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5773), 1,\n      anon_sym_as,\n    ACTIONS(6069), 2,\n      anon_sym_COMMA,\n      anon_sym_from,\n  [98443] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6071), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98452] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6073), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98461] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(6075), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [98474] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6063), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98483] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    ACTIONS(6077), 1,\n      anon_sym_GT,\n    STATE(3270), 1,\n      sym_type_parameter,\n  [98496] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6079), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5992), 2,\n      anon_sym_extends,\n      anon_sym_LBRACE_PIPE,\n  [98507] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6081), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98516] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6083), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98525] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6085), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98534] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3345), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98543] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3882), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3880), 2,\n      anon_sym_COMMA,\n      anon_sym_LBRACE_PIPE,\n  [98554] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6087), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98563] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6089), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98572] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6091), 1,\n      anon_sym_COMMA,\n    ACTIONS(6094), 1,\n      anon_sym_RPAREN,\n    STATE(3078), 1,\n      aux_sym_formal_parameters_repeat1,\n  [98585] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6096), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98594] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4931), 1,\n      anon_sym_RBRACE,\n    ACTIONS(6098), 1,\n      anon_sym_COMMA,\n    STATE(3135), 1,\n      aux_sym_export_clause_repeat1,\n  [98607] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6100), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98616] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4747), 1,\n      anon_sym_AMP,\n    ACTIONS(4749), 1,\n      anon_sym_PIPE,\n    ACTIONS(4751), 1,\n      anon_sym_extends,\n  [98629] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1274), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(1276), 1,\n      anon_sym_SQUOTE,\n    STATE(3257), 1,\n      sym_string,\n  [98642] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(6102), 1,\n      anon_sym_RBRACE,\n    STATE(3139), 1,\n      aux_sym_object_pattern_repeat1,\n  [98655] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(6104), 1,\n      anon_sym_RBRACE,\n    STATE(3144), 1,\n      aux_sym_object_repeat1,\n  [98668] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5660), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98677] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(6104), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [98690] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(6102), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [98703] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6106), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98712] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6108), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98721] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6110), 1,\n      anon_sym_COMMA,\n    ACTIONS(6113), 1,\n      anon_sym_from,\n    STATE(3091), 1,\n      aux_sym_named_imports_repeat1,\n  [98734] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6115), 1,\n      anon_sym_COMMA,\n    ACTIONS(6117), 1,\n      anon_sym_RPAREN,\n    STATE(3150), 1,\n      aux_sym_formal_parameters_repeat1,\n  [98747] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6119), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98756] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    ACTIONS(6121), 1,\n      anon_sym_RPAREN,\n    STATE(3693), 1,\n      sym_type_annotation,\n  [98769] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6123), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5982), 2,\n      anon_sym_extends,\n      anon_sym_LBRACE_PIPE,\n  [98780] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1800), 3,\n      anon_sym_fn,\n      anon_sym_static,\n      anon_sym_override,\n  [98789] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5773), 1,\n      anon_sym_as,\n    ACTIONS(5775), 2,\n      anon_sym_COMMA,\n      anon_sym_from,\n  [98800] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5088), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5094), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(605), 1,\n      sym_object_method_signature_type,\n  [98813] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(5635), 1,\n      anon_sym_RBRACK,\n    STATE(3168), 1,\n      aux_sym_array_pattern_repeat1,\n  [98826] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4132), 1,\n      anon_sym_RBRACK,\n    STATE(3154), 1,\n      aux_sym_array_repeat1,\n  [98839] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(6125), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [98852] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4693), 1,\n      anon_sym_EQ,\n    ACTIONS(3021), 2,\n      anon_sym_in,\n      anon_sym_of,\n  [98863] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(5587), 1,\n      anon_sym_fn,\n    STATE(3687), 1,\n      sym_override_modifier,\n  [98876] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2264), 1,\n      anon_sym_RBRACK,\n    ACTIONS(6127), 1,\n      anon_sym_COMMA,\n    STATE(3018), 1,\n      aux_sym_tuple_type_repeat1,\n  [98889] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4132), 1,\n      anon_sym_RBRACK,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [98902] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(5635), 1,\n      anon_sym_RBRACK,\n    STATE(3170), 1,\n      aux_sym_array_pattern_repeat1,\n  [98915] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6129), 1,\n      anon_sym_COMMA,\n    ACTIONS(6131), 1,\n      anon_sym_from,\n    STATE(3091), 1,\n      aux_sym_named_imports_repeat1,\n  [98928] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6133), 1,\n      anon_sym_COMMA,\n    ACTIONS(6135), 1,\n      anon_sym_GT,\n    STATE(3156), 1,\n      aux_sym_type_parameters_repeat1,\n  [98941] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5416), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [98950] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6137), 1,\n      anon_sym_COMMA,\n    ACTIONS(6139), 1,\n      anon_sym_RBRACE,\n    STATE(3037), 1,\n      aux_sym_enum_body_repeat1,\n  [98963] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5129), 1,\n      anon_sym_AMP,\n    ACTIONS(5131), 1,\n      anon_sym_PIPE,\n    ACTIONS(5133), 1,\n      anon_sym_extends,\n  [98976] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2374), 1,\n      anon_sym_GT,\n    ACTIONS(6141), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [98989] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2278), 1,\n      anon_sym_RBRACK,\n    ACTIONS(6143), 1,\n      anon_sym_COMMA,\n    STATE(3018), 1,\n      aux_sym_tuple_type_repeat1,\n  [99002] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4004), 1,\n      anon_sym_RPAREN,\n    STATE(3117), 1,\n      aux_sym_array_repeat1,\n  [99015] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4004), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99028] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5416), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [99037] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(6145), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99050] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5029), 1,\n      anon_sym_LBRACE,\n    ACTIONS(5033), 1,\n      anon_sym_LBRACE_PIPE,\n    STATE(558), 1,\n      sym_object_method_type,\n  [99063] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6147), 1,\n      sym_identifier,\n    STATE(870), 1,\n      sym_decorator_member_expression,\n    STATE(874), 1,\n      sym_decorator_call_expression,\n  [99076] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(6149), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99089] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6151), 1,\n      anon_sym_COMMA,\n    ACTIONS(6153), 1,\n      anon_sym_RBRACK,\n    STATE(2982), 1,\n      aux_sym_tuple_type_repeat1,\n  [99102] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4683), 1,\n      anon_sym_is,\n    ACTIONS(5063), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n  [99113] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6155), 1,\n      anon_sym_EQ,\n    ACTIONS(2893), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [99124] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6158), 1,\n      sym_identifier,\n    ACTIONS(6160), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6162), 1,\n      sym_private_property_identifier,\n  [99137] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6164), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [99146] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6168), 1,\n      anon_sym_DOT,\n    ACTIONS(6166), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [99157] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1826), 1,\n      anon_sym_while,\n    ACTIONS(6170), 1,\n      anon_sym_else,\n    STATE(633), 1,\n      sym_else_clause,\n  [99170] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6172), 1,\n      sym_identifier,\n    ACTIONS(6174), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6176), 1,\n      sym_private_property_identifier,\n  [99183] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5633), 1,\n      anon_sym_EQ,\n    ACTIONS(6178), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [99194] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6180), 1,\n      sym_identifier,\n    ACTIONS(6182), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6184), 1,\n      sym_private_property_identifier,\n  [99207] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4006), 1,\n      anon_sym_RPAREN,\n    STATE(3133), 1,\n      aux_sym_array_repeat1,\n  [99220] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4006), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99233] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(6186), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99246] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6188), 1,\n      sym_identifier,\n    ACTIONS(6190), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6192), 1,\n      sym_private_property_identifier,\n  [99259] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6194), 1,\n      anon_sym_COMMA,\n    ACTIONS(6197), 1,\n      anon_sym_RBRACE,\n    STATE(3135), 1,\n      aux_sym_export_clause_repeat1,\n  [99272] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(6199), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [99285] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4685), 1,\n      anon_sym_EQ,\n    ACTIONS(3021), 2,\n      anon_sym_in,\n      anon_sym_of,\n  [99296] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(6201), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [99309] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 1,\n      anon_sym_COMMA,\n    ACTIONS(6203), 1,\n      anon_sym_RBRACE,\n    STATE(3050), 1,\n      aux_sym_object_pattern_repeat1,\n  [99322] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4024), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99335] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(4024), 1,\n      anon_sym_RPAREN,\n    STATE(2995), 1,\n      aux_sym_array_repeat1,\n  [99348] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6205), 1,\n      sym_identifier,\n    ACTIONS(6207), 1,\n      anon_sym_LBRACK,\n    ACTIONS(6209), 1,\n      sym_private_property_identifier,\n  [99361] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1227), 1,\n      anon_sym_RPAREN,\n    ACTIONS(6211), 1,\n      anon_sym_COMMA,\n    STATE(3078), 1,\n      aux_sym_formal_parameters_repeat1,\n  [99374] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_COMMA,\n    ACTIONS(6213), 1,\n      anon_sym_RBRACE,\n    STATE(3049), 1,\n      aux_sym_object_repeat1,\n  [99387] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6215), 1,\n      anon_sym_COMMA,\n    ACTIONS(6217), 1,\n      anon_sym_RBRACK,\n    STATE(3113), 1,\n      aux_sym_tuple_type_repeat1,\n  [99400] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6219), 1,\n      anon_sym_as,\n    ACTIONS(6221), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [99411] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6223), 1,\n      anon_sym_LPAREN,\n    ACTIONS(6225), 1,\n      anon_sym_await,\n    STATE(44), 1,\n      sym__for_header,\n  [99424] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    ACTIONS(6227), 1,\n      anon_sym_LPAREN,\n    STATE(521), 1,\n      sym_statement_block,\n  [99437] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6229), 1,\n      sym_identifier,\n    ACTIONS(6231), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [99448] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1239), 1,\n      anon_sym_RPAREN,\n    ACTIONS(6233), 1,\n      anon_sym_COMMA,\n    STATE(3078), 1,\n      aux_sym_formal_parameters_repeat1,\n  [99461] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6235), 1,\n      sym_identifier,\n    STATE(1209), 1,\n      sym_decorator_member_expression,\n    STATE(1258), 1,\n      sym_decorator_call_expression,\n  [99474] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6237), 1,\n      sym_identifier,\n    ACTIONS(6239), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [99485] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(6241), 1,\n      anon_sym_fn,\n    STATE(3458), 1,\n      sym_override_modifier,\n  [99498] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(6243), 1,\n      anon_sym_RBRACK,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99511] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4008), 3,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [99520] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6245), 1,\n      anon_sym_COMMA,\n    ACTIONS(6247), 1,\n      anon_sym_GT,\n    STATE(2992), 1,\n      aux_sym_type_parameters_repeat1,\n  [99533] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    ACTIONS(6247), 1,\n      anon_sym_GT,\n    STATE(3270), 1,\n      sym_type_parameter,\n  [99546] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5633), 1,\n      anon_sym_EQ,\n    ACTIONS(6249), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [99557] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(6251), 1,\n      anon_sym_fn,\n    STATE(3691), 1,\n      sym_override_modifier,\n  [99570] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3990), 1,\n      anon_sym_RPAREN,\n    STATE(2818), 1,\n      aux_sym_array_repeat1,\n  [99583] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1475), 1,\n      anon_sym_COMMA,\n    ACTIONS(3990), 1,\n      anon_sym_RPAREN,\n    STATE(3101), 1,\n      aux_sym_array_repeat1,\n  [99596] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1219), 1,\n      anon_sym_RPAREN,\n    ACTIONS(6253), 1,\n      anon_sym_COMMA,\n    STATE(3078), 1,\n      aux_sym_formal_parameters_repeat1,\n  [99609] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2426), 1,\n      anon_sym_GT,\n    ACTIONS(6255), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [99622] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2708), 1,\n      anon_sym_override,\n    ACTIONS(6257), 1,\n      anon_sym_fn,\n    STATE(3692), 1,\n      sym_override_modifier,\n  [99635] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6259), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [99644] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6261), 1,\n      anon_sym_LPAREN,\n    ACTIONS(6263), 1,\n      anon_sym_await,\n    STATE(47), 1,\n      sym__for_header,\n  [99657] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4176), 1,\n      anon_sym_extends,\n    ACTIONS(6265), 1,\n      anon_sym_AMP,\n    ACTIONS(6267), 1,\n      anon_sym_PIPE,\n  [99670] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(6269), 1,\n      anon_sym_RBRACK,\n    STATE(3170), 1,\n      aux_sym_array_pattern_repeat1,\n  [99683] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3095), 1,\n      anon_sym_COLON,\n    ACTIONS(3317), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [99694] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6249), 1,\n      anon_sym_RBRACK,\n    ACTIONS(6271), 1,\n      anon_sym_COMMA,\n    STATE(3170), 1,\n      aux_sym_array_pattern_repeat1,\n  [99707] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2574), 1,\n      anon_sym_GT,\n    ACTIONS(6274), 1,\n      anon_sym_COMMA,\n    STATE(3001), 1,\n      aux_sym_implements_clause_repeat1,\n  [99720] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6276), 1,\n      anon_sym_COMMA,\n    ACTIONS(6278), 1,\n      anon_sym_RBRACK,\n    STATE(3104), 1,\n      aux_sym_tuple_type_repeat1,\n  [99733] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1430), 1,\n      anon_sym_COMMA,\n    ACTIONS(6280), 1,\n      anon_sym_RBRACK,\n    STATE(3170), 1,\n      aux_sym_array_pattern_repeat1,\n  [99746] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3488), 1,\n      sym_formal_parameters,\n  [99756] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6282), 1,\n      sym_identifier,\n    ACTIONS(6284), 1,\n      sym_private_property_identifier,\n  [99766] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6286), 2,\n      anon_sym_COMMA,\n      anon_sym_from,\n  [99774] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1914), 1,\n      sym_statement_block,\n  [99784] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2501), 1,\n      sym_statement_block,\n  [99794] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6288), 1,\n      anon_sym_LPAREN,\n    STATE(34), 1,\n      sym__for_header,\n  [99804] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    STATE(1740), 1,\n      sym_arguments,\n  [99814] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    STATE(3108), 1,\n      sym_type_parameter,\n  [99824] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6290), 1,\n      anon_sym_LPAREN,\n    STATE(45), 1,\n      sym_parenthesized_expression,\n  [99834] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6292), 1,\n      anon_sym_LPAREN,\n    STATE(3296), 1,\n      sym_parenthesized_expression,\n  [99844] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2768), 1,\n      anon_sym_LPAREN,\n    STATE(2176), 1,\n      sym_arguments,\n  [99854] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6249), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [99862] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6290), 1,\n      anon_sym_LPAREN,\n    STATE(43), 1,\n      sym_parenthesized_expression,\n  [99872] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(499), 1,\n      sym_statement_block,\n  [99882] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1869), 1,\n      sym_statement_block,\n  [99892] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1776), 1,\n      sym_statement_block,\n  [99902] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3695), 1,\n      sym_formal_parameters,\n  [99912] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6290), 1,\n      anon_sym_LPAREN,\n    STATE(39), 1,\n      sym_parenthesized_expression,\n  [99922] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6290), 1,\n      anon_sym_LPAREN,\n    STATE(49), 1,\n      sym_parenthesized_expression,\n  [99932] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(597), 1,\n      sym_statement_block,\n  [99942] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6290), 1,\n      anon_sym_LPAREN,\n    STATE(50), 1,\n      sym_parenthesized_expression,\n  [99952] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6205), 1,\n      sym_identifier,\n    ACTIONS(6209), 1,\n      sym_private_property_identifier,\n  [99962] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6294), 1,\n      anon_sym_LPAREN,\n    STATE(3315), 1,\n      sym_parenthesized_expression,\n  [99972] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6296), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [99980] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2490), 1,\n      sym_statement_block,\n  [99990] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6290), 1,\n      anon_sym_LPAREN,\n    STATE(42), 1,\n      sym_parenthesized_expression,\n  [100000] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6298), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [100008] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2627), 1,\n      anon_sym_LPAREN,\n    STATE(2081), 1,\n      sym_arguments,\n  [100018] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6300), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100026] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1783), 1,\n      sym_statement_block,\n  [100036] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6302), 1,\n      sym_identifier,\n    ACTIONS(6304), 1,\n      sym_private_property_identifier,\n  [100046] = 2,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(6306), 2,\n      sym__glimmer_template_content,\n      anon_sym_LT_SLASHtemplate_GT,\n  [100054] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6308), 1,\n      sym_identifier,\n    ACTIONS(6310), 1,\n      sym_private_property_identifier,\n  [100064] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    STATE(1786), 1,\n      sym_arguments,\n  [100074] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6197), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100082] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6312), 1,\n      sym_identifier,\n    ACTIONS(6314), 1,\n      sym_private_property_identifier,\n  [100092] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6316), 1,\n      sym_identifier,\n    ACTIONS(6318), 1,\n      sym_private_property_identifier,\n  [100102] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2640), 1,\n      sym_formal_parameters,\n  [100112] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5715), 1,\n      anon_sym_SEMI,\n    ACTIONS(5717), 1,\n      sym__automatic_semicolon,\n  [100122] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(519), 1,\n      sym_statement_block,\n  [100132] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6320), 1,\n      sym_identifier,\n    ACTIONS(6322), 1,\n      sym_private_property_identifier,\n  [100142] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6324), 1,\n      sym_identifier,\n    ACTIONS(6326), 1,\n      sym_private_property_identifier,\n  [100152] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6328), 1,\n      sym_identifier,\n    ACTIONS(6330), 1,\n      sym_private_property_identifier,\n  [100162] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1828), 1,\n      sym_statement_block,\n  [100172] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2460), 1,\n      sym_statement_block,\n  [100182] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1688), 1,\n      sym_statement_block,\n  [100192] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5498), 1,\n      anon_sym_in,\n    ACTIONS(5500), 1,\n      anon_sym_of,\n  [100202] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3561), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100210] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5406), 1,\n      anon_sym_LBRACE,\n    STATE(508), 1,\n      sym_statement_block,\n  [100220] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5747), 1,\n      anon_sym_LBRACE,\n    STATE(511), 1,\n      sym_class_body,\n  [100230] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6334), 1,\n      anon_sym_LBRACE,\n    STATE(628), 1,\n      sym_enum_body,\n  [100240] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1790), 1,\n      sym_statement_block,\n  [100250] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4816), 1,\n      anon_sym_LPAREN,\n    STATE(2081), 1,\n      sym_arguments,\n  [100260] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5063), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n  [100268] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    STATE(3338), 1,\n      sym_type_annotation,\n  [100278] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2460), 1,\n      sym_statement_block,\n  [100288] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6336), 1,\n      sym_identifier,\n    ACTIONS(6338), 1,\n      sym_private_property_identifier,\n  [100298] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2501), 1,\n      sym_statement_block,\n  [100308] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    STATE(1213), 1,\n      sym_statement_block,\n  [100318] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1676), 1,\n      sym_statement_block,\n  [100328] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2650), 1,\n      sym_formal_parameters,\n  [100338] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6340), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100346] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3592), 1,\n      sym_formal_parameters,\n  [100356] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4836), 2,\n      anon_sym_in,\n      anon_sym_of,\n  [100364] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6342), 1,\n      sym_identifier,\n    ACTIONS(6344), 1,\n      sym_private_property_identifier,\n  [100374] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6346), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [100382] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3485), 1,\n      sym_formal_parameters,\n  [100392] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5575), 1,\n      anon_sym_SEMI,\n    ACTIONS(5577), 1,\n      sym__automatic_semicolon,\n  [100402] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2210), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100410] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4759), 1,\n      anon_sym_COLON,\n    STATE(3090), 1,\n      sym_type_annotation,\n  [100420] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1298), 1,\n      anon_sym_LBRACE,\n    STATE(135), 1,\n      sym_statement_block,\n  [100430] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2500), 1,\n      sym_statement_block,\n  [100440] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2503), 1,\n      sym_statement_block,\n  [100450] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6348), 1,\n      sym_identifier,\n    ACTIONS(6350), 1,\n      sym_private_property_identifier,\n  [100460] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3329), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100468] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    STATE(3270), 1,\n      sym_type_parameter,\n  [100478] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3532), 1,\n      sym_formal_parameters,\n  [100488] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3926), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100496] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3284), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100504] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6352), 2,\n      anon_sym_COMMA,\n      anon_sym_from,\n  [100512] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6354), 1,\n      sym_identifier,\n    ACTIONS(6356), 1,\n      sym_private_property_identifier,\n  [100522] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3570), 1,\n      sym_formal_parameters,\n  [100532] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2522), 1,\n      sym_formal_parameters,\n  [100542] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6358), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100550] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6360), 1,\n      sym_identifier,\n    ACTIONS(6362), 1,\n      sym_private_property_identifier,\n  [100560] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6364), 1,\n      sym_identifier,\n    ACTIONS(6366), 1,\n      sym_private_property_identifier,\n  [100570] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6368), 1,\n      sym_identifier,\n    ACTIONS(6370), 1,\n      sym_private_property_identifier,\n  [100580] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2494), 1,\n      sym_statement_block,\n  [100590] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2493), 1,\n      sym_statement_block,\n  [100600] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2503), 1,\n      sym_statement_block,\n  [100610] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2521), 1,\n      sym_statement_block,\n  [100620] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6113), 2,\n      anon_sym_COMMA,\n      anon_sym_from,\n  [100628] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3623), 1,\n      sym_formal_parameters,\n  [100638] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2500), 1,\n      sym_statement_block,\n  [100648] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6372), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [100656] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5719), 1,\n      anon_sym_SEMI,\n    ACTIONS(5721), 1,\n      sym__automatic_semicolon,\n  [100666] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5893), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [100674] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6374), 1,\n      anon_sym_SEMI,\n    ACTIONS(6376), 1,\n      sym__automatic_semicolon,\n  [100684] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6378), 1,\n      anon_sym_fn,\n    ACTIONS(6380), 1,\n      anon_sym_fn_STAR,\n  [100694] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2627), 1,\n      sym_formal_parameters,\n  [100704] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3587), 1,\n      anon_sym_LPAREN,\n    STATE(1851), 1,\n      sym_arguments,\n  [100714] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5404), 1,\n      anon_sym_LPAREN,\n    STATE(2343), 1,\n      sym_formal_parameters,\n  [100724] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3449), 1,\n      sym_formal_parameters,\n  [100734] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2722), 1,\n      anon_sym_LBRACE,\n    STATE(2886), 1,\n      sym_export_clause,\n  [100744] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6382), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100752] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5219), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n  [100760] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6384), 1,\n      anon_sym_SEMI,\n    ACTIONS(6386), 1,\n      sym__automatic_semicolon,\n  [100770] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6388), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100778] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    STATE(1236), 1,\n      sym_statement_block,\n  [100788] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6390), 1,\n      anon_sym_SEMI,\n    ACTIONS(6392), 1,\n      sym__automatic_semicolon,\n  [100798] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3313), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100806] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6178), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100814] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6394), 1,\n      anon_sym_SEMI,\n    ACTIONS(6396), 1,\n      sym__automatic_semicolon,\n  [100824] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    STATE(1230), 1,\n      sym_statement_block,\n  [100834] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6094), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [100842] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3539), 1,\n      sym_formal_parameters,\n  [100852] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2303), 1,\n      sym_formal_parameters,\n  [100862] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3487), 1,\n      sym_formal_parameters,\n  [100872] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6398), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [100880] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3479), 1,\n      sym_formal_parameters,\n  [100890] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6400), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [100898] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3403), 1,\n      anon_sym_LPAREN,\n    STATE(1423), 1,\n      sym_arguments,\n  [100908] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6402), 1,\n      anon_sym_LBRACE,\n    STATE(606), 1,\n      sym_switch_body,\n  [100918] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6288), 1,\n      anon_sym_LPAREN,\n    STATE(37), 1,\n      sym__for_header,\n  [100928] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6404), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [100936] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3493), 1,\n      sym_formal_parameters,\n  [100946] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6406), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [100954] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6408), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100962] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6410), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [100970] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6412), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100978] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4120), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100986] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6414), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [100994] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6416), 1,\n      sym_identifier,\n    STATE(3126), 1,\n      sym_nested_identifier,\n  [101004] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4118), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [101012] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1832), 1,\n      sym_statement_block,\n  [101022] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6418), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [101030] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6420), 1,\n      anon_sym_in,\n    ACTIONS(6422), 1,\n      anon_sym_COLON,\n  [101040] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6424), 1,\n      anon_sym_SEMI,\n    ACTIONS(6426), 1,\n      sym__automatic_semicolon,\n  [101050] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1829), 1,\n      sym_statement_block,\n  [101060] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6428), 1,\n      sym_identifier,\n    ACTIONS(6430), 1,\n      sym_private_property_identifier,\n  [101070] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6432), 1,\n      sym_identifier,\n    ACTIONS(6434), 1,\n      sym_private_property_identifier,\n  [101080] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6436), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [101088] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6438), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [101096] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6440), 1,\n      sym_identifier,\n    ACTIONS(6442), 1,\n      sym_private_property_identifier,\n  [101106] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6444), 1,\n      sym_identifier,\n    ACTIONS(6446), 1,\n      sym_private_property_identifier,\n  [101116] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3427), 1,\n      sym_formal_parameters,\n  [101126] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6448), 1,\n      sym_identifier,\n    ACTIONS(6450), 1,\n      sym_private_property_identifier,\n  [101136] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6452), 1,\n      sym_identifier,\n    ACTIONS(6454), 1,\n      sym_private_property_identifier,\n  [101146] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6035), 1,\n      sym_identifier,\n    ACTIONS(6039), 1,\n      sym_private_property_identifier,\n  [101156] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6456), 1,\n      anon_sym_SEMI,\n    ACTIONS(6458), 1,\n      sym__automatic_semicolon,\n  [101166] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6332), 1,\n      anon_sym_LBRACE,\n    STATE(2490), 1,\n      sym_statement_block,\n  [101176] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3457), 1,\n      sym_formal_parameters,\n  [101186] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2486), 1,\n      sym_formal_parameters,\n  [101196] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    STATE(1224), 1,\n      sym_statement_block,\n  [101206] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5221), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n  [101214] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6460), 1,\n      sym_identifier,\n    ACTIONS(6462), 1,\n      sym_private_property_identifier,\n  [101224] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6464), 1,\n      sym_identifier,\n    ACTIONS(6466), 1,\n      sym_private_property_identifier,\n  [101234] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6468), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [101242] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6470), 1,\n      sym_identifier,\n    ACTIONS(6472), 1,\n      sym_private_property_identifier,\n  [101252] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1723), 1,\n      anon_sym_LBRACE,\n    STATE(1750), 1,\n      sym_statement_block,\n  [101262] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6474), 1,\n      sym_identifier,\n    ACTIONS(6476), 1,\n      sym_private_property_identifier,\n  [101272] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6478), 1,\n      sym_identifier,\n    ACTIONS(6480), 1,\n      sym_private_property_identifier,\n  [101282] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6482), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [101290] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2494), 1,\n      sym_statement_block,\n  [101300] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6484), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [101308] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6028), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [101316] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4799), 1,\n      anon_sym_COLON,\n    STATE(3298), 1,\n      sym_type_annotation,\n  [101326] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6033), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [101334] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2493), 1,\n      sym_statement_block,\n  [101344] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6486), 1,\n      sym_identifier,\n    ACTIONS(6488), 1,\n      sym_private_property_identifier,\n  [101354] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5984), 1,\n      sym_identifier,\n    STATE(2983), 1,\n      sym_type_parameter,\n  [101364] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6490), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [101372] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6492), 1,\n      sym_identifier,\n    ACTIONS(6494), 1,\n      sym_private_property_identifier,\n  [101382] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2214), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [101390] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    STATE(1228), 1,\n      sym_statement_block,\n  [101400] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5723), 1,\n      anon_sym_LBRACE,\n    STATE(1227), 1,\n      sym_statement_block,\n  [101410] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(2592), 1,\n      sym_formal_parameters,\n  [101420] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3446), 1,\n      sym_formal_parameters,\n  [101430] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6496), 1,\n      anon_sym_SEMI,\n    ACTIONS(6498), 1,\n      sym__automatic_semicolon,\n  [101440] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5703), 1,\n      anon_sym_from,\n    STATE(3271), 1,\n      sym__from_clause,\n  [101450] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6500), 1,\n      sym_identifier,\n    ACTIONS(6502), 1,\n      anon_sym_EQ_GT,\n  [101460] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6504), 1,\n      sym_identifier,\n    ACTIONS(6506), 1,\n      sym_private_property_identifier,\n  [101470] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5765), 1,\n      anon_sym_SEMI,\n    ACTIONS(5767), 1,\n      sym__automatic_semicolon,\n  [101480] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1831), 1,\n      sym_statement_block,\n  [101490] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4773), 1,\n      anon_sym_LPAREN,\n    STATE(2301), 1,\n      sym_arguments,\n  [101500] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6508), 1,\n      sym_identifier,\n    ACTIONS(6510), 1,\n      sym_private_property_identifier,\n  [101510] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6512), 1,\n      sym_identifier,\n    ACTIONS(6514), 1,\n      sym_private_property_identifier,\n  [101520] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3616), 1,\n      sym_formal_parameters,\n  [101530] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5960), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [101538] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(534), 1,\n      sym_statement_block,\n  [101548] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(520), 1,\n      sym_statement_block,\n  [101558] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1857), 1,\n      sym_statement_block,\n  [101568] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1812), 1,\n      anon_sym_LBRACE,\n    STATE(2521), 1,\n      sym_statement_block,\n  [101578] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6516), 1,\n      sym_identifier,\n    ACTIONS(6518), 1,\n      sym_private_property_identifier,\n  [101588] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1298), 1,\n      anon_sym_LBRACE,\n    STATE(124), 1,\n      sym_statement_block,\n  [101598] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6520), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [101606] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3323), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [101614] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5951), 1,\n      sym_identifier,\n    ACTIONS(5955), 1,\n      sym_private_property_identifier,\n  [101624] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1707), 1,\n      anon_sym_LBRACE,\n    STATE(1878), 1,\n      sym_statement_block,\n  [101634] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2306), 1,\n      anon_sym_LPAREN,\n    STATE(2459), 1,\n      sym_formal_parameters,\n  [101644] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5406), 1,\n      anon_sym_LBRACE,\n    STATE(517), 1,\n      sym_statement_block,\n  [101654] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6334), 1,\n      anon_sym_LBRACE,\n    STATE(630), 1,\n      sym_enum_body,\n  [101664] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5747), 1,\n      anon_sym_LBRACE,\n    STATE(530), 1,\n      sym_class_body,\n  [101674] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3648), 1,\n      sym_formal_parameters,\n  [101684] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5135), 1,\n      anon_sym_LPAREN,\n    STATE(3690), 1,\n      sym_formal_parameters,\n  [101694] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6522), 1,\n      sym_identifier,\n    ACTIONS(6524), 1,\n      sym_private_property_identifier,\n  [101704] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6526), 1,\n      sym_identifier,\n    ACTIONS(6528), 1,\n      sym_private_property_identifier,\n  [101714] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5828), 1,\n      anon_sym_SEMI,\n    ACTIONS(5830), 1,\n      sym__automatic_semicolon,\n  [101724] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5181), 2,\n      anon_sym_LBRACE,\n      anon_sym_EQ_GT,\n  [101732] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5822), 1,\n      anon_sym_SEMI,\n    ACTIONS(5824), 1,\n      sym__automatic_semicolon,\n  [101742] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6530), 1,\n      anon_sym_SEMI,\n    ACTIONS(6532), 1,\n      sym__automatic_semicolon,\n  [101752] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6534), 1,\n      anon_sym_EQ_GT,\n  [101759] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3752), 1,\n      anon_sym_RPAREN,\n  [101766] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6536), 1,\n      anon_sym_EQ_GT,\n  [101773] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6538), 1,\n      anon_sym_EQ_GT,\n  [101780] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5976), 1,\n      anon_sym_RBRACE,\n  [101787] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6540), 1,\n      anon_sym_RPAREN,\n  [101794] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6542), 1,\n      sym_identifier,\n  [101801] = 2,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(6544), 1,\n      sym_regex_pattern,\n  [101808] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6546), 1,\n      anon_sym_RBRACK,\n  [101815] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6548), 1,\n      sym_identifier,\n  [101822] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6550), 1,\n      sym_identifier,\n  [101829] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6500), 1,\n      sym_identifier,\n  [101836] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5771), 1,\n      anon_sym_EQ,\n  [101843] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6552), 1,\n      anon_sym_RBRACK,\n  [101850] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4719), 1,\n      anon_sym_DOT,\n  [101857] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6554), 1,\n      sym_identifier,\n  [101864] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6556), 1,\n      anon_sym_RBRACK,\n  [101871] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6558), 1,\n      anon_sym_DASH_GT,\n  [101878] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6560), 1,\n      sym_identifier,\n  [101885] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6562), 1,\n      anon_sym_RBRACK,\n  [101892] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6564), 1,\n      sym_number,\n  [101899] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6566), 1,\n      anon_sym_RBRACK,\n  [101906] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6568), 1,\n      anon_sym_RBRACK,\n  [101913] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6570), 1,\n      anon_sym_RBRACK,\n  [101920] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6572), 1,\n      anon_sym_RBRACK,\n  [101927] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6574), 1,\n      anon_sym_RBRACK,\n  [101934] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6576), 1,\n      sym_number,\n  [101941] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6578), 1,\n      anon_sym_RBRACK,\n  [101948] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5922), 1,\n      anon_sym_for,\n  [101955] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6580), 1,\n      sym_identifier,\n  [101962] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6582), 1,\n      anon_sym_RBRACK,\n  [101969] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6584), 1,\n      anon_sym_RBRACK,\n  [101976] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6586), 1,\n      anon_sym_RBRACK,\n  [101983] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6588), 1,\n      anon_sym_RBRACK,\n  [101990] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6590), 1,\n      anon_sym_RBRACK,\n  [101997] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6592), 1,\n      anon_sym_RBRACK,\n  [102004] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6594), 1,\n      anon_sym_RBRACK,\n  [102011] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6596), 1,\n      anon_sym_RBRACK,\n  [102018] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6598), 1,\n      anon_sym_RBRACK,\n  [102025] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6600), 1,\n      anon_sym_RBRACK,\n  [102032] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6602), 1,\n      anon_sym_RPAREN,\n  [102039] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6604), 1,\n      anon_sym_RBRACK,\n  [102046] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6606), 1,\n      anon_sym_EQ_GT,\n  [102053] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6608), 1,\n      anon_sym_RBRACK,\n  [102060] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6610), 1,\n      anon_sym_RBRACK,\n  [102067] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6612), 1,\n      anon_sym_RBRACK,\n  [102074] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6614), 1,\n      anon_sym_RBRACK,\n  [102081] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6616), 1,\n      anon_sym_RBRACK,\n  [102088] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6618), 1,\n      anon_sym_target,\n  [102095] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6620), 1,\n      anon_sym_RPAREN,\n  [102102] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4707), 1,\n      anon_sym_EQ,\n  [102109] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6622), 1,\n      anon_sym_RPAREN,\n  [102116] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6624), 1,\n      anon_sym_readonly,\n  [102123] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6626), 1,\n      anon_sym_EQ_GT,\n  [102130] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6628), 1,\n      anon_sym_EQ_GT,\n  [102137] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6630), 1,\n      anon_sym_RBRACK,\n  [102144] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6632), 1,\n      anon_sym_EQ_GT,\n  [102151] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6502), 1,\n      anon_sym_EQ_GT,\n  [102158] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6634), 1,\n      anon_sym_RBRACK,\n  [102165] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6636), 1,\n      anon_sym_SLASH2,\n  [102172] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6638), 1,\n      anon_sym_RBRACK,\n  [102179] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6640), 1,\n      anon_sym_DASH_GT,\n  [102186] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6642), 1,\n      anon_sym_RBRACK,\n  [102193] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6644), 1,\n      anon_sym_RBRACK,\n  [102200] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6646), 1,\n      anon_sym_EQ_GT,\n  [102207] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6648), 1,\n      anon_sym_EQ,\n  [102214] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6650), 1,\n      sym_identifier,\n  [102221] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6652), 1,\n      anon_sym_DASH_GT,\n  [102228] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4681), 1,\n      anon_sym_DOT,\n  [102235] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6654), 1,\n      sym_identifier,\n  [102242] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6656), 1,\n      anon_sym_new,\n  [102249] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6658), 1,\n      anon_sym_EQ_GT,\n  [102256] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6660), 1,\n      anon_sym_EQ_GT,\n  [102263] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6662), 1,\n      anon_sym_fn,\n  [102270] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5998), 1,\n      anon_sym_RBRACK,\n  [102277] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4421), 1,\n      anon_sym_RBRACE,\n  [102284] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6664), 1,\n      anon_sym_COLON,\n  [102291] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6666), 1,\n      sym_number,\n  [102298] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6668), 1,\n      anon_sym_EQ_GT,\n  [102305] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6670), 1,\n      anon_sym_RPAREN,\n  [102312] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6672), 1,\n      sym_identifier,\n  [102319] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6674), 1,\n      anon_sym_EQ_GT,\n  [102326] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6676), 1,\n      anon_sym_RBRACK,\n  [102333] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6678), 1,\n      anon_sym_EQ,\n  [102340] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6680), 1,\n      anon_sym_EQ_GT,\n  [102347] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6682), 1,\n      anon_sym_EQ_GT,\n  [102354] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6684), 1,\n      anon_sym_EQ_GT,\n  [102361] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6686), 1,\n      anon_sym_COMMA,\n  [102368] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6688), 1,\n      anon_sym_RBRACK,\n  [102375] = 2,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(6690), 1,\n      sym_regex_pattern,\n  [102382] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6692), 1,\n      sym_number,\n  [102389] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6694), 1,\n      anon_sym_RBRACK,\n  [102396] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3521), 1,\n      anon_sym_DOT,\n  [102403] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6696), 1,\n      sym_identifier,\n  [102410] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6698), 1,\n      anon_sym_DASH_GT,\n  [102417] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1473), 1,\n      anon_sym_fn,\n  [102424] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6021), 1,\n      anon_sym_fn,\n  [102431] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6700), 1,\n      anon_sym_LBRACK,\n  [102438] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6702), 1,\n      anon_sym_RBRACK,\n  [102445] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4443), 1,\n      anon_sym_RBRACK,\n  [102452] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6704), 1,\n      anon_sym_EQ_GT,\n  [102459] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6706), 1,\n      anon_sym_RBRACK,\n  [102466] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6708), 1,\n      anon_sym_EQ_GT,\n  [102473] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6710), 1,\n      anon_sym_DASH_GT,\n  [102480] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6712), 1,\n      anon_sym_RBRACK,\n  [102487] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6714), 1,\n      anon_sym_RBRACK,\n  [102494] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6716), 1,\n      anon_sym_RBRACK,\n  [102501] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6718), 1,\n      sym_identifier,\n  [102508] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6720), 1,\n      anon_sym_EQ_GT,\n  [102515] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6722), 1,\n      anon_sym_as,\n  [102522] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6724), 1,\n      anon_sym_RBRACK,\n  [102529] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6726), 1,\n      anon_sym_fn,\n  [102536] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6728), 1,\n      anon_sym_RBRACK,\n  [102543] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6730), 1,\n      anon_sym_RBRACK,\n  [102550] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6732), 1,\n      anon_sym_while,\n  [102557] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6734), 1,\n      anon_sym_RBRACK,\n  [102564] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6736), 1,\n      anon_sym_EQ_GT,\n  [102571] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6738), 1,\n      anon_sym_LBRACE,\n  [102578] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6740), 1,\n      anon_sym_RBRACK,\n  [102585] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3669), 1,\n      anon_sym_RPAREN,\n  [102592] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3276), 1,\n      anon_sym_LPAREN,\n  [102599] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6742), 1,\n      anon_sym_RBRACK,\n  [102606] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6744), 1,\n      anon_sym_RBRACK,\n  [102613] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6746), 1,\n      anon_sym_EQ_GT,\n  [102620] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5886), 1,\n      anon_sym_RBRACK,\n  [102627] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6748), 1,\n      anon_sym_RBRACK,\n  [102634] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6750), 1,\n      anon_sym_RBRACK,\n  [102641] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6752), 1,\n      anon_sym_RBRACK,\n  [102648] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6754), 1,\n      sym_identifier,\n  [102655] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6756), 1,\n      anon_sym_RBRACK,\n  [102662] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6758), 1,\n      anon_sym_RBRACK,\n  [102669] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6760), 1,\n      anon_sym_RBRACK,\n  [102676] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6762), 1,\n      anon_sym_EQ_GT,\n  [102683] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6764), 1,\n      anon_sym_RBRACK,\n  [102690] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6766), 1,\n      anon_sym_from,\n  [102697] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6768), 1,\n      sym_identifier,\n  [102704] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6770), 1,\n      anon_sym_as,\n  [102711] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6772), 1,\n      sym_identifier,\n  [102718] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6774), 1,\n      anon_sym_EQ_GT,\n  [102725] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6776), 1,\n      anon_sym_RBRACK,\n  [102732] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6778), 1,\n      anon_sym_EQ_GT,\n  [102739] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6780), 1,\n      anon_sym_EQ_GT,\n  [102746] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6782), 1,\n      anon_sym_EQ_GT,\n  [102753] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6784), 1,\n      anon_sym_RBRACK,\n  [102760] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6786), 1,\n      anon_sym_SLASH2,\n  [102767] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6788), 1,\n      anon_sym_DASH_GT,\n  [102774] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5041), 1,\n      anon_sym_DOT,\n  [102781] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6790), 1,\n      anon_sym_EQ_GT,\n  [102788] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6792), 1,\n      sym_identifier,\n  [102795] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6794), 1,\n      sym_number,\n  [102802] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6796), 1,\n      anon_sym_RBRACK,\n  [102809] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6798), 1,\n      anon_sym_RBRACK,\n  [102816] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4693), 1,\n      anon_sym_EQ,\n  [102823] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6800), 1,\n      anon_sym_RBRACK,\n  [102830] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6802), 1,\n      anon_sym_EQ_GT,\n  [102837] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4303), 1,\n      anon_sym_RPAREN,\n  [102844] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6804), 1,\n      sym_identifier,\n  [102851] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6806), 1,\n      anon_sym_EQ_GT,\n  [102858] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6808), 1,\n      anon_sym_COLON,\n  [102865] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6810), 1,\n      sym_identifier,\n  [102872] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4725), 1,\n      anon_sym_is,\n  [102879] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 1,\n      anon_sym_fn,\n  [102886] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4810), 1,\n      anon_sym_DOT,\n  [102893] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6812), 1,\n      anon_sym_RBRACK,\n  [102900] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6814), 1,\n      anon_sym_COLON,\n  [102907] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6816), 1,\n      anon_sym_RBRACK,\n  [102914] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6818), 1,\n      anon_sym_EQ,\n  [102921] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6820), 1,\n      anon_sym_RBRACK,\n  [102928] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6822), 1,\n      anon_sym_RBRACK,\n  [102935] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4683), 1,\n      anon_sym_is,\n  [102942] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6824), 1,\n      anon_sym_RBRACK,\n  [102949] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6826), 1,\n      anon_sym_RBRACK,\n  [102956] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6828), 1,\n      anon_sym_namespace,\n  [102963] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6830), 1,\n      anon_sym_RBRACK,\n  [102970] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6832), 1,\n      anon_sym_RBRACK,\n  [102977] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6834), 1,\n      anon_sym_RBRACK,\n  [102984] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6836), 1,\n      anon_sym_EQ_GT,\n  [102991] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6838), 1,\n      anon_sym_RBRACK,\n  [102998] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6840), 1,\n      anon_sym_RBRACK,\n  [103005] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6842), 1,\n      anon_sym_EQ_GT,\n  [103012] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6844), 1,\n      sym_identifier,\n  [103019] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6846), 1,\n      anon_sym_COLON,\n  [103026] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4715), 1,\n      anon_sym_EQ,\n  [103033] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6848), 1,\n      sym_identifier,\n  [103040] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6850), 1,\n      anon_sym_RBRACK,\n  [103047] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6852), 1,\n      anon_sym_EQ_GT,\n  [103054] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6854), 1,\n      sym_identifier,\n  [103061] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6856), 1,\n      anon_sym_RBRACK,\n  [103068] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3757), 1,\n      anon_sym_RPAREN,\n  [103075] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4244), 1,\n      anon_sym_RBRACK,\n  [103082] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6858), 1,\n      sym_number,\n  [103089] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6860), 1,\n      anon_sym_new,\n  [103096] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6862), 1,\n      anon_sym_DASH_GT,\n  [103103] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6864), 1,\n      anon_sym_RBRACK,\n  [103110] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6866), 1,\n      anon_sym_EQ_GT,\n  [103117] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6868), 1,\n      sym_identifier,\n  [103124] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6870), 1,\n      anon_sym_EQ_GT,\n  [103131] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6872), 1,\n      anon_sym_EQ_GT,\n  [103138] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6874), 1,\n      anon_sym_DASH_GT,\n  [103145] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6876), 1,\n      anon_sym_SLASH2,\n  [103152] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6878), 1,\n      sym_identifier,\n  [103159] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3655), 1,\n      anon_sym_RPAREN,\n  [103166] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6880), 1,\n      sym_identifier,\n  [103173] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6882), 1,\n      sym_identifier,\n  [103180] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6884), 1,\n      anon_sym_EQ_GT,\n  [103187] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6886), 1,\n      anon_sym_RBRACK,\n  [103194] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6888), 1,\n      anon_sym_RBRACK,\n  [103201] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6890), 1,\n      anon_sym_EQ_GT,\n  [103208] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6892), 1,\n      anon_sym_RBRACK,\n  [103215] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4305), 1,\n      anon_sym_RPAREN,\n  [103222] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6894), 1,\n      anon_sym_RBRACK,\n  [103229] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6896), 1,\n      anon_sym_RBRACK,\n  [103236] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6898), 1,\n      anon_sym_RBRACK,\n  [103243] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6900), 1,\n      anon_sym_RBRACK,\n  [103250] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6902), 1,\n      sym_number,\n  [103257] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4685), 1,\n      anon_sym_EQ,\n  [103264] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6904), 1,\n      sym_identifier,\n  [103271] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6906), 1,\n      anon_sym_RBRACK,\n  [103278] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6908), 1,\n      anon_sym_RBRACK,\n  [103285] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6910), 1,\n      anon_sym_RBRACK,\n  [103292] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6912), 1,\n      anon_sym_RBRACK,\n  [103299] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6914), 1,\n      anon_sym_EQ_GT,\n  [103306] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6916), 1,\n      anon_sym_RBRACK,\n  [103313] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6918), 1,\n      anon_sym_RBRACK,\n  [103320] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6920), 1,\n      sym_identifier,\n  [103327] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6922), 1,\n      anon_sym_RBRACK,\n  [103334] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6924), 1,\n      anon_sym_DASH_GT,\n  [103341] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6926), 1,\n      anon_sym_COLON,\n  [103348] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6928), 1,\n      anon_sym_abstract,\n  [103355] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6930), 1,\n      ts_builtin_sym_end,\n  [103362] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4711), 1,\n      anon_sym_EQ,\n  [103369] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6932), 1,\n      anon_sym_EQ_GT,\n  [103376] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6934), 1,\n      anon_sym_RPAREN,\n  [103383] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6936), 1,\n      anon_sym_RBRACK,\n  [103390] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6938), 1,\n      anon_sym_RBRACK,\n  [103397] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6940), 1,\n      anon_sym_SLASH2,\n  [103404] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6942), 1,\n      anon_sym_EQ_GT,\n  [103411] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6944), 1,\n      anon_sym_RBRACK,\n  [103418] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6946), 1,\n      anon_sym_DASH_GT,\n  [103425] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6948), 1,\n      anon_sym_RBRACK,\n  [103432] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6950), 1,\n      anon_sym_COLON,\n  [103439] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6952), 1,\n      anon_sym_RBRACK,\n  [103446] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6954), 1,\n      sym_identifier,\n  [103453] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6956), 1,\n      anon_sym_RBRACK,\n  [103460] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6958), 1,\n      anon_sym_COLON,\n  [103467] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6960), 1,\n      anon_sym_EQ_GT,\n  [103474] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6962), 1,\n      anon_sym_EQ_GT,\n  [103481] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6964), 1,\n      anon_sym_RBRACK,\n  [103488] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6966), 1,\n      anon_sym_RBRACK,\n  [103495] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6968), 1,\n      anon_sym_RBRACK,\n  [103502] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4275), 1,\n      anon_sym_RPAREN,\n  [103509] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6970), 1,\n      anon_sym_RBRACK,\n  [103516] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6257), 1,\n      anon_sym_fn,\n  [103523] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6972), 1,\n      anon_sym_EQ_GT,\n  [103530] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6974), 1,\n      sym_identifier,\n  [103537] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4285), 1,\n      anon_sym_RPAREN,\n  [103544] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6976), 1,\n      sym_identifier,\n  [103551] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4385), 1,\n      anon_sym_RPAREN,\n  [103558] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6978), 1,\n      sym_identifier,\n  [103565] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6980), 1,\n      anon_sym_target,\n  [103572] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6982), 1,\n      sym_identifier,\n  [103579] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6984), 1,\n      anon_sym_EQ_GT,\n  [103586] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6986), 1,\n      sym_number,\n  [103593] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6988), 1,\n      anon_sym_EQ_GT,\n  [103600] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6990), 1,\n      anon_sym_RBRACK,\n  [103607] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4252), 1,\n      anon_sym_RBRACK,\n  [103614] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6992), 1,\n      anon_sym_COMMA,\n  [103621] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6994), 1,\n      anon_sym_EQ_GT,\n  [103628] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6996), 1,\n      anon_sym_EQ_GT,\n  [103635] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6998), 1,\n      anon_sym_RBRACK,\n  [103642] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7000), 1,\n      anon_sym_RBRACK,\n  [103649] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4709), 1,\n      anon_sym_EQ,\n  [103656] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6153), 1,\n      anon_sym_RBRACK,\n  [103663] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7002), 1,\n      anon_sym_RBRACK,\n  [103670] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7004), 1,\n      anon_sym_new,\n  [103677] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7006), 1,\n      anon_sym_EQ_GT,\n  [103684] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7008), 1,\n      anon_sym_EQ_GT,\n  [103691] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7010), 1,\n      anon_sym_EQ_GT,\n  [103698] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7012), 1,\n      sym_identifier,\n  [103705] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3750), 1,\n      anon_sym_RPAREN,\n  [103712] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7014), 1,\n      anon_sym_fn,\n  [103719] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4791), 1,\n      anon_sym_is,\n  [103726] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7016), 1,\n      sym_identifier,\n  [103733] = 2,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(7018), 1,\n      sym_regex_pattern,\n  [103740] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      anon_sym_is,\n  [103747] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4407), 1,\n      anon_sym_RBRACK,\n  [103754] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4713), 1,\n      anon_sym_EQ,\n  [103761] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7020), 1,\n      anon_sym_new,\n  [103768] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7022), 1,\n      anon_sym_RBRACK,\n  [103775] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7024), 1,\n      anon_sym_RPAREN,\n  [103782] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7026), 1,\n      anon_sym_RBRACK,\n  [103789] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7028), 1,\n      sym_identifier,\n  [103796] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7030), 1,\n      anon_sym_new,\n  [103803] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3671), 1,\n      anon_sym_RPAREN,\n  [103810] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7032), 1,\n      anon_sym_EQ_GT,\n  [103817] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6217), 1,\n      anon_sym_RBRACK,\n  [103824] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7034), 1,\n      anon_sym_RPAREN,\n  [103831] = 2,\n    ACTIONS(5603), 1,\n      sym_comment,\n    ACTIONS(7036), 1,\n      sym_regex_pattern,\n  [103838] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5587), 1,\n      anon_sym_fn,\n  [103845] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3746), 1,\n      anon_sym_DOT,\n  [103852] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7038), 1,\n      anon_sym_new,\n  [103859] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7040), 1,\n      sym_identifier,\n  [103866] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6251), 1,\n      anon_sym_fn,\n  [103873] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4882), 1,\n      anon_sym_is,\n  [103880] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4812), 1,\n      anon_sym_is,\n  [103887] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7042), 1,\n      anon_sym_DASH_GT,\n  [103894] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7044), 1,\n      anon_sym_fn,\n  [103901] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7046), 1,\n      anon_sym_fn,\n  [103908] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7048), 1,\n      anon_sym_RPAREN,\n  [103915] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7050), 1,\n      anon_sym_new,\n  [103922] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7052), 1,\n      anon_sym_DASH_GT,\n  [103929] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7054), 1,\n      anon_sym_RBRACK,\n  [103936] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(6278), 1,\n      anon_sym_RBRACK,\n  [103943] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(7056), 1,\n      anon_sym_EQ_GT,\n};\n\nstatic const uint32_t ts_small_parse_table_map[] = {\n  [SMALL_STATE(923)] = 0,\n  [SMALL_STATE(924)] = 89,\n  [SMALL_STATE(925)] = 198,\n  [SMALL_STATE(926)] = 291,\n  [SMALL_STATE(927)] = 384,\n  [SMALL_STATE(928)] = 473,\n  [SMALL_STATE(929)] = 562,\n  [SMALL_STATE(930)] = 657,\n  [SMALL_STATE(931)] = 766,\n  [SMALL_STATE(932)] = 875,\n  [SMALL_STATE(933)] = 976,\n  [SMALL_STATE(934)] = 1069,\n  [SMALL_STATE(935)] = 1164,\n  [SMALL_STATE(936)] = 1273,\n  [SMALL_STATE(937)] = 1382,\n  [SMALL_STATE(938)] = 1491,\n  [SMALL_STATE(939)] = 1600,\n  [SMALL_STATE(940)] = 1686,\n  [SMALL_STATE(941)] = 1772,\n  [SMALL_STATE(942)] = 1858,\n  [SMALL_STATE(943)] = 1944,\n  [SMALL_STATE(944)] = 2028,\n  [SMALL_STATE(945)] = 2114,\n  [SMALL_STATE(946)] = 2200,\n  [SMALL_STATE(947)] = 2286,\n  [SMALL_STATE(948)] = 2372,\n  [SMALL_STATE(949)] = 2462,\n  [SMALL_STATE(950)] = 2550,\n  [SMALL_STATE(951)] = 2636,\n  [SMALL_STATE(952)] = 2724,\n  [SMALL_STATE(953)] = 2816,\n  [SMALL_STATE(954)] = 2902,\n  [SMALL_STATE(955)] = 3014,\n  [SMALL_STATE(956)] = 3100,\n  [SMALL_STATE(957)] = 3192,\n  [SMALL_STATE(958)] = 3284,\n  [SMALL_STATE(959)] = 3370,\n  [SMALL_STATE(960)] = 3482,\n  [SMALL_STATE(961)] = 3574,\n  [SMALL_STATE(962)] = 3662,\n  [SMALL_STATE(963)] = 3754,\n  [SMALL_STATE(964)] = 3846,\n  [SMALL_STATE(965)] = 3946,\n  [SMALL_STATE(966)] = 4058,\n  [SMALL_STATE(967)] = 4148,\n  [SMALL_STATE(968)] = 4232,\n  [SMALL_STATE(969)] = 4320,\n  [SMALL_STATE(970)] = 4432,\n  [SMALL_STATE(971)] = 4518,\n  [SMALL_STATE(972)] = 4630,\n  [SMALL_STATE(973)] = 4728,\n  [SMALL_STATE(974)] = 4840,\n  [SMALL_STATE(975)] = 4923,\n  [SMALL_STATE(976)] = 5018,\n  [SMALL_STATE(977)] = 5101,\n  [SMALL_STATE(978)] = 5186,\n  [SMALL_STATE(979)] = 5277,\n  [SMALL_STATE(980)] = 5358,\n  [SMALL_STATE(981)] = 5437,\n  [SMALL_STATE(982)] = 5528,\n  [SMALL_STATE(983)] = 5639,\n  [SMALL_STATE(984)] = 5722,\n  [SMALL_STATE(985)] = 5809,\n  [SMALL_STATE(986)] = 5890,\n  [SMALL_STATE(987)] = 6001,\n  [SMALL_STATE(988)] = 6102,\n  [SMALL_STATE(989)] = 6195,\n  [SMALL_STATE(990)] = 6286,\n  [SMALL_STATE(991)] = 6377,\n  [SMALL_STATE(992)] = 6468,\n  [SMALL_STATE(993)] = 6547,\n  [SMALL_STATE(994)] = 6634,\n  [SMALL_STATE(995)] = 6745,\n  [SMALL_STATE(996)] = 6836,\n  [SMALL_STATE(997)] = 6919,\n  [SMALL_STATE(998)] = 7004,\n  [SMALL_STATE(999)] = 7093,\n  [SMALL_STATE(1000)] = 7171,\n  [SMALL_STATE(1001)] = 7249,\n  [SMALL_STATE(1002)] = 7325,\n  [SMALL_STATE(1003)] = 7405,\n  [SMALL_STATE(1004)] = 7487,\n  [SMALL_STATE(1005)] = 7573,\n  [SMALL_STATE(1006)] = 7653,\n  [SMALL_STATE(1007)] = 7743,\n  [SMALL_STATE(1008)] = 7821,\n  [SMALL_STATE(1009)] = 7889,\n  [SMALL_STATE(1010)] = 7967,\n  [SMALL_STATE(1011)] = 8047,\n  [SMALL_STATE(1012)] = 8123,\n  [SMALL_STATE(1013)] = 8213,\n  [SMALL_STATE(1014)] = 8291,\n  [SMALL_STATE(1015)] = 8381,\n  [SMALL_STATE(1016)] = 8449,\n  [SMALL_STATE(1017)] = 8539,\n  [SMALL_STATE(1018)] = 8607,\n  [SMALL_STATE(1019)] = 8675,\n  [SMALL_STATE(1020)] = 8755,\n  [SMALL_STATE(1021)] = 8823,\n  [SMALL_STATE(1022)] = 8891,\n  [SMALL_STATE(1023)] = 8971,\n  [SMALL_STATE(1024)] = 9049,\n  [SMALL_STATE(1025)] = 9117,\n  [SMALL_STATE(1026)] = 9192,\n  [SMALL_STATE(1027)] = 9271,\n  [SMALL_STATE(1028)] = 9346,\n  [SMALL_STATE(1029)] = 9435,\n  [SMALL_STATE(1030)] = 9512,\n  [SMALL_STATE(1031)] = 9585,\n  [SMALL_STATE(1032)] = 9662,\n  [SMALL_STATE(1033)] = 9741,\n  [SMALL_STATE(1034)] = 9818,\n  [SMALL_STATE(1035)] = 9897,\n  [SMALL_STATE(1036)] = 9974,\n  [SMALL_STATE(1037)] = 10059,\n  [SMALL_STATE(1038)] = 10134,\n  [SMALL_STATE(1039)] = 10213,\n  [SMALL_STATE(1040)] = 10288,\n  [SMALL_STATE(1041)] = 10361,\n  [SMALL_STATE(1042)] = 10440,\n  [SMALL_STATE(1043)] = 10525,\n  [SMALL_STATE(1044)] = 10602,\n  [SMALL_STATE(1045)] = 10673,\n  [SMALL_STATE(1046)] = 10750,\n  [SMALL_STATE(1047)] = 10827,\n  [SMALL_STATE(1048)] = 10904,\n  [SMALL_STATE(1049)] = 10975,\n  [SMALL_STATE(1050)] = 11058,\n  [SMALL_STATE(1051)] = 11135,\n  [SMALL_STATE(1052)] = 11224,\n  [SMALL_STATE(1053)] = 11313,\n  [SMALL_STATE(1054)] = 11388,\n  [SMALL_STATE(1055)] = 11463,\n  [SMALL_STATE(1056)] = 11529,\n  [SMALL_STATE(1057)] = 11603,\n  [SMALL_STATE(1058)] = 11679,\n  [SMALL_STATE(1059)] = 11751,\n  [SMALL_STATE(1060)] = 11827,\n  [SMALL_STATE(1061)] = 11897,\n  [SMALL_STATE(1062)] = 11977,\n  [SMALL_STATE(1063)] = 12043,\n  [SMALL_STATE(1064)] = 12109,\n  [SMALL_STATE(1065)] = 12185,\n  [SMALL_STATE(1066)] = 12257,\n  [SMALL_STATE(1067)] = 12327,\n  [SMALL_STATE(1068)] = 12409,\n  [SMALL_STATE(1069)] = 12489,\n  [SMALL_STATE(1070)] = 12555,\n  [SMALL_STATE(1071)] = 12621,\n  [SMALL_STATE(1072)] = 12693,\n  [SMALL_STATE(1073)] = 12769,\n  [SMALL_STATE(1074)] = 12835,\n  [SMALL_STATE(1075)] = 12909,\n  [SMALL_STATE(1076)] = 12989,\n  [SMALL_STATE(1077)] = 13065,\n  [SMALL_STATE(1078)] = 13143,\n  [SMALL_STATE(1079)] = 13213,\n  [SMALL_STATE(1080)] = 13289,\n  [SMALL_STATE(1081)] = 13361,\n  [SMALL_STATE(1082)] = 13441,\n  [SMALL_STATE(1083)] = 13507,\n  [SMALL_STATE(1084)] = 13587,\n  [SMALL_STATE(1085)] = 13667,\n  [SMALL_STATE(1086)] = 13745,\n  [SMALL_STATE(1087)] = 13820,\n  [SMALL_STATE(1088)] = 13893,\n  [SMALL_STATE(1089)] = 13980,\n  [SMALL_STATE(1090)] = 14053,\n  [SMALL_STATE(1091)] = 14128,\n  [SMALL_STATE(1092)] = 14221,\n  [SMALL_STATE(1093)] = 14298,\n  [SMALL_STATE(1094)] = 14367,\n  [SMALL_STATE(1095)] = 14444,\n  [SMALL_STATE(1096)] = 14515,\n  [SMALL_STATE(1097)] = 14590,\n  [SMALL_STATE(1098)] = 14669,\n  [SMALL_STATE(1099)] = 14742,\n  [SMALL_STATE(1100)] = 14829,\n  [SMALL_STATE(1101)] = 14902,\n  [SMALL_STATE(1102)] = 14995,\n  [SMALL_STATE(1103)] = 15088,\n  [SMALL_STATE(1104)] = 15157,\n  [SMALL_STATE(1105)] = 15234,\n  [SMALL_STATE(1106)] = 15327,\n  [SMALL_STATE(1107)] = 15404,\n  [SMALL_STATE(1108)] = 15479,\n  [SMALL_STATE(1109)] = 15552,\n  [SMALL_STATE(1110)] = 15645,\n  [SMALL_STATE(1111)] = 15718,\n  [SMALL_STATE(1112)] = 15802,\n  [SMALL_STATE(1113)] = 15886,\n  [SMALL_STATE(1114)] = 15970,\n  [SMALL_STATE(1115)] = 16042,\n  [SMALL_STATE(1116)] = 16112,\n  [SMALL_STATE(1117)] = 16196,\n  [SMALL_STATE(1118)] = 16270,\n  [SMALL_STATE(1119)] = 16346,\n  [SMALL_STATE(1120)] = 16418,\n  [SMALL_STATE(1121)] = 16488,\n  [SMALL_STATE(1122)] = 16572,\n  [SMALL_STATE(1123)] = 16660,\n  [SMALL_STATE(1124)] = 16744,\n  [SMALL_STATE(1125)] = 16828,\n  [SMALL_STATE(1126)] = 16900,\n  [SMALL_STATE(1127)] = 16970,\n  [SMALL_STATE(1128)] = 17044,\n  [SMALL_STATE(1129)] = 17130,\n  [SMALL_STATE(1130)] = 17214,\n  [SMALL_STATE(1131)] = 17296,\n  [SMALL_STATE(1132)] = 17380,\n  [SMALL_STATE(1133)] = 17456,\n  [SMALL_STATE(1134)] = 17540,\n  [SMALL_STATE(1135)] = 17614,\n  [SMALL_STATE(1136)] = 17686,\n  [SMALL_STATE(1137)] = 17756,\n  [SMALL_STATE(1138)] = 17823,\n  [SMALL_STATE(1139)] = 17894,\n  [SMALL_STATE(1140)] = 17965,\n  [SMALL_STATE(1141)] = 18032,\n  [SMALL_STATE(1142)] = 18105,\n  [SMALL_STATE(1143)] = 18198,\n  [SMALL_STATE(1144)] = 18269,\n  [SMALL_STATE(1145)] = 18338,\n  [SMALL_STATE(1146)] = 18411,\n  [SMALL_STATE(1147)] = 18504,\n  [SMALL_STATE(1148)] = 18577,\n  [SMALL_STATE(1149)] = 18662,\n  [SMALL_STATE(1150)] = 18731,\n  [SMALL_STATE(1151)] = 18805,\n  [SMALL_STATE(1152)] = 18873,\n  [SMALL_STATE(1153)] = 18939,\n  [SMALL_STATE(1154)] = 19027,\n  [SMALL_STATE(1155)] = 19103,\n  [SMALL_STATE(1156)] = 19179,\n  [SMALL_STATE(1157)] = 19257,\n  [SMALL_STATE(1158)] = 19331,\n  [SMALL_STATE(1159)] = 19409,\n  [SMALL_STATE(1160)] = 19477,\n  [SMALL_STATE(1161)] = 19547,\n  [SMALL_STATE(1162)] = 19625,\n  [SMALL_STATE(1163)] = 19699,\n  [SMALL_STATE(1164)] = 19767,\n  [SMALL_STATE(1165)] = 19845,\n  [SMALL_STATE(1166)] = 19925,\n  [SMALL_STATE(1167)] = 19998,\n  [SMALL_STATE(1168)] = 20071,\n  [SMALL_STATE(1169)] = 20144,\n  [SMALL_STATE(1170)] = 20217,\n  [SMALL_STATE(1171)] = 20288,\n  [SMALL_STATE(1172)] = 20359,\n  [SMALL_STATE(1173)] = 20430,\n  [SMALL_STATE(1174)] = 20501,\n  [SMALL_STATE(1175)] = 20572,\n  [SMALL_STATE(1176)] = 20647,\n  [SMALL_STATE(1177)] = 20718,\n  [SMALL_STATE(1178)] = 20789,\n  [SMALL_STATE(1179)] = 20860,\n  [SMALL_STATE(1180)] = 20931,\n  [SMALL_STATE(1181)] = 21002,\n  [SMALL_STATE(1182)] = 21077,\n  [SMALL_STATE(1183)] = 21150,\n  [SMALL_STATE(1184)] = 21221,\n  [SMALL_STATE(1185)] = 21292,\n  [SMALL_STATE(1186)] = 21367,\n  [SMALL_STATE(1187)] = 21438,\n  [SMALL_STATE(1188)] = 21509,\n  [SMALL_STATE(1189)] = 21580,\n  [SMALL_STATE(1190)] = 21651,\n  [SMALL_STATE(1191)] = 21722,\n  [SMALL_STATE(1192)] = 21793,\n  [SMALL_STATE(1193)] = 21868,\n  [SMALL_STATE(1194)] = 21943,\n  [SMALL_STATE(1195)] = 22023,\n  [SMALL_STATE(1196)] = 22085,\n  [SMALL_STATE(1197)] = 22165,\n  [SMALL_STATE(1198)] = 22245,\n  [SMALL_STATE(1199)] = 22325,\n  [SMALL_STATE(1200)] = 22405,\n  [SMALL_STATE(1201)] = 22485,\n  [SMALL_STATE(1202)] = 22565,\n  [SMALL_STATE(1203)] = 22626,\n  [SMALL_STATE(1204)] = 22689,\n  [SMALL_STATE(1205)] = 22754,\n  [SMALL_STATE(1206)] = 22821,\n  [SMALL_STATE(1207)] = 22895,\n  [SMALL_STATE(1208)] = 22957,\n  [SMALL_STATE(1209)] = 23029,\n  [SMALL_STATE(1210)] = 23093,\n  [SMALL_STATE(1211)] = 23167,\n  [SMALL_STATE(1212)] = 23241,\n  [SMALL_STATE(1213)] = 23298,\n  [SMALL_STATE(1214)] = 23355,\n  [SMALL_STATE(1215)] = 23426,\n  [SMALL_STATE(1216)] = 23493,\n  [SMALL_STATE(1217)] = 23550,\n  [SMALL_STATE(1218)] = 23609,\n  [SMALL_STATE(1219)] = 23666,\n  [SMALL_STATE(1220)] = 23737,\n  [SMALL_STATE(1221)] = 23794,\n  [SMALL_STATE(1222)] = 23865,\n  [SMALL_STATE(1223)] = 23934,\n  [SMALL_STATE(1224)] = 24005,\n  [SMALL_STATE(1225)] = 24062,\n  [SMALL_STATE(1226)] = 24121,\n  [SMALL_STATE(1227)] = 24178,\n  [SMALL_STATE(1228)] = 24235,\n  [SMALL_STATE(1229)] = 24292,\n  [SMALL_STATE(1230)] = 24363,\n  [SMALL_STATE(1231)] = 24420,\n  [SMALL_STATE(1232)] = 24477,\n  [SMALL_STATE(1233)] = 24534,\n  [SMALL_STATE(1234)] = 24593,\n  [SMALL_STATE(1235)] = 24650,\n  [SMALL_STATE(1236)] = 24707,\n  [SMALL_STATE(1237)] = 24764,\n  [SMALL_STATE(1238)] = 24840,\n  [SMALL_STATE(1239)] = 24896,\n  [SMALL_STATE(1240)] = 24952,\n  [SMALL_STATE(1241)] = 25010,\n  [SMALL_STATE(1242)] = 25078,\n  [SMALL_STATE(1243)] = 25146,\n  [SMALL_STATE(1244)] = 25214,\n  [SMALL_STATE(1245)] = 25282,\n  [SMALL_STATE(1246)] = 25356,\n  [SMALL_STATE(1247)] = 25414,\n  [SMALL_STATE(1248)] = 25482,\n  [SMALL_STATE(1249)] = 25537,\n  [SMALL_STATE(1250)] = 25608,\n  [SMALL_STATE(1251)] = 25663,\n  [SMALL_STATE(1252)] = 25718,\n  [SMALL_STATE(1253)] = 25773,\n  [SMALL_STATE(1254)] = 25828,\n  [SMALL_STATE(1255)] = 25883,\n  [SMALL_STATE(1256)] = 25938,\n  [SMALL_STATE(1257)] = 25993,\n  [SMALL_STATE(1258)] = 26060,\n  [SMALL_STATE(1259)] = 26115,\n  [SMALL_STATE(1260)] = 26184,\n  [SMALL_STATE(1261)] = 26249,\n  [SMALL_STATE(1262)] = 26315,\n  [SMALL_STATE(1263)] = 26387,\n  [SMALL_STATE(1264)] = 26501,\n  [SMALL_STATE(1265)] = 26615,\n  [SMALL_STATE(1266)] = 26681,\n  [SMALL_STATE(1267)] = 26741,\n  [SMALL_STATE(1268)] = 26799,\n  [SMALL_STATE(1269)] = 26879,\n  [SMALL_STATE(1270)] = 26943,\n  [SMALL_STATE(1271)] = 27005,\n  [SMALL_STATE(1272)] = 27071,\n  [SMALL_STATE(1273)] = 27185,\n  [SMALL_STATE(1274)] = 27251,\n  [SMALL_STATE(1275)] = 27313,\n  [SMALL_STATE(1276)] = 27367,\n  [SMALL_STATE(1277)] = 27441,\n  [SMALL_STATE(1278)] = 27555,\n  [SMALL_STATE(1279)] = 27617,\n  [SMALL_STATE(1280)] = 27679,\n  [SMALL_STATE(1281)] = 27733,\n  [SMALL_STATE(1282)] = 27815,\n  [SMALL_STATE(1283)] = 27877,\n  [SMALL_STATE(1284)] = 27941,\n  [SMALL_STATE(1285)] = 28007,\n  [SMALL_STATE(1286)] = 28069,\n  [SMALL_STATE(1287)] = 28139,\n  [SMALL_STATE(1288)] = 28229,\n  [SMALL_STATE(1289)] = 28291,\n  [SMALL_STATE(1290)] = 28371,\n  [SMALL_STATE(1291)] = 28469,\n  [SMALL_STATE(1292)] = 28573,\n  [SMALL_STATE(1293)] = 28635,\n  [SMALL_STATE(1294)] = 28697,\n  [SMALL_STATE(1295)] = 28811,\n  [SMALL_STATE(1296)] = 28907,\n  [SMALL_STATE(1297)] = 28969,\n  [SMALL_STATE(1298)] = 29083,\n  [SMALL_STATE(1299)] = 29177,\n  [SMALL_STATE(1300)] = 29259,\n  [SMALL_STATE(1301)] = 29323,\n  [SMALL_STATE(1302)] = 29385,\n  [SMALL_STATE(1303)] = 29447,\n  [SMALL_STATE(1304)] = 29509,\n  [SMALL_STATE(1305)] = 29571,\n  [SMALL_STATE(1306)] = 29673,\n  [SMALL_STATE(1307)] = 29787,\n  [SMALL_STATE(1308)] = 29887,\n  [SMALL_STATE(1309)] = 29951,\n  [SMALL_STATE(1310)] = 30015,\n  [SMALL_STATE(1311)] = 30077,\n  [SMALL_STATE(1312)] = 30143,\n  [SMALL_STATE(1313)] = 30205,\n  [SMALL_STATE(1314)] = 30291,\n  [SMALL_STATE(1315)] = 30405,\n  [SMALL_STATE(1316)] = 30467,\n  [SMALL_STATE(1317)] = 30583,\n  [SMALL_STATE(1318)] = 30697,\n  [SMALL_STATE(1319)] = 30763,\n  [SMALL_STATE(1320)] = 30877,\n  [SMALL_STATE(1321)] = 30939,\n  [SMALL_STATE(1322)] = 31001,\n  [SMALL_STATE(1323)] = 31067,\n  [SMALL_STATE(1324)] = 31129,\n  [SMALL_STATE(1325)] = 31243,\n  [SMALL_STATE(1326)] = 31319,\n  [SMALL_STATE(1327)] = 31433,\n  [SMALL_STATE(1328)] = 31486,\n  [SMALL_STATE(1329)] = 31545,\n  [SMALL_STATE(1330)] = 31616,\n  [SMALL_STATE(1331)] = 31675,\n  [SMALL_STATE(1332)] = 31786,\n  [SMALL_STATE(1333)] = 31865,\n  [SMALL_STATE(1334)] = 31938,\n  [SMALL_STATE(1335)] = 32011,\n  [SMALL_STATE(1336)] = 32128,\n  [SMALL_STATE(1337)] = 32187,\n  [SMALL_STATE(1338)] = 32304,\n  [SMALL_STATE(1339)] = 32421,\n  [SMALL_STATE(1340)] = 32536,\n  [SMALL_STATE(1341)] = 32615,\n  [SMALL_STATE(1342)] = 32726,\n  [SMALL_STATE(1343)] = 32785,\n  [SMALL_STATE(1344)] = 32854,\n  [SMALL_STATE(1345)] = 32925,\n  [SMALL_STATE(1346)] = 32990,\n  [SMALL_STATE(1347)] = 33101,\n  [SMALL_STATE(1348)] = 33212,\n  [SMALL_STATE(1349)] = 33323,\n  [SMALL_STATE(1350)] = 33434,\n  [SMALL_STATE(1351)] = 33545,\n  [SMALL_STATE(1352)] = 33656,\n  [SMALL_STATE(1353)] = 33767,\n  [SMALL_STATE(1354)] = 33878,\n  [SMALL_STATE(1355)] = 33989,\n  [SMALL_STATE(1356)] = 34100,\n  [SMALL_STATE(1357)] = 34211,\n  [SMALL_STATE(1358)] = 34314,\n  [SMALL_STATE(1359)] = 34403,\n  [SMALL_STATE(1360)] = 34484,\n  [SMALL_STATE(1361)] = 34563,\n  [SMALL_STATE(1362)] = 34660,\n  [SMALL_STATE(1363)] = 34755,\n  [SMALL_STATE(1364)] = 34848,\n  [SMALL_STATE(1365)] = 34959,\n  [SMALL_STATE(1366)] = 35040,\n  [SMALL_STATE(1367)] = 35141,\n  [SMALL_STATE(1368)] = 35240,\n  [SMALL_STATE(1369)] = 35351,\n  [SMALL_STATE(1370)] = 35436,\n  [SMALL_STATE(1371)] = 35551,\n  [SMALL_STATE(1372)] = 35626,\n  [SMALL_STATE(1373)] = 35687,\n  [SMALL_STATE(1374)] = 35798,\n  [SMALL_STATE(1375)] = 35909,\n  [SMALL_STATE(1376)] = 36020,\n  [SMALL_STATE(1377)] = 36137,\n  [SMALL_STATE(1378)] = 36254,\n  [SMALL_STATE(1379)] = 36365,\n  [SMALL_STATE(1380)] = 36476,\n  [SMALL_STATE(1381)] = 36541,\n  [SMALL_STATE(1382)] = 36652,\n  [SMALL_STATE(1383)] = 36763,\n  [SMALL_STATE(1384)] = 36874,\n  [SMALL_STATE(1385)] = 36991,\n  [SMALL_STATE(1386)] = 37066,\n  [SMALL_STATE(1387)] = 37151,\n  [SMALL_STATE(1388)] = 37262,\n  [SMALL_STATE(1389)] = 37379,\n  [SMALL_STATE(1390)] = 37478,\n  [SMALL_STATE(1391)] = 37591,\n  [SMALL_STATE(1392)] = 37692,\n  [SMALL_STATE(1393)] = 37751,\n  [SMALL_STATE(1394)] = 37808,\n  [SMALL_STATE(1395)] = 37865,\n  [SMALL_STATE(1396)] = 37946,\n  [SMALL_STATE(1397)] = 37999,\n  [SMALL_STATE(1398)] = 38054,\n  [SMALL_STATE(1399)] = 38133,\n  [SMALL_STATE(1400)] = 38228,\n  [SMALL_STATE(1401)] = 38283,\n  [SMALL_STATE(1402)] = 38398,\n  [SMALL_STATE(1403)] = 38457,\n  [SMALL_STATE(1404)] = 38560,\n  [SMALL_STATE(1405)] = 38653,\n  [SMALL_STATE(1406)] = 38734,\n  [SMALL_STATE(1407)] = 38823,\n  [SMALL_STATE(1408)] = 38880,\n  [SMALL_STATE(1409)] = 38995,\n  [SMALL_STATE(1410)] = 39092,\n  [SMALL_STATE(1411)] = 39203,\n  [SMALL_STATE(1412)] = 39264,\n  [SMALL_STATE(1413)] = 39325,\n  [SMALL_STATE(1414)] = 39377,\n  [SMALL_STATE(1415)] = 39429,\n  [SMALL_STATE(1416)] = 39487,\n  [SMALL_STATE(1417)] = 39541,\n  [SMALL_STATE(1418)] = 39593,\n  [SMALL_STATE(1419)] = 39645,\n  [SMALL_STATE(1420)] = 39697,\n  [SMALL_STATE(1421)] = 39749,\n  [SMALL_STATE(1422)] = 39801,\n  [SMALL_STATE(1423)] = 39855,\n  [SMALL_STATE(1424)] = 39907,\n  [SMALL_STATE(1425)] = 39959,\n  [SMALL_STATE(1426)] = 40011,\n  [SMALL_STATE(1427)] = 40063,\n  [SMALL_STATE(1428)] = 40117,\n  [SMALL_STATE(1429)] = 40169,\n  [SMALL_STATE(1430)] = 40227,\n  [SMALL_STATE(1431)] = 40285,\n  [SMALL_STATE(1432)] = 40337,\n  [SMALL_STATE(1433)] = 40389,\n  [SMALL_STATE(1434)] = 40441,\n  [SMALL_STATE(1435)] = 40495,\n  [SMALL_STATE(1436)] = 40547,\n  [SMALL_STATE(1437)] = 40599,\n  [SMALL_STATE(1438)] = 40659,\n  [SMALL_STATE(1439)] = 40715,\n  [SMALL_STATE(1440)] = 40767,\n  [SMALL_STATE(1441)] = 40821,\n  [SMALL_STATE(1442)] = 40933,\n  [SMALL_STATE(1443)] = 40985,\n  [SMALL_STATE(1444)] = 41037,\n  [SMALL_STATE(1445)] = 41091,\n  [SMALL_STATE(1446)] = 41143,\n  [SMALL_STATE(1447)] = 41195,\n  [SMALL_STATE(1448)] = 41253,\n  [SMALL_STATE(1449)] = 41305,\n  [SMALL_STATE(1450)] = 41357,\n  [SMALL_STATE(1451)] = 41411,\n  [SMALL_STATE(1452)] = 41463,\n  [SMALL_STATE(1453)] = 41515,\n  [SMALL_STATE(1454)] = 41567,\n  [SMALL_STATE(1455)] = 41619,\n  [SMALL_STATE(1456)] = 41671,\n  [SMALL_STATE(1457)] = 41727,\n  [SMALL_STATE(1458)] = 41787,\n  [SMALL_STATE(1459)] = 41847,\n  [SMALL_STATE(1460)] = 41899,\n  [SMALL_STATE(1461)] = 41951,\n  [SMALL_STATE(1462)] = 42003,\n  [SMALL_STATE(1463)] = 42117,\n  [SMALL_STATE(1464)] = 42173,\n  [SMALL_STATE(1465)] = 42225,\n  [SMALL_STATE(1466)] = 42281,\n  [SMALL_STATE(1467)] = 42333,\n  [SMALL_STATE(1468)] = 42389,\n  [SMALL_STATE(1469)] = 42445,\n  [SMALL_STATE(1470)] = 42497,\n  [SMALL_STATE(1471)] = 42549,\n  [SMALL_STATE(1472)] = 42661,\n  [SMALL_STATE(1473)] = 42713,\n  [SMALL_STATE(1474)] = 42827,\n  [SMALL_STATE(1475)] = 42879,\n  [SMALL_STATE(1476)] = 42931,\n  [SMALL_STATE(1477)] = 42983,\n  [SMALL_STATE(1478)] = 43097,\n  [SMALL_STATE(1479)] = 43211,\n  [SMALL_STATE(1480)] = 43325,\n  [SMALL_STATE(1481)] = 43439,\n  [SMALL_STATE(1482)] = 43491,\n  [SMALL_STATE(1483)] = 43601,\n  [SMALL_STATE(1484)] = 43653,\n  [SMALL_STATE(1485)] = 43705,\n  [SMALL_STATE(1486)] = 43757,\n  [SMALL_STATE(1487)] = 43809,\n  [SMALL_STATE(1488)] = 43861,\n  [SMALL_STATE(1489)] = 43913,\n  [SMALL_STATE(1490)] = 43965,\n  [SMALL_STATE(1491)] = 44017,\n  [SMALL_STATE(1492)] = 44069,\n  [SMALL_STATE(1493)] = 44121,\n  [SMALL_STATE(1494)] = 44175,\n  [SMALL_STATE(1495)] = 44229,\n  [SMALL_STATE(1496)] = 44281,\n  [SMALL_STATE(1497)] = 44333,\n  [SMALL_STATE(1498)] = 44393,\n  [SMALL_STATE(1499)] = 44445,\n  [SMALL_STATE(1500)] = 44559,\n  [SMALL_STATE(1501)] = 44619,\n  [SMALL_STATE(1502)] = 44671,\n  [SMALL_STATE(1503)] = 44781,\n  [SMALL_STATE(1504)] = 44833,\n  [SMALL_STATE(1505)] = 44891,\n  [SMALL_STATE(1506)] = 44943,\n  [SMALL_STATE(1507)] = 44995,\n  [SMALL_STATE(1508)] = 45053,\n  [SMALL_STATE(1509)] = 45113,\n  [SMALL_STATE(1510)] = 45165,\n  [SMALL_STATE(1511)] = 45217,\n  [SMALL_STATE(1512)] = 45269,\n  [SMALL_STATE(1513)] = 45321,\n  [SMALL_STATE(1514)] = 45373,\n  [SMALL_STATE(1515)] = 45425,\n  [SMALL_STATE(1516)] = 45477,\n  [SMALL_STATE(1517)] = 45529,\n  [SMALL_STATE(1518)] = 45581,\n  [SMALL_STATE(1519)] = 45633,\n  [SMALL_STATE(1520)] = 45685,\n  [SMALL_STATE(1521)] = 45745,\n  [SMALL_STATE(1522)] = 45797,\n  [SMALL_STATE(1523)] = 45849,\n  [SMALL_STATE(1524)] = 45901,\n  [SMALL_STATE(1525)] = 45953,\n  [SMALL_STATE(1526)] = 46011,\n  [SMALL_STATE(1527)] = 46063,\n  [SMALL_STATE(1528)] = 46115,\n  [SMALL_STATE(1529)] = 46229,\n  [SMALL_STATE(1530)] = 46341,\n  [SMALL_STATE(1531)] = 46397,\n  [SMALL_STATE(1532)] = 46449,\n  [SMALL_STATE(1533)] = 46501,\n  [SMALL_STATE(1534)] = 46559,\n  [SMALL_STATE(1535)] = 46617,\n  [SMALL_STATE(1536)] = 46669,\n  [SMALL_STATE(1537)] = 46729,\n  [SMALL_STATE(1538)] = 46789,\n  [SMALL_STATE(1539)] = 46847,\n  [SMALL_STATE(1540)] = 46899,\n  [SMALL_STATE(1541)] = 46951,\n  [SMALL_STATE(1542)] = 47003,\n  [SMALL_STATE(1543)] = 47055,\n  [SMALL_STATE(1544)] = 47169,\n  [SMALL_STATE(1545)] = 47221,\n  [SMALL_STATE(1546)] = 47275,\n  [SMALL_STATE(1547)] = 47327,\n  [SMALL_STATE(1548)] = 47439,\n  [SMALL_STATE(1549)] = 47551,\n  [SMALL_STATE(1550)] = 47603,\n  [SMALL_STATE(1551)] = 47655,\n  [SMALL_STATE(1552)] = 47711,\n  [SMALL_STATE(1553)] = 47767,\n  [SMALL_STATE(1554)] = 47821,\n  [SMALL_STATE(1555)] = 47881,\n  [SMALL_STATE(1556)] = 47995,\n  [SMALL_STATE(1557)] = 48047,\n  [SMALL_STATE(1558)] = 48157,\n  [SMALL_STATE(1559)] = 48219,\n  [SMALL_STATE(1560)] = 48281,\n  [SMALL_STATE(1561)] = 48391,\n  [SMALL_STATE(1562)] = 48449,\n  [SMALL_STATE(1563)] = 48507,\n  [SMALL_STATE(1564)] = 48561,\n  [SMALL_STATE(1565)] = 48618,\n  [SMALL_STATE(1566)] = 48689,\n  [SMALL_STATE(1567)] = 48740,\n  [SMALL_STATE(1568)] = 48793,\n  [SMALL_STATE(1569)] = 48846,\n  [SMALL_STATE(1570)] = 48897,\n  [SMALL_STATE(1571)] = 48948,\n  [SMALL_STATE(1572)] = 49059,\n  [SMALL_STATE(1573)] = 49110,\n  [SMALL_STATE(1574)] = 49179,\n  [SMALL_STATE(1575)] = 49230,\n  [SMALL_STATE(1576)] = 49287,\n  [SMALL_STATE(1577)] = 49398,\n  [SMALL_STATE(1578)] = 49449,\n  [SMALL_STATE(1579)] = 49500,\n  [SMALL_STATE(1580)] = 49551,\n  [SMALL_STATE(1581)] = 49602,\n  [SMALL_STATE(1582)] = 49665,\n  [SMALL_STATE(1583)] = 49776,\n  [SMALL_STATE(1584)] = 49887,\n  [SMALL_STATE(1585)] = 49940,\n  [SMALL_STATE(1586)] = 50049,\n  [SMALL_STATE(1587)] = 50160,\n  [SMALL_STATE(1588)] = 50269,\n  [SMALL_STATE(1589)] = 50380,\n  [SMALL_STATE(1590)] = 50431,\n  [SMALL_STATE(1591)] = 50542,\n  [SMALL_STATE(1592)] = 50615,\n  [SMALL_STATE(1593)] = 50668,\n  [SMALL_STATE(1594)] = 50719,\n  [SMALL_STATE(1595)] = 50770,\n  [SMALL_STATE(1596)] = 50821,\n  [SMALL_STATE(1597)] = 50872,\n  [SMALL_STATE(1598)] = 50949,\n  [SMALL_STATE(1599)] = 51060,\n  [SMALL_STATE(1600)] = 51143,\n  [SMALL_STATE(1601)] = 51240,\n  [SMALL_STATE(1602)] = 51339,\n  [SMALL_STATE(1603)] = 51418,\n  [SMALL_STATE(1604)] = 51469,\n  [SMALL_STATE(1605)] = 51526,\n  [SMALL_STATE(1606)] = 51617,\n  [SMALL_STATE(1607)] = 51710,\n  [SMALL_STATE(1608)] = 51781,\n  [SMALL_STATE(1609)] = 51844,\n  [SMALL_STATE(1610)] = 51895,\n  [SMALL_STATE(1611)] = 51960,\n  [SMALL_STATE(1612)] = 52071,\n  [SMALL_STATE(1613)] = 52136,\n  [SMALL_STATE(1614)] = 52231,\n  [SMALL_STATE(1615)] = 52282,\n  [SMALL_STATE(1616)] = 52359,\n  [SMALL_STATE(1617)] = 52416,\n  [SMALL_STATE(1618)] = 52471,\n  [SMALL_STATE(1619)] = 52528,\n  [SMALL_STATE(1620)] = 52607,\n  [SMALL_STATE(1621)] = 52694,\n  [SMALL_STATE(1622)] = 52745,\n  [SMALL_STATE(1623)] = 52802,\n  [SMALL_STATE(1624)] = 52859,\n  [SMALL_STATE(1625)] = 52970,\n  [SMALL_STATE(1626)] = 53071,\n  [SMALL_STATE(1627)] = 53182,\n  [SMALL_STATE(1628)] = 53293,\n  [SMALL_STATE(1629)] = 53356,\n  [SMALL_STATE(1630)] = 53409,\n  [SMALL_STATE(1631)] = 53520,\n  [SMALL_STATE(1632)] = 53631,\n  [SMALL_STATE(1633)] = 53682,\n  [SMALL_STATE(1634)] = 53793,\n  [SMALL_STATE(1635)] = 53844,\n  [SMALL_STATE(1636)] = 53955,\n  [SMALL_STATE(1637)] = 54006,\n  [SMALL_STATE(1638)] = 54057,\n  [SMALL_STATE(1639)] = 54168,\n  [SMALL_STATE(1640)] = 54219,\n  [SMALL_STATE(1641)] = 54270,\n  [SMALL_STATE(1642)] = 54381,\n  [SMALL_STATE(1643)] = 54444,\n  [SMALL_STATE(1644)] = 54499,\n  [SMALL_STATE(1645)] = 54562,\n  [SMALL_STATE(1646)] = 54619,\n  [SMALL_STATE(1647)] = 54730,\n  [SMALL_STATE(1648)] = 54787,\n  [SMALL_STATE(1649)] = 54840,\n  [SMALL_STATE(1650)] = 54897,\n  [SMALL_STATE(1651)] = 54954,\n  [SMALL_STATE(1652)] = 55019,\n  [SMALL_STATE(1653)] = 55084,\n  [SMALL_STATE(1654)] = 55143,\n  [SMALL_STATE(1655)] = 55202,\n  [SMALL_STATE(1656)] = 55253,\n  [SMALL_STATE(1657)] = 55306,\n  [SMALL_STATE(1658)] = 55357,\n  [SMALL_STATE(1659)] = 55410,\n  [SMALL_STATE(1660)] = 55461,\n  [SMALL_STATE(1661)] = 55512,\n  [SMALL_STATE(1662)] = 55563,\n  [SMALL_STATE(1663)] = 55620,\n  [SMALL_STATE(1664)] = 55677,\n  [SMALL_STATE(1665)] = 55728,\n  [SMALL_STATE(1666)] = 55781,\n  [SMALL_STATE(1667)] = 55834,\n  [SMALL_STATE(1668)] = 55885,\n  [SMALL_STATE(1669)] = 55936,\n  [SMALL_STATE(1670)] = 56047,\n  [SMALL_STATE(1671)] = 56158,\n  [SMALL_STATE(1672)] = 56217,\n  [SMALL_STATE(1673)] = 56270,\n  [SMALL_STATE(1674)] = 56333,\n  [SMALL_STATE(1675)] = 56442,\n  [SMALL_STATE(1676)] = 56551,\n  [SMALL_STATE(1677)] = 56602,\n  [SMALL_STATE(1678)] = 56653,\n  [SMALL_STATE(1679)] = 56704,\n  [SMALL_STATE(1680)] = 56759,\n  [SMALL_STATE(1681)] = 56868,\n  [SMALL_STATE(1682)] = 56919,\n  [SMALL_STATE(1683)] = 56988,\n  [SMALL_STATE(1684)] = 57039,\n  [SMALL_STATE(1685)] = 57090,\n  [SMALL_STATE(1686)] = 57199,\n  [SMALL_STATE(1687)] = 57308,\n  [SMALL_STATE(1688)] = 57359,\n  [SMALL_STATE(1689)] = 57410,\n  [SMALL_STATE(1690)] = 57461,\n  [SMALL_STATE(1691)] = 57538,\n  [SMALL_STATE(1692)] = 57647,\n  [SMALL_STATE(1693)] = 57702,\n  [SMALL_STATE(1694)] = 57813,\n  [SMALL_STATE(1695)] = 57922,\n  [SMALL_STATE(1696)] = 57973,\n  [SMALL_STATE(1697)] = 58082,\n  [SMALL_STATE(1698)] = 58139,\n  [SMALL_STATE(1699)] = 58212,\n  [SMALL_STATE(1700)] = 58263,\n  [SMALL_STATE(1701)] = 58314,\n  [SMALL_STATE(1702)] = 58365,\n  [SMALL_STATE(1703)] = 58416,\n  [SMALL_STATE(1704)] = 58473,\n  [SMALL_STATE(1705)] = 58524,\n  [SMALL_STATE(1706)] = 58575,\n  [SMALL_STATE(1707)] = 58626,\n  [SMALL_STATE(1708)] = 58677,\n  [SMALL_STATE(1709)] = 58728,\n  [SMALL_STATE(1710)] = 58779,\n  [SMALL_STATE(1711)] = 58830,\n  [SMALL_STATE(1712)] = 58893,\n  [SMALL_STATE(1713)] = 58976,\n  [SMALL_STATE(1714)] = 59027,\n  [SMALL_STATE(1715)] = 59080,\n  [SMALL_STATE(1716)] = 59131,\n  [SMALL_STATE(1717)] = 59182,\n  [SMALL_STATE(1718)] = 59233,\n  [SMALL_STATE(1719)] = 59284,\n  [SMALL_STATE(1720)] = 59335,\n  [SMALL_STATE(1721)] = 59386,\n  [SMALL_STATE(1722)] = 59497,\n  [SMALL_STATE(1723)] = 59560,\n  [SMALL_STATE(1724)] = 59611,\n  [SMALL_STATE(1725)] = 59662,\n  [SMALL_STATE(1726)] = 59713,\n  [SMALL_STATE(1727)] = 59764,\n  [SMALL_STATE(1728)] = 59861,\n  [SMALL_STATE(1729)] = 59912,\n  [SMALL_STATE(1730)] = 59963,\n  [SMALL_STATE(1731)] = 60014,\n  [SMALL_STATE(1732)] = 60125,\n  [SMALL_STATE(1733)] = 60176,\n  [SMALL_STATE(1734)] = 60227,\n  [SMALL_STATE(1735)] = 60278,\n  [SMALL_STATE(1736)] = 60329,\n  [SMALL_STATE(1737)] = 60380,\n  [SMALL_STATE(1738)] = 60431,\n  [SMALL_STATE(1739)] = 60482,\n  [SMALL_STATE(1740)] = 60533,\n  [SMALL_STATE(1741)] = 60584,\n  [SMALL_STATE(1742)] = 60635,\n  [SMALL_STATE(1743)] = 60686,\n  [SMALL_STATE(1744)] = 60737,\n  [SMALL_STATE(1745)] = 60788,\n  [SMALL_STATE(1746)] = 60899,\n  [SMALL_STATE(1747)] = 60998,\n  [SMALL_STATE(1748)] = 61077,\n  [SMALL_STATE(1749)] = 61128,\n  [SMALL_STATE(1750)] = 61183,\n  [SMALL_STATE(1751)] = 61234,\n  [SMALL_STATE(1752)] = 61325,\n  [SMALL_STATE(1753)] = 61380,\n  [SMALL_STATE(1754)] = 61437,\n  [SMALL_STATE(1755)] = 61530,\n  [SMALL_STATE(1756)] = 61581,\n  [SMALL_STATE(1757)] = 61632,\n  [SMALL_STATE(1758)] = 61727,\n  [SMALL_STATE(1759)] = 61804,\n  [SMALL_STATE(1760)] = 61863,\n  [SMALL_STATE(1761)] = 61974,\n  [SMALL_STATE(1762)] = 62025,\n  [SMALL_STATE(1763)] = 62078,\n  [SMALL_STATE(1764)] = 62157,\n  [SMALL_STATE(1765)] = 62266,\n  [SMALL_STATE(1766)] = 62323,\n  [SMALL_STATE(1767)] = 62374,\n  [SMALL_STATE(1768)] = 62429,\n  [SMALL_STATE(1769)] = 62480,\n  [SMALL_STATE(1770)] = 62531,\n  [SMALL_STATE(1771)] = 62584,\n  [SMALL_STATE(1772)] = 62635,\n  [SMALL_STATE(1773)] = 62722,\n  [SMALL_STATE(1774)] = 62823,\n  [SMALL_STATE(1775)] = 62874,\n  [SMALL_STATE(1776)] = 62925,\n  [SMALL_STATE(1777)] = 62976,\n  [SMALL_STATE(1778)] = 63027,\n  [SMALL_STATE(1779)] = 63078,\n  [SMALL_STATE(1780)] = 63129,\n  [SMALL_STATE(1781)] = 63180,\n  [SMALL_STATE(1782)] = 63239,\n  [SMALL_STATE(1783)] = 63290,\n  [SMALL_STATE(1784)] = 63341,\n  [SMALL_STATE(1785)] = 63452,\n  [SMALL_STATE(1786)] = 63561,\n  [SMALL_STATE(1787)] = 63612,\n  [SMALL_STATE(1788)] = 63721,\n  [SMALL_STATE(1789)] = 63830,\n  [SMALL_STATE(1790)] = 63893,\n  [SMALL_STATE(1791)] = 63944,\n  [SMALL_STATE(1792)] = 63995,\n  [SMALL_STATE(1793)] = 64046,\n  [SMALL_STATE(1794)] = 64097,\n  [SMALL_STATE(1795)] = 64148,\n  [SMALL_STATE(1796)] = 64199,\n  [SMALL_STATE(1797)] = 64250,\n  [SMALL_STATE(1798)] = 64301,\n  [SMALL_STATE(1799)] = 64352,\n  [SMALL_STATE(1800)] = 64403,\n  [SMALL_STATE(1801)] = 64454,\n  [SMALL_STATE(1802)] = 64505,\n  [SMALL_STATE(1803)] = 64556,\n  [SMALL_STATE(1804)] = 64607,\n  [SMALL_STATE(1805)] = 64658,\n  [SMALL_STATE(1806)] = 64709,\n  [SMALL_STATE(1807)] = 64760,\n  [SMALL_STATE(1808)] = 64811,\n  [SMALL_STATE(1809)] = 64862,\n  [SMALL_STATE(1810)] = 64913,\n  [SMALL_STATE(1811)] = 64964,\n  [SMALL_STATE(1812)] = 65015,\n  [SMALL_STATE(1813)] = 65124,\n  [SMALL_STATE(1814)] = 65175,\n  [SMALL_STATE(1815)] = 65226,\n  [SMALL_STATE(1816)] = 65335,\n  [SMALL_STATE(1817)] = 65386,\n  [SMALL_STATE(1818)] = 65437,\n  [SMALL_STATE(1819)] = 65494,\n  [SMALL_STATE(1820)] = 65545,\n  [SMALL_STATE(1821)] = 65653,\n  [SMALL_STATE(1822)] = 65711,\n  [SMALL_STATE(1823)] = 65819,\n  [SMALL_STATE(1824)] = 65869,\n  [SMALL_STATE(1825)] = 65919,\n  [SMALL_STATE(1826)] = 66027,\n  [SMALL_STATE(1827)] = 66135,\n  [SMALL_STATE(1828)] = 66187,\n  [SMALL_STATE(1829)] = 66237,\n  [SMALL_STATE(1830)] = 66291,\n  [SMALL_STATE(1831)] = 66341,\n  [SMALL_STATE(1832)] = 66391,\n  [SMALL_STATE(1833)] = 66445,\n  [SMALL_STATE(1834)] = 66553,\n  [SMALL_STATE(1835)] = 66603,\n  [SMALL_STATE(1836)] = 66653,\n  [SMALL_STATE(1837)] = 66703,\n  [SMALL_STATE(1838)] = 66765,\n  [SMALL_STATE(1839)] = 66815,\n  [SMALL_STATE(1840)] = 66873,\n  [SMALL_STATE(1841)] = 66923,\n  [SMALL_STATE(1842)] = 66973,\n  [SMALL_STATE(1843)] = 67023,\n  [SMALL_STATE(1844)] = 67073,\n  [SMALL_STATE(1845)] = 67135,\n  [SMALL_STATE(1846)] = 67187,\n  [SMALL_STATE(1847)] = 67295,\n  [SMALL_STATE(1848)] = 67345,\n  [SMALL_STATE(1849)] = 67395,\n  [SMALL_STATE(1850)] = 67503,\n  [SMALL_STATE(1851)] = 67611,\n  [SMALL_STATE(1852)] = 67661,\n  [SMALL_STATE(1853)] = 67769,\n  [SMALL_STATE(1854)] = 67825,\n  [SMALL_STATE(1855)] = 67875,\n  [SMALL_STATE(1856)] = 67927,\n  [SMALL_STATE(1857)] = 68037,\n  [SMALL_STATE(1858)] = 68087,\n  [SMALL_STATE(1859)] = 68155,\n  [SMALL_STATE(1860)] = 68205,\n  [SMALL_STATE(1861)] = 68255,\n  [SMALL_STATE(1862)] = 68305,\n  [SMALL_STATE(1863)] = 68413,\n  [SMALL_STATE(1864)] = 68463,\n  [SMALL_STATE(1865)] = 68517,\n  [SMALL_STATE(1866)] = 68573,\n  [SMALL_STATE(1867)] = 68623,\n  [SMALL_STATE(1868)] = 68673,\n  [SMALL_STATE(1869)] = 68725,\n  [SMALL_STATE(1870)] = 68775,\n  [SMALL_STATE(1871)] = 68825,\n  [SMALL_STATE(1872)] = 68875,\n  [SMALL_STATE(1873)] = 68947,\n  [SMALL_STATE(1874)] = 68997,\n  [SMALL_STATE(1875)] = 69051,\n  [SMALL_STATE(1876)] = 69101,\n  [SMALL_STATE(1877)] = 69159,\n  [SMALL_STATE(1878)] = 69217,\n  [SMALL_STATE(1879)] = 69267,\n  [SMALL_STATE(1880)] = 69317,\n  [SMALL_STATE(1881)] = 69367,\n  [SMALL_STATE(1882)] = 69475,\n  [SMALL_STATE(1883)] = 69551,\n  [SMALL_STATE(1884)] = 69633,\n  [SMALL_STATE(1885)] = 69741,\n  [SMALL_STATE(1886)] = 69849,\n  [SMALL_STATE(1887)] = 69903,\n  [SMALL_STATE(1888)] = 69953,\n  [SMALL_STATE(1889)] = 70043,\n  [SMALL_STATE(1890)] = 70151,\n  [SMALL_STATE(1891)] = 70247,\n  [SMALL_STATE(1892)] = 70301,\n  [SMALL_STATE(1893)] = 70399,\n  [SMALL_STATE(1894)] = 70455,\n  [SMALL_STATE(1895)] = 70525,\n  [SMALL_STATE(1896)] = 70575,\n  [SMALL_STATE(1897)] = 70629,\n  [SMALL_STATE(1898)] = 70707,\n  [SMALL_STATE(1899)] = 70757,\n  [SMALL_STATE(1900)] = 70807,\n  [SMALL_STATE(1901)] = 70861,\n  [SMALL_STATE(1902)] = 70915,\n  [SMALL_STATE(1903)] = 70965,\n  [SMALL_STATE(1904)] = 71057,\n  [SMALL_STATE(1905)] = 71107,\n  [SMALL_STATE(1906)] = 71201,\n  [SMALL_STATE(1907)] = 71309,\n  [SMALL_STATE(1908)] = 71365,\n  [SMALL_STATE(1909)] = 71419,\n  [SMALL_STATE(1910)] = 71527,\n  [SMALL_STATE(1911)] = 71603,\n  [SMALL_STATE(1912)] = 71681,\n  [SMALL_STATE(1913)] = 71737,\n  [SMALL_STATE(1914)] = 71793,\n  [SMALL_STATE(1915)] = 71843,\n  [SMALL_STATE(1916)] = 71929,\n  [SMALL_STATE(1917)] = 71983,\n  [SMALL_STATE(1918)] = 72035,\n  [SMALL_STATE(1919)] = 72095,\n  [SMALL_STATE(1920)] = 72145,\n  [SMALL_STATE(1921)] = 72201,\n  [SMALL_STATE(1922)] = 72257,\n  [SMALL_STATE(1923)] = 72311,\n  [SMALL_STATE(1924)] = 72365,\n  [SMALL_STATE(1925)] = 72419,\n  [SMALL_STATE(1926)] = 72469,\n  [SMALL_STATE(1927)] = 72527,\n  [SMALL_STATE(1928)] = 72583,\n  [SMALL_STATE(1929)] = 72641,\n  [SMALL_STATE(1930)] = 72749,\n  [SMALL_STATE(1931)] = 72857,\n  [SMALL_STATE(1932)] = 72913,\n  [SMALL_STATE(1933)] = 72963,\n  [SMALL_STATE(1934)] = 73017,\n  [SMALL_STATE(1935)] = 73077,\n  [SMALL_STATE(1936)] = 73185,\n  [SMALL_STATE(1937)] = 73285,\n  [SMALL_STATE(1938)] = 73393,\n  [SMALL_STATE(1939)] = 73501,\n  [SMALL_STATE(1940)] = 73559,\n  [SMALL_STATE(1941)] = 73617,\n  [SMALL_STATE(1942)] = 73716,\n  [SMALL_STATE(1943)] = 73821,\n  [SMALL_STATE(1944)] = 73926,\n  [SMALL_STATE(1945)] = 74031,\n  [SMALL_STATE(1946)] = 74082,\n  [SMALL_STATE(1947)] = 74137,\n  [SMALL_STATE(1948)] = 74194,\n  [SMALL_STATE(1949)] = 74279,\n  [SMALL_STATE(1950)] = 74384,\n  [SMALL_STATE(1951)] = 74453,\n  [SMALL_STATE(1952)] = 74514,\n  [SMALL_STATE(1953)] = 74569,\n  [SMALL_STATE(1954)] = 74674,\n  [SMALL_STATE(1955)] = 74779,\n  [SMALL_STATE(1956)] = 74884,\n  [SMALL_STATE(1957)] = 74989,\n  [SMALL_STATE(1958)] = 75042,\n  [SMALL_STATE(1959)] = 75117,\n  [SMALL_STATE(1960)] = 75222,\n  [SMALL_STATE(1961)] = 75279,\n  [SMALL_STATE(1962)] = 75384,\n  [SMALL_STATE(1963)] = 75437,\n  [SMALL_STATE(1964)] = 75492,\n  [SMALL_STATE(1965)] = 75597,\n  [SMALL_STATE(1966)] = 75654,\n  [SMALL_STATE(1967)] = 75721,\n  [SMALL_STATE(1968)] = 75778,\n  [SMALL_STATE(1969)] = 75849,\n  [SMALL_STATE(1970)] = 75930,\n  [SMALL_STATE(1971)] = 76025,\n  [SMALL_STATE(1972)] = 76122,\n  [SMALL_STATE(1973)] = 76173,\n  [SMALL_STATE(1974)] = 76250,\n  [SMALL_STATE(1975)] = 76339,\n  [SMALL_STATE(1976)] = 76430,\n  [SMALL_STATE(1977)] = 76535,\n  [SMALL_STATE(1978)] = 76592,\n  [SMALL_STATE(1979)] = 76685,\n  [SMALL_STATE(1980)] = 76738,\n  [SMALL_STATE(1981)] = 76813,\n  [SMALL_STATE(1982)] = 76918,\n  [SMALL_STATE(1983)] = 76995,\n  [SMALL_STATE(1984)] = 77100,\n  [SMALL_STATE(1985)] = 77154,\n  [SMALL_STATE(1986)] = 77208,\n  [SMALL_STATE(1987)] = 77260,\n  [SMALL_STATE(1988)] = 77314,\n  [SMALL_STATE(1989)] = 77364,\n  [SMALL_STATE(1990)] = 77418,\n  [SMALL_STATE(1991)] = 77472,\n  [SMALL_STATE(1992)] = 77526,\n  [SMALL_STATE(1993)] = 77582,\n  [SMALL_STATE(1994)] = 77632,\n  [SMALL_STATE(1995)] = 77686,\n  [SMALL_STATE(1996)] = 77740,\n  [SMALL_STATE(1997)] = 77789,\n  [SMALL_STATE(1998)] = 77842,\n  [SMALL_STATE(1999)] = 77891,\n  [SMALL_STATE(2000)] = 77944,\n  [SMALL_STATE(2001)] = 77993,\n  [SMALL_STATE(2002)] = 78046,\n  [SMALL_STATE(2003)] = 78099,\n  [SMALL_STATE(2004)] = 78181,\n  [SMALL_STATE(2005)] = 78263,\n  [SMALL_STATE(2006)] = 78307,\n  [SMALL_STATE(2007)] = 78353,\n  [SMALL_STATE(2008)] = 78399,\n  [SMALL_STATE(2009)] = 78443,\n  [SMALL_STATE(2010)] = 78489,\n  [SMALL_STATE(2011)] = 78535,\n  [SMALL_STATE(2012)] = 78581,\n  [SMALL_STATE(2013)] = 78627,\n  [SMALL_STATE(2014)] = 78673,\n  [SMALL_STATE(2015)] = 78717,\n  [SMALL_STATE(2016)] = 78763,\n  [SMALL_STATE(2017)] = 78809,\n  [SMALL_STATE(2018)] = 78851,\n  [SMALL_STATE(2019)] = 78897,\n  [SMALL_STATE(2020)] = 78939,\n  [SMALL_STATE(2021)] = 78985,\n  [SMALL_STATE(2022)] = 79031,\n  [SMALL_STATE(2023)] = 79077,\n  [SMALL_STATE(2024)] = 79123,\n  [SMALL_STATE(2025)] = 79169,\n  [SMALL_STATE(2026)] = 79211,\n  [SMALL_STATE(2027)] = 79255,\n  [SMALL_STATE(2028)] = 79299,\n  [SMALL_STATE(2029)] = 79338,\n  [SMALL_STATE(2030)] = 79377,\n  [SMALL_STATE(2031)] = 79416,\n  [SMALL_STATE(2032)] = 79443,\n  [SMALL_STATE(2033)] = 79470,\n  [SMALL_STATE(2034)] = 79497,\n  [SMALL_STATE(2035)] = 79524,\n  [SMALL_STATE(2036)] = 79551,\n  [SMALL_STATE(2037)] = 79588,\n  [SMALL_STATE(2038)] = 79625,\n  [SMALL_STATE(2039)] = 79652,\n  [SMALL_STATE(2040)] = 79687,\n  [SMALL_STATE(2041)] = 79714,\n  [SMALL_STATE(2042)] = 79741,\n  [SMALL_STATE(2043)] = 79768,\n  [SMALL_STATE(2044)] = 79795,\n  [SMALL_STATE(2045)] = 79822,\n  [SMALL_STATE(2046)] = 79849,\n  [SMALL_STATE(2047)] = 79876,\n  [SMALL_STATE(2048)] = 79903,\n  [SMALL_STATE(2049)] = 79930,\n  [SMALL_STATE(2050)] = 79957,\n  [SMALL_STATE(2051)] = 79984,\n  [SMALL_STATE(2052)] = 80011,\n  [SMALL_STATE(2053)] = 80038,\n  [SMALL_STATE(2054)] = 80065,\n  [SMALL_STATE(2055)] = 80092,\n  [SMALL_STATE(2056)] = 80119,\n  [SMALL_STATE(2057)] = 80146,\n  [SMALL_STATE(2058)] = 80173,\n  [SMALL_STATE(2059)] = 80200,\n  [SMALL_STATE(2060)] = 80227,\n  [SMALL_STATE(2061)] = 80254,\n  [SMALL_STATE(2062)] = 80281,\n  [SMALL_STATE(2063)] = 80308,\n  [SMALL_STATE(2064)] = 80335,\n  [SMALL_STATE(2065)] = 80360,\n  [SMALL_STATE(2066)] = 80387,\n  [SMALL_STATE(2067)] = 80414,\n  [SMALL_STATE(2068)] = 80441,\n  [SMALL_STATE(2069)] = 80468,\n  [SMALL_STATE(2070)] = 80495,\n  [SMALL_STATE(2071)] = 80522,\n  [SMALL_STATE(2072)] = 80549,\n  [SMALL_STATE(2073)] = 80576,\n  [SMALL_STATE(2074)] = 80603,\n  [SMALL_STATE(2075)] = 80630,\n  [SMALL_STATE(2076)] = 80657,\n  [SMALL_STATE(2077)] = 80684,\n  [SMALL_STATE(2078)] = 80718,\n  [SMALL_STATE(2079)] = 80744,\n  [SMALL_STATE(2080)] = 80772,\n  [SMALL_STATE(2081)] = 80800,\n  [SMALL_STATE(2082)] = 80826,\n  [SMALL_STATE(2083)] = 80858,\n  [SMALL_STATE(2084)] = 80886,\n  [SMALL_STATE(2085)] = 80912,\n  [SMALL_STATE(2086)] = 80947,\n  [SMALL_STATE(2087)] = 80980,\n  [SMALL_STATE(2088)] = 81005,\n  [SMALL_STATE(2089)] = 81040,\n  [SMALL_STATE(2090)] = 81065,\n  [SMALL_STATE(2091)] = 81096,\n  [SMALL_STATE(2092)] = 81120,\n  [SMALL_STATE(2093)] = 81144,\n  [SMALL_STATE(2094)] = 81168,\n  [SMALL_STATE(2095)] = 81192,\n  [SMALL_STATE(2096)] = 81216,\n  [SMALL_STATE(2097)] = 81240,\n  [SMALL_STATE(2098)] = 81264,\n  [SMALL_STATE(2099)] = 81288,\n  [SMALL_STATE(2100)] = 81312,\n  [SMALL_STATE(2101)] = 81336,\n  [SMALL_STATE(2102)] = 81360,\n  [SMALL_STATE(2103)] = 81384,\n  [SMALL_STATE(2104)] = 81408,\n  [SMALL_STATE(2105)] = 81432,\n  [SMALL_STATE(2106)] = 81456,\n  [SMALL_STATE(2107)] = 81480,\n  [SMALL_STATE(2108)] = 81504,\n  [SMALL_STATE(2109)] = 81528,\n  [SMALL_STATE(2110)] = 81552,\n  [SMALL_STATE(2111)] = 81576,\n  [SMALL_STATE(2112)] = 81600,\n  [SMALL_STATE(2113)] = 81624,\n  [SMALL_STATE(2114)] = 81648,\n  [SMALL_STATE(2115)] = 81672,\n  [SMALL_STATE(2116)] = 81696,\n  [SMALL_STATE(2117)] = 81720,\n  [SMALL_STATE(2118)] = 81744,\n  [SMALL_STATE(2119)] = 81768,\n  [SMALL_STATE(2120)] = 81792,\n  [SMALL_STATE(2121)] = 81816,\n  [SMALL_STATE(2122)] = 81840,\n  [SMALL_STATE(2123)] = 81864,\n  [SMALL_STATE(2124)] = 81888,\n  [SMALL_STATE(2125)] = 81912,\n  [SMALL_STATE(2126)] = 81936,\n  [SMALL_STATE(2127)] = 81960,\n  [SMALL_STATE(2128)] = 81984,\n  [SMALL_STATE(2129)] = 82008,\n  [SMALL_STATE(2130)] = 82032,\n  [SMALL_STATE(2131)] = 82056,\n  [SMALL_STATE(2132)] = 82084,\n  [SMALL_STATE(2133)] = 82108,\n  [SMALL_STATE(2134)] = 82132,\n  [SMALL_STATE(2135)] = 82156,\n  [SMALL_STATE(2136)] = 82180,\n  [SMALL_STATE(2137)] = 82204,\n  [SMALL_STATE(2138)] = 82228,\n  [SMALL_STATE(2139)] = 82252,\n  [SMALL_STATE(2140)] = 82276,\n  [SMALL_STATE(2141)] = 82300,\n  [SMALL_STATE(2142)] = 82332,\n  [SMALL_STATE(2143)] = 82356,\n  [SMALL_STATE(2144)] = 82379,\n  [SMALL_STATE(2145)] = 82402,\n  [SMALL_STATE(2146)] = 82425,\n  [SMALL_STATE(2147)] = 82448,\n  [SMALL_STATE(2148)] = 82469,\n  [SMALL_STATE(2149)] = 82498,\n  [SMALL_STATE(2150)] = 82523,\n  [SMALL_STATE(2151)] = 82548,\n  [SMALL_STATE(2152)] = 82571,\n  [SMALL_STATE(2153)] = 82592,\n  [SMALL_STATE(2154)] = 82615,\n  [SMALL_STATE(2155)] = 82638,\n  [SMALL_STATE(2156)] = 82661,\n  [SMALL_STATE(2157)] = 82682,\n  [SMALL_STATE(2158)] = 82705,\n  [SMALL_STATE(2159)] = 82728,\n  [SMALL_STATE(2160)] = 82749,\n  [SMALL_STATE(2161)] = 82772,\n  [SMALL_STATE(2162)] = 82795,\n  [SMALL_STATE(2163)] = 82816,\n  [SMALL_STATE(2164)] = 82839,\n  [SMALL_STATE(2165)] = 82862,\n  [SMALL_STATE(2166)] = 82885,\n  [SMALL_STATE(2167)] = 82914,\n  [SMALL_STATE(2168)] = 82937,\n  [SMALL_STATE(2169)] = 82960,\n  [SMALL_STATE(2170)] = 82983,\n  [SMALL_STATE(2171)] = 83004,\n  [SMALL_STATE(2172)] = 83025,\n  [SMALL_STATE(2173)] = 83048,\n  [SMALL_STATE(2174)] = 83071,\n  [SMALL_STATE(2175)] = 83094,\n  [SMALL_STATE(2176)] = 83117,\n  [SMALL_STATE(2177)] = 83140,\n  [SMALL_STATE(2178)] = 83163,\n  [SMALL_STATE(2179)] = 83186,\n  [SMALL_STATE(2180)] = 83209,\n  [SMALL_STATE(2181)] = 83232,\n  [SMALL_STATE(2182)] = 83255,\n  [SMALL_STATE(2183)] = 83278,\n  [SMALL_STATE(2184)] = 83301,\n  [SMALL_STATE(2185)] = 83324,\n  [SMALL_STATE(2186)] = 83347,\n  [SMALL_STATE(2187)] = 83374,\n  [SMALL_STATE(2188)] = 83399,\n  [SMALL_STATE(2189)] = 83422,\n  [SMALL_STATE(2190)] = 83447,\n  [SMALL_STATE(2191)] = 83470,\n  [SMALL_STATE(2192)] = 83493,\n  [SMALL_STATE(2193)] = 83519,\n  [SMALL_STATE(2194)] = 83547,\n  [SMALL_STATE(2195)] = 83575,\n  [SMALL_STATE(2196)] = 83603,\n  [SMALL_STATE(2197)] = 83627,\n  [SMALL_STATE(2198)] = 83655,\n  [SMALL_STATE(2199)] = 83697,\n  [SMALL_STATE(2200)] = 83721,\n  [SMALL_STATE(2201)] = 83745,\n  [SMALL_STATE(2202)] = 83771,\n  [SMALL_STATE(2203)] = 83799,\n  [SMALL_STATE(2204)] = 83836,\n  [SMALL_STATE(2205)] = 83857,\n  [SMALL_STATE(2206)] = 83880,\n  [SMALL_STATE(2207)] = 83907,\n  [SMALL_STATE(2208)] = 83936,\n  [SMALL_STATE(2209)] = 83965,\n  [SMALL_STATE(2210)] = 83988,\n  [SMALL_STATE(2211)] = 84008,\n  [SMALL_STATE(2212)] = 84034,\n  [SMALL_STATE(2213)] = 84054,\n  [SMALL_STATE(2214)] = 84072,\n  [SMALL_STATE(2215)] = 84090,\n  [SMALL_STATE(2216)] = 84120,\n  [SMALL_STATE(2217)] = 84140,\n  [SMALL_STATE(2218)] = 84158,\n  [SMALL_STATE(2219)] = 84176,\n  [SMALL_STATE(2220)] = 84196,\n  [SMALL_STATE(2221)] = 84214,\n  [SMALL_STATE(2222)] = 84232,\n  [SMALL_STATE(2223)] = 84252,\n  [SMALL_STATE(2224)] = 84270,\n  [SMALL_STATE(2225)] = 84288,\n  [SMALL_STATE(2226)] = 84306,\n  [SMALL_STATE(2227)] = 84324,\n  [SMALL_STATE(2228)] = 84342,\n  [SMALL_STATE(2229)] = 84362,\n  [SMALL_STATE(2230)] = 84380,\n  [SMALL_STATE(2231)] = 84398,\n  [SMALL_STATE(2232)] = 84416,\n  [SMALL_STATE(2233)] = 84434,\n  [SMALL_STATE(2234)] = 84452,\n  [SMALL_STATE(2235)] = 84470,\n  [SMALL_STATE(2236)] = 84488,\n  [SMALL_STATE(2237)] = 84506,\n  [SMALL_STATE(2238)] = 84524,\n  [SMALL_STATE(2239)] = 84542,\n  [SMALL_STATE(2240)] = 84560,\n  [SMALL_STATE(2241)] = 84584,\n  [SMALL_STATE(2242)] = 84602,\n  [SMALL_STATE(2243)] = 84620,\n  [SMALL_STATE(2244)] = 84640,\n  [SMALL_STATE(2245)] = 84658,\n  [SMALL_STATE(2246)] = 84678,\n  [SMALL_STATE(2247)] = 84696,\n  [SMALL_STATE(2248)] = 84714,\n  [SMALL_STATE(2249)] = 84732,\n  [SMALL_STATE(2250)] = 84752,\n  [SMALL_STATE(2251)] = 84770,\n  [SMALL_STATE(2252)] = 84796,\n  [SMALL_STATE(2253)] = 84816,\n  [SMALL_STATE(2254)] = 84834,\n  [SMALL_STATE(2255)] = 84854,\n  [SMALL_STATE(2256)] = 84874,\n  [SMALL_STATE(2257)] = 84894,\n  [SMALL_STATE(2258)] = 84912,\n  [SMALL_STATE(2259)] = 84932,\n  [SMALL_STATE(2260)] = 84950,\n  [SMALL_STATE(2261)] = 84970,\n  [SMALL_STATE(2262)] = 84992,\n  [SMALL_STATE(2263)] = 85010,\n  [SMALL_STATE(2264)] = 85030,\n  [SMALL_STATE(2265)] = 85050,\n  [SMALL_STATE(2266)] = 85068,\n  [SMALL_STATE(2267)] = 85088,\n  [SMALL_STATE(2268)] = 85108,\n  [SMALL_STATE(2269)] = 85126,\n  [SMALL_STATE(2270)] = 85146,\n  [SMALL_STATE(2271)] = 85164,\n  [SMALL_STATE(2272)] = 85182,\n  [SMALL_STATE(2273)] = 85200,\n  [SMALL_STATE(2274)] = 85220,\n  [SMALL_STATE(2275)] = 85240,\n  [SMALL_STATE(2276)] = 85258,\n  [SMALL_STATE(2277)] = 85280,\n  [SMALL_STATE(2278)] = 85306,\n  [SMALL_STATE(2279)] = 85326,\n  [SMALL_STATE(2280)] = 85346,\n  [SMALL_STATE(2281)] = 85372,\n  [SMALL_STATE(2282)] = 85392,\n  [SMALL_STATE(2283)] = 85412,\n  [SMALL_STATE(2284)] = 85432,\n  [SMALL_STATE(2285)] = 85452,\n  [SMALL_STATE(2286)] = 85472,\n  [SMALL_STATE(2287)] = 85494,\n  [SMALL_STATE(2288)] = 85516,\n  [SMALL_STATE(2289)] = 85552,\n  [SMALL_STATE(2290)] = 85572,\n  [SMALL_STATE(2291)] = 85598,\n  [SMALL_STATE(2292)] = 85624,\n  [SMALL_STATE(2293)] = 85644,\n  [SMALL_STATE(2294)] = 85670,\n  [SMALL_STATE(2295)] = 85690,\n  [SMALL_STATE(2296)] = 85710,\n  [SMALL_STATE(2297)] = 85728,\n  [SMALL_STATE(2298)] = 85748,\n  [SMALL_STATE(2299)] = 85765,\n  [SMALL_STATE(2300)] = 85782,\n  [SMALL_STATE(2301)] = 85799,\n  [SMALL_STATE(2302)] = 85816,\n  [SMALL_STATE(2303)] = 85841,\n  [SMALL_STATE(2304)] = 85864,\n  [SMALL_STATE(2305)] = 85891,\n  [SMALL_STATE(2306)] = 85914,\n  [SMALL_STATE(2307)] = 85931,\n  [SMALL_STATE(2308)] = 85958,\n  [SMALL_STATE(2309)] = 85981,\n  [SMALL_STATE(2310)] = 86004,\n  [SMALL_STATE(2311)] = 86021,\n  [SMALL_STATE(2312)] = 86038,\n  [SMALL_STATE(2313)] = 86055,\n  [SMALL_STATE(2314)] = 86075,\n  [SMALL_STATE(2315)] = 86101,\n  [SMALL_STATE(2316)] = 86127,\n  [SMALL_STATE(2317)] = 86155,\n  [SMALL_STATE(2318)] = 86183,\n  [SMALL_STATE(2319)] = 86213,\n  [SMALL_STATE(2320)] = 86231,\n  [SMALL_STATE(2321)] = 86255,\n  [SMALL_STATE(2322)] = 86281,\n  [SMALL_STATE(2323)] = 86307,\n  [SMALL_STATE(2324)] = 86333,\n  [SMALL_STATE(2325)] = 86363,\n  [SMALL_STATE(2326)] = 86393,\n  [SMALL_STATE(2327)] = 86423,\n  [SMALL_STATE(2328)] = 86446,\n  [SMALL_STATE(2329)] = 86467,\n  [SMALL_STATE(2330)] = 86484,\n  [SMALL_STATE(2331)] = 86511,\n  [SMALL_STATE(2332)] = 86526,\n  [SMALL_STATE(2333)] = 86543,\n  [SMALL_STATE(2334)] = 86560,\n  [SMALL_STATE(2335)] = 86575,\n  [SMALL_STATE(2336)] = 86602,\n  [SMALL_STATE(2337)] = 86627,\n  [SMALL_STATE(2338)] = 86642,\n  [SMALL_STATE(2339)] = 86669,\n  [SMALL_STATE(2340)] = 86700,\n  [SMALL_STATE(2341)] = 86717,\n  [SMALL_STATE(2342)] = 86732,\n  [SMALL_STATE(2343)] = 86757,\n  [SMALL_STATE(2344)] = 86778,\n  [SMALL_STATE(2345)] = 86805,\n  [SMALL_STATE(2346)] = 86828,\n  [SMALL_STATE(2347)] = 86859,\n  [SMALL_STATE(2348)] = 86874,\n  [SMALL_STATE(2349)] = 86891,\n  [SMALL_STATE(2350)] = 86918,\n  [SMALL_STATE(2351)] = 86949,\n  [SMALL_STATE(2352)] = 86976,\n  [SMALL_STATE(2353)] = 87003,\n  [SMALL_STATE(2354)] = 87028,\n  [SMALL_STATE(2355)] = 87043,\n  [SMALL_STATE(2356)] = 87074,\n  [SMALL_STATE(2357)] = 87099,\n  [SMALL_STATE(2358)] = 87120,\n  [SMALL_STATE(2359)] = 87147,\n  [SMALL_STATE(2360)] = 87174,\n  [SMALL_STATE(2361)] = 87201,\n  [SMALL_STATE(2362)] = 87222,\n  [SMALL_STATE(2363)] = 87249,\n  [SMALL_STATE(2364)] = 87276,\n  [SMALL_STATE(2365)] = 87301,\n  [SMALL_STATE(2366)] = 87326,\n  [SMALL_STATE(2367)] = 87353,\n  [SMALL_STATE(2368)] = 87376,\n  [SMALL_STATE(2369)] = 87407,\n  [SMALL_STATE(2370)] = 87422,\n  [SMALL_STATE(2371)] = 87443,\n  [SMALL_STATE(2372)] = 87458,\n  [SMALL_STATE(2373)] = 87485,\n  [SMALL_STATE(2374)] = 87516,\n  [SMALL_STATE(2375)] = 87541,\n  [SMALL_STATE(2376)] = 87556,\n  [SMALL_STATE(2377)] = 87579,\n  [SMALL_STATE(2378)] = 87610,\n  [SMALL_STATE(2379)] = 87635,\n  [SMALL_STATE(2380)] = 87659,\n  [SMALL_STATE(2381)] = 87673,\n  [SMALL_STATE(2382)] = 87687,\n  [SMALL_STATE(2383)] = 87707,\n  [SMALL_STATE(2384)] = 87721,\n  [SMALL_STATE(2385)] = 87735,\n  [SMALL_STATE(2386)] = 87751,\n  [SMALL_STATE(2387)] = 87765,\n  [SMALL_STATE(2388)] = 87779,\n  [SMALL_STATE(2389)] = 87793,\n  [SMALL_STATE(2390)] = 87807,\n  [SMALL_STATE(2391)] = 87831,\n  [SMALL_STATE(2392)] = 87845,\n  [SMALL_STATE(2393)] = 87865,\n  [SMALL_STATE(2394)] = 87879,\n  [SMALL_STATE(2395)] = 87903,\n  [SMALL_STATE(2396)] = 87917,\n  [SMALL_STATE(2397)] = 87931,\n  [SMALL_STATE(2398)] = 87945,\n  [SMALL_STATE(2399)] = 87959,\n  [SMALL_STATE(2400)] = 87983,\n  [SMALL_STATE(2401)] = 87997,\n  [SMALL_STATE(2402)] = 88011,\n  [SMALL_STATE(2403)] = 88029,\n  [SMALL_STATE(2404)] = 88049,\n  [SMALL_STATE(2405)] = 88069,\n  [SMALL_STATE(2406)] = 88089,\n  [SMALL_STATE(2407)] = 88107,\n  [SMALL_STATE(2408)] = 88127,\n  [SMALL_STATE(2409)] = 88141,\n  [SMALL_STATE(2410)] = 88155,\n  [SMALL_STATE(2411)] = 88169,\n  [SMALL_STATE(2412)] = 88183,\n  [SMALL_STATE(2413)] = 88197,\n  [SMALL_STATE(2414)] = 88211,\n  [SMALL_STATE(2415)] = 88235,\n  [SMALL_STATE(2416)] = 88249,\n  [SMALL_STATE(2417)] = 88263,\n  [SMALL_STATE(2418)] = 88287,\n  [SMALL_STATE(2419)] = 88311,\n  [SMALL_STATE(2420)] = 88325,\n  [SMALL_STATE(2421)] = 88349,\n  [SMALL_STATE(2422)] = 88369,\n  [SMALL_STATE(2423)] = 88383,\n  [SMALL_STATE(2424)] = 88397,\n  [SMALL_STATE(2425)] = 88411,\n  [SMALL_STATE(2426)] = 88435,\n  [SMALL_STATE(2427)] = 88459,\n  [SMALL_STATE(2428)] = 88479,\n  [SMALL_STATE(2429)] = 88503,\n  [SMALL_STATE(2430)] = 88523,\n  [SMALL_STATE(2431)] = 88547,\n  [SMALL_STATE(2432)] = 88561,\n  [SMALL_STATE(2433)] = 88577,\n  [SMALL_STATE(2434)] = 88595,\n  [SMALL_STATE(2435)] = 88615,\n  [SMALL_STATE(2436)] = 88635,\n  [SMALL_STATE(2437)] = 88649,\n  [SMALL_STATE(2438)] = 88663,\n  [SMALL_STATE(2439)] = 88683,\n  [SMALL_STATE(2440)] = 88703,\n  [SMALL_STATE(2441)] = 88717,\n  [SMALL_STATE(2442)] = 88735,\n  [SMALL_STATE(2443)] = 88749,\n  [SMALL_STATE(2444)] = 88765,\n  [SMALL_STATE(2445)] = 88789,\n  [SMALL_STATE(2446)] = 88803,\n  [SMALL_STATE(2447)] = 88817,\n  [SMALL_STATE(2448)] = 88831,\n  [SMALL_STATE(2449)] = 88845,\n  [SMALL_STATE(2450)] = 88859,\n  [SMALL_STATE(2451)] = 88875,\n  [SMALL_STATE(2452)] = 88889,\n  [SMALL_STATE(2453)] = 88903,\n  [SMALL_STATE(2454)] = 88920,\n  [SMALL_STATE(2455)] = 88941,\n  [SMALL_STATE(2456)] = 88962,\n  [SMALL_STATE(2457)] = 88987,\n  [SMALL_STATE(2458)] = 89008,\n  [SMALL_STATE(2459)] = 89033,\n  [SMALL_STATE(2460)] = 89050,\n  [SMALL_STATE(2461)] = 89063,\n  [SMALL_STATE(2462)] = 89084,\n  [SMALL_STATE(2463)] = 89097,\n  [SMALL_STATE(2464)] = 89110,\n  [SMALL_STATE(2465)] = 89135,\n  [SMALL_STATE(2466)] = 89148,\n  [SMALL_STATE(2467)] = 89173,\n  [SMALL_STATE(2468)] = 89194,\n  [SMALL_STATE(2469)] = 89207,\n  [SMALL_STATE(2470)] = 89220,\n  [SMALL_STATE(2471)] = 89239,\n  [SMALL_STATE(2472)] = 89264,\n  [SMALL_STATE(2473)] = 89277,\n  [SMALL_STATE(2474)] = 89302,\n  [SMALL_STATE(2475)] = 89317,\n  [SMALL_STATE(2476)] = 89332,\n  [SMALL_STATE(2477)] = 89349,\n  [SMALL_STATE(2478)] = 89374,\n  [SMALL_STATE(2479)] = 89391,\n  [SMALL_STATE(2480)] = 89416,\n  [SMALL_STATE(2481)] = 89437,\n  [SMALL_STATE(2482)] = 89458,\n  [SMALL_STATE(2483)] = 89481,\n  [SMALL_STATE(2484)] = 89506,\n  [SMALL_STATE(2485)] = 89521,\n  [SMALL_STATE(2486)] = 89536,\n  [SMALL_STATE(2487)] = 89553,\n  [SMALL_STATE(2488)] = 89570,\n  [SMALL_STATE(2489)] = 89587,\n  [SMALL_STATE(2490)] = 89612,\n  [SMALL_STATE(2491)] = 89625,\n  [SMALL_STATE(2492)] = 89640,\n  [SMALL_STATE(2493)] = 89655,\n  [SMALL_STATE(2494)] = 89668,\n  [SMALL_STATE(2495)] = 89681,\n  [SMALL_STATE(2496)] = 89702,\n  [SMALL_STATE(2497)] = 89721,\n  [SMALL_STATE(2498)] = 89742,\n  [SMALL_STATE(2499)] = 89755,\n  [SMALL_STATE(2500)] = 89770,\n  [SMALL_STATE(2501)] = 89783,\n  [SMALL_STATE(2502)] = 89796,\n  [SMALL_STATE(2503)] = 89821,\n  [SMALL_STATE(2504)] = 89834,\n  [SMALL_STATE(2505)] = 89855,\n  [SMALL_STATE(2506)] = 89880,\n  [SMALL_STATE(2507)] = 89901,\n  [SMALL_STATE(2508)] = 89914,\n  [SMALL_STATE(2509)] = 89931,\n  [SMALL_STATE(2510)] = 89956,\n  [SMALL_STATE(2511)] = 89975,\n  [SMALL_STATE(2512)] = 89990,\n  [SMALL_STATE(2513)] = 90011,\n  [SMALL_STATE(2514)] = 90032,\n  [SMALL_STATE(2515)] = 90055,\n  [SMALL_STATE(2516)] = 90068,\n  [SMALL_STATE(2517)] = 90085,\n  [SMALL_STATE(2518)] = 90104,\n  [SMALL_STATE(2519)] = 90125,\n  [SMALL_STATE(2520)] = 90146,\n  [SMALL_STATE(2521)] = 90159,\n  [SMALL_STATE(2522)] = 90172,\n  [SMALL_STATE(2523)] = 90191,\n  [SMALL_STATE(2524)] = 90212,\n  [SMALL_STATE(2525)] = 90237,\n  [SMALL_STATE(2526)] = 90258,\n  [SMALL_STATE(2527)] = 90280,\n  [SMALL_STATE(2528)] = 90296,\n  [SMALL_STATE(2529)] = 90312,\n  [SMALL_STATE(2530)] = 90328,\n  [SMALL_STATE(2531)] = 90350,\n  [SMALL_STATE(2532)] = 90372,\n  [SMALL_STATE(2533)] = 90394,\n  [SMALL_STATE(2534)] = 90412,\n  [SMALL_STATE(2535)] = 90430,\n  [SMALL_STATE(2536)] = 90444,\n  [SMALL_STATE(2537)] = 90466,\n  [SMALL_STATE(2538)] = 90478,\n  [SMALL_STATE(2539)] = 90490,\n  [SMALL_STATE(2540)] = 90506,\n  [SMALL_STATE(2541)] = 90524,\n  [SMALL_STATE(2542)] = 90542,\n  [SMALL_STATE(2543)] = 90560,\n  [SMALL_STATE(2544)] = 90582,\n  [SMALL_STATE(2545)] = 90598,\n  [SMALL_STATE(2546)] = 90620,\n  [SMALL_STATE(2547)] = 90642,\n  [SMALL_STATE(2548)] = 90664,\n  [SMALL_STATE(2549)] = 90686,\n  [SMALL_STATE(2550)] = 90704,\n  [SMALL_STATE(2551)] = 90726,\n  [SMALL_STATE(2552)] = 90748,\n  [SMALL_STATE(2553)] = 90768,\n  [SMALL_STATE(2554)] = 90786,\n  [SMALL_STATE(2555)] = 90808,\n  [SMALL_STATE(2556)] = 90828,\n  [SMALL_STATE(2557)] = 90846,\n  [SMALL_STATE(2558)] = 90864,\n  [SMALL_STATE(2559)] = 90876,\n  [SMALL_STATE(2560)] = 90894,\n  [SMALL_STATE(2561)] = 90916,\n  [SMALL_STATE(2562)] = 90928,\n  [SMALL_STATE(2563)] = 90950,\n  [SMALL_STATE(2564)] = 90972,\n  [SMALL_STATE(2565)] = 90994,\n  [SMALL_STATE(2566)] = 91012,\n  [SMALL_STATE(2567)] = 91034,\n  [SMALL_STATE(2568)] = 91050,\n  [SMALL_STATE(2569)] = 91072,\n  [SMALL_STATE(2570)] = 91092,\n  [SMALL_STATE(2571)] = 91114,\n  [SMALL_STATE(2572)] = 91134,\n  [SMALL_STATE(2573)] = 91150,\n  [SMALL_STATE(2574)] = 91172,\n  [SMALL_STATE(2575)] = 91184,\n  [SMALL_STATE(2576)] = 91202,\n  [SMALL_STATE(2577)] = 91224,\n  [SMALL_STATE(2578)] = 91242,\n  [SMALL_STATE(2579)] = 91258,\n  [SMALL_STATE(2580)] = 91276,\n  [SMALL_STATE(2581)] = 91288,\n  [SMALL_STATE(2582)] = 91310,\n  [SMALL_STATE(2583)] = 91322,\n  [SMALL_STATE(2584)] = 91344,\n  [SMALL_STATE(2585)] = 91362,\n  [SMALL_STATE(2586)] = 91384,\n  [SMALL_STATE(2587)] = 91406,\n  [SMALL_STATE(2588)] = 91428,\n  [SMALL_STATE(2589)] = 91444,\n  [SMALL_STATE(2590)] = 91460,\n  [SMALL_STATE(2591)] = 91482,\n  [SMALL_STATE(2592)] = 91504,\n  [SMALL_STATE(2593)] = 91522,\n  [SMALL_STATE(2594)] = 91534,\n  [SMALL_STATE(2595)] = 91556,\n  [SMALL_STATE(2596)] = 91578,\n  [SMALL_STATE(2597)] = 91600,\n  [SMALL_STATE(2598)] = 91622,\n  [SMALL_STATE(2599)] = 91638,\n  [SMALL_STATE(2600)] = 91660,\n  [SMALL_STATE(2601)] = 91682,\n  [SMALL_STATE(2602)] = 91704,\n  [SMALL_STATE(2603)] = 91722,\n  [SMALL_STATE(2604)] = 91734,\n  [SMALL_STATE(2605)] = 91750,\n  [SMALL_STATE(2606)] = 91768,\n  [SMALL_STATE(2607)] = 91790,\n  [SMALL_STATE(2608)] = 91812,\n  [SMALL_STATE(2609)] = 91834,\n  [SMALL_STATE(2610)] = 91856,\n  [SMALL_STATE(2611)] = 91872,\n  [SMALL_STATE(2612)] = 91894,\n  [SMALL_STATE(2613)] = 91912,\n  [SMALL_STATE(2614)] = 91930,\n  [SMALL_STATE(2615)] = 91948,\n  [SMALL_STATE(2616)] = 91970,\n  [SMALL_STATE(2617)] = 91992,\n  [SMALL_STATE(2618)] = 92010,\n  [SMALL_STATE(2619)] = 92032,\n  [SMALL_STATE(2620)] = 92050,\n  [SMALL_STATE(2621)] = 92068,\n  [SMALL_STATE(2622)] = 92090,\n  [SMALL_STATE(2623)] = 92112,\n  [SMALL_STATE(2624)] = 92130,\n  [SMALL_STATE(2625)] = 92152,\n  [SMALL_STATE(2626)] = 92174,\n  [SMALL_STATE(2627)] = 92190,\n  [SMALL_STATE(2628)] = 92208,\n  [SMALL_STATE(2629)] = 92224,\n  [SMALL_STATE(2630)] = 92246,\n  [SMALL_STATE(2631)] = 92266,\n  [SMALL_STATE(2632)] = 92288,\n  [SMALL_STATE(2633)] = 92304,\n  [SMALL_STATE(2634)] = 92326,\n  [SMALL_STATE(2635)] = 92342,\n  [SMALL_STATE(2636)] = 92364,\n  [SMALL_STATE(2637)] = 92386,\n  [SMALL_STATE(2638)] = 92408,\n  [SMALL_STATE(2639)] = 92424,\n  [SMALL_STATE(2640)] = 92446,\n  [SMALL_STATE(2641)] = 92464,\n  [SMALL_STATE(2642)] = 92480,\n  [SMALL_STATE(2643)] = 92502,\n  [SMALL_STATE(2644)] = 92524,\n  [SMALL_STATE(2645)] = 92546,\n  [SMALL_STATE(2646)] = 92562,\n  [SMALL_STATE(2647)] = 92580,\n  [SMALL_STATE(2648)] = 92596,\n  [SMALL_STATE(2649)] = 92614,\n  [SMALL_STATE(2650)] = 92632,\n  [SMALL_STATE(2651)] = 92650,\n  [SMALL_STATE(2652)] = 92668,\n  [SMALL_STATE(2653)] = 92680,\n  [SMALL_STATE(2654)] = 92702,\n  [SMALL_STATE(2655)] = 92724,\n  [SMALL_STATE(2656)] = 92742,\n  [SMALL_STATE(2657)] = 92758,\n  [SMALL_STATE(2658)] = 92776,\n  [SMALL_STATE(2659)] = 92790,\n  [SMALL_STATE(2660)] = 92802,\n  [SMALL_STATE(2661)] = 92818,\n  [SMALL_STATE(2662)] = 92837,\n  [SMALL_STATE(2663)] = 92848,\n  [SMALL_STATE(2664)] = 92865,\n  [SMALL_STATE(2665)] = 92876,\n  [SMALL_STATE(2666)] = 92893,\n  [SMALL_STATE(2667)] = 92910,\n  [SMALL_STATE(2668)] = 92921,\n  [SMALL_STATE(2669)] = 92932,\n  [SMALL_STATE(2670)] = 92943,\n  [SMALL_STATE(2671)] = 92958,\n  [SMALL_STATE(2672)] = 92971,\n  [SMALL_STATE(2673)] = 92990,\n  [SMALL_STATE(2674)] = 93009,\n  [SMALL_STATE(2675)] = 93026,\n  [SMALL_STATE(2676)] = 93043,\n  [SMALL_STATE(2677)] = 93062,\n  [SMALL_STATE(2678)] = 93081,\n  [SMALL_STATE(2679)] = 93100,\n  [SMALL_STATE(2680)] = 93111,\n  [SMALL_STATE(2681)] = 93122,\n  [SMALL_STATE(2682)] = 93139,\n  [SMALL_STATE(2683)] = 93158,\n  [SMALL_STATE(2684)] = 93177,\n  [SMALL_STATE(2685)] = 93196,\n  [SMALL_STATE(2686)] = 93215,\n  [SMALL_STATE(2687)] = 93226,\n  [SMALL_STATE(2688)] = 93241,\n  [SMALL_STATE(2689)] = 93252,\n  [SMALL_STATE(2690)] = 93269,\n  [SMALL_STATE(2691)] = 93288,\n  [SMALL_STATE(2692)] = 93299,\n  [SMALL_STATE(2693)] = 93318,\n  [SMALL_STATE(2694)] = 93337,\n  [SMALL_STATE(2695)] = 93348,\n  [SMALL_STATE(2696)] = 93363,\n  [SMALL_STATE(2697)] = 93378,\n  [SMALL_STATE(2698)] = 93393,\n  [SMALL_STATE(2699)] = 93412,\n  [SMALL_STATE(2700)] = 93427,\n  [SMALL_STATE(2701)] = 93446,\n  [SMALL_STATE(2702)] = 93465,\n  [SMALL_STATE(2703)] = 93480,\n  [SMALL_STATE(2704)] = 93495,\n  [SMALL_STATE(2705)] = 93506,\n  [SMALL_STATE(2706)] = 93523,\n  [SMALL_STATE(2707)] = 93540,\n  [SMALL_STATE(2708)] = 93551,\n  [SMALL_STATE(2709)] = 93562,\n  [SMALL_STATE(2710)] = 93573,\n  [SMALL_STATE(2711)] = 93584,\n  [SMALL_STATE(2712)] = 93603,\n  [SMALL_STATE(2713)] = 93614,\n  [SMALL_STATE(2714)] = 93631,\n  [SMALL_STATE(2715)] = 93648,\n  [SMALL_STATE(2716)] = 93667,\n  [SMALL_STATE(2717)] = 93686,\n  [SMALL_STATE(2718)] = 93703,\n  [SMALL_STATE(2719)] = 93714,\n  [SMALL_STATE(2720)] = 93733,\n  [SMALL_STATE(2721)] = 93744,\n  [SMALL_STATE(2722)] = 93755,\n  [SMALL_STATE(2723)] = 93770,\n  [SMALL_STATE(2724)] = 93789,\n  [SMALL_STATE(2725)] = 93808,\n  [SMALL_STATE(2726)] = 93827,\n  [SMALL_STATE(2727)] = 93838,\n  [SMALL_STATE(2728)] = 93849,\n  [SMALL_STATE(2729)] = 93868,\n  [SMALL_STATE(2730)] = 93879,\n  [SMALL_STATE(2731)] = 93890,\n  [SMALL_STATE(2732)] = 93909,\n  [SMALL_STATE(2733)] = 93924,\n  [SMALL_STATE(2734)] = 93935,\n  [SMALL_STATE(2735)] = 93950,\n  [SMALL_STATE(2736)] = 93969,\n  [SMALL_STATE(2737)] = 93980,\n  [SMALL_STATE(2738)] = 93991,\n  [SMALL_STATE(2739)] = 94004,\n  [SMALL_STATE(2740)] = 94023,\n  [SMALL_STATE(2741)] = 94042,\n  [SMALL_STATE(2742)] = 94061,\n  [SMALL_STATE(2743)] = 94072,\n  [SMALL_STATE(2744)] = 94083,\n  [SMALL_STATE(2745)] = 94102,\n  [SMALL_STATE(2746)] = 94113,\n  [SMALL_STATE(2747)] = 94130,\n  [SMALL_STATE(2748)] = 94145,\n  [SMALL_STATE(2749)] = 94164,\n  [SMALL_STATE(2750)] = 94175,\n  [SMALL_STATE(2751)] = 94186,\n  [SMALL_STATE(2752)] = 94197,\n  [SMALL_STATE(2753)] = 94208,\n  [SMALL_STATE(2754)] = 94223,\n  [SMALL_STATE(2755)] = 94234,\n  [SMALL_STATE(2756)] = 94253,\n  [SMALL_STATE(2757)] = 94272,\n  [SMALL_STATE(2758)] = 94291,\n  [SMALL_STATE(2759)] = 94302,\n  [SMALL_STATE(2760)] = 94317,\n  [SMALL_STATE(2761)] = 94328,\n  [SMALL_STATE(2762)] = 94339,\n  [SMALL_STATE(2763)] = 94354,\n  [SMALL_STATE(2764)] = 94373,\n  [SMALL_STATE(2765)] = 94384,\n  [SMALL_STATE(2766)] = 94395,\n  [SMALL_STATE(2767)] = 94414,\n  [SMALL_STATE(2768)] = 94425,\n  [SMALL_STATE(2769)] = 94436,\n  [SMALL_STATE(2770)] = 94447,\n  [SMALL_STATE(2771)] = 94458,\n  [SMALL_STATE(2772)] = 94469,\n  [SMALL_STATE(2773)] = 94480,\n  [SMALL_STATE(2774)] = 94491,\n  [SMALL_STATE(2775)] = 94506,\n  [SMALL_STATE(2776)] = 94517,\n  [SMALL_STATE(2777)] = 94528,\n  [SMALL_STATE(2778)] = 94539,\n  [SMALL_STATE(2779)] = 94550,\n  [SMALL_STATE(2780)] = 94561,\n  [SMALL_STATE(2781)] = 94580,\n  [SMALL_STATE(2782)] = 94591,\n  [SMALL_STATE(2783)] = 94610,\n  [SMALL_STATE(2784)] = 94627,\n  [SMALL_STATE(2785)] = 94638,\n  [SMALL_STATE(2786)] = 94649,\n  [SMALL_STATE(2787)] = 94668,\n  [SMALL_STATE(2788)] = 94685,\n  [SMALL_STATE(2789)] = 94696,\n  [SMALL_STATE(2790)] = 94715,\n  [SMALL_STATE(2791)] = 94726,\n  [SMALL_STATE(2792)] = 94743,\n  [SMALL_STATE(2793)] = 94754,\n  [SMALL_STATE(2794)] = 94765,\n  [SMALL_STATE(2795)] = 94776,\n  [SMALL_STATE(2796)] = 94793,\n  [SMALL_STATE(2797)] = 94810,\n  [SMALL_STATE(2798)] = 94827,\n  [SMALL_STATE(2799)] = 94846,\n  [SMALL_STATE(2800)] = 94865,\n  [SMALL_STATE(2801)] = 94876,\n  [SMALL_STATE(2802)] = 94887,\n  [SMALL_STATE(2803)] = 94906,\n  [SMALL_STATE(2804)] = 94925,\n  [SMALL_STATE(2805)] = 94942,\n  [SMALL_STATE(2806)] = 94961,\n  [SMALL_STATE(2807)] = 94972,\n  [SMALL_STATE(2808)] = 94989,\n  [SMALL_STATE(2809)] = 95006,\n  [SMALL_STATE(2810)] = 95017,\n  [SMALL_STATE(2811)] = 95032,\n  [SMALL_STATE(2812)] = 95047,\n  [SMALL_STATE(2813)] = 95066,\n  [SMALL_STATE(2814)] = 95083,\n  [SMALL_STATE(2815)] = 95100,\n  [SMALL_STATE(2816)] = 95119,\n  [SMALL_STATE(2817)] = 95135,\n  [SMALL_STATE(2818)] = 95151,\n  [SMALL_STATE(2819)] = 95165,\n  [SMALL_STATE(2820)] = 95181,\n  [SMALL_STATE(2821)] = 95195,\n  [SMALL_STATE(2822)] = 95211,\n  [SMALL_STATE(2823)] = 95227,\n  [SMALL_STATE(2824)] = 95243,\n  [SMALL_STATE(2825)] = 95259,\n  [SMALL_STATE(2826)] = 95275,\n  [SMALL_STATE(2827)] = 95291,\n  [SMALL_STATE(2828)] = 95307,\n  [SMALL_STATE(2829)] = 95323,\n  [SMALL_STATE(2830)] = 95337,\n  [SMALL_STATE(2831)] = 95351,\n  [SMALL_STATE(2832)] = 95361,\n  [SMALL_STATE(2833)] = 95377,\n  [SMALL_STATE(2834)] = 95393,\n  [SMALL_STATE(2835)] = 95409,\n  [SMALL_STATE(2836)] = 95423,\n  [SMALL_STATE(2837)] = 95439,\n  [SMALL_STATE(2838)] = 95453,\n  [SMALL_STATE(2839)] = 95469,\n  [SMALL_STATE(2840)] = 95483,\n  [SMALL_STATE(2841)] = 95499,\n  [SMALL_STATE(2842)] = 95513,\n  [SMALL_STATE(2843)] = 95527,\n  [SMALL_STATE(2844)] = 95541,\n  [SMALL_STATE(2845)] = 95555,\n  [SMALL_STATE(2846)] = 95569,\n  [SMALL_STATE(2847)] = 95583,\n  [SMALL_STATE(2848)] = 95597,\n  [SMALL_STATE(2849)] = 95611,\n  [SMALL_STATE(2850)] = 95627,\n  [SMALL_STATE(2851)] = 95643,\n  [SMALL_STATE(2852)] = 95657,\n  [SMALL_STATE(2853)] = 95671,\n  [SMALL_STATE(2854)] = 95687,\n  [SMALL_STATE(2855)] = 95703,\n  [SMALL_STATE(2856)] = 95717,\n  [SMALL_STATE(2857)] = 95733,\n  [SMALL_STATE(2858)] = 95747,\n  [SMALL_STATE(2859)] = 95761,\n  [SMALL_STATE(2860)] = 95775,\n  [SMALL_STATE(2861)] = 95789,\n  [SMALL_STATE(2862)] = 95799,\n  [SMALL_STATE(2863)] = 95809,\n  [SMALL_STATE(2864)] = 95825,\n  [SMALL_STATE(2865)] = 95839,\n  [SMALL_STATE(2866)] = 95849,\n  [SMALL_STATE(2867)] = 95865,\n  [SMALL_STATE(2868)] = 95881,\n  [SMALL_STATE(2869)] = 95895,\n  [SMALL_STATE(2870)] = 95905,\n  [SMALL_STATE(2871)] = 95919,\n  [SMALL_STATE(2872)] = 95933,\n  [SMALL_STATE(2873)] = 95949,\n  [SMALL_STATE(2874)] = 95965,\n  [SMALL_STATE(2875)] = 95981,\n  [SMALL_STATE(2876)] = 95997,\n  [SMALL_STATE(2877)] = 96013,\n  [SMALL_STATE(2878)] = 96029,\n  [SMALL_STATE(2879)] = 96045,\n  [SMALL_STATE(2880)] = 96061,\n  [SMALL_STATE(2881)] = 96077,\n  [SMALL_STATE(2882)] = 96093,\n  [SMALL_STATE(2883)] = 96107,\n  [SMALL_STATE(2884)] = 96123,\n  [SMALL_STATE(2885)] = 96139,\n  [SMALL_STATE(2886)] = 96149,\n  [SMALL_STATE(2887)] = 96163,\n  [SMALL_STATE(2888)] = 96179,\n  [SMALL_STATE(2889)] = 96193,\n  [SMALL_STATE(2890)] = 96207,\n  [SMALL_STATE(2891)] = 96221,\n  [SMALL_STATE(2892)] = 96235,\n  [SMALL_STATE(2893)] = 96251,\n  [SMALL_STATE(2894)] = 96267,\n  [SMALL_STATE(2895)] = 96283,\n  [SMALL_STATE(2896)] = 96299,\n  [SMALL_STATE(2897)] = 96315,\n  [SMALL_STATE(2898)] = 96331,\n  [SMALL_STATE(2899)] = 96347,\n  [SMALL_STATE(2900)] = 96357,\n  [SMALL_STATE(2901)] = 96367,\n  [SMALL_STATE(2902)] = 96383,\n  [SMALL_STATE(2903)] = 96397,\n  [SMALL_STATE(2904)] = 96411,\n  [SMALL_STATE(2905)] = 96421,\n  [SMALL_STATE(2906)] = 96431,\n  [SMALL_STATE(2907)] = 96445,\n  [SMALL_STATE(2908)] = 96459,\n  [SMALL_STATE(2909)] = 96473,\n  [SMALL_STATE(2910)] = 96483,\n  [SMALL_STATE(2911)] = 96499,\n  [SMALL_STATE(2912)] = 96515,\n  [SMALL_STATE(2913)] = 96525,\n  [SMALL_STATE(2914)] = 96541,\n  [SMALL_STATE(2915)] = 96557,\n  [SMALL_STATE(2916)] = 96573,\n  [SMALL_STATE(2917)] = 96589,\n  [SMALL_STATE(2918)] = 96603,\n  [SMALL_STATE(2919)] = 96617,\n  [SMALL_STATE(2920)] = 96631,\n  [SMALL_STATE(2921)] = 96647,\n  [SMALL_STATE(2922)] = 96663,\n  [SMALL_STATE(2923)] = 96679,\n  [SMALL_STATE(2924)] = 96695,\n  [SMALL_STATE(2925)] = 96705,\n  [SMALL_STATE(2926)] = 96721,\n  [SMALL_STATE(2927)] = 96731,\n  [SMALL_STATE(2928)] = 96741,\n  [SMALL_STATE(2929)] = 96757,\n  [SMALL_STATE(2930)] = 96773,\n  [SMALL_STATE(2931)] = 96787,\n  [SMALL_STATE(2932)] = 96801,\n  [SMALL_STATE(2933)] = 96811,\n  [SMALL_STATE(2934)] = 96825,\n  [SMALL_STATE(2935)] = 96839,\n  [SMALL_STATE(2936)] = 96855,\n  [SMALL_STATE(2937)] = 96871,\n  [SMALL_STATE(2938)] = 96885,\n  [SMALL_STATE(2939)] = 96895,\n  [SMALL_STATE(2940)] = 96909,\n  [SMALL_STATE(2941)] = 96919,\n  [SMALL_STATE(2942)] = 96933,\n  [SMALL_STATE(2943)] = 96943,\n  [SMALL_STATE(2944)] = 96959,\n  [SMALL_STATE(2945)] = 96975,\n  [SMALL_STATE(2946)] = 96991,\n  [SMALL_STATE(2947)] = 97007,\n  [SMALL_STATE(2948)] = 97021,\n  [SMALL_STATE(2949)] = 97031,\n  [SMALL_STATE(2950)] = 97043,\n  [SMALL_STATE(2951)] = 97059,\n  [SMALL_STATE(2952)] = 97075,\n  [SMALL_STATE(2953)] = 97091,\n  [SMALL_STATE(2954)] = 97101,\n  [SMALL_STATE(2955)] = 97117,\n  [SMALL_STATE(2956)] = 97127,\n  [SMALL_STATE(2957)] = 97143,\n  [SMALL_STATE(2958)] = 97157,\n  [SMALL_STATE(2959)] = 97169,\n  [SMALL_STATE(2960)] = 97183,\n  [SMALL_STATE(2961)] = 97199,\n  [SMALL_STATE(2962)] = 97209,\n  [SMALL_STATE(2963)] = 97225,\n  [SMALL_STATE(2964)] = 97241,\n  [SMALL_STATE(2965)] = 97257,\n  [SMALL_STATE(2966)] = 97273,\n  [SMALL_STATE(2967)] = 97289,\n  [SMALL_STATE(2968)] = 97305,\n  [SMALL_STATE(2969)] = 97321,\n  [SMALL_STATE(2970)] = 97334,\n  [SMALL_STATE(2971)] = 97343,\n  [SMALL_STATE(2972)] = 97352,\n  [SMALL_STATE(2973)] = 97361,\n  [SMALL_STATE(2974)] = 97374,\n  [SMALL_STATE(2975)] = 97387,\n  [SMALL_STATE(2976)] = 97400,\n  [SMALL_STATE(2977)] = 97409,\n  [SMALL_STATE(2978)] = 97422,\n  [SMALL_STATE(2979)] = 97435,\n  [SMALL_STATE(2980)] = 97448,\n  [SMALL_STATE(2981)] = 97461,\n  [SMALL_STATE(2982)] = 97474,\n  [SMALL_STATE(2983)] = 97487,\n  [SMALL_STATE(2984)] = 97500,\n  [SMALL_STATE(2985)] = 97513,\n  [SMALL_STATE(2986)] = 97526,\n  [SMALL_STATE(2987)] = 97539,\n  [SMALL_STATE(2988)] = 97548,\n  [SMALL_STATE(2989)] = 97561,\n  [SMALL_STATE(2990)] = 97570,\n  [SMALL_STATE(2991)] = 97583,\n  [SMALL_STATE(2992)] = 97592,\n  [SMALL_STATE(2993)] = 97605,\n  [SMALL_STATE(2994)] = 97618,\n  [SMALL_STATE(2995)] = 97631,\n  [SMALL_STATE(2996)] = 97644,\n  [SMALL_STATE(2997)] = 97653,\n  [SMALL_STATE(2998)] = 97666,\n  [SMALL_STATE(2999)] = 97675,\n  [SMALL_STATE(3000)] = 97684,\n  [SMALL_STATE(3001)] = 97693,\n  [SMALL_STATE(3002)] = 97706,\n  [SMALL_STATE(3003)] = 97719,\n  [SMALL_STATE(3004)] = 97732,\n  [SMALL_STATE(3005)] = 97745,\n  [SMALL_STATE(3006)] = 97758,\n  [SMALL_STATE(3007)] = 97767,\n  [SMALL_STATE(3008)] = 97780,\n  [SMALL_STATE(3009)] = 97793,\n  [SMALL_STATE(3010)] = 97806,\n  [SMALL_STATE(3011)] = 97815,\n  [SMALL_STATE(3012)] = 97824,\n  [SMALL_STATE(3013)] = 97837,\n  [SMALL_STATE(3014)] = 97846,\n  [SMALL_STATE(3015)] = 97855,\n  [SMALL_STATE(3016)] = 97864,\n  [SMALL_STATE(3017)] = 97877,\n  [SMALL_STATE(3018)] = 97890,\n  [SMALL_STATE(3019)] = 97903,\n  [SMALL_STATE(3020)] = 97912,\n  [SMALL_STATE(3021)] = 97923,\n  [SMALL_STATE(3022)] = 97932,\n  [SMALL_STATE(3023)] = 97945,\n  [SMALL_STATE(3024)] = 97958,\n  [SMALL_STATE(3025)] = 97971,\n  [SMALL_STATE(3026)] = 97984,\n  [SMALL_STATE(3027)] = 97993,\n  [SMALL_STATE(3028)] = 98006,\n  [SMALL_STATE(3029)] = 98019,\n  [SMALL_STATE(3030)] = 98028,\n  [SMALL_STATE(3031)] = 98041,\n  [SMALL_STATE(3032)] = 98052,\n  [SMALL_STATE(3033)] = 98065,\n  [SMALL_STATE(3034)] = 98074,\n  [SMALL_STATE(3035)] = 98087,\n  [SMALL_STATE(3036)] = 98100,\n  [SMALL_STATE(3037)] = 98109,\n  [SMALL_STATE(3038)] = 98122,\n  [SMALL_STATE(3039)] = 98135,\n  [SMALL_STATE(3040)] = 98148,\n  [SMALL_STATE(3041)] = 98161,\n  [SMALL_STATE(3042)] = 98174,\n  [SMALL_STATE(3043)] = 98187,\n  [SMALL_STATE(3044)] = 98200,\n  [SMALL_STATE(3045)] = 98213,\n  [SMALL_STATE(3046)] = 98226,\n  [SMALL_STATE(3047)] = 98239,\n  [SMALL_STATE(3048)] = 98252,\n  [SMALL_STATE(3049)] = 98261,\n  [SMALL_STATE(3050)] = 98274,\n  [SMALL_STATE(3051)] = 98287,\n  [SMALL_STATE(3052)] = 98300,\n  [SMALL_STATE(3053)] = 98309,\n  [SMALL_STATE(3054)] = 98322,\n  [SMALL_STATE(3055)] = 98335,\n  [SMALL_STATE(3056)] = 98346,\n  [SMALL_STATE(3057)] = 98359,\n  [SMALL_STATE(3058)] = 98370,\n  [SMALL_STATE(3059)] = 98379,\n  [SMALL_STATE(3060)] = 98392,\n  [SMALL_STATE(3061)] = 98401,\n  [SMALL_STATE(3062)] = 98410,\n  [SMALL_STATE(3063)] = 98423,\n  [SMALL_STATE(3064)] = 98432,\n  [SMALL_STATE(3065)] = 98443,\n  [SMALL_STATE(3066)] = 98452,\n  [SMALL_STATE(3067)] = 98461,\n  [SMALL_STATE(3068)] = 98474,\n  [SMALL_STATE(3069)] = 98483,\n  [SMALL_STATE(3070)] = 98496,\n  [SMALL_STATE(3071)] = 98507,\n  [SMALL_STATE(3072)] = 98516,\n  [SMALL_STATE(3073)] = 98525,\n  [SMALL_STATE(3074)] = 98534,\n  [SMALL_STATE(3075)] = 98543,\n  [SMALL_STATE(3076)] = 98554,\n  [SMALL_STATE(3077)] = 98563,\n  [SMALL_STATE(3078)] = 98572,\n  [SMALL_STATE(3079)] = 98585,\n  [SMALL_STATE(3080)] = 98594,\n  [SMALL_STATE(3081)] = 98607,\n  [SMALL_STATE(3082)] = 98616,\n  [SMALL_STATE(3083)] = 98629,\n  [SMALL_STATE(3084)] = 98642,\n  [SMALL_STATE(3085)] = 98655,\n  [SMALL_STATE(3086)] = 98668,\n  [SMALL_STATE(3087)] = 98677,\n  [SMALL_STATE(3088)] = 98690,\n  [SMALL_STATE(3089)] = 98703,\n  [SMALL_STATE(3090)] = 98712,\n  [SMALL_STATE(3091)] = 98721,\n  [SMALL_STATE(3092)] = 98734,\n  [SMALL_STATE(3093)] = 98747,\n  [SMALL_STATE(3094)] = 98756,\n  [SMALL_STATE(3095)] = 98769,\n  [SMALL_STATE(3096)] = 98780,\n  [SMALL_STATE(3097)] = 98789,\n  [SMALL_STATE(3098)] = 98800,\n  [SMALL_STATE(3099)] = 98813,\n  [SMALL_STATE(3100)] = 98826,\n  [SMALL_STATE(3101)] = 98839,\n  [SMALL_STATE(3102)] = 98852,\n  [SMALL_STATE(3103)] = 98863,\n  [SMALL_STATE(3104)] = 98876,\n  [SMALL_STATE(3105)] = 98889,\n  [SMALL_STATE(3106)] = 98902,\n  [SMALL_STATE(3107)] = 98915,\n  [SMALL_STATE(3108)] = 98928,\n  [SMALL_STATE(3109)] = 98941,\n  [SMALL_STATE(3110)] = 98950,\n  [SMALL_STATE(3111)] = 98963,\n  [SMALL_STATE(3112)] = 98976,\n  [SMALL_STATE(3113)] = 98989,\n  [SMALL_STATE(3114)] = 99002,\n  [SMALL_STATE(3115)] = 99015,\n  [SMALL_STATE(3116)] = 99028,\n  [SMALL_STATE(3117)] = 99037,\n  [SMALL_STATE(3118)] = 99050,\n  [SMALL_STATE(3119)] = 99063,\n  [SMALL_STATE(3120)] = 99076,\n  [SMALL_STATE(3121)] = 99089,\n  [SMALL_STATE(3122)] = 99102,\n  [SMALL_STATE(3123)] = 99113,\n  [SMALL_STATE(3124)] = 99124,\n  [SMALL_STATE(3125)] = 99137,\n  [SMALL_STATE(3126)] = 99146,\n  [SMALL_STATE(3127)] = 99157,\n  [SMALL_STATE(3128)] = 99170,\n  [SMALL_STATE(3129)] = 99183,\n  [SMALL_STATE(3130)] = 99194,\n  [SMALL_STATE(3131)] = 99207,\n  [SMALL_STATE(3132)] = 99220,\n  [SMALL_STATE(3133)] = 99233,\n  [SMALL_STATE(3134)] = 99246,\n  [SMALL_STATE(3135)] = 99259,\n  [SMALL_STATE(3136)] = 99272,\n  [SMALL_STATE(3137)] = 99285,\n  [SMALL_STATE(3138)] = 99296,\n  [SMALL_STATE(3139)] = 99309,\n  [SMALL_STATE(3140)] = 99322,\n  [SMALL_STATE(3141)] = 99335,\n  [SMALL_STATE(3142)] = 99348,\n  [SMALL_STATE(3143)] = 99361,\n  [SMALL_STATE(3144)] = 99374,\n  [SMALL_STATE(3145)] = 99387,\n  [SMALL_STATE(3146)] = 99400,\n  [SMALL_STATE(3147)] = 99411,\n  [SMALL_STATE(3148)] = 99424,\n  [SMALL_STATE(3149)] = 99437,\n  [SMALL_STATE(3150)] = 99448,\n  [SMALL_STATE(3151)] = 99461,\n  [SMALL_STATE(3152)] = 99474,\n  [SMALL_STATE(3153)] = 99485,\n  [SMALL_STATE(3154)] = 99498,\n  [SMALL_STATE(3155)] = 99511,\n  [SMALL_STATE(3156)] = 99520,\n  [SMALL_STATE(3157)] = 99533,\n  [SMALL_STATE(3158)] = 99546,\n  [SMALL_STATE(3159)] = 99557,\n  [SMALL_STATE(3160)] = 99570,\n  [SMALL_STATE(3161)] = 99583,\n  [SMALL_STATE(3162)] = 99596,\n  [SMALL_STATE(3163)] = 99609,\n  [SMALL_STATE(3164)] = 99622,\n  [SMALL_STATE(3165)] = 99635,\n  [SMALL_STATE(3166)] = 99644,\n  [SMALL_STATE(3167)] = 99657,\n  [SMALL_STATE(3168)] = 99670,\n  [SMALL_STATE(3169)] = 99683,\n  [SMALL_STATE(3170)] = 99694,\n  [SMALL_STATE(3171)] = 99707,\n  [SMALL_STATE(3172)] = 99720,\n  [SMALL_STATE(3173)] = 99733,\n  [SMALL_STATE(3174)] = 99746,\n  [SMALL_STATE(3175)] = 99756,\n  [SMALL_STATE(3176)] = 99766,\n  [SMALL_STATE(3177)] = 99774,\n  [SMALL_STATE(3178)] = 99784,\n  [SMALL_STATE(3179)] = 99794,\n  [SMALL_STATE(3180)] = 99804,\n  [SMALL_STATE(3181)] = 99814,\n  [SMALL_STATE(3182)] = 99824,\n  [SMALL_STATE(3183)] = 99834,\n  [SMALL_STATE(3184)] = 99844,\n  [SMALL_STATE(3185)] = 99854,\n  [SMALL_STATE(3186)] = 99862,\n  [SMALL_STATE(3187)] = 99872,\n  [SMALL_STATE(3188)] = 99882,\n  [SMALL_STATE(3189)] = 99892,\n  [SMALL_STATE(3190)] = 99902,\n  [SMALL_STATE(3191)] = 99912,\n  [SMALL_STATE(3192)] = 99922,\n  [SMALL_STATE(3193)] = 99932,\n  [SMALL_STATE(3194)] = 99942,\n  [SMALL_STATE(3195)] = 99952,\n  [SMALL_STATE(3196)] = 99962,\n  [SMALL_STATE(3197)] = 99972,\n  [SMALL_STATE(3198)] = 99980,\n  [SMALL_STATE(3199)] = 99990,\n  [SMALL_STATE(3200)] = 100000,\n  [SMALL_STATE(3201)] = 100008,\n  [SMALL_STATE(3202)] = 100018,\n  [SMALL_STATE(3203)] = 100026,\n  [SMALL_STATE(3204)] = 100036,\n  [SMALL_STATE(3205)] = 100046,\n  [SMALL_STATE(3206)] = 100054,\n  [SMALL_STATE(3207)] = 100064,\n  [SMALL_STATE(3208)] = 100074,\n  [SMALL_STATE(3209)] = 100082,\n  [SMALL_STATE(3210)] = 100092,\n  [SMALL_STATE(3211)] = 100102,\n  [SMALL_STATE(3212)] = 100112,\n  [SMALL_STATE(3213)] = 100122,\n  [SMALL_STATE(3214)] = 100132,\n  [SMALL_STATE(3215)] = 100142,\n  [SMALL_STATE(3216)] = 100152,\n  [SMALL_STATE(3217)] = 100162,\n  [SMALL_STATE(3218)] = 100172,\n  [SMALL_STATE(3219)] = 100182,\n  [SMALL_STATE(3220)] = 100192,\n  [SMALL_STATE(3221)] = 100202,\n  [SMALL_STATE(3222)] = 100210,\n  [SMALL_STATE(3223)] = 100220,\n  [SMALL_STATE(3224)] = 100230,\n  [SMALL_STATE(3225)] = 100240,\n  [SMALL_STATE(3226)] = 100250,\n  [SMALL_STATE(3227)] = 100260,\n  [SMALL_STATE(3228)] = 100268,\n  [SMALL_STATE(3229)] = 100278,\n  [SMALL_STATE(3230)] = 100288,\n  [SMALL_STATE(3231)] = 100298,\n  [SMALL_STATE(3232)] = 100308,\n  [SMALL_STATE(3233)] = 100318,\n  [SMALL_STATE(3234)] = 100328,\n  [SMALL_STATE(3235)] = 100338,\n  [SMALL_STATE(3236)] = 100346,\n  [SMALL_STATE(3237)] = 100356,\n  [SMALL_STATE(3238)] = 100364,\n  [SMALL_STATE(3239)] = 100374,\n  [SMALL_STATE(3240)] = 100382,\n  [SMALL_STATE(3241)] = 100392,\n  [SMALL_STATE(3242)] = 100402,\n  [SMALL_STATE(3243)] = 100410,\n  [SMALL_STATE(3244)] = 100420,\n  [SMALL_STATE(3245)] = 100430,\n  [SMALL_STATE(3246)] = 100440,\n  [SMALL_STATE(3247)] = 100450,\n  [SMALL_STATE(3248)] = 100460,\n  [SMALL_STATE(3249)] = 100468,\n  [SMALL_STATE(3250)] = 100478,\n  [SMALL_STATE(3251)] = 100488,\n  [SMALL_STATE(3252)] = 100496,\n  [SMALL_STATE(3253)] = 100504,\n  [SMALL_STATE(3254)] = 100512,\n  [SMALL_STATE(3255)] = 100522,\n  [SMALL_STATE(3256)] = 100532,\n  [SMALL_STATE(3257)] = 100542,\n  [SMALL_STATE(3258)] = 100550,\n  [SMALL_STATE(3259)] = 100560,\n  [SMALL_STATE(3260)] = 100570,\n  [SMALL_STATE(3261)] = 100580,\n  [SMALL_STATE(3262)] = 100590,\n  [SMALL_STATE(3263)] = 100600,\n  [SMALL_STATE(3264)] = 100610,\n  [SMALL_STATE(3265)] = 100620,\n  [SMALL_STATE(3266)] = 100628,\n  [SMALL_STATE(3267)] = 100638,\n  [SMALL_STATE(3268)] = 100648,\n  [SMALL_STATE(3269)] = 100656,\n  [SMALL_STATE(3270)] = 100666,\n  [SMALL_STATE(3271)] = 100674,\n  [SMALL_STATE(3272)] = 100684,\n  [SMALL_STATE(3273)] = 100694,\n  [SMALL_STATE(3274)] = 100704,\n  [SMALL_STATE(3275)] = 100714,\n  [SMALL_STATE(3276)] = 100724,\n  [SMALL_STATE(3277)] = 100734,\n  [SMALL_STATE(3278)] = 100744,\n  [SMALL_STATE(3279)] = 100752,\n  [SMALL_STATE(3280)] = 100760,\n  [SMALL_STATE(3281)] = 100770,\n  [SMALL_STATE(3282)] = 100778,\n  [SMALL_STATE(3283)] = 100788,\n  [SMALL_STATE(3284)] = 100798,\n  [SMALL_STATE(3285)] = 100806,\n  [SMALL_STATE(3286)] = 100814,\n  [SMALL_STATE(3287)] = 100824,\n  [SMALL_STATE(3288)] = 100834,\n  [SMALL_STATE(3289)] = 100842,\n  [SMALL_STATE(3290)] = 100852,\n  [SMALL_STATE(3291)] = 100862,\n  [SMALL_STATE(3292)] = 100872,\n  [SMALL_STATE(3293)] = 100880,\n  [SMALL_STATE(3294)] = 100890,\n  [SMALL_STATE(3295)] = 100898,\n  [SMALL_STATE(3296)] = 100908,\n  [SMALL_STATE(3297)] = 100918,\n  [SMALL_STATE(3298)] = 100928,\n  [SMALL_STATE(3299)] = 100936,\n  [SMALL_STATE(3300)] = 100946,\n  [SMALL_STATE(3301)] = 100954,\n  [SMALL_STATE(3302)] = 100962,\n  [SMALL_STATE(3303)] = 100970,\n  [SMALL_STATE(3304)] = 100978,\n  [SMALL_STATE(3305)] = 100986,\n  [SMALL_STATE(3306)] = 100994,\n  [SMALL_STATE(3307)] = 101004,\n  [SMALL_STATE(3308)] = 101012,\n  [SMALL_STATE(3309)] = 101022,\n  [SMALL_STATE(3310)] = 101030,\n  [SMALL_STATE(3311)] = 101040,\n  [SMALL_STATE(3312)] = 101050,\n  [SMALL_STATE(3313)] = 101060,\n  [SMALL_STATE(3314)] = 101070,\n  [SMALL_STATE(3315)] = 101080,\n  [SMALL_STATE(3316)] = 101088,\n  [SMALL_STATE(3317)] = 101096,\n  [SMALL_STATE(3318)] = 101106,\n  [SMALL_STATE(3319)] = 101116,\n  [SMALL_STATE(3320)] = 101126,\n  [SMALL_STATE(3321)] = 101136,\n  [SMALL_STATE(3322)] = 101146,\n  [SMALL_STATE(3323)] = 101156,\n  [SMALL_STATE(3324)] = 101166,\n  [SMALL_STATE(3325)] = 101176,\n  [SMALL_STATE(3326)] = 101186,\n  [SMALL_STATE(3327)] = 101196,\n  [SMALL_STATE(3328)] = 101206,\n  [SMALL_STATE(3329)] = 101214,\n  [SMALL_STATE(3330)] = 101224,\n  [SMALL_STATE(3331)] = 101234,\n  [SMALL_STATE(3332)] = 101242,\n  [SMALL_STATE(3333)] = 101252,\n  [SMALL_STATE(3334)] = 101262,\n  [SMALL_STATE(3335)] = 101272,\n  [SMALL_STATE(3336)] = 101282,\n  [SMALL_STATE(3337)] = 101290,\n  [SMALL_STATE(3338)] = 101300,\n  [SMALL_STATE(3339)] = 101308,\n  [SMALL_STATE(3340)] = 101316,\n  [SMALL_STATE(3341)] = 101326,\n  [SMALL_STATE(3342)] = 101334,\n  [SMALL_STATE(3343)] = 101344,\n  [SMALL_STATE(3344)] = 101354,\n  [SMALL_STATE(3345)] = 101364,\n  [SMALL_STATE(3346)] = 101372,\n  [SMALL_STATE(3347)] = 101382,\n  [SMALL_STATE(3348)] = 101390,\n  [SMALL_STATE(3349)] = 101400,\n  [SMALL_STATE(3350)] = 101410,\n  [SMALL_STATE(3351)] = 101420,\n  [SMALL_STATE(3352)] = 101430,\n  [SMALL_STATE(3353)] = 101440,\n  [SMALL_STATE(3354)] = 101450,\n  [SMALL_STATE(3355)] = 101460,\n  [SMALL_STATE(3356)] = 101470,\n  [SMALL_STATE(3357)] = 101480,\n  [SMALL_STATE(3358)] = 101490,\n  [SMALL_STATE(3359)] = 101500,\n  [SMALL_STATE(3360)] = 101510,\n  [SMALL_STATE(3361)] = 101520,\n  [SMALL_STATE(3362)] = 101530,\n  [SMALL_STATE(3363)] = 101538,\n  [SMALL_STATE(3364)] = 101548,\n  [SMALL_STATE(3365)] = 101558,\n  [SMALL_STATE(3366)] = 101568,\n  [SMALL_STATE(3367)] = 101578,\n  [SMALL_STATE(3368)] = 101588,\n  [SMALL_STATE(3369)] = 101598,\n  [SMALL_STATE(3370)] = 101606,\n  [SMALL_STATE(3371)] = 101614,\n  [SMALL_STATE(3372)] = 101624,\n  [SMALL_STATE(3373)] = 101634,\n  [SMALL_STATE(3374)] = 101644,\n  [SMALL_STATE(3375)] = 101654,\n  [SMALL_STATE(3376)] = 101664,\n  [SMALL_STATE(3377)] = 101674,\n  [SMALL_STATE(3378)] = 101684,\n  [SMALL_STATE(3379)] = 101694,\n  [SMALL_STATE(3380)] = 101704,\n  [SMALL_STATE(3381)] = 101714,\n  [SMALL_STATE(3382)] = 101724,\n  [SMALL_STATE(3383)] = 101732,\n  [SMALL_STATE(3384)] = 101742,\n  [SMALL_STATE(3385)] = 101752,\n  [SMALL_STATE(3386)] = 101759,\n  [SMALL_STATE(3387)] = 101766,\n  [SMALL_STATE(3388)] = 101773,\n  [SMALL_STATE(3389)] = 101780,\n  [SMALL_STATE(3390)] = 101787,\n  [SMALL_STATE(3391)] = 101794,\n  [SMALL_STATE(3392)] = 101801,\n  [SMALL_STATE(3393)] = 101808,\n  [SMALL_STATE(3394)] = 101815,\n  [SMALL_STATE(3395)] = 101822,\n  [SMALL_STATE(3396)] = 101829,\n  [SMALL_STATE(3397)] = 101836,\n  [SMALL_STATE(3398)] = 101843,\n  [SMALL_STATE(3399)] = 101850,\n  [SMALL_STATE(3400)] = 101857,\n  [SMALL_STATE(3401)] = 101864,\n  [SMALL_STATE(3402)] = 101871,\n  [SMALL_STATE(3403)] = 101878,\n  [SMALL_STATE(3404)] = 101885,\n  [SMALL_STATE(3405)] = 101892,\n  [SMALL_STATE(3406)] = 101899,\n  [SMALL_STATE(3407)] = 101906,\n  [SMALL_STATE(3408)] = 101913,\n  [SMALL_STATE(3409)] = 101920,\n  [SMALL_STATE(3410)] = 101927,\n  [SMALL_STATE(3411)] = 101934,\n  [SMALL_STATE(3412)] = 101941,\n  [SMALL_STATE(3413)] = 101948,\n  [SMALL_STATE(3414)] = 101955,\n  [SMALL_STATE(3415)] = 101962,\n  [SMALL_STATE(3416)] = 101969,\n  [SMALL_STATE(3417)] = 101976,\n  [SMALL_STATE(3418)] = 101983,\n  [SMALL_STATE(3419)] = 101990,\n  [SMALL_STATE(3420)] = 101997,\n  [SMALL_STATE(3421)] = 102004,\n  [SMALL_STATE(3422)] = 102011,\n  [SMALL_STATE(3423)] = 102018,\n  [SMALL_STATE(3424)] = 102025,\n  [SMALL_STATE(3425)] = 102032,\n  [SMALL_STATE(3426)] = 102039,\n  [SMALL_STATE(3427)] = 102046,\n  [SMALL_STATE(3428)] = 102053,\n  [SMALL_STATE(3429)] = 102060,\n  [SMALL_STATE(3430)] = 102067,\n  [SMALL_STATE(3431)] = 102074,\n  [SMALL_STATE(3432)] = 102081,\n  [SMALL_STATE(3433)] = 102088,\n  [SMALL_STATE(3434)] = 102095,\n  [SMALL_STATE(3435)] = 102102,\n  [SMALL_STATE(3436)] = 102109,\n  [SMALL_STATE(3437)] = 102116,\n  [SMALL_STATE(3438)] = 102123,\n  [SMALL_STATE(3439)] = 102130,\n  [SMALL_STATE(3440)] = 102137,\n  [SMALL_STATE(3441)] = 102144,\n  [SMALL_STATE(3442)] = 102151,\n  [SMALL_STATE(3443)] = 102158,\n  [SMALL_STATE(3444)] = 102165,\n  [SMALL_STATE(3445)] = 102172,\n  [SMALL_STATE(3446)] = 102179,\n  [SMALL_STATE(3447)] = 102186,\n  [SMALL_STATE(3448)] = 102193,\n  [SMALL_STATE(3449)] = 102200,\n  [SMALL_STATE(3450)] = 102207,\n  [SMALL_STATE(3451)] = 102214,\n  [SMALL_STATE(3452)] = 102221,\n  [SMALL_STATE(3453)] = 102228,\n  [SMALL_STATE(3454)] = 102235,\n  [SMALL_STATE(3455)] = 102242,\n  [SMALL_STATE(3456)] = 102249,\n  [SMALL_STATE(3457)] = 102256,\n  [SMALL_STATE(3458)] = 102263,\n  [SMALL_STATE(3459)] = 102270,\n  [SMALL_STATE(3460)] = 102277,\n  [SMALL_STATE(3461)] = 102284,\n  [SMALL_STATE(3462)] = 102291,\n  [SMALL_STATE(3463)] = 102298,\n  [SMALL_STATE(3464)] = 102305,\n  [SMALL_STATE(3465)] = 102312,\n  [SMALL_STATE(3466)] = 102319,\n  [SMALL_STATE(3467)] = 102326,\n  [SMALL_STATE(3468)] = 102333,\n  [SMALL_STATE(3469)] = 102340,\n  [SMALL_STATE(3470)] = 102347,\n  [SMALL_STATE(3471)] = 102354,\n  [SMALL_STATE(3472)] = 102361,\n  [SMALL_STATE(3473)] = 102368,\n  [SMALL_STATE(3474)] = 102375,\n  [SMALL_STATE(3475)] = 102382,\n  [SMALL_STATE(3476)] = 102389,\n  [SMALL_STATE(3477)] = 102396,\n  [SMALL_STATE(3478)] = 102403,\n  [SMALL_STATE(3479)] = 102410,\n  [SMALL_STATE(3480)] = 102417,\n  [SMALL_STATE(3481)] = 102424,\n  [SMALL_STATE(3482)] = 102431,\n  [SMALL_STATE(3483)] = 102438,\n  [SMALL_STATE(3484)] = 102445,\n  [SMALL_STATE(3485)] = 102452,\n  [SMALL_STATE(3486)] = 102459,\n  [SMALL_STATE(3487)] = 102466,\n  [SMALL_STATE(3488)] = 102473,\n  [SMALL_STATE(3489)] = 102480,\n  [SMALL_STATE(3490)] = 102487,\n  [SMALL_STATE(3491)] = 102494,\n  [SMALL_STATE(3492)] = 102501,\n  [SMALL_STATE(3493)] = 102508,\n  [SMALL_STATE(3494)] = 102515,\n  [SMALL_STATE(3495)] = 102522,\n  [SMALL_STATE(3496)] = 102529,\n  [SMALL_STATE(3497)] = 102536,\n  [SMALL_STATE(3498)] = 102543,\n  [SMALL_STATE(3499)] = 102550,\n  [SMALL_STATE(3500)] = 102557,\n  [SMALL_STATE(3501)] = 102564,\n  [SMALL_STATE(3502)] = 102571,\n  [SMALL_STATE(3503)] = 102578,\n  [SMALL_STATE(3504)] = 102585,\n  [SMALL_STATE(3505)] = 102592,\n  [SMALL_STATE(3506)] = 102599,\n  [SMALL_STATE(3507)] = 102606,\n  [SMALL_STATE(3508)] = 102613,\n  [SMALL_STATE(3509)] = 102620,\n  [SMALL_STATE(3510)] = 102627,\n  [SMALL_STATE(3511)] = 102634,\n  [SMALL_STATE(3512)] = 102641,\n  [SMALL_STATE(3513)] = 102648,\n  [SMALL_STATE(3514)] = 102655,\n  [SMALL_STATE(3515)] = 102662,\n  [SMALL_STATE(3516)] = 102669,\n  [SMALL_STATE(3517)] = 102676,\n  [SMALL_STATE(3518)] = 102683,\n  [SMALL_STATE(3519)] = 102690,\n  [SMALL_STATE(3520)] = 102697,\n  [SMALL_STATE(3521)] = 102704,\n  [SMALL_STATE(3522)] = 102711,\n  [SMALL_STATE(3523)] = 102718,\n  [SMALL_STATE(3524)] = 102725,\n  [SMALL_STATE(3525)] = 102732,\n  [SMALL_STATE(3526)] = 102739,\n  [SMALL_STATE(3527)] = 102746,\n  [SMALL_STATE(3528)] = 102753,\n  [SMALL_STATE(3529)] = 102760,\n  [SMALL_STATE(3530)] = 102767,\n  [SMALL_STATE(3531)] = 102774,\n  [SMALL_STATE(3532)] = 102781,\n  [SMALL_STATE(3533)] = 102788,\n  [SMALL_STATE(3534)] = 102795,\n  [SMALL_STATE(3535)] = 102802,\n  [SMALL_STATE(3536)] = 102809,\n  [SMALL_STATE(3537)] = 102816,\n  [SMALL_STATE(3538)] = 102823,\n  [SMALL_STATE(3539)] = 102830,\n  [SMALL_STATE(3540)] = 102837,\n  [SMALL_STATE(3541)] = 102844,\n  [SMALL_STATE(3542)] = 102851,\n  [SMALL_STATE(3543)] = 102858,\n  [SMALL_STATE(3544)] = 102865,\n  [SMALL_STATE(3545)] = 102872,\n  [SMALL_STATE(3546)] = 102879,\n  [SMALL_STATE(3547)] = 102886,\n  [SMALL_STATE(3548)] = 102893,\n  [SMALL_STATE(3549)] = 102900,\n  [SMALL_STATE(3550)] = 102907,\n  [SMALL_STATE(3551)] = 102914,\n  [SMALL_STATE(3552)] = 102921,\n  [SMALL_STATE(3553)] = 102928,\n  [SMALL_STATE(3554)] = 102935,\n  [SMALL_STATE(3555)] = 102942,\n  [SMALL_STATE(3556)] = 102949,\n  [SMALL_STATE(3557)] = 102956,\n  [SMALL_STATE(3558)] = 102963,\n  [SMALL_STATE(3559)] = 102970,\n  [SMALL_STATE(3560)] = 102977,\n  [SMALL_STATE(3561)] = 102984,\n  [SMALL_STATE(3562)] = 102991,\n  [SMALL_STATE(3563)] = 102998,\n  [SMALL_STATE(3564)] = 103005,\n  [SMALL_STATE(3565)] = 103012,\n  [SMALL_STATE(3566)] = 103019,\n  [SMALL_STATE(3567)] = 103026,\n  [SMALL_STATE(3568)] = 103033,\n  [SMALL_STATE(3569)] = 103040,\n  [SMALL_STATE(3570)] = 103047,\n  [SMALL_STATE(3571)] = 103054,\n  [SMALL_STATE(3572)] = 103061,\n  [SMALL_STATE(3573)] = 103068,\n  [SMALL_STATE(3574)] = 103075,\n  [SMALL_STATE(3575)] = 103082,\n  [SMALL_STATE(3576)] = 103089,\n  [SMALL_STATE(3577)] = 103096,\n  [SMALL_STATE(3578)] = 103103,\n  [SMALL_STATE(3579)] = 103110,\n  [SMALL_STATE(3580)] = 103117,\n  [SMALL_STATE(3581)] = 103124,\n  [SMALL_STATE(3582)] = 103131,\n  [SMALL_STATE(3583)] = 103138,\n  [SMALL_STATE(3584)] = 103145,\n  [SMALL_STATE(3585)] = 103152,\n  [SMALL_STATE(3586)] = 103159,\n  [SMALL_STATE(3587)] = 103166,\n  [SMALL_STATE(3588)] = 103173,\n  [SMALL_STATE(3589)] = 103180,\n  [SMALL_STATE(3590)] = 103187,\n  [SMALL_STATE(3591)] = 103194,\n  [SMALL_STATE(3592)] = 103201,\n  [SMALL_STATE(3593)] = 103208,\n  [SMALL_STATE(3594)] = 103215,\n  [SMALL_STATE(3595)] = 103222,\n  [SMALL_STATE(3596)] = 103229,\n  [SMALL_STATE(3597)] = 103236,\n  [SMALL_STATE(3598)] = 103243,\n  [SMALL_STATE(3599)] = 103250,\n  [SMALL_STATE(3600)] = 103257,\n  [SMALL_STATE(3601)] = 103264,\n  [SMALL_STATE(3602)] = 103271,\n  [SMALL_STATE(3603)] = 103278,\n  [SMALL_STATE(3604)] = 103285,\n  [SMALL_STATE(3605)] = 103292,\n  [SMALL_STATE(3606)] = 103299,\n  [SMALL_STATE(3607)] = 103306,\n  [SMALL_STATE(3608)] = 103313,\n  [SMALL_STATE(3609)] = 103320,\n  [SMALL_STATE(3610)] = 103327,\n  [SMALL_STATE(3611)] = 103334,\n  [SMALL_STATE(3612)] = 103341,\n  [SMALL_STATE(3613)] = 103348,\n  [SMALL_STATE(3614)] = 103355,\n  [SMALL_STATE(3615)] = 103362,\n  [SMALL_STATE(3616)] = 103369,\n  [SMALL_STATE(3617)] = 103376,\n  [SMALL_STATE(3618)] = 103383,\n  [SMALL_STATE(3619)] = 103390,\n  [SMALL_STATE(3620)] = 103397,\n  [SMALL_STATE(3621)] = 103404,\n  [SMALL_STATE(3622)] = 103411,\n  [SMALL_STATE(3623)] = 103418,\n  [SMALL_STATE(3624)] = 103425,\n  [SMALL_STATE(3625)] = 103432,\n  [SMALL_STATE(3626)] = 103439,\n  [SMALL_STATE(3627)] = 103446,\n  [SMALL_STATE(3628)] = 103453,\n  [SMALL_STATE(3629)] = 103460,\n  [SMALL_STATE(3630)] = 103467,\n  [SMALL_STATE(3631)] = 103474,\n  [SMALL_STATE(3632)] = 103481,\n  [SMALL_STATE(3633)] = 103488,\n  [SMALL_STATE(3634)] = 103495,\n  [SMALL_STATE(3635)] = 103502,\n  [SMALL_STATE(3636)] = 103509,\n  [SMALL_STATE(3637)] = 103516,\n  [SMALL_STATE(3638)] = 103523,\n  [SMALL_STATE(3639)] = 103530,\n  [SMALL_STATE(3640)] = 103537,\n  [SMALL_STATE(3641)] = 103544,\n  [SMALL_STATE(3642)] = 103551,\n  [SMALL_STATE(3643)] = 103558,\n  [SMALL_STATE(3644)] = 103565,\n  [SMALL_STATE(3645)] = 103572,\n  [SMALL_STATE(3646)] = 103579,\n  [SMALL_STATE(3647)] = 103586,\n  [SMALL_STATE(3648)] = 103593,\n  [SMALL_STATE(3649)] = 103600,\n  [SMALL_STATE(3650)] = 103607,\n  [SMALL_STATE(3651)] = 103614,\n  [SMALL_STATE(3652)] = 103621,\n  [SMALL_STATE(3653)] = 103628,\n  [SMALL_STATE(3654)] = 103635,\n  [SMALL_STATE(3655)] = 103642,\n  [SMALL_STATE(3656)] = 103649,\n  [SMALL_STATE(3657)] = 103656,\n  [SMALL_STATE(3658)] = 103663,\n  [SMALL_STATE(3659)] = 103670,\n  [SMALL_STATE(3660)] = 103677,\n  [SMALL_STATE(3661)] = 103684,\n  [SMALL_STATE(3662)] = 103691,\n  [SMALL_STATE(3663)] = 103698,\n  [SMALL_STATE(3664)] = 103705,\n  [SMALL_STATE(3665)] = 103712,\n  [SMALL_STATE(3666)] = 103719,\n  [SMALL_STATE(3667)] = 103726,\n  [SMALL_STATE(3668)] = 103733,\n  [SMALL_STATE(3669)] = 103740,\n  [SMALL_STATE(3670)] = 103747,\n  [SMALL_STATE(3671)] = 103754,\n  [SMALL_STATE(3672)] = 103761,\n  [SMALL_STATE(3673)] = 103768,\n  [SMALL_STATE(3674)] = 103775,\n  [SMALL_STATE(3675)] = 103782,\n  [SMALL_STATE(3676)] = 103789,\n  [SMALL_STATE(3677)] = 103796,\n  [SMALL_STATE(3678)] = 103803,\n  [SMALL_STATE(3679)] = 103810,\n  [SMALL_STATE(3680)] = 103817,\n  [SMALL_STATE(3681)] = 103824,\n  [SMALL_STATE(3682)] = 103831,\n  [SMALL_STATE(3683)] = 103838,\n  [SMALL_STATE(3684)] = 103845,\n  [SMALL_STATE(3685)] = 103852,\n  [SMALL_STATE(3686)] = 103859,\n  [SMALL_STATE(3687)] = 103866,\n  [SMALL_STATE(3688)] = 103873,\n  [SMALL_STATE(3689)] = 103880,\n  [SMALL_STATE(3690)] = 103887,\n  [SMALL_STATE(3691)] = 103894,\n  [SMALL_STATE(3692)] = 103901,\n  [SMALL_STATE(3693)] = 103908,\n  [SMALL_STATE(3694)] = 103915,\n  [SMALL_STATE(3695)] = 103922,\n  [SMALL_STATE(3696)] = 103929,\n  [SMALL_STATE(3697)] = 103936,\n  [SMALL_STATE(3698)] = 103943,\n};\n\nstatic const TSParseActionEntry ts_parse_actions[] = {\n  [0] = {.entry = {.count = 0, .reusable = false}},\n  [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),\n  [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(),\n  [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 0),\n  [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1005),\n  [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21),\n  [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(657),\n  [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(997),\n  [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1035),\n  [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(919),\n  [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),\n  [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(430),\n  [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1211),\n  [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2455),\n  [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2457),\n  [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2394),\n  [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(430),\n  [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3182),\n  [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3183),\n  [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3166),\n  [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102),\n  [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(450),\n  [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3186),\n  [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46),\n  [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3187),\n  [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3191),\n  [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3152),\n  [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3149),\n  [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3197),\n  [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(196),\n  [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(259),\n  [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(528),\n  [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90),\n  [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143),\n  [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3205),\n  [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(694),\n  [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3668),\n  [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1033),\n  [75] = {.entry = {.count = 1, .reusable = false}}, SHIFT(477),\n  [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1031),\n  [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2551),\n  [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(234),\n  [83] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348),\n  [85] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2837),\n  [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2844),\n  [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2557),\n  [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1847),\n  [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1847),\n  [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1855),\n  [97] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3119),\n  [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1074),\n  [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(655),\n  [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(916),\n  [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1029),\n  [107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3643),\n  [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2763),\n  [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3641),\n  [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2590),\n  [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(972),\n  [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1013),\n  [119] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1), SHIFT(444),\n  [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1),\n  [124] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886),\n  [126] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2165),\n  [128] = {.entry = {.count = 1, .reusable = false}}, SHIFT(721),\n  [130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1),\n  [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(197),\n  [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1695),\n  [137] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(330),\n  [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68),\n  [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(329),\n  [144] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1),\n  [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95),\n  [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69),\n  [151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(3682),\n  [154] = {.entry = {.count = 1, .reusable = false}}, SHIFT(473),\n  [156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2576),\n  [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274),\n  [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1),\n  [162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241),\n  [164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__augmented_assignment_lhs, 1, .production_id = 1),\n  [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379),\n  [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(812),\n  [170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(777),\n  [172] = {.entry = {.count = 1, .reusable = false}}, SHIFT(327),\n  [174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330),\n  [176] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155),\n  [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330),\n  [180] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(390),\n  [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2917),\n  [185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2918),\n  [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2420),\n  [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1877),\n  [191] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1628),\n  [193] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1720),\n  [195] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1877),\n  [197] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1722),\n  [199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(820),\n  [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109),\n  [203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1049),\n  [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(979),\n  [207] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3455),\n  [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2587),\n  [211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3454),\n  [213] = {.entry = {.count = 1, .reusable = false}}, SHIFT(761),\n  [215] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2095),\n  [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(883),\n  [219] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1), SHIFT(388),\n  [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1),\n  [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1),\n  [226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247),\n  [228] = {.entry = {.count = 1, .reusable = false}}, SHIFT(928),\n  [230] = {.entry = {.count = 1, .reusable = false}}, SHIFT(507),\n  [232] = {.entry = {.count = 1, .reusable = false}}, SHIFT(915),\n  [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(941),\n  [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(877),\n  [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987),\n  [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1679),\n  [242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146),\n  [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(946),\n  [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(471),\n  [248] = {.entry = {.count = 1, .reusable = false}}, SHIFT(468),\n  [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442),\n  [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1972),\n  [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3549),\n  [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(902),\n  [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(523),\n  [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(976),\n  [262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(939),\n  [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(881),\n  [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(942),\n  [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1703),\n  [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121),\n  [272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(927),\n  [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(505),\n  [276] = {.entry = {.count = 1, .reusable = false}}, SHIFT(910),\n  [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(950),\n  [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(879),\n  [282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1394),\n  [284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(953),\n  [286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(470),\n  [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(467),\n  [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(918),\n  [292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(509),\n  [294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(996),\n  [296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(955),\n  [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(880),\n  [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(958),\n  [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(923),\n  [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(503),\n  [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(909),\n  [308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(945),\n  [310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(876),\n  [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(944),\n  [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(469),\n  [316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466),\n  [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(921),\n  [320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(515),\n  [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(983),\n  [324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(947),\n  [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(878),\n  [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(940),\n  [330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2),\n  [332] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1005),\n  [335] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(657),\n  [338] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(997),\n  [341] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1035),\n  [344] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(919),\n  [347] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(6),\n  [350] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(430),\n  [353] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1211),\n  [356] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2455),\n  [359] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2457),\n  [362] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2394),\n  [365] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(430),\n  [368] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3182),\n  [371] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3183),\n  [374] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3166),\n  [377] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(102),\n  [380] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(450),\n  [383] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3186),\n  [386] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(46),\n  [389] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3187),\n  [392] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3191),\n  [395] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3152),\n  [398] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3149),\n  [401] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3197),\n  [404] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(196),\n  [407] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(259),\n  [410] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(528),\n  [413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2),\n  [415] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(90),\n  [418] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(143),\n  [421] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3205),\n  [424] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(694),\n  [427] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3668),\n  [430] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1033),\n  [433] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(477),\n  [436] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1031),\n  [439] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2551),\n  [442] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(234),\n  [445] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(348),\n  [448] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2837),\n  [451] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2844),\n  [454] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2557),\n  [457] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1847),\n  [460] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1847),\n  [463] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1855),\n  [466] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3119),\n  [469] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1074),\n  [472] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(655),\n  [475] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(916),\n  [478] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(1029),\n  [481] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3643),\n  [484] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2763),\n  [487] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(3641),\n  [490] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2), SHIFT_REPEAT(2590),\n  [493] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_default, 2),\n  [495] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_default, 2),\n  [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_case, 3, .production_id = 80),\n  [499] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_case, 3, .production_id = 80),\n  [501] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_default, 3, .production_id = 151),\n  [503] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_default, 3, .production_id = 151),\n  [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_case, 4, .production_id = 177),\n  [507] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_case, 4, .production_id = 177),\n  [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1422),\n  [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440),\n  [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(500),\n  [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217),\n  [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2474),\n  [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1553),\n  [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(513),\n  [523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 1),\n  [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(498),\n  [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2475),\n  [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1545),\n  [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527),\n  [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1240),\n  [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130),\n  [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126),\n  [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1225),\n  [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1246),\n  [543] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 2),\n  [545] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1010),\n  [547] = {.entry = {.count = 1, .reusable = false}}, SHIFT(658),\n  [549] = {.entry = {.count = 1, .reusable = false}}, SHIFT(977),\n  [551] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1047),\n  [553] = {.entry = {.count = 1, .reusable = false}}, SHIFT(905),\n  [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),\n  [557] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3199),\n  [559] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3147),\n  [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3194),\n  [563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3192),\n  [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1046),\n  [567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(481),\n  [569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1045),\n  [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2608),\n  [573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1056),\n  [575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(656),\n  [577] = {.entry = {.count = 1, .reusable = false}}, SHIFT(892),\n  [579] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1043),\n  [581] = {.entry = {.count = 1, .reusable = false}}, SHIFT(943),\n  [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(924),\n  [585] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(101),\n  [588] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(145),\n  [591] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(694),\n  [594] = {.entry = {.count = 1, .reusable = false}}, SHIFT(221),\n  [596] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(2584),\n  [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1720),\n  [601] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1896),\n  [603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1534),\n  [605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1908),\n  [607] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1901),\n  [609] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1923),\n  [611] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1891),\n  [613] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1874),\n  [615] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1916),\n  [617] = {.entry = {.count = 1, .reusable = false}}, SHIFT(932),\n  [619] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1022),\n  [621] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888),\n  [623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2165),\n  [625] = {.entry = {.count = 1, .reusable = false}}, SHIFT(726),\n  [627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152),\n  [629] = {.entry = {.count = 1, .reusable = false}}, SHIFT(185),\n  [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396),\n  [633] = {.entry = {.count = 1, .reusable = false}}, SHIFT(398),\n  [635] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89),\n  [637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66),\n  [639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1654),\n  [641] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3682),\n  [643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(472),\n  [645] = {.entry = {.count = 1, .reusable = false}}, SHIFT(236),\n  [647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83),\n  [649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812),\n  [651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777),\n  [653] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424),\n  [655] = {.entry = {.count = 1, .reusable = false}}, SHIFT(137),\n  [657] = {.entry = {.count = 1, .reusable = false}}, SHIFT(396),\n  [659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441),\n  [661] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1977),\n  [663] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1934),\n  [665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820),\n  [667] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115),\n  [669] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1083),\n  [671] = {.entry = {.count = 1, .reusable = false}}, SHIFT(974),\n  [673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1967),\n  [675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1497),\n  [677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457),\n  [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1821),\n  [681] = {.entry = {.count = 1, .reusable = false}}, SHIFT(964),\n  [683] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174),\n  [685] = {.entry = {.count = 1, .reusable = false}}, SHIFT(732),\n  [687] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183),\n  [689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2942),\n  [691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70),\n  [693] = {.entry = {.count = 1, .reusable = false}}, SHIFT(407),\n  [695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2417),\n  [697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1853),\n  [699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1651),\n  [701] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1853),\n  [703] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1652),\n  [705] = {.entry = {.count = 1, .reusable = false}}, SHIFT(163),\n  [707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2),\n  [709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1042),\n  [711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1644),\n  [713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1940),\n  [715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1608),\n  [717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1612),\n  [719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157),\n  [721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1558),\n  [723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166),\n  [725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390),\n  [727] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1711),\n  [729] = {.entry = {.count = 1, .reusable = false}}, SHIFT(172),\n  [731] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3),\n  [733] = {.entry = {.count = 1, .reusable = false}}, SHIFT(929),\n  [735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2249),\n  [737] = {.entry = {.count = 1, .reusable = false}}, SHIFT(696),\n  [739] = {.entry = {.count = 1, .reusable = false}}, SHIFT(187),\n  [741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65),\n  [743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72),\n  [745] = {.entry = {.count = 1, .reusable = false}}, SHIFT(205),\n  [747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813),\n  [749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815),\n  [751] = {.entry = {.count = 1, .reusable = false}}, SHIFT(319),\n  [753] = {.entry = {.count = 1, .reusable = false}}, SHIFT(149),\n  [755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2426),\n  [757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1647),\n  [759] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1564),\n  [761] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1647),\n  [763] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1437),\n  [765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817),\n  [767] = {.entry = {.count = 1, .reusable = false}}, SHIFT(118),\n  [769] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1002),\n  [771] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3659),\n  [773] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3580),\n  [775] = {.entry = {.count = 1, .reusable = false}}, SHIFT(822),\n  [777] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2204),\n  [779] = {.entry = {.count = 1, .reusable = true}}, SHIFT(884),\n  [781] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1012),\n  [783] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1040),\n  [785] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890),\n  [787] = {.entry = {.count = 1, .reusable = false}}, SHIFT(700),\n  [789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61),\n  [791] = {.entry = {.count = 1, .reusable = false}}, SHIFT(475),\n  [793] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1987),\n  [795] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1960),\n  [797] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96),\n  [799] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1094),\n  [801] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1001),\n  [803] = {.entry = {.count = 1, .reusable = false}}, SHIFT(995),\n  [805] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1120),\n  [807] = {.entry = {.count = 1, .reusable = false}}, SHIFT(961),\n  [809] = {.entry = {.count = 1, .reusable = false}}, SHIFT(724),\n  [811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(192),\n  [813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1866),\n  [815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(412),\n  [817] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71),\n  [819] = {.entry = {.count = 1, .reusable = false}}, SHIFT(404),\n  [821] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92),\n  [823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64),\n  [825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(488),\n  [827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2606),\n  [829] = {.entry = {.count = 1, .reusable = false}}, SHIFT(254),\n  [831] = {.entry = {.count = 1, .reusable = false}}, SHIFT(350),\n  [833] = {.entry = {.count = 1, .reusable = false}}, SHIFT(159),\n  [835] = {.entry = {.count = 1, .reusable = false}}, SHIFT(412),\n  [837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395),\n  [839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2379),\n  [841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1946),\n  [843] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1963),\n  [845] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1946),\n  [847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1928),\n  [849] = {.entry = {.count = 1, .reusable = false}}, SHIFT(114),\n  [851] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1085),\n  [853] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1108),\n  [855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(926),\n  [857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(733),\n  [859] = {.entry = {.count = 1, .reusable = false}}, SHIFT(199),\n  [861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63),\n  [863] = {.entry = {.count = 1, .reusable = false}}, SHIFT(451),\n  [865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2399),\n  [867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1645),\n  [869] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1697),\n  [871] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1645),\n  [873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1520),\n  [875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1019),\n  [877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1051),\n  [879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1159),\n  [881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1004),\n  [883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(731),\n  [885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(189),\n  [887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60),\n  [889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(497),\n  [891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(346),\n  [893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2425),\n  [895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1921),\n  [897] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1927),\n  [899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1921),\n  [901] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1992),\n  [903] = {.entry = {.count = 1, .reusable = false}}, SHIFT(133),\n  [905] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1118),\n  [907] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1143),\n  [909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(975),\n  [911] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1064),\n  [913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(897),\n  [915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(737),\n  [917] = {.entry = {.count = 1, .reusable = false}}, SHIFT(483),\n  [919] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1837),\n  [921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113),\n  [923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1067),\n  [925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1034),\n  [927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(963),\n  [929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1065),\n  [931] = {.entry = {.count = 1, .reusable = false}}, SHIFT(906),\n  [933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(714),\n  [935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(186),\n  [937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62),\n  [939] = {.entry = {.count = 1, .reusable = false}}, SHIFT(484),\n  [941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(227),\n  [943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(283),\n  [945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169),\n  [947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2430),\n  [949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1649),\n  [951] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1604),\n  [953] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1649),\n  [955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1781),\n  [957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(100),\n  [959] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1026),\n  [961] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1054),\n  [963] = {.entry = {.count = 1, .reusable = false}}, SHIFT(952),\n  [965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1058),\n  [967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(911),\n  [969] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182),\n  [971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287),\n  [973] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284),\n  [975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(91),\n  [977] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3392),\n  [979] = {.entry = {.count = 1, .reusable = false}}, SHIFT(478),\n  [981] = {.entry = {.count = 1, .reusable = false}}, SHIFT(225),\n  [983] = {.entry = {.count = 1, .reusable = false}}, SHIFT(462),\n  [985] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160),\n  [987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(287),\n  [989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(383),\n  [991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1671),\n  [993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(98),\n  [995] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1038),\n  [997] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1027),\n  [999] = {.entry = {.count = 1, .reusable = false}}, SHIFT(988),\n  [1001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1138),\n  [1003] = {.entry = {.count = 1, .reusable = false}}, SHIFT(998),\n  [1005] = {.entry = {.count = 1, .reusable = false}}, SHIFT(701),\n  [1007] = {.entry = {.count = 1, .reusable = false}}, SHIFT(198),\n  [1009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67),\n  [1011] = {.entry = {.count = 1, .reusable = false}}, SHIFT(493),\n  [1013] = {.entry = {.count = 1, .reusable = false}}, SHIFT(384),\n  [1015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2418),\n  [1017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1995),\n  [1019] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1984),\n  [1021] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1995),\n  [1023] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1918),\n  [1025] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122),\n  [1027] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1081),\n  [1029] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1127),\n  [1031] = {.entry = {.count = 1, .reusable = false}}, SHIFT(978),\n  [1033] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1115),\n  [1035] = {.entry = {.count = 1, .reusable = false}}, SHIFT(968),\n  [1037] = {.entry = {.count = 1, .reusable = false}}, SHIFT(702),\n  [1039] = {.entry = {.count = 1, .reusable = false}}, SHIFT(193),\n  [1041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417),\n  [1043] = {.entry = {.count = 1, .reusable = false}}, SHIFT(357),\n  [1045] = {.entry = {.count = 1, .reusable = false}}, SHIFT(93),\n  [1047] = {.entry = {.count = 1, .reusable = false}}, SHIFT(491),\n  [1049] = {.entry = {.count = 1, .reusable = false}}, SHIFT(265),\n  [1051] = {.entry = {.count = 1, .reusable = false}}, SHIFT(326),\n  [1053] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161),\n  [1055] = {.entry = {.count = 1, .reusable = false}}, SHIFT(417),\n  [1057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328),\n  [1059] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1839),\n  [1061] = {.entry = {.count = 1, .reusable = false}}, SHIFT(116),\n  [1063] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1077),\n  [1065] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1098),\n  [1067] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1016),\n  [1069] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1149),\n  [1071] = {.entry = {.count = 1, .reusable = false}}, SHIFT(993),\n  [1073] = {.entry = {.count = 1, .reusable = false}}, SHIFT(194),\n  [1075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434),\n  [1077] = {.entry = {.count = 1, .reusable = false}}, SHIFT(436),\n  [1079] = {.entry = {.count = 1, .reusable = false}}, SHIFT(94),\n  [1081] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3474),\n  [1083] = {.entry = {.count = 1, .reusable = false}}, SHIFT(496),\n  [1085] = {.entry = {.count = 1, .reusable = false}}, SHIFT(207),\n  [1087] = {.entry = {.count = 1, .reusable = false}}, SHIFT(298),\n  [1089] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165),\n  [1091] = {.entry = {.count = 1, .reusable = false}}, SHIFT(434),\n  [1093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352),\n  [1095] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1947),\n  [1097] = {.entry = {.count = 1, .reusable = false}}, SHIFT(119),\n  [1099] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1106),\n  [1101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1114),\n  [1103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(992),\n  [1105] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 1),\n  [1107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447),\n  [1109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(930),\n  [1111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 1),\n  [1113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101),\n  [1115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138),\n  [1117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(230),\n  [1119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2584),\n  [1121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1714),\n  [1123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(999),\n  [1125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(318),\n  [1127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(931),\n  [1129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1000),\n  [1131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(316),\n  [1133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(208),\n  [1135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1845),\n  [1137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1057),\n  [1139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(437),\n  [1141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(226),\n  [1143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1993),\n  [1145] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1072),\n  [1147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(397),\n  [1149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209),\n  [1151] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1988),\n  [1153] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1086),\n  [1155] = {.entry = {.count = 1, .reusable = false}}, SHIFT(315),\n  [1157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(936),\n  [1159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142),\n  [1161] = {.entry = {.count = 1, .reusable = false}}, SHIFT(212),\n  [1163] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1996),\n  [1165] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1134),\n  [1167] = {.entry = {.count = 1, .reusable = false}}, SHIFT(382),\n  [1169] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1563),\n  [1171] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2090),\n  [1173] = {.entry = {.count = 1, .reusable = false}}, SHIFT(444),\n  [1175] = {.entry = {.count = 1, .reusable = false}}, SHIFT(883),\n  [1177] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2548),\n  [1179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74),\n  [1181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672),\n  [1183] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3344),\n  [1185] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2954),\n  [1187] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3462),\n  [1189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2907),\n  [1191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2906),\n  [1193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2689),\n  [1195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2188),\n  [1197] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2180),\n  [1199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2188),\n  [1201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(750),\n  [1203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(970),\n  [1205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1893),\n  [1207] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1554),\n  [1209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58),\n  [1211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323),\n  [1213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275),\n  [1215] = {.entry = {.count = 1, .reusable = false}}, SHIFT(340),\n  [1217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224),\n  [1219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2537),\n  [1221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145),\n  [1223] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1922),\n  [1225] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54),\n  [1227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2865),\n  [1229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2538),\n  [1231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2861),\n  [1233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2410),\n  [1235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2424),\n  [1237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2659),\n  [1239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2413),\n  [1241] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_rest_pattern, 2, .production_id = 30),\n  [1244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_rest_pattern, 2, .production_id = 30),\n  [1246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(413),\n  [1248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211),\n  [1250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(380),\n  [1252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249),\n  [1254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2148),\n  [1256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2249),\n  [1258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(884),\n  [1260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2554),\n  [1262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76),\n  [1264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(675),\n  [1266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2892),\n  [1268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(813),\n  [1270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(815),\n  [1272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3575),\n  [1274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2857),\n  [1276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2855),\n  [1278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2791),\n  [1280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2254),\n  [1282] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2255),\n  [1284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2254),\n  [1286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(817),\n  [1288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(821),\n  [1290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(320),\n  [1292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223),\n  [1294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__module, 1, .production_id = 5),\n  [1296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__module, 1, .production_id = 5),\n  [1298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27),\n  [1300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3451),\n  [1302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement_block, 2),\n  [1304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement_block, 2),\n  [1306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_pattern, 2),\n  [1308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 2),\n  [1310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 2),\n  [1312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501),\n  [1314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(388),\n  [1316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function_declaration, 4, .production_id = 106),\n  [1318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function_declaration, 4, .production_id = 106),\n  [1320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function, 4, .production_id = 106),\n  [1322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function, 4, .production_id = 106),\n  [1324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(586),\n  [1326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement_block, 3),\n  [1328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement_block, 3),\n  [1330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134),\n  [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__module, 2, .production_id = 27),\n  [1334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__module, 2, .production_id = 27),\n  [1336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3),\n  [1338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3),\n  [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2),\n  [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2),\n  [1344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125),\n  [1346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1),\n  [1348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1),\n  [1350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1),\n  [1352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1),\n  [1354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nested_identifier, 3),\n  [1356] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_nested_identifier, 3),\n  [1358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement_block, 4),\n  [1360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement_block, 4),\n  [1362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function_declaration, 5, .production_id = 140),\n  [1364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function_declaration, 5, .production_id = 140),\n  [1366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function, 5, .production_id = 140),\n  [1368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function, 5, .production_id = 140),\n  [1370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(581),\n  [1372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_internal_module, 2, .production_id = 6),\n  [1374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_internal_module, 2, .production_id = 6),\n  [1376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_predefined_type, 1),\n  [1378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_predefined_type, 1),\n  [1380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153),\n  [1382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1567),\n  [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1991),\n  [1386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1003),\n  [1388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1076),\n  [1390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(907),\n  [1392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(938),\n  [1394] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2512),\n  [1396] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2513),\n  [1398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97),\n  [1400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144),\n  [1402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(482),\n  [1404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1907),\n  [1406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1041),\n  [1408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1997),\n  [1410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342),\n  [1412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1666),\n  [1414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1912),\n  [1416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1467),\n  [1418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1900),\n  [1420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55),\n  [1422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1036),\n  [1424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1104),\n  [1426] = {.entry = {.count = 1, .reusable = false}}, SHIFT(934),\n  [1428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(935),\n  [1430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158),\n  [1432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139),\n  [1434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2767),\n  [1436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(485),\n  [1438] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1994),\n  [1440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1068),\n  [1442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2520),\n  [1444] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_array_repeat1, 1), REDUCE(aux_sym_array_pattern_repeat1, 1),\n  [1447] = {.entry = {.count = 3, .reusable = true}}, REDUCE(aux_sym_array_repeat1, 1), REDUCE(aux_sym_array_pattern_repeat1, 1), SHIFT(2167),\n  [1451] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1061),\n  [1453] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1117),\n  [1455] = {.entry = {.count = 1, .reusable = false}}, SHIFT(960),\n  [1457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(486),\n  [1459] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1092),\n  [1461] = {.entry = {.count = 3, .reusable = true}}, REDUCE(aux_sym_array_repeat1, 1), REDUCE(aux_sym_array_pattern_repeat1, 1), SHIFT(2264),\n  [1465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_array_pattern_repeat1, 1),\n  [1467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_array_repeat1, 1),\n  [1469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387),\n  [1471] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_override_modifier, 1),\n  [1473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_override_modifier, 1),\n  [1475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162),\n  [1477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2151),\n  [1479] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_accessibility_modifier, 1),\n  [1481] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_accessibility_modifier, 1),\n  [1483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250),\n  [1485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1579),\n  [1487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2334),\n  [1489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681),\n  [1491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1522),\n  [1493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2312),\n  [1495] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1924),\n  [1497] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56),\n  [1499] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59),\n  [1501] = {.entry = {.count = 1, .reusable = false}}, SHIFT(956),\n  [1503] = {.entry = {.count = 1, .reusable = false}}, SHIFT(962),\n  [1505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1097),\n  [1507] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1141),\n  [1509] = {.entry = {.count = 1, .reusable = false}}, SHIFT(981),\n  [1511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(937),\n  [1513] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2648),\n  [1515] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2646),\n  [1517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99),\n  [1519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141),\n  [1521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(495),\n  [1523] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1999),\n  [1525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1132),\n  [1527] = {.entry = {.count = 1, .reusable = false}}, SHIFT(989),\n  [1529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957),\n  [1531] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925),\n  [1533] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1028),\n  [1535] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52),\n  [1537] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1886),\n  [1539] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53),\n  [1541] = {.entry = {.count = 1, .reusable = false}}, SHIFT(991),\n  [1543] = {.entry = {.count = 1, .reusable = false}}, SHIFT(990),\n  [1545] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1006),\n  [1547] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1933),\n  [1549] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57),\n  [1551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535),\n  [1553] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1052),\n  [1555] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1014),\n  [1557] = {.entry = {.count = 1, .reusable = false}}, SHIFT(933),\n  [1559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41),\n  [1561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36),\n  [1563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),\n  [1565] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4),\n  [1567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(980),\n  [1569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1030),\n  [1571] = {.entry = {.count = 1, .reusable = false}}, SHIFT(891),\n  [1573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3644),\n  [1575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(476),\n  [1577] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1011),\n  [1579] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1075),\n  [1581] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1119),\n  [1583] = {.entry = {.count = 1, .reusable = false}}, SHIFT(966),\n  [1585] = {.entry = {.count = 1, .reusable = false}}, SHIFT(489),\n  [1587] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1107),\n  [1589] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1096),\n  [1591] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1144),\n  [1593] = {.entry = {.count = 1, .reusable = false}}, SHIFT(984),\n  [1595] = {.entry = {.count = 1, .reusable = false}}, SHIFT(494),\n  [1597] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1125),\n  [1599] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1023),\n  [1601] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1071),\n  [1603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(904),\n  [1605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3433),\n  [1607] = {.entry = {.count = 1, .reusable = false}}, SHIFT(480),\n  [1609] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245),\n  [1611] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1656),\n  [1613] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1037),\n  [1615] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1079),\n  [1617] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1126),\n  [1619] = {.entry = {.count = 1, .reusable = false}}, SHIFT(949),\n  [1621] = {.entry = {.count = 1, .reusable = false}}, SHIFT(487),\n  [1623] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1089),\n  [1625] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1084),\n  [1627] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1135),\n  [1629] = {.entry = {.count = 1, .reusable = false}}, SHIFT(948),\n  [1631] = {.entry = {.count = 1, .reusable = false}}, SHIFT(490),\n  [1633] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1090),\n  [1635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),\n  [1637] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1059),\n  [1639] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1136),\n  [1641] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951),\n  [1643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(492),\n  [1645] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1100),\n  [1647] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1007),\n  [1649] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1080),\n  [1651] = {.entry = {.count = 1, .reusable = false}}, SHIFT(901),\n  [1653] = {.entry = {.count = 1, .reusable = false}}, SHIFT(479),\n  [1655] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1025),\n  [1657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1752),\n  [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1456),\n  [1661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1617),\n  [1663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1864),\n  [1665] = {.entry = {.count = 1, .reusable = false}}, SHIFT(967),\n  [1667] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1009),\n  [1669] = {.entry = {.count = 1, .reusable = false}}, SHIFT(882),\n  [1671] = {.entry = {.count = 1, .reusable = false}}, SHIFT(474),\n  [1673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1562),\n  [1675] = {.entry = {.count = 1, .reusable = false}}, SHIFT(985),\n  [1677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1962),\n  [1679] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1032),\n  [1681] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1979),\n  [1683] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2618),\n  [1685] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2593),\n  [1687] = {.entry = {.count = 1, .reusable = false}}, SHIFT(337),\n  [1689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1584),\n  [1691] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(40),\n  [1694] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(354),\n  [1697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2629),\n  [1699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1336),\n  [1701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1629),\n  [1703] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3439),\n  [1705] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3442),\n  [1707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),\n  [1709] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(104),\n  [1712] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(3344),\n  [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3354),\n  [1717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2547),\n  [1719] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3630),\n  [1721] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3621),\n  [1723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15),\n  [1725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2545),\n  [1727] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3387),\n  [1729] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3542),\n  [1731] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rest_pattern, 2, .production_id = 30),\n  [1733] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40),\n  [1735] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3661),\n  [1737] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3660),\n  [1739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2564),\n  [1741] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51),\n  [1743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2624),\n  [1745] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(233),\n  [1748] = {.entry = {.count = 1, .reusable = false}}, SHIFT(233),\n  [1750] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3470),\n  [1752] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3469),\n  [1754] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1, .production_id = 1), SHIFT(380),\n  [1757] = {.entry = {.count = 1, .reusable = false}}, SHIFT(824),\n  [1759] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3581),\n  [1761] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3579),\n  [1763] = {.entry = {.count = 1, .reusable = false}}, SHIFT(799),\n  [1765] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3526),\n  [1767] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3525),\n  [1769] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 2, .production_id = 11),\n  [1771] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 2, .production_id = 11),\n  [1773] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3148),\n  [1775] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3193),\n  [1777] = {.entry = {.count = 1, .reusable = true}}, SHIFT(502),\n  [1779] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3587),\n  [1781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2562),\n  [1783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3585),\n  [1785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2455),\n  [1787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2457),\n  [1789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2394),\n  [1791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3520),\n  [1793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3272),\n  [1795] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_accessibility_modifier_member, 1), SHIFT(3568),\n  [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3565),\n  [1800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_accessibility_modifier_member, 1),\n  [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2003),\n  [1804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2609),\n  [1806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3643),\n  [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2763),\n  [1810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3641),\n  [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),\n  [1814] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3667),\n  [1816] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 3, .production_id = 43),\n  [1818] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 3, .production_id = 43),\n  [1820] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3568),\n  [1822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2489),\n  [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3363),\n  [1826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 3, .production_id = 35),\n  [1828] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 3, .production_id = 35),\n  [1830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33),\n  [1832] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 5, .production_id = 148),\n  [1834] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 5, .production_id = 148),\n  [1836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(576),\n  [1838] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, .production_id = 140),\n  [1840] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 5, .production_id = 140),\n  [1842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(583),\n  [1844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(516),\n  [1846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 3, .production_id = 56),\n  [1848] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 3, .production_id = 56),\n  [1850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(547),\n  [1852] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 4, .production_id = 118),\n  [1854] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 4, .production_id = 118),\n  [1856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(601),\n  [1858] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_catch_clause, 5, .production_id = 180),\n  [1860] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_catch_clause, 5, .production_id = 180),\n  [1862] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_catch_clause, 6, .production_id = 199),\n  [1864] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_catch_clause, 6, .production_id = 199),\n  [1866] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_catch_clause, 2, .production_id = 11),\n  [1868] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_catch_clause, 2, .production_id = 11),\n  [1870] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_body, 3),\n  [1872] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_body, 3),\n  [1874] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 2),\n  [1876] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_statement, 2),\n  [1878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(525),\n  [1880] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_empty_statement, 1),\n  [1882] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_empty_statement, 1),\n  [1884] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_body, 2),\n  [1886] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_body, 2),\n  [1888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 4, .production_id = 100),\n  [1890] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 4, .production_id = 100),\n  [1892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(565),\n  [1894] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 4, .production_id = 106),\n  [1896] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 4, .production_id = 106),\n  [1898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(584),\n  [1900] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_statement, 4, .production_id = 85),\n  [1902] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_statement, 4, .production_id = 85),\n  [1904] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ambient_declaration, 3),\n  [1906] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ambient_declaration, 3),\n  [1908] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2),\n  [1910] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 2),\n  [1912] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_debugger_statement, 2),\n  [1914] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_debugger_statement, 2),\n  [1916] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 2),\n  [1918] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_continue_statement, 2),\n  [1920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_method_signature_type, 2),\n  [1922] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_method_signature_type, 2),\n  [1924] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 4, .production_id = 172),\n  [1926] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 4, .production_id = 172),\n  [1928] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 2),\n  [1930] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_break_statement, 2),\n  [1932] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 2, .production_id = 6),\n  [1934] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_module, 2, .production_id = 6),\n  [1936] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 4, .production_id = 174),\n  [1938] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 4, .production_id = 174),\n  [1940] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_signature, 4, .production_id = 105),\n  [1942] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_signature, 4, .production_id = 105),\n  [1944] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 4),\n  [1946] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 4),\n  [1948] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 4, .production_id = 56),\n  [1950] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 4, .production_id = 56),\n  [1952] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_labeled_statement, 3, .dynamic_precedence = -1, .production_id = 25),\n  [1954] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_labeled_statement, 3, .dynamic_precedence = -1, .production_id = 25),\n  [1956] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interface_declaration, 4, .production_id = 100),\n  [1958] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interface_declaration, 4, .production_id = 100),\n  [1960] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_statement, 3, .production_id = 37),\n  [1962] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_statement, 3, .production_id = 37),\n  [1964] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 3, .production_id = 42),\n  [1966] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 3, .production_id = 42),\n  [1968] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 4, .production_id = 31),\n  [1970] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 4, .production_id = 31),\n  [1972] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_method_type, 2),\n  [1974] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_method_type, 2),\n  [1976] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl_declaration, 4, .production_id = 114),\n  [1978] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_impl_declaration, 4, .production_id = 114),\n  [1980] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 3),\n  [1982] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 3),\n  [1984] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 2),\n  [1986] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 2),\n  [1988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lexical_declaration, 3, .production_id = 34),\n  [1990] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lexical_declaration, 3, .production_id = 34),\n  [1992] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 5, .production_id = 100),\n  [1994] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 5, .production_id = 100),\n  [1996] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 4),\n  [1998] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 4),\n  [2000] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 5, .production_id = 125),\n  [2002] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 5, .production_id = 125),\n  [2004] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_signature, 5, .production_id = 139),\n  [2006] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_signature, 5, .production_id = 139),\n  [2008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 5, .production_id = 119),\n  [2010] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 5, .production_id = 119),\n  [2012] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 5),\n  [2014] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 5),\n  [2016] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 6, .production_id = 148),\n  [2018] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 6, .production_id = 148),\n  [2020] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 4, .production_id = 79),\n  [2022] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_statement, 4, .production_id = 79),\n  [2024] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function_declaration, 6, .production_id = 140),\n  [2026] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function_declaration, 6, .production_id = 140),\n  [2028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, .production_id = 140),\n  [2030] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 6, .production_id = 140),\n  [2032] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, .production_id = 106),\n  [2034] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 5, .production_id = 106),\n  [2036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function_declaration, 5, .production_id = 106),\n  [2038] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function_declaration, 5, .production_id = 106),\n  [2040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 179),\n  [2042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 179),\n  [2044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_method_signature_type, 3),\n  [2046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_method_signature_type, 3),\n  [2048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ambient_declaration, 2),\n  [2050] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ambient_declaration, 2),\n  [2052] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_declaration, 5, .production_id = 120),\n  [2054] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_alias_declaration, 5, .production_id = 120),\n  [2056] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_body, 3),\n  [2058] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_body, 3),\n  [2060] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_method_type, 3),\n  [2062] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_method_type, 3),\n  [2064] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, .production_id = 92),\n  [2066] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, .production_id = 92),\n  [2068] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 2, .production_id = 11),\n  [2070] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 2, .production_id = 11),\n  [2072] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 3, .production_id = 31),\n  [2074] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 3, .production_id = 31),\n  [2076] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 3),\n  [2078] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 3),\n  [2080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 2, .production_id = 4),\n  [2082] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 2, .production_id = 4),\n  [2084] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_declaration, 5, .production_id = 118),\n  [2086] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_declaration, 5, .production_id = 118),\n  [2088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 4),\n  [2090] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 4),\n  [2092] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 3),\n  [2094] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 3),\n  [2096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interface_declaration, 5, .production_id = 144),\n  [2098] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interface_declaration, 5, .production_id = 144),\n  [2100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_statement, 3, .production_id = 36),\n  [2102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_statement, 3, .production_id = 36),\n  [2104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_declaration, 6, .production_id = 149),\n  [2106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_alias_declaration, 6, .production_id = 149),\n  [2108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 3, .production_id = 44),\n  [2110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 3, .production_id = 44),\n  [2112] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lexical_declaration, 4, .production_id = 34),\n  [2114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lexical_declaration, 4, .production_id = 34),\n  [2116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ambient_declaration, 7, .production_id = 195),\n  [2118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ambient_declaration, 7, .production_id = 195),\n  [2120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 5, .production_id = 172),\n  [2122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 5, .production_id = 172),\n  [2124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_body, 5, .production_id = 174),\n  [2126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_body, 5, .production_id = 174),\n  [2128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interface_declaration, 4, .production_id = 113),\n  [2130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interface_declaration, 4, .production_id = 113),\n  [2132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interface_declaration, 3, .production_id = 56),\n  [2134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interface_declaration, 3, .production_id = 56),\n  [2136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 3, .production_id = 45),\n  [2138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 3, .production_id = 45),\n  [2140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl_declaration, 3, .production_id = 56),\n  [2142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_impl_declaration, 3, .production_id = 56),\n  [2144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 3, .production_id = 46),\n  [2146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_break_statement, 3, .production_id = 46),\n  [2148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_declaration, 4, .production_id = 83),\n  [2150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_declaration, 4, .production_id = 83),\n  [2152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 2),\n  [2154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 2),\n  [2156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_declaration, 3, .production_id = 62),\n  [2158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_declaration, 3, .production_id = 62),\n  [2160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 84),\n  [2162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 84),\n  [2164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, .production_id = 154),\n  [2166] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, .production_id = 154),\n  [2168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 3, .production_id = 46),\n  [2170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_continue_statement, 3, .production_id = 46),\n  [2172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 3),\n  [2174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 3),\n  [2176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_body, 2),\n  [2178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_body, 2),\n  [2180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_alias, 5),\n  [2182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_alias, 5),\n  [2184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_throw_statement, 3),\n  [2186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_throw_statement, 3),\n  [2188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2583),\n  [2190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2004),\n  [2192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2509),\n  [2194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2581),\n  [2196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__for_header, 6, .production_id = 178),\n  [2198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__for_header, 6, .production_id = 178),\n  [2200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__for_header, 7, .production_id = 198),\n  [2202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__for_header, 7, .production_id = 198),\n  [2204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__for_header, 5, .production_id = 153),\n  [2206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__for_header, 5, .production_id = 153),\n  [2208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3),\n  [2210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3),\n  [2212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 4, .production_id = 86),\n  [2214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 4, .production_id = 86),\n  [2216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__for_header, 5, .production_id = 152),\n  [2218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__for_header, 5, .production_id = 152),\n  [2220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2215),\n  [2222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3657),\n  [2224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2145),\n  [2226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3344),\n  [2228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86),\n  [2230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3462),\n  [2232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3697),\n  [2234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1655),\n  [2236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3509),\n  [2238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436),\n  [2240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3680),\n  [2242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2284),\n  [2244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3459),\n  [2246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2452),\n  [2248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2144),\n  [2250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 4),\n  [2252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 4),\n  [2254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 3),\n  [2256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 3),\n  [2258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1725),\n  [2260] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 2),\n  [2262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 2),\n  [2264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1813),\n  [2266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2143),\n  [2268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1519),\n  [2270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496),\n  [2272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2388),\n  [2274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2396),\n  [2276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2267),\n  [2278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2243),\n  [2280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_arguments, 3),\n  [2282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 3),\n  [2284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_arguments, 4),\n  [2286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 4),\n  [2288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_arguments, 5),\n  [2290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 5),\n  [2292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2203),\n  [2294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1453),\n  [2296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2322),\n  [2298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1192),\n  [2300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099),\n  [2302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869),\n  [2304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1559),\n  [2306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108),\n  [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(954),\n  [2310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150),\n  [2312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1116),\n  [2314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2816),\n  [2316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3437),\n  [2318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2405),\n  [2320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1109),\n  [2322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1169),\n  [2324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1124),\n  [2326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3694),\n  [2328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2273),\n  [2330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2412),\n  [2332] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1372),\n  [2334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1640),\n  [2336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(885),\n  [2338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2530),\n  [2340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77),\n  [2342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673),\n  [2344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2824),\n  [2346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843),\n  [2348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(743),\n  [2350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3599),\n  [2352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1546),\n  [2354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2813),\n  [2356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1634),\n  [2358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1494),\n  [2360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1634),\n  [2362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(747),\n  [2364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(749),\n  [2366] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3576),\n  [2368] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3601),\n  [2370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(752),\n  [2372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(885),\n  [2374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2411),\n  [2376] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2323),\n  [2378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1175),\n  [2380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868),\n  [2382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1965),\n  [2384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965),\n  [2386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1131),\n  [2388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1102),\n  [2390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1168),\n  [2392] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1123),\n  [2394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2173),\n  [2396] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2314),\n  [2398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1185),\n  [2400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1939),\n  [2402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1133),\n  [2404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1101),\n  [2406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1182),\n  [2408] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1112),\n  [2410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1653),\n  [2412] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2141),\n  [2414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3575),\n  [2416] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2205),\n  [2418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1771),\n  [2420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2077),\n  [2422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2187),\n  [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693),\n  [2426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1768),\n  [2428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2348),\n  [2430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2320),\n  [2432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2622),\n  [2434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2894),\n  [2436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771),\n  [2438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(770),\n  [2440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2492),\n  [2442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769),\n  [2444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(765),\n  [2446] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3685),\n  [2448] = {.entry = {.count = 1, .reusable = false}}, SHIFT(744),\n  [2450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1816),\n  [2452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2386),\n  [2454] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2315),\n  [2456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1181),\n  [2458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500),\n  [2460] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1111),\n  [2462] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1105),\n  [2464] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1167),\n  [2466] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1129),\n  [2468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2333),\n  [2470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(692),\n  [2472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1789),\n  [2474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2160),\n  [2476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1926),\n  [2478] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1285),\n  [2480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1449),\n  [2482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887),\n  [2484] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2595),\n  [2486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75),\n  [2488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(674),\n  [2490] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2952),\n  [2492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848),\n  [2494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(847),\n  [2496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3534),\n  [2498] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1396),\n  [2500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2714),\n  [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1446),\n  [2504] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1400),\n  [2506] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1446),\n  [2508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846),\n  [2510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(845),\n  [2512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3672),\n  [2514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3533),\n  [2516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(844),\n  [2518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(887),\n  [2520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1642),\n  [2522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2291),\n  [2524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2445),\n  [2526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(889),\n  [2528] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2635),\n  [2530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73),\n  [2532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676),\n  [2534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2929),\n  [2536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830),\n  [2538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829),\n  [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3405),\n  [2542] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2354),\n  [2544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2846),\n  [2546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2845),\n  [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2681),\n  [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2448),\n  [2552] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2329),\n  [2554] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2448),\n  [2556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827),\n  [2558] = {.entry = {.count = 1, .reusable = false}}, SHIFT(826),\n  [2560] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3677),\n  [2562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3403),\n  [2564] = {.entry = {.count = 1, .reusable = false}}, SHIFT(825),\n  [2566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(889),\n  [2568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2252),\n  [2570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1610),\n  [2572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1458),\n  [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1455),\n  [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2297),\n  [2578] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2321),\n  [2580] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1193),\n  [2582] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1121),\n  [2584] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1091),\n  [2586] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1166),\n  [2588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1113),\n  [2590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1451),\n  [2592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2219),\n  [2594] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2305),\n  [2596] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2446),\n  [2598] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1533),\n  [2600] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1632),\n  [2602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2370),\n  [2604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1402),\n  [2606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1445),\n  [2608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2406),\n  [2610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1205),\n  [2612] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 1), REDUCE(aux_sym_object_pattern_repeat1, 1),\n  [2615] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1154),\n  [2617] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1148),\n  [2619] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1204),\n  [2621] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1155),\n  [2623] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorator, 2),\n  [2625] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 2),\n  [2627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171),\n  [2629] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3541),\n  [2631] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_class_repeat1, 2, .production_id = 23),\n  [2633] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_class_repeat1, 2, .production_id = 23),\n  [2635] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_repeat1, 2, .production_id = 23), SHIFT_REPEAT(3119),\n  [2638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorator_member_expression, 3, .production_id = 66),\n  [2640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator_member_expression, 3, .production_id = 66),\n  [2642] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_class_repeat1, 1, .production_id = 2),\n  [2644] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_class_repeat1, 1, .production_id = 2),\n  [2646] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorator_call_expression, 2, .production_id = 19),\n  [2648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator_call_expression, 2, .production_id = 19),\n  [2650] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120),\n  [2652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2870),\n  [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2868),\n  [2656] = {.entry = {.count = 1, .reusable = false}}, SHIFT(504),\n  [2658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2908),\n  [2660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2903),\n  [2662] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1392),\n  [2664] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2299),\n  [2666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1207),\n  [2668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210),\n  [2670] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1186),\n  [2672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2427),\n  [2674] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1156),\n  [2676] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1195),\n  [2678] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1189),\n  [2680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973),\n  [2682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1639),\n  [2684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969),\n  [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1439),\n  [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959),\n  [2690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2436),\n  [2692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2210),\n  [2694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2395),\n  [2696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2400),\n  [2698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2185),\n  [2700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1748),\n  [2702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1524),\n  [2704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1506),\n  [2706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1321),\n  [2708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3480),\n  [2710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1452),\n  [2712] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1266),\n  [2714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1715),\n  [2716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3277),\n  [2718] = {.entry = {.count = 1, .reusable = false}}, SHIFT(341),\n  [2720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3557),\n  [2722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2324),\n  [2724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2260),\n  [2726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2281),\n  [2728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2157),\n  [2730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2387),\n  [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2169),\n  [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1791),\n  [2736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(366),\n  [2738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1),\n  [2740] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1),\n  [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1142),\n  [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255),\n  [2746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__augmented_assignment_lhs, 1),\n  [2748] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2625),\n  [2750] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2330),\n  [2752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1463),\n  [2754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154),\n  [2756] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1194),\n  [2758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2355),\n  [2760] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2473),\n  [2762] = {.entry = {.count = 1, .reusable = false}}, SHIFT(439),\n  [2764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1146),\n  [2766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_query, 2),\n  [2768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164),\n  [2770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3195),\n  [2772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243),\n  [2774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3142),\n  [2776] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_query, 2),\n  [2778] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__primary_type, 1, .production_id = 12),\n  [2781] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), SHIFT(755),\n  [2784] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__primary_type, 1, .production_id = 12),\n  [2787] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), SHIFT(3588),\n  [2790] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__primary_type, 1, .production_id = 12),\n  [2792] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), SHIFT(439),\n  [2795] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_pattern, 1, .dynamic_precedence = -1), REDUCE(sym__primary_type, 1, .production_id = 12),\n  [2799] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), SHIFT(794),\n  [2802] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), SHIFT(3478),\n  [2805] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2642),\n  [2807] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2366),\n  [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1592),\n  [2811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1197),\n  [2813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2373),\n  [2815] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2483),\n  [2817] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2591),\n  [2819] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2338),\n  [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1648),\n  [2823] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1201),\n  [2825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2368),\n  [2827] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2479),\n  [2829] = {.entry = {.count = 1, .reusable = false}}, SHIFT(762),\n  [2831] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym__primary_type, 1, .production_id = 12), SHIFT(3340),\n  [2834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3371),\n  [2836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3017),\n  [2838] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2543),\n  [2840] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2344),\n  [2842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1989),\n  [2844] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1198),\n  [2846] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2350),\n  [2848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2524),\n  [2850] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2563),\n  [2852] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2352),\n  [2854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1330),\n  [2856] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1196),\n  [2858] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2377),\n  [2860] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2464),\n  [2862] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2531),\n  [2864] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2349),\n  [2866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2002),\n  [2868] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1199),\n  [2870] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2339),\n  [2872] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2458),\n  [2874] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2585),\n  [2876] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2351),\n  [2878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1920),\n  [2880] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1200),\n  [2882] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2346),\n  [2884] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2471),\n  [2886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1229),\n  [2888] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3008),\n  [2890] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), SHIFT(381),\n  [2893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1),\n  [2895] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1),\n  [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248),\n  [2899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2916),\n  [2901] = {.entry = {.count = 1, .reusable = false}}, SHIFT(312),\n  [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272),\n  [2905] = {.entry = {.count = 1, .reusable = false}}, SHIFT(356),\n  [2907] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_pattern, 1, .dynamic_precedence = -1),\n  [2910] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_pattern, 1, .dynamic_precedence = -1),\n  [2913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(381),\n  [2915] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rest_pattern, 2),\n  [2917] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_rest_pattern, 2),\n  [2919] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), REDUCE(sym__primary_type, 1, .production_id = 12),\n  [2922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1221),\n  [2924] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__primary_type, 1, .production_id = 12), REDUCE(sym_rest_pattern, 2),\n  [2928] = {.entry = {.count = 1, .reusable = false}}, SHIFT(405),\n  [2930] = {.entry = {.count = 1, .reusable = false}}, SHIFT(399),\n  [2932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242),\n  [2934] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1203),\n  [2936] = {.entry = {.count = 1, .reusable = true}}, SHIFT(529),\n  [2938] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1173),\n  [2940] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2364),\n  [2942] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3151),\n  [2944] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1128),\n  [2946] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1122),\n  [2948] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1150),\n  [2950] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1259),\n  [2952] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(2299),\n  [2955] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1203),\n  [2958] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2),\n  [2960] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(210),\n  [2963] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1173),\n  [2966] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(3437),\n  [2969] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(2857),\n  [2972] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(2855),\n  [2975] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(2364),\n  [2978] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(3151),\n  [2981] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1128),\n  [2984] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1122),\n  [2987] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1195),\n  [2990] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1150),\n  [2993] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2), SHIFT_REPEAT(1259),\n  [2996] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2882),\n  [2998] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2517),\n  [3000] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1208),\n  [3002] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2514),\n  [3004] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2713),\n  [3006] = {.entry = {.count = 1, .reusable = false}}, SHIFT(445),\n  [3008] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214),\n  [3010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(522),\n  [3012] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_predefined_type, 1),\n  [3015] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_predefined_type, 1),\n  [3018] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), SHIFT(231),\n  [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231),\n  [3023] = {.entry = {.count = 1, .reusable = false}}, SHIFT(406),\n  [3025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229),\n  [3027] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_expression, 3, .production_id = 69),\n  [3029] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_expression, 3, .production_id = 69),\n  [3031] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_non_null_expression, 2),\n  [3033] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_non_null_expression, 2),\n  [3035] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript_expression, 5, .production_id = 146),\n  [3037] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript_expression, 5, .production_id = 146),\n  [3039] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript_expression, 4, .production_id = 116),\n  [3041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript_expression, 4, .production_id = 116),\n  [3043] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_expression, 3, .production_id = 66),\n  [3045] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_expression, 3, .production_id = 66),\n  [3047] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_expression, 3, .production_id = 68),\n  [3049] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_expression, 3, .production_id = 68),\n  [3051] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_expression, 3, .production_id = 67),\n  [3053] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_expression, 3, .production_id = 67),\n  [3055] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2748),\n  [3057] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_rest_pattern, 2),\n  [3060] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), SHIFT(399),\n  [3063] = {.entry = {.count = 1, .reusable = false}}, SHIFT(760),\n  [3065] = {.entry = {.count = 1, .reusable = false}}, SHIFT(764),\n  [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233),\n  [3069] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression_vector, 3),\n  [3071] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression_vector, 3),\n  [3073] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_predefined_type, 1), REDUCE(sym_rest_pattern, 2, .production_id = 30),\n  [3077] = {.entry = {.count = 1, .reusable = false}}, SHIFT(758),\n  [3079] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2815),\n  [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1130),\n  [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2515),\n  [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3612),\n  [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456),\n  [3089] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(987),\n  [3092] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(1957),\n  [3095] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7),\n  [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415),\n  [3099] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1188),\n  [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2439),\n  [3103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1183),\n  [3105] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3), REDUCE(sym_parenthesized_expression_vector, 3),\n  [3108] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2786),\n  [3110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2768),\n  [3112] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(1465),\n  [3115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(1584),\n  [3118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(1629),\n  [3121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(1336),\n  [3124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354),\n  [3126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2594),\n  [3128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206),\n  [3130] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1202),\n  [3132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2365),\n  [3134] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1161),\n  [3136] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1162),\n  [3138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1308),\n  [3140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31),\n  [3142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1174),\n  [3144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1147),\n  [3146] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2820),\n  [3148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_pattern_repeat1, 1),\n  [3150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2943),\n  [3152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2480),\n  [3154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1153),\n  [3156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1840),\n  [3158] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1206),\n  [3160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3566),\n  [3162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2477),\n  [3164] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2711),\n  [3166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2636),\n  [3168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2826),\n  [3170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2506),\n  [3172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1683),\n  [3174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1210),\n  [3176] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2505),\n  [3178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2716),\n  [3180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2336),\n  [3182] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), REDUCE(aux_sym_object_repeat1, 2, .production_id = 28), REDUCE(aux_sym_object_pattern_repeat1, 2, .production_id = 29),\n  [3186] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1304),\n  [3188] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3169),\n  [3190] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2572),\n  [3192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 1),\n  [3194] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1222),\n  [3196] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2569),\n  [3198] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2829),\n  [3200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2378),\n  [3202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1282),\n  [3204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1177),\n  [3206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1187),\n  [3208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1310),\n  [3210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2421),\n  [3212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1180),\n  [3214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1170),\n  [3216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2644),\n  [3218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2526),\n  [3220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2536),\n  [3222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2633),\n  [3224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2631),\n  [3226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_accessibility_modifier, 1), REDUCE(sym_accessibility_modifier_member, 1),\n  [3229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2653),\n  [3231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2342),\n  [3233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2570),\n  [3235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2596),\n  [3237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2407),\n  [3239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2573),\n  [3241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2607),\n  [3243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2586),\n  [3245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2429),\n  [3247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2374),\n  [3249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1465),\n  [3251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1990),\n  [3253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2001),\n  [3255] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1913),\n  [3257] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_accessibility_modifier_member, 1),\n  [3259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1887),\n  [3261] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2, .production_id = 28), REDUCE(aux_sym_object_pattern_repeat1, 2, .production_id = 29),\n  [3264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167),\n  [3266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3676),\n  [3268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1780),\n  [3270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2930),\n  [3272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2706),\n  [3274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import, 1),\n  [3276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import, 1),\n  [3278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 5, .production_id = 150),\n  [3280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 5, .production_id = 150),\n  [3282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 7, .production_id = 196),\n  [3284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 7, .production_id = 196),\n  [3286] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 110), SHIFT_REPEAT(2299),\n  [3289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 110),\n  [3291] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 110), SHIFT_REPEAT(415),\n  [3294] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 110), SHIFT_REPEAT(2857),\n  [3297] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 110), SHIFT_REPEAT(2855),\n  [3300] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 110), SHIFT_REPEAT(2414),\n  [3303] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2621),\n  [3305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1216),\n  [3307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1919),\n  [3309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2414),\n  [3311] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 6, .production_id = 176),\n  [3313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 6, .production_id = 176),\n  [3315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1687),\n  [3317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2, .production_id = 28),\n  [3319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1782),\n  [3321] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 5, .production_id = 140),\n  [3323] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 5, .production_id = 140),\n  [3325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1218),\n  [3327] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 6, .production_id = 175),\n  [3329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 6, .production_id = 175),\n  [3331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1842),\n  [3333] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 7, .production_id = 197),\n  [3335] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 7, .production_id = 197),\n  [3337] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 4, .production_id = 106),\n  [3339] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 4, .production_id = 106),\n  [3341] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 1),\n  [3343] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 1),\n  [3345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1248),\n  [3347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 8, .production_id = 214),\n  [3349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 8, .production_id = 214),\n  [3351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1179),\n  [3353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1165),\n  [3355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1251),\n  [3357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(620),\n  [3359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2919),\n  [3361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544),\n  [3363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616),\n  [3365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(555),\n  [3367] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1158),\n  [3369] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1157),\n  [3371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1309),\n  [3373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1255),\n  [3375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(562),\n  [3377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2766),\n  [3379] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2),\n  [3381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1164),\n  [3383] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_static_block, 2, .production_id = 11),\n  [3385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_static_block, 2, .production_id = 11),\n  [3387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1320),\n  [3389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1215),\n  [3391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1303),\n  [3393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2198),\n  [3395] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1145),\n  [3397] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1171),\n  [3399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_update_expression, 2, .production_id = 8),\n  [3401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8),\n  [3403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173),\n  [3405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217),\n  [3407] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(81),\n  [3410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3214),\n  [3412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3010),\n  [3414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860),\n  [3416] = {.entry = {.count = 1, .reusable = false}}, SHIFT(435),\n  [3418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 3, .production_id = 61),\n  [3420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1015),\n  [3422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(425),\n  [3424] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 3, .production_id = 61),\n  [3426] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81),\n  [3428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421),\n  [3430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(408),\n  [3432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(392),\n  [3434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392),\n  [3436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(391),\n  [3438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386),\n  [3440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(377),\n  [3442] = {.entry = {.count = 1, .reusable = false}}, SHIFT(370),\n  [3444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435),\n  [3446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362),\n  [3448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425),\n  [3450] = {.entry = {.count = 1, .reusable = false}}, SHIFT(360),\n  [3452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360),\n  [3454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358),\n  [3456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1593),\n  [3458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852),\n  [3460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463),\n  [3462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_expression, 3, .production_id = 60),\n  [3464] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_expression, 3, .production_id = 60),\n  [3466] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1176),\n  [3468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3609),\n  [3470] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await_expression, 2),\n  [3472] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await_expression, 2),\n  [3474] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(81),\n  [3477] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1190),\n  [3479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2643),\n  [3481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1172),\n  [3483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 2),\n  [3485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 2),\n  [3487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1184),\n  [3489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, .production_id = 8),\n  [3491] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8),\n  [3493] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(81),\n  [3496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 3),\n  [3498] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 3),\n  [3500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2546),\n  [3502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2601),\n  [3504] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65),\n  [3506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, .production_id = 65),\n  [3508] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(81),\n  [3511] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1191),\n  [3513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_assertion, 2),\n  [3515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_assertion, 2),\n  [3517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__primary_type, 1, .production_id = 12),\n  [3519] = {.entry = {.count = 1, .reusable = false}}, SHIFT(776),\n  [3521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3492),\n  [3523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783),\n  [3525] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_new_expression, 2, .production_id = 16),\n  [3527] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_new_expression, 2, .production_id = 16),\n  [3529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2519),\n  [3531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2560),\n  [3533] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 3, .production_id = 26),\n  [3535] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 3, .production_id = 26),\n  [3537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2599),\n  [3539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 5, .production_id = 145),\n  [3541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ternary_expression, 5, .production_id = 145),\n  [3543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2611),\n  [3545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2615),\n  [3547] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, .production_id = 104),\n  [3549] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, .production_id = 104),\n  [3551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2600),\n  [3553] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, .production_id = 103),\n  [3555] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, .production_id = 103),\n  [3557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2639),\n  [3559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237),\n  [3561] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_sequence_expression, 3, .production_id = 60),\n  [3563] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_sequence_expression, 3, .production_id = 60),\n  [3565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, .production_id = 101),\n  [3567] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, .production_id = 101),\n  [3569] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment_expression, 3, .production_id = 65),\n  [3571] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_augmented_assignment_expression, 3, .production_id = 65),\n  [3573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1178),\n  [3575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2566),\n  [3577] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 3, .production_id = 73),\n  [3579] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 3, .production_id = 73),\n  [3581] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_expression, 3, .production_id = 24),\n  [3583] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_expression, 3, .production_id = 24),\n  [3585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3329),\n  [3587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168),\n  [3589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269),\n  [3591] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(85),\n  [3594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3367),\n  [3596] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object, 2), REDUCE(sym_object_pattern, 2),\n  [3599] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object, 2), REDUCE(sym_object_pattern, 2),\n  [3602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811),\n  [3604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(308),\n  [3606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1062),\n  [3608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(305),\n  [3610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85),\n  [3612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304),\n  [3614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303),\n  [3616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(302),\n  [3618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302),\n  [3620] = {.entry = {.count = 1, .reusable = false}}, SHIFT(301),\n  [3622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300),\n  [3624] = {.entry = {.count = 1, .reusable = false}}, SHIFT(299),\n  [3626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(297),\n  [3628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308),\n  [3630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286),\n  [3632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305),\n  [3634] = {.entry = {.count = 1, .reusable = false}}, SHIFT(285),\n  [3636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285),\n  [3638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314),\n  [3640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1867),\n  [3642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(754),\n  [3644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(420),\n  [3646] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(85),\n  [3649] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(85),\n  [3652] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(84),\n  [3655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1044),\n  [3657] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_pattern, 3, .production_id = 29),\n  [3659] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 3, .production_id = 28),\n  [3661] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 3, .production_id = 28),\n  [3663] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object, 3, .production_id = 28), REDUCE(sym_object_pattern, 3, .production_id = 29),\n  [3666] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object, 3, .production_id = 28), REDUCE(sym_object_pattern, 3, .production_id = 29),\n  [3669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1078),\n  [3671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3242),\n  [3673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(336),\n  [3675] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_assignment_pattern, 3, .production_id = 60), REDUCE(sym_assignment_expression, 3, .production_id = 60),\n  [3678] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_assignment_pattern, 3, .production_id = 60),\n  [3680] = {.entry = {.count = 1, .reusable = false}}, SHIFT(448),\n  [3682] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84),\n  [3684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281),\n  [3686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288),\n  [3688] = {.entry = {.count = 1, .reusable = false}}, SHIFT(289),\n  [3690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289),\n  [3692] = {.entry = {.count = 1, .reusable = false}}, SHIFT(290),\n  [3694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291),\n  [3696] = {.entry = {.count = 1, .reusable = false}}, SHIFT(292),\n  [3698] = {.entry = {.count = 1, .reusable = false}}, SHIFT(293),\n  [3700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336),\n  [3702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294),\n  [3704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448),\n  [3706] = {.entry = {.count = 1, .reusable = false}}, SHIFT(295),\n  [3708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295),\n  [3710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296),\n  [3712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325),\n  [3714] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(84),\n  [3717] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_pattern, 2),\n  [3719] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 2),\n  [3721] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 2),\n  [3723] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_array, 2), REDUCE(sym_array_pattern, 2),\n  [3726] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_array, 2), REDUCE(sym_array_pattern, 2),\n  [3729] = {.entry = {.count = 1, .reusable = false}}, SHIFT(855),\n  [3731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2454),\n  [3733] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(84),\n  [3736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_spread_element, 2),\n  [3738] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(85),\n  [3741] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_assignment_pattern, 3, .production_id = 75), REDUCE(sym_assignment_expression, 3, .production_id = 60),\n  [3744] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_assignment_pattern, 3, .production_id = 75),\n  [3746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3571),\n  [3748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861),\n  [3750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(667),\n  [3752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1163),\n  [3754] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(84),\n  [3757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095),\n  [3759] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__initializer, 2, .production_id = 80),\n  [3761] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym__initializer, 2, .production_id = 80), SHIFT(305),\n  [3764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3522),\n  [3766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1589),\n  [3768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__primary_type, 1),\n  [3770] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__primary_type, 1),\n  [3772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784),\n  [3774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__primary_type, 1, .production_id = 14),\n  [3776] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__primary_type, 1, .production_id = 14),\n  [3778] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_assignment_pattern, 3, .production_id = 75), REDUCE(sym_assignment_expression, 3, .production_id = 24),\n  [3781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(566),\n  [3783] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_query, 2, .production_id = 49),\n  [3785] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_query, 2, .production_id = 49),\n  [3787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3334),\n  [3789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3335),\n  [3791] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_query, 2, .production_id = 48),\n  [3793] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_query, 2, .production_id = 48),\n  [3795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3330),\n  [3797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3332),\n  [3799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 132),\n  [3801] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 132),\n  [3803] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 135),\n  [3805] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 135),\n  [3807] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 3, .production_id = 98),\n  [3809] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 3, .production_id = 98),\n  [3811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(841),\n  [3813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(840),\n  [3815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774),\n  [3817] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nested_type_identifier, 3, .production_id = 96),\n  [3819] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_nested_type_identifier, 3, .production_id = 96),\n  [3821] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_nested_identifier, 3), REDUCE(sym_nested_type_identifier, 3, .production_id = 96),\n  [3824] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_literal_type, 3),\n  [3826] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_literal_type, 3),\n  [3828] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 3),\n  [3830] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 3),\n  [3832] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_type, 3),\n  [3834] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_type, 3),\n  [3836] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_call_expression, 2, .production_id = 95),\n  [3838] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_call_expression, 2, .production_id = 95),\n  [3840] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_call_expression, 2, .production_id = 94),\n  [3842] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_call_expression, 2, .production_id = 94),\n  [3844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1609),\n  [3846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_call_expression, 2, .production_id = 19),\n  [3848] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_call_expression, 2, .production_id = 19),\n  [3850] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 3),\n  [3852] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 3),\n  [3854] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generic_type, 2, .production_id = 55),\n  [3856] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generic_type, 2, .production_id = 55),\n  [3858] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_type_query, 2),\n  [3860] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_index_type_query, 2),\n  [3862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(738),\n  [3864] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_infer_type, 2, .production_id = 54),\n  [3866] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_infer_type, 2, .production_id = 54),\n  [3868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_readonly_type, 2),\n  [3870] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_readonly_type, 2),\n  [3872] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_flow_maybe_type, 2),\n  [3874] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_flow_maybe_type, 2),\n  [3876] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type, 1),\n  [3878] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type, 1),\n  [3880] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generic_type, 2, .production_id = 51),\n  [3882] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generic_type, 2, .production_id = 51),\n  [3884] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_literal_type, 2),\n  [3886] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_literal_type, 2),\n  [3888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__number, 2, .production_id = 8),\n  [3890] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__number, 2, .production_id = 8),\n  [3892] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 2),\n  [3894] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_union_type, 2),\n  [3896] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_intersection_type, 2),\n  [3898] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_intersection_type, 2),\n  [3900] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 2),\n  [3902] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 2),\n  [3904] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal_type, 1),\n  [3906] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_literal_type, 1),\n  [3909] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_literal_type, 1),\n  [3912] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_query, 2, .production_id = 50),\n  [3914] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_query, 2, .production_id = 50),\n  [3916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3343),\n  [3918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3346),\n  [3920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 2),\n  [3922] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 2),\n  [3924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267),\n  [3926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524),\n  [3928] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal_type, 1, .production_id = 15),\n  [3930] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal_type, 1, .production_id = 15),\n  [3932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal_type, 1),\n  [3934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_predicate, 3, .production_id = 147),\n  [3936] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_predicate, 3, .production_id = 147),\n  [3938] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_intersection_type, 3),\n  [3940] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_intersection_type, 3),\n  [3942] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_existential_type, 1),\n  [3944] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_existential_type, 1),\n  [3946] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 3),\n  [3948] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_union_type, 3),\n  [3950] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_type, 3),\n  [3952] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_type, 3),\n  [3954] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 4),\n  [3956] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 4),\n  [3958] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 66),\n  [3960] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 66),\n  [3962] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_array, 2), REDUCE(sym_tuple_type, 2),\n  [3965] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_array, 2), REDUCE(sym_tuple_type, 2),\n  [3968] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object, 2), REDUCE(sym_object_type, 2),\n  [3971] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object, 2), REDUCE(sym_object_type, 2),\n  [3974] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 67),\n  [3976] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 67),\n  [3978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 131),\n  [3980] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 131),\n  [3982] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1621),\n  [3984] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 2),\n  [3986] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 3, .production_id = 29),\n  [3988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 2),\n  [3990] = {.entry = {.count = 1, .reusable = true}}, SHIFT(679),\n  [3992] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 133),\n  [3994] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 133),\n  [3996] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 134),\n  [3998] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 134),\n  [4000] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2181),\n  [4002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1252),\n  [4004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2306),\n  [4006] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2337),\n  [4008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_array_repeat1, 2),\n  [4010] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 136),\n  [4012] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_member_expression, 3, .production_id = 136),\n  [4014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(859),\n  [4016] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 4),\n  [4018] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 4),\n  [4020] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constructor_type, 4, .production_id = 137),\n  [4022] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constructor_type, 4, .production_id = 137),\n  [4024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487),\n  [4026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lookup_type, 4),\n  [4028] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lookup_type, 4),\n  [4030] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 4, .production_id = 138),\n  [4032] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 4, .production_id = 138),\n  [4034] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 5),\n  [4036] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 5),\n  [4038] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_satisfies_expression, 3),\n  [4040] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_satisfies_expression, 3),\n  [4042] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 116),\n  [4044] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 116),\n  [4046] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 164),\n  [4048] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 164),\n  [4050] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 165),\n  [4052] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 165),\n  [4054] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 166),\n  [4056] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 4, .production_id = 166),\n  [4058] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 5),\n  [4060] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 5),\n  [4062] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constructor_type, 5, .production_id = 167),\n  [4064] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constructor_type, 5, .production_id = 167),\n  [4066] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constructor_type, 5, .production_id = 168),\n  [4068] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constructor_type, 5, .production_id = 168),\n  [4070] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 6),\n  [4072] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 6),\n  [4074] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_as_expression, 3),\n  [4076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_as_expression, 3),\n  [4078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 187),\n  [4080] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 187),\n  [4082] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 188),\n  [4084] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 188),\n  [4086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1945),\n  [4088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_new_expression, 3, .production_id = 59),\n  [4090] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_new_expression, 3, .production_id = 59),\n  [4092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 108),\n  [4094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_workgroup_repeat1, 2, .production_id = 108),\n  [4096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3254),\n  [4098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3258),\n  [4100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3238),\n  [4102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3247),\n  [4104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3230),\n  [4106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 189),\n  [4108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 189),\n  [4110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 190),\n  [4112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_query_subscript_expression, 5, .production_id = 190),\n  [4114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1895),\n  [4116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1556),\n  [4118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(648),\n  [4120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(641),\n  [4122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constructor_type, 6, .production_id = 191),\n  [4124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constructor_type, 6, .production_id = 191),\n  [4126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_type, 7, .production_id = 208),\n  [4128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_type, 7, .production_id = 208),\n  [4130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1503),\n  [4132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1636),\n  [4134] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_array, 2), REDUCE(sym_array_pattern, 2), REDUCE(sym_tuple_type, 2),\n  [4138] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_object, 2), REDUCE(sym_object_pattern, 2), REDUCE(sym_object_type, 2),\n  [4142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_pattern, 3, .production_id = 60),\n  [4144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_predicate, 3, .production_id = 81),\n  [4146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_predicate, 3, .production_id = 81),\n  [4148] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__primary_type, 1, .production_id = 14),\n  [4151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__primary_type, 1, .production_id = 14),\n  [4154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(80),\n  [4157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706),\n  [4159] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11),\n  [4161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_async_block, 2, .production_id = 11),\n  [4163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_async_block, 2, .production_id = 11),\n  [4165] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(87),\n  [4168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_string, 2),\n  [4170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_string, 2),\n  [4172] = {.entry = {.count = 1, .reusable = false}}, SHIFT(751),\n  [4174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(753),\n  [4176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823),\n  [4178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(400),\n  [4180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(401),\n  [4182] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87),\n  [4184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402),\n  [4186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282),\n  [4188] = {.entry = {.count = 1, .reusable = false}}, SHIFT(409),\n  [4190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409),\n  [4192] = {.entry = {.count = 1, .reusable = false}}, SHIFT(410),\n  [4194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411),\n  [4196] = {.entry = {.count = 1, .reusable = false}}, SHIFT(418),\n  [4198] = {.entry = {.count = 1, .reusable = false}}, SHIFT(428),\n  [4200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(400),\n  [4202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(432),\n  [4204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(401),\n  [4206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(433),\n  [4208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433),\n  [4210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458),\n  [4212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338),\n  [4214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_expression, 2, .production_id = 17),\n  [4216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_construct_expression, 2, .production_id = 17),\n  [4218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shader, 2, .production_id = 11),\n  [4220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_shader, 2, .production_id = 11),\n  [4222] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(87),\n  [4225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_update_expression, 2, .production_id = 18),\n  [4227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 18),\n  [4229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 2, .production_id = 19),\n  [4231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 2, .production_id = 19),\n  [4233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_glimmer_closing_tag, 1),\n  [4235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_glimmer_closing_tag, 1),\n  [4237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_glimmer_template, 2, .production_id = 20),\n  [4239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_glimmer_template, 2, .production_id = 20),\n  [4241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(87),\n  [4244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1082),\n  [4246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(87),\n  [4249] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_array_pattern, 2), REDUCE(sym_tuple_type, 2),\n  [4252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1073),\n  [4254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 3),\n  [4256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 3),\n  [4258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_template_string, 2), REDUCE(sym_template_literal_type, 2),\n  [4261] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_template_string, 2), REDUCE(sym_template_literal_type, 2),\n  [4264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(660),\n  [4266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662),\n  [4268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 2, .production_id = 38),\n  [4270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 2, .production_id = 38),\n  [4272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__primary_type, 1, .production_id = 14), REDUCE(sym__parameter_name, 2, .production_id = 38),\n  [4275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48),\n  [4277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665),\n  [4279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(668),\n  [4281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 3),\n  [4283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 3),\n  [4285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664),\n  [4287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3259),\n  [4289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3260),\n  [4291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 1, .production_id = 9),\n  [4293] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__parameter_name, 1, .production_id = 9),\n  [4296] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__parameter_name, 1, .production_id = 9), REDUCE(sym__primary_type, 1, .production_id = 14),\n  [4300] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1), REDUCE(sym__parameter_name, 1, .production_id = 9),\n  [4303] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35),\n  [4305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659),\n  [4307] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_regex, 3, .production_id = 38),\n  [4309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_regex, 3, .production_id = 38),\n  [4311] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1774),\n  [4313] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80),\n  [4315] = {.entry = {.count = 1, .reusable = false}}, SHIFT(464),\n  [4317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(465),\n  [4319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460),\n  [4321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459),\n  [4323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(457),\n  [4325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457),\n  [4327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(455),\n  [4329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(454),\n  [4331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(431),\n  [4333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(429),\n  [4335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464),\n  [4337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426),\n  [4339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465),\n  [4341] = {.entry = {.count = 1, .reusable = false}}, SHIFT(423),\n  [4343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423),\n  [4345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422),\n  [4347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(440),\n  [4349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function, 3, .production_id = 57),\n  [4351] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function, 3, .production_id = 57),\n  [4353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_meta_property, 3),\n  [4355] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_meta_property, 3),\n  [4357] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_new_expression, 3, .production_id = 58),\n  [4359] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_new_expression, 3, .production_id = 58),\n  [4361] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, .production_id = 76),\n  [4363] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_string, 3),\n  [4365] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_string, 3),\n  [4367] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(80),\n  [4370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup, 3),\n  [4372] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_workgroup, 3),\n  [4374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shader, 3, .production_id = 63),\n  [4376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_shader, 3, .production_id = 63),\n  [4378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shader, 3, .production_id = 64),\n  [4380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_shader, 3, .production_id = 64),\n  [4382] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(80),\n  [4385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670),\n  [4387] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(80),\n  [4390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 1, .production_id = 9),\n  [4392] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__parameter_name, 1, .production_id = 9), REDUCE(sym__primary_type, 1, .production_id = 14),\n  [4395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 3, .production_id = 70),\n  [4397] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 3, .production_id = 70),\n  [4399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 3, .production_id = 71),\n  [4401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 3, .production_id = 71),\n  [4403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_glimmer_template, 3, .production_id = 72),\n  [4405] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_glimmer_template, 3, .production_id = 72),\n  [4407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1018),\n  [4409] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 4, .production_id = 28),\n  [4411] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 4, .production_id = 28),\n  [4413] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 4),\n  [4415] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 4),\n  [4417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 4),\n  [4419] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 4),\n  [4421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2885),\n  [4423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_regex, 4, .production_id = 99),\n  [4425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_regex, 4, .production_id = 99),\n  [4427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_function, 4, .production_id = 102),\n  [4429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_function, 4, .production_id = 102),\n  [4431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_new_expression, 4, .production_id = 107),\n  [4433] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_new_expression, 4, .production_id = 107),\n  [4435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup, 4, .production_id = 109),\n  [4437] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_workgroup, 4, .production_id = 109),\n  [4439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shader, 4, .production_id = 115),\n  [4441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_shader, 4, .production_id = 115),\n  [4443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1017),\n  [4445] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 4, .production_id = 117),\n  [4447] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 4, .production_id = 117),\n  [4449] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_pattern, 2), REDUCE(sym_object_type, 2),\n  [4452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2462),\n  [4454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2298),\n  [4456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333),\n  [4458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(393),\n  [4460] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1830),\n  [4462] = {.entry = {.count = 1, .reusable = false}}, SHIFT(344),\n  [4464] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_literal_type, 1), REDUCE(sym_rest_pattern, 2),\n  [4468] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88),\n  [4470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(309),\n  [4472] = {.entry = {.count = 1, .reusable = false}}, SHIFT(313),\n  [4474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321),\n  [4476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331),\n  [4478] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334),\n  [4480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334),\n  [4482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(339),\n  [4484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343),\n  [4486] = {.entry = {.count = 1, .reusable = false}}, SHIFT(349),\n  [4488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(351),\n  [4490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309),\n  [4492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353),\n  [4494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313),\n  [4496] = {.entry = {.count = 1, .reusable = false}}, SHIFT(359),\n  [4498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359),\n  [4500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364),\n  [4502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438),\n  [4504] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym__initializer, 2, .production_id = 80), SHIFT(313),\n  [4507] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(88),\n  [4510] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(88),\n  [4513] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 4, .production_id = 124),\n  [4515] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 4, .production_id = 124),\n  [4517] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(88),\n  [4520] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317),\n  [4522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419),\n  [4524] = {.entry = {.count = 1, .reusable = false}}, SHIFT(342),\n  [4526] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(88),\n  [4529] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 4, .production_id = 122),\n  [4531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 4, .production_id = 122),\n  [4533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 2, .production_id = 41),\n  [4535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 2, .production_id = 41),\n  [4537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 5, .production_id = 155),\n  [4539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 5, .production_id = 155),\n  [4541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 3, .production_id = 87),\n  [4543] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 3, .production_id = 87),\n  [4545] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__parameter_name, 3, .production_id = 91),\n  [4547] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_name, 3, .production_id = 91),\n  [4549] = {.entry = {.count = 1, .reusable = false}}, SHIFT(452),\n  [4551] = {.entry = {.count = 1, .reusable = false}}, SHIFT(378),\n  [4553] = {.entry = {.count = 1, .reusable = false}}, SHIFT(376),\n  [4555] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82),\n  [4557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375),\n  [4559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374),\n  [4561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(372),\n  [4563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372),\n  [4565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(371),\n  [4567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369),\n  [4569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(368),\n  [4571] = {.entry = {.count = 1, .reusable = false}}, SHIFT(367),\n  [4573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378),\n  [4575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365),\n  [4577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376),\n  [4579] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363),\n  [4581] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363),\n  [4583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361),\n  [4585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310),\n  [4587] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_computed_property_name, 3),\n  [4589] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 8), SHIFT(82),\n  [4592] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_await_expression, 2), SHIFT(82),\n  [4595] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_update_expression, 2, .production_id = 8), SHIFT(82),\n  [4598] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 65), SHIFT(82),\n  [4601] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__property_name, 1),\n  [4603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3310),\n  [4605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3461),\n  [4607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2095),\n  [4609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3608),\n  [4611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3420),\n  [4613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3507),\n  [4615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3569),\n  [4617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3515),\n  [4619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3607),\n  [4621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3602),\n  [4623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3506),\n  [4625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3593),\n  [4627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3491),\n  [4629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3417),\n  [4631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3654),\n  [4633] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3669),\n  [4635] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2028),\n  [4637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3559),\n  [4639] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3554),\n  [4641] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2030),\n  [4643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3524),\n  [4645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3497),\n  [4647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3555),\n  [4649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3423),\n  [4651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3550),\n  [4653] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3689),\n  [4655] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2029),\n  [4657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3548),\n  [4659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3424),\n  [4661] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2484),\n  [4663] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2671),\n  [4665] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3122),\n  [4667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3175),\n  [4669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2969),\n  [4671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3380),\n  [4673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3360),\n  [4675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2997),\n  [4677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3379),\n  [4679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755),\n  [4681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3588),\n  [4683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867),\n  [4685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356),\n  [4687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3359),\n  [4689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2986),\n  [4691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3355),\n  [4693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381),\n  [4695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3209),\n  [4697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3128),\n  [4699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3210),\n  [4701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3204),\n  [4703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3134),\n  [4705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3206),\n  [4707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439),\n  [4709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312),\n  [4711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399),\n  [4713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406),\n  [4715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445),\n  [4717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(794),\n  [4719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3478),\n  [4721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782),\n  [4723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461),\n  [4725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858),\n  [4727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(722),\n  [4729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311),\n  [4731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416),\n  [4733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355),\n  [4735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307),\n  [4737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3215),\n  [4739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3124),\n  [4741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3216),\n  [4743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385),\n  [4745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345),\n  [4747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866),\n  [4749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(864),\n  [4751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(863),\n  [4753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(403),\n  [4755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 2, .production_id = 31),\n  [4757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2461),\n  [4759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797),\n  [4761] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2288),\n  [4763] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780),\n  [4765] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__primary_type, 1, .production_id = 12), REDUCE(sym_type_parameter, 1, .production_id = 13),\n  [4768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781),\n  [4770] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__primary_type, 1, .production_id = 12), SHIFT(781),\n  [4773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175),\n  [4775] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3322),\n  [4777] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3051),\n  [4779] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3321),\n  [4781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3053),\n  [4783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3320),\n  [4785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3318),\n  [4787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3056),\n  [4789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3317),\n  [4791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788),\n  [4793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787),\n  [4795] = {.entry = {.count = 1, .reusable = false}}, SHIFT(740),\n  [4797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778),\n  [4799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(762),\n  [4801] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__primary_type, 1, .production_id = 12), SHIFT(3340),\n  [4804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736),\n  [4806] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 31),\n  [4808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(766),\n  [4810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3627),\n  [4812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(745),\n  [4814] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_computed_property_name, 3),\n  [4816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170),\n  [4818] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_signature, 2, .production_id = 22),\n  [4820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2017),\n  [4822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854),\n  [4824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3314),\n  [4826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3059),\n  [4828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3313),\n  [4830] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_signature, 1, .production_id = 3),\n  [4832] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 1, .production_id = 5),\n  [4834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3243),\n  [4836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246),\n  [4838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(446),\n  [4840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3096),\n  [4842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595),\n  [4844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278),\n  [4846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3103),\n  [4848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838),\n  [4850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800),\n  [4852] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3031),\n  [4854] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2804),\n  [4856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3389),\n  [4858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3026),\n  [4860] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_type_repeat1, 2), SHIFT_REPEAT(3096),\n  [4863] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_method_type_repeat1, 2),\n  [4865] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_type_repeat1, 2), SHIFT_REPEAT(1278),\n  [4868] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_type_repeat1, 2), SHIFT_REPEAT(3103),\n  [4871] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_type_repeat1, 2), SHIFT_REPEAT(3480),\n  [4874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(556),\n  [4876] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_annotation_arrow, 2),\n  [4878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2025),\n  [4880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(742),\n  [4882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(746),\n  [4884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3165),\n  [4886] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 128),\n  [4888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2504),\n  [4890] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 4),\n  [4892] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 186),\n  [4894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2497),\n  [4896] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 3),\n  [4898] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_annotation, 2),\n  [4900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(590),\n  [4902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1270),\n  [4904] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3097),\n  [4906] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_imports, 2),\n  [4908] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_imports, 3),\n  [4910] = {.entry = {.count = 1, .reusable = true}}, SHIFT(538),\n  [4912] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_signature_type_repeat1, 2), SHIFT_REPEAT(3096),\n  [4915] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_method_signature_type_repeat1, 2),\n  [4917] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_signature_type_repeat1, 2), SHIFT_REPEAT(1270),\n  [4920] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_method_signature_type_repeat1, 2), SHIFT_REPEAT(3480),\n  [4923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 1, .production_id = 5),\n  [4925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2481),\n  [4927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 3),\n  [4929] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 4),\n  [4931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3125),\n  [4933] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 223),\n  [4935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2467),\n  [4937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 4, .production_id = 29),\n  [4939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 161),\n  [4941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2518),\n  [4943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2651),\n  [4945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1952),\n  [4947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79),\n  [4949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2958),\n  [4951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819),\n  [4953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818),\n  [4955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789),\n  [4957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2428),\n  [4959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088),\n  [4961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151),\n  [4963] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3513),\n  [4965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2541),\n  [4967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1618),\n  [4969] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 1, .production_id = 5),\n  [4971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78),\n  [4973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2476),\n  [4975] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 4, .production_id = 161),\n  [4977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2516),\n  [4979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 3),\n  [4981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 2),\n  [4983] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 4),\n  [4985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(414),\n  [4987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2571),\n  [4989] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 1, .production_id = 5),\n  [4991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1865),\n  [4993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1985),\n  [4995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1876),\n  [4997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 3, .production_id = 128),\n  [4999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2478),\n  [5001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 5),\n  [5003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1931),\n  [5005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1650),\n  [5007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 5, .production_id = 186),\n  [5009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2453),\n  [5011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1753),\n  [5013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(713),\n  [5015] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_opting_type_annotation, 2),\n  [5017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_omitting_type_annotation, 2),\n  [5019] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 2, .production_id = 31),\n  [5021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2487),\n  [5023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 6, .production_id = 186),\n  [5025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_chain, 1),\n  [5027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2428),\n  [5029] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2326),\n  [5031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3639),\n  [5033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2326),\n  [5035] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 4, .production_id = 163),\n  [5037] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_extends_type_clause, 2, .production_id = 111),\n  [5039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2966),\n  [5041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3465),\n  [5043] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extends_type_clause, 2, .production_id = 111),\n  [5045] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 223),\n  [5047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2603),\n  [5049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2574),\n  [5051] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 2, .production_id = 5),\n  [5053] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 4, .production_id = 128),\n  [5055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 2, .production_id = 5),\n  [5057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332),\n  [5059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 1, .production_id = 10),\n  [5061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2555),\n  [5063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_asserts, 3),\n  [5065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 3, .production_id = 127),\n  [5067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 3, .production_id = 31),\n  [5069] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 3, .production_id = 130),\n  [5071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(504),\n  [5073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3544),\n  [5075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779),\n  [5077] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 1, .production_id = 13),\n  [5079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2019),\n  [5081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(759),\n  [5083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 186),\n  [5085] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), SHIFT(381),\n  [5088] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2362),\n  [5090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3181),\n  [5092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2911),\n  [5094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2362),\n  [5096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 128),\n  [5098] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 2, .production_id = 93),\n  [5100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), SHIFT(439),\n  [5103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2317),\n  [5105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2316),\n  [5107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 5, .production_id = 161),\n  [5109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 161),\n  [5111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2728),\n  [5113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(920),\n  [5115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(913),\n  [5117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1538),\n  [5119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3505),\n  [5121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(709),\n  [5123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1668),\n  [5125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785),\n  [5127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790),\n  [5129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793),\n  [5131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791),\n  [5133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850),\n  [5135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104),\n  [5137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2701),\n  [5139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893),\n  [5141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2222),\n  [5143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2605),\n  [5145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1681),\n  [5147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251),\n  [5149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(912),\n  [5151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2677),\n  [5153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2698),\n  [5155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2684),\n  [5157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2039),\n  [5159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(643),\n  [5161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239),\n  [5163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3543),\n  [5165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(735),\n  [5167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1461),\n  [5169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2735),\n  [5171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 111),\n  [5173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 111),\n  [5175] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2086),\n  [5177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_parameter, 2, .production_id = 10),\n  [5179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1848),\n  [5181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_signature, 2, .production_id = 21),\n  [5183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2725),\n  [5185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2802),\n  [5187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint, 2),\n  [5189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2673),\n  [5191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(922),\n  [5193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1739),\n  [5195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_extends_type_clause, 2, .production_id = 112),\n  [5197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extends_type_clause, 2, .production_id = 112),\n  [5199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2805),\n  [5201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 2, .production_id = 5),\n  [5203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2661),\n  [5205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(703),\n  [5207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2803),\n  [5209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_switch_body_repeat1, 2),\n  [5211] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_switch_body_repeat1, 2), SHIFT_REPEAT(239),\n  [5214] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_switch_body_repeat1, 2), SHIFT_REPEAT(3543),\n  [5217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(914),\n  [5219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_predicate_annotation, 2),\n  [5221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__call_signature, 3, .production_id = 74),\n  [5223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1574),\n  [5225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2798),\n  [5227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3411),\n  [5229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896),\n  [5231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2177),\n  [5233] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__call_signature, 2, .production_id = 22), SHIFT(828),\n  [5236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2724),\n  [5238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1328),\n  [5240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2723),\n  [5242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(730),\n  [5244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2228),\n  [5246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(903),\n  [5248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424),\n  [5250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2756),\n  [5252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2757),\n  [5254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2719),\n  [5256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3094),\n  [5258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156),\n  [5260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(900),\n  [5262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 2), SHIFT_REPEAT(2605),\n  [5265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 2),\n  [5267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 2), SHIFT_REPEAT(251),\n  [5270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2676),\n  [5272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2744),\n  [5274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2780),\n  [5276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2700),\n  [5278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2692),\n  [5280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(718),\n  [5282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(691),\n  [5284] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__call_signature, 1, .production_id = 3), SHIFT(835),\n  [5287] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(106),\n  [5290] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__property_name, 1, .production_id = 7), SHIFT(3344),\n  [5293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2782),\n  [5295] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2302),\n  [5297] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719),\n  [5299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2812),\n  [5301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(899),\n  [5303] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__call_signature, 2, .production_id = 22), SHIFT(857),\n  [5306] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_type_repeat1, 2), SHIFT_REPEAT(971),\n  [5309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_type_repeat1, 2),\n  [5311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2690),\n  [5313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__tuple_type_member, 1),\n  [5315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3336),\n  [5317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2672),\n  [5319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898),\n  [5321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2715),\n  [5323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2206),\n  [5325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2683),\n  [5327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717),\n  [5329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2340),\n  [5331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(917),\n  [5333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2422),\n  [5335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2678),\n  [5337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723),\n  [5339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(908),\n  [5341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2741),\n  [5343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2740),\n  [5345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894),\n  [5347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3237),\n  [5349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2858),\n  [5351] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__call_signature, 1, .production_id = 3), SHIFT(865),\n  [5354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(705),\n  [5356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1838),\n  [5358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2789),\n  [5360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(699),\n  [5362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2408),\n  [5364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594),\n  [5366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895),\n  [5368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 3, .production_id = 126),\n  [5370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3202),\n  [5372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_signature, 4, .production_id = 105),\n  [5374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(593),\n  [5376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(740),\n  [5378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2153),\n  [5380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(768),\n  [5382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2814),\n  [5384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 3, .production_id = 129),\n  [5386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 6, .production_id = 200),\n  [5388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 6, .production_id = 202),\n  [5390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 205),\n  [5392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2381),\n  [5394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_implements_clause_repeat1, 2),\n  [5396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 8, .production_id = 224),\n  [5398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 3, .production_id = 81),\n  [5400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2447),\n  [5402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2674),\n  [5404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106),\n  [5406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20),\n  [5408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(543),\n  [5410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(546),\n  [5412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(545),\n  [5414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 8, .production_id = 225),\n  [5416] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 2, .production_id = 32),\n  [5418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278),\n  [5420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276),\n  [5422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2178),\n  [5424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2666),\n  [5426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 6, .production_id = 204),\n  [5428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 4, .production_id = 158),\n  [5430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 2, .production_id = 33),\n  [5432] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 217),\n  [5434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 204),\n  [5436] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 160),\n  [5438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 159),\n  [5440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 4, .production_id = 157),\n  [5442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1417),\n  [5444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3064),\n  [5446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 6, .production_id = 203),\n  [5448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 2, .production_id = 33),\n  [5450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 6, .production_id = 205),\n  [5452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1432),\n  [5454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2705),\n  [5456] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_signature, 6, .production_id = 206),\n  [5458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 4, .production_id = 159),\n  [5460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 4, .production_id = 160),\n  [5462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 230),\n  [5464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_signature, 5, .production_id = 139),\n  [5466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578),\n  [5468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(570),\n  [5470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(571),\n  [5472] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 8, .production_id = 233),\n  [5474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3021),\n  [5476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_signature, 1, .production_id = 47),\n  [5478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810),\n  [5480] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_mapped_type_clause, 3, .production_id = 156),\n  [5482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_signature, 6, .production_id = 207),\n  [5484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_signature, 7, .production_id = 218),\n  [5486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1761),\n  [5488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 183),\n  [5490] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 5, .production_id = 185),\n  [5492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 81),\n  [5494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 5, .production_id = 184),\n  [5496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 5, .production_id = 183),\n  [5498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253),\n  [5500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280),\n  [5502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2456),\n  [5504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1244),\n  [5506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598),\n  [5508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 7, .production_id = 217),\n  [5510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 7, .production_id = 216),\n  [5512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 182),\n  [5514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_signature, 5, .production_id = 181),\n  [5516] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_signature, 7, .production_id = 215),\n  [5518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615),\n  [5520] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 5, .production_id = 182),\n  [5522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2737),\n  [5524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3294),\n  [5526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2295),\n  [5528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2808),\n  [5530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(607),\n  [5532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_type, 2),\n  [5534] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rest_type, 2),\n  [5536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3146),\n  [5538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_construct_signature, 4, .production_id = 162),\n  [5540] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 112),\n  [5542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 112),\n  [5544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2269),\n  [5546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 129),\n  [5548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 2, .production_id = 33),\n  [5550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1660),\n  [5552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2746),\n  [5554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_literal_type_repeat1, 2),\n  [5556] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_literal_type_repeat1, 2), SHIFT_REPEAT(768),\n  [5559] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_literal_type_repeat1, 2), SHIFT_REPEAT(2814),\n  [5562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2498),\n  [5564] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_extends_type_clause, 3, .production_id = 142),\n  [5566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extends_type_clause, 3, .production_id = 142),\n  [5568] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_array_repeat1, 2), SHIFT_REPEAT(162),\n  [5571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839),\n  [5573] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_pattern_repeat1, 2, .production_id = 29),\n  [5575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2726),\n  [5577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2664),\n  [5579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1755),\n  [5581] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2540),\n  [5583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2542),\n  [5585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2258),\n  [5587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1301),\n  [5589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3159),\n  [5591] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 2, .production_id = 40),\n  [5593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(757),\n  [5595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773),\n  [5597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2179),\n  [5599] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1239),\n  [5601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2937),\n  [5603] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(),\n  [5605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3009),\n  [5607] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1595),\n  [5609] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2423),\n  [5611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2957),\n  [5613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853),\n  [5615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2959),\n  [5617] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128),\n  [5619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2931),\n  [5621] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2415),\n  [5623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2839),\n  [5625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2841),\n  [5627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2525),\n  [5629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609),\n  [5631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(602),\n  [5633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(427),\n  [5635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2465),\n  [5637] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2089),\n  [5639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2216),\n  [5641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1817),\n  [5643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2087),\n  [5645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2851),\n  [5647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2852),\n  [5649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(449),\n  [5651] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 2, .production_id = 53),\n  [5653] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 2, .production_id = 33),\n  [5655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801),\n  [5657] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_variable_declaration_repeat1, 2), SHIFT_REPEAT(2525),\n  [5660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_variable_declaration_repeat1, 2),\n  [5662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_extends_type_clause, 3, .production_id = 143),\n  [5664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_extends_type_clause, 3, .production_id = 143),\n  [5666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2838),\n  [5668] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129),\n  [5670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2842),\n  [5672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2843),\n  [5674] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_parameter, 3, .production_id = 89),\n  [5676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842),\n  [5678] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2895),\n  [5680] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1871),\n  [5682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(786),\n  [5684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2391),\n  [5686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803),\n  [5688] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 171),\n  [5690] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 171), SHIFT_REPEAT(2966),\n  [5693] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_extends_type_clause_repeat1, 2, .production_id = 171),\n  [5695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3400),\n  [5697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(849),\n  [5699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2419),\n  [5701] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_substitution, 3),\n  [5703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3083),\n  [5705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2613),\n  [5707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(582),\n  [5709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2065),\n  [5711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2612),\n  [5713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2155),\n  [5715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2794),\n  [5717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2800),\n  [5719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2727),\n  [5721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2729),\n  [5723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),\n  [5725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2900),\n  [5727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2899),\n  [5729] = {.entry = {.count = 1, .reusable = false}}, SHIFT(577),\n  [5731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2888),\n  [5733] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2051),\n  [5735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2890),\n  [5737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2891),\n  [5739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2889),\n  [5741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2466),\n  [5743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831),\n  [5745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3047),\n  [5747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(982),\n  [5749] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1275),\n  [5751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2933),\n  [5753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2934),\n  [5755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_enum_body_repeat1, 2, .production_id = 31),\n  [5757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2905),\n  [5759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2904),\n  [5761] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2912),\n  [5763] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2909),\n  [5765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2743),\n  [5767] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2761),\n  [5769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(806),\n  [5771] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3306),\n  [5773] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__module_export_name, 1),\n  [5775] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 1, .production_id = 5),\n  [5777] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1238),\n  [5779] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1280),\n  [5781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2926),\n  [5783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2924),\n  [5785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2932),\n  [5787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2927),\n  [5789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(604),\n  [5791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(564),\n  [5793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2940),\n  [5795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2938),\n  [5797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1419),\n  [5799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772),\n  [5801] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 3, .production_id = 81),\n  [5803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2369),\n  [5805] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat2, 2),\n  [5807] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat2, 2), SHIFT_REPEAT(2957),\n  [5810] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 1),\n  [5812] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 1), REDUCE(aux_sym_template_literal_type_repeat1, 1),\n  [5815] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2),\n  [5817] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2), SHIFT_REPEAT(2959),\n  [5820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1501),\n  [5822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2745),\n  [5824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2742),\n  [5826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1274),\n  [5828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2730),\n  [5830] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2718),\n  [5832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2559),\n  [5834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2552),\n  [5836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2556),\n  [5838] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_mapped_type_clause, 5, .production_id = 201),\n  [5840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2074),\n  [5842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2018),\n  [5844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2032),\n  [5846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 5),\n  [5848] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 211),\n  [5850] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 210),\n  [5852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(684),\n  [5854] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 209),\n  [5856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105),\n  [5858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2831),\n  [5860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2191),\n  [5862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841),\n  [5864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840),\n  [5866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683),\n  [5868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3030),\n  [5870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3029),\n  [5872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2045),\n  [5874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2016),\n  [5876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2067),\n  [5878] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 221),\n  [5880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(739),\n  [5882] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_abstract_method_signature, 5, .production_id = 207),\n  [5884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685),\n  [5886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1418),\n  [5888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 5, .production_id = 212),\n  [5890] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2), SHIFT_REPEAT(3249),\n  [5893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2),\n  [5895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2359),\n  [5897] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_imports, 1),\n  [5899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1932),\n  [5901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1483),\n  [5903] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 170),\n  [5905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2050),\n  [5907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2007),\n  [5909] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2046),\n  [5911] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 193),\n  [5913] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_abstract_method_signature, 4, .production_id = 181),\n  [5915] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_abstract_method_signature, 4, .production_id = 139),\n  [5917] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_implements_clause_repeat1, 2), SHIFT_REPEAT(748),\n  [5920] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2347),\n  [5922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3645),\n  [5924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1925),\n  [5926] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 194),\n  [5928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(767),\n  [5930] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_glimmer_template_repeat1, 2), SHIFT_REPEAT(3009),\n  [5933] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_glimmer_template_repeat1, 2),\n  [5935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1063),\n  [5937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250),\n  [5939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1055),\n  [5941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 4, .production_id = 192),\n  [5943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 219),\n  [5945] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 220),\n  [5947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103),\n  [5949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2561),\n  [5951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2076),\n  [5953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2008),\n  [5955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2075),\n  [5957] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_tuple_type_repeat1, 2), SHIFT_REPEAT(690),\n  [5960] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tuple_type_repeat1, 2),\n  [5962] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 6, .production_id = 222),\n  [5964] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_parameters, 5),\n  [5966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_type, 3),\n  [5968] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1243),\n  [5970] = {.entry = {.count = 1, .reusable = true}}, SHIFT(539),\n  [5972] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 2),\n  [5974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2372),\n  [5976] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3048),\n  [5978] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3042),\n  [5980] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3033),\n  [5982] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3),\n  [5984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2495),\n  [5986] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2663),\n  [5988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 1, .production_id = 5),\n  [5990] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1823),\n  [5992] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4),\n  [5994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2375),\n  [5996] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686),\n  [5998] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2416),\n  [6000] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 2, .production_id = 32),\n  [6002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1241),\n  [6004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542),\n  [6006] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_enum_body_repeat1, 2, .production_id = 173), SHIFT_REPEAT(1260),\n  [6009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_enum_body_repeat1, 2, .production_id = 173),\n  [6011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(708),\n  [6013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(710),\n  [6015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2970),\n  [6017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2371),\n  [6019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1898),\n  [6021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1292),\n  [6023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 3),\n  [6025] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2), SHIFT_REPEAT(1153),\n  [6028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_repeat1, 2),\n  [6030] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_pattern_repeat1, 2), SHIFT_REPEAT(1130),\n  [6033] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_pattern_repeat1, 2),\n  [6035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2272),\n  [6037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2026),\n  [6039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2268),\n  [6041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2259),\n  [6043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2024),\n  [6045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2253),\n  [6047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2242),\n  [6049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2022),\n  [6051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2237),\n  [6053] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 82),\n  [6055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2221),\n  [6057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2021),\n  [6059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2214),\n  [6061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 141),\n  [6063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 3, .production_id = 169),\n  [6065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687),\n  [6067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_abstract_method_signature, 3, .production_id = 105),\n  [6069] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 2, .production_id = 31),\n  [6071] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_abstract_method_signature, 6, .production_id = 218),\n  [6073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 226),\n  [6075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253),\n  [6077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3020),\n  [6079] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_parameters, 4),\n  [6081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 227),\n  [6083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_abstract_method_signature, 5, .production_id = 206),\n  [6085] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 228),\n  [6087] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 7, .production_id = 229),\n  [6089] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 8, .production_id = 231),\n  [6091] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_formal_parameters_repeat1, 2), SHIFT_REPEAT(117),\n  [6094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_formal_parameters_repeat1, 2),\n  [6096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 8, .production_id = 232),\n  [6098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2335),\n  [6100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 8, .production_id = 234),\n  [6102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2463),\n  [6104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1614),\n  [6106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 3, .production_id = 82),\n  [6108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 3, .production_id = 81),\n  [6110] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_named_imports_repeat1, 2), SHIFT_REPEAT(2390),\n  [6113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_named_imports_repeat1, 2),\n  [6115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112),\n  [6117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2409),\n  [6119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_public_field_definition, 9, .production_id = 235),\n  [6121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3213),\n  [6123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_parameters, 3),\n  [6125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(678),\n  [6127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680),\n  [6129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2360),\n  [6131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_imports, 2),\n  [6133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3157),\n  [6135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3095),\n  [6137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1242),\n  [6139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599),\n  [6141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697),\n  [6143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688),\n  [6145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2310),\n  [6147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(870),\n  [6149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1637),\n  [6151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(677),\n  [6153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2167),\n  [6155] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .dynamic_precedence = -1), SHIFT(399),\n  [6158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2138),\n  [6160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2013),\n  [6162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2137),\n  [6164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 4),\n  [6166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(647),\n  [6168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3394),\n  [6170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38),\n  [6172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2094),\n  [6174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2011),\n  [6176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2093),\n  [6178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair_pattern, 3, .production_id = 76),\n  [6180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1021),\n  [6182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244),\n  [6184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1008),\n  [6186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2331),\n  [6188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2112),\n  [6190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2010),\n  [6192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2111),\n  [6194] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_export_clause_repeat1, 2), SHIFT_REPEAT(2444),\n  [6197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_export_clause_repeat1, 2),\n  [6199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1726),\n  [6201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2468),\n  [6203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2469),\n  [6205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2121),\n  [6207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2005),\n  [6209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2118),\n  [6211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107),\n  [6213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1729),\n  [6215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(689),\n  [6217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2264),\n  [6219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2787),\n  [6221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 2, .production_id = 31),\n  [6223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140),\n  [6225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3179),\n  [6227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2602),\n  [6229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3303),\n  [6231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(537),\n  [6233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110),\n  [6235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1209),\n  [6237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3301),\n  [6239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(540),\n  [6241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1293),\n  [6243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1737),\n  [6245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3069),\n  [6247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3070),\n  [6249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_array_pattern_repeat1, 2),\n  [6251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1302),\n  [6253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111),\n  [6255] = {.entry = {.count = 1, .reusable = true}}, SHIFT(712),\n  [6257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1312),\n  [6259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 5),\n  [6261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147),\n  [6263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3297),\n  [6265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(751),\n  [6267] = {.entry = {.count = 1, .reusable = true}}, SHIFT(753),\n  [6269] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2472),\n  [6271] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_array_pattern_repeat1, 2), SHIFT_REPEAT(158),\n  [6274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695),\n  [6276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682),\n  [6278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1756),\n  [6280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2341),\n  [6282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2063),\n  [6284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2072),\n  [6286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 4, .production_id = 121),\n  [6288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184),\n  [6290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277),\n  [6292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204),\n  [6294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213),\n  [6296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(536),\n  [6298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 2, .production_id = 39),\n  [6300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 3, .production_id = 77),\n  [6302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2117),\n  [6304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2113),\n  [6306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_glimmer_opening_tag, 1),\n  [6308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2104),\n  [6310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2103),\n  [6312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2100),\n  [6314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2096),\n  [6316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2124),\n  [6318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2092),\n  [6320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020),\n  [6322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1024),\n  [6324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2142),\n  [6326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2139),\n  [6328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2136),\n  [6330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2134),\n  [6332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),\n  [6334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1247),\n  [6336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1792),\n  [6338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1793),\n  [6340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 2, .production_id = 32),\n  [6342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1794),\n  [6344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1795),\n  [6346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_parameter, 4, .production_id = 123),\n  [6348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1798),\n  [6350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1799),\n  [6352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 3, .production_id = 77),\n  [6354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1800),\n  [6356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1801),\n  [6358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__from_clause, 2, .production_id = 78),\n  [6360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1804),\n  [6362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1805),\n  [6364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1806),\n  [6366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1807),\n  [6368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1810),\n  [6370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1811),\n  [6372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 2, .production_id = 52),\n  [6374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(585),\n  [6376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(580),\n  [6378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3396),\n  [6380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3395),\n  [6382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(559),\n  [6384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2760),\n  [6386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2764),\n  [6388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1531),\n  [6390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2765),\n  [6392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2770),\n  [6394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2771),\n  [6396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2772),\n  [6398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_parameter, 3, .production_id = 88),\n  [6400] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 4, .production_id = 121),\n  [6402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2549),\n  [6404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_tuple_parameter, 3, .production_id = 81),\n  [6406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 3, .production_id = 97),\n  [6408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627),\n  [6410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 3, .production_id = 90),\n  [6412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637),\n  [6414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 3, .production_id = 141),\n  [6416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3126),\n  [6418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 3, .production_id = 82),\n  [6420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(760),\n  [6422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795),\n  [6424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2776),\n  [6426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2777),\n  [6428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2213),\n  [6430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2233),\n  [6432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2224),\n  [6434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2223),\n  [6436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(567),\n  [6438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_workgroup_member, 4, .production_id = 170),\n  [6440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2234),\n  [6442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2232),\n  [6444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2246),\n  [6446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2244),\n  [6448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2248),\n  [6450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2247),\n  [6452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2265),\n  [6454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2262),\n  [6456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2778),\n  [6458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2779),\n  [6460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1454),\n  [6462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1459),\n  [6464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1460),\n  [6466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1464),\n  [6468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_enum_body_repeat1, 2),\n  [6470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1472),\n  [6472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1474),\n  [6474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1475),\n  [6476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1476),\n  [6478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1485),\n  [6480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1486),\n  [6482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_optional_type, 2),\n  [6484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_parameter, 2, .production_id = 33),\n  [6486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1414),\n  [6488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1489),\n  [6490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(575),\n  [6492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1492),\n  [6494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1495),\n  [6496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2784),\n  [6498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2790),\n  [6500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2682),\n  [6502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256),\n  [6504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2052),\n  [6506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2043),\n  [6508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2047),\n  [6510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2035),\n  [6512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2041),\n  [6514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2068),\n  [6516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1070),\n  [6518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1069),\n  [6520] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_assignment, 2, .production_id = 32),\n  [6522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2034),\n  [6524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2040),\n  [6526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2073),\n  [6528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2048),\n  [6530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(574),\n  [6532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(573),\n  [6534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270),\n  [6536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258),\n  [6538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260),\n  [6540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671),\n  [6542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3345),\n  [6544] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3584),\n  [6546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1744),\n  [6548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3052),\n  [6550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2693),\n  [6552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1743),\n  [6554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2956),\n  [6556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1738),\n  [6558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(728),\n  [6560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2437),\n  [6562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1736),\n  [6564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2449),\n  [6566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1735),\n  [6568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1734),\n  [6570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1733),\n  [6572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1732),\n  [6574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1730),\n  [6576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3651),\n  [6578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1728),\n  [6580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3118),\n  [6582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1549),\n  [6584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1544),\n  [6586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1542),\n  [6588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1541),\n  [6590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1540),\n  [6592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1539),\n  [6594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1535),\n  [6596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1532),\n  [6598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1527),\n  [6600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1526),\n  [6602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3502),\n  [6604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2533),\n  [6606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(832),\n  [6608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1518),\n  [6610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517),\n  [6612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516),\n  [6614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1515),\n  [6616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514),\n  [6618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1834),\n  [6620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(663),\n  [6622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(661),\n  [6624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3482),\n  [6626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836),\n  [6628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264),\n  [6630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1512),\n  [6632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252),\n  [6634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2238),\n  [6636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1827),\n  [6638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1511),\n  [6640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707),\n  [6642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510),\n  [6644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1509),\n  [6646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(798),\n  [6648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(756),\n  [6650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132),\n  [6652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715),\n  [6654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2161),\n  [6656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2877),\n  [6658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833),\n  [6660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834),\n  [6662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1288),\n  [6664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808),\n  [6666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2175),\n  [6668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809),\n  [6670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(666),\n  [6672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2762),\n  [6674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228),\n  [6676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2069),\n  [6678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453),\n  [6680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222),\n  [6682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220),\n  [6684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219),\n  [6686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3475),\n  [6688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2070),\n  [6690] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3529),\n  [6692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3425),\n  [6694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2071),\n  [6696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2199),\n  [6698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(729),\n  [6700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1998),\n  [6702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2579),\n  [6704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828),\n  [6706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2044),\n  [6708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805),\n  [6710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727),\n  [6712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2553),\n  [6714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1513),\n  [6716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1710),\n  [6718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1416),\n  [6720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816),\n  [6722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3663),\n  [6724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2239),\n  [6726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1296),\n  [6728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2275),\n  [6730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2236),\n  [6732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3196),\n  [6734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2235),\n  [6736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(741),\n  [6738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_compute_size, 7, .production_id = 213),\n  [6740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2231),\n  [6742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1709),\n  [6744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2061),\n  [6746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804),\n  [6748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1708),\n  [6750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2226),\n  [6752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2225),\n  [6754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3224),\n  [6756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1707),\n  [6758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1706),\n  [6760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1705),\n  [6762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235),\n  [6764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1704),\n  [6766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_clause, 1),\n  [6768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2916),\n  [6770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3686),\n  [6772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425),\n  [6774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268),\n  [6776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1702),\n  [6778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216),\n  [6780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279),\n  [6782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273),\n  [6784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1701),\n  [6786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2000),\n  [6788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725),\n  [6790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862),\n  [6792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1428),\n  [6794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1433),\n  [6796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2220),\n  [6798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1700),\n  [6800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2218),\n  [6802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802),\n  [6804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(872),\n  [6806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257),\n  [6808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),\n  [6810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3629),\n  [6812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2270),\n  [6814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180),\n  [6816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2229),\n  [6818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373),\n  [6820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2230),\n  [6822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2241),\n  [6824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2250),\n  [6826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2058),\n  [6828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3391),\n  [6830] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2257),\n  [6832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2059),\n  [6834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2271),\n  [6836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(763),\n  [6838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2060),\n  [6840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2031),\n  [6842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232),\n  [6844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2755),\n  [6846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306),\n  [6848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2748),\n  [6850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2062),\n  [6852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807),\n  [6854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1762),\n  [6856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2217),\n  [6858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2274),\n  [6860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2849),\n  [6862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(734),\n  [6864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2296),\n  [6866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238),\n  [6868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2292),\n  [6870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240),\n  [6872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203),\n  [6874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716),\n  [6876] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1917),\n  [6878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3397),\n  [6880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3008),\n  [6882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2080),\n  [6884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796),\n  [6886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2097),\n  [6888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2098),\n  [6890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(792),\n  [6892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2102),\n  [6894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2105),\n  [6896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2038),\n  [6898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2106),\n  [6900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2066),\n  [6902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1659),\n  [6904] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1664),\n  [6906] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2107),\n  [6908] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2108),\n  [6910] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2049),\n  [6912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2109),\n  [6914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271),\n  [6916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2110),\n  [6918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2115),\n  [6920] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1327),\n  [6922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2054),\n  [6924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(698),\n  [6926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181),\n  [6928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1257),\n  [6930] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),\n  [6932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851),\n  [6934] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3347),\n  [6936] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2119),\n  [6938] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2120),\n  [6940] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1672),\n  [6942] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218),\n  [6944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2122),\n  [6946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(711),\n  [6948] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2123),\n  [6950] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11),\n  [6952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2091),\n  [6954] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2319),\n  [6956] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2125),\n  [6958] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814),\n  [6960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202),\n  [6962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215),\n  [6964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2126),\n  [6966] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2128),\n  [6968] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2129),\n  [6970] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2130),\n  [6972] = {.entry = {.count = 1, .reusable = true}}, SHIFT(837),\n  [6974] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl_for_clause, 2, .production_id = 12),\n  [6976] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3375),\n  [6978] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2502),\n  [6980] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1677),\n  [6982] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl_for_clause, 2),\n  [6984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856),\n  [6986] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3472),\n  [6988] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857),\n  [6990] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2033),\n  [6992] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3647),\n  [6994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835),\n  [6996] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266),\n  [6998] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2056),\n  [7000] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2057),\n  [7002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2042),\n  [7004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2914),\n  [7006] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263),\n  [7008] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262),\n  [7010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261),\n  [7012] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3176),\n  [7014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1279),\n  [7016] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531),\n  [7018] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3444),\n  [7020] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2950),\n  [7022] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2055),\n  [7024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2064),\n  [7026] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2053),\n  [7028] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1232),\n  [7030] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2925),\n  [7032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865),\n  [7034] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669),\n  [7036] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3620),\n  [7038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2878),\n  [7040] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3253),\n  [7042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(720),\n  [7044] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1315),\n  [7046] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1323),\n  [7048] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3364),\n  [7050] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2881),\n  [7052] = {.entry = {.count = 1, .reusable = true}}, SHIFT(704),\n  [7054] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2227),\n  [7056] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775),\n};\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nvoid *tree_sitter_shadeup_external_scanner_create(void);\nvoid tree_sitter_shadeup_external_scanner_destroy(void *);\nbool tree_sitter_shadeup_external_scanner_scan(void *, TSLexer *, const bool *);\nunsigned tree_sitter_shadeup_external_scanner_serialize(void *, char *);\nvoid tree_sitter_shadeup_external_scanner_deserialize(void *, const char *, unsigned);\n\n#ifdef _WIN32\n#define extern __declspec(dllexport)\n#endif\n\nextern const TSLanguage *tree_sitter_shadeup(void) {\n  static const TSLanguage language = {\n    .version = LANGUAGE_VERSION,\n    .symbol_count = SYMBOL_COUNT,\n    .alias_count = ALIAS_COUNT,\n    .token_count = TOKEN_COUNT,\n    .external_token_count = EXTERNAL_TOKEN_COUNT,\n    .state_count = STATE_COUNT,\n    .large_state_count = LARGE_STATE_COUNT,\n    .production_id_count = PRODUCTION_ID_COUNT,\n    .field_count = FIELD_COUNT,\n    .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,\n    .parse_table = &ts_parse_table[0][0],\n    .small_parse_table = ts_small_parse_table,\n    .small_parse_table_map = ts_small_parse_table_map,\n    .parse_actions = ts_parse_actions,\n    .symbol_names = ts_symbol_names,\n    .field_names = ts_field_names,\n    .field_map_slices = ts_field_map_slices,\n    .field_map_entries = ts_field_map_entries,\n    .symbol_metadata = ts_symbol_metadata,\n    .public_symbol_map = ts_symbol_map,\n    .alias_map = ts_non_terminal_alias_map,\n    .alias_sequences = &ts_alias_sequences[0][0],\n    .lex_modes = ts_lex_modes,\n    .lex_fn = ts_lex,\n    .keyword_lex_fn = ts_lex_keywords,\n    .keyword_capture_token = sym_identifier,\n    .external_scanner = {\n      &ts_external_scanner_states[0][0],\n      ts_external_scanner_symbol_map,\n      tree_sitter_shadeup_external_scanner_create,\n      tree_sitter_shadeup_external_scanner_destroy,\n      tree_sitter_shadeup_external_scanner_scan,\n      tree_sitter_shadeup_external_scanner_serialize,\n      tree_sitter_shadeup_external_scanner_deserialize,\n    },\n    .primary_state_ids = ts_primary_state_ids,\n  };\n  return &language;\n}\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "lang/tree-sitter/src/scanner.c",
    "content": "#include <tree_sitter/parser.h>\n#include <wctype.h>\n\nenum TokenType {\n  AUTOMATIC_SEMICOLON,\n  TEMPLATE_CHARS,\n  TERNARY_QMARK,\n};\n\nvoid *tree_sitter_shadeup_external_scanner_create() { return NULL; }\nvoid tree_sitter_shadeup_external_scanner_destroy(void *p) {}\nvoid tree_sitter_shadeup_external_scanner_reset(void *p) {}\nunsigned tree_sitter_shadeup_external_scanner_serialize(void *p, char *buffer) { return 0; }\nvoid tree_sitter_shadeup_external_scanner_deserialize(void *p, const char *b, unsigned n) {}\n\nstatic void advance(TSLexer *lexer) { lexer->advance(lexer, false); }\nstatic void skip(TSLexer *lexer) { lexer->advance(lexer, true); }\n\nstatic bool scan_template_chars(TSLexer *lexer) {\n  lexer->result_symbol = TEMPLATE_CHARS;\n  for (bool has_content = false;; has_content = true) {\n    lexer->mark_end(lexer);\n    switch (lexer->lookahead) {\n      case '`':\n        return has_content;\n      case '\\0':\n        return false;\n      case '$':\n        advance(lexer);\n        if (lexer->lookahead == '{') return has_content;\n        break;\n      case '\\\\':\n        return has_content;\n      default:\n        advance(lexer);\n    }\n  }\n}\n\nstatic bool scan_whitespace_and_comments(TSLexer *lexer) {\n  for (;;) {\n    while (iswspace(lexer->lookahead)) {\n      skip(lexer);\n    }\n\n    if (lexer->lookahead == '/') {\n      skip(lexer);\n\n      if (lexer->lookahead == '/') {\n        skip(lexer);\n        while (lexer->lookahead != 0 && lexer->lookahead != '\\n') {\n          skip(lexer);\n        }\n      } else if (lexer->lookahead == '*') {\n        skip(lexer);\n        while (lexer->lookahead != 0) {\n          if (lexer->lookahead == '*') {\n            skip(lexer);\n            if (lexer->lookahead == '/') {\n              skip(lexer);\n              break;\n            }\n          } else {\n            skip(lexer);\n          }\n        }\n      } else {\n        return false;\n      }\n    } else {\n      return true;\n    }\n  }\n}\n\nstatic bool scan_automatic_semicolon(TSLexer *lexer) {\n  lexer->result_symbol = AUTOMATIC_SEMICOLON;\n  lexer->mark_end(lexer);\n\n  for (;;) {\n    if (lexer->lookahead == 0) return true;\n    if (lexer->lookahead == '}') return true;\n    if (lexer->is_at_included_range_start(lexer)) return true;\n    if (lexer->lookahead == '\\n') break;\n    if (!iswspace(lexer->lookahead)) return false;\n    skip(lexer);\n  }\n\n  skip(lexer);\n\n  if (!scan_whitespace_and_comments(lexer)) return false;\n\n  switch (lexer->lookahead) {\n    case ',':\n    case '.':\n    case ':':\n    case ';':\n    case '*':\n    case '%':\n    case '>':\n    case '<':\n    case '=':\n    case '[':\n    case '(':\n    case '?':\n    case '^':\n    case '|':\n    case '&':\n    case '/':\n      return false;\n\n    // Insert a semicolon before `--` and `++`, but not before binary `+` or `-`.\n    case '+':\n      skip(lexer);\n      return lexer->lookahead == '+';\n    case '-':\n      skip(lexer);\n      return lexer->lookahead == '-';\n\n    // Don't insert a semicolon before `!=`, but do insert one before a unary `!`.\n    case '!':\n      skip(lexer);\n      return lexer->lookahead != '=';\n\n    // Don't insert a semicolon before `in` or `instanceof`, but do insert one\n    // before an identifier.\n    case 'i':\n      skip(lexer);\n\n      if (lexer->lookahead != 'n') return true;\n      skip(lexer);\n\n      if (!iswalpha(lexer->lookahead)) return false;\n\n      for (unsigned i = 0; i < 8; i++) {\n        if (lexer->lookahead != \"stanceof\"[i]) return true;\n        skip(lexer);\n      }\n\n      if (!iswalpha(lexer->lookahead)) return false;\n      break;\n  }\n\n  return true;\n}\n\nstatic bool scan_ternary_qmark(TSLexer *lexer) {\n  for(;;) {\n    if (!iswspace(lexer->lookahead)) break;\n    skip(lexer);\n  }\n\n  if (lexer->lookahead == '?') {\n    advance(lexer);\n\n    if (lexer->lookahead == '?') return false;\n\n    lexer->mark_end(lexer);\n    lexer->result_symbol = TERNARY_QMARK;\n\n    if (lexer->lookahead == '.') {\n      advance(lexer);\n      if (iswdigit(lexer->lookahead)) return true;\n      return false;\n    }\n    return true;\n  }\n  return false;\n}\n\nbool tree_sitter_shadeup_external_scanner_scan(void *payload, TSLexer *lexer,\n                                                  const bool *valid_symbols) {\n  if (valid_symbols[TEMPLATE_CHARS]) {\n    if (valid_symbols[AUTOMATIC_SEMICOLON]) return false;\n    return scan_template_chars(lexer);\n  } else if (valid_symbols[AUTOMATIC_SEMICOLON]) {\n    bool ret = scan_automatic_semicolon(lexer);\n    if (!ret && valid_symbols[TERNARY_QMARK] && lexer->lookahead == '?')\n      return scan_ternary_qmark(lexer);\n    return ret;\n  }\n  if (valid_symbols[TERNARY_QMARK]) {\n    return scan_ternary_qmark(lexer);\n  }\n\n  return false;\n}"
  },
  {
    "path": "lang/tree-sitter/src/tree_sitter/parser.h",
    "content": "#ifndef TREE_SITTER_PARSER_H_\n#define TREE_SITTER_PARSER_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#define ts_builtin_sym_error ((TSSymbol)-1)\n#define ts_builtin_sym_end 0\n#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024\n\ntypedef uint16_t TSStateId;\n\n#ifndef TREE_SITTER_API_H_\ntypedef uint16_t TSSymbol;\ntypedef uint16_t TSFieldId;\ntypedef struct TSLanguage TSLanguage;\n#endif\n\ntypedef struct {\n  TSFieldId field_id;\n  uint8_t child_index;\n  bool inherited;\n} TSFieldMapEntry;\n\ntypedef struct {\n  uint16_t index;\n  uint16_t length;\n} TSFieldMapSlice;\n\ntypedef struct {\n  bool visible;\n  bool named;\n  bool supertype;\n} TSSymbolMetadata;\n\ntypedef struct TSLexer TSLexer;\n\nstruct TSLexer {\n  int32_t lookahead;\n  TSSymbol result_symbol;\n  void (*advance)(TSLexer *, bool);\n  void (*mark_end)(TSLexer *);\n  uint32_t (*get_column)(TSLexer *);\n  bool (*is_at_included_range_start)(const TSLexer *);\n  bool (*eof)(const TSLexer *);\n};\n\ntypedef enum {\n  TSParseActionTypeShift,\n  TSParseActionTypeReduce,\n  TSParseActionTypeAccept,\n  TSParseActionTypeRecover,\n} TSParseActionType;\n\ntypedef union {\n  struct {\n    uint8_t type;\n    TSStateId state;\n    bool extra;\n    bool repetition;\n  } shift;\n  struct {\n    uint8_t type;\n    uint8_t child_count;\n    TSSymbol symbol;\n    int16_t dynamic_precedence;\n    uint16_t production_id;\n  } reduce;\n  uint8_t type;\n} TSParseAction;\n\ntypedef struct {\n  uint16_t lex_state;\n  uint16_t external_lex_state;\n} TSLexMode;\n\ntypedef union {\n  TSParseAction action;\n  struct {\n    uint8_t count;\n    bool reusable;\n  } entry;\n} TSParseActionEntry;\n\nstruct TSLanguage {\n  uint32_t version;\n  uint32_t symbol_count;\n  uint32_t alias_count;\n  uint32_t token_count;\n  uint32_t external_token_count;\n  uint32_t state_count;\n  uint32_t large_state_count;\n  uint32_t production_id_count;\n  uint32_t field_count;\n  uint16_t max_alias_sequence_length;\n  const uint16_t *parse_table;\n  const uint16_t *small_parse_table;\n  const uint32_t *small_parse_table_map;\n  const TSParseActionEntry *parse_actions;\n  const char * const *symbol_names;\n  const char * const *field_names;\n  const TSFieldMapSlice *field_map_slices;\n  const TSFieldMapEntry *field_map_entries;\n  const TSSymbolMetadata *symbol_metadata;\n  const TSSymbol *public_symbol_map;\n  const uint16_t *alias_map;\n  const TSSymbol *alias_sequences;\n  const TSLexMode *lex_modes;\n  bool (*lex_fn)(TSLexer *, TSStateId);\n  bool (*keyword_lex_fn)(TSLexer *, TSStateId);\n  TSSymbol keyword_capture_token;\n  struct {\n    const bool *states;\n    const TSSymbol *symbol_map;\n    void *(*create)(void);\n    void (*destroy)(void *);\n    bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist);\n    unsigned (*serialize)(void *, char *);\n    void (*deserialize)(void *, const char *, unsigned);\n  } external_scanner;\n  const TSStateId *primary_state_ids;\n};\n\n/*\n *  Lexer Macros\n */\n\n#define START_LEXER()           \\\n  bool result = false;          \\\n  bool skip = false;            \\\n  bool eof = false;             \\\n  int32_t lookahead;            \\\n  goto start;                   \\\n  next_state:                   \\\n  lexer->advance(lexer, skip);  \\\n  start:                        \\\n  skip = false;                 \\\n  lookahead = lexer->lookahead;\n\n#define ADVANCE(state_value) \\\n  {                          \\\n    state = state_value;     \\\n    goto next_state;         \\\n  }\n\n#define SKIP(state_value) \\\n  {                       \\\n    skip = true;          \\\n    state = state_value;  \\\n    goto next_state;      \\\n  }\n\n#define ACCEPT_TOKEN(symbol_value)     \\\n  result = true;                       \\\n  lexer->result_symbol = symbol_value; \\\n  lexer->mark_end(lexer);\n\n#define END_STATE() return result;\n\n/*\n *  Parse Table Macros\n */\n\n#define SMALL_STATE(id) id - LARGE_STATE_COUNT\n\n#define STATE(id) id\n\n#define ACTIONS(id) id\n\n#define SHIFT(state_value)            \\\n  {{                                  \\\n    .shift = {                        \\\n      .type = TSParseActionTypeShift, \\\n      .state = state_value            \\\n    }                                 \\\n  }}\n\n#define SHIFT_REPEAT(state_value)     \\\n  {{                                  \\\n    .shift = {                        \\\n      .type = TSParseActionTypeShift, \\\n      .state = state_value,           \\\n      .repetition = true              \\\n    }                                 \\\n  }}\n\n#define SHIFT_EXTRA()                 \\\n  {{                                  \\\n    .shift = {                        \\\n      .type = TSParseActionTypeShift, \\\n      .extra = true                   \\\n    }                                 \\\n  }}\n\n#define REDUCE(symbol_val, child_count_val, ...) \\\n  {{                                             \\\n    .reduce = {                                  \\\n      .type = TSParseActionTypeReduce,           \\\n      .symbol = symbol_val,                      \\\n      .child_count = child_count_val,            \\\n      __VA_ARGS__                                \\\n    },                                           \\\n  }}\n\n#define RECOVER()                    \\\n  {{                                 \\\n    .type = TSParseActionTypeRecover \\\n  }}\n\n#define ACCEPT_INPUT()              \\\n  {{                                \\\n    .type = TSParseActionTypeAccept \\\n  }}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // TREE_SITTER_PARSER_H_\n"
  },
  {
    "path": "lang/tree-sitter/test.shadeup",
    "content": "\npub struct color {\n\tstatic slate50: float4 = float4(0.9725490196078431, 0.9803921568627451, 0.9882352941176471, 1);\n\tstatic slate100: float4 = float4(0.9450980392156862, 0.9607843137254902, 0.9764705882352941, 1);\n\tstatic slate200: float4 = float4(0.8862745098039215, 0.9098039215686274, 0.9411764705882353, 1);\n\tstatic slate300: float4 = float4(0.796078431372549, 0.8352941176470589, 0.8823529411764706, 1);\n\tstatic slate400: float4 = float4(0.5803921568627451, 0.6392156862745098, 0.7215686274509804, 1);\n\tstatic slate500: float4 = float4(0.39215686274509803, 0.4549019607843137, 0.5450980392156862, 1);\n\tstatic slate600: float4 = float4(0.2784313725490196, 0.3333333333333333, 0.4117647058823529, 1);\n\tstatic slate700: float4 = float4(0.2, 0.2549019607843137, 0.3333333333333333, 1);\n\tstatic slate800: float4 = float4(0.11764705882352941, 0.1607843137254902, 0.23137254901960785, 1);\n\tstatic slate900: float4 = float4(0.058823529411764705, 0.09019607843137255, 0.16470588235294117, 1);\n\tstatic slate950: float4 = float4(0.00784313725490196, 0.023529411764705882, 0.09019607843137255, 1);\n\tstatic gray50: float4 = float4(0.9764705882352941, 0.9803921568627451, 0.984313725490196, 1);\n\tstatic gray100: float4 = float4(0.9529411764705882, 0.9568627450980393, 0.9647058823529412, 1);\n\tstatic gray200: float4 = float4(0.8980392156862745, 0.9058823529411765, 0.9215686274509803, 1);\n\tstatic gray300: float4 = float4(0.8196078431372549, 0.8352941176470589, 0.8588235294117647, 1);\n\tstatic gray400: float4 = float4(0.611764705882353, 0.6392156862745098, 0.6862745098039216, 1);\n\tstatic gray500: float4 = float4(0.4196078431372549, 0.4470588235294118, 0.5019607843137255, 1);\n\tstatic gray600: float4 = float4(0.29411764705882354, 0.3333333333333333, 0.38823529411764707, 1);\n\tstatic gray700: float4 = float4(0.21568627450980393, 0.2549019607843137, 0.3176470588235294, 1);\n\tstatic gray800: float4 = float4(0.12156862745098039, 0.1607843137254902, 0.21568627450980393, 1);\n\tstatic gray900: float4 = float4(0.06666666666666667, 0.09411764705882353, 0.15294117647058825, 1);\n\tstatic gray950: float4 = float4(0.011764705882352941, 0.027450980392156862, 0.07058823529411765, 1);\n\tstatic zinc50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\n\tstatic zinc100: float4 = float4(0.9568627450980393, 0.9568627450980393, 0.9607843137254902, 1);\n\tstatic zinc200: float4 = float4(0.8941176470588236, 0.8941176470588236, 0.9058823529411765, 1);\n\tstatic zinc300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8470588235294118, 1);\n\tstatic zinc400: float4 = float4(0.6313725490196078, 0.6313725490196078, 0.6666666666666666, 1);\n\tstatic zinc500: float4 = float4(0.44313725490196076, 0.44313725490196076, 0.47843137254901963, 1);\n\tstatic zinc600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3568627450980392, 1);\n\tstatic zinc700: float4 = float4(0.24705882352941178, 0.24705882352941178, 0.27450980392156865, 1);\n\tstatic zinc800: float4 = float4(0.15294117647058825, 0.15294117647058825, 0.16470588235294117, 1);\n\tstatic zinc900: float4 = float4(0.09411764705882353, 0.09411764705882353, 0.10588235294117647, 1);\n\tstatic zinc950: float4 = float4(0.03529411764705882, 0.03529411764705882, 0.043137254901960784, 1);\n\tstatic neutral50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1);\n\tstatic neutral100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9607843137254902, 1);\n\tstatic neutral200: float4 = float4(0.8980392156862745, 0.8980392156862745, 0.8980392156862745, 1);\n\tstatic neutral300: float4 = float4(0.8313725490196079, 0.8313725490196079, 0.8313725490196079, 1);\n\tstatic neutral400: float4 = float4(0.6392156862745098, 0.6392156862745098, 0.6392156862745098, 1);\n\tstatic neutral500: float4 = float4(0.45098039215686275, 0.45098039215686275, 0.45098039215686275, 1);\n\tstatic neutral600: float4 = float4(0.3215686274509804, 0.3215686274509804, 0.3215686274509804, 1);\n\tstatic neutral700: float4 = float4(0.25098039215686274, 0.25098039215686274, 0.25098039215686274, 1);\n\tstatic neutral800: float4 = float4(0.14901960784313725, 0.14901960784313725, 0.14901960784313725, 1);\n\tstatic neutral900: float4 = float4(0.09019607843137255, 0.09019607843137255, 0.09019607843137255, 1);\n\tstatic neutral950: float4 = float4(0.0392156862745098, 0.0392156862745098, 0.0392156862745098, 1);\n\tstatic stone50: float4 = float4(0.9803921568627451, 0.9803921568627451, 0.9764705882352941, 1);\n\tstatic stone100: float4 = float4(0.9607843137254902, 0.9607843137254902, 0.9568627450980393, 1);\n\tstatic stone200: float4 = float4(0.9058823529411765, 0.8980392156862745, 0.8941176470588236, 1);\n\tstatic stone300: float4 = float4(0.8392156862745098, 0.8274509803921568, 0.8196078431372549, 1);\n\tstatic stone400: float4 = float4(0.6588235294117647, 0.6352941176470588, 0.6196078431372549, 1);\n\tstatic stone500: float4 = float4(0.47058823529411764, 0.44313725490196076, 0.4235294117647059, 1);\n\tstatic stone600: float4 = float4(0.3411764705882353, 0.3254901960784314, 0.3058823529411765, 1);\n\tstatic stone700: float4 = float4(0.26666666666666666, 0.25098039215686274, 0.23529411764705882, 1);\n\tstatic stone800: float4 = float4(0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1);\n\tstatic stone900: float4 = float4(0.10980392156862745, 0.09803921568627451, 0.09019607843137255, 1);\n\tstatic stone950: float4 = float4(0.047058823529411764, 0.0392156862745098, 0.03529411764705882, 1);\n\tstatic red50: float4 = float4(0.996078431372549, 0.9490196078431372, 0.9490196078431372, 1);\n\tstatic red100: float4 = float4(0.996078431372549, 0.8862745098039215, 0.8862745098039215, 1);\n\tstatic red200: float4 = float4(0.996078431372549, 0.792156862745098, 0.792156862745098, 1);\n\tstatic red300: float4 = float4(0.9882352941176471, 0.6470588235294118, 0.6470588235294118, 1);\n\tstatic red400: float4 = float4(0.9725490196078431, 0.44313725490196076, 0.44313725490196076, 1);\n\tstatic red500: float4 = float4(0.9372549019607843, 0.26666666666666666, 0.26666666666666666, 1);\n\tstatic red600: float4 = float4(0.8627450980392157, 0.14901960784313725, 0.14901960784313725, 1);\n\tstatic red700: float4 = float4(0.7254901960784313, 0.10980392156862745, 0.10980392156862745, 1);\n\tstatic red800: float4 = float4(0.6, 0.10588235294117647, 0.10588235294117647, 1);\n\tstatic red900: float4 = float4(0.4980392156862745, 0.11372549019607843, 0.11372549019607843, 1);\n\tstatic red950: float4 = float4(0.27058823529411763, 0.0392156862745098, 0.0392156862745098, 1);\n\tstatic orange50: float4 = float4(1, 0.9686274509803922, 0.9294117647058824, 1);\n\tstatic orange100: float4 = float4(1, 0.9294117647058824, 0.8352941176470589, 1);\n\tstatic orange200: float4 = float4(0.996078431372549, 0.8431372549019608, 0.6666666666666666, 1);\n\tstatic orange300: float4 = float4(0.9921568627450981, 0.7294117647058823, 0.4549019607843137, 1);\n\tstatic orange400: float4 = float4(0.984313725490196, 0.5725490196078431, 0.23529411764705882, 1);\n\tstatic orange500: float4 = float4(0.9764705882352941, 0.45098039215686275, 0.08627450980392157, 1);\n\tstatic orange600: float4 = float4(0.9176470588235294, 0.34509803921568627, 0.047058823529411764, 1);\n\tstatic orange700: float4 = float4(0.7607843137254902, 0.2549019607843137, 0.047058823529411764, 1);\n\tstatic orange800: float4 = float4(0.6039215686274509, 0.20392156862745098, 0.07058823529411765, 1);\n\tstatic orange900: float4 = float4(0.48627450980392156, 0.17647058823529413, 0.07058823529411765, 1);\n\tstatic orange950: float4 = float4(0.2627450980392157, 0.0784313725490196, 0.027450980392156862, 1);\n\tstatic amber50: float4 = float4(1, 0.984313725490196, 0.9215686274509803, 1);\n\tstatic amber100: float4 = float4(0.996078431372549, 0.9529411764705882, 0.7803921568627451, 1);\n\tstatic amber200: float4 = float4(0.9921568627450981, 0.9019607843137255, 0.5411764705882353, 1);\n\tstatic amber300: float4 = float4(0.9882352941176471, 0.8274509803921568, 0.30196078431372547, 1);\n\tstatic amber400: float4 = float4(0.984313725490196, 0.7490196078431373, 0.1411764705882353, 1);\n\tstatic amber500: float4 = float4(0.9607843137254902, 0.6196078431372549, 0.043137254901960784, 1);\n\tstatic amber600: float4 = float4(0.8509803921568627, 0.4666666666666667, 0.023529411764705882, 1);\n\tstatic amber700: float4 = float4(0.7058823529411765, 0.3254901960784314, 0.03529411764705882, 1);\n\tstatic amber800: float4 = float4(0.5725490196078431, 0.25098039215686274, 0.054901960784313725, 1);\n\tstatic amber900: float4 = float4(0.47058823529411764, 0.20784313725490197, 0.058823529411764705, 1);\n\tstatic amber950: float4 = float4(0.27058823529411763, 0.10196078431372549, 0.011764705882352941, 1);\n\tstatic yellow50: float4 = float4(0.996078431372549, 0.9882352941176471, 0.9098039215686274, 1);\n\tstatic yellow100: float4 = float4(0.996078431372549, 0.9764705882352941, 0.7647058823529411, 1);\n\tstatic yellow200: float4 = float4(0.996078431372549, 0.9411764705882353, 0.5411764705882353, 1);\n\tstatic yellow300: float4 = float4(0.9921568627450981, 0.8784313725490196, 0.2784313725490196, 1);\n\tstatic yellow400: float4 = float4(0.9803921568627451, 0.8, 0.08235294117647059, 1);\n\tstatic yellow500: float4 = float4(0.9176470588235294, 0.7019607843137254, 0.03137254901960784, 1);\n\tstatic yellow600: float4 = float4(0.792156862745098, 0.5411764705882353, 0.01568627450980392, 1);\n\tstatic yellow700: float4 = float4(0.6313725490196078, 0.3843137254901961, 0.027450980392156862, 1);\n\tstatic yellow800: float4 = float4(0.5215686274509804, 0.30196078431372547, 0.054901960784313725, 1);\n\tstatic yellow900: float4 = float4(0.44313725490196076, 0.24705882352941178, 0.07058823529411765, 1);\n\tstatic yellow950: float4 = float4(0.25882352941176473, 0.12549019607843137, 0.023529411764705882, 1);\n\tstatic lime50: float4 = float4(0.9686274509803922, 0.996078431372549, 0.9058823529411765, 1);\n\tstatic lime100: float4 = float4(0.9254901960784314, 0.9882352941176471, 0.796078431372549, 1);\n\tstatic lime200: float4 = float4(0.8509803921568627, 0.9764705882352941, 0.615686274509804, 1);\n\tstatic lime300: float4 = float4(0.7450980392156863, 0.9490196078431372, 0.39215686274509803, 1);\n\tstatic lime400: float4 = float4(0.6392156862745098, 0.9019607843137255, 0.20784313725490197, 1);\n\tstatic lime500: float4 = float4(0.5176470588235295, 0.8, 0.08627450980392157, 1);\n\tstatic lime600: float4 = float4(0.396078431372549, 0.6392156862745098, 0.050980392156862744, 1);\n\tstatic lime700: float4 = float4(0.30196078431372547, 0.48627450980392156, 0.058823529411764705, 1);\n\tstatic lime800: float4 = float4(0.24705882352941178, 0.3843137254901961, 0.07058823529411765, 1);\n\tstatic lime900: float4 = float4(0.21176470588235294, 0.3254901960784314, 0.0784313725490196, 1);\n\tstatic lime950: float4 = float4(0.10196078431372549, 0.1803921568627451, 0.0196078431372549, 1);\n\tstatic green50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9568627450980393, 1);\n\tstatic green100: float4 = float4(0.8627450980392157, 0.9882352941176471, 0.9058823529411765, 1);\n\tstatic green200: float4 = float4(0.7333333333333333, 0.9686274509803922, 0.8156862745098039, 1);\n\tstatic green300: float4 = float4(0.5254901960784314, 0.9372549019607843, 0.6745098039215687, 1);\n\tstatic green400: float4 = float4(0.2901960784313726, 0.8705882352941177, 0.5019607843137255, 1);\n\tstatic green500: float4 = float4(0.13333333333333333, 0.7725490196078432, 0.3686274509803922, 1);\n\tstatic green600: float4 = float4(0.08627450980392157, 0.6392156862745098, 0.2901960784313726, 1);\n\tstatic green700: float4 = float4(0.08235294117647059, 0.5019607843137255, 0.23921568627450981, 1);\n\tstatic green800: float4 = float4(0.08627450980392157, 0.396078431372549, 0.20392156862745098, 1);\n\tstatic green900: float4 = float4(0.0784313725490196, 0.3254901960784314, 0.17647058823529413, 1);\n\tstatic green950: float4 = float4(0.0196078431372549, 0.1803921568627451, 0.08627450980392157, 1);\n\tstatic emerald50: float4 = float4(0.9254901960784314, 0.9921568627450981, 0.9607843137254902, 1);\n\tstatic emerald100: float4 = float4(0.8196078431372549, 0.9803921568627451, 0.8980392156862745, 1);\n\tstatic emerald200: float4 = float4(0.6549019607843137, 0.9529411764705882, 0.8156862745098039, 1);\n\tstatic emerald300: float4 = float4(0.43137254901960786, 0.9058823529411765, 0.7176470588235294, 1);\n\tstatic emerald400: float4 = float4(0.20392156862745098, 0.8274509803921568, 0.6, 1);\n\tstatic emerald500: float4 = float4(0.06274509803921569, 0.7254901960784313, 0.5058823529411764, 1);\n\tstatic emerald600: float4 = float4(0.0196078431372549, 0.5882352941176471, 0.4117647058823529, 1);\n\tstatic emerald700: float4 = float4(0.01568627450980392, 0.47058823529411764, 0.3411764705882353, 1);\n\tstatic emerald800: float4 = float4(0.023529411764705882, 0.37254901960784315, 0.27450980392156865, 1);\n\tstatic emerald900: float4 = float4(0.023529411764705882, 0.3058823529411765, 0.23137254901960785, 1);\n\tstatic emerald950: float4 = float4(0.00784313725490196, 0.17254901960784313, 0.13333333333333333, 1);\n\tstatic teal50: float4 = float4(0.9411764705882353, 0.9921568627450981, 0.9803921568627451, 1);\n\tstatic teal100: float4 = float4(0.8, 0.984313725490196, 0.9450980392156862, 1);\n\tstatic teal200: float4 = float4(0.6, 0.9647058823529412, 0.8941176470588236, 1);\n\tstatic teal300: float4 = float4(0.3686274509803922, 0.9176470588235294, 0.8313725490196079, 1);\n\tstatic teal400: float4 = float4(0.17647058823529413, 0.8313725490196079, 0.7490196078431373, 1);\n\tstatic teal500: float4 = float4(0.0784313725490196, 0.7215686274509804, 0.6509803921568628, 1);\n\tstatic teal600: float4 = float4(0.050980392156862744, 0.5803921568627451, 0.5333333333333333, 1);\n\tstatic teal700: float4 = float4(0.058823529411764705, 0.4627450980392157, 0.43137254901960786, 1);\n\tstatic teal800: float4 = float4(0.06666666666666667, 0.3686274509803922, 0.34901960784313724, 1);\n\tstatic teal900: float4 = float4(0.07450980392156863, 0.3058823529411765, 0.2901960784313726, 1);\n\tstatic teal950: float4 = float4(0.01568627450980392, 0.1843137254901961, 0.1803921568627451, 1);\n\tstatic cyan50: float4 = float4(0.9254901960784314, 0.996078431372549, 1, 1);\n\tstatic cyan100: float4 = float4(0.8117647058823529, 0.9803921568627451, 0.996078431372549, 1);\n\tstatic cyan200: float4 = float4(0.6470588235294118, 0.9529411764705882, 0.9882352941176471, 1);\n\tstatic cyan300: float4 = float4(0.403921568627451, 0.9098039215686274, 0.9764705882352941, 1);\n\tstatic cyan400: float4 = float4(0.13333333333333333, 0.8274509803921568, 0.9333333333333333, 1);\n\tstatic cyan500: float4 = float4(0.023529411764705882, 0.7137254901960784, 0.8313725490196079, 1);\n\tstatic cyan600: float4 = float4(0.03137254901960784, 0.5686274509803921, 0.6980392156862745, 1);\n\tstatic cyan700: float4 = float4(0.054901960784313725, 0.4549019607843137, 0.5647058823529412, 1);\n\tstatic cyan800: float4 = float4(0.08235294117647059, 0.3686274509803922, 0.4588235294117647, 1);\n\tstatic cyan900: float4 = float4(0.08627450980392157, 0.3058823529411765, 0.38823529411764707, 1);\n\tstatic cyan950: float4 = float4(0.03137254901960784, 0.2, 0.26666666666666666, 1);\n\tstatic sky50: float4 = float4(0.9411764705882353, 0.9764705882352941, 1, 1);\n\tstatic sky100: float4 = float4(0.8784313725490196, 0.9490196078431372, 0.996078431372549, 1);\n\tstatic sky200: float4 = float4(0.7294117647058823, 0.9019607843137255, 0.9921568627450981, 1);\n\tstatic sky300: float4 = float4(0.49019607843137253, 0.8274509803921568, 0.9882352941176471, 1);\n\tstatic sky400: float4 = float4(0.2196078431372549, 0.7411764705882353, 0.9725490196078431, 1);\n\tstatic sky500: float4 = float4(0.054901960784313725, 0.6470588235294118, 0.9137254901960784, 1);\n\tstatic sky600: float4 = float4(0.00784313725490196, 0.5176470588235295, 0.7803921568627451, 1);\n\tstatic sky700: float4 = float4(0.011764705882352941, 0.4117647058823529, 0.6313725490196078, 1);\n\tstatic sky800: float4 = float4(0.027450980392156862, 0.34901960784313724, 0.5215686274509804, 1);\n\tstatic sky900: float4 = float4(0.047058823529411764, 0.2901960784313726, 0.43137254901960786, 1);\n\tstatic sky950: float4 = float4(0.03137254901960784, 0.1843137254901961, 0.28627450980392155, 1);\n\tstatic blue50: float4 = float4(0.9372549019607843, 0.9647058823529412, 1, 1);\n\tstatic blue100: float4 = float4(0.8588235294117647, 0.9176470588235294, 0.996078431372549, 1);\n\tstatic blue200: float4 = float4(0.7490196078431373, 0.8588235294117647, 0.996078431372549, 1);\n\tstatic blue300: float4 = float4(0.5764705882352941, 0.7725490196078432, 0.9921568627450981, 1);\n\tstatic blue400: float4 = float4(0.3764705882352941, 0.6470588235294118, 0.9803921568627451, 1);\n\tstatic blue500: float4 = float4(0.23137254901960785, 0.5098039215686274, 0.9647058823529412, 1);\n\tstatic blue600: float4 = float4(0.1450980392156863, 0.38823529411764707, 0.9215686274509803, 1);\n\tstatic blue700: float4 = float4(0.11372549019607843, 0.3058823529411765, 0.8470588235294118, 1);\n\tstatic blue800: float4 = float4(0.11764705882352941, 0.25098039215686274, 0.6862745098039216, 1);\n\tstatic blue900: float4 = float4(0.11764705882352941, 0.22745098039215686, 0.5411764705882353, 1);\n\tstatic blue950: float4 = float4(0.09019607843137255, 0.1450980392156863, 0.32941176470588235, 1);\n\tstatic indigo50: float4 = float4(0.9333333333333333, 0.9490196078431372, 1, 1);\n\tstatic indigo100: float4 = float4(0.8784313725490196, 0.9058823529411765, 1, 1);\n\tstatic indigo200: float4 = float4(0.7803921568627451, 0.8235294117647058, 0.996078431372549, 1);\n\tstatic indigo300: float4 = float4(0.6470588235294118, 0.7058823529411765, 0.9882352941176471, 1);\n\tstatic indigo400: float4 = float4(0.5058823529411764, 0.5490196078431373, 0.9725490196078431, 1);\n\tstatic indigo500: float4 = float4(0.38823529411764707, 0.4, 0.9450980392156862, 1);\n\tstatic indigo600: float4 = float4(0.30980392156862746, 0.27450980392156865, 0.8980392156862745, 1);\n\tstatic indigo700: float4 = float4(0.2627450980392157, 0.2196078431372549, 0.792156862745098, 1);\n\tstatic indigo800: float4 = float4(0.21568627450980393, 0.18823529411764706, 0.6392156862745098, 1);\n\tstatic indigo900: float4 = float4(0.19215686274509805, 0.1803921568627451, 0.5058823529411764, 1);\n\tstatic indigo950: float4 = float4(0.11764705882352941, 0.10588235294117647, 0.29411764705882354, 1);\n\tstatic violet50: float4 = float4(0.9607843137254902, 0.9529411764705882, 1, 1);\n\tstatic violet100: float4 = float4(0.9294117647058824, 0.9137254901960784, 0.996078431372549, 1);\n\tstatic violet200: float4 = float4(0.8666666666666667, 0.8392156862745098, 0.996078431372549, 1);\n\tstatic violet300: float4 = float4(0.7686274509803922, 0.7098039215686275, 0.9921568627450981, 1);\n\tstatic violet400: float4 = float4(0.6549019607843137, 0.5450980392156862, 0.9803921568627451, 1);\n\tstatic violet500: float4 = float4(0.5450980392156862, 0.3607843137254902, 0.9647058823529412, 1);\n\tstatic violet600: float4 = float4(0.48627450980392156, 0.22745098039215686, 0.9294117647058824, 1);\n\tstatic violet700: float4 = float4(0.42745098039215684, 0.1568627450980392, 0.8509803921568627, 1);\n\tstatic violet800: float4 = float4(0.3568627450980392, 0.12941176470588237, 0.7137254901960784, 1);\n\tstatic violet900: float4 = float4(0.2980392156862745, 0.11372549019607843, 0.5843137254901961, 1);\n\tstatic violet950: float4 = float4(0.1803921568627451, 0.06274509803921569, 0.396078431372549, 1);\n\tstatic purple50: float4 = float4(0.9803921568627451, 0.9607843137254902, 1, 1);\n\tstatic purple100: float4 = float4(0.9529411764705882, 0.9098039215686274, 1, 1);\n\tstatic purple200: float4 = float4(0.9137254901960784, 0.8352941176470589, 1, 1);\n\tstatic purple300: float4 = float4(0.8470588235294118, 0.7058823529411765, 0.996078431372549, 1);\n\tstatic purple400: float4 = float4(0.7529411764705882, 0.5176470588235295, 0.9882352941176471, 1);\n\tstatic purple500: float4 = float4(0.6588235294117647, 0.3333333333333333, 0.9686274509803922, 1);\n\tstatic purple600: float4 = float4(0.5764705882352941, 0.2, 0.9176470588235294, 1);\n\tstatic purple700: float4 = float4(0.49411764705882355, 0.13333333333333333, 0.807843137254902, 1);\n\tstatic purple800: float4 = float4(0.4196078431372549, 0.12941176470588237, 0.6588235294117647, 1);\n\tstatic purple900: float4 = float4(0.34509803921568627, 0.10980392156862745, 0.5294117647058824, 1);\n\tstatic purple950: float4 = float4(0.23137254901960785, 0.027450980392156862, 0.39215686274509803, 1);\n\tstatic fuchsia50: float4 = float4(0.9921568627450981, 0.9568627450980393, 1, 1);\n\tstatic fuchsia100: float4 = float4(0.9803921568627451, 0.9098039215686274, 1, 1);\n\tstatic fuchsia200: float4 = float4(0.9607843137254902, 0.8156862745098039, 0.996078431372549, 1);\n\tstatic fuchsia300: float4 = float4(0.9411764705882353, 0.6705882352941176, 0.9882352941176471, 1);\n\tstatic fuchsia400: float4 = float4(0.9098039215686274, 0.4745098039215686, 0.9764705882352941, 1);\n\tstatic fuchsia500: float4 = float4(0.8509803921568627, 0.27450980392156865, 0.9372549019607843, 1);\n\tstatic fuchsia600: float4 = float4(0.7529411764705882, 0.14901960784313725, 0.8274509803921568, 1);\n\tstatic fuchsia700: float4 = float4(0.6352941176470588, 0.10980392156862745, 0.6862745098039216, 1);\n\tstatic fuchsia800: float4 = float4(0.5254901960784314, 0.09803921568627451, 0.5607843137254902, 1);\n\tstatic fuchsia900: float4 = float4(0.4392156862745098, 0.10196078431372549, 0.4588235294117647, 1);\n\tstatic fuchsia950: float4 = float4(0.2901960784313726, 0.01568627450980392, 0.3058823529411765, 1);\n\tstatic pink50: float4 = float4(0.9921568627450981, 0.9490196078431372, 0.9725490196078431, 1);\n\tstatic pink100: float4 = float4(0.9882352941176471, 0.9058823529411765, 0.9529411764705882, 1);\n\tstatic pink200: float4 = float4(0.984313725490196, 0.8117647058823529, 0.9098039215686274, 1);\n\tstatic pink300: float4 = float4(0.9764705882352941, 0.6588235294117647, 0.8313725490196079, 1);\n\tstatic pink400: float4 = float4(0.9568627450980393, 0.4470588235294118, 0.7137254901960784, 1);\n\tstatic pink500: float4 = float4(0.9254901960784314, 0.2823529411764706, 0.6, 1);\n\tstatic pink600: float4 = float4(0.8588235294117647, 0.15294117647058825, 0.4666666666666667, 1);\n\tstatic pink700: float4 = float4(0.7450980392156863, 0.09411764705882353, 0.36470588235294116, 1);\n\tstatic pink800: float4 = float4(0.615686274509804, 0.09019607843137255, 0.30196078431372547, 1);\n\tstatic pink900: float4 = float4(0.5137254901960784, 0.09411764705882353, 0.2627450980392157, 1);\n\tstatic pink950: float4 = float4(0.3137254901960784, 0.027450980392156862, 0.1411764705882353, 1);\n\tstatic rose50: float4 = float4(1, 0.9450980392156862, 0.9490196078431372, 1);\n\tstatic rose100: float4 = float4(1, 0.8941176470588236, 0.9019607843137255, 1);\n\tstatic rose200: float4 = float4(0.996078431372549, 0.803921568627451, 0.8274509803921568, 1);\n\tstatic rose300: float4 = float4(0.9921568627450981, 0.6431372549019608, 0.6862745098039216, 1);\n\tstatic rose400: float4 = float4(0.984313725490196, 0.44313725490196076, 0.5215686274509804, 1);\n\tstatic rose500: float4 = float4(0.9568627450980393, 0.24705882352941178, 0.3686274509803922, 1);\n\tstatic rose600: float4 = float4(0.8823529411764706, 0.11372549019607843, 0.2823529411764706, 1);\n\tstatic rose700: float4 = float4(0.7450980392156863, 0.07058823529411765, 0.23529411764705882, 1);\n\tstatic rose800: float4 = float4(0.6235294117647059, 0.07058823529411765, 0.2235294117647059, 1);\n\tstatic rose900: float4 = float4(0.5333333333333333, 0.07450980392156863, 0.21568627450980393, 1);\n\tstatic rose950: float4 = float4(0.2980392156862745, 0.0196078431372549, 0.09803921568627451, 1);\n\n}"
  },
  {
    "path": "lang/tree-sitter/typescript.js",
    "content": "const dialect = 'typescript';\n\nmodule.exports = grammar(require('./javascript'), {\n\tname: 'shadeup',\n\n\texternals: ($, previous) =>\n\t\tprevious.concat([\n\t\t\t// Allow the external scanner to tell whether it is parsing an expression\n\t\t\t// or a type by checking the validity of this binary operator. This is\n\t\t\t// needed because the rules for automatic semicolon insertion are\n\t\t\t// slightly different when parsing types. Any binary-only operator would\n\t\t\t// work.\n\t\t\t'||',\n\t\t\t$._function_signature_automatic_semicolon\n\t\t]),\n\n\tsupertypes: ($, previous) => previous.concat([$._primary_type]),\n\n\tprecedences: ($, previous) =>\n\t\tprevious.concat([\n\t\t\t['call', 'unary', 'binary', $.await_expression, $.arrow_function],\n\t\t\t[\n\t\t\t\t$.intersection_type,\n\t\t\t\t$.union_type,\n\t\t\t\t$.conditional_type,\n\t\t\t\t$.function_type,\n\t\t\t\t'binary',\n\t\t\t\t$.type_predicate,\n\t\t\t\t$.readonly_type\n\t\t\t],\n\t\t\t[$.mapped_type_clause, $.primary_expression],\n\t\t\t[$.accessibility_modifier, $.primary_expression],\n\t\t\t['unary_void', $.expression],\n\t\t\t[$.extends_clause, $.primary_expression],\n\t\t\t['unary', 'assign'],\n\t\t\t['declaration', $.expression],\n\t\t\t[$.predefined_type, $.unary_expression],\n\t\t\t[$._type, $.flow_maybe_type],\n\t\t\t[$.tuple_type, $.array_type, $.pattern, $._type],\n\t\t\t[$.readonly_type, $.pattern],\n\t\t\t[$.readonly_type, $.primary_expression],\n\t\t\t[$.type_query, $.subscript_expression, $.expression],\n\t\t\t[$.type_query, $._type_query_subscript_expression],\n\t\t\t[\n\t\t\t\t$.nested_type_identifier,\n\t\t\t\t$.generic_type,\n\t\t\t\t$._primary_type,\n\t\t\t\t$.lookup_type,\n\t\t\t\t$.index_type_query,\n\t\t\t\t$._type\n\t\t\t],\n\t\t\t[$.as_expression, $.satisfies_expression, $._primary_type],\n\t\t\t[$._type_query_member_expression, $.member_expression],\n\t\t\t[$._type_query_member_expression, $.primary_expression],\n\t\t\t[$._type_query_subscript_expression, $.subscript_expression],\n\t\t\t[$._type_query_subscript_expression, $.primary_expression],\n\t\t\t[$._type_query_call_expression, $.primary_expression],\n\t\t\t[$.type_query, $.primary_expression],\n\t\t\t[$.override_modifier, $.primary_expression],\n\t\t\t[$.decorator_call_expression, $.decorator],\n\t\t\t[$.literal_type, $.pattern],\n\t\t\t[$.predefined_type, $.pattern]\n\t\t]),\n\n\tconflicts: ($, previous) =>\n\t\tprevious.concat([\n\t\t\t[$.call_expression, $.binary_expression],\n\t\t\t[$.call_expression, $.binary_expression, $.unary_expression],\n\t\t\t[$.call_expression, $.binary_expression, $.update_expression],\n\t\t\t[$.call_expression, $.binary_expression, $.type_assertion],\n\t\t\t[$.call_expression, $.binary_expression, $.await_expression],\n\n\t\t\t// This appears to be necessary to parse a parenthesized class expression\n\t\t\t[$.class],\n\n\t\t\t[$.nested_identifier, $.nested_type_identifier, $.primary_expression],\n\t\t\t[$.nested_identifier, $.nested_type_identifier],\n\t\t\t[$.nested_identifier, $.member_expression],\n\n\t\t\t[$.primary_expression, $.array_type],\n\t\t\t[$.primary_expression, $.array_type, $.tuple_type],\n\n\t\t\t[$._call_signature, $.function_type],\n\t\t\t[$._call_signature, $.constructor_type],\n\n\t\t\t[$._primary_type, $.type_parameter],\n\t\t\t[$.jsx_opening_element, $.type_parameter],\n\t\t\t[$.jsx_opening_element, $.type_parameter, $._primary_type],\n\t\t\t[$.jsx_opening_element, $.generic_type],\n\t\t\t[$.jsx_namespace_name, $._primary_type],\n\t\t\t[$.export_statement, $.accessibility_modifier_member],\n\t\t\t[$.export_statement, $.accessibility_modifier],\n\t\t\t[$.accessibility_modifier_member, $.accessibility_modifier],\n\n\t\t\t[$.primary_expression, $._parameter_name],\n\t\t\t[$.primary_expression, $._parameter_name, $.predefined_type],\n\t\t\t[$.primary_expression, $._parameter_name, $._primary_type],\n\t\t\t[$.primary_expression, $._parameter_name, $.array_type, $.tuple_type],\n\t\t\t[$.primary_expression, $.literal_type],\n\t\t\t[$.primary_expression, $.literal_type, $.pattern],\n\t\t\t[$.primary_expression, $.literal_type, $.rest_pattern],\n\t\t\t[$.primary_expression, $.predefined_type, $.rest_pattern],\n\t\t\t[$.primary_expression, $._primary_type],\n\t\t\t[$.primary_expression, $.generic_type],\n\t\t\t[$.primary_expression, $.predefined_type],\n\t\t\t[$.primary_expression, $.pattern, $._primary_type],\n\t\t\t[$.primary_expression, $.pattern, $.predefined_type],\n\t\t\t[$._parameter_name, $.predefined_type],\n\t\t\t[$._parameter_name, $._primary_type],\n\t\t\t[$._parameter_name, $.assignment_expression],\n\t\t\t[$._parameter_name, $.pattern],\n\t\t\t[$.pattern, $._primary_type],\n\t\t\t[$.pattern, $.predefined_type],\n\n\t\t\t[$.optional_tuple_parameter, $._primary_type],\n\t\t\t[$.optional_tuple_parameter, $._primary_type, $.primary_expression],\n\t\t\t[$.rest_pattern, $._primary_type, $.primary_expression],\n\t\t\t[$.rest_pattern, $._primary_type],\n\n\t\t\t[$.object, $.object_type],\n\t\t\t[$.object, $._property_name],\n\t\t\t[$.object, $.object_pattern, $.object_type],\n\t\t\t[$.object, $.object_pattern, $._property_name],\n\t\t\t[$.object_pattern, $.object_type],\n\t\t\t[$.object_pattern, $.object_type],\n\t\t\t[$.object_pattern, $._property_name],\n\n\t\t\t[$.array, $.tuple_type],\n\t\t\t[$.array, $.array_pattern, $.tuple_type],\n\t\t\t[$.array_pattern, $.tuple_type],\n\n\t\t\t[$.template_literal_type, $.template_string]\n\t\t]),\n\n\tinline: ($, previous) =>\n\t\tprevious\n\t\t\t.filter((rule) => !['_formal_parameter', '_call_signature'].includes(rule.name))\n\t\t\t.concat([$._type_identifier, $._jsx_start_opening_element]),\n\n\trules: {\n\t\tpublic_field_definition: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('declare'),\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\tchoice(\n\t\t\t\t\tseq(optional('static'), optional($.override_modifier), optional('readonly')),\n\t\t\t\t\tseq(optional('abstract'), optional('readonly')),\n\t\t\t\t\tseq(optional('readonly'), optional('abstract'))\n\t\t\t\t),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional(choice('?', '!')),\n\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\toptional($._initializer)\n\t\t\t),\n\n\t\t// override original catch_clause, add optional type annotation\n\t\tcatch_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'catch',\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\t'(',\n\t\t\t\t\t\tfield('parameter', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\t\toptional(\n\t\t\t\t\t\t\t// only types that resolve to 'any' or 'unknown' are supported\n\t\t\t\t\t\t\t// by the language but it's simpler to accept any type here.\n\t\t\t\t\t\t\tfield('type', $.type_annotation)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t')'\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('body', $.statement_block)\n\t\t\t),\n\n\t\tcall_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\tprec(\n\t\t\t\t\t'call',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.expression),\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tprec(\n\t\t\t\t\t'member',\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('function', $.primary_expression),\n\t\t\t\t\t\t'?.',\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\t\tfield('arguments', $.arguments)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tnew_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\t'new',\n\t\t\t\tseq(\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('constructor', $.primary_expression),\n\t\t\t\t\tfield('type_arguments', optional($.type_arguments)),\n\t\t\t\t\tfield('arguments', optional($.arguments))\n\t\t\t\t)\n\t\t\t),\n\n\t\t_augmented_assignment_lhs: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\t_lhs_expression: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\tprimary_expression: ($, previous) => choice(previous, $.non_null_expression),\n\n\t\t// If the dialect is regular typescript, we exclude JSX expressions and\n\t\t// include type assertions. If the dialect is TSX, we do the opposite.\n\t\texpression: ($, previous) => {\n\t\t\tconst choices = [$.as_expression, $.satisfies_expression, $.internal_module];\n\n\t\t\tif (dialect === 'typescript') {\n\t\t\t\tchoices.push($.type_assertion);\n\t\t\t\tchoices.push(\n\t\t\t\t\t...previous.members.filter(\n\t\t\t\t\t\t(member) => member.name !== '_jsx_element' && member.name !== 'jsx_fragment'\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} else if (dialect === 'tsx') {\n\t\t\t\tchoices.push(...previous.members);\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Unknown dialect ${dialect}`);\n\t\t\t}\n\n\t\t\treturn choice(...choices);\n\t\t},\n\n\t\t_jsx_start_opening_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<',\n\t\t\t\tchoice(\n\t\t\t\t\tfield('name', choice($._jsx_identifier, $.jsx_namespace_name)),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($.identifier, $.nested_identifier)),\n\t\t\t\t\t\tfield('type_arguments', optional($.type_arguments))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\trepeat(field('attribute', $._jsx_attribute))\n\t\t\t),\n\n\t\t// This rule is only referenced by expression when the dialect is 'tsx'\n\t\tjsx_opening_element: ($) => prec.dynamic(-1, seq($._jsx_start_opening_element, '>')),\n\n\t\t// tsx only. See jsx_opening_element.\n\t\tjsx_self_closing_element: ($) => prec.dynamic(-1, seq($._jsx_start_opening_element, '/', '>')),\n\n\t\texport_specifier: ($, previous) => seq(optional(choice('type', 'typeof')), previous),\n\n\t\t_import_identifier: ($) => choice($.identifier, alias('type', $.identifier)),\n\n\t\timport_specifier: ($, previous) =>\n\t\t\tseq(\n\t\t\t\toptional(choice('type', 'typeof')),\n\t\t\t\tchoice(\n\t\t\t\t\tfield('name', $._import_identifier),\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($._module_export_name, alias('type', $.identifier))),\n\t\t\t\t\t\t'as',\n\t\t\t\t\t\tfield('alias', $._import_identifier)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\timport_clause: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\t$.namespace_import,\n\t\t\t\t$.named_imports,\n\t\t\t\tseq($._import_identifier, optional(seq(',', choice($.namespace_import, $.named_imports))))\n\t\t\t),\n\n\t\timport_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'import',\n\t\t\t\toptional(choice('type', 'typeof')),\n\t\t\t\tchoice(\n\t\t\t\t\tseq($.import_clause, $._from_clause),\n\t\t\t\t\t$.import_require_clause,\n\t\t\t\t\tfield('source', $.string)\n\t\t\t\t),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\texport_statement: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\tprevious,\n\t\t\t\tseq('export', 'type', $.export_clause, optional($._from_clause), $._semicolon),\n\t\t\t\tseq('export', '=', $.expression, $._semicolon),\n\t\t\t\tseq('export', 'as', 'namespace', $.identifier, $._semicolon)\n\t\t\t),\n\n\t\tnon_null_expression: ($) => prec.left('unary', seq($.expression, '!')),\n\n\t\tvariable_declarator: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\t\toptional($._initializer)\n\t\t\t\t),\n\t\t\t\tprec('declaration', seq(field('name', $.identifier), '!', field('type', $.type_annotation)))\n\t\t\t),\n\n\t\tmethod_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\toptional('static'),\n\t\t\t\toptional($.override_modifier),\n\t\t\t\toptional('readonly'),\n\t\t\t\toptional('async'),\n\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional('?'),\n\t\t\t\t$._call_signature\n\t\t\t),\n\n\t\tabstract_method_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t'abstract',\n\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional('?'),\n\t\t\t\t$._call_signature\n\t\t\t),\n\n\t\tparenthesized_expression: ($, previous) =>\n\t\t\tseq(\n\t\t\t\t'(',\n\t\t\t\tchoice(\n\t\t\t\t\tseq($.expression, field('type', optional($.type_annotation))),\n\t\t\t\t\t$.sequence_expression\n\t\t\t\t),\n\t\t\t\t')'\n\t\t\t),\n\n\t\t_formal_parameter: ($) => choice($.required_parameter, $.optional_parameter),\n\n\t\tfunction_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\t'function',\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\t$._call_signature,\n\t\t\t\tchoice($._semicolon, $._function_signature_automatic_semicolon)\n\t\t\t),\n\n\t\tclass_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\trepeat(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.decorator,\n\t\t\t\t\t\tseq($.method_definition, optional($._semicolon)),\n\t\t\t\t\t\t// As it happens for functions, the semicolon insertion should not\n\t\t\t\t\t\t// happen if a block follows the closing paren, because then it's a\n\t\t\t\t\t\t// *definition*, not a declaration. Example:\n\t\t\t\t\t\t//     public foo()\n\t\t\t\t\t\t//     { <--- this brace made the method signature become a definition\n\t\t\t\t\t\t//     }\n\t\t\t\t\t\t// The same rule applies for functions and that's why we use\n\t\t\t\t\t\t// \"_function_signature_automatic_semicolon\".\n\t\t\t\t\t\tseq($.method_signature, choice($._function_signature_automatic_semicolon, ',')),\n\t\t\t\t\t\t$.class_static_block,\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t$.abstract_method_signature,\n\t\t\t\t\t\t\t\t$.index_signature,\n\t\t\t\t\t\t\t\t$.method_signature,\n\t\t\t\t\t\t\t\t$.public_field_definition\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tchoice($._semicolon, ',')\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t),\n\n\t\tmethod_definition: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\t\toptional('static'),\n\t\t\t\t\toptional($.override_modifier),\n\t\t\t\t\toptional('readonly'),\n\t\t\t\t\toptional('async'),\n\t\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\t\tfield('name', $._property_name),\n\t\t\t\t\toptional('?'),\n\t\t\t\t\t$._call_signature,\n\t\t\t\t\tfield('body', $.statement_block)\n\t\t\t\t)\n\t\t\t),\n\n\t\tdeclaration: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\tprevious,\n\t\t\t\t$.function_signature,\n\t\t\t\t$.abstract_class_declaration,\n\t\t\t\t$.module,\n\t\t\t\tprec('declaration', $.internal_module),\n\t\t\t\t$.type_alias_declaration,\n\t\t\t\t$.enum_declaration,\n\t\t\t\t$.interface_declaration,\n\t\t\t\t$.import_alias,\n\t\t\t\t$.ambient_declaration\n\t\t\t),\n\n\t\ttype_assertion: ($) => prec.left('unary', seq($.type_arguments, $.expression)),\n\n\t\tas_expression: ($) => prec.left('binary', seq($.expression, 'as', $._type)),\n\n\t\tsatisfies_expression: ($) => prec.left('binary', seq($.expression, 'satisfies', $._type)),\n\n\t\tclass_heritage: ($) =>\n\t\t\tchoice(seq($.extends_clause, optional($.implements_clause)), $.implements_clause),\n\n\t\timport_require_clause: ($) =>\n\t\t\tseq($.identifier, '=', 'require', '(', field('source', $.string), ')'),\n\n\t\textends_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'extends',\n\t\t\t\tcommaSep1(\n\t\t\t\t\tseq(field('value', $.expression), field('type_arguments', optional($.type_arguments)))\n\t\t\t\t)\n\t\t\t),\n\n\t\timplements_clause: ($) => seq('implements', commaSep1($._type)),\n\n\t\tambient_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'declare',\n\t\t\t\tchoice(\n\t\t\t\t\t$.declaration,\n\t\t\t\t\tseq('global', $.statement_block),\n\t\t\t\t\tseq('module', '.', alias($.identifier, $.property_identifier), ':', $._type, $._semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass: ($) =>\n\t\t\tprec(\n\t\t\t\t'literal',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', optional($._type_identifier)),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t)\n\t\t\t),\n\n\t\tabstract_class_declaration: ($) =>\n\t\t\tprec(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'abstract',\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body)\n\t\t\t\t)\n\t\t\t),\n\n\t\tclass_declaration: ($) =>\n\t\t\tprec.left(\n\t\t\t\t'declaration',\n\t\t\t\tseq(\n\t\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\t\t'class',\n\t\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\toptional($.class_heritage),\n\t\t\t\t\tfield('body', $.class_body),\n\t\t\t\t\toptional($._automatic_semicolon)\n\t\t\t\t)\n\t\t\t),\n\n\t\tmodule: ($) => seq('module', $._module),\n\n\t\tinternal_module: ($) => seq('namespace', $._module),\n\n\t\t_module: ($) =>\n\t\t\tprec.right(\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($.string, $.identifier, $.nested_identifier)),\n\t\t\t\t\t// On .d.ts files \"declare module foo\" desugars to \"declare module foo {}\",\n\t\t\t\t\t// hence why it is optional here\n\t\t\t\t\tfield('body', optional($.statement_block))\n\t\t\t\t)\n\t\t\t),\n\n\t\timport_alias: ($) =>\n\t\t\tseq('import', $.identifier, '=', choice($.identifier, $.nested_identifier), $._semicolon),\n\n\t\tnested_type_identifier: ($) =>\n\t\t\tprec(\n\t\t\t\t'member',\n\t\t\t\tseq(\n\t\t\t\t\tfield('module', choice($.identifier, $.nested_identifier)),\n\t\t\t\t\t'.',\n\t\t\t\t\tfield('name', $._type_identifier)\n\t\t\t\t)\n\t\t\t),\n\n\t\tinterface_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'interface',\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\toptional($.extends_type_clause),\n\t\t\t\tfield('body', $.object_type)\n\t\t\t),\n\n\t\textends_type_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'extends',\n\t\t\t\tcommaSep1(\n\t\t\t\t\tfield('type', choice($._type_identifier, $.nested_type_identifier, $.generic_type))\n\t\t\t\t)\n\t\t\t),\n\n\t\tenum_declaration: ($) =>\n\t\t\tseq(optional('const'), 'enum', field('name', $.identifier), field('body', $.enum_body)),\n\n\t\tenum_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tsepBy1(',', choice(field('name', $._property_name), $.enum_assignment)),\n\t\t\t\t\t\toptional(',')\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'}'\n\t\t\t),\n\n\t\tenum_assignment: ($) => seq(field('name', $._property_name), $._initializer),\n\n\t\ttype_alias_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\t'type',\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t'=',\n\t\t\t\tfield('value', $._type),\n\t\t\t\t$._semicolon\n\t\t\t),\n\n\t\taccessibility_modifier: ($) => choice('pub'),\n\t\taccessibility_modifier_member: ($) => choice('pub'),\n\n\t\toverride_modifier: (_) => 'override',\n\n\t\trequired_parameter: ($) =>\n\t\t\tseq($._parameter_name, field('type', optional($.type_annotation)), optional($._initializer)),\n\n\t\toptional_parameter: ($) =>\n\t\t\tseq(\n\t\t\t\t$._parameter_name,\n\t\t\t\t'?',\n\t\t\t\tfield('type', optional($.type_annotation)),\n\t\t\t\toptional($._initializer)\n\t\t\t),\n\n\t\t_parameter_name: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(field('decorator', $.decorator)),\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\toptional($.override_modifier),\n\t\t\t\toptional('readonly'),\n\t\t\t\tfield('pattern', choice($.pattern, $.this))\n\t\t\t),\n\n\t\tomitting_type_annotation: ($) => seq('-?:', $._type),\n\t\topting_type_annotation: ($) => seq('?:', $._type),\n\t\ttype_annotation: ($) => seq(':', $._type),\n\t\ttype_annotation_arrow: ($) => seq('->', $._type),\n\n\t\tasserts: ($) => seq(':', 'asserts', choice($.type_predicate, $.identifier, $.this)),\n\n\t\t_type: ($) =>\n\t\t\tchoice($._primary_type, $.function_type, $.readonly_type, $.constructor_type, $.infer_type),\n\n\t\ttuple_parameter: ($) =>\n\t\t\tseq(field('name', choice($.identifier, $.rest_pattern)), field('type', $.type_annotation)),\n\n\t\toptional_tuple_parameter: ($) =>\n\t\t\tseq(field('name', $.identifier), '?', field('type', $.type_annotation)),\n\n\t\toptional_type: ($) => seq($._type, '?'),\n\t\trest_type: ($) => seq('...', $._type),\n\n\t\t_tuple_type_member: ($) =>\n\t\t\tchoice(\n\t\t\t\talias($.tuple_parameter, $.required_parameter),\n\t\t\t\talias($.optional_tuple_parameter, $.optional_parameter),\n\t\t\t\t$.optional_type,\n\t\t\t\t$.rest_type,\n\t\t\t\t$._type\n\t\t\t),\n\n\t\tconstructor_type: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\toptional('abstract'),\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\t'=>',\n\t\t\t\t\tfield('type', $._type)\n\t\t\t\t)\n\t\t\t),\n\n\t\t_primary_type: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.parenthesized_type,\n\t\t\t\t$.predefined_type,\n\t\t\t\t$._type_identifier,\n\t\t\t\t$.nested_type_identifier,\n\t\t\t\t$.generic_type,\n\t\t\t\t$.object_type,\n\t\t\t\t$.array_type,\n\t\t\t\t$.tuple_type,\n\t\t\t\t$.flow_maybe_type,\n\t\t\t\t$.type_query,\n\t\t\t\t$.index_type_query,\n\t\t\t\talias($.this, $.this_type),\n\t\t\t\t$.existential_type,\n\t\t\t\t$.literal_type,\n\t\t\t\t$.lookup_type,\n\t\t\t\t$.conditional_type,\n\t\t\t\t$.template_literal_type,\n\t\t\t\t$.intersection_type,\n\t\t\t\t$.union_type\n\t\t\t),\n\n\t\ttemplate_type: ($) => seq('${', choice($._primary_type, $.infer_type), '}'),\n\n\t\ttemplate_literal_type: ($) => seq('`', repeat(choice($._template_chars, $.template_type)), '`'),\n\n\t\tinfer_type: ($) => seq('infer', $._type_identifier),\n\n\t\tconditional_type: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\tfield('left', $._type),\n\t\t\t\t\t'extends',\n\t\t\t\t\tfield('right', $._type),\n\t\t\t\t\t'?',\n\t\t\t\t\tfield('consequence', $._type),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('alternative', $._type)\n\t\t\t\t)\n\t\t\t),\n\n\t\tgeneric_type: ($) =>\n\t\t\tprec(\n\t\t\t\t'call',\n\t\t\t\tseq(\n\t\t\t\t\tfield('name', choice($._type_identifier, $.nested_type_identifier)),\n\t\t\t\t\tfield('type_arguments', $.type_arguments)\n\t\t\t\t)\n\t\t\t),\n\n\t\ttype_predicate: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'name',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t$.this,\n\t\t\t\t\t\t// Sometimes tree-sitter contextual lexing is not good enough to know\n\t\t\t\t\t\t// that 'object' in ':object is foo' is really an identifier and not\n\t\t\t\t\t\t// a predefined_type, so we must explicitely list all possibilities.\n\t\t\t\t\t\t// TODO: should we use '_reserved_identifier'? Should all the element in\n\t\t\t\t\t\t// 'predefined_type' be added to '_reserved_identifier'?\n\t\t\t\t\t\talias($.predefined_type, $.identifier)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'is',\n\t\t\t\tfield('type', $._type)\n\t\t\t),\n\n\t\ttype_predicate_annotation: ($) => seq(seq(':', $.type_predicate)),\n\n\t\t// Type query expressions are more restrictive than regular expressions\n\t\t_type_query_member_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'object',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tchoice('.', '?.', '::'),\n\t\t\t\tfield(\n\t\t\t\t\t'property',\n\t\t\t\t\tchoice($.private_property_identifier, alias($.identifier, $.property_identifier))\n\t\t\t\t)\n\t\t\t),\n\t\t_type_query_subscript_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'object',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\toptional('?.'),\n\t\t\t\t'[',\n\t\t\t\tfield('index', choice($.predefined_type, $.string, $.number)),\n\t\t\t\t']'\n\t\t\t),\n\t\t_type_query_call_expression: ($) =>\n\t\t\tseq(\n\t\t\t\tfield(\n\t\t\t\t\t'function',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.import,\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tfield('arguments', $.arguments)\n\t\t\t),\n\t\ttype_query: ($) =>\n\t\t\tprec.right(\n\t\t\t\tseq(\n\t\t\t\t\t'typeof',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\talias($._type_query_subscript_expression, $.subscript_expression),\n\t\t\t\t\t\talias($._type_query_member_expression, $.member_expression),\n\t\t\t\t\t\talias($._type_query_call_expression, $.call_expression),\n\t\t\t\t\t\t$.identifier\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\n\t\tindex_type_query: ($) => seq('keyof', $._primary_type),\n\n\t\tlookup_type: ($) => seq($._primary_type, '[', $._type, ']'),\n\n\t\tmapped_type_clause: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\t'in',\n\t\t\t\tfield('type', $._type),\n\t\t\t\toptional(seq('as', field('alias', $._type)))\n\t\t\t),\n\n\t\tliteral_type: ($) =>\n\t\t\tchoice(\n\t\t\t\talias($._number, $.unary_expression),\n\t\t\t\t$.number,\n\t\t\t\t$.string,\n\t\t\t\t$.true,\n\t\t\t\t$.false,\n\t\t\t\t$.null,\n\t\t\t\t$.undefined\n\t\t\t),\n\n\t\t_number: ($) =>\n\t\t\tprec.left(1, seq(field('operator', choice('-', '+')), field('argument', $.number))),\n\n\t\texistential_type: ($) => '*',\n\n\t\tflow_maybe_type: ($) => prec.right(seq('?', $._primary_type)),\n\n\t\tparenthesized_type: ($) => seq('(', $._type, ')'),\n\n\t\tpredefined_type: ($) =>\n\t\t\tchoice(\n\t\t\t\t'any',\n\t\t\t\t'number',\n\t\t\t\t'boolean',\n\t\t\t\t'string',\n\t\t\t\t'symbol',\n\t\t\t\t'void',\n\t\t\t\t'unknown',\n\t\t\t\t'string',\n\t\t\t\t'never',\n\t\t\t\t'object'\n\t\t\t),\n\n\t\ttype_arguments: ($) => seq('<', commaSep1($._type), optional(','), '>'),\n\n\t\tobject_type: ($) =>\n\t\t\tseq(\n\t\t\t\tchoice('{', '{|'),\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional(choice(',', ';')),\n\t\t\t\t\t\tsepBy1(\n\t\t\t\t\t\t\tchoice(',', $._semicolon),\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t//$.export_statement,\n\t\t\t\t\t\t\t\t$.property_signature,\n\t\t\t\t\t\t\t\t$.call_signature,\n\t\t\t\t\t\t\t\t$.construct_signature,\n\t\t\t\t\t\t\t\t$.index_signature,\n\t\t\t\t\t\t\t\t$.method_signature\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptional(choice(',', $._semicolon))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tchoice('}', '|}')\n\t\t\t),\n\n\t\tobject_field_type: ($) =>\n\t\t\tseq(\n\t\t\t\tchoice('{', '{|'),\n\t\t\t\toptional(\n\t\t\t\t\tseq(\n\t\t\t\t\t\toptional(choice(',', ';')),\n\t\t\t\t\t\tsepBy1(\n\t\t\t\t\t\t\tchoice(',', $._semicolon),\n\t\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t\t// $.export_statement,\n\t\t\t\t\t\t\t\t$.property_signature\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptional(choice(',', $._semicolon))\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tchoice('}', '|}')\n\t\t\t),\n\n\t\tobject_method_type: ($) =>\n\t\t\tseq(choice('{', '{|'), repeat($.method_definition), choice('}', '|}')),\n\n\t\tobject_method_signature_type: ($) =>\n\t\t\tseq(choice('{', '{|'), repeat($.method_signature), choice('}', '|}')),\n\n\t\tcall_signature: ($) => $._call_signature,\n\n\t\tproperty_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional($.accessibility_modifier),\n\t\t\t\toptional('static'),\n\t\t\t\toptional($.override_modifier),\n\t\t\t\toptional('readonly'),\n\t\t\t\tfield('name', $._property_name),\n\t\t\t\toptional('?'),\n\t\t\t\tfield('type', optional($.type_annotation))\n\t\t\t),\n\n\t\t_call_signature: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\tfield(\n\t\t\t\t\t'return_type',\n\t\t\t\t\toptional(choice($.type_annotation_arrow, $.asserts, $.type_predicate_annotation))\n\t\t\t\t)\n\t\t\t),\n\n\t\ttype_parameters: ($) => seq('<', commaSep1($.type_parameter), optional(','), '>'),\n\n\t\ttype_parameter: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', $._type_identifier),\n\t\t\t\tfield('constraint', optional($.constraint)),\n\t\t\t\tfield('value', optional($.default_type))\n\t\t\t),\n\n\t\tdefault_type: ($) => seq('=', $._type),\n\n\t\tconstraint: ($) => seq(choice('extends', ':'), $._type),\n\n\t\tconstruct_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('abstract'),\n\t\t\t\t'new',\n\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\tfield('type', optional($.type_annotation))\n\t\t\t),\n\n\t\tindex_signature: ($) =>\n\t\t\tseq(\n\t\t\t\toptional(seq(field('sign', optional('-')), 'readonly')),\n\t\t\t\t'[',\n\t\t\t\tchoice(\n\t\t\t\t\tseq(\n\t\t\t\t\t\tfield('name', choice($.identifier, alias($._reserved_identifier, $.identifier))),\n\t\t\t\t\t\t':',\n\t\t\t\t\t\tfield('index_type', $._type)\n\t\t\t\t\t),\n\t\t\t\t\t$.mapped_type_clause\n\t\t\t\t),\n\t\t\t\t']',\n\t\t\t\tfield(\n\t\t\t\t\t'type',\n\t\t\t\t\tchoice($.type_annotation, $.omitting_type_annotation, $.opting_type_annotation)\n\t\t\t\t)\n\t\t\t),\n\n\t\tarray_type: ($) => seq($._primary_type, '[', ']'),\n\t\ttuple_type: ($) => seq('[', commaSep($._tuple_type_member), optional(','), ']'),\n\t\treadonly_type: ($) => seq('readonly', $._type),\n\n\t\tunion_type: ($) => prec.left(seq(optional($._type), '|', $._type)),\n\t\tintersection_type: ($) => prec.left(seq(optional($._type), '&', $._type)),\n\n\t\tfunction_type: ($) =>\n\t\t\tprec.left(\n\t\t\t\tseq(\n\t\t\t\t\tfield('type_parameters', optional($.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\t'->',\n\t\t\t\t\tfield('return_type', choice($._type, $.type_predicate))\n\t\t\t\t)\n\t\t\t),\n\n\t\t_type_identifier: ($) => alias($.identifier, $.type_identifier),\n\n\t\t_reserved_identifier: ($, previous) =>\n\t\t\tchoice(\n\t\t\t\t'declare',\n\t\t\t\t'namespace',\n\t\t\t\t'type',\n\t\t\t\t'public',\n\t\t\t\t'private',\n\t\t\t\t'protected',\n\t\t\t\t'override',\n\t\t\t\t'readonly',\n\t\t\t\t'module',\n\t\t\t\t'any',\n\t\t\t\t'number',\n\t\t\t\t// 'float4',\n\t\t\t\t'boolean',\n\t\t\t\t'string',\n\t\t\t\t'symbol',\n\t\t\t\t'export',\n\t\t\t\tprevious\n\t\t\t)\n\t}\n});\n\nfunction commaSep1(rule) {\n\treturn sepBy1(',', rule);\n}\n\nfunction commaSep(rule) {\n\treturn sepBy(',', rule);\n}\n\nfunction sepBy(sep, rule) {\n\treturn optional(sepBy1(sep, rule));\n}\n\nfunction sepBy1(sep, rule) {\n\treturn seq(rule, repeat(seq(sep, rule)));\n}\n"
  },
  {
    "path": "package/__lib.d.ts",
    "content": "import * as __ from \"shadeup/math\";\n\ndeclare namespace ShadeupFiles {\n  declare namespace __lib {\n    export {};\n  }\n}\n\nexport declare function makeShadeupInstance(\n  canvas: HTMLCanvasElement,\n  options?: {\n    preferredAdapter?: \"webgl\" | \"webgpu\";\n    limits?: GPUSupportedLimits;\n    ui?: boolean;\n  }\n): Promise<{\n  /**\n   * Set to false to pause\n   */\n  playing: boolean;\n\n  canvas: HTMLCanvasElement;\n\n  adapter: any;\n  hooks: {\n    beforeFrame?: () => void;\n    afterFrame?: () => void;\n    reset?: () => void;\n  }[];\n  start: () => void;\n\n  env: {\n    camera: {\n      position: __.float3;\n      rotation: __.float4;\n      width: __.float;\n      height: __.float;\n      fov: __.float;\n      near: __.float;\n      far: __.float;\n    };\n    camera2d: {\n      position: __.float2;\n      zoom: __.float;\n    };\n    deltaTime: __.float;\n    frame: __.int;\n    keyboard: any;\n    mouse: any;\n    screenSize: __.float2;\n    time: __.float;\n  };\n\n  /**\n   * Used to pass values into the shadeup env (accessed as env.input(\"name\") inside)\n   */\n  inputValues: Map<string, any>;\n\n  enableUI: () => Promise<void>;\n\n  loadTextureFromImageLike: (\n\t\timg: HTMLImageElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas | HTMLVideoElement\n\t) => Promise<__.texture2d<__.float4>>;\n\tloadTexture2dFromURL: (url: string) => Promise<__.texture2d<__.float4>>;\n\tloadModelFromURL: (urlGltf: string) => Promise<__.texture2d<__.float4>>;\n\n  files: typeof ShadeupFiles;\n}>;\n"
  },
  {
    "path": "package/__lib.js",
    "content": "\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/file.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    var globalVarGet = std___std_all_1.globalVarGet;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/std_math.js\", deps, func);\n\tvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\ndefine([\"require\", \"exports\", \"./static-math\"], function (require, exports, static_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.unpack2x16float = exports.unpack2x16unorm = exports.unpack2x16snorm = exports.unpack4x8unorm = exports.unpack4x8snorm = exports.pack2x16float = exports.pack2x16unorm = exports.pack2x16snorm = exports.pack4x8unorm = exports.pack4x8snorm = exports.bitcast = exports.ddyCoarse = exports.ddxCoarse = exports.ddyFine = exports.ddxFine = exports.ddy = exports.ddx = exports.discard = exports.workgroupUniformLoad = exports.storageBarrier = exports.workgroupBarrier = exports.atomic = exports.atomic_internal = exports.FM = exports.intifyVector = exports.swizzle = exports.testDocComment = exports.makeVector = exports.not = exports.or = exports.and = exports.gte = exports.gt = exports.lte = exports.lt = exports.neq = exports.eq = exports.saturate = exports.clamp = exports.max = exports.min = exports.smoothstep = exports.step = exports.radians = exports.degrees = exports.refract = exports.reflect = exports.normalize = exports.distance = exports.dist = exports.length = exports.bilerp = exports.lerp = exports.dot = exports.cross = exports.pingpong = exports.rand3 = exports.rand2 = exports.rand = exports.wrap = exports.frac = exports.inversesqrt = exports.sqrt = exports.log10 = exports.log2 = exports.log = exports.exp = exports.atanh = exports.asinh = exports.acosh = exports.tanh = exports.sinh = exports.cosh = exports.atan2 = exports.atan = exports.asin = exports.acos = exports.tan = exports.sin = exports.cos = exports.sign = exports.round = exports.ceil = exports.floor = exports.abs = exports.positive = exports.negate = exports.bitnot = exports.rshift = exports.lshift = exports.bitxor = exports.bitor = exports.bitand = exports.mod = exports.pow = exports.div = exports.mul = exports.transpose = exports.inverse = exports.sub = exports.add = exports.uint8 = exports.uint4 = exports.uint3 = exports.uint2 = exports.int4 = exports.int3 = exports.int2 = exports.float4 = exports.float3 = exports.float2 = exports.uint = exports.int = exports.float = exports.float4x4 = exports.float3x3 = exports.float2x2 = void 0;\n    function isVector(v) {\n        return Array.isArray(v);\n    }\n    function isScalar(v) {\n        return typeof v === 'number';\n    }\n    function isMatrix(v) {\n        return !!v.__matrix;\n    }\n    /** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\n    function float2x2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0];\n        if (args.length === 4) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix2x2Methods(arr);\n        return arr;\n    }\n    exports.float2x2 = float2x2;\n    /** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\n    function float3x3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 9) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix3x3Methods(arr);\n        return arr;\n    }\n    exports.float3x3 = float3x3;\n    function applyMatrix4x4Methods(arr) {\n        arr.__matrix = 4;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 4 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 4] = value[0];\n            arr[index * 4 + 1] = value[1];\n            arr[index * 4 + 2] = value[2];\n            arr[index * 4 + 3] = value[3];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 4] = op_fn(arr[index * 4], value[0]);\n            arr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\n            arr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\n            arr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\n        };\n    }\n    window.applyMatrix4x4Methods = applyMatrix4x4Methods;\n    function applyMatrix3x3Methods(arr) {\n        arr.__matrix = 3;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 3 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 3] = value[0];\n            arr[index * 3 + 1] = value[1];\n            arr[index * 3 + 2] = value[2];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 3] = op_fn(arr[index * 3], value[0]);\n            arr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\n            arr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\n        };\n    }\n    window.applyMatrix3x3Methods = applyMatrix3x3Methods;\n    function applyMatrix2x2Methods(arr) {\n        arr.__matrix = 2;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 2], arr[index * 2 + 1]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 2 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 2] = value[0];\n            arr[index * 2 + 1] = value[1];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 2] = op_fn(arr[index * 2], value[0]);\n            arr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\n        };\n    }\n    window.applyMatrix2x2Methods = applyMatrix2x2Methods;\n    /** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\n    function float4x4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 16) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix4x4Methods(arr);\n        return arr;\n    }\n    exports.float4x4 = float4x4;\n    /** @shadeup=glsl(float) @shadeup=wgsl(f32) */\n    function float(x) {\n        return x;\n    }\n    exports.float = float;\n    /** @shadeup=glsl(int) @shadeup=wgsl(i32) */\n    function int(x) {\n        return (x | 0);\n    }\n    exports.int = int;\n    /** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\n    function uint(x) {\n        return (x >>> 0);\n    }\n    exports.uint = uint;\n    /** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\n    function float2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float2 = float2;\n    /** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\n    function float3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float3 = float3;\n    /** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\n    function float4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float4 = float4;\n    /** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\n    function int2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int2 = int2;\n    /** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\n    function int3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int3 = int3;\n    /** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\n    function int4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int4 = int4;\n    function uint2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint2 = uint2;\n    function uint3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint3 = uint3;\n    function uint4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint4 = uint4;\n    function uint8(x) {\n        return ((x >>> 0) & 0xff);\n    }\n    exports.uint8 = uint8;\n    function componentMath(a, b, f) {\n        var aIsScalar = isScalar(a);\n        var bIsScalar = isScalar(b);\n        if (aIsScalar && bIsScalar) {\n            return f(a, b);\n        }\n        if (!aIsScalar && !bIsScalar) {\n            if (a.length !== b.length) {\n                throw new Error('Cannot perform component-wise math on vectors of different lengths');\n            }\n            // return a.map((a, i) => f(a, b[i])) as vector;\n            if (a.length == 2) {\n                return [f(a[0], b[0]), f(a[1], b[1])];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])];\n            }\n        }\n        else if (!aIsScalar && bIsScalar) {\n            if (a.length == 2) {\n                return [f(a[0], b), f(a[1], b)];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b)];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)];\n            }\n        }\n        else if (!bIsScalar && aIsScalar) {\n            if (b.length == 2) {\n                return [f(a, b[0]), f(a, b[1])];\n            }\n            else if (b.length == 3) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2])];\n            }\n            else if (b.length == 4) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])];\n            }\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function componentMathSingular(a, f) {\n        if (isScalar(a)) {\n            return f(a);\n        }\n        if (isVector(a)) {\n            return a.map(function (a, i) { return f(a); });\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function cCall(cb, a, b) {\n        return componentMath(a, b, function (a, b) { return a + b; });\n    }\n    function componentOp(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpMatch(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpSingular(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    function componentOpSingularFloat(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    /** @shadeup=univ(!$0$ + $1$)*/\n    var add = function (a, b) {\n        if (typeof a === 'string' && typeof b === 'string') {\n            return \"\".concat(a).concat(b);\n        }\n        else {\n            var addOp = componentOp(function (a, b) { return a + b; });\n            var v = addOp(a, b);\n            return v;\n        }\n    };\n    exports.add = add;\n    /** @shadeup=univ(!$0$ - $1$)*/\n    exports.sub = componentOp(function (a, b) { return a - b; });\n    function matrixMul(a, b) {\n        // Multiply two square matrices of the same dimension row-major\n        var dimension = a.__matrix;\n        var out;\n        if (dimension === 2) {\n            out = float2x2();\n        }\n        else if (dimension === 3) {\n            out = float3x3();\n        }\n        else if (dimension === 4) {\n            var a00 = a[0 * 4 + 0];\n            var a01 = a[0 * 4 + 1];\n            var a02 = a[0 * 4 + 2];\n            var a03 = a[0 * 4 + 3];\n            var a10 = a[1 * 4 + 0];\n            var a11 = a[1 * 4 + 1];\n            var a12 = a[1 * 4 + 2];\n            var a13 = a[1 * 4 + 3];\n            var a20 = a[2 * 4 + 0];\n            var a21 = a[2 * 4 + 1];\n            var a22 = a[2 * 4 + 2];\n            var a23 = a[2 * 4 + 3];\n            var a30 = a[3 * 4 + 0];\n            var a31 = a[3 * 4 + 1];\n            var a32 = a[3 * 4 + 2];\n            var a33 = a[3 * 4 + 3];\n            var b00 = b[0 * 4 + 0];\n            var b01 = b[0 * 4 + 1];\n            var b02 = b[0 * 4 + 2];\n            var b03 = b[0 * 4 + 3];\n            var b10 = b[1 * 4 + 0];\n            var b11 = b[1 * 4 + 1];\n            var b12 = b[1 * 4 + 2];\n            var b13 = b[1 * 4 + 3];\n            var b20 = b[2 * 4 + 0];\n            var b21 = b[2 * 4 + 1];\n            var b22 = b[2 * 4 + 2];\n            var b23 = b[2 * 4 + 3];\n            var b30 = b[3 * 4 + 0];\n            var b31 = b[3 * 4 + 1];\n            var b32 = b[3 * 4 + 2];\n            var b33 = b[3 * 4 + 3];\n            return float4x4(b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30, b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31, b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32, b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33, b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30, b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31, b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32, b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33, b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30, b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31, b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32, b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33, b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30, b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31, b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32, b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33);\n            out = float4x4();\n        }\n        for (var i = 0; i < dimension; i++) {\n            for (var j = 0; j < dimension; j++) {\n                var sum = float(0);\n                for (var k = 0; k < dimension; k++) {\n                    sum += float(a[i * dimension + k] * b[k * dimension + j]);\n                }\n                out[i * dimension + j] = sum;\n            }\n        }\n        return out;\n        if (a.__matrix === 2 && b.__matrix === 2) {\n            var a00_1 = a[0];\n            var a01_1 = a[1];\n            var a10_1 = a[2];\n            var a11_1 = a[3];\n            var b00_1 = b[0];\n            var b01_1 = b[1];\n            var b10_1 = b[2];\n            var b11_1 = b[3];\n            var v = float2x2(a00_1 * b00_1 + a01_1 * b10_1, a00_1 * b01_1 + a01_1 * b11_1, a10_1 * b00_1 + a11_1 * b10_1, a10_1 * b01_1 + a11_1 * b11_1);\n            return v;\n        }\n        else if (a.__matrix === 3 && b.__matrix === 3) {\n            var a00_2 = a[0];\n            var a01_2 = a[1];\n            var a02_1 = a[2];\n            var a10_2 = a[3];\n            var a11_2 = a[4];\n            var a12_1 = a[5];\n            var a20_1 = a[6];\n            var a21_1 = a[7];\n            var a22_1 = a[8];\n            var b00_2 = b[0];\n            var b01_2 = b[1];\n            var b02_1 = b[2];\n            var b10_2 = b[3];\n            var b11_2 = b[4];\n            var b12_1 = b[5];\n            var b20_1 = b[6];\n            var b21_1 = b[7];\n            var b22_1 = b[8];\n            var v = float3x3(a00_2 * b00_2 + a01_2 * b10_2 + a02_1 * b20_1, a00_2 * b01_2 + a01_2 * b11_2 + a02_1 * b21_1, a00_2 * b02_1 + a01_2 * b12_1 + a02_1 * b22_1, a10_2 * b00_2 + a11_2 * b10_2 + a12_1 * b20_1, a10_2 * b01_2 + a11_2 * b11_2 + a12_1 * b21_1, a10_2 * b02_1 + a11_2 * b12_1 + a12_1 * b22_1, a20_1 * b00_2 + a21_1 * b10_2 + a22_1 * b20_1, a20_1 * b01_2 + a21_1 * b11_2 + a22_1 * b21_1, a20_1 * b02_1 + a21_1 * b12_1 + a22_1 * b22_1);\n            return v;\n        }\n        else if (a.__matrix === 4 && b.__matrix === 4) {\n            var a00_3 = a[0];\n            var a01_3 = a[1];\n            var a02_2 = a[2];\n            var a03_1 = a[3];\n            var a10_3 = a[4];\n            var a11_3 = a[5];\n            var a12_2 = a[6];\n            var a13_1 = a[7];\n            var a20_2 = a[8];\n            var a21_2 = a[9];\n            var a22_2 = a[10];\n            var a23_1 = a[11];\n            var a30_1 = a[12];\n            var a31_1 = a[13];\n            var a32_1 = a[14];\n            var a33_1 = a[15];\n            var b00_3 = b[0];\n            var b01_3 = b[1];\n            var b02_2 = b[2];\n            var b03_1 = b[3];\n            var b10_3 = b[4];\n            var b11_3 = b[5];\n            var b12_2 = b[6];\n            var b13_1 = b[7];\n            var b20_2 = b[8];\n            var b21_2 = b[9];\n            var b22_2 = b[10];\n            var b23_1 = b[11];\n            var b30_1 = b[12];\n            var b31_1 = b[13];\n            var b32_1 = b[14];\n            var b33_1 = b[15];\n            var v = float4x4(a00_3 * b00_3 + a01_3 * b10_3 + a02_2 * b20_2 + a03_1 * b30_1, a00_3 * b01_3 + a01_3 * b11_3 + a02_2 * b21_2 + a03_1 * b31_1, a00_3 * b02_2 + a01_3 * b12_2 + a02_2 * b22_2 + a03_1 * b32_1, a00_3 * b03_1 + a01_3 * b13_1 + a02_2 * b23_1 + a03_1 * b33_1, a10_3 * b00_3 + a11_3 * b10_3 + a12_2 * b20_2 + a13_1 * b30_1, a10_3 * b01_3 + a11_3 * b11_3 + a12_2 * b21_2 + a13_1 * b31_1, a10_3 * b02_2 + a11_3 * b12_2 + a12_2 * b22_2 + a13_1 * b32_1, a10_3 * b03_1 + a11_3 * b13_1 + a12_2 * b23_1 + a13_1 * b33_1, a20_2 * b00_3 + a21_2 * b10_3 + a22_2 * b20_2 + a23_1 * b30_1, a20_2 * b01_3 + a21_2 * b11_3 + a22_2 * b21_2 + a23_1 * b31_1, a20_2 * b02_2 + a21_2 * b12_2 + a22_2 * b22_2 + a23_1 * b32_1, a20_2 * b03_1 + a21_2 * b13_1 + a22_2 * b23_1 + a23_1 * b33_1, a30_1 * b00_3 + a31_1 * b10_3 + a32_1 * b20_2 + a33_1 * b30_1, a30_1 * b01_3 + a31_1 * b11_3 + a32_1 * b21_2 + a33_1 * b31_1, a30_1 * b02_2 + a31_1 * b12_2 + a32_1 * b22_2 + a33_1 * b32_1, a30_1 * b03_1 + a31_1 * b13_1 + a32_1 * b23_1 + a33_1 * b33_1);\n            return v;\n        }\n        else {\n            throw new Error('Invalid matrix multiplication');\n        }\n    }\n    function matrixInversefloat2x2(m) {\n        var a = m.__index(0)[0], b = m.__index(1)[0], c = m.__index(0)[1], d = m.__index(1)[1];\n        var det = a * d - b * c;\n        if (det === 0) {\n            throw new Error('Matrix determinant is zero');\n        }\n        var detInv = 1.0 / det;\n        return float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\n    }\n    function matrixInversefloat3x3(m) {\n        var n11 = m.__index(0)[0], n12 = m.__index(1)[0], n13 = m.__index(2)[0];\n        var n21 = m.__index(0)[1], n22 = m.__index(1)[1], n23 = m.__index(2)[1];\n        var n31 = m.__index(0)[2], n32 = m.__index(1)[2], n33 = m.__index(2)[2];\n        var t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13;\n        var det = n11 * t11 + n21 * t12 + n31 * t13;\n        if (det === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        var detInv = 1 / det;\n        var v = float3x3(t11 * detInv, (n31 * n23 - n33 * n21) * detInv, (n32 * n21 - n31 * n22) * detInv, t12 * detInv, (n33 * n11 - n31 * n13) * detInv, (n31 * n12 - n32 * n11) * detInv, t13 * detInv, (n21 * n13 - n23 * n11) * detInv, (n22 * n11 - n21 * n12) * detInv);\n        return v;\n    }\n    function matrixInversefloat4x4(m) {\n        var m00 = m[0 * 4 + 0];\n        var m01 = m[0 * 4 + 1];\n        var m02 = m[0 * 4 + 2];\n        var m03 = m[0 * 4 + 3];\n        var m10 = m[1 * 4 + 0];\n        var m11 = m[1 * 4 + 1];\n        var m12 = m[1 * 4 + 2];\n        var m13 = m[1 * 4 + 3];\n        var m20 = m[2 * 4 + 0];\n        var m21 = m[2 * 4 + 1];\n        var m22 = m[2 * 4 + 2];\n        var m23 = m[2 * 4 + 3];\n        var m30 = m[3 * 4 + 0];\n        var m31 = m[3 * 4 + 1];\n        var m32 = m[3 * 4 + 2];\n        var m33 = m[3 * 4 + 3];\n        var tmp_0 = m22 * m33;\n        var tmp_1 = m32 * m23;\n        var tmp_2 = m12 * m33;\n        var tmp_3 = m32 * m13;\n        var tmp_4 = m12 * m23;\n        var tmp_5 = m22 * m13;\n        var tmp_6 = m02 * m33;\n        var tmp_7 = m32 * m03;\n        var tmp_8 = m02 * m23;\n        var tmp_9 = m22 * m03;\n        var tmp_10 = m02 * m13;\n        var tmp_11 = m12 * m03;\n        var tmp_12 = m20 * m31;\n        var tmp_13 = m30 * m21;\n        var tmp_14 = m10 * m31;\n        var tmp_15 = m30 * m11;\n        var tmp_16 = m10 * m21;\n        var tmp_17 = m20 * m11;\n        var tmp_18 = m00 * m31;\n        var tmp_19 = m30 * m01;\n        var tmp_20 = m00 * m21;\n        var tmp_21 = m20 * m01;\n        var tmp_22 = m00 * m11;\n        var tmp_23 = m10 * m01;\n        var t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\n        var t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\n        var t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\n        var t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\n        var d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n        if (d === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        return float4x4(d * t0, d * t1, d * t2, d * t3, d * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)), d * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)), d * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)), d * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)), d * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)), d * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)), d * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)), d * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)), d * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)), d * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)), d * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)), d * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02)));\n    }\n    function matrixTransposefloat2x2(m) {\n        return float2x2(m.__index(0)[0], m.__index(1)[0], m.__index(0)[1], m.__index(1)[1]);\n    }\n    function matrixTransposefloat3x3(m) {\n        return float3x3(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2]);\n    }\n    function matrixTransposefloat4x4(m) {\n        return float4x4(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(3)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(3)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2], m.__index(3)[2], m.__index(0)[3], m.__index(1)[3], m.__index(2)[3], m.__index(3)[3]);\n    }\n    function matrixMul2x2float2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j * 2 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul3x3float3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j * 3 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul4x4float4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var j = 0; j < 4; j++) {\n            for (var i = 0; i < 4; i++) {\n                c[i] += a[j * 4 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat22x2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j] * b[i * 2 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat33x3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j] * b[i * 3 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat44x4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var i = 0; i < 4; i++) {\n            for (var j = 0; j < 4; j++) {\n                c[i] += a[j] * b[i * 4 + j];\n            }\n        }\n        return c;\n    }\n    var mulFunc = componentOp(function (a, b) { return a * b; });\n    function inverse(a) {\n        if (a.__matrix == 2) {\n            return matrixInversefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixInversefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixInversefloat4x4(a);\n        }\n    }\n    exports.inverse = inverse;\n    function transpose(a) {\n        if (a.__matrix == 2) {\n            return matrixTransposefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixTransposefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixTransposefloat4x4(a);\n        }\n    }\n    exports.transpose = transpose;\n    /** @shadeup=univ(!$0$ * $1$)*/\n    var mul = function (a, b) {\n        if (isMatrix(a) || isMatrix(b)) {\n            if (isMatrix(a) && isMatrix(b)) {\n                return matrixMul(a, b);\n            }\n            else {\n                if (isMatrix(a) && typeof b == 'number') {\n                    return componentMath(b, a, function (a, b) { return a * b; });\n                }\n                else if (isMatrix(b) && typeof a == 'number') {\n                    return componentMath(a, b, function (a, b) { return a * b; });\n                }\n                else {\n                    if (isMatrix(a)) {\n                        if (a.length == 4) {\n                            return matrixMul2x2float2(a, b);\n                        }\n                        else if (a.length == 9) {\n                            return matrixMul3x3float3(a, b);\n                        }\n                        else if (a.length == 16) {\n                            return matrixMul4x4float4(a, b);\n                        }\n                    }\n                    else if (isMatrix(b)) {\n                        if (b.length == 4) {\n                            return matrixMulfloat22x2(a, b);\n                        }\n                        else if (b.length == 9) {\n                            return matrixMulfloat33x3(a, b);\n                        }\n                        else if (b.length == 16) {\n                            return matrixMulfloat44x4(a, b);\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            return mulFunc(a, b);\n        }\n    };\n    exports.mul = mul;\n    /** @shadeup=univ(!$0$ / $1$)*/\n    exports.div = componentOp(function (a, b) { return a / b; });\n    /** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\n    exports.pow = componentOp(function (a, b) { return Math.pow(a, b); });\n    /** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\n    exports.mod = componentOpMatch(function (a, b) { return a - b * Math.floor(a / b); });\n    /** @shadeup=univ(!$0$ & $1$)*/\n    exports.bitand = componentOp(function (a, b) { return a & b; });\n    /** @shadeup=univ(!$0$ | $1$)*/\n    exports.bitor = componentOp(function (a, b) { return a | b; });\n    /** @shadeup=univ(!$0$ ^ $1$)*/\n    exports.bitxor = componentOp(function (a, b) { return a ^ b; });\n    /** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\n    exports.lshift = componentOp(function (a, b) { return a << b; });\n    /** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\n    exports.rshift = componentOp(function (a, b) { return a >> b; });\n    /** @shadeup=univ(!~$0$)*/\n    exports.bitnot = componentOpSingular(function (a) { return ~a; });\n    /** @shadeup=univ(!-($0$))*/\n    exports.negate = componentOpSingular(function (a) { return -a; });\n    /** @shadeup=univ(!+($0$))*/\n    exports.positive = componentOpSingular(function (a) { return Math.abs(a); });\n    /** @shadeup=univ(abs)*/\n    exports.abs = componentOpSingular(function (a) { return Math.abs(a); });\n    /**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\n    exports.floor = componentOpSingular(Math.floor);\n    /** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\n    exports.ceil = componentOpSingular(Math.ceil);\n    /** @shadeup=univ(round)*/\n    exports.round = componentOpSingular(Math.round);\n    /** @shadeup=univ(sign)*/\n    exports.sign = componentOpSingular(Math.sign);\n    /** @shadeup=univ(cos) */\n    exports.cos = componentOpSingular(Math.cos);\n    /** @shadeup=univ(sin) */\n    exports.sin = componentOpSingularFloat(Math.sin);\n    /** @shadeup=univ(tan) */\n    exports.tan = componentOpSingular(Math.tan);\n    /** @shadeup=univ(acos) */\n    exports.acos = componentOpSingular(Math.acos);\n    /** @shadeup=univ(asin) */\n    exports.asin = componentOpSingular(Math.asin);\n    /** @shadeup=univ(atan) */\n    exports.atan = componentOpSingular(Math.atan);\n    /** @shadeup=univ(atan2) */\n    exports.atan2 = Math.atan2;\n    /** @shadeup=univ(cosh) */\n    exports.cosh = componentOpSingular(Math.cosh);\n    /** @shadeup=univ(sinh) */\n    exports.sinh = componentOpSingular(Math.sinh);\n    /** @shadeup=univ(tanh) */\n    exports.tanh = componentOpSingular(Math.tanh);\n    /** @shadeup=univ(acosh) */\n    exports.acosh = componentOpSingular(Math.acosh);\n    /** @shadeup=univ(asinh) */\n    exports.asinh = componentOpSingular(Math.asinh);\n    /** @shadeup=univ(atanh) */\n    exports.atanh = componentOpSingular(Math.atanh);\n    /** @shadeup=univ(exp) */\n    exports.exp = componentOpSingular(Math.exp);\n    /** @shadeup=univ(log) */\n    exports.log = componentOpSingular(Math.log);\n    /** @shadeup=univ(log2) */\n    exports.log2 = componentOpSingular(Math.log2);\n    /** @shadeup=univ(log10) */\n    exports.log10 = componentOpSingular(Math.log10);\n    /** @shadeup=univ(sqrt) */\n    exports.sqrt = componentOpSingular(Math.sqrt);\n    /** @shadeup=univ(inversesqrt) */\n    exports.inversesqrt = componentOpSingular(function (a) { return 1 / Math.sqrt(a); });\n    /** @shadeup=univ(fract)*/\n    exports.frac = componentOpSingular(function (a) { return a - Math.floor(a); });\n    function wrap(x, low, high) {\n        if ((0, exports.lt)(x, low)) {\n            var rng = high - low;\n            var s1 = low - x;\n            var ms = s1 % rng;\n            return high - ms;\n        }\n        else if ((0, exports.gte)(x, high)) {\n            var rng = high - low;\n            var s1 = x - high;\n            var ms = s1 % rng;\n            return low + ms;\n        }\n        else {\n            return x;\n        }\n        // return add(mod(sub(x, low), sub(high, low)), low) as T;\n    }\n    exports.wrap = wrap;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand(seed) {\n        if (typeof seed === 'number') {\n            return (0, exports.frac)(Math.sin(seed * float(91.3458)) * float(47453.5453));\n        }\n        else {\n            return Math.random();\n        }\n    }\n    exports.rand = rand;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand2(seed) {\n        return (0, exports.frac)(Math.sin((0, exports.dot)(seed, float2(12.9898, 4.1414))) * float(43758.5453));\n    }\n    exports.rand2 = rand2;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand3(seed) {\n        var _a, _b;\n        return rand2((_a = swizzle(seed, 'xy'), _b = rand(swizzle(seed, 'z')), [_a[0] + _b, _a[1] + _b]));\n    }\n    exports.rand3 = rand3;\n    // export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\n    // \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\n    // }\n    function pingpong(x, length) {\n        var t = x % (length * float(2));\n        return length - Math.abs(t - length);\n    }\n    exports.pingpong = pingpong;\n    function vectorMath_2to1_3to3(cb2, cb3) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to3_4to4(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to1_4to1(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function cross2(a, b) {\n        return a[0] * b[1] - a[1] * b[0];\n    }\n    function cross3(a, b) {\n        return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n    }\n    exports.cross = vectorMath_2to1_3to3(cross2, cross3);\n    function dot2(a, b) {\n        return a[0] * b[0] + a[1] * b[1];\n    }\n    function dot3(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n    }\n    function dot4(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n    }\n    /** @shadeup=univ(dot)*/\n    exports.dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\n    function lerp1(a, b, t) {\n        return (a + (b - a) * t);\n    }\n    function lerp2(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)];\n    }\n    function lerp3(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)];\n    }\n    function lerp4(a, b, t) {\n        return [\n            lerp1(a[0], b[0], t),\n            lerp1(a[1], b[1], t),\n            lerp1(a[2], b[2], t),\n            lerp1(a[3], b[3], t)\n        ];\n    }\n    function lerp2x2(a, b, t) {\n        return float2x2(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t));\n    }\n    function lerp3x3(a, b, t) {\n        return float3x3(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t));\n    }\n    function lerp4x4(a, b, t) {\n        return float4x4(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t), lerp1(a[9], b[9], t), lerp1(a[10], b[10], t), lerp1(a[11], b[11], t), lerp1(a[12], b[12], t), lerp1(a[13], b[13], t), lerp1(a[14], b[14], t), lerp1(a[15], b[15], t));\n    }\n    /** @shadeup=univ(mix)*/\n    function lerp(a, b, t) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\n            return lerp1(a, b, t);\n        }\n        else if (isMatrix(a) && isMatrix(b)) {\n            if (a.length === 4 && b.length === 4) {\n                return lerp2x2(a, b, t);\n            }\n            else if (a.length === 9 && b.length === 9) {\n                return lerp3x3(a, b, t);\n            }\n            else if (a.length === 16 && b.length === 16) {\n                return lerp4x4(a, b, t);\n            }\n            else {\n                throw new Error('Invalid matrix length');\n            }\n        }\n        else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\n            return lerp2(a, b, t);\n        }\n        else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\n            return lerp3(a, b, t);\n        }\n        else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\n            return lerp4(a, b, t);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.lerp = lerp;\n    /** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\n    function bilerp(a, b, c, d, u, v) {\n        return lerp(lerp(a, b, u), lerp(c, d, u), v);\n    }\n    exports.bilerp = bilerp;\n    /** @shadeup=univ(length)*/\n    function length(a) {\n        if (typeof a === 'number') {\n            return Math.abs(a);\n        }\n        else if (a.length === 2) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\n        }\n        else if (a.length === 3) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\n        }\n        else if (a.length === 4) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.length = length;\n    function dist(a, b) {\n        return length((0, exports.sub)(a, b));\n    }\n    exports.dist = dist;\n    /** @shadeup=univ(distance)*/\n    exports.distance = dist;\n    /** @shadeup=univ(normalize)*/\n    function normalize(a) {\n        if (a.length === 2) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l];\n        }\n        else if (a.length === 3) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l];\n        }\n        else if (a.length === 4) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.normalize = normalize;\n    /** @shadeup=univ(reflect)*/\n    function reflect(a, b) {\n        if (a.length === 2 && b.length === 2) {\n            return reflect2(a, b);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return reflect3(a, b);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return reflect4(a, b);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.reflect = reflect;\n    function reflect2(b, a) {\n        var dot = dot2(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\n    }\n    function reflect3(b, a) {\n        var dot = dot3(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\n    }\n    function reflect4(b, a) {\n        var dot = dot4(a, b);\n        return [\n            b[0] - 2 * dot * a[0],\n            b[1] - 2 * dot * a[1],\n            b[2] - 2 * dot * a[2],\n            b[3] - 2 * dot * a[3]\n        ];\n    }\n    /** @shadeup=univ(refract)*/\n    function refract(a, b, eta) {\n        if (a.length === 2 && b.length === 2) {\n            return refract2(a, b, eta);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return refract3(a, b, eta);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return refract4(a, b, eta);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.refract = refract;\n    function refract2(b, a, eta) {\n        var dot = dot2(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\n            ];\n    }\n    function refract3(b, a, eta) {\n        var dot = dot3(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\n            ];\n    }\n    function refract4(b, a, eta) {\n        var dot = dot4(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\n                eta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\n            ];\n    }\n    /** @shadeup=univ(degrees)*/\n    function degrees(a) {\n        return float((a * 180) / Math.PI);\n    }\n    exports.degrees = degrees;\n    /** @shadeup=univ(radians)*/\n    function radians(a) {\n        return float((a * Math.PI) / 180);\n    }\n    exports.radians = radians;\n    /** @shadeup=univ(step)*/\n    function step(edge, x) {\n        if (typeof edge === 'number') {\n            if (typeof x === 'number') {\n                return x < edge ? 0 : 1;\n            }\n            else {\n                return x.map(function (v) { return (v < edge ? 0 : 1); });\n            }\n        }\n        else {\n            if (typeof x === 'number') {\n                return edge.map(function (v) { return (x < v ? 0 : 1); });\n            }\n            else {\n                return edge.map(function (v, i) { return (x[i] < v ? 0 : 1); });\n            }\n        }\n    }\n    exports.step = step;\n    function _smoothstep(a, b, x) {\n        var t = clamp((x - a) / (b - a), 0, 1);\n        return t * t * (3 - 2 * t);\n    }\n    /** @shadeup=univ(smoothstep)*/\n    function smoothstep(a, b, x) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\n            return _smoothstep(a, b, x);\n        }\n        else if (typeof a === 'number' && typeof b === 'number') {\n            return x.map(function (v) { return _smoothstep(a, b, v); });\n        }\n        else {\n            return a.map(function (v, i) { return _smoothstep(v, b[i], x[i]); });\n        }\n    }\n    exports.smoothstep = smoothstep;\n    function componentReduce(vectors, cb) {\n        var result = [];\n        var _loop_1 = function (i) {\n            result.push(cb(vectors.map(function (v) { return v[i]; })));\n        };\n        for (var i = 0; i < vectors[0].length; i++) {\n            _loop_1(i);\n        }\n        return result;\n    }\n    /** @shadeup=univ(min)*/\n    function min() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.min.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var minTo_1 = args[1];\n                return args[0].map(function (v) { return Math.min(v, minTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var minFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.min(minFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.min.apply(Math, a); });\n            }\n            else {\n                return Math.min.apply(Math, args);\n            }\n        }\n    }\n    exports.min = min;\n    /** @shadeup=univ(max)*/\n    function max() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.max.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var maxTo_1 = args[1];\n                return args[0].map(function (v) { return Math.max(v, maxTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var maxFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.max(maxFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.max.apply(Math, a); });\n            }\n            else {\n                return Math.max.apply(Math, args);\n            }\n        }\n    }\n    exports.max = max;\n    /** @shadeup=univ(clamp)*/\n    function clamp(arg, min, max) {\n        if (Array.isArray(arg)) {\n            if (Array.isArray(min) && Array.isArray(max)) {\n                return arg.map(function (a, i) { return Math.min(Math.max(a, min[i]), max[i]); });\n            }\n            else {\n                return arg.map(function (a) { return Math.min(Math.max(a, min), max); });\n            }\n        }\n        else {\n            return Math.min(Math.max(arg, min), max);\n        }\n    }\n    exports.clamp = clamp;\n    /** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\n    function saturate(arg) {\n        return clamp(arg, float(0), float(1));\n    }\n    exports.saturate = saturate;\n    function eq(a, b) {\n        var ta = typeof a;\n        var tb = typeof b;\n        if (ta != tb) {\n            return false;\n        }\n        else if ((ta == 'number' && tb == 'number') ||\n            (ta == 'string' && tb == 'string') ||\n            (ta == 'boolean' && tb == 'boolean') ||\n            (ta == 'undefined' && tb == 'undefined')) {\n            return a == b;\n        }\n        else if (ta == 'object' && tb == 'object') {\n            if (Array.isArray(a) && Array.isArray(b)) {\n                if (a.length != b.length) {\n                    return false;\n                }\n                for (var i = 0; i < a.length; i++) {\n                    if (!eq(a[i], b[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            else {\n                return a == b;\n            }\n        }\n    }\n    exports.eq = eq;\n    /** @shadeup=univ(!($0$ != $1$))*/\n    var neq = function (a, b) { return !eq(a, b); };\n    exports.neq = neq;\n    /** @shadeup=univ(!($0$ < $1$))*/\n    var lt = function (a, b) { return a < b; };\n    exports.lt = lt;\n    /** @shadeup=univ(!($0$ <= $1$))*/\n    var lte = function (a, b) { return a <= b; };\n    exports.lte = lte;\n    /** @shadeup=univ(!($0$ > $1$))*/\n    var gt = function (a, b) { return a > b; };\n    exports.gt = gt;\n    /** @shadeup=univ(!($0$ >= $1$))*/\n    var gte = function (a, b) { return a >= b; };\n    exports.gte = gte;\n    /** @shadeup=univ(!($0$ && $1$))*/\n    var and = function (a, b) { return a && b; };\n    exports.and = and;\n    /** @shadeup=univ(!($0$ || $1$))*/\n    var or = function (a, b) { return a || b; };\n    exports.or = or;\n    /** @shadeup=univ(!(!$0$))*/\n    var not = function (a) { return !a; };\n    exports.not = not;\n    /** @shadeup=univ()*/\n    function makeVector() {\n        var out = [];\n        for (var i = 0; i < arguments.length; i++) {\n            var a = arguments[i];\n            if (typeof a === 'number') {\n                out.push(a);\n            }\n            else {\n                for (var j = 0; j < a.length; j++) {\n                    out.push(a[j]);\n                }\n            }\n        }\n        return out;\n        throw new Error('Invalid vector length');\n    }\n    exports.makeVector = makeVector;\n    var swizIndex = {\n        x: 0,\n        y: 1,\n        z: 2,\n        w: 3,\n        r: 0,\n        g: 1,\n        b: 2,\n        a: 3\n    };\n    var getSwizIndexFast = function (swiz) {\n        switch (swiz) {\n            case 'x':\n                return 0;\n            case 'y':\n                return 1;\n            case 'z':\n                return 2;\n            case 'w':\n                return 3;\n            case 'r':\n                return 0;\n            case 'g':\n                return 1;\n            case 'b':\n                return 2;\n            case 'a':\n                return 3;\n        }\n    };\n    /** @shadeup=shader */\n    function testDocComment() {\n        return 1;\n    }\n    exports.testDocComment = testDocComment;\n    function swizzle(v, swiz, assign) {\n        var _a;\n        if (typeof v === 'number') {\n            if (swiz.length === 1) {\n                return v;\n            }\n            else if (swiz.length === 2) {\n                return [v, v];\n            }\n            else if (swiz.length === 3) {\n                return [v, v, v];\n            }\n            else if (swiz.length === 4) {\n                return [v, v, v, v];\n            }\n        }\n        else if (Array.isArray(v)) {\n            if (typeof assign !== 'undefined') {\n                for (var i = 0; i < swiz.length; i++) {\n                    v[getSwizIndexFast(swiz[i])] = (_a = assign[i]) !== null && _a !== void 0 ? _a : assign;\n                }\n                return v;\n            }\n            if (swiz.length === 1) {\n                return v[getSwizIndexFast(swiz)];\n            }\n            else if (swiz.length === 2) {\n                return [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\n            }\n            else if (swiz.length === 3) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])]\n                ];\n            }\n            else if (swiz.length === 4) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])],\n                    v[getSwizIndexFast(swiz[3])]\n                ];\n            }\n        }\n        else {\n            return v[swiz];\n        }\n    }\n    exports.swizzle = swizzle;\n    function intifyVector(v) {\n        if (typeof v === 'number') {\n            return v;\n        }\n        else if (Array.isArray(v)) {\n            return v.map(function (v) { return v | 0; });\n        }\n        else {\n            return v;\n        }\n    }\n    exports.intifyVector = intifyVector;\n    exports.FM = static_math_1.FM;\n    // type f32 = number & { __float: never };\n    // type i32 = number & { __int: never };\n    // type num = f32 | i32;\n    // function f32(a: number): f32 {\n    // \treturn a as f32;\n    // }\n    // function i32(a: number): i32 {\n    // \treturn a as i32;\n    // }\n    // type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\n    // type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\n    // export const abc: numeric2 = (a, b, c) => a + b + c;\n    // abc(f32(1), i32(2));\n    var atomic_internal = /** @class */ (function () {\n        function atomic_internal(value) {\n            this.__value = value;\n        }\n        /** @shadeup=univ(!atomicLoad(&$self$))*/\n        atomic_internal.prototype.load = function () {\n            return this.__value;\n        };\n        /** @shadeup=univ(!atomicStore(&$self$, $0$))*/\n        atomic_internal.prototype.store = function (value) {\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n        };\n        /** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\n        atomic_internal.prototype.add = function (value) {\n            var old = this.__value;\n            this.__value += value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicSub(&$self$, $0$))*/\n        atomic_internal.prototype.sub = function (value) {\n            var old = this.__value;\n            this.__value -= value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMax(&$self$, $0$))*/\n        atomic_internal.prototype.max = function (value) {\n            var old = this.__value;\n            this.__value = Math.max(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMin(&$self$, $0$))*/\n        atomic_internal.prototype.min = function (value) {\n            var old = this.__value;\n            this.__value = Math.min(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\n        atomic_internal.prototype.and = function (value) {\n            var old = this.__value;\n            this.__value = value & this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicOr(&$self$, $0$))*/\n        atomic_internal.prototype.or = function (value) {\n            var old = this.__value;\n            this.__value = value | this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicXor(&$self$, $0$))*/\n        atomic_internal.prototype.xor = function (value) {\n            var old = this.__value;\n            this.__value = value ^ this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\n        atomic_internal.prototype.exchange = function (value) {\n            var old = this.__value;\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\n        atomic_internal.prototype.compareExchangeWeak = function (compare, value) {\n            var old = this.__value;\n            if (old == compare) {\n                this.__value = value;\n            }\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return {\n                old_value: old,\n                exchanged: old == compare\n            };\n        };\n        atomic_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_math_ts_71052_atomic_internal\\\",\\\"fields\\\":[[\\\"__type\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__value\\\",null],[\\\"$mutate\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return atomic_internal;\n    }());\n    exports.atomic_internal = atomic_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_math_ts_71052_atomic_internal\\\",\\\"fields\\\":[[\\\"__type\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__value\\\",null],[\\\"$mutate\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), atomic_internal)\n    function atomic(value) {\n        return new atomic_internal(value);\n    }\n    exports.atomic = atomic;\n    window.makeAtomic = atomic;\n    /**\n     * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\n     *\n     * @shadeup=univ(!workgroupBarrier())\n     */\n    function workgroupBarrier() { }\n    exports.workgroupBarrier = workgroupBarrier;\n    /**\n     * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\n     *\n     * @shadeup=univ(!storageBarrier())\n     */\n    function storageBarrier() { }\n    exports.storageBarrier = storageBarrier;\n    /**\n     * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\n     *\n     * @shadeup=univ(!workgroupUniformLoad(&$0$))\n     */\n    function workgroupUniformLoad(p) {\n        return p;\n    }\n    exports.workgroupUniformLoad = workgroupUniformLoad;\n    /**\n     * Discards the current fragment.\n     *\n     * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\n     *\n     * See: https://www.w3.org/TR/WGSL/#discard-statement\n     *\n     * @shadeup=univ(!discard;)\n     */\n    function discard() { }\n    exports.discard = discard;\n    /**\n     * Returns the derivative of the input value with respect to the window-space x coordinate.\n     * @param value - The input value.\n     * @returns The derivative of the input value with respect to the window-space x coordinate.\n     * @shadeup=glsl(!dFdx($0$))\n     * @shadeup=wgsl(!dpdx($0$))\n     */\n    function ddx(value) {\n        return 0;\n    }\n    exports.ddx = ddx;\n    /**\n     * Returns the derivative of the input value with respect to the window-space y coordinate.\n     * @param value - The input value.\n     *\n     * @returns The derivative of the input value with respect to the window-space y coordinate.\n     * @shadeup=glsl(!dFdy($0$))\n     * @shadeup=wgsl(!dpdy($0$))\n     */\n    function ddy(value) {\n        return 0;\n    }\n    exports.ddy = ddy;\n    /**\n     * @shadeup=glsl(!dFdxFine($0$))\n     * @shadeup=wgsl(!dpdxFine($0$))\n     */\n    function ddxFine(value) {\n        return 0;\n    }\n    exports.ddxFine = ddxFine;\n    /**\n     * @shadeup=glsl(!dFdyFine($0$))\n     * @shadeup=wgsl(!dpdyFine($0$))\n     */\n    function ddyFine(value) {\n        return 0;\n    }\n    exports.ddyFine = ddyFine;\n    /**\n     * @shadeup=glsl(!dFdxCoarse($0$))\n     * @shadeup=wgsl(!dpdxCoarse($0$))\n     */\n    function ddxCoarse(value) {\n        return 0;\n    }\n    exports.ddxCoarse = ddxCoarse;\n    /**\n     * @shadeup=glsl(!dFdyCoarse($0$))\n     * @shadeup=wgsl(!dpdyCoarse($0$))\n     */\n    function ddyCoarse(value) {\n        return 0;\n    }\n    exports.ddyCoarse = ddyCoarse;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!bitcast<$[0]$>($0$))\n     */\n    function bitcast(value) {\n        return 0;\n    }\n    exports.bitcast = bitcast;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8snorm($0$))\n     */\n    function pack4x8snorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8snorm = pack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8unorm($0$))\n     */\n    function pack4x8unorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8unorm = pack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16snorm($0$))\n     */\n    function pack2x16snorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16snorm = pack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16unorm($0$))\n     */\n    function pack2x16unorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16unorm = pack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16float($0$))\n     */\n    function pack2x16float(value) {\n        return uint(0);\n    }\n    exports.pack2x16float = pack2x16float;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8snorm($0$))\n     */\n    function unpack4x8snorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8snorm = unpack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8unorm($0$))\n     */\n    function unpack4x8unorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8unorm = unpack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16snorm($0$))\n     */\n    function unpack2x16snorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16snorm = unpack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16unorm($0$))\n     */\n    function unpack2x16unorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16unorm = unpack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16float($0$))\n     */\n    function unpack2x16float(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16float = unpack2x16float;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/static-math.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.FM = void 0;\n    ///\n    /// GENERATED\n    /// DO NOT EDIT THIS FILE\n    /// see generate-static-math.ts\n    ///\n    exports.FM = {\n        add_1_1: function (a, b) { return a + b; },\n        add_2_1: function (a, b) { return [a[0] + b, a[1] + b]; },\n        add_1_2: function (a, b) { return [a + b[0], a + b[1]]; },\n        add_2_2: function (a, b) { return [a[0] + b[0], a[1] + b[1]]; },\n        add_3_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b]; },\n        add_1_3: function (a, b) { return [a + b[0], a + b[1], a + b[2]]; },\n        add_3_3: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\n        add_4_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\n        add_1_4: function (a, b) { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\n        add_4_4: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\n        sub_1_1: function (a, b) { return a - b; },\n        sub_2_1: function (a, b) { return [a[0] - b, a[1] - b]; },\n        sub_1_2: function (a, b) { return [a - b[0], a - b[1]]; },\n        sub_2_2: function (a, b) { return [a[0] - b[0], a[1] - b[1]]; },\n        sub_3_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b]; },\n        sub_1_3: function (a, b) { return [a - b[0], a - b[1], a - b[2]]; },\n        sub_3_3: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\n        sub_4_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\n        sub_1_4: function (a, b) { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\n        sub_4_4: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\n        div_1_1: function (a, b) { return a / b; },\n        div_2_1: function (a, b) { return [a[0] / b, a[1] / b]; },\n        div_1_2: function (a, b) { return [a / b[0], a / b[1]]; },\n        div_2_2: function (a, b) { return [a[0] / b[0], a[1] / b[1]]; },\n        div_3_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b]; },\n        div_1_3: function (a, b) { return [a / b[0], a / b[1], a / b[2]]; },\n        div_3_3: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\n        div_4_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\n        div_1_4: function (a, b) { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\n        div_4_4: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\n        mul_1_1: function (a, b) { return a * b; },\n        mul_2_1: function (a, b) { return [a[0] * b, a[1] * b]; },\n        mul_1_2: function (a, b) { return [a * b[0], a * b[1]]; },\n        mul_2_2: function (a, b) { return [a[0] * b[0], a[1] * b[1]]; },\n        mul_3_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b]; },\n        mul_1_3: function (a, b) { return [a * b[0], a * b[1], a * b[2]]; },\n        mul_3_3: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\n        mul_4_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\n        mul_1_4: function (a, b) { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\n        mul_4_4: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\n        mod_1_1: function (a, b) { return a % b; },\n        mod_2_1: function (a, b) { return [a[0] % b, a[1] % b]; },\n        mod_1_2: function (a, b) { return [a % b[0], a % b[1]]; },\n        mod_2_2: function (a, b) { return [a[0] % b[0], a[1] % b[1]]; },\n        mod_3_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b]; },\n        mod_1_3: function (a, b) { return [a % b[0], a % b[1], a % b[2]]; },\n        mod_3_3: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\n        mod_4_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\n        mod_1_4: function (a, b) { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\n        mod_4_4: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\n        bitand_1_1: function (a, b) { return a & b; },\n        bitand_2_1: function (a, b) { return [a[0] & b, a[1] & b]; },\n        bitand_1_2: function (a, b) { return [a & b[0], a & b[1]]; },\n        bitand_2_2: function (a, b) { return [a[0] & b[0], a[1] & b[1]]; },\n        bitand_3_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b]; },\n        bitand_1_3: function (a, b) { return [a & b[0], a & b[1], a & b[2]]; },\n        bitand_3_3: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\n        bitand_4_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\n        bitand_1_4: function (a, b) { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\n        bitand_4_4: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\n        bitor_1_1: function (a, b) { return a | b; },\n        bitor_2_1: function (a, b) { return [a[0] | b, a[1] | b]; },\n        bitor_1_2: function (a, b) { return [a | b[0], a | b[1]]; },\n        bitor_2_2: function (a, b) { return [a[0] | b[0], a[1] | b[1]]; },\n        bitor_3_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b]; },\n        bitor_1_3: function (a, b) { return [a | b[0], a | b[1], a | b[2]]; },\n        bitor_3_3: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\n        bitor_4_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\n        bitor_1_4: function (a, b) { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\n        bitor_4_4: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\n        bitxor_1_1: function (a, b) { return a ^ b; },\n        bitxor_2_1: function (a, b) { return [a[0] ^ b, a[1] ^ b]; },\n        bitxor_1_2: function (a, b) { return [a ^ b[0], a ^ b[1]]; },\n        bitxor_2_2: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1]]; },\n        bitxor_3_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\n        bitxor_1_3: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\n        bitxor_3_3: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\n        bitxor_4_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\n        bitxor_1_4: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\n        bitxor_4_4: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\n        lshift_1_1: function (a, b) { return a << b; },\n        lshift_2_1: function (a, b) { return [a[0] << b, a[1] << b]; },\n        lshift_1_2: function (a, b) { return [a << b[0], a << b[1]]; },\n        lshift_2_2: function (a, b) { return [a[0] << b[0], a[1] << b[1]]; },\n        lshift_3_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b]; },\n        lshift_1_3: function (a, b) { return [a << b[0], a << b[1], a << b[2]]; },\n        lshift_3_3: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\n        lshift_4_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\n        lshift_1_4: function (a, b) { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\n        lshift_4_4: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\n        rshift_1_1: function (a, b) { return a >> b; },\n        rshift_2_1: function (a, b) { return [a[0] >> b, a[1] >> b]; },\n        rshift_1_2: function (a, b) { return [a >> b[0], a >> b[1]]; },\n        rshift_2_2: function (a, b) { return [a[0] >> b[0], a[1] >> b[1]]; },\n        rshift_3_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\n        rshift_1_3: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2]]; },\n        rshift_3_3: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\n        rshift_4_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\n        rshift_1_4: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\n        rshift_4_4: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\n        bitnot_1: function (a) { return ~a; },\n        bitnot_2: function (a) { return [~a[0], ~a[1]]; },\n        bitnot_3: function (a) { return [~a[0], ~a[1], ~a[2]]; },\n        bitnot_4: function (a) { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\n        negate_1: function (a) { return -a; },\n        negate_2: function (a) { return [-a[0], -a[1]]; },\n        negate_3: function (a) { return [-a[0], -a[1], -a[2]]; },\n        negate_4: function (a) { return [-a[0], -a[1], -a[2], -a[3]]; },\n        positive_1: function (a) { return Math.abs(a); },\n        positive_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\n        positive_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\n        positive_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\n        abs_1: function (a) { return Math.abs(a); },\n        abs_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\n        abs_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\n        abs_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\n        floor_1: function (a) { return Math.floor(a); },\n        floor_2: function (a) { return [Math.floor(a[0]), Math.floor(a[1])]; },\n        floor_3: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\n        floor_4: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\n        ceil_1: function (a) { return Math.ceil(a); },\n        ceil_2: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\n        ceil_3: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\n        ceil_4: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\n        round_1: function (a) { return Math.round(a); },\n        round_2: function (a) { return [Math.round(a[0]), Math.round(a[1])]; },\n        round_3: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\n        round_4: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\n        sign_1: function (a) { return Math.sign(a); },\n        sign_2: function (a) { return [Math.sign(a[0]), Math.sign(a[1])]; },\n        sign_3: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\n        sign_4: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\n        cos_1: function (a) { return Math.cos(a); },\n        cos_2: function (a) { return [Math.cos(a[0]), Math.cos(a[1])]; },\n        cos_3: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\n        cos_4: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\n        sin_1: function (a) { return Math.sin(a); },\n        sin_2: function (a) { return [Math.sin(a[0]), Math.sin(a[1])]; },\n        sin_3: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\n        sin_4: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\n        tan_1: function (a) { return Math.tan(a); },\n        tan_2: function (a) { return [Math.tan(a[0]), Math.tan(a[1])]; },\n        tan_3: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\n        tan_4: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\n        acos_1: function (a) { return Math.acos(a); },\n        acos_2: function (a) { return [Math.acos(a[0]), Math.acos(a[1])]; },\n        acos_3: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\n        acos_4: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\n        asin_1: function (a) { return Math.asin(a); },\n        asin_2: function (a) { return [Math.asin(a[0]), Math.asin(a[1])]; },\n        asin_3: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\n        asin_4: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\n        atan_1: function (a) { return Math.atan(a); },\n        atan_2: function (a) { return [Math.atan(a[0]), Math.atan(a[1])]; },\n        atan_3: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\n        atan_4: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\n        cosh_1: function (a) { return Math.cosh(a); },\n        cosh_2: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\n        cosh_3: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\n        cosh_4: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\n        sinh_1: function (a) { return Math.sinh(a); },\n        sinh_2: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\n        sinh_3: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\n        sinh_4: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\n        tanh_1: function (a) { return Math.tanh(a); },\n        tanh_2: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\n        tanh_3: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\n        tanh_4: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\n        acosh_1: function (a) { return Math.acosh(a); },\n        acosh_2: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\n        acosh_3: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\n        acosh_4: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\n        asinh_1: function (a) { return Math.asinh(a); },\n        asinh_2: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\n        asinh_3: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\n        asinh_4: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\n        atanh_1: function (a) { return Math.atanh(a); },\n        atanh_2: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\n        atanh_3: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\n        atanh_4: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\n        exp_1: function (a) { return Math.exp(a); },\n        exp_2: function (a) { return [Math.exp(a[0]), Math.exp(a[1])]; },\n        exp_3: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\n        exp_4: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\n        log_1: function (a) { return Math.log(a); },\n        log_2: function (a) { return [Math.log(a[0]), Math.log(a[1])]; },\n        log_3: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\n        log_4: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\n        log2_1: function (a) { return Math.log2(a); },\n        log2_2: function (a) { return [Math.log2(a[0]), Math.log2(a[1])]; },\n        log2_3: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\n        log2_4: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\n        log10_1: function (a) { return Math.log10(a); },\n        log10_2: function (a) { return [Math.log10(a[0]), Math.log10(a[1])]; },\n        log10_3: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\n        log10_4: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\n        sqrt_1: function (a) { return Math.sqrt(a); },\n        sqrt_2: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\n        sqrt_3: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\n        sqrt_4: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\n        int_2_1_1: function (a, b) { return [a | 0, b | 0]; },\n        int_2_2: function (a) { return [a[0] | 0, a[1] | 0]; },\n        int_3_1_1_1: function (a, b, c) { return [a | 0, b | 0, c | 0]; },\n        int_3_2_1: function (a, b) { return [a[0] | 0, a[1] | 0, b | 0]; },\n        int_3_1_2: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0]; },\n        int_3_3: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0]; },\n        int_4_1_1_1_1: function (a, b, c, d) { return [a | 0, b | 0, c | 0, d | 0]; },\n        int_4_2_1_1: function (a, b, c) { return [a[0] | 0, a[1] | 0, b | 0, c | 0]; },\n        int_4_1_2_1: function (a, b, c) { return [a | 0, b[0] | 0, b[1] | 0, c | 0]; },\n        int_4_1_1_2: function (a, b, c) { return [a | 0, b | 0, c[0] | 0, c[1] | 0]; },\n        int_4_3_1: function (a, b) { return [a[0] | 0, a[1] | 0, a[2] | 0, b | 0]; },\n        int_4_1_3: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0, b[2] | 0]; },\n        int_4_2_2: function (a, b) { return [a[0] | 0, a[1] | 0, b[0] | 0, b[1] | 0]; },\n        int_4_4: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0, a[3] | 0]; },\n        float_2_1_1: function (a, b) { return [a, b]; },\n        float_2_2: function (a) { return [a[0], a[1]]; },\n        float_3_1_1_1: function (a, b, c) { return [a, b, c]; },\n        float_3_2_1: function (a, b) { return [a[0], a[1], b]; },\n        float_3_1_2: function (a, b) { return [a, b[0], b[1]]; },\n        float_3_3: function (a) { return [a[0], a[1], a[2]]; },\n        float_4_1_1_1_1: function (a, b, c, d) { return [a, b, c, d]; },\n        float_4_2_1_1: function (a, b, c) { return [a[0], a[1], b, c]; },\n        float_4_1_2_1: function (a, b, c) { return [a, b[0], b[1], c]; },\n        float_4_1_1_2: function (a, b, c) { return [a, b, c[0], c[1]]; },\n        float_4_3_1: function (a, b) { return [a[0], a[1], a[2], b]; },\n        float_4_1_3: function (a, b) { return [a, b[0], b[1], b[2]]; },\n        float_4_2_2: function (a, b) { return [a[0], a[1], b[0], b[1]]; },\n        float_4_4: function (a) { return [a[0], a[1], a[2], a[3]]; },\n        uint_2_1_1: function (a, b) { return [a >>> 0, b >>> 0]; },\n        uint_2_2: function (a) { return [a[0] >>> 0, a[1] >>> 0]; },\n        uint_3_1_1_1: function (a, b, c) { return [a >>> 0, b >>> 0, c >>> 0]; },\n        uint_3_2_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0]; },\n        uint_3_1_2: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0]; },\n        uint_3_3: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0]; },\n        uint_4_1_1_1_1: function (a, b, c, d) { return [a >>> 0, b >>> 0, c >>> 0, d >>> 0]; },\n        uint_4_2_1_1: function (a, b, c) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0, c >>> 0]; },\n        uint_4_1_2_1: function (a, b, c) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, c >>> 0]; },\n        uint_4_1_1_2: function (a, b, c) { return [a >>> 0, b >>> 0, c[0] >>> 0, c[1] >>> 0]; },\n        uint_4_3_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, b >>> 0]; },\n        uint_4_1_3: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, b[2] >>> 0]; },\n        uint_4_2_2: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b[0] >>> 0, b[1] >>> 0]; },\n        uint_4_4: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, a[3] >>> 0]; },\n    };\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/std___std_all.js\", deps, func);\n\tvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.time = exports.__deepClone = exports.__makeMap = exports.map = exports.array = exports.sleep = exports.hashableTypeToString = exports.globalVarGet = exports.globalVarInit = exports.compute = exports.statGraph = exports.stat = exports.flush = exports.print = exports.getShadeupLocalContext = exports.Mesh = exports.__dummy = void 0;\n    /**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n    exports.__dummy = 1;\n    // import { Mesh } from '/_std/mesh';\n    var Mesh = /** @class */ (function () {\n        function Mesh(prefils) {\n            this.vertices = [];\n            this.triangles = [];\n            this.normals = [];\n            this.tangents = [];\n            this.bitangents = [];\n            this.uvs = [];\n            this.colors = [];\n            this.symbol = Symbol();\n            if (prefils.vertices)\n                this.vertices = prefils.vertices;\n            if (prefils.triangles)\n                this.triangles = prefils.triangles;\n            if (prefils.normals)\n                this.normals = prefils.normals;\n            if (prefils.tangents)\n                this.tangents = prefils.tangents;\n            if (prefils.bitangents)\n                this.bitangents = prefils.bitangents;\n            if (prefils.uvs)\n                this.uvs = prefils.uvs;\n            if (prefils.colors)\n                this.colors = prefils.colors;\n        }\n        Mesh.prototype.getVertices = function () {\n            return this.vertices;\n        };\n        Mesh.prototype.getTriangles = function () {\n            return this.triangles;\n        };\n        Mesh.prototype.getNormals = function () {\n            return this.normals;\n        };\n        Mesh.prototype.getTangents = function () {\n            return this.tangents;\n        };\n        Mesh.prototype.getBitangents = function () {\n            return this.bitangents;\n        };\n        Mesh.prototype.getUVs = function () {\n            return this.uvs;\n        };\n        Mesh.prototype.getColors = function () {\n            return this.colors;\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), Mesh)\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n    /**\n     * Prints a set of value(s) to the console. Values will be converted to strings before printing.\n     *\n     * @param args Any number of values to print to the console\n     */\n    function print() {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        console.log.apply(console, args);\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_print'] === 'function') {\n            (_a = (0, exports.getShadeupLocalContext)())['__shadeup_print'].apply(_a, args);\n        }\n    }\n    exports.print = print;\n    /**\n     * Flushes (executes) all queued compute or draw calls\n     * @shadeup=tag(async) @shadeup=noemit_gpu\n     */\n    function flush() {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!(typeof (0, exports.getShadeupLocalContext)()['flushAdapter'] === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, (0, exports.getShadeupLocalContext)()['flushAdapter']()];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    }\n    exports.flush = flush;\n    /**\n     * Displays a single value in the stats panel at the top right\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any value\n     */\n    function stat(name, value) {\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_stat'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_stat'](name, value);\n        }\n    }\n    exports.stat = stat;\n    /**\n     * Display a graph of a numeric value over time\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any numeric value\n     * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\n     */\n    function statGraph(name, value, sampleRate) {\n        if (sampleRate === void 0) { sampleRate = 1; }\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'](name, value);\n        }\n    }\n    exports.statGraph = statGraph;\n    function infer(fn) {\n        return fn;\n    }\n    // export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\n    // export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\n    // export function draw(\n    // \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\n    // \tsecond?: shader<ShaderInput, ShaderOutput>,\n    // \tthird?: shader<ShaderInput, ShaderOutput>\n    // ) {\n    // \tif ('vertices' in first && second && third) {\n    // \t\t__shadeup_dispatch_draw_geometry(first, second, third);\n    // \t} else if (first && !second && !third) {\n    // \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n    // \t}\n    // }\n    // draw(makeShader('', (a, b) => {}));\n    // drawAlt(\n    // \tmakeShader(\n    // \t\t'000004808000091289258019303699031390005438610',\n    // \t\t/**@shadeup=shader*/ (__in, __out) => {\n    // \t\t\t__out.color;\n    // \t\t}\n    // \t)\n    // );\n    // /**\n    //  *\n    //  */\n    function compute(workgroups, computeShader) {\n        (0, exports.getShadeupLocalContext)().__shadeup_dispatch_compute(workgroups, computeShader);\n    }\n    exports.compute = compute;\n    // function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\n    // type x<T> = { x: T };\n    // function makeTex<T>(a: T): x<T> {\n    // \treturn { x: a };\n    // }\n    // draw({\n    // \tvertex: shader('abc', (__in, __out) => {}),\n    // \tattachments: [\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 })\n    // \t],\n    // \tmesh: new Mesh(),\n    // \tfragment: shader('abc', (__in, __out) => {\n    // \t\t//__out.attachment0\n    // \t})\n    // });\n    function globalVarInit(fileName, varName, initFn, getterFn) {\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals']) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'] = {};\n        }\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName] = {};\n        }\n        // Disable caching for now\n        var cache = false;\n        if (!(varName in (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) || !cache) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName] = initFn();\n        }\n        (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName];\n    }\n    exports.globalVarInit = globalVarInit;\n    function globalVarGet(fileName, varName) {\n        if (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\n            return (0, exports.getShadeupLocalContext)()[varName];\n        }\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName]();\n    }\n    exports.globalVarGet = globalVarGet;\n    function hashableTypeToString(k) {\n        if (typeof k == 'number') {\n            return k.toString();\n        }\n        else if (typeof k == 'object') {\n            if (Array.isArray(k)) {\n                return k.map(hashableTypeToString).join(',');\n            }\n            else {\n                return k.toString();\n            }\n        }\n        else {\n            return k.toString();\n        }\n    }\n    exports.hashableTypeToString = hashableTypeToString;\n    Array.prototype.len = function () {\n        return this.length;\n    };\n    Array.prototype.last = function () {\n        return this[this.length - 1];\n    };\n    Array.prototype.first = function () {\n        return this[0];\n    };\n    Array.prototype.append = function (items) {\n        for (var i = 0; i < items.length; i++) {\n            this.push(items[i]);\n        }\n    };\n    Array.prototype.remove = function (index) {\n        this.splice(index, 1);\n    };\n    Array.prototype.__index = function (index) {\n        return this[index];\n    };\n    Array.prototype.__index_assign = function (index, value) {\n        this[index] = value;\n    };\n    Array.prototype.__index_assign_op = function (op_fn, index, value) {\n        this[index] = op_fn(this[index], value);\n    };\n    /** @shadeup=tag(async) */\n    function sleep(seconds) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })];\n            });\n        });\n    }\n    exports.sleep = sleep;\n    function array(count, initializer) {\n        if (initializer === void 0) { initializer = null; }\n        var arr = new Array(count);\n        if (initializer) {\n            for (var i = 0; i < count; i++) {\n                arr[i] = initializer;\n            }\n        }\n        return arr;\n    }\n    exports.array = array;\n    var map = /** @class */ (function () {\n        function map(entries) {\n            this.pairs = new Map();\n            if (entries)\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                    var e = entries_1[_i];\n                    this.__index_assign(e[0], e[1]);\n                }\n        }\n        map.prototype.__index = function (key) {\n            if (!this.pairs.has(hashableTypeToString(key))) {\n                throw new Error('Key not found: ' + hashableTypeToString(key));\n            }\n            return this.pairs.get(hashableTypeToString(key))[1];\n        };\n        map.prototype.__index_assign = function (key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, value]);\n        };\n        map.prototype.__index_assign_op = function (op_fn, key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\n        };\n        map.prototype.delete = function (key) {\n            this.pairs.delete(hashableTypeToString(key));\n        };\n        map.prototype.has = function (key) {\n            return this.pairs.has(hashableTypeToString(key));\n        };\n        map.prototype.keys = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[0]; });\n        };\n        map.prototype.values = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[1]; });\n        };\n        map.new = function (entries) {\n            return new map(entries);\n        };\n        map.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_8545_map\\\",\\\"fields\\\":[[\\\"pairs\\\",null]]}\");\n        };\n        return map;\n    }());\n    exports.map = map;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_8545_map\\\",\\\"fields\\\":[[\\\"pairs\\\",null]]}\"), map)\n    function __makeMap(initial) {\n        return new map(Object.entries(initial));\n    }\n    exports.__makeMap = __makeMap;\n    function __deepClone(value) {\n        if (typeof value == 'object') {\n            if (Array.isArray(value)) {\n                var res = new Array(value.length);\n                for (var i = 0; i < value.length; i++) {\n                    res[i] = __deepClone(value[i]);\n                }\n                return res;\n            }\n            else {\n                if (value && typeof value.clone == 'function') {\n                    return value.clone();\n                }\n                else {\n                    return value;\n                }\n            }\n        }\n        else {\n            return value;\n        }\n    }\n    exports.__deepClone = __deepClone;\n    var time = /** @class */ (function () {\n        function time() {\n        }\n        /** Saves the current time with a key of name */\n        time.start = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_start');\n        };\n        /** Returns the difference in milliseconds between a start with the same key */\n        time.stop = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_end');\n            var res = performance.measure((name !== null && name !== void 0 ? name : '_default') + '_diff', (name !== null && name !== void 0 ? name : '_default') + '_start', (name !== null && name !== void 0 ? name : '_default') + '_end');\n            return res.duration;\n        };\n        /**\n         * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\n         *\n         * This uses performance.now() under the hood:\n         * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\n         */\n        time.now = function () {\n            return performance.now();\n        };\n        time.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_10778_time\\\",\\\"fields\\\":[]}\");\n        };\n        return time;\n    }());\n    exports.time = time;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_10778_time\\\",\\\"fields\\\":[]}\"), time)\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/std.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\ndefine([\"require\", \"exports\", \"/_std/ui\", \"/_std/mesh\", \"/_std/sdf\", \"/_std/geo\", \"/_std/native\"], function (require, exports, ui_1, mesh_1, sdf_1, geo_1, native_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.geo = exports.sdf = exports.Mesh = exports.mesh = exports.ui = void 0;\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\n    Object.defineProperty(exports, \"mesh\", { enumerable: true, get: function () { return mesh_1.mesh; } });\n    Object.defineProperty(exports, \"Mesh\", { enumerable: true, get: function () { return mesh_1.Mesh; } });\n    Object.defineProperty(exports, \"sdf\", { enumerable: true, get: function () { return sdf_1.sdf; } });\n    Object.defineProperty(exports, \"geo\", { enumerable: true, get: function () { return geo_1.geo; } });\n    __exportStar(native_1, exports);\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/ui.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.ui = void 0;\n    var ui;\n    (function (ui) {\n        function puck(position) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position);\n        }\n        ui.puck = puck;\n        function draggable(position, radius) {\n            if (radius === void 0) { radius = 10; }\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position, radius, true);\n        }\n        ui.draggable = draggable;\n        function textbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('textbox', value);\n        }\n        ui.textbox = textbox;\n        function slider(value, min, max) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_SLIDER(value, { min: min, max: max });\n        }\n        ui.slider = slider;\n        function label(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('label', text);\n        }\n        ui.label = label;\n        function checkbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('checkbox', value);\n        }\n        ui.checkbox = checkbox;\n        function combo(value, options) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('combo', value, { options: options });\n        }\n        ui.combo = combo;\n        function group(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('group', text);\n        }\n        ui.group = group;\n        function button(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('button', false, { text: text });\n        }\n        ui.button = button;\n        function pop() {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('pop');\n        }\n        ui.pop = pop;\n    })(ui = exports.ui || (exports.ui = {}));\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/native.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/common\", \"/_std/context\"], function (require, exports, common_1, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.KeyboardInputState = exports.MouseInputState = exports.FrameContext = exports.shadeupMakeTextureFromUrl = void 0;\n    function shadeupMakeTextureFromUrl(url) {\n        return (0, context_1.getShadeupLocalContext)()['shadeupMakeTextureFromUrlNative'](url);\n    }\n    exports.shadeupMakeTextureFromUrl = shadeupMakeTextureFromUrl;\n    var FrameContext = /** @class */ (function () {\n        function FrameContext() {\n            /** Mouse/touch screen input state for this frame */\n            this.mouse = new MouseInputState();\n            /** Keyboard input state for this frame */\n            this.keyboard = new KeyboardInputState();\n            /** Controllable camera (Hold right click and use WASD to move) */\n            this.camera = new common_1.Camera();\n            this.camera2d = new common_1.Camera2d();\n        }\n        FrameContext.prototype.configureCamera = function (options) { };\n        /**\n         * Use external values from the host JavaScript environment.\n         */\n        FrameContext.prototype.input = function (key, defaultValue) {\n            return defaultValue;\n        };\n        /**\n         * Send values to the host JavaScript environment.\n         */\n        FrameContext.prototype.output = function (key, value) { };\n        FrameContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_387_FrameContext\\\",\\\"fields\\\":[[\\\"deltaTime\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"time\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"screenSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frame\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"mouse\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}],[\\\"keyboard\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}],[\\\"camera\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}],[\\\"camera2d\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}]]}\");\n        };\n        return FrameContext;\n    }());\n    exports.FrameContext = FrameContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_387_FrameContext\\\",\\\"fields\\\":[[\\\"deltaTime\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"time\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"screenSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frame\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"mouse\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}],[\\\"keyboard\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}],[\\\"camera\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}],[\\\"camera2d\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}]]}\"), FrameContext)\n    var MouseInputState = /** @class */ (function () {\n        function MouseInputState() {\n            /** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\n            this.button = [false, false, false];\n            /** Mouse button pressed state for buttons 0-3 (left, middle, right) */\n            this.clicked = [false, false, false];\n        }\n        MouseInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}\");\n        };\n        return MouseInputState;\n    }());\n    exports.MouseInputState = MouseInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}\"), MouseInputState)\n    var KeyboardInputState = /** @class */ (function () {\n        function KeyboardInputState() {\n        }\n        KeyboardInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}\");\n        };\n        return KeyboardInputState;\n    }());\n    exports.KeyboardInputState = KeyboardInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}\"), KeyboardInputState)\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/paint.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.PaintingContext = void 0;\n    var PaintingContext = /** @class */ (function () {\n        function PaintingContext(canvas, gl) {\n            var _this = this;\n            this.markDirtyCallback = function () { };\n            this.__ctx = null;\n            this.__gl = null;\n            this.__offscreen_canvas = null;\n            this.__program = null;\n            this.stagedChanges = false;\n            this.dirty = false;\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.__currentColor = null;\n            this.pointsCounter = 0;\n            this.cacheSize = [0, 0];\n            if (!gl)\n                return;\n            this.__gl = gl;\n            this.__canvas = canvas;\n            this.__offscreen_canvas = document.createElement('canvas');\n            this.__offscreen_canvas.width = canvas.width;\n            this.__offscreen_canvas.height = canvas.height;\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__ctx = this.__offscreen_canvas.getContext('2d', {\n                willReadFrequently: true\n            });\n            this.__offscreen_canvas.style.position = 'absolute';\n            this.__offscreen_canvas.style.zIndex = '10';\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__setColor([0, 0, 0, 1]);\n            gl.addEventListener('context', function (toContext) {\n                if (toContext == 'draw') {\n                    _this.flush();\n                }\n            });\n            gl.addEventListener('flush', function () {\n                _this.flush();\n            });\n        }\n        PaintingContext.prototype.flush = function () {\n            if (!this.__gl)\n                return;\n            if (!this.__canvas)\n                return;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.stagedChanges)\n                return;\n            if (this.fastPoints)\n                this.flushPoints();\n            this.__gl.drawImage(this.__offscreen_canvas);\n            this.stagedChanges = false;\n            if (this.__offscreen_canvas.width != this.__canvas.width ||\n                this.__offscreen_canvas.height != this.__canvas.height) {\n                this.__offscreen_canvas.width = this.__canvas.width;\n                this.__offscreen_canvas.height = this.__canvas.height;\n            }\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.__beforeDraw = function () {\n            var _a;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.__ctx)\n                return;\n            if (!this.__canvas)\n                return;\n            this.markDirtyCallback();\n            (_a = this.__gl) === null || _a === void 0 ? void 0 : _a.activatePaintContext();\n            if (!this.stagedChanges) {\n                this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n                this.__ctx.drawImage(this.__canvas, 0, 0);\n                var color = this.__currentColor;\n                this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n                this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            }\n        };\n        PaintingContext.prototype.__afterDraw = function () {\n            var gl = this.__gl;\n            this.dirty = true;\n            this.stagedChanges = true;\n        };\n        PaintingContext.prototype.__setColor = function (color) {\n            if (!this.__ctx || !color)\n                return;\n            if (this.__currentColor &&\n                this.__currentColor[0] == color[0] &&\n                this.__currentColor[1] == color[1] &&\n                this.__currentColor[2] == color[2] &&\n                this.__currentColor[3] == color[3])\n                return;\n            this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__currentColor = [color[0], color[1], color[2], color[3]];\n        };\n        PaintingContext.prototype.fillRect = function (pos, size, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillCircle = function (pos, radius, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillArc = function (pos, radius, startAngle, endAngle, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.line = function (pos1, pos2, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos1[0], pos1[1]);\n            this.__ctx.lineTo(pos2[0], pos2[1]);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.circle = function (pos, radius, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.arc = function (pos, radius, startAngle, endAngle, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.text = function (pos, text, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillText(text, pos[0], pos[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.startPath = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.lineTo = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.strokePath = function (color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n            this.__setColor(color);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillPath = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__setColor(color);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.setStrokeWidth = function (width) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n        };\n        PaintingContext.prototype.setFont = function (font) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = font;\n        };\n        PaintingContext.prototype.setFontSize = function (size) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = \"\".concat(size, \"px \").concat(this.__ctx.font.split(' ').slice(1).join(' '));\n        };\n        PaintingContext.prototype.setTextAlign = function (align) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textAlign = align;\n        };\n        PaintingContext.prototype.setTextBaseline = function (baseline) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textBaseline = baseline;\n        };\n        PaintingContext.prototype.setLineCap = function (cap) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineCap = cap;\n        };\n        PaintingContext.prototype.setLineJoin = function (join) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineJoin = join;\n        };\n        PaintingContext.prototype.setMiterLimit = function (limit) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.miterLimit = limit;\n        };\n        PaintingContext.prototype.setShadowColor = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowColor = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n        };\n        PaintingContext.prototype.setShadowBlur = function (blur) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowBlur = blur;\n        };\n        PaintingContext.prototype.setShadowOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowOffsetX = offset[0];\n            this.__ctx.shadowOffsetY = offset[1];\n        };\n        PaintingContext.prototype.setGlobalAlpha = function (alpha) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalAlpha = alpha;\n        };\n        PaintingContext.prototype.setGlobalCompositeOperation = function (op) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalCompositeOperation = op;\n        };\n        PaintingContext.prototype.setImageSmoothingEnabled = function (enabled) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingEnabled = enabled;\n        };\n        PaintingContext.prototype.setImageSmoothingQuality = function (quality) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingQuality = quality;\n        };\n        PaintingContext.prototype.setLineDash = function (dash) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setLineDash(dash);\n        };\n        PaintingContext.prototype.setLineDashOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineDashOffset = offset;\n        };\n        PaintingContext.prototype.setTransform = function (a, b, c, d, e, f) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setTransform(a, b, c, d, e, f);\n        };\n        PaintingContext.prototype.resetTransform = function () {\n            if (!this.__ctx)\n                return;\n            this.__ctx.resetTransform();\n        };\n        PaintingContext.prototype.scale = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.scale(v[0], v[1]);\n        };\n        PaintingContext.prototype.rotate = function (angle) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.rotate(angle);\n        };\n        PaintingContext.prototype.translate = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.translate(v[0], v[1]);\n        };\n        PaintingContext.prototype.flushPoints = function () {\n            if (!this.__ctx)\n                return;\n            if (!this.fastPoints)\n                return;\n            if (!this.fastPointsBuffer)\n                return;\n            this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.point = function (pos, color) {\n            if (!this.__ctx)\n                return;\n            this.pointsCounter++;\n            this.__beforeDraw();\n            if (this.pointsCounter > 10) {\n                if (!this.fastPoints) {\n                    this.fastPoints = true;\n                    this.cacheSize = [this.__offscreen_canvas.width, this.__offscreen_canvas.height];\n                    this.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\n                }\n                if (!this.fastPointsBuffer)\n                    return;\n                var x = Math.floor(pos[0]);\n                var y = Math.floor(pos[1]);\n                var index = (y * this.cacheSize[0] + x) * 4;\n                if (!color) {\n                    color = this.__currentColor;\n                }\n                var oldColorx = this.fastPointsBuffer.data[index] / 255;\n                var oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n                var oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n                var oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n                this.fastPointsBuffer.data[index] =\n                    color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 1] =\n                    color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 2] =\n                    color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\n            }\n            else {\n                this.__setColor(color);\n                this.__ctx.fillRect(pos[0], pos[1], 1, 1);\n            }\n            this.__afterDraw();\n        };\n        PaintingContext.prototype.vector = function (pos, dir, color, width) {\n            if (color === void 0) { color = [0.9803921568627451, 0.8, 0.08235294117647059, 1]; }\n            if (width === void 0) { width = 4; }\n            if (!this.__ctx || (dir[0] == 0 && dir[1] == 0))\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            this.__ctx.moveTo(pos[0], pos[1]);\n            this.__ctx.lineCap = 'round';\n            this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.stroke();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            // Arrows\n            var arrowSize = 20;\n            var arrowAngle = Math.PI / 5;\n            var dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n            var arrow1 = [\n                Math.cos(dirAngle + arrowAngle) * arrowSize,\n                Math.sin(dirAngle + arrowAngle) * arrowSize\n            ];\n            var arrow2 = [\n                Math.cos(dirAngle - arrowAngle) * arrowSize,\n                Math.sin(dirAngle - arrowAngle) * arrowSize\n            ];\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.grid = function (center, count, gap, color, width) {\n            if (color === void 0) { color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1]; }\n            if (width === void 0) { width = 2; }\n            if (!this.__ctx)\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            var start = [\n                center[0] - (count[0] / 2) * gap[0],\n                center[1] - (count[1] / 2) * gap[1]\n            ];\n            for (var i = 0; i <= count[0]; i++) {\n                this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n                this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n            }\n            for (var i = 0; i <= count[1]; i++) {\n                this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n                this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n            }\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}\");\n        };\n        return PaintingContext;\n    }());\n    exports.PaintingContext = PaintingContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}\"), PaintingContext)\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/buffer.js\", deps, func);\n\tvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\", \"/_std/context\", \"/std_math\"], function (require, exports, context_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.buffer = exports.buffer_internal = void 0;\n    var __ = { intifyVector: std_math_1.intifyVector };\n    var buffer_internal = /** @class */ (function () {\n        function buffer_internal(size, typeName, structure) {\n            var _this = this;\n            this.__opaque_buffer = true;\n            this.structArray = null;\n            this.floatArray = null;\n            this.intArray = null;\n            this.uintArray = null;\n            this.arrayBuffer = null;\n            this.vectorSize = 0;\n            this.platformPayload = null;\n            this.adapter = null;\n            this.dirty = false;\n            this.pendingWrites = 0;\n            this.cpuReadDirty = false;\n            this.cpuWriteDirty = false;\n            this.elementCount = 0;\n            this.elementBytes = 0;\n            this.structured = false;\n            this.watchMutation = false;\n            this.symbol = Symbol();\n            this.adapter = (0, context_1.getShadeupLocalContext)().shadeupGetGraphicsAdapter();\n            this.typeName = typeName;\n            if (structure) {\n                if (structure.name && !structure.name.startsWith('atomic')) {\n                    this.typeName = structure.name;\n                }\n            }\n            this.elementCount = size;\n            this.elementBytes = 4;\n            if (typeName == 'float4' ||\n                typeName == 'float3' ||\n                typeName == 'float2' ||\n                typeName == 'float') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.floatArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.floatArray[index] = value;\n                };\n                if (typeName == 'float4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float4)(_this.floatArray[index * 4], _this.floatArray[index * 4 + 1], _this.floatArray[index * 4 + 2], _this.floatArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 4] = value[0];\n                        _this.floatArray[index * 4 + 1] = value[1];\n                        _this.floatArray[index * 4 + 2] = value[2];\n                        _this.floatArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'float3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float3)(_this.floatArray[index * 3], _this.floatArray[index * 3 + 1], _this.floatArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 3] = value[0];\n                        _this.floatArray[index * 3 + 1] = value[1];\n                        _this.floatArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'float2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float2)(_this.floatArray[index * 2], _this.floatArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 2] = value[0];\n                        _this.floatArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.floatArray = new Float32Array(size * this.vectorSize);\n                this.arrayBuffer = this.floatArray.buffer;\n            }\n            else if (typeName == 'int4' ||\n                typeName == 'int3' ||\n                typeName == 'int2' ||\n                typeName == 'int') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.intArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.intArray[index] = value;\n                };\n                if (typeName == 'int4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int4)(_this.intArray[index * 4], _this.intArray[index * 4 + 1], _this.intArray[index * 4 + 2], _this.intArray[index * 4 + 3]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 4] = value[0];\n                        _this.intArray[index * 4 + 1] = value[1];\n                        _this.intArray[index * 4 + 2] = value[2];\n                        _this.intArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'int3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int3)(_this.intArray[index * 3], _this.intArray[index * 3 + 1], _this.intArray[index * 3 + 2]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 3] = value[0];\n                        _this.intArray[index * 3 + 1] = value[1];\n                        _this.intArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'int2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int2)(_this.intArray[index * 2], _this.intArray[index * 2 + 1]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 2] = value[0];\n                        _this.intArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.intArray = new Int32Array(size * this.vectorSize);\n                this.arrayBuffer = this.intArray.buffer;\n            }\n            else if (typeName == 'uint4' ||\n                typeName == 'uint3' ||\n                typeName == 'uint2' ||\n                typeName == 'uint') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.uintArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.uintArray[index] = value;\n                };\n                if (typeName == 'uint4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint4)(_this.uintArray[index * 4], _this.uintArray[index * 4 + 1], _this.uintArray[index * 4 + 2], _this.uintArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 4] = value[0];\n                        _this.uintArray[index * 4 + 1] = value[1];\n                        _this.uintArray[index * 4 + 2] = value[2];\n                        _this.uintArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'uint3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint3)(_this.uintArray[index * 3], _this.uintArray[index * 3 + 1], _this.uintArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 3] = value[0];\n                        _this.uintArray[index * 3 + 1] = value[1];\n                        _this.uintArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'uint2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint2)(_this.uintArray[index * 2], _this.uintArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 2] = value[0];\n                        _this.uintArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.uintArray = new Uint32Array(size * this.vectorSize);\n                this.arrayBuffer = this.uintArray.buffer;\n            }\n            else {\n                this.structured = true;\n                if (typeName.startsWith('atomic<')) {\n                    // this.structArray = new Array<T>(size);\n                    this.arrayBuffer = new ArrayBuffer(size * 4);\n                    this.watchMutation = true;\n                    this.vectorSize = 1;\n                    this.elementBytes = 4;\n                    this.elementCount = size;\n                    for (var i = 0; i < size; i++) {\n                        // this.structArray[i] = atomic(0) as T;\n                    }\n                    if (typeName == 'atomic<uint>') {\n                        this.uintArray = new Uint32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.uintArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.uintArray[index] = value.__value;\n                        };\n                    }\n                    else {\n                        this.intArray = new Int32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.intArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.intArray[index] = value.__value;\n                        };\n                    }\n                }\n                else {\n                    var elementSize_1 = this.adapter.getValueSize(structure);\n                    var realSize = elementSize_1 * size;\n                    this.elementCount = size;\n                    this.elementBytes = elementSize_1;\n                    this.arrayBuffer = new ArrayBuffer(realSize);\n                    this.fastIndex = function (index) {\n                        return _this.adapter.readStructuredBuffer(structure, _this.arrayBuffer, index * elementSize_1);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.cpuWriteDirty = true;\n                        _this.adapter.writeStructuredBuffer(structure, value, _this.arrayBuffer, index * (elementSize_1 / 4));\n                    };\n                }\n            }\n            this.__index = function (index) {\n                // await this.download();\n                if (_this.watchMutation) {\n                    var data = _this.fastIndex(index);\n                    data.$mutate = function (to) {\n                        _this.cpuWriteDirty = true;\n                        if (to !== undefined) {\n                            if (_this.intArray) {\n                                _this.intArray[index] = to;\n                            }\n                            else {\n                                _this.uintArray[index] = to;\n                            }\n                        }\n                    };\n                    return data;\n                }\n                else {\n                    return _this.fastIndex(index);\n                }\n            };\n            this.__index_assign = function (index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, value);\n            };\n            this.__index_assign_op = function (op_fn, index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, op_fn(_this.fastIndex(index), value));\n            };\n        }\n        buffer_internal.prototype.destroy = function () {\n            this.adapter.destroyBuffer(this);\n        };\n        buffer_internal.prototype.__index = function (index) {\n            // this.download();\n            // return this.fastIndex(index);\n            return null;\n        };\n        buffer_internal.prototype.__index_assign = function (index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, value);\n        };\n        buffer_internal.prototype.__index_assign_op = function (op_fn, index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\n        };\n        buffer_internal.prototype.len = function () {\n            return this.elementCount;\n        };\n        /**\n         * Returns the underlying cpu buffer as a typed array.\n         *\n         * > [!NOTE]\n         * > This is considerably faster than using the raw index [] operator.\n         *\n         * > [!NOTE]\n         * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\n         *\n         * ```shadeup\n         * let buf = buffer<uint>();\n         * let data = buf.getData();\n         *\n         * for (let i = 0; i < data.length; i += 4) {\n         * \t// Do something with data[i]\n         * }\n         * ```\n         */\n        buffer_internal.prototype.getData = function () {\n            var _a, _b, _c;\n            if (this.structured) {\n                return this.structArray;\n            }\n            else {\n                return (_c = (_b = (_a = this.floatArray) !== null && _a !== void 0 ? _a : this.intArray) !== null && _b !== void 0 ? _b : this.uintArray) !== null && _c !== void 0 ? _c : new Uint8Array(0);\n            }\n        };\n        buffer_internal.prototype.write = function (other) {\n            if (!this.adapter)\n                return;\n            this.adapter.copyBufferToBuffer(other, this);\n        };\n        /** @shadeup=tag(async) @shadeup=noemit_gpu */\n        buffer_internal.prototype.download = function () {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!this.adapter)\n                                return [2 /*return*/];\n                            if (this.pendingWrites > 0) {\n                                (0, context_1.getShadeupLocalContext)().flushAdapter();\n                            }\n                            if (!this.cpuReadDirty) return [3 /*break*/, 2];\n                            this.cpuReadDirty = false;\n                            return [4 /*yield*/, this.adapter.downloadBuffer(this)];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        buffer_internal.prototype.downloadAsync = function () {\n            return this['download']();\n        };\n        /** @shadeup=noemit_gpu */\n        buffer_internal.prototype.upload = function () {\n            if (!this.adapter)\n                return;\n            if (this.cpuWriteDirty) {\n                this.cpuWriteDirty = false;\n                this.adapter.uploadBuffer(this);\n            }\n        };\n        buffer_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\",\\\"fields\\\":[[\\\"__opaque_buffer\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"structArray\\\",null],[\\\"floatArray\\\",null],[\\\"intArray\\\",null],[\\\"uintArray\\\",null],[\\\"arrayBuffer\\\",null],[\\\"vectorSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"typeName\\\",null],[\\\"platformPayload\\\",null],[\\\"adapter\\\",null],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pendingWrites\\\",null],[\\\"cpuReadDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"cpuWriteDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"elementCount\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"elementBytes\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"structured\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastIndex\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"fastIndexAssign\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"watchMutation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return buffer_internal;\n    }());\n    exports.buffer_internal = buffer_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\",\\\"fields\\\":[[\\\"__opaque_buffer\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"structArray\\\",null],[\\\"floatArray\\\",null],[\\\"intArray\\\",null],[\\\"uintArray\\\",null],[\\\"arrayBuffer\\\",null],[\\\"vectorSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"typeName\\\",null],[\\\"platformPayload\\\",null],[\\\"adapter\\\",null],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pendingWrites\\\",null],[\\\"cpuReadDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"cpuWriteDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"elementCount\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"elementBytes\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"structured\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastIndex\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"fastIndexAssign\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"watchMutation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), buffer_internal)\n    function buffer(e1, typeName, structure) {\n        if (typeof e1 === 'number') {\n            var size = e1;\n            var buf = new buffer_internal(size, typeName, structure);\n            return buf;\n        }\n        else {\n            var data = e1;\n            var buf = new buffer_internal(data.length, typeName, structure);\n            for (var i = 0; i < data.length; i++) {\n                buf.fastIndexAssign(i, data[i]);\n            }\n            return buf;\n        }\n    }\n    exports.buffer = buffer;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/texture.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.texture3d = exports.texture3d_internal_empty = exports.texture2d = exports.texture2d_internal_empty = void 0;\n    var texture2d_internal_empty = /** @class */ (function () {\n        function texture2d_internal_empty() {\n            this.__opaque_texture2d = true;\n            this.size = [0, 0];\n            this.paint = null;\n        }\n        /** @shadeup=glsl(!texture($self$, $0$)) */\n        texture2d_internal_empty.prototype.__index = function (index) {\n            return null;\n        };\n        texture2d_internal_empty.prototype.__index_assign = function (index, value) {\n            return null;\n        };\n        texture2d_internal_empty.prototype.getFast = function (index) {\n            return null;\n        };\n        texture2d_internal_empty.prototype.setFast = function (index, value) {\n            return null;\n        };\n        /** @shadeup=tag(async) */\n        texture2d_internal_empty.prototype.download = function () { };\n        texture2d_internal_empty.prototype.downloadAsync = function () {\n            return null;\n        };\n        /**\n         * Returns the underlying cpu buffer as a typed array.\n         *\n         * Note that this is considerably faster than using the raw index [] operator.\n         *\n         * ```shadeup\n         * let tex = texture2d<float4>();\n         * let data = tex.getData();\n         *\n         * for (let i = 0; i < data.length; i += 4) {\n         * \tlet r = data[i];\n         * \tlet g = data[i + 1];\n         * \tlet b = data[i + 2];\n         * \tlet a = data[i + 3];\n         *\n         * \t// Do something with the pixel\n         * }\n         * ```\n         */\n        texture2d_internal_empty.prototype.getData = function () {\n            return new Uint32Array(0);\n        };\n        texture2d_internal_empty.prototype.upload = function () { };\n        texture2d_internal_empty.prototype.sample = function (position) { };\n        texture2d_internal_empty.prototype.clear = function (color) {\n            if (color === void 0) { color = 'auto'; }\n        };\n        texture2d_internal_empty.prototype.flush = function () { };\n        /** Release the texture */\n        texture2d_internal_empty.prototype.destroy = function () { };\n        texture2d_internal_empty.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture2d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"paint\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}],[\\\"draw\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawIndexed\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawAdvanced\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawInstanced\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return texture2d_internal_empty;\n    }());\n    exports.texture2d_internal_empty = texture2d_internal_empty;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture2d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"paint\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}],[\\\"draw\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawIndexed\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawAdvanced\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawInstanced\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), texture2d_internal_empty)\n    function texture2d(size, format, type) {\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, format, type);\n    }\n    exports.texture2d = texture2d;\n    var texture3d_internal_empty = /** @class */ (function () {\n        function texture3d_internal_empty() {\n            this.__opaque_texture3d = true;\n            this.size = [0, 0, 0];\n        }\n        /** @shadeup=glsl(!texture($self$, $0$)) */\n        texture3d_internal_empty.prototype.__index = function (index) {\n            return null;\n        };\n        texture3d_internal_empty.prototype.__index_assign = function (index, value) { };\n        texture3d_internal_empty.prototype.sample = function (position) { };\n        texture3d_internal_empty.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture3d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}]]}\");\n        };\n        return texture3d_internal_empty;\n    }());\n    exports.texture3d_internal_empty = texture3d_internal_empty;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture3d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}]]}\"), texture3d_internal_empty)\n    function texture3d(size, type) {\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, type);\n    }\n    exports.texture3d = texture3d;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/drawIndexed.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\", \"/std_math\"], function (require, exports, context_1, buffer_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.computeIndirect = exports.drawAttributes = exports.drawCount = exports.drawAlt2 = exports.drawFullscreen = exports.draw = exports.drawAdvanced = exports.makeShader = exports.ShaderOutput = exports.ShaderInput = exports.shader_start_shd_ = exports.drawIndirect = exports.drawIndexedIndirect = exports.drawInstancedIndexed = exports.drawInstanced = exports.drawIndexed = void 0;\n    function drawIndexed(indexBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexed = drawIndexed;\n    function drawInstanced(mesh, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstanced = drawInstanced;\n    function drawInstancedIndexed(indexBuffer, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstancedIndexed = drawInstancedIndexed;\n    function drawIndexedIndirect(indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed_indirect(indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexedIndirect = drawIndexedIndirect;\n    function drawIndirect(mesh, indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indirect(mesh, indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndirect = drawIndirect;\n    function shader_start_shd_(s, groupSize) {\n        return s;\n    }\n    exports.shader_start_shd_ = shader_start_shd_;\n    /**@shadeup=struct*/\n    var ShaderInput = /** @class */ (function () {\n        function ShaderInput() {\n            /** Interpolated world position (available in fragment, and vertex) */\n            this.position = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated normal (fragment), Source mesh normal (vertex) */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated tangent (fragment), Source mesh tangent (vertex) */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex shader output position */\n            this.clipPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            this.realPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** UV channel 0 input (available in fragment, and vertex) */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Screen position in pixels (available in fragment, and vertex) */\n            this.screen = (0, std_math_1.float2)(0, 0);\n            /** Interpolated vertex color (available in fragment, and vertex)  */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Group ID (available in compute) */\n            this.groupId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Group size (available in compute) */\n            this.groupSize = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Global id (groupId * groupSize + localId) (available in compute) */\n            this.globalId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Local id (available in compute) */\n            this.localId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Instance index (available in fragment, and vertex) */\n            this.instanceIndex = 0;\n            /** Vertex index (available in vertex) */\n            this.vertexIndex = 0;\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderInput.prototype.attr = function (index, interpolation) {\n            return null;\n        };\n        ShaderInput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderInput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"clipPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"realPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"groupId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"groupSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"globalId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"localId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"instanceIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"vertexIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}]]}\");\n        };\n        return ShaderInput;\n    }());\n    exports.ShaderInput = ShaderInput;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderInput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"clipPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"realPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"groupId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"groupSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"globalId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"localId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"instanceIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"vertexIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}]]}\"), ShaderInput)\n    /**@shadeup=struct*/\n    var ShaderOutput = /** @class */ (function () {\n        function ShaderOutput() {\n            /** Vertex output position */\n            this.position = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Vertex output normal */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output tangent */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output bitangent */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** UV channel 0 output */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Pixel color output */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderOutput.prototype.attr = function (index, value, interpolation) { };\n        ShaderOutput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderOutput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\");\n        };\n        return ShaderOutput;\n    }());\n    exports.ShaderOutput = ShaderOutput;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderOutput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\"), ShaderOutput)\n    /** @shadeup=shader */\n    function makeShader(key, fn) {\n        return fn;\n    }\n    exports.makeShader = makeShader;\n    function drawAdvanced(descriptor) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_advanced(descriptor);\n    }\n    exports.drawAdvanced = drawAdvanced;\n    function draw(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.draw = draw;\n    function drawFullscreen(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.drawFullscreen = drawFullscreen;\n    function drawAlt2(fullScreenPixelShader) { }\n    exports.drawAlt2 = drawAlt2;\n    function drawCount(triCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n    }\n    exports.drawCount = drawCount;\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\n    }\n    exports.drawAttributes = drawAttributes;\n    function computeIndirect(indirectBuffer, indirectOffset, computeShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_compute_indirect(indirectBuffer, indirectOffset, computeShader);\n    }\n    exports.computeIndirect = computeIndirect;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/drawAttributes.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\"], function (require, exports, context_1, buffer_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.drawAttributes = void 0;\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\n    }\n    exports.drawAttributes = drawAttributes;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/drawCount.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.drawCount = void 0;\n    function drawCount(triCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n    }\n    exports.drawCount = drawCount;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/physics.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.physics = exports.PhysicsEngine3d = exports.PhysicsEngine2d = exports.PhysicsRigidBody2d = exports.PhysicsRayCastResult2d = exports.PhysicsCollider2d = void 0;\n    var PhysicsCollider2d = /** @class */ (function () {\n        function PhysicsCollider2d(rapier, world, collider) {\n            this.rapier = rapier;\n            this.world = world;\n            this.collider = collider;\n        }\n        PhysicsCollider2d.prototype.setTranslation = function (position) {\n            this.collider.setTranslation(toVec2(position));\n        };\n        PhysicsCollider2d.prototype.setRotation = function (rotation) {\n            this.collider.setRotation(rotation);\n        };\n        PhysicsCollider2d.prototype.setSensor = function (isSensor) {\n            this.collider.setSensor(isSensor);\n        };\n        PhysicsCollider2d.prototype.setCollisionGroups = function (groups) {\n            this.collider.setCollisionGroups(groups);\n        };\n        PhysicsCollider2d.prototype.setCollidesWith = function (groups) {\n            this.collider.setActiveCollisionTypes(groups);\n        };\n        PhysicsCollider2d.prototype.setFriction = function (friction) {\n            this.collider.setFriction(friction);\n        };\n        PhysicsCollider2d.prototype.setRestitution = function (restitution) {\n            this.collider.setRestitution(restitution);\n        };\n        PhysicsCollider2d.prototype.setDensity = function (density) {\n            this.collider.setDensity(density);\n        };\n        PhysicsCollider2d.prototype.setMass = function (mass) {\n            this.collider.setMass(mass);\n        };\n        PhysicsCollider2d.prototype.setRadius = function (radius) {\n            this.collider.setRadius(radius);\n        };\n        PhysicsCollider2d.prototype.setHalfExtents = function (halfExtents) {\n            this.collider.setHalfExtents(toVec2(halfExtents));\n        };\n        PhysicsCollider2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"collider\\\",null]]}\");\n        };\n        return PhysicsCollider2d;\n    }());\n    exports.PhysicsCollider2d = PhysicsCollider2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"collider\\\",null]]}\"), PhysicsCollider2d)\n    function toVec2(v) {\n        return { x: v[0], y: v[1] };\n    }\n    function toVec3(v) {\n        return { x: v[0], y: v[1], z: v[2] };\n    }\n    var PhysicsRayCastResult2d = /** @class */ (function () {\n        function PhysicsRayCastResult2d(rapier, result) {\n            this.rapier = rapier;\n            this.result = result;\n        }\n        PhysicsRayCastResult2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"result\\\",null]]}\");\n        };\n        return PhysicsRayCastResult2d;\n    }());\n    exports.PhysicsRayCastResult2d = PhysicsRayCastResult2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"result\\\",null]]}\"), PhysicsRayCastResult2d)\n    var PhysicsRigidBody2d = /** @class */ (function () {\n        function PhysicsRigidBody2d(rapier, world, body) {\n            this.rapier = rapier;\n            this.world = world;\n            this.body = body;\n        }\n        PhysicsRigidBody2d.prototype.addBallCollider = function (radius) {\n            var colDesc = this.rapier.ColliderDesc.ball(radius);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addBoxCollider = function (halfExtents) {\n            var colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addCapsuleCollider = function (radius, halfHeight) {\n            var colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addTriangleCollider = function (a, b, c) {\n            var colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addConvexCollider = function (points) {\n            var floatarr = new Float32Array(points.length * 2);\n            for (var i = 0; i < points.length; i++) {\n                floatarr[i * 2 + 0] = points[i][0];\n                floatarr[i * 2 + 1] = points[i][1];\n            }\n            var colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\n            if (!colDesc)\n                throw new Error('Failed to create convex hull collider');\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addHeightfieldCollider = function (heights, scale) {\n            var arr = new Float32Array(heights.length);\n            for (var i = 0; i < heights.length; i++) {\n                arr[i] = heights[i];\n            }\n            var colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.setTranslation = function (position) {\n            this.body.setTranslation(toVec2(position), true);\n        };\n        PhysicsRigidBody2d.prototype.setRotation = function (rotation) {\n            this.body.setRotation(rotation, true);\n        };\n        PhysicsRigidBody2d.prototype.setVelocity = function (velocity) {\n            this.body.setLinvel(toVec2(velocity), true);\n        };\n        PhysicsRigidBody2d.prototype.setAngularVelocity = function (velocity) {\n            this.body.setAngvel(velocity, true);\n        };\n        PhysicsRigidBody2d.prototype.addForce = function (force) {\n            this.body.addForce(toVec2(force), true);\n        };\n        PhysicsRigidBody2d.prototype.addForceAtPoint = function (force, point) {\n            this.body.addForceAtPoint(toVec2(force), toVec2(point), true);\n        };\n        PhysicsRigidBody2d.prototype.addTorque = function (torque) {\n            this.body.addTorque(torque, true);\n        };\n        PhysicsRigidBody2d.prototype.setAdditionalMass = function (mass) {\n            this.body.setAdditionalMass(mass, true);\n        };\n        PhysicsRigidBody2d.prototype.setEnabled = function (enabled) {\n            this.body.setEnabled(enabled);\n        };\n        PhysicsRigidBody2d.prototype.sleep = function () {\n            this.body.sleep();\n        };\n        PhysicsRigidBody2d.prototype.wakeUp = function () {\n            this.body.wakeUp();\n        };\n        PhysicsRigidBody2d.prototype.setGravityScale = function (scale) {\n            this.body.setGravityScale(scale, true);\n        };\n        PhysicsRigidBody2d.prototype.setLinearDamping = function (damping) {\n            this.body.setLinearDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.setAngularDamping = function (damping) {\n            this.body.setAngularDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.isSleeping = function () {\n            return this.body.isSleeping();\n        };\n        PhysicsRigidBody2d.prototype.mass = function () {\n            return this.body.mass();\n        };\n        PhysicsRigidBody2d.prototype.translation = function () {\n            var t = this.body.translation();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.rotation = function () {\n            return this.body.rotation();\n        };\n        PhysicsRigidBody2d.prototype.velocity = function () {\n            var t = this.body.linvel();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.angularVelocity = function () {\n            return this.body.angvel();\n        };\n        PhysicsRigidBody2d.prototype.isMoving = function () {\n            return this.body.isMoving();\n        };\n        PhysicsRigidBody2d.prototype.collider = function (index) {\n            var collider = this.body.collider(index);\n            if (!collider)\n                throw new Error('Failed to get collider');\n            return new PhysicsCollider2d(this.rapier, this.world, collider);\n        };\n        PhysicsRigidBody2d.prototype.applyImpulse = function (impulse) {\n            this.body.applyImpulse(toVec2(impulse), true);\n        };\n        PhysicsRigidBody2d.prototype.applyTorqueImpulse = function (impulse) {\n            this.body.applyTorqueImpulse(impulse, true);\n        };\n        PhysicsRigidBody2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"body\\\",null]]}\");\n        };\n        return PhysicsRigidBody2d;\n    }());\n    exports.PhysicsRigidBody2d = PhysicsRigidBody2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"body\\\",null]]}\"), PhysicsRigidBody2d)\n    var PhysicsEngine2d = /** @class */ (function () {\n        function PhysicsEngine2d(rapier) {\n            this.rapier = rapier;\n            this.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\n        }\n        PhysicsEngine2d.prototype.step = function () {\n            this.world.step();\n        };\n        PhysicsEngine2d.prototype.createRigidBody = function (position, rotation, mode) {\n            var rbDesc = mode == 'dynamic'\n                ? this.rapier.RigidBodyDesc.dynamic()\n                : mode == 'fixed'\n                    ? this.rapier.RigidBodyDesc.fixed()\n                    : this.rapier.RigidBodyDesc.dynamic();\n            rbDesc.setTranslation(position[0], position[1]);\n            rbDesc.setRotation(rotation);\n            var rb = this.world.createRigidBody(rbDesc);\n            return new PhysicsRigidBody2d(this.rapier, this.world, rb);\n        };\n        PhysicsEngine2d.prototype.bodies = function () {\n            var bodies = this.world.bodies;\n            var result = [];\n            for (var i = 0; i < bodies.len(); i++) {\n                result.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)));\n            }\n            return result;\n        };\n        PhysicsEngine2d.prototype.castRay = function (start, end, maxi) {\n            var result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\n            if (!result)\n                return null;\n            return new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent());\n        };\n        PhysicsEngine2d.prototype.setGravity = function (gravity) {\n            this.world.gravity = toVec2(gravity);\n        };\n        PhysicsEngine2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null]]}\");\n        };\n        return PhysicsEngine2d;\n    }());\n    exports.PhysicsEngine2d = PhysicsEngine2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null]]}\"), PhysicsEngine2d)\n    var PhysicsEngine3d = /** @class */ (function () {\n        function PhysicsEngine3d() {\n        }\n        PhysicsEngine3d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\",\\\"fields\\\":[]}\");\n        };\n        return PhysicsEngine3d;\n    }());\n    exports.PhysicsEngine3d = PhysicsEngine3d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\",\\\"fields\\\":[]}\"), PhysicsEngine3d)\n    var physics;\n    (function (physics) {\n        function engine2d() {\n            return new PhysicsEngine2d(window.RAPIER_2D);\n        }\n        physics.engine2d = engine2d;\n    })(physics = exports.physics || (exports.physics = {}));\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/context.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.getShadeupLocalContext = void 0;\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/mesh.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/common\"], function (require, exports, __, std_math_1, std___std_all_1, common_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.Model = exports.ModelPart = exports.Material = exports.mesh = exports.Mesh = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var Mesh = /** @class */ (function () {\n        function Mesh(data) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            this.vertices = ((_a = data.vertices) !== null && _a !== void 0 ? _a : []);\n            this.triangles = ((_b = data.triangles) !== null && _b !== void 0 ? _b : []);\n            this.normals = ((_c = data.normals) !== null && _c !== void 0 ? _c : []);\n            this.tangents = ((_d = data.tangents) !== null && _d !== void 0 ? _d : []);\n            this.bitangents = ((_e = data.bitangents) !== null && _e !== void 0 ? _e : []);\n            this.uvs = ((_f = data.uvs) !== null && _f !== void 0 ? _f : []);\n            this.colors = ((_g = data.colors) !== null && _g !== void 0 ? _g : []);\n            this.symbol = ((_h = data.symbol) !== null && _h !== void 0 ? _h : null);\n        }\n        Mesh.prototype.rect = function (size) {\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.quad = function (position, direction, right, size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;\n            var shader_self_temp = this;\n            var up = (0, std_math_1.normalize)((0, std_math_1.cross)(right, direction));\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            var index = (this.vertices.len() | 0);\n            this.vertices.push((_c = (_e = position, _f = (_g = right, _h = (__.FM.negate_1(halfSize[0])), [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_j = up, _k = halfSize[1], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]));\n            this.vertices.push((_l = (_o = position, _p = (_q = right, _r = halfSize[0], [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = (_s = up, _t = halfSize[1], [_s[0] * _t, _s[1] * _t, _s[2] * _t]), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]]));\n            this.vertices.push((_u = (_w = position, _x = (_y = right, _z = halfSize[0], [_y[0] * _z, _y[1] * _z, _y[2] * _z]), [_w[0] + _x[0], _w[1] + _x[1], _w[2] + _x[2]]), _v = (_0 = up, _1 = (__.FM.negate_1(halfSize[1])), [_0[0] * _1, _0[1] * _1, _0[2] * _1]), [_u[0] + _v[0], _u[1] + _v[1], _u[2] + _v[2]]));\n            this.vertices.push((_2 = (_4 = position, _5 = (_6 = right, _7 = (__.FM.negate_1(halfSize[0])), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2]]), _3 = (_8 = up, _9 = (__.FM.negate_1(halfSize[1])), [_8[0] * _9, _8[1] * _9, _8[2] * _9]), [_2[0] + _3[0], _2[1] + _3[1], _2[2] + _3[2]]));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.box = function (size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var shader_self_temp = this;\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b]);\n            var UP = __.makeVector((0 | 0), 1.0, (0 | 0));\n            var DOWN = __.makeVector((0 | 0), (__.FM.negate_1(1.0)), (0 | 0));\n            var LEFT = __.makeVector((__.FM.negate_1(1.0)), (0 | 0), (0 | 0));\n            var RIGHT = __.makeVector(1.0, (0 | 0), (0 | 0));\n            var FORWARD = __.makeVector((0 | 0), (0 | 0), 1.0);\n            var BACK = __.makeVector((0 | 0), (0 | 0), (__.FM.negate_1(1.0)));\n            // Up\n            this.quad((_c = UP, _d = halfSize[1], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), UP, LEFT, __.makeVector(size[0], size[2]));\n            // Down\n            this.quad((_e = DOWN, _f = halfSize[1], [_e[0] * _f, _e[1] * _f, _e[2] * _f]), DOWN, RIGHT, __.makeVector(size[0], size[2]));\n            // Left\n            this.quad((_g = LEFT, _h = halfSize[0], [_g[0] * _h, _g[1] * _h, _g[2] * _h]), LEFT, BACK, __.makeVector(size[2], size[1]));\n            // Right\n            this.quad((_j = RIGHT, _k = halfSize[0], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), RIGHT, FORWARD, __.makeVector(size[2], size[1]));\n            // Forward\n            this.quad((_l = FORWARD, _m = halfSize[2], [_l[0] * _m, _l[1] * _m, _l[2] * _m]), FORWARD, LEFT, __.makeVector(size[0], size[1]));\n            // Back\n            this.quad((_o = BACK, _p = halfSize[2], [_o[0] * _p, _o[1] * _p, _o[2] * _p]), BACK, RIGHT, __.makeVector(size[0], size[1]));\n        };\n        Mesh.prototype.rectAt = function (minPos, maxPos) {\n            var _a, _b;\n            var shader_self_temp = this;\n            this.rect((_a = maxPos, _b = minPos, [_a[0] - _b[0], _a[1] - _b[1]]));\n            this.translate(__.makeVector(minPos, (0 | 0)));\n        };\n        Mesh.prototype.circle = function (pos, radius, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n        };\n        Mesh.prototype.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var verticesPerRing = vertices + (1 | 0);\n            for (var i = (0 | 0); i <= rings; i++) {\n                var y = i / rings;\n                var angleY = y * common_1.PI;\n                var posY = Math.cos(angleY);\n                var radiusY = Math.sin(angleY);\n                for (var j = (0 | 0); j <= vertices; j++) {\n                    var x = j / vertices;\n                    var angleX = x * common_1.PI * (2 | 0);\n                    var posX = Math.cos(angleX);\n                    var posZ = Math.sin(angleX);\n                    this.vertices.push(__.makeVector(posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\n                    this.normals.push((0, std_math_1.normalize)(__.makeVector(posX * radiusY, posY, posZ * radiusY)));\n                    var tangent = (0, std_math_1.normalize)(__.makeVector(posZ, (0 | 0), (__.FM.negate_1(posX))));\n                    var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(this.normals[(this.normals.len() | 0) - (1 | 0)], tangent));\n                    this.tangents.push(tangent);\n                    this.bitangents.push(bitangent);\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < rings; i++) {\n                for (var j = (0 | 0); j < vertices; j++) {\n                    var i0 = i * verticesPerRing + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + verticesPerRing;\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.icoSphere = function (pos, radius, subdivisions) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var t = (1.0 + Math.sqrt(5.0)) / 2.0;\n            var vertices = [__.makeVector((__.FM.negate_1((1 | 0))), t, (0 | 0)), __.makeVector((1 | 0), t, (0 | 0)), __.makeVector((__.FM.negate_1((1 | 0))), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((1 | 0), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), t), __.makeVector((0 | 0), (1 | 0), t), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), (__.FM.negate_1(t))), __.makeVector((0 | 0), (1 | 0), (__.FM.negate_1(t))), __.makeVector(t, (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector(t, (0 | 0), (1 | 0)), __.makeVector((__.FM.negate_1(t)), (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector((__.FM.negate_1(t)), (0 | 0), (1 | 0))];\n            var triangles = [__.intifyVector(__.makeVector((0 | 0), (11 | 0), (5 | 0))), __.intifyVector(__.makeVector((0 | 0), (5 | 0), (1 | 0))), __.intifyVector(__.makeVector((0 | 0), (1 | 0), (7 | 0))), __.intifyVector(__.makeVector((0 | 0), (7 | 0), (10 | 0))), __.intifyVector(__.makeVector((0 | 0), (10 | 0), (11 | 0))), __.intifyVector(__.makeVector((1 | 0), (5 | 0), (9 | 0))), __.intifyVector(__.makeVector((5 | 0), (11 | 0), (4 | 0))), __.intifyVector(__.makeVector((11 | 0), (10 | 0), (2 | 0))), __.intifyVector(__.makeVector((10 | 0), (7 | 0), (6 | 0))), __.intifyVector(__.makeVector((7 | 0), (1 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (9 | 0), (4 | 0))), __.intifyVector(__.makeVector((3 | 0), (4 | 0), (2 | 0))), __.intifyVector(__.makeVector((3 | 0), (2 | 0), (6 | 0))), __.intifyVector(__.makeVector((3 | 0), (6 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (8 | 0), (9 | 0))), __.intifyVector(__.makeVector((4 | 0), (9 | 0), (5 | 0))), __.intifyVector(__.makeVector((2 | 0), (4 | 0), (11 | 0))), __.intifyVector(__.makeVector((6 | 0), (2 | 0), (10 | 0))), __.intifyVector(__.makeVector((8 | 0), (6 | 0), (7 | 0))), __.intifyVector(__.makeVector((9 | 0), (8 | 0), (1 | 0)))];\n            for (var i = (0 | 0); i < (vertices.len() | 0); i++) {\n                this.vertices.push((_a = (0, std_math_1.normalize)(vertices[i]), _b = radius, [_a[0] * _b, _a[1] * _b, _a[2] * _b]));\n            }\n            for (var i = (0 | 0); i < (triangles.len() | 0); i++) {\n                this.triangles.push(index + triangles[i][0]);\n                this.triangles.push(index + triangles[i][1]);\n                this.triangles.push(index + triangles[i][2]);\n            }\n            for (var i = (0 | 0); i < subdivisions; i++) {\n                var newTriangles = [];\n                for (var j = (0 | 0); j < (this.triangles.len() | 0); j = j + (3 | 0)) {\n                    var i0 = this.triangles[j + (0 | 0)];\n                    var i1 = this.triangles[j + (1 | 0)];\n                    var i2 = this.triangles[j + (2 | 0)];\n                    var v0 = this.vertices[i0];\n                    var v1 = this.vertices[i1];\n                    var v2 = this.vertices[i2];\n                    var v3 = (0, std_math_1.normalize)((_c = (_e = v0, _f = v1, [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = 2.0, [_c[0] / _d, _c[1] / _d, _c[2] / _d]));\n                    var v4 = (0, std_math_1.normalize)((_g = (_j = v1, _k = v2, [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = 2.0, [_g[0] / _h, _g[1] / _h, _g[2] / _h]));\n                    var v5 = (0, std_math_1.normalize)((_l = (_o = v2, _p = v0, [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = 2.0, [_l[0] / _m, _l[1] / _m, _l[2] / _m]));\n                    var i3 = (this.vertices.len() | 0);\n                    var i4 = i3 + (1 | 0);\n                    var i5 = i3 + (2 | 0);\n                    this.vertices.push((_q = v3, _r = radius, [_q[0] * _r, _q[1] * _r, _q[2] * _r]));\n                    this.vertices.push((_s = v4, _t = radius, [_s[0] * _t, _s[1] * _t, _s[2] * _t]));\n                    this.vertices.push((_u = v5, _v = radius, [_u[0] * _v, _u[1] * _v, _u[2] * _v]));\n                    newTriangles.push(i0, i3, i5);\n                    newTriangles.push(i3, i1, i4);\n                    newTriangles.push(i3, i4, i5);\n                    newTriangles.push(i5, i4, i2);\n                }\n                this.triangles = newTriangles;\n            }\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                var normal = (0, std_math_1.normalize)(this.vertices[i]);\n                var tangent = (0, std_math_1.normalize)(__.makeVector(normal[2], (0 | 0), (__.FM.negate_1(normal[0]))));\n                var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(normal, tangent));\n                this.normals.push(normal);\n                this.tangents.push(tangent);\n                this.bitangents.push(bitangent);\n            }\n            for (var i = (0 | 0); i < (this.triangles.len() | 0); i = i + (3 | 0)) {\n                var i0 = this.triangles[i + (0 | 0)];\n                var i1 = this.triangles[i + (1 | 0)];\n                var i2 = this.triangles[i + (2 | 0)];\n                var v0 = this.vertices[i0];\n                var v1 = this.vertices[i1];\n                var v2 = this.vertices[i2];\n                var uv0 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v0[2], v0[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v0[1]) / common_1.PI, 0.5));\n                var uv1 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v1[2], v1[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v1[1]) / common_1.PI, 0.5));\n                var uv2 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v2[2], v2[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v2[1]) / common_1.PI, 0.5));\n                this.uvs.push(uv0);\n                this.uvs.push(uv1);\n                this.uvs.push(uv2);\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.cylinder = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.capsule = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.cone = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.translate(pos);\n        };\n        Mesh.prototype.plane = function (pos, size, subdivisions) {\n            var _a, _b;\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            for (var i = (0 | 0); i <= subdivisions[0]; i++) {\n                var x = i / __.swizzle(subdivisions, 'x');\n                var posX = x * size[0] - halfSize[0];\n                for (var j = (0 | 0); j <= subdivisions[1]; j++) {\n                    var y = j / __.swizzle(subdivisions, 'y');\n                    var posY = y * size[1] - halfSize[1];\n                    this.vertices.push(__.makeVector(posX, (0 | 0), posY));\n                    this.normals.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n                    this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n                    this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < subdivisions[0]; i++) {\n                for (var j = (0 | 0); j < subdivisions[1]; j++) {\n                    var i0 = i * (subdivisions[1] + (1 | 0)) + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + subdivisions[1] + (1 | 0);\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.translate = function (pos) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.add, i, pos);\n            }\n            return this;\n        };\n        Mesh.prototype.rotate = function (quaternion) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, common_1.quat.rotate(quaternion, this.vertices[i]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, common_1.quat.rotate(quaternion, this.normals[i]));\n            }\n            return this;\n        };\n        Mesh.prototype.transform = function (matrix) {\n            var _a, _b;\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, (_a = (__.mul(__.makeVector(this.vertices[i], (1 | 0)), matrix)), [_a[0], _a[1], _a[2]]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, (_b = (__.mul(__.makeVector(this.normals[i], (1 | 0)), matrix)), [_b[0], _b[1], _b[2]]));\n            }\n            return this;\n        };\n        Mesh.prototype.scale = function (scale) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.mul, i, scale);\n            }\n            return this;\n        };\n        Mesh.prototype.bounds = function () {\n            var _a, _b, _c, _d;\n            var shader_self_temp = this;\n            var mn = (_a = 0.0, [_a, _a, _a]);\n            var mx = (_b = 0.0, [_b, _b, _b]);\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                mn = (0, std_math_1.min)(mn, this.vertices[i]);\n                mx = (0, std_math_1.max)(mx, this.vertices[i]);\n            }\n            return _c = mx, _d = mn, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]];\n        };\n        Mesh.prototype.center = function () {\n            var _a, _b;\n            var shader_self_temp = this;\n            var bounds = this.bounds();\n            return _a = bounds, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        Mesh.new = function () { return new Mesh({ vertices: [], triangles: [], tangents: [], bitangents: [], normals: [], uvs: [], colors: [] }); };\n        Mesh.prototype.append = function (other) {\n            var shader_self_temp = this;\n            var oldVertices = (this.vertices.len() | 0);\n            var oldTriangles = (this.triangles.len() | 0);\n            this.vertices.append(other.vertices);\n            this.triangles.append(other.triangles);\n            this.normals.append(other.normals);\n            this.tangents.append(other.tangents);\n            this.bitangents.append(other.bitangents);\n            this.uvs.append(other.uvs);\n            this.colors.append(other.colors);\n            for (var i = oldTriangles; i < (this.triangles.len() | 0); i++) {\n                this.triangles.__index_assign_op(__.add, i, oldVertices);\n            }\n        };\n        Mesh.prototype.getVertices = function () { var shader_self_temp = this; return this.vertices; };\n        Mesh.prototype.getTriangles = function () { var shader_self_temp = this; return this.triangles; };\n        Mesh.prototype.getNormals = function () { var shader_self_temp = this; return this.normals; };\n        Mesh.prototype.getTangents = function () { var shader_self_temp = this; return this.tangents; };\n        Mesh.prototype.getBitangents = function () { var shader_self_temp = this; return this.bitangents; };\n        Mesh.prototype.getUVs = function () { var shader_self_temp = this; return this.uvs; };\n        Mesh.prototype.getColors = function () { var shader_self_temp = this; return this.colors; };\n        Mesh.prototype.setVertices = function (vertices) {\n            var shader_self_temp = this;\n            this.vertices = vertices;\n        };\n        Mesh.prototype.setTriangles = function (triangles) {\n            var shader_self_temp = this;\n            this.triangles = triangles;\n        };\n        Mesh.prototype.setNormals = function (normals) {\n            var shader_self_temp = this;\n            this.normals = normals;\n        };\n        Mesh.prototype.setTangents = function (tangents) {\n            var shader_self_temp = this;\n            this.tangents = tangents;\n        };\n        Mesh.prototype.setBitangents = function (bitangents) {\n            var shader_self_temp = this;\n            this.bitangents = bitangents;\n        };\n        Mesh.prototype.setUVs = function (uvs) {\n            var shader_self_temp = this;\n            this.uvs = uvs;\n        };\n        Mesh.prototype.setColors = function (colors) {\n            var shader_self_temp = this;\n            this.colors = colors;\n        };\n        Mesh.prototype.clone = function () {\n            return new Mesh({\n                vertices: (0, std___std_all_1.__deepClone)(this.vertices),\n                triangles: (0, std___std_all_1.__deepClone)(this.triangles),\n                normals: (0, std___std_all_1.__deepClone)(this.normals),\n                tangents: (0, std___std_all_1.__deepClone)(this.tangents),\n                bitangents: (0, std___std_all_1.__deepClone)(this.bitangents),\n                uvs: (0, std___std_all_1.__deepClone)(this.uvs),\n                colors: (0, std___std_all_1.__deepClone)(this.colors),\n                symbol: (0, std___std_all_1.__deepClone)(this.symbol),\n            });\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}\"), Mesh)\n    ; /* impl Mesh */\n    var mesh = /** @class */ (function () {\n        function mesh(data) {\n        }\n        mesh.rect = function (pos, size) {\n            var _a, _b;\n            var g = Mesh.new();\n            g.rectAt(pos, (_a = pos, _b = size, [_a[0] + _b[0], _a[1] + _b[1]]));\n            return g;\n        };\n        mesh.box = function (pos, size) {\n            var g = Mesh.new();\n            g.box(size);\n            g.translate(pos);\n            return g;\n        };\n        mesh.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var g = Mesh.new();\n            g.uvSphere(pos, radius, vertices, rings);\n            return g;\n        };\n        mesh.icoSphere = function (pos, radius, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var g = Mesh.new();\n            g.icoSphere(pos, radius, subdivisions);\n            return g;\n        };\n        mesh.plane = function (pos, size, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var g = Mesh.new();\n            g.plane(pos, size, subdivisions);\n            return g;\n        };\n        /**\n            * Returns a [-1, 1] position for a given index.\n            */\n        mesh.triangleFromIndex = function (index) {\n            if (index == (0 | 0)) {\n                return __.FM.float_2_1_1(__.negate((1 | 0)), __.int(1));\n            }\n            else if (index == (1 | 0)) {\n                return __.FM.float_2_1_1(__.int(1), __.int(1));\n            }\n            else if (index == (2 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.negate((1 | 0)));\n            }\n            else {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n        };\n        mesh.circleFromIndex = function (vertexIndex, vertices) {\n            vertexIndex = vertices - vertexIndex;\n            var numSlices = vertices / (3 | 0);\n            var sliceIndex = Math.floor(vertexIndex / vertices * numSlices);\n            var incAngle = common_1.PI * 2.0 / numSlices;\n            var baseAngle = incAngle * sliceIndex;\n            if (vertexIndex % (3 | 0) == (0 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n            else if (vertexIndex % (3 | 0) == (1 | 0)) {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle), (0, std_math_1.sin)(baseAngle));\n            }\n            else {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle + incAngle), (0, std_math_1.sin)(baseAngle + incAngle));\n            }\n        };\n        mesh.rectFromIndex = function (index, vertices) {\n            var _a, _b, _c, _d, _e, _f;\n            var x = index % vertices;\n            var y = index / vertices;\n            return _a = (_c = (_e = __.FM.float_2_1_1(x, y), _f = vertices, [_e[0] / _f, _e[1] / _f]), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = 1.0, [_a[0] - _b, _a[1] - _b];\n        };\n        mesh.empty = function (numVerts) {\n            var _a, _b, _c, _d, _e, _f;\n            if (numVerts === void 0) { numVerts = (0 | 0); }\n            var g = Mesh.new();\n            if (numVerts > (0 | 0)) {\n                g.setVertices((0, std___std_all_1.array)(numVerts, (_a = (0 | 0), [_a, _a, _a])));\n                g.setNormals((0, std___std_all_1.array)(numVerts, (_b = (0 | 0), [_b, _b, _b])));\n                g.setTangents((0, std___std_all_1.array)(numVerts, (_c = (0 | 0), [_c, _c, _c])));\n                g.setBitangents((0, std___std_all_1.array)(numVerts, (_d = (0 | 0), [_d, _d, _d])));\n                g.setUVs((0, std___std_all_1.array)(numVerts, (_e = (0 | 0), [_e, _e])));\n                g.setColors((0, std___std_all_1.array)(numVerts, (_f = (0 | 0), [_f, _f, _f, _f])));\n                var tris = (0, std___std_all_1.array)(numVerts, (0 | 0));\n                for (var i = (0 | 0); i < numVerts; i++) {\n                    tris.__index_assign(i, i);\n                }\n                g.setTriangles(tris);\n            }\n            return g;\n        };\n        mesh.join = function (mesh1, mesh2) {\n            var g = Mesh.new();\n            g.append(mesh1);\n            g.append(mesh2);\n            return g;\n        };\n        // pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cylinder(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.capsule(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cone(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        mesh.prototype.clone = function () {\n            return new mesh({});\n        };\n        mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_19895_mesh\\\",\\\"fields\\\":[]}\");\n        };\n        return mesh;\n    }());\n    exports.mesh = mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_19895_mesh\\\",\\\"fields\\\":[]}\"), mesh)\n    ; /* impl mesh */\n    var Material = /** @class */ (function () {\n        function Material(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.baseColor = ((_a = data.baseColor) !== null && _a !== void 0 ? _a : __.FM.float_4_1_1_1_1(0.0, 0.0, 0.0, 0.0));\n            this.color = ((_b = data.color) !== null && _b !== void 0 ? _b : null);\n            this.normal = ((_c = data.normal) !== null && _c !== void 0 ? _c : null);\n            this.normalScale = ((_d = data.normalScale) !== null && _d !== void 0 ? _d : __.FM.float_2_1_1(0.0, 0.0));\n            this.roughness = ((_e = data.roughness) !== null && _e !== void 0 ? _e : null);\n            this.emissive = ((_f = data.emissive) !== null && _f !== void 0 ? _f : null);\n            this.metallic = ((_g = data.metallic) !== null && _g !== void 0 ? _g : null);\n        }\n        Material.prototype.clone = function () {\n            return new Material({\n                baseColor: (0, std___std_all_1.__deepClone)(this.baseColor),\n                color: (0, std___std_all_1.__deepClone)(this.color),\n                normal: (0, std___std_all_1.__deepClone)(this.normal),\n                normalScale: (0, std___std_all_1.__deepClone)(this.normalScale),\n                roughness: (0, std___std_all_1.__deepClone)(this.roughness),\n                emissive: (0, std___std_all_1.__deepClone)(this.emissive),\n                metallic: (0, std___std_all_1.__deepClone)(this.metallic),\n            });\n        };\n        Material.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}\");\n        };\n        return Material;\n    }());\n    exports.Material = Material;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}\"), Material)\n    ;\n    var ModelPart = /** @class */ (function () {\n        function ModelPart(data) {\n            var _a, _b, _c;\n            this.mesh = ((_a = data.mesh) !== null && _a !== void 0 ? _a : new Mesh({}));\n            this.material = ((_b = data.material) !== null && _b !== void 0 ? _b : new Material({}));\n            this.transform = ((_c = data.transform) !== null && _c !== void 0 ? _c : __.float4x4(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));\n        }\n        ModelPart.prototype.clone = function () {\n            return new ModelPart({\n                mesh: (0, std___std_all_1.__deepClone)(this.mesh),\n                material: (0, std___std_all_1.__deepClone)(this.material),\n                transform: (0, std___std_all_1.__deepClone)(this.transform),\n            });\n        };\n        ModelPart.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]}\");\n        };\n        return ModelPart;\n    }());\n    exports.ModelPart = ModelPart;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]}\"), ModelPart)\n    ;\n    var Model = /** @class */ (function () {\n        function Model(data) {\n            var _a;\n            this.parts = ((_a = data.parts) !== null && _a !== void 0 ? _a : []);\n        }\n        Model.prototype.clone = function () {\n            return new Model({\n                parts: (0, std___std_all_1.__deepClone)(this.parts),\n            });\n        };\n        Model.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_25266_Model\\\",\\\"fields\\\":[[\\\"parts\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]},\\\"staticSize\\\":1}]]}\");\n        };\n        return Model;\n    }());\n    exports.Model = Model;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_25266_Model\\\",\\\"fields\\\":[[\\\"parts\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]},\\\"staticSize\\\":1}]]}\"), Model)\n    ;\n    window.SHD_Mesh = Mesh;\n    window.SHD_Model = Model;\n    window.SHD_ModelPart = ModelPart;\n    window.SHD_Material = Material;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/textures.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    var globalVarGet = std___std_all_1.globalVarGet;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/common.js\", deps, func);\n\tvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/buffer\", \"/_std/ui\", \"/_std/texture\"], function (require, exports, __, std_math_1, std___std_all_1, buffer_1, ui_1, texture_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.wrap4 = exports.wrap3 = exports.wrap2 = exports.color = exports.remap1 = exports.remap = exports.tan1 = exports.cos1 = exports.sin1 = exports.hexFromColor = exports.hex = exports.cmykFromColor = exports.cmyk = exports.rgbaFromColor = exports.rgbFromColor = exports.rgba = exports.rgb = exports.hsvaFromColor = exports.hsvFromColor = exports.hsva = exports.hsv = exports.hslaFromColor = exports.hslFromColor = exports.hsla = exports.hsl = exports.screenAA = exports.matrix = exports.noise = exports.reverseMortonCode2 = exports.randColor2 = exports.randColor = exports.mortonCode2 = exports.spatial = exports.bezier = exports.Camera = exports.Camera2d = exports.quat = exports.ui = exports.texture3d = exports.texture2d = exports.buffer = exports.PI = exports.pixelToClip = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    Object.defineProperty(exports, \"buffer\", { enumerable: true, get: function () { return buffer_1.buffer; } });\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\n    Object.defineProperty(exports, \"texture2d\", { enumerable: true, get: function () { return texture_1.texture2d; } });\n    Object.defineProperty(exports, \"texture3d\", { enumerable: true, get: function () { return texture_1.texture3d; } });\n    function pixelToClip(pixelPosition) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        var zeroToOne = (_a = pixelPosition, _b = env.screenSize, [_a[0] / _b[0], _a[1] / _b[1]]);\n        var zeroToTwo = (_c = zeroToOne, _d = 2.0, [_c[0] * _d, _c[1] * _d]);\n        var clipSpace = (_e = zeroToTwo, _f = (_g = 1.0, [_g, _g]), [_e[0] - _f[0], _e[1] - _f[1]]);\n        return __.makeVector(clipSpace[0], clipSpace[1] * (__.FM.negate_1(1.0)));\n    }\n    exports.pixelToClip = pixelToClip;\n    ; /**\n    * Value of PI to 35 decimal places.\n    */\n    var PI = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PI\", function () { return 3.14159265358979323846264338327950288; }, function () { return PI; });\n    exports.PI = PI;\n    var quat = /** @class */ (function () {\n        function quat(data) {\n        }\n        /**\n            * Creates a quaternion from an angle and axis.\n            */\n        quat.fromAngleAxis = function (angle, axis) { return __.FM.float_4_3_1(__.mul(axis, Math.sin(angle * 0.5)), (0, std_math_1.cos)(angle * 0.5)); };\n        /**\n            * Multiplies two quaternions and returns the result.\n            */\n        quat.mul = function (a, b) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; return __.FM.float_4_3_1(__.add((_a = (_c = (_e = b, [_e[0], _e[1], _e[2]]), _d = a[3], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = (_f = (_h = a, [_h[0], _h[1], _h[2]]), _g = b[3], [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]), (0, std_math_1.cross)((_j = a, [_j[0], _j[1], _j[2]]), (_k = b, [_k[0], _k[1], _k[2]]))), __.sub(a[3] * b[3], (0, std_math_1.dot)((_l = a, [_l[0], _l[1], _l[2]]), (_m = b, [_m[0], _m[1], _m[2]])))); };\n        /**\n            * Rotates a vector by a quaternion and returns the rotated vector.\n            */\n        quat.rotate = function (quaternion, vector) {\n            var _a;\n            var q = quat.mul(quat.mul(quaternion, __.FM.float_4_3_1(vector, __.int(0))), quat.conjugate(quaternion));\n            return _a = q, [_a[0], _a[1], _a[2]];\n        };\n        /**\n            * Returns the conjugate of the input quaternion.\n            *\n            * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\n            */\n        quat.conjugate = function (quaternion) { var _a; return __.FM.float_4_3_1(__.negate((_a = quaternion, [_a[0], _a[1], _a[2]])), __.swizzle(quaternion, 'w')); };\n        /**\n            * Returns the inverse of the input quaternion.\n            */\n        quat.inverse = function (quaternion) { var _a, _b; return _a = quat.conjugate(quaternion), _b = (0, std_math_1.dot)(quaternion, quaternion), [_a[0] / _b, _a[1] / _b, _a[2] / _b, _a[3] / _b]; };\n        /**\n            * Generates a quaternion that rotates from one direction to another via the shortest path.\n            */\n        quat.fromToRotation = function (from, to) {\n            var _a;\n            var q = (_a = 0.0, [_a, _a, _a, _a]);\n            var d = (0, std_math_1.dot)(from, to);\n            if (d < (__.FM.negate_1(0.999999))) {\n                var right = __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0));\n                var up = __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0));\n                var tmp = (0, std_math_1.cross)(right, from);\n                if ((0, std_math_1.length)(tmp) < 0.000001) {\n                    tmp = (0, std_math_1.cross)(up, from);\n                }\n                tmp = (0, std_math_1.normalize)(tmp);\n                q = quat.fromAngleAxis(PI, tmp);\n            }\n            else if (d > 0.999999) {\n                q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            }\n            else {\n                q = __.FM.float_4_3_1((0, std_math_1.cross)(from, to), __.add((1 | 0), d));\n                q = (0, std_math_1.normalize)(q);\n            }\n            return q;\n        };\n        quat.diff = function (a, b) { var _a, _b; return _a = a, _b = quat.inverse(b), [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]]; };\n        /**\n            * Generates lookAt quaternion.\n            */\n        quat.lookAt = function (forward, up) {\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, up));\n            up = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, right));\n            var m00 = right[0];\n            var m01 = right[1];\n            var m02 = right[2];\n            var m10 = up[0];\n            var m11 = up[1];\n            var m12 = up[2];\n            var m20 = forward[0];\n            var m21 = forward[1];\n            var m22 = forward[2];\n            var num8 = (m00 + m11) + m22;\n            var q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            if (num8 > 0.0) {\n                var num = Math.sqrt(num8 + 1.0);\n                var w_1 = num * 0.5;\n                num = 0.5 / num;\n                var x_1 = (m12 - m21) * num;\n                var y_1 = (m20 - m02) * num;\n                var z_1 = (m01 - m10) * num;\n                return __.FM.float_4_1_1_1_1(x_1, y_1, z_1, w_1);\n            }\n            if (__.and((m00 >= m11), (m00 >= m22))) {\n                var num7 = Math.sqrt(((1.0 + m00) - m11) - m22);\n                var num4 = 0.5 / num7;\n                var x_2 = 0.5 * num7;\n                var y_2 = (m01 + m10) * num4;\n                var z_2 = (m02 + m20) * num4;\n                var w_2 = (m12 - m21) * num4;\n                return __.FM.float_4_1_1_1_1(x_2, y_2, z_2, w_2);\n            }\n            if (m11 > m22) {\n                var num6 = Math.sqrt(((1.0 + m11) - m00) - m22);\n                var num3 = 0.5 / num6;\n                var x_3 = (m10 + m01) * num3;\n                var y_3 = 0.5 * num6;\n                var z_3 = (m21 + m12) * num3;\n                var w_3 = (m20 - m02) * num3;\n                return __.FM.float_4_1_1_1_1(x_3, y_3, z_3, w_3);\n            }\n            var num5 = Math.sqrt(((1.0 + m22) - m00) - m11);\n            var num2 = 0.5 / num5;\n            var x = (m20 + m02) * num2;\n            var y = (m21 + m12) * num2;\n            var z = 0.5 * num5;\n            var w = (m01 - m10) * num2;\n            return __.FM.float_4_1_1_1_1(x, y, z, w);\n        };\n        /**\n            * Smooth interpolation between two quaternions.\n            */\n        quat.slerp = function (a, b, t) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            if ((0, std_math_1.length)(a) == 0.0) {\n                if ((0, std_math_1.length)(b) == 0.0) {\n                    return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n                }\n                return b;\n            }\n            else if ((0, std_math_1.length)(b) == 0.0) {\n                return a;\n            }\n            var cosHalfAngle = a[3] * b[3] + (0, std_math_1.dot)((_a = a, [_a[0], _a[1], _a[2]]), (_b = b, [_b[0], _b[1], _b[2]]));\n            if (__.or(cosHalfAngle >= 1.0, cosHalfAngle <= (__.FM.negate_1(1.0)))) {\n                return a;\n            }\n            else if (cosHalfAngle < 0.0) {\n                b = (_c = b, _d = (__.FM.negate_1(1.0)), [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]);\n                cosHalfAngle = (__.FM.negate_1(cosHalfAngle));\n            }\n            var blendA = 0.0;\n            var blendB = 0.0;\n            if (cosHalfAngle < 0.99) {\n                var halfAngle = Math.acos(cosHalfAngle);\n                var sinHalfAngle = Math.sin(halfAngle);\n                var oneOverSinHalfAngle = 1.0 / sinHalfAngle;\n                blendA = Math.sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\n                blendB = Math.sin(halfAngle * t) * oneOverSinHalfAngle;\n            }\n            else {\n                blendA = 1.0 - t;\n                blendB = t;\n            }\n            var result = __.FM.float_4_3_1(__.add((_e = blendA, _f = (_g = a, [_g[0], _g[1], _g[2]]), [_e * _f[0], _e * _f[1], _e * _f[2]]), (_h = blendB, _j = (_k = b, [_k[0], _k[1], _k[2]]), [_h * _j[0], _h * _j[1], _h * _j[2]])), __.add(blendA * a[3], blendB * b[3]));\n            if ((0, std_math_1.length)(result) > 0.0) {\n                return (0, std_math_1.normalize)(result);\n            }\n            return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n        };\n        /**\n            * Converts quaternion to matrix.\n            */\n        quat.toMatrix = function (quaternion) {\n            var x = quaternion[0];\n            var y = quaternion[1];\n            var z = quaternion[2];\n            var w = quaternion[3];\n            var x2 = x + x;\n            var y2 = y + y;\n            var z2 = z + z;\n            var xx = x * x2;\n            var xy = x * y2;\n            var xz = x * z2;\n            var yy = y * y2;\n            var yz = y * z2;\n            var zz = z * z2;\n            var wx = w * x2;\n            var wy = w * y2;\n            var wz = w * z2;\n            var m = __.float4x4(1.0 - (yy + zz), xy + wz, xz - wy, (0 | 0), xy - wz, 1.0 - (xx + zz), yz + wx, (0 | 0), xz + wy, yz - wx, 1.0 - (xx + yy), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0);\n            return m;\n        };\n        quat.fromEulerAngles = function (angles) {\n            var cr = Math.cos(angles[0] * 0.5);\n            var sr = Math.sin(angles[0] * 0.5);\n            var cp = Math.cos(angles[1] * 0.5);\n            var sp = Math.sin(angles[1] * 0.5);\n            var cy = Math.cos(angles[2] * 0.5);\n            var sy = Math.sin(angles[2] * 0.5);\n            return __.FM.float_4_1_1_1_1(__.sub(sr * cp * cy, cr * sp * sy), __.add(cr * sp * cy, sr * cp * sy), __.sub(cr * cp * sy, sr * sp * cy), __.add(cr * cp * cy, sr * sp * sy));\n        };\n        quat.prototype.clone = function () {\n            return new quat({});\n        };\n        quat.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_2304_quat\\\",\\\"fields\\\":[]}\");\n        };\n        return quat;\n    }());\n    exports.quat = quat;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_2304_quat\\\",\\\"fields\\\":[]}\"), quat)\n    ; /* impl quat */\n    window.shadeupQuat = quat;\n    var Camera2d = /** @class */ (function () {\n        function Camera2d(data) {\n            var _a, _b;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(__.int(0), __.int(0)));\n            this.zoom = ((_b = data.zoom) !== null && _b !== void 0 ? _b : (1 | 0));\n        }\n        Camera2d.prototype.transform = function (position) { var _a, _b, _c, _d; var shader_self_temp = this; return _a = (_c = position, _d = this.position, [_c[0] - _d[0], _c[1] - _d[1]]), _b = this.zoom, [_a[0] * _b, _a[1] * _b]; };\n        /**\n            * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\n            */\n        Camera2d.prototype.fit = function (size) {\n            var _a, _b, _c, _d, _e, _f;\n            var shader_self_temp = this;\n            var zoom = (1 | 0) / (0, std_math_1.min)(env.screenSize[0] / size[0], env.screenSize[1] / size[1]);\n            var position = (_a = (_c = env.screenSize, _d = (_e = size, _f = ((1 | 0) / zoom), [_e[0] * _f, _e[1] * _f]), [_c[0] - _d[0], _c[1] - _d[1]]), _b = (2 | 0), [_a[0] / _b, _a[1] / _b]);\n            this.position = position;\n            this.zoom = zoom;\n        };\n        Camera2d.prototype.clone = function () {\n            return new Camera2d({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                zoom: (0, std___std_all_1.__deepClone)(this.zoom),\n            });\n        };\n        Camera2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\");\n        };\n        return Camera2d;\n    }());\n    exports.Camera2d = Camera2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\"), Camera2d)\n    ; /* impl Camera2d */\n    var Camera = /** @class */ (function () {\n        function Camera(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)));\n            this.rotation = ((_b = data.rotation) !== null && _b !== void 0 ? _b : __.FM.float_4_1_1_1_1(__.int(1), __.int(0), __.int(0), __.int(0)));\n            this.width = ((_c = data.width) !== null && _c !== void 0 ? _c : (1920 | 0));\n            this.height = ((_d = data.height) !== null && _d !== void 0 ? _d : (1080 | 0));\n            this.fov = ((_e = data.fov) !== null && _e !== void 0 ? _e : (90 | 0));\n            this.near = ((_f = data.near) !== null && _f !== void 0 ? _f : (1 | 0));\n            this.far = ((_g = data.far) !== null && _g !== void 0 ? _g : (100000 | 0));\n        }\n        Camera.prototype.getRay = function (screen) {\n            var shader_self_temp = this;\n            var aspect = this.width / this.height;\n            var x = screen[0];\n            var y = screen[1];\n            var Px = ((2 | 0) * ((x + 0.5) / this.width) - (1 | 0)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0)) * aspect;\n            var Py = ((1 | 0) - (2 | 0) * ((y + 0.5) / this.height)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0));\n            return quat.rotate(this.rotation, (0, std_math_1.normalize)(__.makeVector(Px, Py, (__.FM.negate_1((1 | 0))))));\n        };\n        Camera.prototype.getTransformToViewMatrix = function (position, scale, rotation) {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(rotation);\n            var translationMatrix = __.float4x4(scale[0], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[1], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[2], (0 | 0), position[0], position[1], position[2], (1 | 0));\n            return __.mul(__.mul(__.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()), translationMatrix), rotationMatrix);\n        };\n        Camera.prototype.getCombinedMatrix = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getCombinedMatrixReverseZ = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrixReverseZ(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getWorldToViewMatrix = function () {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(this.rotation);\n            var translationMatrix = __.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), this.position[0], this.position[1], this.position[2], (1 | 0));\n            return (0, std_math_1.inverse)(__.mul(translationMatrix, rotationMatrix));\n        };\n        Camera.prototype.getPerspectiveMatrixReverseZ = function () { var shader_self_temp = this; return matrix.perspectiveReverseZ(this.fov, this.width / this.height, this.near); };\n        Camera.prototype.getPerspectiveMatrix = function () {\n            var shader_self_temp = this;\n            return matrix.perspective(this.fov, this.width / this.height, this.near, this.far); // // let matrix = float4x4();\n            // let far = self.far;\n            // let near = self.near;\n            // let aspect = self.width / self.height;\n            // let fovRad = radians(self.fov);\n            // let tanFov = tan( fovRad * 0.5 );\n            // // matrix[0][0] = ;\n            // // matrix[1][1] = 1.0 / tanFov;\n            // // matrix[2][2] = -((far + near)/(far - near));\n            // // matrix[3][2] = -((2*(near*far))/(far - near));\n            // // matrix[2][3] = -1;\n            // // matrix[3][3] = 0;\n            // let matrix = float4x4(\n            //     1.0 / (tanFov * aspect), 0, 0, 0,\n            //     0, 1.0 / tanFov, 0, 0,\n            //     0, 0, -((far + near)/(far - near)), -1,\n            //     0, 0, -((2*(near*far))/(far - near)), 0\n            // );\n            // return matrix;\n        };\n        Camera.prototype.getOrthographicMatrix = function () {\n            var shader_self_temp = this;\n            var matrix = __.float4x4();\n            var far = this.far;\n            var near = this.near;\n            var w = 1.0 / this.width;\n            var h = 1.0 / this.height;\n            matrix.__index((0 | 0)).__index_assign((0 | 0), w);\n            matrix.__index((1 | 0)).__index_assign((1 | 0), h);\n            matrix.__index((2 | 0)).__index_assign((2 | 0), (__.FM.negate_1((2.0 / (far - near)))));\n            matrix.__index((2 | 0)).__index_assign((3 | 0), ((far + near) / (far - near)));\n            //matrix[2][2] = -((far + near)/(far - near));\n            //matrix[3][2] = -((2*(near*far))/(far - near));\n            matrix.__index((3 | 0)).__index_assign((3 | 0), 1.0);\n            return matrix;\n        };\n        Camera.prototype.clone = function () {\n            return new Camera({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                rotation: (0, std___std_all_1.__deepClone)(this.rotation),\n                width: (0, std___std_all_1.__deepClone)(this.width),\n                height: (0, std___std_all_1.__deepClone)(this.height),\n                fov: (0, std___std_all_1.__deepClone)(this.fov),\n                near: (0, std___std_all_1.__deepClone)(this.near),\n                far: (0, std___std_all_1.__deepClone)(this.far),\n            });\n        };\n        Camera.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\");\n        };\n        return Camera;\n    }());\n    exports.Camera = Camera;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\"), Camera)\n    ; /* impl Camera */\n    window._makeCamera = Camera;\n    window._makeCamera2d = Camera2d;\n    function easeA(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n    function easeB(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n    function easeC(aA1) { return 3.0 * aA1; }\n    function calcBezier(aT, aA1, aA2) { return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT; }\n    function getSlope(aT, aA1, aA2) { return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1); }\n    // fn getTForX(aX: float, aA1: float, aA2: float) -> float {\n    //     let aGuessT = aX;\n    //     for (let i = 0; i <= 10; i++) {\n    //         let currentSlope = bezSlope(aGuessT, aA1, aA2);\n    //         if (currentSlope == 0.0) {\n    //             return aGuessT;\n    //         }\n    //         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\n    //         aGuessT -= currentX / currentSlope;\n    //     }\n    //     return aGuessT;\n    // }\n    var NEWTON_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_ITERATIONS\", function () { return (4 | 0); }, function () { return NEWTON_ITERATIONS; }) | 0);\n    var NEWTON_MIN_SLOPE = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_MIN_SLOPE\", function () { return 0.02; }, function () { return NEWTON_MIN_SLOPE; });\n    var SUBDIVISION_PRECISION = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_PRECISION\", function () { return 0.0000001; }, function () { return SUBDIVISION_PRECISION; });\n    var SUBDIVISION_MAX_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_MAX_ITERATIONS\", function () { return (10 | 0); }, function () { return SUBDIVISION_MAX_ITERATIONS; }) | 0);\n    var kSplineTableSize = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSplineTableSize\", function () { return (11 | 0); }, function () { return kSplineTableSize; }) | 0);\n    var kSampleStepSize = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSampleStepSize\", function () { return 1.0 / __.sub(kSplineTableSize, (1 | 0)); }, function () { return kSampleStepSize; });\n    function getTForX(aX, mX1, mX2) {\n        var mSampleValues = (0, std___std_all_1.array)((11 | 0), (0 | 0));\n        for (var i = (0 | 0); i < kSplineTableSize; i++) {\n            mSampleValues.__index_assign(i, calcBezier(i * kSampleStepSize, mX1, mX2));\n        } // Find interval where t lies\n        var intervalStart = 0.0;\n        var currentSample = (1 | 0);\n        var lastSample = kSplineTableSize - (1 | 0);\n        for (var dummy = (0 | 0); __.and(currentSample != lastSample, mSampleValues[currentSample] <= aX); currentSample++) {\n            intervalStart = intervalStart + kSampleStepSize;\n        }\n        currentSample--;\n        // t now lies between *currentSample and *currentSample+1\n        // Interpolate to provide an initial guess for t\n        var csamp = mSampleValues[currentSample];\n        var dst = (aX - csamp) / (mSampleValues[currentSample + (1 | 0)] - csamp);\n        var guessForT = intervalStart + dst * kSampleStepSize;\n        // Check the slope to see what strategy to use. If the slope is too small\n        // Newton-Raphson iteration won't converge on a root so we use bisection\n        // instead.\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n            return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n        else if (initialSlope == 0.0) {\n            return guessForT;\n        }\n        else {\n            return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n        }\n    }\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n        for (var i = (0 | 0); i < NEWTON_ITERATIONS; i++) { // We're trying to find where f(t) = aX,\n            // so we're actually looking for a root for: CalcBezier(t) - aX\n            var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n            var currentSlope = getSlope(aGuessT, mX1, mX2);\n            if (currentSlope == 0.0)\n                return aGuessT;\n            aGuessT = aGuessT - currentX / currentSlope;\n        }\n        return aGuessT;\n    }\n    function binarySubdivide(aX, aA, aB) {\n        var currentX = 0.0;\n        var currentT = 0.0;\n        var i = (0 | 0);\n        var mX1 = aA;\n        var mX2 = aB;\n        while ((true)) {\n            i++;\n            if (__.and(Math.abs(currentX) > SUBDIVISION_PRECISION, i < SUBDIVISION_MAX_ITERATIONS)) {\n                currentT = aA + (aB - aA) / 2.0;\n                currentX = calcBezier(currentT, mX1, mX2) - aX;\n                if (currentX > 0.0) {\n                    aB = currentT;\n                }\n                else {\n                    aA = currentT;\n                }\n            }\n            else {\n                break;\n            }\n        }\n        return currentT;\n    }\n    var bezier = /** @class */ (function () {\n        function bezier(data) {\n        }\n        bezier.cubic2 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1]]), [_e[0] + _f[0], _e[1] + _f[1]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.cubic3 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1], _g * _h[2]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1], _l * _m[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1], _o * _p[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        bezier.quadratic2 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.quadratic3 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1], _e * _f[2]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1], _g * _h[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        /**\n            * 3d triangle patch evaulation with barycentric coordinates.\n            */\n        bezier.patch = function (a, ab, b, bc, c, ca, barycentricT) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n            var s = barycentricT[0];\n            var t = barycentricT[1];\n            var u = barycentricT[2];\n            return _a = (_c = (_e = (_g = (_j = (_l = (_o = 1.0, _p = c, [_o * _p[0], _o * _p[1], _o * _p[2]]), _m = (s * s), [_l[0] * _m, _l[1] * _m, _l[2] * _m]), _k = (_q = (_s = (_u = 2.0, _v = bc, [_u * _v[0], _u * _v[1], _u * _v[2]]), _t = s, [_s[0] * _t, _s[1] * _t, _s[2] * _t]), _r = t, [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = (_w = (_y = (_0 = 2.0, _1 = ca, [_0 * _1[0], _0 * _1[1], _0 * _1[2]]), _z = s, [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = u, [_w[0] * _x, _w[1] * _x, _w[2] * _x]), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]]), _f = (_2 = (_4 = 1.0, _5 = b, [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), _3 = (t * t), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_6 = (_8 = (_10 = 2.0, _11 = ab, [_10 * _11[0], _10 * _11[1], _10 * _11[2]]), _9 = t, [_8[0] * _9, _8[1] * _9, _8[2] * _9]), _7 = u, [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_12 = (_14 = 1.0, _15 = a, [_14 * _15[0], _14 * _15[1], _14 * _15[2]]), _13 = (u * u), [_12[0] * _13, _12[1] * _13, _12[2] * _13]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]];\n        };\n        bezier.easing = function (controlA, controlB, t) { return calcBezier(getTForX(t, controlA[0], controlB[0]), controlA[1], controlB[1]); };\n        bezier.prototype.clone = function () {\n            return new bezier({});\n        };\n        bezier.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_20500_bezier\\\",\\\"fields\\\":[]}\");\n        };\n        return bezier;\n    }());\n    exports.bezier = bezier;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_20500_bezier\\\",\\\"fields\\\":[]}\"), bezier)\n    ; /* impl bezier */\n    /**\n    * Provides space related utilities like z-order curves and quadtrees.\n    */\n    var spatial = /** @class */ (function () {\n        function spatial(data) {\n        }\n        spatial.cantorPair = function (v) { return ((v[0] + v[1]) * (v[0] + v[1] + (1 | 0))) / (2 | 0) + v[1]; };\n        spatial.cantorUnpair = function (v) {\n            var w = Math.floor((Math.sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\n            var t = (w * w + w) / 2.0;\n            var y = v - t;\n            var x = w - y;\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertRotate = function (n, b, r) {\n            var x = b[0];\n            var y = b[1];\n            if (r[1] == (0 | 0)) {\n                if (r[0] == (1 | 0)) {\n                    x = n - (1 | 0) - x;\n                    y = n - (1 | 0) - y;\n                }\n                var t = x;\n                x = y;\n                y = t;\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertUncurve = function (n, v) {\n            var x = v[0];\n            var y = v[1];\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var s = (0 | 0);\n            var d = (0 | 0);\n            for (s = n / (2 | 0); s > (0 | 0); s = s / (2 | 0)) {\n                rx = ((x & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                ry = ((y & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                d = d + s * s * (((3 | 0) * rx) ^ ry);\n                var o = __.intifyVector(spatial.hilbertRotate(n, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n            }\n            return d;\n        };\n        spatial.hilbertCurve = function (n, v) {\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var t = v;\n            var x = (0 | 0);\n            var y = (0 | 0);\n            for (var s = (1 | 0); s < n; s = s * (2 | 0)) {\n                rx = (1 | 0) & (t / (2 | 0));\n                ry = (1 | 0) & (t ^ rx);\n                var o = __.intifyVector(spatial.hilbertRotate(s, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n                x = x + s * rx;\n                y = y + s * ry;\n                t = t / (4 | 0);\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.mortonDecode = function (p) { return __.FM.uint_2_1_1(reverseMortonCode2(p), reverseMortonCode2(p >> (1 >>> 0))); };\n        spatial.mortonEncode = function (p) { return (__.bitor(mortonCode2(p[0]), (mortonCode2(p[1]) << (1 >>> 0))) >>> 0); };\n        spatial.prototype.clone = function () {\n            return new spatial({});\n        };\n        spatial.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_23054_spatial\\\",\\\"fields\\\":[]}\");\n        };\n        return spatial;\n    }());\n    exports.spatial = spatial;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_23054_spatial\\\",\\\"fields\\\":[]}\"), spatial)\n    ; /* impl spatial */\n    function mortonCode2(x) {\n        x = x & (0x0000ffff >>> 0);\n        var n8 = (8 >>> 0);\n        var n4 = (4 >>> 0);\n        var n2 = (2 >>> 0);\n        var n1 = (1 >>> 0);\n        x = (x ^ (x << n8)) & (0x00ff00ff >>> 0);\n        x = (x ^ (x << n4)) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x << n2)) & (0x33333333 >>> 0);\n        x = (x ^ (x << n1)) & (0x55555555 >>> 0);\n        return x;\n    }\n    exports.mortonCode2 = mortonCode2;\n    ;\n    function randColor(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand2)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor = randColor;\n    ;\n    function randColor2(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand3)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor2 = randColor2;\n    ;\n    function reverseMortonCode2(x) {\n        x = x & (0x55555555 >>> 0);\n        x = (x ^ (x >> (1 >>> 0))) & (0x33333333 >>> 0);\n        x = (x ^ (x >> (2 >>> 0))) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x >> (4 >>> 0))) & (0x00ff00ff >>> 0);\n        x = (x ^ (x >> (8 >>> 0))) & (0x0000ffff >>> 0);\n        return x;\n    }\n    exports.reverseMortonCode2 = reverseMortonCode2;\n    ;\n    var noise = /** @class */ (function () {\n        function noise(data) {\n        }\n        noise.gaussian3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;\n            var p = v;\n            var a = (_a = p, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var d = (_b = p, _c = a, [_b[0] - _c[0], _b[1] - _c[1], _b[2] - _c[2]]);\n            d = (_d = (_f = d, _g = d, [_f[0] * _g[0], _f[1] * _g[1], _f[2] * _g[2]]), _e = (_h = 3.0, _j = (_k = 2.0, _l = d, [_k * _l[0], _k * _l[1], _k * _l[2]]), [_h - _j[0], _h - _j[1], _h - _j[2]]), [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]);\n            var b = (_m = (_p = a, [_p[0], _p[0], _p[1], _p[1]]), _o = __.FM.float_4_1_1_1_1(__.float(0.0), __.float(1.0), __.float(0.0), __.float(1.0)), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2], _m[3] + _o[3]]);\n            var k1 = perm((_q = b, [_q[0], _q[1], _q[0], _q[1]]));\n            var k2 = perm((_r = (_t = k1, [_t[0], _t[1], _t[0], _t[1]]), _s = (_u = b, [_u[2], _u[2], _u[3], _u[3]]), [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2], _r[3] + _s[3]]));\n            var c = (_v = k2, _w = (_x = a, [_x[2], _x[2], _x[2], _x[2]]), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2], _v[3] + _w[3]]);\n            var k3 = perm(c);\n            var k4 = perm((_y = c, _z = 1.0, [_y[0] + _z, _y[1] + _z, _y[2] + _z, _y[3] + _z]));\n            var o1 = (0, std_math_1.frac)((_0 = k3, _1 = (1.0 / 41.0), [_0[0] * _1, _0[1] * _1, _0[2] * _1, _0[3] * _1]));\n            var o2 = (0, std_math_1.frac)((_2 = k4, _3 = (1.0 / 41.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3, _2[3] * _3]));\n            var o3 = (_4 = (_6 = o2, _7 = d[2], [_6[0] * _7, _6[1] * _7, _6[2] * _7, _6[3] * _7]), _5 = (_8 = o1, _9 = (1.0 - d[2]), [_8[0] * _9, _8[1] * _9, _8[2] * _9, _8[3] * _9]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2], _4[3] + _5[3]]);\n            var o4 = (_10 = (_12 = (_14 = o3, [_14[1], _14[3]]), _13 = d[0], [_12[0] * _13, _12[1] * _13]), _11 = (_15 = (_17 = o3, [_17[0], _17[2]]), _16 = (1.0 - d[0]), [_15[0] * _16, _15[1] * _16]), [_10[0] + _11[0], _10[1] + _11[1]]);\n            return o4[1] * d[1] + o4[0] * (1.0 - d[1]);\n        };\n        noise.gaussian2 = function (v) { return noise.gaussian3(__.makeVector(v, (0 | 0))); };\n        noise.noise1 = function (x) {\n            var i = Math.floor(x);\n            var f = (0, std_math_1.frac)(x);\n            var u = f * f * (3.0 - 2.0 * f);\n            return (0, std_math_1.lerp)(hash(i), hash(i + 1.0), u);\n        };\n        noise.noise2 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var f = (0, std_math_1.frac)(x);\n            // Four corners in 2D of a tile\n            var a = hash2(i);\n            var b = hash2((_b = i, _c = __.FM.float_2_1_1(__.float(1.0), __.float(0.0)), [_b[0] + _c[0], _b[1] + _c[1]]));\n            var c = hash2((_d = i, _e = __.FM.float_2_1_1(__.float(0.0), __.float(1.0)), [_d[0] + _e[0], _d[1] + _e[1]]));\n            var d = hash2((_f = i, _g = __.FM.float_2_1_1(__.float(1.0), __.float(1.0)), [_f[0] + _g[0], _f[1] + _g[1]]));\n            // Simple 2D lerp using smoothstep envelope between the values.\n            // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tsmoothstep(0.0, 1.0, f.y)));\n            // Same code, with the clamps in smoothstep and common subexpressions\n            // optimized away.\n            var u = (_h = (_k = f, _l = f, [_k[0] * _l[0], _k[1] * _l[1]]), _j = (_m = 3.0, _o = (_p = 2.0, _q = f, [_p * _q[0], _p * _q[1]]), [_m - _o[0], _m - _o[1]]), [_h[0] * _j[0], _h[1] * _j[1]]);\n            return (0, std_math_1.lerp)(a, b, u[0]) + (c - a) * u[1] * (1.0 - u[0]) + (d - b) * u[0] * u[1];\n        };\n        noise.fmb1 = function (x) {\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.int(100);\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise1(x);\n                x = x * 2.0 + shift;\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm2 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_2_2(__.swizzle((100 | 0), \"xy\"));\n            // Rotate to reduce axial bias\n            var rot = __.float2x2(Math.cos(0.5), Math.sin(0.5), (__.FM.negate_1(Math.sin(0.5))), Math.cos(0.50));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise2(x);\n                x = (_a = (_c = __.mul(rot, x), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm3 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_3_3(__.swizzle((100 | 0), \"xyz\"));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise3(x);\n                x = (_a = (_c = x, _d = 2.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.noise3 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n            var step = __.FM.float_3_1_1_1(__.int(110), __.int(241), __.int(171));\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var f = (0, std_math_1.frac)(x);\n            // For performance, compute the base input to a 1D hash from the integer part of the argument and the \n            // incremental change to the 1D based on the 3D -> 1D wrapping\n            var n = (0, std_math_1.dot)(i, step);\n            var u = (_b = (_d = f, _e = f, [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]), _c = (_f = 3.0, _g = (_h = 2.0, _j = f, [_h * _j[0], _h * _j[1], _h * _j[2]]), [_f - _g[0], _f - _g[1], _f - _g[2]]), [_b[0] * _c[0], _b[1] * _c[1], _b[2] * _c[2]]);\n            return (0, std_math_1.lerp)((0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(0)))), u[0]), u[1]), (0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(1)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(1)))), u[0]), u[1]), u[2]);\n        };\n        noise.simplex2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.211324865405187), __.float(0.366025403784439), __.negate(0.577350269189626), __.float(0.024390243902439));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1]])), [_b[0] + _c, _b[1] + _c]), [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0]])), [_e[0] + _f, _e[1] + _f]);\n            var xv = (0, std_math_1.step)(x0[1], x0[0]);\n            var i1 = __.FM.float_2_1_1(xv, __.sub(1.0, xv));\n            var x1 = (_k = (_m = x0, _o = (_p = C, [_p[0], _p[0]]), [_m[0] + _o[0], _m[1] + _o[1]]), _l = i1, [_k[0] - _l[0], _k[1] - _l[1]]);\n            var x2 = (_q = x0, _r = (_s = C, [_s[2], _s[2]]), [_q[0] + _r[0], _q[1] + _r[1]]);\n            i = mod289_2(i);\n            var p = permute((_t = (_v = permute((_x = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.float(1.0)), _y = i[1], [_x[0] + _y, _x[1] + _y, _x[2] + _y])), _w = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.float(1.0)), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2]]), _u = i[0], [_t[0] + _u, _t[1] + _u, _t[2] + _u]));\n            var m = (0, std_math_1.max)((_z = (_1 = 0.5, [_1, _1, _1]), _0 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_z[0] - _0[0], _z[1] - _0[1], _z[2] - _0[2]]), 0.0);\n            m = (_2 = m, _3 = m, [_2[0] * _3[0], _2[1] * _3[1], _2[2] * _3[2]]);\n            m = (_4 = m, _5 = m, [_4[0] * _5[0], _4[1] * _5[1], _4[2] * _5[2]]);\n            var x = (_6 = (_8 = 2.0, _9 = (0, std_math_1.frac)((_10 = p, _11 = (_12 = C, [_12[3], _12[3], _12[3]]), [_10[0] * _11[0], _10[1] * _11[1], _10[2] * _11[2]])), [_8 * _9[0], _8 * _9[1], _8 * _9[2]]), _7 = 1.0, [_6[0] - _7, _6[1] - _7, _6[2] - _7]);\n            var h = (_13 = (_15 = x, [Math.abs(_15[0]), Math.abs(_15[1]), Math.abs(_15[2])]), _14 = 0.5, [_13[0] - _14, _13[1] - _14, _13[2] - _14]);\n            var ox = (_16 = (_17 = x, _18 = 0.5, [_17[0] + _18, _17[1] + _18, _17[2] + _18]), [Math.floor(_16[0]), Math.floor(_16[1]), Math.floor(_16[2])]);\n            var a0 = (_19 = x, _20 = ox, [_19[0] - _20[0], _19[1] - _20[1], _19[2] - _20[2]]);\n            // Normalise gradients implicitly by scaling m\n            m = (_21 = m, _22 = taylorInvSqrt((_23 = (_25 = a0, _26 = a0, [_25[0] * _26[0], _25[1] * _26[1], _25[2] * _26[2]]), _24 = (_27 = h, _28 = h, [_27[0] * _28[0], _27[1] * _28[1], _27[2] * _28[2]]), [_23[0] + _24[0], _23[1] + _24[1], _23[2] + _24[2]])), [_21[0] * _22[0], _21[1] * _22[1], _21[2] * _22[2]]);\n            // Compute final noise value at P\n            var g = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g);\n        };\n        noise.perlin2 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = 0.0;\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        noise.perlin3 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = v[2];\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        /**\n            * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\n            */\n        noise.voronoi2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var n = (_a = v, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var minDist = 10.0;\n            var toClose = (_b = 0.0, [_b, _b]);\n            var closestCell = (_c = 0.0, [_c, _c]);\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_d = n, _e = __.FM.float_2_1_1(i, j), [_d[0] + _e[0], _d[1] + _e[1]]);\n                    var cellPos = (_f = cell, _g = hash2(cell), [_f[0] + _g, _f[1] + _g]);\n                    var toCell = (_h = cellPos, _j = v, [_h[0] - _j[0], _h[1] - _j[1]]);\n                    var dst = (0, std_math_1.length)(toCell);\n                    if (dst < minDist) {\n                        minDist = dst;\n                        toClose = toCell;\n                        closestCell = cell;\n                    }\n                }\n            }\n            var minEdge = 10.0;\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_k = n, _l = __.FM.float_2_1_1(i, j), [_k[0] + _l[0], _k[1] + _l[1]]);\n                    var cellPos = (_m = cell, _o = hash2(cell), [_m[0] + _o, _m[1] + _o]);\n                    var toCell = (_p = cellPos, _q = v, [_p[0] - _q[0], _p[1] - _q[1]]);\n                    var diff = (_r = (_s = closestCell, _t = cell, [_s[0] - _t[0], _s[1] - _t[1]]), [Math.abs(_r[0]), Math.abs(_r[1])]);\n                    var isClosest = diff[0] + diff[1] < 0.1;\n                    if (__.not(isClosest)) {\n                        var toCenter = (_u = (_w = toClose, _x = toCell, [_w[0] + _x[0], _w[1] + _x[1]]), _v = 0.5, [_u[0] * _v, _u[1] * _v]);\n                        var cellDiff = (0, std_math_1.normalize)((_y = toCell, _z = toClose, [_y[0] - _z[0], _y[1] - _z[1]]));\n                        var edge = (0, std_math_1.dot)(toCenter, cellDiff);\n                        minEdge = (0, std_math_1.min)(minEdge, edge);\n                    }\n                }\n            }\n            var random = hash2(closestCell);\n            return __.FM.float_3_1_1_1(minDist, random, minEdge);\n        };\n        noise.simplex3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.138196601125011), __.float(0.276393202250021), __.float(0.414589803375032), __.negate(0.447213595499958));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1], _d[1]])), [_b[0] + _c, _b[1] + _c, _b[2] + _c]), [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0], _j[0]])), [_e[0] + _f, _e[1] + _f, _e[2] + _f]);\n            var g = (0, std_math_1.step)((_k = x0, [_k[1], _k[2], _k[0]]), (_l = x0, [_l[0], _l[1], _l[2]]));\n            var l = (_m = 1.0, _o = g, [_m - _o[0], _m - _o[1], _m - _o[2]]);\n            var i1 = (0, std_math_1.min)((_p = g, [_p[0], _p[1], _p[2]]), (_q = l, [_q[2], _q[0], _q[1]]));\n            var i2 = (0, std_math_1.max)((_r = g, [_r[0], _r[1], _r[2]]), (_s = l, [_s[2], _s[0], _s[1]]));\n            var x1 = (_t = (_v = x0, _w = i1, [_v[0] - _w[0], _v[1] - _w[1], _v[2] - _w[2]]), _u = (_x = 1.0, _y = (_z = C, [_z[0], _z[0], _z[0]]), [_x * _y[0], _x * _y[1], _x * _y[2]]), [_t[0] + _u[0], _t[1] + _u[1], _t[2] + _u[2]]);\n            var x2 = (_0 = (_2 = x0, _3 = i2, [_2[0] - _3[0], _2[1] - _3[1], _2[2] - _3[2]]), _1 = (_4 = 2.0, _5 = (_6 = C, [_6[0], _6[0], _6[0]]), [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), [_0[0] + _1[0], _0[1] + _1[1], _0[2] + _1[2]]);\n            var x3 = (_7 = (_9 = x0, _10 = 1., [_9[0] - _10, _9[1] - _10, _9[2] - _10]), _8 = (_11 = 3.0, _12 = (_13 = C, [_13[0], _13[0], _13[0]]), [_11 * _12[0], _11 * _12[1], _11 * _12[2]]), [_7[0] + _8[0], _7[1] + _8[1], _7[2] + _8[2]]);\n            i = mod289_3(i);\n            var p = permute((_14 = (_16 = permute((_18 = (_20 = permute((_22 = i[2], _23 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'z'), __.swizzle(i2, 'z')), [_22 + _23[0], _22 + _23[1], _22 + _23[2]])), _21 = i[1], [_20[0] + _21, _20[1] + _21, _20[2] + _21]), _19 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.swizzle(i2, 'y')), [_18[0] + _19[0], _18[1] + _19[1], _18[2] + _19[2]])), _17 = i[0], [_16[0] + _17, _16[1] + _17, _16[2] + _17]), _15 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.swizzle(i2, 'x')), [_14[0] + _15[0], _14[1] + _15[1], _14[2] + _15[2]]));\n            var m = (0, std_math_1.max)((_24 = 0.5, _25 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_24 - _25[0], _24 - _25[1], _24 - _25[2]]), 0.0);\n            m = (_26 = m, _27 = m, [_26[0] * _27[0], _26[1] * _27[1], _26[2] * _27[2]]);\n            m = (_28 = m, _29 = m, [_28[0] * _29[0], _28[1] * _29[1], _28[2] * _29[2]]);\n            var x = (_30 = (_32 = 2.0, _33 = (0, std_math_1.frac)((_34 = p, _35 = (_36 = C, [_36[3], _36[3], _36[3]]), [_34[0] * _35[0], _34[1] * _35[1], _34[2] * _35[2]])), [_32 * _33[0], _32 * _33[1], _32 * _33[2]]), _31 = 1.0, [_30[0] - _31, _30[1] - _31, _30[2] - _31]);\n            var h = (_37 = (_39 = x, [Math.abs(_39[0]), Math.abs(_39[1]), Math.abs(_39[2])]), _38 = 0.5, [_37[0] - _38, _37[1] - _38, _37[2] - _38]);\n            var ox = (_40 = (_41 = x, _42 = 0.5, [_41[0] + _42, _41[1] + _42, _41[2] + _42]), [Math.floor(_40[0]), Math.floor(_40[1]), Math.floor(_40[2])]);\n            var a0 = (_43 = x, _44 = ox, [_43[0] - _44[0], _43[1] - _44[1], _43[2] - _44[2]]);\n            // Normalise gradients implicitly by scaling m\n            // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\n            m = (_45 = m, _46 = (_47 = 1.79284291400159, _48 = (_49 = 0.85373472095314, _50 = (_51 = (_53 = a0, _54 = a0, [_53[0] * _54[0], _53[1] * _54[1], _53[2] * _54[2]]), _52 = (_55 = h, _56 = h, [_55[0] * _56[0], _55[1] * _56[1], _55[2] * _56[2]]), [_51[0] + _52[0], _51[1] + _52[1], _51[2] + _52[2]]), [_49 * _50[0], _49 * _50[1], _49 * _50[2]]), [_47 - _48[0], _47 - _48[1], _47 - _48[2]]), [_45[0] * _46[0], _45[1] * _46[1], _45[2] * _46[2]]);\n            // Compute final noise value at P\n            var g2 = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g2);\n        };\n        noise.prototype.clone = function () {\n            return new noise({});\n        };\n        noise.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_26913_noise\\\",\\\"fields\\\":[]}\");\n        };\n        return noise;\n    }());\n    exports.noise = noise;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_26913_noise\\\",\\\"fields\\\":[]}\"), noise)\n    ;\n    var PERLIN_YWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAPB\", function () { return (4 | 0); }, function () { return PERLIN_YWRAPB; }) | 0);\n    var PERLIN_YWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAP\", function () { return (1 | 0) << PERLIN_YWRAPB; }, function () { return PERLIN_YWRAP; }) | 0);\n    var PERLIN_ZWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAPB\", function () { return (8 | 0); }, function () { return PERLIN_ZWRAPB; }) | 0);\n    var PERLIN_ZWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAP\", function () { return (1 | 0) << PERLIN_ZWRAPB; }, function () { return PERLIN_ZWRAP; }) | 0);\n    var PERLIN_SIZE = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_SIZE\", function () { return (4095 | 0); }, function () { return PERLIN_SIZE; }) | 0);\n    var perlin_octaves = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_octaves\", function () { return (4 | 0); }, function () { return perlin_octaves; }) | 0);\n    // default to medium smooth\n    var perlin_amp_falloff = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_amp_falloff\", function () { return 0.5; }, function () { return perlin_amp_falloff; });\n    // 50% reduction/octave\n    function scaled_cosine(i) { return 0.5 * (1.0 - Math.cos(i * PI)); }\n    var perlin = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin\", function () { return (0, buffer_1.buffer)(PERLIN_SIZE + (1 | 0), \"float\", __assign({}, JSON.parse(\"{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}\"))); }, function () { return perlin; });\n    for (var i = (0 | 0); i < PERLIN_SIZE + (1 | 0); i++) {\n        perlin.__index_assign(i, (0, std_math_1.rand)(i));\n    } //\t<https://www.shadertoy.com/view/4dS3Wd>\n    //\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\n    //\n    function hash(n) { return (0, std_math_1.frac)(Math.sin(n) * (1e4 | 0)); }\n    function hash2(p) { return (0, std_math_1.frac)((1e4 | 0) * Math.sin(17.0 * p[0] + p[1] * 0.1) * (0.1 + Math.abs(Math.sin(p[1] * 13.0 + p[0])))); }\n    function hash3(p) {\n        var h = (0, std_math_1.dot)(p, __.FM.float_3_1_1_1(__.float(127.1), __.float(311.7), __.float(74.7)));\n        return (0, std_math_1.frac)(Math.sin(h) * 43758.5453123);\n    }\n    /* impl noise */\n    function mod289_1(x) { return x - Math.floor(x * (1.0 / 289.0)) * 289.0; }\n    function mod289_4(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g, _f[3] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2]), Math.floor(_e[3])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2], _a[3] - _b[3]]; }\n    function perm(x) { var _a, _b, _c, _d, _e, _f; return mod289_4((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f, _e[3] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d, _c[3] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]])); }\n    function mod289_3(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]; }\n    function mod289_2(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g]), [Math.floor(_e[0]), Math.floor(_e[1])]), _d = 289.0, [_c[0] * _d, _c[1] * _d]), [_a[0] - _b[0], _a[1] - _b[1]]; }\n    function permute(x) { var _a, _b, _c, _d, _e, _f; return mod289_3((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2]])); }\n    function taylorInvSqrt(r) { var _a, _b, _c, _d; return _a = 1.79284291400159, _b = (_c = 0.85373472095314, _d = r, [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]; }\n    var matrix = /** @class */ (function () {\n        function matrix(data) {\n        }\n        matrix.lookAt = function (from, to, up) {\n            var _a, _b, _c, _d;\n            var zAxis = (0, std_math_1.normalize)((_a = from, _b = to, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]));\n            var xAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(up, zAxis));\n            var yAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(zAxis, xAxis));\n            var dst = __.float4x4();\n            dst.__index((0 | 0)).__index_assign((0 | 0), xAxis[0]);\n            dst.__index((0 | 0)).__index_assign((1 | 0), yAxis[0]);\n            dst.__index((0 | 0)).__index_assign((2 | 0), zAxis[0]);\n            dst.__index((0 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((1 | 0)).__index_assign((0 | 0), xAxis[1]);\n            dst.__index((1 | 0)).__index_assign((1 | 0), yAxis[1]);\n            dst.__index((1 | 0)).__index_assign((2 | 0), zAxis[1]);\n            dst.__index((1 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((2 | 0)).__index_assign((0 | 0), xAxis[2]);\n            dst.__index((2 | 0)).__index_assign((1 | 0), yAxis[2]);\n            dst.__index((2 | 0)).__index_assign((2 | 0), zAxis[2]);\n            dst.__index((2 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((3 | 0)).__index_assign((0 | 0), (__.FM.negate_1((xAxis[0] * from[0] + xAxis[1] * from[1] + xAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((1 | 0), (__.FM.negate_1((yAxis[0] * from[0] + yAxis[1] * from[1] + yAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((2 | 0), (__.FM.negate_1((zAxis[0] * from[0] + zAxis[1] * from[1] + zAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((3 | 0), (1 | 0));\n            return dst;\n            var forward = (0, std_math_1.normalize)((_c = from, _d = to, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]));\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(up, forward));\n            var newup = (0, std_math_1.cross)(forward, right);\n            var m = __.float4x4();\n            m.__index((0 | 0)).__index_assign((0 | 0), right[0]), m.__index((0 | 0)).__index_assign((1 | 0), right[1]), m.__index((0 | 0)).__index_assign((2 | 0), right[2]);\n            m.__index((1 | 0)).__index_assign((0 | 0), newup[0]), m.__index((1 | 0)).__index_assign((1 | 0), newup[1]), m.__index((1 | 0)).__index_assign((2 | 0), newup[2]);\n            m.__index((2 | 0)).__index_assign((0 | 0), forward[0]), m.__index((2 | 0)).__index_assign((1 | 0), forward[1]), m.__index((2 | 0)).__index_assign((2 | 0), forward[2]);\n            m.__index((3 | 0)).__index_assign((0 | 0), from[0]), m.__index((3 | 0)).__index_assign((1 | 0), from[1]), m.__index((3 | 0)).__index_assign((2 | 0), from[2]);\n            return m;\n        };\n        matrix.perspective = function (fov, aspect, near, far) {\n            // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = -1;  //set w = -z \n            // M[3][3] = 0; \n            //return M;\n            var fovRad = (0, std_math_1.radians)(fov);\n            var tanFov = Math.tan(fovRad * 0.5);\n            var matrx = __.float4x4(1.0 / (tanFov * aspect), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0 / tanFov, (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1(((far + near) / (far - near)))), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (__.FM.negate_1((((2 | 0) * (near * far)) / (far - near)))), (0 | 0));\n            return matrx;\n        };\n        matrix.perspectiveReverseZ = function (fov, aspect, near) {\n            // let far = 10000000.0;\n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = 0;  //set w = -z \n            // M[3][3] = 0; \n            // return M;\n            var matrx = __.mul(__.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (1 | 0)), matrix.perspective(fov, aspect, near, 10000000.0));\n            return matrx;\n        };\n        matrix.prototype.clone = function () {\n            return new matrix({});\n        };\n        matrix.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_44684_matrix\\\",\\\"fields\\\":[]}\");\n        };\n        return matrix;\n    }());\n    exports.matrix = matrix;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_44684_matrix\\\",\\\"fields\\\":[]}\"), matrix)\n    ; /* impl matrix */\n    /**\n    * Uses Super Sampling Anti Aliasing to smooth out the image.\n    */\n    function screenAA(inScreenPos, gridSize, func) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        var weightSum = 0.0;\n        var accumulatedColor = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(0));\n        for (var y = (0 | 0); y < gridSize; y++) {\n            for (var x = (0 | 0); x < gridSize; x++) {\n                var offset = __.FM.float_2_1_1(__.div((x + 0.5 - gridSize * 0.5), gridSize), __.div((y + 0.5 - gridSize * 0.5), gridSize));\n                var weight = Math.exp((__.FM.negate_1((0, std_math_1.dot)(offset, offset))) * (5 | 0));\n                // Gaussian weight\n                accumulatedColor = (_a = accumulatedColor, _b = (_c = func((_e = inScreenPos, _f = offset, [_e[0] + _f[0], _e[1] + _f[1]])), _d = weight, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2], _a[3] + _b[3]]);\n                weightSum = weightSum + weight;\n            }\n        }\n        return _g = accumulatedColor, _h = weightSum, [_g[0] / _h, _g[1] / _h, _g[2] / _h, _g[3] / _h];\n    }\n    exports.screenAA = screenAA;\n    ; // Color conversion helpers\n    // A color = float4 containing rgba values in the range [0, 1]\n    // All functions have an extra alpha functon and a reverse\n    // i.e. hsl, hsla, hslFromColor, hslaFromColor\n    // fn hsl(v: float3) -> float4\n    function hsl(v) { return hsla(__.makeVector(v, (1 | 0))); }\n    exports.hsl = hsl;\n    ;\n    function hsla(v) {\n        var h = v[0];\n        var s = v[1];\n        var l = v[2];\n        var a = v[3];\n        var c = ((1 | 0) - Math.abs((2 | 0) * l - (1 | 0))) * s;\n        var x = c * ((1 | 0) - Math.abs(((h / (60 | 0)) % (2 | 0)) - (1 | 0)));\n        var m = l - c / (2 | 0);\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsla = hsla;\n    ;\n    function hslFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var a = c[3];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var l = (mx + mn) / (2 | 0);\n        if (mx == mn) {\n            h = (0 | 0);\n            s = (0 | 0);\n        }\n        else {\n            var d = mx - mn;\n            s = (l > 0.5) ? d / ((2 | 0) - mx - mn) : d / (mx + mn);\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, l);\n    }\n    exports.hslFromColor = hslFromColor;\n    ;\n    function hslaFromColor(c) {\n        var hsl = hslFromColor(c);\n        return __.FM.float_4_3_1(hsl, __.swizzle(c, 'a'));\n    }\n    exports.hslaFromColor = hslaFromColor;\n    ;\n    function hsv(v) { return hsva(__.makeVector(v, (1 | 0))); }\n    exports.hsv = hsv;\n    ;\n    function hsva(val) {\n        var h = val[0];\n        var s = val[1];\n        var v = val[2];\n        var a = val[3];\n        var c = v * s;\n        var x = c * ((1 | 0) - Math.abs(h / (60 | 0) % (2 | 0) - (1 | 0)));\n        var m = v - c;\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsva = hsva;\n    ;\n    function hsvFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var v = mx;\n        var d = mx - mn;\n        s = (mx == (0 | 0)) ? (0 | 0) : d / mx;\n        if (mx == mn) {\n            h = (0 | 0);\n        }\n        else {\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, v);\n    }\n    exports.hsvFromColor = hsvFromColor;\n    ;\n    function hsvaFromColor(c) {\n        var hsv = hsvFromColor(c);\n        return __.FM.float_4_3_1(hsv, __.swizzle(c, 'a'));\n    }\n    exports.hsvaFromColor = hsvaFromColor;\n    ;\n    function rgb(v) { return __.FM.float_4_3_1(__.div(v, 255.0), __.int(1)); }\n    exports.rgb = rgb;\n    ;\n    function rgba(v) { return __.FM.float_4_4(__.div(v, 255.0)); }\n    exports.rgba = rgba;\n    ;\n    function rgbFromColor(c) { var _a, _b, _c; return _a = (_c = c, [_c[0], _c[1], _c[2]]), _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b]; }\n    exports.rgbFromColor = rgbFromColor;\n    ;\n    function rgbaFromColor(c) { var _a, _b; return _a = c, _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b, _a[3] * _b]; }\n    exports.rgbaFromColor = rgbaFromColor;\n    ;\n    function cmyk(v) {\n        var c = v[0];\n        var m = v[1];\n        var y = v[2];\n        var k = v[3];\n        var r = (1 | 0) - (0, std_math_1.min)((1 | 0), c * ((1 | 0) - k) + k);\n        var g = (1 | 0) - (0, std_math_1.min)((1 | 0), m * ((1 | 0) - k) + k);\n        var b = (1 | 0) - (0, std_math_1.min)((1 | 0), y * ((1 | 0) - k) + k);\n        return __.FM.float_4_1_1_1_1(r, g, b, __.int(1));\n    }\n    exports.cmyk = cmyk;\n    ;\n    function cmykFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var k = (1 | 0) - (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var c1 = ((1 | 0) - r - k) / ((1 | 0) - k);\n        var m = ((1 | 0) - g - k) / ((1 | 0) - k);\n        var y = ((1 | 0) - b - k) / ((1 | 0) - k);\n        return __.FM.float_4_1_1_1_1(c1, m, y, k);\n    }\n    exports.cmykFromColor = cmykFromColor;\n    ;\n    function hex(v) {\n        var r = (v >> (16 | 0)) & (0xFF | 0);\n        var g = (v >> (8 | 0)) & (0xFF | 0);\n        var b = v & (0xFF | 0);\n        return __.FM.float_4_1_1_1_1(__.div(r, 255.0), __.div(g, 255.0), __.div(b, 255.0), __.float(1.0));\n    }\n    exports.hex = hex;\n    ;\n    function hexFromColor(c) {\n        var r = (__.mul(c[0], 255.0) | 0);\n        var g = (__.mul(c[1], 255.0) | 0);\n        var b = (__.mul(c[2], 255.0) | 0);\n        return (r << (16 | 0)) | (g << (8 | 0)) | b;\n    }\n    exports.hexFromColor = hexFromColor;\n    ; /**\n    * Returns sin remapped to [0, 1]\n    */\n    function sin1(v) { return (Math.sin(v) + (1 | 0)) * 0.5; }\n    exports.sin1 = sin1;\n    ; /**\n    * Returns cos remapped to [0, 1]\n    */\n    function cos1(v) { return (Math.cos(v) + (1 | 0)) * 0.5; }\n    exports.cos1 = cos1;\n    ; /**\n    * Returns tan remapped to [0, 1]\n    */\n    function tan1(v) { return (Math.tan(v) + (1 | 0)) * 0.5; }\n    exports.tan1 = tan1;\n    ;\n    function remap(v, low1, high1, low2, high2) { return low2 + (v - low1) * (high2 - low2) / (high1 - low1); }\n    exports.remap = remap;\n    ;\n    function remap1(v, low, high) { return remap(v, low, high, (0 | 0), (1 | 0)); }\n    exports.remap1 = remap1;\n    ;\n    var color = /** @class */ (function () {\n        function color(data) {\n        }\n        color.prototype.clone = function () {\n            return new color({});\n        };\n        color.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_57436_color\\\",\\\"fields\\\":[[\\\"slate50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\");\n        };\n        color.slate50 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.9803921568627451), __.float(0.9882352941176471), __.int(1));\n        color.slate100 = __.FM.float_4_1_1_1_1(__.float(0.9450980392156862), __.float(0.9607843137254902), __.float(0.9764705882352941), __.int(1));\n        color.slate200 = __.FM.float_4_1_1_1_1(__.float(0.8862745098039215), __.float(0.9098039215686274), __.float(0.9411764705882353), __.int(1));\n        color.slate300 = __.FM.float_4_1_1_1_1(__.float(0.796078431372549), __.float(0.8352941176470589), __.float(0.8823529411764706), __.int(1));\n        color.slate400 = __.FM.float_4_1_1_1_1(__.float(0.5803921568627451), __.float(0.6392156862745098), __.float(0.7215686274509804), __.int(1));\n        color.slate500 = __.FM.float_4_1_1_1_1(__.float(0.39215686274509803), __.float(0.4549019607843137), __.float(0.5450980392156862), __.int(1));\n        color.slate600 = __.FM.float_4_1_1_1_1(__.float(0.2784313725490196), __.float(0.3333333333333333), __.float(0.4117647058823529), __.int(1));\n        color.slate700 = __.FM.float_4_1_1_1_1(__.float(0.2), __.float(0.2549019607843137), __.float(0.3333333333333333), __.int(1));\n        color.slate800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.1607843137254902), __.float(0.23137254901960785), __.int(1));\n        color.slate900 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.09019607843137255), __.float(0.16470588235294117), __.int(1));\n        color.slate950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.023529411764705882), __.float(0.09019607843137255), __.int(1));\n        color.gray50 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.9803921568627451), __.float(0.984313725490196), __.int(1));\n        color.gray100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9568627450980393), __.float(0.9647058823529412), __.int(1));\n        color.gray200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.9058823529411765), __.float(0.9215686274509803), __.int(1));\n        color.gray300 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.8352941176470589), __.float(0.8588235294117647), __.int(1));\n        color.gray400 = __.FM.float_4_1_1_1_1(__.float(0.611764705882353), __.float(0.6392156862745098), __.float(0.6862745098039216), __.int(1));\n        color.gray500 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.4470588235294118), __.float(0.5019607843137255), __.int(1));\n        color.gray600 = __.FM.float_4_1_1_1_1(__.float(0.29411764705882354), __.float(0.3333333333333333), __.float(0.38823529411764707), __.int(1));\n        color.gray700 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.2549019607843137), __.float(0.3176470588235294), __.int(1));\n        color.gray800 = __.FM.float_4_1_1_1_1(__.float(0.12156862745098039), __.float(0.1607843137254902), __.float(0.21568627450980393), __.int(1));\n        color.gray900 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.09411764705882353), __.float(0.15294117647058825), __.int(1));\n        color.gray950 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.027450980392156862), __.float(0.07058823529411765), __.int(1));\n        color.zinc50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.zinc100 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.9568627450980393), __.float(0.9607843137254902), __.int(1));\n        color.zinc200 = __.FM.float_4_1_1_1_1(__.float(0.8941176470588236), __.float(0.8941176470588236), __.float(0.9058823529411765), __.int(1));\n        color.zinc300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8470588235294118), __.int(1));\n        color.zinc400 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.6313725490196078), __.float(0.6666666666666666), __.int(1));\n        color.zinc500 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.44313725490196076), __.float(0.47843137254901963), __.int(1));\n        color.zinc600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3568627450980392), __.int(1));\n        color.zinc700 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.24705882352941178), __.float(0.27450980392156865), __.int(1));\n        color.zinc800 = __.FM.float_4_1_1_1_1(__.float(0.15294117647058825), __.float(0.15294117647058825), __.float(0.16470588235294117), __.int(1));\n        color.zinc900 = __.FM.float_4_1_1_1_1(__.float(0.09411764705882353), __.float(0.09411764705882353), __.float(0.10588235294117647), __.int(1));\n        color.zinc950 = __.FM.float_4_1_1_1_1(__.float(0.03529411764705882), __.float(0.03529411764705882), __.float(0.043137254901960784), __.int(1));\n        color.neutral50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.neutral100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9607843137254902), __.int(1));\n        color.neutral200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.8980392156862745), __.float(0.8980392156862745), __.int(1));\n        color.neutral300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8313725490196079), __.int(1));\n        color.neutral400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.6392156862745098), __.float(0.6392156862745098), __.int(1));\n        color.neutral500 = __.FM.float_4_1_1_1_1(__.float(0.45098039215686275), __.float(0.45098039215686275), __.float(0.45098039215686275), __.int(1));\n        color.neutral600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3215686274509804), __.int(1));\n        color.neutral700 = __.FM.float_4_1_1_1_1(__.float(0.25098039215686274), __.float(0.25098039215686274), __.float(0.25098039215686274), __.int(1));\n        color.neutral800 = __.FM.float_4_1_1_1_1(__.float(0.14901960784313725), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.neutral900 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.09019607843137255), __.float(0.09019607843137255), __.int(1));\n        color.neutral950 = __.FM.float_4_1_1_1_1(__.float(0.0392156862745098), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.stone50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9764705882352941), __.int(1));\n        color.stone100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9568627450980393), __.int(1));\n        color.stone200 = __.FM.float_4_1_1_1_1(__.float(0.9058823529411765), __.float(0.8980392156862745), __.float(0.8941176470588236), __.int(1));\n        color.stone300 = __.FM.float_4_1_1_1_1(__.float(0.8392156862745098), __.float(0.8274509803921568), __.float(0.8196078431372549), __.int(1));\n        color.stone400 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.6352941176470588), __.float(0.6196078431372549), __.int(1));\n        color.stone500 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.44313725490196076), __.float(0.4235294117647059), __.int(1));\n        color.stone600 = __.FM.float_4_1_1_1_1(__.float(0.3411764705882353), __.float(0.3254901960784314), __.float(0.3058823529411765), __.int(1));\n        color.stone700 = __.FM.float_4_1_1_1_1(__.float(0.26666666666666666), __.float(0.25098039215686274), __.float(0.23529411764705882), __.int(1));\n        color.stone800 = __.FM.float_4_1_1_1_1(__.float(0.1607843137254902), __.float(0.1450980392156863), __.float(0.1411764705882353), __.int(1));\n        color.stone900 = __.FM.float_4_1_1_1_1(__.float(0.10980392156862745), __.float(0.09803921568627451), __.float(0.09019607843137255), __.int(1));\n        color.stone950 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.0392156862745098), __.float(0.03529411764705882), __.int(1));\n        color.red50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9490196078431372), __.float(0.9490196078431372), __.int(1));\n        color.red100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8862745098039215), __.float(0.8862745098039215), __.int(1));\n        color.red200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.792156862745098), __.float(0.792156862745098), __.int(1));\n        color.red300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.6470588235294118), __.float(0.6470588235294118), __.int(1));\n        color.red400 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.44313725490196076), __.float(0.44313725490196076), __.int(1));\n        color.red500 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.26666666666666666), __.float(0.26666666666666666), __.int(1));\n        color.red600 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.red700 = __.FM.float_4_1_1_1_1(__.float(0.7254901960784313), __.float(0.10980392156862745), __.float(0.10980392156862745), __.int(1));\n        color.red800 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.10588235294117647), __.float(0.10588235294117647), __.int(1));\n        color.red900 = __.FM.float_4_1_1_1_1(__.float(0.4980392156862745), __.float(0.11372549019607843), __.float(0.11372549019607843), __.int(1));\n        color.red950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.orange50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9686274509803922), __.float(0.9294117647058824), __.int(1));\n        color.orange100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9294117647058824), __.float(0.8352941176470589), __.int(1));\n        color.orange200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8431372549019608), __.float(0.6666666666666666), __.int(1));\n        color.orange300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.7294117647058823), __.float(0.4549019607843137), __.int(1));\n        color.orange400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.5725490196078431), __.float(0.23529411764705882), __.int(1));\n        color.orange500 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.45098039215686275), __.float(0.08627450980392157), __.int(1));\n        color.orange600 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.34509803921568627), __.float(0.047058823529411764), __.int(1));\n        color.orange700 = __.FM.float_4_1_1_1_1(__.float(0.7607843137254902), __.float(0.2549019607843137), __.float(0.047058823529411764), __.int(1));\n        color.orange800 = __.FM.float_4_1_1_1_1(__.float(0.6039215686274509), __.float(0.20392156862745098), __.float(0.07058823529411765), __.int(1));\n        color.orange900 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.17647058823529413), __.float(0.07058823529411765), __.int(1));\n        color.orange950 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.0784313725490196), __.float(0.027450980392156862), __.int(1));\n        color.amber50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.984313725490196), __.float(0.9215686274509803), __.int(1));\n        color.amber100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9529411764705882), __.float(0.7803921568627451), __.int(1));\n        color.amber200 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9019607843137255), __.float(0.5411764705882353), __.int(1));\n        color.amber300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.8274509803921568), __.float(0.30196078431372547), __.int(1));\n        color.amber400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.7490196078431373), __.float(0.1411764705882353), __.int(1));\n        color.amber500 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.6196078431372549), __.float(0.043137254901960784), __.int(1));\n        color.amber600 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.4666666666666667), __.float(0.023529411764705882), __.int(1));\n        color.amber700 = __.FM.float_4_1_1_1_1(__.float(0.7058823529411765), __.float(0.3254901960784314), __.float(0.03529411764705882), __.int(1));\n        color.amber800 = __.FM.float_4_1_1_1_1(__.float(0.5725490196078431), __.float(0.25098039215686274), __.float(0.054901960784313725), __.int(1));\n        color.amber900 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.20784313725490197), __.float(0.058823529411764705), __.int(1));\n        color.amber950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.10196078431372549), __.float(0.011764705882352941), __.int(1));\n        color.yellow50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9882352941176471), __.float(0.9098039215686274), __.int(1));\n        color.yellow100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9764705882352941), __.float(0.7647058823529411), __.int(1));\n        color.yellow200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9411764705882353), __.float(0.5411764705882353), __.int(1));\n        color.yellow300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.8784313725490196), __.float(0.2784313725490196), __.int(1));\n        color.yellow400 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.8), __.float(0.08235294117647059), __.int(1));\n        color.yellow500 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.7019607843137254), __.float(0.03137254901960784), __.int(1));\n        color.yellow600 = __.FM.float_4_1_1_1_1(__.float(0.792156862745098), __.float(0.5411764705882353), __.float(0.01568627450980392), __.int(1));\n        color.yellow700 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.3843137254901961), __.float(0.027450980392156862), __.int(1));\n        color.yellow800 = __.FM.float_4_1_1_1_1(__.float(0.5215686274509804), __.float(0.30196078431372547), __.float(0.054901960784313725), __.int(1));\n        color.yellow900 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.24705882352941178), __.float(0.07058823529411765), __.int(1));\n        color.yellow950 = __.FM.float_4_1_1_1_1(__.float(0.25882352941176473), __.float(0.12549019607843137), __.float(0.023529411764705882), __.int(1));\n        color.lime50 = __.FM.float_4_1_1_1_1(__.float(0.9686274509803922), __.float(0.996078431372549), __.float(0.9058823529411765), __.int(1));\n        color.lime100 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9882352941176471), __.float(0.796078431372549), __.int(1));\n        color.lime200 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.9764705882352941), __.float(0.615686274509804), __.int(1));\n        color.lime300 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.9490196078431372), __.float(0.39215686274509803), __.int(1));\n        color.lime400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.9019607843137255), __.float(0.20784313725490197), __.int(1));\n        color.lime500 = __.FM.float_4_1_1_1_1(__.float(0.5176470588235295), __.float(0.8), __.float(0.08627450980392157), __.int(1));\n        color.lime600 = __.FM.float_4_1_1_1_1(__.float(0.396078431372549), __.float(0.6392156862745098), __.float(0.050980392156862744), __.int(1));\n        color.lime700 = __.FM.float_4_1_1_1_1(__.float(0.30196078431372547), __.float(0.48627450980392156), __.float(0.058823529411764705), __.int(1));\n        color.lime800 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.3843137254901961), __.float(0.07058823529411765), __.int(1));\n        color.lime900 = __.FM.float_4_1_1_1_1(__.float(0.21176470588235294), __.float(0.3254901960784314), __.float(0.0784313725490196), __.int(1));\n        color.lime950 = __.FM.float_4_1_1_1_1(__.float(0.10196078431372549), __.float(0.1803921568627451), __.float(0.0196078431372549), __.int(1));\n        color.green50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1));\n        color.green100 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.9882352941176471), __.float(0.9058823529411765), __.int(1));\n        color.green200 = __.FM.float_4_1_1_1_1(__.float(0.7333333333333333), __.float(0.9686274509803922), __.float(0.8156862745098039), __.int(1));\n        color.green300 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.9372549019607843), __.float(0.6745098039215687), __.int(1));\n        color.green400 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.8705882352941177), __.float(0.5019607843137255), __.int(1));\n        color.green500 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.7725490196078432), __.float(0.3686274509803922), __.int(1));\n        color.green600 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.6392156862745098), __.float(0.2901960784313726), __.int(1));\n        color.green700 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.5019607843137255), __.float(0.23921568627450981), __.int(1));\n        color.green800 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.396078431372549), __.float(0.20392156862745098), __.int(1));\n        color.green900 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.3254901960784314), __.float(0.17647058823529413), __.int(1));\n        color.green950 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.1803921568627451), __.float(0.08627450980392157), __.int(1));\n        color.emerald50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9921568627450981), __.float(0.9607843137254902), __.int(1));\n        color.emerald100 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.9803921568627451), __.float(0.8980392156862745), __.int(1));\n        color.emerald200 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.9529411764705882), __.float(0.8156862745098039), __.int(1));\n        color.emerald300 = __.FM.float_4_1_1_1_1(__.float(0.43137254901960786), __.float(0.9058823529411765), __.float(0.7176470588235294), __.int(1));\n        color.emerald400 = __.FM.float_4_1_1_1_1(__.float(0.20392156862745098), __.float(0.8274509803921568), __.float(0.6), __.int(1));\n        color.emerald500 = __.FM.float_4_1_1_1_1(__.float(0.06274509803921569), __.float(0.7254901960784313), __.float(0.5058823529411764), __.int(1));\n        color.emerald600 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.5882352941176471), __.float(0.4117647058823529), __.int(1));\n        color.emerald700 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.47058823529411764), __.float(0.3411764705882353), __.int(1));\n        color.emerald800 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.37254901960784315), __.float(0.27450980392156865), __.int(1));\n        color.emerald900 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.3058823529411765), __.float(0.23137254901960785), __.int(1));\n        color.emerald950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.17254901960784313), __.float(0.13333333333333333), __.int(1));\n        color.teal50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9803921568627451), __.int(1));\n        color.teal100 = __.FM.float_4_1_1_1_1(__.float(0.8), __.float(0.984313725490196), __.float(0.9450980392156862), __.int(1));\n        color.teal200 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.9647058823529412), __.float(0.8941176470588236), __.int(1));\n        color.teal300 = __.FM.float_4_1_1_1_1(__.float(0.3686274509803922), __.float(0.9176470588235294), __.float(0.8313725490196079), __.int(1));\n        color.teal400 = __.FM.float_4_1_1_1_1(__.float(0.17647058823529413), __.float(0.8313725490196079), __.float(0.7490196078431373), __.int(1));\n        color.teal500 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.7215686274509804), __.float(0.6509803921568628), __.int(1));\n        color.teal600 = __.FM.float_4_1_1_1_1(__.float(0.050980392156862744), __.float(0.5803921568627451), __.float(0.5333333333333333), __.int(1));\n        color.teal700 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.4627450980392157), __.float(0.43137254901960786), __.int(1));\n        color.teal800 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.3686274509803922), __.float(0.34901960784313724), __.int(1));\n        color.teal900 = __.FM.float_4_1_1_1_1(__.float(0.07450980392156863), __.float(0.3058823529411765), __.float(0.2901960784313726), __.int(1));\n        color.teal950 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.1843137254901961), __.float(0.1803921568627451), __.int(1));\n        color.cyan50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.996078431372549), __.int(1), __.int(1));\n        color.cyan100 = __.FM.float_4_1_1_1_1(__.float(0.8117647058823529), __.float(0.9803921568627451), __.float(0.996078431372549), __.int(1));\n        color.cyan200 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.9529411764705882), __.float(0.9882352941176471), __.int(1));\n        color.cyan300 = __.FM.float_4_1_1_1_1(__.float(0.403921568627451), __.float(0.9098039215686274), __.float(0.9764705882352941), __.int(1));\n        color.cyan400 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.8274509803921568), __.float(0.9333333333333333), __.int(1));\n        color.cyan500 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.7137254901960784), __.float(0.8313725490196079), __.int(1));\n        color.cyan600 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.5686274509803921), __.float(0.6980392156862745), __.int(1));\n        color.cyan700 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.4549019607843137), __.float(0.5647058823529412), __.int(1));\n        color.cyan800 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.3686274509803922), __.float(0.4588235294117647), __.int(1));\n        color.cyan900 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.3058823529411765), __.float(0.38823529411764707), __.int(1));\n        color.cyan950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.2), __.float(0.26666666666666666), __.int(1));\n        color.sky50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9764705882352941), __.int(1), __.int(1));\n        color.sky100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9490196078431372), __.float(0.996078431372549), __.int(1));\n        color.sky200 = __.FM.float_4_1_1_1_1(__.float(0.7294117647058823), __.float(0.9019607843137255), __.float(0.9921568627450981), __.int(1));\n        color.sky300 = __.FM.float_4_1_1_1_1(__.float(0.49019607843137253), __.float(0.8274509803921568), __.float(0.9882352941176471), __.int(1));\n        color.sky400 = __.FM.float_4_1_1_1_1(__.float(0.2196078431372549), __.float(0.7411764705882353), __.float(0.9725490196078431), __.int(1));\n        color.sky500 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.6470588235294118), __.float(0.9137254901960784), __.int(1));\n        color.sky600 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.5176470588235295), __.float(0.7803921568627451), __.int(1));\n        color.sky700 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.4117647058823529), __.float(0.6313725490196078), __.int(1));\n        color.sky800 = __.FM.float_4_1_1_1_1(__.float(0.027450980392156862), __.float(0.34901960784313724), __.float(0.5215686274509804), __.int(1));\n        color.sky900 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.2901960784313726), __.float(0.43137254901960786), __.int(1));\n        color.sky950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.1843137254901961), __.float(0.28627450980392155), __.int(1));\n        color.blue50 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.9647058823529412), __.int(1), __.int(1));\n        color.blue100 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.9176470588235294), __.float(0.996078431372549), __.int(1));\n        color.blue200 = __.FM.float_4_1_1_1_1(__.float(0.7490196078431373), __.float(0.8588235294117647), __.float(0.996078431372549), __.int(1));\n        color.blue300 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.7725490196078432), __.float(0.9921568627450981), __.int(1));\n        color.blue400 = __.FM.float_4_1_1_1_1(__.float(0.3764705882352941), __.float(0.6470588235294118), __.float(0.9803921568627451), __.int(1));\n        color.blue500 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.5098039215686274), __.float(0.9647058823529412), __.int(1));\n        color.blue600 = __.FM.float_4_1_1_1_1(__.float(0.1450980392156863), __.float(0.38823529411764707), __.float(0.9215686274509803), __.int(1));\n        color.blue700 = __.FM.float_4_1_1_1_1(__.float(0.11372549019607843), __.float(0.3058823529411765), __.float(0.8470588235294118), __.int(1));\n        color.blue800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.25098039215686274), __.float(0.6862745098039216), __.int(1));\n        color.blue900 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.22745098039215686), __.float(0.5411764705882353), __.int(1));\n        color.blue950 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.1450980392156863), __.float(0.32941176470588235), __.int(1));\n        color.indigo50 = __.FM.float_4_1_1_1_1(__.float(0.9333333333333333), __.float(0.9490196078431372), __.int(1), __.int(1));\n        color.indigo100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9058823529411765), __.int(1), __.int(1));\n        color.indigo200 = __.FM.float_4_1_1_1_1(__.float(0.7803921568627451), __.float(0.8235294117647058), __.float(0.996078431372549), __.int(1));\n        color.indigo300 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.7058823529411765), __.float(0.9882352941176471), __.int(1));\n        color.indigo400 = __.FM.float_4_1_1_1_1(__.float(0.5058823529411764), __.float(0.5490196078431373), __.float(0.9725490196078431), __.int(1));\n        color.indigo500 = __.FM.float_4_1_1_1_1(__.float(0.38823529411764707), __.float(0.4), __.float(0.9450980392156862), __.int(1));\n        color.indigo600 = __.FM.float_4_1_1_1_1(__.float(0.30980392156862746), __.float(0.27450980392156865), __.float(0.8980392156862745), __.int(1));\n        color.indigo700 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.2196078431372549), __.float(0.792156862745098), __.int(1));\n        color.indigo800 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.18823529411764706), __.float(0.6392156862745098), __.int(1));\n        color.indigo900 = __.FM.float_4_1_1_1_1(__.float(0.19215686274509805), __.float(0.1803921568627451), __.float(0.5058823529411764), __.int(1));\n        color.indigo950 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.10588235294117647), __.float(0.29411764705882354), __.int(1));\n        color.violet50 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9529411764705882), __.int(1), __.int(1));\n        color.violet100 = __.FM.float_4_1_1_1_1(__.float(0.9294117647058824), __.float(0.9137254901960784), __.float(0.996078431372549), __.int(1));\n        color.violet200 = __.FM.float_4_1_1_1_1(__.float(0.8666666666666667), __.float(0.8392156862745098), __.float(0.996078431372549), __.int(1));\n        color.violet300 = __.FM.float_4_1_1_1_1(__.float(0.7686274509803922), __.float(0.7098039215686275), __.float(0.9921568627450981), __.int(1));\n        color.violet400 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.5450980392156862), __.float(0.9803921568627451), __.int(1));\n        color.violet500 = __.FM.float_4_1_1_1_1(__.float(0.5450980392156862), __.float(0.3607843137254902), __.float(0.9647058823529412), __.int(1));\n        color.violet600 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.22745098039215686), __.float(0.9294117647058824), __.int(1));\n        color.violet700 = __.FM.float_4_1_1_1_1(__.float(0.42745098039215684), __.float(0.1568627450980392), __.float(0.8509803921568627), __.int(1));\n        color.violet800 = __.FM.float_4_1_1_1_1(__.float(0.3568627450980392), __.float(0.12941176470588237), __.float(0.7137254901960784), __.int(1));\n        color.violet900 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.11372549019607843), __.float(0.5843137254901961), __.int(1));\n        color.violet950 = __.FM.float_4_1_1_1_1(__.float(0.1803921568627451), __.float(0.06274509803921569), __.float(0.396078431372549), __.int(1));\n        color.purple50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9607843137254902), __.int(1), __.int(1));\n        color.purple100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.purple200 = __.FM.float_4_1_1_1_1(__.float(0.9137254901960784), __.float(0.8352941176470589), __.int(1), __.int(1));\n        color.purple300 = __.FM.float_4_1_1_1_1(__.float(0.8470588235294118), __.float(0.7058823529411765), __.float(0.996078431372549), __.int(1));\n        color.purple400 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.5176470588235295), __.float(0.9882352941176471), __.int(1));\n        color.purple500 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.3333333333333333), __.float(0.9686274509803922), __.int(1));\n        color.purple600 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.2), __.float(0.9176470588235294), __.int(1));\n        color.purple700 = __.FM.float_4_1_1_1_1(__.float(0.49411764705882355), __.float(0.13333333333333333), __.float(0.807843137254902), __.int(1));\n        color.purple800 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.12941176470588237), __.float(0.6588235294117647), __.int(1));\n        color.purple900 = __.FM.float_4_1_1_1_1(__.float(0.34509803921568627), __.float(0.10980392156862745), __.float(0.5294117647058824), __.int(1));\n        color.purple950 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.027450980392156862), __.float(0.39215686274509803), __.int(1));\n        color.fuchsia50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1), __.int(1));\n        color.fuchsia100 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.fuchsia200 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.8156862745098039), __.float(0.996078431372549), __.int(1));\n        color.fuchsia300 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.6705882352941176), __.float(0.9882352941176471), __.int(1));\n        color.fuchsia400 = __.FM.float_4_1_1_1_1(__.float(0.9098039215686274), __.float(0.4745098039215686), __.float(0.9764705882352941), __.int(1));\n        color.fuchsia500 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.27450980392156865), __.float(0.9372549019607843), __.int(1));\n        color.fuchsia600 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.14901960784313725), __.float(0.8274509803921568), __.int(1));\n        color.fuchsia700 = __.FM.float_4_1_1_1_1(__.float(0.6352941176470588), __.float(0.10980392156862745), __.float(0.6862745098039216), __.int(1));\n        color.fuchsia800 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.09803921568627451), __.float(0.5607843137254902), __.int(1));\n        color.fuchsia900 = __.FM.float_4_1_1_1_1(__.float(0.4392156862745098), __.float(0.10196078431372549), __.float(0.4588235294117647), __.int(1));\n        color.fuchsia950 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.01568627450980392), __.float(0.3058823529411765), __.int(1));\n        color.pink50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9490196078431372), __.float(0.9725490196078431), __.int(1));\n        color.pink100 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.9058823529411765), __.float(0.9529411764705882), __.int(1));\n        color.pink200 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.8117647058823529), __.float(0.9098039215686274), __.int(1));\n        color.pink300 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.6588235294117647), __.float(0.8313725490196079), __.int(1));\n        color.pink400 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.4470588235294118), __.float(0.7137254901960784), __.int(1));\n        color.pink500 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.2823529411764706), __.float(0.6), __.int(1));\n        color.pink600 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.15294117647058825), __.float(0.4666666666666667), __.int(1));\n        color.pink700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.09411764705882353), __.float(0.36470588235294116), __.int(1));\n        color.pink800 = __.FM.float_4_1_1_1_1(__.float(0.615686274509804), __.float(0.09019607843137255), __.float(0.30196078431372547), __.int(1));\n        color.pink900 = __.FM.float_4_1_1_1_1(__.float(0.5137254901960784), __.float(0.09411764705882353), __.float(0.2627450980392157), __.int(1));\n        color.pink950 = __.FM.float_4_1_1_1_1(__.float(0.3137254901960784), __.float(0.027450980392156862), __.float(0.1411764705882353), __.int(1));\n        color.rose50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9450980392156862), __.float(0.9490196078431372), __.int(1));\n        color.rose100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.8941176470588236), __.float(0.9019607843137255), __.int(1));\n        color.rose200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.803921568627451), __.float(0.8274509803921568), __.int(1));\n        color.rose300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.6431372549019608), __.float(0.6862745098039216), __.int(1));\n        color.rose400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.44313725490196076), __.float(0.5215686274509804), __.int(1));\n        color.rose500 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.24705882352941178), __.float(0.3686274509803922), __.int(1));\n        color.rose600 = __.FM.float_4_1_1_1_1(__.float(0.8823529411764706), __.float(0.11372549019607843), __.float(0.2823529411764706), __.int(1));\n        color.rose700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.07058823529411765), __.float(0.23529411764705882), __.int(1));\n        color.rose800 = __.FM.float_4_1_1_1_1(__.float(0.6235294117647059), __.float(0.07058823529411765), __.float(0.2235294117647059), __.int(1));\n        color.rose900 = __.FM.float_4_1_1_1_1(__.float(0.5333333333333333), __.float(0.07450980392156863), __.float(0.21568627450980393), __.int(1));\n        color.rose950 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.0196078431372549), __.float(0.09803921568627451), __.int(1));\n        return color;\n    }());\n    exports.color = color;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_57436_color\\\",\\\"fields\\\":[[\\\"slate50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\"), color)\n    ;\n    function wrap2(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high)); }\n    exports.wrap2 = wrap2;\n    ;\n    function wrap3(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high)); }\n    exports.wrap3 = wrap3;\n    ;\n    function wrap4(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high), (0, std_math_1.wrap)(value[3], low, high)); }\n    exports.wrap4 = wrap4;\n    ;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/sdf.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std_math_1, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.sdf = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var sdf = /** @class */ (function () {\n        function sdf(data) {\n        }\n        sdf.sphere = function (samplePosition, sphereCenter, radius) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.box = function (samplePosition, boxCenter, boxSize) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0);\n        };\n        sdf.roundBox = function (samplePosition, boxCenter, boxSize, cornerRadius) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var r = cornerRadius;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0) - r;\n        };\n        sdf.boxFrame = function (samplePosition, boxCenter, boxSize, frameThickness) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var b = boxSize;\n            var e = frameThickness;\n            p = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = b, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var q = (_f = (_h = (_j = p, _k = e, [_j[0] + _k, _j[1] + _k, _j[2] + _k]), [Math.abs(_h[0]), Math.abs(_h[1]), Math.abs(_h[2])]), _g = e, [_f[0] - _g, _f[1] - _g, _f[2] - _g]);\n            return (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(p, 'x'), __.swizzle(q, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(p[0], (0, std_math_1.max)(q[1], q[2])), 0.0), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(p, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(p[1], q[2])), 0.0)), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(q, 'y'), __.swizzle(p, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], p[2])), 0.0));\n        };\n        sdf.torus = function (samplePosition, torusCenter, torusSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var t = torusSize;\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), t[0]), __.swizzle(p, 'y'));\n            return (0, std_math_1.length)(q) - t[1];\n        };\n        sdf.cappedTorus = function (samplePosition, torusCenter, torusSize, ra, rb) {\n            var _a, _b, _c, _d, _e;\n            var p1 = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var p = __.makeVector(Math.abs(p1[0]), (_c = p1, [_c[1], _c[2]]));\n            var sc = torusSize;\n            var k = (sc[1] * p[0] > sc[0] * p[1]) ? (0, std_math_1.dot)((_d = p, [_d[0], _d[1]]), sc) : (0, std_math_1.length)((_e = p, [_e[0], _e[1]]));\n            return Math.sqrt((0, std_math_1.dot)(p, p) + ra * ra - 2.0 * ra * k) - rb;\n        };\n        sdf.link = function (samplePosition, linkCenter, linkLength, r1, r2) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = linkCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var le = linkLength;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'x'), (0, std_math_1.max)(Math.abs(p[1]) - le, 0.0), __.swizzle(p, 'z'));\n            return (0, std_math_1.length)(__.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = q, [_c[0], _c[1]])), r1), __.swizzle(q, 'z'))) - r2;\n        };\n        sdf.infinteCylinder = function (samplePosition, cylinderCenter, cylinderSize) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = cylinderSize;\n            return (0, std_math_1.length)((_c = (_e = p, [_e[0], _e[2]]), _d = (_f = c, [_f[0], _f[1]]), [_c[0] - _d[0], _c[1] - _d[1]])) - c[2];\n        };\n        sdf.cone = function (samplePosition, coneCenter, c, coneHeight) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = coneHeight;\n            // c is the sin/cos of the angle, h is height\n            // Alternatively pass q instead of (c,h),\n            // which is the point at the base in 2D\n            var q = (_c = h, _d = __.FM.float_2_1_1(__.div(c[0], c[1]), __.negate(1.0)), [_c * _d[0], _c * _d[1]]);\n            var w = __.FM.float_2_1_1((0, std_math_1.length)((_e = p, [_e[0], _e[2]])), __.swizzle(p, 'y'));\n            var a = (_f = w, _g = (_h = q, _j = (0, std_math_1.clamp)((0, std_math_1.dot)(w, q) / (0, std_math_1.dot)(q, q), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_f[0] - _g[0], _f[1] - _g[1]]);\n            var b = (_k = w, _l = (_m = q, _o = __.FM.float_2_1_1((0, std_math_1.clamp)(w[0] / q[0], 0.0, 1.0), __.float(1.0)), [_m[0] * _o[0], _m[1] * _o[1]]), [_k[0] - _l[0], _k[1] - _l[1]]);\n            var k = Math.sign(q[1]);\n            var d = (0, std_math_1.min)((0, std_math_1.dot)(a, a), (0, std_math_1.dot)(b, b));\n            var s = (0, std_math_1.max)(k * (w[0] * q[1] - w[1] * q[0]), k * (w[1] - q[1]));\n            return Math.sqrt(d) * Math.sign(s);\n        };\n        sdf.plane = function (samplePosition, planeCenter, planeNormal, planeHeight) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = planeCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var n = planeNormal;\n            var h = planeHeight;\n            // n must be normalized\n            return (0, std_math_1.dot)(p, n) + h;\n        };\n        sdf.hexPrism = function (samplePosition, hexCenter, hexSize) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = hexCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = hexSize;\n            var k = __.FM.float_3_1_1_1(__.negate(0.8660254), __.float(0.5), __.float(0.57735));\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var dddd = (0, std_math_1.min)((0, std_math_1.dot)((_d = k, [_d[0], _d[1]]), (_e = p, [_e[0], _e[1]])), 0.0) * 2.0;\n            p = (_f = p, _g = __.FM.float_3_2_1(__.mul(dddd, (_h = k, [_h[0], _h[1]])), __.float(0.0)), [_f[0] - _g[0], _f[1] - _g[1], _f[2] - _g[2]]);\n            var d = __.FM.float_2_1_1(__.mul((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[1]]), _k = __.FM.float_2_1_1((0, std_math_1.clamp)(p[0], (__.FM.negate_1(k[2])) * h[0], k[2] * h[0]), __.swizzle(h, 'x')), [_j[0] - _k[0], _j[1] - _k[1]])), Math.sign(p[1] - h[0])), __.sub(p[2], h[1]));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.triPrism = function (samplePosition, triCenter, triSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = triCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = triSize;\n            var q = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            return (0, std_math_1.max)(q[2] - h[1], (0, std_math_1.max)(q[0] * 0.866025 + p[1] * 0.5, (__.FM.negate_1(p[1]))) - h[0] * 0.5);\n        };\n        sdf.capsuleLine = function (samplePosition, lineStart, lineEnd, capsuleRadius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = capsuleRadius;\n            var pa = (_a = p, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var ba = (_c = b, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var h = (0, std_math_1.clamp)((0, std_math_1.dot)(pa, ba) / (0, std_math_1.dot)(ba, ba), 0.0, 1.0);\n            return (0, std_math_1.length)((_e = pa, _f = (_g = ba, _h = h, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r;\n        };\n        sdf.capsule = function (samplePosition, capsuleCenter, height, radius) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = capsuleCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var p = __.makeVector(p1[0], p1[1] - (0, std_math_1.clamp)(p1[1], 0.0, h), p1[2]);\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.cylinder = function (samplePosition, cylinderCenter, height, radius) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var d = (_c = (_e = __.FM.float_2_1_1((0, std_math_1.length)((_f = p, [_f[0], _f[2]])), __.swizzle(p, 'y')), [Math.abs(_e[0]), Math.abs(_e[1])]), _d = __.FM.float_2_1_1(r, h), [_c[0] - _d[0], _c[1] - _d[1]]);\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.cylinderLine = function (samplePosition, lineStart, lineEnd, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = radius;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var baba = (0, std_math_1.dot)(ba, ba);\n            var paba = (0, std_math_1.dot)(pa, ba);\n            var x = (0, std_math_1.length)((_e = (_g = pa, _h = baba, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), _f = (_j = ba, _k = paba, [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r * baba;\n            var y = Math.abs(paba - baba * 0.5) - baba * 0.5;\n            var x2 = x * x;\n            var y2 = y * y * baba;\n            var mxxy = (0, std_math_1.max)(x, y);\n            var d = (mxxy < 0.0) ? (__.FM.negate_1((0, std_math_1.min)(x2, y2))) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0));\n            return Math.sign(d) * Math.sqrt(Math.abs(d)) / baba;\n        };\n        sdf.roundedCylinder = function (samplePosition, cylinderCenter, cylinderRadius, cornerRadius, height) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b, _a[1] - _b, _a[2] - _b]);\n            var h = height;\n            var ra = cylinderRadius;\n            var rb = cornerRadius;\n            var d = __.FM.float_2_1_1(__.add((0, std_math_1.length)((_c = p, [_c[0], _c[2]])) - 2.0 * ra, rb), __.sub(Math.abs(p[1]), h));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0)) - rb;\n        };\n        sdf.cappedCone = function (samplePosition, coneCenter, height, r1, r2) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k1 = __.FM.float_2_1_1(r2, h);\n            var k2 = __.FM.float_2_1_1(__.sub(r2, r1), __.mul(2.0, h));\n            var ca = __.FM.float_2_1_1(__.sub(q[0], (0, std_math_1.min)(q[0], (q[1] < 0.0) ? r1 : r2)), __.sub(Math.abs(q[1]), h));\n            var cb = (_d = (_f = q, _g = k1, [_f[0] - _g[0], _f[1] - _g[1]]), _e = (_h = k2, _j = (0, std_math_1.clamp)((0, std_math_1.dot)((_k = k1, _l = q, [_k[0] - _l[0], _k[1] - _l[1]]), k2) / dot2(k2), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_d[0] + _e[0], _d[1] + _e[1]]);\n            var s = (__.and(cb[0] < 0.0, ca[1] < 0.0)) ? (__.FM.negate_1(1.0)) : 1.0;\n            return s * Math.sqrt((0, std_math_1.min)(dot2(ca), dot2(cb)));\n        };\n        sdf.solidAngle = function (samplePosition, solidCenter, size, radius) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = solidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = size;\n            var ra = radius;\n            // c is the sin/cos of the angle\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var l = (0, std_math_1.length)(q) - ra;\n            var m = (0, std_math_1.length)((_d = q, _e = (_f = c, _g = (0, std_math_1.clamp)((0, std_math_1.dot)(q, c), 0.0, ra), [_f[0] * _g, _f[1] * _g]), [_d[0] - _e[0], _d[1] - _e[1]]));\n            return (0, std_math_1.max)(l, m * Math.sign(c[1] * q[0] - c[0] * q[1]));\n        };\n        sdf.cutSphere = function (samplePosition, sphereCenter, radius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var s = (0, std_math_1.max)((h - r) * q[0] * q[0] + w * w * (h + r - 2.0 * q[1]), h * q[0] - w * q[1]);\n            return (s < 0.0) ? (0, std_math_1.length)(q) - r : (q[0] < w) ? h - q[1] : (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]]));\n        };\n        sdf.cutHollowSphere = function (samplePosition, sphereCenter, radius, height, thickness) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var h = height;\n            var t = thickness;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            return ((h * q[0] < w * q[1]) ? (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]])) : Math.abs((0, std_math_1.length)(q) - r)) - t;\n        };\n        sdf.roundCone = function (samplePosition, coneCenter, coneRadius, cornerRadius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r1 = coneRadius;\n            var r2 = cornerRadius;\n            // sampling independent computations (only depend on shape)\n            var b = (r1 - r2) / h;\n            var a = Math.sqrt(1.0 - b * b);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k = (0, std_math_1.dot)(q, __.FM.float_2_1_1(__.negate(b), a));\n            if (k < 0.0)\n                return (0, std_math_1.length)(q) - r1;\n            if (k > a * h)\n                return (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(__.float(0.0), h), [_d[0] - _e[0], _d[1] - _e[1]])) - r2;\n            return (0, std_math_1.dot)(q, __.FM.float_2_1_1(a, b)) - r1;\n        };\n        sdf.ellipsoid = function (samplePosition, center, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var k0 = (0, std_math_1.length)((_c = p, _d = r, [_c[0] / _d[0], _c[1] / _d[1], _c[2] / _d[2]]));\n            var k1 = (0, std_math_1.length)((_e = p, _f = (_g = r, _h = r, [_g[0] * _h[0], _g[1] * _h[1], _g[2] * _h[2]]), [_e[0] / _f[0], _e[1] / _f[1], _e[2] / _f[2]]));\n            return k0 * (k0 - 1.0) / k1;\n        };\n        sdf.rhombus = function (samplePosition, rhombusCenter, la, lb, height, ra) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var p = (_a = samplePosition, _b = rhombusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var b = __.FM.float_2_1_1(la, lb);\n            var f = (0, std_math_1.clamp)((ndot(b, (_d = b, _e = (_f = 2.0, _g = (_h = p, [_h[0], _h[2]]), [_f * _g[0], _f * _g[1]]), [_d[0] - _e[0], _d[1] - _e[1]]))) / (0, std_math_1.dot)(b, b), (__.FM.negate_1(1.0)), 1.0);\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[2]]), _k = (_m = (_p = 0.5, _q = b, [_p * _q[0], _p * _q[1]]), _o = __.FM.float_2_1_1(__.sub(1.0, f), __.add(1.0, f)), [_m[0] * _o[0], _m[1] * _o[1]]), [_j[0] - _k[0], _j[1] - _k[1]])) * Math.sign(p[0] * b[1] + p[2] * b[0] - b[0] * b[1]), ra), __.sub(p[1], h));\n            return (0, std_math_1.min)((0, std_math_1.max)(q[0], q[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(q, 0.0));\n        };\n        sdf.octahedron = function (samplePosition, center, size) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = size;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var m = p[0] + p[1] + p[2] - s;\n            var q = (_d = 0.0, [_d, _d, _d]);\n            if (3.0 * p[0] < m)\n                q = (_e = p, [_e[0], _e[1], _e[2]]);\n            else if (3.0 * p[1] < m)\n                q = (_f = p, [_f[1], _f[2], _f[0]]);\n            else if (3.0 * p[2] < m)\n                q = (_g = p, [_g[2], _g[0], _g[1]]);\n            else\n                return m * 0.57735027;\n            var k = (0, std_math_1.clamp)(0.5 * (q[2] - q[1] + s), 0.0, s);\n            return (0, std_math_1.length)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.add(q[1] - s, k), __.sub(q[2], k)));\n        };\n        sdf.pyramid = function (samplePosition, pyramidCenter, height) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = pyramidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var m2 = h * h + 0.25;\n            var p2 = __.makeVector(Math.abs(p1[0]), p1[1], Math.abs(p1[2]));\n            if (p1[2] > p1[0]) {\n                p2 = __.makeVector(p2[2], p2[1], p2[0]);\n            }\n            p2 = __.makeVector(p2[0] - 0.5, p2[1], p2[2] - 0.5);\n            var p = p2;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'z'), __.sub(h * p[1], 0.5 * p[0]), __.add(h * p[0], 0.5 * p[1]));\n            var s = (0, std_math_1.max)((__.FM.negate_1(q[0])), 0.0);\n            var t = (0, std_math_1.clamp)((q[1] - 0.5 * p[2]) / (m2 + 0.25), 0.0, 1.0);\n            var a = m2 * (q[0] + s) * (q[0] + s) + q[1] * q[1];\n            var b = m2 * (q[0] + 0.5 * t) * (q[0] + 0.5 * t) + (q[1] - m2 * t) * (q[1] - m2 * t);\n            var d2 = (0, std_math_1.min)(q[1], (__.FM.negate_1(q[0])) * m2 - q[1] * 0.5) > 0.0 ? 0.0 : (0, std_math_1.min)(a, b);\n            return Math.sqrt((d2 + q[2] * q[2]) / m2) * Math.sign((0, std_math_1.max)(q[2], (__.FM.negate_1(p[1]))));\n        };\n        sdf.udTriangle = function (samplePosition, a, b, c) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var ac = (_j = a, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var nor = (0, std_math_1.cross)(ba, ac);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ac, nor), pc)) < 2.0) ? (0, std_math_1.min)((0, std_math_1.min)(dot3((_o = (_q = ba, _r = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_q[0] * _r, _q[1] * _r, _q[2] * _r]), _p = pa, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])), dot3((_s = (_u = cb, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pb, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]]))), dot3((_w = (_y = ac, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(ac, pc) / dot3(ac), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pc, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        sdf.udQuad = function (samplePosition, a, b, c, d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var dc = (_j = d, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var ad = (_o = a, _p = d, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]]);\n            var pd = (_q = p, _r = d, [_q[0] - _r[0], _q[1] - _r[1], _q[2] - _r[2]]);\n            var nor = (0, std_math_1.cross)(ba, ad);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(dc, nor), pc)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ad, nor), pd)) < 3.0) ? (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.min)(dot3((_s = (_u = ba, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pa, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]])), dot3((_w = (_y = cb, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pb, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))), dot3((_0 = (_2 = dc, _3 = (0, std_math_1.clamp)((0, std_math_1.dot)(dc, pc) / dot3(dc), 0.0, 1.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), _1 = pc, [_0[0] - _1[0], _0[1] - _1[1], _0[2] - _1[2]]))), dot3((_4 = (_6 = ad, _7 = (0, std_math_1.clamp)((0, std_math_1.dot)(ad, pd) / dot3(ad), 0.0, 1.0), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), _5 = pd, [_4[0] - _5[0], _4[1] - _5[1], _4[2] - _5[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        /**\n            * Returns the intersection of two SDFs\n            * = max(a, b)\n            */\n        sdf.intersect = function (a, b) { return (0, std_math_1.max)(a, b); };\n        /**\n            * Returns the union of two SDFs\n            * = min(a, b)\n            */\n        sdf.union = function (a, b) { return (0, std_math_1.min)(a, b); };\n        sdf.subtract = function (a, b) { return (0, std_math_1.max)((__.FM.negate_1(a)), b); };\n        sdf.smoothIntersect = function (a, b, k) {\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(b, a, h) - k * h * (1.0 - h);\n        };\n        /**\n            * Smoothly joins two SDFs using blending distance k\n            */\n        sdf.smoothUnion = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, d1, h) - k * h * (1.0 - h);\n        };\n        sdf.smoothSubtract = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, (__.FM.negate_1(d1)), h) + k * h * (1.0 - h);\n        };\n        /**\n            * Blends between two SDFs using interpolation\n            */\n        sdf.blend = function (a, b, t) { return t * a + ((1 | 0) - t) * b; };\n        sdf.round = function (a, r) { return a - r; };\n        /**\n            * Carve out the interior of an SDF\n            */\n        sdf.onion = function (a, thickness) { return Math.abs(a) - thickness; };\n        sdf.grad = function (p, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var DELTA = 0.0001;\n            return _a = __.FM.float_3_1_1_1(__.sub(sampler((_c = p, _d = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]])), sampler((_e = p, _f = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]))), __.sub(sampler((_g = p, _h = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]])), sampler((_j = p, _k = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]))), __.sub(sampler((_l = p, _m = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]])), sampler((_o = p, _p = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])))), _b = (2.0 * DELTA), [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        /**\n            * Poorly returns the closest point on the surface of an SDF\n            * This is an inaccurate method\n            */\n        sdf.closest = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n            var sep = 0.0001;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var closest = position;\n            var initialDist = sampler(position);\n            var seed = (0 | 0);\n            for (var j = (0 | 0); j < (200 | 0); j++) {\n                var n = (_a = 0.0, [_a, _a, _a]);\n                var distSum = 0.0;\n                for (var i = zero; i < (4 | 0); i++) {\n                    var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                    var d = sampler((_h = closest, _j = (_k = e, _l = sep, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                    distSum = distSum + d;\n                    n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n                }\n                closest = (_r = (_t = (_v = (_x = (0, std_math_1.normalize)(n), _y = distSum, [_x[0] * _y, _x[1] * _y, _x[2] * _y]), _w = (__.FM.negate_1((1 | 0))), [_v[0] * _w, _v[1] * _w, _v[2] * _w]), _u = 4.0, [_t[0] / _u, _t[1] / _u, _t[2] / _u]), _s = closest, [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2]]);\n                if (distSum < 0.0001) {\n                    break;\n                }\n            }\n            return closest;\n        };\n        sdf.normal = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var h = 0.1;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var n = (_a = 0.0, [_a, _a, _a]);\n            var distSum = 0.0;\n            for (var i = zero; i < (4 | 0); i++) {\n                var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                var d = sampler((_h = position, _j = (_k = e, _l = h, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                distSum = distSum + d;\n                n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n            }\n            return (0, std_math_1.normalize)(n);\n        };\n        sdf.vizRings = function (d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            if (false) {\n                var color_1 = (_a = 1.0, _b = (_c = Math.sign(d), _d = __.FM.float_3_1_1_1(__.float(0.1), __.float(0.4), __.float(0.7)), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]);\n                color_1 = (_e = color_1, _f = 1.0 - Math.exp((__.FM.negate_1(4.0)) * Math.abs(d)), [_e[0] * _f, _e[1] * _f, _e[2] * _f]);\n                color_1 = (_g = color_1, _h = 0.8 + 0.2 * Math.cos(140.0 * d), [_g[0] * _h, _g[1] * _h, _g[2] * _h]);\n                color_1 = (0, std_math_1.lerp)(color_1, (_j = 1.0, [_j, _j, _j]), 1.0 - (0, std_math_1.smoothstep)(0.0, 0.015, Math.abs(d)));\n                return __.makeVector(color_1, 1.0);\n            }\n            else {\n                var size = (2 | 0);\n                var fadeDist = (100 | 0);\n                var v = (1 | 0) - (0, std_math_1.clamp)(d / fadeDist, (0 | 0), (1 | 0));\n                var color_2 = __.makeVector(0.4 * v, 0.6 * v, (1 | 0), (1 | 0));\n                var s = Math.sin(d / size);\n                if (Math.abs(d) < (1 | 0)) {\n                    return __.FM.float_4_4(__.swizzle((1 | 0), \"xyzw\"));\n                }\n                else {\n                    return d > (0 | 0) ? (_k = color_2, _l = Math.ceil((1 | 0) - s), [_k[0] * _l, _k[1] * _l, _k[2] * _l, _k[3] * _l]) : (_m = color_2, _o = Math.ceil(s), [_m[0] * _o, _m[1] * _o, _m[2] * _o, _m[3] * _o]);\n                }\n            }\n        };\n        sdf.march = function (position, direction, sampler) {\n            var _a, _b, _c, _d;\n            var maxDist = 100000.0;\n            var minDist = 1.0;\n            var dist = minDist;\n            for (var i = (0 | 0); __.and(i < (256 | 0), dist < maxDist); i++) {\n                var samp = sampler((_a = position, _b = (_c = direction, _d = dist, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]));\n                dist = dist + samp;\n                if (Math.abs(samp) < (0.00005 * dist)) {\n                    break;\n                }\n            }\n            if (dist > maxDist) {\n                dist = (__.FM.negate_1(1.0));\n            }\n            return dist;\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Infinitely repeats an SDF with space in between. This returns an updated position\n            *\n            * Example:\n            * ```shadeup\n            *\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\n            * ```\n            */\n        sdf.repeat = function (position, space) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (_e = (_f = p, _g = s, [_f[0] / _g[0], _f[1] / _g[1], _f[2] / _g[2]]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), [_c[0] * _d[0], _c[1] * _d[1], _c[2] * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Repeats an SDF with space in between upto the limit. This returns an updated position\n            *\n            * Example:\n            * ```shadeup\n            *\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\n            * ```\n            */\n        sdf.repeatLimited = function (position, space, limit) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (0, std_math_1.clamp)((_e = (_f = p, _g = s, [_f[0] / _g, _f[1] / _g, _f[2] / _g]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), (__.FM.negate_3(limit)), limit), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        sdf.prototype.clone = function () {\n            return new sdf({});\n        };\n        sdf.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_sdf_ts_1953_sdf\\\",\\\"fields\\\":[]}\");\n        };\n        return sdf;\n    }());\n    exports.sdf = sdf;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_sdf_ts_1953_sdf\\\",\\\"fields\\\":[]}\"), sdf)\n    ;\n    function dot2(v) { return (0, std_math_1.dot)(v, v); }\n    function dot3(v) { return (0, std_math_1.dot)(v, v); }\n    function ndot(a, b) { return a[0] * b[0] - a[1] * b[1]; }\n});\n/* impl sdf */\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/geo.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var GeoSegment = /** @class */ (function () {\n        function GeoSegment(data) {\n            var _a, _b, _c, _d, _e, _f;\n            this.start = ((_a = data.start) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(0.0, 0.0));\n            this.end = ((_b = data.end) !== null && _b !== void 0 ? _b : __.FM.float_2_1_1(0.0, 0.0));\n            this.kind = ((_c = data.kind) !== null && _c !== void 0 ? _c : (0 | 0));\n            this.arcRadius = ((_d = data.arcRadius) !== null && _d !== void 0 ? _d : 0.0);\n            this.arcStart = ((_e = data.arcStart) !== null && _e !== void 0 ? _e : 0.0);\n            this.arcEnd = ((_f = data.arcEnd) !== null && _f !== void 0 ? _f : 0.0);\n        }\n        GeoSegment.prototype.clone = function () {\n            return new GeoSegment({\n                start: (0, std___std_all_1.__deepClone)(this.start),\n                end: (0, std___std_all_1.__deepClone)(this.end),\n                kind: (0, std___std_all_1.__deepClone)(this.kind),\n                arcRadius: (0, std___std_all_1.__deepClone)(this.arcRadius),\n                arcStart: (0, std___std_all_1.__deepClone)(this.arcStart),\n                arcEnd: (0, std___std_all_1.__deepClone)(this.arcEnd),\n            });\n        };\n        GeoSegment.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\");\n        };\n        return GeoSegment;\n    }());\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\"), GeoSegment)\n    /**@shadeup=struct*/ var GeoPoly = /** @class */ (function () {\n        function GeoPoly(data) {\n            var _a;\n            this.segments = ((_a = data.segments) !== null && _a !== void 0 ? _a : []);\n        }\n        GeoPoly.prototype.area = function () { return 0.0; };\n        GeoPoly.prototype.perimeter = function () { return 0.0; };\n        GeoPoly.prototype.discretize = function () { var shader_self_temp = this; return this.clone(); };\n        GeoPoly.prototype.clone = function () {\n            return new GeoPoly({\n                segments: (0, std___std_all_1.__deepClone)(this.segments),\n            });\n        };\n        GeoPoly.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\",\\\"fields\\\":[[\\\"segments\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]},\\\"staticSize\\\":1}]]}\");\n        };\n        return GeoPoly;\n    }());\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\",\\\"fields\\\":[[\\\"segments\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]},\\\"staticSize\\\":1}]]}\"), GeoPoly)\n});\n/* impl GeoPoly */\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/__lib.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    var globalVarGet = std___std_all_1.globalVarGet;\n});\n\n})(define);\n"
  },
  {
    "path": "package/__lib.shadeup",
    "content": ""
  },
  {
    "path": "package/engine-dist/DRACOLoader-4fcd2f44.js",
    "content": "import { Loader, FileLoader, SRGBColorSpace, LinearSRGBColorSpace, BufferGeometry, BufferAttribute, Color } from './three.module-c8091b37.js';\n\nconst _taskCache = new WeakMap();\n\nclass DRACOLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.decoderPath = '';\n\t\tthis.decoderConfig = {};\n\t\tthis.decoderBinary = null;\n\t\tthis.decoderPending = null;\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\n\t\tthis.defaultAttributeIDs = {\n\t\t\tposition: 'POSITION',\n\t\t\tnormal: 'NORMAL',\n\t\t\tcolor: 'COLOR',\n\t\t\tuv: 'TEX_COORD'\n\t\t};\n\t\tthis.defaultAttributeTypes = {\n\t\t\tposition: 'Float32Array',\n\t\t\tnormal: 'Float32Array',\n\t\t\tcolor: 'Float32Array',\n\t\t\tuv: 'Float32Array'\n\t\t};\n\n\t}\n\n\tsetDecoderPath( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetDecoderConfig( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tthis.parse( buffer, onLoad, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer, onLoad, onError ) {\n\n\t\tthis.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace ).catch( onError );\n\n\t}\n\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace ) {\n\n\t\tconst taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs,\n\t\t\tvertexColorSpace: vertexColorSpace,\n\t\t};\n\n\t\treturn this.decodeGeometry( buffer, taskConfig ).then( callback );\n\n\t}\n\n\tdecodeGeometry( buffer, taskConfig ) {\n\n\t\tconst taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet worker;\n\t\tconst taskID = this.workerNextTaskID ++;\n\t\tconst taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tconst geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t}\n\n\t_createGeometry( geometryData ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tconst result = geometryData.attributes[ i ];\n\t\t\tconst name = result.name;\n\t\t\tconst array = result.array;\n\t\t\tconst itemSize = result.itemSize;\n\n\t\t\tconst attribute = new BufferAttribute( array, itemSize );\n\n\t\t\tif ( name === 'color' ) {\n\n\t\t\t\tthis._assignVertexColorSpace( attribute, result.vertexColorSpace );\n\n\t\t\t\tattribute.normalized = ( array instanceof Float32Array ) === false;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( name, attribute );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n\t_assignVertexColorSpace( attribute, inputColorSpace ) {\n\n\t\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB when a .drc\n\t\t// file is passed into .load() or .parse(). GLTFLoader uses internal APIs\n\t\t// to decode geometry, and vertex colors are already Linear-sRGB in there.\n\n\t\tif ( inputColorSpace !== SRGBColorSpace ) return;\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\t_color.fromBufferAttribute( attribute, i ).convertSRGBToLinear();\n\t\t\tattribute.setXYZ( i, _color.r, _color.g, _color.b );\n\n\t\t}\n\n\t}\n\n\t_loadLibrary( url, responseType ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t}\n\n\tpreload() {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t}\n\n\t_initDecoder() {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tconst useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tconst librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tconst jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tconst fn = DRACOWorker.toString();\n\n\t\t\t\tconst body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t}\n\n\t_getWorker( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\tif ( this.workerSourceURL !== '' ) {\n\n\t\t\tURL.revokeObjectURL( this.workerSourceURL );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction DRACOWorker() {\n\n\tlet decoderConfig;\n\tlet decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tconst taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tconst draco = module.draco;\n\t\t\t\t\tconst decoder = new draco.Decoder();\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst geometry = decodeGeometry( draco, decoder, new Int8Array( buffer ), taskConfig );\n\n\t\t\t\t\t\tconst buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, array, taskConfig ) {\n\n\t\tconst attributeIDs = taskConfig.attributeIDs;\n\t\tconst attributeTypes = taskConfig.attributeTypes;\n\n\t\tlet dracoGeometry;\n\t\tlet decodingStatus;\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType( array );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeArrayToMesh( array, array.byteLength, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeArrayToPointCloud( array, array.byteLength, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tconst geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( const attributeName in attributeIDs ) {\n\n\t\t\tconst attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tlet attribute;\n\t\t\tlet attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tconst attributeResult = decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute );\n\n\t\t\tif ( attributeName === 'color' ) {\n\n\t\t\t\tattributeResult.vertexColorSpace = taskConfig.vertexColorSpace;\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( attributeResult );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tconst numFaces = dracoGeometry.num_faces();\n\t\tconst numIndices = numFaces * 3;\n\t\tconst byteLength = numIndices * 4;\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tconst index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) {\n\n\t\tconst numComponents = attribute.num_components();\n\t\tconst numPoints = dracoGeometry.num_points();\n\t\tconst numValues = numPoints * numComponents;\n\t\tconst byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n\t\tconst dataType = getDracoDataType( draco, attributeType );\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr );\n\t\tconst array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tarray: array,\n\t\t\titemSize: numComponents\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, attributeType ) {\n\n\t\tswitch ( attributeType ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n}\n\nexport { DRACOLoader };\n"
  },
  {
    "path": "package/engine-dist/GLTFLoader-94b38cf6.js",
    "content": "import { TrianglesDrawMode, TriangleFanDrawMode, TriangleStripDrawMode, Loader, LoaderUtils, FileLoader, Color, SpotLight, PointLight, DirectionalLight, MeshBasicMaterial, SRGBColorSpace, MeshPhysicalMaterial, Vector2, Matrix4, Vector3, InstancedMesh, Object3D, TextureLoader, ImageBitmapLoader, BufferAttribute, InterleavedBuffer, LinearFilter, LinearMipmapLinearFilter, RepeatWrapping, PointsMaterial, Material, LineBasicMaterial, MeshStandardMaterial, DoubleSide, PropertyBinding, BufferGeometry, SkinnedMesh, Mesh, LineSegments, Line, LineLoop, Points, Group, PerspectiveCamera, MathUtils, OrthographicCamera, Skeleton, AnimationClip, Bone, InterpolateLinear, Quaternion, NearestFilter, NearestMipmapNearestFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, ClampToEdgeWrapping, MirroredRepeatWrapping, InterpolateDiscrete, FrontSide, InterleavedBufferAttribute, Texture, VectorKeyframeTrack, NumberKeyframeTrack, QuaternionKeyframeTrack, Box3, Sphere, Interpolant } from './three.module-c8091b37.js';\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\tresourcePath = this.path;\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenColor.fromArray( extension.sheenColorFactor );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t//   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t                        // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array<GLTF.Target>} targets\n * @param {GLTFParser} parser\n * @return {Promise<BufferGeometry>}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( navigator.userAgent ) === true;\n\t\t\tisFirefox = navigator.userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? navigator.userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || isSafari || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\tPromise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise<THREE.Texture|null>}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise<Texture>}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param  {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise<Material>}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Promise<Array<BufferGeometry>>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise<Group|Mesh|SkinnedMesh>}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise<THREE.Camera>}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise<Skeleton>}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise<AnimationClip>}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise<Object3D>}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise<Group>}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise<BufferGeometry>}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n"
  },
  {
    "path": "package/engine-dist/host-937690bb.js",
    "content": "const host = \"/*\\n! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com\\n*//*\\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\\n*/\\n\\n*,\\n::before,\\n::after {\\n  box-sizing: border-box; /* 1 */\\n  border-width: 0; /* 2 */\\n  border-style: solid; /* 2 */\\n  border-color: #e4e4e7; /* 2 */\\n}\\n\\n::before,\\n::after {\\n  --tw-content: '';\\n}\\n\\n/*\\n1. Use a consistent sensible line-height in all browsers.\\n2. Prevent adjustments of font size after orientation changes in iOS.\\n3. Use a more readable tab size.\\n4. Use the user's configured `sans` font-family by default.\\n5. Use the user's configured `sans` font-feature-settings by default.\\n*/\\n\\nhtml {\\n  line-height: 1.5; /* 1 */\\n  -webkit-text-size-adjust: 100%; /* 2 */\\n  -moz-tab-size: 4; /* 3 */\\n  -o-tab-size: 4;\\n     tab-size: 4; /* 3 */\\n  font-family: \\\"Lato\\\", sans-serif; /* 4 */\\n  font-feature-settings: normal; /* 5 */\\n}\\n\\n/*\\n1. Remove the margin in all browsers.\\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\\n*/\\n\\nbody {\\n  margin: 0; /* 1 */\\n  line-height: inherit; /* 2 */\\n}\\n\\n/*\\n1. Add the correct height in Firefox.\\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\\n3. Ensure horizontal rules are visible by default.\\n*/\\n\\nhr {\\n  height: 0; /* 1 */\\n  color: inherit; /* 2 */\\n  border-top-width: 1px; /* 3 */\\n}\\n\\n/*\\nAdd the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\nabbr:where([title]) {\\n  -webkit-text-decoration: underline dotted;\\n          text-decoration: underline dotted;\\n}\\n\\n/*\\nRemove the default font size and weight for headings.\\n*/\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n  font-size: inherit;\\n  font-weight: inherit;\\n}\\n\\n/*\\nReset links to optimize for opt-in styling instead of opt-out.\\n*/\\n\\na {\\n  color: inherit;\\n  text-decoration: inherit;\\n}\\n\\n/*\\nAdd the correct font weight in Edge and Safari.\\n*/\\n\\nb,\\nstrong {\\n  font-weight: bolder;\\n}\\n\\n/*\\n1. Use the user's configured `mono` font family by default.\\n2. Correct the odd `em` font sizing in all browsers.\\n*/\\n\\ncode,\\nkbd,\\nsamp,\\npre {\\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace; /* 1 */\\n  font-size: 1em; /* 2 */\\n}\\n\\n/*\\nAdd the correct font size in all browsers.\\n*/\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n/*\\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\\n*/\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\n/*\\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\\n3. Remove gaps between table borders by default.\\n*/\\n\\ntable {\\n  text-indent: 0; /* 1 */\\n  border-color: inherit; /* 2 */\\n  border-collapse: collapse; /* 3 */\\n}\\n\\n/*\\n1. Change the font styles in all browsers.\\n2. Remove the margin in Firefox and Safari.\\n3. Remove default padding in all browsers.\\n*/\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n  font-family: inherit; /* 1 */\\n  font-size: 100%; /* 1 */\\n  font-weight: inherit; /* 1 */\\n  line-height: inherit; /* 1 */\\n  color: inherit; /* 1 */\\n  margin: 0; /* 2 */\\n  padding: 0; /* 3 */\\n}\\n\\n/*\\nRemove the inheritance of text transform in Edge and Firefox.\\n*/\\n\\nbutton,\\nselect {\\n  text-transform: none;\\n}\\n\\n/*\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Remove default button styles.\\n*/\\n\\nbutton,\\n[type='button'],\\n[type='reset'],\\n[type='submit'] {\\n  -webkit-appearance: button; /* 1 */\\n  background-color: transparent; /* 2 */\\n  background-image: none; /* 2 */\\n}\\n\\n/*\\nUse the modern Firefox focus style for all focusable elements.\\n*/\\n\\n:-moz-focusring {\\n  outline: auto;\\n}\\n\\n/*\\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\\n*/\\n\\n:-moz-ui-invalid {\\n  box-shadow: none;\\n}\\n\\n/*\\nAdd the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\nprogress {\\n  vertical-align: baseline;\\n}\\n\\n/*\\nCorrect the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n::-webkit-inner-spin-button,\\n::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n/*\\n1. Correct the odd appearance in Chrome and Safari.\\n2. Correct the outline style in Safari.\\n*/\\n\\n[type='search'] {\\n  -webkit-appearance: textfield; /* 1 */\\n  outline-offset: -2px; /* 2 */\\n}\\n\\n/*\\nRemove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n/*\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Change font properties to `inherit` in Safari.\\n*/\\n\\n::-webkit-file-upload-button {\\n  -webkit-appearance: button; /* 1 */\\n  font: inherit; /* 2 */\\n}\\n\\n/*\\nAdd the correct display in Chrome and Safari.\\n*/\\n\\nsummary {\\n  display: list-item;\\n}\\n\\n/*\\nRemoves the default spacing and border for appropriate elements.\\n*/\\n\\nblockquote,\\ndl,\\ndd,\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\nhr,\\nfigure,\\np,\\npre {\\n  margin: 0;\\n}\\n\\nfieldset {\\n  margin: 0;\\n  padding: 0;\\n}\\n\\nlegend {\\n  padding: 0;\\n}\\n\\nol,\\nul,\\nmenu {\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n/*\\nPrevent resizing textareas horizontally by default.\\n*/\\n\\ntextarea {\\n  resize: vertical;\\n}\\n\\n/*\\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\\n2. Set the default placeholder color to the user's configured gray 400 color.\\n*/\\n\\ninput::-moz-placeholder, textarea::-moz-placeholder {\\n  opacity: 1; /* 1 */\\n  color: #a1a1aa; /* 2 */\\n}\\n\\ninput::placeholder,\\ntextarea::placeholder {\\n  opacity: 1; /* 1 */\\n  color: #a1a1aa; /* 2 */\\n}\\n\\n/*\\nSet the default cursor for buttons.\\n*/\\n\\nbutton,\\n[role=\\\"button\\\"] {\\n  cursor: pointer;\\n}\\n\\n/*\\nMake sure disabled buttons don't get the pointer cursor.\\n*/\\n:disabled {\\n  cursor: default;\\n}\\n\\n/*\\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\\n   This can trigger a poorly considered lint error in some tools but is included by design.\\n*/\\n\\nimg,\\nsvg,\\nvideo,\\ncanvas,\\naudio,\\niframe,\\nembed,\\nobject {\\n  display: block; /* 1 */\\n  vertical-align: middle; /* 2 */\\n}\\n\\n/*\\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\\n*/\\n\\nimg,\\nvideo {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n/* Make elements with the HTML hidden attribute stay hidden by default */\\n[hidden] {\\n  display: none;\\n}\\n\\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\\n  -webkit-appearance: none;\\n     -moz-appearance: none;\\n          appearance: none;\\n  background-color: #fff;\\n  border-color: #71717a;\\n  border-width: 1px;\\n  border-radius: 0px;\\n  padding-top: 0.5rem;\\n  padding-right: 0.75rem;\\n  padding-bottom: 0.5rem;\\n  padding-left: 0.75rem;\\n  font-size: 1rem;\\n  line-height: 1.5rem;\\n  --tw-shadow: 0 0 #0000;\\n}\\n\\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: #2563eb;\\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n  border-color: #2563eb;\\n}\\n\\ninput::-moz-placeholder, textarea::-moz-placeholder {\\n  color: #71717a;\\n  opacity: 1;\\n}\\n\\ninput::placeholder,textarea::placeholder {\\n  color: #71717a;\\n  opacity: 1;\\n}\\n\\n::-webkit-datetime-edit-fields-wrapper {\\n  padding: 0;\\n}\\n\\n::-webkit-date-and-time-value {\\n  min-height: 1.5em;\\n}\\n\\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\\n  padding-top: 0;\\n  padding-bottom: 0;\\n}\\n\\nselect {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\");\\n  background-position: right 0.5rem center;\\n  background-repeat: no-repeat;\\n  background-size: 1.5em 1.5em;\\n  padding-right: 2.5rem;\\n  -webkit-print-color-adjust: exact;\\n          print-color-adjust: exact;\\n}\\n\\n[multiple] {\\n  background-image: initial;\\n  background-position: initial;\\n  background-repeat: unset;\\n  background-size: initial;\\n  padding-right: 0.75rem;\\n  -webkit-print-color-adjust: unset;\\n          print-color-adjust: unset;\\n}\\n\\n[type='checkbox'],[type='radio'] {\\n  -webkit-appearance: none;\\n     -moz-appearance: none;\\n          appearance: none;\\n  padding: 0;\\n  -webkit-print-color-adjust: exact;\\n          print-color-adjust: exact;\\n  display: inline-block;\\n  vertical-align: middle;\\n  background-origin: border-box;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n          user-select: none;\\n  flex-shrink: 0;\\n  height: 1rem;\\n  width: 1rem;\\n  color: #2563eb;\\n  background-color: #fff;\\n  border-color: #71717a;\\n  border-width: 1px;\\n  --tw-shadow: 0 0 #0000;\\n}\\n\\n[type='checkbox'] {\\n  border-radius: 0px;\\n}\\n\\n[type='radio'] {\\n  border-radius: 100%;\\n}\\n\\n[type='checkbox']:focus,[type='radio']:focus {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\\n  --tw-ring-offset-width: 2px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: #2563eb;\\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n}\\n\\n[type='checkbox']:checked,[type='radio']:checked {\\n  border-color: transparent;\\n  background-color: currentColor;\\n  background-size: 100% 100%;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n\\n[type='checkbox']:checked {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\");\\n}\\n\\n[type='radio']:checked {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\\\");\\n}\\n\\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\\n  border-color: transparent;\\n  background-color: currentColor;\\n}\\n\\n[type='checkbox']:indeterminate {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\\\");\\n  border-color: transparent;\\n  background-color: currentColor;\\n  background-size: 100% 100%;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n\\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\\n  border-color: transparent;\\n  background-color: currentColor;\\n}\\n\\n[type='file'] {\\n  background: unset;\\n  border-color: inherit;\\n  border-width: 0;\\n  border-radius: 0;\\n  padding: 0;\\n  font-size: unset;\\n  line-height: inherit;\\n}\\n\\n[type='file']:focus {\\n  outline: 1px solid ButtonText;\\n  outline: 1px auto -webkit-focus-ring-color;\\n}\\n  html {\\n  --tw-text-opacity: 1;\\n  color: rgb(255 255 255 / var(--tw-text-opacity));\\n}\\n\\n*, ::before, ::after {\\n  --tw-border-spacing-x: 0;\\n  --tw-border-spacing-y: 0;\\n  --tw-translate-x: 0;\\n  --tw-translate-y: 0;\\n  --tw-rotate: 0;\\n  --tw-skew-x: 0;\\n  --tw-skew-y: 0;\\n  --tw-scale-x: 1;\\n  --tw-scale-y: 1;\\n  --tw-pan-x:  ;\\n  --tw-pan-y:  ;\\n  --tw-pinch-zoom:  ;\\n  --tw-scroll-snap-strictness: proximity;\\n  --tw-ordinal:  ;\\n  --tw-slashed-zero:  ;\\n  --tw-numeric-figure:  ;\\n  --tw-numeric-spacing:  ;\\n  --tw-numeric-fraction:  ;\\n  --tw-ring-inset:  ;\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: rgb(59 130 246 / 0.5);\\n  --tw-ring-offset-shadow: 0 0 #0000;\\n  --tw-ring-shadow: 0 0 #0000;\\n  --tw-shadow: 0 0 #0000;\\n  --tw-shadow-colored: 0 0 #0000;\\n  --tw-blur:  ;\\n  --tw-brightness:  ;\\n  --tw-contrast:  ;\\n  --tw-grayscale:  ;\\n  --tw-hue-rotate:  ;\\n  --tw-invert:  ;\\n  --tw-saturate:  ;\\n  --tw-sepia:  ;\\n  --tw-drop-shadow:  ;\\n  --tw-backdrop-blur:  ;\\n  --tw-backdrop-brightness:  ;\\n  --tw-backdrop-contrast:  ;\\n  --tw-backdrop-grayscale:  ;\\n  --tw-backdrop-hue-rotate:  ;\\n  --tw-backdrop-invert:  ;\\n  --tw-backdrop-opacity:  ;\\n  --tw-backdrop-saturate:  ;\\n  --tw-backdrop-sepia:  ;\\n}\\n\\n::backdrop {\\n  --tw-border-spacing-x: 0;\\n  --tw-border-spacing-y: 0;\\n  --tw-translate-x: 0;\\n  --tw-translate-y: 0;\\n  --tw-rotate: 0;\\n  --tw-skew-x: 0;\\n  --tw-skew-y: 0;\\n  --tw-scale-x: 1;\\n  --tw-scale-y: 1;\\n  --tw-pan-x:  ;\\n  --tw-pan-y:  ;\\n  --tw-pinch-zoom:  ;\\n  --tw-scroll-snap-strictness: proximity;\\n  --tw-ordinal:  ;\\n  --tw-slashed-zero:  ;\\n  --tw-numeric-figure:  ;\\n  --tw-numeric-spacing:  ;\\n  --tw-numeric-fraction:  ;\\n  --tw-ring-inset:  ;\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: rgb(59 130 246 / 0.5);\\n  --tw-ring-offset-shadow: 0 0 #0000;\\n  --tw-ring-shadow: 0 0 #0000;\\n  --tw-shadow: 0 0 #0000;\\n  --tw-shadow-colored: 0 0 #0000;\\n  --tw-blur:  ;\\n  --tw-brightness:  ;\\n  --tw-contrast:  ;\\n  --tw-grayscale:  ;\\n  --tw-hue-rotate:  ;\\n  --tw-invert:  ;\\n  --tw-saturate:  ;\\n  --tw-sepia:  ;\\n  --tw-drop-shadow:  ;\\n  --tw-backdrop-blur:  ;\\n  --tw-backdrop-brightness:  ;\\n  --tw-backdrop-contrast:  ;\\n  --tw-backdrop-grayscale:  ;\\n  --tw-backdrop-hue-rotate:  ;\\n  --tw-backdrop-invert:  ;\\n  --tw-backdrop-opacity:  ;\\n  --tw-backdrop-saturate:  ;\\n  --tw-backdrop-sepia:  ;\\n}\\n.container {\\n  width: 100%;\\n}\\n.\\\\!container {\\n  width: 100% !important;\\n}\\n@media (min-width: 640px) {\\n\\n  .container {\\n    max-width: 640px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 640px !important;\\n  }\\n}\\n@media (min-width: 768px) {\\n\\n  .container {\\n    max-width: 768px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 768px !important;\\n  }\\n}\\n@media (min-width: 1024px) {\\n\\n  .container {\\n    max-width: 1024px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1024px !important;\\n  }\\n}\\n@media (min-width: 1280px) {\\n\\n  .container {\\n    max-width: 1280px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1280px !important;\\n  }\\n}\\n@media (min-width: 1536px) {\\n\\n  .container {\\n    max-width: 1536px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1536px !important;\\n  }\\n}\\n.visible {\\n  visibility: visible;\\n}\\n.invisible {\\n  visibility: hidden;\\n}\\n.static {\\n  position: static;\\n}\\n.absolute {\\n  position: absolute;\\n}\\n.relative {\\n  position: relative;\\n}\\n.right-2 {\\n  right: 0.5rem;\\n}\\n.top-10 {\\n  top: 2.5rem;\\n}\\n.right-8 {\\n  right: 2rem;\\n}\\n.top-8 {\\n  top: 2rem;\\n}\\n.z-40 {\\n  z-index: 40;\\n}\\n.mx-1 {\\n  margin-left: 0.25rem;\\n  margin-right: 0.25rem;\\n}\\n.ml-2 {\\n  margin-left: 0.5rem;\\n}\\n.mr-4 {\\n  margin-right: 1rem;\\n}\\n.ml-1 {\\n  margin-left: 0.25rem;\\n}\\n.mb-1 {\\n  margin-bottom: 0.25rem;\\n}\\n.block {\\n  display: block;\\n}\\n.flex {\\n  display: flex;\\n}\\n.inline-flex {\\n  display: inline-flex;\\n}\\n.grid {\\n  display: grid;\\n}\\n.contents {\\n  display: contents;\\n}\\n.hidden {\\n  display: none;\\n}\\n.h-1 {\\n  height: 0.25rem;\\n}\\n.h-\\\\[14px\\\\] {\\n  height: 14px;\\n}\\n.h-4 {\\n  height: 1rem;\\n}\\n.h-2 {\\n  height: 0.5rem;\\n}\\n.w-full {\\n  width: 100%;\\n}\\n.w-\\\\[6px\\\\] {\\n  width: 6px;\\n}\\n.w-5 {\\n  width: 1.25rem;\\n}\\n.w-0 {\\n  width: 0px;\\n}\\n.w-\\\\[200px\\\\] {\\n  width: 200px;\\n}\\n.w-4 {\\n  width: 1rem;\\n}\\n.w-2 {\\n  width: 0.5rem;\\n}\\n.min-w-\\\\[200px\\\\] {\\n  min-width: 200px;\\n}\\n.max-w-\\\\[16px\\\\] {\\n  max-width: 16px;\\n}\\n.flex-1 {\\n  flex: 1 1 0%;\\n}\\n.rotate-180 {\\n  --tw-rotate: 180deg;\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.rotate-90 {\\n  --tw-rotate: 90deg;\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.transform {\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-pointer {\\n  cursor: pointer;\\n}\\n.resize {\\n  resize: both;\\n}\\n.flex-row {\\n  flex-direction: row;\\n}\\n.flex-col {\\n  flex-direction: column;\\n}\\n.items-end {\\n  align-items: flex-end;\\n}\\n.items-center {\\n  align-items: center;\\n}\\n.justify-start {\\n  justify-content: flex-start;\\n}\\n.justify-end {\\n  justify-content: flex-end;\\n}\\n.justify-center {\\n  justify-content: center;\\n}\\n.overflow-x-hidden {\\n  overflow-x: hidden;\\n}\\n.rounded-full {\\n  border-radius: 9999px;\\n}\\n.rounded-sm {\\n  border-radius: 0.125rem;\\n}\\n.rounded-md {\\n  border-radius: 0.375rem;\\n}\\n.rounded-lg {\\n  border-radius: 0.5rem;\\n}\\n.rounded-r-md {\\n  border-top-right-radius: 0.375rem;\\n  border-bottom-right-radius: 0.375rem;\\n}\\n.rounded-b-md {\\n  border-bottom-right-radius: 0.375rem;\\n  border-bottom-left-radius: 0.375rem;\\n}\\n.rounded-t-md {\\n  border-top-left-radius: 0.375rem;\\n  border-top-right-radius: 0.375rem;\\n}\\n.border {\\n  border-width: 1px;\\n}\\n.border-none {\\n  border-style: none;\\n}\\n.border-red-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(239 68 68 / var(--tw-border-opacity));\\n}\\n.border-green-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(34 197 94 / var(--tw-border-opacity));\\n}\\n.border-blue-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\\n}\\n.border-yellow-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\\n}\\n.border-purple-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(168 85 247 / var(--tw-border-opacity));\\n}\\n.border-pink-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(236 72 153 / var(--tw-border-opacity));\\n}\\n.border-gray-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(113 113 122 / var(--tw-border-opacity));\\n}\\n.border-white {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(255 255 255 / var(--tw-border-opacity));\\n}\\n.border-black {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(0 0 0 / var(--tw-border-opacity));\\n}\\n.border-transparent {\\n  border-color: transparent;\\n}\\n.border-gray-600 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(82 82 91 / var(--tw-border-opacity));\\n}\\n.border-gray-800 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(39 39 42 / var(--tw-border-opacity));\\n}\\n.bg-red-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(239 68 68 / var(--tw-bg-opacity));\\n}\\n.bg-green-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(34 197 94 / var(--tw-bg-opacity));\\n}\\n.bg-blue-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\\n}\\n.bg-yellow-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(234 179 8 / var(--tw-bg-opacity));\\n}\\n.bg-purple-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(168 85 247 / var(--tw-bg-opacity));\\n}\\n.bg-pink-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(236 72 153 / var(--tw-bg-opacity));\\n}\\n.bg-gray-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(113 113 122 / var(--tw-bg-opacity));\\n}\\n.bg-white {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\\n}\\n.bg-black {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\\n}\\n.bg-transparent {\\n  background-color: transparent;\\n}\\n.bg-gray-600 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(82 82 91 / var(--tw-bg-opacity));\\n}\\n.bg-purple-600 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(147 51 234 / var(--tw-bg-opacity));\\n}\\n.bg-gray-800 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(39 39 42 / var(--tw-bg-opacity));\\n}\\n.bg-gray-700 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(63 63 70 / var(--tw-bg-opacity));\\n}\\n.bg-gray-900 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(24 24 27 / var(--tw-bg-opacity));\\n}\\n.bg-opacity-10 {\\n  --tw-bg-opacity: 0.1;\\n}\\n.bg-opacity-30 {\\n  --tw-bg-opacity: 0.3;\\n}\\n.bg-opacity-20 {\\n  --tw-bg-opacity: 0.2;\\n}\\n.bg-opacity-5 {\\n  --tw-bg-opacity: 0.05;\\n}\\n.p-0 {\\n  padding: 0px;\\n}\\n.p-0\\\\.5 {\\n  padding: 0.125rem;\\n}\\n.px-3 {\\n  padding-left: 0.75rem;\\n  padding-right: 0.75rem;\\n}\\n.px-1 {\\n  padding-left: 0.25rem;\\n  padding-right: 0.25rem;\\n}\\n.pt-0 {\\n  padding-top: 0px;\\n}\\n.pb-1 {\\n  padding-bottom: 0.25rem;\\n}\\n.pb-0\\\\.5 {\\n  padding-bottom: 0.125rem;\\n}\\n.pt-2 {\\n  padding-top: 0.5rem;\\n}\\n.pb-0 {\\n  padding-bottom: 0px;\\n}\\n.text-left {\\n  text-align: left;\\n}\\n.text-right {\\n  text-align: right;\\n}\\n.text-sm {\\n  font-size: 0.875rem;\\n  line-height: 1.25rem;\\n}\\n.text-xs {\\n  font-size: 0.75rem;\\n  line-height: 1rem;\\n}\\n.text-red-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(239 68 68 / var(--tw-text-opacity));\\n}\\n.text-green-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(34 197 94 / var(--tw-text-opacity));\\n}\\n.text-blue-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(59 130 246 / var(--tw-text-opacity));\\n}\\n.text-yellow-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(234 179 8 / var(--tw-text-opacity));\\n}\\n.text-purple-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(168 85 247 / var(--tw-text-opacity));\\n}\\n.text-pink-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(236 72 153 / var(--tw-text-opacity));\\n}\\n.text-gray-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(113 113 122 / var(--tw-text-opacity));\\n}\\n.text-white {\\n  --tw-text-opacity: 1;\\n  color: rgb(255 255 255 / var(--tw-text-opacity));\\n}\\n.text-black {\\n  --tw-text-opacity: 1;\\n  color: rgb(0 0 0 / var(--tw-text-opacity));\\n}\\n.text-transparent {\\n  color: transparent;\\n}\\n.text-opacity-50 {\\n  --tw-text-opacity: 0.5;\\n}\\n.text-opacity-75 {\\n  --tw-text-opacity: 0.75;\\n}\\n.opacity-50 {\\n  opacity: 0.5;\\n}\\n.shadow {\\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\\n}\\n.shadow-lg {\\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\\n}\\n.outline-none {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n}\\n.blur {\\n  --tw-blur: blur(8px);\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.invert {\\n  --tw-invert: invert(100%);\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-sm {\\n  --tw-backdrop-blur: blur(4px);\\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition-all {\\n  transition-property: all;\\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  transition-duration: 150ms;\\n}\\n.transition {\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  transition-duration: 150ms;\\n}\\n.duration-300 {\\n  transition-duration: 300ms;\\n}\\n.floating-panel > .control-button:first-child,\\n.floating-panel > .control-combo:first-child,\\n.floating-panel > .control-input:first-child,\\n.floating-panel > .control-label:first-child,\\n.floating-panel > .control-select:first-child,\\n.floating-panel > .control-text:first-child {\\n  margin-top: 0.5rem;\\n}\\n.floating-panel > .control-button:last-child,\\n.floating-panel > .control-combo:last-child,\\n.floating-panel > .control-input:last-child,\\n.floating-panel > .control-label:last-child,\\n.floating-panel > .control-select:last-child,\\n.floating-panel > .control-text:last-child {\\n  margin-bottom: 0.25rem;\\n}\\n.hover\\\\:border-purple-600:hover {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(147 51 234 / var(--tw-border-opacity));\\n}\";\n\nexport { host as default };\n"
  },
  {
    "path": "package/engine-dist/host-f3c963cd.js",
    "content": "const host = \"/*\\n! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com\\n*//*\\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\\n*/\\n\\n*,\\n::before,\\n::after {\\n  box-sizing: border-box; /* 1 */\\n  border-width: 0; /* 2 */\\n  border-style: solid; /* 2 */\\n  border-color: #e4e4e7; /* 2 */\\n}\\n\\n::before,\\n::after {\\n  --tw-content: '';\\n}\\n\\n/*\\n1. Use a consistent sensible line-height in all browsers.\\n2. Prevent adjustments of font size after orientation changes in iOS.\\n3. Use a more readable tab size.\\n4. Use the user's configured `sans` font-family by default.\\n5. Use the user's configured `sans` font-feature-settings by default.\\n*/\\n\\nhtml {\\n  line-height: 1.5; /* 1 */\\n  -webkit-text-size-adjust: 100%; /* 2 */\\n  -moz-tab-size: 4; /* 3 */\\n  -o-tab-size: 4;\\n     tab-size: 4; /* 3 */\\n  font-family: \\\"Lato\\\", sans-serif; /* 4 */\\n  font-feature-settings: normal; /* 5 */\\n}\\n\\n/*\\n1. Remove the margin in all browsers.\\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\\n*/\\n\\nbody {\\n  margin: 0; /* 1 */\\n  line-height: inherit; /* 2 */\\n}\\n\\n/*\\n1. Add the correct height in Firefox.\\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\\n3. Ensure horizontal rules are visible by default.\\n*/\\n\\nhr {\\n  height: 0; /* 1 */\\n  color: inherit; /* 2 */\\n  border-top-width: 1px; /* 3 */\\n}\\n\\n/*\\nAdd the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\nabbr:where([title]) {\\n  -webkit-text-decoration: underline dotted;\\n          text-decoration: underline dotted;\\n}\\n\\n/*\\nRemove the default font size and weight for headings.\\n*/\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n  font-size: inherit;\\n  font-weight: inherit;\\n}\\n\\n/*\\nReset links to optimize for opt-in styling instead of opt-out.\\n*/\\n\\na {\\n  color: inherit;\\n  text-decoration: inherit;\\n}\\n\\n/*\\nAdd the correct font weight in Edge and Safari.\\n*/\\n\\nb,\\nstrong {\\n  font-weight: bolder;\\n}\\n\\n/*\\n1. Use the user's configured `mono` font family by default.\\n2. Correct the odd `em` font sizing in all browsers.\\n*/\\n\\ncode,\\nkbd,\\nsamp,\\npre {\\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace; /* 1 */\\n  font-size: 1em; /* 2 */\\n}\\n\\n/*\\nAdd the correct font size in all browsers.\\n*/\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n/*\\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\\n*/\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\n/*\\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\\n3. Remove gaps between table borders by default.\\n*/\\n\\ntable {\\n  text-indent: 0; /* 1 */\\n  border-color: inherit; /* 2 */\\n  border-collapse: collapse; /* 3 */\\n}\\n\\n/*\\n1. Change the font styles in all browsers.\\n2. Remove the margin in Firefox and Safari.\\n3. Remove default padding in all browsers.\\n*/\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n  font-family: inherit; /* 1 */\\n  font-size: 100%; /* 1 */\\n  font-weight: inherit; /* 1 */\\n  line-height: inherit; /* 1 */\\n  color: inherit; /* 1 */\\n  margin: 0; /* 2 */\\n  padding: 0; /* 3 */\\n}\\n\\n/*\\nRemove the inheritance of text transform in Edge and Firefox.\\n*/\\n\\nbutton,\\nselect {\\n  text-transform: none;\\n}\\n\\n/*\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Remove default button styles.\\n*/\\n\\nbutton,\\n[type='button'],\\n[type='reset'],\\n[type='submit'] {\\n  -webkit-appearance: button; /* 1 */\\n  background-color: transparent; /* 2 */\\n  background-image: none; /* 2 */\\n}\\n\\n/*\\nUse the modern Firefox focus style for all focusable elements.\\n*/\\n\\n:-moz-focusring {\\n  outline: auto;\\n}\\n\\n/*\\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\\n*/\\n\\n:-moz-ui-invalid {\\n  box-shadow: none;\\n}\\n\\n/*\\nAdd the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\nprogress {\\n  vertical-align: baseline;\\n}\\n\\n/*\\nCorrect the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n::-webkit-inner-spin-button,\\n::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n/*\\n1. Correct the odd appearance in Chrome and Safari.\\n2. Correct the outline style in Safari.\\n*/\\n\\n[type='search'] {\\n  -webkit-appearance: textfield; /* 1 */\\n  outline-offset: -2px; /* 2 */\\n}\\n\\n/*\\nRemove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n/*\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Change font properties to `inherit` in Safari.\\n*/\\n\\n::-webkit-file-upload-button {\\n  -webkit-appearance: button; /* 1 */\\n  font: inherit; /* 2 */\\n}\\n\\n/*\\nAdd the correct display in Chrome and Safari.\\n*/\\n\\nsummary {\\n  display: list-item;\\n}\\n\\n/*\\nRemoves the default spacing and border for appropriate elements.\\n*/\\n\\nblockquote,\\ndl,\\ndd,\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\nhr,\\nfigure,\\np,\\npre {\\n  margin: 0;\\n}\\n\\nfieldset {\\n  margin: 0;\\n  padding: 0;\\n}\\n\\nlegend {\\n  padding: 0;\\n}\\n\\nol,\\nul,\\nmenu {\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n/*\\nPrevent resizing textareas horizontally by default.\\n*/\\n\\ntextarea {\\n  resize: vertical;\\n}\\n\\n/*\\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\\n2. Set the default placeholder color to the user's configured gray 400 color.\\n*/\\n\\ninput::-moz-placeholder, textarea::-moz-placeholder {\\n  opacity: 1; /* 1 */\\n  color: #a1a1aa; /* 2 */\\n}\\n\\ninput::placeholder,\\ntextarea::placeholder {\\n  opacity: 1; /* 1 */\\n  color: #a1a1aa; /* 2 */\\n}\\n\\n/*\\nSet the default cursor for buttons.\\n*/\\n\\nbutton,\\n[role=\\\"button\\\"] {\\n  cursor: pointer;\\n}\\n\\n/*\\nMake sure disabled buttons don't get the pointer cursor.\\n*/\\n:disabled {\\n  cursor: default;\\n}\\n\\n/*\\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\\n   This can trigger a poorly considered lint error in some tools but is included by design.\\n*/\\n\\nimg,\\nsvg,\\nvideo,\\ncanvas,\\naudio,\\niframe,\\nembed,\\nobject {\\n  display: block; /* 1 */\\n  vertical-align: middle; /* 2 */\\n}\\n\\n/*\\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\\n*/\\n\\nimg,\\nvideo {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n/* Make elements with the HTML hidden attribute stay hidden by default */\\n[hidden] {\\n  display: none;\\n}\\n\\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\\n  -webkit-appearance: none;\\n     -moz-appearance: none;\\n          appearance: none;\\n  background-color: #fff;\\n  border-color: #71717a;\\n  border-width: 1px;\\n  border-radius: 0px;\\n  padding-top: 0.5rem;\\n  padding-right: 0.75rem;\\n  padding-bottom: 0.5rem;\\n  padding-left: 0.75rem;\\n  font-size: 1rem;\\n  line-height: 1.5rem;\\n  --tw-shadow: 0 0 #0000;\\n}\\n\\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: #2563eb;\\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n  border-color: #2563eb;\\n}\\n\\ninput::-moz-placeholder, textarea::-moz-placeholder {\\n  color: #71717a;\\n  opacity: 1;\\n}\\n\\ninput::placeholder,textarea::placeholder {\\n  color: #71717a;\\n  opacity: 1;\\n}\\n\\n::-webkit-datetime-edit-fields-wrapper {\\n  padding: 0;\\n}\\n\\n::-webkit-date-and-time-value {\\n  min-height: 1.5em;\\n}\\n\\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\\n  padding-top: 0;\\n  padding-bottom: 0;\\n}\\n\\nselect {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\");\\n  background-position: right 0.5rem center;\\n  background-repeat: no-repeat;\\n  background-size: 1.5em 1.5em;\\n  padding-right: 2.5rem;\\n  -webkit-print-color-adjust: exact;\\n          print-color-adjust: exact;\\n}\\n\\n[multiple] {\\n  background-image: initial;\\n  background-position: initial;\\n  background-repeat: unset;\\n  background-size: initial;\\n  padding-right: 0.75rem;\\n  -webkit-print-color-adjust: unset;\\n          print-color-adjust: unset;\\n}\\n\\n[type='checkbox'],[type='radio'] {\\n  -webkit-appearance: none;\\n     -moz-appearance: none;\\n          appearance: none;\\n  padding: 0;\\n  -webkit-print-color-adjust: exact;\\n          print-color-adjust: exact;\\n  display: inline-block;\\n  vertical-align: middle;\\n  background-origin: border-box;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n          user-select: none;\\n  flex-shrink: 0;\\n  height: 1rem;\\n  width: 1rem;\\n  color: #2563eb;\\n  background-color: #fff;\\n  border-color: #71717a;\\n  border-width: 1px;\\n  --tw-shadow: 0 0 #0000;\\n}\\n\\n[type='checkbox'] {\\n  border-radius: 0px;\\n}\\n\\n[type='radio'] {\\n  border-radius: 100%;\\n}\\n\\n[type='checkbox']:focus,[type='radio']:focus {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\\n  --tw-ring-offset-width: 2px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: #2563eb;\\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n}\\n\\n[type='checkbox']:checked,[type='radio']:checked {\\n  border-color: transparent;\\n  background-color: currentColor;\\n  background-size: 100% 100%;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n\\n[type='checkbox']:checked {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\");\\n}\\n\\n[type='radio']:checked {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\\\");\\n}\\n\\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\\n  border-color: transparent;\\n  background-color: currentColor;\\n}\\n\\n[type='checkbox']:indeterminate {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\\\");\\n  border-color: transparent;\\n  background-color: currentColor;\\n  background-size: 100% 100%;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n\\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\\n  border-color: transparent;\\n  background-color: currentColor;\\n}\\n\\n[type='file'] {\\n  background: unset;\\n  border-color: inherit;\\n  border-width: 0;\\n  border-radius: 0;\\n  padding: 0;\\n  font-size: unset;\\n  line-height: inherit;\\n}\\n\\n[type='file']:focus {\\n  outline: 1px solid ButtonText;\\n  outline: 1px auto -webkit-focus-ring-color;\\n}\\n  html {\\n  --tw-text-opacity: 1;\\n  color: rgb(255 255 255 / var(--tw-text-opacity));\\n}\\n\\n*, ::before, ::after {\\n  --tw-border-spacing-x: 0;\\n  --tw-border-spacing-y: 0;\\n  --tw-translate-x: 0;\\n  --tw-translate-y: 0;\\n  --tw-rotate: 0;\\n  --tw-skew-x: 0;\\n  --tw-skew-y: 0;\\n  --tw-scale-x: 1;\\n  --tw-scale-y: 1;\\n  --tw-pan-x:  ;\\n  --tw-pan-y:  ;\\n  --tw-pinch-zoom:  ;\\n  --tw-scroll-snap-strictness: proximity;\\n  --tw-ordinal:  ;\\n  --tw-slashed-zero:  ;\\n  --tw-numeric-figure:  ;\\n  --tw-numeric-spacing:  ;\\n  --tw-numeric-fraction:  ;\\n  --tw-ring-inset:  ;\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: rgb(59 130 246 / 0.5);\\n  --tw-ring-offset-shadow: 0 0 #0000;\\n  --tw-ring-shadow: 0 0 #0000;\\n  --tw-shadow: 0 0 #0000;\\n  --tw-shadow-colored: 0 0 #0000;\\n  --tw-blur:  ;\\n  --tw-brightness:  ;\\n  --tw-contrast:  ;\\n  --tw-grayscale:  ;\\n  --tw-hue-rotate:  ;\\n  --tw-invert:  ;\\n  --tw-saturate:  ;\\n  --tw-sepia:  ;\\n  --tw-drop-shadow:  ;\\n  --tw-backdrop-blur:  ;\\n  --tw-backdrop-brightness:  ;\\n  --tw-backdrop-contrast:  ;\\n  --tw-backdrop-grayscale:  ;\\n  --tw-backdrop-hue-rotate:  ;\\n  --tw-backdrop-invert:  ;\\n  --tw-backdrop-opacity:  ;\\n  --tw-backdrop-saturate:  ;\\n  --tw-backdrop-sepia:  ;\\n}\\n\\n::backdrop {\\n  --tw-border-spacing-x: 0;\\n  --tw-border-spacing-y: 0;\\n  --tw-translate-x: 0;\\n  --tw-translate-y: 0;\\n  --tw-rotate: 0;\\n  --tw-skew-x: 0;\\n  --tw-skew-y: 0;\\n  --tw-scale-x: 1;\\n  --tw-scale-y: 1;\\n  --tw-pan-x:  ;\\n  --tw-pan-y:  ;\\n  --tw-pinch-zoom:  ;\\n  --tw-scroll-snap-strictness: proximity;\\n  --tw-ordinal:  ;\\n  --tw-slashed-zero:  ;\\n  --tw-numeric-figure:  ;\\n  --tw-numeric-spacing:  ;\\n  --tw-numeric-fraction:  ;\\n  --tw-ring-inset:  ;\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: rgb(59 130 246 / 0.5);\\n  --tw-ring-offset-shadow: 0 0 #0000;\\n  --tw-ring-shadow: 0 0 #0000;\\n  --tw-shadow: 0 0 #0000;\\n  --tw-shadow-colored: 0 0 #0000;\\n  --tw-blur:  ;\\n  --tw-brightness:  ;\\n  --tw-contrast:  ;\\n  --tw-grayscale:  ;\\n  --tw-hue-rotate:  ;\\n  --tw-invert:  ;\\n  --tw-saturate:  ;\\n  --tw-sepia:  ;\\n  --tw-drop-shadow:  ;\\n  --tw-backdrop-blur:  ;\\n  --tw-backdrop-brightness:  ;\\n  --tw-backdrop-contrast:  ;\\n  --tw-backdrop-grayscale:  ;\\n  --tw-backdrop-hue-rotate:  ;\\n  --tw-backdrop-invert:  ;\\n  --tw-backdrop-opacity:  ;\\n  --tw-backdrop-saturate:  ;\\n  --tw-backdrop-sepia:  ;\\n}\\n.container {\\n  width: 100%;\\n}\\n.\\\\!container {\\n  width: 100% !important;\\n}\\n@media (min-width: 640px) {\\n\\n  .container {\\n    max-width: 640px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 640px !important;\\n  }\\n}\\n@media (min-width: 768px) {\\n\\n  .container {\\n    max-width: 768px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 768px !important;\\n  }\\n}\\n@media (min-width: 1024px) {\\n\\n  .container {\\n    max-width: 1024px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1024px !important;\\n  }\\n}\\n@media (min-width: 1280px) {\\n\\n  .container {\\n    max-width: 1280px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1280px !important;\\n  }\\n}\\n@media (min-width: 1536px) {\\n\\n  .container {\\n    max-width: 1536px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1536px !important;\\n  }\\n}\\n.visible {\\n  visibility: visible;\\n}\\n.invisible {\\n  visibility: hidden;\\n}\\n.collapse {\\n  visibility: collapse;\\n}\\n.static {\\n  position: static;\\n}\\n.absolute {\\n  position: absolute;\\n}\\n.relative {\\n  position: relative;\\n}\\n.right-2 {\\n  right: 0.5rem;\\n}\\n.top-10 {\\n  top: 2.5rem;\\n}\\n.right-8 {\\n  right: 2rem;\\n}\\n.top-8 {\\n  top: 2rem;\\n}\\n.z-40 {\\n  z-index: 40;\\n}\\n.mx-1 {\\n  margin-left: 0.25rem;\\n  margin-right: 0.25rem;\\n}\\n.ml-2 {\\n  margin-left: 0.5rem;\\n}\\n.mr-4 {\\n  margin-right: 1rem;\\n}\\n.ml-1 {\\n  margin-left: 0.25rem;\\n}\\n.mb-1 {\\n  margin-bottom: 0.25rem;\\n}\\n.block {\\n  display: block;\\n}\\n.flex {\\n  display: flex;\\n}\\n.inline-flex {\\n  display: inline-flex;\\n}\\n.table {\\n  display: table;\\n}\\n.grid {\\n  display: grid;\\n}\\n.contents {\\n  display: contents;\\n}\\n.hidden {\\n  display: none;\\n}\\n.h-1 {\\n  height: 0.25rem;\\n}\\n.h-4 {\\n  height: 1rem;\\n}\\n.h-2 {\\n  height: 0.5rem;\\n}\\n.h-\\\\[14px\\\\] {\\n  height: 14px;\\n}\\n.w-full {\\n  width: 100%;\\n}\\n.w-5 {\\n  width: 1.25rem;\\n}\\n.w-0 {\\n  width: 0px;\\n}\\n.w-4 {\\n  width: 1rem;\\n}\\n.w-2 {\\n  width: 0.5rem;\\n}\\n.w-\\\\[6px\\\\] {\\n  width: 6px;\\n}\\n.w-\\\\[200px\\\\] {\\n  width: 200px;\\n}\\n.min-w-\\\\[200px\\\\] {\\n  min-width: 200px;\\n}\\n.max-w-\\\\[16px\\\\] {\\n  max-width: 16px;\\n}\\n.flex-1 {\\n  flex: 1 1 0%;\\n}\\n.flex-shrink {\\n  flex-shrink: 1;\\n}\\n.border-collapse {\\n  border-collapse: collapse;\\n}\\n.rotate-180 {\\n  --tw-rotate: 180deg;\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.rotate-90 {\\n  --tw-rotate: 90deg;\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.transform {\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-pointer {\\n  cursor: pointer;\\n}\\n.resize {\\n  resize: both;\\n}\\n.flex-row {\\n  flex-direction: row;\\n}\\n.flex-col {\\n  flex-direction: column;\\n}\\n.items-end {\\n  align-items: flex-end;\\n}\\n.items-center {\\n  align-items: center;\\n}\\n.justify-start {\\n  justify-content: flex-start;\\n}\\n.justify-end {\\n  justify-content: flex-end;\\n}\\n.justify-center {\\n  justify-content: center;\\n}\\n.overflow-x-hidden {\\n  overflow-x: hidden;\\n}\\n.rounded-full {\\n  border-radius: 9999px;\\n}\\n.rounded-sm {\\n  border-radius: 0.125rem;\\n}\\n.rounded-md {\\n  border-radius: 0.375rem;\\n}\\n.rounded-lg {\\n  border-radius: 0.5rem;\\n}\\n.rounded-r-md {\\n  border-top-right-radius: 0.375rem;\\n  border-bottom-right-radius: 0.375rem;\\n}\\n.rounded-b-md {\\n  border-bottom-right-radius: 0.375rem;\\n  border-bottom-left-radius: 0.375rem;\\n}\\n.rounded-t-md {\\n  border-top-left-radius: 0.375rem;\\n  border-top-right-radius: 0.375rem;\\n}\\n.border {\\n  border-width: 1px;\\n}\\n.border-none {\\n  border-style: none;\\n}\\n.border-red-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(239 68 68 / var(--tw-border-opacity));\\n}\\n.border-green-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(34 197 94 / var(--tw-border-opacity));\\n}\\n.border-blue-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\\n}\\n.border-yellow-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\\n}\\n.border-purple-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(168 85 247 / var(--tw-border-opacity));\\n}\\n.border-pink-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(236 72 153 / var(--tw-border-opacity));\\n}\\n.border-gray-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(113 113 122 / var(--tw-border-opacity));\\n}\\n.border-white {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(255 255 255 / var(--tw-border-opacity));\\n}\\n.border-black {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(0 0 0 / var(--tw-border-opacity));\\n}\\n.border-transparent {\\n  border-color: transparent;\\n}\\n.border-gray-600 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(82 82 91 / var(--tw-border-opacity));\\n}\\n.border-gray-800 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(39 39 42 / var(--tw-border-opacity));\\n}\\n.bg-red-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(239 68 68 / var(--tw-bg-opacity));\\n}\\n.bg-green-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(34 197 94 / var(--tw-bg-opacity));\\n}\\n.bg-blue-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\\n}\\n.bg-yellow-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(234 179 8 / var(--tw-bg-opacity));\\n}\\n.bg-purple-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(168 85 247 / var(--tw-bg-opacity));\\n}\\n.bg-pink-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(236 72 153 / var(--tw-bg-opacity));\\n}\\n.bg-gray-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(113 113 122 / var(--tw-bg-opacity));\\n}\\n.bg-white {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\\n}\\n.bg-black {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\\n}\\n.bg-transparent {\\n  background-color: transparent;\\n}\\n.bg-gray-600 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(82 82 91 / var(--tw-bg-opacity));\\n}\\n.bg-purple-600 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(147 51 234 / var(--tw-bg-opacity));\\n}\\n.bg-gray-800 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(39 39 42 / var(--tw-bg-opacity));\\n}\\n.bg-gray-700 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(63 63 70 / var(--tw-bg-opacity));\\n}\\n.bg-gray-900 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(24 24 27 / var(--tw-bg-opacity));\\n}\\n.bg-opacity-10 {\\n  --tw-bg-opacity: 0.1;\\n}\\n.bg-opacity-30 {\\n  --tw-bg-opacity: 0.3;\\n}\\n.bg-opacity-20 {\\n  --tw-bg-opacity: 0.2;\\n}\\n.bg-opacity-5 {\\n  --tw-bg-opacity: 0.05;\\n}\\n.p-0 {\\n  padding: 0px;\\n}\\n.p-0\\\\.5 {\\n  padding: 0.125rem;\\n}\\n.px-3 {\\n  padding-left: 0.75rem;\\n  padding-right: 0.75rem;\\n}\\n.px-1 {\\n  padding-left: 0.25rem;\\n  padding-right: 0.25rem;\\n}\\n.pt-0 {\\n  padding-top: 0px;\\n}\\n.pb-1 {\\n  padding-bottom: 0.25rem;\\n}\\n.pb-0 {\\n  padding-bottom: 0px;\\n}\\n.pt-2 {\\n  padding-top: 0.5rem;\\n}\\n.pb-0\\\\.5 {\\n  padding-bottom: 0.125rem;\\n}\\n.text-left {\\n  text-align: left;\\n}\\n.text-right {\\n  text-align: right;\\n}\\n.text-sm {\\n  font-size: 0.875rem;\\n  line-height: 1.25rem;\\n}\\n.text-xs {\\n  font-size: 0.75rem;\\n  line-height: 1rem;\\n}\\n.text-red-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(239 68 68 / var(--tw-text-opacity));\\n}\\n.text-green-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(34 197 94 / var(--tw-text-opacity));\\n}\\n.text-blue-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(59 130 246 / var(--tw-text-opacity));\\n}\\n.text-yellow-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(234 179 8 / var(--tw-text-opacity));\\n}\\n.text-purple-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(168 85 247 / var(--tw-text-opacity));\\n}\\n.text-pink-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(236 72 153 / var(--tw-text-opacity));\\n}\\n.text-gray-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(113 113 122 / var(--tw-text-opacity));\\n}\\n.text-white {\\n  --tw-text-opacity: 1;\\n  color: rgb(255 255 255 / var(--tw-text-opacity));\\n}\\n.text-black {\\n  --tw-text-opacity: 1;\\n  color: rgb(0 0 0 / var(--tw-text-opacity));\\n}\\n.text-transparent {\\n  color: transparent;\\n}\\n.text-opacity-50 {\\n  --tw-text-opacity: 0.5;\\n}\\n.text-opacity-75 {\\n  --tw-text-opacity: 0.75;\\n}\\n.underline {\\n  text-decoration-line: underline;\\n}\\n.opacity-50 {\\n  opacity: 0.5;\\n}\\n.shadow {\\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\\n}\\n.shadow-lg {\\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\\n}\\n.outline-none {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n}\\n.outline {\\n  outline-style: solid;\\n}\\n.blur {\\n  --tw-blur: blur(8px);\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.invert {\\n  --tw-invert: invert(100%);\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-sm {\\n  --tw-backdrop-blur: blur(4px);\\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.backdrop-filter {\\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition-all {\\n  transition-property: all;\\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  transition-duration: 150ms;\\n}\\n.transition {\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  transition-duration: 150ms;\\n}\\n.duration-300 {\\n  transition-duration: 300ms;\\n}\\n.floating-panel > .control-button:first-child,\\n.floating-panel > .control-combo:first-child,\\n.floating-panel > .control-input:first-child,\\n.floating-panel > .control-label:first-child,\\n.floating-panel > .control-select:first-child,\\n.floating-panel > .control-text:first-child {\\n  margin-top: 0.5rem;\\n}\\n.floating-panel > .control-button:last-child,\\n.floating-panel > .control-combo:last-child,\\n.floating-panel > .control-input:last-child,\\n.floating-panel > .control-label:last-child,\\n.floating-panel > .control-select:last-child,\\n.floating-panel > .control-text:last-child {\\n  margin-bottom: 0.25rem;\\n}\\n.hover\\\\:border-purple-600:hover {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(147 51 234 / var(--tw-border-opacity));\\n}\";\n\nexport { host as default };\n"
  },
  {
    "path": "package/engine-dist/host-fa5c0296.js",
    "content": "const host = \"/*\\n! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com\\n*//*\\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\\n*/\\n\\n*,\\n::before,\\n::after {\\n  box-sizing: border-box; /* 1 */\\n  border-width: 0; /* 2 */\\n  border-style: solid; /* 2 */\\n  border-color: #e4e4e7; /* 2 */\\n}\\n\\n::before,\\n::after {\\n  --tw-content: '';\\n}\\n\\n/*\\n1. Use a consistent sensible line-height in all browsers.\\n2. Prevent adjustments of font size after orientation changes in iOS.\\n3. Use a more readable tab size.\\n4. Use the user's configured `sans` font-family by default.\\n5. Use the user's configured `sans` font-feature-settings by default.\\n*/\\n\\nhtml {\\n  line-height: 1.5; /* 1 */\\n  -webkit-text-size-adjust: 100%; /* 2 */\\n  -moz-tab-size: 4; /* 3 */\\n  -o-tab-size: 4;\\n     tab-size: 4; /* 3 */\\n  font-family: \\\"Lato\\\", sans-serif; /* 4 */\\n  font-feature-settings: normal; /* 5 */\\n}\\n\\n/*\\n1. Remove the margin in all browsers.\\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\\n*/\\n\\nbody {\\n  margin: 0; /* 1 */\\n  line-height: inherit; /* 2 */\\n}\\n\\n/*\\n1. Add the correct height in Firefox.\\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\\n3. Ensure horizontal rules are visible by default.\\n*/\\n\\nhr {\\n  height: 0; /* 1 */\\n  color: inherit; /* 2 */\\n  border-top-width: 1px; /* 3 */\\n}\\n\\n/*\\nAdd the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\nabbr:where([title]) {\\n  -webkit-text-decoration: underline dotted;\\n          text-decoration: underline dotted;\\n}\\n\\n/*\\nRemove the default font size and weight for headings.\\n*/\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n  font-size: inherit;\\n  font-weight: inherit;\\n}\\n\\n/*\\nReset links to optimize for opt-in styling instead of opt-out.\\n*/\\n\\na {\\n  color: inherit;\\n  text-decoration: inherit;\\n}\\n\\n/*\\nAdd the correct font weight in Edge and Safari.\\n*/\\n\\nb,\\nstrong {\\n  font-weight: bolder;\\n}\\n\\n/*\\n1. Use the user's configured `mono` font family by default.\\n2. Correct the odd `em` font sizing in all browsers.\\n*/\\n\\ncode,\\nkbd,\\nsamp,\\npre {\\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace; /* 1 */\\n  font-size: 1em; /* 2 */\\n}\\n\\n/*\\nAdd the correct font size in all browsers.\\n*/\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n/*\\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\\n*/\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\n/*\\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\\n3. Remove gaps between table borders by default.\\n*/\\n\\ntable {\\n  text-indent: 0; /* 1 */\\n  border-color: inherit; /* 2 */\\n  border-collapse: collapse; /* 3 */\\n}\\n\\n/*\\n1. Change the font styles in all browsers.\\n2. Remove the margin in Firefox and Safari.\\n3. Remove default padding in all browsers.\\n*/\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n  font-family: inherit; /* 1 */\\n  font-size: 100%; /* 1 */\\n  font-weight: inherit; /* 1 */\\n  line-height: inherit; /* 1 */\\n  color: inherit; /* 1 */\\n  margin: 0; /* 2 */\\n  padding: 0; /* 3 */\\n}\\n\\n/*\\nRemove the inheritance of text transform in Edge and Firefox.\\n*/\\n\\nbutton,\\nselect {\\n  text-transform: none;\\n}\\n\\n/*\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Remove default button styles.\\n*/\\n\\nbutton,\\n[type='button'],\\n[type='reset'],\\n[type='submit'] {\\n  -webkit-appearance: button; /* 1 */\\n  background-color: transparent; /* 2 */\\n  background-image: none; /* 2 */\\n}\\n\\n/*\\nUse the modern Firefox focus style for all focusable elements.\\n*/\\n\\n:-moz-focusring {\\n  outline: auto;\\n}\\n\\n/*\\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\\n*/\\n\\n:-moz-ui-invalid {\\n  box-shadow: none;\\n}\\n\\n/*\\nAdd the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\nprogress {\\n  vertical-align: baseline;\\n}\\n\\n/*\\nCorrect the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n::-webkit-inner-spin-button,\\n::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n/*\\n1. Correct the odd appearance in Chrome and Safari.\\n2. Correct the outline style in Safari.\\n*/\\n\\n[type='search'] {\\n  -webkit-appearance: textfield; /* 1 */\\n  outline-offset: -2px; /* 2 */\\n}\\n\\n/*\\nRemove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n/*\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Change font properties to `inherit` in Safari.\\n*/\\n\\n::-webkit-file-upload-button {\\n  -webkit-appearance: button; /* 1 */\\n  font: inherit; /* 2 */\\n}\\n\\n/*\\nAdd the correct display in Chrome and Safari.\\n*/\\n\\nsummary {\\n  display: list-item;\\n}\\n\\n/*\\nRemoves the default spacing and border for appropriate elements.\\n*/\\n\\nblockquote,\\ndl,\\ndd,\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\nhr,\\nfigure,\\np,\\npre {\\n  margin: 0;\\n}\\n\\nfieldset {\\n  margin: 0;\\n  padding: 0;\\n}\\n\\nlegend {\\n  padding: 0;\\n}\\n\\nol,\\nul,\\nmenu {\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n/*\\nPrevent resizing textareas horizontally by default.\\n*/\\n\\ntextarea {\\n  resize: vertical;\\n}\\n\\n/*\\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\\n2. Set the default placeholder color to the user's configured gray 400 color.\\n*/\\n\\ninput::-moz-placeholder, textarea::-moz-placeholder {\\n  opacity: 1; /* 1 */\\n  color: #a1a1aa; /* 2 */\\n}\\n\\ninput::placeholder,\\ntextarea::placeholder {\\n  opacity: 1; /* 1 */\\n  color: #a1a1aa; /* 2 */\\n}\\n\\n/*\\nSet the default cursor for buttons.\\n*/\\n\\nbutton,\\n[role=\\\"button\\\"] {\\n  cursor: pointer;\\n}\\n\\n/*\\nMake sure disabled buttons don't get the pointer cursor.\\n*/\\n:disabled {\\n  cursor: default;\\n}\\n\\n/*\\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\\n   This can trigger a poorly considered lint error in some tools but is included by design.\\n*/\\n\\nimg,\\nsvg,\\nvideo,\\ncanvas,\\naudio,\\niframe,\\nembed,\\nobject {\\n  display: block; /* 1 */\\n  vertical-align: middle; /* 2 */\\n}\\n\\n/*\\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\\n*/\\n\\nimg,\\nvideo {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n/* Make elements with the HTML hidden attribute stay hidden by default */\\n[hidden] {\\n  display: none;\\n}\\n\\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\\n  -webkit-appearance: none;\\n     -moz-appearance: none;\\n          appearance: none;\\n  background-color: #fff;\\n  border-color: #71717a;\\n  border-width: 1px;\\n  border-radius: 0px;\\n  padding-top: 0.5rem;\\n  padding-right: 0.75rem;\\n  padding-bottom: 0.5rem;\\n  padding-left: 0.75rem;\\n  font-size: 1rem;\\n  line-height: 1.5rem;\\n  --tw-shadow: 0 0 #0000;\\n}\\n\\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: #2563eb;\\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n  border-color: #2563eb;\\n}\\n\\ninput::-moz-placeholder, textarea::-moz-placeholder {\\n  color: #71717a;\\n  opacity: 1;\\n}\\n\\ninput::placeholder,textarea::placeholder {\\n  color: #71717a;\\n  opacity: 1;\\n}\\n\\n::-webkit-datetime-edit-fields-wrapper {\\n  padding: 0;\\n}\\n\\n::-webkit-date-and-time-value {\\n  min-height: 1.5em;\\n}\\n\\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\\n  padding-top: 0;\\n  padding-bottom: 0;\\n}\\n\\nselect {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\");\\n  background-position: right 0.5rem center;\\n  background-repeat: no-repeat;\\n  background-size: 1.5em 1.5em;\\n  padding-right: 2.5rem;\\n  -webkit-print-color-adjust: exact;\\n          print-color-adjust: exact;\\n}\\n\\n[multiple] {\\n  background-image: initial;\\n  background-position: initial;\\n  background-repeat: unset;\\n  background-size: initial;\\n  padding-right: 0.75rem;\\n  -webkit-print-color-adjust: unset;\\n          print-color-adjust: unset;\\n}\\n\\n[type='checkbox'],[type='radio'] {\\n  -webkit-appearance: none;\\n     -moz-appearance: none;\\n          appearance: none;\\n  padding: 0;\\n  -webkit-print-color-adjust: exact;\\n          print-color-adjust: exact;\\n  display: inline-block;\\n  vertical-align: middle;\\n  background-origin: border-box;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n          user-select: none;\\n  flex-shrink: 0;\\n  height: 1rem;\\n  width: 1rem;\\n  color: #2563eb;\\n  background-color: #fff;\\n  border-color: #71717a;\\n  border-width: 1px;\\n  --tw-shadow: 0 0 #0000;\\n}\\n\\n[type='checkbox'] {\\n  border-radius: 0px;\\n}\\n\\n[type='radio'] {\\n  border-radius: 100%;\\n}\\n\\n[type='checkbox']:focus,[type='radio']:focus {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\\n  --tw-ring-offset-width: 2px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: #2563eb;\\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n}\\n\\n[type='checkbox']:checked,[type='radio']:checked {\\n  border-color: transparent;\\n  background-color: currentColor;\\n  background-size: 100% 100%;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n\\n[type='checkbox']:checked {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\");\\n}\\n\\n[type='radio']:checked {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\\\");\\n}\\n\\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\\n  border-color: transparent;\\n  background-color: currentColor;\\n}\\n\\n[type='checkbox']:indeterminate {\\n  background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\\\");\\n  border-color: transparent;\\n  background-color: currentColor;\\n  background-size: 100% 100%;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n\\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\\n  border-color: transparent;\\n  background-color: currentColor;\\n}\\n\\n[type='file'] {\\n  background: unset;\\n  border-color: inherit;\\n  border-width: 0;\\n  border-radius: 0;\\n  padding: 0;\\n  font-size: unset;\\n  line-height: inherit;\\n}\\n\\n[type='file']:focus {\\n  outline: 1px solid ButtonText;\\n  outline: 1px auto -webkit-focus-ring-color;\\n}\\n  html {\\n  --tw-text-opacity: 1;\\n  color: rgb(255 255 255 / var(--tw-text-opacity));\\n}\\n\\n*, ::before, ::after {\\n  --tw-border-spacing-x: 0;\\n  --tw-border-spacing-y: 0;\\n  --tw-translate-x: 0;\\n  --tw-translate-y: 0;\\n  --tw-rotate: 0;\\n  --tw-skew-x: 0;\\n  --tw-skew-y: 0;\\n  --tw-scale-x: 1;\\n  --tw-scale-y: 1;\\n  --tw-pan-x:  ;\\n  --tw-pan-y:  ;\\n  --tw-pinch-zoom:  ;\\n  --tw-scroll-snap-strictness: proximity;\\n  --tw-ordinal:  ;\\n  --tw-slashed-zero:  ;\\n  --tw-numeric-figure:  ;\\n  --tw-numeric-spacing:  ;\\n  --tw-numeric-fraction:  ;\\n  --tw-ring-inset:  ;\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: rgb(59 130 246 / 0.5);\\n  --tw-ring-offset-shadow: 0 0 #0000;\\n  --tw-ring-shadow: 0 0 #0000;\\n  --tw-shadow: 0 0 #0000;\\n  --tw-shadow-colored: 0 0 #0000;\\n  --tw-blur:  ;\\n  --tw-brightness:  ;\\n  --tw-contrast:  ;\\n  --tw-grayscale:  ;\\n  --tw-hue-rotate:  ;\\n  --tw-invert:  ;\\n  --tw-saturate:  ;\\n  --tw-sepia:  ;\\n  --tw-drop-shadow:  ;\\n  --tw-backdrop-blur:  ;\\n  --tw-backdrop-brightness:  ;\\n  --tw-backdrop-contrast:  ;\\n  --tw-backdrop-grayscale:  ;\\n  --tw-backdrop-hue-rotate:  ;\\n  --tw-backdrop-invert:  ;\\n  --tw-backdrop-opacity:  ;\\n  --tw-backdrop-saturate:  ;\\n  --tw-backdrop-sepia:  ;\\n}\\n\\n::backdrop {\\n  --tw-border-spacing-x: 0;\\n  --tw-border-spacing-y: 0;\\n  --tw-translate-x: 0;\\n  --tw-translate-y: 0;\\n  --tw-rotate: 0;\\n  --tw-skew-x: 0;\\n  --tw-skew-y: 0;\\n  --tw-scale-x: 1;\\n  --tw-scale-y: 1;\\n  --tw-pan-x:  ;\\n  --tw-pan-y:  ;\\n  --tw-pinch-zoom:  ;\\n  --tw-scroll-snap-strictness: proximity;\\n  --tw-ordinal:  ;\\n  --tw-slashed-zero:  ;\\n  --tw-numeric-figure:  ;\\n  --tw-numeric-spacing:  ;\\n  --tw-numeric-fraction:  ;\\n  --tw-ring-inset:  ;\\n  --tw-ring-offset-width: 0px;\\n  --tw-ring-offset-color: #fff;\\n  --tw-ring-color: rgb(59 130 246 / 0.5);\\n  --tw-ring-offset-shadow: 0 0 #0000;\\n  --tw-ring-shadow: 0 0 #0000;\\n  --tw-shadow: 0 0 #0000;\\n  --tw-shadow-colored: 0 0 #0000;\\n  --tw-blur:  ;\\n  --tw-brightness:  ;\\n  --tw-contrast:  ;\\n  --tw-grayscale:  ;\\n  --tw-hue-rotate:  ;\\n  --tw-invert:  ;\\n  --tw-saturate:  ;\\n  --tw-sepia:  ;\\n  --tw-drop-shadow:  ;\\n  --tw-backdrop-blur:  ;\\n  --tw-backdrop-brightness:  ;\\n  --tw-backdrop-contrast:  ;\\n  --tw-backdrop-grayscale:  ;\\n  --tw-backdrop-hue-rotate:  ;\\n  --tw-backdrop-invert:  ;\\n  --tw-backdrop-opacity:  ;\\n  --tw-backdrop-saturate:  ;\\n  --tw-backdrop-sepia:  ;\\n}\\n.container {\\n  width: 100%;\\n}\\n.\\\\!container {\\n  width: 100% !important;\\n}\\n@media (min-width: 640px) {\\n\\n  .container {\\n    max-width: 640px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 640px !important;\\n  }\\n}\\n@media (min-width: 768px) {\\n\\n  .container {\\n    max-width: 768px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 768px !important;\\n  }\\n}\\n@media (min-width: 1024px) {\\n\\n  .container {\\n    max-width: 1024px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1024px !important;\\n  }\\n}\\n@media (min-width: 1280px) {\\n\\n  .container {\\n    max-width: 1280px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1280px !important;\\n  }\\n}\\n@media (min-width: 1536px) {\\n\\n  .container {\\n    max-width: 1536px;\\n  }\\n\\n  .\\\\!container {\\n    max-width: 1536px !important;\\n  }\\n}\\n.visible {\\n  visibility: visible;\\n}\\n.invisible {\\n  visibility: hidden;\\n}\\n.collapse {\\n  visibility: collapse;\\n}\\n.static {\\n  position: static;\\n}\\n.absolute {\\n  position: absolute;\\n}\\n.relative {\\n  position: relative;\\n}\\n.right-2 {\\n  right: 0.5rem;\\n}\\n.top-10 {\\n  top: 2.5rem;\\n}\\n.right-8 {\\n  right: 2rem;\\n}\\n.top-8 {\\n  top: 2rem;\\n}\\n.z-40 {\\n  z-index: 40;\\n}\\n.mx-1 {\\n  margin-left: 0.25rem;\\n  margin-right: 0.25rem;\\n}\\n.ml-2 {\\n  margin-left: 0.5rem;\\n}\\n.mr-4 {\\n  margin-right: 1rem;\\n}\\n.ml-1 {\\n  margin-left: 0.25rem;\\n}\\n.mb-1 {\\n  margin-bottom: 0.25rem;\\n}\\n.block {\\n  display: block;\\n}\\n.flex {\\n  display: flex;\\n}\\n.inline-flex {\\n  display: inline-flex;\\n}\\n.table {\\n  display: table;\\n}\\n.grid {\\n  display: grid;\\n}\\n.contents {\\n  display: contents;\\n}\\n.hidden {\\n  display: none;\\n}\\n.h-1 {\\n  height: 0.25rem;\\n}\\n.h-4 {\\n  height: 1rem;\\n}\\n.h-2 {\\n  height: 0.5rem;\\n}\\n.h-\\\\[14px\\\\] {\\n  height: 14px;\\n}\\n.w-full {\\n  width: 100%;\\n}\\n.w-5 {\\n  width: 1.25rem;\\n}\\n.w-0 {\\n  width: 0px;\\n}\\n.w-4 {\\n  width: 1rem;\\n}\\n.w-2 {\\n  width: 0.5rem;\\n}\\n.w-\\\\[6px\\\\] {\\n  width: 6px;\\n}\\n.w-\\\\[200px\\\\] {\\n  width: 200px;\\n}\\n.min-w-\\\\[200px\\\\] {\\n  min-width: 200px;\\n}\\n.max-w-\\\\[16px\\\\] {\\n  max-width: 16px;\\n}\\n.flex-1 {\\n  flex: 1 1 0%;\\n}\\n.flex-shrink {\\n  flex-shrink: 1;\\n}\\n.border-collapse {\\n  border-collapse: collapse;\\n}\\n.rotate-180 {\\n  --tw-rotate: 180deg;\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.rotate-90 {\\n  --tw-rotate: 90deg;\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.transform {\\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-pointer {\\n  cursor: pointer;\\n}\\n.resize {\\n  resize: both;\\n}\\n.flex-row {\\n  flex-direction: row;\\n}\\n.flex-col {\\n  flex-direction: column;\\n}\\n.items-end {\\n  align-items: flex-end;\\n}\\n.items-center {\\n  align-items: center;\\n}\\n.justify-start {\\n  justify-content: flex-start;\\n}\\n.justify-end {\\n  justify-content: flex-end;\\n}\\n.justify-center {\\n  justify-content: center;\\n}\\n.overflow-x-hidden {\\n  overflow-x: hidden;\\n}\\n.rounded-full {\\n  border-radius: 9999px;\\n}\\n.rounded-sm {\\n  border-radius: 0.125rem;\\n}\\n.rounded-md {\\n  border-radius: 0.375rem;\\n}\\n.rounded-lg {\\n  border-radius: 0.5rem;\\n}\\n.rounded-r-md {\\n  border-top-right-radius: 0.375rem;\\n  border-bottom-right-radius: 0.375rem;\\n}\\n.rounded-b-md {\\n  border-bottom-right-radius: 0.375rem;\\n  border-bottom-left-radius: 0.375rem;\\n}\\n.rounded-t-md {\\n  border-top-left-radius: 0.375rem;\\n  border-top-right-radius: 0.375rem;\\n}\\n.border {\\n  border-width: 1px;\\n}\\n.border-none {\\n  border-style: none;\\n}\\n.border-red-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(239 68 68 / var(--tw-border-opacity));\\n}\\n.border-green-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(34 197 94 / var(--tw-border-opacity));\\n}\\n.border-blue-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\\n}\\n.border-yellow-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\\n}\\n.border-purple-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(168 85 247 / var(--tw-border-opacity));\\n}\\n.border-pink-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(236 72 153 / var(--tw-border-opacity));\\n}\\n.border-gray-500 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(113 113 122 / var(--tw-border-opacity));\\n}\\n.border-white {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(255 255 255 / var(--tw-border-opacity));\\n}\\n.border-black {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(0 0 0 / var(--tw-border-opacity));\\n}\\n.border-transparent {\\n  border-color: transparent;\\n}\\n.border-gray-600 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(82 82 91 / var(--tw-border-opacity));\\n}\\n.border-gray-800 {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(39 39 42 / var(--tw-border-opacity));\\n}\\n.bg-red-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(239 68 68 / var(--tw-bg-opacity));\\n}\\n.bg-green-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(34 197 94 / var(--tw-bg-opacity));\\n}\\n.bg-blue-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\\n}\\n.bg-yellow-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(234 179 8 / var(--tw-bg-opacity));\\n}\\n.bg-purple-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(168 85 247 / var(--tw-bg-opacity));\\n}\\n.bg-pink-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(236 72 153 / var(--tw-bg-opacity));\\n}\\n.bg-gray-500 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(113 113 122 / var(--tw-bg-opacity));\\n}\\n.bg-white {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\\n}\\n.bg-black {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\\n}\\n.bg-transparent {\\n  background-color: transparent;\\n}\\n.bg-gray-600 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(82 82 91 / var(--tw-bg-opacity));\\n}\\n.bg-purple-600 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(147 51 234 / var(--tw-bg-opacity));\\n}\\n.bg-gray-800 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(39 39 42 / var(--tw-bg-opacity));\\n}\\n.bg-gray-700 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(63 63 70 / var(--tw-bg-opacity));\\n}\\n.bg-gray-900 {\\n  --tw-bg-opacity: 1;\\n  background-color: rgb(24 24 27 / var(--tw-bg-opacity));\\n}\\n.bg-opacity-10 {\\n  --tw-bg-opacity: 0.1;\\n}\\n.bg-opacity-30 {\\n  --tw-bg-opacity: 0.3;\\n}\\n.bg-opacity-20 {\\n  --tw-bg-opacity: 0.2;\\n}\\n.bg-opacity-5 {\\n  --tw-bg-opacity: 0.05;\\n}\\n.p-0 {\\n  padding: 0px;\\n}\\n.p-0\\\\.5 {\\n  padding: 0.125rem;\\n}\\n.px-3 {\\n  padding-left: 0.75rem;\\n  padding-right: 0.75rem;\\n}\\n.px-1 {\\n  padding-left: 0.25rem;\\n  padding-right: 0.25rem;\\n}\\n.pt-0 {\\n  padding-top: 0px;\\n}\\n.pb-1 {\\n  padding-bottom: 0.25rem;\\n}\\n.pb-0 {\\n  padding-bottom: 0px;\\n}\\n.pt-2 {\\n  padding-top: 0.5rem;\\n}\\n.pb-0\\\\.5 {\\n  padding-bottom: 0.125rem;\\n}\\n.text-left {\\n  text-align: left;\\n}\\n.text-right {\\n  text-align: right;\\n}\\n.text-sm {\\n  font-size: 0.875rem;\\n  line-height: 1.25rem;\\n}\\n.text-xs {\\n  font-size: 0.75rem;\\n  line-height: 1rem;\\n}\\n.text-red-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(239 68 68 / var(--tw-text-opacity));\\n}\\n.text-green-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(34 197 94 / var(--tw-text-opacity));\\n}\\n.text-blue-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(59 130 246 / var(--tw-text-opacity));\\n}\\n.text-yellow-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(234 179 8 / var(--tw-text-opacity));\\n}\\n.text-purple-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(168 85 247 / var(--tw-text-opacity));\\n}\\n.text-pink-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(236 72 153 / var(--tw-text-opacity));\\n}\\n.text-gray-500 {\\n  --tw-text-opacity: 1;\\n  color: rgb(113 113 122 / var(--tw-text-opacity));\\n}\\n.text-white {\\n  --tw-text-opacity: 1;\\n  color: rgb(255 255 255 / var(--tw-text-opacity));\\n}\\n.text-black {\\n  --tw-text-opacity: 1;\\n  color: rgb(0 0 0 / var(--tw-text-opacity));\\n}\\n.text-transparent {\\n  color: transparent;\\n}\\n.text-opacity-50 {\\n  --tw-text-opacity: 0.5;\\n}\\n.text-opacity-75 {\\n  --tw-text-opacity: 0.75;\\n}\\n.underline {\\n  text-decoration-line: underline;\\n}\\n.opacity-50 {\\n  opacity: 0.5;\\n}\\n.shadow {\\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\\n}\\n.shadow-lg {\\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\\n}\\n.outline-none {\\n  outline: 2px solid transparent;\\n  outline-offset: 2px;\\n}\\n.outline {\\n  outline-style: solid;\\n}\\n.blur {\\n  --tw-blur: blur(8px);\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.invert {\\n  --tw-invert: invert(100%);\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-sm {\\n  --tw-backdrop-blur: blur(4px);\\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.backdrop-filter {\\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition-all {\\n  transition-property: all;\\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  transition-duration: 150ms;\\n}\\n.transition {\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  transition-duration: 150ms;\\n}\\n.duration-300 {\\n  transition-duration: 300ms;\\n}\\n.floating-panel > .control-button:first-child,\\n.floating-panel > .control-combo:first-child,\\n.floating-panel > .control-input:first-child,\\n.floating-panel > .control-label:first-child,\\n.floating-panel > .control-select:first-child,\\n.floating-panel > .control-text:first-child {\\n  margin-top: 0.5rem;\\n}\\n.floating-panel > .control-button:last-child,\\n.floating-panel > .control-combo:last-child,\\n.floating-panel > .control-input:last-child,\\n.floating-panel > .control-label:last-child,\\n.floating-panel > .control-select:last-child,\\n.floating-panel > .control-text:last-child {\\n  margin-bottom: 0.25rem;\\n}\\n\\n.control-label + .control-checkbox {\\n  margin-top: -1rem;\\n}\\n\\n.hover\\\\:border-purple-600:hover {\\n  --tw-border-opacity: 1;\\n  border-color: rgb(147 51 234 / var(--tw-border-opacity));\\n}\";\n\nexport { host as default };\n"
  },
  {
    "path": "package/engine-dist/shadeup-engine.js",
    "content": "class GenericShader {\n  uniqueSourceKey = \"\";\n  code;\n  type;\n  payload;\n  parent = null;\n  constructor(code, type) {\n    this.code = code;\n    this.type = type;\n  }\n}\nclass UniformValue {\n  valueType;\n  value;\n  constructor(valueType, value) {\n    this.valueType = valueType;\n    this.value = value;\n  }\n}\nfunction makePrimitiveUniform(type, value) {\n  return new UniformValue(type, value);\n}\nclass UniformPayload {\n  uniforms = /* @__PURE__ */ new Map();\n}\nclass ShaderDispatch {\n  type;\n  drawType = \"screen\";\n  vertexUniforms;\n  fragmentUniforms;\n  depthOnly = false;\n  backfaceCulling = true;\n  reverseZ = false;\n  depthCompare = \"auto\";\n  attachments = null;\n  vertexShader = null;\n  fragmentShader = null;\n  computeShader = null;\n  geometry = null;\n  indexBuffer = null;\n  drawCount = 0;\n  instanceCount = 1;\n  indirectBuffer = null;\n  indirectOffset = 0;\n  overrideDepth = null;\n  computeCount = [0, 0, 0];\n  constructor(type) {\n    this.type = type;\n    this.vertexUniforms = new UniformPayload();\n    this.fragmentUniforms = new UniformPayload();\n  }\n  setVertexUniform(name, value) {\n    this.vertexUniforms.uniforms.set(name, value);\n  }\n  setFragmentUniform(name, value) {\n    this.fragmentUniforms.uniforms.set(name, value);\n  }\n  setVertexShader(shader) {\n    this.vertexShader = shader;\n  }\n  setFragmentShader(shader) {\n    this.fragmentShader = shader;\n  }\n  setComputeShader(shader) {\n    this.computeShader = shader;\n  }\n  setGeometry(geometry) {\n    this.geometry = geometry;\n  }\n  setIndexBuffer(indexBuffer) {\n    this.indexBuffer = indexBuffer;\n  }\n}\nclass GraphicsAdapter {\n  canvas;\n  contextMode = \"draw\";\n  listeners = /* @__PURE__ */ new Map();\n  viewportSize = [0, 0];\n  engine = null;\n  constructor(cnvs) {\n    this.canvas = cnvs;\n  }\n  clear(immediate = false, color = \"auto\") {\n  }\n  draw() {\n  }\n  init() {\n  }\n  addEventListener(name, callback) {\n    let listeners = this.listeners.get(name);\n    if (!listeners) {\n      listeners = [];\n      this.listeners.set(name, listeners);\n    }\n    listeners.push(callback);\n  }\n  removeEventListener(name, callback) {\n    const listeners = this.listeners.get(name);\n    if (!listeners)\n      return;\n    const index = listeners.indexOf(callback);\n    if (index === -1)\n      return;\n    listeners.splice(index, 1);\n  }\n  triggerEvent(name, ...args) {\n    const listeners = this.listeners.get(name);\n    if (!listeners)\n      return;\n    for (const listener of listeners) {\n      listener(...args);\n    }\n  }\n  dispatch(dispatch, options = {\n    depthTest: true\n  }) {\n    this.activateDrawContext();\n  }\n  activateDrawContext() {\n    if (this.contextMode === \"paint\") {\n      this.switchContext(\"draw\");\n    }\n  }\n  activatePaintContext() {\n    if (this.contextMode === \"draw\") {\n      this.switchContext(\"paint\");\n      this.flush();\n    }\n  }\n  switchContext(mode) {\n    this.contextMode = mode;\n    this.triggerEvent(\"context\", mode);\n  }\n  drawImage(image, x, y, width, height) {\n  }\n  async downloadImage() {\n    return new Float32Array(0);\n  }\n  uploadImage(data) {\n  }\n  setViewport(width, height) {\n    this.viewportSize = [width, height];\n  }\n  getOrCreateShader(instance, type, config) {\n    return new GenericShader(\"\", \"vertex\");\n  }\n  createShader(code, type) {\n    return new GenericShader(\"\", \"vertex\");\n  }\n  unbindTexture(texture) {\n  }\n  dispose() {\n  }\n  flush() {\n    this.triggerEvent(\"flush\");\n  }\n  waitForDraw() {\n    return Promise.resolve();\n  }\n}\n\n/**\n * @module LRUCache\n */\nconst perf = typeof performance === 'object' &&\n    performance &&\n    typeof performance.now === 'function'\n    ? performance\n    : Date;\nconst warned = new Set();\n/* c8 ignore start */\nconst PROCESS = (typeof process === 'object' && !!process ? process : {});\n/* c8 ignore start */\nconst emitWarning = (msg, type, code, fn) => {\n    typeof PROCESS.emitWarning === 'function'\n        ? PROCESS.emitWarning(msg, type, code, fn)\n        : console.error(`[${code}] ${type}: ${msg}`);\n};\nlet AC = globalThis.AbortController;\nlet AS = globalThis.AbortSignal;\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n    //@ts-ignore\n    AS = class AbortSignal {\n        onabort;\n        _onabort = [];\n        reason;\n        aborted = false;\n        addEventListener(_, fn) {\n            this._onabort.push(fn);\n        }\n    };\n    //@ts-ignore\n    AC = class AbortController {\n        constructor() {\n            warnACPolyfill();\n        }\n        signal = new AS();\n        abort(reason) {\n            if (this.signal.aborted)\n                return;\n            //@ts-ignore\n            this.signal.reason = reason;\n            //@ts-ignore\n            this.signal.aborted = true;\n            //@ts-ignore\n            for (const fn of this.signal._onabort) {\n                fn(reason);\n            }\n            this.signal.onabort?.(reason);\n        }\n    };\n    let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';\n    const warnACPolyfill = () => {\n        if (!printACPolyfillWarning)\n            return;\n        printACPolyfillWarning = false;\n        emitWarning('AbortController is not defined. If using lru-cache in ' +\n            'node 14, load an AbortController polyfill from the ' +\n            '`node-abort-controller` package. A minimal polyfill is ' +\n            'provided for use by LRUCache.fetch(), but it should not be ' +\n            'relied upon in other contexts (eg, passing it to other APIs that ' +\n            'use AbortController/AbortSignal might have undesirable effects). ' +\n            'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);\n    };\n}\n/* c8 ignore stop */\nconst shouldWarn = (code) => !warned.has(code);\nconst isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max) => !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n        ? Uint8Array\n        : max <= Math.pow(2, 16)\n            ? Uint16Array\n            : max <= Math.pow(2, 32)\n                ? Uint32Array\n                : max <= Number.MAX_SAFE_INTEGER\n                    ? ZeroArray\n                    : null;\n/* c8 ignore stop */\nclass ZeroArray extends Array {\n    constructor(size) {\n        super(size);\n        this.fill(0);\n    }\n}\nclass Stack {\n    heap;\n    length;\n    // private constructor\n    static #constructing = false;\n    static create(max) {\n        const HeapCls = getUintArray(max);\n        if (!HeapCls)\n            return [];\n        Stack.#constructing = true;\n        const s = new Stack(max, HeapCls);\n        Stack.#constructing = false;\n        return s;\n    }\n    constructor(max, HeapCls) {\n        /* c8 ignore start */\n        if (!Stack.#constructing) {\n            throw new TypeError('instantiate Stack using Stack.create(n)');\n        }\n        /* c8 ignore stop */\n        this.heap = new HeapCls(max);\n        this.length = 0;\n    }\n    push(n) {\n        this.heap[this.length++] = n;\n    }\n    pop() {\n        return this.heap[--this.length];\n    }\n}\n/**\n * Default export, the thing you're using this module to get.\n *\n * All properties from the options object (with the exception of\n * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as\n * normal public members. (`max` and `maxBase` are read-only getters.)\n * Changing any of these will alter the defaults for subsequent method calls,\n * but is otherwise safe.\n */\nclass LRUCache {\n    // properties coming in from the options of these, only max and maxSize\n    // really *need* to be protected. The rest can be modified, as they just\n    // set defaults for various methods.\n    #max;\n    #maxSize;\n    #dispose;\n    #disposeAfter;\n    #fetchMethod;\n    /**\n     * {@link LRUCache.OptionsBase.ttl}\n     */\n    ttl;\n    /**\n     * {@link LRUCache.OptionsBase.ttlResolution}\n     */\n    ttlResolution;\n    /**\n     * {@link LRUCache.OptionsBase.ttlAutopurge}\n     */\n    ttlAutopurge;\n    /**\n     * {@link LRUCache.OptionsBase.updateAgeOnGet}\n     */\n    updateAgeOnGet;\n    /**\n     * {@link LRUCache.OptionsBase.updateAgeOnHas}\n     */\n    updateAgeOnHas;\n    /**\n     * {@link LRUCache.OptionsBase.allowStale}\n     */\n    allowStale;\n    /**\n     * {@link LRUCache.OptionsBase.noDisposeOnSet}\n     */\n    noDisposeOnSet;\n    /**\n     * {@link LRUCache.OptionsBase.noUpdateTTL}\n     */\n    noUpdateTTL;\n    /**\n     * {@link LRUCache.OptionsBase.maxEntrySize}\n     */\n    maxEntrySize;\n    /**\n     * {@link LRUCache.OptionsBase.sizeCalculation}\n     */\n    sizeCalculation;\n    /**\n     * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n     */\n    noDeleteOnFetchRejection;\n    /**\n     * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n     */\n    noDeleteOnStaleGet;\n    /**\n     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n     */\n    allowStaleOnFetchAbort;\n    /**\n     * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n     */\n    allowStaleOnFetchRejection;\n    /**\n     * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n     */\n    ignoreFetchAbort;\n    // computed properties\n    #size;\n    #calculatedSize;\n    #keyMap;\n    #keyList;\n    #valList;\n    #next;\n    #prev;\n    #head;\n    #tail;\n    #free;\n    #disposed;\n    #sizes;\n    #starts;\n    #ttls;\n    #hasDispose;\n    #hasFetchMethod;\n    #hasDisposeAfter;\n    /**\n     * Do not call this method unless you need to inspect the\n     * inner workings of the cache.  If anything returned by this\n     * object is modified in any way, strange breakage may occur.\n     *\n     * These fields are private for a reason!\n     *\n     * @internal\n     */\n    static unsafeExposeInternals(c) {\n        return {\n            // properties\n            starts: c.#starts,\n            ttls: c.#ttls,\n            sizes: c.#sizes,\n            keyMap: c.#keyMap,\n            keyList: c.#keyList,\n            valList: c.#valList,\n            next: c.#next,\n            prev: c.#prev,\n            get head() {\n                return c.#head;\n            },\n            get tail() {\n                return c.#tail;\n            },\n            free: c.#free,\n            // methods\n            isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n            backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),\n            moveToTail: (index) => c.#moveToTail(index),\n            indexes: (options) => c.#indexes(options),\n            rindexes: (options) => c.#rindexes(options),\n            isStale: (index) => c.#isStale(index),\n        };\n    }\n    // Protected read-only members\n    /**\n     * {@link LRUCache.OptionsBase.max} (read-only)\n     */\n    get max() {\n        return this.#max;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.maxSize} (read-only)\n     */\n    get maxSize() {\n        return this.#maxSize;\n    }\n    /**\n     * The total computed size of items in the cache (read-only)\n     */\n    get calculatedSize() {\n        return this.#calculatedSize;\n    }\n    /**\n     * The number of items stored in the cache (read-only)\n     */\n    get size() {\n        return this.#size;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n     */\n    get fetchMethod() {\n        return this.#fetchMethod;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.dispose} (read-only)\n     */\n    get dispose() {\n        return this.#dispose;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n     */\n    get disposeAfter() {\n        return this.#disposeAfter;\n    }\n    constructor(options) {\n        const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;\n        if (max !== 0 && !isPosInt(max)) {\n            throw new TypeError('max option must be a nonnegative integer');\n        }\n        const UintArray = max ? getUintArray(max) : Array;\n        if (!UintArray) {\n            throw new Error('invalid max value: ' + max);\n        }\n        this.#max = max;\n        this.#maxSize = maxSize;\n        this.maxEntrySize = maxEntrySize || this.#maxSize;\n        this.sizeCalculation = sizeCalculation;\n        if (this.sizeCalculation) {\n            if (!this.#maxSize && !this.maxEntrySize) {\n                throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize');\n            }\n            if (typeof this.sizeCalculation !== 'function') {\n                throw new TypeError('sizeCalculation set to non-function');\n            }\n        }\n        if (fetchMethod !== undefined &&\n            typeof fetchMethod !== 'function') {\n            throw new TypeError('fetchMethod must be a function if specified');\n        }\n        this.#fetchMethod = fetchMethod;\n        this.#hasFetchMethod = !!fetchMethod;\n        this.#keyMap = new Map();\n        this.#keyList = new Array(max).fill(undefined);\n        this.#valList = new Array(max).fill(undefined);\n        this.#next = new UintArray(max);\n        this.#prev = new UintArray(max);\n        this.#head = 0;\n        this.#tail = 0;\n        this.#free = Stack.create(max);\n        this.#size = 0;\n        this.#calculatedSize = 0;\n        if (typeof dispose === 'function') {\n            this.#dispose = dispose;\n        }\n        if (typeof disposeAfter === 'function') {\n            this.#disposeAfter = disposeAfter;\n            this.#disposed = [];\n        }\n        else {\n            this.#disposeAfter = undefined;\n            this.#disposed = undefined;\n        }\n        this.#hasDispose = !!this.#dispose;\n        this.#hasDisposeAfter = !!this.#disposeAfter;\n        this.noDisposeOnSet = !!noDisposeOnSet;\n        this.noUpdateTTL = !!noUpdateTTL;\n        this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n        this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n        this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n        this.ignoreFetchAbort = !!ignoreFetchAbort;\n        // NB: maxEntrySize is set to maxSize if it's set\n        if (this.maxEntrySize !== 0) {\n            if (this.#maxSize !== 0) {\n                if (!isPosInt(this.#maxSize)) {\n                    throw new TypeError('maxSize must be a positive integer if specified');\n                }\n            }\n            if (!isPosInt(this.maxEntrySize)) {\n                throw new TypeError('maxEntrySize must be a positive integer if specified');\n            }\n            this.#initializeSizeTracking();\n        }\n        this.allowStale = !!allowStale;\n        this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n        this.updateAgeOnGet = !!updateAgeOnGet;\n        this.updateAgeOnHas = !!updateAgeOnHas;\n        this.ttlResolution =\n            isPosInt(ttlResolution) || ttlResolution === 0\n                ? ttlResolution\n                : 1;\n        this.ttlAutopurge = !!ttlAutopurge;\n        this.ttl = ttl || 0;\n        if (this.ttl) {\n            if (!isPosInt(this.ttl)) {\n                throw new TypeError('ttl must be a positive integer if specified');\n            }\n            this.#initializeTTLTracking();\n        }\n        // do not allow completely unbounded caches\n        if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n            throw new TypeError('At least one of max, maxSize, or ttl is required');\n        }\n        if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n            const code = 'LRU_CACHE_UNBOUNDED';\n            if (shouldWarn(code)) {\n                warned.add(code);\n                const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n                    'result in unbounded memory consumption.';\n                emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);\n            }\n        }\n    }\n    /**\n     * Return the remaining TTL time for a given entry key\n     */\n    getRemainingTTL(key) {\n        return this.#keyMap.has(key) ? Infinity : 0;\n    }\n    #initializeTTLTracking() {\n        const ttls = new ZeroArray(this.#max);\n        const starts = new ZeroArray(this.#max);\n        this.#ttls = ttls;\n        this.#starts = starts;\n        this.#setItemTTL = (index, ttl, start = perf.now()) => {\n            starts[index] = ttl !== 0 ? start : 0;\n            ttls[index] = ttl;\n            if (ttl !== 0 && this.ttlAutopurge) {\n                const t = setTimeout(() => {\n                    if (this.#isStale(index)) {\n                        this.delete(this.#keyList[index]);\n                    }\n                }, ttl + 1);\n                // unref() not supported on all platforms\n                /* c8 ignore start */\n                if (t.unref) {\n                    t.unref();\n                }\n                /* c8 ignore stop */\n            }\n        };\n        this.#updateItemAge = index => {\n            starts[index] = ttls[index] !== 0 ? perf.now() : 0;\n        };\n        this.#statusTTL = (status, index) => {\n            if (ttls[index]) {\n                const ttl = ttls[index];\n                const start = starts[index];\n                status.ttl = ttl;\n                status.start = start;\n                status.now = cachedNow || getNow();\n                const age = status.now - start;\n                status.remainingTTL = ttl - age;\n            }\n        };\n        // debounce calls to perf.now() to 1s so we're not hitting\n        // that costly call repeatedly.\n        let cachedNow = 0;\n        const getNow = () => {\n            const n = perf.now();\n            if (this.ttlResolution > 0) {\n                cachedNow = n;\n                const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n                // not available on all platforms\n                /* c8 ignore start */\n                if (t.unref) {\n                    t.unref();\n                }\n                /* c8 ignore stop */\n            }\n            return n;\n        };\n        this.getRemainingTTL = key => {\n            const index = this.#keyMap.get(key);\n            if (index === undefined) {\n                return 0;\n            }\n            const ttl = ttls[index];\n            const start = starts[index];\n            if (ttl === 0 || start === 0) {\n                return Infinity;\n            }\n            const age = (cachedNow || getNow()) - start;\n            return ttl - age;\n        };\n        this.#isStale = index => {\n            return (ttls[index] !== 0 &&\n                starts[index] !== 0 &&\n                (cachedNow || getNow()) - starts[index] > ttls[index]);\n        };\n    }\n    // conditionally set private methods related to TTL\n    #updateItemAge = () => { };\n    #statusTTL = () => { };\n    #setItemTTL = () => { };\n    /* c8 ignore stop */\n    #isStale = () => false;\n    #initializeSizeTracking() {\n        const sizes = new ZeroArray(this.#max);\n        this.#calculatedSize = 0;\n        this.#sizes = sizes;\n        this.#removeItemSize = index => {\n            this.#calculatedSize -= sizes[index];\n            sizes[index] = 0;\n        };\n        this.#requireSize = (k, v, size, sizeCalculation) => {\n            // provisionally accept background fetches.\n            // actual value size will be checked when they return.\n            if (this.#isBackgroundFetch(v)) {\n                return 0;\n            }\n            if (!isPosInt(size)) {\n                if (sizeCalculation) {\n                    if (typeof sizeCalculation !== 'function') {\n                        throw new TypeError('sizeCalculation must be a function');\n                    }\n                    size = sizeCalculation(v, k);\n                    if (!isPosInt(size)) {\n                        throw new TypeError('sizeCalculation return invalid (expect positive integer)');\n                    }\n                }\n                else {\n                    throw new TypeError('invalid size value (must be positive integer). ' +\n                        'When maxSize or maxEntrySize is used, sizeCalculation ' +\n                        'or size must be set.');\n                }\n            }\n            return size;\n        };\n        this.#addItemSize = (index, size, status) => {\n            sizes[index] = size;\n            if (this.#maxSize) {\n                const maxSize = this.#maxSize - sizes[index];\n                while (this.#calculatedSize > maxSize) {\n                    this.#evict(true);\n                }\n            }\n            this.#calculatedSize += sizes[index];\n            if (status) {\n                status.entrySize = size;\n                status.totalCalculatedSize = this.#calculatedSize;\n            }\n        };\n    }\n    #removeItemSize = _i => { };\n    #addItemSize = (_i, _s, _st) => { };\n    #requireSize = (_k, _v, size, sizeCalculation) => {\n        if (size || sizeCalculation) {\n            throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');\n        }\n        return 0;\n    };\n    *#indexes({ allowStale = this.allowStale } = {}) {\n        if (this.#size) {\n            for (let i = this.#tail; true;) {\n                if (!this.#isValidIndex(i)) {\n                    break;\n                }\n                if (allowStale || !this.#isStale(i)) {\n                    yield i;\n                }\n                if (i === this.#head) {\n                    break;\n                }\n                else {\n                    i = this.#prev[i];\n                }\n            }\n        }\n    }\n    *#rindexes({ allowStale = this.allowStale } = {}) {\n        if (this.#size) {\n            for (let i = this.#head; true;) {\n                if (!this.#isValidIndex(i)) {\n                    break;\n                }\n                if (allowStale || !this.#isStale(i)) {\n                    yield i;\n                }\n                if (i === this.#tail) {\n                    break;\n                }\n                else {\n                    i = this.#next[i];\n                }\n            }\n        }\n    }\n    #isValidIndex(index) {\n        return (index !== undefined &&\n            this.#keyMap.get(this.#keyList[index]) === index);\n    }\n    /**\n     * Return a generator yielding `[key, value]` pairs,\n     * in order from most recently used to least recently used.\n     */\n    *entries() {\n        for (const i of this.#indexes()) {\n            if (this.#valList[i] !== undefined &&\n                this.#keyList[i] !== undefined &&\n                !this.#isBackgroundFetch(this.#valList[i])) {\n                yield [this.#keyList[i], this.#valList[i]];\n            }\n        }\n    }\n    /**\n     * Inverse order version of {@link LRUCache.entries}\n     *\n     * Return a generator yielding `[key, value]` pairs,\n     * in order from least recently used to most recently used.\n     */\n    *rentries() {\n        for (const i of this.#rindexes()) {\n            if (this.#valList[i] !== undefined &&\n                this.#keyList[i] !== undefined &&\n                !this.#isBackgroundFetch(this.#valList[i])) {\n                yield [this.#keyList[i], this.#valList[i]];\n            }\n        }\n    }\n    /**\n     * Return a generator yielding the keys in the cache,\n     * in order from most recently used to least recently used.\n     */\n    *keys() {\n        for (const i of this.#indexes()) {\n            const k = this.#keyList[i];\n            if (k !== undefined &&\n                !this.#isBackgroundFetch(this.#valList[i])) {\n                yield k;\n            }\n        }\n    }\n    /**\n     * Inverse order version of {@link LRUCache.keys}\n     *\n     * Return a generator yielding the keys in the cache,\n     * in order from least recently used to most recently used.\n     */\n    *rkeys() {\n        for (const i of this.#rindexes()) {\n            const k = this.#keyList[i];\n            if (k !== undefined &&\n                !this.#isBackgroundFetch(this.#valList[i])) {\n                yield k;\n            }\n        }\n    }\n    /**\n     * Return a generator yielding the values in the cache,\n     * in order from most recently used to least recently used.\n     */\n    *values() {\n        for (const i of this.#indexes()) {\n            const v = this.#valList[i];\n            if (v !== undefined &&\n                !this.#isBackgroundFetch(this.#valList[i])) {\n                yield this.#valList[i];\n            }\n        }\n    }\n    /**\n     * Inverse order version of {@link LRUCache.values}\n     *\n     * Return a generator yielding the values in the cache,\n     * in order from least recently used to most recently used.\n     */\n    *rvalues() {\n        for (const i of this.#rindexes()) {\n            const v = this.#valList[i];\n            if (v !== undefined &&\n                !this.#isBackgroundFetch(this.#valList[i])) {\n                yield this.#valList[i];\n            }\n        }\n    }\n    /**\n     * Iterating over the cache itself yields the same results as\n     * {@link LRUCache.entries}\n     */\n    [Symbol.iterator]() {\n        return this.entries();\n    }\n    /**\n     * Find a value for which the supplied fn method returns a truthy value,\n     * similar to Array.find().  fn is called as fn(value, key, cache).\n     */\n    find(fn, getOptions = {}) {\n        for (const i of this.#indexes()) {\n            const v = this.#valList[i];\n            const value = this.#isBackgroundFetch(v)\n                ? v.__staleWhileFetching\n                : v;\n            if (value === undefined)\n                continue;\n            if (fn(value, this.#keyList[i], this)) {\n                return this.get(this.#keyList[i], getOptions);\n            }\n        }\n    }\n    /**\n     * Call the supplied function on each item in the cache, in order from\n     * most recently used to least recently used.  fn is called as\n     * fn(value, key, cache).  Does not update age or recenty of use.\n     * Does not iterate over stale values.\n     */\n    forEach(fn, thisp = this) {\n        for (const i of this.#indexes()) {\n            const v = this.#valList[i];\n            const value = this.#isBackgroundFetch(v)\n                ? v.__staleWhileFetching\n                : v;\n            if (value === undefined)\n                continue;\n            fn.call(thisp, value, this.#keyList[i], this);\n        }\n    }\n    /**\n     * The same as {@link LRUCache.forEach} but items are iterated over in\n     * reverse order.  (ie, less recently used items are iterated over first.)\n     */\n    rforEach(fn, thisp = this) {\n        for (const i of this.#rindexes()) {\n            const v = this.#valList[i];\n            const value = this.#isBackgroundFetch(v)\n                ? v.__staleWhileFetching\n                : v;\n            if (value === undefined)\n                continue;\n            fn.call(thisp, value, this.#keyList[i], this);\n        }\n    }\n    /**\n     * Delete any stale entries. Returns true if anything was removed,\n     * false otherwise.\n     */\n    purgeStale() {\n        let deleted = false;\n        for (const i of this.#rindexes({ allowStale: true })) {\n            if (this.#isStale(i)) {\n                this.delete(this.#keyList[i]);\n                deleted = true;\n            }\n        }\n        return deleted;\n    }\n    /**\n     * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n     * passed to cache.load()\n     */\n    dump() {\n        const arr = [];\n        for (const i of this.#indexes({ allowStale: true })) {\n            const key = this.#keyList[i];\n            const v = this.#valList[i];\n            const value = this.#isBackgroundFetch(v)\n                ? v.__staleWhileFetching\n                : v;\n            if (value === undefined || key === undefined)\n                continue;\n            const entry = { value };\n            if (this.#ttls && this.#starts) {\n                entry.ttl = this.#ttls[i];\n                // always dump the start relative to a portable timestamp\n                // it's ok for this to be a bit slow, it's a rare operation.\n                const age = perf.now() - this.#starts[i];\n                entry.start = Math.floor(Date.now() - age);\n            }\n            if (this.#sizes) {\n                entry.size = this.#sizes[i];\n            }\n            arr.unshift([key, entry]);\n        }\n        return arr;\n    }\n    /**\n     * Reset the cache and load in the items in entries in the order listed.\n     * Note that the shape of the resulting cache may be different if the\n     * same options are not used in both caches.\n     */\n    load(arr) {\n        this.clear();\n        for (const [key, entry] of arr) {\n            if (entry.start) {\n                // entry.start is a portable timestamp, but we may be using\n                // node's performance.now(), so calculate the offset, so that\n                // we get the intended remaining TTL, no matter how long it's\n                // been on ice.\n                //\n                // it's ok for this to be a bit slow, it's a rare operation.\n                const age = Date.now() - entry.start;\n                entry.start = perf.now() - age;\n            }\n            this.set(key, entry.value, entry);\n        }\n    }\n    /**\n     * Add a value to the cache.\n     *\n     * Note: if `undefined` is specified as a value, this is an alias for\n     * {@link LRUCache#delete}\n     */\n    set(k, v, setOptions = {}) {\n        if (v === undefined) {\n            this.delete(k);\n            return this;\n        }\n        const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;\n        let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n        const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);\n        // if the item doesn't fit, don't do anything\n        // NB: maxEntrySize set to maxSize by default\n        if (this.maxEntrySize && size > this.maxEntrySize) {\n            if (status) {\n                status.set = 'miss';\n                status.maxEntrySizeExceeded = true;\n            }\n            // have to delete, in case something is there already.\n            this.delete(k);\n            return this;\n        }\n        let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n        if (index === undefined) {\n            // addition\n            index = (this.#size === 0\n                ? this.#tail\n                : this.#free.length !== 0\n                    ? this.#free.pop()\n                    : this.#size === this.#max\n                        ? this.#evict(false)\n                        : this.#size);\n            this.#keyList[index] = k;\n            this.#valList[index] = v;\n            this.#keyMap.set(k, index);\n            this.#next[this.#tail] = index;\n            this.#prev[index] = this.#tail;\n            this.#tail = index;\n            this.#size++;\n            this.#addItemSize(index, size, status);\n            if (status)\n                status.set = 'add';\n            noUpdateTTL = false;\n        }\n        else {\n            // update\n            this.#moveToTail(index);\n            const oldVal = this.#valList[index];\n            if (v !== oldVal) {\n                if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n                    oldVal.__abortController.abort(new Error('replaced'));\n                }\n                else if (!noDisposeOnSet) {\n                    if (this.#hasDispose) {\n                        this.#dispose?.(oldVal, k, 'set');\n                    }\n                    if (this.#hasDisposeAfter) {\n                        this.#disposed?.push([oldVal, k, 'set']);\n                    }\n                }\n                this.#removeItemSize(index);\n                this.#addItemSize(index, size, status);\n                this.#valList[index] = v;\n                if (status) {\n                    status.set = 'replace';\n                    const oldValue = oldVal && this.#isBackgroundFetch(oldVal)\n                        ? oldVal.__staleWhileFetching\n                        : oldVal;\n                    if (oldValue !== undefined)\n                        status.oldValue = oldValue;\n                }\n            }\n            else if (status) {\n                status.set = 'update';\n            }\n        }\n        if (ttl !== 0 && !this.#ttls) {\n            this.#initializeTTLTracking();\n        }\n        if (this.#ttls) {\n            if (!noUpdateTTL) {\n                this.#setItemTTL(index, ttl, start);\n            }\n            if (status)\n                this.#statusTTL(status, index);\n        }\n        if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n            const dt = this.#disposed;\n            let task;\n            while ((task = dt?.shift())) {\n                this.#disposeAfter?.(...task);\n            }\n        }\n        return this;\n    }\n    /**\n     * Evict the least recently used item, returning its value or\n     * `undefined` if cache is empty.\n     */\n    pop() {\n        try {\n            while (this.#size) {\n                const val = this.#valList[this.#head];\n                this.#evict(true);\n                if (this.#isBackgroundFetch(val)) {\n                    if (val.__staleWhileFetching) {\n                        return val.__staleWhileFetching;\n                    }\n                }\n                else if (val !== undefined) {\n                    return val;\n                }\n            }\n        }\n        finally {\n            if (this.#hasDisposeAfter && this.#disposed) {\n                const dt = this.#disposed;\n                let task;\n                while ((task = dt?.shift())) {\n                    this.#disposeAfter?.(...task);\n                }\n            }\n        }\n    }\n    #evict(free) {\n        const head = this.#head;\n        const k = this.#keyList[head];\n        const v = this.#valList[head];\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('evicted'));\n        }\n        else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n                this.#dispose?.(v, k, 'evict');\n            }\n            if (this.#hasDisposeAfter) {\n                this.#disposed?.push([v, k, 'evict']);\n            }\n        }\n        this.#removeItemSize(head);\n        // if we aren't about to use the index, then null these out\n        if (free) {\n            this.#keyList[head] = undefined;\n            this.#valList[head] = undefined;\n            this.#free.push(head);\n        }\n        if (this.#size === 1) {\n            this.#head = this.#tail = 0;\n            this.#free.length = 0;\n        }\n        else {\n            this.#head = this.#next[head];\n        }\n        this.#keyMap.delete(k);\n        this.#size--;\n        return head;\n    }\n    /**\n     * Check if a key is in the cache, without updating the recency of use.\n     * Will return false if the item is stale, even though it is technically\n     * in the cache.\n     *\n     * Will not update item age unless\n     * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n     */\n    has(k, hasOptions = {}) {\n        const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n        const index = this.#keyMap.get(k);\n        if (index !== undefined) {\n            const v = this.#valList[index];\n            if (this.#isBackgroundFetch(v) &&\n                v.__staleWhileFetching === undefined) {\n                return false;\n            }\n            if (!this.#isStale(index)) {\n                if (updateAgeOnHas) {\n                    this.#updateItemAge(index);\n                }\n                if (status) {\n                    status.has = 'hit';\n                    this.#statusTTL(status, index);\n                }\n                return true;\n            }\n            else if (status) {\n                status.has = 'stale';\n                this.#statusTTL(status, index);\n            }\n        }\n        else if (status) {\n            status.has = 'miss';\n        }\n        return false;\n    }\n    /**\n     * Like {@link LRUCache#get} but doesn't update recency or delete stale\n     * items.\n     *\n     * Returns `undefined` if the item is stale, unless\n     * {@link LRUCache.OptionsBase.allowStale} is set.\n     */\n    peek(k, peekOptions = {}) {\n        const { allowStale = this.allowStale } = peekOptions;\n        const index = this.#keyMap.get(k);\n        if (index !== undefined &&\n            (allowStale || !this.#isStale(index))) {\n            const v = this.#valList[index];\n            // either stale and allowed, or forcing a refresh of non-stale value\n            return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n        }\n    }\n    #backgroundFetch(k, index, options, context) {\n        const v = index === undefined ? undefined : this.#valList[index];\n        if (this.#isBackgroundFetch(v)) {\n            return v;\n        }\n        const ac = new AC();\n        const { signal } = options;\n        // when/if our AC signals, then stop listening to theirs.\n        signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n            signal: ac.signal,\n        });\n        const fetchOpts = {\n            signal: ac.signal,\n            options,\n            context,\n        };\n        const cb = (v, updateCache = false) => {\n            const { aborted } = ac.signal;\n            const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n            if (options.status) {\n                if (aborted && !updateCache) {\n                    options.status.fetchAborted = true;\n                    options.status.fetchError = ac.signal.reason;\n                    if (ignoreAbort)\n                        options.status.fetchAbortIgnored = true;\n                }\n                else {\n                    options.status.fetchResolved = true;\n                }\n            }\n            if (aborted && !ignoreAbort && !updateCache) {\n                return fetchFail(ac.signal.reason);\n            }\n            // either we didn't abort, and are still here, or we did, and ignored\n            const bf = p;\n            if (this.#valList[index] === p) {\n                if (v === undefined) {\n                    if (bf.__staleWhileFetching) {\n                        this.#valList[index] = bf.__staleWhileFetching;\n                    }\n                    else {\n                        this.delete(k);\n                    }\n                }\n                else {\n                    if (options.status)\n                        options.status.fetchUpdated = true;\n                    this.set(k, v, fetchOpts.options);\n                }\n            }\n            return v;\n        };\n        const eb = (er) => {\n            if (options.status) {\n                options.status.fetchRejected = true;\n                options.status.fetchError = er;\n            }\n            return fetchFail(er);\n        };\n        const fetchFail = (er) => {\n            const { aborted } = ac.signal;\n            const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n            const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;\n            const noDelete = allowStale || options.noDeleteOnFetchRejection;\n            const bf = p;\n            if (this.#valList[index] === p) {\n                // if we allow stale on fetch rejections, then we need to ensure that\n                // the stale value is not removed from the cache when the fetch fails.\n                const del = !noDelete || bf.__staleWhileFetching === undefined;\n                if (del) {\n                    this.delete(k);\n                }\n                else if (!allowStaleAborted) {\n                    // still replace the *promise* with the stale value,\n                    // since we are done with the promise at this point.\n                    // leave it untouched if we're still waiting for an\n                    // aborted background fetch that hasn't yet returned.\n                    this.#valList[index] = bf.__staleWhileFetching;\n                }\n            }\n            if (allowStale) {\n                if (options.status && bf.__staleWhileFetching !== undefined) {\n                    options.status.returnedStale = true;\n                }\n                return bf.__staleWhileFetching;\n            }\n            else if (bf.__returned === bf) {\n                throw er;\n            }\n        };\n        const pcall = (res, rej) => {\n            const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n            if (fmp && fmp instanceof Promise) {\n                fmp.then(v => res(v === undefined ? undefined : v), rej);\n            }\n            // ignored, we go until we finish, regardless.\n            // defer check until we are actually aborting,\n            // so fetchMethod can override.\n            ac.signal.addEventListener('abort', () => {\n                if (!options.ignoreFetchAbort ||\n                    options.allowStaleOnFetchAbort) {\n                    res(undefined);\n                    // when it eventually resolves, update the cache.\n                    if (options.allowStaleOnFetchAbort) {\n                        res = v => cb(v, true);\n                    }\n                }\n            });\n        };\n        if (options.status)\n            options.status.fetchDispatched = true;\n        const p = new Promise(pcall).then(cb, eb);\n        const bf = Object.assign(p, {\n            __abortController: ac,\n            __staleWhileFetching: v,\n            __returned: undefined,\n        });\n        if (index === undefined) {\n            // internal, don't expose status.\n            this.set(k, bf, { ...fetchOpts.options, status: undefined });\n            index = this.#keyMap.get(k);\n        }\n        else {\n            this.#valList[index] = bf;\n        }\n        return bf;\n    }\n    #isBackgroundFetch(p) {\n        if (!this.#hasFetchMethod)\n            return false;\n        const b = p;\n        return (!!b &&\n            b instanceof Promise &&\n            b.hasOwnProperty('__staleWhileFetching') &&\n            b.__abortController instanceof AC);\n    }\n    async fetch(k, fetchOptions = {}) {\n        const { \n        // get options\n        allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, \n        // set options\n        ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, \n        // fetch exclusive options\n        noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;\n        if (!this.#hasFetchMethod) {\n            if (status)\n                status.fetch = 'get';\n            return this.get(k, {\n                allowStale,\n                updateAgeOnGet,\n                noDeleteOnStaleGet,\n                status,\n            });\n        }\n        const options = {\n            allowStale,\n            updateAgeOnGet,\n            noDeleteOnStaleGet,\n            ttl,\n            noDisposeOnSet,\n            size,\n            sizeCalculation,\n            noUpdateTTL,\n            noDeleteOnFetchRejection,\n            allowStaleOnFetchRejection,\n            allowStaleOnFetchAbort,\n            ignoreFetchAbort,\n            status,\n            signal,\n        };\n        let index = this.#keyMap.get(k);\n        if (index === undefined) {\n            if (status)\n                status.fetch = 'miss';\n            const p = this.#backgroundFetch(k, index, options, context);\n            return (p.__returned = p);\n        }\n        else {\n            // in cache, maybe already fetching\n            const v = this.#valList[index];\n            if (this.#isBackgroundFetch(v)) {\n                const stale = allowStale && v.__staleWhileFetching !== undefined;\n                if (status) {\n                    status.fetch = 'inflight';\n                    if (stale)\n                        status.returnedStale = true;\n                }\n                return stale ? v.__staleWhileFetching : (v.__returned = v);\n            }\n            // if we force a refresh, that means do NOT serve the cached value,\n            // unless we are already in the process of refreshing the cache.\n            const isStale = this.#isStale(index);\n            if (!forceRefresh && !isStale) {\n                if (status)\n                    status.fetch = 'hit';\n                this.#moveToTail(index);\n                if (updateAgeOnGet) {\n                    this.#updateItemAge(index);\n                }\n                if (status)\n                    this.#statusTTL(status, index);\n                return v;\n            }\n            // ok, it is stale or a forced refresh, and not already fetching.\n            // refresh the cache.\n            const p = this.#backgroundFetch(k, index, options, context);\n            const hasStale = p.__staleWhileFetching !== undefined;\n            const staleVal = hasStale && allowStale;\n            if (status) {\n                status.fetch = isStale ? 'stale' : 'refresh';\n                if (staleVal && isStale)\n                    status.returnedStale = true;\n            }\n            return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n        }\n    }\n    /**\n     * Return a value from the cache. Will update the recency of the cache\n     * entry found.\n     *\n     * If the key is not found, get() will return `undefined`.\n     */\n    get(k, getOptions = {}) {\n        const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;\n        const index = this.#keyMap.get(k);\n        if (index !== undefined) {\n            const value = this.#valList[index];\n            const fetching = this.#isBackgroundFetch(value);\n            if (status)\n                this.#statusTTL(status, index);\n            if (this.#isStale(index)) {\n                if (status)\n                    status.get = 'stale';\n                // delete only if not an in-flight background fetch\n                if (!fetching) {\n                    if (!noDeleteOnStaleGet) {\n                        this.delete(k);\n                    }\n                    if (status && allowStale)\n                        status.returnedStale = true;\n                    return allowStale ? value : undefined;\n                }\n                else {\n                    if (status &&\n                        allowStale &&\n                        value.__staleWhileFetching !== undefined) {\n                        status.returnedStale = true;\n                    }\n                    return allowStale ? value.__staleWhileFetching : undefined;\n                }\n            }\n            else {\n                if (status)\n                    status.get = 'hit';\n                // if we're currently fetching it, we don't actually have it yet\n                // it's not stale, which means this isn't a staleWhileRefetching.\n                // If it's not stale, and fetching, AND has a __staleWhileFetching\n                // value, then that means the user fetched with {forceRefresh:true},\n                // so it's safe to return that value.\n                if (fetching) {\n                    return value.__staleWhileFetching;\n                }\n                this.#moveToTail(index);\n                if (updateAgeOnGet) {\n                    this.#updateItemAge(index);\n                }\n                return value;\n            }\n        }\n        else if (status) {\n            status.get = 'miss';\n        }\n    }\n    #connect(p, n) {\n        this.#prev[n] = p;\n        this.#next[p] = n;\n    }\n    #moveToTail(index) {\n        // if tail already, nothing to do\n        // if head, move head to next[index]\n        // else\n        //   move next[prev[index]] to next[index] (head has no prev)\n        //   move prev[next[index]] to prev[index]\n        // prev[index] = tail\n        // next[tail] = index\n        // tail = index\n        if (index !== this.#tail) {\n            if (index === this.#head) {\n                this.#head = this.#next[index];\n            }\n            else {\n                this.#connect(this.#prev[index], this.#next[index]);\n            }\n            this.#connect(this.#tail, index);\n            this.#tail = index;\n        }\n    }\n    /**\n     * Deletes a key out of the cache.\n     * Returns true if the key was deleted, false otherwise.\n     */\n    delete(k) {\n        let deleted = false;\n        if (this.#size !== 0) {\n            const index = this.#keyMap.get(k);\n            if (index !== undefined) {\n                deleted = true;\n                if (this.#size === 1) {\n                    this.clear();\n                }\n                else {\n                    this.#removeItemSize(index);\n                    const v = this.#valList[index];\n                    if (this.#isBackgroundFetch(v)) {\n                        v.__abortController.abort(new Error('deleted'));\n                    }\n                    else if (this.#hasDispose || this.#hasDisposeAfter) {\n                        if (this.#hasDispose) {\n                            this.#dispose?.(v, k, 'delete');\n                        }\n                        if (this.#hasDisposeAfter) {\n                            this.#disposed?.push([v, k, 'delete']);\n                        }\n                    }\n                    this.#keyMap.delete(k);\n                    this.#keyList[index] = undefined;\n                    this.#valList[index] = undefined;\n                    if (index === this.#tail) {\n                        this.#tail = this.#prev[index];\n                    }\n                    else if (index === this.#head) {\n                        this.#head = this.#next[index];\n                    }\n                    else {\n                        this.#next[this.#prev[index]] = this.#next[index];\n                        this.#prev[this.#next[index]] = this.#prev[index];\n                    }\n                    this.#size--;\n                    this.#free.push(index);\n                }\n            }\n        }\n        if (this.#hasDisposeAfter && this.#disposed?.length) {\n            const dt = this.#disposed;\n            let task;\n            while ((task = dt?.shift())) {\n                this.#disposeAfter?.(...task);\n            }\n        }\n        return deleted;\n    }\n    /**\n     * Clear the cache entirely, throwing away all values.\n     */\n    clear() {\n        for (const index of this.#rindexes({ allowStale: true })) {\n            const v = this.#valList[index];\n            if (this.#isBackgroundFetch(v)) {\n                v.__abortController.abort(new Error('deleted'));\n            }\n            else {\n                const k = this.#keyList[index];\n                if (this.#hasDispose) {\n                    this.#dispose?.(v, k, 'delete');\n                }\n                if (this.#hasDisposeAfter) {\n                    this.#disposed?.push([v, k, 'delete']);\n                }\n            }\n        }\n        this.#keyMap.clear();\n        this.#valList.fill(undefined);\n        this.#keyList.fill(undefined);\n        if (this.#ttls && this.#starts) {\n            this.#ttls.fill(0);\n            this.#starts.fill(0);\n        }\n        if (this.#sizes) {\n            this.#sizes.fill(0);\n        }\n        this.#head = 0;\n        this.#tail = 0;\n        this.#free.length = 0;\n        this.#calculatedSize = 0;\n        this.#size = 0;\n        if (this.#hasDisposeAfter && this.#disposed) {\n            const dt = this.#disposed;\n            let task;\n            while ((task = dt?.shift())) {\n                this.#disposeAfter?.(...task);\n            }\n        }\n    }\n}\n\nconst FormatCapabilities = {\n  r8unorm: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  r8snorm: {\n    blendable: false,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  r8uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  r8sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  rg8unorm: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rg8snorm: {\n    blendable: false,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rg8uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rg8sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  rgba8unorm: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  \"rgba8unorm-srgb\": {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rgba8snorm: {\n    blendable: false,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rgba8uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rgba8sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  bgra8unorm: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  \"bgra8unorm-srgb\": {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  r16uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  r16sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  r16float: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rg16uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rg16sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  rg16float: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rgba16uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rgba16sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  rgba16float: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  r32uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  r32sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  r32float: {\n    blendable: false,\n    sampleTypes: [\n      \"unfilterable-float\",\n      \"float\",\n      \"float32-filterable\",\n      \"float\",\n      \"float32-filterable\"\n    ]\n  },\n  rg32uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rg32sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  rg32float: {\n    blendable: false,\n    sampleTypes: [\n      \"unfilterable-float\",\n      \"float\",\n      \"float32-filterable\",\n      \"float\",\n      \"float32-filterable\"\n    ]\n  },\n  rgba32uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rgba32sint: {\n    blendable: false,\n    sampleTypes: [\"sint\"]\n  },\n  rgba32float: {\n    blendable: false,\n    sampleTypes: [\n      \"unfilterable-float\",\n      \"float\",\n      \"float32-filterable\",\n      \"float\",\n      \"float32-filterable\"\n    ]\n  },\n  rgb10a2uint: {\n    blendable: false,\n    sampleTypes: [\"uint\"]\n  },\n  rgb10a2unorm: {\n    blendable: true,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  },\n  rg11b10ufloat: {\n    blendable: false,\n    sampleTypes: [\"float\", \"unfilterable-float\"]\n  }\n};\nclass WebGPUMeshData {\n  sourceMesh;\n  vertexBuffer;\n  indexBuffer;\n  vertexCount;\n  indexCount;\n  constructor(sourceMesh, vertexBuffer, indexBuffer, vertexCount, indexCount) {\n    this.sourceMesh = sourceMesh;\n    this.vertexBuffer = vertexBuffer;\n    this.indexBuffer = indexBuffer;\n    this.vertexCount = vertexCount;\n    this.indexCount = indexCount;\n  }\n}\nconst lruCacheOptions = {\n  max: 500\n};\nlet lruUniformOptions = {\n  max: 128\n};\nconst vertexLayout = [\n  {\n    // Position\n    arrayStride: (3 + // Position\n    3 + // Normal\n    3 + // Tangent\n    3 + // Bitangent\n    2 + // UV\n    4) * // Color\n    4,\n    stepMode: \"vertex\",\n    attributes: [\n      {\n        shaderLocation: 0,\n        offset: 0,\n        format: \"float32x3\"\n      },\n      {\n        shaderLocation: 1,\n        offset: 3 * 4,\n        format: \"float32x3\"\n      },\n      {\n        shaderLocation: 2,\n        offset: (3 + 3) * 4,\n        format: \"float32x3\"\n      },\n      {\n        shaderLocation: 3,\n        offset: (3 + 3 + 3) * 4,\n        format: \"float32x3\"\n      },\n      {\n        shaderLocation: 4,\n        offset: (3 + 3 + 3 + 3) * 4,\n        format: \"float32x2\"\n      },\n      {\n        shaderLocation: 5,\n        offset: (3 + 3 + 3 + 3 + 2) * 4,\n        format: \"float32x4\"\n      }\n    ]\n  }\n];\nclass WebGPUAdapter extends GraphicsAdapter {\n  ctx = null;\n  texture = null;\n  storageTexture = null;\n  storageDirty = false;\n  pendingWrites = 0;\n  adapter = null;\n  device = null;\n  headless = false;\n  headlessDimensions = 2;\n  headlessWidth = 1024;\n  headlessHeight = 1024;\n  headlessDepth = 1024;\n  baseUniformBufferSize = 2 * 4;\n  // _vtex_canvas\n  baseUniformValues = new Float32Array(this.baseUniformBufferSize / 4);\n  baseUniformBuffer = null;\n  pipelineCache = new LRUCache(\n    lruCacheOptions\n  );\n  ready = false;\n  catchGPUErrors = true;\n  gpuMeshData = /* @__PURE__ */ new Map();\n  depthTexture = null;\n  textureFormat = \"float4\";\n  gpuTextureFormat = \"rgba8unorm\";\n  clearEnqueued = false;\n  getValueSize(vt) {\n    return getValueSize(vt);\n  }\n  init() {\n    this.ready = false;\n    this.adapter = window.shadeupWebGPUAdapter;\n    this.device = window.shadeupWebGPUDevice;\n    if (!this.adapter || !this.device) {\n      throw new Error(\"WebGPU is not supported\");\n    }\n    this.addEventListener(\"context\", (to) => {\n      if (to == \"paint\") {\n        if (!this.clearEnqueued) {\n          this.beforeScreenDraw();\n        }\n      }\n    });\n    this.baseUniformBuffer = this.device.createBuffer({\n      size: this.baseUniformBufferSize,\n      usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n    });\n    if (this.headless) {\n      if (this.headlessDimensions == 2) {\n        this.startDispatch();\n        this.texture = this.device.createTexture({\n          size: {\n            width: this.headlessWidth,\n            height: this.headlessHeight\n          },\n          format: this.gpuTextureFormat,\n          dimension: \"2d\",\n          viewFormats: [this.gpuTextureFormat],\n          usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n        });\n        this.endDispatch();\n      } else {\n        this.startDispatch();\n        this.texture = this.device.createTexture({\n          size: {\n            width: this.headlessWidth,\n            height: this.headlessHeight,\n            depthOrArrayLayers: this.headlessDepth\n          },\n          format: this.gpuTextureFormat,\n          dimension: \"3d\",\n          usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n        });\n        this.endDispatch();\n      }\n    } else {\n      this.textureFormat = \"uint8\";\n      this.ctx = this.canvas.getContext(\"webgpu\");\n      if (!this.ctx) {\n        throw new Error(\"WebGPU is not supported\");\n      }\n      this.ctx.configure({\n        device: this.device,\n        format: \"rgba8unorm\",\n        alphaMode: \"premultiplied\",\n        usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n      });\n    }\n    if (this.canvas) {\n      this.startDispatch();\n      this.depthTexture = this.device.createTexture({\n        size: {\n          width: this.canvas.width,\n          height: this.canvas.height\n        },\n        format: \"depth24plus\",\n        usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n      });\n      this.endDispatch();\n    }\n    this.ready = true;\n  }\n  startDispatch() {\n    if (!this.device)\n      return;\n    if (this.catchGPUErrors) {\n      this.device.pushErrorScope(\"validation\");\n      this.device.pushErrorScope(\"internal\");\n      this.device.pushErrorScope(\"out-of-memory\");\n    }\n  }\n  endDispatch() {\n    if (!this.device)\n      return;\n    let handler = (e) => {\n      if (!e)\n        return;\n      let ignore = e.message.includes(\"[Invalid ShaderModule] is invalid.\") || e.message.includes(\"[Invalid BindGroup] is invalid.\") || e.message.includes(\"[Invalid ComputePipeline\") || e.message.includes(\"[Invalid RenderPipeline\");\n      if (ignore)\n        return;\n      window.bubbleError(e.message);\n      let stack = new Error();\n      console.error(e, stack.stack);\n    };\n    if (this.catchGPUErrors) {\n      this.device.popErrorScope().then(handler);\n      this.device.popErrorScope().then(handler);\n      this.device.popErrorScope().then(handler);\n    }\n  }\n  drawImageCache;\n  trace(id, data) {\n  }\n  drawImage(image, x, y, width, height) {\n    const { device } = this.getGPU();\n    this.trace(\"drawImage\", { image, x, y, width, height });\n    if (!this.ready) {\n      return;\n    }\n    this.startDispatch();\n    let selfTexture = this.getTexture();\n    device.queue.copyExternalImageToTexture(\n      { source: image },\n      { texture: selfTexture, premultipliedAlpha: true },\n      { width: image.width, height: image.height }\n    );\n    this.copyToCanvas();\n    this.endDispatch();\n  }\n  genericBufferFlags() {\n    return GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n  }\n  copyBufferToBuffer(from, to) {\n    this.getGPU();\n    this.enqueueCommand((encoder) => {\n      encoder.copyBufferToBuffer(\n        this.getOrCreateBuffer(from, this.genericBufferFlags()),\n        0,\n        this.getOrCreateBuffer(to, this.genericBufferFlags()),\n        0,\n        from.elementCount * from.elementBytes\n      );\n    });\n  }\n  async downloadBuffer(buf) {\n    this.trace(\"downloadBuffer\", { buffer: buf });\n    const { device } = this.getGPU();\n    let nativeBuffer = this.getOrCreateBuffer(buf, this.genericBufferFlags());\n    this.startDispatch();\n    let encoder = device.createCommandEncoder();\n    let buffer = device.createBuffer({\n      size: nativeBuffer.size,\n      usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n    });\n    encoder.copyBufferToBuffer(nativeBuffer, 0, buffer, 0, nativeBuffer.size);\n    let commandBuffer = encoder.finish();\n    device.queue.submit([commandBuffer]);\n    await buffer.mapAsync(GPUMapMode.READ);\n    let arr = buffer.getMappedRange();\n    if (!buf.structured) {\n      if (buf.arrayBuffer) {\n        let u8down = new Uint8Array(arr);\n        let u8in = new Uint8Array(buf.arrayBuffer);\n        u8in.set(u8down);\n      } else {\n        throw new Error(\"Buffer not found while downloading\");\n      }\n    } else {\n      if (buf.typeName == \"atomic<uint>\") {\n        let u32down = new Uint32Array(arr);\n        buf.uintArray?.set(u32down);\n      } else if (buf.typeName == \"atomic<int>\") {\n        let i32down = new Int32Array(arr);\n        buf.intArray?.set(i32down);\n      } else {\n        new Uint8Array(buf.arrayBuffer).set(new Uint8Array(arr));\n      }\n    }\n    buffer.destroy();\n    this.endDispatch();\n  }\n  uploadBuffer(buf) {\n    const { device } = this.getGPU();\n    this.trace(\"uploadBuffer\", { buffer: buf });\n    this.startDispatch();\n    let nativeBuffer = this.getOrCreateBuffer(buf, this.genericBufferFlags());\n    if (!buf.structured) {\n      if (buf.arrayBuffer) {\n        let u8in = new Uint8Array(buf.arrayBuffer);\n        device.queue.writeBuffer(nativeBuffer, 0, u8in);\n      } else {\n        throw new Error(\"Buffer not found while downloading\");\n      }\n    } else {\n      if (buf.typeName == \"atomic<uint>\") {\n        device.queue.writeBuffer(nativeBuffer, 0, buf.arrayBuffer);\n      } else if (buf.typeName == \"atomic<int>\") {\n        new Int32Array(buf.elementCount);\n        device.queue.writeBuffer(nativeBuffer, 0, buf.arrayBuffer);\n      } else {\n        device.queue.writeBuffer(nativeBuffer, 0, new Uint8Array(buf.arrayBuffer));\n      }\n    }\n    this.endDispatch();\n  }\n  async downloadImage() {\n    const { device } = this.getGPU();\n    this.flushStorage();\n    this.startDispatch();\n    let encoder = device.createCommandEncoder();\n    let texture = this.getTexture();\n    let stride = parseInt(this.textureFormat[this.textureFormat.length - 1]) || 1;\n    if (this.textureFormat == \"uint8\") {\n      stride = 4;\n    }\n    let bytesPerComponent = 2;\n    if (this.textureFormat == \"uint8\") {\n      bytesPerComponent = 1;\n    } else if (this.textureFormat.startsWith(\"float\")) {\n      bytesPerComponent = 4;\n    } else if (this.textureFormat.startsWith(\"int\")) {\n      bytesPerComponent = 4;\n    } else {\n      bytesPerComponent = 4;\n    }\n    let alignment = 256;\n    let bytesPerRow = texture.width * stride * bytesPerComponent;\n    let neededAlignment = false;\n    let alignmentPad = 0;\n    if (bytesPerRow % alignment != 0) {\n      let oldBytes = bytesPerRow;\n      bytesPerRow += alignment - bytesPerRow % alignment;\n      alignmentPad = bytesPerRow - oldBytes;\n      neededAlignment = true;\n    }\n    let buffer = device.createBuffer({\n      size: bytesPerRow * texture.height,\n      usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n    });\n    encoder.copyTextureToBuffer({ texture }, { buffer, bytesPerRow }, texture);\n    let commandBuffer = encoder.finish();\n    device.queue.submit([commandBuffer]);\n    await buffer.mapAsync(GPUMapMode.READ);\n    let arr;\n    let buf = new Uint8Array(buffer.getMappedRange());\n    if (neededAlignment) {\n      let oldBytes = bytesPerRow - alignmentPad;\n      let newData = new Uint8Array(oldBytes * texture.height);\n      for (let i = 0; i < texture.height; i++) {\n        newData.set(new Uint8Array(buf.buffer, i * bytesPerRow, oldBytes), i * oldBytes);\n      }\n      buf = newData;\n    }\n    if (this.textureFormat == \"uint8\") {\n      arr = new Uint8Array(buf.buffer);\n    } else if (this.textureFormat.startsWith(\"float\")) {\n      arr = new Float32Array(buf.buffer);\n    } else if (this.textureFormat.startsWith(\"int\")) {\n      arr = new Uint32Array(buf.buffer);\n    } else {\n      arr = new Uint32Array(buf.buffer);\n    }\n    this.endDispatch();\n    return arr;\n  }\n  uploadImage(data) {\n    this.startDispatch();\n    const { device } = this.getGPU();\n    let encoder = device.createCommandEncoder();\n    let texture = this.getTexture();\n    let stride = parseInt(this.textureFormat[this.textureFormat.length - 1]) || 1;\n    if (this.textureFormat == \"uint8\") {\n      stride = 4;\n    }\n    let bytesPerComponent = 2;\n    if (this.textureFormat == \"uint8\") {\n      bytesPerComponent = 1;\n    } else if (this.textureFormat.startsWith(\"float\")) {\n      bytesPerComponent = 4;\n    } else if (this.textureFormat.startsWith(\"int\")) {\n      bytesPerComponent = 4;\n    } else {\n      bytesPerComponent = 4;\n    }\n    let alignment = 256;\n    let bytesPerRow = texture.width * stride * bytesPerComponent;\n    if (bytesPerRow % alignment != 0) {\n      let oldBytes = bytesPerRow;\n      bytesPerRow += alignment - bytesPerRow % alignment;\n      let newData = new Uint8Array(bytesPerRow * texture.height);\n      for (let i = 0; i < texture.height; i++) {\n        newData.set(new Uint8Array(data.buffer, i * oldBytes, oldBytes), i * bytesPerRow);\n      }\n      data = newData;\n    }\n    let buffer = device.createBuffer({\n      size: data.byteLength,\n      usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n    });\n    device.queue.writeBuffer(buffer, 0, data);\n    encoder.copyBufferToTexture(\n      { buffer, bytesPerRow },\n      { texture },\n      { width: texture.width, height: texture.height }\n    );\n    let commandBuffer = encoder.finish();\n    device.queue.submit([commandBuffer]);\n    buffer.destroy();\n    this.copyToCanvas();\n    this.endDispatch();\n  }\n  getGPU() {\n    if (!this.device) {\n      throw new Error(\"WebGPU is not supported\");\n    }\n    if (!this.ready) {\n      throw new Error(\"WebGPU is not ready\");\n    }\n    return {\n      device: this.device\n    };\n  }\n  setViewport(width, height) {\n    super.setViewport(width, height);\n    if (!this.device) {\n      return;\n    }\n    this.startDispatch();\n    this.depthTexture?.destroy();\n    this.depthTexture = this.device.createTexture({\n      size: {\n        width,\n        height\n      },\n      format: \"depth24plus\",\n      usage: GPUTextureUsage.RENDER_ATTACHMENT\n    });\n    this.endDispatch();\n  }\n  translateFormatToGPUType(type) {\n    if (type == \"float4\") {\n      return \"vec4<f32>\";\n    }\n    if (type == \"float3\") {\n      return \"vec3<f32>\";\n    }\n    if (type == \"float2\") {\n      return \"vec2<f32>\";\n    }\n    if (type == \"float\") {\n      return \"f32\";\n    }\n    if (type == \"int4\") {\n      return \"vec4<i32>\";\n    }\n    if (type == \"int3\") {\n      return \"vec3<i32>\";\n    }\n    if (type == \"int2\") {\n      return \"vec2<i32>\";\n    }\n    if (type == \"int\") {\n      return \"i32\";\n    }\n    if (type == \"uint4\") {\n      return \"vec4<u32>\";\n    }\n    if (type == \"uint3\") {\n      return \"vec3<u32>\";\n    }\n    if (type == \"uint2\") {\n      return \"vec2<u32>\";\n    }\n    if (type == \"uint\") {\n      return \"u32\";\n    }\n    throw new Error(\"Invalid type\");\n  }\n  getOrCreateShader(instance, type, config) {\n    const { device } = this.getGPU();\n    let key = type;\n    if (config) {\n      if (config.attachments) {\n        key += \"|\" + config.attachments.join(\",\");\n      }\n    }\n    if (instance.parent.types[key]) {\n      return instance.parent.types[key];\n    } else {\n      let base = instance.parent.code.webgpu;\n      for (let param of Object.keys(instance.parent.arraySizes)) {\n        base = base.replace(`%${param}_size%`, instance.parent.arraySizes[param]);\n      }\n      if (instance.parent.params.webgpu.globals.length == 0 && instance.parent.params.webgpu.locals.length == 0) {\n        base = base.replace(`/*SHADEUP_UNIFORM_STRUCT_START*/`, \"\");\n      }\n      if (instance) {\n        for (let key2 of Object.keys(instance.bindings)) {\n          let value = instance.bindings[key2];\n          let isArrayTex = false;\n          if (value instanceof ShadeupTexture2d || Array.isArray(value) && value.length > 0 && value[0] instanceof ShadeupTexture2d) {\n            if (Array.isArray(value)) {\n              if (value.length == 0) {\n                throw new Error(\"Invalid array length\");\n              } else {\n                if (value[0] instanceof ShadeupTexture2d) {\n                  value = value[0];\n                  isArrayTex = true;\n                }\n              }\n            }\n            let name = `%WRITE_TYPE_${key2}%`;\n            let texFormat = value.adapter.gpuTextureFormat;\n            base = base.replace(name, texFormat);\n            if (texFormat == \"depth24plus\" || texFormat == \"depth32float\") {\n              base = base.replace(\n                `var ${key2}_texture: texture_2d${isArrayTex ? \"_array\" : \"\"}<${value.innerType.startsWith(\"float\") ? \"f32\" : value.innerType.startsWith(\"int\") ? \"i32\" : \"u32\"}>`,\n                `var ${key2}_texture: texture_depth_2d${isArrayTex ? \"_array\" : \"\"}`\n              );\n              let startIndexes = base.matchAll(new RegExp(`textureLoad\\\\(${key2}_texture, `, \"g\"));\n              for (let match of startIndexes) {\n                let balance = 0;\n                let hitFirst = false;\n                for (let i = match.index ?? 0; i < base.length; i++) {\n                  if (base[i] == \"(\") {\n                    balance++;\n                    hitFirst = true;\n                  }\n                  if (base[i] == \")\") {\n                    balance--;\n                  }\n                  if (balance == 0 && hitFirst) {\n                    base = base.substring(0, i + 1) + base.substring(i + 3, base.length);\n                    break;\n                  }\n                }\n              }\n              startIndexes = base.matchAll(new RegExp(`textureSample\\\\(${key2}_texture, `, \"g\"));\n              let replaces = [];\n              for (let match of startIndexes) {\n                let balance = 0;\n                let hitFirst = false;\n                for (let i = match.index ?? 0; i < base.length; i++) {\n                  if (base[i] == \"(\") {\n                    balance++;\n                    hitFirst = true;\n                  }\n                  if (base[i] == \")\") {\n                    balance--;\n                  }\n                  if (balance == 0 && hitFirst) {\n                    replaces.push(base.substring(match.index, i));\n                    break;\n                  }\n                }\n              }\n              for (let replace of replaces) {\n                base = base.replace(replace, \"vec4<f32>(\" + replace + \")\");\n              }\n            }\n          }\n        }\n      }\n      if (type == \"compute\") {\n        base = base.replaceAll(\"%GROUP_INDEX%\", \"0\");\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `\n\t\t\t\t\t\n\t\t\t\t\tstruct _ComputeUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _compute_uniform_input: _ComputeUniformInput;\n\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `void`);\n        base = base.replace(\n          `/*__SHADEUP_TEMPLATE_INPUT*/`,\n          `\n\t\t\t\t@builtin(workgroup_id) workgroup_id : vec3<u32>,\n\t\t\t\t@builtin(local_invocation_id) local_invocation_id : vec3<u32>,\n\t\t\t\t@builtin(global_invocation_id) global_invocation_id : vec3<u32>,\n\t\t\t\t@builtin(local_invocation_index) local_invocation_index: u32,\n\t\t\t\t@builtin(num_workgroups) num_workgroups: vec3<u32>\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `var _i_in: ShaderInput;\n\t\t\t\t\t_i_in.groupId = vec3<i32>(workgroup_id);\n\t\t\t\t\t_i_in.groupSize = vec3<i32>(num_workgroups);\n\t\t\t\t\t_i_in.localId = vec3<i32>(local_invocation_id);\n\t\t\t\t\t_i_in.globalId = vec3<i32>(global_invocation_id);\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\", ``.replace(/\\t\\n/g, \"\"));\n      } else if (type == \"vertex\") {\n        base = base.replaceAll(\"%GROUP_INDEX%\", \"1\");\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeOutput}\n\t\t\t\t\t};\n\t\t\t\t\tstruct _VertexUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _vertex_uniform_input: _VertexUniformInput;\n\n\t\t\t\t\t@vertex\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `_VertexShaderOutput`);\n        base = base.replace(\n          `/*__SHADEUP_TEMPLATE_INPUT*/`,\n          `\n\t\t\t\t@builtin(vertex_index) vertexIndex: u32,\n\t\t\t\t@builtin(instance_index) instanceIndex: u32,\n\t\t\t\t@location(0) position: vec3<f32>,\n\t\t\t\t@location(1) normal: vec3<f32>,\n\t\t\t\t@location(2) tangent: vec3<f32>,\n\t\t\t\t@location(3) bitangent: vec3<f32>,\n\t\t\t\t@location(4) uv: vec2<f32>,\n\t\t\t\t@location(5) color: vec4<f32>\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `var _i_out: _VertexShaderOutput;\n\t\t\t\t\t_i_out.position = vec4(position, 1.0);\n\t\t\t\t\t_i_out.normal = normal;\n\t\t\t\t\t_i_out.tangent = tangent;\n\t\t\t\t\t_i_out.bitangent = bitangent;\n\t\t\t\t\t_i_out.uv = uv;\n\t\t\t\t\t_i_out.color = color;\n\t\t\t\t\t_i_out.instanceIndex = instanceIndex;\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = position;\n\t\t\t\t\t_i_in.normal = normal;\n\t\t\t\t\t_i_in.tangent = tangent;\n\t\t\t\t\t_i_in.bitangent = bitangent;\n\t\t\t\t\t_i_in.vertexIndex = i32(vertexIndex);\n\t\t\t\t\t_i_in.instanceIndex = i32(instanceIndex);\n\t\t\t\t\t_i_in.uv = uv;\n\t\t\t\t\t_i_in.color = color;\n\t\t\t\t\t_i_in.screen = vec2<f32>(0, 0);\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n          `\n\t\t\t\t\t// _i_out.position = vec4<f32>(_i_out.position.x, _i_out.position.y, (1.0 + _i_out.position.z) / 2.0, _i_out.position.w);\n\t\t\t\t\t_i_out.worldPosition = position;\n\t\t\t\t\treturn _i_out;`.replace(/\\t\\n/g, \"\")\n        );\n      } else if (type == \"vertex-indexed\") {\n        base = base.replaceAll(\"%GROUP_INDEX%\", \"1\");\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeOutput}\n\t\t\t\t\t};\n\t\t\t\t\tstruct _VertexUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _vertex_uniform_input: _VertexUniformInput;\n\n\t\t\t\t\t@vertex\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `_VertexShaderOutput`);\n        base = base.replace(\n          `/*__SHADEUP_TEMPLATE_INPUT*/`,\n          `\n\t\t\t\t@builtin(vertex_index) vertexIndex: u32,\n\t\t\t\t@builtin(instance_index) instanceIndex: u32,\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `var _i_out: _VertexShaderOutput;\n\t\t\t\t\t_i_out.position = vec4(0.0, 0.0, 0.0, 1.0);\n\t\t\t\t\t_i_out.normal = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.tangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.bitangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.uv = vec2(0.0, 0.0);\n\t\t\t\t\t_i_out.color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.instanceIndex = instanceIndex;\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.normal = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.tangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.bitangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.vertexIndex = i32(vertexIndex);\n\t\t\t\t\t_i_in.instanceIndex = i32(instanceIndex);\n\t\t\t\t\t_i_in.uv = vec2(0.0, 0.0);\n\t\t\t\t\t_i_in.color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.screen = vec2<f32>(0, 0);\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n          `\n\t\t\t\t\t// _i_out.position = vec4<f32>(_i_out.position.x, _i_out.position.y, (1.0 + _i_out.position.z) / 2.0, _i_out.position.w);\n\t\t\t\t\t// _i_out.worldPosition = position;\n\t\t\t\t\treturn _i_out;`.replace(/\\t\\n/g, \"\")\n        );\n      } else {\n        let headerStr = \"\";\n        if (config?.attachments) {\n          let i = 0;\n          headerStr += \"struct _ShaderFragmentOutput {\\n\";\n          for (let attachment of config.attachments) {\n            headerStr += `@location(${i}) attachment${i}: ${this.translateFormatToGPUType(\n              attachment\n            )},\n`;\n            i++;\n          }\n          headerStr += \"\\n};\";\n        }\n        base = base.replaceAll(\"%GROUP_INDEX%\", \"0\");\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeInput}\n\t\t\t\t\t};\n\n\t\t\t\t\t${headerStr}\n\t\t\t\t\t\n\t\t\t\t\tstruct _FragmentUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _fragment_uniform_input: _FragmentUniformInput;\n\n\t\t\t\t\t@fragment\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          `/*__SHADEUP_TEMPLATE_OUTPUT*/`,\n          config?.attachments ? `_ShaderFragmentOutput` : `@location(0) vec4<f32>`\n        );\n        base = base.replace(\n          `/*__SHADEUP_TEMPLATE_INPUT*/`,\n          `\n\t\t\t\t_frag_in: _VertexShaderOutput\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        let writeCustoms = instance.parent.params.webgpu.attributeInput.split(\"@location\").length;\n        let extra = \"\";\n        if (writeCustoms >= 2) {\n          for (let i = 0; i < writeCustoms - 1; i++) {\n            extra += `_i_in.custom${i} = _frag_in.custom${i};\n`;\n          }\n        }\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `var _i_out: ${config?.attachments ? \"_ShaderFragmentOutput\" : \"ShaderOutput\"};\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = _frag_in.worldPosition;\n\t\t\t\t\t_i_in.clipPosition = _frag_in.position;\n\t\t\t\t\t_i_in.normal = _frag_in.normal;\n\t\t\t\t\t_i_in.tangent = _frag_in.tangent;\n\t\t\t\t\t_i_in.bitangent = _frag_in.bitangent;\n\t\t\t\t\t_i_in.uv = _frag_in.uv;\n\t\t\t\t\t_i_in.color = _frag_in.color;\n\t\t\t\t\t_i_in.screen = vec2<f32>(_frag_in.position.x, _frag_in.position.y);\n\t\t\t\t\t_i_in.instanceIndex = i32(_frag_in.instanceIndex);\n\t\t\t\t\t${extra}\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n          `return ${config?.attachments ? \"_i_out\" : \"_i_out.color\"};`.replace(/\\t\\n/g, \"\")\n        );\n      }\n      this.startDispatch();\n      let shader = device.createShaderModule({\n        code: base\n      });\n      this.endDispatch();\n      if (!shader)\n        throw new Error(\"Failed to create shader\");\n      instance.version++;\n      let gShader = new GenericShader(base, type);\n      gShader.payload = shader;\n      gShader.parent = instance.parent;\n      instance.parent.types[key] = gShader;\n      return gShader;\n    }\n  }\n  createShader(code, type) {\n    const { device } = this.getGPU();\n    if (type == \"compute\") {\n      let gComputeShader = new GenericShader(code.webgl, type);\n      gComputeShader.payload = code.software;\n      gComputeShader.parent = null;\n      return gComputeShader;\n    }\n    this.startDispatch();\n    let shader = device.createShaderModule({\n      code: code.webgpu\n    });\n    this.endDispatch();\n    if (!shader) {\n      console.error(\"Failed to create shader\");\n      throw new Error(\"Failed to create shader\");\n    }\n    let gShader = new GenericShader(code.webgpu, type);\n    gShader.payload = shader;\n    gShader.parent = null;\n    return gShader;\n  }\n  clear(immediate = false, color = \"auto\") {\n    this.enqueueCommand((encoder) => {\n      this.getGPU();\n      if (!this.depthTexture)\n        return;\n      const textureView = this.getTexture().createView();\n      if (this.gpuTextureFormat == \"depth24plus\" || this.gpuTextureFormat == \"depth32float\") {\n        const clearPassDesc = {\n          colorAttachments: [],\n          depthStencilAttachment: {\n            view: this.getTexture().createView(),\n            depthClearValue: typeof color === \"number\" ? color : 1,\n            depthLoadOp: \"clear\",\n            depthStoreOp: \"store\"\n          }\n        };\n        const passEncoder = encoder.beginRenderPass(clearPassDesc);\n        passEncoder.end();\n      } else {\n        const clearPassDesc = {\n          colorAttachments: [\n            {\n              view: textureView,\n              clearValue: Array.isArray(color) ? { r: color[0], g: color[1], b: color[2], a: color[3] } : { r: 0, g: 0, b: 0, a: 0 },\n              storeOp: \"store\",\n              loadOp: \"clear\"\n            }\n          ],\n          depthStencilAttachment: {\n            view: this.depthTexture.createView(),\n            depthClearValue: 1,\n            depthLoadOp: \"clear\",\n            depthStoreOp: \"store\"\n          }\n        };\n        const passEncoder = encoder.beginRenderPass(clearPassDesc);\n        passEncoder.end();\n      }\n    }, immediate);\n  }\n  fill(color, immediate = false) {\n    this.enqueueCommand((encoder) => {\n      this.getGPU();\n      if (!this.depthTexture)\n        return;\n      const textureView = this.getTexture().createView({\n        format: this.gpuTextureFormat\n      });\n      const clearPassDesc = {\n        colorAttachments: [\n          {\n            view: textureView,\n            clearValue: { r: color[0], g: color[1], b: color[2], a: color[3] },\n            storeOp: \"store\",\n            loadOp: \"clear\"\n          }\n        ],\n        depthStencilAttachment: {\n          view: this.depthTexture.createView(),\n          depthClearValue: 1,\n          depthLoadOp: \"clear\",\n          depthStoreOp: \"store\"\n        }\n      };\n      const passEncoder = encoder.beginRenderPass(clearPassDesc);\n      passEncoder.end();\n    }, immediate);\n  }\n  unbindTexture(texture) {\n  }\n  getOrCreateMeshData(mesh) {\n    const { device } = this.getGPU();\n    if (mesh.symbol == null)\n      mesh.symbol = Symbol();\n    if (mesh.$__gpuMeshData) {\n      return mesh.$__gpuMeshData;\n    } else {\n      let meshVertices = mesh.getVertices();\n      let meshIndices = mesh.getTriangles();\n      let meshNormals = mesh.getNormals();\n      let meshTangents = mesh.getTangents();\n      let meshBitangents = mesh.getBitangents();\n      let meshUVs = mesh.getUVs();\n      let meshColors = mesh.getColors();\n      let vertexCount = meshVertices.length;\n      let vertexData = new Float32Array(vertexCount * (3 + 3 + 3 + 3 + 2 + 4));\n      let indexData = new Uint32Array(meshIndices.length);\n      let offset = 0;\n      for (let i = 0; i < vertexCount; i++) {\n        vertexData[offset++] = meshVertices[i][0];\n        vertexData[offset++] = meshVertices[i][1];\n        vertexData[offset++] = meshVertices[i][2];\n        if (meshNormals[i]) {\n          vertexData[offset++] = meshNormals[i][0];\n          vertexData[offset++] = meshNormals[i][1];\n          vertexData[offset++] = meshNormals[i][2];\n        } else {\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n        }\n        if (meshTangents[i]) {\n          vertexData[offset++] = meshTangents[i][0];\n          vertexData[offset++] = meshTangents[i][1];\n          vertexData[offset++] = meshTangents[i][2];\n        } else {\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n        }\n        if (meshBitangents[i]) {\n          vertexData[offset++] = meshBitangents[i][0];\n          vertexData[offset++] = meshBitangents[i][1];\n          vertexData[offset++] = meshBitangents[i][2];\n        } else {\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n        }\n        if (meshUVs[i]) {\n          vertexData[offset++] = meshUVs[i][0];\n          vertexData[offset++] = meshUVs[i][1];\n        } else {\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n        }\n        if (meshColors[i]) {\n          vertexData[offset++] = meshColors[i][0];\n          vertexData[offset++] = meshColors[i][1];\n          vertexData[offset++] = meshColors[i][2];\n          vertexData[offset++] = meshColors[i][3];\n        } else {\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n          vertexData[offset++] = 0;\n        }\n      }\n      for (let i = 0; i < meshIndices.length; i++) {\n        indexData[i] = meshIndices[i];\n      }\n      let vertexBuffer = device.createBuffer({\n        size: vertexData.byteLength,\n        usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n      });\n      let indexBuffer = device.createBuffer({\n        size: indexData.byteLength,\n        usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n      });\n      device.queue.writeBuffer(vertexBuffer, 0, vertexData);\n      device.queue.writeBuffer(indexBuffer, 0, indexData);\n      let meshData = new WebGPUMeshData(\n        mesh,\n        vertexBuffer,\n        indexBuffer,\n        vertexCount,\n        meshIndices.length\n      );\n      mesh.$__gpuMeshData = meshData;\n      return meshData;\n    }\n  }\n  flushStorage() {\n    const { device } = this.getGPU();\n    this.startDispatch();\n    if (this.storageDirty && this.texture) {\n      let encoder = device.createCommandEncoder();\n      encoder.copyTextureToTexture(\n        { texture: this.getStorageTexture() },\n        { texture: this.getTexture() },\n        { width: this.texture.width, height: this.texture.height }\n      );\n      device.queue.submit([encoder.finish()]);\n      this.storageDirty = false;\n    }\n    this.endDispatch();\n  }\n  buildUniformKey(generatedUniforms) {\n    let key = [];\n    const KEY_TYPES = {\n      BINDING: 1241253932,\n      MARK: 153925923059,\n      SAMPLER: 1241253932,\n      TEXTURE: 153925923059,\n      BUFFER: 1241253932\n    };\n    key.push(KEY_TYPES.BINDING, 0, KEY_TYPES.MARK);\n    if (generatedUniforms.size > 0) {\n      key.push(KEY_TYPES.BINDING, 1, KEY_TYPES.MARK);\n    }\n    if (generatedUniforms.special)\n      for (let s of generatedUniforms.special) {\n        if (s.type == \"sampler2D\") {\n          let gpuFormat = (s.value?.texture.adapter).gpuTextureFormat;\n          let texInner = s.value?.texture?.innerType ?? \"float4\";\n          let filterMode = texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n          if (s.access == \"sample_write\") {\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 2, KEY_TYPES.MARK);\n          } else if (s.access == \"write\") {\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 1, gpuFormat, KEY_TYPES.MARK);\n          } else if (s.access == \"sample\" || s.access == \"read\") {\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n          }\n        } else if (s.type == \"sampler2DArray\") {\n          if (!s.value?.textures[0])\n            continue;\n          let firstTexture = s.value?.textures[0];\n          let gpuFormat = firstTexture.adapter.gpuTextureFormat;\n          let texInner = firstTexture.innerType ?? \"float4\";\n          let filterMode = texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n          if (s.access == \"sample_write\") {\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 2, KEY_TYPES.MARK);\n          } else if (s.access == \"write\") {\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index + 1, gpuFormat, KEY_TYPES.MARK);\n          } else if (s.access == \"sample\" || s.access == \"read\") {\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.TEXTURE, s.index, gpuFormat, KEY_TYPES.MARK);\n            key.push(KEY_TYPES.BINDING, KEY_TYPES.SAMPLER, s.index + 1, filterMode, KEY_TYPES.MARK);\n          }\n          key.push(\"len\", s.value.textures.length);\n        } else if (s.type == \"array\") {\n          key.push(KEY_TYPES.BINDING, KEY_TYPES.BUFFER, s.index, 3623, KEY_TYPES.MARK);\n        } else if (s.type == \"atomic\") {\n          key.push(KEY_TYPES.BINDING, KEY_TYPES.BUFFER, s.index, 124, KEY_TYPES.MARK);\n        } else if (s.type == \"buffer\") {\n          key.push(KEY_TYPES.BINDING, KEY_TYPES.BUFFER, s.index, 111, s.access, KEY_TYPES.MARK);\n        }\n      }\n    return key;\n  }\n  bindGroupLayoutCounter = 0;\n  buildUniformsForPipeline(shader, generatedUniforms, baseUniformBuffer, stage) {\n    let key = this.buildUniformKey(generatedUniforms).join(\"|\");\n    const { device } = this.getGPU();\n    let commands = [];\n    if (generatedUniforms.special) {\n      for (let s of generatedUniforms.special) {\n        if (s.type == \"sampler2D\") {\n          commands.push((encoder) => {\n            if (s.value && \"texture\" in s.value) {\n              if (s.value?.texture.adapter && s.value.texture.adapter instanceof WebGPUAdapter) {\n                if (s.value.texture.adapter.storageDirty) {\n                  this.trace(\"copyWritableTextureToReadable\", { texture: s.value.texture });\n                  encoder.copyTextureToTexture(\n                    { texture: s.value.texture.adapter.getStorageTexture() },\n                    { texture: s.value.texture.adapter.getTexture() },\n                    { width: s.value.texture.size[0], height: s.value.texture.size[1] }\n                  );\n                  s.value.texture.adapter.storageDirty = false;\n                  s.value.texture.cpuReadDirty = true;\n                }\n              }\n              s.value?.texture.flush(false);\n            }\n          });\n          s.value?.texture?.innerType ?? \"float4\";\n          if (s.access == \"sample_write\") ; else if (s.access == \"write\") {\n            if (s.value?.texture.adapter && s.value.texture.adapter instanceof WebGPUAdapter) {\n              s.value.texture.adapter.pendingWrites++;\n            }\n            commands.push((encoder) => {\n              if (s.value && \"texture\" in s.value) {\n                if (s.value?.texture.adapter && s.value.texture.adapter instanceof WebGPUAdapter) {\n                  this.trace(\"markWritableTextureDirty\", { texture: s.value.texture });\n                  s.value.texture.adapter.storageDirty = true;\n                  s.value.texture.adapter.pendingWrites--;\n                }\n              }\n            });\n          } else if (s.access == \"sample\" || s.access == \"read\") ;\n        } else if (s.type == \"sampler2DArray\") {\n          let needsNewTexture = false;\n          if (s.value && \"textures\" in s.value) {\n            if (!s.value?.textures.$arrTexture) {\n              needsNewTexture = true;\n            } else {\n              if (s.value.textures[0].adapter.getTexture().usage != s.value.textures.$arrTexture.usage) {\n                needsNewTexture = true;\n              }\n              if (s.value.textures[0].adapter.getTexture().format != s.value.textures.$arrTexture.format) {\n                needsNewTexture = true;\n              }\n              if (s.value.textures[0].adapter.getTexture().width != s.value.textures.$arrTexture.width) {\n                needsNewTexture = true;\n              }\n              if (s.value.textures[0].adapter.getTexture().height != s.value.textures.$arrTexture.height) {\n                needsNewTexture = true;\n              }\n              if (s.value.textures.length != s.value.textures.$arrTexture.depthOrArrayLayers) {\n                needsNewTexture = true;\n              }\n            }\n            if (needsNewTexture) {\n              if (s.value.textures.$arrTexture) {\n                let oldTex = s.value.textures.$arrTexture;\n                this.enqueueCleanupCommand(() => {\n                  this.trace(\"destroyMissizedArrayTexture\", { texture: oldTex });\n                  oldTex.destroy();\n                });\n              }\n              s.value.textures.$arrTexture = device.createTexture({\n                size: [\n                  s.value.textures[0].size[0],\n                  s.value.textures[0].size[1],\n                  s.value.textures.length\n                ],\n                format: s.value.textures[0].adapter.gpuTextureFormat,\n                usage: s.value.textures[0].adapter.getTexture().usage\n              });\n            }\n          }\n          commands.push((encoder) => {\n            let arrDirty = false;\n            let texVersions = [];\n            if (s.value && \"textures\" in s.value) {\n              if (s.value.textures.$arrTexture) {\n                if (s.value.textures.$arrTexture.$versions) {\n                  texVersions = s.value.textures.$arrTexture.$versions;\n                }\n              }\n              if (texVersions.length != s.value.textures.length) {\n                texVersions = [];\n                for (let i = 0; i < s.value.textures.length; i++) {\n                  texVersions.push(-1);\n                }\n              }\n              for (let [i, texture] of s.value.textures.entries()) {\n                if (texture.adapter && texture.adapter instanceof WebGPUAdapter) {\n                  if (texture.adapter.storageDirty) {\n                    arrDirty = true;\n                    encoder.copyTextureToTexture(\n                      { texture: texture.adapter.getStorageTexture() },\n                      { texture: texture.adapter.getTexture() },\n                      { width: texture.size[0], height: texture.size[1] }\n                    );\n                    texture.adapter.storageDirty = false;\n                    texture.cpuReadDirty = true;\n                  }\n                  if (texture.version != texVersions[i]) {\n                    texVersions[i] = texture.version;\n                    arrDirty = true;\n                  }\n                }\n                texture.flush(false);\n              }\n              if (arrDirty) {\n                s.value.textures.$arrTexture.$versions = texVersions;\n                this.trace(\"copyToArrayTexture\", { texture: s.value.textures.$arrTexture });\n                for (let [i, texture] of s.value.textures.entries()) {\n                  encoder.copyTextureToTexture(\n                    {\n                      texture: texture.adapter.getTexture()\n                    },\n                    {\n                      texture: s.value.textures.$arrTexture,\n                      origin: [0, 0, i]\n                    },\n                    {\n                      width: texture.size[0],\n                      height: texture.size[1],\n                      depthOrArrayLayers: 1\n                    }\n                  );\n                }\n              }\n            }\n          });\n          if (s.value && \"textures\" in s.value) {\n            for (let texture of s.value.textures) {\n              texture.innerType ?? \"float4\";\n              if (s.access == \"sample_write\") ; else if (s.access == \"write\") {\n                if (texture.adapter && texture.adapter instanceof WebGPUAdapter) {\n                  texture.adapter.pendingWrites++;\n                }\n                commands.push((encoder) => {\n                  if (texture.adapter && texture.adapter instanceof WebGPUAdapter) {\n                    this.trace(\"markWritableTextureDirty\", { texture });\n                    texture.adapter.storageDirty = true;\n                    texture.adapter.pendingWrites--;\n                  }\n                });\n              } else if (s.access == \"sample\" || s.access == \"read\") ;\n            }\n          }\n        } else if (s.type == \"array\") ; else if (s.type == \"atomic\") ; else if (s.type == \"buffer\") {\n          if (s.value && s.access == \"write\") {\n            s.value.pendingWrites++;\n          }\n          commands.push((encoder) => {\n            if (s.value) {\n              let sv = s.value;\n              if (sv.cpuWriteDirty) {\n                this.trace(\"uploadCPUDirtyBuffer\", { buffer: s.value });\n                sv.upload();\n              }\n              if (s.access == \"write\") {\n                this.trace(\"markBufferDirty\", { buffer: s.value });\n                sv.cpuReadDirty = true;\n                sv.pendingWrites--;\n              }\n            }\n          });\n        }\n      }\n    }\n    let bindGroupLayout = null;\n    let bindGroup = null;\n    if (!shader.webgpuUniformCache) {\n      shader.webgpuUniformCache = new LRUCache({\n        ...lruUniformOptions,\n        dispose(value, key2) {\n          value.uniformBuffer.destroy();\n        }\n      });\n    }\n    let cache = void 0;\n    if (shader.webgpuUniformCache) {\n      cache = shader.webgpuUniformCache.get(key);\n      let matches = true;\n      if (!cache) {\n        matches = false;\n      }\n      if (matches && cache) {\n        bindGroupLayout = cache.bindGroupLayout;\n        bindGroup = cache.bindGroup;\n      }\n    }\n    if (!bindGroupLayout) {\n      this.startDispatch();\n      bindGroupLayout = device.createBindGroupLayout({\n        entries: [\n          {\n            binding: 0,\n            visibility: stage,\n            buffer: {\n              minBindingSize: 0\n            }\n          },\n          ...generatedUniforms.size > 0 ? [\n            {\n              binding: 1,\n              visibility: stage,\n              buffer: {\n                minBindingSize: 0\n              }\n            }\n          ] : [],\n          ...generatedUniforms.special.map((s) => {\n            if (s.type == \"sampler2D\") {\n              let sampleType = (t) => {\n                let gpuFormat = (s.value?.texture.adapter).gpuTextureFormat;\n                if (gpuFormat == \"depth24plus\" || gpuFormat == \"depth32float\") {\n                  return \"depth\";\n                }\n                if (t == \"uint8\") {\n                  return \"float\";\n                }\n                if (t.startsWith(\"int\")) {\n                  return \"sint\";\n                } else if (t.startsWith(\"uint\")) {\n                  return \"uint\";\n                } else if (t.startsWith(\"float\")) {\n                  return \"unfilterable-float\";\n                }\n                return \"unfilterable-float\";\n              };\n              let texInner = s.value?.texture?.innerType ?? \"float4\";\n              let filterMode = texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n              let sampleTypeGPU = sampleType(s.value?.texture?.innerType ?? \"float4\");\n              if (s.access == \"sample_write\") {\n                return [\n                  {\n                    binding: s.index,\n                    visibility: stage,\n                    texture: {\n                      sampleType: sampleType(texInner),\n                      viewDimension: \"2d\",\n                      multisampled: false\n                    }\n                  },\n                  {\n                    binding: s.index + 1,\n                    visibility: stage,\n                    sampler: {\n                      type: filterMode\n                    }\n                  },\n                  {\n                    binding: s.index + 2,\n                    visibility: stage,\n                    storageTexture: {\n                      format: (s.value?.texture.adapter).gpuTextureFormat,\n                      access: \"write-only\",\n                      viewDimension: \"2d\"\n                    }\n                  }\n                ];\n              } else if (s.access == \"write\") {\n                return [\n                  {\n                    binding: s.index,\n                    visibility: stage,\n                    texture: {\n                      sampleType: sampleTypeGPU,\n                      viewDimension: \"2d\",\n                      multisampled: false\n                    }\n                  },\n                  {\n                    binding: s.index + 1,\n                    visibility: stage,\n                    storageTexture: {\n                      format: (s.value?.texture.adapter).gpuTextureFormat,\n                      access: \"write-only\",\n                      viewDimension: \"2d\"\n                    }\n                  }\n                ];\n              } else if (s.access == \"sample\" || s.access == \"read\") {\n                return [\n                  {\n                    binding: s.index,\n                    visibility: stage,\n                    texture: {\n                      sampleType: sampleTypeGPU,\n                      viewDimension: \"2d\",\n                      multisampled: false\n                    }\n                  },\n                  {\n                    binding: s.index + 1,\n                    visibility: stage,\n                    sampler: {\n                      type: filterMode\n                    }\n                  }\n                ];\n              }\n            } else if (s.type == \"sampler2DArray\") {\n              if (!s.value?.textures[0])\n                return [];\n              let firstTexture = s.value?.textures[0];\n              let sampleType = (t) => {\n                let gpuFormat = firstTexture.adapter.gpuTextureFormat;\n                if (gpuFormat == \"depth24plus\" || gpuFormat == \"depth32float\") {\n                  return \"depth\";\n                }\n                if (t == \"uint8\") {\n                  return \"float\";\n                }\n                if (t.startsWith(\"int\")) {\n                  return \"sint\";\n                } else if (t.startsWith(\"uint\")) {\n                  return \"uint\";\n                } else if (t.startsWith(\"float\")) {\n                  return \"unfilterable-float\";\n                }\n                return \"unfilterable-float\";\n              };\n              let texInner = firstTexture.innerType ?? \"float4\";\n              let filterMode = texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n              let sampleTypeGPU = sampleType(firstTexture.innerType ?? \"float4\");\n              if (s.access == \"sample_write\") {\n                return [\n                  {\n                    binding: s.index,\n                    visibility: stage,\n                    texture: {\n                      sampleType: sampleType(texInner),\n                      viewDimension: \"2d-array\",\n                      multisampled: false\n                    }\n                  },\n                  {\n                    binding: s.index + 1,\n                    visibility: stage,\n                    sampler: {\n                      type: filterMode\n                    }\n                  },\n                  {\n                    binding: s.index + 2,\n                    visibility: stage,\n                    storageTexture: {\n                      format: firstTexture.adapter.gpuTextureFormat,\n                      access: \"write-only\",\n                      viewDimension: \"2d-array\"\n                    }\n                  }\n                ];\n              } else if (s.access == \"write\") {\n                return [\n                  {\n                    binding: s.index,\n                    visibility: stage,\n                    texture: {\n                      sampleType: sampleTypeGPU,\n                      viewDimension: \"2d-array\",\n                      multisampled: false\n                    }\n                  },\n                  {\n                    binding: s.index + 1,\n                    visibility: stage,\n                    storageTexture: {\n                      format: firstTexture.adapter.gpuTextureFormat,\n                      access: \"write-only\",\n                      viewDimension: \"2d-array\"\n                    }\n                  }\n                ];\n              } else if (s.access == \"sample\" || s.access == \"read\") {\n                return [\n                  {\n                    binding: s.index,\n                    visibility: stage,\n                    texture: {\n                      sampleType: sampleTypeGPU,\n                      viewDimension: \"2d-array\",\n                      multisampled: false\n                    }\n                  },\n                  {\n                    binding: s.index + 1,\n                    visibility: stage,\n                    sampler: {\n                      type: filterMode\n                    }\n                  }\n                ];\n              }\n            } else if (s.type == \"array\") {\n              return [\n                {\n                  binding: s.index,\n                  visibility: stage,\n                  buffer: { type: \"read-only-storage\" }\n                }\n              ];\n            } else if (s.type == \"atomic\") {\n              return [\n                {\n                  binding: s.index,\n                  visibility: stage,\n                  buffer: { type: \"storage\" }\n                }\n              ];\n            } else if (s.type == \"buffer\") {\n              return [\n                {\n                  binding: s.index,\n                  visibility: stage,\n                  buffer: { type: s.access == \"read\" ? \"read-only-storage\" : \"storage\" }\n                }\n              ];\n            }\n          }).flat()\n        ]\n      });\n      bindGroupLayout.$__gpuKey = this.bindGroupLayoutCounter++;\n      this.endDispatch();\n    }\n    let outUniformBuffer = cache?.uniformBuffer;\n    let outSpecialBuffers = cache?.specialBuffers;\n    if (cache) {\n      if (cache.cachedUniforms) {\n        let matches = generatedUniforms.data.byteLength == cache.cachedUniforms.byteLength;\n        let uintView = new Uint8Array(generatedUniforms.data);\n        let uintView2 = new Uint8Array(cache.cachedUniforms);\n        if (matches) {\n          for (let i = 0; i < uintView.length; i++) {\n            if (uintView[i] != uintView2[i]) {\n              matches = false;\n              break;\n            }\n          }\n        }\n        if (!matches) {\n          if (outUniformBuffer) {\n            let oldBuffer = outUniformBuffer;\n            this.enqueueCleanupCommand(() => {\n              oldBuffer.destroy();\n            });\n          }\n          bindGroup = null;\n          outUniformBuffer = void 0;\n        }\n      }\n    }\n    let specialsKey = [];\n    let alwaysDirty = false;\n    for (let special of generatedUniforms.special) {\n      if (special.type == \"sampler2D\") {\n        if (!special.value || !(\"texture\" in special.value))\n          continue;\n        let tex = special.value.texture;\n        if (tex.image) {\n          let texture;\n          if (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n            let texCtx = tex.adapter.getTexture();\n            texture = texCtx;\n            if (!texture)\n              continue;\n            specialsKey.push(5623462, special.index, tex.symbol, tex.innerType, special.access);\n          }\n        } else {\n          return;\n        }\n      } else if (special.type == \"sampler2DArray\") {\n        if (!special.value || !(\"textures\" in special.value))\n          continue;\n        let tex = special.value.textures[0];\n        if (tex) {\n          if (tex.image) {\n            let texture;\n            if (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n              let texCtx = tex.adapter.getTexture();\n              texture = texCtx;\n              if (!texture)\n                continue;\n              specialsKey.push(\n                5653223462,\n                special.index,\n                tex.symbol,\n                tex.innerType,\n                special.access\n              );\n            }\n          }\n        } else {\n          return;\n        }\n      } else if (special.type == \"array\" && special.value) {\n        specialsKey.push(5523462, special.index);\n        alwaysDirty = true;\n      } else if (special.type == \"buffer\" && special.value) {\n        specialsKey.push(1253462, special.index, special.access, special.value.symbol);\n      } else if (special.type == \"atomic\" && special.value) {\n        specialsKey.push(125342, special.index);\n        alwaysDirty = true;\n      } else {\n        throw new Error(`Unknown special type ${special.type}`);\n      }\n    }\n    let specialsDirty = false;\n    if (cache) {\n      if (cache.specialsKey.length != specialsKey.length) {\n        specialsDirty = true;\n      } else {\n        for (let i = 0; i < specialsKey.length; i++) {\n          if (cache.specialsKey[i] != specialsKey[i]) {\n            specialsDirty = true;\n            break;\n          }\n        }\n      }\n    } else {\n      specialsDirty = true;\n    }\n    let specialEntries = void 0;\n    if (cache) {\n      specialEntries = cache.specialEntries;\n    }\n    if (alwaysDirty || specialsDirty) {\n      outSpecialBuffers = void 0;\n      specialEntries = void 0;\n    }\n    if (!bindGroup || !outUniformBuffer || !outSpecialBuffers || !specialEntries) {\n      let outEntries = [\n        { binding: 0, resource: { buffer: baseUniformBuffer } }\n      ];\n      if (!outSpecialBuffers || !specialEntries) {\n        outSpecialBuffers = [];\n        specialEntries = [];\n        for (let special of generatedUniforms.special) {\n          if (special.type == \"sampler2D\") {\n            if (!special.value || !(\"texture\" in special.value))\n              continue;\n            let tex = special.value.texture;\n            if (tex.image) {\n              let texture;\n              if (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n                let texCtx = tex.adapter.getTexture();\n                texture = texCtx;\n                if (!texture)\n                  continue;\n                let filterable = tex.innerType == \"uint8\";\n                if (special.access == \"sample_write\") {\n                  const sampler = device.createSampler(\n                    filterable ? {\n                      magFilter: \"linear\",\n                      minFilter: \"linear\"\n                    } : {}\n                  );\n                  specialEntries.push({\n                    binding: special.index,\n                    resource: texture.createView({\n                      format: tex.adapter.gpuTextureFormat\n                    })\n                  });\n                  specialEntries.push({\n                    binding: special.index + 1,\n                    resource: sampler\n                  });\n                  specialEntries.push({\n                    binding: special.index + 2,\n                    resource: tex.adapter.getStorageTexture().createView()\n                  });\n                } else if (special.access == \"write\") {\n                  specialEntries.push({\n                    binding: special.index,\n                    resource: texture.createView({\n                      format: tex.adapter.gpuTextureFormat\n                    })\n                  });\n                  specialEntries.push({\n                    binding: special.index + 1,\n                    resource: tex.adapter.getStorageTexture().createView()\n                  });\n                } else if (special.access == \"read\" || special.access == \"sample\") {\n                  const sampler = device.createSampler(\n                    filterable ? {\n                      magFilter: \"linear\",\n                      minFilter: \"linear\"\n                    } : {}\n                  );\n                  specialEntries.push({\n                    binding: special.index,\n                    resource: texture.createView({\n                      format: tex.adapter.gpuTextureFormat\n                    })\n                  });\n                  specialEntries.push({\n                    binding: special.index + 1,\n                    resource: sampler\n                  });\n                }\n              }\n            } else {\n              return;\n            }\n          } else if (special.type == \"sampler2DArray\") {\n            if (!special.value || !(\"textures\" in special.value))\n              continue;\n            if (special.value.textures.$arrTexture) {\n              if (special.value.textures.$arrTexture instanceof GPUTexture) {\n                let tex = special.value.textures[0];\n                if (!tex)\n                  return;\n                let texture = special.value.textures.$arrTexture;\n                let filterable = tex.innerType == \"uint8\";\n                if (special.access == \"sample_write\") {\n                  const sampler = device.createSampler(\n                    filterable ? {\n                      magFilter: \"linear\",\n                      minFilter: \"linear\"\n                    } : {}\n                  );\n                  specialEntries.push({\n                    binding: special.index,\n                    resource: texture.createView({\n                      format: tex.adapter.gpuTextureFormat\n                    })\n                  });\n                  specialEntries.push({\n                    binding: special.index + 1,\n                    resource: sampler\n                  });\n                  specialEntries.push({\n                    binding: special.index + 2,\n                    resource: tex.adapter.getStorageTexture().createView()\n                  });\n                  throw new Error(\"Writing to texture arrays is not supported yet\");\n                } else if (special.access == \"write\") {\n                  specialEntries.push({\n                    binding: special.index,\n                    resource: texture.createView({\n                      format: tex.adapter.gpuTextureFormat\n                    })\n                  });\n                  specialEntries.push({\n                    binding: special.index + 1,\n                    resource: tex.adapter.getStorageTexture().createView()\n                  });\n                  throw new Error(\"Writing to texture arrays is not supported yet\");\n                } else if (special.access == \"read\" || special.access == \"sample\") {\n                  const sampler = device.createSampler(\n                    filterable ? {\n                      magFilter: \"linear\",\n                      minFilter: \"linear\"\n                    } : {}\n                  );\n                  specialEntries.push({\n                    binding: special.index,\n                    resource: texture.createView({\n                      format: tex.adapter.gpuTextureFormat,\n                      arrayLayerCount: special.value.textures.length,\n                      baseArrayLayer: 0,\n                      dimension: \"2d-array\"\n                    })\n                  });\n                  specialEntries.push({\n                    binding: special.index + 1,\n                    resource: sampler\n                  });\n                }\n              }\n            }\n          } else if (special.type == \"array\" && special.value) {\n            let buffer = device.createBuffer({\n              size: special.value.size,\n              usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n            });\n            outSpecialBuffers.push(buffer);\n            specialEntries.push({\n              binding: special.index,\n              resource: { buffer }\n            });\n          } else if (special.type == \"buffer\" && special.value) {\n            let buf = this.getOrCreateBuffer(special.value, this.genericBufferFlags());\n            outSpecialBuffers.push(buf);\n            specialEntries.push({\n              binding: special.index,\n              resource: { buffer: buf }\n            });\n          } else if (special.type == \"atomic\" && special.value) {\n            let buf = device.createBuffer({\n              size: 4,\n              usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n            });\n            outSpecialBuffers.push(buf);\n            specialEntries.push({\n              binding: special.index,\n              resource: {\n                buffer: buf\n              }\n            });\n          } else {\n            throw new Error(`Unknown special type ${special.type}`);\n          }\n        }\n      }\n      let needsUniformWrite = false;\n      if (!outUniformBuffer) {\n        outUniformBuffer = device.createBuffer({\n          size: generatedUniforms.size,\n          usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n        });\n        needsUniformWrite = true;\n      }\n      if (generatedUniforms.size > 0) {\n        outEntries.push({ binding: 1, resource: { buffer: outUniformBuffer } });\n        if (needsUniformWrite)\n          device.queue.writeBuffer(outUniformBuffer, 0, generatedUniforms.data);\n      }\n      for (let i = 0; i < specialEntries.length; i++) {\n        outEntries.push(specialEntries[i]);\n      }\n      let bufCounter = 0;\n      for (let i = 0; i < generatedUniforms.special.length; i++) {\n        let special = generatedUniforms.special[i];\n        if (special.type == \"array\" && special.value) {\n          device.queue.writeBuffer(outSpecialBuffers[bufCounter++], 0, special.value.buffer);\n        }\n      }\n      bindGroup = device.createBindGroup({\n        layout: bindGroupLayout,\n        entries: outEntries\n      });\n    }\n    if (cache) {\n      cache.key = key;\n      cache.bindGroupLayout = bindGroupLayout;\n      cache.bindGroup = bindGroup;\n      cache.uniformBuffer = outUniformBuffer;\n      cache.specialBuffers = outSpecialBuffers;\n      cache.cachedUniforms = generatedUniforms.data;\n      cache.specialsKey = specialsKey;\n      cache.specialEntries = specialEntries;\n    } else {\n      shader.webgpuUniformCache.set(key, {\n        key,\n        bindGroupLayout,\n        bindGroup,\n        uniformBuffer: outUniformBuffer,\n        specialBuffers: outSpecialBuffers,\n        cachedUniforms: generatedUniforms.data,\n        specialsKey,\n        specialEntries\n      });\n    }\n    return {\n      bindGroupLayout,\n      bindGroup,\n      uniformBuffer: outUniformBuffer,\n      specialBuffers: outSpecialBuffers,\n      commands\n    };\n  }\n  writeStructuredBuffer(structure, raw, buffer, offset = 0) {\n    let rootObj = {\n      val: raw\n    };\n    let queue = [[[\"val\", structure], rootObj, null]];\n    writeBufferStructure(queue, rootObj, buffer, offset);\n  }\n  readStructuredBuffer(structure, buffer, offset = 0) {\n    if (structure.type == \"array\") {\n      let arr = [];\n      if (\"staticSize\" in structure && structure.staticSize != null) {\n        let elSize = getValueSize(structure.element);\n        for (let i = 0; i < structure.staticSize; i++) {\n          arr.push(this.readStructuredBuffer(structure.element, buffer, offset));\n          offset += elSize / 4;\n        }\n        return arr;\n      } else {\n        throw new Error(`Unable to read dynamic array`);\n      }\n    } else if (structure.type == \"primitive\") {\n      let uview = new Uint32Array(buffer);\n      let iview = new Int32Array(buffer);\n      let fview = new Float32Array(buffer);\n      if (structure.name == \"uint4\") {\n        return [uview[offset], uview[offset + 1], uview[offset + 2], uview[offset + 3]];\n      } else if (structure.name == \"int4\") {\n        return [iview[offset], iview[offset + 1], iview[offset + 2], iview[offset + 3]];\n      } else if (structure.name == \"float4\") {\n        return [fview[offset], fview[offset + 1], fview[offset + 2], fview[offset + 3]];\n      } else if (structure.name == \"uint3\") {\n        return [uview[offset], uview[offset + 1], uview[offset + 2]];\n      } else if (structure.name == \"int3\") {\n        return [iview[offset], iview[offset + 1], iview[offset + 2]];\n      } else if (structure.name == \"float3\") {\n        return [fview[offset], fview[offset + 1], fview[offset + 2]];\n      } else if (structure.name == \"uint2\") {\n        return [uview[offset], uview[offset + 1]];\n      } else if (structure.name == \"int2\") {\n        return [iview[offset], iview[offset + 1]];\n      } else if (structure.name == \"float2\") {\n        return [fview[offset], fview[offset + 1]];\n      } else if (structure.name == \"uint\") {\n        return uview[offset];\n      } else if (structure.name == \"int\") {\n        return iview[offset];\n      } else if (structure.name == \"float\") {\n        return fview[offset];\n      } else if (structure.name == \"bool\") {\n        return uview[offset] == 1;\n      } else if (structure.name == \"float2x2\") {\n        return window.applyMatrix2x2Methods([\n          [fview[offset], fview[offset + 1]],\n          [fview[offset + 2], fview[offset + 3]]\n        ]);\n      } else if (structure.name == \"float3x3\") {\n        return window.applyMatrix3x3Methods([\n          [fview[offset], fview[offset + 1], fview[offset + 2]],\n          [fview[offset + 3], fview[offset + 4], fview[offset + 5]],\n          [fview[offset + 6], fview[offset + 7], fview[offset + 8]]\n        ]);\n      } else if (structure.name == \"float4x4\") {\n        return window.applyMatrix4x4Methods([\n          [fview[offset], fview[offset + 1], fview[offset + 2], fview[offset + 3]],\n          [fview[offset + 4], fview[offset + 5], fview[offset + 6], fview[offset + 7]],\n          [fview[offset + 8], fview[offset + 9], fview[offset + 10], fview[offset + 11]],\n          [fview[offset + 12], fview[offset + 13], fview[offset + 14], fview[offset + 15]]\n        ]);\n      } else if (structure.name == \"atomic\") {\n        if (structure.element.type == \"primitive\") {\n          if (structure.element.name == \"uint\") {\n            return window.makeAtomic(uview[offset]);\n          } else if (structure.element.name == \"int\") {\n            return window.makeAtomic(iview[offset]);\n          }\n        }\n      } else {\n        throw new Error(`Unable to convert primitive type ${structure.name}`);\n      }\n    } else if (structure.type == \"struct\") {\n      let out = {};\n      for (let field of structure.fields) {\n        let size = getValueSize(field[1]);\n        out[field[0]] = this.readStructuredBuffer(field[1], buffer, offset / 4);\n        offset += size;\n      }\n      let clazz = (this.engine ?? window).__shadeup_structs[structure.name].struct;\n      if (clazz) {\n        return new clazz(out);\n      }\n    } else {\n      throw new Error(`Unable to convert type ${structure.type}`);\n    }\n  }\n  buildComputePipeline(shader, computeUniform) {\n    const { device } = this.getGPU();\n    let commands = [];\n    this.baseUniformValues;\n    this.baseUniformBufferSize;\n    const baseUniformBuffer = this.baseUniformBuffer;\n    const compute = this.buildUniformsForPipeline(\n      shader,\n      computeUniform,\n      baseUniformBuffer,\n      GPUShaderStage.COMPUTE\n    );\n    if (!compute) {\n      return;\n    }\n    commands = compute.commands;\n    let pipelineLayoutKey = `${shader.uniqueSourceKey}_${compute.bindGroupLayout.$__gpuKey}`;\n    let pipelineLayout;\n    if (this.cachedPipelineLayouts.has(pipelineLayoutKey)) {\n      pipelineLayout = this.cachedPipelineLayouts.get(pipelineLayoutKey);\n    } else {\n      pipelineLayout = device.createPipelineLayout({\n        bindGroupLayouts: [compute.bindGroupLayout]\n      });\n      this.cachedPipelineLayouts.set(pipelineLayoutKey, pipelineLayout);\n    }\n    this.startDispatch();\n    let pipelineKey = pipelineLayoutKey;\n    let pipeline;\n    if (this.cachedPipelinesCompute.has(pipelineKey)) {\n      pipeline = this.cachedPipelinesCompute.get(pipelineKey);\n    } else {\n      pipeline = device.createComputePipeline({\n        label: \"compute pipeline\",\n        layout: pipelineLayout,\n        compute: {\n          module: shader.payload,\n          entryPoint: \"main\"\n        }\n      });\n      this.cachedPipelinesCompute.set(pipelineKey, pipeline);\n    }\n    this.endDispatch();\n    return {\n      pipeline,\n      bindGroup: compute.bindGroup,\n      baseUniformBuffer,\n      uniformBuffer: compute.uniformBuffer,\n      specialBuffers: compute.specialBuffers,\n      commands\n    };\n  }\n  cachedPipelines = /* @__PURE__ */ new Map();\n  cachedPipelinesCompute = /* @__PURE__ */ new Map();\n  cachedPipelineLayouts = /* @__PURE__ */ new Map();\n  setupDrawPipeline(shaders, fragmentUniform, vertexUniform, options, ignoreVertexLayout = false) {\n    const { device } = this.getGPU();\n    if (!this.baseUniformBuffer) {\n      throw new Error(\"Base uniform buffer not initialized\");\n    }\n    let commands = [];\n    const fragment = this.buildUniformsForPipeline(\n      shaders.fragment,\n      fragmentUniform,\n      this.baseUniformBuffer,\n      GPUShaderStage.FRAGMENT\n    );\n    const vertex = this.buildUniformsForPipeline(\n      shaders.vertex,\n      vertexUniform,\n      this.baseUniformBuffer,\n      GPUShaderStage.VERTEX\n    );\n    if (!fragment || !vertex) {\n      return;\n    }\n    commands.push(...fragment.commands);\n    commands.push(...vertex.commands);\n    let pipelineLayoutKey = `${shaders.fragment.uniqueSourceKey}_${fragment.bindGroupLayout.$__gpuKey}_${shaders.vertex.uniqueSourceKey}_${vertex.bindGroupLayout.$__gpuKey}`;\n    let pipelineLayout;\n    if (this.cachedPipelineLayouts.has(pipelineLayoutKey)) {\n      pipelineLayout = this.cachedPipelineLayouts.get(pipelineLayoutKey);\n    } else {\n      pipelineLayout = device.createPipelineLayout({\n        bindGroupLayouts: [fragment.bindGroupLayout, vertex.bindGroupLayout]\n      });\n      this.cachedPipelineLayouts.set(pipelineLayoutKey, pipelineLayout);\n    }\n    if (!this.depthTexture) {\n      throw new Error(\"Depth texture not initialized\");\n    }\n    let pipelineKey = pipelineLayoutKey + this.depthTexture.format + options.depthTest + options.depthFormat + options.depthOnly + options.backfaceCulling + options.depthCompare + options.attachments?.length;\n    let pipeline;\n    if (this.cachedPipelines.has(pipelineKey)) {\n      pipeline = this.cachedPipelines.get(pipelineKey);\n    } else {\n      const generateTarget = (adap) => {\n        return {\n          format: adap.headless ? adap.gpuTextureFormat : \"rgba8unorm\",\n          blend: FormatCapabilities[adap.gpuTextureFormat].blendable ? {\n            alpha: {\n              srcFactor: \"src-alpha\",\n              dstFactor: \"one-minus-src-alpha\",\n              operation: \"add\"\n            },\n            color: {\n              srcFactor: \"src-alpha\",\n              dstFactor: \"one-minus-src-alpha\",\n              operation: \"add\"\n            }\n          } : void 0\n        };\n      };\n      const pipelineDescriptor = {\n        vertex: {\n          module: shaders.vertex.payload,\n          entryPoint: \"main\",\n          buffers: ignoreVertexLayout ? [] : vertexLayout\n        },\n        ...options.depthOnly ? {} : {\n          fragment: {\n            module: shaders.fragment.payload,\n            entryPoint: \"main\",\n            targets: options.attachments && options.attachments.length > 0 ? options.attachments.map((att) => generateTarget(att.adapter)) : [generateTarget(this)]\n          }\n        },\n        primitive: {\n          topology: \"triangle-list\",\n          cullMode: options.backfaceCulling ? \"back\" : \"none\"\n        },\n        ...options.depthTest ? {\n          depthStencil: {\n            depthWriteEnabled: true,\n            depthCompare: options.depthCompare ?? \"less\",\n            format: options.depthFormat ?? \"depth24plus\"\n          }\n        } : {},\n        layout: pipelineLayout\n      };\n      this.startDispatch();\n      pipeline = device.createRenderPipeline(pipelineDescriptor);\n      this.endDispatch();\n      this.cachedPipelines.set(pipelineKey, pipeline);\n    }\n    let drawData = {\n      pipeline,\n      bindGroupFragment: fragment.bindGroup,\n      bindGroupVertex: vertex.bindGroup,\n      baseUniformBuffer: this.baseUniformBuffer,\n      vertexUniformBuffer: vertex.uniformBuffer,\n      fragmentUniformBuffer: fragment.uniformBuffer,\n      specialBuffersFragment: fragment.specialBuffers,\n      specialBuffersVertex: vertex.specialBuffers,\n      commands\n    };\n    return drawData;\n  }\n  buildDrawPipeline(shaders, fragmentUniform, vertexUniform, options, ignoreVertexLayout = false) {\n    const { device } = this.getGPU();\n    let commands = [];\n    this.baseUniformValues;\n    const baseUniformBufferSize = this.baseUniformBufferSize;\n    const baseUniformBuffer = device.createBuffer({\n      size: baseUniformBufferSize,\n      usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n    });\n    const fragment = this.buildUniformsForPipeline(\n      shaders.fragment,\n      fragmentUniform,\n      baseUniformBuffer,\n      GPUShaderStage.FRAGMENT\n    );\n    const vertex = this.buildUniformsForPipeline(\n      shaders.vertex,\n      vertexUniform,\n      baseUniformBuffer,\n      GPUShaderStage.VERTEX\n    );\n    if (!fragment || !vertex) {\n      return;\n    }\n    commands.push(...fragment.commands);\n    commands.push(...vertex.commands);\n    const pipelineLayout = device.createPipelineLayout({\n      bindGroupLayouts: [fragment.bindGroupLayout, vertex.bindGroupLayout]\n    });\n    if (!this.depthTexture) {\n      throw new Error(\"Depth texture not initialized\");\n    }\n    const generateTarget = (adap) => {\n      return {\n        format: adap.headless ? adap.gpuTextureFormat : \"rgba8unorm\",\n        blend: FormatCapabilities[adap.gpuTextureFormat].blendable ? {\n          alpha: {\n            srcFactor: \"src-alpha\",\n            dstFactor: \"one-minus-src-alpha\",\n            operation: \"add\"\n          },\n          color: {\n            srcFactor: \"src-alpha\",\n            dstFactor: \"one-minus-src-alpha\",\n            operation: \"add\"\n          }\n        } : void 0\n      };\n    };\n    const pipelineDescriptor = {\n      vertex: {\n        module: shaders.vertex.payload,\n        entryPoint: \"main\",\n        buffers: ignoreVertexLayout ? [] : vertexLayout\n      },\n      ...options.depthOnly ? {} : {\n        fragment: {\n          module: shaders.fragment.payload,\n          entryPoint: \"main\",\n          targets: options.attachments && options.attachments.length > 0 ? options.attachments.map((att) => generateTarget(att.adapter)) : [generateTarget(this)]\n        }\n      },\n      primitive: {\n        topology: \"triangle-list\",\n        cullMode: \"back\"\n      },\n      ...options.depthTest ? {\n        depthStencil: {\n          depthWriteEnabled: true,\n          depthCompare: \"less\",\n          format: options.depthFormat ?? \"depth24plus\"\n        }\n      } : {},\n      layout: pipelineLayout\n    };\n    this.startDispatch();\n    let pipeline = device.createRenderPipeline(pipelineDescriptor);\n    this.endDispatch();\n    let drawData = {\n      pipeline,\n      bindGroupFragment: fragment.bindGroup,\n      bindGroupVertex: vertex.bindGroup,\n      baseUniformBuffer,\n      vertexUniformBuffer: vertex.uniformBuffer,\n      fragmentUniformBuffer: fragment.uniformBuffer,\n      specialBuffersFragment: fragment.specialBuffers,\n      specialBuffersVertex: vertex.specialBuffers,\n      commands\n    };\n    return drawData;\n  }\n  getTexture() {\n    if (!this.headless) {\n      if (this.ctx) {\n        return this.ctx.getCurrentTexture();\n      } else {\n        throw new Error(\"No context\");\n      }\n    } else {\n      return this.texture;\n    }\n  }\n  getStorageTexture() {\n    const { device } = this.getGPU();\n    if (!this.storageTexture) {\n      this.startDispatch();\n      this.storageTexture = device.createTexture({\n        size: {\n          width: this.headlessWidth,\n          height: this.headlessHeight\n        },\n        format: this.gpuTextureFormat,\n        dimension: \"2d\",\n        viewFormats: [this.gpuTextureFormat],\n        usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n      });\n      this.endDispatch();\n    }\n    return this.storageTexture;\n  }\n  commandQueue = [];\n  cleanupCommands = [];\n  immediate = false;\n  enqueueCommand(command, immediate = false) {\n    if (this.immediate || immediate) {\n      const { device } = this.getGPU();\n      this.startDispatch();\n      let encoder = device.createCommandEncoder();\n      let result = command(encoder);\n      device.queue.submit([encoder.finish()]);\n      if (result) {\n        result();\n      }\n      this.endDispatch();\n    } else {\n      this.commandQueue.push(command);\n    }\n  }\n  enqueueCleanupCommand(command) {\n    let cmd = command;\n    cmd.$counter = 10;\n    this.cleanupCommands.push(cmd);\n  }\n  dispatchCompute(dispatch) {\n    this.trace(\"enqueueCompute\", { dispatch });\n    const { device } = this.getGPU();\n    if (!dispatch.computeShader) {\n      throw new Error(\"Dispatch is missing compute shader\");\n    }\n    `${dispatch.computeShader.uniqueSourceKey}`;\n    const computeUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.computeShader);\n    let output = this.buildComputePipeline(dispatch.computeShader, computeUniform);\n    this.enqueueCommand((encoder) => {\n      if (output)\n        for (let command of output.commands) {\n          command(encoder);\n        }\n      const pass = encoder.beginComputePass({ label: \"compute builtin pass\" });\n      let baseUniformValues = this.baseUniformValues;\n      this.baseUniformBufferSize;\n      baseUniformValues.set([0, 0], 0);\n      let computeData;\n      {\n        if (!output)\n          return;\n        computeData = output;\n      }\n      let { pipeline, bindGroup, baseUniformBuffer, uniformBuffer, specialBuffers } = computeData;\n      device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n      device.queue.writeBuffer(uniformBuffer, 0, computeUniform.data);\n      let bufCounter = 0;\n      for (let i = 0; i < computeUniform.special.length; i++) {\n        let special = computeUniform.special[i];\n        if (special.type == \"array\" && special.value) {\n          this.trace(\"writeArray\", { special });\n          device.queue.writeBuffer(specialBuffers[bufCounter++], 0, special.value.buffer);\n        }\n      }\n      pass.setPipeline(pipeline);\n      pass.setBindGroup(0, bindGroup);\n      if (dispatch.indirectBuffer) {\n        pass.dispatchWorkgroupsIndirect(\n          this.getOrCreateBuffer(dispatch.indirectBuffer, GPUBufferUsage.INDIRECT),\n          dispatch.indirectOffset\n        );\n      } else {\n        pass.dispatchWorkgroups(...dispatch.computeCount);\n      }\n      this.trace(\"dispatchCompute\", { dispatch });\n      pass.end();\n    });\n  }\n  writeSpecialBuffer(buffer, data) {\n    const { device } = this.getGPU();\n    this.startDispatch();\n    device.queue.writeBuffer(buffer, 0, data);\n    this.endDispatch();\n  }\n  beforeScreenDraw() {\n    if (!this.clearEnqueued) {\n      this.enqueueCommand((encoder) => {\n        this.getGPU();\n        if (!this.depthTexture)\n          return;\n        const textureView = this.getTexture().createView();\n        if (this.gpuTextureFormat == \"depth24plus\" || this.gpuTextureFormat == \"depth32float\") {\n          const clearPassDesc = {\n            colorAttachments: [],\n            depthStencilAttachment: {\n              view: textureView,\n              depthClearValue: 1,\n              depthLoadOp: \"clear\",\n              depthStoreOp: \"store\"\n            }\n          };\n          const passEncoder = encoder.beginRenderPass(clearPassDesc);\n          passEncoder.end();\n        } else {\n          const clearPassDesc = {\n            colorAttachments: [\n              {\n                view: textureView,\n                clearValue: { r: 0, g: 0, b: 0, a: 0 },\n                storeOp: \"store\",\n                loadOp: \"clear\"\n              }\n            ],\n            depthStencilAttachment: {\n              view: this.depthTexture.createView(),\n              depthClearValue: 1,\n              depthLoadOp: \"clear\",\n              depthStoreOp: \"store\"\n            }\n          };\n          const passEncoder = encoder.beginRenderPass(clearPassDesc);\n          passEncoder.end();\n        }\n        this.clearEnqueued = false;\n      });\n      this.clearEnqueued = true;\n    }\n  }\n  dispatchDraw(dispatch, options = {\n    depthTest: true\n  }) {\n    this.trace(\"enqueueDraw\", { dispatch, options });\n    const { device } = this.getGPU();\n    if (!dispatch.vertexShader || !dispatch.fragmentShader) {\n      throw new Error(\"Dispatch is missing vertex or fragment shader\");\n    }\n    if (!dispatch.geometry && !dispatch.indirectBuffer) {\n      throw new Error(\"Dispatch is missing geometry\");\n    }\n    if (!this.depthTexture) {\n      throw new Error(\"Depth texture not created\");\n    }\n    this.startDispatch();\n    if (dispatch.overrideDepth) {\n      if (dispatch.overrideDepth.adapter instanceof WebGPUAdapter) {\n        dispatch.overrideDepth.adapter.flush();\n      }\n    }\n    let fragment = dispatch.fragmentShader;\n    let vertex = dispatch.vertexShader;\n    const fragmentUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.fragmentShader);\n    const vertexUniform = generateUniforms(dispatch.vertexUniforms, dispatch.vertexShader);\n    `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n    let depthTex = dispatch.overrideDepth ? dispatch.overrideDepth.adapter.getTexture() : this.depthTexture;\n    let output = this.setupDrawPipeline(\n      {\n        fragment,\n        vertex\n      },\n      fragmentUniform,\n      vertexUniform,\n      {\n        ...options,\n        depthFormat: depthTex.format,\n        depthOnly: dispatch.depthOnly,\n        attachments: dispatch.attachments ?? [],\n        depthCompare: dispatch.depthCompare == \"auto\" ? \"less\" : dispatch.depthCompare,\n        backfaceCulling: dispatch.backfaceCulling\n      }\n    );\n    this.beforeScreenDraw();\n    this.enqueueCommand((encoder) => {\n      if (output)\n        for (let command of output.commands) {\n          command(encoder);\n        }\n      let attachments = [];\n      if (!dispatch.depthOnly) {\n        if (!dispatch.attachments) {\n          attachments.push({\n            view: this.getTexture().createView(),\n            storeOp: \"store\",\n            loadOp: \"load\"\n          });\n        } else {\n          for (let attachment of dispatch.attachments) {\n            if (attachment.adapter instanceof WebGPUAdapter) {\n              let view = attachment.adapter.getTexture().createView();\n              attachments.push({\n                view,\n                storeOp: \"store\",\n                loadOp: \"load\"\n              });\n            }\n          }\n        }\n      }\n      let passDescriptor = {\n        colorAttachments: attachments,\n        ...options.depthTest ? {\n          depthStencilAttachment: {\n            view: depthTex.createView(),\n            depthClearValue: 1,\n            depthLoadOp: \"load\",\n            depthStoreOp: \"store\"\n          }\n        } : {}\n      };\n      const pass = encoder.beginRenderPass(passDescriptor);\n      let myTex = this.getTexture();\n      let baseUniformValues = this.baseUniformValues;\n      this.baseUniformBufferSize;\n      baseUniformValues.set([myTex.width, myTex.height], 0);\n      let drawData;\n      if (!output)\n        return;\n      drawData = output;\n      let {\n        pipeline,\n        bindGroupFragment,\n        bindGroupVertex,\n        baseUniformBuffer,\n        vertexUniformBuffer,\n        fragmentUniformBuffer,\n        specialBuffersFragment,\n        specialBuffersVertex\n      } = drawData;\n      pass.setPipeline(pipeline);\n      device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n      pass.setBindGroup(0, bindGroupFragment);\n      pass.setBindGroup(1, bindGroupVertex);\n      if (dispatch.indirectBuffer) {\n        if (dispatch.geometry) {\n          let meshData = this.getOrCreateMeshData(dispatch.geometry);\n          pass.setVertexBuffer(0, meshData.vertexBuffer);\n          pass.setIndexBuffer(meshData.indexBuffer, \"uint32\");\n        }\n        if (dispatch.indexBuffer) {\n          if (dispatch.indexBuffer) {\n            pass.setIndexBuffer(\n              this.getOrCreateBuffer(dispatch.indexBuffer, GPUBufferUsage.INDEX),\n              \"uint32\"\n            );\n          }\n          if (dispatch.indirectBuffer.elementCount % 5 != 0) {\n            throw new Error(\n              \"Indirect buffer needs to be a multiple of 5 (must be at least 5 elements for indexedIndirect)\"\n            );\n          }\n          pass.drawIndexedIndirect(\n            this.getOrCreateBuffer(dispatch.indirectBuffer, GPUBufferUsage.INDIRECT),\n            dispatch.indirectOffset\n          );\n        } else {\n          if (dispatch.indirectBuffer.elementCount % 4 != 0) {\n            throw new Error(\n              \"Indirect buffer needs to be a multiple of 4 (must be at least 4 elements for indirect)\"\n            );\n          }\n          pass.drawIndirect(\n            this.getOrCreateBuffer(dispatch.indirectBuffer, GPUBufferUsage.INDIRECT),\n            dispatch.indirectOffset\n          );\n        }\n      } else if (dispatch.geometry) {\n        let meshData = this.getOrCreateMeshData(dispatch.geometry);\n        pass.setVertexBuffer(0, meshData.vertexBuffer);\n        if (meshData.indexCount > 0) {\n          pass.setIndexBuffer(meshData.indexBuffer, \"uint32\");\n          pass.drawIndexed(meshData.indexCount, dispatch.instanceCount);\n        } else {\n          pass.draw(meshData.vertexCount, dispatch.instanceCount);\n        }\n      }\n      this.trace(\"dispatchDraw\", { dispatch, options });\n      pass.end();\n      return () => {\n      };\n    });\n  }\n  dispatchDrawIndexed(dispatch, options = {\n    depthTest: true\n  }) {\n    const { device } = this.getGPU();\n    if (!dispatch.vertexShader || !dispatch.fragmentShader) {\n      throw new Error(\"Dispatch is missing vertex or fragment shader\");\n    }\n    if (!dispatch.indexBuffer) {\n      throw new Error(\"Dispatch is missing indexBuffer\");\n    }\n    this.startDispatch();\n    let fragment = dispatch.fragmentShader;\n    let vertex = dispatch.vertexShader;\n    const fragmentUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.fragmentShader);\n    const vertexUniform = generateUniforms(dispatch.vertexUniforms, dispatch.vertexShader);\n    `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n    let output = this.buildDrawPipeline(\n      {\n        fragment,\n        vertex\n      },\n      fragmentUniform,\n      vertexUniform,\n      options,\n      true\n    );\n    this.beforeScreenDraw();\n    this.enqueueCommand((encoder) => {\n      if (output)\n        for (let command of output.commands) {\n          command(encoder);\n        }\n      if (!this.depthTexture) {\n        throw new Error(\"Depth texture not created\");\n      }\n      let passDescriptor = {\n        colorAttachments: [\n          {\n            view: this.getTexture().createView(),\n            storeOp: \"store\",\n            loadOp: \"load\"\n          }\n        ],\n        depthStencilAttachment: {\n          view: this.depthTexture.createView(),\n          depthClearValue: 1,\n          depthLoadOp: \"load\",\n          depthStoreOp: \"store\"\n        }\n      };\n      const pass = encoder.beginRenderPass(passDescriptor);\n      let baseUniformValues = this.baseUniformValues;\n      this.baseUniformBufferSize;\n      let myTex = this.getTexture();\n      baseUniformValues.set([myTex.width, myTex.height], 0);\n      let drawData;\n      {\n        if (!output)\n          return;\n        drawData = output;\n      }\n      let {\n        pipeline,\n        bindGroupFragment,\n        bindGroupVertex,\n        baseUniformBuffer,\n        vertexUniformBuffer,\n        fragmentUniformBuffer,\n        specialBuffersFragment,\n        specialBuffersVertex\n      } = drawData;\n      pass.setPipeline(pipeline);\n      device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n      device.queue.writeBuffer(fragmentUniformBuffer, 0, fragmentUniform.data);\n      let bufCounterFrag = 0;\n      for (let i = 0; i < fragmentUniform.special.length; i++) {\n        let special = fragmentUniform.special[i];\n        if (special.type == \"array\" && special.value) {\n          device.queue.writeBuffer(\n            specialBuffersFragment[bufCounterFrag++],\n            0,\n            special.value.buffer\n          );\n        }\n      }\n      device.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n      let bufCounterVert = 0;\n      for (let i = 0; i < vertexUniform.special.length; i++) {\n        let special = vertexUniform.special[i];\n        if (special.type == \"array\" && special.value) {\n          device.queue.writeBuffer(specialBuffersVertex[bufCounterVert++], 0, special.value.buffer);\n        }\n      }\n      pass.setBindGroup(0, bindGroupFragment);\n      pass.setBindGroup(1, bindGroupVertex);\n      pass.setIndexBuffer(\n        this.getOrCreateBuffer(dispatch.indexBuffer, GPUBufferUsage.INDEX),\n        \"uint32\"\n      );\n      pass.drawIndexed(dispatch.indexBuffer.len(), dispatch.instanceCount);\n      pass.end();\n    });\n  }\n  dispatchDrawCount(dispatch, options = {\n    depthTest: true\n  }) {\n    const { device } = this.getGPU();\n    if (!dispatch.vertexShader || !dispatch.fragmentShader) {\n      throw new Error(\"Dispatch is missing vertex or fragment shader\");\n    }\n    this.startDispatch();\n    let fragment = dispatch.fragmentShader;\n    let vertex = dispatch.vertexShader;\n    `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n    const fragmentUniform = generateUniforms(dispatch.fragmentUniforms, dispatch.fragmentShader);\n    const vertexUniform = generateUniforms(dispatch.vertexUniforms, dispatch.vertexShader);\n    let output = this.buildDrawPipeline(\n      {\n        fragment,\n        vertex\n      },\n      fragmentUniform,\n      vertexUniform,\n      options,\n      true\n    );\n    this.beforeScreenDraw();\n    this.enqueueCommand((encoder) => {\n      if (output)\n        for (let command of output.commands) {\n          command(encoder);\n        }\n      if (!this.depthTexture) {\n        throw new Error(\"Depth texture not created\");\n      }\n      let passDescriptor = {\n        colorAttachments: [\n          {\n            view: this.getTexture().createView(),\n            storeOp: \"store\",\n            loadOp: \"load\"\n          }\n        ],\n        depthStencilAttachment: {\n          view: this.depthTexture.createView(),\n          depthClearValue: 1,\n          depthLoadOp: \"load\",\n          depthStoreOp: \"store\"\n        }\n      };\n      const pass = encoder.beginRenderPass(passDescriptor);\n      let baseUniformValues = this.baseUniformValues;\n      this.baseUniformBufferSize;\n      let myTex = this.getTexture();\n      baseUniformValues.set([myTex.width, myTex.height], 0);\n      let drawData;\n      {\n        if (!output)\n          return;\n        drawData = output;\n      }\n      let {\n        pipeline,\n        bindGroupFragment,\n        bindGroupVertex,\n        baseUniformBuffer,\n        vertexUniformBuffer,\n        fragmentUniformBuffer,\n        specialBuffersFragment,\n        specialBuffersVertex\n      } = drawData;\n      pass.setPipeline(pipeline);\n      device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n      device.queue.writeBuffer(fragmentUniformBuffer, 0, fragmentUniform.data);\n      let bufCounterFrag = 0;\n      for (let i = 0; i < fragmentUniform.special.length; i++) {\n        let special = fragmentUniform.special[i];\n        if (special.type == \"array\" && special.value) {\n          device.queue.writeBuffer(\n            specialBuffersFragment[bufCounterFrag++],\n            0,\n            special.value.buffer\n          );\n        }\n      }\n      device.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n      let bufCounterVert = 0;\n      for (let i = 0; i < vertexUniform.special.length; i++) {\n        let special = vertexUniform.special[i];\n        if (special.type == \"array\" && special.value) {\n          device.queue.writeBuffer(specialBuffersVertex[bufCounterVert++], 0, special.value.buffer);\n        }\n      }\n      pass.setBindGroup(0, bindGroupFragment);\n      pass.setBindGroup(1, bindGroupVertex);\n      pass.draw(dispatch.drawCount * 3, 1, 0, 0);\n      pass.end();\n    });\n  }\n  drawCalls = [];\n  flush() {\n    this.trace(\"flush\", {});\n    super.flush();\n    const { device } = this.getGPU();\n    let needsDraw = true;\n    if (this.drawCalls.length == 0 && this.commandQueue.length == 0)\n      needsDraw = false;\n    if (needsDraw) {\n      if (this.drawCalls.length > 0) {\n        device.queue.submit(this.drawCalls);\n        this.drawCalls = [];\n      }\n      if (this.commandQueue.length > 0) {\n        let cleanups = [];\n        this.startDispatch();\n        let encoder = device.createCommandEncoder();\n        for (let i = 0; i < this.commandQueue.length; i++) {\n          let o = this.commandQueue[i](encoder);\n          if (o) {\n            cleanups.push(o);\n          }\n        }\n        device.queue.submit([encoder.finish()]);\n        for (let i = this.cleanupCommands.length - 1; i >= 0; i--) {\n          if (this.cleanupCommands[i].$counter > 0) {\n            this.cleanupCommands[i].$counter--;\n          } else {\n            this.cleanupCommands[i]();\n            this.cleanupCommands.splice(i, 1);\n          }\n        }\n        for (let i = 0; i < cleanups.length; i++) {\n          cleanups[i]();\n        }\n        this.endDispatch();\n        this.commandQueue = [];\n      }\n      this.copyToCanvas();\n    }\n    return device.queue.onSubmittedWorkDone();\n  }\n  drawImageRender(texture, toTexture) {\n    const { device } = this.getGPU();\n    if (!this.ready) {\n      return;\n    }\n    if (this.drawImageCache) {\n      this.drawImageCache(texture, toTexture);\n      return;\n    }\n    const bindGroupLayout = device.createBindGroupLayout({\n      entries: [\n        {\n          binding: 0,\n          visibility: GPUShaderStage.FRAGMENT,\n          texture: { sampleType: \"unfilterable-float\" }\n        },\n        {\n          binding: 1,\n          visibility: GPUShaderStage.FRAGMENT,\n          sampler: { type: \"non-filtering\" }\n        }\n      ]\n    });\n    let vertexShader = this.createShader(\n      {\n        webgl: ``,\n        webgpu: `\n\t\tstruct VertexOutput {\n\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t@location(1) TexCoord : vec2<f32>,\n\t\t\t@location(2) Color : vec4<f32>,\n\t\t};\n\t\n\t\t@vertex\n\t\tfn main(\n\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t) -> VertexOutput {\n\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\tvar output : VertexOutput;\n\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\n\t\t\treturn output;\n\t\t}\n\t\t`,\n        software: () => {\n        }\n      },\n      \"vertex\"\n    );\n    let fragmentShader = this.createShader(\n      {\n        webgl: ``,\n        webgpu: `\n\t\t\tstruct VertexOutput {\n\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t@location(1) TexCoord : vec2<f32>,\n\t\t\t\t@location(2) Color : vec4<f32>,\n\t\t\t};\n\t\t\t@group(0) @binding(1) var _sampler: sampler;\n\t\t\t@group(0) @binding(0) var _texture: texture_2d<f32>;\n\n\t\t@fragment\n\t\tfn main(\n\t\t\t_in: VertexOutput\n\t\t) -> @location(0) vec4<f32> {\n\t\t\treturn textureSample(_texture, _sampler, _in.TexCoord);\n\t\t}\n\t\t`,\n        software: () => {\n        }\n      },\n      \"fragment\"\n    );\n    const pipelineLayout = device.createPipelineLayout({\n      bindGroupLayouts: [bindGroupLayout]\n    });\n    const pipelineDescriptor = {\n      vertex: {\n        module: vertexShader.payload,\n        entryPoint: \"main\",\n        buffers: vertexLayout\n      },\n      fragment: {\n        module: fragmentShader.payload,\n        entryPoint: \"main\",\n        targets: [\n          {\n            format: \"rgba8unorm\",\n            blend: {\n              alpha: {\n                srcFactor: \"one\",\n                dstFactor: \"one-minus-src-alpha\",\n                operation: \"add\"\n              },\n              color: {\n                srcFactor: \"one\",\n                dstFactor: \"one-minus-src-alpha\",\n                operation: \"add\"\n              }\n            }\n          }\n        ]\n      },\n      primitive: {\n        topology: \"triangle-list\",\n        cullMode: \"back\"\n      },\n      layout: pipelineLayout\n    };\n    const pipeline = device.createRenderPipeline(pipelineDescriptor);\n    let geo = {\n      vertices: [\n        [0, 0, 0],\n        [0, 1, 0],\n        [1, 1, 0],\n        [1, 0, 0]\n      ],\n      uvs: [\n        [0, 0],\n        [0, 1],\n        [1, 1],\n        [1, 0]\n      ],\n      triangles: [0, 1, 2],\n      colors: [],\n      normals: [],\n      tangents: [],\n      bitangents: [],\n      getTriangles: () => {\n        return geo.triangles;\n      },\n      getVertices: () => {\n        return geo.vertices;\n      },\n      getUVs: () => {\n        return geo.uvs;\n      },\n      getNormals: () => {\n        return [];\n      },\n      getTangents: () => {\n        return [];\n      },\n      getBitangents: () => {\n        return [];\n      },\n      getColors: () => {\n        return [];\n      },\n      symbol: Symbol()\n    };\n    let meshData = this.getOrCreateMeshData(geo);\n    this.drawImageCache = (texture2, toTexture2) => {\n      device.pushErrorScope(\"internal\");\n      device.pushErrorScope(\"validation\");\n      const commandEncoder = device.createCommandEncoder();\n      const passEncoder = commandEncoder.beginRenderPass({\n        colorAttachments: [\n          {\n            view: toTexture2.createView(),\n            storeOp: \"store\",\n            loadOp: \"load\"\n          }\n        ]\n      });\n      const sampler = device.createSampler({});\n      passEncoder.setPipeline(pipeline);\n      const bindGroup = device.createBindGroup({\n        layout: bindGroupLayout,\n        entries: [\n          {\n            binding: 0,\n            resource: texture2.createView()\n          },\n          {\n            binding: 1,\n            resource: sampler\n          }\n        ]\n      });\n      passEncoder.setBindGroup(0, bindGroup);\n      passEncoder.setVertexBuffer(0, meshData.vertexBuffer);\n      passEncoder.setIndexBuffer(meshData.indexBuffer, \"uint32\");\n      passEncoder.drawIndexed(meshData.indexCount);\n      passEncoder.end();\n      device.queue.submit([commandEncoder.finish()]);\n      device.popErrorScope().then((error) => {\n        if (error) {\n          console.log(\"Error\", error);\n          window.bubbleError(error.message);\n          throw new Error(\"Failed to create shader\");\n        }\n      });\n      device.popErrorScope().then((error) => {\n        if (error) {\n          console.log(\"Error\", error);\n          window.bubbleError(error.message);\n          throw new Error(\"Failed to create shader\");\n        }\n      });\n    };\n    this.drawImageCache(texture, toTexture);\n  }\n  async copyToOtherCanvas(canvas) {\n    const { device } = this.getGPU();\n    let encoder = device.createCommandEncoder();\n    let ctx = canvas.getContext(\"webgpu\");\n    if (!ctx)\n      throw new Error(\"Could not get webgpu context\");\n    ctx.configure({\n      device,\n      format: \"rgba8unorm\",\n      alphaMode: \"premultiplied\",\n      usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n    });\n    encoder.copyTextureToTexture(\n      { texture: this.getTexture() },\n      { texture: ctx.getCurrentTexture() },\n      { width: this.getTexture().width, height: this.getTexture().height }\n    );\n    device.queue.submit([encoder.finish()]);\n    await device.queue.onSubmittedWorkDone();\n  }\n  copyToCanvas() {\n    const { device } = this.getGPU();\n    if (this.headless && this.texture && (this.textureFormat.endsWith(\"4\") || this.textureFormat == \"uint8\")) {\n      if (!this.ctx) {\n        this.ctx = this.canvas.getContext(\"webgpu\");\n        if (!this.ctx)\n          throw new Error(\"Could not get webgpu context\");\n        this.ctx.configure({\n          device,\n          format: \"rgba8unorm\",\n          alphaMode: \"premultiplied\",\n          usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n        });\n      }\n      this.startDispatch();\n      let encoder = device.createCommandEncoder();\n      if (this.texture.format == \"rgba8unorm\") {\n        encoder.copyTextureToTexture(\n          { texture: this.texture },\n          { texture: this.ctx.getCurrentTexture() },\n          { width: this.texture.width, height: this.texture.height }\n        );\n      } else {\n        this.drawImageRender(this.texture, this.ctx.getCurrentTexture());\n      }\n      device.queue.submit([encoder.finish()]);\n      this.endDispatch();\n    }\n  }\n  dispatch(dispatch, options = {\n    depthTest: true\n  }) {\n    super.dispatch(dispatch, options);\n    if (dispatch.type == \"draw\") {\n      this.activateDrawContext();\n      this.triggerEvent(\"draw\", dispatch);\n      if (dispatch.drawType == \"indexed\") {\n        this.dispatchDrawIndexed(dispatch, options);\n      } else if (dispatch.drawType == \"count\") {\n        this.dispatchDrawCount(dispatch, options);\n      } else {\n        this.dispatchDraw(dispatch, options);\n      }\n    }\n  }\n  dispose() {\n    this.canvas?.remove();\n    this.texture?.destroy();\n    this.storageTexture?.destroy();\n  }\n  destroyBuffer(buf) {\n    this.enqueueCommand((encoder) => {\n      if (buf.platformPayload) {\n        buf.platformPayload.destroy();\n      }\n    });\n  }\n  waitForDraw() {\n    const { device } = this.getGPU();\n    return device.queue.onSubmittedWorkDone();\n  }\n  bufferCounter = 0;\n  getOrCreateBuffer(buf, extraFlags) {\n    let useOldBuffer = null;\n    if (buf.platformPayload) {\n      let gpuBuf = buf.platformPayload;\n      if (extraFlags !== null) {\n        if (gpuBuf.usage & extraFlags) {\n          return gpuBuf;\n        }\n        extraFlags |= gpuBuf.usage;\n        useOldBuffer = gpuBuf;\n      } else {\n        return gpuBuf;\n      }\n    }\n    const { device } = this.getGPU();\n    let flags = this.genericBufferFlags();\n    if (extraFlags) {\n      flags |= extraFlags;\n    }\n    let bufferSize = buf.len() * buf.elementBytes;\n    if (!buf.structured) {\n      bufferSize *= buf.vectorSize;\n    }\n    this.startDispatch();\n    let buffer = device.createBuffer({\n      size: bufferSize,\n      usage: flags\n    });\n    buf.$_bufferIndex = this.bufferCounter;\n    this.bufferCounter++;\n    buf.symbol = Symbol();\n    if (useOldBuffer) {\n      let encoder = device.createCommandEncoder();\n      encoder.copyBufferToBuffer(useOldBuffer, 0, buffer, 0, bufferSize);\n      device.queue.submit([encoder.finish()]);\n    } else if (buf.cpuWriteDirty) {\n      if (buf.structured) {\n        if (buf.typeName == \"atomic<uint>\" || buf.typeName == \"atomic<int>\") {\n          let zero;\n          if (buf.typeName == \"atomic<uint>\") {\n            zero = new Uint32Array(buf.elementCount);\n          } else {\n            zero = new Int32Array(buf.elementCount);\n          }\n          if (buf.structArray)\n            for (let i = 0; i < buf.structArray.length; i++) {\n              let struct = buf.structArray[i];\n              if (struct) {\n                zero[i] = struct;\n              }\n            }\n          device.queue.writeBuffer(buffer, 0, zero);\n        } else {\n          device.queue.writeBuffer(buffer, 0, buf.arrayBuffer);\n        }\n      } else {\n        device.queue.writeBuffer(\n          buffer,\n          0,\n          buf.uintArray ?? buf.floatArray ?? buf.intArray ?? new Uint8Array(0)\n        );\n      }\n      buf.cpuWriteDirty = false;\n    }\n    buf.platformPayload = buffer;\n    buf.adapter = this;\n    this.endDispatch();\n    return buffer;\n  }\n}\nconst TYPE_SIZES = {\n  atomic: [8, 8],\n  texture2d: [8, 8],\n  rwtexture2d: [8, 8],\n  bool: [1, 15],\n  float: [4, 12],\n  float2: [8, 8],\n  float3: [12, 4],\n  float4: [16, 0],\n  float2x2: [16, 0],\n  float3x3: [12 + 12 + 12, 4 + 4 + 4],\n  float4x4: [16 + 16 + 16 + 16, 4 + 4 + 4 + 4],\n  uint: [4, 12],\n  uint2: [8, 8],\n  uint3: [12, 4],\n  uint4: [16, 0],\n  int: [4, 12],\n  int2: [8, 8],\n  int3: [12, 4],\n  int4: [16, 0]\n};\nfunction getValueSize(val) {\n  let totalSize = 0;\n  if (val.type == \"struct\") {\n    for (let member of val.fields) {\n      let fieldSize = getValueSize(member[1]);\n      totalSize += fieldSize;\n    }\n  } else if (val.type == \"primitive\") {\n    let n = val.name;\n    if (n == \"atomic\") {\n      totalSize += 4;\n    } else if (n == \"texture2d\" || n == \"rwtexture2d\") {\n      totalSize += 8;\n    } else {\n      let s = TYPE_SIZES[n];\n      if (s[0] == 0) {\n        throw new Error(`Cannot calculate size of struct with unknown size type ${n}`);\n      }\n      totalSize += s[0] + s[1];\n    }\n  } else if (val.type == \"array\") {\n    let elementSize = getValueSize(val.element);\n    if (typeof val.staticSize !== \"undefined\") {\n      totalSize += val.staticSize * elementSize;\n    } else {\n      throw new Error(`Cannot calculate size of struct with unknown size type ${val.element}`);\n    }\n  }\n  return totalSize;\n}\nfunction generateArrayBuffer(rootVt, rawData, data, offset) {\n  if (rootVt.type != \"array\") {\n    throw new Error(`Cannot generate array buffer for non-array type ${rootVt.type}`);\n  }\n  let totalSize = 0;\n  let vsize = getValueSize(rootVt.element);\n  totalSize += vsize * rawData.value.len();\n  if (totalSize == 0) {\n    totalSize = 4 * 4;\n  }\n  if (!data)\n    data = new ArrayBuffer(totalSize);\n  let floatView = new Float32Array(data);\n  let uintView = new Uint32Array(data);\n  let intView = new Int32Array(data);\n  if (!offset)\n    offset = 0;\n  let queue = [];\n  let rootObj = rawData.value;\n  for (let i = 0; i < rawData.value.len(); i++) {\n    queue.unshift([[`[${i}]`, rootVt.element], rootObj, i]);\n  }\n  while (queue.length > 0) {\n    let [uniform, obj, arrayIndex] = queue.pop();\n    let vt = uniform[1];\n    let name = uniform[0];\n    if (vt.type == \"primitive\") {\n      let n = vt.name;\n      let s = TYPE_SIZES[n];\n      if (s[0] == 0) {\n        throw new Error(`Cannot calculate size of struct with unknown size type ${n}`);\n      }\n      let val;\n      if (arrayIndex !== null) {\n        val = obj[arrayIndex];\n      } else {\n        val = obj[name];\n      }\n      if (typeof val === \"undefined\") {\n        throw new Error(`Uniform ${name} is not defined`);\n      }\n      if (val instanceof UniformValue) {\n        val = val.value;\n      }\n      let view = floatView;\n      if (n.startsWith(\"u\")) {\n        view = uintView;\n      } else if (n.startsWith(\"i\")) {\n        view = intView;\n      }\n      if (n == \"float\" || n == \"uint\" || n == \"int\") {\n        if (typeof val == \"boolean\") {\n          val = val ? 1 : 0;\n        }\n        view[offset++] = val;\n        offset += 3;\n      } else if (n == \"float2\" || n == \"uint2\" || n == \"int2\") {\n        view[offset++] = val[0];\n        view[offset++] = val[1];\n        offset += 2;\n      } else if (n == \"float3\" || n == \"uint3\" || n == \"int3\") {\n        view[offset++] = val[0];\n        view[offset++] = val[1];\n        view[offset++] = val[2];\n        offset += 1;\n      } else if (n == \"float4\" || n == \"uint4\" || n == \"int4\") {\n        view[offset++] = val[0];\n        view[offset++] = val[1];\n        view[offset++] = val[2];\n        view[offset++] = val[3];\n      } else if (n == \"float2x2\") {\n        {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          view[offset++] = val[3];\n        }\n      } else if (n == \"float3x3\") {\n        {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          offset++;\n          view[offset++] = val[3];\n          view[offset++] = val[4];\n          view[offset++] = val[5];\n          offset++;\n          view[offset++] = val[6];\n          view[offset++] = val[7];\n          view[offset++] = val[8];\n          offset++;\n        }\n      } else if (n == \"float4x4\") {\n        {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          view[offset++] = val[3];\n          view[offset++] = val[4];\n          view[offset++] = val[5];\n          view[offset++] = val[6];\n          view[offset++] = val[7];\n          view[offset++] = val[8];\n          view[offset++] = val[9];\n          view[offset++] = val[10];\n          view[offset++] = val[11];\n          view[offset++] = val[12];\n          view[offset++] = val[13];\n          view[offset++] = val[14];\n          view[offset++] = val[15];\n        }\n      } else if (n == \"bool\") {\n        intView[offset++] = val ? 1 : 0;\n        offset += 3;\n      } else if (n == \"rwtexture2d\" || n == \"texture2d\") {\n        floatView[offset++] = val.size[0];\n        floatView[offset++] = val.size[1];\n        offset += 2;\n      } else if (n == \"atomic\") {\n        view[offset++] = val;\n        offset += 3;\n      } else {\n        throw new Error(\"Invalid param type \" + n);\n      }\n    } else if (vt.type == \"array\") {\n      let val = obj[name];\n      if (val instanceof UniformValue) {\n        val = val.value;\n      }\n      if (obj == rootObj) {\n        if (typeof val === \"object\" && Array.isArray(val)) {\n          intView[offset++] = val.length;\n          offset += 3;\n        }\n      } else {\n        for (let i = val.length - 1; i >= 0; i--) {\n          queue.push([[\"\", vt.element], val, i]);\n        }\n      }\n    } else if (vt.type == \"buffer\") {\n      let val = obj[name];\n      if (val instanceof UniformValue) {\n        val = val.value;\n      }\n      if (obj == rootObj) {\n        if (typeof val === \"object\") {\n          intView[offset++] = val.elementCount;\n          offset += 3;\n        }\n      }\n    } else if (vt.type == \"struct\") {\n      let val;\n      if (arrayIndex !== null) {\n        val = obj[arrayIndex];\n      } else {\n        val = obj[name];\n      }\n      if (typeof val === \"object\") {\n        for (let i = vt.fields.length - 1; i >= 0; i--) {\n          let member = vt.fields[i];\n          if (val instanceof UniformValue) {\n            queue.push([member, val.value, null]);\n          } else {\n            queue.push([member, val, null]);\n          }\n        }\n      }\n    }\n  }\n  return {\n    size: totalSize,\n    buffer: data\n  };\n}\nfunction generateUniforms(fragmentUniforms, fragmentShader) {\n  if (fragmentShader.parent == null) {\n    return {\n      size: 0,\n      special: [],\n      data: new ArrayBuffer(0)\n    };\n  }\n  let orderedUniforms = [\n    ...fragmentShader.parent.params.webgpu.locals.map((l) => {\n      return [\"_ext_uniform_local_\" + l[0], l[1]];\n    }),\n    ...fragmentShader.parent.params.webgpu.globals.map((g) => {\n      return [\"_ext_uniform_global_\" + g[0], g[1].structure];\n    })\n  ];\n  let special = [];\n  let specialCounter = 2;\n  let totalSize = 0;\n  let lastFieldPadding = 0;\n  for (let uniform of orderedUniforms) {\n    let vt = uniform[1];\n    if (vt.type == \"primitive\" && (vt.name == \"texture2d\" || vt.name == \"rwtexture2d\")) {\n      let texPayload = fragmentUniforms.uniforms.get(uniform[0]);\n      special.push({\n        index: specialCounter,\n        type: \"sampler2D\",\n        valueType: vt,\n        value: {\n          texture: texPayload.value\n        },\n        access: vt.access\n      });\n      specialCounter += 2;\n      lastFieldPadding = 8;\n      totalSize += 8 + lastFieldPadding;\n    } else if (vt.type == \"array\") {\n      if (vt.element.type == \"primitive\" && vt.element.name == \"texture2d\") {\n        let texPayload = fragmentUniforms.uniforms.get(uniform[0]);\n        special.push({\n          index: specialCounter,\n          type: \"sampler2DArray\",\n          valueType: vt,\n          value: {\n            textures: texPayload.value\n          },\n          access: vt.element.access\n        });\n        specialCounter += 2;\n        lastFieldPadding = 8;\n        totalSize += 8 + lastFieldPadding;\n      } else {\n        special.push({\n          index: specialCounter,\n          type: \"array\",\n          valueType: vt,\n          value: generateArrayBuffer(vt, fragmentUniforms.uniforms.get(uniform[0]))\n        });\n        specialCounter++;\n        lastFieldPadding = 12;\n        totalSize += 4 + lastFieldPadding;\n      }\n    } else if (vt.type == \"buffer\") {\n      special.push({\n        type: \"buffer\",\n        valueType: vt,\n        access: vt.access,\n        index: specialCounter,\n        value: fragmentUniforms.uniforms.get(uniform[0])?.value\n      });\n      specialCounter++;\n      lastFieldPadding = 12;\n      totalSize += 4 + lastFieldPadding;\n    } else if (vt.type == \"primitive\" && vt.name == \"atomic\") {\n      special.push({\n        type: \"atomic\",\n        valueType: vt,\n        index: specialCounter,\n        value: fragmentUniforms.uniforms.get(uniform[0])?.value\n      });\n      specialCounter++;\n      lastFieldPadding = 12;\n      totalSize += 4 + lastFieldPadding;\n    } else {\n      let vsize = getValueSize(vt);\n      let extra = vsize % 16;\n      if (vt.type == \"primitive\") {\n        lastFieldPadding = 16 - extra;\n      } else {\n        lastFieldPadding = 0;\n      }\n      totalSize += vsize + lastFieldPadding;\n    }\n  }\n  if (totalSize == 0) {\n    totalSize = 4 * 4;\n  }\n  let queue = [];\n  let rootObj = {};\n  for (let k of fragmentUniforms.uniforms.keys()) {\n    rootObj[k] = fragmentUniforms.uniforms.get(k);\n  }\n  for (let uniform of orderedUniforms) {\n    queue.unshift([uniform, rootObj, null]);\n  }\n  let data = new ArrayBuffer(totalSize);\n  let offset = 0;\n  writeBufferStructure(queue, rootObj, data, offset);\n  return {\n    size: totalSize,\n    special,\n    data\n  };\n}\nfunction writeBufferStructure(initialQueue, rootObj, data, offset) {\n  let floatView = new Float32Array(data);\n  let uintView = new Uint32Array(data);\n  let intView = new Int32Array(data);\n  let queue = [...initialQueue];\n  while (queue.length > 0) {\n    let [uniform, obj, arrayIndex] = queue.pop();\n    let vt = uniform[1];\n    let name = uniform[0];\n    if (vt.type == \"primitive\") {\n      let n = vt.name;\n      let s = TYPE_SIZES[n];\n      if (s[0] == 0) {\n        throw new Error(`Cannot calculate size of struct with unknown size type ${n}`);\n      }\n      let val;\n      if (arrayIndex !== null) {\n        val = obj[arrayIndex];\n      } else {\n        val = obj[name];\n      }\n      if (typeof val === \"undefined\") {\n        throw new Error(`Uniform ${name} is not defined`);\n      }\n      if (val instanceof UniformValue) {\n        val = val.value;\n      }\n      let view = floatView;\n      if (n.startsWith(\"u\")) {\n        view = uintView;\n      } else if (n.startsWith(\"i\")) {\n        view = intView;\n      }\n      if (n == \"float\" || n == \"uint\" || n == \"int\") {\n        if (typeof val == \"boolean\") {\n          val = val ? 1 : 0;\n        }\n        view[offset++] = val;\n        offset += 3;\n      } else if (n == \"float2\" || n == \"uint2\" || n == \"int2\") {\n        view[offset++] = val[0];\n        view[offset++] = val[1];\n        offset += 2;\n      } else if (n == \"float3\" || n == \"uint3\" || n == \"int3\") {\n        view[offset++] = val[0];\n        view[offset++] = val[1];\n        view[offset++] = val[2];\n        offset += 1;\n      } else if (n == \"float4\" || n == \"uint4\" || n == \"int4\") {\n        view[offset++] = val[0];\n        view[offset++] = val[1];\n        view[offset++] = val[2];\n        view[offset++] = val[3];\n      } else if (n == \"float2x2\") {\n        {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          view[offset++] = val[3];\n        }\n      } else if (n == \"float3x3\") {\n        {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          offset++;\n          view[offset++] = val[3];\n          view[offset++] = val[4];\n          view[offset++] = val[5];\n          offset++;\n          view[offset++] = val[6];\n          view[offset++] = val[7];\n          view[offset++] = val[8];\n          offset++;\n        }\n      } else if (n == \"float4x4\") {\n        {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          view[offset++] = val[3];\n          view[offset++] = val[4];\n          view[offset++] = val[5];\n          view[offset++] = val[6];\n          view[offset++] = val[7];\n          view[offset++] = val[8];\n          view[offset++] = val[9];\n          view[offset++] = val[10];\n          view[offset++] = val[11];\n          view[offset++] = val[12];\n          view[offset++] = val[13];\n          view[offset++] = val[14];\n          view[offset++] = val[15];\n        }\n      } else if (n == \"bool\") {\n        intView[offset++] = val ? 1 : 0;\n        offset += 3;\n      } else if (n == \"rwtexture2d\" || n == \"texture2d\") {\n        floatView[offset++] = val.size[0];\n        floatView[offset++] = val.size[1];\n        offset += 2;\n      } else if (n == \"atomic\") {\n        if (vt.element == \"uint\") {\n          uintView[offset++] = val;\n        } else {\n          intView[offset++] = val;\n        }\n        offset += 3;\n      } else {\n        throw new Error(\"Invalid param type \" + n);\n      }\n    } else if (vt.type == \"array\") {\n      let val = obj[name];\n      if (val instanceof UniformValue) {\n        val = val.value;\n      }\n      if (obj == rootObj) {\n        if (typeof val === \"object\" && Array.isArray(val)) {\n          intView[offset++] = val.length;\n          offset += 3;\n        }\n      } else {\n        for (let i = val.length - 1; i >= 0; i--) {\n          queue.push([[\"\", vt.element], val, i]);\n        }\n      }\n    } else if (vt.type == \"buffer\") {\n      let val = obj[name];\n      if (val instanceof UniformValue) {\n        val = val.value;\n      }\n      if (obj == rootObj) {\n        if (typeof val === \"object\") {\n          intView[offset++] = val.elementCount;\n          offset += 3;\n        }\n      }\n    } else if (vt.type == \"struct\") {\n      let val;\n      if (arrayIndex !== null) {\n        val = obj[arrayIndex];\n      } else {\n        val = obj[name];\n      }\n      if (typeof val === \"object\") {\n        for (let i = vt.fields.length - 1; i >= 0; i--) {\n          let member = vt.fields[i];\n          if (val instanceof UniformValue) {\n            queue.push([member, val.value, null]);\n          } else {\n            queue.push([member, val, null]);\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction makeFullscreenQuadGeometry() {\n  let geo = {\n    vertices: [\n      [0, 0, 0],\n      [0, 1, 0],\n      [1, 1, 0],\n      [1, 0, 0]\n    ],\n    uvs: [\n      [0, 0],\n      [0, 1],\n      [1, 1],\n      [1, 0]\n    ],\n    triangles: [0, 1, 2],\n    colors: [],\n    normals: [],\n    tangents: [],\n    bitangents: [],\n    getTriangles: () => {\n      return geo.triangles;\n    },\n    getVertices: () => {\n      return geo.vertices;\n    },\n    getUVs: () => {\n      return geo.uvs;\n    },\n    getNormals: () => {\n      return [];\n    },\n    getTangents: () => {\n      return [];\n    },\n    getBitangents: () => {\n      return [];\n    },\n    getColors: () => {\n      return [];\n    },\n    symbol: Symbol()\n  };\n  return geo;\n}\nconst fullscreenGeo = makeFullscreenQuadGeometry();\n\nlet shadeupTextureCounter = 0;\nclass ShadeupTexture3d {\n  size = [0, 0, 0];\n  width = 0;\n  height = 0;\n  depth = 0;\n  adapter = null;\n  innerType = \"float4\";\n  isBound = false;\n  boundUnit = -1;\n  dirty = true;\n  payload;\n  constructor() {\n  }\n  /** @shadeup=glsl(!texture($self$, $0$)) */\n  __index(index) {\n    return [0, 0, 0, 0];\n  }\n  __index_assign(index, value) {\n  }\n}\nclass ShadeupTexture2d {\n  symbol;\n  image = null;\n  loading = true;\n  size = [0, 0];\n  width = 0;\n  height = 0;\n  paint = null;\n  adapter = null;\n  engine = null;\n  innerType = \"float4\";\n  isBound = false;\n  boundUnit = -1;\n  dirty = true;\n  cpuReadDirty = true;\n  cpuWriteDirty = false;\n  cpuData = null;\n  dataIndexStride = 4;\n  version = 0;\n  payload;\n  data = null;\n  constructor() {\n    this.symbol = `stx${shadeupTextureCounter++}`;\n  }\n  destroy() {\n    this.engine?.textureDestroyQueue.push(this);\n  }\n  async download() {\n    if (!this.adapter)\n      return;\n    if (this.adapter instanceof WebGPUAdapter) {\n      if (this.adapter.pendingWrites > 0) {\n        this.engine?.adapter.flush();\n      }\n      if (this.adapter.storageDirty) {\n        this.cpuReadDirty = true;\n      }\n    }\n    if (this.cpuReadDirty) {\n      if (this.dirty) {\n        this.flush();\n      }\n      this.cpuReadDirty = false;\n      this.cpuData = await this.adapter.downloadImage();\n    }\n  }\n  getData() {\n    return this.cpuData;\n  }\n  downloadAsync() {\n    return this.download();\n  }\n  /** @shadeup=glsl(!texture($self$, $0$)) */\n  __index(index) {\n    if (!this.cpuData)\n      return [0, 0, 0, 0];\n    return this.getFast(index);\n  }\n  getFast;\n  setFast;\n  init() {\n    this.dataIndexStride = parseInt(this.innerType[this.innerType.length - 1]) || 1;\n    if (this.innerType == \"uint8\") {\n      this.dataIndexStride = 4;\n    }\n    let width = this.size[0];\n    if (this.innerType == \"uint8\") {\n      this.getFast = (index) => {\n        let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n        return [\n          this.cpuData[i] / 255,\n          this.cpuData[i + 1] / 255,\n          this.cpuData[i + 2] / 255,\n          this.cpuData[i + 3] / 255\n        ];\n      };\n    } else {\n      if (this.dataIndexStride == 4) {\n        this.getFast = (index) => {\n          let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          return [\n            this.cpuData[i],\n            this.cpuData[i + 1],\n            this.cpuData[i + 2],\n            this.cpuData[i + 3]\n          ];\n        };\n      } else if (this.dataIndexStride == 3) {\n        this.getFast = (index) => {\n          let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          return [this.cpuData[i], this.cpuData[i + 1], this.cpuData[i + 2]];\n        };\n      } else if (this.dataIndexStride == 2) {\n        this.getFast = (index) => {\n          let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          return [this.cpuData[i], this.cpuData[i + 1]];\n        };\n      } else if (this.dataIndexStride == 1) {\n        this.getFast = (index) => {\n          let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          return this.cpuData[i];\n        };\n      }\n    }\n    if (this.dataIndexStride == 1) {\n      this.setFast = (index, val) => {\n        let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n        this.cpuWriteDirty = true;\n        this.cpuData[i] = val;\n      };\n    } else {\n      if (this.innerType == \"uint8\") {\n        this.setFast = (index, value) => {\n          let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          this.cpuWriteDirty = true;\n          this.cpuData[i] = value[2] * 255;\n          this.cpuData[i + 1] = value[1] * 255;\n          this.cpuData[i + 2] = value[0] * 255;\n          this.cpuData[i + 3] = value[3] * 255;\n        };\n      } else {\n        if (this.dataIndexStride == 4) {\n          this.setFast = (index, value) => {\n            let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            this.cpuWriteDirty = true;\n            this.cpuData[i] = value[0];\n            this.cpuData[i + 1] = value[1];\n            this.cpuData[i + 2] = value[2];\n            this.cpuData[i + 3] = value[3];\n          };\n        } else if (this.dataIndexStride == 3) {\n          this.setFast = (index, value) => {\n            let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            this.cpuWriteDirty = true;\n            this.cpuData[i] = value[0];\n            this.cpuData[i + 1] = value[1];\n            this.cpuData[i + 2] = value[2];\n          };\n        } else if (this.dataIndexStride == 2) {\n          this.setFast = (index, value) => {\n            let i = ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            this.cpuWriteDirty = true;\n            this.cpuData[i] = value[0];\n            this.cpuData[i + 1] = value[1];\n          };\n        }\n      }\n    }\n  }\n  __index_assign(index, value) {\n    if (!this.cpuData)\n      this.fillCpuData();\n    this.setFast(index, value);\n  }\n  fillCpuData() {\n    let arr;\n    this.dataIndexStride;\n    if (this.innerType.startsWith(\"float\")) {\n      arr = new Float32Array(this.width * this.height * this.dataIndexStride);\n    } else if (this.innerType.startsWith(\"int\")) {\n      arr = new Int32Array(this.width * this.height * this.dataIndexStride);\n    } else if (this.innerType.startsWith(\"uint\")) {\n      arr = new Uint32Array(this.width * this.height * this.dataIndexStride);\n    } else if (this.innerType == \"uint8\") {\n      arr = new Uint8Array(this.width * this.height * this.dataIndexStride);\n    } else {\n      throw new Error(\"Unknown texture type \" + this.innerType);\n    }\n    this.cpuData = arr;\n  }\n  sample(pos) {\n    return [0, 0, 0, 0];\n  }\n  cpuFlush() {\n    if (this.cpuData && this.cpuWriteDirty && this.adapter) {\n      this.adapter.uploadImage(this.cpuData);\n    }\n  }\n  upload() {\n    this.cpuFlush();\n  }\n  flush(flushStorage = true) {\n    this.cpuFlush();\n    if (flushStorage) {\n      if (this.adapter instanceof WebGPUAdapter) {\n        if (this.adapter.storageDirty) {\n          this.adapter.flushStorage();\n          this.cpuReadDirty = true;\n        }\n      }\n    }\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.adapter?.contextMode == \"draw\") {\n        this.adapter?.flush();\n      } else {\n        this.paint?.flush();\n      }\n    }\n  }\n  drawAdvanced(config) {\n    if (!this.adapter)\n      return;\n    let drawCall = new ShaderDispatch(\"draw\");\n    if (config.mesh) {\n      drawCall.drawType = \"geometry\";\n    } else if (config.indexBuffer) {\n      drawCall.drawType = \"indexed\";\n    }\n    if (config.depth) {\n      drawCall.overrideDepth = config.depth;\n    }\n    if (config.indirect) {\n      drawCall.indirectBuffer = config.indirect;\n    }\n    if (config.depthCompare) {\n      drawCall.depthCompare = config.depthCompare;\n    }\n    if (\"backfaceCulling\" in config) {\n      drawCall.backfaceCulling = config.backfaceCulling;\n    }\n    if (\"indirectOffset\" in config) {\n      drawCall.indirectOffset = config.indirectOffset;\n    }\n    drawCall.instanceCount = config.instances ?? 1;\n    drawCall.attachments = config.attachments ?? null;\n    drawCall.depthOnly = config.depthOnly ?? false;\n    let fragShader = config.fragment.get(this.adapter, \"fragment\", {\n      attachments: config.attachments ? config.attachments.map((a) => a.innerType) : void 0\n    });\n    if (!fragShader) {\n      throw new Error(\"Fragment shader not found\");\n    }\n    drawCall.setFragmentShader(fragShader);\n    let vertShader = config.vertex.get(this.adapter, \"vertex\");\n    if (!vertShader) {\n      throw new Error(\"Vertex shader not found\");\n    }\n    drawCall.setVertexShader(vertShader);\n    config.fragment.bindUniforms(drawCall.fragmentUniforms);\n    config.vertex.bindUniforms(drawCall.vertexUniforms);\n    if (config.mesh) {\n      drawCall.setGeometry(config.mesh);\n    } else if (config.indexBuffer) {\n      drawCall.setIndexBuffer(config.indexBuffer);\n    }\n    this.adapter.dispatch(drawCall, {\n      depthTest: config.depthTest ?? true\n    });\n  }\n  draw(first, second, third) {\n    this.cpuFlush();\n    this.dirty = true;\n    this.cpuReadDirty = true;\n    this.version++;\n    if (\"vertices\" in first && second && third) {\n      this._draw_geometry(first, second, third);\n    } else if (first && !second && !third) {\n      this._draw_fullscreen(first);\n    }\n  }\n  fullscreenVertexShaderInternal = null;\n  _draw_fullscreen(pixelShaderInst) {\n    if (!this.adapter)\n      return;\n    if (!this.fullscreenVertexShaderInternal) {\n      this.fullscreenVertexShaderInternal = this.adapter.createShader(\n        {\n          webgl: `#version 300 es\n\t\t\t\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tin vec3 a_position;\n\t\t\tin vec3 a_normal;\n\t\t\tin vec3 a_tangent;\n\t\t\tin vec3 a_bitangent;\n\t\t\tin vec2 a_uv;\n\t\t\tin vec4 a_color;\n\t\n\t\t\tout vec3 _v_position;\n\t\t\tout vec3 _v_normal;\n\t\t\tout vec3 _v_tangent;\n\t\t\tout vec3 _v_bitangent;\n\t\t\tout vec2 _v_uv;\n\t\t\tout vec4 _v_color;\n\t\t\t\n\t\t\tvoid main(void) {\n\t\t\tfloat x = float((gl_VertexID & 1) << 2);\n\t\t\tfloat y = float((gl_VertexID & 2) << 1);\n\t\t\t_v_uv.x = x * 0.5;\n\t\t\t_v_uv.y = 1.f - (y * 0.5);\n\t\t\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\t\t\t}`,\n          webgpu: `\n\t\t\t\tstruct VertexOutput {\n\t\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t\t@location(1) Tangent : vec3<f32>,\n\t\t\t\t\t@location(2) Bitangent : vec3<f32>,\n\t\t\t\t\t@location(3) TexCoord : vec2<f32>,\n\t\t\t\t\t@location(4) Color : vec4<f32>,\n\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex : u32,\n\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t};\n\t\t\t\n\t\t\t\t@vertex\n\t\t\t\tfn main(\n\t\t\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t\t\t) -> VertexOutput {\n\t\t\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\t\t\tvar output : VertexOutput;\n\t\t\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\t\t\toutput.Tangent = vec3<f32>(0.0, 1.0, 0.0);\n\t\t\t\t\toutput.Bitangent = vec3<f32>(0.0, 0.0, 1.0);\n\t\t\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\toutput.instanceIndex = 0;\n\t\t\t\n\t\t\t\t\treturn output;\n\t\t\t\t}\n\t\t\t\t`,\n          software: () => {\n          }\n        },\n        \"vertex\"\n      );\n    }\n    if (!this.fullscreenVertexShaderInternal) {\n      throw new Error(\"Fullscreen vertex shader not found\");\n    }\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"screen\";\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.size[0], this.size[1]]\n      )\n    );\n    drawCall.setVertexShader(this.fullscreenVertexShaderInternal);\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      throw new Error(\"Fragment shader not found\");\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    if (!this.$geo) {\n      this.$geo = makeFullscreenQuadGeometry();\n    }\n    drawCall.setGeometry(this.$geo);\n    this.adapter.dispatch(drawCall, {\n      depthTest: false\n    });\n  }\n  _draw_geometry(geometry, vertexShaderInst, pixelShaderInst) {\n    this.dirty = true;\n    this.cpuReadDirty = true;\n    this.cpuFlush();\n    this.version++;\n    if (!this.adapter)\n      return;\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"geometry\";\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.size[0], this.size[1]]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setGeometry(geometry);\n    this.adapter.dispatch(drawCall);\n  }\n  drawIndexed(indexBuffer, vertexShaderInst, pixelShaderInst) {\n    this.dirty = true;\n    this.cpuReadDirty = true;\n    this.cpuFlush();\n    this.version++;\n    if (!this.adapter)\n      return;\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"indexed\";\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.adapter.canvas.width, this.adapter.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setIndexBuffer(indexBuffer);\n    this.adapter.dispatch(drawCall);\n  }\n  clear(color = \"auto\") {\n    this.dirty = true;\n    this.cpuReadDirty = true;\n    this.cpuFlush();\n    this.version++;\n    if (!this.adapter)\n      return;\n    this.adapter.clear(false, color);\n  }\n  drawCount(count, vertexShaderInst, pixelShaderInst) {\n    this.dirty = true;\n    this.cpuReadDirty = true;\n    this.cpuFlush();\n    this.version++;\n    if (!this.adapter)\n      return;\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"count\";\n    drawCall.drawCount = count;\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.adapter.canvas.width, this.adapter.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    this.adapter.dispatch(drawCall);\n  }\n  drawInstanced(mesh, instanceCount, vertexShaderInst, pixelShaderInst) {\n    if (!this.adapter) {\n      return;\n    }\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"geometry\";\n    drawCall.instanceCount = instanceCount;\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.adapter.canvas.width, this.adapter.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setGeometry(mesh);\n    this.adapter.dispatch(drawCall);\n  }\n}\nconst FormatInnerTypeMapping = {\n  \"8bit-float\": \"r16float\",\n  \"8bit-float2\": \"rg16float\",\n  \"8bit-float3\": \"rgba16float\",\n  \"8bit-float4\": \"rgba16float\",\n  \"16bit-float\": \"r16float\",\n  \"16bit-float2\": \"rg16float\",\n  \"16bit-float3\": \"rgba16float\",\n  \"16bit-float4\": \"rgba16float\",\n  \"32bit-float\": \"r32float\",\n  \"32bit-float2\": \"rg32float\",\n  \"32bit-float3\": \"rgba32float\",\n  \"32bit-float4\": \"rgba32float\",\n  \"16bit-int\": \"r16sint\",\n  \"16bit-int2\": \"rg16sint\",\n  \"16bit-int3\": \"rgba16sint\",\n  \"16bit-int4\": \"rgba16sint\",\n  \"8bit-int\": \"r8sint\",\n  \"8bit-int2\": \"rg8sint\",\n  \"8bit-int3\": \"rgba8sint\",\n  \"8bit-int4\": \"rgba8sint\",\n  \"32bit-int\": \"r32sint\",\n  \"32bit-int2\": \"rg32sint\",\n  \"32bit-int3\": \"rgba32sint\",\n  \"32bit-int4\": \"rgba32sint\",\n  \"8bit-uint\": \"r8uint\",\n  \"8bit-uint2\": \"rg8uint\",\n  \"8bit-uint3\": \"rgba8uint\",\n  \"8bit-uint4\": \"rgba8uint\",\n  \"16bit-uint\": \"r16uint\",\n  \"16bit-uint2\": \"rg16uint\",\n  \"16bit-uint3\": \"rgba16uint\",\n  \"16bit-uint4\": \"rgba16uint\",\n  \"32bit-uint\": \"r32uint\",\n  \"32bit-uint2\": \"rg32uint\",\n  \"32bit-uint3\": \"rgba32uint\",\n  \"32bit-uint4\": \"rgba32uint\",\n  \"8bit-uint8\": \"rgba8unorm\",\n  \"16bit-uint8\": \"rgba16uint\",\n  \"32bit-uint8\": \"rgba32float\",\n  \"depth-uint8\": \"depth24plus\",\n  \"depth-float\": \"depth24plus\",\n  \"depth-float2\": \"depth24plus\",\n  \"depth-float3\": \"depth24plus\",\n  \"depth-float4\": \"depth24plus\",\n  \"depth-int\": \"depth24plus\",\n  \"depth-int2\": \"depth24plus\",\n  \"depth-int3\": \"depth24plus\",\n  \"depth-int4\": \"depth24plus\",\n  \"depth-uint\": \"depth24plus\",\n  \"depth-uint2\": \"depth24plus\",\n  \"depth-uint3\": \"depth24plus\",\n  \"depth-uint4\": \"depth24plus\",\n  \"depth-32-uint8\": \"depth32float\",\n  \"depth-32-float\": \"depth32float\",\n  \"depth-32-float2\": \"depth32float\",\n  \"depth-32-float3\": \"depth32float\",\n  \"depth-32-float4\": \"depth32float\",\n  \"depth-32-int\": \"depth32float\",\n  \"depth-32-int2\": \"depth32float\",\n  \"depth-32-int3\": \"depth32float\",\n  \"depth-32-int4\": \"depth32float\",\n  \"depth-32-uint\": \"depth32float\",\n  \"depth-32-uint2\": \"depth32float\",\n  \"depth-32-uint3\": \"depth32float\",\n  \"depth-32-uint4\": \"depth32float\"\n};\n\nfunction translateNumericToGLSL(type) {\n  if (type == \"float2x2\") {\n    return \"Matrix2f\";\n  } else if (type == \"float3x3\") {\n    return \"Matrix3f\";\n  } else if (type == \"float4x4\") {\n    return \"Matrix4f\";\n  }\n  let matches = type.match(/^([A-Za-z]+)(\\d)?$/);\n  if (!matches) {\n    return null;\n  }\n  let base = matches[1];\n  let size = matches[2] ? parseInt(matches[2]) : 1;\n  let type_name = \"\";\n  switch (base) {\n    case \"float\":\n      type_name = \"f\";\n      break;\n    case \"int\":\n      type_name = \"i\";\n      break;\n    case \"uint\":\n      type_name = \"i\";\n      break;\n    case \"bool\":\n      type_name = \"i\";\n      break;\n    default:\n      return null;\n  }\n  return `${size}${type_name}`;\n}\nfunction translateIdentifier(str) {\n  return str.replace(/\\_\\_\\_/g, \"_ii_\").replace(/\\_\\_/g, \"_i_\");\n}\n\nconst boundTextures = /* @__PURE__ */ new Map();\nlet boundTexturesCache = new LRUCache({\n  max: 16\n});\nfor (let ti = 0; ti < 16; ti++) {\n  boundTextures.set(ti, null);\n}\nlet webglCounter = 0;\nclass WebGLAdapter extends GraphicsAdapter {\n  gl = null;\n  index = 0;\n  blankImage = null;\n  GL_SHADER_TYPES = {\n    vertex: 0,\n    \"vertex-indexed\": 0,\n    fragment: 0,\n    compute: -1\n  };\n  programCache = /* @__PURE__ */ new Map();\n  init() {\n    this.index = webglCounter++;\n    console.log(\"Creating gl with index\", this.index);\n    this.gl = this.canvas.getContext(\"webgl2\", {\n      preserveDrawingBuffer: true\n    });\n    if (!this.gl) {\n      throw new Error(\"WebGL is not supported\");\n    }\n    this.GL_SHADER_TYPES = {\n      vertex: this.gl.VERTEX_SHADER,\n      fragment: this.gl.FRAGMENT_SHADER,\n      \"vertex-indexed\": this.gl.VERTEX_SHADER,\n      compute: -1\n    };\n    this.blankImage = document.createElement(\"canvas\");\n    this.blankImage.width = 1;\n    this.blankImage.height = 1;\n    this.blankImage.getContext(\"2d\").fillRect(0, 0, 1, 1);\n    this.setupImageDrawing();\n  }\n  __program = null;\n  setupImageDrawing() {\n    const gl = this.getGL();\n    this.__program = gl.createProgram();\n    let program = this.__program;\n    if (!program)\n      throw new Error(\"Could not create program\");\n    let vertexShader = this.genNativeShader(\n      `#version 300 es\nprecision highp float;\n\nin vec4 a_position;\nin vec2 a_texcoord;\n\nuniform vec2 size;\n\nout vec2 v_texcoord;\n\nvoid main() {\n\tgl_Position = a_position;\n\tv_texcoord = a_texcoord;\n\n\tfloat x = float((gl_VertexID & 1) << 2);\n\tfloat y = float((gl_VertexID & 2) << 1);\n\tv_texcoord.x = x * 0.5;\n\tv_texcoord.y = 1.f - (y * 0.5);\n\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\n}\n`,\n      gl.VERTEX_SHADER\n    );\n    let fragmentShader = this.genNativeShader(\n      `#version 300 es\nprecision mediump float;\nprecision mediump int;\n\nin vec2 v_texcoord;\nout vec4 _i_gl_out_pixel;\n\t\nuniform sampler2D u_texture;\n\t\nvoid main() {\n\tvec2 t = vec2(v_texcoord.x, v_texcoord.y);\n\tvec4 c = texture(u_texture, t);\n\t// c.rgb *= c.a;\n\t_i_gl_out_pixel = c;\n\t// _i_gl_out_pixel = vec4(t, 0.0, 1.0);\n}\n`,\n      gl.FRAGMENT_SHADER\n    );\n    if (!vertexShader || !fragmentShader) {\n      return;\n    }\n    gl.attachShader(program, vertexShader);\n    gl.attachShader(program, fragmentShader);\n    gl.linkProgram(program);\n  }\n  drawImage(image, dstX, dstY, texWidth, texHeight) {\n    const gl = this.getGL();\n    const program = this.__program;\n    if (!program)\n      throw new Error(\"Could not create program\");\n    let positionLocation = gl.getAttribLocation(program, \"a_position\");\n    let texcoordLocation = gl.getAttribLocation(program, \"a_texcoord\");\n    gl.getUniformLocation(program, \"u_matrix\");\n    let textureLocation = gl.getUniformLocation(program, \"u_texture\");\n    let positionBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n    let positions = [-1, -1, -1, 1, 1, -1, 1, -1];\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n    let texcoordBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n    let texcoords = [0, 0, 0, 1, 1, 0, 1, 0];\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(texcoords), gl.STATIC_DRAW);\n    let unit = this.getTextureUnit(image);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n    gl.useProgram(program);\n    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n    gl.enableVertexAttribArray(positionLocation);\n    gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n    gl.enableVertexAttribArray(texcoordLocation);\n    gl.vertexAttribPointer(texcoordLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.uniform1i(textureLocation, unit);\n    gl.enable(gl.BLEND);\n    let indexBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n    let tris = [0, 1, 2];\n    let indexArr = new Uint16Array(tris.length);\n    for (let i = 0; i < tris.length; i += 3) {\n      indexArr[i] = tris[i];\n      indexArr[i + 1] = tris[i + 1];\n      indexArr[i + 2] = tris[i + 2];\n    }\n    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);\n    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n    gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_SHORT, 0);\n    gl.deleteBuffer(positionBuffer);\n    gl.deleteBuffer(texcoordBuffer);\n  }\n  getGL() {\n    if (!this.gl) {\n      throw new Error(\"WebGL is not supported\");\n    }\n    return this.gl;\n  }\n  setViewport(width, height) {\n    const gl = this.getGL();\n    super.setViewport(width, height);\n    gl.viewport(0, 0, width, height);\n  }\n  getOrCreateShader(instance, type, config) {\n    const gl = this.getGL();\n    let arrSizeChanged = false;\n    for (let param of Object.keys(instance.parent.params.webgl)) {\n      let type2 = instance.parent.params.webgl[param];\n      if (type2.type == \"array\") {\n        if (!instance.parent.arraySizes[param])\n          instance.parent.arraySizes[param] = 0;\n        if (Array.isArray(instance.bindings[param])) {\n          if (instance.bindings[param].length > instance.parent.arraySizes[param]) {\n            instance.parent.arraySizes[param] = instance.bindings[param].length;\n            arrSizeChanged = true;\n          }\n        }\n      }\n    }\n    if (instance.parent.types[type] && !arrSizeChanged) {\n      return instance.parent.types[type];\n    } else {\n      if (type == \"compute\") {\n        throw new Error(\"Compute shaders are not supported in WebGL\");\n      }\n      let shader = gl.createShader(this.GL_SHADER_TYPES[type]);\n      if (!shader) {\n        console.log(\"Shader on canvas failed\", this.canvas);\n        throw new Error(\"Failed to create shader of type \" + type);\n      }\n      let base = instance.parent.code.webgl;\n      for (let param of Object.keys(instance.parent.arraySizes)) {\n        base = base.replace(`%${param}_size%`, instance.parent.arraySizes[param]);\n      }\n      if (type == \"vertex\") {\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `in vec3 a_position;\n\t\t\t\t\tin vec3 a_normal;\n\t\t\t\t\tin vec3 a_tangent;\n\t\t\t\t\tin vec3 a_bitangent;\n\t\t\t\t\tin vec2 a_uv;\n\t\t\t\t\tin vec4 a_color;\n\t\t\t\t\t\n\t\t\t\t\tout vec3 _v_position;\n\t\t\t\t\tout vec3 _v_normal;\n\t\t\t\t\tout vec3 _v_tangent;\n\t\t\t\t\tout vec3 _v_bitangent;\n\t\t\t\t\tout vec2 _v_uv;\n\t\t\t\t\tout vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `ShaderOutput _i_out;\n\t\t\t\t\t_i_out.position = vec4(a_position, 1.0);\n\t\t\t\t\t_i_out.normal = a_normal;\n\t\t\t\t\t_i_out.tangent = a_tangent;\n\t\t\t\t\t_i_out.bitangent = a_bitangent;\n\t\t\t\t\t_i_out.uv = a_uv;\n\t\t\t\t\t_i_out.color = a_color;\n\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.position = a_position;\n\t\t\t\t\t_i_in.uv = a_uv;\n\t\t\t\t\t_i_in.normal = a_normal;\n\t\t\t\t\t_i_in.tangent = a_tangent;\n\t\t\t\t\t_i_in.bitangent = a_bitangent;\n\t\t\t\t\t_i_in.color = a_color;\n\t\t\t\t\t_i_in.screen = vec2(0, 0);`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n          `gl_Position = _i_out.position;\n\t\t\t\t\t_v_position = _i_out.position.xyz;\n\t\t\t\t\t_v_normal = _i_out.normal;\n\t\t\t\t\t_v_tangent = _i_out.tangent;\n\t\t\t\t\t_v_bitangent = _i_out.bitangent;\n\t\t\t\t\t_v_uv = _i_out.uv;\n\t\t\t\t\t_v_color = _i_out.color;`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n        base = base.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n      } else if (type == \"vertex-indexed\") {\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `\n\t\t\t\t\tout vec3 _v_position;\n\t\t\t\t\tout vec3 _v_normal;\n\t\t\t\t\tout vec3 _v_tangent;\n\t\t\t\t\tout vec3 _v_bitangent;\n\t\t\t\t\tout vec2 _v_uv;\n\t\t\t\t\tout vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `ShaderOutput _i_out;\n\t\t\t\t\t_i_out.position = vec4(0.0, 0.0, 0.0, 1.0);\n\t\t\t\t\t_i_out.normal = vec3(0.0);\n\t\t\t\t\t_i_out.tangent = vec3(0.0);\n\t\t\t\t\t_i_out.bitangent = vec3(0.0);\n\t\t\t\t\t_i_out.uv = vec2(0.0);\n\t\t\t\t\t_i_out.color = vec4(0.0);\n\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.vertexIndex = uint(gl_VertexID);\n\t\t\t\t\t_i_in.position = vec3(0.0);\n\t\t\t\t\t_i_in.uv = vec2(0.0);\n\t\t\t\t\t_i_in.normal = vec3(0.0);\n\t\t\t\t\t_i_in.tangent = vec3(0.0);\n\t\t\t\t\t_i_in.bitangent = vec3(0.0);\n\t\t\t\t\t_i_in.color = vec4(0.0);\n\t\t\t\t\t_i_in.screen = vec2(0, 0);`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n          `gl_Position = _i_out.position;\n\t\t\t\t\t_v_position = _i_out.position.xyz;\n\t\t\t\t\t_v_normal = _i_out.normal;\n\t\t\t\t\t_v_tangent = _i_out.tangent;\n\t\t\t\t\t_v_bitangent = _i_out.bitangent;\n\t\t\t\t\t_v_uv = _i_out.uv;\n\t\t\t\t\t_v_color = _i_out.color;`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n        base = base.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n      } else {\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n          `out vec4 _i_gl_out_pixel;\n\t\t\t\t\tin vec3 _v_position;\n\t\t\t\t\tin vec3 _v_normal;\n\t\t\t\t\tin vec3 _v_tangent;\n\t\t\t\t\tin vec3 _v_bitangent;\n\t\t\t\t\tin vec2 _v_uv;\n\t\t\t\t\tin vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n          `ShaderOutput _i_out;\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.uv = _v_uv;\n\t\t\t\t\t_i_in.normal = _v_normal;\n\t\t\t\t\t_i_in.tangent = _v_tangent;\n\t\t\t\t\t_i_in.bitangent = _v_bitangent;\n\t\t\t\t\t_i_in.color = _v_color;\n\t\t\t\t\t_i_in.position = _v_position;\n\t\t\t\t\t_i_in.screen = vec2(gl_FragCoord.x, _vtex_canvas.y - gl_FragCoord.y);`.replace(/\\t\\n/g, \"\")\n        );\n        base = base.replace(\n          \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n          \"_i_gl_out_pixel = _i_out.color;\"\n        );\n        base = base.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n        base = base.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n      }\n      let finalSource = `#version 300 es\nprecision mediump float;\nprecision mediump int;\n\n${base}`;\n      gl.shaderSource(shader, finalSource);\n      gl.compileShader(shader);\n      if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n        let err = gl.getShaderInfoLog(shader);\n        if (err) {\n          let location = err.match(/ERROR: \\d+:(\\d+):/);\n          if (location) {\n            let line = parseInt(location[1]);\n            let col = parseInt(location[0]);\n            let lines = finalSource.split(\"\\n\");\n            console.error(lines[line - 1]);\n            console.error(\" \".repeat(col - 1) + \"^\");\n          }\n        }\n        console.error(\"Shader compile error\", gl.getShaderInfoLog(shader));\n        console.log(finalSource);\n        window.bubbleError(\"Shader compile error \" + gl.getShaderInfoLog(shader));\n      }\n      instance.version++;\n      let gShader = new GenericShader(instance.parent.code.webgl, type);\n      if (!gShader.payload) {\n        gShader.payload = {};\n      }\n      gShader.payload[this.index] = shader;\n      gShader.code = finalSource;\n      gShader.parent = instance.parent;\n      instance.parent.types[type] = gShader;\n      return gShader;\n    }\n  }\n  createShader(code, type) {\n    const gl = this.getGL();\n    if (type == \"compute\") {\n      let gComputeShader = new GenericShader(code.webgl, type);\n      gComputeShader.payload = code.software;\n      gComputeShader.parent = null;\n      return gComputeShader;\n    }\n    let shader = gl.createShader(this.GL_SHADER_TYPES[type]);\n    if (!shader) {\n      throw new Error(\"Failed to create shader\");\n    }\n    gl.shaderSource(shader, code.webgl);\n    gl.compileShader(shader);\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n      console.log(\"Code\", code);\n      console.error(\"Shader compile error\", gl.getShaderInfoLog(shader));\n      throw new Error(\"Shader compile error\");\n    }\n    let gShader = new GenericShader(code.webgl, type);\n    gShader.payload = { [this.index]: shader };\n    gShader.parent = null;\n    return gShader;\n  }\n  clear() {\n    const gl = this.getGL();\n    gl.clearColor(0, 0, 0, 0);\n    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\n  }\n  getProgramVertexPixel(vertexShaderKey, vertexShader, pixelShaderKey, pixelShader) {\n    const gl = this.getGL();\n    let key = `${vertexShaderKey}_${pixelShaderKey}`;\n    let uniformCache = /* @__PURE__ */ new Map();\n    if (this.programCache.has(key)) {\n      return this.programCache.get(key) ?? null;\n    }\n    let program = gl.createProgram();\n    if (!program) {\n      return null;\n    }\n    program.getUniformLocationCached = (path) => {\n      if (!program)\n        throw new Error(\"Program is null\");\n      if (uniformCache.has(path)) {\n        return uniformCache.get(path) ?? null;\n      }\n      let loc = gl.getUniformLocation(program, path);\n      if (!loc) ; else {\n        uniformCache.set(path, loc);\n        return loc;\n      }\n    };\n    if (!vertexShader || !pixelShader) {\n      return null;\n    }\n    gl.attachShader(program, vertexShader);\n    gl.attachShader(program, pixelShader);\n    gl.linkProgram(program);\n    gl.useProgram(program);\n    this.programCache.set(key, program);\n    return program ?? null;\n  }\n  unbindTexture(texture) {\n    const gl = this.getGL();\n    if (texture.isBound && texture.payload) {\n      boundTextures.set(texture.payload.unit, null);\n      texture.isBound = false;\n      gl.deleteTexture(texture.payload.texture);\n      texture.payload = null;\n    }\n  }\n  flush() {\n    const gl = this.getGL();\n    gl.flush();\n  }\n  getTextureUnit(texture) {\n    const gl = this.getGL();\n    let isBound = false;\n    if (texture instanceof ShadeupTexture2d) {\n      texture.flush();\n      isBound = texture.isBound;\n    }\n    if (!isBound) {\n      let unit = -1;\n      for (let [ti, tex] of boundTextures) {\n        if (tex == null) {\n          unit = ti;\n          break;\n        }\n      }\n      if (unit == -1) {\n        let oldest = boundTexturesCache.pop();\n        unit = oldest[0];\n      }\n      if (texture instanceof ShadeupTexture2d) {\n        texture.payload = {\n          texture: gl.createTexture(),\n          unit: -1,\n          version: texture.version\n        };\n        gl.activeTexture(gl.TEXTURE0 + unit);\n        gl.bindTexture(gl.TEXTURE_2D, texture.payload.texture);\n      } else {\n        gl.activeTexture(gl.TEXTURE0 + unit);\n        if (!texture.$gl) {\n          texture.$gl = {};\n        }\n        if (!texture.$gl[this.index]) {\n          texture.$gl[this.index] = gl.createTexture();\n        }\n        gl.bindTexture(gl.TEXTURE_2D, texture.$gl[this.index]);\n      }\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n      if (texture instanceof ShadeupTexture2d) {\n        let webglAdapter = texture.adapter;\n        let useImage = webglAdapter.canvas;\n        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, useImage);\n      } else {\n        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture);\n      }\n      boundTextures.set(unit, texture);\n      if (texture instanceof ShadeupTexture2d) {\n        texture.isBound = true;\n        texture.payload.unit = unit;\n        boundTexturesCache.set(texture.payload.unit, [texture.payload.unit, texture]);\n      } else {\n        boundTexturesCache.set(unit, [unit, texture]);\n      }\n      return unit;\n    } else {\n      if (texture instanceof ShadeupTexture2d) {\n        if (texture.payload.version != texture.version) {\n          gl.activeTexture(gl.TEXTURE0 + texture.payload.unit);\n          gl.bindTexture(gl.TEXTURE_2D, texture.payload.texture);\n          let webglAdapter = texture.adapter;\n          let useImage = webglAdapter.canvas;\n          gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, useImage);\n          texture.payload.version = texture.version;\n        }\n        boundTexturesCache.set(texture.payload.unit, [\n          texture.payload.unit,\n          texture.payload.texture\n        ]);\n        return texture.payload.unit;\n      }\n    }\n  }\n  setUniform(program, path, val, type, shaderKind) {\n    const gl = this.getGL();\n    const setUniform = this.setUniform.bind(this);\n    let expandedType = type;\n    if (expandedType.type == \"array\") {\n      let innerType = expandedType.element;\n      for (let i = 0; i < val.length; i++) {\n        setUniform(program, `${path}[${i}]`, val[i], innerType, shaderKind);\n      }\n      if (path.split(\".\").length < 2) {\n        setUniform(\n          program,\n          `${path}_size`,\n          val.length,\n          { type: \"primitive\", name: \"int\" },\n          shaderKind\n        );\n      }\n    } else if (expandedType.type == \"primitive\") {\n      if (expandedType.name == \"texture2d\" || expandedType.name == \"rwtexture2d\") {\n        expandedType.element;\n        let u = this.getTextureUnit(val);\n        let loc = program.getUniformLocationCached(path);\n        gl.uniform1i(loc, u);\n        if (path.split(\".\").length < 2) {\n          setUniform(\n            program,\n            `${path}_size`,\n            val.size,\n            { type: \"primitive\", name: \"float2\" },\n            shaderKind\n          );\n        }\n      } else {\n        let methodName = translateNumericToGLSL(expandedType.name);\n        let loc = program.getUniformLocationCached(path);\n        if (!Array.isArray(val)) {\n          val = [val];\n        }\n        methodName = `uniform${methodName}v`;\n        if (methodName.startsWith(\"uniformMatrix\")) {\n          if (val.length == 4) ; else if (val.length == 9) ; else if (val.length == 16) ;\n          gl[methodName](loc, false, val);\n        } else {\n          gl[methodName](loc, val);\n        }\n      }\n    } else if (expandedType.type == \"buffer\") ; else if (expandedType.type == \"struct\") {\n      for (let field of Object.keys(expandedType.fields)) {\n        if (!val) {\n          throw new Error(\n            `Found null value for ${path}.${field} while passing to shader (nulls are not allowed)`\n          );\n        }\n        setUniform(program, `${path}.${field}`, val[field], expandedType.fields[field], shaderKind);\n      }\n    }\n  }\n  dispatchDraw(dispatch, options = {\n    depthTest: true\n  }) {\n    const gl = this.getGL();\n    let pixelShader = dispatch.fragmentShader;\n    let vertexShader = dispatch.vertexShader;\n    if (!pixelShader || !vertexShader) {\n      return;\n    }\n    let program = this.getProgramVertexPixel(\n      vertexShader.uniqueSourceKey,\n      vertexShader.payload[this.index],\n      pixelShader.uniqueSourceKey,\n      pixelShader.payload[this.index]\n    );\n    if (!program) {\n      return;\n    }\n    gl.useProgram(program);\n    for (let k of dispatch.vertexUniforms.uniforms.keys()) {\n      let val = dispatch.vertexUniforms.uniforms.get(k);\n      if (!val)\n        continue;\n      k = k.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n      k = k.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n      this.setUniform(program, k, val.value, val.valueType, \"vertex\");\n    }\n    for (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n      let val = dispatch.fragmentUniforms.uniforms.get(k);\n      if (!val)\n        continue;\n      k = k.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n      k = k.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n      this.setUniform(program, k, val.value, val.valueType, \"pixel\");\n    }\n    const geometry = dispatch.geometry;\n    if (!geometry) {\n      return;\n    }\n    let vao = gl.createVertexArray();\n    gl.bindVertexArray(vao);\n    function generateEmptyData(arr, size, numItems) {\n      if (arr.length == 0) {\n        for (let i = 0; i < numItems * size; i++) {\n          for (let j = 0; j < size; j++)\n            arr.push(0);\n        }\n      }\n      return arr;\n    }\n    let geoGl = geometry;\n    let positionBuffer;\n    let normalBuffer;\n    let tangentBuffer;\n    let bitangentBuffer;\n    let uvBuffer;\n    let colorBuffer;\n    let indexBuffer;\n    if (geoGl._cacheGL) {\n      positionBuffer = geoGl._cacheGL.positionBuffer;\n      normalBuffer = geoGl._cacheGL.normalBuffer;\n      tangentBuffer = geoGl._cacheGL.tangentBuffer;\n      bitangentBuffer = geoGl._cacheGL.bitangentBuffer;\n      uvBuffer = geoGl._cacheGL.uvBuffer;\n      colorBuffer = geoGl._cacheGL.colorBuffer;\n      indexBuffer = geoGl._cacheGL.indexBuffer;\n    } else {\n      let tris = geometry.getTriangles();\n      positionBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(geometry.getVertices().flat()),\n        gl.STATIC_DRAW\n      );\n      normalBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(generateEmptyData(geometry.getNormals().flat(), 3, tris.length)),\n        gl.STATIC_DRAW\n      );\n      tangentBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, tangentBuffer);\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(generateEmptyData(geometry.getTangents().flat(), 3, tris.length)),\n        gl.STATIC_DRAW\n      );\n      bitangentBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, bitangentBuffer);\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(generateEmptyData(geometry.getBitangents().flat(), 3, tris.length)),\n        gl.STATIC_DRAW\n      );\n      uvBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(generateEmptyData(geometry.getUVs().flat(), 2, tris.length)),\n        gl.STATIC_DRAW\n      );\n      colorBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(generateEmptyData(geometry.getColors().flat(), 4, tris.length)),\n        gl.STATIC_DRAW\n      );\n      indexBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n      let indexArr = new Uint16Array(tris.length);\n      for (let i = 0; i < tris.length; i += 3) {\n        {\n          indexArr[i] = tris[i];\n          indexArr[i + 1] = tris[i + 1];\n          indexArr[i + 2] = tris[i + 2];\n        }\n      }\n      gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);\n      geoGl._cacheGL = {\n        positionBuffer,\n        normalBuffer,\n        tangentBuffer,\n        bitangentBuffer,\n        uvBuffer,\n        colorBuffer,\n        indexBuffer\n      };\n    }\n    let positionAttr = gl.getAttribLocation(program, \"a_position\");\n    let normalAttr = gl.getAttribLocation(program, \"a_normal\");\n    let tangentAttr = gl.getAttribLocation(program, \"a_tangent\");\n    let bitangentAttr = gl.getAttribLocation(program, \"a_bitangent\");\n    let uvAttr = gl.getAttribLocation(program, \"a_uv\");\n    let colorAttr = gl.getAttribLocation(program, \"a_color\");\n    gl.enable(gl.BLEND);\n    if (options.depthTest)\n      gl.enable(gl.DEPTH_TEST);\n    gl.enable(gl.CULL_FACE);\n    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n    if (positionAttr != -1) {\n      gl.enableVertexAttribArray(positionAttr);\n      gl.vertexAttribPointer(\n        positionAttr,\n        // location\n        3,\n        // size (components per iteration)\n        gl.FLOAT,\n        // type of to get from buffer\n        false,\n        // normalize\n        0,\n        // stride (bytes to advance each iteration)\n        0\n        // offset (bytes from start of buffer)\n      );\n    }\n    gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);\n    if (normalAttr != -1) {\n      gl.enableVertexAttribArray(normalAttr);\n      gl.vertexAttribPointer(\n        normalAttr,\n        // location\n        3,\n        // size (components per iteration)\n        gl.FLOAT,\n        // type of to get from buffer\n        false,\n        // normalize\n        0,\n        // stride (bytes to advance each iteration)\n        0\n        // offset (bytes from start of buffer)\n      );\n    }\n    gl.bindBuffer(gl.ARRAY_BUFFER, tangentBuffer);\n    if (tangentAttr != -1) {\n      gl.enableVertexAttribArray(tangentAttr);\n      gl.vertexAttribPointer(\n        tangentAttr,\n        // location\n        3,\n        // size (components per iteration)\n        gl.FLOAT,\n        // type of to get from buffer\n        false,\n        // normalize\n        0,\n        // stride (bytes to advance each iteration)\n        0\n        // offset (bytes from start of buffer)\n      );\n    }\n    gl.bindBuffer(gl.ARRAY_BUFFER, bitangentBuffer);\n    if (bitangentAttr != -1) {\n      gl.enableVertexAttribArray(bitangentAttr);\n      gl.vertexAttribPointer(\n        bitangentAttr,\n        // location\n        3,\n        // size (components per iteration)\n        gl.FLOAT,\n        // type of to get from buffer\n        false,\n        // normalize\n        0,\n        // stride (bytes to advance each iteration)\n        0\n        // offset (bytes from start of buffer)\n      );\n    }\n    gl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n    if (uvAttr != -1) {\n      gl.enableVertexAttribArray(uvAttr);\n      gl.vertexAttribPointer(\n        uvAttr,\n        // location\n        2,\n        // size (components per iteration)\n        gl.FLOAT,\n        // type of to get from buffer\n        false,\n        // normalize\n        0,\n        // stride (bytes to advance each iteration)\n        0\n        // offset (bytes from start of buffer)\n      );\n    }\n    gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n    if (colorAttr != -1) {\n      gl.enableVertexAttribArray(colorAttr);\n      gl.vertexAttribPointer(\n        colorAttr,\n        // location\n        4,\n        // size (components per iteration)\n        gl.FLOAT,\n        // type of to get from buffer\n        false,\n        // normalize\n        0,\n        // stride (bytes to advance each iteration)\n        0\n        // offset (bytes from start of buffer)\n      );\n    }\n    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n    gl.drawElements(gl.TRIANGLES, geometry.getTriangles().length, gl.UNSIGNED_SHORT, 0);\n    gl.deleteVertexArray(vao);\n  }\n  dispatchDrawIndexed(dispatch, options = {\n    depthTest: true\n  }) {\n    const gl = this.getGL();\n    let pixelShader = dispatch.fragmentShader;\n    let vertexShader = dispatch.vertexShader;\n    if (!pixelShader || !vertexShader) {\n      return;\n    }\n    let program = this.getProgramVertexPixel(\n      vertexShader.uniqueSourceKey,\n      vertexShader.payload[this.index],\n      pixelShader.uniqueSourceKey,\n      pixelShader.payload[this.index]\n    );\n    if (!program) {\n      return;\n    }\n    gl.useProgram(program);\n    for (let k of dispatch.vertexUniforms.uniforms.keys()) {\n      let val = dispatch.vertexUniforms.uniforms.get(k);\n      if (!val)\n        continue;\n      k = k.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n      k = k.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n      this.setUniform(program, k, val.value, val.valueType, \"vertex\");\n    }\n    for (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n      let val = dispatch.fragmentUniforms.uniforms.get(k);\n      if (!val)\n        continue;\n      k = k.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n      k = k.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n      this.setUniform(program, k, val.value, val.valueType, \"pixel\");\n    }\n    const indexBuffer = dispatch.indexBuffer;\n    if (!indexBuffer) {\n      return;\n    }\n    gl.enable(gl.BLEND);\n    if (options.depthTest)\n      gl.enable(gl.DEPTH_TEST);\n    gl.enable(gl.CULL_FACE);\n    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n    gl.drawArrays(gl.TRIANGLES, 0, indexBuffer.len());\n  }\n  dispatchDrawCount(dispatch, options = {\n    depthTest: true\n  }) {\n    const gl = this.getGL();\n    let pixelShader = dispatch.fragmentShader;\n    let vertexShader = dispatch.vertexShader;\n    if (!pixelShader || !vertexShader) {\n      return;\n    }\n    let program = this.getProgramVertexPixel(\n      vertexShader.uniqueSourceKey,\n      vertexShader.payload[this.index],\n      pixelShader.uniqueSourceKey,\n      pixelShader.payload[this.index]\n    );\n    if (!program) {\n      return;\n    }\n    gl.useProgram(program);\n    for (let k of dispatch.vertexUniforms.uniforms.keys()) {\n      let val = dispatch.vertexUniforms.uniforms.get(k);\n      if (!val)\n        continue;\n      k = k.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n      k = k.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n      this.setUniform(program, k, val.value, val.valueType, \"vertex\");\n    }\n    for (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n      let val = dispatch.fragmentUniforms.uniforms.get(k);\n      if (!val)\n        continue;\n      k = k.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n      k = k.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n      this.setUniform(program, k, val.value, val.valueType, \"pixel\");\n    }\n    gl.enable(gl.BLEND);\n    if (options.depthTest)\n      gl.enable(gl.DEPTH_TEST);\n    gl.enable(gl.CULL_FACE);\n    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n    gl.drawArrays(gl.TRIANGLES, 0, dispatch.drawCount * 3);\n  }\n  getOrCreateBuffer(buf, binding) {\n    const gl = this.getGL();\n    if (buf.platformPayload) {\n      return buf.platformPayload;\n    }\n    let buffer = gl.createBuffer();\n    if (!buffer) {\n      throw new Error(\"Could not create buffer\");\n    }\n    gl.bindBuffer(binding, buffer);\n    if (buf.structured) ; else {\n      gl.bufferData(\n        binding,\n        buf.uintArray ?? buf.floatArray ?? buf.intArray ?? new Uint8Array(0),\n        gl.STATIC_DRAW\n      );\n    }\n    buf.platformPayload = buffer;\n    return buffer;\n  }\n  dispatch(dispatch, options = {\n    depthTest: true\n  }) {\n    super.dispatch(dispatch, options);\n    if (dispatch.type == \"draw\") {\n      this.activateDrawContext();\n      this.triggerEvent(\"draw\", dispatch);\n      if (dispatch.drawType == \"indexed\") {\n        this.dispatchDrawIndexed(dispatch, options);\n      } else if (dispatch.drawType == \"count\") {\n        this.dispatchDrawCount(dispatch, options);\n      } else {\n        this.dispatchDraw(dispatch, options);\n      }\n    }\n  }\n  genNativeShader(code, type) {\n    const gl = this.getGL();\n    let shader = gl.createShader(type);\n    if (!shader) {\n      throw new Error(\"Could not create shader\");\n    }\n    gl.shaderSource(shader, code);\n    gl.compileShader(shader);\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n      console.log(\"Code\", code);\n      console.error(\"Shader compile error\", gl.getShaderInfoLog(shader));\n    }\n    return shader;\n  }\n}\n\nconst keyboardKeys = [\n  {\n    name: \"backspace\",\n    which: \"8\",\n    key: \"Backspace\",\n    code: \"Backspace\"\n  },\n  {\n    name: \"tab\",\n    which: \"9\",\n    key: \"Tab\",\n    code: \"Tab\"\n  },\n  {\n    name: \"enter\",\n    which: \"13\",\n    key: \"Enter\",\n    code: \"Enter\"\n  },\n  {\n    name: \"shift(left)\",\n    which: \"16\",\n    key: \"Shift\",\n    code: \"ShiftLeft\"\n  },\n  {\n    name: \"shift(right)\",\n    which: \"16\",\n    key: \"Shift\",\n    code: \"ShiftRight\"\n  },\n  {\n    name: \"ctrl(left)\",\n    which: \"17\",\n    key: \"Control\",\n    code: \"ControlLeft\"\n  },\n  {\n    name: \"ctrl(right)\",\n    which: \"17\",\n    key: \"Control\",\n    code: \"ControlRight\"\n  },\n  {\n    name: \"alt(left)\",\n    which: \"18\",\n    key: \"Alt\",\n    code: \"AltLeft\"\n  },\n  {\n    name: \"alt(right)\",\n    which: \"18\",\n    key: \"Alt\",\n    code: \"AltRight\"\n  },\n  {\n    name: \"pause/break\",\n    which: \"19\",\n    key: \"Pause\",\n    code: \"Pause\"\n  },\n  {\n    name: \"caps lock\",\n    which: \"20\",\n    key: \"CapsLock\",\n    code: \"CapsLock\"\n  },\n  {\n    name: \"escape\",\n    which: \"27\",\n    key: \"Escape\",\n    code: \"Escape\"\n  },\n  {\n    name: \"space\",\n    which: \"32\",\n    key: \"\",\n    code: \"Space\"\n  },\n  {\n    name: \"page up\",\n    which: \"33\",\n    key: \"PageUp\",\n    code: \"PageUp\"\n  },\n  {\n    name: \"page down\",\n    which: \"34\",\n    key: \"PageDown\",\n    code: \"PageDown\"\n  },\n  {\n    name: \"end\",\n    which: \"35\",\n    key: \"End\",\n    code: \"End\"\n  },\n  {\n    name: \"home\",\n    which: \"36\",\n    key: \"Home\",\n    code: \"Home\"\n  },\n  {\n    name: \"left arrow\",\n    which: \"37\",\n    key: \"ArrowLeft\",\n    code: \"ArrowLeft\"\n  },\n  {\n    name: \"up arrow\",\n    which: \"38\",\n    key: \"ArrowUp\",\n    code: \"ArrowUp\"\n  },\n  {\n    name: \"right arrow\",\n    which: \"39\",\n    key: \"ArrowRight\",\n    code: \"ArrowRight\"\n  },\n  {\n    name: \"down arrow\",\n    which: \"40\",\n    key: \"ArrowDown\",\n    code: \"ArrowDown\"\n  },\n  {\n    name: \"print screen\",\n    which: \"44\",\n    key: \"PrintScreen\",\n    code: \"PrintScreen\"\n  },\n  {\n    name: \"insert\",\n    which: \"45\",\n    key: \"Insert\",\n    code: \"Insert\"\n  },\n  {\n    name: \"delete\",\n    which: \"46\",\n    key: \"Delete\",\n    code: \"Delete\"\n  },\n  {\n    name: \"0\",\n    which: \"48\",\n    key: \"0\",\n    code: \"Digit0\"\n  },\n  {\n    name: \"1\",\n    which: \"49\",\n    key: \"1\",\n    code: \"Digit1\"\n  },\n  {\n    name: \"2\",\n    which: \"50\",\n    key: \"2\",\n    code: \"Digit2\"\n  },\n  {\n    name: \"3\",\n    which: \"51\",\n    key: \"3\",\n    code: \"Digit3\"\n  },\n  {\n    name: \"#\",\n    which: \"51\",\n    key: \"#\",\n    code: \"Digit3\"\n  },\n  {\n    name: \"4\",\n    which: \"52\",\n    key: \"4\",\n    code: \"Digit4\"\n  },\n  {\n    name: \"5\",\n    which: \"53\",\n    key: \"5\",\n    code: \"Digit5\"\n  },\n  {\n    name: \"6\",\n    which: \"54\",\n    key: \"6\",\n    code: \"Digit6\"\n  },\n  {\n    name: \"7\",\n    which: \"55\",\n    key: \"7\",\n    code: \"Digit7\"\n  },\n  {\n    name: \"8\",\n    which: \"56\",\n    key: \"8\",\n    code: \"Digit8\"\n  },\n  {\n    name: \"9\",\n    which: \"57\",\n    key: \"9\",\n    code: \"Digit9\"\n  },\n  {\n    name: \"a\",\n    which: \"65\",\n    key: \"a\",\n    code: \"KeyA\"\n  },\n  {\n    name: \"b\",\n    which: \"66\",\n    key: \"b\",\n    code: \"KeyB\"\n  },\n  {\n    name: \"c\",\n    which: \"67\",\n    key: \"c\",\n    code: \"KeyC\"\n  },\n  {\n    name: \"d\",\n    which: \"68\",\n    key: \"d\",\n    code: \"KeyD\"\n  },\n  {\n    name: \"e\",\n    which: \"69\",\n    key: \"e\",\n    code: \"KeyE\"\n  },\n  {\n    name: \"f\",\n    which: \"70\",\n    key: \"f\",\n    code: \"KeyF\"\n  },\n  {\n    name: \"g\",\n    which: \"71\",\n    key: \"g\",\n    code: \"KeyG\"\n  },\n  {\n    name: \"h\",\n    which: \"72\",\n    key: \"h\",\n    code: \"KeyH\"\n  },\n  {\n    name: \"i\",\n    which: \"73\",\n    key: \"i\",\n    code: \"KeyI\"\n  },\n  {\n    name: \"j\",\n    which: \"74\",\n    key: \"j\",\n    code: \"KeyJ\"\n  },\n  {\n    name: \"k\",\n    which: \"75\",\n    key: \"k\",\n    code: \"KeyK\"\n  },\n  {\n    name: \"l\",\n    which: \"76\",\n    key: \"l\",\n    code: \"KeyL\"\n  },\n  {\n    name: \"m\",\n    which: \"77\",\n    key: \"m\",\n    code: \"KeyM\"\n  },\n  {\n    name: \"n\",\n    which: \"78\",\n    key: \"n\",\n    code: \"KeyN\"\n  },\n  {\n    name: \"o\",\n    which: \"79\",\n    key: \"o\",\n    code: \"KeyO\"\n  },\n  {\n    name: \"p\",\n    which: \"80\",\n    key: \"p\",\n    code: \"KeyP\"\n  },\n  {\n    name: \"q\",\n    which: \"81\",\n    key: \"q\",\n    code: \"KeyQ\"\n  },\n  {\n    name: \"r\",\n    which: \"82\",\n    key: \"r\",\n    code: \"KeyR\"\n  },\n  {\n    name: \"s\",\n    which: \"83\",\n    key: \"s\",\n    code: \"KeyS\"\n  },\n  {\n    name: \"t\",\n    which: \"84\",\n    key: \"t\",\n    code: \"KeyT\"\n  },\n  {\n    name: \"u\",\n    which: \"85\",\n    key: \"u\",\n    code: \"KeyU\"\n  },\n  {\n    name: \"v\",\n    which: \"86\",\n    key: \"v\",\n    code: \"KeyV\"\n  },\n  {\n    name: \"w\",\n    which: \"87\",\n    key: \"w\",\n    code: \"KeyW\"\n  },\n  {\n    name: \"x\",\n    which: \"88\",\n    key: \"x\",\n    code: \"KeyX\"\n  },\n  {\n    name: \"y\",\n    which: \"89\",\n    key: \"y\",\n    code: \"KeyY\"\n  },\n  {\n    name: \"z\",\n    which: \"90\",\n    key: \"z\",\n    code: \"KeyZ\"\n  },\n  {\n    name: \"left window key\",\n    which: \"91\",\n    key: \"Meta\",\n    code: \"MetaLeft\"\n  },\n  {\n    name: \"right window key\",\n    which: \"92\",\n    key: \"Meta\",\n    code: \"MetaRight\"\n  },\n  {\n    name: \"select key (Context Menu)\",\n    which: \"93\",\n    key: \"ContextMenu\",\n    code: \"ContextMenu\"\n  },\n  {\n    name: \"numpad 0\",\n    which: \"96\",\n    key: \"0\",\n    code: \"Numpad0\"\n  },\n  {\n    name: \"numpad 1\",\n    which: \"97\",\n    key: \"1\",\n    code: \"Numpad1\"\n  },\n  {\n    name: \"numpad 2\",\n    which: \"98\",\n    key: \"2\",\n    code: \"Numpad2\"\n  },\n  {\n    name: \"numpad 3\",\n    which: \"99\",\n    key: \"3\",\n    code: \"Numpad3\"\n  },\n  {\n    name: \"numpad 4\",\n    which: \"100\",\n    key: \"4\",\n    code: \"Numpad4\"\n  },\n  {\n    name: \"numpad 5\",\n    which: \"101\",\n    key: \"5\",\n    code: \"Numpad5\"\n  },\n  {\n    name: \"numpad 6\",\n    which: \"102\",\n    key: \"6\",\n    code: \"Numpad6\"\n  },\n  {\n    name: \"numpad 7\",\n    which: \"103\",\n    key: \"7\",\n    code: \"Numpad7\"\n  },\n  {\n    name: \"numpad 8\",\n    which: \"104\",\n    key: \"8\",\n    code: \"Numpad8\"\n  },\n  {\n    name: \"numpad 9\",\n    which: \"105\",\n    key: \"9\",\n    code: \"Numpad9\"\n  },\n  {\n    name: \"multiply\",\n    which: \"106\",\n    key: \"*\",\n    code: \"NumpadMultiply\"\n  },\n  {\n    name: \"add\",\n    which: \"107\",\n    key: \"+\",\n    code: \"NumpadAdd\"\n  },\n  {\n    name: \"subtract\",\n    which: \"109\",\n    key: \"-\",\n    code: \"NumpadSubtract\"\n  },\n  {\n    name: \"decimal point\",\n    which: \"110\",\n    key: \".\",\n    code: \"NumpadDecimal\"\n  },\n  {\n    name: \"divide\",\n    which: \"111\",\n    key: \"/\",\n    code: \"NumpadDivide\"\n  },\n  {\n    name: \"f1\",\n    which: \"112\",\n    key: \"F1\",\n    code: \"F1\"\n  },\n  {\n    name: \"f2\",\n    which: \"113\",\n    key: \"F2\",\n    code: \"F2\"\n  },\n  {\n    name: \"f3\",\n    which: \"114\",\n    key: \"F3\",\n    code: \"F3\"\n  },\n  {\n    name: \"f4\",\n    which: \"115\",\n    key: \"F4\",\n    code: \"F4\"\n  },\n  {\n    name: \"f5\",\n    which: \"116\",\n    key: \"F5\",\n    code: \"F5\"\n  },\n  {\n    name: \"f6\",\n    which: \"117\",\n    key: \"F6\",\n    code: \"F6\"\n  },\n  {\n    name: \"f7\",\n    which: \"118\",\n    key: \"F7\",\n    code: \"F7\"\n  },\n  {\n    name: \"f8\",\n    which: \"119\",\n    key: \"F8\",\n    code: \"F8\"\n  },\n  {\n    name: \"f9\",\n    which: \"120\",\n    key: \"F9\",\n    code: \"F9\"\n  },\n  {\n    name: \"f10\",\n    which: \"121\",\n    key: \"F10\",\n    code: \"F10\"\n  },\n  {\n    name: \"f11\",\n    which: \"122\",\n    key: \"F11\",\n    code: \"F11\"\n  },\n  {\n    name: \"f12\",\n    which: \"123\",\n    key: \"F12\",\n    code: \"F12\"\n  },\n  {\n    name: \"num lock\",\n    which: \"144\",\n    key: \"NumLock\",\n    code: \"NumLock\"\n  },\n  {\n    name: \"scroll lock\",\n    which: \"145\",\n    key: \"ScrollLock\",\n    code: \"ScrollLock\"\n  },\n  {\n    name: \"audio volume mute\",\n    which: \"173\",\n    key: \"AudioVolumeMute\",\n    code: \"\"\n  },\n  {\n    name: \"audio volume down\",\n    which: \"174\",\n    key: \"AudioVolumeDown\",\n    code: \"\"\n  },\n  {\n    name: \"audio volume up\",\n    which: \"175\",\n    key: \"AudioVolumeUp\",\n    code: \"\"\n  },\n  {\n    name: \"media player\",\n    which: \"181\",\n    key: \"LaunchMediaPlayer\",\n    code: \"\"\n  },\n  {\n    name: \"launch application 1\",\n    which: \"182\",\n    key: \"LaunchApplication1\",\n    code: \"\"\n  },\n  {\n    name: \"launch application 2\",\n    which: \"183\",\n    key: \"LaunchApplication2\",\n    code: \"\"\n  },\n  {\n    name: \"semi-colon\",\n    which: \"186\",\n    key: \";\",\n    code: \"Semicolon\"\n  },\n  {\n    name: \"equal sign\",\n    which: \"187\",\n    key: \"=\",\n    code: \"Equal\"\n  },\n  {\n    name: \"comma\",\n    which: \"188\",\n    key: \",\",\n    code: \"Comma\"\n  },\n  {\n    name: \"dash\",\n    which: \"189\",\n    key: \"-\",\n    code: \"Minus\"\n  },\n  {\n    name: \"period\",\n    which: \"190\",\n    key: \".\",\n    code: \"Period\"\n  },\n  {\n    name: \"forward slash\",\n    which: \"191\",\n    key: \"/\",\n    code: \"Slash\"\n  },\n  {\n    name: \"Backquote/Grave accent\",\n    which: \"192\",\n    key: \"`\",\n    code: \"Backquote\"\n  },\n  {\n    name: \"open bracket\",\n    which: \"219\",\n    key: \"[\",\n    code: \"BracketLeft\"\n  },\n  {\n    name: \"back slash\",\n    which: \"220\",\n    key: \"\\\\\",\n    code: \"Backslash\"\n  },\n  {\n    name: \"close bracket\",\n    which: \"221\",\n    key: \"]\",\n    code: \"BracketRight\"\n  },\n  {\n    name: \"single quote\",\n    which: \"222\",\n    key: \"'\",\n    code: \"Quote\"\n  }\n];\n\nfunction initInput(canvas, mouseState, keyboardSink) {\n  let frameKeySink = /* @__PURE__ */ new Map();\n  window.addEventListener(\"keydown\", (e) => {\n    keyboardSink.set(e.code, true);\n    frameKeySink.set(e.code, true);\n    if (e.code.startsWith(\"Arrow\")) {\n      e.preventDefault();\n    }\n  });\n  window.addEventListener(\"keyup\", (e) => {\n    if (keyboardSink.has(e.code)) {\n      keyboardSink.delete(e.code);\n    }\n  });\n  let offsetLeft = document.querySelector(\".ui-container\")?.offsetLeft ?? 0;\n  let offsetTop = document.querySelector(\".ui-container\")?.offsetTop ?? 0;\n  const hasUiContainer = document.querySelector(\".ui-container\") !== null;\n  window.addEventListener(\"mousedown\", (e) => {\n    if (e.target && (!hasUiContainer || e.target.closest(\".ui-container\"))) {\n      mouseState.button[e.button] = true;\n      mouseState.startScreen = [...mouseState.screen];\n      mouseState.startUv = [...mouseState.uv];\n      mouseState.deltaScreen = [0, 0];\n      mouseState.deltaUv = [0, 0];\n      mouseState.dragging = true;\n    }\n  });\n  window.addEventListener(\"mouseup\", (e) => {\n    mouseState.clicked[0] = false;\n    mouseState.clicked[1] = false;\n    mouseState.clicked[2] = false;\n    mouseState.button[e.button] = false;\n    mouseState.dragging = false;\n  });\n  window.addEventListener(\"click\", (e) => {\n    if (e.target && (!hasUiContainer || e.target.closest(\".ui-container\"))) {\n      mouseState.clicked[e.button] = true;\n    }\n  });\n  window.addEventListener(\"mousemove\", (e) => {\n    mouseState.screen = [\n      (e.clientX - offsetLeft) * window.devicePixelRatio,\n      (e.clientY - offsetTop) * window.devicePixelRatio\n    ];\n    mouseState.uv = [\n      (e.clientX - offsetLeft) * window.devicePixelRatio / canvas.width,\n      (e.clientY - offsetTop) * window.devicePixelRatio / canvas.height\n    ];\n    if (mouseState.dragging) {\n      mouseState.deltaScreen = [\n        mouseState.screen[0] - mouseState.startScreen[0],\n        mouseState.screen[1] - mouseState.startScreen[1]\n      ];\n      mouseState.deltaUv = [\n        mouseState.uv[0] - mouseState.startUv[0],\n        mouseState.uv[1] - mouseState.startUv[1]\n      ];\n    }\n  });\n  window.addEventListener(\"touchstart\", (e) => {\n    if (e.target && (!hasUiContainer || e.target.closest(\".ui-container\"))) {\n      mouseState.button[0] = true;\n      mouseState.startScreen = [...mouseState.screen];\n      mouseState.startUv = [...mouseState.uv];\n      mouseState.deltaScreen = [0, 0];\n      mouseState.deltaUv = [0, 0];\n      mouseState.dragging = true;\n    }\n  });\n  window.addEventListener(\"touchend\", (e) => {\n    mouseState.button[0] = false;\n    mouseState.dragging = false;\n  });\n  window.addEventListener(\"touchmove\", (e) => {\n    mouseState.screen = [\n      (e.touches[0].clientX - offsetLeft) * window.devicePixelRatio,\n      (e.touches[0].clientY - offsetTop) * window.devicePixelRatio\n    ];\n    mouseState.uv = [\n      (e.touches[0].clientX - offsetLeft) * window.devicePixelRatio / canvas.width,\n      (e.touches[0].clientY - offsetTop) * window.devicePixelRatio / canvas.height\n    ];\n    if (mouseState.dragging) {\n      mouseState.deltaScreen = [\n        mouseState.screen[0] - mouseState.startScreen[0],\n        mouseState.screen[1] - mouseState.startScreen[1]\n      ];\n      mouseState.deltaUv = [\n        mouseState.uv[0] - mouseState.startUv[0],\n        mouseState.uv[1] - mouseState.startUv[1]\n      ];\n    }\n  });\n  window.addEventListener(\n    \"wheel\",\n    (e) => {\n      if (e.target.matches(\"canvas\") || e.target.matches(\".ui-container\") || e.target == document.body) {\n        e.preventDefault();\n        mouseState.wheel += normalizeWheel(e).pixelY * -0.01;\n      }\n    },\n    { passive: false }\n  );\n  window.addEventListener(\"scroll\", (e) => {\n    if (e.target.matches(\"canvas\") || e.target.matches(\".ui-container\") || e.target == document.body) {\n      e.preventDefault();\n    }\n  });\n  document.addEventListener(\"scroll\", (e) => {\n  });\n  let getKeyboardState = () => {\n    let keys = {};\n    for (let key of keyboardKeys) {\n      if (!key.code)\n        continue;\n      let realKey = key.code[0].toLowerCase() + key.code.slice(1);\n      keys[realKey] = keyboardSink.has(key.code);\n      keys[\"pressed\" + key.code] = frameKeySink.has(key.code);\n    }\n    let vec = [0, 0];\n    if (keys.keyW)\n      vec[1] -= 1;\n    if (keys.keyS)\n      vec[1] += 1;\n    if (keys.keyA)\n      vec[0] -= 1;\n    if (keys.keyD)\n      vec[0] += 1;\n    if (keys.arrowUp)\n      vec[1] -= 1;\n    if (keys.arrowDown)\n      vec[1] += 1;\n    if (keys.arrowLeft)\n      vec[0] -= 1;\n    if (keys.arrowRight)\n      vec[0] += 1;\n    keys.arrowVector = [vec[0], vec[1]];\n    frameKeySink.clear();\n    return keys;\n  };\n  return {\n    getKeyboardState\n  };\n}\nconst blankKeyboardState = {\n  keyW: false,\n  keyS: false,\n  keyA: false,\n  keyD: false,\n  arrowUp: false,\n  arrowDown: false,\n  arrowLeft: false,\n  arrowRight: false,\n  pressedKeyW: false,\n  pressedKeyS: false,\n  pressedKeyA: false,\n  pressedKeyD: false,\n  pressedArrowUp: false,\n  pressedArrowDown: false,\n  pressedArrowLeft: false,\n  pressedArrowRight: false,\n  arrowVector: [0, 0]\n};\nfor (let key of keyboardKeys) {\n  if (!key.code)\n    continue;\n  blankKeyboardState[key.code] = false;\n  blankKeyboardState[\"pressed\" + key.code] = false;\n}\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\nfunction normalizeWheel(event) {\n  var sX = 0, sY = 0, pX = 0, pY = 0;\n  if (\"detail\" in event) {\n    sY = event.detail;\n  }\n  if (\"wheelDelta\" in event) {\n    sY = -event.wheelDelta / 120;\n  }\n  if (\"wheelDeltaY\" in event) {\n    sY = -event.wheelDeltaY / 120;\n  }\n  if (\"wheelDeltaX\" in event) {\n    sX = -event.wheelDeltaX / 120;\n  }\n  if (\"axis\" in event && event.axis === event.HORIZONTAL_AXIS) {\n    sX = sY;\n    sY = 0;\n  }\n  pX = sX * PIXEL_STEP;\n  pY = sY * PIXEL_STEP;\n  if (\"deltaY\" in event) {\n    pY = event.deltaY;\n  }\n  if (\"deltaX\" in event) {\n    pX = event.deltaX;\n  }\n  if ((pX || pY) && event.deltaMode) {\n    if (event.deltaMode == 1) {\n      pX *= LINE_HEIGHT;\n      pY *= LINE_HEIGHT;\n    } else {\n      pX *= PAGE_HEIGHT;\n      pY *= PAGE_HEIGHT;\n    }\n  }\n  if (pX && !sX) {\n    sX = pX < 1 ? -1 : 1;\n  }\n  if (pY && !sY) {\n    sY = pY < 1 ? -1 : 1;\n  }\n  return { spinX: sX, spinY: sY, pixelX: pX, pixelY: pY };\n}\n\nconst addCameraHook = (engine) => {\n  const realUiContainer = document.querySelector(\".ui-container\") ?? engine.canvas;\n  let cameraConfig = {\n    mode: \"orbit-free\",\n    spinning: false,\n    initialPosition: [0, 0, 0],\n    initialPitch: 0,\n    initialYaw: 0,\n    speed: 10,\n    orbitTarget: [0, 0, 0],\n    orbitDistance: 650,\n    orbitPitch: Math.PI / 6,\n    orbitYaw: Math.PI / 4,\n    orbitMinDistance: 0,\n    orbitMaxDistance: 1e5,\n    orbitMinPitch: -Math.PI / 2,\n    orbitMaxPitch: Math.PI / 2 - 1e-3\n  };\n  let defaultCameraConfig = { ...cameraConfig };\n  let flying = false;\n  let orbiting = false;\n  let cameraUnlocked = false;\n  let lastFrameMovement = Date.now();\n  let defaultCameraSpeed = 1;\n  let cameraSpeed = defaultCameraSpeed;\n  function activateFreeFly() {\n    if (cameraConfig.mode == \"orbit-free\") {\n      cameraUnlocked = true;\n    }\n    cameraConfig.mode = \"free\";\n    cameraRotY = cameraConfig.orbitPitch;\n    cameraRotX = cameraConfig.orbitYaw - Math.PI / 2;\n  }\n  function activateOrbit() {\n    if (cameraConfig.mode == \"free\") {\n      cameraUnlocked = false;\n    }\n    cameraConfig.mode = \"orbit-free\";\n    let camera = engine.env.camera;\n    let currentDist = cameraConfig.orbitDistance;\n    let currentCameraPos = camera.position;\n    let rotation = camera.rotation;\n    let quatMulled = quaternionMul(rotation, [0, 0, 1]);\n    let targetForward = [quatMulled[0], quatMulled[1], quatMulled[2]];\n    cameraConfig.orbitTarget = [\n      currentCameraPos[0] - targetForward[0] * currentDist,\n      currentCameraPos[1] - targetForward[1] * currentDist,\n      currentCameraPos[2] - targetForward[2] * currentDist\n    ];\n    let target = cameraConfig.orbitTarget;\n    let position = currentCameraPos;\n    let dx = target[0] - position[0];\n    let dy = target[1] - position[1];\n    let dz = target[2] - position[2];\n    let yaw = Math.atan2(dz, dx);\n    let pitch = Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));\n    cameraConfig.orbitPitch = -pitch;\n    cameraConfig.orbitYaw = yaw - Math.PI;\n  }\n  window.addEventListener(\"contextmenu\", async (e) => {\n    if (e.target == realUiContainer) {\n      e.preventDefault();\n      if (cameraConfig.mode == \"orbit-free\" || cameraConfig.mode == \"free\") {\n        await engine.canvas.requestPointerLock();\n        flying = true;\n        if (cameraConfig.mode == \"orbit-free\") {\n          activateFreeFly();\n        }\n        engine.canvas.focus();\n      }\n    }\n  });\n  window.addEventListener(\"mousedown\", async (e) => {\n    if (e.target == realUiContainer) {\n      if (e.button == 2) {\n        e.preventDefault();\n        if (cameraConfig.mode == \"orbit-free\" || cameraConfig.mode == \"free\") {\n          await engine.canvas.requestPointerLock();\n          engine.canvas.focus();\n          flying = true;\n          if (cameraConfig.mode == \"orbit-free\") {\n            activateFreeFly();\n          }\n        }\n      } else if (e.buttons == 4) {\n        e.preventDefault();\n        orbiting = true;\n      } else if (e.button == 0 || e.button == 1) {\n        orbiting = true;\n      }\n    }\n  });\n  window.addEventListener(\"mouseup\", async (e) => {\n    if (e.target == realUiContainer || e.target == document.body || e.target == canvas) {\n      if (e.button == 2) {\n        e.preventDefault();\n        if (cameraConfig.mode == \"orbit-free\" || cameraConfig.mode == \"free\") {\n          document.exitPointerLock();\n          if (cameraUnlocked) {\n            activateOrbit();\n          }\n          flying = false;\n          cameraSpeed = defaultCameraSpeed;\n        }\n      } else if (e.buttons == 4) {\n        e.preventDefault();\n        orbiting = false;\n      } else if (e.button == 0 || e.button == 1) {\n        orbiting = false;\n      }\n    }\n  });\n  function normalizeVector3(v) {\n    let len = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n    return [v[0] / len, v[1] / len, v[2] / len];\n  }\n  let cameraRotX = 0;\n  let cameraRotY = 0;\n  let cameraPitchVelocity = 0;\n  let cameraYawVelocity = 0;\n  window.addEventListener(\"mousemove\", (e) => {\n    if (e.target == document.body || e.target == realUiContainer || e.target == canvas) {\n      if (e.buttons == 4 || e.buttons == 2) {\n        let camera2d = engine.env.camera2d;\n        if (camera2d) {\n          camera2d.position[0] += e.movementX * window.devicePixelRatio;\n          camera2d.position[1] += e.movementY * window.devicePixelRatio;\n        }\n      }\n      if (flying) {\n        let dx = e.movementX;\n        let dy = e.movementY;\n        let camera = engine.env.camera;\n        let right = [1, 0, 0];\n        let cameraRight = quaternionRotate(camera.rotation, right);\n        cameraRight[1] = 0;\n        cameraRight = normalizeVector3(cameraRight);\n        cameraRotX += dx * 1e-3;\n        cameraRotY += dy * 1e-3;\n      } else {\n        if (cameraConfig.mode.startsWith(\"orbit\") && orbiting) {\n          if (e.buttons == 1) {\n            cameraYawVelocity += e.movementX * 0.01;\n            cameraPitchVelocity += e.movementY * 0.01;\n            cameraConfig.spinning = false;\n          } else if (e.buttons == 4) {\n            cameraConfig.spinning = false;\n            let camera = engine.env.camera;\n            if (camera) {\n              let up = [0, 1, 0];\n              let forward = [0, 0, -1];\n              let right = [1, 0, 0];\n              let cameraRight = quaternionRotate(camera.rotation, right);\n              cameraRight = normalizeVector3(cameraRight);\n              let cameraUp = quaternionRotate(camera.rotation, up);\n              cameraUp = normalizeVector3(cameraUp);\n              let cameraForward = quaternionRotate(camera.rotation, forward);\n              cameraForward[1] = 0;\n              cameraForward = normalizeVector3(cameraForward);\n              let cameraSpeed2 = 0.6 * (Math.sqrt(cameraConfig.orbitDistance) / 20);\n              let cameraTarget = cameraConfig.orbitTarget;\n              if (e.shiftKey) {\n                cameraSpeed2 = 0.01;\n              }\n              if (e.ctrlKey) {\n                cameraSpeed2 = 1;\n              }\n              cameraTarget[0] += cameraRight[0] * e.movementX * cameraSpeed2 * -1;\n              cameraTarget[1] += cameraRight[1] * e.movementX * cameraSpeed2 * -1;\n              cameraTarget[2] += cameraRight[2] * e.movementX * cameraSpeed2 * -1;\n              cameraTarget[0] += cameraUp[0] * e.movementY * cameraSpeed2;\n              cameraTarget[1] += cameraUp[1] * e.movementY * cameraSpeed2;\n              cameraTarget[2] += cameraUp[2] * e.movementY * cameraSpeed2;\n              cameraConfig.orbitTarget = cameraTarget;\n            }\n          }\n        }\n      }\n    }\n  });\n  function quaternionRotate(quaternion, vector) {\n    let [x, y, z] = vector;\n    let [qx, qy, qz, qw] = quaternion;\n    let ix = qw * x + qy * z - qz * y;\n    let iy = qw * y + qz * x - qx * z;\n    let iz = qw * z + qx * y - qy * x;\n    let iw = -qx * x - qy * y - qz * z;\n    return [\n      ix * qw + iw * -qx + iy * -qz - iz * -qy,\n      iy * qw + iw * -qy + iz * -qx - ix * -qz,\n      iz * qw + iw * -qz + ix * -qy - iy * -qx\n    ];\n  }\n  function quaternionMul(quat, vec) {\n    let [qx, qy, qz, qw] = quat;\n    let [vx, vy, vz] = vec;\n    let ix = qw * vx + qy * vz - qz * vy;\n    let iy = qw * vy + qz * vx - qx * vz;\n    let iz = qw * vz + qx * vy - qy * vx;\n    let iw = -qx * vx - qy * vy - qz * vz;\n    return [\n      ix * qw + iw * -qx + iy * -qz - iz * -qy,\n      iy * qw + iw * -qy + iz * -qx - ix * -qz,\n      iz * qw + iw * -qz + ix * -qy - iy * -qx,\n      iw * qw - ix * -qx - iy * -qy - iz * -qz\n    ];\n  }\n  function quaternionMulQuaternion(a, b) {\n    let [ax, ay, az, aw] = a;\n    let [bx, by, bz, bw] = b;\n    let ix = aw * bx + ax * bw + ay * bz - az * by;\n    let iy = aw * by + ay * bw + az * bx - ax * bz;\n    let iz = aw * bz + az * bw + ax * by - ay * bx;\n    let iw = aw * bw - ax * bx - ay * by - az * bz;\n    return [ix, iy, iz, iw];\n  }\n  let movementForward = 0;\n  let movementRight = 0;\n  let movementUp = 0;\n  let movement = {\n    w: 0,\n    a: 0,\n    s: 0,\n    d: 0,\n    q: 0,\n    e: 0\n  };\n  let movementReal = {\n    w: 0,\n    a: 0,\n    s: 0,\n    d: 0,\n    q: 0,\n    e: 0\n  };\n  let fovDirection = 0;\n  window.addEventListener(\"keydown\", (e) => {\n    if (e.target instanceof Element && (e.target.closest(\"input\") || e.target.closest(\"textarea\")))\n      return;\n    if (e.key == \"w\") {\n      movement.w = 1;\n    } else if (e.key == \"s\") {\n      movement.s = 1;\n    } else if (e.key == \"a\") {\n      movement.a = 1;\n    } else if (e.key == \"d\") {\n      movement.d = 1;\n    } else if (e.key == \"e\") {\n      movement.e = 1;\n    } else if (e.key == \"q\") {\n      movement.q = 1;\n    } else if (e.key == \"c\") {\n      fovDirection = -1;\n    } else if (e.key == \"z\") {\n      fovDirection = 1;\n    }\n  });\n  let targetOrbitDistance = cameraConfig.orbitDistance;\n  window.addEventListener(\"wheel\", (e) => {\n    if (e.target == document.body || e.target == realUiContainer || e.target == engine.canvas) {\n      if (e.deltaY > 0) {\n        cameraSpeed = cameraSpeed / 1.2;\n      } else if (e.deltaY < 0) {\n        cameraSpeed = cameraSpeed * 1.2;\n      }\n      let wheel = normalizeWheel(e);\n      if (cameraConfig.mode.startsWith(\"orbit\")) {\n        targetOrbitDistance = Math.max(0.1, targetOrbitDistance - wheel.spinY * -100);\n      }\n      let camera2d = engine.env.camera2d;\n      if (camera2d) {\n        let mousePos = [engine.env.mouse.screen[0], engine.env.mouse.screen[1]];\n        let cameraPos = camera2d.position;\n        let cameraZoom = camera2d.zoom;\n        let zoomDelta = wheel.spinY * 0.1;\n        let newZoom = Math.max(0.01, cameraZoom + zoomDelta * cameraZoom);\n        let mouseWorldPos = [\n          (mousePos[0] - cameraPos[0]) / cameraZoom,\n          (mousePos[1] - cameraPos[1]) / cameraZoom\n        ];\n        let mouseWorldPos2 = [\n          (mousePos[0] - cameraPos[0]) / newZoom,\n          (mousePos[1] - cameraPos[1]) / newZoom\n        ];\n        let mouseWorldDelta = [\n          mouseWorldPos2[0] - mouseWorldPos[0],\n          mouseWorldPos2[1] - mouseWorldPos[1]\n        ];\n        camera2d.position = [\n          cameraPos[0] - mouseWorldDelta[0] * cameraZoom,\n          cameraPos[1] - mouseWorldDelta[1] * cameraZoom\n        ];\n        camera2d.zoom = newZoom;\n      }\n    }\n  });\n  window.addEventListener(\"keyup\", (e) => {\n    if (e.key == \"w\") {\n      movement.w = 0;\n    } else if (e.key == \"s\") {\n      movement.s = 0;\n    } else if (e.key == \"a\") {\n      movement.a = 0;\n    } else if (e.key == \"d\") {\n      movement.d = 0;\n    } else if (e.key == \"e\") {\n      movement.e = 0;\n    } else if (e.key == \"q\") {\n      movement.q = 0;\n    } else if (e.key == \"c\" || e.key == \"z\") {\n      fovDirection = 0;\n    }\n  });\n  function lerp(a, b, t) {\n    return a + (b - a) * t;\n  }\n  function quaternionFromEuler(euler) {\n    let [x, y, z] = euler;\n    let c1 = Math.cos(x / 2);\n    let c2 = Math.cos(y / 2);\n    let c3 = Math.cos(z / 2);\n    let s1 = Math.sin(x / 2);\n    let s2 = Math.sin(y / 2);\n    let s3 = Math.sin(z / 2);\n    return [\n      s1 * c2 * c3 + c1 * s2 * s3,\n      c1 * s2 * c3 - s1 * c2 * s3,\n      c1 * c2 * s3 + s1 * s2 * c3,\n      c1 * c2 * c3 - s1 * s2 * s3\n    ];\n  }\n  function cross(a, b) {\n    let [ax, ay, az] = a;\n    let [bx, by, bz] = b;\n    return [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx];\n  }\n  engine.env.configureCamera = function configureCamera(options) {\n    cameraConfig = { ...cameraConfig, ...options };\n    targetOrbitDistance = cameraConfig.orbitDistance;\n  };\n  return {\n    beforeFrame(delta) {\n      engine.env.camera = engine.env.camera ?? (window._makeCamera ? new window._makeCamera({}) : null);\n      engine.env.camera2d = engine.env.camera2d ?? (window._makeCamera2d ? new window._makeCamera2d({}) : null);\n      if (!engine.env.camera || !engine.env.camera2d) {\n        return;\n      }\n      let now = Date.now();\n      let dt = now - lastFrameMovement;\n      lastFrameMovement = now;\n      if (cameraConfig.mode == \"orbit-free\" || cameraConfig.mode == \"free\") {\n        if (!flying) {\n          if (engine.env.camera) {\n            engine.env.camera.fov = lerp(engine.env.camera.fov, 90, dt * 0.01);\n          }\n        }\n      }\n      if (engine.env.camera.width != engine.canvas.width || engine.env.camera.height != engine.canvas.height) {\n        engine.env.camera.width = engine.canvas.width;\n        engine.env.camera.height = engine.canvas.height;\n      }\n      if (cameraConfig.mode == \"orbit\" || cameraConfig.mode == \"orbit-free\") {\n        {\n          cameraConfig.orbitYaw += cameraYawVelocity * dt * 0.025;\n          cameraConfig.orbitPitch += cameraPitchVelocity * dt * 0.025;\n          cameraYawVelocity = lerp(cameraYawVelocity, 0, dt * 0.03);\n          cameraPitchVelocity = lerp(cameraPitchVelocity, 0, dt * 0.03);\n          cameraConfig.orbitPitch = Math.max(\n            cameraConfig.orbitMinPitch,\n            Math.min(cameraConfig.orbitMaxPitch, cameraConfig.orbitPitch)\n          );\n        }\n        cameraConfig.orbitDistance = lerp(\n          cameraConfig.orbitDistance,\n          targetOrbitDistance,\n          dt * 0.025\n        );\n        if (cameraConfig.spinning) {\n          cameraConfig.orbitYaw -= dt * 2e-4;\n        }\n        let theta = cameraConfig.orbitYaw;\n        let phi = Math.PI / 2 - cameraConfig.orbitPitch;\n        let orbitTarget = cameraConfig.orbitTarget;\n        let cameraPosition = [\n          Math.sin(phi) * Math.cos(theta) * cameraConfig.orbitDistance + orbitTarget[0],\n          Math.cos(phi) * cameraConfig.orbitDistance + orbitTarget[1],\n          Math.sin(phi) * Math.sin(theta) * cameraConfig.orbitDistance + orbitTarget[2]\n        ];\n        let camera = engine.env.camera;\n        if (camera) {\n          camera.position = cameraPosition;\n          let quat = window.shadeupQuat;\n          if (quat) {\n            camera.rotation = quat.lookAt(\n              normalizeVector3([\n                cameraPosition[0] - orbitTarget[0],\n                cameraPosition[1] - orbitTarget[1],\n                cameraPosition[2] - orbitTarget[2]\n              ]),\n              [0, -1, 0]\n            );\n          }\n        }\n      } else if (cameraConfig.mode == \"free\") {\n        const damping = 60;\n        movementReal = {\n          w: lerp(movementReal.w, movement.w, dt / damping),\n          a: lerp(movementReal.a, movement.a, dt / damping),\n          s: lerp(movementReal.s, movement.s, dt / damping),\n          d: lerp(movementReal.d, movement.d, dt / damping),\n          q: lerp(movementReal.q, movement.q, dt / damping),\n          e: lerp(movementReal.e, movement.e, dt / damping)\n        };\n        let camera = engine.env.camera;\n        let up = [0, 1, 0];\n        if (camera) {\n          cameraRotY = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, cameraRotY));\n          camera.rotation = quaternionMulQuaternion(\n            quaternionFromEuler([0, -cameraRotX, 0]),\n            quaternionFromEuler([-cameraRotY, 0, 0])\n          );\n        }\n        if (!flying) {\n          return;\n        }\n        let rotation = camera.rotation;\n        let quatMulled = quaternionMul(rotation, [0, 0, 1]);\n        let targetForward = [quatMulled[0], quatMulled[1], quatMulled[2]];\n        let targetUp = up;\n        let targetRight = cross(targetForward, targetUp);\n        targetRight = normalizeVector3(targetRight);\n        movementForward = 0;\n        movementRight = 0;\n        movementUp = 0;\n        movementForward += movementReal.w;\n        movementForward -= movementReal.s;\n        movementRight += movementReal.d;\n        movementRight -= movementReal.a;\n        movementUp += movementReal.e;\n        movementUp -= movementReal.q;\n        movementRight *= -1;\n        movementForward *= -1;\n        let movementVector = [0, 0, 0];\n        movementVector[0] += targetForward[0] * movementForward;\n        movementVector[1] += targetForward[1] * movementForward;\n        movementVector[2] += targetForward[2] * movementForward;\n        movementVector[0] += targetRight[0] * movementRight;\n        movementVector[1] += targetRight[1] * movementRight;\n        movementVector[2] += targetRight[2] * movementRight;\n        movementVector[0] += targetUp[0] * movementUp;\n        movementVector[1] += targetUp[1] * movementUp;\n        movementVector[2] += targetUp[2] * movementUp;\n        camera.position = [\n          camera.position[0] + movementVector[0] * dt * cameraSpeed,\n          camera.position[1] + movementVector[1] * dt * cameraSpeed,\n          camera.position[2] + movementVector[2] * dt * cameraSpeed\n        ];\n        camera.fov += fovDirection * dt * 0.1;\n        camera.fov = Math.max(Math.min(camera.fov, 150), 4);\n      }\n    },\n    reset() {\n      let cam = engine.env.camera;\n      cam.position = [0, 0, 0];\n      cam.rotation = [1, 0, 0, 0];\n      cam.width = engine.canvas.width;\n      cam.height = engine.canvas.height;\n      cam.fov = 90;\n      cam.near = 1;\n      cam.far = 1e5;\n      let cam2d = engine.env.camera2d;\n      cam2d.position = [0, 0];\n      cam2d.zoom = 1;\n      cameraConfig = { ...defaultCameraConfig };\n      targetOrbitDistance = cameraConfig.orbitDistance;\n    }\n  };\n};\n\nconst addCaptureHook = (engine) => {\n  let screenshotQueue = [];\n  let screenshotQueueResults = [];\n  const blank = document.createElement(\"canvas\");\n  blank.width = engine.canvas.width;\n  blank.height = engine.canvas.height;\n  return {\n    screenshotQueue,\n    screenshotQueueResults,\n    beforeFrame() {\n      if (!engine.playing)\n        return;\n      if (blank.width != engine.canvas.width || blank.height != engine.canvas.height) {\n        blank.width = engine.canvas.width;\n        blank.height = engine.canvas.height;\n      }\n      for (let i = screenshotQueue.length - 1; i >= 0; i--) {\n        let item = screenshotQueue[i];\n        let doCapture = false;\n        if (\"frame\" in item && typeof item.frame == \"number\") {\n          if (item.frame <= engine.env.frame - 1 || engine.timeMultiplier != 1 && engine.env.frame - 1 > item.frame) {\n            doCapture = true;\n          }\n        }\n        if (\"time\" in item) {\n          if (engine.env.time >= item.time) {\n            doCapture = true;\n          }\n        }\n        console.log(\"Checking screenshot\", item, doCapture);\n        if (doCapture) {\n          performance.mark(\"start capture\");\n          performance.mark(\"wait cap\");\n          if (engine.canvas) {\n            let cacheScreenshotItem = screenshotQueue[i];\n            screenshotQueue.splice(i, 1);\n            performance.mark(\"start to url\");\n            let data = engine.canvas.toDataURL(\"image/png\");\n            let ctx = blank.getContext(\"2d\");\n            ctx?.drawImage(engine.canvas, 0, 0);\n            let blankData = ctx?.getImageData(0, 0, blank.width, blank.height);\n            if (cacheScreenshotItem.$tries && cacheScreenshotItem.$tries > 100 && blankData) {\n              blankData.data[0] = 1;\n            }\n            if (!blankData?.data.some((v) => v != 0)) {\n              console.log(\"Blank screenshot, retrying\", screenshotQueue);\n              if (!cacheScreenshotItem.$tries)\n                cacheScreenshotItem.$tries = 0;\n              cacheScreenshotItem.$tries++;\n              screenshotQueue.push(cacheScreenshotItem);\n            } else {\n              performance.mark(\"end to url\");\n              console.log(\"Screenshot captured, sending to parent\");\n              screenshotQueueResults.push({\n                options: item,\n                image: data\n              });\n            }\n          }\n        }\n      }\n    },\n    afterFrame() {\n      if (screenshotQueue.length == 0 && screenshotQueueResults.length > 0) {\n        console.log(\"Posting screenshot results\");\n        window.parent.postMessage(\n          { type: \"screenshot-results\", data: screenshotQueueResults },\n          \"*\"\n        );\n        screenshotQueueResults = [];\n      }\n    }\n  };\n};\n\nclass PaintingContext {\n  constructor(canvas, gl) {\n    this.markDirtyCallback = () => {\n    };\n    this.__ctx = null;\n    this.__gl = null;\n    this.__offscreen_canvas = null;\n    this.__program = null;\n    this.stagedChanges = false;\n    this.dirty = false;\n    this.fastPoints = false;\n    this.fastPointsBuffer = null;\n    this.__currentColor = null;\n    this.pointsCounter = 0;\n    this.cacheSize = [0, 0];\n    if (!gl)\n      return;\n    this.__gl = gl;\n    this.__canvas = canvas;\n    this.__offscreen_canvas = document.createElement(\"canvas\");\n    this.__offscreen_canvas.width = canvas.width;\n    this.__offscreen_canvas.height = canvas.height;\n    this.__ctx = this.__offscreen_canvas.getContext(\"2d\", {\n      willReadFrequently: true\n    });\n    this.__offscreen_canvas.style.position = \"absolute\";\n    this.__offscreen_canvas.style.zIndex = \"10\";\n    this.__setColor([0, 0, 0, 1]);\n    gl.addEventListener(\"context\", (toContext) => {\n      if (toContext == \"draw\") {\n        this.flush();\n      }\n    });\n    gl.addEventListener(\"flush\", () => {\n      this.flush();\n    });\n  }\n  flush() {\n    if (!this.__gl)\n      return;\n    if (!this.__canvas)\n      return;\n    if (!this.__offscreen_canvas)\n      return;\n    if (!this.stagedChanges)\n      return;\n    if (this.fastPoints)\n      this.flushPoints();\n    this.__gl.drawImage(this.__offscreen_canvas);\n    this.stagedChanges = false;\n    if (this.__offscreen_canvas.width != this.__canvas.width || this.__offscreen_canvas.height != this.__canvas.height) {\n      this.__offscreen_canvas.width = this.__canvas.width;\n      this.__offscreen_canvas.height = this.__canvas.height;\n    }\n    this.pointsCounter = 0;\n  }\n  __beforeDraw() {\n    if (!this.__offscreen_canvas)\n      return;\n    if (!this.__ctx)\n      return;\n    if (!this.__canvas)\n      return;\n    this.markDirtyCallback();\n    this.__gl?.activatePaintContext();\n    if (!this.stagedChanges) {\n      this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n      this.__ctx.drawImage(this.__canvas, 0, 0);\n      let color = this.__currentColor;\n      this.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${color[3]})`;\n      this.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${color[3]})`;\n    }\n  }\n  __afterDraw() {\n    this.__gl;\n    this.dirty = true;\n    this.stagedChanges = true;\n  }\n  __setColor(color) {\n    if (!this.__ctx || !color)\n      return;\n    if (this.__currentColor && this.__currentColor[0] == color[0] && this.__currentColor[1] == color[1] && this.__currentColor[2] == color[2] && this.__currentColor[3] == color[3])\n      return;\n    this.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${color[3]})`;\n    this.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${color[3]})`;\n    this.__currentColor = [color[0], color[1], color[2], color[3]];\n  }\n  fillRect(pos, size, color) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  fillCircle(pos, radius, color) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n    this.__ctx.fill();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  fillArc(pos, radius, startAngle, endAngle, color) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n    this.__ctx.fill();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  line(pos1, pos2, color, width = 1) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.__ctx.moveTo(pos1[0], pos1[1]);\n    this.__ctx.lineTo(pos2[0], pos2[1]);\n    this.__ctx.lineWidth = width;\n    this.__ctx.stroke();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  circle(pos, radius, color, width = 1) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n    this.__ctx.lineWidth = width;\n    this.__ctx.stroke();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  arc(pos, radius, startAngle, endAngle, color, width = 1) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n    this.__ctx.lineWidth = width;\n    this.__ctx.stroke();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  text(pos, text, color) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.fillText(text, pos[0], pos[1]);\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  startPath(pos) {\n    if (!this.__ctx)\n      return;\n    this.flushPoints();\n    this.__beforeDraw();\n    this.__ctx.beginPath();\n    this.__ctx.moveTo(pos[0], pos[1]);\n  }\n  lineTo(pos) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.lineTo(pos[0], pos[1]);\n  }\n  strokePath(color, width = 1) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.lineWidth = width;\n    this.__setColor(color);\n    this.__ctx.stroke();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  fillPath(color) {\n    if (!this.__ctx)\n      return;\n    this.__setColor(color);\n    this.__ctx.fill();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  setStrokeWidth(width) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.lineWidth = width;\n  }\n  setFont(font) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.font = font;\n  }\n  setFontSize(size) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.font = `${size}px ${this.__ctx.font.split(\" \").slice(1).join(\" \")}`;\n  }\n  setTextAlign(align) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.textAlign = align;\n  }\n  setTextBaseline(baseline) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.textBaseline = baseline;\n  }\n  setLineCap(cap) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.lineCap = cap;\n  }\n  setLineJoin(join) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.lineJoin = join;\n  }\n  setMiterLimit(limit) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.miterLimit = limit;\n  }\n  setShadowColor(color) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.shadowColor = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${color[3]})`;\n  }\n  setShadowBlur(blur) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.shadowBlur = blur;\n  }\n  setShadowOffset(offset) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.shadowOffsetX = offset[0];\n    this.__ctx.shadowOffsetY = offset[1];\n  }\n  setGlobalAlpha(alpha) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.globalAlpha = alpha;\n  }\n  setGlobalCompositeOperation(op) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.globalCompositeOperation = op;\n  }\n  setImageSmoothingEnabled(enabled) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.imageSmoothingEnabled = enabled;\n  }\n  setImageSmoothingQuality(quality) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.imageSmoothingQuality = quality;\n  }\n  setLineDash(dash) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.setLineDash(dash);\n  }\n  setLineDashOffset(offset) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.lineDashOffset = offset;\n  }\n  setTransform(a, b, c, d, e, f) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.setTransform(a, b, c, d, e, f);\n  }\n  resetTransform() {\n    if (!this.__ctx)\n      return;\n    this.__ctx.resetTransform();\n  }\n  scale(v) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.scale(v[0], v[1]);\n  }\n  rotate(angle) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.rotate(angle);\n  }\n  translate(v) {\n    if (!this.__ctx)\n      return;\n    this.__ctx.translate(v[0], v[1]);\n  }\n  flushPoints() {\n    if (!this.__ctx)\n      return;\n    if (!this.fastPoints)\n      return;\n    if (!this.fastPointsBuffer)\n      return;\n    this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n    this.fastPoints = false;\n    this.fastPointsBuffer = null;\n    this.pointsCounter = 0;\n  }\n  point(pos, color) {\n    if (!this.__ctx)\n      return;\n    this.pointsCounter++;\n    this.__beforeDraw();\n    if (this.pointsCounter > 10) {\n      if (!this.fastPoints) {\n        this.fastPoints = true;\n        this.cacheSize = [this.__offscreen_canvas.width, this.__offscreen_canvas.height];\n        this.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\n      }\n      if (!this.fastPointsBuffer)\n        return;\n      let x = Math.floor(pos[0]);\n      let y = Math.floor(pos[1]);\n      let index = (y * this.cacheSize[0] + x) * 4;\n      if (!color) {\n        color = this.__currentColor;\n      }\n      let oldColorx = this.fastPointsBuffer.data[index] / 255;\n      let oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n      let oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n      let oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n      this.fastPointsBuffer.data[index] = color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n      this.fastPointsBuffer.data[index + 1] = color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n      this.fastPointsBuffer.data[index + 2] = color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n      this.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\n    } else {\n      this.__setColor(color);\n      this.__ctx.fillRect(pos[0], pos[1], 1, 1);\n    }\n    this.__afterDraw();\n  }\n  vector(pos, dir, color = [0.9803921568627451, 0.8, 0.08235294117647059, 1], width = 4) {\n    if (!this.__ctx || dir[0] == 0 && dir[1] == 0)\n      return;\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.setStrokeWidth(width);\n    this.__ctx.moveTo(pos[0], pos[1]);\n    this.__ctx.lineCap = \"round\";\n    this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n    this.__ctx.stroke();\n    this.__ctx.beginPath();\n    this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n    let arrowSize = 20;\n    let arrowAngle = Math.PI / 5;\n    let dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n    let arrow1 = [\n      Math.cos(dirAngle + arrowAngle) * arrowSize,\n      Math.sin(dirAngle + arrowAngle) * arrowSize\n    ];\n    let arrow2 = [\n      Math.cos(dirAngle - arrowAngle) * arrowSize,\n      Math.sin(dirAngle - arrowAngle) * arrowSize\n    ];\n    this.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\n    this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n    this.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\n    this.__ctx.stroke();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n  grid(center, count, gap, color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1], width = 2) {\n    if (!this.__ctx)\n      return;\n    this.__beforeDraw();\n    this.__setColor(color);\n    this.__ctx.beginPath();\n    this.setStrokeWidth(width);\n    let start = [\n      center[0] - count[0] / 2 * gap[0],\n      center[1] - count[1] / 2 * gap[1]\n    ];\n    for (let i = 0; i <= count[0]; i++) {\n      this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n      this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n    }\n    for (let i = 0; i <= count[1]; i++) {\n      this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n      this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n    }\n    this.__ctx.stroke();\n    this.__afterDraw();\n    this.pointsCounter = 0;\n  }\n}\n\nconst simpleHash = (str) => {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i);\n    hash = (hash << 5) - hash + char;\n    hash &= hash;\n  }\n  return new Uint32Array([hash])[0].toString(36);\n};\nclass ShadeupShaderInstance {\n  parent;\n  bindings;\n  key;\n  version;\n  constructor(parentSource, bindings, key) {\n    this.parent = parentSource;\n    this.bindings = bindings;\n    this.key = key;\n    this.version = 0;\n  }\n  getKey() {\n    return `${this.key}_${this.version}`;\n  }\n  get(adapter, type, config) {\n    let shade = adapter.getOrCreateShader(this, type, config);\n    shade.uniqueSourceKey = this.getKey();\n    return shade;\n  }\n  bindUniforms(to) {\n    for (let k of Object.keys(this.parent.params.webgl)) {\n      let paramType = this.parent.params.webgl[k];\n      let val = this.bindings[k];\n      let uniVal = new UniformValue(paramType, val);\n      let uniformName = translateIdentifier(k);\n      to.uniforms.set(uniformName, uniVal);\n    }\n  }\n}\nclass ShadeupShaderSource {\n  code;\n  params;\n  types;\n  arraySizes;\n  indexMapping;\n  key;\n  constructor(params, code, indexMapping) {\n    this.code = code;\n    this.params = params;\n    this.indexMapping = indexMapping;\n    this.types = {};\n    this.arraySizes = {};\n    this.key = simpleHash(JSON.stringify(code));\n  }\n  instance(bindings) {\n    return new ShadeupShaderInstance(this, bindings, this.key);\n  }\n}\n\nclass ShadeupAssetLoader {\n  registeredLoads = [];\n  loadedAssets = /* @__PURE__ */ new Map();\n  primedTextureAssets = /* @__PURE__ */ new Map();\n  registeredLibs = /* @__PURE__ */ new Set();\n  engine;\n  onProgress = () => {\n  };\n  constructor(engine) {\n    this.engine = engine;\n  }\n  reset() {\n    this.registeredLoads.splice(0, this.registeredLoads.length);\n    this.registeredLibs.clear();\n  }\n  async loadLib(name) {\n    if (name == \"rapier2d\") {\n      console.log(\"Loading rapier2d\");\n      window.RAPIER_2D = await import('https://cdn.skypack.dev/@dimforge/rapier2d-compat');\n      console.log(\"Loaded rapier2d\");\n      await window.RAPIER_2D.init();\n      console.log(\"Initialized rapier2d\");\n    } else if (name == \"rapier3d\") {\n      window.RAPIER_3D = await import('https://cdn.skypack.dev/@dimforge/rapier3d-compat');\n      await window.RAPIER_3D.init();\n    }\n  }\n  async loadLibs() {\n    console.log(\"Loading libs\", [...this.registeredLibs.keys()]);\n    await Promise.all(\n      [...this.registeredLibs.keys()].map(async (lib) => {\n        await this.loadLib(lib);\n      })\n    );\n  }\n  async loadAssets() {\n    let targetDownloadAmount = 0;\n    let currentDownloadAmount = 0;\n    let promises = [];\n    console.log(\"Loading assets\", [...this.registeredLoads.keys()]);\n    this.registeredLoads = this.registeredLoads.filter((load) => {\n      return !this.loadedAssets.has(load[0]);\n    });\n    for (let load of this.registeredLoads) {\n      promises.push(\n        (async () => {\n          let [key, type] = load;\n          let baseUrl = \"https://assets.shadeup.dev/\";\n          if (key.startsWith(\"http\")) {\n            baseUrl = \"\";\n          }\n          const downloadWithProgress = (url, onDone, buf = false) => {\n            let xhr = new XMLHttpRequest();\n            xhr.open(\"GET\", url, true);\n            xhr.responseType = \"arraybuffer\";\n            xhr.crossOrigin = \"anonymous\";\n            let oldDownloadAmount = 0;\n            let oldDownloadTotal = 0;\n            xhr.onprogress = (e) => {\n              if (e.lengthComputable) {\n                currentDownloadAmount += e.loaded - oldDownloadAmount;\n                oldDownloadAmount = e.loaded;\n                targetDownloadAmount += e.total - oldDownloadTotal;\n                oldDownloadTotal = e.total;\n                console.log(\n                  \"Progress\",\n                  currentDownloadAmount,\n                  targetDownloadAmount,\n                  currentDownloadAmount / targetDownloadAmount\n                );\n                this.onProgress?.(currentDownloadAmount / targetDownloadAmount);\n              }\n            };\n            xhr.onload = () => {\n              if (xhr.status >= 200 && xhr.status < 300) {\n                if (buf) {\n                  console.log(\"Loaded binary\", key);\n                  onDone(xhr.response);\n                } else {\n                  const blob = new Blob([xhr.response], {\n                    type: xhr.getResponseHeader(\"Content-Type\")\n                  });\n                  const url2 = URL.createObjectURL(blob);\n                  onDone(url2);\n                }\n              } else {\n                onDone(xhr.statusText);\n              }\n            };\n            xhr.send();\n          };\n          if (type == \"image\") {\n            await new Promise((resolve) => {\n              let img = new Image();\n              img.crossOrigin = \"anonymous\";\n              img.onerror = () => {\n                console.error(\"Failed to load image \" + key);\n                resolve();\n              };\n              img.onload = async () => {\n                let canvas = document.createElement(\"canvas\");\n                canvas.width = img.width;\n                canvas.height = img.height;\n                let ctx = canvas.getContext(\"2d\");\n                if (ctx)\n                  ctx.drawImage(img, 0, 0);\n                this.loadedAssets.set(key, canvas);\n                let tex = this.engine.shadeupMakeTextureInternal(\n                  [canvas.width, canvas.height],\n                  \"8bit\",\n                  \"uint8\"\n                );\n                tex.adapter?.drawImage(canvas, 0, 0, canvas.width, canvas.height);\n                tex.adapter?.flush();\n                if (tex.adapter instanceof WebGPUAdapter) {\n                  await tex.adapter.waitForDraw();\n                }\n                this.primedTextureAssets.set(key, tex);\n                resolve();\n              };\n              downloadWithProgress(baseUrl + key, (url) => {\n                img.src = url;\n              });\n            });\n          } else if (type == \"audio\") {\n            await new Promise((resolve) => {\n              let audio = new Audio();\n              audio.oncanplaythrough = () => {\n                this.loadedAssets.set(key, audio);\n                resolve();\n              };\n              downloadWithProgress(baseUrl + key, (url) => {\n                audio.src = url;\n              });\n            });\n          } else if (type == \"video\") {\n            await new Promise((resolve) => {\n              let video = document.createElement(\"video\");\n              video.oncanplaythrough = () => {\n                this.loadedAssets.set(key, video);\n                resolve();\n              };\n              downloadWithProgress(baseUrl + key, (url) => {\n                video.src = url;\n              });\n            });\n          } else {\n            fetch(baseUrl + key);\n            if (type == \"binary\") {\n              await new Promise((resolve) => {\n                downloadWithProgress(\n                  baseUrl + key,\n                  (buf) => {\n                    this.loadedAssets.set(key, buf);\n                    resolve();\n                  },\n                  true\n                );\n              });\n            } else if (type == \"text\") {\n              await new Promise((resolve) => {\n                downloadWithProgress(\n                  baseUrl + key,\n                  (buf) => {\n                    this.loadedAssets.set(key, buf.toString());\n                    resolve();\n                  },\n                  true\n                );\n              });\n            } else if (type == \"model\") {\n              await new Promise(async (resolve) => {\n                downloadWithProgress(\n                  baseUrl + key,\n                  async (res) => {\n                    const { GLTFLoader } = await import('./GLTFLoader-94b38cf6.js');\n                    const {\n                      Vector3,\n                      Mesh: THREEMesh,\n                      MeshStandardMaterial\n                    } = await import('./three.module-c8091b37.js');\n                    const { DRACOLoader } = await import('./DRACOLoader-4fcd2f44.js');\n                    const dracoLoader = new DRACOLoader();\n                    dracoLoader.setDecoderPath(\"/lib/draco/\");\n                    const loader = new GLTFLoader();\n                    loader.setDRACOLoader(dracoLoader);\n                    let out = await new Promise((reso, rej) => {\n                      loader.parse(\n                        res,\n                        \"\",\n                        (d) => {\n                          reso(d);\n                        },\n                        (e) => {\n                          rej(e);\n                        }\n                      );\n                    });\n                    let parts = [];\n                    let scene = out.scene;\n                    function convertMesh(mesh) {\n                      let positions = [];\n                      let normals = [];\n                      let tangents = [];\n                      let bitangents = [];\n                      let uvs = [];\n                      let colors = [];\n                      let indices = [];\n                      if (mesh.geometry.index) {\n                        for (let i = 0; i < mesh.geometry.index.count; i++) {\n                          indices.push(mesh.geometry.index?.array[i]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.position) {\n                        for (let i = 0; i < mesh.geometry.attributes.position.array.length; i += 3) {\n                          positions.push([\n                            mesh.geometry.attributes.position.array[i],\n                            mesh.geometry.attributes.position.array[i + 1],\n                            mesh.geometry.attributes.position.array[i + 2]\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.normal) {\n                        for (let i = 0; i < mesh.geometry.attributes.normal.array.length; i += 3) {\n                          normals.push([\n                            mesh.geometry.attributes.normal.array[i],\n                            mesh.geometry.attributes.normal.array[i + 1],\n                            mesh.geometry.attributes.normal.array[i + 2]\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.tangent) {\n                        for (let i = 0; i < mesh.geometry.attributes.tangent.array.length; i += 4) {\n                          tangents.push([\n                            mesh.geometry.attributes.tangent.array[i],\n                            mesh.geometry.attributes.tangent.array[i + 1],\n                            mesh.geometry.attributes.tangent.array[i + 2]\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.bitangent) {\n                        for (let i = 0; i < mesh.geometry.attributes.bitangent.array.length; i += 3) {\n                          bitangents.push([\n                            mesh.geometry.attributes.bitangent.array[i],\n                            mesh.geometry.attributes.bitangent.array[i + 1],\n                            mesh.geometry.attributes.bitangent.array[i + 2]\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.uv) {\n                        for (let i = 0; i < mesh.geometry.attributes.uv.array.length; i += 2) {\n                          uvs.push([\n                            mesh.geometry.attributes.uv.array[i],\n                            mesh.geometry.attributes.uv.array[i + 1]\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.color) {\n                        for (let i = 0; i < mesh.geometry.attributes.color.array.length; i += 4) {\n                          colors.push([\n                            mesh.geometry.attributes.color.array[i],\n                            mesh.geometry.attributes.color.array[i + 1],\n                            mesh.geometry.attributes.color.array[i + 2],\n                            mesh.geometry.attributes.color.array[i + 3]\n                          ]);\n                        }\n                      }\n                      let m = new window.SHD_Mesh({});\n                      m.vertices = positions;\n                      m.normals = normals;\n                      m.uvs = uvs;\n                      m.colors = colors;\n                      m.triangles = indices;\n                      return m;\n                    }\n                    let that = this;\n                    function convertTexMap(map) {\n                      let t = that.engine.shadeupMakeTextureFromImageLike(map.source.data);\n                      return t;\n                    }\n                    scene.traverse((obj) => {\n                      if (obj instanceof THREEMesh && obj.isMesh) {\n                        let mobj = obj;\n                        let m = convertMesh(mobj);\n                        let mat = mobj.material;\n                        let part = new window.SHD_ModelPart({});\n                        if (!Array.isArray(mat)) {\n                          let shdMat = new window.SHD_Material({});\n                          if (mat instanceof MeshStandardMaterial) {\n                            shdMat.baseColor = [mat.color.r, mat.color.g, mat.color.b, 1];\n                            if (mat.normalMap) {\n                              shdMat.normal = convertTexMap(mat.normalMap);\n                              shdMat.normalScale = [mat.normalScale.x, mat.normalScale.y];\n                            }\n                            if (mat.map) {\n                              shdMat.color = convertTexMap(mat.map);\n                            }\n                            if (mat.metalnessMap) {\n                              shdMat.metallic = convertTexMap(mat.metalnessMap);\n                            }\n                            if (mat.roughnessMap) {\n                              shdMat.roughness = convertTexMap(mat.roughnessMap);\n                            }\n                            if (mat.emissiveMap) {\n                              shdMat.emissive = convertTexMap(mat.emissiveMap);\n                            }\n                            part.material = shdMat;\n                          }\n                        }\n                        part.mesh = m;\n                        let world = obj.getWorldPosition(new Vector3());\n                        part.position = [world.x, world.y, world.z];\n                        parts.push(part);\n                      }\n                    });\n                    let model = new window.SHD_Model({});\n                    model.parts = parts;\n                    this.loadedAssets.set(key, model);\n                    resolve();\n                  },\n                  true\n                );\n              });\n            }\n          }\n        })()\n      );\n    }\n    await Promise.all(promises);\n    console.log(\"Loaded assets\", [...this.loadedAssets.keys()]);\n  }\n}\n\n(function() {\n  var timeouts = [];\n  var messageName = \"zero-timeout-message\";\n  function setZeroTimeout(fn) {\n    timeouts.push(fn);\n    window.postMessage(messageName, \"*\");\n  }\n  function handleMessage(event) {\n    if (event.source == window && event.data == messageName) {\n      event.stopPropagation();\n      if (timeouts.length > 0) {\n        var fn = timeouts.shift();\n        fn();\n      }\n    }\n  }\n  window.addEventListener(\"message\", handleMessage, true);\n  window.setZeroTimeout = setZeroTimeout;\n})();\n\nclass ShadeupEngine {\n  adapter;\n  playing = true;\n  timeMultiplier = 1;\n  canvas;\n  paint;\n  shadeup_globals = {};\n  textureDestroyQueue = [];\n  errCount = 0;\n  isFirstFrame = true;\n  hasLoadedCode = false;\n  assetLoader;\n  inputValues = /* @__PURE__ */ new Map();\n  frameFunc = async () => {\n  };\n  env = {\n    camera: window?.env?.camera ?? (window._makeCamera ? new window._makeCamera({}) : null),\n    camera2d: window?.env?.camera2d ?? (window._makeCamera2d ? new window._makeCamera2d({}) : null),\n    deltaTime: 0,\n    time: 0,\n    frame: 0,\n    screenSize: [0, 0],\n    keyboard: { ...blankKeyboardState },\n    mouse: {\n      button: [false, false, false],\n      clicked: [false, false, false],\n      screen: [0, 0],\n      uv: [0, 0],\n      startScreen: [0, 0],\n      startUv: [0, 0],\n      deltaUv: [0, 0],\n      frameDeltaUv: [0, 0],\n      deltaScreen: [0, 0],\n      frameDeltaScreen: [0, 0],\n      dragging: false,\n      velocity: 0,\n      wheel: 0,\n      focused: false\n    },\n    configureCamera(options) {\n    },\n    input(key, defaultValue) {\n      return defaultValue;\n    },\n    output(key, value) {\n    }\n  };\n  stats = /* @__PURE__ */ new Map();\n  statsGraph = /* @__PURE__ */ new Map();\n  statsMark = /* @__PURE__ */ new Map();\n  statsGraphMark = /* @__PURE__ */ new Map();\n  hooks = [];\n  preferredAdapter = \"webgpu\";\n  onFirstFrame;\n  constructor(canvas, adapter) {\n    this.canvas = canvas;\n    this.adapter = adapter;\n    this.paint = new PaintingContext(canvas, adapter);\n    this.assetLoader = new ShadeupAssetLoader(this);\n    window[\"paint\"] = this.paint;\n    this.env.input = (key, defaultValue) => {\n      return this.inputValues.get(key) ?? defaultValue;\n    };\n    this.env.output = function output(key, value) {\n      window.parent.postMessage({ type: \"output\", key, value }, \"*\");\n    };\n    this.addCoreHook();\n  }\n  _SHADEUP_UI_PUCK = () => {\n  };\n  _SHADEUP_UI_SLIDER = () => {\n  };\n  _SHADEUP_UI_CONTROL = () => {\n  };\n  shadeupMakeTextureInternal(size, format, innerType = \"float4\") {\n    if (size.length == 3) {\n      size = [Math.floor(size[0]), Math.floor(size[1]), Math.floor(size[2])];\n      let tex2 = new ShadeupTexture3d();\n      tex2.innerType = innerType;\n      tex2.size = size;\n      tex2.width = size[0];\n      tex2.height = size[1];\n      tex2.depth = size[2];\n      if (this.preferredAdapter == \"webgl\") {\n        tex2.adapter = new WebGLAdapter(null);\n      } else if (this.preferredAdapter == \"webgpu\") {\n        tex2.adapter = new WebGPUAdapter(null);\n        let webgpu = tex2.adapter;\n        webgpu.textureFormat = tex2.innerType;\n        webgpu.headless = true;\n        webgpu.headlessHeight = tex2.height;\n        webgpu.headlessWidth = tex2.width;\n        webgpu.headlessDepth = tex2.depth;\n        webgpu.headlessDimensions = 3;\n      } else {\n        throw new Error(\"No adapter found\");\n      }\n      tex2.adapter.init();\n      tex2.adapter.setViewport(0, 0);\n      return tex2;\n    }\n    size = [Math.floor(size[0]), Math.floor(size[1])];\n    let tex = new ShadeupTexture2d();\n    tex.innerType = innerType;\n    tex.size = size;\n    tex.width = size[0];\n    tex.height = size[1];\n    tex.image = document.createElement(\"canvas\");\n    tex.image.width = tex.width;\n    tex.image.height = tex.height;\n    if (this.preferredAdapter == \"webgl\") {\n      tex.adapter = new WebGLAdapter(tex.image);\n    } else if (this.preferredAdapter == \"webgpu\") {\n      let gpuTextureFormat = \"rgba8unorm\";\n      if (format == \"auto\") {\n        format = innerType == \"uint8\" ? \"8bit\" : \"32bit\";\n      }\n      gpuTextureFormat = FormatInnerTypeMapping[`${format}-${innerType}`];\n      tex.adapter = new WebGPUAdapter(tex.image);\n      let webgpu = tex.adapter;\n      webgpu.textureFormat = tex.innerType;\n      webgpu.gpuTextureFormat = gpuTextureFormat;\n      webgpu.headless = true;\n      webgpu.headlessHeight = tex.height;\n      webgpu.headlessWidth = tex.width;\n    } else {\n      throw new Error(\"No adapter found\");\n    }\n    tex.init();\n    tex.adapter.init();\n    tex.adapter.setViewport(tex.width, tex.height);\n    tex.paint = new PaintingContext(tex.image, tex.adapter);\n    tex.paint.markDirtyCallback = () => {\n      tex.cpuFlush();\n      tex.dirty = true;\n      tex.cpuReadDirty = true;\n      tex.version++;\n    };\n    tex.adapter.clear(true);\n    return tex;\n  }\n  shadeupMakeTextureFromImageLike(img) {\n    let tex = this.shadeupMakeTextureInternal([img.width, img.height], \"8bit\", \"uint8\");\n    let canvas = document.createElement(\"canvas\");\n    canvas.width = img.width;\n    canvas.height = img.height;\n    let ctx = canvas.getContext(\"2d\");\n    ctx?.drawImage(img, 0, 0);\n    tex.adapter?.drawImage(canvas, 0, 0, img.width, img.height);\n    tex.adapter?.flush();\n    return tex;\n  }\n  reset() {\n    for (let hook of this.hooks) {\n      if (hook.reset) {\n        try {\n          hook.reset();\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    }\n  }\n  loadTextureFromImageLike(img) {\n    let tex = this.shadeupMakeTextureFromImageLike(img);\n    return tex;\n  }\n  async loadTexture2dFromURL(url) {\n    let orig = this.assetLoader.registeredLoads;\n    this.assetLoader.registeredLoads = [[url, \"image\"]];\n    await this.assetLoader.loadAssets();\n    this.assetLoader.registeredLoads = orig;\n    return this.assetLoader.primedTextureAssets.get(url);\n  }\n  async loadModelFromURL(urlGltf) {\n    let orig = this.assetLoader.registeredLoads;\n    this.assetLoader.registeredLoads.push([urlGltf, \"model\"]);\n    await this.assetLoader.loadAssets();\n    this.assetLoader.registeredLoads = orig;\n    return this.assetLoader.loadedAssets.get(urlGltf);\n  }\n  addCoreHook() {\n    let lastFrame = performance.now();\n    let timeCounter = 0;\n    let frameCount = 0;\n    this.hooks.push({\n      beforeFrame: () => {\n        if (!this.playing)\n          return;\n        if (this.canvas.width != this.adapter.viewportSize[0] || this.canvas.height != this.adapter.viewportSize[1]) {\n          this.adapter.setViewport(this.canvas.width, this.canvas.height);\n        }\n        if (this.canvas.width != this.paint.__offscreen_canvas.width || this.canvas.height != this.paint.__offscreen_canvas.height) {\n          this.paint.__offscreen_canvas.width = this.canvas.width;\n          this.paint.__offscreen_canvas.height = this.canvas.height;\n        }\n        let delta = performance.now() - lastFrame;\n        lastFrame = performance.now();\n        timeCounter += delta / 1e3 * this.timeMultiplier;\n        frameCount += 1 * this.timeMultiplier;\n        this.env.deltaTime = delta / 1e3 * this.timeMultiplier;\n        this.env.time = timeCounter;\n        this.env.frame = frameCount;\n        this.env.screenSize = [this.canvas.width, this.canvas.height];\n      },\n      reset: () => {\n        lastFrame = performance.now();\n        timeCounter = 0;\n        frameCount = 0;\n      }\n    });\n  }\n  __shadeup_print(...args) {\n  }\n  __shadeup_stat(name, value) {\n  }\n  __shadeup_statGraph(name, value, sampleRate = 1) {\n  }\n  clear() {\n    try {\n      this.adapter.clear();\n    } catch (e) {\n      console.error(e);\n    }\n  }\n  async loadLib(name) {\n    this.assetLoader.loadLib(name);\n  }\n  async loadLibs() {\n    this.assetLoader.loadLibs();\n  }\n  async loadAssets() {\n    this.assetLoader.loadAssets();\n  }\n  __shadeup_register_loads = (ids) => {\n    this.assetLoader.registeredLoads.push(...ids);\n  };\n  __shadeup_register_libs(libs) {\n    for (let lib of libs) {\n      this.assetLoader.registeredLibs.add(lib);\n    }\n  }\n  load(id) {\n    let asset = this.assetLoader.loadedAssets.get(id);\n    if (!asset) {\n      throw new Error(\"Asset not found\");\n    }\n    if (asset instanceof HTMLCanvasElement) {\n      if (this.assetLoader.primedTextureAssets.has(id)) {\n        let a = this.assetLoader.primedTextureAssets.get(id);\n        this.assetLoader.primedTextureAssets.delete(id);\n        return a;\n      }\n      let tex = window.shadeupMakeTextureInternal(\n        [asset.width, asset.height],\n        \"8bit\",\n        \"uint8\"\n      );\n      tex.adapter?.drawImage(asset, 0, 0, asset.width, asset.height);\n      tex.adapter?.flush();\n      return tex;\n    } else if (asset && asset.clone) {\n      return asset.clone();\n    }\n    return asset;\n  }\n  async frameLoop() {\n    for (let hook of this.hooks) {\n      if (hook.beforeFrame) {\n        try {\n          hook.beforeFrame(this.env.deltaTime);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    }\n    if (this.playing) {\n      try {\n        if (this.adapter instanceof WebGPUAdapter) {\n        } else {\n          this.clear();\n        }\n        await this.frameFunc();\n        paint.flush();\n        this.adapter.flush();\n        if (this.adapter instanceof WebGPUAdapter) {\n          this.adapter.trace(\"endFrame\\n\\n\", {});\n        }\n        this.adapter.switchContext(\"draw\");\n        for (let tex of this.textureDestroyQueue) {\n          if (tex.adapter) {\n            tex.adapter.dispose();\n          }\n        }\n        this.textureDestroyQueue = [];\n      } catch (e) {\n        if (this.errCount < 10) {\n          console.error(e);\n          if (window.bubbleError)\n            window.bubbleError(e.toString() + e.stack);\n          this.errCount++;\n          if (this.errCount === 10) {\n            console.warn(\"Too many errors, slowing logs\");\n          }\n        } else {\n          this.errCount++;\n          if (this.errCount % 100 === 0) {\n            if (window.bubbleError)\n              window.bubbleError(e.toString() + e.stack);\n            console.error(e);\n          }\n        }\n      }\n      for (let hook of this.hooks) {\n        if (hook.afterFrame) {\n          try {\n            hook.afterFrame(this.env.deltaTime);\n          } catch (e) {\n            console.error(e);\n          }\n        }\n      }\n      for (let statKey of this.stats.keys()) {\n        if ((this.statsMark.get(statKey) ?? 0) <= 0) {\n          this.stats.get(statKey)?.remove();\n          this.stats.delete(statKey);\n          this.statsMark.delete(statKey);\n        } else {\n          this.statsMark.set(statKey, this.statsMark.get(statKey) - 1);\n        }\n      }\n      for (let statKey of this.statsGraph.keys()) {\n        if ((this.statsGraphMark.get(statKey) ?? 0) <= 0) {\n          this.statsGraph.get(statKey)?.graph.parentElement?.remove();\n          this.statsGraph.delete(statKey);\n          this.statsGraphMark.delete(statKey);\n        } else {\n          this.statsGraphMark.set(statKey, this.statsGraphMark.get(statKey) - 1);\n        }\n      }\n      if (this.isFirstFrame && this.hasLoadedCode) {\n        this.isFirstFrame = false;\n        (async () => {\n          await this.adapter.waitForDraw();\n          window.parent.postMessage({ type: \"firstFrame\" }, \"*\");\n          this.onFirstFrame?.();\n        })();\n      }\n    }\n  }\n  flushAdapter() {\n    this.adapter.flush();\n  }\n  __shadeup_gen_native_shader(code, type) {\n    return this.adapter.createShader(code, type);\n  }\n  fullscreenVertexShader = null;\n  registeredShaders = /* @__PURE__ */ new Map();\n  shadeupGetGraphicsAdapter() {\n    return this.adapter;\n  }\n  __shadeup_gen_shader(key, params, code, indexMapping) {\n    this.registeredShaders.set(key, new ShadeupShaderSource(params, code, indexMapping));\n  }\n  __shadeup_make_shader_inst(key, params, closure) {\n    let shader = this.registeredShaders.get(key);\n    if (!shader) {\n      throw new Error(\"Shader not found\");\n    }\n    return shader.instance(params);\n  }\n  __shadeup_dispatch_compute(workgroups, shaderInst) {\n    let computeCall = new ShaderDispatch(\"compute\");\n    computeCall.computeCount = workgroups;\n    let compShader = shaderInst.get(this.adapter, \"compute\", {\n      initialDispatch: shaderInst\n    });\n    if (!compShader) {\n      throw new Error(\"Fragment shader not found\");\n    }\n    computeCall.setComputeShader(compShader);\n    shaderInst.bindUniforms(computeCall.fragmentUniforms);\n    if (this.adapter instanceof WebGPUAdapter) {\n      this.adapter.dispatchCompute(computeCall);\n    } else {\n      throw new Error(\"WebGL compute not supported\");\n    }\n  }\n  __shadeup_dispatch_compute_indirect(indirectBuffer, indirectOffset, shaderInst) {\n    let computeCall = new ShaderDispatch(\"compute\");\n    computeCall.indirectBuffer = indirectBuffer;\n    computeCall.indirectOffset = indirectOffset;\n    let compShader = shaderInst.get(this.adapter, \"compute\", {\n      initialDispatch: shaderInst\n    });\n    if (!compShader) {\n      throw new Error(\"Fragment shader not found\");\n    }\n    computeCall.setComputeShader(compShader);\n    shaderInst.bindUniforms(computeCall.fragmentUniforms);\n    if (this.adapter instanceof WebGPUAdapter) {\n      this.adapter.dispatchCompute(computeCall);\n    } else {\n      throw new Error(\"WebGL compute not supported\");\n    }\n  }\n  __shadeup_dispatch_draw_advanced(config) {\n    let drawCall = new ShaderDispatch(\"draw\");\n    if (config.mesh) {\n      drawCall.drawType = \"geometry\";\n    } else if (config.indexBuffer) {\n      drawCall.drawType = \"indexed\";\n    }\n    if (config.depth) {\n      drawCall.overrideDepth = config.depth;\n    }\n    if (config.depthCompare) {\n      drawCall.depthCompare = config.depthCompare;\n    }\n    if (\"backfaceCulling\" in config) {\n      drawCall.backfaceCulling = config.backfaceCulling;\n    }\n    if (config.indirect) {\n      drawCall.indirectBuffer = config.indirect;\n    }\n    drawCall.instanceCount = config.instances ?? 1;\n    drawCall.attachments = config.attachments ?? null;\n    drawCall.depthOnly = config.depthOnly ?? false;\n    let fragShader = config.fragment.get(this.adapter, \"fragment\", {\n      attachments: config.attachments ? config.attachments.map((a) => a.innerType) : void 0\n    });\n    if (!fragShader) {\n      throw new Error(\"Fragment shader not found\");\n    }\n    drawCall.setFragmentShader(fragShader);\n    let vertShader = config.vertex.get(this.adapter, \"vertex\");\n    if (!vertShader) {\n      throw new Error(\"Vertex shader not found\");\n    }\n    drawCall.setVertexShader(vertShader);\n    config.fragment.bindUniforms(drawCall.fragmentUniforms);\n    config.vertex.bindUniforms(drawCall.vertexUniforms);\n    if (config.mesh) {\n      drawCall.setGeometry(config.mesh);\n    } else if (config.indexBuffer) {\n      drawCall.setIndexBuffer(config.indexBuffer);\n    }\n    this.adapter.dispatch(drawCall, {\n      depthTest: config.depthTest ?? true\n    });\n  }\n  __shadeup_dispatch_draw(pixelShaderInst) {\n    if (!this.fullscreenVertexShader) {\n      this.fullscreenVertexShader = this.__shadeup_gen_native_shader(\n        {\n          webgl: `#version 300 es\n\t\t\n\t\tprecision highp float;\n\t\t\n\t\tin vec3 a_position;\n\t\tin vec3 a_normal;\n\t\tin vec3 a_tangent;\n\t\tin vec3 a_bitangent;\n\t\tin vec2 a_uv;\n\t\tin vec4 a_color;\n\n\t\tout vec3 _v_position;\n\t\tout vec3 _v_normal;\n\t\tout vec3 _v_tangent;\n\t\tout vec3 _v_bitangent;\n\t\tout vec2 _v_uv;\n\t\tout vec4 _v_color;\n\t\t\n\t\tvoid main(void) {\n\t\tfloat x = float((gl_VertexID & 1) << 2);\n\t\tfloat y = float((gl_VertexID & 2) << 1);\n\t\t_v_uv.x = x * 0.5;\n\t\t_v_uv.y = 1.f - (y * 0.5);\n\t\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\t\t}`,\n          webgpu: `\n\t\t\tstruct VertexOutput {\n\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t@location(1) Tangent : vec3<f32>,\n\t\t\t\t@location(2) Bitangent : vec3<f32>,\n\t\t\t\t@location(3) TexCoord : vec2<f32>,\n\t\t\t\t@location(4) Color : vec4<f32>,\n\t\t\t\t@location(5) @interpolate(flat) instanceIndex : u32,\n\t\t\t\t@location(6) WorldPosition : vec3<f32>,\n\t\t\t};\n\t\t\n\t\t\t@vertex\n\t\t\tfn main(\n\t\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t\t) -> VertexOutput {\n\t\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\t\tvar output : VertexOutput;\n\t\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\t\toutput.Tangent = vec3<f32>(0.0, 1.0, 0.0);\n\t\t\t\toutput.Bitangent = vec3<f32>(0.0, 0.0, 1.0);\n\t\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t\t\toutput.instanceIndex = 0;\n\t\t\n\t\t\t\treturn output;\n\t\t\t}\n\t\t\t`,\n          software: () => {\n          }\n        },\n        \"vertex\"\n      );\n    }\n    if (!this.fullscreenVertexShader) {\n      throw new Error(\"Fullscreen vertex shader not found\");\n    }\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"screen\";\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.canvas.width, this.canvas.height]\n      )\n    );\n    drawCall.setVertexShader(this.fullscreenVertexShader);\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\", {\n      initialDispatch: pixelShaderInst\n    });\n    if (!fragShader) {\n      throw new Error(\"Fragment shader not found\");\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    drawCall.setGeometry(fullscreenGeo);\n    this.adapter.dispatch(drawCall, {\n      depthTest: false\n    });\n  }\n  PLATFORM_WEBGL = this.preferredAdapter == \"webgl\";\n  PLATFORM_WEBGPU = this.preferredAdapter == \"webgpu\";\n  __shadeup_dispatch_draw_geometry(geometry, vertexShaderInst, pixelShaderInst) {\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"geometry\";\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.canvas.width, this.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setGeometry(geometry);\n    this.adapter.dispatch(drawCall);\n  }\n  __shadeup_dispatch_draw_indexed(indexBuffer, vertexShaderInst, pixelShaderInst) {\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"indexed\";\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.canvas.width, this.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setIndexBuffer(indexBuffer);\n    this.adapter.dispatch(drawCall);\n  }\n  __shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShaderInst, pixelShaderInst) {\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"indexed\";\n    drawCall.instanceCount = instanceCount;\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.canvas.width, this.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setIndexBuffer(indexBuffer);\n    this.adapter.dispatch(drawCall);\n  }\n  __shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShaderInst, pixelShaderInst) {\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"geometry\";\n    drawCall.instanceCount = instanceCount;\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.canvas.width, this.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    drawCall.setGeometry(mesh);\n    this.adapter.dispatch(drawCall);\n  }\n  __shadeup_dispatch_draw_count(count, vertexShaderInst, pixelShaderInst) {\n    let drawCall = new ShaderDispatch(\"draw\");\n    drawCall.drawType = \"count\";\n    drawCall.drawCount = count;\n    drawCall.setVertexUniform(\n      \"_vtex_canvas\",\n      makePrimitiveUniform(\n        {\n          type: \"primitive\",\n          name: \"float2\"\n        },\n        [this.canvas.width, this.canvas.height]\n      )\n    );\n    let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n    if (!fragShader) {\n      return;\n    }\n    drawCall.setFragmentShader(fragShader);\n    pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n    let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n    if (!vertShader) {\n      return;\n    }\n    drawCall.setVertexShader(vertShader);\n    vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n    this.adapter.dispatch(drawCall);\n  }\n  __shadeup_structs;\n  __shadeup_get_struct(name) {\n    if (!this.__shadeup_structs)\n      this.__shadeup_structs = {};\n    return this.__shadeup_structs[name];\n  }\n  __shadeup_register_struct(fields, cls) {\n    if (!this.__shadeup_structs)\n      this.__shadeup_structs = {};\n    this.__shadeup_structs[fields.name] = { fields, struct: cls };\n  }\n  __shadeup_error(err, context) {\n    return err || context;\n  }\n  killed = false;\n  useAnimationFrame = true;\n  start() {\n    (async () => {\n      do {\n        await this.frameLoop();\n        if (this.adapter instanceof WebGPUAdapter) ;\n        if (this.useAnimationFrame) {\n          await new Promise(requestAnimationFrame);\n        } else {\n          await new Promise(setZeroTimeout);\n        }\n      } while (true);\n    })();\n  }\n}\n\nconst addInputHook = (engine) => {\n  let keyboardSink = /* @__PURE__ */ new Map();\n  let lastFrameMousePosition = [0, 0];\n  let mouseState = {\n    button: [false, false, false],\n    clicked: [false, false, false],\n    screen: [0, 0],\n    uv: [0, 0],\n    startScreen: [0, 0],\n    startUv: [0, 0],\n    deltaUv: [0, 0],\n    frameDeltaUv: [0, 0],\n    deltaScreen: [0, 0],\n    frameDeltaScreen: [0, 0],\n    dragging: false,\n    velocity: 0,\n    wheel: 0,\n    focused: false\n  };\n  let { getKeyboardState } = initInput(engine.canvas, mouseState, keyboardSink);\n  return {\n    beforeFrame(delta) {\n      if (!engine.playing)\n        return;\n      let lastFramePos = lastFrameMousePosition;\n      mouseState.frameDeltaScreen = [\n        mouseState.screen[0] - lastFramePos[0],\n        mouseState.screen[1] - lastFramePos[1]\n      ];\n      let lastFramePosUv = [\n        lastFramePos[0] / engine.canvas.width,\n        lastFramePos[1] / engine.canvas.height\n      ];\n      mouseState.frameDeltaUv = [\n        mouseState.uv[0] - lastFramePosUv[0],\n        mouseState.uv[1] - lastFramePosUv[1]\n      ];\n      mouseState.velocity = Math.sqrt(\n        mouseState.frameDeltaScreen[0] ** 2 + mouseState.frameDeltaScreen[1] ** 2\n      );\n      lastFrameMousePosition = [...mouseState.screen];\n      engine.env.keyboard = getKeyboardState();\n      engine.env.mouse = {\n        ...mouseState\n      };\n    },\n    afterFrame() {\n      mouseState.clicked[0] = false;\n      mouseState.clicked[1] = false;\n      mouseState.clicked[2] = false;\n    }\n  };\n};\n\nfunction isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nfunction makeAMDResolver() {\n  function globalDefine(name, deps, callback) {\n    if (typeof name !== \"string\") {\n      callback = deps;\n      deps = name;\n      name = null;\n    }\n    if (!Array.isArray(deps)) {\n      callback = deps;\n      deps = [];\n    }\n    if (!deps.length && callback.length) {\n      if (callback.length === 1) {\n        deps = [\"require\"];\n      } else if (callback.length === 2) {\n        deps = [\"require\", \"exports\"];\n      } else {\n        deps = [\"require\", \"exports\", \"module\"];\n      }\n    }\n    globalDefine.amd[name] = {\n      deps,\n      callback\n    };\n  }\n  globalDefine.amd = {\n    require: {\n      deps: [],\n      callback: function() {\n        return globalRequire;\n      }\n    },\n    exports: {\n      deps: [],\n      callback: function() {\n        return {};\n      }\n    }\n  };\n  function globalRequire(deps) {\n    let result = [];\n    for (let i = 0; i < deps.length; i++) {\n      let dep = deps[i];\n      if (dep !== \"require\" && dep !== \"exports\" && dep !== \"module\") {\n        dep = resolvePathname(dep, \"/\");\n        if (!(dep in globalDefine.amd)) {\n          if (!dep.endsWith(\".js\")) {\n            dep += \".js\";\n          }\n        }\n      }\n      if (dep in globalDefine.amd) {\n        let deps2 = globalDefine.amd[dep].deps;\n        let depsResults = [];\n        for (let d of deps2) {\n          depsResults.push(globalRequire([d])[0]);\n        }\n        let callback = globalDefine.amd[dep].callback;\n        let exports = callback.apply(null, depsResults);\n        if (deps2.indexOf(\"exports\") !== -1) {\n          exports = depsResults[deps2.indexOf(\"exports\")];\n        }\n        result.push(exports);\n      } else {\n        throw new Error(`Cannot find module '${dep}'`);\n      }\n    }\n    return result;\n  }\n  return { globalDefine, globalRequire };\n}\n\nconst makeShadeupEngine = async (canvas, options) => {\n  options = options || {};\n  const preferredAdapter = options.preferredAdapter || \"webgpu\";\n  let graphicsAdapter;\n  if (preferredAdapter == \"webgl\") {\n    graphicsAdapter = new WebGLAdapter(canvas);\n  } else if (preferredAdapter == \"webgpu\") {\n    graphicsAdapter = new WebGPUAdapter(canvas);\n  } else {\n    throw new Error(\"No adapter found\");\n  }\n  if (preferredAdapter == \"webgpu\" && !window.shadeupWebGPUAdapter) {\n    if (navigator.gpu) {\n      window.shadeupWebGPUAdapter = await navigator.gpu.requestAdapter({\n        powerPreference: \"high-performance\"\n      });\n      if (!window.shadeupWebGPUAdapter) {\n        throw new Error(\"WebGPU not supported\");\n      }\n      let supported = await window.shadeupWebGPUAdapter.limits;\n      let requiredLimits = {\n        maxStorageBufferBindingSize: Math.min(\n          1024 * 1024 * 1024,\n          supported.maxStorageBufferBindingSize\n        ),\n        // 1GB\n        maxBufferSize: Math.min(1024 * 1024 * 1024, supported.maxBufferSize),\n        // 1GB\n        maxColorAttachmentBytesPerSample: Math.min(64, supported.maxColorAttachmentBytesPerSample),\n        // 64 bytes\n        maxComputeWorkgroupSizeX: Math.min(1024, supported.maxComputeWorkgroupSizeX),\n        maxComputeWorkgroupSizeY: Math.min(1024, supported.maxComputeWorkgroupSizeY),\n        maxComputeWorkgroupSizeZ: Math.min(64, supported.maxComputeWorkgroupSizeZ),\n        maxComputeInvocationsPerWorkgroup: Math.min(\n          1024,\n          supported.maxComputeInvocationsPerWorkgroup\n        ),\n        ...options.limits || {}\n      };\n      console.log(\"WebGPU limits\", requiredLimits);\n      window.shadeupWebGPUDevice = await window.shadeupWebGPUAdapter.requestDevice({\n        // requiredLimits: (window as any).shadeupWebGPUAdapter.limits\n        requiredLimits\n      });\n      window.shadeupWebGPUDevice.addEventListener(\"uncapturederror\", (e) => {\n        console.error(\"Uncaught WebGPU\", e);\n        window.bubbleError(e.error.message);\n      });\n    }\n  }\n  graphicsAdapter.init();\n  const engine = new ShadeupEngine(canvas, graphicsAdapter);\n  graphicsAdapter.engine = engine;\n  engine.start();\n  const inputHook = addInputHook(engine);\n  engine.hooks.push(inputHook);\n  const { screenshotQueue, screenshotQueueResults, ...captureHook } = addCaptureHook(engine);\n  engine.hooks.push(captureHook);\n  const cameraHook = addCameraHook(engine);\n  engine.hooks.push(cameraHook);\n  engine.enableUI = async () => {\n    const { addUIHook } = await import('./ui-f4b4a003.js');\n    const cssLink = await import('./host-fa5c0296.js');\n    let style = document.createElement(\"style\");\n    style.innerHTML = cssLink.default;\n    document.head.appendChild(style);\n    const uiHook = addUIHook(engine);\n    engine.hooks.push(uiHook);\n    let parent = canvas.parentElement;\n    let uiContainer = document.createElement(\"div\");\n    uiContainer.style.position = \"absolute\";\n    uiContainer.classList.add(\"render-container\");\n    uiContainer.style.top = \"0\";\n    uiContainer.style.right = \"0\";\n    parent.appendChild(uiContainer);\n    let stater = document.createElement(\"div\");\n    stater.classList.add(\"stater\");\n    stater.style.position = \"absolute\";\n    stater.style.pointerEvents = \"none\";\n    stater.style.top = \"0\";\n    stater.style.right = \"0\";\n    stater.style.width = \"100%\";\n    stater.style.display = \"flex\";\n    stater.style.flexDirection = \"column\";\n    stater.style.alignItems = \"flex-end\";\n    stater.style.paddingRight = \"10px\";\n    stater.style.paddingTop = \"10px\";\n    stater.style.fontFamily = \"monospace\";\n    stater.style.color = \"white\";\n    stater.style.zIndex = \"1001\";\n    if (uiContainer) {\n      uiContainer.appendChild(stater);\n    }\n    function splitNumberPlaces(num) {\n      let parts = \"\";\n      let decimalCount = 5;\n      if (num > 100) {\n        decimalCount = 2;\n      }\n      let str = num.toFixed(decimalCount);\n      if (num > 100) {\n        str = str.replace(/\\.?0+$/, \"\");\n      }\n      let hitDecimal = !str.includes(\".\");\n      let counter = 0;\n      for (let i = str.length - 1; i >= 0; i--) {\n        if (hitDecimal) {\n          if (counter == 3) {\n            parts = str[i] + \",\" + parts;\n            counter = 0;\n          } else {\n            parts = str[i] + parts;\n          }\n          counter++;\n        } else {\n          parts = str[i] + parts;\n        }\n        if (str[i] == \".\") {\n          hitDecimal = true;\n        }\n      }\n      return parts;\n    }\n    function serializeValueToHtml(value) {\n      let placesColoring = [\"#9abcff\", \"#aadfaa\", \"#f0ff76\", \"#aeaeae\"];\n      let displayValue = value.toString();\n      if (typeof value == \"number\") {\n        displayValue = `<span style=\"color: ${placesColoring[0]}\">${splitNumberPlaces(\n          value\n        )}</span>`;\n      } else if (typeof value == \"object\") {\n        if (Array.isArray(value)) {\n          if (value.length == 0) {\n            displayValue = `<span style=\"color: #a1a1a1\">[]</span>`;\n          } else {\n            let numeric = true;\n            for (let v of value) {\n              if (typeof v != \"number\") {\n                numeric = false;\n              }\n            }\n            if (numeric) {\n              displayValue = value.map((v, i) => {\n                let index = i % 4;\n                return `<span style=\"color: ${placesColoring[index]}\">${splitNumberPlaces(\n                  v\n                )}</span>`;\n              }).join(\" \");\n            } else {\n              displayValue = `[ ${value.map(serializeValueToHtml).join(\",\")} ]`;\n            }\n          }\n        } else if (typeof value == \"boolean\") {\n          if (value) {\n            displayValue = `<span style=\"color: #66ffab\">true</span>`;\n          } else {\n            displayValue = `<span style=\"color: #ff6666\">false</span>`;\n          }\n        } else if (typeof value == \"string\") {\n          displayValue = `<span style=\"color: #fabb20\">${value}</span>`;\n        } else {\n          displayValue = JSON.stringify(value);\n        }\n      }\n      return displayValue;\n    }\n    const statTimeout = 144;\n    engine.__shadeup_stat = (name, value) => {\n      if (!engine.stats.has(name)) {\n        let el2 = document.createElement(\"div\");\n        el2.style.display = \"inline-flex\";\n        el2.style.alignItems = \"center\";\n        el2.style.backdropFilter = \"blur(1px)\";\n        el2.style.borderRadius = \"20px\";\n        el2.style.padding = \"2px 4px\";\n        el2.style.background = \"rgba(0,0,0,0.5)\";\n        el2.style.fontSize = \"12px\";\n        el2.style.lineHeight = \"12px\";\n        el2.style.flexShrink = \"0\";\n        el2.style.marginBottom = \"2px\";\n        engine.stats.set(name, el2);\n        stater.appendChild(el2);\n      }\n      engine.statsMark.set(name, statTimeout);\n      let el = engine.stats.get(name);\n      if (!el)\n        return;\n      let htm = `<i>${name}</i> <span style=\"margin-left: 8px;\">${serializeValueToHtml(\n        value\n      )}</span>`;\n      if (el.innerHTML != htm) {\n        el.innerHTML = htm;\n      }\n    };\n    function lerp(a, b, t) {\n      return a + (b - a) * t;\n    }\n    engine.__shadeup_statGraph = (name, value, sampleRate = 1) => {\n      if (!engine.statsGraph.has(name)) {\n        let el = document.createElement(\"div\");\n        el.style.display = \"inline-flex\";\n        el.style.alignItems = \"center\";\n        el.style.backdropFilter = \"blur(1px)\";\n        el.style.borderRadius = \"20px\";\n        el.style.padding = \"2px 4px\";\n        let text = document.createElement(\"span\");\n        text.style.marginLeft = \"8px\";\n        text.innerText = name;\n        el.appendChild(text);\n        el.style.background = \"rgba(0,0,0,0.5)\";\n        el.style.fontSize = \"12px\";\n        el.style.lineHeight = \"12px\";\n        el.style.flexShrink = \"0\";\n        el.style.marginBottom = \"2px\";\n        let canvas2 = document.createElement(\"canvas\");\n        canvas2.width = 100;\n        canvas2.height = 20;\n        canvas2.style.marginLeft = \"8px\";\n        canvas2.style.borderRadius = \"4px\";\n        canvas2.style.background = \"rgba(0,0,0,0.3)\";\n        el.appendChild(canvas2);\n        let ctx2 = canvas2.getContext(\"2d\");\n        let num = document.createElement(\"span\");\n        num.style.marginLeft = \"8px\";\n        el.appendChild(num);\n        engine.statsGraph.set(name, {\n          ctx: ctx2,\n          graph: canvas2,\n          num,\n          min: value,\n          max: value,\n          index: 0,\n          counter: 0,\n          history: new Array(canvas2.width).fill(0)\n        });\n        stater.appendChild(el);\n      }\n      let statData = engine.statsGraph.get(name);\n      statData.counter++;\n      let histMax = lerp(statData.max, value, 0.1);\n      let histMin = lerp(statData.min, value, 0.1);\n      for (let subVal of statData.history) {\n        if (subVal < histMin)\n          histMin = subVal;\n        if (subVal > histMax)\n          histMax = subVal;\n      }\n      statData.max = histMax;\n      statData.min = histMin;\n      if (statData.counter % sampleRate == 0) {\n        statData.history[statData.index] = value;\n        statData.index = (statData.index + 1) % statData.history.length;\n      }\n      let width = statData.graph.width;\n      let histwidth = width;\n      let height = statData.graph.height;\n      let ctx = statData.ctx;\n      ctx.fillStyle = \"white\";\n      ctx.clearRect(0, 0, width, height);\n      ctx?.beginPath();\n      for (let j = 0; j < statData.history.length; j++) {\n        let rev = statData.index - j;\n        let i = rev < 0 ? statData.history.length + rev : rev;\n        let x = (1 - j / statData.history.length) * histwidth;\n        let drawHeight = height;\n        let valPercent = Math.min(1, (statData.history[i] - histMin) / (histMax - histMin));\n        let top = height - drawHeight * valPercent;\n        if (isNaN(top)) {\n          top = height;\n        }\n        if (isNaN(x)) {\n          x = 0;\n        }\n        if (j == 0) {\n          ctx?.moveTo(x, top);\n        }\n        ctx.lineTo(x, top);\n      }\n      ctx.lineTo(0, height);\n      ctx.lineTo(width, height);\n      ctx.fill();\n      engine.statsGraphMark.set(name, statTimeout);\n      statData.history[statData.index];\n      let htm = `${serializeValueToHtml(value)}`;\n      if (statData.num.innerHTML != htm) {\n        statData.num.innerHTML = htm;\n      }\n    };\n  };\n  return engine;\n};\nconst linkIntoEngine = async (engine, fn) => {\n  const resolver = makeAMDResolver();\n  fn(resolver.globalDefine);\n  resolver.globalRequire([\"/_std/mesh.js\"])[0];\n  await engine.assetLoader.loadAssets();\n  await engine.assetLoader.loadLibs();\n  try {\n    const meta = resolver.globalRequire([\"/__meta.js\"])[0];\n    let outs = resolver.globalRequire([\"/\" + meta.files[0] + \".js\"])[0];\n    if (typeof outs.main === \"function\") {\n      engine.frameFunc = outs.main;\n      engine.hasLoadedCode = true;\n    }\n    engine.files = {};\n    for (let i = 0; i < meta.files.length; i++) {\n      const file = meta.files[i];\n      engine.files[file] = i == 0 ? outs : resolver.globalRequire([\"/\" + file + \".js\"])[0];\n    }\n  } catch (e) {\n    console.error(e);\n    result = e.message;\n  }\n  engine.frameFunc;\n};\n\nexport { linkIntoEngine, makeShadeupEngine };\n"
  },
  {
    "path": "package/engine-dist/style.css",
    "content": ".scrollbar.svelte-1hee3iu::-webkit-scrollbar{width:6px}.scrollbar.svelte-1hee3iu::-webkit-scrollbar-track{background:#1b1b1b}.scrollbar.svelte-1hee3iu::-webkit-scrollbar-thumb{background:#0c0c0c;border-radius:100px}.scrollbar.svelte-1hee3iu::-webkit-scrollbar-thumb:hover{background:#0c0c0c}/*\n! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box; /* 1 */\n  border-width: 0; /* 2 */\n  border-style: solid; /* 2 */\n  border-color: #e4e4e7; /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n*/\n\nhtml {\n  line-height: 1.5; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n  -moz-tab-size: 4; /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4; /* 3 */\n  font-family: \"Lato\", sans-serif; /* 4 */\n  font-feature-settings: normal; /* 5 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0; /* 1 */\n  line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  font-weight: inherit; /* 1 */\n  line-height: inherit; /* 1 */\n  color: inherit; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button; /* 1 */\n  background-color: transparent; /* 2 */\n  background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1; /* 1 */\n  color: #a1a1aa; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1; /* 1 */\n  color: #a1a1aa; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n  display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #71717a;\n  border-width: 1px;\n  border-radius: 0px;\n  padding-top: 0.5rem;\n  padding-right: 0.75rem;\n  padding-bottom: 0.5rem;\n  padding-left: 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5rem;\n  --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: #2563eb;\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n  border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  color: #71717a;\n  opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n  color: #71717a;\n  opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n  padding: 0;\n}\n\n::-webkit-date-and-time-value {\n  min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\nselect {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n  background-position: right 0.5rem center;\n  background-repeat: no-repeat;\n  background-size: 1.5em 1.5em;\n  padding-right: 2.5rem;\n  -webkit-print-color-adjust: exact;\n          print-color-adjust: exact;\n}\n\n[multiple] {\n  background-image: initial;\n  background-position: initial;\n  background-repeat: unset;\n  background-size: initial;\n  padding-right: 0.75rem;\n  -webkit-print-color-adjust: unset;\n          print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  padding: 0;\n  -webkit-print-color-adjust: exact;\n          print-color-adjust: exact;\n  display: inline-block;\n  vertical-align: middle;\n  background-origin: border-box;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  flex-shrink: 0;\n  height: 1rem;\n  width: 1rem;\n  color: #2563eb;\n  background-color: #fff;\n  border-color: #71717a;\n  border-width: 1px;\n  --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n  border-radius: 0px;\n}\n\n[type='radio'] {\n  border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n  --tw-ring-offset-width: 2px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: #2563eb;\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n  border-color: transparent;\n  background-color: currentColor;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n  border-color: transparent;\n  background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n  border-color: transparent;\n  background-color: currentColor;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n  border-color: transparent;\n  background-color: currentColor;\n}\n\n[type='file'] {\n  background: unset;\n  border-color: inherit;\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  font-size: unset;\n  line-height: inherit;\n}\n\n[type='file']:focus {\n  outline: 1px solid ButtonText;\n  outline: 1px auto -webkit-focus-ring-color;\n}\n  html {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n.container {\n  width: 100%;\n}\n.\\!container {\n  width: 100% !important;\n}\n@media (min-width: 640px) {\n\n  .container {\n    max-width: 640px;\n  }\n\n  .\\!container {\n    max-width: 640px !important;\n  }\n}\n@media (min-width: 768px) {\n\n  .container {\n    max-width: 768px;\n  }\n\n  .\\!container {\n    max-width: 768px !important;\n  }\n}\n@media (min-width: 1024px) {\n\n  .container {\n    max-width: 1024px;\n  }\n\n  .\\!container {\n    max-width: 1024px !important;\n  }\n}\n@media (min-width: 1280px) {\n\n  .container {\n    max-width: 1280px;\n  }\n\n  .\\!container {\n    max-width: 1280px !important;\n  }\n}\n@media (min-width: 1536px) {\n\n  .container {\n    max-width: 1536px;\n  }\n\n  .\\!container {\n    max-width: 1536px !important;\n  }\n}\n.visible {\n  visibility: visible;\n}\n.invisible {\n  visibility: hidden;\n}\n.collapse {\n  visibility: collapse;\n}\n.static {\n  position: static;\n}\n.absolute {\n  position: absolute;\n}\n.relative {\n  position: relative;\n}\n.right-2 {\n  right: 0.5rem;\n}\n.top-10 {\n  top: 2.5rem;\n}\n.right-8 {\n  right: 2rem;\n}\n.top-8 {\n  top: 2rem;\n}\n.z-40 {\n  z-index: 40;\n}\n.mx-1 {\n  margin-left: 0.25rem;\n  margin-right: 0.25rem;\n}\n.ml-2 {\n  margin-left: 0.5rem;\n}\n.mr-4 {\n  margin-right: 1rem;\n}\n.ml-1 {\n  margin-left: 0.25rem;\n}\n.mb-1 {\n  margin-bottom: 0.25rem;\n}\n.block {\n  display: block;\n}\n.flex {\n  display: flex;\n}\n.inline-flex {\n  display: inline-flex;\n}\n.table {\n  display: table;\n}\n.grid {\n  display: grid;\n}\n.contents {\n  display: contents;\n}\n.hidden {\n  display: none;\n}\n.h-1 {\n  height: 0.25rem;\n}\n.h-4 {\n  height: 1rem;\n}\n.h-2 {\n  height: 0.5rem;\n}\n.h-\\[14px\\] {\n  height: 14px;\n}\n.w-full {\n  width: 100%;\n}\n.w-5 {\n  width: 1.25rem;\n}\n.w-0 {\n  width: 0px;\n}\n.w-4 {\n  width: 1rem;\n}\n.w-2 {\n  width: 0.5rem;\n}\n.w-\\[6px\\] {\n  width: 6px;\n}\n.w-\\[200px\\] {\n  width: 200px;\n}\n.min-w-\\[200px\\] {\n  min-width: 200px;\n}\n.max-w-\\[16px\\] {\n  max-width: 16px;\n}\n.flex-1 {\n  flex: 1 1 0%;\n}\n.flex-shrink {\n  flex-shrink: 1;\n}\n.border-collapse {\n  border-collapse: collapse;\n}\n.rotate-180 {\n  --tw-rotate: 180deg;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n  --tw-rotate: 90deg;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-pointer {\n  cursor: pointer;\n}\n.resize {\n  resize: both;\n}\n.flex-row {\n  flex-direction: row;\n}\n.flex-col {\n  flex-direction: column;\n}\n.items-end {\n  align-items: flex-end;\n}\n.items-center {\n  align-items: center;\n}\n.justify-start {\n  justify-content: flex-start;\n}\n.justify-end {\n  justify-content: flex-end;\n}\n.justify-center {\n  justify-content: center;\n}\n.overflow-x-hidden {\n  overflow-x: hidden;\n}\n.rounded-full {\n  border-radius: 9999px;\n}\n.rounded-sm {\n  border-radius: 0.125rem;\n}\n.rounded-md {\n  border-radius: 0.375rem;\n}\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n.rounded-r-md {\n  border-top-right-radius: 0.375rem;\n  border-bottom-right-radius: 0.375rem;\n}\n.rounded-b-md {\n  border-bottom-right-radius: 0.375rem;\n  border-bottom-left-radius: 0.375rem;\n}\n.rounded-t-md {\n  border-top-left-radius: 0.375rem;\n  border-top-right-radius: 0.375rem;\n}\n.border {\n  border-width: 1px;\n}\n.border-none {\n  border-style: none;\n}\n.border-red-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(239 68 68 / var(--tw-border-opacity));\n}\n.border-green-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(34 197 94 / var(--tw-border-opacity));\n}\n.border-blue-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n.border-yellow-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\n}\n.border-purple-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(168 85 247 / var(--tw-border-opacity));\n}\n.border-pink-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(236 72 153 / var(--tw-border-opacity));\n}\n.border-gray-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(113 113 122 / var(--tw-border-opacity));\n}\n.border-white {\n  --tw-border-opacity: 1;\n  border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n.border-black {\n  --tw-border-opacity: 1;\n  border-color: rgb(0 0 0 / var(--tw-border-opacity));\n}\n.border-transparent {\n  border-color: transparent;\n}\n.border-gray-600 {\n  --tw-border-opacity: 1;\n  border-color: rgb(82 82 91 / var(--tw-border-opacity));\n}\n.border-gray-800 {\n  --tw-border-opacity: 1;\n  border-color: rgb(39 39 42 / var(--tw-border-opacity));\n}\n.bg-red-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-green-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(34 197 94 / var(--tw-bg-opacity));\n}\n.bg-blue-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.bg-yellow-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(234 179 8 / var(--tw-bg-opacity));\n}\n.bg-purple-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(168 85 247 / var(--tw-bg-opacity));\n}\n.bg-pink-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(236 72 153 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(113 113 122 / var(--tw-bg-opacity));\n}\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-black {\n  --tw-bg-opacity: 1;\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-transparent {\n  background-color: transparent;\n}\n.bg-gray-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(82 82 91 / var(--tw-bg-opacity));\n}\n.bg-purple-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(147 51 234 / var(--tw-bg-opacity));\n}\n.bg-gray-800 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(39 39 42 / var(--tw-bg-opacity));\n}\n.bg-gray-700 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(63 63 70 / var(--tw-bg-opacity));\n}\n.bg-gray-900 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(24 24 27 / var(--tw-bg-opacity));\n}\n.bg-opacity-10 {\n  --tw-bg-opacity: 0.1;\n}\n.bg-opacity-30 {\n  --tw-bg-opacity: 0.3;\n}\n.bg-opacity-20 {\n  --tw-bg-opacity: 0.2;\n}\n.bg-opacity-5 {\n  --tw-bg-opacity: 0.05;\n}\n.p-0 {\n  padding: 0px;\n}\n.p-0\\.5 {\n  padding: 0.125rem;\n}\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n.pt-0 {\n  padding-top: 0px;\n}\n.pb-1 {\n  padding-bottom: 0.25rem;\n}\n.pb-0 {\n  padding-bottom: 0px;\n}\n.pt-2 {\n  padding-top: 0.5rem;\n}\n.pb-0\\.5 {\n  padding-bottom: 0.125rem;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n.text-red-500 {\n  --tw-text-opacity: 1;\n  color: rgb(239 68 68 / var(--tw-text-opacity));\n}\n.text-green-500 {\n  --tw-text-opacity: 1;\n  color: rgb(34 197 94 / var(--tw-text-opacity));\n}\n.text-blue-500 {\n  --tw-text-opacity: 1;\n  color: rgb(59 130 246 / var(--tw-text-opacity));\n}\n.text-yellow-500 {\n  --tw-text-opacity: 1;\n  color: rgb(234 179 8 / var(--tw-text-opacity));\n}\n.text-purple-500 {\n  --tw-text-opacity: 1;\n  color: rgb(168 85 247 / var(--tw-text-opacity));\n}\n.text-pink-500 {\n  --tw-text-opacity: 1;\n  color: rgb(236 72 153 / var(--tw-text-opacity));\n}\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(113 113 122 / var(--tw-text-opacity));\n}\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-black {\n  --tw-text-opacity: 1;\n  color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-transparent {\n  color: transparent;\n}\n.text-opacity-50 {\n  --tw-text-opacity: 0.5;\n}\n.text-opacity-75 {\n  --tw-text-opacity: 0.75;\n}\n.underline {\n  text-decoration-line: underline;\n}\n.opacity-50 {\n  opacity: 0.5;\n}\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n.outline {\n  outline-style: solid;\n}\n.blur {\n  --tw-blur: blur(8px);\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.invert {\n  --tw-invert: invert(100%);\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-sm {\n  --tw-backdrop-blur: blur(4px);\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-filter {\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.transition {\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.duration-300 {\n  transition-duration: 300ms;\n}\n.floating-panel > .control-button:first-child,\n.floating-panel > .control-combo:first-child,\n.floating-panel > .control-input:first-child,\n.floating-panel > .control-label:first-child,\n.floating-panel > .control-select:first-child,\n.floating-panel > .control-text:first-child {\n  margin-top: 0.5rem;\n}\n.floating-panel > .control-button:last-child,\n.floating-panel > .control-combo:last-child,\n.floating-panel > .control-input:last-child,\n.floating-panel > .control-label:last-child,\n.floating-panel > .control-select:last-child,\n.floating-panel > .control-text:last-child {\n  margin-bottom: 0.25rem;\n}\n\n.control-label + .control-checkbox {\n  margin-top: -1rem;\n}\n\n.hover\\:border-purple-600:hover {\n  --tw-border-opacity: 1;\n  border-color: rgb(147 51 234 / var(--tw-border-opacity));\n}/*\n! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box; /* 1 */\n  border-width: 0; /* 2 */\n  border-style: solid; /* 2 */\n  border-color: #e4e4e7; /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n*/\n\nhtml {\n  line-height: 1.5; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n  -moz-tab-size: 4; /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4; /* 3 */\n  font-family: \"Lato\", sans-serif; /* 4 */\n  font-feature-settings: normal; /* 5 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0; /* 1 */\n  line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  font-weight: inherit; /* 1 */\n  line-height: inherit; /* 1 */\n  color: inherit; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button; /* 1 */\n  background-color: transparent; /* 2 */\n  background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1; /* 1 */\n  color: #a1a1aa; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1; /* 1 */\n  color: #a1a1aa; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n  display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #71717a;\n  border-width: 1px;\n  border-radius: 0px;\n  padding-top: 0.5rem;\n  padding-right: 0.75rem;\n  padding-bottom: 0.5rem;\n  padding-left: 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5rem;\n  --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: #2563eb;\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n  border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  color: #71717a;\n  opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n  color: #71717a;\n  opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n  padding: 0;\n}\n\n::-webkit-date-and-time-value {\n  min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\nselect {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n  background-position: right 0.5rem center;\n  background-repeat: no-repeat;\n  background-size: 1.5em 1.5em;\n  padding-right: 2.5rem;\n  -webkit-print-color-adjust: exact;\n          print-color-adjust: exact;\n}\n\n[multiple] {\n  background-image: initial;\n  background-position: initial;\n  background-repeat: unset;\n  background-size: initial;\n  padding-right: 0.75rem;\n  -webkit-print-color-adjust: unset;\n          print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  padding: 0;\n  -webkit-print-color-adjust: exact;\n          print-color-adjust: exact;\n  display: inline-block;\n  vertical-align: middle;\n  background-origin: border-box;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  flex-shrink: 0;\n  height: 1rem;\n  width: 1rem;\n  color: #2563eb;\n  background-color: #fff;\n  border-color: #71717a;\n  border-width: 1px;\n  --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n  border-radius: 0px;\n}\n\n[type='radio'] {\n  border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n  --tw-ring-offset-width: 2px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: #2563eb;\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n  border-color: transparent;\n  background-color: currentColor;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n  border-color: transparent;\n  background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n  border-color: transparent;\n  background-color: currentColor;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n  border-color: transparent;\n  background-color: currentColor;\n}\n\n[type='file'] {\n  background: unset;\n  border-color: inherit;\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  font-size: unset;\n  line-height: inherit;\n}\n\n[type='file']:focus {\n  outline: 1px solid ButtonText;\n  outline: 1px auto -webkit-focus-ring-color;\n}\n  html {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n.container {\n  width: 100%;\n}\n.\\!container {\n  width: 100% !important;\n}\n@media (min-width: 640px) {\n\n  .container {\n    max-width: 640px;\n  }\n\n  .\\!container {\n    max-width: 640px !important;\n  }\n}\n@media (min-width: 768px) {\n\n  .container {\n    max-width: 768px;\n  }\n\n  .\\!container {\n    max-width: 768px !important;\n  }\n}\n@media (min-width: 1024px) {\n\n  .container {\n    max-width: 1024px;\n  }\n\n  .\\!container {\n    max-width: 1024px !important;\n  }\n}\n@media (min-width: 1280px) {\n\n  .container {\n    max-width: 1280px;\n  }\n\n  .\\!container {\n    max-width: 1280px !important;\n  }\n}\n@media (min-width: 1536px) {\n\n  .container {\n    max-width: 1536px;\n  }\n\n  .\\!container {\n    max-width: 1536px !important;\n  }\n}\n.visible {\n  visibility: visible;\n}\n.invisible {\n  visibility: hidden;\n}\n.collapse {\n  visibility: collapse;\n}\n.static {\n  position: static;\n}\n.absolute {\n  position: absolute;\n}\n.relative {\n  position: relative;\n}\n.right-2 {\n  right: 0.5rem;\n}\n.top-10 {\n  top: 2.5rem;\n}\n.right-8 {\n  right: 2rem;\n}\n.top-8 {\n  top: 2rem;\n}\n.z-40 {\n  z-index: 40;\n}\n.mx-1 {\n  margin-left: 0.25rem;\n  margin-right: 0.25rem;\n}\n.ml-2 {\n  margin-left: 0.5rem;\n}\n.mr-4 {\n  margin-right: 1rem;\n}\n.ml-1 {\n  margin-left: 0.25rem;\n}\n.mb-1 {\n  margin-bottom: 0.25rem;\n}\n.block {\n  display: block;\n}\n.flex {\n  display: flex;\n}\n.inline-flex {\n  display: inline-flex;\n}\n.table {\n  display: table;\n}\n.grid {\n  display: grid;\n}\n.contents {\n  display: contents;\n}\n.hidden {\n  display: none;\n}\n.h-1 {\n  height: 0.25rem;\n}\n.h-4 {\n  height: 1rem;\n}\n.h-2 {\n  height: 0.5rem;\n}\n.h-\\[14px\\] {\n  height: 14px;\n}\n.w-full {\n  width: 100%;\n}\n.w-5 {\n  width: 1.25rem;\n}\n.w-0 {\n  width: 0px;\n}\n.w-4 {\n  width: 1rem;\n}\n.w-2 {\n  width: 0.5rem;\n}\n.w-\\[6px\\] {\n  width: 6px;\n}\n.w-\\[200px\\] {\n  width: 200px;\n}\n.min-w-\\[200px\\] {\n  min-width: 200px;\n}\n.max-w-\\[16px\\] {\n  max-width: 16px;\n}\n.flex-1 {\n  flex: 1 1 0%;\n}\n.flex-shrink {\n  flex-shrink: 1;\n}\n.border-collapse {\n  border-collapse: collapse;\n}\n.rotate-180 {\n  --tw-rotate: 180deg;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n  --tw-rotate: 90deg;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-pointer {\n  cursor: pointer;\n}\n.resize {\n  resize: both;\n}\n.flex-row {\n  flex-direction: row;\n}\n.flex-col {\n  flex-direction: column;\n}\n.items-end {\n  align-items: flex-end;\n}\n.items-center {\n  align-items: center;\n}\n.justify-start {\n  justify-content: flex-start;\n}\n.justify-end {\n  justify-content: flex-end;\n}\n.justify-center {\n  justify-content: center;\n}\n.overflow-x-hidden {\n  overflow-x: hidden;\n}\n.rounded-full {\n  border-radius: 9999px;\n}\n.rounded-sm {\n  border-radius: 0.125rem;\n}\n.rounded-md {\n  border-radius: 0.375rem;\n}\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n.rounded-r-md {\n  border-top-right-radius: 0.375rem;\n  border-bottom-right-radius: 0.375rem;\n}\n.rounded-b-md {\n  border-bottom-right-radius: 0.375rem;\n  border-bottom-left-radius: 0.375rem;\n}\n.rounded-t-md {\n  border-top-left-radius: 0.375rem;\n  border-top-right-radius: 0.375rem;\n}\n.border {\n  border-width: 1px;\n}\n.border-none {\n  border-style: none;\n}\n.border-red-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(239 68 68 / var(--tw-border-opacity));\n}\n.border-green-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(34 197 94 / var(--tw-border-opacity));\n}\n.border-blue-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n.border-yellow-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\n}\n.border-purple-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(168 85 247 / var(--tw-border-opacity));\n}\n.border-pink-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(236 72 153 / var(--tw-border-opacity));\n}\n.border-gray-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(113 113 122 / var(--tw-border-opacity));\n}\n.border-white {\n  --tw-border-opacity: 1;\n  border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n.border-black {\n  --tw-border-opacity: 1;\n  border-color: rgb(0 0 0 / var(--tw-border-opacity));\n}\n.border-transparent {\n  border-color: transparent;\n}\n.border-gray-600 {\n  --tw-border-opacity: 1;\n  border-color: rgb(82 82 91 / var(--tw-border-opacity));\n}\n.border-gray-800 {\n  --tw-border-opacity: 1;\n  border-color: rgb(39 39 42 / var(--tw-border-opacity));\n}\n.bg-red-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-green-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(34 197 94 / var(--tw-bg-opacity));\n}\n.bg-blue-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.bg-yellow-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(234 179 8 / var(--tw-bg-opacity));\n}\n.bg-purple-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(168 85 247 / var(--tw-bg-opacity));\n}\n.bg-pink-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(236 72 153 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(113 113 122 / var(--tw-bg-opacity));\n}\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-black {\n  --tw-bg-opacity: 1;\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-transparent {\n  background-color: transparent;\n}\n.bg-gray-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(82 82 91 / var(--tw-bg-opacity));\n}\n.bg-purple-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(147 51 234 / var(--tw-bg-opacity));\n}\n.bg-gray-800 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(39 39 42 / var(--tw-bg-opacity));\n}\n.bg-gray-700 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(63 63 70 / var(--tw-bg-opacity));\n}\n.bg-gray-900 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(24 24 27 / var(--tw-bg-opacity));\n}\n.bg-opacity-10 {\n  --tw-bg-opacity: 0.1;\n}\n.bg-opacity-30 {\n  --tw-bg-opacity: 0.3;\n}\n.bg-opacity-20 {\n  --tw-bg-opacity: 0.2;\n}\n.bg-opacity-5 {\n  --tw-bg-opacity: 0.05;\n}\n.p-0 {\n  padding: 0px;\n}\n.p-0\\.5 {\n  padding: 0.125rem;\n}\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n.pt-0 {\n  padding-top: 0px;\n}\n.pb-1 {\n  padding-bottom: 0.25rem;\n}\n.pb-0 {\n  padding-bottom: 0px;\n}\n.pt-2 {\n  padding-top: 0.5rem;\n}\n.pb-0\\.5 {\n  padding-bottom: 0.125rem;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n.text-red-500 {\n  --tw-text-opacity: 1;\n  color: rgb(239 68 68 / var(--tw-text-opacity));\n}\n.text-green-500 {\n  --tw-text-opacity: 1;\n  color: rgb(34 197 94 / var(--tw-text-opacity));\n}\n.text-blue-500 {\n  --tw-text-opacity: 1;\n  color: rgb(59 130 246 / var(--tw-text-opacity));\n}\n.text-yellow-500 {\n  --tw-text-opacity: 1;\n  color: rgb(234 179 8 / var(--tw-text-opacity));\n}\n.text-purple-500 {\n  --tw-text-opacity: 1;\n  color: rgb(168 85 247 / var(--tw-text-opacity));\n}\n.text-pink-500 {\n  --tw-text-opacity: 1;\n  color: rgb(236 72 153 / var(--tw-text-opacity));\n}\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(113 113 122 / var(--tw-text-opacity));\n}\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-black {\n  --tw-text-opacity: 1;\n  color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-transparent {\n  color: transparent;\n}\n.text-opacity-50 {\n  --tw-text-opacity: 0.5;\n}\n.text-opacity-75 {\n  --tw-text-opacity: 0.75;\n}\n.underline {\n  text-decoration-line: underline;\n}\n.opacity-50 {\n  opacity: 0.5;\n}\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n.outline {\n  outline-style: solid;\n}\n.blur {\n  --tw-blur: blur(8px);\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.invert {\n  --tw-invert: invert(100%);\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-sm {\n  --tw-backdrop-blur: blur(4px);\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-filter {\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.transition {\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.duration-300 {\n  transition-duration: 300ms;\n}\n.floating-panel > .control-button:first-child,\n.floating-panel > .control-combo:first-child,\n.floating-panel > .control-input:first-child,\n.floating-panel > .control-label:first-child,\n.floating-panel > .control-select:first-child,\n.floating-panel > .control-text:first-child {\n  margin-top: 0.5rem;\n}\n.floating-panel > .control-button:last-child,\n.floating-panel > .control-combo:last-child,\n.floating-panel > .control-input:last-child,\n.floating-panel > .control-label:last-child,\n.floating-panel > .control-select:last-child,\n.floating-panel > .control-text:last-child {\n  margin-bottom: 0.25rem;\n}\n\n.control-label + .control-checkbox {\n  margin-top: -1rem;\n}\n\n.hover\\:border-purple-600:hover {\n  --tw-border-opacity: 1;\n  border-color: rgb(147 51 234 / var(--tw-border-opacity));\n}"
  },
  {
    "path": "package/engine-dist/three.module-c8091b37.js",
    "content": "/**\n * @license\n * Copyright 2010-2023 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '155';\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NormalBlending = 1;\nconst AddEquation = 100;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst LessEqualDepth = 3;\nconst MultiplyOperation = 0;\n\nconst UVMapping = 300;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst FloatType = 1015;\nconst RGBAFormat = 1023;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\n/** @deprecated Use LinearSRGBColorSpace or NoColorSpace in three.js r152+. */\nconst LinearEncoding = 3000;\n/** @deprecated Use SRGBColorSpace in three.js r152+. */\nconst sRGBEncoding = 3001;\nconst TangentSpaceNormalMap = 0;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\nconst DisplayP3ColorSpace = 'display-p3';\nconst KeepStencilOp = 7680;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\n\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range <a1, a2> to range <b1, b2>\nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from <low, high> interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from <low, high> interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nconst _cache = {};\n\nfunction warnOnce( message ) {\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\tconsole.warn( message );\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\n/**\n * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n * or clipping. Based on W3C specifications for sRGB and Display P3,\n * and ICC specifications for the D50 connection space. Values in/out\n * are _linear_ sRGB and _linear_ Display P3.\n *\n * Note that both sRGB and Display P3 use the sRGB transfer functions.\n *\n * Reference:\n * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n\nconst LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().fromArray( [\n\t0.8224621, 0.0331941, 0.0170827,\n\t0.1775380, 0.9668058, 0.0723974,\n\t- 0.0000001, 0.0000001, 0.9105199\n] );\n\nconst LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().fromArray( [\n\t1.2249401, - 0.0420569, - 0.0196376,\n\t- 0.2249404, 1.0420571, - 0.0786361,\n\t0.0000001, 0.0000000, 1.0982735\n] );\n\nfunction DisplayP3ToLinearSRGB( color ) {\n\n\t// Display P3 uses the sRGB transfer functions\n\treturn color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB );\n\n}\n\nfunction LinearSRGBToDisplayP3( color ) {\n\n\t// Display P3 uses the sRGB transfer functions\n\treturn color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB();\n\n}\n\n// Conversions from <source> to Linear-sRGB reference space.\nconst TO_LINEAR = {\n\t[ LinearSRGBColorSpace ]: ( color ) => color,\n\t[ SRGBColorSpace ]: ( color ) => color.convertSRGBToLinear(),\n\t[ DisplayP3ColorSpace ]: DisplayP3ToLinearSRGB,\n};\n\n// Conversions to <target> from Linear-sRGB reference space.\nconst FROM_LINEAR = {\n\t[ LinearSRGBColorSpace ]: ( color ) => color,\n\t[ SRGBColorSpace ]: ( color ) => color.convertLinearToSRGB(),\n\t[ DisplayP3ColorSpace ]: LinearSRGBToDisplayP3,\n};\n\nconst ColorManagement = {\n\n\tenabled: true,\n\n\tget legacyMode() {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );\n\n\t\treturn ! this.enabled;\n\n\t},\n\n\tset legacyMode( legacyMode ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );\n\n\t\tthis.enabled = ! legacyMode;\n\n\t},\n\n\tget workingColorSpace() {\n\n\t\treturn LinearSRGBColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tconst sourceToLinear = TO_LINEAR[ sourceColorSpace ];\n\t\tconst targetFromLinear = FROM_LINEAR[ targetColorSpace ];\n\n\t\tif ( sourceToLinear === undefined || targetFromLinear === undefined ) {\n\n\t\t\tthrow new Error( `Unsupported color space conversion, \"${ sourceColorSpace }\" to \"${ targetColorSpace }\".` );\n\n\t\t}\n\n\t\treturn targetFromLinear( sourceToLinear( color ) );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t},\n\n};\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet sourceId = 0;\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tObject.defineProperty( this, 'id', { value: sourceId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\t\tthis.channel = 0;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\tif ( typeof colorSpace === 'string' ) {\n\n\t\t\tthis.colorSpace = colorSpace;\n\n\t\t} else { // @deprecated, r152\n\n\t\t\twarnOnce( 'THREE.Texture: Property .encoding has been replaced by .colorSpace.' );\n\t\t\tthis.colorSpace = colorSpace === sRGBEncoding ? SRGBColorSpace : NoColorSpace;\n\n\t\t}\n\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tget encoding() { // @deprecated, r152\n\n\t\twarnOnce( 'THREE.Texture: Property .encoding has been replaced by .colorSpace.' );\n\t\treturn this.colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n\n\t}\n\n\tset encoding( encoding ) { // @deprecated, r152\n\n\t\twarnOnce( 'THREE.Texture: Property .encoding has been replaced by .colorSpace.' );\n\t\tthis.colorSpace = encoding === sRGBEncoding ? SRGBColorSpace : NoColorSpace;\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t     ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t     ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// Derived from http://planning.cs.uiuc.edu/node198.html\n\t\t// Note, this source uses w, x, y, z ordering,\n\t\t// so we swap the order below.\n\n\t\tconst u1 = Math.random();\n\t\tconst sqrt1u1 = Math.sqrt( 1 - u1 );\n\t\tconst sqrtu1 = Math.sqrt( u1 );\n\n\t\tconst u2 = 2 * Math.PI * Math.random();\n\n\t\tconst u3 = 2 * Math.PI * Math.random();\n\n\t\treturn this.set(\n\t\t\tsqrt1u1 * Math.cos( u2 ),\n\t\t\tsqrtu1 * Math.sin( u3 ),\n\t\t\tsqrtu1 * Math.cos( u3 ),\n\t\t\tsqrt1u1 * Math.sin( u2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$b.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$b );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$b.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst u = ( Math.random() - 0.5 ) * 2;\n\t\tconst t = Math.random() * Math.PI * 2;\n\t\tconst f = Math.sqrt( 1 - u ** 2 );\n\n\t\tthis.x = f * Math.cos( t );\n\t\tthis.y = f * Math.sin( t );\n\t\tthis.z = u;\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$a.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$a.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$a.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box$3.copy( object.boundingBox );\n\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box$3 );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( precise && geometry.attributes !== undefined && geometry.attributes.position !== undefined ) {\n\n\t\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t_vector$a.fromBufferAttribute( position, i ).applyMatrix4( object.matrixWorld );\n\t\t\t\t\t\tthis.expandByPoint( _vector$a );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\t\t\tthis.union( _box$3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$a );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$a.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$a ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$a ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$9 ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$9.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$9.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$9.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$9.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$9.dot( this.direction );\n\t\tconst d2 = _vector$9.dot( _vector$9 ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$9 ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t//   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t//   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t//   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\td = ( - 2 * far * near ) / ( far - near );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tc = - far / ( far - near );\n\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\n\t\tlet z, zInv;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tz = ( far + near ) * p;\n\t\t\tzInv = - 2 * p;\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tz = near * p;\n\t\t\tzInv = - 1 * p;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0; \t\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = zInv;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value ) {\n\n\t\tlet result = [];\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst childResult = this.children[ i ].getObjectsByProperty( name, value );\n\n\t\t\tif ( childResult.length > 0 ) {\n\n\t\t\t\tresult = result.concat( childResult );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.matrixWorldAutoUpdate === true || force === true ) {\n\n\t\t\t\tchild.updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tif ( child.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nlet warnedGetUV = false;\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { // @deprecated, r151\n\n\t\tif ( warnedGetUV === false ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().' );\n\n\t\t\twarnedGetUV = true;\n\n\t\t}\n\n\t\treturn this.getInterpolation( point, p1, p2, p3, uv1, uv2, uv3, target );\n\n\t}\n\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$1.x );\n\t\ttarget.addScaledVector( v2, _v3$1.y );\n\t\ttarget.addScaledVector( v3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) { // @deprecated, r151\n\n\t\tif ( warnedGetUV === false ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().' );\n\n\t\t\twarnedGetUV = true;\n\n\t\t}\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.alphaHash = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = this.alphaHash;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = this.forceSinglePass;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\nColor.NAMES = _colorKeywords;\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$8 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\t\tthis.gpuType = FloatType;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( this, i );\n\t\t\t\t_vector$8.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( this, i );\n\n\t\t\t_vector$8.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( this, i );\n\n\t\t\t_vector$8.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( this, i );\n\n\t\t\t_vector$8.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$1 = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$1 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$7.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$7 );\n\n\t\t\t\t\t\t_vector$7.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$7 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$7.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$7 );\n\n\t\t\t\t\t\t_vector$7.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$7 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$7.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$7 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$7.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$7.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$7 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = this.getAttribute( 'tangent' ).array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$7.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$7.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$7.x, _vector$7.y, _vector$7.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _normalA = /*@__PURE__*/ new Vector3();\nconst _normalB = /*@__PURE__*/ new Vector3();\nconst _normalC = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$5.copy( geometry.boundingSphere );\n\t\t_sphere$5.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$5.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$5, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv1, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv1, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\t\t\tintersection.uv2 = intersection.uv1; // @deprecated, r152\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t *   +---+---+---+\n\t *   | A | B | C |\n\t *   +---+---+---+\n\t *   | D | E | F |\n\t *   +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t *   const w = 1920;\n\t *   const h = 1080;\n\t *   const fullWidth = w * 3;\n\t *   const fullHeight = h * 2;\n\t *\n\t *   --A--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t *   --B--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t *   --C--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t *   --D--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t *   --E--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t *   --F--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t *   Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$4.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$4.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$4 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$4.center.set( 0, 0, 0 );\n\t\t_sphere$4.radius = 0.7071067811865476;\n\t\t_sphere$4.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$4 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$6.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$6.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$6.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$6 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$5.fromBufferAttribute( this, i );\n\n\t\t\t_vector$5.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$5.x, _vector$5.y, _vector$5.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$5.fromBufferAttribute( this, i );\n\n\t\t\t_vector$5.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$5.x, _vector$5.y, _vector$5.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$5.fromBufferAttribute( this, i );\n\n\t\t\t_vector$5.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$5.x, _vector$5.y, _vector$5.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector3 = /*@__PURE__*/ new Vector3();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\t_vertex.fromBufferAttribute( positionAttribute, i );\n\t\t\tthis.applyBoneTransform( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\t_vertex.fromBufferAttribute( positionAttribute, i );\n\t\t\tthis.applyBoneTransform( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$3.copy( this.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tapplyBoneTransform( index, vector ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );\n\n\t\tvector.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\tvector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn vector.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n\tboneTransform( index, vector ) { // @deprecated, r151\n\n\t\tconsole.warn( 'THREE.SkinnedMesh: .boneTransform() was renamed to .applyBoneTransform() in r151.' );\n\t\treturn this.applyBoneTransform( index, vector );\n\n\t}\n\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t//  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)\n\t\t//       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)\n\t\t//       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)\n\t\t//       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = ceilPowerOfTwo( size );\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\t\tthis.boneTextureSize = size;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$2.copy( this.boundingSphere );\n\t\t_sphere$2.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.anisotropyRotation = 0;\n\t\tthis.anisotropyMap = null;\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// same as Array.prototype.slice, but also works on typed arrays\nfunction arraySlice( array, from, to ) {\n\n\tif ( isTypedArray( array ) ) {\n\n\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t}\n\n\treturn array.slice( from, to );\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = arraySlice( times, from, to );\n\t\t\tthis.values = arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = arraySlice( this.times ),\n\t\t\tvalues = arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = arraySlice( this.times, 0 );\n\t\tconst values = arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'Content-Length' ) || response.headers.get( 'X-File-Size' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t//  xzXZ\n\t\t\t//   y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.warn( 'THREE.PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { AddEquation, AlwaysStencilFunc, AnimationClip, BackSide, Bone, BooleanKeyframeTrack, Box3, BufferAttribute, BufferGeometry, Cache, Camera, ClampToEdgeWrapping, Color, ColorKeyframeTrack, ColorManagement, CubicInterpolant, DataTexture, DefaultLoadingManager, DirectionalLight, DiscreteInterpolant, DisplayP3ColorSpace, DoubleSide, Euler, EventDispatcher, FileLoader, Float32BufferAttribute, FloatType, FrontSide, Frustum, Group, ImageBitmapLoader, ImageLoader, ImageUtils, InstancedBufferAttribute, InstancedMesh, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, KeepStencilOp, KeyframeTrack, Layers, LessEqualDepth, Light, Line, LineBasicMaterial, LineLoop, LineSegments, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, Loader, LoaderUtils, LoadingManager, Material, MathUtils, Matrix3, Matrix4, Mesh, MeshBasicMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MirroredRepeatWrapping, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NoColorSpace, NormalAnimationBlendMode, NormalBlending, NumberKeyframeTrack, Object3D, OneMinusSrcAlphaFactor, OrthographicCamera, PerspectiveCamera, Plane, PointLight, Points, PointsMaterial, PropertyBinding, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBAFormat, Ray, RepeatWrapping, SRGBColorSpace, Skeleton, SkinnedMesh, Source, Sphere, SpotLight, SrcAlphaFactor, StaticDrawUsage, StringKeyframeTrack, TangentSpaceNormalMap, Texture, TextureLoader, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, UnsignedByteType, Vector2, Vector3, Vector4, VectorKeyframeTrack, WebGLCoordinateSystem, WebGPUCoordinateSystem, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, sRGBEncoding };\n"
  },
  {
    "path": "package/engine-dist/ui-37189365.js",
    "content": "function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n    // @ts-ignore\n    for (const k in src)\n        tar[k] = src[k];\n    return tar;\n}\nfunction run(fn) {\n    return fn();\n}\nfunction blank_object() {\n    return Object.create(null);\n}\nfunction run_all(fns) {\n    fns.forEach(run);\n}\nfunction is_function(thing) {\n    return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n    return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction is_empty(obj) {\n    return Object.keys(obj).length === 0;\n}\nfunction subscribe(store, ...callbacks) {\n    if (store == null) {\n        return noop;\n    }\n    const unsub = store.subscribe(...callbacks);\n    return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction component_subscribe(component, store, callback) {\n    component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction action_destroyer(action_result) {\n    return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n    ? () => window.performance.now()\n    : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n    tasks.forEach(task => {\n        if (!task.c(now)) {\n            tasks.delete(task);\n            task.f();\n        }\n    });\n    if (tasks.size !== 0)\n        raf(run_tasks);\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n    let task;\n    if (tasks.size === 0)\n        raf(run_tasks);\n    return {\n        promise: new Promise(fulfill => {\n            tasks.add(task = { c: callback, f: fulfill });\n        }),\n        abort() {\n            tasks.delete(task);\n        }\n    };\n}\n\nconst globals = (typeof window !== 'undefined'\n    ? window\n    : typeof globalThis !== 'undefined'\n        ? globalThis\n        : global);\nfunction append(target, node) {\n    target.appendChild(node);\n}\nfunction get_root_for_style(node) {\n    if (!node)\n        return document;\n    const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n    if (root && root.host) {\n        return root;\n    }\n    return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n    const style_element = element('style');\n    append_stylesheet(get_root_for_style(node), style_element);\n    return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n    append(node.head || node, style);\n    return style.sheet;\n}\nfunction insert(target, node, anchor) {\n    target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n    if (node.parentNode) {\n        node.parentNode.removeChild(node);\n    }\n}\nfunction destroy_each(iterations, detaching) {\n    for (let i = 0; i < iterations.length; i += 1) {\n        if (iterations[i])\n            iterations[i].d(detaching);\n    }\n}\nfunction element(name) {\n    return document.createElement(name);\n}\nfunction svg_element(name) {\n    return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n    return document.createTextNode(data);\n}\nfunction space() {\n    return text(' ');\n}\nfunction empty() {\n    return text('');\n}\nfunction listen(node, event, handler, options) {\n    node.addEventListener(event, handler, options);\n    return () => node.removeEventListener(event, handler, options);\n}\nfunction attr(node, attribute, value) {\n    if (value == null)\n        node.removeAttribute(attribute);\n    else if (node.getAttribute(attribute) !== value)\n        node.setAttribute(attribute, value);\n}\nfunction children(element) {\n    return Array.from(element.childNodes);\n}\nfunction set_data(text, data) {\n    data = '' + data;\n    if (text.data === data)\n        return;\n    text.data = data;\n}\nfunction set_style(node, key, value, important) {\n    if (value == null) {\n        node.style.removeProperty(key);\n    }\n    else {\n        node.style.setProperty(key, value, important ? 'important' : '');\n    }\n}\nfunction toggle_class(element, name, toggle) {\n    element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n    const e = document.createEvent('CustomEvent');\n    e.initCustomEvent(type, bubbles, cancelable, detail);\n    return e;\n}\nclass HtmlTag {\n    constructor(is_svg = false) {\n        this.is_svg = false;\n        this.is_svg = is_svg;\n        this.e = this.n = null;\n    }\n    c(html) {\n        this.h(html);\n    }\n    m(html, target, anchor = null) {\n        if (!this.e) {\n            if (this.is_svg)\n                this.e = svg_element(target.nodeName);\n            /** #7364  target for <template> may be provided as #document-fragment(11) */\n            else\n                this.e = element((target.nodeType === 11 ? 'TEMPLATE' : target.nodeName));\n            this.t = target.tagName !== 'TEMPLATE' ? target : target.content;\n            this.c(html);\n        }\n        this.i(anchor);\n    }\n    h(html) {\n        this.e.innerHTML = html;\n        this.n = Array.from(this.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes);\n    }\n    i(anchor) {\n        for (let i = 0; i < this.n.length; i += 1) {\n            insert(this.t, this.n[i], anchor);\n        }\n    }\n    p(html) {\n        this.d();\n        this.h(html);\n        this.i(this.a);\n    }\n    d() {\n        this.n.forEach(detach);\n    }\n}\nfunction construct_svelte_component(component, props) {\n    return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n    let hash = 5381;\n    let i = str.length;\n    while (i--)\n        hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n    return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n    const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n    managed_styles.set(doc, info);\n    return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n    const step = 16.666 / duration;\n    let keyframes = '{\\n';\n    for (let p = 0; p <= 1; p += step) {\n        const t = a + (b - a) * ease(p);\n        keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n    }\n    const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n    const name = `__svelte_${hash(rule)}_${uid}`;\n    const doc = get_root_for_style(node);\n    const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n    if (!rules[name]) {\n        rules[name] = true;\n        stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n    }\n    const animation = node.style.animation || '';\n    node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n    active += 1;\n    return name;\n}\nfunction delete_rule(node, name) {\n    const previous = (node.style.animation || '').split(', ');\n    const next = previous.filter(name\n        ? anim => anim.indexOf(name) < 0 // remove specific animation\n        : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n    );\n    const deleted = previous.length - next.length;\n    if (deleted) {\n        node.style.animation = next.join(', ');\n        active -= deleted;\n        if (!active)\n            clear_rules();\n    }\n}\nfunction clear_rules() {\n    raf(() => {\n        if (active)\n            return;\n        managed_styles.forEach(info => {\n            const { ownerNode } = info.stylesheet;\n            // there is no ownerNode if it runs on jsdom.\n            if (ownerNode)\n                detach(ownerNode);\n        });\n        managed_styles.clear();\n    });\n}\n\nlet current_component;\nfunction set_current_component(component) {\n    current_component = component;\n}\nfunction get_current_component() {\n    if (!current_component)\n        throw new Error('Function called outside component initialization');\n    return current_component;\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n    get_current_component().$$.on_mount.push(fn);\n}\n\nconst dirty_components = [];\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n    if (!update_scheduled) {\n        update_scheduled = true;\n        resolved_promise.then(flush);\n    }\n}\nfunction add_render_callback(fn) {\n    render_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n//    for afterUpdates called during the initial onMount, which are called in\n//    reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n//    dirty_components array and will cause a reentrant call to flush(). Because\n//    the flush index is kept outside the function, the reentrant call will pick\n//    up where the earlier call left off and go through all dirty components. The\n//    current_component value is saved and restored so that the reentrant call will\n//    not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n//    callback called a second time; the seen_callbacks set, outside the flush()\n//    function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n    // Do not reenter flush while dirty components are updated, as this can\n    // result in an infinite loop. Instead, let the inner flush handle it.\n    // Reentrancy is ok afterwards for bindings etc.\n    if (flushidx !== 0) {\n        return;\n    }\n    const saved_component = current_component;\n    do {\n        // first, call beforeUpdate functions\n        // and update components\n        try {\n            while (flushidx < dirty_components.length) {\n                const component = dirty_components[flushidx];\n                flushidx++;\n                set_current_component(component);\n                update(component.$$);\n            }\n        }\n        catch (e) {\n            // reset dirty state to not end up in a deadlocked state and then rethrow\n            dirty_components.length = 0;\n            flushidx = 0;\n            throw e;\n        }\n        set_current_component(null);\n        dirty_components.length = 0;\n        flushidx = 0;\n        while (binding_callbacks.length)\n            binding_callbacks.pop()();\n        // then, once components are updated, call\n        // afterUpdate functions. This may cause\n        // subsequent updates...\n        for (let i = 0; i < render_callbacks.length; i += 1) {\n            const callback = render_callbacks[i];\n            if (!seen_callbacks.has(callback)) {\n                // ...so guard against infinite loops\n                seen_callbacks.add(callback);\n                callback();\n            }\n        }\n        render_callbacks.length = 0;\n    } while (dirty_components.length);\n    while (flush_callbacks.length) {\n        flush_callbacks.pop()();\n    }\n    update_scheduled = false;\n    seen_callbacks.clear();\n    set_current_component(saved_component);\n}\nfunction update($$) {\n    if ($$.fragment !== null) {\n        $$.update();\n        run_all($$.before_update);\n        const dirty = $$.dirty;\n        $$.dirty = [-1];\n        $$.fragment && $$.fragment.p($$.ctx, dirty);\n        $$.after_update.forEach(add_render_callback);\n    }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n    const filtered = [];\n    const targets = [];\n    render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n    targets.forEach((c) => c());\n    render_callbacks = filtered;\n}\n\nlet promise;\nfunction wait() {\n    if (!promise) {\n        promise = Promise.resolve();\n        promise.then(() => {\n            promise = null;\n        });\n    }\n    return promise;\n}\nfunction dispatch(node, direction, kind) {\n    node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n    outros = {\n        r: 0,\n        c: [],\n        p: outros // parent group\n    };\n}\nfunction check_outros() {\n    if (!outros.r) {\n        run_all(outros.c);\n    }\n    outros = outros.p;\n}\nfunction transition_in(block, local) {\n    if (block && block.i) {\n        outroing.delete(block);\n        block.i(local);\n    }\n}\nfunction transition_out(block, local, detach, callback) {\n    if (block && block.o) {\n        if (outroing.has(block))\n            return;\n        outroing.add(block);\n        outros.c.push(() => {\n            outroing.delete(block);\n            if (callback) {\n                if (detach)\n                    block.d(1);\n                callback();\n            }\n        });\n        block.o(local);\n    }\n    else if (callback) {\n        callback();\n    }\n}\nconst null_transition = { duration: 0 };\nfunction create_bidirectional_transition(node, fn, params, intro) {\n    const options = { direction: 'both' };\n    let config = fn(node, params, options);\n    let t = intro ? 0 : 1;\n    let running_program = null;\n    let pending_program = null;\n    let animation_name = null;\n    function clear_animation() {\n        if (animation_name)\n            delete_rule(node, animation_name);\n    }\n    function init(program, duration) {\n        const d = (program.b - t);\n        duration *= Math.abs(d);\n        return {\n            a: t,\n            b: program.b,\n            d,\n            duration,\n            start: program.start,\n            end: program.start + duration,\n            group: program.group\n        };\n    }\n    function go(b) {\n        const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n        const program = {\n            start: now() + delay,\n            b\n        };\n        if (!b) {\n            // @ts-ignore todo: improve typings\n            program.group = outros;\n            outros.r += 1;\n        }\n        if (running_program || pending_program) {\n            pending_program = program;\n        }\n        else {\n            // if this is an intro, and there's a delay, we need to do\n            // an initial tick and/or apply CSS animation immediately\n            if (css) {\n                clear_animation();\n                animation_name = create_rule(node, t, b, duration, delay, easing, css);\n            }\n            if (b)\n                tick(0, 1);\n            running_program = init(program, duration);\n            add_render_callback(() => dispatch(node, b, 'start'));\n            loop(now => {\n                if (pending_program && now > pending_program.start) {\n                    running_program = init(pending_program, duration);\n                    pending_program = null;\n                    dispatch(node, running_program.b, 'start');\n                    if (css) {\n                        clear_animation();\n                        animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n                    }\n                }\n                if (running_program) {\n                    if (now >= running_program.end) {\n                        tick(t = running_program.b, 1 - t);\n                        dispatch(node, running_program.b, 'end');\n                        if (!pending_program) {\n                            // we're done\n                            if (running_program.b) {\n                                // intro — we can tidy up immediately\n                                clear_animation();\n                            }\n                            else {\n                                // outro — needs to be coordinated\n                                if (!--running_program.group.r)\n                                    run_all(running_program.group.c);\n                            }\n                        }\n                        running_program = null;\n                    }\n                    else if (now >= running_program.start) {\n                        const p = now - running_program.start;\n                        t = running_program.a + running_program.d * easing(p / running_program.duration);\n                        tick(t, 1 - t);\n                    }\n                }\n                return !!(running_program || pending_program);\n            });\n        }\n    }\n    return {\n        run(b) {\n            if (is_function(config)) {\n                wait().then(() => {\n                    // @ts-ignore\n                    config = config(options);\n                    go(b);\n                });\n            }\n            else {\n                go(b);\n            }\n        },\n        end() {\n            clear_animation();\n            running_program = pending_program = null;\n        }\n    };\n}\n\nfunction get_spread_update(levels, updates) {\n    const update = {};\n    const to_null_out = {};\n    const accounted_for = { $$scope: 1 };\n    let i = levels.length;\n    while (i--) {\n        const o = levels[i];\n        const n = updates[i];\n        if (n) {\n            for (const key in o) {\n                if (!(key in n))\n                    to_null_out[key] = 1;\n            }\n            for (const key in n) {\n                if (!accounted_for[key]) {\n                    update[key] = n[key];\n                    accounted_for[key] = 1;\n                }\n            }\n            levels[i] = n;\n        }\n        else {\n            for (const key in o) {\n                accounted_for[key] = 1;\n            }\n        }\n    }\n    for (const key in to_null_out) {\n        if (!(key in update))\n            update[key] = undefined;\n    }\n    return update;\n}\nfunction get_spread_object(spread_props) {\n    return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\nfunction create_component(block) {\n    block && block.c();\n}\nfunction mount_component(component, target, anchor, customElement) {\n    const { fragment, after_update } = component.$$;\n    fragment && fragment.m(target, anchor);\n    if (!customElement) {\n        // onMount happens before the initial afterUpdate\n        add_render_callback(() => {\n            const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n            // if the component was destroyed immediately\n            // it will update the `$$.on_destroy` reference to `null`.\n            // the destructured on_destroy may still reference to the old array\n            if (component.$$.on_destroy) {\n                component.$$.on_destroy.push(...new_on_destroy);\n            }\n            else {\n                // Edge case - component was destroyed immediately,\n                // most likely as a result of a binding initialising\n                run_all(new_on_destroy);\n            }\n            component.$$.on_mount = [];\n        });\n    }\n    after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n    const $$ = component.$$;\n    if ($$.fragment !== null) {\n        flush_render_callbacks($$.after_update);\n        run_all($$.on_destroy);\n        $$.fragment && $$.fragment.d(detaching);\n        // TODO null out other refs, including component.$$ (but need to\n        // preserve final state?)\n        $$.on_destroy = $$.fragment = null;\n        $$.ctx = [];\n    }\n}\nfunction make_dirty(component, i) {\n    if (component.$$.dirty[0] === -1) {\n        dirty_components.push(component);\n        schedule_update();\n        component.$$.dirty.fill(0);\n    }\n    component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n    const parent_component = current_component;\n    set_current_component(component);\n    const $$ = component.$$ = {\n        fragment: null,\n        ctx: [],\n        // state\n        props,\n        update: noop,\n        not_equal,\n        bound: blank_object(),\n        // lifecycle\n        on_mount: [],\n        on_destroy: [],\n        on_disconnect: [],\n        before_update: [],\n        after_update: [],\n        context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n        // everything else\n        callbacks: blank_object(),\n        dirty,\n        skip_bound: false,\n        root: options.target || parent_component.$$.root\n    };\n    append_styles && append_styles($$.root);\n    let ready = false;\n    $$.ctx = instance\n        ? instance(component, options.props || {}, (i, ret, ...rest) => {\n            const value = rest.length ? rest[0] : ret;\n            if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n                if (!$$.skip_bound && $$.bound[i])\n                    $$.bound[i](value);\n                if (ready)\n                    make_dirty(component, i);\n            }\n            return ret;\n        })\n        : [];\n    $$.update();\n    ready = true;\n    run_all($$.before_update);\n    // `false` as a special case of no DOM component\n    $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n    if (options.target) {\n        if (options.hydrate) {\n            const nodes = children(options.target);\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            $$.fragment && $$.fragment.l(nodes);\n            nodes.forEach(detach);\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            $$.fragment && $$.fragment.c();\n        }\n        if (options.intro)\n            transition_in(component.$$.fragment);\n        mount_component(component, options.target, options.anchor, options.customElement);\n        flush();\n    }\n    set_current_component(parent_component);\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n    $destroy() {\n        destroy_component(this, 1);\n        this.$destroy = noop;\n    }\n    $on(type, callback) {\n        if (!is_function(callback)) {\n            return noop;\n        }\n        const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n        callbacks.push(callback);\n        return () => {\n            const index = callbacks.indexOf(callback);\n            if (index !== -1)\n                callbacks.splice(index, 1);\n        };\n    }\n    $set($$props) {\n        if (this.$$set && !is_empty($$props)) {\n            this.$$.skip_bound = true;\n            this.$$set($$props);\n            this.$$.skip_bound = false;\n        }\n    }\n}\n\n/* ui/components/Slider.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment$8(ctx) {\n\tlet div3;\n\tlet div2;\n\tlet div0;\n\tlet t0;\n\tlet div1;\n\tlet t1;\n\tlet input0;\n\tlet input0_value_value;\n\tlet t2;\n\tlet input1;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv3 = element(\"div\");\n\t\t\tdiv2 = element(\"div\");\n\t\t\tdiv0 = element(\"div\");\n\t\t\tt0 = space();\n\t\t\tdiv1 = element(\"div\");\n\t\t\tt1 = space();\n\t\t\tinput0 = element(\"input\");\n\t\t\tt2 = space();\n\t\t\tinput1 = element(\"input\");\n\t\t\tattr(div0, \"class\", \"absolute rounded-full bg-gray-600 w-full h-1\");\n\t\t\tattr(div1, \"class\", \"handle absolute w-[6px] h-[14px] rounded-full bg-purple-600 cursor-pointer\");\n\t\t\tset_style(div1, \"left\", \"calc(100% * \" + (/*value*/ ctx[0] - /*min*/ ctx[1]) + \" / \" + (/*max*/ ctx[2] - /*min*/ ctx[1]) + \" - 3px)\");\n\t\t\tattr(div2, \"class\", \"track w-full h-4 relative flex items-center\");\n\t\t\tattr(input0, \"class\", \"bg-black bg-opacity-10 p-0 rounded-sm w-5 h-4 text-sm outline-none border-none ml-2 text-right\");\n\t\t\tset_style(input0, \"font-size\", \"10px\");\n\t\t\tattr(input0, \"type\", \"text\");\n\t\t\tinput0.value = input0_value_value = /*value*/ ctx[0].toFixed(1).replace(/\\.0$/, '');\n\t\t\tattr(input0, \"min\", /*min*/ ctx[1]);\n\t\t\tattr(input0, \"max\", /*max*/ ctx[2]);\n\t\t\tinput1.hidden = true;\n\t\t\tattr(input1, \"type\", \"range\");\n\t\t\tattr(input1, \"min\", /*min*/ ctx[1]);\n\t\t\tattr(input1, \"max\", /*max*/ ctx[2]);\n\t\t\tinput1.value = /*value*/ ctx[0];\n\t\t\tattr(div3, \"class\", \"px-3 pt-0 pb-1 flex flex-row items-center\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div3, anchor);\n\t\t\tappend(div3, div2);\n\t\t\tappend(div2, div0);\n\t\t\tappend(div2, t0);\n\t\t\tappend(div2, div1);\n\t\t\t/*div2_binding*/ ctx[8](div2);\n\t\t\tappend(div3, t1);\n\t\t\tappend(div3, input0);\n\t\t\tappend(div3, t2);\n\t\t\tappend(div3, input1);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(window, \"mouseup\", /*mouseup_handler*/ ctx[7]),\n\t\t\t\t\tlisten(window, \"mousemove\", /*handleMove*/ ctx[6]),\n\t\t\t\t\tlisten(div2, \"mousedown\", /*mousedown_handler*/ ctx[9]),\n\t\t\t\t\tlisten(input0, \"input\", /*input_handler*/ ctx[10]),\n\t\t\t\t\tlisten(input1, \"input\", /*input_handler_1*/ ctx[11])\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*value, min, max*/ 7) {\n\t\t\t\tset_style(div1, \"left\", \"calc(100% * \" + (/*value*/ ctx[0] - /*min*/ ctx[1]) + \" / \" + (/*max*/ ctx[2] - /*min*/ ctx[1]) + \" - 3px)\");\n\t\t\t}\n\n\t\t\tif (dirty & /*value*/ 1 && input0_value_value !== (input0_value_value = /*value*/ ctx[0].toFixed(1).replace(/\\.0$/, '')) && input0.value !== input0_value_value) {\n\t\t\t\tinput0.value = input0_value_value;\n\t\t\t}\n\n\t\t\tif (dirty & /*min*/ 2) {\n\t\t\t\tattr(input0, \"min\", /*min*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (dirty & /*max*/ 4) {\n\t\t\t\tattr(input0, \"max\", /*max*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty & /*min*/ 2) {\n\t\t\t\tattr(input1, \"min\", /*min*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (dirty & /*max*/ 4) {\n\t\t\t\tattr(input1, \"max\", /*max*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty & /*value*/ 1) {\n\t\t\t\tinput1.value = /*value*/ ctx[0];\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div3);\n\t\t\t/*div2_binding*/ ctx[8](null);\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance$8($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\tlet { min } = $$props;\n\tlet { max } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tlet dragging = false;\n\tlet selfElement;\n\n\tfunction handleMove(e) {\n\t\tif (dragging) {\n\t\t\tconst rect = selfElement.getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst percent = x / rect.width;\n\t\t\tlet newValue = min + (max - min) * percent;\n\t\t\tnewValue = Math.max(min, Math.min(max, newValue));\n\t\t\tsetValue(newValue);\n\t\t\t$$invalidate(0, value = newValue);\n\t\t}\n\t}\n\n\tconst mouseup_handler = () => $$invalidate(4, dragging = false);\n\n\tfunction div2_binding($$value) {\n\t\tbinding_callbacks[$$value ? 'unshift' : 'push'](() => {\n\t\t\tselfElement = $$value;\n\t\t\t$$invalidate(5, selfElement);\n\t\t});\n\t}\n\n\tconst mousedown_handler = event => {\n\t\t$$invalidate(4, dragging = true);\n\t\thandleMove(event);\n\t};\n\n\tconst input_handler = e => {\n\t\tsetValue(parseFloat(e.target.value));\n\t\t$$invalidate(0, value = parseFloat(e.target.value));\n\t};\n\n\tconst input_handler_1 = e => {\n\t\tsetValue(parseFloat(e.target.value));\n\t\t$$invalidate(0, value = parseFloat(e.target.value));\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('min' in $$props) $$invalidate(1, min = $$props.min);\n\t\tif ('max' in $$props) $$invalidate(2, max = $$props.max);\n\t\tif ('setValue' in $$props) $$invalidate(3, setValue = $$props.setValue);\n\t};\n\n\treturn [\n\t\tvalue,\n\t\tmin,\n\t\tmax,\n\t\tsetValue,\n\t\tdragging,\n\t\tselfElement,\n\t\thandleMove,\n\t\tmouseup_handler,\n\t\tdiv2_binding,\n\t\tmousedown_handler,\n\t\tinput_handler,\n\t\tinput_handler_1\n\t];\n}\n\nclass Slider extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$8, create_fragment$8, safe_not_equal, { value: 0, min: 1, max: 2, setValue: 3 });\n\t}\n}\n\n/* ui/components/Combo.svelte generated by Svelte v3.59.2 */\n\nfunction get_each_context$3(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[4] = list[i];\n\treturn child_ctx;\n}\n\n// (14:2) {#if typeof options == 'object' && Array.isArray(options)}\nfunction create_if_block$2(ctx) {\n\tlet each_1_anchor;\n\tlet each_value = /*options*/ ctx[1];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i));\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\teach_1_anchor = empty();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(target, anchor);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinsert(target, each_1_anchor, anchor);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty & /*value, options*/ 3) {\n\t\t\t\teach_value = /*options*/ ctx[1];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context$3(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block$3(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\teach_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (; i < each_blocks.length; i += 1) {\n\t\t\t\t\teach_blocks[i].d(1);\n\t\t\t\t}\n\n\t\t\t\teach_blocks.length = each_value.length;\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t\tif (detaching) detach(each_1_anchor);\n\t\t}\n\t};\n}\n\n// (15:3) {#each options as option}\nfunction create_each_block$3(ctx) {\n\tlet option;\n\tlet t_value = /*option*/ ctx[4] + \"\";\n\tlet t;\n\tlet option_selected_value;\n\tlet option_value_value;\n\n\treturn {\n\t\tc() {\n\t\t\toption = element(\"option\");\n\t\t\tt = text(t_value);\n\t\t\tattr(option, \"class\", \"bg-gray-800\");\n\t\t\toption.selected = option_selected_value = /*value*/ ctx[0] == /*option*/ ctx[4];\n\t\t\toption.__value = option_value_value = /*option*/ ctx[4];\n\t\t\toption.value = option.__value;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, option, anchor);\n\t\t\tappend(option, t);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty & /*options*/ 2 && t_value !== (t_value = /*option*/ ctx[4] + \"\")) set_data(t, t_value);\n\n\t\t\tif (dirty & /*value, options*/ 3 && option_selected_value !== (option_selected_value = /*value*/ ctx[0] == /*option*/ ctx[4])) {\n\t\t\t\toption.selected = option_selected_value;\n\t\t\t}\n\n\t\t\tif (dirty & /*options*/ 2 && option_value_value !== (option_value_value = /*option*/ ctx[4])) {\n\t\t\t\toption.__value = option_value_value;\n\t\t\t\toption.value = option.__value;\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(option);\n\t\t}\n\t};\n}\n\nfunction create_fragment$7(ctx) {\n\tlet div;\n\tlet select;\n\tlet show_if = typeof /*options*/ ctx[1] == 'object' && Array.isArray(/*options*/ ctx[1]);\n\tlet mounted;\n\tlet dispose;\n\tlet if_block = show_if && create_if_block$2(ctx);\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tselect = element(\"select\");\n\t\t\tif (if_block) if_block.c();\n\t\t\tattr(select, \"class\", \"border border-gray-600 outline-none rounded-md text-sm p-0.5 px-1 bg-gray-800 bg-opacity-30 w-full\");\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1 flex flex-row items-center justify-end\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, select);\n\t\t\tif (if_block) if_block.m(select, null);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(select, \"input\", /*input_handler*/ ctx[3]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*options*/ 2) show_if = typeof /*options*/ ctx[1] == 'object' && Array.isArray(/*options*/ ctx[1]);\n\n\t\t\tif (show_if) {\n\t\t\t\tif (if_block) {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t\t} else {\n\t\t\t\t\tif_block = create_if_block$2(ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t\tif_block.m(select, null);\n\t\t\t\t}\n\t\t\t} else if (if_block) {\n\t\t\t\tif_block.d(1);\n\t\t\t\tif_block = null;\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (if_block) if_block.d();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance$7($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\tlet { options } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst input_handler = e => {\n\t\tsetValue(e.target.value);\n\t\t$$invalidate(0, value = e.target.value);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('options' in $$props) $$invalidate(1, options = $$props.options);\n\t\tif ('setValue' in $$props) $$invalidate(2, setValue = $$props.setValue);\n\t};\n\n\treturn [value, options, setValue, input_handler];\n}\n\nclass Combo extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$7, create_fragment$7, safe_not_equal, { value: 0, options: 1, setValue: 2 });\n\t}\n}\n\n/* ui/components/Label.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment$6(ctx) {\n\tlet div;\n\tlet t;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tt = text(/*value*/ ctx[0]);\n\t\t\tattr(div, \"class\", \"px-3 pb-0.5 text-xs text-white text-opacity-50 pt-2\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, t);\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*value*/ 1) set_data(t, /*value*/ ctx[0]);\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t}\n\t};\n}\n\nfunction instance$6($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t};\n\n\treturn [value];\n}\n\nclass Label extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$6, create_fragment$6, safe_not_equal, { value: 0 });\n\t}\n}\n\nfunction cubicOut(t) {\n    const f = t - 1.0;\n    return f * f * f + 1.0;\n}\n\nfunction slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = 'y' } = {}) {\n    const style = getComputedStyle(node);\n    const opacity = +style.opacity;\n    const primary_property = axis === 'y' ? 'height' : 'width';\n    const primary_property_value = parseFloat(style[primary_property]);\n    const secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n    const capitalized_secondary_properties = secondary_properties.map((e) => `${e[0].toUpperCase()}${e.slice(1)}`);\n    const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n    const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n    const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n    const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n    const border_width_start_value = parseFloat(style[`border${capitalized_secondary_properties[0]}Width`]);\n    const border_width_end_value = parseFloat(style[`border${capitalized_secondary_properties[1]}Width`]);\n    return {\n        delay,\n        duration,\n        easing,\n        css: t => 'overflow: hidden;' +\n            `opacity: ${Math.min(t * 20, 1) * opacity};` +\n            `${primary_property}: ${t * primary_property_value}px;` +\n            `padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n            `padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n            `margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n            `margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n            `border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n            `border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n    };\n}\n\nfunction measureElement(node, options) {\n  const { height, width, top, left } = options;\n  const resizeObserver = new ResizeObserver((entries) => {\n    for (const entry of entries) {\n      const { height: h, width: w, top: t, left: l } = entry.target.getBoundingClientRect();\n      height?.set(h);\n      width?.set(w);\n      top?.set(t);\n      left?.set(l);\n    }\n  });\n  resizeObserver.observe(node);\n  return {\n    destroy() {\n      resizeObserver.disconnect();\n    }\n  };\n}\n\nconst subscriber_queue = [];\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=} start\n */\nfunction writable(value, start = noop) {\n    let stop;\n    const subscribers = new Set();\n    function set(new_value) {\n        if (safe_not_equal(value, new_value)) {\n            value = new_value;\n            if (stop) { // store is ready\n                const run_queue = !subscriber_queue.length;\n                for (const subscriber of subscribers) {\n                    subscriber[1]();\n                    subscriber_queue.push(subscriber, value);\n                }\n                if (run_queue) {\n                    for (let i = 0; i < subscriber_queue.length; i += 2) {\n                        subscriber_queue[i][0](subscriber_queue[i + 1]);\n                    }\n                    subscriber_queue.length = 0;\n                }\n            }\n        }\n    }\n    function update(fn) {\n        set(fn(value));\n    }\n    function subscribe(run, invalidate = noop) {\n        const subscriber = [run, invalidate];\n        subscribers.add(subscriber);\n        if (subscribers.size === 1) {\n            stop = start(set) || noop;\n        }\n        run(value);\n        return () => {\n            subscribers.delete(subscriber);\n            if (subscribers.size === 0 && stop) {\n                stop();\n                stop = null;\n            }\n        };\n    }\n    return { set, update, subscribe };\n}\n\nconst FloatingPanel_svelte_svelte_type_style_lang = '';\n\n/* ui/components/FloatingPanel.svelte generated by Svelte v3.59.2 */\n\nconst { window: window_1 } = globals;\n\nfunction get_each_context$2(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[10] = list[i];\n\treturn child_ctx;\n}\n\n// (28:0) {#if children.length > 0}\nfunction create_if_block$1(ctx) {\n\tlet div1;\n\tlet div0;\n\tlet t;\n\tlet current_block_type_index;\n\tlet if_block;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tlet each_value = /*children*/ ctx[0];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i));\n\t}\n\n\tconst out = i => transition_out(each_blocks[i], 1, 1, () => {\n\t\teach_blocks[i] = null;\n\t});\n\n\tconst if_block_creators = [create_if_block_1, create_else_block];\n\tconst if_blocks = [];\n\n\tfunction select_block_type(ctx, dirty) {\n\t\tif (/*isFullscreen*/ ctx[2]) return 0;\n\t\treturn 1;\n\t}\n\n\tcurrent_block_type_index = select_block_type(ctx);\n\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\n\treturn {\n\t\tc() {\n\t\t\tdiv1 = element(\"div\");\n\t\t\tdiv0 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tt = space();\n\t\t\tif_block.c();\n\t\t\tattr(div0, \"class\", \"floating-panel scrollbar bg-gray-800 over border border-gray-800 rounded-lg shadow-lg flex flex-col overflow-x-hidden backdrop-blur-sm bg-opacity-20 transition-all duration-300 svelte-1lm5wxt\");\n\t\t\tset_style(div0, \"max-height\", \"calc(100vh - 64px - 16px)\");\n\t\t\tset_style(div0, \"overflow-y\", \"overlay\");\n\t\t\ttoggle_class(div0, \"w-0\", !/*open*/ ctx[1]);\n\t\t\ttoggle_class(div0, \"w-[200px]\", /*open*/ ctx[1]);\n\t\t\ttoggle_class(div0, \"mr-4\", !/*open*/ ctx[1]);\n\t\t\tattr(div1, \"class\", \"z-40 absolute flex flex-col items-end justify-start\");\n\t\t\ttoggle_class(div1, \"right-2\", !/*isFullscreen*/ ctx[2] || /*isFullscreen*/ ctx[2] && !/*open*/ ctx[1]);\n\t\t\ttoggle_class(div1, \"top-10\", !/*isFullscreen*/ ctx[2]);\n\t\t\ttoggle_class(div1, \"right-8\", /*isFullscreen*/ ctx[2] && /*open*/ ctx[1]);\n\t\t\ttoggle_class(div1, \"top-8\", /*isFullscreen*/ ctx[2]);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div1, anchor);\n\t\t\tappend(div1, div0);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div0, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tappend(div1, t);\n\t\t\tif_blocks[current_block_type_index].m(div1, null);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = action_destroyer(measureElement.call(null, div0, { height: /*panelHeight*/ ctx[5] }));\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty & /*children*/ 1) {\n\t\t\t\teach_value = /*children*/ ctx[0];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context$2(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block$2(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t\teach_blocks[i].m(div0, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_outros();\n\n\t\t\t\tfor (i = each_value.length; i < each_blocks.length; i += 1) {\n\t\t\t\t\tout(i);\n\t\t\t\t}\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(div0, \"w-0\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(div0, \"w-[200px]\", /*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(div0, \"mr-4\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tlet previous_block_index = current_block_type_index;\n\t\t\tcurrent_block_type_index = select_block_type(ctx);\n\n\t\t\tif (current_block_type_index === previous_block_index) {\n\t\t\t\tif_blocks[current_block_type_index].p(ctx, dirty);\n\t\t\t} else {\n\t\t\t\tgroup_outros();\n\n\t\t\t\ttransition_out(if_blocks[previous_block_index], 1, 1, () => {\n\t\t\t\t\tif_blocks[previous_block_index] = null;\n\t\t\t\t});\n\n\t\t\t\tcheck_outros();\n\t\t\t\tif_block = if_blocks[current_block_type_index];\n\n\t\t\t\tif (!if_block) {\n\t\t\t\t\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t} else {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t\t}\n\n\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\tif_block.m(div1, null);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen, open*/ 6) {\n\t\t\t\ttoggle_class(div1, \"right-2\", !/*isFullscreen*/ ctx[2] || /*isFullscreen*/ ctx[2] && !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen*/ 4) {\n\t\t\t\ttoggle_class(div1, \"top-10\", !/*isFullscreen*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen, open*/ 6) {\n\t\t\t\ttoggle_class(div1, \"right-8\", /*isFullscreen*/ ctx[2] && /*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen*/ 4) {\n\t\t\t\ttoggle_class(div1, \"top-8\", /*isFullscreen*/ ctx[2]);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\t\t\ttransition_in(each_blocks[i]);\n\t\t\t}\n\n\t\t\ttransition_in(if_block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\teach_blocks = each_blocks.filter(Boolean);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\ttransition_out(each_blocks[i]);\n\t\t\t}\n\n\t\t\ttransition_out(if_block);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div1);\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t\tif_blocks[current_block_type_index].d();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\n// (44:3) {#each children as child}\nfunction create_each_block$2(ctx) {\n\tlet div;\n\tlet switch_instance;\n\tlet t;\n\tlet div_class_value;\n\tlet current;\n\n\tconst switch_instance_spread_levels = [\n\t\t{ value: /*child*/ ctx[10].value },\n\t\t{ setValue: /*child*/ ctx[10].setValue },\n\t\t{ children: /*child*/ ctx[10].children },\n\t\t/*child*/ ctx[10].options\n\t];\n\n\tvar switch_value = /*child*/ ctx[10].type;\n\n\tfunction switch_props(ctx) {\n\t\tlet switch_instance_props = {};\n\n\t\tfor (let i = 0; i < switch_instance_spread_levels.length; i += 1) {\n\t\t\tswitch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);\n\t\t}\n\n\t\treturn { props: switch_instance_props };\n\t}\n\n\tif (switch_value) {\n\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tif (switch_instance) create_component(switch_instance.$$.fragment);\n\t\t\tt = space();\n\t\t\tattr(div, \"class\", div_class_value = \"min-w-[200px] control-\" + /*child*/ ctx[10].name + \" svelte-1lm5wxt\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tif (switch_instance) mount_component(switch_instance, div, null);\n\t\t\tappend(div, t);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tconst switch_instance_changes = (dirty & /*children*/ 1)\n\t\t\t? get_spread_update(switch_instance_spread_levels, [\n\t\t\t\t\t{ value: /*child*/ ctx[10].value },\n\t\t\t\t\t{ setValue: /*child*/ ctx[10].setValue },\n\t\t\t\t\t{ children: /*child*/ ctx[10].children },\n\t\t\t\t\tget_spread_object(/*child*/ ctx[10].options)\n\t\t\t\t])\n\t\t\t: {};\n\n\t\t\tif (dirty & /*children*/ 1 && switch_value !== (switch_value = /*child*/ ctx[10].type)) {\n\t\t\t\tif (switch_instance) {\n\t\t\t\t\tgroup_outros();\n\t\t\t\t\tconst old_component = switch_instance;\n\n\t\t\t\t\ttransition_out(old_component.$$.fragment, 1, 0, () => {\n\t\t\t\t\t\tdestroy_component(old_component, 1);\n\t\t\t\t\t});\n\n\t\t\t\t\tcheck_outros();\n\t\t\t\t}\n\n\t\t\t\tif (switch_value) {\n\t\t\t\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t\t\t\t\tcreate_component(switch_instance.$$.fragment);\n\t\t\t\t\ttransition_in(switch_instance.$$.fragment, 1);\n\t\t\t\t\tmount_component(switch_instance, div, t);\n\t\t\t\t} else {\n\t\t\t\t\tswitch_instance = null;\n\t\t\t\t}\n\t\t\t} else if (switch_value) {\n\t\t\t\tswitch_instance.$set(switch_instance_changes);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*children*/ 1 && div_class_value !== (div_class_value = \"min-w-[200px] control-\" + /*child*/ ctx[10].name + \" svelte-1lm5wxt\")) {\n\t\t\t\tattr(div, \"class\", div_class_value);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\tif (switch_instance) transition_in(switch_instance.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (switch_instance) transition_out(switch_instance.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (switch_instance) destroy_component(switch_instance);\n\t\t}\n\t};\n}\n\n// (80:2) {:else}\nfunction create_else_block(ctx) {\n\tlet button;\n\tlet svg;\n\tlet path0;\n\tlet path1;\n\tlet button_transition;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tsvg = svg_element(\"svg\");\n\t\t\tpath0 = svg_element(\"path\");\n\t\t\tpath1 = svg_element(\"path\");\n\t\t\tattr(path0, \"d\", \"M0 0h24v24H0V0z\");\n\t\t\tattr(path0, \"fill\", \"none\");\n\t\t\tattr(path1, \"d\", \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\");\n\t\t\tattr(svg, \"class\", \"transition-all duration-300 transform max-w-[16px]\");\n\t\t\tattr(svg, \"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\t\tattr(svg, \"height\", \"24px\");\n\t\t\tattr(svg, \"viewBox\", \"0 0 24 24\");\n\t\t\tattr(svg, \"width\", \"24px\");\n\t\t\tattr(svg, \"fill\", \"#fff\");\n\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\tattr(button, \"class\", \"bg-gray-700 rounded-r-md shadow-lg backdrop-blur-sm bg-opacity-30 w-4 h-4 flex items-center justify-center transition-all duration-300\");\n\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] / 2 + 8)) + \"px\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tappend(button, svg);\n\t\t\tappend(svg, path0);\n\t\t\tappend(svg, path1);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", /*click_handler_1*/ ctx[9]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open, $panelHeight*/ 18) {\n\t\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] / 2 + 8)) + \"px\");\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tadd_render_callback(() => {\n\t\t\t\tif (!current) return;\n\t\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, true);\n\t\t\t\tbutton_transition.run(1);\n\t\t\t});\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, false);\n\t\t\tbutton_transition.run(0);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tif (detaching && button_transition) button_transition.end();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\n// (57:2) {#if isFullscreen}\nfunction create_if_block_1(ctx) {\n\tlet button;\n\tlet svg;\n\tlet path0;\n\tlet path1;\n\tlet button_transition;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tsvg = svg_element(\"svg\");\n\t\t\tpath0 = svg_element(\"path\");\n\t\t\tpath1 = svg_element(\"path\");\n\t\t\tattr(path0, \"d\", \"M0 0h24v24H0V0z\");\n\t\t\tattr(path0, \"fill\", \"none\");\n\t\t\tattr(path1, \"d\", \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\");\n\t\t\tattr(svg, \"class\", \"transition-all duration-300 transform max-w-[16px]\");\n\t\t\tattr(svg, \"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\t\tattr(svg, \"height\", \"24px\");\n\t\t\tattr(svg, \"viewBox\", \"0 0 24 24\");\n\t\t\tattr(svg, \"width\", \"24px\");\n\t\t\tattr(svg, \"fill\", \"#fff\");\n\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\tattr(button, \"class\", \"bg-gray-700 rounded-md shadow-lg backdrop-blur-sm bg-opacity-30 w-4 h-4 flex items-center justify-center transition-all duration-300\");\n\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] + 8)) + \"px\");\n\t\t\ttoggle_class(button, \"mr-4\", !/*open*/ ctx[1]);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tappend(button, svg);\n\t\t\tappend(svg, path0);\n\t\t\tappend(svg, path1);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", /*click_handler*/ ctx[8]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open, $panelHeight*/ 18) {\n\t\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] + 8)) + \"px\");\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(button, \"mr-4\", !/*open*/ ctx[1]);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tadd_render_callback(() => {\n\t\t\t\tif (!current) return;\n\t\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, true);\n\t\t\t\tbutton_transition.run(1);\n\t\t\t});\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, false);\n\t\t\tbutton_transition.run(0);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tif (detaching && button_transition) button_transition.end();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction create_fragment$5(ctx) {\n\tlet html_tag;\n\tlet t;\n\tlet if_block_anchor;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tlet if_block = /*children*/ ctx[0].length > 0 && create_if_block$1(ctx);\n\n\treturn {\n\t\tc() {\n\t\t\thtml_tag = new HtmlTag(false);\n\t\t\tt = space();\n\t\t\tif (if_block) if_block.c();\n\t\t\tif_block_anchor = empty();\n\t\t\thtml_tag.a = t;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\thtml_tag.m(/*styleStr*/ ctx[3], target, anchor);\n\t\t\tinsert(target, t, anchor);\n\t\t\tif (if_block) if_block.m(target, anchor);\n\t\t\tinsert(target, if_block_anchor, anchor);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(window_1, \"resize\", /*resize_handler*/ ctx[7]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (!current || dirty & /*styleStr*/ 8) html_tag.p(/*styleStr*/ ctx[3]);\n\n\t\t\tif (/*children*/ ctx[0].length > 0) {\n\t\t\t\tif (if_block) {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\n\t\t\t\t\tif (dirty & /*children*/ 1) {\n\t\t\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif_block = create_if_block$1(ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\t\tif_block.m(if_block_anchor.parentNode, if_block_anchor);\n\t\t\t\t}\n\t\t\t} else if (if_block) {\n\t\t\t\tgroup_outros();\n\n\t\t\t\ttransition_out(if_block, 1, 1, () => {\n\t\t\t\t\tif_block = null;\n\t\t\t\t});\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\ttransition_in(if_block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\ttransition_out(if_block);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) html_tag.d();\n\t\t\tif (detaching) detach(t);\n\t\t\tif (if_block) if_block.d(detaching);\n\t\t\tif (detaching) detach(if_block_anchor);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance$5($$self, $$props, $$invalidate) {\n\tlet shouldPush;\n\tlet styleStr;\n\tlet $panelHeight;\n\tlet { children = [] } = $$props;\n\tlet panelHeight = writable(0);\n\tcomponent_subscribe($$self, panelHeight, value => $$invalidate(4, $panelHeight = value));\n\tlet open = true;\n\tlet isFullscreen = false;\n\n\tonMount(() => {\n\t\t$$invalidate(2, isFullscreen = window.innerHeight >= screen.height);\n\t});\n\n\tconst resize_handler = () => {\n\t\t$$invalidate(2, isFullscreen = window.innerHeight >= screen.height);\n\t};\n\n\tconst click_handler = () => {\n\t\t$$invalidate(1, open = !open);\n\t};\n\n\tconst click_handler_1 = () => {\n\t\t$$invalidate(1, open = !open);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('children' in $$props) $$invalidate(0, children = $$props.children);\n\t};\n\n\t$$self.$$.update = () => {\n\t\tif ($$self.$$.dirty & /*open, children*/ 3) {\n\t\t\t$$invalidate(6, shouldPush = open && children && children.length > 0);\n\t\t}\n\n\t\tif ($$self.$$.dirty & /*shouldPush*/ 64) {\n\t\t\t$$invalidate(3, styleStr = `<style> .stater {\n\t\ttransition: 0.2s all;\n\t\t\n\t\tmargin-right: ${shouldPush ? '186px;' : '0px'}\n\t\tmargin-top: ${shouldPush ? '4px;' : '0px'}\n\t}</style>`);\n\t\t}\n\t};\n\n\treturn [\n\t\tchildren,\n\t\topen,\n\t\tisFullscreen,\n\t\tstyleStr,\n\t\t$panelHeight,\n\t\tpanelHeight,\n\t\tshouldPush,\n\t\tresize_handler,\n\t\tclick_handler,\n\t\tclick_handler_1\n\t];\n}\n\nclass FloatingPanel extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$5, create_fragment$5, safe_not_equal, { children: 0 });\n\t}\n}\n\nconst host = '';\n\n/* ui/components/Host.svelte generated by Svelte v3.59.2 */\n\nfunction get_each_context$1(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[1] = list[i];\n\treturn child_ctx;\n}\n\n// (7:1) {#each children as child}\nfunction create_each_block$1(ctx) {\n\tlet switch_instance;\n\tlet switch_instance_anchor;\n\tlet current;\n\n\tconst switch_instance_spread_levels = [\n\t\t{ value: /*child*/ ctx[1].value },\n\t\t{ setValue: /*child*/ ctx[1].setValue },\n\t\t{ children: /*child*/ ctx[1].children },\n\t\t/*child*/ ctx[1].options\n\t];\n\n\tvar switch_value = /*child*/ ctx[1].type;\n\n\tfunction switch_props(ctx) {\n\t\tlet switch_instance_props = {};\n\n\t\tfor (let i = 0; i < switch_instance_spread_levels.length; i += 1) {\n\t\t\tswitch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);\n\t\t}\n\n\t\treturn { props: switch_instance_props };\n\t}\n\n\tif (switch_value) {\n\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tif (switch_instance) create_component(switch_instance.$$.fragment);\n\t\t\tswitch_instance_anchor = empty();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tif (switch_instance) mount_component(switch_instance, target, anchor);\n\t\t\tinsert(target, switch_instance_anchor, anchor);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tconst switch_instance_changes = (dirty & /*children*/ 1)\n\t\t\t? get_spread_update(switch_instance_spread_levels, [\n\t\t\t\t\t{ value: /*child*/ ctx[1].value },\n\t\t\t\t\t{ setValue: /*child*/ ctx[1].setValue },\n\t\t\t\t\t{ children: /*child*/ ctx[1].children },\n\t\t\t\t\tget_spread_object(/*child*/ ctx[1].options)\n\t\t\t\t])\n\t\t\t: {};\n\n\t\t\tif (dirty & /*children*/ 1 && switch_value !== (switch_value = /*child*/ ctx[1].type)) {\n\t\t\t\tif (switch_instance) {\n\t\t\t\t\tgroup_outros();\n\t\t\t\t\tconst old_component = switch_instance;\n\n\t\t\t\t\ttransition_out(old_component.$$.fragment, 1, 0, () => {\n\t\t\t\t\t\tdestroy_component(old_component, 1);\n\t\t\t\t\t});\n\n\t\t\t\t\tcheck_outros();\n\t\t\t\t}\n\n\t\t\t\tif (switch_value) {\n\t\t\t\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t\t\t\t\tcreate_component(switch_instance.$$.fragment);\n\t\t\t\t\ttransition_in(switch_instance.$$.fragment, 1);\n\t\t\t\t\tmount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor);\n\t\t\t\t} else {\n\t\t\t\t\tswitch_instance = null;\n\t\t\t\t}\n\t\t\t} else if (switch_value) {\n\t\t\t\tswitch_instance.$set(switch_instance_changes);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\tif (switch_instance) transition_in(switch_instance.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (switch_instance) transition_out(switch_instance.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(switch_instance_anchor);\n\t\t\tif (switch_instance) destroy_component(switch_instance, detaching);\n\t\t}\n\t};\n}\n\nfunction create_fragment$4(ctx) {\n\tlet div;\n\tlet current;\n\tlet each_value = /*children*/ ctx[0];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i));\n\t}\n\n\tconst out = i => transition_out(each_blocks[i], 1, 1, () => {\n\t\teach_blocks[i] = null;\n\t});\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tattr(div, \"class\", \"host\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*children*/ 1) {\n\t\t\t\teach_value = /*children*/ ctx[0];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context$1(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block$1(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t\teach_blocks[i].m(div, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_outros();\n\n\t\t\t\tfor (i = each_value.length; i < each_blocks.length; i += 1) {\n\t\t\t\t\tout(i);\n\t\t\t\t}\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\t\t\ttransition_in(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\teach_blocks = each_blocks.filter(Boolean);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\ttransition_out(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t}\n\t};\n}\n\nfunction instance$4($$self, $$props, $$invalidate) {\n\tlet { children } = $$props;\n\n\t$$self.$$set = $$props => {\n\t\tif ('children' in $$props) $$invalidate(0, children = $$props.children);\n\t};\n\n\treturn [children];\n}\n\nclass Host extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$4, create_fragment$4, safe_not_equal, { children: 0 });\n\t}\n}\n\n/* ui/components/Group.svelte generated by Svelte v3.59.2 */\n\nfunction get_each_context(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[6] = list[i];\n\tchild_ctx[8] = i;\n\treturn child_ctx;\n}\n\n// (43:2) {#each children as child, i}\nfunction create_each_block(ctx) {\n\tlet div;\n\tlet switch_instance;\n\tlet t;\n\tlet div_class_value;\n\tlet current;\n\n\tconst switch_instance_spread_levels = [\n\t\t{ value: /*child*/ ctx[6].value },\n\t\t{ setValue: /*child*/ ctx[6].setValue },\n\t\t{ children: /*child*/ ctx[6].children },\n\t\t/*child*/ ctx[6].options\n\t];\n\n\tvar switch_value = /*child*/ ctx[6].type;\n\n\tfunction switch_props(ctx) {\n\t\tlet switch_instance_props = {};\n\n\t\tfor (let i = 0; i < switch_instance_spread_levels.length; i += 1) {\n\t\t\tswitch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);\n\t\t}\n\n\t\treturn { props: switch_instance_props };\n\t}\n\n\tif (switch_value) {\n\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tif (switch_instance) create_component(switch_instance.$$.fragment);\n\t\t\tt = space();\n\t\t\tattr(div, \"class\", div_class_value = \"min-w-[200px - 16px] bg-gray-500 bg-opacity-5 control-\" + /*child*/ ctx[6].name);\n\t\t\ttoggle_class(div, \"rounded-b-md\", /*i*/ ctx[8] === /*children*/ ctx[1].length - 1);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tif (switch_instance) mount_component(switch_instance, div, null);\n\t\t\tappend(div, t);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tconst switch_instance_changes = (dirty & /*children*/ 2)\n\t\t\t? get_spread_update(switch_instance_spread_levels, [\n\t\t\t\t\t{ value: /*child*/ ctx[6].value },\n\t\t\t\t\t{ setValue: /*child*/ ctx[6].setValue },\n\t\t\t\t\t{ children: /*child*/ ctx[6].children },\n\t\t\t\t\tget_spread_object(/*child*/ ctx[6].options)\n\t\t\t\t])\n\t\t\t: {};\n\n\t\t\tif (dirty & /*children*/ 2 && switch_value !== (switch_value = /*child*/ ctx[6].type)) {\n\t\t\t\tif (switch_instance) {\n\t\t\t\t\tgroup_outros();\n\t\t\t\t\tconst old_component = switch_instance;\n\n\t\t\t\t\ttransition_out(old_component.$$.fragment, 1, 0, () => {\n\t\t\t\t\t\tdestroy_component(old_component, 1);\n\t\t\t\t\t});\n\n\t\t\t\t\tcheck_outros();\n\t\t\t\t}\n\n\t\t\t\tif (switch_value) {\n\t\t\t\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t\t\t\t\tcreate_component(switch_instance.$$.fragment);\n\t\t\t\t\ttransition_in(switch_instance.$$.fragment, 1);\n\t\t\t\t\tmount_component(switch_instance, div, t);\n\t\t\t\t} else {\n\t\t\t\t\tswitch_instance = null;\n\t\t\t\t}\n\t\t\t} else if (switch_value) {\n\t\t\t\tswitch_instance.$set(switch_instance_changes);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*children*/ 2 && div_class_value !== (div_class_value = \"min-w-[200px - 16px] bg-gray-500 bg-opacity-5 control-\" + /*child*/ ctx[6].name)) {\n\t\t\t\tattr(div, \"class\", div_class_value);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*children, children*/ 2) {\n\t\t\t\ttoggle_class(div, \"rounded-b-md\", /*i*/ ctx[8] === /*children*/ ctx[1].length - 1);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\tif (switch_instance) transition_in(switch_instance.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (switch_instance) transition_out(switch_instance.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (switch_instance) destroy_component(switch_instance);\n\t\t}\n\t};\n}\n\nfunction create_fragment$3(ctx) {\n\tlet div0;\n\tlet button;\n\tlet span0;\n\tlet svg;\n\tlet path0;\n\tlet path1;\n\tlet t0;\n\tlet span1;\n\tlet t1;\n\tlet t2;\n\tlet t3;\n\tlet t4;\n\tlet div2;\n\tlet div1;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tlet each_value = /*children*/ ctx[1];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));\n\t}\n\n\tconst out = i => transition_out(each_blocks[i], 1, 1, () => {\n\t\teach_blocks[i] = null;\n\t});\n\n\treturn {\n\t\tc() {\n\t\t\tdiv0 = element(\"div\");\n\t\t\tbutton = element(\"button\");\n\t\t\tspan0 = element(\"span\");\n\t\t\tsvg = svg_element(\"svg\");\n\t\t\tpath0 = svg_element(\"path\");\n\t\t\tpath1 = svg_element(\"path\");\n\t\t\tt0 = space();\n\t\t\tspan1 = element(\"span\");\n\t\t\tt1 = text(/*value*/ ctx[0]);\n\t\t\tt2 = space();\n\t\t\tt3 = text(/*$height*/ ctx[3]);\n\t\t\tt4 = space();\n\t\t\tdiv2 = element(\"div\");\n\t\t\tdiv1 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tattr(path0, \"d\", \"M0 0h24v24H0V0z\");\n\t\t\tattr(path0, \"fill\", \"none\");\n\t\t\tattr(path1, \"d\", \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\");\n\t\t\tattr(svg, \"class\", \"transition-all duration-300 transform max-w-[16px]\");\n\t\t\tattr(svg, \"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\t\tattr(svg, \"height\", \"24px\");\n\t\t\tattr(svg, \"viewBox\", \"0 0 24 24\");\n\t\t\tattr(svg, \"width\", \"24px\");\n\t\t\tattr(svg, \"fill\", \"#fff\");\n\t\t\ttoggle_class(svg, \"rotate-90\", /*open*/ ctx[2]);\n\t\t\tattr(span0, \"class\", \"w-4 h-4 ml-1 opacity-50 flex items-center justify-center rounded-md\");\n\t\t\tattr(span1, \"class\", \"flex-1 ml-2 text-left text-sm text-white text-opacity-75\");\n\t\t\tattr(button, \"class\", \"flex flex-row items-center mx-1 bg-gray-500 bg-opacity-5\");\n\t\t\ttoggle_class(button, \"rounded-md\", !/*open*/ ctx[2]);\n\t\t\ttoggle_class(button, \"rounded-t-md\", /*open*/ ctx[2]);\n\t\t\tattr(div0, \"class\", \"flex flex-col\");\n\t\t\tattr(div1, \"class\", \"flex flex-col mx-1\");\n\t\t\tattr(div2, \"class\", \"transition-all mb-1 flex flex-col\");\n\t\t\tset_style(div2, \"max-height\", (/*open*/ ctx[2] ? /*$height*/ ctx[3] : 0) + \"px\");\n\t\t\tset_style(div2, \"overflow\", \"hidden\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div0, anchor);\n\t\t\tappend(div0, button);\n\t\t\tappend(button, span0);\n\t\t\tappend(span0, svg);\n\t\t\tappend(svg, path0);\n\t\t\tappend(svg, path1);\n\t\t\tappend(button, t0);\n\t\t\tappend(button, span1);\n\t\t\tappend(span1, t1);\n\t\t\tappend(span1, t2);\n\t\t\tappend(span1, t3);\n\t\t\tinsert(target, t4, anchor);\n\t\t\tinsert(target, div2, anchor);\n\t\t\tappend(div2, div1);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div1, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(button, \"click\", /*click_handler*/ ctx[5]),\n\t\t\t\t\taction_destroyer(measureElement.call(null, div1, { height: /*height*/ ctx[4] }))\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (!current || dirty & /*open*/ 4) {\n\t\t\t\ttoggle_class(svg, \"rotate-90\", /*open*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*value*/ 1) set_data(t1, /*value*/ ctx[0]);\n\t\t\tif (!current || dirty & /*$height*/ 8) set_data(t3, /*$height*/ ctx[3]);\n\n\t\t\tif (!current || dirty & /*open*/ 4) {\n\t\t\t\ttoggle_class(button, \"rounded-md\", !/*open*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 4) {\n\t\t\t\ttoggle_class(button, \"rounded-t-md\", /*open*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty & /*children*/ 2) {\n\t\t\t\teach_value = /*children*/ ctx[1];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t\teach_blocks[i].m(div1, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_outros();\n\n\t\t\t\tfor (i = each_value.length; i < each_blocks.length; i += 1) {\n\t\t\t\t\tout(i);\n\t\t\t\t}\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open, $height*/ 12) {\n\t\t\t\tset_style(div2, \"max-height\", (/*open*/ ctx[2] ? /*$height*/ ctx[3] : 0) + \"px\");\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\t\t\ttransition_in(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\teach_blocks = each_blocks.filter(Boolean);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\ttransition_out(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div0);\n\t\t\tif (detaching) detach(t4);\n\t\t\tif (detaching) detach(div2);\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance$3($$self, $$props, $$invalidate) {\n\tlet $height;\n\tlet { value } = $$props;\n\tlet { children } = $$props;\n\tlet open = true;\n\tlet height = writable(0);\n\tcomponent_subscribe($$self, height, value => $$invalidate(3, $height = value));\n\n\tconst click_handler = () => {\n\t\t$$invalidate(2, open = !open);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('children' in $$props) $$invalidate(1, children = $$props.children);\n\t};\n\n\treturn [value, children, open, $height, height, click_handler];\n}\n\nclass Group extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$3, create_fragment$3, safe_not_equal, { value: 0, children: 1 });\n\t}\n}\n\nconst Checkbox_svelte_svelte_type_style_lang = '';\n\n/* ui/components/Checkbox.svelte generated by Svelte v3.59.2 */\n\nfunction create_if_block(ctx) {\n\tlet div;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tattr(div, \"class\", \"w-2 h-2 rounded-sm bg-purple-600 \");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t}\n\t};\n}\n\nfunction create_fragment$2(ctx) {\n\tlet div;\n\tlet button;\n\tlet t;\n\tlet input;\n\tlet mounted;\n\tlet dispose;\n\tlet if_block = /*value*/ ctx[0] && create_if_block();\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tbutton = element(\"button\");\n\t\t\tif (if_block) if_block.c();\n\t\t\tt = space();\n\t\t\tinput = element(\"input\");\n\t\t\tattr(button, \"class\", \"rounded-md border border-gray-600 bg-gray-900 w-4 h-4 cursor-pointer flex items-center justify-center\");\n\t\t\tset_style(input, \"display\", \"none\");\n\t\t\tinput.hidden = true;\n\t\t\tattr(input, \"type\", \"checkbox\");\n\t\t\tinput.checked = /*value*/ ctx[0];\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1 flex flex-row items-center justify-end\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, button);\n\t\t\tif (if_block) if_block.m(button, null);\n\t\t\tappend(div, t);\n\t\t\tappend(div, input);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(button, \"click\", /*click_handler*/ ctx[2]),\n\t\t\t\t\tlisten(input, \"input\", /*input_handler*/ ctx[3])\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (/*value*/ ctx[0]) {\n\t\t\t\tif (if_block) ; else {\n\t\t\t\t\tif_block = create_if_block();\n\t\t\t\t\tif_block.c();\n\t\t\t\t\tif_block.m(button, null);\n\t\t\t\t}\n\t\t\t} else if (if_block) {\n\t\t\t\tif_block.d(1);\n\t\t\t\tif_block = null;\n\t\t\t}\n\n\t\t\tif (dirty & /*value*/ 1) {\n\t\t\t\tinput.checked = /*value*/ ctx[0];\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (if_block) if_block.d();\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance$2($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst click_handler = event => {\n\t\t$$invalidate(0, value = !value);\n\t\tsetValue(value);\n\t};\n\n\tconst input_handler = e => {\n\t\tsetValue(e.target.checked);\n\t\t$$invalidate(0, value = e.target.checked);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('setValue' in $$props) $$invalidate(1, setValue = $$props.setValue);\n\t};\n\n\treturn [value, setValue, click_handler, input_handler];\n}\n\nclass Checkbox extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$2, create_fragment$2, safe_not_equal, { value: 0, setValue: 1 });\n\t}\n}\n\n/* ui/components/Button.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment$1(ctx) {\n\tlet div;\n\tlet button;\n\tlet t;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tbutton = element(\"button\");\n\t\t\tt = text(/*text*/ ctx[0]);\n\t\t\tattr(button, \"class\", \"rounded-md hover:border-purple-600 border border-gray-600 bg-gray-900 w-full cursor-pointer flex items-center justify-center\");\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1 flex\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, button);\n\t\t\tappend(button, t);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", /*click_handler*/ ctx[2]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]);\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance$1($$self, $$props, $$invalidate) {\n\tlet { text } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst click_handler = event => {\n\t\tsetValue(true);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('text' in $$props) $$invalidate(0, text = $$props.text);\n\t\tif ('setValue' in $$props) $$invalidate(1, setValue = $$props.setValue);\n\t};\n\n\treturn [text, setValue, click_handler];\n}\n\nclass Button extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$1, create_fragment$1, safe_not_equal, { text: 0, setValue: 1 });\n\t}\n}\n\n/* ui/components/Text.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment(ctx) {\n\tlet div;\n\tlet input;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tinput = element(\"input\");\n\t\t\tattr(input, \"class\", \"outline-none border border-gray-600 bg-gray-800 bg-opacity-30 p-0.5 px-1 text-sm w-full rounded-md\");\n\t\t\tattr(input, \"type\", \"text\");\n\t\t\tinput.value = /*value*/ ctx[0];\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, input);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(input, \"input\", /*input_handler*/ ctx[2]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*value*/ 1 && input.value !== /*value*/ ctx[0]) {\n\t\t\t\tinput.value = /*value*/ ctx[0];\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst input_handler = e => {\n\t\tsetValue(e.target.value);\n\t\t$$invalidate(0, value = e.target.value);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('setValue' in $$props) $$invalidate(1, setValue = $$props.setValue);\n\t};\n\n\treturn [value, setValue, input_handler];\n}\n\nclass Text extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance, create_fragment, safe_not_equal, { value: 0, setValue: 1 });\n\t}\n}\n\nfunction initPuck(canvas) {\n  let uiContainer = document.querySelector(\".ui-container\");\n  let puckDown = false;\n  let puckId = \"\";\n  let pucks = {};\n  function blankUISink() {\n    return {\n      knob: /* @__PURE__ */ new Map(),\n      knobCounter: 0,\n      button: /* @__PURE__ */ new Map(),\n      buttonCounter: 0,\n      switch: /* @__PURE__ */ new Map(),\n      switchCounter: 0,\n      slider: /* @__PURE__ */ new Map(),\n      sliderCounter: 0,\n      puck: /* @__PURE__ */ new Map(),\n      puckCounter: 0\n    };\n  }\n  let uiSink = blankUISink();\n  let uiSinkLastFrame = blankUISink();\n  window.addEventListener(\"mousedown\", (e) => {\n    if (e.target.closest(\".puck\")) {\n      let p = e.target.closest(\".puck\");\n      p.dataset.down = true;\n      let mp = getPosRelativeToCanvas([e.clientX, e.clientY]);\n      let rect = p.getBoundingClientRect();\n      let pmp = getPosRelativeToCanvas([rect.left + rect.width / 2, rect.top + rect.height / 2]);\n      p.dataset.offsetX = pmp[0] - mp[0];\n      p.dataset.offsetY = pmp[1] - mp[1];\n      puckId = p.dataset.id;\n      puckDown = true;\n      lastPuckPos = [...pmp];\n      updateDocumentCursor();\n    }\n  });\n  function updateDocumentCursor() {\n    if (puckDown) {\n      document.body.style.cursor = \"grabbing\";\n    } else {\n      document.body.style.cursor = \"default\";\n    }\n  }\n  window.addEventListener(\"mouseup\", (e) => {\n    puckDown = false;\n    updateDocumentCursor();\n    for (let el of [...document.querySelectorAll(\".puck\")]) {\n      let p = el;\n      if (p.dataset.down == \"true\") {\n        p.dataset.down = \"false\";\n      }\n    }\n  });\n  function getPosRelativeToCanvas(pos) {\n    let rect = canvas.getBoundingClientRect();\n    return [\n      (pos[0] - rect.left) / rect.width * canvas.width,\n      (pos[1] - rect.top) / rect.height * canvas.height\n    ];\n  }\n  const host = new Host({\n    target: document.body,\n    props: {\n      children: []\n    }\n  });\n  host.$on(\"init\", (e) => {\n  });\n  let lastPuckPos = [0, 0];\n  window.addEventListener(\"mousemove\", (e) => {\n    if (!puckDown)\n      return;\n    let puck = document.querySelector(`.puck[data-id=\"${puckId}\"]`);\n    if (!puck)\n      return;\n    let [x, y] = getPosRelativeToCanvas([e.clientX, e.clientY]);\n    let velocityX = x - lastPuckPos[0];\n    let velocityY = y - lastPuckPos[1];\n    let vectorLength = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n    let angle = Math.atan2(velocityY, velocityX);\n    let oldVel = parseFloat(puck.dataset.velocity ?? \"0\");\n    puck.dataset.velocity = (oldVel + vectorLength).toString();\n    let oldAngle = parseFloat(puck.dataset.angle ?? \"0\");\n    let oldDirVelX = oldVel * Math.cos(oldAngle);\n    let oldDirVelY = oldVel * Math.sin(oldAngle);\n    let newDirVelX = vectorLength * Math.cos(angle);\n    let newDirVelY = vectorLength * Math.sin(angle);\n    puck.dataset.angle = Math.atan2(oldDirVelY + newDirVelY, oldDirVelX + newDirVelX).toString();\n    lastPuckPos = [x, y];\n    puck.dataset.oldX = puck.offsetLeft.toString();\n    puck.dataset.oldY = puck.offsetTop.toString();\n    x += parseInt(puck.dataset.offsetX ?? \"0\");\n    y += parseInt(puck.dataset.offsetY ?? \"0\");\n    uiSinkLastFrame.puck.set(puckId, { vec: [x, y] });\n  });\n  setInterval(() => {\n    for (let el of [...document.querySelectorAll(\".puck\")]) {\n      let p = el;\n      let maxSpeed = 105;\n      let restitution = 0.75;\n      p.dataset.velocity = Math.max(\n        Math.min(parseFloat(p.dataset.velocity ?? \"0\") * restitution, maxSpeed),\n        -maxSpeed\n      ).toString();\n      let angle = parseFloat(p.dataset.angle ?? \"0\");\n      let velocity = parseFloat(p.dataset.velocity ?? \"0\") / 5;\n      if (p.dataset.down == \"true\")\n        continue;\n      {\n        if (uiSink.puck.has(p.dataset.id) && velocity > 1) {\n          let { vec } = uiSink.puck.get(p.dataset.id);\n          uiSinkLastFrame.puck.set(p.dataset.id, {\n            vec: [vec[0] + Math.cos(angle) * velocity, vec[1] + Math.sin(angle) * velocity]\n          });\n        }\n      }\n    }\n  }, 1e3 / 60);\n  const SIMPLE_MATH = {\n    clamp(a, min, max) {\n      return Math.min(Math.max(a, min), max);\n    },\n    clamp2(a, min, max) {\n      return [this.clamp(a[0], min[0], max[0]), this.clamp(a[1], min[1], max[1])];\n    }\n  };\n  function _SHADEUP_UI_PUCK(vec, radius = 10, invisible = false) {\n    let id = uiSink.puckCounter++;\n    uiSink.puck.set(id.toString(), {\n      vec: [...vec]\n    });\n    addPuck(id.toString(), vec, radius, invisible);\n    if (uiSinkLastFrame.puck.has(id.toString())) {\n      return SIMPLE_MATH.clamp2(\n        uiSinkLastFrame.puck.get(id.toString()).vec,\n        [0, 0],\n        [canvas.width, canvas.height]\n      );\n    } else {\n      return [...vec];\n    }\n  }\n  function addPuck(name, puck, radius = 10, invisible = false) {\n    puck = [puck[0] / canvas.width, puck[1] / canvas.height];\n    if (pucks[name]) {\n      pucks[name].div.style.left = `calc(${puck[0] * 100}% - ${radius}px)`;\n      pucks[name].div.style.top = `calc(${puck[1] * 100}% - ${radius}px)`;\n      pucks[name].div.style.opacity = invisible ? \"0\" : \"1\";\n      pucks[name].div.style.width = `${radius * 2}px`;\n      pucks[name].div.style.height = `${radius * 2}px`;\n      return;\n    }\n    let div = document.createElement(\"div\");\n    div.className = \"puck\";\n    div.dataset.id = name;\n    div.innerHTML = `<span><svg style=\"width: 10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill=\"#505050\" d=\"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40H40c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40H200c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40H360c-22.1 0-40 17.9-40 40v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328z\"/></svg></span>`;\n    div.style.width = `${radius * 2}px`;\n    div.style.height = `${radius * 2}px`;\n    div.style.opacity = invisible ? \"0\" : \"1\";\n    uiContainer.appendChild(div);\n    pucks[name] = {\n      div,\n      puck\n    };\n  }\n  let hostChildren = [];\n  let childrenCrumbs = [];\n  let rootChild;\n  let preFrameHandlers = [];\n  let postFrameHandlers = [];\n  function createImmediateModeUIElement(type, component, canHaveChildren = false) {\n    let els = /* @__PURE__ */ new Map();\n    function blankUISink2() {\n      return {\n        map: /* @__PURE__ */ new Map(),\n        counter: 0\n      };\n    }\n    let uiSink2 = blankUISink2();\n    let uiSinkLastFrame2 = blankUISink2();\n    preFrameHandlers.push(() => {\n      uiSink2 = blankUISink2();\n    });\n    postFrameHandlers.push(() => {\n      for (let name of els.keys()) {\n        if (!uiSink2.map.has(name)) ;\n      }\n      uiSinkLastFrame2 = blankUISink2();\n    });\n    function invoke(value, options = {}) {\n      let id = uiSink2.counter++;\n      uiSink2.map.set(id.toString(), {\n        value,\n        options\n      });\n      addControl(\n        id.toString(),\n        {\n          value,\n          options\n        },\n        canHaveChildren\n      );\n      if (uiSinkLastFrame2.map.has(id.toString())) {\n        return uiSinkLastFrame2.map.get(id.toString()).value;\n      } else {\n        return value;\n      }\n    }\n    function addControl(name, v, canHaveChildren2 = false) {\n      if (els.has(name)) {\n        els.get(name).$set({\n          value: v.value,\n          ...v.options\n        });\n        return;\n      }\n      function setValue(v2) {\n        uiSinkLastFrame2.map.set(name, {\n          value: v2\n        });\n      }\n      rootChild.children?.push({\n        type: component,\n        value: v.value,\n        options: v.options,\n        children: canHaveChildren2 ? [] : void 0,\n        setValue,\n        name: type\n      });\n      if (canHaveChildren2) {\n        childrenCrumbs.push(rootChild);\n        rootChild = rootChild.children[rootChild.children.length - 1];\n      }\n    }\n    return invoke;\n  }\n  let slider = createImmediateModeUIElement(\"slider\", Slider);\n  let label = createImmediateModeUIElement(\"label\", Label);\n  let group = createImmediateModeUIElement(\"group\", Group, true);\n  let checkbox = createImmediateModeUIElement(\"checkbox\", Checkbox);\n  let textbox = createImmediateModeUIElement(\"textbox\", Text);\n  let combo = createImmediateModeUIElement(\"combo\", Combo);\n  let button = createImmediateModeUIElement(\"button\", Button);\n  function preFrame() {\n    hostChildren = [];\n    rootChild = {\n      type: FloatingPanel,\n      value: null,\n      children: [],\n      options: {},\n      setValue: () => {\n      },\n      name: \"root\"\n    };\n    hostChildren.push(rootChild);\n    childrenCrumbs = [rootChild];\n    for (let handler of preFrameHandlers) {\n      handler();\n    }\n    uiSink = blankUISink();\n  }\n  return {\n    frame() {\n      for (let name in pucks) {\n        if (!uiSink.puck.has(name)) {\n          pucks[name].div.remove();\n          delete pucks[name];\n        }\n      }\n      for (let post of postFrameHandlers) {\n        post();\n      }\n      uiSinkLastFrame = blankUISink();\n      host.$set({\n        children: hostChildren\n      });\n    },\n    preFrame,\n    puck: _SHADEUP_UI_PUCK,\n    slider,\n    controls: {\n      label,\n      group,\n      checkbox,\n      textbox,\n      combo,\n      button,\n      pop() {\n        childrenCrumbs.pop();\n        rootChild = childrenCrumbs[childrenCrumbs.length - 1];\n      }\n    }\n  };\n}\n\nfunction initUI(canvas) {\n  let { frame, puck, preFrame, slider, controls } = initPuck(canvas);\n  return {\n    frame() {\n      frame();\n    },\n    preFrame() {\n      preFrame();\n    },\n    puck,\n    slider,\n    controls\n    // controls: host\n  };\n}\n\nconst addUIHook = (engine) => {\n  let { frame: uiFrame, puck, slider, preFrame: uiPreFrame, controls } = initUI(engine.canvas);\n  engine._SHADEUP_UI_PUCK = puck;\n  engine._SHADEUP_UI_SLIDER = slider;\n  engine._SHADEUP_UI_CONTROL = (name, ...args) => {\n    return controls[name](...args);\n  };\n  return {\n    beforeFrame() {\n      uiPreFrame();\n    },\n    afterFrame() {\n      uiFrame();\n    }\n  };\n};\n\nexport { addUIHook };\n"
  },
  {
    "path": "package/engine-dist/ui-f4b4a003.js",
    "content": "function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n    // @ts-ignore\n    for (const k in src)\n        tar[k] = src[k];\n    return tar;\n}\nfunction run(fn) {\n    return fn();\n}\nfunction blank_object() {\n    return Object.create(null);\n}\nfunction run_all(fns) {\n    fns.forEach(run);\n}\nfunction is_function(thing) {\n    return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n    return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction is_empty(obj) {\n    return Object.keys(obj).length === 0;\n}\nfunction subscribe(store, ...callbacks) {\n    if (store == null) {\n        return noop;\n    }\n    const unsub = store.subscribe(...callbacks);\n    return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction component_subscribe(component, store, callback) {\n    component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction action_destroyer(action_result) {\n    return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n    ? () => window.performance.now()\n    : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n    tasks.forEach(task => {\n        if (!task.c(now)) {\n            tasks.delete(task);\n            task.f();\n        }\n    });\n    if (tasks.size !== 0)\n        raf(run_tasks);\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n    let task;\n    if (tasks.size === 0)\n        raf(run_tasks);\n    return {\n        promise: new Promise(fulfill => {\n            tasks.add(task = { c: callback, f: fulfill });\n        }),\n        abort() {\n            tasks.delete(task);\n        }\n    };\n}\n\nconst globals = (typeof window !== 'undefined'\n    ? window\n    : typeof globalThis !== 'undefined'\n        ? globalThis\n        : global);\nfunction append(target, node) {\n    target.appendChild(node);\n}\nfunction get_root_for_style(node) {\n    if (!node)\n        return document;\n    const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n    if (root && root.host) {\n        return root;\n    }\n    return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n    const style_element = element('style');\n    append_stylesheet(get_root_for_style(node), style_element);\n    return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n    append(node.head || node, style);\n    return style.sheet;\n}\nfunction insert(target, node, anchor) {\n    target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n    if (node.parentNode) {\n        node.parentNode.removeChild(node);\n    }\n}\nfunction destroy_each(iterations, detaching) {\n    for (let i = 0; i < iterations.length; i += 1) {\n        if (iterations[i])\n            iterations[i].d(detaching);\n    }\n}\nfunction element(name) {\n    return document.createElement(name);\n}\nfunction svg_element(name) {\n    return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n    return document.createTextNode(data);\n}\nfunction space() {\n    return text(' ');\n}\nfunction empty() {\n    return text('');\n}\nfunction listen(node, event, handler, options) {\n    node.addEventListener(event, handler, options);\n    return () => node.removeEventListener(event, handler, options);\n}\nfunction attr(node, attribute, value) {\n    if (value == null)\n        node.removeAttribute(attribute);\n    else if (node.getAttribute(attribute) !== value)\n        node.setAttribute(attribute, value);\n}\nfunction children(element) {\n    return Array.from(element.childNodes);\n}\nfunction set_data(text, data) {\n    data = '' + data;\n    if (text.data === data)\n        return;\n    text.data = data;\n}\nfunction set_style(node, key, value, important) {\n    if (value == null) {\n        node.style.removeProperty(key);\n    }\n    else {\n        node.style.setProperty(key, value, important ? 'important' : '');\n    }\n}\nfunction toggle_class(element, name, toggle) {\n    element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n    const e = document.createEvent('CustomEvent');\n    e.initCustomEvent(type, bubbles, cancelable, detail);\n    return e;\n}\nclass HtmlTag {\n    constructor(is_svg = false) {\n        this.is_svg = false;\n        this.is_svg = is_svg;\n        this.e = this.n = null;\n    }\n    c(html) {\n        this.h(html);\n    }\n    m(html, target, anchor = null) {\n        if (!this.e) {\n            if (this.is_svg)\n                this.e = svg_element(target.nodeName);\n            /** #7364  target for <template> may be provided as #document-fragment(11) */\n            else\n                this.e = element((target.nodeType === 11 ? 'TEMPLATE' : target.nodeName));\n            this.t = target.tagName !== 'TEMPLATE' ? target : target.content;\n            this.c(html);\n        }\n        this.i(anchor);\n    }\n    h(html) {\n        this.e.innerHTML = html;\n        this.n = Array.from(this.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes);\n    }\n    i(anchor) {\n        for (let i = 0; i < this.n.length; i += 1) {\n            insert(this.t, this.n[i], anchor);\n        }\n    }\n    p(html) {\n        this.d();\n        this.h(html);\n        this.i(this.a);\n    }\n    d() {\n        this.n.forEach(detach);\n    }\n}\nfunction construct_svelte_component(component, props) {\n    return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n    let hash = 5381;\n    let i = str.length;\n    while (i--)\n        hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n    return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n    const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n    managed_styles.set(doc, info);\n    return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n    const step = 16.666 / duration;\n    let keyframes = '{\\n';\n    for (let p = 0; p <= 1; p += step) {\n        const t = a + (b - a) * ease(p);\n        keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n    }\n    const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n    const name = `__svelte_${hash(rule)}_${uid}`;\n    const doc = get_root_for_style(node);\n    const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n    if (!rules[name]) {\n        rules[name] = true;\n        stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n    }\n    const animation = node.style.animation || '';\n    node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n    active += 1;\n    return name;\n}\nfunction delete_rule(node, name) {\n    const previous = (node.style.animation || '').split(', ');\n    const next = previous.filter(name\n        ? anim => anim.indexOf(name) < 0 // remove specific animation\n        : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n    );\n    const deleted = previous.length - next.length;\n    if (deleted) {\n        node.style.animation = next.join(', ');\n        active -= deleted;\n        if (!active)\n            clear_rules();\n    }\n}\nfunction clear_rules() {\n    raf(() => {\n        if (active)\n            return;\n        managed_styles.forEach(info => {\n            const { ownerNode } = info.stylesheet;\n            // there is no ownerNode if it runs on jsdom.\n            if (ownerNode)\n                detach(ownerNode);\n        });\n        managed_styles.clear();\n    });\n}\n\nlet current_component;\nfunction set_current_component(component) {\n    current_component = component;\n}\nfunction get_current_component() {\n    if (!current_component)\n        throw new Error('Function called outside component initialization');\n    return current_component;\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n    get_current_component().$$.on_mount.push(fn);\n}\n\nconst dirty_components = [];\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n    if (!update_scheduled) {\n        update_scheduled = true;\n        resolved_promise.then(flush);\n    }\n}\nfunction add_render_callback(fn) {\n    render_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n//    for afterUpdates called during the initial onMount, which are called in\n//    reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n//    dirty_components array and will cause a reentrant call to flush(). Because\n//    the flush index is kept outside the function, the reentrant call will pick\n//    up where the earlier call left off and go through all dirty components. The\n//    current_component value is saved and restored so that the reentrant call will\n//    not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n//    callback called a second time; the seen_callbacks set, outside the flush()\n//    function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n    // Do not reenter flush while dirty components are updated, as this can\n    // result in an infinite loop. Instead, let the inner flush handle it.\n    // Reentrancy is ok afterwards for bindings etc.\n    if (flushidx !== 0) {\n        return;\n    }\n    const saved_component = current_component;\n    do {\n        // first, call beforeUpdate functions\n        // and update components\n        try {\n            while (flushidx < dirty_components.length) {\n                const component = dirty_components[flushidx];\n                flushidx++;\n                set_current_component(component);\n                update(component.$$);\n            }\n        }\n        catch (e) {\n            // reset dirty state to not end up in a deadlocked state and then rethrow\n            dirty_components.length = 0;\n            flushidx = 0;\n            throw e;\n        }\n        set_current_component(null);\n        dirty_components.length = 0;\n        flushidx = 0;\n        while (binding_callbacks.length)\n            binding_callbacks.pop()();\n        // then, once components are updated, call\n        // afterUpdate functions. This may cause\n        // subsequent updates...\n        for (let i = 0; i < render_callbacks.length; i += 1) {\n            const callback = render_callbacks[i];\n            if (!seen_callbacks.has(callback)) {\n                // ...so guard against infinite loops\n                seen_callbacks.add(callback);\n                callback();\n            }\n        }\n        render_callbacks.length = 0;\n    } while (dirty_components.length);\n    while (flush_callbacks.length) {\n        flush_callbacks.pop()();\n    }\n    update_scheduled = false;\n    seen_callbacks.clear();\n    set_current_component(saved_component);\n}\nfunction update($$) {\n    if ($$.fragment !== null) {\n        $$.update();\n        run_all($$.before_update);\n        const dirty = $$.dirty;\n        $$.dirty = [-1];\n        $$.fragment && $$.fragment.p($$.ctx, dirty);\n        $$.after_update.forEach(add_render_callback);\n    }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n    const filtered = [];\n    const targets = [];\n    render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n    targets.forEach((c) => c());\n    render_callbacks = filtered;\n}\n\nlet promise;\nfunction wait() {\n    if (!promise) {\n        promise = Promise.resolve();\n        promise.then(() => {\n            promise = null;\n        });\n    }\n    return promise;\n}\nfunction dispatch(node, direction, kind) {\n    node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n    outros = {\n        r: 0,\n        c: [],\n        p: outros // parent group\n    };\n}\nfunction check_outros() {\n    if (!outros.r) {\n        run_all(outros.c);\n    }\n    outros = outros.p;\n}\nfunction transition_in(block, local) {\n    if (block && block.i) {\n        outroing.delete(block);\n        block.i(local);\n    }\n}\nfunction transition_out(block, local, detach, callback) {\n    if (block && block.o) {\n        if (outroing.has(block))\n            return;\n        outroing.add(block);\n        outros.c.push(() => {\n            outroing.delete(block);\n            if (callback) {\n                if (detach)\n                    block.d(1);\n                callback();\n            }\n        });\n        block.o(local);\n    }\n    else if (callback) {\n        callback();\n    }\n}\nconst null_transition = { duration: 0 };\nfunction create_bidirectional_transition(node, fn, params, intro) {\n    const options = { direction: 'both' };\n    let config = fn(node, params, options);\n    let t = intro ? 0 : 1;\n    let running_program = null;\n    let pending_program = null;\n    let animation_name = null;\n    function clear_animation() {\n        if (animation_name)\n            delete_rule(node, animation_name);\n    }\n    function init(program, duration) {\n        const d = (program.b - t);\n        duration *= Math.abs(d);\n        return {\n            a: t,\n            b: program.b,\n            d,\n            duration,\n            start: program.start,\n            end: program.start + duration,\n            group: program.group\n        };\n    }\n    function go(b) {\n        const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n        const program = {\n            start: now() + delay,\n            b\n        };\n        if (!b) {\n            // @ts-ignore todo: improve typings\n            program.group = outros;\n            outros.r += 1;\n        }\n        if (running_program || pending_program) {\n            pending_program = program;\n        }\n        else {\n            // if this is an intro, and there's a delay, we need to do\n            // an initial tick and/or apply CSS animation immediately\n            if (css) {\n                clear_animation();\n                animation_name = create_rule(node, t, b, duration, delay, easing, css);\n            }\n            if (b)\n                tick(0, 1);\n            running_program = init(program, duration);\n            add_render_callback(() => dispatch(node, b, 'start'));\n            loop(now => {\n                if (pending_program && now > pending_program.start) {\n                    running_program = init(pending_program, duration);\n                    pending_program = null;\n                    dispatch(node, running_program.b, 'start');\n                    if (css) {\n                        clear_animation();\n                        animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n                    }\n                }\n                if (running_program) {\n                    if (now >= running_program.end) {\n                        tick(t = running_program.b, 1 - t);\n                        dispatch(node, running_program.b, 'end');\n                        if (!pending_program) {\n                            // we're done\n                            if (running_program.b) {\n                                // intro — we can tidy up immediately\n                                clear_animation();\n                            }\n                            else {\n                                // outro — needs to be coordinated\n                                if (!--running_program.group.r)\n                                    run_all(running_program.group.c);\n                            }\n                        }\n                        running_program = null;\n                    }\n                    else if (now >= running_program.start) {\n                        const p = now - running_program.start;\n                        t = running_program.a + running_program.d * easing(p / running_program.duration);\n                        tick(t, 1 - t);\n                    }\n                }\n                return !!(running_program || pending_program);\n            });\n        }\n    }\n    return {\n        run(b) {\n            if (is_function(config)) {\n                wait().then(() => {\n                    // @ts-ignore\n                    config = config(options);\n                    go(b);\n                });\n            }\n            else {\n                go(b);\n            }\n        },\n        end() {\n            clear_animation();\n            running_program = pending_program = null;\n        }\n    };\n}\n\nfunction get_spread_update(levels, updates) {\n    const update = {};\n    const to_null_out = {};\n    const accounted_for = { $$scope: 1 };\n    let i = levels.length;\n    while (i--) {\n        const o = levels[i];\n        const n = updates[i];\n        if (n) {\n            for (const key in o) {\n                if (!(key in n))\n                    to_null_out[key] = 1;\n            }\n            for (const key in n) {\n                if (!accounted_for[key]) {\n                    update[key] = n[key];\n                    accounted_for[key] = 1;\n                }\n            }\n            levels[i] = n;\n        }\n        else {\n            for (const key in o) {\n                accounted_for[key] = 1;\n            }\n        }\n    }\n    for (const key in to_null_out) {\n        if (!(key in update))\n            update[key] = undefined;\n    }\n    return update;\n}\nfunction get_spread_object(spread_props) {\n    return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\nfunction create_component(block) {\n    block && block.c();\n}\nfunction mount_component(component, target, anchor, customElement) {\n    const { fragment, after_update } = component.$$;\n    fragment && fragment.m(target, anchor);\n    if (!customElement) {\n        // onMount happens before the initial afterUpdate\n        add_render_callback(() => {\n            const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n            // if the component was destroyed immediately\n            // it will update the `$$.on_destroy` reference to `null`.\n            // the destructured on_destroy may still reference to the old array\n            if (component.$$.on_destroy) {\n                component.$$.on_destroy.push(...new_on_destroy);\n            }\n            else {\n                // Edge case - component was destroyed immediately,\n                // most likely as a result of a binding initialising\n                run_all(new_on_destroy);\n            }\n            component.$$.on_mount = [];\n        });\n    }\n    after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n    const $$ = component.$$;\n    if ($$.fragment !== null) {\n        flush_render_callbacks($$.after_update);\n        run_all($$.on_destroy);\n        $$.fragment && $$.fragment.d(detaching);\n        // TODO null out other refs, including component.$$ (but need to\n        // preserve final state?)\n        $$.on_destroy = $$.fragment = null;\n        $$.ctx = [];\n    }\n}\nfunction make_dirty(component, i) {\n    if (component.$$.dirty[0] === -1) {\n        dirty_components.push(component);\n        schedule_update();\n        component.$$.dirty.fill(0);\n    }\n    component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n    const parent_component = current_component;\n    set_current_component(component);\n    const $$ = component.$$ = {\n        fragment: null,\n        ctx: [],\n        // state\n        props,\n        update: noop,\n        not_equal,\n        bound: blank_object(),\n        // lifecycle\n        on_mount: [],\n        on_destroy: [],\n        on_disconnect: [],\n        before_update: [],\n        after_update: [],\n        context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n        // everything else\n        callbacks: blank_object(),\n        dirty,\n        skip_bound: false,\n        root: options.target || parent_component.$$.root\n    };\n    append_styles && append_styles($$.root);\n    let ready = false;\n    $$.ctx = instance\n        ? instance(component, options.props || {}, (i, ret, ...rest) => {\n            const value = rest.length ? rest[0] : ret;\n            if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n                if (!$$.skip_bound && $$.bound[i])\n                    $$.bound[i](value);\n                if (ready)\n                    make_dirty(component, i);\n            }\n            return ret;\n        })\n        : [];\n    $$.update();\n    ready = true;\n    run_all($$.before_update);\n    // `false` as a special case of no DOM component\n    $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n    if (options.target) {\n        if (options.hydrate) {\n            const nodes = children(options.target);\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            $$.fragment && $$.fragment.l(nodes);\n            nodes.forEach(detach);\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            $$.fragment && $$.fragment.c();\n        }\n        if (options.intro)\n            transition_in(component.$$.fragment);\n        mount_component(component, options.target, options.anchor, options.customElement);\n        flush();\n    }\n    set_current_component(parent_component);\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n    $destroy() {\n        destroy_component(this, 1);\n        this.$destroy = noop;\n    }\n    $on(type, callback) {\n        if (!is_function(callback)) {\n            return noop;\n        }\n        const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n        callbacks.push(callback);\n        return () => {\n            const index = callbacks.indexOf(callback);\n            if (index !== -1)\n                callbacks.splice(index, 1);\n        };\n    }\n    $set($$props) {\n        if (this.$$set && !is_empty($$props)) {\n            this.$$.skip_bound = true;\n            this.$$set($$props);\n            this.$$.skip_bound = false;\n        }\n    }\n}\n\n/* ui/components/Slider.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment$8(ctx) {\n\tlet div3;\n\tlet div2;\n\tlet div0;\n\tlet t0;\n\tlet div1;\n\tlet t1;\n\tlet input0;\n\tlet input0_value_value;\n\tlet t2;\n\tlet input1;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv3 = element(\"div\");\n\t\t\tdiv2 = element(\"div\");\n\t\t\tdiv0 = element(\"div\");\n\t\t\tt0 = space();\n\t\t\tdiv1 = element(\"div\");\n\t\t\tt1 = space();\n\t\t\tinput0 = element(\"input\");\n\t\t\tt2 = space();\n\t\t\tinput1 = element(\"input\");\n\t\t\tattr(div0, \"class\", \"absolute rounded-full bg-gray-600 w-full h-1\");\n\t\t\tattr(div1, \"class\", \"handle absolute w-[6px] h-[14px] rounded-full bg-purple-600 cursor-pointer\");\n\t\t\tset_style(div1, \"left\", \"calc(100% * \" + (/*value*/ ctx[0] - /*min*/ ctx[1]) + \" / \" + (/*max*/ ctx[2] - /*min*/ ctx[1]) + \" - 3px)\");\n\t\t\tattr(div2, \"class\", \"track w-full h-4 relative flex items-center\");\n\t\t\tattr(input0, \"class\", \"bg-black bg-opacity-10 p-0 rounded-sm w-5 h-4 text-sm outline-none border-none ml-2 text-right\");\n\t\t\tset_style(input0, \"font-size\", \"10px\");\n\t\t\tattr(input0, \"type\", \"text\");\n\t\t\tinput0.value = input0_value_value = /*value*/ ctx[0].toFixed(1).replace(/\\.0$/, '');\n\t\t\tattr(input0, \"min\", /*min*/ ctx[1]);\n\t\t\tattr(input0, \"max\", /*max*/ ctx[2]);\n\t\t\tinput1.hidden = true;\n\t\t\tattr(input1, \"type\", \"range\");\n\t\t\tattr(input1, \"min\", /*min*/ ctx[1]);\n\t\t\tattr(input1, \"max\", /*max*/ ctx[2]);\n\t\t\tinput1.value = /*value*/ ctx[0];\n\t\t\tattr(div3, \"class\", \"px-3 pt-0 pb-1 flex flex-row items-center\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div3, anchor);\n\t\t\tappend(div3, div2);\n\t\t\tappend(div2, div0);\n\t\t\tappend(div2, t0);\n\t\t\tappend(div2, div1);\n\t\t\t/*div2_binding*/ ctx[8](div2);\n\t\t\tappend(div3, t1);\n\t\t\tappend(div3, input0);\n\t\t\tappend(div3, t2);\n\t\t\tappend(div3, input1);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(window, \"mouseup\", /*mouseup_handler*/ ctx[7]),\n\t\t\t\t\tlisten(window, \"mousemove\", /*handleMove*/ ctx[6]),\n\t\t\t\t\tlisten(div2, \"mousedown\", /*mousedown_handler*/ ctx[9]),\n\t\t\t\t\tlisten(input0, \"input\", /*input_handler*/ ctx[10]),\n\t\t\t\t\tlisten(input1, \"input\", /*input_handler_1*/ ctx[11])\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*value, min, max*/ 7) {\n\t\t\t\tset_style(div1, \"left\", \"calc(100% * \" + (/*value*/ ctx[0] - /*min*/ ctx[1]) + \" / \" + (/*max*/ ctx[2] - /*min*/ ctx[1]) + \" - 3px)\");\n\t\t\t}\n\n\t\t\tif (dirty & /*value*/ 1 && input0_value_value !== (input0_value_value = /*value*/ ctx[0].toFixed(1).replace(/\\.0$/, '')) && input0.value !== input0_value_value) {\n\t\t\t\tinput0.value = input0_value_value;\n\t\t\t}\n\n\t\t\tif (dirty & /*min*/ 2) {\n\t\t\t\tattr(input0, \"min\", /*min*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (dirty & /*max*/ 4) {\n\t\t\t\tattr(input0, \"max\", /*max*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty & /*min*/ 2) {\n\t\t\t\tattr(input1, \"min\", /*min*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (dirty & /*max*/ 4) {\n\t\t\t\tattr(input1, \"max\", /*max*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty & /*value*/ 1) {\n\t\t\t\tinput1.value = /*value*/ ctx[0];\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div3);\n\t\t\t/*div2_binding*/ ctx[8](null);\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance$8($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\tlet { min } = $$props;\n\tlet { max } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tlet dragging = false;\n\tlet selfElement;\n\n\tfunction handleMove(e) {\n\t\tif (dragging) {\n\t\t\tconst rect = selfElement.getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst percent = x / rect.width;\n\t\t\tlet newValue = min + (max - min) * percent;\n\t\t\tnewValue = Math.max(min, Math.min(max, newValue));\n\t\t\tsetValue(newValue);\n\t\t\t$$invalidate(0, value = newValue);\n\t\t}\n\t}\n\n\tconst mouseup_handler = () => $$invalidate(4, dragging = false);\n\n\tfunction div2_binding($$value) {\n\t\tbinding_callbacks[$$value ? 'unshift' : 'push'](() => {\n\t\t\tselfElement = $$value;\n\t\t\t$$invalidate(5, selfElement);\n\t\t});\n\t}\n\n\tconst mousedown_handler = event => {\n\t\t$$invalidate(4, dragging = true);\n\t\thandleMove(event);\n\t};\n\n\tconst input_handler = e => {\n\t\tsetValue(parseFloat(e.target.value));\n\t\t$$invalidate(0, value = parseFloat(e.target.value));\n\t};\n\n\tconst input_handler_1 = e => {\n\t\tsetValue(parseFloat(e.target.value));\n\t\t$$invalidate(0, value = parseFloat(e.target.value));\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('min' in $$props) $$invalidate(1, min = $$props.min);\n\t\tif ('max' in $$props) $$invalidate(2, max = $$props.max);\n\t\tif ('setValue' in $$props) $$invalidate(3, setValue = $$props.setValue);\n\t};\n\n\treturn [\n\t\tvalue,\n\t\tmin,\n\t\tmax,\n\t\tsetValue,\n\t\tdragging,\n\t\tselfElement,\n\t\thandleMove,\n\t\tmouseup_handler,\n\t\tdiv2_binding,\n\t\tmousedown_handler,\n\t\tinput_handler,\n\t\tinput_handler_1\n\t];\n}\n\nclass Slider extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$8, create_fragment$8, safe_not_equal, { value: 0, min: 1, max: 2, setValue: 3 });\n\t}\n}\n\n/* ui/components/Combo.svelte generated by Svelte v3.59.2 */\n\nfunction get_each_context$3(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[4] = list[i];\n\treturn child_ctx;\n}\n\n// (14:2) {#if typeof options == 'object' && Array.isArray(options)}\nfunction create_if_block$2(ctx) {\n\tlet each_1_anchor;\n\tlet each_value = /*options*/ ctx[1];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i));\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\teach_1_anchor = empty();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(target, anchor);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinsert(target, each_1_anchor, anchor);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty & /*value, options*/ 3) {\n\t\t\t\teach_value = /*options*/ ctx[1];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context$3(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block$3(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\teach_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (; i < each_blocks.length; i += 1) {\n\t\t\t\t\teach_blocks[i].d(1);\n\t\t\t\t}\n\n\t\t\t\teach_blocks.length = each_value.length;\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t\tif (detaching) detach(each_1_anchor);\n\t\t}\n\t};\n}\n\n// (15:3) {#each options as option}\nfunction create_each_block$3(ctx) {\n\tlet option;\n\tlet t_value = /*option*/ ctx[4] + \"\";\n\tlet t;\n\tlet option_selected_value;\n\tlet option_value_value;\n\n\treturn {\n\t\tc() {\n\t\t\toption = element(\"option\");\n\t\t\tt = text(t_value);\n\t\t\tattr(option, \"class\", \"bg-gray-800\");\n\t\t\toption.selected = option_selected_value = /*value*/ ctx[0] == /*option*/ ctx[4];\n\t\t\toption.__value = option_value_value = /*option*/ ctx[4];\n\t\t\toption.value = option.__value;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, option, anchor);\n\t\t\tappend(option, t);\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty & /*options*/ 2 && t_value !== (t_value = /*option*/ ctx[4] + \"\")) set_data(t, t_value);\n\n\t\t\tif (dirty & /*value, options*/ 3 && option_selected_value !== (option_selected_value = /*value*/ ctx[0] == /*option*/ ctx[4])) {\n\t\t\t\toption.selected = option_selected_value;\n\t\t\t}\n\n\t\t\tif (dirty & /*options*/ 2 && option_value_value !== (option_value_value = /*option*/ ctx[4])) {\n\t\t\t\toption.__value = option_value_value;\n\t\t\t\toption.value = option.__value;\n\t\t\t}\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(option);\n\t\t}\n\t};\n}\n\nfunction create_fragment$7(ctx) {\n\tlet div;\n\tlet select;\n\tlet show_if = typeof /*options*/ ctx[1] == 'object' && Array.isArray(/*options*/ ctx[1]);\n\tlet mounted;\n\tlet dispose;\n\tlet if_block = show_if && create_if_block$2(ctx);\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tselect = element(\"select\");\n\t\t\tif (if_block) if_block.c();\n\t\t\tattr(select, \"class\", \"border border-gray-600 outline-none rounded-md text-sm p-0.5 px-1 bg-gray-800 bg-opacity-30 w-full\");\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1 flex flex-row items-center justify-end\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, select);\n\t\t\tif (if_block) if_block.m(select, null);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(select, \"input\", /*input_handler*/ ctx[3]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*options*/ 2) show_if = typeof /*options*/ ctx[1] == 'object' && Array.isArray(/*options*/ ctx[1]);\n\n\t\t\tif (show_if) {\n\t\t\t\tif (if_block) {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t\t} else {\n\t\t\t\t\tif_block = create_if_block$2(ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t\tif_block.m(select, null);\n\t\t\t\t}\n\t\t\t} else if (if_block) {\n\t\t\t\tif_block.d(1);\n\t\t\t\tif_block = null;\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (if_block) if_block.d();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance$7($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\tlet { options } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst input_handler = e => {\n\t\tsetValue(e.target.value);\n\t\t$$invalidate(0, value = e.target.value);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('options' in $$props) $$invalidate(1, options = $$props.options);\n\t\tif ('setValue' in $$props) $$invalidate(2, setValue = $$props.setValue);\n\t};\n\n\treturn [value, options, setValue, input_handler];\n}\n\nclass Combo extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$7, create_fragment$7, safe_not_equal, { value: 0, options: 1, setValue: 2 });\n\t}\n}\n\n/* ui/components/Label.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment$6(ctx) {\n\tlet div;\n\tlet t;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tt = text(/*value*/ ctx[0]);\n\t\t\tattr(div, \"class\", \"px-3 pb-0.5 text-xs text-white text-opacity-50 pt-2\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, t);\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*value*/ 1) set_data(t, /*value*/ ctx[0]);\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t}\n\t};\n}\n\nfunction instance$6($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t};\n\n\treturn [value];\n}\n\nclass Label extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$6, create_fragment$6, safe_not_equal, { value: 0 });\n\t}\n}\n\nfunction cubicOut(t) {\n    const f = t - 1.0;\n    return f * f * f + 1.0;\n}\n\nfunction slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = 'y' } = {}) {\n    const style = getComputedStyle(node);\n    const opacity = +style.opacity;\n    const primary_property = axis === 'y' ? 'height' : 'width';\n    const primary_property_value = parseFloat(style[primary_property]);\n    const secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n    const capitalized_secondary_properties = secondary_properties.map((e) => `${e[0].toUpperCase()}${e.slice(1)}`);\n    const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n    const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n    const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n    const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n    const border_width_start_value = parseFloat(style[`border${capitalized_secondary_properties[0]}Width`]);\n    const border_width_end_value = parseFloat(style[`border${capitalized_secondary_properties[1]}Width`]);\n    return {\n        delay,\n        duration,\n        easing,\n        css: t => 'overflow: hidden;' +\n            `opacity: ${Math.min(t * 20, 1) * opacity};` +\n            `${primary_property}: ${t * primary_property_value}px;` +\n            `padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n            `padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n            `margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n            `margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n            `border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n            `border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n    };\n}\n\nfunction measureElement(node, options) {\n  const { height, width, top, left } = options;\n  const resizeObserver = new ResizeObserver((entries) => {\n    for (const entry of entries) {\n      const { height: h, width: w, top: t, left: l } = entry.target.getBoundingClientRect();\n      height?.set(h);\n      width?.set(w);\n      top?.set(t);\n      left?.set(l);\n    }\n  });\n  resizeObserver.observe(node);\n  return {\n    destroy() {\n      resizeObserver.disconnect();\n    }\n  };\n}\n\nconst subscriber_queue = [];\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=} start\n */\nfunction writable(value, start = noop) {\n    let stop;\n    const subscribers = new Set();\n    function set(new_value) {\n        if (safe_not_equal(value, new_value)) {\n            value = new_value;\n            if (stop) { // store is ready\n                const run_queue = !subscriber_queue.length;\n                for (const subscriber of subscribers) {\n                    subscriber[1]();\n                    subscriber_queue.push(subscriber, value);\n                }\n                if (run_queue) {\n                    for (let i = 0; i < subscriber_queue.length; i += 2) {\n                        subscriber_queue[i][0](subscriber_queue[i + 1]);\n                    }\n                    subscriber_queue.length = 0;\n                }\n            }\n        }\n    }\n    function update(fn) {\n        set(fn(value));\n    }\n    function subscribe(run, invalidate = noop) {\n        const subscriber = [run, invalidate];\n        subscribers.add(subscriber);\n        if (subscribers.size === 1) {\n            stop = start(set) || noop;\n        }\n        run(value);\n        return () => {\n            subscribers.delete(subscriber);\n            if (subscribers.size === 0 && stop) {\n                stop();\n                stop = null;\n            }\n        };\n    }\n    return { set, update, subscribe };\n}\n\nconst FloatingPanel_svelte_svelte_type_style_lang = '';\n\n/* ui/components/FloatingPanel.svelte generated by Svelte v3.59.2 */\n\nconst { window: window_1 } = globals;\n\nfunction get_each_context$2(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[10] = list[i];\n\treturn child_ctx;\n}\n\n// (28:0) {#if children.length > 0}\nfunction create_if_block$1(ctx) {\n\tlet div1;\n\tlet div0;\n\tlet t;\n\tlet current_block_type_index;\n\tlet if_block;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tlet each_value = /*children*/ ctx[0];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i));\n\t}\n\n\tconst out = i => transition_out(each_blocks[i], 1, 1, () => {\n\t\teach_blocks[i] = null;\n\t});\n\n\tconst if_block_creators = [create_if_block_1, create_else_block];\n\tconst if_blocks = [];\n\n\tfunction select_block_type(ctx, dirty) {\n\t\tif (/*isFullscreen*/ ctx[2]) return 0;\n\t\treturn 1;\n\t}\n\n\tcurrent_block_type_index = select_block_type(ctx);\n\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\n\treturn {\n\t\tc() {\n\t\t\tdiv1 = element(\"div\");\n\t\t\tdiv0 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tt = space();\n\t\t\tif_block.c();\n\t\t\tattr(div0, \"class\", \"floating-panel scrollbar bg-gray-800 over border border-gray-800 rounded-lg shadow-lg flex flex-col overflow-x-hidden backdrop-blur-sm bg-opacity-20 transition-all duration-300 svelte-1hee3iu\");\n\t\t\tset_style(div0, \"max-height\", \"calc(100vh - 64px - 16px)\");\n\t\t\tset_style(div0, \"overflow-y\", \"overlay\");\n\t\t\ttoggle_class(div0, \"w-0\", !/*open*/ ctx[1]);\n\t\t\ttoggle_class(div0, \"w-[200px]\", /*open*/ ctx[1]);\n\t\t\ttoggle_class(div0, \"mr-4\", !/*open*/ ctx[1]);\n\t\t\tattr(div1, \"class\", \"z-40 absolute flex flex-col items-end justify-start\");\n\t\t\ttoggle_class(div1, \"right-2\", !/*isFullscreen*/ ctx[2] || /*isFullscreen*/ ctx[2] && !/*open*/ ctx[1]);\n\t\t\ttoggle_class(div1, \"top-10\", !/*isFullscreen*/ ctx[2]);\n\t\t\ttoggle_class(div1, \"right-8\", /*isFullscreen*/ ctx[2] && /*open*/ ctx[1]);\n\t\t\ttoggle_class(div1, \"top-8\", /*isFullscreen*/ ctx[2]);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div1, anchor);\n\t\t\tappend(div1, div0);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div0, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tappend(div1, t);\n\t\t\tif_blocks[current_block_type_index].m(div1, null);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = action_destroyer(measureElement.call(null, div0, { height: /*panelHeight*/ ctx[5] }));\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (dirty & /*children*/ 1) {\n\t\t\t\teach_value = /*children*/ ctx[0];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context$2(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block$2(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t\teach_blocks[i].m(div0, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_outros();\n\n\t\t\t\tfor (i = each_value.length; i < each_blocks.length; i += 1) {\n\t\t\t\t\tout(i);\n\t\t\t\t}\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(div0, \"w-0\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(div0, \"w-[200px]\", /*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(div0, \"mr-4\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tlet previous_block_index = current_block_type_index;\n\t\t\tcurrent_block_type_index = select_block_type(ctx);\n\n\t\t\tif (current_block_type_index === previous_block_index) {\n\t\t\t\tif_blocks[current_block_type_index].p(ctx, dirty);\n\t\t\t} else {\n\t\t\t\tgroup_outros();\n\n\t\t\t\ttransition_out(if_blocks[previous_block_index], 1, 1, () => {\n\t\t\t\t\tif_blocks[previous_block_index] = null;\n\t\t\t\t});\n\n\t\t\t\tcheck_outros();\n\t\t\t\tif_block = if_blocks[current_block_type_index];\n\n\t\t\t\tif (!if_block) {\n\t\t\t\t\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t} else {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t\t}\n\n\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\tif_block.m(div1, null);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen, open*/ 6) {\n\t\t\t\ttoggle_class(div1, \"right-2\", !/*isFullscreen*/ ctx[2] || /*isFullscreen*/ ctx[2] && !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen*/ 4) {\n\t\t\t\ttoggle_class(div1, \"top-10\", !/*isFullscreen*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen, open*/ 6) {\n\t\t\t\ttoggle_class(div1, \"right-8\", /*isFullscreen*/ ctx[2] && /*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*isFullscreen*/ 4) {\n\t\t\t\ttoggle_class(div1, \"top-8\", /*isFullscreen*/ ctx[2]);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\t\t\ttransition_in(each_blocks[i]);\n\t\t\t}\n\n\t\t\ttransition_in(if_block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\teach_blocks = each_blocks.filter(Boolean);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\ttransition_out(each_blocks[i]);\n\t\t\t}\n\n\t\t\ttransition_out(if_block);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div1);\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t\tif_blocks[current_block_type_index].d();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\n// (44:3) {#each children as child}\nfunction create_each_block$2(ctx) {\n\tlet div;\n\tlet switch_instance;\n\tlet t;\n\tlet div_class_value;\n\tlet current;\n\n\tconst switch_instance_spread_levels = [\n\t\t{ value: /*child*/ ctx[10].value },\n\t\t{ setValue: /*child*/ ctx[10].setValue },\n\t\t{ children: /*child*/ ctx[10].children },\n\t\t/*child*/ ctx[10].options\n\t];\n\n\tvar switch_value = /*child*/ ctx[10].type;\n\n\tfunction switch_props(ctx) {\n\t\tlet switch_instance_props = {};\n\n\t\tfor (let i = 0; i < switch_instance_spread_levels.length; i += 1) {\n\t\t\tswitch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);\n\t\t}\n\n\t\treturn { props: switch_instance_props };\n\t}\n\n\tif (switch_value) {\n\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tif (switch_instance) create_component(switch_instance.$$.fragment);\n\t\t\tt = space();\n\t\t\tattr(div, \"class\", div_class_value = \"min-w-[200px] control-\" + /*child*/ ctx[10].name + \" svelte-1hee3iu\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tif (switch_instance) mount_component(switch_instance, div, null);\n\t\t\tappend(div, t);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tconst switch_instance_changes = (dirty & /*children*/ 1)\n\t\t\t? get_spread_update(switch_instance_spread_levels, [\n\t\t\t\t\t{ value: /*child*/ ctx[10].value },\n\t\t\t\t\t{ setValue: /*child*/ ctx[10].setValue },\n\t\t\t\t\t{ children: /*child*/ ctx[10].children },\n\t\t\t\t\tget_spread_object(/*child*/ ctx[10].options)\n\t\t\t\t])\n\t\t\t: {};\n\n\t\t\tif (dirty & /*children*/ 1 && switch_value !== (switch_value = /*child*/ ctx[10].type)) {\n\t\t\t\tif (switch_instance) {\n\t\t\t\t\tgroup_outros();\n\t\t\t\t\tconst old_component = switch_instance;\n\n\t\t\t\t\ttransition_out(old_component.$$.fragment, 1, 0, () => {\n\t\t\t\t\t\tdestroy_component(old_component, 1);\n\t\t\t\t\t});\n\n\t\t\t\t\tcheck_outros();\n\t\t\t\t}\n\n\t\t\t\tif (switch_value) {\n\t\t\t\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t\t\t\t\tcreate_component(switch_instance.$$.fragment);\n\t\t\t\t\ttransition_in(switch_instance.$$.fragment, 1);\n\t\t\t\t\tmount_component(switch_instance, div, t);\n\t\t\t\t} else {\n\t\t\t\t\tswitch_instance = null;\n\t\t\t\t}\n\t\t\t} else if (switch_value) {\n\t\t\t\tswitch_instance.$set(switch_instance_changes);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*children*/ 1 && div_class_value !== (div_class_value = \"min-w-[200px] control-\" + /*child*/ ctx[10].name + \" svelte-1hee3iu\")) {\n\t\t\t\tattr(div, \"class\", div_class_value);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\tif (switch_instance) transition_in(switch_instance.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (switch_instance) transition_out(switch_instance.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (switch_instance) destroy_component(switch_instance);\n\t\t}\n\t};\n}\n\n// (80:2) {:else}\nfunction create_else_block(ctx) {\n\tlet button;\n\tlet svg;\n\tlet path0;\n\tlet path1;\n\tlet button_transition;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tsvg = svg_element(\"svg\");\n\t\t\tpath0 = svg_element(\"path\");\n\t\t\tpath1 = svg_element(\"path\");\n\t\t\tattr(path0, \"d\", \"M0 0h24v24H0V0z\");\n\t\t\tattr(path0, \"fill\", \"none\");\n\t\t\tattr(path1, \"d\", \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\");\n\t\t\tattr(svg, \"class\", \"transition-all duration-300 transform max-w-[16px]\");\n\t\t\tattr(svg, \"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\t\tattr(svg, \"height\", \"24px\");\n\t\t\tattr(svg, \"viewBox\", \"0 0 24 24\");\n\t\t\tattr(svg, \"width\", \"24px\");\n\t\t\tattr(svg, \"fill\", \"#fff\");\n\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\tattr(button, \"class\", \"bg-gray-700 rounded-r-md shadow-lg backdrop-blur-sm bg-opacity-30 w-4 h-4 flex items-center justify-center transition-all duration-300\");\n\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] / 2 + 8)) + \"px\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tappend(button, svg);\n\t\t\tappend(svg, path0);\n\t\t\tappend(svg, path1);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", /*click_handler_1*/ ctx[9]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open, $panelHeight*/ 18) {\n\t\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] / 2 + 8)) + \"px\");\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tadd_render_callback(() => {\n\t\t\t\tif (!current) return;\n\t\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, true);\n\t\t\t\tbutton_transition.run(1);\n\t\t\t});\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, false);\n\t\t\tbutton_transition.run(0);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tif (detaching && button_transition) button_transition.end();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\n// (57:2) {#if isFullscreen}\nfunction create_if_block_1(ctx) {\n\tlet button;\n\tlet svg;\n\tlet path0;\n\tlet path1;\n\tlet button_transition;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tbutton = element(\"button\");\n\t\t\tsvg = svg_element(\"svg\");\n\t\t\tpath0 = svg_element(\"path\");\n\t\t\tpath1 = svg_element(\"path\");\n\t\t\tattr(path0, \"d\", \"M0 0h24v24H0V0z\");\n\t\t\tattr(path0, \"fill\", \"none\");\n\t\t\tattr(path1, \"d\", \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\");\n\t\t\tattr(svg, \"class\", \"transition-all duration-300 transform max-w-[16px]\");\n\t\t\tattr(svg, \"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\t\tattr(svg, \"height\", \"24px\");\n\t\t\tattr(svg, \"viewBox\", \"0 0 24 24\");\n\t\t\tattr(svg, \"width\", \"24px\");\n\t\t\tattr(svg, \"fill\", \"#fff\");\n\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\tattr(button, \"class\", \"bg-gray-700 rounded-md shadow-lg backdrop-blur-sm bg-opacity-30 w-4 h-4 flex items-center justify-center transition-all duration-300\");\n\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] + 8)) + \"px\");\n\t\t\ttoggle_class(button, \"mr-4\", !/*open*/ ctx[1]);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, button, anchor);\n\t\t\tappend(button, svg);\n\t\t\tappend(svg, path0);\n\t\t\tappend(svg, path1);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", /*click_handler*/ ctx[8]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(svg, \"rotate-180\", !/*open*/ ctx[1]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open, $panelHeight*/ 18) {\n\t\t\t\tset_style(button, \"margin-top\", (/*open*/ ctx[1] ? 2 : -(/*$panelHeight*/ ctx[4] + 8)) + \"px\");\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 2) {\n\t\t\t\ttoggle_class(button, \"mr-4\", !/*open*/ ctx[1]);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tadd_render_callback(() => {\n\t\t\t\tif (!current) return;\n\t\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, true);\n\t\t\t\tbutton_transition.run(1);\n\t\t\t});\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (!button_transition) button_transition = create_bidirectional_transition(button, slide, {}, false);\n\t\t\tbutton_transition.run(0);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(button);\n\t\t\tif (detaching && button_transition) button_transition.end();\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction create_fragment$5(ctx) {\n\tlet html_tag;\n\tlet t;\n\tlet if_block_anchor;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tlet if_block = /*children*/ ctx[0].length > 0 && create_if_block$1(ctx);\n\n\treturn {\n\t\tc() {\n\t\t\thtml_tag = new HtmlTag(false);\n\t\t\tt = space();\n\t\t\tif (if_block) if_block.c();\n\t\t\tif_block_anchor = empty();\n\t\t\thtml_tag.a = t;\n\t\t},\n\t\tm(target, anchor) {\n\t\t\thtml_tag.m(/*styleStr*/ ctx[3], target, anchor);\n\t\t\tinsert(target, t, anchor);\n\t\t\tif (if_block) if_block.m(target, anchor);\n\t\t\tinsert(target, if_block_anchor, anchor);\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(window_1, \"resize\", /*resize_handler*/ ctx[7]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (!current || dirty & /*styleStr*/ 8) html_tag.p(/*styleStr*/ ctx[3]);\n\n\t\t\tif (/*children*/ ctx[0].length > 0) {\n\t\t\t\tif (if_block) {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\n\t\t\t\t\tif (dirty & /*children*/ 1) {\n\t\t\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif_block = create_if_block$1(ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\t\tif_block.m(if_block_anchor.parentNode, if_block_anchor);\n\t\t\t\t}\n\t\t\t} else if (if_block) {\n\t\t\t\tgroup_outros();\n\n\t\t\t\ttransition_out(if_block, 1, 1, () => {\n\t\t\t\t\tif_block = null;\n\t\t\t\t});\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\ttransition_in(if_block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\ttransition_out(if_block);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) html_tag.d();\n\t\t\tif (detaching) detach(t);\n\t\t\tif (if_block) if_block.d(detaching);\n\t\t\tif (detaching) detach(if_block_anchor);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance$5($$self, $$props, $$invalidate) {\n\tlet shouldPush;\n\tlet styleStr;\n\tlet $panelHeight;\n\tlet { children = [] } = $$props;\n\tlet panelHeight = writable(0);\n\tcomponent_subscribe($$self, panelHeight, value => $$invalidate(4, $panelHeight = value));\n\tlet open = true;\n\tlet isFullscreen = false;\n\n\tonMount(() => {\n\t\t$$invalidate(2, isFullscreen = window.innerHeight >= screen.height);\n\t});\n\n\tconst resize_handler = () => {\n\t\t$$invalidate(2, isFullscreen = window.innerHeight >= screen.height);\n\t};\n\n\tconst click_handler = () => {\n\t\t$$invalidate(1, open = !open);\n\t};\n\n\tconst click_handler_1 = () => {\n\t\t$$invalidate(1, open = !open);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('children' in $$props) $$invalidate(0, children = $$props.children);\n\t};\n\n\t$$self.$$.update = () => {\n\t\tif ($$self.$$.dirty & /*open, children*/ 3) {\n\t\t\t$$invalidate(6, shouldPush = open && children && children.length > 0);\n\t\t}\n\n\t\tif ($$self.$$.dirty & /*shouldPush*/ 64) {\n\t\t\t$$invalidate(3, styleStr = `<style> .stater {\n\t\ttransition: 0.2s all;\n\t\t\n\t\tmargin-right: ${shouldPush ? '186px;' : '0px'}\n\t\tmargin-top: ${shouldPush ? '4px;' : '0px'}\n\t}</style>`);\n\t\t}\n\t};\n\n\treturn [\n\t\tchildren,\n\t\topen,\n\t\tisFullscreen,\n\t\tstyleStr,\n\t\t$panelHeight,\n\t\tpanelHeight,\n\t\tshouldPush,\n\t\tresize_handler,\n\t\tclick_handler,\n\t\tclick_handler_1\n\t];\n}\n\nclass FloatingPanel extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$5, create_fragment$5, safe_not_equal, { children: 0 });\n\t}\n}\n\nconst host = '';\n\n/* ui/components/Host.svelte generated by Svelte v3.59.2 */\n\nfunction get_each_context$1(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[1] = list[i];\n\treturn child_ctx;\n}\n\n// (7:1) {#each children as child}\nfunction create_each_block$1(ctx) {\n\tlet switch_instance;\n\tlet switch_instance_anchor;\n\tlet current;\n\n\tconst switch_instance_spread_levels = [\n\t\t{ value: /*child*/ ctx[1].value },\n\t\t{ setValue: /*child*/ ctx[1].setValue },\n\t\t{ children: /*child*/ ctx[1].children },\n\t\t/*child*/ ctx[1].options\n\t];\n\n\tvar switch_value = /*child*/ ctx[1].type;\n\n\tfunction switch_props(ctx) {\n\t\tlet switch_instance_props = {};\n\n\t\tfor (let i = 0; i < switch_instance_spread_levels.length; i += 1) {\n\t\t\tswitch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);\n\t\t}\n\n\t\treturn { props: switch_instance_props };\n\t}\n\n\tif (switch_value) {\n\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tif (switch_instance) create_component(switch_instance.$$.fragment);\n\t\t\tswitch_instance_anchor = empty();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tif (switch_instance) mount_component(switch_instance, target, anchor);\n\t\t\tinsert(target, switch_instance_anchor, anchor);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tconst switch_instance_changes = (dirty & /*children*/ 1)\n\t\t\t? get_spread_update(switch_instance_spread_levels, [\n\t\t\t\t\t{ value: /*child*/ ctx[1].value },\n\t\t\t\t\t{ setValue: /*child*/ ctx[1].setValue },\n\t\t\t\t\t{ children: /*child*/ ctx[1].children },\n\t\t\t\t\tget_spread_object(/*child*/ ctx[1].options)\n\t\t\t\t])\n\t\t\t: {};\n\n\t\t\tif (dirty & /*children*/ 1 && switch_value !== (switch_value = /*child*/ ctx[1].type)) {\n\t\t\t\tif (switch_instance) {\n\t\t\t\t\tgroup_outros();\n\t\t\t\t\tconst old_component = switch_instance;\n\n\t\t\t\t\ttransition_out(old_component.$$.fragment, 1, 0, () => {\n\t\t\t\t\t\tdestroy_component(old_component, 1);\n\t\t\t\t\t});\n\n\t\t\t\t\tcheck_outros();\n\t\t\t\t}\n\n\t\t\t\tif (switch_value) {\n\t\t\t\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t\t\t\t\tcreate_component(switch_instance.$$.fragment);\n\t\t\t\t\ttransition_in(switch_instance.$$.fragment, 1);\n\t\t\t\t\tmount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor);\n\t\t\t\t} else {\n\t\t\t\t\tswitch_instance = null;\n\t\t\t\t}\n\t\t\t} else if (switch_value) {\n\t\t\t\tswitch_instance.$set(switch_instance_changes);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\tif (switch_instance) transition_in(switch_instance.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (switch_instance) transition_out(switch_instance.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(switch_instance_anchor);\n\t\t\tif (switch_instance) destroy_component(switch_instance, detaching);\n\t\t}\n\t};\n}\n\nfunction create_fragment$4(ctx) {\n\tlet div;\n\tlet current;\n\tlet each_value = /*children*/ ctx[0];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i));\n\t}\n\n\tconst out = i => transition_out(each_blocks[i], 1, 1, () => {\n\t\teach_blocks[i] = null;\n\t});\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tattr(div, \"class\", \"host\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*children*/ 1) {\n\t\t\t\teach_value = /*children*/ ctx[0];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context$1(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block$1(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t\teach_blocks[i].m(div, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_outros();\n\n\t\t\t\tfor (i = each_value.length; i < each_blocks.length; i += 1) {\n\t\t\t\t\tout(i);\n\t\t\t\t}\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\t\t\ttransition_in(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\teach_blocks = each_blocks.filter(Boolean);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\ttransition_out(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t}\n\t};\n}\n\nfunction instance$4($$self, $$props, $$invalidate) {\n\tlet { children } = $$props;\n\n\t$$self.$$set = $$props => {\n\t\tif ('children' in $$props) $$invalidate(0, children = $$props.children);\n\t};\n\n\treturn [children];\n}\n\nclass Host extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$4, create_fragment$4, safe_not_equal, { children: 0 });\n\t}\n}\n\n/* ui/components/Group.svelte generated by Svelte v3.59.2 */\n\nfunction get_each_context(ctx, list, i) {\n\tconst child_ctx = ctx.slice();\n\tchild_ctx[6] = list[i];\n\tchild_ctx[8] = i;\n\treturn child_ctx;\n}\n\n// (42:2) {#each children as child, i}\nfunction create_each_block(ctx) {\n\tlet div;\n\tlet switch_instance;\n\tlet t;\n\tlet div_class_value;\n\tlet current;\n\n\tconst switch_instance_spread_levels = [\n\t\t{ value: /*child*/ ctx[6].value },\n\t\t{ setValue: /*child*/ ctx[6].setValue },\n\t\t{ children: /*child*/ ctx[6].children },\n\t\t/*child*/ ctx[6].options\n\t];\n\n\tvar switch_value = /*child*/ ctx[6].type;\n\n\tfunction switch_props(ctx) {\n\t\tlet switch_instance_props = {};\n\n\t\tfor (let i = 0; i < switch_instance_spread_levels.length; i += 1) {\n\t\t\tswitch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);\n\t\t}\n\n\t\treturn { props: switch_instance_props };\n\t}\n\n\tif (switch_value) {\n\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tif (switch_instance) create_component(switch_instance.$$.fragment);\n\t\t\tt = space();\n\t\t\tattr(div, \"class\", div_class_value = \"min-w-[200px - 16px] bg-gray-500 bg-opacity-5 control-\" + /*child*/ ctx[6].name);\n\t\t\ttoggle_class(div, \"rounded-b-md\", /*i*/ ctx[8] === /*children*/ ctx[1].length - 1);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tif (switch_instance) mount_component(switch_instance, div, null);\n\t\t\tappend(div, t);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tconst switch_instance_changes = (dirty & /*children*/ 2)\n\t\t\t? get_spread_update(switch_instance_spread_levels, [\n\t\t\t\t\t{ value: /*child*/ ctx[6].value },\n\t\t\t\t\t{ setValue: /*child*/ ctx[6].setValue },\n\t\t\t\t\t{ children: /*child*/ ctx[6].children },\n\t\t\t\t\tget_spread_object(/*child*/ ctx[6].options)\n\t\t\t\t])\n\t\t\t: {};\n\n\t\t\tif (dirty & /*children*/ 2 && switch_value !== (switch_value = /*child*/ ctx[6].type)) {\n\t\t\t\tif (switch_instance) {\n\t\t\t\t\tgroup_outros();\n\t\t\t\t\tconst old_component = switch_instance;\n\n\t\t\t\t\ttransition_out(old_component.$$.fragment, 1, 0, () => {\n\t\t\t\t\t\tdestroy_component(old_component, 1);\n\t\t\t\t\t});\n\n\t\t\t\t\tcheck_outros();\n\t\t\t\t}\n\n\t\t\t\tif (switch_value) {\n\t\t\t\t\tswitch_instance = construct_svelte_component(switch_value, switch_props());\n\t\t\t\t\tcreate_component(switch_instance.$$.fragment);\n\t\t\t\t\ttransition_in(switch_instance.$$.fragment, 1);\n\t\t\t\t\tmount_component(switch_instance, div, t);\n\t\t\t\t} else {\n\t\t\t\t\tswitch_instance = null;\n\t\t\t\t}\n\t\t\t} else if (switch_value) {\n\t\t\t\tswitch_instance.$set(switch_instance_changes);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*children*/ 2 && div_class_value !== (div_class_value = \"min-w-[200px - 16px] bg-gray-500 bg-opacity-5 control-\" + /*child*/ ctx[6].name)) {\n\t\t\t\tattr(div, \"class\", div_class_value);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*children, children*/ 2) {\n\t\t\t\ttoggle_class(div, \"rounded-b-md\", /*i*/ ctx[8] === /*children*/ ctx[1].length - 1);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\tif (switch_instance) transition_in(switch_instance.$$.fragment, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tif (switch_instance) transition_out(switch_instance.$$.fragment, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (switch_instance) destroy_component(switch_instance);\n\t\t}\n\t};\n}\n\nfunction create_fragment$3(ctx) {\n\tlet div0;\n\tlet button;\n\tlet span0;\n\tlet svg;\n\tlet path0;\n\tlet path1;\n\tlet t0;\n\tlet span1;\n\tlet t1;\n\tlet t2;\n\tlet div2;\n\tlet div1;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tlet each_value = /*children*/ ctx[1];\n\tlet each_blocks = [];\n\n\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\teach_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));\n\t}\n\n\tconst out = i => transition_out(each_blocks[i], 1, 1, () => {\n\t\teach_blocks[i] = null;\n\t});\n\n\treturn {\n\t\tc() {\n\t\t\tdiv0 = element(\"div\");\n\t\t\tbutton = element(\"button\");\n\t\t\tspan0 = element(\"span\");\n\t\t\tsvg = svg_element(\"svg\");\n\t\t\tpath0 = svg_element(\"path\");\n\t\t\tpath1 = svg_element(\"path\");\n\t\t\tt0 = space();\n\t\t\tspan1 = element(\"span\");\n\t\t\tt1 = text(/*value*/ ctx[0]);\n\t\t\tt2 = space();\n\t\t\tdiv2 = element(\"div\");\n\t\t\tdiv1 = element(\"div\");\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\teach_blocks[i].c();\n\t\t\t}\n\n\t\t\tattr(path0, \"d\", \"M0 0h24v24H0V0z\");\n\t\t\tattr(path0, \"fill\", \"none\");\n\t\t\tattr(path1, \"d\", \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\");\n\t\t\tattr(svg, \"class\", \"transition-all duration-300 transform max-w-[16px]\");\n\t\t\tattr(svg, \"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\t\tattr(svg, \"height\", \"24px\");\n\t\t\tattr(svg, \"viewBox\", \"0 0 24 24\");\n\t\t\tattr(svg, \"width\", \"24px\");\n\t\t\tattr(svg, \"fill\", \"#fff\");\n\t\t\ttoggle_class(svg, \"rotate-90\", /*open*/ ctx[2]);\n\t\t\tattr(span0, \"class\", \"w-4 h-4 ml-1 opacity-50 flex items-center justify-center rounded-md\");\n\t\t\tattr(span1, \"class\", \"flex-1 ml-2 text-left text-sm text-white text-opacity-75\");\n\t\t\tattr(button, \"class\", \"flex flex-row items-center mx-1 bg-gray-500 bg-opacity-5\");\n\t\t\ttoggle_class(button, \"rounded-md\", !/*open*/ ctx[2]);\n\t\t\ttoggle_class(button, \"rounded-t-md\", /*open*/ ctx[2]);\n\t\t\tattr(div0, \"class\", \"flex flex-col\");\n\t\t\tattr(div1, \"class\", \"flex flex-col mx-1\");\n\t\t\tattr(div2, \"class\", \"transition-all mb-1 flex flex-col\");\n\t\t\tset_style(div2, \"max-height\", (/*open*/ ctx[2] ? /*$height*/ ctx[3] : 0) + \"px\");\n\t\t\tset_style(div2, \"overflow\", \"hidden\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div0, anchor);\n\t\t\tappend(div0, button);\n\t\t\tappend(button, span0);\n\t\t\tappend(span0, svg);\n\t\t\tappend(svg, path0);\n\t\t\tappend(svg, path1);\n\t\t\tappend(button, t0);\n\t\t\tappend(button, span1);\n\t\t\tappend(span1, t1);\n\t\t\tinsert(target, t2, anchor);\n\t\t\tinsert(target, div2, anchor);\n\t\t\tappend(div2, div1);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\teach_blocks[i].m(div1, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(button, \"click\", /*click_handler*/ ctx[5]),\n\t\t\t\t\taction_destroyer(measureElement.call(null, div1, { height: /*height*/ ctx[4] }))\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (!current || dirty & /*open*/ 4) {\n\t\t\t\ttoggle_class(svg, \"rotate-90\", /*open*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*value*/ 1) set_data(t1, /*value*/ ctx[0]);\n\n\t\t\tif (!current || dirty & /*open*/ 4) {\n\t\t\t\ttoggle_class(button, \"rounded-md\", !/*open*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open*/ 4) {\n\t\t\t\ttoggle_class(button, \"rounded-t-md\", /*open*/ ctx[2]);\n\t\t\t}\n\n\t\t\tif (dirty & /*children*/ 2) {\n\t\t\t\teach_value = /*children*/ ctx[1];\n\t\t\t\tlet i;\n\n\t\t\t\tfor (i = 0; i < each_value.length; i += 1) {\n\t\t\t\t\tconst child_ctx = get_each_context(ctx, each_value, i);\n\n\t\t\t\t\tif (each_blocks[i]) {\n\t\t\t\t\t\teach_blocks[i].p(child_ctx, dirty);\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teach_blocks[i] = create_each_block(child_ctx);\n\t\t\t\t\t\teach_blocks[i].c();\n\t\t\t\t\t\ttransition_in(each_blocks[i], 1);\n\t\t\t\t\t\teach_blocks[i].m(div1, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_outros();\n\n\t\t\t\tfor (i = each_value.length; i < each_blocks.length; i += 1) {\n\t\t\t\t\tout(i);\n\t\t\t\t}\n\n\t\t\t\tcheck_outros();\n\t\t\t}\n\n\t\t\tif (!current || dirty & /*open, $height*/ 12) {\n\t\t\t\tset_style(div2, \"max-height\", (/*open*/ ctx[2] ? /*$height*/ ctx[3] : 0) + \"px\");\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\n\t\t\tfor (let i = 0; i < each_value.length; i += 1) {\n\t\t\t\ttransition_in(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\teach_blocks = each_blocks.filter(Boolean);\n\n\t\t\tfor (let i = 0; i < each_blocks.length; i += 1) {\n\t\t\t\ttransition_out(each_blocks[i]);\n\t\t\t}\n\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div0);\n\t\t\tif (detaching) detach(t2);\n\t\t\tif (detaching) detach(div2);\n\t\t\tdestroy_each(each_blocks, detaching);\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance$3($$self, $$props, $$invalidate) {\n\tlet $height;\n\tlet { value } = $$props;\n\tlet { children } = $$props;\n\tlet open = true;\n\tlet height = writable(0);\n\tcomponent_subscribe($$self, height, value => $$invalidate(3, $height = value));\n\n\tconst click_handler = () => {\n\t\t$$invalidate(2, open = !open);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('children' in $$props) $$invalidate(1, children = $$props.children);\n\t};\n\n\treturn [value, children, open, $height, height, click_handler];\n}\n\nclass Group extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$3, create_fragment$3, safe_not_equal, { value: 0, children: 1 });\n\t}\n}\n\n/* ui/components/Checkbox.svelte generated by Svelte v3.59.2 */\n\nfunction create_if_block(ctx) {\n\tlet div;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tattr(div, \"class\", \"w-2 h-2 rounded-sm bg-purple-600 \");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t}\n\t};\n}\n\nfunction create_fragment$2(ctx) {\n\tlet div;\n\tlet button;\n\tlet t;\n\tlet input;\n\tlet mounted;\n\tlet dispose;\n\tlet if_block = /*value*/ ctx[0] && create_if_block();\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tbutton = element(\"button\");\n\t\t\tif (if_block) if_block.c();\n\t\t\tt = space();\n\t\t\tinput = element(\"input\");\n\t\t\tattr(button, \"class\", \"rounded-md border border-gray-600 bg-gray-900 w-4 h-4 cursor-pointer flex items-center justify-center\");\n\t\t\tset_style(input, \"display\", \"none\");\n\t\t\tinput.hidden = true;\n\t\t\tattr(input, \"type\", \"checkbox\");\n\t\t\tinput.checked = /*value*/ ctx[0];\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1 flex flex-row items-center justify-end\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, button);\n\t\t\tif (if_block) if_block.m(button, null);\n\t\t\tappend(div, t);\n\t\t\tappend(div, input);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = [\n\t\t\t\t\tlisten(button, \"click\", /*click_handler*/ ctx[2]),\n\t\t\t\t\tlisten(input, \"input\", /*input_handler*/ ctx[3])\n\t\t\t\t];\n\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (/*value*/ ctx[0]) {\n\t\t\t\tif (if_block) ; else {\n\t\t\t\t\tif_block = create_if_block();\n\t\t\t\t\tif_block.c();\n\t\t\t\t\tif_block.m(button, null);\n\t\t\t\t}\n\t\t\t} else if (if_block) {\n\t\t\t\tif_block.d(1);\n\t\t\t\tif_block = null;\n\t\t\t}\n\n\t\t\tif (dirty & /*value*/ 1) {\n\t\t\t\tinput.checked = /*value*/ ctx[0];\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tif (if_block) if_block.d();\n\t\t\tmounted = false;\n\t\t\trun_all(dispose);\n\t\t}\n\t};\n}\n\nfunction instance$2($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst click_handler = event => {\n\t\t$$invalidate(0, value = !value);\n\t\tsetValue(value);\n\t};\n\n\tconst input_handler = e => {\n\t\tsetValue(e.target.checked);\n\t\t$$invalidate(0, value = e.target.checked);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('setValue' in $$props) $$invalidate(1, setValue = $$props.setValue);\n\t};\n\n\treturn [value, setValue, click_handler, input_handler];\n}\n\nclass Checkbox extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$2, create_fragment$2, safe_not_equal, { value: 0, setValue: 1 });\n\t}\n}\n\n/* ui/components/Button.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment$1(ctx) {\n\tlet div;\n\tlet button;\n\tlet t;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tbutton = element(\"button\");\n\t\t\tt = text(/*text*/ ctx[0]);\n\t\t\tattr(button, \"class\", \"rounded-md hover:border-purple-600 border border-gray-600 bg-gray-900 w-full cursor-pointer flex items-center justify-center\");\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1 flex\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, button);\n\t\t\tappend(button, t);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(button, \"click\", /*click_handler*/ ctx[2]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]);\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance$1($$self, $$props, $$invalidate) {\n\tlet { text } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst click_handler = event => {\n\t\tsetValue(true);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('text' in $$props) $$invalidate(0, text = $$props.text);\n\t\tif ('setValue' in $$props) $$invalidate(1, setValue = $$props.setValue);\n\t};\n\n\treturn [text, setValue, click_handler];\n}\n\nclass Button extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance$1, create_fragment$1, safe_not_equal, { text: 0, setValue: 1 });\n\t}\n}\n\n/* ui/components/Text.svelte generated by Svelte v3.59.2 */\n\nfunction create_fragment(ctx) {\n\tlet div;\n\tlet input;\n\tlet mounted;\n\tlet dispose;\n\n\treturn {\n\t\tc() {\n\t\t\tdiv = element(\"div\");\n\t\t\tinput = element(\"input\");\n\t\t\tattr(input, \"class\", \"outline-none border border-gray-600 bg-gray-800 bg-opacity-30 p-0.5 px-1 text-sm w-full rounded-md\");\n\t\t\tattr(input, \"type\", \"text\");\n\t\t\tinput.value = /*value*/ ctx[0];\n\t\t\tattr(div, \"class\", \"px-3 pt-0 pb-1\");\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, div, anchor);\n\t\t\tappend(div, input);\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(input, \"input\", /*input_handler*/ ctx[2]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (dirty & /*value*/ 1 && input.value !== /*value*/ ctx[0]) {\n\t\t\t\tinput.value = /*value*/ ctx[0];\n\t\t\t}\n\t\t},\n\t\ti: noop,\n\t\to: noop,\n\t\td(detaching) {\n\t\t\tif (detaching) detach(div);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance($$self, $$props, $$invalidate) {\n\tlet { value } = $$props;\n\n\tlet { setValue = () => {\n\t\t\n\t} } = $$props;\n\n\tconst input_handler = e => {\n\t\tsetValue(e.target.value);\n\t\t$$invalidate(0, value = e.target.value);\n\t};\n\n\t$$self.$$set = $$props => {\n\t\tif ('value' in $$props) $$invalidate(0, value = $$props.value);\n\t\tif ('setValue' in $$props) $$invalidate(1, setValue = $$props.setValue);\n\t};\n\n\treturn [value, setValue, input_handler];\n}\n\nclass Text extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\t\tinit(this, options, instance, create_fragment, safe_not_equal, { value: 0, setValue: 1 });\n\t}\n}\n\nfunction initPuck(canvas) {\n  let uiContainer = document.querySelector(\".ui-container\");\n  let puckDown = false;\n  let puckId = \"\";\n  let pucks = {};\n  function blankUISink() {\n    return {\n      knob: /* @__PURE__ */ new Map(),\n      knobCounter: 0,\n      button: /* @__PURE__ */ new Map(),\n      buttonCounter: 0,\n      switch: /* @__PURE__ */ new Map(),\n      switchCounter: 0,\n      slider: /* @__PURE__ */ new Map(),\n      sliderCounter: 0,\n      puck: /* @__PURE__ */ new Map(),\n      puckCounter: 0\n    };\n  }\n  let uiSink = blankUISink();\n  let uiSinkLastFrame = blankUISink();\n  window.addEventListener(\"mousedown\", (e) => {\n    if (e.target.closest(\".puck\")) {\n      let p = e.target.closest(\".puck\");\n      p.dataset.down = true;\n      let mp = getPosRelativeToCanvas([e.clientX, e.clientY]);\n      let rect = p.getBoundingClientRect();\n      let pmp = getPosRelativeToCanvas([rect.left + rect.width / 2, rect.top + rect.height / 2]);\n      p.dataset.offsetX = pmp[0] - mp[0];\n      p.dataset.offsetY = pmp[1] - mp[1];\n      puckId = p.dataset.id;\n      puckDown = true;\n      lastPuckPos = [...pmp];\n      updateDocumentCursor();\n    }\n  });\n  function updateDocumentCursor() {\n    if (puckDown) {\n      document.body.style.cursor = \"grabbing\";\n    } else {\n      document.body.style.cursor = \"default\";\n    }\n  }\n  window.addEventListener(\"mouseup\", (e) => {\n    puckDown = false;\n    updateDocumentCursor();\n    for (let el of [...document.querySelectorAll(\".puck\")]) {\n      let p = el;\n      if (p.dataset.down == \"true\") {\n        p.dataset.down = \"false\";\n      }\n    }\n  });\n  function getPosRelativeToCanvas(pos) {\n    let rect = canvas.getBoundingClientRect();\n    return [\n      (pos[0] - rect.left) / rect.width * canvas.width,\n      (pos[1] - rect.top) / rect.height * canvas.height\n    ];\n  }\n  const host = new Host({\n    target: document.body,\n    props: {\n      children: []\n    }\n  });\n  host.$on(\"init\", (e) => {\n  });\n  let lastPuckPos = [0, 0];\n  window.addEventListener(\"mousemove\", (e) => {\n    if (!puckDown)\n      return;\n    let puck = document.querySelector(`.puck[data-id=\"${puckId}\"]`);\n    if (!puck)\n      return;\n    let [x, y] = getPosRelativeToCanvas([e.clientX, e.clientY]);\n    let velocityX = x - lastPuckPos[0];\n    let velocityY = y - lastPuckPos[1];\n    let vectorLength = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n    let angle = Math.atan2(velocityY, velocityX);\n    let oldVel = parseFloat(puck.dataset.velocity ?? \"0\");\n    puck.dataset.velocity = (oldVel + vectorLength).toString();\n    let oldAngle = parseFloat(puck.dataset.angle ?? \"0\");\n    let oldDirVelX = oldVel * Math.cos(oldAngle);\n    let oldDirVelY = oldVel * Math.sin(oldAngle);\n    let newDirVelX = vectorLength * Math.cos(angle);\n    let newDirVelY = vectorLength * Math.sin(angle);\n    puck.dataset.angle = Math.atan2(oldDirVelY + newDirVelY, oldDirVelX + newDirVelX).toString();\n    lastPuckPos = [x, y];\n    puck.dataset.oldX = puck.offsetLeft.toString();\n    puck.dataset.oldY = puck.offsetTop.toString();\n    x += parseInt(puck.dataset.offsetX ?? \"0\");\n    y += parseInt(puck.dataset.offsetY ?? \"0\");\n    uiSinkLastFrame.puck.set(puckId, { vec: [x, y] });\n  });\n  setInterval(() => {\n    for (let el of [...document.querySelectorAll(\".puck\")]) {\n      let p = el;\n      let maxSpeed = 105;\n      let restitution = 0.75;\n      p.dataset.velocity = Math.max(\n        Math.min(parseFloat(p.dataset.velocity ?? \"0\") * restitution, maxSpeed),\n        -maxSpeed\n      ).toString();\n      let angle = parseFloat(p.dataset.angle ?? \"0\");\n      let velocity = parseFloat(p.dataset.velocity ?? \"0\") / 5;\n      if (p.dataset.down == \"true\")\n        continue;\n      {\n        if (uiSink.puck.has(p.dataset.id) && velocity > 1) {\n          let { vec } = uiSink.puck.get(p.dataset.id);\n          uiSinkLastFrame.puck.set(p.dataset.id, {\n            vec: [vec[0] + Math.cos(angle) * velocity, vec[1] + Math.sin(angle) * velocity]\n          });\n        }\n      }\n    }\n  }, 1e3 / 60);\n  const SIMPLE_MATH = {\n    clamp(a, min, max) {\n      return Math.min(Math.max(a, min), max);\n    },\n    clamp2(a, min, max) {\n      return [this.clamp(a[0], min[0], max[0]), this.clamp(a[1], min[1], max[1])];\n    }\n  };\n  function _SHADEUP_UI_PUCK(vec, radius = 10, invisible = false) {\n    let id = uiSink.puckCounter++;\n    uiSink.puck.set(id.toString(), {\n      vec: [...vec]\n    });\n    addPuck(id.toString(), vec, radius, invisible);\n    if (uiSinkLastFrame.puck.has(id.toString())) {\n      return SIMPLE_MATH.clamp2(\n        uiSinkLastFrame.puck.get(id.toString()).vec,\n        [0, 0],\n        [canvas.width, canvas.height]\n      );\n    } else {\n      return [...vec];\n    }\n  }\n  function addPuck(name, puck, radius = 10, invisible = false) {\n    puck = [puck[0] / canvas.width, puck[1] / canvas.height];\n    if (pucks[name]) {\n      pucks[name].div.style.left = `calc(${puck[0] * 100}% - ${radius}px)`;\n      pucks[name].div.style.top = `calc(${puck[1] * 100}% - ${radius}px)`;\n      pucks[name].div.style.opacity = invisible ? \"0\" : \"1\";\n      pucks[name].div.style.width = `${radius * 2}px`;\n      pucks[name].div.style.height = `${radius * 2}px`;\n      return;\n    }\n    let div = document.createElement(\"div\");\n    div.className = \"puck\";\n    div.dataset.id = name;\n    div.innerHTML = `<span><svg style=\"width: 10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill=\"#505050\" d=\"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40H40c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40H200c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40H360c-22.1 0-40 17.9-40 40v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328z\"/></svg></span>`;\n    div.style.width = `${radius * 2}px`;\n    div.style.height = `${radius * 2}px`;\n    div.style.opacity = invisible ? \"0\" : \"1\";\n    uiContainer.appendChild(div);\n    pucks[name] = {\n      div,\n      puck\n    };\n  }\n  let hostChildren = [];\n  let childrenCrumbs = [];\n  let rootChild;\n  let preFrameHandlers = [];\n  let postFrameHandlers = [];\n  function createImmediateModeUIElement(type, component, canHaveChildren = false) {\n    let els = /* @__PURE__ */ new Map();\n    function blankUISink2() {\n      return {\n        map: /* @__PURE__ */ new Map(),\n        counter: 0\n      };\n    }\n    let uiSink2 = blankUISink2();\n    let uiSinkLastFrame2 = blankUISink2();\n    preFrameHandlers.push(() => {\n      uiSink2 = blankUISink2();\n    });\n    postFrameHandlers.push(() => {\n      for (let name of els.keys()) {\n        if (!uiSink2.map.has(name)) ;\n      }\n      uiSinkLastFrame2 = blankUISink2();\n    });\n    function invoke(value, options = {}) {\n      let id = uiSink2.counter++;\n      uiSink2.map.set(id.toString(), {\n        value,\n        options\n      });\n      addControl(\n        id.toString(),\n        {\n          value,\n          options\n        },\n        canHaveChildren\n      );\n      if (uiSinkLastFrame2.map.has(id.toString())) {\n        return uiSinkLastFrame2.map.get(id.toString()).value;\n      } else {\n        return value;\n      }\n    }\n    function addControl(name, v, canHaveChildren2 = false) {\n      if (els.has(name)) {\n        els.get(name).$set({\n          value: v.value,\n          ...v.options\n        });\n        return;\n      }\n      function setValue(v2) {\n        uiSinkLastFrame2.map.set(name, {\n          value: v2\n        });\n      }\n      rootChild.children?.push({\n        type: component,\n        value: v.value,\n        options: v.options,\n        children: canHaveChildren2 ? [] : void 0,\n        setValue,\n        name: type\n      });\n      if (canHaveChildren2) {\n        childrenCrumbs.push(rootChild);\n        rootChild = rootChild.children[rootChild.children.length - 1];\n      }\n    }\n    return invoke;\n  }\n  let slider = createImmediateModeUIElement(\"slider\", Slider);\n  let label = createImmediateModeUIElement(\"label\", Label);\n  let group = createImmediateModeUIElement(\"group\", Group, true);\n  let checkbox = createImmediateModeUIElement(\"checkbox\", Checkbox);\n  let textbox = createImmediateModeUIElement(\"textbox\", Text);\n  let combo = createImmediateModeUIElement(\"combo\", Combo);\n  let button = createImmediateModeUIElement(\"button\", Button);\n  function preFrame() {\n    hostChildren = [];\n    rootChild = {\n      type: FloatingPanel,\n      value: null,\n      children: [],\n      options: {},\n      setValue: () => {\n      },\n      name: \"root\"\n    };\n    hostChildren.push(rootChild);\n    childrenCrumbs = [rootChild];\n    for (let handler of preFrameHandlers) {\n      handler();\n    }\n    uiSink = blankUISink();\n  }\n  return {\n    frame() {\n      for (let name in pucks) {\n        if (!uiSink.puck.has(name)) {\n          pucks[name].div.remove();\n          delete pucks[name];\n        }\n      }\n      for (let post of postFrameHandlers) {\n        post();\n      }\n      uiSinkLastFrame = blankUISink();\n      host.$set({\n        children: hostChildren\n      });\n    },\n    preFrame,\n    puck: _SHADEUP_UI_PUCK,\n    slider,\n    controls: {\n      label,\n      group,\n      checkbox,\n      textbox,\n      combo,\n      button,\n      pop() {\n        childrenCrumbs.pop();\n        rootChild = childrenCrumbs[childrenCrumbs.length - 1];\n      }\n    }\n  };\n}\n\nfunction initUI(canvas) {\n  let { frame, puck, preFrame, slider, controls } = initPuck(canvas);\n  return {\n    frame() {\n      frame();\n    },\n    preFrame() {\n      preFrame();\n    },\n    puck,\n    slider,\n    controls\n    // controls: host\n  };\n}\n\nconst addUIHook = (engine) => {\n  let { frame: uiFrame, puck, slider, preFrame: uiPreFrame, controls } = initUI(engine.canvas);\n  engine._SHADEUP_UI_PUCK = puck;\n  engine._SHADEUP_UI_SLIDER = slider;\n  engine._SHADEUP_UI_CONTROL = (name, ...args) => {\n    return controls[name](...args);\n  };\n  return {\n    beforeFrame() {\n      uiPreFrame();\n    },\n    afterFrame() {\n      uiFrame();\n    }\n  };\n};\n\nexport { addUIHook };\n"
  },
  {
    "path": "package/engine.js",
    "content": "(function (global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\"\n    ? factory(exports)\n    : typeof define === \"function\" && define.amd\n    ? define([\"exports\"], factory)\n    : ((global =\n        typeof globalThis !== \"undefined\" ? globalThis : global || self),\n      factory((global.ShadeupEngine = {})));\n})(this, function (exports) {\n  \"use strict\";\n\n  class GenericShader {\n    uniqueSourceKey = \"\";\n    code;\n    type;\n    payload;\n    parent = null;\n    constructor(code, type) {\n      this.code = code;\n      this.type = type;\n    }\n  }\n  class UniformValue {\n    valueType;\n    value;\n    constructor(valueType, value) {\n      this.valueType = valueType;\n      this.value = value;\n    }\n  }\n  function makePrimitiveUniform(type, value) {\n    return new UniformValue(type, value);\n  }\n  class UniformPayload {\n    uniforms = /* @__PURE__ */ new Map();\n  }\n  class ShaderDispatch {\n    type;\n    drawType = \"screen\";\n    vertexUniforms;\n    fragmentUniforms;\n    depthOnly = false;\n    backfaceCulling = true;\n    reverseZ = false;\n    depthCompare = \"auto\";\n    attachments = null;\n    vertexShader = null;\n    fragmentShader = null;\n    computeShader = null;\n    geometry = null;\n    indexBuffer = null;\n    drawCount = 0;\n    instanceCount = 1;\n    indirectBuffer = null;\n    indirectOffset = 0;\n    overrideDepth = null;\n    computeCount = [0, 0, 0];\n    constructor(type) {\n      this.type = type;\n      this.vertexUniforms = new UniformPayload();\n      this.fragmentUniforms = new UniformPayload();\n    }\n    setVertexUniform(name, value) {\n      this.vertexUniforms.uniforms.set(name, value);\n    }\n    setFragmentUniform(name, value) {\n      this.fragmentUniforms.uniforms.set(name, value);\n    }\n    setVertexShader(shader) {\n      this.vertexShader = shader;\n    }\n    setFragmentShader(shader) {\n      this.fragmentShader = shader;\n    }\n    setComputeShader(shader) {\n      this.computeShader = shader;\n    }\n    setGeometry(geometry) {\n      this.geometry = geometry;\n    }\n    setIndexBuffer(indexBuffer) {\n      this.indexBuffer = indexBuffer;\n    }\n  }\n  class GraphicsAdapter {\n    canvas;\n    contextMode = \"draw\";\n    listeners = /* @__PURE__ */ new Map();\n    viewportSize = [0, 0];\n    constructor(cnvs) {\n      this.canvas = cnvs;\n    }\n    clear(immediate = false, color = \"auto\") {}\n    draw() {}\n    init() {}\n    addEventListener(name, callback) {\n      let listeners = this.listeners.get(name);\n      if (!listeners) {\n        listeners = [];\n        this.listeners.set(name, listeners);\n      }\n      listeners.push(callback);\n    }\n    removeEventListener(name, callback) {\n      const listeners = this.listeners.get(name);\n      if (!listeners) return;\n      const index = listeners.indexOf(callback);\n      if (index === -1) return;\n      listeners.splice(index, 1);\n    }\n    triggerEvent(name, ...args) {\n      const listeners = this.listeners.get(name);\n      if (!listeners) return;\n      for (const listener of listeners) {\n        listener(...args);\n      }\n    }\n    dispatch(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      this.activateDrawContext();\n    }\n    activateDrawContext() {\n      if (this.contextMode === \"paint\") {\n        this.switchContext(\"draw\");\n      }\n    }\n    activatePaintContext() {\n      if (this.contextMode === \"draw\") {\n        this.switchContext(\"paint\");\n        this.flush();\n      }\n    }\n    switchContext(mode) {\n      this.contextMode = mode;\n      this.triggerEvent(\"context\", mode);\n    }\n    drawImage(image, x, y, width, height) {}\n    async downloadImage() {\n      return new Float32Array(0);\n    }\n    uploadImage(data) {}\n    setViewport(width, height) {\n      this.viewportSize = [width, height];\n    }\n    getOrCreateShader(instance, type, config) {\n      return new GenericShader(\"\", \"vertex\");\n    }\n    createShader(code, type) {\n      return new GenericShader(\"\", \"vertex\");\n    }\n    unbindTexture(texture) {}\n    dispose() {}\n    flush() {\n      this.triggerEvent(\"flush\");\n    }\n    waitForDraw() {\n      return Promise.resolve();\n    }\n  }\n\n  /**\n   * @module LRUCache\n   */\n  const perf =\n    typeof performance === \"object\" &&\n    performance &&\n    typeof performance.now === \"function\"\n      ? performance\n      : Date;\n  const warned = new Set();\n  /* c8 ignore start */\n  const PROCESS = typeof process === \"object\" && !!process ? process : {};\n  /* c8 ignore start */\n  const emitWarning = (msg, type, code, fn) => {\n    typeof PROCESS.emitWarning === \"function\"\n      ? PROCESS.emitWarning(msg, type, code, fn)\n      : console.error(`[${code}] ${type}: ${msg}`);\n  };\n  let AC = globalThis.AbortController;\n  let AS = globalThis.AbortSignal;\n  /* c8 ignore start */\n  if (typeof AC === \"undefined\") {\n    //@ts-ignore\n    AS = class AbortSignal {\n      onabort;\n      _onabort = [];\n      reason;\n      aborted = false;\n      addEventListener(_, fn) {\n        this._onabort.push(fn);\n      }\n    };\n    //@ts-ignore\n    AC = class AbortController {\n      constructor() {\n        warnACPolyfill();\n      }\n      signal = new AS();\n      abort(reason) {\n        if (this.signal.aborted) return;\n        //@ts-ignore\n        this.signal.reason = reason;\n        //@ts-ignore\n        this.signal.aborted = true;\n        //@ts-ignore\n        for (const fn of this.signal._onabort) {\n          fn(reason);\n        }\n        this.signal.onabort?.(reason);\n      }\n    };\n    let printACPolyfillWarning =\n      PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== \"1\";\n    const warnACPolyfill = () => {\n      if (!printACPolyfillWarning) return;\n      printACPolyfillWarning = false;\n      emitWarning(\n        \"AbortController is not defined. If using lru-cache in \" +\n          \"node 14, load an AbortController polyfill from the \" +\n          \"`node-abort-controller` package. A minimal polyfill is \" +\n          \"provided for use by LRUCache.fetch(), but it should not be \" +\n          \"relied upon in other contexts (eg, passing it to other APIs that \" +\n          \"use AbortController/AbortSignal might have undesirable effects). \" +\n          \"You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.\",\n        \"NO_ABORT_CONTROLLER\",\n        \"ENOTSUP\",\n        warnACPolyfill\n      );\n    };\n  }\n  /* c8 ignore stop */\n  const shouldWarn = (code) => !warned.has(code);\n  const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n  /* c8 ignore start */\n  // This is a little bit ridiculous, tbh.\n  // The maximum array length is 2^32-1 or thereabouts on most JS impls.\n  // And well before that point, you're caching the entire world, I mean,\n  // that's ~32GB of just integers for the next/prev links, plus whatever\n  // else to hold that many keys and values.  Just filling the memory with\n  // zeroes at init time is brutal when you get that big.\n  // But why not be complete?\n  // Maybe in the future, these limits will have expanded.\n  const getUintArray = (max) =>\n    !isPosInt(max)\n      ? null\n      : max <= Math.pow(2, 8)\n      ? Uint8Array\n      : max <= Math.pow(2, 16)\n      ? Uint16Array\n      : max <= Math.pow(2, 32)\n      ? Uint32Array\n      : max <= Number.MAX_SAFE_INTEGER\n      ? ZeroArray\n      : null;\n  /* c8 ignore stop */\n  class ZeroArray extends Array {\n    constructor(size) {\n      super(size);\n      this.fill(0);\n    }\n  }\n  class Stack {\n    heap;\n    length;\n    // private constructor\n    static #constructing = false;\n    static create(max) {\n      const HeapCls = getUintArray(max);\n      if (!HeapCls) return [];\n      Stack.#constructing = true;\n      const s = new Stack(max, HeapCls);\n      Stack.#constructing = false;\n      return s;\n    }\n    constructor(max, HeapCls) {\n      /* c8 ignore start */\n      if (!Stack.#constructing) {\n        throw new TypeError(\"instantiate Stack using Stack.create(n)\");\n      }\n      /* c8 ignore stop */\n      this.heap = new HeapCls(max);\n      this.length = 0;\n    }\n    push(n) {\n      this.heap[this.length++] = n;\n    }\n    pop() {\n      return this.heap[--this.length];\n    }\n  }\n  /**\n   * Default export, the thing you're using this module to get.\n   *\n   * All properties from the options object (with the exception of\n   * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as\n   * normal public members. (`max` and `maxBase` are read-only getters.)\n   * Changing any of these will alter the defaults for subsequent method calls,\n   * but is otherwise safe.\n   */\n  class LRUCache {\n    // properties coming in from the options of these, only max and maxSize\n    // really *need* to be protected. The rest can be modified, as they just\n    // set defaults for various methods.\n    #max;\n    #maxSize;\n    #dispose;\n    #disposeAfter;\n    #fetchMethod;\n    /**\n     * {@link LRUCache.OptionsBase.ttl}\n     */\n    ttl;\n    /**\n     * {@link LRUCache.OptionsBase.ttlResolution}\n     */\n    ttlResolution;\n    /**\n     * {@link LRUCache.OptionsBase.ttlAutopurge}\n     */\n    ttlAutopurge;\n    /**\n     * {@link LRUCache.OptionsBase.updateAgeOnGet}\n     */\n    updateAgeOnGet;\n    /**\n     * {@link LRUCache.OptionsBase.updateAgeOnHas}\n     */\n    updateAgeOnHas;\n    /**\n     * {@link LRUCache.OptionsBase.allowStale}\n     */\n    allowStale;\n    /**\n     * {@link LRUCache.OptionsBase.noDisposeOnSet}\n     */\n    noDisposeOnSet;\n    /**\n     * {@link LRUCache.OptionsBase.noUpdateTTL}\n     */\n    noUpdateTTL;\n    /**\n     * {@link LRUCache.OptionsBase.maxEntrySize}\n     */\n    maxEntrySize;\n    /**\n     * {@link LRUCache.OptionsBase.sizeCalculation}\n     */\n    sizeCalculation;\n    /**\n     * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n     */\n    noDeleteOnFetchRejection;\n    /**\n     * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n     */\n    noDeleteOnStaleGet;\n    /**\n     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n     */\n    allowStaleOnFetchAbort;\n    /**\n     * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n     */\n    allowStaleOnFetchRejection;\n    /**\n     * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n     */\n    ignoreFetchAbort;\n    // computed properties\n    #size;\n    #calculatedSize;\n    #keyMap;\n    #keyList;\n    #valList;\n    #next;\n    #prev;\n    #head;\n    #tail;\n    #free;\n    #disposed;\n    #sizes;\n    #starts;\n    #ttls;\n    #hasDispose;\n    #hasFetchMethod;\n    #hasDisposeAfter;\n    /**\n     * Do not call this method unless you need to inspect the\n     * inner workings of the cache.  If anything returned by this\n     * object is modified in any way, strange breakage may occur.\n     *\n     * These fields are private for a reason!\n     *\n     * @internal\n     */\n    static unsafeExposeInternals(c) {\n      return {\n        // properties\n        starts: c.#starts,\n        ttls: c.#ttls,\n        sizes: c.#sizes,\n        keyMap: c.#keyMap,\n        keyList: c.#keyList,\n        valList: c.#valList,\n        next: c.#next,\n        prev: c.#prev,\n        get head() {\n          return c.#head;\n        },\n        get tail() {\n          return c.#tail;\n        },\n        free: c.#free,\n        // methods\n        isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n        backgroundFetch: (k, index, options, context) =>\n          c.#backgroundFetch(k, index, options, context),\n        moveToTail: (index) => c.#moveToTail(index),\n        indexes: (options) => c.#indexes(options),\n        rindexes: (options) => c.#rindexes(options),\n        isStale: (index) => c.#isStale(index),\n      };\n    }\n    // Protected read-only members\n    /**\n     * {@link LRUCache.OptionsBase.max} (read-only)\n     */\n    get max() {\n      return this.#max;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.maxSize} (read-only)\n     */\n    get maxSize() {\n      return this.#maxSize;\n    }\n    /**\n     * The total computed size of items in the cache (read-only)\n     */\n    get calculatedSize() {\n      return this.#calculatedSize;\n    }\n    /**\n     * The number of items stored in the cache (read-only)\n     */\n    get size() {\n      return this.#size;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n     */\n    get fetchMethod() {\n      return this.#fetchMethod;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.dispose} (read-only)\n     */\n    get dispose() {\n      return this.#dispose;\n    }\n    /**\n     * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n     */\n    get disposeAfter() {\n      return this.#disposeAfter;\n    }\n    constructor(options) {\n      const {\n        max = 0,\n        ttl,\n        ttlResolution = 1,\n        ttlAutopurge,\n        updateAgeOnGet,\n        updateAgeOnHas,\n        allowStale,\n        dispose,\n        disposeAfter,\n        noDisposeOnSet,\n        noUpdateTTL,\n        maxSize = 0,\n        maxEntrySize = 0,\n        sizeCalculation,\n        fetchMethod,\n        noDeleteOnFetchRejection,\n        noDeleteOnStaleGet,\n        allowStaleOnFetchRejection,\n        allowStaleOnFetchAbort,\n        ignoreFetchAbort,\n      } = options;\n      if (max !== 0 && !isPosInt(max)) {\n        throw new TypeError(\"max option must be a nonnegative integer\");\n      }\n      const UintArray = max ? getUintArray(max) : Array;\n      if (!UintArray) {\n        throw new Error(\"invalid max value: \" + max);\n      }\n      this.#max = max;\n      this.#maxSize = maxSize;\n      this.maxEntrySize = maxEntrySize || this.#maxSize;\n      this.sizeCalculation = sizeCalculation;\n      if (this.sizeCalculation) {\n        if (!this.#maxSize && !this.maxEntrySize) {\n          throw new TypeError(\n            \"cannot set sizeCalculation without setting maxSize or maxEntrySize\"\n          );\n        }\n        if (typeof this.sizeCalculation !== \"function\") {\n          throw new TypeError(\"sizeCalculation set to non-function\");\n        }\n      }\n      if (fetchMethod !== undefined && typeof fetchMethod !== \"function\") {\n        throw new TypeError(\"fetchMethod must be a function if specified\");\n      }\n      this.#fetchMethod = fetchMethod;\n      this.#hasFetchMethod = !!fetchMethod;\n      this.#keyMap = new Map();\n      this.#keyList = new Array(max).fill(undefined);\n      this.#valList = new Array(max).fill(undefined);\n      this.#next = new UintArray(max);\n      this.#prev = new UintArray(max);\n      this.#head = 0;\n      this.#tail = 0;\n      this.#free = Stack.create(max);\n      this.#size = 0;\n      this.#calculatedSize = 0;\n      if (typeof dispose === \"function\") {\n        this.#dispose = dispose;\n      }\n      if (typeof disposeAfter === \"function\") {\n        this.#disposeAfter = disposeAfter;\n        this.#disposed = [];\n      } else {\n        this.#disposeAfter = undefined;\n        this.#disposed = undefined;\n      }\n      this.#hasDispose = !!this.#dispose;\n      this.#hasDisposeAfter = !!this.#disposeAfter;\n      this.noDisposeOnSet = !!noDisposeOnSet;\n      this.noUpdateTTL = !!noUpdateTTL;\n      this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n      this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n      this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n      this.ignoreFetchAbort = !!ignoreFetchAbort;\n      // NB: maxEntrySize is set to maxSize if it's set\n      if (this.maxEntrySize !== 0) {\n        if (this.#maxSize !== 0) {\n          if (!isPosInt(this.#maxSize)) {\n            throw new TypeError(\n              \"maxSize must be a positive integer if specified\"\n            );\n          }\n        }\n        if (!isPosInt(this.maxEntrySize)) {\n          throw new TypeError(\n            \"maxEntrySize must be a positive integer if specified\"\n          );\n        }\n        this.#initializeSizeTracking();\n      }\n      this.allowStale = !!allowStale;\n      this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n      this.updateAgeOnGet = !!updateAgeOnGet;\n      this.updateAgeOnHas = !!updateAgeOnHas;\n      this.ttlResolution =\n        isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1;\n      this.ttlAutopurge = !!ttlAutopurge;\n      this.ttl = ttl || 0;\n      if (this.ttl) {\n        if (!isPosInt(this.ttl)) {\n          throw new TypeError(\"ttl must be a positive integer if specified\");\n        }\n        this.#initializeTTLTracking();\n      }\n      // do not allow completely unbounded caches\n      if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n        throw new TypeError(\"At least one of max, maxSize, or ttl is required\");\n      }\n      if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n        const code = \"LRU_CACHE_UNBOUNDED\";\n        if (shouldWarn(code)) {\n          warned.add(code);\n          const msg =\n            \"TTL caching without ttlAutopurge, max, or maxSize can \" +\n            \"result in unbounded memory consumption.\";\n          emitWarning(msg, \"UnboundedCacheWarning\", code, LRUCache);\n        }\n      }\n    }\n    /**\n     * Return the remaining TTL time for a given entry key\n     */\n    getRemainingTTL(key) {\n      return this.#keyMap.has(key) ? Infinity : 0;\n    }\n    #initializeTTLTracking() {\n      const ttls = new ZeroArray(this.#max);\n      const starts = new ZeroArray(this.#max);\n      this.#ttls = ttls;\n      this.#starts = starts;\n      this.#setItemTTL = (index, ttl, start = perf.now()) => {\n        starts[index] = ttl !== 0 ? start : 0;\n        ttls[index] = ttl;\n        if (ttl !== 0 && this.ttlAutopurge) {\n          const t = setTimeout(() => {\n            if (this.#isStale(index)) {\n              this.delete(this.#keyList[index]);\n            }\n          }, ttl + 1);\n          // unref() not supported on all platforms\n          /* c8 ignore start */\n          if (t.unref) {\n            t.unref();\n          }\n          /* c8 ignore stop */\n        }\n      };\n      this.#updateItemAge = (index) => {\n        starts[index] = ttls[index] !== 0 ? perf.now() : 0;\n      };\n      this.#statusTTL = (status, index) => {\n        if (ttls[index]) {\n          const ttl = ttls[index];\n          const start = starts[index];\n          status.ttl = ttl;\n          status.start = start;\n          status.now = cachedNow || getNow();\n          const age = status.now - start;\n          status.remainingTTL = ttl - age;\n        }\n      };\n      // debounce calls to perf.now() to 1s so we're not hitting\n      // that costly call repeatedly.\n      let cachedNow = 0;\n      const getNow = () => {\n        const n = perf.now();\n        if (this.ttlResolution > 0) {\n          cachedNow = n;\n          const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n          // not available on all platforms\n          /* c8 ignore start */\n          if (t.unref) {\n            t.unref();\n          }\n          /* c8 ignore stop */\n        }\n        return n;\n      };\n      this.getRemainingTTL = (key) => {\n        const index = this.#keyMap.get(key);\n        if (index === undefined) {\n          return 0;\n        }\n        const ttl = ttls[index];\n        const start = starts[index];\n        if (ttl === 0 || start === 0) {\n          return Infinity;\n        }\n        const age = (cachedNow || getNow()) - start;\n        return ttl - age;\n      };\n      this.#isStale = (index) => {\n        return (\n          ttls[index] !== 0 &&\n          starts[index] !== 0 &&\n          (cachedNow || getNow()) - starts[index] > ttls[index]\n        );\n      };\n    }\n    // conditionally set private methods related to TTL\n    #updateItemAge = () => {};\n    #statusTTL = () => {};\n    #setItemTTL = () => {};\n    /* c8 ignore stop */\n    #isStale = () => false;\n    #initializeSizeTracking() {\n      const sizes = new ZeroArray(this.#max);\n      this.#calculatedSize = 0;\n      this.#sizes = sizes;\n      this.#removeItemSize = (index) => {\n        this.#calculatedSize -= sizes[index];\n        sizes[index] = 0;\n      };\n      this.#requireSize = (k, v, size, sizeCalculation) => {\n        // provisionally accept background fetches.\n        // actual value size will be checked when they return.\n        if (this.#isBackgroundFetch(v)) {\n          return 0;\n        }\n        if (!isPosInt(size)) {\n          if (sizeCalculation) {\n            if (typeof sizeCalculation !== \"function\") {\n              throw new TypeError(\"sizeCalculation must be a function\");\n            }\n            size = sizeCalculation(v, k);\n            if (!isPosInt(size)) {\n              throw new TypeError(\n                \"sizeCalculation return invalid (expect positive integer)\"\n              );\n            }\n          } else {\n            throw new TypeError(\n              \"invalid size value (must be positive integer). \" +\n                \"When maxSize or maxEntrySize is used, sizeCalculation \" +\n                \"or size must be set.\"\n            );\n          }\n        }\n        return size;\n      };\n      this.#addItemSize = (index, size, status) => {\n        sizes[index] = size;\n        if (this.#maxSize) {\n          const maxSize = this.#maxSize - sizes[index];\n          while (this.#calculatedSize > maxSize) {\n            this.#evict(true);\n          }\n        }\n        this.#calculatedSize += sizes[index];\n        if (status) {\n          status.entrySize = size;\n          status.totalCalculatedSize = this.#calculatedSize;\n        }\n      };\n    }\n    #removeItemSize = (_i) => {};\n    #addItemSize = (_i, _s, _st) => {};\n    #requireSize = (_k, _v, size, sizeCalculation) => {\n      if (size || sizeCalculation) {\n        throw new TypeError(\n          \"cannot set size without setting maxSize or maxEntrySize on cache\"\n        );\n      }\n      return 0;\n    };\n    *#indexes({ allowStale = this.allowStale } = {}) {\n      if (this.#size) {\n        for (let i = this.#tail; true; ) {\n          if (!this.#isValidIndex(i)) {\n            break;\n          }\n          if (allowStale || !this.#isStale(i)) {\n            yield i;\n          }\n          if (i === this.#head) {\n            break;\n          } else {\n            i = this.#prev[i];\n          }\n        }\n      }\n    }\n    *#rindexes({ allowStale = this.allowStale } = {}) {\n      if (this.#size) {\n        for (let i = this.#head; true; ) {\n          if (!this.#isValidIndex(i)) {\n            break;\n          }\n          if (allowStale || !this.#isStale(i)) {\n            yield i;\n          }\n          if (i === this.#tail) {\n            break;\n          } else {\n            i = this.#next[i];\n          }\n        }\n      }\n    }\n    #isValidIndex(index) {\n      return (\n        index !== undefined && this.#keyMap.get(this.#keyList[index]) === index\n      );\n    }\n    /**\n     * Return a generator yielding `[key, value]` pairs,\n     * in order from most recently used to least recently used.\n     */\n    *entries() {\n      for (const i of this.#indexes()) {\n        if (\n          this.#valList[i] !== undefined &&\n          this.#keyList[i] !== undefined &&\n          !this.#isBackgroundFetch(this.#valList[i])\n        ) {\n          yield [this.#keyList[i], this.#valList[i]];\n        }\n      }\n    }\n    /**\n     * Inverse order version of {@link LRUCache.entries}\n     *\n     * Return a generator yielding `[key, value]` pairs,\n     * in order from least recently used to most recently used.\n     */\n    *rentries() {\n      for (const i of this.#rindexes()) {\n        if (\n          this.#valList[i] !== undefined &&\n          this.#keyList[i] !== undefined &&\n          !this.#isBackgroundFetch(this.#valList[i])\n        ) {\n          yield [this.#keyList[i], this.#valList[i]];\n        }\n      }\n    }\n    /**\n     * Return a generator yielding the keys in the cache,\n     * in order from most recently used to least recently used.\n     */\n    *keys() {\n      for (const i of this.#indexes()) {\n        const k = this.#keyList[i];\n        if (k !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n          yield k;\n        }\n      }\n    }\n    /**\n     * Inverse order version of {@link LRUCache.keys}\n     *\n     * Return a generator yielding the keys in the cache,\n     * in order from least recently used to most recently used.\n     */\n    *rkeys() {\n      for (const i of this.#rindexes()) {\n        const k = this.#keyList[i];\n        if (k !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n          yield k;\n        }\n      }\n    }\n    /**\n     * Return a generator yielding the values in the cache,\n     * in order from most recently used to least recently used.\n     */\n    *values() {\n      for (const i of this.#indexes()) {\n        const v = this.#valList[i];\n        if (v !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n          yield this.#valList[i];\n        }\n      }\n    }\n    /**\n     * Inverse order version of {@link LRUCache.values}\n     *\n     * Return a generator yielding the values in the cache,\n     * in order from least recently used to most recently used.\n     */\n    *rvalues() {\n      for (const i of this.#rindexes()) {\n        const v = this.#valList[i];\n        if (v !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n          yield this.#valList[i];\n        }\n      }\n    }\n    /**\n     * Iterating over the cache itself yields the same results as\n     * {@link LRUCache.entries}\n     */\n    [Symbol.iterator]() {\n      return this.entries();\n    }\n    /**\n     * Find a value for which the supplied fn method returns a truthy value,\n     * similar to Array.find().  fn is called as fn(value, key, cache).\n     */\n    find(fn, getOptions = {}) {\n      for (const i of this.#indexes()) {\n        const v = this.#valList[i];\n        const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n        if (value === undefined) continue;\n        if (fn(value, this.#keyList[i], this)) {\n          return this.get(this.#keyList[i], getOptions);\n        }\n      }\n    }\n    /**\n     * Call the supplied function on each item in the cache, in order from\n     * most recently used to least recently used.  fn is called as\n     * fn(value, key, cache).  Does not update age or recenty of use.\n     * Does not iterate over stale values.\n     */\n    forEach(fn, thisp = this) {\n      for (const i of this.#indexes()) {\n        const v = this.#valList[i];\n        const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n        if (value === undefined) continue;\n        fn.call(thisp, value, this.#keyList[i], this);\n      }\n    }\n    /**\n     * The same as {@link LRUCache.forEach} but items are iterated over in\n     * reverse order.  (ie, less recently used items are iterated over first.)\n     */\n    rforEach(fn, thisp = this) {\n      for (const i of this.#rindexes()) {\n        const v = this.#valList[i];\n        const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n        if (value === undefined) continue;\n        fn.call(thisp, value, this.#keyList[i], this);\n      }\n    }\n    /**\n     * Delete any stale entries. Returns true if anything was removed,\n     * false otherwise.\n     */\n    purgeStale() {\n      let deleted = false;\n      for (const i of this.#rindexes({ allowStale: true })) {\n        if (this.#isStale(i)) {\n          this.delete(this.#keyList[i]);\n          deleted = true;\n        }\n      }\n      return deleted;\n    }\n    /**\n     * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n     * passed to cache.load()\n     */\n    dump() {\n      const arr = [];\n      for (const i of this.#indexes({ allowStale: true })) {\n        const key = this.#keyList[i];\n        const v = this.#valList[i];\n        const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n        if (value === undefined || key === undefined) continue;\n        const entry = { value };\n        if (this.#ttls && this.#starts) {\n          entry.ttl = this.#ttls[i];\n          // always dump the start relative to a portable timestamp\n          // it's ok for this to be a bit slow, it's a rare operation.\n          const age = perf.now() - this.#starts[i];\n          entry.start = Math.floor(Date.now() - age);\n        }\n        if (this.#sizes) {\n          entry.size = this.#sizes[i];\n        }\n        arr.unshift([key, entry]);\n      }\n      return arr;\n    }\n    /**\n     * Reset the cache and load in the items in entries in the order listed.\n     * Note that the shape of the resulting cache may be different if the\n     * same options are not used in both caches.\n     */\n    load(arr) {\n      this.clear();\n      for (const [key, entry] of arr) {\n        if (entry.start) {\n          // entry.start is a portable timestamp, but we may be using\n          // node's performance.now(), so calculate the offset, so that\n          // we get the intended remaining TTL, no matter how long it's\n          // been on ice.\n          //\n          // it's ok for this to be a bit slow, it's a rare operation.\n          const age = Date.now() - entry.start;\n          entry.start = perf.now() - age;\n        }\n        this.set(key, entry.value, entry);\n      }\n    }\n    /**\n     * Add a value to the cache.\n     *\n     * Note: if `undefined` is specified as a value, this is an alias for\n     * {@link LRUCache#delete}\n     */\n    set(k, v, setOptions = {}) {\n      if (v === undefined) {\n        this.delete(k);\n        return this;\n      }\n      const {\n        ttl = this.ttl,\n        start,\n        noDisposeOnSet = this.noDisposeOnSet,\n        sizeCalculation = this.sizeCalculation,\n        status,\n      } = setOptions;\n      let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n      const size = this.#requireSize(\n        k,\n        v,\n        setOptions.size || 0,\n        sizeCalculation\n      );\n      // if the item doesn't fit, don't do anything\n      // NB: maxEntrySize set to maxSize by default\n      if (this.maxEntrySize && size > this.maxEntrySize) {\n        if (status) {\n          status.set = \"miss\";\n          status.maxEntrySizeExceeded = true;\n        }\n        // have to delete, in case something is there already.\n        this.delete(k);\n        return this;\n      }\n      let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n      if (index === undefined) {\n        // addition\n        index =\n          this.#size === 0\n            ? this.#tail\n            : this.#free.length !== 0\n            ? this.#free.pop()\n            : this.#size === this.#max\n            ? this.#evict(false)\n            : this.#size;\n        this.#keyList[index] = k;\n        this.#valList[index] = v;\n        this.#keyMap.set(k, index);\n        this.#next[this.#tail] = index;\n        this.#prev[index] = this.#tail;\n        this.#tail = index;\n        this.#size++;\n        this.#addItemSize(index, size, status);\n        if (status) status.set = \"add\";\n        noUpdateTTL = false;\n      } else {\n        // update\n        this.#moveToTail(index);\n        const oldVal = this.#valList[index];\n        if (v !== oldVal) {\n          if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n            oldVal.__abortController.abort(new Error(\"replaced\"));\n          } else if (!noDisposeOnSet) {\n            if (this.#hasDispose) {\n              this.#dispose?.(oldVal, k, \"set\");\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([oldVal, k, \"set\"]);\n            }\n          }\n          this.#removeItemSize(index);\n          this.#addItemSize(index, size, status);\n          this.#valList[index] = v;\n          if (status) {\n            status.set = \"replace\";\n            const oldValue =\n              oldVal && this.#isBackgroundFetch(oldVal)\n                ? oldVal.__staleWhileFetching\n                : oldVal;\n            if (oldValue !== undefined) status.oldValue = oldValue;\n          }\n        } else if (status) {\n          status.set = \"update\";\n        }\n      }\n      if (ttl !== 0 && !this.#ttls) {\n        this.#initializeTTLTracking();\n      }\n      if (this.#ttls) {\n        if (!noUpdateTTL) {\n          this.#setItemTTL(index, ttl, start);\n        }\n        if (status) this.#statusTTL(status, index);\n      }\n      if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed;\n        let task;\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task);\n        }\n      }\n      return this;\n    }\n    /**\n     * Evict the least recently used item, returning its value or\n     * `undefined` if cache is empty.\n     */\n    pop() {\n      try {\n        while (this.#size) {\n          const val = this.#valList[this.#head];\n          this.#evict(true);\n          if (this.#isBackgroundFetch(val)) {\n            if (val.__staleWhileFetching) {\n              return val.__staleWhileFetching;\n            }\n          } else if (val !== undefined) {\n            return val;\n          }\n        }\n      } finally {\n        if (this.#hasDisposeAfter && this.#disposed) {\n          const dt = this.#disposed;\n          let task;\n          while ((task = dt?.shift())) {\n            this.#disposeAfter?.(...task);\n          }\n        }\n      }\n    }\n    #evict(free) {\n      const head = this.#head;\n      const k = this.#keyList[head];\n      const v = this.#valList[head];\n      if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error(\"evicted\"));\n      } else if (this.#hasDispose || this.#hasDisposeAfter) {\n        if (this.#hasDispose) {\n          this.#dispose?.(v, k, \"evict\");\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v, k, \"evict\"]);\n        }\n      }\n      this.#removeItemSize(head);\n      // if we aren't about to use the index, then null these out\n      if (free) {\n        this.#keyList[head] = undefined;\n        this.#valList[head] = undefined;\n        this.#free.push(head);\n      }\n      if (this.#size === 1) {\n        this.#head = this.#tail = 0;\n        this.#free.length = 0;\n      } else {\n        this.#head = this.#next[head];\n      }\n      this.#keyMap.delete(k);\n      this.#size--;\n      return head;\n    }\n    /**\n     * Check if a key is in the cache, without updating the recency of use.\n     * Will return false if the item is stale, even though it is technically\n     * in the cache.\n     *\n     * Will not update item age unless\n     * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n     */\n    has(k, hasOptions = {}) {\n      const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n      const index = this.#keyMap.get(k);\n      if (index !== undefined) {\n        const v = this.#valList[index];\n        if (\n          this.#isBackgroundFetch(v) &&\n          v.__staleWhileFetching === undefined\n        ) {\n          return false;\n        }\n        if (!this.#isStale(index)) {\n          if (updateAgeOnHas) {\n            this.#updateItemAge(index);\n          }\n          if (status) {\n            status.has = \"hit\";\n            this.#statusTTL(status, index);\n          }\n          return true;\n        } else if (status) {\n          status.has = \"stale\";\n          this.#statusTTL(status, index);\n        }\n      } else if (status) {\n        status.has = \"miss\";\n      }\n      return false;\n    }\n    /**\n     * Like {@link LRUCache#get} but doesn't update recency or delete stale\n     * items.\n     *\n     * Returns `undefined` if the item is stale, unless\n     * {@link LRUCache.OptionsBase.allowStale} is set.\n     */\n    peek(k, peekOptions = {}) {\n      const { allowStale = this.allowStale } = peekOptions;\n      const index = this.#keyMap.get(k);\n      if (index !== undefined && (allowStale || !this.#isStale(index))) {\n        const v = this.#valList[index];\n        // either stale and allowed, or forcing a refresh of non-stale value\n        return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n      }\n    }\n    #backgroundFetch(k, index, options, context) {\n      const v = index === undefined ? undefined : this.#valList[index];\n      if (this.#isBackgroundFetch(v)) {\n        return v;\n      }\n      const ac = new AC();\n      const { signal } = options;\n      // when/if our AC signals, then stop listening to theirs.\n      signal?.addEventListener(\"abort\", () => ac.abort(signal.reason), {\n        signal: ac.signal,\n      });\n      const fetchOpts = {\n        signal: ac.signal,\n        options,\n        context,\n      };\n      const cb = (v, updateCache = false) => {\n        const { aborted } = ac.signal;\n        const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n        if (options.status) {\n          if (aborted && !updateCache) {\n            options.status.fetchAborted = true;\n            options.status.fetchError = ac.signal.reason;\n            if (ignoreAbort) options.status.fetchAbortIgnored = true;\n          } else {\n            options.status.fetchResolved = true;\n          }\n        }\n        if (aborted && !ignoreAbort && !updateCache) {\n          return fetchFail(ac.signal.reason);\n        }\n        // either we didn't abort, and are still here, or we did, and ignored\n        const bf = p;\n        if (this.#valList[index] === p) {\n          if (v === undefined) {\n            if (bf.__staleWhileFetching) {\n              this.#valList[index] = bf.__staleWhileFetching;\n            } else {\n              this.delete(k);\n            }\n          } else {\n            if (options.status) options.status.fetchUpdated = true;\n            this.set(k, v, fetchOpts.options);\n          }\n        }\n        return v;\n      };\n      const eb = (er) => {\n        if (options.status) {\n          options.status.fetchRejected = true;\n          options.status.fetchError = er;\n        }\n        return fetchFail(er);\n      };\n      const fetchFail = (er) => {\n        const { aborted } = ac.signal;\n        const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n        const allowStale =\n          allowStaleAborted || options.allowStaleOnFetchRejection;\n        const noDelete = allowStale || options.noDeleteOnFetchRejection;\n        const bf = p;\n        if (this.#valList[index] === p) {\n          // if we allow stale on fetch rejections, then we need to ensure that\n          // the stale value is not removed from the cache when the fetch fails.\n          const del = !noDelete || bf.__staleWhileFetching === undefined;\n          if (del) {\n            this.delete(k);\n          } else if (!allowStaleAborted) {\n            // still replace the *promise* with the stale value,\n            // since we are done with the promise at this point.\n            // leave it untouched if we're still waiting for an\n            // aborted background fetch that hasn't yet returned.\n            this.#valList[index] = bf.__staleWhileFetching;\n          }\n        }\n        if (allowStale) {\n          if (options.status && bf.__staleWhileFetching !== undefined) {\n            options.status.returnedStale = true;\n          }\n          return bf.__staleWhileFetching;\n        } else if (bf.__returned === bf) {\n          throw er;\n        }\n      };\n      const pcall = (res, rej) => {\n        const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n        if (fmp && fmp instanceof Promise) {\n          fmp.then((v) => res(v === undefined ? undefined : v), rej);\n        }\n        // ignored, we go until we finish, regardless.\n        // defer check until we are actually aborting,\n        // so fetchMethod can override.\n        ac.signal.addEventListener(\"abort\", () => {\n          if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) {\n            res(undefined);\n            // when it eventually resolves, update the cache.\n            if (options.allowStaleOnFetchAbort) {\n              res = (v) => cb(v, true);\n            }\n          }\n        });\n      };\n      if (options.status) options.status.fetchDispatched = true;\n      const p = new Promise(pcall).then(cb, eb);\n      const bf = Object.assign(p, {\n        __abortController: ac,\n        __staleWhileFetching: v,\n        __returned: undefined,\n      });\n      if (index === undefined) {\n        // internal, don't expose status.\n        this.set(k, bf, { ...fetchOpts.options, status: undefined });\n        index = this.#keyMap.get(k);\n      } else {\n        this.#valList[index] = bf;\n      }\n      return bf;\n    }\n    #isBackgroundFetch(p) {\n      if (!this.#hasFetchMethod) return false;\n      const b = p;\n      return (\n        !!b &&\n        b instanceof Promise &&\n        b.hasOwnProperty(\"__staleWhileFetching\") &&\n        b.__abortController instanceof AC\n      );\n    }\n    async fetch(k, fetchOptions = {}) {\n      const {\n        // get options\n        allowStale = this.allowStale,\n        updateAgeOnGet = this.updateAgeOnGet,\n        noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n        // set options\n        ttl = this.ttl,\n        noDisposeOnSet = this.noDisposeOnSet,\n        size = 0,\n        sizeCalculation = this.sizeCalculation,\n        noUpdateTTL = this.noUpdateTTL,\n        // fetch exclusive options\n        noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n        allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n        ignoreFetchAbort = this.ignoreFetchAbort,\n        allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n        context,\n        forceRefresh = false,\n        status,\n        signal,\n      } = fetchOptions;\n      if (!this.#hasFetchMethod) {\n        if (status) status.fetch = \"get\";\n        return this.get(k, {\n          allowStale,\n          updateAgeOnGet,\n          noDeleteOnStaleGet,\n          status,\n        });\n      }\n      const options = {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        ttl,\n        noDisposeOnSet,\n        size,\n        sizeCalculation,\n        noUpdateTTL,\n        noDeleteOnFetchRejection,\n        allowStaleOnFetchRejection,\n        allowStaleOnFetchAbort,\n        ignoreFetchAbort,\n        status,\n        signal,\n      };\n      let index = this.#keyMap.get(k);\n      if (index === undefined) {\n        if (status) status.fetch = \"miss\";\n        const p = this.#backgroundFetch(k, index, options, context);\n        return (p.__returned = p);\n      } else {\n        // in cache, maybe already fetching\n        const v = this.#valList[index];\n        if (this.#isBackgroundFetch(v)) {\n          const stale = allowStale && v.__staleWhileFetching !== undefined;\n          if (status) {\n            status.fetch = \"inflight\";\n            if (stale) status.returnedStale = true;\n          }\n          return stale ? v.__staleWhileFetching : (v.__returned = v);\n        }\n        // if we force a refresh, that means do NOT serve the cached value,\n        // unless we are already in the process of refreshing the cache.\n        const isStale = this.#isStale(index);\n        if (!forceRefresh && !isStale) {\n          if (status) status.fetch = \"hit\";\n          this.#moveToTail(index);\n          if (updateAgeOnGet) {\n            this.#updateItemAge(index);\n          }\n          if (status) this.#statusTTL(status, index);\n          return v;\n        }\n        // ok, it is stale or a forced refresh, and not already fetching.\n        // refresh the cache.\n        const p = this.#backgroundFetch(k, index, options, context);\n        const hasStale = p.__staleWhileFetching !== undefined;\n        const staleVal = hasStale && allowStale;\n        if (status) {\n          status.fetch = isStale ? \"stale\" : \"refresh\";\n          if (staleVal && isStale) status.returnedStale = true;\n        }\n        return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n      }\n    }\n    /**\n     * Return a value from the cache. Will update the recency of the cache\n     * entry found.\n     *\n     * If the key is not found, get() will return `undefined`.\n     */\n    get(k, getOptions = {}) {\n      const {\n        allowStale = this.allowStale,\n        updateAgeOnGet = this.updateAgeOnGet,\n        noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n        status,\n      } = getOptions;\n      const index = this.#keyMap.get(k);\n      if (index !== undefined) {\n        const value = this.#valList[index];\n        const fetching = this.#isBackgroundFetch(value);\n        if (status) this.#statusTTL(status, index);\n        if (this.#isStale(index)) {\n          if (status) status.get = \"stale\";\n          // delete only if not an in-flight background fetch\n          if (!fetching) {\n            if (!noDeleteOnStaleGet) {\n              this.delete(k);\n            }\n            if (status && allowStale) status.returnedStale = true;\n            return allowStale ? value : undefined;\n          } else {\n            if (\n              status &&\n              allowStale &&\n              value.__staleWhileFetching !== undefined\n            ) {\n              status.returnedStale = true;\n            }\n            return allowStale ? value.__staleWhileFetching : undefined;\n          }\n        } else {\n          if (status) status.get = \"hit\";\n          // if we're currently fetching it, we don't actually have it yet\n          // it's not stale, which means this isn't a staleWhileRefetching.\n          // If it's not stale, and fetching, AND has a __staleWhileFetching\n          // value, then that means the user fetched with {forceRefresh:true},\n          // so it's safe to return that value.\n          if (fetching) {\n            return value.__staleWhileFetching;\n          }\n          this.#moveToTail(index);\n          if (updateAgeOnGet) {\n            this.#updateItemAge(index);\n          }\n          return value;\n        }\n      } else if (status) {\n        status.get = \"miss\";\n      }\n    }\n    #connect(p, n) {\n      this.#prev[n] = p;\n      this.#next[p] = n;\n    }\n    #moveToTail(index) {\n      // if tail already, nothing to do\n      // if head, move head to next[index]\n      // else\n      //   move next[prev[index]] to next[index] (head has no prev)\n      //   move prev[next[index]] to prev[index]\n      // prev[index] = tail\n      // next[tail] = index\n      // tail = index\n      if (index !== this.#tail) {\n        if (index === this.#head) {\n          this.#head = this.#next[index];\n        } else {\n          this.#connect(this.#prev[index], this.#next[index]);\n        }\n        this.#connect(this.#tail, index);\n        this.#tail = index;\n      }\n    }\n    /**\n     * Deletes a key out of the cache.\n     * Returns true if the key was deleted, false otherwise.\n     */\n    delete(k) {\n      let deleted = false;\n      if (this.#size !== 0) {\n        const index = this.#keyMap.get(k);\n        if (index !== undefined) {\n          deleted = true;\n          if (this.#size === 1) {\n            this.clear();\n          } else {\n            this.#removeItemSize(index);\n            const v = this.#valList[index];\n            if (this.#isBackgroundFetch(v)) {\n              v.__abortController.abort(new Error(\"deleted\"));\n            } else if (this.#hasDispose || this.#hasDisposeAfter) {\n              if (this.#hasDispose) {\n                this.#dispose?.(v, k, \"delete\");\n              }\n              if (this.#hasDisposeAfter) {\n                this.#disposed?.push([v, k, \"delete\"]);\n              }\n            }\n            this.#keyMap.delete(k);\n            this.#keyList[index] = undefined;\n            this.#valList[index] = undefined;\n            if (index === this.#tail) {\n              this.#tail = this.#prev[index];\n            } else if (index === this.#head) {\n              this.#head = this.#next[index];\n            } else {\n              this.#next[this.#prev[index]] = this.#next[index];\n              this.#prev[this.#next[index]] = this.#prev[index];\n            }\n            this.#size--;\n            this.#free.push(index);\n          }\n        }\n      }\n      if (this.#hasDisposeAfter && this.#disposed?.length) {\n        const dt = this.#disposed;\n        let task;\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task);\n        }\n      }\n      return deleted;\n    }\n    /**\n     * Clear the cache entirely, throwing away all values.\n     */\n    clear() {\n      for (const index of this.#rindexes({ allowStale: true })) {\n        const v = this.#valList[index];\n        if (this.#isBackgroundFetch(v)) {\n          v.__abortController.abort(new Error(\"deleted\"));\n        } else {\n          const k = this.#keyList[index];\n          if (this.#hasDispose) {\n            this.#dispose?.(v, k, \"delete\");\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([v, k, \"delete\"]);\n          }\n        }\n      }\n      this.#keyMap.clear();\n      this.#valList.fill(undefined);\n      this.#keyList.fill(undefined);\n      if (this.#ttls && this.#starts) {\n        this.#ttls.fill(0);\n        this.#starts.fill(0);\n      }\n      if (this.#sizes) {\n        this.#sizes.fill(0);\n      }\n      this.#head = 0;\n      this.#tail = 0;\n      this.#free.length = 0;\n      this.#calculatedSize = 0;\n      this.#size = 0;\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed;\n        let task;\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task);\n        }\n      }\n    }\n  }\n\n  const FormatCapabilities = {\n    r8unorm: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    r8snorm: {\n      blendable: false,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    r8uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    r8sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    rg8unorm: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rg8snorm: {\n      blendable: false,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rg8uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rg8sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    rgba8unorm: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    \"rgba8unorm-srgb\": {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rgba8snorm: {\n      blendable: false,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rgba8uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rgba8sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    bgra8unorm: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    \"bgra8unorm-srgb\": {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    r16uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    r16sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    r16float: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rg16uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rg16sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    rg16float: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rgba16uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rgba16sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    rgba16float: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    r32uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    r32sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    r32float: {\n      blendable: false,\n      sampleTypes: [\n        \"unfilterable-float\",\n        \"float\",\n        \"float32-filterable\",\n        \"float\",\n        \"float32-filterable\",\n      ],\n    },\n    rg32uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rg32sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    rg32float: {\n      blendable: false,\n      sampleTypes: [\n        \"unfilterable-float\",\n        \"float\",\n        \"float32-filterable\",\n        \"float\",\n        \"float32-filterable\",\n      ],\n    },\n    rgba32uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rgba32sint: {\n      blendable: false,\n      sampleTypes: [\"sint\"],\n    },\n    rgba32float: {\n      blendable: false,\n      sampleTypes: [\n        \"unfilterable-float\",\n        \"float\",\n        \"float32-filterable\",\n        \"float\",\n        \"float32-filterable\",\n      ],\n    },\n    rgb10a2uint: {\n      blendable: false,\n      sampleTypes: [\"uint\"],\n    },\n    rgb10a2unorm: {\n      blendable: true,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n    rg11b10ufloat: {\n      blendable: false,\n      sampleTypes: [\"float\", \"unfilterable-float\"],\n    },\n  };\n  class WebGPUMeshData {\n    sourceMesh;\n    vertexBuffer;\n    indexBuffer;\n    vertexCount;\n    indexCount;\n    constructor(\n      sourceMesh,\n      vertexBuffer,\n      indexBuffer,\n      vertexCount,\n      indexCount\n    ) {\n      this.sourceMesh = sourceMesh;\n      this.vertexBuffer = vertexBuffer;\n      this.indexBuffer = indexBuffer;\n      this.vertexCount = vertexCount;\n      this.indexCount = indexCount;\n    }\n  }\n  const lruCacheOptions = {\n    max: 500,\n  };\n  let lruUniformOptions = {\n    max: 128,\n  };\n  const vertexLayout = [\n    {\n      // Position\n      arrayStride:\n        (3 + // Position\n          3 + // Normal\n          3 + // Tangent\n          3 + // Bitangent\n          2 + // UV\n          4) * // Color\n        4,\n      stepMode: \"vertex\",\n      attributes: [\n        {\n          shaderLocation: 0,\n          offset: 0,\n          format: \"float32x3\",\n        },\n        {\n          shaderLocation: 1,\n          offset: 3 * 4,\n          format: \"float32x3\",\n        },\n        {\n          shaderLocation: 2,\n          offset: (3 + 3) * 4,\n          format: \"float32x3\",\n        },\n        {\n          shaderLocation: 3,\n          offset: (3 + 3 + 3) * 4,\n          format: \"float32x3\",\n        },\n        {\n          shaderLocation: 4,\n          offset: (3 + 3 + 3 + 3) * 4,\n          format: \"float32x2\",\n        },\n        {\n          shaderLocation: 5,\n          offset: (3 + 3 + 3 + 3 + 2) * 4,\n          format: \"float32x4\",\n        },\n      ],\n    },\n  ];\n  class WebGPUAdapter extends GraphicsAdapter {\n    ctx = null;\n    texture = null;\n    storageTexture = null;\n    storageDirty = false;\n    pendingWrites = 0;\n    adapter = null;\n    device = null;\n    headless = false;\n    headlessDimensions = 2;\n    headlessWidth = 1024;\n    headlessHeight = 1024;\n    headlessDepth = 1024;\n    baseUniformBufferSize = 2 * 4;\n    // _vtex_canvas\n    baseUniformValues = new Float32Array(this.baseUniformBufferSize / 4);\n    baseUniformBuffer = null;\n    pipelineCache = new LRUCache(lruCacheOptions);\n    ready = false;\n    catchGPUErrors = true;\n    gpuMeshData = /* @__PURE__ */ new Map();\n    depthTexture = null;\n    textureFormat = \"float4\";\n    gpuTextureFormat = \"rgba8unorm\";\n    clearEnqueued = false;\n    getValueSize(vt) {\n      return getValueSize(vt);\n    }\n    init() {\n      this.ready = false;\n      this.adapter = window.shadeupWebGPUAdapter;\n      this.device = window.shadeupWebGPUDevice;\n      if (!this.adapter || !this.device) {\n        throw new Error(\"WebGPU is not supported\");\n      }\n      this.addEventListener(\"context\", (to) => {\n        if (to == \"paint\") {\n          if (!this.clearEnqueued) {\n            this.beforeScreenDraw();\n          }\n        }\n      });\n      this.baseUniformBuffer = this.device.createBuffer({\n        size: this.baseUniformBufferSize,\n        usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n      });\n      if (this.headless) {\n        if (this.headlessDimensions == 2) {\n          this.startDispatch();\n          this.texture = this.device.createTexture({\n            size: {\n              width: this.headlessWidth,\n              height: this.headlessHeight,\n            },\n            format: this.gpuTextureFormat,\n            dimension: \"2d\",\n            viewFormats: [this.gpuTextureFormat],\n            usage:\n              GPUTextureUsage.RENDER_ATTACHMENT |\n              GPUTextureUsage.TEXTURE_BINDING |\n              GPUTextureUsage.COPY_SRC |\n              GPUTextureUsage.COPY_DST,\n          });\n          this.endDispatch();\n        } else {\n          this.startDispatch();\n          this.texture = this.device.createTexture({\n            size: {\n              width: this.headlessWidth,\n              height: this.headlessHeight,\n              depthOrArrayLayers: this.headlessDepth,\n            },\n            format: this.gpuTextureFormat,\n            dimension: \"3d\",\n            usage:\n              GPUTextureUsage.TEXTURE_BINDING |\n              GPUTextureUsage.COPY_SRC |\n              GPUTextureUsage.COPY_DST,\n          });\n          this.endDispatch();\n        }\n      } else {\n        this.textureFormat = \"uint8\";\n        this.ctx = this.canvas.getContext(\"webgpu\");\n        if (!this.ctx) {\n          throw new Error(\"WebGPU is not supported\");\n        }\n        this.ctx.configure({\n          device: this.device,\n          format: \"rgba8unorm\",\n          alphaMode: \"premultiplied\",\n          usage:\n            GPUTextureUsage.RENDER_ATTACHMENT |\n            GPUTextureUsage.TEXTURE_BINDING |\n            GPUTextureUsage.COPY_SRC |\n            GPUTextureUsage.COPY_DST,\n        });\n      }\n      if (this.canvas) {\n        this.startDispatch();\n        this.depthTexture = this.device.createTexture({\n          size: {\n            width: this.canvas.width,\n            height: this.canvas.height,\n          },\n          format: \"depth24plus\",\n          usage:\n            GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,\n        });\n        this.endDispatch();\n      }\n      this.ready = true;\n    }\n    startDispatch() {\n      if (!this.device) return;\n      if (this.catchGPUErrors) {\n        this.device.pushErrorScope(\"validation\");\n        this.device.pushErrorScope(\"internal\");\n        this.device.pushErrorScope(\"out-of-memory\");\n      }\n    }\n    endDispatch() {\n      if (!this.device) return;\n      let handler = (e) => {\n        if (!e) return;\n        let ignore =\n          e.message.includes(\"[Invalid ShaderModule] is invalid.\") ||\n          e.message.includes(\"[Invalid BindGroup] is invalid.\") ||\n          e.message.includes(\"[Invalid ComputePipeline\") ||\n          e.message.includes(\"[Invalid RenderPipeline\");\n        if (ignore) return;\n        window.bubbleError(e.message);\n        let stack = new Error();\n        console.error(e, stack.stack);\n      };\n      if (this.catchGPUErrors) {\n        this.device.popErrorScope().then(handler);\n        this.device.popErrorScope().then(handler);\n        this.device.popErrorScope().then(handler);\n      }\n    }\n    drawImageCache;\n    trace(id, data) {}\n    drawImage(image, x, y, width, height) {\n      const { device } = this.getGPU();\n      this.trace(\"drawImage\", { image, x, y, width, height });\n      if (!this.ready) {\n        return;\n      }\n      this.startDispatch();\n      let selfTexture = this.getTexture();\n      device.queue.copyExternalImageToTexture(\n        { source: image },\n        { texture: selfTexture, premultipliedAlpha: true },\n        { width: image.width, height: image.height }\n      );\n      this.copyToCanvas();\n      this.endDispatch();\n    }\n    genericBufferFlags() {\n      return (\n        GPUBufferUsage.STORAGE |\n        GPUBufferUsage.COPY_DST |\n        GPUBufferUsage.COPY_SRC\n      );\n    }\n    copyBufferToBuffer(from, to) {\n      this.getGPU();\n      this.enqueueCommand((encoder) => {\n        encoder.copyBufferToBuffer(\n          this.getOrCreateBuffer(from, this.genericBufferFlags()),\n          0,\n          this.getOrCreateBuffer(to, this.genericBufferFlags()),\n          0,\n          from.elementCount * from.elementBytes\n        );\n      });\n    }\n    async downloadBuffer(buf) {\n      this.trace(\"downloadBuffer\", { buffer: buf });\n      const { device } = this.getGPU();\n      let nativeBuffer = this.getOrCreateBuffer(buf, this.genericBufferFlags());\n      this.startDispatch();\n      let encoder = device.createCommandEncoder();\n      let buffer = device.createBuffer({\n        size: nativeBuffer.size,\n        usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n      });\n      encoder.copyBufferToBuffer(nativeBuffer, 0, buffer, 0, nativeBuffer.size);\n      let commandBuffer = encoder.finish();\n      device.queue.submit([commandBuffer]);\n      await buffer.mapAsync(GPUMapMode.READ);\n      let arr = buffer.getMappedRange();\n      if (!buf.structured) {\n        if (buf.arrayBuffer) {\n          let u8down = new Uint8Array(arr);\n          let u8in = new Uint8Array(buf.arrayBuffer);\n          u8in.set(u8down);\n        } else {\n          throw new Error(\"Buffer not found while downloading\");\n        }\n      } else {\n        if (buf.typeName == \"atomic<uint>\") {\n          let u32down = new Uint32Array(arr);\n          buf.uintArray?.set(u32down);\n        } else if (buf.typeName == \"atomic<int>\") {\n          let i32down = new Int32Array(arr);\n          buf.intArray?.set(i32down);\n        } else {\n          new Uint8Array(buf.arrayBuffer).set(new Uint8Array(arr));\n        }\n      }\n      buffer.destroy();\n      this.endDispatch();\n    }\n    uploadBuffer(buf) {\n      const { device } = this.getGPU();\n      this.trace(\"uploadBuffer\", { buffer: buf });\n      this.startDispatch();\n      let nativeBuffer = this.getOrCreateBuffer(buf, this.genericBufferFlags());\n      if (!buf.structured) {\n        if (buf.arrayBuffer) {\n          let u8in = new Uint8Array(buf.arrayBuffer);\n          device.queue.writeBuffer(nativeBuffer, 0, u8in);\n        } else {\n          throw new Error(\"Buffer not found while downloading\");\n        }\n      } else {\n        if (buf.typeName == \"atomic<uint>\") {\n          device.queue.writeBuffer(nativeBuffer, 0, buf.arrayBuffer);\n        } else if (buf.typeName == \"atomic<int>\") {\n          new Int32Array(buf.elementCount);\n          device.queue.writeBuffer(nativeBuffer, 0, buf.arrayBuffer);\n        } else {\n          device.queue.writeBuffer(\n            nativeBuffer,\n            0,\n            new Uint8Array(buf.arrayBuffer)\n          );\n        }\n      }\n      this.endDispatch();\n    }\n    async downloadImage() {\n      const { device } = this.getGPU();\n      this.flushStorage();\n      this.startDispatch();\n      let encoder = device.createCommandEncoder();\n      let texture = this.getTexture();\n      let stride =\n        parseInt(this.textureFormat[this.textureFormat.length - 1]) || 1;\n      if (this.textureFormat == \"uint8\") {\n        stride = 4;\n      }\n      let bytesPerComponent = 2;\n      if (this.textureFormat == \"uint8\") {\n        bytesPerComponent = 1;\n      } else if (this.textureFormat.startsWith(\"float\")) {\n        bytesPerComponent = 4;\n      } else if (this.textureFormat.startsWith(\"int\")) {\n        bytesPerComponent = 4;\n      } else {\n        bytesPerComponent = 4;\n      }\n      let alignment = 256;\n      let bytesPerRow = texture.width * stride * bytesPerComponent;\n      let neededAlignment = false;\n      let alignmentPad = 0;\n      if (bytesPerRow % alignment != 0) {\n        let oldBytes = bytesPerRow;\n        bytesPerRow += alignment - (bytesPerRow % alignment);\n        alignmentPad = bytesPerRow - oldBytes;\n        neededAlignment = true;\n      }\n      let buffer = device.createBuffer({\n        size: bytesPerRow * texture.height,\n        usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n      });\n      encoder.copyTextureToBuffer(\n        { texture },\n        { buffer, bytesPerRow },\n        texture\n      );\n      let commandBuffer = encoder.finish();\n      device.queue.submit([commandBuffer]);\n      await buffer.mapAsync(GPUMapMode.READ);\n      let arr;\n      let buf = new Uint8Array(buffer.getMappedRange());\n      if (neededAlignment) {\n        let oldBytes = bytesPerRow - alignmentPad;\n        let newData = new Uint8Array(oldBytes * texture.height);\n        for (let i = 0; i < texture.height; i++) {\n          newData.set(\n            new Uint8Array(buf.buffer, i * bytesPerRow, oldBytes),\n            i * oldBytes\n          );\n        }\n        buf = newData;\n      }\n      if (this.textureFormat == \"uint8\") {\n        arr = new Uint8Array(buf.buffer);\n      } else if (this.textureFormat.startsWith(\"float\")) {\n        arr = new Float32Array(buf.buffer);\n      } else if (this.textureFormat.startsWith(\"int\")) {\n        arr = new Uint32Array(buf.buffer);\n      } else {\n        arr = new Uint32Array(buf.buffer);\n      }\n      this.endDispatch();\n      return arr;\n    }\n    uploadImage(data) {\n      this.startDispatch();\n      const { device } = this.getGPU();\n      let encoder = device.createCommandEncoder();\n      let texture = this.getTexture();\n      let stride =\n        parseInt(this.textureFormat[this.textureFormat.length - 1]) || 1;\n      if (this.textureFormat == \"uint8\") {\n        stride = 4;\n      }\n      let bytesPerComponent = 2;\n      if (this.textureFormat == \"uint8\") {\n        bytesPerComponent = 1;\n      } else if (this.textureFormat.startsWith(\"float\")) {\n        bytesPerComponent = 4;\n      } else if (this.textureFormat.startsWith(\"int\")) {\n        bytesPerComponent = 4;\n      } else {\n        bytesPerComponent = 4;\n      }\n      let alignment = 256;\n      let bytesPerRow = texture.width * stride * bytesPerComponent;\n      if (bytesPerRow % alignment != 0) {\n        let oldBytes = bytesPerRow;\n        bytesPerRow += alignment - (bytesPerRow % alignment);\n        let newData = new Uint8Array(bytesPerRow * texture.height);\n        for (let i = 0; i < texture.height; i++) {\n          newData.set(\n            new Uint8Array(data.buffer, i * oldBytes, oldBytes),\n            i * bytesPerRow\n          );\n        }\n        data = newData;\n      }\n      let buffer = device.createBuffer({\n        size: data.byteLength,\n        usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n      });\n      device.queue.writeBuffer(buffer, 0, data);\n      encoder.copyBufferToTexture(\n        { buffer, bytesPerRow },\n        { texture },\n        { width: texture.width, height: texture.height }\n      );\n      let commandBuffer = encoder.finish();\n      device.queue.submit([commandBuffer]);\n      buffer.destroy();\n      this.copyToCanvas();\n      this.endDispatch();\n    }\n    getGPU() {\n      if (!this.device) {\n        throw new Error(\"WebGPU is not supported\");\n      }\n      if (!this.ready) {\n        throw new Error(\"WebGPU is not ready\");\n      }\n      return {\n        device: this.device,\n      };\n    }\n    setViewport(width, height) {\n      super.setViewport(width, height);\n      if (!this.device) {\n        return;\n      }\n      this.startDispatch();\n      this.depthTexture?.destroy();\n      this.depthTexture = this.device.createTexture({\n        size: {\n          width,\n          height,\n        },\n        format: \"depth24plus\",\n        usage: GPUTextureUsage.RENDER_ATTACHMENT,\n      });\n      this.endDispatch();\n    }\n    translateFormatToGPUType(type) {\n      if (type == \"float4\") {\n        return \"vec4<f32>\";\n      }\n      if (type == \"float3\") {\n        return \"vec3<f32>\";\n      }\n      if (type == \"float2\") {\n        return \"vec2<f32>\";\n      }\n      if (type == \"float\") {\n        return \"f32\";\n      }\n      if (type == \"int4\") {\n        return \"vec4<i32>\";\n      }\n      if (type == \"int3\") {\n        return \"vec3<i32>\";\n      }\n      if (type == \"int2\") {\n        return \"vec2<i32>\";\n      }\n      if (type == \"int\") {\n        return \"i32\";\n      }\n      if (type == \"uint4\") {\n        return \"vec4<u32>\";\n      }\n      if (type == \"uint3\") {\n        return \"vec3<u32>\";\n      }\n      if (type == \"uint2\") {\n        return \"vec2<u32>\";\n      }\n      if (type == \"uint\") {\n        return \"u32\";\n      }\n      throw new Error(\"Invalid type\");\n    }\n    getOrCreateShader(instance, type, config) {\n      const { device } = this.getGPU();\n      let key = type;\n      if (config) {\n        if (config.attachments) {\n          key += \"|\" + config.attachments.join(\",\");\n        }\n      }\n      if (instance.parent.types[key]) {\n        return instance.parent.types[key];\n      } else {\n        let base = instance.parent.code.webgpu;\n        for (let param of Object.keys(instance.parent.arraySizes)) {\n          base = base.replace(\n            `%${param}_size%`,\n            instance.parent.arraySizes[param]\n          );\n        }\n        if (\n          instance.parent.params.webgpu.globals.length == 0 &&\n          instance.parent.params.webgpu.locals.length == 0\n        ) {\n          base = base.replace(`/*SHADEUP_UNIFORM_STRUCT_START*/`, \"\");\n        }\n        if (instance) {\n          for (let key2 of Object.keys(instance.bindings)) {\n            let value = instance.bindings[key2];\n            let isArrayTex = false;\n            if (\n              value instanceof ShadeupTexture2d ||\n              (Array.isArray(value) &&\n                value.length > 0 &&\n                value[0] instanceof ShadeupTexture2d)\n            ) {\n              if (Array.isArray(value)) {\n                if (value.length == 0) {\n                  throw new Error(\"Invalid array length\");\n                } else {\n                  if (value[0] instanceof ShadeupTexture2d) {\n                    value = value[0];\n                    isArrayTex = true;\n                  }\n                }\n              }\n              let name = `%WRITE_TYPE_${key2}%`;\n              let texFormat = value.adapter.gpuTextureFormat;\n              base = base.replace(name, texFormat);\n              if (texFormat == \"depth24plus\" || texFormat == \"depth32float\") {\n                base = base.replace(\n                  `var ${key2}_texture: texture_2d${\n                    isArrayTex ? \"_array\" : \"\"\n                  }<${\n                    value.innerType.startsWith(\"float\")\n                      ? \"f32\"\n                      : value.innerType.startsWith(\"int\")\n                      ? \"i32\"\n                      : \"u32\"\n                  }>`,\n                  `var ${key2}_texture: texture_depth_2d${\n                    isArrayTex ? \"_array\" : \"\"\n                  }`\n                );\n                let startIndexes = base.matchAll(\n                  new RegExp(`textureLoad\\\\(${key2}_texture, `, \"g\")\n                );\n                for (let match of startIndexes) {\n                  let balance = 0;\n                  let hitFirst = false;\n                  for (let i = match.index ?? 0; i < base.length; i++) {\n                    if (base[i] == \"(\") {\n                      balance++;\n                      hitFirst = true;\n                    }\n                    if (base[i] == \")\") {\n                      balance--;\n                    }\n                    if (balance == 0 && hitFirst) {\n                      base =\n                        base.substring(0, i + 1) +\n                        base.substring(i + 3, base.length);\n                      break;\n                    }\n                  }\n                }\n                startIndexes = base.matchAll(\n                  new RegExp(`textureSample\\\\(${key2}_texture, `, \"g\")\n                );\n                let replaces = [];\n                for (let match of startIndexes) {\n                  let balance = 0;\n                  let hitFirst = false;\n                  for (let i = match.index ?? 0; i < base.length; i++) {\n                    if (base[i] == \"(\") {\n                      balance++;\n                      hitFirst = true;\n                    }\n                    if (base[i] == \")\") {\n                      balance--;\n                    }\n                    if (balance == 0 && hitFirst) {\n                      replaces.push(base.substring(match.index, i));\n                      break;\n                    }\n                  }\n                }\n                for (let replace of replaces) {\n                  base = base.replace(replace, \"vec4<f32>(\" + replace + \")\");\n                }\n              }\n            }\n          }\n        }\n        if (type == \"compute\") {\n          base = base.replaceAll(\"%GROUP_INDEX%\", \"0\");\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `\n\t\t\t\t\t\n\t\t\t\t\tstruct _ComputeUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _compute_uniform_input: _ComputeUniformInput;\n\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(`/*__SHADEUP_TEMPLATE_OUTPUT*/`, `void`);\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_INPUT*/`,\n            `\n\t\t\t\t@builtin(workgroup_id) workgroup_id : vec3<u32>,\n\t\t\t\t@builtin(local_invocation_id) local_invocation_id : vec3<u32>,\n\t\t\t\t@builtin(global_invocation_id) global_invocation_id : vec3<u32>,\n\t\t\t\t@builtin(local_invocation_index) local_invocation_index: u32,\n\t\t\t\t@builtin(num_workgroups) num_workgroups: vec3<u32>\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `var _i_in: ShaderInput;\n\t\t\t\t\t_i_in.groupId = vec3<i32>(workgroup_id);\n\t\t\t\t\t_i_in.groupSize = vec3<i32>(num_workgroups);\n\t\t\t\t\t_i_in.localId = vec3<i32>(local_invocation_id);\n\t\t\t\t\t_i_in.globalId = vec3<i32>(global_invocation_id);\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            ``.replace(/\\t\\n/g, \"\")\n          );\n        } else if (type == \"vertex\") {\n          base = base.replaceAll(\"%GROUP_INDEX%\", \"1\");\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeOutput}\n\t\t\t\t\t};\n\t\t\t\t\tstruct _VertexUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _vertex_uniform_input: _VertexUniformInput;\n\n\t\t\t\t\t@vertex\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_OUTPUT*/`,\n            `_VertexShaderOutput`\n          );\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_INPUT*/`,\n            `\n\t\t\t\t@builtin(vertex_index) vertexIndex: u32,\n\t\t\t\t@builtin(instance_index) instanceIndex: u32,\n\t\t\t\t@location(0) position: vec3<f32>,\n\t\t\t\t@location(1) normal: vec3<f32>,\n\t\t\t\t@location(2) tangent: vec3<f32>,\n\t\t\t\t@location(3) bitangent: vec3<f32>,\n\t\t\t\t@location(4) uv: vec2<f32>,\n\t\t\t\t@location(5) color: vec4<f32>\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `var _i_out: _VertexShaderOutput;\n\t\t\t\t\t_i_out.position = vec4(position, 1.0);\n\t\t\t\t\t_i_out.normal = normal;\n\t\t\t\t\t_i_out.tangent = tangent;\n\t\t\t\t\t_i_out.bitangent = bitangent;\n\t\t\t\t\t_i_out.uv = uv;\n\t\t\t\t\t_i_out.color = color;\n\t\t\t\t\t_i_out.instanceIndex = instanceIndex;\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = position;\n\t\t\t\t\t_i_in.normal = normal;\n\t\t\t\t\t_i_in.tangent = tangent;\n\t\t\t\t\t_i_in.bitangent = bitangent;\n\t\t\t\t\t_i_in.vertexIndex = i32(vertexIndex);\n\t\t\t\t\t_i_in.instanceIndex = i32(instanceIndex);\n\t\t\t\t\t_i_in.uv = uv;\n\t\t\t\t\t_i_in.color = color;\n\t\t\t\t\t_i_in.screen = vec2<f32>(0, 0);\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            `\n\t\t\t\t\t// _i_out.position = vec4<f32>(_i_out.position.x, _i_out.position.y, (1.0 + _i_out.position.z) / 2.0, _i_out.position.w);\n\t\t\t\t\t_i_out.worldPosition = position;\n\t\t\t\t\treturn _i_out;`.replace(/\\t\\n/g, \"\")\n          );\n        } else if (type == \"vertex-indexed\") {\n          base = base.replaceAll(\"%GROUP_INDEX%\", \"1\");\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeOutput}\n\t\t\t\t\t};\n\t\t\t\t\tstruct _VertexUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _vertex_uniform_input: _VertexUniformInput;\n\n\t\t\t\t\t@vertex\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_OUTPUT*/`,\n            `_VertexShaderOutput`\n          );\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_INPUT*/`,\n            `\n\t\t\t\t@builtin(vertex_index) vertexIndex: u32,\n\t\t\t\t@builtin(instance_index) instanceIndex: u32,\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `var _i_out: _VertexShaderOutput;\n\t\t\t\t\t_i_out.position = vec4(0.0, 0.0, 0.0, 1.0);\n\t\t\t\t\t_i_out.normal = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.tangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.bitangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.uv = vec2(0.0, 0.0);\n\t\t\t\t\t_i_out.color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t_i_out.instanceIndex = instanceIndex;\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.normal = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.tangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.bitangent = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.vertexIndex = i32(vertexIndex);\n\t\t\t\t\t_i_in.instanceIndex = i32(instanceIndex);\n\t\t\t\t\t_i_in.uv = vec2(0.0, 0.0);\n\t\t\t\t\t_i_in.color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t_i_in.screen = vec2<f32>(0, 0);\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            `\n\t\t\t\t\t// _i_out.position = vec4<f32>(_i_out.position.x, _i_out.position.y, (1.0 + _i_out.position.z) / 2.0, _i_out.position.w);\n\t\t\t\t\t// _i_out.worldPosition = position;\n\t\t\t\t\treturn _i_out;`.replace(/\\t\\n/g, \"\")\n          );\n        } else {\n          let headerStr = \"\";\n          if (config?.attachments) {\n            let i = 0;\n            headerStr += \"struct _ShaderFragmentOutput {\\n\";\n            for (let attachment of config.attachments) {\n              headerStr += `@location(${i}) attachment${i}: ${this.translateFormatToGPUType(\n                attachment\n              )},\n`;\n              i++;\n            }\n            headerStr += \"\\n};\";\n          }\n          base = base.replaceAll(\"%GROUP_INDEX%\", \"0\");\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `\n\t\t\t\t\tstruct _VertexShaderOutput {\n\t\t\t\t\t\t@builtin(position) position: vec4<f32>,\n\t\t\t\t\t\t@location(0) normal: vec3<f32>,\n\t\t\t\t\t\t@location(1) tangent: vec3<f32>,\n\t\t\t\t\t\t@location(2) bitangent: vec3<f32>,\n\t\t\t\t\t\t@location(3) uv: vec2<f32>,\n\t\t\t\t\t\t@location(4) color: vec4<f32>,\n\t\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex: u32,\n\t\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t\t\t${instance.parent.params.webgpu.attributeInput}\n\t\t\t\t\t};\n\n\t\t\t\t\t${headerStr}\n\t\t\t\t\t\n\t\t\t\t\tstruct _FragmentUniformInput {\n\t\t\t\t\t\t_vtex_canvas: vec2<f32>,\n\t\t\t\t\t};\n\t\t\t\t\t@group(0) @binding(0) var<uniform> _fragment_uniform_input: _FragmentUniformInput;\n\n\t\t\t\t\t@fragment\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_OUTPUT*/`,\n            config?.attachments\n              ? `_ShaderFragmentOutput`\n              : `@location(0) vec4<f32>`\n          );\n          base = base.replace(\n            `/*__SHADEUP_TEMPLATE_INPUT*/`,\n            `\n\t\t\t\t_frag_in: _VertexShaderOutput\n\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          let writeCustoms =\n            instance.parent.params.webgpu.attributeInput.split(\n              \"@location\"\n            ).length;\n          let extra = \"\";\n          if (writeCustoms >= 2) {\n            for (let i = 0; i < writeCustoms - 1; i++) {\n              extra += `_i_in.custom${i} = _frag_in.custom${i};\n`;\n            }\n          }\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `var _i_out: ${\n              config?.attachments ? \"_ShaderFragmentOutput\" : \"ShaderOutput\"\n            };\n\t\t\t\t\tvar _i_in: ShaderInput;\n\t\t\t\t\t_i_in.position = _frag_in.worldPosition;\n\t\t\t\t\t_i_in.clipPosition = _frag_in.position;\n\t\t\t\t\t_i_in.normal = _frag_in.normal;\n\t\t\t\t\t_i_in.tangent = _frag_in.tangent;\n\t\t\t\t\t_i_in.bitangent = _frag_in.bitangent;\n\t\t\t\t\t_i_in.uv = _frag_in.uv;\n\t\t\t\t\t_i_in.color = _frag_in.color;\n\t\t\t\t\t_i_in.screen = vec2<f32>(_frag_in.position.x, _frag_in.position.y);\n\t\t\t\t\t_i_in.instanceIndex = i32(_frag_in.instanceIndex);\n\t\t\t\t\t${extra}\n\t\t\t\t\t`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            `return ${\n              config?.attachments ? \"_i_out\" : \"_i_out.color\"\n            };`.replace(/\\t\\n/g, \"\")\n          );\n        }\n        this.startDispatch();\n        let shader = device.createShaderModule({\n          code: base,\n        });\n        this.endDispatch();\n        if (!shader) throw new Error(\"Failed to create shader\");\n        instance.version++;\n        let gShader = new GenericShader(base, type);\n        gShader.payload = shader;\n        gShader.parent = instance.parent;\n        instance.parent.types[key] = gShader;\n        return gShader;\n      }\n    }\n    createShader(code, type) {\n      const { device } = this.getGPU();\n      if (type == \"compute\") {\n        let gComputeShader = new GenericShader(code.webgl, type);\n        gComputeShader.payload = code.software;\n        gComputeShader.parent = null;\n        return gComputeShader;\n      }\n      this.startDispatch();\n      let shader = device.createShaderModule({\n        code: code.webgpu,\n      });\n      this.endDispatch();\n      if (!shader) {\n        console.error(\"Failed to create shader\");\n        throw new Error(\"Failed to create shader\");\n      }\n      let gShader = new GenericShader(code.webgpu, type);\n      gShader.payload = shader;\n      gShader.parent = null;\n      return gShader;\n    }\n    clear(immediate = false, color = \"auto\") {\n      this.enqueueCommand((encoder) => {\n        this.getGPU();\n        if (!this.depthTexture) return;\n        const textureView = this.getTexture().createView();\n        if (\n          this.gpuTextureFormat == \"depth24plus\" ||\n          this.gpuTextureFormat == \"depth32float\"\n        ) {\n          const clearPassDesc = {\n            colorAttachments: [],\n            depthStencilAttachment: {\n              view: this.getTexture().createView(),\n              depthClearValue: typeof color === \"number\" ? color : 1,\n              depthLoadOp: \"clear\",\n              depthStoreOp: \"store\",\n            },\n          };\n          const passEncoder = encoder.beginRenderPass(clearPassDesc);\n          passEncoder.end();\n        } else {\n          const clearPassDesc = {\n            colorAttachments: [\n              {\n                view: textureView,\n                clearValue: Array.isArray(color)\n                  ? { r: color[0], g: color[1], b: color[2], a: color[3] }\n                  : { r: 0, g: 0, b: 0, a: 0 },\n                storeOp: \"store\",\n                loadOp: \"clear\",\n              },\n            ],\n            depthStencilAttachment: {\n              view: this.depthTexture.createView(),\n              depthClearValue: 1,\n              depthLoadOp: \"clear\",\n              depthStoreOp: \"store\",\n            },\n          };\n          const passEncoder = encoder.beginRenderPass(clearPassDesc);\n          passEncoder.end();\n        }\n      }, immediate);\n    }\n    fill(color, immediate = false) {\n      this.enqueueCommand((encoder) => {\n        this.getGPU();\n        if (!this.depthTexture) return;\n        const textureView = this.getTexture().createView({\n          format: this.gpuTextureFormat,\n        });\n        const clearPassDesc = {\n          colorAttachments: [\n            {\n              view: textureView,\n              clearValue: {\n                r: color[0],\n                g: color[1],\n                b: color[2],\n                a: color[3],\n              },\n              storeOp: \"store\",\n              loadOp: \"clear\",\n            },\n          ],\n          depthStencilAttachment: {\n            view: this.depthTexture.createView(),\n            depthClearValue: 1,\n            depthLoadOp: \"clear\",\n            depthStoreOp: \"store\",\n          },\n        };\n        const passEncoder = encoder.beginRenderPass(clearPassDesc);\n        passEncoder.end();\n      }, immediate);\n    }\n    unbindTexture(texture) {}\n    getOrCreateMeshData(mesh) {\n      const { device } = this.getGPU();\n      if (mesh.symbol == null) mesh.symbol = Symbol();\n      if (mesh.$__gpuMeshData) {\n        return mesh.$__gpuMeshData;\n      } else {\n        let meshVertices = mesh.getVertices();\n        let meshIndices = mesh.getTriangles();\n        let meshNormals = mesh.getNormals();\n        let meshTangents = mesh.getTangents();\n        let meshBitangents = mesh.getBitangents();\n        let meshUVs = mesh.getUVs();\n        let meshColors = mesh.getColors();\n        let vertexCount = meshVertices.length;\n        let vertexData = new Float32Array(\n          vertexCount * (3 + 3 + 3 + 3 + 2 + 4)\n        );\n        let indexData = new Uint32Array(meshIndices.length);\n        let offset = 0;\n        for (let i = 0; i < vertexCount; i++) {\n          vertexData[offset++] = meshVertices[i][0];\n          vertexData[offset++] = meshVertices[i][1];\n          vertexData[offset++] = meshVertices[i][2];\n          if (meshNormals[i]) {\n            vertexData[offset++] = meshNormals[i][0];\n            vertexData[offset++] = meshNormals[i][1];\n            vertexData[offset++] = meshNormals[i][2];\n          } else {\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n          }\n          if (meshTangents[i]) {\n            vertexData[offset++] = meshTangents[i][0];\n            vertexData[offset++] = meshTangents[i][1];\n            vertexData[offset++] = meshTangents[i][2];\n          } else {\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n          }\n          if (meshBitangents[i]) {\n            vertexData[offset++] = meshBitangents[i][0];\n            vertexData[offset++] = meshBitangents[i][1];\n            vertexData[offset++] = meshBitangents[i][2];\n          } else {\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n          }\n          if (meshUVs[i]) {\n            vertexData[offset++] = meshUVs[i][0];\n            vertexData[offset++] = meshUVs[i][1];\n          } else {\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n          }\n          if (meshColors[i]) {\n            vertexData[offset++] = meshColors[i][0];\n            vertexData[offset++] = meshColors[i][1];\n            vertexData[offset++] = meshColors[i][2];\n            vertexData[offset++] = meshColors[i][3];\n          } else {\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n            vertexData[offset++] = 0;\n          }\n        }\n        for (let i = 0; i < meshIndices.length; i++) {\n          indexData[i] = meshIndices[i];\n        }\n        let vertexBuffer = device.createBuffer({\n          size: vertexData.byteLength,\n          usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n        });\n        let indexBuffer = device.createBuffer({\n          size: indexData.byteLength,\n          usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n        });\n        device.queue.writeBuffer(vertexBuffer, 0, vertexData);\n        device.queue.writeBuffer(indexBuffer, 0, indexData);\n        let meshData = new WebGPUMeshData(\n          mesh,\n          vertexBuffer,\n          indexBuffer,\n          vertexCount,\n          meshIndices.length\n        );\n        mesh.$__gpuMeshData = meshData;\n        return meshData;\n      }\n    }\n    flushStorage() {\n      const { device } = this.getGPU();\n      this.startDispatch();\n      if (this.storageDirty && this.texture) {\n        let encoder = device.createCommandEncoder();\n        encoder.copyTextureToTexture(\n          { texture: this.getStorageTexture() },\n          { texture: this.getTexture() },\n          { width: this.texture.width, height: this.texture.height }\n        );\n        device.queue.submit([encoder.finish()]);\n        this.storageDirty = false;\n      }\n      this.endDispatch();\n    }\n    buildUniformKey(generatedUniforms) {\n      let key = [];\n      const KEY_TYPES = {\n        BINDING: 1241253932,\n        MARK: 153925923059,\n        SAMPLER: 1241253932,\n        TEXTURE: 153925923059,\n        BUFFER: 1241253932,\n      };\n      key.push(KEY_TYPES.BINDING, 0, KEY_TYPES.MARK);\n      if (generatedUniforms.size > 0) {\n        key.push(KEY_TYPES.BINDING, 1, KEY_TYPES.MARK);\n      }\n      if (generatedUniforms.special)\n        for (let s of generatedUniforms.special) {\n          if (s.type == \"sampler2D\") {\n            let gpuFormat = (s.value?.texture.adapter).gpuTextureFormat;\n            let texInner = s.value?.texture?.innerType ?? \"float4\";\n            let filterMode =\n              texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n            if (s.access == \"sample_write\") {\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.SAMPLER,\n                s.index + 1,\n                filterMode,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index + 2,\n                KEY_TYPES.MARK\n              );\n            } else if (s.access == \"write\") {\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index + 1,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n            } else if (s.access == \"sample\" || s.access == \"read\") {\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.SAMPLER,\n                s.index + 1,\n                filterMode,\n                KEY_TYPES.MARK\n              );\n            }\n          } else if (s.type == \"sampler2DArray\") {\n            if (!s.value?.textures[0]) continue;\n            let firstTexture = s.value?.textures[0];\n            let gpuFormat = firstTexture.adapter.gpuTextureFormat;\n            let texInner = firstTexture.innerType ?? \"float4\";\n            let filterMode =\n              texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n            if (s.access == \"sample_write\") {\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.SAMPLER,\n                s.index + 1,\n                filterMode,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index + 2,\n                KEY_TYPES.MARK\n              );\n            } else if (s.access == \"write\") {\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index + 1,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n            } else if (s.access == \"sample\" || s.access == \"read\") {\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.TEXTURE,\n                s.index,\n                gpuFormat,\n                KEY_TYPES.MARK\n              );\n              key.push(\n                KEY_TYPES.BINDING,\n                KEY_TYPES.SAMPLER,\n                s.index + 1,\n                filterMode,\n                KEY_TYPES.MARK\n              );\n            }\n            key.push(\"len\", s.value.textures.length);\n          } else if (s.type == \"array\") {\n            key.push(\n              KEY_TYPES.BINDING,\n              KEY_TYPES.BUFFER,\n              s.index,\n              3623,\n              KEY_TYPES.MARK\n            );\n          } else if (s.type == \"atomic\") {\n            key.push(\n              KEY_TYPES.BINDING,\n              KEY_TYPES.BUFFER,\n              s.index,\n              124,\n              KEY_TYPES.MARK\n            );\n          } else if (s.type == \"buffer\") {\n            key.push(\n              KEY_TYPES.BINDING,\n              KEY_TYPES.BUFFER,\n              s.index,\n              111,\n              s.access,\n              KEY_TYPES.MARK\n            );\n          }\n        }\n      return key;\n    }\n    bindGroupLayoutCounter = 0;\n    buildUniformsForPipeline(\n      shader,\n      generatedUniforms,\n      baseUniformBuffer,\n      stage\n    ) {\n      let key = this.buildUniformKey(generatedUniforms).join(\"|\");\n      const { device } = this.getGPU();\n      let commands = [];\n      if (generatedUniforms.special) {\n        for (let s of generatedUniforms.special) {\n          if (s.type == \"sampler2D\") {\n            commands.push((encoder) => {\n              if (s.value && \"texture\" in s.value) {\n                if (\n                  s.value?.texture.adapter &&\n                  s.value.texture.adapter instanceof WebGPUAdapter\n                ) {\n                  if (s.value.texture.adapter.storageDirty) {\n                    this.trace(\"copyWritableTextureToReadable\", {\n                      texture: s.value.texture,\n                    });\n                    encoder.copyTextureToTexture(\n                      { texture: s.value.texture.adapter.getStorageTexture() },\n                      { texture: s.value.texture.adapter.getTexture() },\n                      {\n                        width: s.value.texture.size[0],\n                        height: s.value.texture.size[1],\n                      }\n                    );\n                    s.value.texture.adapter.storageDirty = false;\n                    s.value.texture.cpuReadDirty = true;\n                  }\n                }\n                s.value?.texture.flush(false);\n              }\n            });\n            s.value?.texture?.innerType ?? \"float4\";\n            if (s.access == \"sample_write\");\n            else if (s.access == \"write\") {\n              if (\n                s.value?.texture.adapter &&\n                s.value.texture.adapter instanceof WebGPUAdapter\n              ) {\n                s.value.texture.adapter.pendingWrites++;\n              }\n              commands.push((encoder) => {\n                if (s.value && \"texture\" in s.value) {\n                  if (\n                    s.value?.texture.adapter &&\n                    s.value.texture.adapter instanceof WebGPUAdapter\n                  ) {\n                    this.trace(\"markWritableTextureDirty\", {\n                      texture: s.value.texture,\n                    });\n                    s.value.texture.adapter.storageDirty = true;\n                    s.value.texture.adapter.pendingWrites--;\n                  }\n                }\n              });\n            } else if (s.access == \"sample\" || s.access == \"read\");\n          } else if (s.type == \"sampler2DArray\") {\n            let needsNewTexture = false;\n            if (s.value && \"textures\" in s.value) {\n              if (!s.value?.textures.$arrTexture) {\n                needsNewTexture = true;\n              } else {\n                if (\n                  s.value.textures[0].adapter.getTexture().usage !=\n                  s.value.textures.$arrTexture.usage\n                ) {\n                  needsNewTexture = true;\n                }\n                if (\n                  s.value.textures[0].adapter.getTexture().format !=\n                  s.value.textures.$arrTexture.format\n                ) {\n                  needsNewTexture = true;\n                }\n                if (\n                  s.value.textures[0].adapter.getTexture().width !=\n                  s.value.textures.$arrTexture.width\n                ) {\n                  needsNewTexture = true;\n                }\n                if (\n                  s.value.textures[0].adapter.getTexture().height !=\n                  s.value.textures.$arrTexture.height\n                ) {\n                  needsNewTexture = true;\n                }\n                if (\n                  s.value.textures.length !=\n                  s.value.textures.$arrTexture.depthOrArrayLayers\n                ) {\n                  needsNewTexture = true;\n                }\n              }\n              if (needsNewTexture) {\n                if (s.value.textures.$arrTexture) {\n                  let oldTex = s.value.textures.$arrTexture;\n                  this.enqueueCleanupCommand(() => {\n                    this.trace(\"destroyMissizedArrayTexture\", {\n                      texture: oldTex,\n                    });\n                    oldTex.destroy();\n                  });\n                }\n                s.value.textures.$arrTexture = device.createTexture({\n                  size: [\n                    s.value.textures[0].size[0],\n                    s.value.textures[0].size[1],\n                    s.value.textures.length,\n                  ],\n                  format: s.value.textures[0].adapter.gpuTextureFormat,\n                  usage: s.value.textures[0].adapter.getTexture().usage,\n                });\n              }\n            }\n            commands.push((encoder) => {\n              let arrDirty = false;\n              let texVersions = [];\n              if (s.value && \"textures\" in s.value) {\n                if (s.value.textures.$arrTexture) {\n                  if (s.value.textures.$arrTexture.$versions) {\n                    texVersions = s.value.textures.$arrTexture.$versions;\n                  }\n                }\n                if (texVersions.length != s.value.textures.length) {\n                  texVersions = [];\n                  for (let i = 0; i < s.value.textures.length; i++) {\n                    texVersions.push(-1);\n                  }\n                }\n                for (let [i, texture] of s.value.textures.entries()) {\n                  if (\n                    texture.adapter &&\n                    texture.adapter instanceof WebGPUAdapter\n                  ) {\n                    if (texture.adapter.storageDirty) {\n                      arrDirty = true;\n                      encoder.copyTextureToTexture(\n                        { texture: texture.adapter.getStorageTexture() },\n                        { texture: texture.adapter.getTexture() },\n                        { width: texture.size[0], height: texture.size[1] }\n                      );\n                      texture.adapter.storageDirty = false;\n                      texture.cpuReadDirty = true;\n                    }\n                    if (texture.version != texVersions[i]) {\n                      texVersions[i] = texture.version;\n                      arrDirty = true;\n                    }\n                  }\n                  texture.flush(false);\n                }\n                if (arrDirty) {\n                  s.value.textures.$arrTexture.$versions = texVersions;\n                  this.trace(\"copyToArrayTexture\", {\n                    texture: s.value.textures.$arrTexture,\n                  });\n                  for (let [i, texture] of s.value.textures.entries()) {\n                    encoder.copyTextureToTexture(\n                      {\n                        texture: texture.adapter.getTexture(),\n                      },\n                      {\n                        texture: s.value.textures.$arrTexture,\n                        origin: [0, 0, i],\n                      },\n                      {\n                        width: texture.size[0],\n                        height: texture.size[1],\n                        depthOrArrayLayers: 1,\n                      }\n                    );\n                  }\n                }\n              }\n            });\n            if (s.value && \"textures\" in s.value) {\n              for (let texture of s.value.textures) {\n                texture.innerType ?? \"float4\";\n                if (s.access == \"sample_write\");\n                else if (s.access == \"write\") {\n                  if (\n                    texture.adapter &&\n                    texture.adapter instanceof WebGPUAdapter\n                  ) {\n                    texture.adapter.pendingWrites++;\n                  }\n                  commands.push((encoder) => {\n                    if (\n                      texture.adapter &&\n                      texture.adapter instanceof WebGPUAdapter\n                    ) {\n                      this.trace(\"markWritableTextureDirty\", { texture });\n                      texture.adapter.storageDirty = true;\n                      texture.adapter.pendingWrites--;\n                    }\n                  });\n                } else if (s.access == \"sample\" || s.access == \"read\");\n              }\n            }\n          } else if (s.type == \"array\");\n          else if (s.type == \"atomic\");\n          else if (s.type == \"buffer\") {\n            if (s.value && s.access == \"write\") {\n              s.value.pendingWrites++;\n            }\n            commands.push((encoder) => {\n              if (s.value) {\n                let sv = s.value;\n                if (sv.cpuWriteDirty) {\n                  this.trace(\"uploadCPUDirtyBuffer\", { buffer: s.value });\n                  sv.upload();\n                }\n                if (s.access == \"write\") {\n                  this.trace(\"markBufferDirty\", { buffer: s.value });\n                  sv.cpuReadDirty = true;\n                  sv.pendingWrites--;\n                }\n              }\n            });\n          }\n        }\n      }\n      let bindGroupLayout = null;\n      let bindGroup = null;\n      if (!shader.webgpuUniformCache) {\n        shader.webgpuUniformCache = new LRUCache({\n          ...lruUniformOptions,\n          dispose(value, key2) {\n            value.uniformBuffer.destroy();\n          },\n        });\n      }\n      let cache = void 0;\n      if (shader.webgpuUniformCache) {\n        cache = shader.webgpuUniformCache.get(key);\n        let matches = true;\n        if (!cache) {\n          matches = false;\n        }\n        if (matches && cache) {\n          bindGroupLayout = cache.bindGroupLayout;\n          bindGroup = cache.bindGroup;\n        }\n      }\n      if (!bindGroupLayout) {\n        this.startDispatch();\n        bindGroupLayout = device.createBindGroupLayout({\n          entries: [\n            {\n              binding: 0,\n              visibility: stage,\n              buffer: {\n                minBindingSize: 0,\n              },\n            },\n            ...(generatedUniforms.size > 0\n              ? [\n                  {\n                    binding: 1,\n                    visibility: stage,\n                    buffer: {\n                      minBindingSize: 0,\n                    },\n                  },\n                ]\n              : []),\n            ...generatedUniforms.special\n              .map((s) => {\n                if (s.type == \"sampler2D\") {\n                  let sampleType = (t) => {\n                    let gpuFormat = (s.value?.texture.adapter).gpuTextureFormat;\n                    if (\n                      gpuFormat == \"depth24plus\" ||\n                      gpuFormat == \"depth32float\"\n                    ) {\n                      return \"depth\";\n                    }\n                    if (t == \"uint8\") {\n                      return \"float\";\n                    }\n                    if (t.startsWith(\"int\")) {\n                      return \"sint\";\n                    } else if (t.startsWith(\"uint\")) {\n                      return \"uint\";\n                    } else if (t.startsWith(\"float\")) {\n                      return \"unfilterable-float\";\n                    }\n                    return \"unfilterable-float\";\n                  };\n                  let texInner = s.value?.texture?.innerType ?? \"float4\";\n                  let filterMode =\n                    texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n                  let sampleTypeGPU = sampleType(\n                    s.value?.texture?.innerType ?? \"float4\"\n                  );\n                  if (s.access == \"sample_write\") {\n                    return [\n                      {\n                        binding: s.index,\n                        visibility: stage,\n                        texture: {\n                          sampleType: sampleType(texInner),\n                          viewDimension: \"2d\",\n                          multisampled: false,\n                        },\n                      },\n                      {\n                        binding: s.index + 1,\n                        visibility: stage,\n                        sampler: {\n                          type: filterMode,\n                        },\n                      },\n                      {\n                        binding: s.index + 2,\n                        visibility: stage,\n                        storageTexture: {\n                          format: (s.value?.texture.adapter).gpuTextureFormat,\n                          access: \"write-only\",\n                          viewDimension: \"2d\",\n                        },\n                      },\n                    ];\n                  } else if (s.access == \"write\") {\n                    return [\n                      {\n                        binding: s.index,\n                        visibility: stage,\n                        texture: {\n                          sampleType: sampleTypeGPU,\n                          viewDimension: \"2d\",\n                          multisampled: false,\n                        },\n                      },\n                      {\n                        binding: s.index + 1,\n                        visibility: stage,\n                        storageTexture: {\n                          format: (s.value?.texture.adapter).gpuTextureFormat,\n                          access: \"write-only\",\n                          viewDimension: \"2d\",\n                        },\n                      },\n                    ];\n                  } else if (s.access == \"sample\" || s.access == \"read\") {\n                    return [\n                      {\n                        binding: s.index,\n                        visibility: stage,\n                        texture: {\n                          sampleType: sampleTypeGPU,\n                          viewDimension: \"2d\",\n                          multisampled: false,\n                        },\n                      },\n                      {\n                        binding: s.index + 1,\n                        visibility: stage,\n                        sampler: {\n                          type: filterMode,\n                        },\n                      },\n                    ];\n                  }\n                } else if (s.type == \"sampler2DArray\") {\n                  if (!s.value?.textures[0]) return [];\n                  let firstTexture = s.value?.textures[0];\n                  let sampleType = (t) => {\n                    let gpuFormat = firstTexture.adapter.gpuTextureFormat;\n                    if (\n                      gpuFormat == \"depth24plus\" ||\n                      gpuFormat == \"depth32float\"\n                    ) {\n                      return \"depth\";\n                    }\n                    if (t == \"uint8\") {\n                      return \"float\";\n                    }\n                    if (t.startsWith(\"int\")) {\n                      return \"sint\";\n                    } else if (t.startsWith(\"uint\")) {\n                      return \"uint\";\n                    } else if (t.startsWith(\"float\")) {\n                      return \"unfilterable-float\";\n                    }\n                    return \"unfilterable-float\";\n                  };\n                  let texInner = firstTexture.innerType ?? \"float4\";\n                  let filterMode =\n                    texInner == \"uint8\" ? \"filtering\" : \"non-filtering\";\n                  let sampleTypeGPU = sampleType(\n                    firstTexture.innerType ?? \"float4\"\n                  );\n                  if (s.access == \"sample_write\") {\n                    return [\n                      {\n                        binding: s.index,\n                        visibility: stage,\n                        texture: {\n                          sampleType: sampleType(texInner),\n                          viewDimension: \"2d-array\",\n                          multisampled: false,\n                        },\n                      },\n                      {\n                        binding: s.index + 1,\n                        visibility: stage,\n                        sampler: {\n                          type: filterMode,\n                        },\n                      },\n                      {\n                        binding: s.index + 2,\n                        visibility: stage,\n                        storageTexture: {\n                          format: firstTexture.adapter.gpuTextureFormat,\n                          access: \"write-only\",\n                          viewDimension: \"2d-array\",\n                        },\n                      },\n                    ];\n                  } else if (s.access == \"write\") {\n                    return [\n                      {\n                        binding: s.index,\n                        visibility: stage,\n                        texture: {\n                          sampleType: sampleTypeGPU,\n                          viewDimension: \"2d-array\",\n                          multisampled: false,\n                        },\n                      },\n                      {\n                        binding: s.index + 1,\n                        visibility: stage,\n                        storageTexture: {\n                          format: firstTexture.adapter.gpuTextureFormat,\n                          access: \"write-only\",\n                          viewDimension: \"2d-array\",\n                        },\n                      },\n                    ];\n                  } else if (s.access == \"sample\" || s.access == \"read\") {\n                    return [\n                      {\n                        binding: s.index,\n                        visibility: stage,\n                        texture: {\n                          sampleType: sampleTypeGPU,\n                          viewDimension: \"2d-array\",\n                          multisampled: false,\n                        },\n                      },\n                      {\n                        binding: s.index + 1,\n                        visibility: stage,\n                        sampler: {\n                          type: filterMode,\n                        },\n                      },\n                    ];\n                  }\n                } else if (s.type == \"array\") {\n                  return [\n                    {\n                      binding: s.index,\n                      visibility: stage,\n                      buffer: { type: \"read-only-storage\" },\n                    },\n                  ];\n                } else if (s.type == \"atomic\") {\n                  return [\n                    {\n                      binding: s.index,\n                      visibility: stage,\n                      buffer: { type: \"storage\" },\n                    },\n                  ];\n                } else if (s.type == \"buffer\") {\n                  return [\n                    {\n                      binding: s.index,\n                      visibility: stage,\n                      buffer: {\n                        type:\n                          s.access == \"read\" ? \"read-only-storage\" : \"storage\",\n                      },\n                    },\n                  ];\n                }\n              })\n              .flat(),\n          ],\n        });\n        bindGroupLayout.$__gpuKey = this.bindGroupLayoutCounter++;\n        this.endDispatch();\n      }\n      let outUniformBuffer = cache?.uniformBuffer;\n      let outSpecialBuffers = cache?.specialBuffers;\n      if (cache) {\n        if (cache.cachedUniforms) {\n          let matches =\n            generatedUniforms.data.byteLength ==\n            cache.cachedUniforms.byteLength;\n          let uintView = new Uint8Array(generatedUniforms.data);\n          let uintView2 = new Uint8Array(cache.cachedUniforms);\n          if (matches) {\n            for (let i = 0; i < uintView.length; i++) {\n              if (uintView[i] != uintView2[i]) {\n                matches = false;\n                break;\n              }\n            }\n          }\n          if (!matches) {\n            if (outUniformBuffer) {\n              let oldBuffer = outUniformBuffer;\n              this.enqueueCleanupCommand(() => {\n                oldBuffer.destroy();\n              });\n            }\n            bindGroup = null;\n            outUniformBuffer = void 0;\n          }\n        }\n      }\n      let specialsKey = [];\n      let alwaysDirty = false;\n      for (let special of generatedUniforms.special) {\n        if (special.type == \"sampler2D\") {\n          if (!special.value || !(\"texture\" in special.value)) continue;\n          let tex = special.value.texture;\n          if (tex.image) {\n            let texture;\n            if (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n              let texCtx = tex.adapter.getTexture();\n              texture = texCtx;\n              if (!texture) continue;\n              specialsKey.push(\n                5623462,\n                special.index,\n                tex.symbol,\n                tex.innerType,\n                special.access\n              );\n            }\n          } else {\n            return;\n          }\n        } else if (special.type == \"sampler2DArray\") {\n          if (!special.value || !(\"textures\" in special.value)) continue;\n          let tex = special.value.textures[0];\n          if (tex) {\n            if (tex.image) {\n              let texture;\n              if (tex.adapter instanceof WebGPUAdapter && tex.adapter.texture) {\n                let texCtx = tex.adapter.getTexture();\n                texture = texCtx;\n                if (!texture) continue;\n                specialsKey.push(\n                  5653223462,\n                  special.index,\n                  tex.symbol,\n                  tex.innerType,\n                  special.access\n                );\n              }\n            }\n          } else {\n            return;\n          }\n        } else if (special.type == \"array\" && special.value) {\n          specialsKey.push(5523462, special.index);\n          alwaysDirty = true;\n        } else if (special.type == \"buffer\" && special.value) {\n          specialsKey.push(\n            1253462,\n            special.index,\n            special.access,\n            special.value.symbol\n          );\n        } else if (special.type == \"atomic\" && special.value) {\n          specialsKey.push(125342, special.index);\n          alwaysDirty = true;\n        } else {\n          throw new Error(`Unknown special type ${special.type}`);\n        }\n      }\n      let specialsDirty = false;\n      if (cache) {\n        if (cache.specialsKey.length != specialsKey.length) {\n          specialsDirty = true;\n        } else {\n          for (let i = 0; i < specialsKey.length; i++) {\n            if (cache.specialsKey[i] != specialsKey[i]) {\n              specialsDirty = true;\n              break;\n            }\n          }\n        }\n      } else {\n        specialsDirty = true;\n      }\n      let specialEntries = void 0;\n      if (cache) {\n        specialEntries = cache.specialEntries;\n      }\n      if (alwaysDirty || specialsDirty) {\n        outSpecialBuffers = void 0;\n        specialEntries = void 0;\n      }\n      if (\n        !bindGroup ||\n        !outUniformBuffer ||\n        !outSpecialBuffers ||\n        !specialEntries\n      ) {\n        let outEntries = [\n          { binding: 0, resource: { buffer: baseUniformBuffer } },\n        ];\n        if (!outSpecialBuffers || !specialEntries) {\n          outSpecialBuffers = [];\n          specialEntries = [];\n          for (let special of generatedUniforms.special) {\n            if (special.type == \"sampler2D\") {\n              if (!special.value || !(\"texture\" in special.value)) continue;\n              let tex = special.value.texture;\n              if (tex.image) {\n                let texture;\n                if (\n                  tex.adapter instanceof WebGPUAdapter &&\n                  tex.adapter.texture\n                ) {\n                  let texCtx = tex.adapter.getTexture();\n                  texture = texCtx;\n                  if (!texture) continue;\n                  let filterable = tex.innerType == \"uint8\";\n                  if (special.access == \"sample_write\") {\n                    const sampler = device.createSampler(\n                      filterable\n                        ? {\n                            magFilter: \"linear\",\n                            minFilter: \"linear\",\n                          }\n                        : {}\n                    );\n                    specialEntries.push({\n                      binding: special.index,\n                      resource: texture.createView({\n                        format: tex.adapter.gpuTextureFormat,\n                      }),\n                    });\n                    specialEntries.push({\n                      binding: special.index + 1,\n                      resource: sampler,\n                    });\n                    specialEntries.push({\n                      binding: special.index + 2,\n                      resource: tex.adapter.getStorageTexture().createView(),\n                    });\n                  } else if (special.access == \"write\") {\n                    specialEntries.push({\n                      binding: special.index,\n                      resource: texture.createView({\n                        format: tex.adapter.gpuTextureFormat,\n                      }),\n                    });\n                    specialEntries.push({\n                      binding: special.index + 1,\n                      resource: tex.adapter.getStorageTexture().createView(),\n                    });\n                  } else if (\n                    special.access == \"read\" ||\n                    special.access == \"sample\"\n                  ) {\n                    const sampler = device.createSampler(\n                      filterable\n                        ? {\n                            magFilter: \"linear\",\n                            minFilter: \"linear\",\n                          }\n                        : {}\n                    );\n                    specialEntries.push({\n                      binding: special.index,\n                      resource: texture.createView({\n                        format: tex.adapter.gpuTextureFormat,\n                      }),\n                    });\n                    specialEntries.push({\n                      binding: special.index + 1,\n                      resource: sampler,\n                    });\n                  }\n                }\n              } else {\n                return;\n              }\n            } else if (special.type == \"sampler2DArray\") {\n              if (!special.value || !(\"textures\" in special.value)) continue;\n              if (special.value.textures.$arrTexture) {\n                if (special.value.textures.$arrTexture instanceof GPUTexture) {\n                  let tex = special.value.textures[0];\n                  if (!tex) return;\n                  let texture = special.value.textures.$arrTexture;\n                  let filterable = tex.innerType == \"uint8\";\n                  if (special.access == \"sample_write\") {\n                    const sampler = device.createSampler(\n                      filterable\n                        ? {\n                            magFilter: \"linear\",\n                            minFilter: \"linear\",\n                          }\n                        : {}\n                    );\n                    specialEntries.push({\n                      binding: special.index,\n                      resource: texture.createView({\n                        format: tex.adapter.gpuTextureFormat,\n                      }),\n                    });\n                    specialEntries.push({\n                      binding: special.index + 1,\n                      resource: sampler,\n                    });\n                    specialEntries.push({\n                      binding: special.index + 2,\n                      resource: tex.adapter.getStorageTexture().createView(),\n                    });\n                    throw new Error(\n                      \"Writing to texture arrays is not supported yet\"\n                    );\n                  } else if (special.access == \"write\") {\n                    specialEntries.push({\n                      binding: special.index,\n                      resource: texture.createView({\n                        format: tex.adapter.gpuTextureFormat,\n                      }),\n                    });\n                    specialEntries.push({\n                      binding: special.index + 1,\n                      resource: tex.adapter.getStorageTexture().createView(),\n                    });\n                    throw new Error(\n                      \"Writing to texture arrays is not supported yet\"\n                    );\n                  } else if (\n                    special.access == \"read\" ||\n                    special.access == \"sample\"\n                  ) {\n                    const sampler = device.createSampler(\n                      filterable\n                        ? {\n                            magFilter: \"linear\",\n                            minFilter: \"linear\",\n                          }\n                        : {}\n                    );\n                    specialEntries.push({\n                      binding: special.index,\n                      resource: texture.createView({\n                        format: tex.adapter.gpuTextureFormat,\n                        arrayLayerCount: special.value.textures.length,\n                        baseArrayLayer: 0,\n                        dimension: \"2d-array\",\n                      }),\n                    });\n                    specialEntries.push({\n                      binding: special.index + 1,\n                      resource: sampler,\n                    });\n                  }\n                }\n              }\n            } else if (special.type == \"array\" && special.value) {\n              let buffer = device.createBuffer({\n                size: special.value.size,\n                usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n              });\n              outSpecialBuffers.push(buffer);\n              specialEntries.push({\n                binding: special.index,\n                resource: { buffer },\n              });\n            } else if (special.type == \"buffer\" && special.value) {\n              let buf = this.getOrCreateBuffer(\n                special.value,\n                this.genericBufferFlags()\n              );\n              outSpecialBuffers.push(buf);\n              specialEntries.push({\n                binding: special.index,\n                resource: { buffer: buf },\n              });\n            } else if (special.type == \"atomic\" && special.value) {\n              let buf = device.createBuffer({\n                size: 4,\n                usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n              });\n              outSpecialBuffers.push(buf);\n              specialEntries.push({\n                binding: special.index,\n                resource: {\n                  buffer: buf,\n                },\n              });\n            } else {\n              throw new Error(`Unknown special type ${special.type}`);\n            }\n          }\n        }\n        let needsUniformWrite = false;\n        if (!outUniformBuffer) {\n          outUniformBuffer = device.createBuffer({\n            size: generatedUniforms.size,\n            usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n          });\n          needsUniformWrite = true;\n        }\n        if (generatedUniforms.size > 0) {\n          outEntries.push({\n            binding: 1,\n            resource: { buffer: outUniformBuffer },\n          });\n          if (needsUniformWrite)\n            device.queue.writeBuffer(\n              outUniformBuffer,\n              0,\n              generatedUniforms.data\n            );\n        }\n        for (let i = 0; i < specialEntries.length; i++) {\n          outEntries.push(specialEntries[i]);\n        }\n        let bufCounter = 0;\n        for (let i = 0; i < generatedUniforms.special.length; i++) {\n          let special = generatedUniforms.special[i];\n          if (special.type == \"array\" && special.value) {\n            device.queue.writeBuffer(\n              outSpecialBuffers[bufCounter++],\n              0,\n              special.value.buffer\n            );\n          }\n        }\n        bindGroup = device.createBindGroup({\n          layout: bindGroupLayout,\n          entries: outEntries,\n        });\n      }\n      if (cache) {\n        cache.key = key;\n        cache.bindGroupLayout = bindGroupLayout;\n        cache.bindGroup = bindGroup;\n        cache.uniformBuffer = outUniformBuffer;\n        cache.specialBuffers = outSpecialBuffers;\n        cache.cachedUniforms = generatedUniforms.data;\n        cache.specialsKey = specialsKey;\n        cache.specialEntries = specialEntries;\n      } else {\n        shader.webgpuUniformCache.set(key, {\n          key,\n          bindGroupLayout,\n          bindGroup,\n          uniformBuffer: outUniformBuffer,\n          specialBuffers: outSpecialBuffers,\n          cachedUniforms: generatedUniforms.data,\n          specialsKey,\n          specialEntries,\n        });\n      }\n      return {\n        bindGroupLayout,\n        bindGroup,\n        uniformBuffer: outUniformBuffer,\n        specialBuffers: outSpecialBuffers,\n        commands,\n      };\n    }\n    writeStructuredBuffer(structure, raw, buffer, offset = 0) {\n      let rootObj = {\n        val: raw,\n      };\n      let queue = [[[\"val\", structure], rootObj, null]];\n      writeBufferStructure(queue, rootObj, buffer, offset);\n    }\n    readStructuredBuffer(structure, buffer, offset = 0) {\n      if (structure.type == \"array\") {\n        let arr = [];\n        if (\"staticSize\" in structure && structure.staticSize != null) {\n          let elSize = getValueSize(structure.element);\n          for (let i = 0; i < structure.staticSize; i++) {\n            arr.push(\n              this.readStructuredBuffer(structure.element, buffer, offset)\n            );\n            offset += elSize / 4;\n          }\n          return arr;\n        } else {\n          throw new Error(`Unable to read dynamic array`);\n        }\n      } else if (structure.type == \"primitive\") {\n        let uview = new Uint32Array(buffer);\n        let iview = new Int32Array(buffer);\n        let fview = new Float32Array(buffer);\n        if (structure.name == \"uint4\") {\n          return [\n            uview[offset],\n            uview[offset + 1],\n            uview[offset + 2],\n            uview[offset + 3],\n          ];\n        } else if (structure.name == \"int4\") {\n          return [\n            iview[offset],\n            iview[offset + 1],\n            iview[offset + 2],\n            iview[offset + 3],\n          ];\n        } else if (structure.name == \"float4\") {\n          return [\n            fview[offset],\n            fview[offset + 1],\n            fview[offset + 2],\n            fview[offset + 3],\n          ];\n        } else if (structure.name == \"uint3\") {\n          return [uview[offset], uview[offset + 1], uview[offset + 2]];\n        } else if (structure.name == \"int3\") {\n          return [iview[offset], iview[offset + 1], iview[offset + 2]];\n        } else if (structure.name == \"float3\") {\n          return [fview[offset], fview[offset + 1], fview[offset + 2]];\n        } else if (structure.name == \"uint2\") {\n          return [uview[offset], uview[offset + 1]];\n        } else if (structure.name == \"int2\") {\n          return [iview[offset], iview[offset + 1]];\n        } else if (structure.name == \"float2\") {\n          return [fview[offset], fview[offset + 1]];\n        } else if (structure.name == \"uint\") {\n          return uview[offset];\n        } else if (structure.name == \"int\") {\n          return iview[offset];\n        } else if (structure.name == \"float\") {\n          return fview[offset];\n        } else if (structure.name == \"bool\") {\n          return uview[offset] == 1;\n        } else if (structure.name == \"float2x2\") {\n          return window.applyMatrix2x2Methods([\n            [fview[offset], fview[offset + 1]],\n            [fview[offset + 2], fview[offset + 3]],\n          ]);\n        } else if (structure.name == \"float3x3\") {\n          return window.applyMatrix3x3Methods([\n            [fview[offset], fview[offset + 1], fview[offset + 2]],\n            [fview[offset + 3], fview[offset + 4], fview[offset + 5]],\n            [fview[offset + 6], fview[offset + 7], fview[offset + 8]],\n          ]);\n        } else if (structure.name == \"float4x4\") {\n          return window.applyMatrix4x4Methods([\n            [\n              fview[offset],\n              fview[offset + 1],\n              fview[offset + 2],\n              fview[offset + 3],\n            ],\n            [\n              fview[offset + 4],\n              fview[offset + 5],\n              fview[offset + 6],\n              fview[offset + 7],\n            ],\n            [\n              fview[offset + 8],\n              fview[offset + 9],\n              fview[offset + 10],\n              fview[offset + 11],\n            ],\n            [\n              fview[offset + 12],\n              fview[offset + 13],\n              fview[offset + 14],\n              fview[offset + 15],\n            ],\n          ]);\n        } else if (structure.name == \"atomic\") {\n          if (structure.element.type == \"primitive\") {\n            if (structure.element.name == \"uint\") {\n              return window.makeAtomic(uview[offset]);\n            } else if (structure.element.name == \"int\") {\n              return window.makeAtomic(iview[offset]);\n            }\n          }\n        } else {\n          throw new Error(`Unable to convert primitive type ${structure.name}`);\n        }\n      } else if (structure.type == \"struct\") {\n        let out = {};\n        for (let field of structure.fields) {\n          let size = getValueSize(field[1]);\n          out[field[0]] = this.readStructuredBuffer(\n            field[1],\n            buffer,\n            offset / 4\n          );\n          offset += size;\n        }\n        let clazz = window.__shadeup_structs[structure.name].struct;\n        if (clazz) {\n          return new clazz(out);\n        }\n      } else {\n        throw new Error(`Unable to convert type ${structure.type}`);\n      }\n    }\n    buildComputePipeline(shader, computeUniform) {\n      const { device } = this.getGPU();\n      let commands = [];\n      this.baseUniformValues;\n      const baseUniformBufferSize = this.baseUniformBufferSize;\n      const baseUniformBuffer = device.createBuffer({\n        size: baseUniformBufferSize,\n        usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n      });\n      const compute = this.buildUniformsForPipeline(\n        shader,\n        computeUniform,\n        baseUniformBuffer,\n        GPUShaderStage.COMPUTE\n      );\n      if (!compute) {\n        return;\n      }\n      commands = compute.commands;\n      const pipelineLayout = device.createPipelineLayout({\n        bindGroupLayouts: [compute.bindGroupLayout],\n      });\n      this.startDispatch();\n      let pipeline = device.createComputePipeline({\n        label: \"compute pipeline\",\n        layout: pipelineLayout,\n        compute: {\n          module: shader.payload,\n          entryPoint: \"main\",\n        },\n      });\n      this.endDispatch();\n      return {\n        pipeline,\n        bindGroup: compute.bindGroup,\n        baseUniformBuffer,\n        uniformBuffer: compute.uniformBuffer,\n        specialBuffers: compute.specialBuffers,\n        commands,\n      };\n    }\n    cachedPipelines = /* @__PURE__ */ new Map();\n    cachedPipelineLayouts = /* @__PURE__ */ new Map();\n    setupDrawPipeline(\n      shaders,\n      fragmentUniform,\n      vertexUniform,\n      options,\n      ignoreVertexLayout = false\n    ) {\n      const { device } = this.getGPU();\n      if (!this.baseUniformBuffer) {\n        throw new Error(\"Base uniform buffer not initialized\");\n      }\n      let commands = [];\n      const fragment = this.buildUniformsForPipeline(\n        shaders.fragment,\n        fragmentUniform,\n        this.baseUniformBuffer,\n        GPUShaderStage.FRAGMENT\n      );\n      const vertex = this.buildUniformsForPipeline(\n        shaders.vertex,\n        vertexUniform,\n        this.baseUniformBuffer,\n        GPUShaderStage.VERTEX\n      );\n      if (!fragment || !vertex) {\n        return;\n      }\n      commands.push(...fragment.commands);\n      commands.push(...vertex.commands);\n      let pipelineLayoutKey = `${shaders.fragment.uniqueSourceKey}_${fragment.bindGroupLayout.$__gpuKey}_${shaders.vertex.uniqueSourceKey}_${vertex.bindGroupLayout.$__gpuKey}`;\n      let pipelineLayout;\n      if (this.cachedPipelineLayouts.has(pipelineLayoutKey)) {\n        pipelineLayout = this.cachedPipelineLayouts.get(pipelineLayoutKey);\n      } else {\n        pipelineLayout = device.createPipelineLayout({\n          bindGroupLayouts: [fragment.bindGroupLayout, vertex.bindGroupLayout],\n        });\n        this.cachedPipelineLayouts.set(pipelineLayoutKey, pipelineLayout);\n      }\n      if (!this.depthTexture) {\n        throw new Error(\"Depth texture not initialized\");\n      }\n      let pipelineKey =\n        pipelineLayoutKey +\n        this.depthTexture.format +\n        options.depthTest +\n        options.depthFormat +\n        options.depthOnly +\n        options.backfaceCulling +\n        options.depthCompare +\n        options.attachments?.length;\n      let pipeline;\n      if (this.cachedPipelines.has(pipelineKey)) {\n        pipeline = this.cachedPipelines.get(pipelineKey);\n      } else {\n        const generateTarget = (adap) => {\n          return {\n            format: adap.headless ? adap.gpuTextureFormat : \"rgba8unorm\",\n            blend: FormatCapabilities[adap.gpuTextureFormat].blendable\n              ? {\n                  alpha: {\n                    srcFactor: \"src-alpha\",\n                    dstFactor: \"one-minus-src-alpha\",\n                    operation: \"add\",\n                  },\n                  color: {\n                    srcFactor: \"src-alpha\",\n                    dstFactor: \"one-minus-src-alpha\",\n                    operation: \"add\",\n                  },\n                }\n              : void 0,\n          };\n        };\n        const pipelineDescriptor = {\n          vertex: {\n            module: shaders.vertex.payload,\n            entryPoint: \"main\",\n            buffers: ignoreVertexLayout ? [] : vertexLayout,\n          },\n          ...(options.depthOnly\n            ? {}\n            : {\n                fragment: {\n                  module: shaders.fragment.payload,\n                  entryPoint: \"main\",\n                  targets:\n                    options.attachments && options.attachments.length > 0\n                      ? options.attachments.map((att) =>\n                          generateTarget(att.adapter)\n                        )\n                      : [generateTarget(this)],\n                },\n              }),\n          primitive: {\n            topology: \"triangle-list\",\n            cullMode: options.backfaceCulling ? \"back\" : \"none\",\n          },\n          ...(options.depthTest\n            ? {\n                depthStencil: {\n                  depthWriteEnabled: true,\n                  depthCompare: options.depthCompare ?? \"less\",\n                  format: options.depthFormat ?? \"depth24plus\",\n                },\n              }\n            : {}),\n          layout: pipelineLayout,\n        };\n        this.startDispatch();\n        pipeline = device.createRenderPipeline(pipelineDescriptor);\n        this.endDispatch();\n        this.cachedPipelines.set(pipelineKey, pipeline);\n      }\n      let drawData = {\n        pipeline,\n        bindGroupFragment: fragment.bindGroup,\n        bindGroupVertex: vertex.bindGroup,\n        baseUniformBuffer: this.baseUniformBuffer,\n        vertexUniformBuffer: vertex.uniformBuffer,\n        fragmentUniformBuffer: fragment.uniformBuffer,\n        specialBuffersFragment: fragment.specialBuffers,\n        specialBuffersVertex: vertex.specialBuffers,\n        commands,\n      };\n      return drawData;\n    }\n    buildDrawPipeline(\n      shaders,\n      fragmentUniform,\n      vertexUniform,\n      options,\n      ignoreVertexLayout = false\n    ) {\n      const { device } = this.getGPU();\n      let commands = [];\n      this.baseUniformValues;\n      const baseUniformBufferSize = this.baseUniformBufferSize;\n      const baseUniformBuffer = device.createBuffer({\n        size: baseUniformBufferSize,\n        usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n      });\n      const fragment = this.buildUniformsForPipeline(\n        shaders.fragment,\n        fragmentUniform,\n        baseUniformBuffer,\n        GPUShaderStage.FRAGMENT\n      );\n      const vertex = this.buildUniformsForPipeline(\n        shaders.vertex,\n        vertexUniform,\n        baseUniformBuffer,\n        GPUShaderStage.VERTEX\n      );\n      if (!fragment || !vertex) {\n        return;\n      }\n      commands.push(...fragment.commands);\n      commands.push(...vertex.commands);\n      const pipelineLayout = device.createPipelineLayout({\n        bindGroupLayouts: [fragment.bindGroupLayout, vertex.bindGroupLayout],\n      });\n      if (!this.depthTexture) {\n        throw new Error(\"Depth texture not initialized\");\n      }\n      const generateTarget = (adap) => {\n        return {\n          format: adap.headless ? adap.gpuTextureFormat : \"rgba8unorm\",\n          blend: FormatCapabilities[adap.gpuTextureFormat].blendable\n            ? {\n                alpha: {\n                  srcFactor: \"src-alpha\",\n                  dstFactor: \"one-minus-src-alpha\",\n                  operation: \"add\",\n                },\n                color: {\n                  srcFactor: \"src-alpha\",\n                  dstFactor: \"one-minus-src-alpha\",\n                  operation: \"add\",\n                },\n              }\n            : void 0,\n        };\n      };\n      const pipelineDescriptor = {\n        vertex: {\n          module: shaders.vertex.payload,\n          entryPoint: \"main\",\n          buffers: ignoreVertexLayout ? [] : vertexLayout,\n        },\n        ...(options.depthOnly\n          ? {}\n          : {\n              fragment: {\n                module: shaders.fragment.payload,\n                entryPoint: \"main\",\n                targets:\n                  options.attachments && options.attachments.length > 0\n                    ? options.attachments.map((att) =>\n                        generateTarget(att.adapter)\n                      )\n                    : [generateTarget(this)],\n              },\n            }),\n        primitive: {\n          topology: \"triangle-list\",\n          cullMode: \"back\",\n        },\n        ...(options.depthTest\n          ? {\n              depthStencil: {\n                depthWriteEnabled: true,\n                depthCompare: \"less\",\n                format: options.depthFormat ?? \"depth24plus\",\n              },\n            }\n          : {}),\n        layout: pipelineLayout,\n      };\n      this.startDispatch();\n      let pipeline = device.createRenderPipeline(pipelineDescriptor);\n      this.endDispatch();\n      let drawData = {\n        pipeline,\n        bindGroupFragment: fragment.bindGroup,\n        bindGroupVertex: vertex.bindGroup,\n        baseUniformBuffer,\n        vertexUniformBuffer: vertex.uniformBuffer,\n        fragmentUniformBuffer: fragment.uniformBuffer,\n        specialBuffersFragment: fragment.specialBuffers,\n        specialBuffersVertex: vertex.specialBuffers,\n        commands,\n      };\n      return drawData;\n    }\n    getTexture() {\n      if (!this.headless) {\n        if (this.ctx) {\n          return this.ctx.getCurrentTexture();\n        } else {\n          throw new Error(\"No context\");\n        }\n      } else {\n        return this.texture;\n      }\n    }\n    getStorageTexture() {\n      const { device } = this.getGPU();\n      if (!this.storageTexture) {\n        this.startDispatch();\n        this.storageTexture = device.createTexture({\n          size: {\n            width: this.headlessWidth,\n            height: this.headlessHeight,\n          },\n          format: this.gpuTextureFormat,\n          dimension: \"2d\",\n          viewFormats: [this.gpuTextureFormat],\n          usage:\n            GPUTextureUsage.RENDER_ATTACHMENT |\n            GPUTextureUsage.STORAGE_BINDING |\n            GPUTextureUsage.COPY_SRC |\n            GPUTextureUsage.COPY_DST,\n        });\n        this.endDispatch();\n      }\n      return this.storageTexture;\n    }\n    commandQueue = [];\n    cleanupCommands = [];\n    immediate = false;\n    enqueueCommand(command, immediate = false) {\n      if (this.immediate || immediate) {\n        const { device } = this.getGPU();\n        this.startDispatch();\n        let encoder = device.createCommandEncoder();\n        let result = command(encoder);\n        device.queue.submit([encoder.finish()]);\n        if (result) {\n          result();\n        }\n        this.endDispatch();\n      } else {\n        this.commandQueue.push(command);\n      }\n    }\n    enqueueCleanupCommand(command) {\n      let cmd = command;\n      cmd.$counter = 10;\n      this.cleanupCommands.push(cmd);\n    }\n    dispatchCompute(dispatch) {\n      this.trace(\"enqueueCompute\", { dispatch });\n      const { device } = this.getGPU();\n      if (!dispatch.computeShader) {\n        throw new Error(\"Dispatch is missing compute shader\");\n      }\n      `${dispatch.computeShader.uniqueSourceKey}`;\n      const computeUniform = generateUniforms(\n        dispatch.fragmentUniforms,\n        dispatch.computeShader\n      );\n      let output = this.buildComputePipeline(\n        dispatch.computeShader,\n        computeUniform\n      );\n      this.enqueueCommand((encoder) => {\n        if (output)\n          for (let command of output.commands) {\n            command(encoder);\n          }\n        const pass = encoder.beginComputePass({\n          label: \"compute builtin pass\",\n        });\n        let baseUniformValues = this.baseUniformValues;\n        this.baseUniformBufferSize;\n        baseUniformValues.set([0, 0], 0);\n        let computeData;\n        {\n          if (!output) return;\n          computeData = output;\n        }\n        let {\n          pipeline,\n          bindGroup,\n          baseUniformBuffer,\n          uniformBuffer,\n          specialBuffers,\n        } = computeData;\n        device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n        device.queue.writeBuffer(uniformBuffer, 0, computeUniform.data);\n        let bufCounter = 0;\n        for (let i = 0; i < computeUniform.special.length; i++) {\n          let special = computeUniform.special[i];\n          if (special.type == \"array\" && special.value) {\n            this.trace(\"writeArray\", { special });\n            device.queue.writeBuffer(\n              specialBuffers[bufCounter++],\n              0,\n              special.value.buffer\n            );\n          }\n        }\n        pass.setPipeline(pipeline);\n        pass.setBindGroup(0, bindGroup);\n        if (dispatch.indirectBuffer) {\n          pass.dispatchWorkgroupsIndirect(\n            this.getOrCreateBuffer(\n              dispatch.indirectBuffer,\n              GPUBufferUsage.INDIRECT\n            ),\n            dispatch.indirectOffset\n          );\n        } else {\n          pass.dispatchWorkgroups(...dispatch.computeCount);\n        }\n        this.trace(\"dispatchCompute\", { dispatch });\n        pass.end();\n      });\n    }\n    writeSpecialBuffer(buffer, data) {\n      const { device } = this.getGPU();\n      this.startDispatch();\n      device.queue.writeBuffer(buffer, 0, data);\n      this.endDispatch();\n    }\n    beforeScreenDraw() {\n      if (!this.clearEnqueued) {\n        this.enqueueCommand((encoder) => {\n          this.getGPU();\n          if (!this.depthTexture) return;\n          const textureView = this.getTexture().createView();\n          if (\n            this.gpuTextureFormat == \"depth24plus\" ||\n            this.gpuTextureFormat == \"depth32float\"\n          ) {\n            const clearPassDesc = {\n              colorAttachments: [],\n              depthStencilAttachment: {\n                view: textureView,\n                depthClearValue: 1,\n                depthLoadOp: \"clear\",\n                depthStoreOp: \"store\",\n              },\n            };\n            const passEncoder = encoder.beginRenderPass(clearPassDesc);\n            passEncoder.end();\n          } else {\n            const clearPassDesc = {\n              colorAttachments: [\n                {\n                  view: textureView,\n                  clearValue: { r: 0, g: 0, b: 0, a: 0 },\n                  storeOp: \"store\",\n                  loadOp: \"clear\",\n                },\n              ],\n              depthStencilAttachment: {\n                view: this.depthTexture.createView(),\n                depthClearValue: 1,\n                depthLoadOp: \"clear\",\n                depthStoreOp: \"store\",\n              },\n            };\n            const passEncoder = encoder.beginRenderPass(clearPassDesc);\n            passEncoder.end();\n          }\n          this.clearEnqueued = false;\n        });\n        this.clearEnqueued = true;\n      }\n    }\n    dispatchDraw(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      this.trace(\"enqueueDraw\", { dispatch, options });\n      const { device } = this.getGPU();\n      if (!dispatch.vertexShader || !dispatch.fragmentShader) {\n        throw new Error(\"Dispatch is missing vertex or fragment shader\");\n      }\n      if (!dispatch.geometry && !dispatch.indirectBuffer) {\n        throw new Error(\"Dispatch is missing geometry\");\n      }\n      if (!this.depthTexture) {\n        throw new Error(\"Depth texture not created\");\n      }\n      this.startDispatch();\n      if (dispatch.overrideDepth) {\n        if (dispatch.overrideDepth.adapter instanceof WebGPUAdapter) {\n          dispatch.overrideDepth.adapter.flush();\n        }\n      }\n      let fragment = dispatch.fragmentShader;\n      let vertex = dispatch.vertexShader;\n      const fragmentUniform = generateUniforms(\n        dispatch.fragmentUniforms,\n        dispatch.fragmentShader\n      );\n      const vertexUniform = generateUniforms(\n        dispatch.vertexUniforms,\n        dispatch.vertexShader\n      );\n      `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n      let depthTex = dispatch.overrideDepth\n        ? dispatch.overrideDepth.adapter.getTexture()\n        : this.depthTexture;\n      let output = this.setupDrawPipeline(\n        {\n          fragment,\n          vertex,\n        },\n        fragmentUniform,\n        vertexUniform,\n        {\n          ...options,\n          depthFormat: depthTex.format,\n          depthOnly: dispatch.depthOnly,\n          attachments: dispatch.attachments ?? [],\n          depthCompare:\n            dispatch.depthCompare == \"auto\" ? \"less\" : dispatch.depthCompare,\n          backfaceCulling: dispatch.backfaceCulling,\n        }\n      );\n      this.beforeScreenDraw();\n      this.enqueueCommand((encoder) => {\n        if (output)\n          for (let command of output.commands) {\n            command(encoder);\n          }\n        let attachments = [];\n        if (!dispatch.depthOnly) {\n          if (!dispatch.attachments) {\n            attachments.push({\n              view: this.getTexture().createView(),\n              storeOp: \"store\",\n              loadOp: \"load\",\n            });\n          } else {\n            for (let attachment of dispatch.attachments) {\n              if (attachment.adapter instanceof WebGPUAdapter) {\n                let view = attachment.adapter.getTexture().createView();\n                attachments.push({\n                  view,\n                  storeOp: \"store\",\n                  loadOp: \"load\",\n                });\n              }\n            }\n          }\n        }\n        let passDescriptor = {\n          colorAttachments: attachments,\n          ...(options.depthTest\n            ? {\n                depthStencilAttachment: {\n                  view: depthTex.createView(),\n                  depthClearValue: 1,\n                  depthLoadOp: \"load\",\n                  depthStoreOp: \"store\",\n                },\n              }\n            : {}),\n        };\n        const pass = encoder.beginRenderPass(passDescriptor);\n        let myTex = this.getTexture();\n        let baseUniformValues = this.baseUniformValues;\n        this.baseUniformBufferSize;\n        baseUniformValues.set([myTex.width, myTex.height], 0);\n        let drawData;\n        if (!output) return;\n        drawData = output;\n        let {\n          pipeline,\n          bindGroupFragment,\n          bindGroupVertex,\n          baseUniformBuffer,\n          vertexUniformBuffer,\n          fragmentUniformBuffer,\n          specialBuffersFragment,\n          specialBuffersVertex,\n        } = drawData;\n        pass.setPipeline(pipeline);\n        device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n        pass.setBindGroup(0, bindGroupFragment);\n        pass.setBindGroup(1, bindGroupVertex);\n        if (dispatch.indirectBuffer) {\n          if (dispatch.geometry) {\n            let meshData = this.getOrCreateMeshData(dispatch.geometry);\n            pass.setVertexBuffer(0, meshData.vertexBuffer);\n            pass.setIndexBuffer(meshData.indexBuffer, \"uint32\");\n          }\n          if (dispatch.indexBuffer) {\n            if (dispatch.indexBuffer) {\n              pass.setIndexBuffer(\n                this.getOrCreateBuffer(\n                  dispatch.indexBuffer,\n                  GPUBufferUsage.INDEX\n                ),\n                \"uint32\"\n              );\n            }\n            if (dispatch.indirectBuffer.elementCount % 5 != 0) {\n              throw new Error(\n                \"Indirect buffer needs to be a multiple of 5 (must be at least 5 elements for indexedIndirect)\"\n              );\n            }\n            pass.drawIndexedIndirect(\n              this.getOrCreateBuffer(\n                dispatch.indirectBuffer,\n                GPUBufferUsage.INDIRECT\n              ),\n              dispatch.indirectOffset\n            );\n          } else {\n            if (dispatch.indirectBuffer.elementCount % 4 != 0) {\n              throw new Error(\n                \"Indirect buffer needs to be a multiple of 4 (must be at least 4 elements for indirect)\"\n              );\n            }\n            pass.drawIndirect(\n              this.getOrCreateBuffer(\n                dispatch.indirectBuffer,\n                GPUBufferUsage.INDIRECT\n              ),\n              dispatch.indirectOffset\n            );\n          }\n        } else if (dispatch.geometry) {\n          let meshData = this.getOrCreateMeshData(dispatch.geometry);\n          pass.setVertexBuffer(0, meshData.vertexBuffer);\n          if (meshData.indexCount > 0) {\n            pass.setIndexBuffer(meshData.indexBuffer, \"uint32\");\n            pass.drawIndexed(meshData.indexCount, dispatch.instanceCount);\n          } else {\n            pass.draw(meshData.vertexCount, dispatch.instanceCount);\n          }\n        }\n        this.trace(\"dispatchDraw\", { dispatch, options });\n        pass.end();\n        return () => {};\n      });\n    }\n    dispatchDrawIndexed(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      const { device } = this.getGPU();\n      if (!dispatch.vertexShader || !dispatch.fragmentShader) {\n        throw new Error(\"Dispatch is missing vertex or fragment shader\");\n      }\n      if (!dispatch.indexBuffer) {\n        throw new Error(\"Dispatch is missing indexBuffer\");\n      }\n      this.startDispatch();\n      let fragment = dispatch.fragmentShader;\n      let vertex = dispatch.vertexShader;\n      const fragmentUniform = generateUniforms(\n        dispatch.fragmentUniforms,\n        dispatch.fragmentShader\n      );\n      const vertexUniform = generateUniforms(\n        dispatch.vertexUniforms,\n        dispatch.vertexShader\n      );\n      `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n      let output = this.buildDrawPipeline(\n        {\n          fragment,\n          vertex,\n        },\n        fragmentUniform,\n        vertexUniform,\n        options,\n        true\n      );\n      this.beforeScreenDraw();\n      this.enqueueCommand((encoder) => {\n        if (output)\n          for (let command of output.commands) {\n            command(encoder);\n          }\n        if (!this.depthTexture) {\n          throw new Error(\"Depth texture not created\");\n        }\n        let passDescriptor = {\n          colorAttachments: [\n            {\n              view: this.getTexture().createView(),\n              storeOp: \"store\",\n              loadOp: \"load\",\n            },\n          ],\n          depthStencilAttachment: {\n            view: this.depthTexture.createView(),\n            depthClearValue: 1,\n            depthLoadOp: \"load\",\n            depthStoreOp: \"store\",\n          },\n        };\n        const pass = encoder.beginRenderPass(passDescriptor);\n        let baseUniformValues = this.baseUniformValues;\n        this.baseUniformBufferSize;\n        let myTex = this.getTexture();\n        baseUniformValues.set([myTex.width, myTex.height], 0);\n        let drawData;\n        {\n          if (!output) return;\n          drawData = output;\n        }\n        let {\n          pipeline,\n          bindGroupFragment,\n          bindGroupVertex,\n          baseUniformBuffer,\n          vertexUniformBuffer,\n          fragmentUniformBuffer,\n          specialBuffersFragment,\n          specialBuffersVertex,\n        } = drawData;\n        pass.setPipeline(pipeline);\n        device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n        device.queue.writeBuffer(\n          fragmentUniformBuffer,\n          0,\n          fragmentUniform.data\n        );\n        let bufCounterFrag = 0;\n        for (let i = 0; i < fragmentUniform.special.length; i++) {\n          let special = fragmentUniform.special[i];\n          if (special.type == \"array\" && special.value) {\n            device.queue.writeBuffer(\n              specialBuffersFragment[bufCounterFrag++],\n              0,\n              special.value.buffer\n            );\n          }\n        }\n        device.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n        let bufCounterVert = 0;\n        for (let i = 0; i < vertexUniform.special.length; i++) {\n          let special = vertexUniform.special[i];\n          if (special.type == \"array\" && special.value) {\n            device.queue.writeBuffer(\n              specialBuffersVertex[bufCounterVert++],\n              0,\n              special.value.buffer\n            );\n          }\n        }\n        pass.setBindGroup(0, bindGroupFragment);\n        pass.setBindGroup(1, bindGroupVertex);\n        pass.setIndexBuffer(\n          this.getOrCreateBuffer(dispatch.indexBuffer, GPUBufferUsage.INDEX),\n          \"uint32\"\n        );\n        pass.drawIndexed(dispatch.indexBuffer.len(), dispatch.instanceCount);\n        pass.end();\n      });\n    }\n    dispatchDrawCount(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      const { device } = this.getGPU();\n      if (!dispatch.vertexShader || !dispatch.fragmentShader) {\n        throw new Error(\"Dispatch is missing vertex or fragment shader\");\n      }\n      this.startDispatch();\n      let fragment = dispatch.fragmentShader;\n      let vertex = dispatch.vertexShader;\n      `${dispatch.fragmentShader.uniqueSourceKey}|${dispatch.vertexShader.uniqueSourceKey}|${options.depthTest}`;\n      const fragmentUniform = generateUniforms(\n        dispatch.fragmentUniforms,\n        dispatch.fragmentShader\n      );\n      const vertexUniform = generateUniforms(\n        dispatch.vertexUniforms,\n        dispatch.vertexShader\n      );\n      let output = this.buildDrawPipeline(\n        {\n          fragment,\n          vertex,\n        },\n        fragmentUniform,\n        vertexUniform,\n        options,\n        true\n      );\n      this.beforeScreenDraw();\n      this.enqueueCommand((encoder) => {\n        if (output)\n          for (let command of output.commands) {\n            command(encoder);\n          }\n        if (!this.depthTexture) {\n          throw new Error(\"Depth texture not created\");\n        }\n        let passDescriptor = {\n          colorAttachments: [\n            {\n              view: this.getTexture().createView(),\n              storeOp: \"store\",\n              loadOp: \"load\",\n            },\n          ],\n          depthStencilAttachment: {\n            view: this.depthTexture.createView(),\n            depthClearValue: 1,\n            depthLoadOp: \"load\",\n            depthStoreOp: \"store\",\n          },\n        };\n        const pass = encoder.beginRenderPass(passDescriptor);\n        let baseUniformValues = this.baseUniformValues;\n        this.baseUniformBufferSize;\n        let myTex = this.getTexture();\n        baseUniformValues.set([myTex.width, myTex.height], 0);\n        let drawData;\n        {\n          if (!output) return;\n          drawData = output;\n        }\n        let {\n          pipeline,\n          bindGroupFragment,\n          bindGroupVertex,\n          baseUniformBuffer,\n          vertexUniformBuffer,\n          fragmentUniformBuffer,\n          specialBuffersFragment,\n          specialBuffersVertex,\n        } = drawData;\n        pass.setPipeline(pipeline);\n        device.queue.writeBuffer(baseUniformBuffer, 0, baseUniformValues);\n        device.queue.writeBuffer(\n          fragmentUniformBuffer,\n          0,\n          fragmentUniform.data\n        );\n        let bufCounterFrag = 0;\n        for (let i = 0; i < fragmentUniform.special.length; i++) {\n          let special = fragmentUniform.special[i];\n          if (special.type == \"array\" && special.value) {\n            device.queue.writeBuffer(\n              specialBuffersFragment[bufCounterFrag++],\n              0,\n              special.value.buffer\n            );\n          }\n        }\n        device.queue.writeBuffer(vertexUniformBuffer, 0, vertexUniform.data);\n        let bufCounterVert = 0;\n        for (let i = 0; i < vertexUniform.special.length; i++) {\n          let special = vertexUniform.special[i];\n          if (special.type == \"array\" && special.value) {\n            device.queue.writeBuffer(\n              specialBuffersVertex[bufCounterVert++],\n              0,\n              special.value.buffer\n            );\n          }\n        }\n        pass.setBindGroup(0, bindGroupFragment);\n        pass.setBindGroup(1, bindGroupVertex);\n        pass.draw(dispatch.drawCount * 3, 1, 0, 0);\n        pass.end();\n      });\n    }\n    drawCalls = [];\n    flush() {\n      this.trace(\"flush\", {});\n      super.flush();\n      const { device } = this.getGPU();\n      let needsDraw = true;\n      if (this.drawCalls.length == 0 && this.commandQueue.length == 0)\n        needsDraw = false;\n      if (needsDraw) {\n        if (this.drawCalls.length > 0) {\n          device.queue.submit(this.drawCalls);\n          this.drawCalls = [];\n        }\n        if (this.commandQueue.length > 0) {\n          let cleanups = [];\n          this.startDispatch();\n          let encoder = device.createCommandEncoder();\n          for (let i = 0; i < this.commandQueue.length; i++) {\n            let o = this.commandQueue[i](encoder);\n            if (o) {\n              cleanups.push(o);\n            }\n          }\n          device.queue.submit([encoder.finish()]);\n          for (let i = this.cleanupCommands.length - 1; i >= 0; i--) {\n            if (this.cleanupCommands[i].$counter > 0) {\n              this.cleanupCommands[i].$counter--;\n            } else {\n              this.cleanupCommands[i]();\n              this.cleanupCommands.splice(i, 1);\n            }\n          }\n          for (let i = 0; i < cleanups.length; i++) {\n            cleanups[i]();\n          }\n          this.endDispatch();\n          this.commandQueue = [];\n        }\n        this.copyToCanvas();\n      }\n      return device.queue.onSubmittedWorkDone();\n    }\n    drawImageRender(texture, toTexture) {\n      const { device } = this.getGPU();\n      if (!this.ready) {\n        return;\n      }\n      if (this.drawImageCache) {\n        this.drawImageCache(texture, toTexture);\n        return;\n      }\n      const bindGroupLayout = device.createBindGroupLayout({\n        entries: [\n          {\n            binding: 0,\n            visibility: GPUShaderStage.FRAGMENT,\n            texture: { sampleType: \"unfilterable-float\" },\n          },\n          {\n            binding: 1,\n            visibility: GPUShaderStage.FRAGMENT,\n            sampler: { type: \"non-filtering\" },\n          },\n        ],\n      });\n      let vertexShader = this.createShader(\n        {\n          webgl: ``,\n          webgpu: `\n\t\tstruct VertexOutput {\n\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t@location(1) TexCoord : vec2<f32>,\n\t\t\t@location(2) Color : vec4<f32>,\n\t\t};\n\t\n\t\t@vertex\n\t\tfn main(\n\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t) -> VertexOutput {\n\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\tvar output : VertexOutput;\n\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\n\t\t\treturn output;\n\t\t}\n\t\t`,\n          software: () => {},\n        },\n        \"vertex\"\n      );\n      let fragmentShader = this.createShader(\n        {\n          webgl: ``,\n          webgpu: `\n\t\t\tstruct VertexOutput {\n\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t@location(1) TexCoord : vec2<f32>,\n\t\t\t\t@location(2) Color : vec4<f32>,\n\t\t\t};\n\t\t\t@group(0) @binding(1) var _sampler: sampler;\n\t\t\t@group(0) @binding(0) var _texture: texture_2d<f32>;\n\n\t\t@fragment\n\t\tfn main(\n\t\t\t_in: VertexOutput\n\t\t) -> @location(0) vec4<f32> {\n\t\t\treturn textureSample(_texture, _sampler, _in.TexCoord);\n\t\t}\n\t\t`,\n          software: () => {},\n        },\n        \"fragment\"\n      );\n      const pipelineLayout = device.createPipelineLayout({\n        bindGroupLayouts: [bindGroupLayout],\n      });\n      const pipelineDescriptor = {\n        vertex: {\n          module: vertexShader.payload,\n          entryPoint: \"main\",\n          buffers: vertexLayout,\n        },\n        fragment: {\n          module: fragmentShader.payload,\n          entryPoint: \"main\",\n          targets: [\n            {\n              format: \"rgba8unorm\",\n              blend: {\n                alpha: {\n                  srcFactor: \"one\",\n                  dstFactor: \"one-minus-src-alpha\",\n                  operation: \"add\",\n                },\n                color: {\n                  srcFactor: \"one\",\n                  dstFactor: \"one-minus-src-alpha\",\n                  operation: \"add\",\n                },\n              },\n            },\n          ],\n        },\n        primitive: {\n          topology: \"triangle-list\",\n          cullMode: \"back\",\n        },\n        layout: pipelineLayout,\n      };\n      const pipeline = device.createRenderPipeline(pipelineDescriptor);\n      let geo = {\n        vertices: [\n          [0, 0, 0],\n          [0, 1, 0],\n          [1, 1, 0],\n          [1, 0, 0],\n        ],\n        uvs: [\n          [0, 0],\n          [0, 1],\n          [1, 1],\n          [1, 0],\n        ],\n        triangles: [0, 1, 2],\n        colors: [],\n        normals: [],\n        tangents: [],\n        bitangents: [],\n        getTriangles: () => {\n          return geo.triangles;\n        },\n        getVertices: () => {\n          return geo.vertices;\n        },\n        getUVs: () => {\n          return geo.uvs;\n        },\n        getNormals: () => {\n          return [];\n        },\n        getTangents: () => {\n          return [];\n        },\n        getBitangents: () => {\n          return [];\n        },\n        getColors: () => {\n          return [];\n        },\n        symbol: Symbol(),\n      };\n      let meshData = this.getOrCreateMeshData(geo);\n      this.drawImageCache = (texture2, toTexture2) => {\n        device.pushErrorScope(\"internal\");\n        device.pushErrorScope(\"validation\");\n        const commandEncoder = device.createCommandEncoder();\n        const passEncoder = commandEncoder.beginRenderPass({\n          colorAttachments: [\n            {\n              view: toTexture2.createView(),\n              storeOp: \"store\",\n              loadOp: \"load\",\n            },\n          ],\n        });\n        const sampler = device.createSampler({});\n        passEncoder.setPipeline(pipeline);\n        const bindGroup = device.createBindGroup({\n          layout: bindGroupLayout,\n          entries: [\n            {\n              binding: 0,\n              resource: texture2.createView(),\n            },\n            {\n              binding: 1,\n              resource: sampler,\n            },\n          ],\n        });\n        passEncoder.setBindGroup(0, bindGroup);\n        passEncoder.setVertexBuffer(0, meshData.vertexBuffer);\n        passEncoder.setIndexBuffer(meshData.indexBuffer, \"uint32\");\n        passEncoder.drawIndexed(meshData.indexCount);\n        passEncoder.end();\n        device.queue.submit([commandEncoder.finish()]);\n        device.popErrorScope().then((error) => {\n          if (error) {\n            console.log(\"Error\", error);\n            window.bubbleError(error.message);\n            throw new Error(\"Failed to create shader\");\n          }\n        });\n        device.popErrorScope().then((error) => {\n          if (error) {\n            console.log(\"Error\", error);\n            window.bubbleError(error.message);\n            throw new Error(\"Failed to create shader\");\n          }\n        });\n      };\n      this.drawImageCache(texture, toTexture);\n    }\n    async copyToOtherCanvas(canvas) {\n      const { device } = this.getGPU();\n      let encoder = device.createCommandEncoder();\n      let ctx = canvas.getContext(\"webgpu\");\n      if (!ctx) throw new Error(\"Could not get webgpu context\");\n      ctx.configure({\n        device,\n        format: \"rgba8unorm\",\n        alphaMode: \"premultiplied\",\n        usage:\n          GPUTextureUsage.RENDER_ATTACHMENT |\n          GPUTextureUsage.TEXTURE_BINDING |\n          GPUTextureUsage.COPY_SRC |\n          GPUTextureUsage.COPY_DST,\n      });\n      encoder.copyTextureToTexture(\n        { texture: this.getTexture() },\n        { texture: ctx.getCurrentTexture() },\n        { width: this.getTexture().width, height: this.getTexture().height }\n      );\n      device.queue.submit([encoder.finish()]);\n      await device.queue.onSubmittedWorkDone();\n    }\n    copyToCanvas() {\n      const { device } = this.getGPU();\n      if (\n        this.headless &&\n        this.texture &&\n        (this.textureFormat.endsWith(\"4\") || this.textureFormat == \"uint8\")\n      ) {\n        if (!this.ctx) {\n          this.ctx = this.canvas.getContext(\"webgpu\");\n          if (!this.ctx) throw new Error(\"Could not get webgpu context\");\n          this.ctx.configure({\n            device,\n            format: \"rgba8unorm\",\n            alphaMode: \"premultiplied\",\n            usage:\n              GPUTextureUsage.RENDER_ATTACHMENT |\n              GPUTextureUsage.TEXTURE_BINDING |\n              GPUTextureUsage.COPY_SRC |\n              GPUTextureUsage.COPY_DST,\n          });\n        }\n        this.startDispatch();\n        let encoder = device.createCommandEncoder();\n        if (this.texture.format == \"rgba8unorm\") {\n          encoder.copyTextureToTexture(\n            { texture: this.texture },\n            { texture: this.ctx.getCurrentTexture() },\n            { width: this.texture.width, height: this.texture.height }\n          );\n        } else {\n          this.drawImageRender(this.texture, this.ctx.getCurrentTexture());\n        }\n        device.queue.submit([encoder.finish()]);\n        this.endDispatch();\n      }\n    }\n    dispatch(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      super.dispatch(dispatch, options);\n      if (dispatch.type == \"draw\") {\n        this.activateDrawContext();\n        this.triggerEvent(\"draw\", dispatch);\n        if (dispatch.drawType == \"indexed\") {\n          this.dispatchDrawIndexed(dispatch, options);\n        } else if (dispatch.drawType == \"count\") {\n          this.dispatchDrawCount(dispatch, options);\n        } else {\n          this.dispatchDraw(dispatch, options);\n        }\n      }\n    }\n    dispose() {\n      this.canvas?.remove();\n      this.texture?.destroy();\n      this.storageTexture?.destroy();\n    }\n    destroyBuffer(buf) {\n      this.enqueueCommand((encoder) => {\n        if (buf.platformPayload) {\n          buf.platformPayload.destroy();\n        }\n      });\n    }\n    waitForDraw() {\n      const { device } = this.getGPU();\n      return device.queue.onSubmittedWorkDone();\n    }\n    bufferCounter = 0;\n    getOrCreateBuffer(buf, extraFlags) {\n      let useOldBuffer = null;\n      if (buf.platformPayload) {\n        let gpuBuf = buf.platformPayload;\n        if (extraFlags !== null) {\n          if (gpuBuf.usage & extraFlags) {\n            return gpuBuf;\n          }\n          extraFlags |= gpuBuf.usage;\n          useOldBuffer = gpuBuf;\n        } else {\n          return gpuBuf;\n        }\n      }\n      const { device } = this.getGPU();\n      let flags = this.genericBufferFlags();\n      if (extraFlags) {\n        flags |= extraFlags;\n      }\n      let bufferSize = buf.len() * buf.elementBytes;\n      if (!buf.structured) {\n        bufferSize *= buf.vectorSize;\n      }\n      this.startDispatch();\n      let buffer = device.createBuffer({\n        size: bufferSize,\n        usage: flags,\n      });\n      buf.$_bufferIndex = this.bufferCounter;\n      this.bufferCounter++;\n      buf.symbol = Symbol();\n      if (useOldBuffer) {\n        let encoder = device.createCommandEncoder();\n        encoder.copyBufferToBuffer(useOldBuffer, 0, buffer, 0, bufferSize);\n        device.queue.submit([encoder.finish()]);\n      } else if (buf.cpuWriteDirty) {\n        if (buf.structured) {\n          if (buf.typeName == \"atomic<uint>\" || buf.typeName == \"atomic<int>\") {\n            let zero;\n            if (buf.typeName == \"atomic<uint>\") {\n              zero = new Uint32Array(buf.elementCount);\n            } else {\n              zero = new Int32Array(buf.elementCount);\n            }\n            if (buf.structArray)\n              for (let i = 0; i < buf.structArray.length; i++) {\n                let struct = buf.structArray[i];\n                if (struct) {\n                  zero[i] = struct;\n                }\n              }\n            device.queue.writeBuffer(buffer, 0, zero);\n          } else {\n            device.queue.writeBuffer(buffer, 0, buf.arrayBuffer);\n          }\n        } else {\n          device.queue.writeBuffer(\n            buffer,\n            0,\n            buf.uintArray ?? buf.floatArray ?? buf.intArray ?? new Uint8Array(0)\n          );\n        }\n        buf.cpuWriteDirty = false;\n      }\n      buf.platformPayload = buffer;\n      buf.adapter = this;\n      this.endDispatch();\n      return buffer;\n    }\n  }\n  const TYPE_SIZES = {\n    atomic: [8, 8],\n    texture2d: [8, 8],\n    rwtexture2d: [8, 8],\n    bool: [1, 15],\n    float: [4, 12],\n    float2: [8, 8],\n    float3: [12, 4],\n    float4: [16, 0],\n    float2x2: [16, 0],\n    float3x3: [12 + 12 + 12, 4 + 4 + 4],\n    float4x4: [16 + 16 + 16 + 16, 4 + 4 + 4 + 4],\n    uint: [4, 12],\n    uint2: [8, 8],\n    uint3: [12, 4],\n    uint4: [16, 0],\n    int: [4, 12],\n    int2: [8, 8],\n    int3: [12, 4],\n    int4: [16, 0],\n  };\n  function getValueSize(val) {\n    let totalSize = 0;\n    if (val.type == \"struct\") {\n      for (let member of val.fields) {\n        let fieldSize = getValueSize(member[1]);\n        totalSize += fieldSize;\n      }\n    } else if (val.type == \"primitive\") {\n      let n = val.name;\n      if (n == \"atomic\") {\n        totalSize += 4;\n      } else if (n == \"texture2d\" || n == \"rwtexture2d\") {\n        totalSize += 8;\n      } else {\n        let s = TYPE_SIZES[n];\n        if (s[0] == 0) {\n          throw new Error(\n            `Cannot calculate size of struct with unknown size type ${n}`\n          );\n        }\n        totalSize += s[0] + s[1];\n      }\n    } else if (val.type == \"array\") {\n      let elementSize = getValueSize(val.element);\n      if (typeof val.staticSize !== \"undefined\") {\n        totalSize += val.staticSize * elementSize;\n      } else {\n        throw new Error(\n          `Cannot calculate size of struct with unknown size type ${val.element}`\n        );\n      }\n    }\n    return totalSize;\n  }\n  function generateArrayBuffer(rootVt, rawData, data, offset) {\n    if (rootVt.type != \"array\") {\n      throw new Error(\n        `Cannot generate array buffer for non-array type ${rootVt.type}`\n      );\n    }\n    let totalSize = 0;\n    let vsize = getValueSize(rootVt.element);\n    totalSize += vsize * rawData.value.len();\n    if (totalSize == 0) {\n      totalSize = 4 * 4;\n    }\n    if (!data) data = new ArrayBuffer(totalSize);\n    let floatView = new Float32Array(data);\n    let uintView = new Uint32Array(data);\n    let intView = new Int32Array(data);\n    if (!offset) offset = 0;\n    let queue = [];\n    let rootObj = rawData.value;\n    for (let i = 0; i < rawData.value.len(); i++) {\n      queue.unshift([[`[${i}]`, rootVt.element], rootObj, i]);\n    }\n    while (queue.length > 0) {\n      let [uniform, obj, arrayIndex] = queue.pop();\n      let vt = uniform[1];\n      let name = uniform[0];\n      if (vt.type == \"primitive\") {\n        let n = vt.name;\n        let s = TYPE_SIZES[n];\n        if (s[0] == 0) {\n          throw new Error(\n            `Cannot calculate size of struct with unknown size type ${n}`\n          );\n        }\n        let val;\n        if (arrayIndex !== null) {\n          val = obj[arrayIndex];\n        } else {\n          val = obj[name];\n        }\n        if (typeof val === \"undefined\") {\n          throw new Error(`Uniform ${name} is not defined`);\n        }\n        if (val instanceof UniformValue) {\n          val = val.value;\n        }\n        let view = floatView;\n        if (n.startsWith(\"u\")) {\n          view = uintView;\n        } else if (n.startsWith(\"i\")) {\n          view = intView;\n        }\n        if (n == \"float\" || n == \"uint\" || n == \"int\") {\n          if (typeof val == \"boolean\") {\n            val = val ? 1 : 0;\n          }\n          view[offset++] = val;\n          offset += 3;\n        } else if (n == \"float2\" || n == \"uint2\" || n == \"int2\") {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          offset += 2;\n        } else if (n == \"float3\" || n == \"uint3\" || n == \"int3\") {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          offset += 1;\n        } else if (n == \"float4\" || n == \"uint4\" || n == \"int4\") {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          view[offset++] = val[3];\n        } else if (n == \"float2x2\") {\n          {\n            view[offset++] = val[0];\n            view[offset++] = val[1];\n            view[offset++] = val[2];\n            view[offset++] = val[3];\n          }\n        } else if (n == \"float3x3\") {\n          {\n            view[offset++] = val[0];\n            view[offset++] = val[1];\n            view[offset++] = val[2];\n            offset++;\n            view[offset++] = val[3];\n            view[offset++] = val[4];\n            view[offset++] = val[5];\n            offset++;\n            view[offset++] = val[6];\n            view[offset++] = val[7];\n            view[offset++] = val[8];\n            offset++;\n          }\n        } else if (n == \"float4x4\") {\n          {\n            view[offset++] = val[0];\n            view[offset++] = val[1];\n            view[offset++] = val[2];\n            view[offset++] = val[3];\n            view[offset++] = val[4];\n            view[offset++] = val[5];\n            view[offset++] = val[6];\n            view[offset++] = val[7];\n            view[offset++] = val[8];\n            view[offset++] = val[9];\n            view[offset++] = val[10];\n            view[offset++] = val[11];\n            view[offset++] = val[12];\n            view[offset++] = val[13];\n            view[offset++] = val[14];\n            view[offset++] = val[15];\n          }\n        } else if (n == \"bool\") {\n          intView[offset++] = val ? 1 : 0;\n          offset += 3;\n        } else if (n == \"rwtexture2d\" || n == \"texture2d\") {\n          floatView[offset++] = val.size[0];\n          floatView[offset++] = val.size[1];\n          offset += 2;\n        } else if (n == \"atomic\") {\n          view[offset++] = val;\n          offset += 3;\n        } else {\n          throw new Error(\"Invalid param type \" + n);\n        }\n      } else if (vt.type == \"array\") {\n        let val = obj[name];\n        if (val instanceof UniformValue) {\n          val = val.value;\n        }\n        if (obj == rootObj) {\n          if (typeof val === \"object\" && Array.isArray(val)) {\n            intView[offset++] = val.length;\n            offset += 3;\n          }\n        } else {\n          for (let i = val.length - 1; i >= 0; i--) {\n            queue.push([[\"\", vt.element], val, i]);\n          }\n        }\n      } else if (vt.type == \"buffer\") {\n        let val = obj[name];\n        if (val instanceof UniformValue) {\n          val = val.value;\n        }\n        if (obj == rootObj) {\n          if (typeof val === \"object\") {\n            intView[offset++] = val.elementCount;\n            offset += 3;\n          }\n        }\n      } else if (vt.type == \"struct\") {\n        let val;\n        if (arrayIndex !== null) {\n          val = obj[arrayIndex];\n        } else {\n          val = obj[name];\n        }\n        if (typeof val === \"object\") {\n          for (let i = vt.fields.length - 1; i >= 0; i--) {\n            let member = vt.fields[i];\n            if (val instanceof UniformValue) {\n              queue.push([member, val.value, null]);\n            } else {\n              queue.push([member, val, null]);\n            }\n          }\n        }\n      }\n    }\n    return {\n      size: totalSize,\n      buffer: data,\n    };\n  }\n  function generateUniforms(fragmentUniforms, fragmentShader) {\n    if (fragmentShader.parent == null) {\n      return {\n        size: 0,\n        special: [],\n        data: new ArrayBuffer(0),\n      };\n    }\n    let orderedUniforms = [\n      ...fragmentShader.parent.params.webgpu.locals.map((l) => {\n        return [\"_ext_uniform_local_\" + l[0], l[1]];\n      }),\n      ...fragmentShader.parent.params.webgpu.globals.map((g) => {\n        return [\"_ext_uniform_global_\" + g[0], g[1].structure];\n      }),\n    ];\n    let special = [];\n    let specialCounter = 2;\n    let totalSize = 0;\n    let lastFieldPadding = 0;\n    for (let uniform of orderedUniforms) {\n      let vt = uniform[1];\n      if (\n        vt.type == \"primitive\" &&\n        (vt.name == \"texture2d\" || vt.name == \"rwtexture2d\")\n      ) {\n        let texPayload = fragmentUniforms.uniforms.get(uniform[0]);\n        special.push({\n          index: specialCounter,\n          type: \"sampler2D\",\n          valueType: vt,\n          value: {\n            texture: texPayload.value,\n          },\n          access: vt.access,\n        });\n        specialCounter += 2;\n        lastFieldPadding = 8;\n        totalSize += 8 + lastFieldPadding;\n      } else if (vt.type == \"array\") {\n        if (vt.element.type == \"primitive\" && vt.element.name == \"texture2d\") {\n          let texPayload = fragmentUniforms.uniforms.get(uniform[0]);\n          special.push({\n            index: specialCounter,\n            type: \"sampler2DArray\",\n            valueType: vt,\n            value: {\n              textures: texPayload.value,\n            },\n            access: vt.element.access,\n          });\n          specialCounter += 2;\n          lastFieldPadding = 8;\n          totalSize += 8 + lastFieldPadding;\n        } else {\n          special.push({\n            index: specialCounter,\n            type: \"array\",\n            valueType: vt,\n            value: generateArrayBuffer(\n              vt,\n              fragmentUniforms.uniforms.get(uniform[0])\n            ),\n          });\n          specialCounter++;\n          lastFieldPadding = 12;\n          totalSize += 4 + lastFieldPadding;\n        }\n      } else if (vt.type == \"buffer\") {\n        special.push({\n          type: \"buffer\",\n          valueType: vt,\n          access: vt.access,\n          index: specialCounter,\n          value: fragmentUniforms.uniforms.get(uniform[0])?.value,\n        });\n        specialCounter++;\n        lastFieldPadding = 12;\n        totalSize += 4 + lastFieldPadding;\n      } else if (vt.type == \"primitive\" && vt.name == \"atomic\") {\n        special.push({\n          type: \"atomic\",\n          valueType: vt,\n          index: specialCounter,\n          value: fragmentUniforms.uniforms.get(uniform[0])?.value,\n        });\n        specialCounter++;\n        lastFieldPadding = 12;\n        totalSize += 4 + lastFieldPadding;\n      } else {\n        let vsize = getValueSize(vt);\n        let extra = vsize % 16;\n        if (vt.type == \"primitive\") {\n          lastFieldPadding = 16 - extra;\n        } else {\n          lastFieldPadding = 0;\n        }\n        totalSize += vsize + lastFieldPadding;\n      }\n    }\n    if (totalSize == 0) {\n      totalSize = 4 * 4;\n    }\n    let queue = [];\n    let rootObj = {};\n    for (let k of fragmentUniforms.uniforms.keys()) {\n      rootObj[k] = fragmentUniforms.uniforms.get(k);\n    }\n    for (let uniform of orderedUniforms) {\n      queue.unshift([uniform, rootObj, null]);\n    }\n    let data = new ArrayBuffer(totalSize);\n    let offset = 0;\n    writeBufferStructure(queue, rootObj, data, offset);\n    return {\n      size: totalSize,\n      special,\n      data,\n    };\n  }\n  function writeBufferStructure(initialQueue, rootObj, data, offset) {\n    let floatView = new Float32Array(data);\n    let uintView = new Uint32Array(data);\n    let intView = new Int32Array(data);\n    let queue = [...initialQueue];\n    while (queue.length > 0) {\n      let [uniform, obj, arrayIndex] = queue.pop();\n      let vt = uniform[1];\n      let name = uniform[0];\n      if (vt.type == \"primitive\") {\n        let n = vt.name;\n        let s = TYPE_SIZES[n];\n        if (s[0] == 0) {\n          throw new Error(\n            `Cannot calculate size of struct with unknown size type ${n}`\n          );\n        }\n        let val;\n        if (arrayIndex !== null) {\n          val = obj[arrayIndex];\n        } else {\n          val = obj[name];\n        }\n        if (typeof val === \"undefined\") {\n          throw new Error(`Uniform ${name} is not defined`);\n        }\n        if (val instanceof UniformValue) {\n          val = val.value;\n        }\n        let view = floatView;\n        if (n.startsWith(\"u\")) {\n          view = uintView;\n        } else if (n.startsWith(\"i\")) {\n          view = intView;\n        }\n        if (n == \"float\" || n == \"uint\" || n == \"int\") {\n          if (typeof val == \"boolean\") {\n            val = val ? 1 : 0;\n          }\n          view[offset++] = val;\n          offset += 3;\n        } else if (n == \"float2\" || n == \"uint2\" || n == \"int2\") {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          offset += 2;\n        } else if (n == \"float3\" || n == \"uint3\" || n == \"int3\") {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          offset += 1;\n        } else if (n == \"float4\" || n == \"uint4\" || n == \"int4\") {\n          view[offset++] = val[0];\n          view[offset++] = val[1];\n          view[offset++] = val[2];\n          view[offset++] = val[3];\n        } else if (n == \"float2x2\") {\n          {\n            view[offset++] = val[0];\n            view[offset++] = val[1];\n            view[offset++] = val[2];\n            view[offset++] = val[3];\n          }\n        } else if (n == \"float3x3\") {\n          {\n            view[offset++] = val[0];\n            view[offset++] = val[1];\n            view[offset++] = val[2];\n            offset++;\n            view[offset++] = val[3];\n            view[offset++] = val[4];\n            view[offset++] = val[5];\n            offset++;\n            view[offset++] = val[6];\n            view[offset++] = val[7];\n            view[offset++] = val[8];\n            offset++;\n          }\n        } else if (n == \"float4x4\") {\n          {\n            view[offset++] = val[0];\n            view[offset++] = val[1];\n            view[offset++] = val[2];\n            view[offset++] = val[3];\n            view[offset++] = val[4];\n            view[offset++] = val[5];\n            view[offset++] = val[6];\n            view[offset++] = val[7];\n            view[offset++] = val[8];\n            view[offset++] = val[9];\n            view[offset++] = val[10];\n            view[offset++] = val[11];\n            view[offset++] = val[12];\n            view[offset++] = val[13];\n            view[offset++] = val[14];\n            view[offset++] = val[15];\n          }\n        } else if (n == \"bool\") {\n          intView[offset++] = val ? 1 : 0;\n          offset += 3;\n        } else if (n == \"rwtexture2d\" || n == \"texture2d\") {\n          floatView[offset++] = val.size[0];\n          floatView[offset++] = val.size[1];\n          offset += 2;\n        } else if (n == \"atomic\") {\n          if (vt.element == \"uint\") {\n            uintView[offset++] = val;\n          } else {\n            intView[offset++] = val;\n          }\n          offset += 3;\n        } else {\n          throw new Error(\"Invalid param type \" + n);\n        }\n      } else if (vt.type == \"array\") {\n        let val = obj[name];\n        if (val instanceof UniformValue) {\n          val = val.value;\n        }\n        if (obj == rootObj) {\n          if (typeof val === \"object\" && Array.isArray(val)) {\n            intView[offset++] = val.length;\n            offset += 3;\n          }\n        } else {\n          for (let i = val.length - 1; i >= 0; i--) {\n            queue.push([[\"\", vt.element], val, i]);\n          }\n        }\n      } else if (vt.type == \"buffer\") {\n        let val = obj[name];\n        if (val instanceof UniformValue) {\n          val = val.value;\n        }\n        if (obj == rootObj) {\n          if (typeof val === \"object\") {\n            intView[offset++] = val.elementCount;\n            offset += 3;\n          }\n        }\n      } else if (vt.type == \"struct\") {\n        let val;\n        if (arrayIndex !== null) {\n          val = obj[arrayIndex];\n        } else {\n          val = obj[name];\n        }\n        if (typeof val === \"object\") {\n          for (let i = vt.fields.length - 1; i >= 0; i--) {\n            let member = vt.fields[i];\n            if (val instanceof UniformValue) {\n              queue.push([member, val.value, null]);\n            } else {\n              queue.push([member, val, null]);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  function makeFullscreenQuadGeometry() {\n    let geo = {\n      vertices: [\n        [0, 0, 0],\n        [0, 1, 0],\n        [1, 1, 0],\n        [1, 0, 0],\n      ],\n      uvs: [\n        [0, 0],\n        [0, 1],\n        [1, 1],\n        [1, 0],\n      ],\n      triangles: [0, 1, 2],\n      colors: [],\n      normals: [],\n      tangents: [],\n      bitangents: [],\n      getTriangles: () => {\n        return geo.triangles;\n      },\n      getVertices: () => {\n        return geo.vertices;\n      },\n      getUVs: () => {\n        return geo.uvs;\n      },\n      getNormals: () => {\n        return [];\n      },\n      getTangents: () => {\n        return [];\n      },\n      getBitangents: () => {\n        return [];\n      },\n      getColors: () => {\n        return [];\n      },\n      symbol: Symbol(),\n    };\n    return geo;\n  }\n  const fullscreenGeo = makeFullscreenQuadGeometry();\n\n  let shadeupTextureCounter = 0;\n  class ShadeupTexture3d {\n    size = [0, 0, 0];\n    width = 0;\n    height = 0;\n    depth = 0;\n    adapter = null;\n    innerType = \"float4\";\n    isBound = false;\n    boundUnit = -1;\n    dirty = true;\n    payload;\n    constructor() {}\n    /** @shadeup=glsl(!texture($self$, $0$)) */\n    __index(index) {\n      return [0, 0, 0, 0];\n    }\n    __index_assign(index, value) {}\n  }\n  class ShadeupTexture2d {\n    symbol;\n    image = null;\n    loading = true;\n    size = [0, 0];\n    width = 0;\n    height = 0;\n    paint = null;\n    adapter = null;\n    engine = null;\n    innerType = \"float4\";\n    isBound = false;\n    boundUnit = -1;\n    dirty = true;\n    cpuReadDirty = true;\n    cpuWriteDirty = false;\n    cpuData = null;\n    dataIndexStride = 4;\n    version = 0;\n    payload;\n    data = null;\n    constructor() {\n      this.symbol = `stx${shadeupTextureCounter++}`;\n    }\n    destroy() {\n      this.engine?.textureDestroyQueue.push(this);\n    }\n    async download() {\n      if (!this.adapter) return;\n      if (this.adapter instanceof WebGPUAdapter) {\n        if (this.adapter.pendingWrites > 0) {\n          this.engine?.adapter.flush();\n        }\n        if (this.adapter.storageDirty) {\n          this.cpuReadDirty = true;\n        }\n      }\n      if (this.cpuReadDirty) {\n        if (this.dirty) {\n          this.flush();\n        }\n        this.cpuReadDirty = false;\n        this.cpuData = await this.adapter.downloadImage();\n      }\n    }\n    getData() {\n      return this.cpuData;\n    }\n    downloadAsync() {\n      return this.download();\n    }\n    /** @shadeup=glsl(!texture($self$, $0$)) */\n    __index(index) {\n      if (!this.cpuData) return [0, 0, 0, 0];\n      return this.getFast(index);\n    }\n    getFast;\n    setFast;\n    init() {\n      this.dataIndexStride =\n        parseInt(this.innerType[this.innerType.length - 1]) || 1;\n      if (this.innerType == \"uint8\") {\n        this.dataIndexStride = 4;\n      }\n      let width = this.size[0];\n      if (this.innerType == \"uint8\") {\n        this.getFast = (index) => {\n          let i =\n            ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          return [\n            this.cpuData[i] / 255,\n            this.cpuData[i + 1] / 255,\n            this.cpuData[i + 2] / 255,\n            this.cpuData[i + 3] / 255,\n          ];\n        };\n      } else {\n        if (this.dataIndexStride == 4) {\n          this.getFast = (index) => {\n            let i =\n              ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            return [\n              this.cpuData[i],\n              this.cpuData[i + 1],\n              this.cpuData[i + 2],\n              this.cpuData[i + 3],\n            ];\n          };\n        } else if (this.dataIndexStride == 3) {\n          this.getFast = (index) => {\n            let i =\n              ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            return [this.cpuData[i], this.cpuData[i + 1], this.cpuData[i + 2]];\n          };\n        } else if (this.dataIndexStride == 2) {\n          this.getFast = (index) => {\n            let i =\n              ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            return [this.cpuData[i], this.cpuData[i + 1]];\n          };\n        } else if (this.dataIndexStride == 1) {\n          this.getFast = (index) => {\n            let i =\n              ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            return this.cpuData[i];\n          };\n        }\n      }\n      if (this.dataIndexStride == 1) {\n        this.setFast = (index, val) => {\n          let i =\n            ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n          this.cpuWriteDirty = true;\n          this.cpuData[i] = val;\n        };\n      } else {\n        if (this.innerType == \"uint8\") {\n          this.setFast = (index, value) => {\n            let i =\n              ((index[1] | 0) * width + (index[0] | 0)) * this.dataIndexStride;\n            this.cpuWriteDirty = true;\n            this.cpuData[i] = value[2] * 255;\n            this.cpuData[i + 1] = value[1] * 255;\n            this.cpuData[i + 2] = value[0] * 255;\n            this.cpuData[i + 3] = value[3] * 255;\n          };\n        } else {\n          if (this.dataIndexStride == 4) {\n            this.setFast = (index, value) => {\n              let i =\n                ((index[1] | 0) * width + (index[0] | 0)) *\n                this.dataIndexStride;\n              this.cpuWriteDirty = true;\n              this.cpuData[i] = value[0];\n              this.cpuData[i + 1] = value[1];\n              this.cpuData[i + 2] = value[2];\n              this.cpuData[i + 3] = value[3];\n            };\n          } else if (this.dataIndexStride == 3) {\n            this.setFast = (index, value) => {\n              let i =\n                ((index[1] | 0) * width + (index[0] | 0)) *\n                this.dataIndexStride;\n              this.cpuWriteDirty = true;\n              this.cpuData[i] = value[0];\n              this.cpuData[i + 1] = value[1];\n              this.cpuData[i + 2] = value[2];\n            };\n          } else if (this.dataIndexStride == 2) {\n            this.setFast = (index, value) => {\n              let i =\n                ((index[1] | 0) * width + (index[0] | 0)) *\n                this.dataIndexStride;\n              this.cpuWriteDirty = true;\n              this.cpuData[i] = value[0];\n              this.cpuData[i + 1] = value[1];\n            };\n          }\n        }\n      }\n    }\n    __index_assign(index, value) {\n      if (!this.cpuData) this.fillCpuData();\n      this.setFast(index, value);\n    }\n    fillCpuData() {\n      let arr;\n      this.dataIndexStride;\n      if (this.innerType.startsWith(\"float\")) {\n        arr = new Float32Array(this.width * this.height * this.dataIndexStride);\n      } else if (this.innerType.startsWith(\"int\")) {\n        arr = new Int32Array(this.width * this.height * this.dataIndexStride);\n      } else if (this.innerType.startsWith(\"uint\")) {\n        arr = new Uint32Array(this.width * this.height * this.dataIndexStride);\n      } else if (this.innerType == \"uint8\") {\n        arr = new Uint8Array(this.width * this.height * this.dataIndexStride);\n      } else {\n        throw new Error(\"Unknown texture type \" + this.innerType);\n      }\n      this.cpuData = arr;\n    }\n    sample(pos) {\n      return [0, 0, 0, 0];\n    }\n    cpuFlush() {\n      if (this.cpuData && this.cpuWriteDirty && this.adapter) {\n        this.adapter.uploadImage(this.cpuData);\n      }\n    }\n    upload() {\n      this.cpuFlush();\n    }\n    flush(flushStorage = true) {\n      this.cpuFlush();\n      if (flushStorage) {\n        if (this.adapter instanceof WebGPUAdapter) {\n          if (this.adapter.storageDirty) {\n            this.adapter.flushStorage();\n            this.cpuReadDirty = true;\n          }\n        }\n      }\n      if (this.dirty) {\n        this.dirty = false;\n        if (this.adapter?.contextMode == \"draw\") {\n          this.adapter?.flush();\n        } else {\n          this.paint?.flush();\n        }\n      }\n    }\n    drawAdvanced(config) {\n      if (!this.adapter) return;\n      let drawCall = new ShaderDispatch(\"draw\");\n      if (config.mesh) {\n        drawCall.drawType = \"geometry\";\n      } else if (config.indexBuffer) {\n        drawCall.drawType = \"indexed\";\n      }\n      if (config.depth) {\n        drawCall.overrideDepth = config.depth;\n      }\n      if (config.indirect) {\n        drawCall.indirectBuffer = config.indirect;\n      }\n      if (config.depthCompare) {\n        drawCall.depthCompare = config.depthCompare;\n      }\n      if (\"backfaceCulling\" in config) {\n        drawCall.backfaceCulling = config.backfaceCulling;\n      }\n      if (\"indirectOffset\" in config) {\n        drawCall.indirectOffset = config.indirectOffset;\n      }\n      drawCall.instanceCount = config.instances ?? 1;\n      drawCall.attachments = config.attachments ?? null;\n      drawCall.depthOnly = config.depthOnly ?? false;\n      let fragShader = config.fragment.get(this.adapter, \"fragment\", {\n        attachments: config.attachments\n          ? config.attachments.map((a) => a.innerType)\n          : void 0,\n      });\n      if (!fragShader) {\n        throw new Error(\"Fragment shader not found\");\n      }\n      drawCall.setFragmentShader(fragShader);\n      let vertShader = config.vertex.get(this.adapter, \"vertex\");\n      if (!vertShader) {\n        throw new Error(\"Vertex shader not found\");\n      }\n      drawCall.setVertexShader(vertShader);\n      config.fragment.bindUniforms(drawCall.fragmentUniforms);\n      config.vertex.bindUniforms(drawCall.vertexUniforms);\n      if (config.mesh) {\n        drawCall.setGeometry(config.mesh);\n      } else if (config.indexBuffer) {\n        drawCall.setIndexBuffer(config.indexBuffer);\n      }\n      this.adapter.dispatch(drawCall, {\n        depthTest: config.depthTest ?? true,\n      });\n    }\n    draw(first, second, third) {\n      this.cpuFlush();\n      this.dirty = true;\n      this.cpuReadDirty = true;\n      this.version++;\n      if (\"vertices\" in first && second && third) {\n        this._draw_geometry(first, second, third);\n      } else if (first && !second && !third) {\n        this._draw_fullscreen(first);\n      }\n    }\n    fullscreenVertexShaderInternal = null;\n    _draw_fullscreen(pixelShaderInst) {\n      if (!this.adapter) return;\n      if (!this.fullscreenVertexShaderInternal) {\n        this.fullscreenVertexShaderInternal = this.adapter.createShader(\n          {\n            webgl: `#version 300 es\n\t\t\t\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tin vec3 a_position;\n\t\t\tin vec3 a_normal;\n\t\t\tin vec3 a_tangent;\n\t\t\tin vec3 a_bitangent;\n\t\t\tin vec2 a_uv;\n\t\t\tin vec4 a_color;\n\t\n\t\t\tout vec3 _v_position;\n\t\t\tout vec3 _v_normal;\n\t\t\tout vec3 _v_tangent;\n\t\t\tout vec3 _v_bitangent;\n\t\t\tout vec2 _v_uv;\n\t\t\tout vec4 _v_color;\n\t\t\t\n\t\t\tvoid main(void) {\n\t\t\tfloat x = float((gl_VertexID & 1) << 2);\n\t\t\tfloat y = float((gl_VertexID & 2) << 1);\n\t\t\t_v_uv.x = x * 0.5;\n\t\t\t_v_uv.y = 1.f - (y * 0.5);\n\t\t\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\t\t\t}`,\n            webgpu: `\n\t\t\t\tstruct VertexOutput {\n\t\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t\t@location(1) Tangent : vec3<f32>,\n\t\t\t\t\t@location(2) Bitangent : vec3<f32>,\n\t\t\t\t\t@location(3) TexCoord : vec2<f32>,\n\t\t\t\t\t@location(4) Color : vec4<f32>,\n\t\t\t\t\t@location(5) @interpolate(flat) instanceIndex : u32,\n\t\t\t\t\t@location(6) worldPosition: vec3<f32>,\n\t\t\t\t};\n\t\t\t\n\t\t\t\t@vertex\n\t\t\t\tfn main(\n\t\t\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t\t\t) -> VertexOutput {\n\t\t\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\t\t\tvar output : VertexOutput;\n\t\t\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\t\t\toutput.Tangent = vec3<f32>(0.0, 1.0, 0.0);\n\t\t\t\t\toutput.Bitangent = vec3<f32>(0.0, 0.0, 1.0);\n\t\t\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\toutput.instanceIndex = 0;\n\t\t\t\n\t\t\t\t\treturn output;\n\t\t\t\t}\n\t\t\t\t`,\n            software: () => {},\n          },\n          \"vertex\"\n        );\n      }\n      if (!this.fullscreenVertexShaderInternal) {\n        throw new Error(\"Fullscreen vertex shader not found\");\n      }\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"screen\";\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.size[0], this.size[1]]\n        )\n      );\n      drawCall.setVertexShader(this.fullscreenVertexShaderInternal);\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        throw new Error(\"Fragment shader not found\");\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      if (!this.$geo) {\n        this.$geo = makeFullscreenQuadGeometry();\n      }\n      drawCall.setGeometry(this.$geo);\n      this.adapter.dispatch(drawCall, {\n        depthTest: false,\n      });\n    }\n    _draw_geometry(geometry, vertexShaderInst, pixelShaderInst) {\n      this.dirty = true;\n      this.cpuReadDirty = true;\n      this.cpuFlush();\n      this.version++;\n      if (!this.adapter) return;\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"geometry\";\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.size[0], this.size[1]]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setGeometry(geometry);\n      this.adapter.dispatch(drawCall);\n    }\n    drawIndexed(indexBuffer, vertexShaderInst, pixelShaderInst) {\n      this.dirty = true;\n      this.cpuReadDirty = true;\n      this.cpuFlush();\n      this.version++;\n      if (!this.adapter) return;\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"indexed\";\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.adapter.canvas.width, this.adapter.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setIndexBuffer(indexBuffer);\n      this.adapter.dispatch(drawCall);\n    }\n    clear(color = \"auto\") {\n      this.dirty = true;\n      this.cpuReadDirty = true;\n      this.cpuFlush();\n      this.version++;\n      if (!this.adapter) return;\n      this.adapter.clear(false, color);\n    }\n    drawCount(count, vertexShaderInst, pixelShaderInst) {\n      this.dirty = true;\n      this.cpuReadDirty = true;\n      this.cpuFlush();\n      this.version++;\n      if (!this.adapter) return;\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"count\";\n      drawCall.drawCount = count;\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.adapter.canvas.width, this.adapter.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      this.adapter.dispatch(drawCall);\n    }\n    drawInstanced(mesh, instanceCount, vertexShaderInst, pixelShaderInst) {\n      if (!this.adapter) {\n        return;\n      }\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"geometry\";\n      drawCall.instanceCount = instanceCount;\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.adapter.canvas.width, this.adapter.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setGeometry(mesh);\n      this.adapter.dispatch(drawCall);\n    }\n  }\n  const FormatInnerTypeMapping = {\n    \"8bit-float\": \"r16float\",\n    \"8bit-float2\": \"rg16float\",\n    \"8bit-float3\": \"rgba16float\",\n    \"8bit-float4\": \"rgba16float\",\n    \"16bit-float\": \"r16float\",\n    \"16bit-float2\": \"rg16float\",\n    \"16bit-float3\": \"rgba16float\",\n    \"16bit-float4\": \"rgba16float\",\n    \"32bit-float\": \"r32float\",\n    \"32bit-float2\": \"rg32float\",\n    \"32bit-float3\": \"rgba32float\",\n    \"32bit-float4\": \"rgba32float\",\n    \"16bit-int\": \"r16sint\",\n    \"16bit-int2\": \"rg16sint\",\n    \"16bit-int3\": \"rgba16sint\",\n    \"16bit-int4\": \"rgba16sint\",\n    \"8bit-int\": \"r8sint\",\n    \"8bit-int2\": \"rg8sint\",\n    \"8bit-int3\": \"rgba8sint\",\n    \"8bit-int4\": \"rgba8sint\",\n    \"32bit-int\": \"r32sint\",\n    \"32bit-int2\": \"rg32sint\",\n    \"32bit-int3\": \"rgba32sint\",\n    \"32bit-int4\": \"rgba32sint\",\n    \"8bit-uint\": \"r8uint\",\n    \"8bit-uint2\": \"rg8uint\",\n    \"8bit-uint3\": \"rgba8uint\",\n    \"8bit-uint4\": \"rgba8uint\",\n    \"16bit-uint\": \"r16uint\",\n    \"16bit-uint2\": \"rg16uint\",\n    \"16bit-uint3\": \"rgba16uint\",\n    \"16bit-uint4\": \"rgba16uint\",\n    \"32bit-uint\": \"r32uint\",\n    \"32bit-uint2\": \"rg32uint\",\n    \"32bit-uint3\": \"rgba32uint\",\n    \"32bit-uint4\": \"rgba32uint\",\n    \"8bit-uint8\": \"rgba8unorm\",\n    \"16bit-uint8\": \"rgba16uint\",\n    \"32bit-uint8\": \"rgba32float\",\n    \"depth-uint8\": \"depth24plus\",\n    \"depth-float\": \"depth24plus\",\n    \"depth-float2\": \"depth24plus\",\n    \"depth-float3\": \"depth24plus\",\n    \"depth-float4\": \"depth24plus\",\n    \"depth-int\": \"depth24plus\",\n    \"depth-int2\": \"depth24plus\",\n    \"depth-int3\": \"depth24plus\",\n    \"depth-int4\": \"depth24plus\",\n    \"depth-uint\": \"depth24plus\",\n    \"depth-uint2\": \"depth24plus\",\n    \"depth-uint3\": \"depth24plus\",\n    \"depth-uint4\": \"depth24plus\",\n    \"depth-32-uint8\": \"depth32float\",\n    \"depth-32-float\": \"depth32float\",\n    \"depth-32-float2\": \"depth32float\",\n    \"depth-32-float3\": \"depth32float\",\n    \"depth-32-float4\": \"depth32float\",\n    \"depth-32-int\": \"depth32float\",\n    \"depth-32-int2\": \"depth32float\",\n    \"depth-32-int3\": \"depth32float\",\n    \"depth-32-int4\": \"depth32float\",\n    \"depth-32-uint\": \"depth32float\",\n    \"depth-32-uint2\": \"depth32float\",\n    \"depth-32-uint3\": \"depth32float\",\n    \"depth-32-uint4\": \"depth32float\",\n  };\n\n  function translateNumericToGLSL(type) {\n    if (type == \"float2x2\") {\n      return \"Matrix2f\";\n    } else if (type == \"float3x3\") {\n      return \"Matrix3f\";\n    } else if (type == \"float4x4\") {\n      return \"Matrix4f\";\n    }\n    let matches = type.match(/^([A-Za-z]+)(\\d)?$/);\n    if (!matches) {\n      return null;\n    }\n    let base = matches[1];\n    let size = matches[2] ? parseInt(matches[2]) : 1;\n    let type_name = \"\";\n    switch (base) {\n      case \"float\":\n        type_name = \"f\";\n        break;\n      case \"int\":\n        type_name = \"i\";\n        break;\n      case \"uint\":\n        type_name = \"i\";\n        break;\n      case \"bool\":\n        type_name = \"i\";\n        break;\n      default:\n        return null;\n    }\n    return `${size}${type_name}`;\n  }\n  function translateIdentifier(str) {\n    return str.replace(/\\_\\_\\_/g, \"_ii_\").replace(/\\_\\_/g, \"_i_\");\n  }\n\n  const boundTextures = /* @__PURE__ */ new Map();\n  let boundTexturesCache = new LRUCache({\n    max: 16,\n  });\n  for (let ti = 0; ti < 16; ti++) {\n    boundTextures.set(ti, null);\n  }\n  let webglCounter = 0;\n  class WebGLAdapter extends GraphicsAdapter {\n    gl = null;\n    index = 0;\n    blankImage = null;\n    GL_SHADER_TYPES = {\n      vertex: 0,\n      \"vertex-indexed\": 0,\n      fragment: 0,\n      compute: -1,\n    };\n    programCache = /* @__PURE__ */ new Map();\n    init() {\n      this.index = webglCounter++;\n      console.log(\"Creating gl with index\", this.index);\n      this.gl = this.canvas.getContext(\"webgl2\", {\n        preserveDrawingBuffer: true,\n      });\n      if (!this.gl) {\n        throw new Error(\"WebGL is not supported\");\n      }\n      this.GL_SHADER_TYPES = {\n        vertex: this.gl.VERTEX_SHADER,\n        fragment: this.gl.FRAGMENT_SHADER,\n        \"vertex-indexed\": this.gl.VERTEX_SHADER,\n        compute: -1,\n      };\n      this.blankImage = document.createElement(\"canvas\");\n      this.blankImage.width = 1;\n      this.blankImage.height = 1;\n      this.blankImage.getContext(\"2d\").fillRect(0, 0, 1, 1);\n      this.setupImageDrawing();\n    }\n    __program = null;\n    setupImageDrawing() {\n      const gl = this.getGL();\n      this.__program = gl.createProgram();\n      let program = this.__program;\n      if (!program) throw new Error(\"Could not create program\");\n      let vertexShader = this.genNativeShader(\n        `#version 300 es\nprecision highp float;\n\nin vec4 a_position;\nin vec2 a_texcoord;\n\nuniform vec2 size;\n\nout vec2 v_texcoord;\n\nvoid main() {\n\tgl_Position = a_position;\n\tv_texcoord = a_texcoord;\n\n\tfloat x = float((gl_VertexID & 1) << 2);\n\tfloat y = float((gl_VertexID & 2) << 1);\n\tv_texcoord.x = x * 0.5;\n\tv_texcoord.y = 1.f - (y * 0.5);\n\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\n}\n`,\n        gl.VERTEX_SHADER\n      );\n      let fragmentShader = this.genNativeShader(\n        `#version 300 es\nprecision mediump float;\nprecision mediump int;\n\nin vec2 v_texcoord;\nout vec4 _i_gl_out_pixel;\n\t\nuniform sampler2D u_texture;\n\t\nvoid main() {\n\tvec2 t = vec2(v_texcoord.x, v_texcoord.y);\n\tvec4 c = texture(u_texture, t);\n\t// c.rgb *= c.a;\n\t_i_gl_out_pixel = c;\n\t// _i_gl_out_pixel = vec4(t, 0.0, 1.0);\n}\n`,\n        gl.FRAGMENT_SHADER\n      );\n      if (!vertexShader || !fragmentShader) {\n        return;\n      }\n      gl.attachShader(program, vertexShader);\n      gl.attachShader(program, fragmentShader);\n      gl.linkProgram(program);\n    }\n    drawImage(image, dstX, dstY, texWidth, texHeight) {\n      const gl = this.getGL();\n      const program = this.__program;\n      if (!program) throw new Error(\"Could not create program\");\n      let positionLocation = gl.getAttribLocation(program, \"a_position\");\n      let texcoordLocation = gl.getAttribLocation(program, \"a_texcoord\");\n      gl.getUniformLocation(program, \"u_matrix\");\n      let textureLocation = gl.getUniformLocation(program, \"u_texture\");\n      let positionBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n      let positions = [-1, -1, -1, 1, 1, -1, 1, -1];\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(positions),\n        gl.STATIC_DRAW\n      );\n      let texcoordBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n      let texcoords = [0, 0, 0, 1, 1, 0, 1, 0];\n      gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(texcoords),\n        gl.STATIC_DRAW\n      );\n      let unit = this.getTextureUnit(image);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n      gl.useProgram(program);\n      gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n      gl.enableVertexAttribArray(positionLocation);\n      gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n      gl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n      gl.enableVertexAttribArray(texcoordLocation);\n      gl.vertexAttribPointer(texcoordLocation, 2, gl.FLOAT, false, 0, 0);\n      gl.uniform1i(textureLocation, unit);\n      gl.enable(gl.BLEND);\n      let indexBuffer = gl.createBuffer();\n      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n      let tris = [0, 1, 2];\n      let indexArr = new Uint16Array(tris.length);\n      for (let i = 0; i < tris.length; i += 3) {\n        indexArr[i] = tris[i];\n        indexArr[i + 1] = tris[i + 1];\n        indexArr[i + 2] = tris[i + 2];\n      }\n      gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);\n      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n      gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_SHORT, 0);\n      gl.deleteBuffer(positionBuffer);\n      gl.deleteBuffer(texcoordBuffer);\n    }\n    getGL() {\n      if (!this.gl) {\n        throw new Error(\"WebGL is not supported\");\n      }\n      return this.gl;\n    }\n    setViewport(width, height) {\n      const gl = this.getGL();\n      super.setViewport(width, height);\n      gl.viewport(0, 0, width, height);\n    }\n    getOrCreateShader(instance, type, config) {\n      const gl = this.getGL();\n      let arrSizeChanged = false;\n      for (let param of Object.keys(instance.parent.params.webgl)) {\n        let type2 = instance.parent.params.webgl[param];\n        if (type2.type == \"array\") {\n          if (!instance.parent.arraySizes[param])\n            instance.parent.arraySizes[param] = 0;\n          if (Array.isArray(instance.bindings[param])) {\n            if (\n              instance.bindings[param].length >\n              instance.parent.arraySizes[param]\n            ) {\n              instance.parent.arraySizes[param] =\n                instance.bindings[param].length;\n              arrSizeChanged = true;\n            }\n          }\n        }\n      }\n      if (instance.parent.types[type] && !arrSizeChanged) {\n        return instance.parent.types[type];\n      } else {\n        if (type == \"compute\") {\n          throw new Error(\"Compute shaders are not supported in WebGL\");\n        }\n        let shader = gl.createShader(this.GL_SHADER_TYPES[type]);\n        if (!shader) {\n          console.log(\"Shader on canvas failed\", this.canvas);\n          throw new Error(\"Failed to create shader of type \" + type);\n        }\n        let base = instance.parent.code.webgl;\n        for (let param of Object.keys(instance.parent.arraySizes)) {\n          base = base.replace(\n            `%${param}_size%`,\n            instance.parent.arraySizes[param]\n          );\n        }\n        if (type == \"vertex\") {\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `in vec3 a_position;\n\t\t\t\t\tin vec3 a_normal;\n\t\t\t\t\tin vec3 a_tangent;\n\t\t\t\t\tin vec3 a_bitangent;\n\t\t\t\t\tin vec2 a_uv;\n\t\t\t\t\tin vec4 a_color;\n\t\t\t\t\t\n\t\t\t\t\tout vec3 _v_position;\n\t\t\t\t\tout vec3 _v_normal;\n\t\t\t\t\tout vec3 _v_tangent;\n\t\t\t\t\tout vec3 _v_bitangent;\n\t\t\t\t\tout vec2 _v_uv;\n\t\t\t\t\tout vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `ShaderOutput _i_out;\n\t\t\t\t\t_i_out.position = vec4(a_position, 1.0);\n\t\t\t\t\t_i_out.normal = a_normal;\n\t\t\t\t\t_i_out.tangent = a_tangent;\n\t\t\t\t\t_i_out.bitangent = a_bitangent;\n\t\t\t\t\t_i_out.uv = a_uv;\n\t\t\t\t\t_i_out.color = a_color;\n\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.position = a_position;\n\t\t\t\t\t_i_in.uv = a_uv;\n\t\t\t\t\t_i_in.normal = a_normal;\n\t\t\t\t\t_i_in.tangent = a_tangent;\n\t\t\t\t\t_i_in.bitangent = a_bitangent;\n\t\t\t\t\t_i_in.color = a_color;\n\t\t\t\t\t_i_in.screen = vec2(0, 0);`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            `gl_Position = _i_out.position;\n\t\t\t\t\t_v_position = _i_out.position.xyz;\n\t\t\t\t\t_v_normal = _i_out.normal;\n\t\t\t\t\t_v_tangent = _i_out.tangent;\n\t\t\t\t\t_v_bitangent = _i_out.bitangent;\n\t\t\t\t\t_v_uv = _i_out.uv;\n\t\t\t\t\t_v_color = _i_out.color;`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replaceAll(\n            \"_ext_uniform_global_\",\n            \"_vertex_ext_uniform_global_\"\n          );\n          base = base.replaceAll(\n            \"_ext_uniform_local_\",\n            \"_vertex_ext_uniform_local_\"\n          );\n        } else if (type == \"vertex-indexed\") {\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `\n\t\t\t\t\tout vec3 _v_position;\n\t\t\t\t\tout vec3 _v_normal;\n\t\t\t\t\tout vec3 _v_tangent;\n\t\t\t\t\tout vec3 _v_bitangent;\n\t\t\t\t\tout vec2 _v_uv;\n\t\t\t\t\tout vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `ShaderOutput _i_out;\n\t\t\t\t\t_i_out.position = vec4(0.0, 0.0, 0.0, 1.0);\n\t\t\t\t\t_i_out.normal = vec3(0.0);\n\t\t\t\t\t_i_out.tangent = vec3(0.0);\n\t\t\t\t\t_i_out.bitangent = vec3(0.0);\n\t\t\t\t\t_i_out.uv = vec2(0.0);\n\t\t\t\t\t_i_out.color = vec4(0.0);\n\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.vertexIndex = uint(gl_VertexID);\n\t\t\t\t\t_i_in.position = vec3(0.0);\n\t\t\t\t\t_i_in.uv = vec2(0.0);\n\t\t\t\t\t_i_in.normal = vec3(0.0);\n\t\t\t\t\t_i_in.tangent = vec3(0.0);\n\t\t\t\t\t_i_in.bitangent = vec3(0.0);\n\t\t\t\t\t_i_in.color = vec4(0.0);\n\t\t\t\t\t_i_in.screen = vec2(0, 0);`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            `gl_Position = _i_out.position;\n\t\t\t\t\t_v_position = _i_out.position.xyz;\n\t\t\t\t\t_v_normal = _i_out.normal;\n\t\t\t\t\t_v_tangent = _i_out.tangent;\n\t\t\t\t\t_v_bitangent = _i_out.bitangent;\n\t\t\t\t\t_v_uv = _i_out.uv;\n\t\t\t\t\t_v_color = _i_out.color;`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replaceAll(\n            \"_ext_uniform_global_\",\n            \"_vertex_ext_uniform_global_\"\n          );\n          base = base.replaceAll(\n            \"_ext_uniform_local_\",\n            \"_vertex_ext_uniform_local_\"\n          );\n        } else {\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_BEFORE__*/\",\n            `out vec4 _i_gl_out_pixel;\n\t\t\t\t\tin vec3 _v_position;\n\t\t\t\t\tin vec3 _v_normal;\n\t\t\t\t\tin vec3 _v_tangent;\n\t\t\t\t\tin vec3 _v_bitangent;\n\t\t\t\t\tin vec2 _v_uv;\n\t\t\t\t\tin vec4 _v_color;\n\t\t\t\t\tuniform vec2 _vtex_canvas;`.replace(/\\t\\n/g, \"\")\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_START__*/\",\n            `ShaderOutput _i_out;\n\t\t\t\t\tShaderInput _i_in;\n\t\t\t\t\t_i_in.uv = _v_uv;\n\t\t\t\t\t_i_in.normal = _v_normal;\n\t\t\t\t\t_i_in.tangent = _v_tangent;\n\t\t\t\t\t_i_in.bitangent = _v_bitangent;\n\t\t\t\t\t_i_in.color = _v_color;\n\t\t\t\t\t_i_in.position = _v_position;\n\t\t\t\t\t_i_in.screen = vec2(gl_FragCoord.x, _vtex_canvas.y - gl_FragCoord.y);`.replace(\n              /\\t\\n/g,\n              \"\"\n            )\n          );\n          base = base.replace(\n            \"/*__SHADEUP_TEMPLATE_INSERT_MAIN_END__*/\",\n            \"_i_gl_out_pixel = _i_out.color;\"\n          );\n          base = base.replaceAll(\n            \"_ext_uniform_global_\",\n            \"_pixel_ext_uniform_global_\"\n          );\n          base = base.replaceAll(\n            \"_ext_uniform_local_\",\n            \"_pixel_ext_uniform_local_\"\n          );\n        }\n        let finalSource = `#version 300 es\nprecision mediump float;\nprecision mediump int;\n\n${base}`;\n        gl.shaderSource(shader, finalSource);\n        gl.compileShader(shader);\n        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n          let err = gl.getShaderInfoLog(shader);\n          if (err) {\n            let location = err.match(/ERROR: \\d+:(\\d+):/);\n            if (location) {\n              let line = parseInt(location[1]);\n              let col = parseInt(location[0]);\n              let lines = finalSource.split(\"\\n\");\n              console.error(lines[line - 1]);\n              console.error(\" \".repeat(col - 1) + \"^\");\n            }\n          }\n          console.error(\"Shader compile error\", gl.getShaderInfoLog(shader));\n          console.log(finalSource);\n          window.bubbleError(\n            \"Shader compile error \" + gl.getShaderInfoLog(shader)\n          );\n        }\n        instance.version++;\n        let gShader = new GenericShader(instance.parent.code.webgl, type);\n        if (!gShader.payload) {\n          gShader.payload = {};\n        }\n        gShader.payload[this.index] = shader;\n        gShader.code = finalSource;\n        gShader.parent = instance.parent;\n        instance.parent.types[type] = gShader;\n        return gShader;\n      }\n    }\n    createShader(code, type) {\n      const gl = this.getGL();\n      if (type == \"compute\") {\n        let gComputeShader = new GenericShader(code.webgl, type);\n        gComputeShader.payload = code.software;\n        gComputeShader.parent = null;\n        return gComputeShader;\n      }\n      let shader = gl.createShader(this.GL_SHADER_TYPES[type]);\n      if (!shader) {\n        throw new Error(\"Failed to create shader\");\n      }\n      gl.shaderSource(shader, code.webgl);\n      gl.compileShader(shader);\n      if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n        console.log(\"Code\", code);\n        console.error(\"Shader compile error\", gl.getShaderInfoLog(shader));\n        throw new Error(\"Shader compile error\");\n      }\n      let gShader = new GenericShader(code.webgl, type);\n      gShader.payload = { [this.index]: shader };\n      gShader.parent = null;\n      return gShader;\n    }\n    clear() {\n      const gl = this.getGL();\n      gl.clearColor(0, 0, 0, 0);\n      gl.clear(\n        gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT\n      );\n    }\n    getProgramVertexPixel(\n      vertexShaderKey,\n      vertexShader,\n      pixelShaderKey,\n      pixelShader\n    ) {\n      const gl = this.getGL();\n      let key = `${vertexShaderKey}_${pixelShaderKey}`;\n      let uniformCache = /* @__PURE__ */ new Map();\n      if (this.programCache.has(key)) {\n        return this.programCache.get(key) ?? null;\n      }\n      let program = gl.createProgram();\n      if (!program) {\n        return null;\n      }\n      program.getUniformLocationCached = (path) => {\n        if (!program) throw new Error(\"Program is null\");\n        if (uniformCache.has(path)) {\n          return uniformCache.get(path) ?? null;\n        }\n        let loc = gl.getUniformLocation(program, path);\n        if (!loc);\n        else {\n          uniformCache.set(path, loc);\n          return loc;\n        }\n      };\n      if (!vertexShader || !pixelShader) {\n        return null;\n      }\n      gl.attachShader(program, vertexShader);\n      gl.attachShader(program, pixelShader);\n      gl.linkProgram(program);\n      gl.useProgram(program);\n      this.programCache.set(key, program);\n      return program ?? null;\n    }\n    unbindTexture(texture) {\n      const gl = this.getGL();\n      if (texture.isBound && texture.payload) {\n        boundTextures.set(texture.payload.unit, null);\n        texture.isBound = false;\n        gl.deleteTexture(texture.payload.texture);\n        texture.payload = null;\n      }\n    }\n    flush() {\n      const gl = this.getGL();\n      gl.flush();\n    }\n    getTextureUnit(texture) {\n      const gl = this.getGL();\n      let isBound = false;\n      if (texture instanceof ShadeupTexture2d) {\n        texture.flush();\n        isBound = texture.isBound;\n      }\n      if (!isBound) {\n        let unit = -1;\n        for (let [ti, tex] of boundTextures) {\n          if (tex == null) {\n            unit = ti;\n            break;\n          }\n        }\n        if (unit == -1) {\n          let oldest = boundTexturesCache.pop();\n          unit = oldest[0];\n        }\n        if (texture instanceof ShadeupTexture2d) {\n          texture.payload = {\n            texture: gl.createTexture(),\n            unit: -1,\n            version: texture.version,\n          };\n          gl.activeTexture(gl.TEXTURE0 + unit);\n          gl.bindTexture(gl.TEXTURE_2D, texture.payload.texture);\n        } else {\n          gl.activeTexture(gl.TEXTURE0 + unit);\n          if (!texture.$gl) {\n            texture.$gl = {};\n          }\n          if (!texture.$gl[this.index]) {\n            texture.$gl[this.index] = gl.createTexture();\n          }\n          gl.bindTexture(gl.TEXTURE_2D, texture.$gl[this.index]);\n        }\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n        if (texture instanceof ShadeupTexture2d) {\n          let webglAdapter = texture.adapter;\n          let useImage = webglAdapter.canvas;\n          gl.texImage2D(\n            gl.TEXTURE_2D,\n            0,\n            gl.RGBA,\n            gl.RGBA,\n            gl.UNSIGNED_BYTE,\n            useImage\n          );\n        } else {\n          gl.texImage2D(\n            gl.TEXTURE_2D,\n            0,\n            gl.RGBA,\n            gl.RGBA,\n            gl.UNSIGNED_BYTE,\n            texture\n          );\n        }\n        boundTextures.set(unit, texture);\n        if (texture instanceof ShadeupTexture2d) {\n          texture.isBound = true;\n          texture.payload.unit = unit;\n          boundTexturesCache.set(texture.payload.unit, [\n            texture.payload.unit,\n            texture,\n          ]);\n        } else {\n          boundTexturesCache.set(unit, [unit, texture]);\n        }\n        return unit;\n      } else {\n        if (texture instanceof ShadeupTexture2d) {\n          if (texture.payload.version != texture.version) {\n            gl.activeTexture(gl.TEXTURE0 + texture.payload.unit);\n            gl.bindTexture(gl.TEXTURE_2D, texture.payload.texture);\n            let webglAdapter = texture.adapter;\n            let useImage = webglAdapter.canvas;\n            gl.texImage2D(\n              gl.TEXTURE_2D,\n              0,\n              gl.RGBA,\n              gl.RGBA,\n              gl.UNSIGNED_BYTE,\n              useImage\n            );\n            texture.payload.version = texture.version;\n          }\n          boundTexturesCache.set(texture.payload.unit, [\n            texture.payload.unit,\n            texture.payload.texture,\n          ]);\n          return texture.payload.unit;\n        }\n      }\n    }\n    setUniform(program, path, val, type, shaderKind) {\n      const gl = this.getGL();\n      const setUniform = this.setUniform.bind(this);\n      let expandedType = type;\n      if (expandedType.type == \"array\") {\n        let innerType = expandedType.element;\n        for (let i = 0; i < val.length; i++) {\n          setUniform(program, `${path}[${i}]`, val[i], innerType, shaderKind);\n        }\n        if (path.split(\".\").length < 2) {\n          setUniform(\n            program,\n            `${path}_size`,\n            val.length,\n            { type: \"primitive\", name: \"int\" },\n            shaderKind\n          );\n        }\n      } else if (expandedType.type == \"primitive\") {\n        if (\n          expandedType.name == \"texture2d\" ||\n          expandedType.name == \"rwtexture2d\"\n        ) {\n          expandedType.element;\n          let u = this.getTextureUnit(val);\n          let loc = program.getUniformLocationCached(path);\n          gl.uniform1i(loc, u);\n          if (path.split(\".\").length < 2) {\n            setUniform(\n              program,\n              `${path}_size`,\n              val.size,\n              { type: \"primitive\", name: \"float2\" },\n              shaderKind\n            );\n          }\n        } else {\n          let methodName = translateNumericToGLSL(expandedType.name);\n          let loc = program.getUniformLocationCached(path);\n          if (!Array.isArray(val)) {\n            val = [val];\n          }\n          methodName = `uniform${methodName}v`;\n          if (methodName.startsWith(\"uniformMatrix\")) {\n            if (val.length == 4);\n            else if (val.length == 9);\n            else if (val.length == 16);\n            gl[methodName](loc, false, val);\n          } else {\n            gl[methodName](loc, val);\n          }\n        }\n      } else if (expandedType.type == \"buffer\");\n      else if (expandedType.type == \"struct\") {\n        for (let field of Object.keys(expandedType.fields)) {\n          if (!val) {\n            throw new Error(\n              `Found null value for ${path}.${field} while passing to shader (nulls are not allowed)`\n            );\n          }\n          setUniform(\n            program,\n            `${path}.${field}`,\n            val[field],\n            expandedType.fields[field],\n            shaderKind\n          );\n        }\n      }\n    }\n    dispatchDraw(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      const gl = this.getGL();\n      let pixelShader = dispatch.fragmentShader;\n      let vertexShader = dispatch.vertexShader;\n      if (!pixelShader || !vertexShader) {\n        return;\n      }\n      let program = this.getProgramVertexPixel(\n        vertexShader.uniqueSourceKey,\n        vertexShader.payload[this.index],\n        pixelShader.uniqueSourceKey,\n        pixelShader.payload[this.index]\n      );\n      if (!program) {\n        return;\n      }\n      gl.useProgram(program);\n      for (let k of dispatch.vertexUniforms.uniforms.keys()) {\n        let val = dispatch.vertexUniforms.uniforms.get(k);\n        if (!val) continue;\n        k = k.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n        k = k.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n        this.setUniform(program, k, val.value, val.valueType, \"vertex\");\n      }\n      for (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n        let val = dispatch.fragmentUniforms.uniforms.get(k);\n        if (!val) continue;\n        k = k.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n        k = k.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n        this.setUniform(program, k, val.value, val.valueType, \"pixel\");\n      }\n      const geometry = dispatch.geometry;\n      if (!geometry) {\n        return;\n      }\n      let vao = gl.createVertexArray();\n      gl.bindVertexArray(vao);\n      function generateEmptyData(arr, size, numItems) {\n        if (arr.length == 0) {\n          for (let i = 0; i < numItems * size; i++) {\n            for (let j = 0; j < size; j++) arr.push(0);\n          }\n        }\n        return arr;\n      }\n      let geoGl = geometry;\n      let positionBuffer;\n      let normalBuffer;\n      let tangentBuffer;\n      let bitangentBuffer;\n      let uvBuffer;\n      let colorBuffer;\n      let indexBuffer;\n      if (geoGl._cacheGL) {\n        positionBuffer = geoGl._cacheGL.positionBuffer;\n        normalBuffer = geoGl._cacheGL.normalBuffer;\n        tangentBuffer = geoGl._cacheGL.tangentBuffer;\n        bitangentBuffer = geoGl._cacheGL.bitangentBuffer;\n        uvBuffer = geoGl._cacheGL.uvBuffer;\n        colorBuffer = geoGl._cacheGL.colorBuffer;\n        indexBuffer = geoGl._cacheGL.indexBuffer;\n      } else {\n        let tris = geometry.getTriangles();\n        positionBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n        gl.bufferData(\n          gl.ARRAY_BUFFER,\n          new Float32Array(geometry.getVertices().flat()),\n          gl.STATIC_DRAW\n        );\n        normalBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);\n        gl.bufferData(\n          gl.ARRAY_BUFFER,\n          new Float32Array(\n            generateEmptyData(geometry.getNormals().flat(), 3, tris.length)\n          ),\n          gl.STATIC_DRAW\n        );\n        tangentBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, tangentBuffer);\n        gl.bufferData(\n          gl.ARRAY_BUFFER,\n          new Float32Array(\n            generateEmptyData(geometry.getTangents().flat(), 3, tris.length)\n          ),\n          gl.STATIC_DRAW\n        );\n        bitangentBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, bitangentBuffer);\n        gl.bufferData(\n          gl.ARRAY_BUFFER,\n          new Float32Array(\n            generateEmptyData(geometry.getBitangents().flat(), 3, tris.length)\n          ),\n          gl.STATIC_DRAW\n        );\n        uvBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n        gl.bufferData(\n          gl.ARRAY_BUFFER,\n          new Float32Array(\n            generateEmptyData(geometry.getUVs().flat(), 2, tris.length)\n          ),\n          gl.STATIC_DRAW\n        );\n        colorBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n        gl.bufferData(\n          gl.ARRAY_BUFFER,\n          new Float32Array(\n            generateEmptyData(geometry.getColors().flat(), 4, tris.length)\n          ),\n          gl.STATIC_DRAW\n        );\n        indexBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n        let indexArr = new Uint16Array(tris.length);\n        for (let i = 0; i < tris.length; i += 3) {\n          {\n            indexArr[i] = tris[i];\n            indexArr[i + 1] = tris[i + 1];\n            indexArr[i + 2] = tris[i + 2];\n          }\n        }\n        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);\n        geoGl._cacheGL = {\n          positionBuffer,\n          normalBuffer,\n          tangentBuffer,\n          bitangentBuffer,\n          uvBuffer,\n          colorBuffer,\n          indexBuffer,\n        };\n      }\n      let positionAttr = gl.getAttribLocation(program, \"a_position\");\n      let normalAttr = gl.getAttribLocation(program, \"a_normal\");\n      let tangentAttr = gl.getAttribLocation(program, \"a_tangent\");\n      let bitangentAttr = gl.getAttribLocation(program, \"a_bitangent\");\n      let uvAttr = gl.getAttribLocation(program, \"a_uv\");\n      let colorAttr = gl.getAttribLocation(program, \"a_color\");\n      gl.enable(gl.BLEND);\n      if (options.depthTest) gl.enable(gl.DEPTH_TEST);\n      gl.enable(gl.CULL_FACE);\n      gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n      gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n      if (positionAttr != -1) {\n        gl.enableVertexAttribArray(positionAttr);\n        gl.vertexAttribPointer(\n          positionAttr,\n          // location\n          3,\n          // size (components per iteration)\n          gl.FLOAT,\n          // type of to get from buffer\n          false,\n          // normalize\n          0,\n          // stride (bytes to advance each iteration)\n          0\n          // offset (bytes from start of buffer)\n        );\n      }\n      gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);\n      if (normalAttr != -1) {\n        gl.enableVertexAttribArray(normalAttr);\n        gl.vertexAttribPointer(\n          normalAttr,\n          // location\n          3,\n          // size (components per iteration)\n          gl.FLOAT,\n          // type of to get from buffer\n          false,\n          // normalize\n          0,\n          // stride (bytes to advance each iteration)\n          0\n          // offset (bytes from start of buffer)\n        );\n      }\n      gl.bindBuffer(gl.ARRAY_BUFFER, tangentBuffer);\n      if (tangentAttr != -1) {\n        gl.enableVertexAttribArray(tangentAttr);\n        gl.vertexAttribPointer(\n          tangentAttr,\n          // location\n          3,\n          // size (components per iteration)\n          gl.FLOAT,\n          // type of to get from buffer\n          false,\n          // normalize\n          0,\n          // stride (bytes to advance each iteration)\n          0\n          // offset (bytes from start of buffer)\n        );\n      }\n      gl.bindBuffer(gl.ARRAY_BUFFER, bitangentBuffer);\n      if (bitangentAttr != -1) {\n        gl.enableVertexAttribArray(bitangentAttr);\n        gl.vertexAttribPointer(\n          bitangentAttr,\n          // location\n          3,\n          // size (components per iteration)\n          gl.FLOAT,\n          // type of to get from buffer\n          false,\n          // normalize\n          0,\n          // stride (bytes to advance each iteration)\n          0\n          // offset (bytes from start of buffer)\n        );\n      }\n      gl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n      if (uvAttr != -1) {\n        gl.enableVertexAttribArray(uvAttr);\n        gl.vertexAttribPointer(\n          uvAttr,\n          // location\n          2,\n          // size (components per iteration)\n          gl.FLOAT,\n          // type of to get from buffer\n          false,\n          // normalize\n          0,\n          // stride (bytes to advance each iteration)\n          0\n          // offset (bytes from start of buffer)\n        );\n      }\n      gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n      if (colorAttr != -1) {\n        gl.enableVertexAttribArray(colorAttr);\n        gl.vertexAttribPointer(\n          colorAttr,\n          // location\n          4,\n          // size (components per iteration)\n          gl.FLOAT,\n          // type of to get from buffer\n          false,\n          // normalize\n          0,\n          // stride (bytes to advance each iteration)\n          0\n          // offset (bytes from start of buffer)\n        );\n      }\n      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n      gl.drawElements(\n        gl.TRIANGLES,\n        geometry.getTriangles().length,\n        gl.UNSIGNED_SHORT,\n        0\n      );\n      gl.deleteVertexArray(vao);\n    }\n    dispatchDrawIndexed(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      const gl = this.getGL();\n      let pixelShader = dispatch.fragmentShader;\n      let vertexShader = dispatch.vertexShader;\n      if (!pixelShader || !vertexShader) {\n        return;\n      }\n      let program = this.getProgramVertexPixel(\n        vertexShader.uniqueSourceKey,\n        vertexShader.payload[this.index],\n        pixelShader.uniqueSourceKey,\n        pixelShader.payload[this.index]\n      );\n      if (!program) {\n        return;\n      }\n      gl.useProgram(program);\n      for (let k of dispatch.vertexUniforms.uniforms.keys()) {\n        let val = dispatch.vertexUniforms.uniforms.get(k);\n        if (!val) continue;\n        k = k.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n        k = k.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n        this.setUniform(program, k, val.value, val.valueType, \"vertex\");\n      }\n      for (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n        let val = dispatch.fragmentUniforms.uniforms.get(k);\n        if (!val) continue;\n        k = k.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n        k = k.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n        this.setUniform(program, k, val.value, val.valueType, \"pixel\");\n      }\n      const indexBuffer = dispatch.indexBuffer;\n      if (!indexBuffer) {\n        return;\n      }\n      gl.enable(gl.BLEND);\n      if (options.depthTest) gl.enable(gl.DEPTH_TEST);\n      gl.enable(gl.CULL_FACE);\n      gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n      gl.drawArrays(gl.TRIANGLES, 0, indexBuffer.len());\n    }\n    dispatchDrawCount(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      const gl = this.getGL();\n      let pixelShader = dispatch.fragmentShader;\n      let vertexShader = dispatch.vertexShader;\n      if (!pixelShader || !vertexShader) {\n        return;\n      }\n      let program = this.getProgramVertexPixel(\n        vertexShader.uniqueSourceKey,\n        vertexShader.payload[this.index],\n        pixelShader.uniqueSourceKey,\n        pixelShader.payload[this.index]\n      );\n      if (!program) {\n        return;\n      }\n      gl.useProgram(program);\n      for (let k of dispatch.vertexUniforms.uniforms.keys()) {\n        let val = dispatch.vertexUniforms.uniforms.get(k);\n        if (!val) continue;\n        k = k.replaceAll(\"_ext_uniform_global_\", \"_vertex_ext_uniform_global_\");\n        k = k.replaceAll(\"_ext_uniform_local_\", \"_vertex_ext_uniform_local_\");\n        this.setUniform(program, k, val.value, val.valueType, \"vertex\");\n      }\n      for (let k of dispatch.fragmentUniforms.uniforms.keys()) {\n        let val = dispatch.fragmentUniforms.uniforms.get(k);\n        if (!val) continue;\n        k = k.replaceAll(\"_ext_uniform_global_\", \"_pixel_ext_uniform_global_\");\n        k = k.replaceAll(\"_ext_uniform_local_\", \"_pixel_ext_uniform_local_\");\n        this.setUniform(program, k, val.value, val.valueType, \"pixel\");\n      }\n      gl.enable(gl.BLEND);\n      if (options.depthTest) gl.enable(gl.DEPTH_TEST);\n      gl.enable(gl.CULL_FACE);\n      gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n      gl.drawArrays(gl.TRIANGLES, 0, dispatch.drawCount * 3);\n    }\n    getOrCreateBuffer(buf, binding) {\n      const gl = this.getGL();\n      if (buf.platformPayload) {\n        return buf.platformPayload;\n      }\n      let buffer = gl.createBuffer();\n      if (!buffer) {\n        throw new Error(\"Could not create buffer\");\n      }\n      gl.bindBuffer(binding, buffer);\n      if (buf.structured);\n      else {\n        gl.bufferData(\n          binding,\n          buf.uintArray ?? buf.floatArray ?? buf.intArray ?? new Uint8Array(0),\n          gl.STATIC_DRAW\n        );\n      }\n      buf.platformPayload = buffer;\n      return buffer;\n    }\n    dispatch(\n      dispatch,\n      options = {\n        depthTest: true,\n      }\n    ) {\n      super.dispatch(dispatch, options);\n      if (dispatch.type == \"draw\") {\n        this.activateDrawContext();\n        this.triggerEvent(\"draw\", dispatch);\n        if (dispatch.drawType == \"indexed\") {\n          this.dispatchDrawIndexed(dispatch, options);\n        } else if (dispatch.drawType == \"count\") {\n          this.dispatchDrawCount(dispatch, options);\n        } else {\n          this.dispatchDraw(dispatch, options);\n        }\n      }\n    }\n    genNativeShader(code, type) {\n      const gl = this.getGL();\n      let shader = gl.createShader(type);\n      if (!shader) {\n        throw new Error(\"Could not create shader\");\n      }\n      gl.shaderSource(shader, code);\n      gl.compileShader(shader);\n      if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n        console.log(\"Code\", code);\n        console.error(\"Shader compile error\", gl.getShaderInfoLog(shader));\n      }\n      return shader;\n    }\n  }\n\n  const keyboardKeys = [\n    {\n      name: \"backspace\",\n      which: \"8\",\n      key: \"Backspace\",\n      code: \"Backspace\",\n    },\n    {\n      name: \"tab\",\n      which: \"9\",\n      key: \"Tab\",\n      code: \"Tab\",\n    },\n    {\n      name: \"enter\",\n      which: \"13\",\n      key: \"Enter\",\n      code: \"Enter\",\n    },\n    {\n      name: \"shift(left)\",\n      which: \"16\",\n      key: \"Shift\",\n      code: \"ShiftLeft\",\n    },\n    {\n      name: \"shift(right)\",\n      which: \"16\",\n      key: \"Shift\",\n      code: \"ShiftRight\",\n    },\n    {\n      name: \"ctrl(left)\",\n      which: \"17\",\n      key: \"Control\",\n      code: \"ControlLeft\",\n    },\n    {\n      name: \"ctrl(right)\",\n      which: \"17\",\n      key: \"Control\",\n      code: \"ControlRight\",\n    },\n    {\n      name: \"alt(left)\",\n      which: \"18\",\n      key: \"Alt\",\n      code: \"AltLeft\",\n    },\n    {\n      name: \"alt(right)\",\n      which: \"18\",\n      key: \"Alt\",\n      code: \"AltRight\",\n    },\n    {\n      name: \"pause/break\",\n      which: \"19\",\n      key: \"Pause\",\n      code: \"Pause\",\n    },\n    {\n      name: \"caps lock\",\n      which: \"20\",\n      key: \"CapsLock\",\n      code: \"CapsLock\",\n    },\n    {\n      name: \"escape\",\n      which: \"27\",\n      key: \"Escape\",\n      code: \"Escape\",\n    },\n    {\n      name: \"space\",\n      which: \"32\",\n      key: \"\",\n      code: \"Space\",\n    },\n    {\n      name: \"page up\",\n      which: \"33\",\n      key: \"PageUp\",\n      code: \"PageUp\",\n    },\n    {\n      name: \"page down\",\n      which: \"34\",\n      key: \"PageDown\",\n      code: \"PageDown\",\n    },\n    {\n      name: \"end\",\n      which: \"35\",\n      key: \"End\",\n      code: \"End\",\n    },\n    {\n      name: \"home\",\n      which: \"36\",\n      key: \"Home\",\n      code: \"Home\",\n    },\n    {\n      name: \"left arrow\",\n      which: \"37\",\n      key: \"ArrowLeft\",\n      code: \"ArrowLeft\",\n    },\n    {\n      name: \"up arrow\",\n      which: \"38\",\n      key: \"ArrowUp\",\n      code: \"ArrowUp\",\n    },\n    {\n      name: \"right arrow\",\n      which: \"39\",\n      key: \"ArrowRight\",\n      code: \"ArrowRight\",\n    },\n    {\n      name: \"down arrow\",\n      which: \"40\",\n      key: \"ArrowDown\",\n      code: \"ArrowDown\",\n    },\n    {\n      name: \"print screen\",\n      which: \"44\",\n      key: \"PrintScreen\",\n      code: \"PrintScreen\",\n    },\n    {\n      name: \"insert\",\n      which: \"45\",\n      key: \"Insert\",\n      code: \"Insert\",\n    },\n    {\n      name: \"delete\",\n      which: \"46\",\n      key: \"Delete\",\n      code: \"Delete\",\n    },\n    {\n      name: \"0\",\n      which: \"48\",\n      key: \"0\",\n      code: \"Digit0\",\n    },\n    {\n      name: \"1\",\n      which: \"49\",\n      key: \"1\",\n      code: \"Digit1\",\n    },\n    {\n      name: \"2\",\n      which: \"50\",\n      key: \"2\",\n      code: \"Digit2\",\n    },\n    {\n      name: \"3\",\n      which: \"51\",\n      key: \"3\",\n      code: \"Digit3\",\n    },\n    {\n      name: \"#\",\n      which: \"51\",\n      key: \"#\",\n      code: \"Digit3\",\n    },\n    {\n      name: \"4\",\n      which: \"52\",\n      key: \"4\",\n      code: \"Digit4\",\n    },\n    {\n      name: \"5\",\n      which: \"53\",\n      key: \"5\",\n      code: \"Digit5\",\n    },\n    {\n      name: \"6\",\n      which: \"54\",\n      key: \"6\",\n      code: \"Digit6\",\n    },\n    {\n      name: \"7\",\n      which: \"55\",\n      key: \"7\",\n      code: \"Digit7\",\n    },\n    {\n      name: \"8\",\n      which: \"56\",\n      key: \"8\",\n      code: \"Digit8\",\n    },\n    {\n      name: \"9\",\n      which: \"57\",\n      key: \"9\",\n      code: \"Digit9\",\n    },\n    {\n      name: \"a\",\n      which: \"65\",\n      key: \"a\",\n      code: \"KeyA\",\n    },\n    {\n      name: \"b\",\n      which: \"66\",\n      key: \"b\",\n      code: \"KeyB\",\n    },\n    {\n      name: \"c\",\n      which: \"67\",\n      key: \"c\",\n      code: \"KeyC\",\n    },\n    {\n      name: \"d\",\n      which: \"68\",\n      key: \"d\",\n      code: \"KeyD\",\n    },\n    {\n      name: \"e\",\n      which: \"69\",\n      key: \"e\",\n      code: \"KeyE\",\n    },\n    {\n      name: \"f\",\n      which: \"70\",\n      key: \"f\",\n      code: \"KeyF\",\n    },\n    {\n      name: \"g\",\n      which: \"71\",\n      key: \"g\",\n      code: \"KeyG\",\n    },\n    {\n      name: \"h\",\n      which: \"72\",\n      key: \"h\",\n      code: \"KeyH\",\n    },\n    {\n      name: \"i\",\n      which: \"73\",\n      key: \"i\",\n      code: \"KeyI\",\n    },\n    {\n      name: \"j\",\n      which: \"74\",\n      key: \"j\",\n      code: \"KeyJ\",\n    },\n    {\n      name: \"k\",\n      which: \"75\",\n      key: \"k\",\n      code: \"KeyK\",\n    },\n    {\n      name: \"l\",\n      which: \"76\",\n      key: \"l\",\n      code: \"KeyL\",\n    },\n    {\n      name: \"m\",\n      which: \"77\",\n      key: \"m\",\n      code: \"KeyM\",\n    },\n    {\n      name: \"n\",\n      which: \"78\",\n      key: \"n\",\n      code: \"KeyN\",\n    },\n    {\n      name: \"o\",\n      which: \"79\",\n      key: \"o\",\n      code: \"KeyO\",\n    },\n    {\n      name: \"p\",\n      which: \"80\",\n      key: \"p\",\n      code: \"KeyP\",\n    },\n    {\n      name: \"q\",\n      which: \"81\",\n      key: \"q\",\n      code: \"KeyQ\",\n    },\n    {\n      name: \"r\",\n      which: \"82\",\n      key: \"r\",\n      code: \"KeyR\",\n    },\n    {\n      name: \"s\",\n      which: \"83\",\n      key: \"s\",\n      code: \"KeyS\",\n    },\n    {\n      name: \"t\",\n      which: \"84\",\n      key: \"t\",\n      code: \"KeyT\",\n    },\n    {\n      name: \"u\",\n      which: \"85\",\n      key: \"u\",\n      code: \"KeyU\",\n    },\n    {\n      name: \"v\",\n      which: \"86\",\n      key: \"v\",\n      code: \"KeyV\",\n    },\n    {\n      name: \"w\",\n      which: \"87\",\n      key: \"w\",\n      code: \"KeyW\",\n    },\n    {\n      name: \"x\",\n      which: \"88\",\n      key: \"x\",\n      code: \"KeyX\",\n    },\n    {\n      name: \"y\",\n      which: \"89\",\n      key: \"y\",\n      code: \"KeyY\",\n    },\n    {\n      name: \"z\",\n      which: \"90\",\n      key: \"z\",\n      code: \"KeyZ\",\n    },\n    {\n      name: \"left window key\",\n      which: \"91\",\n      key: \"Meta\",\n      code: \"MetaLeft\",\n    },\n    {\n      name: \"right window key\",\n      which: \"92\",\n      key: \"Meta\",\n      code: \"MetaRight\",\n    },\n    {\n      name: \"select key (Context Menu)\",\n      which: \"93\",\n      key: \"ContextMenu\",\n      code: \"ContextMenu\",\n    },\n    {\n      name: \"numpad 0\",\n      which: \"96\",\n      key: \"0\",\n      code: \"Numpad0\",\n    },\n    {\n      name: \"numpad 1\",\n      which: \"97\",\n      key: \"1\",\n      code: \"Numpad1\",\n    },\n    {\n      name: \"numpad 2\",\n      which: \"98\",\n      key: \"2\",\n      code: \"Numpad2\",\n    },\n    {\n      name: \"numpad 3\",\n      which: \"99\",\n      key: \"3\",\n      code: \"Numpad3\",\n    },\n    {\n      name: \"numpad 4\",\n      which: \"100\",\n      key: \"4\",\n      code: \"Numpad4\",\n    },\n    {\n      name: \"numpad 5\",\n      which: \"101\",\n      key: \"5\",\n      code: \"Numpad5\",\n    },\n    {\n      name: \"numpad 6\",\n      which: \"102\",\n      key: \"6\",\n      code: \"Numpad6\",\n    },\n    {\n      name: \"numpad 7\",\n      which: \"103\",\n      key: \"7\",\n      code: \"Numpad7\",\n    },\n    {\n      name: \"numpad 8\",\n      which: \"104\",\n      key: \"8\",\n      code: \"Numpad8\",\n    },\n    {\n      name: \"numpad 9\",\n      which: \"105\",\n      key: \"9\",\n      code: \"Numpad9\",\n    },\n    {\n      name: \"multiply\",\n      which: \"106\",\n      key: \"*\",\n      code: \"NumpadMultiply\",\n    },\n    {\n      name: \"add\",\n      which: \"107\",\n      key: \"+\",\n      code: \"NumpadAdd\",\n    },\n    {\n      name: \"subtract\",\n      which: \"109\",\n      key: \"-\",\n      code: \"NumpadSubtract\",\n    },\n    {\n      name: \"decimal point\",\n      which: \"110\",\n      key: \".\",\n      code: \"NumpadDecimal\",\n    },\n    {\n      name: \"divide\",\n      which: \"111\",\n      key: \"/\",\n      code: \"NumpadDivide\",\n    },\n    {\n      name: \"f1\",\n      which: \"112\",\n      key: \"F1\",\n      code: \"F1\",\n    },\n    {\n      name: \"f2\",\n      which: \"113\",\n      key: \"F2\",\n      code: \"F2\",\n    },\n    {\n      name: \"f3\",\n      which: \"114\",\n      key: \"F3\",\n      code: \"F3\",\n    },\n    {\n      name: \"f4\",\n      which: \"115\",\n      key: \"F4\",\n      code: \"F4\",\n    },\n    {\n      name: \"f5\",\n      which: \"116\",\n      key: \"F5\",\n      code: \"F5\",\n    },\n    {\n      name: \"f6\",\n      which: \"117\",\n      key: \"F6\",\n      code: \"F6\",\n    },\n    {\n      name: \"f7\",\n      which: \"118\",\n      key: \"F7\",\n      code: \"F7\",\n    },\n    {\n      name: \"f8\",\n      which: \"119\",\n      key: \"F8\",\n      code: \"F8\",\n    },\n    {\n      name: \"f9\",\n      which: \"120\",\n      key: \"F9\",\n      code: \"F9\",\n    },\n    {\n      name: \"f10\",\n      which: \"121\",\n      key: \"F10\",\n      code: \"F10\",\n    },\n    {\n      name: \"f11\",\n      which: \"122\",\n      key: \"F11\",\n      code: \"F11\",\n    },\n    {\n      name: \"f12\",\n      which: \"123\",\n      key: \"F12\",\n      code: \"F12\",\n    },\n    {\n      name: \"num lock\",\n      which: \"144\",\n      key: \"NumLock\",\n      code: \"NumLock\",\n    },\n    {\n      name: \"scroll lock\",\n      which: \"145\",\n      key: \"ScrollLock\",\n      code: \"ScrollLock\",\n    },\n    {\n      name: \"audio volume mute\",\n      which: \"173\",\n      key: \"AudioVolumeMute\",\n      code: \"\",\n    },\n    {\n      name: \"audio volume down\",\n      which: \"174\",\n      key: \"AudioVolumeDown\",\n      code: \"\",\n    },\n    {\n      name: \"audio volume up\",\n      which: \"175\",\n      key: \"AudioVolumeUp\",\n      code: \"\",\n    },\n    {\n      name: \"media player\",\n      which: \"181\",\n      key: \"LaunchMediaPlayer\",\n      code: \"\",\n    },\n    {\n      name: \"launch application 1\",\n      which: \"182\",\n      key: \"LaunchApplication1\",\n      code: \"\",\n    },\n    {\n      name: \"launch application 2\",\n      which: \"183\",\n      key: \"LaunchApplication2\",\n      code: \"\",\n    },\n    {\n      name: \"semi-colon\",\n      which: \"186\",\n      key: \";\",\n      code: \"Semicolon\",\n    },\n    {\n      name: \"equal sign\",\n      which: \"187\",\n      key: \"=\",\n      code: \"Equal\",\n    },\n    {\n      name: \"comma\",\n      which: \"188\",\n      key: \",\",\n      code: \"Comma\",\n    },\n    {\n      name: \"dash\",\n      which: \"189\",\n      key: \"-\",\n      code: \"Minus\",\n    },\n    {\n      name: \"period\",\n      which: \"190\",\n      key: \".\",\n      code: \"Period\",\n    },\n    {\n      name: \"forward slash\",\n      which: \"191\",\n      key: \"/\",\n      code: \"Slash\",\n    },\n    {\n      name: \"Backquote/Grave accent\",\n      which: \"192\",\n      key: \"`\",\n      code: \"Backquote\",\n    },\n    {\n      name: \"open bracket\",\n      which: \"219\",\n      key: \"[\",\n      code: \"BracketLeft\",\n    },\n    {\n      name: \"back slash\",\n      which: \"220\",\n      key: \"\\\\\",\n      code: \"Backslash\",\n    },\n    {\n      name: \"close bracket\",\n      which: \"221\",\n      key: \"]\",\n      code: \"BracketRight\",\n    },\n    {\n      name: \"single quote\",\n      which: \"222\",\n      key: \"'\",\n      code: \"Quote\",\n    },\n  ];\n\n  function initInput(canvas, mouseState, keyboardSink) {\n    let frameKeySink = /* @__PURE__ */ new Map();\n    window.addEventListener(\"keydown\", (e) => {\n      keyboardSink.set(e.code, true);\n      frameKeySink.set(e.code, true);\n      if (e.code.startsWith(\"Arrow\")) {\n        e.preventDefault();\n      }\n    });\n    window.addEventListener(\"keyup\", (e) => {\n      if (keyboardSink.has(e.code)) {\n        keyboardSink.delete(e.code);\n      }\n    });\n    let offsetLeft = document.querySelector(\".ui-container\")?.offsetLeft ?? 0;\n    let offsetTop = document.querySelector(\".ui-container\")?.offsetTop ?? 0;\n    window.addEventListener(\"mousedown\", (e) => {\n      if (e.target && e.target.closest(\".ui-container\")) {\n        mouseState.button[e.button] = true;\n        console.log(\"down\", mouseState.button);\n        mouseState.startScreen = [...mouseState.screen];\n        mouseState.startUv = [...mouseState.uv];\n        mouseState.deltaScreen = [0, 0];\n        mouseState.deltaUv = [0, 0];\n        mouseState.dragging = true;\n      }\n    });\n    window.addEventListener(\"mouseup\", (e) => {\n      mouseState.clicked[0] = false;\n      mouseState.clicked[1] = false;\n      mouseState.clicked[2] = false;\n      mouseState.button[e.button] = false;\n      mouseState.dragging = false;\n    });\n    window.addEventListener(\"click\", (e) => {\n      if (e.target && e.target.closest(\".ui-container\")) {\n        mouseState.clicked[e.button] = true;\n      }\n    });\n    window.addEventListener(\"mousemove\", (e) => {\n      mouseState.screen = [\n        (e.clientX - offsetLeft) * window.devicePixelRatio,\n        (e.clientY - offsetTop) * window.devicePixelRatio,\n      ];\n      mouseState.uv = [\n        ((e.clientX - offsetLeft) * window.devicePixelRatio) / canvas.width,\n        ((e.clientY - offsetTop) * window.devicePixelRatio) / canvas.height,\n      ];\n      if (mouseState.dragging) {\n        mouseState.deltaScreen = [\n          mouseState.screen[0] - mouseState.startScreen[0],\n          mouseState.screen[1] - mouseState.startScreen[1],\n        ];\n        mouseState.deltaUv = [\n          mouseState.uv[0] - mouseState.startUv[0],\n          mouseState.uv[1] - mouseState.startUv[1],\n        ];\n      }\n    });\n    window.addEventListener(\"touchstart\", (e) => {\n      if (e.target && e.target.closest(\".ui-container\")) {\n        mouseState.button[0] = true;\n        mouseState.startScreen = [...mouseState.screen];\n        mouseState.startUv = [...mouseState.uv];\n        mouseState.deltaScreen = [0, 0];\n        mouseState.deltaUv = [0, 0];\n        mouseState.dragging = true;\n      }\n    });\n    window.addEventListener(\"touchend\", (e) => {\n      mouseState.button[0] = false;\n      mouseState.dragging = false;\n    });\n    window.addEventListener(\"touchmove\", (e) => {\n      mouseState.screen = [\n        (e.touches[0].clientX - offsetLeft) * window.devicePixelRatio,\n        (e.touches[0].clientY - offsetTop) * window.devicePixelRatio,\n      ];\n      mouseState.uv = [\n        ((e.touches[0].clientX - offsetLeft) * window.devicePixelRatio) /\n          canvas.width,\n        ((e.touches[0].clientY - offsetTop) * window.devicePixelRatio) /\n          canvas.height,\n      ];\n      if (mouseState.dragging) {\n        mouseState.deltaScreen = [\n          mouseState.screen[0] - mouseState.startScreen[0],\n          mouseState.screen[1] - mouseState.startScreen[1],\n        ];\n        mouseState.deltaUv = [\n          mouseState.uv[0] - mouseState.startUv[0],\n          mouseState.uv[1] - mouseState.startUv[1],\n        ];\n      }\n    });\n    window.addEventListener(\n      \"wheel\",\n      (e) => {\n        if (\n          e.target.matches(\"canvas\") ||\n          e.target.matches(\".ui-container\") ||\n          e.target == document.body\n        ) {\n          e.preventDefault();\n          mouseState.wheel += normalizeWheel(e).pixelY * -0.01;\n        }\n      },\n      { passive: false }\n    );\n    window.addEventListener(\"scroll\", (e) => {\n      if (\n        e.target.matches(\"canvas\") ||\n        e.target.matches(\".ui-container\") ||\n        e.target == document.body\n      ) {\n        e.preventDefault();\n      }\n    });\n    document.addEventListener(\"scroll\", (e) => {});\n    let getKeyboardState = () => {\n      let keys = {};\n      for (let key of keyboardKeys) {\n        if (!key.code) continue;\n        let realKey = key.code[0].toLowerCase() + key.code.slice(1);\n        keys[realKey] = keyboardSink.has(key.code);\n        keys[\"pressed\" + key.code] = frameKeySink.has(key.code);\n      }\n      let vec = [0, 0];\n      if (keys.keyW) vec[1] -= 1;\n      if (keys.keyS) vec[1] += 1;\n      if (keys.keyA) vec[0] -= 1;\n      if (keys.keyD) vec[0] += 1;\n      if (keys.arrowUp) vec[1] -= 1;\n      if (keys.arrowDown) vec[1] += 1;\n      if (keys.arrowLeft) vec[0] -= 1;\n      if (keys.arrowRight) vec[0] += 1;\n      keys.arrowVector = [vec[0], vec[1]];\n      frameKeySink.clear();\n      return keys;\n    };\n    return {\n      getKeyboardState,\n    };\n  }\n  const blankKeyboardState = {\n    keyW: false,\n    keyS: false,\n    keyA: false,\n    keyD: false,\n    arrowUp: false,\n    arrowDown: false,\n    arrowLeft: false,\n    arrowRight: false,\n    pressedKeyW: false,\n    pressedKeyS: false,\n    pressedKeyA: false,\n    pressedKeyD: false,\n    pressedArrowUp: false,\n    pressedArrowDown: false,\n    pressedArrowLeft: false,\n    pressedArrowRight: false,\n    arrowVector: [0, 0],\n  };\n  for (let key of keyboardKeys) {\n    if (!key.code) continue;\n    blankKeyboardState[key.code] = false;\n    blankKeyboardState[\"pressed\" + key.code] = false;\n  }\n  var PIXEL_STEP = 10;\n  var LINE_HEIGHT = 40;\n  var PAGE_HEIGHT = 800;\n  function normalizeWheel(event) {\n    var sX = 0,\n      sY = 0,\n      pX = 0,\n      pY = 0;\n    if (\"detail\" in event) {\n      sY = event.detail;\n    }\n    if (\"wheelDelta\" in event) {\n      sY = -event.wheelDelta / 120;\n    }\n    if (\"wheelDeltaY\" in event) {\n      sY = -event.wheelDeltaY / 120;\n    }\n    if (\"wheelDeltaX\" in event) {\n      sX = -event.wheelDeltaX / 120;\n    }\n    if (\"axis\" in event && event.axis === event.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n    if (\"deltaY\" in event) {\n      pY = event.deltaY;\n    }\n    if (\"deltaX\" in event) {\n      pX = event.deltaX;\n    }\n    if ((pX || pY) && event.deltaMode) {\n      if (event.deltaMode == 1) {\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else {\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n    if (pX && !sX) {\n      sX = pX < 1 ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = pY < 1 ? -1 : 1;\n    }\n    return { spinX: sX, spinY: sY, pixelX: pX, pixelY: pY };\n  }\n\n  const addCameraHook = (engine) => {\n    const realUiContainer =\n      document.querySelector(\".ui-container\") ?? engine.canvas;\n    let cameraConfig = {\n      mode: \"orbit-free\",\n      spinning: false,\n      initialPosition: [0, 0, 0],\n      initialPitch: 0,\n      initialYaw: 0,\n      speed: 10,\n      orbitTarget: [0, 0, 0],\n      orbitDistance: 650,\n      orbitPitch: Math.PI / 6,\n      orbitYaw: Math.PI / 4,\n      orbitMinDistance: 0,\n      orbitMaxDistance: 1e5,\n      orbitMinPitch: -Math.PI / 2,\n      orbitMaxPitch: Math.PI / 2 - 1e-3,\n    };\n    let defaultCameraConfig = { ...cameraConfig };\n    let flying = false;\n    let orbiting = false;\n    let cameraUnlocked = false;\n    let lastFrameMovement = Date.now();\n    let defaultCameraSpeed = 1;\n    let cameraSpeed = defaultCameraSpeed;\n    function activateFreeFly() {\n      if (cameraConfig.mode == \"orbit-free\") {\n        cameraUnlocked = true;\n      }\n      cameraConfig.mode = \"free\";\n      cameraRotY = cameraConfig.orbitPitch;\n      cameraRotX = cameraConfig.orbitYaw - Math.PI / 2;\n    }\n    function activateOrbit() {\n      if (cameraConfig.mode == \"free\") {\n        cameraUnlocked = false;\n      }\n      cameraConfig.mode = \"orbit-free\";\n      let camera = window.env.camera;\n      let currentDist = cameraConfig.orbitDistance;\n      let currentCameraPos = camera.position;\n      let rotation = camera.rotation;\n      let quatMulled = quaternionMul(rotation, [0, 0, 1]);\n      let targetForward = [quatMulled[0], quatMulled[1], quatMulled[2]];\n      cameraConfig.orbitTarget = [\n        currentCameraPos[0] - targetForward[0] * currentDist,\n        currentCameraPos[1] - targetForward[1] * currentDist,\n        currentCameraPos[2] - targetForward[2] * currentDist,\n      ];\n      let target = cameraConfig.orbitTarget;\n      let position = currentCameraPos;\n      let dx = target[0] - position[0];\n      let dy = target[1] - position[1];\n      let dz = target[2] - position[2];\n      let yaw = Math.atan2(dz, dx);\n      let pitch = Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));\n      cameraConfig.orbitPitch = -pitch;\n      cameraConfig.orbitYaw = yaw - Math.PI;\n    }\n    window.addEventListener(\"contextmenu\", async (e) => {\n      if (e.target == realUiContainer) {\n        e.preventDefault();\n        if (cameraConfig.mode == \"orbit-free\" || cameraConfig.mode == \"free\") {\n          await engine.canvas.requestPointerLock();\n          flying = true;\n          if (cameraConfig.mode == \"orbit-free\") {\n            activateFreeFly();\n          }\n          engine.canvas.focus();\n        }\n      }\n    });\n    window.addEventListener(\"mousedown\", async (e) => {\n      if (e.target == realUiContainer) {\n        if (e.button == 2) {\n          e.preventDefault();\n          if (\n            cameraConfig.mode == \"orbit-free\" ||\n            cameraConfig.mode == \"free\"\n          ) {\n            await engine.canvas.requestPointerLock();\n            engine.canvas.focus();\n            flying = true;\n            if (cameraConfig.mode == \"orbit-free\") {\n              activateFreeFly();\n            }\n          }\n        } else if (e.buttons == 4) {\n          e.preventDefault();\n          orbiting = true;\n        } else if (e.button == 0 || e.button == 1) {\n          orbiting = true;\n        }\n      }\n    });\n    window.addEventListener(\"mouseup\", async (e) => {\n      if (\n        e.target == realUiContainer ||\n        e.target == document.body ||\n        e.target == canvas\n      ) {\n        if (e.button == 2) {\n          e.preventDefault();\n          if (\n            cameraConfig.mode == \"orbit-free\" ||\n            cameraConfig.mode == \"free\"\n          ) {\n            document.exitPointerLock();\n            if (cameraUnlocked) {\n              activateOrbit();\n            }\n            flying = false;\n            cameraSpeed = defaultCameraSpeed;\n          }\n        } else if (e.buttons == 4) {\n          e.preventDefault();\n          orbiting = false;\n        } else if (e.button == 0 || e.button == 1) {\n          orbiting = false;\n        }\n      }\n    });\n    function normalizeVector3(v) {\n      let len = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n      return [v[0] / len, v[1] / len, v[2] / len];\n    }\n    let cameraRotX = 0;\n    let cameraRotY = 0;\n    let cameraPitchVelocity = 0;\n    let cameraYawVelocity = 0;\n    window.addEventListener(\"mousemove\", (e) => {\n      if (\n        e.target == document.body ||\n        e.target == realUiContainer ||\n        e.target == canvas\n      ) {\n        if (e.buttons == 4 || e.buttons == 2) {\n          let camera2d = engine.env.camera2d;\n          if (camera2d) {\n            camera2d.position[0] += e.movementX * window.devicePixelRatio;\n            camera2d.position[1] += e.movementY * window.devicePixelRatio;\n          }\n        }\n        if (flying) {\n          let dx = e.movementX;\n          let dy = e.movementY;\n          let camera = window.env.camera;\n          let right = [1, 0, 0];\n          let cameraRight = quaternionRotate(camera.rotation, right);\n          cameraRight[1] = 0;\n          cameraRight = normalizeVector3(cameraRight);\n          cameraRotX += dx * 1e-3;\n          cameraRotY += dy * 1e-3;\n        } else {\n          if (cameraConfig.mode.startsWith(\"orbit\") && orbiting) {\n            if (e.buttons == 1) {\n              cameraYawVelocity += e.movementX * 0.01;\n              cameraPitchVelocity += e.movementY * 0.01;\n              cameraConfig.spinning = false;\n            } else if (e.buttons == 4) {\n              cameraConfig.spinning = false;\n              let camera = window.env.camera;\n              if (camera) {\n                let up = [0, 1, 0];\n                let forward = [0, 0, -1];\n                let right = [1, 0, 0];\n                let cameraRight = quaternionRotate(camera.rotation, right);\n                cameraRight = normalizeVector3(cameraRight);\n                let cameraUp = quaternionRotate(camera.rotation, up);\n                cameraUp = normalizeVector3(cameraUp);\n                let cameraForward = quaternionRotate(camera.rotation, forward);\n                cameraForward[1] = 0;\n                cameraForward = normalizeVector3(cameraForward);\n                let cameraSpeed2 =\n                  0.6 * (Math.sqrt(cameraConfig.orbitDistance) / 20);\n                let cameraTarget = cameraConfig.orbitTarget;\n                if (e.shiftKey) {\n                  cameraSpeed2 = 0.01;\n                }\n                if (e.ctrlKey) {\n                  cameraSpeed2 = 1;\n                }\n                cameraTarget[0] +=\n                  cameraRight[0] * e.movementX * cameraSpeed2 * -1;\n                cameraTarget[1] +=\n                  cameraRight[1] * e.movementX * cameraSpeed2 * -1;\n                cameraTarget[2] +=\n                  cameraRight[2] * e.movementX * cameraSpeed2 * -1;\n                cameraTarget[0] += cameraUp[0] * e.movementY * cameraSpeed2;\n                cameraTarget[1] += cameraUp[1] * e.movementY * cameraSpeed2;\n                cameraTarget[2] += cameraUp[2] * e.movementY * cameraSpeed2;\n                cameraConfig.orbitTarget = cameraTarget;\n              }\n            }\n          }\n        }\n      }\n    });\n    function quaternionRotate(quaternion, vector) {\n      let [x, y, z] = vector;\n      let [qx, qy, qz, qw] = quaternion;\n      let ix = qw * x + qy * z - qz * y;\n      let iy = qw * y + qz * x - qx * z;\n      let iz = qw * z + qx * y - qy * x;\n      let iw = -qx * x - qy * y - qz * z;\n      return [\n        ix * qw + iw * -qx + iy * -qz - iz * -qy,\n        iy * qw + iw * -qy + iz * -qx - ix * -qz,\n        iz * qw + iw * -qz + ix * -qy - iy * -qx,\n      ];\n    }\n    function quaternionMul(quat, vec) {\n      let [qx, qy, qz, qw] = quat;\n      let [vx, vy, vz] = vec;\n      let ix = qw * vx + qy * vz - qz * vy;\n      let iy = qw * vy + qz * vx - qx * vz;\n      let iz = qw * vz + qx * vy - qy * vx;\n      let iw = -qx * vx - qy * vy - qz * vz;\n      return [\n        ix * qw + iw * -qx + iy * -qz - iz * -qy,\n        iy * qw + iw * -qy + iz * -qx - ix * -qz,\n        iz * qw + iw * -qz + ix * -qy - iy * -qx,\n        iw * qw - ix * -qx - iy * -qy - iz * -qz,\n      ];\n    }\n    function quaternionMulQuaternion(a, b) {\n      let [ax, ay, az, aw] = a;\n      let [bx, by, bz, bw] = b;\n      let ix = aw * bx + ax * bw + ay * bz - az * by;\n      let iy = aw * by + ay * bw + az * bx - ax * bz;\n      let iz = aw * bz + az * bw + ax * by - ay * bx;\n      let iw = aw * bw - ax * bx - ay * by - az * bz;\n      return [ix, iy, iz, iw];\n    }\n    let movementForward = 0;\n    let movementRight = 0;\n    let movementUp = 0;\n    let movement = {\n      w: 0,\n      a: 0,\n      s: 0,\n      d: 0,\n      q: 0,\n      e: 0,\n    };\n    let movementReal = {\n      w: 0,\n      a: 0,\n      s: 0,\n      d: 0,\n      q: 0,\n      e: 0,\n    };\n    let fovDirection = 0;\n    window.addEventListener(\"keydown\", (e) => {\n      if (\n        e.target instanceof Element &&\n        (e.target.closest(\"input\") || e.target.closest(\"textarea\"))\n      )\n        return;\n      if (e.key == \"w\") {\n        movement.w = 1;\n      } else if (e.key == \"s\") {\n        movement.s = 1;\n      } else if (e.key == \"a\") {\n        movement.a = 1;\n      } else if (e.key == \"d\") {\n        movement.d = 1;\n      } else if (e.key == \"e\") {\n        movement.e = 1;\n      } else if (e.key == \"q\") {\n        movement.q = 1;\n      } else if (e.key == \"c\") {\n        fovDirection = -1;\n      } else if (e.key == \"z\") {\n        fovDirection = 1;\n      }\n    });\n    let targetOrbitDistance = cameraConfig.orbitDistance;\n    window.addEventListener(\"wheel\", (e) => {\n      if (\n        e.target == document.body ||\n        e.target == realUiContainer ||\n        e.target == engine.canvas\n      ) {\n        if (e.deltaY > 0) {\n          cameraSpeed = cameraSpeed / 1.2;\n        } else if (e.deltaY < 0) {\n          cameraSpeed = cameraSpeed * 1.2;\n        }\n        let wheel = normalizeWheel(e);\n        if (cameraConfig.mode.startsWith(\"orbit\")) {\n          targetOrbitDistance = Math.max(\n            0.1,\n            targetOrbitDistance - wheel.spinY * -100\n          );\n        }\n        let camera2d = engine.env.camera2d;\n        if (camera2d) {\n          let mousePos = [\n            engine.env.mouse.screen[0],\n            engine.env.mouse.screen[1],\n          ];\n          let cameraPos = camera2d.position;\n          let cameraZoom = camera2d.zoom;\n          let zoomDelta = wheel.spinY * 0.1;\n          let newZoom = Math.max(0.01, cameraZoom + zoomDelta * cameraZoom);\n          let mouseWorldPos = [\n            (mousePos[0] - cameraPos[0]) / cameraZoom,\n            (mousePos[1] - cameraPos[1]) / cameraZoom,\n          ];\n          let mouseWorldPos2 = [\n            (mousePos[0] - cameraPos[0]) / newZoom,\n            (mousePos[1] - cameraPos[1]) / newZoom,\n          ];\n          let mouseWorldDelta = [\n            mouseWorldPos2[0] - mouseWorldPos[0],\n            mouseWorldPos2[1] - mouseWorldPos[1],\n          ];\n          camera2d.position = [\n            cameraPos[0] - mouseWorldDelta[0] * cameraZoom,\n            cameraPos[1] - mouseWorldDelta[1] * cameraZoom,\n          ];\n          camera2d.zoom = newZoom;\n        }\n      }\n    });\n    window.addEventListener(\"keyup\", (e) => {\n      if (e.key == \"w\") {\n        movement.w = 0;\n      } else if (e.key == \"s\") {\n        movement.s = 0;\n      } else if (e.key == \"a\") {\n        movement.a = 0;\n      } else if (e.key == \"d\") {\n        movement.d = 0;\n      } else if (e.key == \"e\") {\n        movement.e = 0;\n      } else if (e.key == \"q\") {\n        movement.q = 0;\n      } else if (e.key == \"c\" || e.key == \"z\") {\n        fovDirection = 0;\n      }\n    });\n    function lerp(a, b, t) {\n      return a + (b - a) * t;\n    }\n    function quaternionFromEuler(euler) {\n      let [x, y, z] = euler;\n      let c1 = Math.cos(x / 2);\n      let c2 = Math.cos(y / 2);\n      let c3 = Math.cos(z / 2);\n      let s1 = Math.sin(x / 2);\n      let s2 = Math.sin(y / 2);\n      let s3 = Math.sin(z / 2);\n      return [\n        s1 * c2 * c3 + c1 * s2 * s3,\n        c1 * s2 * c3 - s1 * c2 * s3,\n        c1 * c2 * s3 + s1 * s2 * c3,\n        c1 * c2 * c3 - s1 * s2 * s3,\n      ];\n    }\n    function cross(a, b) {\n      let [ax, ay, az] = a;\n      let [bx, by, bz] = b;\n      return [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx];\n    }\n    engine.env.configureCamera = function configureCamera(options) {\n      cameraConfig = { ...cameraConfig, ...options };\n      targetOrbitDistance = cameraConfig.orbitDistance;\n    };\n    return {\n      beforeFrame(delta) {\n        engine.env.camera =\n          engine.env.camera ??\n          (window._makeCamera ? new window._makeCamera({}) : null);\n        engine.env.camera2d =\n          engine.env.camera2d ??\n          (window._makeCamera2d ? new window._makeCamera2d({}) : null);\n        if (!engine.env.camera || !engine.env.camera2d) {\n          return;\n        }\n        let now = Date.now();\n        let dt = now - lastFrameMovement;\n        lastFrameMovement = now;\n        if (cameraConfig.mode == \"orbit-free\" || cameraConfig.mode == \"free\") {\n          if (!flying) {\n            if (engine.env.camera) {\n              engine.env.camera.fov = lerp(\n                engine.env.camera.fov,\n                90,\n                dt * 0.01\n              );\n            }\n          }\n        }\n        if (\n          engine.env.camera.width != engine.canvas.width ||\n          engine.env.camera.height != engine.canvas.height\n        ) {\n          engine.env.camera.width = engine.canvas.width;\n          engine.env.camera.height = engine.canvas.height;\n        }\n        if (cameraConfig.mode == \"orbit\" || cameraConfig.mode == \"orbit-free\") {\n          {\n            cameraConfig.orbitYaw += cameraYawVelocity * dt * 0.025;\n            cameraConfig.orbitPitch += cameraPitchVelocity * dt * 0.025;\n            cameraYawVelocity = lerp(cameraYawVelocity, 0, dt * 0.03);\n            cameraPitchVelocity = lerp(cameraPitchVelocity, 0, dt * 0.03);\n            cameraConfig.orbitPitch = Math.max(\n              cameraConfig.orbitMinPitch,\n              Math.min(cameraConfig.orbitMaxPitch, cameraConfig.orbitPitch)\n            );\n          }\n          cameraConfig.orbitDistance = lerp(\n            cameraConfig.orbitDistance,\n            targetOrbitDistance,\n            dt * 0.025\n          );\n          if (cameraConfig.spinning) {\n            cameraConfig.orbitYaw -= dt * 2e-4;\n          }\n          let theta = cameraConfig.orbitYaw;\n          let phi = Math.PI / 2 - cameraConfig.orbitPitch;\n          let orbitTarget = cameraConfig.orbitTarget;\n          let cameraPosition = [\n            Math.sin(phi) * Math.cos(theta) * cameraConfig.orbitDistance +\n              orbitTarget[0],\n            Math.cos(phi) * cameraConfig.orbitDistance + orbitTarget[1],\n            Math.sin(phi) * Math.sin(theta) * cameraConfig.orbitDistance +\n              orbitTarget[2],\n          ];\n          let camera = engine.env.camera;\n          if (camera) {\n            camera.position = cameraPosition;\n            let quat = window.shadeupQuat;\n            if (quat) {\n              camera.rotation = quat.lookAt(\n                normalizeVector3([\n                  cameraPosition[0] - orbitTarget[0],\n                  cameraPosition[1] - orbitTarget[1],\n                  cameraPosition[2] - orbitTarget[2],\n                ]),\n                [0, -1, 0]\n              );\n            }\n          }\n        } else if (cameraConfig.mode == \"free\") {\n          const damping = 60;\n          movementReal = {\n            w: lerp(movementReal.w, movement.w, dt / damping),\n            a: lerp(movementReal.a, movement.a, dt / damping),\n            s: lerp(movementReal.s, movement.s, dt / damping),\n            d: lerp(movementReal.d, movement.d, dt / damping),\n            q: lerp(movementReal.q, movement.q, dt / damping),\n            e: lerp(movementReal.e, movement.e, dt / damping),\n          };\n          let camera = engine.env.camera;\n          let up = [0, 1, 0];\n          if (camera) {\n            cameraRotY = Math.max(\n              -Math.PI / 2,\n              Math.min(Math.PI / 2, cameraRotY)\n            );\n            camera.rotation = quaternionMulQuaternion(\n              quaternionFromEuler([0, -cameraRotX, 0]),\n              quaternionFromEuler([-cameraRotY, 0, 0])\n            );\n          }\n          if (!flying) {\n            return;\n          }\n          let rotation = camera.rotation;\n          let quatMulled = quaternionMul(rotation, [0, 0, 1]);\n          let targetForward = [quatMulled[0], quatMulled[1], quatMulled[2]];\n          let targetUp = up;\n          let targetRight = cross(targetForward, targetUp);\n          targetRight = normalizeVector3(targetRight);\n          movementForward = 0;\n          movementRight = 0;\n          movementUp = 0;\n          movementForward += movementReal.w;\n          movementForward -= movementReal.s;\n          movementRight += movementReal.d;\n          movementRight -= movementReal.a;\n          movementUp += movementReal.e;\n          movementUp -= movementReal.q;\n          movementRight *= -1;\n          movementForward *= -1;\n          let movementVector = [0, 0, 0];\n          movementVector[0] += targetForward[0] * movementForward;\n          movementVector[1] += targetForward[1] * movementForward;\n          movementVector[2] += targetForward[2] * movementForward;\n          movementVector[0] += targetRight[0] * movementRight;\n          movementVector[1] += targetRight[1] * movementRight;\n          movementVector[2] += targetRight[2] * movementRight;\n          movementVector[0] += targetUp[0] * movementUp;\n          movementVector[1] += targetUp[1] * movementUp;\n          movementVector[2] += targetUp[2] * movementUp;\n          camera.position = [\n            camera.position[0] + movementVector[0] * dt * cameraSpeed,\n            camera.position[1] + movementVector[1] * dt * cameraSpeed,\n            camera.position[2] + movementVector[2] * dt * cameraSpeed,\n          ];\n          camera.fov += fovDirection * dt * 0.1;\n          camera.fov = Math.max(Math.min(camera.fov, 150), 4);\n        }\n      },\n      reset() {\n        let cam = engine.env.camera;\n        cam.position = [0, 0, 0];\n        cam.rotation = [1, 0, 0, 0];\n        cam.width = engine.canvas.width;\n        cam.height = engine.canvas.height;\n        cam.fov = 90;\n        cam.near = 1;\n        cam.far = 1e5;\n        let cam2d = engine.env.camera2d;\n        cam2d.position = [0, 0];\n        cam2d.zoom = 1;\n        cameraConfig = { ...defaultCameraConfig };\n        targetOrbitDistance = cameraConfig.orbitDistance;\n      },\n    };\n  };\n\n  const addCaptureHook = (engine) => {\n    let screenshotQueue = [];\n    let screenshotQueueResults = [];\n    const blank = document.createElement(\"canvas\");\n    blank.width = engine.canvas.width;\n    blank.height = engine.canvas.height;\n    return {\n      screenshotQueue,\n      screenshotQueueResults,\n      beforeFrame() {\n        if (!engine.playing) return;\n        if (\n          blank.width != engine.canvas.width ||\n          blank.height != engine.canvas.height\n        ) {\n          blank.width = engine.canvas.width;\n          blank.height = engine.canvas.height;\n        }\n        for (let i = screenshotQueue.length - 1; i >= 0; i--) {\n          let item = screenshotQueue[i];\n          let doCapture = false;\n          if (\"frame\" in item && typeof item.frame == \"number\") {\n            if (\n              item.frame <= engine.env.frame - 1 ||\n              (engine.timeMultiplier != 1 && engine.env.frame - 1 > item.frame)\n            ) {\n              doCapture = true;\n            }\n          }\n          if (\"time\" in item) {\n            if (engine.env.time >= item.time) {\n              doCapture = true;\n            }\n          }\n          console.log(\"Checking screenshot\", item, doCapture);\n          if (doCapture) {\n            performance.mark(\"start capture\");\n            performance.mark(\"wait cap\");\n            if (engine.canvas) {\n              let cacheScreenshotItem = screenshotQueue[i];\n              screenshotQueue.splice(i, 1);\n              performance.mark(\"start to url\");\n              let data = engine.canvas.toDataURL(\"image/png\");\n              let ctx = blank.getContext(\"2d\");\n              ctx?.drawImage(engine.canvas, 0, 0);\n              let blankData = ctx?.getImageData(\n                0,\n                0,\n                blank.width,\n                blank.height\n              );\n              if (\n                cacheScreenshotItem.$tries &&\n                cacheScreenshotItem.$tries > 100 &&\n                blankData\n              ) {\n                blankData.data[0] = 1;\n              }\n              if (!blankData?.data.some((v) => v != 0)) {\n                console.log(\"Blank screenshot, retrying\", screenshotQueue);\n                if (!cacheScreenshotItem.$tries) cacheScreenshotItem.$tries = 0;\n                cacheScreenshotItem.$tries++;\n                screenshotQueue.push(cacheScreenshotItem);\n              } else {\n                performance.mark(\"end to url\");\n                console.log(\"Screenshot captured, sending to parent\");\n                screenshotQueueResults.push({\n                  options: item,\n                  image: data,\n                });\n              }\n            }\n          }\n        }\n      },\n      afterFrame() {\n        if (screenshotQueue.length == 0 && screenshotQueueResults.length > 0) {\n          console.log(\"Posting screenshot results\");\n          window.parent.postMessage(\n            { type: \"screenshot-results\", data: screenshotQueueResults },\n            \"*\"\n          );\n          screenshotQueueResults = [];\n        }\n      },\n    };\n  };\n\n  class PaintingContext {\n    constructor(canvas, gl) {\n      this.markDirtyCallback = () => {};\n      this.__ctx = null;\n      this.__gl = null;\n      this.__offscreen_canvas = null;\n      this.__program = null;\n      this.stagedChanges = false;\n      this.dirty = false;\n      this.fastPoints = false;\n      this.fastPointsBuffer = null;\n      this.__currentColor = null;\n      this.pointsCounter = 0;\n      this.cacheSize = [0, 0];\n      if (!gl) return;\n      this.__gl = gl;\n      this.__canvas = canvas;\n      this.__offscreen_canvas = document.createElement(\"canvas\");\n      this.__offscreen_canvas.width = canvas.width;\n      this.__offscreen_canvas.height = canvas.height;\n      this.__ctx = this.__offscreen_canvas.getContext(\"2d\", {\n        willReadFrequently: true,\n      });\n      this.__offscreen_canvas.style.position = \"absolute\";\n      this.__offscreen_canvas.style.zIndex = \"10\";\n      this.__setColor([0, 0, 0, 1]);\n      gl.addEventListener(\"context\", (toContext) => {\n        if (toContext == \"draw\") {\n          this.flush();\n        }\n      });\n      gl.addEventListener(\"flush\", () => {\n        this.flush();\n      });\n    }\n    flush() {\n      if (!this.__gl) return;\n      if (!this.__canvas) return;\n      if (!this.__offscreen_canvas) return;\n      if (!this.stagedChanges) return;\n      if (this.fastPoints) this.flushPoints();\n      this.__gl.drawImage(this.__offscreen_canvas);\n      this.stagedChanges = false;\n      if (\n        this.__offscreen_canvas.width != this.__canvas.width ||\n        this.__offscreen_canvas.height != this.__canvas.height\n      ) {\n        this.__offscreen_canvas.width = this.__canvas.width;\n        this.__offscreen_canvas.height = this.__canvas.height;\n      }\n      this.pointsCounter = 0;\n    }\n    __beforeDraw() {\n      if (!this.__offscreen_canvas) return;\n      if (!this.__ctx) return;\n      if (!this.__canvas) return;\n      this.markDirtyCallback();\n      this.__gl?.activatePaintContext();\n      if (!this.stagedChanges) {\n        this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n        this.__ctx.drawImage(this.__canvas, 0, 0);\n        let color = this.__currentColor;\n        this.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${\n          color[2] * 255\n        }, ${color[3]})`;\n        this.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${\n          color[2] * 255\n        }, ${color[3]})`;\n      }\n    }\n    __afterDraw() {\n      this.__gl;\n      this.dirty = true;\n      this.stagedChanges = true;\n    }\n    __setColor(color) {\n      if (!this.__ctx || !color) return;\n      if (\n        this.__currentColor &&\n        this.__currentColor[0] == color[0] &&\n        this.__currentColor[1] == color[1] &&\n        this.__currentColor[2] == color[2] &&\n        this.__currentColor[3] == color[3]\n      )\n        return;\n      this.__ctx.strokeStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${\n        color[2] * 255\n      }, ${color[3]})`;\n      this.__ctx.fillStyle = `rgba(${color[0] * 255}, ${color[1] * 255}, ${\n        color[2] * 255\n      }, ${color[3]})`;\n      this.__currentColor = [color[0], color[1], color[2], color[3]];\n    }\n    fillRect(pos, size, color) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    fillCircle(pos, radius, color) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n      this.__ctx.fill();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    fillArc(pos, radius, startAngle, endAngle, color) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n      this.__ctx.fill();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    line(pos1, pos2, color, width = 1) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.__ctx.moveTo(pos1[0], pos1[1]);\n      this.__ctx.lineTo(pos2[0], pos2[1]);\n      this.__ctx.lineWidth = width;\n      this.__ctx.stroke();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    circle(pos, radius, color, width = 1) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n      this.__ctx.lineWidth = width;\n      this.__ctx.stroke();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    arc(pos, radius, startAngle, endAngle, color, width = 1) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n      this.__ctx.lineWidth = width;\n      this.__ctx.stroke();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    text(pos, text, color) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.fillText(text, pos[0], pos[1]);\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    startPath(pos) {\n      if (!this.__ctx) return;\n      this.flushPoints();\n      this.__beforeDraw();\n      this.__ctx.beginPath();\n      this.__ctx.moveTo(pos[0], pos[1]);\n    }\n    lineTo(pos) {\n      if (!this.__ctx) return;\n      this.__ctx.lineTo(pos[0], pos[1]);\n    }\n    strokePath(color, width = 1) {\n      if (!this.__ctx) return;\n      this.__ctx.lineWidth = width;\n      this.__setColor(color);\n      this.__ctx.stroke();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    fillPath(color) {\n      if (!this.__ctx) return;\n      this.__setColor(color);\n      this.__ctx.fill();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    setStrokeWidth(width) {\n      if (!this.__ctx) return;\n      this.__ctx.lineWidth = width;\n    }\n    setFont(font) {\n      if (!this.__ctx) return;\n      this.__ctx.font = font;\n    }\n    setFontSize(size) {\n      if (!this.__ctx) return;\n      this.__ctx.font = `${size}px ${this.__ctx.font\n        .split(\" \")\n        .slice(1)\n        .join(\" \")}`;\n    }\n    setTextAlign(align) {\n      if (!this.__ctx) return;\n      this.__ctx.textAlign = align;\n    }\n    setTextBaseline(baseline) {\n      if (!this.__ctx) return;\n      this.__ctx.textBaseline = baseline;\n    }\n    setLineCap(cap) {\n      if (!this.__ctx) return;\n      this.__ctx.lineCap = cap;\n    }\n    setLineJoin(join) {\n      if (!this.__ctx) return;\n      this.__ctx.lineJoin = join;\n    }\n    setMiterLimit(limit) {\n      if (!this.__ctx) return;\n      this.__ctx.miterLimit = limit;\n    }\n    setShadowColor(color) {\n      if (!this.__ctx) return;\n      this.__ctx.shadowColor = `rgba(${color[0] * 255}, ${color[1] * 255}, ${\n        color[2] * 255\n      }, ${color[3]})`;\n    }\n    setShadowBlur(blur) {\n      if (!this.__ctx) return;\n      this.__ctx.shadowBlur = blur;\n    }\n    setShadowOffset(offset) {\n      if (!this.__ctx) return;\n      this.__ctx.shadowOffsetX = offset[0];\n      this.__ctx.shadowOffsetY = offset[1];\n    }\n    setGlobalAlpha(alpha) {\n      if (!this.__ctx) return;\n      this.__ctx.globalAlpha = alpha;\n    }\n    setGlobalCompositeOperation(op) {\n      if (!this.__ctx) return;\n      this.__ctx.globalCompositeOperation = op;\n    }\n    setImageSmoothingEnabled(enabled) {\n      if (!this.__ctx) return;\n      this.__ctx.imageSmoothingEnabled = enabled;\n    }\n    setImageSmoothingQuality(quality) {\n      if (!this.__ctx) return;\n      this.__ctx.imageSmoothingQuality = quality;\n    }\n    setLineDash(dash) {\n      if (!this.__ctx) return;\n      this.__ctx.setLineDash(dash);\n    }\n    setLineDashOffset(offset) {\n      if (!this.__ctx) return;\n      this.__ctx.lineDashOffset = offset;\n    }\n    setTransform(a, b, c, d, e, f) {\n      if (!this.__ctx) return;\n      this.__ctx.setTransform(a, b, c, d, e, f);\n    }\n    resetTransform() {\n      if (!this.__ctx) return;\n      this.__ctx.resetTransform();\n    }\n    scale(v) {\n      if (!this.__ctx) return;\n      this.__ctx.scale(v[0], v[1]);\n    }\n    rotate(angle) {\n      if (!this.__ctx) return;\n      this.__ctx.rotate(angle);\n    }\n    translate(v) {\n      if (!this.__ctx) return;\n      this.__ctx.translate(v[0], v[1]);\n    }\n    flushPoints() {\n      if (!this.__ctx) return;\n      if (!this.fastPoints) return;\n      if (!this.fastPointsBuffer) return;\n      this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n      this.fastPoints = false;\n      this.fastPointsBuffer = null;\n      this.pointsCounter = 0;\n    }\n    point(pos, color) {\n      if (!this.__ctx) return;\n      this.pointsCounter++;\n      this.__beforeDraw();\n      if (this.pointsCounter > 10) {\n        if (!this.fastPoints) {\n          this.fastPoints = true;\n          this.cacheSize = [\n            this.__offscreen_canvas.width,\n            this.__offscreen_canvas.height,\n          ];\n          this.fastPointsBuffer = this.__ctx.getImageData(\n            0,\n            0,\n            this.cacheSize[0],\n            this.cacheSize[1]\n          );\n        }\n        if (!this.fastPointsBuffer) return;\n        let x = Math.floor(pos[0]);\n        let y = Math.floor(pos[1]);\n        let index = (y * this.cacheSize[0] + x) * 4;\n        if (!color) {\n          color = this.__currentColor;\n        }\n        let oldColorx = this.fastPointsBuffer.data[index] / 255;\n        let oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n        let oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n        let oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n        this.fastPointsBuffer.data[index] =\n          color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n        this.fastPointsBuffer.data[index + 1] =\n          color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n        this.fastPointsBuffer.data[index + 2] =\n          color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n        this.fastPointsBuffer.data[index + 3] =\n          color[3] * 255 + oldColora * 255 * (1 - color[3]);\n      } else {\n        this.__setColor(color);\n        this.__ctx.fillRect(pos[0], pos[1], 1, 1);\n      }\n      this.__afterDraw();\n    }\n    vector(\n      pos,\n      dir,\n      color = [0.9803921568627451, 0.8, 0.08235294117647059, 1],\n      width = 4\n    ) {\n      if (!this.__ctx || (dir[0] == 0 && dir[1] == 0)) return;\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.setStrokeWidth(width);\n      this.__ctx.moveTo(pos[0], pos[1]);\n      this.__ctx.lineCap = \"round\";\n      this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n      this.__ctx.stroke();\n      this.__ctx.beginPath();\n      this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n      let arrowSize = 20;\n      let arrowAngle = Math.PI / 5;\n      let dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n      let arrow1 = [\n        Math.cos(dirAngle + arrowAngle) * arrowSize,\n        Math.sin(dirAngle + arrowAngle) * arrowSize,\n      ];\n      let arrow2 = [\n        Math.cos(dirAngle - arrowAngle) * arrowSize,\n        Math.sin(dirAngle - arrowAngle) * arrowSize,\n      ];\n      this.__ctx.lineTo(\n        pos[0] + dir[0] + arrow1[0],\n        pos[1] + dir[1] + arrow1[1]\n      );\n      this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n      this.__ctx.lineTo(\n        pos[0] + dir[0] + arrow2[0],\n        pos[1] + dir[1] + arrow2[1]\n      );\n      this.__ctx.stroke();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n    grid(\n      center,\n      count,\n      gap,\n      color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1],\n      width = 2\n    ) {\n      if (!this.__ctx) return;\n      this.__beforeDraw();\n      this.__setColor(color);\n      this.__ctx.beginPath();\n      this.setStrokeWidth(width);\n      let start = [\n        center[0] - (count[0] / 2) * gap[0],\n        center[1] - (count[1] / 2) * gap[1],\n      ];\n      for (let i = 0; i <= count[0]; i++) {\n        this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n        this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n      }\n      for (let i = 0; i <= count[1]; i++) {\n        this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n        this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n      }\n      this.__ctx.stroke();\n      this.__afterDraw();\n      this.pointsCounter = 0;\n    }\n  }\n\n  const simpleHash = (str) => {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const char = str.charCodeAt(i);\n      hash = (hash << 5) - hash + char;\n      hash &= hash;\n    }\n    return new Uint32Array([hash])[0].toString(36);\n  };\n  class ShadeupShaderInstance {\n    parent;\n    bindings;\n    key;\n    version;\n    constructor(parentSource, bindings, key) {\n      this.parent = parentSource;\n      this.bindings = bindings;\n      this.key = key;\n      this.version = 0;\n    }\n    getKey() {\n      return `${this.key}_${this.version}`;\n    }\n    get(adapter, type, config) {\n      let shade = adapter.getOrCreateShader(this, type, config);\n      shade.uniqueSourceKey = this.getKey();\n      return shade;\n    }\n    bindUniforms(to) {\n      for (let k of Object.keys(this.parent.params.webgl)) {\n        let paramType = this.parent.params.webgl[k];\n        let val = this.bindings[k];\n        let uniVal = new UniformValue(paramType, val);\n        let uniformName = translateIdentifier(k);\n        to.uniforms.set(uniformName, uniVal);\n      }\n    }\n  }\n  class ShadeupShaderSource {\n    code;\n    params;\n    types;\n    arraySizes;\n    indexMapping;\n    key;\n    constructor(params, code, indexMapping) {\n      this.code = code;\n      this.params = params;\n      this.indexMapping = indexMapping;\n      this.types = {};\n      this.arraySizes = {};\n      this.key = simpleHash(JSON.stringify(code));\n    }\n    instance(bindings) {\n      return new ShadeupShaderInstance(this, bindings, this.key);\n    }\n  }\n\n  class ShadeupAssetLoader {\n    registeredLoads = [];\n    loadedAssets = /* @__PURE__ */ new Map();\n    primedTextureAssets = /* @__PURE__ */ new Map();\n    registeredLibs = /* @__PURE__ */ new Set();\n    engine;\n    constructor(engine) {\n      this.engine = engine;\n    }\n    reset() {\n      this.registeredLoads.splice(0, this.registeredLoads.length);\n      this.registeredLibs.clear();\n    }\n    async loadLib(name) {\n      if (name == \"rapier2d\") {\n        console.log(\"Loading rapier2d\");\n        window.RAPIER_2D = await import(\n          \"https://cdn.skypack.dev/@dimforge/rapier2d-compat\"\n        );\n        console.log(\"Loaded rapier2d\");\n        await window.RAPIER_2D.init();\n        console.log(\"Initialized rapier2d\");\n      } else if (name == \"rapier3d\") {\n        window.RAPIER_3D = await import(\n          \"https://cdn.skypack.dev/@dimforge/rapier3d-compat\"\n        );\n        await window.RAPIER_3D.init();\n      }\n    }\n    async loadLibs() {\n      console.log(\"Loading libs\", [...this.registeredLibs.keys()]);\n      await Promise.all(\n        [...this.registeredLibs.keys()].map(async (lib) => {\n          await this.loadLib(lib);\n        })\n      );\n    }\n    async loadAssets() {\n      let promises = [];\n      console.log(\"Loading assets\", [...this.registeredLoads.keys()]);\n      this.registeredLoads = this.registeredLoads.filter((load) => {\n        return !this.loadedAssets.has(load[0]);\n      });\n      for (let load of this.registeredLoads) {\n        promises.push(\n          (async () => {\n            let [key, type] = load;\n            let baseUrl = \"https://assets.shadeup.dev/\";\n            if (type == \"image\") {\n              await new Promise((resolve) => {\n                let img = new Image();\n                img.crossOrigin = \"anonymous\";\n                img.onerror = () => {\n                  console.error(\"Failed to load image \" + key);\n                  resolve();\n                };\n                img.onload = async () => {\n                  let canvas = document.createElement(\"canvas\");\n                  canvas.width = img.width;\n                  canvas.height = img.height;\n                  let ctx = canvas.getContext(\"2d\");\n                  if (ctx) ctx.drawImage(img, 0, 0);\n                  this.loadedAssets.set(key, canvas);\n                  let tex = window.shadeupMakeTextureInternal(\n                    [canvas.width, canvas.height],\n                    \"8bit\",\n                    \"uint8\"\n                  );\n                  tex.adapter?.drawImage(\n                    canvas,\n                    0,\n                    0,\n                    canvas.width,\n                    canvas.height\n                  );\n                  tex.adapter?.flush();\n                  if (tex.adapter instanceof WebGPUAdapter) {\n                    await tex.adapter.waitForDraw();\n                  }\n                  this.primedTextureAssets.set(key, tex);\n                  resolve();\n                };\n                img.src = baseUrl + key;\n              });\n            } else if (type == \"audio\") {\n              await new Promise((resolve) => {\n                let audio = new Audio();\n                audio.oncanplaythrough = () => {\n                  this.loadedAssets.set(key, audio);\n                  resolve();\n                };\n                audio.src = baseUrl + key;\n              });\n            } else if (type == \"video\") {\n              await new Promise((resolve) => {\n                let video = document.createElement(\"video\");\n                video.oncanplaythrough = () => {\n                  this.loadedAssets.set(key, video);\n                  resolve();\n                };\n                video.src = baseUrl + key;\n              });\n            } else {\n              let raw = fetch(baseUrl + key);\n              if (type == \"binary\") {\n                await raw\n                  .then((res) => res.arrayBuffer())\n                  .then((res) => {\n                    this.loadedAssets.set(key, res);\n                  });\n              } else if (type == \"text\") {\n                await raw\n                  .then((res) => res.text())\n                  .then((res) => {\n                    this.loadedAssets.set(key, res);\n                  });\n              } else if (type == \"model\") {\n                await raw\n                  .then((res) => res.arrayBuffer())\n                  .then(async (res) => {\n                    const { GLTFLoader } = await Promise.resolve().then(\n                      () => GLTFLoader$1\n                    );\n                    const {\n                      Vector3,\n                      Mesh: THREEMesh,\n                      MeshStandardMaterial,\n                    } = await Promise.resolve().then(() => three_module);\n                    const { DRACOLoader } = await Promise.resolve().then(\n                      () => DRACOLoader$1\n                    );\n                    const dracoLoader = new DRACOLoader();\n                    dracoLoader.setDecoderPath(\"/lib/draco/\");\n                    const loader = new GLTFLoader();\n                    loader.setDRACOLoader(dracoLoader);\n                    let out = await new Promise((reso, rej) => {\n                      loader.parse(\n                        res,\n                        \"\",\n                        (d) => {\n                          reso(d);\n                        },\n                        (e) => {\n                          rej(e);\n                        }\n                      );\n                    });\n                    let parts = [];\n                    let scene = out.scene;\n                    function convertMesh(mesh) {\n                      let positions = [];\n                      let normals = [];\n                      let tangents = [];\n                      let bitangents = [];\n                      let uvs = [];\n                      let colors = [];\n                      let indices = [];\n                      if (mesh.geometry.index) {\n                        for (let i = 0; i < mesh.geometry.index.count; i++) {\n                          indices.push(mesh.geometry.index?.array[i]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.position) {\n                        for (\n                          let i = 0;\n                          i < mesh.geometry.attributes.position.array.length;\n                          i += 3\n                        ) {\n                          positions.push([\n                            mesh.geometry.attributes.position.array[i],\n                            mesh.geometry.attributes.position.array[i + 1],\n                            mesh.geometry.attributes.position.array[i + 2],\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.normal) {\n                        for (\n                          let i = 0;\n                          i < mesh.geometry.attributes.normal.array.length;\n                          i += 3\n                        ) {\n                          normals.push([\n                            mesh.geometry.attributes.normal.array[i],\n                            mesh.geometry.attributes.normal.array[i + 1],\n                            mesh.geometry.attributes.normal.array[i + 2],\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.tangent) {\n                        for (\n                          let i = 0;\n                          i < mesh.geometry.attributes.tangent.array.length;\n                          i += 4\n                        ) {\n                          tangents.push([\n                            mesh.geometry.attributes.tangent.array[i],\n                            mesh.geometry.attributes.tangent.array[i + 1],\n                            mesh.geometry.attributes.tangent.array[i + 2],\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.bitangent) {\n                        for (\n                          let i = 0;\n                          i < mesh.geometry.attributes.bitangent.array.length;\n                          i += 3\n                        ) {\n                          bitangents.push([\n                            mesh.geometry.attributes.bitangent.array[i],\n                            mesh.geometry.attributes.bitangent.array[i + 1],\n                            mesh.geometry.attributes.bitangent.array[i + 2],\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.uv) {\n                        for (\n                          let i = 0;\n                          i < mesh.geometry.attributes.uv.array.length;\n                          i += 2\n                        ) {\n                          uvs.push([\n                            mesh.geometry.attributes.uv.array[i],\n                            mesh.geometry.attributes.uv.array[i + 1],\n                          ]);\n                        }\n                      }\n                      if (mesh.geometry.attributes.color) {\n                        for (\n                          let i = 0;\n                          i < mesh.geometry.attributes.color.array.length;\n                          i += 4\n                        ) {\n                          colors.push([\n                            mesh.geometry.attributes.color.array[i],\n                            mesh.geometry.attributes.color.array[i + 1],\n                            mesh.geometry.attributes.color.array[i + 2],\n                            mesh.geometry.attributes.color.array[i + 3],\n                          ]);\n                        }\n                      }\n                      let m = new window.SHD_Mesh({});\n                      m.vertices = positions;\n                      m.normals = normals;\n                      m.uvs = uvs;\n                      m.colors = colors;\n                      m.triangles = indices;\n                      return m;\n                    }\n                    let that = this;\n                    function convertTexMap(map) {\n                      let t = that.engine.shadeupMakeTextureFromImageLike(\n                        map.source.data\n                      );\n                      return t;\n                    }\n                    scene.traverse((obj) => {\n                      if (obj instanceof THREEMesh && obj.isMesh) {\n                        let mobj = obj;\n                        let m = convertMesh(mobj);\n                        let mat = mobj.material;\n                        let part = new window.SHD_ModelPart({});\n                        if (!Array.isArray(mat)) {\n                          let shdMat = new window.SHD_Material({});\n                          if (mat instanceof MeshStandardMaterial) {\n                            shdMat.baseColor = [\n                              mat.color.r,\n                              mat.color.g,\n                              mat.color.b,\n                              1,\n                            ];\n                            if (mat.normalMap) {\n                              shdMat.normal = convertTexMap(mat.normalMap);\n                              shdMat.normalScale = [\n                                mat.normalScale.x,\n                                mat.normalScale.y,\n                              ];\n                            }\n                            if (mat.map) {\n                              shdMat.color = convertTexMap(mat.map);\n                            }\n                            if (mat.metalnessMap) {\n                              shdMat.metallic = convertTexMap(mat.metalnessMap);\n                            }\n                            if (mat.roughnessMap) {\n                              shdMat.roughness = convertTexMap(\n                                mat.roughnessMap\n                              );\n                            }\n                            if (mat.emissiveMap) {\n                              shdMat.emissive = convertTexMap(mat.emissiveMap);\n                            }\n                            part.material = shdMat;\n                          }\n                        }\n                        part.mesh = m;\n                        let world = obj.getWorldPosition(new Vector3());\n                        part.position = [world.x, world.y, world.z];\n                        parts.push(part);\n                      }\n                    });\n                    let model = new window.SHD_Model({});\n                    model.parts = parts;\n                    this.loadedAssets.set(key, model);\n                  });\n              }\n            }\n          })()\n        );\n      }\n      await Promise.all(promises);\n      console.log(\"Loaded assets\", [...this.loadedAssets.keys()]);\n    }\n  }\n\n  class ShadeupEngine {\n    adapter;\n    playing = true;\n    timeMultiplier = 1;\n    canvas;\n    paint;\n    shadeup_globals = {};\n    textureDestroyQueue = [];\n    errCount = 0;\n    isFirstFrame = true;\n    hasLoadedCode = false;\n    assetLoader;\n    inputValues = /* @__PURE__ */ new Map();\n    frameFunc = async () => {};\n    env = {\n      camera:\n        window?.env?.camera ??\n        (window._makeCamera ? new window._makeCamera({}) : null),\n      camera2d:\n        window?.env?.camera2d ??\n        (window._makeCamera2d ? new window._makeCamera2d({}) : null),\n      deltaTime: 0,\n      time: 0,\n      frame: 0,\n      screenSize: [0, 0],\n      keyboard: { ...blankKeyboardState },\n      mouse: {\n        button: [false, false, false],\n        clicked: [false, false, false],\n        screen: [0, 0],\n        uv: [0, 0],\n        startScreen: [0, 0],\n        startUv: [0, 0],\n        deltaUv: [0, 0],\n        frameDeltaUv: [0, 0],\n        deltaScreen: [0, 0],\n        frameDeltaScreen: [0, 0],\n        dragging: false,\n        velocity: 0,\n        wheel: 0,\n        focused: false,\n      },\n      configureCamera(options) {},\n      input(key, defaultValue) {\n        return defaultValue;\n      },\n      output(key, value) {},\n    };\n    stats = /* @__PURE__ */ new Map();\n    statsGraph = /* @__PURE__ */ new Map();\n    statsMark = /* @__PURE__ */ new Map();\n    statsGraphMark = /* @__PURE__ */ new Map();\n    hooks = [];\n    preferredAdapter = \"webgpu\";\n    constructor(canvas, adapter) {\n      this.canvas = canvas;\n      this.adapter = adapter;\n      this.paint = new PaintingContext(canvas, adapter);\n      this.assetLoader = new ShadeupAssetLoader(this);\n      window[\"paint\"] = this.paint;\n      this.env.input = (key, defaultValue) => {\n        return this.inputValues.get(key) ?? defaultValue;\n      };\n      this.env.output = function output(key, value) {\n        window.parent.postMessage({ type: \"output\", key, value }, \"*\");\n      };\n      this.addCoreHook();\n    }\n    _SHADEUP_UI_PUCK = () => {};\n    _SHADEUP_UI_SLIDER = () => {};\n    _SHADEUP_UI_CONTROL = () => {};\n    shadeupMakeTextureInternal(size, format, innerType = \"float4\") {\n      if (size.length == 3) {\n        size = [Math.floor(size[0]), Math.floor(size[1]), Math.floor(size[2])];\n        let tex2 = new ShadeupTexture3d();\n        tex2.innerType = innerType;\n        tex2.size = size;\n        tex2.width = size[0];\n        tex2.height = size[1];\n        tex2.depth = size[2];\n        if (this.preferredAdapter == \"webgl\") {\n          tex2.adapter = new WebGLAdapter(null);\n        } else if (this.preferredAdapter == \"webgpu\") {\n          tex2.adapter = new WebGPUAdapter(null);\n          let webgpu = tex2.adapter;\n          webgpu.textureFormat = tex2.innerType;\n          webgpu.headless = true;\n          webgpu.headlessHeight = tex2.height;\n          webgpu.headlessWidth = tex2.width;\n          webgpu.headlessDepth = tex2.depth;\n          webgpu.headlessDimensions = 3;\n        } else {\n          throw new Error(\"No adapter found\");\n        }\n        tex2.adapter.init();\n        tex2.adapter.setViewport(0, 0);\n        return tex2;\n      }\n      size = [Math.floor(size[0]), Math.floor(size[1])];\n      let tex = new ShadeupTexture2d();\n      tex.innerType = innerType;\n      tex.size = size;\n      tex.width = size[0];\n      tex.height = size[1];\n      tex.image = document.createElement(\"canvas\");\n      tex.image.width = tex.width;\n      tex.image.height = tex.height;\n      if (this.preferredAdapter == \"webgl\") {\n        tex.adapter = new WebGLAdapter(tex.image);\n      } else if (this.preferredAdapter == \"webgpu\") {\n        let gpuTextureFormat = \"rgba8unorm\";\n        if (format == \"auto\") {\n          format = innerType == \"uint8\" ? \"8bit\" : \"32bit\";\n        }\n        gpuTextureFormat = FormatInnerTypeMapping[`${format}-${innerType}`];\n        tex.adapter = new WebGPUAdapter(tex.image);\n        let webgpu = tex.adapter;\n        webgpu.textureFormat = tex.innerType;\n        webgpu.gpuTextureFormat = gpuTextureFormat;\n        webgpu.headless = true;\n        webgpu.headlessHeight = tex.height;\n        webgpu.headlessWidth = tex.width;\n      } else {\n        throw new Error(\"No adapter found\");\n      }\n      tex.init();\n      tex.adapter.init();\n      tex.adapter.setViewport(tex.width, tex.height);\n      tex.paint = new PaintingContext(tex.image, tex.adapter);\n      tex.paint.markDirtyCallback = () => {\n        tex.cpuFlush();\n        tex.dirty = true;\n        tex.cpuReadDirty = true;\n        tex.version++;\n      };\n      tex.adapter.clear(true);\n      return tex;\n    }\n    shadeupMakeTextureFromImageLike(img) {\n      let tex = this.shadeupMakeTextureInternal(\n        [img.width, img.height],\n        \"8bit\",\n        \"uint8\"\n      );\n      let canvas = document.createElement(\"canvas\");\n      canvas.width = img.width;\n      canvas.height = img.height;\n      let ctx = canvas.getContext(\"2d\");\n      ctx?.drawImage(img, 0, 0);\n      tex.adapter?.drawImage(canvas, 0, 0, img.width, img.height);\n      tex.adapter?.flush();\n      return tex;\n    }\n    reset() {\n      for (let hook of this.hooks) {\n        if (hook.reset) {\n          try {\n            hook.reset();\n          } catch (e) {\n            console.error(e);\n          }\n        }\n      }\n    }\n    addCoreHook() {\n      let lastFrame = performance.now();\n      let timeCounter = 0;\n      let frameCount = 0;\n      this.hooks.push({\n        beforeFrame: () => {\n          if (!this.playing) return;\n          if (\n            this.canvas.width != this.adapter.viewportSize[0] ||\n            this.canvas.height != this.adapter.viewportSize[1]\n          ) {\n            this.adapter.setViewport(this.canvas.width, this.canvas.height);\n          }\n          if (\n            this.canvas.width != this.paint.__offscreen_canvas.width ||\n            this.canvas.height != this.paint.__offscreen_canvas.height\n          ) {\n            this.paint.__offscreen_canvas.width = this.canvas.width;\n            this.paint.__offscreen_canvas.height = this.canvas.height;\n          }\n          let delta = performance.now() - lastFrame;\n          lastFrame = performance.now();\n          timeCounter += (delta / 1e3) * this.timeMultiplier;\n          frameCount += 1 * this.timeMultiplier;\n          this.env.deltaTime = (delta / 1e3) * this.timeMultiplier;\n          this.env.time = timeCounter;\n          this.env.frame = frameCount;\n          this.env.screenSize = [this.canvas.width, this.canvas.height];\n        },\n        reset: () => {\n          lastFrame = performance.now();\n          timeCounter = 0;\n          frameCount = 0;\n        },\n      });\n    }\n    __shadeup_print(...args) {}\n    __shadeup_stat(name, value) {}\n    __shadeup_statGraph(name, value, sampleRate = 1) {}\n    clear() {\n      try {\n        this.adapter.clear();\n      } catch (e) {\n        console.error(e);\n      }\n    }\n    async loadLib(name) {\n      this.assetLoader.loadLib(name);\n    }\n    async loadLibs() {\n      this.assetLoader.loadLibs();\n    }\n    async loadAssets() {\n      this.assetLoader.loadAssets();\n    }\n    __shadeup_register_loads = (ids) => {\n      this.assetLoader.registeredLoads.push(...ids);\n    };\n    __shadeup_register_libs(libs) {\n      for (let lib of libs) {\n        this.assetLoader.registeredLibs.add(lib);\n      }\n    }\n    load(id) {\n      let asset = this.assetLoader.loadedAssets.get(id);\n      if (!asset) {\n        throw new Error(\"Asset not found\");\n      }\n      if (asset instanceof HTMLCanvasElement) {\n        if (this.assetLoader.primedTextureAssets.has(id)) {\n          let a = this.assetLoader.primedTextureAssets.get(id);\n          this.assetLoader.primedTextureAssets.delete(id);\n          return a;\n        }\n        let tex = window.shadeupMakeTextureInternal(\n          [asset.width, asset.height],\n          \"8bit\",\n          \"uint8\"\n        );\n        tex.adapter?.drawImage(asset, 0, 0, asset.width, asset.height);\n        tex.adapter?.flush();\n        return tex;\n      } else if (asset && asset.clone) {\n        return asset.clone();\n      }\n      return asset;\n    }\n    async frameLoop() {\n      for (let hook of this.hooks) {\n        if (hook.beforeFrame) {\n          try {\n            hook.beforeFrame(this.env.deltaTime);\n          } catch (e) {\n            console.error(e);\n          }\n        }\n      }\n      if (this.playing) {\n        try {\n          if (this.adapter instanceof WebGPUAdapter) {\n          } else {\n            this.clear();\n          }\n          await this.frameFunc();\n          paint.flush();\n          this.adapter.flush();\n          if (this.adapter instanceof WebGPUAdapter) {\n            this.adapter.trace(\"endFrame\\n\\n\", {});\n          }\n          this.adapter.switchContext(\"draw\");\n          for (let tex of this.textureDestroyQueue) {\n            if (tex.adapter) {\n              tex.adapter.dispose();\n            }\n          }\n          this.textureDestroyQueue = [];\n        } catch (e) {\n          if (this.errCount < 10) {\n            console.error(e);\n            if (window.bubbleError) window.bubbleError(e.toString() + e.stack);\n            this.errCount++;\n            if (this.errCount === 10) {\n              console.warn(\"Too many errors, slowing logs\");\n            }\n          } else {\n            this.errCount++;\n            if (this.errCount % 100 === 0) {\n              if (window.bubbleError)\n                window.bubbleError(e.toString() + e.stack);\n              console.error(e);\n            }\n          }\n        }\n        for (let hook of this.hooks) {\n          if (hook.afterFrame) {\n            try {\n              hook.afterFrame(this.env.deltaTime);\n            } catch (e) {\n              console.error(e);\n            }\n          }\n        }\n        for (let statKey of this.stats.keys()) {\n          if ((this.statsMark.get(statKey) ?? 0) <= 0) {\n            this.stats.get(statKey)?.remove();\n            this.stats.delete(statKey);\n            this.statsMark.delete(statKey);\n          } else {\n            this.statsMark.set(statKey, this.statsMark.get(statKey) - 1);\n          }\n        }\n        for (let statKey of this.statsGraph.keys()) {\n          if ((this.statsGraphMark.get(statKey) ?? 0) <= 0) {\n            this.statsGraph.get(statKey)?.graph.parentElement?.remove();\n            this.statsGraph.delete(statKey);\n            this.statsGraphMark.delete(statKey);\n          } else {\n            this.statsGraphMark.set(\n              statKey,\n              this.statsGraphMark.get(statKey) - 1\n            );\n          }\n        }\n        if (this.isFirstFrame && this.hasLoadedCode) {\n          this.isFirstFrame = false;\n          (async () => {\n            await this.adapter.waitForDraw();\n            window.parent.postMessage({ type: \"firstFrame\" }, \"*\");\n          })();\n        }\n      }\n    }\n    flushAdapter() {\n      this.adapter.flush();\n    }\n    __shadeup_gen_native_shader(code, type) {\n      return this.adapter.createShader(code, type);\n    }\n    fullscreenVertexShader = null;\n    registeredShaders = /* @__PURE__ */ new Map();\n    __shadeup_gen_shader(key, params, code, indexMapping) {\n      this.registeredShaders.set(\n        key,\n        new ShadeupShaderSource(params, code, indexMapping)\n      );\n    }\n    __shadeup_make_shader_inst(key, params, closure) {\n      let shader = this.registeredShaders.get(key);\n      if (!shader) {\n        throw new Error(\"Shader not found\");\n      }\n      return shader.instance(params);\n    }\n    __shadeup_dispatch_compute(workgroups, shaderInst) {\n      let computeCall = new ShaderDispatch(\"compute\");\n      computeCall.computeCount = workgroups;\n      let compShader = shaderInst.get(this.adapter, \"compute\", {\n        initialDispatch: shaderInst,\n      });\n      if (!compShader) {\n        throw new Error(\"Fragment shader not found\");\n      }\n      computeCall.setComputeShader(compShader);\n      shaderInst.bindUniforms(computeCall.fragmentUniforms);\n      if (this.adapter instanceof WebGPUAdapter) {\n        this.adapter.dispatchCompute(computeCall);\n      } else {\n        throw new Error(\"WebGL compute not supported\");\n      }\n    }\n    __shadeup_dispatch_compute_indirect(\n      indirectBuffer,\n      indirectOffset,\n      shaderInst\n    ) {\n      let computeCall = new ShaderDispatch(\"compute\");\n      computeCall.indirectBuffer = indirectBuffer;\n      computeCall.indirectOffset = indirectOffset;\n      let compShader = shaderInst.get(this.adapter, \"compute\", {\n        initialDispatch: shaderInst,\n      });\n      if (!compShader) {\n        throw new Error(\"Fragment shader not found\");\n      }\n      computeCall.setComputeShader(compShader);\n      shaderInst.bindUniforms(computeCall.fragmentUniforms);\n      if (this.adapter instanceof WebGPUAdapter) {\n        this.adapter.dispatchCompute(computeCall);\n      } else {\n        throw new Error(\"WebGL compute not supported\");\n      }\n    }\n    __shadeup_dispatch_draw_advanced(config) {\n      let drawCall = new ShaderDispatch(\"draw\");\n      if (config.mesh) {\n        drawCall.drawType = \"geometry\";\n      } else if (config.indexBuffer) {\n        drawCall.drawType = \"indexed\";\n      }\n      if (config.depth) {\n        drawCall.overrideDepth = config.depth;\n      }\n      if (config.depthCompare) {\n        drawCall.depthCompare = config.depthCompare;\n      }\n      if (\"backfaceCulling\" in config) {\n        drawCall.backfaceCulling = config.backfaceCulling;\n      }\n      if (config.indirect) {\n        drawCall.indirectBuffer = config.indirect;\n      }\n      drawCall.instanceCount = config.instances ?? 1;\n      drawCall.attachments = config.attachments ?? null;\n      drawCall.depthOnly = config.depthOnly ?? false;\n      let fragShader = config.fragment.get(this.adapter, \"fragment\", {\n        attachments: config.attachments\n          ? config.attachments.map((a) => a.innerType)\n          : void 0,\n      });\n      if (!fragShader) {\n        throw new Error(\"Fragment shader not found\");\n      }\n      drawCall.setFragmentShader(fragShader);\n      let vertShader = config.vertex.get(this.adapter, \"vertex\");\n      if (!vertShader) {\n        throw new Error(\"Vertex shader not found\");\n      }\n      drawCall.setVertexShader(vertShader);\n      config.fragment.bindUniforms(drawCall.fragmentUniforms);\n      config.vertex.bindUniforms(drawCall.vertexUniforms);\n      if (config.mesh) {\n        drawCall.setGeometry(config.mesh);\n      } else if (config.indexBuffer) {\n        drawCall.setIndexBuffer(config.indexBuffer);\n      }\n      this.adapter.dispatch(drawCall, {\n        depthTest: config.depthTest ?? true,\n      });\n    }\n    __shadeup_dispatch_draw(pixelShaderInst) {\n      if (!this.fullscreenVertexShader) {\n        this.fullscreenVertexShader = this.__shadeup_gen_native_shader(\n          {\n            webgl: `#version 300 es\n\t\t\n\t\tprecision highp float;\n\t\t\n\t\tin vec3 a_position;\n\t\tin vec3 a_normal;\n\t\tin vec3 a_tangent;\n\t\tin vec3 a_bitangent;\n\t\tin vec2 a_uv;\n\t\tin vec4 a_color;\n\n\t\tout vec3 _v_position;\n\t\tout vec3 _v_normal;\n\t\tout vec3 _v_tangent;\n\t\tout vec3 _v_bitangent;\n\t\tout vec2 _v_uv;\n\t\tout vec4 _v_color;\n\t\t\n\t\tvoid main(void) {\n\t\tfloat x = float((gl_VertexID & 1) << 2);\n\t\tfloat y = float((gl_VertexID & 2) << 1);\n\t\t_v_uv.x = x * 0.5;\n\t\t_v_uv.y = 1.f - (y * 0.5);\n\t\tgl_Position = vec4(x - 1.0, y - 1.0, 0, 1);\n\t\t}`,\n            webgpu: `\n\t\t\tstruct VertexOutput {\n\t\t\t\t@builtin(position) Position : vec4<f32>,\n\t\t\t\t@location(0) Normal : vec3<f32>,\n\t\t\t\t@location(1) Tangent : vec3<f32>,\n\t\t\t\t@location(2) Bitangent : vec3<f32>,\n\t\t\t\t@location(3) TexCoord : vec2<f32>,\n\t\t\t\t@location(4) Color : vec4<f32>,\n\t\t\t\t@location(5) @interpolate(flat) instanceIndex : u32,\n\t\t\t\t@location(6) WorldPosition : vec3<f32>,\n\t\t\t};\n\t\t\n\t\t\t@vertex\n\t\t\tfn main(\n\t\t\t\t@builtin(vertex_index) VertexIndex : u32\n\t\t\t) -> VertexOutput {\n\t\t\t\tvar x : f32 = f32((VertexIndex & 1) << 2);\n\t\t\t\tvar y : f32 = f32((VertexIndex & 2) << 1);\n\t\t\t\tvar output : VertexOutput;\n\t\t\t\toutput.Position = vec4<f32>(x - 1.0, y - 1.0, 0, 1);\n\t\t\t\toutput.Normal = vec3<f32>(1.0, 0.0, 0.0);\n\t\t\t\toutput.Tangent = vec3<f32>(0.0, 1.0, 0.0);\n\t\t\t\toutput.Bitangent = vec3<f32>(0.0, 0.0, 1.0);\n\t\t\t\toutput.TexCoord = vec2<f32>(x * 0.5, 1.0 - (y * 0.5));\n\t\t\t\toutput.Color = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t\t\toutput.instanceIndex = 0;\n\t\t\n\t\t\t\treturn output;\n\t\t\t}\n\t\t\t`,\n            software: () => {},\n          },\n          \"vertex\"\n        );\n      }\n      if (!this.fullscreenVertexShader) {\n        throw new Error(\"Fullscreen vertex shader not found\");\n      }\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"screen\";\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.canvas.width, this.canvas.height]\n        )\n      );\n      drawCall.setVertexShader(this.fullscreenVertexShader);\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\", {\n        initialDispatch: pixelShaderInst,\n      });\n      if (!fragShader) {\n        throw new Error(\"Fragment shader not found\");\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      drawCall.setGeometry(fullscreenGeo);\n      this.adapter.dispatch(drawCall, {\n        depthTest: false,\n      });\n    }\n    PLATFORM_WEBGL = this.preferredAdapter == \"webgl\";\n    PLATFORM_WEBGPU = this.preferredAdapter == \"webgpu\";\n    __shadeup_dispatch_draw_geometry(\n      geometry,\n      vertexShaderInst,\n      pixelShaderInst\n    ) {\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"geometry\";\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.canvas.width, this.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setGeometry(geometry);\n      this.adapter.dispatch(drawCall);\n    }\n    __shadeup_dispatch_draw_indexed(\n      indexBuffer,\n      vertexShaderInst,\n      pixelShaderInst\n    ) {\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"indexed\";\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.canvas.width, this.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setIndexBuffer(indexBuffer);\n      this.adapter.dispatch(drawCall);\n    }\n    __shadeup_dispatch_draw_instanced_indexed(\n      indexBuffer,\n      instanceCount,\n      vertexShaderInst,\n      pixelShaderInst\n    ) {\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"indexed\";\n      drawCall.instanceCount = instanceCount;\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.canvas.width, this.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setIndexBuffer(indexBuffer);\n      this.adapter.dispatch(drawCall);\n    }\n    __shadeup_dispatch_draw_instanced(\n      mesh,\n      instanceCount,\n      vertexShaderInst,\n      pixelShaderInst\n    ) {\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"geometry\";\n      drawCall.instanceCount = instanceCount;\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.canvas.width, this.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      drawCall.setGeometry(mesh);\n      this.adapter.dispatch(drawCall);\n    }\n    __shadeup_dispatch_draw_count(count, vertexShaderInst, pixelShaderInst) {\n      let drawCall = new ShaderDispatch(\"draw\");\n      drawCall.drawType = \"count\";\n      drawCall.drawCount = count;\n      drawCall.setVertexUniform(\n        \"_vtex_canvas\",\n        makePrimitiveUniform(\n          {\n            type: \"primitive\",\n            name: \"float2\",\n          },\n          [this.canvas.width, this.canvas.height]\n        )\n      );\n      let fragShader = pixelShaderInst.get(this.adapter, \"fragment\");\n      if (!fragShader) {\n        return;\n      }\n      drawCall.setFragmentShader(fragShader);\n      pixelShaderInst.bindUniforms(drawCall.fragmentUniforms);\n      let vertShader = vertexShaderInst.get(this.adapter, \"vertex-indexed\");\n      if (!vertShader) {\n        return;\n      }\n      drawCall.setVertexShader(vertShader);\n      vertexShaderInst.bindUniforms(drawCall.vertexUniforms);\n      this.adapter.dispatch(drawCall);\n    }\n    __shadeup_structs;\n    __shadeup_get_struct(name) {\n      if (!this.__shadeup_structs) this.__shadeup_structs = {};\n      return this.__shadeup_structs[name];\n    }\n    __shadeup_register_struct(fields, cls) {\n      if (!this.__shadeup_structs) this.__shadeup_structs = {};\n      this.__shadeup_structs[fields.name] = { fields, struct: cls };\n    }\n    __shadeup_error(err, context) {\n      return err || context;\n    }\n    killed = false;\n    useAnimationFrame = true;\n    start() {\n      (async () => {\n        do {\n          await this.frameLoop();\n          if (this.adapter instanceof WebGPUAdapter);\n          if (this.useAnimationFrame) {\n            await new Promise(requestAnimationFrame);\n          } else {\n            await new Promise(setZeroTimeout);\n          }\n        } while (true);\n      })();\n    }\n  }\n\n  const addInputHook = (engine) => {\n    let keyboardSink = /* @__PURE__ */ new Map();\n    let lastFrameMousePosition = [0, 0];\n    let mouseState = {\n      button: [false, false, false],\n      clicked: [false, false, false],\n      screen: [0, 0],\n      uv: [0, 0],\n      startScreen: [0, 0],\n      startUv: [0, 0],\n      deltaUv: [0, 0],\n      frameDeltaUv: [0, 0],\n      deltaScreen: [0, 0],\n      frameDeltaScreen: [0, 0],\n      dragging: false,\n      velocity: 0,\n      wheel: 0,\n      focused: false,\n    };\n    let { getKeyboardState } = initInput(\n      engine.canvas,\n      mouseState,\n      keyboardSink\n    );\n    return {\n      beforeFrame(delta) {\n        if (!engine.playing) return;\n        let lastFramePos = lastFrameMousePosition;\n        mouseState.frameDeltaScreen = [\n          mouseState.screen[0] - lastFramePos[0],\n          mouseState.screen[1] - lastFramePos[1],\n        ];\n        let lastFramePosUv = [\n          lastFramePos[0] / engine.canvas.width,\n          lastFramePos[1] / engine.canvas.height,\n        ];\n        mouseState.frameDeltaUv = [\n          mouseState.uv[0] - lastFramePosUv[0],\n          mouseState.uv[1] - lastFramePosUv[1],\n        ];\n        mouseState.velocity = Math.sqrt(\n          mouseState.frameDeltaScreen[0] ** 2 +\n            mouseState.frameDeltaScreen[1] ** 2\n        );\n        lastFrameMousePosition = [...mouseState.screen];\n        engine.env.keyboard = getKeyboardState();\n        engine.env.mouse = {\n          ...mouseState,\n        };\n      },\n      afterFrame() {\n        mouseState.clicked[0] = false;\n        mouseState.clicked[1] = false;\n        mouseState.clicked[2] = false;\n      },\n    };\n  };\n\n  function isAbsolute(pathname) {\n    return pathname.charAt(0) === \"/\";\n  }\n\n  // About 1.5x faster than the two-arg version of Array#splice()\n  function spliceOne(list, index) {\n    for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n      list[i] = list[k];\n    }\n\n    list.pop();\n  }\n\n  // This implementation is based heavily on node's url.parse\n  function resolvePathname(to, from) {\n    if (from === undefined) from = \"\";\n\n    var toParts = (to && to.split(\"/\")) || [];\n    var fromParts = (from && from.split(\"/\")) || [];\n\n    var isToAbs = to && isAbsolute(to);\n    var isFromAbs = from && isAbsolute(from);\n    var mustEndAbs = isToAbs || isFromAbs;\n\n    if (to && isAbsolute(to)) {\n      // to is absolute\n      fromParts = toParts;\n    } else if (toParts.length) {\n      // to is relative, drop the filename\n      fromParts.pop();\n      fromParts = fromParts.concat(toParts);\n    }\n\n    if (!fromParts.length) return \"/\";\n\n    var hasTrailingSlash;\n    if (fromParts.length) {\n      var last = fromParts[fromParts.length - 1];\n      hasTrailingSlash = last === \".\" || last === \"..\" || last === \"\";\n    } else {\n      hasTrailingSlash = false;\n    }\n\n    var up = 0;\n    for (var i = fromParts.length; i >= 0; i--) {\n      var part = fromParts[i];\n\n      if (part === \".\") {\n        spliceOne(fromParts, i);\n      } else if (part === \"..\") {\n        spliceOne(fromParts, i);\n        up++;\n      } else if (up) {\n        spliceOne(fromParts, i);\n        up--;\n      }\n    }\n\n    if (!mustEndAbs) for (; up--; up) fromParts.unshift(\"..\");\n\n    if (\n      mustEndAbs &&\n      fromParts[0] !== \"\" &&\n      (!fromParts[0] || !isAbsolute(fromParts[0]))\n    )\n      fromParts.unshift(\"\");\n\n    var result = fromParts.join(\"/\");\n\n    if (hasTrailingSlash && result.substr(-1) !== \"/\") result += \"/\";\n\n    return result;\n  }\n\n  function globalDefine(name, deps, callback) {\n    if (typeof name !== \"string\") {\n      callback = deps;\n      deps = name;\n      name = null;\n    }\n    if (!Array.isArray(deps)) {\n      callback = deps;\n      deps = [];\n    }\n    if (!deps.length && callback.length) {\n      if (callback.length === 1) {\n        deps = [\"require\"];\n      } else if (callback.length === 2) {\n        deps = [\"require\", \"exports\"];\n      } else {\n        deps = [\"require\", \"exports\", \"module\"];\n      }\n    }\n    globalDefine.amd[name] = {\n      deps,\n      callback,\n    };\n  }\n  globalDefine.amd = {\n    require: {\n      deps: [],\n      callback: function () {\n        return globalRequire;\n      },\n    },\n    exports: {\n      deps: [],\n      callback: function () {\n        return {};\n      },\n    },\n  };\n  function globalRequire(deps) {\n    let result = [];\n    for (let i = 0; i < deps.length; i++) {\n      let dep = deps[i];\n      if (dep !== \"require\" && dep !== \"exports\" && dep !== \"module\") {\n        dep = resolvePathname(dep, \"/\");\n        if (!(dep in globalDefine.amd)) {\n          if (!dep.endsWith(\".js\")) {\n            dep += \".js\";\n          }\n        }\n      }\n      if (dep in globalDefine.amd) {\n        let deps2 = globalDefine.amd[dep].deps;\n        let depsResults = [];\n        for (let d of deps2) {\n          depsResults.push(globalRequire([d])[0]);\n        }\n        let callback = globalDefine.amd[dep].callback;\n        let exports = callback.apply(null, depsResults);\n        if (deps2.indexOf(\"exports\") !== -1) {\n          exports = depsResults[deps2.indexOf(\"exports\")];\n        }\n        result.push(exports);\n      } else {\n        throw new Error(`Cannot find module '${dep}'`);\n      }\n    }\n    return result;\n  }\n\n  function makeAMDResolver() {\n    function globalDefine(name, deps, callback) {\n      if (typeof name !== \"string\") {\n        callback = deps;\n        deps = name;\n        name = null;\n      }\n      if (!Array.isArray(deps)) {\n        callback = deps;\n        deps = [];\n      }\n      if (!deps.length && callback.length) {\n        if (callback.length === 1) {\n          deps = [\"require\"];\n        } else if (callback.length === 2) {\n          deps = [\"require\", \"exports\"];\n        } else {\n          deps = [\"require\", \"exports\", \"module\"];\n        }\n      }\n      globalDefine.amd[name] = {\n        deps,\n        callback,\n      };\n    }\n    globalDefine.amd = {\n      require: {\n        deps: [],\n        callback: function () {\n          return globalRequire;\n        },\n      },\n      exports: {\n        deps: [],\n        callback: function () {\n          return {};\n        },\n      },\n    };\n    function globalRequire(deps) {\n      let result = [];\n      for (let i = 0; i < deps.length; i++) {\n        let dep = deps[i];\n        if (dep !== \"require\" && dep !== \"exports\" && dep !== \"module\") {\n          dep = resolvePathname(dep, \"/\");\n          if (!(dep in globalDefine.amd)) {\n            if (!dep.endsWith(\".js\")) {\n              dep += \".js\";\n            }\n          }\n        }\n        if (dep in globalDefine.amd) {\n          let deps2 = globalDefine.amd[dep].deps;\n          let depsResults = [];\n          for (let d of deps2) {\n            depsResults.push(globalRequire([d])[0]);\n          }\n          let callback = globalDefine.amd[dep].callback;\n          let exports = callback.apply(null, depsResults);\n          if (deps2.indexOf(\"exports\") !== -1) {\n            exports = depsResults[deps2.indexOf(\"exports\")];\n          }\n          result.push(exports);\n        } else {\n          throw new Error(`Cannot find module '${dep}'`);\n        }\n      }\n      return result;\n    }\n    return { globalDefine, globalRequire };\n  }\n\n  const makeShadeupEngine = (canvas, options) => {\n    options = options || {};\n    const preferredAdapter = options.preferredAdapter || \"webgpu\";\n    let graphicsAdapter;\n    if (preferredAdapter == \"webgl\") {\n      graphicsAdapter = new WebGLAdapter(canvas);\n    } else if (preferredAdapter == \"webgpu\") {\n      graphicsAdapter = new WebGPUAdapter(canvas);\n    } else {\n      throw new Error(\"No adapter found\");\n    }\n    const engine = new ShadeupEngine(canvas, graphicsAdapter);\n    engine.start();\n    const inputHook = addInputHook(engine);\n    engine.hooks.push(inputHook);\n    const { screenshotQueue, screenshotQueueResults, ...captureHook } =\n      addCaptureHook(engine);\n    engine.hooks.push(captureHook);\n    const cameraHook = addCameraHook(engine);\n    engine.hooks.push(cameraHook);\n    return engine;\n  };\n  const linkIntoEngine = async (engine, fn) => {\n    const resolver = makeAMDResolver();\n    fn(resolver.globalDefine);\n    globalRequire([\"/_std/mesh.js\"])[0];\n    await engine.assetLoader.loadAssets();\n    await engine.assetLoader.loadLibs();\n    try {\n      let outs = globalRequire([\"/main.js\"])[0];\n      if (typeof outs.main === \"function\") {\n        engine.frameFunc = outs.main;\n        engine.hasLoadedCode = true;\n      }\n    } catch (e) {\n      console.error(e);\n      result = e.message;\n    }\n    engine.frameFunc;\n  };\n\n  /**\n   * @license\n   * Copyright 2010-2023 Three.js Authors\n   * SPDX-License-Identifier: MIT\n   */\n  const REVISION = \"155\";\n  const FrontSide = 0;\n  const BackSide = 1;\n  const DoubleSide = 2;\n  const NormalBlending = 1;\n  const AddEquation = 100;\n  const SrcAlphaFactor = 204;\n  const OneMinusSrcAlphaFactor = 205;\n  const LessEqualDepth = 3;\n  const MultiplyOperation = 0;\n\n  const UVMapping = 300;\n  const RepeatWrapping = 1000;\n  const ClampToEdgeWrapping = 1001;\n  const MirroredRepeatWrapping = 1002;\n  const NearestFilter = 1003;\n  const NearestMipmapNearestFilter = 1004;\n  const NearestMipmapLinearFilter = 1005;\n  const LinearFilter = 1006;\n  const LinearMipmapNearestFilter = 1007;\n  const LinearMipmapLinearFilter = 1008;\n  const UnsignedByteType = 1009;\n  const FloatType = 1015;\n  const RGBAFormat = 1023;\n  const InterpolateDiscrete = 2300;\n  const InterpolateLinear = 2301;\n  const InterpolateSmooth = 2302;\n  const ZeroCurvatureEnding = 2400;\n  const ZeroSlopeEnding = 2401;\n  const WrapAroundEnding = 2402;\n  const NormalAnimationBlendMode = 2500;\n  const TrianglesDrawMode = 0;\n  const TriangleStripDrawMode = 1;\n  const TriangleFanDrawMode = 2;\n  /** @deprecated Use LinearSRGBColorSpace or NoColorSpace in three.js r152+. */\n  const LinearEncoding = 3000;\n  /** @deprecated Use SRGBColorSpace in three.js r152+. */\n  const sRGBEncoding = 3001;\n  const TangentSpaceNormalMap = 0;\n\n  // Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\n  const NoColorSpace = \"\";\n  const SRGBColorSpace = \"srgb\";\n  const LinearSRGBColorSpace = \"srgb-linear\";\n  const DisplayP3ColorSpace = \"display-p3\";\n  const KeepStencilOp = 7680;\n  const AlwaysStencilFunc = 519;\n\n  const StaticDrawUsage = 35044;\n\n  const WebGLCoordinateSystem = 2000;\n  const WebGPUCoordinateSystem = 2001;\n\n  /**\n   * https://github.com/mrdoob/eventdispatcher.js/\n   */\n\n  class EventDispatcher {\n    addEventListener(type, listener) {\n      if (this._listeners === undefined) this._listeners = {};\n\n      const listeners = this._listeners;\n\n      if (listeners[type] === undefined) {\n        listeners[type] = [];\n      }\n\n      if (listeners[type].indexOf(listener) === -1) {\n        listeners[type].push(listener);\n      }\n    }\n\n    hasEventListener(type, listener) {\n      if (this._listeners === undefined) return false;\n\n      const listeners = this._listeners;\n\n      return (\n        listeners[type] !== undefined &&\n        listeners[type].indexOf(listener) !== -1\n      );\n    }\n\n    removeEventListener(type, listener) {\n      if (this._listeners === undefined) return;\n\n      const listeners = this._listeners;\n      const listenerArray = listeners[type];\n\n      if (listenerArray !== undefined) {\n        const index = listenerArray.indexOf(listener);\n\n        if (index !== -1) {\n          listenerArray.splice(index, 1);\n        }\n      }\n    }\n\n    dispatchEvent(event) {\n      if (this._listeners === undefined) return;\n\n      const listeners = this._listeners;\n      const listenerArray = listeners[event.type];\n\n      if (listenerArray !== undefined) {\n        event.target = this;\n\n        // Make a copy, in case listeners are removed while iterating.\n        const array = listenerArray.slice(0);\n\n        for (let i = 0, l = array.length; i < l; i++) {\n          array[i].call(this, event);\n        }\n\n        event.target = null;\n      }\n    }\n  }\n\n  const _lut = [\n    \"00\",\n    \"01\",\n    \"02\",\n    \"03\",\n    \"04\",\n    \"05\",\n    \"06\",\n    \"07\",\n    \"08\",\n    \"09\",\n    \"0a\",\n    \"0b\",\n    \"0c\",\n    \"0d\",\n    \"0e\",\n    \"0f\",\n    \"10\",\n    \"11\",\n    \"12\",\n    \"13\",\n    \"14\",\n    \"15\",\n    \"16\",\n    \"17\",\n    \"18\",\n    \"19\",\n    \"1a\",\n    \"1b\",\n    \"1c\",\n    \"1d\",\n    \"1e\",\n    \"1f\",\n    \"20\",\n    \"21\",\n    \"22\",\n    \"23\",\n    \"24\",\n    \"25\",\n    \"26\",\n    \"27\",\n    \"28\",\n    \"29\",\n    \"2a\",\n    \"2b\",\n    \"2c\",\n    \"2d\",\n    \"2e\",\n    \"2f\",\n    \"30\",\n    \"31\",\n    \"32\",\n    \"33\",\n    \"34\",\n    \"35\",\n    \"36\",\n    \"37\",\n    \"38\",\n    \"39\",\n    \"3a\",\n    \"3b\",\n    \"3c\",\n    \"3d\",\n    \"3e\",\n    \"3f\",\n    \"40\",\n    \"41\",\n    \"42\",\n    \"43\",\n    \"44\",\n    \"45\",\n    \"46\",\n    \"47\",\n    \"48\",\n    \"49\",\n    \"4a\",\n    \"4b\",\n    \"4c\",\n    \"4d\",\n    \"4e\",\n    \"4f\",\n    \"50\",\n    \"51\",\n    \"52\",\n    \"53\",\n    \"54\",\n    \"55\",\n    \"56\",\n    \"57\",\n    \"58\",\n    \"59\",\n    \"5a\",\n    \"5b\",\n    \"5c\",\n    \"5d\",\n    \"5e\",\n    \"5f\",\n    \"60\",\n    \"61\",\n    \"62\",\n    \"63\",\n    \"64\",\n    \"65\",\n    \"66\",\n    \"67\",\n    \"68\",\n    \"69\",\n    \"6a\",\n    \"6b\",\n    \"6c\",\n    \"6d\",\n    \"6e\",\n    \"6f\",\n    \"70\",\n    \"71\",\n    \"72\",\n    \"73\",\n    \"74\",\n    \"75\",\n    \"76\",\n    \"77\",\n    \"78\",\n    \"79\",\n    \"7a\",\n    \"7b\",\n    \"7c\",\n    \"7d\",\n    \"7e\",\n    \"7f\",\n    \"80\",\n    \"81\",\n    \"82\",\n    \"83\",\n    \"84\",\n    \"85\",\n    \"86\",\n    \"87\",\n    \"88\",\n    \"89\",\n    \"8a\",\n    \"8b\",\n    \"8c\",\n    \"8d\",\n    \"8e\",\n    \"8f\",\n    \"90\",\n    \"91\",\n    \"92\",\n    \"93\",\n    \"94\",\n    \"95\",\n    \"96\",\n    \"97\",\n    \"98\",\n    \"99\",\n    \"9a\",\n    \"9b\",\n    \"9c\",\n    \"9d\",\n    \"9e\",\n    \"9f\",\n    \"a0\",\n    \"a1\",\n    \"a2\",\n    \"a3\",\n    \"a4\",\n    \"a5\",\n    \"a6\",\n    \"a7\",\n    \"a8\",\n    \"a9\",\n    \"aa\",\n    \"ab\",\n    \"ac\",\n    \"ad\",\n    \"ae\",\n    \"af\",\n    \"b0\",\n    \"b1\",\n    \"b2\",\n    \"b3\",\n    \"b4\",\n    \"b5\",\n    \"b6\",\n    \"b7\",\n    \"b8\",\n    \"b9\",\n    \"ba\",\n    \"bb\",\n    \"bc\",\n    \"bd\",\n    \"be\",\n    \"bf\",\n    \"c0\",\n    \"c1\",\n    \"c2\",\n    \"c3\",\n    \"c4\",\n    \"c5\",\n    \"c6\",\n    \"c7\",\n    \"c8\",\n    \"c9\",\n    \"ca\",\n    \"cb\",\n    \"cc\",\n    \"cd\",\n    \"ce\",\n    \"cf\",\n    \"d0\",\n    \"d1\",\n    \"d2\",\n    \"d3\",\n    \"d4\",\n    \"d5\",\n    \"d6\",\n    \"d7\",\n    \"d8\",\n    \"d9\",\n    \"da\",\n    \"db\",\n    \"dc\",\n    \"dd\",\n    \"de\",\n    \"df\",\n    \"e0\",\n    \"e1\",\n    \"e2\",\n    \"e3\",\n    \"e4\",\n    \"e5\",\n    \"e6\",\n    \"e7\",\n    \"e8\",\n    \"e9\",\n    \"ea\",\n    \"eb\",\n    \"ec\",\n    \"ed\",\n    \"ee\",\n    \"ef\",\n    \"f0\",\n    \"f1\",\n    \"f2\",\n    \"f3\",\n    \"f4\",\n    \"f5\",\n    \"f6\",\n    \"f7\",\n    \"f8\",\n    \"f9\",\n    \"fa\",\n    \"fb\",\n    \"fc\",\n    \"fd\",\n    \"fe\",\n    \"ff\",\n  ];\n\n  let _seed = 1234567;\n\n  const DEG2RAD = Math.PI / 180;\n  const RAD2DEG = 180 / Math.PI;\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n  function generateUUID() {\n    const d0 = (Math.random() * 0xffffffff) | 0;\n    const d1 = (Math.random() * 0xffffffff) | 0;\n    const d2 = (Math.random() * 0xffffffff) | 0;\n    const d3 = (Math.random() * 0xffffffff) | 0;\n    const uuid =\n      _lut[d0 & 0xff] +\n      _lut[(d0 >> 8) & 0xff] +\n      _lut[(d0 >> 16) & 0xff] +\n      _lut[(d0 >> 24) & 0xff] +\n      \"-\" +\n      _lut[d1 & 0xff] +\n      _lut[(d1 >> 8) & 0xff] +\n      \"-\" +\n      _lut[((d1 >> 16) & 0x0f) | 0x40] +\n      _lut[(d1 >> 24) & 0xff] +\n      \"-\" +\n      _lut[(d2 & 0x3f) | 0x80] +\n      _lut[(d2 >> 8) & 0xff] +\n      \"-\" +\n      _lut[(d2 >> 16) & 0xff] +\n      _lut[(d2 >> 24) & 0xff] +\n      _lut[d3 & 0xff] +\n      _lut[(d3 >> 8) & 0xff] +\n      _lut[(d3 >> 16) & 0xff] +\n      _lut[(d3 >> 24) & 0xff];\n\n    // .toLowerCase() here flattens concatenated strings to save heap memory space.\n    return uuid.toLowerCase();\n  }\n\n  function clamp(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n  }\n\n  // compute euclidean modulo of m % n\n  // https://en.wikipedia.org/wiki/Modulo_operation\n  function euclideanModulo(n, m) {\n    return ((n % m) + m) % m;\n  }\n\n  // Linear mapping from range <a1, a2> to range <b1, b2>\n  function mapLinear(x, a1, a2, b1, b2) {\n    return b1 + ((x - a1) * (b2 - b1)) / (a2 - a1);\n  }\n\n  // https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\n  function inverseLerp(x, y, value) {\n    if (x !== y) {\n      return (value - x) / (y - x);\n    } else {\n      return 0;\n    }\n  }\n\n  // https://en.wikipedia.org/wiki/Linear_interpolation\n  function lerp(x, y, t) {\n    return (1 - t) * x + t * y;\n  }\n\n  // http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\n  function damp(x, y, lambda, dt) {\n    return lerp(x, y, 1 - Math.exp(-lambda * dt));\n  }\n\n  // https://www.desmos.com/calculator/vcsjnyz7x4\n  function pingpong(x, length = 1) {\n    return length - Math.abs(euclideanModulo(x, length * 2) - length);\n  }\n\n  // http://en.wikipedia.org/wiki/Smoothstep\n  function smoothstep(x, min, max) {\n    if (x <= min) return 0;\n    if (x >= max) return 1;\n\n    x = (x - min) / (max - min);\n\n    return x * x * (3 - 2 * x);\n  }\n\n  function smootherstep(x, min, max) {\n    if (x <= min) return 0;\n    if (x >= max) return 1;\n\n    x = (x - min) / (max - min);\n\n    return x * x * x * (x * (x * 6 - 15) + 10);\n  }\n\n  // Random integer from <low, high> interval\n  function randInt(low, high) {\n    return low + Math.floor(Math.random() * (high - low + 1));\n  }\n\n  // Random float from <low, high> interval\n  function randFloat(low, high) {\n    return low + Math.random() * (high - low);\n  }\n\n  // Random float from <-range/2, range/2> interval\n  function randFloatSpread(range) {\n    return range * (0.5 - Math.random());\n  }\n\n  // Deterministic pseudo-random float in the interval [ 0, 1 ]\n  function seededRandom(s) {\n    if (s !== undefined) _seed = s;\n\n    // Mulberry32 generator\n\n    let t = (_seed += 0x6d2b79f5);\n\n    t = Math.imul(t ^ (t >>> 15), t | 1);\n\n    t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  }\n\n  function degToRad(degrees) {\n    return degrees * DEG2RAD;\n  }\n\n  function radToDeg(radians) {\n    return radians * RAD2DEG;\n  }\n\n  function isPowerOfTwo(value) {\n    return (value & (value - 1)) === 0 && value !== 0;\n  }\n\n  function ceilPowerOfTwo(value) {\n    return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));\n  }\n\n  function floorPowerOfTwo(value) {\n    return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n  }\n\n  function setQuaternionFromProperEuler(q, a, b, c, order) {\n    // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n    // rotations are applied to the axes in the order specified by 'order'\n    // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n    // angles are in radians\n\n    const cos = Math.cos;\n    const sin = Math.sin;\n\n    const c2 = cos(b / 2);\n    const s2 = sin(b / 2);\n\n    const c13 = cos((a + c) / 2);\n    const s13 = sin((a + c) / 2);\n\n    const c1_3 = cos((a - c) / 2);\n    const s1_3 = sin((a - c) / 2);\n\n    const c3_1 = cos((c - a) / 2);\n    const s3_1 = sin((c - a) / 2);\n\n    switch (order) {\n      case \"XYX\":\n        q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);\n        break;\n\n      case \"YZY\":\n        q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);\n        break;\n\n      case \"ZXZ\":\n        q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);\n        break;\n\n      case \"XZX\":\n        q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);\n        break;\n\n      case \"YXY\":\n        q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);\n        break;\n\n      case \"ZYZ\":\n        q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);\n        break;\n\n      default:\n        console.warn(\n          \"THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: \" +\n            order\n        );\n    }\n  }\n\n  function denormalize(value, array) {\n    switch (array.constructor) {\n      case Float32Array:\n        return value;\n\n      case Uint32Array:\n        return value / 4294967295.0;\n\n      case Uint16Array:\n        return value / 65535.0;\n\n      case Uint8Array:\n        return value / 255.0;\n\n      case Int32Array:\n        return Math.max(value / 2147483647.0, -1.0);\n\n      case Int16Array:\n        return Math.max(value / 32767.0, -1.0);\n\n      case Int8Array:\n        return Math.max(value / 127.0, -1.0);\n\n      default:\n        throw new Error(\"Invalid component type.\");\n    }\n  }\n\n  function normalize(value, array) {\n    switch (array.constructor) {\n      case Float32Array:\n        return value;\n\n      case Uint32Array:\n        return Math.round(value * 4294967295.0);\n\n      case Uint16Array:\n        return Math.round(value * 65535.0);\n\n      case Uint8Array:\n        return Math.round(value * 255.0);\n\n      case Int32Array:\n        return Math.round(value * 2147483647.0);\n\n      case Int16Array:\n        return Math.round(value * 32767.0);\n\n      case Int8Array:\n        return Math.round(value * 127.0);\n\n      default:\n        throw new Error(\"Invalid component type.\");\n    }\n  }\n\n  const MathUtils = {\n    DEG2RAD: DEG2RAD,\n    RAD2DEG: RAD2DEG,\n    generateUUID: generateUUID,\n    clamp: clamp,\n    euclideanModulo: euclideanModulo,\n    mapLinear: mapLinear,\n    inverseLerp: inverseLerp,\n    lerp: lerp,\n    damp: damp,\n    pingpong: pingpong,\n    smoothstep: smoothstep,\n    smootherstep: smootherstep,\n    randInt: randInt,\n    randFloat: randFloat,\n    randFloatSpread: randFloatSpread,\n    seededRandom: seededRandom,\n    degToRad: degToRad,\n    radToDeg: radToDeg,\n    isPowerOfTwo: isPowerOfTwo,\n    ceilPowerOfTwo: ceilPowerOfTwo,\n    floorPowerOfTwo: floorPowerOfTwo,\n    setQuaternionFromProperEuler: setQuaternionFromProperEuler,\n    normalize: normalize,\n    denormalize: denormalize,\n  };\n\n  class Vector2 {\n    constructor(x = 0, y = 0) {\n      Vector2.prototype.isVector2 = true;\n\n      this.x = x;\n      this.y = y;\n    }\n\n    get width() {\n      return this.x;\n    }\n\n    set width(value) {\n      this.x = value;\n    }\n\n    get height() {\n      return this.y;\n    }\n\n    set height(value) {\n      this.y = value;\n    }\n\n    set(x, y) {\n      this.x = x;\n      this.y = y;\n\n      return this;\n    }\n\n    setScalar(scalar) {\n      this.x = scalar;\n      this.y = scalar;\n\n      return this;\n    }\n\n    setX(x) {\n      this.x = x;\n\n      return this;\n    }\n\n    setY(y) {\n      this.y = y;\n\n      return this;\n    }\n\n    setComponent(index, value) {\n      switch (index) {\n        case 0:\n          this.x = value;\n          break;\n        case 1:\n          this.y = value;\n          break;\n        default:\n          throw new Error(\"index is out of range: \" + index);\n      }\n\n      return this;\n    }\n\n    getComponent(index) {\n      switch (index) {\n        case 0:\n          return this.x;\n        case 1:\n          return this.y;\n        default:\n          throw new Error(\"index is out of range: \" + index);\n      }\n    }\n\n    clone() {\n      return new this.constructor(this.x, this.y);\n    }\n\n    copy(v) {\n      this.x = v.x;\n      this.y = v.y;\n\n      return this;\n    }\n\n    add(v) {\n      this.x += v.x;\n      this.y += v.y;\n\n      return this;\n    }\n\n    addScalar(s) {\n      this.x += s;\n      this.y += s;\n\n      return this;\n    }\n\n    addVectors(a, b) {\n      this.x = a.x + b.x;\n      this.y = a.y + b.y;\n\n      return this;\n    }\n\n    addScaledVector(v, s) {\n      this.x += v.x * s;\n      this.y += v.y * s;\n\n      return this;\n    }\n\n    sub(v) {\n      this.x -= v.x;\n      this.y -= v.y;\n\n      return this;\n    }\n\n    subScalar(s) {\n      this.x -= s;\n      this.y -= s;\n\n      return this;\n    }\n\n    subVectors(a, b) {\n      this.x = a.x - b.x;\n      this.y = a.y - b.y;\n\n      return this;\n    }\n\n    multiply(v) {\n      this.x *= v.x;\n      this.y *= v.y;\n\n      return this;\n    }\n\n    multiplyScalar(scalar) {\n      this.x *= scalar;\n      this.y *= scalar;\n\n      return this;\n    }\n\n    divide(v) {\n      this.x /= v.x;\n      this.y /= v.y;\n\n      return this;\n    }\n\n    divideScalar(scalar) {\n      return this.multiplyScalar(1 / scalar);\n    }\n\n    applyMatrix3(m) {\n      const x = this.x,\n        y = this.y;\n      const e = m.elements;\n\n      this.x = e[0] * x + e[3] * y + e[6];\n      this.y = e[1] * x + e[4] * y + e[7];\n\n      return this;\n    }\n\n    min(v) {\n      this.x = Math.min(this.x, v.x);\n      this.y = Math.min(this.y, v.y);\n\n      return this;\n    }\n\n    max(v) {\n      this.x = Math.max(this.x, v.x);\n      this.y = Math.max(this.y, v.y);\n\n      return this;\n    }\n\n    clamp(min, max) {\n      // assumes min < max, componentwise\n\n      this.x = Math.max(min.x, Math.min(max.x, this.x));\n      this.y = Math.max(min.y, Math.min(max.y, this.y));\n\n      return this;\n    }\n\n    clampScalar(minVal, maxVal) {\n      this.x = Math.max(minVal, Math.min(maxVal, this.x));\n      this.y = Math.max(minVal, Math.min(maxVal, this.y));\n\n      return this;\n    }\n\n    clampLength(min, max) {\n      const length = this.length();\n\n      return this.divideScalar(length || 1).multiplyScalar(\n        Math.max(min, Math.min(max, length))\n      );\n    }\n\n    floor() {\n      this.x = Math.floor(this.x);\n      this.y = Math.floor(this.y);\n\n      return this;\n    }\n\n    ceil() {\n      this.x = Math.ceil(this.x);\n      this.y = Math.ceil(this.y);\n\n      return this;\n    }\n\n    round() {\n      this.x = Math.round(this.x);\n      this.y = Math.round(this.y);\n\n      return this;\n    }\n\n    roundToZero() {\n      this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n      this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n\n      return this;\n    }\n\n    negate() {\n      this.x = -this.x;\n      this.y = -this.y;\n\n      return this;\n    }\n\n    dot(v) {\n      return this.x * v.x + this.y * v.y;\n    }\n\n    cross(v) {\n      return this.x * v.y - this.y * v.x;\n    }\n\n    lengthSq() {\n      return this.x * this.x + this.y * this.y;\n    }\n\n    length() {\n      return Math.sqrt(this.x * this.x + this.y * this.y);\n    }\n\n    manhattanLength() {\n      return Math.abs(this.x) + Math.abs(this.y);\n    }\n\n    normalize() {\n      return this.divideScalar(this.length() || 1);\n    }\n\n    angle() {\n      // computes the angle in radians with respect to the positive x-axis\n\n      const angle = Math.atan2(-this.y, -this.x) + Math.PI;\n\n      return angle;\n    }\n\n    angleTo(v) {\n      const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n\n      if (denominator === 0) return Math.PI / 2;\n\n      const theta = this.dot(v) / denominator;\n\n      // clamp, to handle numerical problems\n\n      return Math.acos(clamp(theta, -1, 1));\n    }\n\n    distanceTo(v) {\n      return Math.sqrt(this.distanceToSquared(v));\n    }\n\n    distanceToSquared(v) {\n      const dx = this.x - v.x,\n        dy = this.y - v.y;\n      return dx * dx + dy * dy;\n    }\n\n    manhattanDistanceTo(v) {\n      return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\n    }\n\n    setLength(length) {\n      return this.normalize().multiplyScalar(length);\n    }\n\n    lerp(v, alpha) {\n      this.x += (v.x - this.x) * alpha;\n      this.y += (v.y - this.y) * alpha;\n\n      return this;\n    }\n\n    lerpVectors(v1, v2, alpha) {\n      this.x = v1.x + (v2.x - v1.x) * alpha;\n      this.y = v1.y + (v2.y - v1.y) * alpha;\n\n      return this;\n    }\n\n    equals(v) {\n      return v.x === this.x && v.y === this.y;\n    }\n\n    fromArray(array, offset = 0) {\n      this.x = array[offset];\n      this.y = array[offset + 1];\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      array[offset] = this.x;\n      array[offset + 1] = this.y;\n\n      return array;\n    }\n\n    fromBufferAttribute(attribute, index) {\n      this.x = attribute.getX(index);\n      this.y = attribute.getY(index);\n\n      return this;\n    }\n\n    rotateAround(center, angle) {\n      const c = Math.cos(angle),\n        s = Math.sin(angle);\n\n      const x = this.x - center.x;\n      const y = this.y - center.y;\n\n      this.x = x * c - y * s + center.x;\n      this.y = x * s + y * c + center.y;\n\n      return this;\n    }\n\n    random() {\n      this.x = Math.random();\n      this.y = Math.random();\n\n      return this;\n    }\n\n    *[Symbol.iterator]() {\n      yield this.x;\n      yield this.y;\n    }\n  }\n\n  class Matrix3 {\n    constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n      Matrix3.prototype.isMatrix3 = true;\n\n      this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n      if (n11 !== undefined) {\n        this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33);\n      }\n    }\n\n    set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n      const te = this.elements;\n\n      te[0] = n11;\n      te[1] = n21;\n      te[2] = n31;\n      te[3] = n12;\n      te[4] = n22;\n      te[5] = n32;\n      te[6] = n13;\n      te[7] = n23;\n      te[8] = n33;\n\n      return this;\n    }\n\n    identity() {\n      this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    copy(m) {\n      const te = this.elements;\n      const me = m.elements;\n\n      te[0] = me[0];\n      te[1] = me[1];\n      te[2] = me[2];\n      te[3] = me[3];\n      te[4] = me[4];\n      te[5] = me[5];\n      te[6] = me[6];\n      te[7] = me[7];\n      te[8] = me[8];\n\n      return this;\n    }\n\n    extractBasis(xAxis, yAxis, zAxis) {\n      xAxis.setFromMatrix3Column(this, 0);\n      yAxis.setFromMatrix3Column(this, 1);\n      zAxis.setFromMatrix3Column(this, 2);\n\n      return this;\n    }\n\n    setFromMatrix4(m) {\n      const me = m.elements;\n\n      this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]);\n\n      return this;\n    }\n\n    multiply(m) {\n      return this.multiplyMatrices(this, m);\n    }\n\n    premultiply(m) {\n      return this.multiplyMatrices(m, this);\n    }\n\n    multiplyMatrices(a, b) {\n      const ae = a.elements;\n      const be = b.elements;\n      const te = this.elements;\n\n      const a11 = ae[0],\n        a12 = ae[3],\n        a13 = ae[6];\n      const a21 = ae[1],\n        a22 = ae[4],\n        a23 = ae[7];\n      const a31 = ae[2],\n        a32 = ae[5],\n        a33 = ae[8];\n\n      const b11 = be[0],\n        b12 = be[3],\n        b13 = be[6];\n      const b21 = be[1],\n        b22 = be[4],\n        b23 = be[7];\n      const b31 = be[2],\n        b32 = be[5],\n        b33 = be[8];\n\n      te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n      te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n      te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n\n      te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n      te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n      te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n\n      te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n      te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n      te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n\n      return this;\n    }\n\n    multiplyScalar(s) {\n      const te = this.elements;\n\n      te[0] *= s;\n      te[3] *= s;\n      te[6] *= s;\n      te[1] *= s;\n      te[4] *= s;\n      te[7] *= s;\n      te[2] *= s;\n      te[5] *= s;\n      te[8] *= s;\n\n      return this;\n    }\n\n    determinant() {\n      const te = this.elements;\n\n      const a = te[0],\n        b = te[1],\n        c = te[2],\n        d = te[3],\n        e = te[4],\n        f = te[5],\n        g = te[6],\n        h = te[7],\n        i = te[8];\n\n      return (\n        a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g\n      );\n    }\n\n    invert() {\n      const te = this.elements,\n        n11 = te[0],\n        n21 = te[1],\n        n31 = te[2],\n        n12 = te[3],\n        n22 = te[4],\n        n32 = te[5],\n        n13 = te[6],\n        n23 = te[7],\n        n33 = te[8],\n        t11 = n33 * n22 - n32 * n23,\n        t12 = n32 * n13 - n33 * n12,\n        t13 = n23 * n12 - n22 * n13,\n        det = n11 * t11 + n21 * t12 + n31 * t13;\n\n      if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n\n      const detInv = 1 / det;\n\n      te[0] = t11 * detInv;\n      te[1] = (n31 * n23 - n33 * n21) * detInv;\n      te[2] = (n32 * n21 - n31 * n22) * detInv;\n\n      te[3] = t12 * detInv;\n      te[4] = (n33 * n11 - n31 * n13) * detInv;\n      te[5] = (n31 * n12 - n32 * n11) * detInv;\n\n      te[6] = t13 * detInv;\n      te[7] = (n21 * n13 - n23 * n11) * detInv;\n      te[8] = (n22 * n11 - n21 * n12) * detInv;\n\n      return this;\n    }\n\n    transpose() {\n      let tmp;\n      const m = this.elements;\n\n      tmp = m[1];\n      m[1] = m[3];\n      m[3] = tmp;\n      tmp = m[2];\n      m[2] = m[6];\n      m[6] = tmp;\n      tmp = m[5];\n      m[5] = m[7];\n      m[7] = tmp;\n\n      return this;\n    }\n\n    getNormalMatrix(matrix4) {\n      return this.setFromMatrix4(matrix4).invert().transpose();\n    }\n\n    transposeIntoArray(r) {\n      const m = this.elements;\n\n      r[0] = m[0];\n      r[1] = m[3];\n      r[2] = m[6];\n      r[3] = m[1];\n      r[4] = m[4];\n      r[5] = m[7];\n      r[6] = m[2];\n      r[7] = m[5];\n      r[8] = m[8];\n\n      return this;\n    }\n\n    setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\n      const c = Math.cos(rotation);\n      const s = Math.sin(rotation);\n\n      this.set(\n        sx * c,\n        sx * s,\n        -sx * (c * cx + s * cy) + cx + tx,\n        -sy * s,\n        sy * c,\n        -sy * (-s * cx + c * cy) + cy + ty,\n        0,\n        0,\n        1\n      );\n\n      return this;\n    }\n\n    //\n\n    scale(sx, sy) {\n      this.premultiply(_m3.makeScale(sx, sy));\n\n      return this;\n    }\n\n    rotate(theta) {\n      this.premultiply(_m3.makeRotation(-theta));\n\n      return this;\n    }\n\n    translate(tx, ty) {\n      this.premultiply(_m3.makeTranslation(tx, ty));\n\n      return this;\n    }\n\n    // for 2D Transforms\n\n    makeTranslation(x, y) {\n      if (x.isVector2) {\n        this.set(1, 0, x.x, 0, 1, x.y, 0, 0, 1);\n      } else {\n        this.set(1, 0, x, 0, 1, y, 0, 0, 1);\n      }\n\n      return this;\n    }\n\n    makeRotation(theta) {\n      // counterclockwise\n\n      const c = Math.cos(theta);\n      const s = Math.sin(theta);\n\n      this.set(c, -s, 0, s, c, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    makeScale(x, y) {\n      this.set(x, 0, 0, 0, y, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    //\n\n    equals(matrix) {\n      const te = this.elements;\n      const me = matrix.elements;\n\n      for (let i = 0; i < 9; i++) {\n        if (te[i] !== me[i]) return false;\n      }\n\n      return true;\n    }\n\n    fromArray(array, offset = 0) {\n      for (let i = 0; i < 9; i++) {\n        this.elements[i] = array[i + offset];\n      }\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      const te = this.elements;\n\n      array[offset] = te[0];\n      array[offset + 1] = te[1];\n      array[offset + 2] = te[2];\n\n      array[offset + 3] = te[3];\n      array[offset + 4] = te[4];\n      array[offset + 5] = te[5];\n\n      array[offset + 6] = te[6];\n      array[offset + 7] = te[7];\n      array[offset + 8] = te[8];\n\n      return array;\n    }\n\n    clone() {\n      return new this.constructor().fromArray(this.elements);\n    }\n  }\n\n  const _m3 = /*@__PURE__*/ new Matrix3();\n\n  function arrayNeedsUint32(array) {\n    // assumes larger values usually on last\n\n    for (let i = array.length - 1; i >= 0; --i) {\n      if (array[i] >= 65535) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n    }\n\n    return false;\n  }\n\n  function createElementNS(name) {\n    return document.createElementNS(\"http://www.w3.org/1999/xhtml\", name);\n  }\n\n  const _cache = {};\n\n  function warnOnce(message) {\n    if (message in _cache) return;\n\n    _cache[message] = true;\n\n    console.warn(message);\n  }\n\n  function SRGBToLinear(c) {\n    return c < 0.04045\n      ? c * 0.0773993808\n      : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n  }\n\n  function LinearToSRGB(c) {\n    return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n  }\n\n  /**\n   * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n   * or clipping. Based on W3C specifications for sRGB and Display P3,\n   * and ICC specifications for the D50 connection space. Values in/out\n   * are _linear_ sRGB and _linear_ Display P3.\n   *\n   * Note that both sRGB and Display P3 use the sRGB transfer functions.\n   *\n   * Reference:\n   * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n   */\n\n  const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 =\n    /*@__PURE__*/ new Matrix3().fromArray([\n      0.8224621, 0.0331941, 0.0170827, 0.177538, 0.9668058, 0.0723974,\n      -0.0000001, 0.0000001, 0.9105199,\n    ]);\n\n  const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB =\n    /*@__PURE__*/ new Matrix3().fromArray([\n      1.2249401, -0.0420569, -0.0196376, -0.2249404, 1.0420571, -0.0786361,\n      0.0000001, 0.0, 1.0982735,\n    ]);\n\n  function DisplayP3ToLinearSRGB(color) {\n    // Display P3 uses the sRGB transfer functions\n    return color\n      .convertSRGBToLinear()\n      .applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB);\n  }\n\n  function LinearSRGBToDisplayP3(color) {\n    // Display P3 uses the sRGB transfer functions\n    return color\n      .applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3)\n      .convertLinearToSRGB();\n  }\n\n  // Conversions from <source> to Linear-sRGB reference space.\n  const TO_LINEAR = {\n    [LinearSRGBColorSpace]: (color) => color,\n    [SRGBColorSpace]: (color) => color.convertSRGBToLinear(),\n    [DisplayP3ColorSpace]: DisplayP3ToLinearSRGB,\n  };\n\n  // Conversions to <target> from Linear-sRGB reference space.\n  const FROM_LINEAR = {\n    [LinearSRGBColorSpace]: (color) => color,\n    [SRGBColorSpace]: (color) => color.convertLinearToSRGB(),\n    [DisplayP3ColorSpace]: LinearSRGBToDisplayP3,\n  };\n\n  const ColorManagement = {\n    enabled: true,\n\n    get legacyMode() {\n      console.warn(\n        \"THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.\"\n      );\n\n      return !this.enabled;\n    },\n\n    set legacyMode(legacyMode) {\n      console.warn(\n        \"THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.\"\n      );\n\n      this.enabled = !legacyMode;\n    },\n\n    get workingColorSpace() {\n      return LinearSRGBColorSpace;\n    },\n\n    set workingColorSpace(colorSpace) {\n      console.warn(\"THREE.ColorManagement: .workingColorSpace is readonly.\");\n    },\n\n    convert: function (color, sourceColorSpace, targetColorSpace) {\n      if (\n        this.enabled === false ||\n        sourceColorSpace === targetColorSpace ||\n        !sourceColorSpace ||\n        !targetColorSpace\n      ) {\n        return color;\n      }\n\n      const sourceToLinear = TO_LINEAR[sourceColorSpace];\n      const targetFromLinear = FROM_LINEAR[targetColorSpace];\n\n      if (sourceToLinear === undefined || targetFromLinear === undefined) {\n        throw new Error(\n          `Unsupported color space conversion, \"${sourceColorSpace}\" to \"${targetColorSpace}\".`\n        );\n      }\n\n      return targetFromLinear(sourceToLinear(color));\n    },\n\n    fromWorkingColorSpace: function (color, targetColorSpace) {\n      return this.convert(color, this.workingColorSpace, targetColorSpace);\n    },\n\n    toWorkingColorSpace: function (color, sourceColorSpace) {\n      return this.convert(color, sourceColorSpace, this.workingColorSpace);\n    },\n  };\n\n  let _canvas;\n\n  class ImageUtils {\n    static getDataURL(image) {\n      if (/^data:/i.test(image.src)) {\n        return image.src;\n      }\n\n      if (typeof HTMLCanvasElement === \"undefined\") {\n        return image.src;\n      }\n\n      let canvas;\n\n      if (image instanceof HTMLCanvasElement) {\n        canvas = image;\n      } else {\n        if (_canvas === undefined) _canvas = createElementNS(\"canvas\");\n\n        _canvas.width = image.width;\n        _canvas.height = image.height;\n\n        const context = _canvas.getContext(\"2d\");\n\n        if (image instanceof ImageData) {\n          context.putImageData(image, 0, 0);\n        } else {\n          context.drawImage(image, 0, 0, image.width, image.height);\n        }\n\n        canvas = _canvas;\n      }\n\n      if (canvas.width > 2048 || canvas.height > 2048) {\n        console.warn(\n          \"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",\n          image\n        );\n\n        return canvas.toDataURL(\"image/jpeg\", 0.6);\n      } else {\n        return canvas.toDataURL(\"image/png\");\n      }\n    }\n\n    static sRGBToLinear(image) {\n      if (\n        (typeof HTMLImageElement !== \"undefined\" &&\n          image instanceof HTMLImageElement) ||\n        (typeof HTMLCanvasElement !== \"undefined\" &&\n          image instanceof HTMLCanvasElement) ||\n        (typeof ImageBitmap !== \"undefined\" && image instanceof ImageBitmap)\n      ) {\n        const canvas = createElementNS(\"canvas\");\n\n        canvas.width = image.width;\n        canvas.height = image.height;\n\n        const context = canvas.getContext(\"2d\");\n        context.drawImage(image, 0, 0, image.width, image.height);\n\n        const imageData = context.getImageData(0, 0, image.width, image.height);\n        const data = imageData.data;\n\n        for (let i = 0; i < data.length; i++) {\n          data[i] = SRGBToLinear(data[i] / 255) * 255;\n        }\n\n        context.putImageData(imageData, 0, 0);\n\n        return canvas;\n      } else if (image.data) {\n        const data = image.data.slice(0);\n\n        for (let i = 0; i < data.length; i++) {\n          if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) {\n            data[i] = Math.floor(SRGBToLinear(data[i] / 255) * 255);\n          } else {\n            // assuming float\n\n            data[i] = SRGBToLinear(data[i]);\n          }\n        }\n\n        return {\n          data: data,\n          width: image.width,\n          height: image.height,\n        };\n      } else {\n        console.warn(\n          \"THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.\"\n        );\n        return image;\n      }\n    }\n  }\n\n  let sourceId = 0;\n\n  class Source {\n    constructor(data = null) {\n      this.isSource = true;\n\n      Object.defineProperty(this, \"id\", { value: sourceId++ });\n\n      this.uuid = generateUUID();\n\n      this.data = data;\n\n      this.version = 0;\n    }\n\n    set needsUpdate(value) {\n      if (value === true) this.version++;\n    }\n\n    toJSON(meta) {\n      const isRootObject = meta === undefined || typeof meta === \"string\";\n\n      if (!isRootObject && meta.images[this.uuid] !== undefined) {\n        return meta.images[this.uuid];\n      }\n\n      const output = {\n        uuid: this.uuid,\n        url: \"\",\n      };\n\n      const data = this.data;\n\n      if (data !== null) {\n        let url;\n\n        if (Array.isArray(data)) {\n          // cube texture\n\n          url = [];\n\n          for (let i = 0, l = data.length; i < l; i++) {\n            if (data[i].isDataTexture) {\n              url.push(serializeImage(data[i].image));\n            } else {\n              url.push(serializeImage(data[i]));\n            }\n          }\n        } else {\n          // texture\n\n          url = serializeImage(data);\n        }\n\n        output.url = url;\n      }\n\n      if (!isRootObject) {\n        meta.images[this.uuid] = output;\n      }\n\n      return output;\n    }\n  }\n\n  function serializeImage(image) {\n    if (\n      (typeof HTMLImageElement !== \"undefined\" &&\n        image instanceof HTMLImageElement) ||\n      (typeof HTMLCanvasElement !== \"undefined\" &&\n        image instanceof HTMLCanvasElement) ||\n      (typeof ImageBitmap !== \"undefined\" && image instanceof ImageBitmap)\n    ) {\n      // default images\n\n      return ImageUtils.getDataURL(image);\n    } else {\n      if (image.data) {\n        // images of DataTexture\n\n        return {\n          data: Array.from(image.data),\n          width: image.width,\n          height: image.height,\n          type: image.data.constructor.name,\n        };\n      } else {\n        console.warn(\"THREE.Texture: Unable to serialize Texture.\");\n        return {};\n      }\n    }\n  }\n\n  let textureId = 0;\n\n  class Texture extends EventDispatcher {\n    constructor(\n      image = Texture.DEFAULT_IMAGE,\n      mapping = Texture.DEFAULT_MAPPING,\n      wrapS = ClampToEdgeWrapping,\n      wrapT = ClampToEdgeWrapping,\n      magFilter = LinearFilter,\n      minFilter = LinearMipmapLinearFilter,\n      format = RGBAFormat,\n      type = UnsignedByteType,\n      anisotropy = Texture.DEFAULT_ANISOTROPY,\n      colorSpace = NoColorSpace\n    ) {\n      super();\n\n      this.isTexture = true;\n\n      Object.defineProperty(this, \"id\", { value: textureId++ });\n\n      this.uuid = generateUUID();\n\n      this.name = \"\";\n\n      this.source = new Source(image);\n      this.mipmaps = [];\n\n      this.mapping = mapping;\n      this.channel = 0;\n\n      this.wrapS = wrapS;\n      this.wrapT = wrapT;\n\n      this.magFilter = magFilter;\n      this.minFilter = minFilter;\n\n      this.anisotropy = anisotropy;\n\n      this.format = format;\n      this.internalFormat = null;\n      this.type = type;\n\n      this.offset = new Vector2(0, 0);\n      this.repeat = new Vector2(1, 1);\n      this.center = new Vector2(0, 0);\n      this.rotation = 0;\n\n      this.matrixAutoUpdate = true;\n      this.matrix = new Matrix3();\n\n      this.generateMipmaps = true;\n      this.premultiplyAlpha = false;\n      this.flipY = true;\n      this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n      if (typeof colorSpace === \"string\") {\n        this.colorSpace = colorSpace;\n      } else {\n        // @deprecated, r152\n\n        warnOnce(\n          \"THREE.Texture: Property .encoding has been replaced by .colorSpace.\"\n        );\n        this.colorSpace =\n          colorSpace === sRGBEncoding ? SRGBColorSpace : NoColorSpace;\n      }\n\n      this.userData = {};\n\n      this.version = 0;\n      this.onUpdate = null;\n\n      this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n      this.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n    }\n\n    get image() {\n      return this.source.data;\n    }\n\n    set image(value = null) {\n      this.source.data = value;\n    }\n\n    updateMatrix() {\n      this.matrix.setUvTransform(\n        this.offset.x,\n        this.offset.y,\n        this.repeat.x,\n        this.repeat.y,\n        this.rotation,\n        this.center.x,\n        this.center.y\n      );\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n\n    copy(source) {\n      this.name = source.name;\n\n      this.source = source.source;\n      this.mipmaps = source.mipmaps.slice(0);\n\n      this.mapping = source.mapping;\n      this.channel = source.channel;\n\n      this.wrapS = source.wrapS;\n      this.wrapT = source.wrapT;\n\n      this.magFilter = source.magFilter;\n      this.minFilter = source.minFilter;\n\n      this.anisotropy = source.anisotropy;\n\n      this.format = source.format;\n      this.internalFormat = source.internalFormat;\n      this.type = source.type;\n\n      this.offset.copy(source.offset);\n      this.repeat.copy(source.repeat);\n      this.center.copy(source.center);\n      this.rotation = source.rotation;\n\n      this.matrixAutoUpdate = source.matrixAutoUpdate;\n      this.matrix.copy(source.matrix);\n\n      this.generateMipmaps = source.generateMipmaps;\n      this.premultiplyAlpha = source.premultiplyAlpha;\n      this.flipY = source.flipY;\n      this.unpackAlignment = source.unpackAlignment;\n      this.colorSpace = source.colorSpace;\n\n      this.userData = JSON.parse(JSON.stringify(source.userData));\n\n      this.needsUpdate = true;\n\n      return this;\n    }\n\n    toJSON(meta) {\n      const isRootObject = meta === undefined || typeof meta === \"string\";\n\n      if (!isRootObject && meta.textures[this.uuid] !== undefined) {\n        return meta.textures[this.uuid];\n      }\n\n      const output = {\n        metadata: {\n          version: 4.6,\n          type: \"Texture\",\n          generator: \"Texture.toJSON\",\n        },\n\n        uuid: this.uuid,\n        name: this.name,\n\n        image: this.source.toJSON(meta).uuid,\n\n        mapping: this.mapping,\n        channel: this.channel,\n\n        repeat: [this.repeat.x, this.repeat.y],\n        offset: [this.offset.x, this.offset.y],\n        center: [this.center.x, this.center.y],\n        rotation: this.rotation,\n\n        wrap: [this.wrapS, this.wrapT],\n\n        format: this.format,\n        internalFormat: this.internalFormat,\n        type: this.type,\n        colorSpace: this.colorSpace,\n\n        minFilter: this.minFilter,\n        magFilter: this.magFilter,\n        anisotropy: this.anisotropy,\n\n        flipY: this.flipY,\n\n        generateMipmaps: this.generateMipmaps,\n        premultiplyAlpha: this.premultiplyAlpha,\n        unpackAlignment: this.unpackAlignment,\n      };\n\n      if (Object.keys(this.userData).length > 0)\n        output.userData = this.userData;\n\n      if (!isRootObject) {\n        meta.textures[this.uuid] = output;\n      }\n\n      return output;\n    }\n\n    dispose() {\n      this.dispatchEvent({ type: \"dispose\" });\n    }\n\n    transformUv(uv) {\n      if (this.mapping !== UVMapping) return uv;\n\n      uv.applyMatrix3(this.matrix);\n\n      if (uv.x < 0 || uv.x > 1) {\n        switch (this.wrapS) {\n          case RepeatWrapping:\n            uv.x = uv.x - Math.floor(uv.x);\n            break;\n\n          case ClampToEdgeWrapping:\n            uv.x = uv.x < 0 ? 0 : 1;\n            break;\n\n          case MirroredRepeatWrapping:\n            if (Math.abs(Math.floor(uv.x) % 2) === 1) {\n              uv.x = Math.ceil(uv.x) - uv.x;\n            } else {\n              uv.x = uv.x - Math.floor(uv.x);\n            }\n\n            break;\n        }\n      }\n\n      if (uv.y < 0 || uv.y > 1) {\n        switch (this.wrapT) {\n          case RepeatWrapping:\n            uv.y = uv.y - Math.floor(uv.y);\n            break;\n\n          case ClampToEdgeWrapping:\n            uv.y = uv.y < 0 ? 0 : 1;\n            break;\n\n          case MirroredRepeatWrapping:\n            if (Math.abs(Math.floor(uv.y) % 2) === 1) {\n              uv.y = Math.ceil(uv.y) - uv.y;\n            } else {\n              uv.y = uv.y - Math.floor(uv.y);\n            }\n\n            break;\n        }\n      }\n\n      if (this.flipY) {\n        uv.y = 1 - uv.y;\n      }\n\n      return uv;\n    }\n\n    set needsUpdate(value) {\n      if (value === true) {\n        this.version++;\n        this.source.needsUpdate = true;\n      }\n    }\n\n    get encoding() {\n      // @deprecated, r152\n\n      warnOnce(\n        \"THREE.Texture: Property .encoding has been replaced by .colorSpace.\"\n      );\n      return this.colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n    }\n\n    set encoding(encoding) {\n      // @deprecated, r152\n\n      warnOnce(\n        \"THREE.Texture: Property .encoding has been replaced by .colorSpace.\"\n      );\n      this.colorSpace =\n        encoding === sRGBEncoding ? SRGBColorSpace : NoColorSpace;\n    }\n  }\n\n  Texture.DEFAULT_IMAGE = null;\n  Texture.DEFAULT_MAPPING = UVMapping;\n  Texture.DEFAULT_ANISOTROPY = 1;\n\n  class Vector4 {\n    constructor(x = 0, y = 0, z = 0, w = 1) {\n      Vector4.prototype.isVector4 = true;\n\n      this.x = x;\n      this.y = y;\n      this.z = z;\n      this.w = w;\n    }\n\n    get width() {\n      return this.z;\n    }\n\n    set width(value) {\n      this.z = value;\n    }\n\n    get height() {\n      return this.w;\n    }\n\n    set height(value) {\n      this.w = value;\n    }\n\n    set(x, y, z, w) {\n      this.x = x;\n      this.y = y;\n      this.z = z;\n      this.w = w;\n\n      return this;\n    }\n\n    setScalar(scalar) {\n      this.x = scalar;\n      this.y = scalar;\n      this.z = scalar;\n      this.w = scalar;\n\n      return this;\n    }\n\n    setX(x) {\n      this.x = x;\n\n      return this;\n    }\n\n    setY(y) {\n      this.y = y;\n\n      return this;\n    }\n\n    setZ(z) {\n      this.z = z;\n\n      return this;\n    }\n\n    setW(w) {\n      this.w = w;\n\n      return this;\n    }\n\n    setComponent(index, value) {\n      switch (index) {\n        case 0:\n          this.x = value;\n          break;\n        case 1:\n          this.y = value;\n          break;\n        case 2:\n          this.z = value;\n          break;\n        case 3:\n          this.w = value;\n          break;\n        default:\n          throw new Error(\"index is out of range: \" + index);\n      }\n\n      return this;\n    }\n\n    getComponent(index) {\n      switch (index) {\n        case 0:\n          return this.x;\n        case 1:\n          return this.y;\n        case 2:\n          return this.z;\n        case 3:\n          return this.w;\n        default:\n          throw new Error(\"index is out of range: \" + index);\n      }\n    }\n\n    clone() {\n      return new this.constructor(this.x, this.y, this.z, this.w);\n    }\n\n    copy(v) {\n      this.x = v.x;\n      this.y = v.y;\n      this.z = v.z;\n      this.w = v.w !== undefined ? v.w : 1;\n\n      return this;\n    }\n\n    add(v) {\n      this.x += v.x;\n      this.y += v.y;\n      this.z += v.z;\n      this.w += v.w;\n\n      return this;\n    }\n\n    addScalar(s) {\n      this.x += s;\n      this.y += s;\n      this.z += s;\n      this.w += s;\n\n      return this;\n    }\n\n    addVectors(a, b) {\n      this.x = a.x + b.x;\n      this.y = a.y + b.y;\n      this.z = a.z + b.z;\n      this.w = a.w + b.w;\n\n      return this;\n    }\n\n    addScaledVector(v, s) {\n      this.x += v.x * s;\n      this.y += v.y * s;\n      this.z += v.z * s;\n      this.w += v.w * s;\n\n      return this;\n    }\n\n    sub(v) {\n      this.x -= v.x;\n      this.y -= v.y;\n      this.z -= v.z;\n      this.w -= v.w;\n\n      return this;\n    }\n\n    subScalar(s) {\n      this.x -= s;\n      this.y -= s;\n      this.z -= s;\n      this.w -= s;\n\n      return this;\n    }\n\n    subVectors(a, b) {\n      this.x = a.x - b.x;\n      this.y = a.y - b.y;\n      this.z = a.z - b.z;\n      this.w = a.w - b.w;\n\n      return this;\n    }\n\n    multiply(v) {\n      this.x *= v.x;\n      this.y *= v.y;\n      this.z *= v.z;\n      this.w *= v.w;\n\n      return this;\n    }\n\n    multiplyScalar(scalar) {\n      this.x *= scalar;\n      this.y *= scalar;\n      this.z *= scalar;\n      this.w *= scalar;\n\n      return this;\n    }\n\n    applyMatrix4(m) {\n      const x = this.x,\n        y = this.y,\n        z = this.z,\n        w = this.w;\n      const e = m.elements;\n\n      this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n      this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n      this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n      this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n\n      return this;\n    }\n\n    divideScalar(scalar) {\n      return this.multiplyScalar(1 / scalar);\n    }\n\n    setAxisAngleFromQuaternion(q) {\n      // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n      // q is assumed to be normalized\n\n      this.w = 2 * Math.acos(q.w);\n\n      const s = Math.sqrt(1 - q.w * q.w);\n\n      if (s < 0.0001) {\n        this.x = 1;\n        this.y = 0;\n        this.z = 0;\n      } else {\n        this.x = q.x / s;\n        this.y = q.y / s;\n        this.z = q.z / s;\n      }\n\n      return this;\n    }\n\n    setAxisAngleFromRotationMatrix(m) {\n      // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n      // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n      let angle, x, y, z; // variables for result\n      const epsilon = 0.01, // margin to allow for rounding errors\n        epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees\n        te = m.elements,\n        m11 = te[0],\n        m12 = te[4],\n        m13 = te[8],\n        m21 = te[1],\n        m22 = te[5],\n        m23 = te[9],\n        m31 = te[2],\n        m32 = te[6],\n        m33 = te[10];\n\n      if (\n        Math.abs(m12 - m21) < epsilon &&\n        Math.abs(m13 - m31) < epsilon &&\n        Math.abs(m23 - m32) < epsilon\n      ) {\n        // singularity found\n        // first check for identity matrix which must have +1 for all terms\n        // in leading diagonal and zero in other terms\n\n        if (\n          Math.abs(m12 + m21) < epsilon2 &&\n          Math.abs(m13 + m31) < epsilon2 &&\n          Math.abs(m23 + m32) < epsilon2 &&\n          Math.abs(m11 + m22 + m33 - 3) < epsilon2\n        ) {\n          // this singularity is identity matrix so angle = 0\n\n          this.set(1, 0, 0, 0);\n\n          return this; // zero angle, arbitrary axis\n        }\n\n        // otherwise this singularity is angle = 180\n\n        angle = Math.PI;\n\n        const xx = (m11 + 1) / 2;\n        const yy = (m22 + 1) / 2;\n        const zz = (m33 + 1) / 2;\n        const xy = (m12 + m21) / 4;\n        const xz = (m13 + m31) / 4;\n        const yz = (m23 + m32) / 4;\n\n        if (xx > yy && xx > zz) {\n          // m11 is the largest diagonal term\n\n          if (xx < epsilon) {\n            x = 0;\n            y = 0.707106781;\n            z = 0.707106781;\n          } else {\n            x = Math.sqrt(xx);\n            y = xy / x;\n            z = xz / x;\n          }\n        } else if (yy > zz) {\n          // m22 is the largest diagonal term\n\n          if (yy < epsilon) {\n            x = 0.707106781;\n            y = 0;\n            z = 0.707106781;\n          } else {\n            y = Math.sqrt(yy);\n            x = xy / y;\n            z = yz / y;\n          }\n        } else {\n          // m33 is the largest diagonal term so base result on this\n\n          if (zz < epsilon) {\n            x = 0.707106781;\n            y = 0.707106781;\n            z = 0;\n          } else {\n            z = Math.sqrt(zz);\n            x = xz / z;\n            y = yz / z;\n          }\n        }\n\n        this.set(x, y, z, angle);\n\n        return this; // return 180 deg rotation\n      }\n\n      // as we have reached here there are no singularities so we can handle normally\n\n      let s = Math.sqrt(\n        (m32 - m23) * (m32 - m23) +\n          (m13 - m31) * (m13 - m31) +\n          (m21 - m12) * (m21 - m12)\n      ); // used to normalize\n\n      if (Math.abs(s) < 0.001) s = 1;\n\n      // prevent divide by zero, should not happen if matrix is orthogonal and should be\n      // caught by singularity test above, but I've left it in just in case\n\n      this.x = (m32 - m23) / s;\n      this.y = (m13 - m31) / s;\n      this.z = (m21 - m12) / s;\n      this.w = Math.acos((m11 + m22 + m33 - 1) / 2);\n\n      return this;\n    }\n\n    min(v) {\n      this.x = Math.min(this.x, v.x);\n      this.y = Math.min(this.y, v.y);\n      this.z = Math.min(this.z, v.z);\n      this.w = Math.min(this.w, v.w);\n\n      return this;\n    }\n\n    max(v) {\n      this.x = Math.max(this.x, v.x);\n      this.y = Math.max(this.y, v.y);\n      this.z = Math.max(this.z, v.z);\n      this.w = Math.max(this.w, v.w);\n\n      return this;\n    }\n\n    clamp(min, max) {\n      // assumes min < max, componentwise\n\n      this.x = Math.max(min.x, Math.min(max.x, this.x));\n      this.y = Math.max(min.y, Math.min(max.y, this.y));\n      this.z = Math.max(min.z, Math.min(max.z, this.z));\n      this.w = Math.max(min.w, Math.min(max.w, this.w));\n\n      return this;\n    }\n\n    clampScalar(minVal, maxVal) {\n      this.x = Math.max(minVal, Math.min(maxVal, this.x));\n      this.y = Math.max(minVal, Math.min(maxVal, this.y));\n      this.z = Math.max(minVal, Math.min(maxVal, this.z));\n      this.w = Math.max(minVal, Math.min(maxVal, this.w));\n\n      return this;\n    }\n\n    clampLength(min, max) {\n      const length = this.length();\n\n      return this.divideScalar(length || 1).multiplyScalar(\n        Math.max(min, Math.min(max, length))\n      );\n    }\n\n    floor() {\n      this.x = Math.floor(this.x);\n      this.y = Math.floor(this.y);\n      this.z = Math.floor(this.z);\n      this.w = Math.floor(this.w);\n\n      return this;\n    }\n\n    ceil() {\n      this.x = Math.ceil(this.x);\n      this.y = Math.ceil(this.y);\n      this.z = Math.ceil(this.z);\n      this.w = Math.ceil(this.w);\n\n      return this;\n    }\n\n    round() {\n      this.x = Math.round(this.x);\n      this.y = Math.round(this.y);\n      this.z = Math.round(this.z);\n      this.w = Math.round(this.w);\n\n      return this;\n    }\n\n    roundToZero() {\n      this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n      this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n      this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\n      this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w);\n\n      return this;\n    }\n\n    negate() {\n      this.x = -this.x;\n      this.y = -this.y;\n      this.z = -this.z;\n      this.w = -this.w;\n\n      return this;\n    }\n\n    dot(v) {\n      return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n    }\n\n    lengthSq() {\n      return (\n        this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w\n      );\n    }\n\n    length() {\n      return Math.sqrt(\n        this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w\n      );\n    }\n\n    manhattanLength() {\n      return (\n        Math.abs(this.x) +\n        Math.abs(this.y) +\n        Math.abs(this.z) +\n        Math.abs(this.w)\n      );\n    }\n\n    normalize() {\n      return this.divideScalar(this.length() || 1);\n    }\n\n    setLength(length) {\n      return this.normalize().multiplyScalar(length);\n    }\n\n    lerp(v, alpha) {\n      this.x += (v.x - this.x) * alpha;\n      this.y += (v.y - this.y) * alpha;\n      this.z += (v.z - this.z) * alpha;\n      this.w += (v.w - this.w) * alpha;\n\n      return this;\n    }\n\n    lerpVectors(v1, v2, alpha) {\n      this.x = v1.x + (v2.x - v1.x) * alpha;\n      this.y = v1.y + (v2.y - v1.y) * alpha;\n      this.z = v1.z + (v2.z - v1.z) * alpha;\n      this.w = v1.w + (v2.w - v1.w) * alpha;\n\n      return this;\n    }\n\n    equals(v) {\n      return (\n        v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w\n      );\n    }\n\n    fromArray(array, offset = 0) {\n      this.x = array[offset];\n      this.y = array[offset + 1];\n      this.z = array[offset + 2];\n      this.w = array[offset + 3];\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      array[offset] = this.x;\n      array[offset + 1] = this.y;\n      array[offset + 2] = this.z;\n      array[offset + 3] = this.w;\n\n      return array;\n    }\n\n    fromBufferAttribute(attribute, index) {\n      this.x = attribute.getX(index);\n      this.y = attribute.getY(index);\n      this.z = attribute.getZ(index);\n      this.w = attribute.getW(index);\n\n      return this;\n    }\n\n    random() {\n      this.x = Math.random();\n      this.y = Math.random();\n      this.z = Math.random();\n      this.w = Math.random();\n\n      return this;\n    }\n\n    *[Symbol.iterator]() {\n      yield this.x;\n      yield this.y;\n      yield this.z;\n      yield this.w;\n    }\n  }\n\n  class Quaternion {\n    constructor(x = 0, y = 0, z = 0, w = 1) {\n      this.isQuaternion = true;\n\n      this._x = x;\n      this._y = y;\n      this._z = z;\n      this._w = w;\n    }\n\n    static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n      // fuzz-free, array-based Quaternion SLERP operation\n\n      let x0 = src0[srcOffset0 + 0],\n        y0 = src0[srcOffset0 + 1],\n        z0 = src0[srcOffset0 + 2],\n        w0 = src0[srcOffset0 + 3];\n\n      const x1 = src1[srcOffset1 + 0],\n        y1 = src1[srcOffset1 + 1],\n        z1 = src1[srcOffset1 + 2],\n        w1 = src1[srcOffset1 + 3];\n\n      if (t === 0) {\n        dst[dstOffset + 0] = x0;\n        dst[dstOffset + 1] = y0;\n        dst[dstOffset + 2] = z0;\n        dst[dstOffset + 3] = w0;\n        return;\n      }\n\n      if (t === 1) {\n        dst[dstOffset + 0] = x1;\n        dst[dstOffset + 1] = y1;\n        dst[dstOffset + 2] = z1;\n        dst[dstOffset + 3] = w1;\n        return;\n      }\n\n      if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n        let s = 1 - t;\n        const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n          dir = cos >= 0 ? 1 : -1,\n          sqrSin = 1 - cos * cos;\n\n        // Skip the Slerp for tiny steps to avoid numeric problems:\n        if (sqrSin > Number.EPSILON) {\n          const sin = Math.sqrt(sqrSin),\n            len = Math.atan2(sin, cos * dir);\n\n          s = Math.sin(s * len) / sin;\n          t = Math.sin(t * len) / sin;\n        }\n\n        const tDir = t * dir;\n\n        x0 = x0 * s + x1 * tDir;\n        y0 = y0 * s + y1 * tDir;\n        z0 = z0 * s + z1 * tDir;\n        w0 = w0 * s + w1 * tDir;\n\n        // Normalize in case we just did a lerp:\n        if (s === 1 - t) {\n          const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n\n          x0 *= f;\n          y0 *= f;\n          z0 *= f;\n          w0 *= f;\n        }\n      }\n\n      dst[dstOffset] = x0;\n      dst[dstOffset + 1] = y0;\n      dst[dstOffset + 2] = z0;\n      dst[dstOffset + 3] = w0;\n    }\n\n    static multiplyQuaternionsFlat(\n      dst,\n      dstOffset,\n      src0,\n      srcOffset0,\n      src1,\n      srcOffset1\n    ) {\n      const x0 = src0[srcOffset0];\n      const y0 = src0[srcOffset0 + 1];\n      const z0 = src0[srcOffset0 + 2];\n      const w0 = src0[srcOffset0 + 3];\n\n      const x1 = src1[srcOffset1];\n      const y1 = src1[srcOffset1 + 1];\n      const z1 = src1[srcOffset1 + 2];\n      const w1 = src1[srcOffset1 + 3];\n\n      dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n      dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n      dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n      dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n      return dst;\n    }\n\n    get x() {\n      return this._x;\n    }\n\n    set x(value) {\n      this._x = value;\n      this._onChangeCallback();\n    }\n\n    get y() {\n      return this._y;\n    }\n\n    set y(value) {\n      this._y = value;\n      this._onChangeCallback();\n    }\n\n    get z() {\n      return this._z;\n    }\n\n    set z(value) {\n      this._z = value;\n      this._onChangeCallback();\n    }\n\n    get w() {\n      return this._w;\n    }\n\n    set w(value) {\n      this._w = value;\n      this._onChangeCallback();\n    }\n\n    set(x, y, z, w) {\n      this._x = x;\n      this._y = y;\n      this._z = z;\n      this._w = w;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    clone() {\n      return new this.constructor(this._x, this._y, this._z, this._w);\n    }\n\n    copy(quaternion) {\n      this._x = quaternion.x;\n      this._y = quaternion.y;\n      this._z = quaternion.z;\n      this._w = quaternion.w;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    setFromEuler(euler, update) {\n      const x = euler._x,\n        y = euler._y,\n        z = euler._z,\n        order = euler._order;\n\n      // http://www.mathworks.com/matlabcentral/fileexchange/\n      // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n      //\tcontent/SpinCalc.m\n\n      const cos = Math.cos;\n      const sin = Math.sin;\n\n      const c1 = cos(x / 2);\n      const c2 = cos(y / 2);\n      const c3 = cos(z / 2);\n\n      const s1 = sin(x / 2);\n      const s2 = sin(y / 2);\n      const s3 = sin(z / 2);\n\n      switch (order) {\n        case \"XYZ\":\n          this._x = s1 * c2 * c3 + c1 * s2 * s3;\n          this._y = c1 * s2 * c3 - s1 * c2 * s3;\n          this._z = c1 * c2 * s3 + s1 * s2 * c3;\n          this._w = c1 * c2 * c3 - s1 * s2 * s3;\n          break;\n\n        case \"YXZ\":\n          this._x = s1 * c2 * c3 + c1 * s2 * s3;\n          this._y = c1 * s2 * c3 - s1 * c2 * s3;\n          this._z = c1 * c2 * s3 - s1 * s2 * c3;\n          this._w = c1 * c2 * c3 + s1 * s2 * s3;\n          break;\n\n        case \"ZXY\":\n          this._x = s1 * c2 * c3 - c1 * s2 * s3;\n          this._y = c1 * s2 * c3 + s1 * c2 * s3;\n          this._z = c1 * c2 * s3 + s1 * s2 * c3;\n          this._w = c1 * c2 * c3 - s1 * s2 * s3;\n          break;\n\n        case \"ZYX\":\n          this._x = s1 * c2 * c3 - c1 * s2 * s3;\n          this._y = c1 * s2 * c3 + s1 * c2 * s3;\n          this._z = c1 * c2 * s3 - s1 * s2 * c3;\n          this._w = c1 * c2 * c3 + s1 * s2 * s3;\n          break;\n\n        case \"YZX\":\n          this._x = s1 * c2 * c3 + c1 * s2 * s3;\n          this._y = c1 * s2 * c3 + s1 * c2 * s3;\n          this._z = c1 * c2 * s3 - s1 * s2 * c3;\n          this._w = c1 * c2 * c3 - s1 * s2 * s3;\n          break;\n\n        case \"XZY\":\n          this._x = s1 * c2 * c3 - c1 * s2 * s3;\n          this._y = c1 * s2 * c3 - s1 * c2 * s3;\n          this._z = c1 * c2 * s3 + s1 * s2 * c3;\n          this._w = c1 * c2 * c3 + s1 * s2 * s3;\n          break;\n\n        default:\n          console.warn(\n            \"THREE.Quaternion: .setFromEuler() encountered an unknown order: \" +\n              order\n          );\n      }\n\n      if (update !== false) this._onChangeCallback();\n\n      return this;\n    }\n\n    setFromAxisAngle(axis, angle) {\n      // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n      // assumes axis is normalized\n\n      const halfAngle = angle / 2,\n        s = Math.sin(halfAngle);\n\n      this._x = axis.x * s;\n      this._y = axis.y * s;\n      this._z = axis.z * s;\n      this._w = Math.cos(halfAngle);\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    setFromRotationMatrix(m) {\n      // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n      // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n      const te = m.elements,\n        m11 = te[0],\n        m12 = te[4],\n        m13 = te[8],\n        m21 = te[1],\n        m22 = te[5],\n        m23 = te[9],\n        m31 = te[2],\n        m32 = te[6],\n        m33 = te[10],\n        trace = m11 + m22 + m33;\n\n      if (trace > 0) {\n        const s = 0.5 / Math.sqrt(trace + 1.0);\n\n        this._w = 0.25 / s;\n        this._x = (m32 - m23) * s;\n        this._y = (m13 - m31) * s;\n        this._z = (m21 - m12) * s;\n      } else if (m11 > m22 && m11 > m33) {\n        const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n\n        this._w = (m32 - m23) / s;\n        this._x = 0.25 * s;\n        this._y = (m12 + m21) / s;\n        this._z = (m13 + m31) / s;\n      } else if (m22 > m33) {\n        const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n\n        this._w = (m13 - m31) / s;\n        this._x = (m12 + m21) / s;\n        this._y = 0.25 * s;\n        this._z = (m23 + m32) / s;\n      } else {\n        const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n\n        this._w = (m21 - m12) / s;\n        this._x = (m13 + m31) / s;\n        this._y = (m23 + m32) / s;\n        this._z = 0.25 * s;\n      }\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    setFromUnitVectors(vFrom, vTo) {\n      // assumes direction vectors vFrom and vTo are normalized\n\n      let r = vFrom.dot(vTo) + 1;\n\n      if (r < Number.EPSILON) {\n        // vFrom and vTo point in opposite directions\n\n        r = 0;\n\n        if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n          this._x = -vFrom.y;\n          this._y = vFrom.x;\n          this._z = 0;\n          this._w = r;\n        } else {\n          this._x = 0;\n          this._y = -vFrom.z;\n          this._z = vFrom.y;\n          this._w = r;\n        }\n      } else {\n        // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n        this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n        this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n        this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n        this._w = r;\n      }\n\n      return this.normalize();\n    }\n\n    angleTo(q) {\n      return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\n    }\n\n    rotateTowards(q, step) {\n      const angle = this.angleTo(q);\n\n      if (angle === 0) return this;\n\n      const t = Math.min(1, step / angle);\n\n      this.slerp(q, t);\n\n      return this;\n    }\n\n    identity() {\n      return this.set(0, 0, 0, 1);\n    }\n\n    invert() {\n      // quaternion is assumed to have unit length\n\n      return this.conjugate();\n    }\n\n    conjugate() {\n      this._x *= -1;\n      this._y *= -1;\n      this._z *= -1;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    dot(v) {\n      return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n    }\n\n    lengthSq() {\n      return (\n        this._x * this._x +\n        this._y * this._y +\n        this._z * this._z +\n        this._w * this._w\n      );\n    }\n\n    length() {\n      return Math.sqrt(\n        this._x * this._x +\n          this._y * this._y +\n          this._z * this._z +\n          this._w * this._w\n      );\n    }\n\n    normalize() {\n      let l = this.length();\n\n      if (l === 0) {\n        this._x = 0;\n        this._y = 0;\n        this._z = 0;\n        this._w = 1;\n      } else {\n        l = 1 / l;\n\n        this._x = this._x * l;\n        this._y = this._y * l;\n        this._z = this._z * l;\n        this._w = this._w * l;\n      }\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    multiply(q) {\n      return this.multiplyQuaternions(this, q);\n    }\n\n    premultiply(q) {\n      return this.multiplyQuaternions(q, this);\n    }\n\n    multiplyQuaternions(a, b) {\n      // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n      const qax = a._x,\n        qay = a._y,\n        qaz = a._z,\n        qaw = a._w;\n      const qbx = b._x,\n        qby = b._y,\n        qbz = b._z,\n        qbw = b._w;\n\n      this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n      this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n      this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n      this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    slerp(qb, t) {\n      if (t === 0) return this;\n      if (t === 1) return this.copy(qb);\n\n      const x = this._x,\n        y = this._y,\n        z = this._z,\n        w = this._w;\n\n      // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n      let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n      if (cosHalfTheta < 0) {\n        this._w = -qb._w;\n        this._x = -qb._x;\n        this._y = -qb._y;\n        this._z = -qb._z;\n\n        cosHalfTheta = -cosHalfTheta;\n      } else {\n        this.copy(qb);\n      }\n\n      if (cosHalfTheta >= 1.0) {\n        this._w = w;\n        this._x = x;\n        this._y = y;\n        this._z = z;\n\n        return this;\n      }\n\n      const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n      if (sqrSinHalfTheta <= Number.EPSILON) {\n        const s = 1 - t;\n        this._w = s * w + t * this._w;\n        this._x = s * x + t * this._x;\n        this._y = s * y + t * this._y;\n        this._z = s * z + t * this._z;\n\n        this.normalize();\n        this._onChangeCallback();\n\n        return this;\n      }\n\n      const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n      const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n      const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta,\n        ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n\n      this._w = w * ratioA + this._w * ratioB;\n      this._x = x * ratioA + this._x * ratioB;\n      this._y = y * ratioA + this._y * ratioB;\n      this._z = z * ratioA + this._z * ratioB;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    slerpQuaternions(qa, qb, t) {\n      return this.copy(qa).slerp(qb, t);\n    }\n\n    random() {\n      // Derived from http://planning.cs.uiuc.edu/node198.html\n      // Note, this source uses w, x, y, z ordering,\n      // so we swap the order below.\n\n      const u1 = Math.random();\n      const sqrt1u1 = Math.sqrt(1 - u1);\n      const sqrtu1 = Math.sqrt(u1);\n\n      const u2 = 2 * Math.PI * Math.random();\n\n      const u3 = 2 * Math.PI * Math.random();\n\n      return this.set(\n        sqrt1u1 * Math.cos(u2),\n        sqrtu1 * Math.sin(u3),\n        sqrtu1 * Math.cos(u3),\n        sqrt1u1 * Math.sin(u2)\n      );\n    }\n\n    equals(quaternion) {\n      return (\n        quaternion._x === this._x &&\n        quaternion._y === this._y &&\n        quaternion._z === this._z &&\n        quaternion._w === this._w\n      );\n    }\n\n    fromArray(array, offset = 0) {\n      this._x = array[offset];\n      this._y = array[offset + 1];\n      this._z = array[offset + 2];\n      this._w = array[offset + 3];\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      array[offset] = this._x;\n      array[offset + 1] = this._y;\n      array[offset + 2] = this._z;\n      array[offset + 3] = this._w;\n\n      return array;\n    }\n\n    fromBufferAttribute(attribute, index) {\n      this._x = attribute.getX(index);\n      this._y = attribute.getY(index);\n      this._z = attribute.getZ(index);\n      this._w = attribute.getW(index);\n\n      return this;\n    }\n\n    toJSON() {\n      return this.toArray();\n    }\n\n    _onChange(callback) {\n      this._onChangeCallback = callback;\n\n      return this;\n    }\n\n    _onChangeCallback() {}\n\n    *[Symbol.iterator]() {\n      yield this._x;\n      yield this._y;\n      yield this._z;\n      yield this._w;\n    }\n  }\n\n  class Vector3 {\n    constructor(x = 0, y = 0, z = 0) {\n      Vector3.prototype.isVector3 = true;\n\n      this.x = x;\n      this.y = y;\n      this.z = z;\n    }\n\n    set(x, y, z) {\n      if (z === undefined) z = this.z; // sprite.scale.set(x,y)\n\n      this.x = x;\n      this.y = y;\n      this.z = z;\n\n      return this;\n    }\n\n    setScalar(scalar) {\n      this.x = scalar;\n      this.y = scalar;\n      this.z = scalar;\n\n      return this;\n    }\n\n    setX(x) {\n      this.x = x;\n\n      return this;\n    }\n\n    setY(y) {\n      this.y = y;\n\n      return this;\n    }\n\n    setZ(z) {\n      this.z = z;\n\n      return this;\n    }\n\n    setComponent(index, value) {\n      switch (index) {\n        case 0:\n          this.x = value;\n          break;\n        case 1:\n          this.y = value;\n          break;\n        case 2:\n          this.z = value;\n          break;\n        default:\n          throw new Error(\"index is out of range: \" + index);\n      }\n\n      return this;\n    }\n\n    getComponent(index) {\n      switch (index) {\n        case 0:\n          return this.x;\n        case 1:\n          return this.y;\n        case 2:\n          return this.z;\n        default:\n          throw new Error(\"index is out of range: \" + index);\n      }\n    }\n\n    clone() {\n      return new this.constructor(this.x, this.y, this.z);\n    }\n\n    copy(v) {\n      this.x = v.x;\n      this.y = v.y;\n      this.z = v.z;\n\n      return this;\n    }\n\n    add(v) {\n      this.x += v.x;\n      this.y += v.y;\n      this.z += v.z;\n\n      return this;\n    }\n\n    addScalar(s) {\n      this.x += s;\n      this.y += s;\n      this.z += s;\n\n      return this;\n    }\n\n    addVectors(a, b) {\n      this.x = a.x + b.x;\n      this.y = a.y + b.y;\n      this.z = a.z + b.z;\n\n      return this;\n    }\n\n    addScaledVector(v, s) {\n      this.x += v.x * s;\n      this.y += v.y * s;\n      this.z += v.z * s;\n\n      return this;\n    }\n\n    sub(v) {\n      this.x -= v.x;\n      this.y -= v.y;\n      this.z -= v.z;\n\n      return this;\n    }\n\n    subScalar(s) {\n      this.x -= s;\n      this.y -= s;\n      this.z -= s;\n\n      return this;\n    }\n\n    subVectors(a, b) {\n      this.x = a.x - b.x;\n      this.y = a.y - b.y;\n      this.z = a.z - b.z;\n\n      return this;\n    }\n\n    multiply(v) {\n      this.x *= v.x;\n      this.y *= v.y;\n      this.z *= v.z;\n\n      return this;\n    }\n\n    multiplyScalar(scalar) {\n      this.x *= scalar;\n      this.y *= scalar;\n      this.z *= scalar;\n\n      return this;\n    }\n\n    multiplyVectors(a, b) {\n      this.x = a.x * b.x;\n      this.y = a.y * b.y;\n      this.z = a.z * b.z;\n\n      return this;\n    }\n\n    applyEuler(euler) {\n      return this.applyQuaternion(_quaternion$4.setFromEuler(euler));\n    }\n\n    applyAxisAngle(axis, angle) {\n      return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle));\n    }\n\n    applyMatrix3(m) {\n      const x = this.x,\n        y = this.y,\n        z = this.z;\n      const e = m.elements;\n\n      this.x = e[0] * x + e[3] * y + e[6] * z;\n      this.y = e[1] * x + e[4] * y + e[7] * z;\n      this.z = e[2] * x + e[5] * y + e[8] * z;\n\n      return this;\n    }\n\n    applyNormalMatrix(m) {\n      return this.applyMatrix3(m).normalize();\n    }\n\n    applyMatrix4(m) {\n      const x = this.x,\n        y = this.y,\n        z = this.z;\n      const e = m.elements;\n\n      const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\n\n      this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\n      this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\n      this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\n\n      return this;\n    }\n\n    applyQuaternion(q) {\n      const x = this.x,\n        y = this.y,\n        z = this.z;\n      const qx = q.x,\n        qy = q.y,\n        qz = q.z,\n        qw = q.w;\n\n      // calculate quat * vector\n\n      const ix = qw * x + qy * z - qz * y;\n      const iy = qw * y + qz * x - qx * z;\n      const iz = qw * z + qx * y - qy * x;\n      const iw = -qx * x - qy * y - qz * z;\n\n      // calculate result * inverse quat\n\n      this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n      this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n      this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n      return this;\n    }\n\n    project(camera) {\n      return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(\n        camera.projectionMatrix\n      );\n    }\n\n    unproject(camera) {\n      return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(\n        camera.matrixWorld\n      );\n    }\n\n    transformDirection(m) {\n      // input: THREE.Matrix4 affine matrix\n      // vector interpreted as a direction\n\n      const x = this.x,\n        y = this.y,\n        z = this.z;\n      const e = m.elements;\n\n      this.x = e[0] * x + e[4] * y + e[8] * z;\n      this.y = e[1] * x + e[5] * y + e[9] * z;\n      this.z = e[2] * x + e[6] * y + e[10] * z;\n\n      return this.normalize();\n    }\n\n    divide(v) {\n      this.x /= v.x;\n      this.y /= v.y;\n      this.z /= v.z;\n\n      return this;\n    }\n\n    divideScalar(scalar) {\n      return this.multiplyScalar(1 / scalar);\n    }\n\n    min(v) {\n      this.x = Math.min(this.x, v.x);\n      this.y = Math.min(this.y, v.y);\n      this.z = Math.min(this.z, v.z);\n\n      return this;\n    }\n\n    max(v) {\n      this.x = Math.max(this.x, v.x);\n      this.y = Math.max(this.y, v.y);\n      this.z = Math.max(this.z, v.z);\n\n      return this;\n    }\n\n    clamp(min, max) {\n      // assumes min < max, componentwise\n\n      this.x = Math.max(min.x, Math.min(max.x, this.x));\n      this.y = Math.max(min.y, Math.min(max.y, this.y));\n      this.z = Math.max(min.z, Math.min(max.z, this.z));\n\n      return this;\n    }\n\n    clampScalar(minVal, maxVal) {\n      this.x = Math.max(minVal, Math.min(maxVal, this.x));\n      this.y = Math.max(minVal, Math.min(maxVal, this.y));\n      this.z = Math.max(minVal, Math.min(maxVal, this.z));\n\n      return this;\n    }\n\n    clampLength(min, max) {\n      const length = this.length();\n\n      return this.divideScalar(length || 1).multiplyScalar(\n        Math.max(min, Math.min(max, length))\n      );\n    }\n\n    floor() {\n      this.x = Math.floor(this.x);\n      this.y = Math.floor(this.y);\n      this.z = Math.floor(this.z);\n\n      return this;\n    }\n\n    ceil() {\n      this.x = Math.ceil(this.x);\n      this.y = Math.ceil(this.y);\n      this.z = Math.ceil(this.z);\n\n      return this;\n    }\n\n    round() {\n      this.x = Math.round(this.x);\n      this.y = Math.round(this.y);\n      this.z = Math.round(this.z);\n\n      return this;\n    }\n\n    roundToZero() {\n      this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n      this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n      this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\n\n      return this;\n    }\n\n    negate() {\n      this.x = -this.x;\n      this.y = -this.y;\n      this.z = -this.z;\n\n      return this;\n    }\n\n    dot(v) {\n      return this.x * v.x + this.y * v.y + this.z * v.z;\n    }\n\n    // TODO lengthSquared?\n\n    lengthSq() {\n      return this.x * this.x + this.y * this.y + this.z * this.z;\n    }\n\n    length() {\n      return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n    }\n\n    manhattanLength() {\n      return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n    }\n\n    normalize() {\n      return this.divideScalar(this.length() || 1);\n    }\n\n    setLength(length) {\n      return this.normalize().multiplyScalar(length);\n    }\n\n    lerp(v, alpha) {\n      this.x += (v.x - this.x) * alpha;\n      this.y += (v.y - this.y) * alpha;\n      this.z += (v.z - this.z) * alpha;\n\n      return this;\n    }\n\n    lerpVectors(v1, v2, alpha) {\n      this.x = v1.x + (v2.x - v1.x) * alpha;\n      this.y = v1.y + (v2.y - v1.y) * alpha;\n      this.z = v1.z + (v2.z - v1.z) * alpha;\n\n      return this;\n    }\n\n    cross(v) {\n      return this.crossVectors(this, v);\n    }\n\n    crossVectors(a, b) {\n      const ax = a.x,\n        ay = a.y,\n        az = a.z;\n      const bx = b.x,\n        by = b.y,\n        bz = b.z;\n\n      this.x = ay * bz - az * by;\n      this.y = az * bx - ax * bz;\n      this.z = ax * by - ay * bx;\n\n      return this;\n    }\n\n    projectOnVector(v) {\n      const denominator = v.lengthSq();\n\n      if (denominator === 0) return this.set(0, 0, 0);\n\n      const scalar = v.dot(this) / denominator;\n\n      return this.copy(v).multiplyScalar(scalar);\n    }\n\n    projectOnPlane(planeNormal) {\n      _vector$b.copy(this).projectOnVector(planeNormal);\n\n      return this.sub(_vector$b);\n    }\n\n    reflect(normal) {\n      // reflect incident vector off plane orthogonal to normal\n      // normal is assumed to have unit length\n\n      return this.sub(\n        _vector$b.copy(normal).multiplyScalar(2 * this.dot(normal))\n      );\n    }\n\n    angleTo(v) {\n      const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n\n      if (denominator === 0) return Math.PI / 2;\n\n      const theta = this.dot(v) / denominator;\n\n      // clamp, to handle numerical problems\n\n      return Math.acos(clamp(theta, -1, 1));\n    }\n\n    distanceTo(v) {\n      return Math.sqrt(this.distanceToSquared(v));\n    }\n\n    distanceToSquared(v) {\n      const dx = this.x - v.x,\n        dy = this.y - v.y,\n        dz = this.z - v.z;\n\n      return dx * dx + dy * dy + dz * dz;\n    }\n\n    manhattanDistanceTo(v) {\n      return (\n        Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z)\n      );\n    }\n\n    setFromSpherical(s) {\n      return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n    }\n\n    setFromSphericalCoords(radius, phi, theta) {\n      const sinPhiRadius = Math.sin(phi) * radius;\n\n      this.x = sinPhiRadius * Math.sin(theta);\n      this.y = Math.cos(phi) * radius;\n      this.z = sinPhiRadius * Math.cos(theta);\n\n      return this;\n    }\n\n    setFromCylindrical(c) {\n      return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n    }\n\n    setFromCylindricalCoords(radius, theta, y) {\n      this.x = radius * Math.sin(theta);\n      this.y = y;\n      this.z = radius * Math.cos(theta);\n\n      return this;\n    }\n\n    setFromMatrixPosition(m) {\n      const e = m.elements;\n\n      this.x = e[12];\n      this.y = e[13];\n      this.z = e[14];\n\n      return this;\n    }\n\n    setFromMatrixScale(m) {\n      const sx = this.setFromMatrixColumn(m, 0).length();\n      const sy = this.setFromMatrixColumn(m, 1).length();\n      const sz = this.setFromMatrixColumn(m, 2).length();\n\n      this.x = sx;\n      this.y = sy;\n      this.z = sz;\n\n      return this;\n    }\n\n    setFromMatrixColumn(m, index) {\n      return this.fromArray(m.elements, index * 4);\n    }\n\n    setFromMatrix3Column(m, index) {\n      return this.fromArray(m.elements, index * 3);\n    }\n\n    setFromEuler(e) {\n      this.x = e._x;\n      this.y = e._y;\n      this.z = e._z;\n\n      return this;\n    }\n\n    setFromColor(c) {\n      this.x = c.r;\n      this.y = c.g;\n      this.z = c.b;\n\n      return this;\n    }\n\n    equals(v) {\n      return v.x === this.x && v.y === this.y && v.z === this.z;\n    }\n\n    fromArray(array, offset = 0) {\n      this.x = array[offset];\n      this.y = array[offset + 1];\n      this.z = array[offset + 2];\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      array[offset] = this.x;\n      array[offset + 1] = this.y;\n      array[offset + 2] = this.z;\n\n      return array;\n    }\n\n    fromBufferAttribute(attribute, index) {\n      this.x = attribute.getX(index);\n      this.y = attribute.getY(index);\n      this.z = attribute.getZ(index);\n\n      return this;\n    }\n\n    random() {\n      this.x = Math.random();\n      this.y = Math.random();\n      this.z = Math.random();\n\n      return this;\n    }\n\n    randomDirection() {\n      // Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n      const u = (Math.random() - 0.5) * 2;\n      const t = Math.random() * Math.PI * 2;\n      const f = Math.sqrt(1 - u ** 2);\n\n      this.x = f * Math.cos(t);\n      this.y = f * Math.sin(t);\n      this.z = u;\n\n      return this;\n    }\n\n    *[Symbol.iterator]() {\n      yield this.x;\n      yield this.y;\n      yield this.z;\n    }\n  }\n\n  const _vector$b = /*@__PURE__*/ new Vector3();\n  const _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\n  class Box3 {\n    constructor(\n      min = new Vector3(+Infinity, +Infinity, +Infinity),\n      max = new Vector3(-Infinity, -Infinity, -Infinity)\n    ) {\n      this.isBox3 = true;\n\n      this.min = min;\n      this.max = max;\n    }\n\n    set(min, max) {\n      this.min.copy(min);\n      this.max.copy(max);\n\n      return this;\n    }\n\n    setFromArray(array) {\n      this.makeEmpty();\n\n      for (let i = 0, il = array.length; i < il; i += 3) {\n        this.expandByPoint(_vector$a.fromArray(array, i));\n      }\n\n      return this;\n    }\n\n    setFromBufferAttribute(attribute) {\n      this.makeEmpty();\n\n      for (let i = 0, il = attribute.count; i < il; i++) {\n        this.expandByPoint(_vector$a.fromBufferAttribute(attribute, i));\n      }\n\n      return this;\n    }\n\n    setFromPoints(points) {\n      this.makeEmpty();\n\n      for (let i = 0, il = points.length; i < il; i++) {\n        this.expandByPoint(points[i]);\n      }\n\n      return this;\n    }\n\n    setFromCenterAndSize(center, size) {\n      const halfSize = _vector$a.copy(size).multiplyScalar(0.5);\n\n      this.min.copy(center).sub(halfSize);\n      this.max.copy(center).add(halfSize);\n\n      return this;\n    }\n\n    setFromObject(object, precise = false) {\n      this.makeEmpty();\n\n      return this.expandByObject(object, precise);\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n\n    copy(box) {\n      this.min.copy(box.min);\n      this.max.copy(box.max);\n\n      return this;\n    }\n\n    makeEmpty() {\n      this.min.x = this.min.y = this.min.z = +Infinity;\n      this.max.x = this.max.y = this.max.z = -Infinity;\n\n      return this;\n    }\n\n    isEmpty() {\n      // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n      return (\n        this.max.x < this.min.x ||\n        this.max.y < this.min.y ||\n        this.max.z < this.min.z\n      );\n    }\n\n    getCenter(target) {\n      return this.isEmpty()\n        ? target.set(0, 0, 0)\n        : target.addVectors(this.min, this.max).multiplyScalar(0.5);\n    }\n\n    getSize(target) {\n      return this.isEmpty()\n        ? target.set(0, 0, 0)\n        : target.subVectors(this.max, this.min);\n    }\n\n    expandByPoint(point) {\n      this.min.min(point);\n      this.max.max(point);\n\n      return this;\n    }\n\n    expandByVector(vector) {\n      this.min.sub(vector);\n      this.max.add(vector);\n\n      return this;\n    }\n\n    expandByScalar(scalar) {\n      this.min.addScalar(-scalar);\n      this.max.addScalar(scalar);\n\n      return this;\n    }\n\n    expandByObject(object, precise = false) {\n      // Computes the world-axis-aligned bounding box of an object (including its children),\n      // accounting for both the object's, and children's, world transforms\n\n      object.updateWorldMatrix(false, false);\n\n      if (object.boundingBox !== undefined) {\n        if (object.boundingBox === null) {\n          object.computeBoundingBox();\n        }\n\n        _box$3.copy(object.boundingBox);\n        _box$3.applyMatrix4(object.matrixWorld);\n\n        this.union(_box$3);\n      } else {\n        const geometry = object.geometry;\n\n        if (geometry !== undefined) {\n          if (\n            precise &&\n            geometry.attributes !== undefined &&\n            geometry.attributes.position !== undefined\n          ) {\n            const position = geometry.attributes.position;\n            for (let i = 0, l = position.count; i < l; i++) {\n              _vector$a\n                .fromBufferAttribute(position, i)\n                .applyMatrix4(object.matrixWorld);\n              this.expandByPoint(_vector$a);\n            }\n          } else {\n            if (geometry.boundingBox === null) {\n              geometry.computeBoundingBox();\n            }\n\n            _box$3.copy(geometry.boundingBox);\n            _box$3.applyMatrix4(object.matrixWorld);\n\n            this.union(_box$3);\n          }\n        }\n      }\n\n      const children = object.children;\n\n      for (let i = 0, l = children.length; i < l; i++) {\n        this.expandByObject(children[i], precise);\n      }\n\n      return this;\n    }\n\n    containsPoint(point) {\n      return point.x < this.min.x ||\n        point.x > this.max.x ||\n        point.y < this.min.y ||\n        point.y > this.max.y ||\n        point.z < this.min.z ||\n        point.z > this.max.z\n        ? false\n        : true;\n    }\n\n    containsBox(box) {\n      return (\n        this.min.x <= box.min.x &&\n        box.max.x <= this.max.x &&\n        this.min.y <= box.min.y &&\n        box.max.y <= this.max.y &&\n        this.min.z <= box.min.z &&\n        box.max.z <= this.max.z\n      );\n    }\n\n    getParameter(point, target) {\n      // This can potentially have a divide by zero if the box\n      // has a size dimension of 0.\n\n      return target.set(\n        (point.x - this.min.x) / (this.max.x - this.min.x),\n        (point.y - this.min.y) / (this.max.y - this.min.y),\n        (point.z - this.min.z) / (this.max.z - this.min.z)\n      );\n    }\n\n    intersectsBox(box) {\n      // using 6 splitting planes to rule out intersections.\n      return box.max.x < this.min.x ||\n        box.min.x > this.max.x ||\n        box.max.y < this.min.y ||\n        box.min.y > this.max.y ||\n        box.max.z < this.min.z ||\n        box.min.z > this.max.z\n        ? false\n        : true;\n    }\n\n    intersectsSphere(sphere) {\n      // Find the point on the AABB closest to the sphere center.\n      this.clampPoint(sphere.center, _vector$a);\n\n      // If that point is inside the sphere, the AABB and sphere intersect.\n      return (\n        _vector$a.distanceToSquared(sphere.center) <=\n        sphere.radius * sphere.radius\n      );\n    }\n\n    intersectsPlane(plane) {\n      // We compute the minimum and maximum dot product values. If those values\n      // are on the same side (back or front) of the plane, then there is no intersection.\n\n      let min, max;\n\n      if (plane.normal.x > 0) {\n        min = plane.normal.x * this.min.x;\n        max = plane.normal.x * this.max.x;\n      } else {\n        min = plane.normal.x * this.max.x;\n        max = plane.normal.x * this.min.x;\n      }\n\n      if (plane.normal.y > 0) {\n        min += plane.normal.y * this.min.y;\n        max += plane.normal.y * this.max.y;\n      } else {\n        min += plane.normal.y * this.max.y;\n        max += plane.normal.y * this.min.y;\n      }\n\n      if (plane.normal.z > 0) {\n        min += plane.normal.z * this.min.z;\n        max += plane.normal.z * this.max.z;\n      } else {\n        min += plane.normal.z * this.max.z;\n        max += plane.normal.z * this.min.z;\n      }\n\n      return min <= -plane.constant && max >= -plane.constant;\n    }\n\n    intersectsTriangle(triangle) {\n      if (this.isEmpty()) {\n        return false;\n      }\n\n      // compute box center and extents\n      this.getCenter(_center);\n      _extents.subVectors(this.max, _center);\n\n      // translate triangle to aabb origin\n      _v0$2.subVectors(triangle.a, _center);\n      _v1$7.subVectors(triangle.b, _center);\n      _v2$4.subVectors(triangle.c, _center);\n\n      // compute edge vectors for triangle\n      _f0.subVectors(_v1$7, _v0$2);\n      _f1.subVectors(_v2$4, _v1$7);\n      _f2.subVectors(_v0$2, _v2$4);\n\n      // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n      // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n      // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n      let axes = [\n        0,\n        -_f0.z,\n        _f0.y,\n        0,\n        -_f1.z,\n        _f1.y,\n        0,\n        -_f2.z,\n        _f2.y,\n        _f0.z,\n        0,\n        -_f0.x,\n        _f1.z,\n        0,\n        -_f1.x,\n        _f2.z,\n        0,\n        -_f2.x,\n        -_f0.y,\n        _f0.x,\n        0,\n        -_f1.y,\n        _f1.x,\n        0,\n        -_f2.y,\n        _f2.x,\n        0,\n      ];\n      if (!satForAxes(axes, _v0$2, _v1$7, _v2$4, _extents)) {\n        return false;\n      }\n\n      // test 3 face normals from the aabb\n      axes = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n      if (!satForAxes(axes, _v0$2, _v1$7, _v2$4, _extents)) {\n        return false;\n      }\n\n      // finally testing the face normal of the triangle\n      // use already existing triangle edge vectors here\n      _triangleNormal.crossVectors(_f0, _f1);\n      axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z];\n\n      return satForAxes(axes, _v0$2, _v1$7, _v2$4, _extents);\n    }\n\n    clampPoint(point, target) {\n      return target.copy(point).clamp(this.min, this.max);\n    }\n\n    distanceToPoint(point) {\n      return this.clampPoint(point, _vector$a).distanceTo(point);\n    }\n\n    getBoundingSphere(target) {\n      if (this.isEmpty()) {\n        target.makeEmpty();\n      } else {\n        this.getCenter(target.center);\n\n        target.radius = this.getSize(_vector$a).length() * 0.5;\n      }\n\n      return target;\n    }\n\n    intersect(box) {\n      this.min.max(box.min);\n      this.max.min(box.max);\n\n      // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n      if (this.isEmpty()) this.makeEmpty();\n\n      return this;\n    }\n\n    union(box) {\n      this.min.min(box.min);\n      this.max.max(box.max);\n\n      return this;\n    }\n\n    applyMatrix4(matrix) {\n      // transform of empty box is an empty box.\n      if (this.isEmpty()) return this;\n\n      // NOTE: I am using a binary pattern to specify all 2^3 combinations below\n      _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000\n      _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001\n      _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010\n      _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011\n      _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100\n      _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101\n      _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110\n      _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111\n\n      this.setFromPoints(_points);\n\n      return this;\n    }\n\n    translate(offset) {\n      this.min.add(offset);\n      this.max.add(offset);\n\n      return this;\n    }\n\n    equals(box) {\n      return box.min.equals(this.min) && box.max.equals(this.max);\n    }\n  }\n\n  const _points = [\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n    /*@__PURE__*/ new Vector3(),\n  ];\n\n  const _vector$a = /*@__PURE__*/ new Vector3();\n\n  const _box$3 = /*@__PURE__*/ new Box3();\n\n  // triangle centered vertices\n\n  const _v0$2 = /*@__PURE__*/ new Vector3();\n  const _v1$7 = /*@__PURE__*/ new Vector3();\n  const _v2$4 = /*@__PURE__*/ new Vector3();\n\n  // triangle edge vectors\n\n  const _f0 = /*@__PURE__*/ new Vector3();\n  const _f1 = /*@__PURE__*/ new Vector3();\n  const _f2 = /*@__PURE__*/ new Vector3();\n\n  const _center = /*@__PURE__*/ new Vector3();\n  const _extents = /*@__PURE__*/ new Vector3();\n  const _triangleNormal = /*@__PURE__*/ new Vector3();\n  const _testAxis = /*@__PURE__*/ new Vector3();\n\n  function satForAxes(axes, v0, v1, v2, extents) {\n    for (let i = 0, j = axes.length - 3; i <= j; i += 3) {\n      _testAxis.fromArray(axes, i);\n      // project the aabb onto the separating axis\n      const r =\n        extents.x * Math.abs(_testAxis.x) +\n        extents.y * Math.abs(_testAxis.y) +\n        extents.z * Math.abs(_testAxis.z);\n      // project all 3 vertices of the triangle onto the separating axis\n      const p0 = v0.dot(_testAxis);\n      const p1 = v1.dot(_testAxis);\n      const p2 = v2.dot(_testAxis);\n      // actual test, basically see if either of the most extreme of the triangle points intersects r\n      if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\n        // points of the projected triangle are outside the projected half-length of the aabb\n        // the axis is separating and we can exit\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  const _box$2 = /*@__PURE__*/ new Box3();\n  const _v1$6 = /*@__PURE__*/ new Vector3();\n  const _v2$3 = /*@__PURE__*/ new Vector3();\n\n  class Sphere {\n    constructor(center = new Vector3(), radius = -1) {\n      this.center = center;\n      this.radius = radius;\n    }\n\n    set(center, radius) {\n      this.center.copy(center);\n      this.radius = radius;\n\n      return this;\n    }\n\n    setFromPoints(points, optionalCenter) {\n      const center = this.center;\n\n      if (optionalCenter !== undefined) {\n        center.copy(optionalCenter);\n      } else {\n        _box$2.setFromPoints(points).getCenter(center);\n      }\n\n      let maxRadiusSq = 0;\n\n      for (let i = 0, il = points.length; i < il; i++) {\n        maxRadiusSq = Math.max(\n          maxRadiusSq,\n          center.distanceToSquared(points[i])\n        );\n      }\n\n      this.radius = Math.sqrt(maxRadiusSq);\n\n      return this;\n    }\n\n    copy(sphere) {\n      this.center.copy(sphere.center);\n      this.radius = sphere.radius;\n\n      return this;\n    }\n\n    isEmpty() {\n      return this.radius < 0;\n    }\n\n    makeEmpty() {\n      this.center.set(0, 0, 0);\n      this.radius = -1;\n\n      return this;\n    }\n\n    containsPoint(point) {\n      return point.distanceToSquared(this.center) <= this.radius * this.radius;\n    }\n\n    distanceToPoint(point) {\n      return point.distanceTo(this.center) - this.radius;\n    }\n\n    intersectsSphere(sphere) {\n      const radiusSum = this.radius + sphere.radius;\n\n      return (\n        sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum\n      );\n    }\n\n    intersectsBox(box) {\n      return box.intersectsSphere(this);\n    }\n\n    intersectsPlane(plane) {\n      return Math.abs(plane.distanceToPoint(this.center)) <= this.radius;\n    }\n\n    clampPoint(point, target) {\n      const deltaLengthSq = this.center.distanceToSquared(point);\n\n      target.copy(point);\n\n      if (deltaLengthSq > this.radius * this.radius) {\n        target.sub(this.center).normalize();\n        target.multiplyScalar(this.radius).add(this.center);\n      }\n\n      return target;\n    }\n\n    getBoundingBox(target) {\n      if (this.isEmpty()) {\n        // Empty sphere produces empty bounding box\n        target.makeEmpty();\n        return target;\n      }\n\n      target.set(this.center, this.center);\n      target.expandByScalar(this.radius);\n\n      return target;\n    }\n\n    applyMatrix4(matrix) {\n      this.center.applyMatrix4(matrix);\n      this.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n      return this;\n    }\n\n    translate(offset) {\n      this.center.add(offset);\n\n      return this;\n    }\n\n    expandByPoint(point) {\n      if (this.isEmpty()) {\n        this.center.copy(point);\n\n        this.radius = 0;\n\n        return this;\n      }\n\n      _v1$6.subVectors(point, this.center);\n\n      const lengthSq = _v1$6.lengthSq();\n\n      if (lengthSq > this.radius * this.radius) {\n        // calculate the minimal sphere\n\n        const length = Math.sqrt(lengthSq);\n\n        const delta = (length - this.radius) * 0.5;\n\n        this.center.addScaledVector(_v1$6, delta / length);\n\n        this.radius += delta;\n      }\n\n      return this;\n    }\n\n    union(sphere) {\n      if (sphere.isEmpty()) {\n        return this;\n      }\n\n      if (this.isEmpty()) {\n        this.copy(sphere);\n\n        return this;\n      }\n\n      if (this.center.equals(sphere.center) === true) {\n        this.radius = Math.max(this.radius, sphere.radius);\n      } else {\n        _v2$3.subVectors(sphere.center, this.center).setLength(sphere.radius);\n\n        this.expandByPoint(_v1$6.copy(sphere.center).add(_v2$3));\n\n        this.expandByPoint(_v1$6.copy(sphere.center).sub(_v2$3));\n      }\n\n      return this;\n    }\n\n    equals(sphere) {\n      return sphere.center.equals(this.center) && sphere.radius === this.radius;\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n  }\n\n  const _vector$9 = /*@__PURE__*/ new Vector3();\n  const _segCenter = /*@__PURE__*/ new Vector3();\n  const _segDir = /*@__PURE__*/ new Vector3();\n  const _diff = /*@__PURE__*/ new Vector3();\n\n  const _edge1 = /*@__PURE__*/ new Vector3();\n  const _edge2 = /*@__PURE__*/ new Vector3();\n  const _normal$1 = /*@__PURE__*/ new Vector3();\n\n  class Ray {\n    constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) {\n      this.origin = origin;\n      this.direction = direction;\n    }\n\n    set(origin, direction) {\n      this.origin.copy(origin);\n      this.direction.copy(direction);\n\n      return this;\n    }\n\n    copy(ray) {\n      this.origin.copy(ray.origin);\n      this.direction.copy(ray.direction);\n\n      return this;\n    }\n\n    at(t, target) {\n      return target.copy(this.origin).addScaledVector(this.direction, t);\n    }\n\n    lookAt(v) {\n      this.direction.copy(v).sub(this.origin).normalize();\n\n      return this;\n    }\n\n    recast(t) {\n      this.origin.copy(this.at(t, _vector$9));\n\n      return this;\n    }\n\n    closestPointToPoint(point, target) {\n      target.subVectors(point, this.origin);\n\n      const directionDistance = target.dot(this.direction);\n\n      if (directionDistance < 0) {\n        return target.copy(this.origin);\n      }\n\n      return target\n        .copy(this.origin)\n        .addScaledVector(this.direction, directionDistance);\n    }\n\n    distanceToPoint(point) {\n      return Math.sqrt(this.distanceSqToPoint(point));\n    }\n\n    distanceSqToPoint(point) {\n      const directionDistance = _vector$9\n        .subVectors(point, this.origin)\n        .dot(this.direction);\n\n      // point behind the ray\n\n      if (directionDistance < 0) {\n        return this.origin.distanceToSquared(point);\n      }\n\n      _vector$9\n        .copy(this.origin)\n        .addScaledVector(this.direction, directionDistance);\n\n      return _vector$9.distanceToSquared(point);\n    }\n\n    distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) {\n      // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n      // It returns the min distance between the ray and the segment\n      // defined by v0 and v1\n      // It can also set two optional targets :\n      // - The closest point on the ray\n      // - The closest point on the segment\n\n      _segCenter.copy(v0).add(v1).multiplyScalar(0.5);\n      _segDir.copy(v1).sub(v0).normalize();\n      _diff.copy(this.origin).sub(_segCenter);\n\n      const segExtent = v0.distanceTo(v1) * 0.5;\n      const a01 = -this.direction.dot(_segDir);\n      const b0 = _diff.dot(this.direction);\n      const b1 = -_diff.dot(_segDir);\n      const c = _diff.lengthSq();\n      const det = Math.abs(1 - a01 * a01);\n      let s0, s1, sqrDist, extDet;\n\n      if (det > 0) {\n        // The ray and segment are not parallel.\n\n        s0 = a01 * b1 - b0;\n        s1 = a01 * b0 - b1;\n        extDet = segExtent * det;\n\n        if (s0 >= 0) {\n          if (s1 >= -extDet) {\n            if (s1 <= extDet) {\n              // region 0\n              // Minimum at interior points of ray and segment.\n\n              const invDet = 1 / det;\n              s0 *= invDet;\n              s1 *= invDet;\n              sqrDist =\n                s0 * (s0 + a01 * s1 + 2 * b0) +\n                s1 * (a01 * s0 + s1 + 2 * b1) +\n                c;\n            } else {\n              // region 1\n\n              s1 = segExtent;\n              s0 = Math.max(0, -(a01 * s1 + b0));\n              sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n            }\n          } else {\n            // region 5\n\n            s1 = -segExtent;\n            s0 = Math.max(0, -(a01 * s1 + b0));\n            sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n          }\n        } else {\n          if (s1 <= -extDet) {\n            // region 4\n\n            s0 = Math.max(0, -(-a01 * segExtent + b0));\n            s1 =\n              s0 > 0\n                ? -segExtent\n                : Math.min(Math.max(-segExtent, -b1), segExtent);\n            sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n          } else if (s1 <= extDet) {\n            // region 3\n\n            s0 = 0;\n            s1 = Math.min(Math.max(-segExtent, -b1), segExtent);\n            sqrDist = s1 * (s1 + 2 * b1) + c;\n          } else {\n            // region 2\n\n            s0 = Math.max(0, -(a01 * segExtent + b0));\n            s1 =\n              s0 > 0\n                ? segExtent\n                : Math.min(Math.max(-segExtent, -b1), segExtent);\n            sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n          }\n        }\n      } else {\n        // Ray and segment are parallel.\n\n        s1 = a01 > 0 ? -segExtent : segExtent;\n        s0 = Math.max(0, -(a01 * s1 + b0));\n        sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n      }\n\n      if (optionalPointOnRay) {\n        optionalPointOnRay\n          .copy(this.origin)\n          .addScaledVector(this.direction, s0);\n      }\n\n      if (optionalPointOnSegment) {\n        optionalPointOnSegment.copy(_segCenter).addScaledVector(_segDir, s1);\n      }\n\n      return sqrDist;\n    }\n\n    intersectSphere(sphere, target) {\n      _vector$9.subVectors(sphere.center, this.origin);\n      const tca = _vector$9.dot(this.direction);\n      const d2 = _vector$9.dot(_vector$9) - tca * tca;\n      const radius2 = sphere.radius * sphere.radius;\n\n      if (d2 > radius2) return null;\n\n      const thc = Math.sqrt(radius2 - d2);\n\n      // t0 = first intersect point - entrance on front of sphere\n      const t0 = tca - thc;\n\n      // t1 = second intersect point - exit point on back of sphere\n      const t1 = tca + thc;\n\n      // test to see if t1 is behind the ray - if so, return null\n      if (t1 < 0) return null;\n\n      // test to see if t0 is behind the ray:\n      // if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n      // in order to always return an intersect point that is in front of the ray.\n      if (t0 < 0) return this.at(t1, target);\n\n      // else t0 is in front of the ray, so return the first collision point scaled by t0\n      return this.at(t0, target);\n    }\n\n    intersectsSphere(sphere) {\n      return (\n        this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius\n      );\n    }\n\n    distanceToPlane(plane) {\n      const denominator = plane.normal.dot(this.direction);\n\n      if (denominator === 0) {\n        // line is coplanar, return origin\n        if (plane.distanceToPoint(this.origin) === 0) {\n          return 0;\n        }\n\n        // Null is preferable to undefined since undefined means.... it is undefined\n\n        return null;\n      }\n\n      const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator;\n\n      // Return if the ray never intersects the plane\n\n      return t >= 0 ? t : null;\n    }\n\n    intersectPlane(plane, target) {\n      const t = this.distanceToPlane(plane);\n\n      if (t === null) {\n        return null;\n      }\n\n      return this.at(t, target);\n    }\n\n    intersectsPlane(plane) {\n      // check if the ray lies on the plane first\n\n      const distToPoint = plane.distanceToPoint(this.origin);\n\n      if (distToPoint === 0) {\n        return true;\n      }\n\n      const denominator = plane.normal.dot(this.direction);\n\n      if (denominator * distToPoint < 0) {\n        return true;\n      }\n\n      // ray origin is behind the plane (and is pointing behind it)\n\n      return false;\n    }\n\n    intersectBox(box, target) {\n      let tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n      const invdirx = 1 / this.direction.x,\n        invdiry = 1 / this.direction.y,\n        invdirz = 1 / this.direction.z;\n\n      const origin = this.origin;\n\n      if (invdirx >= 0) {\n        tmin = (box.min.x - origin.x) * invdirx;\n        tmax = (box.max.x - origin.x) * invdirx;\n      } else {\n        tmin = (box.max.x - origin.x) * invdirx;\n        tmax = (box.min.x - origin.x) * invdirx;\n      }\n\n      if (invdiry >= 0) {\n        tymin = (box.min.y - origin.y) * invdiry;\n        tymax = (box.max.y - origin.y) * invdiry;\n      } else {\n        tymin = (box.max.y - origin.y) * invdiry;\n        tymax = (box.min.y - origin.y) * invdiry;\n      }\n\n      if (tmin > tymax || tymin > tmax) return null;\n\n      if (tymin > tmin || isNaN(tmin)) tmin = tymin;\n\n      if (tymax < tmax || isNaN(tmax)) tmax = tymax;\n\n      if (invdirz >= 0) {\n        tzmin = (box.min.z - origin.z) * invdirz;\n        tzmax = (box.max.z - origin.z) * invdirz;\n      } else {\n        tzmin = (box.max.z - origin.z) * invdirz;\n        tzmax = (box.min.z - origin.z) * invdirz;\n      }\n\n      if (tmin > tzmax || tzmin > tmax) return null;\n\n      if (tzmin > tmin || tmin !== tmin) tmin = tzmin;\n\n      if (tzmax < tmax || tmax !== tmax) tmax = tzmax;\n\n      //return point closest to the ray (positive side)\n\n      if (tmax < 0) return null;\n\n      return this.at(tmin >= 0 ? tmin : tmax, target);\n    }\n\n    intersectsBox(box) {\n      return this.intersectBox(box, _vector$9) !== null;\n    }\n\n    intersectTriangle(a, b, c, backfaceCulling, target) {\n      // Compute the offset origin, edges, and normal.\n\n      // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n      _edge1.subVectors(b, a);\n      _edge2.subVectors(c, a);\n      _normal$1.crossVectors(_edge1, _edge2);\n\n      // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n      // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n      //   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n      //   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n      //   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n      let DdN = this.direction.dot(_normal$1);\n      let sign;\n\n      if (DdN > 0) {\n        if (backfaceCulling) return null;\n        sign = 1;\n      } else if (DdN < 0) {\n        sign = -1;\n        DdN = -DdN;\n      } else {\n        return null;\n      }\n\n      _diff.subVectors(this.origin, a);\n      const DdQxE2 =\n        sign * this.direction.dot(_edge2.crossVectors(_diff, _edge2));\n\n      // b1 < 0, no intersection\n      if (DdQxE2 < 0) {\n        return null;\n      }\n\n      const DdE1xQ = sign * this.direction.dot(_edge1.cross(_diff));\n\n      // b2 < 0, no intersection\n      if (DdE1xQ < 0) {\n        return null;\n      }\n\n      // b1+b2 > 1, no intersection\n      if (DdQxE2 + DdE1xQ > DdN) {\n        return null;\n      }\n\n      // Line intersects triangle, check if ray does.\n      const QdN = -sign * _diff.dot(_normal$1);\n\n      // t < 0, no intersection\n      if (QdN < 0) {\n        return null;\n      }\n\n      // Ray intersects triangle.\n      return this.at(QdN / DdN, target);\n    }\n\n    applyMatrix4(matrix4) {\n      this.origin.applyMatrix4(matrix4);\n      this.direction.transformDirection(matrix4);\n\n      return this;\n    }\n\n    equals(ray) {\n      return (\n        ray.origin.equals(this.origin) && ray.direction.equals(this.direction)\n      );\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n  }\n\n  class Matrix4 {\n    constructor(\n      n11,\n      n12,\n      n13,\n      n14,\n      n21,\n      n22,\n      n23,\n      n24,\n      n31,\n      n32,\n      n33,\n      n34,\n      n41,\n      n42,\n      n43,\n      n44\n    ) {\n      Matrix4.prototype.isMatrix4 = true;\n\n      this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\n      if (n11 !== undefined) {\n        this.set(\n          n11,\n          n12,\n          n13,\n          n14,\n          n21,\n          n22,\n          n23,\n          n24,\n          n31,\n          n32,\n          n33,\n          n34,\n          n41,\n          n42,\n          n43,\n          n44\n        );\n      }\n    }\n\n    set(\n      n11,\n      n12,\n      n13,\n      n14,\n      n21,\n      n22,\n      n23,\n      n24,\n      n31,\n      n32,\n      n33,\n      n34,\n      n41,\n      n42,\n      n43,\n      n44\n    ) {\n      const te = this.elements;\n\n      te[0] = n11;\n      te[4] = n12;\n      te[8] = n13;\n      te[12] = n14;\n      te[1] = n21;\n      te[5] = n22;\n      te[9] = n23;\n      te[13] = n24;\n      te[2] = n31;\n      te[6] = n32;\n      te[10] = n33;\n      te[14] = n34;\n      te[3] = n41;\n      te[7] = n42;\n      te[11] = n43;\n      te[15] = n44;\n\n      return this;\n    }\n\n    identity() {\n      this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    clone() {\n      return new Matrix4().fromArray(this.elements);\n    }\n\n    copy(m) {\n      const te = this.elements;\n      const me = m.elements;\n\n      te[0] = me[0];\n      te[1] = me[1];\n      te[2] = me[2];\n      te[3] = me[3];\n      te[4] = me[4];\n      te[5] = me[5];\n      te[6] = me[6];\n      te[7] = me[7];\n      te[8] = me[8];\n      te[9] = me[9];\n      te[10] = me[10];\n      te[11] = me[11];\n      te[12] = me[12];\n      te[13] = me[13];\n      te[14] = me[14];\n      te[15] = me[15];\n\n      return this;\n    }\n\n    copyPosition(m) {\n      const te = this.elements,\n        me = m.elements;\n\n      te[12] = me[12];\n      te[13] = me[13];\n      te[14] = me[14];\n\n      return this;\n    }\n\n    setFromMatrix3(m) {\n      const me = m.elements;\n\n      this.set(\n        me[0],\n        me[3],\n        me[6],\n        0,\n        me[1],\n        me[4],\n        me[7],\n        0,\n        me[2],\n        me[5],\n        me[8],\n        0,\n        0,\n        0,\n        0,\n        1\n      );\n\n      return this;\n    }\n\n    extractBasis(xAxis, yAxis, zAxis) {\n      xAxis.setFromMatrixColumn(this, 0);\n      yAxis.setFromMatrixColumn(this, 1);\n      zAxis.setFromMatrixColumn(this, 2);\n\n      return this;\n    }\n\n    makeBasis(xAxis, yAxis, zAxis) {\n      this.set(\n        xAxis.x,\n        yAxis.x,\n        zAxis.x,\n        0,\n        xAxis.y,\n        yAxis.y,\n        zAxis.y,\n        0,\n        xAxis.z,\n        yAxis.z,\n        zAxis.z,\n        0,\n        0,\n        0,\n        0,\n        1\n      );\n\n      return this;\n    }\n\n    extractRotation(m) {\n      // this method does not support reflection matrices\n\n      const te = this.elements;\n      const me = m.elements;\n\n      const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length();\n      const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length();\n      const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length();\n\n      te[0] = me[0] * scaleX;\n      te[1] = me[1] * scaleX;\n      te[2] = me[2] * scaleX;\n      te[3] = 0;\n\n      te[4] = me[4] * scaleY;\n      te[5] = me[5] * scaleY;\n      te[6] = me[6] * scaleY;\n      te[7] = 0;\n\n      te[8] = me[8] * scaleZ;\n      te[9] = me[9] * scaleZ;\n      te[10] = me[10] * scaleZ;\n      te[11] = 0;\n\n      te[12] = 0;\n      te[13] = 0;\n      te[14] = 0;\n      te[15] = 1;\n\n      return this;\n    }\n\n    makeRotationFromEuler(euler) {\n      const te = this.elements;\n\n      const x = euler.x,\n        y = euler.y,\n        z = euler.z;\n      const a = Math.cos(x),\n        b = Math.sin(x);\n      const c = Math.cos(y),\n        d = Math.sin(y);\n      const e = Math.cos(z),\n        f = Math.sin(z);\n\n      if (euler.order === \"XYZ\") {\n        const ae = a * e,\n          af = a * f,\n          be = b * e,\n          bf = b * f;\n\n        te[0] = c * e;\n        te[4] = -c * f;\n        te[8] = d;\n\n        te[1] = af + be * d;\n        te[5] = ae - bf * d;\n        te[9] = -b * c;\n\n        te[2] = bf - ae * d;\n        te[6] = be + af * d;\n        te[10] = a * c;\n      } else if (euler.order === \"YXZ\") {\n        const ce = c * e,\n          cf = c * f,\n          de = d * e,\n          df = d * f;\n\n        te[0] = ce + df * b;\n        te[4] = de * b - cf;\n        te[8] = a * d;\n\n        te[1] = a * f;\n        te[5] = a * e;\n        te[9] = -b;\n\n        te[2] = cf * b - de;\n        te[6] = df + ce * b;\n        te[10] = a * c;\n      } else if (euler.order === \"ZXY\") {\n        const ce = c * e,\n          cf = c * f,\n          de = d * e,\n          df = d * f;\n\n        te[0] = ce - df * b;\n        te[4] = -a * f;\n        te[8] = de + cf * b;\n\n        te[1] = cf + de * b;\n        te[5] = a * e;\n        te[9] = df - ce * b;\n\n        te[2] = -a * d;\n        te[6] = b;\n        te[10] = a * c;\n      } else if (euler.order === \"ZYX\") {\n        const ae = a * e,\n          af = a * f,\n          be = b * e,\n          bf = b * f;\n\n        te[0] = c * e;\n        te[4] = be * d - af;\n        te[8] = ae * d + bf;\n\n        te[1] = c * f;\n        te[5] = bf * d + ae;\n        te[9] = af * d - be;\n\n        te[2] = -d;\n        te[6] = b * c;\n        te[10] = a * c;\n      } else if (euler.order === \"YZX\") {\n        const ac = a * c,\n          ad = a * d,\n          bc = b * c,\n          bd = b * d;\n\n        te[0] = c * e;\n        te[4] = bd - ac * f;\n        te[8] = bc * f + ad;\n\n        te[1] = f;\n        te[5] = a * e;\n        te[9] = -b * e;\n\n        te[2] = -d * e;\n        te[6] = ad * f + bc;\n        te[10] = ac - bd * f;\n      } else if (euler.order === \"XZY\") {\n        const ac = a * c,\n          ad = a * d,\n          bc = b * c,\n          bd = b * d;\n\n        te[0] = c * e;\n        te[4] = -f;\n        te[8] = d * e;\n\n        te[1] = ac * f + bd;\n        te[5] = a * e;\n        te[9] = ad * f - bc;\n\n        te[2] = bc * f - ad;\n        te[6] = b * e;\n        te[10] = bd * f + ac;\n      }\n\n      // bottom row\n      te[3] = 0;\n      te[7] = 0;\n      te[11] = 0;\n\n      // last column\n      te[12] = 0;\n      te[13] = 0;\n      te[14] = 0;\n      te[15] = 1;\n\n      return this;\n    }\n\n    makeRotationFromQuaternion(q) {\n      return this.compose(_zero, q, _one);\n    }\n\n    lookAt(eye, target, up) {\n      const te = this.elements;\n\n      _z.subVectors(eye, target);\n\n      if (_z.lengthSq() === 0) {\n        // eye and target are in the same position\n\n        _z.z = 1;\n      }\n\n      _z.normalize();\n      _x.crossVectors(up, _z);\n\n      if (_x.lengthSq() === 0) {\n        // up and z are parallel\n\n        if (Math.abs(up.z) === 1) {\n          _z.x += 0.0001;\n        } else {\n          _z.z += 0.0001;\n        }\n\n        _z.normalize();\n        _x.crossVectors(up, _z);\n      }\n\n      _x.normalize();\n      _y.crossVectors(_z, _x);\n\n      te[0] = _x.x;\n      te[4] = _y.x;\n      te[8] = _z.x;\n      te[1] = _x.y;\n      te[5] = _y.y;\n      te[9] = _z.y;\n      te[2] = _x.z;\n      te[6] = _y.z;\n      te[10] = _z.z;\n\n      return this;\n    }\n\n    multiply(m) {\n      return this.multiplyMatrices(this, m);\n    }\n\n    premultiply(m) {\n      return this.multiplyMatrices(m, this);\n    }\n\n    multiplyMatrices(a, b) {\n      const ae = a.elements;\n      const be = b.elements;\n      const te = this.elements;\n\n      const a11 = ae[0],\n        a12 = ae[4],\n        a13 = ae[8],\n        a14 = ae[12];\n      const a21 = ae[1],\n        a22 = ae[5],\n        a23 = ae[9],\n        a24 = ae[13];\n      const a31 = ae[2],\n        a32 = ae[6],\n        a33 = ae[10],\n        a34 = ae[14];\n      const a41 = ae[3],\n        a42 = ae[7],\n        a43 = ae[11],\n        a44 = ae[15];\n\n      const b11 = be[0],\n        b12 = be[4],\n        b13 = be[8],\n        b14 = be[12];\n      const b21 = be[1],\n        b22 = be[5],\n        b23 = be[9],\n        b24 = be[13];\n      const b31 = be[2],\n        b32 = be[6],\n        b33 = be[10],\n        b34 = be[14];\n      const b41 = be[3],\n        b42 = be[7],\n        b43 = be[11],\n        b44 = be[15];\n\n      te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n      te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n      te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n      te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n      te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n      te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n      te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n      te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n      te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n      te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n      te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n      te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n      te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n      te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n      te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n      te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n      return this;\n    }\n\n    multiplyScalar(s) {\n      const te = this.elements;\n\n      te[0] *= s;\n      te[4] *= s;\n      te[8] *= s;\n      te[12] *= s;\n      te[1] *= s;\n      te[5] *= s;\n      te[9] *= s;\n      te[13] *= s;\n      te[2] *= s;\n      te[6] *= s;\n      te[10] *= s;\n      te[14] *= s;\n      te[3] *= s;\n      te[7] *= s;\n      te[11] *= s;\n      te[15] *= s;\n\n      return this;\n    }\n\n    determinant() {\n      const te = this.elements;\n\n      const n11 = te[0],\n        n12 = te[4],\n        n13 = te[8],\n        n14 = te[12];\n      const n21 = te[1],\n        n22 = te[5],\n        n23 = te[9],\n        n24 = te[13];\n      const n31 = te[2],\n        n32 = te[6],\n        n33 = te[10],\n        n34 = te[14];\n      const n41 = te[3],\n        n42 = te[7],\n        n43 = te[11],\n        n44 = te[15];\n\n      //TODO: make this more efficient\n      //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n      return (\n        n41 *\n          (+n14 * n23 * n32 -\n            n13 * n24 * n32 -\n            n14 * n22 * n33 +\n            n12 * n24 * n33 +\n            n13 * n22 * n34 -\n            n12 * n23 * n34) +\n        n42 *\n          (+n11 * n23 * n34 -\n            n11 * n24 * n33 +\n            n14 * n21 * n33 -\n            n13 * n21 * n34 +\n            n13 * n24 * n31 -\n            n14 * n23 * n31) +\n        n43 *\n          (+n11 * n24 * n32 -\n            n11 * n22 * n34 -\n            n14 * n21 * n32 +\n            n12 * n21 * n34 +\n            n14 * n22 * n31 -\n            n12 * n24 * n31) +\n        n44 *\n          (-n13 * n22 * n31 -\n            n11 * n23 * n32 +\n            n11 * n22 * n33 +\n            n13 * n21 * n32 -\n            n12 * n21 * n33 +\n            n12 * n23 * n31)\n      );\n    }\n\n    transpose() {\n      const te = this.elements;\n      let tmp;\n\n      tmp = te[1];\n      te[1] = te[4];\n      te[4] = tmp;\n      tmp = te[2];\n      te[2] = te[8];\n      te[8] = tmp;\n      tmp = te[6];\n      te[6] = te[9];\n      te[9] = tmp;\n\n      tmp = te[3];\n      te[3] = te[12];\n      te[12] = tmp;\n      tmp = te[7];\n      te[7] = te[13];\n      te[13] = tmp;\n      tmp = te[11];\n      te[11] = te[14];\n      te[14] = tmp;\n\n      return this;\n    }\n\n    setPosition(x, y, z) {\n      const te = this.elements;\n\n      if (x.isVector3) {\n        te[12] = x.x;\n        te[13] = x.y;\n        te[14] = x.z;\n      } else {\n        te[12] = x;\n        te[13] = y;\n        te[14] = z;\n      }\n\n      return this;\n    }\n\n    invert() {\n      // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n      const te = this.elements,\n        n11 = te[0],\n        n21 = te[1],\n        n31 = te[2],\n        n41 = te[3],\n        n12 = te[4],\n        n22 = te[5],\n        n32 = te[6],\n        n42 = te[7],\n        n13 = te[8],\n        n23 = te[9],\n        n33 = te[10],\n        n43 = te[11],\n        n14 = te[12],\n        n24 = te[13],\n        n34 = te[14],\n        n44 = te[15],\n        t11 =\n          n23 * n34 * n42 -\n          n24 * n33 * n42 +\n          n24 * n32 * n43 -\n          n22 * n34 * n43 -\n          n23 * n32 * n44 +\n          n22 * n33 * n44,\n        t12 =\n          n14 * n33 * n42 -\n          n13 * n34 * n42 -\n          n14 * n32 * n43 +\n          n12 * n34 * n43 +\n          n13 * n32 * n44 -\n          n12 * n33 * n44,\n        t13 =\n          n13 * n24 * n42 -\n          n14 * n23 * n42 +\n          n14 * n22 * n43 -\n          n12 * n24 * n43 -\n          n13 * n22 * n44 +\n          n12 * n23 * n44,\n        t14 =\n          n14 * n23 * n32 -\n          n13 * n24 * n32 -\n          n14 * n22 * n33 +\n          n12 * n24 * n33 +\n          n13 * n22 * n34 -\n          n12 * n23 * n34;\n\n      const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n      if (det === 0)\n        return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n\n      const detInv = 1 / det;\n\n      te[0] = t11 * detInv;\n      te[1] =\n        (n24 * n33 * n41 -\n          n23 * n34 * n41 -\n          n24 * n31 * n43 +\n          n21 * n34 * n43 +\n          n23 * n31 * n44 -\n          n21 * n33 * n44) *\n        detInv;\n      te[2] =\n        (n22 * n34 * n41 -\n          n24 * n32 * n41 +\n          n24 * n31 * n42 -\n          n21 * n34 * n42 -\n          n22 * n31 * n44 +\n          n21 * n32 * n44) *\n        detInv;\n      te[3] =\n        (n23 * n32 * n41 -\n          n22 * n33 * n41 -\n          n23 * n31 * n42 +\n          n21 * n33 * n42 +\n          n22 * n31 * n43 -\n          n21 * n32 * n43) *\n        detInv;\n\n      te[4] = t12 * detInv;\n      te[5] =\n        (n13 * n34 * n41 -\n          n14 * n33 * n41 +\n          n14 * n31 * n43 -\n          n11 * n34 * n43 -\n          n13 * n31 * n44 +\n          n11 * n33 * n44) *\n        detInv;\n      te[6] =\n        (n14 * n32 * n41 -\n          n12 * n34 * n41 -\n          n14 * n31 * n42 +\n          n11 * n34 * n42 +\n          n12 * n31 * n44 -\n          n11 * n32 * n44) *\n        detInv;\n      te[7] =\n        (n12 * n33 * n41 -\n          n13 * n32 * n41 +\n          n13 * n31 * n42 -\n          n11 * n33 * n42 -\n          n12 * n31 * n43 +\n          n11 * n32 * n43) *\n        detInv;\n\n      te[8] = t13 * detInv;\n      te[9] =\n        (n14 * n23 * n41 -\n          n13 * n24 * n41 -\n          n14 * n21 * n43 +\n          n11 * n24 * n43 +\n          n13 * n21 * n44 -\n          n11 * n23 * n44) *\n        detInv;\n      te[10] =\n        (n12 * n24 * n41 -\n          n14 * n22 * n41 +\n          n14 * n21 * n42 -\n          n11 * n24 * n42 -\n          n12 * n21 * n44 +\n          n11 * n22 * n44) *\n        detInv;\n      te[11] =\n        (n13 * n22 * n41 -\n          n12 * n23 * n41 -\n          n13 * n21 * n42 +\n          n11 * n23 * n42 +\n          n12 * n21 * n43 -\n          n11 * n22 * n43) *\n        detInv;\n\n      te[12] = t14 * detInv;\n      te[13] =\n        (n13 * n24 * n31 -\n          n14 * n23 * n31 +\n          n14 * n21 * n33 -\n          n11 * n24 * n33 -\n          n13 * n21 * n34 +\n          n11 * n23 * n34) *\n        detInv;\n      te[14] =\n        (n14 * n22 * n31 -\n          n12 * n24 * n31 -\n          n14 * n21 * n32 +\n          n11 * n24 * n32 +\n          n12 * n21 * n34 -\n          n11 * n22 * n34) *\n        detInv;\n      te[15] =\n        (n12 * n23 * n31 -\n          n13 * n22 * n31 +\n          n13 * n21 * n32 -\n          n11 * n23 * n32 -\n          n12 * n21 * n33 +\n          n11 * n22 * n33) *\n        detInv;\n\n      return this;\n    }\n\n    scale(v) {\n      const te = this.elements;\n      const x = v.x,\n        y = v.y,\n        z = v.z;\n\n      te[0] *= x;\n      te[4] *= y;\n      te[8] *= z;\n      te[1] *= x;\n      te[5] *= y;\n      te[9] *= z;\n      te[2] *= x;\n      te[6] *= y;\n      te[10] *= z;\n      te[3] *= x;\n      te[7] *= y;\n      te[11] *= z;\n\n      return this;\n    }\n\n    getMaxScaleOnAxis() {\n      const te = this.elements;\n\n      const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n      const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n      const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n\n      return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n    }\n\n    makeTranslation(x, y, z) {\n      if (x.isVector3) {\n        this.set(1, 0, 0, x.x, 0, 1, 0, x.y, 0, 0, 1, x.z, 0, 0, 0, 1);\n      } else {\n        this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);\n      }\n\n      return this;\n    }\n\n    makeRotationX(theta) {\n      const c = Math.cos(theta),\n        s = Math.sin(theta);\n\n      this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    makeRotationY(theta) {\n      const c = Math.cos(theta),\n        s = Math.sin(theta);\n\n      this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    makeRotationZ(theta) {\n      const c = Math.cos(theta),\n        s = Math.sin(theta);\n\n      this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    makeRotationAxis(axis, angle) {\n      // Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n      const c = Math.cos(angle);\n      const s = Math.sin(angle);\n      const t = 1 - c;\n      const x = axis.x,\n        y = axis.y,\n        z = axis.z;\n      const tx = t * x,\n        ty = t * y;\n\n      this.set(\n        tx * x + c,\n        tx * y - s * z,\n        tx * z + s * y,\n        0,\n        tx * y + s * z,\n        ty * y + c,\n        ty * z - s * x,\n        0,\n        tx * z - s * y,\n        ty * z + s * x,\n        t * z * z + c,\n        0,\n        0,\n        0,\n        0,\n        1\n      );\n\n      return this;\n    }\n\n    makeScale(x, y, z) {\n      this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    makeShear(xy, xz, yx, yz, zx, zy) {\n      this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1);\n\n      return this;\n    }\n\n    compose(position, quaternion, scale) {\n      const te = this.elements;\n\n      const x = quaternion._x,\n        y = quaternion._y,\n        z = quaternion._z,\n        w = quaternion._w;\n      const x2 = x + x,\n        y2 = y + y,\n        z2 = z + z;\n      const xx = x * x2,\n        xy = x * y2,\n        xz = x * z2;\n      const yy = y * y2,\n        yz = y * z2,\n        zz = z * z2;\n      const wx = w * x2,\n        wy = w * y2,\n        wz = w * z2;\n\n      const sx = scale.x,\n        sy = scale.y,\n        sz = scale.z;\n\n      te[0] = (1 - (yy + zz)) * sx;\n      te[1] = (xy + wz) * sx;\n      te[2] = (xz - wy) * sx;\n      te[3] = 0;\n\n      te[4] = (xy - wz) * sy;\n      te[5] = (1 - (xx + zz)) * sy;\n      te[6] = (yz + wx) * sy;\n      te[7] = 0;\n\n      te[8] = (xz + wy) * sz;\n      te[9] = (yz - wx) * sz;\n      te[10] = (1 - (xx + yy)) * sz;\n      te[11] = 0;\n\n      te[12] = position.x;\n      te[13] = position.y;\n      te[14] = position.z;\n      te[15] = 1;\n\n      return this;\n    }\n\n    decompose(position, quaternion, scale) {\n      const te = this.elements;\n\n      let sx = _v1$5.set(te[0], te[1], te[2]).length();\n      const sy = _v1$5.set(te[4], te[5], te[6]).length();\n      const sz = _v1$5.set(te[8], te[9], te[10]).length();\n\n      // if determine is negative, we need to invert one scale\n      const det = this.determinant();\n      if (det < 0) sx = -sx;\n\n      position.x = te[12];\n      position.y = te[13];\n      position.z = te[14];\n\n      // scale the rotation part\n      _m1$2.copy(this);\n\n      const invSX = 1 / sx;\n      const invSY = 1 / sy;\n      const invSZ = 1 / sz;\n\n      _m1$2.elements[0] *= invSX;\n      _m1$2.elements[1] *= invSX;\n      _m1$2.elements[2] *= invSX;\n\n      _m1$2.elements[4] *= invSY;\n      _m1$2.elements[5] *= invSY;\n      _m1$2.elements[6] *= invSY;\n\n      _m1$2.elements[8] *= invSZ;\n      _m1$2.elements[9] *= invSZ;\n      _m1$2.elements[10] *= invSZ;\n\n      quaternion.setFromRotationMatrix(_m1$2);\n\n      scale.x = sx;\n      scale.y = sy;\n      scale.z = sz;\n\n      return this;\n    }\n\n    makePerspective(\n      left,\n      right,\n      top,\n      bottom,\n      near,\n      far,\n      coordinateSystem = WebGLCoordinateSystem\n    ) {\n      const te = this.elements;\n      const x = (2 * near) / (right - left);\n      const y = (2 * near) / (top - bottom);\n\n      const a = (right + left) / (right - left);\n      const b = (top + bottom) / (top - bottom);\n\n      let c, d;\n\n      if (coordinateSystem === WebGLCoordinateSystem) {\n        c = -(far + near) / (far - near);\n        d = (-2 * far * near) / (far - near);\n      } else if (coordinateSystem === WebGPUCoordinateSystem) {\n        c = -far / (far - near);\n        d = (-far * near) / (far - near);\n      } else {\n        throw new Error(\n          \"THREE.Matrix4.makePerspective(): Invalid coordinate system: \" +\n            coordinateSystem\n        );\n      }\n\n      te[0] = x;\n      te[4] = 0;\n      te[8] = a;\n      te[12] = 0;\n      te[1] = 0;\n      te[5] = y;\n      te[9] = b;\n      te[13] = 0;\n      te[2] = 0;\n      te[6] = 0;\n      te[10] = c;\n      te[14] = d;\n      te[3] = 0;\n      te[7] = 0;\n      te[11] = -1;\n      te[15] = 0;\n\n      return this;\n    }\n\n    makeOrthographic(\n      left,\n      right,\n      top,\n      bottom,\n      near,\n      far,\n      coordinateSystem = WebGLCoordinateSystem\n    ) {\n      const te = this.elements;\n      const w = 1.0 / (right - left);\n      const h = 1.0 / (top - bottom);\n      const p = 1.0 / (far - near);\n\n      const x = (right + left) * w;\n      const y = (top + bottom) * h;\n\n      let z, zInv;\n\n      if (coordinateSystem === WebGLCoordinateSystem) {\n        z = (far + near) * p;\n        zInv = -2 * p;\n      } else if (coordinateSystem === WebGPUCoordinateSystem) {\n        z = near * p;\n        zInv = -1 * p;\n      } else {\n        throw new Error(\n          \"THREE.Matrix4.makeOrthographic(): Invalid coordinate system: \" +\n            coordinateSystem\n        );\n      }\n\n      te[0] = 2 * w;\n      te[4] = 0;\n      te[8] = 0;\n      te[12] = -x;\n      te[1] = 0;\n      te[5] = 2 * h;\n      te[9] = 0;\n      te[13] = -y;\n      te[2] = 0;\n      te[6] = 0;\n      te[10] = zInv;\n      te[14] = -z;\n      te[3] = 0;\n      te[7] = 0;\n      te[11] = 0;\n      te[15] = 1;\n\n      return this;\n    }\n\n    equals(matrix) {\n      const te = this.elements;\n      const me = matrix.elements;\n\n      for (let i = 0; i < 16; i++) {\n        if (te[i] !== me[i]) return false;\n      }\n\n      return true;\n    }\n\n    fromArray(array, offset = 0) {\n      for (let i = 0; i < 16; i++) {\n        this.elements[i] = array[i + offset];\n      }\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      const te = this.elements;\n\n      array[offset] = te[0];\n      array[offset + 1] = te[1];\n      array[offset + 2] = te[2];\n      array[offset + 3] = te[3];\n\n      array[offset + 4] = te[4];\n      array[offset + 5] = te[5];\n      array[offset + 6] = te[6];\n      array[offset + 7] = te[7];\n\n      array[offset + 8] = te[8];\n      array[offset + 9] = te[9];\n      array[offset + 10] = te[10];\n      array[offset + 11] = te[11];\n\n      array[offset + 12] = te[12];\n      array[offset + 13] = te[13];\n      array[offset + 14] = te[14];\n      array[offset + 15] = te[15];\n\n      return array;\n    }\n  }\n\n  const _v1$5 = /*@__PURE__*/ new Vector3();\n  const _m1$2 = /*@__PURE__*/ new Matrix4();\n  const _zero = /*@__PURE__*/ new Vector3(0, 0, 0);\n  const _one = /*@__PURE__*/ new Vector3(1, 1, 1);\n  const _x = /*@__PURE__*/ new Vector3();\n  const _y = /*@__PURE__*/ new Vector3();\n  const _z = /*@__PURE__*/ new Vector3();\n\n  const _matrix = /*@__PURE__*/ new Matrix4();\n  const _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\n  class Euler {\n    constructor(x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER) {\n      this.isEuler = true;\n\n      this._x = x;\n      this._y = y;\n      this._z = z;\n      this._order = order;\n    }\n\n    get x() {\n      return this._x;\n    }\n\n    set x(value) {\n      this._x = value;\n      this._onChangeCallback();\n    }\n\n    get y() {\n      return this._y;\n    }\n\n    set y(value) {\n      this._y = value;\n      this._onChangeCallback();\n    }\n\n    get z() {\n      return this._z;\n    }\n\n    set z(value) {\n      this._z = value;\n      this._onChangeCallback();\n    }\n\n    get order() {\n      return this._order;\n    }\n\n    set order(value) {\n      this._order = value;\n      this._onChangeCallback();\n    }\n\n    set(x, y, z, order = this._order) {\n      this._x = x;\n      this._y = y;\n      this._z = z;\n      this._order = order;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    clone() {\n      return new this.constructor(this._x, this._y, this._z, this._order);\n    }\n\n    copy(euler) {\n      this._x = euler._x;\n      this._y = euler._y;\n      this._z = euler._z;\n      this._order = euler._order;\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    setFromRotationMatrix(m, order = this._order, update = true) {\n      // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n      const te = m.elements;\n      const m11 = te[0],\n        m12 = te[4],\n        m13 = te[8];\n      const m21 = te[1],\n        m22 = te[5],\n        m23 = te[9];\n      const m31 = te[2],\n        m32 = te[6],\n        m33 = te[10];\n\n      switch (order) {\n        case \"XYZ\":\n          this._y = Math.asin(clamp(m13, -1, 1));\n\n          if (Math.abs(m13) < 0.9999999) {\n            this._x = Math.atan2(-m23, m33);\n            this._z = Math.atan2(-m12, m11);\n          } else {\n            this._x = Math.atan2(m32, m22);\n            this._z = 0;\n          }\n\n          break;\n\n        case \"YXZ\":\n          this._x = Math.asin(-clamp(m23, -1, 1));\n\n          if (Math.abs(m23) < 0.9999999) {\n            this._y = Math.atan2(m13, m33);\n            this._z = Math.atan2(m21, m22);\n          } else {\n            this._y = Math.atan2(-m31, m11);\n            this._z = 0;\n          }\n\n          break;\n\n        case \"ZXY\":\n          this._x = Math.asin(clamp(m32, -1, 1));\n\n          if (Math.abs(m32) < 0.9999999) {\n            this._y = Math.atan2(-m31, m33);\n            this._z = Math.atan2(-m12, m22);\n          } else {\n            this._y = 0;\n            this._z = Math.atan2(m21, m11);\n          }\n\n          break;\n\n        case \"ZYX\":\n          this._y = Math.asin(-clamp(m31, -1, 1));\n\n          if (Math.abs(m31) < 0.9999999) {\n            this._x = Math.atan2(m32, m33);\n            this._z = Math.atan2(m21, m11);\n          } else {\n            this._x = 0;\n            this._z = Math.atan2(-m12, m22);\n          }\n\n          break;\n\n        case \"YZX\":\n          this._z = Math.asin(clamp(m21, -1, 1));\n\n          if (Math.abs(m21) < 0.9999999) {\n            this._x = Math.atan2(-m23, m22);\n            this._y = Math.atan2(-m31, m11);\n          } else {\n            this._x = 0;\n            this._y = Math.atan2(m13, m33);\n          }\n\n          break;\n\n        case \"XZY\":\n          this._z = Math.asin(-clamp(m12, -1, 1));\n\n          if (Math.abs(m12) < 0.9999999) {\n            this._x = Math.atan2(m32, m22);\n            this._y = Math.atan2(m13, m11);\n          } else {\n            this._x = Math.atan2(-m23, m33);\n            this._y = 0;\n          }\n\n          break;\n\n        default:\n          console.warn(\n            \"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \" +\n              order\n          );\n      }\n\n      this._order = order;\n\n      if (update === true) this._onChangeCallback();\n\n      return this;\n    }\n\n    setFromQuaternion(q, order, update) {\n      _matrix.makeRotationFromQuaternion(q);\n\n      return this.setFromRotationMatrix(_matrix, order, update);\n    }\n\n    setFromVector3(v, order = this._order) {\n      return this.set(v.x, v.y, v.z, order);\n    }\n\n    reorder(newOrder) {\n      // WARNING: this discards revolution information -bhouston\n\n      _quaternion$3.setFromEuler(this);\n\n      return this.setFromQuaternion(_quaternion$3, newOrder);\n    }\n\n    equals(euler) {\n      return (\n        euler._x === this._x &&\n        euler._y === this._y &&\n        euler._z === this._z &&\n        euler._order === this._order\n      );\n    }\n\n    fromArray(array) {\n      this._x = array[0];\n      this._y = array[1];\n      this._z = array[2];\n      if (array[3] !== undefined) this._order = array[3];\n\n      this._onChangeCallback();\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      array[offset] = this._x;\n      array[offset + 1] = this._y;\n      array[offset + 2] = this._z;\n      array[offset + 3] = this._order;\n\n      return array;\n    }\n\n    _onChange(callback) {\n      this._onChangeCallback = callback;\n\n      return this;\n    }\n\n    _onChangeCallback() {}\n\n    *[Symbol.iterator]() {\n      yield this._x;\n      yield this._y;\n      yield this._z;\n      yield this._order;\n    }\n  }\n\n  Euler.DEFAULT_ORDER = \"XYZ\";\n\n  class Layers {\n    constructor() {\n      this.mask = 1 | 0;\n    }\n\n    set(channel) {\n      this.mask = ((1 << channel) | 0) >>> 0;\n    }\n\n    enable(channel) {\n      this.mask |= (1 << channel) | 0;\n    }\n\n    enableAll() {\n      this.mask = 0xffffffff | 0;\n    }\n\n    toggle(channel) {\n      this.mask ^= (1 << channel) | 0;\n    }\n\n    disable(channel) {\n      this.mask &= ~((1 << channel) | 0);\n    }\n\n    disableAll() {\n      this.mask = 0;\n    }\n\n    test(layers) {\n      return (this.mask & layers.mask) !== 0;\n    }\n\n    isEnabled(channel) {\n      return (this.mask & ((1 << channel) | 0)) !== 0;\n    }\n  }\n\n  let _object3DId = 0;\n\n  const _v1$4 = /*@__PURE__*/ new Vector3();\n  const _q1 = /*@__PURE__*/ new Quaternion();\n  const _m1$1 = /*@__PURE__*/ new Matrix4();\n  const _target = /*@__PURE__*/ new Vector3();\n\n  const _position$3 = /*@__PURE__*/ new Vector3();\n  const _scale$2 = /*@__PURE__*/ new Vector3();\n  const _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\n  const _xAxis = /*@__PURE__*/ new Vector3(1, 0, 0);\n  const _yAxis = /*@__PURE__*/ new Vector3(0, 1, 0);\n  const _zAxis = /*@__PURE__*/ new Vector3(0, 0, 1);\n\n  const _addedEvent = { type: \"added\" };\n  const _removedEvent = { type: \"removed\" };\n\n  class Object3D extends EventDispatcher {\n    constructor() {\n      super();\n\n      this.isObject3D = true;\n\n      Object.defineProperty(this, \"id\", { value: _object3DId++ });\n\n      this.uuid = generateUUID();\n\n      this.name = \"\";\n      this.type = \"Object3D\";\n\n      this.parent = null;\n      this.children = [];\n\n      this.up = Object3D.DEFAULT_UP.clone();\n\n      const position = new Vector3();\n      const rotation = new Euler();\n      const quaternion = new Quaternion();\n      const scale = new Vector3(1, 1, 1);\n\n      function onRotationChange() {\n        quaternion.setFromEuler(rotation, false);\n      }\n\n      function onQuaternionChange() {\n        rotation.setFromQuaternion(quaternion, undefined, false);\n      }\n\n      rotation._onChange(onRotationChange);\n      quaternion._onChange(onQuaternionChange);\n\n      Object.defineProperties(this, {\n        position: {\n          configurable: true,\n          enumerable: true,\n          value: position,\n        },\n        rotation: {\n          configurable: true,\n          enumerable: true,\n          value: rotation,\n        },\n        quaternion: {\n          configurable: true,\n          enumerable: true,\n          value: quaternion,\n        },\n        scale: {\n          configurable: true,\n          enumerable: true,\n          value: scale,\n        },\n        modelViewMatrix: {\n          value: new Matrix4(),\n        },\n        normalMatrix: {\n          value: new Matrix3(),\n        },\n      });\n\n      this.matrix = new Matrix4();\n      this.matrixWorld = new Matrix4();\n\n      this.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n      this.matrixWorldNeedsUpdate = false;\n\n      this.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\n      this.layers = new Layers();\n      this.visible = true;\n\n      this.castShadow = false;\n      this.receiveShadow = false;\n\n      this.frustumCulled = true;\n      this.renderOrder = 0;\n\n      this.animations = [];\n\n      this.userData = {};\n    }\n\n    onBeforeRender(/* renderer, scene, camera, geometry, material, group */) {}\n\n    onAfterRender(/* renderer, scene, camera, geometry, material, group */) {}\n\n    applyMatrix4(matrix) {\n      if (this.matrixAutoUpdate) this.updateMatrix();\n\n      this.matrix.premultiply(matrix);\n\n      this.matrix.decompose(this.position, this.quaternion, this.scale);\n    }\n\n    applyQuaternion(q) {\n      this.quaternion.premultiply(q);\n\n      return this;\n    }\n\n    setRotationFromAxisAngle(axis, angle) {\n      // assumes axis is normalized\n\n      this.quaternion.setFromAxisAngle(axis, angle);\n    }\n\n    setRotationFromEuler(euler) {\n      this.quaternion.setFromEuler(euler, true);\n    }\n\n    setRotationFromMatrix(m) {\n      // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n      this.quaternion.setFromRotationMatrix(m);\n    }\n\n    setRotationFromQuaternion(q) {\n      // assumes q is normalized\n\n      this.quaternion.copy(q);\n    }\n\n    rotateOnAxis(axis, angle) {\n      // rotate object on axis in object space\n      // axis is assumed to be normalized\n\n      _q1.setFromAxisAngle(axis, angle);\n\n      this.quaternion.multiply(_q1);\n\n      return this;\n    }\n\n    rotateOnWorldAxis(axis, angle) {\n      // rotate object on axis in world space\n      // axis is assumed to be normalized\n      // method assumes no rotated parent\n\n      _q1.setFromAxisAngle(axis, angle);\n\n      this.quaternion.premultiply(_q1);\n\n      return this;\n    }\n\n    rotateX(angle) {\n      return this.rotateOnAxis(_xAxis, angle);\n    }\n\n    rotateY(angle) {\n      return this.rotateOnAxis(_yAxis, angle);\n    }\n\n    rotateZ(angle) {\n      return this.rotateOnAxis(_zAxis, angle);\n    }\n\n    translateOnAxis(axis, distance) {\n      // translate object by distance along axis in object space\n      // axis is assumed to be normalized\n\n      _v1$4.copy(axis).applyQuaternion(this.quaternion);\n\n      this.position.add(_v1$4.multiplyScalar(distance));\n\n      return this;\n    }\n\n    translateX(distance) {\n      return this.translateOnAxis(_xAxis, distance);\n    }\n\n    translateY(distance) {\n      return this.translateOnAxis(_yAxis, distance);\n    }\n\n    translateZ(distance) {\n      return this.translateOnAxis(_zAxis, distance);\n    }\n\n    localToWorld(vector) {\n      this.updateWorldMatrix(true, false);\n\n      return vector.applyMatrix4(this.matrixWorld);\n    }\n\n    worldToLocal(vector) {\n      this.updateWorldMatrix(true, false);\n\n      return vector.applyMatrix4(_m1$1.copy(this.matrixWorld).invert());\n    }\n\n    lookAt(x, y, z) {\n      // This method does not support objects having non-uniformly-scaled parent(s)\n\n      if (x.isVector3) {\n        _target.copy(x);\n      } else {\n        _target.set(x, y, z);\n      }\n\n      const parent = this.parent;\n\n      this.updateWorldMatrix(true, false);\n\n      _position$3.setFromMatrixPosition(this.matrixWorld);\n\n      if (this.isCamera || this.isLight) {\n        _m1$1.lookAt(_position$3, _target, this.up);\n      } else {\n        _m1$1.lookAt(_target, _position$3, this.up);\n      }\n\n      this.quaternion.setFromRotationMatrix(_m1$1);\n\n      if (parent) {\n        _m1$1.extractRotation(parent.matrixWorld);\n        _q1.setFromRotationMatrix(_m1$1);\n        this.quaternion.premultiply(_q1.invert());\n      }\n    }\n\n    add(object) {\n      if (arguments.length > 1) {\n        for (let i = 0; i < arguments.length; i++) {\n          this.add(arguments[i]);\n        }\n\n        return this;\n      }\n\n      if (object === this) {\n        console.error(\n          \"THREE.Object3D.add: object can't be added as a child of itself.\",\n          object\n        );\n        return this;\n      }\n\n      if (object && object.isObject3D) {\n        if (object.parent !== null) {\n          object.parent.remove(object);\n        }\n\n        object.parent = this;\n        this.children.push(object);\n\n        object.dispatchEvent(_addedEvent);\n      } else {\n        console.error(\n          \"THREE.Object3D.add: object not an instance of THREE.Object3D.\",\n          object\n        );\n      }\n\n      return this;\n    }\n\n    remove(object) {\n      if (arguments.length > 1) {\n        for (let i = 0; i < arguments.length; i++) {\n          this.remove(arguments[i]);\n        }\n\n        return this;\n      }\n\n      const index = this.children.indexOf(object);\n\n      if (index !== -1) {\n        object.parent = null;\n        this.children.splice(index, 1);\n\n        object.dispatchEvent(_removedEvent);\n      }\n\n      return this;\n    }\n\n    removeFromParent() {\n      const parent = this.parent;\n\n      if (parent !== null) {\n        parent.remove(this);\n      }\n\n      return this;\n    }\n\n    clear() {\n      for (let i = 0; i < this.children.length; i++) {\n        const object = this.children[i];\n\n        object.parent = null;\n\n        object.dispatchEvent(_removedEvent);\n      }\n\n      this.children.length = 0;\n\n      return this;\n    }\n\n    attach(object) {\n      // adds object as a child of this, while maintaining the object's world transform\n\n      // Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n      this.updateWorldMatrix(true, false);\n\n      _m1$1.copy(this.matrixWorld).invert();\n\n      if (object.parent !== null) {\n        object.parent.updateWorldMatrix(true, false);\n\n        _m1$1.multiply(object.parent.matrixWorld);\n      }\n\n      object.applyMatrix4(_m1$1);\n\n      this.add(object);\n\n      object.updateWorldMatrix(false, true);\n\n      return this;\n    }\n\n    getObjectById(id) {\n      return this.getObjectByProperty(\"id\", id);\n    }\n\n    getObjectByName(name) {\n      return this.getObjectByProperty(\"name\", name);\n    }\n\n    getObjectByProperty(name, value) {\n      if (this[name] === value) return this;\n\n      for (let i = 0, l = this.children.length; i < l; i++) {\n        const child = this.children[i];\n        const object = child.getObjectByProperty(name, value);\n\n        if (object !== undefined) {\n          return object;\n        }\n      }\n\n      return undefined;\n    }\n\n    getObjectsByProperty(name, value) {\n      let result = [];\n\n      if (this[name] === value) result.push(this);\n\n      for (let i = 0, l = this.children.length; i < l; i++) {\n        const childResult = this.children[i].getObjectsByProperty(name, value);\n\n        if (childResult.length > 0) {\n          result = result.concat(childResult);\n        }\n      }\n\n      return result;\n    }\n\n    getWorldPosition(target) {\n      this.updateWorldMatrix(true, false);\n\n      return target.setFromMatrixPosition(this.matrixWorld);\n    }\n\n    getWorldQuaternion(target) {\n      this.updateWorldMatrix(true, false);\n\n      this.matrixWorld.decompose(_position$3, target, _scale$2);\n\n      return target;\n    }\n\n    getWorldScale(target) {\n      this.updateWorldMatrix(true, false);\n\n      this.matrixWorld.decompose(_position$3, _quaternion$2, target);\n\n      return target;\n    }\n\n    getWorldDirection(target) {\n      this.updateWorldMatrix(true, false);\n\n      const e = this.matrixWorld.elements;\n\n      return target.set(e[8], e[9], e[10]).normalize();\n    }\n\n    raycast(/* raycaster, intersects */) {}\n\n    traverse(callback) {\n      callback(this);\n\n      const children = this.children;\n\n      for (let i = 0, l = children.length; i < l; i++) {\n        children[i].traverse(callback);\n      }\n    }\n\n    traverseVisible(callback) {\n      if (this.visible === false) return;\n\n      callback(this);\n\n      const children = this.children;\n\n      for (let i = 0, l = children.length; i < l; i++) {\n        children[i].traverseVisible(callback);\n      }\n    }\n\n    traverseAncestors(callback) {\n      const parent = this.parent;\n\n      if (parent !== null) {\n        callback(parent);\n\n        parent.traverseAncestors(callback);\n      }\n    }\n\n    updateMatrix() {\n      this.matrix.compose(this.position, this.quaternion, this.scale);\n\n      this.matrixWorldNeedsUpdate = true;\n    }\n\n    updateMatrixWorld(force) {\n      if (this.matrixAutoUpdate) this.updateMatrix();\n\n      if (this.matrixWorldNeedsUpdate || force) {\n        if (this.parent === null) {\n          this.matrixWorld.copy(this.matrix);\n        } else {\n          this.matrixWorld.multiplyMatrices(\n            this.parent.matrixWorld,\n            this.matrix\n          );\n        }\n\n        this.matrixWorldNeedsUpdate = false;\n\n        force = true;\n      }\n\n      // update children\n\n      const children = this.children;\n\n      for (let i = 0, l = children.length; i < l; i++) {\n        const child = children[i];\n\n        if (child.matrixWorldAutoUpdate === true || force === true) {\n          child.updateMatrixWorld(force);\n        }\n      }\n    }\n\n    updateWorldMatrix(updateParents, updateChildren) {\n      const parent = this.parent;\n\n      if (\n        updateParents === true &&\n        parent !== null &&\n        parent.matrixWorldAutoUpdate === true\n      ) {\n        parent.updateWorldMatrix(true, false);\n      }\n\n      if (this.matrixAutoUpdate) this.updateMatrix();\n\n      if (this.parent === null) {\n        this.matrixWorld.copy(this.matrix);\n      } else {\n        this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\n      }\n\n      // update children\n\n      if (updateChildren === true) {\n        const children = this.children;\n\n        for (let i = 0, l = children.length; i < l; i++) {\n          const child = children[i];\n\n          if (child.matrixWorldAutoUpdate === true) {\n            child.updateWorldMatrix(false, true);\n          }\n        }\n      }\n    }\n\n    toJSON(meta) {\n      // meta is a string when called from JSON.stringify\n      const isRootObject = meta === undefined || typeof meta === \"string\";\n\n      const output = {};\n\n      // meta is a hash used to collect geometries, materials.\n      // not providing it implies that this is the root object\n      // being serialized.\n      if (isRootObject) {\n        // initialize meta obj\n        meta = {\n          geometries: {},\n          materials: {},\n          textures: {},\n          images: {},\n          shapes: {},\n          skeletons: {},\n          animations: {},\n          nodes: {},\n        };\n\n        output.metadata = {\n          version: 4.6,\n          type: \"Object\",\n          generator: \"Object3D.toJSON\",\n        };\n      }\n\n      // standard Object3D serialization\n\n      const object = {};\n\n      object.uuid = this.uuid;\n      object.type = this.type;\n\n      if (this.name !== \"\") object.name = this.name;\n      if (this.castShadow === true) object.castShadow = true;\n      if (this.receiveShadow === true) object.receiveShadow = true;\n      if (this.visible === false) object.visible = false;\n      if (this.frustumCulled === false) object.frustumCulled = false;\n      if (this.renderOrder !== 0) object.renderOrder = this.renderOrder;\n      if (Object.keys(this.userData).length > 0)\n        object.userData = this.userData;\n\n      object.layers = this.layers.mask;\n      object.matrix = this.matrix.toArray();\n      object.up = this.up.toArray();\n\n      if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false;\n\n      // object specific properties\n\n      if (this.isInstancedMesh) {\n        object.type = \"InstancedMesh\";\n        object.count = this.count;\n        object.instanceMatrix = this.instanceMatrix.toJSON();\n        if (this.instanceColor !== null)\n          object.instanceColor = this.instanceColor.toJSON();\n      }\n\n      //\n\n      function serialize(library, element) {\n        if (library[element.uuid] === undefined) {\n          library[element.uuid] = element.toJSON(meta);\n        }\n\n        return element.uuid;\n      }\n\n      if (this.isScene) {\n        if (this.background) {\n          if (this.background.isColor) {\n            object.background = this.background.toJSON();\n          } else if (this.background.isTexture) {\n            object.background = this.background.toJSON(meta).uuid;\n          }\n        }\n\n        if (\n          this.environment &&\n          this.environment.isTexture &&\n          this.environment.isRenderTargetTexture !== true\n        ) {\n          object.environment = this.environment.toJSON(meta).uuid;\n        }\n      } else if (this.isMesh || this.isLine || this.isPoints) {\n        object.geometry = serialize(meta.geometries, this.geometry);\n\n        const parameters = this.geometry.parameters;\n\n        if (parameters !== undefined && parameters.shapes !== undefined) {\n          const shapes = parameters.shapes;\n\n          if (Array.isArray(shapes)) {\n            for (let i = 0, l = shapes.length; i < l; i++) {\n              const shape = shapes[i];\n\n              serialize(meta.shapes, shape);\n            }\n          } else {\n            serialize(meta.shapes, shapes);\n          }\n        }\n      }\n\n      if (this.isSkinnedMesh) {\n        object.bindMode = this.bindMode;\n        object.bindMatrix = this.bindMatrix.toArray();\n\n        if (this.skeleton !== undefined) {\n          serialize(meta.skeletons, this.skeleton);\n\n          object.skeleton = this.skeleton.uuid;\n        }\n      }\n\n      if (this.material !== undefined) {\n        if (Array.isArray(this.material)) {\n          const uuids = [];\n\n          for (let i = 0, l = this.material.length; i < l; i++) {\n            uuids.push(serialize(meta.materials, this.material[i]));\n          }\n\n          object.material = uuids;\n        } else {\n          object.material = serialize(meta.materials, this.material);\n        }\n      }\n\n      //\n\n      if (this.children.length > 0) {\n        object.children = [];\n\n        for (let i = 0; i < this.children.length; i++) {\n          object.children.push(this.children[i].toJSON(meta).object);\n        }\n      }\n\n      //\n\n      if (this.animations.length > 0) {\n        object.animations = [];\n\n        for (let i = 0; i < this.animations.length; i++) {\n          const animation = this.animations[i];\n\n          object.animations.push(serialize(meta.animations, animation));\n        }\n      }\n\n      if (isRootObject) {\n        const geometries = extractFromCache(meta.geometries);\n        const materials = extractFromCache(meta.materials);\n        const textures = extractFromCache(meta.textures);\n        const images = extractFromCache(meta.images);\n        const shapes = extractFromCache(meta.shapes);\n        const skeletons = extractFromCache(meta.skeletons);\n        const animations = extractFromCache(meta.animations);\n        const nodes = extractFromCache(meta.nodes);\n\n        if (geometries.length > 0) output.geometries = geometries;\n        if (materials.length > 0) output.materials = materials;\n        if (textures.length > 0) output.textures = textures;\n        if (images.length > 0) output.images = images;\n        if (shapes.length > 0) output.shapes = shapes;\n        if (skeletons.length > 0) output.skeletons = skeletons;\n        if (animations.length > 0) output.animations = animations;\n        if (nodes.length > 0) output.nodes = nodes;\n      }\n\n      output.object = object;\n\n      return output;\n\n      // extract data from the cache hash\n      // remove metadata on each item\n      // and return as array\n      function extractFromCache(cache) {\n        const values = [];\n        for (const key in cache) {\n          const data = cache[key];\n          delete data.metadata;\n          values.push(data);\n        }\n\n        return values;\n      }\n    }\n\n    clone(recursive) {\n      return new this.constructor().copy(this, recursive);\n    }\n\n    copy(source, recursive = true) {\n      this.name = source.name;\n\n      this.up.copy(source.up);\n\n      this.position.copy(source.position);\n      this.rotation.order = source.rotation.order;\n      this.quaternion.copy(source.quaternion);\n      this.scale.copy(source.scale);\n\n      this.matrix.copy(source.matrix);\n      this.matrixWorld.copy(source.matrixWorld);\n\n      this.matrixAutoUpdate = source.matrixAutoUpdate;\n      this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n      this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\n      this.layers.mask = source.layers.mask;\n      this.visible = source.visible;\n\n      this.castShadow = source.castShadow;\n      this.receiveShadow = source.receiveShadow;\n\n      this.frustumCulled = source.frustumCulled;\n      this.renderOrder = source.renderOrder;\n\n      this.animations = source.animations.slice();\n\n      this.userData = JSON.parse(JSON.stringify(source.userData));\n\n      if (recursive === true) {\n        for (let i = 0; i < source.children.length; i++) {\n          const child = source.children[i];\n          this.add(child.clone());\n        }\n      }\n\n      return this;\n    }\n  }\n\n  Object3D.DEFAULT_UP = /*@__PURE__*/ new Vector3(0, 1, 0);\n  Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\n  Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\n  const _v0$1 = /*@__PURE__*/ new Vector3();\n  const _v1$3 = /*@__PURE__*/ new Vector3();\n  const _v2$2 = /*@__PURE__*/ new Vector3();\n  const _v3$1 = /*@__PURE__*/ new Vector3();\n\n  const _vab = /*@__PURE__*/ new Vector3();\n  const _vac = /*@__PURE__*/ new Vector3();\n  const _vbc = /*@__PURE__*/ new Vector3();\n  const _vap = /*@__PURE__*/ new Vector3();\n  const _vbp = /*@__PURE__*/ new Vector3();\n  const _vcp = /*@__PURE__*/ new Vector3();\n\n  let warnedGetUV = false;\n\n  class Triangle {\n    constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) {\n      this.a = a;\n      this.b = b;\n      this.c = c;\n    }\n\n    static getNormal(a, b, c, target) {\n      target.subVectors(c, b);\n      _v0$1.subVectors(a, b);\n      target.cross(_v0$1);\n\n      const targetLengthSq = target.lengthSq();\n      if (targetLengthSq > 0) {\n        return target.multiplyScalar(1 / Math.sqrt(targetLengthSq));\n      }\n\n      return target.set(0, 0, 0);\n    }\n\n    // static/instance method to calculate barycentric coordinates\n    // based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n    static getBarycoord(point, a, b, c, target) {\n      _v0$1.subVectors(c, a);\n      _v1$3.subVectors(b, a);\n      _v2$2.subVectors(point, a);\n\n      const dot00 = _v0$1.dot(_v0$1);\n      const dot01 = _v0$1.dot(_v1$3);\n      const dot02 = _v0$1.dot(_v2$2);\n      const dot11 = _v1$3.dot(_v1$3);\n      const dot12 = _v1$3.dot(_v2$2);\n\n      const denom = dot00 * dot11 - dot01 * dot01;\n\n      // collinear or singular triangle\n      if (denom === 0) {\n        // arbitrary location outside of triangle?\n        // not sure if this is the best idea, maybe should be returning undefined\n        return target.set(-2, -1, -1);\n      }\n\n      const invDenom = 1 / denom;\n      const u = (dot11 * dot02 - dot01 * dot12) * invDenom;\n      const v = (dot00 * dot12 - dot01 * dot02) * invDenom;\n\n      // barycentric coordinates must always sum to 1\n      return target.set(1 - u - v, v, u);\n    }\n\n    static containsPoint(point, a, b, c) {\n      this.getBarycoord(point, a, b, c, _v3$1);\n\n      return _v3$1.x >= 0 && _v3$1.y >= 0 && _v3$1.x + _v3$1.y <= 1;\n    }\n\n    static getUV(point, p1, p2, p3, uv1, uv2, uv3, target) {\n      // @deprecated, r151\n\n      if (warnedGetUV === false) {\n        console.warn(\n          \"THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().\"\n        );\n\n        warnedGetUV = true;\n      }\n\n      return this.getInterpolation(point, p1, p2, p3, uv1, uv2, uv3, target);\n    }\n\n    static getInterpolation(point, p1, p2, p3, v1, v2, v3, target) {\n      this.getBarycoord(point, p1, p2, p3, _v3$1);\n\n      target.setScalar(0);\n      target.addScaledVector(v1, _v3$1.x);\n      target.addScaledVector(v2, _v3$1.y);\n      target.addScaledVector(v3, _v3$1.z);\n\n      return target;\n    }\n\n    static isFrontFacing(a, b, c, direction) {\n      _v0$1.subVectors(c, b);\n      _v1$3.subVectors(a, b);\n\n      // strictly front facing\n      return _v0$1.cross(_v1$3).dot(direction) < 0 ? true : false;\n    }\n\n    set(a, b, c) {\n      this.a.copy(a);\n      this.b.copy(b);\n      this.c.copy(c);\n\n      return this;\n    }\n\n    setFromPointsAndIndices(points, i0, i1, i2) {\n      this.a.copy(points[i0]);\n      this.b.copy(points[i1]);\n      this.c.copy(points[i2]);\n\n      return this;\n    }\n\n    setFromAttributeAndIndices(attribute, i0, i1, i2) {\n      this.a.fromBufferAttribute(attribute, i0);\n      this.b.fromBufferAttribute(attribute, i1);\n      this.c.fromBufferAttribute(attribute, i2);\n\n      return this;\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n\n    copy(triangle) {\n      this.a.copy(triangle.a);\n      this.b.copy(triangle.b);\n      this.c.copy(triangle.c);\n\n      return this;\n    }\n\n    getArea() {\n      _v0$1.subVectors(this.c, this.b);\n      _v1$3.subVectors(this.a, this.b);\n\n      return _v0$1.cross(_v1$3).length() * 0.5;\n    }\n\n    getMidpoint(target) {\n      return target\n        .addVectors(this.a, this.b)\n        .add(this.c)\n        .multiplyScalar(1 / 3);\n    }\n\n    getNormal(target) {\n      return Triangle.getNormal(this.a, this.b, this.c, target);\n    }\n\n    getPlane(target) {\n      return target.setFromCoplanarPoints(this.a, this.b, this.c);\n    }\n\n    getBarycoord(point, target) {\n      return Triangle.getBarycoord(point, this.a, this.b, this.c, target);\n    }\n\n    getUV(point, uv1, uv2, uv3, target) {\n      // @deprecated, r151\n\n      if (warnedGetUV === false) {\n        console.warn(\n          \"THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().\"\n        );\n\n        warnedGetUV = true;\n      }\n\n      return Triangle.getInterpolation(\n        point,\n        this.a,\n        this.b,\n        this.c,\n        uv1,\n        uv2,\n        uv3,\n        target\n      );\n    }\n\n    getInterpolation(point, v1, v2, v3, target) {\n      return Triangle.getInterpolation(\n        point,\n        this.a,\n        this.b,\n        this.c,\n        v1,\n        v2,\n        v3,\n        target\n      );\n    }\n\n    containsPoint(point) {\n      return Triangle.containsPoint(point, this.a, this.b, this.c);\n    }\n\n    isFrontFacing(direction) {\n      return Triangle.isFrontFacing(this.a, this.b, this.c, direction);\n    }\n\n    intersectsBox(box) {\n      return box.intersectsTriangle(this);\n    }\n\n    closestPointToPoint(p, target) {\n      const a = this.a,\n        b = this.b,\n        c = this.c;\n      let v, w;\n\n      // algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n      // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n      // under the accompanying license; see chapter 5.1.5 for detailed explanation.\n      // basically, we're distinguishing which of the voronoi regions of the triangle\n      // the point lies in with the minimum amount of redundant computation.\n\n      _vab.subVectors(b, a);\n      _vac.subVectors(c, a);\n      _vap.subVectors(p, a);\n      const d1 = _vab.dot(_vap);\n      const d2 = _vac.dot(_vap);\n      if (d1 <= 0 && d2 <= 0) {\n        // vertex region of A; barycentric coords (1, 0, 0)\n        return target.copy(a);\n      }\n\n      _vbp.subVectors(p, b);\n      const d3 = _vab.dot(_vbp);\n      const d4 = _vac.dot(_vbp);\n      if (d3 >= 0 && d4 <= d3) {\n        // vertex region of B; barycentric coords (0, 1, 0)\n        return target.copy(b);\n      }\n\n      const vc = d1 * d4 - d3 * d2;\n      if (vc <= 0 && d1 >= 0 && d3 <= 0) {\n        v = d1 / (d1 - d3);\n        // edge region of AB; barycentric coords (1-v, v, 0)\n        return target.copy(a).addScaledVector(_vab, v);\n      }\n\n      _vcp.subVectors(p, c);\n      const d5 = _vab.dot(_vcp);\n      const d6 = _vac.dot(_vcp);\n      if (d6 >= 0 && d5 <= d6) {\n        // vertex region of C; barycentric coords (0, 0, 1)\n        return target.copy(c);\n      }\n\n      const vb = d5 * d2 - d1 * d6;\n      if (vb <= 0 && d2 >= 0 && d6 <= 0) {\n        w = d2 / (d2 - d6);\n        // edge region of AC; barycentric coords (1-w, 0, w)\n        return target.copy(a).addScaledVector(_vac, w);\n      }\n\n      const va = d3 * d6 - d5 * d4;\n      if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {\n        _vbc.subVectors(c, b);\n        w = (d4 - d3) / (d4 - d3 + (d5 - d6));\n        // edge region of BC; barycentric coords (0, 1-w, w)\n        return target.copy(b).addScaledVector(_vbc, w); // edge region of BC\n      }\n\n      // face region\n      const denom = 1 / (va + vb + vc);\n      // u = va * denom\n      v = vb * denom;\n      w = vc * denom;\n\n      return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w);\n    }\n\n    equals(triangle) {\n      return (\n        triangle.a.equals(this.a) &&\n        triangle.b.equals(this.b) &&\n        triangle.c.equals(this.c)\n      );\n    }\n  }\n\n  let materialId = 0;\n\n  class Material extends EventDispatcher {\n    constructor() {\n      super();\n\n      this.isMaterial = true;\n\n      Object.defineProperty(this, \"id\", { value: materialId++ });\n\n      this.uuid = generateUUID();\n\n      this.name = \"\";\n      this.type = \"Material\";\n\n      this.blending = NormalBlending;\n      this.side = FrontSide;\n      this.vertexColors = false;\n\n      this.opacity = 1;\n      this.transparent = false;\n      this.alphaHash = false;\n\n      this.blendSrc = SrcAlphaFactor;\n      this.blendDst = OneMinusSrcAlphaFactor;\n      this.blendEquation = AddEquation;\n      this.blendSrcAlpha = null;\n      this.blendDstAlpha = null;\n      this.blendEquationAlpha = null;\n\n      this.depthFunc = LessEqualDepth;\n      this.depthTest = true;\n      this.depthWrite = true;\n\n      this.stencilWriteMask = 0xff;\n      this.stencilFunc = AlwaysStencilFunc;\n      this.stencilRef = 0;\n      this.stencilFuncMask = 0xff;\n      this.stencilFail = KeepStencilOp;\n      this.stencilZFail = KeepStencilOp;\n      this.stencilZPass = KeepStencilOp;\n      this.stencilWrite = false;\n\n      this.clippingPlanes = null;\n      this.clipIntersection = false;\n      this.clipShadows = false;\n\n      this.shadowSide = null;\n\n      this.colorWrite = true;\n\n      this.precision = null; // override the renderer's default precision for this material\n\n      this.polygonOffset = false;\n      this.polygonOffsetFactor = 0;\n      this.polygonOffsetUnits = 0;\n\n      this.dithering = false;\n\n      this.alphaToCoverage = false;\n      this.premultipliedAlpha = false;\n      this.forceSinglePass = false;\n\n      this.visible = true;\n\n      this.toneMapped = true;\n\n      this.userData = {};\n\n      this.version = 0;\n\n      this._alphaTest = 0;\n    }\n\n    get alphaTest() {\n      return this._alphaTest;\n    }\n\n    set alphaTest(value) {\n      if (this._alphaTest > 0 !== value > 0) {\n        this.version++;\n      }\n\n      this._alphaTest = value;\n    }\n\n    onBuild(/* shaderobject, renderer */) {}\n\n    onBeforeRender(/* renderer, scene, camera, geometry, object, group */) {}\n\n    onBeforeCompile(/* shaderobject, renderer */) {}\n\n    customProgramCacheKey() {\n      return this.onBeforeCompile.toString();\n    }\n\n    setValues(values) {\n      if (values === undefined) return;\n\n      for (const key in values) {\n        const newValue = values[key];\n\n        if (newValue === undefined) {\n          console.warn(\n            `THREE.Material: parameter '${key}' has value of undefined.`\n          );\n          continue;\n        }\n\n        const currentValue = this[key];\n\n        if (currentValue === undefined) {\n          console.warn(\n            `THREE.Material: '${key}' is not a property of THREE.${this.type}.`\n          );\n          continue;\n        }\n\n        if (currentValue && currentValue.isColor) {\n          currentValue.set(newValue);\n        } else if (\n          currentValue &&\n          currentValue.isVector3 &&\n          newValue &&\n          newValue.isVector3\n        ) {\n          currentValue.copy(newValue);\n        } else {\n          this[key] = newValue;\n        }\n      }\n    }\n\n    toJSON(meta) {\n      const isRootObject = meta === undefined || typeof meta === \"string\";\n\n      if (isRootObject) {\n        meta = {\n          textures: {},\n          images: {},\n        };\n      }\n\n      const data = {\n        metadata: {\n          version: 4.6,\n          type: \"Material\",\n          generator: \"Material.toJSON\",\n        },\n      };\n\n      // standard Material serialization\n      data.uuid = this.uuid;\n      data.type = this.type;\n\n      if (this.name !== \"\") data.name = this.name;\n\n      if (this.color && this.color.isColor) data.color = this.color.getHex();\n\n      if (this.roughness !== undefined) data.roughness = this.roughness;\n      if (this.metalness !== undefined) data.metalness = this.metalness;\n\n      if (this.sheen !== undefined) data.sheen = this.sheen;\n      if (this.sheenColor && this.sheenColor.isColor)\n        data.sheenColor = this.sheenColor.getHex();\n      if (this.sheenRoughness !== undefined)\n        data.sheenRoughness = this.sheenRoughness;\n      if (this.emissive && this.emissive.isColor)\n        data.emissive = this.emissive.getHex();\n      if (this.emissiveIntensity && this.emissiveIntensity !== 1)\n        data.emissiveIntensity = this.emissiveIntensity;\n\n      if (this.specular && this.specular.isColor)\n        data.specular = this.specular.getHex();\n      if (this.specularIntensity !== undefined)\n        data.specularIntensity = this.specularIntensity;\n      if (this.specularColor && this.specularColor.isColor)\n        data.specularColor = this.specularColor.getHex();\n      if (this.shininess !== undefined) data.shininess = this.shininess;\n      if (this.clearcoat !== undefined) data.clearcoat = this.clearcoat;\n      if (this.clearcoatRoughness !== undefined)\n        data.clearcoatRoughness = this.clearcoatRoughness;\n\n      if (this.clearcoatMap && this.clearcoatMap.isTexture) {\n        data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid;\n      }\n\n      if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) {\n        data.clearcoatRoughnessMap =\n          this.clearcoatRoughnessMap.toJSON(meta).uuid;\n      }\n\n      if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) {\n        data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid;\n        data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n      }\n\n      if (this.iridescence !== undefined) data.iridescence = this.iridescence;\n      if (this.iridescenceIOR !== undefined)\n        data.iridescenceIOR = this.iridescenceIOR;\n      if (this.iridescenceThicknessRange !== undefined)\n        data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n      if (this.iridescenceMap && this.iridescenceMap.isTexture) {\n        data.iridescenceMap = this.iridescenceMap.toJSON(meta).uuid;\n      }\n\n      if (\n        this.iridescenceThicknessMap &&\n        this.iridescenceThicknessMap.isTexture\n      ) {\n        data.iridescenceThicknessMap =\n          this.iridescenceThicknessMap.toJSON(meta).uuid;\n      }\n\n      if (this.anisotropy !== undefined) data.anisotropy = this.anisotropy;\n      if (this.anisotropyRotation !== undefined)\n        data.anisotropyRotation = this.anisotropyRotation;\n\n      if (this.anisotropyMap && this.anisotropyMap.isTexture) {\n        data.anisotropyMap = this.anisotropyMap.toJSON(meta).uuid;\n      }\n\n      if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid;\n      if (this.matcap && this.matcap.isTexture)\n        data.matcap = this.matcap.toJSON(meta).uuid;\n      if (this.alphaMap && this.alphaMap.isTexture)\n        data.alphaMap = this.alphaMap.toJSON(meta).uuid;\n\n      if (this.lightMap && this.lightMap.isTexture) {\n        data.lightMap = this.lightMap.toJSON(meta).uuid;\n        data.lightMapIntensity = this.lightMapIntensity;\n      }\n\n      if (this.aoMap && this.aoMap.isTexture) {\n        data.aoMap = this.aoMap.toJSON(meta).uuid;\n        data.aoMapIntensity = this.aoMapIntensity;\n      }\n\n      if (this.bumpMap && this.bumpMap.isTexture) {\n        data.bumpMap = this.bumpMap.toJSON(meta).uuid;\n        data.bumpScale = this.bumpScale;\n      }\n\n      if (this.normalMap && this.normalMap.isTexture) {\n        data.normalMap = this.normalMap.toJSON(meta).uuid;\n        data.normalMapType = this.normalMapType;\n        data.normalScale = this.normalScale.toArray();\n      }\n\n      if (this.displacementMap && this.displacementMap.isTexture) {\n        data.displacementMap = this.displacementMap.toJSON(meta).uuid;\n        data.displacementScale = this.displacementScale;\n        data.displacementBias = this.displacementBias;\n      }\n\n      if (this.roughnessMap && this.roughnessMap.isTexture)\n        data.roughnessMap = this.roughnessMap.toJSON(meta).uuid;\n      if (this.metalnessMap && this.metalnessMap.isTexture)\n        data.metalnessMap = this.metalnessMap.toJSON(meta).uuid;\n\n      if (this.emissiveMap && this.emissiveMap.isTexture)\n        data.emissiveMap = this.emissiveMap.toJSON(meta).uuid;\n      if (this.specularMap && this.specularMap.isTexture)\n        data.specularMap = this.specularMap.toJSON(meta).uuid;\n      if (this.specularIntensityMap && this.specularIntensityMap.isTexture)\n        data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid;\n      if (this.specularColorMap && this.specularColorMap.isTexture)\n        data.specularColorMap = this.specularColorMap.toJSON(meta).uuid;\n\n      if (this.envMap && this.envMap.isTexture) {\n        data.envMap = this.envMap.toJSON(meta).uuid;\n\n        if (this.combine !== undefined) data.combine = this.combine;\n      }\n\n      if (this.envMapIntensity !== undefined)\n        data.envMapIntensity = this.envMapIntensity;\n      if (this.reflectivity !== undefined)\n        data.reflectivity = this.reflectivity;\n      if (this.refractionRatio !== undefined)\n        data.refractionRatio = this.refractionRatio;\n\n      if (this.gradientMap && this.gradientMap.isTexture) {\n        data.gradientMap = this.gradientMap.toJSON(meta).uuid;\n      }\n\n      if (this.transmission !== undefined)\n        data.transmission = this.transmission;\n      if (this.transmissionMap && this.transmissionMap.isTexture)\n        data.transmissionMap = this.transmissionMap.toJSON(meta).uuid;\n      if (this.thickness !== undefined) data.thickness = this.thickness;\n      if (this.thicknessMap && this.thicknessMap.isTexture)\n        data.thicknessMap = this.thicknessMap.toJSON(meta).uuid;\n      if (\n        this.attenuationDistance !== undefined &&\n        this.attenuationDistance !== Infinity\n      )\n        data.attenuationDistance = this.attenuationDistance;\n      if (this.attenuationColor !== undefined)\n        data.attenuationColor = this.attenuationColor.getHex();\n\n      if (this.size !== undefined) data.size = this.size;\n      if (this.shadowSide !== null) data.shadowSide = this.shadowSide;\n      if (this.sizeAttenuation !== undefined)\n        data.sizeAttenuation = this.sizeAttenuation;\n\n      if (this.blending !== NormalBlending) data.blending = this.blending;\n      if (this.side !== FrontSide) data.side = this.side;\n      if (this.vertexColors) data.vertexColors = true;\n\n      if (this.opacity < 1) data.opacity = this.opacity;\n      if (this.transparent === true) data.transparent = this.transparent;\n\n      data.depthFunc = this.depthFunc;\n      data.depthTest = this.depthTest;\n      data.depthWrite = this.depthWrite;\n      data.colorWrite = this.colorWrite;\n\n      data.stencilWrite = this.stencilWrite;\n      data.stencilWriteMask = this.stencilWriteMask;\n      data.stencilFunc = this.stencilFunc;\n      data.stencilRef = this.stencilRef;\n      data.stencilFuncMask = this.stencilFuncMask;\n      data.stencilFail = this.stencilFail;\n      data.stencilZFail = this.stencilZFail;\n      data.stencilZPass = this.stencilZPass;\n\n      // rotation (SpriteMaterial)\n      if (this.rotation !== undefined && this.rotation !== 0)\n        data.rotation = this.rotation;\n\n      if (this.polygonOffset === true) data.polygonOffset = true;\n      if (this.polygonOffsetFactor !== 0)\n        data.polygonOffsetFactor = this.polygonOffsetFactor;\n      if (this.polygonOffsetUnits !== 0)\n        data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n      if (this.linewidth !== undefined && this.linewidth !== 1)\n        data.linewidth = this.linewidth;\n      if (this.dashSize !== undefined) data.dashSize = this.dashSize;\n      if (this.gapSize !== undefined) data.gapSize = this.gapSize;\n      if (this.scale !== undefined) data.scale = this.scale;\n\n      if (this.dithering === true) data.dithering = true;\n\n      if (this.alphaTest > 0) data.alphaTest = this.alphaTest;\n      if (this.alphaHash === true) data.alphaHash = this.alphaHash;\n      if (this.alphaToCoverage === true)\n        data.alphaToCoverage = this.alphaToCoverage;\n      if (this.premultipliedAlpha === true)\n        data.premultipliedAlpha = this.premultipliedAlpha;\n      if (this.forceSinglePass === true)\n        data.forceSinglePass = this.forceSinglePass;\n\n      if (this.wireframe === true) data.wireframe = this.wireframe;\n      if (this.wireframeLinewidth > 1)\n        data.wireframeLinewidth = this.wireframeLinewidth;\n      if (this.wireframeLinecap !== \"round\")\n        data.wireframeLinecap = this.wireframeLinecap;\n      if (this.wireframeLinejoin !== \"round\")\n        data.wireframeLinejoin = this.wireframeLinejoin;\n\n      if (this.flatShading === true) data.flatShading = this.flatShading;\n\n      if (this.visible === false) data.visible = false;\n\n      if (this.toneMapped === false) data.toneMapped = false;\n\n      if (this.fog === false) data.fog = false;\n\n      if (Object.keys(this.userData).length > 0) data.userData = this.userData;\n\n      // TODO: Copied from Object3D.toJSON\n\n      function extractFromCache(cache) {\n        const values = [];\n\n        for (const key in cache) {\n          const data = cache[key];\n          delete data.metadata;\n          values.push(data);\n        }\n\n        return values;\n      }\n\n      if (isRootObject) {\n        const textures = extractFromCache(meta.textures);\n        const images = extractFromCache(meta.images);\n\n        if (textures.length > 0) data.textures = textures;\n        if (images.length > 0) data.images = images;\n      }\n\n      return data;\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n\n    copy(source) {\n      this.name = source.name;\n\n      this.blending = source.blending;\n      this.side = source.side;\n      this.vertexColors = source.vertexColors;\n\n      this.opacity = source.opacity;\n      this.transparent = source.transparent;\n\n      this.blendSrc = source.blendSrc;\n      this.blendDst = source.blendDst;\n      this.blendEquation = source.blendEquation;\n      this.blendSrcAlpha = source.blendSrcAlpha;\n      this.blendDstAlpha = source.blendDstAlpha;\n      this.blendEquationAlpha = source.blendEquationAlpha;\n\n      this.depthFunc = source.depthFunc;\n      this.depthTest = source.depthTest;\n      this.depthWrite = source.depthWrite;\n\n      this.stencilWriteMask = source.stencilWriteMask;\n      this.stencilFunc = source.stencilFunc;\n      this.stencilRef = source.stencilRef;\n      this.stencilFuncMask = source.stencilFuncMask;\n      this.stencilFail = source.stencilFail;\n      this.stencilZFail = source.stencilZFail;\n      this.stencilZPass = source.stencilZPass;\n      this.stencilWrite = source.stencilWrite;\n\n      const srcPlanes = source.clippingPlanes;\n      let dstPlanes = null;\n\n      if (srcPlanes !== null) {\n        const n = srcPlanes.length;\n        dstPlanes = new Array(n);\n\n        for (let i = 0; i !== n; ++i) {\n          dstPlanes[i] = srcPlanes[i].clone();\n        }\n      }\n\n      this.clippingPlanes = dstPlanes;\n      this.clipIntersection = source.clipIntersection;\n      this.clipShadows = source.clipShadows;\n\n      this.shadowSide = source.shadowSide;\n\n      this.colorWrite = source.colorWrite;\n\n      this.precision = source.precision;\n\n      this.polygonOffset = source.polygonOffset;\n      this.polygonOffsetFactor = source.polygonOffsetFactor;\n      this.polygonOffsetUnits = source.polygonOffsetUnits;\n\n      this.dithering = source.dithering;\n\n      this.alphaTest = source.alphaTest;\n      this.alphaHash = source.alphaHash;\n      this.alphaToCoverage = source.alphaToCoverage;\n      this.premultipliedAlpha = source.premultipliedAlpha;\n      this.forceSinglePass = source.forceSinglePass;\n\n      this.visible = source.visible;\n\n      this.toneMapped = source.toneMapped;\n\n      this.userData = JSON.parse(JSON.stringify(source.userData));\n\n      return this;\n    }\n\n    dispose() {\n      this.dispatchEvent({ type: \"dispose\" });\n    }\n\n    set needsUpdate(value) {\n      if (value === true) this.version++;\n    }\n  }\n\n  const _colorKeywords = {\n    aliceblue: 0xf0f8ff,\n    antiquewhite: 0xfaebd7,\n    aqua: 0x00ffff,\n    aquamarine: 0x7fffd4,\n    azure: 0xf0ffff,\n    beige: 0xf5f5dc,\n    bisque: 0xffe4c4,\n    black: 0x000000,\n    blanchedalmond: 0xffebcd,\n    blue: 0x0000ff,\n    blueviolet: 0x8a2be2,\n    brown: 0xa52a2a,\n    burlywood: 0xdeb887,\n    cadetblue: 0x5f9ea0,\n    chartreuse: 0x7fff00,\n    chocolate: 0xd2691e,\n    coral: 0xff7f50,\n    cornflowerblue: 0x6495ed,\n    cornsilk: 0xfff8dc,\n    crimson: 0xdc143c,\n    cyan: 0x00ffff,\n    darkblue: 0x00008b,\n    darkcyan: 0x008b8b,\n    darkgoldenrod: 0xb8860b,\n    darkgray: 0xa9a9a9,\n    darkgreen: 0x006400,\n    darkgrey: 0xa9a9a9,\n    darkkhaki: 0xbdb76b,\n    darkmagenta: 0x8b008b,\n    darkolivegreen: 0x556b2f,\n    darkorange: 0xff8c00,\n    darkorchid: 0x9932cc,\n    darkred: 0x8b0000,\n    darksalmon: 0xe9967a,\n    darkseagreen: 0x8fbc8f,\n    darkslateblue: 0x483d8b,\n    darkslategray: 0x2f4f4f,\n    darkslategrey: 0x2f4f4f,\n    darkturquoise: 0x00ced1,\n    darkviolet: 0x9400d3,\n    deeppink: 0xff1493,\n    deepskyblue: 0x00bfff,\n    dimgray: 0x696969,\n    dimgrey: 0x696969,\n    dodgerblue: 0x1e90ff,\n    firebrick: 0xb22222,\n    floralwhite: 0xfffaf0,\n    forestgreen: 0x228b22,\n    fuchsia: 0xff00ff,\n    gainsboro: 0xdcdcdc,\n    ghostwhite: 0xf8f8ff,\n    gold: 0xffd700,\n    goldenrod: 0xdaa520,\n    gray: 0x808080,\n    green: 0x008000,\n    greenyellow: 0xadff2f,\n    grey: 0x808080,\n    honeydew: 0xf0fff0,\n    hotpink: 0xff69b4,\n    indianred: 0xcd5c5c,\n    indigo: 0x4b0082,\n    ivory: 0xfffff0,\n    khaki: 0xf0e68c,\n    lavender: 0xe6e6fa,\n    lavenderblush: 0xfff0f5,\n    lawngreen: 0x7cfc00,\n    lemonchiffon: 0xfffacd,\n    lightblue: 0xadd8e6,\n    lightcoral: 0xf08080,\n    lightcyan: 0xe0ffff,\n    lightgoldenrodyellow: 0xfafad2,\n    lightgray: 0xd3d3d3,\n    lightgreen: 0x90ee90,\n    lightgrey: 0xd3d3d3,\n    lightpink: 0xffb6c1,\n    lightsalmon: 0xffa07a,\n    lightseagreen: 0x20b2aa,\n    lightskyblue: 0x87cefa,\n    lightslategray: 0x778899,\n    lightslategrey: 0x778899,\n    lightsteelblue: 0xb0c4de,\n    lightyellow: 0xffffe0,\n    lime: 0x00ff00,\n    limegreen: 0x32cd32,\n    linen: 0xfaf0e6,\n    magenta: 0xff00ff,\n    maroon: 0x800000,\n    mediumaquamarine: 0x66cdaa,\n    mediumblue: 0x0000cd,\n    mediumorchid: 0xba55d3,\n    mediumpurple: 0x9370db,\n    mediumseagreen: 0x3cb371,\n    mediumslateblue: 0x7b68ee,\n    mediumspringgreen: 0x00fa9a,\n    mediumturquoise: 0x48d1cc,\n    mediumvioletred: 0xc71585,\n    midnightblue: 0x191970,\n    mintcream: 0xf5fffa,\n    mistyrose: 0xffe4e1,\n    moccasin: 0xffe4b5,\n    navajowhite: 0xffdead,\n    navy: 0x000080,\n    oldlace: 0xfdf5e6,\n    olive: 0x808000,\n    olivedrab: 0x6b8e23,\n    orange: 0xffa500,\n    orangered: 0xff4500,\n    orchid: 0xda70d6,\n    palegoldenrod: 0xeee8aa,\n    palegreen: 0x98fb98,\n    paleturquoise: 0xafeeee,\n    palevioletred: 0xdb7093,\n    papayawhip: 0xffefd5,\n    peachpuff: 0xffdab9,\n    peru: 0xcd853f,\n    pink: 0xffc0cb,\n    plum: 0xdda0dd,\n    powderblue: 0xb0e0e6,\n    purple: 0x800080,\n    rebeccapurple: 0x663399,\n    red: 0xff0000,\n    rosybrown: 0xbc8f8f,\n    royalblue: 0x4169e1,\n    saddlebrown: 0x8b4513,\n    salmon: 0xfa8072,\n    sandybrown: 0xf4a460,\n    seagreen: 0x2e8b57,\n    seashell: 0xfff5ee,\n    sienna: 0xa0522d,\n    silver: 0xc0c0c0,\n    skyblue: 0x87ceeb,\n    slateblue: 0x6a5acd,\n    slategray: 0x708090,\n    slategrey: 0x708090,\n    snow: 0xfffafa,\n    springgreen: 0x00ff7f,\n    steelblue: 0x4682b4,\n    tan: 0xd2b48c,\n    teal: 0x008080,\n    thistle: 0xd8bfd8,\n    tomato: 0xff6347,\n    turquoise: 0x40e0d0,\n    violet: 0xee82ee,\n    wheat: 0xf5deb3,\n    white: 0xffffff,\n    whitesmoke: 0xf5f5f5,\n    yellow: 0xffff00,\n    yellowgreen: 0x9acd32,\n  };\n\n  const _hslA = { h: 0, s: 0, l: 0 };\n  const _hslB = { h: 0, s: 0, l: 0 };\n\n  function hue2rgb(p, q, t) {\n    if (t < 0) t += 1;\n    if (t > 1) t -= 1;\n    if (t < 1 / 6) return p + (q - p) * 6 * t;\n    if (t < 1 / 2) return q;\n    if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);\n    return p;\n  }\n\n  class Color {\n    constructor(r, g, b) {\n      this.isColor = true;\n\n      this.r = 1;\n      this.g = 1;\n      this.b = 1;\n\n      return this.set(r, g, b);\n    }\n\n    set(r, g, b) {\n      if (g === undefined && b === undefined) {\n        // r is THREE.Color, hex or string\n\n        const value = r;\n\n        if (value && value.isColor) {\n          this.copy(value);\n        } else if (typeof value === \"number\") {\n          this.setHex(value);\n        } else if (typeof value === \"string\") {\n          this.setStyle(value);\n        }\n      } else {\n        this.setRGB(r, g, b);\n      }\n\n      return this;\n    }\n\n    setScalar(scalar) {\n      this.r = scalar;\n      this.g = scalar;\n      this.b = scalar;\n\n      return this;\n    }\n\n    setHex(hex, colorSpace = SRGBColorSpace) {\n      hex = Math.floor(hex);\n\n      this.r = ((hex >> 16) & 255) / 255;\n      this.g = ((hex >> 8) & 255) / 255;\n      this.b = (hex & 255) / 255;\n\n      ColorManagement.toWorkingColorSpace(this, colorSpace);\n\n      return this;\n    }\n\n    setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) {\n      this.r = r;\n      this.g = g;\n      this.b = b;\n\n      ColorManagement.toWorkingColorSpace(this, colorSpace);\n\n      return this;\n    }\n\n    setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) {\n      // h,s,l ranges are in 0.0 - 1.0\n      h = euclideanModulo(h, 1);\n      s = clamp(s, 0, 1);\n      l = clamp(l, 0, 1);\n\n      if (s === 0) {\n        this.r = this.g = this.b = l;\n      } else {\n        const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\n        const q = 2 * l - p;\n\n        this.r = hue2rgb(q, p, h + 1 / 3);\n        this.g = hue2rgb(q, p, h);\n        this.b = hue2rgb(q, p, h - 1 / 3);\n      }\n\n      ColorManagement.toWorkingColorSpace(this, colorSpace);\n\n      return this;\n    }\n\n    setStyle(style, colorSpace = SRGBColorSpace) {\n      function handleAlpha(string) {\n        if (string === undefined) return;\n\n        if (parseFloat(string) < 1) {\n          console.warn(\n            \"THREE.Color: Alpha component of \" + style + \" will be ignored.\"\n          );\n        }\n      }\n\n      let m;\n\n      if ((m = /^(\\w+)\\(([^\\)]*)\\)/.exec(style))) {\n        // rgb / hsl\n\n        let color;\n        const name = m[1];\n        const components = m[2];\n\n        switch (name) {\n          case \"rgb\":\n          case \"rgba\":\n            if (\n              (color =\n                /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // rgb(255,0,0) rgba(255,0,0,0.5)\n\n              handleAlpha(color[4]);\n\n              return this.setRGB(\n                Math.min(255, parseInt(color[1], 10)) / 255,\n                Math.min(255, parseInt(color[2], 10)) / 255,\n                Math.min(255, parseInt(color[3], 10)) / 255,\n                colorSpace\n              );\n            }\n\n            if (\n              (color =\n                /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n              handleAlpha(color[4]);\n\n              return this.setRGB(\n                Math.min(100, parseInt(color[1], 10)) / 100,\n                Math.min(100, parseInt(color[2], 10)) / 100,\n                Math.min(100, parseInt(color[3], 10)) / 100,\n                colorSpace\n              );\n            }\n\n            break;\n\n          case \"hsl\":\n          case \"hsla\":\n            if (\n              (color =\n                /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n              handleAlpha(color[4]);\n\n              return this.setHSL(\n                parseFloat(color[1]) / 360,\n                parseFloat(color[2]) / 100,\n                parseFloat(color[3]) / 100,\n                colorSpace\n              );\n            }\n\n            break;\n\n          default:\n            console.warn(\"THREE.Color: Unknown color model \" + style);\n        }\n      } else if ((m = /^\\#([A-Fa-f\\d]+)$/.exec(style))) {\n        // hex color\n\n        const hex = m[1];\n        const size = hex.length;\n\n        if (size === 3) {\n          // #ff0\n          return this.setRGB(\n            parseInt(hex.charAt(0), 16) / 15,\n            parseInt(hex.charAt(1), 16) / 15,\n            parseInt(hex.charAt(2), 16) / 15,\n            colorSpace\n          );\n        } else if (size === 6) {\n          // #ff0000\n          return this.setHex(parseInt(hex, 16), colorSpace);\n        } else {\n          console.warn(\"THREE.Color: Invalid hex color \" + style);\n        }\n      } else if (style && style.length > 0) {\n        return this.setColorName(style, colorSpace);\n      }\n\n      return this;\n    }\n\n    setColorName(style, colorSpace = SRGBColorSpace) {\n      // color keywords\n      const hex = _colorKeywords[style.toLowerCase()];\n\n      if (hex !== undefined) {\n        // red\n        this.setHex(hex, colorSpace);\n      } else {\n        // unknown color\n        console.warn(\"THREE.Color: Unknown color \" + style);\n      }\n\n      return this;\n    }\n\n    clone() {\n      return new this.constructor(this.r, this.g, this.b);\n    }\n\n    copy(color) {\n      this.r = color.r;\n      this.g = color.g;\n      this.b = color.b;\n\n      return this;\n    }\n\n    copySRGBToLinear(color) {\n      this.r = SRGBToLinear(color.r);\n      this.g = SRGBToLinear(color.g);\n      this.b = SRGBToLinear(color.b);\n\n      return this;\n    }\n\n    copyLinearToSRGB(color) {\n      this.r = LinearToSRGB(color.r);\n      this.g = LinearToSRGB(color.g);\n      this.b = LinearToSRGB(color.b);\n\n      return this;\n    }\n\n    convertSRGBToLinear() {\n      this.copySRGBToLinear(this);\n\n      return this;\n    }\n\n    convertLinearToSRGB() {\n      this.copyLinearToSRGB(this);\n\n      return this;\n    }\n\n    getHex(colorSpace = SRGBColorSpace) {\n      ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n\n      return (\n        Math.round(clamp(_color.r * 255, 0, 255)) * 65536 +\n        Math.round(clamp(_color.g * 255, 0, 255)) * 256 +\n        Math.round(clamp(_color.b * 255, 0, 255))\n      );\n    }\n\n    getHexString(colorSpace = SRGBColorSpace) {\n      return (\"000000\" + this.getHex(colorSpace).toString(16)).slice(-6);\n    }\n\n    getHSL(target, colorSpace = ColorManagement.workingColorSpace) {\n      // h,s,l ranges are in 0.0 - 1.0\n\n      ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n\n      const r = _color.r,\n        g = _color.g,\n        b = _color.b;\n\n      const max = Math.max(r, g, b);\n      const min = Math.min(r, g, b);\n\n      let hue, saturation;\n      const lightness = (min + max) / 2.0;\n\n      if (min === max) {\n        hue = 0;\n        saturation = 0;\n      } else {\n        const delta = max - min;\n\n        saturation =\n          lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);\n\n        switch (max) {\n          case r:\n            hue = (g - b) / delta + (g < b ? 6 : 0);\n            break;\n          case g:\n            hue = (b - r) / delta + 2;\n            break;\n          case b:\n            hue = (r - g) / delta + 4;\n            break;\n        }\n\n        hue /= 6;\n      }\n\n      target.h = hue;\n      target.s = saturation;\n      target.l = lightness;\n\n      return target;\n    }\n\n    getRGB(target, colorSpace = ColorManagement.workingColorSpace) {\n      ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n\n      target.r = _color.r;\n      target.g = _color.g;\n      target.b = _color.b;\n\n      return target;\n    }\n\n    getStyle(colorSpace = SRGBColorSpace) {\n      ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n\n      const r = _color.r,\n        g = _color.g,\n        b = _color.b;\n\n      if (colorSpace !== SRGBColorSpace) {\n        // Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n        return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(\n          3\n        )})`;\n      }\n\n      return `rgb(${Math.round(\n        r * 255\n      )},${Math.round(g * 255)},${Math.round(b * 255)})`;\n    }\n\n    offsetHSL(h, s, l) {\n      this.getHSL(_hslA);\n\n      _hslA.h += h;\n      _hslA.s += s;\n      _hslA.l += l;\n\n      this.setHSL(_hslA.h, _hslA.s, _hslA.l);\n\n      return this;\n    }\n\n    add(color) {\n      this.r += color.r;\n      this.g += color.g;\n      this.b += color.b;\n\n      return this;\n    }\n\n    addColors(color1, color2) {\n      this.r = color1.r + color2.r;\n      this.g = color1.g + color2.g;\n      this.b = color1.b + color2.b;\n\n      return this;\n    }\n\n    addScalar(s) {\n      this.r += s;\n      this.g += s;\n      this.b += s;\n\n      return this;\n    }\n\n    sub(color) {\n      this.r = Math.max(0, this.r - color.r);\n      this.g = Math.max(0, this.g - color.g);\n      this.b = Math.max(0, this.b - color.b);\n\n      return this;\n    }\n\n    multiply(color) {\n      this.r *= color.r;\n      this.g *= color.g;\n      this.b *= color.b;\n\n      return this;\n    }\n\n    multiplyScalar(s) {\n      this.r *= s;\n      this.g *= s;\n      this.b *= s;\n\n      return this;\n    }\n\n    lerp(color, alpha) {\n      this.r += (color.r - this.r) * alpha;\n      this.g += (color.g - this.g) * alpha;\n      this.b += (color.b - this.b) * alpha;\n\n      return this;\n    }\n\n    lerpColors(color1, color2, alpha) {\n      this.r = color1.r + (color2.r - color1.r) * alpha;\n      this.g = color1.g + (color2.g - color1.g) * alpha;\n      this.b = color1.b + (color2.b - color1.b) * alpha;\n\n      return this;\n    }\n\n    lerpHSL(color, alpha) {\n      this.getHSL(_hslA);\n      color.getHSL(_hslB);\n\n      const h = lerp(_hslA.h, _hslB.h, alpha);\n      const s = lerp(_hslA.s, _hslB.s, alpha);\n      const l = lerp(_hslA.l, _hslB.l, alpha);\n\n      this.setHSL(h, s, l);\n\n      return this;\n    }\n\n    setFromVector3(v) {\n      this.r = v.x;\n      this.g = v.y;\n      this.b = v.z;\n\n      return this;\n    }\n\n    applyMatrix3(m) {\n      const r = this.r,\n        g = this.g,\n        b = this.b;\n      const e = m.elements;\n\n      this.r = e[0] * r + e[3] * g + e[6] * b;\n      this.g = e[1] * r + e[4] * g + e[7] * b;\n      this.b = e[2] * r + e[5] * g + e[8] * b;\n\n      return this;\n    }\n\n    equals(c) {\n      return c.r === this.r && c.g === this.g && c.b === this.b;\n    }\n\n    fromArray(array, offset = 0) {\n      this.r = array[offset];\n      this.g = array[offset + 1];\n      this.b = array[offset + 2];\n\n      return this;\n    }\n\n    toArray(array = [], offset = 0) {\n      array[offset] = this.r;\n      array[offset + 1] = this.g;\n      array[offset + 2] = this.b;\n\n      return array;\n    }\n\n    fromBufferAttribute(attribute, index) {\n      this.r = attribute.getX(index);\n      this.g = attribute.getY(index);\n      this.b = attribute.getZ(index);\n\n      return this;\n    }\n\n    toJSON() {\n      return this.getHex();\n    }\n\n    *[Symbol.iterator]() {\n      yield this.r;\n      yield this.g;\n      yield this.b;\n    }\n  }\n\n  const _color = /*@__PURE__*/ new Color();\n\n  Color.NAMES = _colorKeywords;\n\n  class MeshBasicMaterial extends Material {\n    constructor(parameters) {\n      super();\n\n      this.isMeshBasicMaterial = true;\n\n      this.type = \"MeshBasicMaterial\";\n\n      this.color = new Color(0xffffff); // emissive\n\n      this.map = null;\n\n      this.lightMap = null;\n      this.lightMapIntensity = 1.0;\n\n      this.aoMap = null;\n      this.aoMapIntensity = 1.0;\n\n      this.specularMap = null;\n\n      this.alphaMap = null;\n\n      this.envMap = null;\n      this.combine = MultiplyOperation;\n      this.reflectivity = 1;\n      this.refractionRatio = 0.98;\n\n      this.wireframe = false;\n      this.wireframeLinewidth = 1;\n      this.wireframeLinecap = \"round\";\n      this.wireframeLinejoin = \"round\";\n\n      this.fog = true;\n\n      this.setValues(parameters);\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.color.copy(source.color);\n\n      this.map = source.map;\n\n      this.lightMap = source.lightMap;\n      this.lightMapIntensity = source.lightMapIntensity;\n\n      this.aoMap = source.aoMap;\n      this.aoMapIntensity = source.aoMapIntensity;\n\n      this.specularMap = source.specularMap;\n\n      this.alphaMap = source.alphaMap;\n\n      this.envMap = source.envMap;\n      this.combine = source.combine;\n      this.reflectivity = source.reflectivity;\n      this.refractionRatio = source.refractionRatio;\n\n      this.wireframe = source.wireframe;\n      this.wireframeLinewidth = source.wireframeLinewidth;\n      this.wireframeLinecap = source.wireframeLinecap;\n      this.wireframeLinejoin = source.wireframeLinejoin;\n\n      this.fog = source.fog;\n\n      return this;\n    }\n  }\n\n  const _vector$8 = /*@__PURE__*/ new Vector3();\n  const _vector2$1 = /*@__PURE__*/ new Vector2();\n\n  class BufferAttribute {\n    constructor(array, itemSize, normalized = false) {\n      if (Array.isArray(array)) {\n        throw new TypeError(\n          \"THREE.BufferAttribute: array should be a Typed Array.\"\n        );\n      }\n\n      this.isBufferAttribute = true;\n\n      this.name = \"\";\n\n      this.array = array;\n      this.itemSize = itemSize;\n      this.count = array !== undefined ? array.length / itemSize : 0;\n      this.normalized = normalized;\n\n      this.usage = StaticDrawUsage;\n      this.updateRange = { offset: 0, count: -1 };\n      this.gpuType = FloatType;\n\n      this.version = 0;\n    }\n\n    onUploadCallback() {}\n\n    set needsUpdate(value) {\n      if (value === true) this.version++;\n    }\n\n    setUsage(value) {\n      this.usage = value;\n\n      return this;\n    }\n\n    copy(source) {\n      this.name = source.name;\n      this.array = new source.array.constructor(source.array);\n      this.itemSize = source.itemSize;\n      this.count = source.count;\n      this.normalized = source.normalized;\n\n      this.usage = source.usage;\n      this.gpuType = source.gpuType;\n\n      return this;\n    }\n\n    copyAt(index1, attribute, index2) {\n      index1 *= this.itemSize;\n      index2 *= attribute.itemSize;\n\n      for (let i = 0, l = this.itemSize; i < l; i++) {\n        this.array[index1 + i] = attribute.array[index2 + i];\n      }\n\n      return this;\n    }\n\n    copyArray(array) {\n      this.array.set(array);\n\n      return this;\n    }\n\n    applyMatrix3(m) {\n      if (this.itemSize === 2) {\n        for (let i = 0, l = this.count; i < l; i++) {\n          _vector2$1.fromBufferAttribute(this, i);\n          _vector2$1.applyMatrix3(m);\n\n          this.setXY(i, _vector2$1.x, _vector2$1.y);\n        }\n      } else if (this.itemSize === 3) {\n        for (let i = 0, l = this.count; i < l; i++) {\n          _vector$8.fromBufferAttribute(this, i);\n          _vector$8.applyMatrix3(m);\n\n          this.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z);\n        }\n      }\n\n      return this;\n    }\n\n    applyMatrix4(m) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _vector$8.fromBufferAttribute(this, i);\n\n        _vector$8.applyMatrix4(m);\n\n        this.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z);\n      }\n\n      return this;\n    }\n\n    applyNormalMatrix(m) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _vector$8.fromBufferAttribute(this, i);\n\n        _vector$8.applyNormalMatrix(m);\n\n        this.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z);\n      }\n\n      return this;\n    }\n\n    transformDirection(m) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _vector$8.fromBufferAttribute(this, i);\n\n        _vector$8.transformDirection(m);\n\n        this.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z);\n      }\n\n      return this;\n    }\n\n    set(value, offset = 0) {\n      // Matching BufferAttribute constructor, do not normalize the array.\n      this.array.set(value, offset);\n\n      return this;\n    }\n\n    getComponent(index, component) {\n      let value = this.array[index * this.itemSize + component];\n\n      if (this.normalized) value = denormalize(value, this.array);\n\n      return value;\n    }\n\n    setComponent(index, component, value) {\n      if (this.normalized) value = normalize(value, this.array);\n\n      this.array[index * this.itemSize + component] = value;\n\n      return this;\n    }\n\n    getX(index) {\n      let x = this.array[index * this.itemSize];\n\n      if (this.normalized) x = denormalize(x, this.array);\n\n      return x;\n    }\n\n    setX(index, x) {\n      if (this.normalized) x = normalize(x, this.array);\n\n      this.array[index * this.itemSize] = x;\n\n      return this;\n    }\n\n    getY(index) {\n      let y = this.array[index * this.itemSize + 1];\n\n      if (this.normalized) y = denormalize(y, this.array);\n\n      return y;\n    }\n\n    setY(index, y) {\n      if (this.normalized) y = normalize(y, this.array);\n\n      this.array[index * this.itemSize + 1] = y;\n\n      return this;\n    }\n\n    getZ(index) {\n      let z = this.array[index * this.itemSize + 2];\n\n      if (this.normalized) z = denormalize(z, this.array);\n\n      return z;\n    }\n\n    setZ(index, z) {\n      if (this.normalized) z = normalize(z, this.array);\n\n      this.array[index * this.itemSize + 2] = z;\n\n      return this;\n    }\n\n    getW(index) {\n      let w = this.array[index * this.itemSize + 3];\n\n      if (this.normalized) w = denormalize(w, this.array);\n\n      return w;\n    }\n\n    setW(index, w) {\n      if (this.normalized) w = normalize(w, this.array);\n\n      this.array[index * this.itemSize + 3] = w;\n\n      return this;\n    }\n\n    setXY(index, x, y) {\n      index *= this.itemSize;\n\n      if (this.normalized) {\n        x = normalize(x, this.array);\n        y = normalize(y, this.array);\n      }\n\n      this.array[index + 0] = x;\n      this.array[index + 1] = y;\n\n      return this;\n    }\n\n    setXYZ(index, x, y, z) {\n      index *= this.itemSize;\n\n      if (this.normalized) {\n        x = normalize(x, this.array);\n        y = normalize(y, this.array);\n        z = normalize(z, this.array);\n      }\n\n      this.array[index + 0] = x;\n      this.array[index + 1] = y;\n      this.array[index + 2] = z;\n\n      return this;\n    }\n\n    setXYZW(index, x, y, z, w) {\n      index *= this.itemSize;\n\n      if (this.normalized) {\n        x = normalize(x, this.array);\n        y = normalize(y, this.array);\n        z = normalize(z, this.array);\n        w = normalize(w, this.array);\n      }\n\n      this.array[index + 0] = x;\n      this.array[index + 1] = y;\n      this.array[index + 2] = z;\n      this.array[index + 3] = w;\n\n      return this;\n    }\n\n    onUpload(callback) {\n      this.onUploadCallback = callback;\n\n      return this;\n    }\n\n    clone() {\n      return new this.constructor(this.array, this.itemSize).copy(this);\n    }\n\n    toJSON() {\n      const data = {\n        itemSize: this.itemSize,\n        type: this.array.constructor.name,\n        array: Array.from(this.array),\n        normalized: this.normalized,\n      };\n\n      if (this.name !== \"\") data.name = this.name;\n      if (this.usage !== StaticDrawUsage) data.usage = this.usage;\n      if (this.updateRange.offset !== 0 || this.updateRange.count !== -1)\n        data.updateRange = this.updateRange;\n\n      return data;\n    }\n  }\n\n  class Uint16BufferAttribute extends BufferAttribute {\n    constructor(array, itemSize, normalized) {\n      super(new Uint16Array(array), itemSize, normalized);\n    }\n  }\n\n  class Uint32BufferAttribute extends BufferAttribute {\n    constructor(array, itemSize, normalized) {\n      super(new Uint32Array(array), itemSize, normalized);\n    }\n  }\n\n  class Float32BufferAttribute extends BufferAttribute {\n    constructor(array, itemSize, normalized) {\n      super(new Float32Array(array), itemSize, normalized);\n    }\n  }\n\n  let _id$1 = 0;\n\n  const _m1 = /*@__PURE__*/ new Matrix4();\n  const _obj = /*@__PURE__*/ new Object3D();\n  const _offset = /*@__PURE__*/ new Vector3();\n  const _box$1 = /*@__PURE__*/ new Box3();\n  const _boxMorphTargets = /*@__PURE__*/ new Box3();\n  const _vector$7 = /*@__PURE__*/ new Vector3();\n\n  class BufferGeometry extends EventDispatcher {\n    constructor() {\n      super();\n\n      this.isBufferGeometry = true;\n\n      Object.defineProperty(this, \"id\", { value: _id$1++ });\n\n      this.uuid = generateUUID();\n\n      this.name = \"\";\n      this.type = \"BufferGeometry\";\n\n      this.index = null;\n      this.attributes = {};\n\n      this.morphAttributes = {};\n      this.morphTargetsRelative = false;\n\n      this.groups = [];\n\n      this.boundingBox = null;\n      this.boundingSphere = null;\n\n      this.drawRange = { start: 0, count: Infinity };\n\n      this.userData = {};\n    }\n\n    getIndex() {\n      return this.index;\n    }\n\n    setIndex(index) {\n      if (Array.isArray(index)) {\n        this.index = new (\n          arrayNeedsUint32(index)\n            ? Uint32BufferAttribute\n            : Uint16BufferAttribute\n        )(index, 1);\n      } else {\n        this.index = index;\n      }\n\n      return this;\n    }\n\n    getAttribute(name) {\n      return this.attributes[name];\n    }\n\n    setAttribute(name, attribute) {\n      this.attributes[name] = attribute;\n\n      return this;\n    }\n\n    deleteAttribute(name) {\n      delete this.attributes[name];\n\n      return this;\n    }\n\n    hasAttribute(name) {\n      return this.attributes[name] !== undefined;\n    }\n\n    addGroup(start, count, materialIndex = 0) {\n      this.groups.push({\n        start: start,\n        count: count,\n        materialIndex: materialIndex,\n      });\n    }\n\n    clearGroups() {\n      this.groups = [];\n    }\n\n    setDrawRange(start, count) {\n      this.drawRange.start = start;\n      this.drawRange.count = count;\n    }\n\n    applyMatrix4(matrix) {\n      const position = this.attributes.position;\n\n      if (position !== undefined) {\n        position.applyMatrix4(matrix);\n\n        position.needsUpdate = true;\n      }\n\n      const normal = this.attributes.normal;\n\n      if (normal !== undefined) {\n        const normalMatrix = new Matrix3().getNormalMatrix(matrix);\n\n        normal.applyNormalMatrix(normalMatrix);\n\n        normal.needsUpdate = true;\n      }\n\n      const tangent = this.attributes.tangent;\n\n      if (tangent !== undefined) {\n        tangent.transformDirection(matrix);\n\n        tangent.needsUpdate = true;\n      }\n\n      if (this.boundingBox !== null) {\n        this.computeBoundingBox();\n      }\n\n      if (this.boundingSphere !== null) {\n        this.computeBoundingSphere();\n      }\n\n      return this;\n    }\n\n    applyQuaternion(q) {\n      _m1.makeRotationFromQuaternion(q);\n\n      this.applyMatrix4(_m1);\n\n      return this;\n    }\n\n    rotateX(angle) {\n      // rotate geometry around world x-axis\n\n      _m1.makeRotationX(angle);\n\n      this.applyMatrix4(_m1);\n\n      return this;\n    }\n\n    rotateY(angle) {\n      // rotate geometry around world y-axis\n\n      _m1.makeRotationY(angle);\n\n      this.applyMatrix4(_m1);\n\n      return this;\n    }\n\n    rotateZ(angle) {\n      // rotate geometry around world z-axis\n\n      _m1.makeRotationZ(angle);\n\n      this.applyMatrix4(_m1);\n\n      return this;\n    }\n\n    translate(x, y, z) {\n      // translate geometry\n\n      _m1.makeTranslation(x, y, z);\n\n      this.applyMatrix4(_m1);\n\n      return this;\n    }\n\n    scale(x, y, z) {\n      // scale geometry\n\n      _m1.makeScale(x, y, z);\n\n      this.applyMatrix4(_m1);\n\n      return this;\n    }\n\n    lookAt(vector) {\n      _obj.lookAt(vector);\n\n      _obj.updateMatrix();\n\n      this.applyMatrix4(_obj.matrix);\n\n      return this;\n    }\n\n    center() {\n      this.computeBoundingBox();\n\n      this.boundingBox.getCenter(_offset).negate();\n\n      this.translate(_offset.x, _offset.y, _offset.z);\n\n      return this;\n    }\n\n    setFromPoints(points) {\n      const position = [];\n\n      for (let i = 0, l = points.length; i < l; i++) {\n        const point = points[i];\n        position.push(point.x, point.y, point.z || 0);\n      }\n\n      this.setAttribute(\"position\", new Float32BufferAttribute(position, 3));\n\n      return this;\n    }\n\n    computeBoundingBox() {\n      if (this.boundingBox === null) {\n        this.boundingBox = new Box3();\n      }\n\n      const position = this.attributes.position;\n      const morphAttributesPosition = this.morphAttributes.position;\n\n      if (position && position.isGLBufferAttribute) {\n        console.error(\n          'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',\n          this\n        );\n\n        this.boundingBox.set(\n          new Vector3(-Infinity, -Infinity, -Infinity),\n          new Vector3(+Infinity, +Infinity, +Infinity)\n        );\n\n        return;\n      }\n\n      if (position !== undefined) {\n        this.boundingBox.setFromBufferAttribute(position);\n\n        // process morph attributes if present\n\n        if (morphAttributesPosition) {\n          for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {\n            const morphAttribute = morphAttributesPosition[i];\n            _box$1.setFromBufferAttribute(morphAttribute);\n\n            if (this.morphTargetsRelative) {\n              _vector$7.addVectors(this.boundingBox.min, _box$1.min);\n              this.boundingBox.expandByPoint(_vector$7);\n\n              _vector$7.addVectors(this.boundingBox.max, _box$1.max);\n              this.boundingBox.expandByPoint(_vector$7);\n            } else {\n              this.boundingBox.expandByPoint(_box$1.min);\n              this.boundingBox.expandByPoint(_box$1.max);\n            }\n          }\n        }\n      } else {\n        this.boundingBox.makeEmpty();\n      }\n\n      if (\n        isNaN(this.boundingBox.min.x) ||\n        isNaN(this.boundingBox.min.y) ||\n        isNaN(this.boundingBox.min.z)\n      ) {\n        console.error(\n          'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',\n          this\n        );\n      }\n    }\n\n    computeBoundingSphere() {\n      if (this.boundingSphere === null) {\n        this.boundingSphere = new Sphere();\n      }\n\n      const position = this.attributes.position;\n      const morphAttributesPosition = this.morphAttributes.position;\n\n      if (position && position.isGLBufferAttribute) {\n        console.error(\n          'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',\n          this\n        );\n\n        this.boundingSphere.set(new Vector3(), Infinity);\n\n        return;\n      }\n\n      if (position) {\n        // first, find the center of the bounding sphere\n\n        const center = this.boundingSphere.center;\n\n        _box$1.setFromBufferAttribute(position);\n\n        // process morph attributes if present\n\n        if (morphAttributesPosition) {\n          for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {\n            const morphAttribute = morphAttributesPosition[i];\n            _boxMorphTargets.setFromBufferAttribute(morphAttribute);\n\n            if (this.morphTargetsRelative) {\n              _vector$7.addVectors(_box$1.min, _boxMorphTargets.min);\n              _box$1.expandByPoint(_vector$7);\n\n              _vector$7.addVectors(_box$1.max, _boxMorphTargets.max);\n              _box$1.expandByPoint(_vector$7);\n            } else {\n              _box$1.expandByPoint(_boxMorphTargets.min);\n              _box$1.expandByPoint(_boxMorphTargets.max);\n            }\n          }\n        }\n\n        _box$1.getCenter(center);\n\n        // second, try to find a boundingSphere with a radius smaller than the\n        // boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n        let maxRadiusSq = 0;\n\n        for (let i = 0, il = position.count; i < il; i++) {\n          _vector$7.fromBufferAttribute(position, i);\n\n          maxRadiusSq = Math.max(\n            maxRadiusSq,\n            center.distanceToSquared(_vector$7)\n          );\n        }\n\n        // process morph attributes if present\n\n        if (morphAttributesPosition) {\n          for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {\n            const morphAttribute = morphAttributesPosition[i];\n            const morphTargetsRelative = this.morphTargetsRelative;\n\n            for (let j = 0, jl = morphAttribute.count; j < jl; j++) {\n              _vector$7.fromBufferAttribute(morphAttribute, j);\n\n              if (morphTargetsRelative) {\n                _offset.fromBufferAttribute(position, j);\n                _vector$7.add(_offset);\n              }\n\n              maxRadiusSq = Math.max(\n                maxRadiusSq,\n                center.distanceToSquared(_vector$7)\n              );\n            }\n          }\n        }\n\n        this.boundingSphere.radius = Math.sqrt(maxRadiusSq);\n\n        if (isNaN(this.boundingSphere.radius)) {\n          console.error(\n            'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',\n            this\n          );\n        }\n      }\n    }\n\n    computeTangents() {\n      const index = this.index;\n      const attributes = this.attributes;\n\n      // based on http://www.terathon.com/code/tangent.html\n      // (per vertex tangents)\n\n      if (\n        index === null ||\n        attributes.position === undefined ||\n        attributes.normal === undefined ||\n        attributes.uv === undefined\n      ) {\n        console.error(\n          \"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\"\n        );\n        return;\n      }\n\n      const indices = index.array;\n      const positions = attributes.position.array;\n      const normals = attributes.normal.array;\n      const uvs = attributes.uv.array;\n\n      const nVertices = positions.length / 3;\n\n      if (this.hasAttribute(\"tangent\") === false) {\n        this.setAttribute(\n          \"tangent\",\n          new BufferAttribute(new Float32Array(4 * nVertices), 4)\n        );\n      }\n\n      const tangents = this.getAttribute(\"tangent\").array;\n\n      const tan1 = [],\n        tan2 = [];\n\n      for (let i = 0; i < nVertices; i++) {\n        tan1[i] = new Vector3();\n        tan2[i] = new Vector3();\n      }\n\n      const vA = new Vector3(),\n        vB = new Vector3(),\n        vC = new Vector3(),\n        uvA = new Vector2(),\n        uvB = new Vector2(),\n        uvC = new Vector2(),\n        sdir = new Vector3(),\n        tdir = new Vector3();\n\n      function handleTriangle(a, b, c) {\n        vA.fromArray(positions, a * 3);\n        vB.fromArray(positions, b * 3);\n        vC.fromArray(positions, c * 3);\n\n        uvA.fromArray(uvs, a * 2);\n        uvB.fromArray(uvs, b * 2);\n        uvC.fromArray(uvs, c * 2);\n\n        vB.sub(vA);\n        vC.sub(vA);\n\n        uvB.sub(uvA);\n        uvC.sub(uvA);\n\n        const r = 1.0 / (uvB.x * uvC.y - uvC.x * uvB.y);\n\n        // silently ignore degenerate uv triangles having coincident or colinear vertices\n\n        if (!isFinite(r)) return;\n\n        sdir\n          .copy(vB)\n          .multiplyScalar(uvC.y)\n          .addScaledVector(vC, -uvB.y)\n          .multiplyScalar(r);\n        tdir\n          .copy(vC)\n          .multiplyScalar(uvB.x)\n          .addScaledVector(vB, -uvC.x)\n          .multiplyScalar(r);\n\n        tan1[a].add(sdir);\n        tan1[b].add(sdir);\n        tan1[c].add(sdir);\n\n        tan2[a].add(tdir);\n        tan2[b].add(tdir);\n        tan2[c].add(tdir);\n      }\n\n      let groups = this.groups;\n\n      if (groups.length === 0) {\n        groups = [\n          {\n            start: 0,\n            count: indices.length,\n          },\n        ];\n      }\n\n      for (let i = 0, il = groups.length; i < il; ++i) {\n        const group = groups[i];\n\n        const start = group.start;\n        const count = group.count;\n\n        for (let j = start, jl = start + count; j < jl; j += 3) {\n          handleTriangle(indices[j + 0], indices[j + 1], indices[j + 2]);\n        }\n      }\n\n      const tmp = new Vector3(),\n        tmp2 = new Vector3();\n      const n = new Vector3(),\n        n2 = new Vector3();\n\n      function handleVertex(v) {\n        n.fromArray(normals, v * 3);\n        n2.copy(n);\n\n        const t = tan1[v];\n\n        // Gram-Schmidt orthogonalize\n\n        tmp.copy(t);\n        tmp.sub(n.multiplyScalar(n.dot(t))).normalize();\n\n        // Calculate handedness\n\n        tmp2.crossVectors(n2, t);\n        const test = tmp2.dot(tan2[v]);\n        const w = test < 0.0 ? -1.0 : 1.0;\n\n        tangents[v * 4] = tmp.x;\n        tangents[v * 4 + 1] = tmp.y;\n        tangents[v * 4 + 2] = tmp.z;\n        tangents[v * 4 + 3] = w;\n      }\n\n      for (let i = 0, il = groups.length; i < il; ++i) {\n        const group = groups[i];\n\n        const start = group.start;\n        const count = group.count;\n\n        for (let j = start, jl = start + count; j < jl; j += 3) {\n          handleVertex(indices[j + 0]);\n          handleVertex(indices[j + 1]);\n          handleVertex(indices[j + 2]);\n        }\n      }\n    }\n\n    computeVertexNormals() {\n      const index = this.index;\n      const positionAttribute = this.getAttribute(\"position\");\n\n      if (positionAttribute !== undefined) {\n        let normalAttribute = this.getAttribute(\"normal\");\n\n        if (normalAttribute === undefined) {\n          normalAttribute = new BufferAttribute(\n            new Float32Array(positionAttribute.count * 3),\n            3\n          );\n          this.setAttribute(\"normal\", normalAttribute);\n        } else {\n          // reset existing normals to zero\n\n          for (let i = 0, il = normalAttribute.count; i < il; i++) {\n            normalAttribute.setXYZ(i, 0, 0, 0);\n          }\n        }\n\n        const pA = new Vector3(),\n          pB = new Vector3(),\n          pC = new Vector3();\n        const nA = new Vector3(),\n          nB = new Vector3(),\n          nC = new Vector3();\n        const cb = new Vector3(),\n          ab = new Vector3();\n\n        // indexed elements\n\n        if (index) {\n          for (let i = 0, il = index.count; i < il; i += 3) {\n            const vA = index.getX(i + 0);\n            const vB = index.getX(i + 1);\n            const vC = index.getX(i + 2);\n\n            pA.fromBufferAttribute(positionAttribute, vA);\n            pB.fromBufferAttribute(positionAttribute, vB);\n            pC.fromBufferAttribute(positionAttribute, vC);\n\n            cb.subVectors(pC, pB);\n            ab.subVectors(pA, pB);\n            cb.cross(ab);\n\n            nA.fromBufferAttribute(normalAttribute, vA);\n            nB.fromBufferAttribute(normalAttribute, vB);\n            nC.fromBufferAttribute(normalAttribute, vC);\n\n            nA.add(cb);\n            nB.add(cb);\n            nC.add(cb);\n\n            normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z);\n            normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z);\n            normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z);\n          }\n        } else {\n          // non-indexed elements (unconnected triangle soup)\n\n          for (let i = 0, il = positionAttribute.count; i < il; i += 3) {\n            pA.fromBufferAttribute(positionAttribute, i + 0);\n            pB.fromBufferAttribute(positionAttribute, i + 1);\n            pC.fromBufferAttribute(positionAttribute, i + 2);\n\n            cb.subVectors(pC, pB);\n            ab.subVectors(pA, pB);\n            cb.cross(ab);\n\n            normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z);\n            normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z);\n            normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z);\n          }\n        }\n\n        this.normalizeNormals();\n\n        normalAttribute.needsUpdate = true;\n      }\n    }\n\n    normalizeNormals() {\n      const normals = this.attributes.normal;\n\n      for (let i = 0, il = normals.count; i < il; i++) {\n        _vector$7.fromBufferAttribute(normals, i);\n\n        _vector$7.normalize();\n\n        normals.setXYZ(i, _vector$7.x, _vector$7.y, _vector$7.z);\n      }\n    }\n\n    toNonIndexed() {\n      function convertBufferAttribute(attribute, indices) {\n        const array = attribute.array;\n        const itemSize = attribute.itemSize;\n        const normalized = attribute.normalized;\n\n        const array2 = new array.constructor(indices.length * itemSize);\n\n        let index = 0,\n          index2 = 0;\n\n        for (let i = 0, l = indices.length; i < l; i++) {\n          if (attribute.isInterleavedBufferAttribute) {\n            index = indices[i] * attribute.data.stride + attribute.offset;\n          } else {\n            index = indices[i] * itemSize;\n          }\n\n          for (let j = 0; j < itemSize; j++) {\n            array2[index2++] = array[index++];\n          }\n        }\n\n        return new BufferAttribute(array2, itemSize, normalized);\n      }\n\n      //\n\n      if (this.index === null) {\n        console.warn(\n          \"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"\n        );\n        return this;\n      }\n\n      const geometry2 = new BufferGeometry();\n\n      const indices = this.index.array;\n      const attributes = this.attributes;\n\n      // attributes\n\n      for (const name in attributes) {\n        const attribute = attributes[name];\n\n        const newAttribute = convertBufferAttribute(attribute, indices);\n\n        geometry2.setAttribute(name, newAttribute);\n      }\n\n      // morph attributes\n\n      const morphAttributes = this.morphAttributes;\n\n      for (const name in morphAttributes) {\n        const morphArray = [];\n        const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes\n\n        for (let i = 0, il = morphAttribute.length; i < il; i++) {\n          const attribute = morphAttribute[i];\n\n          const newAttribute = convertBufferAttribute(attribute, indices);\n\n          morphArray.push(newAttribute);\n        }\n\n        geometry2.morphAttributes[name] = morphArray;\n      }\n\n      geometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n      // groups\n\n      const groups = this.groups;\n\n      for (let i = 0, l = groups.length; i < l; i++) {\n        const group = groups[i];\n        geometry2.addGroup(group.start, group.count, group.materialIndex);\n      }\n\n      return geometry2;\n    }\n\n    toJSON() {\n      const data = {\n        metadata: {\n          version: 4.6,\n          type: \"BufferGeometry\",\n          generator: \"BufferGeometry.toJSON\",\n        },\n      };\n\n      // standard BufferGeometry serialization\n\n      data.uuid = this.uuid;\n      data.type = this.type;\n      if (this.name !== \"\") data.name = this.name;\n      if (Object.keys(this.userData).length > 0) data.userData = this.userData;\n\n      if (this.parameters !== undefined) {\n        const parameters = this.parameters;\n\n        for (const key in parameters) {\n          if (parameters[key] !== undefined) data[key] = parameters[key];\n        }\n\n        return data;\n      }\n\n      // for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n      data.data = { attributes: {} };\n\n      const index = this.index;\n\n      if (index !== null) {\n        data.data.index = {\n          type: index.array.constructor.name,\n          array: Array.prototype.slice.call(index.array),\n        };\n      }\n\n      const attributes = this.attributes;\n\n      for (const key in attributes) {\n        const attribute = attributes[key];\n\n        data.data.attributes[key] = attribute.toJSON(data.data);\n      }\n\n      const morphAttributes = {};\n      let hasMorphAttributes = false;\n\n      for (const key in this.morphAttributes) {\n        const attributeArray = this.morphAttributes[key];\n\n        const array = [];\n\n        for (let i = 0, il = attributeArray.length; i < il; i++) {\n          const attribute = attributeArray[i];\n\n          array.push(attribute.toJSON(data.data));\n        }\n\n        if (array.length > 0) {\n          morphAttributes[key] = array;\n\n          hasMorphAttributes = true;\n        }\n      }\n\n      if (hasMorphAttributes) {\n        data.data.morphAttributes = morphAttributes;\n        data.data.morphTargetsRelative = this.morphTargetsRelative;\n      }\n\n      const groups = this.groups;\n\n      if (groups.length > 0) {\n        data.data.groups = JSON.parse(JSON.stringify(groups));\n      }\n\n      const boundingSphere = this.boundingSphere;\n\n      if (boundingSphere !== null) {\n        data.data.boundingSphere = {\n          center: boundingSphere.center.toArray(),\n          radius: boundingSphere.radius,\n        };\n      }\n\n      return data;\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n\n    copy(source) {\n      // reset\n\n      this.index = null;\n      this.attributes = {};\n      this.morphAttributes = {};\n      this.groups = [];\n      this.boundingBox = null;\n      this.boundingSphere = null;\n\n      // used for storing cloned, shared data\n\n      const data = {};\n\n      // name\n\n      this.name = source.name;\n\n      // index\n\n      const index = source.index;\n\n      if (index !== null) {\n        this.setIndex(index.clone(data));\n      }\n\n      // attributes\n\n      const attributes = source.attributes;\n\n      for (const name in attributes) {\n        const attribute = attributes[name];\n        this.setAttribute(name, attribute.clone(data));\n      }\n\n      // morph attributes\n\n      const morphAttributes = source.morphAttributes;\n\n      for (const name in morphAttributes) {\n        const array = [];\n        const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes\n\n        for (let i = 0, l = morphAttribute.length; i < l; i++) {\n          array.push(morphAttribute[i].clone(data));\n        }\n\n        this.morphAttributes[name] = array;\n      }\n\n      this.morphTargetsRelative = source.morphTargetsRelative;\n\n      // groups\n\n      const groups = source.groups;\n\n      for (let i = 0, l = groups.length; i < l; i++) {\n        const group = groups[i];\n        this.addGroup(group.start, group.count, group.materialIndex);\n      }\n\n      // bounding box\n\n      const boundingBox = source.boundingBox;\n\n      if (boundingBox !== null) {\n        this.boundingBox = boundingBox.clone();\n      }\n\n      // bounding sphere\n\n      const boundingSphere = source.boundingSphere;\n\n      if (boundingSphere !== null) {\n        this.boundingSphere = boundingSphere.clone();\n      }\n\n      // draw range\n\n      this.drawRange.start = source.drawRange.start;\n      this.drawRange.count = source.drawRange.count;\n\n      // user data\n\n      this.userData = source.userData;\n\n      return this;\n    }\n\n    dispose() {\n      this.dispatchEvent({ type: \"dispose\" });\n    }\n  }\n\n  const _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\n  const _ray$3 = /*@__PURE__*/ new Ray();\n  const _sphere$5 = /*@__PURE__*/ new Sphere();\n  const _sphereHitAt = /*@__PURE__*/ new Vector3();\n\n  const _vA$1 = /*@__PURE__*/ new Vector3();\n  const _vB$1 = /*@__PURE__*/ new Vector3();\n  const _vC$1 = /*@__PURE__*/ new Vector3();\n\n  const _tempA = /*@__PURE__*/ new Vector3();\n  const _morphA = /*@__PURE__*/ new Vector3();\n\n  const _uvA$1 = /*@__PURE__*/ new Vector2();\n  const _uvB$1 = /*@__PURE__*/ new Vector2();\n  const _uvC$1 = /*@__PURE__*/ new Vector2();\n\n  const _normalA = /*@__PURE__*/ new Vector3();\n  const _normalB = /*@__PURE__*/ new Vector3();\n  const _normalC = /*@__PURE__*/ new Vector3();\n\n  const _intersectionPoint = /*@__PURE__*/ new Vector3();\n  const _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\n  class Mesh extends Object3D {\n    constructor(\n      geometry = new BufferGeometry(),\n      material = new MeshBasicMaterial()\n    ) {\n      super();\n\n      this.isMesh = true;\n\n      this.type = \"Mesh\";\n\n      this.geometry = geometry;\n      this.material = material;\n\n      this.updateMorphTargets();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      if (source.morphTargetInfluences !== undefined) {\n        this.morphTargetInfluences = source.morphTargetInfluences.slice();\n      }\n\n      if (source.morphTargetDictionary !== undefined) {\n        this.morphTargetDictionary = Object.assign(\n          {},\n          source.morphTargetDictionary\n        );\n      }\n\n      this.material = source.material;\n      this.geometry = source.geometry;\n\n      return this;\n    }\n\n    updateMorphTargets() {\n      const geometry = this.geometry;\n\n      const morphAttributes = geometry.morphAttributes;\n      const keys = Object.keys(morphAttributes);\n\n      if (keys.length > 0) {\n        const morphAttribute = morphAttributes[keys[0]];\n\n        if (morphAttribute !== undefined) {\n          this.morphTargetInfluences = [];\n          this.morphTargetDictionary = {};\n\n          for (let m = 0, ml = morphAttribute.length; m < ml; m++) {\n            const name = morphAttribute[m].name || String(m);\n\n            this.morphTargetInfluences.push(0);\n            this.morphTargetDictionary[name] = m;\n          }\n        }\n      }\n    }\n\n    getVertexPosition(index, target) {\n      const geometry = this.geometry;\n      const position = geometry.attributes.position;\n      const morphPosition = geometry.morphAttributes.position;\n      const morphTargetsRelative = geometry.morphTargetsRelative;\n\n      target.fromBufferAttribute(position, index);\n\n      const morphInfluences = this.morphTargetInfluences;\n\n      if (morphPosition && morphInfluences) {\n        _morphA.set(0, 0, 0);\n\n        for (let i = 0, il = morphPosition.length; i < il; i++) {\n          const influence = morphInfluences[i];\n          const morphAttribute = morphPosition[i];\n\n          if (influence === 0) continue;\n\n          _tempA.fromBufferAttribute(morphAttribute, index);\n\n          if (morphTargetsRelative) {\n            _morphA.addScaledVector(_tempA, influence);\n          } else {\n            _morphA.addScaledVector(_tempA.sub(target), influence);\n          }\n        }\n\n        target.add(_morphA);\n      }\n\n      return target;\n    }\n\n    raycast(raycaster, intersects) {\n      const geometry = this.geometry;\n      const material = this.material;\n      const matrixWorld = this.matrixWorld;\n\n      if (material === undefined) return;\n\n      // test with bounding sphere in world space\n\n      if (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n      _sphere$5.copy(geometry.boundingSphere);\n      _sphere$5.applyMatrix4(matrixWorld);\n\n      // check distance from ray origin to bounding sphere\n\n      _ray$3.copy(raycaster.ray).recast(raycaster.near);\n\n      if (_sphere$5.containsPoint(_ray$3.origin) === false) {\n        if (_ray$3.intersectSphere(_sphere$5, _sphereHitAt) === null) return;\n\n        if (\n          _ray$3.origin.distanceToSquared(_sphereHitAt) >\n          (raycaster.far - raycaster.near) ** 2\n        )\n          return;\n      }\n\n      // convert ray to local space of mesh\n\n      _inverseMatrix$3.copy(matrixWorld).invert();\n      _ray$3.copy(raycaster.ray).applyMatrix4(_inverseMatrix$3);\n\n      // test with bounding box in local space\n\n      if (geometry.boundingBox !== null) {\n        if (_ray$3.intersectsBox(geometry.boundingBox) === false) return;\n      }\n\n      // test for intersections with geometry\n\n      this._computeIntersections(raycaster, intersects, _ray$3);\n    }\n\n    _computeIntersections(raycaster, intersects, rayLocalSpace) {\n      let intersection;\n\n      const geometry = this.geometry;\n      const material = this.material;\n\n      const index = geometry.index;\n      const position = geometry.attributes.position;\n      const uv = geometry.attributes.uv;\n      const uv1 = geometry.attributes.uv1;\n      const normal = geometry.attributes.normal;\n      const groups = geometry.groups;\n      const drawRange = geometry.drawRange;\n\n      if (index !== null) {\n        // indexed buffer geometry\n\n        if (Array.isArray(material)) {\n          for (let i = 0, il = groups.length; i < il; i++) {\n            const group = groups[i];\n            const groupMaterial = material[group.materialIndex];\n\n            const start = Math.max(group.start, drawRange.start);\n            const end = Math.min(\n              index.count,\n              Math.min(\n                group.start + group.count,\n                drawRange.start + drawRange.count\n              )\n            );\n\n            for (let j = start, jl = end; j < jl; j += 3) {\n              const a = index.getX(j);\n              const b = index.getX(j + 1);\n              const c = index.getX(j + 2);\n\n              intersection = checkGeometryIntersection(\n                this,\n                groupMaterial,\n                raycaster,\n                rayLocalSpace,\n                uv,\n                uv1,\n                normal,\n                a,\n                b,\n                c\n              );\n\n              if (intersection) {\n                intersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics\n                intersection.face.materialIndex = group.materialIndex;\n                intersects.push(intersection);\n              }\n            }\n          }\n        } else {\n          const start = Math.max(0, drawRange.start);\n          const end = Math.min(index.count, drawRange.start + drawRange.count);\n\n          for (let i = start, il = end; i < il; i += 3) {\n            const a = index.getX(i);\n            const b = index.getX(i + 1);\n            const c = index.getX(i + 2);\n\n            intersection = checkGeometryIntersection(\n              this,\n              material,\n              raycaster,\n              rayLocalSpace,\n              uv,\n              uv1,\n              normal,\n              a,\n              b,\n              c\n            );\n\n            if (intersection) {\n              intersection.faceIndex = Math.floor(i / 3); // triangle number in indexed buffer semantics\n              intersects.push(intersection);\n            }\n          }\n        }\n      } else if (position !== undefined) {\n        // non-indexed buffer geometry\n\n        if (Array.isArray(material)) {\n          for (let i = 0, il = groups.length; i < il; i++) {\n            const group = groups[i];\n            const groupMaterial = material[group.materialIndex];\n\n            const start = Math.max(group.start, drawRange.start);\n            const end = Math.min(\n              position.count,\n              Math.min(\n                group.start + group.count,\n                drawRange.start + drawRange.count\n              )\n            );\n\n            for (let j = start, jl = end; j < jl; j += 3) {\n              const a = j;\n              const b = j + 1;\n              const c = j + 2;\n\n              intersection = checkGeometryIntersection(\n                this,\n                groupMaterial,\n                raycaster,\n                rayLocalSpace,\n                uv,\n                uv1,\n                normal,\n                a,\n                b,\n                c\n              );\n\n              if (intersection) {\n                intersection.faceIndex = Math.floor(j / 3); // triangle number in non-indexed buffer semantics\n                intersection.face.materialIndex = group.materialIndex;\n                intersects.push(intersection);\n              }\n            }\n          }\n        } else {\n          const start = Math.max(0, drawRange.start);\n          const end = Math.min(\n            position.count,\n            drawRange.start + drawRange.count\n          );\n\n          for (let i = start, il = end; i < il; i += 3) {\n            const a = i;\n            const b = i + 1;\n            const c = i + 2;\n\n            intersection = checkGeometryIntersection(\n              this,\n              material,\n              raycaster,\n              rayLocalSpace,\n              uv,\n              uv1,\n              normal,\n              a,\n              b,\n              c\n            );\n\n            if (intersection) {\n              intersection.faceIndex = Math.floor(i / 3); // triangle number in non-indexed buffer semantics\n              intersects.push(intersection);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  function checkIntersection(\n    object,\n    material,\n    raycaster,\n    ray,\n    pA,\n    pB,\n    pC,\n    point\n  ) {\n    let intersect;\n\n    if (material.side === BackSide) {\n      intersect = ray.intersectTriangle(pC, pB, pA, true, point);\n    } else {\n      intersect = ray.intersectTriangle(\n        pA,\n        pB,\n        pC,\n        material.side === FrontSide,\n        point\n      );\n    }\n\n    if (intersect === null) return null;\n\n    _intersectionPointWorld.copy(point);\n    _intersectionPointWorld.applyMatrix4(object.matrixWorld);\n\n    const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld);\n\n    if (distance < raycaster.near || distance > raycaster.far) return null;\n\n    return {\n      distance: distance,\n      point: _intersectionPointWorld.clone(),\n      object: object,\n    };\n  }\n\n  function checkGeometryIntersection(\n    object,\n    material,\n    raycaster,\n    ray,\n    uv,\n    uv1,\n    normal,\n    a,\n    b,\n    c\n  ) {\n    object.getVertexPosition(a, _vA$1);\n    object.getVertexPosition(b, _vB$1);\n    object.getVertexPosition(c, _vC$1);\n\n    const intersection = checkIntersection(\n      object,\n      material,\n      raycaster,\n      ray,\n      _vA$1,\n      _vB$1,\n      _vC$1,\n      _intersectionPoint\n    );\n\n    if (intersection) {\n      if (uv) {\n        _uvA$1.fromBufferAttribute(uv, a);\n        _uvB$1.fromBufferAttribute(uv, b);\n        _uvC$1.fromBufferAttribute(uv, c);\n\n        intersection.uv = Triangle.getInterpolation(\n          _intersectionPoint,\n          _vA$1,\n          _vB$1,\n          _vC$1,\n          _uvA$1,\n          _uvB$1,\n          _uvC$1,\n          new Vector2()\n        );\n      }\n\n      if (uv1) {\n        _uvA$1.fromBufferAttribute(uv1, a);\n        _uvB$1.fromBufferAttribute(uv1, b);\n        _uvC$1.fromBufferAttribute(uv1, c);\n\n        intersection.uv1 = Triangle.getInterpolation(\n          _intersectionPoint,\n          _vA$1,\n          _vB$1,\n          _vC$1,\n          _uvA$1,\n          _uvB$1,\n          _uvC$1,\n          new Vector2()\n        );\n        intersection.uv2 = intersection.uv1; // @deprecated, r152\n      }\n\n      if (normal) {\n        _normalA.fromBufferAttribute(normal, a);\n        _normalB.fromBufferAttribute(normal, b);\n        _normalC.fromBufferAttribute(normal, c);\n\n        intersection.normal = Triangle.getInterpolation(\n          _intersectionPoint,\n          _vA$1,\n          _vB$1,\n          _vC$1,\n          _normalA,\n          _normalB,\n          _normalC,\n          new Vector3()\n        );\n\n        if (intersection.normal.dot(ray.direction) > 0) {\n          intersection.normal.multiplyScalar(-1);\n        }\n      }\n\n      const face = {\n        a: a,\n        b: b,\n        c: c,\n        normal: new Vector3(),\n        materialIndex: 0,\n      };\n\n      Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal);\n\n      intersection.face = face;\n    }\n\n    return intersection;\n  }\n\n  class Camera extends Object3D {\n    constructor() {\n      super();\n\n      this.isCamera = true;\n\n      this.type = \"Camera\";\n\n      this.matrixWorldInverse = new Matrix4();\n\n      this.projectionMatrix = new Matrix4();\n      this.projectionMatrixInverse = new Matrix4();\n\n      this.coordinateSystem = WebGLCoordinateSystem;\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.matrixWorldInverse.copy(source.matrixWorldInverse);\n\n      this.projectionMatrix.copy(source.projectionMatrix);\n      this.projectionMatrixInverse.copy(source.projectionMatrixInverse);\n\n      this.coordinateSystem = source.coordinateSystem;\n\n      return this;\n    }\n\n    getWorldDirection(target) {\n      this.updateWorldMatrix(true, false);\n\n      const e = this.matrixWorld.elements;\n\n      return target.set(-e[8], -e[9], -e[10]).normalize();\n    }\n\n    updateMatrixWorld(force) {\n      super.updateMatrixWorld(force);\n\n      this.matrixWorldInverse.copy(this.matrixWorld).invert();\n    }\n\n    updateWorldMatrix(updateParents, updateChildren) {\n      super.updateWorldMatrix(updateParents, updateChildren);\n\n      this.matrixWorldInverse.copy(this.matrixWorld).invert();\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n  }\n\n  class PerspectiveCamera extends Camera {\n    constructor(fov = 50, aspect = 1, near = 0.1, far = 2000) {\n      super();\n\n      this.isPerspectiveCamera = true;\n\n      this.type = \"PerspectiveCamera\";\n\n      this.fov = fov;\n      this.zoom = 1;\n\n      this.near = near;\n      this.far = far;\n      this.focus = 10;\n\n      this.aspect = aspect;\n      this.view = null;\n\n      this.filmGauge = 35; // width of the film (default in millimeters)\n      this.filmOffset = 0; // horizontal film offset (same unit as gauge)\n\n      this.updateProjectionMatrix();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.fov = source.fov;\n      this.zoom = source.zoom;\n\n      this.near = source.near;\n      this.far = source.far;\n      this.focus = source.focus;\n\n      this.aspect = source.aspect;\n      this.view = source.view === null ? null : Object.assign({}, source.view);\n\n      this.filmGauge = source.filmGauge;\n      this.filmOffset = source.filmOffset;\n\n      return this;\n    }\n\n    /**\n     * Sets the FOV by focal length in respect to the current .filmGauge.\n     *\n     * The default film gauge is 35, so that the focal length can be specified for\n     * a 35mm (full frame) camera.\n     *\n     * Values for focal length and film gauge must have the same unit.\n     */\n    setFocalLength(focalLength) {\n      /** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n      const vExtentSlope = (0.5 * this.getFilmHeight()) / focalLength;\n\n      this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope);\n      this.updateProjectionMatrix();\n    }\n\n    /**\n     * Calculates the focal length from the current .fov and .filmGauge.\n     */\n    getFocalLength() {\n      const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov);\n\n      return (0.5 * this.getFilmHeight()) / vExtentSlope;\n    }\n\n    getEffectiveFOV() {\n      return (\n        RAD2DEG * 2 * Math.atan(Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom)\n      );\n    }\n\n    getFilmWidth() {\n      // film not completely covered in portrait format (aspect < 1)\n      return this.filmGauge * Math.min(this.aspect, 1);\n    }\n\n    getFilmHeight() {\n      // film not completely covered in landscape format (aspect > 1)\n      return this.filmGauge / Math.max(this.aspect, 1);\n    }\n\n    /**\n     * Sets an offset in a larger frustum. This is useful for multi-window or\n     * multi-monitor/multi-machine setups.\n     *\n     * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n     * the monitors are in grid like this\n     *\n     *   +---+---+---+\n     *   | A | B | C |\n     *   +---+---+---+\n     *   | D | E | F |\n     *   +---+---+---+\n     *\n     * then for each monitor you would call it like this\n     *\n     *   const w = 1920;\n     *   const h = 1080;\n     *   const fullWidth = w * 3;\n     *   const fullHeight = h * 2;\n     *\n     *   --A--\n     *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n     *   --B--\n     *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n     *   --C--\n     *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n     *   --D--\n     *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n     *   --E--\n     *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n     *   --F--\n     *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n     *\n     *   Note there is no reason monitors have to be the same size or in a grid.\n     */\n    setViewOffset(fullWidth, fullHeight, x, y, width, height) {\n      this.aspect = fullWidth / fullHeight;\n\n      if (this.view === null) {\n        this.view = {\n          enabled: true,\n          fullWidth: 1,\n          fullHeight: 1,\n          offsetX: 0,\n          offsetY: 0,\n          width: 1,\n          height: 1,\n        };\n      }\n\n      this.view.enabled = true;\n      this.view.fullWidth = fullWidth;\n      this.view.fullHeight = fullHeight;\n      this.view.offsetX = x;\n      this.view.offsetY = y;\n      this.view.width = width;\n      this.view.height = height;\n\n      this.updateProjectionMatrix();\n    }\n\n    clearViewOffset() {\n      if (this.view !== null) {\n        this.view.enabled = false;\n      }\n\n      this.updateProjectionMatrix();\n    }\n\n    updateProjectionMatrix() {\n      const near = this.near;\n      let top = (near * Math.tan(DEG2RAD * 0.5 * this.fov)) / this.zoom;\n      let height = 2 * top;\n      let width = this.aspect * height;\n      let left = -0.5 * width;\n      const view = this.view;\n\n      if (this.view !== null && this.view.enabled) {\n        const fullWidth = view.fullWidth,\n          fullHeight = view.fullHeight;\n\n        left += (view.offsetX * width) / fullWidth;\n        top -= (view.offsetY * height) / fullHeight;\n        width *= view.width / fullWidth;\n        height *= view.height / fullHeight;\n      }\n\n      const skew = this.filmOffset;\n      if (skew !== 0) left += (near * skew) / this.getFilmWidth();\n\n      this.projectionMatrix.makePerspective(\n        left,\n        left + width,\n        top,\n        top - height,\n        near,\n        this.far,\n        this.coordinateSystem\n      );\n\n      this.projectionMatrixInverse.copy(this.projectionMatrix).invert();\n    }\n\n    toJSON(meta) {\n      const data = super.toJSON(meta);\n\n      data.object.fov = this.fov;\n      data.object.zoom = this.zoom;\n\n      data.object.near = this.near;\n      data.object.far = this.far;\n      data.object.focus = this.focus;\n\n      data.object.aspect = this.aspect;\n\n      if (this.view !== null) data.object.view = Object.assign({}, this.view);\n\n      data.object.filmGauge = this.filmGauge;\n      data.object.filmOffset = this.filmOffset;\n\n      return data;\n    }\n  }\n\n  const _vector1 = /*@__PURE__*/ new Vector3();\n  const _vector2 = /*@__PURE__*/ new Vector3();\n  const _normalMatrix = /*@__PURE__*/ new Matrix3();\n\n  class Plane {\n    constructor(normal = new Vector3(1, 0, 0), constant = 0) {\n      this.isPlane = true;\n\n      // normal is assumed to be normalized\n\n      this.normal = normal;\n      this.constant = constant;\n    }\n\n    set(normal, constant) {\n      this.normal.copy(normal);\n      this.constant = constant;\n\n      return this;\n    }\n\n    setComponents(x, y, z, w) {\n      this.normal.set(x, y, z);\n      this.constant = w;\n\n      return this;\n    }\n\n    setFromNormalAndCoplanarPoint(normal, point) {\n      this.normal.copy(normal);\n      this.constant = -point.dot(this.normal);\n\n      return this;\n    }\n\n    setFromCoplanarPoints(a, b, c) {\n      const normal = _vector1\n        .subVectors(c, b)\n        .cross(_vector2.subVectors(a, b))\n        .normalize();\n\n      // Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n      this.setFromNormalAndCoplanarPoint(normal, a);\n\n      return this;\n    }\n\n    copy(plane) {\n      this.normal.copy(plane.normal);\n      this.constant = plane.constant;\n\n      return this;\n    }\n\n    normalize() {\n      // Note: will lead to a divide by zero if the plane is invalid.\n\n      const inverseNormalLength = 1.0 / this.normal.length();\n      this.normal.multiplyScalar(inverseNormalLength);\n      this.constant *= inverseNormalLength;\n\n      return this;\n    }\n\n    negate() {\n      this.constant *= -1;\n      this.normal.negate();\n\n      return this;\n    }\n\n    distanceToPoint(point) {\n      return this.normal.dot(point) + this.constant;\n    }\n\n    distanceToSphere(sphere) {\n      return this.distanceToPoint(sphere.center) - sphere.radius;\n    }\n\n    projectPoint(point, target) {\n      return target\n        .copy(point)\n        .addScaledVector(this.normal, -this.distanceToPoint(point));\n    }\n\n    intersectLine(line, target) {\n      const direction = line.delta(_vector1);\n\n      const denominator = this.normal.dot(direction);\n\n      if (denominator === 0) {\n        // line is coplanar, return origin\n        if (this.distanceToPoint(line.start) === 0) {\n          return target.copy(line.start);\n        }\n\n        // Unsure if this is the correct method to handle this case.\n        return null;\n      }\n\n      const t = -(line.start.dot(this.normal) + this.constant) / denominator;\n\n      if (t < 0 || t > 1) {\n        return null;\n      }\n\n      return target.copy(line.start).addScaledVector(direction, t);\n    }\n\n    intersectsLine(line) {\n      // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n      const startSign = this.distanceToPoint(line.start);\n      const endSign = this.distanceToPoint(line.end);\n\n      return (startSign < 0 && endSign > 0) || (endSign < 0 && startSign > 0);\n    }\n\n    intersectsBox(box) {\n      return box.intersectsPlane(this);\n    }\n\n    intersectsSphere(sphere) {\n      return sphere.intersectsPlane(this);\n    }\n\n    coplanarPoint(target) {\n      return target.copy(this.normal).multiplyScalar(-this.constant);\n    }\n\n    applyMatrix4(matrix, optionalNormalMatrix) {\n      const normalMatrix =\n        optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix);\n\n      const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix);\n\n      const normal = this.normal.applyMatrix3(normalMatrix).normalize();\n\n      this.constant = -referencePoint.dot(normal);\n\n      return this;\n    }\n\n    translate(offset) {\n      this.constant -= offset.dot(this.normal);\n\n      return this;\n    }\n\n    equals(plane) {\n      return (\n        plane.normal.equals(this.normal) && plane.constant === this.constant\n      );\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n  }\n\n  const _sphere$4 = /*@__PURE__*/ new Sphere();\n  const _vector$6 = /*@__PURE__*/ new Vector3();\n\n  class Frustum {\n    constructor(\n      p0 = new Plane(),\n      p1 = new Plane(),\n      p2 = new Plane(),\n      p3 = new Plane(),\n      p4 = new Plane(),\n      p5 = new Plane()\n    ) {\n      this.planes = [p0, p1, p2, p3, p4, p5];\n    }\n\n    set(p0, p1, p2, p3, p4, p5) {\n      const planes = this.planes;\n\n      planes[0].copy(p0);\n      planes[1].copy(p1);\n      planes[2].copy(p2);\n      planes[3].copy(p3);\n      planes[4].copy(p4);\n      planes[5].copy(p5);\n\n      return this;\n    }\n\n    copy(frustum) {\n      const planes = this.planes;\n\n      for (let i = 0; i < 6; i++) {\n        planes[i].copy(frustum.planes[i]);\n      }\n\n      return this;\n    }\n\n    setFromProjectionMatrix(m, coordinateSystem = WebGLCoordinateSystem) {\n      const planes = this.planes;\n      const me = m.elements;\n      const me0 = me[0],\n        me1 = me[1],\n        me2 = me[2],\n        me3 = me[3];\n      const me4 = me[4],\n        me5 = me[5],\n        me6 = me[6],\n        me7 = me[7];\n      const me8 = me[8],\n        me9 = me[9],\n        me10 = me[10],\n        me11 = me[11];\n      const me12 = me[12],\n        me13 = me[13],\n        me14 = me[14],\n        me15 = me[15];\n\n      planes[0]\n        .setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12)\n        .normalize();\n      planes[1]\n        .setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12)\n        .normalize();\n      planes[2]\n        .setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13)\n        .normalize();\n      planes[3]\n        .setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13)\n        .normalize();\n      planes[4]\n        .setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14)\n        .normalize();\n\n      if (coordinateSystem === WebGLCoordinateSystem) {\n        planes[5]\n          .setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14)\n          .normalize();\n      } else if (coordinateSystem === WebGPUCoordinateSystem) {\n        planes[5].setComponents(me2, me6, me10, me14).normalize();\n      } else {\n        throw new Error(\n          \"THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: \" +\n            coordinateSystem\n        );\n      }\n\n      return this;\n    }\n\n    intersectsObject(object) {\n      if (object.boundingSphere !== undefined) {\n        if (object.boundingSphere === null) object.computeBoundingSphere();\n\n        _sphere$4.copy(object.boundingSphere).applyMatrix4(object.matrixWorld);\n      } else {\n        const geometry = object.geometry;\n\n        if (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n        _sphere$4\n          .copy(geometry.boundingSphere)\n          .applyMatrix4(object.matrixWorld);\n      }\n\n      return this.intersectsSphere(_sphere$4);\n    }\n\n    intersectsSprite(sprite) {\n      _sphere$4.center.set(0, 0, 0);\n      _sphere$4.radius = 0.7071067811865476;\n      _sphere$4.applyMatrix4(sprite.matrixWorld);\n\n      return this.intersectsSphere(_sphere$4);\n    }\n\n    intersectsSphere(sphere) {\n      const planes = this.planes;\n      const center = sphere.center;\n      const negRadius = -sphere.radius;\n\n      for (let i = 0; i < 6; i++) {\n        const distance = planes[i].distanceToPoint(center);\n\n        if (distance < negRadius) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    intersectsBox(box) {\n      const planes = this.planes;\n\n      for (let i = 0; i < 6; i++) {\n        const plane = planes[i];\n\n        // corner at max distance\n\n        _vector$6.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n        _vector$6.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n        _vector$6.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n        if (plane.distanceToPoint(_vector$6) < 0) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    containsPoint(point) {\n      const planes = this.planes;\n\n      for (let i = 0; i < 6; i++) {\n        if (planes[i].distanceToPoint(point) < 0) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n  }\n\n  class OrthographicCamera extends Camera {\n    constructor(\n      left = -1,\n      right = 1,\n      top = 1,\n      bottom = -1,\n      near = 0.1,\n      far = 2000\n    ) {\n      super();\n\n      this.isOrthographicCamera = true;\n\n      this.type = \"OrthographicCamera\";\n\n      this.zoom = 1;\n      this.view = null;\n\n      this.left = left;\n      this.right = right;\n      this.top = top;\n      this.bottom = bottom;\n\n      this.near = near;\n      this.far = far;\n\n      this.updateProjectionMatrix();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.left = source.left;\n      this.right = source.right;\n      this.top = source.top;\n      this.bottom = source.bottom;\n      this.near = source.near;\n      this.far = source.far;\n\n      this.zoom = source.zoom;\n      this.view = source.view === null ? null : Object.assign({}, source.view);\n\n      return this;\n    }\n\n    setViewOffset(fullWidth, fullHeight, x, y, width, height) {\n      if (this.view === null) {\n        this.view = {\n          enabled: true,\n          fullWidth: 1,\n          fullHeight: 1,\n          offsetX: 0,\n          offsetY: 0,\n          width: 1,\n          height: 1,\n        };\n      }\n\n      this.view.enabled = true;\n      this.view.fullWidth = fullWidth;\n      this.view.fullHeight = fullHeight;\n      this.view.offsetX = x;\n      this.view.offsetY = y;\n      this.view.width = width;\n      this.view.height = height;\n\n      this.updateProjectionMatrix();\n    }\n\n    clearViewOffset() {\n      if (this.view !== null) {\n        this.view.enabled = false;\n      }\n\n      this.updateProjectionMatrix();\n    }\n\n    updateProjectionMatrix() {\n      const dx = (this.right - this.left) / (2 * this.zoom);\n      const dy = (this.top - this.bottom) / (2 * this.zoom);\n      const cx = (this.right + this.left) / 2;\n      const cy = (this.top + this.bottom) / 2;\n\n      let left = cx - dx;\n      let right = cx + dx;\n      let top = cy + dy;\n      let bottom = cy - dy;\n\n      if (this.view !== null && this.view.enabled) {\n        const scaleW =\n          (this.right - this.left) / this.view.fullWidth / this.zoom;\n        const scaleH =\n          (this.top - this.bottom) / this.view.fullHeight / this.zoom;\n\n        left += scaleW * this.view.offsetX;\n        right = left + scaleW * this.view.width;\n        top -= scaleH * this.view.offsetY;\n        bottom = top - scaleH * this.view.height;\n      }\n\n      this.projectionMatrix.makeOrthographic(\n        left,\n        right,\n        top,\n        bottom,\n        this.near,\n        this.far,\n        this.coordinateSystem\n      );\n\n      this.projectionMatrixInverse.copy(this.projectionMatrix).invert();\n    }\n\n    toJSON(meta) {\n      const data = super.toJSON(meta);\n\n      data.object.zoom = this.zoom;\n      data.object.left = this.left;\n      data.object.right = this.right;\n      data.object.top = this.top;\n      data.object.bottom = this.bottom;\n      data.object.near = this.near;\n      data.object.far = this.far;\n\n      if (this.view !== null) data.object.view = Object.assign({}, this.view);\n\n      return data;\n    }\n  }\n\n  class Group extends Object3D {\n    constructor() {\n      super();\n\n      this.isGroup = true;\n\n      this.type = \"Group\";\n    }\n  }\n\n  class InterleavedBuffer {\n    constructor(array, stride) {\n      this.isInterleavedBuffer = true;\n\n      this.array = array;\n      this.stride = stride;\n      this.count = array !== undefined ? array.length / stride : 0;\n\n      this.usage = StaticDrawUsage;\n      this.updateRange = { offset: 0, count: -1 };\n\n      this.version = 0;\n\n      this.uuid = generateUUID();\n    }\n\n    onUploadCallback() {}\n\n    set needsUpdate(value) {\n      if (value === true) this.version++;\n    }\n\n    setUsage(value) {\n      this.usage = value;\n\n      return this;\n    }\n\n    copy(source) {\n      this.array = new source.array.constructor(source.array);\n      this.count = source.count;\n      this.stride = source.stride;\n      this.usage = source.usage;\n\n      return this;\n    }\n\n    copyAt(index1, attribute, index2) {\n      index1 *= this.stride;\n      index2 *= attribute.stride;\n\n      for (let i = 0, l = this.stride; i < l; i++) {\n        this.array[index1 + i] = attribute.array[index2 + i];\n      }\n\n      return this;\n    }\n\n    set(value, offset = 0) {\n      this.array.set(value, offset);\n\n      return this;\n    }\n\n    clone(data) {\n      if (data.arrayBuffers === undefined) {\n        data.arrayBuffers = {};\n      }\n\n      if (this.array.buffer._uuid === undefined) {\n        this.array.buffer._uuid = generateUUID();\n      }\n\n      if (data.arrayBuffers[this.array.buffer._uuid] === undefined) {\n        data.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer;\n      }\n\n      const array = new this.array.constructor(\n        data.arrayBuffers[this.array.buffer._uuid]\n      );\n\n      const ib = new this.constructor(array, this.stride);\n      ib.setUsage(this.usage);\n\n      return ib;\n    }\n\n    onUpload(callback) {\n      this.onUploadCallback = callback;\n\n      return this;\n    }\n\n    toJSON(data) {\n      if (data.arrayBuffers === undefined) {\n        data.arrayBuffers = {};\n      }\n\n      // generate UUID for array buffer if necessary\n\n      if (this.array.buffer._uuid === undefined) {\n        this.array.buffer._uuid = generateUUID();\n      }\n\n      if (data.arrayBuffers[this.array.buffer._uuid] === undefined) {\n        data.arrayBuffers[this.array.buffer._uuid] = Array.from(\n          new Uint32Array(this.array.buffer)\n        );\n      }\n\n      //\n\n      return {\n        uuid: this.uuid,\n        buffer: this.array.buffer._uuid,\n        type: this.array.constructor.name,\n        stride: this.stride,\n      };\n    }\n  }\n\n  const _vector$5 = /*@__PURE__*/ new Vector3();\n\n  class InterleavedBufferAttribute {\n    constructor(interleavedBuffer, itemSize, offset, normalized = false) {\n      this.isInterleavedBufferAttribute = true;\n\n      this.name = \"\";\n\n      this.data = interleavedBuffer;\n      this.itemSize = itemSize;\n      this.offset = offset;\n\n      this.normalized = normalized;\n    }\n\n    get count() {\n      return this.data.count;\n    }\n\n    get array() {\n      return this.data.array;\n    }\n\n    set needsUpdate(value) {\n      this.data.needsUpdate = value;\n    }\n\n    applyMatrix4(m) {\n      for (let i = 0, l = this.data.count; i < l; i++) {\n        _vector$5.fromBufferAttribute(this, i);\n\n        _vector$5.applyMatrix4(m);\n\n        this.setXYZ(i, _vector$5.x, _vector$5.y, _vector$5.z);\n      }\n\n      return this;\n    }\n\n    applyNormalMatrix(m) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _vector$5.fromBufferAttribute(this, i);\n\n        _vector$5.applyNormalMatrix(m);\n\n        this.setXYZ(i, _vector$5.x, _vector$5.y, _vector$5.z);\n      }\n\n      return this;\n    }\n\n    transformDirection(m) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _vector$5.fromBufferAttribute(this, i);\n\n        _vector$5.transformDirection(m);\n\n        this.setXYZ(i, _vector$5.x, _vector$5.y, _vector$5.z);\n      }\n\n      return this;\n    }\n\n    setX(index, x) {\n      if (this.normalized) x = normalize(x, this.array);\n\n      this.data.array[index * this.data.stride + this.offset] = x;\n\n      return this;\n    }\n\n    setY(index, y) {\n      if (this.normalized) y = normalize(y, this.array);\n\n      this.data.array[index * this.data.stride + this.offset + 1] = y;\n\n      return this;\n    }\n\n    setZ(index, z) {\n      if (this.normalized) z = normalize(z, this.array);\n\n      this.data.array[index * this.data.stride + this.offset + 2] = z;\n\n      return this;\n    }\n\n    setW(index, w) {\n      if (this.normalized) w = normalize(w, this.array);\n\n      this.data.array[index * this.data.stride + this.offset + 3] = w;\n\n      return this;\n    }\n\n    getX(index) {\n      let x = this.data.array[index * this.data.stride + this.offset];\n\n      if (this.normalized) x = denormalize(x, this.array);\n\n      return x;\n    }\n\n    getY(index) {\n      let y = this.data.array[index * this.data.stride + this.offset + 1];\n\n      if (this.normalized) y = denormalize(y, this.array);\n\n      return y;\n    }\n\n    getZ(index) {\n      let z = this.data.array[index * this.data.stride + this.offset + 2];\n\n      if (this.normalized) z = denormalize(z, this.array);\n\n      return z;\n    }\n\n    getW(index) {\n      let w = this.data.array[index * this.data.stride + this.offset + 3];\n\n      if (this.normalized) w = denormalize(w, this.array);\n\n      return w;\n    }\n\n    setXY(index, x, y) {\n      index = index * this.data.stride + this.offset;\n\n      if (this.normalized) {\n        x = normalize(x, this.array);\n        y = normalize(y, this.array);\n      }\n\n      this.data.array[index + 0] = x;\n      this.data.array[index + 1] = y;\n\n      return this;\n    }\n\n    setXYZ(index, x, y, z) {\n      index = index * this.data.stride + this.offset;\n\n      if (this.normalized) {\n        x = normalize(x, this.array);\n        y = normalize(y, this.array);\n        z = normalize(z, this.array);\n      }\n\n      this.data.array[index + 0] = x;\n      this.data.array[index + 1] = y;\n      this.data.array[index + 2] = z;\n\n      return this;\n    }\n\n    setXYZW(index, x, y, z, w) {\n      index = index * this.data.stride + this.offset;\n\n      if (this.normalized) {\n        x = normalize(x, this.array);\n        y = normalize(y, this.array);\n        z = normalize(z, this.array);\n        w = normalize(w, this.array);\n      }\n\n      this.data.array[index + 0] = x;\n      this.data.array[index + 1] = y;\n      this.data.array[index + 2] = z;\n      this.data.array[index + 3] = w;\n\n      return this;\n    }\n\n    clone(data) {\n      if (data === undefined) {\n        console.log(\n          \"THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.\"\n        );\n\n        const array = [];\n\n        for (let i = 0; i < this.count; i++) {\n          const index = i * this.data.stride + this.offset;\n\n          for (let j = 0; j < this.itemSize; j++) {\n            array.push(this.data.array[index + j]);\n          }\n        }\n\n        return new BufferAttribute(\n          new this.array.constructor(array),\n          this.itemSize,\n          this.normalized\n        );\n      } else {\n        if (data.interleavedBuffers === undefined) {\n          data.interleavedBuffers = {};\n        }\n\n        if (data.interleavedBuffers[this.data.uuid] === undefined) {\n          data.interleavedBuffers[this.data.uuid] = this.data.clone(data);\n        }\n\n        return new InterleavedBufferAttribute(\n          data.interleavedBuffers[this.data.uuid],\n          this.itemSize,\n          this.offset,\n          this.normalized\n        );\n      }\n    }\n\n    toJSON(data) {\n      if (data === undefined) {\n        console.log(\n          \"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.\"\n        );\n\n        const array = [];\n\n        for (let i = 0; i < this.count; i++) {\n          const index = i * this.data.stride + this.offset;\n\n          for (let j = 0; j < this.itemSize; j++) {\n            array.push(this.data.array[index + j]);\n          }\n        }\n\n        // de-interleave data and save it as an ordinary buffer attribute for now\n\n        return {\n          itemSize: this.itemSize,\n          type: this.array.constructor.name,\n          array: array,\n          normalized: this.normalized,\n        };\n      } else {\n        // save as true interleaved attribute\n\n        if (data.interleavedBuffers === undefined) {\n          data.interleavedBuffers = {};\n        }\n\n        if (data.interleavedBuffers[this.data.uuid] === undefined) {\n          data.interleavedBuffers[this.data.uuid] = this.data.toJSON(data);\n        }\n\n        return {\n          isInterleavedBufferAttribute: true,\n          itemSize: this.itemSize,\n          data: this.data.uuid,\n          offset: this.offset,\n          normalized: this.normalized,\n        };\n      }\n    }\n  }\n\n  const _basePosition = /*@__PURE__*/ new Vector3();\n\n  const _skinIndex = /*@__PURE__*/ new Vector4();\n  const _skinWeight = /*@__PURE__*/ new Vector4();\n\n  const _vector3 = /*@__PURE__*/ new Vector3();\n  const _matrix4 = /*@__PURE__*/ new Matrix4();\n  const _vertex = /*@__PURE__*/ new Vector3();\n\n  const _sphere$3 = /*@__PURE__*/ new Sphere();\n  const _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\n  const _ray$2 = /*@__PURE__*/ new Ray();\n\n  class SkinnedMesh extends Mesh {\n    constructor(geometry, material) {\n      super(geometry, material);\n\n      this.isSkinnedMesh = true;\n\n      this.type = \"SkinnedMesh\";\n\n      this.bindMode = \"attached\";\n      this.bindMatrix = new Matrix4();\n      this.bindMatrixInverse = new Matrix4();\n\n      this.boundingBox = null;\n      this.boundingSphere = null;\n    }\n\n    computeBoundingBox() {\n      const geometry = this.geometry;\n\n      if (this.boundingBox === null) {\n        this.boundingBox = new Box3();\n      }\n\n      this.boundingBox.makeEmpty();\n\n      const positionAttribute = geometry.getAttribute(\"position\");\n\n      for (let i = 0; i < positionAttribute.count; i++) {\n        _vertex.fromBufferAttribute(positionAttribute, i);\n        this.applyBoneTransform(i, _vertex);\n        this.boundingBox.expandByPoint(_vertex);\n      }\n    }\n\n    computeBoundingSphere() {\n      const geometry = this.geometry;\n\n      if (this.boundingSphere === null) {\n        this.boundingSphere = new Sphere();\n      }\n\n      this.boundingSphere.makeEmpty();\n\n      const positionAttribute = geometry.getAttribute(\"position\");\n\n      for (let i = 0; i < positionAttribute.count; i++) {\n        _vertex.fromBufferAttribute(positionAttribute, i);\n        this.applyBoneTransform(i, _vertex);\n        this.boundingSphere.expandByPoint(_vertex);\n      }\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.bindMode = source.bindMode;\n      this.bindMatrix.copy(source.bindMatrix);\n      this.bindMatrixInverse.copy(source.bindMatrixInverse);\n\n      this.skeleton = source.skeleton;\n\n      if (source.boundingBox !== null)\n        this.boundingBox = source.boundingBox.clone();\n      if (source.boundingSphere !== null)\n        this.boundingSphere = source.boundingSphere.clone();\n\n      return this;\n    }\n\n    raycast(raycaster, intersects) {\n      const material = this.material;\n      const matrixWorld = this.matrixWorld;\n\n      if (material === undefined) return;\n\n      // test with bounding sphere in world space\n\n      if (this.boundingSphere === null) this.computeBoundingSphere();\n\n      _sphere$3.copy(this.boundingSphere);\n      _sphere$3.applyMatrix4(matrixWorld);\n\n      if (raycaster.ray.intersectsSphere(_sphere$3) === false) return;\n\n      // convert ray to local space of skinned mesh\n\n      _inverseMatrix$2.copy(matrixWorld).invert();\n      _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2);\n\n      // test with bounding box in local space\n\n      if (this.boundingBox !== null) {\n        if (_ray$2.intersectsBox(this.boundingBox) === false) return;\n      }\n\n      // test for intersections with geometry\n\n      this._computeIntersections(raycaster, intersects, _ray$2);\n    }\n\n    getVertexPosition(index, target) {\n      super.getVertexPosition(index, target);\n\n      this.applyBoneTransform(index, target);\n\n      return target;\n    }\n\n    bind(skeleton, bindMatrix) {\n      this.skeleton = skeleton;\n\n      if (bindMatrix === undefined) {\n        this.updateMatrixWorld(true);\n\n        this.skeleton.calculateInverses();\n\n        bindMatrix = this.matrixWorld;\n      }\n\n      this.bindMatrix.copy(bindMatrix);\n      this.bindMatrixInverse.copy(bindMatrix).invert();\n    }\n\n    pose() {\n      this.skeleton.pose();\n    }\n\n    normalizeSkinWeights() {\n      const vector = new Vector4();\n\n      const skinWeight = this.geometry.attributes.skinWeight;\n\n      for (let i = 0, l = skinWeight.count; i < l; i++) {\n        vector.fromBufferAttribute(skinWeight, i);\n\n        const scale = 1.0 / vector.manhattanLength();\n\n        if (scale !== Infinity) {\n          vector.multiplyScalar(scale);\n        } else {\n          vector.set(1, 0, 0, 0); // do something reasonable\n        }\n\n        skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w);\n      }\n    }\n\n    updateMatrixWorld(force) {\n      super.updateMatrixWorld(force);\n\n      if (this.bindMode === \"attached\") {\n        this.bindMatrixInverse.copy(this.matrixWorld).invert();\n      } else if (this.bindMode === \"detached\") {\n        this.bindMatrixInverse.copy(this.bindMatrix).invert();\n      } else {\n        console.warn(\n          \"THREE.SkinnedMesh: Unrecognized bindMode: \" + this.bindMode\n        );\n      }\n    }\n\n    applyBoneTransform(index, vector) {\n      const skeleton = this.skeleton;\n      const geometry = this.geometry;\n\n      _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index);\n      _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index);\n\n      _basePosition.copy(vector).applyMatrix4(this.bindMatrix);\n\n      vector.set(0, 0, 0);\n\n      for (let i = 0; i < 4; i++) {\n        const weight = _skinWeight.getComponent(i);\n\n        if (weight !== 0) {\n          const boneIndex = _skinIndex.getComponent(i);\n\n          _matrix4.multiplyMatrices(\n            skeleton.bones[boneIndex].matrixWorld,\n            skeleton.boneInverses[boneIndex]\n          );\n\n          vector.addScaledVector(\n            _vector3.copy(_basePosition).applyMatrix4(_matrix4),\n            weight\n          );\n        }\n      }\n\n      return vector.applyMatrix4(this.bindMatrixInverse);\n    }\n\n    boneTransform(index, vector) {\n      // @deprecated, r151\n\n      console.warn(\n        \"THREE.SkinnedMesh: .boneTransform() was renamed to .applyBoneTransform() in r151.\"\n      );\n      return this.applyBoneTransform(index, vector);\n    }\n  }\n\n  class Bone extends Object3D {\n    constructor() {\n      super();\n\n      this.isBone = true;\n\n      this.type = \"Bone\";\n    }\n  }\n\n  class DataTexture extends Texture {\n    constructor(\n      data = null,\n      width = 1,\n      height = 1,\n      format,\n      type,\n      mapping,\n      wrapS,\n      wrapT,\n      magFilter = NearestFilter,\n      minFilter = NearestFilter,\n      anisotropy,\n      colorSpace\n    ) {\n      super(\n        null,\n        mapping,\n        wrapS,\n        wrapT,\n        magFilter,\n        minFilter,\n        format,\n        type,\n        anisotropy,\n        colorSpace\n      );\n\n      this.isDataTexture = true;\n\n      this.image = { data: data, width: width, height: height };\n\n      this.generateMipmaps = false;\n      this.flipY = false;\n      this.unpackAlignment = 1;\n    }\n  }\n\n  const _offsetMatrix = /*@__PURE__*/ new Matrix4();\n  const _identityMatrix$1 = /*@__PURE__*/ new Matrix4();\n\n  class Skeleton {\n    constructor(bones = [], boneInverses = []) {\n      this.uuid = generateUUID();\n\n      this.bones = bones.slice(0);\n      this.boneInverses = boneInverses;\n      this.boneMatrices = null;\n\n      this.boneTexture = null;\n      this.boneTextureSize = 0;\n\n      this.init();\n    }\n\n    init() {\n      const bones = this.bones;\n      const boneInverses = this.boneInverses;\n\n      this.boneMatrices = new Float32Array(bones.length * 16);\n\n      // calculate inverse bone matrices if necessary\n\n      if (boneInverses.length === 0) {\n        this.calculateInverses();\n      } else {\n        // handle special case\n\n        if (bones.length !== boneInverses.length) {\n          console.warn(\n            \"THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.\"\n          );\n\n          this.boneInverses = [];\n\n          for (let i = 0, il = this.bones.length; i < il; i++) {\n            this.boneInverses.push(new Matrix4());\n          }\n        }\n      }\n    }\n\n    calculateInverses() {\n      this.boneInverses.length = 0;\n\n      for (let i = 0, il = this.bones.length; i < il; i++) {\n        const inverse = new Matrix4();\n\n        if (this.bones[i]) {\n          inverse.copy(this.bones[i].matrixWorld).invert();\n        }\n\n        this.boneInverses.push(inverse);\n      }\n    }\n\n    pose() {\n      // recover the bind-time world matrices\n\n      for (let i = 0, il = this.bones.length; i < il; i++) {\n        const bone = this.bones[i];\n\n        if (bone) {\n          bone.matrixWorld.copy(this.boneInverses[i]).invert();\n        }\n      }\n\n      // compute the local matrices, positions, rotations and scales\n\n      for (let i = 0, il = this.bones.length; i < il; i++) {\n        const bone = this.bones[i];\n\n        if (bone) {\n          if (bone.parent && bone.parent.isBone) {\n            bone.matrix.copy(bone.parent.matrixWorld).invert();\n            bone.matrix.multiply(bone.matrixWorld);\n          } else {\n            bone.matrix.copy(bone.matrixWorld);\n          }\n\n          bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);\n        }\n      }\n    }\n\n    update() {\n      const bones = this.bones;\n      const boneInverses = this.boneInverses;\n      const boneMatrices = this.boneMatrices;\n      const boneTexture = this.boneTexture;\n\n      // flatten bone matrices to array\n\n      for (let i = 0, il = bones.length; i < il; i++) {\n        // compute the offset between the current and the original transform\n\n        const matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix$1;\n\n        _offsetMatrix.multiplyMatrices(matrix, boneInverses[i]);\n        _offsetMatrix.toArray(boneMatrices, i * 16);\n      }\n\n      if (boneTexture !== null) {\n        boneTexture.needsUpdate = true;\n      }\n    }\n\n    clone() {\n      return new Skeleton(this.bones, this.boneInverses);\n    }\n\n    computeBoneTexture() {\n      // layout (1 matrix = 4 pixels)\n      //      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n      //  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)\n      //       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)\n      //       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)\n      //       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n      let size = Math.sqrt(this.bones.length * 4); // 4 pixels needed for 1 matrix\n      size = ceilPowerOfTwo(size);\n      size = Math.max(size, 4);\n\n      const boneMatrices = new Float32Array(size * size * 4); // 4 floats per RGBA pixel\n      boneMatrices.set(this.boneMatrices); // copy current values\n\n      const boneTexture = new DataTexture(\n        boneMatrices,\n        size,\n        size,\n        RGBAFormat,\n        FloatType\n      );\n      boneTexture.needsUpdate = true;\n\n      this.boneMatrices = boneMatrices;\n      this.boneTexture = boneTexture;\n      this.boneTextureSize = size;\n\n      return this;\n    }\n\n    getBoneByName(name) {\n      for (let i = 0, il = this.bones.length; i < il; i++) {\n        const bone = this.bones[i];\n\n        if (bone.name === name) {\n          return bone;\n        }\n      }\n\n      return undefined;\n    }\n\n    dispose() {\n      if (this.boneTexture !== null) {\n        this.boneTexture.dispose();\n\n        this.boneTexture = null;\n      }\n    }\n\n    fromJSON(json, bones) {\n      this.uuid = json.uuid;\n\n      for (let i = 0, l = json.bones.length; i < l; i++) {\n        const uuid = json.bones[i];\n        let bone = bones[uuid];\n\n        if (bone === undefined) {\n          console.warn(\"THREE.Skeleton: No bone found with UUID:\", uuid);\n          bone = new Bone();\n        }\n\n        this.bones.push(bone);\n        this.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i]));\n      }\n\n      this.init();\n\n      return this;\n    }\n\n    toJSON() {\n      const data = {\n        metadata: {\n          version: 4.6,\n          type: \"Skeleton\",\n          generator: \"Skeleton.toJSON\",\n        },\n        bones: [],\n        boneInverses: [],\n      };\n\n      data.uuid = this.uuid;\n\n      const bones = this.bones;\n      const boneInverses = this.boneInverses;\n\n      for (let i = 0, l = bones.length; i < l; i++) {\n        const bone = bones[i];\n        data.bones.push(bone.uuid);\n\n        const boneInverse = boneInverses[i];\n        data.boneInverses.push(boneInverse.toArray());\n      }\n\n      return data;\n    }\n  }\n\n  class InstancedBufferAttribute extends BufferAttribute {\n    constructor(array, itemSize, normalized, meshPerAttribute = 1) {\n      super(array, itemSize, normalized);\n\n      this.isInstancedBufferAttribute = true;\n\n      this.meshPerAttribute = meshPerAttribute;\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.meshPerAttribute = source.meshPerAttribute;\n\n      return this;\n    }\n\n    toJSON() {\n      const data = super.toJSON();\n\n      data.meshPerAttribute = this.meshPerAttribute;\n\n      data.isInstancedBufferAttribute = true;\n\n      return data;\n    }\n  }\n\n  const _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\n  const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\n  const _instanceIntersects = [];\n\n  const _box3 = /*@__PURE__*/ new Box3();\n  const _identity = /*@__PURE__*/ new Matrix4();\n  const _mesh = /*@__PURE__*/ new Mesh();\n  const _sphere$2 = /*@__PURE__*/ new Sphere();\n\n  class InstancedMesh extends Mesh {\n    constructor(geometry, material, count) {\n      super(geometry, material);\n\n      this.isInstancedMesh = true;\n\n      this.instanceMatrix = new InstancedBufferAttribute(\n        new Float32Array(count * 16),\n        16\n      );\n      this.instanceColor = null;\n\n      this.count = count;\n\n      this.boundingBox = null;\n      this.boundingSphere = null;\n\n      for (let i = 0; i < count; i++) {\n        this.setMatrixAt(i, _identity);\n      }\n    }\n\n    computeBoundingBox() {\n      const geometry = this.geometry;\n      const count = this.count;\n\n      if (this.boundingBox === null) {\n        this.boundingBox = new Box3();\n      }\n\n      if (geometry.boundingBox === null) {\n        geometry.computeBoundingBox();\n      }\n\n      this.boundingBox.makeEmpty();\n\n      for (let i = 0; i < count; i++) {\n        this.getMatrixAt(i, _instanceLocalMatrix);\n\n        _box3.copy(geometry.boundingBox).applyMatrix4(_instanceLocalMatrix);\n\n        this.boundingBox.union(_box3);\n      }\n    }\n\n    computeBoundingSphere() {\n      const geometry = this.geometry;\n      const count = this.count;\n\n      if (this.boundingSphere === null) {\n        this.boundingSphere = new Sphere();\n      }\n\n      if (geometry.boundingSphere === null) {\n        geometry.computeBoundingSphere();\n      }\n\n      this.boundingSphere.makeEmpty();\n\n      for (let i = 0; i < count; i++) {\n        this.getMatrixAt(i, _instanceLocalMatrix);\n\n        _sphere$2\n          .copy(geometry.boundingSphere)\n          .applyMatrix4(_instanceLocalMatrix);\n\n        this.boundingSphere.union(_sphere$2);\n      }\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.instanceMatrix.copy(source.instanceMatrix);\n\n      if (source.instanceColor !== null)\n        this.instanceColor = source.instanceColor.clone();\n\n      this.count = source.count;\n\n      if (source.boundingBox !== null)\n        this.boundingBox = source.boundingBox.clone();\n      if (source.boundingSphere !== null)\n        this.boundingSphere = source.boundingSphere.clone();\n\n      return this;\n    }\n\n    getColorAt(index, color) {\n      color.fromArray(this.instanceColor.array, index * 3);\n    }\n\n    getMatrixAt(index, matrix) {\n      matrix.fromArray(this.instanceMatrix.array, index * 16);\n    }\n\n    raycast(raycaster, intersects) {\n      const matrixWorld = this.matrixWorld;\n      const raycastTimes = this.count;\n\n      _mesh.geometry = this.geometry;\n      _mesh.material = this.material;\n\n      if (_mesh.material === undefined) return;\n\n      // test with bounding sphere first\n\n      if (this.boundingSphere === null) this.computeBoundingSphere();\n\n      _sphere$2.copy(this.boundingSphere);\n      _sphere$2.applyMatrix4(matrixWorld);\n\n      if (raycaster.ray.intersectsSphere(_sphere$2) === false) return;\n\n      // now test each instance\n\n      for (let instanceId = 0; instanceId < raycastTimes; instanceId++) {\n        // calculate the world matrix for each instance\n\n        this.getMatrixAt(instanceId, _instanceLocalMatrix);\n\n        _instanceWorldMatrix.multiplyMatrices(\n          matrixWorld,\n          _instanceLocalMatrix\n        );\n\n        // the mesh represents this single instance\n\n        _mesh.matrixWorld = _instanceWorldMatrix;\n\n        _mesh.raycast(raycaster, _instanceIntersects);\n\n        // process the result of raycast\n\n        for (let i = 0, l = _instanceIntersects.length; i < l; i++) {\n          const intersect = _instanceIntersects[i];\n          intersect.instanceId = instanceId;\n          intersect.object = this;\n          intersects.push(intersect);\n        }\n\n        _instanceIntersects.length = 0;\n      }\n    }\n\n    setColorAt(index, color) {\n      if (this.instanceColor === null) {\n        this.instanceColor = new InstancedBufferAttribute(\n          new Float32Array(this.instanceMatrix.count * 3),\n          3\n        );\n      }\n\n      color.toArray(this.instanceColor.array, index * 3);\n    }\n\n    setMatrixAt(index, matrix) {\n      matrix.toArray(this.instanceMatrix.array, index * 16);\n    }\n\n    updateMorphTargets() {}\n\n    dispose() {\n      this.dispatchEvent({ type: \"dispose\" });\n    }\n  }\n\n  class LineBasicMaterial extends Material {\n    constructor(parameters) {\n      super();\n\n      this.isLineBasicMaterial = true;\n\n      this.type = \"LineBasicMaterial\";\n\n      this.color = new Color(0xffffff);\n\n      this.map = null;\n\n      this.linewidth = 1;\n      this.linecap = \"round\";\n      this.linejoin = \"round\";\n\n      this.fog = true;\n\n      this.setValues(parameters);\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.color.copy(source.color);\n\n      this.map = source.map;\n\n      this.linewidth = source.linewidth;\n      this.linecap = source.linecap;\n      this.linejoin = source.linejoin;\n\n      this.fog = source.fog;\n\n      return this;\n    }\n  }\n\n  const _start$1 = /*@__PURE__*/ new Vector3();\n  const _end$1 = /*@__PURE__*/ new Vector3();\n  const _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\n  const _ray$1 = /*@__PURE__*/ new Ray();\n  const _sphere$1 = /*@__PURE__*/ new Sphere();\n\n  class Line extends Object3D {\n    constructor(\n      geometry = new BufferGeometry(),\n      material = new LineBasicMaterial()\n    ) {\n      super();\n\n      this.isLine = true;\n\n      this.type = \"Line\";\n\n      this.geometry = geometry;\n      this.material = material;\n\n      this.updateMorphTargets();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.material = source.material;\n      this.geometry = source.geometry;\n\n      return this;\n    }\n\n    computeLineDistances() {\n      const geometry = this.geometry;\n\n      // we assume non-indexed geometry\n\n      if (geometry.index === null) {\n        const positionAttribute = geometry.attributes.position;\n        const lineDistances = [0];\n\n        for (let i = 1, l = positionAttribute.count; i < l; i++) {\n          _start$1.fromBufferAttribute(positionAttribute, i - 1);\n          _end$1.fromBufferAttribute(positionAttribute, i);\n\n          lineDistances[i] = lineDistances[i - 1];\n          lineDistances[i] += _start$1.distanceTo(_end$1);\n        }\n\n        geometry.setAttribute(\n          \"lineDistance\",\n          new Float32BufferAttribute(lineDistances, 1)\n        );\n      } else {\n        console.warn(\n          \"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\"\n        );\n      }\n\n      return this;\n    }\n\n    raycast(raycaster, intersects) {\n      const geometry = this.geometry;\n      const matrixWorld = this.matrixWorld;\n      const threshold = raycaster.params.Line.threshold;\n      const drawRange = geometry.drawRange;\n\n      // Checking boundingSphere distance to ray\n\n      if (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n      _sphere$1.copy(geometry.boundingSphere);\n      _sphere$1.applyMatrix4(matrixWorld);\n      _sphere$1.radius += threshold;\n\n      if (raycaster.ray.intersectsSphere(_sphere$1) === false) return;\n\n      //\n\n      _inverseMatrix$1.copy(matrixWorld).invert();\n      _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1);\n\n      const localThreshold =\n        threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n      const localThresholdSq = localThreshold * localThreshold;\n\n      const vStart = new Vector3();\n      const vEnd = new Vector3();\n      const interSegment = new Vector3();\n      const interRay = new Vector3();\n      const step = this.isLineSegments ? 2 : 1;\n\n      const index = geometry.index;\n      const attributes = geometry.attributes;\n      const positionAttribute = attributes.position;\n\n      if (index !== null) {\n        const start = Math.max(0, drawRange.start);\n        const end = Math.min(index.count, drawRange.start + drawRange.count);\n\n        for (let i = start, l = end - 1; i < l; i += step) {\n          const a = index.getX(i);\n          const b = index.getX(i + 1);\n\n          vStart.fromBufferAttribute(positionAttribute, a);\n          vEnd.fromBufferAttribute(positionAttribute, b);\n\n          const distSq = _ray$1.distanceSqToSegment(\n            vStart,\n            vEnd,\n            interRay,\n            interSegment\n          );\n\n          if (distSq > localThresholdSq) continue;\n\n          interRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n          const distance = raycaster.ray.origin.distanceTo(interRay);\n\n          if (distance < raycaster.near || distance > raycaster.far) continue;\n\n          intersects.push({\n            distance: distance,\n            // What do we want? intersection point on the ray or on the segment??\n            // point: raycaster.ray.at( distance ),\n            point: interSegment.clone().applyMatrix4(this.matrixWorld),\n            index: i,\n            face: null,\n            faceIndex: null,\n            object: this,\n          });\n        }\n      } else {\n        const start = Math.max(0, drawRange.start);\n        const end = Math.min(\n          positionAttribute.count,\n          drawRange.start + drawRange.count\n        );\n\n        for (let i = start, l = end - 1; i < l; i += step) {\n          vStart.fromBufferAttribute(positionAttribute, i);\n          vEnd.fromBufferAttribute(positionAttribute, i + 1);\n\n          const distSq = _ray$1.distanceSqToSegment(\n            vStart,\n            vEnd,\n            interRay,\n            interSegment\n          );\n\n          if (distSq > localThresholdSq) continue;\n\n          interRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n          const distance = raycaster.ray.origin.distanceTo(interRay);\n\n          if (distance < raycaster.near || distance > raycaster.far) continue;\n\n          intersects.push({\n            distance: distance,\n            // What do we want? intersection point on the ray or on the segment??\n            // point: raycaster.ray.at( distance ),\n            point: interSegment.clone().applyMatrix4(this.matrixWorld),\n            index: i,\n            face: null,\n            faceIndex: null,\n            object: this,\n          });\n        }\n      }\n    }\n\n    updateMorphTargets() {\n      const geometry = this.geometry;\n\n      const morphAttributes = geometry.morphAttributes;\n      const keys = Object.keys(morphAttributes);\n\n      if (keys.length > 0) {\n        const morphAttribute = morphAttributes[keys[0]];\n\n        if (morphAttribute !== undefined) {\n          this.morphTargetInfluences = [];\n          this.morphTargetDictionary = {};\n\n          for (let m = 0, ml = morphAttribute.length; m < ml; m++) {\n            const name = morphAttribute[m].name || String(m);\n\n            this.morphTargetInfluences.push(0);\n            this.morphTargetDictionary[name] = m;\n          }\n        }\n      }\n    }\n  }\n\n  const _start = /*@__PURE__*/ new Vector3();\n  const _end = /*@__PURE__*/ new Vector3();\n\n  class LineSegments extends Line {\n    constructor(geometry, material) {\n      super(geometry, material);\n\n      this.isLineSegments = true;\n\n      this.type = \"LineSegments\";\n    }\n\n    computeLineDistances() {\n      const geometry = this.geometry;\n\n      // we assume non-indexed geometry\n\n      if (geometry.index === null) {\n        const positionAttribute = geometry.attributes.position;\n        const lineDistances = [];\n\n        for (let i = 0, l = positionAttribute.count; i < l; i += 2) {\n          _start.fromBufferAttribute(positionAttribute, i);\n          _end.fromBufferAttribute(positionAttribute, i + 1);\n\n          lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1];\n          lineDistances[i + 1] = lineDistances[i] + _start.distanceTo(_end);\n        }\n\n        geometry.setAttribute(\n          \"lineDistance\",\n          new Float32BufferAttribute(lineDistances, 1)\n        );\n      } else {\n        console.warn(\n          \"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\"\n        );\n      }\n\n      return this;\n    }\n  }\n\n  class LineLoop extends Line {\n    constructor(geometry, material) {\n      super(geometry, material);\n\n      this.isLineLoop = true;\n\n      this.type = \"LineLoop\";\n    }\n  }\n\n  class PointsMaterial extends Material {\n    constructor(parameters) {\n      super();\n\n      this.isPointsMaterial = true;\n\n      this.type = \"PointsMaterial\";\n\n      this.color = new Color(0xffffff);\n\n      this.map = null;\n\n      this.alphaMap = null;\n\n      this.size = 1;\n      this.sizeAttenuation = true;\n\n      this.fog = true;\n\n      this.setValues(parameters);\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.color.copy(source.color);\n\n      this.map = source.map;\n\n      this.alphaMap = source.alphaMap;\n\n      this.size = source.size;\n      this.sizeAttenuation = source.sizeAttenuation;\n\n      this.fog = source.fog;\n\n      return this;\n    }\n  }\n\n  const _inverseMatrix = /*@__PURE__*/ new Matrix4();\n  const _ray = /*@__PURE__*/ new Ray();\n  const _sphere = /*@__PURE__*/ new Sphere();\n  const _position$2 = /*@__PURE__*/ new Vector3();\n\n  class Points extends Object3D {\n    constructor(\n      geometry = new BufferGeometry(),\n      material = new PointsMaterial()\n    ) {\n      super();\n\n      this.isPoints = true;\n\n      this.type = \"Points\";\n\n      this.geometry = geometry;\n      this.material = material;\n\n      this.updateMorphTargets();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.material = source.material;\n      this.geometry = source.geometry;\n\n      return this;\n    }\n\n    raycast(raycaster, intersects) {\n      const geometry = this.geometry;\n      const matrixWorld = this.matrixWorld;\n      const threshold = raycaster.params.Points.threshold;\n      const drawRange = geometry.drawRange;\n\n      // Checking boundingSphere distance to ray\n\n      if (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n      _sphere.copy(geometry.boundingSphere);\n      _sphere.applyMatrix4(matrixWorld);\n      _sphere.radius += threshold;\n\n      if (raycaster.ray.intersectsSphere(_sphere) === false) return;\n\n      //\n\n      _inverseMatrix.copy(matrixWorld).invert();\n      _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n\n      const localThreshold =\n        threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n      const localThresholdSq = localThreshold * localThreshold;\n\n      const index = geometry.index;\n      const attributes = geometry.attributes;\n      const positionAttribute = attributes.position;\n\n      if (index !== null) {\n        const start = Math.max(0, drawRange.start);\n        const end = Math.min(index.count, drawRange.start + drawRange.count);\n\n        for (let i = start, il = end; i < il; i++) {\n          const a = index.getX(i);\n\n          _position$2.fromBufferAttribute(positionAttribute, a);\n\n          testPoint(\n            _position$2,\n            a,\n            localThresholdSq,\n            matrixWorld,\n            raycaster,\n            intersects,\n            this\n          );\n        }\n      } else {\n        const start = Math.max(0, drawRange.start);\n        const end = Math.min(\n          positionAttribute.count,\n          drawRange.start + drawRange.count\n        );\n\n        for (let i = start, l = end; i < l; i++) {\n          _position$2.fromBufferAttribute(positionAttribute, i);\n\n          testPoint(\n            _position$2,\n            i,\n            localThresholdSq,\n            matrixWorld,\n            raycaster,\n            intersects,\n            this\n          );\n        }\n      }\n    }\n\n    updateMorphTargets() {\n      const geometry = this.geometry;\n\n      const morphAttributes = geometry.morphAttributes;\n      const keys = Object.keys(morphAttributes);\n\n      if (keys.length > 0) {\n        const morphAttribute = morphAttributes[keys[0]];\n\n        if (morphAttribute !== undefined) {\n          this.morphTargetInfluences = [];\n          this.morphTargetDictionary = {};\n\n          for (let m = 0, ml = morphAttribute.length; m < ml; m++) {\n            const name = morphAttribute[m].name || String(m);\n\n            this.morphTargetInfluences.push(0);\n            this.morphTargetDictionary[name] = m;\n          }\n        }\n      }\n    }\n  }\n\n  function testPoint(\n    point,\n    index,\n    localThresholdSq,\n    matrixWorld,\n    raycaster,\n    intersects,\n    object\n  ) {\n    const rayPointDistanceSq = _ray.distanceSqToPoint(point);\n\n    if (rayPointDistanceSq < localThresholdSq) {\n      const intersectPoint = new Vector3();\n\n      _ray.closestPointToPoint(point, intersectPoint);\n      intersectPoint.applyMatrix4(matrixWorld);\n\n      const distance = raycaster.ray.origin.distanceTo(intersectPoint);\n\n      if (distance < raycaster.near || distance > raycaster.far) return;\n\n      intersects.push({\n        distance: distance,\n        distanceToRay: Math.sqrt(rayPointDistanceSq),\n        point: intersectPoint,\n        index: index,\n        face: null,\n        object: object,\n      });\n    }\n  }\n\n  class MeshStandardMaterial extends Material {\n    constructor(parameters) {\n      super();\n\n      this.isMeshStandardMaterial = true;\n\n      this.defines = { STANDARD: \"\" };\n\n      this.type = \"MeshStandardMaterial\";\n\n      this.color = new Color(0xffffff); // diffuse\n      this.roughness = 1.0;\n      this.metalness = 0.0;\n\n      this.map = null;\n\n      this.lightMap = null;\n      this.lightMapIntensity = 1.0;\n\n      this.aoMap = null;\n      this.aoMapIntensity = 1.0;\n\n      this.emissive = new Color(0x000000);\n      this.emissiveIntensity = 1.0;\n      this.emissiveMap = null;\n\n      this.bumpMap = null;\n      this.bumpScale = 1;\n\n      this.normalMap = null;\n      this.normalMapType = TangentSpaceNormalMap;\n      this.normalScale = new Vector2(1, 1);\n\n      this.displacementMap = null;\n      this.displacementScale = 1;\n      this.displacementBias = 0;\n\n      this.roughnessMap = null;\n\n      this.metalnessMap = null;\n\n      this.alphaMap = null;\n\n      this.envMap = null;\n      this.envMapIntensity = 1.0;\n\n      this.wireframe = false;\n      this.wireframeLinewidth = 1;\n      this.wireframeLinecap = \"round\";\n      this.wireframeLinejoin = \"round\";\n\n      this.flatShading = false;\n\n      this.fog = true;\n\n      this.setValues(parameters);\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.defines = { STANDARD: \"\" };\n\n      this.color.copy(source.color);\n      this.roughness = source.roughness;\n      this.metalness = source.metalness;\n\n      this.map = source.map;\n\n      this.lightMap = source.lightMap;\n      this.lightMapIntensity = source.lightMapIntensity;\n\n      this.aoMap = source.aoMap;\n      this.aoMapIntensity = source.aoMapIntensity;\n\n      this.emissive.copy(source.emissive);\n      this.emissiveMap = source.emissiveMap;\n      this.emissiveIntensity = source.emissiveIntensity;\n\n      this.bumpMap = source.bumpMap;\n      this.bumpScale = source.bumpScale;\n\n      this.normalMap = source.normalMap;\n      this.normalMapType = source.normalMapType;\n      this.normalScale.copy(source.normalScale);\n\n      this.displacementMap = source.displacementMap;\n      this.displacementScale = source.displacementScale;\n      this.displacementBias = source.displacementBias;\n\n      this.roughnessMap = source.roughnessMap;\n\n      this.metalnessMap = source.metalnessMap;\n\n      this.alphaMap = source.alphaMap;\n\n      this.envMap = source.envMap;\n      this.envMapIntensity = source.envMapIntensity;\n\n      this.wireframe = source.wireframe;\n      this.wireframeLinewidth = source.wireframeLinewidth;\n      this.wireframeLinecap = source.wireframeLinecap;\n      this.wireframeLinejoin = source.wireframeLinejoin;\n\n      this.flatShading = source.flatShading;\n\n      this.fog = source.fog;\n\n      return this;\n    }\n  }\n\n  class MeshPhysicalMaterial extends MeshStandardMaterial {\n    constructor(parameters) {\n      super();\n\n      this.isMeshPhysicalMaterial = true;\n\n      this.defines = {\n        STANDARD: \"\",\n        PHYSICAL: \"\",\n      };\n\n      this.type = \"MeshPhysicalMaterial\";\n\n      this.anisotropyRotation = 0;\n      this.anisotropyMap = null;\n\n      this.clearcoatMap = null;\n      this.clearcoatRoughness = 0.0;\n      this.clearcoatRoughnessMap = null;\n      this.clearcoatNormalScale = new Vector2(1, 1);\n      this.clearcoatNormalMap = null;\n\n      this.ior = 1.5;\n\n      Object.defineProperty(this, \"reflectivity\", {\n        get: function () {\n          return clamp((2.5 * (this.ior - 1)) / (this.ior + 1), 0, 1);\n        },\n        set: function (reflectivity) {\n          this.ior = (1 + 0.4 * reflectivity) / (1 - 0.4 * reflectivity);\n        },\n      });\n\n      this.iridescenceMap = null;\n      this.iridescenceIOR = 1.3;\n      this.iridescenceThicknessRange = [100, 400];\n      this.iridescenceThicknessMap = null;\n\n      this.sheenColor = new Color(0x000000);\n      this.sheenColorMap = null;\n      this.sheenRoughness = 1.0;\n      this.sheenRoughnessMap = null;\n\n      this.transmissionMap = null;\n\n      this.thickness = 0;\n      this.thicknessMap = null;\n      this.attenuationDistance = Infinity;\n      this.attenuationColor = new Color(1, 1, 1);\n\n      this.specularIntensity = 1.0;\n      this.specularIntensityMap = null;\n      this.specularColor = new Color(1, 1, 1);\n      this.specularColorMap = null;\n\n      this._anisotropy = 0;\n      this._clearcoat = 0;\n      this._iridescence = 0;\n      this._sheen = 0.0;\n      this._transmission = 0;\n\n      this.setValues(parameters);\n    }\n\n    get anisotropy() {\n      return this._anisotropy;\n    }\n\n    set anisotropy(value) {\n      if (this._anisotropy > 0 !== value > 0) {\n        this.version++;\n      }\n\n      this._anisotropy = value;\n    }\n\n    get clearcoat() {\n      return this._clearcoat;\n    }\n\n    set clearcoat(value) {\n      if (this._clearcoat > 0 !== value > 0) {\n        this.version++;\n      }\n\n      this._clearcoat = value;\n    }\n\n    get iridescence() {\n      return this._iridescence;\n    }\n\n    set iridescence(value) {\n      if (this._iridescence > 0 !== value > 0) {\n        this.version++;\n      }\n\n      this._iridescence = value;\n    }\n\n    get sheen() {\n      return this._sheen;\n    }\n\n    set sheen(value) {\n      if (this._sheen > 0 !== value > 0) {\n        this.version++;\n      }\n\n      this._sheen = value;\n    }\n\n    get transmission() {\n      return this._transmission;\n    }\n\n    set transmission(value) {\n      if (this._transmission > 0 !== value > 0) {\n        this.version++;\n      }\n\n      this._transmission = value;\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.defines = {\n        STANDARD: \"\",\n        PHYSICAL: \"\",\n      };\n\n      this.anisotropy = source.anisotropy;\n      this.anisotropyRotation = source.anisotropyRotation;\n      this.anisotropyMap = source.anisotropyMap;\n\n      this.clearcoat = source.clearcoat;\n      this.clearcoatMap = source.clearcoatMap;\n      this.clearcoatRoughness = source.clearcoatRoughness;\n      this.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n      this.clearcoatNormalMap = source.clearcoatNormalMap;\n      this.clearcoatNormalScale.copy(source.clearcoatNormalScale);\n\n      this.ior = source.ior;\n\n      this.iridescence = source.iridescence;\n      this.iridescenceMap = source.iridescenceMap;\n      this.iridescenceIOR = source.iridescenceIOR;\n      this.iridescenceThicknessRange = [...source.iridescenceThicknessRange];\n      this.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n      this.sheen = source.sheen;\n      this.sheenColor.copy(source.sheenColor);\n      this.sheenColorMap = source.sheenColorMap;\n      this.sheenRoughness = source.sheenRoughness;\n      this.sheenRoughnessMap = source.sheenRoughnessMap;\n\n      this.transmission = source.transmission;\n      this.transmissionMap = source.transmissionMap;\n\n      this.thickness = source.thickness;\n      this.thicknessMap = source.thicknessMap;\n      this.attenuationDistance = source.attenuationDistance;\n      this.attenuationColor.copy(source.attenuationColor);\n\n      this.specularIntensity = source.specularIntensity;\n      this.specularIntensityMap = source.specularIntensityMap;\n      this.specularColor.copy(source.specularColor);\n      this.specularColorMap = source.specularColorMap;\n\n      return this;\n    }\n  }\n\n  // same as Array.prototype.slice, but also works on typed arrays\n  function arraySlice(array, from, to) {\n    if (isTypedArray(array)) {\n      // in ios9 array.subarray(from, undefined) will return empty array\n      // but array.subarray(from) or array.subarray(from, len) is correct\n      return new array.constructor(\n        array.subarray(from, to !== undefined ? to : array.length)\n      );\n    }\n\n    return array.slice(from, to);\n  }\n\n  // converts an array to a specific type\n  function convertArray(array, type, forceClone) {\n    if (\n      !array || // let 'undefined' and 'null' pass\n      (!forceClone && array.constructor === type)\n    )\n      return array;\n\n    if (typeof type.BYTES_PER_ELEMENT === \"number\") {\n      return new type(array); // create typed array\n    }\n\n    return Array.prototype.slice.call(array); // create Array\n  }\n\n  function isTypedArray(object) {\n    return ArrayBuffer.isView(object) && !(object instanceof DataView);\n  }\n\n  // returns an array by which times and values can be sorted\n  function getKeyframeOrder(times) {\n    function compareTime(i, j) {\n      return times[i] - times[j];\n    }\n\n    const n = times.length;\n    const result = new Array(n);\n    for (let i = 0; i !== n; ++i) result[i] = i;\n\n    result.sort(compareTime);\n\n    return result;\n  }\n\n  // uses the array previously returned by 'getKeyframeOrder' to sort data\n  function sortedArray(values, stride, order) {\n    const nValues = values.length;\n    const result = new values.constructor(nValues);\n\n    for (let i = 0, dstOffset = 0; dstOffset !== nValues; ++i) {\n      const srcOffset = order[i] * stride;\n\n      for (let j = 0; j !== stride; ++j) {\n        result[dstOffset++] = values[srcOffset + j];\n      }\n    }\n\n    return result;\n  }\n\n  // function for parsing AOS keyframe formats\n  function flattenJSON(jsonKeys, times, values, valuePropertyName) {\n    let i = 1,\n      key = jsonKeys[0];\n\n    while (key !== undefined && key[valuePropertyName] === undefined) {\n      key = jsonKeys[i++];\n    }\n\n    if (key === undefined) return; // no data\n\n    let value = key[valuePropertyName];\n    if (value === undefined) return; // no data\n\n    if (Array.isArray(value)) {\n      do {\n        value = key[valuePropertyName];\n\n        if (value !== undefined) {\n          times.push(key.time);\n          values.push.apply(values, value); // push all elements\n        }\n\n        key = jsonKeys[i++];\n      } while (key !== undefined);\n    } else if (value.toArray !== undefined) {\n      // ...assume THREE.Math-ish\n\n      do {\n        value = key[valuePropertyName];\n\n        if (value !== undefined) {\n          times.push(key.time);\n          value.toArray(values, values.length);\n        }\n\n        key = jsonKeys[i++];\n      } while (key !== undefined);\n    } else {\n      // otherwise push as-is\n\n      do {\n        value = key[valuePropertyName];\n\n        if (value !== undefined) {\n          times.push(key.time);\n          values.push(value);\n        }\n\n        key = jsonKeys[i++];\n      } while (key !== undefined);\n    }\n  }\n\n  /**\n   * Abstract base class of interpolants over parametric samples.\n   *\n   * The parameter domain is one dimensional, typically the time or a path\n   * along a curve defined by the data.\n   *\n   * The sample values can have any dimensionality and derived classes may\n   * apply special interpretations to the data.\n   *\n   * This class provides the interval seek in a Template Method, deferring\n   * the actual interpolation to derived classes.\n   *\n   * Time complexity is O(1) for linear access crossing at most two points\n   * and O(log N) for random access, where N is the number of positions.\n   *\n   * References:\n   *\n   * \t\thttp://www.oodesign.com/template-method-pattern.html\n   *\n   */\n\n  class Interpolant {\n    constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n      this.parameterPositions = parameterPositions;\n      this._cachedIndex = 0;\n\n      this.resultBuffer =\n        resultBuffer !== undefined\n          ? resultBuffer\n          : new sampleValues.constructor(sampleSize);\n      this.sampleValues = sampleValues;\n      this.valueSize = sampleSize;\n\n      this.settings = null;\n      this.DefaultSettings_ = {};\n    }\n\n    evaluate(t) {\n      const pp = this.parameterPositions;\n      let i1 = this._cachedIndex,\n        t1 = pp[i1],\n        t0 = pp[i1 - 1];\n\n      validate_interval: {\n        seek: {\n          let right;\n\n          linear_scan: {\n            //- See http://jsperf.com/comparison-to-undefined/3\n            //- slower code:\n            //-\n            //- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n            forward_scan: if (!(t < t1)) {\n              for (let giveUpAt = i1 + 2; ; ) {\n                if (t1 === undefined) {\n                  if (t < t0) break forward_scan;\n\n                  // after end\n\n                  i1 = pp.length;\n                  this._cachedIndex = i1;\n                  return this.copySampleValue_(i1 - 1);\n                }\n\n                if (i1 === giveUpAt) break; // this loop\n\n                t0 = t1;\n                t1 = pp[++i1];\n\n                if (t < t1) {\n                  // we have arrived at the sought interval\n                  break seek;\n                }\n              }\n\n              // prepare binary search on the right side of the index\n              right = pp.length;\n              break linear_scan;\n            }\n\n            //- slower code:\n            //-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n            if (!(t >= t0)) {\n              // looping?\n\n              const t1global = pp[1];\n\n              if (t < t1global) {\n                i1 = 2; // + 1, using the scan for the details\n                t0 = t1global;\n              }\n\n              // linear reverse scan\n\n              for (let giveUpAt = i1 - 2; ; ) {\n                if (t0 === undefined) {\n                  // before start\n\n                  this._cachedIndex = 0;\n                  return this.copySampleValue_(0);\n                }\n\n                if (i1 === giveUpAt) break; // this loop\n\n                t1 = t0;\n                t0 = pp[--i1 - 1];\n\n                if (t >= t0) {\n                  // we have arrived at the sought interval\n                  break seek;\n                }\n              }\n\n              // prepare binary search on the left side of the index\n              right = i1;\n              i1 = 0;\n              break linear_scan;\n            }\n\n            // the interval is valid\n\n            break validate_interval;\n          } // linear scan\n\n          // binary search\n\n          while (i1 < right) {\n            const mid = (i1 + right) >>> 1;\n\n            if (t < pp[mid]) {\n              right = mid;\n            } else {\n              i1 = mid + 1;\n            }\n          }\n\n          t1 = pp[i1];\n          t0 = pp[i1 - 1];\n\n          // check boundary cases, again\n\n          if (t0 === undefined) {\n            this._cachedIndex = 0;\n            return this.copySampleValue_(0);\n          }\n\n          if (t1 === undefined) {\n            i1 = pp.length;\n            this._cachedIndex = i1;\n            return this.copySampleValue_(i1 - 1);\n          }\n        } // seek\n\n        this._cachedIndex = i1;\n\n        this.intervalChanged_(i1, t0, t1);\n      } // validate_interval\n\n      return this.interpolate_(i1, t0, t, t1);\n    }\n\n    getSettings_() {\n      return this.settings || this.DefaultSettings_;\n    }\n\n    copySampleValue_(index) {\n      // copies a sample value to the result buffer\n\n      const result = this.resultBuffer,\n        values = this.sampleValues,\n        stride = this.valueSize,\n        offset = index * stride;\n\n      for (let i = 0; i !== stride; ++i) {\n        result[i] = values[offset + i];\n      }\n\n      return result;\n    }\n\n    // Template methods for derived classes:\n\n    interpolate_(/* i1, t0, t, t1 */) {\n      throw new Error(\"call to abstract method\");\n      // implementations shall return this.resultBuffer\n    }\n\n    intervalChanged_(/* i1, t0, t1 */) {\n      // empty\n    }\n  }\n\n  /**\n   * Fast and simple cubic spline interpolant.\n   *\n   * It was derived from a Hermitian construction setting the first derivative\n   * at each sample position to the linear slope between neighboring positions\n   * over their parameter interval.\n   */\n\n  class CubicInterpolant extends Interpolant {\n    constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n      super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n\n      this._weightPrev = -0;\n      this._offsetPrev = -0;\n      this._weightNext = -0;\n      this._offsetNext = -0;\n\n      this.DefaultSettings_ = {\n        endingStart: ZeroCurvatureEnding,\n        endingEnd: ZeroCurvatureEnding,\n      };\n    }\n\n    intervalChanged_(i1, t0, t1) {\n      const pp = this.parameterPositions;\n      let iPrev = i1 - 2,\n        iNext = i1 + 1,\n        tPrev = pp[iPrev],\n        tNext = pp[iNext];\n\n      if (tPrev === undefined) {\n        switch (this.getSettings_().endingStart) {\n          case ZeroSlopeEnding:\n            // f'(t0) = 0\n            iPrev = i1;\n            tPrev = 2 * t0 - t1;\n\n            break;\n\n          case WrapAroundEnding:\n            // use the other end of the curve\n            iPrev = pp.length - 2;\n            tPrev = t0 + pp[iPrev] - pp[iPrev + 1];\n\n            break;\n\n          default: // ZeroCurvatureEnding\n            // f''(t0) = 0 a.k.a. Natural Spline\n            iPrev = i1;\n            tPrev = t1;\n        }\n      }\n\n      if (tNext === undefined) {\n        switch (this.getSettings_().endingEnd) {\n          case ZeroSlopeEnding:\n            // f'(tN) = 0\n            iNext = i1;\n            tNext = 2 * t1 - t0;\n\n            break;\n\n          case WrapAroundEnding:\n            // use the other end of the curve\n            iNext = 1;\n            tNext = t1 + pp[1] - pp[0];\n\n            break;\n\n          default: // ZeroCurvatureEnding\n            // f''(tN) = 0, a.k.a. Natural Spline\n            iNext = i1 - 1;\n            tNext = t0;\n        }\n      }\n\n      const halfDt = (t1 - t0) * 0.5,\n        stride = this.valueSize;\n\n      this._weightPrev = halfDt / (t0 - tPrev);\n      this._weightNext = halfDt / (tNext - t1);\n      this._offsetPrev = iPrev * stride;\n      this._offsetNext = iNext * stride;\n    }\n\n    interpolate_(i1, t0, t, t1) {\n      const result = this.resultBuffer,\n        values = this.sampleValues,\n        stride = this.valueSize,\n        o1 = i1 * stride,\n        o0 = o1 - stride,\n        oP = this._offsetPrev,\n        oN = this._offsetNext,\n        wP = this._weightPrev,\n        wN = this._weightNext,\n        p = (t - t0) / (t1 - t0),\n        pp = p * p,\n        ppp = pp * p;\n\n      // evaluate polynomials\n\n      const sP = -wP * ppp + 2 * wP * pp - wP * p;\n      const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1;\n      const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p;\n      const sN = wN * ppp - wN * pp;\n\n      // combine data linearly\n\n      for (let i = 0; i !== stride; ++i) {\n        result[i] =\n          sP * values[oP + i] +\n          s0 * values[o0 + i] +\n          s1 * values[o1 + i] +\n          sN * values[oN + i];\n      }\n\n      return result;\n    }\n  }\n\n  class LinearInterpolant extends Interpolant {\n    constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n      super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n    }\n\n    interpolate_(i1, t0, t, t1) {\n      const result = this.resultBuffer,\n        values = this.sampleValues,\n        stride = this.valueSize,\n        offset1 = i1 * stride,\n        offset0 = offset1 - stride,\n        weight1 = (t - t0) / (t1 - t0),\n        weight0 = 1 - weight1;\n\n      for (let i = 0; i !== stride; ++i) {\n        result[i] =\n          values[offset0 + i] * weight0 + values[offset1 + i] * weight1;\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   *\n   * Interpolant that evaluates to the sample value at the position preceding\n   * the parameter.\n   */\n\n  class DiscreteInterpolant extends Interpolant {\n    constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n      super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n    }\n\n    interpolate_(i1 /*, t0, t, t1 */) {\n      return this.copySampleValue_(i1 - 1);\n    }\n  }\n\n  class KeyframeTrack {\n    constructor(name, times, values, interpolation) {\n      if (name === undefined)\n        throw new Error(\"THREE.KeyframeTrack: track name is undefined\");\n      if (times === undefined || times.length === 0)\n        throw new Error(\n          \"THREE.KeyframeTrack: no keyframes in track named \" + name\n        );\n\n      this.name = name;\n\n      this.times = convertArray(times, this.TimeBufferType);\n      this.values = convertArray(values, this.ValueBufferType);\n\n      this.setInterpolation(interpolation || this.DefaultInterpolation);\n    }\n\n    // Serialization (in static context, because of constructor invocation\n    // and automatic invocation of .toJSON):\n\n    static toJSON(track) {\n      const trackType = track.constructor;\n\n      let json;\n\n      // derived classes can define a static toJSON method\n      if (trackType.toJSON !== this.toJSON) {\n        json = trackType.toJSON(track);\n      } else {\n        // by default, we assume the data can be serialized as-is\n        json = {\n          name: track.name,\n          times: convertArray(track.times, Array),\n          values: convertArray(track.values, Array),\n        };\n\n        const interpolation = track.getInterpolation();\n\n        if (interpolation !== track.DefaultInterpolation) {\n          json.interpolation = interpolation;\n        }\n      }\n\n      json.type = track.ValueTypeName; // mandatory\n\n      return json;\n    }\n\n    InterpolantFactoryMethodDiscrete(result) {\n      return new DiscreteInterpolant(\n        this.times,\n        this.values,\n        this.getValueSize(),\n        result\n      );\n    }\n\n    InterpolantFactoryMethodLinear(result) {\n      return new LinearInterpolant(\n        this.times,\n        this.values,\n        this.getValueSize(),\n        result\n      );\n    }\n\n    InterpolantFactoryMethodSmooth(result) {\n      return new CubicInterpolant(\n        this.times,\n        this.values,\n        this.getValueSize(),\n        result\n      );\n    }\n\n    setInterpolation(interpolation) {\n      let factoryMethod;\n\n      switch (interpolation) {\n        case InterpolateDiscrete:\n          factoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n          break;\n\n        case InterpolateLinear:\n          factoryMethod = this.InterpolantFactoryMethodLinear;\n\n          break;\n\n        case InterpolateSmooth:\n          factoryMethod = this.InterpolantFactoryMethodSmooth;\n\n          break;\n      }\n\n      if (factoryMethod === undefined) {\n        const message =\n          \"unsupported interpolation for \" +\n          this.ValueTypeName +\n          \" keyframe track named \" +\n          this.name;\n\n        if (this.createInterpolant === undefined) {\n          // fall back to default, unless the default itself is messed up\n          if (interpolation !== this.DefaultInterpolation) {\n            this.setInterpolation(this.DefaultInterpolation);\n          } else {\n            throw new Error(message); // fatal, in this case\n          }\n        }\n\n        console.warn(\"THREE.KeyframeTrack:\", message);\n        return this;\n      }\n\n      this.createInterpolant = factoryMethod;\n\n      return this;\n    }\n\n    getInterpolation() {\n      switch (this.createInterpolant) {\n        case this.InterpolantFactoryMethodDiscrete:\n          return InterpolateDiscrete;\n\n        case this.InterpolantFactoryMethodLinear:\n          return InterpolateLinear;\n\n        case this.InterpolantFactoryMethodSmooth:\n          return InterpolateSmooth;\n      }\n    }\n\n    getValueSize() {\n      return this.values.length / this.times.length;\n    }\n\n    // move all keyframes either forwards or backwards in time\n    shift(timeOffset) {\n      if (timeOffset !== 0.0) {\n        const times = this.times;\n\n        for (let i = 0, n = times.length; i !== n; ++i) {\n          times[i] += timeOffset;\n        }\n      }\n\n      return this;\n    }\n\n    // scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n    scale(timeScale) {\n      if (timeScale !== 1.0) {\n        const times = this.times;\n\n        for (let i = 0, n = times.length; i !== n; ++i) {\n          times[i] *= timeScale;\n        }\n      }\n\n      return this;\n    }\n\n    // removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n    // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n    trim(startTime, endTime) {\n      const times = this.times,\n        nKeys = times.length;\n\n      let from = 0,\n        to = nKeys - 1;\n\n      while (from !== nKeys && times[from] < startTime) {\n        ++from;\n      }\n\n      while (to !== -1 && times[to] > endTime) {\n        --to;\n      }\n\n      ++to; // inclusive -> exclusive bound\n\n      if (from !== 0 || to !== nKeys) {\n        // empty tracks are forbidden, so keep at least one keyframe\n        if (from >= to) {\n          to = Math.max(to, 1);\n          from = to - 1;\n        }\n\n        const stride = this.getValueSize();\n        this.times = arraySlice(times, from, to);\n        this.values = arraySlice(this.values, from * stride, to * stride);\n      }\n\n      return this;\n    }\n\n    // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n    validate() {\n      let valid = true;\n\n      const valueSize = this.getValueSize();\n      if (valueSize - Math.floor(valueSize) !== 0) {\n        console.error(\n          \"THREE.KeyframeTrack: Invalid value size in track.\",\n          this\n        );\n        valid = false;\n      }\n\n      const times = this.times,\n        values = this.values,\n        nKeys = times.length;\n\n      if (nKeys === 0) {\n        console.error(\"THREE.KeyframeTrack: Track is empty.\", this);\n        valid = false;\n      }\n\n      let prevTime = null;\n\n      for (let i = 0; i !== nKeys; i++) {\n        const currTime = times[i];\n\n        if (typeof currTime === \"number\" && isNaN(currTime)) {\n          console.error(\n            \"THREE.KeyframeTrack: Time is not a valid number.\",\n            this,\n            i,\n            currTime\n          );\n          valid = false;\n          break;\n        }\n\n        if (prevTime !== null && prevTime > currTime) {\n          console.error(\n            \"THREE.KeyframeTrack: Out of order keys.\",\n            this,\n            i,\n            currTime,\n            prevTime\n          );\n          valid = false;\n          break;\n        }\n\n        prevTime = currTime;\n      }\n\n      if (values !== undefined) {\n        if (isTypedArray(values)) {\n          for (let i = 0, n = values.length; i !== n; ++i) {\n            const value = values[i];\n\n            if (isNaN(value)) {\n              console.error(\n                \"THREE.KeyframeTrack: Value is not a valid number.\",\n                this,\n                i,\n                value\n              );\n              valid = false;\n              break;\n            }\n          }\n        }\n      }\n\n      return valid;\n    }\n\n    // removes equivalent sequential keys as common in morph target sequences\n    // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n    optimize() {\n      // times or values may be shared with other tracks, so overwriting is unsafe\n      const times = arraySlice(this.times),\n        values = arraySlice(this.values),\n        stride = this.getValueSize(),\n        smoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n        lastIndex = times.length - 1;\n\n      let writeIndex = 1;\n\n      for (let i = 1; i < lastIndex; ++i) {\n        let keep = false;\n\n        const time = times[i];\n        const timeNext = times[i + 1];\n\n        // remove adjacent keyframes scheduled at the same time\n\n        if (time !== timeNext && (i !== 1 || time !== times[0])) {\n          if (!smoothInterpolation) {\n            // remove unnecessary keyframes same as their neighbors\n\n            const offset = i * stride,\n              offsetP = offset - stride,\n              offsetN = offset + stride;\n\n            for (let j = 0; j !== stride; ++j) {\n              const value = values[offset + j];\n\n              if (\n                value !== values[offsetP + j] ||\n                value !== values[offsetN + j]\n              ) {\n                keep = true;\n                break;\n              }\n            }\n          } else {\n            keep = true;\n          }\n        }\n\n        // in-place compaction\n\n        if (keep) {\n          if (i !== writeIndex) {\n            times[writeIndex] = times[i];\n\n            const readOffset = i * stride,\n              writeOffset = writeIndex * stride;\n\n            for (let j = 0; j !== stride; ++j) {\n              values[writeOffset + j] = values[readOffset + j];\n            }\n          }\n\n          ++writeIndex;\n        }\n      }\n\n      // flush last keyframe (compaction looks ahead)\n\n      if (lastIndex > 0) {\n        times[writeIndex] = times[lastIndex];\n\n        for (\n          let readOffset = lastIndex * stride,\n            writeOffset = writeIndex * stride,\n            j = 0;\n          j !== stride;\n          ++j\n        ) {\n          values[writeOffset + j] = values[readOffset + j];\n        }\n\n        ++writeIndex;\n      }\n\n      if (writeIndex !== times.length) {\n        this.times = arraySlice(times, 0, writeIndex);\n        this.values = arraySlice(values, 0, writeIndex * stride);\n      } else {\n        this.times = times;\n        this.values = values;\n      }\n\n      return this;\n    }\n\n    clone() {\n      const times = arraySlice(this.times, 0);\n      const values = arraySlice(this.values, 0);\n\n      const TypedKeyframeTrack = this.constructor;\n      const track = new TypedKeyframeTrack(this.name, times, values);\n\n      // Interpolant argument to constructor is not saved, so copy the factory method directly.\n      track.createInterpolant = this.createInterpolant;\n\n      return track;\n    }\n  }\n\n  KeyframeTrack.prototype.TimeBufferType = Float32Array;\n  KeyframeTrack.prototype.ValueBufferType = Float32Array;\n  KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n  /**\n   * A Track of Boolean keyframe values.\n   */\n  class BooleanKeyframeTrack extends KeyframeTrack {}\n\n  BooleanKeyframeTrack.prototype.ValueTypeName = \"bool\";\n  BooleanKeyframeTrack.prototype.ValueBufferType = Array;\n  BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\n  BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\n  BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n  /**\n   * A Track of keyframe values that represent color.\n   */\n  class ColorKeyframeTrack extends KeyframeTrack {}\n\n  ColorKeyframeTrack.prototype.ValueTypeName = \"color\";\n\n  /**\n   * A Track of numeric keyframe values.\n   */\n  class NumberKeyframeTrack extends KeyframeTrack {}\n\n  NumberKeyframeTrack.prototype.ValueTypeName = \"number\";\n\n  /**\n   * Spherical linear unit quaternion interpolant.\n   */\n\n  class QuaternionLinearInterpolant extends Interpolant {\n    constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n      super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n    }\n\n    interpolate_(i1, t0, t, t1) {\n      const result = this.resultBuffer,\n        values = this.sampleValues,\n        stride = this.valueSize,\n        alpha = (t - t0) / (t1 - t0);\n\n      let offset = i1 * stride;\n\n      for (let end = offset + stride; offset !== end; offset += 4) {\n        Quaternion.slerpFlat(\n          result,\n          0,\n          values,\n          offset - stride,\n          values,\n          offset,\n          alpha\n        );\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * A Track of quaternion keyframe values.\n   */\n  class QuaternionKeyframeTrack extends KeyframeTrack {\n    InterpolantFactoryMethodLinear(result) {\n      return new QuaternionLinearInterpolant(\n        this.times,\n        this.values,\n        this.getValueSize(),\n        result\n      );\n    }\n  }\n\n  QuaternionKeyframeTrack.prototype.ValueTypeName = \"quaternion\";\n  // ValueBufferType is inherited\n  QuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n  QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n  /**\n   * A Track that interpolates Strings\n   */\n  class StringKeyframeTrack extends KeyframeTrack {}\n\n  StringKeyframeTrack.prototype.ValueTypeName = \"string\";\n  StringKeyframeTrack.prototype.ValueBufferType = Array;\n  StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\n  StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\n  StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n  /**\n   * A Track of vectored keyframe values.\n   */\n  class VectorKeyframeTrack extends KeyframeTrack {}\n\n  VectorKeyframeTrack.prototype.ValueTypeName = \"vector\";\n\n  class AnimationClip {\n    constructor(\n      name,\n      duration = -1,\n      tracks,\n      blendMode = NormalAnimationBlendMode\n    ) {\n      this.name = name;\n      this.tracks = tracks;\n      this.duration = duration;\n      this.blendMode = blendMode;\n\n      this.uuid = generateUUID();\n\n      // this means it should figure out its duration by scanning the tracks\n      if (this.duration < 0) {\n        this.resetDuration();\n      }\n    }\n\n    static parse(json) {\n      const tracks = [],\n        jsonTracks = json.tracks,\n        frameTime = 1.0 / (json.fps || 1.0);\n\n      for (let i = 0, n = jsonTracks.length; i !== n; ++i) {\n        tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime));\n      }\n\n      const clip = new this(json.name, json.duration, tracks, json.blendMode);\n      clip.uuid = json.uuid;\n\n      return clip;\n    }\n\n    static toJSON(clip) {\n      const tracks = [],\n        clipTracks = clip.tracks;\n\n      const json = {\n        name: clip.name,\n        duration: clip.duration,\n        tracks: tracks,\n        uuid: clip.uuid,\n        blendMode: clip.blendMode,\n      };\n\n      for (let i = 0, n = clipTracks.length; i !== n; ++i) {\n        tracks.push(KeyframeTrack.toJSON(clipTracks[i]));\n      }\n\n      return json;\n    }\n\n    static CreateFromMorphTargetSequence(\n      name,\n      morphTargetSequence,\n      fps,\n      noLoop\n    ) {\n      const numMorphTargets = morphTargetSequence.length;\n      const tracks = [];\n\n      for (let i = 0; i < numMorphTargets; i++) {\n        let times = [];\n        let values = [];\n\n        times.push(\n          (i + numMorphTargets - 1) % numMorphTargets,\n          i,\n          (i + 1) % numMorphTargets\n        );\n\n        values.push(0, 1, 0);\n\n        const order = getKeyframeOrder(times);\n        times = sortedArray(times, 1, order);\n        values = sortedArray(values, 1, order);\n\n        // if there is a key at the first frame, duplicate it as the\n        // last frame as well for perfect loop.\n        if (!noLoop && times[0] === 0) {\n          times.push(numMorphTargets);\n          values.push(values[0]);\n        }\n\n        tracks.push(\n          new NumberKeyframeTrack(\n            \".morphTargetInfluences[\" + morphTargetSequence[i].name + \"]\",\n            times,\n            values\n          ).scale(1.0 / fps)\n        );\n      }\n\n      return new this(name, -1, tracks);\n    }\n\n    static findByName(objectOrClipArray, name) {\n      let clipArray = objectOrClipArray;\n\n      if (!Array.isArray(objectOrClipArray)) {\n        const o = objectOrClipArray;\n        clipArray = (o.geometry && o.geometry.animations) || o.animations;\n      }\n\n      for (let i = 0; i < clipArray.length; i++) {\n        if (clipArray[i].name === name) {\n          return clipArray[i];\n        }\n      }\n\n      return null;\n    }\n\n    static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) {\n      const animationToMorphTargets = {};\n\n      // tested with https://regex101.com/ on trick sequences\n      // such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n      const pattern = /^([\\w-]*?)([\\d]+)$/;\n\n      // sort morph target names into animation groups based\n      // patterns like Walk_001, Walk_002, Run_001, Run_002\n      for (let i = 0, il = morphTargets.length; i < il; i++) {\n        const morphTarget = morphTargets[i];\n        const parts = morphTarget.name.match(pattern);\n\n        if (parts && parts.length > 1) {\n          const name = parts[1];\n\n          let animationMorphTargets = animationToMorphTargets[name];\n\n          if (!animationMorphTargets) {\n            animationToMorphTargets[name] = animationMorphTargets = [];\n          }\n\n          animationMorphTargets.push(morphTarget);\n        }\n      }\n\n      const clips = [];\n\n      for (const name in animationToMorphTargets) {\n        clips.push(\n          this.CreateFromMorphTargetSequence(\n            name,\n            animationToMorphTargets[name],\n            fps,\n            noLoop\n          )\n        );\n      }\n\n      return clips;\n    }\n\n    // parse the animation.hierarchy format\n    static parseAnimation(animation, bones) {\n      if (!animation) {\n        console.error(\"THREE.AnimationClip: No animation in JSONLoader data.\");\n        return null;\n      }\n\n      const addNonemptyTrack = function (\n        trackType,\n        trackName,\n        animationKeys,\n        propertyName,\n        destTracks\n      ) {\n        // only return track if there are actually keys.\n        if (animationKeys.length !== 0) {\n          const times = [];\n          const values = [];\n\n          flattenJSON(animationKeys, times, values, propertyName);\n\n          // empty keys are filtered out, so check again\n          if (times.length !== 0) {\n            destTracks.push(new trackType(trackName, times, values));\n          }\n        }\n      };\n\n      const tracks = [];\n\n      const clipName = animation.name || \"default\";\n      const fps = animation.fps || 30;\n      const blendMode = animation.blendMode;\n\n      // automatic length determination in AnimationClip.\n      let duration = animation.length || -1;\n\n      const hierarchyTracks = animation.hierarchy || [];\n\n      for (let h = 0; h < hierarchyTracks.length; h++) {\n        const animationKeys = hierarchyTracks[h].keys;\n\n        // skip empty tracks\n        if (!animationKeys || animationKeys.length === 0) continue;\n\n        // process morph targets\n        if (animationKeys[0].morphTargets) {\n          // figure out all morph targets used in this track\n          const morphTargetNames = {};\n\n          let k;\n\n          for (k = 0; k < animationKeys.length; k++) {\n            if (animationKeys[k].morphTargets) {\n              for (let m = 0; m < animationKeys[k].morphTargets.length; m++) {\n                morphTargetNames[animationKeys[k].morphTargets[m]] = -1;\n              }\n            }\n          }\n\n          // create a track for each morph target with all zero\n          // morphTargetInfluences except for the keys in which\n          // the morphTarget is named.\n          for (const morphTargetName in morphTargetNames) {\n            const times = [];\n            const values = [];\n\n            for (let m = 0; m !== animationKeys[k].morphTargets.length; ++m) {\n              const animationKey = animationKeys[k];\n\n              times.push(animationKey.time);\n              values.push(animationKey.morphTarget === morphTargetName ? 1 : 0);\n            }\n\n            tracks.push(\n              new NumberKeyframeTrack(\n                \".morphTargetInfluence[\" + morphTargetName + \"]\",\n                times,\n                values\n              )\n            );\n          }\n\n          duration = morphTargetNames.length * fps;\n        } else {\n          // ...assume skeletal animation\n\n          const boneName = \".bones[\" + bones[h].name + \"]\";\n\n          addNonemptyTrack(\n            VectorKeyframeTrack,\n            boneName + \".position\",\n            animationKeys,\n            \"pos\",\n            tracks\n          );\n\n          addNonemptyTrack(\n            QuaternionKeyframeTrack,\n            boneName + \".quaternion\",\n            animationKeys,\n            \"rot\",\n            tracks\n          );\n\n          addNonemptyTrack(\n            VectorKeyframeTrack,\n            boneName + \".scale\",\n            animationKeys,\n            \"scl\",\n            tracks\n          );\n        }\n      }\n\n      if (tracks.length === 0) {\n        return null;\n      }\n\n      const clip = new this(clipName, duration, tracks, blendMode);\n\n      return clip;\n    }\n\n    resetDuration() {\n      const tracks = this.tracks;\n      let duration = 0;\n\n      for (let i = 0, n = tracks.length; i !== n; ++i) {\n        const track = this.tracks[i];\n\n        duration = Math.max(duration, track.times[track.times.length - 1]);\n      }\n\n      this.duration = duration;\n\n      return this;\n    }\n\n    trim() {\n      for (let i = 0; i < this.tracks.length; i++) {\n        this.tracks[i].trim(0, this.duration);\n      }\n\n      return this;\n    }\n\n    validate() {\n      let valid = true;\n\n      for (let i = 0; i < this.tracks.length; i++) {\n        valid = valid && this.tracks[i].validate();\n      }\n\n      return valid;\n    }\n\n    optimize() {\n      for (let i = 0; i < this.tracks.length; i++) {\n        this.tracks[i].optimize();\n      }\n\n      return this;\n    }\n\n    clone() {\n      const tracks = [];\n\n      for (let i = 0; i < this.tracks.length; i++) {\n        tracks.push(this.tracks[i].clone());\n      }\n\n      return new this.constructor(\n        this.name,\n        this.duration,\n        tracks,\n        this.blendMode\n      );\n    }\n\n    toJSON() {\n      return this.constructor.toJSON(this);\n    }\n  }\n\n  function getTrackTypeForValueTypeName(typeName) {\n    switch (typeName.toLowerCase()) {\n      case \"scalar\":\n      case \"double\":\n      case \"float\":\n      case \"number\":\n      case \"integer\":\n        return NumberKeyframeTrack;\n\n      case \"vector\":\n      case \"vector2\":\n      case \"vector3\":\n      case \"vector4\":\n        return VectorKeyframeTrack;\n\n      case \"color\":\n        return ColorKeyframeTrack;\n\n      case \"quaternion\":\n        return QuaternionKeyframeTrack;\n\n      case \"bool\":\n      case \"boolean\":\n        return BooleanKeyframeTrack;\n\n      case \"string\":\n        return StringKeyframeTrack;\n    }\n\n    throw new Error(\"THREE.KeyframeTrack: Unsupported typeName: \" + typeName);\n  }\n\n  function parseKeyframeTrack(json) {\n    if (json.type === undefined) {\n      throw new Error(\n        \"THREE.KeyframeTrack: track type undefined, can not parse\"\n      );\n    }\n\n    const trackType = getTrackTypeForValueTypeName(json.type);\n\n    if (json.times === undefined) {\n      const times = [],\n        values = [];\n\n      flattenJSON(json.keys, times, values, \"value\");\n\n      json.times = times;\n      json.values = values;\n    }\n\n    // derived classes can define a static parse method\n    if (trackType.parse !== undefined) {\n      return trackType.parse(json);\n    } else {\n      // by default, we assume a constructor compatible with the base\n      return new trackType(\n        json.name,\n        json.times,\n        json.values,\n        json.interpolation\n      );\n    }\n  }\n\n  const Cache = {\n    enabled: false,\n\n    files: {},\n\n    add: function (key, file) {\n      if (this.enabled === false) return;\n\n      // console.log( 'THREE.Cache', 'Adding key:', key );\n\n      this.files[key] = file;\n    },\n\n    get: function (key) {\n      if (this.enabled === false) return;\n\n      // console.log( 'THREE.Cache', 'Checking key:', key );\n\n      return this.files[key];\n    },\n\n    remove: function (key) {\n      delete this.files[key];\n    },\n\n    clear: function () {\n      this.files = {};\n    },\n  };\n\n  class LoadingManager {\n    constructor(onLoad, onProgress, onError) {\n      const scope = this;\n\n      let isLoading = false;\n      let itemsLoaded = 0;\n      let itemsTotal = 0;\n      let urlModifier = undefined;\n      const handlers = [];\n\n      // Refer to #5689 for the reason why we don't set .onStart\n      // in the constructor\n\n      this.onStart = undefined;\n      this.onLoad = onLoad;\n      this.onProgress = onProgress;\n      this.onError = onError;\n\n      this.itemStart = function (url) {\n        itemsTotal++;\n\n        if (isLoading === false) {\n          if (scope.onStart !== undefined) {\n            scope.onStart(url, itemsLoaded, itemsTotal);\n          }\n        }\n\n        isLoading = true;\n      };\n\n      this.itemEnd = function (url) {\n        itemsLoaded++;\n\n        if (scope.onProgress !== undefined) {\n          scope.onProgress(url, itemsLoaded, itemsTotal);\n        }\n\n        if (itemsLoaded === itemsTotal) {\n          isLoading = false;\n\n          if (scope.onLoad !== undefined) {\n            scope.onLoad();\n          }\n        }\n      };\n\n      this.itemError = function (url) {\n        if (scope.onError !== undefined) {\n          scope.onError(url);\n        }\n      };\n\n      this.resolveURL = function (url) {\n        if (urlModifier) {\n          return urlModifier(url);\n        }\n\n        return url;\n      };\n\n      this.setURLModifier = function (transform) {\n        urlModifier = transform;\n\n        return this;\n      };\n\n      this.addHandler = function (regex, loader) {\n        handlers.push(regex, loader);\n\n        return this;\n      };\n\n      this.removeHandler = function (regex) {\n        const index = handlers.indexOf(regex);\n\n        if (index !== -1) {\n          handlers.splice(index, 2);\n        }\n\n        return this;\n      };\n\n      this.getHandler = function (file) {\n        for (let i = 0, l = handlers.length; i < l; i += 2) {\n          const regex = handlers[i];\n          const loader = handlers[i + 1];\n\n          if (regex.global) regex.lastIndex = 0; // see #17920\n\n          if (regex.test(file)) {\n            return loader;\n          }\n        }\n\n        return null;\n      };\n    }\n  }\n\n  const DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\n  class Loader {\n    constructor(manager) {\n      this.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\n      this.crossOrigin = \"anonymous\";\n      this.withCredentials = false;\n      this.path = \"\";\n      this.resourcePath = \"\";\n      this.requestHeader = {};\n    }\n\n    load(/* url, onLoad, onProgress, onError */) {}\n\n    loadAsync(url, onProgress) {\n      const scope = this;\n\n      return new Promise(function (resolve, reject) {\n        scope.load(url, resolve, onProgress, reject);\n      });\n    }\n\n    parse(/* data */) {}\n\n    setCrossOrigin(crossOrigin) {\n      this.crossOrigin = crossOrigin;\n      return this;\n    }\n\n    setWithCredentials(value) {\n      this.withCredentials = value;\n      return this;\n    }\n\n    setPath(path) {\n      this.path = path;\n      return this;\n    }\n\n    setResourcePath(resourcePath) {\n      this.resourcePath = resourcePath;\n      return this;\n    }\n\n    setRequestHeader(requestHeader) {\n      this.requestHeader = requestHeader;\n      return this;\n    }\n  }\n\n  Loader.DEFAULT_MATERIAL_NAME = \"__DEFAULT\";\n\n  const loading = {};\n\n  class HttpError extends Error {\n    constructor(message, response) {\n      super(message);\n      this.response = response;\n    }\n  }\n\n  class FileLoader extends Loader {\n    constructor(manager) {\n      super(manager);\n    }\n\n    load(url, onLoad, onProgress, onError) {\n      if (url === undefined) url = \"\";\n\n      if (this.path !== undefined) url = this.path + url;\n\n      url = this.manager.resolveURL(url);\n\n      const cached = Cache.get(url);\n\n      if (cached !== undefined) {\n        this.manager.itemStart(url);\n\n        setTimeout(() => {\n          if (onLoad) onLoad(cached);\n\n          this.manager.itemEnd(url);\n        }, 0);\n\n        return cached;\n      }\n\n      // Check if request is duplicate\n\n      if (loading[url] !== undefined) {\n        loading[url].push({\n          onLoad: onLoad,\n          onProgress: onProgress,\n          onError: onError,\n        });\n\n        return;\n      }\n\n      // Initialise array for duplicate requests\n      loading[url] = [];\n\n      loading[url].push({\n        onLoad: onLoad,\n        onProgress: onProgress,\n        onError: onError,\n      });\n\n      // create request\n      const req = new Request(url, {\n        headers: new Headers(this.requestHeader),\n        credentials: this.withCredentials ? \"include\" : \"same-origin\",\n        // An abort controller could be added within a future PR\n      });\n\n      // record states ( avoid data race )\n      const mimeType = this.mimeType;\n      const responseType = this.responseType;\n\n      // start the fetch\n      fetch(req)\n        .then((response) => {\n          if (response.status === 200 || response.status === 0) {\n            // Some browsers return HTTP Status 0 when using non-http protocol\n            // e.g. 'file://' or 'data://'. Handle as success.\n\n            if (response.status === 0) {\n              console.warn(\"THREE.FileLoader: HTTP Status 0 received.\");\n            }\n\n            // Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n            if (\n              typeof ReadableStream === \"undefined\" ||\n              response.body === undefined ||\n              response.body.getReader === undefined\n            ) {\n              return response;\n            }\n\n            const callbacks = loading[url];\n            const reader = response.body.getReader();\n\n            // Nginx needs X-File-Size check\n            // https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n            const contentLength =\n              response.headers.get(\"Content-Length\") ||\n              response.headers.get(\"X-File-Size\");\n            const total = contentLength ? parseInt(contentLength) : 0;\n            const lengthComputable = total !== 0;\n            let loaded = 0;\n\n            // periodically read data into the new stream tracking while download progress\n            const stream = new ReadableStream({\n              start(controller) {\n                readData();\n\n                function readData() {\n                  reader.read().then(({ done, value }) => {\n                    if (done) {\n                      controller.close();\n                    } else {\n                      loaded += value.byteLength;\n\n                      const event = new ProgressEvent(\"progress\", {\n                        lengthComputable,\n                        loaded,\n                        total,\n                      });\n                      for (let i = 0, il = callbacks.length; i < il; i++) {\n                        const callback = callbacks[i];\n                        if (callback.onProgress) callback.onProgress(event);\n                      }\n\n                      controller.enqueue(value);\n                      readData();\n                    }\n                  });\n                }\n              },\n            });\n\n            return new Response(stream);\n          } else {\n            throw new HttpError(\n              `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`,\n              response\n            );\n          }\n        })\n        .then((response) => {\n          switch (responseType) {\n            case \"arraybuffer\":\n              return response.arrayBuffer();\n\n            case \"blob\":\n              return response.blob();\n\n            case \"document\":\n              return response.text().then((text) => {\n                const parser = new DOMParser();\n                return parser.parseFromString(text, mimeType);\n              });\n\n            case \"json\":\n              return response.json();\n\n            default:\n              if (mimeType === undefined) {\n                return response.text();\n              } else {\n                // sniff encoding\n                const re = /charset=\"?([^;\"\\s]*)\"?/i;\n                const exec = re.exec(mimeType);\n                const label =\n                  exec && exec[1] ? exec[1].toLowerCase() : undefined;\n                const decoder = new TextDecoder(label);\n                return response.arrayBuffer().then((ab) => decoder.decode(ab));\n              }\n          }\n        })\n        .then((data) => {\n          // Add to cache only on HTTP success, so that we do not cache\n          // error response bodies as proper responses to requests.\n          Cache.add(url, data);\n\n          const callbacks = loading[url];\n          delete loading[url];\n\n          for (let i = 0, il = callbacks.length; i < il; i++) {\n            const callback = callbacks[i];\n            if (callback.onLoad) callback.onLoad(data);\n          }\n        })\n        .catch((err) => {\n          // Abort errors and other errors are handled the same\n\n          const callbacks = loading[url];\n\n          if (callbacks === undefined) {\n            // When onLoad was called and url was deleted in `loading`\n            this.manager.itemError(url);\n            throw err;\n          }\n\n          delete loading[url];\n\n          for (let i = 0, il = callbacks.length; i < il; i++) {\n            const callback = callbacks[i];\n            if (callback.onError) callback.onError(err);\n          }\n\n          this.manager.itemError(url);\n        })\n        .finally(() => {\n          this.manager.itemEnd(url);\n        });\n\n      this.manager.itemStart(url);\n    }\n\n    setResponseType(value) {\n      this.responseType = value;\n      return this;\n    }\n\n    setMimeType(value) {\n      this.mimeType = value;\n      return this;\n    }\n  }\n\n  class ImageLoader extends Loader {\n    constructor(manager) {\n      super(manager);\n    }\n\n    load(url, onLoad, onProgress, onError) {\n      if (this.path !== undefined) url = this.path + url;\n\n      url = this.manager.resolveURL(url);\n\n      const scope = this;\n\n      const cached = Cache.get(url);\n\n      if (cached !== undefined) {\n        scope.manager.itemStart(url);\n\n        setTimeout(function () {\n          if (onLoad) onLoad(cached);\n\n          scope.manager.itemEnd(url);\n        }, 0);\n\n        return cached;\n      }\n\n      const image = createElementNS(\"img\");\n\n      function onImageLoad() {\n        removeEventListeners();\n\n        Cache.add(url, this);\n\n        if (onLoad) onLoad(this);\n\n        scope.manager.itemEnd(url);\n      }\n\n      function onImageError(event) {\n        removeEventListeners();\n\n        if (onError) onError(event);\n\n        scope.manager.itemError(url);\n        scope.manager.itemEnd(url);\n      }\n\n      function removeEventListeners() {\n        image.removeEventListener(\"load\", onImageLoad, false);\n        image.removeEventListener(\"error\", onImageError, false);\n      }\n\n      image.addEventListener(\"load\", onImageLoad, false);\n      image.addEventListener(\"error\", onImageError, false);\n\n      if (url.slice(0, 5) !== \"data:\") {\n        if (this.crossOrigin !== undefined)\n          image.crossOrigin = this.crossOrigin;\n      }\n\n      scope.manager.itemStart(url);\n\n      image.src = url;\n\n      return image;\n    }\n  }\n\n  class TextureLoader extends Loader {\n    constructor(manager) {\n      super(manager);\n    }\n\n    load(url, onLoad, onProgress, onError) {\n      const texture = new Texture();\n\n      const loader = new ImageLoader(this.manager);\n      loader.setCrossOrigin(this.crossOrigin);\n      loader.setPath(this.path);\n\n      loader.load(\n        url,\n        function (image) {\n          texture.image = image;\n          texture.needsUpdate = true;\n\n          if (onLoad !== undefined) {\n            onLoad(texture);\n          }\n        },\n        onProgress,\n        onError\n      );\n\n      return texture;\n    }\n  }\n\n  class Light extends Object3D {\n    constructor(color, intensity = 1) {\n      super();\n\n      this.isLight = true;\n\n      this.type = \"Light\";\n\n      this.color = new Color(color);\n      this.intensity = intensity;\n    }\n\n    dispose() {\n      // Empty here in base class; some subclasses override.\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.color.copy(source.color);\n      this.intensity = source.intensity;\n\n      return this;\n    }\n\n    toJSON(meta) {\n      const data = super.toJSON(meta);\n\n      data.object.color = this.color.getHex();\n      data.object.intensity = this.intensity;\n\n      if (this.groundColor !== undefined)\n        data.object.groundColor = this.groundColor.getHex();\n\n      if (this.distance !== undefined) data.object.distance = this.distance;\n      if (this.angle !== undefined) data.object.angle = this.angle;\n      if (this.decay !== undefined) data.object.decay = this.decay;\n      if (this.penumbra !== undefined) data.object.penumbra = this.penumbra;\n\n      if (this.shadow !== undefined) data.object.shadow = this.shadow.toJSON();\n\n      return data;\n    }\n  }\n\n  const _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\n  const _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\n  const _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\n  class LightShadow {\n    constructor(camera) {\n      this.camera = camera;\n\n      this.bias = 0;\n      this.normalBias = 0;\n      this.radius = 1;\n      this.blurSamples = 8;\n\n      this.mapSize = new Vector2(512, 512);\n\n      this.map = null;\n      this.mapPass = null;\n      this.matrix = new Matrix4();\n\n      this.autoUpdate = true;\n      this.needsUpdate = false;\n\n      this._frustum = new Frustum();\n      this._frameExtents = new Vector2(1, 1);\n\n      this._viewportCount = 1;\n\n      this._viewports = [new Vector4(0, 0, 1, 1)];\n    }\n\n    getViewportCount() {\n      return this._viewportCount;\n    }\n\n    getFrustum() {\n      return this._frustum;\n    }\n\n    updateMatrices(light) {\n      const shadowCamera = this.camera;\n      const shadowMatrix = this.matrix;\n\n      _lightPositionWorld$1.setFromMatrixPosition(light.matrixWorld);\n      shadowCamera.position.copy(_lightPositionWorld$1);\n\n      _lookTarget$1.setFromMatrixPosition(light.target.matrixWorld);\n      shadowCamera.lookAt(_lookTarget$1);\n      shadowCamera.updateMatrixWorld();\n\n      _projScreenMatrix$1.multiplyMatrices(\n        shadowCamera.projectionMatrix,\n        shadowCamera.matrixWorldInverse\n      );\n      this._frustum.setFromProjectionMatrix(_projScreenMatrix$1);\n\n      shadowMatrix.set(\n        0.5,\n        0.0,\n        0.0,\n        0.5,\n        0.0,\n        0.5,\n        0.0,\n        0.5,\n        0.0,\n        0.0,\n        0.5,\n        0.5,\n        0.0,\n        0.0,\n        0.0,\n        1.0\n      );\n\n      shadowMatrix.multiply(_projScreenMatrix$1);\n    }\n\n    getViewport(viewportIndex) {\n      return this._viewports[viewportIndex];\n    }\n\n    getFrameExtents() {\n      return this._frameExtents;\n    }\n\n    dispose() {\n      if (this.map) {\n        this.map.dispose();\n      }\n\n      if (this.mapPass) {\n        this.mapPass.dispose();\n      }\n    }\n\n    copy(source) {\n      this.camera = source.camera.clone();\n\n      this.bias = source.bias;\n      this.radius = source.radius;\n\n      this.mapSize.copy(source.mapSize);\n\n      return this;\n    }\n\n    clone() {\n      return new this.constructor().copy(this);\n    }\n\n    toJSON() {\n      const object = {};\n\n      if (this.bias !== 0) object.bias = this.bias;\n      if (this.normalBias !== 0) object.normalBias = this.normalBias;\n      if (this.radius !== 1) object.radius = this.radius;\n      if (this.mapSize.x !== 512 || this.mapSize.y !== 512)\n        object.mapSize = this.mapSize.toArray();\n\n      object.camera = this.camera.toJSON(false).object;\n      delete object.camera.matrix;\n\n      return object;\n    }\n  }\n\n  class SpotLightShadow extends LightShadow {\n    constructor() {\n      super(new PerspectiveCamera(50, 1, 0.5, 500));\n\n      this.isSpotLightShadow = true;\n\n      this.focus = 1;\n    }\n\n    updateMatrices(light) {\n      const camera = this.camera;\n\n      const fov = RAD2DEG * 2 * light.angle * this.focus;\n      const aspect = this.mapSize.width / this.mapSize.height;\n      const far = light.distance || camera.far;\n\n      if (\n        fov !== camera.fov ||\n        aspect !== camera.aspect ||\n        far !== camera.far\n      ) {\n        camera.fov = fov;\n        camera.aspect = aspect;\n        camera.far = far;\n        camera.updateProjectionMatrix();\n      }\n\n      super.updateMatrices(light);\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.focus = source.focus;\n\n      return this;\n    }\n  }\n\n  class SpotLight extends Light {\n    constructor(\n      color,\n      intensity,\n      distance = 0,\n      angle = Math.PI / 3,\n      penumbra = 0,\n      decay = 2\n    ) {\n      super(color, intensity);\n\n      this.isSpotLight = true;\n\n      this.type = \"SpotLight\";\n\n      this.position.copy(Object3D.DEFAULT_UP);\n      this.updateMatrix();\n\n      this.target = new Object3D();\n\n      this.distance = distance;\n      this.angle = angle;\n      this.penumbra = penumbra;\n      this.decay = decay;\n\n      this.map = null;\n\n      this.shadow = new SpotLightShadow();\n    }\n\n    get power() {\n      // compute the light's luminous power (in lumens) from its intensity (in candela)\n      // by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n      return this.intensity * Math.PI;\n    }\n\n    set power(power) {\n      // set the light's intensity (in candela) from the desired luminous power (in lumens)\n      this.intensity = power / Math.PI;\n    }\n\n    dispose() {\n      this.shadow.dispose();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.distance = source.distance;\n      this.angle = source.angle;\n      this.penumbra = source.penumbra;\n      this.decay = source.decay;\n\n      this.target = source.target.clone();\n\n      this.shadow = source.shadow.clone();\n\n      return this;\n    }\n  }\n\n  const _projScreenMatrix = /*@__PURE__*/ new Matrix4();\n  const _lightPositionWorld = /*@__PURE__*/ new Vector3();\n  const _lookTarget = /*@__PURE__*/ new Vector3();\n\n  class PointLightShadow extends LightShadow {\n    constructor() {\n      super(new PerspectiveCamera(90, 1, 0.5, 500));\n\n      this.isPointLightShadow = true;\n\n      this._frameExtents = new Vector2(4, 2);\n\n      this._viewportCount = 6;\n\n      this._viewports = [\n        // These viewports map a cube-map onto a 2D texture with the\n        // following orientation:\n        //\n        //  xzXZ\n        //   y Y\n        //\n        // X - Positive x direction\n        // x - Negative x direction\n        // Y - Positive y direction\n        // y - Negative y direction\n        // Z - Positive z direction\n        // z - Negative z direction\n\n        // positive X\n        new Vector4(2, 1, 1, 1),\n        // negative X\n        new Vector4(0, 1, 1, 1),\n        // positive Z\n        new Vector4(3, 1, 1, 1),\n        // negative Z\n        new Vector4(1, 1, 1, 1),\n        // positive Y\n        new Vector4(3, 0, 1, 1),\n        // negative Y\n        new Vector4(1, 0, 1, 1),\n      ];\n\n      this._cubeDirections = [\n        new Vector3(1, 0, 0),\n        new Vector3(-1, 0, 0),\n        new Vector3(0, 0, 1),\n        new Vector3(0, 0, -1),\n        new Vector3(0, 1, 0),\n        new Vector3(0, -1, 0),\n      ];\n\n      this._cubeUps = [\n        new Vector3(0, 1, 0),\n        new Vector3(0, 1, 0),\n        new Vector3(0, 1, 0),\n        new Vector3(0, 1, 0),\n        new Vector3(0, 0, 1),\n        new Vector3(0, 0, -1),\n      ];\n    }\n\n    updateMatrices(light, viewportIndex = 0) {\n      const camera = this.camera;\n      const shadowMatrix = this.matrix;\n\n      const far = light.distance || camera.far;\n\n      if (far !== camera.far) {\n        camera.far = far;\n        camera.updateProjectionMatrix();\n      }\n\n      _lightPositionWorld.setFromMatrixPosition(light.matrixWorld);\n      camera.position.copy(_lightPositionWorld);\n\n      _lookTarget.copy(camera.position);\n      _lookTarget.add(this._cubeDirections[viewportIndex]);\n      camera.up.copy(this._cubeUps[viewportIndex]);\n      camera.lookAt(_lookTarget);\n      camera.updateMatrixWorld();\n\n      shadowMatrix.makeTranslation(\n        -_lightPositionWorld.x,\n        -_lightPositionWorld.y,\n        -_lightPositionWorld.z\n      );\n\n      _projScreenMatrix.multiplyMatrices(\n        camera.projectionMatrix,\n        camera.matrixWorldInverse\n      );\n      this._frustum.setFromProjectionMatrix(_projScreenMatrix);\n    }\n  }\n\n  class PointLight extends Light {\n    constructor(color, intensity, distance = 0, decay = 2) {\n      super(color, intensity);\n\n      this.isPointLight = true;\n\n      this.type = \"PointLight\";\n\n      this.distance = distance;\n      this.decay = decay;\n\n      this.shadow = new PointLightShadow();\n    }\n\n    get power() {\n      // compute the light's luminous power (in lumens) from its intensity (in candela)\n      // for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n      return this.intensity * 4 * Math.PI;\n    }\n\n    set power(power) {\n      // set the light's intensity (in candela) from the desired luminous power (in lumens)\n      this.intensity = power / (4 * Math.PI);\n    }\n\n    dispose() {\n      this.shadow.dispose();\n    }\n\n    copy(source, recursive) {\n      super.copy(source, recursive);\n\n      this.distance = source.distance;\n      this.decay = source.decay;\n\n      this.shadow = source.shadow.clone();\n\n      return this;\n    }\n  }\n\n  class DirectionalLightShadow extends LightShadow {\n    constructor() {\n      super(new OrthographicCamera(-5, 5, 5, -5, 0.5, 500));\n\n      this.isDirectionalLightShadow = true;\n    }\n  }\n\n  class DirectionalLight extends Light {\n    constructor(color, intensity) {\n      super(color, intensity);\n\n      this.isDirectionalLight = true;\n\n      this.type = \"DirectionalLight\";\n\n      this.position.copy(Object3D.DEFAULT_UP);\n      this.updateMatrix();\n\n      this.target = new Object3D();\n\n      this.shadow = new DirectionalLightShadow();\n    }\n\n    dispose() {\n      this.shadow.dispose();\n    }\n\n    copy(source) {\n      super.copy(source);\n\n      this.target = source.target.clone();\n      this.shadow = source.shadow.clone();\n\n      return this;\n    }\n  }\n\n  class LoaderUtils {\n    static decodeText(array) {\n      if (typeof TextDecoder !== \"undefined\") {\n        return new TextDecoder().decode(array);\n      }\n\n      // Avoid the String.fromCharCode.apply(null, array) shortcut, which\n      // throws a \"maximum call stack size exceeded\" error for large arrays.\n\n      let s = \"\";\n\n      for (let i = 0, il = array.length; i < il; i++) {\n        // Implicitly assumes little-endian.\n        s += String.fromCharCode(array[i]);\n      }\n\n      try {\n        // merges multi-byte utf-8 characters.\n\n        return decodeURIComponent(escape(s));\n      } catch (e) {\n        // see #16358\n\n        return s;\n      }\n    }\n\n    static extractUrlBase(url) {\n      const index = url.lastIndexOf(\"/\");\n\n      if (index === -1) return \"./\";\n\n      return url.slice(0, index + 1);\n    }\n\n    static resolveURL(url, path) {\n      // Invalid URL\n      if (typeof url !== \"string\" || url === \"\") return \"\";\n\n      // Host Relative URL\n      if (/^https?:\\/\\//i.test(path) && /^\\//.test(url)) {\n        path = path.replace(/(^https?:\\/\\/[^\\/]+).*/i, \"$1\");\n      }\n\n      // Absolute URL http://,https://,//\n      if (/^(https?:)?\\/\\//i.test(url)) return url;\n\n      // Data URI\n      if (/^data:.*,.*$/i.test(url)) return url;\n\n      // Blob URL\n      if (/^blob:.*$/i.test(url)) return url;\n\n      // Relative URL\n      return path + url;\n    }\n  }\n\n  class ImageBitmapLoader extends Loader {\n    constructor(manager) {\n      super(manager);\n\n      this.isImageBitmapLoader = true;\n\n      if (typeof createImageBitmap === \"undefined\") {\n        console.warn(\n          \"THREE.ImageBitmapLoader: createImageBitmap() not supported.\"\n        );\n      }\n\n      if (typeof fetch === \"undefined\") {\n        console.warn(\"THREE.ImageBitmapLoader: fetch() not supported.\");\n      }\n\n      this.options = { premultiplyAlpha: \"none\" };\n    }\n\n    setOptions(options) {\n      this.options = options;\n\n      return this;\n    }\n\n    load(url, onLoad, onProgress, onError) {\n      if (url === undefined) url = \"\";\n\n      if (this.path !== undefined) url = this.path + url;\n\n      url = this.manager.resolveURL(url);\n\n      const scope = this;\n\n      const cached = Cache.get(url);\n\n      if (cached !== undefined) {\n        scope.manager.itemStart(url);\n\n        setTimeout(function () {\n          if (onLoad) onLoad(cached);\n\n          scope.manager.itemEnd(url);\n        }, 0);\n\n        return cached;\n      }\n\n      const fetchOptions = {};\n      fetchOptions.credentials =\n        this.crossOrigin === \"anonymous\" ? \"same-origin\" : \"include\";\n      fetchOptions.headers = this.requestHeader;\n\n      fetch(url, fetchOptions)\n        .then(function (res) {\n          return res.blob();\n        })\n        .then(function (blob) {\n          return createImageBitmap(\n            blob,\n            Object.assign(scope.options, { colorSpaceConversion: \"none\" })\n          );\n        })\n        .then(function (imageBitmap) {\n          Cache.add(url, imageBitmap);\n\n          if (onLoad) onLoad(imageBitmap);\n\n          scope.manager.itemEnd(url);\n        })\n        .catch(function (e) {\n          if (onError) onError(e);\n\n          scope.manager.itemError(url);\n          scope.manager.itemEnd(url);\n        });\n\n      scope.manager.itemStart(url);\n    }\n  }\n\n  // Characters [].:/ are reserved for track binding syntax.\n  const _RESERVED_CHARS_RE = \"\\\\[\\\\]\\\\.:\\\\/\";\n  const _reservedRe = new RegExp(\"[\" + _RESERVED_CHARS_RE + \"]\", \"g\");\n\n  // Attempts to allow node names from any language. ES5's `\\w` regexp matches\n  // only latin characters, and the unicode \\p{L} is not yet supported. So\n  // instead, we exclude reserved characters and match everything else.\n  const _wordChar = \"[^\" + _RESERVED_CHARS_RE + \"]\";\n  const _wordCharOrDot = \"[^\" + _RESERVED_CHARS_RE.replace(\"\\\\.\", \"\") + \"]\";\n\n  // Parent directories, delimited by '/' or ':'. Currently unused, but must\n  // be matched to parse the rest of the track name.\n  const _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace(\n    \"WC\",\n    _wordChar\n  );\n\n  // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n  const _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace(\n    \"WCOD\",\n    _wordCharOrDot\n  );\n\n  // Object on target node, and accessor. May not contain reserved\n  // characters. Accessor may contain any character except closing bracket.\n  const _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace(\n    \"WC\",\n    _wordChar\n  );\n\n  // Property and accessor. May not contain reserved characters. Accessor may\n  // contain any non-bracket characters.\n  const _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace(\n    \"WC\",\n    _wordChar\n  );\n\n  const _trackRe = new RegExp(\n    \"\" + \"^\" + _directoryRe + _nodeRe + _objectRe + _propertyRe + \"$\"\n  );\n\n  const _supportedObjectNames = [\"material\", \"materials\", \"bones\", \"map\"];\n\n  class Composite {\n    constructor(targetGroup, path, optionalParsedPath) {\n      const parsedPath =\n        optionalParsedPath || PropertyBinding.parseTrackName(path);\n\n      this._targetGroup = targetGroup;\n      this._bindings = targetGroup.subscribe_(path, parsedPath);\n    }\n\n    getValue(array, offset) {\n      this.bind(); // bind all binding\n\n      const firstValidIndex = this._targetGroup.nCachedObjects_,\n        binding = this._bindings[firstValidIndex];\n\n      // and only call .getValue on the first\n      if (binding !== undefined) binding.getValue(array, offset);\n    }\n\n    setValue(array, offset) {\n      const bindings = this._bindings;\n\n      for (\n        let i = this._targetGroup.nCachedObjects_, n = bindings.length;\n        i !== n;\n        ++i\n      ) {\n        bindings[i].setValue(array, offset);\n      }\n    }\n\n    bind() {\n      const bindings = this._bindings;\n\n      for (\n        let i = this._targetGroup.nCachedObjects_, n = bindings.length;\n        i !== n;\n        ++i\n      ) {\n        bindings[i].bind();\n      }\n    }\n\n    unbind() {\n      const bindings = this._bindings;\n\n      for (\n        let i = this._targetGroup.nCachedObjects_, n = bindings.length;\n        i !== n;\n        ++i\n      ) {\n        bindings[i].unbind();\n      }\n    }\n  }\n\n  // Note: This class uses a State pattern on a per-method basis:\n  // 'bind' sets 'this.getValue' / 'setValue' and shadows the\n  // prototype version of these methods with one that represents\n  // the bound state. When the property is not found, the methods\n  // become no-ops.\n  class PropertyBinding {\n    constructor(rootNode, path, parsedPath) {\n      this.path = path;\n      this.parsedPath = parsedPath || PropertyBinding.parseTrackName(path);\n\n      this.node = PropertyBinding.findNode(rootNode, this.parsedPath.nodeName);\n\n      this.rootNode = rootNode;\n\n      // initial state of these methods that calls 'bind'\n      this.getValue = this._getValue_unbound;\n      this.setValue = this._setValue_unbound;\n    }\n\n    static create(root, path, parsedPath) {\n      if (!(root && root.isAnimationObjectGroup)) {\n        return new PropertyBinding(root, path, parsedPath);\n      } else {\n        return new PropertyBinding.Composite(root, path, parsedPath);\n      }\n    }\n\n    /**\n     * Replaces spaces with underscores and removes unsupported characters from\n     * node names, to ensure compatibility with parseTrackName().\n     *\n     * @param {string} name Node name to be sanitized.\n     * @return {string}\n     */\n    static sanitizeNodeName(name) {\n      return name.replace(/\\s/g, \"_\").replace(_reservedRe, \"\");\n    }\n\n    static parseTrackName(trackName) {\n      const matches = _trackRe.exec(trackName);\n\n      if (matches === null) {\n        throw new Error(\n          \"PropertyBinding: Cannot parse trackName: \" + trackName\n        );\n      }\n\n      const results = {\n        // directoryName: matches[ 1 ], // (tschw) currently unused\n        nodeName: matches[2],\n        objectName: matches[3],\n        objectIndex: matches[4],\n        propertyName: matches[5], // required\n        propertyIndex: matches[6],\n      };\n\n      const lastDot = results.nodeName && results.nodeName.lastIndexOf(\".\");\n\n      if (lastDot !== undefined && lastDot !== -1) {\n        const objectName = results.nodeName.substring(lastDot + 1);\n\n        // Object names must be checked against an allowlist. Otherwise, there\n        // is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n        // 'bar' could be the objectName, or part of a nodeName (which can\n        // include '.' characters).\n        if (_supportedObjectNames.indexOf(objectName) !== -1) {\n          results.nodeName = results.nodeName.substring(0, lastDot);\n          results.objectName = objectName;\n        }\n      }\n\n      if (results.propertyName === null || results.propertyName.length === 0) {\n        throw new Error(\n          \"PropertyBinding: can not parse propertyName from trackName: \" +\n            trackName\n        );\n      }\n\n      return results;\n    }\n\n    static findNode(root, nodeName) {\n      if (\n        nodeName === undefined ||\n        nodeName === \"\" ||\n        nodeName === \".\" ||\n        nodeName === -1 ||\n        nodeName === root.name ||\n        nodeName === root.uuid\n      ) {\n        return root;\n      }\n\n      // search into skeleton bones.\n      if (root.skeleton) {\n        const bone = root.skeleton.getBoneByName(nodeName);\n\n        if (bone !== undefined) {\n          return bone;\n        }\n      }\n\n      // search into node subtree.\n      if (root.children) {\n        const searchNodeSubtree = function (children) {\n          for (let i = 0; i < children.length; i++) {\n            const childNode = children[i];\n\n            if (childNode.name === nodeName || childNode.uuid === nodeName) {\n              return childNode;\n            }\n\n            const result = searchNodeSubtree(childNode.children);\n\n            if (result) return result;\n          }\n\n          return null;\n        };\n\n        const subTreeNode = searchNodeSubtree(root.children);\n\n        if (subTreeNode) {\n          return subTreeNode;\n        }\n      }\n\n      return null;\n    }\n\n    // these are used to \"bind\" a nonexistent property\n    _getValue_unavailable() {}\n    _setValue_unavailable() {}\n\n    // Getters\n\n    _getValue_direct(buffer, offset) {\n      buffer[offset] = this.targetObject[this.propertyName];\n    }\n\n    _getValue_array(buffer, offset) {\n      const source = this.resolvedProperty;\n\n      for (let i = 0, n = source.length; i !== n; ++i) {\n        buffer[offset++] = source[i];\n      }\n    }\n\n    _getValue_arrayElement(buffer, offset) {\n      buffer[offset] = this.resolvedProperty[this.propertyIndex];\n    }\n\n    _getValue_toArray(buffer, offset) {\n      this.resolvedProperty.toArray(buffer, offset);\n    }\n\n    // Direct\n\n    _setValue_direct(buffer, offset) {\n      this.targetObject[this.propertyName] = buffer[offset];\n    }\n\n    _setValue_direct_setNeedsUpdate(buffer, offset) {\n      this.targetObject[this.propertyName] = buffer[offset];\n      this.targetObject.needsUpdate = true;\n    }\n\n    _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) {\n      this.targetObject[this.propertyName] = buffer[offset];\n      this.targetObject.matrixWorldNeedsUpdate = true;\n    }\n\n    // EntireArray\n\n    _setValue_array(buffer, offset) {\n      const dest = this.resolvedProperty;\n\n      for (let i = 0, n = dest.length; i !== n; ++i) {\n        dest[i] = buffer[offset++];\n      }\n    }\n\n    _setValue_array_setNeedsUpdate(buffer, offset) {\n      const dest = this.resolvedProperty;\n\n      for (let i = 0, n = dest.length; i !== n; ++i) {\n        dest[i] = buffer[offset++];\n      }\n\n      this.targetObject.needsUpdate = true;\n    }\n\n    _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) {\n      const dest = this.resolvedProperty;\n\n      for (let i = 0, n = dest.length; i !== n; ++i) {\n        dest[i] = buffer[offset++];\n      }\n\n      this.targetObject.matrixWorldNeedsUpdate = true;\n    }\n\n    // ArrayElement\n\n    _setValue_arrayElement(buffer, offset) {\n      this.resolvedProperty[this.propertyIndex] = buffer[offset];\n    }\n\n    _setValue_arrayElement_setNeedsUpdate(buffer, offset) {\n      this.resolvedProperty[this.propertyIndex] = buffer[offset];\n      this.targetObject.needsUpdate = true;\n    }\n\n    _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) {\n      this.resolvedProperty[this.propertyIndex] = buffer[offset];\n      this.targetObject.matrixWorldNeedsUpdate = true;\n    }\n\n    // HasToFromArray\n\n    _setValue_fromArray(buffer, offset) {\n      this.resolvedProperty.fromArray(buffer, offset);\n    }\n\n    _setValue_fromArray_setNeedsUpdate(buffer, offset) {\n      this.resolvedProperty.fromArray(buffer, offset);\n      this.targetObject.needsUpdate = true;\n    }\n\n    _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) {\n      this.resolvedProperty.fromArray(buffer, offset);\n      this.targetObject.matrixWorldNeedsUpdate = true;\n    }\n\n    _getValue_unbound(targetArray, offset) {\n      this.bind();\n      this.getValue(targetArray, offset);\n    }\n\n    _setValue_unbound(sourceArray, offset) {\n      this.bind();\n      this.setValue(sourceArray, offset);\n    }\n\n    // create getter / setter pair for a property in the scene graph\n    bind() {\n      let targetObject = this.node;\n      const parsedPath = this.parsedPath;\n\n      const objectName = parsedPath.objectName;\n      const propertyName = parsedPath.propertyName;\n      let propertyIndex = parsedPath.propertyIndex;\n\n      if (!targetObject) {\n        targetObject = PropertyBinding.findNode(\n          this.rootNode,\n          parsedPath.nodeName\n        );\n\n        this.node = targetObject;\n      }\n\n      // set fail state so we can just 'return' on error\n      this.getValue = this._getValue_unavailable;\n      this.setValue = this._setValue_unavailable;\n\n      // ensure there is a value node\n      if (!targetObject) {\n        console.warn(\n          \"THREE.PropertyBinding: No target node found for track: \" +\n            this.path +\n            \".\"\n        );\n        return;\n      }\n\n      if (objectName) {\n        let objectIndex = parsedPath.objectIndex;\n\n        // special cases were we need to reach deeper into the hierarchy to get the face materials....\n        switch (objectName) {\n          case \"materials\":\n            if (!targetObject.material) {\n              console.error(\n                \"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",\n                this\n              );\n              return;\n            }\n\n            if (!targetObject.material.materials) {\n              console.error(\n                \"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\",\n                this\n              );\n              return;\n            }\n\n            targetObject = targetObject.material.materials;\n\n            break;\n\n          case \"bones\":\n            if (!targetObject.skeleton) {\n              console.error(\n                \"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\",\n                this\n              );\n              return;\n            }\n\n            // potential future optimization: skip this if propertyIndex is already an integer\n            // and convert the integer string to a true integer.\n\n            targetObject = targetObject.skeleton.bones;\n\n            // support resolving morphTarget names into indices.\n            for (let i = 0; i < targetObject.length; i++) {\n              if (targetObject[i].name === objectIndex) {\n                objectIndex = i;\n                break;\n              }\n            }\n\n            break;\n\n          case \"map\":\n            if (\"map\" in targetObject) {\n              targetObject = targetObject.map;\n              break;\n            }\n\n            if (!targetObject.material) {\n              console.error(\n                \"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",\n                this\n              );\n              return;\n            }\n\n            if (!targetObject.material.map) {\n              console.error(\n                \"THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.\",\n                this\n              );\n              return;\n            }\n\n            targetObject = targetObject.material.map;\n            break;\n\n          default:\n            if (targetObject[objectName] === undefined) {\n              console.error(\n                \"THREE.PropertyBinding: Can not bind to objectName of node undefined.\",\n                this\n              );\n              return;\n            }\n\n            targetObject = targetObject[objectName];\n        }\n\n        if (objectIndex !== undefined) {\n          if (targetObject[objectIndex] === undefined) {\n            console.error(\n              \"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\",\n              this,\n              targetObject\n            );\n            return;\n          }\n\n          targetObject = targetObject[objectIndex];\n        }\n      }\n\n      // resolve property\n      const nodeProperty = targetObject[propertyName];\n\n      if (nodeProperty === undefined) {\n        const nodeName = parsedPath.nodeName;\n\n        console.error(\n          \"THREE.PropertyBinding: Trying to update property for track: \" +\n            nodeName +\n            \".\" +\n            propertyName +\n            \" but it wasn't found.\",\n          targetObject\n        );\n        return;\n      }\n\n      // determine versioning scheme\n      let versioning = this.Versioning.None;\n\n      this.targetObject = targetObject;\n\n      if (targetObject.needsUpdate !== undefined) {\n        // material\n\n        versioning = this.Versioning.NeedsUpdate;\n      } else if (targetObject.matrixWorldNeedsUpdate !== undefined) {\n        // node transform\n\n        versioning = this.Versioning.MatrixWorldNeedsUpdate;\n      }\n\n      // determine how the property gets bound\n      let bindingType = this.BindingType.Direct;\n\n      if (propertyIndex !== undefined) {\n        // access a sub element of the property array (only primitives are supported right now)\n\n        if (propertyName === \"morphTargetInfluences\") {\n          // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n          // support resolving morphTarget names into indices.\n          if (!targetObject.geometry) {\n            console.error(\n              \"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\",\n              this\n            );\n            return;\n          }\n\n          if (!targetObject.geometry.morphAttributes) {\n            console.error(\n              \"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\",\n              this\n            );\n            return;\n          }\n\n          if (targetObject.morphTargetDictionary[propertyIndex] !== undefined) {\n            propertyIndex = targetObject.morphTargetDictionary[propertyIndex];\n          }\n        }\n\n        bindingType = this.BindingType.ArrayElement;\n\n        this.resolvedProperty = nodeProperty;\n        this.propertyIndex = propertyIndex;\n      } else if (\n        nodeProperty.fromArray !== undefined &&\n        nodeProperty.toArray !== undefined\n      ) {\n        // must use copy for Object3D.Euler/Quaternion\n\n        bindingType = this.BindingType.HasFromToArray;\n\n        this.resolvedProperty = nodeProperty;\n      } else if (Array.isArray(nodeProperty)) {\n        bindingType = this.BindingType.EntireArray;\n\n        this.resolvedProperty = nodeProperty;\n      } else {\n        this.propertyName = propertyName;\n      }\n\n      // select getter / setter\n      this.getValue = this.GetterByBindingType[bindingType];\n      this.setValue =\n        this.SetterByBindingTypeAndVersioning[bindingType][versioning];\n    }\n\n    unbind() {\n      this.node = null;\n\n      // back to the prototype version of getValue / setValue\n      // note: avoiding to mutate the shape of 'this' via 'delete'\n      this.getValue = this._getValue_unbound;\n      this.setValue = this._setValue_unbound;\n    }\n  }\n\n  PropertyBinding.Composite = Composite;\n\n  PropertyBinding.prototype.BindingType = {\n    Direct: 0,\n    EntireArray: 1,\n    ArrayElement: 2,\n    HasFromToArray: 3,\n  };\n\n  PropertyBinding.prototype.Versioning = {\n    None: 0,\n    NeedsUpdate: 1,\n    MatrixWorldNeedsUpdate: 2,\n  };\n\n  PropertyBinding.prototype.GetterByBindingType = [\n    PropertyBinding.prototype._getValue_direct,\n    PropertyBinding.prototype._getValue_array,\n    PropertyBinding.prototype._getValue_arrayElement,\n    PropertyBinding.prototype._getValue_toArray,\n  ];\n\n  PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n    [\n      // Direct\n      PropertyBinding.prototype._setValue_direct,\n      PropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n      PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n    ],\n    [\n      // EntireArray\n\n      PropertyBinding.prototype._setValue_array,\n      PropertyBinding.prototype._setValue_array_setNeedsUpdate,\n      PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n    ],\n    [\n      // ArrayElement\n      PropertyBinding.prototype._setValue_arrayElement,\n      PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n      PropertyBinding.prototype\n        ._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n    ],\n    [\n      // HasToFromArray\n      PropertyBinding.prototype._setValue_fromArray,\n      PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n      PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n    ],\n  ];\n\n  if (typeof __THREE_DEVTOOLS__ !== \"undefined\") {\n    __THREE_DEVTOOLS__.dispatchEvent(\n      new CustomEvent(\"register\", {\n        detail: {\n          revision: REVISION,\n        },\n      })\n    );\n  }\n\n  if (typeof window !== \"undefined\") {\n    if (window.__THREE__) {\n      console.warn(\"WARNING: Multiple instances of Three.js being imported.\");\n    } else {\n      window.__THREE__ = REVISION;\n    }\n  }\n\n  const three_module = /*#__PURE__*/ Object.freeze(\n    /*#__PURE__*/ Object.defineProperty(\n      {\n        __proto__: null,\n        AddEquation,\n        AlwaysStencilFunc,\n        AnimationClip,\n        BackSide,\n        Bone,\n        BooleanKeyframeTrack,\n        Box3,\n        BufferAttribute,\n        BufferGeometry,\n        Cache,\n        Camera,\n        ClampToEdgeWrapping,\n        Color,\n        ColorKeyframeTrack,\n        ColorManagement,\n        CubicInterpolant,\n        DataTexture,\n        DefaultLoadingManager,\n        DirectionalLight,\n        DiscreteInterpolant,\n        DisplayP3ColorSpace,\n        DoubleSide,\n        Euler,\n        EventDispatcher,\n        FileLoader,\n        Float32BufferAttribute,\n        FloatType,\n        FrontSide,\n        Frustum,\n        Group,\n        ImageBitmapLoader,\n        ImageLoader,\n        ImageUtils,\n        InstancedBufferAttribute,\n        InstancedMesh,\n        InterleavedBuffer,\n        InterleavedBufferAttribute,\n        Interpolant,\n        InterpolateDiscrete,\n        InterpolateLinear,\n        InterpolateSmooth,\n        KeepStencilOp,\n        KeyframeTrack,\n        Layers,\n        LessEqualDepth,\n        Light,\n        Line,\n        LineBasicMaterial,\n        LineLoop,\n        LineSegments,\n        LinearEncoding,\n        LinearFilter,\n        LinearInterpolant,\n        LinearMipmapLinearFilter,\n        LinearMipmapNearestFilter,\n        LinearSRGBColorSpace,\n        Loader,\n        LoaderUtils,\n        LoadingManager,\n        Material,\n        MathUtils,\n        Matrix3,\n        Matrix4,\n        Mesh,\n        MeshBasicMaterial,\n        MeshPhysicalMaterial,\n        MeshStandardMaterial,\n        MirroredRepeatWrapping,\n        MultiplyOperation,\n        NearestFilter,\n        NearestMipmapLinearFilter,\n        NearestMipmapNearestFilter,\n        NoColorSpace,\n        NormalAnimationBlendMode,\n        NormalBlending,\n        NumberKeyframeTrack,\n        Object3D,\n        OneMinusSrcAlphaFactor,\n        OrthographicCamera,\n        PerspectiveCamera,\n        Plane,\n        PointLight,\n        Points,\n        PointsMaterial,\n        PropertyBinding,\n        Quaternion,\n        QuaternionKeyframeTrack,\n        QuaternionLinearInterpolant,\n        REVISION,\n        RGBAFormat,\n        Ray,\n        RepeatWrapping,\n        SRGBColorSpace,\n        Skeleton,\n        SkinnedMesh,\n        Source,\n        Sphere,\n        SpotLight,\n        SrcAlphaFactor,\n        StaticDrawUsage,\n        StringKeyframeTrack,\n        TangentSpaceNormalMap,\n        Texture,\n        TextureLoader,\n        Triangle,\n        TriangleFanDrawMode,\n        TriangleStripDrawMode,\n        TrianglesDrawMode,\n        UVMapping,\n        Uint16BufferAttribute,\n        Uint32BufferAttribute,\n        UnsignedByteType,\n        Vector2,\n        Vector3,\n        Vector4,\n        VectorKeyframeTrack,\n        WebGLCoordinateSystem,\n        WebGPUCoordinateSystem,\n        WrapAroundEnding,\n        ZeroCurvatureEnding,\n        ZeroSlopeEnding,\n        sRGBEncoding,\n      },\n      Symbol.toStringTag,\n      { value: \"Module\" }\n    )\n  );\n\n  /**\n   * @param {BufferGeometry} geometry\n   * @param {number} drawMode\n   * @return {BufferGeometry}\n   */\n  function toTrianglesDrawMode(geometry, drawMode) {\n    if (drawMode === TrianglesDrawMode) {\n      console.warn(\n        \"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.\"\n      );\n      return geometry;\n    }\n\n    if (\n      drawMode === TriangleFanDrawMode ||\n      drawMode === TriangleStripDrawMode\n    ) {\n      let index = geometry.getIndex();\n\n      // generate index if not present\n\n      if (index === null) {\n        const indices = [];\n\n        const position = geometry.getAttribute(\"position\");\n\n        if (position !== undefined) {\n          for (let i = 0; i < position.count; i++) {\n            indices.push(i);\n          }\n\n          geometry.setIndex(indices);\n          index = geometry.getIndex();\n        } else {\n          console.error(\n            \"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.\"\n          );\n          return geometry;\n        }\n      }\n\n      //\n\n      const numberOfTriangles = index.count - 2;\n      const newIndices = [];\n\n      if (drawMode === TriangleFanDrawMode) {\n        // gl.TRIANGLE_FAN\n\n        for (let i = 1; i <= numberOfTriangles; i++) {\n          newIndices.push(index.getX(0));\n          newIndices.push(index.getX(i));\n          newIndices.push(index.getX(i + 1));\n        }\n      } else {\n        // gl.TRIANGLE_STRIP\n\n        for (let i = 0; i < numberOfTriangles; i++) {\n          if (i % 2 === 0) {\n            newIndices.push(index.getX(i));\n            newIndices.push(index.getX(i + 1));\n            newIndices.push(index.getX(i + 2));\n          } else {\n            newIndices.push(index.getX(i + 2));\n            newIndices.push(index.getX(i + 1));\n            newIndices.push(index.getX(i));\n          }\n        }\n      }\n\n      if (newIndices.length / 3 !== numberOfTriangles) {\n        console.error(\n          \"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.\"\n        );\n      }\n\n      // build final geometry\n\n      const newGeometry = geometry.clone();\n      newGeometry.setIndex(newIndices);\n      newGeometry.clearGroups();\n\n      return newGeometry;\n    } else {\n      console.error(\n        \"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:\",\n        drawMode\n      );\n      return geometry;\n    }\n  }\n\n  class GLTFLoader extends Loader {\n    constructor(manager) {\n      super(manager);\n\n      this.dracoLoader = null;\n      this.ktx2Loader = null;\n      this.meshoptDecoder = null;\n\n      this.pluginCallbacks = [];\n\n      this.register(function (parser) {\n        return new GLTFMaterialsClearcoatExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFTextureBasisUExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFTextureWebPExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFTextureAVIFExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsSheenExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsTransmissionExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsVolumeExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsIorExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsEmissiveStrengthExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsSpecularExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsIridescenceExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMaterialsAnisotropyExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFLightsExtension(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMeshoptCompression(parser);\n      });\n\n      this.register(function (parser) {\n        return new GLTFMeshGpuInstancing(parser);\n      });\n    }\n\n    load(url, onLoad, onProgress, onError) {\n      const scope = this;\n\n      let resourcePath;\n\n      if (this.resourcePath !== \"\") {\n        resourcePath = this.resourcePath;\n      } else if (this.path !== \"\") {\n        resourcePath = this.path;\n      } else {\n        resourcePath = LoaderUtils.extractUrlBase(url);\n      }\n\n      // Tells the LoadingManager to track an extra item, which resolves after\n      // the model is fully loaded. This means the count of items loaded will\n      // be incorrect, but ensures manager.onLoad() does not fire early.\n      this.manager.itemStart(url);\n\n      const _onError = function (e) {\n        if (onError) {\n          onError(e);\n        } else {\n          console.error(e);\n        }\n\n        scope.manager.itemError(url);\n        scope.manager.itemEnd(url);\n      };\n\n      const loader = new FileLoader(this.manager);\n\n      loader.setPath(this.path);\n      loader.setResponseType(\"arraybuffer\");\n      loader.setRequestHeader(this.requestHeader);\n      loader.setWithCredentials(this.withCredentials);\n\n      loader.load(\n        url,\n        function (data) {\n          try {\n            scope.parse(\n              data,\n              resourcePath,\n              function (gltf) {\n                onLoad(gltf);\n\n                scope.manager.itemEnd(url);\n              },\n              _onError\n            );\n          } catch (e) {\n            _onError(e);\n          }\n        },\n        onProgress,\n        _onError\n      );\n    }\n\n    setDRACOLoader(dracoLoader) {\n      this.dracoLoader = dracoLoader;\n      return this;\n    }\n\n    setDDSLoader() {\n      throw new Error(\n        'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n      );\n    }\n\n    setKTX2Loader(ktx2Loader) {\n      this.ktx2Loader = ktx2Loader;\n      return this;\n    }\n\n    setMeshoptDecoder(meshoptDecoder) {\n      this.meshoptDecoder = meshoptDecoder;\n      return this;\n    }\n\n    register(callback) {\n      if (this.pluginCallbacks.indexOf(callback) === -1) {\n        this.pluginCallbacks.push(callback);\n      }\n\n      return this;\n    }\n\n    unregister(callback) {\n      if (this.pluginCallbacks.indexOf(callback) !== -1) {\n        this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);\n      }\n\n      return this;\n    }\n\n    parse(data, path, onLoad, onError) {\n      let json;\n      const extensions = {};\n      const plugins = {};\n      const textDecoder = new TextDecoder();\n\n      if (typeof data === \"string\") {\n        json = JSON.parse(data);\n      } else if (data instanceof ArrayBuffer) {\n        const magic = textDecoder.decode(new Uint8Array(data, 0, 4));\n\n        if (magic === BINARY_EXTENSION_HEADER_MAGIC) {\n          try {\n            extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(\n              data\n            );\n          } catch (error) {\n            if (onError) onError(error);\n            return;\n          }\n\n          json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content);\n        } else {\n          json = JSON.parse(textDecoder.decode(data));\n        }\n      } else {\n        json = data;\n      }\n\n      if (json.asset === undefined || json.asset.version[0] < 2) {\n        if (onError)\n          onError(\n            new Error(\n              \"THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.\"\n            )\n          );\n        return;\n      }\n\n      const parser = new GLTFParser(json, {\n        path: path || this.resourcePath || \"\",\n        crossOrigin: this.crossOrigin,\n        requestHeader: this.requestHeader,\n        manager: this.manager,\n        ktx2Loader: this.ktx2Loader,\n        meshoptDecoder: this.meshoptDecoder,\n      });\n\n      parser.fileLoader.setRequestHeader(this.requestHeader);\n\n      for (let i = 0; i < this.pluginCallbacks.length; i++) {\n        const plugin = this.pluginCallbacks[i](parser);\n        plugins[plugin.name] = plugin;\n\n        // Workaround to avoid determining as unknown extension\n        // in addUnknownExtensionsToUserData().\n        // Remove this workaround if we move all the existing\n        // extension handlers to plugin system\n        extensions[plugin.name] = true;\n      }\n\n      if (json.extensionsUsed) {\n        for (let i = 0; i < json.extensionsUsed.length; ++i) {\n          const extensionName = json.extensionsUsed[i];\n          const extensionsRequired = json.extensionsRequired || [];\n\n          switch (extensionName) {\n            case EXTENSIONS.KHR_MATERIALS_UNLIT:\n              extensions[extensionName] = new GLTFMaterialsUnlitExtension();\n              break;\n\n            case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n              extensions[extensionName] = new GLTFDracoMeshCompressionExtension(\n                json,\n                this.dracoLoader\n              );\n              break;\n\n            case EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n              extensions[extensionName] = new GLTFTextureTransformExtension();\n              break;\n\n            case EXTENSIONS.KHR_MESH_QUANTIZATION:\n              extensions[extensionName] = new GLTFMeshQuantizationExtension();\n              break;\n\n            default:\n              if (\n                extensionsRequired.indexOf(extensionName) >= 0 &&\n                plugins[extensionName] === undefined\n              ) {\n                console.warn(\n                  'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".'\n                );\n              }\n          }\n        }\n      }\n\n      parser.setExtensions(extensions);\n      parser.setPlugins(plugins);\n      parser.parse(onLoad, onError);\n    }\n\n    parseAsync(data, path) {\n      const scope = this;\n\n      return new Promise(function (resolve, reject) {\n        scope.parse(data, path, resolve, reject);\n      });\n    }\n  }\n\n  /* GLTFREGISTRY */\n\n  function GLTFRegistry() {\n    let objects = {};\n\n    return {\n      get: function (key) {\n        return objects[key];\n      },\n\n      add: function (key, object) {\n        objects[key] = object;\n      },\n\n      remove: function (key) {\n        delete objects[key];\n      },\n\n      removeAll: function () {\n        objects = {};\n      },\n    };\n  }\n\n  /*********************************/\n  /********** EXTENSIONS ***********/\n  /*********************************/\n\n  const EXTENSIONS = {\n    KHR_BINARY_GLTF: \"KHR_binary_glTF\",\n    KHR_DRACO_MESH_COMPRESSION: \"KHR_draco_mesh_compression\",\n    KHR_LIGHTS_PUNCTUAL: \"KHR_lights_punctual\",\n    KHR_MATERIALS_CLEARCOAT: \"KHR_materials_clearcoat\",\n    KHR_MATERIALS_IOR: \"KHR_materials_ior\",\n    KHR_MATERIALS_SHEEN: \"KHR_materials_sheen\",\n    KHR_MATERIALS_SPECULAR: \"KHR_materials_specular\",\n    KHR_MATERIALS_TRANSMISSION: \"KHR_materials_transmission\",\n    KHR_MATERIALS_IRIDESCENCE: \"KHR_materials_iridescence\",\n    KHR_MATERIALS_ANISOTROPY: \"KHR_materials_anisotropy\",\n    KHR_MATERIALS_UNLIT: \"KHR_materials_unlit\",\n    KHR_MATERIALS_VOLUME: \"KHR_materials_volume\",\n    KHR_TEXTURE_BASISU: \"KHR_texture_basisu\",\n    KHR_TEXTURE_TRANSFORM: \"KHR_texture_transform\",\n    KHR_MESH_QUANTIZATION: \"KHR_mesh_quantization\",\n    KHR_MATERIALS_EMISSIVE_STRENGTH: \"KHR_materials_emissive_strength\",\n    EXT_TEXTURE_WEBP: \"EXT_texture_webp\",\n    EXT_TEXTURE_AVIF: \"EXT_texture_avif\",\n    EXT_MESHOPT_COMPRESSION: \"EXT_meshopt_compression\",\n    EXT_MESH_GPU_INSTANCING: \"EXT_mesh_gpu_instancing\",\n  };\n\n  /**\n   * Punctual Lights Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n   */\n  class GLTFLightsExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n      // Object3D instance caches\n      this.cache = { refs: {}, uses: {} };\n    }\n\n    _markDefs() {\n      const parser = this.parser;\n      const nodeDefs = this.parser.json.nodes || [];\n\n      for (\n        let nodeIndex = 0, nodeLength = nodeDefs.length;\n        nodeIndex < nodeLength;\n        nodeIndex++\n      ) {\n        const nodeDef = nodeDefs[nodeIndex];\n\n        if (\n          nodeDef.extensions &&\n          nodeDef.extensions[this.name] &&\n          nodeDef.extensions[this.name].light !== undefined\n        ) {\n          parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light);\n        }\n      }\n    }\n\n    _loadLight(lightIndex) {\n      const parser = this.parser;\n      const cacheKey = \"light:\" + lightIndex;\n      let dependency = parser.cache.get(cacheKey);\n\n      if (dependency) return dependency;\n\n      const json = parser.json;\n      const extensions = (json.extensions && json.extensions[this.name]) || {};\n      const lightDefs = extensions.lights || [];\n      const lightDef = lightDefs[lightIndex];\n      let lightNode;\n\n      const color = new Color(0xffffff);\n\n      if (lightDef.color !== undefined) color.fromArray(lightDef.color);\n\n      const range = lightDef.range !== undefined ? lightDef.range : 0;\n\n      switch (lightDef.type) {\n        case \"directional\":\n          lightNode = new DirectionalLight(color);\n          lightNode.target.position.set(0, 0, -1);\n          lightNode.add(lightNode.target);\n          break;\n\n        case \"point\":\n          lightNode = new PointLight(color);\n          lightNode.distance = range;\n          break;\n\n        case \"spot\":\n          lightNode = new SpotLight(color);\n          lightNode.distance = range;\n          // Handle spotlight properties.\n          lightDef.spot = lightDef.spot || {};\n          lightDef.spot.innerConeAngle =\n            lightDef.spot.innerConeAngle !== undefined\n              ? lightDef.spot.innerConeAngle\n              : 0;\n          lightDef.spot.outerConeAngle =\n            lightDef.spot.outerConeAngle !== undefined\n              ? lightDef.spot.outerConeAngle\n              : Math.PI / 4.0;\n          lightNode.angle = lightDef.spot.outerConeAngle;\n          lightNode.penumbra =\n            1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n          lightNode.target.position.set(0, 0, -1);\n          lightNode.add(lightNode.target);\n          break;\n\n        default:\n          throw new Error(\n            \"THREE.GLTFLoader: Unexpected light type: \" + lightDef.type\n          );\n      }\n\n      // Some lights (e.g. spot) default to a position other than the origin. Reset the position\n      // here, because node-level parsing will only override position if explicitly specified.\n      lightNode.position.set(0, 0, 0);\n\n      lightNode.decay = 2;\n\n      assignExtrasToUserData(lightNode, lightDef);\n\n      if (lightDef.intensity !== undefined)\n        lightNode.intensity = lightDef.intensity;\n\n      lightNode.name = parser.createUniqueName(\n        lightDef.name || \"light_\" + lightIndex\n      );\n\n      dependency = Promise.resolve(lightNode);\n\n      parser.cache.add(cacheKey, dependency);\n\n      return dependency;\n    }\n\n    getDependency(type, index) {\n      if (type !== \"light\") return;\n\n      return this._loadLight(index);\n    }\n\n    createNodeAttachment(nodeIndex) {\n      const self = this;\n      const parser = this.parser;\n      const json = parser.json;\n      const nodeDef = json.nodes[nodeIndex];\n      const lightDef =\n        (nodeDef.extensions && nodeDef.extensions[this.name]) || {};\n      const lightIndex = lightDef.light;\n\n      if (lightIndex === undefined) return null;\n\n      return this._loadLight(lightIndex).then(function (light) {\n        return parser._getNodeRef(self.cache, lightIndex, light);\n      });\n    }\n  }\n\n  /**\n   * Unlit Materials Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n   */\n  class GLTFMaterialsUnlitExtension {\n    constructor() {\n      this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n    }\n\n    getMaterialType() {\n      return MeshBasicMaterial;\n    }\n\n    extendParams(materialParams, materialDef, parser) {\n      const pending = [];\n\n      materialParams.color = new Color(1.0, 1.0, 1.0);\n      materialParams.opacity = 1.0;\n\n      const metallicRoughness = materialDef.pbrMetallicRoughness;\n\n      if (metallicRoughness) {\n        if (Array.isArray(metallicRoughness.baseColorFactor)) {\n          const array = metallicRoughness.baseColorFactor;\n\n          materialParams.color.fromArray(array);\n          materialParams.opacity = array[3];\n        }\n\n        if (metallicRoughness.baseColorTexture !== undefined) {\n          pending.push(\n            parser.assignTexture(\n              materialParams,\n              \"map\",\n              metallicRoughness.baseColorTexture,\n              SRGBColorSpace\n            )\n          );\n        }\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Materials Emissive Strength Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n   */\n  class GLTFMaterialsEmissiveStrengthExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const emissiveStrength =\n        materialDef.extensions[this.name].emissiveStrength;\n\n      if (emissiveStrength !== undefined) {\n        materialParams.emissiveIntensity = emissiveStrength;\n      }\n\n      return Promise.resolve();\n    }\n  }\n\n  /**\n   * Clearcoat Materials Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n   */\n  class GLTFMaterialsClearcoatExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      const extension = materialDef.extensions[this.name];\n\n      if (extension.clearcoatFactor !== undefined) {\n        materialParams.clearcoat = extension.clearcoatFactor;\n      }\n\n      if (extension.clearcoatTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"clearcoatMap\",\n            extension.clearcoatTexture\n          )\n        );\n      }\n\n      if (extension.clearcoatRoughnessFactor !== undefined) {\n        materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n      }\n\n      if (extension.clearcoatRoughnessTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"clearcoatRoughnessMap\",\n            extension.clearcoatRoughnessTexture\n          )\n        );\n      }\n\n      if (extension.clearcoatNormalTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"clearcoatNormalMap\",\n            extension.clearcoatNormalTexture\n          )\n        );\n\n        if (extension.clearcoatNormalTexture.scale !== undefined) {\n          const scale = extension.clearcoatNormalTexture.scale;\n\n          materialParams.clearcoatNormalScale = new Vector2(scale, scale);\n        }\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Iridescence Materials Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n   */\n  class GLTFMaterialsIridescenceExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      const extension = materialDef.extensions[this.name];\n\n      if (extension.iridescenceFactor !== undefined) {\n        materialParams.iridescence = extension.iridescenceFactor;\n      }\n\n      if (extension.iridescenceTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"iridescenceMap\",\n            extension.iridescenceTexture\n          )\n        );\n      }\n\n      if (extension.iridescenceIor !== undefined) {\n        materialParams.iridescenceIOR = extension.iridescenceIor;\n      }\n\n      if (materialParams.iridescenceThicknessRange === undefined) {\n        materialParams.iridescenceThicknessRange = [100, 400];\n      }\n\n      if (extension.iridescenceThicknessMinimum !== undefined) {\n        materialParams.iridescenceThicknessRange[0] =\n          extension.iridescenceThicknessMinimum;\n      }\n\n      if (extension.iridescenceThicknessMaximum !== undefined) {\n        materialParams.iridescenceThicknessRange[1] =\n          extension.iridescenceThicknessMaximum;\n      }\n\n      if (extension.iridescenceThicknessTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"iridescenceThicknessMap\",\n            extension.iridescenceThicknessTexture\n          )\n        );\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Sheen Materials Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n   */\n  class GLTFMaterialsSheenExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      materialParams.sheenColor = new Color(0, 0, 0);\n      materialParams.sheenRoughness = 0;\n      materialParams.sheen = 1;\n\n      const extension = materialDef.extensions[this.name];\n\n      if (extension.sheenColorFactor !== undefined) {\n        materialParams.sheenColor.fromArray(extension.sheenColorFactor);\n      }\n\n      if (extension.sheenRoughnessFactor !== undefined) {\n        materialParams.sheenRoughness = extension.sheenRoughnessFactor;\n      }\n\n      if (extension.sheenColorTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"sheenColorMap\",\n            extension.sheenColorTexture,\n            SRGBColorSpace\n          )\n        );\n      }\n\n      if (extension.sheenRoughnessTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"sheenRoughnessMap\",\n            extension.sheenRoughnessTexture\n          )\n        );\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Transmission Materials Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n   * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n   */\n  class GLTFMaterialsTransmissionExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      const extension = materialDef.extensions[this.name];\n\n      if (extension.transmissionFactor !== undefined) {\n        materialParams.transmission = extension.transmissionFactor;\n      }\n\n      if (extension.transmissionTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"transmissionMap\",\n            extension.transmissionTexture\n          )\n        );\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Materials Volume Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n   */\n  class GLTFMaterialsVolumeExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      const extension = materialDef.extensions[this.name];\n\n      materialParams.thickness =\n        extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n      if (extension.thicknessTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"thicknessMap\",\n            extension.thicknessTexture\n          )\n        );\n      }\n\n      materialParams.attenuationDistance =\n        extension.attenuationDistance || Infinity;\n\n      const colorArray = extension.attenuationColor || [1, 1, 1];\n      materialParams.attenuationColor = new Color(\n        colorArray[0],\n        colorArray[1],\n        colorArray[2]\n      );\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Materials ior Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n   */\n  class GLTFMaterialsIorExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_IOR;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const extension = materialDef.extensions[this.name];\n\n      materialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n      return Promise.resolve();\n    }\n  }\n\n  /**\n   * Materials specular Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n   */\n  class GLTFMaterialsSpecularExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      const extension = materialDef.extensions[this.name];\n\n      materialParams.specularIntensity =\n        extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n      if (extension.specularTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"specularIntensityMap\",\n            extension.specularTexture\n          )\n        );\n      }\n\n      const colorArray = extension.specularColorFactor || [1, 1, 1];\n      materialParams.specularColor = new Color(\n        colorArray[0],\n        colorArray[1],\n        colorArray[2]\n      );\n\n      if (extension.specularColorTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"specularColorMap\",\n            extension.specularColorTexture,\n            SRGBColorSpace\n          )\n        );\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * Materials anisotropy Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n   */\n  class GLTFMaterialsAnisotropyExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n    }\n\n    getMaterialType(materialIndex) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name])\n        return null;\n\n      return MeshPhysicalMaterial;\n    }\n\n    extendMaterialParams(materialIndex, materialParams) {\n      const parser = this.parser;\n      const materialDef = parser.json.materials[materialIndex];\n\n      if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n        return Promise.resolve();\n      }\n\n      const pending = [];\n\n      const extension = materialDef.extensions[this.name];\n\n      if (extension.anisotropyStrength !== undefined) {\n        materialParams.anisotropy = extension.anisotropyStrength;\n      }\n\n      if (extension.anisotropyRotation !== undefined) {\n        materialParams.anisotropyRotation = extension.anisotropyRotation;\n      }\n\n      if (extension.anisotropyTexture !== undefined) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"anisotropyMap\",\n            extension.anisotropyTexture\n          )\n        );\n      }\n\n      return Promise.all(pending);\n    }\n  }\n\n  /**\n   * BasisU Texture Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n   */\n  class GLTFTextureBasisUExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n    }\n\n    loadTexture(textureIndex) {\n      const parser = this.parser;\n      const json = parser.json;\n\n      const textureDef = json.textures[textureIndex];\n\n      if (!textureDef.extensions || !textureDef.extensions[this.name]) {\n        return null;\n      }\n\n      const extension = textureDef.extensions[this.name];\n      const loader = parser.options.ktx2Loader;\n\n      if (!loader) {\n        if (\n          json.extensionsRequired &&\n          json.extensionsRequired.indexOf(this.name) >= 0\n        ) {\n          throw new Error(\n            \"THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures\"\n          );\n        } else {\n          // Assumes that the extension is optional and that a fallback texture is present\n          return null;\n        }\n      }\n\n      return parser.loadTextureImage(textureIndex, extension.source, loader);\n    }\n  }\n\n  /**\n   * WebP Texture Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n   */\n  class GLTFTextureWebPExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n      this.isSupported = null;\n    }\n\n    loadTexture(textureIndex) {\n      const name = this.name;\n      const parser = this.parser;\n      const json = parser.json;\n\n      const textureDef = json.textures[textureIndex];\n\n      if (!textureDef.extensions || !textureDef.extensions[name]) {\n        return null;\n      }\n\n      const extension = textureDef.extensions[name];\n      const source = json.images[extension.source];\n\n      let loader = parser.textureLoader;\n      if (source.uri) {\n        const handler = parser.options.manager.getHandler(source.uri);\n        if (handler !== null) loader = handler;\n      }\n\n      return this.detectSupport().then(function (isSupported) {\n        if (isSupported)\n          return parser.loadTextureImage(\n            textureIndex,\n            extension.source,\n            loader\n          );\n\n        if (\n          json.extensionsRequired &&\n          json.extensionsRequired.indexOf(name) >= 0\n        ) {\n          throw new Error(\n            \"THREE.GLTFLoader: WebP required by asset but unsupported.\"\n          );\n        }\n\n        // Fall back to PNG or JPEG.\n        return parser.loadTexture(textureIndex);\n      });\n    }\n\n    detectSupport() {\n      if (!this.isSupported) {\n        this.isSupported = new Promise(function (resolve) {\n          const image = new Image();\n\n          // Lossy test image. Support for lossy images doesn't guarantee support for all\n          // WebP images, unfortunately.\n          image.src =\n            \"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\";\n\n          image.onload = image.onerror = function () {\n            resolve(image.height === 1);\n          };\n        });\n      }\n\n      return this.isSupported;\n    }\n  }\n\n  /**\n   * AVIF Texture Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n   */\n  class GLTFTextureAVIFExtension {\n    constructor(parser) {\n      this.parser = parser;\n      this.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n      this.isSupported = null;\n    }\n\n    loadTexture(textureIndex) {\n      const name = this.name;\n      const parser = this.parser;\n      const json = parser.json;\n\n      const textureDef = json.textures[textureIndex];\n\n      if (!textureDef.extensions || !textureDef.extensions[name]) {\n        return null;\n      }\n\n      const extension = textureDef.extensions[name];\n      const source = json.images[extension.source];\n\n      let loader = parser.textureLoader;\n      if (source.uri) {\n        const handler = parser.options.manager.getHandler(source.uri);\n        if (handler !== null) loader = handler;\n      }\n\n      return this.detectSupport().then(function (isSupported) {\n        if (isSupported)\n          return parser.loadTextureImage(\n            textureIndex,\n            extension.source,\n            loader\n          );\n\n        if (\n          json.extensionsRequired &&\n          json.extensionsRequired.indexOf(name) >= 0\n        ) {\n          throw new Error(\n            \"THREE.GLTFLoader: AVIF required by asset but unsupported.\"\n          );\n        }\n\n        // Fall back to PNG or JPEG.\n        return parser.loadTexture(textureIndex);\n      });\n    }\n\n    detectSupport() {\n      if (!this.isSupported) {\n        this.isSupported = new Promise(function (resolve) {\n          const image = new Image();\n\n          // Lossy test image.\n          image.src =\n            \"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\";\n          image.onload = image.onerror = function () {\n            resolve(image.height === 1);\n          };\n        });\n      }\n\n      return this.isSupported;\n    }\n  }\n\n  /**\n   * meshopt BufferView Compression Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n   */\n  class GLTFMeshoptCompression {\n    constructor(parser) {\n      this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n      this.parser = parser;\n    }\n\n    loadBufferView(index) {\n      const json = this.parser.json;\n      const bufferView = json.bufferViews[index];\n\n      if (bufferView.extensions && bufferView.extensions[this.name]) {\n        const extensionDef = bufferView.extensions[this.name];\n\n        const buffer = this.parser.getDependency(\"buffer\", extensionDef.buffer);\n        const decoder = this.parser.options.meshoptDecoder;\n\n        if (!decoder || !decoder.supported) {\n          if (\n            json.extensionsRequired &&\n            json.extensionsRequired.indexOf(this.name) >= 0\n          ) {\n            throw new Error(\n              \"THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files\"\n            );\n          } else {\n            // Assumes that the extension is optional and that fallback buffer data is present\n            return null;\n          }\n        }\n\n        return buffer.then(function (res) {\n          const byteOffset = extensionDef.byteOffset || 0;\n          const byteLength = extensionDef.byteLength || 0;\n\n          const count = extensionDef.count;\n          const stride = extensionDef.byteStride;\n\n          const source = new Uint8Array(res, byteOffset, byteLength);\n\n          if (decoder.decodeGltfBufferAsync) {\n            return decoder\n              .decodeGltfBufferAsync(\n                count,\n                stride,\n                source,\n                extensionDef.mode,\n                extensionDef.filter\n              )\n              .then(function (res) {\n                return res.buffer;\n              });\n          } else {\n            // Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n            return decoder.ready.then(function () {\n              const result = new ArrayBuffer(count * stride);\n              decoder.decodeGltfBuffer(\n                new Uint8Array(result),\n                count,\n                stride,\n                source,\n                extensionDef.mode,\n                extensionDef.filter\n              );\n              return result;\n            });\n          }\n        });\n      } else {\n        return null;\n      }\n    }\n  }\n\n  /**\n   * GPU Instancing Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n   *\n   */\n  class GLTFMeshGpuInstancing {\n    constructor(parser) {\n      this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n      this.parser = parser;\n    }\n\n    createNodeMesh(nodeIndex) {\n      const json = this.parser.json;\n      const nodeDef = json.nodes[nodeIndex];\n\n      if (\n        !nodeDef.extensions ||\n        !nodeDef.extensions[this.name] ||\n        nodeDef.mesh === undefined\n      ) {\n        return null;\n      }\n\n      const meshDef = json.meshes[nodeDef.mesh];\n\n      // No Points or Lines + Instancing support yet\n\n      for (const primitive of meshDef.primitives) {\n        if (\n          primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n          primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n          primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n          primitive.mode !== undefined\n        ) {\n          return null;\n        }\n      }\n\n      const extensionDef = nodeDef.extensions[this.name];\n      const attributesDef = extensionDef.attributes;\n\n      // @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n      const pending = [];\n      const attributes = {};\n\n      for (const key in attributesDef) {\n        pending.push(\n          this.parser\n            .getDependency(\"accessor\", attributesDef[key])\n            .then((accessor) => {\n              attributes[key] = accessor;\n              return attributes[key];\n            })\n        );\n      }\n\n      if (pending.length < 1) {\n        return null;\n      }\n\n      pending.push(this.parser.createNodeMesh(nodeIndex));\n\n      return Promise.all(pending).then((results) => {\n        const nodeObject = results.pop();\n        const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject];\n        const count = results[0].count; // All attribute counts should be same\n        const instancedMeshes = [];\n\n        for (const mesh of meshes) {\n          // Temporal variables\n          const m = new Matrix4();\n          const p = new Vector3();\n          const q = new Quaternion();\n          const s = new Vector3(1, 1, 1);\n\n          const instancedMesh = new InstancedMesh(\n            mesh.geometry,\n            mesh.material,\n            count\n          );\n\n          for (let i = 0; i < count; i++) {\n            if (attributes.TRANSLATION) {\n              p.fromBufferAttribute(attributes.TRANSLATION, i);\n            }\n\n            if (attributes.ROTATION) {\n              q.fromBufferAttribute(attributes.ROTATION, i);\n            }\n\n            if (attributes.SCALE) {\n              s.fromBufferAttribute(attributes.SCALE, i);\n            }\n\n            instancedMesh.setMatrixAt(i, m.compose(p, q, s));\n          }\n\n          // Add instance attributes to the geometry, excluding TRS.\n          for (const attributeName in attributes) {\n            if (\n              attributeName !== \"TRANSLATION\" &&\n              attributeName !== \"ROTATION\" &&\n              attributeName !== \"SCALE\"\n            ) {\n              mesh.geometry.setAttribute(\n                attributeName,\n                attributes[attributeName]\n              );\n            }\n          }\n\n          // Just in case\n          Object3D.prototype.copy.call(instancedMesh, mesh);\n\n          this.parser.assignFinalMaterial(instancedMesh);\n\n          instancedMeshes.push(instancedMesh);\n        }\n\n        if (nodeObject.isGroup) {\n          nodeObject.clear();\n\n          nodeObject.add(...instancedMeshes);\n\n          return nodeObject;\n        }\n\n        return instancedMeshes[0];\n      });\n    }\n  }\n\n  /* BINARY EXTENSION */\n  const BINARY_EXTENSION_HEADER_MAGIC = \"glTF\";\n  const BINARY_EXTENSION_HEADER_LENGTH = 12;\n  const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4e4f534a, BIN: 0x004e4942 };\n\n  class GLTFBinaryExtension {\n    constructor(data) {\n      this.name = EXTENSIONS.KHR_BINARY_GLTF;\n      this.content = null;\n      this.body = null;\n\n      const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);\n      const textDecoder = new TextDecoder();\n\n      this.header = {\n        magic: textDecoder.decode(new Uint8Array(data.slice(0, 4))),\n        version: headerView.getUint32(4, true),\n        length: headerView.getUint32(8, true),\n      };\n\n      if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {\n        throw new Error(\"THREE.GLTFLoader: Unsupported glTF-Binary header.\");\n      } else if (this.header.version < 2.0) {\n        throw new Error(\"THREE.GLTFLoader: Legacy binary file detected.\");\n      }\n\n      const chunkContentsLength =\n        this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n      const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);\n      let chunkIndex = 0;\n\n      while (chunkIndex < chunkContentsLength) {\n        const chunkLength = chunkView.getUint32(chunkIndex, true);\n        chunkIndex += 4;\n\n        const chunkType = chunkView.getUint32(chunkIndex, true);\n        chunkIndex += 4;\n\n        if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {\n          const contentArray = new Uint8Array(\n            data,\n            BINARY_EXTENSION_HEADER_LENGTH + chunkIndex,\n            chunkLength\n          );\n          this.content = textDecoder.decode(contentArray);\n        } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {\n          const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n          this.body = data.slice(byteOffset, byteOffset + chunkLength);\n        }\n\n        // Clients must ignore chunks with unknown types.\n\n        chunkIndex += chunkLength;\n      }\n\n      if (this.content === null) {\n        throw new Error(\"THREE.GLTFLoader: JSON content not found.\");\n      }\n    }\n  }\n\n  /**\n   * DRACO Mesh Compression Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n   */\n  class GLTFDracoMeshCompressionExtension {\n    constructor(json, dracoLoader) {\n      if (!dracoLoader) {\n        throw new Error(\"THREE.GLTFLoader: No DRACOLoader instance provided.\");\n      }\n\n      this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n      this.json = json;\n      this.dracoLoader = dracoLoader;\n      this.dracoLoader.preload();\n    }\n\n    decodePrimitive(primitive, parser) {\n      const json = this.json;\n      const dracoLoader = this.dracoLoader;\n      const bufferViewIndex = primitive.extensions[this.name].bufferView;\n      const gltfAttributeMap = primitive.extensions[this.name].attributes;\n      const threeAttributeMap = {};\n      const attributeNormalizedMap = {};\n      const attributeTypeMap = {};\n\n      for (const attributeName in gltfAttributeMap) {\n        const threeAttributeName =\n          ATTRIBUTES[attributeName] || attributeName.toLowerCase();\n\n        threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName];\n      }\n\n      for (const attributeName in primitive.attributes) {\n        const threeAttributeName =\n          ATTRIBUTES[attributeName] || attributeName.toLowerCase();\n\n        if (gltfAttributeMap[attributeName] !== undefined) {\n          const accessorDef =\n            json.accessors[primitive.attributes[attributeName]];\n          const componentType =\n            WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n\n          attributeTypeMap[threeAttributeName] = componentType.name;\n          attributeNormalizedMap[threeAttributeName] =\n            accessorDef.normalized === true;\n        }\n      }\n\n      return parser\n        .getDependency(\"bufferView\", bufferViewIndex)\n        .then(function (bufferView) {\n          return new Promise(function (resolve) {\n            dracoLoader.decodeDracoFile(\n              bufferView,\n              function (geometry) {\n                for (const attributeName in geometry.attributes) {\n                  const attribute = geometry.attributes[attributeName];\n                  const normalized = attributeNormalizedMap[attributeName];\n\n                  if (normalized !== undefined)\n                    attribute.normalized = normalized;\n                }\n\n                resolve(geometry);\n              },\n              threeAttributeMap,\n              attributeTypeMap\n            );\n          });\n        });\n    }\n  }\n\n  /**\n   * Texture Transform Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n   */\n  class GLTFTextureTransformExtension {\n    constructor() {\n      this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n    }\n\n    extendTexture(texture, transform) {\n      if (\n        (transform.texCoord === undefined ||\n          transform.texCoord === texture.channel) &&\n        transform.offset === undefined &&\n        transform.rotation === undefined &&\n        transform.scale === undefined\n      ) {\n        // See https://github.com/mrdoob/three.js/issues/21819.\n        return texture;\n      }\n\n      texture = texture.clone();\n\n      if (transform.texCoord !== undefined) {\n        texture.channel = transform.texCoord;\n      }\n\n      if (transform.offset !== undefined) {\n        texture.offset.fromArray(transform.offset);\n      }\n\n      if (transform.rotation !== undefined) {\n        texture.rotation = transform.rotation;\n      }\n\n      if (transform.scale !== undefined) {\n        texture.repeat.fromArray(transform.scale);\n      }\n\n      texture.needsUpdate = true;\n\n      return texture;\n    }\n  }\n\n  /**\n   * Mesh Quantization Extension\n   *\n   * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n   */\n  class GLTFMeshQuantizationExtension {\n    constructor() {\n      this.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n    }\n  }\n\n  /*********************************/\n  /********** INTERPOLATION ********/\n  /*********************************/\n\n  // Spline Interpolation\n  // Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\n  class GLTFCubicSplineInterpolant extends Interpolant {\n    constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n      super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n    }\n\n    copySampleValue_(index) {\n      // Copies a sample value to the result buffer. See description of glTF\n      // CUBICSPLINE values layout in interpolate_() function below.\n\n      const result = this.resultBuffer,\n        values = this.sampleValues,\n        valueSize = this.valueSize,\n        offset = index * valueSize * 3 + valueSize;\n\n      for (let i = 0; i !== valueSize; i++) {\n        result[i] = values[offset + i];\n      }\n\n      return result;\n    }\n\n    interpolate_(i1, t0, t, t1) {\n      const result = this.resultBuffer;\n      const values = this.sampleValues;\n      const stride = this.valueSize;\n\n      const stride2 = stride * 2;\n      const stride3 = stride * 3;\n\n      const td = t1 - t0;\n\n      const p = (t - t0) / td;\n      const pp = p * p;\n      const ppp = pp * p;\n\n      const offset1 = i1 * stride3;\n      const offset0 = offset1 - stride3;\n\n      const s2 = -2 * ppp + 3 * pp;\n      const s3 = ppp - pp;\n      const s0 = 1 - s2;\n      const s1 = s3 - pp + p;\n\n      // Layout of keyframe output values for CUBICSPLINE animations:\n      //   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n      for (let i = 0; i !== stride; i++) {\n        const p0 = values[offset0 + i + stride]; // splineVertex_k\n        const m0 = values[offset0 + i + stride2] * td; // outTangent_k * (t_k+1 - t_k)\n        const p1 = values[offset1 + i + stride]; // splineVertex_k+1\n        const m1 = values[offset1 + i] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n        result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n      }\n\n      return result;\n    }\n  }\n\n  const _q = new Quaternion();\n\n  class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n    interpolate_(i1, t0, t, t1) {\n      const result = super.interpolate_(i1, t0, t, t1);\n\n      _q.fromArray(result).normalize().toArray(result);\n\n      return result;\n    }\n  }\n\n  /*********************************/\n  /********** INTERNALS ************/\n  /*********************************/\n\n  /* CONSTANTS */\n\n  const WEBGL_CONSTANTS = {\n    FLOAT: 5126,\n    //FLOAT_MAT2: 35674,\n    FLOAT_MAT3: 35675,\n    FLOAT_MAT4: 35676,\n    FLOAT_VEC2: 35664,\n    FLOAT_VEC3: 35665,\n    FLOAT_VEC4: 35666,\n    LINEAR: 9729,\n    REPEAT: 10497,\n    SAMPLER_2D: 35678,\n    POINTS: 0,\n    LINES: 1,\n    LINE_LOOP: 2,\n    LINE_STRIP: 3,\n    TRIANGLES: 4,\n    TRIANGLE_STRIP: 5,\n    TRIANGLE_FAN: 6,\n    UNSIGNED_BYTE: 5121,\n    UNSIGNED_SHORT: 5123,\n  };\n\n  const WEBGL_COMPONENT_TYPES = {\n    5120: Int8Array,\n    5121: Uint8Array,\n    5122: Int16Array,\n    5123: Uint16Array,\n    5125: Uint32Array,\n    5126: Float32Array,\n  };\n\n  const WEBGL_FILTERS = {\n    9728: NearestFilter,\n    9729: LinearFilter,\n    9984: NearestMipmapNearestFilter,\n    9985: LinearMipmapNearestFilter,\n    9986: NearestMipmapLinearFilter,\n    9987: LinearMipmapLinearFilter,\n  };\n\n  const WEBGL_WRAPPINGS = {\n    33071: ClampToEdgeWrapping,\n    33648: MirroredRepeatWrapping,\n    10497: RepeatWrapping,\n  };\n\n  const WEBGL_TYPE_SIZES = {\n    SCALAR: 1,\n    VEC2: 2,\n    VEC3: 3,\n    VEC4: 4,\n    MAT2: 4,\n    MAT3: 9,\n    MAT4: 16,\n  };\n\n  const ATTRIBUTES = {\n    POSITION: \"position\",\n    NORMAL: \"normal\",\n    TANGENT: \"tangent\",\n    TEXCOORD_0: \"uv\",\n    TEXCOORD_1: \"uv1\",\n    TEXCOORD_2: \"uv2\",\n    TEXCOORD_3: \"uv3\",\n    COLOR_0: \"color\",\n    WEIGHTS_0: \"skinWeight\",\n    JOINTS_0: \"skinIndex\",\n  };\n\n  const PATH_PROPERTIES = {\n    scale: \"scale\",\n    translation: \"position\",\n    rotation: \"quaternion\",\n    weights: \"morphTargetInfluences\",\n  };\n\n  const INTERPOLATION = {\n    CUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n    // keyframe track will be initialized with a default interpolation type, then modified.\n    LINEAR: InterpolateLinear,\n    STEP: InterpolateDiscrete,\n  };\n\n  const ALPHA_MODES = {\n    OPAQUE: \"OPAQUE\",\n    MASK: \"MASK\",\n    BLEND: \"BLEND\",\n  };\n\n  /**\n   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n   */\n  function createDefaultMaterial(cache) {\n    if (cache[\"DefaultMaterial\"] === undefined) {\n      cache[\"DefaultMaterial\"] = new MeshStandardMaterial({\n        color: 0xffffff,\n        emissive: 0x000000,\n        metalness: 1,\n        roughness: 1,\n        transparent: false,\n        depthTest: true,\n        side: FrontSide,\n      });\n    }\n\n    return cache[\"DefaultMaterial\"];\n  }\n\n  function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {\n    // Add unknown glTF extensions to an object's userData.\n\n    for (const name in objectDef.extensions) {\n      if (knownExtensions[name] === undefined) {\n        object.userData.gltfExtensions = object.userData.gltfExtensions || {};\n        object.userData.gltfExtensions[name] = objectDef.extensions[name];\n      }\n    }\n  }\n\n  /**\n   * @param {Object3D|Material|BufferGeometry} object\n   * @param {GLTF.definition} gltfDef\n   */\n  function assignExtrasToUserData(object, gltfDef) {\n    if (gltfDef.extras !== undefined) {\n      if (typeof gltfDef.extras === \"object\") {\n        Object.assign(object.userData, gltfDef.extras);\n      } else {\n        console.warn(\n          \"THREE.GLTFLoader: Ignoring primitive type .extras, \" + gltfDef.extras\n        );\n      }\n    }\n  }\n\n  /**\n   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n   *\n   * @param {BufferGeometry} geometry\n   * @param {Array<GLTF.Target>} targets\n   * @param {GLTFParser} parser\n   * @return {Promise<BufferGeometry>}\n   */\n  function addMorphTargets(geometry, targets, parser) {\n    let hasMorphPosition = false;\n    let hasMorphNormal = false;\n    let hasMorphColor = false;\n\n    for (let i = 0, il = targets.length; i < il; i++) {\n      const target = targets[i];\n\n      if (target.POSITION !== undefined) hasMorphPosition = true;\n      if (target.NORMAL !== undefined) hasMorphNormal = true;\n      if (target.COLOR_0 !== undefined) hasMorphColor = true;\n\n      if (hasMorphPosition && hasMorphNormal && hasMorphColor) break;\n    }\n\n    if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor)\n      return Promise.resolve(geometry);\n\n    const pendingPositionAccessors = [];\n    const pendingNormalAccessors = [];\n    const pendingColorAccessors = [];\n\n    for (let i = 0, il = targets.length; i < il; i++) {\n      const target = targets[i];\n\n      if (hasMorphPosition) {\n        const pendingAccessor =\n          target.POSITION !== undefined\n            ? parser.getDependency(\"accessor\", target.POSITION)\n            : geometry.attributes.position;\n\n        pendingPositionAccessors.push(pendingAccessor);\n      }\n\n      if (hasMorphNormal) {\n        const pendingAccessor =\n          target.NORMAL !== undefined\n            ? parser.getDependency(\"accessor\", target.NORMAL)\n            : geometry.attributes.normal;\n\n        pendingNormalAccessors.push(pendingAccessor);\n      }\n\n      if (hasMorphColor) {\n        const pendingAccessor =\n          target.COLOR_0 !== undefined\n            ? parser.getDependency(\"accessor\", target.COLOR_0)\n            : geometry.attributes.color;\n\n        pendingColorAccessors.push(pendingAccessor);\n      }\n    }\n\n    return Promise.all([\n      Promise.all(pendingPositionAccessors),\n      Promise.all(pendingNormalAccessors),\n      Promise.all(pendingColorAccessors),\n    ]).then(function (accessors) {\n      const morphPositions = accessors[0];\n      const morphNormals = accessors[1];\n      const morphColors = accessors[2];\n\n      if (hasMorphPosition) geometry.morphAttributes.position = morphPositions;\n      if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals;\n      if (hasMorphColor) geometry.morphAttributes.color = morphColors;\n      geometry.morphTargetsRelative = true;\n\n      return geometry;\n    });\n  }\n\n  /**\n   * @param {Mesh} mesh\n   * @param {GLTF.Mesh} meshDef\n   */\n  function updateMorphTargets(mesh, meshDef) {\n    mesh.updateMorphTargets();\n\n    if (meshDef.weights !== undefined) {\n      for (let i = 0, il = meshDef.weights.length; i < il; i++) {\n        mesh.morphTargetInfluences[i] = meshDef.weights[i];\n      }\n    }\n\n    // .extras has user-defined data, so check that .extras.targetNames is an array.\n    if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {\n      const targetNames = meshDef.extras.targetNames;\n\n      if (mesh.morphTargetInfluences.length === targetNames.length) {\n        mesh.morphTargetDictionary = {};\n\n        for (let i = 0, il = targetNames.length; i < il; i++) {\n          mesh.morphTargetDictionary[targetNames[i]] = i;\n        }\n      } else {\n        console.warn(\n          \"THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.\"\n        );\n      }\n    }\n  }\n\n  function createPrimitiveKey(primitiveDef) {\n    let geometryKey;\n\n    const dracoExtension =\n      primitiveDef.extensions &&\n      primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];\n\n    if (dracoExtension) {\n      geometryKey =\n        \"draco:\" +\n        dracoExtension.bufferView +\n        \":\" +\n        dracoExtension.indices +\n        \":\" +\n        createAttributesKey(dracoExtension.attributes);\n    } else {\n      geometryKey =\n        primitiveDef.indices +\n        \":\" +\n        createAttributesKey(primitiveDef.attributes) +\n        \":\" +\n        primitiveDef.mode;\n    }\n\n    if (primitiveDef.targets !== undefined) {\n      for (let i = 0, il = primitiveDef.targets.length; i < il; i++) {\n        geometryKey += \":\" + createAttributesKey(primitiveDef.targets[i]);\n      }\n    }\n\n    return geometryKey;\n  }\n\n  function createAttributesKey(attributes) {\n    let attributesKey = \"\";\n\n    const keys = Object.keys(attributes).sort();\n\n    for (let i = 0, il = keys.length; i < il; i++) {\n      attributesKey += keys[i] + \":\" + attributes[keys[i]] + \";\";\n    }\n\n    return attributesKey;\n  }\n\n  function getNormalizedComponentScale(constructor) {\n    // Reference:\n    // https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n    switch (constructor) {\n      case Int8Array:\n        return 1 / 127;\n\n      case Uint8Array:\n        return 1 / 255;\n\n      case Int16Array:\n        return 1 / 32767;\n\n      case Uint16Array:\n        return 1 / 65535;\n\n      default:\n        throw new Error(\n          \"THREE.GLTFLoader: Unsupported normalized accessor component type.\"\n        );\n    }\n  }\n\n  function getImageURIMimeType(uri) {\n    if (\n      uri.search(/\\.jpe?g($|\\?)/i) > 0 ||\n      uri.search(/^data\\:image\\/jpeg/) === 0\n    )\n      return \"image/jpeg\";\n    if (\n      uri.search(/\\.webp($|\\?)/i) > 0 ||\n      uri.search(/^data\\:image\\/webp/) === 0\n    )\n      return \"image/webp\";\n\n    return \"image/png\";\n  }\n\n  const _identityMatrix = new Matrix4();\n\n  /* GLTF PARSER */\n\n  class GLTFParser {\n    constructor(json = {}, options = {}) {\n      this.json = json;\n      this.extensions = {};\n      this.plugins = {};\n      this.options = options;\n\n      // loader object cache\n      this.cache = new GLTFRegistry();\n\n      // associations between Three.js objects and glTF elements\n      this.associations = new Map();\n\n      // BufferGeometry caching\n      this.primitiveCache = {};\n\n      // Node cache\n      this.nodeCache = {};\n\n      // Object3D instance caches\n      this.meshCache = { refs: {}, uses: {} };\n      this.cameraCache = { refs: {}, uses: {} };\n      this.lightCache = { refs: {}, uses: {} };\n\n      this.sourceCache = {};\n      this.textureCache = {};\n\n      // Track node names, to ensure no duplicates\n      this.nodeNamesUsed = {};\n\n      // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n      // expensive work of uploading a texture to the GPU off the main thread.\n\n      let isSafari = false;\n      let isFirefox = false;\n      let firefoxVersion = -1;\n\n      if (typeof navigator !== \"undefined\") {\n        isSafari =\n          /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true;\n        isFirefox = navigator.userAgent.indexOf(\"Firefox\") > -1;\n        firefoxVersion = isFirefox\n          ? navigator.userAgent.match(/Firefox\\/([0-9]+)\\./)[1]\n          : -1;\n      }\n\n      if (\n        typeof createImageBitmap === \"undefined\" ||\n        isSafari ||\n        (isFirefox && firefoxVersion < 98)\n      ) {\n        this.textureLoader = new TextureLoader(this.options.manager);\n      } else {\n        this.textureLoader = new ImageBitmapLoader(this.options.manager);\n      }\n\n      this.textureLoader.setCrossOrigin(this.options.crossOrigin);\n      this.textureLoader.setRequestHeader(this.options.requestHeader);\n\n      this.fileLoader = new FileLoader(this.options.manager);\n      this.fileLoader.setResponseType(\"arraybuffer\");\n\n      if (this.options.crossOrigin === \"use-credentials\") {\n        this.fileLoader.setWithCredentials(true);\n      }\n    }\n\n    setExtensions(extensions) {\n      this.extensions = extensions;\n    }\n\n    setPlugins(plugins) {\n      this.plugins = plugins;\n    }\n\n    parse(onLoad, onError) {\n      const parser = this;\n      const json = this.json;\n      const extensions = this.extensions;\n\n      // Clear the loader cache\n      this.cache.removeAll();\n      this.nodeCache = {};\n\n      // Mark the special nodes/meshes in json for efficient parse\n      this._invokeAll(function (ext) {\n        return ext._markDefs && ext._markDefs();\n      });\n\n      Promise.all(\n        this._invokeAll(function (ext) {\n          return ext.beforeRoot && ext.beforeRoot();\n        })\n      )\n        .then(function () {\n          return Promise.all([\n            parser.getDependencies(\"scene\"),\n            parser.getDependencies(\"animation\"),\n            parser.getDependencies(\"camera\"),\n          ]);\n        })\n        .then(function (dependencies) {\n          const result = {\n            scene: dependencies[0][json.scene || 0],\n            scenes: dependencies[0],\n            animations: dependencies[1],\n            cameras: dependencies[2],\n            asset: json.asset,\n            parser: parser,\n            userData: {},\n          };\n\n          addUnknownExtensionsToUserData(extensions, result, json);\n\n          assignExtrasToUserData(result, json);\n\n          Promise.all(\n            parser._invokeAll(function (ext) {\n              return ext.afterRoot && ext.afterRoot(result);\n            })\n          ).then(function () {\n            onLoad(result);\n          });\n        })\n        .catch(onError);\n    }\n\n    /**\n     * Marks the special nodes/meshes in json for efficient parse.\n     */\n    _markDefs() {\n      const nodeDefs = this.json.nodes || [];\n      const skinDefs = this.json.skins || [];\n      const meshDefs = this.json.meshes || [];\n\n      // Nothing in the node definition indicates whether it is a Bone or an\n      // Object3D. Use the skins' joint references to mark bones.\n      for (\n        let skinIndex = 0, skinLength = skinDefs.length;\n        skinIndex < skinLength;\n        skinIndex++\n      ) {\n        const joints = skinDefs[skinIndex].joints;\n\n        for (let i = 0, il = joints.length; i < il; i++) {\n          nodeDefs[joints[i]].isBone = true;\n        }\n      }\n\n      // Iterate over all nodes, marking references to shared resources,\n      // as well as skeleton joints.\n      for (\n        let nodeIndex = 0, nodeLength = nodeDefs.length;\n        nodeIndex < nodeLength;\n        nodeIndex++\n      ) {\n        const nodeDef = nodeDefs[nodeIndex];\n\n        if (nodeDef.mesh !== undefined) {\n          this._addNodeRef(this.meshCache, nodeDef.mesh);\n\n          // Nothing in the mesh definition indicates whether it is\n          // a SkinnedMesh or Mesh. Use the node's mesh reference\n          // to mark SkinnedMesh if node has skin.\n          if (nodeDef.skin !== undefined) {\n            meshDefs[nodeDef.mesh].isSkinnedMesh = true;\n          }\n        }\n\n        if (nodeDef.camera !== undefined) {\n          this._addNodeRef(this.cameraCache, nodeDef.camera);\n        }\n      }\n    }\n\n    /**\n     * Counts references to shared node / Object3D resources. These resources\n     * can be reused, or \"instantiated\", at multiple nodes in the scene\n     * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n     * be marked. Non-scenegraph resources (like Materials, Geometries, and\n     * Textures) can be reused directly and are not marked here.\n     *\n     * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n     */\n    _addNodeRef(cache, index) {\n      if (index === undefined) return;\n\n      if (cache.refs[index] === undefined) {\n        cache.refs[index] = cache.uses[index] = 0;\n      }\n\n      cache.refs[index]++;\n    }\n\n    /** Returns a reference to a shared resource, cloning it if necessary. */\n    _getNodeRef(cache, index, object) {\n      if (cache.refs[index] <= 1) return object;\n\n      const ref = object.clone();\n\n      // Propagates mappings to the cloned object, prevents mappings on the\n      // original object from being lost.\n      const updateMappings = (original, clone) => {\n        const mappings = this.associations.get(original);\n        if (mappings != null) {\n          this.associations.set(clone, mappings);\n        }\n\n        for (const [i, child] of original.children.entries()) {\n          updateMappings(child, clone.children[i]);\n        }\n      };\n\n      updateMappings(object, ref);\n\n      ref.name += \"_instance_\" + cache.uses[index]++;\n\n      return ref;\n    }\n\n    _invokeOne(func) {\n      const extensions = Object.values(this.plugins);\n      extensions.push(this);\n\n      for (let i = 0; i < extensions.length; i++) {\n        const result = func(extensions[i]);\n\n        if (result) return result;\n      }\n\n      return null;\n    }\n\n    _invokeAll(func) {\n      const extensions = Object.values(this.plugins);\n      extensions.unshift(this);\n\n      const pending = [];\n\n      for (let i = 0; i < extensions.length; i++) {\n        const result = func(extensions[i]);\n\n        if (result) pending.push(result);\n      }\n\n      return pending;\n    }\n\n    /**\n     * Requests the specified dependency asynchronously, with caching.\n     * @param {string} type\n     * @param {number} index\n     * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n     */\n    getDependency(type, index) {\n      const cacheKey = type + \":\" + index;\n      let dependency = this.cache.get(cacheKey);\n\n      if (!dependency) {\n        switch (type) {\n          case \"scene\":\n            dependency = this.loadScene(index);\n            break;\n\n          case \"node\":\n            dependency = this._invokeOne(function (ext) {\n              return ext.loadNode && ext.loadNode(index);\n            });\n            break;\n\n          case \"mesh\":\n            dependency = this._invokeOne(function (ext) {\n              return ext.loadMesh && ext.loadMesh(index);\n            });\n            break;\n\n          case \"accessor\":\n            dependency = this.loadAccessor(index);\n            break;\n\n          case \"bufferView\":\n            dependency = this._invokeOne(function (ext) {\n              return ext.loadBufferView && ext.loadBufferView(index);\n            });\n            break;\n\n          case \"buffer\":\n            dependency = this.loadBuffer(index);\n            break;\n\n          case \"material\":\n            dependency = this._invokeOne(function (ext) {\n              return ext.loadMaterial && ext.loadMaterial(index);\n            });\n            break;\n\n          case \"texture\":\n            dependency = this._invokeOne(function (ext) {\n              return ext.loadTexture && ext.loadTexture(index);\n            });\n            break;\n\n          case \"skin\":\n            dependency = this.loadSkin(index);\n            break;\n\n          case \"animation\":\n            dependency = this._invokeOne(function (ext) {\n              return ext.loadAnimation && ext.loadAnimation(index);\n            });\n            break;\n\n          case \"camera\":\n            dependency = this.loadCamera(index);\n            break;\n\n          default:\n            dependency = this._invokeOne(function (ext) {\n              return (\n                ext != this &&\n                ext.getDependency &&\n                ext.getDependency(type, index)\n              );\n            });\n\n            if (!dependency) {\n              throw new Error(\"Unknown type: \" + type);\n            }\n\n            break;\n        }\n\n        this.cache.add(cacheKey, dependency);\n      }\n\n      return dependency;\n    }\n\n    /**\n     * Requests all dependencies of the specified type asynchronously, with caching.\n     * @param {string} type\n     * @return {Promise<Array<Object>>}\n     */\n    getDependencies(type) {\n      let dependencies = this.cache.get(type);\n\n      if (!dependencies) {\n        const parser = this;\n        const defs = this.json[type + (type === \"mesh\" ? \"es\" : \"s\")] || [];\n\n        dependencies = Promise.all(\n          defs.map(function (def, index) {\n            return parser.getDependency(type, index);\n          })\n        );\n\n        this.cache.add(type, dependencies);\n      }\n\n      return dependencies;\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n     * @param {number} bufferIndex\n     * @return {Promise<ArrayBuffer>}\n     */\n    loadBuffer(bufferIndex) {\n      const bufferDef = this.json.buffers[bufferIndex];\n      const loader = this.fileLoader;\n\n      if (bufferDef.type && bufferDef.type !== \"arraybuffer\") {\n        throw new Error(\n          \"THREE.GLTFLoader: \" +\n            bufferDef.type +\n            \" buffer type is not supported.\"\n        );\n      }\n\n      // If present, GLB container is required to be the first buffer.\n      if (bufferDef.uri === undefined && bufferIndex === 0) {\n        return Promise.resolve(\n          this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body\n        );\n      }\n\n      const options = this.options;\n\n      return new Promise(function (resolve, reject) {\n        loader.load(\n          LoaderUtils.resolveURL(bufferDef.uri, options.path),\n          resolve,\n          undefined,\n          function () {\n            reject(\n              new Error(\n                'THREE.GLTFLoader: Failed to load buffer \"' +\n                  bufferDef.uri +\n                  '\".'\n              )\n            );\n          }\n        );\n      });\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n     * @param {number} bufferViewIndex\n     * @return {Promise<ArrayBuffer>}\n     */\n    loadBufferView(bufferViewIndex) {\n      const bufferViewDef = this.json.bufferViews[bufferViewIndex];\n\n      return this.getDependency(\"buffer\", bufferViewDef.buffer).then(function (\n        buffer\n      ) {\n        const byteLength = bufferViewDef.byteLength || 0;\n        const byteOffset = bufferViewDef.byteOffset || 0;\n        return buffer.slice(byteOffset, byteOffset + byteLength);\n      });\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n     * @param {number} accessorIndex\n     * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n     */\n    loadAccessor(accessorIndex) {\n      const parser = this;\n      const json = this.json;\n\n      const accessorDef = this.json.accessors[accessorIndex];\n\n      if (\n        accessorDef.bufferView === undefined &&\n        accessorDef.sparse === undefined\n      ) {\n        const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];\n        const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n        const normalized = accessorDef.normalized === true;\n\n        const array = new TypedArray(accessorDef.count * itemSize);\n        return Promise.resolve(\n          new BufferAttribute(array, itemSize, normalized)\n        );\n      }\n\n      const pendingBufferViews = [];\n\n      if (accessorDef.bufferView !== undefined) {\n        pendingBufferViews.push(\n          this.getDependency(\"bufferView\", accessorDef.bufferView)\n        );\n      } else {\n        pendingBufferViews.push(null);\n      }\n\n      if (accessorDef.sparse !== undefined) {\n        pendingBufferViews.push(\n          this.getDependency(\n            \"bufferView\",\n            accessorDef.sparse.indices.bufferView\n          )\n        );\n        pendingBufferViews.push(\n          this.getDependency(\"bufferView\", accessorDef.sparse.values.bufferView)\n        );\n      }\n\n      return Promise.all(pendingBufferViews).then(function (bufferViews) {\n        const bufferView = bufferViews[0];\n\n        const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];\n        const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n\n        // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n        const elementBytes = TypedArray.BYTES_PER_ELEMENT;\n        const itemBytes = elementBytes * itemSize;\n        const byteOffset = accessorDef.byteOffset || 0;\n        const byteStride =\n          accessorDef.bufferView !== undefined\n            ? json.bufferViews[accessorDef.bufferView].byteStride\n            : undefined;\n        const normalized = accessorDef.normalized === true;\n        let array, bufferAttribute;\n\n        // The buffer is not interleaved if the stride is the item size in bytes.\n        if (byteStride && byteStride !== itemBytes) {\n          // Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n          // This makes sure that IBA.count reflects accessor.count properly\n          const ibSlice = Math.floor(byteOffset / byteStride);\n          const ibCacheKey =\n            \"InterleavedBuffer:\" +\n            accessorDef.bufferView +\n            \":\" +\n            accessorDef.componentType +\n            \":\" +\n            ibSlice +\n            \":\" +\n            accessorDef.count;\n          let ib = parser.cache.get(ibCacheKey);\n\n          if (!ib) {\n            array = new TypedArray(\n              bufferView,\n              ibSlice * byteStride,\n              (accessorDef.count * byteStride) / elementBytes\n            );\n\n            // Integer parameters to IB/IBA are in array elements, not bytes.\n            ib = new InterleavedBuffer(array, byteStride / elementBytes);\n\n            parser.cache.add(ibCacheKey, ib);\n          }\n\n          bufferAttribute = new InterleavedBufferAttribute(\n            ib,\n            itemSize,\n            (byteOffset % byteStride) / elementBytes,\n            normalized\n          );\n        } else {\n          if (bufferView === null) {\n            array = new TypedArray(accessorDef.count * itemSize);\n          } else {\n            array = new TypedArray(\n              bufferView,\n              byteOffset,\n              accessorDef.count * itemSize\n            );\n          }\n\n          bufferAttribute = new BufferAttribute(array, itemSize, normalized);\n        }\n\n        // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n        if (accessorDef.sparse !== undefined) {\n          const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n          const TypedArrayIndices =\n            WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];\n\n          const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n          const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n          const sparseIndices = new TypedArrayIndices(\n            bufferViews[1],\n            byteOffsetIndices,\n            accessorDef.sparse.count * itemSizeIndices\n          );\n          const sparseValues = new TypedArray(\n            bufferViews[2],\n            byteOffsetValues,\n            accessorDef.sparse.count * itemSize\n          );\n\n          if (bufferView !== null) {\n            // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n            bufferAttribute = new BufferAttribute(\n              bufferAttribute.array.slice(),\n              bufferAttribute.itemSize,\n              bufferAttribute.normalized\n            );\n          }\n\n          for (let i = 0, il = sparseIndices.length; i < il; i++) {\n            const index = sparseIndices[i];\n\n            bufferAttribute.setX(index, sparseValues[i * itemSize]);\n            if (itemSize >= 2)\n              bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);\n            if (itemSize >= 3)\n              bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);\n            if (itemSize >= 4)\n              bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);\n            if (itemSize >= 5)\n              throw new Error(\n                \"THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.\"\n              );\n          }\n        }\n\n        return bufferAttribute;\n      });\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n     * @param {number} textureIndex\n     * @return {Promise<THREE.Texture|null>}\n     */\n    loadTexture(textureIndex) {\n      const json = this.json;\n      const options = this.options;\n      const textureDef = json.textures[textureIndex];\n      const sourceIndex = textureDef.source;\n      const sourceDef = json.images[sourceIndex];\n\n      let loader = this.textureLoader;\n\n      if (sourceDef.uri) {\n        const handler = options.manager.getHandler(sourceDef.uri);\n        if (handler !== null) loader = handler;\n      }\n\n      return this.loadTextureImage(textureIndex, sourceIndex, loader);\n    }\n\n    loadTextureImage(textureIndex, sourceIndex, loader) {\n      const parser = this;\n      const json = this.json;\n\n      const textureDef = json.textures[textureIndex];\n      const sourceDef = json.images[sourceIndex];\n\n      const cacheKey =\n        (sourceDef.uri || sourceDef.bufferView) + \":\" + textureDef.sampler;\n\n      if (this.textureCache[cacheKey]) {\n        // See https://github.com/mrdoob/three.js/issues/21559.\n        return this.textureCache[cacheKey];\n      }\n\n      const promise = this.loadImageSource(sourceIndex, loader)\n        .then(function (texture) {\n          texture.flipY = false;\n\n          texture.name = textureDef.name || sourceDef.name || \"\";\n\n          if (\n            texture.name === \"\" &&\n            typeof sourceDef.uri === \"string\" &&\n            sourceDef.uri.startsWith(\"data:image/\") === false\n          ) {\n            texture.name = sourceDef.uri;\n          }\n\n          const samplers = json.samplers || {};\n          const sampler = samplers[textureDef.sampler] || {};\n\n          texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter;\n          texture.minFilter =\n            WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter;\n          texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping;\n          texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping;\n\n          parser.associations.set(texture, { textures: textureIndex });\n\n          return texture;\n        })\n        .catch(function () {\n          return null;\n        });\n\n      this.textureCache[cacheKey] = promise;\n\n      return promise;\n    }\n\n    loadImageSource(sourceIndex, loader) {\n      const parser = this;\n      const json = this.json;\n      const options = this.options;\n\n      if (this.sourceCache[sourceIndex] !== undefined) {\n        return this.sourceCache[sourceIndex].then((texture) => texture.clone());\n      }\n\n      const sourceDef = json.images[sourceIndex];\n\n      const URL = self.URL || self.webkitURL;\n\n      let sourceURI = sourceDef.uri || \"\";\n      let isObjectURL = false;\n\n      if (sourceDef.bufferView !== undefined) {\n        // Load binary image data from bufferView, if provided.\n\n        sourceURI = parser\n          .getDependency(\"bufferView\", sourceDef.bufferView)\n          .then(function (bufferView) {\n            isObjectURL = true;\n            const blob = new Blob([bufferView], { type: sourceDef.mimeType });\n            sourceURI = URL.createObjectURL(blob);\n            return sourceURI;\n          });\n      } else if (sourceDef.uri === undefined) {\n        throw new Error(\n          \"THREE.GLTFLoader: Image \" +\n            sourceIndex +\n            \" is missing URI and bufferView\"\n        );\n      }\n\n      const promise = Promise.resolve(sourceURI)\n        .then(function (sourceURI) {\n          return new Promise(function (resolve, reject) {\n            let onLoad = resolve;\n\n            if (loader.isImageBitmapLoader === true) {\n              onLoad = function (imageBitmap) {\n                const texture = new Texture(imageBitmap);\n                texture.needsUpdate = true;\n\n                resolve(texture);\n              };\n            }\n\n            loader.load(\n              LoaderUtils.resolveURL(sourceURI, options.path),\n              onLoad,\n              undefined,\n              reject\n            );\n          });\n        })\n        .then(function (texture) {\n          // Clean up resources and configure Texture.\n\n          if (isObjectURL === true) {\n            URL.revokeObjectURL(sourceURI);\n          }\n\n          texture.userData.mimeType =\n            sourceDef.mimeType || getImageURIMimeType(sourceDef.uri);\n\n          return texture;\n        })\n        .catch(function (error) {\n          console.error(\"THREE.GLTFLoader: Couldn't load texture\", sourceURI);\n          throw error;\n        });\n\n      this.sourceCache[sourceIndex] = promise;\n      return promise;\n    }\n\n    /**\n     * Asynchronously assigns a texture to the given material parameters.\n     * @param {Object} materialParams\n     * @param {string} mapName\n     * @param {Object} mapDef\n     * @return {Promise<Texture>}\n     */\n    assignTexture(materialParams, mapName, mapDef, colorSpace) {\n      const parser = this;\n\n      return this.getDependency(\"texture\", mapDef.index).then(function (\n        texture\n      ) {\n        if (!texture) return null;\n\n        if (mapDef.texCoord !== undefined && mapDef.texCoord > 0) {\n          texture = texture.clone();\n          texture.channel = mapDef.texCoord;\n        }\n\n        if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {\n          const transform =\n            mapDef.extensions !== undefined\n              ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]\n              : undefined;\n\n          if (transform) {\n            const gltfReference = parser.associations.get(texture);\n            texture = parser.extensions[\n              EXTENSIONS.KHR_TEXTURE_TRANSFORM\n            ].extendTexture(texture, transform);\n            parser.associations.set(texture, gltfReference);\n          }\n        }\n\n        if (colorSpace !== undefined) {\n          texture.colorSpace = colorSpace;\n        }\n\n        materialParams[mapName] = texture;\n\n        return texture;\n      });\n    }\n\n    /**\n     * Assigns final material to a Mesh, Line, or Points instance. The instance\n     * already has a material (generated from the glTF material options alone)\n     * but reuse of the same glTF material may require multiple threejs materials\n     * to accommodate different primitive types, defines, etc. New materials will\n     * be created if necessary, and reused from a cache.\n     * @param  {Object3D} mesh Mesh, Line, or Points instance.\n     */\n    assignFinalMaterial(mesh) {\n      const geometry = mesh.geometry;\n      let material = mesh.material;\n\n      const useDerivativeTangents = geometry.attributes.tangent === undefined;\n      const useVertexColors = geometry.attributes.color !== undefined;\n      const useFlatShading = geometry.attributes.normal === undefined;\n\n      if (mesh.isPoints) {\n        const cacheKey = \"PointsMaterial:\" + material.uuid;\n\n        let pointsMaterial = this.cache.get(cacheKey);\n\n        if (!pointsMaterial) {\n          pointsMaterial = new PointsMaterial();\n          Material.prototype.copy.call(pointsMaterial, material);\n          pointsMaterial.color.copy(material.color);\n          pointsMaterial.map = material.map;\n          pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n          this.cache.add(cacheKey, pointsMaterial);\n        }\n\n        material = pointsMaterial;\n      } else if (mesh.isLine) {\n        const cacheKey = \"LineBasicMaterial:\" + material.uuid;\n\n        let lineMaterial = this.cache.get(cacheKey);\n\n        if (!lineMaterial) {\n          lineMaterial = new LineBasicMaterial();\n          Material.prototype.copy.call(lineMaterial, material);\n          lineMaterial.color.copy(material.color);\n          lineMaterial.map = material.map;\n\n          this.cache.add(cacheKey, lineMaterial);\n        }\n\n        material = lineMaterial;\n      }\n\n      // Clone the material if it will be modified\n      if (useDerivativeTangents || useVertexColors || useFlatShading) {\n        let cacheKey = \"ClonedMaterial:\" + material.uuid + \":\";\n\n        if (useDerivativeTangents) cacheKey += \"derivative-tangents:\";\n        if (useVertexColors) cacheKey += \"vertex-colors:\";\n        if (useFlatShading) cacheKey += \"flat-shading:\";\n\n        let cachedMaterial = this.cache.get(cacheKey);\n\n        if (!cachedMaterial) {\n          cachedMaterial = material.clone();\n\n          if (useVertexColors) cachedMaterial.vertexColors = true;\n          if (useFlatShading) cachedMaterial.flatShading = true;\n\n          if (useDerivativeTangents) {\n            // https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n            if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1;\n            if (cachedMaterial.clearcoatNormalScale)\n              cachedMaterial.clearcoatNormalScale.y *= -1;\n          }\n\n          this.cache.add(cacheKey, cachedMaterial);\n\n          this.associations.set(\n            cachedMaterial,\n            this.associations.get(material)\n          );\n        }\n\n        material = cachedMaterial;\n      }\n\n      mesh.material = material;\n    }\n\n    getMaterialType(/* materialIndex */) {\n      return MeshStandardMaterial;\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n     * @param {number} materialIndex\n     * @return {Promise<Material>}\n     */\n    loadMaterial(materialIndex) {\n      const parser = this;\n      const json = this.json;\n      const extensions = this.extensions;\n      const materialDef = json.materials[materialIndex];\n\n      let materialType;\n      const materialParams = {};\n      const materialExtensions = materialDef.extensions || {};\n\n      const pending = [];\n\n      if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) {\n        const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];\n        materialType = kmuExtension.getMaterialType();\n        pending.push(\n          kmuExtension.extendParams(materialParams, materialDef, parser)\n        );\n      } else {\n        // Specification:\n        // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n        const metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n        materialParams.color = new Color(1.0, 1.0, 1.0);\n        materialParams.opacity = 1.0;\n\n        if (Array.isArray(metallicRoughness.baseColorFactor)) {\n          const array = metallicRoughness.baseColorFactor;\n\n          materialParams.color.fromArray(array);\n          materialParams.opacity = array[3];\n        }\n\n        if (metallicRoughness.baseColorTexture !== undefined) {\n          pending.push(\n            parser.assignTexture(\n              materialParams,\n              \"map\",\n              metallicRoughness.baseColorTexture,\n              SRGBColorSpace\n            )\n          );\n        }\n\n        materialParams.metalness =\n          metallicRoughness.metallicFactor !== undefined\n            ? metallicRoughness.metallicFactor\n            : 1.0;\n        materialParams.roughness =\n          metallicRoughness.roughnessFactor !== undefined\n            ? metallicRoughness.roughnessFactor\n            : 1.0;\n\n        if (metallicRoughness.metallicRoughnessTexture !== undefined) {\n          pending.push(\n            parser.assignTexture(\n              materialParams,\n              \"metalnessMap\",\n              metallicRoughness.metallicRoughnessTexture\n            )\n          );\n          pending.push(\n            parser.assignTexture(\n              materialParams,\n              \"roughnessMap\",\n              metallicRoughness.metallicRoughnessTexture\n            )\n          );\n        }\n\n        materialType = this._invokeOne(function (ext) {\n          return ext.getMaterialType && ext.getMaterialType(materialIndex);\n        });\n\n        pending.push(\n          Promise.all(\n            this._invokeAll(function (ext) {\n              return (\n                ext.extendMaterialParams &&\n                ext.extendMaterialParams(materialIndex, materialParams)\n              );\n            })\n          )\n        );\n      }\n\n      if (materialDef.doubleSided === true) {\n        materialParams.side = DoubleSide;\n      }\n\n      const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n      if (alphaMode === ALPHA_MODES.BLEND) {\n        materialParams.transparent = true;\n\n        // See: https://github.com/mrdoob/three.js/issues/17706\n        materialParams.depthWrite = false;\n      } else {\n        materialParams.transparent = false;\n\n        if (alphaMode === ALPHA_MODES.MASK) {\n          materialParams.alphaTest =\n            materialDef.alphaCutoff !== undefined\n              ? materialDef.alphaCutoff\n              : 0.5;\n        }\n      }\n\n      if (\n        materialDef.normalTexture !== undefined &&\n        materialType !== MeshBasicMaterial\n      ) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"normalMap\",\n            materialDef.normalTexture\n          )\n        );\n\n        materialParams.normalScale = new Vector2(1, 1);\n\n        if (materialDef.normalTexture.scale !== undefined) {\n          const scale = materialDef.normalTexture.scale;\n\n          materialParams.normalScale.set(scale, scale);\n        }\n      }\n\n      if (\n        materialDef.occlusionTexture !== undefined &&\n        materialType !== MeshBasicMaterial\n      ) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"aoMap\",\n            materialDef.occlusionTexture\n          )\n        );\n\n        if (materialDef.occlusionTexture.strength !== undefined) {\n          materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n        }\n      }\n\n      if (\n        materialDef.emissiveFactor !== undefined &&\n        materialType !== MeshBasicMaterial\n      ) {\n        materialParams.emissive = new Color().fromArray(\n          materialDef.emissiveFactor\n        );\n      }\n\n      if (\n        materialDef.emissiveTexture !== undefined &&\n        materialType !== MeshBasicMaterial\n      ) {\n        pending.push(\n          parser.assignTexture(\n            materialParams,\n            \"emissiveMap\",\n            materialDef.emissiveTexture,\n            SRGBColorSpace\n          )\n        );\n      }\n\n      return Promise.all(pending).then(function () {\n        const material = new materialType(materialParams);\n\n        if (materialDef.name) material.name = materialDef.name;\n\n        assignExtrasToUserData(material, materialDef);\n\n        parser.associations.set(material, { materials: materialIndex });\n\n        if (materialDef.extensions)\n          addUnknownExtensionsToUserData(extensions, material, materialDef);\n\n        return material;\n      });\n    }\n\n    /** When Object3D instances are targeted by animation, they need unique names. */\n    createUniqueName(originalName) {\n      const sanitizedName = PropertyBinding.sanitizeNodeName(\n        originalName || \"\"\n      );\n\n      if (sanitizedName in this.nodeNamesUsed) {\n        return sanitizedName + \"_\" + ++this.nodeNamesUsed[sanitizedName];\n      } else {\n        this.nodeNamesUsed[sanitizedName] = 0;\n\n        return sanitizedName;\n      }\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n     *\n     * Creates BufferGeometries from primitives.\n     *\n     * @param {Array<GLTF.Primitive>} primitives\n     * @return {Promise<Array<BufferGeometry>>}\n     */\n    loadGeometries(primitives) {\n      const parser = this;\n      const extensions = this.extensions;\n      const cache = this.primitiveCache;\n\n      function createDracoPrimitive(primitive) {\n        return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]\n          .decodePrimitive(primitive, parser)\n          .then(function (geometry) {\n            return addPrimitiveAttributes(geometry, primitive, parser);\n          });\n      }\n\n      const pending = [];\n\n      for (let i = 0, il = primitives.length; i < il; i++) {\n        const primitive = primitives[i];\n        const cacheKey = createPrimitiveKey(primitive);\n\n        // See if we've already created this geometry\n        const cached = cache[cacheKey];\n\n        if (cached) {\n          // Use the cached geometry if it exists\n          pending.push(cached.promise);\n        } else {\n          let geometryPromise;\n\n          if (\n            primitive.extensions &&\n            primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]\n          ) {\n            // Use DRACO geometry if available\n            geometryPromise = createDracoPrimitive(primitive);\n          } else {\n            // Otherwise create a new geometry\n            geometryPromise = addPrimitiveAttributes(\n              new BufferGeometry(),\n              primitive,\n              parser\n            );\n          }\n\n          // Cache this geometry\n          cache[cacheKey] = { primitive: primitive, promise: geometryPromise };\n\n          pending.push(geometryPromise);\n        }\n      }\n\n      return Promise.all(pending);\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n     * @param {number} meshIndex\n     * @return {Promise<Group|Mesh|SkinnedMesh>}\n     */\n    loadMesh(meshIndex) {\n      const parser = this;\n      const json = this.json;\n      const extensions = this.extensions;\n\n      const meshDef = json.meshes[meshIndex];\n      const primitives = meshDef.primitives;\n\n      const pending = [];\n\n      for (let i = 0, il = primitives.length; i < il; i++) {\n        const material =\n          primitives[i].material === undefined\n            ? createDefaultMaterial(this.cache)\n            : this.getDependency(\"material\", primitives[i].material);\n\n        pending.push(material);\n      }\n\n      pending.push(parser.loadGeometries(primitives));\n\n      return Promise.all(pending).then(function (results) {\n        const materials = results.slice(0, results.length - 1);\n        const geometries = results[results.length - 1];\n\n        const meshes = [];\n\n        for (let i = 0, il = geometries.length; i < il; i++) {\n          const geometry = geometries[i];\n          const primitive = primitives[i];\n\n          // 1. create Mesh\n\n          let mesh;\n\n          const material = materials[i];\n\n          if (\n            primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n            primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n            primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n            primitive.mode === undefined\n          ) {\n            // .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n            mesh =\n              meshDef.isSkinnedMesh === true\n                ? new SkinnedMesh(geometry, material)\n                : new Mesh(geometry, material);\n\n            if (mesh.isSkinnedMesh === true) {\n              // normalize skin weights to fix malformed assets (see #15319)\n              mesh.normalizeSkinWeights();\n            }\n\n            if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {\n              mesh.geometry = toTrianglesDrawMode(\n                mesh.geometry,\n                TriangleStripDrawMode\n              );\n            } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {\n              mesh.geometry = toTrianglesDrawMode(\n                mesh.geometry,\n                TriangleFanDrawMode\n              );\n            }\n          } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {\n            mesh = new LineSegments(geometry, material);\n          } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {\n            mesh = new Line(geometry, material);\n          } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {\n            mesh = new LineLoop(geometry, material);\n          } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {\n            mesh = new Points(geometry, material);\n          } else {\n            throw new Error(\n              \"THREE.GLTFLoader: Primitive mode unsupported: \" + primitive.mode\n            );\n          }\n\n          if (Object.keys(mesh.geometry.morphAttributes).length > 0) {\n            updateMorphTargets(mesh, meshDef);\n          }\n\n          mesh.name = parser.createUniqueName(\n            meshDef.name || \"mesh_\" + meshIndex\n          );\n\n          assignExtrasToUserData(mesh, meshDef);\n\n          if (primitive.extensions)\n            addUnknownExtensionsToUserData(extensions, mesh, primitive);\n\n          parser.assignFinalMaterial(mesh);\n\n          meshes.push(mesh);\n        }\n\n        for (let i = 0, il = meshes.length; i < il; i++) {\n          parser.associations.set(meshes[i], {\n            meshes: meshIndex,\n            primitives: i,\n          });\n        }\n\n        if (meshes.length === 1) {\n          if (meshDef.extensions)\n            addUnknownExtensionsToUserData(extensions, meshes[0], meshDef);\n\n          return meshes[0];\n        }\n\n        const group = new Group();\n\n        if (meshDef.extensions)\n          addUnknownExtensionsToUserData(extensions, group, meshDef);\n\n        parser.associations.set(group, { meshes: meshIndex });\n\n        for (let i = 0, il = meshes.length; i < il; i++) {\n          group.add(meshes[i]);\n        }\n\n        return group;\n      });\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n     * @param {number} cameraIndex\n     * @return {Promise<THREE.Camera>}\n     */\n    loadCamera(cameraIndex) {\n      let camera;\n      const cameraDef = this.json.cameras[cameraIndex];\n      const params = cameraDef[cameraDef.type];\n\n      if (!params) {\n        console.warn(\"THREE.GLTFLoader: Missing camera parameters.\");\n        return;\n      }\n\n      if (cameraDef.type === \"perspective\") {\n        camera = new PerspectiveCamera(\n          MathUtils.radToDeg(params.yfov),\n          params.aspectRatio || 1,\n          params.znear || 1,\n          params.zfar || 2e6\n        );\n      } else if (cameraDef.type === \"orthographic\") {\n        camera = new OrthographicCamera(\n          -params.xmag,\n          params.xmag,\n          params.ymag,\n          -params.ymag,\n          params.znear,\n          params.zfar\n        );\n      }\n\n      if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name);\n\n      assignExtrasToUserData(camera, cameraDef);\n\n      return Promise.resolve(camera);\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n     * @param {number} skinIndex\n     * @return {Promise<Skeleton>}\n     */\n    loadSkin(skinIndex) {\n      const skinDef = this.json.skins[skinIndex];\n\n      const pending = [];\n\n      for (let i = 0, il = skinDef.joints.length; i < il; i++) {\n        pending.push(this._loadNodeShallow(skinDef.joints[i]));\n      }\n\n      if (skinDef.inverseBindMatrices !== undefined) {\n        pending.push(\n          this.getDependency(\"accessor\", skinDef.inverseBindMatrices)\n        );\n      } else {\n        pending.push(null);\n      }\n\n      return Promise.all(pending).then(function (results) {\n        const inverseBindMatrices = results.pop();\n        const jointNodes = results;\n\n        // Note that bones (joint nodes) may or may not be in the\n        // scene graph at this time.\n\n        const bones = [];\n        const boneInverses = [];\n\n        for (let i = 0, il = jointNodes.length; i < il; i++) {\n          const jointNode = jointNodes[i];\n\n          if (jointNode) {\n            bones.push(jointNode);\n\n            const mat = new Matrix4();\n\n            if (inverseBindMatrices !== null) {\n              mat.fromArray(inverseBindMatrices.array, i * 16);\n            }\n\n            boneInverses.push(mat);\n          } else {\n            console.warn(\n              'THREE.GLTFLoader: Joint \"%s\" could not be found.',\n              skinDef.joints[i]\n            );\n          }\n        }\n\n        return new Skeleton(bones, boneInverses);\n      });\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n     * @param {number} animationIndex\n     * @return {Promise<AnimationClip>}\n     */\n    loadAnimation(animationIndex) {\n      const json = this.json;\n      const parser = this;\n\n      const animationDef = json.animations[animationIndex];\n      const animationName = animationDef.name\n        ? animationDef.name\n        : \"animation_\" + animationIndex;\n\n      const pendingNodes = [];\n      const pendingInputAccessors = [];\n      const pendingOutputAccessors = [];\n      const pendingSamplers = [];\n      const pendingTargets = [];\n\n      for (let i = 0, il = animationDef.channels.length; i < il; i++) {\n        const channel = animationDef.channels[i];\n        const sampler = animationDef.samplers[channel.sampler];\n        const target = channel.target;\n        const name = target.node;\n        const input =\n          animationDef.parameters !== undefined\n            ? animationDef.parameters[sampler.input]\n            : sampler.input;\n        const output =\n          animationDef.parameters !== undefined\n            ? animationDef.parameters[sampler.output]\n            : sampler.output;\n\n        if (target.node === undefined) continue;\n\n        pendingNodes.push(this.getDependency(\"node\", name));\n        pendingInputAccessors.push(this.getDependency(\"accessor\", input));\n        pendingOutputAccessors.push(this.getDependency(\"accessor\", output));\n        pendingSamplers.push(sampler);\n        pendingTargets.push(target);\n      }\n\n      return Promise.all([\n        Promise.all(pendingNodes),\n        Promise.all(pendingInputAccessors),\n        Promise.all(pendingOutputAccessors),\n        Promise.all(pendingSamplers),\n        Promise.all(pendingTargets),\n      ]).then(function (dependencies) {\n        const nodes = dependencies[0];\n        const inputAccessors = dependencies[1];\n        const outputAccessors = dependencies[2];\n        const samplers = dependencies[3];\n        const targets = dependencies[4];\n\n        const tracks = [];\n\n        for (let i = 0, il = nodes.length; i < il; i++) {\n          const node = nodes[i];\n          const inputAccessor = inputAccessors[i];\n          const outputAccessor = outputAccessors[i];\n          const sampler = samplers[i];\n          const target = targets[i];\n\n          if (node === undefined) continue;\n\n          if (node.updateMatrix) {\n            node.updateMatrix();\n          }\n\n          const createdTracks = parser._createAnimationTracks(\n            node,\n            inputAccessor,\n            outputAccessor,\n            sampler,\n            target\n          );\n\n          if (createdTracks) {\n            for (let k = 0; k < createdTracks.length; k++) {\n              tracks.push(createdTracks[k]);\n            }\n          }\n        }\n\n        return new AnimationClip(animationName, undefined, tracks);\n      });\n    }\n\n    createNodeMesh(nodeIndex) {\n      const json = this.json;\n      const parser = this;\n      const nodeDef = json.nodes[nodeIndex];\n\n      if (nodeDef.mesh === undefined) return null;\n\n      return parser.getDependency(\"mesh\", nodeDef.mesh).then(function (mesh) {\n        const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh);\n\n        // if weights are provided on the node, override weights on the mesh.\n        if (nodeDef.weights !== undefined) {\n          node.traverse(function (o) {\n            if (!o.isMesh) return;\n\n            for (let i = 0, il = nodeDef.weights.length; i < il; i++) {\n              o.morphTargetInfluences[i] = nodeDef.weights[i];\n            }\n          });\n        }\n\n        return node;\n      });\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n     * @param {number} nodeIndex\n     * @return {Promise<Object3D>}\n     */\n    loadNode(nodeIndex) {\n      const json = this.json;\n      const parser = this;\n\n      const nodeDef = json.nodes[nodeIndex];\n\n      const nodePending = parser._loadNodeShallow(nodeIndex);\n\n      const childPending = [];\n      const childrenDef = nodeDef.children || [];\n\n      for (let i = 0, il = childrenDef.length; i < il; i++) {\n        childPending.push(parser.getDependency(\"node\", childrenDef[i]));\n      }\n\n      const skeletonPending =\n        nodeDef.skin === undefined\n          ? Promise.resolve(null)\n          : parser.getDependency(\"skin\", nodeDef.skin);\n\n      return Promise.all([\n        nodePending,\n        Promise.all(childPending),\n        skeletonPending,\n      ]).then(function (results) {\n        const node = results[0];\n        const children = results[1];\n        const skeleton = results[2];\n\n        if (skeleton !== null) {\n          // This full traverse should be fine because\n          // child glTF nodes have not been added to this node yet.\n          node.traverse(function (mesh) {\n            if (!mesh.isSkinnedMesh) return;\n\n            mesh.bind(skeleton, _identityMatrix);\n          });\n        }\n\n        for (let i = 0, il = children.length; i < il; i++) {\n          node.add(children[i]);\n        }\n\n        return node;\n      });\n    }\n\n    // ._loadNodeShallow() parses a single node.\n    // skin and child nodes are created and added in .loadNode() (no '_' prefix).\n    _loadNodeShallow(nodeIndex) {\n      const json = this.json;\n      const extensions = this.extensions;\n      const parser = this;\n\n      // This method is called from .loadNode() and .loadSkin().\n      // Cache a node to avoid duplication.\n\n      if (this.nodeCache[nodeIndex] !== undefined) {\n        return this.nodeCache[nodeIndex];\n      }\n\n      const nodeDef = json.nodes[nodeIndex];\n\n      // reserve node's name before its dependencies, so the root has the intended name.\n      const nodeName = nodeDef.name\n        ? parser.createUniqueName(nodeDef.name)\n        : \"\";\n\n      const pending = [];\n\n      const meshPromise = parser._invokeOne(function (ext) {\n        return ext.createNodeMesh && ext.createNodeMesh(nodeIndex);\n      });\n\n      if (meshPromise) {\n        pending.push(meshPromise);\n      }\n\n      if (nodeDef.camera !== undefined) {\n        pending.push(\n          parser\n            .getDependency(\"camera\", nodeDef.camera)\n            .then(function (camera) {\n              return parser._getNodeRef(\n                parser.cameraCache,\n                nodeDef.camera,\n                camera\n              );\n            })\n        );\n      }\n\n      parser\n        ._invokeAll(function (ext) {\n          return (\n            ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex)\n          );\n        })\n        .forEach(function (promise) {\n          pending.push(promise);\n        });\n\n      this.nodeCache[nodeIndex] = Promise.all(pending).then(function (objects) {\n        let node;\n\n        // .isBone isn't in glTF spec. See ._markDefs\n        if (nodeDef.isBone === true) {\n          node = new Bone();\n        } else if (objects.length > 1) {\n          node = new Group();\n        } else if (objects.length === 1) {\n          node = objects[0];\n        } else {\n          node = new Object3D();\n        }\n\n        if (node !== objects[0]) {\n          for (let i = 0, il = objects.length; i < il; i++) {\n            node.add(objects[i]);\n          }\n        }\n\n        if (nodeDef.name) {\n          node.userData.name = nodeDef.name;\n          node.name = nodeName;\n        }\n\n        assignExtrasToUserData(node, nodeDef);\n\n        if (nodeDef.extensions)\n          addUnknownExtensionsToUserData(extensions, node, nodeDef);\n\n        if (nodeDef.matrix !== undefined) {\n          const matrix = new Matrix4();\n          matrix.fromArray(nodeDef.matrix);\n          node.applyMatrix4(matrix);\n        } else {\n          if (nodeDef.translation !== undefined) {\n            node.position.fromArray(nodeDef.translation);\n          }\n\n          if (nodeDef.rotation !== undefined) {\n            node.quaternion.fromArray(nodeDef.rotation);\n          }\n\n          if (nodeDef.scale !== undefined) {\n            node.scale.fromArray(nodeDef.scale);\n          }\n        }\n\n        if (!parser.associations.has(node)) {\n          parser.associations.set(node, {});\n        }\n\n        parser.associations.get(node).nodes = nodeIndex;\n\n        return node;\n      });\n\n      return this.nodeCache[nodeIndex];\n    }\n\n    /**\n     * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n     * @param {number} sceneIndex\n     * @return {Promise<Group>}\n     */\n    loadScene(sceneIndex) {\n      const extensions = this.extensions;\n      const sceneDef = this.json.scenes[sceneIndex];\n      const parser = this;\n\n      // Loader returns Group, not Scene.\n      // See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n      const scene = new Group();\n      if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name);\n\n      assignExtrasToUserData(scene, sceneDef);\n\n      if (sceneDef.extensions)\n        addUnknownExtensionsToUserData(extensions, scene, sceneDef);\n\n      const nodeIds = sceneDef.nodes || [];\n\n      const pending = [];\n\n      for (let i = 0, il = nodeIds.length; i < il; i++) {\n        pending.push(parser.getDependency(\"node\", nodeIds[i]));\n      }\n\n      return Promise.all(pending).then(function (nodes) {\n        for (let i = 0, il = nodes.length; i < il; i++) {\n          scene.add(nodes[i]);\n        }\n\n        // Removes dangling associations, associations that reference a node that\n        // didn't make it into the scene.\n        const reduceAssociations = (node) => {\n          const reducedAssociations = new Map();\n\n          for (const [key, value] of parser.associations) {\n            if (key instanceof Material || key instanceof Texture) {\n              reducedAssociations.set(key, value);\n            }\n          }\n\n          node.traverse((node) => {\n            const mappings = parser.associations.get(node);\n\n            if (mappings != null) {\n              reducedAssociations.set(node, mappings);\n            }\n          });\n\n          return reducedAssociations;\n        };\n\n        parser.associations = reduceAssociations(scene);\n\n        return scene;\n      });\n    }\n\n    _createAnimationTracks(\n      node,\n      inputAccessor,\n      outputAccessor,\n      sampler,\n      target\n    ) {\n      const tracks = [];\n\n      const targetName = node.name ? node.name : node.uuid;\n      const targetNames = [];\n\n      if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {\n        node.traverse(function (object) {\n          if (object.morphTargetInfluences) {\n            targetNames.push(object.name ? object.name : object.uuid);\n          }\n        });\n      } else {\n        targetNames.push(targetName);\n      }\n\n      let TypedKeyframeTrack;\n\n      switch (PATH_PROPERTIES[target.path]) {\n        case PATH_PROPERTIES.weights:\n          TypedKeyframeTrack = NumberKeyframeTrack;\n          break;\n\n        case PATH_PROPERTIES.rotation:\n          TypedKeyframeTrack = QuaternionKeyframeTrack;\n          break;\n\n        case PATH_PROPERTIES.position:\n        case PATH_PROPERTIES.scale:\n          TypedKeyframeTrack = VectorKeyframeTrack;\n          break;\n\n        default:\n          switch (outputAccessor.itemSize) {\n            case 1:\n              TypedKeyframeTrack = NumberKeyframeTrack;\n              break;\n            case 2:\n            case 3:\n            default:\n              TypedKeyframeTrack = VectorKeyframeTrack;\n              break;\n          }\n\n          break;\n      }\n\n      const interpolation =\n        sampler.interpolation !== undefined\n          ? INTERPOLATION[sampler.interpolation]\n          : InterpolateLinear;\n\n      const outputArray = this._getArrayFromAccessor(outputAccessor);\n\n      for (let j = 0, jl = targetNames.length; j < jl; j++) {\n        const track = new TypedKeyframeTrack(\n          targetNames[j] + \".\" + PATH_PROPERTIES[target.path],\n          inputAccessor.array,\n          outputArray,\n          interpolation\n        );\n\n        // Override interpolation with custom factory method.\n        if (sampler.interpolation === \"CUBICSPLINE\") {\n          this._createCubicSplineTrackInterpolant(track);\n        }\n\n        tracks.push(track);\n      }\n\n      return tracks;\n    }\n\n    _getArrayFromAccessor(accessor) {\n      let outputArray = accessor.array;\n\n      if (accessor.normalized) {\n        const scale = getNormalizedComponentScale(outputArray.constructor);\n        const scaled = new Float32Array(outputArray.length);\n\n        for (let j = 0, jl = outputArray.length; j < jl; j++) {\n          scaled[j] = outputArray[j] * scale;\n        }\n\n        outputArray = scaled;\n      }\n\n      return outputArray;\n    }\n\n    _createCubicSplineTrackInterpolant(track) {\n      track.createInterpolant =\n        function InterpolantFactoryMethodGLTFCubicSpline(result) {\n          // A CUBICSPLINE keyframe in glTF has three output values for each input value,\n          // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n          // must be divided by three to get the interpolant's sampleSize argument.\n\n          const interpolantType =\n            this instanceof QuaternionKeyframeTrack\n              ? GLTFCubicSplineQuaternionInterpolant\n              : GLTFCubicSplineInterpolant;\n\n          return new interpolantType(\n            this.times,\n            this.values,\n            this.getValueSize() / 3,\n            result\n          );\n        };\n\n      // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n      track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n    }\n  }\n\n  /**\n   * @param {BufferGeometry} geometry\n   * @param {GLTF.Primitive} primitiveDef\n   * @param {GLTFParser} parser\n   */\n  function computeBounds(geometry, primitiveDef, parser) {\n    const attributes = primitiveDef.attributes;\n\n    const box = new Box3();\n\n    if (attributes.POSITION !== undefined) {\n      const accessor = parser.json.accessors[attributes.POSITION];\n\n      const min = accessor.min;\n      const max = accessor.max;\n\n      // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n      if (min !== undefined && max !== undefined) {\n        box.set(\n          new Vector3(min[0], min[1], min[2]),\n          new Vector3(max[0], max[1], max[2])\n        );\n\n        if (accessor.normalized) {\n          const boxScale = getNormalizedComponentScale(\n            WEBGL_COMPONENT_TYPES[accessor.componentType]\n          );\n          box.min.multiplyScalar(boxScale);\n          box.max.multiplyScalar(boxScale);\n        }\n      } else {\n        console.warn(\n          \"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\"\n        );\n\n        return;\n      }\n    } else {\n      return;\n    }\n\n    const targets = primitiveDef.targets;\n\n    if (targets !== undefined) {\n      const maxDisplacement = new Vector3();\n      const vector = new Vector3();\n\n      for (let i = 0, il = targets.length; i < il; i++) {\n        const target = targets[i];\n\n        if (target.POSITION !== undefined) {\n          const accessor = parser.json.accessors[target.POSITION];\n          const min = accessor.min;\n          const max = accessor.max;\n\n          // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n          if (min !== undefined && max !== undefined) {\n            // we need to get max of absolute components because target weight is [-1,1]\n            vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));\n            vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));\n            vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));\n\n            if (accessor.normalized) {\n              const boxScale = getNormalizedComponentScale(\n                WEBGL_COMPONENT_TYPES[accessor.componentType]\n              );\n              vector.multiplyScalar(boxScale);\n            }\n\n            // Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n            // to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n            // are used to implement key-frame animations and as such only two are active at a time - this results in very large\n            // boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n            maxDisplacement.max(vector);\n          } else {\n            console.warn(\n              \"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\"\n            );\n          }\n        }\n      }\n\n      // As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n      box.expandByVector(maxDisplacement);\n    }\n\n    geometry.boundingBox = box;\n\n    const sphere = new Sphere();\n\n    box.getCenter(sphere.center);\n    sphere.radius = box.min.distanceTo(box.max) / 2;\n\n    geometry.boundingSphere = sphere;\n  }\n\n  /**\n   * @param {BufferGeometry} geometry\n   * @param {GLTF.Primitive} primitiveDef\n   * @param {GLTFParser} parser\n   * @return {Promise<BufferGeometry>}\n   */\n  function addPrimitiveAttributes(geometry, primitiveDef, parser) {\n    const attributes = primitiveDef.attributes;\n\n    const pending = [];\n\n    function assignAttributeAccessor(accessorIndex, attributeName) {\n      return parser\n        .getDependency(\"accessor\", accessorIndex)\n        .then(function (accessor) {\n          geometry.setAttribute(attributeName, accessor);\n        });\n    }\n\n    for (const gltfAttributeName in attributes) {\n      const threeAttributeName =\n        ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();\n\n      // Skip attributes already provided by e.g. Draco extension.\n      if (threeAttributeName in geometry.attributes) continue;\n\n      pending.push(\n        assignAttributeAccessor(\n          attributes[gltfAttributeName],\n          threeAttributeName\n        )\n      );\n    }\n\n    if (primitiveDef.indices !== undefined && !geometry.index) {\n      const accessor = parser\n        .getDependency(\"accessor\", primitiveDef.indices)\n        .then(function (accessor) {\n          geometry.setIndex(accessor);\n        });\n\n      pending.push(accessor);\n    }\n\n    assignExtrasToUserData(geometry, primitiveDef);\n\n    computeBounds(geometry, primitiveDef, parser);\n\n    return Promise.all(pending).then(function () {\n      return primitiveDef.targets !== undefined\n        ? addMorphTargets(geometry, primitiveDef.targets, parser)\n        : geometry;\n    });\n  }\n\n  const GLTFLoader$1 = /*#__PURE__*/ Object.freeze(\n    /*#__PURE__*/ Object.defineProperty(\n      {\n        __proto__: null,\n        GLTFLoader,\n      },\n      Symbol.toStringTag,\n      { value: \"Module\" }\n    )\n  );\n\n  const _taskCache = new WeakMap();\n\n  class DRACOLoader extends Loader {\n    constructor(manager) {\n      super(manager);\n\n      this.decoderPath = \"\";\n      this.decoderConfig = {};\n      this.decoderBinary = null;\n      this.decoderPending = null;\n\n      this.workerLimit = 4;\n      this.workerPool = [];\n      this.workerNextTaskID = 1;\n      this.workerSourceURL = \"\";\n\n      this.defaultAttributeIDs = {\n        position: \"POSITION\",\n        normal: \"NORMAL\",\n        color: \"COLOR\",\n        uv: \"TEX_COORD\",\n      };\n      this.defaultAttributeTypes = {\n        position: \"Float32Array\",\n        normal: \"Float32Array\",\n        color: \"Float32Array\",\n        uv: \"Float32Array\",\n      };\n    }\n\n    setDecoderPath(path) {\n      this.decoderPath = path;\n\n      return this;\n    }\n\n    setDecoderConfig(config) {\n      this.decoderConfig = config;\n\n      return this;\n    }\n\n    setWorkerLimit(workerLimit) {\n      this.workerLimit = workerLimit;\n\n      return this;\n    }\n\n    load(url, onLoad, onProgress, onError) {\n      const loader = new FileLoader(this.manager);\n\n      loader.setPath(this.path);\n      loader.setResponseType(\"arraybuffer\");\n      loader.setRequestHeader(this.requestHeader);\n      loader.setWithCredentials(this.withCredentials);\n\n      loader.load(\n        url,\n        (buffer) => {\n          this.parse(buffer, onLoad, onError);\n        },\n        onProgress,\n        onError\n      );\n    }\n\n    parse(buffer, onLoad, onError) {\n      this.decodeDracoFile(buffer, onLoad, null, null, SRGBColorSpace).catch(\n        onError\n      );\n    }\n\n    decodeDracoFile(\n      buffer,\n      callback,\n      attributeIDs,\n      attributeTypes,\n      vertexColorSpace = LinearSRGBColorSpace\n    ) {\n      const taskConfig = {\n        attributeIDs: attributeIDs || this.defaultAttributeIDs,\n        attributeTypes: attributeTypes || this.defaultAttributeTypes,\n        useUniqueIDs: !!attributeIDs,\n        vertexColorSpace: vertexColorSpace,\n      };\n\n      return this.decodeGeometry(buffer, taskConfig).then(callback);\n    }\n\n    decodeGeometry(buffer, taskConfig) {\n      const taskKey = JSON.stringify(taskConfig);\n\n      // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n      // again from this thread.\n      if (_taskCache.has(buffer)) {\n        const cachedTask = _taskCache.get(buffer);\n\n        if (cachedTask.key === taskKey) {\n          return cachedTask.promise;\n        } else if (buffer.byteLength === 0) {\n          // Technically, it would be possible to wait for the previous task to complete,\n          // transfer the buffer back, and decode again with the second configuration. That\n          // is complex, and I don't know of any reason to decode a Draco buffer twice in\n          // different ways, so this is left unimplemented.\n          throw new Error(\n            \"THREE.DRACOLoader: Unable to re-decode a buffer with different \" +\n              \"settings. Buffer has already been transferred.\"\n          );\n        }\n      }\n\n      //\n\n      let worker;\n      const taskID = this.workerNextTaskID++;\n      const taskCost = buffer.byteLength;\n\n      // Obtain a worker and assign a task, and construct a geometry instance\n      // when the task completes.\n      const geometryPending = this._getWorker(taskID, taskCost)\n        .then((_worker) => {\n          worker = _worker;\n\n          return new Promise((resolve, reject) => {\n            worker._callbacks[taskID] = { resolve, reject };\n\n            worker.postMessage(\n              { type: \"decode\", id: taskID, taskConfig, buffer },\n              [buffer]\n            );\n\n            // this.debug();\n          });\n        })\n        .then((message) => this._createGeometry(message.geometry));\n\n      // Remove task from the task list.\n      // Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n      geometryPending\n        .catch(() => true)\n        .then(() => {\n          if (worker && taskID) {\n            this._releaseTask(worker, taskID);\n\n            // this.debug();\n          }\n        });\n\n      // Cache the task result.\n      _taskCache.set(buffer, {\n        key: taskKey,\n        promise: geometryPending,\n      });\n\n      return geometryPending;\n    }\n\n    _createGeometry(geometryData) {\n      const geometry = new BufferGeometry();\n\n      if (geometryData.index) {\n        geometry.setIndex(new BufferAttribute(geometryData.index.array, 1));\n      }\n\n      for (let i = 0; i < geometryData.attributes.length; i++) {\n        const result = geometryData.attributes[i];\n        const name = result.name;\n        const array = result.array;\n        const itemSize = result.itemSize;\n\n        const attribute = new BufferAttribute(array, itemSize);\n\n        if (name === \"color\") {\n          this._assignVertexColorSpace(attribute, result.vertexColorSpace);\n\n          attribute.normalized = array instanceof Float32Array === false;\n        }\n\n        geometry.setAttribute(name, attribute);\n      }\n\n      return geometry;\n    }\n\n    _assignVertexColorSpace(attribute, inputColorSpace) {\n      // While .drc files do not specify colorspace, the only 'official' tooling\n      // is PLY and OBJ converters, which use sRGB. We'll assume sRGB when a .drc\n      // file is passed into .load() or .parse(). GLTFLoader uses internal APIs\n      // to decode geometry, and vertex colors are already Linear-sRGB in there.\n\n      if (inputColorSpace !== SRGBColorSpace) return;\n\n      const _color = new Color();\n\n      for (let i = 0, il = attribute.count; i < il; i++) {\n        _color.fromBufferAttribute(attribute, i).convertSRGBToLinear();\n        attribute.setXYZ(i, _color.r, _color.g, _color.b);\n      }\n    }\n\n    _loadLibrary(url, responseType) {\n      const loader = new FileLoader(this.manager);\n      loader.setPath(this.decoderPath);\n      loader.setResponseType(responseType);\n      loader.setWithCredentials(this.withCredentials);\n\n      return new Promise((resolve, reject) => {\n        loader.load(url, resolve, undefined, reject);\n      });\n    }\n\n    preload() {\n      this._initDecoder();\n\n      return this;\n    }\n\n    _initDecoder() {\n      if (this.decoderPending) return this.decoderPending;\n\n      const useJS =\n        typeof WebAssembly !== \"object\" || this.decoderConfig.type === \"js\";\n      const librariesPending = [];\n\n      if (useJS) {\n        librariesPending.push(this._loadLibrary(\"draco_decoder.js\", \"text\"));\n      } else {\n        librariesPending.push(\n          this._loadLibrary(\"draco_wasm_wrapper.js\", \"text\")\n        );\n        librariesPending.push(\n          this._loadLibrary(\"draco_decoder.wasm\", \"arraybuffer\")\n        );\n      }\n\n      this.decoderPending = Promise.all(librariesPending).then((libraries) => {\n        const jsContent = libraries[0];\n\n        if (!useJS) {\n          this.decoderConfig.wasmBinary = libraries[1];\n        }\n\n        const fn = DRACOWorker.toString();\n\n        const body = [\n          \"/* draco decoder */\",\n          jsContent,\n          \"\",\n          \"/* worker */\",\n          fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\")),\n        ].join(\"\\n\");\n\n        this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n      });\n\n      return this.decoderPending;\n    }\n\n    _getWorker(taskID, taskCost) {\n      return this._initDecoder().then(() => {\n        if (this.workerPool.length < this.workerLimit) {\n          const worker = new Worker(this.workerSourceURL);\n\n          worker._callbacks = {};\n          worker._taskCosts = {};\n          worker._taskLoad = 0;\n\n          worker.postMessage({\n            type: \"init\",\n            decoderConfig: this.decoderConfig,\n          });\n\n          worker.onmessage = function (e) {\n            const message = e.data;\n\n            switch (message.type) {\n              case \"decode\":\n                worker._callbacks[message.id].resolve(message);\n                break;\n\n              case \"error\":\n                worker._callbacks[message.id].reject(message);\n                break;\n\n              default:\n                console.error(\n                  'THREE.DRACOLoader: Unexpected message, \"' +\n                    message.type +\n                    '\"'\n                );\n            }\n          };\n\n          this.workerPool.push(worker);\n        } else {\n          this.workerPool.sort(function (a, b) {\n            return a._taskLoad > b._taskLoad ? -1 : 1;\n          });\n        }\n\n        const worker = this.workerPool[this.workerPool.length - 1];\n        worker._taskCosts[taskID] = taskCost;\n        worker._taskLoad += taskCost;\n        return worker;\n      });\n    }\n\n    _releaseTask(worker, taskID) {\n      worker._taskLoad -= worker._taskCosts[taskID];\n      delete worker._callbacks[taskID];\n      delete worker._taskCosts[taskID];\n    }\n\n    debug() {\n      console.log(\n        \"Task load: \",\n        this.workerPool.map((worker) => worker._taskLoad)\n      );\n    }\n\n    dispose() {\n      for (let i = 0; i < this.workerPool.length; ++i) {\n        this.workerPool[i].terminate();\n      }\n\n      this.workerPool.length = 0;\n\n      if (this.workerSourceURL !== \"\") {\n        URL.revokeObjectURL(this.workerSourceURL);\n      }\n\n      return this;\n    }\n  }\n\n  /* WEB WORKER */\n\n  function DRACOWorker() {\n    let decoderConfig;\n    let decoderPending;\n\n    onmessage = function (e) {\n      const message = e.data;\n\n      switch (message.type) {\n        case \"init\":\n          decoderConfig = message.decoderConfig;\n          decoderPending = new Promise(function (resolve /*, reject*/) {\n            decoderConfig.onModuleLoaded = function (draco) {\n              // Module is Promise-like. Wrap before resolving to avoid loop.\n              resolve({ draco: draco });\n            };\n\n            DracoDecoderModule(decoderConfig); // eslint-disable-line no-undef\n          });\n          break;\n\n        case \"decode\":\n          const buffer = message.buffer;\n          const taskConfig = message.taskConfig;\n          decoderPending.then((module) => {\n            const draco = module.draco;\n            const decoder = new draco.Decoder();\n\n            try {\n              const geometry = decodeGeometry(\n                draco,\n                decoder,\n                new Int8Array(buffer),\n                taskConfig\n              );\n\n              const buffers = geometry.attributes.map(\n                (attr) => attr.array.buffer\n              );\n\n              if (geometry.index) buffers.push(geometry.index.array.buffer);\n\n              self.postMessage(\n                { type: \"decode\", id: message.id, geometry },\n                buffers\n              );\n            } catch (error) {\n              console.error(error);\n\n              self.postMessage({\n                type: \"error\",\n                id: message.id,\n                error: error.message,\n              });\n            } finally {\n              draco.destroy(decoder);\n            }\n          });\n          break;\n      }\n    };\n\n    function decodeGeometry(draco, decoder, array, taskConfig) {\n      const attributeIDs = taskConfig.attributeIDs;\n      const attributeTypes = taskConfig.attributeTypes;\n\n      let dracoGeometry;\n      let decodingStatus;\n\n      const geometryType = decoder.GetEncodedGeometryType(array);\n\n      if (geometryType === draco.TRIANGULAR_MESH) {\n        dracoGeometry = new draco.Mesh();\n        decodingStatus = decoder.DecodeArrayToMesh(\n          array,\n          array.byteLength,\n          dracoGeometry\n        );\n      } else if (geometryType === draco.POINT_CLOUD) {\n        dracoGeometry = new draco.PointCloud();\n        decodingStatus = decoder.DecodeArrayToPointCloud(\n          array,\n          array.byteLength,\n          dracoGeometry\n        );\n      } else {\n        throw new Error(\"THREE.DRACOLoader: Unexpected geometry type.\");\n      }\n\n      if (!decodingStatus.ok() || dracoGeometry.ptr === 0) {\n        throw new Error(\n          \"THREE.DRACOLoader: Decoding failed: \" + decodingStatus.error_msg()\n        );\n      }\n\n      const geometry = { index: null, attributes: [] };\n\n      // Gather all vertex attributes.\n      for (const attributeName in attributeIDs) {\n        const attributeType = self[attributeTypes[attributeName]];\n\n        let attribute;\n        let attributeID;\n\n        // A Draco file may be created with default vertex attributes, whose attribute IDs\n        // are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n        // a Draco file may contain a custom set of attributes, identified by known unique\n        // IDs. glTF files always do the latter, and `.drc` files typically do the former.\n        if (taskConfig.useUniqueIDs) {\n          attributeID = attributeIDs[attributeName];\n          attribute = decoder.GetAttributeByUniqueId(\n            dracoGeometry,\n            attributeID\n          );\n        } else {\n          attributeID = decoder.GetAttributeId(\n            dracoGeometry,\n            draco[attributeIDs[attributeName]]\n          );\n\n          if (attributeID === -1) continue;\n\n          attribute = decoder.GetAttribute(dracoGeometry, attributeID);\n        }\n\n        const attributeResult = decodeAttribute(\n          draco,\n          decoder,\n          dracoGeometry,\n          attributeName,\n          attributeType,\n          attribute\n        );\n\n        if (attributeName === \"color\") {\n          attributeResult.vertexColorSpace = taskConfig.vertexColorSpace;\n        }\n\n        geometry.attributes.push(attributeResult);\n      }\n\n      // Add index.\n      if (geometryType === draco.TRIANGULAR_MESH) {\n        geometry.index = decodeIndex(draco, decoder, dracoGeometry);\n      }\n\n      draco.destroy(dracoGeometry);\n\n      return geometry;\n    }\n\n    function decodeIndex(draco, decoder, dracoGeometry) {\n      const numFaces = dracoGeometry.num_faces();\n      const numIndices = numFaces * 3;\n      const byteLength = numIndices * 4;\n\n      const ptr = draco._malloc(byteLength);\n      decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n      const index = new Uint32Array(\n        draco.HEAPF32.buffer,\n        ptr,\n        numIndices\n      ).slice();\n      draco._free(ptr);\n\n      return { array: index, itemSize: 1 };\n    }\n\n    function decodeAttribute(\n      draco,\n      decoder,\n      dracoGeometry,\n      attributeName,\n      attributeType,\n      attribute\n    ) {\n      const numComponents = attribute.num_components();\n      const numPoints = dracoGeometry.num_points();\n      const numValues = numPoints * numComponents;\n      const byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n      const dataType = getDracoDataType(draco, attributeType);\n\n      const ptr = draco._malloc(byteLength);\n      decoder.GetAttributeDataArrayForAllPoints(\n        dracoGeometry,\n        attribute,\n        dataType,\n        byteLength,\n        ptr\n      );\n      const array = new attributeType(\n        draco.HEAPF32.buffer,\n        ptr,\n        numValues\n      ).slice();\n      draco._free(ptr);\n\n      return {\n        name: attributeName,\n        array: array,\n        itemSize: numComponents,\n      };\n    }\n\n    function getDracoDataType(draco, attributeType) {\n      switch (attributeType) {\n        case Float32Array:\n          return draco.DT_FLOAT32;\n        case Int8Array:\n          return draco.DT_INT8;\n        case Int16Array:\n          return draco.DT_INT16;\n        case Int32Array:\n          return draco.DT_INT32;\n        case Uint8Array:\n          return draco.DT_UINT8;\n        case Uint16Array:\n          return draco.DT_UINT16;\n        case Uint32Array:\n          return draco.DT_UINT32;\n      }\n    }\n  }\n\n  const DRACOLoader$1 = /*#__PURE__*/ Object.freeze(\n    /*#__PURE__*/ Object.defineProperty(\n      {\n        __proto__: null,\n        DRACOLoader,\n      },\n      Symbol.toStringTag,\n      { value: \"Module\" }\n    )\n  );\n\n  exports.linkIntoEngine = linkIntoEngine;\n  exports.makeShadeupEngine = makeShadeupEngine;\n\n  Object.defineProperty(exports, Symbol.toStringTag, { value: \"Module\" });\n});\n"
  },
  {
    "path": "package/index.js",
    "content": "import {\n  linkIntoEngine,\n  makeShadeupEngine,\n} from \"./engine-dist/shadeup-engine.js\";\nimport { linkShadeupLibrary } from \"./library.js\";\n\nexport const bindShadeupEngine = (fn) => {\n  return async (canvas, options) => {\n    const engine = await import(\"./engine\");\n    const localEngineContext = await makeShadeupEngine(canvas, options);\n    if (options && options.ui) {\n      await localEngineContext.enableUI();\n    }\n    await linkIntoEngine(localEngineContext, (def) => {\n      linkShadeupLibrary(def, localEngineContext);\n      fn(def, localEngineContext);\n    });\n    return localEngineContext;\n  };\n};\n"
  },
  {
    "path": "package/library.js",
    "content": "// Generated file\nexport const linkShadeupLibrary = (define, localEngineContext) => {\nconst __shadeup_gen_shader =\nlocalEngineContext.__shadeup_gen_shader.bind(localEngineContext);\nconst __shadeup_make_shader_inst =\nlocalEngineContext.__shadeup_make_shader_inst.bind(localEngineContext);\nconst __shadeup_register_struct =\nlocalEngineContext.__shadeup_register_struct.bind(localEngineContext);\nconst env = localEngineContext.env;\n\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/file.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    var globalVarGet = std___std_all_1.globalVarGet;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/std_math.js\", deps, func);\n\tvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\ndefine([\"require\", \"exports\", \"./static-math\"], function (require, exports, static_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.unpack2x16float = exports.unpack2x16unorm = exports.unpack2x16snorm = exports.unpack4x8unorm = exports.unpack4x8snorm = exports.pack2x16float = exports.pack2x16unorm = exports.pack2x16snorm = exports.pack4x8unorm = exports.pack4x8snorm = exports.bitcast = exports.ddyCoarse = exports.ddxCoarse = exports.ddyFine = exports.ddxFine = exports.ddy = exports.ddx = exports.discard = exports.workgroupUniformLoad = exports.storageBarrier = exports.workgroupBarrier = exports.atomic = exports.atomic_internal = exports.FM = exports.intifyVector = exports.swizzle = exports.testDocComment = exports.makeVector = exports.not = exports.or = exports.and = exports.gte = exports.gt = exports.lte = exports.lt = exports.neq = exports.eq = exports.saturate = exports.clamp = exports.max = exports.min = exports.smoothstep = exports.step = exports.radians = exports.degrees = exports.refract = exports.reflect = exports.normalize = exports.distance = exports.dist = exports.length = exports.bilerp = exports.lerp = exports.dot = exports.cross = exports.pingpong = exports.rand3 = exports.rand2 = exports.rand = exports.wrap = exports.frac = exports.inversesqrt = exports.sqrt = exports.log10 = exports.log2 = exports.log = exports.exp = exports.atanh = exports.asinh = exports.acosh = exports.tanh = exports.sinh = exports.cosh = exports.atan2 = exports.atan = exports.asin = exports.acos = exports.tan = exports.sin = exports.cos = exports.sign = exports.round = exports.ceil = exports.floor = exports.abs = exports.positive = exports.negate = exports.bitnot = exports.rshift = exports.lshift = exports.bitxor = exports.bitor = exports.bitand = exports.mod = exports.pow = exports.div = exports.mul = exports.transpose = exports.inverse = exports.sub = exports.add = exports.uint8 = exports.uint4 = exports.uint3 = exports.uint2 = exports.int4 = exports.int3 = exports.int2 = exports.float4 = exports.float3 = exports.float2 = exports.uint = exports.int = exports.float = exports.float4x4 = exports.float3x3 = exports.float2x2 = void 0;\n    function isVector(v) {\n        return Array.isArray(v);\n    }\n    function isScalar(v) {\n        return typeof v === 'number';\n    }\n    function isMatrix(v) {\n        return !!v.__matrix;\n    }\n    /** @shadeup=glsl(mat2) @shadeup=wgsl(mat2x2<f32>) */\n    function float2x2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0];\n        if (args.length === 4) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix2x2Methods(arr);\n        return arr;\n    }\n    exports.float2x2 = float2x2;\n    /** @shadeup=glsl(mat3) @shadeup=wgsl(mat3x3<f32>) */\n    function float3x3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 9) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix3x3Methods(arr);\n        return arr;\n    }\n    exports.float3x3 = float3x3;\n    function applyMatrix4x4Methods(arr) {\n        arr.__matrix = 4;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 4], arr[index * 4 + 1], arr[index * 4 + 2], arr[index * 4 + 3]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 4 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 4 + index_inner] = op_fn(arr[index * 4 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 4] = value[0];\n            arr[index * 4 + 1] = value[1];\n            arr[index * 4 + 2] = value[2];\n            arr[index * 4 + 3] = value[3];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 4] = op_fn(arr[index * 4], value[0]);\n            arr[index * 4 + 1] = op_fn(arr[index * 4 + 1], value[1]);\n            arr[index * 4 + 2] = op_fn(arr[index * 4 + 2], value[2]);\n            arr[index * 4 + 3] = op_fn(arr[index * 4 + 3], value[3]);\n        };\n    }\n    window.applyMatrix4x4Methods = applyMatrix4x4Methods;\n    function applyMatrix3x3Methods(arr) {\n        arr.__matrix = 3;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 3], arr[index * 3 + 1], arr[index * 3 + 2]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 3 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 3 + index_inner] = op_fn(arr[index * 3 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 3] = value[0];\n            arr[index * 3 + 1] = value[1];\n            arr[index * 3 + 2] = value[2];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 3] = op_fn(arr[index * 3], value[0]);\n            arr[index * 3 + 1] = op_fn(arr[index * 3 + 1], value[1]);\n            arr[index * 3 + 2] = op_fn(arr[index * 3 + 2], value[2]);\n        };\n    }\n    window.applyMatrix3x3Methods = applyMatrix3x3Methods;\n    function applyMatrix2x2Methods(arr) {\n        arr.__matrix = 2;\n        arr.__index = function (index) {\n            var out_arr = [arr[index * 2], arr[index * 2 + 1]];\n            out_arr.__index = function (index_inner) {\n                return out_arr[index_inner];\n            };\n            out_arr.__index_assign = function (index_inner, value) {\n                arr[index * 2 + index_inner] = value;\n            };\n            out_arr.__index_assign_op = function (op_fn, index_inner, value) {\n                arr[index * 2 + index_inner] = op_fn(arr[index * 2 + index_inner], value);\n            };\n            return out_arr;\n        };\n        arr.__index_assign = function (index, value) {\n            arr[index * 2] = value[0];\n            arr[index * 2 + 1] = value[1];\n        };\n        arr.__index_assign_op = function (op_fn, index, value) {\n            arr[index * 2] = op_fn(arr[index * 2], value[0]);\n            arr[index * 2 + 1] = op_fn(arr[index * 2 + 1], value[1]);\n        };\n    }\n    window.applyMatrix2x2Methods = applyMatrix2x2Methods;\n    /** @shadeup=glsl(mat4) @shadeup=wgsl(mat4x4<f32>) */\n    function float4x4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        if (args.length === 16) {\n            arr = __spreadArray([], args, true);\n        }\n        applyMatrix4x4Methods(arr);\n        return arr;\n    }\n    exports.float4x4 = float4x4;\n    /** @shadeup=glsl(float) @shadeup=wgsl(f32) */\n    function float(x) {\n        return x;\n    }\n    exports.float = float;\n    /** @shadeup=glsl(int) @shadeup=wgsl(i32) */\n    function int(x) {\n        return (x | 0);\n    }\n    exports.int = int;\n    /** @shadeup=glsl(uint) @shadeup=wgsl(u32) */\n    function uint(x) {\n        return (x >>> 0);\n    }\n    exports.uint = uint;\n    /** @shadeup=glsl(float2) @shadeup=wgsl(vec2<f32>) */\n    function float2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float2 = float2;\n    /** @shadeup=glsl(float3) @shadeup=wgsl(vec3<f32>) */\n    function float3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float3 = float3;\n    /** @shadeup=glsl(float4) @shadeup=wgsl(vec4<f32>) */\n    function float4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat();\n    }\n    exports.float4 = float4;\n    /** @shadeup=glsl(int2) @shadeup=wgsl(vec2<i32>) */\n    function int2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int2 = int2;\n    /** @shadeup=glsl(int3) @shadeup=wgsl(vec3<i32>) */\n    function int3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int3 = int3;\n    /** @shadeup=glsl(int4) @shadeup=wgsl(vec4<i32>) */\n    function int4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x | 0; });\n    }\n    exports.int4 = int4;\n    function uint2() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint2 = uint2;\n    function uint3() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint3 = uint3;\n    function uint4() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args.flat().map(function (x) { return x >>> 0; });\n    }\n    exports.uint4 = uint4;\n    function uint8(x) {\n        return ((x >>> 0) & 0xff);\n    }\n    exports.uint8 = uint8;\n    function componentMath(a, b, f) {\n        var aIsScalar = isScalar(a);\n        var bIsScalar = isScalar(b);\n        if (aIsScalar && bIsScalar) {\n            return f(a, b);\n        }\n        if (!aIsScalar && !bIsScalar) {\n            if (a.length !== b.length) {\n                throw new Error('Cannot perform component-wise math on vectors of different lengths');\n            }\n            // return a.map((a, i) => f(a, b[i])) as vector;\n            if (a.length == 2) {\n                return [f(a[0], b[0]), f(a[1], b[1])];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2])];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b[0]), f(a[1], b[1]), f(a[2], b[2]), f(a[3], b[3])];\n            }\n        }\n        else if (!aIsScalar && bIsScalar) {\n            if (a.length == 2) {\n                return [f(a[0], b), f(a[1], b)];\n            }\n            else if (a.length == 3) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b)];\n            }\n            else if (a.length == 4) {\n                return [f(a[0], b), f(a[1], b), f(a[2], b), f(a[3], b)];\n            }\n        }\n        else if (!bIsScalar && aIsScalar) {\n            if (b.length == 2) {\n                return [f(a, b[0]), f(a, b[1])];\n            }\n            else if (b.length == 3) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2])];\n            }\n            else if (b.length == 4) {\n                return [f(a, b[0]), f(a, b[1]), f(a, b[2]), f(a, b[3])];\n            }\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function componentMathSingular(a, f) {\n        if (isScalar(a)) {\n            return f(a);\n        }\n        if (isVector(a)) {\n            return a.map(function (a, i) { return f(a); });\n        }\n        throw new Error('Cannot perform component-wise math on a scalar and a vector');\n    }\n    function cCall(cb, a, b) {\n        return componentMath(a, b, function (a, b) { return a + b; });\n    }\n    function componentOp(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpMatch(cb) {\n        return function (a, b) { return componentMath(a, b, cb); };\n    }\n    function componentOpSingular(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    function componentOpSingularFloat(cb) {\n        return function (a) { return componentMathSingular(a, cb); };\n    }\n    /** @shadeup=univ(!$0$ + $1$)*/\n    var add = function (a, b) {\n        if (typeof a === 'string' && typeof b === 'string') {\n            return \"\".concat(a).concat(b);\n        }\n        else {\n            var addOp = componentOp(function (a, b) { return a + b; });\n            var v = addOp(a, b);\n            return v;\n        }\n    };\n    exports.add = add;\n    /** @shadeup=univ(!$0$ - $1$)*/\n    exports.sub = componentOp(function (a, b) { return a - b; });\n    function matrixMul(a, b) {\n        // Multiply two square matrices of the same dimension row-major\n        var dimension = a.__matrix;\n        var out;\n        if (dimension === 2) {\n            out = float2x2();\n        }\n        else if (dimension === 3) {\n            out = float3x3();\n        }\n        else if (dimension === 4) {\n            var a00 = a[0 * 4 + 0];\n            var a01 = a[0 * 4 + 1];\n            var a02 = a[0 * 4 + 2];\n            var a03 = a[0 * 4 + 3];\n            var a10 = a[1 * 4 + 0];\n            var a11 = a[1 * 4 + 1];\n            var a12 = a[1 * 4 + 2];\n            var a13 = a[1 * 4 + 3];\n            var a20 = a[2 * 4 + 0];\n            var a21 = a[2 * 4 + 1];\n            var a22 = a[2 * 4 + 2];\n            var a23 = a[2 * 4 + 3];\n            var a30 = a[3 * 4 + 0];\n            var a31 = a[3 * 4 + 1];\n            var a32 = a[3 * 4 + 2];\n            var a33 = a[3 * 4 + 3];\n            var b00 = b[0 * 4 + 0];\n            var b01 = b[0 * 4 + 1];\n            var b02 = b[0 * 4 + 2];\n            var b03 = b[0 * 4 + 3];\n            var b10 = b[1 * 4 + 0];\n            var b11 = b[1 * 4 + 1];\n            var b12 = b[1 * 4 + 2];\n            var b13 = b[1 * 4 + 3];\n            var b20 = b[2 * 4 + 0];\n            var b21 = b[2 * 4 + 1];\n            var b22 = b[2 * 4 + 2];\n            var b23 = b[2 * 4 + 3];\n            var b30 = b[3 * 4 + 0];\n            var b31 = b[3 * 4 + 1];\n            var b32 = b[3 * 4 + 2];\n            var b33 = b[3 * 4 + 3];\n            return float4x4(b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30, b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31, b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32, b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33, b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30, b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31, b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32, b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33, b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30, b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31, b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32, b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33, b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30, b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31, b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32, b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33);\n            out = float4x4();\n        }\n        for (var i = 0; i < dimension; i++) {\n            for (var j = 0; j < dimension; j++) {\n                var sum = float(0);\n                for (var k = 0; k < dimension; k++) {\n                    sum += float(a[i * dimension + k] * b[k * dimension + j]);\n                }\n                out[i * dimension + j] = sum;\n            }\n        }\n        return out;\n        if (a.__matrix === 2 && b.__matrix === 2) {\n            var a00_1 = a[0];\n            var a01_1 = a[1];\n            var a10_1 = a[2];\n            var a11_1 = a[3];\n            var b00_1 = b[0];\n            var b01_1 = b[1];\n            var b10_1 = b[2];\n            var b11_1 = b[3];\n            var v = float2x2(a00_1 * b00_1 + a01_1 * b10_1, a00_1 * b01_1 + a01_1 * b11_1, a10_1 * b00_1 + a11_1 * b10_1, a10_1 * b01_1 + a11_1 * b11_1);\n            return v;\n        }\n        else if (a.__matrix === 3 && b.__matrix === 3) {\n            var a00_2 = a[0];\n            var a01_2 = a[1];\n            var a02_1 = a[2];\n            var a10_2 = a[3];\n            var a11_2 = a[4];\n            var a12_1 = a[5];\n            var a20_1 = a[6];\n            var a21_1 = a[7];\n            var a22_1 = a[8];\n            var b00_2 = b[0];\n            var b01_2 = b[1];\n            var b02_1 = b[2];\n            var b10_2 = b[3];\n            var b11_2 = b[4];\n            var b12_1 = b[5];\n            var b20_1 = b[6];\n            var b21_1 = b[7];\n            var b22_1 = b[8];\n            var v = float3x3(a00_2 * b00_2 + a01_2 * b10_2 + a02_1 * b20_1, a00_2 * b01_2 + a01_2 * b11_2 + a02_1 * b21_1, a00_2 * b02_1 + a01_2 * b12_1 + a02_1 * b22_1, a10_2 * b00_2 + a11_2 * b10_2 + a12_1 * b20_1, a10_2 * b01_2 + a11_2 * b11_2 + a12_1 * b21_1, a10_2 * b02_1 + a11_2 * b12_1 + a12_1 * b22_1, a20_1 * b00_2 + a21_1 * b10_2 + a22_1 * b20_1, a20_1 * b01_2 + a21_1 * b11_2 + a22_1 * b21_1, a20_1 * b02_1 + a21_1 * b12_1 + a22_1 * b22_1);\n            return v;\n        }\n        else if (a.__matrix === 4 && b.__matrix === 4) {\n            var a00_3 = a[0];\n            var a01_3 = a[1];\n            var a02_2 = a[2];\n            var a03_1 = a[3];\n            var a10_3 = a[4];\n            var a11_3 = a[5];\n            var a12_2 = a[6];\n            var a13_1 = a[7];\n            var a20_2 = a[8];\n            var a21_2 = a[9];\n            var a22_2 = a[10];\n            var a23_1 = a[11];\n            var a30_1 = a[12];\n            var a31_1 = a[13];\n            var a32_1 = a[14];\n            var a33_1 = a[15];\n            var b00_3 = b[0];\n            var b01_3 = b[1];\n            var b02_2 = b[2];\n            var b03_1 = b[3];\n            var b10_3 = b[4];\n            var b11_3 = b[5];\n            var b12_2 = b[6];\n            var b13_1 = b[7];\n            var b20_2 = b[8];\n            var b21_2 = b[9];\n            var b22_2 = b[10];\n            var b23_1 = b[11];\n            var b30_1 = b[12];\n            var b31_1 = b[13];\n            var b32_1 = b[14];\n            var b33_1 = b[15];\n            var v = float4x4(a00_3 * b00_3 + a01_3 * b10_3 + a02_2 * b20_2 + a03_1 * b30_1, a00_3 * b01_3 + a01_3 * b11_3 + a02_2 * b21_2 + a03_1 * b31_1, a00_3 * b02_2 + a01_3 * b12_2 + a02_2 * b22_2 + a03_1 * b32_1, a00_3 * b03_1 + a01_3 * b13_1 + a02_2 * b23_1 + a03_1 * b33_1, a10_3 * b00_3 + a11_3 * b10_3 + a12_2 * b20_2 + a13_1 * b30_1, a10_3 * b01_3 + a11_3 * b11_3 + a12_2 * b21_2 + a13_1 * b31_1, a10_3 * b02_2 + a11_3 * b12_2 + a12_2 * b22_2 + a13_1 * b32_1, a10_3 * b03_1 + a11_3 * b13_1 + a12_2 * b23_1 + a13_1 * b33_1, a20_2 * b00_3 + a21_2 * b10_3 + a22_2 * b20_2 + a23_1 * b30_1, a20_2 * b01_3 + a21_2 * b11_3 + a22_2 * b21_2 + a23_1 * b31_1, a20_2 * b02_2 + a21_2 * b12_2 + a22_2 * b22_2 + a23_1 * b32_1, a20_2 * b03_1 + a21_2 * b13_1 + a22_2 * b23_1 + a23_1 * b33_1, a30_1 * b00_3 + a31_1 * b10_3 + a32_1 * b20_2 + a33_1 * b30_1, a30_1 * b01_3 + a31_1 * b11_3 + a32_1 * b21_2 + a33_1 * b31_1, a30_1 * b02_2 + a31_1 * b12_2 + a32_1 * b22_2 + a33_1 * b32_1, a30_1 * b03_1 + a31_1 * b13_1 + a32_1 * b23_1 + a33_1 * b33_1);\n            return v;\n        }\n        else {\n            throw new Error('Invalid matrix multiplication');\n        }\n    }\n    function matrixInversefloat2x2(m) {\n        var a = m.__index(0)[0], b = m.__index(1)[0], c = m.__index(0)[1], d = m.__index(1)[1];\n        var det = a * d - b * c;\n        if (det === 0) {\n            throw new Error('Matrix determinant is zero');\n        }\n        var detInv = 1.0 / det;\n        return float2x2(d * detInv, -b * detInv, -c * detInv, a * detInv);\n    }\n    function matrixInversefloat3x3(m) {\n        var n11 = m.__index(0)[0], n12 = m.__index(1)[0], n13 = m.__index(2)[0];\n        var n21 = m.__index(0)[1], n22 = m.__index(1)[1], n23 = m.__index(2)[1];\n        var n31 = m.__index(0)[2], n32 = m.__index(1)[2], n33 = m.__index(2)[2];\n        var t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13;\n        var det = n11 * t11 + n21 * t12 + n31 * t13;\n        if (det === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        var detInv = 1 / det;\n        var v = float3x3(t11 * detInv, (n31 * n23 - n33 * n21) * detInv, (n32 * n21 - n31 * n22) * detInv, t12 * detInv, (n33 * n11 - n31 * n13) * detInv, (n31 * n12 - n32 * n11) * detInv, t13 * detInv, (n21 * n13 - n23 * n11) * detInv, (n22 * n11 - n21 * n12) * detInv);\n        return v;\n    }\n    function matrixInversefloat4x4(m) {\n        var m00 = m[0 * 4 + 0];\n        var m01 = m[0 * 4 + 1];\n        var m02 = m[0 * 4 + 2];\n        var m03 = m[0 * 4 + 3];\n        var m10 = m[1 * 4 + 0];\n        var m11 = m[1 * 4 + 1];\n        var m12 = m[1 * 4 + 2];\n        var m13 = m[1 * 4 + 3];\n        var m20 = m[2 * 4 + 0];\n        var m21 = m[2 * 4 + 1];\n        var m22 = m[2 * 4 + 2];\n        var m23 = m[2 * 4 + 3];\n        var m30 = m[3 * 4 + 0];\n        var m31 = m[3 * 4 + 1];\n        var m32 = m[3 * 4 + 2];\n        var m33 = m[3 * 4 + 3];\n        var tmp_0 = m22 * m33;\n        var tmp_1 = m32 * m23;\n        var tmp_2 = m12 * m33;\n        var tmp_3 = m32 * m13;\n        var tmp_4 = m12 * m23;\n        var tmp_5 = m22 * m13;\n        var tmp_6 = m02 * m33;\n        var tmp_7 = m32 * m03;\n        var tmp_8 = m02 * m23;\n        var tmp_9 = m22 * m03;\n        var tmp_10 = m02 * m13;\n        var tmp_11 = m12 * m03;\n        var tmp_12 = m20 * m31;\n        var tmp_13 = m30 * m21;\n        var tmp_14 = m10 * m31;\n        var tmp_15 = m30 * m11;\n        var tmp_16 = m10 * m21;\n        var tmp_17 = m20 * m11;\n        var tmp_18 = m00 * m31;\n        var tmp_19 = m30 * m01;\n        var tmp_20 = m00 * m21;\n        var tmp_21 = m20 * m01;\n        var tmp_22 = m00 * m11;\n        var tmp_23 = m10 * m01;\n        var t0 = tmp_0 * m11 + tmp_3 * m21 + tmp_4 * m31 - (tmp_1 * m11 + tmp_2 * m21 + tmp_5 * m31);\n        var t1 = tmp_1 * m01 + tmp_6 * m21 + tmp_9 * m31 - (tmp_0 * m01 + tmp_7 * m21 + tmp_8 * m31);\n        var t2 = tmp_2 * m01 + tmp_7 * m11 + tmp_10 * m31 - (tmp_3 * m01 + tmp_6 * m11 + tmp_11 * m31);\n        var t3 = tmp_5 * m01 + tmp_8 * m11 + tmp_11 * m21 - (tmp_4 * m01 + tmp_9 * m11 + tmp_10 * m21);\n        var d = 1.0 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n        if (d === 0) {\n            throw new Error('Invalid matrix inverse');\n        }\n        return float4x4(d * t0, d * t1, d * t2, d * t3, d * (tmp_1 * m10 + tmp_2 * m20 + tmp_5 * m30 - (tmp_0 * m10 + tmp_3 * m20 + tmp_4 * m30)), d * (tmp_0 * m00 + tmp_7 * m20 + tmp_8 * m30 - (tmp_1 * m00 + tmp_6 * m20 + tmp_9 * m30)), d * (tmp_3 * m00 + tmp_6 * m10 + tmp_11 * m30 - (tmp_2 * m00 + tmp_7 * m10 + tmp_10 * m30)), d * (tmp_4 * m00 + tmp_9 * m10 + tmp_10 * m20 - (tmp_5 * m00 + tmp_8 * m10 + tmp_11 * m20)), d * (tmp_12 * m13 + tmp_15 * m23 + tmp_16 * m33 - (tmp_13 * m13 + tmp_14 * m23 + tmp_17 * m33)), d * (tmp_13 * m03 + tmp_18 * m23 + tmp_21 * m33 - (tmp_12 * m03 + tmp_19 * m23 + tmp_20 * m33)), d * (tmp_14 * m03 + tmp_19 * m13 + tmp_22 * m33 - (tmp_15 * m03 + tmp_18 * m13 + tmp_23 * m33)), d * (tmp_17 * m03 + tmp_20 * m13 + tmp_23 * m23 - (tmp_16 * m03 + tmp_21 * m13 + tmp_22 * m23)), d * (tmp_14 * m22 + tmp_17 * m32 + tmp_13 * m12 - (tmp_16 * m32 + tmp_12 * m12 + tmp_15 * m22)), d * (tmp_20 * m32 + tmp_12 * m02 + tmp_19 * m22 - (tmp_18 * m22 + tmp_21 * m32 + tmp_13 * m02)), d * (tmp_18 * m12 + tmp_23 * m32 + tmp_15 * m02 - (tmp_22 * m32 + tmp_14 * m02 + tmp_19 * m12)), d * (tmp_22 * m22 + tmp_16 * m02 + tmp_21 * m12 - (tmp_20 * m12 + tmp_23 * m22 + tmp_17 * m02)));\n    }\n    function matrixTransposefloat2x2(m) {\n        return float2x2(m.__index(0)[0], m.__index(1)[0], m.__index(0)[1], m.__index(1)[1]);\n    }\n    function matrixTransposefloat3x3(m) {\n        return float3x3(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2]);\n    }\n    function matrixTransposefloat4x4(m) {\n        return float4x4(m.__index(0)[0], m.__index(1)[0], m.__index(2)[0], m.__index(3)[0], m.__index(0)[1], m.__index(1)[1], m.__index(2)[1], m.__index(3)[1], m.__index(0)[2], m.__index(1)[2], m.__index(2)[2], m.__index(3)[2], m.__index(0)[3], m.__index(1)[3], m.__index(2)[3], m.__index(3)[3]);\n    }\n    function matrixMul2x2float2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j * 2 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul3x3float3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j * 3 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMul4x4float4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var j = 0; j < 4; j++) {\n            for (var i = 0; i < 4; i++) {\n                c[i] += a[j * 4 + i] * b[j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat22x2(a, b) {\n        var c = [0, 0];\n        for (var j = 0; j < 2; j++) {\n            for (var i = 0; i < 2; i++) {\n                c[i] += a[j] * b[i * 2 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat33x3(a, b) {\n        var c = [0, 0, 0];\n        for (var i = 0; i < 3; i++) {\n            for (var j = 0; j < 3; j++) {\n                c[i] += a[j] * b[i * 3 + j];\n            }\n        }\n        return c;\n    }\n    function matrixMulfloat44x4(a, b) {\n        var c = [0, 0, 0, 0];\n        for (var i = 0; i < 4; i++) {\n            for (var j = 0; j < 4; j++) {\n                c[i] += a[j] * b[i * 4 + j];\n            }\n        }\n        return c;\n    }\n    var mulFunc = componentOp(function (a, b) { return a * b; });\n    function inverse(a) {\n        if (a.__matrix == 2) {\n            return matrixInversefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixInversefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixInversefloat4x4(a);\n        }\n    }\n    exports.inverse = inverse;\n    function transpose(a) {\n        if (a.__matrix == 2) {\n            return matrixTransposefloat2x2(a);\n        }\n        else if (a.__matrix == 3) {\n            return matrixTransposefloat3x3(a);\n        }\n        else if (a.__matrix == 4) {\n            return matrixTransposefloat4x4(a);\n        }\n    }\n    exports.transpose = transpose;\n    /** @shadeup=univ(!$0$ * $1$)*/\n    var mul = function (a, b) {\n        if (isMatrix(a) || isMatrix(b)) {\n            if (isMatrix(a) && isMatrix(b)) {\n                return matrixMul(a, b);\n            }\n            else {\n                if (isMatrix(a) && typeof b == 'number') {\n                    return componentMath(b, a, function (a, b) { return a * b; });\n                }\n                else if (isMatrix(b) && typeof a == 'number') {\n                    return componentMath(a, b, function (a, b) { return a * b; });\n                }\n                else {\n                    if (isMatrix(a)) {\n                        if (a.length == 4) {\n                            return matrixMul2x2float2(a, b);\n                        }\n                        else if (a.length == 9) {\n                            return matrixMul3x3float3(a, b);\n                        }\n                        else if (a.length == 16) {\n                            return matrixMul4x4float4(a, b);\n                        }\n                    }\n                    else if (isMatrix(b)) {\n                        if (b.length == 4) {\n                            return matrixMulfloat22x2(a, b);\n                        }\n                        else if (b.length == 9) {\n                            return matrixMulfloat33x3(a, b);\n                        }\n                        else if (b.length == 16) {\n                            return matrixMulfloat44x4(a, b);\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            return mulFunc(a, b);\n        }\n    };\n    exports.mul = mul;\n    /** @shadeup=univ(!$0$ / $1$)*/\n    exports.div = componentOp(function (a, b) { return a / b; });\n    /** @shadeup=glsl(!$0$ ** $1$) @shadeup=wgsl(!pow($0$, $1$))*/\n    exports.pow = componentOp(function (a, b) { return Math.pow(a, b); });\n    /** @shadeup=wgsl(!$0$ % $1$) @shadeup=glsl(!mod($0$, $1$))*/\n    exports.mod = componentOpMatch(function (a, b) { return a - b * Math.floor(a / b); });\n    /** @shadeup=univ(!$0$ & $1$)*/\n    exports.bitand = componentOp(function (a, b) { return a & b; });\n    /** @shadeup=univ(!$0$ | $1$)*/\n    exports.bitor = componentOp(function (a, b) { return a | b; });\n    /** @shadeup=univ(!$0$ ^ $1$)*/\n    exports.bitxor = componentOp(function (a, b) { return a ^ b; });\n    /** @shadeup=glsl(!$0$ << $1$) @shadeup=wgsl(!$0$ << u32($1$))*/\n    exports.lshift = componentOp(function (a, b) { return a << b; });\n    /** @shadeup=glsl(!$0$ >> $1$) @shadeup=wgsl(!$0$ >> u32($1$))*/\n    exports.rshift = componentOp(function (a, b) { return a >> b; });\n    /** @shadeup=univ(!~$0$)*/\n    exports.bitnot = componentOpSingular(function (a) { return ~a; });\n    /** @shadeup=univ(!-($0$))*/\n    exports.negate = componentOpSingular(function (a) { return -a; });\n    /** @shadeup=univ(!+($0$))*/\n    exports.positive = componentOpSingular(function (a) { return Math.abs(a); });\n    /** @shadeup=univ(abs)*/\n    exports.abs = componentOpSingular(function (a) { return Math.abs(a); });\n    /**  @shadeup=glsl(floor) @shadeup=wgsl(!floor(f32(1.0) * $0$))*/\n    exports.floor = componentOpSingular(Math.floor);\n    /** @shadeup=glsl(ceil) @shadeup=wgsl(!ceil(f32(1.0) * $0$))*/\n    exports.ceil = componentOpSingular(Math.ceil);\n    /** @shadeup=univ(round)*/\n    exports.round = componentOpSingular(Math.round);\n    /** @shadeup=univ(sign)*/\n    exports.sign = componentOpSingular(Math.sign);\n    /** @shadeup=univ(cos) */\n    exports.cos = componentOpSingular(Math.cos);\n    /** @shadeup=univ(sin) */\n    exports.sin = componentOpSingularFloat(Math.sin);\n    /** @shadeup=univ(tan) */\n    exports.tan = componentOpSingular(Math.tan);\n    /** @shadeup=univ(acos) */\n    exports.acos = componentOpSingular(Math.acos);\n    /** @shadeup=univ(asin) */\n    exports.asin = componentOpSingular(Math.asin);\n    /** @shadeup=univ(atan) */\n    exports.atan = componentOpSingular(Math.atan);\n    /** @shadeup=univ(atan2) */\n    exports.atan2 = Math.atan2;\n    /** @shadeup=univ(cosh) */\n    exports.cosh = componentOpSingular(Math.cosh);\n    /** @shadeup=univ(sinh) */\n    exports.sinh = componentOpSingular(Math.sinh);\n    /** @shadeup=univ(tanh) */\n    exports.tanh = componentOpSingular(Math.tanh);\n    /** @shadeup=univ(acosh) */\n    exports.acosh = componentOpSingular(Math.acosh);\n    /** @shadeup=univ(asinh) */\n    exports.asinh = componentOpSingular(Math.asinh);\n    /** @shadeup=univ(atanh) */\n    exports.atanh = componentOpSingular(Math.atanh);\n    /** @shadeup=univ(exp) */\n    exports.exp = componentOpSingular(Math.exp);\n    /** @shadeup=univ(log) */\n    exports.log = componentOpSingular(Math.log);\n    /** @shadeup=univ(log2) */\n    exports.log2 = componentOpSingular(Math.log2);\n    /** @shadeup=univ(log10) */\n    exports.log10 = componentOpSingular(Math.log10);\n    /** @shadeup=univ(sqrt) */\n    exports.sqrt = componentOpSingular(Math.sqrt);\n    /** @shadeup=univ(inversesqrt) */\n    exports.inversesqrt = componentOpSingular(function (a) { return 1 / Math.sqrt(a); });\n    /** @shadeup=univ(fract)*/\n    exports.frac = componentOpSingular(function (a) { return a - Math.floor(a); });\n    function wrap(x, low, high) {\n        if ((0, exports.lt)(x, low)) {\n            var rng = high - low;\n            var s1 = low - x;\n            var ms = s1 % rng;\n            return high - ms;\n        }\n        else if ((0, exports.gte)(x, high)) {\n            var rng = high - low;\n            var s1 = x - high;\n            var ms = s1 % rng;\n            return low + ms;\n        }\n        else {\n            return x;\n        }\n        // return add(mod(sub(x, low), sub(high, low)), low) as T;\n    }\n    exports.wrap = wrap;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand(seed) {\n        if (typeof seed === 'number') {\n            return (0, exports.frac)(Math.sin(seed * float(91.3458)) * float(47453.5453));\n        }\n        else {\n            return Math.random();\n        }\n    }\n    exports.rand = rand;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand2(seed) {\n        return (0, exports.frac)(Math.sin((0, exports.dot)(seed, float2(12.9898, 4.1414))) * float(43758.5453));\n    }\n    exports.rand2 = rand2;\n    /**\n     * Returns a deterministic (same seed = same output) random float between 0-1\n     *\n     * **Note:** See the noise package for more advanced random functions\n     */\n    function rand3(seed) {\n        var _a, _b;\n        return rand2((_a = swizzle(seed, 'xy'), _b = rand(swizzle(seed, 'z')), [_a[0] + _b, _a[1] + _b]));\n    }\n    exports.rand3 = rand3;\n    // export function remap(x: float, low1: float, high1: float, low2: float, high2: float): float {\n    // \treturn add(low2, mul(div(sub(x, low1), sub(high1, low1)), sub(high2, low2)));\n    // }\n    function pingpong(x, length) {\n        var t = x % (length * float(2));\n        return length - Math.abs(t - length);\n    }\n    exports.pingpong = pingpong;\n    function vectorMath_2to1_3to3(cb2, cb3) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to3_4to4(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function vectorMath_2to1_3to1_4to1(cb2, cb3, cb4) {\n        return function (a, b) {\n            if (a.length === 2 && b.length === 2) {\n                return cb2(a, b);\n            }\n            else if (a.length === 3 && b.length === 3) {\n                return cb3(a, b);\n            }\n            else if (a.length === 4 && b.length === 4) {\n                return cb4(a, b);\n            }\n            else {\n                throw new Error('Invalid vector length');\n            }\n        };\n    }\n    function cross2(a, b) {\n        return a[0] * b[1] - a[1] * b[0];\n    }\n    function cross3(a, b) {\n        return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n    }\n    exports.cross = vectorMath_2to1_3to3(cross2, cross3);\n    function dot2(a, b) {\n        return a[0] * b[0] + a[1] * b[1];\n    }\n    function dot3(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n    }\n    function dot4(a, b) {\n        return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n    }\n    /** @shadeup=univ(dot)*/\n    exports.dot = vectorMath_2to1_3to1_4to1(dot2, dot3, dot4);\n    function lerp1(a, b, t) {\n        return (a + (b - a) * t);\n    }\n    function lerp2(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t)];\n    }\n    function lerp3(a, b, t) {\n        return [lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t)];\n    }\n    function lerp4(a, b, t) {\n        return [\n            lerp1(a[0], b[0], t),\n            lerp1(a[1], b[1], t),\n            lerp1(a[2], b[2], t),\n            lerp1(a[3], b[3], t)\n        ];\n    }\n    function lerp2x2(a, b, t) {\n        return float2x2(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t));\n    }\n    function lerp3x3(a, b, t) {\n        return float3x3(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t));\n    }\n    function lerp4x4(a, b, t) {\n        return float4x4(lerp1(a[0], b[0], t), lerp1(a[1], b[1], t), lerp1(a[2], b[2], t), lerp1(a[3], b[3], t), lerp1(a[4], b[4], t), lerp1(a[5], b[5], t), lerp1(a[6], b[6], t), lerp1(a[7], b[7], t), lerp1(a[8], b[8], t), lerp1(a[9], b[9], t), lerp1(a[10], b[10], t), lerp1(a[11], b[11], t), lerp1(a[12], b[12], t), lerp1(a[13], b[13], t), lerp1(a[14], b[14], t), lerp1(a[15], b[15], t));\n    }\n    /** @shadeup=univ(mix)*/\n    function lerp(a, b, t) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof t === 'number') {\n            return lerp1(a, b, t);\n        }\n        else if (isMatrix(a) && isMatrix(b)) {\n            if (a.length === 4 && b.length === 4) {\n                return lerp2x2(a, b, t);\n            }\n            else if (a.length === 9 && b.length === 9) {\n                return lerp3x3(a, b, t);\n            }\n            else if (a.length === 16 && b.length === 16) {\n                return lerp4x4(a, b, t);\n            }\n            else {\n                throw new Error('Invalid matrix length');\n            }\n        }\n        else if (a.length === 2 && b.length === 2 && typeof t === 'number') {\n            return lerp2(a, b, t);\n        }\n        else if (a.length === 3 && b.length === 3 && typeof t === 'number') {\n            return lerp3(a, b, t);\n        }\n        else if (a.length === 4 && b.length === 4 && typeof t === 'number') {\n            return lerp4(a, b, t);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.lerp = lerp;\n    /** @shadeup=univ(!bilerp_`0`($0$, $1$, $2$, $3$, $4$, $5$)) */\n    function bilerp(a, b, c, d, u, v) {\n        return lerp(lerp(a, b, u), lerp(c, d, u), v);\n    }\n    exports.bilerp = bilerp;\n    /** @shadeup=univ(length)*/\n    function length(a) {\n        if (typeof a === 'number') {\n            return Math.abs(a);\n        }\n        else if (a.length === 2) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2));\n        }\n        else if (a.length === 3) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2));\n        }\n        else if (a.length === 4) {\n            return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2));\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.length = length;\n    function dist(a, b) {\n        return length((0, exports.sub)(a, b));\n    }\n    exports.dist = dist;\n    /** @shadeup=univ(distance)*/\n    exports.distance = dist;\n    /** @shadeup=univ(normalize)*/\n    function normalize(a) {\n        if (a.length === 2) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l];\n        }\n        else if (a.length === 3) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l];\n        }\n        else if (a.length === 4) {\n            var l = length(a);\n            return [a[0] / l, a[1] / l, a[2] / l, a[3] / l];\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.normalize = normalize;\n    /** @shadeup=univ(reflect)*/\n    function reflect(a, b) {\n        if (a.length === 2 && b.length === 2) {\n            return reflect2(a, b);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return reflect3(a, b);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return reflect4(a, b);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.reflect = reflect;\n    function reflect2(b, a) {\n        var dot = dot2(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1]];\n    }\n    function reflect3(b, a) {\n        var dot = dot3(a, b);\n        return [b[0] - 2 * dot * a[0], b[1] - 2 * dot * a[1], b[2] - 2 * dot * a[2]];\n    }\n    function reflect4(b, a) {\n        var dot = dot4(a, b);\n        return [\n            b[0] - 2 * dot * a[0],\n            b[1] - 2 * dot * a[1],\n            b[2] - 2 * dot * a[2],\n            b[3] - 2 * dot * a[3]\n        ];\n    }\n    /** @shadeup=univ(refract)*/\n    function refract(a, b, eta) {\n        if (a.length === 2 && b.length === 2) {\n            return refract2(a, b, eta);\n        }\n        else if (a.length === 3 && b.length === 3) {\n            return refract3(a, b, eta);\n        }\n        else if (a.length === 4 && b.length === 4) {\n            return refract4(a, b, eta);\n        }\n        else {\n            throw new Error('Invalid vector length');\n        }\n    }\n    exports.refract = refract;\n    function refract2(b, a, eta) {\n        var dot = dot2(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1]\n            ];\n    }\n    function refract3(b, a, eta) {\n        var dot = dot3(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2]\n            ];\n    }\n    function refract4(b, a, eta) {\n        var dot = dot4(a, b);\n        var k = 1 - eta * eta * (1 - dot * dot);\n        return k < 0\n            ? [0, 0, 0, 0]\n            : [\n                eta * b[0] - (eta * dot + Math.sqrt(k)) * a[0],\n                eta * b[1] - (eta * dot + Math.sqrt(k)) * a[1],\n                eta * b[2] - (eta * dot + Math.sqrt(k)) * a[2],\n                eta * b[3] - (eta * dot + Math.sqrt(k)) * a[3]\n            ];\n    }\n    /** @shadeup=univ(degrees)*/\n    function degrees(a) {\n        return float((a * 180) / Math.PI);\n    }\n    exports.degrees = degrees;\n    /** @shadeup=univ(radians)*/\n    function radians(a) {\n        return float((a * Math.PI) / 180);\n    }\n    exports.radians = radians;\n    /** @shadeup=univ(step)*/\n    function step(edge, x) {\n        if (typeof edge === 'number') {\n            if (typeof x === 'number') {\n                return x < edge ? 0 : 1;\n            }\n            else {\n                return x.map(function (v) { return (v < edge ? 0 : 1); });\n            }\n        }\n        else {\n            if (typeof x === 'number') {\n                return edge.map(function (v) { return (x < v ? 0 : 1); });\n            }\n            else {\n                return edge.map(function (v, i) { return (x[i] < v ? 0 : 1); });\n            }\n        }\n    }\n    exports.step = step;\n    function _smoothstep(a, b, x) {\n        var t = clamp((x - a) / (b - a), 0, 1);\n        return t * t * (3 - 2 * t);\n    }\n    /** @shadeup=univ(smoothstep)*/\n    function smoothstep(a, b, x) {\n        if (typeof a === 'number' && typeof b === 'number' && typeof x === 'number') {\n            return _smoothstep(a, b, x);\n        }\n        else if (typeof a === 'number' && typeof b === 'number') {\n            return x.map(function (v) { return _smoothstep(a, b, v); });\n        }\n        else {\n            return a.map(function (v, i) { return _smoothstep(v, b[i], x[i]); });\n        }\n    }\n    exports.smoothstep = smoothstep;\n    function componentReduce(vectors, cb) {\n        var result = [];\n        var _loop_1 = function (i) {\n            result.push(cb(vectors.map(function (v) { return v[i]; })));\n        };\n        for (var i = 0; i < vectors[0].length; i++) {\n            _loop_1(i);\n        }\n        return result;\n    }\n    /** @shadeup=univ(min)*/\n    function min() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.min.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var minTo_1 = args[1];\n                return args[0].map(function (v) { return Math.min(v, minTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var minFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.min(minFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.min.apply(Math, a); });\n            }\n            else {\n                return Math.min.apply(Math, args);\n            }\n        }\n    }\n    exports.min = min;\n    /** @shadeup=univ(max)*/\n    function max() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (args.length == 1) {\n            if (Array.isArray(args[0])) {\n                return Math.max.apply(Math, args[0]);\n            }\n            else {\n                return args[0];\n            }\n        }\n        else {\n            if (Array.isArray(args[0]) && !Array.isArray(args[1])) {\n                var maxTo_1 = args[1];\n                return args[0].map(function (v) { return Math.max(v, maxTo_1); });\n            }\n            else if (!Array.isArray(args[0]) && Array.isArray(args[1])) {\n                var maxFrom_1 = args[0];\n                return args[1].map(function (v) { return Math.max(maxFrom_1, v); });\n            }\n            else if (Array.isArray(args[0])) {\n                return componentReduce(args, function (a) { return Math.max.apply(Math, a); });\n            }\n            else {\n                return Math.max.apply(Math, args);\n            }\n        }\n    }\n    exports.max = max;\n    /** @shadeup=univ(clamp)*/\n    function clamp(arg, min, max) {\n        if (Array.isArray(arg)) {\n            if (Array.isArray(min) && Array.isArray(max)) {\n                return arg.map(function (a, i) { return Math.min(Math.max(a, min[i]), max[i]); });\n            }\n            else {\n                return arg.map(function (a) { return Math.min(Math.max(a, min), max); });\n            }\n        }\n        else {\n            return Math.min(Math.max(arg, min), max);\n        }\n    }\n    exports.clamp = clamp;\n    /** @shadeup=glsl(!clamp($0$, 0.0, 1.0)) @shadeup=wgsl(saturate) */\n    function saturate(arg) {\n        return clamp(arg, float(0), float(1));\n    }\n    exports.saturate = saturate;\n    function eq(a, b) {\n        var ta = typeof a;\n        var tb = typeof b;\n        if (ta != tb) {\n            return false;\n        }\n        else if ((ta == 'number' && tb == 'number') ||\n            (ta == 'string' && tb == 'string') ||\n            (ta == 'boolean' && tb == 'boolean') ||\n            (ta == 'undefined' && tb == 'undefined')) {\n            return a == b;\n        }\n        else if (ta == 'object' && tb == 'object') {\n            if (Array.isArray(a) && Array.isArray(b)) {\n                if (a.length != b.length) {\n                    return false;\n                }\n                for (var i = 0; i < a.length; i++) {\n                    if (!eq(a[i], b[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            else {\n                return a == b;\n            }\n        }\n    }\n    exports.eq = eq;\n    /** @shadeup=univ(!($0$ != $1$))*/\n    var neq = function (a, b) { return !eq(a, b); };\n    exports.neq = neq;\n    /** @shadeup=univ(!($0$ < $1$))*/\n    var lt = function (a, b) { return a < b; };\n    exports.lt = lt;\n    /** @shadeup=univ(!($0$ <= $1$))*/\n    var lte = function (a, b) { return a <= b; };\n    exports.lte = lte;\n    /** @shadeup=univ(!($0$ > $1$))*/\n    var gt = function (a, b) { return a > b; };\n    exports.gt = gt;\n    /** @shadeup=univ(!($0$ >= $1$))*/\n    var gte = function (a, b) { return a >= b; };\n    exports.gte = gte;\n    /** @shadeup=univ(!($0$ && $1$))*/\n    var and = function (a, b) { return a && b; };\n    exports.and = and;\n    /** @shadeup=univ(!($0$ || $1$))*/\n    var or = function (a, b) { return a || b; };\n    exports.or = or;\n    /** @shadeup=univ(!(!$0$))*/\n    var not = function (a) { return !a; };\n    exports.not = not;\n    /** @shadeup=univ()*/\n    function makeVector() {\n        var out = [];\n        for (var i = 0; i < arguments.length; i++) {\n            var a = arguments[i];\n            if (typeof a === 'number') {\n                out.push(a);\n            }\n            else {\n                for (var j = 0; j < a.length; j++) {\n                    out.push(a[j]);\n                }\n            }\n        }\n        return out;\n        throw new Error('Invalid vector length');\n    }\n    exports.makeVector = makeVector;\n    var swizIndex = {\n        x: 0,\n        y: 1,\n        z: 2,\n        w: 3,\n        r: 0,\n        g: 1,\n        b: 2,\n        a: 3\n    };\n    var getSwizIndexFast = function (swiz) {\n        switch (swiz) {\n            case 'x':\n                return 0;\n            case 'y':\n                return 1;\n            case 'z':\n                return 2;\n            case 'w':\n                return 3;\n            case 'r':\n                return 0;\n            case 'g':\n                return 1;\n            case 'b':\n                return 2;\n            case 'a':\n                return 3;\n        }\n    };\n    /** @shadeup=shader */\n    function testDocComment() {\n        return 1;\n    }\n    exports.testDocComment = testDocComment;\n    function swizzle(v, swiz, assign) {\n        var _a;\n        if (typeof v === 'number') {\n            if (swiz.length === 1) {\n                return v;\n            }\n            else if (swiz.length === 2) {\n                return [v, v];\n            }\n            else if (swiz.length === 3) {\n                return [v, v, v];\n            }\n            else if (swiz.length === 4) {\n                return [v, v, v, v];\n            }\n        }\n        else if (Array.isArray(v)) {\n            if (typeof assign !== 'undefined') {\n                for (var i = 0; i < swiz.length; i++) {\n                    v[getSwizIndexFast(swiz[i])] = (_a = assign[i]) !== null && _a !== void 0 ? _a : assign;\n                }\n                return v;\n            }\n            if (swiz.length === 1) {\n                return v[getSwizIndexFast(swiz)];\n            }\n            else if (swiz.length === 2) {\n                return [v[getSwizIndexFast(swiz[0])], v[getSwizIndexFast(swiz[1])]];\n            }\n            else if (swiz.length === 3) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])]\n                ];\n            }\n            else if (swiz.length === 4) {\n                return [\n                    v[getSwizIndexFast(swiz[0])],\n                    v[getSwizIndexFast(swiz[1])],\n                    v[getSwizIndexFast(swiz[2])],\n                    v[getSwizIndexFast(swiz[3])]\n                ];\n            }\n        }\n        else {\n            return v[swiz];\n        }\n    }\n    exports.swizzle = swizzle;\n    function intifyVector(v) {\n        if (typeof v === 'number') {\n            return v;\n        }\n        else if (Array.isArray(v)) {\n            return v.map(function (v) { return v | 0; });\n        }\n        else {\n            return v;\n        }\n    }\n    exports.intifyVector = intifyVector;\n    exports.FM = static_math_1.FM;\n    // type f32 = number & { __float: never };\n    // type i32 = number & { __int: never };\n    // type num = f32 | i32;\n    // function f32(a: number): f32 {\n    // \treturn a as f32;\n    // }\n    // function i32(a: number): i32 {\n    // \treturn a as i32;\n    // }\n    // type numeric2 = <A extends num, B extends num>(a: A, b: B) => (A extends f32 ? f32 : (B extends f32 ? f32 : i32));\n    // type numeric3 = <A extends num, B extends num, C extends num>(a: A, b: B, c: C) => (A extends f32 ? f32 : (B extends f32 ? f32 : (C extends f32 ? f32 : i32)));\n    // export const abc: numeric2 = (a, b, c) => a + b + c;\n    // abc(f32(1), i32(2));\n    var atomic_internal = /** @class */ (function () {\n        function atomic_internal(value) {\n            this.__value = value;\n        }\n        /** @shadeup=univ(!atomicLoad(&$self$))*/\n        atomic_internal.prototype.load = function () {\n            return this.__value;\n        };\n        /** @shadeup=univ(!atomicStore(&$self$, $0$))*/\n        atomic_internal.prototype.store = function (value) {\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n        };\n        /** @shadeup=univ(!atomicAdd(&$self$, $0$))*/\n        atomic_internal.prototype.add = function (value) {\n            var old = this.__value;\n            this.__value += value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicSub(&$self$, $0$))*/\n        atomic_internal.prototype.sub = function (value) {\n            var old = this.__value;\n            this.__value -= value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMax(&$self$, $0$))*/\n        atomic_internal.prototype.max = function (value) {\n            var old = this.__value;\n            this.__value = Math.max(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicMin(&$self$, $0$))*/\n        atomic_internal.prototype.min = function (value) {\n            var old = this.__value;\n            this.__value = Math.min(value, this.__value);\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicAnd(&$self$, $0$))*/\n        atomic_internal.prototype.and = function (value) {\n            var old = this.__value;\n            this.__value = value & this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicOr(&$self$, $0$))*/\n        atomic_internal.prototype.or = function (value) {\n            var old = this.__value;\n            this.__value = value | this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicXor(&$self$, $0$))*/\n        atomic_internal.prototype.xor = function (value) {\n            var old = this.__value;\n            this.__value = value ^ this.__value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicExchange(&$self$, $0$))*/\n        atomic_internal.prototype.exchange = function (value) {\n            var old = this.__value;\n            this.__value = value;\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return old;\n        };\n        /** @shadeup=univ(!atomicCompareExchangeWeak(&$self$, $0$, $1$))*/\n        atomic_internal.prototype.compareExchangeWeak = function (compare, value) {\n            var old = this.__value;\n            if (old == compare) {\n                this.__value = value;\n            }\n            if (this.$mutate)\n                this.$mutate(this.__value);\n            return {\n                old_value: old,\n                exchanged: old == compare\n            };\n        };\n        atomic_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_math_ts_71052_atomic_internal\\\",\\\"fields\\\":[[\\\"__type\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__value\\\",null],[\\\"$mutate\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return atomic_internal;\n    }());\n    exports.atomic_internal = atomic_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_math_ts_71052_atomic_internal\\\",\\\"fields\\\":[[\\\"__type\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__value\\\",null],[\\\"$mutate\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), atomic_internal)\n    function atomic(value) {\n        return new atomic_internal(value);\n    }\n    exports.atomic = atomic;\n    window.makeAtomic = atomic;\n    /**\n     * Executes a control barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#workgroupBarrier-builtin\n     *\n     * @shadeup=univ(!workgroupBarrier())\n     */\n    function workgroupBarrier() { }\n    exports.workgroupBarrier = workgroupBarrier;\n    /**\n     * Executes a storage barrier synchronization function that affects memory and atomic operations in the workgroup address space.\n     *\n     * See: https://www.w3.org/TR/WGSL/#storageBarrier-builtin\n     *\n     * @shadeup=univ(!storageBarrier())\n     */\n    function storageBarrier() { }\n    exports.storageBarrier = storageBarrier;\n    /**\n     * See: https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin\n     *\n     * @shadeup=univ(!workgroupUniformLoad(&$0$))\n     */\n    function workgroupUniformLoad(p) {\n        return p;\n    }\n    exports.workgroupUniformLoad = workgroupUniformLoad;\n    /**\n     * Discards the current fragment.\n     *\n     * A discard statement converts the invocation into a helper invocation and throws away the fragment. The discard statement must only be used in a fragment shader stage.\n     *\n     * See: https://www.w3.org/TR/WGSL/#discard-statement\n     *\n     * @shadeup=univ(!discard;)\n     */\n    function discard() { }\n    exports.discard = discard;\n    /**\n     * Returns the derivative of the input value with respect to the window-space x coordinate.\n     * @param value - The input value.\n     * @returns The derivative of the input value with respect to the window-space x coordinate.\n     * @shadeup=glsl(!dFdx($0$))\n     * @shadeup=wgsl(!dpdx($0$))\n     */\n    function ddx(value) {\n        return 0;\n    }\n    exports.ddx = ddx;\n    /**\n     * Returns the derivative of the input value with respect to the window-space y coordinate.\n     * @param value - The input value.\n     *\n     * @returns The derivative of the input value with respect to the window-space y coordinate.\n     * @shadeup=glsl(!dFdy($0$))\n     * @shadeup=wgsl(!dpdy($0$))\n     */\n    function ddy(value) {\n        return 0;\n    }\n    exports.ddy = ddy;\n    /**\n     * @shadeup=glsl(!dFdxFine($0$))\n     * @shadeup=wgsl(!dpdxFine($0$))\n     */\n    function ddxFine(value) {\n        return 0;\n    }\n    exports.ddxFine = ddxFine;\n    /**\n     * @shadeup=glsl(!dFdyFine($0$))\n     * @shadeup=wgsl(!dpdyFine($0$))\n     */\n    function ddyFine(value) {\n        return 0;\n    }\n    exports.ddyFine = ddyFine;\n    /**\n     * @shadeup=glsl(!dFdxCoarse($0$))\n     * @shadeup=wgsl(!dpdxCoarse($0$))\n     */\n    function ddxCoarse(value) {\n        return 0;\n    }\n    exports.ddxCoarse = ddxCoarse;\n    /**\n     * @shadeup=glsl(!dFdyCoarse($0$))\n     * @shadeup=wgsl(!dpdyCoarse($0$))\n     */\n    function ddyCoarse(value) {\n        return 0;\n    }\n    exports.ddyCoarse = ddyCoarse;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!bitcast<$[0]$>($0$))\n     */\n    function bitcast(value) {\n        return 0;\n    }\n    exports.bitcast = bitcast;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8snorm($0$))\n     */\n    function pack4x8snorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8snorm = pack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack4x8unorm($0$))\n     */\n    function pack4x8unorm(value) {\n        return uint(0);\n    }\n    exports.pack4x8unorm = pack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16snorm($0$))\n     */\n    function pack2x16snorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16snorm = pack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16unorm($0$))\n     */\n    function pack2x16unorm(value) {\n        return uint(0);\n    }\n    exports.pack2x16unorm = pack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!pack2x16float($0$))\n     */\n    function pack2x16float(value) {\n        return uint(0);\n    }\n    exports.pack2x16float = pack2x16float;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8snorm($0$))\n     */\n    function unpack4x8snorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8snorm = unpack4x8snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack4x8unorm($0$))\n     */\n    function unpack4x8unorm(value) {\n        return float4(0, 0, 0, 0);\n    }\n    exports.unpack4x8unorm = unpack4x8unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16snorm($0$))\n     */\n    function unpack2x16snorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16snorm = unpack2x16snorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16unorm($0$))\n     */\n    function unpack2x16unorm(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16unorm = unpack2x16unorm;\n    /**\n     * @shadeup=glsl(!$0$)\n     * @shadeup=wgsl(!unpack2x16float($0$))\n     */\n    function unpack2x16float(value) {\n        return float2(0, 0);\n    }\n    exports.unpack2x16float = unpack2x16float;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/static-math.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.FM = void 0;\n    ///\n    /// GENERATED\n    /// DO NOT EDIT THIS FILE\n    /// see generate-static-math.ts\n    ///\n    exports.FM = {\n        add_1_1: function (a, b) { return a + b; },\n        add_2_1: function (a, b) { return [a[0] + b, a[1] + b]; },\n        add_1_2: function (a, b) { return [a + b[0], a + b[1]]; },\n        add_2_2: function (a, b) { return [a[0] + b[0], a[1] + b[1]]; },\n        add_3_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b]; },\n        add_1_3: function (a, b) { return [a + b[0], a + b[1], a + b[2]]; },\n        add_3_3: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]; },\n        add_4_1: function (a, b) { return [a[0] + b, a[1] + b, a[2] + b, a[3] + b]; },\n        add_1_4: function (a, b) { return [a + b[0], a + b[1], a + b[2], a + b[3]]; },\n        add_4_4: function (a, b) { return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]]; },\n        sub_1_1: function (a, b) { return a - b; },\n        sub_2_1: function (a, b) { return [a[0] - b, a[1] - b]; },\n        sub_1_2: function (a, b) { return [a - b[0], a - b[1]]; },\n        sub_2_2: function (a, b) { return [a[0] - b[0], a[1] - b[1]]; },\n        sub_3_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b]; },\n        sub_1_3: function (a, b) { return [a - b[0], a - b[1], a - b[2]]; },\n        sub_3_3: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; },\n        sub_4_1: function (a, b) { return [a[0] - b, a[1] - b, a[2] - b, a[3] - b]; },\n        sub_1_4: function (a, b) { return [a - b[0], a - b[1], a - b[2], a - b[3]]; },\n        sub_4_4: function (a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]]; },\n        div_1_1: function (a, b) { return a / b; },\n        div_2_1: function (a, b) { return [a[0] / b, a[1] / b]; },\n        div_1_2: function (a, b) { return [a / b[0], a / b[1]]; },\n        div_2_2: function (a, b) { return [a[0] / b[0], a[1] / b[1]]; },\n        div_3_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b]; },\n        div_1_3: function (a, b) { return [a / b[0], a / b[1], a / b[2]]; },\n        div_3_3: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2]]; },\n        div_4_1: function (a, b) { return [a[0] / b, a[1] / b, a[2] / b, a[3] / b]; },\n        div_1_4: function (a, b) { return [a / b[0], a / b[1], a / b[2], a / b[3]]; },\n        div_4_4: function (a, b) { return [a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]]; },\n        mul_1_1: function (a, b) { return a * b; },\n        mul_2_1: function (a, b) { return [a[0] * b, a[1] * b]; },\n        mul_1_2: function (a, b) { return [a * b[0], a * b[1]]; },\n        mul_2_2: function (a, b) { return [a[0] * b[0], a[1] * b[1]]; },\n        mul_3_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b]; },\n        mul_1_3: function (a, b) { return [a * b[0], a * b[1], a * b[2]]; },\n        mul_3_3: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2]]; },\n        mul_4_1: function (a, b) { return [a[0] * b, a[1] * b, a[2] * b, a[3] * b]; },\n        mul_1_4: function (a, b) { return [a * b[0], a * b[1], a * b[2], a * b[3]]; },\n        mul_4_4: function (a, b) { return [a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]]; },\n        mod_1_1: function (a, b) { return a % b; },\n        mod_2_1: function (a, b) { return [a[0] % b, a[1] % b]; },\n        mod_1_2: function (a, b) { return [a % b[0], a % b[1]]; },\n        mod_2_2: function (a, b) { return [a[0] % b[0], a[1] % b[1]]; },\n        mod_3_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b]; },\n        mod_1_3: function (a, b) { return [a % b[0], a % b[1], a % b[2]]; },\n        mod_3_3: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2]]; },\n        mod_4_1: function (a, b) { return [a[0] % b, a[1] % b, a[2] % b, a[3] % b]; },\n        mod_1_4: function (a, b) { return [a % b[0], a % b[1], a % b[2], a % b[3]]; },\n        mod_4_4: function (a, b) { return [a[0] % b[0], a[1] % b[1], a[2] % b[2], a[3] % b[3]]; },\n        bitand_1_1: function (a, b) { return a & b; },\n        bitand_2_1: function (a, b) { return [a[0] & b, a[1] & b]; },\n        bitand_1_2: function (a, b) { return [a & b[0], a & b[1]]; },\n        bitand_2_2: function (a, b) { return [a[0] & b[0], a[1] & b[1]]; },\n        bitand_3_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b]; },\n        bitand_1_3: function (a, b) { return [a & b[0], a & b[1], a & b[2]]; },\n        bitand_3_3: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2]]; },\n        bitand_4_1: function (a, b) { return [a[0] & b, a[1] & b, a[2] & b, a[3] & b]; },\n        bitand_1_4: function (a, b) { return [a & b[0], a & b[1], a & b[2], a & b[3]]; },\n        bitand_4_4: function (a, b) { return [a[0] & b[0], a[1] & b[1], a[2] & b[2], a[3] & b[3]]; },\n        bitor_1_1: function (a, b) { return a | b; },\n        bitor_2_1: function (a, b) { return [a[0] | b, a[1] | b]; },\n        bitor_1_2: function (a, b) { return [a | b[0], a | b[1]]; },\n        bitor_2_2: function (a, b) { return [a[0] | b[0], a[1] | b[1]]; },\n        bitor_3_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b]; },\n        bitor_1_3: function (a, b) { return [a | b[0], a | b[1], a | b[2]]; },\n        bitor_3_3: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2]]; },\n        bitor_4_1: function (a, b) { return [a[0] | b, a[1] | b, a[2] | b, a[3] | b]; },\n        bitor_1_4: function (a, b) { return [a | b[0], a | b[1], a | b[2], a | b[3]]; },\n        bitor_4_4: function (a, b) { return [a[0] | b[0], a[1] | b[1], a[2] | b[2], a[3] | b[3]]; },\n        bitxor_1_1: function (a, b) { return a ^ b; },\n        bitxor_2_1: function (a, b) { return [a[0] ^ b, a[1] ^ b]; },\n        bitxor_1_2: function (a, b) { return [a ^ b[0], a ^ b[1]]; },\n        bitxor_2_2: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1]]; },\n        bitxor_3_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b]; },\n        bitxor_1_3: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2]]; },\n        bitxor_3_3: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2]]; },\n        bitxor_4_1: function (a, b) { return [a[0] ^ b, a[1] ^ b, a[2] ^ b, a[3] ^ b]; },\n        bitxor_1_4: function (a, b) { return [a ^ b[0], a ^ b[1], a ^ b[2], a ^ b[3]]; },\n        bitxor_4_4: function (a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; },\n        lshift_1_1: function (a, b) { return a << b; },\n        lshift_2_1: function (a, b) { return [a[0] << b, a[1] << b]; },\n        lshift_1_2: function (a, b) { return [a << b[0], a << b[1]]; },\n        lshift_2_2: function (a, b) { return [a[0] << b[0], a[1] << b[1]]; },\n        lshift_3_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b]; },\n        lshift_1_3: function (a, b) { return [a << b[0], a << b[1], a << b[2]]; },\n        lshift_3_3: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2]]; },\n        lshift_4_1: function (a, b) { return [a[0] << b, a[1] << b, a[2] << b, a[3] << b]; },\n        lshift_1_4: function (a, b) { return [a << b[0], a << b[1], a << b[2], a << b[3]]; },\n        lshift_4_4: function (a, b) { return [a[0] << b[0], a[1] << b[1], a[2] << b[2], a[3] << b[3]]; },\n        rshift_1_1: function (a, b) { return a >> b; },\n        rshift_2_1: function (a, b) { return [a[0] >> b, a[1] >> b]; },\n        rshift_1_2: function (a, b) { return [a >> b[0], a >> b[1]]; },\n        rshift_2_2: function (a, b) { return [a[0] >> b[0], a[1] >> b[1]]; },\n        rshift_3_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b]; },\n        rshift_1_3: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2]]; },\n        rshift_3_3: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2]]; },\n        rshift_4_1: function (a, b) { return [a[0] >> b, a[1] >> b, a[2] >> b, a[3] >> b]; },\n        rshift_1_4: function (a, b) { return [a >> b[0], a >> b[1], a >> b[2], a >> b[3]]; },\n        rshift_4_4: function (a, b) { return [a[0] >> b[0], a[1] >> b[1], a[2] >> b[2], a[3] >> b[3]]; },\n        bitnot_1: function (a) { return ~a; },\n        bitnot_2: function (a) { return [~a[0], ~a[1]]; },\n        bitnot_3: function (a) { return [~a[0], ~a[1], ~a[2]]; },\n        bitnot_4: function (a) { return [~a[0], ~a[1], ~a[2], ~a[3]]; },\n        negate_1: function (a) { return -a; },\n        negate_2: function (a) { return [-a[0], -a[1]]; },\n        negate_3: function (a) { return [-a[0], -a[1], -a[2]]; },\n        negate_4: function (a) { return [-a[0], -a[1], -a[2], -a[3]]; },\n        positive_1: function (a) { return Math.abs(a); },\n        positive_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\n        positive_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\n        positive_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\n        abs_1: function (a) { return Math.abs(a); },\n        abs_2: function (a) { return [Math.abs(a[0]), Math.abs(a[1])]; },\n        abs_3: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2])]; },\n        abs_4: function (a) { return [Math.abs(a[0]), Math.abs(a[1]), Math.abs(a[2]), Math.abs(a[3])]; },\n        floor_1: function (a) { return Math.floor(a); },\n        floor_2: function (a) { return [Math.floor(a[0]), Math.floor(a[1])]; },\n        floor_3: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])]; },\n        floor_4: function (a) { return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2]), Math.floor(a[3])]; },\n        ceil_1: function (a) { return Math.ceil(a); },\n        ceil_2: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1])]; },\n        ceil_3: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])]; },\n        ceil_4: function (a) { return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])]; },\n        round_1: function (a) { return Math.round(a); },\n        round_2: function (a) { return [Math.round(a[0]), Math.round(a[1])]; },\n        round_3: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2])]; },\n        round_4: function (a) { return [Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])]; },\n        sign_1: function (a) { return Math.sign(a); },\n        sign_2: function (a) { return [Math.sign(a[0]), Math.sign(a[1])]; },\n        sign_3: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2])]; },\n        sign_4: function (a) { return [Math.sign(a[0]), Math.sign(a[1]), Math.sign(a[2]), Math.sign(a[3])]; },\n        cos_1: function (a) { return Math.cos(a); },\n        cos_2: function (a) { return [Math.cos(a[0]), Math.cos(a[1])]; },\n        cos_3: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2])]; },\n        cos_4: function (a) { return [Math.cos(a[0]), Math.cos(a[1]), Math.cos(a[2]), Math.cos(a[3])]; },\n        sin_1: function (a) { return Math.sin(a); },\n        sin_2: function (a) { return [Math.sin(a[0]), Math.sin(a[1])]; },\n        sin_3: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2])]; },\n        sin_4: function (a) { return [Math.sin(a[0]), Math.sin(a[1]), Math.sin(a[2]), Math.sin(a[3])]; },\n        tan_1: function (a) { return Math.tan(a); },\n        tan_2: function (a) { return [Math.tan(a[0]), Math.tan(a[1])]; },\n        tan_3: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2])]; },\n        tan_4: function (a) { return [Math.tan(a[0]), Math.tan(a[1]), Math.tan(a[2]), Math.tan(a[3])]; },\n        acos_1: function (a) { return Math.acos(a); },\n        acos_2: function (a) { return [Math.acos(a[0]), Math.acos(a[1])]; },\n        acos_3: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2])]; },\n        acos_4: function (a) { return [Math.acos(a[0]), Math.acos(a[1]), Math.acos(a[2]), Math.acos(a[3])]; },\n        asin_1: function (a) { return Math.asin(a); },\n        asin_2: function (a) { return [Math.asin(a[0]), Math.asin(a[1])]; },\n        asin_3: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2])]; },\n        asin_4: function (a) { return [Math.asin(a[0]), Math.asin(a[1]), Math.asin(a[2]), Math.asin(a[3])]; },\n        atan_1: function (a) { return Math.atan(a); },\n        atan_2: function (a) { return [Math.atan(a[0]), Math.atan(a[1])]; },\n        atan_3: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2])]; },\n        atan_4: function (a) { return [Math.atan(a[0]), Math.atan(a[1]), Math.atan(a[2]), Math.atan(a[3])]; },\n        cosh_1: function (a) { return Math.cosh(a); },\n        cosh_2: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1])]; },\n        cosh_3: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2])]; },\n        cosh_4: function (a) { return [Math.cosh(a[0]), Math.cosh(a[1]), Math.cosh(a[2]), Math.cosh(a[3])]; },\n        sinh_1: function (a) { return Math.sinh(a); },\n        sinh_2: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1])]; },\n        sinh_3: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2])]; },\n        sinh_4: function (a) { return [Math.sinh(a[0]), Math.sinh(a[1]), Math.sinh(a[2]), Math.sinh(a[3])]; },\n        tanh_1: function (a) { return Math.tanh(a); },\n        tanh_2: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1])]; },\n        tanh_3: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2])]; },\n        tanh_4: function (a) { return [Math.tanh(a[0]), Math.tanh(a[1]), Math.tanh(a[2]), Math.tanh(a[3])]; },\n        acosh_1: function (a) { return Math.acosh(a); },\n        acosh_2: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1])]; },\n        acosh_3: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2])]; },\n        acosh_4: function (a) { return [Math.acosh(a[0]), Math.acosh(a[1]), Math.acosh(a[2]), Math.acosh(a[3])]; },\n        asinh_1: function (a) { return Math.asinh(a); },\n        asinh_2: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1])]; },\n        asinh_3: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2])]; },\n        asinh_4: function (a) { return [Math.asinh(a[0]), Math.asinh(a[1]), Math.asinh(a[2]), Math.asinh(a[3])]; },\n        atanh_1: function (a) { return Math.atanh(a); },\n        atanh_2: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1])]; },\n        atanh_3: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2])]; },\n        atanh_4: function (a) { return [Math.atanh(a[0]), Math.atanh(a[1]), Math.atanh(a[2]), Math.atanh(a[3])]; },\n        exp_1: function (a) { return Math.exp(a); },\n        exp_2: function (a) { return [Math.exp(a[0]), Math.exp(a[1])]; },\n        exp_3: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2])]; },\n        exp_4: function (a) { return [Math.exp(a[0]), Math.exp(a[1]), Math.exp(a[2]), Math.exp(a[3])]; },\n        log_1: function (a) { return Math.log(a); },\n        log_2: function (a) { return [Math.log(a[0]), Math.log(a[1])]; },\n        log_3: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2])]; },\n        log_4: function (a) { return [Math.log(a[0]), Math.log(a[1]), Math.log(a[2]), Math.log(a[3])]; },\n        log2_1: function (a) { return Math.log2(a); },\n        log2_2: function (a) { return [Math.log2(a[0]), Math.log2(a[1])]; },\n        log2_3: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2])]; },\n        log2_4: function (a) { return [Math.log2(a[0]), Math.log2(a[1]), Math.log2(a[2]), Math.log2(a[3])]; },\n        log10_1: function (a) { return Math.log10(a); },\n        log10_2: function (a) { return [Math.log10(a[0]), Math.log10(a[1])]; },\n        log10_3: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2])]; },\n        log10_4: function (a) { return [Math.log10(a[0]), Math.log10(a[1]), Math.log10(a[2]), Math.log10(a[3])]; },\n        sqrt_1: function (a) { return Math.sqrt(a); },\n        sqrt_2: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1])]; },\n        sqrt_3: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2])]; },\n        sqrt_4: function (a) { return [Math.sqrt(a[0]), Math.sqrt(a[1]), Math.sqrt(a[2]), Math.sqrt(a[3])]; },\n        int_2_1_1: function (a, b) { return [a | 0, b | 0]; },\n        int_2_2: function (a) { return [a[0] | 0, a[1] | 0]; },\n        int_3_1_1_1: function (a, b, c) { return [a | 0, b | 0, c | 0]; },\n        int_3_2_1: function (a, b) { return [a[0] | 0, a[1] | 0, b | 0]; },\n        int_3_1_2: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0]; },\n        int_3_3: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0]; },\n        int_4_1_1_1_1: function (a, b, c, d) { return [a | 0, b | 0, c | 0, d | 0]; },\n        int_4_2_1_1: function (a, b, c) { return [a[0] | 0, a[1] | 0, b | 0, c | 0]; },\n        int_4_1_2_1: function (a, b, c) { return [a | 0, b[0] | 0, b[1] | 0, c | 0]; },\n        int_4_1_1_2: function (a, b, c) { return [a | 0, b | 0, c[0] | 0, c[1] | 0]; },\n        int_4_3_1: function (a, b) { return [a[0] | 0, a[1] | 0, a[2] | 0, b | 0]; },\n        int_4_1_3: function (a, b) { return [a | 0, b[0] | 0, b[1] | 0, b[2] | 0]; },\n        int_4_2_2: function (a, b) { return [a[0] | 0, a[1] | 0, b[0] | 0, b[1] | 0]; },\n        int_4_4: function (a) { return [a[0] | 0, a[1] | 0, a[2] | 0, a[3] | 0]; },\n        float_2_1_1: function (a, b) { return [a, b]; },\n        float_2_2: function (a) { return [a[0], a[1]]; },\n        float_3_1_1_1: function (a, b, c) { return [a, b, c]; },\n        float_3_2_1: function (a, b) { return [a[0], a[1], b]; },\n        float_3_1_2: function (a, b) { return [a, b[0], b[1]]; },\n        float_3_3: function (a) { return [a[0], a[1], a[2]]; },\n        float_4_1_1_1_1: function (a, b, c, d) { return [a, b, c, d]; },\n        float_4_2_1_1: function (a, b, c) { return [a[0], a[1], b, c]; },\n        float_4_1_2_1: function (a, b, c) { return [a, b[0], b[1], c]; },\n        float_4_1_1_2: function (a, b, c) { return [a, b, c[0], c[1]]; },\n        float_4_3_1: function (a, b) { return [a[0], a[1], a[2], b]; },\n        float_4_1_3: function (a, b) { return [a, b[0], b[1], b[2]]; },\n        float_4_2_2: function (a, b) { return [a[0], a[1], b[0], b[1]]; },\n        float_4_4: function (a) { return [a[0], a[1], a[2], a[3]]; },\n        uint_2_1_1: function (a, b) { return [a >>> 0, b >>> 0]; },\n        uint_2_2: function (a) { return [a[0] >>> 0, a[1] >>> 0]; },\n        uint_3_1_1_1: function (a, b, c) { return [a >>> 0, b >>> 0, c >>> 0]; },\n        uint_3_2_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0]; },\n        uint_3_1_2: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0]; },\n        uint_3_3: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0]; },\n        uint_4_1_1_1_1: function (a, b, c, d) { return [a >>> 0, b >>> 0, c >>> 0, d >>> 0]; },\n        uint_4_2_1_1: function (a, b, c) { return [a[0] >>> 0, a[1] >>> 0, b >>> 0, c >>> 0]; },\n        uint_4_1_2_1: function (a, b, c) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, c >>> 0]; },\n        uint_4_1_1_2: function (a, b, c) { return [a >>> 0, b >>> 0, c[0] >>> 0, c[1] >>> 0]; },\n        uint_4_3_1: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, b >>> 0]; },\n        uint_4_1_3: function (a, b) { return [a >>> 0, b[0] >>> 0, b[1] >>> 0, b[2] >>> 0]; },\n        uint_4_2_2: function (a, b) { return [a[0] >>> 0, a[1] >>> 0, b[0] >>> 0, b[1] >>> 0]; },\n        uint_4_4: function (a) { return [a[0] >>> 0, a[1] >>> 0, a[2] >>> 0, a[3] >>> 0]; },\n    };\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/std___std_all.js\", deps, func);\n\tvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.time = exports.__deepClone = exports.__makeMap = exports.map = exports.array = exports.sleep = exports.hashableTypeToString = exports.globalVarGet = exports.globalVarInit = exports.compute = exports.statGraph = exports.stat = exports.flush = exports.print = exports.getShadeupLocalContext = exports.Mesh = exports.__dummy = void 0;\n    /**__SHADEUP_STRUCT_INJECTION_HOOK__*/\n    exports.__dummy = 1;\n    // import { Mesh } from '/_std/mesh';\n    var Mesh = /** @class */ (function () {\n        function Mesh(prefils) {\n            this.vertices = [];\n            this.triangles = [];\n            this.normals = [];\n            this.tangents = [];\n            this.bitangents = [];\n            this.uvs = [];\n            this.colors = [];\n            this.symbol = Symbol();\n            if (prefils.vertices)\n                this.vertices = prefils.vertices;\n            if (prefils.triangles)\n                this.triangles = prefils.triangles;\n            if (prefils.normals)\n                this.normals = prefils.normals;\n            if (prefils.tangents)\n                this.tangents = prefils.tangents;\n            if (prefils.bitangents)\n                this.bitangents = prefils.bitangents;\n            if (prefils.uvs)\n                this.uvs = prefils.uvs;\n            if (prefils.colors)\n                this.colors = prefils.colors;\n        }\n        Mesh.prototype.getVertices = function () {\n            return this.vertices;\n        };\n        Mesh.prototype.getTriangles = function () {\n            return this.triangles;\n        };\n        Mesh.prototype.getNormals = function () {\n            return this.normals;\n        };\n        Mesh.prototype.getTangents = function () {\n            return this.tangents;\n        };\n        Mesh.prototype.getBitangents = function () {\n            return this.bitangents;\n        };\n        Mesh.prototype.getUVs = function () {\n            return this.uvs;\n        };\n        Mesh.prototype.getColors = function () {\n            return this.colors;\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_245_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), Mesh)\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n    /**\n     * Prints a set of value(s) to the console. Values will be converted to strings before printing.\n     *\n     * @param args Any number of values to print to the console\n     */\n    function print() {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        console.log.apply(console, args);\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_print'] === 'function') {\n            (_a = (0, exports.getShadeupLocalContext)())['__shadeup_print'].apply(_a, args);\n        }\n    }\n    exports.print = print;\n    /**\n     * Flushes (executes) all queued compute or draw calls\n     * @shadeup=tag(async) @shadeup=noemit_gpu\n     */\n    function flush() {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!(typeof (0, exports.getShadeupLocalContext)()['flushAdapter'] === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, (0, exports.getShadeupLocalContext)()['flushAdapter']()];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    }\n    exports.flush = flush;\n    /**\n     * Displays a single value in the stats panel at the top right\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any value\n     */\n    function stat(name, value) {\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_stat'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_stat'](name, value);\n        }\n    }\n    exports.stat = stat;\n    /**\n     * Display a graph of a numeric value over time\n     *\n     * @param name key for this stat (e.g. \"fps\")\n     * @param value any numeric value\n     * @param sampleRate how often should the graph be updated (e.g. 1 = every call, 2 = every second call, etc.)\n     */\n    function statGraph(name, value, sampleRate) {\n        if (sampleRate === void 0) { sampleRate = 1; }\n        if (typeof (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'] === 'function') {\n            (0, exports.getShadeupLocalContext)()['__shadeup_statGraph'](name, value);\n        }\n    }\n    exports.statGraph = statGraph;\n    function infer(fn) {\n        return fn;\n    }\n    // export function drawAlt(keys: shader<ShaderInput, ShaderOutput, 0>) {}\n    // export function draw(fullScreenPixelShader: shader<ShaderInput, ShaderOutput, 0>): void;\n    // export function draw(\n    // \tfirst: Mesh | any | shader<ShaderInput, ShaderOutput>,\n    // \tsecond?: shader<ShaderInput, ShaderOutput>,\n    // \tthird?: shader<ShaderInput, ShaderOutput>\n    // ) {\n    // \tif ('vertices' in first && second && third) {\n    // \t\t__shadeup_dispatch_draw_geometry(first, second, third);\n    // \t} else if (first && !second && !third) {\n    // \t\t__shadeup_dispatch_draw(first as shader<ShaderInput, ShaderOutput>);\n    // \t}\n    // }\n    // draw(makeShader('', (a, b) => {}));\n    // drawAlt(\n    // \tmakeShader(\n    // \t\t'000004808000091289258019303699031390005438610',\n    // \t\t/**@shadeup=shader*/ (__in, __out) => {\n    // \t\t\t__out.color;\n    // \t\t}\n    // \t)\n    // );\n    // /**\n    //  *\n    //  */\n    function compute(workgroups, computeShader) {\n        (0, exports.getShadeupLocalContext)().__shadeup_dispatch_compute(workgroups, computeShader);\n    }\n    exports.compute = compute;\n    // function draww(s: shader<{ abc: 123 }, { test: 123 }>) {}\n    // type x<T> = { x: T };\n    // function makeTex<T>(a: T): x<T> {\n    // \treturn { x: a };\n    // }\n    // draw({\n    // \tvertex: shader('abc', (__in, __out) => {}),\n    // \tattachments: [\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 }),\n    // \t\tmakeTex({ abc: 123 })\n    // \t],\n    // \tmesh: new Mesh(),\n    // \tfragment: shader('abc', (__in, __out) => {\n    // \t\t//__out.attachment0\n    // \t})\n    // });\n    function globalVarInit(fileName, varName, initFn, getterFn) {\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals']) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'] = {};\n        }\n        if (!(0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName] = {};\n        }\n        // Disable caching for now\n        var cache = false;\n        if (!(varName in (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]) || !cache) {\n            (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName] = initFn();\n        }\n        (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName] = getterFn;\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName][varName];\n    }\n    exports.globalVarInit = globalVarInit;\n    function globalVarGet(fileName, varName) {\n        if (varName == 'env' || varName == 'PLATFORM_WEBGPU' || varName == 'PLATFORM_WEBGL') {\n            return (0, exports.getShadeupLocalContext)()[varName];\n        }\n        return (0, exports.getShadeupLocalContext)()['shadeup_globals'][fileName]['$getter_' + varName]();\n    }\n    exports.globalVarGet = globalVarGet;\n    function hashableTypeToString(k) {\n        if (typeof k == 'number') {\n            return k.toString();\n        }\n        else if (typeof k == 'object') {\n            if (Array.isArray(k)) {\n                return k.map(hashableTypeToString).join(',');\n            }\n            else {\n                return k.toString();\n            }\n        }\n        else {\n            return k.toString();\n        }\n    }\n    exports.hashableTypeToString = hashableTypeToString;\n    Array.prototype.len = function () {\n        return this.length;\n    };\n    Array.prototype.last = function () {\n        return this[this.length - 1];\n    };\n    Array.prototype.first = function () {\n        return this[0];\n    };\n    Array.prototype.append = function (items) {\n        for (var i = 0; i < items.length; i++) {\n            this.push(items[i]);\n        }\n    };\n    Array.prototype.remove = function (index) {\n        this.splice(index, 1);\n    };\n    Array.prototype.__index = function (index) {\n        return this[index];\n    };\n    Array.prototype.__index_assign = function (index, value) {\n        this[index] = value;\n    };\n    Array.prototype.__index_assign_op = function (op_fn, index, value) {\n        this[index] = op_fn(this[index], value);\n    };\n    /** @shadeup=tag(async) */\n    function sleep(seconds) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })];\n            });\n        });\n    }\n    exports.sleep = sleep;\n    function array(count, initializer) {\n        if (initializer === void 0) { initializer = null; }\n        var arr = new Array(count);\n        if (initializer) {\n            for (var i = 0; i < count; i++) {\n                arr[i] = initializer;\n            }\n        }\n        return arr;\n    }\n    exports.array = array;\n    var map = /** @class */ (function () {\n        function map(entries) {\n            this.pairs = new Map();\n            if (entries)\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                    var e = entries_1[_i];\n                    this.__index_assign(e[0], e[1]);\n                }\n        }\n        map.prototype.__index = function (key) {\n            if (!this.pairs.has(hashableTypeToString(key))) {\n                throw new Error('Key not found: ' + hashableTypeToString(key));\n            }\n            return this.pairs.get(hashableTypeToString(key))[1];\n        };\n        map.prototype.__index_assign = function (key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, value]);\n        };\n        map.prototype.__index_assign_op = function (op_fn, key, value) {\n            this.pairs.set(hashableTypeToString(key), [key, op_fn(this.__index(key), value)]);\n        };\n        map.prototype.delete = function (key) {\n            this.pairs.delete(hashableTypeToString(key));\n        };\n        map.prototype.has = function (key) {\n            return this.pairs.has(hashableTypeToString(key));\n        };\n        map.prototype.keys = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[0]; });\n        };\n        map.prototype.values = function () {\n            return Array.from(this.pairs.values()).map(function (k) { return k[1]; });\n        };\n        map.new = function (entries) {\n            return new map(entries);\n        };\n        map.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_8545_map\\\",\\\"fields\\\":[[\\\"pairs\\\",null]]}\");\n        };\n        return map;\n    }());\n    exports.map = map;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_8545_map\\\",\\\"fields\\\":[[\\\"pairs\\\",null]]}\"), map)\n    function __makeMap(initial) {\n        return new map(Object.entries(initial));\n    }\n    exports.__makeMap = __makeMap;\n    function __deepClone(value) {\n        if (typeof value == 'object') {\n            if (Array.isArray(value)) {\n                var res = new Array(value.length);\n                for (var i = 0; i < value.length; i++) {\n                    res[i] = __deepClone(value[i]);\n                }\n                return res;\n            }\n            else {\n                if (value && typeof value.clone == 'function') {\n                    return value.clone();\n                }\n                else {\n                    return value;\n                }\n            }\n        }\n        else {\n            return value;\n        }\n    }\n    exports.__deepClone = __deepClone;\n    var time = /** @class */ (function () {\n        function time() {\n        }\n        /** Saves the current time with a key of name */\n        time.start = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_start');\n        };\n        /** Returns the difference in milliseconds between a start with the same key */\n        time.stop = function (name) {\n            performance.mark((name !== null && name !== void 0 ? name : '_default') + '_end');\n            var res = performance.measure((name !== null && name !== void 0 ? name : '_default') + '_diff', (name !== null && name !== void 0 ? name : '_default') + '_start', (name !== null && name !== void 0 ? name : '_default') + '_end');\n            return res.duration;\n        };\n        /**\n         * This returns a decimal resolution time in milliseconds since the page started. Useful for measuring time differences\n         *\n         * This uses performance.now() under the hood:\n         * The performance.now() method returns a high resolution timestamp in milliseconds. It represents the time elapsed since Performance.timeOrigin\n         */\n        time.now = function () {\n            return performance.now();\n        };\n        time.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_10778_time\\\",\\\"fields\\\":[]}\");\n        };\n        return time;\n    }());\n    exports.time = time;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_std_i_iistd_all_ts_10778_time\\\",\\\"fields\\\":[]}\"), time)\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/std.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\ndefine([\"require\", \"exports\", \"/_std/ui\", \"/_std/mesh\", \"/_std/sdf\", \"/_std/geo\", \"/_std/native\"], function (require, exports, ui_1, mesh_1, sdf_1, geo_1, native_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.geo = exports.sdf = exports.Mesh = exports.mesh = exports.ui = void 0;\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\n    Object.defineProperty(exports, \"mesh\", { enumerable: true, get: function () { return mesh_1.mesh; } });\n    Object.defineProperty(exports, \"Mesh\", { enumerable: true, get: function () { return mesh_1.Mesh; } });\n    Object.defineProperty(exports, \"sdf\", { enumerable: true, get: function () { return sdf_1.sdf; } });\n    Object.defineProperty(exports, \"geo\", { enumerable: true, get: function () { return geo_1.geo; } });\n    __exportStar(native_1, exports);\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/ui.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.ui = void 0;\n    var ui;\n    (function (ui) {\n        function puck(position) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position);\n        }\n        ui.puck = puck;\n        function draggable(position, radius) {\n            if (radius === void 0) { radius = 10; }\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_PUCK(position, radius, true);\n        }\n        ui.draggable = draggable;\n        function textbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('textbox', value);\n        }\n        ui.textbox = textbox;\n        function slider(value, min, max) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_SLIDER(value, { min: min, max: max });\n        }\n        ui.slider = slider;\n        function label(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('label', text);\n        }\n        ui.label = label;\n        function checkbox(value) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('checkbox', value);\n        }\n        ui.checkbox = checkbox;\n        function combo(value, options) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('combo', value, { options: options });\n        }\n        ui.combo = combo;\n        function group(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('group', text);\n        }\n        ui.group = group;\n        function button(text) {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('button', false, { text: text });\n        }\n        ui.button = button;\n        function pop() {\n            return (0, context_1.getShadeupLocalContext)()._SHADEUP_UI_CONTROL('pop');\n        }\n        ui.pop = pop;\n    })(ui = exports.ui || (exports.ui = {}));\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/native.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/common\", \"/_std/context\"], function (require, exports, common_1, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.KeyboardInputState = exports.MouseInputState = exports.FrameContext = exports.shadeupMakeTextureFromUrl = void 0;\n    function shadeupMakeTextureFromUrl(url) {\n        return (0, context_1.getShadeupLocalContext)()['shadeupMakeTextureFromUrlNative'](url);\n    }\n    exports.shadeupMakeTextureFromUrl = shadeupMakeTextureFromUrl;\n    var FrameContext = /** @class */ (function () {\n        function FrameContext() {\n            /** Mouse/touch screen input state for this frame */\n            this.mouse = new MouseInputState();\n            /** Keyboard input state for this frame */\n            this.keyboard = new KeyboardInputState();\n            /** Controllable camera (Hold right click and use WASD to move) */\n            this.camera = new common_1.Camera();\n            this.camera2d = new common_1.Camera2d();\n        }\n        FrameContext.prototype.configureCamera = function (options) { };\n        /**\n         * Use external values from the host JavaScript environment.\n         */\n        FrameContext.prototype.input = function (key, defaultValue) {\n            return defaultValue;\n        };\n        /**\n         * Send values to the host JavaScript environment.\n         */\n        FrameContext.prototype.output = function (key, value) { };\n        FrameContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_387_FrameContext\\\",\\\"fields\\\":[[\\\"deltaTime\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"time\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"screenSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frame\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"mouse\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}],[\\\"keyboard\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}],[\\\"camera\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}],[\\\"camera2d\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}]]}\");\n        };\n        return FrameContext;\n    }());\n    exports.FrameContext = FrameContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_387_FrameContext\\\",\\\"fields\\\":[[\\\"deltaTime\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"time\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"screenSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frame\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"mouse\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}],[\\\"keyboard\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}],[\\\"camera\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}],[\\\"camera2d\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}]]}\"), FrameContext)\n    var MouseInputState = /** @class */ (function () {\n        function MouseInputState() {\n            /** , Some(\"Mouse button down state for buttons 0-3 (left, middle, right */\n            this.button = [false, false, false];\n            /** Mouse button pressed state for buttons 0-3 (left, middle, right) */\n            this.clicked = [false, false, false];\n        }\n        MouseInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}\");\n        };\n        return MouseInputState;\n    }());\n    exports.MouseInputState = MouseInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_1719_MouseInputState\\\",\\\"fields\\\":[[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"startUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaUv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"deltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"frameDeltaScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"button\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"clicked\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"},\\\"staticSize\\\":3}],[\\\"dragging\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"wheel\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"velocity\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"focused\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}]]}\"), MouseInputState)\n    var KeyboardInputState = /** @class */ (function () {\n        function KeyboardInputState() {\n        }\n        KeyboardInputState.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}\");\n        };\n        return KeyboardInputState;\n    }());\n    exports.KeyboardInputState = KeyboardInputState;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_native_ts_3334_KeyboardInputState\\\",\\\"fields\\\":[[\\\"backspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"tab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"enter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"shiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"controlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"altRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"capsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"escape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"space\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"home\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"printScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"insert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"delete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"digit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"keyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"metaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"contextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"f12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"numLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"scrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"semicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"equal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"comma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"minus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"period\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"slash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"backslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"bracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"quote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackspace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedTab\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnter\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedShiftRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedControlRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedAltRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPause\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedCapsLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEscape\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSpace\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPageDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedHome\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowUp\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedArrowDown\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPrintScreen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedInsert\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDelete\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedDigit9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyA\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyB\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyC\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyD\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyE\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyF\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyG\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyH\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyI\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyJ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyK\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyL\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyM\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyN\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyO\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyP\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyQ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyR\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyS\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyT\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyU\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyV\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyW\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyX\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyY\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedKeyZ\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMetaRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedContextMenu\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad0\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpad9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadMultiply\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadAdd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadSubtract\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDecimal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumpadDivide\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF1\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF2\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF3\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF4\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF5\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF6\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF7\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF8\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF9\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF10\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF11\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedF12\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedNumLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedScrollLock\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSemicolon\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedEqual\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedComma\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedMinus\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedPeriod\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedSlash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackquote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketLeft\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBackslash\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedBracketRight\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pressedQuote\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"arrowVector\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}]]}\"), KeyboardInputState)\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/paint.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.PaintingContext = void 0;\n    var PaintingContext = /** @class */ (function () {\n        function PaintingContext(canvas, gl) {\n            var _this = this;\n            this.markDirtyCallback = function () { };\n            this.__ctx = null;\n            this.__gl = null;\n            this.__offscreen_canvas = null;\n            this.__program = null;\n            this.stagedChanges = false;\n            this.dirty = false;\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.__currentColor = null;\n            this.pointsCounter = 0;\n            this.cacheSize = [0, 0];\n            if (!gl)\n                return;\n            this.__gl = gl;\n            this.__canvas = canvas;\n            this.__offscreen_canvas = document.createElement('canvas');\n            this.__offscreen_canvas.width = canvas.width;\n            this.__offscreen_canvas.height = canvas.height;\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__ctx = this.__offscreen_canvas.getContext('2d', {\n                willReadFrequently: true\n            });\n            this.__offscreen_canvas.style.position = 'absolute';\n            this.__offscreen_canvas.style.zIndex = '10';\n            // document.body.appendChild(this.__offscreen_canvas);\n            this.__setColor([0, 0, 0, 1]);\n            gl.addEventListener('context', function (toContext) {\n                if (toContext == 'draw') {\n                    _this.flush();\n                }\n            });\n            gl.addEventListener('flush', function () {\n                _this.flush();\n            });\n        }\n        PaintingContext.prototype.flush = function () {\n            if (!this.__gl)\n                return;\n            if (!this.__canvas)\n                return;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.stagedChanges)\n                return;\n            if (this.fastPoints)\n                this.flushPoints();\n            this.__gl.drawImage(this.__offscreen_canvas);\n            this.stagedChanges = false;\n            if (this.__offscreen_canvas.width != this.__canvas.width ||\n                this.__offscreen_canvas.height != this.__canvas.height) {\n                this.__offscreen_canvas.width = this.__canvas.width;\n                this.__offscreen_canvas.height = this.__canvas.height;\n            }\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.__beforeDraw = function () {\n            var _a;\n            if (!this.__offscreen_canvas)\n                return;\n            if (!this.__ctx)\n                return;\n            if (!this.__canvas)\n                return;\n            this.markDirtyCallback();\n            (_a = this.__gl) === null || _a === void 0 ? void 0 : _a.activatePaintContext();\n            if (!this.stagedChanges) {\n                this.__ctx.clearRect(0, 0, this.__canvas.width, this.__canvas.height);\n                this.__ctx.drawImage(this.__canvas, 0, 0);\n                var color = this.__currentColor;\n                this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n                this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            }\n        };\n        PaintingContext.prototype.__afterDraw = function () {\n            var gl = this.__gl;\n            this.dirty = true;\n            this.stagedChanges = true;\n        };\n        PaintingContext.prototype.__setColor = function (color) {\n            if (!this.__ctx || !color)\n                return;\n            if (this.__currentColor &&\n                this.__currentColor[0] == color[0] &&\n                this.__currentColor[1] == color[1] &&\n                this.__currentColor[2] == color[2] &&\n                this.__currentColor[3] == color[3])\n                return;\n            this.__ctx.strokeStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__ctx.fillStyle = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n            this.__currentColor = [color[0], color[1], color[2], color[3]];\n        };\n        PaintingContext.prototype.fillRect = function (pos, size, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillRect(pos[0], pos[1], size[0], size[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillCircle = function (pos, radius, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillArc = function (pos, radius, startAngle, endAngle, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.line = function (pos1, pos2, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos1[0], pos1[1]);\n            this.__ctx.lineTo(pos2[0], pos2[1]);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.circle = function (pos, radius, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, 0, Math.PI * 2);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.arc = function (pos, radius, startAngle, endAngle, color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.__ctx.arc(pos[0], pos[1], radius, startAngle, endAngle);\n            this.__ctx.lineWidth = width;\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.text = function (pos, text, color) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.fillText(text, pos[0], pos[1]);\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.startPath = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.flushPoints();\n            this.__beforeDraw();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.lineTo = function (pos) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineTo(pos[0], pos[1]);\n        };\n        PaintingContext.prototype.strokePath = function (color, width) {\n            if (width === void 0) { width = 1; }\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n            this.__setColor(color);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.fillPath = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__setColor(color);\n            this.__ctx.fill();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.setStrokeWidth = function (width) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineWidth = width;\n        };\n        PaintingContext.prototype.setFont = function (font) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = font;\n        };\n        PaintingContext.prototype.setFontSize = function (size) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.font = \"\".concat(size, \"px \").concat(this.__ctx.font.split(' ').slice(1).join(' '));\n        };\n        PaintingContext.prototype.setTextAlign = function (align) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textAlign = align;\n        };\n        PaintingContext.prototype.setTextBaseline = function (baseline) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.textBaseline = baseline;\n        };\n        PaintingContext.prototype.setLineCap = function (cap) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineCap = cap;\n        };\n        PaintingContext.prototype.setLineJoin = function (join) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineJoin = join;\n        };\n        PaintingContext.prototype.setMiterLimit = function (limit) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.miterLimit = limit;\n        };\n        PaintingContext.prototype.setShadowColor = function (color) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowColor = \"rgba(\".concat(color[0] * 255, \", \").concat(color[1] * 255, \", \").concat(color[2] * 255, \", \").concat(color[3], \")\");\n        };\n        PaintingContext.prototype.setShadowBlur = function (blur) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowBlur = blur;\n        };\n        PaintingContext.prototype.setShadowOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.shadowOffsetX = offset[0];\n            this.__ctx.shadowOffsetY = offset[1];\n        };\n        PaintingContext.prototype.setGlobalAlpha = function (alpha) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalAlpha = alpha;\n        };\n        PaintingContext.prototype.setGlobalCompositeOperation = function (op) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.globalCompositeOperation = op;\n        };\n        PaintingContext.prototype.setImageSmoothingEnabled = function (enabled) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingEnabled = enabled;\n        };\n        PaintingContext.prototype.setImageSmoothingQuality = function (quality) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.imageSmoothingQuality = quality;\n        };\n        PaintingContext.prototype.setLineDash = function (dash) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setLineDash(dash);\n        };\n        PaintingContext.prototype.setLineDashOffset = function (offset) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.lineDashOffset = offset;\n        };\n        PaintingContext.prototype.setTransform = function (a, b, c, d, e, f) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.setTransform(a, b, c, d, e, f);\n        };\n        PaintingContext.prototype.resetTransform = function () {\n            if (!this.__ctx)\n                return;\n            this.__ctx.resetTransform();\n        };\n        PaintingContext.prototype.scale = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.scale(v[0], v[1]);\n        };\n        PaintingContext.prototype.rotate = function (angle) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.rotate(angle);\n        };\n        PaintingContext.prototype.translate = function (v) {\n            if (!this.__ctx)\n                return;\n            this.__ctx.translate(v[0], v[1]);\n        };\n        PaintingContext.prototype.flushPoints = function () {\n            if (!this.__ctx)\n                return;\n            if (!this.fastPoints)\n                return;\n            if (!this.fastPointsBuffer)\n                return;\n            this.__ctx.putImageData(this.fastPointsBuffer, 0, 0);\n            this.fastPoints = false;\n            this.fastPointsBuffer = null;\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.point = function (pos, color) {\n            if (!this.__ctx)\n                return;\n            this.pointsCounter++;\n            this.__beforeDraw();\n            if (this.pointsCounter > 10) {\n                if (!this.fastPoints) {\n                    this.fastPoints = true;\n                    this.cacheSize = [this.__offscreen_canvas.width, this.__offscreen_canvas.height];\n                    this.fastPointsBuffer = this.__ctx.getImageData(0, 0, this.cacheSize[0], this.cacheSize[1]);\n                }\n                if (!this.fastPointsBuffer)\n                    return;\n                var x = Math.floor(pos[0]);\n                var y = Math.floor(pos[1]);\n                var index = (y * this.cacheSize[0] + x) * 4;\n                if (!color) {\n                    color = this.__currentColor;\n                }\n                var oldColorx = this.fastPointsBuffer.data[index] / 255;\n                var oldColory = this.fastPointsBuffer.data[index + 1] / 255;\n                var oldColorz = this.fastPointsBuffer.data[index + 2] / 255;\n                var oldColora = this.fastPointsBuffer.data[index + 3] / 255;\n                this.fastPointsBuffer.data[index] =\n                    color[0] * 255 * color[3] + oldColorx * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 1] =\n                    color[1] * 255 * color[3] + oldColory * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 2] =\n                    color[2] * 255 * color[3] + oldColorz * 255 * (1 - color[3]);\n                this.fastPointsBuffer.data[index + 3] = color[3] * 255 + oldColora * 255 * (1 - color[3]);\n            }\n            else {\n                this.__setColor(color);\n                this.__ctx.fillRect(pos[0], pos[1], 1, 1);\n            }\n            this.__afterDraw();\n        };\n        PaintingContext.prototype.vector = function (pos, dir, color, width) {\n            if (color === void 0) { color = [0.9803921568627451, 0.8, 0.08235294117647059, 1]; }\n            if (width === void 0) { width = 4; }\n            if (!this.__ctx || (dir[0] == 0 && dir[1] == 0))\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            this.__ctx.moveTo(pos[0], pos[1]);\n            this.__ctx.lineCap = 'round';\n            this.__ctx.lineTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.stroke();\n            this.__ctx.beginPath();\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            // Arrows\n            var arrowSize = 20;\n            var arrowAngle = Math.PI / 5;\n            var dirAngle = Math.atan2(dir[1], dir[0]) + Math.PI;\n            var arrow1 = [\n                Math.cos(dirAngle + arrowAngle) * arrowSize,\n                Math.sin(dirAngle + arrowAngle) * arrowSize\n            ];\n            var arrow2 = [\n                Math.cos(dirAngle - arrowAngle) * arrowSize,\n                Math.sin(dirAngle - arrowAngle) * arrowSize\n            ];\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow1[0], pos[1] + dir[1] + arrow1[1]);\n            this.__ctx.moveTo(pos[0] + dir[0], pos[1] + dir[1]);\n            this.__ctx.lineTo(pos[0] + dir[0] + arrow2[0], pos[1] + dir[1] + arrow2[1]);\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype.grid = function (center, count, gap, color, width) {\n            if (color === void 0) { color = [0.1607843137254902, 0.1450980392156863, 0.1411764705882353, 1]; }\n            if (width === void 0) { width = 2; }\n            if (!this.__ctx)\n                return;\n            this.__beforeDraw();\n            this.__setColor(color);\n            this.__ctx.beginPath();\n            this.setStrokeWidth(width);\n            var start = [\n                center[0] - (count[0] / 2) * gap[0],\n                center[1] - (count[1] / 2) * gap[1]\n            ];\n            for (var i = 0; i <= count[0]; i++) {\n                this.__ctx.moveTo(start[0] + i * gap[0], start[1]);\n                this.__ctx.lineTo(start[0] + i * gap[0], start[1] + count[1] * gap[1]);\n            }\n            for (var i = 0; i <= count[1]; i++) {\n                this.__ctx.moveTo(start[0], start[1] + i * gap[1]);\n                this.__ctx.lineTo(start[0] + count[0] * gap[0], start[1] + i * gap[1]);\n            }\n            this.__ctx.stroke();\n            this.__afterDraw();\n            this.pointsCounter = 0;\n        };\n        PaintingContext.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}\");\n        };\n        return PaintingContext;\n    }());\n    exports.PaintingContext = PaintingContext;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}\"), PaintingContext)\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/buffer.js\", deps, func);\n\tvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\ndefine([\"require\", \"exports\", \"/_std/context\", \"/std_math\"], function (require, exports, context_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.buffer = exports.buffer_internal = void 0;\n    var __ = { intifyVector: std_math_1.intifyVector };\n    var buffer_internal = /** @class */ (function () {\n        function buffer_internal(size, typeName, structure) {\n            var _this = this;\n            this.__opaque_buffer = true;\n            this.structArray = null;\n            this.floatArray = null;\n            this.intArray = null;\n            this.uintArray = null;\n            this.arrayBuffer = null;\n            this.vectorSize = 0;\n            this.platformPayload = null;\n            this.adapter = null;\n            this.dirty = false;\n            this.pendingWrites = 0;\n            this.cpuReadDirty = false;\n            this.cpuWriteDirty = false;\n            this.elementCount = 0;\n            this.elementBytes = 0;\n            this.structured = false;\n            this.watchMutation = false;\n            this.symbol = Symbol();\n            this.adapter = (0, context_1.getShadeupLocalContext)().shadeupGetGraphicsAdapter();\n            this.typeName = typeName;\n            if (structure) {\n                if (structure.name && !structure.name.startsWith('atomic')) {\n                    this.typeName = structure.name;\n                }\n            }\n            this.elementCount = size;\n            this.elementBytes = 4;\n            if (typeName == 'float4' ||\n                typeName == 'float3' ||\n                typeName == 'float2' ||\n                typeName == 'float') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.floatArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.floatArray[index] = value;\n                };\n                if (typeName == 'float4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float4)(_this.floatArray[index * 4], _this.floatArray[index * 4 + 1], _this.floatArray[index * 4 + 2], _this.floatArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 4] = value[0];\n                        _this.floatArray[index * 4 + 1] = value[1];\n                        _this.floatArray[index * 4 + 2] = value[2];\n                        _this.floatArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'float3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float3)(_this.floatArray[index * 3], _this.floatArray[index * 3 + 1], _this.floatArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 3] = value[0];\n                        _this.floatArray[index * 3 + 1] = value[1];\n                        _this.floatArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'float2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.float2)(_this.floatArray[index * 2], _this.floatArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.floatArray[index * 2] = value[0];\n                        _this.floatArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.floatArray = new Float32Array(size * this.vectorSize);\n                this.arrayBuffer = this.floatArray.buffer;\n            }\n            else if (typeName == 'int4' ||\n                typeName == 'int3' ||\n                typeName == 'int2' ||\n                typeName == 'int') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.intArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.intArray[index] = value;\n                };\n                if (typeName == 'int4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int4)(_this.intArray[index * 4], _this.intArray[index * 4 + 1], _this.intArray[index * 4 + 2], _this.intArray[index * 4 + 3]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 4] = value[0];\n                        _this.intArray[index * 4 + 1] = value[1];\n                        _this.intArray[index * 4 + 2] = value[2];\n                        _this.intArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'int3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int3)(_this.intArray[index * 3], _this.intArray[index * 3 + 1], _this.intArray[index * 3 + 2]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 3] = value[0];\n                        _this.intArray[index * 3 + 1] = value[1];\n                        _this.intArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'int2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return __.intifyVector((0, std_math_1.int2)(_this.intArray[index * 2], _this.intArray[index * 2 + 1]));\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.intArray[index * 2] = value[0];\n                        _this.intArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.intArray = new Int32Array(size * this.vectorSize);\n                this.arrayBuffer = this.intArray.buffer;\n            }\n            else if (typeName == 'uint4' ||\n                typeName == 'uint3' ||\n                typeName == 'uint2' ||\n                typeName == 'uint') {\n                this.vectorSize = 1;\n                this.fastIndex = function (index) {\n                    return _this.uintArray[index];\n                };\n                this.fastIndexAssign = function (index, value) {\n                    _this.uintArray[index] = value;\n                };\n                if (typeName == 'uint4') {\n                    this.vectorSize = 4;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint4)(_this.uintArray[index * 4], _this.uintArray[index * 4 + 1], _this.uintArray[index * 4 + 2], _this.uintArray[index * 4 + 3]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 4] = value[0];\n                        _this.uintArray[index * 4 + 1] = value[1];\n                        _this.uintArray[index * 4 + 2] = value[2];\n                        _this.uintArray[index * 4 + 3] = value[3];\n                    };\n                }\n                if (typeName == 'uint3') {\n                    this.vectorSize = 3;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint3)(_this.uintArray[index * 3], _this.uintArray[index * 3 + 1], _this.uintArray[index * 3 + 2]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 3] = value[0];\n                        _this.uintArray[index * 3 + 1] = value[1];\n                        _this.uintArray[index * 3 + 2] = value[2];\n                    };\n                }\n                if (typeName == 'uint2') {\n                    this.vectorSize = 2;\n                    this.fastIndex = function (index) {\n                        return (0, std_math_1.uint2)(_this.uintArray[index * 2], _this.uintArray[index * 2 + 1]);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.uintArray[index * 2] = value[0];\n                        _this.uintArray[index * 2 + 1] = value[1];\n                    };\n                }\n                this.uintArray = new Uint32Array(size * this.vectorSize);\n                this.arrayBuffer = this.uintArray.buffer;\n            }\n            else {\n                this.structured = true;\n                if (typeName.startsWith('atomic<')) {\n                    // this.structArray = new Array<T>(size);\n                    this.arrayBuffer = new ArrayBuffer(size * 4);\n                    this.watchMutation = true;\n                    this.vectorSize = 1;\n                    this.elementBytes = 4;\n                    this.elementCount = size;\n                    for (var i = 0; i < size; i++) {\n                        // this.structArray[i] = atomic(0) as T;\n                    }\n                    if (typeName == 'atomic<uint>') {\n                        this.uintArray = new Uint32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.uintArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.uintArray[index] = value.__value;\n                        };\n                    }\n                    else {\n                        this.intArray = new Int32Array(this.arrayBuffer);\n                        this.fastIndex = function (index) {\n                            return (0, std_math_1.atomic)(_this.intArray[index]);\n                        };\n                        this.fastIndexAssign = function (index, value) {\n                            _this.intArray[index] = value.__value;\n                        };\n                    }\n                }\n                else {\n                    var elementSize_1 = this.adapter.getValueSize(structure);\n                    var realSize = elementSize_1 * size;\n                    this.elementCount = size;\n                    this.elementBytes = elementSize_1;\n                    this.arrayBuffer = new ArrayBuffer(realSize);\n                    this.fastIndex = function (index) {\n                        return _this.adapter.readStructuredBuffer(structure, _this.arrayBuffer, index * elementSize_1);\n                    };\n                    this.fastIndexAssign = function (index, value) {\n                        _this.cpuWriteDirty = true;\n                        _this.adapter.writeStructuredBuffer(structure, value, _this.arrayBuffer, index * (elementSize_1 / 4));\n                    };\n                }\n            }\n            this.__index = function (index) {\n                // await this.download();\n                if (_this.watchMutation) {\n                    var data = _this.fastIndex(index);\n                    data.$mutate = function (to) {\n                        _this.cpuWriteDirty = true;\n                        if (to !== undefined) {\n                            if (_this.intArray) {\n                                _this.intArray[index] = to;\n                            }\n                            else {\n                                _this.uintArray[index] = to;\n                            }\n                        }\n                    };\n                    return data;\n                }\n                else {\n                    return _this.fastIndex(index);\n                }\n            };\n            this.__index_assign = function (index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, value);\n            };\n            this.__index_assign_op = function (op_fn, index, value) {\n                // await this.download();\n                _this.cpuWriteDirty = true;\n                _this.fastIndexAssign(index, op_fn(_this.fastIndex(index), value));\n            };\n        }\n        buffer_internal.prototype.destroy = function () {\n            this.adapter.destroyBuffer(this);\n        };\n        buffer_internal.prototype.__index = function (index) {\n            // this.download();\n            // return this.fastIndex(index);\n            return null;\n        };\n        buffer_internal.prototype.__index_assign = function (index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, value);\n        };\n        buffer_internal.prototype.__index_assign_op = function (op_fn, index, value) {\n            // this.download();\n            // this.cpuWriteDirty = true;\n            // this.fastIndexAssign(index, op_fn(this.fastIndex(index), value));\n        };\n        buffer_internal.prototype.len = function () {\n            return this.elementCount;\n        };\n        /**\n         * Returns the underlying cpu buffer as a typed array.\n         *\n         * > [!NOTE]\n         * > This is considerably faster than using the raw index [] operator.\n         *\n         * > [!NOTE]\n         * > If the buffer contents are structured (atomic, or a struct), this will return a normal array\n         *\n         * ```shadeup\n         * let buf = buffer<uint>();\n         * let data = buf.getData();\n         *\n         * for (let i = 0; i < data.length; i += 4) {\n         * \t// Do something with data[i]\n         * }\n         * ```\n         */\n        buffer_internal.prototype.getData = function () {\n            var _a, _b, _c;\n            if (this.structured) {\n                return this.structArray;\n            }\n            else {\n                return (_c = (_b = (_a = this.floatArray) !== null && _a !== void 0 ? _a : this.intArray) !== null && _b !== void 0 ? _b : this.uintArray) !== null && _c !== void 0 ? _c : new Uint8Array(0);\n            }\n        };\n        buffer_internal.prototype.write = function (other) {\n            if (!this.adapter)\n                return;\n            this.adapter.copyBufferToBuffer(other, this);\n        };\n        /** @shadeup=tag(async) @shadeup=noemit_gpu */\n        buffer_internal.prototype.download = function () {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!this.adapter)\n                                return [2 /*return*/];\n                            if (this.pendingWrites > 0) {\n                                (0, context_1.getShadeupLocalContext)().flushAdapter();\n                            }\n                            if (!this.cpuReadDirty) return [3 /*break*/, 2];\n                            this.cpuReadDirty = false;\n                            return [4 /*yield*/, this.adapter.downloadBuffer(this)];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        buffer_internal.prototype.downloadAsync = function () {\n            return this['download']();\n        };\n        /** @shadeup=noemit_gpu */\n        buffer_internal.prototype.upload = function () {\n            if (!this.adapter)\n                return;\n            if (this.cpuWriteDirty) {\n                this.cpuWriteDirty = false;\n                this.adapter.uploadBuffer(this);\n            }\n        };\n        buffer_internal.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\",\\\"fields\\\":[[\\\"__opaque_buffer\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"structArray\\\",null],[\\\"floatArray\\\",null],[\\\"intArray\\\",null],[\\\"uintArray\\\",null],[\\\"arrayBuffer\\\",null],[\\\"vectorSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"typeName\\\",null],[\\\"platformPayload\\\",null],[\\\"adapter\\\",null],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pendingWrites\\\",null],[\\\"cpuReadDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"cpuWriteDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"elementCount\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"elementBytes\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"structured\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastIndex\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"fastIndexAssign\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"watchMutation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return buffer_internal;\n    }());\n    exports.buffer_internal = buffer_internal;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_buffer_ts_317_buffer_internal\\\",\\\"fields\\\":[[\\\"__opaque_buffer\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"structArray\\\",null],[\\\"floatArray\\\",null],[\\\"intArray\\\",null],[\\\"uintArray\\\",null],[\\\"arrayBuffer\\\",null],[\\\"vectorSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"typeName\\\",null],[\\\"platformPayload\\\",null],[\\\"adapter\\\",null],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"pendingWrites\\\",null],[\\\"cpuReadDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"cpuWriteDirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"elementCount\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"elementBytes\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"structured\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastIndex\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"fastIndexAssign\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"watchMutation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"symbol\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), buffer_internal)\n    function buffer(e1, typeName, structure) {\n        if (typeof e1 === 'number') {\n            var size = e1;\n            var buf = new buffer_internal(size, typeName, structure);\n            return buf;\n        }\n        else {\n            var data = e1;\n            var buf = new buffer_internal(data.length, typeName, structure);\n            for (var i = 0; i < data.length; i++) {\n                buf.fastIndexAssign(i, data[i]);\n            }\n            return buf;\n        }\n    }\n    exports.buffer = buffer;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/texture.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.texture3d = exports.texture3d_internal_empty = exports.texture2d = exports.texture2d_internal_empty = void 0;\n    var texture2d_internal_empty = /** @class */ (function () {\n        function texture2d_internal_empty() {\n            this.__opaque_texture2d = true;\n            this.size = [0, 0];\n            this.paint = null;\n        }\n        /** @shadeup=glsl(!texture($self$, $0$)) */\n        texture2d_internal_empty.prototype.__index = function (index) {\n            return null;\n        };\n        texture2d_internal_empty.prototype.__index_assign = function (index, value) {\n            return null;\n        };\n        texture2d_internal_empty.prototype.getFast = function (index) {\n            return null;\n        };\n        texture2d_internal_empty.prototype.setFast = function (index, value) {\n            return null;\n        };\n        /** @shadeup=tag(async) */\n        texture2d_internal_empty.prototype.download = function () { };\n        texture2d_internal_empty.prototype.downloadAsync = function () {\n            return null;\n        };\n        /**\n         * Returns the underlying cpu buffer as a typed array.\n         *\n         * Note that this is considerably faster than using the raw index [] operator.\n         *\n         * ```shadeup\n         * let tex = texture2d<float4>();\n         * let data = tex.getData();\n         *\n         * for (let i = 0; i < data.length; i += 4) {\n         * \tlet r = data[i];\n         * \tlet g = data[i + 1];\n         * \tlet b = data[i + 2];\n         * \tlet a = data[i + 3];\n         *\n         * \t// Do something with the pixel\n         * }\n         * ```\n         */\n        texture2d_internal_empty.prototype.getData = function () {\n            return new Uint32Array(0);\n        };\n        texture2d_internal_empty.prototype.upload = function () { };\n        texture2d_internal_empty.prototype.sample = function (position) { };\n        texture2d_internal_empty.prototype.clear = function (color) {\n            if (color === void 0) { color = 'auto'; }\n        };\n        texture2d_internal_empty.prototype.flush = function () { };\n        /** Release the texture */\n        texture2d_internal_empty.prototype.destroy = function () { };\n        texture2d_internal_empty.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture2d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"paint\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}],[\\\"draw\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawIndexed\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawAdvanced\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawInstanced\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\");\n        };\n        return texture2d_internal_empty;\n    }());\n    exports.texture2d_internal_empty = texture2d_internal_empty;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_434_texture2d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture2d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"paint\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_paint_ts_225_PaintingContext\\\",\\\"fields\\\":[[\\\"markDirtyCallback\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"__ctx\\\",null],[\\\"__gl\\\",null],[\\\"__offscreen_canvas\\\",null],[\\\"__program\\\",null],[\\\"stagedChanges\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"dirty\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPoints\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"fastPointsBuffer\\\",null],[\\\"__currentColor\\\",null],[\\\"pointsCounter\\\",null],[\\\"cacheSize\\\",{\\\"type\\\":\\\"array\\\",\\\"staticSize\\\":2}]]}],[\\\"draw\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawIndexed\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawAdvanced\\\",{\\\"type\\\":\\\"unknown\\\"}],[\\\"drawInstanced\\\",{\\\"type\\\":\\\"unknown\\\"}]]}\"), texture2d_internal_empty)\n    function texture2d(size, format, type) {\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, format, type);\n    }\n    exports.texture2d = texture2d;\n    var texture3d_internal_empty = /** @class */ (function () {\n        function texture3d_internal_empty() {\n            this.__opaque_texture3d = true;\n            this.size = [0, 0, 0];\n        }\n        /** @shadeup=glsl(!texture($self$, $0$)) */\n        texture3d_internal_empty.prototype.__index = function (index) {\n            return null;\n        };\n        texture3d_internal_empty.prototype.__index_assign = function (index, value) { };\n        texture3d_internal_empty.prototype.sample = function (position) { };\n        texture3d_internal_empty.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture3d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}]]}\");\n        };\n        return texture3d_internal_empty;\n    }());\n    exports.texture3d_internal_empty = texture3d_internal_empty;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_texture_ts_2584_texture3d_internal_empty\\\",\\\"fields\\\":[[\\\"__opaque_texture3d\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"bool\\\"}],[\\\"size\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}]]}\"), texture3d_internal_empty)\n    function texture3d(size, type) {\n        return (0, context_1.getShadeupLocalContext)().shadeupMakeTextureInternal(size, type);\n    }\n    exports.texture3d = texture3d;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/drawIndexed.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\", \"/std_math\"], function (require, exports, context_1, buffer_1, std_math_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.computeIndirect = exports.drawAttributes = exports.drawCount = exports.drawAlt2 = exports.drawFullscreen = exports.draw = exports.drawAdvanced = exports.makeShader = exports.ShaderOutput = exports.ShaderInput = exports.shader_start_shd_ = exports.drawIndirect = exports.drawIndexedIndirect = exports.drawInstancedIndexed = exports.drawInstanced = exports.drawIndexed = void 0;\n    function drawIndexed(indexBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed(indexBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexed = drawIndexed;\n    function drawInstanced(mesh, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced(mesh, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstanced = drawInstanced;\n    function drawInstancedIndexed(indexBuffer, instanceCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_instanced_indexed(indexBuffer, instanceCount, vertexShader, pixelShader);\n    }\n    exports.drawInstancedIndexed = drawInstancedIndexed;\n    function drawIndexedIndirect(indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indexed_indirect(indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndexedIndirect = drawIndexedIndirect;\n    function drawIndirect(mesh, indirectBuffer, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_indirect(mesh, indirectBuffer, vertexShader, pixelShader);\n    }\n    exports.drawIndirect = drawIndirect;\n    function shader_start_shd_(s, groupSize) {\n        return s;\n    }\n    exports.shader_start_shd_ = shader_start_shd_;\n    /**@shadeup=struct*/\n    var ShaderInput = /** @class */ (function () {\n        function ShaderInput() {\n            /** Interpolated world position (available in fragment, and vertex) */\n            this.position = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated normal (fragment), Source mesh normal (vertex) */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated tangent (fragment), Source mesh tangent (vertex) */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Interpolated bitangent (fragment), Source mesh bitangent (vertex) */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex shader output position */\n            this.clipPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            this.realPosition = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** UV channel 0 input (available in fragment, and vertex) */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Screen position in pixels (available in fragment, and vertex) */\n            this.screen = (0, std_math_1.float2)(0, 0);\n            /** Interpolated vertex color (available in fragment, and vertex)  */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Group ID (available in compute) */\n            this.groupId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Group size (available in compute) */\n            this.groupSize = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Global id (groupId * groupSize + localId) (available in compute) */\n            this.globalId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Local id (available in compute) */\n            this.localId = __.intifyVector((0, std_math_1.int3)(0, 0, 0));\n            /** Instance index (available in fragment, and vertex) */\n            this.instanceIndex = 0;\n            /** Vertex index (available in vertex) */\n            this.vertexIndex = 0;\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderInput.prototype.attr = function (index, interpolation) {\n            return null;\n        };\n        ShaderInput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderInput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"clipPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"realPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"groupId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"groupSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"globalId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"localId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"instanceIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"vertexIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}]]}\");\n        };\n        return ShaderInput;\n    }());\n    exports.ShaderInput = ShaderInput;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderInput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"clipPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"realPosition\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"screen\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"groupId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"groupSize\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"globalId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"localId\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int3\\\"}],[\\\"instanceIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"vertexIndex\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}]]}\"), ShaderInput)\n    /**@shadeup=struct*/\n    var ShaderOutput = /** @class */ (function () {\n        function ShaderOutput() {\n            /** Vertex output position */\n            this.position = (0, std_math_1.float4)(0, 0, 0, 0);\n            /** Vertex output normal */\n            this.normal = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output tangent */\n            this.tangent = (0, std_math_1.float3)(0, 0, 0);\n            /** Vertex output bitangent */\n            this.bitangent = (0, std_math_1.float3)(0, 0, 0);\n            /** UV channel 0 output */\n            this.uv = (0, std_math_1.float2)(0, 0);\n            /** Pixel color output */\n            this.color = (0, std_math_1.float4)(0, 0, 0, 0);\n        }\n        /** @shadeup=noemit_gpu */\n        ShaderOutput.prototype.attr = function (index, value, interpolation) { };\n        ShaderOutput.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderOutput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\");\n        };\n        return ShaderOutput;\n    }());\n    exports.ShaderOutput = ShaderOutput;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"ShaderOutput\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"tangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"bitangent\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"uv\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\"), ShaderOutput)\n    /** @shadeup=shader */\n    function makeShader(key, fn) {\n        return fn;\n    }\n    exports.makeShader = makeShader;\n    function drawAdvanced(descriptor) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_advanced(descriptor);\n    }\n    exports.drawAdvanced = drawAdvanced;\n    function draw(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.draw = draw;\n    function drawFullscreen(first, second, third) {\n        if ('vertices' in first && second && third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_geometry(first, second, third);\n        }\n        else if (first && !second && !third) {\n            (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw(first);\n        }\n    }\n    exports.drawFullscreen = drawFullscreen;\n    function drawAlt2(fullScreenPixelShader) { }\n    exports.drawAlt2 = drawAlt2;\n    function drawCount(triCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n    }\n    exports.drawCount = drawCount;\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\n    }\n    exports.drawAttributes = drawAttributes;\n    function computeIndirect(indirectBuffer, indirectOffset, computeShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_compute_indirect(indirectBuffer, indirectOffset, computeShader);\n    }\n    exports.computeIndirect = computeIndirect;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/drawAttributes.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\", \"/_std/buffer\"], function (require, exports, context_1, buffer_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.drawAttributes = void 0;\n    function drawAttributes(indexBuffer, buffers, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_attributes(indexBuffer, buffer_1.buffer, vertexShader, pixelShader);\n    }\n    exports.drawAttributes = drawAttributes;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/drawCount.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/_std/context\"], function (require, exports, context_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.drawCount = void 0;\n    function drawCount(triCount, vertexShader, pixelShader) {\n        (0, context_1.getShadeupLocalContext)().__shadeup_dispatch_draw_count(triCount, vertexShader, pixelShader);\n    }\n    exports.drawCount = drawCount;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/physics.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.physics = exports.PhysicsEngine3d = exports.PhysicsEngine2d = exports.PhysicsRigidBody2d = exports.PhysicsRayCastResult2d = exports.PhysicsCollider2d = void 0;\n    var PhysicsCollider2d = /** @class */ (function () {\n        function PhysicsCollider2d(rapier, world, collider) {\n            this.rapier = rapier;\n            this.world = world;\n            this.collider = collider;\n        }\n        PhysicsCollider2d.prototype.setTranslation = function (position) {\n            this.collider.setTranslation(toVec2(position));\n        };\n        PhysicsCollider2d.prototype.setRotation = function (rotation) {\n            this.collider.setRotation(rotation);\n        };\n        PhysicsCollider2d.prototype.setSensor = function (isSensor) {\n            this.collider.setSensor(isSensor);\n        };\n        PhysicsCollider2d.prototype.setCollisionGroups = function (groups) {\n            this.collider.setCollisionGroups(groups);\n        };\n        PhysicsCollider2d.prototype.setCollidesWith = function (groups) {\n            this.collider.setActiveCollisionTypes(groups);\n        };\n        PhysicsCollider2d.prototype.setFriction = function (friction) {\n            this.collider.setFriction(friction);\n        };\n        PhysicsCollider2d.prototype.setRestitution = function (restitution) {\n            this.collider.setRestitution(restitution);\n        };\n        PhysicsCollider2d.prototype.setDensity = function (density) {\n            this.collider.setDensity(density);\n        };\n        PhysicsCollider2d.prototype.setMass = function (mass) {\n            this.collider.setMass(mass);\n        };\n        PhysicsCollider2d.prototype.setRadius = function (radius) {\n            this.collider.setRadius(radius);\n        };\n        PhysicsCollider2d.prototype.setHalfExtents = function (halfExtents) {\n            this.collider.setHalfExtents(toVec2(halfExtents));\n        };\n        PhysicsCollider2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"collider\\\",null]]}\");\n        };\n        return PhysicsCollider2d;\n    }());\n    exports.PhysicsCollider2d = PhysicsCollider2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_232_PhysicsCollider2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"collider\\\",null]]}\"), PhysicsCollider2d)\n    function toVec2(v) {\n        return { x: v[0], y: v[1] };\n    }\n    function toVec3(v) {\n        return { x: v[0], y: v[1], z: v[2] };\n    }\n    var PhysicsRayCastResult2d = /** @class */ (function () {\n        function PhysicsRayCastResult2d(rapier, result) {\n            this.rapier = rapier;\n            this.result = result;\n        }\n        PhysicsRayCastResult2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"result\\\",null]]}\");\n        };\n        return PhysicsRayCastResult2d;\n    }());\n    exports.PhysicsRayCastResult2d = PhysicsRayCastResult2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1662_PhysicsRayCastResult2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"result\\\",null]]}\"), PhysicsRayCastResult2d)\n    var PhysicsRigidBody2d = /** @class */ (function () {\n        function PhysicsRigidBody2d(rapier, world, body) {\n            this.rapier = rapier;\n            this.world = world;\n            this.body = body;\n        }\n        PhysicsRigidBody2d.prototype.addBallCollider = function (radius) {\n            var colDesc = this.rapier.ColliderDesc.ball(radius);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addBoxCollider = function (halfExtents) {\n            var colDesc = this.rapier.ColliderDesc.cuboid(halfExtents[0], halfExtents[1]);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addCapsuleCollider = function (radius, halfHeight) {\n            var colDesc = this.rapier.ColliderDesc.capsule(radius, halfHeight);\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addTriangleCollider = function (a, b, c) {\n            var colDesc = this.rapier.ColliderDesc.triangle(toVec2(a), toVec2(b), toVec2(c));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addConvexCollider = function (points) {\n            var floatarr = new Float32Array(points.length * 2);\n            for (var i = 0; i < points.length; i++) {\n                floatarr[i * 2 + 0] = points[i][0];\n                floatarr[i * 2 + 1] = points[i][1];\n            }\n            var colDesc = this.rapier.ColliderDesc.convexHull(floatarr);\n            if (!colDesc)\n                throw new Error('Failed to create convex hull collider');\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.addHeightfieldCollider = function (heights, scale) {\n            var arr = new Float32Array(heights.length);\n            for (var i = 0; i < heights.length; i++) {\n                arr[i] = heights[i];\n            }\n            var colDesc = this.rapier.ColliderDesc.heightfield(arr, toVec2(scale));\n            var col = this.world.createCollider(colDesc, this.body);\n            return new PhysicsCollider2d(this.rapier, this.world, col);\n        };\n        PhysicsRigidBody2d.prototype.setTranslation = function (position) {\n            this.body.setTranslation(toVec2(position), true);\n        };\n        PhysicsRigidBody2d.prototype.setRotation = function (rotation) {\n            this.body.setRotation(rotation, true);\n        };\n        PhysicsRigidBody2d.prototype.setVelocity = function (velocity) {\n            this.body.setLinvel(toVec2(velocity), true);\n        };\n        PhysicsRigidBody2d.prototype.setAngularVelocity = function (velocity) {\n            this.body.setAngvel(velocity, true);\n        };\n        PhysicsRigidBody2d.prototype.addForce = function (force) {\n            this.body.addForce(toVec2(force), true);\n        };\n        PhysicsRigidBody2d.prototype.addForceAtPoint = function (force, point) {\n            this.body.addForceAtPoint(toVec2(force), toVec2(point), true);\n        };\n        PhysicsRigidBody2d.prototype.addTorque = function (torque) {\n            this.body.addTorque(torque, true);\n        };\n        PhysicsRigidBody2d.prototype.setAdditionalMass = function (mass) {\n            this.body.setAdditionalMass(mass, true);\n        };\n        PhysicsRigidBody2d.prototype.setEnabled = function (enabled) {\n            this.body.setEnabled(enabled);\n        };\n        PhysicsRigidBody2d.prototype.sleep = function () {\n            this.body.sleep();\n        };\n        PhysicsRigidBody2d.prototype.wakeUp = function () {\n            this.body.wakeUp();\n        };\n        PhysicsRigidBody2d.prototype.setGravityScale = function (scale) {\n            this.body.setGravityScale(scale, true);\n        };\n        PhysicsRigidBody2d.prototype.setLinearDamping = function (damping) {\n            this.body.setLinearDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.setAngularDamping = function (damping) {\n            this.body.setAngularDamping(damping);\n        };\n        PhysicsRigidBody2d.prototype.isSleeping = function () {\n            return this.body.isSleeping();\n        };\n        PhysicsRigidBody2d.prototype.mass = function () {\n            return this.body.mass();\n        };\n        PhysicsRigidBody2d.prototype.translation = function () {\n            var t = this.body.translation();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.rotation = function () {\n            return this.body.rotation();\n        };\n        PhysicsRigidBody2d.prototype.velocity = function () {\n            var t = this.body.linvel();\n            return [t.x, t.y];\n        };\n        PhysicsRigidBody2d.prototype.angularVelocity = function () {\n            return this.body.angvel();\n        };\n        PhysicsRigidBody2d.prototype.isMoving = function () {\n            return this.body.isMoving();\n        };\n        PhysicsRigidBody2d.prototype.collider = function (index) {\n            var collider = this.body.collider(index);\n            if (!collider)\n                throw new Error('Failed to get collider');\n            return new PhysicsCollider2d(this.rapier, this.world, collider);\n        };\n        PhysicsRigidBody2d.prototype.applyImpulse = function (impulse) {\n            this.body.applyImpulse(toVec2(impulse), true);\n        };\n        PhysicsRigidBody2d.prototype.applyTorqueImpulse = function (impulse) {\n            this.body.applyTorqueImpulse(impulse, true);\n        };\n        PhysicsRigidBody2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"body\\\",null]]}\");\n        };\n        return PhysicsRigidBody2d;\n    }());\n    exports.PhysicsRigidBody2d = PhysicsRigidBody2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_1904_PhysicsRigidBody2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null],[\\\"body\\\",null]]}\"), PhysicsRigidBody2d)\n    var PhysicsEngine2d = /** @class */ (function () {\n        function PhysicsEngine2d(rapier) {\n            this.rapier = rapier;\n            this.world = new rapier.World(new rapier.Vector2(0.0, -9.81));\n        }\n        PhysicsEngine2d.prototype.step = function () {\n            this.world.step();\n        };\n        PhysicsEngine2d.prototype.createRigidBody = function (position, rotation, mode) {\n            var rbDesc = mode == 'dynamic'\n                ? this.rapier.RigidBodyDesc.dynamic()\n                : mode == 'fixed'\n                    ? this.rapier.RigidBodyDesc.fixed()\n                    : this.rapier.RigidBodyDesc.dynamic();\n            rbDesc.setTranslation(position[0], position[1]);\n            rbDesc.setRotation(rotation);\n            var rb = this.world.createRigidBody(rbDesc);\n            return new PhysicsRigidBody2d(this.rapier, this.world, rb);\n        };\n        PhysicsEngine2d.prototype.bodies = function () {\n            var bodies = this.world.bodies;\n            var result = [];\n            for (var i = 0; i < bodies.len(); i++) {\n                result.push(new PhysicsRigidBody2d(this.rapier, this.world, bodies.get(i)));\n            }\n            return result;\n        };\n        PhysicsEngine2d.prototype.castRay = function (start, end, maxi) {\n            var result = this.world.castRay(new this.rapier.Ray(toVec2(start), toVec2(end)), maxi, true);\n            if (!result)\n                return null;\n            return new PhysicsRigidBody2d(this.rapier, this.world, result.collider.parent());\n        };\n        PhysicsEngine2d.prototype.setGravity = function (gravity) {\n            this.world.gravity = toVec2(gravity);\n        };\n        PhysicsEngine2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null]]}\");\n        };\n        return PhysicsEngine2d;\n    }());\n    exports.PhysicsEngine2d = PhysicsEngine2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_6278_PhysicsEngine2d\\\",\\\"fields\\\":[[\\\"rapier\\\",null],[\\\"world\\\",null]]}\"), PhysicsEngine2d)\n    var PhysicsEngine3d = /** @class */ (function () {\n        function PhysicsEngine3d() {\n        }\n        PhysicsEngine3d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\",\\\"fields\\\":[]}\");\n        };\n        return PhysicsEngine3d;\n    }());\n    exports.PhysicsEngine3d = PhysicsEngine3d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_physics_ts_7687_PhysicsEngine3d\\\",\\\"fields\\\":[]}\"), PhysicsEngine3d)\n    var physics;\n    (function (physics) {\n        function engine2d() {\n            return new PhysicsEngine2d(window.RAPIER_2D);\n        }\n        physics.engine2d = engine2d;\n    })(physics = exports.physics || (exports.physics = {}));\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/context.js\", deps, func);\n\tdefine([\"require\", \"exports\"], function (require, exports) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.getShadeupLocalContext = void 0;\n    var getShadeupLocalContext = function () {\n        if (typeof localEngineContext !== 'undefined') {\n            return localEngineContext;\n        }\n        else {\n            return window;\n        }\n    };\n    exports.getShadeupLocalContext = getShadeupLocalContext;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/mesh.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/common\"], function (require, exports, __, std_math_1, std___std_all_1, common_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.Model = exports.ModelPart = exports.Material = exports.mesh = exports.Mesh = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var Mesh = /** @class */ (function () {\n        function Mesh(data) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            this.vertices = ((_a = data.vertices) !== null && _a !== void 0 ? _a : []);\n            this.triangles = ((_b = data.triangles) !== null && _b !== void 0 ? _b : []);\n            this.normals = ((_c = data.normals) !== null && _c !== void 0 ? _c : []);\n            this.tangents = ((_d = data.tangents) !== null && _d !== void 0 ? _d : []);\n            this.bitangents = ((_e = data.bitangents) !== null && _e !== void 0 ? _e : []);\n            this.uvs = ((_f = data.uvs) !== null && _f !== void 0 ? _f : []);\n            this.colors = ((_g = data.colors) !== null && _g !== void 0 ? _g : []);\n            this.symbol = ((_h = data.symbol) !== null && _h !== void 0 ? _h : null);\n        }\n        Mesh.prototype.rect = function (size) {\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), (__.FM.negate_1(size[1])) / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector(size[0] / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.vertices.push(__.makeVector((__.FM.negate_1(size[0])) / (2 | 0), size[1] / (2 | 0), (0 | 0)));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.normals.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.quad = function (position, direction, right, size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;\n            var shader_self_temp = this;\n            var up = (0, std_math_1.normalize)((0, std_math_1.cross)(right, direction));\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            var index = (this.vertices.len() | 0);\n            this.vertices.push((_c = (_e = position, _f = (_g = right, _h = (__.FM.negate_1(halfSize[0])), [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_j = up, _k = halfSize[1], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]));\n            this.vertices.push((_l = (_o = position, _p = (_q = right, _r = halfSize[0], [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = (_s = up, _t = halfSize[1], [_s[0] * _t, _s[1] * _t, _s[2] * _t]), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]]));\n            this.vertices.push((_u = (_w = position, _x = (_y = right, _z = halfSize[0], [_y[0] * _z, _y[1] * _z, _y[2] * _z]), [_w[0] + _x[0], _w[1] + _x[1], _w[2] + _x[2]]), _v = (_0 = up, _1 = (__.FM.negate_1(halfSize[1])), [_0[0] * _1, _0[1] * _1, _0[2] * _1]), [_u[0] + _v[0], _u[1] + _v[1], _u[2] + _v[2]]));\n            this.vertices.push((_2 = (_4 = position, _5 = (_6 = right, _7 = (__.FM.negate_1(halfSize[0])), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2]]), _3 = (_8 = up, _9 = (__.FM.negate_1(halfSize[1])), [_8[0] * _9, _8[1] * _9, _8[2] * _9]), [_2[0] + _3[0], _2[1] + _3[1], _2[2] + _3[2]]));\n            this.triangles.push(index + (0 | 0));\n            this.triangles.push(index + (1 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (2 | 0));\n            this.triangles.push(index + (3 | 0));\n            this.triangles.push(index + (0 | 0));\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.normals.push(direction);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.tangents.push(right);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.bitangents.push(up);\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0))));\n            this.uvs.push(__.intifyVector(__.makeVector((1 | 0), (1 | 0))));\n        };\n        Mesh.prototype.box = function (size) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var shader_self_temp = this;\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b]);\n            var UP = __.makeVector((0 | 0), 1.0, (0 | 0));\n            var DOWN = __.makeVector((0 | 0), (__.FM.negate_1(1.0)), (0 | 0));\n            var LEFT = __.makeVector((__.FM.negate_1(1.0)), (0 | 0), (0 | 0));\n            var RIGHT = __.makeVector(1.0, (0 | 0), (0 | 0));\n            var FORWARD = __.makeVector((0 | 0), (0 | 0), 1.0);\n            var BACK = __.makeVector((0 | 0), (0 | 0), (__.FM.negate_1(1.0)));\n            // Up\n            this.quad((_c = UP, _d = halfSize[1], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), UP, LEFT, __.makeVector(size[0], size[2]));\n            // Down\n            this.quad((_e = DOWN, _f = halfSize[1], [_e[0] * _f, _e[1] * _f, _e[2] * _f]), DOWN, RIGHT, __.makeVector(size[0], size[2]));\n            // Left\n            this.quad((_g = LEFT, _h = halfSize[0], [_g[0] * _h, _g[1] * _h, _g[2] * _h]), LEFT, BACK, __.makeVector(size[2], size[1]));\n            // Right\n            this.quad((_j = RIGHT, _k = halfSize[0], [_j[0] * _k, _j[1] * _k, _j[2] * _k]), RIGHT, FORWARD, __.makeVector(size[2], size[1]));\n            // Forward\n            this.quad((_l = FORWARD, _m = halfSize[2], [_l[0] * _m, _l[1] * _m, _l[2] * _m]), FORWARD, LEFT, __.makeVector(size[0], size[1]));\n            // Back\n            this.quad((_o = BACK, _p = halfSize[2], [_o[0] * _p, _o[1] * _p, _o[2] * _p]), BACK, RIGHT, __.makeVector(size[0], size[1]));\n        };\n        Mesh.prototype.rectAt = function (minPos, maxPos) {\n            var _a, _b;\n            var shader_self_temp = this;\n            this.rect((_a = maxPos, _b = minPos, [_a[0] - _b[0], _a[1] - _b[1]]));\n            this.translate(__.makeVector(minPos, (0 | 0)));\n        };\n        Mesh.prototype.circle = function (pos, radius, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n        };\n        Mesh.prototype.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var verticesPerRing = vertices + (1 | 0);\n            for (var i = (0 | 0); i <= rings; i++) {\n                var y = i / rings;\n                var angleY = y * common_1.PI;\n                var posY = Math.cos(angleY);\n                var radiusY = Math.sin(angleY);\n                for (var j = (0 | 0); j <= vertices; j++) {\n                    var x = j / vertices;\n                    var angleX = x * common_1.PI * (2 | 0);\n                    var posX = Math.cos(angleX);\n                    var posZ = Math.sin(angleX);\n                    this.vertices.push(__.makeVector(posX * radiusY * radius, posY * radius, posZ * radiusY * radius));\n                    this.normals.push((0, std_math_1.normalize)(__.makeVector(posX * radiusY, posY, posZ * radiusY)));\n                    var tangent = (0, std_math_1.normalize)(__.makeVector(posZ, (0 | 0), (__.FM.negate_1(posX))));\n                    var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(this.normals[(this.normals.len() | 0) - (1 | 0)], tangent));\n                    this.tangents.push(tangent);\n                    this.bitangents.push(bitangent);\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < rings; i++) {\n                for (var j = (0 | 0); j < vertices; j++) {\n                    var i0 = i * verticesPerRing + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + verticesPerRing;\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.icoSphere = function (pos, radius, subdivisions) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var t = (1.0 + Math.sqrt(5.0)) / 2.0;\n            var vertices = [__.makeVector((__.FM.negate_1((1 | 0))), t, (0 | 0)), __.makeVector((1 | 0), t, (0 | 0)), __.makeVector((__.FM.negate_1((1 | 0))), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((1 | 0), (__.FM.negate_1(t)), (0 | 0)), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), t), __.makeVector((0 | 0), (1 | 0), t), __.makeVector((0 | 0), (__.FM.negate_1((1 | 0))), (__.FM.negate_1(t))), __.makeVector((0 | 0), (1 | 0), (__.FM.negate_1(t))), __.makeVector(t, (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector(t, (0 | 0), (1 | 0)), __.makeVector((__.FM.negate_1(t)), (0 | 0), (__.FM.negate_1((1 | 0)))), __.makeVector((__.FM.negate_1(t)), (0 | 0), (1 | 0))];\n            var triangles = [__.intifyVector(__.makeVector((0 | 0), (11 | 0), (5 | 0))), __.intifyVector(__.makeVector((0 | 0), (5 | 0), (1 | 0))), __.intifyVector(__.makeVector((0 | 0), (1 | 0), (7 | 0))), __.intifyVector(__.makeVector((0 | 0), (7 | 0), (10 | 0))), __.intifyVector(__.makeVector((0 | 0), (10 | 0), (11 | 0))), __.intifyVector(__.makeVector((1 | 0), (5 | 0), (9 | 0))), __.intifyVector(__.makeVector((5 | 0), (11 | 0), (4 | 0))), __.intifyVector(__.makeVector((11 | 0), (10 | 0), (2 | 0))), __.intifyVector(__.makeVector((10 | 0), (7 | 0), (6 | 0))), __.intifyVector(__.makeVector((7 | 0), (1 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (9 | 0), (4 | 0))), __.intifyVector(__.makeVector((3 | 0), (4 | 0), (2 | 0))), __.intifyVector(__.makeVector((3 | 0), (2 | 0), (6 | 0))), __.intifyVector(__.makeVector((3 | 0), (6 | 0), (8 | 0))), __.intifyVector(__.makeVector((3 | 0), (8 | 0), (9 | 0))), __.intifyVector(__.makeVector((4 | 0), (9 | 0), (5 | 0))), __.intifyVector(__.makeVector((2 | 0), (4 | 0), (11 | 0))), __.intifyVector(__.makeVector((6 | 0), (2 | 0), (10 | 0))), __.intifyVector(__.makeVector((8 | 0), (6 | 0), (7 | 0))), __.intifyVector(__.makeVector((9 | 0), (8 | 0), (1 | 0)))];\n            for (var i = (0 | 0); i < (vertices.len() | 0); i++) {\n                this.vertices.push((_a = (0, std_math_1.normalize)(vertices[i]), _b = radius, [_a[0] * _b, _a[1] * _b, _a[2] * _b]));\n            }\n            for (var i = (0 | 0); i < (triangles.len() | 0); i++) {\n                this.triangles.push(index + triangles[i][0]);\n                this.triangles.push(index + triangles[i][1]);\n                this.triangles.push(index + triangles[i][2]);\n            }\n            for (var i = (0 | 0); i < subdivisions; i++) {\n                var newTriangles = [];\n                for (var j = (0 | 0); j < (this.triangles.len() | 0); j = j + (3 | 0)) {\n                    var i0 = this.triangles[j + (0 | 0)];\n                    var i1 = this.triangles[j + (1 | 0)];\n                    var i2 = this.triangles[j + (2 | 0)];\n                    var v0 = this.vertices[i0];\n                    var v1 = this.vertices[i1];\n                    var v2 = this.vertices[i2];\n                    var v3 = (0, std_math_1.normalize)((_c = (_e = v0, _f = v1, [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = 2.0, [_c[0] / _d, _c[1] / _d, _c[2] / _d]));\n                    var v4 = (0, std_math_1.normalize)((_g = (_j = v1, _k = v2, [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = 2.0, [_g[0] / _h, _g[1] / _h, _g[2] / _h]));\n                    var v5 = (0, std_math_1.normalize)((_l = (_o = v2, _p = v0, [_o[0] + _p[0], _o[1] + _p[1], _o[2] + _p[2]]), _m = 2.0, [_l[0] / _m, _l[1] / _m, _l[2] / _m]));\n                    var i3 = (this.vertices.len() | 0);\n                    var i4 = i3 + (1 | 0);\n                    var i5 = i3 + (2 | 0);\n                    this.vertices.push((_q = v3, _r = radius, [_q[0] * _r, _q[1] * _r, _q[2] * _r]));\n                    this.vertices.push((_s = v4, _t = radius, [_s[0] * _t, _s[1] * _t, _s[2] * _t]));\n                    this.vertices.push((_u = v5, _v = radius, [_u[0] * _v, _u[1] * _v, _u[2] * _v]));\n                    newTriangles.push(i0, i3, i5);\n                    newTriangles.push(i3, i1, i4);\n                    newTriangles.push(i3, i4, i5);\n                    newTriangles.push(i5, i4, i2);\n                }\n                this.triangles = newTriangles;\n            }\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                var normal = (0, std_math_1.normalize)(this.vertices[i]);\n                var tangent = (0, std_math_1.normalize)(__.makeVector(normal[2], (0 | 0), (__.FM.negate_1(normal[0]))));\n                var bitangent = (0, std_math_1.normalize)((0, std_math_1.cross)(normal, tangent));\n                this.normals.push(normal);\n                this.tangents.push(tangent);\n                this.bitangents.push(bitangent);\n            }\n            for (var i = (0 | 0); i < (this.triangles.len() | 0); i = i + (3 | 0)) {\n                var i0 = this.triangles[i + (0 | 0)];\n                var i1 = this.triangles[i + (1 | 0)];\n                var i2 = this.triangles[i + (2 | 0)];\n                var v0 = this.vertices[i0];\n                var v1 = this.vertices[i1];\n                var v2 = this.vertices[i2];\n                var uv0 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v0[2], v0[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v0[1]) / common_1.PI, 0.5));\n                var uv1 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v1[2], v1[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v1[1]) / common_1.PI, 0.5));\n                var uv2 = __.FM.float_2_1_1(__.add((0, std_math_1.atan2)(v2[2], v2[0]) / common_1.PI / 2.0, 0.5), __.add(Math.asin(v2[1]) / common_1.PI, 0.5));\n                this.uvs.push(uv0);\n                this.uvs.push(uv1);\n                this.uvs.push(uv2);\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.cylinder = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.capsule = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            this.translate(pos);\n        };\n        Mesh.prototype.cone = function (pos, radius, height, vertices) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            this.translate(pos);\n        };\n        Mesh.prototype.plane = function (pos, size, subdivisions) {\n            var _a, _b;\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var shader_self_temp = this;\n            var index = (this.vertices.len() | 0);\n            var halfSize = (_a = size, _b = 2.0, [_a[0] / _b, _a[1] / _b]);\n            for (var i = (0 | 0); i <= subdivisions[0]; i++) {\n                var x = i / __.swizzle(subdivisions, 'x');\n                var posX = x * size[0] - halfSize[0];\n                for (var j = (0 | 0); j <= subdivisions[1]; j++) {\n                    var y = j / __.swizzle(subdivisions, 'y');\n                    var posY = y * size[1] - halfSize[1];\n                    this.vertices.push(__.makeVector(posX, (0 | 0), posY));\n                    this.normals.push(__.intifyVector(__.makeVector((0 | 0), (1 | 0), (0 | 0))));\n                    this.tangents.push(__.intifyVector(__.makeVector((1 | 0), (0 | 0), (0 | 0))));\n                    this.bitangents.push(__.intifyVector(__.makeVector((0 | 0), (0 | 0), (1 | 0))));\n                    this.uvs.push(__.makeVector(x, y));\n                }\n            }\n            for (var i = (0 | 0); i < subdivisions[0]; i++) {\n                for (var j = (0 | 0); j < subdivisions[1]; j++) {\n                    var i0 = i * (subdivisions[1] + (1 | 0)) + j;\n                    var i1 = i0 + (1 | 0);\n                    var i2 = i0 + subdivisions[1] + (1 | 0);\n                    var i3 = i2 + (1 | 0);\n                    this.triangles.push(index + i0);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i2);\n                    this.triangles.push(index + i1);\n                    this.triangles.push(index + i3);\n                }\n            }\n            this.translate(pos);\n        };\n        Mesh.prototype.translate = function (pos) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.add, i, pos);\n            }\n            return this;\n        };\n        Mesh.prototype.rotate = function (quaternion) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, common_1.quat.rotate(quaternion, this.vertices[i]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, common_1.quat.rotate(quaternion, this.normals[i]));\n            }\n            return this;\n        };\n        Mesh.prototype.transform = function (matrix) {\n            var _a, _b;\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign(i, (_a = (__.mul(__.makeVector(this.vertices[i], (1 | 0)), matrix)), [_a[0], _a[1], _a[2]]));\n            }\n            for (var i = (0 | 0); i < (this.normals.len() | 0); i++) {\n                this.normals.__index_assign(i, (_b = (__.mul(__.makeVector(this.normals[i], (1 | 0)), matrix)), [_b[0], _b[1], _b[2]]));\n            }\n            return this;\n        };\n        Mesh.prototype.scale = function (scale) {\n            var shader_self_temp = this;\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                this.vertices.__index_assign_op(__.mul, i, scale);\n            }\n            return this;\n        };\n        Mesh.prototype.bounds = function () {\n            var _a, _b, _c, _d;\n            var shader_self_temp = this;\n            var mn = (_a = 0.0, [_a, _a, _a]);\n            var mx = (_b = 0.0, [_b, _b, _b]);\n            for (var i = (0 | 0); i < (this.vertices.len() | 0); i++) {\n                mn = (0, std_math_1.min)(mn, this.vertices[i]);\n                mx = (0, std_math_1.max)(mx, this.vertices[i]);\n            }\n            return _c = mx, _d = mn, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]];\n        };\n        Mesh.prototype.center = function () {\n            var _a, _b;\n            var shader_self_temp = this;\n            var bounds = this.bounds();\n            return _a = bounds, _b = 2.0, [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        Mesh.new = function () { return new Mesh({ vertices: [], triangles: [], tangents: [], bitangents: [], normals: [], uvs: [], colors: [] }); };\n        Mesh.prototype.append = function (other) {\n            var shader_self_temp = this;\n            var oldVertices = (this.vertices.len() | 0);\n            var oldTriangles = (this.triangles.len() | 0);\n            this.vertices.append(other.vertices);\n            this.triangles.append(other.triangles);\n            this.normals.append(other.normals);\n            this.tangents.append(other.tangents);\n            this.bitangents.append(other.bitangents);\n            this.uvs.append(other.uvs);\n            this.colors.append(other.colors);\n            for (var i = oldTriangles; i < (this.triangles.len() | 0); i++) {\n                this.triangles.__index_assign_op(__.add, i, oldVertices);\n            }\n        };\n        Mesh.prototype.getVertices = function () { var shader_self_temp = this; return this.vertices; };\n        Mesh.prototype.getTriangles = function () { var shader_self_temp = this; return this.triangles; };\n        Mesh.prototype.getNormals = function () { var shader_self_temp = this; return this.normals; };\n        Mesh.prototype.getTangents = function () { var shader_self_temp = this; return this.tangents; };\n        Mesh.prototype.getBitangents = function () { var shader_self_temp = this; return this.bitangents; };\n        Mesh.prototype.getUVs = function () { var shader_self_temp = this; return this.uvs; };\n        Mesh.prototype.getColors = function () { var shader_self_temp = this; return this.colors; };\n        Mesh.prototype.setVertices = function (vertices) {\n            var shader_self_temp = this;\n            this.vertices = vertices;\n        };\n        Mesh.prototype.setTriangles = function (triangles) {\n            var shader_self_temp = this;\n            this.triangles = triangles;\n        };\n        Mesh.prototype.setNormals = function (normals) {\n            var shader_self_temp = this;\n            this.normals = normals;\n        };\n        Mesh.prototype.setTangents = function (tangents) {\n            var shader_self_temp = this;\n            this.tangents = tangents;\n        };\n        Mesh.prototype.setBitangents = function (bitangents) {\n            var shader_self_temp = this;\n            this.bitangents = bitangents;\n        };\n        Mesh.prototype.setUVs = function (uvs) {\n            var shader_self_temp = this;\n            this.uvs = uvs;\n        };\n        Mesh.prototype.setColors = function (colors) {\n            var shader_self_temp = this;\n            this.colors = colors;\n        };\n        Mesh.prototype.clone = function () {\n            return new Mesh({\n                vertices: (0, std___std_all_1.__deepClone)(this.vertices),\n                triangles: (0, std___std_all_1.__deepClone)(this.triangles),\n                normals: (0, std___std_all_1.__deepClone)(this.normals),\n                tangents: (0, std___std_all_1.__deepClone)(this.tangents),\n                bitangents: (0, std___std_all_1.__deepClone)(this.bitangents),\n                uvs: (0, std___std_all_1.__deepClone)(this.uvs),\n                colors: (0, std___std_all_1.__deepClone)(this.colors),\n                symbol: (0, std___std_all_1.__deepClone)(this.symbol),\n            });\n        };\n        Mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}\");\n        };\n        return Mesh;\n    }());\n    exports.Mesh = Mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}\"), Mesh)\n    ; /* impl Mesh */\n    var mesh = /** @class */ (function () {\n        function mesh(data) {\n        }\n        mesh.rect = function (pos, size) {\n            var _a, _b;\n            var g = Mesh.new();\n            g.rectAt(pos, (_a = pos, _b = size, [_a[0] + _b[0], _a[1] + _b[1]]));\n            return g;\n        };\n        mesh.box = function (pos, size) {\n            var g = Mesh.new();\n            g.box(size);\n            g.translate(pos);\n            return g;\n        };\n        mesh.uvSphere = function (pos, radius, vertices, rings) {\n            if (vertices === void 0) { vertices = (32 | 0); }\n            if (rings === void 0) { rings = (16 | 0); }\n            var g = Mesh.new();\n            g.uvSphere(pos, radius, vertices, rings);\n            return g;\n        };\n        mesh.icoSphere = function (pos, radius, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = (1 | 0); }\n            var g = Mesh.new();\n            g.icoSphere(pos, radius, subdivisions);\n            return g;\n        };\n        mesh.plane = function (pos, size, subdivisions) {\n            if (subdivisions === void 0) { subdivisions = __.intifyVector(__.makeVector((2 | 0), (2 | 0))); }\n            var g = Mesh.new();\n            g.plane(pos, size, subdivisions);\n            return g;\n        };\n        /**\n            * Returns a [-1, 1] position for a given index.\n            */\n        mesh.triangleFromIndex = function (index) {\n            if (index == (0 | 0)) {\n                return __.FM.float_2_1_1(__.negate((1 | 0)), __.int(1));\n            }\n            else if (index == (1 | 0)) {\n                return __.FM.float_2_1_1(__.int(1), __.int(1));\n            }\n            else if (index == (2 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.negate((1 | 0)));\n            }\n            else {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n        };\n        mesh.circleFromIndex = function (vertexIndex, vertices) {\n            vertexIndex = vertices - vertexIndex;\n            var numSlices = vertices / (3 | 0);\n            var sliceIndex = Math.floor(vertexIndex / vertices * numSlices);\n            var incAngle = common_1.PI * 2.0 / numSlices;\n            var baseAngle = incAngle * sliceIndex;\n            if (vertexIndex % (3 | 0) == (0 | 0)) {\n                return __.FM.float_2_1_1(__.int(0), __.int(0));\n            }\n            else if (vertexIndex % (3 | 0) == (1 | 0)) {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle), (0, std_math_1.sin)(baseAngle));\n            }\n            else {\n                return __.FM.float_2_1_1((0, std_math_1.cos)(baseAngle + incAngle), (0, std_math_1.sin)(baseAngle + incAngle));\n            }\n        };\n        mesh.rectFromIndex = function (index, vertices) {\n            var _a, _b, _c, _d, _e, _f;\n            var x = index % vertices;\n            var y = index / vertices;\n            return _a = (_c = (_e = __.FM.float_2_1_1(x, y), _f = vertices, [_e[0] / _f, _e[1] / _f]), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = 1.0, [_a[0] - _b, _a[1] - _b];\n        };\n        mesh.empty = function (numVerts) {\n            var _a, _b, _c, _d, _e, _f;\n            if (numVerts === void 0) { numVerts = (0 | 0); }\n            var g = Mesh.new();\n            if (numVerts > (0 | 0)) {\n                g.setVertices((0, std___std_all_1.array)(numVerts, (_a = (0 | 0), [_a, _a, _a])));\n                g.setNormals((0, std___std_all_1.array)(numVerts, (_b = (0 | 0), [_b, _b, _b])));\n                g.setTangents((0, std___std_all_1.array)(numVerts, (_c = (0 | 0), [_c, _c, _c])));\n                g.setBitangents((0, std___std_all_1.array)(numVerts, (_d = (0 | 0), [_d, _d, _d])));\n                g.setUVs((0, std___std_all_1.array)(numVerts, (_e = (0 | 0), [_e, _e])));\n                g.setColors((0, std___std_all_1.array)(numVerts, (_f = (0 | 0), [_f, _f, _f, _f])));\n                var tris = (0, std___std_all_1.array)(numVerts, (0 | 0));\n                for (var i = (0 | 0); i < numVerts; i++) {\n                    tris.__index_assign(i, i);\n                }\n                g.setTriangles(tris);\n            }\n            return g;\n        };\n        mesh.join = function (mesh1, mesh2) {\n            var g = Mesh.new();\n            g.append(mesh1);\n            g.append(mesh2);\n            return g;\n        };\n        // pub fn cylinder(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cylinder(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn capsule(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.capsule(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        // pub fn cone(pos: float3, radius: float, height: float, vertices: int = 32) -> Mesh {\n        // \tlet g = Mesh::new();\n        // \tg.cone(pos, radius, height, vertices);\n        // \treturn g;\n        // }\n        mesh.prototype.clone = function () {\n            return new mesh({});\n        };\n        mesh.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_19895_mesh\\\",\\\"fields\\\":[]}\");\n        };\n        return mesh;\n    }());\n    exports.mesh = mesh;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_19895_mesh\\\",\\\"fields\\\":[]}\"), mesh)\n    ; /* impl mesh */\n    var Material = /** @class */ (function () {\n        function Material(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.baseColor = ((_a = data.baseColor) !== null && _a !== void 0 ? _a : __.FM.float_4_1_1_1_1(0.0, 0.0, 0.0, 0.0));\n            this.color = ((_b = data.color) !== null && _b !== void 0 ? _b : null);\n            this.normal = ((_c = data.normal) !== null && _c !== void 0 ? _c : null);\n            this.normalScale = ((_d = data.normalScale) !== null && _d !== void 0 ? _d : __.FM.float_2_1_1(0.0, 0.0));\n            this.roughness = ((_e = data.roughness) !== null && _e !== void 0 ? _e : null);\n            this.emissive = ((_f = data.emissive) !== null && _f !== void 0 ? _f : null);\n            this.metallic = ((_g = data.metallic) !== null && _g !== void 0 ? _g : null);\n        }\n        Material.prototype.clone = function () {\n            return new Material({\n                baseColor: (0, std___std_all_1.__deepClone)(this.baseColor),\n                color: (0, std___std_all_1.__deepClone)(this.color),\n                normal: (0, std___std_all_1.__deepClone)(this.normal),\n                normalScale: (0, std___std_all_1.__deepClone)(this.normalScale),\n                roughness: (0, std___std_all_1.__deepClone)(this.roughness),\n                emissive: (0, std___std_all_1.__deepClone)(this.emissive),\n                metallic: (0, std___std_all_1.__deepClone)(this.metallic),\n            });\n        };\n        Material.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}\");\n        };\n        return Material;\n    }());\n    exports.Material = Material;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}\"), Material)\n    ;\n    var ModelPart = /** @class */ (function () {\n        function ModelPart(data) {\n            var _a, _b, _c;\n            this.mesh = ((_a = data.mesh) !== null && _a !== void 0 ? _a : new Mesh({}));\n            this.material = ((_b = data.material) !== null && _b !== void 0 ? _b : new Material({}));\n            this.transform = ((_c = data.transform) !== null && _c !== void 0 ? _c : __.float4x4(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));\n        }\n        ModelPart.prototype.clone = function () {\n            return new ModelPart({\n                mesh: (0, std___std_all_1.__deepClone)(this.mesh),\n                material: (0, std___std_all_1.__deepClone)(this.material),\n                transform: (0, std___std_all_1.__deepClone)(this.transform),\n            });\n        };\n        ModelPart.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]}\");\n        };\n        return ModelPart;\n    }());\n    exports.ModelPart = ModelPart;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]}\"), ModelPart)\n    ;\n    var Model = /** @class */ (function () {\n        function Model(data) {\n            var _a;\n            this.parts = ((_a = data.parts) !== null && _a !== void 0 ? _a : []);\n        }\n        Model.prototype.clone = function () {\n            return new Model({\n                parts: (0, std___std_all_1.__deepClone)(this.parts),\n            });\n        };\n        Model.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_25266_Model\\\",\\\"fields\\\":[[\\\"parts\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]},\\\"staticSize\\\":1}]]}\");\n        };\n        return Model;\n    }());\n    exports.Model = Model;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_25266_Model\\\",\\\"fields\\\":[[\\\"parts\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_24666_ModelPart\\\",\\\"fields\\\":[[\\\"mesh\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_1759_Mesh\\\",\\\"fields\\\":[[\\\"vertices\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"triangles\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"},\\\"staticSize\\\":1}],[\\\"normals\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"tangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"bitangents\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"},\\\"staticSize\\\":1}],[\\\"uvs\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"},\\\"staticSize\\\":1}],[\\\"colors\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"},\\\"staticSize\\\":1}],[\\\"symbol\\\",null]]}],[\\\"material\\\",{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_mesh_ts_23437_Material\\\",\\\"fields\\\":[[\\\"baseColor\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"color\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normal\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"normalScale\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"roughness\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"emissive\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}],[\\\"metallic\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"texture2d\\\"}]]}],[\\\"transform\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4x4\\\"}]]},\\\"staticSize\\\":1}]]}\"), Model)\n    ;\n    window.SHD_Mesh = Mesh;\n    window.SHD_Model = Model;\n    window.SHD_ModelPart = ModelPart;\n    window.SHD_Material = Material;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/textures.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    var globalVarGet = std___std_all_1.globalVarGet;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/common.js\", deps, func);\n\tvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\", \"/_std/buffer\", \"/_std/ui\", \"/_std/texture\"], function (require, exports, __, std_math_1, std___std_all_1, buffer_1, ui_1, texture_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.wrap4 = exports.wrap3 = exports.wrap2 = exports.color = exports.remap1 = exports.remap = exports.tan1 = exports.cos1 = exports.sin1 = exports.hexFromColor = exports.hex = exports.cmykFromColor = exports.cmyk = exports.rgbaFromColor = exports.rgbFromColor = exports.rgba = exports.rgb = exports.hsvaFromColor = exports.hsvFromColor = exports.hsva = exports.hsv = exports.hslaFromColor = exports.hslFromColor = exports.hsla = exports.hsl = exports.screenAA = exports.matrix = exports.noise = exports.reverseMortonCode2 = exports.randColor2 = exports.randColor = exports.mortonCode2 = exports.spatial = exports.bezier = exports.Camera = exports.Camera2d = exports.quat = exports.ui = exports.texture3d = exports.texture2d = exports.buffer = exports.PI = exports.pixelToClip = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    Object.defineProperty(exports, \"buffer\", { enumerable: true, get: function () { return buffer_1.buffer; } });\n    Object.defineProperty(exports, \"ui\", { enumerable: true, get: function () { return ui_1.ui; } });\n    Object.defineProperty(exports, \"texture2d\", { enumerable: true, get: function () { return texture_1.texture2d; } });\n    Object.defineProperty(exports, \"texture3d\", { enumerable: true, get: function () { return texture_1.texture3d; } });\n    function pixelToClip(pixelPosition) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        var zeroToOne = (_a = pixelPosition, _b = env.screenSize, [_a[0] / _b[0], _a[1] / _b[1]]);\n        var zeroToTwo = (_c = zeroToOne, _d = 2.0, [_c[0] * _d, _c[1] * _d]);\n        var clipSpace = (_e = zeroToTwo, _f = (_g = 1.0, [_g, _g]), [_e[0] - _f[0], _e[1] - _f[1]]);\n        return __.makeVector(clipSpace[0], clipSpace[1] * (__.FM.negate_1(1.0)));\n    }\n    exports.pixelToClip = pixelToClip;\n    ; /**\n    * Value of PI to 35 decimal places.\n    */\n    var PI = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PI\", function () { return 3.14159265358979323846264338327950288; }, function () { return PI; });\n    exports.PI = PI;\n    var quat = /** @class */ (function () {\n        function quat(data) {\n        }\n        /**\n            * Creates a quaternion from an angle and axis.\n            */\n        quat.fromAngleAxis = function (angle, axis) { return __.FM.float_4_3_1(__.mul(axis, Math.sin(angle * 0.5)), (0, std_math_1.cos)(angle * 0.5)); };\n        /**\n            * Multiplies two quaternions and returns the result.\n            */\n        quat.mul = function (a, b) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; return __.FM.float_4_3_1(__.add((_a = (_c = (_e = b, [_e[0], _e[1], _e[2]]), _d = a[3], [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = (_f = (_h = a, [_h[0], _h[1], _h[2]]), _g = b[3], [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]), (0, std_math_1.cross)((_j = a, [_j[0], _j[1], _j[2]]), (_k = b, [_k[0], _k[1], _k[2]]))), __.sub(a[3] * b[3], (0, std_math_1.dot)((_l = a, [_l[0], _l[1], _l[2]]), (_m = b, [_m[0], _m[1], _m[2]])))); };\n        /**\n            * Rotates a vector by a quaternion and returns the rotated vector.\n            */\n        quat.rotate = function (quaternion, vector) {\n            var _a;\n            var q = quat.mul(quat.mul(quaternion, __.FM.float_4_3_1(vector, __.int(0))), quat.conjugate(quaternion));\n            return _a = q, [_a[0], _a[1], _a[2]];\n        };\n        /**\n            * Returns the conjugate of the input quaternion.\n            *\n            * The conjugate of a quaternion number is a quaternion with the same magnitudes but with the sign of the imaginary parts changed\n            */\n        quat.conjugate = function (quaternion) { var _a; return __.FM.float_4_3_1(__.negate((_a = quaternion, [_a[0], _a[1], _a[2]])), __.swizzle(quaternion, 'w')); };\n        /**\n            * Returns the inverse of the input quaternion.\n            */\n        quat.inverse = function (quaternion) { var _a, _b; return _a = quat.conjugate(quaternion), _b = (0, std_math_1.dot)(quaternion, quaternion), [_a[0] / _b, _a[1] / _b, _a[2] / _b, _a[3] / _b]; };\n        /**\n            * Generates a quaternion that rotates from one direction to another via the shortest path.\n            */\n        quat.fromToRotation = function (from, to) {\n            var _a;\n            var q = (_a = 0.0, [_a, _a, _a, _a]);\n            var d = (0, std_math_1.dot)(from, to);\n            if (d < (__.FM.negate_1(0.999999))) {\n                var right = __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0));\n                var up = __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0));\n                var tmp = (0, std_math_1.cross)(right, from);\n                if ((0, std_math_1.length)(tmp) < 0.000001) {\n                    tmp = (0, std_math_1.cross)(up, from);\n                }\n                tmp = (0, std_math_1.normalize)(tmp);\n                q = quat.fromAngleAxis(PI, tmp);\n            }\n            else if (d > 0.999999) {\n                q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            }\n            else {\n                q = __.FM.float_4_3_1((0, std_math_1.cross)(from, to), __.add((1 | 0), d));\n                q = (0, std_math_1.normalize)(q);\n            }\n            return q;\n        };\n        quat.diff = function (a, b) { var _a, _b; return _a = a, _b = quat.inverse(b), [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]]; };\n        /**\n            * Generates lookAt quaternion.\n            */\n        quat.lookAt = function (forward, up) {\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, up));\n            up = (0, std_math_1.normalize)((0, std_math_1.cross)(forward, right));\n            var m00 = right[0];\n            var m01 = right[1];\n            var m02 = right[2];\n            var m10 = up[0];\n            var m11 = up[1];\n            var m12 = up[2];\n            var m20 = forward[0];\n            var m21 = forward[1];\n            var m22 = forward[2];\n            var num8 = (m00 + m11) + m22;\n            var q = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n            if (num8 > 0.0) {\n                var num = Math.sqrt(num8 + 1.0);\n                var w_1 = num * 0.5;\n                num = 0.5 / num;\n                var x_1 = (m12 - m21) * num;\n                var y_1 = (m20 - m02) * num;\n                var z_1 = (m01 - m10) * num;\n                return __.FM.float_4_1_1_1_1(x_1, y_1, z_1, w_1);\n            }\n            if (__.and((m00 >= m11), (m00 >= m22))) {\n                var num7 = Math.sqrt(((1.0 + m00) - m11) - m22);\n                var num4 = 0.5 / num7;\n                var x_2 = 0.5 * num7;\n                var y_2 = (m01 + m10) * num4;\n                var z_2 = (m02 + m20) * num4;\n                var w_2 = (m12 - m21) * num4;\n                return __.FM.float_4_1_1_1_1(x_2, y_2, z_2, w_2);\n            }\n            if (m11 > m22) {\n                var num6 = Math.sqrt(((1.0 + m11) - m00) - m22);\n                var num3 = 0.5 / num6;\n                var x_3 = (m10 + m01) * num3;\n                var y_3 = 0.5 * num6;\n                var z_3 = (m21 + m12) * num3;\n                var w_3 = (m20 - m02) * num3;\n                return __.FM.float_4_1_1_1_1(x_3, y_3, z_3, w_3);\n            }\n            var num5 = Math.sqrt(((1.0 + m22) - m00) - m11);\n            var num2 = 0.5 / num5;\n            var x = (m20 + m02) * num2;\n            var y = (m21 + m12) * num2;\n            var z = 0.5 * num5;\n            var w = (m01 - m10) * num2;\n            return __.FM.float_4_1_1_1_1(x, y, z, w);\n        };\n        /**\n            * Smooth interpolation between two quaternions.\n            */\n        quat.slerp = function (a, b, t) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            if ((0, std_math_1.length)(a) == 0.0) {\n                if ((0, std_math_1.length)(b) == 0.0) {\n                    return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n                }\n                return b;\n            }\n            else if ((0, std_math_1.length)(b) == 0.0) {\n                return a;\n            }\n            var cosHalfAngle = a[3] * b[3] + (0, std_math_1.dot)((_a = a, [_a[0], _a[1], _a[2]]), (_b = b, [_b[0], _b[1], _b[2]]));\n            if (__.or(cosHalfAngle >= 1.0, cosHalfAngle <= (__.FM.negate_1(1.0)))) {\n                return a;\n            }\n            else if (cosHalfAngle < 0.0) {\n                b = (_c = b, _d = (__.FM.negate_1(1.0)), [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]);\n                cosHalfAngle = (__.FM.negate_1(cosHalfAngle));\n            }\n            var blendA = 0.0;\n            var blendB = 0.0;\n            if (cosHalfAngle < 0.99) {\n                var halfAngle = Math.acos(cosHalfAngle);\n                var sinHalfAngle = Math.sin(halfAngle);\n                var oneOverSinHalfAngle = 1.0 / sinHalfAngle;\n                blendA = Math.sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle;\n                blendB = Math.sin(halfAngle * t) * oneOverSinHalfAngle;\n            }\n            else {\n                blendA = 1.0 - t;\n                blendB = t;\n            }\n            var result = __.FM.float_4_3_1(__.add((_e = blendA, _f = (_g = a, [_g[0], _g[1], _g[2]]), [_e * _f[0], _e * _f[1], _e * _f[2]]), (_h = blendB, _j = (_k = b, [_k[0], _k[1], _k[2]]), [_h * _j[0], _h * _j[1], _h * _j[2]])), __.add(blendA * a[3], blendB * b[3]));\n            if ((0, std_math_1.length)(result) > 0.0) {\n                return (0, std_math_1.normalize)(result);\n            }\n            return __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(1));\n        };\n        /**\n            * Converts quaternion to matrix.\n            */\n        quat.toMatrix = function (quaternion) {\n            var x = quaternion[0];\n            var y = quaternion[1];\n            var z = quaternion[2];\n            var w = quaternion[3];\n            var x2 = x + x;\n            var y2 = y + y;\n            var z2 = z + z;\n            var xx = x * x2;\n            var xy = x * y2;\n            var xz = x * z2;\n            var yy = y * y2;\n            var yz = y * z2;\n            var zz = z * z2;\n            var wx = w * x2;\n            var wy = w * y2;\n            var wz = w * z2;\n            var m = __.float4x4(1.0 - (yy + zz), xy + wz, xz - wy, (0 | 0), xy - wz, 1.0 - (xx + zz), yz + wx, (0 | 0), xz + wy, yz - wx, 1.0 - (xx + yy), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0);\n            return m;\n        };\n        quat.fromEulerAngles = function (angles) {\n            var cr = Math.cos(angles[0] * 0.5);\n            var sr = Math.sin(angles[0] * 0.5);\n            var cp = Math.cos(angles[1] * 0.5);\n            var sp = Math.sin(angles[1] * 0.5);\n            var cy = Math.cos(angles[2] * 0.5);\n            var sy = Math.sin(angles[2] * 0.5);\n            return __.FM.float_4_1_1_1_1(__.sub(sr * cp * cy, cr * sp * sy), __.add(cr * sp * cy, sr * cp * sy), __.sub(cr * cp * sy, sr * sp * cy), __.add(cr * cp * cy, sr * sp * sy));\n        };\n        quat.prototype.clone = function () {\n            return new quat({});\n        };\n        quat.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_2304_quat\\\",\\\"fields\\\":[]}\");\n        };\n        return quat;\n    }());\n    exports.quat = quat;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_2304_quat\\\",\\\"fields\\\":[]}\"), quat)\n    ; /* impl quat */\n    window.shadeupQuat = quat;\n    var Camera2d = /** @class */ (function () {\n        function Camera2d(data) {\n            var _a, _b;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(__.int(0), __.int(0)));\n            this.zoom = ((_b = data.zoom) !== null && _b !== void 0 ? _b : (1 | 0));\n        }\n        Camera2d.prototype.transform = function (position) { var _a, _b, _c, _d; var shader_self_temp = this; return _a = (_c = position, _d = this.position, [_c[0] - _d[0], _c[1] - _d[1]]), _b = this.zoom, [_a[0] * _b, _a[1] * _b]; };\n        /**\n            * Moves and zooms the camera to fit the given size. (centers the camera in the viewport)\n            */\n        Camera2d.prototype.fit = function (size) {\n            var _a, _b, _c, _d, _e, _f;\n            var shader_self_temp = this;\n            var zoom = (1 | 0) / (0, std_math_1.min)(env.screenSize[0] / size[0], env.screenSize[1] / size[1]);\n            var position = (_a = (_c = env.screenSize, _d = (_e = size, _f = ((1 | 0) / zoom), [_e[0] * _f, _e[1] * _f]), [_c[0] - _d[0], _c[1] - _d[1]]), _b = (2 | 0), [_a[0] / _b, _a[1] / _b]);\n            this.position = position;\n            this.zoom = zoom;\n        };\n        Camera2d.prototype.clone = function () {\n            return new Camera2d({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                zoom: (0, std___std_all_1.__deepClone)(this.zoom),\n            });\n        };\n        Camera2d.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\");\n        };\n        return Camera2d;\n    }());\n    exports.Camera2d = Camera2d;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_9812_Camera2d\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"zoom\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\"), Camera2d)\n    ; /* impl Camera2d */\n    var Camera = /** @class */ (function () {\n        function Camera(data) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this.position = ((_a = data.position) !== null && _a !== void 0 ? _a : __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)));\n            this.rotation = ((_b = data.rotation) !== null && _b !== void 0 ? _b : __.FM.float_4_1_1_1_1(__.int(1), __.int(0), __.int(0), __.int(0)));\n            this.width = ((_c = data.width) !== null && _c !== void 0 ? _c : (1920 | 0));\n            this.height = ((_d = data.height) !== null && _d !== void 0 ? _d : (1080 | 0));\n            this.fov = ((_e = data.fov) !== null && _e !== void 0 ? _e : (90 | 0));\n            this.near = ((_f = data.near) !== null && _f !== void 0 ? _f : (1 | 0));\n            this.far = ((_g = data.far) !== null && _g !== void 0 ? _g : (100000 | 0));\n        }\n        Camera.prototype.getRay = function (screen) {\n            var shader_self_temp = this;\n            var aspect = this.width / this.height;\n            var x = screen[0];\n            var y = screen[1];\n            var Px = ((2 | 0) * ((x + 0.5) / this.width) - (1 | 0)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0)) * aspect;\n            var Py = ((1 | 0) - (2 | 0) * ((y + 0.5) / this.height)) * Math.tan(this.fov / (2 | 0) * PI / (180 | 0));\n            return quat.rotate(this.rotation, (0, std_math_1.normalize)(__.makeVector(Px, Py, (__.FM.negate_1((1 | 0))))));\n        };\n        Camera.prototype.getTransformToViewMatrix = function (position, scale, rotation) {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(rotation);\n            var translationMatrix = __.float4x4(scale[0], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[1], (0 | 0), (0 | 0), (0 | 0), (0 | 0), scale[2], (0 | 0), position[0], position[1], position[2], (1 | 0));\n            return __.mul(__.mul(__.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()), translationMatrix), rotationMatrix);\n        };\n        Camera.prototype.getCombinedMatrix = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrix(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getCombinedMatrixReverseZ = function () { var shader_self_temp = this; return __.mul(this.getPerspectiveMatrixReverseZ(), this.getWorldToViewMatrix()); };\n        Camera.prototype.getWorldToViewMatrix = function () {\n            var shader_self_temp = this;\n            var rotationMatrix = quat.toMatrix(this.rotation);\n            var translationMatrix = __.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), this.position[0], this.position[1], this.position[2], (1 | 0));\n            return (0, std_math_1.inverse)(__.mul(translationMatrix, rotationMatrix));\n        };\n        Camera.prototype.getPerspectiveMatrixReverseZ = function () { var shader_self_temp = this; return matrix.perspectiveReverseZ(this.fov, this.width / this.height, this.near); };\n        Camera.prototype.getPerspectiveMatrix = function () {\n            var shader_self_temp = this;\n            return matrix.perspective(this.fov, this.width / this.height, this.near, this.far); // // let matrix = float4x4();\n            // let far = self.far;\n            // let near = self.near;\n            // let aspect = self.width / self.height;\n            // let fovRad = radians(self.fov);\n            // let tanFov = tan( fovRad * 0.5 );\n            // // matrix[0][0] = ;\n            // // matrix[1][1] = 1.0 / tanFov;\n            // // matrix[2][2] = -((far + near)/(far - near));\n            // // matrix[3][2] = -((2*(near*far))/(far - near));\n            // // matrix[2][3] = -1;\n            // // matrix[3][3] = 0;\n            // let matrix = float4x4(\n            //     1.0 / (tanFov * aspect), 0, 0, 0,\n            //     0, 1.0 / tanFov, 0, 0,\n            //     0, 0, -((far + near)/(far - near)), -1,\n            //     0, 0, -((2*(near*far))/(far - near)), 0\n            // );\n            // return matrix;\n        };\n        Camera.prototype.getOrthographicMatrix = function () {\n            var shader_self_temp = this;\n            var matrix = __.float4x4();\n            var far = this.far;\n            var near = this.near;\n            var w = 1.0 / this.width;\n            var h = 1.0 / this.height;\n            matrix.__index((0 | 0)).__index_assign((0 | 0), w);\n            matrix.__index((1 | 0)).__index_assign((1 | 0), h);\n            matrix.__index((2 | 0)).__index_assign((2 | 0), (__.FM.negate_1((2.0 / (far - near)))));\n            matrix.__index((2 | 0)).__index_assign((3 | 0), ((far + near) / (far - near)));\n            //matrix[2][2] = -((far + near)/(far - near));\n            //matrix[3][2] = -((2*(near*far))/(far - near));\n            matrix.__index((3 | 0)).__index_assign((3 | 0), 1.0);\n            return matrix;\n        };\n        Camera.prototype.clone = function () {\n            return new Camera({\n                position: (0, std___std_all_1.__deepClone)(this.position),\n                rotation: (0, std___std_all_1.__deepClone)(this.rotation),\n                width: (0, std___std_all_1.__deepClone)(this.width),\n                height: (0, std___std_all_1.__deepClone)(this.height),\n                fov: (0, std___std_all_1.__deepClone)(this.fov),\n                near: (0, std___std_all_1.__deepClone)(this.near),\n                far: (0, std___std_all_1.__deepClone)(this.far),\n            });\n        };\n        Camera.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\");\n        };\n        return Camera;\n    }());\n    exports.Camera = Camera;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_10837_Camera\\\",\\\"fields\\\":[[\\\"position\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float3\\\"}],[\\\"rotation\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"width\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"height\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"fov\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"near\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"far\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\"), Camera)\n    ; /* impl Camera */\n    window._makeCamera = Camera;\n    window._makeCamera2d = Camera2d;\n    function easeA(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n    function easeB(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n    function easeC(aA1) { return 3.0 * aA1; }\n    function calcBezier(aT, aA1, aA2) { return ((easeA(aA1, aA2) * aT + easeB(aA1, aA2)) * aT + easeC(aA1)) * aT; }\n    function getSlope(aT, aA1, aA2) { return 3.0 * easeA(aA1, aA2) * aT * aT + 2.0 * easeB(aA1, aA2) * aT + easeC(aA1); }\n    // fn getTForX(aX: float, aA1: float, aA2: float) -> float {\n    //     let aGuessT = aX;\n    //     for (let i = 0; i <= 10; i++) {\n    //         let currentSlope = bezSlope(aGuessT, aA1, aA2);\n    //         if (currentSlope == 0.0) {\n    //             return aGuessT;\n    //         }\n    //         let currentX = calcBezier(aGuessT, aA1, aA2) - aX;\n    //         aGuessT -= currentX / currentSlope;\n    //     }\n    //     return aGuessT;\n    // }\n    var NEWTON_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_ITERATIONS\", function () { return (4 | 0); }, function () { return NEWTON_ITERATIONS; }) | 0);\n    var NEWTON_MIN_SLOPE = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"NEWTON_MIN_SLOPE\", function () { return 0.02; }, function () { return NEWTON_MIN_SLOPE; });\n    var SUBDIVISION_PRECISION = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_PRECISION\", function () { return 0.0000001; }, function () { return SUBDIVISION_PRECISION; });\n    var SUBDIVISION_MAX_ITERATIONS = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"SUBDIVISION_MAX_ITERATIONS\", function () { return (10 | 0); }, function () { return SUBDIVISION_MAX_ITERATIONS; }) | 0);\n    var kSplineTableSize = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSplineTableSize\", function () { return (11 | 0); }, function () { return kSplineTableSize; }) | 0);\n    var kSampleStepSize = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"kSampleStepSize\", function () { return 1.0 / __.sub(kSplineTableSize, (1 | 0)); }, function () { return kSampleStepSize; });\n    function getTForX(aX, mX1, mX2) {\n        var mSampleValues = (0, std___std_all_1.array)((11 | 0), (0 | 0));\n        for (var i = (0 | 0); i < kSplineTableSize; i++) {\n            mSampleValues.__index_assign(i, calcBezier(i * kSampleStepSize, mX1, mX2));\n        } // Find interval where t lies\n        var intervalStart = 0.0;\n        var currentSample = (1 | 0);\n        var lastSample = kSplineTableSize - (1 | 0);\n        for (var dummy = (0 | 0); __.and(currentSample != lastSample, mSampleValues[currentSample] <= aX); currentSample++) {\n            intervalStart = intervalStart + kSampleStepSize;\n        }\n        currentSample--;\n        // t now lies between *currentSample and *currentSample+1\n        // Interpolate to provide an initial guess for t\n        var csamp = mSampleValues[currentSample];\n        var dst = (aX - csamp) / (mSampleValues[currentSample + (1 | 0)] - csamp);\n        var guessForT = intervalStart + dst * kSampleStepSize;\n        // Check the slope to see what strategy to use. If the slope is too small\n        // Newton-Raphson iteration won't converge on a root so we use bisection\n        // instead.\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n            return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n        else if (initialSlope == 0.0) {\n            return guessForT;\n        }\n        else {\n            return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n        }\n    }\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n        for (var i = (0 | 0); i < NEWTON_ITERATIONS; i++) { // We're trying to find where f(t) = aX,\n            // so we're actually looking for a root for: CalcBezier(t) - aX\n            var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n            var currentSlope = getSlope(aGuessT, mX1, mX2);\n            if (currentSlope == 0.0)\n                return aGuessT;\n            aGuessT = aGuessT - currentX / currentSlope;\n        }\n        return aGuessT;\n    }\n    function binarySubdivide(aX, aA, aB) {\n        var currentX = 0.0;\n        var currentT = 0.0;\n        var i = (0 | 0);\n        var mX1 = aA;\n        var mX2 = aB;\n        while ((true)) {\n            i++;\n            if (__.and(Math.abs(currentX) > SUBDIVISION_PRECISION, i < SUBDIVISION_MAX_ITERATIONS)) {\n                currentT = aA + (aB - aA) / 2.0;\n                currentX = calcBezier(currentT, mX1, mX2) - aX;\n                if (currentX > 0.0) {\n                    aB = currentT;\n                }\n                else {\n                    aA = currentT;\n                }\n            }\n            else {\n                break;\n            }\n        }\n        return currentT;\n    }\n    var bezier = /** @class */ (function () {\n        function bezier(data) {\n        }\n        bezier.cubic2 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1]]), [_e[0] + _f[0], _e[1] + _f[1]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.cubic3 = function (a, b, c, d, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; return _a = (_c = (_e = (_g = __.pow((1.0 - t), (3 | 0)), _h = a, [_g * _h[0], _g * _h[1], _g * _h[2]]), _f = (_j = 3.0 * __.pow((1.0 - t), (2 | 0)) * t, _k = b, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_l = 3.0 * (1.0 - t) * __.pow(t, (2 | 0)), _m = c, [_l * _m[0], _l * _m[1], _l * _m[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_o = __.pow(t, (3 | 0)), _p = d, [_o * _p[0], _o * _p[1], _o * _p[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        bezier.quadratic2 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1]]), [_c[0] + _d[0], _c[1] + _d[1]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1]]), [_a[0] + _b[0], _a[1] + _b[1]]; };\n        bezier.quadratic3 = function (a, b, c, t) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; return _a = (_c = (_e = __.pow((1.0 - t), (2 | 0)), _f = a, [_e * _f[0], _e * _f[1], _e * _f[2]]), _d = (_g = 2.0 * (1.0 - t) * t, _h = b, [_g * _h[0], _g * _h[1], _g * _h[2]]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_j = __.pow(t, (2 | 0)), _k = c, [_j * _k[0], _j * _k[1], _j * _k[2]]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]; };\n        /**\n            * 3d triangle patch evaulation with barycentric coordinates.\n            */\n        bezier.patch = function (a, ab, b, bc, c, ca, barycentricT) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n            var s = barycentricT[0];\n            var t = barycentricT[1];\n            var u = barycentricT[2];\n            return _a = (_c = (_e = (_g = (_j = (_l = (_o = 1.0, _p = c, [_o * _p[0], _o * _p[1], _o * _p[2]]), _m = (s * s), [_l[0] * _m, _l[1] * _m, _l[2] * _m]), _k = (_q = (_s = (_u = 2.0, _v = bc, [_u * _v[0], _u * _v[1], _u * _v[2]]), _t = s, [_s[0] * _t, _s[1] * _t, _s[2] * _t]), _r = t, [_q[0] * _r, _q[1] * _r, _q[2] * _r]), [_j[0] + _k[0], _j[1] + _k[1], _j[2] + _k[2]]), _h = (_w = (_y = (_0 = 2.0, _1 = ca, [_0 * _1[0], _0 * _1[1], _0 * _1[2]]), _z = s, [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = u, [_w[0] * _x, _w[1] * _x, _w[2] * _x]), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]]), _f = (_2 = (_4 = 1.0, _5 = b, [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), _3 = (t * t), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), [_e[0] + _f[0], _e[1] + _f[1], _e[2] + _f[2]]), _d = (_6 = (_8 = (_10 = 2.0, _11 = ab, [_10 * _11[0], _10 * _11[1], _10 * _11[2]]), _9 = t, [_8[0] * _9, _8[1] * _9, _8[2] * _9]), _7 = u, [_6[0] * _7, _6[1] * _7, _6[2] * _7]), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]]), _b = (_12 = (_14 = 1.0, _15 = a, [_14 * _15[0], _14 * _15[1], _14 * _15[2]]), _13 = (u * u), [_12[0] * _13, _12[1] * _13, _12[2] * _13]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]];\n        };\n        bezier.easing = function (controlA, controlB, t) { return calcBezier(getTForX(t, controlA[0], controlB[0]), controlA[1], controlB[1]); };\n        bezier.prototype.clone = function () {\n            return new bezier({});\n        };\n        bezier.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_20500_bezier\\\",\\\"fields\\\":[]}\");\n        };\n        return bezier;\n    }());\n    exports.bezier = bezier;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_20500_bezier\\\",\\\"fields\\\":[]}\"), bezier)\n    ; /* impl bezier */\n    /**\n    * Provides space related utilities like z-order curves and quadtrees.\n    */\n    var spatial = /** @class */ (function () {\n        function spatial(data) {\n        }\n        spatial.cantorPair = function (v) { return ((v[0] + v[1]) * (v[0] + v[1] + (1 | 0))) / (2 | 0) + v[1]; };\n        spatial.cantorUnpair = function (v) {\n            var w = Math.floor((Math.sqrt(8.0 * v + 1.0) - 1.0) / 2.0);\n            var t = (w * w + w) / 2.0;\n            var y = v - t;\n            var x = w - y;\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertRotate = function (n, b, r) {\n            var x = b[0];\n            var y = b[1];\n            if (r[1] == (0 | 0)) {\n                if (r[0] == (1 | 0)) {\n                    x = n - (1 | 0) - x;\n                    y = n - (1 | 0) - y;\n                }\n                var t = x;\n                x = y;\n                y = t;\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.hilbertUncurve = function (n, v) {\n            var x = v[0];\n            var y = v[1];\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var s = (0 | 0);\n            var d = (0 | 0);\n            for (s = n / (2 | 0); s > (0 | 0); s = s / (2 | 0)) {\n                rx = ((x & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                ry = ((y & s) > (0 | 0)) ? (1 | 0) : (0 | 0);\n                d = d + s * s * (((3 | 0) * rx) ^ ry);\n                var o = __.intifyVector(spatial.hilbertRotate(n, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n            }\n            return d;\n        };\n        spatial.hilbertCurve = function (n, v) {\n            var rx = (0 | 0);\n            var ry = (0 | 0);\n            var t = v;\n            var x = (0 | 0);\n            var y = (0 | 0);\n            for (var s = (1 | 0); s < n; s = s * (2 | 0)) {\n                rx = (1 | 0) & (t / (2 | 0));\n                ry = (1 | 0) & (t ^ rx);\n                var o = __.intifyVector(spatial.hilbertRotate(s, __.intifyVector(__.makeVector(x, y)), __.intifyVector(__.makeVector(rx, ry))));\n                x = o[0];\n                y = o[1];\n                x = x + s * rx;\n                y = y + s * ry;\n                t = t / (4 | 0);\n            }\n            return __.FM.int_2_1_1(x, y);\n        };\n        spatial.mortonDecode = function (p) { return __.FM.uint_2_1_1(reverseMortonCode2(p), reverseMortonCode2(p >> (1 >>> 0))); };\n        spatial.mortonEncode = function (p) { return (__.bitor(mortonCode2(p[0]), (mortonCode2(p[1]) << (1 >>> 0))) >>> 0); };\n        spatial.prototype.clone = function () {\n            return new spatial({});\n        };\n        spatial.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_23054_spatial\\\",\\\"fields\\\":[]}\");\n        };\n        return spatial;\n    }());\n    exports.spatial = spatial;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_23054_spatial\\\",\\\"fields\\\":[]}\"), spatial)\n    ; /* impl spatial */\n    function mortonCode2(x) {\n        x = x & (0x0000ffff >>> 0);\n        var n8 = (8 >>> 0);\n        var n4 = (4 >>> 0);\n        var n2 = (2 >>> 0);\n        var n1 = (1 >>> 0);\n        x = (x ^ (x << n8)) & (0x00ff00ff >>> 0);\n        x = (x ^ (x << n4)) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x << n2)) & (0x33333333 >>> 0);\n        x = (x ^ (x << n1)) & (0x55555555 >>> 0);\n        return x;\n    }\n    exports.mortonCode2 = mortonCode2;\n    ;\n    function randColor(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand2)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand2)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor = randColor;\n    ;\n    function randColor2(seed) { return __.FM.float_4_1_1_1_1((0, std_math_1.rand3)(__.makeVector(seed, (5 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (1 | 0))), (0, std_math_1.rand3)(__.makeVector(seed, (4 | 0))), __.int(1)); }\n    exports.randColor2 = randColor2;\n    ;\n    function reverseMortonCode2(x) {\n        x = x & (0x55555555 >>> 0);\n        x = (x ^ (x >> (1 >>> 0))) & (0x33333333 >>> 0);\n        x = (x ^ (x >> (2 >>> 0))) & (0x0f0f0f0f >>> 0);\n        x = (x ^ (x >> (4 >>> 0))) & (0x00ff00ff >>> 0);\n        x = (x ^ (x >> (8 >>> 0))) & (0x0000ffff >>> 0);\n        return x;\n    }\n    exports.reverseMortonCode2 = reverseMortonCode2;\n    ;\n    var noise = /** @class */ (function () {\n        function noise(data) {\n        }\n        noise.gaussian3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;\n            var p = v;\n            var a = (_a = p, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var d = (_b = p, _c = a, [_b[0] - _c[0], _b[1] - _c[1], _b[2] - _c[2]]);\n            d = (_d = (_f = d, _g = d, [_f[0] * _g[0], _f[1] * _g[1], _f[2] * _g[2]]), _e = (_h = 3.0, _j = (_k = 2.0, _l = d, [_k * _l[0], _k * _l[1], _k * _l[2]]), [_h - _j[0], _h - _j[1], _h - _j[2]]), [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]);\n            var b = (_m = (_p = a, [_p[0], _p[0], _p[1], _p[1]]), _o = __.FM.float_4_1_1_1_1(__.float(0.0), __.float(1.0), __.float(0.0), __.float(1.0)), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2], _m[3] + _o[3]]);\n            var k1 = perm((_q = b, [_q[0], _q[1], _q[0], _q[1]]));\n            var k2 = perm((_r = (_t = k1, [_t[0], _t[1], _t[0], _t[1]]), _s = (_u = b, [_u[2], _u[2], _u[3], _u[3]]), [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2], _r[3] + _s[3]]));\n            var c = (_v = k2, _w = (_x = a, [_x[2], _x[2], _x[2], _x[2]]), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2], _v[3] + _w[3]]);\n            var k3 = perm(c);\n            var k4 = perm((_y = c, _z = 1.0, [_y[0] + _z, _y[1] + _z, _y[2] + _z, _y[3] + _z]));\n            var o1 = (0, std_math_1.frac)((_0 = k3, _1 = (1.0 / 41.0), [_0[0] * _1, _0[1] * _1, _0[2] * _1, _0[3] * _1]));\n            var o2 = (0, std_math_1.frac)((_2 = k4, _3 = (1.0 / 41.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3, _2[3] * _3]));\n            var o3 = (_4 = (_6 = o2, _7 = d[2], [_6[0] * _7, _6[1] * _7, _6[2] * _7, _6[3] * _7]), _5 = (_8 = o1, _9 = (1.0 - d[2]), [_8[0] * _9, _8[1] * _9, _8[2] * _9, _8[3] * _9]), [_4[0] + _5[0], _4[1] + _5[1], _4[2] + _5[2], _4[3] + _5[3]]);\n            var o4 = (_10 = (_12 = (_14 = o3, [_14[1], _14[3]]), _13 = d[0], [_12[0] * _13, _12[1] * _13]), _11 = (_15 = (_17 = o3, [_17[0], _17[2]]), _16 = (1.0 - d[0]), [_15[0] * _16, _15[1] * _16]), [_10[0] + _11[0], _10[1] + _11[1]]);\n            return o4[1] * d[1] + o4[0] * (1.0 - d[1]);\n        };\n        noise.gaussian2 = function (v) { return noise.gaussian3(__.makeVector(v, (0 | 0))); };\n        noise.noise1 = function (x) {\n            var i = Math.floor(x);\n            var f = (0, std_math_1.frac)(x);\n            var u = f * f * (3.0 - 2.0 * f);\n            return (0, std_math_1.lerp)(hash(i), hash(i + 1.0), u);\n        };\n        noise.noise2 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var f = (0, std_math_1.frac)(x);\n            // Four corners in 2D of a tile\n            var a = hash2(i);\n            var b = hash2((_b = i, _c = __.FM.float_2_1_1(__.float(1.0), __.float(0.0)), [_b[0] + _c[0], _b[1] + _c[1]]));\n            var c = hash2((_d = i, _e = __.FM.float_2_1_1(__.float(0.0), __.float(1.0)), [_d[0] + _e[0], _d[1] + _e[1]]));\n            var d = hash2((_f = i, _g = __.FM.float_2_1_1(__.float(1.0), __.float(1.0)), [_f[0] + _g[0], _f[1] + _g[1]]));\n            // Simple 2D lerp using smoothstep envelope between the values.\n            // return float3(lerp(lerp(a, b, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tlerp(c, d, smoothstep(0.0, 1.0, f.x)),\n            //\t\t\tsmoothstep(0.0, 1.0, f.y)));\n            // Same code, with the clamps in smoothstep and common subexpressions\n            // optimized away.\n            var u = (_h = (_k = f, _l = f, [_k[0] * _l[0], _k[1] * _l[1]]), _j = (_m = 3.0, _o = (_p = 2.0, _q = f, [_p * _q[0], _p * _q[1]]), [_m - _o[0], _m - _o[1]]), [_h[0] * _j[0], _h[1] * _j[1]]);\n            return (0, std_math_1.lerp)(a, b, u[0]) + (c - a) * u[1] * (1.0 - u[0]) + (d - b) * u[0] * u[1];\n        };\n        noise.fmb1 = function (x) {\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.int(100);\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise1(x);\n                x = x * 2.0 + shift;\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm2 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_2_2(__.swizzle((100 | 0), \"xy\"));\n            // Rotate to reduce axial bias\n            var rot = __.float2x2(Math.cos(0.5), Math.sin(0.5), (__.FM.negate_1(Math.sin(0.5))), Math.cos(0.50));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise2(x);\n                x = (_a = (_c = __.mul(rot, x), _d = 2.0, [_c[0] * _d, _c[1] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.fbm3 = function (x) {\n            var _a, _b, _c, _d;\n            var v = 0.0;\n            var a = 0.5;\n            var shift = __.FM.float_3_3(__.swizzle((100 | 0), \"xyz\"));\n            for (var i = (0 | 0); i < (5 | 0); i++) {\n                v = v + a * noise.noise3(x);\n                x = (_a = (_c = x, _d = 2.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), _b = shift, [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]);\n                a = a * 0.5;\n            }\n            return v;\n        };\n        noise.noise3 = function (x) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n            var step = __.FM.float_3_1_1_1(__.int(110), __.int(241), __.int(171));\n            var i = (_a = x, [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var f = (0, std_math_1.frac)(x);\n            // For performance, compute the base input to a 1D hash from the integer part of the argument and the \n            // incremental change to the 1D based on the 3D -> 1D wrapping\n            var n = (0, std_math_1.dot)(i, step);\n            var u = (_b = (_d = f, _e = f, [_d[0] * _e[0], _d[1] * _e[1], _d[2] * _e[2]]), _c = (_f = 3.0, _g = (_h = 2.0, _j = f, [_h * _j[0], _h * _j[1], _h * _j[2]]), [_f - _g[0], _f - _g[1], _f - _g[2]]), [_b[0] * _c[0], _b[1] * _c[1], _b[2] * _c[2]]);\n            return (0, std_math_1.lerp)((0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(0)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(0)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(0)))), u[0]), u[1]), (0, std_math_1.lerp)((0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(0), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(0), __.int(1)))), u[0]), (0, std_math_1.lerp)(hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(0), __.int(1), __.int(1)))), hash(n + (0, std_math_1.dot)(step, __.FM.float_3_1_1_1(__.int(1), __.int(1), __.int(1)))), u[0]), u[1]), u[2]);\n        };\n        noise.simplex2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.211324865405187), __.float(0.366025403784439), __.negate(0.577350269189626), __.float(0.024390243902439));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1]])), [_b[0] + _c, _b[1] + _c]), [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0]])), [_e[0] + _f, _e[1] + _f]);\n            var xv = (0, std_math_1.step)(x0[1], x0[0]);\n            var i1 = __.FM.float_2_1_1(xv, __.sub(1.0, xv));\n            var x1 = (_k = (_m = x0, _o = (_p = C, [_p[0], _p[0]]), [_m[0] + _o[0], _m[1] + _o[1]]), _l = i1, [_k[0] - _l[0], _k[1] - _l[1]]);\n            var x2 = (_q = x0, _r = (_s = C, [_s[2], _s[2]]), [_q[0] + _r[0], _q[1] + _r[1]]);\n            i = mod289_2(i);\n            var p = permute((_t = (_v = permute((_x = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.float(1.0)), _y = i[1], [_x[0] + _y, _x[1] + _y, _x[2] + _y])), _w = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.float(1.0)), [_v[0] + _w[0], _v[1] + _w[1], _v[2] + _w[2]]), _u = i[0], [_t[0] + _u, _t[1] + _u, _t[2] + _u]));\n            var m = (0, std_math_1.max)((_z = (_1 = 0.5, [_1, _1, _1]), _0 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_z[0] - _0[0], _z[1] - _0[1], _z[2] - _0[2]]), 0.0);\n            m = (_2 = m, _3 = m, [_2[0] * _3[0], _2[1] * _3[1], _2[2] * _3[2]]);\n            m = (_4 = m, _5 = m, [_4[0] * _5[0], _4[1] * _5[1], _4[2] * _5[2]]);\n            var x = (_6 = (_8 = 2.0, _9 = (0, std_math_1.frac)((_10 = p, _11 = (_12 = C, [_12[3], _12[3], _12[3]]), [_10[0] * _11[0], _10[1] * _11[1], _10[2] * _11[2]])), [_8 * _9[0], _8 * _9[1], _8 * _9[2]]), _7 = 1.0, [_6[0] - _7, _6[1] - _7, _6[2] - _7]);\n            var h = (_13 = (_15 = x, [Math.abs(_15[0]), Math.abs(_15[1]), Math.abs(_15[2])]), _14 = 0.5, [_13[0] - _14, _13[1] - _14, _13[2] - _14]);\n            var ox = (_16 = (_17 = x, _18 = 0.5, [_17[0] + _18, _17[1] + _18, _17[2] + _18]), [Math.floor(_16[0]), Math.floor(_16[1]), Math.floor(_16[2])]);\n            var a0 = (_19 = x, _20 = ox, [_19[0] - _20[0], _19[1] - _20[1], _19[2] - _20[2]]);\n            // Normalise gradients implicitly by scaling m\n            m = (_21 = m, _22 = taylorInvSqrt((_23 = (_25 = a0, _26 = a0, [_25[0] * _26[0], _25[1] * _26[1], _25[2] * _26[2]]), _24 = (_27 = h, _28 = h, [_27[0] * _28[0], _27[1] * _28[1], _27[2] * _28[2]]), [_23[0] + _24[0], _23[1] + _24[1], _23[2] + _24[2]])), [_21[0] * _22[0], _21[1] * _22[1], _21[2] * _22[2]]);\n            // Compute final noise value at P\n            var g = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g);\n        };\n        noise.perlin2 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = 0.0;\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        noise.perlin3 = function (v) {\n            var x = v[0];\n            var y = v[1];\n            var z = v[2];\n            if (x < (0 | 0)) {\n                x = (__.FM.negate_1(x));\n            }\n            if (y < (0 | 0)) {\n                y = (__.FM.negate_1(y));\n            }\n            if (z < (0 | 0)) {\n                z = (__.FM.negate_1(z));\n            }\n            var xi = ((0, std_math_1.floor)(x) | 0);\n            var yi = ((0, std_math_1.floor)(y) | 0);\n            var zi = ((0, std_math_1.floor)(z) | 0);\n            var xf = x - xi;\n            var yf = y - yi;\n            var zf = z - zi;\n            var rxf = 0.0;\n            var ryf = 0.0;\n            var r = 0.0;\n            var ampl = 0.5;\n            var n1 = 0.0;\n            var n2 = 0.0;\n            var n3 = 0.0;\n            for (var o = (0 | 0); o < perlin_octaves; o++) {\n                var of1 = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB);\n                rxf = scaled_cosine(xf);\n                ryf = scaled_cosine(yf);\n                n1 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n1 = n1 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n1);\n                n2 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n2);\n                n1 = n1 + ryf * (n2 - n1);\n                of1 = of1 + PERLIN_ZWRAP;\n                n2 = perlin.floatArray[of1 & PERLIN_SIZE];\n                n2 = n2 + rxf * (perlin.floatArray[(of1 + (1 | 0)) & PERLIN_SIZE] - n2);\n                n3 = perlin.floatArray[(of1 + PERLIN_YWRAP) & PERLIN_SIZE];\n                n3 = n3 + rxf * (perlin.floatArray[(of1 + PERLIN_YWRAP + (1 | 0)) & PERLIN_SIZE] - n3);\n                n2 = n2 + ryf * (n3 - n2);\n                n1 = n1 + scaled_cosine(zf) * (n2 - n1);\n                r = r + n1 * ampl;\n                ampl = ampl * perlin_amp_falloff;\n                xi = xi << (1 | 0);\n                xf = xf * 2.0;\n                yi = yi << (1 | 0);\n                yf = yf * 2.0;\n                zi = zi << (1 | 0);\n                zf = zf * 2.0;\n                if (xf >= 1.0) {\n                    xi++;\n                    xf = xf - 1.0;\n                }\n                if (yf >= 1.0) {\n                    yi++;\n                    yf = yf - 1.0;\n                }\n                if (zf >= 1.0) {\n                    zi++;\n                    zf = zf - 1.0;\n                }\n            }\n            return r;\n        };\n        /**\n            * Returns 3 values: distance to closest cell, random value of closest cell, distance to closest edge.\n            */\n        noise.voronoi2 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var n = (_a = v, [Math.floor(_a[0]), Math.floor(_a[1])]);\n            var minDist = 10.0;\n            var toClose = (_b = 0.0, [_b, _b]);\n            var closestCell = (_c = 0.0, [_c, _c]);\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_d = n, _e = __.FM.float_2_1_1(i, j), [_d[0] + _e[0], _d[1] + _e[1]]);\n                    var cellPos = (_f = cell, _g = hash2(cell), [_f[0] + _g, _f[1] + _g]);\n                    var toCell = (_h = cellPos, _j = v, [_h[0] - _j[0], _h[1] - _j[1]]);\n                    var dst = (0, std_math_1.length)(toCell);\n                    if (dst < minDist) {\n                        minDist = dst;\n                        toClose = toCell;\n                        closestCell = cell;\n                    }\n                }\n            }\n            var minEdge = 10.0;\n            for (var j = (__.FM.negate_1((1 | 0))); j <= (1 | 0); j++) {\n                for (var i = (__.FM.negate_1((1 | 0))); i <= (1 | 0); i++) {\n                    var cell = (_k = n, _l = __.FM.float_2_1_1(i, j), [_k[0] + _l[0], _k[1] + _l[1]]);\n                    var cellPos = (_m = cell, _o = hash2(cell), [_m[0] + _o, _m[1] + _o]);\n                    var toCell = (_p = cellPos, _q = v, [_p[0] - _q[0], _p[1] - _q[1]]);\n                    var diff = (_r = (_s = closestCell, _t = cell, [_s[0] - _t[0], _s[1] - _t[1]]), [Math.abs(_r[0]), Math.abs(_r[1])]);\n                    var isClosest = diff[0] + diff[1] < 0.1;\n                    if (__.not(isClosest)) {\n                        var toCenter = (_u = (_w = toClose, _x = toCell, [_w[0] + _x[0], _w[1] + _x[1]]), _v = 0.5, [_u[0] * _v, _u[1] * _v]);\n                        var cellDiff = (0, std_math_1.normalize)((_y = toCell, _z = toClose, [_y[0] - _z[0], _y[1] - _z[1]]));\n                        var edge = (0, std_math_1.dot)(toCenter, cellDiff);\n                        minEdge = (0, std_math_1.min)(minEdge, edge);\n                    }\n                }\n            }\n            var random = hash2(closestCell);\n            return __.FM.float_3_1_1_1(minDist, random, minEdge);\n        };\n        noise.simplex3 = function (v) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56;\n            var C = __.FM.float_4_1_1_1_1(__.float(0.138196601125011), __.float(0.276393202250021), __.float(0.414589803375032), __.negate(0.447213595499958));\n            var i = (_a = (_b = v, _c = (0, std_math_1.dot)(v, (_d = C, [_d[1], _d[1], _d[1]])), [_b[0] + _c, _b[1] + _c, _b[2] + _c]), [Math.floor(_a[0]), Math.floor(_a[1]), Math.floor(_a[2])]);\n            var x0 = (_e = (_g = v, _h = i, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]), _f = (0, std_math_1.dot)(i, (_j = C, [_j[0], _j[0], _j[0]])), [_e[0] + _f, _e[1] + _f, _e[2] + _f]);\n            var g = (0, std_math_1.step)((_k = x0, [_k[1], _k[2], _k[0]]), (_l = x0, [_l[0], _l[1], _l[2]]));\n            var l = (_m = 1.0, _o = g, [_m - _o[0], _m - _o[1], _m - _o[2]]);\n            var i1 = (0, std_math_1.min)((_p = g, [_p[0], _p[1], _p[2]]), (_q = l, [_q[2], _q[0], _q[1]]));\n            var i2 = (0, std_math_1.max)((_r = g, [_r[0], _r[1], _r[2]]), (_s = l, [_s[2], _s[0], _s[1]]));\n            var x1 = (_t = (_v = x0, _w = i1, [_v[0] - _w[0], _v[1] - _w[1], _v[2] - _w[2]]), _u = (_x = 1.0, _y = (_z = C, [_z[0], _z[0], _z[0]]), [_x * _y[0], _x * _y[1], _x * _y[2]]), [_t[0] + _u[0], _t[1] + _u[1], _t[2] + _u[2]]);\n            var x2 = (_0 = (_2 = x0, _3 = i2, [_2[0] - _3[0], _2[1] - _3[1], _2[2] - _3[2]]), _1 = (_4 = 2.0, _5 = (_6 = C, [_6[0], _6[0], _6[0]]), [_4 * _5[0], _4 * _5[1], _4 * _5[2]]), [_0[0] + _1[0], _0[1] + _1[1], _0[2] + _1[2]]);\n            var x3 = (_7 = (_9 = x0, _10 = 1., [_9[0] - _10, _9[1] - _10, _9[2] - _10]), _8 = (_11 = 3.0, _12 = (_13 = C, [_13[0], _13[0], _13[0]]), [_11 * _12[0], _11 * _12[1], _11 * _12[2]]), [_7[0] + _8[0], _7[1] + _8[1], _7[2] + _8[2]]);\n            i = mod289_3(i);\n            var p = permute((_14 = (_16 = permute((_18 = (_20 = permute((_22 = i[2], _23 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'z'), __.swizzle(i2, 'z')), [_22 + _23[0], _22 + _23[1], _22 + _23[2]])), _21 = i[1], [_20[0] + _21, _20[1] + _21, _20[2] + _21]), _19 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'y'), __.swizzle(i2, 'y')), [_18[0] + _19[0], _18[1] + _19[1], _18[2] + _19[2]])), _17 = i[0], [_16[0] + _17, _16[1] + _17, _16[2] + _17]), _15 = __.FM.float_3_1_1_1(__.float(0.0), __.swizzle(i1, 'x'), __.swizzle(i2, 'x')), [_14[0] + _15[0], _14[1] + _15[1], _14[2] + _15[2]]));\n            var m = (0, std_math_1.max)((_24 = 0.5, _25 = __.FM.float_3_1_1_1((0, std_math_1.dot)(x0, x0), (0, std_math_1.dot)(x1, x1), (0, std_math_1.dot)(x2, x2)), [_24 - _25[0], _24 - _25[1], _24 - _25[2]]), 0.0);\n            m = (_26 = m, _27 = m, [_26[0] * _27[0], _26[1] * _27[1], _26[2] * _27[2]]);\n            m = (_28 = m, _29 = m, [_28[0] * _29[0], _28[1] * _29[1], _28[2] * _29[2]]);\n            var x = (_30 = (_32 = 2.0, _33 = (0, std_math_1.frac)((_34 = p, _35 = (_36 = C, [_36[3], _36[3], _36[3]]), [_34[0] * _35[0], _34[1] * _35[1], _34[2] * _35[2]])), [_32 * _33[0], _32 * _33[1], _32 * _33[2]]), _31 = 1.0, [_30[0] - _31, _30[1] - _31, _30[2] - _31]);\n            var h = (_37 = (_39 = x, [Math.abs(_39[0]), Math.abs(_39[1]), Math.abs(_39[2])]), _38 = 0.5, [_37[0] - _38, _37[1] - _38, _37[2] - _38]);\n            var ox = (_40 = (_41 = x, _42 = 0.5, [_41[0] + _42, _41[1] + _42, _41[2] + _42]), [Math.floor(_40[0]), Math.floor(_40[1]), Math.floor(_40[2])]);\n            var a0 = (_43 = x, _44 = ox, [_43[0] - _44[0], _43[1] - _44[1], _43[2] - _44[2]]);\n            // Normalise gradients implicitly by scaling m\n            // Approximation of: m *= inversesqrt(a0 * a0 + h * h);\n            m = (_45 = m, _46 = (_47 = 1.79284291400159, _48 = (_49 = 0.85373472095314, _50 = (_51 = (_53 = a0, _54 = a0, [_53[0] * _54[0], _53[1] * _54[1], _53[2] * _54[2]]), _52 = (_55 = h, _56 = h, [_55[0] * _56[0], _55[1] * _56[1], _55[2] * _56[2]]), [_51[0] + _52[0], _51[1] + _52[1], _51[2] + _52[2]]), [_49 * _50[0], _49 * _50[1], _49 * _50[2]]), [_47 - _48[0], _47 - _48[1], _47 - _48[2]]), [_45[0] * _46[0], _45[1] * _46[1], _45[2] * _46[2]]);\n            // Compute final noise value at P\n            var g2 = __.FM.float_3_1_1_1(__.add(a0[0] * x0[0], h[0] * x0[1]), __.add(a0[1] * x1[0], h[1] * x1[1]), __.add(a0[2] * x2[0], h[2] * x2[1]));\n            return 130.0 * (0, std_math_1.dot)(m, g2);\n        };\n        noise.prototype.clone = function () {\n            return new noise({});\n        };\n        noise.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_26913_noise\\\",\\\"fields\\\":[]}\");\n        };\n        return noise;\n    }());\n    exports.noise = noise;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_26913_noise\\\",\\\"fields\\\":[]}\"), noise)\n    ;\n    var PERLIN_YWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAPB\", function () { return (4 | 0); }, function () { return PERLIN_YWRAPB; }) | 0);\n    var PERLIN_YWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_YWRAP\", function () { return (1 | 0) << PERLIN_YWRAPB; }, function () { return PERLIN_YWRAP; }) | 0);\n    var PERLIN_ZWRAPB = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAPB\", function () { return (8 | 0); }, function () { return PERLIN_ZWRAPB; }) | 0);\n    var PERLIN_ZWRAP = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_ZWRAP\", function () { return (1 | 0) << PERLIN_ZWRAPB; }, function () { return PERLIN_ZWRAP; }) | 0);\n    var PERLIN_SIZE = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"PERLIN_SIZE\", function () { return (4095 | 0); }, function () { return PERLIN_SIZE; }) | 0);\n    var perlin_octaves = ((0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_octaves\", function () { return (4 | 0); }, function () { return perlin_octaves; }) | 0);\n    // default to medium smooth\n    var perlin_amp_falloff = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin_amp_falloff\", function () { return 0.5; }, function () { return perlin_amp_falloff; });\n    // 50% reduction/octave\n    function scaled_cosine(i) { return 0.5 * (1.0 - Math.cos(i * PI)); }\n    var perlin = (0, std___std_all_1.globalVarInit)(\"_slash__std_slash_common_dot_ts\", \"perlin\", function () { return (0, buffer_1.buffer)(PERLIN_SIZE + (1 | 0), \"float\", __assign({}, JSON.parse(\"{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}\"))); }, function () { return perlin; });\n    for (var i = (0 | 0); i < PERLIN_SIZE + (1 | 0); i++) {\n        perlin.__index_assign(i, (0, std_math_1.rand)(i));\n    } //\t<https://www.shadertoy.com/view/4dS3Wd>\n    //\tBy Morgan McGuire @morgan3d, http://graphicscodex.com\n    //\n    function hash(n) { return (0, std_math_1.frac)(Math.sin(n) * (1e4 | 0)); }\n    function hash2(p) { return (0, std_math_1.frac)((1e4 | 0) * Math.sin(17.0 * p[0] + p[1] * 0.1) * (0.1 + Math.abs(Math.sin(p[1] * 13.0 + p[0])))); }\n    function hash3(p) {\n        var h = (0, std_math_1.dot)(p, __.FM.float_3_1_1_1(__.float(127.1), __.float(311.7), __.float(74.7)));\n        return (0, std_math_1.frac)(Math.sin(h) * 43758.5453123);\n    }\n    /* impl noise */\n    function mod289_1(x) { return x - Math.floor(x * (1.0 / 289.0)) * 289.0; }\n    function mod289_4(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g, _f[3] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2]), Math.floor(_e[3])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2], _a[3] - _b[3]]; }\n    function perm(x) { var _a, _b, _c, _d, _e, _f; return mod289_4((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f, _e[3] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d, _c[3] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2], _a[3] * _b[3]])); }\n    function mod289_3(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g, _f[2] * _g]), [Math.floor(_e[0]), Math.floor(_e[1]), Math.floor(_e[2])]), _d = 289.0, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]; }\n    function mod289_2(x) { var _a, _b, _c, _d, _e, _f, _g; return _a = x, _b = (_c = (_e = (_f = x, _g = (1.0 / 289.0), [_f[0] * _g, _f[1] * _g]), [Math.floor(_e[0]), Math.floor(_e[1])]), _d = 289.0, [_c[0] * _d, _c[1] * _d]), [_a[0] - _b[0], _a[1] - _b[1]]; }\n    function permute(x) { var _a, _b, _c, _d, _e, _f; return mod289_3((_a = (_c = (_e = x, _f = 34.0, [_e[0] * _f, _e[1] * _f, _e[2] * _f]), _d = 1.0, [_c[0] + _d, _c[1] + _d, _c[2] + _d]), _b = x, [_a[0] * _b[0], _a[1] * _b[1], _a[2] * _b[2]])); }\n    function taylorInvSqrt(r) { var _a, _b, _c, _d; return _a = 1.79284291400159, _b = (_c = 0.85373472095314, _d = r, [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]; }\n    var matrix = /** @class */ (function () {\n        function matrix(data) {\n        }\n        matrix.lookAt = function (from, to, up) {\n            var _a, _b, _c, _d;\n            var zAxis = (0, std_math_1.normalize)((_a = from, _b = to, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]));\n            var xAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(up, zAxis));\n            var yAxis = (0, std_math_1.normalize)((0, std_math_1.cross)(zAxis, xAxis));\n            var dst = __.float4x4();\n            dst.__index((0 | 0)).__index_assign((0 | 0), xAxis[0]);\n            dst.__index((0 | 0)).__index_assign((1 | 0), yAxis[0]);\n            dst.__index((0 | 0)).__index_assign((2 | 0), zAxis[0]);\n            dst.__index((0 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((1 | 0)).__index_assign((0 | 0), xAxis[1]);\n            dst.__index((1 | 0)).__index_assign((1 | 0), yAxis[1]);\n            dst.__index((1 | 0)).__index_assign((2 | 0), zAxis[1]);\n            dst.__index((1 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((2 | 0)).__index_assign((0 | 0), xAxis[2]);\n            dst.__index((2 | 0)).__index_assign((1 | 0), yAxis[2]);\n            dst.__index((2 | 0)).__index_assign((2 | 0), zAxis[2]);\n            dst.__index((2 | 0)).__index_assign((3 | 0), (0 | 0));\n            dst.__index((3 | 0)).__index_assign((0 | 0), (__.FM.negate_1((xAxis[0] * from[0] + xAxis[1] * from[1] + xAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((1 | 0), (__.FM.negate_1((yAxis[0] * from[0] + yAxis[1] * from[1] + yAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((2 | 0), (__.FM.negate_1((zAxis[0] * from[0] + zAxis[1] * from[1] + zAxis[2] * from[2]))));\n            dst.__index((3 | 0)).__index_assign((3 | 0), (1 | 0));\n            return dst;\n            var forward = (0, std_math_1.normalize)((_c = from, _d = to, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]));\n            var right = (0, std_math_1.normalize)((0, std_math_1.cross)(up, forward));\n            var newup = (0, std_math_1.cross)(forward, right);\n            var m = __.float4x4();\n            m.__index((0 | 0)).__index_assign((0 | 0), right[0]), m.__index((0 | 0)).__index_assign((1 | 0), right[1]), m.__index((0 | 0)).__index_assign((2 | 0), right[2]);\n            m.__index((1 | 0)).__index_assign((0 | 0), newup[0]), m.__index((1 | 0)).__index_assign((1 | 0), newup[1]), m.__index((1 | 0)).__index_assign((2 | 0), newup[2]);\n            m.__index((2 | 0)).__index_assign((0 | 0), forward[0]), m.__index((2 | 0)).__index_assign((1 | 0), forward[1]), m.__index((2 | 0)).__index_assign((2 | 0), forward[2]);\n            m.__index((3 | 0)).__index_assign((0 | 0), from[0]), m.__index((3 | 0)).__index_assign((1 | 0), from[1]), m.__index((3 | 0)).__index_assign((2 | 0), from[2]);\n            return m;\n        };\n        matrix.perspective = function (fov, aspect, near, far) {\n            // let scale = 1.0 / tan(fov * 0.5 * PI / 180); \n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = -far / (far - near);  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = -1;  //set w = -z \n            // M[3][3] = 0; \n            //return M;\n            var fovRad = (0, std_math_1.radians)(fov);\n            var tanFov = Math.tan(fovRad * 0.5);\n            var matrx = __.float4x4(1.0 / (tanFov * aspect), (0 | 0), (0 | 0), (0 | 0), (0 | 0), 1.0 / tanFov, (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1(((far + near) / (far - near)))), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (__.FM.negate_1((((2 | 0) * (near * far)) / (far - near)))), (0 | 0));\n            return matrx;\n        };\n        matrix.perspectiveReverseZ = function (fov, aspect, near) {\n            // let far = 10000000.0;\n            // let M = float4x4();\n            // M[0][0] = scale;  //scale the x coordinates of the projected point \n            // M[1][1] = scale * aspect;  //scale the y coordinates of the projected point \n            // M[2][2] = (-far / (far - near)) * -1;  //used to remap z to [0,1] \n            // M[3][2] = -far * near / (far - near);  //used to remap z [0,1] \n            // M[2][3] = 0;  //set w = -z \n            // M[3][3] = 0; \n            // return M;\n            var matrx = __.mul(__.float4x4((1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (0 | 0), (0 | 0), (0 | 0), (0 | 0), (__.FM.negate_1((1 | 0))), (0 | 0), (0 | 0), (0 | 0), (1 | 0), (1 | 0)), matrix.perspective(fov, aspect, near, 10000000.0));\n            return matrx;\n        };\n        matrix.prototype.clone = function () {\n            return new matrix({});\n        };\n        matrix.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_44684_matrix\\\",\\\"fields\\\":[]}\");\n        };\n        return matrix;\n    }());\n    exports.matrix = matrix;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_44684_matrix\\\",\\\"fields\\\":[]}\"), matrix)\n    ; /* impl matrix */\n    /**\n    * Uses Super Sampling Anti Aliasing to smooth out the image.\n    */\n    function screenAA(inScreenPos, gridSize, func) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        var weightSum = 0.0;\n        var accumulatedColor = __.FM.float_4_1_1_1_1(__.int(0), __.int(0), __.int(0), __.int(0));\n        for (var y = (0 | 0); y < gridSize; y++) {\n            for (var x = (0 | 0); x < gridSize; x++) {\n                var offset = __.FM.float_2_1_1(__.div((x + 0.5 - gridSize * 0.5), gridSize), __.div((y + 0.5 - gridSize * 0.5), gridSize));\n                var weight = Math.exp((__.FM.negate_1((0, std_math_1.dot)(offset, offset))) * (5 | 0));\n                // Gaussian weight\n                accumulatedColor = (_a = accumulatedColor, _b = (_c = func((_e = inScreenPos, _f = offset, [_e[0] + _f[0], _e[1] + _f[1]])), _d = weight, [_c[0] * _d, _c[1] * _d, _c[2] * _d, _c[3] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2], _a[3] + _b[3]]);\n                weightSum = weightSum + weight;\n            }\n        }\n        return _g = accumulatedColor, _h = weightSum, [_g[0] / _h, _g[1] / _h, _g[2] / _h, _g[3] / _h];\n    }\n    exports.screenAA = screenAA;\n    ; // Color conversion helpers\n    // A color = float4 containing rgba values in the range [0, 1]\n    // All functions have an extra alpha functon and a reverse\n    // i.e. hsl, hsla, hslFromColor, hslaFromColor\n    // fn hsl(v: float3) -> float4\n    function hsl(v) { return hsla(__.makeVector(v, (1 | 0))); }\n    exports.hsl = hsl;\n    ;\n    function hsla(v) {\n        var h = v[0];\n        var s = v[1];\n        var l = v[2];\n        var a = v[3];\n        var c = ((1 | 0) - Math.abs((2 | 0) * l - (1 | 0))) * s;\n        var x = c * ((1 | 0) - Math.abs(((h / (60 | 0)) % (2 | 0)) - (1 | 0)));\n        var m = l - c / (2 | 0);\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsla = hsla;\n    ;\n    function hslFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var a = c[3];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var l = (mx + mn) / (2 | 0);\n        if (mx == mn) {\n            h = (0 | 0);\n            s = (0 | 0);\n        }\n        else {\n            var d = mx - mn;\n            s = (l > 0.5) ? d / ((2 | 0) - mx - mn) : d / (mx + mn);\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, l);\n    }\n    exports.hslFromColor = hslFromColor;\n    ;\n    function hslaFromColor(c) {\n        var hsl = hslFromColor(c);\n        return __.FM.float_4_3_1(hsl, __.swizzle(c, 'a'));\n    }\n    exports.hslaFromColor = hslaFromColor;\n    ;\n    function hsv(v) { return hsva(__.makeVector(v, (1 | 0))); }\n    exports.hsv = hsv;\n    ;\n    function hsva(val) {\n        var h = val[0];\n        var s = val[1];\n        var v = val[2];\n        var a = val[3];\n        var c = v * s;\n        var x = c * ((1 | 0) - Math.abs(h / (60 | 0) % (2 | 0) - (1 | 0)));\n        var m = v - c;\n        var r = 0.0;\n        var g = 0.0;\n        var b = 0.0;\n        if (h < (60 | 0)) {\n            r = c;\n            g = x;\n            b = (0 | 0);\n        }\n        else if (h < (120 | 0)) {\n            r = x;\n            g = c;\n            b = (0 | 0);\n        }\n        else if (h < (180 | 0)) {\n            r = (0 | 0);\n            g = c;\n            b = x;\n        }\n        else if (h < (240 | 0)) {\n            r = (0 | 0);\n            g = x;\n            b = c;\n        }\n        else if (h < (300 | 0)) {\n            r = x;\n            g = (0 | 0);\n            b = c;\n        }\n        else {\n            r = c;\n            g = (0 | 0);\n            b = x;\n        }\n        return __.FM.float_4_1_1_1_1(__.add(r, m), __.add(g, m), __.add(b, m), a);\n    }\n    exports.hsva = hsva;\n    ;\n    function hsvFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var mx = (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var mn = (0, std_math_1.min)(r, (0, std_math_1.min)(g, b));\n        var h = 0.0;\n        var s = 0.0;\n        var v = mx;\n        var d = mx - mn;\n        s = (mx == (0 | 0)) ? (0 | 0) : d / mx;\n        if (mx == mn) {\n            h = (0 | 0);\n        }\n        else {\n            if (mx == r) {\n                h = (g - b) / d + ((g < b) ? (6 | 0) : (0 | 0));\n            }\n            else if (mx == g) {\n                h = (b - r) / d + (2 | 0);\n            }\n            else if (mx == b) {\n                h = (r - g) / d + (4 | 0);\n            }\n            h = h / (6 | 0);\n        }\n        return __.FM.float_3_1_1_1(__.mul(h, (360 | 0)), s, v);\n    }\n    exports.hsvFromColor = hsvFromColor;\n    ;\n    function hsvaFromColor(c) {\n        var hsv = hsvFromColor(c);\n        return __.FM.float_4_3_1(hsv, __.swizzle(c, 'a'));\n    }\n    exports.hsvaFromColor = hsvaFromColor;\n    ;\n    function rgb(v) { return __.FM.float_4_3_1(__.div(v, 255.0), __.int(1)); }\n    exports.rgb = rgb;\n    ;\n    function rgba(v) { return __.FM.float_4_4(__.div(v, 255.0)); }\n    exports.rgba = rgba;\n    ;\n    function rgbFromColor(c) { var _a, _b, _c; return _a = (_c = c, [_c[0], _c[1], _c[2]]), _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b]; }\n    exports.rgbFromColor = rgbFromColor;\n    ;\n    function rgbaFromColor(c) { var _a, _b; return _a = c, _b = 255.0, [_a[0] * _b, _a[1] * _b, _a[2] * _b, _a[3] * _b]; }\n    exports.rgbaFromColor = rgbaFromColor;\n    ;\n    function cmyk(v) {\n        var c = v[0];\n        var m = v[1];\n        var y = v[2];\n        var k = v[3];\n        var r = (1 | 0) - (0, std_math_1.min)((1 | 0), c * ((1 | 0) - k) + k);\n        var g = (1 | 0) - (0, std_math_1.min)((1 | 0), m * ((1 | 0) - k) + k);\n        var b = (1 | 0) - (0, std_math_1.min)((1 | 0), y * ((1 | 0) - k) + k);\n        return __.FM.float_4_1_1_1_1(r, g, b, __.int(1));\n    }\n    exports.cmyk = cmyk;\n    ;\n    function cmykFromColor(c) {\n        var r = c[0];\n        var g = c[1];\n        var b = c[2];\n        var k = (1 | 0) - (0, std_math_1.max)(r, (0, std_math_1.max)(g, b));\n        var c1 = ((1 | 0) - r - k) / ((1 | 0) - k);\n        var m = ((1 | 0) - g - k) / ((1 | 0) - k);\n        var y = ((1 | 0) - b - k) / ((1 | 0) - k);\n        return __.FM.float_4_1_1_1_1(c1, m, y, k);\n    }\n    exports.cmykFromColor = cmykFromColor;\n    ;\n    function hex(v) {\n        var r = (v >> (16 | 0)) & (0xFF | 0);\n        var g = (v >> (8 | 0)) & (0xFF | 0);\n        var b = v & (0xFF | 0);\n        return __.FM.float_4_1_1_1_1(__.div(r, 255.0), __.div(g, 255.0), __.div(b, 255.0), __.float(1.0));\n    }\n    exports.hex = hex;\n    ;\n    function hexFromColor(c) {\n        var r = (__.mul(c[0], 255.0) | 0);\n        var g = (__.mul(c[1], 255.0) | 0);\n        var b = (__.mul(c[2], 255.0) | 0);\n        return (r << (16 | 0)) | (g << (8 | 0)) | b;\n    }\n    exports.hexFromColor = hexFromColor;\n    ; /**\n    * Returns sin remapped to [0, 1]\n    */\n    function sin1(v) { return (Math.sin(v) + (1 | 0)) * 0.5; }\n    exports.sin1 = sin1;\n    ; /**\n    * Returns cos remapped to [0, 1]\n    */\n    function cos1(v) { return (Math.cos(v) + (1 | 0)) * 0.5; }\n    exports.cos1 = cos1;\n    ; /**\n    * Returns tan remapped to [0, 1]\n    */\n    function tan1(v) { return (Math.tan(v) + (1 | 0)) * 0.5; }\n    exports.tan1 = tan1;\n    ;\n    function remap(v, low1, high1, low2, high2) { return low2 + (v - low1) * (high2 - low2) / (high1 - low1); }\n    exports.remap = remap;\n    ;\n    function remap1(v, low, high) { return remap(v, low, high, (0 | 0), (1 | 0)); }\n    exports.remap1 = remap1;\n    ;\n    var color = /** @class */ (function () {\n        function color(data) {\n        }\n        color.prototype.clone = function () {\n            return new color({});\n        };\n        color.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_57436_color\\\",\\\"fields\\\":[[\\\"slate50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\");\n        };\n        color.slate50 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.9803921568627451), __.float(0.9882352941176471), __.int(1));\n        color.slate100 = __.FM.float_4_1_1_1_1(__.float(0.9450980392156862), __.float(0.9607843137254902), __.float(0.9764705882352941), __.int(1));\n        color.slate200 = __.FM.float_4_1_1_1_1(__.float(0.8862745098039215), __.float(0.9098039215686274), __.float(0.9411764705882353), __.int(1));\n        color.slate300 = __.FM.float_4_1_1_1_1(__.float(0.796078431372549), __.float(0.8352941176470589), __.float(0.8823529411764706), __.int(1));\n        color.slate400 = __.FM.float_4_1_1_1_1(__.float(0.5803921568627451), __.float(0.6392156862745098), __.float(0.7215686274509804), __.int(1));\n        color.slate500 = __.FM.float_4_1_1_1_1(__.float(0.39215686274509803), __.float(0.4549019607843137), __.float(0.5450980392156862), __.int(1));\n        color.slate600 = __.FM.float_4_1_1_1_1(__.float(0.2784313725490196), __.float(0.3333333333333333), __.float(0.4117647058823529), __.int(1));\n        color.slate700 = __.FM.float_4_1_1_1_1(__.float(0.2), __.float(0.2549019607843137), __.float(0.3333333333333333), __.int(1));\n        color.slate800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.1607843137254902), __.float(0.23137254901960785), __.int(1));\n        color.slate900 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.09019607843137255), __.float(0.16470588235294117), __.int(1));\n        color.slate950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.023529411764705882), __.float(0.09019607843137255), __.int(1));\n        color.gray50 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.9803921568627451), __.float(0.984313725490196), __.int(1));\n        color.gray100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9568627450980393), __.float(0.9647058823529412), __.int(1));\n        color.gray200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.9058823529411765), __.float(0.9215686274509803), __.int(1));\n        color.gray300 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.8352941176470589), __.float(0.8588235294117647), __.int(1));\n        color.gray400 = __.FM.float_4_1_1_1_1(__.float(0.611764705882353), __.float(0.6392156862745098), __.float(0.6862745098039216), __.int(1));\n        color.gray500 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.4470588235294118), __.float(0.5019607843137255), __.int(1));\n        color.gray600 = __.FM.float_4_1_1_1_1(__.float(0.29411764705882354), __.float(0.3333333333333333), __.float(0.38823529411764707), __.int(1));\n        color.gray700 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.2549019607843137), __.float(0.3176470588235294), __.int(1));\n        color.gray800 = __.FM.float_4_1_1_1_1(__.float(0.12156862745098039), __.float(0.1607843137254902), __.float(0.21568627450980393), __.int(1));\n        color.gray900 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.09411764705882353), __.float(0.15294117647058825), __.int(1));\n        color.gray950 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.027450980392156862), __.float(0.07058823529411765), __.int(1));\n        color.zinc50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.zinc100 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.9568627450980393), __.float(0.9607843137254902), __.int(1));\n        color.zinc200 = __.FM.float_4_1_1_1_1(__.float(0.8941176470588236), __.float(0.8941176470588236), __.float(0.9058823529411765), __.int(1));\n        color.zinc300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8470588235294118), __.int(1));\n        color.zinc400 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.6313725490196078), __.float(0.6666666666666666), __.int(1));\n        color.zinc500 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.44313725490196076), __.float(0.47843137254901963), __.int(1));\n        color.zinc600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3568627450980392), __.int(1));\n        color.zinc700 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.24705882352941178), __.float(0.27450980392156865), __.int(1));\n        color.zinc800 = __.FM.float_4_1_1_1_1(__.float(0.15294117647058825), __.float(0.15294117647058825), __.float(0.16470588235294117), __.int(1));\n        color.zinc900 = __.FM.float_4_1_1_1_1(__.float(0.09411764705882353), __.float(0.09411764705882353), __.float(0.10588235294117647), __.int(1));\n        color.zinc950 = __.FM.float_4_1_1_1_1(__.float(0.03529411764705882), __.float(0.03529411764705882), __.float(0.043137254901960784), __.int(1));\n        color.neutral50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9803921568627451), __.int(1));\n        color.neutral100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9607843137254902), __.int(1));\n        color.neutral200 = __.FM.float_4_1_1_1_1(__.float(0.8980392156862745), __.float(0.8980392156862745), __.float(0.8980392156862745), __.int(1));\n        color.neutral300 = __.FM.float_4_1_1_1_1(__.float(0.8313725490196079), __.float(0.8313725490196079), __.float(0.8313725490196079), __.int(1));\n        color.neutral400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.6392156862745098), __.float(0.6392156862745098), __.int(1));\n        color.neutral500 = __.FM.float_4_1_1_1_1(__.float(0.45098039215686275), __.float(0.45098039215686275), __.float(0.45098039215686275), __.int(1));\n        color.neutral600 = __.FM.float_4_1_1_1_1(__.float(0.3215686274509804), __.float(0.3215686274509804), __.float(0.3215686274509804), __.int(1));\n        color.neutral700 = __.FM.float_4_1_1_1_1(__.float(0.25098039215686274), __.float(0.25098039215686274), __.float(0.25098039215686274), __.int(1));\n        color.neutral800 = __.FM.float_4_1_1_1_1(__.float(0.14901960784313725), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.neutral900 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.09019607843137255), __.float(0.09019607843137255), __.int(1));\n        color.neutral950 = __.FM.float_4_1_1_1_1(__.float(0.0392156862745098), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.stone50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9803921568627451), __.float(0.9764705882352941), __.int(1));\n        color.stone100 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9607843137254902), __.float(0.9568627450980393), __.int(1));\n        color.stone200 = __.FM.float_4_1_1_1_1(__.float(0.9058823529411765), __.float(0.8980392156862745), __.float(0.8941176470588236), __.int(1));\n        color.stone300 = __.FM.float_4_1_1_1_1(__.float(0.8392156862745098), __.float(0.8274509803921568), __.float(0.8196078431372549), __.int(1));\n        color.stone400 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.6352941176470588), __.float(0.6196078431372549), __.int(1));\n        color.stone500 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.44313725490196076), __.float(0.4235294117647059), __.int(1));\n        color.stone600 = __.FM.float_4_1_1_1_1(__.float(0.3411764705882353), __.float(0.3254901960784314), __.float(0.3058823529411765), __.int(1));\n        color.stone700 = __.FM.float_4_1_1_1_1(__.float(0.26666666666666666), __.float(0.25098039215686274), __.float(0.23529411764705882), __.int(1));\n        color.stone800 = __.FM.float_4_1_1_1_1(__.float(0.1607843137254902), __.float(0.1450980392156863), __.float(0.1411764705882353), __.int(1));\n        color.stone900 = __.FM.float_4_1_1_1_1(__.float(0.10980392156862745), __.float(0.09803921568627451), __.float(0.09019607843137255), __.int(1));\n        color.stone950 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.0392156862745098), __.float(0.03529411764705882), __.int(1));\n        color.red50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9490196078431372), __.float(0.9490196078431372), __.int(1));\n        color.red100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8862745098039215), __.float(0.8862745098039215), __.int(1));\n        color.red200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.792156862745098), __.float(0.792156862745098), __.int(1));\n        color.red300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.6470588235294118), __.float(0.6470588235294118), __.int(1));\n        color.red400 = __.FM.float_4_1_1_1_1(__.float(0.9725490196078431), __.float(0.44313725490196076), __.float(0.44313725490196076), __.int(1));\n        color.red500 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.26666666666666666), __.float(0.26666666666666666), __.int(1));\n        color.red600 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.14901960784313725), __.float(0.14901960784313725), __.int(1));\n        color.red700 = __.FM.float_4_1_1_1_1(__.float(0.7254901960784313), __.float(0.10980392156862745), __.float(0.10980392156862745), __.int(1));\n        color.red800 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.10588235294117647), __.float(0.10588235294117647), __.int(1));\n        color.red900 = __.FM.float_4_1_1_1_1(__.float(0.4980392156862745), __.float(0.11372549019607843), __.float(0.11372549019607843), __.int(1));\n        color.red950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.0392156862745098), __.float(0.0392156862745098), __.int(1));\n        color.orange50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9686274509803922), __.float(0.9294117647058824), __.int(1));\n        color.orange100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9294117647058824), __.float(0.8352941176470589), __.int(1));\n        color.orange200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.8431372549019608), __.float(0.6666666666666666), __.int(1));\n        color.orange300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.7294117647058823), __.float(0.4549019607843137), __.int(1));\n        color.orange400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.5725490196078431), __.float(0.23529411764705882), __.int(1));\n        color.orange500 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.45098039215686275), __.float(0.08627450980392157), __.int(1));\n        color.orange600 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.34509803921568627), __.float(0.047058823529411764), __.int(1));\n        color.orange700 = __.FM.float_4_1_1_1_1(__.float(0.7607843137254902), __.float(0.2549019607843137), __.float(0.047058823529411764), __.int(1));\n        color.orange800 = __.FM.float_4_1_1_1_1(__.float(0.6039215686274509), __.float(0.20392156862745098), __.float(0.07058823529411765), __.int(1));\n        color.orange900 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.17647058823529413), __.float(0.07058823529411765), __.int(1));\n        color.orange950 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.0784313725490196), __.float(0.027450980392156862), __.int(1));\n        color.amber50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.984313725490196), __.float(0.9215686274509803), __.int(1));\n        color.amber100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9529411764705882), __.float(0.7803921568627451), __.int(1));\n        color.amber200 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9019607843137255), __.float(0.5411764705882353), __.int(1));\n        color.amber300 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.8274509803921568), __.float(0.30196078431372547), __.int(1));\n        color.amber400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.7490196078431373), __.float(0.1411764705882353), __.int(1));\n        color.amber500 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.6196078431372549), __.float(0.043137254901960784), __.int(1));\n        color.amber600 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.4666666666666667), __.float(0.023529411764705882), __.int(1));\n        color.amber700 = __.FM.float_4_1_1_1_1(__.float(0.7058823529411765), __.float(0.3254901960784314), __.float(0.03529411764705882), __.int(1));\n        color.amber800 = __.FM.float_4_1_1_1_1(__.float(0.5725490196078431), __.float(0.25098039215686274), __.float(0.054901960784313725), __.int(1));\n        color.amber900 = __.FM.float_4_1_1_1_1(__.float(0.47058823529411764), __.float(0.20784313725490197), __.float(0.058823529411764705), __.int(1));\n        color.amber950 = __.FM.float_4_1_1_1_1(__.float(0.27058823529411763), __.float(0.10196078431372549), __.float(0.011764705882352941), __.int(1));\n        color.yellow50 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9882352941176471), __.float(0.9098039215686274), __.int(1));\n        color.yellow100 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9764705882352941), __.float(0.7647058823529411), __.int(1));\n        color.yellow200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.9411764705882353), __.float(0.5411764705882353), __.int(1));\n        color.yellow300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.8784313725490196), __.float(0.2784313725490196), __.int(1));\n        color.yellow400 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.8), __.float(0.08235294117647059), __.int(1));\n        color.yellow500 = __.FM.float_4_1_1_1_1(__.float(0.9176470588235294), __.float(0.7019607843137254), __.float(0.03137254901960784), __.int(1));\n        color.yellow600 = __.FM.float_4_1_1_1_1(__.float(0.792156862745098), __.float(0.5411764705882353), __.float(0.01568627450980392), __.int(1));\n        color.yellow700 = __.FM.float_4_1_1_1_1(__.float(0.6313725490196078), __.float(0.3843137254901961), __.float(0.027450980392156862), __.int(1));\n        color.yellow800 = __.FM.float_4_1_1_1_1(__.float(0.5215686274509804), __.float(0.30196078431372547), __.float(0.054901960784313725), __.int(1));\n        color.yellow900 = __.FM.float_4_1_1_1_1(__.float(0.44313725490196076), __.float(0.24705882352941178), __.float(0.07058823529411765), __.int(1));\n        color.yellow950 = __.FM.float_4_1_1_1_1(__.float(0.25882352941176473), __.float(0.12549019607843137), __.float(0.023529411764705882), __.int(1));\n        color.lime50 = __.FM.float_4_1_1_1_1(__.float(0.9686274509803922), __.float(0.996078431372549), __.float(0.9058823529411765), __.int(1));\n        color.lime100 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9882352941176471), __.float(0.796078431372549), __.int(1));\n        color.lime200 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.9764705882352941), __.float(0.615686274509804), __.int(1));\n        color.lime300 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.9490196078431372), __.float(0.39215686274509803), __.int(1));\n        color.lime400 = __.FM.float_4_1_1_1_1(__.float(0.6392156862745098), __.float(0.9019607843137255), __.float(0.20784313725490197), __.int(1));\n        color.lime500 = __.FM.float_4_1_1_1_1(__.float(0.5176470588235295), __.float(0.8), __.float(0.08627450980392157), __.int(1));\n        color.lime600 = __.FM.float_4_1_1_1_1(__.float(0.396078431372549), __.float(0.6392156862745098), __.float(0.050980392156862744), __.int(1));\n        color.lime700 = __.FM.float_4_1_1_1_1(__.float(0.30196078431372547), __.float(0.48627450980392156), __.float(0.058823529411764705), __.int(1));\n        color.lime800 = __.FM.float_4_1_1_1_1(__.float(0.24705882352941178), __.float(0.3843137254901961), __.float(0.07058823529411765), __.int(1));\n        color.lime900 = __.FM.float_4_1_1_1_1(__.float(0.21176470588235294), __.float(0.3254901960784314), __.float(0.0784313725490196), __.int(1));\n        color.lime950 = __.FM.float_4_1_1_1_1(__.float(0.10196078431372549), __.float(0.1803921568627451), __.float(0.0196078431372549), __.int(1));\n        color.green50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1));\n        color.green100 = __.FM.float_4_1_1_1_1(__.float(0.8627450980392157), __.float(0.9882352941176471), __.float(0.9058823529411765), __.int(1));\n        color.green200 = __.FM.float_4_1_1_1_1(__.float(0.7333333333333333), __.float(0.9686274509803922), __.float(0.8156862745098039), __.int(1));\n        color.green300 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.9372549019607843), __.float(0.6745098039215687), __.int(1));\n        color.green400 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.8705882352941177), __.float(0.5019607843137255), __.int(1));\n        color.green500 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.7725490196078432), __.float(0.3686274509803922), __.int(1));\n        color.green600 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.6392156862745098), __.float(0.2901960784313726), __.int(1));\n        color.green700 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.5019607843137255), __.float(0.23921568627450981), __.int(1));\n        color.green800 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.396078431372549), __.float(0.20392156862745098), __.int(1));\n        color.green900 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.3254901960784314), __.float(0.17647058823529413), __.int(1));\n        color.green950 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.1803921568627451), __.float(0.08627450980392157), __.int(1));\n        color.emerald50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.9921568627450981), __.float(0.9607843137254902), __.int(1));\n        color.emerald100 = __.FM.float_4_1_1_1_1(__.float(0.8196078431372549), __.float(0.9803921568627451), __.float(0.8980392156862745), __.int(1));\n        color.emerald200 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.9529411764705882), __.float(0.8156862745098039), __.int(1));\n        color.emerald300 = __.FM.float_4_1_1_1_1(__.float(0.43137254901960786), __.float(0.9058823529411765), __.float(0.7176470588235294), __.int(1));\n        color.emerald400 = __.FM.float_4_1_1_1_1(__.float(0.20392156862745098), __.float(0.8274509803921568), __.float(0.6), __.int(1));\n        color.emerald500 = __.FM.float_4_1_1_1_1(__.float(0.06274509803921569), __.float(0.7254901960784313), __.float(0.5058823529411764), __.int(1));\n        color.emerald600 = __.FM.float_4_1_1_1_1(__.float(0.0196078431372549), __.float(0.5882352941176471), __.float(0.4117647058823529), __.int(1));\n        color.emerald700 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.47058823529411764), __.float(0.3411764705882353), __.int(1));\n        color.emerald800 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.37254901960784315), __.float(0.27450980392156865), __.int(1));\n        color.emerald900 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.3058823529411765), __.float(0.23137254901960785), __.int(1));\n        color.emerald950 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.17254901960784313), __.float(0.13333333333333333), __.int(1));\n        color.teal50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9921568627450981), __.float(0.9803921568627451), __.int(1));\n        color.teal100 = __.FM.float_4_1_1_1_1(__.float(0.8), __.float(0.984313725490196), __.float(0.9450980392156862), __.int(1));\n        color.teal200 = __.FM.float_4_1_1_1_1(__.float(0.6), __.float(0.9647058823529412), __.float(0.8941176470588236), __.int(1));\n        color.teal300 = __.FM.float_4_1_1_1_1(__.float(0.3686274509803922), __.float(0.9176470588235294), __.float(0.8313725490196079), __.int(1));\n        color.teal400 = __.FM.float_4_1_1_1_1(__.float(0.17647058823529413), __.float(0.8313725490196079), __.float(0.7490196078431373), __.int(1));\n        color.teal500 = __.FM.float_4_1_1_1_1(__.float(0.0784313725490196), __.float(0.7215686274509804), __.float(0.6509803921568628), __.int(1));\n        color.teal600 = __.FM.float_4_1_1_1_1(__.float(0.050980392156862744), __.float(0.5803921568627451), __.float(0.5333333333333333), __.int(1));\n        color.teal700 = __.FM.float_4_1_1_1_1(__.float(0.058823529411764705), __.float(0.4627450980392157), __.float(0.43137254901960786), __.int(1));\n        color.teal800 = __.FM.float_4_1_1_1_1(__.float(0.06666666666666667), __.float(0.3686274509803922), __.float(0.34901960784313724), __.int(1));\n        color.teal900 = __.FM.float_4_1_1_1_1(__.float(0.07450980392156863), __.float(0.3058823529411765), __.float(0.2901960784313726), __.int(1));\n        color.teal950 = __.FM.float_4_1_1_1_1(__.float(0.01568627450980392), __.float(0.1843137254901961), __.float(0.1803921568627451), __.int(1));\n        color.cyan50 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.996078431372549), __.int(1), __.int(1));\n        color.cyan100 = __.FM.float_4_1_1_1_1(__.float(0.8117647058823529), __.float(0.9803921568627451), __.float(0.996078431372549), __.int(1));\n        color.cyan200 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.9529411764705882), __.float(0.9882352941176471), __.int(1));\n        color.cyan300 = __.FM.float_4_1_1_1_1(__.float(0.403921568627451), __.float(0.9098039215686274), __.float(0.9764705882352941), __.int(1));\n        color.cyan400 = __.FM.float_4_1_1_1_1(__.float(0.13333333333333333), __.float(0.8274509803921568), __.float(0.9333333333333333), __.int(1));\n        color.cyan500 = __.FM.float_4_1_1_1_1(__.float(0.023529411764705882), __.float(0.7137254901960784), __.float(0.8313725490196079), __.int(1));\n        color.cyan600 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.5686274509803921), __.float(0.6980392156862745), __.int(1));\n        color.cyan700 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.4549019607843137), __.float(0.5647058823529412), __.int(1));\n        color.cyan800 = __.FM.float_4_1_1_1_1(__.float(0.08235294117647059), __.float(0.3686274509803922), __.float(0.4588235294117647), __.int(1));\n        color.cyan900 = __.FM.float_4_1_1_1_1(__.float(0.08627450980392157), __.float(0.3058823529411765), __.float(0.38823529411764707), __.int(1));\n        color.cyan950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.2), __.float(0.26666666666666666), __.int(1));\n        color.sky50 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.9764705882352941), __.int(1), __.int(1));\n        color.sky100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9490196078431372), __.float(0.996078431372549), __.int(1));\n        color.sky200 = __.FM.float_4_1_1_1_1(__.float(0.7294117647058823), __.float(0.9019607843137255), __.float(0.9921568627450981), __.int(1));\n        color.sky300 = __.FM.float_4_1_1_1_1(__.float(0.49019607843137253), __.float(0.8274509803921568), __.float(0.9882352941176471), __.int(1));\n        color.sky400 = __.FM.float_4_1_1_1_1(__.float(0.2196078431372549), __.float(0.7411764705882353), __.float(0.9725490196078431), __.int(1));\n        color.sky500 = __.FM.float_4_1_1_1_1(__.float(0.054901960784313725), __.float(0.6470588235294118), __.float(0.9137254901960784), __.int(1));\n        color.sky600 = __.FM.float_4_1_1_1_1(__.float(0.00784313725490196), __.float(0.5176470588235295), __.float(0.7803921568627451), __.int(1));\n        color.sky700 = __.FM.float_4_1_1_1_1(__.float(0.011764705882352941), __.float(0.4117647058823529), __.float(0.6313725490196078), __.int(1));\n        color.sky800 = __.FM.float_4_1_1_1_1(__.float(0.027450980392156862), __.float(0.34901960784313724), __.float(0.5215686274509804), __.int(1));\n        color.sky900 = __.FM.float_4_1_1_1_1(__.float(0.047058823529411764), __.float(0.2901960784313726), __.float(0.43137254901960786), __.int(1));\n        color.sky950 = __.FM.float_4_1_1_1_1(__.float(0.03137254901960784), __.float(0.1843137254901961), __.float(0.28627450980392155), __.int(1));\n        color.blue50 = __.FM.float_4_1_1_1_1(__.float(0.9372549019607843), __.float(0.9647058823529412), __.int(1), __.int(1));\n        color.blue100 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.9176470588235294), __.float(0.996078431372549), __.int(1));\n        color.blue200 = __.FM.float_4_1_1_1_1(__.float(0.7490196078431373), __.float(0.8588235294117647), __.float(0.996078431372549), __.int(1));\n        color.blue300 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.7725490196078432), __.float(0.9921568627450981), __.int(1));\n        color.blue400 = __.FM.float_4_1_1_1_1(__.float(0.3764705882352941), __.float(0.6470588235294118), __.float(0.9803921568627451), __.int(1));\n        color.blue500 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.5098039215686274), __.float(0.9647058823529412), __.int(1));\n        color.blue600 = __.FM.float_4_1_1_1_1(__.float(0.1450980392156863), __.float(0.38823529411764707), __.float(0.9215686274509803), __.int(1));\n        color.blue700 = __.FM.float_4_1_1_1_1(__.float(0.11372549019607843), __.float(0.3058823529411765), __.float(0.8470588235294118), __.int(1));\n        color.blue800 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.25098039215686274), __.float(0.6862745098039216), __.int(1));\n        color.blue900 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.22745098039215686), __.float(0.5411764705882353), __.int(1));\n        color.blue950 = __.FM.float_4_1_1_1_1(__.float(0.09019607843137255), __.float(0.1450980392156863), __.float(0.32941176470588235), __.int(1));\n        color.indigo50 = __.FM.float_4_1_1_1_1(__.float(0.9333333333333333), __.float(0.9490196078431372), __.int(1), __.int(1));\n        color.indigo100 = __.FM.float_4_1_1_1_1(__.float(0.8784313725490196), __.float(0.9058823529411765), __.int(1), __.int(1));\n        color.indigo200 = __.FM.float_4_1_1_1_1(__.float(0.7803921568627451), __.float(0.8235294117647058), __.float(0.996078431372549), __.int(1));\n        color.indigo300 = __.FM.float_4_1_1_1_1(__.float(0.6470588235294118), __.float(0.7058823529411765), __.float(0.9882352941176471), __.int(1));\n        color.indigo400 = __.FM.float_4_1_1_1_1(__.float(0.5058823529411764), __.float(0.5490196078431373), __.float(0.9725490196078431), __.int(1));\n        color.indigo500 = __.FM.float_4_1_1_1_1(__.float(0.38823529411764707), __.float(0.4), __.float(0.9450980392156862), __.int(1));\n        color.indigo600 = __.FM.float_4_1_1_1_1(__.float(0.30980392156862746), __.float(0.27450980392156865), __.float(0.8980392156862745), __.int(1));\n        color.indigo700 = __.FM.float_4_1_1_1_1(__.float(0.2627450980392157), __.float(0.2196078431372549), __.float(0.792156862745098), __.int(1));\n        color.indigo800 = __.FM.float_4_1_1_1_1(__.float(0.21568627450980393), __.float(0.18823529411764706), __.float(0.6392156862745098), __.int(1));\n        color.indigo900 = __.FM.float_4_1_1_1_1(__.float(0.19215686274509805), __.float(0.1803921568627451), __.float(0.5058823529411764), __.int(1));\n        color.indigo950 = __.FM.float_4_1_1_1_1(__.float(0.11764705882352941), __.float(0.10588235294117647), __.float(0.29411764705882354), __.int(1));\n        color.violet50 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.9529411764705882), __.int(1), __.int(1));\n        color.violet100 = __.FM.float_4_1_1_1_1(__.float(0.9294117647058824), __.float(0.9137254901960784), __.float(0.996078431372549), __.int(1));\n        color.violet200 = __.FM.float_4_1_1_1_1(__.float(0.8666666666666667), __.float(0.8392156862745098), __.float(0.996078431372549), __.int(1));\n        color.violet300 = __.FM.float_4_1_1_1_1(__.float(0.7686274509803922), __.float(0.7098039215686275), __.float(0.9921568627450981), __.int(1));\n        color.violet400 = __.FM.float_4_1_1_1_1(__.float(0.6549019607843137), __.float(0.5450980392156862), __.float(0.9803921568627451), __.int(1));\n        color.violet500 = __.FM.float_4_1_1_1_1(__.float(0.5450980392156862), __.float(0.3607843137254902), __.float(0.9647058823529412), __.int(1));\n        color.violet600 = __.FM.float_4_1_1_1_1(__.float(0.48627450980392156), __.float(0.22745098039215686), __.float(0.9294117647058824), __.int(1));\n        color.violet700 = __.FM.float_4_1_1_1_1(__.float(0.42745098039215684), __.float(0.1568627450980392), __.float(0.8509803921568627), __.int(1));\n        color.violet800 = __.FM.float_4_1_1_1_1(__.float(0.3568627450980392), __.float(0.12941176470588237), __.float(0.7137254901960784), __.int(1));\n        color.violet900 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.11372549019607843), __.float(0.5843137254901961), __.int(1));\n        color.violet950 = __.FM.float_4_1_1_1_1(__.float(0.1803921568627451), __.float(0.06274509803921569), __.float(0.396078431372549), __.int(1));\n        color.purple50 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9607843137254902), __.int(1), __.int(1));\n        color.purple100 = __.FM.float_4_1_1_1_1(__.float(0.9529411764705882), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.purple200 = __.FM.float_4_1_1_1_1(__.float(0.9137254901960784), __.float(0.8352941176470589), __.int(1), __.int(1));\n        color.purple300 = __.FM.float_4_1_1_1_1(__.float(0.8470588235294118), __.float(0.7058823529411765), __.float(0.996078431372549), __.int(1));\n        color.purple400 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.5176470588235295), __.float(0.9882352941176471), __.int(1));\n        color.purple500 = __.FM.float_4_1_1_1_1(__.float(0.6588235294117647), __.float(0.3333333333333333), __.float(0.9686274509803922), __.int(1));\n        color.purple600 = __.FM.float_4_1_1_1_1(__.float(0.5764705882352941), __.float(0.2), __.float(0.9176470588235294), __.int(1));\n        color.purple700 = __.FM.float_4_1_1_1_1(__.float(0.49411764705882355), __.float(0.13333333333333333), __.float(0.807843137254902), __.int(1));\n        color.purple800 = __.FM.float_4_1_1_1_1(__.float(0.4196078431372549), __.float(0.12941176470588237), __.float(0.6588235294117647), __.int(1));\n        color.purple900 = __.FM.float_4_1_1_1_1(__.float(0.34509803921568627), __.float(0.10980392156862745), __.float(0.5294117647058824), __.int(1));\n        color.purple950 = __.FM.float_4_1_1_1_1(__.float(0.23137254901960785), __.float(0.027450980392156862), __.float(0.39215686274509803), __.int(1));\n        color.fuchsia50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9568627450980393), __.int(1), __.int(1));\n        color.fuchsia100 = __.FM.float_4_1_1_1_1(__.float(0.9803921568627451), __.float(0.9098039215686274), __.int(1), __.int(1));\n        color.fuchsia200 = __.FM.float_4_1_1_1_1(__.float(0.9607843137254902), __.float(0.8156862745098039), __.float(0.996078431372549), __.int(1));\n        color.fuchsia300 = __.FM.float_4_1_1_1_1(__.float(0.9411764705882353), __.float(0.6705882352941176), __.float(0.9882352941176471), __.int(1));\n        color.fuchsia400 = __.FM.float_4_1_1_1_1(__.float(0.9098039215686274), __.float(0.4745098039215686), __.float(0.9764705882352941), __.int(1));\n        color.fuchsia500 = __.FM.float_4_1_1_1_1(__.float(0.8509803921568627), __.float(0.27450980392156865), __.float(0.9372549019607843), __.int(1));\n        color.fuchsia600 = __.FM.float_4_1_1_1_1(__.float(0.7529411764705882), __.float(0.14901960784313725), __.float(0.8274509803921568), __.int(1));\n        color.fuchsia700 = __.FM.float_4_1_1_1_1(__.float(0.6352941176470588), __.float(0.10980392156862745), __.float(0.6862745098039216), __.int(1));\n        color.fuchsia800 = __.FM.float_4_1_1_1_1(__.float(0.5254901960784314), __.float(0.09803921568627451), __.float(0.5607843137254902), __.int(1));\n        color.fuchsia900 = __.FM.float_4_1_1_1_1(__.float(0.4392156862745098), __.float(0.10196078431372549), __.float(0.4588235294117647), __.int(1));\n        color.fuchsia950 = __.FM.float_4_1_1_1_1(__.float(0.2901960784313726), __.float(0.01568627450980392), __.float(0.3058823529411765), __.int(1));\n        color.pink50 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.9490196078431372), __.float(0.9725490196078431), __.int(1));\n        color.pink100 = __.FM.float_4_1_1_1_1(__.float(0.9882352941176471), __.float(0.9058823529411765), __.float(0.9529411764705882), __.int(1));\n        color.pink200 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.8117647058823529), __.float(0.9098039215686274), __.int(1));\n        color.pink300 = __.FM.float_4_1_1_1_1(__.float(0.9764705882352941), __.float(0.6588235294117647), __.float(0.8313725490196079), __.int(1));\n        color.pink400 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.4470588235294118), __.float(0.7137254901960784), __.int(1));\n        color.pink500 = __.FM.float_4_1_1_1_1(__.float(0.9254901960784314), __.float(0.2823529411764706), __.float(0.6), __.int(1));\n        color.pink600 = __.FM.float_4_1_1_1_1(__.float(0.8588235294117647), __.float(0.15294117647058825), __.float(0.4666666666666667), __.int(1));\n        color.pink700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.09411764705882353), __.float(0.36470588235294116), __.int(1));\n        color.pink800 = __.FM.float_4_1_1_1_1(__.float(0.615686274509804), __.float(0.09019607843137255), __.float(0.30196078431372547), __.int(1));\n        color.pink900 = __.FM.float_4_1_1_1_1(__.float(0.5137254901960784), __.float(0.09411764705882353), __.float(0.2627450980392157), __.int(1));\n        color.pink950 = __.FM.float_4_1_1_1_1(__.float(0.3137254901960784), __.float(0.027450980392156862), __.float(0.1411764705882353), __.int(1));\n        color.rose50 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.9450980392156862), __.float(0.9490196078431372), __.int(1));\n        color.rose100 = __.FM.float_4_1_1_1_1(__.int(1), __.float(0.8941176470588236), __.float(0.9019607843137255), __.int(1));\n        color.rose200 = __.FM.float_4_1_1_1_1(__.float(0.996078431372549), __.float(0.803921568627451), __.float(0.8274509803921568), __.int(1));\n        color.rose300 = __.FM.float_4_1_1_1_1(__.float(0.9921568627450981), __.float(0.6431372549019608), __.float(0.6862745098039216), __.int(1));\n        color.rose400 = __.FM.float_4_1_1_1_1(__.float(0.984313725490196), __.float(0.44313725490196076), __.float(0.5215686274509804), __.int(1));\n        color.rose500 = __.FM.float_4_1_1_1_1(__.float(0.9568627450980393), __.float(0.24705882352941178), __.float(0.3686274509803922), __.int(1));\n        color.rose600 = __.FM.float_4_1_1_1_1(__.float(0.8823529411764706), __.float(0.11372549019607843), __.float(0.2823529411764706), __.int(1));\n        color.rose700 = __.FM.float_4_1_1_1_1(__.float(0.7450980392156863), __.float(0.07058823529411765), __.float(0.23529411764705882), __.int(1));\n        color.rose800 = __.FM.float_4_1_1_1_1(__.float(0.6235294117647059), __.float(0.07058823529411765), __.float(0.2235294117647059), __.int(1));\n        color.rose900 = __.FM.float_4_1_1_1_1(__.float(0.5333333333333333), __.float(0.07450980392156863), __.float(0.21568627450980393), __.int(1));\n        color.rose950 = __.FM.float_4_1_1_1_1(__.float(0.2980392156862745), __.float(0.0196078431372549), __.float(0.09803921568627451), __.int(1));\n        return color;\n    }());\n    exports.color = color;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_common_ts_57436_color\\\",\\\"fields\\\":[[\\\"slate50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"slate950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"gray950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"zinc950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"neutral950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"stone950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"red950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"orange950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"amber950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"yellow950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"lime950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"green950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"emerald950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"teal950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"cyan950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"sky950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"blue950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"indigo950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"violet950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"purple950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"fuchsia950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"pink950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose50\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose100\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose200\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose300\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose400\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose500\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose600\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose700\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose800\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose900\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}],[\\\"rose950\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float4\\\"}]]}\"), color)\n    ;\n    function wrap2(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high)); }\n    exports.wrap2 = wrap2;\n    ;\n    function wrap3(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high)); }\n    exports.wrap3 = wrap3;\n    ;\n    function wrap4(value, low, high) { return __.makeVector((0, std_math_1.wrap)(value[0], low, high), (0, std_math_1.wrap)(value[1], low, high), (0, std_math_1.wrap)(value[2], low, high), (0, std_math_1.wrap)(value[3], low, high)); }\n    exports.wrap4 = wrap4;\n    ;\n});\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/sdf.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std_math_1, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.sdf = void 0;\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var sdf = /** @class */ (function () {\n        function sdf(data) {\n        }\n        sdf.sphere = function (samplePosition, sphereCenter, radius) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.box = function (samplePosition, boxCenter, boxSize) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0);\n        };\n        sdf.roundBox = function (samplePosition, boxCenter, boxSize, cornerRadius) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = boxSize;\n            var r = cornerRadius;\n            var q = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = s, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            return (0, std_math_1.length)((0, std_math_1.max)(q, 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], q[2])), 0.0) - r;\n        };\n        sdf.boxFrame = function (samplePosition, boxCenter, boxSize, frameThickness) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = (_a = samplePosition, _b = boxCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var b = boxSize;\n            var e = frameThickness;\n            p = (_c = (_e = p, [Math.abs(_e[0]), Math.abs(_e[1]), Math.abs(_e[2])]), _d = b, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var q = (_f = (_h = (_j = p, _k = e, [_j[0] + _k, _j[1] + _k, _j[2] + _k]), [Math.abs(_h[0]), Math.abs(_h[1]), Math.abs(_h[2])]), _g = e, [_f[0] - _g, _f[1] - _g, _f[2] - _g]);\n            return (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(p, 'x'), __.swizzle(q, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(p[0], (0, std_math_1.max)(q[1], q[2])), 0.0), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(p, 'y'), __.swizzle(q, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(p[1], q[2])), 0.0)), (0, std_math_1.length)((0, std_math_1.max)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.swizzle(q, 'y'), __.swizzle(p, 'z')), 0.0)) + (0, std_math_1.min)((0, std_math_1.max)(q[0], (0, std_math_1.max)(q[1], p[2])), 0.0));\n        };\n        sdf.torus = function (samplePosition, torusCenter, torusSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var t = torusSize;\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), t[0]), __.swizzle(p, 'y'));\n            return (0, std_math_1.length)(q) - t[1];\n        };\n        sdf.cappedTorus = function (samplePosition, torusCenter, torusSize, ra, rb) {\n            var _a, _b, _c, _d, _e;\n            var p1 = (_a = samplePosition, _b = torusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var p = __.makeVector(Math.abs(p1[0]), (_c = p1, [_c[1], _c[2]]));\n            var sc = torusSize;\n            var k = (sc[1] * p[0] > sc[0] * p[1]) ? (0, std_math_1.dot)((_d = p, [_d[0], _d[1]]), sc) : (0, std_math_1.length)((_e = p, [_e[0], _e[1]]));\n            return Math.sqrt((0, std_math_1.dot)(p, p) + ra * ra - 2.0 * ra * k) - rb;\n        };\n        sdf.link = function (samplePosition, linkCenter, linkLength, r1, r2) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = linkCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var le = linkLength;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'x'), (0, std_math_1.max)(Math.abs(p[1]) - le, 0.0), __.swizzle(p, 'z'));\n            return (0, std_math_1.length)(__.FM.float_2_1_1(__.sub((0, std_math_1.length)((_c = q, [_c[0], _c[1]])), r1), __.swizzle(q, 'z'))) - r2;\n        };\n        sdf.infinteCylinder = function (samplePosition, cylinderCenter, cylinderSize) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = cylinderSize;\n            return (0, std_math_1.length)((_c = (_e = p, [_e[0], _e[2]]), _d = (_f = c, [_f[0], _f[1]]), [_c[0] - _d[0], _c[1] - _d[1]])) - c[2];\n        };\n        sdf.cone = function (samplePosition, coneCenter, c, coneHeight) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = coneHeight;\n            // c is the sin/cos of the angle, h is height\n            // Alternatively pass q instead of (c,h),\n            // which is the point at the base in 2D\n            var q = (_c = h, _d = __.FM.float_2_1_1(__.div(c[0], c[1]), __.negate(1.0)), [_c * _d[0], _c * _d[1]]);\n            var w = __.FM.float_2_1_1((0, std_math_1.length)((_e = p, [_e[0], _e[2]])), __.swizzle(p, 'y'));\n            var a = (_f = w, _g = (_h = q, _j = (0, std_math_1.clamp)((0, std_math_1.dot)(w, q) / (0, std_math_1.dot)(q, q), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_f[0] - _g[0], _f[1] - _g[1]]);\n            var b = (_k = w, _l = (_m = q, _o = __.FM.float_2_1_1((0, std_math_1.clamp)(w[0] / q[0], 0.0, 1.0), __.float(1.0)), [_m[0] * _o[0], _m[1] * _o[1]]), [_k[0] - _l[0], _k[1] - _l[1]]);\n            var k = Math.sign(q[1]);\n            var d = (0, std_math_1.min)((0, std_math_1.dot)(a, a), (0, std_math_1.dot)(b, b));\n            var s = (0, std_math_1.max)(k * (w[0] * q[1] - w[1] * q[0]), k * (w[1] - q[1]));\n            return Math.sqrt(d) * Math.sign(s);\n        };\n        sdf.plane = function (samplePosition, planeCenter, planeNormal, planeHeight) {\n            var _a, _b;\n            var p = (_a = samplePosition, _b = planeCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var n = planeNormal;\n            var h = planeHeight;\n            // n must be normalized\n            return (0, std_math_1.dot)(p, n) + h;\n        };\n        sdf.hexPrism = function (samplePosition, hexCenter, hexSize) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = hexCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = hexSize;\n            var k = __.FM.float_3_1_1_1(__.negate(0.8660254), __.float(0.5), __.float(0.57735));\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var dddd = (0, std_math_1.min)((0, std_math_1.dot)((_d = k, [_d[0], _d[1]]), (_e = p, [_e[0], _e[1]])), 0.0) * 2.0;\n            p = (_f = p, _g = __.FM.float_3_2_1(__.mul(dddd, (_h = k, [_h[0], _h[1]])), __.float(0.0)), [_f[0] - _g[0], _f[1] - _g[1], _f[2] - _g[2]]);\n            var d = __.FM.float_2_1_1(__.mul((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[1]]), _k = __.FM.float_2_1_1((0, std_math_1.clamp)(p[0], (__.FM.negate_1(k[2])) * h[0], k[2] * h[0]), __.swizzle(h, 'x')), [_j[0] - _k[0], _j[1] - _k[1]])), Math.sign(p[1] - h[0])), __.sub(p[2], h[1]));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.triPrism = function (samplePosition, triCenter, triSize) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = triCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = triSize;\n            var q = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            return (0, std_math_1.max)(q[2] - h[1], (0, std_math_1.max)(q[0] * 0.866025 + p[1] * 0.5, (__.FM.negate_1(p[1]))) - h[0] * 0.5);\n        };\n        sdf.capsuleLine = function (samplePosition, lineStart, lineEnd, capsuleRadius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = capsuleRadius;\n            var pa = (_a = p, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var ba = (_c = b, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var h = (0, std_math_1.clamp)((0, std_math_1.dot)(pa, ba) / (0, std_math_1.dot)(ba, ba), 0.0, 1.0);\n            return (0, std_math_1.length)((_e = pa, _f = (_g = ba, _h = h, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r;\n        };\n        sdf.capsule = function (samplePosition, capsuleCenter, height, radius) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = capsuleCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var p = __.makeVector(p1[0], p1[1] - (0, std_math_1.clamp)(p1[1], 0.0, h), p1[2]);\n            return (0, std_math_1.length)(p) - r;\n        };\n        sdf.cylinder = function (samplePosition, cylinderCenter, height, radius) {\n            var _a, _b, _c, _d, _e, _f;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            var d = (_c = (_e = __.FM.float_2_1_1((0, std_math_1.length)((_f = p, [_f[0], _f[2]])), __.swizzle(p, 'y')), [Math.abs(_e[0]), Math.abs(_e[1])]), _d = __.FM.float_2_1_1(r, h), [_c[0] - _d[0], _c[1] - _d[1]]);\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0));\n        };\n        sdf.cylinderLine = function (samplePosition, lineStart, lineEnd, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            var p = samplePosition;\n            var a = lineStart;\n            var b = lineEnd;\n            var r = radius;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var baba = (0, std_math_1.dot)(ba, ba);\n            var paba = (0, std_math_1.dot)(pa, ba);\n            var x = (0, std_math_1.length)((_e = (_g = pa, _h = baba, [_g[0] * _h, _g[1] * _h, _g[2] * _h]), _f = (_j = ba, _k = paba, [_j[0] * _k, _j[1] * _k, _j[2] * _k]), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]])) - r * baba;\n            var y = Math.abs(paba - baba * 0.5) - baba * 0.5;\n            var x2 = x * x;\n            var y2 = y * y * baba;\n            var mxxy = (0, std_math_1.max)(x, y);\n            var d = (mxxy < 0.0) ? (__.FM.negate_1((0, std_math_1.min)(x2, y2))) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0));\n            return Math.sign(d) * Math.sqrt(Math.abs(d)) / baba;\n        };\n        sdf.roundedCylinder = function (samplePosition, cylinderCenter, cylinderRadius, cornerRadius, height) {\n            var _a, _b, _c;\n            var p = (_a = samplePosition, _b = cylinderCenter, [_a[0] - _b, _a[1] - _b, _a[2] - _b]);\n            var h = height;\n            var ra = cylinderRadius;\n            var rb = cornerRadius;\n            var d = __.FM.float_2_1_1(__.add((0, std_math_1.length)((_c = p, [_c[0], _c[2]])) - 2.0 * ra, rb), __.sub(Math.abs(p[1]), h));\n            return (0, std_math_1.min)((0, std_math_1.max)(d[0], d[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(d, 0.0)) - rb;\n        };\n        sdf.cappedCone = function (samplePosition, coneCenter, height, r1, r2) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k1 = __.FM.float_2_1_1(r2, h);\n            var k2 = __.FM.float_2_1_1(__.sub(r2, r1), __.mul(2.0, h));\n            var ca = __.FM.float_2_1_1(__.sub(q[0], (0, std_math_1.min)(q[0], (q[1] < 0.0) ? r1 : r2)), __.sub(Math.abs(q[1]), h));\n            var cb = (_d = (_f = q, _g = k1, [_f[0] - _g[0], _f[1] - _g[1]]), _e = (_h = k2, _j = (0, std_math_1.clamp)((0, std_math_1.dot)((_k = k1, _l = q, [_k[0] - _l[0], _k[1] - _l[1]]), k2) / dot2(k2), 0.0, 1.0), [_h[0] * _j, _h[1] * _j]), [_d[0] + _e[0], _d[1] + _e[1]]);\n            var s = (__.and(cb[0] < 0.0, ca[1] < 0.0)) ? (__.FM.negate_1(1.0)) : 1.0;\n            return s * Math.sqrt((0, std_math_1.min)(dot2(ca), dot2(cb)));\n        };\n        sdf.solidAngle = function (samplePosition, solidCenter, size, radius) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = solidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var c = size;\n            var ra = radius;\n            // c is the sin/cos of the angle\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var l = (0, std_math_1.length)(q) - ra;\n            var m = (0, std_math_1.length)((_d = q, _e = (_f = c, _g = (0, std_math_1.clamp)((0, std_math_1.dot)(q, c), 0.0, ra), [_f[0] * _g, _f[1] * _g]), [_d[0] - _e[0], _d[1] - _e[1]]));\n            return (0, std_math_1.max)(l, m * Math.sign(c[1] * q[0] - c[0] * q[1]));\n        };\n        sdf.cutSphere = function (samplePosition, sphereCenter, radius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r = radius;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var s = (0, std_math_1.max)((h - r) * q[0] * q[0] + w * w * (h + r - 2.0 * q[1]), h * q[0] - w * q[1]);\n            return (s < 0.0) ? (0, std_math_1.length)(q) - r : (q[0] < w) ? h - q[1] : (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]]));\n        };\n        sdf.cutHollowSphere = function (samplePosition, sphereCenter, radius, height, thickness) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = sphereCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var h = height;\n            var t = thickness;\n            // sampling independent computations (only depend on shape)\n            var w = Math.sqrt(r * r - h * h);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            return ((h * q[0] < w * q[1]) ? (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(w, h), [_d[0] - _e[0], _d[1] - _e[1]])) : Math.abs((0, std_math_1.length)(q) - r)) - t;\n        };\n        sdf.roundCone = function (samplePosition, coneCenter, coneRadius, cornerRadius, height) {\n            var _a, _b, _c, _d, _e;\n            var p = (_a = samplePosition, _b = coneCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var r1 = coneRadius;\n            var r2 = cornerRadius;\n            // sampling independent computations (only depend on shape)\n            var b = (r1 - r2) / h;\n            var a = Math.sqrt(1.0 - b * b);\n            // sampling dependant computations\n            var q = __.FM.float_2_1_1((0, std_math_1.length)((_c = p, [_c[0], _c[2]])), __.swizzle(p, 'y'));\n            var k = (0, std_math_1.dot)(q, __.FM.float_2_1_1(__.negate(b), a));\n            if (k < 0.0)\n                return (0, std_math_1.length)(q) - r1;\n            if (k > a * h)\n                return (0, std_math_1.length)((_d = q, _e = __.FM.float_2_1_1(__.float(0.0), h), [_d[0] - _e[0], _d[1] - _e[1]])) - r2;\n            return (0, std_math_1.dot)(q, __.FM.float_2_1_1(a, b)) - r1;\n        };\n        sdf.ellipsoid = function (samplePosition, center, radius) {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var r = radius;\n            var k0 = (0, std_math_1.length)((_c = p, _d = r, [_c[0] / _d[0], _c[1] / _d[1], _c[2] / _d[2]]));\n            var k1 = (0, std_math_1.length)((_e = p, _f = (_g = r, _h = r, [_g[0] * _h[0], _g[1] * _h[1], _g[2] * _h[2]]), [_e[0] / _f[0], _e[1] / _f[1], _e[2] / _f[2]]));\n            return k0 * (k0 - 1.0) / k1;\n        };\n        sdf.rhombus = function (samplePosition, rhombusCenter, la, lb, height, ra) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var p = (_a = samplePosition, _b = rhombusCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var b = __.FM.float_2_1_1(la, lb);\n            var f = (0, std_math_1.clamp)((ndot(b, (_d = b, _e = (_f = 2.0, _g = (_h = p, [_h[0], _h[2]]), [_f * _g[0], _f * _g[1]]), [_d[0] - _e[0], _d[1] - _e[1]]))) / (0, std_math_1.dot)(b, b), (__.FM.negate_1(1.0)), 1.0);\n            var q = __.FM.float_2_1_1(__.sub((0, std_math_1.length)((_j = (_l = p, [_l[0], _l[2]]), _k = (_m = (_p = 0.5, _q = b, [_p * _q[0], _p * _q[1]]), _o = __.FM.float_2_1_1(__.sub(1.0, f), __.add(1.0, f)), [_m[0] * _o[0], _m[1] * _o[1]]), [_j[0] - _k[0], _j[1] - _k[1]])) * Math.sign(p[0] * b[1] + p[2] * b[0] - b[0] * b[1]), ra), __.sub(p[1], h));\n            return (0, std_math_1.min)((0, std_math_1.max)(q[0], q[1]), 0.0) + (0, std_math_1.length)((0, std_math_1.max)(q, 0.0));\n        };\n        sdf.octahedron = function (samplePosition, center, size) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = (_a = samplePosition, _b = center, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var s = size;\n            p = (_c = p, [Math.abs(_c[0]), Math.abs(_c[1]), Math.abs(_c[2])]);\n            var m = p[0] + p[1] + p[2] - s;\n            var q = (_d = 0.0, [_d, _d, _d]);\n            if (3.0 * p[0] < m)\n                q = (_e = p, [_e[0], _e[1], _e[2]]);\n            else if (3.0 * p[1] < m)\n                q = (_f = p, [_f[1], _f[2], _f[0]]);\n            else if (3.0 * p[2] < m)\n                q = (_g = p, [_g[2], _g[0], _g[1]]);\n            else\n                return m * 0.57735027;\n            var k = (0, std_math_1.clamp)(0.5 * (q[2] - q[1] + s), 0.0, s);\n            return (0, std_math_1.length)(__.FM.float_3_1_1_1(__.swizzle(q, 'x'), __.add(q[1] - s, k), __.sub(q[2], k)));\n        };\n        sdf.pyramid = function (samplePosition, pyramidCenter, height) {\n            var _a, _b;\n            var p1 = (_a = samplePosition, _b = pyramidCenter, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var h = height;\n            var m2 = h * h + 0.25;\n            var p2 = __.makeVector(Math.abs(p1[0]), p1[1], Math.abs(p1[2]));\n            if (p1[2] > p1[0]) {\n                p2 = __.makeVector(p2[2], p2[1], p2[0]);\n            }\n            p2 = __.makeVector(p2[0] - 0.5, p2[1], p2[2] - 0.5);\n            var p = p2;\n            var q = __.FM.float_3_1_1_1(__.swizzle(p, 'z'), __.sub(h * p[1], 0.5 * p[0]), __.add(h * p[0], 0.5 * p[1]));\n            var s = (0, std_math_1.max)((__.FM.negate_1(q[0])), 0.0);\n            var t = (0, std_math_1.clamp)((q[1] - 0.5 * p[2]) / (m2 + 0.25), 0.0, 1.0);\n            var a = m2 * (q[0] + s) * (q[0] + s) + q[1] * q[1];\n            var b = m2 * (q[0] + 0.5 * t) * (q[0] + 0.5 * t) + (q[1] - m2 * t) * (q[1] - m2 * t);\n            var d2 = (0, std_math_1.min)(q[1], (__.FM.negate_1(q[0])) * m2 - q[1] * 0.5) > 0.0 ? 0.0 : (0, std_math_1.min)(a, b);\n            return Math.sqrt((d2 + q[2] * q[2]) / m2) * Math.sign((0, std_math_1.max)(q[2], (__.FM.negate_1(p[1]))));\n        };\n        sdf.udTriangle = function (samplePosition, a, b, c) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var ac = (_j = a, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var nor = (0, std_math_1.cross)(ba, ac);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ac, nor), pc)) < 2.0) ? (0, std_math_1.min)((0, std_math_1.min)(dot3((_o = (_q = ba, _r = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_q[0] * _r, _q[1] * _r, _q[2] * _r]), _p = pa, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])), dot3((_s = (_u = cb, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pb, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]]))), dot3((_w = (_y = ac, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(ac, pc) / dot3(ac), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pc, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        sdf.udQuad = function (samplePosition, a, b, c, d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;\n            var p = samplePosition;\n            var ba = (_a = b, _b = a, [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]]);\n            var pa = (_c = p, _d = a, [_c[0] - _d[0], _c[1] - _d[1], _c[2] - _d[2]]);\n            var cb = (_e = c, _f = b, [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]);\n            var pb = (_g = p, _h = b, [_g[0] - _h[0], _g[1] - _h[1], _g[2] - _h[2]]);\n            var dc = (_j = d, _k = c, [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]);\n            var pc = (_l = p, _m = c, [_l[0] - _m[0], _l[1] - _m[1], _l[2] - _m[2]]);\n            var ad = (_o = a, _p = d, [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]]);\n            var pd = (_q = p, _r = d, [_q[0] - _r[0], _q[1] - _r[1], _q[2] - _r[2]]);\n            var nor = (0, std_math_1.cross)(ba, ad);\n            return Math.sqrt((Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ba, nor), pa)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(cb, nor), pb)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(dc, nor), pc)) + Math.sign((0, std_math_1.dot)((0, std_math_1.cross)(ad, nor), pd)) < 3.0) ? (0, std_math_1.min)((0, std_math_1.min)((0, std_math_1.min)(dot3((_s = (_u = ba, _v = (0, std_math_1.clamp)((0, std_math_1.dot)(ba, pa) / dot3(ba), 0.0, 1.0), [_u[0] * _v, _u[1] * _v, _u[2] * _v]), _t = pa, [_s[0] - _t[0], _s[1] - _t[1], _s[2] - _t[2]])), dot3((_w = (_y = cb, _z = (0, std_math_1.clamp)((0, std_math_1.dot)(cb, pb) / dot3(cb), 0.0, 1.0), [_y[0] * _z, _y[1] * _z, _y[2] * _z]), _x = pb, [_w[0] - _x[0], _w[1] - _x[1], _w[2] - _x[2]]))), dot3((_0 = (_2 = dc, _3 = (0, std_math_1.clamp)((0, std_math_1.dot)(dc, pc) / dot3(dc), 0.0, 1.0), [_2[0] * _3, _2[1] * _3, _2[2] * _3]), _1 = pc, [_0[0] - _1[0], _0[1] - _1[1], _0[2] - _1[2]]))), dot3((_4 = (_6 = ad, _7 = (0, std_math_1.clamp)((0, std_math_1.dot)(ad, pd) / dot3(ad), 0.0, 1.0), [_6[0] * _7, _6[1] * _7, _6[2] * _7]), _5 = pd, [_4[0] - _5[0], _4[1] - _5[1], _4[2] - _5[2]]))) : (0, std_math_1.dot)(nor, pa) * (0, std_math_1.dot)(nor, pa) / dot3(nor));\n        };\n        /**\n            * Returns the intersection of two SDFs\n            * = max(a, b)\n            */\n        sdf.intersect = function (a, b) { return (0, std_math_1.max)(a, b); };\n        /**\n            * Returns the union of two SDFs\n            * = min(a, b)\n            */\n        sdf.union = function (a, b) { return (0, std_math_1.min)(a, b); };\n        sdf.subtract = function (a, b) { return (0, std_math_1.max)((__.FM.negate_1(a)), b); };\n        sdf.smoothIntersect = function (a, b, k) {\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(b, a, h) - k * h * (1.0 - h);\n        };\n        /**\n            * Smoothly joins two SDFs using blending distance k\n            */\n        sdf.smoothUnion = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, d1, h) - k * h * (1.0 - h);\n        };\n        sdf.smoothSubtract = function (a, b, k) {\n            var d1 = a;\n            var d2 = b;\n            var h = (0, std_math_1.clamp)(0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0);\n            return (0, std_math_1.lerp)(d2, (__.FM.negate_1(d1)), h) + k * h * (1.0 - h);\n        };\n        /**\n            * Blends between two SDFs using interpolation\n            */\n        sdf.blend = function (a, b, t) { return t * a + ((1 | 0) - t) * b; };\n        sdf.round = function (a, r) { return a - r; };\n        /**\n            * Carve out the interior of an SDF\n            */\n        sdf.onion = function (a, thickness) { return Math.abs(a) - thickness; };\n        sdf.grad = function (p, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n            var DELTA = 0.0001;\n            return _a = __.FM.float_3_1_1_1(__.sub(sampler((_c = p, _d = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_c[0] + _d[0], _c[1] + _d[1], _c[2] + _d[2]])), sampler((_e = p, _f = __.FM.float_3_1_1_1(DELTA, __.float(0.0), __.float(0.0)), [_e[0] - _f[0], _e[1] - _f[1], _e[2] - _f[2]]))), __.sub(sampler((_g = p, _h = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_g[0] + _h[0], _g[1] + _h[1], _g[2] + _h[2]])), sampler((_j = p, _k = __.FM.float_3_1_1_1(__.float(0.0), DELTA, __.float(0.0)), [_j[0] - _k[0], _j[1] - _k[1], _j[2] - _k[2]]))), __.sub(sampler((_l = p, _m = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_l[0] + _m[0], _l[1] + _m[1], _l[2] + _m[2]])), sampler((_o = p, _p = __.FM.float_3_1_1_1(__.float(0.0), __.float(0.0), DELTA), [_o[0] - _p[0], _o[1] - _p[1], _o[2] - _p[2]])))), _b = (2.0 * DELTA), [_a[0] / _b, _a[1] / _b, _a[2] / _b];\n        };\n        /**\n            * Poorly returns the closest point on the surface of an SDF\n            * This is an inaccurate method\n            */\n        sdf.closest = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n            var sep = 0.0001;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var closest = position;\n            var initialDist = sampler(position);\n            var seed = (0 | 0);\n            for (var j = (0 | 0); j < (200 | 0); j++) {\n                var n = (_a = 0.0, [_a, _a, _a]);\n                var distSum = 0.0;\n                for (var i = zero; i < (4 | 0); i++) {\n                    var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                    var d = sampler((_h = closest, _j = (_k = e, _l = sep, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                    distSum = distSum + d;\n                    n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n                }\n                closest = (_r = (_t = (_v = (_x = (0, std_math_1.normalize)(n), _y = distSum, [_x[0] * _y, _x[1] * _y, _x[2] * _y]), _w = (__.FM.negate_1((1 | 0))), [_v[0] * _w, _v[1] * _w, _v[2] * _w]), _u = 4.0, [_t[0] / _u, _t[1] / _u, _t[2] / _u]), _s = closest, [_r[0] + _s[0], _r[1] + _s[1], _r[2] + _s[2]]);\n                if (distSum < 0.0001) {\n                    break;\n                }\n            }\n            return closest;\n        };\n        sdf.normal = function (position, sampler) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n            var h = 0.1;\n            var zero = ((0, std_math_1.min)(env.frame, (0 | 0)) | 0);\n            var n = (_a = 0.0, [_a, _a, _a]);\n            var distSum = 0.0;\n            for (var i = zero; i < (4 | 0); i++) {\n                var e = (_b = 0.5773, _c = (_d = (_f = 2.0, _g = __.FM.float_3_1_1_1((((i + (3 | 0)) >> (1 | 0)) & (1 | 0)), ((i >> (1 | 0)) & (1 | 0)), (i & (1 | 0))), [_f * _g[0], _f * _g[1], _f * _g[2]]), _e = 1.0, [_d[0] - _e, _d[1] - _e, _d[2] - _e]), [_b * _c[0], _b * _c[1], _b * _c[2]]);\n                var d = sampler((_h = position, _j = (_k = e, _l = h, [_k[0] * _l, _k[1] * _l, _k[2] * _l]), [_h[0] + _j[0], _h[1] + _j[1], _h[2] + _j[2]]));\n                distSum = distSum + d;\n                n = (_m = n, _o = (_p = e, _q = d, [_p[0] * _q, _p[1] * _q, _p[2] * _q]), [_m[0] + _o[0], _m[1] + _o[1], _m[2] + _o[2]]);\n            }\n            return (0, std_math_1.normalize)(n);\n        };\n        sdf.vizRings = function (d) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n            if (false) {\n                var color_1 = (_a = 1.0, _b = (_c = Math.sign(d), _d = __.FM.float_3_1_1_1(__.float(0.1), __.float(0.4), __.float(0.7)), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a - _b[0], _a - _b[1], _a - _b[2]]);\n                color_1 = (_e = color_1, _f = 1.0 - Math.exp((__.FM.negate_1(4.0)) * Math.abs(d)), [_e[0] * _f, _e[1] * _f, _e[2] * _f]);\n                color_1 = (_g = color_1, _h = 0.8 + 0.2 * Math.cos(140.0 * d), [_g[0] * _h, _g[1] * _h, _g[2] * _h]);\n                color_1 = (0, std_math_1.lerp)(color_1, (_j = 1.0, [_j, _j, _j]), 1.0 - (0, std_math_1.smoothstep)(0.0, 0.015, Math.abs(d)));\n                return __.makeVector(color_1, 1.0);\n            }\n            else {\n                var size = (2 | 0);\n                var fadeDist = (100 | 0);\n                var v = (1 | 0) - (0, std_math_1.clamp)(d / fadeDist, (0 | 0), (1 | 0));\n                var color_2 = __.makeVector(0.4 * v, 0.6 * v, (1 | 0), (1 | 0));\n                var s = Math.sin(d / size);\n                if (Math.abs(d) < (1 | 0)) {\n                    return __.FM.float_4_4(__.swizzle((1 | 0), \"xyzw\"));\n                }\n                else {\n                    return d > (0 | 0) ? (_k = color_2, _l = Math.ceil((1 | 0) - s), [_k[0] * _l, _k[1] * _l, _k[2] * _l, _k[3] * _l]) : (_m = color_2, _o = Math.ceil(s), [_m[0] * _o, _m[1] * _o, _m[2] * _o, _m[3] * _o]);\n                }\n            }\n        };\n        sdf.march = function (position, direction, sampler) {\n            var _a, _b, _c, _d;\n            var maxDist = 100000.0;\n            var minDist = 1.0;\n            var dist = minDist;\n            for (var i = (0 | 0); __.and(i < (256 | 0), dist < maxDist); i++) {\n                var samp = sampler((_a = position, _b = (_c = direction, _d = dist, [_c[0] * _d, _c[1] * _d, _c[2] * _d]), [_a[0] + _b[0], _a[1] + _b[1], _a[2] + _b[2]]));\n                dist = dist + samp;\n                if (Math.abs(samp) < (0.00005 * dist)) {\n                    break;\n                }\n            }\n            if (dist > maxDist) {\n                dist = (__.FM.negate_1(1.0));\n            }\n            return dist;\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Infinitely repeats an SDF with space in between. This returns an updated position\n            *\n            * Example:\n            * ```shadeup\n            *\tsdf::sphere(sdf::repeat(p, 100.xyz), 0.xyz, 50.0);\n            * ```\n            */\n        sdf.repeat = function (position, space) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (_e = (_f = p, _g = s, [_f[0] / _g[0], _f[1] / _g[1], _f[2] / _g[2]]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), [_c[0] * _d[0], _c[1] * _d[1], _c[2] * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        /**\n            * See: https://iquilezles.org/articles/distfunctions/\n            * Repeats an SDF with space in between upto the limit. This returns an updated position\n            *\n            * Example:\n            * ```shadeup\n            *\tsdf::sphere(sdf::repeatLimited(p, 100, 10.xyz), 0.xyz, 50.0);\n            * ```\n            */\n        sdf.repeatLimited = function (position, space, limit) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            var p = position;\n            var s = space;\n            return _a = p, _b = (_c = s, _d = (0, std_math_1.clamp)((_e = (_f = p, _g = s, [_f[0] / _g, _f[1] / _g, _f[2] / _g]), [Math.round(_e[0]), Math.round(_e[1]), Math.round(_e[2])]), (__.FM.negate_3(limit)), limit), [_c * _d[0], _c * _d[1], _c * _d[2]]), [_a[0] - _b[0], _a[1] - _b[1], _a[2] - _b[2]];\n        };\n        sdf.prototype.clone = function () {\n            return new sdf({});\n        };\n        sdf.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_sdf_ts_1953_sdf\\\",\\\"fields\\\":[]}\");\n        };\n        return sdf;\n    }());\n    exports.sdf = sdf;\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_sdf_ts_1953_sdf\\\",\\\"fields\\\":[]}\"), sdf)\n    ;\n    function dot2(v) { return (0, std_math_1.dot)(v, v); }\n    function dot3(v) { return (0, std_math_1.dot)(v, v); }\n    function ndot(a, b) { return a[0] * b[0] - a[1] * b[1]; }\n});\n/* impl sdf */\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/_std/geo.js\", deps, func);\n\tvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\ndefine([\"require\", \"exports\", \"/std_math\", \"/std___std_all\"], function (require, exports, __, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    __ = __importStar(__);\n    var globalVarGet = std___std_all_1.globalVarGet;\n    var GeoSegment = /** @class */ (function () {\n        function GeoSegment(data) {\n            var _a, _b, _c, _d, _e, _f;\n            this.start = ((_a = data.start) !== null && _a !== void 0 ? _a : __.FM.float_2_1_1(0.0, 0.0));\n            this.end = ((_b = data.end) !== null && _b !== void 0 ? _b : __.FM.float_2_1_1(0.0, 0.0));\n            this.kind = ((_c = data.kind) !== null && _c !== void 0 ? _c : (0 | 0));\n            this.arcRadius = ((_d = data.arcRadius) !== null && _d !== void 0 ? _d : 0.0);\n            this.arcStart = ((_e = data.arcStart) !== null && _e !== void 0 ? _e : 0.0);\n            this.arcEnd = ((_f = data.arcEnd) !== null && _f !== void 0 ? _f : 0.0);\n        }\n        GeoSegment.prototype.clone = function () {\n            return new GeoSegment({\n                start: (0, std___std_all_1.__deepClone)(this.start),\n                end: (0, std___std_all_1.__deepClone)(this.end),\n                kind: (0, std___std_all_1.__deepClone)(this.kind),\n                arcRadius: (0, std___std_all_1.__deepClone)(this.arcRadius),\n                arcStart: (0, std___std_all_1.__deepClone)(this.arcStart),\n                arcEnd: (0, std___std_all_1.__deepClone)(this.arcEnd),\n            });\n        };\n        GeoSegment.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\");\n        };\n        return GeoSegment;\n    }());\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]}\"), GeoSegment)\n    /**@shadeup=struct*/ var GeoPoly = /** @class */ (function () {\n        function GeoPoly(data) {\n            var _a;\n            this.segments = ((_a = data.segments) !== null && _a !== void 0 ? _a : []);\n        }\n        GeoPoly.prototype.area = function () { return 0.0; };\n        GeoPoly.prototype.perimeter = function () { return 0.0; };\n        GeoPoly.prototype.discretize = function () { var shader_self_temp = this; return this.clone(); };\n        GeoPoly.prototype.clone = function () {\n            return new GeoPoly({\n                segments: (0, std___std_all_1.__deepClone)(this.segments),\n            });\n        };\n        GeoPoly.prototype._getStructure = function () {\n            return JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\",\\\"fields\\\":[[\\\"segments\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]},\\\"staticSize\\\":1}]]}\");\n        };\n        return GeoPoly;\n    }());\n    __shadeup_register_struct(JSON.parse(\"{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_2763_GeoPoly\\\",\\\"fields\\\":[[\\\"segments\\\",{\\\"type\\\":\\\"array\\\",\\\"element\\\":{\\\"type\\\":\\\"struct\\\",\\\"name\\\":\\\"str_i_iistd_geo_ts_1845_GeoSegment\\\",\\\"fields\\\":[[\\\"start\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"end\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float2\\\"}],[\\\"kind\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"int\\\"}],[\\\"arcRadius\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcStart\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}],[\\\"arcEnd\\\",{\\\"type\\\":\\\"primitive\\\",\\\"name\\\":\\\"float\\\"}]]},\\\"staticSize\\\":1}]]}\"), GeoPoly)\n});\n/* impl GeoPoly */\n\n})(define);\n\n((defineFunc) => {\n\tlet define = (deps, func) => defineFunc(\"/__lib.js\", deps, func);\n\tdefine([\"require\", \"exports\", \"/std___std_all\"], function (require, exports, std___std_all_1) {\n    \"use strict\";\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    var globalVarGet = std___std_all_1.globalVarGet;\n});\n\n})(define);\n};\n"
  },
  {
    "path": "package/main.d.ts",
    "content": "export declare function main(): void;\n"
  },
  {
    "path": "package/math.d.ts",
    "content": "export type bool = boolean;\nexport type float = number & { _opaque_float: 2 };\nexport type int = number & { _opaque_int: 1 } & float;\nexport type uint = number & { _opaque_uint: 1 };\ntype scalar = float | int | uint;\n\nexport type float2 = [float, float] & { _opaque_vector_float_2: 2; length: 2 };\nexport type float3 = [float, float, float] & {\n  _opaque_vector_float_3: 3;\n  length: 3;\n};\nexport type float4 = [float, float, float, float] & {\n  _opaque_vector_float_4: 4;\n  length: 4;\n};\nexport type int2 = [int, int] & { _opaque_vector_int_2: 2 } & float2;\nexport type int3 = [int, int, int] & { _opaque_vector_int_3: 3 } & float3;\nexport type int4 = [int, int, int, int] & { _opaque_vector_int_4: 4 } & float4;\n\nexport type uint2 = [uint, uint] & { _opaque_vector_uint_2: 2 } & float2;\nexport type uint3 = [uint, uint, uint] & { _opaque_vector_uint_3: 3 } & float3;\nexport type uint4 = [uint, uint, uint, uint] & {\n  _opaque_vector_uint_4: 4;\n} & float4;\n\nexport type uint8 = number & { _opaque_uint8: 1 };\n\nexport interface float2x2\n  extends Omit<[float, float, float, float], \"__index\"> {\n  __matrix: 2;\n  [index: int]: float;\n  __index(index: number): [float, float];\n}\n\nexport interface float3x3\n  extends Omit<\n    [float, float, float, float, float, float, float, float, float],\n    \"__index\"\n  > {\n  __matrix: 3;\n  [index: int]: float;\n  __index(index: number): [float, float, float];\n}\n\nexport interface float4x4\n  extends Omit<\n    [\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float,\n      float\n    ],\n    \"__index\"\n  > {\n  __matrix: 4;\n  [index: int]: float;\n  __index(index: number): [float, float, float, float];\n}\n"
  },
  {
    "path": "package/package.json",
    "content": "{\n  \"name\": \"shadeup\",\n  \"version\": \"1.4.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"build:lib\": \"npx shadeup -v && npx shadeup build __lib.shadeup && node util/concat.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AskingQuestions/Shadeup\"\n  },\n  \"author\": \"AskingQuestions <npm@jrmy.dev>\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "package/util/concat.js",
    "content": "import fs from \"fs\";\nimport path from \"path\";\n\nlet code = \"// Generated file\\n\";\n\ncode += \"export const linkShadeupLibrary = (define, localEngineContext) => {\\n\";\n\ncode += `const __shadeup_gen_shader =\nlocalEngineContext.__shadeup_gen_shader.bind(localEngineContext);\nconst __shadeup_make_shader_inst =\nlocalEngineContext.__shadeup_make_shader_inst.bind(localEngineContext);\nconst __shadeup_register_struct =\nlocalEngineContext.__shadeup_register_struct.bind(localEngineContext);\nconst env = localEngineContext.env;\n\n`;\n\nconst blankCode = fs.readFileSync(\"__lib.js\", \"utf8\");\n\ncode += blankCode;\n\ncode += \"};\\n\";\n\nfs.writeFileSync(\"library.js\", code);\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"dependencies\": {\n    \"plist\": \"^3.1.0\",\n    \"tmlanguage-generator\": \"^0.5.2\"\n  }\n}\n"
  },
  {
    "path": "unreal-engine/.editorconfig",
    "content": "[*]\nindent_style = tab\nindent_size = 4"
  },
  {
    "path": "unreal-engine/.gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": "unreal-engine/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n.parcel-cache\n\n# Next.js build output\n.next\nout\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and not Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# vuepress v2.x temp and cache directory\n.temp\n.cache\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n"
  },
  {
    "path": "unreal-engine/.prettierignore",
    "content": ""
  },
  {
    "path": "unreal-engine/README.md",
    "content": "<p align=\"center\"><a href=\"https://unreal.shadeup.dev\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"100\" src=\"https://unreal.shadeup.dev/favicon.png\" alt=\"Shadeup logo\"></a></p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/shadeup\"><img src=\"https://img.shields.io/npm/v/shadeup.svg?sanitize=true\" alt=\"Version\"></a>\n  <a href=\"https://www.npmjs.com/package/shadeup\"><img src=\"https://img.shields.io/npm/l/shadeup.svg?sanitize=true\" alt=\"License\"></a>\n</p>\n\n<h1 align=\"center\"><a href=\"https://unreal.shadeup.dev\">Shadeup - Unreal Engine</a></h1>\n\n## More shaders less boilerplate\n\nShadeup is a CLI-based scaffolding tool for rapidly whipping up shaders in Unreal Engine\n\n---\n\nShadeup helps with the following:\n\n📜 Compute shaders\n\n⠶ Indirect instancing\n\n↝ Custom Material Nodes\n\n---\n\n## Installation & Usage\n\n```sh\n$ npm install shadeup\n```\n\n```sh\n$ cd MyUnrealProject\n$ shadeup # This will start the scaffolding wizard\n```\n\nFor more information visit [unreal.shadeup.dev](https://unreal.shadeup.dev/docs)\n"
  },
  {
    "path": "unreal-engine/archive.js",
    "content": "import path from \"path\";\nimport fs from \"fs\";\nimport { cp, rm, rmdir, unlink } from \"fs/promises\";\nimport archiver from \"archiver\";\nimport { CreateModule } from \"./cli.js\";\n\n// Generates all examples and zips them for distribution on the https://unreal.shadeup.dev site\n\nimport * as url from \"url\";\nconst __filename = url.fileURLToPath(import.meta.url);\nconst __dirname = url.fileURLToPath(new URL(\".\", import.meta.url));\n\nimport templates from \"./src/types/template.js\";\n(async () => {\n\tfor (let template of templates) {\n\t\tlet examples = template.examples();\n\t\tfor (let example of examples) {\n\t\t\tlet outDirPlugin = path.resolve(\n\t\t\t\t\"./\",\n\t\t\t\t\"archives\",\n\t\t\t\ttemplate.name + \"_Plugin\"\n\t\t\t);\n\n\t\t\tawait cp(\n\t\t\t\tpath.join(__dirname, \"./src/plugin_template\"),\n\t\t\t\toutDirPlugin,\n\t\t\t\t{ recursive: true }\n\t\t\t);\n\n\t\t\tlet moduleDir = await CreateModule(\n\t\t\t\t{\n\t\t\t\t\tname: \"ShadeupExamplePlugin\",\n\t\t\t\t\tdir: outDirPlugin,\n\t\t\t\t\tfile: path.join(\n\t\t\t\t\t\toutDirPlugin,\n\t\t\t\t\t\t\"ShadeupExamplePlugin.uplugin\"\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\ttemplate.name\n\t\t\t);\n\n\t\t\tlet inst = new template(\n\t\t\t\t{\n\t\t\t\t\tname: \"archive\",\n\t\t\t\t\tdir: path.join(__dirname, \"archives\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir: outDirPlugin,\n\t\t\t\t\tname: template.name + \"_Plugin\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfile: path.join(moduleDir, template.name + \".Build.cs\"),\n\t\t\t\t\tdir: moduleDir,\n\t\t\t\t\tname: template.name,\n\t\t\t\t}\n\t\t\t);\n\t\t\tinst.example = example[0];\n\t\t\tinst.answers = { name: \"Example\" + template.name };\n\t\t\ttry {\n\t\t\t\tlet mdFile = await inst.generate();\n\t\t\t} catch (e) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait unlink(\n\t\t\t\tpath.join(outDirPlugin, \"./ShadeupExamplePlugin.uplugin.back\")\n\t\t\t);\n\t\t\tawait new Promise((res) => {\n\t\t\t\tconst output = fs.createWriteStream(\n\t\t\t\t\tpath.resolve(\n\t\t\t\t\t\t\"./\",\n\t\t\t\t\t\t\"archives\",\n\t\t\t\t\t\ttemplate.name + \"_\" + example[0] + \".zip\"\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tconst archive = archiver(\"zip\", {\n\t\t\t\t\tzlib: { level: 9 },\n\t\t\t\t});\n\n\t\t\t\toutput.on(\"close\", function () {\n\t\t\t\t\tres();\n\t\t\t\t});\n\n\t\t\t\tarchive.on(\"warning\", function (err) {\n\t\t\t\t\tif (err.code === \"ENOENT\") {\n\t\t\t\t\t\tconsole.warn(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tarchive.on(\"error\", function (err) {\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\n\t\t\t\tarchive.pipe(output);\n\n\t\t\t\tarchive.append(\n\t\t\t\t\t`The folder named \\`${template.name}_Plugin\\` is an Unreal Engine plugin that can be dropped into any UE5 c++ project.\n\n1. Extract the plugin folder to \\`YourProject/Plugins/\\` directory.\n2. Recompile the project.`,\n\t\t\t\t\t{ name: \"readme.md\" }\n\t\t\t\t);\n\n\t\t\t\tarchive.directory(outDirPlugin, template.name + \"_Plugin\");\n\n\t\t\t\tarchive.finalize();\n\t\t\t});\n\t\t\tawait rm(outDirPlugin, { recursive: true });\n\t\t\tconsole.log(\"Archived \" + inst.answers.name);\n\t\t}\n\t}\n})();\n"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/ShadeupExamplePlugin.uplugin",
    "content": "{\n\t\"FileVersion\": 3,\n\t\"Version\": 1,\n\t\"VersionName\": \"1.0\",\n\t\"FriendlyName\": \"ShadeupExamplePlugin\",\n\t\"Description\": \"\",\n\t\"Category\": \"Other\",\n\t\"CreatedBy\": \"\",\n\t\"CreatedByURL\": \"\",\n\t\"DocsURL\": \"\",\n\t\"MarketplaceURL\": \"\",\n\t\"SupportURL\": \"\",\n\t\"CanContainContent\": true,\n\t\"IsBetaVersion\": false,\n\t\"IsExperimentalVersion\": false,\n\t\"Installed\": false,\n\t\"Modules\": [\n\t\t{\n\t\t\t\"Name\": \"ShadeupExamplePlugin\",\n\t\t\t\"Type\": \"Runtime\",\n\t\t\t\"LoadingPhase\": \"Default\"\n\t\t},\n\t\t{\n\t\t\t\"Name\": \"CustomProxy\",\n\t\t\t\"Type\": \"Runtime\",\n\t\t\t\"LoadingPhase\": \"PostConfigInit\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/ShadeupExamplePlugin.uplugin.back",
    "content": "{\n\t\"FileVersion\": 3,\n\t\"Version\": 1,\n\t\"VersionName\": \"1.0\",\n\t\"FriendlyName\": \"ShadeupExamplePlugin\",\n\t\"Description\": \"\",\n\t\"Category\": \"Other\",\n\t\"CreatedBy\": \"\",\n\t\"CreatedByURL\": \"\",\n\t\"DocsURL\": \"\",\n\t\"MarketplaceURL\": \"\",\n\t\"SupportURL\": \"\",\n\t\"CanContainContent\": true,\n\t\"IsBetaVersion\": false,\n\t\"IsExperimentalVersion\": false,\n\t\"Installed\": false,\n\t\"Modules\": [\n\t\t{\n\t\t\t\"Name\": \"ShadeupExamplePlugin\",\n\t\t\t\"Type\": \"Runtime\",\n\t\t\t\"LoadingPhase\": \"Default\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/Source/CustomProxy/CustomProxy.Build.cs",
    "content": "using UnrealBuildTool; \n\npublic class CustomProxy: ModuleRules \n\n{ \n\n\tpublic CustomProxy(ReadOnlyTargetRules Target) : base(Target) \n\n\t{\n\t\tPCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;\n\t\t\n\t\tPrivateIncludePaths.AddRange(new string[] \n\t\t{\n\t\t\t\"Runtime/Renderer/Private\",\n\t\t\t\"CustomProxy/Private\"\n\t\t});\n\t\tif (Target.bBuildEditor == true)\n\t\t{\n\t\t\tPrivateDependencyModuleNames.Add(\"TargetPlatform\");\n\t\t}\n\t\tPublicDependencyModuleNames.Add(\"Core\");\n\t\tPublicDependencyModuleNames.Add(\"Engine\");\n\t\tPublicDependencyModuleNames.Add(\"MaterialShaderQualitySettings\");\n\t\t\n\t\tPrivateDependencyModuleNames.AddRange(new string[]\n\t\t{\n\t\t\t\"CoreUObject\",\n\t\t\t\"Renderer\",\n\t\t\t\"RenderCore\",\n\t\t\t\"RHI\",\n\t\t\t\"Projects\"\n\t\t});\n\t\t\n\t\tif (Target.bBuildEditor == true)\n\t\t{\n\n\t\t\tPrivateDependencyModuleNames.AddRange(\n\t\t\t\tnew string[] {\n\t\t\t\t\t\"UnrealEd\",\n\t\t\t\t\t\"MaterialUtilities\",\n\t\t\t\t\t\"SlateCore\",\n\t\t\t\t\t\"Slate\"\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tCircularlyReferencedDependentModules.AddRange(\n\t\t\t\tnew string[] {\n\t\t\t\t\t\"UnrealEd\",\n\t\t\t\t\t\"MaterialUtilities\",\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} \n\n}"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/Source/CustomProxy/Private/CustomProxy.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"CustomProxy.h\"\n\n#include \"Misc/Paths.h\"\n#include \"Misc/FileHelper.h\"\n#include \"RHI.h\"\n#include \"GlobalShader.h\"\n#include \"RHICommandList.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderTargetPool.h\"\n#include \"Runtime/Core/Public/Modules/ModuleManager.h\"\n#include \"Interfaces/IPluginManager.h\"\n\n#define LOCTEXT_NAMESPACE \"FCustomProxy\"\n\nvoid FCustomProxy::StartupModule()\n{\n\t// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module\n\n\tFString PluginShaderDir = FPaths::Combine(IPluginManager::Get().FindPlugin(TEXT(\"ShadeupExamplePlugin\"))->GetBaseDir(), TEXT(\"Shaders/CustomProxy/Private\"));\n\tAddShaderSourceDirectoryMapping(TEXT(\"/CustomProxyShaders\"), PluginShaderDir);\n}\n\nvoid FCustomProxy::ShutdownModule()\n{\n\t// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,\n\t// we call this function before unloading the module.\n}\n\n#undef LOCTEXT_NAMESPACE\n\t\nIMPLEMENT_MODULE(FCustomProxy, ShadeupExamplePlugin)"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/Source/CustomProxy/Public/CustomProxy.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Modules/ModuleManager.h\"\n\nclass FCustomProxy : public IModuleInterface\n{\npublic:\n\n\t/** IModuleInterface implementation */\n\tvirtual void StartupModule() override;\n\tvirtual void ShutdownModule() override;\n};\n"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/Source/ShadeupTestPlugin/Private/ShadeupExamplePlugin.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"ShadeupExamplePlugin.h\"\n\n#define LOCTEXT_NAMESPACE \"FShadeupExamplePluginModule\"\n\nvoid FShadeupExamplePluginModule::StartupModule()\n{\n\t// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module\n}\n\nvoid FShadeupExamplePluginModule::ShutdownModule()\n{\n\t// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,\n\t// we call this function before unloading the module.\n}\n\n#undef LOCTEXT_NAMESPACE\n\t\nIMPLEMENT_MODULE(FShadeupExamplePluginModule, ShadeupExamplePlugin)"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/Source/ShadeupTestPlugin/Public/ShadeupExamplePlugin.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Modules/ModuleManager.h\"\n\nclass FShadeupExamplePluginModule : public IModuleInterface\n{\npublic:\n\n\t/** IModuleInterface implementation */\n\tvirtual void StartupModule() override;\n\tvirtual void ShutdownModule() override;\n};\n"
  },
  {
    "path": "unreal-engine/archives/CustomProxy_Plugin/Source/ShadeupTestPlugin/ShadeupExamplePlugin.Build.cs",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\nusing UnrealBuildTool;\n\npublic class ShadeupExamplePlugin : ModuleRules\n{\n\tpublic ShadeupExamplePlugin(ReadOnlyTargetRules Target) : base(Target)\n\t{\n\t\tPCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;\n\t\t\n\t\tPublicIncludePaths.AddRange(\n\t\t\tnew string[] {\n\t\t\t\t// ... add public include paths required here ...\n\t\t\t}\n\t\t\t);\n\t\t\t\t\n\t\t\n\t\tPrivateIncludePaths.AddRange(\n\t\t\tnew string[] {\n\t\t\t\t// ... add other private include paths required here ...\n\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\n\t\tPublicDependencyModuleNames.AddRange(\n\t\t\tnew string[]\n\t\t\t{\n\t\t\t\t\"Core\",\n\t\t\t\t// ... add other public dependencies that you statically link with here ...\n\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\n\t\tPrivateDependencyModuleNames.AddRange(\n\t\t\tnew string[]\n\t\t\t{\n\t\t\t\t\"CoreUObject\",\n\t\t\t\t\"Engine\",\n\t\t\t\t\"Slate\",\n\t\t\t\t\"SlateCore\",\n\t\t\t\t// ... add private dependencies that you statically link with here ...\t\n\t\t\t}\n\t\t\t);\n\t\t\n\t\t\n\t\tDynamicallyLoadedModuleNames.AddRange(\n\t\t\tnew string[]\n\t\t\t{\n\t\t\t\t// ... add any modules that your module loads dynamically here ...\n\t\t\t}\n\t\t\t);\n\t}\n}\n"
  },
  {
    "path": "unreal-engine/build/grammar.js",
    "content": "// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n\nfunction id(x) { return x[0]; }\nexport default {\n    Lexer: undefined,\n    ParserRules: [\n    {\"name\": \"_$ebnf$1\", \"symbols\": []},\n    {\"name\": \"_$ebnf$1\", \"symbols\": [\"_$ebnf$1\", \"wschar\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"_\", \"symbols\": [\"_$ebnf$1\"], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"__$ebnf$1\", \"symbols\": [\"wschar\"]},\n    {\"name\": \"__$ebnf$1\", \"symbols\": [\"__$ebnf$1\", \"wschar\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"__\", \"symbols\": [\"__$ebnf$1\"], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"wschar\", \"symbols\": [/[ \\t\\r\\n\\v\\f]/], \"postprocess\": id},\n    {\"name\": \"dqstring$ebnf$1\", \"symbols\": []},\n    {\"name\": \"dqstring$ebnf$1\", \"symbols\": [\"dqstring$ebnf$1\", \"dstrchar\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"dqstring\", \"symbols\": [{\"literal\":\"\\\"\"}, \"dqstring$ebnf$1\", {\"literal\":\"\\\"\"}], \"postprocess\": function(d) {return d[1].join(\"\"); }},\n    {\"name\": \"sqstring$ebnf$1\", \"symbols\": []},\n    {\"name\": \"sqstring$ebnf$1\", \"symbols\": [\"sqstring$ebnf$1\", \"sstrchar\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"sqstring\", \"symbols\": [{\"literal\":\"'\"}, \"sqstring$ebnf$1\", {\"literal\":\"'\"}], \"postprocess\": function(d) {return d[1].join(\"\"); }},\n    {\"name\": \"btstring$ebnf$1\", \"symbols\": []},\n    {\"name\": \"btstring$ebnf$1\", \"symbols\": [\"btstring$ebnf$1\", /[^`]/], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"btstring\", \"symbols\": [{\"literal\":\"`\"}, \"btstring$ebnf$1\", {\"literal\":\"`\"}], \"postprocess\": function(d) {return d[1].join(\"\"); }},\n    {\"name\": \"dstrchar\", \"symbols\": [/[^\\\\\"\\n]/], \"postprocess\": id},\n    {\"name\": \"dstrchar\", \"symbols\": [{\"literal\":\"\\\\\"}, \"strescape\"], \"postprocess\": \n        function(d) {\n            return JSON.parse(\"\\\"\"+d.join(\"\")+\"\\\"\");\n        }\n        },\n    {\"name\": \"sstrchar\", \"symbols\": [/[^\\\\'\\n]/], \"postprocess\": id},\n    {\"name\": \"sstrchar\", \"symbols\": [{\"literal\":\"\\\\\"}, \"strescape\"], \"postprocess\": function(d) { return JSON.parse(\"\\\"\"+d.join(\"\")+\"\\\"\"); }},\n    {\"name\": \"sstrchar$string$1\", \"symbols\": [{\"literal\":\"\\\\\"}, {\"literal\":\"'\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"sstrchar\", \"symbols\": [\"sstrchar$string$1\"], \"postprocess\": function(d) {return \"'\"; }},\n    {\"name\": \"strescape\", \"symbols\": [/[\"\\\\/bfnrt]/], \"postprocess\": id},\n    {\"name\": \"strescape\", \"symbols\": [{\"literal\":\"u\"}, /[a-fA-F0-9]/, /[a-fA-F0-9]/, /[a-fA-F0-9]/, /[a-fA-F0-9]/], \"postprocess\": \n        function(d) {\n            return d.join(\"\");\n        }\n        },\n    {\"name\": \"main\", \"symbols\": [\"root\"], \"postprocess\": (a) => a[0]},\n    {\"name\": \"root$ebnf$1\", \"symbols\": []},\n    {\"name\": \"root$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"comment\"]},\n    {\"name\": \"root$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"meta\"]},\n    {\"name\": \"root$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"preprocessor\"]},\n    {\"name\": \"root$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"define\"]},\n    {\"name\": \"root$ebnf$1$subexpression$1\", \"symbols\": [\"root$ebnf$1$subexpression$1$subexpression$1\", \"_\"]},\n    {\"name\": \"root$ebnf$1\", \"symbols\": [\"root$ebnf$1\", \"root$ebnf$1$subexpression$1\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"root\", \"symbols\": [\"root$ebnf$1\"], \"postprocess\":  (a) => ({\n        \ttype: \"root\",\n        \titems: a[0].map(x => x ? x[0][0] : null).filter(x => x !== null)\n        }) },\n    {\"name\": \"keyword$subexpression$1$string$1\", \"symbols\": [{\"literal\":\"p\"}, {\"literal\":\"i\"}, {\"literal\":\"x\"}, {\"literal\":\"e\"}, {\"literal\":\"l\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$1\"]},\n    {\"name\": \"keyword$subexpression$1$string$2\", \"symbols\": [{\"literal\":\"v\"}, {\"literal\":\"e\"}, {\"literal\":\"r\"}, {\"literal\":\"t\"}, {\"literal\":\"e\"}, {\"literal\":\"x\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$2\"]},\n    {\"name\": \"keyword$subexpression$1$string$3\", \"symbols\": [{\"literal\":\"c\"}, {\"literal\":\"o\"}, {\"literal\":\"m\"}, {\"literal\":\"p\"}, {\"literal\":\"u\"}, {\"literal\":\"t\"}, {\"literal\":\"e\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$3\"]},\n    {\"name\": \"keyword$subexpression$1$string$4\", \"symbols\": [{\"literal\":\"s\"}, {\"literal\":\"i\"}, {\"literal\":\"n\"}, {\"literal\":\"g\"}, {\"literal\":\"l\"}, {\"literal\":\"e\"}, {\"literal\":\"t\"}, {\"literal\":\"o\"}, {\"literal\":\"n\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$4\"]},\n    {\"name\": \"keyword$subexpression$1$string$5\", \"symbols\": [{\"literal\":\"s\"}, {\"literal\":\"t\"}, {\"literal\":\"r\"}, {\"literal\":\"u\"}, {\"literal\":\"c\"}, {\"literal\":\"t\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$5\"]},\n    {\"name\": \"keyword$subexpression$1$string$6\", \"symbols\": [{\"literal\":\"a\"}, {\"literal\":\"c\"}, {\"literal\":\"t\"}, {\"literal\":\"o\"}, {\"literal\":\"r\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$6\"]},\n    {\"name\": \"keyword$subexpression$1$string$7\", \"symbols\": [{\"literal\":\"f\"}, {\"literal\":\"a\"}, {\"literal\":\"c\"}, {\"literal\":\"t\"}, {\"literal\":\"o\"}, {\"literal\":\"r\"}, {\"literal\":\"y\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [\"keyword$subexpression$1$string$7\"]},\n    {\"name\": \"keyword\", \"symbols\": [\"keyword$subexpression$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"keyword\",\n        \tlocation,\n        \ttext: a[0][0]\n        }) },\n    {\"name\": \"comment$string$1\", \"symbols\": [{\"literal\":\"/\"}, {\"literal\":\"/\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"comment$ebnf$1\", \"symbols\": []},\n    {\"name\": \"comment$ebnf$1\", \"symbols\": [\"comment$ebnf$1\", /[^\\r\\n]/], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"comment\", \"symbols\": [\"comment$string$1\", \"comment$ebnf$1\"], \"postprocess\": () => null},\n    {\"name\": \"preprocessor$ebnf$1\", \"symbols\": []},\n    {\"name\": \"preprocessor$ebnf$1\", \"symbols\": [\"preprocessor$ebnf$1\", /[^\\r\\n]/], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"preprocessor\", \"symbols\": [{\"literal\":\"#\"}, \"preprocessor$ebnf$1\"], \"postprocess\":  ([a,b], location) => ({\n        \ttype: \"pre\",\n        \tlocation,\n        \ttext: b.join(\"\")\n        }) },\n    {\"name\": \"meta\", \"symbols\": [{\"literal\":\"@\"}, \"identifier\", \"__\", \"value\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"meta\",\n        \tidentifier: a[1],\n        \tvalue: a[3],\n        \tlocation\n        }) },\n    {\"name\": \"lp\", \"symbols\": [{\"literal\":\"(\"}]},\n    {\"name\": \"rp\", \"symbols\": [{\"literal\":\")\"}]},\n    {\"name\": \"lcb\", \"symbols\": [{\"literal\":\"{\"}]},\n    {\"name\": \"rcb\", \"symbols\": [{\"literal\":\"}\"}]},\n    {\"name\": \"lsb\", \"symbols\": [{\"literal\":\"[\"}]},\n    {\"name\": \"rsb\", \"symbols\": [{\"literal\":\"]\"}]},\n    {\"name\": \"define$ebnf$1\", \"symbols\": [\"inherits\"], \"postprocess\": id},\n    {\"name\": \"define$ebnf$1\", \"symbols\": [], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"define\", \"symbols\": [\"keyword\", \"__\", \"identifier\", \"_\", \"define$ebnf$1\", \"_\", \"block\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"define\",\n        \tkeyword: a[0],\n        \tidentifier: a[2],\n        \tinherits: a[4],\n        \tblock: a[6],\n        \tlocation\n        })},\n    {\"name\": \"block$ebnf$1\", \"symbols\": []},\n    {\"name\": \"block$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"comment\"]},\n    {\"name\": \"block$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"cpp_code\"]},\n    {\"name\": \"block$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"shader_code\"]},\n    {\"name\": \"block$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"property\"]},\n    {\"name\": \"block$ebnf$1$subexpression$1$subexpression$1\", \"symbols\": [\"function\"]},\n    {\"name\": \"block$ebnf$1$subexpression$1\", \"symbols\": [\"block$ebnf$1$subexpression$1$subexpression$1\", \"_\"]},\n    {\"name\": \"block$ebnf$1\", \"symbols\": [\"block$ebnf$1\", \"block$ebnf$1$subexpression$1\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"block\", \"symbols\": [\"lcb\", \"_\", \"block$ebnf$1\", \"rcb\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"block\",\n        \titems: a[2].map(x => x ? x[0][0] : null).filter(x => x !== null),\n        \tlocation\n        }) },\n    {\"name\": \"function\", \"symbols\": [\"identifier\", \"__\", \"identifier\", \"_\", \"lp\", \"_\", \"rp\", \"_\", \"code\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"function\",\n        \toutput: a[0],\n        \tidentifier: a[2],\n        \tcode: a[8],\n        \tlocation\n        }) },\n    {\"name\": \"shader_code$string$1\", \"symbols\": [{\"literal\":\"S\"}, {\"literal\":\"h\"}, {\"literal\":\"a\"}, {\"literal\":\"d\"}, {\"literal\":\"e\"}, {\"literal\":\"r\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"shader_code\", \"symbols\": [\"shader_code$string$1\", \"_\", \"operator\", \"_\", \"code\", \"_\", {\"literal\":\";\"}], \"postprocess\":  (a, location) => ({\n        \ttype: \"shader\",\n        \tcode: a[4],\n        \toperator: a[2],\n        \tlocation\n        }) },\n    {\"name\": \"cpp_code$subexpression$1$string$1\", \"symbols\": [{\"literal\":\"P\"}, {\"literal\":\"r\"}, {\"literal\":\"i\"}, {\"literal\":\"v\"}, {\"literal\":\"a\"}, {\"literal\":\"t\"}, {\"literal\":\"e\"}, {\"literal\":\"I\"}, {\"literal\":\"n\"}, {\"literal\":\"c\"}, {\"literal\":\"l\"}, {\"literal\":\"u\"}, {\"literal\":\"d\"}, {\"literal\":\"e\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"cpp_code$subexpression$1\", \"symbols\": [\"cpp_code$subexpression$1$string$1\"]},\n    {\"name\": \"cpp_code$subexpression$1$string$2\", \"symbols\": [{\"literal\":\"P\"}, {\"literal\":\"u\"}, {\"literal\":\"b\"}, {\"literal\":\"l\"}, {\"literal\":\"i\"}, {\"literal\":\"c\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"cpp_code$subexpression$1\", \"symbols\": [\"cpp_code$subexpression$1$string$2\"]},\n    {\"name\": \"cpp_code$subexpression$1$string$3\", \"symbols\": [{\"literal\":\"P\"}, {\"literal\":\"r\"}, {\"literal\":\"i\"}, {\"literal\":\"v\"}, {\"literal\":\"a\"}, {\"literal\":\"t\"}, {\"literal\":\"e\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"cpp_code$subexpression$1\", \"symbols\": [\"cpp_code$subexpression$1$string$3\"]},\n    {\"name\": \"cpp_code$subexpression$1$string$4\", \"symbols\": [{\"literal\":\"H\"}, {\"literal\":\"e\"}, {\"literal\":\"a\"}, {\"literal\":\"d\"}, {\"literal\":\"e\"}, {\"literal\":\"r\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"cpp_code$subexpression$1\", \"symbols\": [\"cpp_code$subexpression$1$string$4\"]},\n    {\"name\": \"cpp_code$subexpression$1$string$5\", \"symbols\": [{\"literal\":\"B\"}, {\"literal\":\"o\"}, {\"literal\":\"d\"}, {\"literal\":\"y\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"cpp_code$subexpression$1\", \"symbols\": [\"cpp_code$subexpression$1$string$5\"]},\n    {\"name\": \"cpp_code$subexpression$1$string$6\", \"symbols\": [{\"literal\":\"I\"}, {\"literal\":\"n\"}, {\"literal\":\"c\"}, {\"literal\":\"l\"}, {\"literal\":\"u\"}, {\"literal\":\"d\"}, {\"literal\":\"e\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"cpp_code$subexpression$1\", \"symbols\": [\"cpp_code$subexpression$1$string$6\"]},\n    {\"name\": \"cpp_code\", \"symbols\": [\"cpp_code$subexpression$1\", \"_\", \"operator\", \"_\", \"code\", \"_\", {\"literal\":\";\"}], \"postprocess\":  (a, location) => ({\n        \ttype: \"cpp\",\n        \tvisibility: a[0],\n        \tcode: a[4],\n        \toperator: a[2],\n        \tlocation\n        }) },\n    {\"name\": \"operator$subexpression$1$string$1\", \"symbols\": [{\"literal\":\"-\"}, {\"literal\":\"=\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"operator$subexpression$1\", \"symbols\": [\"operator$subexpression$1$string$1\"]},\n    {\"name\": \"operator$subexpression$1\", \"symbols\": [{\"literal\":\"=\"}]},\n    {\"name\": \"operator$subexpression$1$string$2\", \"symbols\": [{\"literal\":\"+\"}, {\"literal\":\"=\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"operator$subexpression$1\", \"symbols\": [\"operator$subexpression$1$string$2\"]},\n    {\"name\": \"operator\", \"symbols\": [\"operator$subexpression$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"operator\",\n        \ttext: a[0][0],\n        \tlocation\n        }) },\n    {\"name\": \"property\", \"symbols\": [\"identifier\", \"_\", \"operator\", \"_\", \"value\", \"_\", {\"literal\":\";\"}], \"postprocess\":  (a, location, reject) => a[0].text == \"Shader\" ? reject : ({\n        \ttype: \"property\",\n        \tidentifier: a[0],\n        \toperator: a[2],\n        \tvalue: a[4],\n        \tlocation\n        }) },\n    {\"name\": \"array_value\", \"symbols\": [\"value\", \"_\", {\"literal\":\",\"}, \"_\", \"array_value\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"array_value\",\n        \tvalues: [a[0], a[4]],\n        \tlocation\n        }) },\n    {\"name\": \"array_value\", \"symbols\": [\"value\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"array_value\",\n        \tvalues: [a[0]],\n        \tlocation\n        }) },\n    {\"name\": \"array\", \"symbols\": [\"lsb\", \"_\", \"array_value\", \"_\", \"rsb\"], \"postprocess\":  (a, location) => {\n        \tlet flatten = (v) => {\n        \t\tlet arr = [];\n        \t\tfor (let s of v.values) {\n        \t\t\tif (s.type == \"array_value\") {\n        \t\t\t\tarr = [...arr, ...flatten(s)];\n        \t\t\t}else{\n        \t\t\t\tarr.push(s);\n        \t\t\t}\n        \t\t}\n        \t\treturn arr;\n        \t};\n        \treturn {\n        \t\ttype: \"array\",\n        \t\tvalues: flatten(a[2]),\n        \t\tlocation\n        \t};\n        } },\n    {\"name\": \"string$subexpression$1\", \"symbols\": [\"dqstring\"]},\n    {\"name\": \"string$subexpression$1\", \"symbols\": [\"sqstring\"]},\n    {\"name\": \"string\", \"symbols\": [\"string$subexpression$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"string\",\n        \ttext: a[0][0],\n        \tlocation\n        }) },\n    {\"name\": \"value$subexpression$1\", \"symbols\": [\"array\"]},\n    {\"name\": \"value$subexpression$1\", \"symbols\": [\"block\"]},\n    {\"name\": \"value$subexpression$1\", \"symbols\": [\"string\"]},\n    {\"name\": \"value$subexpression$1\", \"symbols\": [\"number\"]},\n    {\"name\": \"value$subexpression$1\", \"symbols\": [\"boolean\"]},\n    {\"name\": \"value$subexpression$1\", \"symbols\": [\"identifier\"]},\n    {\"name\": \"value\", \"symbols\": [\"value$subexpression$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"value\",\n        \tvalue: a[0][0],\n        \tlocation\n        }) },\n    {\"name\": \"boolean$subexpression$1$string$1\", \"symbols\": [{\"literal\":\"t\"}, {\"literal\":\"r\"}, {\"literal\":\"u\"}, {\"literal\":\"e\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"boolean$subexpression$1\", \"symbols\": [\"boolean$subexpression$1$string$1\"]},\n    {\"name\": \"boolean$subexpression$1$string$2\", \"symbols\": [{\"literal\":\"f\"}, {\"literal\":\"a\"}, {\"literal\":\"l\"}, {\"literal\":\"s\"}, {\"literal\":\"e\"}], \"postprocess\": function joiner(d) {return d.join('');}},\n    {\"name\": \"boolean$subexpression$1\", \"symbols\": [\"boolean$subexpression$1$string$2\"]},\n    {\"name\": \"boolean\", \"symbols\": [\"boolean$subexpression$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"boolean\",\n        \tvalue: a[0][0] == \"true\",\n        \tlocation\n        }) },\n    {\"name\": \"inherits\", \"symbols\": [{\"literal\":\":\"}, \"_\", \"identifier_list\"], \"postprocess\":  ([a, _, b], location) => ({\n        \ttype: \"inherits\",\n        \titems: b,\n        \tlocation\n        }) },\n    {\"name\": \"identifier_list\", \"symbols\": [\"identifier\", \"_\", {\"literal\":\",\"}, \"_\", \"identifier_list\"]},\n    {\"name\": \"identifier_list\", \"symbols\": [\"identifier\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"identifier_list\",\n        \titems: a,\n        \tlocation\n        }) },\n    {\"name\": \"identifier$ebnf$1\", \"symbols\": []},\n    {\"name\": \"identifier$ebnf$1\", \"symbols\": [\"identifier$ebnf$1\", /[a-zA-Z0-9_<>*]/], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"identifier\", \"symbols\": [/[a-zA-Z_]/, \"identifier$ebnf$1\"], \"postprocess\":  ([a, b], location, reject) => {\n        \tlet id = a + b.join(\"\");\n        \n        \tif (id == \"true\" || id == \"false\") {\n        \t\treturn reject;\n        \t}else{\n        \t\treturn {\n        \t\t\ttype: \"identifier\",\n        \t\t\ttext: id,\n        \t\t\tlocation\n        \t\t};\n        \t}\n        } },\n    {\"name\": \"number$ebnf$1\", \"symbols\": []},\n    {\"name\": \"number$ebnf$1\", \"symbols\": [\"number$ebnf$1\", /[0-9\\.f]/], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"number\", \"symbols\": [/[0-9.]/, \"number$ebnf$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"number\",\n        \ttext: a[0] + a[1].join(\"\"),\n        \tlocation\n        }) },\n    {\"name\": \"code$subexpression$1$ebnf$1\", \"symbols\": [/[^]/]},\n    {\"name\": \"code$subexpression$1$ebnf$1\", \"symbols\": [\"code$subexpression$1$ebnf$1\", /[^]/], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"code$subexpression$1\", \"symbols\": [\"code$subexpression$1$ebnf$1\"], \"postprocess\": \n        function(a,l, reject) {\n        \tconst txt = a[0].join('');\n        \t\n        \tif (txt[0] != \"{\") {\n        \t\treturn reject;\n        \t}\n        \t\n        \t// Count curly braces balanced and ignore strings and preprocessor defs\n        \tlet indString = false;\n        \tlet insString = false;\n        \tlet inPre = false;\n        \tlet isEscaped = false;\n        \tlet curlyCount = 0;\n        \tfor (let i = 0; i < txt.length; i++) {\n        \t\tif (isEscaped) {\n        \t\t\tisEscaped = false;\n        \t\t\tcontinue;\n        \t\t}\n        \t\tif (txt[i] === '\\\\') {\n        \t\t\tisEscaped = true;\n        \t\t\tcontinue;\n        \t\t}\n        \t\tif (!insString && txt[i] === '\"') {\n        \t\t\tindString = !indString;\n        \t\t\tcontinue;\n        \t\t}\n        \t\tif (!indString && txt[i] === \"'\") {\n        \t\t\tinsString = !insString;\n        \t\t\tcontinue;\n        \t\t}\n        \t\tif (txt[i] === '#') {\n        \t\t\tinPre = true;\n        \t\t\tcontinue;\n        \t\t}\n        \t\tif (txt[i] === '\\n') {\n        \t\t\tinPre = false;\n        \t\t\tcontinue;\n        \t\t}\n        \t\tif (!indString && !insString && !inPre) {\n        \t\t\tif (txt[i] === '{') {\n        \t\t\t\tcurlyCount++;\n        \t\t\t\tcontinue;\n        \t\t\t}\n        \n        \t\t\tif (curlyCount == 0) {\n        \t\t\t\treturn reject;\n        \t\t\t}\n        \n        \t\t\tif (txt[i] === '}') {\n        \t\t\t\tcurlyCount--;\n        \t\t\t\tcontinue;\n        \t\t\t}\n        \t\t}\n        \t}\n        \n        \tif (curlyCount > 0) {\n        \t\treturn reject;\n        \t}else{\n        \t\treturn a[0];\n        \t}\n        }\n        \t\t\t\t\t\t},\n    {\"name\": \"code\", \"symbols\": [\"code$subexpression$1\"], \"postprocess\":  (a, location) => ({\n        \ttype: \"code\",\n        \ttext: a[0].join('').substring(1, a[0].length - 1),\n        \tlocation\n        }) }\n]\n  , ParserStart: \"main\"\n}"
  },
  {
    "path": "unreal-engine/cli.js",
    "content": "#!/usr/bin/env node\n\nimport colors from \"colors\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport inquirer from \"inquirer\";\nimport boxen from \"boxen\";\n\nimport templates from \"./src/types/template.js\";\n\nimport { program } from \"commander\";\n\nimport * as url from \"url\";\n\nif (typeof __dirname == \"undefined\") {\n\tglobal[\"__filename\"] = url.fileURLToPath(import.meta.url);\n\tglobal[\"__dirname\"] = url.fileURLToPath(new URL(\".\", import.meta.url));\n}\n\nfunction FindPluginData(file) {\n\tlet files = fs.readdirSync(file);\n\tfor (let f of files) {\n\t\tif (f.endsWith(\".uplugin\")) {\n\t\t\treturn {\n\t\t\t\tfile: path.join(file, f),\n\t\t\t\tdir: file,\n\t\t\t\tname: f.replace(\".uplugin\", \"\"),\n\t\t\t};\n\t\t}\n\t}\n\n\tlet upDir = path.resolve(file, \"..\");\n\n\tif (upDir != file) {\n\t\treturn FindPluginData(upDir);\n\t} else {\n\t\treturn false;\n\t}\n}\n\nasync function IQProjectFolder(file) {\n\tfile = file || process.cwd();\n\tlet files = fs.readdirSync(file);\n\tfor (let f of files) {\n\t\tif (f.endsWith(\".uproject\")) {\n\t\t\treturn {\n\t\t\t\tfile: path.join(file, f),\n\t\t\t\tdir: file,\n\t\t\t\tname: f.replace(\".uproject\", \"\"),\n\t\t\t};\n\t\t}\n\t}\n\n\tlet upDir = path.resolve(file, \"..\");\n\n\tif (upDir != file) {\n\t\treturn await IQProjectFolder(upDir);\n\t} else {\n\t\tthrow new Error(\"No unreal project found in this folder.\".red);\n\t\treturn false;\n\t}\n}\n\nasync function IQPluginFolder(file) {\n\tfile = file || process.cwd();\n\tlet files = fs.readdirSync(file);\n\tfor (let f of files) {\n\t\tif (f.endsWith(\".uplugin\")) {\n\t\t\treturn {\n\t\t\t\tfile: path.join(file, f),\n\t\t\t\tdir: file,\n\t\t\t\tname: f.replace(\".uplugin\", \"\"),\n\t\t\t};\n\t\t}\n\t}\n\n\tlet upDir = path.resolve(file, \"..\");\n\n\tif (upDir != file) {\n\t\treturn await IQPluginFolder(upDir);\n\t} else {\n\t\tlet project = await IQProjectFolder();\n\t\tif (project) {\n\t\t\tlet pluginsDir = path.join(project.dir, \"Plugins\");\n\t\t\tif (!fs.existsSync(pluginsDir)) {\n\t\t\t\tconsole.log(\"Missing plugins folder. Creating one...\".yellow);\n\t\t\t\tfs.mkdirSync(pluginsDir);\n\t\t\t}\n\t\t\tlet pluginsList = fs\n\t\t\t\t.readdirSync(path.join(project.dir, \"Plugins\"))\n\t\t\t\t.filter((f) => !f.startsWith(\".\"));\n\t\t\tif (pluginsList.length == 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No plugins found in this project. Please create one via the Unreal Editor\".yellow\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet answers = await inquirer.prompt([\n\t\t\t\t{\n\t\t\t\t\ttype: \"list\",\n\t\t\t\t\tname: \"plugin\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Which plugin do you want to use (To create a new one use the unreal engine editor)\",\n\t\t\t\t\tchoices: pluginsList,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tprocess.chdir(path.join(project.dir, \"Plugins\", answers.plugin));\n\t\t\treturn await IQPluginFolder();\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport async function CreateModule(plugin, name) {\n\tlet pluginData = {};\n\tlet dir = plugin.dir;\n\ttry {\n\t\tpluginData = JSON.parse(fs.readFileSync(plugin.file, \"utf8\"));\n\t} catch (e) {\n\t\tthrow new Error(\n\t\t\t\"Failed to parse plugin file. Please make sure it is a valid JSON file.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tif (!pluginData.Modules) {\n\t\tpluginData.Modules = [];\n\t}\n\n\tlet existingModule = pluginData.Modules.find((m) => m.Name === name);\n\tif (existingModule) {\n\t\tthrow new Error(\n\t\t\t\"A module with this name already exists in this plugin.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tpluginData.Modules.push({\n\t\tName: name,\n\t\tType: \"Runtime\",\n\t\tLoadingPhase: \"PostConfigInit\", // PostConfigInit is for registering our shaders\n\t});\n\n\tfs.writeFileSync(\n\t\tplugin.file + \".back\",\n\t\tfs.readFileSync(plugin.file, \"utf8\")\n\t);\n\tfs.writeFileSync(plugin.file, JSON.stringify(pluginData, null, \"\\t\"));\n\n\tfs.mkdirSync(path.join(dir, \"Source\", name), { recursive: true });\n\tfs.mkdirSync(path.join(dir, \"Source\", name, \"Private\"), {\n\t\trecursive: true,\n\t});\n\tfs.mkdirSync(path.join(dir, \"Source\", name, \"Public\"), { recursive: true });\n\tfs.mkdirSync(path.join(dir, \"Shaders\"), { recursive: true });\n\tfs.mkdirSync(path.join(dir, \"Shaders\", name, \"\"), { recursive: true });\n\tfs.writeFileSync(\n\t\tpath.join(dir, \"Source\", name, name + \".Build.cs\"),\n\t\tfs\n\t\t\t.readFileSync(\n\t\t\t\tpath.join(__dirname, \"./src/template/Template.Build.cs\"),\n\t\t\t\t\"utf8\"\n\t\t\t)\n\t\t\t.replace(/\\$\\{MODULE_NAME\\}/gm, name)\n\t);\n\tfs.writeFileSync(\n\t\tpath.join(dir, \"Source\", name, \"Private\", name + \".cpp\"),\n\t\tfs\n\t\t\t.readFileSync(\n\t\t\t\tpath.join(__dirname, \"./src/template/ModulePrivate.cpp\"),\n\t\t\t\t\"utf8\"\n\t\t\t)\n\t\t\t.replace(/\\$\\{MODULE_NAME\\}/gm, name)\n\t\t\t.replace(/\\$\\{PLUGIN_NAME\\}/gm, plugin.name)\n\t);\n\tfs.writeFileSync(\n\t\tpath.join(dir, \"Source\", name, \"Public\", name + \".h\"),\n\t\tfs\n\t\t\t.readFileSync(\n\t\t\t\tpath.join(__dirname, \"./src/template/ModulePublic.h\"),\n\t\t\t\t\"utf8\"\n\t\t\t)\n\t\t\t.replace(/\\$\\{MODULE_NAME\\}/gm, name)\n\t);\n\n\treturn path.join(dir, \"Source\", name);\n}\n\nasync function IQModuleFolder(file) {\n\tfile = file || process.cwd();\n\tlet files = fs.readdirSync(file);\n\tfor (let f of files) {\n\t\tif (\n\t\t\tf.endsWith(\".Build.cs\") &&\n\t\t\tfs.readFileSync(path.join(file, f), \"utf8\").includes(\"ModuleRules\")\n\t\t) {\n\t\t\treturn {\n\t\t\t\tfile: path.join(file, f),\n\t\t\t\tdir: file,\n\t\t\t\tname: f.replace(\".Build.cs\", \"\"),\n\t\t\t};\n\t\t}\n\t}\n\n\tlet upDir = path.resolve(file, \"..\");\n\n\tif (upDir != file) {\n\t\treturn await IQModuleFolder(upDir);\n\t} else {\n\t\tlet plugin = await IQPluginFolder();\n\t\tif (plugin) {\n\t\t\tlet answers = await inquirer.prompt([\n\t\t\t\t{\n\t\t\t\t\ttype: \"list\",\n\t\t\t\t\tname: \"module\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Which module do you want to use (Warning: Don't use the default module for shaders, it will cause errors, please create a new one instead)\",\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t...fs\n\t\t\t\t\t\t\t.readdirSync(path.join(plugin.dir, \"Source\"))\n\t\t\t\t\t\t\t.filter((f) => !f.startsWith(\".\")),\n\t\t\t\t\t\t\"Create New\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\tname: \"name\",\n\t\t\t\t\tmessage: \"What is the name of the module\",\n\t\t\t\t\twhen: (answers) => answers.module == \"Create New\",\n\t\t\t\t},\n\t\t\t]);\n\t\t\tif (answers.module == \"Create New\") {\n\t\t\t\tprocess.chdir(await CreateModule(plugin, answers.name));\n\t\t\t\tconsole.log(\"Created module \".green + answers.name.green);\n\t\t\t} else {\n\t\t\t\tprocess.chdir(path.join(plugin.dir, \"Source\", answers.module));\n\t\t\t}\n\t\t\treturn await IQModuleFolder();\n\t\t}\n\t\treturn false;\n\t}\n}\n\nprogram\n\t.name(\"shadeup\")\n\t.description(\"CLI tool for compiling shadeup files\")\n\t.version(\"1.2.1\")\n\t.option(\"-v\")\n\t.action(async (opts) => {\n\t\tconsole.log(\"Shadeup v1.2.1\".magenta + \" (UE 5.3 compatible)\".grey);\n\t\tif (opts.v) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tlet project = await IQProjectFolder();\n\t\t\tlet plugin = await IQPluginFolder();\n\t\t\tlet module = await IQModuleFolder();\n\n\t\t\tlet choices = templates.map((t) => t.display());\n\t\t\tlet templateMap = {};\n\t\t\tfor (let t of templates) {\n\t\t\t\ttemplateMap[t.display()] = t;\n\t\t\t}\n\n\t\t\tlet answers = await inquirer.prompt([\n\t\t\t\t{\n\t\t\t\t\ttype: \"list\",\n\t\t\t\t\tname: \"Template\",\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tlet inst = new templateMap[answers.Template](\n\t\t\t\tproject,\n\t\t\t\tplugin,\n\t\t\t\tmodule\n\t\t\t);\n\t\t\tlet examps = templateMap[answers.Template].examples();\n\t\t\tlet exampleAns = await inquirer.prompt([\n\t\t\t\t{\n\t\t\t\t\ttype: \"list\",\n\t\t\t\t\tname: \"Example\",\n\t\t\t\t\tchoices: examps.map((e) => ({\n\t\t\t\t\t\tname: `${e[1]} ` + `(${e[2]})`.grey,\n\t\t\t\t\t\tvalue: e[0],\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tinst.example = exampleAns.Example;\n\n\t\t\tawait inst.prompt(inquirer);\n\t\t\tlet mdFile = await inst.generate();\n\n\t\t\tconsole.log(\"Done\".green);\n\t\t\tconsole.log(\"\");\n\t\t\tconsole.log(\n\t\t\t\tboxen(mdFile.grey, {\n\t\t\t\t\tpadding: 1,\n\t\t\t\t\tborderColor: \"green\",\n\t\t\t\t\ttextAlignment: \"center\",\n\t\t\t\t\tborderStyle: \"round\",\n\t\t\t\t\ttitle: \"Next Step\",\n\t\t\t\t\ttitleAlignment: \"center\",\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tconsole.log(\n\t\t\t\tboxen(\n\t\t\t\t\t`https://unreal.shadeup.dev/docs/${templateMap[\n\t\t\t\t\t\tanswers.Template\n\t\t\t\t\t].link()}/${inst.example}`.grey,\n\t\t\t\t\t{\n\t\t\t\t\t\tpadding: 1,\n\t\t\t\t\t\tborderColor: \"blue\",\n\t\t\t\t\t\ttextAlignment: \"center\",\n\t\t\t\t\t\tborderStyle: \"round\",\n\t\t\t\t\t\ttitle: \"Useful Reading\",\n\t\t\t\t\t\ttitleAlignment: \"center\",\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t});\n\nprogram\n\t.command(\"init\")\n\t.description(\"Initializes a shadeup module inside of a plugin directory\")\n\t.argument(\"<name>\", \"Name of the module\")\n\t.action((name, options) => {\n\t\tconsole.log(\"Initializing module \" + name);\n\t\tlet dir = path.resolve(process.cwd());\n\t\tlet files = fs.readdirSync(dir);\n\t\tlet plugin = null;\n\n\t\tfor (let f of files) {\n\t\t\tif (f.endsWith(\".uplugin\")) {\n\t\t\t\tplugin = f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!plugin) {\n\t\t\tconsole.error(\n\t\t\t\t\"No .uplugin found in current directory. Please navigate to the plugin directory you wish to initialize.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tlet pluginData = {};\n\t\ttry {\n\t\t\tpluginData = JSON.parse(\n\t\t\t\tfs.readFileSync(path.join(dir, plugin), \"utf8\")\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tconsole.error(\n\t\t\t\t\"Failed to parse plugin file. Please make sure it is a valid JSON file.\"\n\t\t\t);\n\t\t\tconsole.error(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pluginData.Modules) {\n\t\t\tpluginData.Modules = [];\n\t\t}\n\n\t\tlet existingModule = pluginData.Modules.find((m) => m.Name === name);\n\t\tif (existingModule) {\n\t\t\tconsole.error(\n\t\t\t\t\"A module with this name already exists in this plugin.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tpluginData.Modules.push({\n\t\t\tName: name,\n\t\t\tType: \"Runtime\",\n\t\t\tLoadingPhase: \"PostConfigInit\", // PostConfigInit is for registering our shaders\n\t\t});\n\n\t\tfs.writeFileSync(\n\t\t\tpath.join(dir, plugin),\n\t\t\tJSON.stringify(pluginData, null, \"\\t\")\n\t\t);\n\n\t\tfs.mkdirSync(path.join(dir, \"Source\", name), { recursive: true });\n\t\tfs.mkdirSync(path.join(dir, \"Source\", name, \"Private\"), {\n\t\t\trecursive: true,\n\t\t});\n\t\tfs.mkdirSync(path.join(dir, \"Source\", name, \"Public\"), {\n\t\t\trecursive: true,\n\t\t});\n\t\tfs.mkdirSync(path.join(dir, \"Shaders\"), { recursive: true });\n\t\tfs.mkdirSync(path.join(dir, \"Shaders\", name, \"\"), { recursive: true });\n\t\tfs.writeFileSync(\n\t\t\tpath.join(dir, \"Source\", name, name + \".Build.cs\"),\n\t\t\tfs\n\t\t\t\t.readFileSync(\n\t\t\t\t\tpath.join(__dirname, \"./src/template/Template.Build.cs\"),\n\t\t\t\t\t\"utf8\"\n\t\t\t\t)\n\t\t\t\t.replace(/\\$\\{MODULE_NAME\\}/gm, name)\n\t\t);\n\t\tfs.writeFileSync(\n\t\t\tpath.join(dir, \"Shaders\", \"example.shadeup\"),\n\t\t\t`// This is an example shader. You can delete this file and create your own.\n\n@module \"${name}\"\n\ncompute Example {\n\tShader = {\n\t\t[numthreads(1, 1, 1)]\n\t\tvoid Main(uint3 ThreadId : SV_DispatchThreadID) {\n\t\t\t// Write your shader here.\n\t\t}\n\t};\n}`\n\t\t);\n\n\t\tconsole.log(\"Module initialized.\");\n\t});\n\nprogram\n\t.command(\"watch\")\n\t.description(\"Watch shadeup file(s) and recompile on change\")\n\t.argument(\"<files>\", \"List of files to watch\")\n\t.action((str, options) => {});\n\nprogram.parse();\n"
  },
  {
    "path": "unreal-engine/examples/pixel.shadeup",
    "content": "#define x 1\n\nnamespace MyCustom;\n\npixel MyShader(\n\tin float2 uv : TEXCOORD0,\n\tout float4 OutColor : SV_Target0,\n\tTexture2D<float3> InputTexture\n) {\n\tOutColor = float4(1,1,1,1);\n}\n\nstruct MyStruct {\n\tBody = {\n\t\tfloat3 Position;\n\t\tfloat3 Velocity;\n\t\tfloat3 Force;\n\t}\n\n\tShader = {\n\t\tfloat2 uv;\n\t\tfloat4 Color;\n\t}\n}\n\nnode TerraOutput {\n\tDisplayName = \"Terra Output\";\n\tFunctionName = \"GetTerraMaterialOutput\";\n\t\n\tInputs = [\n\t\t{\n\t\t\tName = \"Height\";\n\t\t\tComponents = 1;\n\t\t\tExposed = 1;\n\t\t\tOrder = 0;\n\t\t\tDefault = 0.f;\n\t\t}\n\t];\n}\n\nshared Utils {\n\tShader = {\n\t\tfloat3 GetTerraMaterialOutput(float Height) {\n\t\t\treturn float3(0,0,0);\n\t\t}\n\t}\n}\n\ncompute RenderFromMaterial {\n\tMaterial\n\n\tPermutations = [\n\t\t{\n\t\t\tType = int\n\t\t\tName = \"OUTPUT_INDEX\"\n\t\t\tRange = 2\n\t\t}\n\t]\n\n\tDefines = [\n\t\tTHREADGROUPSIZE_X = 32\n\t]\n\n\tbool PermutationFilter(const FMaterialShaderPermutationParameters& Parameters) {\n\t\tconst bool bIsCompatible =\n\t\t\tParameters.MaterialParameters.MaterialDomain == MD_Surface\n\t\t\t&& Parameters.MaterialParameters.BlendMode == BLEND_Opaque\n\t\t\t&& Parameters.MaterialParameters.ShadingModels == MSM_DefaultLit\n\t\t\t&& Parameters.MaterialParameters.bIsUsedWithVirtualHeightfieldMesh;\n\n\t\treturn bIsCompatible;\n\t}\n\n\tParameters = [\n\t\t{\n\t\t\tName = \"CellSize\"\n\t\t\tType = float3\n\t\t}\n\t]\n\n\tShader = {\n\t\tfloat3 Noise(float2 pos) {\n\t\t\treturn float3(0,0,0);\n\t\t}\n\n\t\tvoid Main(in ThreadId : uint3, out float4 color) {\n\t\t\tcolor = float4(Noise(float2(0,0)), 1);\n\t\t}\n\t}\n}\n\ncompute RenderFromMaterialNormals : RenderFromMaterial {\n\tParameters += [\n\t\t{\n\t\t\tName = \"BaseNormal\";\n\t\t\tType = float3;\n\t\t}\n\t];\n}\n\nsingleton MyRunner {\n\tvoid Render(float dt) {\n\t\t// Simple dispatch\n\t\tRenderFromMaterial::Dispatch(1, 1, 1);\n\n\t\t// Advanced dispatch\n\t\tauto params = RenderFromMaterial::Prepare();\n\t\tparams.SetParameter(\"CellSize\", float3(1,1,1));\n\t\tparams.SetPermutation(\"OUTPUT_INDEX\", 1);\n\t\tparams.UseMaterial(MaterialRenderProxy);\n\n\t\tparams.Dispatch(1, 1, 1);\n\t}\n}"
  },
  {
    "path": "unreal-engine/examples/version2.shadeup",
    "content": "// More expressive\n\nimport { Cube } from \"geometry\";\n\n// Geometry is pretty simple\nstruct Geometry {\n\tvertices: vec<float3>;\n\tindices: vec<uint>;\n\tnormals: vec<float3>;\n}\n\nimpl Geometry {\n\tfn translate(float3 Translation) -> Geometry {\n\t\treturn Geometry {\n\t\t\tvertices: vertices.map(v => v + Translation),\n\t\t\tindices,\n\t\t\tnormals\n\t\t};\n\t}\n\n\tfn operator+(float3 Translation) {\n\t}\n}\n\nmain {\n\n\tdraw(Cube);\n\n\tdraw(Cube + float3(1, 0, 0) * 2);\n}"
  },
  {
    "path": "unreal-engine/extension/shadeup/.vscode/launch.json",
    "content": "// A launch configuration that launches the extension inside a new window\n// Use IntelliSense to learn about possible attributes.\n// Hover to view descriptions of existing attributes.\n// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n{\n\t\"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Extension\",\n            \"type\": \"extensionHost\",\n            \"request\": \"launch\",\n            \"args\": [\n                \"--extensionDevelopmentPath=${workspaceFolder}\"\n            ]\n        }\n    ]\n}"
  },
  {
    "path": "unreal-engine/extension/shadeup/.vscodeignore",
    "content": ".vscode/**\n.vscode-test/**\n.gitignore\nvsc-extension-quickstart.md\n"
  },
  {
    "path": "unreal-engine/extension/shadeup/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to the \"shadeup\" extension will be documented in this file.\n\nCheck [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.\n\n## [Unreleased]\n\n- Initial release"
  },
  {
    "path": "unreal-engine/extension/shadeup/README.md",
    "content": "# shadeup README\n\nThis is the README for your extension \"shadeup\". After writing up a brief description, we recommend including the following sections.\n\n## Features\n\nDescribe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.\n\nFor example if there is an image subfolder under your extension project workspace:\n\n\\!\\[feature X\\]\\(images/feature-x.png\\)\n\n> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.\n\n## Requirements\n\nIf you have any requirements or dependencies, add a section describing those and how to install and configure them.\n\n## Extension Settings\n\nInclude if your extension adds any VS Code settings through the `contributes.configuration` extension point.\n\nFor example:\n\nThis extension contributes the following settings:\n\n* `myExtension.enable`: enable/disable this extension\n* `myExtension.thing`: set to `blah` to do something\n\n## Known Issues\n\nCalling out known issues can help limit users opening duplicate issues against your extension.\n\n## Release Notes\n\nUsers appreciate release notes as you update your extension.\n\n### 1.0.0\n\nInitial release of ...\n\n### 1.0.1\n\nFixed issue #.\n\n### 1.1.0\n\nAdded features X, Y, and Z.\n\n-----------------------------------------------------------------------------------------------------------\n\n## Working with Markdown\n\n**Note:** You can author your README using Visual Studio Code.  Here are some useful editor keyboard shortcuts:\n\n* Split the editor (`Cmd+\\` on macOS or `Ctrl+\\` on Windows and Linux)\n* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)\n* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets\n\n### For more information\n\n* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)\n* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)\n\n**Enjoy!**\n"
  },
  {
    "path": "unreal-engine/extension/shadeup/language-configuration.json",
    "content": "{\n    \"comments\": {\n        // symbol used for single line comment. Remove this entry if your language does not support line comments\n        \"lineComment\": \"//\",\n        // symbols used for start and end a block comment. Remove this entry if your language does not support block comments\n        \"blockComment\": [ \"/*\", \"*/\" ]\n    },\n    // symbols used as brackets\n    \"brackets\": [\n        [\"{\", \"}\"],\n        [\"[\", \"]\"],\n        [\"(\", \")\"]\n    ],\n    // symbols that are auto closed when typing\n    \"autoClosingPairs\": [\n        [\"{\", \"}\"],\n        [\"[\", \"]\"],\n        [\"(\", \")\"],\n        [\"\\\"\", \"\\\"\"],\n        [\"'\", \"'\"]\n    ],\n    // symbols that can be used to surround a selection\n    \"surroundingPairs\": [\n        [\"{\", \"}\"],\n        [\"[\", \"]\"],\n        [\"(\", \")\"],\n        [\"\\\"\", \"\\\"\"],\n        [\"'\", \"'\"]\n    ]\n}"
  },
  {
    "path": "unreal-engine/extension/shadeup/package.json",
    "content": "{\n    \"name\": \"shadeup\",\n    \"displayName\": \"Shadeup\",\n    \"description\": \"Shadeup Syntax Highlighting\",\n    \"version\": \"0.0.1\",\n    \"engines\": {\n        \"vscode\": \"^1.66.0\"\n    },\n    \"categories\": [\n        \"Programming Languages\"\n    ],\n    \"contributes\": {\n        \"languages\": [{\n            \"id\": \"shadeup\",\n            \"aliases\": [\"Shadeup\", \"shadeup\"],\n            \"extensions\": [\".shadeup\"],\n            \"configuration\": \"./language-configuration.json\",\n            \"icon\": {\n                \"light\": \"./icon.svg\",\n                \"dark\": \"./icon.svg\"\n            }\n        }],\n        \"grammars\": [{\n            \"language\": \"shadeup\",\n            \"scopeName\": \"source.shadeup\",\n            \"path\": \"./syntaxes/shadeup.tmLanguage.json\",\n            \"embeddedLanguages\": {\n                \"meta.embedded.block.hlsl\": \"hlsl\"\n            }\n        }]\n    }\n}"
  },
  {
    "path": "unreal-engine/extension/shadeup/syntaxes/shadeup.tmLanguage.json",
    "content": "{\n\t\"$schema\": \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n\t\"name\": \"Shadeup\",\n\t\"patterns\": [\n\t\t{\n\t\t\t\"include\": \"#comments\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#preprocessor\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#keywords\"\n\t\t},\n\t\t{\n\t\t\t\"include\": \"#strings\"\n\t\t},\n\t\t{\n\t\t\t\"comment\": \"Shader declarations\",\n\t\t\t\"begin\": \"^(\\\\bpixel|compute|vertex\\\\b)\\\\s+([A-Za-z0-9_]+)\\\\s*(\\\\([A-Za-z0-9<>_, ]*\\\\))\\\\s*\",\n\t\t\t\"beginCaptures\": {\n\t\t\t\t\"1\": {\n\t\t\t\t\t\"name\": \"keyword.shader.shadeup\"\n\t\t\t\t},\n\t\t\t\t\"2\": {\n\t\t\t\t\t\"name\": \"entity.name.function.shadeup\"\n\t\t\t\t},\n\t\t\t\t\"3\": {\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"#function-arguments\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"end\": \"(})\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"begin\": \"({)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?=})\",\n\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"include\": \"source.hlsl\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"function-arguments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"include\": \"#function-argument\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"function-argument\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"comment\": \"Args\",\n\t\t\t\t\t\"match\": \"\\\\b([A-Za-z0-9_<>]+)\\\\s+([A-Za-z0-9_]+)\\\\s*(?=,|\\\\))\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"patterns\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"include\": \"#type\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"2\": {\n\t\t\t\t\t\t\t\"name\": \"entity.name.function.arguments.shadeup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"keywords\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"keyword.control.shadeup\",\n\t\t\t\t\t\"match\": \"\\\\b(if|while|for|return)\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"type\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.shadeup\",\n\t\t\t\t\t\"match\": \"\\\\b(FVector3|FVector2|float|int|bool|float2|float3|float4|mat2|mat3|mat4|sampler2D|samplerCube)\\\\b\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"storage.type.shadeup\",\n\t\t\t\t\t\"match\": \"\\\\b([A-Za-z0-9_]+)(<[A-Za-z0-9_]+>)?\\\\b\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"preprocessor\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"match\": \"(#[A-Za-z0-9_]+)\\\\s+(.*)\",\n\t\t\t\t\t\"captures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"keyword.preprocessor.shadeup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"comments\": {\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.block.shadeup\",\n\t\t\t\t\t\"begin\": \"(\\\\/\\\\*)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.shadeup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(\\\\*\\\\/)\",\n\t\t\t\t\t\"endCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.shadeup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"comment.line.double-slash.shadeup\",\n\t\t\t\t\t\"begin\": \"(\\\\/\\\\/)\",\n\t\t\t\t\t\"beginCaptures\": {\n\t\t\t\t\t\t\"1\": {\n\t\t\t\t\t\t\t\"name\": \"punctuation.definition.comment.shadeup\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": \"(?:\\\\n|$)\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"strings\": {\n\t\t\t\"name\": \"string.quoted.double.shadeup\",\n\t\t\t\"begin\": \"\\\"\",\n\t\t\t\"end\": \"\\\"\",\n\t\t\t\"patterns\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"constant.character.escape.shadeup\",\n\t\t\t\t\t\"match\": \"\\\\\\\\.\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"scopeName\": \"source.shadeup\"\n}"
  },
  {
    "path": "unreal-engine/extension/shadeup/vsc-extension-quickstart.md",
    "content": "# Welcome to your VS Code Extension\n\n## What's in the folder\n\n* This folder contains all of the files necessary for your extension.\n* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension.\n* `syntaxes/shadeup.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization.\n* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets.\n\n## Get up and running straight away\n\n* Make sure the language configuration settings in `language-configuration.json` are accurate.\n* Press `F5` to open a new window with your extension loaded.\n* Create a new file with a file name suffix matching your language.\n* Verify that syntax highlighting works and that the language configuration settings are working.\n\n## Make changes\n\n* You can relaunch the extension from the debug toolbar after making changes to the files listed above.\n* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.\n\n## Add more language features\n\n* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs\n\n## Install your extension\n\n* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.\n* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.\n"
  },
  {
    "path": "unreal-engine/index.js",
    "content": "throw new Error(\"This is a CLI only package (for now)\");\n"
  },
  {
    "path": "unreal-engine/p.shadeup",
    "content": "@module \"TestShader\"\n\ncompute MyGradientShader {\n\tParameters = [\n\t\t{\n\t\t\tName = \"Texture\";\n\t\t\tType = RWTexture2D;\n\t\t}\n\t];\n\n\tPublic = {\n\t\tstatic void ShaderEnvironment(const FMaterialShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment) override\n\t\t{\n\t\t\tOutEnvironment.SetDefine(TEXT(\"CUSTOM_GLOBAL_DEF\"), \"1\");\n\t\t}\n\t};\n\n\tShader = {\n\t\t[numthreads(32, 32, 1)]\n\t\tvoid Main(uint3 ThreadId : SV_DispatchThreadID) {\n\t\t\tTexture[ThreadId.x, ThreadId.y] = float4(ThreadId.x / 128.f, ThreadId.y / 128.f, 0.0, 1.0);\n\t\t}\n\t};\n}\n\nactor MyGradientActor {\n\tPublic = {\n\t\tMaterialInterface Material;\n\t};\n\n\tPrivate = {\n\t\tRenderTarget RenderTarget;\n\n\t\tvoid Make() override {\n\t\t\tRenderTarget = AddRenderTarget(128, 128, Format.R8G8B8A8_UNORM);\n\t\t\tauto Plane = AddPlane();\n\t\t\tPlane.SetMaterial(0, Material);\n\n\t\t\tMaterial.SetTextureParameter(\"Texture\", RenderTarget);\n\t\t}\n\n\t\tvoid Tick(float DeltaTime) override {\n\t\t\tauto shader = MyGradientShader::Prepare();\n\t\t\tshader.SetTextureParameter(\"Texture\", RenderTarget);\n\t\t\tshader.Dispatch(128, 128, 1);\n\t\t}\n\t};\n}"
  },
  {
    "path": "unreal-engine/package.json",
    "content": "{\n\t\"name\": \"@shadeup/unreal\",\n\t\"version\": \"1.2.1\",\n\t\"description\": \"\",\n\t\"main\": \"index.js\",\n\t\"type\": \"module\",\n\t\"scripts\": {\n\t\t\"build\": \"npx nearleyc ./src/grammar.ne -o ./build/grammar.js\",\n\t\t\"parse\": \"npm run build && node test.js\",\n\t\t\"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n\t\t\"cli\": \"node cli.js\"\n\t},\n\t\"bin\": {\n\t\t\"shadeup-unreal\": \"./cli.js\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/AskingQuestions/Shadeup\"\n\t},\n\t\"author\": \"AskingQuestions <npm@jrmy.dev>\",\n\t\"license\": \"MIT\",\n\t\"dependencies\": {\n\t\t\"@typescript/vfs\": \"^1.5.0\",\n\t\t\"boxen\": \"^7.0.0\",\n\t\t\"colors\": \"^1.4.0\",\n\t\t\"commander\": \"^9.2.0\",\n\t\t\"inquirer\": \"^8.2.4\",\n\t\t\"nearley\": \"^2.20.1\",\n\t\t\"typescript\": \"^5.3.3\",\n\t\t\"uglify-js\": \"^3.17.4\",\n\t\t\"web-tree-sitter\": \"^0.20.8\"\n\t},\n\t\"devDependencies\": {\n\t\t\"archiver\": \"^5.3.1\"\n\t}\n}\n"
  },
  {
    "path": "unreal-engine/src/file.js",
    "content": "import fs from \"fs\";\nimport path from \"path\";\n\nimport ParsedValue from \"./types/value.js\";\n\nimport Compute from \"./types/compute.js\";\nimport Actor from \"./types/actor.js\";\nimport Factory from \"./types/factory.js\";\n\nimport * as url from 'url';\nconst __filename = url.fileURLToPath(import.meta.url);\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url));\n\nconst Types = {\n\tcompute: Compute,\n\tactor: Actor,\n\tfactory: Factory,\n};\n\nexport class ParsedFile {\n\tconstructor(file, data, lines) {\n\t\tthis.file = file;\n\t\tthis.data = data;\n\t\tthis.lines = lines;\n\n\t\tthis.preprocessor = [];\n\t\tthis.meta = new Map();\n\t\tthis.definitions = new Map();\n\n\t\tthis.module = \"Shadeup\";\n\t\tthis.plugin = \"Shadeup\";\n\t\tthis.outputDir = path.join(__dirname, \"../dist\");\n\t}\n\n\tmapToLine(index) {\n\t\tfor (let i = 0; i < this.lines.length; i++) {\n\t\t\tif (this.lines[i] > index) {\n\t\t\t\treturn [i, index - this.lines[i - 1]];\n\t\t\t}\n\t\t}\n\n\t\treturn [this.lines.length, index - this.lines[this.lines.length - 1]];\n\t}\n\n\terror(context, message) {\n\t\tlet loc = this.mapToLine(context.location);\n\t\tlet d = fs.readFileSync(this.file, \"utf8\");\n\t\tlet lines = d.split(\"\\n\");\n\t\tlet line = lines[loc[0]];\n\t\tlet prevLines = [];\n\n\t\tlet maxDigits = 0;\n\n\t\tfor (let i = loc[0] - 2; i <= loc[0]; i++) {\n\t\t\tif (i >= 0) {\n\t\t\t\tlet digits = (i+1).toString().length;\n\t\t\t\tif (digits > maxDigits) {\n\t\t\t\t\tmaxDigits = digits;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = loc[0] - 2; i <= loc[0]; i++) {\n\t\t\tif (i >= 0) {\n\t\t\t\tprevLines.push(`${(i+1).toString().padStart(maxDigits, \" \")}  ${lines[i].replace(/\\t/g, \"    \")}`);\n\t\t\t}\n\t\t}\n\n\t\tlet offset = 0;\n\t\tfor (let c = 0; c < line.length; c++) {\n\t\t\tif (c < loc[1]) {\n\t\t\t\tif (line[c] == \"\\t\") {\n\t\t\t\t\toffset += 4;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// line = line.replace(/\\t/g, \"    \");\n\t\tif (isNaN(loc[1])) {\n\t\t\tthrow new Error(\"Invalid context provided to error \" + JSON.stringify(context));\n\t\t}\n\t\tconsole.log(\"\");\n\t\tconsole.error(prevLines.join(\"\\n\"));\n\t\tlet cols = 0;\n\t\tfor (let c = 0; c < line.length; c++) {\n\t\t\tif (c < loc[1]) {\n\t\t\t\tif (line[c] == \"\\t\") {\n\t\t\t\t\tcols += 4;\n\t\t\t\t}else{\n\t\t\t\t\tcols++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconsole.error(`${new Array(cols + maxDigits + 2).join(\" \")}^`);\n\t\tconsole.error(`ERROR ${this.file}:${loc[0]+1}:${loc[1]} ${message}`);\n\t\tconsole.log(\"\");\n\t}\n\n\tgenerate() {\n\t\tfor (let item of this.data.items) {\n\t\t\tif (item.type === \"define\") {\n\t\t\t\tlet name = item.identifier.text;\n\t\t\t\tif (this.definitions.has(name)) {\n\t\t\t\t\tthis.error(item.identifier, `Duplicate definition of \"${name}\"`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.definitions.set(name, new Types[item.keyword.text](this, item));\n\t\t\t}else if (item.type === \"meta\") {\n\t\t\t\tlet name = item.identifier.text;\n\t\t\t\tif (this.meta.has(name)) {\n\t\t\t\t\tthis.error(item.identifier, `Duplicate meta definition of \"${name}\"`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.meta.set(name, new ParsedValue(this, item.value));\n\t\t\t}else if (item.type == \"pre\") {\n\t\t\t\tthis.preprocessor.push(item.text);\n\t\t\t}\n\t\t}\n\n\t\tif (this.meta.has(\"module\")) {\n\t\t\tthis.module = this.meta.get(\"module\").value();\n\t\t}\n\n\t\tfor (let definition of this.definitions.values()) {\n\t\t\tdefinition.verify();\n\t\t}\n\n\t\tfor (let definition of this.definitions.values()) {\n\t\t\tdefinition.generate();\n\t\t}\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/grammar.ne",
    "content": "@include \"whitespace.ne\"\n@include \"string.ne\"\n\nmain ->\t\t\t\troot\n\t\t\t\t\t{% (a) => a[0] %}\n\nroot ->\t\t\t\t((comment\n\t\t\t\t\t| meta\n\t\t\t\t\t| preprocessor\n\t\t\t\t\t| define\n\t\t\t\t\t) _):*\n\t\t\t\t\t{% (a) => ({\n\t\t\t\t\t\ttype: \"root\",\n\t\t\t\t\t\titems: a[0].map(x => x ? x[0][0] : null).filter(x => x !== null)\n\t\t\t\t\t}) %}\n\n\nkeyword ->\t\t\t(\"pixel\" | \"vertex\" | \"compute\" | \"singleton\" | \"struct\" | \"actor\" | \"factory\")\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"keyword\",\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t\ttext: a[0][0]\n\t\t\t\t\t}) %}\n\ncomment ->\t\t\t\"//\" [^\\r\\n]:*\n\t\t\t\t\t{% () => null %}\n\npreprocessor ->\t\t\"#\" [^\\r\\n]:*\n\t\t\t\t\t{% ([a,b], location) => ({\n\t\t\t\t\t\ttype: \"pre\",\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t\ttext: b.join(\"\")\n\t\t\t\t\t}) %}\n\nmeta ->\t\t\t\t\"@\" identifier __ value\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"meta\",\n\t\t\t\t\t\tidentifier: a[1],\n\t\t\t\t\t\tvalue: a[3],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nlp ->\t\t\t\t\"(\"\nrp ->\t\t\t\t\")\"\nlcb ->\t\t\t\t\"{\"\nrcb ->\t\t\t\t\"}\"\nlsb ->\t\t\t\t\"[\"\nrsb ->\t\t\t\t\"]\"\n\ndefine ->\t\t\tkeyword __ identifier _ inherits:? _ block\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"define\",\n\t\t\t\t\t\tkeyword: a[0],\n\t\t\t\t\t\tidentifier: a[2],\n\t\t\t\t\t\tinherits: a[4],\n\t\t\t\t\t\tblock: a[6],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t})%}\n\nblock ->\t\t\tlcb _ ((comment|cpp_code|shader_code|property|function) _):* rcb\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"block\",\n\t\t\t\t\t\titems: a[2].map(x => x ? x[0][0] : null).filter(x => x !== null),\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nfunction ->\t\t\tidentifier __ identifier _ lp _ rp _ code\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\toutput: a[0],\n\t\t\t\t\t\tidentifier: a[2],\n\t\t\t\t\t\tcode: a[8],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nshader_code ->  \t\"Shader\" _ operator _ code _ \";\"\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"shader\",\n\t\t\t\t\t\tcode: a[4],\n\t\t\t\t\t\toperator: a[2],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\ncpp_code ->  \t\t(\"PrivateInclude\"|\"Public\"|\"Private\"|\"Header\"|\"Body\"|\"Include\") _ operator _ code _ \";\"\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"cpp\",\n\t\t\t\t\t\tvisibility: a[0],\n\t\t\t\t\t\tcode: a[4],\n\t\t\t\t\t\toperator: a[2],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\noperator ->\t\t\t(\"-=\" | \"=\" | \"+=\")\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\ttext: a[0][0],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nproperty ->\t\t\tidentifier _ operator _ value _ \";\"\n\t\t\t\t\t{% (a, location, reject) => a[0].text == \"Shader\" ? reject : ({\n\t\t\t\t\t\ttype: \"property\",\n\t\t\t\t\t\tidentifier: a[0],\n\t\t\t\t\t\toperator: a[2],\n\t\t\t\t\t\tvalue: a[4],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\narray_value ->\t\tvalue _ \",\" _ array_value\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"array_value\",\n\t\t\t\t\t\tvalues: [a[0], a[4]],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\t\t\t\t\t| value\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"array_value\",\n\t\t\t\t\t\tvalues: [a[0]],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\narray ->\t\t\tlsb _ array_value _ rsb\n\t\t\t\t\t{% (a, location) => {\n\t\t\t\t\t\tlet flatten = (v) => {\n\t\t\t\t\t\t\tlet arr = [];\n\t\t\t\t\t\t\tfor (let s of v.values) {\n\t\t\t\t\t\t\t\tif (s.type == \"array_value\") {\n\t\t\t\t\t\t\t\t\tarr = [...arr, ...flatten(s)];\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tarr.push(s);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn arr;\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\tvalues: flatten(a[2]),\n\t\t\t\t\t\t\tlocation\n\t\t\t\t\t\t};\n\t\t\t\t\t} %}\n\nstring ->\t\t\t(dqstring | sqstring)\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\ttext: a[0][0],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nvalue ->\t\t\t(array | block | string | number | boolean | identifier)\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"value\",\n\t\t\t\t\t\tvalue: a[0][0],\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nboolean ->\t\t\t(\"true\" | \"false\")\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\t\tvalue: a[0][0] == \"true\",\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\ninherits ->\t\t\t\":\" _ identifier_list\n\t\t\t\t\t{% ([a, _, b], location) => ({\n\t\t\t\t\t\ttype: \"inherits\",\n\t\t\t\t\t\titems: b,\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\nidentifier_list ->\tidentifier _ \",\" _ identifier_list\n\t\t\t\t\t| identifier\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"identifier_list\",\n\t\t\t\t\t\titems: a,\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\t\t\t\t   \nidentifier -> \t\t[a-zA-Z_] [a-zA-Z0-9_<>*]:*\n\t\t\t\t\t{% ([a, b], location, reject) => {\n\t\t\t\t\t\tlet id = a + b.join(\"\");\n\n\t\t\t\t\t\tif (id == \"true\" || id == \"false\") {\n\t\t\t\t\t\t\treturn reject;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"identifier\",\n\t\t\t\t\t\t\t\ttext: id,\n\t\t\t\t\t\t\t\tlocation\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} %}\n\nnumber ->\t\t\t[0-9.] [0-9\\.f]:*\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\ttext: a[0] + a[1].join(\"\"),\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}\n\ncode ->\t\t\t\t(\n\t\t\t\t\t\t[^]:+\n\t\t\t\t\t\t{%\n\t\t\t\t\t\t\tfunction(a,l, reject) {\n\t\t\t\t\t\t\t\tconst txt = a[0].join('');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (txt[0] != \"{\") {\n\t\t\t\t\t\t\t\t\treturn reject;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Count curly braces balanced and ignore strings and preprocessor defs\n\t\t\t\t\t\t\t\tlet indString = false;\n\t\t\t\t\t\t\t\tlet insString = false;\n\t\t\t\t\t\t\t\tlet inPre = false;\n\t\t\t\t\t\t\t\tlet isEscaped = false;\n\t\t\t\t\t\t\t\tlet curlyCount = 0;\n\t\t\t\t\t\t\t\tfor (let i = 0; i < txt.length; i++) {\n\t\t\t\t\t\t\t\t\tif (isEscaped) {\n\t\t\t\t\t\t\t\t\t\tisEscaped = false;\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (txt[i] === '\\\\') {\n\t\t\t\t\t\t\t\t\t\tisEscaped = true;\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!insString && txt[i] === '\"') {\n\t\t\t\t\t\t\t\t\t\tindString = !indString;\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!indString && txt[i] === \"'\") {\n\t\t\t\t\t\t\t\t\t\tinsString = !insString;\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (txt[i] === '#') {\n\t\t\t\t\t\t\t\t\t\tinPre = true;\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (txt[i] === '\\n') {\n\t\t\t\t\t\t\t\t\t\tinPre = false;\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!indString && !insString && !inPre) {\n\t\t\t\t\t\t\t\t\t\tif (txt[i] === '{') {\n\t\t\t\t\t\t\t\t\t\t\tcurlyCount++;\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (curlyCount == 0) {\n\t\t\t\t\t\t\t\t\t\t\treturn reject;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (txt[i] === '}') {\n\t\t\t\t\t\t\t\t\t\t\tcurlyCount--;\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (curlyCount > 0) {\n\t\t\t\t\t\t\t\t\treturn reject;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\treturn a[0];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t%}\n\t\t\t\t\t)\n\t\t\t\t\t{% (a, location) => ({\n\t\t\t\t\t\ttype: \"code\",\n\t\t\t\t\t\ttext: a[0].join('').substring(1, a[0].length - 1),\n\t\t\t\t\t\tlocation\n\t\t\t\t\t}) %}"
  },
  {
    "path": "unreal-engine/src/parse.js",
    "content": "import nearley from \"nearley\";\nimport grammar from \"../build/grammar.js\";\nimport fs from \"fs\";\nimport { ParsedFile } from \"./file.js\";\n\nexport function parse(file) {\n\t\tconst parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));\n\t\t\n\t\tlet f;\n\n\t\ttry {\n\t\t\tf = fs.readFileSync(file, \"utf8\");\n\t\t} catch (e) {\n\t\t\tconsole.error(`Could not read file \"${file}\". ` + e);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tparser.feed(f);\n\t\t} catch (e) {\n\t\t\tconsole.error(`${file} ` + e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (parser.results.length === 0) {\n\t\t\tconsole.error(`Parsing error. Are you missing a semicolon or curly brace?`);\n\t\t\treturn;\n\t\t}\n\n\t\tlet lines = [];\n\t\tfor (let i = 0; i < f.length; i++) {\n\t\t\tif (f[i] === \"\\n\") {\n\t\t\t\tlines.push(i);\n\t\t\t}\n\t\t}\n\n\t\treturn new ParsedFile(file, parser.results[0], lines);\n}"
  },
  {
    "path": "unreal-engine/src/plugin_template/ShadeupExamplePlugin.uplugin",
    "content": "{\n\t\"FileVersion\": 3,\n\t\"Version\": 1,\n\t\"VersionName\": \"1.0\",\n\t\"FriendlyName\": \"ShadeupExamplePlugin\",\n\t\"Description\": \"\",\n\t\"Category\": \"Other\",\n\t\"CreatedBy\": \"\",\n\t\"CreatedByURL\": \"\",\n\t\"DocsURL\": \"\",\n\t\"MarketplaceURL\": \"\",\n\t\"SupportURL\": \"\",\n\t\"CanContainContent\": true,\n\t\"IsBetaVersion\": false,\n\t\"IsExperimentalVersion\": false,\n\t\"Installed\": false,\n\t\"Modules\": [\n\t\t{\n\t\t\t\"Name\": \"ShadeupExamplePlugin\",\n\t\t\t\"Type\": \"Runtime\",\n\t\t\t\"LoadingPhase\": \"Default\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "unreal-engine/src/plugin_template/Source/ShadeupTestPlugin/Private/ShadeupExamplePlugin.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"ShadeupExamplePlugin.h\"\n\n#define LOCTEXT_NAMESPACE \"FShadeupExamplePluginModule\"\n\nvoid FShadeupExamplePluginModule::StartupModule()\n{\n\t// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module\n}\n\nvoid FShadeupExamplePluginModule::ShutdownModule()\n{\n\t// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,\n\t// we call this function before unloading the module.\n}\n\n#undef LOCTEXT_NAMESPACE\n\t\nIMPLEMENT_MODULE(FShadeupExamplePluginModule, ShadeupExamplePlugin)"
  },
  {
    "path": "unreal-engine/src/plugin_template/Source/ShadeupTestPlugin/Public/ShadeupExamplePlugin.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Modules/ModuleManager.h\"\n\nclass FShadeupExamplePluginModule : public IModuleInterface\n{\npublic:\n\n\t/** IModuleInterface implementation */\n\tvirtual void StartupModule() override;\n\tvirtual void ShutdownModule() override;\n};\n"
  },
  {
    "path": "unreal-engine/src/plugin_template/Source/ShadeupTestPlugin/ShadeupExamplePlugin.Build.cs",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\nusing UnrealBuildTool;\n\npublic class ShadeupExamplePlugin : ModuleRules\n{\n\tpublic ShadeupExamplePlugin(ReadOnlyTargetRules Target) : base(Target)\n\t{\n\t\tPCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;\n\t\t\n\t\tPublicIncludePaths.AddRange(\n\t\t\tnew string[] {\n\t\t\t\t// ... add public include paths required here ...\n\t\t\t}\n\t\t\t);\n\t\t\t\t\n\t\t\n\t\tPrivateIncludePaths.AddRange(\n\t\t\tnew string[] {\n\t\t\t\t// ... add other private include paths required here ...\n\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\n\t\tPublicDependencyModuleNames.AddRange(\n\t\t\tnew string[]\n\t\t\t{\n\t\t\t\t\"Core\",\n\t\t\t\t// ... add other public dependencies that you statically link with here ...\n\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\n\t\tPrivateDependencyModuleNames.AddRange(\n\t\t\tnew string[]\n\t\t\t{\n\t\t\t\t\"CoreUObject\",\n\t\t\t\t\"Engine\",\n\t\t\t\t\"Slate\",\n\t\t\t\t\"SlateCore\",\n\t\t\t\t// ... add private dependencies that you statically link with here ...\t\n\t\t\t}\n\t\t\t);\n\t\t\n\t\t\n\t\tDynamicallyLoadedModuleNames.AddRange(\n\t\t\tnew string[]\n\t\t\t{\n\t\t\t\t// ... add any modules that your module loads dynamically here ...\n\t\t\t}\n\t\t\t);\n\t}\n}\n"
  },
  {
    "path": "unreal-engine/src/string.ne",
    "content": "# Matches various kinds of string literals\n\n# Double-quoted string\ndqstring -> \"\\\"\" dstrchar:* \"\\\"\" {% function(d) {return d[1].join(\"\"); } %}\nsqstring -> \"'\"  sstrchar:* \"'\"  {% function(d) {return d[1].join(\"\"); } %}\nbtstring -> \"`\"  [^`]:*    \"`\"  {% function(d) {return d[1].join(\"\"); } %}\n\ndstrchar -> [^\\\\\"\\n] {% id %}\n    | \"\\\\\" strescape {%\n    function(d) {\n        return JSON.parse(\"\\\"\"+d.join(\"\")+\"\\\"\");\n    }\n%}\n\nsstrchar -> [^\\\\'\\n] {% id %}\n    | \"\\\\\" strescape\n        {% function(d) { return JSON.parse(\"\\\"\"+d.join(\"\")+\"\\\"\"); } %}\n    | \"\\\\'\"\n        {% function(d) {return \"'\"; } %}\n\nstrescape -> [\"\\\\/bfnrt] {% id %}\n    | \"u\" [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] {%\n    function(d) {\n        return d.join(\"\");\n    }\n%}"
  },
  {
    "path": "unreal-engine/src/template/ModulePrivate.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}.h\"\n\n#include \"Misc/Paths.h\"\n#include \"Misc/FileHelper.h\"\n#include \"RHI.h\"\n#include \"GlobalShader.h\"\n#include \"RHICommandList.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderTargetPool.h\"\n#include \"Runtime/Core/Public/Modules/ModuleManager.h\"\n#include \"Interfaces/IPluginManager.h\"\n\n#define LOCTEXT_NAMESPACE \"F${MODULE_NAME}\"\n\nvoid F${MODULE_NAME}::StartupModule()\n{\n\t// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module\n\n\tFString PluginShaderDir = FPaths::Combine(IPluginManager::Get().FindPlugin(TEXT(\"${PLUGIN_NAME}\"))->GetBaseDir(), TEXT(\"Shaders/${MODULE_NAME}/Private\"));\n\tAddShaderSourceDirectoryMapping(TEXT(\"/${MODULE_NAME}Shaders\"), PluginShaderDir);\n}\n\nvoid F${MODULE_NAME}::ShutdownModule()\n{\n\t// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,\n\t// we call this function before unloading the module.\n}\n\n#undef LOCTEXT_NAMESPACE\n\t\nIMPLEMENT_MODULE(F${MODULE_NAME}, ${PLUGIN_NAME})"
  },
  {
    "path": "unreal-engine/src/template/ModulePublic.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Modules/ModuleManager.h\"\n\nclass F${MODULE_NAME} : public IModuleInterface\n{\npublic:\n\n\t/** IModuleInterface implementation */\n\tvirtual void StartupModule() override;\n\tvirtual void ShutdownModule() override;\n};\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/MyPlugin.uplugin",
    "content": ""
  },
  {
    "path": "unreal-engine/src/template/Plugin/Shaders/Compute/Private/Template.usf",
    "content": "#include \"/Engine/Public/Platform.ush\"\n\n${\ninstance.parameters.map(p => `${p.hlslType} ${p.name};`).join('\\n')\n}\n\n${instance.shader()}"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Shaders/Factory/Private/Template.ush",
    "content": "#include \"/Engine/Private/VertexFactoryCommon.ush\"\n#include \"/Engine/Private/VirtualTextureCommon.ush\"\n\n// StructuredBuffer<QuadRenderInstance> InstanceBuffer;\n// float3 LodViewOrigin;\n// float4 LodDistances;\n\n/** Per-vertex inputs. No vertex buffers are bound. */\nstruct FVertexFactoryInput\n{\n\tuint InstanceId : SV_InstanceID;\n\tuint VertexId : SV_VertexID;\n};\n\n/** Cached intermediates that would otherwise have to be computed multiple times. Avoids relying on the compiler to optimize out redundant operations. */\nstruct FVertexFactoryIntermediates\n{\n\tfloat2 LocalUV;\n\tfloat3 LocalPos;\n\tfloat3 WorldNormal;\n\t/** Cached primitive and instance data */\n\tFSceneDataIntermediates SceneData; \n};\n\nFPrimitiveSceneData GetPrimitiveData(FVertexFactoryIntermediates Intermediates)\n{\n\treturn Intermediates.SceneData.Primitive;\n}\n\n/** Attributes to interpolate from the vertex shader to the pixel shader. */\nstruct FVertexFactoryInterpolantsVSToPS\n{\n#if NUM_TEX_COORD_INTERPOLATORS\n\tfloat4 TexCoords[(NUM_TEX_COORD_INTERPOLATORS + 1) / 2] : TEXCOORD0;\n#endif\n#if INSTANCED_STEREO\n\tnointerpolation uint EyeIndex : PACKED_EYE_INDEX;\n#endif\n};\n\n/** Compute the intermediates for a given vertex. */\nFVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput Input)\n{\n\tFVertexFactoryIntermediates Intermediates;\n\tIntermediates.SceneData = VF_GPUSCENE_GET_INTERMEDIATES(Input);\n\n\t// const QuadRenderInstance Item = InstanceBuffer[Input.InstanceId];\n\tconst uint2 Pos = uint2(0, 0);\n\tconst uint Level = 0;\n\t\n\tconst float3 LocalUVTransform = float3(0.0f, 0.0f, 0.0f);\n\n\tuint2 VertexCoord = uint2(Input.VertexId % 2, Input.VertexId / 2);\n\tfloat2 LocalUV = (float2)VertexCoord / (float)(2 - 1);\n\n\t// Calculate vertex UV details before morphing\n\tfloat2 XY = ((float2)Pos + LocalUV) * (float)(1u << Level);\n\tfloat2 NormalizedPos = (XY * 1.f);\n\tfloat SampleLevel = Level;\n\n\t// Position in space of virtual texture volume\n\t// Intermediates.VTPos = float3(NormalizedPos, Height);\n\n\t// Position in local space\n\t// Intermediates.LocalPos = mul(float4(Intermediates.VTPos, 1), VHM.VirtualHeightfieldToLocal).xyz;\n\t\n\tIntermediates.LocalUV = NormalizedPos;\n\n\tIntermediates.WorldNormal = float3(0, 0, 1);\n\n\treturn Intermediates;\n}\n\n/** Converts from vertex factory specific input to a FMaterialVertexParameters, which is used by vertex shader material inputs. */\nFMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 WorldPosition, half3x3 TangentToLocal)\n{\n\tFMaterialVertexParameters Result = (FMaterialVertexParameters)0;\n\n\tResult.SceneData = Intermediates.SceneData;\n\tResult.WorldPosition = WorldPosition;\n\n\t// needs fixing!\n\t// Result.TangentToWorld = mul(TangentToLocal, (float3x3)VHM.VirtualHeightfieldToWorld);\n\tResult.TangentToWorld[2] = Intermediates.WorldNormal;\n\n\tResult.PreSkinnedPosition = WorldPosition;// Intermediates.WorldPosPreDisplacement.xyz;\n\tResult.PreSkinnedNormal = float3(0, 0, 1);\n\n#if NUM_MATERIAL_TEXCOORDS_VERTEX\n\tUNROLL\n\tfor (int CoordinateIndex = 0; CoordinateIndex < NUM_MATERIAL_TEXCOORDS_VERTEX; CoordinateIndex++)\n\t{\n\t\tResult.TexCoords[CoordinateIndex] = Intermediates.LocalUV;\n\t}\n#endif  //NUM_MATERIAL_TEXCOORDS_VERTEX\n\n\treturn Result;\n}\n\n/** Get ID in GPU Scene. We don't implement support because we create/consume our own instancing buffer. */\nuint GetPrimitiveId(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\treturn 0;\n}\n\n/** Get ID in the GPU Scene. */\nuint VertexFactoryGetPrimitiveId(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\treturn GetPrimitiveId(Interpolants);\n}\n\n/** Computes the world space position of this vertex. */\nfloat4 VertexFactoryGetWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\tFLWCMatrix LocalToWorld = GetPrimitiveData(Intermediates).LocalToWorld;\n\tFLWCVector3 WorldPosition = LWCMultiply(Intermediates.LocalPos, LocalToWorld);\n\tfloat3 TranslatedWorldPosition = LWCToFloat(LWCAdd(WorldPosition, ResolvedView.PreViewTranslation));\n\treturn float4(TranslatedWorldPosition, 1.0f);\n}\n\n/** Computes the world space position of this vertex. */\nfloat4 VertexFactoryGetRasterizedWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float4 InWorldPosition)\n{\n\treturn InWorldPosition;\n}\n\n/** Computes the world space position used by vertex lighting for this vertex. */\nfloat3 VertexFactoryGetPositionForVertexLighting(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 TranslatedWorldPosition)\n{\n\treturn TranslatedWorldPosition;\n}\n\n/** Computes the world space position of this vertex last frame. */\nfloat4 VertexFactoryGetPreviousWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\tfloat4x4 PreviousLocalToWorldTranslated = LWCMultiplyTranslation(GetPrimitiveData(Intermediates).PreviousLocalToWorld, ResolvedView.PrevPreViewTranslation);\n\treturn mul(float4(Intermediates.LocalPos,1), PreviousLocalToWorldTranslated);\n}\n\n/** Computes the world space normal of this vertex. */\nfloat3 VertexFactoryGetWorldNormal(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\treturn Intermediates.WorldNormal;\n}\n\n/** Get the 3x3 tangent basis vectors for this vertex factory. This vertex factory will calculate the binormal on-the-fly. */\nhalf3x3 VertexFactoryGetTangentToLocal(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\treturn half3x3(1, 0, 0, 0, 1, 0, 0, 0, 1);\n}\n\n/** Get the translated bounding sphere for this primitive. */\nfloat4 VertexFactoryGetTranslatedPrimitiveVolumeBounds(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\tFPrimitiveSceneData PrimitiveData = GetPrimitiveData(GetPrimitiveId(Interpolants));\n\treturn float4(LWCToFloat(LWCAdd(PrimitiveData.ObjectWorldPosition, ResolvedView.PreViewTranslation)), PrimitiveData.ObjectRadius);\n}\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\nvoid SetUV(inout FVertexFactoryInterpolantsVSToPS Interpolants, uint UVIndex, float2 InValue)\n{\n\tFLATTEN\n\tif (UVIndex % 2)\n\t{\n\t\tInterpolants.TexCoords[UVIndex / 2].zw = InValue;\n\t}\n\telse\n\t{\n\t\tInterpolants.TexCoords[UVIndex / 2].xy = InValue;\n\t}\n}\n\nfloat2 GetUV(FVertexFactoryInterpolantsVSToPS Interpolants, uint UVIndex)\n{\n\tfloat4 UVVector = Interpolants.TexCoords[UVIndex / 2];\n\treturn UVIndex % 2 ? UVVector.zw : UVVector.xy;\n}\n\n#endif\n\n/** Constructs values that need to be interpolated from the vertex shader to the pixel shader. */\nFVertexFactoryInterpolantsVSToPS VertexFactoryGetInterpolantsVSToPS(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, FMaterialVertexParameters VertexParameters)\n{\n\tFVertexFactoryInterpolantsVSToPS Interpolants;\n\n\t// Initialize the whole struct to 0\n\t// Really only the last two components of the packed UVs have the opportunity to be uninitialized\n\tInterpolants = (FVertexFactoryInterpolantsVSToPS)0;\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\tfloat2 CustomizedUVs[NUM_TEX_COORD_INTERPOLATORS];\n\tGetMaterialCustomizedUVs(VertexParameters, CustomizedUVs);\n\tGetCustomInterpolators(VertexParameters, CustomizedUVs);\n\n\tUNROLL\n\tfor (int CoordinateIndex = 0; CoordinateIndex < NUM_TEX_COORD_INTERPOLATORS; CoordinateIndex++)\n\t{\n\t\tSetUV(Interpolants, CoordinateIndex, CustomizedUVs[CoordinateIndex]);\n\t}\n#endif\n\n\treturn Interpolants;\n}\n\n/** Converts from vertex factory specific interpolants to a FMaterialPixelParameters, which is used by material inputs. */\nFMaterialPixelParameters GetMaterialPixelParameters(FVertexFactoryInterpolantsVSToPS Interpolants, float4 SvPosition)\n{\n\t// GetMaterialPixelParameters is responsible for fully initializing the result\n\tFMaterialPixelParameters Result = MakeInitializedMaterialPixelParameters();\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\tUNROLL\n\tfor (uint CoordinateIndex = 0; CoordinateIndex < NUM_TEX_COORD_INTERPOLATORS; CoordinateIndex++)\n\t{\n\t\tResult.TexCoords[CoordinateIndex] = GetUV(Interpolants, CoordinateIndex);\n\t}\n#endif\t//NUM_MATERIAL_TEXCOORDS\n\n\tResult.TwoSidedSign = 0;\n\tResult.PrimitiveId = GetPrimitiveId(Interpolants);\n\n\treturn Result;\n}\n\n${instance.shader()}\n\n#include \"/Engine/Private/VertexFactoryDefaultInterface.ush\"\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/ActorTemplate.cpp",
    "content": "#include \"Actors/${instance.nameWithoutPrefix}.h\"\n\n${instance.code(\"PrivateInclude\")}\n\n${NAME}::${NAME}() {\n\tPrimaryActorTick.bCanEverTick = true;\n\tPrimaryActorTick.bStartWithTickEnabled = true;\n\n\tThisActor = this;\n\t\n\tSceneComponent = CreateDefaultSubobject<USceneComponent>(TEXT(\"SceneComponent\"));\n\tSetRootComponent(SceneComponent);\n\n\tSetup();\n\n\tbIsInConstructor = false;\n}\n\nvoid ${NAME}::BeginPlay() {\n\tSuper::BeginPlay();\n}\n\n${instance.code(\"Body\")}"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/ComputeTemplate.cpp",
    "content": "#include \"${NAME}.h\"\n#include \"PixelShaderUtils.h\"\n#include \"RenderCore/Public/RenderGraphUtils.h\"\n#include \"MeshPassProcessor.inl\"\n#include \"StaticMeshResources.h\"\n#include \"DynamicMeshBuilder.h\"\n#include \"RenderGraphResources.h\"\n#include \"GlobalShader.h\"\n#include \"UnifiedBuffer.h\"\n#include \"CanvasTypes.h\"\n#include \"MaterialShader.h\"\n\n/**********************************************************************************************/\n/* This class carries our parameter declarations and acts as the bridge between cpp and HLSL. */\n/**********************************************************************************************/\nclass ${SCOPE} F${CLASS_NAME} : public ${instance.prop(\"ExtendMaterial\", false) ? \"FMeshMaterialShader\" : \"FGlobalShader\"}\n{\npublic:\n\t${instance.prop(\"ExtendMaterial\", false) ? `\n\tDECLARE_SHADER_TYPE(F${CLASS_NAME}, MeshMaterial);\n\tSHADER_USE_PARAMETER_STRUCT_WITH_LEGACY_BASE(F${CLASS_NAME}, FMeshMaterialShader)\n\t` : `\n\tDECLARE_GLOBAL_SHADER(F${CLASS_NAME});\n\tSHADER_USE_PARAMETER_STRUCT(F${CLASS_NAME}, FGlobalShader);\n\t`\n\t}\n\t\n\tclass F${CLASS_NAME}_Perm_TEST : SHADER_PERMUTATION_INT(\"TEST\", 1);\n\tusing FPermutationDomain = TShaderPermutationDomain<\n\t\tF${CLASS_NAME}_Perm_TEST\n\t>;\n\n\t\n\n\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\t${instance.parameterStruct().join(\"\\n\\t\\t\")}\n\tEND_SHADER_PARAMETER_STRUCT()\n\npublic:\n\tstatic bool ShouldCompilePermutation(const F${instance.ShaderBase}ShaderPermutationParameters& Parameters)\n\t{\n\t\tconst FPermutationDomain PermutationVector(Parameters.PermutationId);\n\t\t\n\t\treturn true;\n\t}\n\n\tstatic void ModifyCompilationEnvironment(const F${instance.ShaderBase}ShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)\n\t{\n\t\tF${instance.ShaderBase}Shader::ModifyCompilationEnvironment(Parameters, OutEnvironment);\n\n\t\tconst FPermutationDomain PermutationVector(Parameters.PermutationId);\n\n\t\tOutEnvironment.SetDefine(TEXT(\"SHADEUP_VERSION_MAJOR\"), TEXT(\"0\"));\n\t\tOutEnvironment.SetDefine(TEXT(\"SHADEUP_VERSION_MINOR\"), TEXT(\"1\"));\n\n\t\t// This shader must support typed UAV load and we are testing if it is supported at runtime using RHIIsTypedUAVLoadSupported\n\t\t// OutEnvironment.CompilerFlags.Add(CFLAG_AllowTypedUAVLoads);\n\n\t\t// FForwardLightingParameters::ModifyCompilationEnvironment(Parameters.Platform, OutEnvironment);\n\t}\n\n\t${PUBLIC_CODE}\nprivate:\n\t${PRIVATE_CODE}\n};\n\n// This will tell the engine to create the shader and where the shader entry point is.\n//                            ShaderType                            ShaderPath                     Shader function name    Type\n${instance.prop(\"ExtendMaterial\", false) ?\n`IMPLEMENT_MATERIAL_SHADER_TYPE(, F${CLASS_NAME}, TEXT(\"/${MODULE_NAME}Shaders/${NAME}.usf\"), TEXT(\"${NAME}\"), SF_Compute);`\n:\n`IMPLEMENT_GLOBAL_SHADER(F${CLASS_NAME}, \"/${MODULE_NAME}Shaders/${NAME}.usf\", \"${NAME}\", SF_Compute);`\n}\n\nvoid F${CLASS_NAME}Context::DispatchRenderThread(FRHICommandListImmediate& RHICmdList, LocalDrawParameters Params, int x, int y, int z) {\n\t// RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, ComputeShaderOutputUAV);\n\n\tF${CLASS_NAME}::FParameters PassParameters;\n\n\t${\n\tinstance.parameters.map(p =>\n\t(({\n\t\"RenderTarget\": `\n\t// FTextureReferenceRHIRef ${p.name}RenderTargetTextureRHI = this->${p.name}->TextureReference.TextureReferenceRHI;\n\t// if (${p.name}RenderTargetTextureRHI == nullptr) {\n\t// \treturn;\n\t// }\n\t// checkf(${p.name}RenderTargetTextureRHI != nullptr, TEXT(\"Can't get render target %d texture\"));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// FRHITexture* ${p.name}RenderTargetTextureRef = ${p.name}RenderTargetTextureRHI->GetTextureReference()->GetReferencedTexture();\n\n\t// PassParameters.${p.name} = RHICmdList.CreateUnorderedAccessView(${p.name}RenderTargetTextureRHI);\n\n\tauto reso${p.name} = Params.${p.name}->GetRenderTargetResource();\n\tauto reso2d${p.name} = reso${p.name}->GetTextureRenderTarget2DResource();\n\t\n\tPassParameters.${p.name} = RHICmdList.CreateUnorderedAccessView(reso2d${p.name}->GetTextureRHI());\n\t`,\n\t\"Texture\": `PassParameters.${p.name} = Params.${p.name}->GetResource()->GetTexture2DRHI();`,\n\t\"Buffer\": `PassParameters.${p.name} = Params.${p.name};`,\n\t\"Real\": `PassParameters.${p.name} = Params.${p.name};`,\n\t})[p.baseType])\n\t).join('\\n\\t')\n\t}\n\t\n\ttypename F${CLASS_NAME}::FPermutationDomain PermutationVector;\n\n\tTShaderMapRef<F${CLASS_NAME}> ComputeShader(GetGlobalShaderMap(GMaxRHIFeatureLevel), PermutationVector);\n\tFIntVector GroupCounts = FIntVector(FMath::DivideAndRoundUp(x, NUM_THREADS_${CLASS_NAME}_X), FMath::DivideAndRoundUp(y, NUM_THREADS_${CLASS_NAME}_Y), FMath::DivideAndRoundUp(z, NUM_THREADS_${CLASS_NAME}_Z));\n\n\tFComputeShaderUtils::Dispatch(RHICmdList, ComputeShader, PassParameters, GroupCounts);\n}"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/ComputeTemplate.h",
    "content": "#pragma once\n\n\n#include \"CoreMinimal.h\"\n#include \"${MODULE_NAME}/Public/${MODULE_NAME}.h\"\n\n#include \"MeshPassProcessor.h\"\n#include \"RHICommandList.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderTargetPool.h\"\n#include \"MeshMaterialShader.h\"\n#include \"ShaderParameterUtils.h\"\n#include \"RHIStaticStates.h\"\n#include \"Shader.h\"\n#include \"RHI.h\"\n#include \"GlobalShader.h\"\n#include \"RenderGraphUtils.h\"\n#include \"ShaderParameterStruct.h\"\n#include \"UniformBuffer.h\"\n#include \"RHICommandList.h\"\n#include \"ShaderCompilerCore.h\"\n#include \"SceneInterface.h\"\n#include \"EngineDefines.h\"\n#include \"RendererInterface.h\"\n#include \"RenderResource.h\"\n#include \"RenderGraphResources.h\"\n\n#include \"RenderGraphResources.h\"\n#include \"Runtime/Engine/Classes/Engine/TextureRenderTarget2D.h\"\n\n#define NUM_THREADS_${CLASS_NAME}_X ${instance.threadCounts[0]}\n#define NUM_THREADS_${CLASS_NAME}_Y ${instance.threadCounts[1]}\n#define NUM_THREADS_${CLASS_NAME}_Z ${instance.threadCounts[2]}\n\nclass ${SCOPE} F${CLASS_NAME}Context {\npublic:\n\tF${CLASS_NAME}Context() {\n\t\t\n\t}\n\n\tstruct LocalDrawParameters {\n\t\t${\n\t\t\tinstance.parameters.map(p => `${p.realCppType} ${p.name};`).join('\\n\\t\\t')\n\t\t}\n\t};\n\n\tLocalDrawParameters DrawParameters;\n\n\t${\n\tinstance.parameters.map(p => `void Set${p.name}(${p.realCppType} _${p.name}) {\n\t\tthis->DrawParameters.${p.name} = _${p.name};\n\t}`).join('\\n\\n\\t')\n\t}\n\n\t// Executes this shader on the render thread\n\tvoid DispatchRenderThread(FRHICommandListImmediate& RHICmdList, LocalDrawParameters Params, int x, int y, int z);\n\n\t// Executes this shader on the render thread from the game thread via EnqueueRenderThreadCommand\n\tvoid DispatchGameThread(int x, int y, int z) {\n\t\tLocalDrawParameters params = this->DrawParameters;\n\t\tENQUEUE_RENDER_COMMAND(SceneDrawCompletion)(\n\t\t[this, params, x, y, z](FRHICommandListImmediate& RHICmdList)\n\t\t{\n\t\t\tthis->DispatchRenderThread(RHICmdList, params, x, y, z);\n\t\t});\n\t}\n\n\t// Dispatches this shader. Can be called from any thread\n\tvoid Dispatch(int x, int y, int z) {\n\t\tif (IsInRenderingThread()) {\n\t\t\tDispatchRenderThread(GetImmediateCommandList_ForRenderCommand(), this->DrawParameters, x, y, z);\n\t\t}else{\n\t\t\tDispatchGameThread(x, y, z);\n\t\t}\n\t}\n};\n\ntypedef TSharedPtr<F${CLASS_NAME}Context, ESPMode::ThreadSafe> F${CLASS_NAME}ContextPtr;\n\n/**************************************************************************************/\n/* This is just an interface we use to keep all the compute shading code in one file. */\n/**************************************************************************************/\nclass ${SCOPE} ${CLASS_NAME}\n{\npublic:\n\tstatic F${CLASS_NAME}ContextPtr Prepare() {\n\t\tF${CLASS_NAME}ContextPtr context = MakeShareable(new F${CLASS_NAME}Context());\n\t\treturn context;\n\t}\n};\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/FactoryTemplate.cpp",
    "content": "#include \"${NAME_NO_PREFIX}.h\"\n\n#include \"Engine/Engine.h\"\n#include \"EngineGlobals.h\"\n#include \"MaterialDomain.h\"\n#include \"Materials/Material.h\"\n#include \"MeshMaterialShader.h\"\n#include \"RHIStaticStates.h\"\n#include \"ShaderParameters.h\"\n#include \"DataDrivenShaderPlatformInfo.h\"\n#include \"MeshDrawShaderBindings.h\"\n#include \"ShaderParameterUtils.h\"\n\nIMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT(${NAME}Parameters, \"${NAME}Params\");\n\nnamespace\n{\n\ttemplate <typename T>\n\tFBufferRHIRef CreateIndexBuffer(FRHICommandListBase &RHICmdList)\n\t{\n\t\tTResourceArray<T, INDEXBUFFER_ALIGNMENT> Indices;\n\n\t\t// Allocate room for indices\n\t\tIndices.Reserve(3);\n\n\t\t// Top left\n\t\t// CCW triangle winding order\n\t\tIndices.Add(1);\n\t\tIndices.Add(0);\n\t\tIndices.Add(2);\n\n\t\tconst uint32 Size = Indices.GetResourceDataSize();\n\t\tconst uint32 Stride = sizeof(T);\n\n\t\t// Create index buffer. Fill buffer with initial data upon creation\n\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"${NAME}IndexBuffer\"), &Indices);\n\t\treturn RHICmdList.CreateIndexBuffer(Stride, Size, BUF_Static, CreateInfo);\n\t}\n}\n\nvoid ${NAME}IndexBuffer::InitRHI(FRHICommandListBase &RHICmdList)\n{\n\tIndexBufferRHI = CreateIndexBuffer<uint16>(RHICmdList);\n}\n\n/**\n * Shader parameters for vertex factory.\n */\nclass ${NAME}ShaderParameters : public FVertexFactoryShaderParameters\n{\n\tDECLARE_TYPE_LAYOUT(${NAME}ShaderParameters, NonVirtual);\n\npublic:\n\tvoid Bind(const FShaderParameterMap &ParameterMap)\n\t{\n\t\t// TODO\n\t\t// InstanceBufferParameter.Bind(ParameterMap, TEXT(\"InstanceBuffer\"));\n\t\t// LodViewOriginParameter.Bind(ParameterMap, TEXT(\"LodViewOrigin\"));\n\t\t// LodDistancesParameter.Bind(ParameterMap, TEXT(\"LodDistances\"));\n\t}\n\n\tvoid GetElementShaderBindings(\n\t\t\tconst class FSceneInterface *Scene,\n\t\t\tconst class FSceneView *View,\n\t\t\tconst class FMeshMaterialShader *Shader,\n\t\t\tconst EVertexInputStreamType InputStreamType,\n\t\t\tERHIFeatureLevel::Type FeatureLevel,\n\t\t\tconst class FVertexFactory *InVertexFactory,\n\t\t\tconst struct FMeshBatchElement &BatchElement,\n\t\t\tclass FMeshDrawSingleShaderBindings &ShaderBindings,\n\t\t\tFVertexInputStreamArray &VertexStreams) const\n\t{\n\t\t${NAME}* VertexFactory = (${NAME}*)InVertexFactory;\n\t\tShaderBindings.Add(Shader->GetUniformBufferParameter<${NAME}Parameters>(), VertexFactory->UniformBuffer);\n\n\t\t${NAME}UserData* UserData = (${NAME}UserData*)BatchElement.UserData;\n\t\t// TODO\n\t\t// ShaderBindings.Add(InstanceBufferParameter, UserData->InstanceBufferSRV);\n\t\t// ShaderBindings.Add(LodViewOriginParameter, UserData->LodViewOrigin);\n\t\t// ShaderBindings.Add(LodDistancesParameter, UserData->LodDistances);\n\t}\n\nprotected:\n\t// TODO\n\t// LAYOUT_FIELD(FShaderResourceParameter, InstanceBufferParameter);\n\t// LAYOUT_FIELD(FShaderParameter, LodViewOriginParameter);\n\t// LAYOUT_FIELD(FShaderParameter, LodDistancesParameter);\n};\n\nIMPLEMENT_TYPE_LAYOUT(${NAME}ShaderParameters);\n\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(${NAME}, SF_Vertex, ${NAME}ShaderParameters);\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(${NAME}, SF_Pixel, ${NAME}ShaderParameters);\n\n${NAME}::${NAME}(ERHIFeatureLevel::Type InFeatureLevel, const ${NAME}Parameters& InParams)\n\t\t: FVertexFactory(InFeatureLevel), Params(InParams)\n{\n\tIndexBuffer = new ${NAME}IndexBuffer();\n}\n\n${NAME}::~${NAME}()\n{\n\tdelete IndexBuffer;\n}\n\nvoid ${NAME}::InitRHI(FRHICommandListBase &RHICmdList)\n{\n\tUniformBuffer = ${NAME}BufferRef::CreateUniformBufferImmediate(Params, UniformBuffer_MultiFrame);\n\n\tIndexBuffer->InitResource(RHICmdList);\n\n\tFVertexStream NullVertexStream;\n\tNullVertexStream.VertexBuffer = nullptr;\n\tNullVertexStream.Stride = 0;\n\tNullVertexStream.Offset = 0;\n\tNullVertexStream.VertexStreamUsage = EVertexStreamUsage::ManualFetch;\n\n\tcheck(Streams.Num() == 0);\n\tStreams.Add(NullVertexStream);\n\n\tFVertexDeclarationElementList Elements;\n\n\tInitDeclaration(Elements);\n}\n\nvoid ${NAME}::ReleaseRHI()\n{\n\tUniformBuffer.SafeRelease();\n\n\tif (IndexBuffer)\n\t{\n\t\tIndexBuffer->ReleaseResource();\n\t}\n\n\tFVertexFactory::ReleaseRHI();\n}\n\nbool ${NAME}::ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters &Parameters)\n{\n\t// todo[vhm]: Fallback path for mobile.\n\tif (!IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5))\n\t{\n\t\treturn false;\n\t}\n\t// TODO\n\treturn (Parameters.MaterialParameters.MaterialDomain == MD_Surface && Parameters.MaterialParameters.bIsUsedWithVirtualHeightfieldMesh) || Parameters.MaterialParameters.bIsSpecialEngineMaterial;\n}\n\nvoid ${NAME}::ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment)\n{\n\t// TODO\n\t// OutEnvironment.SetDefine(TEXT(\"VF_VIRTUAL_HEIGHFIELD_MESH\"), 1);\n}\n\nvoid ${NAME}::ValidateCompiledResult(const FVertexFactoryType *Type, EShaderPlatform Platform, const FShaderParameterMap &ParameterMap, TArray<FString> &OutErrors)\n{\n}\n\n// TODO\nIMPLEMENT_VERTEX_FACTORY_TYPE(${NAME}, \"/${MODULE_NAME}Shaders/${NAME_NO_PREFIX}.ush\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tEVertexFactoryFlags::UsedWithMaterials | EVertexFactoryFlags::SupportsDynamicLighting | EVertexFactoryFlags::SupportsPrimitiveIdStream);\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/FactoryTemplate.h",
    "content": "#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Containers/DynamicRHIResourceArray.h\"\n#include \"RenderResource.h\"\n#include \"RHI.h\"\n#include \"SceneManagement.h\"\n#include \"UniformBuffer.h\"\n#include \"VertexFactory.h\"\n\n/**\n * Uniform buffer to hold parameters specific to this vertex factory. Only set up once.\n */\nBEGIN_GLOBAL_SHADER_PARAMETER_STRUCT(${NAME}Parameters, )\n// SHADER_PARAMETER_TEXTURE(Texture2D<uint4>, PageTableTexture)\nEND_GLOBAL_SHADER_PARAMETER_STRUCT()\n\ntypedef TUniformBufferRef<${NAME}Parameters> ${NAME}BufferRef;\n\n/**\n * Per frame UserData to pass to the vertex shader.\n */\nstruct ${NAME}UserData : public FOneFrameResource\n{\n\t// FRHIShaderResourceView* InstanceBufferSRV;\n\tFVector3f LodViewOrigin;\n};\n\n/*\n * Index buffer to provide incides for the mesh we're rending.\n */\nclass ${NAME}IndexBuffer : public FIndexBuffer\n{\npublic:\n\t${NAME}IndexBuffer()\n\t{\n\t}\n\n\tvirtual void InitRHI(FRHICommandListBase & RHICmdList) override;\n\n\tint32 GetIndexCount() const { return NumIndices; }\n\nprivate:\n\tint32 NumIndices = 0;\n};\n\nclass ${NAME} : public FVertexFactory\n{\n\tDECLARE_VERTEX_FACTORY_TYPE(${NAME});\n\npublic:\n\t${NAME}(ERHIFeatureLevel::Type InFeatureLevel, const ${NAME}Parameters& InParams);\n\n\t~${NAME}();\n\n\tvirtual void InitRHI(FRHICommandListBase & RHICmdList) override;\n\tvirtual void ReleaseRHI() override;\n\n\tstatic bool ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters &Parameters);\n\tstatic void ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment);\n\tstatic void ValidateCompiledResult(const FVertexFactoryType *Type, EShaderPlatform Platform, const FShaderParameterMap &ParameterMap, TArray<FString> &OutErrors);\n\n\tFIndexBuffer const *GetIndexBuffer() const { return IndexBuffer; }\n\nprivate:\n\t${NAME}Parameters Params;\n\t${NAME}BufferRef UniformBuffer;\n\t${NAME}IndexBuffer *IndexBuffer = nullptr;\n\n\t// Shader parameters is the data passed to our vertex shader\n\tfriend class ${NAME}ShaderParameters;\n};\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/ModuleTemplate.cpp",
    "content": "#include \"${MODULE_NAME}/Public/${MODULE_NAME}.h\"\n\n#include \"Misc/Paths.h\"\n#include \"Misc/FileHelper.h\"\n#include \"RHI.h\"\n#include \"GlobalShader.h\"\n#include \"RHICommandList.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderTargetPool.h\"\n#include \"Runtime/Core/Public/Modules/ModuleManager.h\"\n#include \"Interfaces/IPluginManager.h\"\n\n#define LOCTEXT_NAMESPACE \"${MODULE_NAME}Module\"\n\nvoid F${MODULE_NAME}Module::StartupModule()\n{\n\t// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module\n\n\t// Maps virtual shader source directory to the plugin's actual shaders directory.\n\tFString PluginShaderDir = FPaths::Combine(IPluginManager::Get().FindPlugin(TEXT(\"${PLUGIN_NAME}\"))->GetBaseDir(), TEXT(\"Shaders/${MODULE_NAME}/Private\"));\n\tAddShaderSourceDirectoryMapping(TEXT(\"/${MODULE_NAME}Shaders\"), PluginShaderDir);\n}\n\nvoid F${MODULE_NAME}Module::ShutdownModule()\n{\n\t// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,\n\t// we call this function before unloading the module.\n}\n\n#undef LOCTEXT_NAMESPACE\n\nIMPLEMENT_MODULE(F${MODULE_NAME}Module, ${MODULE_NAME})"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/ProxyTemplate.cpp",
    "content": "#include \"${NAME_NO_PREFIX}.h\"\n\n#include \"CommonRenderResources.h\"\n#include \"EngineModule.h\"\n#include \"Engine/Engine.h\"\n#include \"GlobalShader.h\"\n#include \"HAL/IConsoleManager.h\"\n#include \"MaterialDomain.h\"\n#include \"Materials/Material.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderGraphUtils.h\"\n#include \"RenderUtils.h\"\n#include \"DataDrivenShaderPlatformInfo.h\"\n#include \"${instance.instanceStruct.nameWithoutPrefix}.h\"\n#include \"${instance.component.nameWithoutPrefix}.h\"\n#include \"${instance.factory.nameWithoutPrefix}.h\"\n\nnamespace ${NAME}Mesh\n{\n\t/** Initialize the FDrawInstanceBuffers objects. */\n\tvoid InitializeInstanceBuffers(FRHICommandListImmediate & InRHICmdList, FDrawInstanceBuffers & InBuffers);\n\n\t/** Release the FDrawInstanceBuffers objects. */\n\tvoid ReleaseInstanceBuffers(FDrawInstanceBuffers & InBuffers)\n\t{\n\t\tInBuffers.InstanceBuffer.SafeRelease();\n\t\tInBuffers.InstanceBufferUAV.SafeRelease();\n\t\tInBuffers.InstanceBufferSRV.SafeRelease();\n\t\tInBuffers.IndirectArgsBuffer.SafeRelease();\n\t\tInBuffers.IndirectArgsBufferUAV.SafeRelease();\n\t}\n}\n\n/** Renderer extension to manage the buffer pool and add hooks for GPU culling passes. */\nclass ${NAME}RendererExtension : public FRenderResource\n{\npublic:\n\t${NAME}RendererExtension()\n\t\t\t: bInFrame(false), DiscardId(0)\n\t{\n\t}\n\n\tvirtual ~${NAME}RendererExtension()\n\t{\n\t}\n\n\t/** Call once to register this extension. */\n\tvoid RegisterExtension();\n\n\t/** Call once per frame for each mesh/view that has relevance. This allocates the buffers to use for the frame and adds the work to fill the buffers to the queue. */\n\t${NAME}Mesh::FDrawInstanceBuffers &AddWork(\n\t\t\t${NAME} const *InProxy, FSceneView const *InMainView, FSceneView const *InCullView);\n\t/** Submit all the work added by AddWork(). The work fills all of the buffers ready for use by the referencing mesh batches. */\n\tvoid SubmitWork(FRDGBuilder & GraphBuilder);\n\nprotected:\n\t//~ Begin FRenderResource Interface\n\tvirtual void ReleaseRHI() override;\n\t//~ End FRenderResource Interface\n\nprivate:\n\t/** Called by renderer at start of render frame. */\n\tvoid BeginFrame(FRDGBuilder & GraphBuilder);\n\t/** Called by renderer at end of render frame. */\n\tvoid EndFrame(FRDGBuilder & GraphBuilder);\n\tvoid EndFrame();\n\n\t/** Flag for frame validation. */\n\tbool bInFrame;\n\n\t/** Buffers to fill. Resources can persist between frames to reduce allocation cost, but contents don't persist. */\n\tTArray<${NAME}Mesh::FDrawInstanceBuffers> Buffers;\n\t/** Per buffer frame time stamp of last usage. */\n\tTArray<uint32> DiscardIds;\n\t/** Current frame time stamp. */\n\tuint32 DiscardId;\n\n\t/** Arrary of unique scene proxies to render this frame. */\n\tTArray <${NAME} const * > SceneProxies;\n\t/** Arrary of unique main views to render this frame. */\n\tTArray<FSceneView const *> MainViews;\n\t/** Arrary of unique culling views to render this frame. */\n\tTArray<FSceneView const *> CullViews;\n\n\t/** Key for each buffer we need to generate. */\n\tstruct FWorkDesc\n\t{\n\t\tint32 ProxyIndex;\n\t\tint32 MainViewIndex;\n\t\tint32 CullViewIndex;\n\t\tint32 BufferIndex;\n\t};\n\n\t/** Keys specifying what to render. */\n\tTArray<FWorkDesc> WorkDescs;\n\n\t/** Sort predicate for FWorkDesc. When rendering we want to batch work by proxy, then by main view. */\n\tstruct FWorkDescSort\n\t{\n\t\tuint32 SortKey(FWorkDesc const &WorkDesc) const\n\t\t{\n\t\t\treturn (WorkDesc.ProxyIndex << 24) | (WorkDesc.MainViewIndex << 16) | (WorkDesc.CullViewIndex << 8) | WorkDesc.BufferIndex;\n\t\t}\n\n\t\tbool operator()(FWorkDesc const &A, FWorkDesc const &B) const\n\t\t{\n\t\t\treturn SortKey(A) < SortKey(B);\n\t\t}\n\t};\n};\n\n/** Single global instance of the VirtualHeightfieldMesh renderer extension. */\nTGlobalResource<${NAME}RendererExtension> G${NAME_WITHOUT_PREFIX}RendererExtension;\n\nvoid ${NAME}RendererExtension::RegisterExtension()\n{\n\tstatic bool bInit = false;\n\tif (!bInit)\n\t{\n\t\tGEngine->GetPreRenderDelegateEx().AddRaw(this, &${NAME}RendererExtension::BeginFrame);\n\t\tGEngine->GetPostRenderDelegateEx().AddRaw(this, &${NAME}RendererExtension::EndFrame);\n\t\tbInit = true;\n\t}\n}\n\nvoid ${NAME}RendererExtension::ReleaseRHI()\n{\n\tBuffers.Empty();\n}\n\n${NAME}Mesh::FDrawInstanceBuffers &${NAME}RendererExtension::AddWork(\n\t\t${NAME} const *InProxy, FSceneView const *InMainView, FSceneView const *InCullView)\n{\n\t// If we hit this then BeginFrame()/EndFrame() logic needs fixing in the Scene Renderer.\n\tif (!ensure(!bInFrame))\n\t{\n\t\tEndFrame();\n\t}\n\n\t// Create workload\n\tFWorkDesc WorkDesc;\n\tWorkDesc.ProxyIndex = SceneProxies.AddUnique(InProxy);\n\tWorkDesc.MainViewIndex = MainViews.AddUnique(InMainView);\n\tWorkDesc.CullViewIndex = CullViews.AddUnique(InCullView);\n\tWorkDesc.BufferIndex = -1;\n\n\t// Check for an existing duplicate\n\tfor (FWorkDesc &It : WorkDescs)\n\t{\n\t\tif (It.ProxyIndex == WorkDesc.ProxyIndex && It.MainViewIndex == WorkDesc.MainViewIndex && It.CullViewIndex == WorkDesc.CullViewIndex && It.BufferIndex != -1)\n\t\t{\n\t\t\tWorkDesc.BufferIndex = It.BufferIndex;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Try to recycle a buffer\n\tif (WorkDesc.BufferIndex == -1)\n\t{\n\t\tfor (int32 BufferIndex = 0; BufferIndex < Buffers.Num(); BufferIndex++)\n\t\t{\n\t\t\tif (DiscardIds[BufferIndex] < DiscardId)\n\t\t\t{\n\t\t\t\tDiscardIds[BufferIndex] = DiscardId;\n\t\t\t\tWorkDesc.BufferIndex = BufferIndex;\n\t\t\t\tWorkDescs.Add(WorkDesc);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allocate new buffer if necessary\n\tif (WorkDesc.BufferIndex == -1)\n\t{\n\t\tDiscardIds.Add(DiscardId);\n\t\tWorkDesc.BufferIndex = Buffers.AddDefaulted();\n\t\tWorkDescs.Add(WorkDesc);\n\t\t${NAME}Mesh::InitializeInstanceBuffers(GetImmediateCommandList_ForRenderCommand(), Buffers[WorkDesc.BufferIndex]);\n\t}\n\n\treturn Buffers[WorkDesc.BufferIndex];\n}\n\nvoid ${NAME}RendererExtension::BeginFrame(FRDGBuilder &GraphBuilder)\n{\n\t// If we hit this then BeginFrame()/EndFrame() logic needs fixing in the Scene Renderer.\n\tif (!ensure(!bInFrame))\n\t{\n\t\tEndFrame();\n\t}\n\tbInFrame = true;\n\n\tif (WorkDescs.Num() > 0)\n\t{\n\t\tSubmitWork(GraphBuilder);\n\t}\n}\n\nvoid ${NAME}RendererExtension::EndFrame()\n{\n\tensure(bInFrame);\n\tbInFrame = false;\n\n\tSceneProxies.Reset();\n\tMainViews.Reset();\n\tCullViews.Reset();\n\tWorkDescs.Reset();\n\n\t// Clean the buffer pool\n\tDiscardId++;\n\n\tfor (int32 Index = 0; Index < DiscardIds.Num();)\n\t{\n\t\tif (DiscardId - DiscardIds[Index] > 4u)\n\t\t{\n\t\t\t${NAME}Mesh::ReleaseInstanceBuffers(Buffers[Index]);\n\t\t\tBuffers.RemoveAtSwap(Index);\n\t\t\tDiscardIds.RemoveAtSwap(Index);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t++Index;\n\t\t}\n\t}\n\n\tGOcclusionResetRequired = true;\n}\n\nvoid ${NAME}RendererExtension::EndFrame(FRDGBuilder &GraphBuilder)\n{\n\tEndFrame();\n}\n\n${NAME}::${NAME}(${instance.component.name}* InComponent)\n\t\t: FPrimitiveSceneProxy(InComponent, NAME_${NAME_WITHOUT_PREFIX}), bHiddenInEditor(InComponent->GetHiddenInEditor()), VertexFactory(nullptr)\n{\n\t// They have some LOD, but considered static as the LODs (are intended to) represent the same static surface.\n\t// TODO Check if this allows WPO\n\tbHasDeformableMesh = false;\n\n\tUMaterialInterface *ComponentMaterial = InComponent->GetMaterial();\n\t// TODO MATUSAGE\n\tconst bool bValidMaterial = ComponentMaterial != nullptr && ComponentMaterial->CheckMaterialUsage_Concurrent(MATUSAGE_VirtualHeightfieldMesh);\n\tMaterial = bValidMaterial ? ComponentMaterial->GetRenderProxy() : UMaterial::GetDefaultMaterial(MD_Surface)->GetRenderProxy();\n\tMaterialRelevance = Material->GetMaterialInterface()->GetRelevance_Concurrent(GetScene().GetFeatureLevel());\n}\n\nSIZE_T ${NAME}::GetTypeHash() const\n{\n\tstatic size_t UniquePointer;\n\treturn reinterpret_cast<size_t>(&UniquePointer);\n}\n\nuint32 ${NAME}::GetMemoryFootprint() const\n{\n\treturn (sizeof(*this) + FPrimitiveSceneProxy::GetAllocatedSize());\n}\n\nvoid ${NAME}::OnTransformChanged()\n{\n\t// TODO\n\t// UVToLocal = UVToWorld * GetLocalToWorld().Inverse();\n\n\t// Setup a default occlusion volume array containing just the primitive bounds.\n\t// We use this if disabling the full set of occlusion volumes.\n\tDefaultOcclusionVolumes.Reset();\n\tDefaultOcclusionVolumes.Add(GetBounds());\n}\n\nvoid ${NAME}::CreateRenderThreadResources()\n{\n\t// Gather vertex factory uniform parameters.\n\t${instance.factory.name}Parameters UniformParams;\n\t// TODO UNIFORM INIT\n\n\t// Create vertex factory.\n\tVertexFactory = new ${instance.factory.name}(GetScene().GetFeatureLevel(), UniformParams);\n\tVertexFactory->InitResource(FRHICommandListImmediate::Get());\n}\n\nvoid ${NAME}::DestroyRenderThreadResources()\n{\n\tif (VertexFactory != nullptr)\n\t{\n\t\tVertexFactory->ReleaseResource();\n\t\tdelete VertexFactory;\n\t\tVertexFactory = nullptr;\n\t}\n}\n\nFPrimitiveViewRelevance ${NAME}::GetViewRelevance(const FSceneView *View) const\n{\n\tconst bool bValid = true; // TODO Allow users to modify\n\tconst bool bIsHiddenInEditor = bHiddenInEditor && View->Family->EngineShowFlags.Editor;\n\n\tFPrimitiveViewRelevance Result;\n\tResult.bDrawRelevance = bValid && IsShown(View) && !bIsHiddenInEditor;\n\tResult.bShadowRelevance = bValid && IsShadowCast(View) && ShouldRenderInMainPass() && !bIsHiddenInEditor;\n\tResult.bDynamicRelevance = true;\n\tResult.bStaticRelevance = false;\n\tResult.bRenderInMainPass = ShouldRenderInMainPass();\n\tResult.bUsesLightingChannels = GetLightingChannelMask() != GetDefaultLightingChannelMask();\n\tResult.bRenderCustomDepth = ShouldRenderCustomDepth();\n\tResult.bTranslucentSelfShadow = false;\n\tResult.bVelocityRelevance = false;\n\tMaterialRelevance.SetPrimitiveViewRelevance(Result);\n\treturn Result;\n}\n\nvoid ${NAME}::GetDynamicMeshElements(const TArray<const FSceneView *> &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const\n{\n\tcheck(IsInRenderingThread());\n\n\tfor (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)\n\t{\n\t\tif (VisibilityMap & (1 << ViewIndex))\n\t\t{\n\t\t\t// TODO INIT instance buffer\n\t\t\t${NAME}Mesh::FDrawInstanceBuffers &Buffers = G${NAME_WITHOUT_PREFIX}RendererExtension.AddWork(this, ViewFamily.Views[0], Views[ViewIndex]);\n\n\t\t\tFMeshBatch &Mesh = Collector.AllocateMesh();\n\t\t\tMesh.bWireframe = AllowDebugViewmodes() && ViewFamily.EngineShowFlags.Wireframe;\n\t\t\tMesh.bUseWireframeSelectionColoring = IsSelected();\n\t\t\tMesh.VertexFactory = VertexFactory;\n\t\t\tMesh.MaterialRenderProxy = Material;\n\t\t\tMesh.ReverseCulling = IsLocalToWorldDeterminantNegative();\n\t\t\tMesh.Type = PT_TriangleList;\n\t\t\tMesh.DepthPriorityGroup = SDPG_World;\n\t\t\tMesh.bCanApplyViewModeOverrides = true;\n\t\t\tMesh.bUseForMaterial = true;\n\t\t\tMesh.CastShadow = true;\n\t\t\tMesh.bUseForDepthPass = true;\n\n\t\t\tMesh.Elements.SetNumZeroed(1);\n\t\t\t{\n\t\t\t\tFMeshBatchElement &BatchElement = Mesh.Elements[0];\n\n\t\t\t\t// TODO allow for non indirect instanced rendering\n\t\t\t\tBatchElement.IndexBuffer = VertexFactory->GetIndexBuffer();\n\t\t\t\tBatchElement.IndirectArgsBuffer = Buffers.IndirectArgsBuffer;\n\t\t\t\tBatchElement.IndirectArgsOffset = 0;\n\n\t\t\t\tBatchElement.FirstIndex = 0;\n\t\t\t\tBatchElement.NumPrimitives = 0;\n\t\t\t\tBatchElement.MinVertexIndex = 0;\n\t\t\t\tBatchElement.MaxVertexIndex = 0;\n\n\t\t\t\tBatchElement.PrimitiveIdMode = PrimID_ForceZero;\n\t\t\t\tBatchElement.PrimitiveUniformBuffer = GetUniformBuffer();\n\n\t\t\t\t${instance.factory.name}UserData *UserData = &Collector.AllocateOneFrameResource<${instance.factory.name}UserData>();\n\t\t\t\tBatchElement.UserData = (void *)UserData;\n\n\t\t\t\tUserData->InstanceBufferSRV = Buffers.InstanceBufferSRV;\n\n\t\t\t\tFSceneView const *MainView = ViewFamily.Views[0];\n\t\t\t\tUserData->LodViewOrigin = (FVector3f)MainView->ViewMatrices.GetViewOrigin(); // LWC_TODO: Precision Loss\n\n#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)\n\t\t\t\t// Support the freezerendering mode. Use any frozen view state for culling.\n\t\t\t\tconst FViewMatrices *FrozenViewMatrices = MainView->State != nullptr ? MainView->State->GetFrozenViewMatrices() : nullptr;\n\t\t\t\tif (FrozenViewMatrices != nullptr)\n\t\t\t\t{\n\t\t\t\t\tUserData->LodViewOrigin = (FVector3f)FrozenViewMatrices->GetViewOrigin();\n\t\t\t\t}\n#endif\n\t\t\t}\n\n\t\t\tCollector.AddMesh(ViewIndex, Mesh);\n\t\t}\n\t}\n}\n\nbool ${NAME}::HasSubprimitiveOcclusionQueries() const\n{\n\treturn false;\n}\n\nconst TArray<FBoxSphereBounds>* ${NAME}::GetOcclusionQueries(const FSceneView *View) const\n{\n\treturn &DefaultOcclusionVolumes;\n}\n\nvoid ${NAME}::BuildOcclusionVolumes(TArrayView<FVector2D> const &InMinMaxData, FIntPoint const &InMinMaxSize, TArrayView<int32> const &InMinMaxMips, int32 InNumLods)\n{\n\t// TODO\n}\n\nvoid ${NAME}::AcceptOcclusionResults(FSceneView const *View, TArray<bool> *Results, int32 ResultsStart, int32 NumResults)\n{\n\tcheck(IsInRenderingThread());\n\n\t// TODO\n}\n\nnamespace ${NAME}Mesh\n{\n\t/* Keep indirect args offsets in sync with VirtualHeightfieldMesh.usf. */\n\tstatic const int32 IndirectArgsByteOffset_FinalCull = 0;\n\tstatic const int32 IndirectArgsByteSize = 4 * sizeof(uint32);\n\n\t/** Shader structure used for tracking work queues in persistent wave style shaders. Keep in sync with VirtualHeightfieldMesh.ush. */\n\tstruct WorkerQueueInfo\n\t{\n\t\tuint32 Read;\n\t\tuint32 Write;\n\t\tint32 NumActive;\n\t};\n\n\t/** Compute shader to initialize all buffers, including adding the lowest mip page(s) to the QuadBuffer. */\n\tclass FInitBuffersVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FInitBuffersVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FInitBuffersVHM_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(uint32, MaxLevel)\n\t\tSHADER_PARAMETER(uint32, NumForceLoadLods)\n\t\tSHADER_PARAMETER(uint32, PageTableFeedbackId)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<WorkerQueueInfo>, RWQueueInfo)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWQueueBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint2>, RWQuadBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWFeedbackBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FInitBuffersVHM_CS, \"/Plugin/VirtualHeightfieldMesh/Private/VirtualHeightfieldMesh.usf\", \"InitBuffersCS\", SF_Compute);\n\n\t/** Compute shader to traverse the virtual texture page table for a view and generate an array of quads to potentially render. */\n\tclass FCollectQuadsVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FCollectQuadsVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FCollectQuadsVHM_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, HeightMinMaxTexture)\n\t\tSHADER_PARAMETER_SAMPLER(SamplerState, MinMaxTextureSampler)\n\t\tSHADER_PARAMETER(int32, MinMaxLevelOffset)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, LodBiasMinMaxTexture)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D<float>, OcclusionTexture)\n\t\tSHADER_PARAMETER(int32, OcclusionLevelOffset)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D<uint>, PageTableTexture)\n\t\tSHADER_PARAMETER(uint32, MaxLevel)\n\t\tSHADER_PARAMETER(FVector4f, PageTableSize)\n\t\tSHADER_PARAMETER(uint32, PageTableFeedbackId)\n\t\tSHADER_PARAMETER(FVector4f, LodDistances)\n\t\tSHADER_PARAMETER(float, LodBiasScale)\n\t\tSHADER_PARAMETER(FVector3f, ViewOrigin)\n\t\tSHADER_PARAMETER_ARRAY(FVector4f, FrustumPlanes, [5])\n\t\tSHADER_PARAMETER(FMatrix44f, UVToWorld)\n\t\tSHADER_PARAMETER(FVector3f, UVToWorldScale)\n\t\tSHADER_PARAMETER(uint32, QueueBufferSizeMask)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<WorkerQueueInfo>, RWQueueInfo)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWQueueBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint2>, RWQuadBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWFeedbackBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FCollectQuadsVHM_CS, \"/Plugin/VirtualHeightfieldMesh/Private/VirtualHeightfieldMesh.usf\", \"CollectQuadsCS\", SF_Compute);\n\n\t/** InitInstanceBuffer compute shader. */\n\tclass FInitInstanceBufferVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FInitInstanceBufferVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FInitInstanceBufferVHM_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(int32, NumIndices)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FInitInstanceBufferVHM_CS, \"/Plugin/VirtualHeightfieldMesh/Private/VirtualHeightfieldMesh.usf\", \"InitInstanceBufferCS\", SF_Compute);\n\n\t/** CullInstances compute shader. */\n\tclass FCullInstancesVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FCullInstancesVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FCullInstancesVHM_CS, FGlobalShader);\n\n\t\tclass FReuseCullDim : SHADER_PERMUTATION_BOOL(\"REUSE_CULL\");\n\n\t\tusing FPermutationDomain = TShaderPermutationDomain<FReuseCullDim>;\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, HeightMinMaxTexture)\n\t\tSHADER_PARAMETER_SAMPLER(SamplerState, MinMaxTextureSampler)\n\t\tSHADER_PARAMETER(int32, MinMaxLevelOffset)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, PageTableTexture)\n\t\tSHADER_PARAMETER(FVector4f, PageTableSize)\n\t\tSHADER_PARAMETER_ARRAY(FVector4f, FrustumPlanes, [5])\n\t\tSHADER_PARAMETER(FVector4f, PhysicalPageTransform)\n\t\tSHADER_PARAMETER(uint32, NumPhysicalAddressBits)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint2>, QuadBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, IndirectArgsBufferSRV)\n\t\tSHADER_PARAMETER_UAV(RWStructuredBuffer<QuadRenderInstance>, RWInstanceBuffer)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tRDG_BUFFER_ACCESS(IndirectArgsBuffer, ERHIAccess::IndirectArgs)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FCullInstancesVHM_CS, \"/Plugin/VirtualHeightfieldMesh/Private/VirtualHeightfieldMesh.usf\", \"CullInstancesCS\", SF_Compute);\n\n\t/** Default Min/Max texture has the fixed maximum [0,1]. */\n\tclass FHeightMinMaxDefaultTexture : public FTexture\n\t{\n\tpublic:\n\t\tvirtual void InitRHI(FRHICommandListBase &RHICmdList) override\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"VirtualHeightfieldMesh.MinMaxDefaultTexture\"));\n\t\t\tFTexture2DRHIRef Texture2D = RHICmdList.CreateTexture2D(1, 1, PF_B8G8R8A8, 1, 1, TexCreate_ShaderResource, CreateInfo);\n\t\t\tTextureRHI = Texture2D;\n\n\t\t\t// Write the contents of the texture.\n\t\t\tuint32 DestStride;\n\t\t\tFColor *DestBuffer = (FColor *)RHICmdList.LockTexture2D(Texture2D, 0, RLM_WriteOnly, DestStride, false);\n\t\t\t*DestBuffer = FColor(0, 0, 255, 255);\n\t\t\tRHICmdList.UnlockTexture2D(Texture2D, 0, false);\n\n\t\t\t// Create the sampler state RHI resource.\n\t\t\tFSamplerStateInitializerRHI SamplerStateInitializer(SF_Point, AM_Clamp, AM_Clamp, AM_Clamp);\n\t\t\tSamplerStateRHI = GetOrCreateSamplerState(SamplerStateInitializer);\n\t\t}\n\n\t\tvirtual uint32 GetSizeX() const override { return 1; }\n\t\tvirtual uint32 GetSizeY() const override { return 1; }\n\t};\n\n\t/** Single global instance of default Min/Max texture. */\n\tFTexture *GHeightMinMaxDefaultTexture = new TGlobalResource<FHeightMinMaxDefaultTexture>;\n\n\t/** View matrices that can be frozen in freezerendering mode. */\n\tstruct FViewData\n\t{\n\t\tFVector ViewOrigin;\n\t\tFMatrix ProjectionMatrix;\n\t\tFConvexVolume ViewFrustum;\n\t\tbool bViewFrozen;\n\t};\n\n\t/** Fill the FViewData from an FSceneView respecting the freezerendering mode. */\n\tvoid GetViewData(FSceneView const *InSceneView, FViewData &OutViewData)\n\t{\n#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)\n\t\tconst FViewMatrices *FrozenViewMatrices = InSceneView->State != nullptr ? InSceneView->State->GetFrozenViewMatrices() : nullptr;\n\t\tif (FrozenViewMatrices != nullptr)\n\t\t{\n\t\t\tOutViewData.ViewOrigin = FrozenViewMatrices->GetViewOrigin();\n\t\t\tOutViewData.ProjectionMatrix = FrozenViewMatrices->GetProjectionMatrix();\n\t\t\tGetViewFrustumBounds(OutViewData.ViewFrustum, FrozenViewMatrices->GetViewProjectionMatrix(), true);\n\t\t\tOutViewData.bViewFrozen = true;\n\t\t}\n\t\telse\n#endif\n\t\t{\n\t\t\tOutViewData.ViewOrigin = InSceneView->ViewMatrices.GetViewOrigin();\n\t\t\tOutViewData.ProjectionMatrix = InSceneView->ViewMatrices.GetProjectionMatrix();\n\t\t\tOutViewData.ViewFrustum = InSceneView->ViewFrustum;\n\t\t\tOutViewData.bViewFrozen = false;\n\t\t}\n\t}\n\n\t/** Structure describing GPU culling setup for a single Proxy. */\n\tstruct FProxyDesc\n\t{\n\t\tFRHITexture *PageTableTexture;\n\t\tFRHITexture *HeightMinMaxTexture;\n\t\tFRHITexture *LodBiasMinMaxTexture;\n\t\tint32 MinMaxLevelOffset;\n\n\t\tuint32 MaxLevel;\n\t\tuint32 NumForceLoadLods;\n\t\tuint32 PageTableFeedbackId;\n\t\tuint32 NumPhysicalAddressBits;\n\t\tFVector4 PageTableSize;\n\t\tFVector4 PhysicalPageTransform;\n\t\tFMatrix UVToWorld;\n\t\tFVector UVToWorldScale;\n\t\tuint32 NumQuadsPerTileSide;\n\n\t\tint32 MaxPersistentQueueItems;\n\t\tint32 MaxRenderItems;\n\t\tint32 MaxFeedbackItems;\n\t\tint32 NumCollectPassWavefronts;\n\t};\n\n\t/** View description used for LOD calculation in the main view. */\n\tstruct FMainViewDesc\n\t{\n\t\tFSceneView const *ViewDebug;\n\t\tFVector ViewOrigin;\n\t\tFVector4 LodDistances;\n\t\tfloat LodBiasScale;\n\t\tFVector4 Planes[5];\n\t\tFTextureRHIRef OcclusionTexture;\n\t\tint32 OcclusionLevelOffset;\n\t};\n\n\t/** View description used for culling in the child view. */\n\tstruct FChildViewDesc\n\t{\n\t\tFSceneView const *ViewDebug;\n\t\tbool bIsMainView;\n\t\tFVector4 Planes[5];\n\t};\n\n\t/** Structure to carry RDG resources. */\n\tstruct FVolatileResources\n\t{\n\t\tFRDGBufferRef QueueInfo;\n\t\tFRDGBufferUAVRef QueueInfoUAV;\n\t\tFRDGBufferRef QueueBuffer;\n\t\tFRDGBufferUAVRef QueueBufferUAV;\n\n\t\tFRDGBufferRef QuadBuffer;\n\t\tFRDGBufferUAVRef QuadBufferUAV;\n\t\tFRDGBufferSRVRef QuadBufferSRV;\n\n\t\tFRDGBufferRef FeedbackBuffer;\n\t\tFRDGBufferUAVRef FeedbackBufferUAV;\n\n\t\tFRDGBufferRef IndirectArgsBuffer;\n\t\tFRDGBufferUAVRef IndirectArgsBufferUAV;\n\t\tFRDGBufferSRVRef IndirectArgsBufferSRV;\n\t};\n\n\t/** Initialize the FDrawInstanceBuffers objects. */\n\tvoid InitializeInstanceBuffers(FRHICommandListImmediate & InRHICmdList, FDrawInstanceBuffers & InBuffers)\n\t{\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"${NAME}.InstanceBuffer\"));\n\t\t\tconst int32 InstanceSize = sizeof(${instance.instanceStruct.name});\n\t\t\tconst int32 InstanceBufferSize = 1024 * 4 * InstanceSize;\n\t\t\tInBuffers.InstanceBuffer = InRHICmdList.CreateStructuredBuffer(InstanceSize, InstanceBufferSize, BUF_UnorderedAccess | BUF_ShaderResource, ERHIAccess::SRVMask, CreateInfo);\n\t\t\tInBuffers.InstanceBufferUAV = InRHICmdList.CreateUnorderedAccessView(InBuffers.InstanceBuffer, false, false);\n\t\t\tInBuffers.InstanceBufferSRV = InRHICmdList.CreateShaderResourceView(InBuffers.InstanceBuffer);\n\t\t}\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"${NAME}.InstanceIndirectArgsBuffer\"));\n\t\t\tInBuffers.IndirectArgsBuffer = InRHICmdList.CreateVertexBuffer(5 * sizeof(uint32), BUF_UnorderedAccess | BUF_DrawIndirect, ERHIAccess::IndirectArgs, CreateInfo);\n\t\t\tInBuffers.IndirectArgsBufferUAV = InRHICmdList.CreateUnorderedAccessView(InBuffers.IndirectArgsBuffer, PF_R32_UINT);\n\t\t}\n\t}\n\n\t/** Initialize the volatile resources used in the render graph. */\n\tvoid InitializeResources(FRDGBuilder & GraphBuilder, FProxyDesc const &InDesc, FMainViewDesc const &InMainViewDesc, FVolatileResources &OutResources)\n\t{\n\t\tOutResources.QueueInfo = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateStructuredDesc(sizeof(WorkerQueueInfo), 1), TEXT(\"VirtualHeightfieldMesh.QueueInfo\"));\n\t\tOutResources.QueueInfoUAV = GraphBuilder.CreateUAV(OutResources.QueueInfo);\n\t\tOutResources.QueueBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateBufferDesc(sizeof(uint32), InDesc.MaxPersistentQueueItems), TEXT(\"VirtualHeightfieldMesh.QuadQueue\"));\n\t\tOutResources.QueueBufferUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutResources.QueueBuffer, PF_R32_UINT));\n\n\t\tOutResources.QuadBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateBufferDesc(sizeof(uint32) * 2, InDesc.MaxRenderItems), TEXT(\"VirtualHeightfieldMesh.QuadBuffer\"));\n\t\tOutResources.QuadBufferUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutResources.QuadBuffer, PF_R32G32_UINT));\n\t\tOutResources.QuadBufferSRV = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(OutResources.QuadBuffer, PF_R32G32_UINT));\n\n\t\tFRDGBufferDesc FeedbackBufferDesc = FRDGBufferDesc::CreateBufferDesc(sizeof(uint32), InDesc.MaxFeedbackItems + 1);\n\t\tFeedbackBufferDesc.Usage = EBufferUsageFlags(FeedbackBufferDesc.Usage | BUF_SourceCopy);\n\t\tOutResources.FeedbackBuffer = GraphBuilder.CreateBuffer(FeedbackBufferDesc, TEXT(\"VirtualHeightfieldMesh.FeedbackBuffer\"));\n\t\tOutResources.FeedbackBufferUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutResources.FeedbackBuffer, PF_R32_UINT));\n\n\t\tOutResources.IndirectArgsBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateIndirectDesc(IndirectArgsByteSize), TEXT(\"VirtualHeightfieldMesh.IndirectArgsBuffer\"));\n\t\tOutResources.IndirectArgsBufferUAV = GraphBuilder.CreateUAV(OutResources.IndirectArgsBuffer);\n\t\tOutResources.IndirectArgsBufferSRV = GraphBuilder.CreateSRV(OutResources.IndirectArgsBuffer);\n\t}\n\n\t/** Transition our output draw buffers for use. Read or write access is set according to the bToWrite parameter. */\n\tvoid AddPass_TransitionAllDrawBuffers(FRDGBuilder & GraphBuilder, TArray<VirtualHeightfieldMesh::FDrawInstanceBuffers> const &Buffers, TArrayView<int32> const &BufferIndices, bool bToWrite)\n\t{\n\t\tTArray<FRHIUnorderedAccessView *> OverlapUAVs;\n\t\tOverlapUAVs.Reserve(BufferIndices.Num());\n\n\t\tTArray<FRHITransitionInfo> TransitionInfos;\n\t\tTransitionInfos.Reserve(BufferIndices.Num() * 2);\n\n\t\tfor (int32 BufferIndex : BufferIndices)\n\t\t{\n\t\t\tFRHIUnorderedAccessView *IndirectArgsBufferUAV = Buffers[BufferIndex].IndirectArgsBufferUAV;\n\t\t\tFRHIUnorderedAccessView *InstanceBufferUAV = Buffers[BufferIndex].InstanceBufferUAV;\n\n\t\t\tOverlapUAVs.Add(IndirectArgsBufferUAV);\n\n\t\t\tTransitionInfos.Add(FRHITransitionInfo(IndirectArgsBufferUAV, bToWrite ? ERHIAccess::IndirectArgs : ERHIAccess::UAVMask, bToWrite ? ERHIAccess::UAVMask : ERHIAccess::IndirectArgs));\n\t\t\tTransitionInfos.Add(FRHITransitionInfo(InstanceBufferUAV, bToWrite ? ERHIAccess::SRVMask : ERHIAccess::UAVMask, bToWrite ? ERHIAccess::UAVMask : ERHIAccess::SRVMask));\n\t\t}\n\n\t\tAddPass(GraphBuilder, RDG_EVENT_NAME(\"TransitionAllDrawBuffers\"), [bToWrite, OverlapUAVs, TransitionInfos](FRHICommandList &InRHICmdList)\n\t\t\t\t\t\t{\n\t\t\tif (!bToWrite)\n\t\t\t{\n\t\t\t\tInRHICmdList.EndUAVOverlap(OverlapUAVs);\n\t\t\t}\n\n\t\t\tInRHICmdList.Transition(TransitionInfos);\n\t\t\t\n\t\t\tif (bToWrite)\n\t\t\t{\n\t\t\t\tInRHICmdList.BeginUAVOverlap(OverlapUAVs);\n\t\t\t} });\n\t}\n\n\t/** Initialize the buffers before collecting visible quads. */\n\tvoid AddPass_InitBuffers(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources)\n\t{\n\t\tTShaderMapRef<FInitBuffersVHM_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFInitBuffersVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FInitBuffersVHM_CS::FParameters>();\n\t\tPassParameters->MaxLevel = InDesc.MaxLevel;\n\t\tPassParameters->NumForceLoadLods = InDesc.NumForceLoadLods;\n\t\tPassParameters->PageTableFeedbackId = InDesc.PageTableFeedbackId;\n\t\tPassParameters->RWQueueInfo = InVolatileResources.QueueInfoUAV;\n\t\tPassParameters->RWQueueBuffer = InVolatileResources.QueueBufferUAV;\n\t\tPassParameters->RWQuadBuffer = InVolatileResources.QuadBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InVolatileResources.IndirectArgsBufferUAV;\n\t\tPassParameters->RWFeedbackBuffer = InVolatileResources.FeedbackBufferUAV;\n\n\t\tGraphBuilder.AddPass(\n\t\t\t\tRDG_EVENT_NAME(\"InitBuffers\"),\n\t\t\t\tPassParameters,\n\t\t\t\tERDGPassFlags::Compute,\n\t\t\t\t[PassParameters, ComputeShader](FRHICommandList &RHICmdList)\n\t\t\t\t{\n\t\t\t\t\t// todo: If feedback parsing understands append counter we don't need to fully clear\n\t\t\t\t\tRHICmdList.ClearUAVUint(PassParameters->RWFeedbackBuffer->GetRHI(), FUintVector4(0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff));\n\n\t\t\t\t\tFComputeShaderUtils::Dispatch(RHICmdList, ComputeShader, *PassParameters, FIntVector(1, 1, 1));\n\t\t\t\t});\n\t}\n\n\t/** Collect potentially visible quads and determine their Lods. */\n\tvoid AddPass_CollectQuads(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FMainViewDesc const &InViewDesc)\n\t{\n\t\tTShaderMapRef<FCollectQuadsVHM_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFCollectQuadsVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FCollectQuadsVHM_CS::FParameters>();\n\t\tPassParameters->HeightMinMaxTexture = InDesc.HeightMinMaxTexture;\n\t\tPassParameters->LodBiasMinMaxTexture = InDesc.LodBiasMinMaxTexture;\n\t\tPassParameters->MinMaxTextureSampler = TStaticSamplerState<SF_Point>::GetRHI();\n\t\tPassParameters->MinMaxLevelOffset = InDesc.MinMaxLevelOffset;\n\t\tPassParameters->OcclusionTexture = InViewDesc.OcclusionTexture;\n\t\tPassParameters->OcclusionLevelOffset = InViewDesc.OcclusionLevelOffset;\n\t\tPassParameters->PageTableTexture = InDesc.PageTableTexture;\n\t\tPassParameters->MaxLevel = InDesc.MaxLevel;\n\t\tPassParameters->PageTableSize = FVector4f(InDesc.PageTableSize); // LWC_TODO: precision loss\n\t\tPassParameters->PageTableFeedbackId = InDesc.PageTableFeedbackId;\n\t\tPassParameters->UVToWorld = FMatrix44f(InDesc.UVToWorld); // LWC_TODO: Precision loss\n\t\tPassParameters->UVToWorldScale = (FVector3f)InDesc.UVToWorldScale;\n\t\tPassParameters->ViewOrigin = (FVector3f)InViewDesc.ViewOrigin;\n\t\tPassParameters->LodDistances = FVector4f(InViewDesc.LodDistances); // LWC_TODO: precision loss\n\t\tPassParameters->LodBiasScale = InViewDesc.LodBiasScale;\n\t\tfor (int32 PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t\t{\n\t\t\tPassParameters->FrustumPlanes[PlaneIndex] = FVector4f(InViewDesc.Planes[PlaneIndex]); // LWC_TODO: precision loss\n\t\t}\n\t\tPassParameters->QueueBufferSizeMask = InDesc.MaxPersistentQueueItems - 1; // Assumes MaxPersistentQueueItems is a power of 2 so that we can wrap with a mask.\n\t\tPassParameters->RWQueueInfo = InVolatileResources.QueueInfoUAV;\n\t\tPassParameters->RWQueueBuffer = InVolatileResources.QueueBufferUAV;\n\t\tPassParameters->RWQuadBuffer = InVolatileResources.QuadBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InVolatileResources.IndirectArgsBufferUAV;\n\t\tPassParameters->RWFeedbackBuffer = InVolatileResources.FeedbackBufferUAV;\n\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"CollectQuads\"),\n\t\t\t\tComputeShader, PassParameters, FIntVector(InDesc.NumCollectPassWavefronts, 1, 1));\n\t}\n\n\t/** Initialise the draw indirect buffer. */\n\tvoid AddPass_InitInstanceBuffer(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, int32 NumQuadsPerTileSide, FDrawInstanceBuffers & InOutputResources)\n\t{\n\t\tTShaderMapRef<FInitInstanceBufferVHM_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFInitInstanceBufferVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FInitInstanceBufferVHM_CS::FParameters>();\n\t\tPassParameters->NumIndices = NumQuadsPerTileSide * NumQuadsPerTileSide * 6;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"InitInstanceBuffer\"),\n\t\t\t\tComputeShader, PassParameters, FIntVector(1, 1, 1));\n\t}\n\n\t/** Cull quads and write to the final output buffer. */\n\tvoid AddPass_CullInstances(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FDrawInstanceBuffers &InOutputResources, FChildViewDesc const &InViewDesc)\n\t{\n\t\tFCullInstancesVHM_CS::FParameters* PassParameters = GraphBuilder.AllocParameters<FCullInstancesVHM_CS::FParameters>();\n\t\tPassParameters->HeightMinMaxTexture = InDesc.HeightMinMaxTexture;y\n\t\tPassParameters->MinMaxTextureSampler = TStaticSamplerState<SF_Point>::GetRHI();\n\t\tPassParameters->MinMaxLevelOffset = InDesc.MinMaxLevelOffset;\n\t\tPassParameters->PageTableTexture = InDesc.PageTableTexture;\n\t\tPassParameters->PageTableSize = FVector4f(InDesc.PageTableSize); // LWC_TODO: precision loss\n\t\tfor (int32 PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t\t{\n\t\t\tPassParameters->FrustumPlanes[PlaneIndex] = FVector4f(InViewDesc.Planes[PlaneIndex]); // LWC_TODO: precision loss\n\t\t}\n\t\tPassParameters->PhysicalPageTransform = FVector4f(InDesc.PhysicalPageTransform); // LWC_TODO: precision loss\n\t\tPassParameters->NumPhysicalAddressBits = InDesc.NumPhysicalAddressBits;\n\t\tPassParameters->QuadBuffer = InVolatileResources.QuadBufferSRV;\n\t\tPassParameters->IndirectArgsBuffer = InVolatileResources.IndirectArgsBuffer;\n\t\tPassParameters->IndirectArgsBufferSRV = InVolatileResources.IndirectArgsBufferSRV;\n\t\tPassParameters->RWInstanceBuffer = InOutputResources.InstanceBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\n\t\tint32 IndirectArgOffset = VirtualHeightfieldMesh::IndirectArgsByteOffset_FinalCull;\n\n\t\tFCullInstancesVHM_CS::FPermutationDomain PermutationVector;\n\t\tPermutationVector.Set<FCullInstancesVHM_CS::FReuseCullDim>(InViewDesc.bIsMainView);\n\n\t\tTShaderMapRef<FCullInstancesVHM_CS> ComputeShader(InGlobalShaderMap, PermutationVector);\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"CullInstances\"),\n\t\t\t\tComputeShader, PassParameters,\n\t\t\t\tInVolatileResources.IndirectArgsBuffer,\n\t\t\t\tIndirectArgOffset);\n\t}\n}\n\nvoid FVirtualHeightfieldMeshRendererExtension::SubmitWork(FRDGBuilder &GraphBuilder)\n{\n\tSCOPE_CYCLE_COUNTER(STAT_VirtualHeightfieldMesh_SubmitWork);\n\tDECLARE_GPU_STAT(VirtualHeightfieldMesh)\n\tRDG_EVENT_SCOPE(GraphBuilder, \"VirtualHeightfieldMesh\");\n\tRDG_GPU_STAT_SCOPE(GraphBuilder, VirtualHeightfieldMesh);\n\n\t// Sort work so that we can batch by proxy/view\n\tWorkDescs.Sort(FWorkDescSort());\n\n\t// Add pass to transition all output buffers for writing\n\tTArray<int32, TInlineAllocator<8>> UsedBufferIndices;\n\tfor (FWorkDesc WorkdDesc : WorkDescs)\n\t{\n\t\tUsedBufferIndices.Add(WorkdDesc.BufferIndex);\n\t}\n\tAddPass_TransitionAllDrawBuffers(GraphBuilder, Buffers, UsedBufferIndices, true);\n\n\t// Add passes to initialize the output buffers\n\tfor (FWorkDesc WorkDesc : WorkDescs)\n\t{\n\t\tconst int32 NumQuadsPerTileSide = SceneProxies[WorkDesc.ProxyIndex]->NumQuadsPerTileSide;\n\t\tAddPass_InitInstanceBuffer(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), NumQuadsPerTileSide, Buffers[WorkDesc.BufferIndex]);\n\t}\n\n\t// Iterate workloads and submit work\n\tconst int32 NumWorkItems = WorkDescs.Num();\n\tint32 WorkIndex = 0;\n\twhile (WorkIndex < NumWorkItems)\n\t{\n\t\t// Gather data per proxy\n\t\tFVirtualHeightfieldMeshSceneProxy const *Proxy = SceneProxies[WorkDescs[WorkIndex].ProxyIndex];\n\t\tIAllocatedVirtualTexture *AllocatedVirtualTexture = Proxy->AllocatedVirtualTexture;\n\n\t\tconst float PageSize = AllocatedVirtualTexture->GetVirtualTileSize();\n\t\tconst float PageBorderSize = AllocatedVirtualTexture->GetTileBorderSize();\n\t\tconst float PageAndBorderSize = PageSize + PageBorderSize * 2.f;\n\t\tconst float HalfTexelSize = 0.5f;\n\t\tconst float PhysicalTextureSize = AllocatedVirtualTexture->GetPhysicalTextureSize(0);\n\t\tconst FVector4 PhysicalPageTransform = FVector4(PageAndBorderSize, PageSize, PageBorderSize, HalfTexelSize) * (1.f / PhysicalTextureSize);\n\n\t\tconst float PageTableSizeX = AllocatedVirtualTexture->GetWidthInTiles();\n\t\tconst float PageTableSizeY = AllocatedVirtualTexture->GetHeightInTiles();\n\t\tconst FVector4 PageTableSize = FVector4(PageTableSizeX, PageTableSizeY, 1.f / PageTableSizeX, 1.f / PageTableSizeY);\n\n\t\tVirtualHeightfieldMesh::FProxyDesc ProxyDesc;\n\t\tProxyDesc.PageTableTexture = AllocatedVirtualTexture->GetPageTableTexture(0);\n\t\tProxyDesc.HeightMinMaxTexture = Proxy->HeightMinMaxTexture ? Proxy->HeightMinMaxTexture->GetResource()->TextureRHI : VirtualHeightfieldMesh::GHeightMinMaxDefaultTexture->TextureRHI;\n\t\tProxyDesc.LodBiasMinMaxTexture = Proxy->LodBiasMinMaxTexture ? Proxy->LodBiasMinMaxTexture->GetResource()->TextureRHI : GBlackTexture->TextureRHI;\n\t\tProxyDesc.MinMaxLevelOffset = ProxyDesc.HeightMinMaxTexture->GetNumMips() - 1 - AllocatedVirtualTexture->GetMaxLevel();\n\t\tProxyDesc.MaxLevel = AllocatedVirtualTexture->GetMaxLevel();\n\t\tProxyDesc.NumForceLoadLods = FMath::Min<uint32>(FMath::Max(Proxy->NumForceLoadLods, 0), ProxyDesc.MaxLevel + 1);\n\t\tProxyDesc.PageTableSize = PageTableSize;\n\t\tProxyDesc.PhysicalPageTransform = PhysicalPageTransform;\n\t\tProxyDesc.NumPhysicalAddressBits = AllocatedVirtualTexture->GetPageTableFormat() == EVTPageTableFormat::UInt16 ? 6 : 8; // See packing in PageTableUpdate.usf\n\t\tProxyDesc.PageTableFeedbackId = AllocatedVirtualTexture->GetSpaceID() << 28;\n\t\tProxyDesc.UVToWorld = Proxy->UVToWorld;\n\t\tProxyDesc.UVToWorldScale = Proxy->UVToWorldScale;\n\t\tProxyDesc.NumQuadsPerTileSide = Proxy->NumQuadsPerTileSide;\n\t\tProxyDesc.MaxPersistentQueueItems = 1 << FMath::CeilLogTwo(CVarVHMMaxPersistentQueueItems.GetValueOnRenderThread());\n\t\tProxyDesc.MaxRenderItems = CVarVHMMaxRenderItems.GetValueOnRenderThread();\n\t\tProxyDesc.MaxFeedbackItems = CVarVHMMaxFeedbackItems.GetValueOnRenderThread();\n\t\tProxyDesc.NumCollectPassWavefronts = CVarVHMCollectPassWavefronts.GetValueOnRenderThread();\n\n\t\twhile (WorkIndex < NumWorkItems && SceneProxies[WorkDescs[WorkIndex].ProxyIndex] == Proxy)\n\t\t{\n\t\t\t// Gather data per main view\n\t\t\tFSceneView const *MainView = MainViews[WorkDescs[WorkIndex].MainViewIndex];\n\n\t\t\tVirtualHeightfieldMesh::FViewData MainViewData;\n\t\t\tVirtualHeightfieldMesh::GetViewData(MainView, MainViewData);\n\n\t\t\tVirtualHeightfieldMesh::FMainViewDesc MainViewDesc;\n\t\t\tMainViewDesc.ViewDebug = MainView;\n\n\t\t\t// ViewOrigin and Frustum Planes are all converted to UV space for the shader.\n\t\t\tMainViewDesc.ViewOrigin = Proxy->WorldToUV.TransformPosition(MainViewData.ViewOrigin);\n\t\t\tMainViewDesc.LodDistances = FVector4(VirtualHeightfieldMesh::CalculateLodRanges(MainView, Proxy));\n\t\t\tMainViewDesc.LodBiasScale = Proxy->LodBiasScale;\n\n\t\t\tconst int32 MainViewNumPlanes = FMath::Min(MainViewData.ViewFrustum.Planes.Num(), 5);\n\t\t\tfor (int32 PlaneIndex = 0; PlaneIndex < MainViewNumPlanes; ++PlaneIndex)\n\t\t\t{\n\t\t\t\tFPlane Plane = MainViewData.ViewFrustum.Planes[PlaneIndex];\n\t\t\t\tPlane = VirtualHeightfieldMesh::TransformPlane(Plane, Proxy->WorldToUV, Proxy->WorldToUVTransposeAdjoint);\n\t\t\t\tMainViewDesc.Planes[PlaneIndex] = VirtualHeightfieldMesh::ConvertPlane(Plane);\n\t\t\t}\n\t\t\tfor (int32 PlaneIndex = MainViewNumPlanes; PlaneIndex < 5; ++PlaneIndex)\n\t\t\t{\n\t\t\t\tMainViewDesc.Planes[PlaneIndex] = FPlane(0, 0, 0, 1); // Null plane won't cull anything\n\t\t\t}\n\n\t\t\tFOcclusionResults *OcclusionResults = GOcclusionResults.Find(FOcclusionResultsKey(Proxy, MainView));\n\t\t\tif (OcclusionResults == nullptr)\n\t\t\t{\n\t\t\t\tMainViewDesc.OcclusionTexture = GBlackTexture->TextureRHI;\n\t\t\t\tMainViewDesc.OcclusionLevelOffset = (int32)ProxyDesc.MaxLevel;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tMainViewDesc.OcclusionTexture = OcclusionResults->OcclusionTexture;\n\t\t\t\tMainViewDesc.OcclusionLevelOffset = (int32)ProxyDesc.MaxLevel - OcclusionResults->NumTextureMips + 1;\n\t\t\t}\n\n\t\t\t// Build volatile graph resources\n\t\t\tVirtualHeightfieldMesh::FVolatileResources VolatileResources;\n\t\t\tVirtualHeightfieldMesh::InitializeResources(GraphBuilder, ProxyDesc, MainViewDesc, VolatileResources);\n\n\t\t\t// Build graph\n\t\t\tVirtualHeightfieldMesh::AddPass_InitBuffers(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources);\n\t\t\tVirtualHeightfieldMesh::AddPass_CollectQuads(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, MainViewDesc);\n\n\t\t\tFVirtualTextureFeedbackBufferDesc Desc;\n\t\t\tDesc.Init(CVarVHMMaxFeedbackItems.GetValueOnRenderThread() + 1);\n\t\t\tSubmitVirtualTextureFeedbackBuffer(GraphBuilder, VolatileResources.FeedbackBuffer, Desc);\n\n\t\t\twhile (WorkIndex < NumWorkItems && MainViews[WorkDescs[WorkIndex].MainViewIndex] == MainView)\n\t\t\t{\n\t\t\t\t// Gather data per child view\n\t\t\t\tFSceneView const *CullView = CullViews[WorkDescs[WorkIndex].CullViewIndex];\n\t\t\t\tFConvexVolume const *ShadowFrustum = CullView->GetDynamicMeshElementsShadowCullFrustum();\n\t\t\t\tFConvexVolume const &Frustum = ShadowFrustum != nullptr && ShadowFrustum->Planes.Num() > 0 ? *ShadowFrustum : CullView->ViewFrustum;\n\t\t\t\tconst FVector PreShadowTranslation = ShadowFrustum != nullptr ? CullView->GetPreShadowTranslation() : FVector::ZeroVector;\n\n\t\t\t\tVirtualHeightfieldMesh::FChildViewDesc ChildViewDesc;\n\t\t\t\tChildViewDesc.ViewDebug = MainView;\n\t\t\t\tChildViewDesc.bIsMainView = CullView == MainView;\n\n\t\t\t\tconst int32 ChildViewNumPlanes = FMath::Min(Frustum.Planes.Num(), 5);\n\t\t\t\tfor (int32 PlaneIndex = 0; PlaneIndex < ChildViewNumPlanes; ++PlaneIndex)\n\t\t\t\t{\n\t\t\t\t\tFPlane Plane = Frustum.Planes[PlaneIndex];\n\t\t\t\t\tPlane = VirtualHeightfieldMesh::TranslatePlane(Plane, PreShadowTranslation);\n\t\t\t\t\tPlane = VirtualHeightfieldMesh::TransformPlane(Plane, Proxy->WorldToUV, Proxy->WorldToUVTransposeAdjoint);\n\t\t\t\t\tChildViewDesc.Planes[PlaneIndex] = VirtualHeightfieldMesh::ConvertPlane(Plane);\n\t\t\t\t}\n\t\t\t\tfor (int32 PlaneIndex = ChildViewNumPlanes; PlaneIndex < 5; ++PlaneIndex)\n\t\t\t\t{\n\t\t\t\t\tMainViewDesc.Planes[PlaneIndex] = FPlane(0, 0, 0, 1); // Null plane won't cull anything\n\t\t\t\t}\n\n\t\t\t\t// Build graph\n\t\t\t\tVirtualHeightfieldMesh::AddPass_CullInstances(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, Buffers[WorkDescs[WorkIndex].BufferIndex], ChildViewDesc);\n\n\t\t\t\tWorkIndex++;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add pass to transition all output buffers for reading\n\tAddPass_TransitionAllDrawBuffers(GraphBuilder, Buffers, UsedBufferIndices, false);\n}\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Private/ProxyTemplate.h",
    "content": "#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"PrimitiveSceneProxy.h\"\n#include \"Materials/MaterialRenderProxy.h\"\n\nnamespace ${NAME}Mesh\n{\n\t/** Buffers filled by GPU culling. */\n\tstruct FDrawInstanceBuffers\n\t{\n\t\t/* Culled instance buffer. */\n\t\tFBufferRHIRef InstanceBuffer;\n\t\tFUnorderedAccessViewRHIRef InstanceBufferUAV;\n\t\tFShaderResourceViewRHIRef InstanceBufferSRV;\n\n\t\t/* IndirectArgs buffer for final DrawInstancedIndirect. */\n\t\tFBufferRHIRef IndirectArgsBuffer;\n\t\tFUnorderedAccessViewRHIRef IndirectArgsBufferUAV;\n\t};\n}\n\nclass ${NAME} final : public FPrimitiveSceneProxy\n{\npublic:\n\t${NAME}(class ${instance.component.name}* InComponent);\n\nprotected:\n\t//~ Begin FPrimitiveSceneProxy Interface\n\tvirtual SIZE_T GetTypeHash() const override;\n\tvirtual uint32 GetMemoryFootprint() const override;\n\tvirtual void CreateRenderThreadResources() override;\n\tvirtual void DestroyRenderThreadResources() override;\n\tvirtual void OnTransformChanged() override;\n\tvirtual bool HasSubprimitiveOcclusionQueries() const override;\n\tvirtual const TArray<FBoxSphereBounds> *GetOcclusionQueries(const FSceneView *View) const override;\n\tvirtual void AcceptOcclusionResults(const FSceneView *View, TArray<bool> *Results, int32 ResultsStart, int32 NumResults) override;\n\tvirtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override;\n\tvirtual void GetDynamicMeshElements(const TArray<const FSceneView *> &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const override;\n\t//~ End FPrimitiveSceneProxy Interface\n\nprivate:\n\tvoid BuildOcclusionVolumes(TArrayView<FVector2D> const &InMinMaxData, FIntPoint const &InMinMaxSize, TArrayView<int32> const &InMinMaxMips, int32 InNumLods);\n\npublic:\n\tbool bHiddenInEditor;\n\n\tclass FMaterialRenderProxy *Material;\n\tFMaterialRelevance MaterialRelevance;\n\n\tbool bCallbackRegistered;\n\n\tclass ${instance.factory.name} *VertexFactory;\n};\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Public/ActorTemplate.h",
    "content": "#include \"GameFramework/Actor.h\"\n\n// Shadeup provided helper functions\n#include \"ShadeupLib.h\"\n\n// Commonly included headers\n#include \"Engine/Texture.h\"\n#include \"Engine/TextureRenderTarget2D.h\"\n#include \"Components/StaticMeshComponent.h\"\n\n// User defined includes\n${instance.code(\"Include\")}\n\n#include \"${instance.nameWithoutPrefix}.generated.h\"\n\nUCLASS()\nclass ${NAME} : public AActor, public ShadeupActorHelpers_${MODULE_NAME}\n{\n    GENERATED_BODY()\n\npublic:\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite)\n\tclass USceneComponent* SceneComponent;\n\n\t${NAME}();\n\n    ${instance.code(\"Header\")}\n\t\nprotected:\n    // Called when the game starts or when spawned\n    virtual void BeginPlay() override;\n};"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Public/ModuleTemplate.h",
    "content": "#pragma once\n\n#include \"CoreMinimal.h\"\n\n#include \"Modules/ModuleInterface.h\"\n#include \"Modules/ModuleManager.h\"\n\n#include \"RenderGraphResources.h\"\n#include \"Runtime/Engine/Classes/Engine/TextureRenderTarget2D.h\"\n\nclass ${SCOPE} F${MODULE_NAME}Module : public IModuleInterface\n{\npublic:\n\n\t/** IModuleInterface implementation */\n\tvirtual void StartupModule() override;\n\tvirtual void ShutdownModule() override;\n};\n"
  },
  {
    "path": "unreal-engine/src/template/Plugin/Source/Module/Template.Build.cs",
    "content": "using UnrealBuildTool; \n\npublic class TestShader: ModuleRules \n\n{ \n\n\tpublic TestShader(ReadOnlyTargetRules Target) : base(Target) \n\n\t{\n\t\tPCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;\n\t\t\n\t\tPrivateIncludePaths.AddRange(new string[] \n\t\t{\n\t\t\t\"Runtime/Renderer/Private\",\n\t\t\t\"TestShader/Private\"\n\t\t});\n\t\tif (Target.bBuildEditor == true)\n\t\t{\n\t\t\tPrivateDependencyModuleNames.Add(\"TargetPlatform\");\n\t\t}\n\t\tPublicDependencyModuleNames.Add(\"Core\");\n\t\tPublicDependencyModuleNames.Add(\"Engine\");\n\t\tPublicDependencyModuleNames.Add(\"MaterialShaderQualitySettings\");\n\t\t\n\t\tPrivateDependencyModuleNames.AddRange(new string[]\n\t\t{\n\t\t\t\"CoreUObject\",\n\t\t\t\"Renderer\",\n\t\t\t\"RenderCore\",\n\t\t\t\"RHI\",\n\t\t\t\"Projects\"\n\t\t});\n\t\t\n\t\tif (Target.bBuildEditor == true)\n\t\t{\n\n\t\t\tPrivateDependencyModuleNames.AddRange(\n\t\t\t\tnew string[] {\n\t\t\t\t\t\"UnrealEd\",\n\t\t\t\t\t\"MaterialUtilities\",\n\t\t\t\t\t\"SlateCore\",\n\t\t\t\t\t\"Slate\"\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tCircularlyReferencedDependentModules.AddRange(\n\t\t\t\tnew string[] {\n\t\t\t\t\t\"UnrealEd\",\n\t\t\t\t\t\"MaterialUtilities\",\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} \n\n}"
  },
  {
    "path": "unreal-engine/src/template/Template.Build.cs",
    "content": "using UnrealBuildTool; \n\npublic class ${MODULE_NAME}: ModuleRules \n\n{ \n\n\tpublic ${MODULE_NAME}(ReadOnlyTargetRules Target) : base(Target) \n\n\t{\n\t\tPCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;\n\t\t\n\t\tPrivateIncludePaths.AddRange(new string[] \n\t\t{\n\t\t\t\"Runtime/Renderer/Private\",\n\t\t\t\"${MODULE_NAME}/Private\"\n\t\t});\n\t\tif (Target.bBuildEditor == true)\n\t\t{\n\t\t\tPrivateDependencyModuleNames.Add(\"TargetPlatform\");\n\t\t}\n\t\tPublicDependencyModuleNames.Add(\"Core\");\n\t\tPublicDependencyModuleNames.Add(\"Engine\");\n\t\tPublicDependencyModuleNames.Add(\"MaterialShaderQualitySettings\");\n\t\t\n\t\tPrivateDependencyModuleNames.AddRange(new string[]\n\t\t{\n\t\t\t\"CoreUObject\",\n\t\t\t\"Renderer\",\n\t\t\t\"RenderCore\",\n\t\t\t\"RHI\",\n\t\t\t\"Projects\"\n\t\t});\n\t\t\n\t\tif (Target.bBuildEditor == true)\n\t\t{\n\n\t\t\tPrivateDependencyModuleNames.AddRange(\n\t\t\t\tnew string[] {\n\t\t\t\t\t\"UnrealEd\",\n\t\t\t\t\t\"MaterialUtilities\",\n\t\t\t\t\t\"SlateCore\",\n\t\t\t\t\t\"Slate\"\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tCircularlyReferencedDependentModules.AddRange(\n\t\t\t\tnew string[] {\n\t\t\t\t\t\"UnrealEd\",\n\t\t\t\t\t\"MaterialUtilities\",\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} \n\n}"
  },
  {
    "path": "unreal-engine/src/template/compute.cpp",
    "content": ""
  },
  {
    "path": "unreal-engine/src/template/lib/ShadeupLib.cpp",
    "content": "#include \"ShadeupLib.h\"\n\nUTextureRenderTarget2D* ShadeupActorHelpers_${MODULE_NAME}::AddRenderTarget(const int32 Width, const int32 Height, ETextureRenderTargetFormat Format) {\n\t// return UKismetRenderingLibrary::CreateRenderTarget2D(ThisActor, Width, Height, Format);\n\n\tauto RenderTarget = NewObject<UTextureRenderTarget2D>(ThisActor);\n\tcheck(RenderTarget);\n\tRenderTarget->RenderTargetFormat = Format;\n\tRenderTarget->ClearColor = FLinearColor(0, 0, 0, 0);\n\tRenderTarget->bAutoGenerateMips = false;\n\tRenderTarget->AddressX = TextureAddress::TA_Clamp;\n\tRenderTarget->AddressY = TextureAddress::TA_Clamp;\n\tRenderTarget->SRGB = false;\n\tRenderTarget->Filter = TextureFilter::TF_Bilinear;\n\tRenderTarget->InitAutoFormat(Width, Height);\n\tRenderTarget->bCanCreateUAV = true;\n\tRenderTarget->UpdateResourceImmediate(true);\n\n\treturn RenderTarget;\n}\n\nTObjectPtr<UStaticMeshComponent> ShadeupActorHelpers_${MODULE_NAME}::AddStaticMesh(const FString& Name, const MeshShape& Shape, const FVector& Location, const FRotator& Rotation, const FVector& Scale) {\n\tUStaticMeshComponent* Comp = nullptr;\n\n\tif (bIsInConstructor) {\n\t\tComp = ThisActor->CreateDefaultSubobject<UStaticMeshComponent>(FName(Name));\n\t\tComp->SetupAttachment(ThisActor->GetRootComponent());\n\t\tComp->SetRelativeLocation(Location);\n\t\tComp->SetRelativeRotation(Rotation);\n\t\tComp->SetRelativeScale3D(Scale); \n\t}else{\n\t\tComp = NewObject<UStaticMeshComponent>(ThisActor, FName(Name));\n\t\tif(!Comp) {\n\t\t\treturn NULL;\n\t\t}\n\n\t\tComp->RegisterComponent();\n\t\tComp->SetWorldLocation(Location); \n\t\tComp->SetWorldRotation(Rotation); \n\t\tComp->SetRelativeScale3D(Scale); \n\t\tComp->SetupAttachment(ThisActor->GetRootComponent());\n\t}\n\n\tif (Shape == MeshShape::Cube) {\n\t\tstatic ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT(\"StaticMesh'/Engine/BasicShapes/Cube.Cube'\"));\n\t\tComp->SetStaticMesh(MeshAsset.Object);\n\t}\n\telse if (Shape == MeshShape::Sphere) {\n\t\tstatic ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT(\"StaticMesh'/Engine/BasicShapes/Sphere.Sphere'\"));\n\t\tComp->SetStaticMesh(MeshAsset.Object);\n\t}\n\telse if (Shape == MeshShape::Cylinder) {\n\t\tstatic ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT(\"StaticMesh'/Engine/BasicShapes/Cylinder.Cylinder'\"));\n\t\tComp->SetStaticMesh(MeshAsset.Object);\n\t}\n\telse if (Shape == MeshShape::Plane) {\n\t\tstatic ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT(\"StaticMesh'/Engine/BasicShapes/Plane.Plane'\"));\n\t\tComp->SetStaticMesh(MeshAsset.Object);\n\t}\n\t\n\treturn TObjectPtr<UStaticMeshComponent>(Comp);\n}\n\n\nvoid ShadeupActorHelpers_${MODULE_NAME}::Setup() {}"
  },
  {
    "path": "unreal-engine/src/template/lib/ShadeupLib.h",
    "content": "// Shared shadeup helpers\n#ifndef SHADEUP_LIB_${MODULE_NAME}\n#define SHADEUP_LIB_${MODULE_NAME}\n\n#include \"Engine/TextureRenderTarget2D.h\"\n#include \"Kismet/GameplayStatics.h\"\n#include \"Kismet/KismetRenderingLibrary.h\"\n#include \"Components/StaticMeshComponent.h\"\n\n// Actor helpers included in every shadeup actor defined\n\nclass ShadeupActorHelpers_${MODULE_NAME} {\npublic:\n\tenum MeshShape {\n\t\tCube,\n\t\tSphere,\n\t\tCylinder,\n\t\tPlane\n\t};\n\n\tAActor* ThisActor;\n\n\tbool bIsInConstructor = true;\n\n\tUTextureRenderTarget2D* AddRenderTarget(const int32 Width, const int32 Height, ETextureRenderTargetFormat Format = ETextureRenderTargetFormat::RTF_RGBA8_SRGB);\n\n\tTObjectPtr<UStaticMeshComponent> AddStaticMesh(const FString& Name, const MeshShape& Shape, const FVector& Location = FVector(0.f), const FRotator& Rotation = FRotator(0.f), const FVector& Scale = FVector(1.f));\n\t\n\t// Called in the actor constructor\n\tvirtual void Setup();\n};\n\n\n#endif"
  },
  {
    "path": "unreal-engine/src/template/lib/readme.md",
    "content": "# src/lib\n\nProvides shared c++ code for generated files. e.g. Shadeup Actor with some helper methods for creating render targets or components"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Shaders/[MODULE]/Private/[NAME]/$base[NAME].usf",
    "content": "#include \"/Engine/Public/Platform.ush\"\n\nBuffer<int> Input;\nRWBuffer<int> Output;\n\n[numthreads(THREADS_X, THREADS_Y, THREADS_Z)]\nvoid ${this.answers.name}(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\t// Outputs one number\n\tOutput[0] = Input[0] * Input[1];\n}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Shaders/[MODULE]/Private/[NAME]/$basemat[NAME].usf",
    "content": "#include \"/Engine/Generated/Material.ush\"\n#include \"/Engine/Public/Platform.ush\"\n\nfloat2 Position;\nRWBuffer<float4> OutputColor;\n\n[numthreads(THREADS_X, THREADS_Y, THREADS_Z)]\nvoid ${this.answers.name}(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\tfloat4 SvPosition = float4(Position.xy, 0, 0);\n\t\n\tFMaterialPixelParameters MaterialParameters = MakeInitializedMaterialPixelParameters();\n\n\t// There are various inputs we can provide to the material graph via FMaterialPixelParameters\n\t// See: https://github.com/EpicGames/UnrealEngine/blob/5.0/Engine/Shaders/Private/MaterialTemplate.ush#L262\n\t\n\tMaterialParameters.VertexColor = half4(1, 1, 0, 1);\n\t\n\tFPixelMaterialInputs PixelMaterialInputs = (FPixelMaterialInputs)0;\n\n\t// This is the call to the material graph\n\tCalcMaterialParameters(MaterialParameters, PixelMaterialInputs, SvPosition, true);\n\n\t// PixelMaterialInputs is a struct that contains the outputs of the material graph\n\t// Use the provided helper methods ( GetMaterialXYZ(...) ) to access the outputs\n\t// See: https://github.com/EpicGames/UnrealEngine/blob/5.0/Engine/Shaders/Private/MaterialTemplate.ush#L2485\n\n\tOutputColor[0] = float4(GetMaterialBaseColor(PixelMaterialInputs), 0);\n\n\t// You can also access custom output nodes via their respective names\n\t// e.g. GetMyCustomMaterialOutput0(MaterialParameters)\n\t// See: Custom node example\n}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Shaders/[MODULE]/Private/[NAME]/$mat[NAME].usf",
    "content": "#include \"/Engine/Generated/Material.ush\"\n#include \"/Engine/Public/Platform.ush\"\n\nRWTexture2D<float3> RenderTarget;\n\n[numthreads(THREADS_X, THREADS_Y, THREADS_Z)]\nvoid ${this.answers.name}(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\tfloat4 SvPosition = float4(DispatchThreadId.xy, 0, 0);\n\t\n\tFMaterialPixelParameters MaterialParameters = MakeInitializedMaterialPixelParameters();\n\n\t// There are various inputs we can provide to the material graph via FMaterialPixelParameters\n\t// See: https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Shaders/Private/MaterialTemplate.ush#L262\n\t\n\tMaterialParameters.VertexColor = half4(1, 1, 0, 1);\n\t\n\tFPixelMaterialInputs PixelMaterialInputs = (FPixelMaterialInputs)0;\n\n\t// This is the call to the material graph\n\tCalcMaterialParameters(MaterialParameters, PixelMaterialInputs, SvPosition, true);\n\n\t// PixelMaterialInputs is a struct that contains the outputs of the material graph\n\t// Use the provided helper methods ( GetMaterialXYZ(...) ) to access the outputs\n\t// See: https://github.com/chendi-YU/UnrealEngine/blob/master/Engine/Shaders/MaterialTemplate.usf#L1298\n\t\n\tRenderTarget[DispatchThreadId.xy] = GetMaterialBaseColor(PixelMaterialInputs);\n}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Shaders/[MODULE]/Private/[NAME]/$pi[NAME].usf",
    "content": "#include \"/Engine/Public/Platform.ush\"\n\n// Calculate π using the monte carlo method\n// https://en.wikipedia.org/wiki/Monte_Carlo_method\n\n// Output has 1 element: [numInCircle]\nRWBuffer<uint> Output;\n\n// Seed the random number generator\nfloat Seed = 0.0f;\n\nfloat random( float2 p )\n{\n    float2 r = float2(\n        23.14069263277926,\n         2.665144142690225\n    );\n    return frac( cos( dot(p,r) ) * 12345.6789 );\n}\n\n[numthreads(THREADS_X, THREADS_Y, THREADS_Z)]\nvoid ${this.answers.name}(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\tfloat2 RandomPosition = float2(\n\t\trandom(float2(GroupIndex * THREADS_X + DispatchThreadId.x, 10 + Seed)),\n\t\trandom(float2(GroupIndex * THREADS_X + DispatchThreadId.x, 20 * Seed))\n\t);\n\tfloat Dist = length(RandomPosition);\n\n\tif (Dist < 1.0f) {\n\t\tuint Dummy;\n\t\tInterlockedAdd(Output[0], 1, Dummy);\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Shaders/[MODULE]/Private/[NAME]/$rt[NAME].usf",
    "content": "#include \"/Engine/Public/Platform.ush\"\n\nRWTexture2D<float3> RenderTarget;\n\n[numthreads(THREADS_X, THREADS_Y, THREADS_Z)]\nvoid ${this.answers.name}(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\t// Simple checkerboard\n\tint x = floor(DispatchThreadId.x / 16.f);\n\tint y = floor(DispatchThreadId.y / 16.f);\n\tint c = (x + y % 2) % 2;\n\t\n\tRenderTarget[DispatchThreadId.xy] = float3(c, c, c);\n}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Private/[NAME]/[NAME].cpp",
    "content": "#include \"${NAME}.h\"\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}.h\"\n#include \"PixelShaderUtils.h\"\n#include \"MeshPassProcessor.inl\"\n#include \"StaticMeshResources.h\"\n#include \"DynamicMeshBuilder.h\"\n#include \"RenderGraphResources.h\"\n#include \"GlobalShader.h\"\n#include \"UnifiedBuffer.h\"\n#include \"CanvasTypes.h\"\n#include \"MeshDrawShaderBindings.h\"\n#include \"RHIGPUReadback.h\"\n#include \"MeshPassUtils.h\"\n#include \"MaterialShader.h\"\n\nDECLARE_STATS_GROUP(TEXT(\"${NAME}\"), STATGROUP_${NAME}, STATCAT_Advanced);\nDECLARE_CYCLE_STAT(TEXT(\"${NAME} Execute\"), STAT_${NAME}_Execute, STATGROUP_${NAME});\n\n// This class carries our parameter declarations and acts as the bridge between cpp and HLSL.\nclass ${SCOPE} F${NAME}: public ${instance.material ? \"FMeshMaterialShader\" : \"FGlobalShader\"}\n{\npublic:\n\t${instance.material ? `\n\tDECLARE_SHADER_TYPE(F${NAME}, MeshMaterial);\n\tSHADER_USE_PARAMETER_STRUCT_WITH_LEGACY_BASE(F${NAME}, FMeshMaterialShader)\n\t` : `\n\tDECLARE_GLOBAL_SHADER(F${NAME});\n\tSHADER_USE_PARAMETER_STRUCT(F${NAME}, FGlobalShader);\n\t`\n\t}\n\t\n\tclass F${NAME}_Perm_TEST : SHADER_PERMUTATION_INT(\"TEST\", 1);\n\tusing FPermutationDomain = TShaderPermutationDomain<\n\t\tF${NAME}_Perm_TEST\n\t>;\n\n\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\t/*\n\t\t* Here's where you define one or more of the input parameters for your shader.\n\t\t* Some examples:\n\t\t*/\n\t\t// SHADER_PARAMETER(uint32, MyUint32) // On the shader side: uint32 MyUint32;\n\t\t// SHADER_PARAMETER(FVector3f, MyVector) // On the shader side: float3 MyVector;\n\n\t\t// SHADER_PARAMETER_TEXTURE(Texture2D, MyTexture) // On the shader side: Texture2D<float4> MyTexture; (float4 should be whatever you expect each pixel in the texture to be, in this case float4(R,G,B,A) for 4 channels)\n\t\t// SHADER_PARAMETER_SAMPLER(SamplerState, MyTextureSampler) // On the shader side: SamplerState MySampler; // CPP side: TStaticSamplerState<ESamplerFilter::SF_Bilinear>::GetRHI();\n\n\t\t// SHADER_PARAMETER_ARRAY(float, MyFloatArray, [3]) // On the shader side: float MyFloatArray[3];\n\n\t\t// SHADER_PARAMETER_UAV(RWTexture2D<FVector4f>, MyTextureUAV) // On the shader side: RWTexture2D<float4> MyTextureUAV;\n\t\t// SHADER_PARAMETER_UAV(RWStructuredBuffer<FMyCustomStruct>, MyCustomStructs) // On the shader side: RWStructuredBuffer<FMyCustomStruct> MyCustomStructs;\n\t\t// SHADER_PARAMETER_UAV(RWBuffer<FMyCustomStruct>, MyCustomStructs) // On the shader side: RWBuffer<FMyCustomStruct> MyCustomStructs;\n\n\t\t// SHADER_PARAMETER_SRV(StructuredBuffer<FMyCustomStruct>, MyCustomStructs) // On the shader side: StructuredBuffer<FMyCustomStruct> MyCustomStructs;\n\t\t// SHADER_PARAMETER_SRV(Buffer<FMyCustomStruct>, MyCustomStructs) // On the shader side: Buffer<FMyCustomStruct> MyCustomStructs;\n\t\t// SHADER_PARAMETER_SRV(Texture2D<FVector4f>, MyReadOnlyTexture) // On the shader side: Texture2D<float4> MyReadOnlyTexture;\n\n\t\t// SHADER_PARAMETER_STRUCT_REF(FMyCustomStruct, MyCustomStruct)\n\n\t\t${instance.example == \"pi\" ? `\n\t\tSHADER_PARAMETER(float, Seed)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint32>, Output)\n\t\t` : \"\"}${instance.example == \"base\" ? `\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<int>, Input)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<int>, Output)\n\t\t` : \"\"}${instance.example == \"rt\" ? `\n\t\tSHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D, RenderTarget)\n\t\t` : \"\"}${instance.example == \"mat\" ? `\n\t\tSHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D, RenderTarget)\n\t\t` : \"\"}${instance.example == \"basemat\" ? `\n\t\tSHADER_PARAMETER(FVector2f, Position)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<float4>, OutputColor)\n\t\tSHADER_PARAMETER_STRUCT_REF(FViewUniformShaderParameters, View)\n\t\t` : \"\"}\n\n\tEND_SHADER_PARAMETER_STRUCT()\n\npublic:\n\tstatic bool ShouldCompilePermutation(const F${instance.ShaderBase}ShaderPermutationParameters& Parameters)\n\t{\n\t\tconst FPermutationDomain PermutationVector(Parameters.PermutationId);\n\t\t${instance.material ? `\n\t\tconst bool bIsCompatible =\n\t\t\tParameters.MaterialParameters.MaterialDomain == MD_Surface\n\t\t\t&& Parameters.MaterialParameters.BlendMode == BLEND_Opaque\n\t\t\t&& Parameters.MaterialParameters.ShadingModels == MSM_DefaultLit\n\t\t\t&& Parameters.MaterialParameters.bIsUsedWithVirtualHeightfieldMesh;\n\n\t\treturn bIsCompatible;` : ``}\n\t\treturn true;\n\t}\n\n\tstatic void ModifyCompilationEnvironment(const F${instance.ShaderBase}ShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)\n\t{\n\t\tF${instance.ShaderBase}Shader::ModifyCompilationEnvironment(Parameters, OutEnvironment);\n\n\t\tconst FPermutationDomain PermutationVector(Parameters.PermutationId);\n\n\t\t/*\n\t\t* Here you define constants that can be used statically in the shader code.\n\t\t* Example:\n\t\t*/\n\t\t// OutEnvironment.SetDefine(TEXT(\"MY_CUSTOM_CONST\"), TEXT(\"1\"));\n\n\t\t/*\n\t\t* These defines are used in the thread count section of our shader\n\t\t*/\n\t\tOutEnvironment.SetDefine(TEXT(\"THREADS_X\"), NUM_THREADS_${NAME}_X);\n\t\tOutEnvironment.SetDefine(TEXT(\"THREADS_Y\"), NUM_THREADS_${NAME}_Y);\n\t\tOutEnvironment.SetDefine(TEXT(\"THREADS_Z\"), NUM_THREADS_${NAME}_Z);\n\n\t\t// This shader must support typed UAV load and we are testing if it is supported at runtime using RHIIsTypedUAVLoadSupported\n\t\t//OutEnvironment.CompilerFlags.Add(CFLAG_AllowTypedUAVLoads);\n\n\t\t// FForwardLightingParameters::ModifyCompilationEnvironment(Parameters.Platform, OutEnvironment);\n\t}\nprivate:\n};\n\n// This will tell the engine to create the shader and where the shader entry point is.\n//                            ShaderType                            ShaderPath                     Shader function name    Type\n${instance.material ?\n`IMPLEMENT_MATERIAL_SHADER_TYPE(, F${NAME}, TEXT(\"/${MODULE_NAME}Shaders/${NAME}/${NAME}.usf\"), TEXT(\"${NAME}\"), SF_Compute);`\n:\n`IMPLEMENT_GLOBAL_SHADER(F${NAME}, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}.usf\", \"${NAME}\", SF_Compute);`\n}\n\nvoid F${NAME}Interface::DispatchRenderThread(FRHICommandListImmediate& RHICmdList, F${NAME}DispatchParams Params${ifExample(['base', 'pi', 'basemat'], `, TFunction<void(${ifExample(['base', 'pi'], \"int OutputVal\")}${ifExample(['basemat'], \"FVector3f OutputColor\")})> AsyncCallback`)}) {\n\tFRDGBuilder GraphBuilder(RHICmdList);\n\n\t{\n\t\tSCOPE_CYCLE_COUNTER(STAT_${NAME}_Execute);\n\t\tDECLARE_GPU_STAT(${NAME})\n\t\tRDG_EVENT_SCOPE(GraphBuilder, \"${NAME}\");\n\t\tRDG_GPU_STAT_SCOPE(GraphBuilder, ${NAME});\n\t\t${instance.material ? `\n\t\tconst FSceneInterface* LocalScene = Params.Scene;\n\t\tconst FMaterialRenderProxy* MaterialRenderProxy = nullptr;\n\t\tconst FMaterial* MaterialResource = &Params.MaterialRenderProxy->GetMaterialWithFallback(GMaxRHIFeatureLevel, MaterialRenderProxy);\n\t\tMaterialRenderProxy = MaterialRenderProxy ? MaterialRenderProxy : Params.MaterialRenderProxy;\n\n\t\ttypename F${NAME}::FPermutationDomain PermutationVector;\n\n\t\t// Add any static permutation options here\n\t\t// PermutationVector.Set<F${NAME}::FMyPermutationName>(12345);\n\t\t\n\t\tTShaderRef<F${NAME}> ComputeShader = MaterialResource->GetShader<F${NAME}>(&FLocalVertexFactory::StaticType, PermutationVector, false);\n\t\t` : `\n\t\ttypename F${NAME}::FPermutationDomain PermutationVector;\n\t\t\n\t\t// Add any static permutation options here\n\t\t// PermutationVector.Set<F${NAME}::FMyPermutationName>(12345);\n\n\t\tTShaderMapRef<F${NAME}> ComputeShader(GetGlobalShaderMap(GMaxRHIFeatureLevel), PermutationVector);\n\t\t`}\n\n\t\tbool bIsShaderValid = ComputeShader${instance.material ? `.` : `.`}IsValid();\n\n\t\tif (bIsShaderValid) {\n\t\t\tF${NAME}::FParameters* PassParameters = GraphBuilder.AllocParameters<F${NAME}::FParameters>();\n\n\t\t\t${ifExample(['rt', 'mat'], `\n\t\t\tFRDGTextureDesc Desc(FRDGTextureDesc::Create2D(Params.RenderTarget->GetSizeXY(), PF_B8G8R8A8, FClearValueBinding::White, TexCreate_RenderTargetable | TexCreate_ShaderResource | TexCreate_UAV));\n\t\t\tFRDGTextureRef TmpTexture = GraphBuilder.CreateTexture(Desc, TEXT(\"${NAME}_TempTexture\"));\n\t\t\tFRDGTextureRef TargetTexture = RegisterExternalTexture(GraphBuilder, Params.RenderTarget->GetRenderTargetTexture(), TEXT(\"${NAME}_RT\"));\n\t\t\tPassParameters->RenderTarget = GraphBuilder.CreateUAV(TmpTexture);\n\t\t\t`)}${instance.example == \"base\" ? `\n\t\t\tconst void* RawData = (void*)Params.Input;\n\t\t\tint NumInputs = 2;\n\t\t\tint InputSize = sizeof(int);\n\t\t\tFRDGBufferRef InputBuffer = CreateUploadBuffer(GraphBuilder, TEXT(\"InputBuffer\"), InputSize, NumInputs, RawData, InputSize * NumInputs);\n\n\t\t\tPassParameters->Input = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(InputBuffer, PF_R32_SINT));\n\n\t\t\tFRDGBufferRef OutputBuffer = GraphBuilder.CreateBuffer(\n\t\t\t\tFRDGBufferDesc::CreateBufferDesc(sizeof(int32), 1),\n\t\t\t\tTEXT(\"OutputBuffer\"));\n\n\t\t\tPassParameters->Output = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutputBuffer, PF_R32_SINT));\n\t\t\t` : \"\"}${instance.example == \"pi\" ? `\n\t\t\tFRDGBufferRef OutputBuffer = GraphBuilder.CreateBuffer(\n\t\t\t\tFRDGBufferDesc::CreateBufferDesc(sizeof(int32), 1),\n\t\t\t\tTEXT(\"OutputBuffer\"));\n\n\t\t\tPassParameters->Output = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutputBuffer, PF_R32_SINT));\n\t\t\t` : \"\"}${instance.example == \"basemat\" ? `\n\t\t\tFRDGBufferRef OutputBuffer = GraphBuilder.CreateBuffer(\n\t\t\t\tFRDGBufferDesc::CreateBufferDesc(sizeof(FVector4f), 1),\n\t\t\t\tTEXT(\"OutputBuffer\"));\n\n\t\t\tPassParameters->OutputColor = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutputBuffer, PF_A32B32G32R32F));\n\t\t\tFViewUniformShaderParameters ViewUniformShaderParameters;\n\n\t\t\tViewUniformShaderParameters.GameTime = Params.GameTime;\n\t\t\tViewUniformShaderParameters.RealTime = Params.GameTime;\n\t\t\tViewUniformShaderParameters.Random = Params.Random;\n\t\t\t\n\t\t\tauto ViewUniformBuffer = TUniformBufferRef<FViewUniformShaderParameters>::CreateUniformBufferImmediate(ViewUniformShaderParameters, UniformBuffer_SingleFrame);\n\t\t\tPassParameters->View = ViewUniformBuffer;\n\t\t\t` : \"\"}\n\n\t\t\tauto GroupCount = FComputeShaderUtils::GetGroupCount(FIntVector(Params.X, Params.Y, Params.Z), FComputeShaderUtils::kGolden2DGroupSize);\n\t\t\tGraphBuilder.AddPass(\n\t\t\t\tRDG_EVENT_NAME(\"Execute${NAME}\"),\n\t\t\t\tPassParameters,\n\t\t\t\tERDGPassFlags::AsyncCompute,\n\t\t\t\t[&PassParameters, ComputeShader, ${instance.material ? `MaterialRenderProxy, MaterialResource, LocalScene, ` : ``}GroupCount](FRHIComputeCommandList& RHICmdList)\n\t\t\t{\n\t\t\t\t${instance.material ? `\n\t\t\t\tFMeshPassProcessorRenderState DrawRenderState;\n\t\t\t\t\n\t\t\t\tMaterialRenderProxy->UpdateUniformExpressionCacheIfNeeded(LocalScene->GetFeatureLevel());\n\n\t\t\t\tFMeshMaterialShaderElementData ShaderElementData;\n\n\t\t\t\tFMeshProcessorShaders PassShaders;\n\t\t\t\tPassShaders.ComputeShader = ComputeShader;\n\n\t\t\t\tFMeshDrawShaderBindings ShaderBindings;\n\t\t\t\tShaderBindings.Initialize(PassShaders);\n\n\t\t\t\tint32 DataOffset = 0;\n\t\t\t\tFMeshDrawSingleShaderBindings SingleShaderBindings = ShaderBindings.GetSingleShaderBindings(SF_Compute, DataOffset);\n\t\t\t\tComputeShader->GetShaderBindings(LocalScene->GetRenderScene(), LocalScene->GetFeatureLevel(), nullptr, *MaterialRenderProxy, *MaterialResource, DrawRenderState, ShaderElementData, SingleShaderBindings);\n\n\t\t\t\tShaderBindings.Finalize(&PassShaders);\n\n\t\t\t\tUE::MeshPassUtils::Dispatch(RHICmdList, ComputeShader, ShaderBindings, *PassParameters, GroupCount);\n\t\t\t\t` : `FComputeShaderUtils::Dispatch(RHICmdList, ComputeShader, *PassParameters, GroupCount);`}\n\t\t\t});\n\n\t\t\t${ifExample(['base', 'pi', 'basemat'], `\n\t\t\tFRHIGPUBufferReadback* GPUBufferReadback = new FRHIGPUBufferReadback(TEXT(\"Execute${NAME}Output\"));\n\t\t\tAddEnqueueCopyPass(GraphBuilder, GPUBufferReadback, OutputBuffer, 0u);\n\n\t\t\tauto RunnerFunc = [GPUBufferReadback, AsyncCallback](auto&& RunnerFunc) -> void {\n\t\t\t\tif (GPUBufferReadback->IsReady()) {\n\t\t\t\t\t${ifExample(['base', 'pi'], `\n\t\t\t\t\tint32* Buffer = (int32*)GPUBufferReadback->Lock(1);\n\t\t\t\t\tint OutVal = Buffer[0];\n\t\t\t\t\t`)}${ifExample(['basemat'], `\n\t\t\t\t\tFVector4f* Buffer = (FVector4f*)GPUBufferReadback->Lock(1);\n\t\t\t\t\tFVector3f OutVal = FVector3f(Buffer[0].X, Buffer[0].Y, Buffer[0].Z);\n\t\t\t\t\t`)}\n\t\t\t\t\tGPUBufferReadback->Unlock();\n\n\t\t\t\t\tAsyncTask(ENamedThreads::GameThread, [AsyncCallback, OutVal]() {\n\t\t\t\t\t\tAsyncCallback(OutVal);\n\t\t\t\t\t});\n\n\t\t\t\t\tdelete GPUBufferReadback;\n\t\t\t\t} else {\n\t\t\t\t\tAsyncTask(ENamedThreads::ActualRenderingThread, [RunnerFunc]() {\n\t\t\t\t\t\tRunnerFunc(RunnerFunc);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tAsyncTask(ENamedThreads::ActualRenderingThread, [RunnerFunc]() {\n\t\t\t\tRunnerFunc(RunnerFunc);\n\t\t\t});\n\t\t\t`)}${ifExample(['rt', 'mat'], `\n\t\t\t// The copy will fail if we don't have matching formats, let's check and make sure we do.\n\t\t\tif (TargetTexture->Desc.Format == PF_B8G8R8A8) {\n\t\t\t\tAddCopyTexturePass(GraphBuilder, TmpTexture, TargetTexture, FRHICopyTextureInfo());\n\t\t\t} else {\n\t\t\t\t#if WITH_EDITOR\n\t\t\t\t\tGEngine->AddOnScreenDebugMessage((uint64)42145125184, 6.f, FColor::Red, FString(TEXT(\"The provided render target has an incompatible format (Please change the RT format to: RGBA8).\")));\n\t\t\t\t#endif\n\t\t\t}\n\t\t\t`)}\n\t\t} else {\n\t\t\t#if WITH_EDITOR\n\t\t\t\tGEngine->AddOnScreenDebugMessage((uint64)42145125184, 6.f, FColor::Red, FString(TEXT(\"The compute shader has a problem.\")));\n\t\t\t#endif\n\n\t\t\t// We exit here as we don't want to crash the game if the shader is not found or has an error.\n\t\t\t${ifExample('basemat', `AsyncCallback(FVector3f(0.f));`)}\n\t\t}\n\t}\n\n\tGraphBuilder.Execute();\n}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Private/[NAME]/[NAME].h",
    "content": "#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"${MODULE_NAME}/Public/${MODULE_NAME}.h\"\n#include \"MeshPassProcessor.h\"\n#include \"RHICommandList.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderTargetPool.h\"\n#include \"MeshMaterialShader.h\"\n#include \"ShaderParameterUtils.h\"\n#include \"RHIStaticStates.h\"\n#include \"Shader.h\"\n#include \"RHI.h\"\n#include \"GlobalShader.h\"\n#include \"RenderGraphUtils.h\"\n#include \"ShaderParameterStruct.h\"\n#include \"UniformBuffer.h\"\n#include \"RHICommandList.h\"\n#include \"ShaderCompilerCore.h\"\n#include \"EngineDefines.h\"\n#include \"RendererInterface.h\"\n#include \"RenderResource.h\"\n#include \"RenderGraphResources.h\"\n\n#include \"RenderGraphResources.h\"\n#include \"Runtime/Engine/Classes/Engine/TextureRenderTarget2D.h\"\n\n#define NUM_THREADS_${NAME}_X ${instance.threadCounts[0]}\n#define NUM_THREADS_${NAME}_Y ${instance.threadCounts[1]}\n#define NUM_THREADS_${NAME}_Z ${instance.threadCounts[2]}"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Public/[NAME]/$base[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## Blueprint\n\n1. Right-click in any blueprint editor and add the node: \"ExecuteBaseComputeShader\"\n2. This should give you a node with 2 inputs and 1 output. The output = A \\* B\n3. Enjoy, and get digging into the code\n\n## C++\n\n\\`\\`\\`cpp\n// Params struct used to pass args to our compute shader\nF${NAME}DispatchParams Params(1, 1, 1);\n\n// Fill in your input parameters here\nParams.XYZ = 123;\n\n// These are defined/used in:\n// 1. Private/${NAME}/${NAME}.cpp under BEGIN_SHADER_PARAMETER_STRUCT\n// 2. Public/${NAME}/${NAME}.h under F${NAME}DispatchParams\n// 3. Private/${NAME}/${NAME}.cpp under F${NAME}Interface::DispatchRenderThread\n\n// Executes the compute shader and blocks until complete. You can place outputs in the params struct\nF${NAME}Interface::Dispatch(Params);\n\\`\\`\\`\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Public/[NAME]/$basemat[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## Blueprint\n\n1. Create new/open a material and check off the Use with Virtual Heightfield Mesh _(this is to prevent the compute shader from being compiled against every material in the engine)_\n2. Right-click in any blueprint editor and add the node: \"Execute Base Material Compute Shader\"\n3. Pass in a context actor (run \"Get Actor By Class\" and set the class to \"Actor\")\n4. Enjoy, and get digging into the code\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Public/[NAME]/$mat[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## Blueprint\n\n1. Create new/open a material and check off the Use with Virtual Heightfield Mesh _(this is to prevent the compute shader from being compiled against every material in the engine)_\n2. Create a new render target with the size set to a multiple of 32\n3. Right-click in any blueprint editor and add the node: \"Execute Material RTCompute Shader\"\n4. Pass in a context actor (run \"Get Actor By Class\" and set the class to \"Actor\"), material, and render target\n5. Enjoy, and get digging into the code\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Public/[NAME]/$pi[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## Blueprint\n\n1. Right-click in any blueprint editor and add the node: \"CalculatePIComputeShader\"\n2. Pass in a moderately high non-even number under 256k for the number of samples\n3. Enjoy, and get digging into the code\n\n## C++\n\n\\`\\`\\`cpp\n// Params struct used to pass args to our compute shader\nF${NAME}DispatchParams Params(1, 1, 1);\n\n// Fill in your input parameters here\nParams.XYZ = 123;\n\n// These are defined/used in:\n// 1. Private/${NAME}/${NAME}.cpp under BEGIN_SHADER_PARAMETER_STRUCT\n// 2. Public/${NAME}/${NAME}.h under F${NAME}DispatchParams\n// 3. Private/${NAME}/${NAME}.cpp under F${NAME}Interface::DispatchRenderThread\n\n// Executes the compute shader and blocks until complete. You can place outputs in the params struct\nF${NAME}Interface::Dispatch(Params);\n\\`\\`\\`\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Public/[NAME]/$rt[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## Blueprint\n\n1. Right-click in any blueprint editor and add the node: \"Execute RTCompute Shader\"\n2. Pass in a render target\n3. Enjoy, and get digging into the code\n\nFind the main shader code under \\`Plugin/Shaders/Module/Private/${NAME}/${NAME}.usf\\`\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/compute/simple-compute-shader/Plugin/Source/[MODULE]/Public/[NAME]/[NAME].h",
    "content": "#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"GenericPlatform/GenericPlatformMisc.h\"\n#include \"Kismet/BlueprintAsyncActionBase.h\"\n#include \"Engine/TextureRenderTarget2D.h\"\n#include \"Materials/MaterialRenderProxy.h\"\n${instance.material ? `#include \"SceneInterface.h\"\\n` : ``}\n#include \"${NAME}.generated.h\"\n\nstruct ${SCOPE} F${NAME}DispatchParams\n{\n\tint X;\n\tint Y;\n\tint Z;\n\n\t${instance.example == \"pi\" ? `\n\tfloat Seed;\n\t` : \"\"}${instance.example == \"base\" ? `\n\tint Input[2];\n\tint Output;\n\t` : \"\"}${instance.example == \"rt\" ? `\n\tFRenderTarget* RenderTarget;\n\t` : \"\"}${instance.example == \"mat\" ? `\n\tFRenderTarget* RenderTarget;\n\t` : \"\"}${instance.example == \"basemat\" ? `\n\tFVector2f Position;\n\t` : \"\"}\n\t${instance.material ? `// Set to the desired material uses when executing our compute shader\\n\\tFMaterialRenderProxy* MaterialRenderProxy;\\n\\t// Scene reference used to create a uniform buffer for rendering the material graph\\n\\tFSceneInterface* Scene;\\n\\tfloat GameTime;\\n\\tuint32 Random;` : ``}\n\n\tF${NAME}DispatchParams(int x, int y, int z)\n\t\t: X(x)\n\t\t, Y(y)\n\t\t, Z(z)\n\t{\n\t}\n};\n\n// This is a public interface that we define so outside code can invoke our compute shader.\nclass ${SCOPE} F${NAME}Interface {\npublic:\n\t// Executes this shader on the render thread\n\tstatic void DispatchRenderThread(\n\t\tFRHICommandListImmediate& RHICmdList,\n\t\tF${NAME}DispatchParams Params${ifExample('base', `,\\n\\t\\tTFunction<void(int OutputVal)> AsyncCallback`)}${ifExample('basemat', `,\\n\\t\\tTFunction<void(FVector3f OutputColor)> AsyncCallback`)}${ifExample('pi', `,\\n\\t\\tTFunction<void(int TotalInCircle)> AsyncCallback`)}\n\t);\n\n\t// Executes this shader on the render thread from the game thread via EnqueueRenderThreadCommand\n\tstatic void DispatchGameThread(\n\t\tF${NAME}DispatchParams Params${ifExample(['pi', 'base'], `,\\n\\t\\tTFunction<void(int OutputVal)> AsyncCallback`)}${ifExample('basemat', `,\\n\\t\\tTFunction<void(FVector3f OutputVal)> AsyncCallback`)}\n\t)\n\t{\n\t\tENQUEUE_RENDER_COMMAND(SceneDrawCompletion)(\n\t\t[Params${ifExample(['pi', 'base', 'basemat'], `, AsyncCallback`)}](FRHICommandListImmediate& RHICmdList)\n\t\t{\n\t\t\tDispatchRenderThread(RHICmdList, Params${ifExample(['pi', 'base', 'basemat'], `, AsyncCallback`)});\n\t\t});\n\t}\n\n\t// Dispatches this shader. Can be called from any thread\n\tstatic void Dispatch(\n\t\tF${NAME}DispatchParams Params${ifExample('base', `,\\n\\t\\tTFunction<void(int OutputVal)> AsyncCallback`)}${ifExample('basemat', `,\\n\\t\\tTFunction<void(FVector3f OutputColor)> AsyncCallback`)}${ifExample('pi', `,\\n\\t\\tTFunction<void(int TotalInCircle)> AsyncCallback`)}\n\t)\n\t{\n\t\tif (IsInRenderingThread()) {\n\t\t\tDispatchRenderThread(GetImmediateCommandList_ForRenderCommand(), Params${ifExample(['pi', 'base', 'basemat'], `, AsyncCallback`)});\n\t\t}else{\n\t\t\tDispatchGameThread(Params${ifExample(['pi', 'base', 'basemat'], `, AsyncCallback`)});\n\t\t}\n\t}\n};\n${instance.example == 'rt' ? `\n// This is a static blueprint library that can be used to invoke our compute shader from blueprints.\nUCLASS()\nclass ${SCOPE} U${NAME}Library : public UObject\n{\n\tGENERATED_BODY()\n\t\npublic:\n\tUFUNCTION(BlueprintCallable)\n\tstatic void ExecuteRTComputeShader(UTextureRenderTarget2D* RT)\n\t{\n\t\t// Create a dispatch parameters struct and fill it the input array with our args\n\t\tF${NAME}DispatchParams Params(RT->SizeX, RT->SizeY, 1);\n\t\tParams.RenderTarget = RT->GameThread_GetRenderTargetResource();\n\n\t\tF${NAME}Interface::Dispatch(Params);\n\t}\n};` : ``}${instance.example == 'mat' ? `\n// This is a static blueprint library that can be used to invoke our compute shader from blueprints.\nUCLASS()\nclass ${SCOPE} U${NAME}Library : public UObject\n{\n\tGENERATED_BODY()\n\t\npublic:\n\tUFUNCTION(BlueprintCallable)\n\tstatic void ExecuteMaterialRTComputeShader(AActor* SceneContext, UMaterialInterface* Material, UTextureRenderTarget2D* RT)\n\t{\n\t\t// Create a dispatch parameters struct and fill it the input array with our args\n\t\tF${NAME}DispatchParams Params(RT->SizeX, RT->SizeY, 1);\n\t\tParams.RenderTarget = RT->GameThread_GetRenderTargetResource();\n\t\tParams.MaterialRenderProxy = Material->GetRenderProxy();\n\t\tParams.Scene = SceneContext->GetRootComponent()->GetScene();\n\t\tParams.Random = FMath::Rand();\n\t\tParams.GameTime = SceneContext->GetWorld()->GetTimeSeconds();\n\n\t\tF${NAME}Interface::Dispatch(Params);\n\t}\n};` : ``}\n${instance.example == 'base' || instance.example == 'pi' || instance.example == 'basemat' ? `\n${instance.example == 'base' ? `\nDECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOn${NAME}Library_AsyncExecutionCompleted, const int, Value);\n` : ``}${instance.example == 'pi' ? `\nDECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOn${NAME}Library_AsyncExecutionCompleted, const double, Value);\n` : ``}${instance.example == 'basemat' ? `\nDECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOn${NAME}Library_AsyncExecutionCompleted, const FVector3f, Value);\n` : ``}\n\nUCLASS() // Change the _API to match your project\nclass ${SCOPE} U${NAME}Library_AsyncExecution : public UBlueprintAsyncActionBase\n{\n\tGENERATED_BODY()\n\npublic:\n\t${instance.example == \"base\" ? `\n\t// Execute the actual load\n\tvirtual void Activate() override {\n\t\t// Create a dispatch parameters struct and fill it the input array with our args\n\t\tF${NAME}DispatchParams Params(1, 1, 1);\n\t\tParams.Input[0] = Arg1;\n\t\tParams.Input[1] = Arg2;\n\n\t\t// Dispatch the compute shader and wait until it completes\n\t\tF${NAME}Interface::Dispatch(Params, [this](int OutputVal) {\n\t\t\tthis->Completed.Broadcast(OutputVal);\n\t\t});\n\t}\n\t` : \"\"}${instance.example == \"basemat\" ? `\n\t// Execute the actual load\n\tvirtual void Activate() override {\n\t\t// Create a dispatch parameters struct and set the position passed into our material call\n\t\tF${NAME}DispatchParams Params(1, 1, 1);\n\t\tParams.Position = Position;\n\t\tParams.MaterialRenderProxy = MaterialRenderProxy;\n\t\tParams.Scene = Scene;\n\t\tParams.Random = Random;\n\t\tParams.GameTime = GameTime;\n\n\t\t// Dispatch the compute shader and wait until it completes\n\t\tF${NAME}Interface::Dispatch(Params, [this](FVector3f OutputColor) {\n\t\t\tthis->Completed.Broadcast(OutputColor);\n\t\t});\n\t}`: ``}${instance.example == \"pi\" ? `\n\t// Execute the actual load\n\tvirtual void Activate() override {\n\t\t// Create a dispatch parameters struct and set our desired seed\n\t\tF${NAME}DispatchParams Params(TotalSamples, 1, 1);\n\t\tParams.Seed = Seed;\n\n\t\t// Dispatch the compute shader and wait until it completes\n\t\tF${NAME}Interface::Dispatch(Params, [this](int TotalInCircle) {\n\t\t\t// TotalInCircle is set to the result of the compute shader\n\t\t\t// Divide by the total number of samples to get the ratio of samples in the circle\n\t\t\t// We're multiplying by 4 because the simulation is done in quarter-circles\n\t\t\tdouble FinalPI = ((double) TotalInCircle / (double) TotalSamples);\n\n\t\t\tCompleted.Broadcast(FinalPI);\n\t\t});\n\t}`: ``}\n\t${instance.example == \"pi\" ? `\n\tUFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = \"true\", Category = \"ComputeShader\", WorldContext = \"WorldContextObject\"))\n\tstatic U${NAME}Library_AsyncExecution* ExecutePIComputeShader(UObject* WorldContextObject, int TotalSamples, float Seed) {\n\t\tU${NAME}Library_AsyncExecution* Action = NewObject<U${NAME}Library_AsyncExecution>();\n\t\tAction->TotalSamples = TotalSamples;\n\t\tAction->Seed = Seed;\n\t\tAction->RegisterWithGameInstance(WorldContextObject);\n\n\t\treturn Action;\n\t}` : ``}\n\t${instance.example == \"base\" ? `\n\tUFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = \"true\", Category = \"ComputeShader\", WorldContext = \"WorldContextObject\"))\n\tstatic U${NAME}Library_AsyncExecution* ExecuteBaseComputeShader(UObject* WorldContextObject, int Arg1, int Arg2) {\n\t\tU${NAME}Library_AsyncExecution* Action = NewObject<U${NAME}Library_AsyncExecution>();\n\t\tAction->Arg1 = Arg1;\n\t\tAction->Arg2 = Arg2;\n\t\tAction->RegisterWithGameInstance(WorldContextObject);\n\n\t\treturn Action;\n\t}` : ``}${instance.example == \"basemat\" ? `\n\tUFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = \"true\", Category = \"ComputeShader\", WorldContext = \"WorldContextObject\"))\n\tstatic U${NAME}Library_AsyncExecution* ExecuteBaseMaterialComputeShader(UObject* WorldContextObject, AActor* SceneContext, UMaterialInterface* Material, FVector2D Position) {\n\t\tcheck(IsValid(SceneContext));\n\t\tU${NAME}Library_AsyncExecution* Action = NewObject<U${NAME}Library_AsyncExecution>();\n\t\tAction->Position = static_cast<FVector2f>(Position);\n\t\tAction->MaterialRenderProxy = Material->GetRenderProxy();\n\t\tAction->Scene = SceneContext->GetRootComponent()->GetScene();\n\t\tAction->Random = FMath::Rand();\n\t\tAction->GameTime = SceneContext->GetWorld()->GetTimeSeconds();\n\t\tAction->RegisterWithGameInstance(WorldContextObject);\n\n\t\treturn Action;\n\t}` : ``}\n\n\tUPROPERTY(BlueprintAssignable)\n\tFOn${NAME}Library_AsyncExecutionCompleted Completed;\n\n\t${instance.example == \"pi\" ? `\n\tfloat Seed;\n\tint TotalSamples;\n\t` : ``}${instance.example == \"base\" ? `\n\tint Arg1;\n\tint Arg2;\n\t` : ``}${instance.example == \"basemat\" ? `\n\tFVector2f Position;\n\tFMaterialRenderProxy* MaterialRenderProxy;\n\tfloat GameTime;\n\tuint32 Random;\n\tFSceneInterface* Scene;\n\t` : ``}\n};` : ``}"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Shaders/[MODULE]/Private/[NAME]/[NAME].ush",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n/** Structure used for tracking work queues in persistent wave style shaders. */\nstruct WorkerQueueInfo\n{\n\tuint Read;\n\tuint Write;\n\tint\tNumActive;\n};\n\n/** Item description used when traversing the virtual page table quad tree. Packs as uint so store in Buffer declared as uint. */\nstruct QuadItem\n{\n\tuint Address;\n\tuint Level;\n};\n\nuint Pack(QuadItem Item)\n{\n\tuint PackedItem = 0;\n\tPackedItem |= Item.Address;\n\tPackedItem |= Item.Level << 24;\n\treturn PackedItem;\n}\n\nQuadItem InitQuadItem(uint Address, uint Level)\n{\n\tQuadItem Item;\n\tItem.Address = Address;\n\tItem.Level = Level;\n\treturn Item;\n}\n\nQuadItem UnpackQuadItem(uint PackedItem)\n{\n\tQuadItem Item;\n\tItem.Address = PackedItem & 0x00FFFFFF;\n\tItem.Level = PackedItem >> 24;\n\treturn Item;\n}\n\n/** Description for items that are output by the quad tree collect stage. Packs as uint2 so store in Buffer declared as uint2. */\nstruct QuadRenderItem\n{\n\tuint2 Pos;\n\tuint Level;\n\tuint PhysicalAddress;\n\tbool bCull;\n};\n\nuint2 Pack(QuadRenderItem Item)\n{\n\tuint2 PackedItem = 0;\n\tPackedItem.x |= Item.Pos.x;\n\tPackedItem.x |= Item.Pos.y << 12;\n\tPackedItem.x |= Item.Level << 24;\n\tPackedItem.y |= Item.PhysicalAddress & 0x000FFFFF;\n\tPackedItem.y |= Item.bCull ? 1 << 20 : 0;\n\treturn PackedItem;\n}\n\nQuadRenderItem InitQuadRenderItem(uint2 Pos, uint Level, uint PhysicalAddress, bool bCull)\n{\n\tQuadRenderItem Item;\n\tItem.Pos = Pos;\n\tItem.Level = Level;\n\tItem.PhysicalAddress = PhysicalAddress;\n\tItem.bCull = bCull;\n\treturn Item;\n}\n\nQuadRenderItem UnpackQuadRenderItem(uint2 PackedItem)\n{\n\tQuadRenderItem Item;\n\tItem.Pos.x = PackedItem.x & 0x00000FFF;\n\tItem.Pos.y = (PackedItem.x & 0x00FFF000) >> 12;\n\tItem.Level = PackedItem.x >> 24;\n\tItem.PhysicalAddress = PackedItem.y & 0x000FFFFF;\n\tItem.bCull = ((PackedItem.y & 0x00100000) >> 20) == 1;\n\treturn Item;\n}\n\n/** Final render instance description used by the DrawInstancedIndirect(). */\nstruct QuadRenderInstance\n{\n\tfloat3 UVTransform;\n\tuint PosLevelPacked;\n};\n\nuint2 UnpackPos(QuadRenderInstance Item)\n{\n\treturn uint2(Item.PosLevelPacked & 0x00000FFF, (Item.PosLevelPacked & 0x00FFF000) >> 12);\n}\n\nuint UnpackLevel(QuadRenderInstance Item)\n{\n\treturn Item.PosLevelPacked >> 24;\n}\n\n\n/** Shared helper function to calculate a LOD based on distance from camera. */\nfloat CalculateDistanceLod(float InDistanceSq, float4 InLodFactors)\n{\n\tfloat ScaledDistance = sqrt(InDistanceSq) * InLodFactors.w;\n\tfloat LodForDistance0 = saturate(ScaledDistance / (InLodFactors.x * InLodFactors.y));\n\tfloat LodForDistanceN = log2(1 + max((ScaledDistance / InLodFactors.x - InLodFactors.y), 0)) / log2(InLodFactors.z);\n\treturn LodForDistance0 + LodForDistanceN;\n}\n\n/** Shared helper function to calculate a LOD bias based on our LodBias texture value. */\nfloat CalculateBiasLod(float InValue, float InLodBiasScale)\n{\n\treturn max((InValue - 0.05f) * InLodBiasScale - 1.f, 0);\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Shaders/[MODULE]/Private/[NAME]/[NAME]Compute.usf",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"/Engine/Private/Common.ush\"\n#include \"/Engine/Private/MortonCode.ush\"\n//#include \"/Engine/Private/ShaderPrintCommon.ush\"\n//#include \"/Engine/Private/ShaderDrawDebug.ush\"\n#include \"${NAME}.ush\"\n\ngroupshared uint NumGroupTasks;\ngloballycoherent RWStructuredBuffer<WorkerQueueInfo> RWQueueInfo;\ngloballycoherent RWBuffer<uint> RWQueueBuffer;\nuint QueueBufferSizeMask;\n\nRWBuffer<uint2> RWQuadBuffer;\nBuffer<uint2> QuadBuffer;\n\nRWBuffer<uint> RWIndirectArgsBuffer;\nBuffer<uint> IndirectArgsBufferSRV;\n\nRWStructuredBuffer<QuadRenderInstance> RWInstanceBuffer;\nStructuredBuffer<QuadRenderInstance> InstanceBuffer;\n\nRWBuffer<uint> RWFeedbackBuffer;\n\nTexture2D<uint> PageTableTexture;\n\nTexture2D<float4> HeightMinMaxTexture;\nTexture2D<float4> LodBiasMinMaxTexture;\nSamplerState MinMaxTextureSampler;\nint MinMaxLevelOffset;\n\nTexture2D<float> OcclusionTexture;\nint OcclusionLevelOffset;\n\nuint MaxLevel;\n#define MaxLevelLocal 6\nuint NumForceLoadLods;\nuint PageTableFeedbackId;\nuint NumPhysicalAddressBits;\nfloat4 PageTableSize;\nfloat4 PhysicalPageTransform;\n\nfloat4 LodDistances;\nfloat LodBiasScale;\nfloat3 ViewOrigin;\nfloat4 FrustumPlanes[5];\nfloat4x4 UVToWorld;\nfloat3 UVToWorldScale;\n\nint NumIndices;\n\n/** Return false if the AABB is completely outside one of the planes. */\nbool PlaneTestAABB(float4 InPlanes[5], float3 InCenter, float3 InExtent)\n{\n\tbool bPlaneTest = true;\n\t\n\t[unroll]\n\tfor (uint PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t{\n\t\tfloat3 PlaneSigns;\n\t\tPlaneSigns.x = InPlanes[PlaneIndex].x >= 0.f ? 1.f : -1.f;\n\t\tPlaneSigns.y = InPlanes[PlaneIndex].y >= 0.f ? 1.f : -1.f;\n\t\tPlaneSigns.z = InPlanes[PlaneIndex].z >= 0.f ? 1.f : -1.f;\n\n\t\tbool bInsidePlane = dot(InPlanes[PlaneIndex], float4(InCenter + InExtent * PlaneSigns, 1.0f)) > 0.f;\n\t\tbPlaneTest = bPlaneTest && bInsidePlane;\n\t}\n\n\treturn bPlaneTest;\n}\n\n/**\n * Compute shader to initialize all buffers, including adding the lowest mip page(s) to the QuadBuffer.\n */\n\n[numthreads(1, 1, 1)]\nvoid InitBuffersCS()\n{\n\t// Seed with one item in the queue.\n\tRWQueueInfo[0].Read = 0;\n\tRWQueueInfo[0].Write = 1;\n\tRWQueueInfo[0].NumActive = 1;\n\n\tRWQueueBuffer[0] = Pack(InitQuadItem(0, 12));\n\n\t// CullInstances indirect args\n\tRWIndirectArgsBuffer[0] = 0; // Increment this wave counter during CollectQuadsCS.\n\tRWIndirectArgsBuffer[1] = 1;\n\tRWIndirectArgsBuffer[2] = 1;\n\tRWIndirectArgsBuffer[3] = 0; // Increment this instance counter counter during CollectQuadsCS.\n}\n\n/**\n * Compute shader to traverse the virtual texture page table and generate an array of items to potentially render for a view.\n */\n\n[numthreads(64, 1, 1)]\nvoid CollectQuadsCS(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\t// Persistant threads stay alive until the work queue is drained.\n\tbool bExit = false;\n\twhile (!bExit)\n\t{\n\t\t// Sync and init group task count.\n\t\tNumGroupTasks = 0;\n\t\tGroupMemoryBarrierWithGroupSync();\n\t\t\n\t\t// Try and pull a task.\n\t\tint NumActive;\n\t\tInterlockedAdd(RWQueueInfo[0].NumActive, -1, NumActive);\n\t\t\n\t\tif (NumActive <= 0)\n\t\t{\n\t\t\t// No task pulled. Rewind.\n\t\t\tInterlockedAdd(RWQueueInfo[0].NumActive, 1, NumActive);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Increment group task count for this loop.\n\t\t\tuint Dummy;\n\t\t\tInterlockedAdd(NumGroupTasks, 1, Dummy);\n\n\t\t\t// Read item to process from queue.\n\t\t\tuint Read;\n\t\t\tInterlockedAdd(RWQueueInfo[0].Read, 1, Read);\n\t\t\t\n\t\t\tuint PackedItem = RWQueueBuffer[Read & QueueBufferSizeMask];\n\t\t\tQuadItem Item = UnpackQuadItem(PackedItem);\n\t\t\tuint Address = Item.Address;\n\t\t\tuint2 Pos = MortonDecode(Address);\n\t\t\tuint Level = Item.Level;\n\t\t\t\n\t\t\t// Check if frustum culled\n\t\t\tbool bCull = false; //!PlaneTestAABB(FrustumPlanes, float2(0.5, 0.5), float2(1, 1));\n\n\t\t\tbool bSubdivide = false;\n\t\t\tif (bCull)\n\t\t\t{\n\t\t\t\t// Store, but don't subdivide.\n\t\t\t\t// DebugDrawUVBox(UVMin, UVMax, UVToWorld, float4(0, 0, 1, 1));\n\t\t\t}\n\t\t\telse if (Level > 0)\n\t\t\t{\n\t\t\t\t// Subdivide if minimum continuous lod can be less than the current level.\n\t\t\t\t// bSubdivide = true;\n\t\t\t}\n\n\t\t\tif (bSubdivide)\n\t\t\t{\n\t\t\t\t// Add children to queue.\n\t\t\t\tuint Write;\n\t\t\t\tInterlockedAdd(RWQueueInfo[0].Write, 4, Write);\n\n\t\t\t\tRWQueueBuffer[(Write + 0) & QueueBufferSizeMask] = Pack(InitQuadItem(Address * 4 + 0, Level - 1));\n\t\t\t\tRWQueueBuffer[(Write + 1) & QueueBufferSizeMask] = Pack(InitQuadItem(Address * 4 + 1, Level - 1));\n\t\t\t\tRWQueueBuffer[(Write + 2) & QueueBufferSizeMask] = Pack(InitQuadItem(Address * 4 + 2, Level - 1));\n\t\t\t\tRWQueueBuffer[(Write + 3) & QueueBufferSizeMask] = Pack(InitQuadItem(Address * 4 + 3, Level - 1));\n\n\t\t\t\tInterlockedAdd(RWQueueInfo[0].NumActive, 4, NumActive);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tuint Write;\n\t\t\t\tInterlockedAdd(RWIndirectArgsBuffer[3], 1, Write);\n\t\t\t\tInterlockedMax(RWIndirectArgsBuffer[0], ((Write + 1) + 63) / 64);\n\n\t\t\t\tRWQuadBuffer[Write] = Pack(InitQuadRenderItem(Pos, Level, 0, bCull));\n\t\t\t}\n\t\t}\n\n\t\t// Exit if no work was found.\n\t\tDeviceMemoryBarrier();\n\t\tif (NumGroupTasks == 0)\n\t\t{\n\t\t\tbExit = true;\n\t\t}\n\t}\n}\n\n/**\n * Initialise the indirect args for the final culled indirect draw call.\n */\n\n[numthreads(1, 1, 1)]\nvoid InitInstanceBufferCS()\n{\n\tRWIndirectArgsBuffer[0] = NumIndices;\n\tRWIndirectArgsBuffer[1] = 0; // Increment this counter during CullInstancesCS.\n\tRWIndirectArgsBuffer[2] = 0;\n\tRWIndirectArgsBuffer[3] = 0;\n\tRWIndirectArgsBuffer[4] = 0;\n}\n\n/**\n * Cull the potentially visible render items for a view and generate the final buffer of instances to render.\n */\n\n[numthreads(64, 1, 1)]\nvoid CullInstancesCS( uint3 DispatchThreadId : SV_DispatchThreadID )\n{\n\tuint QuadIndex = DispatchThreadId.x;\n\tif (QuadIndex >= IndirectArgsBufferSRV[3])\n\t\treturn;\n\n\tuint2 PackedItem = QuadBuffer[QuadIndex];\n\tQuadRenderItem Item = UnpackQuadRenderItem(PackedItem);\n\t\n\t// Add to final render intance list.\n\tQuadRenderInstance OutInstance;\n\tOutInstance.UVTransform = float3(0, 0, 0);\n\tOutInstance.PosLevelPacked = 0;\n\tuint Write;\n\tInterlockedAdd(RWIndirectArgsBuffer[1], 1, Write);\n\tRWInstanceBuffer[Write] = OutInstance;\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Shaders/[MODULE]/Private/[NAME]/[NAME]VertexFactory.ush",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"/Engine/Private/VertexFactoryCommon.ush\"\n#include \"/Engine/Private/VirtualTextureCommon.ush\"\n#include \"${NAME}.ush\"\n\nStructuredBuffer<QuadRenderInstance> InstanceBuffer;\nfloat3 LodViewOrigin;\n// float4 LodDistances;\n\n/** Per-vertex inputs. No vertex buffers are bound. */\nstruct FVertexFactoryInput\n{\n\tuint InstanceId : SV_InstanceID;\n\tuint VertexId : SV_VertexID;\n};\n\n/** Cached intermediates that would otherwise have to be computed multiple times. Avoids relying on the compiler to optimize out redundant operations. */\nstruct FVertexFactoryIntermediates\n{\n\tfloat2 LocalUV;\n\tfloat3 LocalPos;\n\tfloat3 WorldNormal;\n\t/** Cached primitive and instance data */\n\tFSceneDataIntermediates SceneData; \n};\n\nFPrimitiveSceneData GetPrimitiveData(FVertexFactoryIntermediates Intermediates)\n{\n\treturn Intermediates.SceneData.Primitive;\n}\n\n/** Attributes to interpolate from the vertex shader to the pixel shader. */\nstruct FVertexFactoryInterpolantsVSToPS\n{\n#if NUM_TEX_COORD_INTERPOLATORS\n\tfloat4 TexCoords[(NUM_TEX_COORD_INTERPOLATORS + 1) / 2] : TEXCOORD0;\n#endif\n#if INSTANCED_STEREO\n\tnointerpolation uint EyeIndex : PACKED_EYE_INDEX;\n#endif\n};\n\n/** Compute the intermediates for a given vertex. */\nFVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput Input)\n{\n\tFVertexFactoryIntermediates Intermediates;\n\tIntermediates.SceneData = VF_GPUSCENE_GET_INTERMEDIATES(Input);\n\n\tconst QuadRenderInstance Item = InstanceBuffer[Input.InstanceId];\n\tuint2 VertexCoord = uint2(Input.VertexId % 2, Input.VertexId / 2);\n\tconst uint2 Pos = VertexCoord * 1000.f;\n\tconst uint Level = 0; //UnpackLevel(Item);\n\t\n\t\n\tconst float3 LocalUVTransform = float3(0.0f, 0.0f, 0.0f);\n\n\tfloat2 LocalUV = (float2)VertexCoord / (float)(2 - 1);\n\n\t// Calculate vertex UV details before morphing\n\tfloat2 XY = ((float2)Pos + LocalUV) * (float)(1u << Level);\n\tfloat2 NormalizedPos = (XY * 1.f);\n\tfloat SampleLevel = Level;\n\n\t// Position in space of virtual texture volume\n\t// Intermediates.VTPos = float3(0, 0, 0);\n\n\t// Position in local space\n\tIntermediates.LocalPos = float3(Pos, Input.InstanceId * 100.f);//mul(float4(Intermediates.VTPos, 1), VHM.VirtualHeightfieldToLocal).xyz;\n\tIntermediates.LocalPos /= ((float) (Level + 1));\n\t\n\tIntermediates.LocalUV = NormalizedPos;\n\n\tIntermediates.WorldNormal = float3(0, 0, 1);\n\n\treturn Intermediates;\n}\n\n/** Converts from vertex factory specific input to a FMaterialVertexParameters, which is used by vertex shader material inputs. */\nFMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 WorldPosition, half3x3 TangentToLocal)\n{\n\tFMaterialVertexParameters Result = (FMaterialVertexParameters)0;\n\n\tResult.SceneData = Intermediates.SceneData;\n\tResult.WorldPosition = WorldPosition;\n\n\t// needs fixing!\n\t// Result.TangentToWorld = mul(TangentToLocal, (float3x3)VHM.VirtualHeightfieldToWorld);\n\tResult.TangentToWorld[2] = Intermediates.WorldNormal;\n\n\tResult.PreSkinnedPosition = WorldPosition;// Intermediates.WorldPosPreDisplacement.xyz;\n\tResult.PreSkinnedNormal = float3(0, 0, 1);\n\n#if NUM_MATERIAL_TEXCOORDS_VERTEX\n\tUNROLL\n\tfor (int CoordinateIndex = 0; CoordinateIndex < NUM_MATERIAL_TEXCOORDS_VERTEX; CoordinateIndex++)\n\t{\n\t\tResult.TexCoords[CoordinateIndex] = Intermediates.LocalUV;\n\t}\n#endif  //NUM_MATERIAL_TEXCOORDS_VERTEX\n\n\treturn Result;\n}\n\n/** Get ID in GPU Scene. We don't implement support because we create/consume our own instancing buffer. */\nuint GetPrimitiveId(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\treturn 0;\n}\n\n/** Get ID in the GPU Scene. */\nuint VertexFactoryGetPrimitiveId(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\treturn GetPrimitiveId(Interpolants);\n}\n\n/** Computes the world space position of this vertex. */\nfloat4 VertexFactoryGetWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\tFLWCMatrix LocalToWorld = GetPrimitiveData(Intermediates).LocalToWorld;\n\tFLWCVector3 WorldPosition = LWCMultiply(Intermediates.LocalPos, LocalToWorld);\n\tfloat3 TranslatedWorldPosition = LWCToFloat(LWCAdd(WorldPosition, ResolvedView.PreViewTranslation));\n\treturn float4(TranslatedWorldPosition, 1.0f);\n}\n\n/** Computes the world space position of this vertex. */\nfloat4 VertexFactoryGetRasterizedWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float4 InWorldPosition)\n{\n\treturn InWorldPosition;\n}\n\n/** Computes the world space position used by vertex lighting for this vertex. */\nfloat3 VertexFactoryGetPositionForVertexLighting(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 TranslatedWorldPosition)\n{\n\treturn TranslatedWorldPosition;\n}\n\n/** Computes the world space position of this vertex last frame. */\nfloat4 VertexFactoryGetPreviousWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\tfloat4x4 PreviousLocalToWorldTranslated = LWCMultiplyTranslation(GetPrimitiveData(Intermediates).PreviousLocalToWorld, ResolvedView.PrevPreViewTranslation);\n\treturn mul(float4(Intermediates.LocalPos,1), PreviousLocalToWorldTranslated);\n}\n\n/** Computes the world space normal of this vertex. */\nfloat3 VertexFactoryGetWorldNormal(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\treturn Intermediates.WorldNormal;\n}\n\n/** Get the 3x3 tangent basis vectors for this vertex factory. This vertex factory will calculate the binormal on-the-fly. */\nhalf3x3 VertexFactoryGetTangentToLocal(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\treturn half3x3(1, 0, 0, 0, 1, 0, 0, 0, 1);\n}\n\n/** Get the translated bounding sphere for this primitive. */\nfloat4 VertexFactoryGetTranslatedPrimitiveVolumeBounds(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\tFPrimitiveSceneData PrimitiveData = GetPrimitiveData(GetPrimitiveId(Interpolants));\n\treturn float4(LWCToFloat(LWCAdd(PrimitiveData.ObjectWorldPosition, ResolvedView.PreViewTranslation)), PrimitiveData.ObjectRadius);\n}\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\nvoid SetUV(inout FVertexFactoryInterpolantsVSToPS Interpolants, uint UVIndex, float2 InValue)\n{\n\tFLATTEN\n\tif (UVIndex % 2)\n\t{\n\t\tInterpolants.TexCoords[UVIndex / 2].zw = InValue;\n\t}\n\telse\n\t{\n\t\tInterpolants.TexCoords[UVIndex / 2].xy = InValue;\n\t}\n}\n\nfloat2 GetUV(FVertexFactoryInterpolantsVSToPS Interpolants, uint UVIndex)\n{\n\tfloat4 UVVector = Interpolants.TexCoords[UVIndex / 2];\n\treturn UVIndex % 2 ? UVVector.zw : UVVector.xy;\n}\n\n#endif\n\n/** Constructs values that need to be interpolated from the vertex shader to the pixel shader. */\nFVertexFactoryInterpolantsVSToPS VertexFactoryGetInterpolantsVSToPS(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, FMaterialVertexParameters VertexParameters)\n{\n\tFVertexFactoryInterpolantsVSToPS Interpolants;\n\n\t// Initialize the whole struct to 0\n\t// Really only the last two components of the packed UVs have the opportunity to be uninitialized\n\tInterpolants = (FVertexFactoryInterpolantsVSToPS)0;\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\tfloat2 CustomizedUVs[NUM_TEX_COORD_INTERPOLATORS];\n\tGetMaterialCustomizedUVs(VertexParameters, CustomizedUVs);\n\tGetCustomInterpolators(VertexParameters, CustomizedUVs);\n\n\tUNROLL\n\tfor (int CoordinateIndex = 0; CoordinateIndex < NUM_TEX_COORD_INTERPOLATORS; CoordinateIndex++)\n\t{\n\t\tSetUV(Interpolants, CoordinateIndex, CustomizedUVs[CoordinateIndex]);\n\t}\n#endif\n\n\treturn Interpolants;\n}\n\n/** Converts from vertex factory specific interpolants to a FMaterialPixelParameters, which is used by material inputs. */\nFMaterialPixelParameters GetMaterialPixelParameters(FVertexFactoryInterpolantsVSToPS Interpolants, float4 SvPosition)\n{\n\t// GetMaterialPixelParameters is responsible for fully initializing the result\n\tFMaterialPixelParameters Result = MakeInitializedMaterialPixelParameters();\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\tUNROLL\n\tfor (uint CoordinateIndex = 0; CoordinateIndex < NUM_TEX_COORD_INTERPOLATORS; CoordinateIndex++)\n\t{\n\t\tResult.TexCoords[CoordinateIndex] = GetUV(Interpolants, CoordinateIndex);\n\t}\n#endif\t//NUM_MATERIAL_TEXCOORDS\n\n\tResult.TwoSidedSign = 0;\n\tResult.PrimitiveId = GetPrimitiveId(Interpolants);\n\n\treturn Result;\n}\n\n#include \"/Engine/Private/VertexFactoryDefaultInterface.ush\"\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]Actor.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Actor.h\"\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Component.h\"\n\nA${NAME}::A${NAME}(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\tRootComponent = ${NAME}Component = CreateDefaultSubobject<U${NAME}Component>(TEXT(\"${NAME}Component\"));\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]Component.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Component.h\"\n\n#include \"Engine/World.h\"\n#include \"${NAME}SceneProxy.h\"\n\nU${NAME}Component::U${NAME}Component(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\tCastShadow = true;\n\tbCastContactShadow = false;\n\tbUseAsOccluder = true;\n\tbAffectDynamicIndirectLighting = false;\n\tbAffectDistanceFieldLighting = false;\n\tbNeverDistanceCull = true;\n#if WITH_EDITORONLY_DATA\n\tbEnableAutoLODGeneration = false;\n#endif\n\tMobility = EComponentMobility::Static;\n}\n\nvoid U${NAME}Component::OnRegister()\n{\n\tSuper::OnRegister();\n}\n\nvoid U${NAME}Component::OnUnregister()\n{\n\tSuper::OnUnregister();\n}\n\nvoid U${NAME}Component::ApplyWorldOffset(const FVector& InOffset, bool bWorldShift)\n{\n\tSuper::ApplyWorldOffset(InOffset, bWorldShift);\n\tMarkRenderStateDirty();\n}\n\nbool U${NAME}Component::IsVisible() const\n{\n\treturn Super::IsVisible();\n}\n\nFBoxSphereBounds U${NAME}Component::CalcBounds(const FTransform& LocalToWorld) const\n{\n\treturn FBoxSphereBounds(FBox(FVector(0.f, 0.f, 0.f), FVector(10000.f))).TransformBy(LocalToWorld);\n}\n\nFPrimitiveSceneProxy* U${NAME}Component::CreateSceneProxy()\n{\n\treturn new F${NAME}SceneProxy(this);\n}\n\nvoid U${NAME}Component::SetMaterial(int32 InElementIndex, UMaterialInterface* InMaterial)\n{\n\tif (InElementIndex == 0 && Material != InMaterial)\n\t{\n\t\tMaterial = InMaterial;\n\t\tMarkRenderStateDirty();\n\t}\n}\n\nvoid U${NAME}Component::GetUsedMaterials(TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials) const\n{\n\tif (Material != nullptr)\n\t{\n\t\tOutMaterials.Add(Material);\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]SceneProxy.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"${NAME}SceneProxy.h\"\n\n#include \"CommonRenderResources.h\"\n#include \"EngineModule.h\"\n#include \"Engine/Engine.h\"\n#include \"GlobalShader.h\"\n#include \"HAL/IConsoleManager.h\"\n#include \"MaterialDomain.h\"\n#include \"Materials/Material.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderGraphUtils.h\"\n#include \"RenderUtils.h\"\n#include \"DataDrivenShaderPlatformInfo.h\"\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Component.h\"\n#include \"${NAME}VertexFactory.h\"\n\nnamespace ${NAME}Mesh\n{\n\t/** Initialize the FDrawInstanceBuffers objects. */\n\tvoid InitializeInstanceBuffers(FRHICommandListImmediate & InRHICmdList, FDrawInstanceBuffers & InBuffers);\n\n\t/** Release the FDrawInstanceBuffers objects. */\n\tvoid ReleaseInstanceBuffers(FDrawInstanceBuffers & InBuffers)\n\t{\n\t\tInBuffers.InstanceBuffer.SafeRelease();\n\t\tInBuffers.InstanceBufferUAV.SafeRelease();\n\t\tInBuffers.InstanceBufferSRV.SafeRelease();\n\t\tInBuffers.IndirectArgsBuffer.SafeRelease();\n\t\tInBuffers.IndirectArgsBufferUAV.SafeRelease();\n\t}\n}\n\n/** Renderer extension to manage the buffer pool and add hooks for GPU culling passes. */\nclass F${NAME}RendererExtension : public FRenderResource\n{\npublic:\n\tF${NAME}RendererExtension()\n\t\t\t: bInFrame(false), DiscardId(0)\n\t{\n\t}\n\n\tvirtual ~F${NAME}RendererExtension()\n\t{\n\t}\n\n\tbool IsInFrame() { return bInFrame; }\n\n\t/** Call once to register this extension. */\n\tvoid RegisterExtension();\n\n\t/** Call once per frame for each mesh/view that has relevance. This allocates the buffers to use for the frame and adds the work to fill the buffers to the queue. */\n\t${NAME}Mesh::FDrawInstanceBuffers &AddWork(F${NAME}SceneProxy const *InProxy, FSceneView const *InMainView, FSceneView const *InCullView);\n\t/** Submit all the work added by AddWork(). The work fills all of the buffers ready for use by the referencing mesh batches. */\n\tvoid SubmitWork(FRDGBuilder & GraphBuilder);\n\nprotected:\n\t//~ Begin FRenderResource Interface\n\tvirtual void ReleaseRHI() override;\n\t//~ End FRenderResource Interface\n\nprivate:\n\t/** Called by renderer at start of render frame. */\n\tvoid BeginFrame(FRDGBuilder & GraphBuilder);\n\t/** Called by renderer at end of render frame. */\n\tvoid EndFrame(FRDGBuilder & GraphBuilder);\n\tvoid EndFrame();\n\n\t/** Flag for frame validation. */\n\tbool bInFrame;\n\n\t/** Buffers to fill. Resources can persist between frames to reduce allocation cost, but contents don't persist. */\n\tTArray<${NAME}Mesh::FDrawInstanceBuffers> Buffers;\n\t/** Per buffer frame time stamp of last usage. */\n\tTArray<uint32> DiscardIds;\n\t/** Current frame time stamp. */\n\tuint32 DiscardId;\n\n\t/** Arrary of unique scene proxies to render this frame. */\n\tTArray<F${NAME}SceneProxy const *> SceneProxies;\n\t/** Arrary of unique main views to render this frame. */\n\tTArray<FSceneView const *> MainViews;\n\t/** Arrary of unique culling views to render this frame. */\n\tTArray<FSceneView const *> CullViews;\n\n\t/** Key for each buffer we need to generate. */\n\tstruct FWorkDesc\n\t{\n\t\tint32 ProxyIndex;\n\t\tint32 MainViewIndex;\n\t\tint32 CullViewIndex;\n\t\tint32 BufferIndex;\n\t};\n\n\t/** Keys specifying what to render. */\n\tTArray<FWorkDesc> WorkDescs;\n\n\t/** Sort predicate for FWorkDesc. When rendering we want to batch work by proxy, then by main view. */\n\tstruct FWorkDescSort\n\t{\n\t\tuint32 SortKey(FWorkDesc const &WorkDesc) const\n\t\t{\n\t\t\treturn (WorkDesc.ProxyIndex << 24) | (WorkDesc.MainViewIndex << 16) | (WorkDesc.CullViewIndex << 8) | WorkDesc.BufferIndex;\n\t\t}\n\n\t\tbool operator()(FWorkDesc const &A, FWorkDesc const &B) const\n\t\t{\n\t\t\treturn SortKey(A) < SortKey(B);\n\t\t}\n\t};\n};\n\n/** Single global instance of the ISM renderer extension. */\nTGlobalResource<F${NAME}RendererExtension> ${NAME}RendererExtension;\n\nvoid F${NAME}RendererExtension::RegisterExtension()\n{\n\tstatic bool bInit = false;\n\tif (!bInit)\n\t{\n\t\tGEngine->GetPreRenderDelegateEx().AddRaw(this, &F${NAME}RendererExtension::BeginFrame);\n\t\tGEngine->GetPostRenderDelegateEx().AddRaw(this, &F${NAME}RendererExtension::EndFrame);\n\t\tbInit = true;\n\t}\n}\n\nvoid F${NAME}RendererExtension::ReleaseRHI()\n{\n\tBuffers.Empty();\n}\n\n${NAME}Mesh::FDrawInstanceBuffers &F${NAME}RendererExtension::AddWork(F${NAME}SceneProxy const *InProxy, FSceneView const *InMainView, FSceneView const *InCullView)\n{\n\t// If we hit this then BeginFrame()/EndFrame() logic needs fixing in the Scene Renderer.\n\tif (!ensure(!bInFrame))\n\t{\n\t\tEndFrame();\n\t}\n\n\t// Create workload\n\tFWorkDesc WorkDesc;\n\tWorkDesc.ProxyIndex = SceneProxies.AddUnique(InProxy);\n\tWorkDesc.MainViewIndex = MainViews.AddUnique(InMainView);\n\tWorkDesc.CullViewIndex = CullViews.AddUnique(InCullView);\n\tWorkDesc.BufferIndex = -1;\n\n\t// Check for an existing duplicate\n\tfor (FWorkDesc &It : WorkDescs)\n\t{\n\t\tif (It.ProxyIndex == WorkDesc.ProxyIndex && It.MainViewIndex == WorkDesc.MainViewIndex && It.CullViewIndex == WorkDesc.CullViewIndex && It.BufferIndex != -1)\n\t\t{\n\t\t\tWorkDesc.BufferIndex = It.BufferIndex;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Try to recycle a buffer\n\tif (WorkDesc.BufferIndex == -1)\n\t{\n\t\tfor (int32 BufferIndex = 0; BufferIndex < Buffers.Num(); BufferIndex++)\n\t\t{\n\t\t\tif (DiscardIds[BufferIndex] < DiscardId)\n\t\t\t{\n\t\t\t\tDiscardIds[BufferIndex] = DiscardId;\n\t\t\t\tWorkDesc.BufferIndex = BufferIndex;\n\t\t\t\tWorkDescs.Add(WorkDesc);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allocate new buffer if necessary\n\tif (WorkDesc.BufferIndex == -1)\n\t{\n\t\tDiscardIds.Add(DiscardId);\n\t\tWorkDesc.BufferIndex = Buffers.AddDefaulted();\n\t\tWorkDescs.Add(WorkDesc);\n\t\t${NAME}Mesh::InitializeInstanceBuffers(GetImmediateCommandList_ForRenderCommand(), Buffers[WorkDesc.BufferIndex]);\n\t}\n\n\treturn Buffers[WorkDesc.BufferIndex];\n}\n\nvoid F${NAME}RendererExtension::BeginFrame(FRDGBuilder &GraphBuilder)\n{\n\t// If we hit this then BeginFrame()/EndFrame() logic needs fixing in the Scene Renderer.\n\tif (!ensure(!bInFrame))\n\t{\n\t\tEndFrame();\n\t}\n\tbInFrame = true;\n\n\tif (WorkDescs.Num() > 0)\n\t{\n\t\tSubmitWork(GraphBuilder);\n\t}\n}\n\nvoid F${NAME}RendererExtension::EndFrame()\n{\n\tensure(bInFrame);\n\tbInFrame = false;\n\n\tSceneProxies.Reset();\n\tMainViews.Reset();\n\tCullViews.Reset();\n\tWorkDescs.Reset();\n\n\t// Clean the buffer pool\n\tDiscardId++;\n\n\tfor (int32 Index = 0; Index < DiscardIds.Num();)\n\t{\n\t\tif (DiscardId - DiscardIds[Index] > 4u)\n\t\t{\n\t\t\t${NAME}Mesh::ReleaseInstanceBuffers(Buffers[Index]);\n\t\t\tBuffers.RemoveAtSwap(Index);\n\t\t\tDiscardIds.RemoveAtSwap(Index);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t++Index;\n\t\t}\n\t}\n}\n\nvoid F${NAME}RendererExtension::EndFrame(FRDGBuilder &GraphBuilder)\n{\n\tEndFrame();\n}\n\nconst static FName NAME_${NAME}(TEXT(\"${NAME}\"));\n\nF${NAME}SceneProxy::F${NAME}SceneProxy(U${NAME}Component *InComponent)\n\t\t: FPrimitiveSceneProxy(InComponent, NAME_${NAME}), VertexFactory(nullptr)\n{\n\t${NAME}RendererExtension.RegisterExtension();\n\n\t// They have some LOD, but considered static as the LODs (are intended to) represent the same static surface.\n\t// TODO Check if this allows WPO\n\tbHasDeformableMesh = false;\n\n\tUMaterialInterface *ComponentMaterial = InComponent->GetMaterial();\n\t// TODO MATUSAGE\n\tconst bool bValidMaterial = ComponentMaterial != nullptr && ComponentMaterial->CheckMaterialUsage_Concurrent(MATUSAGE_VirtualHeightfieldMesh);\n\tMaterial = bValidMaterial ? ComponentMaterial->GetRenderProxy() : UMaterial::GetDefaultMaterial(MD_Surface)->GetRenderProxy();\n\tMaterialRelevance = Material->GetMaterialInterface()->GetRelevance_Concurrent(GetScene().GetFeatureLevel());\n}\n\nSIZE_T F${NAME}SceneProxy::GetTypeHash() const\n{\n\tstatic size_t UniquePointer;\n\treturn reinterpret_cast<size_t>(&UniquePointer);\n}\n\nuint32 F${NAME}SceneProxy::GetMemoryFootprint() const\n{\n\treturn (sizeof(*this) + FPrimitiveSceneProxy::GetAllocatedSize());\n}\n\nvoid F${NAME}SceneProxy::OnTransformChanged()\n{\n\t// TODO\n\t// UVToLocal = UVToWorld * GetLocalToWorld().Inverse();\n\n\t// Setup a default occlusion volume array containing just the primitive bounds.\n\t// We use this if disabling the full set of occlusion volumes.\n\t// DefaultOcclusionVolumes.Reset();\n\t// DefaultOcclusionVolumes.Add(GetBounds());\n}\n\nvoid F${NAME}SceneProxy::CreateRenderThreadResources()\n{\n\t// Gather vertex factory uniform parameters.\n\tF${NAME}Parameters UniformParams;\n\t// TODO UNIFORM INIT\n\n\t// Create vertex factory.\n\tVertexFactory = new F${NAME}VertexFactory(GetScene().GetFeatureLevel(), UniformParams);\n\tVertexFactory->InitResource(FRHICommandListImmediate::Get());\n}\n\nvoid F${NAME}SceneProxy::DestroyRenderThreadResources()\n{\n\tif (VertexFactory != nullptr)\n\t{\n\t\tVertexFactory->ReleaseResource();\n\t\tdelete VertexFactory;\n\t\tVertexFactory = nullptr;\n\t}\n}\n\nFPrimitiveViewRelevance F${NAME}SceneProxy::GetViewRelevance(const FSceneView *View) const\n{\n\tconst bool bValid = true; // TODO Allow users to modify\n\tconst bool bIsHiddenInEditor = bHiddenInEditor && View->Family->EngineShowFlags.Editor;\n\n\tFPrimitiveViewRelevance Result;\n\tResult.bDrawRelevance = bValid && IsShown(View) && !bIsHiddenInEditor;\n\tResult.bShadowRelevance = bValid && IsShadowCast(View) && ShouldRenderInMainPass() && !bIsHiddenInEditor;\n\tResult.bDynamicRelevance = true;\n\tResult.bStaticRelevance = false;\n\tResult.bRenderInMainPass = ShouldRenderInMainPass();\n\tResult.bUsesLightingChannels = GetLightingChannelMask() != GetDefaultLightingChannelMask();\n\tResult.bRenderCustomDepth = ShouldRenderCustomDepth();\n\tResult.bTranslucentSelfShadow = false;\n\tResult.bVelocityRelevance = false;\n\tMaterialRelevance.SetPrimitiveViewRelevance(Result);\n\treturn Result;\n}\n\nvoid F${NAME}SceneProxy::GetDynamicMeshElements(const TArray<const FSceneView *> &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const\n{\n\tcheck(IsInRenderingThread());\n\n\tif (${NAME}RendererExtension.IsInFrame())\n\t{\n\t\t// Can't add new work while bInFrame.\n\t\t// In UE5 we need to AddWork()/SubmitWork() in two phases: InitViews() and InitViewsAfterPrepass()\n\t\t// The main renderer hooks for that don't exist in UE5.0 and are only added in UE5.1\n\t\t// That means that for UE5.0 we always hit this for shadow drawing and shadows will not be rendered.\n\t\t// Not earlying out here can lead to crashes from buffers being released too soon.\n\t\treturn;\n\t}\n\n\tfor (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)\n\t{\n\t\tif (VisibilityMap & (1 << ViewIndex))\n\t\t{\n\t\t\t// TODO INIT instance buffer\n\t\t\t${NAME}Mesh::FDrawInstanceBuffers &Buffers = ${NAME}RendererExtension.AddWork(this, ViewFamily.Views[0], Views[ViewIndex]);\n\n\t\t\tFMeshBatch &Mesh = Collector.AllocateMesh();\n\t\t\tMesh.bWireframe = AllowDebugViewmodes() && ViewFamily.EngineShowFlags.Wireframe;\n\t\t\tMesh.bUseWireframeSelectionColoring = IsSelected();\n\t\t\tMesh.VertexFactory = VertexFactory;\n\t\t\tMesh.MaterialRenderProxy = Material;\n\t\t\tMesh.ReverseCulling = IsLocalToWorldDeterminantNegative();\n\t\t\tMesh.Type = PT_TriangleList;\n\t\t\tMesh.DepthPriorityGroup = SDPG_World;\n\t\t\tMesh.bCanApplyViewModeOverrides = true;\n\t\t\tMesh.bUseForMaterial = true;\n\t\t\tMesh.CastShadow = true;\n\t\t\tMesh.bUseForDepthPass = true;\n\n\t\t\tMesh.Elements.SetNumZeroed(1);\n\t\t\t{\n\t\t\t\tFMeshBatchElement &BatchElement = Mesh.Elements[0];\n\n\t\t\t\t// TODO allow for non indirect instanced rendering\n\t\t\t\tBatchElement.IndexBuffer = VertexFactory->GetIndexBuffer();\n\t\t\t\tBatchElement.IndirectArgsBuffer = Buffers.IndirectArgsBuffer;\n\t\t\t\tBatchElement.IndirectArgsOffset = 0;\n\n\t\t\t\tBatchElement.FirstIndex = 0;\n\t\t\t\tBatchElement.NumPrimitives = 0;\n\t\t\t\tBatchElement.MinVertexIndex = 0;\n\t\t\t\tBatchElement.MaxVertexIndex = 0;\n\n\t\t\t\tBatchElement.PrimitiveIdMode = PrimID_ForceZero;\n\t\t\t\tBatchElement.PrimitiveUniformBuffer = GetUniformBuffer();\n\n\t\t\t\tF${NAME}UserData *UserData = &Collector.AllocateOneFrameResource<F${NAME}UserData>();\n\t\t\t\tBatchElement.UserData = (void *)UserData;\n\n\t\t\t\tUserData->InstanceBufferSRV = Buffers.InstanceBufferSRV;\n\n\t\t\t\tFSceneView const *MainView = ViewFamily.Views[0];\n\t\t\t\tUserData->LodViewOrigin = (FVector3f)MainView->ViewMatrices.GetViewOrigin(); // LWC_TODO: Precision Loss\n\n#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)\n\t\t\t\t// Support the freezerendering mode. Use any frozen view state for culling.\n\t\t\t\tconst FViewMatrices *FrozenViewMatrices = MainView->State != nullptr ? MainView->State->GetFrozenViewMatrices() : nullptr;\n\t\t\t\tif (FrozenViewMatrices != nullptr)\n\t\t\t\t{\n\t\t\t\t\tUserData->LodViewOrigin = (FVector3f)FrozenViewMatrices->GetViewOrigin();\n\t\t\t\t}\n#endif\n\t\t\t}\n\n\t\t\tCollector.AddMesh(ViewIndex, Mesh);\n\t\t}\n\t}\n}\n\n// bool F${NAME}SceneProxy::HasSubprimitiveOcclusionQueries() const\n// {\n// \treturn false;\n// }\n\n// const TArray<FBoxSphereBounds>* F${NAME}SceneProxy::GetOcclusionQueries(const FSceneView* View) const\n// {\n// \t// return &DefaultOcclusionVolumes;\n// }\n\n// void F${NAME}SceneProxy::BuildOcclusionVolumes(TArrayView<FVector2D> const& InMinMaxData, FIntPoint const& InMinMaxSize, TArrayView<int32> const& InMinMaxMips, int32 InNumLods)\n// {\n// \t// TODO\n// }\n\n// void F${NAME}SceneProxy::AcceptOcclusionResults(FSceneView const* View, TArray<bool>* Results, int32 ResultsStart, int32 NumResults)\n// {\n// \tcheck(IsInRenderingThread());\n\n// \t// TODO\n// }\n\nnamespace ${NAME}Mesh\n{\n\t/* Keep indirect args offsets in sync with ISM.usf. */\n\tstatic const int32 IndirectArgsByteOffset_FinalCull = 0;\n\tstatic const int32 IndirectArgsByteSize = 4 * sizeof(uint32);\n\n\t/** Shader structure used for tracking work queues in persistent wave style shaders. Keep in sync with ISM.ush. */\n\tstruct WorkerQueueInfo\n\t{\n\t\tuint32 Read;\n\t\tuint32 Write;\n\t\tint32 NumActive;\n\t};\n\n\tstruct F${NAME}RenderInstance\n\t{\n\t\tfloat Position[3];\n\t};\n\n\t/** Compute shader to initialize all buffers, including adding the lowest mip page(s) to the QuadBuffer. */\n\tclass FInitBuffersVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FInitBuffersVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FInitBuffersVHM_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(uint32, MaxLevel)\n\t\tSHADER_PARAMETER(uint32, NumForceLoadLods)\n\t\tSHADER_PARAMETER(uint32, PageTableFeedbackId)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<WorkerQueueInfo>, RWQueueInfo)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWQueueBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint2>, RWQuadBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWFeedbackBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FInitBuffersVHM_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"InitBuffersCS\", SF_Compute);\n\n\t/** Compute shader to traverse the virtual texture page table for a view and generate an array of quads to potentially render. */\n\tclass FCollectQuadsVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FCollectQuadsVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FCollectQuadsVHM_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, HeightMinMaxTexture)\n\t\tSHADER_PARAMETER_SAMPLER(SamplerState, MinMaxTextureSampler)\n\t\tSHADER_PARAMETER(int32, MinMaxLevelOffset)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, LodBiasMinMaxTexture)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D<float>, OcclusionTexture)\n\t\tSHADER_PARAMETER(int32, OcclusionLevelOffset)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D<uint>, PageTableTexture)\n\t\tSHADER_PARAMETER(uint32, MaxLevel)\n\t\tSHADER_PARAMETER(FVector4f, PageTableSize)\n\t\tSHADER_PARAMETER(uint32, PageTableFeedbackId)\n\t\tSHADER_PARAMETER(FVector4f, LodDistances)\n\t\tSHADER_PARAMETER(float, LodBiasScale)\n\t\tSHADER_PARAMETER(FVector3f, ViewOrigin)\n\t\tSHADER_PARAMETER_ARRAY(FVector4f, FrustumPlanes, [5])\n\t\tSHADER_PARAMETER(FMatrix44f, UVToWorld)\n\t\tSHADER_PARAMETER(FVector3f, UVToWorldScale)\n\t\tSHADER_PARAMETER(uint32, QueueBufferSizeMask)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<WorkerQueueInfo>, RWQueueInfo)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWQueueBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint2>, RWQuadBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWFeedbackBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FCollectQuadsVHM_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"CollectQuadsCS\", SF_Compute);\n\n\t/** InitInstanceBuffer compute shader. */\n\tclass FInitInstanceBufferVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FInitInstanceBufferVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FInitInstanceBufferVHM_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(int32, NumIndices)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FInitInstanceBufferVHM_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"InitInstanceBufferCS\", SF_Compute);\n\n\t/** CullInstances compute shader. */\n\tclass FCullInstancesVHM_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FCullInstancesVHM_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FCullInstancesVHM_CS, FGlobalShader);\n\n\t\tclass FReuseCullDim : SHADER_PERMUTATION_BOOL(\"REUSE_CULL\");\n\n\t\tusing FPermutationDomain = TShaderPermutationDomain<FReuseCullDim>;\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, HeightMinMaxTexture)\n\t\tSHADER_PARAMETER_SAMPLER(SamplerState, MinMaxTextureSampler)\n\t\tSHADER_PARAMETER(int32, MinMaxLevelOffset)\n\t\tSHADER_PARAMETER_TEXTURE(Texture2D, PageTableTexture)\n\t\tSHADER_PARAMETER(FVector4f, PageTableSize)\n\t\tSHADER_PARAMETER_ARRAY(FVector4f, FrustumPlanes, [5])\n\t\tSHADER_PARAMETER(FVector4f, PhysicalPageTransform)\n\t\tSHADER_PARAMETER(uint32, NumPhysicalAddressBits)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint2>, QuadBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, IndirectArgsBufferSRV)\n\t\tSHADER_PARAMETER_UAV(RWStructuredBuffer<${NAME}Mesh::F${NAME}RenderInstance>, RWInstanceBuffer)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tRDG_BUFFER_ACCESS(IndirectArgsBuffer, ERHIAccess::IndirectArgs)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FCullInstancesVHM_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"CullInstancesCS\", SF_Compute);\n\n\t/** Default Min/Max texture has the fixed maximum [0,1]. */\n\tclass FHeightMinMaxDefaultTexture : public FTexture\n\t{\n\tpublic:\n\t\tvirtual void InitRHI(FRHICommandListBase &RHICmdList) override\n\t\t{\n\t\t\tconst FRHITextureCreateDesc Desc =\n\t\t\t\tFRHITextureCreateDesc::Create2D(TEXT(\"ISM.MinMaxDefaultTexture\"), 1, 1, PF_B8G8R8A8)\n\t\t\t\t.SetFlags(ETextureCreateFlags::ShaderResource);\n\t\t\tTextureRHI = RHICreateTexture(Desc);\n\n\t\t\t// Write the contents of the texture.\n\t\t\tuint32 DestStride;\n\t\t\tFColor *DestBuffer = (FColor *)RHILockTexture2D(TextureRHI, 0, RLM_WriteOnly, DestStride, false);\n\t\t\t*DestBuffer = FColor(0, 0, 255, 255);\n\t\t\tRHIUnlockTexture2D(TextureRHI, 0, false);\n\n\t\t\t// Create the sampler state RHI resource.\n\t\t\tFSamplerStateInitializerRHI SamplerStateInitializer(SF_Point, AM_Clamp, AM_Clamp, AM_Clamp);\n\t\t\tSamplerStateRHI = GetOrCreateSamplerState(SamplerStateInitializer);\n\t\t}\n\n\t\tvirtual uint32 GetSizeX() const override { return 1; }\n\t\tvirtual uint32 GetSizeY() const override { return 1; }\n\t};\n\n\t/** Single global instance of default Min/Max texture. */\n\tFTexture *GHeightMinMaxDefaultTexture = new TGlobalResource<FHeightMinMaxDefaultTexture>;\n\n\t/** View matrices that can be frozen in freezerendering mode. */\n\tstruct FViewData\n\t{\n\t\tFVector ViewOrigin;\n\t\tFMatrix ProjectionMatrix;\n\t\tFConvexVolume ViewFrustum;\n\t\tbool bViewFrozen;\n\t};\n\n\t/** Fill the FViewData from an FSceneView respecting the freezerendering mode. */\n\tvoid GetViewData(FSceneView const *InSceneView, FViewData &OutViewData)\n\t{\n#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)\n\t\tconst FViewMatrices *FrozenViewMatrices = InSceneView->State != nullptr ? InSceneView->State->GetFrozenViewMatrices() : nullptr;\n\t\tif (FrozenViewMatrices != nullptr)\n\t\t{\n\t\t\tOutViewData.ViewOrigin = FrozenViewMatrices->GetViewOrigin();\n\t\t\tOutViewData.ProjectionMatrix = FrozenViewMatrices->GetProjectionMatrix();\n\t\t\tGetViewFrustumBounds(OutViewData.ViewFrustum, FrozenViewMatrices->GetViewProjectionMatrix(), true);\n\t\t\tOutViewData.bViewFrozen = true;\n\t\t}\n\t\telse\n#endif\n\t\t{\n\t\t\tOutViewData.ViewOrigin = InSceneView->ViewMatrices.GetViewOrigin();\n\t\t\tOutViewData.ProjectionMatrix = InSceneView->ViewMatrices.GetProjectionMatrix();\n\t\t\tOutViewData.ViewFrustum = InSceneView->ViewFrustum;\n\t\t\tOutViewData.bViewFrozen = false;\n\t\t}\n\t}\n\n\t/** Structure describing GPU culling setup for a single Proxy. */\n\tstruct FProxyDesc\n\t{\n\t\tFRHITexture *PageTableTexture;\n\t\tFRHITexture *HeightMinMaxTexture;\n\t\tFRHITexture *LodBiasMinMaxTexture;\n\t\tint32 MinMaxLevelOffset;\n\n\t\tuint32 MaxLevel;\n\t\tuint32 NumForceLoadLods;\n\t\tuint32 PageTableFeedbackId;\n\t\tuint32 NumPhysicalAddressBits;\n\t\tFVector4 PageTableSize;\n\t\tFVector4 PhysicalPageTransform;\n\t\tFMatrix UVToWorld;\n\t\tFVector UVToWorldScale;\n\t\tuint32 NumQuadsPerTileSide;\n\n\t\tint32 MaxPersistentQueueItems;\n\t\tint32 MaxRenderItems;\n\t\tint32 MaxFeedbackItems;\n\t\tint32 NumCollectPassWavefronts;\n\t};\n\n\t/** View description used for LOD calculation in the main view. */\n\tstruct FMainViewDesc\n\t{\n\t\tFSceneView const *ViewDebug;\n\t\tFVector ViewOrigin;\n\t\tFVector4 LodDistances;\n\t\tfloat LodBiasScale;\n\t\tFVector4 Planes[5];\n\t\tFTextureRHIRef OcclusionTexture;\n\t\tint32 OcclusionLevelOffset;\n\t};\n\n\t/** View description used for culling in the child view. */\n\tstruct FChildViewDesc\n\t{\n\t\tFSceneView const *ViewDebug;\n\t\tbool bIsMainView;\n\t\tFVector4 Planes[5];\n\t};\n\n\t/** Structure to carry RDG resources. */\n\tstruct FVolatileResources\n\t{\n\t\tFRDGBufferRef QueueInfo;\n\t\tFRDGBufferUAVRef QueueInfoUAV;\n\t\tFRDGBufferRef QueueBuffer;\n\t\tFRDGBufferUAVRef QueueBufferUAV;\n\n\t\tFRDGBufferRef QuadBuffer;\n\t\tFRDGBufferUAVRef QuadBufferUAV;\n\t\tFRDGBufferSRVRef QuadBufferSRV;\n\n\t\tFRDGBufferRef FeedbackBuffer;\n\t\tFRDGBufferUAVRef FeedbackBufferUAV;\n\n\t\tFRDGBufferRef IndirectArgsBuffer;\n\t\tFRDGBufferUAVRef IndirectArgsBufferUAV;\n\t\tFRDGBufferSRVRef IndirectArgsBufferSRV;\n\t};\n\n\t/** Initialize the FDrawInstanceBuffers objects. */\n\tvoid InitializeInstanceBuffers(FRHICommandListImmediate & InRHICmdList, FDrawInstanceBuffers & InBuffers)\n\t{\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"F${NAME}.InstanceBuffer\"));\n\t\t\tconst int32 InstanceSize = sizeof(${NAME}Mesh::F${NAME}RenderInstance);\n\t\t\tconst int32 InstanceBufferSize = 1024 * 4 * InstanceSize;\n\t\t\tInBuffers.InstanceBuffer = InRHICmdList.CreateStructuredBuffer(InstanceSize, InstanceBufferSize, BUF_UnorderedAccess | BUF_ShaderResource, ERHIAccess::SRVMask, CreateInfo);\n\t\t\tInBuffers.InstanceBufferUAV = InRHICmdList.CreateUnorderedAccessView(InBuffers.InstanceBuffer, false, false);\n\t\t\tInBuffers.InstanceBufferSRV = InRHICmdList.CreateShaderResourceView(InBuffers.InstanceBuffer);\n\t\t}\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"F${NAME}.InstanceIndirectArgsBuffer\"));\n\t\t\tInBuffers.IndirectArgsBuffer = InRHICmdList.CreateVertexBuffer(5 * sizeof(uint32), BUF_UnorderedAccess | BUF_DrawIndirect, ERHIAccess::IndirectArgs, CreateInfo);\n\t\t\tInBuffers.IndirectArgsBufferUAV = InRHICmdList.CreateUnorderedAccessView(InBuffers.IndirectArgsBuffer, PF_R32_UINT);\n\t\t}\n\t}\n\n\t/** Initialize the volatile resources used in the render graph. */\n\tvoid InitializeResources(FRDGBuilder & GraphBuilder, FProxyDesc const &InDesc, FMainViewDesc const &InMainViewDesc, FVolatileResources &OutResources)\n\t{\n\t\tOutResources.QueueInfo = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateStructuredDesc(sizeof(WorkerQueueInfo), 1), TEXT(\"${NAME}Mesh.QueueInfo\"));\n\t\tOutResources.QueueInfoUAV = GraphBuilder.CreateUAV(OutResources.QueueInfo);\n\t\tOutResources.QueueBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateBufferDesc(sizeof(uint32), InDesc.MaxPersistentQueueItems), TEXT(\"${NAME}Mesh.QuadQueue\"));\n\t\tOutResources.QueueBufferUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutResources.QueueBuffer, PF_R32_UINT));\n\n\t\tOutResources.QuadBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateBufferDesc(sizeof(uint32) * 2, InDesc.MaxRenderItems), TEXT(\"${NAME}Mesh.QuadBuffer\"));\n\t\tOutResources.QuadBufferUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutResources.QuadBuffer, PF_R32G32_UINT));\n\t\tOutResources.QuadBufferSRV = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(OutResources.QuadBuffer, PF_R32G32_UINT));\n\n\t\tFRDGBufferDesc FeedbackBufferDesc = FRDGBufferDesc::CreateBufferDesc(sizeof(uint32), InDesc.MaxFeedbackItems + 1);\n\t\tFeedbackBufferDesc.Usage = EBufferUsageFlags(FeedbackBufferDesc.Usage | BUF_SourceCopy);\n\t\tOutResources.FeedbackBuffer = GraphBuilder.CreateBuffer(FeedbackBufferDesc, TEXT(\"${NAME}Mesh.FeedbackBuffer\"));\n\t\tOutResources.FeedbackBufferUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutResources.FeedbackBuffer, PF_R32_UINT));\n\n\t\tOutResources.IndirectArgsBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateIndirectDesc(IndirectArgsByteSize), TEXT(\"${NAME}Mesh.IndirectArgsBuffer\"));\n\t\tOutResources.IndirectArgsBufferUAV = GraphBuilder.CreateUAV(OutResources.IndirectArgsBuffer);\n\t\tOutResources.IndirectArgsBufferSRV = GraphBuilder.CreateSRV(OutResources.IndirectArgsBuffer);\n\t}\n\n\t/** Transition our output draw buffers for use. Read or write access is set according to the bToWrite parameter. */\n\tvoid AddPass_TransitionAllDrawBuffers(FRDGBuilder & GraphBuilder, TArray<${NAME}Mesh::FDrawInstanceBuffers> const &Buffers, TArrayView<int32> const &BufferIndices, bool bToWrite)\n\t{\n\t\tTArray<FRHIUnorderedAccessView *> OverlapUAVs;\n\t\tOverlapUAVs.Reserve(BufferIndices.Num());\n\n\t\tTArray<FRHITransitionInfo> TransitionInfos;\n\t\tTransitionInfos.Reserve(BufferIndices.Num() * 2);\n\n\t\tfor (int32 BufferIndex : BufferIndices)\n\t\t{\n\t\t\tFRHIUnorderedAccessView *IndirectArgsBufferUAV = Buffers[BufferIndex].IndirectArgsBufferUAV;\n\t\t\tFRHIUnorderedAccessView *InstanceBufferUAV = Buffers[BufferIndex].InstanceBufferUAV;\n\n\t\t\tOverlapUAVs.Add(IndirectArgsBufferUAV);\n\n\t\t\tTransitionInfos.Add(FRHITransitionInfo(IndirectArgsBufferUAV, bToWrite ? ERHIAccess::IndirectArgs : ERHIAccess::UAVMask, bToWrite ? ERHIAccess::UAVMask : ERHIAccess::IndirectArgs));\n\t\t\tTransitionInfos.Add(FRHITransitionInfo(InstanceBufferUAV, bToWrite ? ERHIAccess::SRVMask : ERHIAccess::UAVMask, bToWrite ? ERHIAccess::UAVMask : ERHIAccess::SRVMask));\n\t\t}\n\n\t\tAddPass(GraphBuilder, RDG_EVENT_NAME(\"TransitionAllDrawBuffers\"), [bToWrite, OverlapUAVs, TransitionInfos](FRHICommandList &InRHICmdList)\n\t\t\t\t\t\t{\n\t\t\tif (!bToWrite)\n\t\t\t{\n\t\t\t\tInRHICmdList.EndUAVOverlap(OverlapUAVs);\n\t\t\t}\n\n\t\t\tInRHICmdList.Transition(TransitionInfos);\n\t\t\t\n\t\t\tif (bToWrite)\n\t\t\t{\n\t\t\t\tInRHICmdList.BeginUAVOverlap(OverlapUAVs);\n\t\t\t} });\n\t}\n\n\t/** Initialize the buffers before collecting visible quads. */\n\tvoid AddPass_InitBuffers(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources)\n\t{\n\t\tTShaderMapRef<FInitBuffersVHM_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFInitBuffersVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FInitBuffersVHM_CS::FParameters>();\n\t\tPassParameters->MaxLevel = InDesc.MaxLevel;\n\t\tPassParameters->NumForceLoadLods = InDesc.NumForceLoadLods;\n\t\tPassParameters->PageTableFeedbackId = InDesc.PageTableFeedbackId;\n\t\tPassParameters->RWQueueInfo = InVolatileResources.QueueInfoUAV;\n\t\tPassParameters->RWQueueBuffer = InVolatileResources.QueueBufferUAV;\n\t\tPassParameters->RWQuadBuffer = InVolatileResources.QuadBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InVolatileResources.IndirectArgsBufferUAV;\n\t\tPassParameters->RWFeedbackBuffer = InVolatileResources.FeedbackBufferUAV;\n\n\t\tGraphBuilder.AddPass(\n\t\t\t\tRDG_EVENT_NAME(\"InitBuffers\"),\n\t\t\t\tPassParameters,\n\t\t\t\tERDGPassFlags::Compute,\n\t\t\t\t[PassParameters, ComputeShader](FRHICommandList &RHICmdList)\n\t\t\t\t{\n\t\t\t\t\t// todo: If feedback parsing understands append counter we don't need to fully clear\n\t\t\t\t\tRHICmdList.ClearUAVUint(PassParameters->RWFeedbackBuffer->GetRHI(), FUintVector4(0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff));\n\n\t\t\t\t\tFComputeShaderUtils::Dispatch(RHICmdList, ComputeShader, *PassParameters, FIntVector(1, 1, 1));\n\t\t\t\t});\n\t}\n\n\t/** Collect potentially visible quads and determine their Lods. */\n\tvoid AddPass_CollectQuads(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FMainViewDesc const &InViewDesc)\n\t{\n\t\tTShaderMapRef<FCollectQuadsVHM_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFCollectQuadsVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FCollectQuadsVHM_CS::FParameters>();\n\t\tPassParameters->HeightMinMaxTexture = InDesc.HeightMinMaxTexture;\n\t\tPassParameters->LodBiasMinMaxTexture = InDesc.LodBiasMinMaxTexture;\n\t\tPassParameters->MinMaxTextureSampler = TStaticSamplerState<SF_Point>::GetRHI();\n\t\tPassParameters->MinMaxLevelOffset = InDesc.MinMaxLevelOffset;\n\t\tPassParameters->OcclusionTexture = InViewDesc.OcclusionTexture;\n\t\tPassParameters->OcclusionLevelOffset = InViewDesc.OcclusionLevelOffset;\n\t\tPassParameters->PageTableTexture = InDesc.PageTableTexture;\n\t\tPassParameters->MaxLevel = InDesc.MaxLevel;\n\t\tPassParameters->PageTableSize = FVector4f(InDesc.PageTableSize); // LWC_TODO: precision loss\n\t\tPassParameters->PageTableFeedbackId = InDesc.PageTableFeedbackId;\n\t\tPassParameters->UVToWorld = FMatrix44f(InDesc.UVToWorld); // LWC_TODO: Precision loss\n\t\tPassParameters->UVToWorldScale = (FVector3f)InDesc.UVToWorldScale;\n\t\tPassParameters->ViewOrigin = (FVector3f)InViewDesc.ViewOrigin;\n\t\tPassParameters->LodDistances = FVector4f(InViewDesc.LodDistances); // LWC_TODO: precision loss\n\t\tPassParameters->LodBiasScale = InViewDesc.LodBiasScale;\n\t\tfor (int32 PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t\t{\n\t\t\tPassParameters->FrustumPlanes[PlaneIndex] = FVector4f(InViewDesc.Planes[PlaneIndex]); // LWC_TODO: precision loss\n\t\t}\n\t\tPassParameters->QueueBufferSizeMask = InDesc.MaxPersistentQueueItems - 1; // Assumes MaxPersistentQueueItems is a power of 2 so that we can wrap with a mask.\n\t\tPassParameters->RWQueueInfo = InVolatileResources.QueueInfoUAV;\n\t\tPassParameters->RWQueueBuffer = InVolatileResources.QueueBufferUAV;\n\t\tPassParameters->RWQuadBuffer = InVolatileResources.QuadBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InVolatileResources.IndirectArgsBufferUAV;\n\t\tPassParameters->RWFeedbackBuffer = InVolatileResources.FeedbackBufferUAV;\n\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"CollectQuads\"),\n\t\t\t\tComputeShader, PassParameters, FIntVector(InDesc.NumCollectPassWavefronts, 1, 1));\n\t}\n\n\t/** Initialise the draw indirect buffer. */\n\tvoid AddPass_InitInstanceBuffer(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FDrawInstanceBuffers & InOutputResources)\n\t{\n\t\tTShaderMapRef<FInitInstanceBufferVHM_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFInitInstanceBufferVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FInitInstanceBufferVHM_CS::FParameters>();\n\t\tPassParameters->NumIndices = 3;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"InitInstanceBuffer\"),\n\t\t\t\tComputeShader, PassParameters, FIntVector(1, 1, 1));\n\t}\n\n\t/** Cull quads and write to the final output buffer. */\n\tvoid AddPass_CullInstances(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FDrawInstanceBuffers &InOutputResources, FChildViewDesc const &InViewDesc)\n\t{\n\t\tFCullInstancesVHM_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FCullInstancesVHM_CS::FParameters>();\n\t\t\n\t\tPassParameters->QuadBuffer = InVolatileResources.QuadBufferSRV;\n\t\tPassParameters->IndirectArgsBuffer = InVolatileResources.IndirectArgsBuffer;\n\t\tPassParameters->IndirectArgsBufferSRV = InVolatileResources.IndirectArgsBufferSRV;\n\t\tPassParameters->RWInstanceBuffer = InOutputResources.InstanceBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\n\t\tint32 IndirectArgOffset = ${NAME}Mesh::IndirectArgsByteOffset_FinalCull;\n\n\t\tFCullInstancesVHM_CS::FPermutationDomain PermutationVector;\n\t\tPermutationVector.Set<FCullInstancesVHM_CS::FReuseCullDim>(InViewDesc.bIsMainView);\n\n\t\tTShaderMapRef<FCullInstancesVHM_CS> ComputeShader(InGlobalShaderMap, PermutationVector);\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"CullInstances\"),\n\t\t\t\tComputeShader, PassParameters,\n\t\t\t\tInVolatileResources.IndirectArgsBuffer,\n\t\t\t\tIndirectArgOffset);\n\t}\n}\n\nvoid F${NAME}RendererExtension::SubmitWork(FRDGBuilder &GraphBuilder)\n{\n\t// Sort work so that we can batch by proxy/view\n\tWorkDescs.Sort(FWorkDescSort());\n\n\t// Add pass to transition all output buffers for writing\n\tTArray<int32, TInlineAllocator<8>> UsedBufferIndices;\n\tfor (FWorkDesc WorkdDesc : WorkDescs)\n\t{\n\t\tUsedBufferIndices.Add(WorkdDesc.BufferIndex);\n\t}\n\tAddPass_TransitionAllDrawBuffers(GraphBuilder, Buffers, UsedBufferIndices, true);\n\n\t// Add passes to initialize the output buffers\n\tfor (FWorkDesc WorkDesc : WorkDescs)\n\t{\n\t\tAddPass_InitInstanceBuffer(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), Buffers[WorkDesc.BufferIndex]);\n\t}\n\n\t// Iterate workloads and submit work\n\tconst int32 NumWorkItems = WorkDescs.Num();\n\tint32 WorkIndex = 0;\n\twhile (WorkIndex < NumWorkItems)\n\t{\n\t\t// Gather data per proxy\n\t\tF${NAME}SceneProxy const *Proxy = SceneProxies[WorkDescs[WorkIndex].ProxyIndex];\n\n\t\t${NAME}Mesh::FProxyDesc ProxyDesc;\n\n\t\t// 1 << CeilLogTwo takes a number and returns the next power of two. so: 53 -> 64, 80 -> 128, etc.\n\t\tProxyDesc.MaxPersistentQueueItems = 1 << FMath::CeilLogTwo(1024 * 4);\n\t\tProxyDesc.MaxRenderItems = 1024 * 4;\n\t\t// ProxyDesc.MaxFeedbackItems = CVarVHMMaxFeedbackItems.GetValueOnRenderThread();\n\t\tProxyDesc.NumCollectPassWavefronts = 16;\n\n\t\twhile (WorkIndex < NumWorkItems && SceneProxies[WorkDescs[WorkIndex].ProxyIndex] == Proxy)\n\t\t{\n\t\t\t// Gather data per main view\n\t\t\tFSceneView const *MainView = MainViews[WorkDescs[WorkIndex].MainViewIndex];\n\n\t\t\t${NAME}Mesh::FViewData MainViewData;\n\t\t\t${NAME}Mesh::GetViewData(MainView, MainViewData);\n\n\t\t\t${NAME}Mesh::FMainViewDesc MainViewDesc;\n\t\t\tMainViewDesc.ViewDebug = MainView;\n\n\t\t\t// ViewOrigin and Frustum Planes are all converted to UV space for the shader.\n\t\t\tMainViewDesc.ViewOrigin = MainViewData.ViewOrigin;\n\n\t\t\t// Build volatile graph resources\n\t\t\t${NAME}Mesh::FVolatileResources VolatileResources;\n\t\t\t${NAME}Mesh::InitializeResources(GraphBuilder, ProxyDesc, MainViewDesc, VolatileResources);\n\n\t\t\t// Build graph\n\t\t\t${NAME}Mesh::AddPass_InitBuffers(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources);\n\t\t\t${NAME}Mesh::AddPass_CollectQuads(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, MainViewDesc);\n\t\t\twhile (WorkIndex < NumWorkItems && MainViews[WorkDescs[WorkIndex].MainViewIndex] == MainView)\n\t\t\t{\n\t\t\t\t// Gather data per child view\n\t\t\t\tFSceneView const *CullView = CullViews[WorkDescs[WorkIndex].CullViewIndex];\n\t\t\t\tFConvexVolume const *ShadowFrustum = CullView->GetDynamicMeshElementsShadowCullFrustum();\n\t\t\t\tFConvexVolume const &Frustum = ShadowFrustum != nullptr && ShadowFrustum->Planes.Num() > 0 ? *ShadowFrustum : CullView->ViewFrustum;\n\t\t\t\tconst FVector PreShadowTranslation = ShadowFrustum != nullptr ? CullView->GetPreShadowTranslation() : FVector::ZeroVector;\n\n\t\t\t\t${NAME}Mesh::FChildViewDesc ChildViewDesc;\n\t\t\t\tChildViewDesc.ViewDebug = MainView;\n\t\t\t\tChildViewDesc.bIsMainView = CullView == MainView;\n\n\t\t\t\t// Build graph\n\t\t\t\t${NAME}Mesh::AddPass_CullInstances(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, Buffers[WorkDescs[WorkIndex].BufferIndex], ChildViewDesc);\n\n\t\t\t\tWorkIndex++;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add pass to transition all output buffers for reading\n\tAddPass_TransitionAllDrawBuffers(GraphBuilder, Buffers, UsedBufferIndices, false);\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]SceneProxy.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"PrimitiveSceneProxy.h\"\n#include \"Materials/MaterialRenderProxy.h\"\n\nnamespace ${NAME}Mesh\n{\n\t/** Buffers filled by GPU culling. */\n\tstruct FDrawInstanceBuffers\n\t{\n\t\t/* Culled instance buffer. */\n\t\tFBufferRHIRef InstanceBuffer;\n\t\tFUnorderedAccessViewRHIRef InstanceBufferUAV;\n\t\tFShaderResourceViewRHIRef InstanceBufferSRV;\n\n\t\t/* IndirectArgs buffer for final DrawInstancedIndirect. */\n\t\tFBufferRHIRef IndirectArgsBuffer;\n\t\tFUnorderedAccessViewRHIRef IndirectArgsBufferUAV;\n\t};\n}\n\nclass F${NAME}SceneProxy final : public FPrimitiveSceneProxy\n{\npublic:\n\tF${NAME}SceneProxy(class U${NAME}Component * InComponent);\n\nprotected:\n\t//~ Begin FPrimitiveSceneProxy Interface\n\tvirtual SIZE_T GetTypeHash() const override;\n\tvirtual uint32 GetMemoryFootprint() const override;\n\tvirtual void CreateRenderThreadResources() override;\n\tvirtual void DestroyRenderThreadResources() override;\n\tvirtual void OnTransformChanged() override;\n\t// virtual bool HasSubprimitiveOcclusionQueries() const override;\n\t// virtual const TArray<FBoxSphereBounds>* GetOcclusionQueries(const FSceneView* View) const override;\n\t// virtual void AcceptOcclusionResults(const FSceneView* View, TArray<bool>* Results, int32 ResultsStart, int32 NumResults) override;\n\tvirtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override;\n\tvirtual void GetDynamicMeshElements(const TArray<const FSceneView *> &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const override;\n\t//~ End FPrimitiveSceneProxy Interface\n\nprivate:\n\tvoid BuildOcclusionVolumes(TArrayView<FVector2D> const &InMinMaxData, FIntPoint const &InMinMaxSize, TArrayView<int32> const &InMinMaxMips, int32 InNumLods);\n\npublic:\n\tbool bHiddenInEditor;\n\n\tclass FMaterialRenderProxy *Material;\n\tFMaterialRelevance MaterialRelevance;\n\n\tbool bCallbackRegistered;\n\n\tclass F${NAME}VertexFactory *VertexFactory;\n};\n\n//  Notes: Looks like GetMeshShaderMap is returning nullptr during the DepthPass"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]VertexFactory.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"${NAME}VertexFactory.h\"\n\n#include \"Engine/Engine.h\"\n#include \"EngineGlobals.h\"\n#include \"Materials/Material.h\"\n#include \"MeshMaterialShader.h\"\n#include \"RHIStaticStates.h\"\n#include \"ShaderParameters.h\"\n#include \"DataDrivenShaderPlatformInfo.h\"\n#include \"MaterialDomain.h\"\n#include \"MeshDrawShaderBindings.h\"\n#include \"ShaderParameterUtils.h\"\n\nIMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT(F${NAME}Parameters, \"${NAME}Params\");\n\nnamespace F${NAME}Util\n{\n\ttemplate <typename T>\n\tFBufferRHIRef CreateIndexBuffer(FRHICommandListBase & RHICmdList)\n\t{\n\t\tTResourceArray<T, INDEXBUFFER_ALIGNMENT> Indices;\n\n\t\t// Allocate room for indices\n\t\tIndices.Reserve(3);\n\n\t\t// Top left\n\t\t// CCW triangle winding order\n\t\tIndices.Add(1);\n\t\tIndices.Add(0);\n\t\tIndices.Add(2);\n\n\t\tconst uint32 Size = Indices.GetResourceDataSize();\n\t\tconst uint32 Stride = sizeof(T);\n\n\t\t// Create index buffer. Fill buffer with initial data upon creation\n\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"${NAME}IndexBuffer\"), &Indices);\n\t\treturn RHICmdList.CreateIndexBuffer(Stride, Size, BUF_Static, CreateInfo);\n\t}\n}\n\nvoid F${NAME}IndexBuffer::InitRHI(FRHICommandListBase &RHICmdList)\n{\n\tIndexBufferRHI = F${NAME}Util::CreateIndexBuffer<uint16>(RHICmdList);\n}\n\n/**\n * Shader parameters for vertex factory.\n */\nclass F${NAME}ShaderParameters : public FVertexFactoryShaderParameters\n{\n\tDECLARE_TYPE_LAYOUT(F${NAME}ShaderParameters, NonVirtual);\n\npublic:\n\tvoid Bind(const FShaderParameterMap &ParameterMap)\n\t{\n\t\t// TODO\n\t\tInstanceBufferParameter.Bind(ParameterMap, TEXT(\"InstanceBuffer\"));\n\t\tLodViewOriginParameter.Bind(ParameterMap, TEXT(\"LodViewOrigin\"));\n\t\t// LodDistancesParameter.Bind(ParameterMap, TEXT(\"LodDistances\"));\n\t}\n\n\tvoid GetElementShaderBindings(\n\t\t\tconst class FSceneInterface *Scene,\n\t\t\tconst class FSceneView *View,\n\t\t\tconst class FMeshMaterialShader *Shader,\n\t\t\tconst EVertexInputStreamType InputStreamType,\n\t\t\tERHIFeatureLevel::Type FeatureLevel,\n\t\t\tconst class FVertexFactory *InVertexFactory,\n\t\t\tconst struct FMeshBatchElement &BatchElement,\n\t\t\tclass FMeshDrawSingleShaderBindings &ShaderBindings,\n\t\t\tFVertexInputStreamArray &VertexStreams) const\n\t{\n\t\tF${NAME}VertexFactory *VertexFactory = (F${NAME}VertexFactory *)InVertexFactory;\n\t\tShaderBindings.Add(Shader->GetUniformBufferParameter<F${NAME}Parameters>(), VertexFactory->UniformBuffer);\n\n\t\tF${NAME}UserData *UserData = (F${NAME}UserData *)BatchElement.UserData;\n\t\t// TODO\n\t\tShaderBindings.Add(InstanceBufferParameter, UserData->InstanceBufferSRV);\n\t\tShaderBindings.Add(LodViewOriginParameter, UserData->LodViewOrigin);\n\t\t// ShaderBindings.Add(LodDistancesParameter, UserData->LodDistances);\n\t}\n\nprotected:\n\t// TODO\n\tLAYOUT_FIELD(FShaderResourceParameter, InstanceBufferParameter);\n\tLAYOUT_FIELD(FShaderParameter, LodViewOriginParameter);\n\t// LAYOUT_FIELD(FShaderParameter, LodDistancesParameter);\n};\n\nIMPLEMENT_TYPE_LAYOUT(F${NAME}ShaderParameters);\n\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(F${NAME}VertexFactory, SF_Vertex, F${NAME}ShaderParameters);\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(F${NAME}VertexFactory, SF_Pixel, F${NAME}ShaderParameters);\n\nF${NAME}VertexFactory::F${NAME}VertexFactory(ERHIFeatureLevel::Type InFeatureLevel, const F${NAME}Parameters &InParams)\n\t\t: FVertexFactory(InFeatureLevel), Params(InParams)\n{\n\tIndexBuffer = new F${NAME}IndexBuffer();\n}\n\nF${NAME}VertexFactory::~F${NAME}VertexFactory()\n{\n\tdelete IndexBuffer;\n}\n\nvoid F${NAME}VertexFactory::InitRHI(FRHICommandListBase &RHICmdList)\n{\n\tUniformBuffer = F${NAME}BufferRef::CreateUniformBufferImmediate(Params, UniformBuffer_MultiFrame);\n\n\tIndexBuffer->InitResource(RHICmdList);\n\n\tFVertexStream NullVertexStream;\n\tNullVertexStream.VertexBuffer = nullptr;\n\tNullVertexStream.Stride = 0;\n\tNullVertexStream.Offset = 0;\n\tNullVertexStream.VertexStreamUsage = EVertexStreamUsage::ManualFetch;\n\n\tcheck(Streams.Num() == 0);\n\tStreams.Add(NullVertexStream);\n\n\tFVertexDeclarationElementList Elements;\n\n\tInitDeclaration(Elements);\n}\n\nvoid F${NAME}VertexFactory::ReleaseRHI()\n{\n\tUniformBuffer.SafeRelease();\n\n\tif (IndexBuffer)\n\t{\n\t\tIndexBuffer->ReleaseResource();\n\t}\n\n\tFVertexFactory::ReleaseRHI();\n}\n\nbool F${NAME}VertexFactory::ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters &Parameters)\n{\n\t// todo[vhm]: Fallback path for mobile.\n\tif (!IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5))\n\t{\n\t\treturn false;\n\t}\n\t// TODO\n\treturn (Parameters.MaterialParameters.MaterialDomain == MD_Surface && Parameters.MaterialParameters.bIsUsedWithVirtualHeightfieldMesh) || Parameters.MaterialParameters.bIsSpecialEngineMaterial;\n}\n\nvoid F${NAME}VertexFactory::ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment)\n{\n\t// TODO\n\t// OutEnvironment.SetDefine(TEXT(\"VF_VIRTUAL_HEIGHFIELD_MESH\"), 1);\n}\n\nvoid F${NAME}VertexFactory::ValidateCompiledResult(const FVertexFactoryType *Type, EShaderPlatform Platform, const FShaderParameterMap &ParameterMap, TArray<FString> &OutErrors)\n{\n}\n\n// TODO\nIMPLEMENT_VERTEX_FACTORY_TYPE(F${NAME}VertexFactory, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}VertexFactory.ush\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tEVertexFactoryFlags::UsedWithMaterials | EVertexFactoryFlags::SupportsDynamicLighting | EVertexFactoryFlags::SupportsPrimitiveIdStream);\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]VertexFactory.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Containers/DynamicRHIResourceArray.h\"\n#include \"RenderResource.h\"\n#include \"RHI.h\"\n#include \"SceneManagement.h\"\n#include \"UniformBuffer.h\"\n#include \"VertexFactory.h\"\n\n/**\n * Uniform buffer to hold parameters specific to this vertex factory. Only set up once.\n */\nBEGIN_GLOBAL_SHADER_PARAMETER_STRUCT(F${NAME}Parameters, )\n// SHADER_PARAMETER_TEXTURE(Texture2D<uint4>, PageTableTexture)\nEND_GLOBAL_SHADER_PARAMETER_STRUCT()\n\ntypedef TUniformBufferRef<F${NAME}Parameters> F${NAME}BufferRef;\n\n/**\n * Per frame UserData to pass to the vertex shader.\n */\nstruct F${NAME}UserData : public FOneFrameResource\n{\n\tFRHIShaderResourceView *InstanceBufferSRV;\n\tFVector3f LodViewOrigin;\n};\n\n/*\n * Index buffer to provide incides for the mesh we're rending.\n */\nclass F${NAME}IndexBuffer : public FIndexBuffer\n{\npublic:\n\tF${NAME}IndexBuffer()\n\t{\n\t}\n\n\tvirtual void InitRHI(FRHICommandListBase & RHICmdList) override;\n\n\tint32 GetIndexCount() const { return NumIndices; }\n\nprivate:\n\tint32 NumIndices = 0;\n};\n\nclass F${NAME}VertexFactory : public FVertexFactory\n{\n\tDECLARE_VERTEX_FACTORY_TYPE(F${NAME});\n\npublic:\n\tF${NAME}VertexFactory(ERHIFeatureLevel::Type InFeatureLevel, const F${NAME}Parameters &InParams);\n\n\t~F${NAME}VertexFactory();\n\n\tvirtual void InitRHI(FRHICommandListBase & RHICmdList) override;\n\tvirtual void ReleaseRHI() override;\n\n\tstatic bool ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters &Parameters);\n\tstatic void ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment);\n\tstatic void ValidateCompiledResult(const FVertexFactoryType *Type, EShaderPlatform Platform, const FShaderParameterMap &ParameterMap, TArray<FString> &OutErrors);\n\n\tFIndexBuffer const *GetIndexBuffer() const { return IndexBuffer; }\n\nprivate:\n\tF${NAME}Parameters Params;\n\tF${NAME}BufferRef UniformBuffer;\n\tF${NAME}IndexBuffer *IndexBuffer = nullptr;\n\n\t// Shader parameters is the data passed to our vertex shader\n\tfriend class F${NAME}ShaderParameters;\n};\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Public/[NAME]/$base[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## World\n\n1. Open the \"Add Actors\" panel and search for \"Example Indirect Instancing\"\n2. Drag and drop that actor into your world\n3. Enjoy, and get digging into the code\n\n## Notes\n\n-   Shadows are broken until UE 5.1. See: https://github.com/EpicGames/UnrealEngine/blob/d11782b9046e9d0b130309591e4efc57f4b8b037/Engine/Plugins/Experimental/VirtualHeightfieldMesh/Source/VirtualHeightfieldMesh/Private/VirtualHeightfieldMeshSceneProxy.cpp#L538\n-   The mesh will flicker as you move it.\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Public/[NAME]/[NAME]Actor.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"GameFramework/Actor.h\"\n#include \"${NAME}Actor.generated.h\"\n\nUCLASS(hidecategories = (Cooking, Input, LOD), MinimalAPI)\nclass A${NAME} : public AActor\n{\n\tGENERATED_UCLASS_BODY()\n\nprivate:\n\tUPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = \"true\"))\n\tclass U${NAME}Component* ${NAME}Component;\n\nprotected:\n};\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-indirect-drawing/Plugin/Source/[MODULE]/Public/[NAME]/[NAME]Component.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Components/PrimitiveComponent.h\"\n#include \"${NAME}Component.generated.h\"\n\nclass UMaterialInterface;\n\nUCLASS(Blueprintable, ClassGroup = Rendering, hideCategories = (Activation, Collision, Cooking, HLOD, Navigation, Object, Physics, VirtualTexture))\nclass ${SCOPE} U${NAME}Component : public UPrimitiveComponent\n{\n\tGENERATED_UCLASS_BODY()\n\nprotected:\n\t/** Material applied to each instance. */\n\tUPROPERTY(EditAnywhere, Category = Rendering)\n\tUMaterialInterface* Material = nullptr;\n\npublic:\n\n\tUMaterialInterface* GetMaterial() const { return Material; }\n\nprotected:\n\t//~ Begin UActorComponent Interface\n\tvirtual void OnRegister() override;\n\tvirtual void OnUnregister() override;\n\tvirtual void ApplyWorldOffset(const FVector& InOffset, bool bWorldShift) override;\n\t//~ End UActorComponent Interface\n\n\t//~ Begin USceneComponent Interface\n\tvirtual bool IsVisible() const override;\n\tvirtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;\n\t//~ EndUSceneComponent Interface\n\n\t//~ Begin UPrimitiveComponent Interface\n\tvirtual FPrimitiveSceneProxy* CreateSceneProxy() override;\n\tvirtual bool SupportsStaticLighting() const override { return true; }\n\tvirtual void SetMaterial(int32 ElementIndex, class UMaterialInterface* Material) override;\n\tvirtual UMaterialInterface* GetMaterial(int32 Index) const override { return Material; }\n\tvirtual void GetUsedMaterials(TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials = false) const override;\n\t//~ End UPrimitiveComponent Interface\n};\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Shaders/[MODULE]/Private/[NAME]/[NAME].ush",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n/** Structure used for tracking work queues in persistent wave style shaders. */\nstruct InstanceInfo\n{\n\tuint Num;\n};\n\n/** Item description used when traversing the virtual page table quad tree. Packs as uint so store in Buffer declared as uint. */\nstruct MeshItem\n{\n\tfloat3 Position;\n\tfloat3 Rotation;\n\tfloat3 Scale;\n};\n\nMeshItem InitMeshItem(float3 Pos, float3 Rot, float3 Scale)\n{\n\tMeshItem Item;\n\tItem.Position = Pos;\n\tItem.Rotation = Rot;\n\tItem.Scale = Scale;\n\treturn Item;\n}"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Shaders/[MODULE]/Private/[NAME]/[NAME]Compute.usf",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"/Engine/Private/Common.ush\"\n#include \"/Engine/Private/MortonCode.ush\"\n//#include \"/Engine/Private/ShaderPrintCommon.ush\"\n//#include \"/Engine/Private/ShaderDrawDebug.ush\"\n#include \"${NAME}.ush\"\n\ngroupshared uint NumGroupTasks;\ngloballycoherent RWStructuredBuffer<InstanceInfo> RWInstanceInfo;\n\nRWStructuredBuffer<MeshItem> RWBaseInstanceBuffer;\nStructuredBuffer<MeshItem> BaseInstanceBuffer;\n\nRWStructuredBuffer<MeshItem> RWMeshBuffer;\nStructuredBuffer<MeshItem> MeshBuffer;\n\nRWBuffer<uint> RWIndirectArgsBuffer;\nBuffer<uint> IndirectArgsBufferSRV;\n\nRWStructuredBuffer<MeshItem> RWInstanceBuffer;\nStructuredBuffer<MeshItem> InstanceBuffer;\n\nRWBuffer<uint> RWFeedbackBuffer;\n\nfloat4 FrustumPlanes[5];\nfloat4x4 UVToWorld;\nfloat3 UVToWorldScale;\n\nfloat Time;\n\nuint InstanceBufferSize;\nint NumIndices;\nuint NumToAdd;\nint Seed;\n\nfloat3 ViewOrigin;\n\nfloat random( float2 p )\n{\n    float2 r = float2(\n        23.14069263277926,\n         2.665144142690225\n    );\n    return frac( cos( dot(p,r) ) * 12345.6789 );\n}\n\n/** Return false if the AABB is completely outside one of the planes. */\nbool PlaneTestAABB(float4 InPlanes[5], float3 InCenter, float3 InExtent)\n{\n\tbool bPlaneTest = true;\n\t\n\t[unroll]\n\tfor (uint PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t{\n\t\tfloat3 PlaneSigns;\n\t\tPlaneSigns.x = InPlanes[PlaneIndex].x >= 0.f ? 1.f : -1.f;\n\t\tPlaneSigns.y = InPlanes[PlaneIndex].y >= 0.f ? 1.f : -1.f;\n\t\tPlaneSigns.z = InPlanes[PlaneIndex].z >= 0.f ? 1.f : -1.f;\n\n\t\tbool bInsidePlane = dot(InPlanes[PlaneIndex], float4(InCenter + InExtent * PlaneSigns, 1.0f)) > 0.f;\n\t\tbPlaneTest = bPlaneTest && bInsidePlane;\n\t}\n\n\treturn bPlaneTest;\n}\n\n/**\n * Compute shader to append instances to the persistent instance buffer.\n */\n[numthreads(64, 1, 1)]\nvoid AddInstancesCS(\n\tuint3 DispatchThreadId : SV_DispatchThreadID,\n\tuint GroupIndex : SV_GroupIndex )\n{\n\tif (DispatchThreadId.x >= NumToAdd) return;\n\n\tuint Write;\n\tInterlockedAdd(RWInstanceInfo[0].Num, 1, Write);\n\t\n\tfloat RandomX = random(float2(Write, Seed + 415));\n\tfloat RandomY = random(float2(Write, Seed - 1153));\n\tfloat RandomZ = random(float2(Write, Seed - 53));\n\n\tRWBaseInstanceBuffer[Write % InstanceBufferSize] = InitMeshItem(float3(RandomX, RandomY, RandomZ) * 1000.f, float3(0.f, 0.f, 0.f), float3(1.f, 1.f, 1.f));\n}\n\n\n/**\n * Compute shader to initialize all buffers.\n */\n[numthreads(1, 1, 1)]\nvoid InitBuffersCS()\n{\n\t// CullInstances indirect args\n\tuint NumberOfInstancesClamped = min(RWInstanceInfo[0].Num, InstanceBufferSize);\n\tRWIndirectArgsBuffer[0] = ((NumberOfInstancesClamped + 1) + 63) / 64;\n\tRWIndirectArgsBuffer[1] = 1;\n\tRWIndirectArgsBuffer[2] = 1;\n\tRWIndirectArgsBuffer[3] = NumberOfInstancesClamped;\n}\n\n/**\n * Initialise the indirect args for the final culled indirect draw call.\n */\n[numthreads(1, 1, 1)]\nvoid InitInstanceBufferCS()\n{\n\tRWIndirectArgsBuffer[0] = NumIndices;\n\tRWIndirectArgsBuffer[1] = 0; // Increment this counter during CullInstancesCS.\n\tRWIndirectArgsBuffer[2] = 0;\n\tRWIndirectArgsBuffer[3] = 0;\n\tRWIndirectArgsBuffer[4] = 0;\n}\n\n/**\n * Push instances away from the ViewOrigin.\n */\n[numthreads(64, 1, 1)]\nvoid PushInstancesCS( uint3 DispatchThreadId : SV_DispatchThreadID )\n{\n\tuint InstIndex = DispatchThreadId.x;\n\tif (InstIndex >= IndirectArgsBufferSRV[3])\n\t\treturn;\n\n\tMeshItem Item = RWBaseInstanceBuffer[InstIndex];\n\n\tif (length(Item.Position - ViewOrigin) > 700.f)\n\t\treturn;\n\n\tItem.Position += normalize(Item.Position - ViewOrigin) * 10.f;\n\n\tRWBaseInstanceBuffer[InstIndex] = Item;\n}\n\n/**\n * Cull the potentially visible render items for a view and generate the final buffer of instances to render.\n */\n[numthreads(64, 1, 1)]\nvoid CullInstancesCS( uint3 DispatchThreadId : SV_DispatchThreadID )\n{\n\tuint InstIndex = DispatchThreadId.x;\n\tif (InstIndex >= IndirectArgsBufferSRV[3])\n\t\treturn;\n\n\tMeshItem Item = BaseInstanceBuffer[InstIndex];\n\t\n\t// Check if the instance is inside the view frustum.\n\tif (PlaneTestAABB(FrustumPlanes, Item.Position, float3(100.f, 100.f, 100.f)))\n\t{\n\t\t// Add to final render intance list.\n\t\tuint Write;\n\t\tInterlockedAdd(RWIndirectArgsBuffer[1], 1, Write);\n\t\tRWInstanceBuffer[Write] = Item;\n\t}\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Shaders/[MODULE]/Private/[NAME]/[NAME]VertexFactory.ush",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin/Niagara Mesh VF\n\n#include \"/Engine/Private/VertexFactoryCommon.ush\"\n#include \"/Engine/Private/VirtualTextureCommon.ush\"\n#include \"${NAME}.ush\"\n\nStructuredBuffer<MeshItem> InstanceBuffer;\n\n#ifndef MANUAL_VERTEX_FETCH\n#define MANUAL_VERTEX_FETCH 0\n#endif\n\n#if MANUAL_VERTEX_FETCH\n\t#define VF_ColorIndexMask_Index 0\n\t#define VF_NumTexcoords_Index 1\n#endif // MANUAL_VERTEX_FETCH\n\nstruct FVertexFactoryInput\n{\n\tfloat4 Position \t: ATTRIBUTE0;\n\t\n#if !MANUAL_VERTEX_FETCH\n\thalf3\tTangentX\t: ATTRIBUTE1;\n\t// TangentZ.w contains sign of tangent basis determinant\n\thalf4\tTangentZ\t: ATTRIBUTE2;\n\thalf4\tVertexColor : ATTRIBUTE3;\n\n\t#if NUM_MATERIAL_TEXCOORDS_VERTEX\n\t\tfloat2\tTexCoords0 : ATTRIBUTE4;\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 1\n\t\t\tfloat2\tTexCoords1 : ATTRIBUTE5;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 2\n\t\t\tfloat2\tTexCoords2 : ATTRIBUTE6;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 3\n\t\t\tfloat2\tTexCoords3 : ATTRIBUTE7;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 4\n\t\t\tfloat2\tTexCoords4 : ATTRIBUTE8;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 5\n\t\t\tfloat2\tTexCoords5 : ATTRIBUTE9;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 6\n\t\t\tfloat2\tTexCoords6 : ATTRIBUTE10;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 7\n\t\t\tfloat2\tTexCoords7 : ATTRIBUTE11;\n\t\t#endif\n\t#endif // NUM_MATERIAL_TEXCOORDS_VERTEX\n#endif // !MANUAL_VERTEX_FETCH\n\n#if (VF_USE_PRIMITIVE_SCENE_DATA == 1)\n\tuint InstanceIdOffset : ATTRIBUTE13;\n#endif\n\n\tuint InstanceId : SV_InstanceID;\n\tuint VertexId : SV_VertexID;\n};\n\n\nstruct FVertexFactoryInterpolantsVSToPS\n{\n\tTANGENTTOWORLD_INTERPOLATOR_BLOCK\n#if NUM_TEX_COORD_INTERPOLATORS\n\tfloat4\tTexCoords[(NUM_TEX_COORD_INTERPOLATORS+1)/2]\t: TEXCOORD0;\n#endif\n\n#if INTERPOLATE_VERTEX_COLOR\n\tfloat4\tVertexColor : COLOR0;\n#endif\n\n#if (VF_USE_PRIMITIVE_SCENE_DATA == 1)\n\tnointerpolation uint PrimitiveId : PRIMITIVE_ID;\n#endif\n};\n\n/** Cached intermediates that would otherwise have to be computed multiple times. Avoids relying on the compiler to optimize out redundant operations. */\nstruct FVertexFactoryIntermediates\n{\n\tfloat3x3 TangentToLocal;\n\tfloat TangentDeterminant;\n\n\tFLWCMatrix LocalToWorld;\n\tFLWCInverseMatrix WorldToLocal;\n\tfloat3x3 LocalToWorldNoScale;\n\n\tfloat4 VertexColor;\n\n\t#if NUM_MATERIAL_TEXCOORDS_VERTEX\n\t\tfloat2\tTexCoords[NUM_MATERIAL_TEXCOORDS_VERTEX];\n\t#endif\n\n\t/** Cached primitive and instance data */\n\tFSceneDataIntermediates SceneData; \n};\n\nFPrimitiveSceneData GetPrimitiveData(FVertexFactoryIntermediates Intermediates)\n{\n\treturn Intermediates.SceneData.Primitive;\n}\n\nFLWCMatrix GetInstanceTransform(FVertexFactoryIntermediates Inters)\n{\n\treturn Inters.LocalToWorld;\n}\n\nFLWCInverseMatrix GetInstanceInvTransform(FVertexFactoryIntermediates Inters)\n{\n\treturn Inters.WorldToLocal;\n}\n\nfloat3x3 GetInstanceRotationNoScale(FVertexFactoryIntermediates Inters)\n{\n\treturn Inters.LocalToWorldNoScale;\n}\n\n/** Converts from vertex factory specific interpolants to a FMaterialPixelParameters, which is used by material inputs. */\nFMaterialPixelParameters GetMaterialPixelParameters(FVertexFactoryInterpolantsVSToPS Interpolants, float4 SvPosition)\n{\n\t// GetMaterialPixelParameters is responsible for fully initializing the result\n\tFMaterialPixelParameters Result = MakeInitializedMaterialPixelParameters();\n\n#if  NUM_TEX_COORD_INTERPOLATORS\n\tUNROLL\n\tfor (int CoordinateIndex = 0; CoordinateIndex * 2 + 1 < NUM_TEX_COORD_INTERPOLATORS; ++CoordinateIndex)\n\t{\n\t\tResult.TexCoords[CoordinateIndex * 2] = Interpolants.TexCoords[CoordinateIndex].xy;\n\t\tResult.TexCoords[CoordinateIndex * 2 + 1] = Interpolants.TexCoords[CoordinateIndex].wz;\n\t}\n\t#if NUM_TEX_COORD_INTERPOLATORS & 1\n\t\tResult.TexCoords[NUM_TEX_COORD_INTERPOLATORS - 1] = Interpolants.TexCoords[NUM_TEX_COORD_INTERPOLATORS / 2].xy;\n\t#endif // #if NUM_TEX_COORD_INTERPOLATORS & 1\n#endif\n\n\thalf3 TangentToWorld0 = Interpolants.TangentToWorld0.xyz;\n\thalf4 TangentToWorld2 = Interpolants.TangentToWorld2;\n\tResult.UnMirrored = TangentToWorld2.w;\n\n#if INTERPOLATE_VERTEX_COLOR\n\tResult.VertexColor = Interpolants.VertexColor;\n#else\n\tResult.VertexColor = 0;\n#endif\n\n\tResult.TangentToWorld = AssembleTangentToWorld( TangentToWorld0, TangentToWorld2 );\n\tResult.TwoSidedSign = 1;\n\n#if USE_WORLDVERTEXNORMAL_CENTER_INTERPOLATION\n\tResult.WorldVertexNormal_Center = Interpolants.TangentToWorld2_Center.xyz;\n#endif\n\n#if VF_USE_PRIMITIVE_SCENE_DATA\n\tResult.PrimitiveId = Interpolants.PrimitiveId;\n#endif\n\n\treturn Result;\n}\n\n/** Converts from vertex factory specific input to a FMaterialVertexParameters, which is used by vertex shader material inputs. */\nFMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 WorldPosition, float3x3 TangentToLocal)\n{\n\tFMaterialVertexParameters Result = (FMaterialVertexParameters)0;\n\tResult.SceneData = Intermediates.SceneData;\n\tResult.WorldPosition = WorldPosition;\n\tResult.VertexColor = Intermediates.VertexColor;\n\tResult.PreSkinnedPosition = Input.Position.xyz;\n\tResult.PreSkinnedNormal = Intermediates.TangentToLocal[2];\n\n\tResult.InstanceLocalToWorld = GetInstanceTransform(Intermediates);\n\tResult.InstanceWorldToLocal = GetInstanceInvTransform(Intermediates);\n\n\tResult.TangentToWorld = mul(TangentToLocal, GetInstanceRotationNoScale(Intermediates));\n\n#if NUM_MATERIAL_TEXCOORDS_VERTEX\n\tfor(int CoordinateIndex = 0; CoordinateIndex < NUM_MATERIAL_TEXCOORDS_VERTEX; CoordinateIndex++)\n\t{\n\t\tResult.TexCoords[CoordinateIndex] = Intermediates.TexCoords[CoordinateIndex];\n\t}\n#endif\n\n\treturn Result;\n}\n\nfloat3x3 CalculateTangentToLocal(FVertexFactoryInput Input, out float TangentDeterminant)\n{\n\tfloat3x3 Result=0;\n#if MANUAL_VERTEX_FETCH\n\tfloat3 TangentX = ${NAME}MeshVF.VertexFetch_PackedTangentsBuffer[2 * Input.VertexId + 0].xyz;\n\tfloat4 TangentZ = ${NAME}MeshVF.VertexFetch_PackedTangentsBuffer[2 * Input.VertexId + 1].xyzw;\n#else\n\tfloat3 TangentX = TangentBias(Input.TangentX);\n\tfloat4 TangentZ = TangentBias(Input.TangentZ);\n#endif // MANUAL_VERTEX_FETCH\n\n\t// pass-thru the tangent\n\tResult[0] = TangentX;\n\t// pass-thru the normal\n\tResult[2] = TangentZ.xyz;\n\n\t// derive the binormal by getting the cross product of the normal and tangent\n\tResult[1] = cross(Result[2], Result[0]) * TangentZ.w;\n\t// Recalculate TangentX off of the other two vectors\n\t// This corrects quantization error since TangentX was passed in as a quantized vertex input\n\t// The error shows up most in specular off of a mesh with a smoothed UV seam (normal is smooth, but tangents vary across the seam)\n\tResult[0] = cross(Result[1], Result[2]) * TangentZ.w;\n\n\tTangentDeterminant = TangentZ.w;\n\n\treturn Result;\n}\n\nFVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput Input)\n{\n\tFVertexFactoryIntermediates Intermediates = (FVertexFactoryIntermediates)0;\n\n#if (VF_USE_PRIMITIVE_SCENE_DATA == 1)\n\tIntermediates.SceneData = GetSceneDataIntermediates(Input.InstanceIdOffset, 0);\n#else\n\tIntermediates.SceneData = GetSceneDataIntermediates();\n#endif // (VF_USE_PRIMITIVE_SCENE_DATA == 1)\n\n\t// Compute transforms\n#if (VF_USE_PRIMITIVE_SCENE_DATA == 1)\n\tIntermediates.LocalToWorld = Intermediates.SceneData.InstanceData.LocalToWorld;\n\tIntermediates.WorldToLocal = Intermediates.SceneData.InstanceData.WorldToLocal;\n\n\tconst float3 InstInvScale = Intermediates.SceneData.InstanceData.InvNonUniformScale;\n\tIntermediates.LocalToWorldNoScale = LWCToFloat3x3(Intermediates.LocalToWorld);\n\tIntermediates.LocalToWorldNoScale[0] *= InstInvScale.x;\n\tIntermediates.LocalToWorldNoScale[1] *= InstInvScale.y;\n\tIntermediates.LocalToWorldNoScale[2] *= InstInvScale.z;\n#else\n\tIntermediates.LocalToWorld \t\t\t\t= Intermediates.SceneData.Primitive.LocalToWorld;\n\tIntermediates.WorldToLocal \t\t\t\t= Intermediates.SceneData.Primitive.WorldToLocal;\n\tIntermediates.LocalToWorldNoScale\t\t= Intermediates.SceneData.Primitive.InvNonUniformScale;\n#endif // (VF_USE_PRIMITIVE_SCENE_DATA == 1)\n\n#if NUM_MATERIAL_TEXCOORDS_VERTEX\n\t#if MANUAL_VERTEX_FETCH\n\t\tconst uint NumFetchTexCoords = ${NAME}MeshVF.VertexFetch_Parameters[VF_NumTexcoords_Index];\n\t\tUNROLL\n\t\tfor (uint CoordinateIndex = 0; CoordinateIndex < NUM_MATERIAL_TEXCOORDS_VERTEX; CoordinateIndex++)\n\t\t{\n\t\t\t// Clamp coordinates to mesh's maximum as materials can request more than are available\n\t\t\tuint ClampedCoordinateIndex = min(CoordinateIndex, NumFetchTexCoords-1);\n\t\t\tIntermediates.TexCoords[CoordinateIndex] = ${NAME}MeshVF.VertexFetch_TexCoordBuffer[NumFetchTexCoords * Input.VertexId + ClampedCoordinateIndex];\n\t\t}\n\t#else\n\t\tIntermediates.TexCoords[0] = Input.TexCoords0;\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 1\n\t\t\tIntermediates.TexCoords[1] = Input.TexCoords1;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 2\n\t\t\tIntermediates.TexCoords[2] = Input.TexCoords2;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 3\n\t\t\tIntermediates.TexCoords[3] = Input.TexCoords3;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 4\n\t\t\tIntermediates.TexCoords[4] = Input.TexCoords4;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 5\n\t\t\tIntermediates.TexCoords[5] = Input.TexCoords5;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 6\n\t\t\tIntermediates.TexCoords[6] = Input.TexCoords6;\n\t\t#endif\n\t\t#if NUM_MATERIAL_TEXCOORDS_VERTEX > 7\n\t\t\tIntermediates.TexCoords[7] = Input.TexCoords7;\n\t\t#endif\n\t#endif // MANUAL_VERTEX_FETCH\n#endif // NUM_MATERIAL_TEXCOORDS_VERTEX\n\n#if MANUAL_VERTEX_FETCH\n\tIntermediates.VertexColor = ${NAME}MeshVF.VertexFetch_ColorComponentsBuffer[Input.VertexId & ${NAME}MeshVF.VertexFetch_Parameters[VF_ColorIndexMask_Index]] FMANUALFETCH_COLOR_COMPONENT_SWIZZLE; // Swizzle vertex color.\n#else\n\t// Swizzle vertex color.\n\tIntermediates.VertexColor = Input.VertexColor FCOLOR_COMPONENT_SWIZZLE;\n#endif // MANUAL_VERTEX_FETCH\n\n\tIntermediates.TangentToLocal = CalculateTangentToLocal(Input, Intermediates.TangentDeterminant);\n\n\treturn Intermediates;\n}\n\n/**\n* Get the 3x3 tangent basis vectors for this vertex factory\n* this vertex factory will calculate the binormal on-the-fly\n*\n* @param Input - vertex input stream structure\n* @return 3x3 matrix\n*/\nfloat3x3 VertexFactoryGetTangentToLocal( FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates )\n{\n\treturn Intermediates.TangentToLocal;\n}\n\n// @return translated world position\nfloat4 VertexFactoryGetWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\tFLWCMatrix Transform = GetInstanceTransform(Intermediates);\n\tfloat3 WorldPosition = LWCToFloat(LWCAdd(LWCMultiply(Input.Position.xyz, Transform), ResolvedView.PreViewTranslation));\n\n\tMeshItem Item = InstanceBuffer[Input.InstanceId];\n\n\tWorldPosition += Item.Position;\n\n\treturn float4(WorldPosition, Input.Position.w);\n}\n\nfloat4 VertexFactoryGetRasterizedWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float4 InWorldPosition)\n{\n\treturn InWorldPosition;\n}\n\nfloat3 VertexFactoryGetWorldNormal(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\treturn LWCToFloat3x3(Intermediates.LocalToWorld)[2].xyz;\n}\n\nfloat3 VertexFactoryGetPositionForVertexLighting(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 TranslatedWorldPosition)\n{\n\treturn TranslatedWorldPosition;\n}\n\nvoid CalcTangentToWorld(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, out float3 TangentToWorld0, out float4 TangentToWorld2)\n{\n\tconst float3x3 TangentToLocal = VertexFactoryGetTangentToLocal(Input, Intermediates);\n\n\tconst float3x3 TransformNoScale = GetInstanceRotationNoScale(Intermediates);\n\tconst float3x3 TangentToWorld = mul(TangentToLocal, TransformNoScale);\n\tconst float DetSign = Intermediates.SceneData.InstanceData.DeterminantSign;\n\n\tTangentToWorld0 = normalize(TangentToWorld[0]);\n\tTangentToWorld2 = float4(normalize(TangentToWorld[2]), TangentBias(Intermediates.TangentDeterminant) * DetSign);\n}\n\nFVertexFactoryInterpolantsVSToPS VertexFactoryGetInterpolantsVSToPS(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, FMaterialVertexParameters VertexParameters)\n{\n\tFVertexFactoryInterpolantsVSToPS Interpolants;\n\n#if  NUM_TEX_COORD_INTERPOLATORS\n\t// Ensure the unused components of the last packed texture coordinate are initialized.\n\tInterpolants.TexCoords[( NUM_TEX_COORD_INTERPOLATORS + 1) / 2 - 1] = 0;\n\n\tfloat2 CustomizedUVs[ NUM_TEX_COORD_INTERPOLATORS];\n\tGetMaterialCustomizedUVs(VertexParameters, CustomizedUVs);\n\tGetCustomInterpolators(VertexParameters, CustomizedUVs);\n\n\tUNROLL\n\tfor (int CoordinateIndex = 0; CoordinateIndex * 2 + 1 < NUM_TEX_COORD_INTERPOLATORS; ++CoordinateIndex)\n\t{\n\t\tInterpolants.TexCoords[CoordinateIndex].xy = CustomizedUVs[CoordinateIndex * 2];\n\t\tInterpolants.TexCoords[CoordinateIndex].wz = CustomizedUVs[CoordinateIndex * 2 + 1];\n\t}\n\t#if NUM_TEX_COORD_INTERPOLATORS & 1\n\t\tInterpolants.TexCoords[NUM_TEX_COORD_INTERPOLATORS / 2].xy = CustomizedUVs[NUM_TEX_COORD_INTERPOLATORS - 1];\n\t#endif // #if NUM_TEX_COORD_INTERPOLATORS & 1\n#endif\n\n\n\tInterpolants.TangentToWorld0.w = 0;\n\tCalcTangentToWorld(Input, Intermediates, Interpolants.TangentToWorld0.xyz, Interpolants.TangentToWorld2);\n#if USE_WORLDVERTEXNORMAL_CENTER_INTERPOLATION\n\tInterpolants.TangentToWorld2_Center = Interpolants.TangentToWorld2;\n#endif\n\n#if INTERPOLATE_VERTEX_COLOR\n\tInterpolants.VertexColor = Intermediates.VertexColor;\n#endif\n\n#if INSTANCED_STEREO\n\tInterpolants.EyeIndex = 0;\n#endif\n\n#if VF_USE_PRIMITIVE_SCENE_DATA\n\tInterpolants.PrimitiveId = Intermediates.SceneData.PrimitiveId;\n#endif\n\n\treturn Interpolants;\n}\n\nfloat4 VertexFactoryGetPreviousWorldPosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n    FLWCMatrix Transform = GetInstanceTransform(Intermediates);\n    float3 WorldPosition = LWCToFloat(LWCAdd(LWCMultiply(Input.Position.xyz, Transform), ResolvedView.PreViewTranslation));\n    return float4(WorldPosition, Input.Position.w);\n}\n\nfloat4 VertexFactoryGetInstanceHitProxyId(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates)\n{\n\t\tfloat R = 0;\n\t\tfloat G = 0;\n\t\tfloat B = 0;\n\n\treturn float4(R/255.0, G/255.0, B/255.0, 0);\n}\n\nuint VertexFactoryGetPrimitiveId(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n#if VF_USE_PRIMITIVE_SCENE_DATA\n\treturn Interpolants.PrimitiveId;\n#else\n    return 0;\n#endif\n}\n\nfloat4 VertexFactoryGetTranslatedPrimitiveVolumeBounds(FVertexFactoryInterpolantsVSToPS Interpolants)\n{\n\treturn float4(0,0,0,0);\n}\n\n#if NEEDS_VERTEX_FACTORY_INTERPOLATION || RAYHITGROUPSHADER\n\tstruct FVertexFactoryRayTracingInterpolants\n\t{\n\t\tFVertexFactoryInterpolantsVSToPS InterpolantsVSToPS;\n\t};\n\n\tfloat2 VertexFactoryGetRayTracingTextureCoordinate( FVertexFactoryRayTracingInterpolants Interpolants )\n\t{\n\t#if NUM_TEX_COORD_INTERPOLATORS\n\t\treturn Interpolants.InterpolantsVSToPS.TexCoords[0].xy;\n\t#else\n\t\treturn float2(0,0);\n\t#endif\n\t}\n\n\tFVertexFactoryInterpolantsVSToPS VertexFactoryAssignInterpolants(FVertexFactoryRayTracingInterpolants Input)\n\t{\n\t\treturn Input.InterpolantsVSToPS;\n\t}\n\n\tFVertexFactoryRayTracingInterpolants VertexFactoryGetRayTracingInterpolants(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, FMaterialVertexParameters VertexParameters)\n\t{\n\t\tFVertexFactoryRayTracingInterpolants Interpolants;\n\t\tInterpolants.InterpolantsVSToPS = VertexFactoryGetInterpolantsVSToPS(Input, Intermediates, VertexParameters);\n\t\treturn Interpolants;\n\t}\n\n\tFVertexFactoryRayTracingInterpolants VertexFactoryInterpolate(FVertexFactoryRayTracingInterpolants a, float aInterp, FVertexFactoryRayTracingInterpolants b, float bInterp)\n\t{\n\t\tFVertexFactoryRayTracingInterpolants O;\n\n\t\t// Do we really need to interpolate TangentToWorld2 here? It should be replaced by the\n\t\t// interpolated normal from 'whatever' interpolation scheme we're using\n\n\t\tINTERPOLATE_MEMBER(InterpolantsVSToPS.TangentToWorld0.xyz);\n\t\tINTERPOLATE_MEMBER(InterpolantsVSToPS.TangentToWorld2);\n#if INTERPOLATE_VERTEX_COLOR\n\t\tINTERPOLATE_MEMBER(InterpolantsVSToPS.VertexColor);\n#endif\n\n#if NUM_TEX_COORD_INTERPOLATORS\n\t\tfor (int i = 0; i < ( NUM_TEX_COORD_INTERPOLATORS + 1) / 2; ++i)\n\t\t{\n\t\t\tINTERPOLATE_MEMBER(InterpolantsVSToPS.TexCoords[i]);\n\t\t}\n#endif\n\n#if VF_USE_PRIMITIVE_SCENE_DATA\n\t\tO.InterpolantsVSToPS.PrimitiveId = a.InterpolantsVSToPS.PrimitiveId;\n#endif\n\n\t\treturn O;\n\t}\n#endif // #if NEEDS_VERTEX_FACTORY_INTERPOLATION\n\n// RHI_RAYTRACING\n#if RAYHITGROUPSHADER\n\tFVertexFactoryInput LoadVertexFactoryInputForHGS(uint TriangleIndex, int VertexIndex)\n\t{\n\t\tFVertexFactoryInput Input = (FVertexFactoryInput) 0;\n\n\t\tFTriangleBaseAttributes Tri = LoadTriangleBaseAttributes(TriangleIndex);\n\t\tuint VertexId = Tri.Indices[VertexIndex];\n\t\t\n\t\tInput.InstanceId = InstanceIndex() - GetBaseInstanceIndex();\n\n\t\t// Fill FVertexFactoryInput with dummy values, the real ones will be fetched later from ${NAME}MeshVF using InstanceId  \n\t\tInput.Position = float4(Tri.LocalPositions[VertexIndex], 1.0f);\n\n#if PASS_NEEDS_VERTEX_ID || MANUAL_VERTEX_FETCH\n\t\tInput.VertexId = VertexId;\n#endif // #if PASS_NEEDS_VERTEX_ID\n\n#if VF_USE_PRIMITIVE_SCENE_DATA\n\t\t// Note: GetInstanceUserData() stores the GPU-Scene primitive ID\n\t\tint PrimitiveId = GetInstanceUserData();\n\t\tInput.InstanceIdOffset = PrimitiveId | VF_TREAT_INSTANCE_ID_OFFSET_AS_PRIMITIVE_ID_FLAG;\n#endif\n\n\t\treturn Input;\n\t}\n#endif // #if COMPUTESHADER || RAYHITGROUPSHADER\n\n#include \"/Engine/Private/VertexFactoryDefaultInterface.ush\"\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]Actor.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Actor.h\"\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Component.h\"\n\nA${NAME}::A${NAME}(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\tRootComponent = ${NAME}Component = CreateDefaultSubobject<U${NAME}Component>(TEXT(\"${NAME}Component\"));\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]Component.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Component.h\"\n\n#include \"Engine/World.h\"\n#include \"${NAME}SceneProxy.h\"\n\nU${NAME}Component::U${NAME}Component(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\tCastShadow = true;\n\tbCastContactShadow = false;\n\tbUseAsOccluder = true;\n\tbAffectDynamicIndirectLighting = false;\n\tbAffectDistanceFieldLighting = false;\n\tbNeverDistanceCull = true;\n#if WITH_EDITORONLY_DATA\n\tbEnableAutoLODGeneration = false;\n#endif\n\tMobility = EComponentMobility::Static;\n}\n\nvoid U${NAME}Component::OnRegister()\n{\n\tSuper::OnRegister();\n}\n\nvoid U${NAME}Component::OnUnregister()\n{\n\tSuper::OnUnregister();\n}\n\nvoid U${NAME}Component::ApplyWorldOffset(const FVector& InOffset, bool bWorldShift)\n{\n\tSuper::ApplyWorldOffset(InOffset, bWorldShift);\n\tMarkRenderStateDirty();\n}\n\nbool U${NAME}Component::IsVisible() const\n{\n\treturn Super::IsVisible();\n}\n\nFBoxSphereBounds U${NAME}Component::CalcBounds(const FTransform& LocalToWorld) const\n{\n\treturn FBoxSphereBounds(FBox(FVector(0.f, 0.f, 0.f), FVector(10000.f))).TransformBy(LocalToWorld);\n}\n\nvoid U${NAME}Component::AddInstances()\n {\n\tif (SceneProxy) {\n\t\t((F${NAME}SceneProxy*) SceneProxy)->AddInstancesNextFrame = true;\n\t}\n}\n\nFPrimitiveSceneProxy* U${NAME}Component::CreateSceneProxy()\n{\n\treturn new F${NAME}SceneProxy(this);\n}\n\nvoid U${NAME}Component::SetMaterial(int32 InElementIndex, UMaterialInterface* InMaterial)\n{\n\tif (InElementIndex == 0 && Material != InMaterial)\n\t{\n\t\tMaterial = InMaterial;\n\t\tMarkRenderStateDirty();\n\t}\n}\n\nvoid U${NAME}Component::GetUsedMaterials(TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials) const\n{\n\tif (Material != nullptr)\n\t{\n\t\tOutMaterials.Add(Material);\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]SceneProxy.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"${NAME}SceneProxy.h\"\n\n#include \"CommonRenderResources.h\"\n#include \"EngineModule.h\"\n#include \"Engine/Engine.h\"\n#include \"GlobalShader.h\"\n#include \"HAL/IConsoleManager.h\"\n#include \"MaterialDomain.h\"\n#include \"Materials/Material.h\"\n#include \"RenderGraphBuilder.h\"\n#include \"RenderGraphUtils.h\"\n#include \"RenderUtils.h\"\n#include \"PrimitiveSceneInfo.h\"\n#include \"DataDrivenShaderPlatformInfo.h\"\n#include \"${MODULE_NAME}/Public/${NAME}/${NAME}Component.h\"\n#include \"${NAME}VertexFactory.h\"\n\n// This is the max number of instances that can be stored and rendered, attempting to add instances past this will overwrite the oldest instance\n#define MAX_INSTANCES 1024\n\nDECLARE_STATS_GROUP(TEXT(\"${NAME}Mesh\"), STATGROUP_${NAME}Mesh, STATCAT_Advanced);\nDECLARE_CYCLE_STAT(TEXT(\"${NAME}Mesh SubmitWork\"), STAT_${NAME}Mesh_SubmitWork, STATGROUP_${NAME}Mesh);\n\nnamespace ${NAME}Mesh\n{\n\t/** Initialize the FDrawInstanceBuffers objects. */\n\tvoid InitializeInstanceBuffers(FRHICommandListImmediate & InRHICmdList, FDrawInstanceBuffers & InBuffers);\n\n\t/** Release the FDrawInstanceBuffers objects. */\n\tvoid ReleaseInstanceBuffers(FDrawInstanceBuffers & InBuffers)\n\t{\n\t\tInBuffers.InstanceBuffer.SafeRelease();\n\t\tInBuffers.InstanceBufferUAV.SafeRelease();\n\t\tInBuffers.InstanceBufferSRV.SafeRelease();\n\t\tInBuffers.IndirectArgsBuffer.SafeRelease();\n\t\tInBuffers.IndirectArgsBufferUAV.SafeRelease();\n\t}\n}\n\n/** Renderer extension to manage the buffer pool and add hooks for GPU culling passes. */\nclass F${NAME}RendererExtension : public FRenderResource\n{\npublic:\n\tF${NAME}RendererExtension()\n\t\t\t: bInFrame(false), DiscardId(0)\n\t{\n\t}\n\n\tvirtual ~F${NAME}RendererExtension()\n\t{\n\t}\n\n\tbool IsInFrame() { return bInFrame; }\n\n\t/** Call once to register this extension. */\n\tvoid RegisterExtension();\n\n\t/** Call once per frame for each mesh/view that has relevance. This allocates the buffers to use for the frame and adds the work to fill the buffers to the queue. */\n\t${NAME}Mesh::FDrawInstanceBuffers &AddWork(F${NAME}SceneProxy const *InProxy, FSceneView const *InMainView, FSceneView const *InCullView);\n\t/** Submit all the work added by AddWork(). The work fills all of the buffers ready for use by the referencing mesh batches. */\n\tvoid SubmitWork(FRDGBuilder & GraphBuilder);\n\nprotected:\n\t//~ Begin FRenderResource Interface\n\tvirtual void ReleaseRHI() override;\n\t//~ End FRenderResource Interface\n\nprivate:\n\t/** Called by renderer at start of render frame. */\n\tvoid BeginFrame(FRDGBuilder & GraphBuilder);\n\t/** Called by renderer at end of render frame. */\n\tvoid EndFrame(FRDGBuilder & GraphBuilder);\n\tvoid EndFrame();\n\n\t/** Flag for frame validation. */\n\tbool bInFrame;\n\n\t/** Buffers to fill. Resources can persist between frames to reduce allocation cost, but contents don't persist. */\n\tTArray<${NAME}Mesh::FDrawInstanceBuffers> Buffers;\n\t/** Per buffer frame time stamp of last usage. */\n\tTArray<uint32> DiscardIds;\n\t/** Current frame time stamp. */\n\tuint32 DiscardId;\n\n\t/** Arrary of unique scene proxies to render this frame. */\n\tTArray<F${NAME}SceneProxy const *> SceneProxies;\n\t/** Arrary of unique main views to render this frame. */\n\tTArray<FSceneView const *> MainViews;\n\t/** Arrary of unique culling views to render this frame. */\n\tTArray<FSceneView const *> CullViews;\n\n\t/** Key for each buffer we need to generate. */\n\tstruct FWorkDesc\n\t{\n\t\tint32 ProxyIndex;\n\t\tint32 MainViewIndex;\n\t\tint32 CullViewIndex;\n\t\tint32 BufferIndex;\n\t};\n\n\t/** Keys specifying what to render. */\n\tTArray<FWorkDesc> WorkDescs;\n\n\t/** Sort predicate for FWorkDesc. When rendering we want to batch work by proxy, then by main view. */\n\tstruct FWorkDescSort\n\t{\n\t\tuint32 SortKey(FWorkDesc const &WorkDesc) const\n\t\t{\n\t\t\treturn (WorkDesc.ProxyIndex << 24) | (WorkDesc.MainViewIndex << 16) | (WorkDesc.CullViewIndex << 8) | WorkDesc.BufferIndex;\n\t\t}\n\n\t\tbool operator()(FWorkDesc const &A, FWorkDesc const &B) const\n\t\t{\n\t\t\treturn SortKey(A) < SortKey(B);\n\t\t}\n\t};\n};\n\n/** Single global instance of the VirtualHeightfieldMesh renderer extension. */\nTGlobalResource<F${NAME}RendererExtension> ${NAME}RendererExtension;\n\nvoid F${NAME}RendererExtension::RegisterExtension()\n{\n\tstatic bool bInit = false;\n\tif (!bInit)\n\t{\n\t\tGEngine->GetPreRenderDelegateEx().AddRaw(this, &F${NAME}RendererExtension::BeginFrame);\n\t\tGEngine->GetPostRenderDelegateEx().AddRaw(this, &F${NAME}RendererExtension::EndFrame);\n\t\tbInit = true;\n\t}\n}\n\nvoid F${NAME}RendererExtension::ReleaseRHI()\n{\n\tBuffers.Empty();\n}\n\n${NAME}Mesh::FDrawInstanceBuffers &F${NAME}RendererExtension::AddWork(F${NAME}SceneProxy const *InProxy, FSceneView const *InMainView, FSceneView const *InCullView)\n{\n\t// If we hit this then BeginFrame()/EndFrame() logic needs fixing in the Scene Renderer.\n\tif (!ensure(!bInFrame))\n\t{\n\t\tEndFrame();\n\t}\n\n\t// Create workload\n\tFWorkDesc WorkDesc;\n\tWorkDesc.ProxyIndex = SceneProxies.AddUnique(InProxy);\n\tWorkDesc.MainViewIndex = MainViews.AddUnique(InMainView);\n\tWorkDesc.CullViewIndex = CullViews.AddUnique(InCullView);\n\tWorkDesc.BufferIndex = -1;\n\n\t// Check for an existing duplicate\n\tfor (FWorkDesc &It : WorkDescs)\n\t{\n\t\tif (It.ProxyIndex == WorkDesc.ProxyIndex && It.MainViewIndex == WorkDesc.MainViewIndex && It.CullViewIndex == WorkDesc.CullViewIndex && It.BufferIndex != -1)\n\t\t{\n\t\t\tWorkDesc.BufferIndex = It.BufferIndex;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Try to recycle a buffer\n\tif (WorkDesc.BufferIndex == -1)\n\t{\n\t\tfor (int32 BufferIndex = 0; BufferIndex < Buffers.Num(); BufferIndex++)\n\t\t{\n\t\t\tif (DiscardIds[BufferIndex] < DiscardId)\n\t\t\t{\n\t\t\t\tDiscardIds[BufferIndex] = DiscardId;\n\t\t\t\tWorkDesc.BufferIndex = BufferIndex;\n\t\t\t\tWorkDescs.Add(WorkDesc);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allocate new buffer if necessary\n\tif (WorkDesc.BufferIndex == -1)\n\t{\n\t\tDiscardIds.Add(DiscardId);\n\t\tWorkDesc.BufferIndex = Buffers.AddDefaulted();\n\t\tWorkDescs.Add(WorkDesc);\n\t\t${NAME}Mesh::InitializeInstanceBuffers(GetImmediateCommandList_ForRenderCommand(), Buffers[WorkDesc.BufferIndex]);\n\t}\n\n\treturn Buffers[WorkDesc.BufferIndex];\n}\n\nvoid F${NAME}RendererExtension::BeginFrame(FRDGBuilder &GraphBuilder)\n{\n\t// If we hit this then BeginFrame()/EndFrame() logic needs fixing in the Scene Renderer.\n\tif (!ensure(!bInFrame))\n\t{\n\t\tEndFrame();\n\t}\n\tbInFrame = true;\n\n\tif (WorkDescs.Num() > 0)\n\t{\n\t\tSubmitWork(GraphBuilder);\n\t}\n}\n\nvoid F${NAME}RendererExtension::EndFrame()\n{\n\tensure(bInFrame);\n\tbInFrame = false;\n\n\tSceneProxies.Reset();\n\tMainViews.Reset();\n\tCullViews.Reset();\n\tWorkDescs.Reset();\n\n\t// Clean the buffer pool\n\tDiscardId++;\n\n\tfor (int32 Index = 0; Index < DiscardIds.Num();)\n\t{\n\t\tif (DiscardId - DiscardIds[Index] > 4u)\n\t\t{\n\t\t\t${NAME}Mesh::ReleaseInstanceBuffers(Buffers[Index]);\n\t\t\tBuffers.RemoveAtSwap(Index);\n\t\t\tDiscardIds.RemoveAtSwap(Index);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t++Index;\n\t\t}\n\t}\n}\n\nvoid F${NAME}RendererExtension::EndFrame(FRDGBuilder &GraphBuilder)\n{\n\tEndFrame();\n}\n\nconst static FName NAME_${NAME}(TEXT(\"${NAME}\"));\n\nF${NAME}SceneProxy::F${NAME}SceneProxy(U${NAME}Component *InComponent)\n\t\t: FPrimitiveSceneProxy(InComponent, NAME_${NAME}), VertexFactory(nullptr), AddInstancesNextFrame(true)\n{\n\tbIsMeshValid = true;\n\n\t${NAME}RendererExtension.RegisterExtension();\n\n\tif (!IsValid(InComponent->GetStaticMesh()))\n\t{\n\t\tbIsMeshValid = false;\n\t\treturn;\n\t}\n\n\t// They have some LOD, but considered static as the LODs (are intended to) represent the same static surface.\n\t// TODO Check if this allows WPO\n\tbHasDeformableMesh = false;\n\n\tLODIndex = InComponent->LODIndex;\n\n\tUMaterialInterface *ComponentMaterial = InComponent->GetMaterial();\n\tLocalStaticMesh = InComponent->GetStaticMesh();\n\n\tRenderData = LocalStaticMesh->GetRenderData();\n\n\tif (!(RenderData && RenderData->LODResources.Num() > 0))\n\t{\n\t\tRenderData = nullptr;\n\t\tbIsMeshValid = false;\n\t\treturn;\n\t}\n\n\t// TODO MATUSAGE\n\tconst bool bValidMaterial = ComponentMaterial != nullptr && ComponentMaterial->CheckMaterialUsage_Concurrent(MATUSAGE_VirtualHeightfieldMesh);\n\tMaterial = bValidMaterial ? ComponentMaterial->GetRenderProxy() : UMaterial::GetDefaultMaterial(MD_Surface)->GetRenderProxy();\n\tMaterialRelevance = Material->GetMaterialInterface()->GetRelevance_Concurrent(GetScene().GetFeatureLevel());\n}\n\nSIZE_T F${NAME}SceneProxy::GetTypeHash() const\n{\n\tstatic size_t UniquePointer;\n\treturn reinterpret_cast<size_t>(&UniquePointer);\n}\n\nuint32 F${NAME}SceneProxy::GetMemoryFootprint() const\n{\n\treturn (sizeof(*this) + FPrimitiveSceneProxy::GetAllocatedSize());\n}\n\nvoid F${NAME}SceneProxy::OnTransformChanged()\n{\n\t// TODO\n\t// UVToLocal = UVToWorld * GetLocalToWorld().Inverse();\n\n\t// Setup a default occlusion volume array containing just the primitive bounds.\n\t// We use this if disabling the full set of occlusion volumes.\n\t// DefaultOcclusionVolumes.Reset();\n\t// DefaultOcclusionVolumes.Add(GetBounds());\n}\n\nvoid F${NAME}SceneProxy::CreateRenderThreadResources()\n{\n\tif (!bIsMeshValid)\n\t\treturn;\n\n\tconst FStaticMeshLODResources &LODModel = RenderData->LODResources[LODIndex];\n\n\t// Create vertex factory.\n\tVertexFactory = new F${NAME}MeshVertexFactory(GetScene().GetFeatureLevel());\n\tVertexFactory->InitResource(FRHICommandListImmediate::Get());\n\n\tLODModel.VertexBuffers.PositionVertexBuffer.BindPositionVertexBuffer(VertexFactory, StaticMeshData);\n\tLODModel.VertexBuffers.StaticMeshVertexBuffer.BindTangentVertexBuffer(VertexFactory, StaticMeshData);\n\tLODModel.VertexBuffers.StaticMeshVertexBuffer.BindTexCoordVertexBuffer(VertexFactory, StaticMeshData, MAX_TEXCOORDS);\n\n\tVertexFactory->SetData(StaticMeshData);\n\n\tVertexFactoryUniformBuffer = CreateVFUniformBuffer();\n\tVertexFactory->SetUniformBuffer(VertexFactoryUniformBuffer);\n}\n\nvoid F${NAME}SceneProxy::DestroyRenderThreadResources()\n{\n\tif (RenderData)\n\t{\n\t\tRenderData = nullptr;\n\t}\n\n\tUniformBufferStore.ReleaseResource();\n\n\tif (VertexFactory != nullptr)\n\t{\n\t\tVertexFactory->ReleaseResource();\n\t\tdelete VertexFactory;\n\t\tVertexFactory = nullptr;\n\t}\n}\n\nFPrimitiveViewRelevance F${NAME}SceneProxy::GetViewRelevance(const FSceneView *View) const\n{\n\tconst bool bValid = true; // TODO Allow users to modify\n\tconst bool bIsHiddenInEditor = false && View->Family->EngineShowFlags.Editor;\n\n\tFPrimitiveViewRelevance Result;\n\tResult.bDrawRelevance = bValid && IsShown(View) && !bIsHiddenInEditor;\n\tResult.bShadowRelevance = bValid && IsShadowCast(View) && ShouldRenderInMainPass() && !bIsHiddenInEditor;\n\tResult.bDynamicRelevance = true;\n\tResult.bStaticRelevance = false;\n\tResult.bRenderInMainPass = ShouldRenderInMainPass();\n\tResult.bUsesLightingChannels = GetLightingChannelMask() != GetDefaultLightingChannelMask();\n\tResult.bRenderCustomDepth = ShouldRenderCustomDepth();\n\tResult.bTranslucentSelfShadow = false;\n\tResult.bVelocityRelevance = false;\n\tMaterialRelevance.SetPrimitiveViewRelevance(Result);\n\treturn Result;\n}\n\nF${NAME}MeshUniformBufferRef F${NAME}SceneProxy::CreateVFUniformBuffer() const\n{\n\t// Compute the vertex factory uniform buffer.\n\tF${NAME}MeshUniformParameters Params;\n\tFMemory::Memzero(&Params, sizeof(Params)); // Clear unset bytes\n\n\tconst int32 NumTexCoords = VertexFactory->GetNumTexcoords();\n\tconst int32 ColorIndexMask = VertexFactory->GetColorIndexMask();\n\n\tParams.VertexFetch_Parameters = {ColorIndexMask, NumTexCoords, INDEX_NONE, INDEX_NONE};\n\tParams.VertexFetch_TexCoordBuffer = VertexFactory->GetTextureCoordinatesSRV();\n\tParams.VertexFetch_PackedTangentsBuffer = VertexFactory->GetTangentsSRV();\n\tParams.VertexFetch_ColorComponentsBuffer = VertexFactory->GetColorComponentsSRV();\n\n\treturn F${NAME}MeshUniformBufferRef::CreateUniformBufferImmediate(Params, UniformBuffer_MultiFrame);\n}\n\nvoid F${NAME}SceneProxy::GetDynamicMeshElements(const TArray<const FSceneView *> &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const\n{\n\tcheck(IsInRenderingThread());\n\n\tif (${NAME}RendererExtension.IsInFrame())\n\t{\n\t\t// Can't add new work while bInFrame.\n\t\t// In UE5 we need to AddWork()/SubmitWork() in two phases: InitViews() and InitViewsAfterPrepass()\n\t\t// The main renderer hooks for that don't exist in UE5.0 and are only added in UE5.1\n\t\t// That means that for UE5.0 we always hit this for shadow drawing and shadows will not be rendered.\n\t\t// Not earlying out here can lead to crashes from buffers being released too soon.\n\t\treturn;\n\t}\n\n\tif (!bIsMeshValid)\n\t{\n\t\treturn;\n\t}\n\n\tconst FStaticMeshLODResources &LODModel = RenderData->LODResources[LODIndex];\n\n\tconst int32 SectionCount = LODModel.Sections.Num();\n\n\tbool bHasPrecomputedVolumetricLightmap;\n\tFMatrix PreviousLocalToWorld;\n\tint32 SingleCaptureIndex;\n\tbool bOutputVelocity;\n\tFPrimitiveSceneInfo *LocalPrimitiveSceneInfo = GetPrimitiveSceneInfo();\n\tGetScene().GetPrimitiveUniformShaderParameters_RenderThread(LocalPrimitiveSceneInfo, bHasPrecomputedVolumetricLightmap, PreviousLocalToWorld, SingleCaptureIndex, bOutputVelocity);\n\n\tFBox InstanceBounds(FVector(-10, -10, -10), FVector(10, 10, 10));\n\n\tTUniformBuffer<FPrimitiveUniformShaderParameters> &CustomUB = UniformBufferStore;\n\n\tif (!CustomUB.IsInitialized())\n\t{\n\t\tFPrimitiveUniformShaderParametersBuilder UBBuilder = FPrimitiveUniformShaderParametersBuilder()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .Defaults()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .LocalToWorld(GetLocalToWorld())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .PreviousLocalToWorld(PreviousLocalToWorld)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .ActorWorldPosition(GetActorPosition())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .WorldBounds(GetBounds())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .LocalBounds(GetLocalBounds())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .CustomPrimitiveData(GetCustomPrimitiveData())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .LightingChannelMask(GetLightingChannelMask())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .LightmapDataIndex(LocalPrimitiveSceneInfo ? LocalPrimitiveSceneInfo->GetLightmapDataOffset() : 0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .LightmapUVIndex(GetLightMapCoordinateIndex())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .SingleCaptureIndex(SingleCaptureIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .InstanceSceneDataOffset(LocalPrimitiveSceneInfo ? LocalPrimitiveSceneInfo->GetInstanceSceneDataOffset() : INDEX_NONE)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .NumInstanceSceneDataEntries(LocalPrimitiveSceneInfo ? LocalPrimitiveSceneInfo->GetNumInstanceSceneDataEntries() : 0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .InstancePayloadDataOffset(LocalPrimitiveSceneInfo ? LocalPrimitiveSceneInfo->GetInstancePayloadDataOffset() : INDEX_NONE)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .InstancePayloadDataStride(LocalPrimitiveSceneInfo ? LocalPrimitiveSceneInfo->GetInstancePayloadDataStride() : 0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .ReceivesDecals(ReceivesDecals())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .OutputVelocity(bOutputVelocity || AlwaysHasVelocity())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .CastContactShadow(CastsContactShadow())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .CastShadow(CastsDynamicShadow())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .HasCapsuleRepresentation(HasDynamicIndirectShadowCasterRepresentation())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .UseVolumetricLightmap(bHasPrecomputedVolumetricLightmap)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t .UseSingleSampleShadowFromStationaryLights(UseSingleSampleShadowFromStationaryLights());\n\t\tif (InstanceBounds.IsValid)\n\t\t{\n\t\t\tUBBuilder.InstanceLocalBounds(InstanceBounds);\n\n\t\t\t// TODO: Is this correct anymore? With instance bounds, seems not. Left in for legacy\n\t\t\tUBBuilder.PreSkinnedLocalBounds(InstanceBounds);\n\t\t}\n\n\t\tCustomUB.SetContents(UBBuilder.Build());\n\t\tCustomUB.InitResource(FRHICommandListImmediate::Get());\n\t}\n\n\tfor (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)\n\t{\n\t\tif (VisibilityMap & (1 << ViewIndex))\n\t\t{\n\t\t\t// TODO INIT instance buffer\n\t\t\t${NAME}Mesh::FDrawInstanceBuffers &Buffers = ${NAME}RendererExtension.AddWork(this, ViewFamily.Views[0], Views[ViewIndex]);\n\n\t\t\tfor (int32 SectionIndex = 0; SectionIndex < SectionCount; SectionIndex++)\n\t\t\t{\n\t\t\t\tconst FStaticMeshSection &Section = LODModel.Sections[SectionIndex];\n\n\t\t\t\tFMeshBatch &Mesh = Collector.AllocateMesh();\n\t\t\t\tMesh.bWireframe = AllowDebugViewmodes() && ViewFamily.EngineShowFlags.Wireframe;\n\t\t\t\tMesh.bUseWireframeSelectionColoring = IsSelected();\n\t\t\t\tMesh.VertexFactory = VertexFactory;\n\t\t\t\tMesh.MaterialRenderProxy = Material;\n\t\t\t\tMesh.ReverseCulling = IsLocalToWorldDeterminantNegative();\n\t\t\t\tMesh.Type = PT_TriangleList;\n\t\t\t\tMesh.DepthPriorityGroup = SDPG_World;\n\t\t\t\tMesh.bCanApplyViewModeOverrides = true;\n\t\t\t\tMesh.bUseForMaterial = true;\n\t\t\t\tMesh.CastShadow = true;\n\t\t\t\tMesh.bUseForDepthPass = true;\n\n\t\t\t\tMesh.Elements.SetNumZeroed(1);\n\t\t\t\t{\n\t\t\t\t\tFMeshBatchElement &BatchElement = Mesh.Elements[0];\n\n\t\t\t\t\t// TODO allow for non indirect instanced rendering\n\n\t\t\t\t\tBatchElement.IndirectArgsBuffer = Buffers.IndirectArgsBuffer;\n\t\t\t\t\tBatchElement.IndirectArgsOffset = 0;\n\n\t\t\t\t\tBatchElement.FirstIndex = 0;\n\t\t\t\t\tBatchElement.NumPrimitives = 0;\n\t\t\t\t\tBatchElement.MinVertexIndex = 0;\n\t\t\t\t\tBatchElement.MaxVertexIndex = 0;\n\n\t\t\t\t\tBatchElement.IndexBuffer = &LODModel.IndexBuffer;\n\t\t\t\t\tBatchElement.FirstIndex = Section.FirstIndex;\n\t\t\t\t\t// BatchElement.NumPrimitives = Section.NumTriangles;\n\n\t\t\t\t\tBatchElement.PrimitiveUniformBufferResource = &CustomUB;\n\n\t\t\t\t\tF${NAME}UserData *UserData = &Collector.AllocateOneFrameResource<F${NAME}UserData>();\n\t\t\t\t\tBatchElement.UserData = (void *)UserData;\n\n\t\t\t\t\tUserData->InstanceBufferSRV = Buffers.InstanceBufferSRV;\n\t\t\t\t}\n\n\t\t\t\tCollector.AddMesh(ViewIndex, Mesh);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// bool F${NAME}SceneProxy::HasSubprimitiveOcclusionQueries() const\n// {\n// \treturn false;\n// }\n\n// const TArray<FBoxSphereBounds>* F${NAME}SceneProxy::GetOcclusionQueries(const FSceneView* View) const\n// {\n// \t// return &DefaultOcclusionVolumes;\n// }\n\n// void F${NAME}SceneProxy::BuildOcclusionVolumes(TArrayView<FVector2D> const& InMinMaxData, FIntPoint const& InMinMaxSize, TArrayView<int32> const& InMinMaxMips, int32 InNumLods)\n// {\n// \t// TODO\n// }\n\n// void F${NAME}SceneProxy::AcceptOcclusionResults(FSceneView const* View, TArray<bool>* Results, int32 ResultsStart, int32 NumResults)\n// {\n// \tcheck(IsInRenderingThread());\n\n// \t// TODO\n// }\n\nnamespace ${NAME}Mesh\n{\n\t/* Keep indirect args offsets in sync with VirtualHeightfieldMesh.usf. */\n\tstatic const int32 IndirectArgsByteOffset_FinalCull = 0;\n\tstatic const int32 IndirectArgsByteSize = 4 * sizeof(uint32);\n\n\t/** Shader structure used for tracking instance counts on the GPU. */\n\tstruct InstanceInfo\n\t{\n\t\tuint32 Num;\n\t};\n\n\tstruct F${NAME}RenderInstance\n\t{\n\t\tfloat Position[3];\n\t};\n\n\tstruct F${NAME}MeshItem\n\t{\n\t\tfloat Position[3];\n\t\tfloat Rotation[3];\n\t\tfloat Scale[3];\n\t};\n\n\t/** Compute shader to initialize all buffers. */\n\tclass FInitBuffers_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FInitBuffers_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FInitBuffers_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<InstanceInfo>, RWInstanceInfo)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<F${NAME}MeshItem>, RWMeshBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWFeedbackBuffer)\n\t\tSHADER_PARAMETER(uint32, InstanceBufferSize)\n\t\tSHADER_PARAMETER(float, Time)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FInitBuffers_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"InitBuffersCS\", SF_Compute);\n\n\t/** Compute shader to add an arbitrary amount of instances to the persistent BaseInstanceBuffer. */\n\tclass FAddInstances_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FAddInstances_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FAddInstances_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(FVector3f, ViewOrigin)\n\t\tSHADER_PARAMETER_ARRAY(FVector4f, FrustumPlanes, [5])\n\t\tSHADER_PARAMETER(uint32, NumToAdd)\n\t\tSHADER_PARAMETER(int32, Seed)\n\t\tSHADER_PARAMETER(uint32, InstanceBufferSize)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<InstanceInfo>, RWInstanceInfo)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<F${NAME}MeshItem>, RWBaseInstanceBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<F${NAME}MeshItem>, RWMeshBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FAddInstances_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"AddInstancesCS\", SF_Compute);\n\n\t/** InitInstanceBuffer compute shader. */\n\tclass FInitInstanceBuffer_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FInitInstanceBuffer_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FInitInstanceBuffer_CS, FGlobalShader);\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(int32, NumIndices)\n\t\tSHADER_PARAMETER(uint32, InstanceBufferSize)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FInitInstanceBuffer_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"InitInstanceBufferCS\", SF_Compute);\n\n\t/** CullInstances compute shader. */\n\tclass FCullInstances_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FCullInstances_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FCullInstances_CS, FGlobalShader);\n\n\t\tclass FReuseCullDim : SHADER_PERMUTATION_BOOL(\"REUSE_CULL\");\n\n\t\tusing FPermutationDomain = TShaderPermutationDomain<FReuseCullDim>;\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER_ARRAY(FVector4f, FrustumPlanes, [5])\n\t\tSHADER_PARAMETER(FVector3f, ViewOrigin)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<F${NAME}MeshItem>, BaseInstanceBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<F${NAME}MeshItem>, MeshBuffer)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, IndirectArgsBufferSRV)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<F${NAME}MeshItem>, RWBaseInstanceBuffer)\n\t\tSHADER_PARAMETER_UAV(RWStructuredBuffer<F${NAME}MeshItem>, RWInstanceBuffer)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tRDG_BUFFER_ACCESS(IndirectArgsBuffer, ERHIAccess::IndirectArgs)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FCullInstances_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"CullInstancesCS\", SF_Compute);\n\n\t/** PushInstances compute shader. */\n\tclass FPushInstances_CS : public FGlobalShader\n\t{\n\tpublic:\n\t\tDECLARE_GLOBAL_SHADER(FPushInstances_CS);\n\t\tSHADER_USE_PARAMETER_STRUCT(FPushInstances_CS, FGlobalShader);\n\n\t\tstatic bool ShouldCompilePermutation(FGlobalShaderPermutationParameters const &Parameters)\n\t\t{\n\t\t\treturn IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);\n\t\t}\n\n\t\tBEGIN_SHADER_PARAMETER_STRUCT(FParameters, )\n\t\tSHADER_PARAMETER(FVector3f, ViewOrigin)\n\t\tSHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, IndirectArgsBufferSRV)\n\t\tSHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<F${NAME}MeshItem>, RWBaseInstanceBuffer)\n\t\tSHADER_PARAMETER_UAV(RWBuffer<uint>, RWIndirectArgsBuffer)\n\t\tRDG_BUFFER_ACCESS(IndirectArgsBuffer, ERHIAccess::IndirectArgs)\n\t\tEND_SHADER_PARAMETER_STRUCT()\n\t};\n\n\tIMPLEMENT_GLOBAL_SHADER(FPushInstances_CS, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}Compute.usf\", \"PushInstancesCS\", SF_Compute);\n\n\t/** View matrices that can be frozen in freezerendering mode. */\n\tstruct FViewData\n\t{\n\t\tFVector ViewOrigin;\n\t\tFMatrix ProjectionMatrix;\n\t\tFConvexVolume ViewFrustum;\n\t\tbool bViewFrozen;\n\t};\n\n\t/** Fill the FViewData from an FSceneView respecting the freezerendering mode. */\n\tvoid GetViewData(FSceneView const *InSceneView, FViewData &OutViewData)\n\t{\n#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)\n\t\tconst FViewMatrices *FrozenViewMatrices = InSceneView->State != nullptr ? InSceneView->State->GetFrozenViewMatrices() : nullptr;\n\t\tif (FrozenViewMatrices != nullptr)\n\t\t{\n\t\t\tOutViewData.ViewOrigin = FrozenViewMatrices->GetViewOrigin();\n\t\t\tOutViewData.ProjectionMatrix = FrozenViewMatrices->GetProjectionMatrix();\n\t\t\tGetViewFrustumBounds(OutViewData.ViewFrustum, FrozenViewMatrices->GetViewProjectionMatrix(), true);\n\t\t\tOutViewData.bViewFrozen = true;\n\t\t}\n\t\telse\n#endif\n\t\t{\n\t\t\tOutViewData.ViewOrigin = InSceneView->ViewMatrices.GetViewOrigin();\n\t\t\tOutViewData.ProjectionMatrix = InSceneView->ViewMatrices.GetProjectionMatrix();\n\t\t\tOutViewData.ViewFrustum = InSceneView->ViewFrustum;\n\t\t\tOutViewData.bViewFrozen = false;\n\t\t}\n\t}\n\n\t/** Structure describing GPU culling setup for a single Proxy. */\n\tstruct FProxyDesc\n\t{\n\t\tF${NAME}SceneProxy const *SceneProxy;\n\t\tint32 MaxPersistentQueueItems;\n\t\tint32 MaxRenderItems;\n\t\tint32 NumAddPassWavefronts;\n\t};\n\n\t/** View description used for LOD calculation in the main view. */\n\tstruct FMainViewDesc\n\t{\n\t\tFSceneView const *ViewDebug;\n\t\tFVector ViewOrigin;\n\t\tFVector4 LodDistances;\n\t\tfloat LodBiasScale;\n\t\tFVector4 Planes[5];\n\t\tFTextureRHIRef OcclusionTexture;\n\t\tint32 OcclusionLevelOffset;\n\t};\n\n\t/** View description used for culling in the child view. */\n\tstruct FChildViewDesc\n\t{\n\t\tFSceneView const *ViewDebug;\n\t\tbool bIsMainView;\n\t\tFVector4 Planes[5];\n\t};\n\n\t/** Structure to carry RDG resources. */\n\tstruct FVolatileResources\n\t{\n\t\tFRDGBufferRef BaseInstanceBuffer;\n\t\tFRDGBufferUAVRef BaseInstanceBufferUAV;\n\t\tFRDGBufferSRVRef BaseInstanceBufferSRV;\n\n\t\tFRDGBufferRef InstanceInfoBuffer;\n\t\tFRDGBufferUAVRef InstanceInfoBufferUAV;\n\t\tFRDGBufferSRVRef InstanceInfoBufferSRV;\n\n\t\tFRDGBufferRef MeshBuffer;\n\t\tFRDGBufferUAVRef MeshBufferUAV;\n\t\tFRDGBufferSRVRef MeshBufferSRV;\n\n\t\tFRDGBufferRef IndirectArgsBuffer;\n\t\tFRDGBufferUAVRef IndirectArgsBufferUAV;\n\t\tFRDGBufferSRVRef IndirectArgsBufferSRV;\n\t};\n\n\t/** Initialize the FDrawInstanceBuffers objects. */\n\tvoid InitializeInstanceBuffers(FRHICommandListImmediate & InRHICmdList, FDrawInstanceBuffers & InBuffers)\n\t{\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"F${NAME}.InstanceBuffer\"));\n\t\t\tconst int32 InstanceSize = sizeof(${NAME}Mesh::F${NAME}RenderInstance);\n\t\t\tconst int32 InstanceBufferSize = 1024 * 4 * InstanceSize;\n\t\t\tInBuffers.InstanceBuffer = InRHICmdList.CreateStructuredBuffer(InstanceSize, InstanceBufferSize, BUF_UnorderedAccess | BUF_ShaderResource, ERHIAccess::SRVMask, CreateInfo);\n\t\t\tInBuffers.InstanceBufferUAV = InRHICmdList.CreateUnorderedAccessView(InBuffers.InstanceBuffer, false, false);\n\t\t\tInBuffers.InstanceBufferSRV = InRHICmdList.CreateShaderResourceView(InBuffers.InstanceBuffer);\n\t\t}\n\t\t{\n\t\t\tFRHIResourceCreateInfo CreateInfo(TEXT(\"F${NAME}.InstanceIndirectArgsBuffer\"));\n\t\t\tInBuffers.IndirectArgsBuffer = InRHICmdList.CreateVertexBuffer(5 * sizeof(uint32), BUF_UnorderedAccess | BUF_DrawIndirect, ERHIAccess::IndirectArgs, CreateInfo);\n\t\t\tInBuffers.IndirectArgsBufferUAV = InRHICmdList.CreateUnorderedAccessView(InBuffers.IndirectArgsBuffer, PF_R32_UINT);\n\t\t}\n\t}\n\n\t/** Initialize the volatile resources used in the render graph. */\n\tvoid InitializeResources(FRDGBuilder & GraphBuilder, FProxyDesc const &InDesc, FMainViewDesc const &InMainViewDesc, FVolatileResources &OutResources)\n\t{\n\t\tif (!InDesc.SceneProxy->BaseInstanceBuffer.IsValid())\n\t\t{\n\t\t\t// We need to create the instance buffers.\n\t\t\tOutResources.BaseInstanceBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateStructuredDesc(sizeof(F${NAME}MeshItem), InDesc.MaxRenderItems), TEXT(\"${NAME}Mesh.BaseInstanceBuffer\"));\n\t\t\tOutResources.InstanceInfoBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateStructuredDesc(sizeof(InstanceInfo), 1), TEXT(\"${NAME}Mesh.InstanceInfoBuffer\"));\n\n\t\t\tInDesc.SceneProxy->BaseInstanceBuffer = GraphBuilder.ConvertToExternalBuffer(OutResources.BaseInstanceBuffer);\n\t\t\tInDesc.SceneProxy->InstanceInfoBuffer = GraphBuilder.ConvertToExternalBuffer(OutResources.InstanceInfoBuffer);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Buffers already exist, we can use them.\n\t\t\tOutResources.BaseInstanceBuffer = GraphBuilder.RegisterExternalBuffer(InDesc.SceneProxy->BaseInstanceBuffer);\n\t\t\tOutResources.InstanceInfoBuffer = GraphBuilder.RegisterExternalBuffer(InDesc.SceneProxy->InstanceInfoBuffer);\n\t\t}\n\n\t\tOutResources.BaseInstanceBufferUAV = GraphBuilder.CreateUAV(OutResources.BaseInstanceBuffer);\n\t\tOutResources.BaseInstanceBufferSRV = GraphBuilder.CreateSRV(OutResources.BaseInstanceBuffer);\n\n\t\tOutResources.InstanceInfoBufferUAV = GraphBuilder.CreateUAV(OutResources.InstanceInfoBuffer);\n\t\tOutResources.InstanceInfoBufferSRV = GraphBuilder.CreateSRV(OutResources.InstanceInfoBuffer);\n\n\t\tOutResources.MeshBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateStructuredDesc(sizeof(F${NAME}MeshItem), InDesc.MaxRenderItems), TEXT(\"${NAME}Mesh.MeshBuffer\"));\n\t\tOutResources.MeshBufferUAV = GraphBuilder.CreateUAV(OutResources.MeshBuffer);\n\t\tOutResources.MeshBufferSRV = GraphBuilder.CreateSRV(OutResources.MeshBuffer);\n\n\t\tOutResources.IndirectArgsBuffer = GraphBuilder.CreateBuffer(FRDGBufferDesc::CreateIndirectDesc(IndirectArgsByteSize), TEXT(\"${NAME}Mesh.IndirectArgsBuffer\"));\n\t\tOutResources.IndirectArgsBufferUAV = GraphBuilder.CreateUAV(OutResources.IndirectArgsBuffer);\n\t\tOutResources.IndirectArgsBufferSRV = GraphBuilder.CreateSRV(OutResources.IndirectArgsBuffer);\n\t}\n\n\t/** Transition our output draw buffers for use. Read or write access is set according to the bToWrite parameter. */\n\tvoid AddPass_TransitionAllDrawBuffers(FRDGBuilder & GraphBuilder, TArray<${NAME}Mesh::FDrawInstanceBuffers> const &Buffers, TArrayView<int32> const &BufferIndices, bool bToWrite)\n\t{\n\t\tTArray<FRHIUnorderedAccessView *> OverlapUAVs;\n\t\tOverlapUAVs.Reserve(BufferIndices.Num());\n\n\t\tTArray<FRHITransitionInfo> TransitionInfos;\n\t\tTransitionInfos.Reserve(BufferIndices.Num() * 2);\n\n\t\tfor (int32 BufferIndex : BufferIndices)\n\t\t{\n\t\t\tFRHIUnorderedAccessView *IndirectArgsBufferUAV = Buffers[BufferIndex].IndirectArgsBufferUAV;\n\t\t\tFRHIUnorderedAccessView *InstanceBufferUAV = Buffers[BufferIndex].InstanceBufferUAV;\n\n\t\t\tOverlapUAVs.Add(IndirectArgsBufferUAV);\n\n\t\t\tTransitionInfos.Add(FRHITransitionInfo(IndirectArgsBufferUAV, bToWrite ? ERHIAccess::IndirectArgs : ERHIAccess::UAVMask, bToWrite ? ERHIAccess::UAVMask : ERHIAccess::IndirectArgs));\n\t\t\tTransitionInfos.Add(FRHITransitionInfo(InstanceBufferUAV, bToWrite ? ERHIAccess::SRVMask : ERHIAccess::UAVMask, bToWrite ? ERHIAccess::UAVMask : ERHIAccess::SRVMask));\n\t\t}\n\n\t\tAddPass(GraphBuilder, RDG_EVENT_NAME(\"TransitionAllDrawBuffers\"), [bToWrite, OverlapUAVs, TransitionInfos](FRHICommandList &InRHICmdList)\n\t\t\t\t\t\t{\n\t\t\tif (!bToWrite)\n\t\t\t{\n\t\t\t\tInRHICmdList.EndUAVOverlap(OverlapUAVs);\n\t\t\t}\n\n\t\t\tInRHICmdList.Transition(TransitionInfos);\n\t\t\t\n\t\t\tif (bToWrite)\n\t\t\t{\n\t\t\t\tInRHICmdList.BeginUAVOverlap(OverlapUAVs);\n\t\t\t} });\n\t}\n\n\t/** Initialize the buffers before collecting visible meshes. */\n\tvoid AddPass_InitBuffers(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources)\n\t{\n\t\tTShaderMapRef<FInitBuffers_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFInitBuffers_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FInitBuffers_CS::FParameters>();\n\t\tPassParameters->Time = (float)(rand() % 1000) / 50.f;\n\t\tPassParameters->RWInstanceInfo = InVolatileResources.InstanceInfoBufferUAV;\n\t\tPassParameters->RWMeshBuffer = InVolatileResources.MeshBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InVolatileResources.IndirectArgsBufferUAV;\n\t\tPassParameters->InstanceBufferSize = InDesc.MaxRenderItems;\n\n\t\tGraphBuilder.AddPass(\n\t\t\t\tRDG_EVENT_NAME(\"InitBuffers\"),\n\t\t\t\tPassParameters,\n\t\t\t\tERDGPassFlags::Compute,\n\t\t\t\t[PassParameters, ComputeShader](FRHICommandList &RHICmdList)\n\t\t\t\t{\n\t\t\t\t\tFComputeShaderUtils::Dispatch(RHICmdList, ComputeShader, *PassParameters, FIntVector(1, 1, 1));\n\t\t\t\t});\n\t}\n\n\t/** Collect potentially visible quads and determine their Lods. */\n\tvoid AddPass_AddInstances(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FMainViewDesc const &InViewDesc)\n\t{\n\t\tint NumToAdd = 100;\n\n\t\tTShaderMapRef<FAddInstances_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFAddInstances_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FAddInstances_CS::FParameters>();\n\t\tPassParameters->ViewOrigin = (FVector3f)FVector(InDesc.SceneProxy->GetLocalToWorld().Inverse().TransformPosition(InViewDesc.ViewOrigin));\n\t\tfor (int32 PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t\t{\n\t\t\tPassParameters->FrustumPlanes[PlaneIndex] = FVector4f(InViewDesc.Planes[PlaneIndex]); // LWC_TODO: precision loss\n\t\t}\n\n\t\tPassParameters->RWInstanceInfo = InVolatileResources.InstanceInfoBufferUAV;\n\t\tPassParameters->RWBaseInstanceBuffer = InVolatileResources.BaseInstanceBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InVolatileResources.IndirectArgsBufferUAV;\n\t\tPassParameters->NumToAdd = NumToAdd;\n\t\tPassParameters->Seed = rand() % 10000000;\n\t\tPassParameters->InstanceBufferSize = InDesc.MaxRenderItems;\n\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"AddInstances\"),\n\t\t\t\tComputeShader, PassParameters, FIntVector(FMath::DivideAndRoundUp(NumToAdd, 64), 1, 1));\n\t}\n\n\t/** Initialise the draw indirect buffer. */\n\tvoid AddPass_InitInstanceBuffer(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FDrawInstanceBuffers & InOutputResources, int NumIndices)\n\t{\n\t\tTShaderMapRef<FInitInstanceBuffer_CS> ComputeShader(InGlobalShaderMap);\n\n\t\tFInitInstanceBuffer_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FInitInstanceBuffer_CS::FParameters>();\n\t\tPassParameters->NumIndices = NumIndices;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"InitInstanceBuffer\"),\n\t\t\t\tComputeShader, PassParameters, FIntVector(1, 1, 1));\n\t}\n\n\t/** Push instances away from ViewOrigin. */\n\tvoid AddPass_PushInstances(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FDrawInstanceBuffers &InOutputResources, FMainViewDesc const &InViewDesc)\n\t{\n\t\tFPushInstances_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FPushInstances_CS::FParameters>();\n\t\tPassParameters->IndirectArgsBuffer = InVolatileResources.IndirectArgsBuffer;\n\t\tPassParameters->IndirectArgsBufferSRV = InVolatileResources.IndirectArgsBufferSRV;\n\t\tPassParameters->RWBaseInstanceBuffer = InVolatileResources.BaseInstanceBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\t\tPassParameters->ViewOrigin = (FVector3f)FVector(InDesc.SceneProxy->GetLocalToWorld().Inverse().TransformPosition(InViewDesc.ViewOrigin));\n\n\t\tint32 IndirectArgOffset = ${NAME}Mesh::IndirectArgsByteOffset_FinalCull;\n\n\t\tFPushInstances_CS::FPermutationDomain PermutationVector;\n\n\t\tTShaderMapRef<FPushInstances_CS> ComputeShader(InGlobalShaderMap, PermutationVector);\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"PushInstances\"),\n\t\t\t\tComputeShader, PassParameters,\n\t\t\t\tInVolatileResources.IndirectArgsBuffer,\n\t\t\t\tIndirectArgOffset);\n\t}\n\n\t/** Cull instances and write to the final output buffer. */\n\tvoid AddPass_CullInstances(FRDGBuilder & GraphBuilder, FGlobalShaderMap * InGlobalShaderMap, FProxyDesc const &InDesc, FVolatileResources &InVolatileResources, FDrawInstanceBuffers &InOutputResources, FChildViewDesc const &InViewDesc)\n\t{\n\t\tFCullInstances_CS::FParameters *PassParameters = GraphBuilder.AllocParameters<FCullInstances_CS::FParameters>();\n\t\tPassParameters->MeshBuffer = InVolatileResources.MeshBufferSRV;\n\t\tPassParameters->IndirectArgsBuffer = InVolatileResources.IndirectArgsBuffer;\n\t\tPassParameters->IndirectArgsBufferSRV = InVolatileResources.IndirectArgsBufferSRV;\n\t\tPassParameters->BaseInstanceBuffer = InVolatileResources.BaseInstanceBufferSRV;\n\t\tPassParameters->RWInstanceBuffer = InOutputResources.InstanceBufferUAV;\n\t\tPassParameters->RWIndirectArgsBuffer = InOutputResources.IndirectArgsBufferUAV;\n\n\t\tfor (int32 PlaneIndex = 0; PlaneIndex < 5; ++PlaneIndex)\n\t\t{\n\t\t\tPassParameters->FrustumPlanes[PlaneIndex] = FVector4f(InViewDesc.Planes[PlaneIndex]); // LWC_TODO: precision loss\n\t\t}\n\n\t\tint32 IndirectArgOffset = ${NAME}Mesh::IndirectArgsByteOffset_FinalCull;\n\n\t\tFCullInstances_CS::FPermutationDomain PermutationVector;\n\n\t\tTShaderMapRef<FCullInstances_CS> ComputeShader(InGlobalShaderMap, PermutationVector);\n\t\tFComputeShaderUtils::AddPass(\n\t\t\t\tGraphBuilder,\n\t\t\t\tRDG_EVENT_NAME(\"CullInstances\"),\n\t\t\t\tComputeShader, PassParameters,\n\t\t\t\tInVolatileResources.IndirectArgsBuffer,\n\t\t\t\tIndirectArgOffset);\n\t}\n}\n\nvoid F${NAME}RendererExtension::SubmitWork(FRDGBuilder &GraphBuilder)\n{\n\tSCOPE_CYCLE_COUNTER(STAT_${NAME}Mesh_SubmitWork);\n\tDECLARE_GPU_STAT(${NAME}Mesh)\n\tRDG_EVENT_SCOPE(GraphBuilder, \"${NAME}\");\n\tRDG_GPU_STAT_SCOPE(GraphBuilder, ${NAME}Mesh);\n\n\t// Sort work so that we can batch by proxy/view\n\tWorkDescs.Sort(FWorkDescSort());\n\n\t// Add pass to transition all output buffers for writing\n\tTArray<int32, TInlineAllocator<8>> UsedBufferIndices;\n\tfor (FWorkDesc WorkdDesc : WorkDescs)\n\t{\n\t\tUsedBufferIndices.Add(WorkdDesc.BufferIndex);\n\t}\n\tAddPass_TransitionAllDrawBuffers(GraphBuilder, Buffers, UsedBufferIndices, true);\n\n\t// Add passes to initialize the output buffers\n\tfor (FWorkDesc WorkDesc : WorkDescs)\n\t{\n\t\tint NumIndices = SceneProxies[WorkDesc.ProxyIndex]->RenderData->LODResources[0].IndexBuffer.GetNumIndices();\n\t\tAddPass_InitInstanceBuffer(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), Buffers[WorkDesc.BufferIndex], NumIndices);\n\t}\n\n\t// Iterate workloads and submit work\n\tconst int32 NumWorkItems = WorkDescs.Num();\n\tint32 WorkIndex = 0;\n\twhile (WorkIndex < NumWorkItems)\n\t{\n\t\t// Gather data per proxy\n\t\tF${NAME}SceneProxy const *Proxy = SceneProxies[WorkDescs[WorkIndex].ProxyIndex];\n\n\t\t${NAME}Mesh::FProxyDesc ProxyDesc;\n\t\tProxyDesc.SceneProxy = Proxy;\n\n\t\t// 1 << CeilLogTwo takes a number and returns the next power of two. so: 53 -> 64, 80 -> 128, etc.\n\t\tProxyDesc.MaxRenderItems = 1 << FMath::CeilLogTwo(MAX_INSTANCES);\n\t\tProxyDesc.NumAddPassWavefronts = 16;\n\n\t\twhile (WorkIndex < NumWorkItems && SceneProxies[WorkDescs[WorkIndex].ProxyIndex] == Proxy)\n\t\t{\n\t\t\t// Gather data per main view\n\t\t\tFSceneView const *MainView = MainViews[WorkDescs[WorkIndex].MainViewIndex];\n\n\t\t\t${NAME}Mesh::FViewData MainViewData;\n\t\t\t${NAME}Mesh::GetViewData(MainView, MainViewData);\n\n\t\t\t${NAME}Mesh::FMainViewDesc MainViewDesc;\n\t\t\tMainViewDesc.ViewDebug = MainView;\n\n\t\t\t// ViewOrigin and Frustum Planes are all converted to UV space for the shader.\n\t\t\tMainViewDesc.ViewOrigin = MainViewData.ViewOrigin;\n\n\t\t\tconst int32 MainViewNumPlanes = FMath::Min(MainViewData.ViewFrustum.Planes.Num(), 5);\n\t\t\tfor (int32 PlaneIndex = 0; PlaneIndex < MainViewNumPlanes; ++PlaneIndex)\n\t\t\t{\n\t\t\t\tFPlane Plane = MainViewData.ViewFrustum.Planes[PlaneIndex];\n\t\t\t\tPlane = Plane.TransformBy(Proxy->GetLocalToWorld().Inverse());\n\t\t\t\tMainViewDesc.Planes[PlaneIndex] = FVector4(-Plane.X, -Plane.Y, -Plane.Z, Plane.W);\n\t\t\t}\n\t\t\tfor (int32 PlaneIndex = MainViewNumPlanes; PlaneIndex < 5; ++PlaneIndex)\n\t\t\t{\n\t\t\t\tMainViewDesc.Planes[PlaneIndex] = FPlane(0, 0, 0, 1); // Null plane won't cull anything\n\t\t\t}\n\n\t\t\t// Build volatile graph resources\n\t\t\t${NAME}Mesh::FVolatileResources VolatileResources;\n\t\t\t${NAME}Mesh::InitializeResources(GraphBuilder, ProxyDesc, MainViewDesc, VolatileResources);\n\n\t\t\t// Build graph\n\t\t\tif (ProxyDesc.SceneProxy->AddInstancesNextFrame)\n\t\t\t{\n\t\t\t\t${NAME}Mesh::AddPass_AddInstances(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, MainViewDesc);\n\t\t\t\tProxyDesc.SceneProxy->AddInstancesNextFrame = false;\n\t\t\t}\n\n\t\t\t${NAME}Mesh::AddPass_InitBuffers(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources);\n\n\t\t\t${NAME}Mesh::AddPass_PushInstances(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, Buffers[WorkDescs[WorkIndex].BufferIndex], MainViewDesc);\n\n\t\t\t// FVirtualTextureFeedbackBufferDesc Desc;\n\t\t\t// Desc.Init(CVarVHMMaxFeedbackItems.GetValueOnRenderThread() + 1);\n\t\t\t// SubmitVirtualTextureFeedbackBuffer(GraphBuilder, VolatileResources.FeedbackBuffer, Desc);\n\n\t\t\twhile (WorkIndex < NumWorkItems && MainViews[WorkDescs[WorkIndex].MainViewIndex] == MainView)\n\t\t\t{\n\t\t\t\t// Gather data per child view\n\t\t\t\tFSceneView const *CullView = CullViews[WorkDescs[WorkIndex].CullViewIndex];\n\t\t\t\tFConvexVolume const *ShadowFrustum = CullView->GetDynamicMeshElementsShadowCullFrustum();\n\t\t\t\tFConvexVolume const &Frustum = ShadowFrustum != nullptr && ShadowFrustum->Planes.Num() > 0 ? *ShadowFrustum : CullView->ViewFrustum;\n\t\t\t\tconst FVector PreShadowTranslation = ShadowFrustum != nullptr ? CullView->GetPreShadowTranslation() : FVector::ZeroVector;\n\n\t\t\t\t${NAME}Mesh::FChildViewDesc ChildViewDesc;\n\t\t\t\tChildViewDesc.ViewDebug = MainView;\n\t\t\t\tChildViewDesc.bIsMainView = CullView == MainView;\n\n\t\t\t\tconst int32 ChildViewNumPlanes = FMath::Min(Frustum.Planes.Num(), 5);\n\t\t\t\tfor (int32 PlaneIndex = 0; PlaneIndex < ChildViewNumPlanes; ++PlaneIndex)\n\t\t\t\t{\n\t\t\t\t\tFPlane Plane = Frustum.Planes[PlaneIndex];\n\t\t\t\t\tPlane = Plane.TransformBy(Proxy->GetLocalToWorld().Inverse());\n\t\t\t\t\tChildViewDesc.Planes[PlaneIndex] = FVector4(-Plane.X, -Plane.Y, -Plane.Z, Plane.W);\n\t\t\t\t}\n\t\t\t\tfor (int32 PlaneIndex = ChildViewNumPlanes; PlaneIndex < 5; ++PlaneIndex)\n\t\t\t\t{\n\t\t\t\t\tMainViewDesc.Planes[PlaneIndex] = FPlane(0, 0, 0, 1); // Null plane won't cull anything\n\t\t\t\t}\n\n\t\t\t\t// Build graph\n\t\t\t\t${NAME}Mesh::AddPass_CullInstances(GraphBuilder, GetGlobalShaderMap(GMaxRHIFeatureLevel), ProxyDesc, VolatileResources, Buffers[WorkDescs[WorkIndex].BufferIndex], ChildViewDesc);\n\n\t\t\t\tWorkIndex++;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add pass to transition all output buffers for reading\n\tAddPass_TransitionAllDrawBuffers(GraphBuilder, Buffers, UsedBufferIndices, false);\n}\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]SceneProxy.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"${NAME}VertexFactory.h\"\n#include \"PrimitiveUniformShaderParametersBuilder.h\"\n#include \"Materials/MaterialRenderProxy.h\"\n#include \"PrimitiveSceneProxy.h\"\n\nnamespace ${NAME}Mesh\n{\n\t/** Buffers filled by GPU culling. */\n\tstruct FDrawInstanceBuffers\n\t{\n\t\t/* Culled instance buffer. */\n\t\tFBufferRHIRef InstanceBuffer;\n\t\tFUnorderedAccessViewRHIRef InstanceBufferUAV;\n\t\tFShaderResourceViewRHIRef InstanceBufferSRV;\n\n\t\t/* IndirectArgs buffer for final DrawInstancedIndirect. */\n\t\tFBufferRHIRef IndirectArgsBuffer;\n\t\tFUnorderedAccessViewRHIRef IndirectArgsBufferUAV;\n\t};\n}\n\nclass F${NAME}SceneProxy final : public FPrimitiveSceneProxy\n{\npublic:\n\tF${NAME}SceneProxy(class U${NAME}Component * InComponent);\n\nprotected:\n\t//~ Begin FPrimitiveSceneProxy Interface\n\tvirtual SIZE_T GetTypeHash() const override;\n\tvirtual uint32 GetMemoryFootprint() const override;\n\tvirtual void CreateRenderThreadResources() override;\n\tvirtual void DestroyRenderThreadResources() override;\n\tvirtual void OnTransformChanged() override;\n\tvirtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override;\n\tvirtual void GetDynamicMeshElements(const TArray<const FSceneView *> &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const override;\n\t//~ End FPrimitiveSceneProxy Interface\n\n\tF${NAME}MeshUniformBufferRef CreateVFUniformBuffer() const;\n\nprivate:\n\tvoid BuildOcclusionVolumes(TArrayView<FVector2D> const &InMinMaxData, FIntPoint const &InMinMaxSize, TArrayView<int32> const &InMinMaxMips, int32 InNumLods);\n\npublic:\n\tbool bIsMeshValid;\n\n\tmutable std::atomic<bool> AddInstancesNextFrame;\n\n\tclass FMaterialRenderProxy *Material;\n\tclass UStaticMesh *LocalStaticMesh;\n\tFStaticMeshRenderData *RenderData;\n\tFMaterialRelevance MaterialRelevance;\n\n\tint LODIndex;\n\n\tmutable TUniformBuffer<FPrimitiveUniformShaderParameters> UniformBufferStore;\n\tmutable FStaticMeshDataType StaticMeshData;\n\tmutable F${NAME}MeshUniformBufferRef VertexFactoryUniformBuffer;\n\n\t// Multi-frame buffers used to store the instance data.\n\t// This is initialized in RenderExtension::InitializeResources()\n\tmutable TRefCountPtr<FRDGPooledBuffer> BaseInstanceBuffer;\n\tmutable TRefCountPtr<FRDGPooledBuffer> InstanceInfoBuffer;\n\n\tbool bCallbackRegistered;\n\n\tclass F${NAME}MeshVertexFactory *VertexFactory;\n};\n\n//  Notes: Looks like GetMeshShaderMap is returning nullptr during the DepthPass"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]VertexFactory.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#include \"${NAME}VertexFactory.h\"\n\n#include \"Engine/Engine.h\"\n#include \"EngineGlobals.h\"\n#include \"MaterialDomain.h\"\n#include \"Materials/Material.h\"\n#include \"MeshMaterialShader.h\"\n#include \"RHIStaticStates.h\"\n#include \"ShaderParameters.h\"\n#include \"MeshDrawShaderBindings.h\"\n#include \"ShaderParameterUtils.h\"\n\nIMPLEMENT_TYPE_LAYOUT(F${NAME}VertexFactoryShaderParametersBase);\n\nvoid F${NAME}VertexFactoryShaderParametersBase::Bind(const FShaderParameterMap &ParameterMap)\n{\n}\n\nvoid F${NAME}VertexFactoryShaderParametersBase::GetElementShaderBindings(\n\t\tconst FSceneInterface *Scene,\n\t\tconst FSceneView *View,\n\t\tconst FMeshMaterialShader *Shader,\n\t\tconst EVertexInputStreamType VertexStreamType,\n\t\tERHIFeatureLevel::Type FeatureLevel,\n\t\tconst FVertexFactory *VertexFactory,\n\t\tconst FMeshBatchElement &BatchElement,\n\t\tclass FMeshDrawSingleShaderBindings &ShaderBindings,\n\t\tFVertexInputStreamArray &VertexStreams) const\n{\n}\n\nIMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT(F${NAME}MeshUniformParameters, \"${NAME}MeshVF\");\n\nclass F${NAME}MeshVertexFactoryShaderParametersVS : public F${NAME}VertexFactoryShaderParametersBase\n{\n\tDECLARE_TYPE_LAYOUT(F${NAME}MeshVertexFactoryShaderParametersVS, NonVirtual);\n\npublic:\n\tvoid Bind(const FShaderParameterMap &ParameterMap)\n\t{\n\t\tF${NAME}VertexFactoryShaderParametersBase::Bind(ParameterMap);\n\t\tInstanceBufferParameter.Bind(ParameterMap, TEXT(\"InstanceBuffer\"));\n\t}\n\n\tvoid GetElementShaderBindings(\n\t\t\tconst FSceneInterface *Scene,\n\t\t\tconst FSceneView *View,\n\t\t\tconst FMeshMaterialShader *Shader,\n\t\t\tconst EVertexInputStreamType InputStreamType,\n\t\t\tERHIFeatureLevel::Type FeatureLevel,\n\t\t\tconst FVertexFactory *VertexFactory,\n\t\t\tconst FMeshBatchElement &BatchElement,\n\t\t\tclass FMeshDrawSingleShaderBindings &ShaderBindings,\n\t\t\tFVertexInputStreamArray &VertexStreams) const\n\t{\n\t\tF${NAME}VertexFactoryShaderParametersBase::GetElementShaderBindings(Scene, View, Shader, InputStreamType, FeatureLevel, VertexFactory, BatchElement, ShaderBindings, VertexStreams);\n\n\t\tconst F${NAME}MeshVertexFactory *${NAME}MeshVF = static_cast<const F${NAME}MeshVertexFactory *>(VertexFactory);\n\t\tShaderBindings.Add(Shader->GetUniformBufferParameter<F${NAME}MeshUniformParameters>(), ${NAME}MeshVF->GetUniformBuffer());\n\n\t\tF${NAME}UserData *UserData = (F${NAME}UserData *)BatchElement.UserData;\n\n\t\tShaderBindings.Add(InstanceBufferParameter, UserData->InstanceBufferSRV);\n\t}\n\nprotected:\n\tLAYOUT_FIELD(FShaderResourceParameter, InstanceBufferParameter);\n};\n\nIMPLEMENT_TYPE_LAYOUT(F${NAME}MeshVertexFactoryShaderParametersVS);\n\nclass F${NAME}MeshVertexFactoryShaderParametersPS : public F${NAME}VertexFactoryShaderParametersBase\n{\n\tDECLARE_TYPE_LAYOUT(F${NAME}MeshVertexFactoryShaderParametersPS, NonVirtual);\n\npublic:\n\tvoid GetElementShaderBindings(\n\t\t\tconst FSceneInterface *Scene,\n\t\t\tconst FSceneView *View,\n\t\t\tconst FMeshMaterialShader *Shader,\n\t\t\tconst EVertexInputStreamType InputStreamType,\n\t\t\tERHIFeatureLevel::Type FeatureLevel,\n\t\t\tconst FVertexFactory *VertexFactory,\n\t\t\tconst FMeshBatchElement &BatchElement,\n\t\t\tclass FMeshDrawSingleShaderBindings &ShaderBindings,\n\t\t\tFVertexInputStreamArray &VertexStreams) const\n\t{\n\t\tF${NAME}VertexFactoryShaderParametersBase::GetElementShaderBindings(Scene, View, Shader, InputStreamType, FeatureLevel, VertexFactory, BatchElement, ShaderBindings, VertexStreams);\n\n\t\tconst F${NAME}MeshVertexFactory *${NAME}MeshVF = static_cast<const F${NAME}MeshVertexFactory *>(VertexFactory);\n\t\tShaderBindings.Add(Shader->GetUniformBufferParameter<F${NAME}MeshUniformParameters>(), ${NAME}MeshVF->GetUniformBuffer());\n\t}\n};\n\nIMPLEMENT_TYPE_LAYOUT(F${NAME}MeshVertexFactoryShaderParametersPS);\n\nvoid F${NAME}MeshVertexFactory::SetupMeshData(const FStaticMeshLODResources &LODResources)\n{\n\tFStaticMeshDataType LocalData;\n\n\tLODResources.VertexBuffers.PositionVertexBuffer.BindPositionVertexBuffer(this, LocalData);\n\tLODResources.VertexBuffers.StaticMeshVertexBuffer.BindTangentVertexBuffer(this, LocalData);\n\tLODResources.VertexBuffers.StaticMeshVertexBuffer.BindTexCoordVertexBuffer(this, LocalData, MAX_TEXCOORDS);\n\tLODResources.VertexBuffers.ColorVertexBuffer.BindColorVertexBuffer(this, LocalData);\n\tSetData(LocalData);\n}\n\nvoid F${NAME}MeshVertexFactory::InitRHI(FRHICommandListBase &RHICmdList)\n{\n\tFVertexDeclarationElementList Elements;\n\n\t{\n\t\tif (Data.PositionComponent.VertexBuffer != NULL)\n\t\t{\n\t\t\tElements.Add(AccessStreamComponent(Data.PositionComponent, 0));\n\t\t}\n\n\t\t// only tangent,normal are used by the stream. the binormal is derived in the shader\n\t\tuint8 TangentBasisAttributes[2] = {1, 2};\n\t\tfor (int32 AxisIndex = 0; AxisIndex < 2; AxisIndex++)\n\t\t{\n\t\t\tif (Data.TangentBasisComponents[AxisIndex].VertexBuffer != NULL)\n\t\t\t{\n\t\t\t\tElements.Add(AccessStreamComponent(Data.TangentBasisComponents[AxisIndex], TangentBasisAttributes[AxisIndex]));\n\t\t\t}\n\t\t}\n\n\t\tif (Data.ColorComponentsSRV == nullptr)\n\t\t{\n\t\t\tData.ColorComponentsSRV = GNullColorVertexBuffer.VertexBufferSRV;\n\t\t\tData.ColorIndexMask = 0;\n\t\t}\n\n\t\t// Vertex color\n\t\tif (Data.ColorComponent.VertexBuffer != NULL)\n\t\t{\n\t\t\tElements.Add(AccessStreamComponent(Data.ColorComponent, 3));\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// If the mesh has no color component, set the null color buffer on a new stream with a stride of 0.\n\t\t\t// This wastes 4 bytes of bandwidth per vertex, but prevents having to compile out twice the number of vertex factories.\n\t\t\tFVertexStreamComponent NullColorComponent(&GNullColorVertexBuffer, 0, 0, VET_Color, EVertexStreamUsage::ManualFetch);\n\t\t\tElements.Add(AccessStreamComponent(NullColorComponent, 3));\n\t\t}\n\n\t\tif (Data.TextureCoordinates.Num())\n\t\t{\n\t\t\tconst int32 BaseTexCoordAttribute = 4;\n\t\t\tfor (int32 CoordinateIndex = 0; CoordinateIndex < Data.TextureCoordinates.Num(); CoordinateIndex++)\n\t\t\t{\n\t\t\t\tElements.Add(AccessStreamComponent(\n\t\t\t\t\t\tData.TextureCoordinates[CoordinateIndex],\n\t\t\t\t\t\tBaseTexCoordAttribute + CoordinateIndex));\n\t\t\t}\n\n\t\t\tfor (int32 CoordinateIndex = Data.TextureCoordinates.Num(); CoordinateIndex < MAX_TEXCOORDS; CoordinateIndex++)\n\t\t\t{\n\t\t\t\tElements.Add(AccessStreamComponent(\n\t\t\t\t\t\tData.TextureCoordinates[Data.TextureCoordinates.Num() - 1],\n\t\t\t\t\t\tBaseTexCoordAttribute + CoordinateIndex));\n\t\t\t}\n\t\t}\n\n#if ${NAME}_ENABLE_GPU_SCENE_MESHES\n\t\tif (bAddPrimitiveIDElement)\n\t\t{\n\t\t\t// TODO: Support GPU Scene on mobile? Maybe only for CPU particles?\n\t\t\tAddPrimitiveIdStreamElement(EVertexInputStreamType::Default, Elements, 13, 0xFF);\n\t\t}\n#endif\n\n\t\t// if (Streams.Num() > 0)\n\t\t{\n\t\t\tInitDeclaration(Elements);\n\t\t\tcheck(IsValidRef(GetDeclaration()));\n\t\t}\n\t}\n}\n\nbool F${NAME}MeshVertexFactory::ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters &Parameters)\n{\n\treturn (Parameters.MaterialParameters.bIsUsedWithNiagaraMeshParticles || Parameters.MaterialParameters.bIsSpecialEngineMaterial) && (Parameters.MaterialParameters.MaterialDomain != MD_Volume);\n}\n\nvoid F${NAME}MeshVertexFactory::ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment)\n{\n\tFVertexFactory::ModifyCompilationEnvironment(Parameters, OutEnvironment);\n\n\t// Set a define so we can tell in MaterialTemplate.usf when we are compiling a mesh particle vertex factory\n\tOutEnvironment.SetDefine(TEXT(\"${NAME}_MESH_FACTORY\"), TEXT(\"1\"));\n\tOutEnvironment.SetDefine(TEXT(\"${NAME}_MESH_INSTANCED\"), TEXT(\"1\"));\n\tOutEnvironment.SetDefine(TEXT(\"USE_INSTANCING\"), TEXT(\"1\"));\n\tOutEnvironment.SetDefine(TEXT(\"USE_DITHERED_LOD_TRANSITION_FOR_INSTANCED\"), TEXT(\"0\"));\n\tOutEnvironment.SetDefine(TEXT(\"${NAME}VFLooseParameters\"), TEXT(\"${NAME}MeshVF\"));\n\n#if ${NAME}_ENABLE_GPU_SCENE_MESHES\n\tconst ERHIFeatureLevel::Type MaxSupportedFeatureLevel = GetMaxSupportedFeatureLevel(Parameters.Platform);\n\n\t// TODO: Support GPU Scene on mobile?\n\tconst bool bUseGPUScene = UseGPUScene(Parameters.Platform, MaxSupportedFeatureLevel) && MaxSupportedFeatureLevel > ERHIFeatureLevel::ES3_1;\n\tconst bool bSupportsPrimitiveIdStream = Parameters.VertexFactoryType->SupportsPrimitiveIdStream();\n\n\t// TODO: Support GPU Scene for raytracing\n\tif (bSupportsPrimitiveIdStream && bUseGPUScene)\n\t{\n\t\tOutEnvironment.SetDefine(TEXT(\"VF_SUPPORTS_PRIMITIVE_SCENE_DATA\"), TEXT(\"!(RAYHITGROUPSHADER)\"));\n\t\tOutEnvironment.SetDefine(TEXT(\"VF_REQUIRES_PER_INSTANCE_CUSTOM_DATA\"), TEXT(\"!(RAYHITGROUPSHADER)\"));\n\t}\n\telse\n\t{\n\t\tOutEnvironment.SetDefine(TEXT(\"VF_SUPPORTS_PRIMITIVE_SCENE_DATA\"), 0);\n\t\tOutEnvironment.SetDefine(TEXT(\"VF_REQUIRES_PER_INSTANCE_CUSTOM_DATA\"), 0);\n\t}\n#endif\n\n\tconst bool ContainsManualVertexFetch = OutEnvironment.GetDefinitions().Contains(\"MANUAL_VERTEX_FETCH\");\n\tif (!ContainsManualVertexFetch && RHISupportsManualVertexFetch(Parameters.Platform))\n\t{\n\t\tOutEnvironment.SetDefine(TEXT(\"MANUAL_VERTEX_FETCH\"), TEXT(\"1\"));\n\t}\n}\n\nvoid F${NAME}MeshVertexFactory::SetData(const FStaticMeshDataType &InData)\n{\n\tcheck(IsInRenderingThread());\n\tData = InData;\n\tUpdateRHI();\n}\n\n#if ${NAME}_ENABLE_GPU_SCENE_MESHES\n\t#define ${NAME}_MESH_VF_FLAGS (EVertexFactoryFlags::UsedWithMaterials \\\n\t\t| EVertexFactoryFlags::SupportsDynamicLighting \\\n\t\t| EVertexFactoryFlags::SupportsRayTracing \\\n\t\t| EVertexFactoryFlags::SupportsPrimitiveIdStream)\n#else\n\t#define ${NAME}_MESH_VF_FLAGS (EVertexFactoryFlags::UsedWithMaterials \\\n\t\t| EVertexFactoryFlags::SupportsDynamicLighting \\\n\t\t| EVertexFactoryFlags::SupportsRayTracing)\n#endif\n#define ${NAME}_MESH_VF_FLAGS_EX (${NAME}_MESH_VF_FLAGS | EVertexFactoryFlags::SupportsPrecisePrevWorldPos)\n\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(F${NAME}MeshVertexFactory, SF_Vertex, F${NAME}MeshVertexFactoryShaderParametersVS);\n#if RHI_RAYTRACING\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(F${NAME}MeshVertexFactory, SF_Compute, F${NAME}MeshVertexFactoryShaderParametersVS);\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(F${NAME}MeshVertexFactory, SF_RayHitGroup, F${NAME}MeshVertexFactoryShaderParametersVS);\n#endif\nIMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE(F${NAME}MeshVertexFactory, SF_Pixel, F${NAME}MeshVertexFactoryShaderParametersPS);\n\nIMPLEMENT_VERTEX_FACTORY_TYPE(F${NAME}MeshVertexFactory, \"/${MODULE_NAME}Shaders/${NAME}/${NAME}VertexFactory.ush\", ${NAME}_MESH_VF_FLAGS);\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Private/[NAME]/[NAME]VertexFactory.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n/*=============================================================================\nParticleVertexFactory.h: Particle vertex factory definitions.\n=============================================================================*/\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"RenderResource.h\"\n#include \"UniformBuffer.h\"\n#include \"SceneView.h\"\n#include \"Components.h\"\n#include \"SceneManagement.h\"\n#include \"MeshDrawShaderBindings.h\"\n#include \"VertexFactory.h\"\n\n// Disable this define to test disabling the use of GPU Scene with ${NAME}Mesh renderer\n// NOTE: Changing this will also require you to make a trivial change to the mesh factory shader, or it may use cached shaders\n#define ${NAME}_ENABLE_GPU_SCENE_MESHES 1\n\nclass FMaterial;\nclass FVertexBuffer;\nstruct FDynamicReadBuffer;\nstruct FShaderCompilerEnvironment;\n\n/**\n * Per frame UserData to pass to the vertex shader.\n */\nstruct F${NAME}UserData : public FOneFrameResource\n{\n\tFRHIShaderResourceView* InstanceBufferSRV;\n};\n\n/**\n* Uniform buffer for mesh instance vertex factories.\n*/\nBEGIN_GLOBAL_SHADER_PARAMETER_STRUCT(F${NAME}MeshUniformParameters, ${SCOPE})\n\n\tSHADER_PARAMETER_SRV(Buffer<float2>, VertexFetch_TexCoordBuffer)\n\tSHADER_PARAMETER_SRV(Buffer<float4>, VertexFetch_PackedTangentsBuffer)\n\tSHADER_PARAMETER_SRV(Buffer<float4>, VertexFetch_ColorComponentsBuffer)\n\tSHADER_PARAMETER(FIntVector4, VertexFetch_Parameters)\n\nEND_GLOBAL_SHADER_PARAMETER_STRUCT()\n\ntypedef TUniformBufferRef<F${NAME}MeshUniformParameters> F${NAME}MeshUniformBufferRef;\n\nclass F${NAME}MeshInstanceVertices;\n\n\n/**\n* Vertex factory for rendering instanced mesh particles with out dynamic parameter support.\n*/\nclass ${SCOPE} F${NAME}MeshVertexFactory : public FVertexFactory\n{\n\tDECLARE_VERTEX_FACTORY_TYPE(F${NAME}MeshVertexFactory);\npublic:\n\t\n\t/** Default constructor. */\n\tF${NAME}MeshVertexFactory(ERHIFeatureLevel::Type InFeatureLevel)\n\t\t: FVertexFactory(InFeatureLevel)\n\t\t, MeshIndex(-1)\n\t\t, LODIndex(-1)\n\t\t, bAddPrimitiveIDElement(true)\n\t\t, InstanceVerticesCPU(nullptr)\n\t{}\n\n\tF${NAME}MeshVertexFactory()\n\t\t: FVertexFactory(ERHIFeatureLevel::Num)\n\t\t, MeshIndex(-1)\n\t\t, LODIndex(-1)\n\t\t, bAddPrimitiveIDElement(true)\n\t\t, InstanceVerticesCPU(nullptr)\n\t{}\n\n\tERHIFeatureLevel::Type GetFeatureLevel() const { check(HasValidFeatureLevel());  return FRenderResource::GetFeatureLevel(); }\n\n\t/**\n\t* Should we cache the material's shadertype on this platform with this vertex factory?\n\t*/\n\tstatic bool ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters& Parameters);\n\n\n\t/**\n\t* Modify compile environment to enable instancing\n\t* @param OutEnvironment - shader compile environment to modify\n\t*/\n\tstatic void ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment);\n\n\n\t/**\n\t* An implementation of the interface used by TSynchronizedResource to update the resource with new data from the game thread.\n\t*/\n\tvoid SetData(const FStaticMeshDataType& InData);\n\n\t/**\n\t* Set the uniform buffer for this vertex factory.\n\t*/\n\tFORCEINLINE void SetUniformBuffer(const F${NAME}MeshUniformBufferRef& InMeshInstanceUniformBuffer)\n\t{\n\t\tMeshInstanceUniformBuffer = InMeshInstanceUniformBuffer;\n\t}\n\n\t/**\n\t* Retrieve the uniform buffer for this vertex factory.\n\t*/\n\tFORCEINLINE FRHIUniformBuffer* GetUniformBuffer() const\n\t{\n\t\treturn MeshInstanceUniformBuffer;\n\t}\n\n\tFORCEINLINE FRHIShaderResourceView* GetTangentsSRV() const\n\t{\n\t\treturn Data.TangentsSRV;\n\t}\n\n\tFORCEINLINE FRHIShaderResourceView* GetTextureCoordinatesSRV() const\n\t{\n\t\treturn Data.TextureCoordinatesSRV;\n\t}\n\n\tFORCEINLINE FRHIShaderResourceView* GetColorComponentsSRV() const\n\t{\n\t\treturn Data.ColorComponentsSRV;\n\t}\n\n\tFORCEINLINE uint32 GetColorIndexMask() const\n\t{\n\t\treturn Data.ColorIndexMask;\n\t}\n\n\tFORCEINLINE int GetNumTexcoords() const\n\t{\n\t\treturn Data.NumTexCoords;\n\t}\n\n\t// FRenderResource interface.\n\tvirtual void InitRHI(FRHICommandListBase &RHICmdList) override;\n\n\tint32 GetMeshIndex() const { return MeshIndex; }\n\tvoid SetMeshIndex(int32 InMeshIndex) { MeshIndex = InMeshIndex; }\n\n\tint32 GetLODIndex() const { return LODIndex; }\n\tvoid SetLODIndex(int32 InLODIndex) { LODIndex = InLODIndex; }\n\n\tbool IsPrimitiveIDElementEnabled() const { return bAddPrimitiveIDElement; }\n\tvoid EnablePrimitiveIDElement(bool bEnable) { bAddPrimitiveIDElement = bEnable; }\n\n\tvoid SetupMeshData(const FStaticMeshLODResources& LODResources);\n\t\nprotected:\n\tFStaticMeshDataType Data;\n\tint32 MeshIndex;\t\n\tint32 LODIndex;\n\tbool bAddPrimitiveIDElement;\n\n\t/** Uniform buffer with mesh particle parameters. */\n\tFRHIUniformBuffer* MeshInstanceUniformBuffer;\n\t\n\t/** Used to remember this in the case that we reuse the same vertex factory for multiple renders . */\n\tF${NAME}MeshInstanceVertices* InstanceVerticesCPU;\n};\n\n/**\n* Base class for ${NAME} vertex factory shader parameters.\n*/\nclass F${NAME}VertexFactoryShaderParametersBase : public FVertexFactoryShaderParameters\n{\n\tDECLARE_TYPE_LAYOUT(F${NAME}VertexFactoryShaderParametersBase, NonVirtual);\n\npublic:\n\tvoid Bind(const FShaderParameterMap& ParameterMap);\n\tvoid GetElementShaderBindings(\n\t\tconst FSceneInterface* Scene,\n\t\tconst FSceneView* View,\n\t\tconst FMeshMaterialShader* Shader,\n\t\tconst EVertexInputStreamType VertexStreamType,\n\t\tERHIFeatureLevel::Type FeatureLevel,\n\t\tconst FVertexFactory* VertexFactory,\n\t\tconst FMeshBatchElement& BatchElement,\n\t\tclass FMeshDrawSingleShaderBindings& ShaderBindings,\n\t\tFVertexInputStreamArray& VertexStreams) const;\n};\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Public/[NAME]/$inst[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## World\n\n1. Open the \"Add Actors\" panel and search for \"Example Indirect Instancing\"\n2. Drag and drop that actor into your world\n3. Apply a material and mesh\n4. Select the \"ExampleIndirectInstancingComponent\" under the details hierarchy and click the \"Add Instances\" button to add more instances\n5. Use your camera and fly into the meshes, they should be pushed away\n6. Enjoy, and get digging into the code\n\n## Notes\n\n-   Shadows are broken until UE 5.1. See: https://github.com/EpicGames/UnrealEngine/blob/d11782b9046e9d0b130309591e4efc57f4b8b037/Engine/Plugins/Experimental/VirtualHeightfieldMesh/Source/VirtualHeightfieldMesh/Private/VirtualHeightfieldMeshSceneProxy.cpp#L538\n-   Vertex velocities are not set up so you'll see some ghosting when using any type of temporal anti-aliasing (this is on my todo list to add)\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Public/[NAME]/[NAME]Actor.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"GameFramework/Actor.h\"\n#include \"${NAME}Actor.generated.h\"\n\nUCLASS(hidecategories = (Cooking, Input, LOD), MinimalAPI)\nclass A${NAME} : public AActor\n{\n\tGENERATED_UCLASS_BODY()\n\nprivate:\n\tUPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = \"true\"))\n\tclass U${NAME}Component* ${NAME}Component;\n\nprotected:\n};\n"
  },
  {
    "path": "unreal-engine/src/templates/instancing/compute-instanced-static-mesh-component/Plugin/Source/[MODULE]/Public/[NAME]/[NAME]Component.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n// Adapted from the VirtualHeightfieldMesh plugin\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"Components/PrimitiveComponent.h\"\n#include \"${NAME}Component.generated.h\"\n\nclass UMaterialInterface;\n\nUCLASS(Blueprintable, ClassGroup = Rendering, hideCategories = (Activation, Collision, Cooking, HLOD, Navigation, Object, Physics, VirtualTexture))\nclass ${SCOPE} U${NAME}Component : public UPrimitiveComponent\n{\n\tGENERATED_UCLASS_BODY()\n\nprotected:\n\t/** Material applied to each instance. */\n\tUPROPERTY(EditAnywhere, Category = Rendering)\n\tUMaterialInterface* Material = nullptr;\n\n\tUPROPERTY(EditAnywhere, Category = Rendering)\n\tUStaticMesh* StaticMesh = nullptr;\n\npublic:\n\n\t/** LOD level to use when rendering the mesh */\n\tUPROPERTY(EditAnywhere, Category = Rendering)\n\tint LODIndex = 0;\n\n\tUMaterialInterface* GetMaterial() const { return Material; }\n\tUStaticMesh* GetStaticMesh() const { return StaticMesh; }\n\n\tUFUNCTION(BlueprintCallable, CallInEditor, Category = Rendering)\n\tvoid AddInstances();\n\nprotected:\n\t//~ Begin UActorComponent Interface\n\tvirtual void OnRegister() override;\n\tvirtual void OnUnregister() override;\n\tvirtual void ApplyWorldOffset(const FVector& InOffset, bool bWorldShift) override;\n\t//~ End UActorComponent Interface\n\n\t//~ Begin USceneComponent Interface\n\tvirtual bool IsVisible() const override;\n\tvirtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;\n\t//~ EndUSceneComponent Interface\n\n\t//~ Begin UPrimitiveComponent Interface\n\tvirtual FPrimitiveSceneProxy* CreateSceneProxy() override;\n\tvirtual bool SupportsStaticLighting() const override { return true; }\n\tvirtual void SetMaterial(int32 ElementIndex, class UMaterialInterface* Material) override;\n\tvirtual UMaterialInterface* GetMaterial(int32 Index) const override { return Material; }\n\tvirtual void GetUsedMaterials(TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials = false) const override;\n\t//~ End UPrimitiveComponent Interface\n};\n"
  },
  {
    "path": "unreal-engine/src/templates/nodes/dynamic/Plugin/Source/[MODULE]/Private/[NAME]MaterialExpression.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}/Public/${NAME}MaterialExpression.h\"\n\n#include \"Materials/MaterialExpressionCustom.h\"\n#include \"MaterialCompiler.h\"\n#include \"MaterialGraph/MaterialGraphNode.h\"\n\n// Used by the LOCTEXT() macro. See: https://docs.unrealengine.com/5.0/en-US/text-localization-in-unreal-engine/\n#define LOCTEXT_NAMESPACE \"MaterialExpression\"\n\nUMaterialExpression${NAME}::UMaterialExpression${NAME}(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\t// Structure to hold one-time initialization\n\tstruct FConstructorStatics\n\t{\n\t\tFText NAME_Output;\n\t\t// This is used for placing the expression in the correct category\n\t\t// You can reference multiple categories here, see: https://github.com/EpicGames/UnrealEngine/blob/ue5-main/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp#L18670\n\t\tFConstructorStatics()\n\t\t\t: NAME_Output(LOCTEXT( \"Output\", \"Output\" )) // These can be anything. Like: NAME_Math(LOCTEXT( \"Math\", \"Math\" ))\n\t\t{\n\t\t}\n\t};\n\tstatic FConstructorStatics ConstructorStatics;\n\n\tOutputTargetsRequired = {\n\t\tFMaterialExpression${NAME}Input {\n\t\t\t\"Required Default Output\",\n\t\t\t1\n\t\t}\n\t};\n\n#if WITH_EDITORONLY_DATA\n\tMenuCategories.Add(ConstructorStatics.NAME_Output);\n#endif\n\n#if WITH_EDITOR\n\tOutputs.Reset(); // Remove the default output pin\n#endif\n}\n\n#if WITH_EDITOR\n\nint32 UMaterialExpression${NAME}::Compile(class FMaterialCompiler* Compiler, int32 OutputIndex)\n{\n\tif (OutputTargetsRequired.IsValidIndex(OutputIndex))\n\t{\n\t\tif (OutputTargetsRequired[OutputIndex].Input.Expression)\n\t\t{\n\t\t\tint32 CodeInput = OutputTargetsRequired[OutputIndex].Input.IsConnected() ? OutputTargetsRequired[OutputIndex].Input.Compile(Compiler) : Compiler->Constant(0.f);\n\t\t\treturn Compiler->CustomOutput(this, OutputIndex, CodeInput);\n\t\t}\n\t}\n\t\n\tif (OutputTargets.IsValidIndex(OutputIndex - OutputTargetsRequired.Num()))\n\t{\n\t\tif (OutputTargets[OutputIndex - OutputTargetsRequired.Num()].Input.Expression)\n\t\t{\n\t\t\tint32 CodeInput = OutputTargets[OutputIndex - OutputTargetsRequired.Num()].Input.IsConnected() ? OutputTargets[OutputIndex - 1].Input.Compile(Compiler) : Compiler->Constant(0.f);\n\t\t\treturn Compiler->CustomOutput(this, OutputIndex, CodeInput);\n\t\t}\n\t}\n\n\treturn INDEX_NONE;\n}\n\nvoid UMaterialExpression${NAME}::GetCaption(TArray<FString>& OutCaptions) const\n{\n\tOutCaptions.Add(FString(TEXT(\"Dynamic Output\")));\n}\n\n#endif // WITH_EDITOR\n\nint32 UMaterialExpression${NAME}::GetNumOutputs() const\n{\n\treturn OutputTargets.Num() + OutputTargetsRequired.Num();\n}\n\nFString UMaterialExpression${NAME}::GetFunctionName() const\n{\n\treturn TEXT(\"GetShadeupDynamicMaterialOutput\");\n}\n\nFString UMaterialExpression${NAME}::GetDisplayName() const\n{\n\treturn TEXT(\"Shadeup Dynamic Ouput\");\n}\n\nFName UMaterialExpression${NAME}::GetInputName(int32 InputIndex) const\n{\n\tif (InputIndex < OutputTargetsRequired.Num())\n\t{\n\t\treturn FName(OutputTargetsRequired[InputIndex].Name);\n\t}else\n\t{\n\t\treturn FName(OutputTargets[InputIndex - OutputTargetsRequired.Num()].Name);\n\t}\n}\n\nconst TArray<FExpressionInput*> UMaterialExpression${NAME}::GetInputs()\n{\n\tTArray<FExpressionInput*> OutInputs;\n\tfor (auto& Input : OutputTargetsRequired)\n\t{\n\t\tOutInputs.Add(&Input.Input);\n\t}\n\tfor (auto& Input : OutputTargets)\n\t{\n\t\tOutInputs.Add(&Input.Input);\n\t}\n\treturn OutInputs;\n}\n\nFExpressionInput* UMaterialExpression${NAME}::GetInput(int32 InputIndex)\n{\n\tif (InputIndex < OutputTargetsRequired.Num())\n\t{\n\t\treturn &OutputTargetsRequired[InputIndex].Input;\n\t}else\n\t{\n\t\treturn &OutputTargets[InputIndex - OutputTargetsRequired.Num()].Input;\n\t}\n}\n\nvoid UMaterialExpression${NAME}::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)\n{\n\tSuper::PostEditChangeProperty(PropertyChangedEvent);\n\n\tif (PropertyChangedEvent.MemberProperty)\n\t{\n\t\tconst FName PropertyName = PropertyChangedEvent.MemberProperty->GetFName();\n\t\tif (PropertyName == GET_MEMBER_NAME_CHECKED(UMaterialExpression${NAME}, OutputTargets))\n\t\t{\n\t\t\tif (UMaterialGraphNode* MatGraphNode = Cast<UMaterialGraphNode>(GraphNode))\n\t\t\t{\n\t\t\t\tMatGraphNode->RecreateAndLinkNode();\n\t\t\t}\n\t\t}\n\t}\n}\n\n#undef LOCTEXT_NAMESPACE"
  },
  {
    "path": "unreal-engine/src/templates/nodes/dynamic/Plugin/Source/[MODULE]/Public/[NAME]MaterialExpression.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n/**\n * Absolute value material expression for user-defined materials\n *\n */\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"UObject/ObjectMacros.h\"\n#include \"MaterialExpressionIO.h\"\n#include \"Materials/MaterialExpressionCustomOutput.h\"\n#include \"${NAME}MaterialExpression.generated.h\"\n\nUSTRUCT()\nstruct FMaterialExpression${NAME}Input\n{\n\tGENERATED_BODY()\n\n\t// Name of the target\n\tUPROPERTY(EditAnywhere)\n\tFString Name;\n\t\n\t// Number of components to output (float1, float2, float3, float4)\n\tUPROPERTY(EditAnywhere)\n\tuint32 NumComponents = 1;\n\n\tUPROPERTY(meta = (RequiredInput = \"true\"))\n\tFExpressionInput Input;\n};\n\nUCLASS(MinimalAPI, collapsecategories, hidecategories=Object)\nclass UMaterialExpression${NAME} : public UMaterialExpressionCustomOutput\n{\n\tGENERATED_UCLASS_BODY()\n\n\tUPROPERTY()\n\tTArray<FMaterialExpression${NAME}Input> OutputTargetsRequired;\n\t\n\tUPROPERTY(EditAnywhere)\n\tTArray<FMaterialExpression${NAME}Input> OutputTargets;\n\n\t//~ Begin UMaterialExpression Interface\n#if WITH_EDITOR\n\tvirtual int32 Compile(class FMaterialCompiler* Compiler, int32 OutputIndex) override;\n\tvirtual void GetCaption(TArray<FString>& OutCaptions) const override;\n#endif\n\t//~ End UMaterialExpression Interface\n\n\t//~ Begin UMaterialExpressionCustomOutput Interface\n\tvirtual int32 GetNumOutputs() const override;\n\tvirtual FString GetFunctionName() const override;\n\tvirtual FString GetDisplayName() const override;\n\tvirtual FName GetInputName(int32 InputIndex) const override;\n\tvirtual const TArray<FExpressionInput*> GetInputs() override;\n\tvirtual FExpressionInput* GetInput(int32 InputIndex) override;\n\tvirtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;\n\tvirtual uint32 GetInputType(int32 InputIndex) override\n\t{\n\t\tif (InputIndex < 1)\n\t\t{\n\t\t\treturn OutputTargetsRequired[InputIndex].NumComponents;\n\t\t}else\n\t\t{\n\t\t\treturn OutputTargets[InputIndex - 1].NumComponents;\n\t\t}\n\t}\n\t//~ End UMaterialExpressionCustomOutput Interface\n};\n\n\n\n"
  },
  {
    "path": "unreal-engine/src/templates/nodes/dynamic/Plugin/Source/[MODULE]/Public/[NAME]_readme.md",
    "content": "# ${NAME} usage\n\n## Material Graph\n\n1. Right-click and search for \"Shadeup\" and add the relevant node\n2. Enjoy, and get digging into the code\n\nFeel free to delete this file\n"
  },
  {
    "path": "unreal-engine/src/templates/nodes/fn/Plugin/Source/[MODULE]/Private/[NAME]MaterialExpression.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}/Public/${NAME}MaterialExpression.h\"\n\n#include \"MaterialCompiler.h\"\n\n// Used by the LOCTEXT() macro. See: https://docs.unrealengine.com/5.0/en-US/text-localization-in-unreal-engine/\n#define LOCTEXT_NAMESPACE \"MaterialExpression\"\n\nUMaterialExpression${NAME}::UMaterialExpression${NAME}(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\t// Structure to hold one-time initialization\n\tstruct FConstructorStatics\n\t{\n\t\tFText NAME_Functions;\n\t\t// This is used for placing the expression in the correct category\n\t\t// You can reference multiple categories here, see: https://github.com/EpicGames/UnrealEngine/blob/ue5-main/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp#L18670\n\t\tFConstructorStatics()\n\t\t\t: NAME_Functions(LOCTEXT( \"Functions\", \"Functions\" )) // These can be anything. Like: NAME_Math(LOCTEXT( \"Math\", \"Math\" ))\n\t\t{\n\t\t}\n\t};\n\tstatic FConstructorStatics ConstructorStatics;\n\n#if WITH_EDITORONLY_DATA\n\tMenuCategories.Add(ConstructorStatics.NAME_Functions);\n#endif\n}\n\n#if WITH_EDITOR\nint32 UMaterialExpression${NAME}::Compile( FMaterialCompiler* Compiler, int32 OutputIndex)\n{\n\tint32 Result=INDEX_NONE;\n\n\t// Check if the input is hooked up, Input is a member we defined in the header for this material expresion.\n\t// Note: You can define more than one input.\n\n\tif( !Input.GetTracedInput().Expression )\n\t{\n\t\t// an input expression must exist\n\t\tResult = Compiler->Errorf( TEXT(\"Missing ${NAME} input\") );\n\t}\n\telse\n\t{\n\t\t// We get references to inputs/expressions in the form of an int32.\n\t\t// These can be passed around and operated on using the FMaterialCompiler::* functions.\n\t\t// A list of available functions can be found here: https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/FMaterialCompiler/\n\n\t\t// First we store a reference to the input expression.\n\t\tint32 InputValue = Input.Compile(Compiler);\n\n\t\t// Then cast to a float3 to ensure the input is a vector.\n\t\tint32 InputVector = Compiler->ForceCast(InputValue, MCT_Float3);\n\n\t\t// Then get the length^2 of the vector.\n\t\tint32 DotResult = Compiler->Dot(InputVector, InputVector);\n\n\t\t// Then sqrt the result.\n\t\tint32 RootResult = Compiler->SquareRoot(DotResult);\n\n\t\t// Finally, we return the result.\n\t\tResult = RootResult;\n\t}\n\n\treturn Result;\n}\n\nvoid UMaterialExpression${NAME}::GetCaption(TArray<FString>& OutCaptions) const\n{\n\tOutCaptions.Add(TEXT(\"Shadeup Material Function\"));\n}\n#endif // WITH_EDITOR\n\n#undef LOCTEXT_NAMESPACE"
  },
  {
    "path": "unreal-engine/src/templates/nodes/fn/Plugin/Source/[MODULE]/Public/[NAME]MaterialExpression.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n/**\n * Absolute value material expression for user-defined materials\n *\n */\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"UObject/ObjectMacros.h\"\n#include \"MaterialExpressionIO.h\"\n#include \"Materials/MaterialExpression.h\"\n#include \"${NAME}MaterialExpression.generated.h\"\n\nUCLASS(MinimalAPI, collapsecategories, hidecategories=Object)\nclass UMaterialExpression${NAME} : public UMaterialExpression\n{\n\tGENERATED_UCLASS_BODY()\n\n\t/** Link to the input expression to be evaluated */\n\tUPROPERTY()\n\tFExpressionInput Input;\n\n\n\t//~ Begin UMaterialExpression Interface\n#if WITH_EDITOR\n\tvirtual int32 Compile(class FMaterialCompiler* Compiler, int32 OutputIndex) override;\n\tvirtual void GetCaption(TArray<FString>& OutCaptions) const override;\n#endif\n\t//~ End UMaterialExpression Interface\n\n};\n\n\n\n"
  },
  {
    "path": "unreal-engine/src/templates/nodes/input/Plugin/Source/[MODULE]/Private/[NAME]MaterialExpression.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}/Public/${NAME}MaterialExpression.h\"\n\n#include \"Materials/MaterialExpressionCustom.h\"\n\n#include \"MaterialCompiler.h\"\n\n// Used by the LOCTEXT() macro. See: https://docs.unrealengine.com/5.0/en-US/text-localization-in-unreal-engine/\n#define LOCTEXT_NAMESPACE \"MaterialExpression\"\n\nUMaterialExpression${NAME}::UMaterialExpression${NAME}(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\t// Structure to hold one-time initialization\n\tstruct FConstructorStatics\n\t{\n\t\tFText NAME_Input;\n\t\t// This is used for placing the expression in the correct category\n\t\t// You can reference multiple categories here, see: https://github.com/EpicGames/UnrealEngine/blob/ue5-main/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp#L18670\n\t\tFConstructorStatics()\n\t\t\t: NAME_Input(LOCTEXT( \"Input\", \"Input\" )) // These can be anything. Like: NAME_Math(LOCTEXT( \"Math\", \"Math\" ))\n\t\t{\n\t\t}\n\t};\n\tstatic FConstructorStatics ConstructorStatics;\n\n#if WITH_EDITORONLY_DATA\n\tMenuCategories.Add(ConstructorStatics.NAME_Input);\n#endif\n\n#if WITH_EDITORONLY_DATA\n\tbShowOutputNameOnPin = true;\n\n\tOutputs.Reset();\n\tOutputs.Add(FExpressionOutput(TEXT(\"Output 1\"), 1, 1, 0, 0, 0));\n\tOutputs.Add(FExpressionOutput(TEXT(\"Output 2\"), 1, 0, 1, 0, 0));\n#endif\n}\n\n#if WITH_EDITOR\nint32 UMaterialExpression${NAME}::Compile( FMaterialCompiler* Compiler, int32 OutputIndex)\n{\n\t// We return a reference to an expression for the current OutputIndex in the form of an int32.\n\t// These can be created by and operated on using the FMaterialCompiler::* functions.\n\t// A list of available functions can be found here: https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/FMaterialCompiler/\n\n\tif (OutputIndex == 0)\n\t{\n\t\treturn Compiler->Constant(1234);\n\t}\n\telse if (OutputIndex == 1)\n\t{\n\t\t// We can write custom HLSL code using the CustomExpression below.\n\t\tUMaterialExpressionCustom* CustomExpression = NewObject<UMaterialExpressionCustom>(this); // We're using this UObject once and letting the garbage collector clean it up\n\n\t\tCustomExpression->Code = TEXT(\"return 1234;\");\n\n\t\t// You could also call to some custom code inside of a compute shader or vertex factory to access resources there.\n\t\t// CustomExpression->Code = TEXT(\"return GetMyCustomDataFromComputeShader(Parameters);\"); // \"Parameters\" here refers to the \"global\" unreal material parameters struct, you can use this to get context (like position).\n\n\t\tint32 ReturnValue = CustomExpression->Compile(Compiler, 0);\n\n\t\treturn ReturnValue;\n\t}\n\n\treturn Compiler->Errorf(TEXT(\"Invalid input parameter\"));\n}\n\nvoid UMaterialExpression${NAME}::GetCaption(TArray<FString>& OutCaptions) const\n{\n\tOutCaptions.Add(TEXT(\"Shadeup Custom Inputs Node\"));\n}\n#endif // WITH_EDITOR\n\n#undef LOCTEXT_NAMESPACE"
  },
  {
    "path": "unreal-engine/src/templates/nodes/input/Plugin/Source/[MODULE]/Public/[NAME]MaterialExpression.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n/**\n * Absolute value material expression for user-defined materials\n *\n */\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"UObject/ObjectMacros.h\"\n#include \"MaterialExpressionIO.h\"\n#include \"Materials/MaterialExpression.h\"\n#include \"${NAME}MaterialExpression.generated.h\"\n\nUCLASS(MinimalAPI, collapsecategories, hidecategories=Object)\nclass UMaterialExpression${NAME} : public UMaterialExpression\n{\n\tGENERATED_UCLASS_BODY()\n\n\n\t//~ Begin UMaterialExpression Interface\n#if WITH_EDITOR\n\tvirtual int32 Compile(class FMaterialCompiler* Compiler, int32 OutputIndex) override;\n\tvirtual void GetCaption(TArray<FString>& OutCaptions) const override;\n#endif\n\t//~ End UMaterialExpression Interface\n\n};\n\n\n\n"
  },
  {
    "path": "unreal-engine/src/templates/nodes/output/Plugin/Source/[MODULE]/Private/[NAME]MaterialExpression.cpp",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n#include \"${MODULE_NAME}/Public/${NAME}MaterialExpression.h\"\n\n#include \"Materials/MaterialExpressionCustom.h\"\n\n#include \"MaterialCompiler.h\"\n\n// Used by the LOCTEXT() macro. See: https://docs.unrealengine.com/5.0/en-US/text-localization-in-unreal-engine/\n#define LOCTEXT_NAMESPACE \"MaterialExpression\"\n\nUMaterialExpression${NAME}::UMaterialExpression${NAME}(const FObjectInitializer& ObjectInitializer)\n\t: Super(ObjectInitializer)\n{\n\t// Structure to hold one-time initialization\n\tstruct FConstructorStatics\n\t{\n\t\tFText NAME_Output;\n\t\t// This is used for placing the expression in the correct category\n\t\t// You can reference multiple categories here, see: https://github.com/EpicGames/UnrealEngine/blob/ue5-main/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp#L18670\n\t\tFConstructorStatics()\n\t\t\t: NAME_Output(LOCTEXT( \"Output\", \"Output\" )) // These can be anything. Like: NAME_Math(LOCTEXT( \"Math\", \"Math\" ))\n\t\t{\n\t\t}\n\t};\n\tstatic FConstructorStatics ConstructorStatics;\n\n#if WITH_EDITORONLY_DATA\n\tMenuCategories.Add(ConstructorStatics.NAME_Output);\n#endif\n\n#if WITH_EDITORONLY_DATA\n\tOutputs.Reset(); // Remove the default output pin\n#endif\n}\n\n#if WITH_EDITOR\nint32 UMaterialExpression${NAME}::Compile( FMaterialCompiler* Compiler, int32 OutputIndex)\n{\n\tint32 CodeInput = INDEX_NONE;\n\n\t// Generates function names GetVolumetricAdvanceMaterialOutput{index} used in BasePixelShader.usf.\n\tif (OutputIndex == 0)\n\t{\n\t\t// If MyInput1 is connected, use it, otherwise return 0\n\t\tCodeInput = MyInput1.IsConnected() ? MyInput1.Compile(Compiler) : Compiler->Constant(0);\n\t}\n\telse if (OutputIndex == 1)\n\t{\n\t\tCodeInput = MyInput2.IsConnected() ? MyInput2.Compile(Compiler) : Compiler->Constant(0);\n\t}\n\n\treturn Compiler->CustomOutput(this, OutputIndex, CodeInput);\n}\n\nvoid UMaterialExpression${NAME}::GetCaption(TArray<FString>& OutCaptions) const\n{\n\tOutCaptions.Add(TEXT(\"Shadeup Advanced Output Node\"));\n}\n#endif // WITH_EDITOR\n\nint32 UMaterialExpression${NAME}::GetNumOutputs() const\n{\n\treturn 2;\n}\n\nFString UMaterialExpression${NAME}::GetFunctionName() const\n{\n\t// This is the function name used when getting the output values of this node in a shader (vertex factory, compute shader, etc.)\n\t// Example usage: GetVolumetricAdvanceMaterialOutput0(MaterialParameters) // Grabs the first output value\n\treturn TEXT(\"GetShadeupAdvancedMaterialOutput\");\n}\n\nFString UMaterialExpression${NAME}::GetDisplayName() const\n{\n\treturn TEXT(\"Shadeup Advanced Output Node\");\n}\n\n#undef LOCTEXT_NAMESPACE"
  },
  {
    "path": "unreal-engine/src/templates/nodes/output/Plugin/Source/[MODULE]/Public/[NAME]MaterialExpression.h",
    "content": "// Copyright Epic Games, Inc. All Rights Reserved.\n\n/**\n * Absolute value material expression for user-defined materials\n *\n */\n\n#pragma once\n\n#include \"CoreMinimal.h\"\n#include \"UObject/ObjectMacros.h\"\n#include \"MaterialExpressionIO.h\"\n#include \"Materials/MaterialExpressionCustomOutput.h\"\n#include \"${NAME}MaterialExpression.generated.h\"\n\nUCLASS(MinimalAPI, collapsecategories, hidecategories=Object)\nclass UMaterialExpression${NAME} : public UMaterialExpressionCustomOutput\n{\n\tGENERATED_UCLASS_BODY()\n\n\t/** Input pin */\n\tUPROPERTY(meta = (RequiredInput = \"false\", ToolTip = \"Here's the tooltip text.\"))\n\tFExpressionInput MyInput1;\n\n\t/** Input pin */\n\tUPROPERTY(meta = (RequiredInput = \"false\", ToolTip = \"Here's the tooltip text.\"))\n\tFExpressionInput MyInput2;\n\n\t/** This is available in the material editor when selecting this node */\n\tUPROPERTY(EditAnywhere, Category = \"MyCategory\")\n\tfloat CustomEditorParameter;\n\n\t//~ Begin UMaterialExpression Interface\n#if WITH_EDITOR\n\tvirtual int32 Compile(class FMaterialCompiler* Compiler, int32 OutputIndex) override;\n\tvirtual void GetCaption(TArray<FString>& OutCaptions) const override;\n#endif\n\t//~ End UMaterialExpression Interface\n\n\t//~ Begin UMaterialExpressionCustomOutput Interface\n\tvirtual int32 GetNumOutputs() const override;\n\tvirtual FString GetFunctionName() const override;\n\tvirtual FString GetDisplayName() const override;\n\t//~ End UMaterialExpressionCustomOutput Interface\n};\n\n\n\n"
  },
  {
    "path": "unreal-engine/src/types/actor.js",
    "content": "import BaseGenerator from \"./base.js\";\n\nexport default class ActorGenerator extends BaseGenerator {\n\tverify() {\n\t\tsuper.verify();\n\t\t\n\t\tif (this.name[0] != \"A\") {\n\t\t\tthis.error(this.data.identifier, `Actor name must start with the letter \"A\" (Change \"${this.name}\" to \"A${this.name}\")`);\n\t\t}\n\n\t\tthis.nameWithoutPrefix = this.name.substr(1, this.name.length - 1);\n\t}\n\t\n\tgenerate() {\n\t\tsuper.generate();\n\n\t\tthis.includeLib();\n\t\t\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Private/ActorTemplate.cpp\",\n\t\t\toutput: `Source/${this.file.module}/Private/Actors/${this.nameWithoutPrefix}.cpp`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Public/ActorTemplate.h\",\n\t\t\toutput: `Source/${this.file.module}/Public/Actors/${this.nameWithoutPrefix}.h`,\n\t\t\tdata: this\n\t\t});\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/types/base.js",
    "content": "import fs from \"fs\";\nimport path from \"path\";\nimport UTIL from \"../util.js\";\n\nimport ParsedValue from \"./value.js\";\n\nimport * as url from 'url';\nconst __filename = url.fileURLToPath(import.meta.url);\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url));\n\nexport default class BaseGenerator {\n\tconstructor(file, data) {\n\t\tthis.file = file;\n\t\tthis.data = data;\n\n\t\tthis.name = data.identifier.text;\n\n\t\tthis.shaders = [];\n\t\tthis.codes = [];\n\t\tthis.functions = [];\n\t\tthis.property = [];\n\n\t\tthis.properties = new Map();\n\t\tfor (let item of this.data.block.items) {\n\t\t\tif (item.type === \"shader\") {\n\t\t\t\tthis.shaders.push(item);\n\t\t\t}else if (item.type === \"cpp\") {\n\t\t\t\tthis.codes.push(item);\n\t\t\t}else if (item.type === \"function\") {\n\t\t\t\tthis.functions.push(item);\n\t\t\t}else if (item.type === \"property\") {\n\t\t\t\tthis.property.push(item);\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tcode(scope) {\n\t\tlet code = \"\";\n\t\tfor (let item of this.codes) {\n\t\t\tif (item.visibility == scope)\n\t\t\t\tcode += item.code.text;\n\t\t}\n\n\t\treturn UTIL.RemoveFrontWhitespace(code);\n\t}\n\n\toutput(opts) {\n\t\tlet template = opts.template;\n\t\tlet outputFile = opts.output;\n\t\tlet data = opts.data;\n\t\tlet context = opts.context;\n\t\tlet version = require(\"../../package.json\").version;\n\n\t\tlet realTemplatePath = path.join(__dirname, \"../template/\", template);\n\t\tlet raw = fs.readFileSync(realTemplatePath, \"utf8\");\n\t\t\n\t\tlet moduleName = this.file.module;\n\t\tconst PLUGIN_NAME = this.file.plugin;\n\t\tconst MODULE_NAME = moduleName;\n\t\tconst SCOPE = moduleName.toUpperCase() + \"_API\";\n\t\tconst CLASS_NAME = moduleName + data.name;\n\t\tconst NAME_NO_PREFIX = this.nameWithoutPrefix;\n\t\tconst NAME = data.name;\n\t\tconst instance = this;\n\n\t\tconst PUBLIC_CODE = this.code(\"Public\");\n\t\tconst PRIVATE_CODE = this.code(\"Private\");\n\n\t\tlet generated = (() => {\n\t\t\treturn eval(\"`\" + raw + \"`\");\n\t\t})();\n\n\t\tgenerated = `/*\n* This file was generated by Shadeup.\n* Template: ${template}\n* Shadeup Version: ${version}\n* Shader Name: ${data.name}\n*/\n\n${generated}`;\n\n\t\tlet realOutFile = path.join(this.file.outputDir, outputFile);\n\t\tfs.mkdirSync(path.dirname(realOutFile), {recursive: true});\n\t\tfs.writeFileSync(realOutFile, generated);\n\n\t\tconsole.log(\"Successfully generated\", realOutFile);\n\t}\n\n\tprop(name, def) {\n\t\tif (this.properties.has(name)) {\n\t\t\treturn this.properties.get(name).value();\n\t\t}else{\n\t\t\treturn def;\n\t\t}\n\t}\n\n\terror(context, message) {\n\t\tthis.file.error(context, message);\n\t\tthrow new Error(\"Exiting\");\n\t}\n\n\tcheckRoot(key, type, msg) {\n\t\tlet r = new ParsedValue(this.file, {location: this.data.block.location, value: this.data.block});\n\t\treturn this.checkKey(r, key, type, msg);\n\t}\n\n\tcheckKey(base, key, type, msg) {\n\t\tlet real = base.value();\n\t\tif (!real[key]) {\n\t\t\tthis.error(base.data || base, msg);\n\t\t}\n\t\t\n\t\tif (typeof type === \"string\") {\n\t\t\tif (real[key].type !== type) {\n\t\t\t\tthis.error(real[key].data, msg + \" (wrong type)\");\n\t\t\t}\n\t\t}else if (Array.isArray(type)) {\n\t\t\tif (!type.includes(real[key].type)) {\n\t\t\t\tthis.error(real[key].data, msg + \" (wrong type)\");\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tincludeLib() {\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"lib/ShadeupLib.h\",\n\t\t\toutput: `Source/${this.file.module}/Public/ShadeupLib.h`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"lib/ShadeupLib.cpp\",\n\t\t\toutput: `Source/${this.file.module}/Private/ShadeupLib.cpp`,\n\t\t\tdata: this\n\t\t});\n\t}\n\t\n\tverify() {\n\t\tif (this.data.inherits) {\n\t\t\tfor (let i of this.data.inherits.items.items) {\n\t\t\t\tlet name = i.text;\n\t\t\t\tif (!this.file.definitions.has(name)) {\n\t\t\t\t\tthis.error(i, `Trying to inherit an undefined parent \"${name}\"`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i of this.data.inherits.items.items) {\n\t\t\t\tlet name = i.text;\n\t\t\t\tlet definition = this.file.definitions.get(name);\n\t\t\t\tthis.shaders = [...definition.shaders, ...this.shaders];\n\t\t\t\tthis.functions = [...definition.functions, ...this.functions];\n\t\t\t\tthis.property = [...definition.property, ...this.property];\n\t\t\t}\n\t\t}\n\n\t\tfor (let prop of this.property) {\n\t\t\tlet name = prop.identifier.text;\n\t\t\tlet value = new ParsedValue(this.file, prop.value);\n\t\t\tif (!this.properties.has(name)) {\n\t\t\t\tif (prop.operator.text == \"=\" || prop.operator.text == \"+=\") {\n\t\t\t\t\tthis.properties.set(name, value);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tlet baseValue = this.properties.get(name);\n\t\t\t\tif (prop.operator.text == \"=\") {\n\t\t\t\t\tthis.properties.set(name, value);\n\t\t\t\t}else if (prop.operator.text == \"+=\") {\n\t\t\t\t\tlet baseType = baseValue.type;\n\n\t\t\t\t\tif (baseType == \"array\") {\n\t\t\t\t\t\tif (value.type == \"array\") {\n\t\t\t\t\t\t\tbaseValue.data.value.values = [...baseValue.data.value.values, ...value.data.value.values];\n\t\t\t\t\t\t}else if (value.type == \"number\") {\n\t\t\t\t\t\t\tbaseValue.data.value.values = [...baseValue.data.value.values, value.data];\n\t\t\t\t\t\t}else if (value.type == \"string\") {\n\t\t\t\t\t\t\tbaseValue.data.value.values = [...baseValue.data.value.values, value.data];\n\t\t\t\t\t\t}else if (value.type == \"boolean\") {\n\t\t\t\t\t\t\tbaseValue.data.value.values = [...baseValue.data.value.values, value.data];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.error(prop.operator, `Can't add a value of type \"${value.type}\" to an array`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.error(prop.operator, \"Cannot add to a non-array property\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgenerate() {\n\t\t// Setup necessary module files (we write the same files multiple times when there are multiple .shadeup files provided in the cli input)\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Private/ModuleTemplate.cpp\",\n\t\t\toutput: `Source/${this.file.module}/Private/${this.file.module}.cpp`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Public/ModuleTemplate.h\",\n\t\t\toutput: `Source/${this.file.module}/Public/${this.file.module}.h`,\n\t\t\tdata: this\n\t\t});\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/types/compute.js",
    "content": "import ShaderGenerator from \"./shader.js\";\nimport ParsedValue from \"./value.js\";\n\nexport default class ComputeGenerator extends ShaderGenerator {\n\tverify() {\n\t\tsuper.verify();\n\t\t// console.log([...this.properties.entries()].map(e => `${e[0]} = ${JSON.stringify(e[1].flatten())}`));\n\n\t\tthis.ShaderBase = this.prop(\"ExtendMaterial\", false) ? \"Material\" : \"Global\";\n\t\t\n\t\tthis.checkRoot(\"NumThreads\", \"array\", \"Compute shader must have a NumThreads array property (did you forget to add NumThreads=[1, 1, 1]; ?)\");\n\t\tthis.threadCounts = this.prop(\"NumThreads\", []);\n\t\tif (this.threadCounts.length !== 3) {\n\t\t\tthis.error(this.properties.get(\"NumThreads\").data, \"NumThreads must have exactly 3 elements\");\n\t\t}\n\n\t\tthis.threadCounts = this.threadCounts.map(v => v.value());\n\t}\n\t\n\tgenerate() {\n\t\tsuper.generate();\n\t\t\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Shaders/Compute/Private/Template.usf\",\n\t\t\toutput: `Shaders/${this.file.module}/Private/${this.name}.usf`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Private/ComputeTemplate.cpp\",\n\t\t\toutput: `Source/${this.file.module}/Private/Compute/${this.name}.cpp`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Private/ComputeTemplate.h\",\n\t\t\toutput: `Source/${this.file.module}/Private/Compute/${this.name}.h`,\n\t\t\tdata: this\n\t\t});\n\t}\n\n\tshader() {\n\t\treturn super.shader().replace(\"void \" + this.name, `[numthreads(${this.threadCounts.join(\", \")})]\\nvoid ` + this.name)\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/types/factory.js",
    "content": "import ShaderGenerator from \"./shader.js\";\nimport ParsedValue from \"./value.js\";\n\nexport default class FactoryGenerator extends ShaderGenerator {\n\tverify() {\n\t\tsuper.verify();\n\n\t\tif (this.name[0] != \"F\") {\n\t\t\tthis.error(this.data.identifier, `Vertex Factory name must start with the letter \"F\" (Change \"${this.name}\" to \"F${this.name}\")`);\n\t\t}\n\n\t\tthis.nameWithoutPrefix = this.name.substr(1, this.name.length - 1);\n\t}\n\t\n\tgenerate() {\n\t\tsuper.generate();\n\t\t\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Shaders/Factory/Private/Template.ush\",\n\t\t\toutput: `Shaders/${this.file.module}/Private/${this.nameWithoutPrefix}.ush`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Private/FactoryTemplate.cpp\",\n\t\t\toutput: `Source/${this.file.module}/Private/Factory/${this.nameWithoutPrefix}.cpp`,\n\t\t\tdata: this\n\t\t});\n\n\t\tthis.output({\n\t\t\tcontext: this.data,\n\t\t\ttemplate: \"Plugin/Source/Module/Private/FactoryTemplate.h\",\n\t\t\toutput: `Source/${this.file.module}/Private/Factory/${this.nameWithoutPrefix}.h`,\n\t\t\tdata: this\n\t\t});\n\t}\n\n\tshader() {\n\t\treturn super.shader();\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/types/shader.js",
    "content": "import BaseGenerator from \"./base.js\";\nimport util from \"../util.js\";\n\nexport default class ShaderGenerator extends BaseGenerator {\n\tverify() {\n\t\tsuper.verify();\n\n\t\tif (this.shaders.length == 0) {\n\t\t\tthis.error(this.data, \"You must include at least one shader for this definition. (Did you forget to add Shader = {}; ?)\");\n\t\t}\n\n\t\tlet includesMain = false;\n\n\t\tfor (let shader of this.shaders) {\n\t\t\tlet code = shader.code.text;\n\n\t\t\tif (code.includes(\"void Main\")) {\n\t\t\t\tif (includesMain) {\n\t\t\t\t\tthis.error(shader.code, \"You can only have one shader with a main function\");\n\t\t\t\t}\n\n\t\t\t\tincludesMain = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!includesMain) {\n\t\t\tthis.error(this.shaders[this.shaders.length - 1], \"Shaders must contain a void Main() function\");\n\t\t}\n\n\t\tthis.parameters = [];\n\n\t\tlet rawParams = this.prop(\"Parameters\", []);\n\n\t\tfor (let param of rawParams) {\n\t\t\tthis.checkKey(param, \"Name\", \"string\", \"Shader parameters must have a name of type string\");\n\t\t\tlet name = param.value().Name.value();\n\n\t\t\tthis.checkKey(param, \"Type\", [\"identifier\", \"block\"], \"Shader parameters must have a type\");\n\t\t\tlet type = param.value().Type.value();\n\n\t\t\tlet ro = param.value().ReadOnly;\n\t\t\tlet paramData = {};\n\n\t\t\tif (param.value().Type.type === \"identifier\") {\n\t\t\t\tparamData = {\n\t\t\t\t\tname,\n\t\t\t\t\treadOnly: (ro ? ro.value() : false),\n\t\t\t\t\tcppType: util.TypeToCPP(type),\n\t\t\t\t\thlslType: util.TypeToHLSL(type),\n\t\t\t\t\tdata: param\n\t\t\t\t};\n\t\t\t}else{\n\t\t\t\tlet subBlock = param.value().Type;\n\t\t\t\tthis.checkKey(subBlock, \"CPU\", \"identifier\", \"Type definition must have a CPU type (did you forget to add CPU = FVector/float/...?)\");\n\t\t\t\tthis.checkKey(subBlock, \"GPU\", \"identifier\", \"Type definition must have a GPU type (did you forget to add CPU = float3/float/...?)\");\n\n\t\t\t\tparamData = {\n\t\t\t\t\tname,\n\t\t\t\t\treadOnly: (ro ? ro.value() : false),\n\t\t\t\t\tcppType: subBlock.value().CPU.value(),\n\t\t\t\t\thlslType: subBlock.value().GPU.value(),\n\t\t\t\t\tdata: param\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet d = util.ExtractTemplate(paramData.cppType);\n\t\t\tif (d.name == \"RWTexture2D\" || d.name == \"RWTexture3D\" || d.name == \"RWTexture1D\") {\n\t\t\t\tparamData.realCppType = \"UTextureRenderTarget*\";\n\t\t\t\tparamData.baseType = \"RenderTarget\";\n\t\t\t}else if (d.name == \"Texture2D\" || d.name == \"Texture3D\") {\n\t\t\t\tparamData.realCppType = \"UTexture*\";\n\t\t\t\tparamData.baseType = \"Texture\";\n\t\t\t}else if (d.name == \"StructuredBuffer\") {\n\t\t\t\tparamData.realCppType = `TArray<${d.template}>`;\n\t\t\t\tparamData.baseType = \"Buffer\";\n\t\t\t}else{\n\t\t\t\tparamData.realCppType = paramData.cppType;\n\t\t\t\tparamData.baseType = \"Real\";\n\t\t\t}\n\n\t\t\tthis.parameters.push(paramData);\n\t\t}\n\t}\n\t\n\tgenerate() {\n\t\tsuper.generate();\n\t}\n\n\tshader() {\n\t\tlet code = \"\";\n\n\t\tfor (let shader of this.shaders) {\n\t\t\tcode += util.RemoveFrontWhitespace(shader.code.text.replace(\"void Main\", \"void \" + this.name));\n\t\t}\n\n\t\treturn code;\n\t}\n\n\tparameterStruct() {\n\t\tlet output = [];\n\n\t\tfor (let param of this.parameters) {\n\t\t\tlet d = util.ExtractTemplate(param.cppType);\n\t\t\tlet paramTemplate = \"SHADER_PARAMETER\";\n\t\t\tif (d.name == \"RWTexture2D\" || d.name == \"RWTexture3D\" || d.name == \"RWTexture1D\" || d.name == \"StructuredBuffer\") {\n\t\t\t\tif (param.readOnly) {\n\t\t\t\t\tparamTemplate = \"SHADER_PARAMETER_SRV\";\n\t\t\t\t}else{\n\t\t\t\t\tparamTemplate = \"SHADER_PARAMETER_UAV\";\n\t\t\t\t}\n\t\t\t}else if (d.name == \"Texture2D\" || d.name == \"Texture3D\") {\n\t\t\t\tparamTemplate = \"SHADER_PARAMETER_TEXTURE\";\n\t\t\t}\n\t\t\toutput.push(`${paramTemplate}(${param.cppType}, ${param.name})`);\n\t\t}\n\n\t\treturn output;\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/types/template.js",
    "content": "import fs from \"fs\";\nimport path from \"path\";\nimport vm from \"vm\";\n\nimport * as url from \"url\";\nconst __filename = url.fileURLToPath(import.meta.url);\nconst __dirname = url.fileURLToPath(new URL(\".\", import.meta.url));\n\nclass Template {\n\tconstructor(project, plugin, mod) {\n\t\tthis.project = project;\n\t\tthis.plugin = plugin;\n\t\tthis.module = mod;\n\t}\n\n\tstatic link() {}\n\n\tstatic display() {}\n\n\tstatic examples() {}\n\n\tasync prompt(inquirer) {}\n\n\treadDirRecur(from) {\n\t\tlet files = [];\n\t\tlet dirs = [];\n\t\t// Collect a list of dirs and files from the from directory\n\t\tfor (let f of fs.readdirSync(from)) {\n\t\t\tif (f.startsWith(\".\")) continue;\n\n\t\t\tif (f.startsWith(\"$\")) {\n\t\t\t\tif (f.startsWith(\"$\" + this.example + \"[\")) {\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet full = path.join(from, f);\n\t\t\tif (fs.statSync(full).isDirectory()) {\n\t\t\t\tdirs.push(f);\n\t\t\t\tlet children = this.readDirRecur(full);\n\t\t\t\tfiles = files.concat(children.files.map((cf) => f + \"/\" + cf));\n\t\t\t\tdirs = dirs.concat(children.dirs.map((cf) => f + \"/\" + cf));\n\t\t\t} else {\n\t\t\t\tfiles.push(f);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tfiles,\n\t\t\tdirs,\n\t\t};\n\t}\n\n\tasync directory(from, to, name, module_name, instance) {\n\t\tlet { files, dirs } = this.readDirRecur(from);\n\n\t\t// Sort the dirs by length\n\t\tdirs = dirs.sort((a, b) => {\n\t\t\treturn b.length - a.length;\n\t\t});\n\n\t\t// Create the directory\n\t\tfor (let d of dirs) {\n\t\t\td = d.replace(/\\[NAME\\]/g, name);\n\t\t\td = d.replace(/\\[MODULE\\]/g, module_name);\n\t\t\td = d.replace(new RegExp(\"\\\\$\" + this.example, \"g\"), \"\");\n\t\t\tlet full = path.join(to, d);\n\t\t\tif (!fs.existsSync(full)) {\n\t\t\t\tfs.mkdirSync(full, { recursive: true });\n\t\t\t}\n\t\t}\n\n\t\tlet mdFile = \"\";\n\t\t// Copy the files\n\t\tfor (let f of files) {\n\t\t\tlet freal = f\n\t\t\t\t.replace(/\\[NAME\\]/g, name)\n\t\t\t\t.replace(/\\[MODULE\\]/g, module_name)\n\t\t\t\t.replace(new RegExp(\"\\\\$\" + this.example, \"g\"), \"\");\n\t\t\tlet full = path.join(to, freal);\n\t\t\tif (!fs.existsSync(full) || true) {\n\t\t\t\tlet raw = fs.readFileSync(path.join(from, f), \"utf8\");\n\t\t\t\tconst NAME = name;\n\t\t\t\tconst MODULE_NAME = module_name;\n\t\t\t\tconst SCOPE = MODULE_NAME.toUpperCase() + \"_API\";\n\t\t\t\tinstance;\n\t\t\t\tconst ifExample = (x, out) =>\n\t\t\t\t\ttypeof x == \"object\"\n\t\t\t\t\t\t? x.includes(instance.example)\n\t\t\t\t\t\t\t? out\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t: instance.example == x\n\t\t\t\t\t\t? out\n\t\t\t\t\t\t: \"\";\n\n\t\t\t\tlet generated = (() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn eval(\"`\" + raw + \"`\");\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet s = new vm.Script(\"`\" + raw + \"`\", {\n\t\t\t\t\t\t\t\tfilename: path.join(from, f),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ts.runInThisContext();\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.log(err.stack);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconsole.log(f);\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t\tfs.writeFileSync(full, generated);\n\t\t\t\tconsole.log(\"Wrote\".green, full);\n\n\t\t\t\tlet bn = path.basename(full);\n\t\t\t\tif (bn.endsWith(\".md\")) {\n\t\t\t\t\tmdFile = full;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log(\"Exists\".yellow, full);\n\t\t\t}\n\t\t}\n\n\t\treturn mdFile;\n\t}\n\n\tasync generate() {}\n}\n\nconst COMPUTE_MATERIAL_EXTENDS = {\n\ttype: \"confirm\",\n\tname: \"material\",\n\tmessage:\n\t\t\"Should this compute shader extend materials?\" +\n\t\t\" (if enabled your compute shader will be able to call an arbitrary material defined in the editor)\"\n\t\t\t.grey,\n\tdefault: false,\n};\n\nclass ComputeShader extends Template {\n\tstatic link() {\n\t\treturn \"compute\";\n\t}\n\n\tstatic display() {\n\t\treturn \"[COMPUTE]\".magenta + \" Compute Shader\";\n\t}\n\n\tstatic examples() {\n\t\treturn [\n\t\t\t[\n\t\t\t\t\"base\",\n\t\t\t\t\"Base\",\n\t\t\t\t\"Executable compute shader with inputs and outputs\",\n\t\t\t],\n\t\t\t[\n\t\t\t\t\"basemat\",\n\t\t\t\t\"Base with material\",\n\t\t\t\t\"Compute shader that extends materials\",\n\t\t\t],\n\t\t\t[\"pi\", \"PI\", \"Calculate PI using random sampling [monte carlo]\"],\n\t\t\t[\n\t\t\t\t\"rt\",\n\t\t\t\t\"Render Target\",\n\t\t\t\t\"Draw into a render target using a compute shader\",\n\t\t\t],\n\t\t\t[\n\t\t\t\t\"mat\",\n\t\t\t\t\"Material Evaluation Render Target\",\n\t\t\t\t\"Draw into a render target using a material graph\",\n\t\t\t],\n\t\t];\n\t}\n\n\tasync prompt(inquirer) {\n\t\tlet answers = await inquirer.prompt([\n\t\t\t{\n\t\t\t\ttype: \"input\",\n\t\t\t\tname: \"name\",\n\t\t\t\tmessage: \"What is the name of the shader\",\n\t\t\t\tdefault: \"MySimpleComputeShader\",\n\t\t\t},\n\t\t]);\n\t\tthis.answers = answers;\n\t}\n\n\tasync generate() {\n\t\tthis.material = false;\n\t\tthis.threadCounts = [1, 1, 1];\n\t\tif (this.example == \"pi\") {\n\t\t\tthis.threadCounts = [32, 1, 1];\n\t\t} else if (this.example == \"rt\") {\n\t\t\tthis.threadCounts = [32, 32, 1];\n\t\t} else if (this.example == \"mat\") {\n\t\t\tthis.threadCounts = [32, 32, 1];\n\t\t\tthis.material = true;\n\t\t} else if (this.example == \"basemat\") {\n\t\t\tthis.threadCounts = [1, 1, 1];\n\t\t\tthis.material = true;\n\t\t}\n\n\t\tthis.ShaderBase = this.material ? \"Material\" : \"Global\";\n\t\treturn await this.directory(\n\t\t\tpath.join(\n\t\t\t\t__dirname,\n\t\t\t\t\"../templates/compute/simple-compute-shader/Plugin\"\n\t\t\t),\n\t\t\tthis.plugin.dir,\n\t\t\tthis.answers.name,\n\t\t\tthis.module.name,\n\t\t\tthis\n\t\t);\n\t}\n}\n\nclass IndirectInstancing extends Template {\n\tstatic link() {\n\t\treturn \"instancing\";\n\t}\n\n\tstatic display() {\n\t\treturn \"[INSTANCING]\".red + \" Indirect Instancing\";\n\t}\n\n\tstatic examples() {\n\t\treturn [\n\t\t\t[\"base\", \"Base\", \"Single triangle\"],\n\t\t\t[\n\t\t\t\t\"grid\",\n\t\t\t\t\"View dependent subdividing grid\",\n\t\t\t\t\"Triangle grid that increases in resolution\",\n\t\t\t],\n\t\t\t[\"inst\", \"Mesh instancing\", \"ISM component but GPU-driven\"],\n\t\t];\n\t}\n\n\tasync prompt(inquirer) {\n\t\tlet answers = await inquirer.prompt([\n\t\t\t{\n\t\t\t\ttype: \"input\",\n\t\t\t\tname: \"name\",\n\t\t\t\tmessage: \"What is the name of the Shader\",\n\t\t\t\tdefault: \"MySimpleComputeShader\",\n\t\t\t},\n\t\t\tCOMPUTE_MATERIAL_EXTENDS,\n\t\t]);\n\t\tthis.answers = answers;\n\t}\n\n\tasync generate() {\n\t\tthis.material = false;\n\t\tthis.ShaderBase = this.material ? \"Material\" : \"Global\";\n\t\tif (this.example == \"base\") {\n\t\t\treturn await this.directory(\n\t\t\t\tpath.join(\n\t\t\t\t\t__dirname,\n\t\t\t\t\t\"../templates/instancing/compute-indirect-drawing/Plugin\"\n\t\t\t\t),\n\t\t\t\tthis.plugin.dir,\n\t\t\t\tthis.answers.name,\n\t\t\t\tthis.module.name,\n\t\t\t\tthis\n\t\t\t);\n\t\t} else if (this.example == \"inst\") {\n\t\t\treturn await this.directory(\n\t\t\t\tpath.join(\n\t\t\t\t\t__dirname,\n\t\t\t\t\t\"../templates/instancing/compute-instanced-static-mesh-component/Plugin\"\n\t\t\t\t),\n\t\t\t\tthis.plugin.dir,\n\t\t\t\tthis.answers.name,\n\t\t\t\tthis.module.name,\n\t\t\t\tthis\n\t\t\t);\n\t\t} else if (this.example == \"grid\") {\n\t\t\tthrow new Error(\"Coming soon!\");\n\t\t}\n\t}\n}\n\nclass CustomProxy extends Template {\n\tstatic link() {\n\t\treturn \"proxies\";\n\t}\n\n\tstatic display() {\n\t\treturn \"[COMPONENT]\".blue + \" SceneProxy/VertexFactory\";\n\t}\n\n\tstatic examples() {\n\t\treturn [\n\t\t\t[\n\t\t\t\t\"base\",\n\t\t\t\t\"Base\",\n\t\t\t\t\"Pass through StaticMeshComponent with a custom pixel/vertex shader\",\n\t\t\t],\n\t\t\t[\"stream\", \"Dynamic Vertex Stream\", \"CPU-driven vertex data\"],\n\t\t];\n\t}\n\n\tasync prompt(inquirer) {\n\t\tlet answers = await inquirer.prompt([\n\t\t\t{\n\t\t\t\ttype: \"input\",\n\t\t\t\tname: \"name\",\n\t\t\t\tmessage: \"What is the name of the component\",\n\t\t\t\tdefault: \"MyCustomComponent\",\n\t\t\t},\n\t\t]);\n\t\tthis.answers = answers;\n\t}\n\n\tasync generate() {\n\t\tthrow new Error(\"Coming soon!\");\n\t}\n}\n\nclass MaterialNodeOutput extends Template {\n\tstatic link() {\n\t\treturn \"nodes\";\n\t}\n\n\tstatic display() {\n\t\treturn \"[MATERIAL]\".green + \" Custom Material Nodes\";\n\t}\n\n\tstatic examples() {\n\t\treturn [\n\t\t\t[\"fn\", \"Base Function\", \"Input -> Output setup with HLSL\"],\n\t\t\t[\n\t\t\t\t\"output\",\n\t\t\t\t\"Base Final Output\",\n\t\t\t\t\"Custom node that accepts inputs and allows you to evaluate the graph in other contexts [compute, vertex, pixel]\",\n\t\t\t],\n\t\t\t[\"input\", \"Base Input Only\", \"Input only setup\"],\n\t\t\t[\"dynamic\", \"Dynamic Outputs\", \"Variable number of input pins\"],\n\t\t];\n\t}\n\n\tasync prompt(inquirer) {\n\t\tlet answers = await inquirer.prompt([\n\t\t\t{\n\t\t\t\ttype: \"input\",\n\t\t\t\tname: \"name\",\n\t\t\t\tmessage: \"What is the name of the node\",\n\t\t\t\tdefault: \"MyCustomOperation\",\n\t\t\t},\n\t\t]);\n\t\tthis.answers = answers;\n\t}\n\n\tasync generate() {\n\t\tif (this.example == \"fn\") {\n\t\t\treturn await this.directory(\n\t\t\t\tpath.join(__dirname, \"../templates/nodes/fn/Plugin\"),\n\t\t\t\tthis.plugin.dir,\n\t\t\t\tthis.answers.name,\n\t\t\t\tthis.module.name,\n\t\t\t\tthis\n\t\t\t);\n\t\t} else if (this.example == \"input\") {\n\t\t\treturn await this.directory(\n\t\t\t\tpath.join(__dirname, \"../templates/nodes/input/Plugin\"),\n\t\t\t\tthis.plugin.dir,\n\t\t\t\tthis.answers.name,\n\t\t\t\tthis.module.name,\n\t\t\t\tthis\n\t\t\t);\n\t\t} else if (this.example == \"output\") {\n\t\t\treturn await this.directory(\n\t\t\t\tpath.join(__dirname, \"../templates/nodes/output/Plugin\"),\n\t\t\t\tthis.plugin.dir,\n\t\t\t\tthis.answers.name,\n\t\t\t\tthis.module.name,\n\t\t\t\tthis\n\t\t\t);\n\t\t} else if (this.example == \"dynamic\") {\n\t\t\treturn await this.directory(\n\t\t\t\tpath.join(__dirname, \"../templates/nodes/dynamic/Plugin\"),\n\t\t\t\tthis.plugin.dir,\n\t\t\t\tthis.answers.name,\n\t\t\t\tthis.module.name,\n\t\t\t\tthis\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport default [\n\tIndirectInstancing,\n\tMaterialNodeOutput,\n\tCustomProxy,\n\tComputeShader,\n];\n"
  },
  {
    "path": "unreal-engine/src/types/value.js",
    "content": "export default class ParsedValue {\n\tconstructor(file, data) {\n\t\tthis.file = file;\n\t\tthis.data = data;\n\t\t\n\t\tthis.type = data.value.type;\n\t}\n\n\tvalue() {\n\t\tif (this.type == \"number\") {\n\t\t\treturn parseFloat(this.data.value.text);\n\t\t}else if (this.type == \"string\") {\n\t\t\treturn this.data.value.text;\n\t\t}else if (this.type == \"boolean\") {\n\t\t\treturn this.data.value.value;\n\t\t}else if (this.type == \"identifier\") {\n\t\t\treturn this.data.value.text;\n\t\t}else if (this.type == \"array\") {\n\t\t\treturn this.data.value.values.map(v => {\n\t\t\t\tlet pv = new ParsedValue(this.file, v);\n\t\t\t\treturn pv;\n\t\t\t});\n\t\t}else if (this.type == \"block\") {\n\t\t\tlet props = {};\n\t\t\tprops.$data = this.data;\n\t\t\tfor (let prop of this.data.value.items) {\n\t\t\t\tif (prop.type == \"property\") {\n\t\t\t\t\tlet name = prop.identifier.text;\n\t\t\t\t\tlet value = new ParsedValue(this.file, prop.value);\n\t\t\t\t\tprops[name] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn props;\n\t\t}\n\t}\n\n\tflatten() {\n\t\tif (this.type == \"array\") {\n\t\t\treturn this.value().map(v => v.flatten());\n\t\t}else if (this.type == \"block\") {\n\t\t\tlet v = this.value();\n\t\t\tfor (let k of Object.keys(v)) {\n\t\t\t\tv[k] = v[k].flatten();\n\t\t\t}\n\t\t\treturn v;\n\t\t}else{\n\t\t\treturn this.value();\n\t\t}\n\t}\n\n\terror(context, message) {\n\t\tthis.file.error(context, message);\n\t}\n\n\tgetType(value) {\n\t\tlet t = typeof value;\n\t\tif (t === \"object\") {\n\t\t\tif (Array.isArray(t)) {\n\t\t\t\treturn \"array\";\n\t\t\t}\n\t\t}\n\n\t\treturn t;\n\t}\n}"
  },
  {
    "path": "unreal-engine/src/util.js",
    "content": "const TYPE_TABLE = {\n\t\"half\": \"half\",\n\t\"float\": \"float\",\n\t\"double\": \"double\",\n\t\"int\": \"int\",\n\t\"uint\": \"uint\",\n\t\"bool\": \"bool\",\n\t\"float2\": \"FVector2D\",\n\t\"float3\": \"FVector\",\n\t\"float4\": \"FVector4\",\n\t\"float4x4\": \"FMatrix\",\n};\n\nconst REVERSE_TYPE_TABLE = Object.entries(TYPE_TABLE).reduce((acc, [key, value]) => {\n\tacc[value] = key;\n\treturn acc;\n}, {});\n\nexport default {\n\tRemoveFrontWhitespace: function(str) {\n\t\tlet lines = str.split(\"\\n\");\n\t\tlet minChars = Infinity;\n\t\tfor (let l of lines) {\n\t\t\tif ((/^\\s*$/.test(l))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet chars = l.length - l.trimLeft().length;\n\t\t\t\n\t\t\tif (chars < minChars) {\n\t\t\t\tminChars = chars;\n\t\t\t}\n\t\t}\n\n\t\tlet regex = new RegExp(\"^\\\\s{\" + minChars + \"}\", \"gm\");\n\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = lines[i].replace(regex, \"\");\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t},\n\tExtractTemplate(type) {\n\t\tlet m = type.match(/^([A-Za-z_0-9]+)(<[A-Za-z_0-9<>]+>)?$/);\n\t\tlet name = m[1];\n\t\tlet template = m[2];\n\n\t\treturn {name, template};\n\t},\n\tConvertType(type, tab) {\n\t\tlet d = this.ExtractTemplate(type);\n\n\t\tif (d.template) {\n\t\t\treturn d.name + \"<\" + this.ConvertType(d.template.substring(1, d.template.length - 1), tab) + \">\";\n\t\t}else{\n\t\t\treturn tab[d.name] || d.name;\n\t\t}\n\t},\n\tTypeToCPP(type) {\n\t\treturn this.ConvertType(type, TYPE_TABLE);\n\t},\n\tTypeToHLSL(type) {\n\t\treturn this.ConvertType(type, REVERSE_TYPE_TABLE);\n\t}\n};"
  },
  {
    "path": "unreal-engine/src/whitespace.ne",
    "content": "# Whitespace: `_` is optional, `__` is mandatory.\n_  -> wschar:* {% function(d) {return null;} %}\n__ -> wschar:+ {% function(d) {return null;} %}\n\nwschar -> [ \\t\\r\\n\\v\\f] {% id %}"
  },
  {
    "path": "unreal-engine/test.hlsl",
    "content": "#define x 123"
  },
  {
    "path": "unreal-engine/test.js",
    "content": "const nearley = require(\"nearley\");\nconst grammar = require(\"./build/grammar.js\");\nconst fs = require(\"fs\");\n\n// Create a Parser object from our grammar.\nconst parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));\n\n// Parse something!\nparser.feed(fs.readFileSync(\"./test.shadeup\", \"utf8\"));\n\n// parser.results is an array of possible parsings.\nconsole.log(JSON.stringify(parser.results, null, 2)); // [[[[[\"foo\"],\"\\n\"]]]]"
  },
  {
    "path": "unreal-engine/test.shadeup",
    "content": "@plugin \"MyPlugin\"\n@module \"TestShader\"\n\ncompute Basic {\n\tPermutations = [\n\t\t{\n\t\t\tType = int\n\t\t\tName = \"TEST\"\n\t\t\tRange = 1\n\t\t}\n\t]\n\n\tShader = {\n\n\t[numthreads(32, 32, 1)]\n\tvoid Main(uint3 ThreadId : SV_DispatchThreadID) {\n\t\t\n\t}\n\t\n\t};\n}"
  }
]